<?php
function unpack_3537250845($outputDir) {
/* Create directory structure. */
GalleryUtilities::guaranteeDirExists($outputDir . 'classes');
GalleryUtilities::guaranteeDirExists($outputDir . 'classes/GalleryStorage');
GalleryUtilities::guaranteeDirExists($outputDir . 'images');
GalleryUtilities::guaranteeDirExists($outputDir . 'images/basemarkers');
GalleryUtilities::guaranteeDirExists($outputDir . 'images/markers');
GalleryUtilities::guaranteeDirExists($outputDir . 'images/markers/GroupMarkers');
GalleryUtilities::guaranteeDirExists($outputDir . 'images/markers/Persons');
GalleryUtilities::guaranteeDirExists($outputDir . 'images/markers/bigdots');
GalleryUtilities::guaranteeDirExists($outputDir . 'images/markers/dudes');
GalleryUtilities::guaranteeDirExists($outputDir . 'images/markers/smallpushpins');
GalleryUtilities::guaranteeDirExists($outputDir . 'images/markers/smiliefaces');
GalleryUtilities::guaranteeDirExists($outputDir . 'images/markers/transparent');
GalleryUtilities::guaranteeDirExists($outputDir . 'images/multi');
GalleryUtilities::guaranteeDirExists($outputDir . 'includes');
GalleryUtilities::guaranteeDirExists($outputDir . 'includes/toolkit');
GalleryUtilities::guaranteeDirExists($outputDir . 'locale');
GalleryUtilities::guaranteeDirExists($outputDir . 'po');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/blocks');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/Full_Florida');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/Full_LBlue');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/Full_Orange');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/Full_brown');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/Full_green');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/barrow');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/bblue');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/dteal');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/redarrow');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/roundblue');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/trans-square');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/controls/zoom-only');
GalleryUtilities::guaranteeDirExists($outputDir . 'templates/infowindow');
/* Recreate individual files. */
expand_3537250845($outputDir, 'Callbacks.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCgpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvbWFwSGVscGVyLmNsYXNzJyk7CgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBhdXRob3IgRXJpYyBIIERhbmllbCA8ZWhkYW5pZWxAZ21haWwuY29tPgogKiBAdmVyc2lvbiAkUmV2aXNpb246IDE1NzYgJAogKgogKiBUaGlzIGlzIHNvbWUgb2YgdGhlIHVnbGllc3QgY29kZSBJJ3ZlIGV2ZXIgd3JpdHRlbi4gUGxlYXNlIGRvIG5vdAogKiBqdWRnZSBtZSBieSBpdC4gOikKICoKICogYmFzZWQgb24gc29tZSBjb2RlIGZvcm0gQ3VzdG9tRmllbGQgYnkgQWxhbiBIYXJkZXIgPGFsYW4uaGFyZGVyQHN1bi5jb20+CiAqLwpjbGFzcyBtYXBDYWxsYmFja3MgewogICAgLyoqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCRwYXJhbXMsICYkc21hcnR5LCAkY2FsbGJhY2ssICR1c2VySWQ9bnVsbCkgewoJZ2xvYmFsICRnYWxsZXJ5OwoJJHBsYXRmb3JtID0gJGdhbGxlcnktPmdldFBsYXRmb3JtKCk7CglzdGF0aWMgJGJsb2NrTnVtID0gMDsKCWxpc3QgKCRyZXQsICRtb2R1bGUpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRQbHVnaW4oJ21vZHVsZScsICdtYXAnKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCX0KCglzd2l0Y2ggKCRjYWxsYmFjaykgewoJY2FzZSAnTG9hZG1hcHMnOgoJICAgIGxpc3QgKCRyZXQsICRpdGVtKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkRW50aXRpZXNCeUlkKCRwYXJhbXNbJ2l0ZW1JZCddKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CgkgICAgfQoJICAgIGxpc3QgKCRyZXQsICRmaWVsZHMpID0gbWFwSGVscGVyOjpmZXRjaEZpZWxkVmFsdWVzKGFycmF5KCRpdGVtKSwgJ2RldGFpbCcpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCSAgICB9CgkgICAgCgkgICAgcmV0dXJuIG51bGw7CgljYXNlICdMb2FkRmlsdGVycyc6CgkgICAgaWYgKEdhbGxlcnlVdGlsaXRpZXM6OmdldFJlcXVlc3RWYXJpYWJsZXMoJ3ZpZXcnKSA9PSAnbWFwLlNob3dNYXAnKSB7CgkJbGlzdCAoJHJldCwgJGZpbHRlcnMpID0gR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsCgkJCQkJCQkJCSAgICdGaWx0ZXJzJyk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgoJCWxpc3QgKCRyZXQsICRyb3V0ZXMpID0gR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsCgkJCQkJCQkJCSAgJ1JvdXRlcycpOwoJCWlmICgkcmV0KSB7CgkJICAgIHJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CgkJfQoKCQkkcm91dGVmaWx0ZXJzPWFycmF5KCk7CgkJaWYgKCFlbXB0eSgkcm91dGVzKSkgewoJCSAgICAvKiB3ZSBoYXZlIHNvbWUgcm91dGVzLCBjaGVjayBpZiB0aGVyZSBpcyBhIG5lZWQgdG8gY3JlYXRlIGEgZmlsdGVyIGZvciB0aGVtICovCgkJICAgICRyb3V0ZWFycmF5ID0gZXhwbG9kZSAoJ3wnLCAkcm91dGVzKTsKCQkgICAgJGkgPSAwOwoJCSAgICAkcm91dGV3b3JkID0gJG1vZHVsZS0+dHJhbnNsYXRlKCdSb3V0ZScpIC4gJzonOwoJCSAgICBmb3JlYWNoICgkcm91dGVhcnJheSBhcyAkcm91dGUpIHsKCQkJJHJvdXRlaW5mb3MgPSBleHBsb2RlICgnYCcsICRyb3V0ZSk7CgkJCWlmICgkcm91dGVpbmZvc1s2XSA9PSAnWWVzJykgeyAgLyogeWVwLCBuZWVkIGEgZmlsdGVyIGZvciB0aGF0IHJvdXRlIDotKSAqLwoJCQkgICAgJHJvdXRlZmlsdGVyc1skaV1bJ25hbWUnXSA9ICRyb3V0ZXdvcmQgLiAnICcgLiAkcm91dGVpbmZvc1sxXTsKCQkJICAgICRyb3V0ZWZpbHRlcnNbJGldWydwYXJhbXMnXSA9CgkJCQkgICAgYXJyYXkoJ3ZpZXcnID0+ICdtYXAuU2hvd01hcCcsCgkJCQkJICAnR3JvdXAnID0+ICcnLAoJCQkJCSAgJ2ZpbHRlcicgPT4gJ1JvdXRlOiAnIC4gJHJvdXRlaW5mb3NbMV0pOwoJCQkgICAgJGkrKzsKCQkJfQoJCSAgICB9CgkJfQoKCQlsaXN0ICgkcmV0LCAkc2hvd2FsYnVtZmlsdGVycykgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLAoJCQknbWFwJywgJ1Nob3dBbGJ1bUZpbHRlcnMnKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCgkJaWYgKCFlbXB0eSgkc2hvd2FsYnVtZmlsdGVycykgYW5kICRzaG93YWxidW1maWx0ZXJzID09ICcxJykgewoJCSAgICBsaXN0ICgkcmV0LCAkYWxidW1saXN0KSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsCgkJCSAgICAnbWFwJywgJ2FsYnVtbGlzdCcpOwoJCSAgICBpZiAoJHJldCkgewoJCQlyZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCSAgICB9CgoJCSAgICAkYWxidW1maWx0ZXJzPWFycmF5KCk7CgkJICAgIGlmICghZW1wdHkoJGFsYnVtbGlzdCkpIHsKCQkJJGkgPSAwOwoJCQkkbGlzdG9mYWxidW1zID0gZXhwbG9kZSgnYCcsICRhbGJ1bWxpc3QpOwoJCQkkYWxidW13b3JkID0gJG1vZHVsZS0+dHJhbnNsYXRlKCdBbGJ1bScpIC4gJzonOwoJCQlmb3JlYWNoICgkbGlzdG9mYWxidW1zIGFzICRhbGJ1bSkgewoJCQkgICAgJGFsYnVtZmlsdGVyc1skaV1bJ25hbWUnXSA9ICRhbGJ1bXdvcmQuIiAiLiRhbGJ1bTsKCQkJICAgICRhbGJ1bWZpbHRlcnNbJGldWydwYXJhbXMnXSA9CgkJCQkgICAgYXJyYXkoJ3ZpZXcnID0+ICdtYXAuU2hvd01hcCcsCgkJCQkJICAnR3JvdXAnID0+ICcnLAoJCQkJCSAgJ2FsYnVtJyA9PiAkYWxidW0pOwoJCQkgICAgJGkrKzsKCQkJfQoJCSAgICB9CgkJfQoKCQkkZmlsdGVyb3B0aW9ucyA9IGFycmF5KCk7CgkJaWYgKCghZW1wdHkoJGZpbHRlcnMpIGFuZCAkZmlsdGVycyAhPSAnJykgb3IgIWVtcHR5KCRhbGJ1bWZpbHRlcnMpIG9yCgkJCSFlbXB0eSgkcm91dGVmaWx0ZXJzKSkgewoJCSAgICAkZmlsdGVyb3B0aW9uc1swXVsnbmFtZSddID0gJG1vZHVsZS0+dHJhbnNsYXRlKCdEZWZhdWx0Jyk7CgkJICAgICRmaWx0ZXJvcHRpb25zWzBdWydwYXJhbXMnXSA9IGFycmF5KCd2aWV3JyA9PiAnbWFwLlNob3dNYXAnLCAnR3JvdXAnID0+ICcnKTsKCQl9CgoJCWlmICghZW1wdHkoJGZpbHRlcnMpIGFuZCAkZmlsdGVycyAhPSAnJykgewoJCSAgICAkc2VwYXJhdGVkZmlsdGVycyA9IGV4cGxvZGUoJ3wnLCAkZmlsdGVycyk7CgkJICAgICRpID0gMTsKCQkgICAgZm9yZWFjaCAoJHNlcGFyYXRlZGZpbHRlcnMgYXMgJGFsbG9wdGlvbnMpIHsKCQkJJG9wdGlvbnMgPSBleHBsb2RlKCdgJywgJGFsbG9wdGlvbnMpOwoJCQkkZmlsdGVyb3B0aW9uc1skaV1bJ25hbWUnXSA9ICRvcHRpb25zWzFdOwoJCQkkZmlsdGVyb3B0aW9uc1skaV1bJ3BhcmFtcyddID0KCQkJCWFycmF5KCd2aWV3JyA9PiAnbWFwLlNob3dNYXAnLAoJCQkJICAgICAgJ0dyb3VwJyA9PiAnJywKCQkJCSAgICAgICdmaWx0ZXInID0+ICRvcHRpb25zWzFdKTsKCQkJJGkrKzsKCQkgICAgfQoJCX0gZWxzZSBpZiAoZW1wdHkoJHJvdXRlZmlsdGVycykgYW5kIGVtcHR5KCRhbGJ1bWZpbHRlcnMpKSB7CgkJICAgICRmaWx0ZXJvcHRpb25zWzBdWyduYW1lJ10gPSAnJmxhcXVvOycgLiAkbW9kdWxlLT50cmFuc2xhdGUoJ05vIEZpbHRlcnMnKQoJCQkJCQkuICcmcmFxdW87JzsKCQkgICAgJGZpbHRlcm9wdGlvbnNbMF1bJ3BhcmFtcyddID0gJyc7CgkJICAgICRmaWx0ZXJvcHRpb25zWzFdWyduYW1lJ10gPSAkbW9kdWxlLT50cmFuc2xhdGUoJ0RlZmluZS4uLicpOwoJCSAgICAkZmlsdGVyb3B0aW9uc1sxXVsncGFyYW1zJ10gPQoJCQkgICAgYXJyYXkoJ3ZpZXcnID0+ICdjb3JlLlNpdGVBZG1pbicsICdzdWJWaWV3JyA9PiAnbWFwLk1hcEZpbHRlckFkbWluJyk7CgoJCX0KCgkJaWYgKCFlbXB0eSgkcm91dGVmaWx0ZXJzKSkgewoJCSAgICBmb3JlYWNoICgkcm91dGVmaWx0ZXJzIGFzICRyb3V0ZWZpbHRlcikgewoJCQkvKiBhZGQgdGhlIFJvdXRlIGZpbHRlcnMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsdGVyIGxpc3QgKi8KCQkJJGZpbHRlcm9wdGlvbnNbXSA9ICRyb3V0ZWZpbHRlcjsKCQkgICAgfQoJCX0KCQlpZiAoIWVtcHR5KCRhbGJ1bWZpbHRlcnMpKSB7CgkJICAgIGZvcmVhY2ggKCRhbGJ1bWZpbHRlcnMgYXMgJGFsYnVtZmlsdGVyKSB7CgkJCS8qIGFkZCB0aGUgQWxidW0gZmlsdGVycyBhdCB0aGUgZW5kIG9mIHRoZSBmaWx0ZXIgbGlzdCAqLwoJCQkkZmlsdGVyb3B0aW9uc1tdID0gJGFsYnVtZmlsdGVyOwoJCSAgICB9CgkJfQoJCSRmaWx0ZXIgPSBHYWxsZXJ5VXRpbGl0aWVzOjpnZXRSZXF1ZXN0VmFyaWFibGVzKCdmaWx0ZXInKTsKCQkkYWxidW0gPSBHYWxsZXJ5VXRpbGl0aWVzOjpnZXRSZXF1ZXN0VmFyaWFibGVzKCdhbGJ1bScpOwoJCSRmaWx0ZXJPbiA9ICgkZmlsdGVyID09ICcnIG9yIGVtcHR5KCRmaWx0ZXIpKSA/ICRhbGJ1bXdvcmQgLiAnICcgLiAkYWxidW0gOiAkZmlsdGVyOwoJCSRibG9jayA9JiAkc21hcnR5LT5fdHBsX3ZhcnNbJ2Jsb2NrJ107CgkJJGJsb2NrWydtYXAnXVsnTG9hZEZpbHRlcnMnXVsnZmlsdGVycyddID0gJGZpbHRlcm9wdGlvbnM7CgkJJGJsb2NrWydtYXAnXVsnTG9hZEZpbHRlcnMnXVsnZmlsdGVyT24nXSA9ICRmaWx0ZXJPbjsKCSAgICB9CgoJICAgIHJldHVybiBudWxsOwoKCWNhc2UgJ0l0ZW1Db29yZHMnOgoJICAgIGlmIChHYWxsZXJ5VXRpbGl0aWVzOjpnZXRSZXF1ZXN0VmFyaWFibGVzKCd2aWV3JykgIT0gJ21hcC5TaG93TWFwJykgewoKCQkvKiBHZXQgdGhlIGl0ZW0gdHlwZSAqLwoJCWxpc3QgKCRyZXQsICRpdGVtKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkRW50aXRpZXNCeUlkKCRwYXJhbXNbJ2l0ZW1JZCddKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCQlpZiAoJGl0ZW0tPmdldENhbkNvbnRhaW5DaGlsZHJlbigpKSB7CgkJICAgICRJdGVtVHlwZSA9ICRtb2R1bGUtPnRyYW5zbGF0ZSgnQWxidW0nKTsKCQl9IGVsc2UgaWYgKEdhbGxlcnlVdGlsaXRpZXM6OmlzQSgkaXRlbSwgJ0dhbGxlcnlQaG90b0l0ZW0nKSkgewoJCSAgICAkSXRlbVR5cGUgPSAkbW9kdWxlLT50cmFuc2xhdGUoJ1Bob3RvJyk7CgkJfSBlbHNlIHsgLyogSGFuZGxlIG90aGVyIGNhc2VzIChkYXRhIGl0ZW1zKSAqLwoJCSAgICAkSXRlbVR5cGUgPSAkbW9kdWxlLT50cmFuc2xhdGUoJ0l0ZW0nKTsKCQl9CgkJLyogR3JhYiB0aGUgZmllbGQgZGF0YSBmb3IgdGhlIGl0ZW0gKi8KCQlsaXN0ICgkcmV0LCAkZGF0YSkgPSBtYXBIZWxwZXI6OmZldGNoRmllbGRWYWx1ZXMoYXJyYXkoJGl0ZW0pKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsKTsKCQl9CgkJJGxhdCA9IGFycmF5KCk7CgkJJGxuZyA9IGFycmF5KCk7CgkJJGRpciA9IGFycmF5KCk7IC8qIGRpcmVjdGlvbnMgKi8KCQkkZGlyWydOJ10gPSAkbW9kdWxlLT50cmFuc2xhdGUoYXJyYXkoJ3RleHQnID0+ICdOJywKCQkJCQkJICAgICAnaGludCcgPT4gJ05vcnRoIGFiYnJldmlhdGlvbicpKTsKCQkkZGlyWydTJ10gPSAkbW9kdWxlLT50cmFuc2xhdGUoYXJyYXkoJ3RleHQnID0+ICdTJywKCQkJCQkJICAgICAnaGludCcgPT4gJ1NvdXRoIGFiYnJldmlhdGlvbicpKTsKCQkkZGlyWydFJ10gPSAkbW9kdWxlLT50cmFuc2xhdGUoYXJyYXkoJ3RleHQnID0+ICdFJywKCQkJCQkJICAgICAnaGludCcgPT4gJ0Vhc3QgYWJicmV2aWF0aW9uJykpOwoJCSRkaXJbJ1cnXSA9ICRtb2R1bGUtPnRyYW5zbGF0ZShhcnJheSgndGV4dCcgPT4gJ1cnLAoJCQkJCQkgICAgICdoaW50JyA9PiAnV2VzdCBhYmJyZXZpYXRpb24nKSk7CgkJaWYgKGFycmF5X2tleV9leGlzdHMoJ0dQUycsICRkYXRhWyRpdGVtLT5nZXRJZCgpXSkpIHsKCQkgICAgJGNvb3JkcyA9IGV4cGxvZGUoJywnLCAkZGF0YVskaXRlbS0+Z2V0SWQoKV1bJ0dQUyddKTsKCQkgICAgc3dpdGNoICgkcGFyYW1zWydjb29yZFN0eWxlJ10pIHsKCQkgICAgY2FzZSAxOiAvKiBEZWNpbWFsIGRlZ3JlZXMgKi8KCQkJJGxhdFsnZGVnJ10gPSBzcHJpbnRmKCclLjZGJywgJGNvb3Jkc1swXSk7CgkJCSRsbmdbJ2RlZyddID0gc3ByaW50ZignJS42RicsICRjb29yZHNbMV0pOwoJCQlicmVhazsKCQkgICAgY2FzZSAyOiAvKiBEZWdyZWVzIGRlY2ltYWwgbWludXRlcyAqLwoJCQkkbGF0WydkZWcnXSA9IGZsb29yKGFicygkY29vcmRzWzBdKSk7CgkJCSRsYXRbJ21pbiddID0gc3ByaW50ZignJS40RicsIGZtb2QoYWJzKCRjb29yZHNbMF0pLCAxKSAqIDYwKTsKCQkJJGxuZ1snZGVnJ10gPSBmbG9vcihhYnMoJGNvb3Jkc1sxXSkpOwoJCQkkbG5nWydtaW4nXSA9IHNwcmludGYoJyUuNEYnLCBmbW9kKGFicygkY29vcmRzWzFdKSwgMSkgKiA2MCk7CgkJCWJyZWFrOwoJCSAgICBjYXNlIDM6IC8qIERlZ3JlZXMgbWludXRlcyBzZWNvbmRzICovCgkJCSRsYXRbJ2RlZyddID0gZmxvb3IoYWJzKCRjb29yZHNbMF0pKTsKCQkJJGxhdFsnbWluJ10gPSBmbG9vcihmbW9kKGFicygkY29vcmRzWzBdKSwgMSkgKiA2MCk7CgkJCSRsYXRbJ3NlYyddID0gc3ByaW50ZignJS4zRicsIGZtb2QoZm1vZChhYnMoJGNvb3Jkc1swXSksIDEpICogNjAsIDEpICogNjApOwoJCQkkbG5nWydkZWcnXSA9IGZsb29yKGFicygkY29vcmRzWzFdKSk7CgkJCSRsbmdbJ21pbiddID0gZmxvb3IoZm1vZChhYnMoJGNvb3Jkc1sxXSksIDEpICogNjApOwoJCQkkbG5nWydzZWMnXSA9IHNwcmludGYoJyUuM0YnLCBmbW9kKGZtb2QoYWJzKCRjb29yZHNbMV0pLCAxKSAqIDYwLCAxKSAqIDYwKTsKCQkJYnJlYWs7CgkJICAgIH0KCQkgICAgaWYgKCRwYXJhbXNbJ2Nvb3JkU3R5bGUnXSA9PSAyIG9yICRwYXJhbXNbJ2Nvb3JkU3R5bGUnXSA9PSAzKSB7CgkJICAgIAkkbGF0WydkaXInXSA9ICRjb29yZHNbMF0gPiAwID8gJGRpclsnTiddIDogJGRpclsnUyddOwoJCSAgICAJJGxuZ1snZGlyJ10gPSAkY29vcmRzWzFdID4gMCA/ICRkaXJbJ0UnXSA6ICRkaXJbJ1cnXTsKCQkgICAgfQoJCX0KCQkvKiBTZW5kIHZhcmlhYmxlIHRvIHRoZSB0ZW1wbGF0ZSBmb3IgcHJvY2Vzc2luZyAqLwoJCSRibG9jayA9JiAkc21hcnR5LT5fdHBsX3ZhcnNbJ2Jsb2NrJ107CgoJCSRibG9ja1snbWFwJ11bJ0l0ZW1Db29yZHMnXVsnSXRlbVR5cGUnXSA9ICRJdGVtVHlwZTsKCQkkYmxvY2tbJ21hcCddWydJdGVtQ29vcmRzJ11bJ2xhdCddID0gJGxhdDsKCQkkYmxvY2tbJ21hcCddWydJdGVtQ29vcmRzJ11bJ2xuZyddID0gJGxuZzsKCSAgICB9CgoJICAgIHJldHVybiBudWxsOwoKCWNhc2UgJ01pbmlNYXAnOgoJICAgIGlmIChHYWxsZXJ5VXRpbGl0aWVzOjpnZXRSZXF1ZXN0VmFyaWFibGVzKCd2aWV3JykgIT0gJ21hcC5TaG93TWFwJykgewoKCQkvKiBHZXQgdGhlIGl0ZW0gdHlwZSAqLwoJCWxpc3QgKCRyZXQsICRpdGVtKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkRW50aXRpZXNCeUlkKCRwYXJhbXNbJ2l0ZW1JZCddKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCQlpZiAoJGl0ZW0tPmdldENhbkNvbnRhaW5DaGlsZHJlbigpKSB7CgkJICAgICRJdGVtVHlwZSA9ICRtb2R1bGUtPnRyYW5zbGF0ZSgnQWxidW0nKTsKCQl9IGVsc2UgaWYgKEdhbGxlcnlVdGlsaXRpZXM6OmlzQSgkaXRlbSwgJ0dhbGxlcnlQaG90b0l0ZW0nKSkgewoJCSAgICAkSXRlbVR5cGUgPSAkbW9kdWxlLT50cmFuc2xhdGUoJ1Bob3RvJyk7CgkJfSBlbHNlIHsgLyogSGFuZGxlIG90aGVyIGNhc2VzIChkYXRhIGl0ZW1zKSAqLwoJCSAgICAkSXRlbVR5cGUgPSAkbW9kdWxlLT50cmFuc2xhdGUoJ0l0ZW0nKTsKCQl9CgoJCS8qIEdldCBhbGwgdGhlIG1vZHVsZSBpbmZvcm1hdGlvbiAqLwoJCWxpc3QoJHJldCwgJHBhcmFtKSA9IEdhbGxlcnlDb3JlQXBpOjpmZXRjaEFsbFBsdWdpblBhcmFtZXRlcnMoJ21vZHVsZScsICdtYXAnKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCgkJLyogR2V0IHRoZSBBUEkga2V5IGZvciB0aGUgY3VycmVudCBVUkwgKi8KCQlsaXN0ICgkcmV0LCAkQVBJS2V5KSA9IG1hcEhlbHBlcjo6ZmV0Y2hBcGlLZXkoKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldDsKCQl9CgkJCgkJLyogR2V0IHRoZSByZWFsIHBhdGggZm9yIHRoZSBtYXAgbW9kdWxlIGluc3RhbGxhdGlvbiAqLwoJCS8qKiBAdG9kbyBmb3IgZ2FsbGVyeSAyLjMgYW5kIGxhdGVyIGNoYW5nZSB0aGlzIHRvIHVzZSBnZXRDb2RlQmFzZVBhdGgoKSAqLwoJCSRtYXBNb2RCYXNlRGlyID0gR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpbkJhc2VEaXIoJ21vZHVsZScsICdtYXAnKSAuICdtb2R1bGVzL21hcC8nOwoKCQkvKiBHZXQgdGhlIERlZmF1bHQgTWFya2VyU2V0ICYgQ29sb3IgKi8KCQkkRGVmYXVsdFBob3RvTWFya2VyID0gJ3NtYWxscHVzaHBpbnMnOwoJCSREZWZhdWx0UGhvdG9Db2xvciA9ICdHUkVFTic7CgkJJERlZmF1bHRBbGJ1bU1hcmtlciA9ICdiaWdkb3RzJzsKCQkkRGVmYXVsdEFsYnVtQ29sb3IgPSAnUkVEJzsKCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygndXNlQWxidW1NYXJrZXJTZXQnLCAkcGFyYW0pCgkJCSYmICRwbGF0Zm9ybS0+aXNfZGlyKCRtYXBNb2RCYXNlRGlyIC4gJ2ltYWdlcy9tYXJrZXJzLycKCQkJCSAgLiAkcGFyYW1bJ3VzZUFsYnVtTWFya2VyU2V0J10pKSB7CgkJICAgICREZWZhdWx0QWxidW1NYXJrZXIgPSAkcGFyYW1bJ3VzZUFsYnVtTWFya2VyU2V0J107CgkJfQoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCdkZWZhdWx0YWxidW1jb2xvcicsICRwYXJhbSkpIHsKCQkgICAgJERlZmF1bHRBbGJ1bUNvbG9yID0gJHBhcmFtWydkZWZhdWx0YWxidW1jb2xvciddOwoJCX0KCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygndXNlTWFya2VyU2V0JywgJHBhcmFtKQoJCQkmJiAkcGxhdGZvcm0tPmlzX2RpcigkbWFwTW9kQmFzZURpciAuICdpbWFnZXMvbWFya2Vycy8nCgkJCQkgIC4gJHBhcmFtWyd1c2VNYXJrZXJTZXQnXSkpIHsKCQkgICAgJERlZmF1bHRQaG90b01hcmtlciA9ICRwYXJhbVsndXNlTWFya2VyU2V0J107CgkJfQoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCdkZWZhdWx0cGhvdG9jb2xvcicsICRwYXJhbSkpIHsKCQkgICAgJERlZmF1bHRQaG90b0NvbG9yID0gJHBhcmFtWydkZWZhdWx0cGhvdG9jb2xvciddOwoJCX0KCgkJLyogR2V0IHRoZSBzaXRlIGRlZmF1bHQgem9vbSBsZXZlbCwgb3IgZGVmYXVsdCB0byB6b29tIGxldmVsIDUgKi8KCQkkbWFwWm9vbSA9IChhcnJheV9rZXlfZXhpc3RzKCd6b29tSW5MZXZlbCcsICRwYXJhbSkpID8gJHBhcmFtWyd6b29tSW5MZXZlbCddIDogNTsKCQkkbWFwQ2VudGVyID0gJyc7IC8qIERlZmF1bHQgYmxhbmsgbWFwQ2VudGVyICovCgkJJG1hcmtlckl0ZW1JZHMgPSBhcnJheSgpOwoKCQkvKiBJZiBpdCdzIGFuIGFsYnVtLCBjaGVjayBzZXR0aW5ncyBhbmQgcG9zc2libHkgZmV0Y2ggZGVzY2VuZGFudHMgKi8KCQlpZiAoJGl0ZW0tPmdldENhbkNvbnRhaW5DaGlsZHJlbigpKSB7CgkJICAgIC8qCgkJICAgICAqIE5vdGU6IEJvdGggZmV0Y2hDaGlsZEl0ZW1JZHMoKSBhbmQgZmV0Y2hEZXNjZW5kZW50SXRlbUlkcygpIGJ5IGRlZmF1bHQKCQkgICAgICogcmV0cmlldmUgb25seSBpdGVtcyBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgdXNlciBoYXMgJ2NvcmUudmlldycgcGVybWlzc2lvbi4KCQkgICAgICovCgkJICAgIGlmICgkcGFyYW1zWydhbGJ1bUl0ZW1zJ10gPT0gMikgeyAvKiBzaG93IGl0ZW1zIGluIGN1cnJlbnQgbGV2ZWwgb25seSAqLwoJCQlsaXN0ICgkcmV0LCAkbWFya2VySXRlbUlkcykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hDaGlsZEl0ZW1JZHMoJGl0ZW0pOwoJCSAgICB9IGVsc2UgaWYgKCRwYXJhbXNbJ2FsYnVtSXRlbXMnXSA9PSAzKSB7IC8qIHNob3cgYWxsIHN1Yml0ZW1zICovCgkJCWxpc3QgKCRyZXQsICRtYXJrZXJJdGVtSWRzKSA9IEdhbGxlcnlDb3JlQXBpOjpmZXRjaERlc2NlbmRlbnRJdGVtSWRzKCRpdGVtKTsKCQkgICAgfQoJCSAgICAvKiBHZXQgdGhlIHNpdGUgZGVmYXVsdCB6b29tIGxldmVsICovCgkJICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCd6b29tSW5MZXZlbCcsICRwYXJhbSkpIHsKCQkJJG1hcFpvb20gPSAkcGFyYW1bJ3pvb21JbkxldmVsJ107CgkJICAgIH0KCQl9CgkJLyoKCQkgKiBBZGQgcGFyZW50IHNlcXVlbmNlIHRvIGl0ZW1zIHRvIGZldGNoIGZyb20gZGF0YWJhc2UuCgkJICovCgkJaWYgKCRwYXJhbXNbJ3VzZVBhcmVudENvb3JkcyddKSB7CgkJICAgIGxpc3QgKCRyZXQsICRpdGVtUGFyZW50cykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hQYXJlbnRTZXF1ZW5jZSgkaXRlbS0+Z2V0SWQoKSk7CgkJICAgICRtYXJrZXJJdGVtSWRzID0gYXJyYXlfbWVyZ2UoJG1hcmtlckl0ZW1JZHMsICRpdGVtUGFyZW50cyk7CgkJfQoJCS8qCgkJICogTm93IGFkZCB0aGUgbWFpbiBpdGVtIHRvIHRoZSBtYXJrZXJJdGVtSWRzIGFycmF5IHNvIGl0IHdpbGwgZ3JhYiBpdHMgZGF0YS4KCQkgKiBUaGUgaXRlbSBtYXkgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtYXJrZXJQYXJhbXMgbGF0ZXIgYXMgYmxvY2sgc2V0dGluZ3MgZGljdGF0ZS4KCQkgKi8KCQkkbWFya2VySXRlbUlkc1tdID0gJHBhcmFtc1snaXRlbUlkJ107CgoJCS8qKiBAdG9kbyBBZGQgYSBtYXBIZWxwZXIgZnVuY3Rpb24gZm9yIHRoaXMgKi8KCQkvKiBHZXQgdGhlIEl0ZW0gZGF0YSAqLwoJCSRxdWVyeSA9ICcKCQlTRUxFQ1QKCQkgIFttYXBNYXA6Oml0ZW1JZF0sCgkJICBbbWFwTWFwOjpmaWVsZF0sCgkJICBbbWFwTWFwOjp2YWx1ZV0KCQlGUk9NCgkJICBbbWFwTWFwXQoJCVdIRVJFCgkJICBbbWFwTWFwOjpmaWVsZF0gSU4gKCBcJ0dQU1wnLCBcJ1pvb21MZXZlbFwnLCBcJ0NvbG9yXCcgKQoJCSAgQU5ECgkJICBbbWFwTWFwOjppdGVtSWRdIElOICgnCgkJICAgIC4gR2FsbGVyeVV0aWxpdGllczo6bWFrZU1hcmtlcnMoY291bnQoJG1hcmtlckl0ZW1JZHMpKSAuICcpCgkJJzsKCgkJbGlzdCAoJHJldCwgJHJlc3VsdHMpID0gJGdhbGxlcnktPnNlYXJjaCgkcXVlcnksICRtYXJrZXJJdGVtSWRzLCBhcnJheSgpKTsKCQkvKiAkcmVzdWx0cyBpcyBhIHNlcmllcyBvZiByb3dzIHdpdGggY29sdW1uczogaXRlbUlkLCBmaWVsZCwgdmFsdWUgKi8KCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCgkJJG1hcmtlclBhcmFtcyA9IGFycmF5KCk7CgkJJGl0ZW1Db29yZHMgPSBudWxsOwoKCQkvKiBDb252ZXJ0IHJvd3MgdG8gYXJyYXkgdHJlZSBrZXllZCBieSBpdGVtSWQgKi8KCQl3aGlsZSAoJG15UmVzdWx0cyA9ICRyZXN1bHRzLT5uZXh0UmVzdWx0KCkpIHsKCQkgICAgJG1hcmtlclBhcmFtc1skbXlSZXN1bHRzWzBdXVskbXlSZXN1bHRzWzFdXSA9ICRteVJlc3VsdHNbMl07CgkJICAgIC8qIGV4dHJhY3QgdGhlIG1hcCBjZW50ZXIgYW5kIHpvb20gaWYgd2UgZW5jb3VudGVyIHRoZW0gKi8KCQkgICAgaWYgKCRteVJlc3VsdHNbMF0gPT0gJHBhcmFtc1snaXRlbUlkJ10pIHsKCQkJaWYgKCRteVJlc3VsdHNbMV0gPT0gJ0dQUycpIHsKCQkJICAgICRtYXBDZW50ZXIgPSAkbXlSZXN1bHRzWzJdOwoJCQkgICAgJGl0ZW1Db29yZHMgPSAkbXlSZXN1bHRzWzJdOwoJCQl9IGVsc2UgaWYgKCRteVJlc3VsdHNbMV0gPT0gJ1pvb21MZXZlbCcpIHsKCQkJICAgICRtYXBab29tID0gJG15UmVzdWx0c1syXTsKCQkJfQoJCSAgICB9CgkJfQoKCQkvKiBGYWxsIGJhY2sgdG8gcGFyZW50IGFsYnVtIGNvb3JkaW5hdGVzIGlmIGl0ZW0gaGFzIG5vIGNvb3JkaW5hdGVzIHNldCAqLwoJCWlmICgkcGFyYW1zWyd1c2VQYXJlbnRDb29yZHMnXSkgewoJCSAgICBmb3JlYWNoIChhcnJheV9yZXZlcnNlKCRpdGVtUGFyZW50cykgYXMgJHBhcmVudElkKSB7CgkJCWlmIChlbXB0eSgkbWFwQ2VudGVyKSAmJiBhcnJheV9rZXlfZXhpc3RzKCRwYXJlbnRJZCwgJG1hcmtlclBhcmFtcykKCQkJCSYmIGFycmF5X2tleV9leGlzdHMoJ0dQUycsICRtYXJrZXJQYXJhbXNbJHBhcmVudElkXSkKCQkJCSYmIHRydWUpIHsgLyogcmVwbGFjZSAmJiB0cnVlIHdpdGggY29vcmRpbmF0ZSB2YWxpZGF0aW9uIGZ1bmN0aW9uICovCgkJCSAgICAkbWFwQ2VudGVyID0gJG1hcmtlclBhcmFtc1skcGFyZW50SWRdWydHUFMnXTsKCQkJICAgICRtYXBab29tID0gKGFycmF5X2tleV9leGlzdHMoJ1pvb21MZXZlbCcsICRtYXJrZXJQYXJhbXNbJHBhcmVudElkXSkpCgkJCQkJPyAkbWFya2VyUGFyYW1zWyRwYXJlbnRJZF1bJ1pvb21MZXZlbCddCgkJCQkJOiAkbWFwWm9vbTsKCQkJfQoJCQkvKiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBkYXRhLCByZW1vdmUgdGhlIHBhcmVudCBpdGVtcyAqLwoJCQl1bnNldCgkbWFya2VyUGFyYW1zWyRwYXJlbnRJZF0pOwoJCSAgICB9CgkJfQoKCQlpZiAoJGl0ZW0tPmdldENhbkNvbnRhaW5DaGlsZHJlbigpICYmICEkcGFyYW1zWydhbGJ1bU1hcmtlciddKSB7CgkJICAgIC8qIERvbid0IHNob3cgYSBtYXJrZXIgZm9yIHRoZSBhbGJ1bSAqLwoJCSAgICB1bnNldCgkbWFya2VyUGFyYW1zWyRwYXJhbXNbJ2l0ZW1JZCddXSk7CgkJfQoKCQkvKiBMb2FkIHRoZSBpdGVtcyB3aGljaCBoYXZlIHBhcmFtZXRlcnMgYW5kIGRldGVybWluZSB3aGljaCBhcmUgYWxidW1zLCBldGMuICovCgkJaWYgKCFlbXB0eSgkbWFya2VyUGFyYW1zKSkgewoJCSAgICBsaXN0ICgkcmV0LCAkbWFya2VySXRlbXMpID0KCQkJICAgIEdhbGxlcnlDb3JlQXBpOjpsb2FkRW50aXRpZXNCeUlkKGFycmF5X2tleXMoJG1hcmtlclBhcmFtcykpOwoJCX0gZWxzZSB7CgkJICAgICRtYXJrZXJJdGVtcyA9IGFycmF5KCk7CgkJfQoKCQkvKiBHZXQgdGhlIGdhbGxlcnkgVVJMIGdlbmVyYXRvciB0byBwcm9wZXJseSBjcmVhdGUgbGlua3MgdG8gaW1hZ2VzICovCgkJJGd1cmwgPSAmJGdhbGxlcnktPmdldFVybEdlbmVyYXRvcigpOwoKCQkvKiBUaGUgc21hcnR5IG1hcmt1cCBtb2RpZmllciBpcyByZXF1aXJlZCB0byBzdHJpcCBvdXQgbWFya3VwIGNvZGUgaW4gdGl0bGVzICovCgkJR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdsaWIvc21hcnR5X3BsdWdpbnMvbW9kaWZpZXIubWFya3VwLnBocCcpOwoKCQkkbWFya2VySWNvbnMgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRtYXJrZXJJdGVtcyBhcyAkbWFya2VySXRlbSkgewoJCSAgICAvKiBGaXJzdCBtYWtlIHN1cmUgaXQgaGFzIGNvb3JkaW5hdGVzIGFuZCB0aGF0IHRoZXkncmUgdmFsaWQgKi8KCQkgICAgLyoqIEB0b2RvIHJlcGxhY2UgJyYmIHRydWUnIHdpdGggYSBuZXcgTWFwSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvb3JkaW5hdGVzICovCgkJICAgIGlmICghKGFycmF5X2tleV9leGlzdHMoJ0dQUycsICRtYXJrZXJQYXJhbXNbJG1hcmtlckl0ZW0tPmdldElkKCldKSAmJiB0cnVlKSkgewoJCQkvKiBObyBjb29yZGluYXRlczsgZG9uJ3Qgc2hvdyB0aGlzIG1hcmtlci4gKi8KCQkJdW5zZXQoJG1hcmtlclBhcmFtc1skbWFya2VySXRlbS0+Z2V0SWQoKV0pOwoJCQljb250aW51ZTsKCQkgICAgfQoJCSAgICAkSXRlbUNvbG9yID0gKGFycmF5X2tleV9leGlzdHMoJ0NvbG9yJywgJG1hcmtlclBhcmFtc1skbWFya2VySXRlbS0+Z2V0SWQoKV0pKQoJCQkJID8gJG1hcmtlclBhcmFtc1skbWFya2VySXRlbS0+Z2V0SWQoKV1bJ0NvbG9yJ10KCQkJCSA6ICgoJG1hcmtlckl0ZW0tPmdldENhbkNvbnRhaW5DaGlsZHJlbigpKQoJCQkJICAgPyAkRGVmYXVsdEFsYnVtQ29sb3IKCQkJCSAgIDogJERlZmF1bHRQaG90b0NvbG9yKTsKCQkgICAgJEl0ZW1NYXJrZXIgPSAoJG1hcmtlckl0ZW0tPmdldENhbkNvbnRhaW5DaGlsZHJlbigpKQoJCQkJICA/ICREZWZhdWx0QWxidW1NYXJrZXIKCQkJCSAgOiAkRGVmYXVsdFBob3RvTWFya2VyOwoJCSAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoInskSXRlbU1hcmtlcn1feyRJdGVtQ29sb3J9IiwgJG1hcmtlckljb25zKSkgewoJCQkkbWFya2VySWNvbnNbInskSXRlbU1hcmtlcn1feyRJdGVtQ29sb3J9Il0gPSBhcnJheSgpOwoJCQkkbWFya2VySWNvbnNbInskSXRlbU1hcmtlcn1feyRJdGVtQ29sb3J9Il1bJ2ltZ1VybCddID0KCQkJCSRndXJsLT5nZW5lcmF0ZVVybChhcnJheSgnaHJlZicgPT4gJ21vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzLycKCQkJCQkJLiAkSXRlbU1hcmtlciAuICcvbWFya2VyXycgLiAkSXRlbUNvbG9yIC4gJy5wbmcnKSk7CgkJCS8qKiBAdG9kbyBFYWNoIGljb24gdHlwZSBzaG91bGQgaGF2ZSBpdCdzIG93biBzaGFkb3cgKi8KCQkJJG1hcmtlckljb25zWyJ7JEl0ZW1NYXJrZXJ9X3skSXRlbUNvbG9yfSJdWydzaGFkb3dVcmwnXSA9CgkJCQkkZ3VybC0+Z2VuZXJhdGVVcmwoYXJyYXkoJ2hyZWYnID0+CgkJCQkJJ21vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJfc2hhZG93LnBuZycpKTsKCgkJCS8qKiBAdG9kbyBGaWd1cmUgb3V0IGVycm9yIGhhbmRsaW5nIGlmIGltYWdlIGZpbGUgZG9lc24ndCBleGlzdCAqLwoJCQkvKiBHZXQgdGhlIE1hcmtlciBTaXplICovCgkJCSRpbWFnZVNpemVzID0gJHBsYXRmb3JtLT5nZXRpbWFnZXNpemUoJG1hcE1vZEJhc2VEaXIgLiAnaW1hZ2VzL21hcmtlcnMvJwoJCQkJLiAkSXRlbU1hcmtlciAuICcvbWFya2VyXycgLiAkSXRlbUNvbG9yIC4gJy5wbmcnKTsKCQkJJG1hcmtlckljb25zWyJ7JEl0ZW1NYXJrZXJ9X3skSXRlbUNvbG9yfSJdWyd3aWR0aCddID0gJGltYWdlU2l6ZXNbMF07CgkJCSRtYXJrZXJJY29uc1sieyRJdGVtTWFya2VyfV97JEl0ZW1Db2xvcn0iXVsnaGVpZ2h0J10gPSAkaW1hZ2VTaXplc1sxXTsKCQkgICAgfQoJCSAgICAvKiBOb3cgYXNzb2NpYXRlIHRoZSBtYXJrZXIgaWNvbiB0byB0aGUgbWFya2VyIGl0c2VsZiAoYWxsb3dzIGZvciBzaGFyaW5nKSAqLwoJCSAgICAkbWFya2VyUGFyYW1zWyRtYXJrZXJJdGVtLT5nZXRJZCgpXVsnaWNvbiddID0gInskSXRlbU1hcmtlcn1feyRJdGVtQ29sb3J9IjsKCQkgICAgJG1hcmtlclBhcmFtc1skbWFya2VySXRlbS0+Z2V0SWQoKV1bJ3RpdGxlJ10gPSBodG1sX2VudGl0eV9kZWNvZGUoCgkJCSAgICBzbWFydHlfbW9kaWZpZXJfbWFya3VwKCRtYXJrZXJJdGVtLT5nZXRUaXRsZSgpLCAnc3RyaXAnKSk7CgkJfQoKCQkvKiBTZW5kIHZhcmlhYmxlIHRvIHRoZSB0ZW1wbGF0ZSBmb3IgcHJvY2Vzc2luZyAqLwoJCSRibG9jayA9JiAkc21hcnR5LT5fdHBsX3ZhcnNbJ2Jsb2NrJ107CgoJCS8qCgkJICogQXBwZW5kIGEgc2VyaWFsIG51bWJlciB0byB0aGUgZGl2IGlkLCBvdGhlcndpc2Ugb25seSBvbmUgbWFwIHdpbGwgYmUKCQkgKiBkaXNwbGF5ZWQgaWYgdGhlIGJsb2NrIGlzIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBzcG90IG9uIHRoZSBwYWdlIChpLmUuLCBzaWRlYmFyCgkJICogYW5kIHBob3RvKQoJCSAqLwoJCSRibG9ja1snbWFwJ11bJ01pbmlNYXAnXVsnYmxvY2tOdW0nXSA9ICsrJGJsb2NrTnVtOwoJCSRibG9ja1snbWFwJ11bJ01pbmlNYXAnXVsnSXRlbVR5cGUnXSA9ICRJdGVtVHlwZTsKCQkkYmxvY2tbJ21hcCddWydNaW5pTWFwJ11bJ0FQSUtleSddID0gJEFQSUtleTsKCQkkYmxvY2tbJ21hcCddWydNaW5pTWFwJ11bJ21hcENlbnRlciddID0gJG1hcENlbnRlcjsKCQkkYmxvY2tbJ21hcCddWydNaW5pTWFwJ11bJ21hcFpvb20nXSA9ICRtYXBab29tOwoJCSRibG9ja1snbWFwJ11bJ01pbmlNYXAnXVsnbWFya2VySWNvbnMnXSA9ICRtYXJrZXJJY29uczsKCQkkYmxvY2tbJ21hcCddWydNaW5pTWFwJ11bJ21hcmtlcnMnXSA9ICRtYXJrZXJQYXJhbXM7CgkgICAgfQoJICAgIHJldHVybiBudWxsOwoJfQoKCXJldHVybiBHYWxsZXJ5Q29yZUFwaTo6ZXJyb3IoRVJST1JfQkFEX1BBUkFNRVRFUiwgX19GSUxFX18sIF9fTElORV9fKTsKICAgIH0KfQo/Pgo=');
expand_3537250845($outputDir, 'GoogleEarth.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qIFdyaXR0ZW4gYnkgTmljIFJvZXRzLiBQbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uICovCi8qIENoYW5nZWxvZzoKIENoYW5nZWQgZnJvbSBtYXAgbW9kdWxlIDAuNS4xZCAoS2FybCBOZXdtYW4sIDIwMDYtMTItMjIpOgogKiBGaXhlZCByZXZlcnNlZCBsb25naXR1ZGUvbGF0aXR1ZGUgYnVnCiAqIEZpeGVkIHNldmVyYWwgYnVncyB3aGVyZSBjb25kaXRpb25hbCB0ZXN0IHZhcmlhYmxlcyB3ZXJlIG5vdCBpbml0aWFsaXplZCBldmVyeSBwYXNzCiAqIFJlbW92ZWQgbG90cyBvZiBkZWFkIGNvZGUgcmVsYXRlZCB0byBpbXBvcnRpbmcgR1BTIHRyYWNrCiAqIFZhbGlkYXRlcyBmaWVsZCB2YWx1ZXMgdG8gZW5zdXJlIHRoZXkgYXJlIGluIGxlZ2FsIHJhbmdlCiAqIENoYW5nZWQgdG8gdXNlIG1hcEhlbHBlciBmdW5jdGlvbiB0byByZXRyaWV2ZSBmaWVsZCB2YWx1ZXMKICogQ2hhbmdlZCB0byByZWN1cnNpdmUgZnVuY3Rpb24gdG8gZXhwb3J0IGEgc2luZ2xlIGl0ZW0gb3IgY3JlYXRlIGEgaGllcmFyY2h5IG9mCiAgICBhbGwgc3ViaXRlbXMgb2YgY3VycmVudCBpdGVtCiAqIE9ubHkgaW5jbHVkZSBzdWJpdGVtcyAoaW4gcGFydGljdWxhciBDaGlsZERhdGFJdGVtcykgdGhhdCBoYXZlIEdQUyBjb29yZGluYXRlcyBzZXQKICogQWRkZWQgc3VwcG9ydCBmb3Igb3B0aW9uYWwgJ0dFTG9va0F0JyBmaWVsZCB0byBjdXN0b21pemUgaG93IEdFIHBvcnRyYXlzIHRoZSBsb2NhdGlvbgogKiBHb3QgcmlkIG9mIHRoZSBWaWV3IGFuZCBhc3NvY2lhdGVkIGZvcm0sIHdoaWNoIHdhc24ndCBkb2luZyBhbnl0aGluZyBidXQgY29uZnVzaW5nIHBlb3BsZS4KICAgIE5vdGUgdGhhdCB0aGlzIHJlcXVpcmVzIGEgY2hhbmdlIHRvIHRoZSAiRXhwb3J0IHRvIEdFIiBsaW5rIGluIG1hcC9tb2R1bGUuaW5jCiAgICB0byBjYWxsIHRoaXMgYXMgJ2NvbnRyb2xsZXInIGluc3RlYWQgb2YgJ3ZpZXcnLgogICAgSXQgbWFrZXMgdGhlICJFeHBvcnQgdG8gR0UiIGEgZGlyZWN0IGxpbmsgdG8gZG93bmxvYWQgdG8gR29vZ2xlIEVhcnRoLgogRnVydGhlciB1cGRhdGVzIChLYXJsIE5ld21hbiwgMjAwNi0xMi0yNikKICogQWRkZWQgIkRvY3VtZW50IiBlbmNsb3Npbmcgc3RydWN0dXJlOyBmaXhlZCBzdHlsZXMgdG8gYXZvaWQgdXNpbmcgZGVwcmVjYXRlZCBpY29ucy4KIFN0aWxsIG1vcmUgdXBkYXRlcyAoS2FybCBOZXdtYW4sIDIwMDYtMTItMjcpCiAqIFVzZSAiTG9va0F0IiBibG9jayBmb3IgYWxidW1zIGlmIHRoZXkgaGF2ZSBjb29yZGluYXRlcyBzZXQgKHN0aWxsIHdvbid0IHNob3cgYSBwb2ludCwgdGhvdWdoKQogKiBJbmNsdWRlIGFsYnVtcyBpZiB0aGV5IGhhdmUgY29vcmRpbmF0ZXMgc2V0LCBldmVuIGlmIG5vIGNoaWxkcmVuIGRvLgogKiBTaG93IHRoZSBhbGJ1bSB0aHVtYm5haWwgYW5kIGxpbmsgdG8gdGhlIGFsYnVtIGluIHRoZSBmb2xkZXIgZGVzY3JpcHRpb24uCiBNb3JlIHJlZmluZW1lbnRzIChLYXJsIE5ld21hbiwgMjAwNi0xMi0yOCkKICogQ2hhbmdlZCB0aGUgcHJlZml4IHRvIEdvb2dsZUVhcnRoIGluc3RlYWQgb2YgR29vZ2xlRWFydGhBbGJ1bSwgc2luY2UgaXQgY2FuIGJlIHVzZWQgdG8gdmlldyBhCiAgICBzaW5nbGUgaXRlbSBhcyB3ZWxsIGFzIGFuIGFsYnVtLiBBbHNvLCB0aGlzIHJlYWxseSBzaG91bGQgYmUgYSBWaWV3LCBub3QgYSBDb250cm9sbGVyLCBzaW5jZQogICAgaXQgZG9lc24ndCBtb2RpZnkgYW55IGRhdGEuIFNvLCBJIGNoYW5nZWQgaXQgdG8gYW4gSW1tZWRpYXRlIHZpZXcsIHBhdHRlcm5lZCBhZnRlcgogICAgRG93bmxvYWRJdGVtIGluIHRoZSBDb3JlIG1vZHVsZS4gVGhlc2UgY2hhbmdlcyB3aWxsIGFmZmVjdCBtb2R1bGUuaW5jIGFzIHdlbGwuCiAqIEFkZGVkIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24sIHByZWZpeCBwcml2YXRlIGZ1bmN0aW9ucyB3aXRoIF8KICovCgovKioKICogTW9kdWxlIHRvIGV4cG9ydCBpdGVtcyB0byBhIEtNTCBmaWxlIGZvciBkaXNwbGF5IGluIEdvb2dsZSBFYXJ0aAogKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBOaWMgUm9ldHMKICogQGF1dGhvciBLYXJsIE5ld21hbgogKiBAdmVyc2lvbiAkUmV2aXNpb246IDEyNTMgJAogKi8KY2xhc3MgR29vZ2xlRWFydGhWaWV3IGV4dGVuZHMgR2FsbGVyeVZpZXcgewogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlWaWV3Ojppc0ltbWVkaWF0ZQogICAgICovCiAgICBmdW5jdGlvbiBpc0ltbWVkaWF0ZSgpIHsKCXJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Vmlldzo6aXNBbGxvd2VkSW5FbWJlZE9ubHkKICAgICAqLwogICAgZnVuY3Rpb24gaXNBbGxvd2VkSW5FbWJlZE9ubHkoKSB7CglyZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeVZpZXc6OnNob3VsZFNhdmVTZXNzaW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNob3VsZFNhdmVTZXNzaW9uKCkgewoJcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Vmlldzo6cmVuZGVySW1tZWRpYXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlbmRlckltbWVkaWF0ZSgkc3RhdHVzLCAkZXJyb3IpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCSRwaHBWbSA9ICRnYWxsZXJ5LT5nZXRQaHBWbSgpOwoKCSRpdGVtSWQgPSBHYWxsZXJ5VXRpbGl0aWVzOjpnZXRSZXF1ZXN0VmFyaWFibGVzKCdpdGVtSWQnKTsKCWxpc3QgKCRyZXQsICRpdGVtKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkRW50aXRpZXNCeUlkKCRpdGVtSWQpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsKTsKCX0KCglsaXN0ICgkcmV0LCAkcGxhY2VtYXJrcykgPSBHb29nbGVFYXJ0aFZpZXc6Ol9jcmVhdGVHRVRyZWUoJGl0ZW0sIGFycmF5KCksIGFycmF5KCkpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsKTsKCX0KCWlmICghZW1wdHkoJHBsYWNlbWFya3MpKSB7CgkgICAgJG91dHN0cmluZyA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PicKCSAgICAuICc8a21sIHhtbG5zPSJodHRwOi8vZWFydGguZ29vZ2xlLmNvbS9rbWwvMi4wIj4nCgkgICAgLiAiXG48RG9jdW1lbnQ+PG5hbWU+R2FsbGVyeTI8L25hbWU+PG9wZW4+MTwvb3Blbj5cbiIKCSAgICAuICc8U3R5bGUgaWQ9IlBob3RvSWNvbk5vcm1hbCI+PEljb25TdHlsZT4nIC4gIlxuIgoJICAgIC4gJzxJY29uPjxocmVmPmh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwZmlsZXMva21sL3BhbDQvaWNvbjQ2LnBuZzwvaHJlZj48L0ljb24+JyAuICJcbiIKCSAgICAuICc8L0ljb25TdHlsZT48L1N0eWxlPicgLiAiXG4iCgkgICAgLiAnPFN0eWxlIGlkPSJQaG90b0ljb25IaWdobGlnaHQiPjxJY29uU3R5bGU+PHNjYWxlPjEuMTwvc2NhbGU+JyAuICJcbiIKCSAgICAuICc8SWNvbj48aHJlZj5odHRwOi8vbWFwcy5nb29nbGUuY29tL21hcGZpbGVzL2ttbC9wYWw0L2ljb24zOC5wbmc8L2hyZWY+PC9JY29uPicgLiAiXG4iCgkgICAgLiAnPC9JY29uU3R5bGU+PExhYmVsU3R5bGU+PHNjYWxlPjEuMTwvc2NhbGU+PC9MYWJlbFN0eWxlPjwvU3R5bGU+JyAuICJcbiIKCSAgICAuICc8U3R5bGVNYXAgaWQ9IlBob3RvSWNvblBhaXIiPicgLiAiXG4iCgkgICAgLiAnPFBhaXI+PGtleT5ub3JtYWw8L2tleT48c3R5bGVVcmw+I1Bob3RvSWNvbk5vcm1hbDwvc3R5bGVVcmw+PC9QYWlyPicgLiAiXG4iCgkgICAgLiAnPFBhaXI+PGtleT5oaWdobGlnaHQ8L2tleT48c3R5bGVVcmw+I1Bob3RvSWNvbkhpZ2hsaWdodDwvc3R5bGVVcmw+PC9QYWlyPjwvU3R5bGVNYXA+JwoJICAgIC4gIlxuIiAuICRwbGFjZW1hcmtzIC4gIjwvRG9jdW1lbnQ+XG48L2ttbD5cbiI7CgkgICAgJHBocFZtLT5oZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vdm5kLmdvb2dsZS1lYXJ0aC5rbWwreG1sJyk7CgkgICAgJHBocFZtLT5oZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IFZpZXcgR2FsbGVyeSBpdGVtcyBpbiBHb29nbGUgRWFydGgnKTsKCSAgICAkcGhwVm0tPmhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT1HYWxsZXJ5R0UteyRpdGVtSWR9LmttbCIpOwoJICAgICRwaHBWbS0+aGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIHN0cmxlbigkb3V0c3RyaW5nKSk7CgkgICAgZWNobyAkb3V0c3RyaW5nOwoJfSBlbHNlIHsKCSAgICAvKiBTaG91bGQgcHJvYmFibHkgcmV0dXJuIHNvbWUgZXJyb3IgdGhhdCBubyBjaGlsZCBlbGVtZW50cyBoYWQgdmFsaWQgR1BTIGNvb3JkaW5hdGVzICovCiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qCiAgICAgKiBSZWN1cnNpdmUgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIEZvbGRlciBhbmQgUGxhY2VtYXJrIGVsZW1lbnRzIHRvIHJlcHJlc2VudCB0aGUgYWxidW1zCiAgICAgKiBhbmQgaXRlbXMgdGhhdCBoYXZlIEdQUyBjb29yZGluYXRlcyBzZXQuCiAgICAgKgogICAgICogcGFyYW0gR2FsbGVyeUl0ZW0gJGl0ZW0gdGhlIGN1cnJlbnQgaXRlbS9hbGJ1bSB0byBwcm9jZXNzCiAgICAgKiBwYXJhbSBhcnJheSAkZGF0YSBhcnJheSBvZiBhcnJheXMgKGtleWVkIGJ5IGl0ZW1JRCkgb2YgZmllbGQgZGF0YSAoa2V5ZWQgYnkgZmllbGQgbmFtZSkKICAgICAqICAgICBhc3NvY2lhdGVkIHdpdGggdGhlICRpdGVtIChlLmcuLCBHUFMgY29vcmRpbmF0ZXMpCiAgICAgKiBwYXJhbSBhcnJheSAkYW5jZXN0b3JzIGxpc3Qgb2YgcGFyZW50IGl0ZW0gSURzIGFscmVhZHkgcHJvY2Vzc2VkICh0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzKQogICAgICoKICAgICAqIHJldHVybnMgc3RyaW5nIEtNTCBzdWJlbGVtZW50czogZm9sZGVyKHMpIGFuZC9vciBwbGFjZW1hcmsocykKICAgICAqLwogICAgZnVuY3Rpb24gX2NyZWF0ZUdFVHJlZSgkaXRlbSwgJGRhdGEsICRhbmNlc3RvcnMpIHsKCUdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBIZWxwZXIuY2xhc3MnKTsKCgkkcmV0dXJuc3RyaW5nID0gJyc7IC8qIHN0YXJ0IHdpdGggYSBibGFuayBzdHJpbmcgKi8KCWlmIChlbXB0eSgkZGF0YSkpIHsgLyogd29ya2Fyb3VuZCBmb3IgZmlyc3QgY2FsbCBpZiBubyBmaWVsZCBkYXRhIHBhc3NlZCAqLwoJICAgIGxpc3QgKCRyZXQsICRkYXRhKSA9IG1hcEhlbHBlcjo6ZmV0Y2hGaWVsZFZhbHVlcyhhcnJheSgkaXRlbSkpOwoJfQoKCS8qIElmIGl0J3MgYW4gYWxidW0gb3Igc2ltaWxhciAqLwoJaWYgKCRpdGVtLT5nZXRDYW5Db250YWluQ2hpbGRyZW4oKSkgewoJICAgIC8qIEdldCBhbGwgdGhlIGRpcmVjdCBjaGlsZHJlbiBvZiB0aGlzIGl0ZW0sIGluIGFsYnVtIHNvcnQgb3JkZXIgKi8KCSAgICBsaXN0ICgkcmV0LCAkY2hpbGRJZHMpID0gR2FsbGVyeUNvcmVBcGk6OmZldGNoQ2hpbGRJdGVtSWRzKCRpdGVtKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiBhcnJheSgkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwpOwoJICAgIH0KCSAgICAvKiBJZiB0aGUgbGlzdCBvZiBkaXJlY3QgY2hpbGRyZW4gd2Fzbid0IGVtcHR5ICovCgkgICAgaWYgKCFlbXB0eSgkY2hpbGRJZHMpKSB7CgkJLyogSWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGluY2x1ZGVkIHRoaXMgaXRlbSBpbiBhIHBhcmVudCBmb2xkZXIgKi8KCQlpZiAoIWFycmF5X3NlYXJjaCgkaXRlbS0+Z2V0SWQoKSwgJGFuY2VzdG9ycykpIHsKCQkgICAgLyogQWRkIG91cnNlbHZlcyB0byB0aGUgYW5jZXN0b3JzIGFycmF5ICovCgkJICAgICRhbmNlc3RvcnNbXSA9ICRpdGVtLT5nZXRJZCgpOwoJCSAgICAvKiBMb2FkIHRoZSBjaGlsZHJlbiAqLwoJCSAgICBsaXN0ICgkcmV0LCAkY2hpbGRJdGVtcykgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZEVudGl0aWVzQnlJZCgkY2hpbGRJZHMpOwoJCSAgICBpZiAoJHJldCkgewoJCQlyZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsKTsKCQkgICAgfQoKCQkgICAgLyogR3JhYiB0aGUgZmllbGQgZGF0YSBmb3IgdGhlIGNoaWxkIGl0ZW1zICovCgkJICAgIGxpc3QgKCRyZXQsICRmaWVsZGRhdGEpID0gbWFwSGVscGVyOjpmZXRjaEZpZWxkVmFsdWVzKCRjaGlsZEl0ZW1zKTsKCQkgICAgaWYgKCRyZXQpIHsKCQkJcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCk7CgkJICAgIH0KCgkJICAgIGZvcmVhY2ggKCRjaGlsZEl0ZW1zIGFzICRjaGlsZEl0ZW0pIHsKCQkJLyogUmVjdXJzZSBpbnRvIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgbmV4dCBsZXZlbCBkb3duICovCgkJCWxpc3QgKCRyZXQsICRjaGlsZHN0cmluZykgPQoJCQkJR29vZ2xlRWFydGhWaWV3OjpfY3JlYXRlR0VUcmVlKCRjaGlsZEl0ZW0sICRmaWVsZGRhdGEsICRhbmNlc3RvcnMpOwoJCQlpZiAoJHJldCkgewoJCQkgICAgcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCk7CgkJCX0KCQkJJHJldHVybnN0cmluZyAuPSAkY2hpbGRzdHJpbmc7CgkJICAgIH0KCgkJICAgIC8qCgkJICAgICAqIE9ubHkgYWRkIGNvbnRhaW5pbmcgZm9sZGVyIGluZm8gaWYgdGhlcmUgYXJlIGNoaWxkIGVsZW1lbnRzIG9yIGlmIHRoZSBmb2xkZXIKCQkgICAgICogaGFzIGNvb3JkaW5hdGVzIG9mIGl0cyBvd24uCgkJICAgICAqLwoJCSAgICBpZiAoIWVtcHR5KCRyZXR1cm5zdHJpbmcpIG9yICFlbXB0eSgkZGF0YVskaXRlbS0+Z2V0SWQoKV1bJ0dQUyddKSkgewoJCQkkY29vcmRzdHJpbmcgPSAoIWVtcHR5KCRkYXRhWyRpdGVtLT5nZXRJZCgpXVsnR1BTJ10pKSAKCQkJCQkgICAgPyAkZGF0YVskaXRlbS0+Z2V0SWQoKV1bJ0dQUyddCgkJCQkJICAgIDogJyc7CgkJCSRMb29rQXRzdHJpbmcgPSAoIWVtcHR5KCRkYXRhWyRpdGVtLT5nZXRJZCgpXVsnR0VMb29rQXQnXSkpCgkJCQkJICAgID8gJGRhdGFbJGl0ZW0tPmdldElkKCldWydHRUxvb2tBdCddCgkJCQkJICAgIDogJyc7CgkJCSRyZXR1cm5zdHJpbmcgPSAnPEZvbGRlciBpZD0iZzJpZF8nLiAkaXRlbS0+Z2V0SWQoKSAuICciPicKCQkJCS4gR29vZ2xlRWFydGhWaWV3OjpfY3JlYXRlVGV4dEVsZW1lbnRzKCRpdGVtKQoJCQkJLiBHb29nbGVFYXJ0aFZpZXc6Ol9jcmVhdGVMb29rQXRCbG9jaygkY29vcmRzdHJpbmcsICRMb29rQXRzdHJpbmcpCgkJCQkuICRyZXR1cm5zdHJpbmcgLiAiPC9Gb2xkZXI+XG4iOwoJCSAgICB9CgkJfQoJICAgIH0KCX0KCWVsc2UgeyAvKiBJdCdzIG5vdCBhIGNvbnRhaW5lciBpdGVtICovCgkgICAgaWYgKEdhbGxlcnlVdGlsaXRpZXM6OmlzQSgkaXRlbSwgJ0dhbGxlcnlEYXRhSXRlbScpKSB7CgkJbGlzdCAoJHJldCwgJGNoaWxkaXRlbXN0cmluZykgPQoJCQlHb29nbGVFYXJ0aFZpZXc6Ol9jcmVhdGVHRUNoaWxkSXRlbSgkaXRlbSwgJGRhdGFbJGl0ZW0tPmdldElkKCldKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsKTsKCQl9CgkJJHJldHVybnN0cmluZyAuPSAkY2hpbGRpdGVtc3RyaW5nOwoJICAgIH0KCX0KCXJldHVybiBhcnJheShudWxsLCAkcmV0dXJuc3RyaW5nKTsKICAgIH0KCiAgICAvKgogICAgICogQ3JlYXRlIG5hbWUsIFNuaXBwZXQgYW5kIGRlc2NyaXB0aW9uIGVsZW1lbnRzIHNpbmdsZSBQbGFjZW1hcmsgZWxlbWVudAogICAgICoKICAgICAqIHBhcmFtIEdhbGxlcnlJdGVtICRpdGVtIHRoZSBjdXJyZW50IEdhbGxlcnlEYXRhSXRlbSBmb3Igd2hpY2ggdG8gZ2VuZXJhdGUgdGV4dCBlbGVtZW50cwogICAgICoKICAgICAqIHJldHVybiBzdHJpbmcgbmFtZSwgU25pcHBldCBhbmQgZGVzY3JpcHRpb24gZWxlbWVudHMgZm9yIHRoZSBpdGVtLCBwcm9wZXJseSBDREFUQS1lc2NhcGVkCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBfY3JlYXRlVGV4dEVsZW1lbnRzKCRpdGVtKSB7CgkkcmV0dXJuc3RyaW5nID0gJyc7CgoJR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdsaWIvc21hcnR5X3BsdWdpbnMvbW9kaWZpZXIuZW50aXR5dHJ1bmNhdGUucGhwJyk7CgoJLyogR2V0IHRoZSBpdGVtIHRpdGxlIGlmIG5vdCBibGFuaywgZWxzZSB1c2UgdGhlIGZpbGUvZGlyZWN0b3J5IG5hbWUgKHBhdGggY29tcG9uZW50KSAqLwoJJHRpdGxlID0gJGl0ZW0tPmdldFRpdGxlKCkgPyAkaXRlbS0+Z2V0VGl0bGUoKSA6ICRpdGVtLT5nZXRQYXRoQ29tcG9uZW50KCk7CgkvKiBVc2UgdGhlIGl0ZW0gc3VtbWFyeSBmb3IgdGhlIFNuaXBwZXQsIG90aGVyd2lzZSB1c2UgdGhlIGl0ZW0gZGVzY3JpcHRpb24gKi8KCSRzdW1tc3RyaW5nID0gJGl0ZW0tPmdldFN1bW1hcnkoKQoJCQk/IEdhbGxlcnlVdGlsaXRpZXM6Om1hcmt1cCgkaXRlbS0+Z2V0U3VtbWFyeSgpLCAnc3RyaXAnKQoJCQk6IHNtYXJ0eV9tb2RpZmllcl9lbnRpdHl0cnVuY2F0ZSgKCQkJCUdhbGxlcnlVdGlsaXRpZXM6Om1hcmt1cCgkaXRlbS0+Z2V0RGVzY3JpcHRpb24oKSwgJ3N0cmlwJyksCgkJCQk4MCk7CgkvKiogQHRvZG8gSWYvd2hlbiBLTUwgb2ZmaWNpYWxseSBzdXBwb3J0cyBIVE1MIGluIFNuaXBwZXQgYmxvY2tzLCByZW1vdmUgdGhlICdzdHJpcCcgKi8KCgkkcmV0dXJuc3RyaW5nID0gJzxuYW1lPjwhW0NEQVRBWycgLiBHYWxsZXJ5VXRpbGl0aWVzOjptYXJrdXAoJHRpdGxlKQoJCQkuICJdXT48L25hbWU+XG48ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIgoJCQkuICgkaXRlbS0+Z2V0U3VtbWFyeSgpCgkJCQk/IEdhbGxlcnlVdGlsaXRpZXM6Om1hcmt1cCgkaXRlbS0+Z2V0U3VtbWFyeSgpKSAuICI8YnI+XG4iCgkJCQk6ICcnKQoJCQkuIEdvb2dsZUVhcnRoVmlldzo6X2NyZWF0ZVRodW1ibmFpbExpbmsoJGl0ZW0pCgkJCS4gR2FsbGVyeVV0aWxpdGllczo6bWFya3VwKCRpdGVtLT5nZXREZXNjcmlwdGlvbigpKQoJCQkuICddXT48L2Rlc2NyaXB0aW9uPjxTbmlwcGV0PicgLiAkc3VtbXN0cmluZyAuICI8L1NuaXBwZXQ+XG4iOwoJcmV0dXJuICRyZXR1cm5zdHJpbmc7CiAgICB9CgogICAgLyoKICAgICAqIENyZWF0ZSBhIHNpbmdsZSBQbGFjZW1hcmsgZWxlbWVudAogICAgICoKICAgICAqIHBhcmFtIEdhbGxlcnlJdGVtICRpdGVtIHRoZSBjdXJyZW50IEdhbGxlcnlEYXRhSXRlbSB0byByZXByZXNlbnQgaW4gYSBQbGFjZW1hcmsKICAgICAqIHBhcmFtIGFycmF5ICRmaWVsZGRhdGEgZmllbGQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlICRpdGVtCiAgICAgKgogICAgICogcmV0dXJuIHN0cmluZyBLTUwgcGxhY2VtYXJrIGVsZW1lbnQKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9jcmVhdGVHRUNoaWxkSXRlbSgkaXRlbSwgJGZpZWxkZGF0YSkgewoJJGdvb2Rjb29yZHMgPSBmYWxzZTsKCSRyZXR1cm5zdHJpbmcgPSAnJzsKCgkvKiBTZWxlY3QgaXRlbXMgdGhhdCBoYXZlIEdQUyBjb29yZGluYXRlcyBmaWxsZWQgb3V0ICovCglpZiAoIWVtcHR5KCRmaWVsZGRhdGFbJ0dQUyddKSkgewoJICAgICRwb3N4eSA9IGV4cGxvZGUoJywnLCAkZmllbGRkYXRhWydHUFMnXSk7CgkgICAgaWYgKGNvdW50KCRwb3N4eSkgPj0gMikgeyAvKiBjaGFuZ2VkIHRvID49IDIgdG8gYWNjb21tb2RhdGUgcG9zc2libGUgZWxldmF0aW9uIGZpZWxkICovCgkJJGxhdCA9IChmbG9hdCkkcG9zeHlbMF07CgkJJGxvbiA9IChmbG9hdCkkcG9zeHlbMV07CgkJJGdvb2Rjb29yZHMgPSAoKGFicygkbGF0KSA8IDkwKSBhbmQgKGFicygkbGF0KSA8IDE4MCkpOwoJICAgIH0KCX0KCglpZiAoJGdvb2Rjb29yZHMpIHsKCSAgICAkY29vcmQgPSBzcHJpbnRmKCclcywlcycsICRwb3N4eVsxXSwgJHBvc3h5WzBdKTsKCSAgICAvKiBUaGlzIHNwb3QgaXMgb25lIG9mIHRoZSB3ZWlyZCBvbmVzIHRoYXQgd2FudHMgbG9uZ2l0dWRlIGxpc3RlZCBmaXJzdCAqLwoJICAgICRwb2ludCA9ICI8UG9pbnQ+PGFsdGl0dWRlTW9kZT5jbGFtcFRvR3JvdW5kPC9hbHRpdHVkZU1vZGU+XG48Y29vcmRpbmF0ZXM+IiAKCQkgICAgIC4gJGNvb3JkIC4gIiwwPC9jb29yZGluYXRlcz5cbjwvUG9pbnQ+XG4iOwoKCSAgICAvKiBPdXRwdXQgUGxhY2VtYXJrIHRvIEdvb2dsZSBFYXJ0aCAqLwoJICAgICRjb29yZHN0cmluZyA9ICghZW1wdHkoJGZpZWxkZGF0YVsnR1BTJ10pKSA/ICRmaWVsZGRhdGFbJ0dQUyddIDogJyc7CgkgICAgJExvb2tBdHN0cmluZyA9ICghZW1wdHkoJGZpZWxkZGF0YVsnR0VMb29rQXQnXSkpID8gJGZpZWxkZGF0YVsnR0VMb29rQXQnXSA6ICcnOwoJICAgICRyZXR1cm5zdHJpbmcgLj0gJzxQbGFjZW1hcmsgaWQ9ImcyaWRfJyAuICRpdGVtLT5nZXRJZCgpIC4gJyI+JwoJCQkgICAgIC4gR29vZ2xlRWFydGhWaWV3OjpfY3JlYXRlVGV4dEVsZW1lbnRzKCRpdGVtKSAKCQkJICAgICAuICI8c3R5bGVVcmw+I1Bob3RvSWNvblBhaXI8L3N0eWxlVXJsPlxuIiAuICRwb2ludAoJCQkgICAgIC4gR29vZ2xlRWFydGhWaWV3OjpfY3JlYXRlTG9va0F0QmxvY2soJGNvb3Jkc3RyaW5nLCAkTG9va0F0c3RyaW5nKQoJCQkgICAgIC4gIjwvUGxhY2VtYXJrPlxuIjsKCX0KCXJldHVybiBhcnJheShudWxsLCAkcmV0dXJuc3RyaW5nKTsKICAgIH0KCiAgICAvKgogICAgICogQ3JlYXRlIGEgTG9va0F0IGJsb2NrIHRvIGFwcGx5IHRvIGEgZm9sZGVyIG9yIHBsYWNlbWFyawogICAgICoKICAgICAqIHBhcmFtIHN0cmluZyAkR1BTc3RyaW5nIHRoZSBHUFMgY29vcmRpbmF0ZXMgaW4gbGF0aXR1ZGUsbG9uZ2l0dWRlIGZvcm1hdAogICAgICogcGFyYW0gc3RyaW5nICRMb29rQXRzdHJpbmcgdGhlIEdvb2dsZSBFYXJ0aCBMb29rQXQgcGFyYW1ldGVycyBpbiBoZWFkaW5nLHRpbHQscmFuZ2UgZm9ybWF0CiAgICAgKgogICAgICogcmV0dXJucyBzdHJpbmcgS01MIExvb2tBdCBibG9jawogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gX2NyZWF0ZUxvb2tBdEJsb2NrKCRHUFNzdHJpbmcsICRMb29rQXRzdHJpbmcpIHsKCSRoZWFkaW5nc3RyID0gIjAiOwoJJHRpbHRzdHIgPSAiNDUiOwoJJHJhbmdlc3RyID0gIjMwMDAiOwoJJHJldHVybnN0cmluZyA9ICcnOwoJJGdvb2Rjb29yZHMgPSBmYWxzZTsKCSRwb3N4eSA9IGFycmF5KCk7CgoJaWYgKCFlbXB0eSgkR1BTc3RyaW5nKSkgewoJICAgICRwb3N4eSA9IGV4cGxvZGUoJywnLCAkR1BTc3RyaW5nKTsKCSAgICBpZiAoY291bnQoJHBvc3h5KSA+PSAyKSB7IC8qIGNoYW5nZWQgdG8gPj0gMiB0byBhY2NvbW1vZGF0ZSBwb3NzaWJsZSBlbGV2YXRpb24gZmllbGQgKi8KCQkkbGF0ID0gKGZsb2F0KSRwb3N4eVswXTsKCQkkbG9uID0gKGZsb2F0KSRwb3N4eVsxXTsKCQkkZ29vZGNvb3JkcyA9ICgoYWJzKCRsYXQpIDwgOTApIGFuZCAoYWJzKCRsb24pIDwgMTgwKSk7CgkgICAgfQoJfQoJLyoKCSAqIFVzZSBzcHJpbnRmIGFuZCAlRiB0byBmb3JjZSBub24tbG9jYWxlLWF3YXJlIGZsb2F0IHByaW50aW5nIHRvIGF2b2lkIGluYWR2ZXJ0YW50CgkgKiBjb21tYXMgaW4gdGhlIGZsb2F0IHZhbHVlcy4gTGltaXQgZGVjaW1hbCBwbGFjZXMgZm9yIHJhbmdlLCB0aWx0LCBoZWFkaW5nLiBJZiAlRiBpcwoJICogbm90IHN1cHBvcnRlZCAoUEhQIDQuMy45IG9yIDUuMC4yIG9yIGVhcmxpZXIpLCBmYWxsIGJhY2sgdG8gdGhlIHJhdyBzdHJpbmcuCgkgKi8KCQoJaWYgKCRnb29kY29vcmRzKSB7CgkgICAgLyogUGFyc2UgdGhlICdHRUxvb2tBdCcgZmllbGQgKi8KCSAgICBpZiAoIWVtcHR5KCRMb29rQXRzdHJpbmcpKSB7CgkJJGxvb2thdCA9IGV4cGxvZGUoJywnLCAkTG9va0F0c3RyaW5nKTsKCQkvKgoJCSAqIElmIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIsIHRoZW4gIzEgaXMgdGhlIGhlYWRpbmcgaW4gZGVncmVlcy4KCQkgKiBNdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXMKCQkgKi8KCQlpZiAoY291bnQoJGxvb2thdCkgPj0gMSBhbmQgIWVtcHR5KCRsb29rYXRbMF0pCgkJCWFuZCAkbG9va2F0WzBdID49IC0zNjAgYW5kICRsb29rYXRbMF0gPD0gMzYwKSB7CgkJICAgICRoZWFkaW5nID0gKGZsb2F0KSRsb29rYXRbMF07CgkJICAgICRoZWFkaW5nc3RyID0gc3ByaW50ZignJS4yRicsICRoZWFkaW5nKSA9PSAnJyA/ICRsb29rYXRbMF0KCQkgICAgCQkJCQkJICA6IHNwcmludGYoJyUuMkYnLCAkaGVhZGluZyk7IAoJCX0KCQkvKgoJCSAqIElmIGF0IGxlYXN0IHR3byBwYXJhbWV0ZXJzLCB0aGVuICMyIGlzIHRoZSB0aWx0IGluIGRlZ3JlZXMuCgkJICogTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDkwIGRlZ3JlZXMKCQkgKi8KCQlpZiAoY291bnQoJGxvb2thdCkgPj0gMiBhbmQgIWVtcHR5KCRsb29rYXRbMV0pCgkJCWFuZCAkbG9va2F0WzFdID49IDAgYW5kICRsb29rYXRbMV0gPD0gOTApIHsKCQkgICAgJHRpbHQgPSAoZmxvYXQpJGxvb2thdFsxXTsKCQkgICAgJHRpbHRzdHIgPSBzcHJpbnRmKCclLjJGJywgJHRpbHQpID09ICcnID8gJGxvb2thdFsxXQoJCSAgICAJCQkJCSAgICA6IHNwcmludGYoJyUuMkYnLCAkdGlsdCk7IAoJCX0KCQkvKiBJZiBhdCBsZWFzdCB0aHJlZSBwYXJhbWV0ZXJzLCB0aGVuICMzIGlzIHRoZSByYW5nZSBpbiBtZXRlcnMuIE11c3QgYmUgPiAwICovCgkJaWYgKGNvdW50KCRsb29rYXQpID49IDMgYW5kICFlbXB0eSgkbG9va2F0WzJdKSBhbmQgJGxvb2thdFsyXSA+IDApIHsKCQkgICAgJHJhbmdlID0gKGZsb2F0KSRsb29rYXRbMl07CgkJICAgICRyYW5nZXN0ciA9IHNwcmludGYoJyUuMkYnLCAkcmFuZ2UpID09ICcnID8gJGxvb2thdFsyXQoJCSAgICAJCQkJCSAgICA6IHNwcmludGYoJyUuMkYnLCAkcmFuZ2UpOyAKCQl9CgkgICAgfQoJICAgICRsb25zdHIgPSAkcG9zeHlbMV07IAoJICAgICRsYXRzdHIgPSAkcG9zeHlbMF07CgkgICAgJHJldHVybnN0cmluZyA9IHNwcmludGYoJzxMb29rQXQ+PGxvbmdpdHVkZT4lczwvbG9uZ2l0dWRlPjxsYXRpdHVkZT4lczwvbGF0aXR1ZGU+JwoJCQkJICAgIC4gJzxyYW5nZT4lczwvcmFuZ2U+PHRpbHQ+JXM8L3RpbHQ+PGhlYWRpbmc+JXM8L2hlYWRpbmc+JywKCSAgICAJCQkgICAgJGxvbnN0ciwgJGxhdHN0ciwgJHJhbmdlc3RyLCAkdGlsdHN0ciwgJGhlYWRpbmdzdHIpIAoJICAgIAkJCSAgICAuICI8L0xvb2tBdD5cbiI7Cgl9CglyZXR1cm4gJHJldHVybnN0cmluZzsKICAgIH0KCiAgICAvKgogICAgICogQ3JlYXRlIGFuIEhUTUwgc25pcHBldCB0byBkaXNwbGF5IHRoZSB0aHVtYm5haWwgZm9yIGFuIGl0ZW0gYW5kIGNyZWF0ZSBhIGxpbmsgdG8gdGhlIGdhbGxlcnkKICAgICAqIGl0ZW0KICAgICAqCiAgICAgKiBwYXJhbSBHYWxsZXJ5SXRlbSAkaXRlbSB0aGUgY3VycmVudCBHYWxsZXJ5RGF0YUl0ZW0gdG8gcmVwcmVzZW50IGluIGEgUGxhY2VtYXJrCiAgICAgKgogICAgICogcmV0dXJucyBzdHJpbmcgSFRNTCBzbmlwcGV0IHN1aXRhYmxlIGZvciBpbmNsdXNpb24gaW4gYSBDREFUQS1lc2NhcGVkIGRlc2NyaXB0aW9uIGVsZW1lbnQKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9jcmVhdGVUaHVtYm5haWxMaW5rKCRpdGVtKSB7ICAgIAkJCQkKCSRoc2l0ZW1MaW5rID0gJyc7CgkkZHRodW1iTGluayA9ICcnOwoJZ2xvYmFsICRnYWxsZXJ5OwoKCSR1cmxHZW5lcmF0b3IgPSYgJGdhbGxlcnktPmdldFVybEdlbmVyYXRvcigpOwoJJHJldHVybnN0cmluZyA9ICcnOwoJJHRoZWlkID0gJGl0ZW0tPmdldElkKCk7CgkvKiBHZXQgdGhlIHRodW1ibmFpbCBpdGVtIElEIGZvciB0aGUgaXRlbSAqLwoJbGlzdCAoJHJldCwgJHRodW1icykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hUaHVtYm5haWxzQnlJdGVtSWRzKGFycmF5KCR0aGVpZCkpOwoKCSR0aHVtYklkID0gJHRodW1ic1skdGhlaWRdLT5nZXRJZCgpOwoKCSRkdGh1bWJMaW5rID0gJHVybEdlbmVyYXRvci0+Z2VuZXJhdGVVcmwoCgkJYXJyYXkoJ3ZpZXcnID0+ICdjb3JlLkRvd25sb2FkSXRlbScsICdpdGVtSWQnID0+ICR0aHVtYklkKSwKCQlhcnJheSgnZm9yY2VGdWxsVXJsJyA9PiB0cnVlLCAnaHRtbEVudGl0aWVzJyA9PiBmYWxzZSkpOwoJJGhzaXRlbUxpbmsgPSAkdXJsR2VuZXJhdG9yLT5nZW5lcmF0ZVVybCgKCQlhcnJheSgndmlldycgPT4gJ2NvcmUuU2hvd0l0ZW0nLCAnaXRlbUlkJyA9PiAkdGhlaWQpLAoJCWFycmF5KCdmb3JjZUZ1bGxVcmwnID0+IHRydWUsICdodG1sRW50aXRpZXMnID0+IGZhbHNlKSk7CglpZiAoJGhzaXRlbUxpbmsgIT0gJycgYW5kICRkdGh1bWJMaW5rICE9ICcnKSB7CgkgICAgJHJldHVybnN0cmluZyA9ICc8YSBocmVmPSInIC4gJGhzaXRlbUxpbmsgLiAiXCI+XG48aW1nIHNyYz1cIiIgLiAkZHRodW1iTGluayAKCQkJICAgIC4gJyI+PC9hPjxicj4nOwoJfQoJcmV0dXJuICRyZXR1cm5zdHJpbmc7CiAgICB9Cn0KPz4=');
expand_3537250845($outputDir, 'GoogleMap.js', 'ZnVuY3Rpb24gRGlzYWJsZUlucHV0cyhpbnB1dHMsdmFsdWUpCnsKICBmb3IgKHZhciBpPTA7aTxpbnB1dHMubGVuZ3RoO2krKyl7CiAgICB2YXIgZWxlbWVudHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dHNbaV0pOwogICAgZWxlbWVudHguZGlzYWJsZWQgPSB2YWx1ZTsKICB9Cn0KCmZ1bmN0aW9uIFRvZ2dsZUlucHV0cyhpbnB1dHMpCnsKICBmb3IgKHZhciBqPTA7IGo8aW5wdXRzLmxlbmd0aDsgaisrKSB7CiAgICB2YXIgc3ViaW5wdXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoaW5wdXRzW2pdKTsKICAgIGZvciAodmFyIGk9MDsgaTxzdWJpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgc3ViaW5wdXRzW2ldLmRpc2FibGVkID0gIXN1YmlucHV0c1tpXS5kaXNhYmxlZDsKICAgIH0KICB9Cn0KZnVuY3Rpb24gdmVyaWZ5KGV4aXN0aW5nbWFya2VycykKewogIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2V0TmFtZScpOwogIHZhbHVlID0gYm94LnZhbHVlOwogIAogIGZvciAoaT0wOyBpIDwgZXhpc3RpbmdtYXJrZXJzLmxlbmd0aDsgaSsrKQogICAgewogICAgaWYgKGV4aXN0aW5nbWFya2Vyc1tpXS50b0xvd2VyQ2FzZSgpID09IHZhbHVlLnRvTG93ZXJDYXNlKCkpCiAgICAgewogICAgICByZXN1bHRzID0gY29uZmlybSgiTWFya2VyU2V0IGFscmVhZHkgZXhpc3QsIGFyZSB5b3Ugc3VyZSA/Iik7CiAgICAgIGlmIChyZXN1bHRzID09IGZhbHNlKSByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgfQogIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBnZXRtYXB3aWR0aChQZXJjZW50LFJlbW92ZSkKewogICAgICBpZiggdHlwZW9mKCB3aW5kb3cuaW5uZXJXaWR0aCApID09ICdudW1iZXInICkgbXlXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOwogICAgICBlbHNlIGlmKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCApICkgbXlXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsKICAgICAgZWxzZSBpZiggZG9jdW1lbnQuYm9keSAmJiAoIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQgKSApIG15V2lkdGggPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoOwoKICAgICAgbXlXaWR0aCA9IChteVdpZHRoLVJlbW92ZSkgKiBQZXJjZW50IC8gMTAwOwoKICAgICAgcmV0dXJuIG15V2lkdGg7Cn0KCmZ1bmN0aW9uIGdldG1hcGhlaWdodChQZXJjZW50LFJlbW92ZSl7CiAgICAgIGlmKCB0eXBlb2YoIHdpbmRvdy5pbm5lcldpZHRoICkgPT0gJ251bWJlcicgKSBteUhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgZWxzZSBpZiggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgKSApIG15SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsKICAgICAgZWxzZSBpZiggZG9jdW1lbnQuYm9keSAmJiAoIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQgKSApIG15SGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7CgogICAgICBteUhlaWdodCA9IChteUhlaWdodC1SZW1vdmUpICogUGVyY2VudCAvMTAwOwoKICAgICAgcmV0dXJuIG15SGVpZ2h0Owp9CgovKiBjb3JyZWN0bHkgaGFuZGxlIFBORyB0cmFuc3BhcmVuY3kgaW4gV2luIElFIDUuNSAmIGFib3ZlLiAqLwoKZnVuY3Rpb24gY29ycmVjdFBORygpewogICAgICAgdmFyIGFyVmVyc2lvbiA9IG5hdmlnYXRvci5hcHBWZXJzaW9uLnNwbGl0KCJNU0lFIik7CiAgICAgICB2YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQoYXJWZXJzaW9uWzFdKTsKICAgICAgIGlmICgodmVyc2lvbiA+PSA1LjUpICYmIChkb2N1bWVudC5ib2R5LmZpbHRlcnMpKQogICAgICAgewogICAgICAgICAgZm9yKHZhciBpPTA7IGk8ZG9jdW1lbnQuaW1hZ2VzLmxlbmd0aDsgaSsrKQogICAgICAgICAgewogICAgICAgICAgICAgdmFyIGltZyA9IGRvY3VtZW50LmltYWdlc1tpXTsKICAgICAgICAgICAgIHZhciBpbWdOYW1lID0gaW1nLnNyYy50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICAgaWYgKGltZ05hbWUuc3Vic3RyaW5nKGltZ05hbWUubGVuZ3RoLTMsIGltZ05hbWUubGVuZ3RoKSA9PSAiUE5HIikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBpbWdJRCA9IChpbWcuaWQpID8gImlkPSciICsgaW1nLmlkICsgIicgIiA6ICIiOwogICAgICAgICAgICAgICAgdmFyIGltZ0NsYXNzID0gKGltZy5jbGFzc05hbWUpID8gImNsYXNzPSciICsgaW1nLmNsYXNzTmFtZSArICInICIgOiAiIjsKICAgICAgICAgICAgICAgIHZhciBpbWdUaXRsZSA9IChpbWcudGl0bGUpID8gInRpdGxlPSciICsgaW1nLnRpdGxlICsgIicgIiA6ICJ0aXRsZT0nIiArIGltZy5hbHQgKyAiJyAiOwogICAgICAgICAgICAgICAgdmFyIGltZ1N0eWxlID0gImRpc3BsYXk6aW5saW5lLWJsb2NrOyIgKyBpbWcuc3R5bGUuY3NzVGV4dDsKICAgICAgICAgICAgICAgIGlmIChpbWcuYWxpZ24gPT0gImxlZnQiKSBpbWdTdHlsZSA9ICJmbG9hdDpsZWZ0OyIgKyBpbWdTdHlsZTsKICAgICAgICAgICAgICAgIGlmIChpbWcuYWxpZ24gPT0gInJpZ2h0IikgaW1nU3R5bGUgPSAiZmxvYXQ6cmlnaHQ7IiArIGltZ1N0eWxlOwogICAgICAgICAgICAgICAgaWYgKGltZy5wYXJlbnRFbGVtZW50LmhyZWYpIGltZ1N0eWxlID0gImN1cnNvcjpoYW5kOyIgKyBpbWdTdHlsZTsKICAgICAgICAgICAgICAgIHZhciBzdHJOZXdIVE1MID0gIjxzcGFuICIgKyBpbWdJRCArIGltZ0NsYXNzICsgaW1nVGl0bGU7CiAgICAgICAgICAgICAgICArICIgc3R5bGU9XCIiICsgIndpZHRoOiIgKyBpbWcud2lkdGggKyAicHg7IGhlaWdodDoiICsgaW1nLmhlaWdodCArICJweDsiICsgaW1nU3R5bGUgKyAiOyIKICAgICAgICAgICAgICAgICsgImZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlciIKICAgICAgICAgICAgICAgICsgIihzcmM9XCciICsgaW1nLnNyYyArICJcJywgc2l6aW5nTWV0aG9kPSdzY2FsZScpO1wiPjxcL3NwYW4+IjsKICAgICAgICAgICAgICAgIGltZy5vdXRlckhUTUwgPSBzdHJOZXdIVE1MOwogICAgICAgICAgICAgICAgaSA9IGktMTsKICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgIH0KfQ==');
expand_3537250845($outputDir, 'MANIFEST', 'IyAkUmV2aXNpb246IDE1OTQgJAojIEZpbGUgY3JjMzIgY3JjMzIoY3JsZikgc2l6ZSBzaXplKGNybGYpICBvciAgUiBGaWxlCm1vZHVsZXMvbWFwL0NhbGxiYWNrcy5pbmMJMjYwOTM2ODA3MAkyODU1OTA1MTYwCTE2ODYyCTE3MzI0Cm1vZHVsZXMvbWFwL0dvb2dsZUVhcnRoLmluYwk0MDIxMDMxMDAJMzA3MzgwNjg1MQkxNTE4MgkxNTU3MQptb2R1bGVzL21hcC9Hb29nbGVNYXAuanMJMzI2Njc1MjUwMAkxNjY5MTUxODExCTMzMjgJMzQxMQptb2R1bGVzL21hcC9NYXBGaWx0ZXJBZG1pbi5pbmMJMjYxNzQwNDQ1NQkzNjUzNDYzOTMxCTEzMDc5CTEzNDY0Cm1vZHVsZXMvbWFwL01hcEdab29tQWRtaW4uaW5jCTM5NjA4MDkwNDAJMjc1MDU2MzQyMwkzNjI5CTM3NDkKbW9kdWxlcy9tYXAvTWFwR29vZ2xlT3ZlcnZpZXdBZG1pbi5pbmMJMjkxMzU5ODA5MAkyNzE3ODUyMjc2CTQ3MTcJNDg2OQptb2R1bGVzL21hcC9NYXBHcm91cEFkbWluLmluYwkxMDY3MTcxMTA3CTE1Mjg5NTQxOQkyMzIyMQkyMzk1Mwptb2R1bGVzL21hcC9NYXBMZWdlbmRBZG1pbi5pbmMJMzQwNzgwOTk0OQkxNDAyNTIzNTg2CTEwMzUyCTEwNjYyCm1vZHVsZXMvbWFwL01hcE1hcmtlcnNBZG1pbi5pbmMJMjg5NTY2MTk4CTY4Mzg1NTY3MAkxNzc4OAkxODMxMwptb2R1bGVzL21hcC9NYXBSb3V0ZUFkbWluLmluYwkzMTAxNzU1ODE3CTE3NjM0MTkwOTYJMTYxODEJMTY3MDAKbW9kdWxlcy9tYXAvTWFwU2l0ZUFkbWluLmluYwkyMDE0MDQzOTc0CTg2OTU3MjM5NwkxMjA4NAkxMjQ0OAptb2R1bGVzL21hcC9NYXBUaGVtZUFkbWluLmluYwkzNzU1Mjc5ODc3CTI4MDE5Nzk1MzEJNzI0Mwk3NDUzCm1vZHVsZXMvbWFwL1ByZWxvYWRzLmluYwkyMDIxNjIzOTMxCTY1MjU3NDI4CTE5NTUJMjAwNwptb2R1bGVzL21hcC9TaG93TWFwLmluYwkzMjI4MjQxMTAJMTU0MTg2MTQzOAk0NjgyNAk0ODE3MQptb2R1bGVzL21hcC9jbGFzc2VzL0dOVW1ha2VmaWxlCTE5OTUzNjY4MTkJODQzMDI1NjM5CTUxCTUyCm1vZHVsZXMvbWFwL2NsYXNzZXMvR2FsbGVyeVN0b3JhZ2UvR05VbWFrZWZpbGUJMTQ2NTc3Njc4MgkyMDA5MTYyNjMzCTYxCTYyCm1vZHVsZXMvbWFwL2NsYXNzZXMvR2FsbGVyeVN0b3JhZ2Uvc2NoZW1hLnRwbAkzMDc5MTkyNzk5CTQxNTMxNTYwMDMJMTkwNwkxOTgwCm1vZHVsZXMvbWFwL2NsYXNzZXMvR29vZ2xlTWFwVXRpbGl0aWVzLmNsYXNzCTE3MTk5NzAxNzMJMzg2NjI2OTE5NwkyMTMzMAkyMTk2Ngptb2R1bGVzL21hcC9jbGFzc2VzL01hcHMuaW5jCTMxNTA2MDkzNDQJOTUwMjA0NjUJNTI1CTUyOAptb2R1bGVzL21hcC9jbGFzc2VzL01hcHMueG1sCTI2Njg5NzI0OTgJMzA4NjQ1NjQ5OAk5NDIJOTc4Cm1vZHVsZXMvbWFwL2NsYXNzZXMvUG9wdWxhdGVHUFNFWElGSW5mb3MuY2xhc3MJMTkyNzc0NTQ5OQk5NjIyNTE0NzUJMzg3OQk0MDAyCm1vZHVsZXMvbWFwL2NsYXNzZXMvV3JpdGVFeGlmSGVhZGVyVG9QaWN0dXJlcy5jbGFzcwkxMzk5NjY5MTU0CTgwMTIwMjI1MAk0NTMwCTQ2NzYKbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBIZWxwZXIuY2xhc3MJMjQyMzUyMDgyNwkyODI3MzA0MDg4CTQwNzIzCTQyMDg4Cm1vZHVsZXMvbWFwL2NsYXNzZXMvbWFwSW50ZXJmYWNlXzFfMC5jbGFzcwkxNjM5NDE1NTk2CTQyMTgwODYxNQkxODUyCTE5MTAKbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBTZWFyY2guY2xhc3MJODM3ODg3NzI4CTQyMDQyODc2NzkJMzg5Ngk0MDM0Cm1vZHVsZXMvbWFwL2ltYWdlcy9hcnJvdy5wbmcJMzc5NTY2MDQ4OAkzNzk1NjYwNDg4CTI4NjUJMjg2NQptb2R1bGVzL21hcC9pbWFnZXMvYmFzZW1hcmtlcnMvR3JvdXBNYXJrZXIucG5nCTI4NjA1NTExNDEJMjg2MDU1MTE0MQk4MTMJODEzCm1vZHVsZXMvbWFwL2ltYWdlcy9iYXNlbWFya2Vycy9ncm91cC5wbmcJMTY3MzMwODk1CTE2NzMzMDg5NQk5MjAJOTIwCm1vZHVsZXMvbWFwL2ltYWdlcy9iYXNlbWFya2Vycy9pbmZvYnVsbGUucG5nCTM0NTQyNTIyODUJMzQ1NDI1MjI4NQkxMTE5CTExMTkKbW9kdWxlcy9tYXAvaW1hZ2VzL2Jhc2VtYXJrZXJzL2luZm9idWxsZV9tYXJrZXJzLnBuZwkyMjc4MTc3NDM4CTIyNzgxNzc0MzgJMTQ2OQkxNDY5Cm1vZHVsZXMvbWFwL2ltYWdlcy9iYXNlbWFya2Vycy9tYW4ucG5nCTEwMjYxOTIxOTkJMTAyNjE5MjE5OQkxMzA5CTEzMDkKbW9kdWxlcy9tYXAvaW1hZ2VzL2Jhc2VtYXJrZXJzL21hcmtlci5wbmcJNzY5NDgwMjQ2CTc2OTQ4MDI0Ngk1NjIJNTYyCm1vZHVsZXMvbWFwL2ltYWdlcy9iYXNlbWFya2Vycy9tYXJrZXJfU0dSRUVOLnBuZwkzNDIxMzIwMzYwCTM0MjEzMjAzNjAJODc4CTg3OAptb2R1bGVzL21hcC9pbWFnZXMvYmFzZW1hcmtlcnMvbWFya2VycG9pbnQucG5nCTM3NzczMDE4MzUJMzc3NzMwMTgzNQkxNjQ3CTE2NDcKbW9kdWxlcy9tYXAvaW1hZ2VzL2Jhc2VtYXJrZXJzL3BlcnNvbi5wbmcJMTkwNzIyMTk3MAkxOTA3MjIxOTcwCTU5MQk1OTEKbW9kdWxlcy9tYXAvaW1hZ2VzL2Jhc2VtYXJrZXJzL3NlbWktdHJhbnNwLnBuZwk4OTIzOTUwNDcJODkyMzk1MDQ3CTUwNgk1MDYKbW9kdWxlcy9tYXAvaW1hZ2VzL2Jhc2VtYXJrZXJzL3NtaWxpZW1hcmtlci5wbmcJMzUxODA4ODcwNAkzNTE4MDg4NzA0CTE3MTUJMTcxNQptb2R1bGVzL21hcC9pbWFnZXMvYmFzZW1hcmtlcnMvdHJpYW5nbGUucG5nCTI4MjMyMTExODgJMjgyMzIxMTE4OAk5MzkJOTM5Cm1vZHVsZXMvbWFwL2ltYWdlcy9iYXNlbWFya2Vycy90cmlwbGVfbWFya2Vycy5wbmcJMTA0OTUyODA0MgkxMDQ5NTI4MDQyCTY3Mwk2NzMKbW9kdWxlcy9tYXAvaW1hZ2VzL2JsYW5rLmdpZgk0MDQxNDg4MzUwCTQwNDE0ODgzNTAJNDkJNDkKbW9kdWxlcy9tYXAvaW1hZ2VzL2Rvd24ucG5nCTIxODI5NzQ5MjMJMjE4Mjk3NDkyMwk1MzIJNTMyCm1vZHVsZXMvbWFwL2ltYWdlcy9lcnJvci5wbmcJMzE5OTAyMzYxNAkzMTk5MDIzNjE0CTkyNQk5MjUKbW9kdWxlcy9tYXAvaW1hZ2VzL2hlbHAucG5nCTEzNzYxNzE4NzIJMTM3NjE3MTg3MgkxMzU5CTEzNTkKbW9kdWxlcy9tYXAvaW1hZ2VzL2luZm9ybWF0aW9uLnBuZwk3MTYzMjI2MTcJNzE2MzIyNjE3CTEyMDQJMTIwNAptb2R1bGVzL21hcC9pbWFnZXMvbWFya2VyX3NoYWRvdy5wbmcJMTQxMjg4ODIxMQkxNDEyODg4MjExCTQzNgk0MzYKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvR3JvdXBNYXJrZXJzL2NvbG9ybGlzdAkxNjg3MTM2NTgyCTE2ODcxMzY1ODIJNTgJNTgKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvR3JvdXBNYXJrZXJzL21hcmtlcl9BUVVBLnBuZwkxODE2Mjg2NTQ4CTE4MTYyODY1NDgJNzgzCTc4Mwptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9Hcm91cE1hcmtlcnMvbWFya2VyX0JMQUNLLnBuZwkxMDAyMjU5NTYwCTEwMDIyNTk1NjAJNTcxCTU3MQptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9Hcm91cE1hcmtlcnMvbWFya2VyX0JMVUUucG5nCTEzMjk2ODgwNzAJMTMyOTY4ODA3MAk4MzMJODMzCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL0dyb3VwTWFya2Vycy9tYXJrZXJfR1JBWS5wbmcJMzMyOTA5NDE3MAkzMzI5MDk0MTcwCTYyOAk2MjgKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvR3JvdXBNYXJrZXJzL21hcmtlcl9HUkVFTi5wbmcJNjQxOTk4MTEyCTY0MTk5ODExMgk3OTcJNzk3Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL0dyb3VwTWFya2Vycy9tYXJrZXJfT1JBTkdFLnBuZwk5OTQzMzA2MzEJOTk0MzMwNjMxCTc0Mwk3NDMKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvR3JvdXBNYXJrZXJzL21hcmtlcl9QVVJQTEUucG5nCTE1NjgxODM0OTUJMTU2ODE4MzQ5NQk3NTEJNzUxCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL0dyb3VwTWFya2Vycy9tYXJrZXJfUkVELnBuZwkzNDc0ODE1NzgyCTM0NzQ4MTU3ODIJNjA5CTYwOQptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9Hcm91cE1hcmtlcnMvbWFya2VyX1dISVRFLnBuZwkzNzQ3MTc3OTA1CTM3NDcxNzc5MDUJNjM0CTYzNAptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9Hcm91cE1hcmtlcnMvbWFya2VyX1lFTExPVy5wbmcJMzc1MDkwNDk1NgkzNzUwOTA0OTU2CTgyMwk4MjMKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvUGVyc29ucy9jb2xvcmxpc3QJMTY4NzEzNjU4MgkxNjg3MTM2NTgyCTU4CTU4Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL1BlcnNvbnMvbWFya2VyX0FRVUEucG5nCTE3MDA2MzAzMDEJMTcwMDYzMDMwMQk1OTQJNTk0Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL1BlcnNvbnMvbWFya2VyX0JMQUNLLnBuZwkyNjkwNjcyOTUyCTI2OTA2NzI5NTIJMzM3CTMzNwptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9QZXJzb25zL21hcmtlcl9CTFVFLnBuZwkzNzY2NjAyNDcwCTM3NjY2MDI0NzAJNTkzCTU5Mwptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9QZXJzb25zL21hcmtlcl9HUkFZLnBuZwk4ODcyMTE5NjAJODg3MjExOTYwCTU2MQk1NjEKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvUGVyc29ucy9tYXJrZXJfR1JFRU4ucG5nCTE4NDgyMjcxMDYJMTg0ODIyNzEwNgk1ODgJNTg4Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL1BlcnNvbnMvbWFya2VyX09SQU5HRS5wbmcJMjU3MzMyMzk1OQkyNTczMzIzOTU5CTU5MAk1OTAKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvUGVyc29ucy9tYXJrZXJfUFVSUExFLnBuZwk3MDM0MDQ5NDUJNzAzNDA0OTQ1CTU5MAk1OTAKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvUGVyc29ucy9tYXJrZXJfUkVELnBuZwkzMDg2NjQ1ODQ1CTMwODY2NDU4NDUJNTIyCTUyMgptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9QZXJzb25zL21hcmtlcl9XSElURS5wbmcJMTU1Nzc0NDQzNAkxNTU3NzQ0NDM0CTU4Ngk1ODYKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvUGVyc29ucy9tYXJrZXJfWUVMTE9XLnBuZwkxMzE5MDExOTA3CTEzMTkwMTE5MDcJNTk0CTU5NAptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9iaWdkb3RzL2NvbG9ybGlzdAkxNjg3MTM2NTgyCTE2ODcxMzY1ODIJNTgJNTgKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvYmlnZG90cy9tYXJrZXJfQVFVQS5wbmcJMjkxMDk4Mzc2CTI5MTA5ODM3NgkxMzkzCTEzOTMKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvYmlnZG90cy9tYXJrZXJfQkxBQ0sucG5nCTI0NjExMzIwODIJMjQ2MTEzMjA4Mgk3MjIJNzIyCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL2JpZ2RvdHMvbWFya2VyX0JMVUUucG5nCTQxNTk2Njg0OAk0MTU5NjY4NDgJMTM3OQkxMzc5Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL2JpZ2RvdHMvbWFya2VyX0dSQVkucG5nCTM0MzQzNzg3ODIJMzQzNDM3ODc4MgkxMjcwCTEyNzAKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvYmlnZG90cy9tYXJrZXJfR1JFRU4ucG5nCTY1NDQ0MDg2Mgk2NTQ0NDA4NjIJMTM0MwkxMzQzCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL2JpZ2RvdHMvbWFya2VyX09SQU5HRS5wbmcJMjg2MDEzOTc4MQkyODYwMTM5NzgxCTEzNzAJMTM3MAptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9iaWdkb3RzL21hcmtlcl9QVVJQTEUucG5nCTI3NTkwODMyNzQJMjc1OTA4MzI3NAkxMzY5CTEzNjkKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvYmlnZG90cy9tYXJrZXJfUkVELnBuZwkyMTQ3OTg1MTY2CTIxNDc5ODUxNjYJMTAxMAkxMDEwCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL2JpZ2RvdHMvbWFya2VyX1dISVRFLnBuZwk1MTE2Nzk4MzcJNTExNjc5ODM3CTEzNDcJMTM0Nwptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9iaWdkb3RzL21hcmtlcl9ZRUxMT1cucG5nCTM4MTA5ODEwODEJMzgxMDk4MTA4MQkxNDA1CTE0MDUKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvZHVkZXMvY29sb3JsaXN0CTM4ODg4NjY5NDgJMzg4ODg2Njk0OAkxNQkxNQptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9kdWRlcy9tYXJrZXJfQkxVRS5wbmcJMTkzODYyNDUwNwkxOTM4NjI0NTA3CTEyNzgJMTI3OAptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9kdWRlcy9tYXJrZXJfR1JFRU4ucG5nCTg4NDk5MDM4OAk4ODQ5OTAzODgJMTI1OAkxMjU4Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL2R1ZGVzL21hcmtlcl9SRUQucG5nCTI1NDc5OTI4NwkyNTQ3OTkyODcJMTE2MwkxMTYzCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtYWxscHVzaHBpbnMvY29sb3JsaXN0CTE2ODcxMzY1ODIJMTY4NzEzNjU4Mgk1OAk1OAptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9zbWFsbHB1c2hwaW5zL21hcmtlcl9BUVVBLnBuZwkxMzIzMzUwMzA1CTEzMjMzNTAzMDUJNTk1CTU5NQptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9zbWFsbHB1c2hwaW5zL21hcmtlcl9CTEFDSy5wbmcJODYwOTY2NTgJODYwOTY2NTgJMzg5CTM4OQptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9zbWFsbHB1c2hwaW5zL21hcmtlcl9CTFVFLnBuZwk2NDk5NDkzOTEJNjQ5OTQ5MzkxCTYyNQk2MjUKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvc21hbGxwdXNocGlucy9tYXJrZXJfR1JBWS5wbmcJMzMxMzY4NTUyCTMzMTM2ODU1Mgk1NzgJNTc4Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtYWxscHVzaHBpbnMvbWFya2VyX0dSRUVOLnBuZwkxNTUzMTY2MTAzCTE1NTMxNjYxMDMJNjA1CTYwNQptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9zbWFsbHB1c2hwaW5zL21hcmtlcl9PUkFOR0UucG5nCTIzNzEwMzE4ODcJMjM3MTAzMTg4Nwk2MDUJNjA1Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtYWxscHVzaHBpbnMvbWFya2VyX1BVUlBMRS5wbmcJNDI2ODA4MDQ5CTQyNjgwODA0OQk2MTMJNjEzCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtYWxscHVzaHBpbnMvbWFya2VyX1JFRC5wbmcJNDQ1Mzk0NDU0CTQ0NTM5NDQ1NAk0NjQJNDY0Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtYWxscHVzaHBpbnMvbWFya2VyX1dISVRFLnBuZwkxNTY0NDg2ODczCTE1NjQ0ODY4NzMJNTQxCTU0MQptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9zbWFsbHB1c2hwaW5zL21hcmtlcl9ZRUxMT1cucG5nCTIyNTk0MDc2OTIJMjI1OTQwNzY5Mgk2MDQJNjA0Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtaWxpZWZhY2VzL2NvbG9ybGlzdAkxNjg3MTM2NTgyCTE2ODcxMzY1ODIJNTgJNTgKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvc21pbGllZmFjZXMvbWFya2VyX0FRVUEucG5nCTM2NDI0NzA0NjEJMzY0MjQ3MDQ2MQk3NjAJNzYwCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtaWxpZWZhY2VzL21hcmtlcl9CTEFDSy5wbmcJMjE2OTQxNzYzNAkyMTY5NDE3NjM0CTQ0MQk0NDEKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvc21pbGllZmFjZXMvbWFya2VyX0JMVUUucG5nCTQwNjk1NDgyMjcJNDA2OTU0ODIyNwk3NzUJNzc1Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtaWxpZWZhY2VzL21hcmtlcl9HUkFZLnBuZwkzODc5MjMzODY4CTM4NzkyMzM4NjgJNzU4CTc1OAptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9zbWlsaWVmYWNlcy9tYXJrZXJfR1JFRU4ucG5nCTI4NTg3OTgyNDQJMjg1ODc5ODI0NAk3NDkJNzQ5Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtaWxpZWZhY2VzL21hcmtlcl9PUkFOR0UucG5nCTMzNTgzOTE5NTMJMzM1ODM5MTk1Mwk3NTQJNzU0Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtaWxpZWZhY2VzL21hcmtlcl9QVVJQTEUucG5nCTIyMjk5NjY3NTQJMjIyOTk2Njc1NAk3NTMJNzUzCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtaWxpZWZhY2VzL21hcmtlcl9SRUQucG5nCTIzOTQ0MjgyMTgJMjM5NDQyODIxOAk1OTgJNTk4Cm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3NtaWxpZWZhY2VzL21hcmtlcl9XSElURS5wbmcJMTEzMDA2NTUxNwkxMTMwMDY1NTE3CTc3Nwk3NzcKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvc21pbGllZmFjZXMvbWFya2VyX1lFTExPVy5wbmcJMTIzNTI1ODAzMAkxMjM1MjU4MDMwCTc4Mgk3ODIKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvdHJhbnNwYXJlbnQvY29sb3JsaXN0CTE2ODcxMzY1ODIJMTY4NzEzNjU4Mgk1OAk1OAptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy90cmFuc3BhcmVudC9tYXJrZXJfQVFVQS5wbmcJNDE4NDYyMDQ0Ngk0MTg0NjIwNDQ2CTUwMAk1MDAKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvdHJhbnNwYXJlbnQvbWFya2VyX0JMQUNLLnBuZwkyMDQ5NDE5MzQ1CTIwNDk0MTkzNDUJNDYxCTQ2MQptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy90cmFuc3BhcmVudC9tYXJrZXJfQkxVRS5wbmcJMjQyNzc4NzQxNwkyNDI3Nzg3NDE3CTUwMgk1MDIKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvdHJhbnNwYXJlbnQvbWFya2VyX0dSQVkucG5nCTM3MDE5ODg4OTcJMzcwMTk4ODg5Nwk0OTMJNDkzCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3RyYW5zcGFyZW50L21hcmtlcl9HUkVFTi5wbmcJMzQ1MjUxMTYzOAkzNDUyNTExNjM4CTUwMwk1MDMKbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvdHJhbnNwYXJlbnQvbWFya2VyX09SQU5HRS5wbmcJNDk5NjAzMDQwCTQ5OTYwMzA0MAk1MDEJNTAxCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3RyYW5zcGFyZW50L21hcmtlcl9QVVJQTEUucG5nCTQ5ODc4MjEyOQk0OTg3ODIxMjkJNTAzCTUwMwptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy90cmFuc3BhcmVudC9tYXJrZXJfUkVELnBuZwkzOTc2OTkwNjk5CTM5NzY5OTA2OTkJNDkxCTQ5MQptb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy90cmFuc3BhcmVudC9tYXJrZXJfV0hJVEUucG5nCTIxNjg1MzU2NzAJMjE2ODUzNTY3MAk0NzAJNDcwCm1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL3RyYW5zcGFyZW50L21hcmtlcl9ZRUxMT1cucG5nCTk0MDY5MDcyCTk0MDY5MDcyCTQ5OQk0OTkKbW9kdWxlcy9tYXAvaW1hZ2VzL211bHRpL2JpZ19tdWx0aWNvbG9yLnBuZwkyMDY0NTY0MDExCTIwNjQ1NjQwMTEJMTkwNwkxOTA3Cm1vZHVsZXMvbWFwL2ltYWdlcy9tdWx0aS9idWxiX211bHRpY29sb3IucG5nCTI1MjEwOTQ3NDgJMjUyMTA5NDc0OAkxODcyCTE4NzIKbW9kdWxlcy9tYXAvaW1hZ2VzL211bHRpL2R1ZGVzX211bHRpY29sb3IucG5nCTY4NTk3NDI2NAk2ODU5NzQyNjQJMTY5OAkxNjk4Cm1vZHVsZXMvbWFwL2ltYWdlcy9tdWx0aS9tYXJrZXJfWk9PTS5wbmcJMzA5NDQ5NTAxOAkzMDk0NDk1MDE4CTM5OTEJMzk5MQptb2R1bGVzL21hcC9pbWFnZXMvbXVsdGkvbXVsdGlfMS5wbmcJMTUzMzE5MTA1CTE1MzMxOTEwNQkxODY2CTE4NjYKbW9kdWxlcy9tYXAvaW1hZ2VzL211bHRpL211bHRpXzIucG5nCTMzNjk1MDMxNDIJMzM2OTUwMzE0MgkxNzE4CTE3MTgKbW9kdWxlcy9tYXAvaW1hZ2VzL211bHRpL211bHRpXzMucG5nCTEyOTc4OTYyMTMJMTI5Nzg5NjIxMwkxNTA1CTE1MDUKbW9kdWxlcy9tYXAvaW1hZ2VzL211bHRpL3NtYWxsX211bHRpY29sb3IucG5nCTMxMjkzNzIzMzEJMzEyOTM3MjMzMQk3OTYJNzk2Cm1vZHVsZXMvbWFwL2ltYWdlcy9tdWx0aS9zbWFsbF9tdWx0aWNvbG9yXzIucG5nCTMzMjk3NjQ3NDQJMzMyOTc2NDc0NAk4OTEJODkxCm1vZHVsZXMvbWFwL2ltYWdlcy9tdWx0aS90cmlhbmdsZV9tdWx0aWNvbG9yLnBuZwkyOTgxMzczNTYzCTI5ODEzNzM1NjMJMTMwMwkxMzAzCm1vZHVsZXMvbWFwL2ltYWdlcy9tdWx0aS96b29tLWluLXRyYW5zLnBuZwk1NTgyNTk5NDQJNTU4MjU5OTQ0CTg3MQk4NzEKbW9kdWxlcy9tYXAvaW1hZ2VzL3JlZ3JvdXB0aHVtYi5qcGcJMTMyMjEyMDk1MgkxMzIyMTIwOTUyCTE0MDg2CTE0MDg2Cm1vZHVsZXMvbWFwL2ltYWdlcy91cC5wbmcJMjgyMzgxNDAwMQkyODIzODE0MDAxCTQ4MQk0ODEKbW9kdWxlcy9tYXAvaW1hZ2VzL3dhcm5pbmcucG5nCTI3Nzc0OTA3OQkyNzc3NDkwNzkJOTU0CTk1NAptb2R1bGVzL21hcC9pbmNsdWRlcy9Hb29nbGVNYXAuY3NzCTQ4NjU1NTYxMwkyMjgxNjAxMzgyCTIwNTQJMjE3Mgptb2R1bGVzL21hcC9pbmNsdWRlcy9NYXBBZG1pbkNvbnRyb2xsZXJJbml0LmluYwk5MTUyODY4MjcJMjkyODg2NTQyOAkxNTMzCTE1NzgKbW9kdWxlcy9tYXAvaW5jbHVkZXMvTWFwQWRtaW5FZGl0cy5pbmMJMjQ1NDg5MzAzOAkxMDA1MTI2NTY1CTQ1NTgJNDY2NQptb2R1bGVzL21hcC9pbmNsdWRlcy9NYXBBZG1pblZpZXdJbml0LmluYwkxMDI5NTU0NjkJMjg0MTg0NjgxMAkzNTM4CTM2MzMKbW9kdWxlcy9tYXAvaW5jbHVkZXMvZ3pvb20uanMJMTgzNzQyMzc3MwkzNDI0NzAxMjg3CTcyNTUJNzI4OQptb2R1bGVzL21hcC9pbmNsdWRlcy90b29sa2l0L0VYSUYucGhwCTMyNjg1MzMwOTQJMzQzNTA4NjA0NQkxMTg5ODkJMTIxNzI2Cm1vZHVsZXMvbWFwL2luY2x1ZGVzL3Rvb2xraXQvRVhJRl9UYWdzLnBocAk5MTMyNzUzNDgJMjExMDUwNzEzMQkzNTQ1NQkzNjM2OQptb2R1bGVzL21hcC9pbmNsdWRlcy90b29sa2l0L0lQVEMucGhwCTM2MjcxOTUxNDEJMzUwMzQ2MzUxMAkzNTgxNQkzNjUwNQptb2R1bGVzL21hcC9pbmNsdWRlcy90b29sa2l0L0pQRUcucGhwCTExOTk1NTgyMDkJMTAyMjUxMTk3NgkzNzg4MwkzODg1NAptb2R1bGVzL21hcC9pbmNsdWRlcy90b29sa2l0L1BJTS5waHAJMTYzMDY1NzM0MQkyNTM1MjY0MDkwCTExMDI4CTExMzA3Cm1vZHVsZXMvbWFwL2luY2x1ZGVzL3Rvb2xraXQvUGhvdG9zaG9wX0lSQi5waHAJNTUxMTI0MzAzCTM5MDI0OTQ3NjMJODAzMzkJODE4NTIKbW9kdWxlcy9tYXAvaW5jbHVkZXMvdG9vbGtpdC9Vbmljb2RlLnBocAkxNDU3MDUxOTAJNzI2NTQ4MjEzCTQ5NzE3CTUwOTQzCm1vZHVsZXMvbWFwL2luY2x1ZGVzL3Rvb2xraXQvWE1MLnBocAk0MTkzNzYxMjY0CTQyNTg2OTc4NTAJMTQ5MTMJMTUzMDgKbW9kdWxlcy9tYXAvaW5jbHVkZXMvdG9vbGtpdC9YTVAucGhwCTExMTUwOTI4NTcJMjgzMDk1OTIxMgk0NTg1MQk0NjkxMwptb2R1bGVzL21hcC9pbmNsdWRlcy90b29sa2l0L2Jhc2VleGlmaGVhZGVyLmRhdAk1NjM2NjU2NTgJNTYzNjY1NjU4CTMwNAkzMDQKbW9kdWxlcy9tYXAvaW5jbHVkZXMvdG9vbGtpdC9wam10X3V0aWxzLnBocAkyNDA1OTkzMDM2CTE5MzM5Nzc0OQk1NzU0CTU5MDMKbW9kdWxlcy9tYXAvbWFwSXRlbUVkaXQuaW5jCTQ2MzY3ODQxNgkzNDY2NTU4NDYyCTc3NzQJODAxMgptb2R1bGVzL21hcC9tb2R1bGUuaW5jCTY0MTc5NzU3NwkxOTgwMjY1MDE1CTM0MDY3CTM1MTE4Cm1vZHVsZXMvbWFwL3BuZ2JlaGF2aW9yLmh0Ywk0MjE4ODc3OTE5CTQyMDYyNDA0NDAJMjA2NAkyMTUwCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9BZG1pbkhlYWRlci50cGwJMTc4Mzg0MzEyCTYxNjI4MDkwMgk5OTIxCTEwMTg2Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9IZWFkZXIudHBsCTEzMTA5OTA2NzcJOTY5Nzc2Njk2CTE3NgkxNzgKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcEFkbWluVGFiLnRwbAkzMDY3ODUzNDI4CTU2NDUxNTIyNgkzODMwCTM5MzYKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcEZpbHRlckFkbWluLnRwbAkyNzM0MzUyNjQwCTE5Mjk2NzY0ODMJMTA3NDMJMTA5MzEKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcEdab29tQWRtaW4udHBsCTI4MDU1NDkwNDAJODMyOTIwNDQwCTQ1MDcJNDU3OAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvTWFwR29vZ2xlT3ZlcnZpZXdBZG1pbi50cGwJMzE3Mzc2MjExMQk1ODQzMTEyNDcJNTgwMgk1ODkzCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBHcm91cEFkbWluLnRwbAkzMDgzMjg5NjUzCTM2MDc5MDA0MjkJMTE5NDYJMTIxNDkKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcEhlYWRlci50cGwJMjcwMDE5NTEzCTQ3MDY2OTE0Nwk0OTg1MAk1MDg2Mgptb2R1bGVzL21hcC90ZW1wbGF0ZXMvTWFwTGVnZW5kQWRtaW4udHBsCTEzMDc5MjY2MjYJNDI0MzA5MDM3MQkxMDAwOQkxMDE5Mwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvTWFwTWFya2Vyc0FkbWluLnRwbAkyNjYwOTQ0OTkxCTIyMjU4MDgwMTEJMjUyNjAJMjU3MjMKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcFJvdXRlQWRtaW4udHBsCTQ3NzE1ODM3NQkxNzIxMTIxNzQyCTE0NzUxCTE0OTk0Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBTaXRlQWRtaW4udHBsCTkzMzkxNjA3OAkzNjk0NDcwNzE0CTI5MzU5CTI5ODQ4Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBUaGVtZUFkbWluLnRwbAk0MDg4NzUyNzM0CTEwNDIwNjA3NDYJMTM0MTgJMTM2MzAKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL1Nob3dNYXAudHBsCTYwMDQyODcxNgk5NTM0Mjc5NzYJOTU3OQk5NzczCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9ibG9ja3MvSXRlbUNvb3Jkcy50cGwJMjkwMjI0NzU4NwkzNTUzMDg5MTA3CTEyODcJMTMwOQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvYmxvY2tzL0xlZ2VuZC50cGwJNDY1MTg2NTg5CTIzMzUxMTk5OTMJNTAzNwk1MTEzCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9ibG9ja3MvTWluaU1hcC50cGwJOTY5NDYzMjYxCTI4NjEwNjIyNjYJNTE0Mwk1MjU4Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9ibG9ja3MvVGh1bWIudHBsCTE2ODM4NTE3NzAJMzUxNzYxODk2OQk4OTgJOTExCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9ibG9ja3MvYmxvY2tzLmluYwkyODEyNDE1MzkyCTkzOTgzODExMwkyNDI2CTI0ODkKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2Jsb2Nrcy9tYXAudHBsCTQxNzgxODgwNTQJMTkwMzY3NzgyMAkxMjI3CTEyNDcKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfRmxvcmlkYS9DZW50ZXIucG5nCTQwODE1NTM4NDMJNDA4MTU1Mzg0Mwk0ODQJNDg0Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX0Zsb3JpZGEvQ2VudGVyQkcucG5nCTMzODM5NjU3MTgJMzM4Mzk2NTcxOAkxNjc4CTE2NzgKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfRmxvcmlkYS9FYXN0LnBuZwkzMjY4NTAzOTAyCTMyNjg1MDM5MDIJMjg2CTI4Ngptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9GbG9yaWRhL05vcnRoLnBuZwk0MjEyOTY0NTE3CTQyMTI5NjQ1MTcJMjk3CTI5Nwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9GbG9yaWRhL1NsaWRlTm90Y2gucG5nCTQ0ODk5NzU2Ngk0NDg5OTc1NjYJMTU0CTE1NAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9GbG9yaWRhL1NsaWRlU2VsLnBuZwkxNjM5NTI4NjA5CTE2Mzk1Mjg2MDkJMTQ0CTE0NAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9GbG9yaWRhL1NvdXRoLnBuZwkxNTA0NjE2NjEJMTUwNDYxNjYxCTI5MAkyOTAKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfRmxvcmlkYS9UeXBlQkcucG5nCTQ3MzU4NTUwMgk0NzM1ODU1MDIJNDI5MAk0MjkwCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX0Zsb3JpZGEvV2VzdC5wbmcJNTIyMzYwNjMzCTUyMjM2MDYzMwkyOTQJMjk0Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX0Zsb3JpZGEvWm9vbUluLnBuZwkzMTE1Nzg0MTI1CTMxMTU3ODQxMjUJMzEwCTMxMAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9GbG9yaWRhL1pvb21PdXQucG5nCTI3MTYzMDMwOAkyNzE2MzAzMDgJMjkzCTI5Mwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9GbG9yaWRhL2NvbnRyb2wuaW5jCTI4ODY0ODM2ODcJMTQwMDI1OTIyOQkyMTM0CTIyMzAKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfTEJsdWUvQ2VudGVyLnBuZwk0MDgxNTUzODQzCTQwODE1NTM4NDMJNDg0CTQ4NAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9MQmx1ZS9DZW50ZXJCRy5wbmcJNDI4MTI2Njk5NQk0MjgxMjY2OTk1CTYyMjAJNjIyMAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9MQmx1ZS9FYXN0LnBuZwkzMjY4NTAzOTAyCTMyNjg1MDM5MDIJMjg2CTI4Ngptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9MQmx1ZS9Ob3J0aC5wbmcJNDIxMjk2NDUxNwk0MjEyOTY0NTE3CTI5NwkyOTcKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfTEJsdWUvU2xpZGVOb3RjaC5wbmcJNDQ4OTk3NTY2CTQ0ODk5NzU2NgkxNTQJMTU0Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX0xCbHVlL1NsaWRlU2VsLnBuZwkxNjM5NTI4NjA5CTE2Mzk1Mjg2MDkJMTQ0CTE0NAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9MQmx1ZS9Tb3V0aC5wbmcJMTY2NDQxNTUwNQkxNjY0NDE1NTA1CTM3NQkzNzUKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfTEJsdWUvVHlwZUJHLnBuZwkyMjkwNDA0NDIJMjI5MDQwNDQyCTUxODIJNTE4Mgptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9MQmx1ZS9XZXN0LnBuZwk1MjIzNjA2MzMJNTIyMzYwNjMzCTI5NAkyOTQKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfTEJsdWUvWm9vbUluLnBuZwkzMTE1Nzg0MTI1CTMxMTU3ODQxMjUJMzEwCTMxMAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9MQmx1ZS9ab29tT3V0LnBuZwkyNzE2MzAzMDgJMjcxNjMwMzA4CTI5MwkyOTMKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfTEJsdWUvY29udHJvbC5pbmMJMTgyNjQxODgxNQkxNjY1OTY5NzY5CTIxMzUJMjIzMQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9PcmFuZ2UvQ2VudGVyLnBuZwkxODU5NTUwMDk2CTE4NTk1NTAwOTYJNTg2CTU4Ngptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9PcmFuZ2UvQ2VudGVyQkcucG5nCTMyMzg1MTg4NjIJMzIzODUxODg2MgkxNjY2CTE2NjYKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfT3JhbmdlL0Vhc3QucG5nCTI0MDM2OTEzCTI0MDM2OTEzCTM1OQkzNTkKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfT3JhbmdlL05vcnRoLnBuZwkxODg3Nzc2NjkJMTg4Nzc3NjY5CTM3MgkzNzIKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfT3JhbmdlL1NsaWRlTm90Y2gucG5nCTMyNzg0MTAxOTMJMzI3ODQxMDE5MwkyMDEJMjAxCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX09yYW5nZS9TbGlkZVNlbC5wbmcJNDA5MTQ5MDgzNAk0MDkxNDkwODM0CTE5MwkxOTMKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfT3JhbmdlL1NvdXRoLnBuZwkzOTg4ODM1NDAJMzk4ODgzNTQwCTM3NAkzNzQKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfT3JhbmdlL1R5cGVCRy5wbmcJNTM3ODQzNjQwCTUzNzg0MzY0MAk0OTU4CTQ5NTgKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfT3JhbmdlL1dlc3QucG5nCTIyNDg2NDUyNjgJMjI0ODY0NTI2OAkzNzIJMzcyCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX09yYW5nZS9ab29tSW4ucG5nCTM3OTk3Nzk3NjkJMzc5OTc3OTc2OQkzOTIJMzkyCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX09yYW5nZS9ab29tT3V0LnBuZwkzNDM4Mjc2MDcxCTM0MzgyNzYwNzEJMzczCTM3Mwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9PcmFuZ2UvY29udHJvbC5pbmMJMTgyNjQxODgxNQkxNjY1OTY5NzY5CTIxMzUJMjIzMQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9icm93bi9DZW50ZXIucG5nCTU2NTQ4NTI1MQk1NjU0ODUyNTEJNjEyCTYxMgptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9icm93bi9DZW50ZXJCRy5wbmcJMTQzNjQyNzk3MAkxNDM2NDI3OTcwCTQ1NDAJNDU0MAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9icm93bi9FYXN0LnBuZwkxNDE3ODM1NjYwCTE0MTc4MzU2NjAJMzU4CTM1OAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9icm93bi9Ob3J0aC5wbmcJMzg0ODgyNzI2NgkzODQ4ODI3MjY2CTM3NAkzNzQKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfYnJvd24vU2xpZGVOb3RjaC5wbmcJMjExNTc0ODQ4OQkyMTE1NzQ4NDg5CTIwMwkyMDMKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfYnJvd24vU2xpZGVTZWwucG5nCTExNTIyMDg1MzcJMTE1MjIwODUzNwkxOTMJMTkzCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX2Jyb3duL1NvdXRoLnBuZwkxOTczODYxMzEwCTE5NzM4NjEzMTAJMzc3CTM3Nwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9icm93bi9UeXBlQkcucG5nCTYxNTgzMjk2Nwk2MTU4MzI5NjcJNDk2Nwk0OTY3Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX2Jyb3duL1dlc3QucG5nCTE1ODAyMDc4MTIJMTU4MDIwNzgxMgkzNzQJMzc0Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX2Jyb3duL1pvb21Jbi5wbmcJMTEyNDE3ODI2NwkxMTI0MTc4MjY3CTM5NAkzOTQKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfYnJvd24vWm9vbU91dC5wbmcJMjM4NzMxMDU2OAkyMzg3MzEwNTY4CTM3NgkzNzYKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfYnJvd24vY29udHJvbC5pbmMJMTgyNjQxODgxNQkxNjY1OTY5NzY5CTIxMzUJMjIzMQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9ncmVlbi9DZW50ZXIucG5nCTM3MTA0NTkxMQkzNzEwNDU5MTEJNjEyCTYxMgptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9ncmVlbi9DZW50ZXJCRy5wbmcJNTQ0MTk5ODA0CTU0NDE5OTgwNAkxNjg4CTE2ODgKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfZ3JlZW4vRWFzdC5wbmcJMjY2NzE0Njk4CTI2NjcxNDY5OAkzNTgJMzU4Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX2dyZWVuL05vcnRoLnBuZwkyMTc3Njc4NDE0CTIxNzc2Nzg0MTQJMzc0CTM3NAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9ncmVlbi9TbGlkZU5vdGNoLnBuZwkzMTg4NTAxODc1CTMxODg1MDE4NzUJMjAzCTIwMwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9ncmVlbi9TbGlkZVNlbC5wbmcJMTAyNDE2ODI1OQkxMDI0MTY4MjU5CTE5MwkxOTMKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfZ3JlZW4vU291dGgucG5nCTMzMDcxNjgwMDMJMzMwNzE2ODAwMwkzNzYJMzc2Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9GdWxsX2dyZWVuL1R5cGVCRy5wbmcJODQxNDc2MzM1CTg0MTQ3NjMzNQk1MjIxCTUyMjEKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfZ3JlZW4vV2VzdC5wbmcJMjgxMDUwNTMyNgkyODEwNTA1MzI2CTM3NwkzNzcKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL0Z1bGxfZ3JlZW4vWm9vbUluLnBuZwkzODA1MzM4OTI5CTM4MDUzMzg5MjkJMzk0CTM5NAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9ncmVlbi9ab29tT3V0LnBuZwkyMzcwNzgxMzk4CTIzNzA3ODEzOTgJMzc2CTM3Ngptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvRnVsbF9ncmVlbi9jb250cm9sLmluYwkxODI2NDE4ODE1CTE2NjU5Njk3NjkJMjEzNQkyMjMxCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9iYXJyb3cvQ2VudGVyLnBuZwkyMTI1MTY3MzIxCTIxMjUxNjczMjEJMzgzOAkzODM4Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9iYXJyb3cvQ2VudGVyQkcucG5nCTExMTQ0OTA2ODcJMTExNDQ5MDY4Nwk1MDk0CTUwOTQKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2JhcnJvdy9FYXN0LnBuZwkxMjkzNDY5NTEzCTEyOTM0Njk1MTMJMjk0NwkyOTQ3Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9iYXJyb3cvTm9ydGgucG5nCTMxNjE3OTExNDEJMzE2MTc5MTE0MQkzMDEwCTMwMTAKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2JhcnJvdy9TbGlkZU5vdGNoLnBuZwkzNzM4ODE5MzQxCTM3Mzg4MTkzNDEJNjM1CTYzNQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvYmFycm93L1NsaWRlU2VsLnBuZwk0MjA4NDE1MDAwCTQyMDg0MTUwMDAJMjY3CTI2Nwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvYmFycm93L1NvdXRoLnBuZwkzOTI5NDY4NzQyCTM5Mjk0Njg3NDIJMjg4NgkyODg2Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9iYXJyb3cvVHlwZUJHLnBuZwk0MTE3MjM4MTM0CTQxMTcyMzgxMzQJNTQzMwk1NDMzCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9iYXJyb3cvV2VzdC5wbmcJMjg0OTc5NjIxCTI4NDk3OTYyMQkyOTQ0CTI5NDQKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2JhcnJvdy9ab29tSW4ucG5nCTU1ODI1OTk0NAk1NTgyNTk5NDQJODcxCTg3MQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvYmFycm93L1pvb21PdXQucG5nCTMzMTk3MjA5ODYJMzMxOTcyMDk4Ngk4MjkJODI5Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9iYXJyb3cvY29udHJvbC5pbmMJMTQ1MDU4MTkxNwkyMzM1MzI2MTg1CTIxMzYJMjIzMgptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvYmJsdWUvQ2VudGVyLnBuZwkyMTI1MTY3MzIxCTIxMjUxNjczMjEJMzgzOAkzODM4Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9iYmx1ZS9DZW50ZXJCRy5wbmcJMTExNDQ5MDY4NwkxMTE0NDkwNjg3CTUwOTQJNTA5NAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvYmJsdWUvRWFzdC5wbmcJMjgxMzIwMTAyNAkyODEzMjAxMDI0CTgzNAk4MzQKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2JibHVlL05vcnRoLnBuZwk3NTkwMTkxNjMJNzU5MDE5MTYzCTc5Nwk3OTcKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2JibHVlL1NsaWRlTm90Y2gucG5nCTM3Mzg4MTkzNDEJMzczODgxOTM0MQk2MzUJNjM1Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9iYmx1ZS9TbGlkZVNlbC5wbmcJNDIwODQxNTAwMAk0MjA4NDE1MDAwCTI2NwkyNjcKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2JibHVlL1NvdXRoLnBuZwkyMzgyNzM4MzcJMjM4MjczODM3CTgzNAk4MzQKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2JibHVlL1R5cGVCRy5wbmcJMjY5NjI0NzgzNAkyNjk2MjQ3ODM0CTUxMTgJNTExOAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvYmJsdWUvV2VzdC5wbmcJMTMwMDIxOTgzNwkxMzAwMjE5ODM3CTc5Ngk3OTYKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2JibHVlL1pvb21Jbi5wbmcJNTU4MjU5OTQ0CTU1ODI1OTk0NAk4NzEJODcxCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9iYmx1ZS9ab29tT3V0LnBuZwkzMzE5NzIwOTg2CTMzMTk3MjA5ODYJODI5CTgyOQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvYmJsdWUvY29udHJvbC5pbmMJMTEyNTAzNDA0Mwk0MTQ5MTAzNTY5CTIxMjQJMjIyMAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvZHRlYWwvU2xpZGVOb3RjaC5wbmcJMjY1MTk4MjM4CTI2NTE5ODIzOAk2MzIJNjMyCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9kdGVhbC9TbGlkZVNlbC5wbmcJMTIzNzMwNDc5MgkxMjM3MzA0NzkyCTMwNQkzMDUKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2R0ZWFsL1R5cGVCRy5wbmcJNDc2MzE5Njg4CTQ3NjMxOTY4OAk0MDc5CTQwNzkKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2R0ZWFsL1pvb21Jbi5wbmcJNTU4MjU5OTQ0CTU1ODI1OTk0NAk4NzEJODcxCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9kdGVhbC9ab29tT3V0LnBuZwkzMzE5NzIwOTg2CTMzMTk3MjA5ODYJODI5CTgyOQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvZHRlYWwvY2VudGVyLnBuZwk0MjE4MjkzMjcwCTQyMTgyOTMyNzAJNDk3CTQ5Nwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvZHRlYWwvY2VudGVyQkcucG5nCTI3NzAwNjcyNjYJMjc3MDA2NzI2NgkyMDIwCTIwMjAKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2R0ZWFsL2NvbnRyb2wuaW5jCTI3OTYwMzYzMTEJMzg5NjcxMjA4CTIxMzAJMjIyNgptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvZHRlYWwvZWFzdC5wbmcJMzI3NDEzNTkyNQkzMjc0MTM1OTI1CTg1Mgk4NTIKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL2R0ZWFsL25vcnRoLnBuZwkzMzY0MjczODcxCTMzNjQyNzM4NzEJODUzCTg1Mwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvZHRlYWwvc291dGgucG5nCTIzNTE0NTM2ODgJMjM1MTQ1MzY4OAk5MDkJOTA5Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9kdGVhbC93ZXN0LnBuZwkyOTU4NjAwNDc0CTI5NTg2MDA0NzQJODM5CTgzOQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcmVkYXJyb3cvRWFzdC5wbmcJNDIxMzM2NDkyNgk0MjEzMzY0OTI2CTI4ODQJMjg4NAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcmVkYXJyb3cvU2xpZGVOb3RjaC5wbmcJNDAzMDAyMDQ0MAk0MDMwMDIwNDQwCTYzMwk2MzMKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3JlZGFycm93L1NsaWRlU2VsLnBuZwk0MDk2MTE4MjE3CTQwOTYxMTgyMTcJMjYyCTI2Mgptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcmVkYXJyb3cvU291dGgucG5nCTM5MzA2NTQ1MTIJMzkzMDY1NDUxMgkyODg2CTI4ODYKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3JlZGFycm93L1R5cGVCRy5wbmcJMjU0ODUyNzE2OAkyNTQ4NTI3MTY4CTUwMzIJNTAzMgptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcmVkYXJyb3cvV2VzdC5wbmcJNzE5MzUxMjI2CTcxOTM1MTIyNgkyODgyCTI4ODIKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3JlZGFycm93L1pvb21Jbi5wbmcJNTU4MjU5OTQ0CTU1ODI1OTk0NAk4NzEJODcxCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9yZWRhcnJvdy9ab29tT3V0LnBuZwkzMzE5NzIwOTg2CTMzMTk3MjA5ODYJODI5CTgyOQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcmVkYXJyb3cvY2VudGVyLnBuZwkyMzU1NTcxNzkJMjM1NTU3MTc5CTM4MjkJMzgyOQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcmVkYXJyb3cvY2VudGVyQkcucG5nCTQyODEyNjY5OTUJNDI4MTI2Njk5NQk2MjIwCTYyMjAKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3JlZGFycm93L2NvbnRyb2wuaW5jCTQ4NzIwMjczNQkzMDc2MTgyNTMxCTIxMzUJMjIzMgptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcmVkYXJyb3cvbm9ydGgucG5nCTgzODM1NDQzOAk4MzgzNTQ0MzgJMjg5MQkyODkxCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9yb3VuZGJsdWUvQ2VudGVyLnBuZwk5Nzk3ODcxMTIJOTc5Nzg3MTEyCTM1NTYJMzU1Ngptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcm91bmRibHVlL0Vhc3QucG5nCTIyMzMxMTEyNjMJMjIzMzExMTI2MwkxMDgzCTEwODMKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3JvdW5kYmx1ZS9Ob3J0aC5wbmcJMzI4MjgzNjQJMzI4MjgzNjQJMTA0NQkxMDQ1Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9yb3VuZGJsdWUvU2xpZGVOb3RjaC5wbmcJMzczODgxOTM0MQkzNzM4ODE5MzQxCTYzNQk2MzUKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3JvdW5kYmx1ZS9TbGlkZVNlbC5wbmcJNDIwODQxNTAwMAk0MjA4NDE1MDAwCTI2NwkyNjcKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3JvdW5kYmx1ZS9Tb3V0aC5wbmcJMTc2MTYyMDk2NAkxNzYxNjIwOTY0CTEwNTEJMTA1MQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcm91bmRibHVlL1R5cGVCRy5wbmcJMjAxNjk1MjMyOAkyMDE2OTUyMzI4CTQxOTQJNDE5NAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcm91bmRibHVlL1dlc3QucG5nCTM2MDg0MDA0NjcJMzYwODQwMDQ2NwkxMDc3CTEwNzcKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3JvdW5kYmx1ZS9ab29tSW4ucG5nCTU1ODI1OTk0NAk1NTgyNTk5NDQJODcxCTg3MQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvcm91bmRibHVlL1pvb21PdXQucG5nCTMzMTk3MjA5ODYJMzMxOTcyMDk4Ngk4MjkJODI5Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9yb3VuZGJsdWUvY29udHJvbC5pbmMJODAzMDA0OTExCTE2MDU4MDIzMDYJMjI2MQkyMzY0Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy90cmFucy1zcXVhcmUvVHlwZUJHLnBuZwkxNzM3MjEzMzA0CTE3MzcyMTMzMDQJMTA1OQkxMDU5Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy90cmFucy1zcXVhcmUvWm9vbU91dC5naWYJNDI2Nzk5MDg4MAk0MjY3OTkwODgwCTc2CTc2Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy90cmFucy1zcXVhcmUvY29udHJvbC5pbmMJOTU3ODk3Mjk2CTI3MDE3NzgzMzgJMjExNAkyMjEwCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy90cmFucy1zcXVhcmUvZWFzdC5naWYJNDA2MTQ4NjY3Mwk0MDYxNDg2NjczCTgyCTgyCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy90cmFucy1zcXVhcmUvbm9ydGguZ2lmCTMxODU2MDg0NDQJMzE4NTYwODQ0NAk4Mwk4Mwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvdHJhbnMtc3F1YXJlL3NvdXRoLmdpZgkyNDc4Mjk3OTM4CTI0NzgyOTc5MzgJODMJODMKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3RyYW5zLXNxdWFyZS93ZXN0LmdpZgkxMTEzNjczMzExCTExMTM2NzMzMTEJODIJODIKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3RyYW5zLXNxdWFyZS96b29tLWluLmdpZgk2NDE4NzY0NDYJNjQxODc2NDQ2CTc5CTc5Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy96b29tLW9ubHkvVHlwZUJHLnBuZwkxNzM3MjEzMzA0CTE3MzcyMTMzMDQJMTA1OQkxMDU5Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy96b29tLW9ubHkvY29udHJvbC5pbmMJMTE3MDU3ODEyMAk2OTM4MDM2MDIJMjEwMAkyMTk2Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy96b29tLW9ubHkvbWFnbmlmeS5naWYJMTc5NTkyMDg5NwkxNzk1OTIwODk3CTEyNwkxMjcKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3pvb20tb25seS90cmFucy5naWYJMzY4NjA4OTYzNwkzNjg2MDg5NjM3CTgwNwk4MDcKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzL3pvb20tb25seS96b29tLWluLmdpZgk2NDE4NzY0NDYJNjQxODc2NDQ2CTc5CTc5Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy96b29tLW9ubHkvem9vbS1vdXQuZ2lmCTQyNjc5OTA4ODAJNDI2Nzk5MDg4MAk3Ngk3Ngptb2R1bGVzL21hcC90ZW1wbGF0ZXMvaGVscGZpbGUudHBsCTY4ODkyMjI1NwkxNDU2NzEyMTYxCTI3MTA3CTI3MjYyCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9pbmZvd2luZG93L2NlbnRlcmVkLmluYwkyODEwMzM4MDk1CTM3NjY0NzU1MDAJMTE3MAkxMTkzCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9pbmZvd2luZG93L2RlZmF1bHQuaW5jCTMxMTk2NjA1NQkxNTc5NjczNDgwCTExNTMJMTE3NQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvaW5mb3dpbmRvdy9nMmNlbnRlcmVkLmluYwkyMDM2NDg4OTYJMzA1NzUzMTI3MgkzNjQyCTM2OTgKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2luZm93aW5kb3cvZzJkZWZhdWx0LmluYwkxMDYxNzYyNjYwCTMzMjM1NjUwMgkzNjI3CTM2ODQKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2luZm93aW5kb3cvZzJ0YWJiZWQuaW5jCTE3NDkwNjQ3NzkJMzMwMDkyMjYwOQkzODkwCTM5NTMKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2luZm93aW5kb3cvZzJ0YWJsZS5pbmMJMTc0OTQ4MTQ2NQkxNzQxMTEzMzgzCTQ0NzAJNDU0Nwptb2R1bGVzL21hcC90ZW1wbGF0ZXMvaW5mb3dpbmRvdy9nM2NlbnRlcmVkLmluYwkyMzI5NTYwODI2CTExOTI5NzI4MDcJMzIzMwkzMjg1Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9pbmZvd2luZG93L2czZGVmYXVsdC5pbmMJMTIwNjgxNzkzNgkyMDE5ODU3NDc2CTMyMTcJMzI3MAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvaW5mb3dpbmRvdy9nM3RhYmJlZC5pbmMJMTc4NDEyNTA3MwkyMjUzNTE3MjQ0CTM1MjYJMzU4NQptb2R1bGVzL21hcC90ZW1wbGF0ZXMvaW5mb3dpbmRvdy9nM3RhYmxlLmluYwkyMzY0OTMwOTA1CTIwNjEzMDk1NjgJNDA4MQk0MTU0Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9pbmZvd2luZG93L2djZW50ZXJlZC5pbmMJMjI4NzUzNjI5NgkxNTU3ODIwOTYJMjYxOAkyNjYyCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9pbmZvd2luZG93L2dkZWZhdWx0LmluYwk0MTcxNjczODcyCTI1MjgzODc2ODgJMjYwMQkyNjQ1Cm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9pbmZvd2luZG93L2d0YWJiZWQuaW5jCTIxOTYwNDUyNjgJMTE0NjE0MTI4MQkyODU2CTI5MDYKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2luZm93aW5kb3cvZ3RhYmxlLmluYwkxMzg5NTU3MzA3CTE5MjAyMzQyMzcJMjgzNQkyODgwCm1vZHVsZXMvbWFwL3RlbXBsYXRlcy9pbmZvd2luZG93L2d2aW1hZ2UuaW5jCTI1MzAwNDAwMDAJMjYxMjM0OTk4MwkzMjY0CTMzMTcKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2luZm93aW5kb3cvdGFiYmVkLmluYwkyODIxNDY0NTgxCTcxODI3Nzk1NgkxMjc1CTEzMDIKbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2luZm93aW5kb3cvdGFibGUuaW5jCTk2ODY5MDcyNAkxMTczOTQ0ODk1CTEzODUJMTQwOAptb2R1bGVzL21hcC90ZW1wbGF0ZXMvbWFwSXRlbUVkaXQudHBsCTIxMDE5ODg5MzIJMzc5NjYxNDY4NQk2OTYyCTcwODYK');
expand_3537250845($outputDir, 'MapFilterAdmin.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBTdGV2ZW4gTi4gU2V2ZXJpbmdoYXVzIDxzbnNAc2V2ZXJpbmdoYXVzLm9yZz4KICogQHZlcnNpb24gJFJldmlzaW9uOiAxMjUzICQKICoKICogVGhpcyBpcyBzb21lIG9mIHRoZSB1Z2xpZXN0IGNvZGUgSSd2ZSBldmVyIHdyaXR0ZW4uIFBsZWFzZSBkbyBub3QKICoganVkZ2UgbWUgYnkgaXQuIDopCiAqIEB0b2RvIENoYW5nZSB0aGUgbWFwIGZpbHRlcnMgdG8gZGVyaXZlIGZyb20gR2FsbGVyeUVudGl0eSBhbmQgdXNlIHRoYXQgZnJhbWV3b3JrLgogKi8KCkdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBIZWxwZXIuY2xhc3MnKTsKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL0dvb2dsZU1hcFV0aWxpdGllcy5jbGFzcycpOwoKLyoqCiAqIEBwYWNrYWdlIG1hcAogKiBAc3VicGFja2FnZSBVc2VySW50ZXJmYWNlCiAqLwpjbGFzcyBNYXBGaWx0ZXJBZG1pbkNvbnRyb2xsZXIgZXh0ZW5kcyBHYWxsZXJ5Q29udHJvbGxlciB7CgogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlDb250cm9sbGVyOjpoYW5kbGVSZXF1ZXN0CiAgICAgKi8KICAgIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QoJGZvcm0pIHsKCglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZXMvTWFwQWRtaW5Db250cm9sbGVySW5pdC5pbmMnKTsKCgkvKiBDYW5jZWwgaGl0LCByZXR1cm4gdG8gdGhlIGRlZmF1bHQgRmlsdGVyIGFkbWlucGFnZSAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnY2FuY2VsJ10pKSB7CgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5ICgpOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcEZpbHRlckFkbWluJzsKCgl9CgoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnYWRkJ10pKSB7CgoJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnRWRpdEZpbHRlcicsICcnKTsKCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwRmlsdGVyQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydtb2RlJ10gPSAnQWRkRmlsdGVyJzsKCX0KCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydkZWxldGUnXSkpIHsKCgkgICAgJGlkID0gJGZvcm1bJ2ZpbHRlciddOwoKCSAgICAkdG1wID0gR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdGaWx0ZXJzJyk7CgkgICAgJGN1cnJlbnRmaWx0ZXJzID0gZXhwbG9kZSgnfCcsICR0bXBbMV0pOwoKCSAgICAkbmV3ZmlsdGVyID0gJyc7CgoJICAgIGZvcmVhY2ggKCRjdXJyZW50ZmlsdGVycyBhcyAkZmlsdGVyKSB7CgkJJHRlbXAgPSBleHBsb2RlKCdgJywgJGZpbHRlcik7CgkJaWYgKCR0ZW1wWzBdIDw+ICRpZCkgewoJCSAgICBpZiAoJG5ld2ZpbHRlciA9PSAnJykgewoJCQkkbmV3ZmlsdGVyID0gJGZpbHRlcjsKCQkgICAgfSBlbHNlIHsKCQkJJG5ld2ZpbHRlciA9ICRuZXdmaWx0ZXIgLiAnfCcgLiAkZmlsdGVyOwoJCSAgICB9CgkJfQoJICAgIH0KCgkgICAgR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdGaWx0ZXJzJywgJG5ld2ZpbHRlcik7CgoJICAgICRzdGF0dXNbJ2ZpbHRlcmRlbGV0ZWQnXSA9IDE7CgoJICAgICRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcEZpbHRlckFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnbW9kZSddID0gJ0ZpbHRlcic7Cgl9CgoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnZWRpdCddKSkgewoKCSAgICAkaWQgPSAkZm9ybVsnZmlsdGVyJ107CgoJICAgICR0bXAgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0ZpbHRlcnMnKTsKCSAgICAkY3VycmVudGZpbHRlcnMgPSBleHBsb2RlKCd8JywgJHRtcFsxXSk7CgoJICAgICRuZXdmaWx0ZXIgPSAnJzsKCSAgICBmb3JlYWNoICgkY3VycmVudGZpbHRlcnMgYXMgJGZpbHRlcikgewoJCSR0ZW1wID0gZXhwbG9kZSgnYCcsICRmaWx0ZXIpOwoJCWlmICgkdGVtcFswXSA8PiAkaWQpIHsKCQkgICAgaWYgKCRuZXdmaWx0ZXIgPT0gJycpIHsKCQkJJG5ld2ZpbHRlciA9ICRmaWx0ZXI7CgkJICAgIH0gZWxzZSB7CgkJCSRuZXdmaWx0ZXIgPSAkbmV3ZmlsdGVyIC4gJ3wnIC4gJGZpbHRlcjsKCQkgICAgfQoJCX0gZWxzZSB7CgkJICAgICRlZGl0ZmlsdGVyID0gJGZpbHRlcjsKCQl9CgkgICAgfQoKCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0ZpbHRlcnMnLCAkbmV3ZmlsdGVyKTsKCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0VkaXRGaWx0ZXInLCAkZWRpdGZpbHRlcik7CgoJICAgICRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcEZpbHRlckFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnbW9kZSddID0gJ0FkZEZpbHRlcic7Cgl9CgoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnc2F2ZSddKSkgewogICAgICAgICAgICAvKiBTb21lIGVycm9yIGNoZWNraW5nICovCgkgICAgaWYgKGVtcHR5KCRfUE9TVFsnRmlsdGVyTmFtZSddKSkgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW2ZpbHRlcm5hbWVdJzsKCSAgICB9IGVsc2UgaWYgKGVtcHR5KCRfUE9TVFsnRmlsdGVyWm9vbSddKSB8fCAoIWlzX251bWVyaWMoJF9QT1NUWydGaWx0ZXJab29tJ10pKSAKCQkgICAgfHwgKCRfUE9TVFsnRmlsdGVyWm9vbSddIDwgMCkgfHwgKCRfUE9TVFsnRmlsdGVyWm9vbSddID4gMTcpKSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bZmlsdGVyem9vbV0nOwoJICAgIH0gZWxzZSBpZiAoZW1wdHkoJF9QT1NUWydGaWx0ZXJDZW50ZXInXSkgCgkJICAgIHx8ICghcHJlZ19tYXRjaCgnL14oWy0rXT8oKFswLTldezEsM30oXC5bMC05XXswLDE2fSk/KXwoXC5bMC05XXsxLDE2fSkpKFwwNDApKiwnCgkJCQkgLiAnKFwwNDApKlstK10/KChbMC05XXsxLDN9KFwuWzAtOV17MCwxNn0pPyl8KFwuWzAtOV17MSwxNn0pKSk/JC8nLAoJCQkJICAgJF9QT1NUWydGaWx0ZXJDZW50ZXInXSkpKSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bZmlsdGVyY2VudGVyXSc7CgkgICAgfSBlbHNlIHsKCgkJJG9sZGZpbHRlciA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnRmlsdGVycycpOwoKCQkkRmlsdGVyTmFtZSA9ICRfUE9TVFsnRmlsdGVyTmFtZSddOwoJCSRGaWx0ZXJab29tID0gJF9QT1NUWydGaWx0ZXJab29tJ107CgkJJEZpbHRlckNlbnRlciA9ICRfUE9TVFsiRmlsdGVyQ2VudGVyIl07CgoJCWlmICgkb2xkZmlsdGVyWzFdIDw+ICcnKSB7CgkJICAgICR0ZW1wID0gZXhwbG9kZSgnfCcsICRvbGRmaWx0ZXJbMV0pOwoJCSAgICBpZiAoIWlzc2V0KCRfUE9TVFsnb2xkaWQnXSkpIHsKCQkgICAgCS8qIEB0b2RvIFRoaXMgY29kZSB3aWxsIG5vdCBnZXQgdGhlIG1heGltdW0gaWQuIEZpeCBzaW1pbGFyIHRvIFJvdXRlcyAqLwoJCQkkbWF4ZmlsdGVyID0gZXhwbG9kZSgnYCcsIG1heCgkdGVtcCkpOwoJCQkkbnVtID0gJG1heGZpbHRlclswXSArIDE7CgkJICAgIH0gZWxzZSB7CgkJCSRudW0gPSAkX1BPU1RbJ29sZGlkJ107CgkJICAgIH0KCQkgICAgJGZvcm1bJ0ZpbHRlcnMnXSA9ICRvbGRmaWx0ZXJbMV0KCQkgICAgCQkgICAgICAgLiAnfCcgLiAkbnVtCgkJICAgIAkJICAgICAgIC4gJ2AnIC4gJEZpbHRlck5hbWUKCQkgICAgCQkgICAgICAgLiAnYCcgLiAkRmlsdGVyWm9vbQoJCSAgICAJCSAgICAgICAuICdgJyAuICRGaWx0ZXJDZW50ZXI7CgkJfSBlbHNlIHsKCQkgICAgJGZvcm1bJ0ZpbHRlcnMnXSA9ICcxYCcgLiAkRmlsdGVyTmFtZQoJCSAgICAJCSAgICAgIC4gJ2AnIC4gJEZpbHRlclpvb20KCQkgICAgCQkgICAgICAuICdgJyAuICRGaWx0ZXJDZW50ZXI7CgkJfQoKCQlHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0ZpbHRlcnMnLCAkZm9ybVsnRmlsdGVycyddKTsKCgkJJHN0YXR1c1snZmlsdGVyc2F2ZWQnXSA9IDE7CgkgICAgfQoKCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0VkaXRGaWx0ZXInLCAnJyk7CgoJICAgICRtZXRob2QgPSBlbXB0eSgkZXJyb3IpID8gJ3JlZGlyZWN0JyA6ICdkZWxlZ2F0ZSc7CgkgICAgJG1vZGUgPSBlbXB0eSgkZXJyb3IpID8gJ0ZpbHRlcicgOiAnQWRkRmlsdGVyJzsKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWydzdWJWaWV3J10gPSAnbWFwLk1hcEZpbHRlckFkbWluJzsKCSAgICAkcmVzdWx0c1skbWV0aG9kXVsnbW9kZSddID0gJG1vZGU7Cgl9CgoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnc2F2ZXNldHRpbmdzJ10pKSB7CgoJICAgICRmb3JtWydTaG93QWxidW1GaWx0ZXJzJ10gPSBmYWxzZTsKCSAgICAkZm9ybVsnU2hvd0ZpbHRlcnMnXSA9IDA7CgoJICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdzaG93YWxidW1maWx0ZXJzJywgJF9QT1NUKSBhbmQgJF9QT1NUWydzaG93YWxidW1maWx0ZXJzJ10pIHsKCQkkZm9ybVsnU2hvd0FsYnVtRmlsdGVycyddID0gdHJ1ZTsKCSAgICB9CgkgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ1Nob3dGaWx0ZXJzJywgJF9QT1NUKSBhbmQgJF9QT1NUWydTaG93RmlsdGVycyddKSB7CgkJJGZvcm1bJ1Nob3dGaWx0ZXJzJ10gPSAkX1BPU1RbJ1Nob3dGaWx0ZXJzJ107CgkgICAgfQoKCSAgICBzd2l0Y2ggKCRmb3JtWydTaG93RmlsdGVycyddKSB7CgkJY2FzZSAxOiAvKiBTaG93IHRoZSBmaWx0ZXIgYmxvY2sgb24gdGhlIGxlZnQgKi8KCQkgICAgLyogR3JhYiB0aGUgRGVmYXVsdCB0aGVtZSB2YWx1ZSAodXNlZCBmb3IgdGhlIGdvb2dsZSBtYXApICovCgkJICAgIGxpc3QgKCRyZXQsICR0aGVtZUlkKSA9IAoJCQkgICAgR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ2NvcmUnLCAnZGVmYXVsdC50aGVtZScpOwoJCSAgICBpZiAoJHJldCkgewoJCSAgICAJcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCk7CgkJICAgIH0KCQkgICAgLyogR3JhYiB0aGUgVGhlbWUgRGVmYXVsdCBzZXR0aW5ncyAqLwoJCSAgICBsaXN0ICgkcmV0LCAkZGVmdGhlbWUpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRQbHVnaW4oJ3RoZW1lJywgJHRoZW1lSWQpOwoJCSAgICBpZiAoJHJldCkgewoJCSAgICAJcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCk7CgkJICAgIH0KCQkgICAgJHNldHRpbmdzID0gJGRlZnRoZW1lLT5nZXRTZXR0aW5ncyhudWxsKTsKCQkgICAgbGlzdCAoJHRoZW1lbWFqb3IsICR0aGVtZW1pbm9yKSA9ICRkZWZ0aGVtZS0+Z2V0QXBpVmVyc2lvbigpOwoJCSAgICAvKiAKCQkgICAgICogVGhpcyBibG9jayBtYW5pcHVsYXRpb24gbG9naWMgb25seSB3b3JrcyBmb3IgZWFybGllciBibG9jayBlbmNvZGluZywgCgkJICAgICAqIHNvIHNraXAgaXQgZm9yIGxhdGVyIFRoZW1lIEFQSSB2ZXJzaW9ucyB0byBhdm9pZCBjb3JydXB0aW5nIHRoZSAKCQkgICAgICogYmxvY2sgbGlzdC4KCQkgICAgICovIAoJCSAgICBpZiAoJHRoZW1lbWFqb3IgPT0gMiAmJiAkdGhlbWVtaW5vciA8PSAzKSB7CgkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCcyJywgJHNldHRpbmdzKSkgewoJCQkgICAgJHNldHRpbmdzID0gJHNldHRpbmdzWzJdOwoJCQkgICAgZm9yZWFjaCAoJHNldHRpbmdzIGFzICRrZXkgPT4gJHZhbHVlcykgewoJCQkJaWYgKCRrZXkgPT0gJ3NpZGViYXJCbG9ja3MnKSB7CgkJCQkgICAgbGlzdCAoJHJldCwgJHZhbHVlKSA9IAoJCQkJCSAgICAkZGVmdGhlbWUtPnVucGFja1NldHRpbmcoJ2Jsb2NrLWxpc3QnLCAkdmFsdWVzKTsKCQkJCSAgICAkdmFsdWUgPSBzdHJfcmVwbGFjZSgnW21hcC5tYXBdJywgJycsICR2YWx1ZSk7CgkJCQkgICAgJHZhbHVlID0gJ1ttYXAubWFwXSAnIC4gJHZhbHVlOwoJCQkJICAgIGxpc3QgKCRyZXQsICRuZXd2YWx1ZSkgPSAKCQkJCQkgICAgJGRlZnRoZW1lLT5wYWNrU2V0dGluZygnYmxvY2stbGlzdCcsICR2YWx1ZSk7CgkJCQkgICAgJHJldCA9ICRkZWZ0aGVtZS0+c2V0UGFyYW1ldGVyKCdzaWRlYmFyQmxvY2tzJywgJG5ld3ZhbHVlKTsKCQkJCX0KCQkJICAgIH0KCQkJfSBlbHNlIGlmIChpc19hcnJheSgkc2V0dGluZ3NbMV0pKSB7CgkJCSAgICBmb3JlYWNoICgkc2V0dGluZ3NbMV0gYXMgJG51bSA9PiAkYXJyYXl2YWx1ZSkgewoJCQkJaWYgKCRhcnJheXZhbHVlWydrZXknXSA9PSAnc2lkZWJhckJsb2NrcycpIHsKCQkJCSAgICBsaXN0ICgkc3VjY2VzcywgJHZhbHVlKSA9IAoJCQkJCSAgICAkZGVmdGhlbWUtPnVucGFja1NldHRpbmcoJ2Jsb2NrLWxpc3QnLCAKCQkJCQkJCQkgICAgICRzZXR0aW5nc1sxXVskbnVtXVsndmFsdWUnXSk7CgkJCQkgICAgJHZhbHVlID0gc3RyX3JlcGxhY2UoJ1ttYXAubWFwXScsICcnLCAkdmFsdWUpOwoJCQkJICAgICR2YWx1ZSA9ICdbbWFwLm1hcF0gJyAuICR2YWx1ZTsKCQkJCSAgICBsaXN0ICgkcmV0LCAkbmV3dmFsdWUpID0KCQkJCQkgICAgJGRlZnRoZW1lLT5wYWNrU2V0dGluZygnYmxvY2stbGlzdCcsICR2YWx1ZSk7CgkJCQkgICAgJHJldCA9ICRkZWZ0aGVtZS0+c2V0UGFyYW1ldGVyKCdzaWRlYmFyQmxvY2tzJywgJG5ld3ZhbHVlKTsKCQkJCX0KCQkJICAgIH0KCQkJfQoJCSAgICB9CgkJICAgIGJyZWFrOwoJCWNhc2UgMjogLyogU2hvdyBvbiB0aGUgcmlnaHQsIG5vIHNpZGViYXIgYmxvY2sgLT4gY29udGludWUgKi8KCQljYXNlIDM6IC8qIFNob3cgb24gdGhlIHRvcCwgbm8gc2lkZWJhciBibG9jayAtPiBjb250aW51ZSAqLwoJCWNhc2UgNDogLyogU2hvdyBvbiB0aGUgYm90dG9tLCBubyBzaWRlYmFyIGJsb2NrIC0+IGNvbnRpbnVlICovCgkJY2FzZSAwOiAvKiBEb24ndCBzaG93IHRoZSBmaWx0ZXIgYmxvY2sgaW4gdGhlIHNpZGViYXIgKi8KCQkgICAgLyogR3JhYiB0aGUgRGVmYXVsdCB0aGVtZSB2YWx1ZSAodXNlZCBmb3IgdGhlIGdvb2dsZSBtYXApICovCgkJICAgIGxpc3QgKCRyZXQsICR0aGVtZUlkKSA9CgkJCSAgICBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnY29yZScsICdkZWZhdWx0LnRoZW1lJyk7CgkJICAgIGlmICgkcmV0KSB7CgkJCXJldHVybiBhcnJheSgkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwpOwoJCSAgICB9CgkJICAgIC8qIEdyYWIgdGhlIFRoZW1lIERlZmF1bHQgc2V0dGluZ3MgKi8KCQkgICAgbGlzdCAoJHJldCwgJGRlZnRoZW1lKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkUGx1Z2luKCd0aGVtZScsICR0aGVtZUlkKTsKCQkgICAgaWYgKCRyZXQpIHsKCQkgICAgCXJldHVybiBhcnJheSgkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwpOwoJCSAgICB9CgkJICAgICRzZXR0aW5ncyA9ICRkZWZ0aGVtZS0+Z2V0U2V0dGluZ3MobnVsbCk7CgkJICAgIGxpc3QgKCR0aGVtZW1ham9yLCAkdGhlbWVtaW5vcikgPSAkZGVmdGhlbWUtPmdldEFwaVZlcnNpb24oKTsKCQkgICAgLyogCgkJICAgICAqIFRoaXMgYmxvY2sgbWFuaXB1bGF0aW9uIGxvZ2ljIG9ubHkgd29ya3MgZm9yIGVhcmxpZXIgYmxvY2sgZW5jb2RpbmcsIAoJCSAgICAgKiBzbyBza2lwIGl0IGZvciBsYXRlciBUaGVtZSBBUEkgdmVyc2lvbnMgdG8gYXZvaWQgY29ycnVwdGluZyB0aGUgCgkJICAgICAqIGJsb2NrIGxpc3QuCgkJICAgICAqLyAKCQkgICAgaWYgKCR0aGVtZW1ham9yID09IDIgJiYgJHRoZW1lbWlub3IgPD0gMykgewoJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygnMicsICRzZXR0aW5ncykpIHsKCQkJICAgICRzZXR0aW5ncyA9ICRzZXR0aW5nc1syXTsKCQkJICAgIGZvcmVhY2ggKCRzZXR0aW5ncyBhcyAka2V5ID0+ICR2YWx1ZXMpIHsKCQkJCWlmICgka2V5ID09ICdzaWRlYmFyQmxvY2tzJykgewoJCQkJICAgIGxpc3QgKCRyZXQsICR2YWx1ZSkgPSAKCQkJCQkgICAgJGRlZnRoZW1lLT51bnBhY2tTZXR0aW5nKCdibG9jay1saXN0JywgJHZhbHVlcyk7CgkJCQkgICAgJHZhbHVlID0gc3RyX3JlcGxhY2UoJ1ttYXAubWFwXScsICcnLCAkdmFsdWUpOwoJCQkJICAgIGxpc3QgKCRyZXQsICRuZXd2YWx1ZSkgPQoJCQkJCSAgICAkZGVmdGhlbWUtPnBhY2tTZXR0aW5nKCdibG9jay1saXN0JywgJHZhbHVlKTsKCQkJCSAgICAkcmV0ID0gJGRlZnRoZW1lLT5zZXRQYXJhbWV0ZXIoJ3NpZGViYXJCbG9ja3MnLCAkbmV3dmFsdWUpOwoJCQkJfQoJCQkgICAgfQoJCQl9IGVsc2UgaWYgKGlzX2FycmF5KCRzZXR0aW5nc1sxXSkpIHsKCQkJICAgIGZvcmVhY2ggKCRzZXR0aW5nc1sxXSBhcyAkbnVtID0+ICRhcnJheXZhbHVlKSB7CgkJCQlpZiAoJGFycmF5dmFsdWVbJ2tleSddID09ICdzaWRlYmFyQmxvY2tzJykgewoJCQkJICAgIGxpc3QgKCRzdWNjZXNzLCAkdmFsdWUpID0KCQkJICAgIAkJICAgICRkZWZ0aGVtZS0+dW5wYWNrU2V0dGluZygnYmxvY2stbGlzdCcsCgkJCQkJCQkJICAgICAkc2V0dGluZ3NbMV1bJG51bV1bJ3ZhbHVlJ10pOwoJCQkJICAgICR2YWx1ZSA9IHN0cl9yZXBsYWNlKCdbbWFwLm1hcF0nLCAnJywgJHZhbHVlKTsKCQkJCSAgICBsaXN0ICgkcmV0LCAkbmV3dmFsdWUpID0KCQkJCQkgICAgJGRlZnRoZW1lLT5wYWNrU2V0dGluZygnYmxvY2stbGlzdCcsICR2YWx1ZSk7CgkJCQkgICAgJHJldCA9ICRkZWZ0aGVtZS0+c2V0UGFyYW1ldGVyKCdzaWRlYmFyQmxvY2tzJywgJG5ld3ZhbHVlKTsKCQkJCX0KCQkJICAgIH0KCQkJfQoJCSAgICB9CgkgICAgfQoKCSAgICBmb3JlYWNoIChhcnJheSgnU2hvd0ZpbHRlcnMnLCAnTGV2ZWxGaWx0ZXJBbGwnKSBhcyAkc2V0dGluZykgewoJCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAkc2V0dGluZywgJGZvcm1bJHNldHRpbmddKTsKCSAgICB9CgoJICAgIGZvcmVhY2ggKGFycmF5KCdTaG93QWxidW1GaWx0ZXJzJywgJ0xldmVsRmlsdGVyUm9vdCcpIGFzICRzZXR0aW5nKSB7CgkgICAgCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAkc2V0dGluZywKCQkJKGlzc2V0KCRmb3JtWyRzZXR0aW5nXSkgJiYgJGZvcm1bJHNldHRpbmddKSA/IDEgOiAwKTsKCSAgICB9CgoJICAgICRzdGF0dXNbJ3NhdmVkJ10gPSAxOwoKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gYXJyYXkoKTsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ21hcC5NYXBGaWx0ZXJBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ21vZGUnXSA9ICdGaWx0ZXInOwoJfQoKCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ2dldHZpYW1hcCddKSkgewoKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAnJzsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdtYXAuU2hvd01hcCc7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ01vZGUnXSA9ICdQaWNrJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsncGx1Z2luJ10gPSAnRmlsdGVycyc7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ2NlbnRlciddID0gJF9QT1NUWydjZW50ZXInXTsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnem9vbSddID0gJF9QT1NUWyd6b29tJ107CgoJfQoKCXJldHVybiBhcnJheSAobnVsbCwgJHJlc3VsdHMpOwogICAgfQp9CgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBzdWJwYWNrYWdlIFVzZXJJbnRlcmZhY2UKICovCmNsYXNzIE1hcEZpbHRlckFkbWluVmlldyBleHRlbmRzIEdhbGxlcnlWaWV3IHsKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Vmlldzo6bG9hZFRlbXBsYXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxvYWRUZW1wbGF0ZSgmJHRlbXBsYXRlLCAmJGZvcm0pIHsKCglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZXMvTWFwQWRtaW5WaWV3SW5pdC5pbmMnKTsKCSR0ZW1wbGF0ZS0+aGVhZCgnbW9kdWxlcy9tYXAvaW5jbHVkZXMvR29vZ2xlTWFwLmNzcycpOwoKCSRmb3JtWydmb3JtTmFtZSddID0gJ01hcEZpbHRlckFkbWluJzsKCgkvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIHVuZGVmaW5lZCBwbHVnaW4gcGFyYW1ldGVycyAqLwoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdTaG93RmlsdGVycycsICRmb3JtKSkgewoJICAgICRmb3JtWydTaG93RmlsdGVycyddID0gMDsgLyogaGlkZSB0aGUgYmxvY2sgYnkgZGVmYXVsdCAqLwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdTaG93QWxidW1GaWx0ZXJzJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ1Nob3dBbGJ1bUZpbHRlcnMnXSA9IGZhbHNlOwoJfQoKCWlmICghYXJyYXlfa2V5X2V4aXN0cygnTGV2ZWxGaWx0ZXJBbGwnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnTGV2ZWxGaWx0ZXJBbGwnXSA9IDA7Cgl9CgoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdMZXZlbEZpbHRlclJvb3QnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnTGV2ZWxGaWx0ZXJSb290J10gPSBmYWxzZTsKCX0KCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlcy9NYXBBZG1pbkVkaXRzLmluYycpOwoKCS8qIENyZWF0ZSB0aGUgZmlsdGVyIGFycmF5ICovCglpZiAoYXJyYXlfa2V5X2V4aXN0cygnRmlsdGVycycsICRwYXJhbSkgYW5kICRwYXJhbVsnRmlsdGVycyddICE9ICcnKSB7CgkgICAgJGZpbHRlcm9wdGlvbnMgPSBhcnJheSgpOwoJICAgICRzZXBhcmF0ZWRmaWx0ZXJzID0gZXhwbG9kZSgnfCcsICRwYXJhbVsnRmlsdGVycyddKTsKCSAgICBzb3J0KCRzZXBhcmF0ZWRmaWx0ZXJzKTsKCSAgICBmb3JlYWNoICgkc2VwYXJhdGVkZmlsdGVycyBhcyAkYWxsb3B0aW9ucykgewoJCSRvcHRpb25zID0gZXhwbG9kZSgnYCcsICRhbGxvcHRpb25zKTsKCQkkZm9ybVsnZmlsdGVybGlzdCddW10gPSBhcnJheSgnbmFtZScgPT4gJG9wdGlvbnNbMV0sICdpZCcgPT4gJG9wdGlvbnNbMF0pOwoJICAgIH0KCX0KCglpZiAoJHRlbXBsYXRlLT5oYXNWYXJpYWJsZSgnU2l0ZUFkbWluJykpIHsKCSAgICAkU2l0ZUFkbWluID0mICR0ZW1wbGF0ZS0+Z2V0VmFyaWFibGVCeVJlZmVyZW5jZSgnU2l0ZUFkbWluJyk7CgkgICAgJFNpdGVBZG1pblsnZW5jdHlwZSddID0gJ211bHRpcGFydC9mb3JtLWRhdGEnOwoJfSBlbHNlIHsKCSAgICAkU2l0ZUFkbWluWydlbmN0eXBlJ10gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7CgkgICAgJHRlbXBsYXRlLT5zZXRWYXJpYWJsZSgnU2l0ZUFkbWluJywgJFNpdGVBZG1pbik7Cgl9CgoJJHRlbXBsYXRlLT5zZXRWYXJpYWJsZSgnY29udHJvbGxlcicsICdtYXAuTWFwRmlsdGVyQWRtaW4nKTsKCXJldHVybiBhcnJheShudWxsLCBhcnJheSgnYm9keScgPT4gJ21vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBGaWx0ZXJBZG1pbi50cGwnKSk7CiAgICB9Cn0KPz4=');
expand_3537250845($outputDir, 'MapGZoomAdmin.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBFcmljIERhbmllbCA8ZWhkYW5pZWxAZ21haWwuY29tPgogKiBAdmVyc2lvbiAkUmV2aXNpb246IDEyNTMgJAogKgogKi8KCkdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBIZWxwZXIuY2xhc3MnKTsKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL0dvb2dsZU1hcFV0aWxpdGllcy5jbGFzcycpOwoKLyoqCiAqIEBwYWNrYWdlIG1hcAogKiBAc3VicGFja2FnZSBVc2VySW50ZXJmYWNlCiAqLwpjbGFzcyBNYXBHWm9vbUFkbWluQ29udHJvbGxlciBleHRlbmRzIEdhbGxlcnlDb250cm9sbGVyIHsKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Q29udHJvbGxlcjo6aGFuZGxlUmVxdWVzdAogICAgICovCiAgICBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KCRmb3JtKSB7CgoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5Db250cm9sbGVySW5pdC5pbmMnKTsKCgkvKiBDYW5jZWwgaGl0LCByZXR1cm4gdG8gdGhlIGRlZmF1bHQgR1pvb20gQWRtaW4gUGFnZSAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnY2FuY2VsJ10pKSB7CgoJICAgICRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcEdab29tQWRtaW4nOwoJfQoKCS8qIFNhdmUgdGhlIEd6b29tIHNldHRpbmdzICovCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydzYXZlJ10pKSB7CgoJICAgIGZvcmVhY2ggKGFycmF5KCdHWlBvcycsJ0daUG9zT2ZmWCcsJ0daUG9zT2ZmWScpIGFzICRzZXR0aW5nKSB7CgkJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICRzZXR0aW5nLCAkZm9ybVskc2V0dGluZ10pOwoJICAgIH0KCgkgICAgZm9yZWFjaCAoYXJyYXkoJ0dab29tJykgYXMgJHNldHRpbmcpIHsKCQlHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJHNldHRpbmcsCgkJCShpc3NldCgkZm9ybVskc2V0dGluZ10pICYmICRmb3JtWyRzZXR0aW5nXSkgPyAxIDogMCk7CgkgICAgfQoKCSAgICAkc3RhdHVzWydzYXZlZCddID0gMTsKCgkgICAgLyogRmlndXJlIG91dCB0aGUgbWV0aG9kIHdlIHdpbGwgdXNlICovCgkgICAgJG1ldGhvZCA9IGVtcHR5KCRlcnJvcikgPyAncmVkaXJlY3QnIDogJ2RlbGVnYXRlJzsKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWydzdWJWaWV3J10gPSAnbWFwLk1hcEdab29tQWRtaW4nOwoJfQoKCXJldHVybiBhcnJheSAobnVsbCwgJHJlc3VsdHMpOwogICAgfQp9CgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBzdWJwYWNrYWdlIFVzZXJJbnRlcmZhY2UKICovCmNsYXNzIE1hcEdab29tQWRtaW5WaWV3IGV4dGVuZHMgR2FsbGVyeVZpZXcgewogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlWaWV3Ojpsb2FkVGVtcGxhdGUKICAgICAqLwogICAgZnVuY3Rpb24gbG9hZFRlbXBsYXRlKCYkdGVtcGxhdGUsICYkZm9ybSkgewoKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykgLiAnL2luY2x1ZGVzL01hcEFkbWluVmlld0luaXQuaW5jJyk7CgkkZm9ybVsnZm9ybU5hbWUnXSA9ICdNYXBHWm9vbUFkbWluJzsKICAgICAgICAKCSR0ZW1wbGF0ZS0+aGVhZCgnbW9kdWxlcy9tYXAvaW5jbHVkZXMvR29vZ2xlTWFwLmNzcycpOwoJJHRlbXBsYXRlLT5qYXZhc2NyaXB0KCdtb2R1bGVzL21hcC9Hb29nbGVNYXAuanMnKTsKCglpZiAoIWFycmF5X2tleV9leGlzdHMoJ0dab29tJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0dab29tJ10gPSBmYWxzZTsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnR1pQb3MnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnR1pQb3MnXSA9ICcxJzsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnR1pQb3NPZmZYJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0daUG9zT2ZmWCddID0gJzcnOwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdHWlBvc09mZlknLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnR1pQb3NPZmZZJ10gPSAnMzAnOwoJfQoKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykgLiAnL2luY2x1ZGVzL01hcEFkbWluRWRpdHMuaW5jJyk7CgoJaWYgKCR0ZW1wbGF0ZS0+aGFzVmFyaWFibGUoJ1NpdGVBZG1pbicpKSB7CgkgICAgJFNpdGVBZG1pbiA9JiAkdGVtcGxhdGUtPmdldFZhcmlhYmxlQnlSZWZlcmVuY2UoJ1NpdGVBZG1pbicpOwoJICAgICRTaXRlQWRtaW5bJ2VuY3R5cGUnXSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJzsKCX0gZWxzZSB7CgkgICAgJFNpdGVBZG1pblsnZW5jdHlwZSddID0gJ211bHRpcGFydC9mb3JtLWRhdGEnOwoJICAgICR0ZW1wbGF0ZS0+c2V0VmFyaWFibGUoJ1NpdGVBZG1pbicsICRTaXRlQWRtaW4pOwoJfQoKCSR0ZW1wbGF0ZS0+c2V0VmFyaWFibGUoJ2NvbnRyb2xsZXInLCAnbWFwLk1hcEdab29tQWRtaW4nKTsKCXJldHVybiBhcnJheShudWxsLCBhcnJheSgnYm9keScgPT4gJ21vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBHWm9vbUFkbWluLnRwbCcpKTsKICAgIH0KfQoKPz4=');
expand_3537250845($outputDir, 'MapGoogleOverviewAdmin.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBFcmljIERhbmllbCA8ZWhkYW5pZWxAZ21haWwuY29tPgogKiBAdmVyc2lvbiAkUmV2aXNpb246IDEyNjQgJAogKgogKi8KCkdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBIZWxwZXIuY2xhc3MnKTsKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL0dvb2dsZU1hcFV0aWxpdGllcy5jbGFzcycpOwoKLyoqCiAqIEBwYWNrYWdlIG1hcAogKiBAc3VicGFja2FnZSBVc2VySW50ZXJmYWNlCiAqLwpjbGFzcyBNYXBHb29nbGVPdmVydmlld0FkbWluQ29udHJvbGxlciBleHRlbmRzIEdhbGxlcnlDb250cm9sbGVyIHsKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Q29udHJvbGxlcjo6aGFuZGxlUmVxdWVzdAogICAgICovCiAgICBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KCRmb3JtKSB7CgoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5Db250cm9sbGVySW5pdC5pbmMnKTsKCgkvKiBDYW5jZWwgaGl0LCByZXR1cm4gdG8gdGhlIGRlZmF1bHQgR29vZ2xlIE92ZXJ2aWV3IEFkbWluIFBhZ2UgKi8KCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ2NhbmNlbCddKSkgewoKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gYXJyYXkoKTsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ21hcC5NYXBHb29nbGVPdmVydmlld0FkbWluJzsKCX0KCgkvKiBTYXZlIHRoZSBHb29nbGUgT3ZlcnZpZXcgc2V0dGluZ3MgKi8KCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ3NhdmUnXSkpIHsKCQkKCQkvKiBEZWZhdWx0cyAqLwoJICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygnR09Qb3MnLCAkZm9ybSkpIHsKCQkgICAgJGZvcm1bJ0dPUG9zJ10gPSAnMyc7CgkgICAgfQoJICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygnR09TaXplWCcsICRmb3JtKSkgewoJCSAgICAkZm9ybVsnR09TaXplWCddID0gJzEwMCc7CgkgICAgfQoJICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygnR09TaXplWScsICRmb3JtKSkgewoJCSAgICAkZm9ybVsnR09TaXplWSddID0gJzEwMCc7CgkgICAgfQoJICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygnR09Qb3NPZmZZJywgJGZvcm0pIHx8ICRmb3JtWydHT1Bvc09mZlknXSA9PSAnJykgewoJCQkkZm9ybVsnR09Qb3NPZmZZJ10gPSAnMCc7CgkgICAgfQoJCWlmICghYXJyYXlfa2V5X2V4aXN0cygnR09Qb3NPZmZYJywgJGZvcm0pIHx8ICRmb3JtWydHT1Bvc09mZlgnXSA9PSAnJykgewoJCQkkZm9ybVsnR09Qb3NPZmZYJ10gPSAnMCc7CgkJfQoKCSAgICAvKiBlcnJvciBjaGVja2luZyAqLwoJCWlmICgoJGZvcm1bJ0dPU2l6ZVknXSA9PSAnJykgfHwgKCRmb3JtWydHT1NpemVYJ10gPT0gJycpIAoJCSAgICB8fCAoIWlzX251bWVyaWMoJGZvcm1bJ0dPU2l6ZVknXSkpIHx8ICFpc19udW1lcmljKCRmb3JtWydHT1NpemVYJ10pKSB7CgkJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW25vR09TaXplXSc7CgkgICAgfSBlbHNlIHsKCgkJCWZvcmVhY2ggKGFycmF5KCdHT1BvcycsICdHT1NpemVYJywgJ0dPU2l6ZVknLCAnR09Qb3NPZmZYJywgJ0dPUG9zT2ZmWScpIGFzICRzZXR0aW5nKSB7CgkJICAgIAlHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJHNldHRpbmcsICRmb3JtWyRzZXR0aW5nXSk7CgkJCX0KCgkJCWZvcmVhY2ggKGFycmF5KCdHb29nbGVPdmVydmlldycpIGFzICRzZXR0aW5nKSB7CgkJICAgIAlHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJHNldHRpbmcsCgkJCSAgICAJKGlzc2V0KCRmb3JtWyRzZXR0aW5nXSkgJiYgJGZvcm1bJHNldHRpbmddKSA/IDEgOiAwKTsKCQkJfQoKCQkJJHN0YXR1c1snc2F2ZWQnXSA9IDE7CgkgICAgfQoKCSAgICAvKiBGaWd1cmUgb3V0IHRoZSBtZXRob2Qgd2Ugd2lsbCB1c2UgKi8KCSAgICAkbWV0aG9kID0gZW1wdHkoJGVycm9yKSA/ICdyZWRpcmVjdCcgOiAnZGVsZWdhdGUnOwoJICAgICRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSAkZXJyb3I7CgkgICAgJHJlc3VsdHNbJG1ldGhvZF1bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJG1ldGhvZF1bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwR29vZ2xlT3ZlcnZpZXdBZG1pbic7Cgl9CgoJcmV0dXJuIGFycmF5IChudWxsLCAkcmVzdWx0cyk7CiAgICB9Cn0KCi8qKgogKiBAcGFja2FnZSBtYXAKICogQHN1YnBhY2thZ2UgVXNlckludGVyZmFjZQogKi8KY2xhc3MgTWFwR29vZ2xlT3ZlcnZpZXdBZG1pblZpZXcgZXh0ZW5kcyBHYWxsZXJ5VmlldyB7CiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeVZpZXc6OmxvYWRUZW1wbGF0ZQogICAgICovCiAgICBmdW5jdGlvbiBsb2FkVGVtcGxhdGUoJiR0ZW1wbGF0ZSwgJiRmb3JtKSB7CgoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5WaWV3SW5pdC5pbmMnKTsKCSRmb3JtWydmb3JtTmFtZSddID0gJ01hcEdvb2dsZU92ZXJ2aWV3QWRtaW4nOwoJJHRlbXBsYXRlLT5oZWFkKCdtb2R1bGVzL21hcC9pbmNsdWRlcy9Hb29nbGVNYXAuY3NzJyk7CgkkdGVtcGxhdGUtPmphdmFzY3JpcHQoJ21vZHVsZXMvbWFwL0dvb2dsZU1hcC5qcycpOwoKCWlmKCFhcnJheV9rZXlfZXhpc3RzKCdHb29nbGVPdmVydmlldycsICRmb3JtKSkgewoJICAgICRmb3JtWydHb29nbGVPdmVydmlldyddID0gZmFsc2U7Cgl9CglpZighYXJyYXlfa2V5X2V4aXN0cygnR09TaXplWCcsICRmb3JtKSkgewoJICAgICRmb3JtWydHT1NpemVYJ10gPSAnMjAwJzsKCX0KCWlmKCFhcnJheV9rZXlfZXhpc3RzKCdHT1NpemVZJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0dPU2l6ZVknXSA9ICcyMDAnOwoJfQoJaWYoIWFycmF5X2tleV9leGlzdHMoJ0dPUG9zJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0dPUG9zJ10gPSAnMyc7Cgl9CglpZighYXJyYXlfa2V5X2V4aXN0cygnR09Qb3NPZmZYJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0dPUG9zT2ZmWCddID0gJzAnOwoJfQoJaWYoIWFycmF5X2tleV9leGlzdHMoJ0dPUG9zT2ZmWScsICRmb3JtKSkgewoJICAgICRmb3JtWydHT1Bvc09mZlknXSA9ICcwJzsKCX0KCWlmKCFhcnJheV9rZXlfZXhpc3RzKCdHT1R5cGUnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnR09UeXBlJ10gPSAnR19TQVRFTExJVEVfVFlQRSc7Cgl9CgoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5FZGl0cy5pbmMnKTsKCglpZiAoJHRlbXBsYXRlLT5oYXNWYXJpYWJsZSgnU2l0ZUFkbWluJykpIHsKCSAgICAkU2l0ZUFkbWluID0mICR0ZW1wbGF0ZS0+Z2V0VmFyaWFibGVCeVJlZmVyZW5jZSgnU2l0ZUFkbWluJyk7CgkgICAgJFNpdGVBZG1pblsnZW5jdHlwZSddID0gJ211bHRpcGFydC9mb3JtLWRhdGEnOwoJfSBlbHNlIHsKCSAgICAkU2l0ZUFkbWluWydlbmN0eXBlJ10gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7CgkgICAgJHRlbXBsYXRlLT5zZXRWYXJpYWJsZSgnU2l0ZUFkbWluJywgJFNpdGVBZG1pbik7Cgl9CgoJJHRlbXBsYXRlLT5zZXRWYXJpYWJsZSgnY29udHJvbGxlcicsICdtYXAuTWFwR29vZ2xlT3ZlcnZpZXdBZG1pbicpOwoJcmV0dXJuIGFycmF5KG51bGwsIGFycmF5KCdib2R5JyA9PiAnbW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcEdvb2dsZU92ZXJ2aWV3QWRtaW4udHBsJykpOwogICAgfQp9Cgo/Pg==');
expand_3537250845($outputDir, 'MapGroupAdmin.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBTdGV2ZW4gTi4gU2V2ZXJpbmdoYXVzIDxzbnNAc2V2ZXJpbmdoYXVzLm9yZz4KICogQHZlcnNpb24gJFJldmlzaW9uOiAxMjUzICQKICoKICogVGhpcyBpcyBzb21lIG9mIHRoZSB1Z2xpZXN0IGNvZGUgSSd2ZSBldmVyIHdyaXR0ZW4uIFBsZWFzZSBkbyBub3QKICoganVkZ2UgbWUgYnkgaXQuIDopCiAqIEB0b2RvIENoYW5nZSB0aGUgbWFwIGdyb3VwcyB0byBkZXJpdmUgZnJvbSBHYWxsZXJ5RW50aXR5IGFuZCB1c2UgdGhhdCBmcmFtZXdvcmsuCiAqLwoKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL21hcEhlbHBlci5jbGFzcycpOwpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvR29vZ2xlTWFwVXRpbGl0aWVzLmNsYXNzJyk7CgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBzdWJwYWNrYWdlIFVzZXJJbnRlcmZhY2UKICovCmNsYXNzIE1hcEdyb3VwQWRtaW5Db250cm9sbGVyIGV4dGVuZHMgR2FsbGVyeUNvbnRyb2xsZXIgewoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Q29udHJvbGxlcjo6aGFuZGxlUmVxdWVzdAogICAgICovCiAgICBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KCRmb3JtKSB7CgoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5Db250cm9sbGVySW5pdC5pbmMnKTsKCgkvKiBDYW5jZWwgaGl0LCByZXR1cm4gdG8gdGhlIGRlZmF1bHQgR3JvdXAgYWRtaW5wYWdlICovCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydjYW5jZWwnXSkpIHsKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gYXJyYXkoKTsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ21hcC5NYXBHcm91cEFkbWluJzsKCX0KCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydhZGQnXSkpIHsKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcEdyb3VwQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydtb2RlJ10gPSAnQWRkR3JvdXAnOwoJfQoKCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ2VkaXQnXSkpIHsKCgkgICAgJGlkID0gc3Vic3RyKCRmb3JtWydhY3Rpb24nXVsnZWRpdCddLCAxMSk7CgoJICAgICR0bXAgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ01hcEdyb3VwcycpOwoJICAgICRBbGxHcm91cHMgPSBleHBsb2RlKCd8JywgJHRtcFsxXSk7CgoJICAgICRuZXdncm91cHMgPSAnJzsKCSAgICBmb3JlYWNoICgkQWxsR3JvdXBzIGFzICRncm91cCkgewoJCSR0ZW1wID0gZXhwbG9kZSgnYCcsICRncm91cCk7CgkJLyoKCQkgKiBXYXJuaW5nOiBpZiB5b3UgaGF2ZSBkdXBsaWNhdGUgSURzIChpbiB0aGUgb2xkIGNvZGUpLCB0aGlzIHdpbGwgZXJhc2UgdGhlbS4KCQkgKi8KCQlpZiAoJHRlbXBbMF0gPD4gJGlkKSB7CgkJICAgICRuZXdncm91cHMgPSAoJG5ld2dyb3VwcyA9PSAnJykgPyAkZ3JvdXAgOiAkbmV3Z3JvdXBzIC4gJ3wnIC4gJGdyb3VwOwoJCX0gZWxzZSB7CgkJICAgICRlZGl0Z3JvdXAgPSAkZ3JvdXA7CgkJfQoJICAgIH0KCSAgICAvKiBHZXQgdGhlIGNvb3JkaW5hdGVzIGFuZCBzdWNoIGluIHRoZSBtYXAgZGF0YWJhc2UgKi8KCSAgICAkcXVlcnkgPSAnCiAgICAgICAgICAgIFNFTEVDVAoJICAgICAgW21hcE1hcDo6ZmllbGRdLAoJICAgICAgW21hcE1hcDo6dmFsdWVdCgkgICAgRlJPTQoJICAgICAgW21hcE1hcF0KCSAgICBXSEVSRQoJICAgICAgW21hcE1hcDo6aXRlbUlkXSA9IFwnRycgLiAkaWQgLiAnXCcKCSAgICAnOwoJICAgIGxpc3QgKCRyZXQsICRyZXN1bHQpID0gJGdhbGxlcnktPnNlYXJjaCgkcXVlcnksIGFycmF5KCksIGFycmF5KCkpOwoKCSAgICAkcGFyYW1zID0gJyc7CgkgICAgd2hpbGUoJHBhcmFtID0gJHJlc3VsdC0+bmV4dFJlc3VsdCgpKSB7CgkJJHBhcmFtcyAuPSAoJHBhcmFtcyAhPSAnJykgPyAnfCcgOiAnJzsKCQkkcGFyYW1zIC49ICRwYXJhbVswXSAuICc6JyAuICRwYXJhbVsxXTsKCSAgICB9CgoJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnTWFwR3JvdXBzJywgJG5ld2dyb3Vwcyk7CgkgICAgR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdFZGl0R3JvdXAnLCAkZWRpdGdyb3VwKTsKCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0VkaXRHcm91cFBhcmFtJywgJHBhcmFtcyk7CgoJICAgICRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSAkZXJyb3I7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwR3JvdXBBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ21vZGUnXSA9ICdBZGRHcm91cCc7CgoJfQoKCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ3VwbG9hZHBpYyddKSkgewogICAgICAgICAgCgkgICAgLyogY2hlY2tpbmcgZm9yIGVycm9yICovCgkgICAgaWYgKCRmb3JtWyduYW1lJ11bM10gPT0gJycpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtub2ZpbGVzZWxlY3RlZF0nOwoJICAgIH0gZWxzZSBpZiAoJGZvcm1bJ3RtcF9uYW1lJ11bM10gPT0gJycpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtub3R1cGxvYWRlZF0nOwoJICAgIH0gZWxzZSBpZiAoIW1vdmVfdXBsb2FkZWRfZmlsZSgkZm9ybVsndG1wX25hbWUnXVszXSwgCgkJICAgICRiYXNlZ2FsbGVyeWRpciAuICdtYXAvaW1hZ2VzL2dyb3Vwcy8nIC4gJGZvcm1bJ25hbWUnXVszXSkpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtyaWdodHNlcnJvcl0nOwoJICAgIH0gZWxzZSB7CgkJJHN0YXR1c1sndXBsb2FkZWQnXSA9IDE7CgkgICAgfQoKCSAgICAkR3JvdXBOYW1lID0gJF9QT1NUWydHcm91cFRpdGxlJ107CgkgICAgJEdyb3VwRGVzYyA9ICRfUE9TVFsnR3JvdXBEZXNjJ107CgkgICAgJEdyb3VwU3VtbSA9ICRfUE9TVFsnR3JvdXBTdW1tJ107CgkgICAgJEdyb3VwRGF0ZSA9IHN0cnRvdGltZSgkX1BPU1RbJ0dyb3VwRGF0ZSddKTsKCSAgICAkR3JvdXBmaWxlID0gJGZvcm1bJ25hbWUnXVszXTsKCgkgICAgJG9sZGdyb3VwcyA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnTWFwR3JvdXBzJyk7CgoJICAgIGlmICgkb2xkZ3JvdXBzWzFdIDw+ICcnKSB7CgkJLyogR2V0IHRoZSBHcm91cCBJRCBpZiBlZGl0aW5nIGFuIGV4aXN0aW5nIG9uZSwgb3RoZXJ3aXNlIGluaXRpYWxpemUgdG8gMCAqLwoJCSRudW0gPSBpc3NldCgkX1BPU1RbJ29sZGlkJ10pID8gJF9QT1NUWydvbGRpZCddIDogMDsKCSAgICAJCQkJCgkJLyogTWFrZSBzdXJlIGFsbCB0aGUgZ3JvdXBzIGhhdmUgdW5pcXVlIElEcyAqLwoJCSRncm91cHN0cmluZ3MgPSBleHBsb2RlKCd8JywgJG9sZGdyb3Vwc1sxXSk7CgkJZm9yZWFjaCgkZ3JvdXBzdHJpbmdzIGFzICR0ZW1wZ3JvdXApIHsKCQkgICAgJHRlbXBncm91cHNbXSA9IGV4cGxvZGUoJ2AnLCAkdGVtcGdyb3VwKTsKCQl9CgkJJG1heEdyb3VwSWQgPSAwOwoJCSRlZGl0SWREdXBlID0gZmFsc2U7CgkJJGdyb3Vwc0J5SWQgPSBhcnJheSgpOwoJCWZvcmVhY2goJHRlbXBncm91cHMgYXMgJGdyb3VwS2V5ID0+ICRncm91cEFycmF5KSB7CgkJICAgICRtYXhHcm91cElkID0gbWF4KGFycmF5KCRtYXhHcm91cElkLCAkZ3JvdXBBcnJheVswXSkpOwoJCSAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkZ3JvdXBBcnJheVswXSwgJGdyb3Vwc0J5SWQpKSB7IC8qIER1cGxpY2F0ZSBJRCAqLwoJCQkvKiBDaGVjayBpZiB0aGUgSUQgYmVpbmcgZWRpdGVkIGlzIGEgZHVwbGljYXRlICovCgkJCWlmICgkbnVtID09ICRncm91cEFycmF5WzBdKSB7CgkJCSAgICAkZWRpdElkRHVwZSA9IHRydWU7CgkJCX0KCQkJLyogTW92ZSB0aGUgZHVwZSB0byB0aGUgKGN1cnJlbnRseS1rbm93bikgZW5kICovCgkJCSRtYXhHcm91cElkID0gJG1heEdyb3VwSWQgKyAxOwoJCQkvKiByZWFzc2lnbiBncm91cCBJRCB0byBoaWdoZXN0IElEICsgMSAqLwoJCQkkdGVtcGdyb3Vwc1skZ3JvdXBLZXldWzBdID0gJG1heEdyb3VwSWQ7CgkJICAgIH0KCQkgICAgLyogU3RvcmUgdGhlIGdyb3VwIHN0cmluZyBpbnRvIHRoZSBhcnJheSwga2V5ZWQgYnkgZ3JvdXAgSUQgKi8KCQkgICAgJGdyb3Vwc0J5SWRbJHRlbXBncm91cHNbJGdyb3VwS2V5XVswXV0gPSBpbXBsb2RlKCdgJywgJHRlbXBncm91cHNbJGdyb3VwS2V5XSk7CgkJfQoJCS8qCgkJICogaWYgJG51bSB3YXMgbm90IGZvdW5kIGluIHRoZSBleGlzdGluZyBHcm91cCBJRHMgKGkuZS4sIGl0J3MgbmV3KSAKCQkgKiBvciBpZiBpdCB3YXMgYSBkdXBlLCB0aGVuIGFkZCBpdCBhcyBhIG5ldyBncm91cCwgZWxzZSBsZWF2ZSBpdCBhbG9uZQoJCSAqLwoJCSRudW0gPSAoJG51bSA9PSAwIG9yICRlZGl0SWREdXBlKSA/ICRtYXhHcm91cElkICsgMSA6ICRudW07CgkgICAgfSBlbHNlIHsKCQkkbnVtID0gMTsKCSAgICB9CgoJICAgICRoYXNoID0gYXJyYXkoKTsKCgkgICAgZm9yZWFjaCAoJF9QT1NUIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJaWYgKHN1YnN0cigka2V5LCAwLCAyKSA9PSAnUDonKSB7CgkJICAgIGlmICgkdmFsdWUpIHsKCQkJJGhhc2hbXSA9ICR2YWx1ZTsKCQkgICAgfQoJCX0KCSAgICB9CgoJICAgICRHcm91cEl0ZW1zID0gaW1wbG9kZSgnYCcsICRoYXNoKTsKCgkgICAgaWYgKCRHcm91cE5hbWUgPT0gJycpIHsKCQkkR3JvdXBOYW1lID0gJ0dyb3VwICcgLiAkbnVtOwoJICAgIH0KCSAgICAkZWRpdGdyb3VwID0gJG51bSAuICdgJyAKCQkJIC4gJEdyb3VwTmFtZSAuICdgJwoJCQkgLiAkR3JvdXBEZXNjIC4gJ2AnCgkJCSAuICRHcm91cFN1bW0gLiAnYCcKCQkJIC4gJEdyb3VwZmlsZSAuICdgJwoJCQkgLiAkR3JvdXBEYXRlIC4gJ2AnCgkJCSAuICRHcm91cEl0ZW1zOwoKCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0VkaXRHcm91cCcsICRlZGl0Z3JvdXApOwoKCSAgICAkaWQgPSAnRycgLiAkbnVtOwoJICAgICRjb29yZGluYXRlID0gKGlzc2V0KCRfUE9TVFsnR3JvdXBHUFMnXSkpID8gJF9QT1NUWydHcm91cEdQUyddIDogJyc7CgkgICAgJHpvb20gPSAoaXNzZXQoJF9QT1NUWydHcm91cFpvb21sZXZlbCddKSkgPyAkX1BPU1RbJ0dyb3VwWm9vbWxldmVsJ10gOiAnJzsKCSAgICAkY29sb3IgPSAoaXNzZXQoJF9QT1NUWydHcm91cENvbG9yJ10pKSA/ICRfUE9TVFsnR3JvdXBDb2xvciddIDogJyc7CgoJICAgIGlmICgkY29vcmRpbmF0ZSAhPSAnJykgewoJCSRyZXQgPSBHYWxsZXJ5Q29yZUFwaTo6YWRkTWFwRW50cnkoJ21hcE1hcCcsCgkJCWFycmF5KCdpdGVtSWQnID0+ICRpZCwKCQkJICAgICAgJ2ZpZWxkJyA9PiAnR1BTJywKCQkJICAgICAgJ3ZhbHVlJyA9PiAkY29vcmRpbmF0ZSwKCQkJICAgICAgJ3NldElkJyA9PiAwLAoJCQkgICAgICAnc2V0VHlwZScgPT4gMikpOwoJCWlmICgkcmV0KSB7CgkJICAgIHJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CgkJfQoJICAgIH0KICAgICAgICAgICAgLyogQWN0dWFsbHkgdXBkYXRlIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSB6b29tbGV2ZWwgcGFzc2VkIG9uIHRvIHRoZSBJdGVtSUQgKi8KCSAgICBpZiAoJHpvb20gIT0gJycpIHsKCQkkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OmFkZE1hcEVudHJ5KCdtYXBNYXAnLAoJCQlhcnJheSgnaXRlbUlkJyA9PiAkaWQsCgkJCSAgICAgICdmaWVsZCcgPT4gJ1pvb21MZXZlbCcsCgkJCSAgICAgICd2YWx1ZScgPT4gJHpvb20sCgkJCSAgICAgICdzZXRJZCcgPT4gMCwKCQkJICAgICAgJ3NldFR5cGUnID0+IDEpKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCSAgICB9CiAgICAgICAgICAgIC8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgY29sb3IgcGFzc2VkIG9uIHRvIHRoZSBJdGVtSUQgKi8KCSAgICBpZiAoJGNvbG9yICE9ICcnKSB7CgkJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphZGRNYXBFbnRyeSgnbWFwTWFwJywKCQkJYXJyYXkoJ2l0ZW1JZCcgPT4gJGlkLAoJCQkgICAgICAnZmllbGQnID0+ICdDb2xvcicsCgkJCSAgICAgICd2YWx1ZScgPT4gJGNvbG9yLAoJCQkgICAgICAnc2V0SWQnID0+IDAsCgkJCSAgICAgICdzZXRUeXBlJyA9PiAyKSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkgICAgfQoKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcEdyb3VwQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydtb2RlJ10gPSAnQWRkR3JvdXAnOwoKCX0KCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydkZWxldGUnXSkpIHsKCgkgICAgJGlkID0gc3Vic3RyKCRmb3JtWydhY3Rpb24nXVsnZGVsZXRlJ10sIDEzKTsKCgkgICAgJHRtcCA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnTWFwR3JvdXBzJyk7CgkgICAgJGN1cnJlbnRncm91cHMgPSBleHBsb2RlKCd8JywgJHRtcFsxXSk7CgoJICAgICRuZXdncm91cHMgPSAnJzsKCgkgICAgZm9yZWFjaCAoJGN1cnJlbnRncm91cHMgYXMgJGdyb3VwKSB7CgkJJHRlbXAgPSBleHBsb2RlKCdgJywgJGdyb3VwKTsKCQlpZiAoJHRlbXBbMF0gPD4gJGlkKSB7CgkJICAgICRuZXdncm91cHMgPSAoJG5ld2dyb3VwcyA9PSAnJykgPyAkZ3JvdXAgOiAkbmV3Z3JvdXBzIC4gJ3wnIC4gJGdyb3VwOwoJCX0KCSAgICB9CgoJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnTWFwR3JvdXBzJywgJG5ld2dyb3Vwcyk7CgoJICAgIC8qIEFsc28gbmVlZCB0byBkZWxldGUgYW55IChtYXApIHBhcmFtZXRlcnMgaW4gdGhlIGRhdGFiYXNlIHJlbGF0ZWQgdG8gdGhpcyBpdGVtICovCgkgICAgJGlkID0gJ0cnIC4gJGlkOwoJICAgICRyZXQgPSBHYWxsZXJ5Q29yZUFwaTo6cmVtb3ZlTWFwRW50cnkoJ21hcE1hcCcsIGFycmF5KCdpdGVtSWQnID0+ICRpZCkpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCSAgICB9CgoJICAgICRzdGF0dXNbJ2dyb3VwZGVsZXRlZCddID0gMTsKCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwR3JvdXBBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ21vZGUnXSA9ICdGaWx0ZXInOwoKCX0KCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydzYXZlJ10pKSB7CgoJICAgICRHcm91cE5hbWUgPSAkX1BPU1RbJ0dyb3VwVGl0bGUnXTsKCSAgICAkR3JvdXBEZXNjID0gJF9QT1NUWydHcm91cERlc2MnXTsKCSAgICAkR3JvdXBTdW1tID0gJF9QT1NUWydHcm91cFN1bW0nXTsKCSAgICAkR3JvdXBEYXRlID0gc3RydG90aW1lKCRfUE9TVFsnR3JvdXBEYXRlJ10pOwoJICAgICRHcm91cGZpbGUgPSBiYXNlbmFtZSgkX1BPU1RbJ3BpYyddKTsKCgkgICAgJG9sZGdyb3VwcyA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnTWFwR3JvdXBzJyk7CgoJICAgIGlmICgkb2xkZ3JvdXBzWzFdIDw+ICcnKSB7CgkJLyogR2V0IHRoZSBHcm91cCBJRCBpZiBlZGl0aW5nIGFuIGV4aXN0aW5nIG9uZSwgb3RoZXJ3aXNlIGluaXRpYWxpemUgdG8gMCAqLwoJCSRudW0gPSBpc3NldCgkX1BPU1RbJ29sZGlkJ10pID8gJF9QT1NUWydvbGRpZCddIDogMDsKCSAgICAJCQkJCgkJLyogTWFrZSBzdXJlIGFsbCB0aGUgZ3JvdXBzIGhhdmUgdW5pcXVlIElEcyAqLwoJCSRncm91cHN0cmluZ3MgPSBleHBsb2RlKCd8JywgJG9sZGdyb3Vwc1sxXSk7CgkJZm9yZWFjaCgkZ3JvdXBzdHJpbmdzIGFzICR0ZW1wZ3JvdXApIHsKCQkgICAgJHRlbXBncm91cHNbXSA9IGV4cGxvZGUoJ2AnLCAkdGVtcGdyb3VwKTsKCQl9CgkJJG1heEdyb3VwSWQgPSAwOwoJCSRlZGl0SWREdXBlID0gZmFsc2U7CgkJJGdyb3Vwc0J5SWQgPSBhcnJheSgpOwoJCWZvcmVhY2goJHRlbXBncm91cHMgYXMgJGdyb3VwS2V5ID0+ICRncm91cEFycmF5KSB7CgkJICAgICRtYXhHcm91cElkID0gbWF4KGFycmF5KCRtYXhHcm91cElkLCAkZ3JvdXBBcnJheVswXSkpOwoJCSAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkZ3JvdXBBcnJheVswXSwgJGdyb3Vwc0J5SWQpKSB7IC8qIER1cGxpY2F0ZSBJRCAqLwoJCQkvKiBDaGVjayBpZiB0aGUgSUQgYmVpbmcgZWRpdGVkIGlzIGEgZHVwbGljYXRlICovCgkJCWlmICgkbnVtID09ICRncm91cEFycmF5WzBdKSB7CgkJCSAgICAkZWRpdElkRHVwZSA9IHRydWU7CgkJCX0KCQkJLyogTW92ZSB0aGUgZHVwZSB0byB0aGUgKGN1cnJlbnRseS1rbm93bikgZW5kICovCgkJCSRtYXhHcm91cElkID0gJG1heEdyb3VwSWQgKyAxOwoJCQkvKiByZWFzc2lnbiBncm91cCBJRCB0byBoaWdoZXN0IElEICsgMSAqLwoJCQkkdGVtcGdyb3Vwc1skZ3JvdXBLZXldWzBdID0gJG1heEdyb3VwSWQ7CgkJICAgIH0KCQkgICAgLyogU3RvcmUgdGhlIGdyb3VwIHN0cmluZyBpbnRvIHRoZSBhcnJheSwga2V5ZWQgYnkgZ3JvdXAgSUQgKi8KCQkgICAgJGdyb3Vwc0J5SWRbJHRlbXBncm91cHNbJGdyb3VwS2V5XVswXV0gPSBpbXBsb2RlKCdgJywgJHRlbXBncm91cHNbJGdyb3VwS2V5XSk7CgkJfQoJCS8qCgkJICogaWYgJG51bSB3YXMgbm90IGZvdW5kIGluIHRoZSBleGlzdGluZyBHcm91cCBJRHMgKGkuZS4sIGl0J3MgbmV3KSAKCQkgKiBvciBpZiBpdCB3YXMgYSBkdXBlLCB0aGVuIGFkZCBpdCBhcyBhIG5ldyBncm91cCwgZWxzZSBsZWF2ZSBpdCBhbG9uZQoJCSAqLwoJCSRudW0gPSAoJG51bSA9PSAwIG9yICRlZGl0SWREdXBlKSA/ICRtYXhHcm91cElkICsgMSA6ICRudW07CgkgICAgfSBlbHNlIHsKCQkkbnVtID0gMTsKCSAgICB9CgoJICAgICRoYXNoID0gYXJyYXkoKTsKCgkgICAgZm9yZWFjaCAoJF9QT1NUIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJaWYgKHN1YnN0cigka2V5LCAwLCAyKSA9PSAnUDonKSB7CgkJICAgIGlmICgkdmFsdWUpIHsKCQkJJGhhc2hbXSA9ICR2YWx1ZTsKCQkgICAgfQoJCX0KCSAgICB9CgoJICAgICRHcm91cEl0ZW1zID0gaW1wbG9kZSgnYCcsICRoYXNoKTsKCgkgICAgaWYgKCRHcm91cE5hbWUgPT0gJycpIHsKCQkkR3JvdXBOYW1lID0gJ0dyb3VwICcgLiAkbnVtOwoJICAgIH0KCSAgICAkbmV3Z3JvdXAgPSAkbnVtIC4gJ2AnCgkJCS4gJEdyb3VwTmFtZSAuICdgJwoJCQkuICRHcm91cERlc2MgLiAnYCcKCQkJLiAkR3JvdXBTdW1tIC4gJ2AnCgkJCS4gJEdyb3VwZmlsZSAuICdgJwoJCQkuICRHcm91cERhdGUgLiAnYCcKCQkJLiAkR3JvdXBJdGVtczsKCgkgICAgR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdFZGl0R3JvdXAnLCAkbmV3Z3JvdXApOwoKCgkgICAgJGlkID0gJ0cnIC4gJG51bTsKCSAgICAkY29vcmRpbmF0ZSA9IChpc3NldCgkX1BPU1RbJ0dyb3VwR1BTJ10pKSA/ICRfUE9TVFsnR3JvdXBHUFMnXSA6ICcnOwoJICAgICR6b29tID0gKGlzc2V0KCRfUE9TVFsnR3JvdXBab29tbGV2ZWwnXSkpID8gJF9QT1NUWydHcm91cFpvb21sZXZlbCddIDogJyc7CgkgICAgJGNvbG9yID0gKGlzc2V0KCRfUE9TVFsnR3JvdXBDb2xvciddKSkgPyAkX1BPU1RbJ0dyb3VwQ29sb3InXSA6ICcnOwoKCSAgICAvKiByZW1vdmUgZW50cmllcyBpbiB0aGUgZGF0YWJhc2UgcmVsYXRlZCB0byB0aGlzIGl0ZW0gKi8KCSAgICAkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OnJlbW92ZU1hcEVudHJ5KCdtYXBNYXAnLCBhcnJheSgnaXRlbUlkJyA9PiAkaWQpKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CgkgICAgfQoKCSAgICAvKiBBY3R1YWxseSB1cGRhdGUgdGhlIGRhdGFiYXNlIHdpdGggdGhlIGNvb3JkaW5hdGVkIHBhc3NlZCBvbiB0byB0aGUgSXRlbUlEICovCgkgICAgaWYgKCRjb29yZGluYXRlICE9ICcnKSB7CgkJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphZGRNYXBFbnRyeSgnbWFwTWFwJywKCQkJYXJyYXkoJ2l0ZW1JZCcgPT4gJGlkLAoJCQkgICAgICAnZmllbGQnID0+ICdHUFMnLAoJCQkgICAgICAndmFsdWUnID0+ICRjb29yZGluYXRlLAoJCQkgICAgICAnc2V0SWQnID0+IDAsCgkJCSAgICAgICdzZXRUeXBlJyA9PiAyKSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkgICAgfQoJICAgIC8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgem9vbWxldmVsIHBhc3NlZCBvbiB0byB0aGUgSXRlbUlEICovCgkgICAgaWYgKCR6b29tICE9ICcnKSB7CgkJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphZGRNYXBFbnRyeSgnbWFwTWFwJywKCQkJYXJyYXkoJ2l0ZW1JZCcgPT4gJGlkLAoJCQkgICAgICAnZmllbGQnID0+ICdab29tTGV2ZWwnLAoJCQkgICAgICAndmFsdWUnID0+ICR6b29tLAoJCQkgICAgICAnc2V0SWQnID0+IDAsCgkJCSAgICAgICdzZXRUeXBlJyA9PiAxKSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkgICAgfQoJICAgIC8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgY29sb3IgcGFzc2VkIG9uIHRvIHRoZSBJdGVtSUQgKi8KCSAgICBpZiAoJGNvbG9yICE9ICcnKSB7CgkJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphZGRNYXBFbnRyeSgnbWFwTWFwJywKCQkJYXJyYXkoJ2l0ZW1JZCcgPT4gJGlkLAoJCQkgICAgICAnZmllbGQnID0+ICdDb2xvcicsCgkJCSAgICAgICd2YWx1ZScgPT4gJGNvbG9yLAoJCQkgICAgICAnc2V0SWQnID0+IDAsCgkJCSAgICAgICdzZXRUeXBlJyA9PiAyKSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkgICAgfQoKCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9ICRlcnJvcjsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ21hcC5NYXBHcm91cEFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnbW9kZSddID0gJ0ZpbHRlcic7CgoJfQoKCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ2dldGNvb3JkJ10pKSB7CgoJICAgICRHcm91cE5hbWUgPSAkX1BPU1RbJ0dyb3VwVGl0bGUnXTsKCSAgICAkR3JvdXBEZXNjID0gJF9QT1NUWydHcm91cERlc2MnXTsKCSAgICAkR3JvdXBTdW1tID0gJF9QT1NUWydHcm91cFN1bW0nXTsKCSAgICAkR3JvdXBEYXRlID0gc3RydG90aW1lKCRfUE9TVFsnR3JvdXBEYXRlJ10pOwoJICAgICRHcm91cGZpbGUgPSBiYXNlbmFtZSgkX1BPU1RbJ3BpYyddKTsKCgkgICAgJG9sZGdyb3VwcyA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnTWFwR3JvdXBzJyk7CgoJICAgIGlmICgkb2xkZ3JvdXBzWzFdIDw+ICcnKSB7CgkJLyogR2V0IHRoZSBHcm91cCBJRCBpZiBlZGl0aW5nIGFuIGV4aXN0aW5nIG9uZSwgb3RoZXJ3aXNlIGluaXRpYWxpemUgdG8gMCAqLwoJCSRudW0gPSBpc3NldCgkX1BPU1RbJ29sZGlkJ10pID8gJF9QT1NUWydvbGRpZCddIDogMDsKCSAgICAJCQkJCgkJLyogTWFrZSBzdXJlIGFsbCB0aGUgZ3JvdXBzIGhhdmUgdW5pcXVlIElEcyAqLwoJCSRncm91cHN0cmluZ3MgPSBleHBsb2RlKCd8JywgJG9sZGdyb3Vwc1sxXSk7CgkJZm9yZWFjaCgkZ3JvdXBzdHJpbmdzIGFzICR0ZW1wZ3JvdXApIHsKCQkgICAgJHRlbXBncm91cHNbXSA9IGV4cGxvZGUoJ2AnLCAkdGVtcGdyb3VwKTsKCQl9CgkJJG1heEdyb3VwSWQgPSAwOwoJCSRlZGl0SWREdXBlID0gZmFsc2U7CgkJJGdyb3Vwc0J5SWQgPSBhcnJheSgpOwoJCWZvcmVhY2goJHRlbXBncm91cHMgYXMgJGdyb3VwS2V5ID0+ICRncm91cEFycmF5KSB7CgkJICAgICRtYXhHcm91cElkID0gbWF4KGFycmF5KCRtYXhHcm91cElkLCAkZ3JvdXBBcnJheVswXSkpOwoJCSAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkZ3JvdXBBcnJheVswXSwgJGdyb3Vwc0J5SWQpKSB7IC8qIER1cGxpY2F0ZSBJRCAqLwoJCQkvKiBDaGVjayBpZiB0aGUgSUQgYmVpbmcgZWRpdGVkIGlzIGEgZHVwbGljYXRlICovCgkJCWlmICgkbnVtID09ICRncm91cEFycmF5WzBdKSB7CgkJCSAgICAkZWRpdElkRHVwZSA9IHRydWU7CgkJCX0KCQkJLyogTW92ZSB0aGUgZHVwZSB0byB0aGUgKGN1cnJlbnRseS1rbm93bikgZW5kICovCgkJCSRtYXhHcm91cElkID0gJG1heEdyb3VwSWQgKyAxOwoJCQkvKiByZWFzc2lnbiBncm91cCBJRCB0byBoaWdoZXN0IElEICsgMSAqLwoJCQkkdGVtcGdyb3Vwc1skZ3JvdXBLZXldWzBdID0gJG1heEdyb3VwSWQ7CgkJICAgIH0KCQkgICAgLyogU3RvcmUgdGhlIGdyb3VwIHN0cmluZyBpbnRvIHRoZSBhcnJheSwga2V5ZWQgYnkgZ3JvdXAgSUQgKi8KCQkgICAgJGdyb3Vwc0J5SWRbJHRlbXBncm91cHNbJGdyb3VwS2V5XVswXV0gPSBpbXBsb2RlKCdgJywgJHRlbXBncm91cHNbJGdyb3VwS2V5XSk7CgkJfQoJCS8qCgkJICogaWYgJG51bSB3YXMgbm90IGZvdW5kIGluIHRoZSBleGlzdGluZyBHcm91cCBJRHMgKGkuZS4sIGl0J3MgbmV3KSAKCQkgKiBvciBpZiBpdCB3YXMgYSBkdXBlLCB0aGVuIGFkZCBpdCBhcyBhIG5ldyBncm91cCwgZWxzZSBsZWF2ZSBpdCBhbG9uZQoJCSAqLwoJCSRudW0gPSAoJG51bSA9PSAwIG9yICRlZGl0SWREdXBlKSA/ICRtYXhHcm91cElkICsgMSA6ICRudW07CgkgICAgfSBlbHNlIHsKCQkkbnVtID0gMTsKCSAgICB9CgoJICAgICRoYXNoID0gYXJyYXkoKTsKCgkgICAgZm9yZWFjaCAoJF9QT1NUIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJaWYgKHN1YnN0cigka2V5LCAwLCAyKSA9PSAnUDonKSB7CgkJICAgIGlmICgkdmFsdWUpIHsKCQkJJGhhc2hbXSA9ICR2YWx1ZTsKCQkgICAgfQoJCX0KCSAgICB9CgoJICAgICRHcm91cEl0ZW1zID0gaW1wbG9kZSgnYCcsICRoYXNoKTsKCgkgICAgaWYgKCRHcm91cE5hbWUgPT0gJycpIHsKCQkkR3JvdXBOYW1lID0gJ0dyb3VwICcgLiAkbnVtOwoJICAgIH0KCSAgICAkZWRpdGdyb3VwID0gJG51bSAuICdgJwoJCQkgLiAkR3JvdXBOYW1lIC4gJ2AnCgkJCSAuICRHcm91cERlc2MgLiAnYCcKCQkJIC4gJEdyb3VwU3VtbSAuICdgJwoJCQkgLiAkR3JvdXBmaWxlIC4gJ2AnCgkJCSAuICRHcm91cERhdGUgLiAnYCcKCQkJIC4gJEdyb3VwSXRlbXM7CgoJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnRWRpdEdyb3VwJywgJGVkaXRncm91cCk7CgoJICAgICRpZCA9ICdHJyAuICRudW07CgkgICAgJGNvb3JkaW5hdGUgPSAoaXNzZXQoJF9QT1NUWydHcm91cEdQUyddKSkgPyAkX1BPU1RbJ0dyb3VwR1BTJ10gOiAnJzsKCSAgICAkem9vbSA9IChpc3NldCgkX1BPU1RbJ0dyb3VwWm9vbWxldmVsJ10pKSA/ICRfUE9TVFsnR3JvdXBab29tbGV2ZWwnXSA6ICcnOwoJICAgICRjb2xvciA9IChpc3NldCgkX1BPU1RbJ0dyb3VwQ29sb3InXSkpID8gJF9QT1NUWydHcm91cENvbG9yJ10gOiAnJzsKCgkgICAgaWYgKCRjb29yZGluYXRlICE9ICcnKSB7CgkJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphZGRNYXBFbnRyeSgnbWFwTWFwJywKCQkJYXJyYXkoJ2l0ZW1JZCcgPT4gJGlkLAoJCQkgICAgICAnZmllbGQnID0+ICdHUFMnLAoJCQkgICAgICAndmFsdWUnID0+ICRjb29yZGluYXRlLAoJCQkgICAgICAnc2V0SWQnID0+IDAsCgkJCSAgICAgICdzZXRUeXBlJyA9PiAyKSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkgICAgfQoJICAgIC8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgem9vbWxldmVsIHBhc3NlZCBvbiB0byB0aGUgSXRlbUlEICovCgkgICAgaWYgKCR6b29tICE9ICcnKSB7CgkJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphZGRNYXBFbnRyeSgnbWFwTWFwJywKCQkJYXJyYXkoJ2l0ZW1JZCcgPT4gJGlkLAoJCQkgICAgICAnZmllbGQnID0+ICdab29tTGV2ZWwnLAoJCQkgICAgICAndmFsdWUnID0+ICR6b29tLAoJCQkgICAgICAnc2V0SWQnID0+IDAsCgkJCSAgICAgICdzZXRUeXBlJyA9PiAxKSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkgICAgfQoJICAgIC8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgY29sb3IgcGFzc2VkIG9uIHRvIHRoZSBJdGVtSUQgKi8KCSAgICBpZiAoJGNvbG9yICE9ICcnKSB7CgkJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphZGRNYXBFbnRyeSgnbWFwTWFwJywKCQkgICAgYXJyYXkoJ2l0ZW1JZCcgPT4gJGlkLAoJCQkgICdmaWVsZCcgPT4gJ0NvbG9yJywKCQkJICAndmFsdWUnID0+ICRjb2xvciwKCQkJICAnc2V0SWQnID0+IDAsCgkJCSAgJ3NldFR5cGUnID0+IDIpKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCSAgICB9CgoJICAgICRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSAkZXJyb3I7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdtYXAuU2hvd01hcCc7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ01vZGUnXSA9ICdQaWNrJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsncGx1Z2luJ10gPSAnR3JvdXBDb29yZCc7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ2dyb3VwaWQnXSA9ICRpZDsKCX0KCglyZXR1cm4gYXJyYXkgKG51bGwsICRyZXN1bHRzKTsKICAgIH0KfQoKLyoqCiAqIEBwYWNrYWdlIG1hcAogKiBAc3VicGFja2FnZSBVc2VySW50ZXJmYWNlCiAqLwpjbGFzcyBNYXBHcm91cEFkbWluVmlldyBleHRlbmRzIEdhbGxlcnlWaWV3IHsKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Vmlldzo6bG9hZFRlbXBsYXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxvYWRUZW1wbGF0ZSgmJHRlbXBsYXRlLCAmJGZvcm0pIHsKCgkkdGVtcGxhdGUtPmhlYWQoJ21vZHVsZXMvbWFwL3RlbXBsYXRlcy9BZG1pbkhlYWRlci50cGwnKTsKCSR0ZW1wbGF0ZS0+aGVhZCgnbW9kdWxlcy9tYXAvaW5jbHVkZXMvR29vZ2xlTWFwLmNzcycpOwoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5WaWV3SW5pdC5pbmMnKTsKCSRmb3JtWydmb3JtTmFtZSddID0gJ01hcEdyb3VwQWRtaW4nOwoKCS8qIEdldCB0aGUgZGF0ZS90aW1lIGZvcm1hdCBhbmQgdG9kYXkncyBkYXRlICovCglsaXN0ICgkcmV0LCAkY29yZVBhcmFtcykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hBbGxQbHVnaW5QYXJhbWV0ZXJzKCdtb2R1bGUnLCAnY29yZScpOwoJJGRhdGVGb3JtYXQ9JGNvcmVQYXJhbXNbJ2Zvcm1hdC5kYXRlJ107CgkkZm9ybVsnbm93J10gPSBzdHJmdGltZSgkZGF0ZUZvcm1hdCwgc3RydG90aW1lKCdub3cnKSk7CgoJLyogU2VsZWN0IGl0ZW1zIHRoYXQgaGF2ZSBHUFMgY29vcmRpbmF0ZXMgZmlsbGVkIG91dCAqLwoJJHN0b3JhZ2UgPSYgJGdhbGxlcnktPmdldFN0b3JhZ2UoKTsKCSRxdWVyeSA9ICcKCVNFTEVDVAoJICBbbWFwTWFwOjppdGVtSWRdLAoJICBbbWFwTWFwOjp2YWx1ZV0KCUZST00KCSAgW21hcE1hcF0KCVdIRVJFCgkgIFttYXBNYXA6OmZpZWxkXSA9IFwnR1BTXCcKCSc7CglsaXN0ICgkcmV0LCAkcmVzdWx0cykgPSAkZ2FsbGVyeS0+c2VhcmNoKCRxdWVyeSwgYXJyYXkoKSwgYXJyYXkoKSk7CiAgICAgICAgCglpZiAoISRyZXQpIHsKCSAgICAkcmVzdWx0MSA9ICRyZXN1bHRzLT5uZXh0UmVzdWx0KCk7Cgl9CgoJaWYgKCFlbXB0eSgkcmVzdWx0MSkpIHsKCSAgICBsaXN0ICgkcmV0LCAkcmVzdWx0cykgPSAkZ2FsbGVyeS0+c2VhcmNoKCRxdWVyeSwgYXJyYXkoKSwgYXJyYXkoKSk7CgoJICAgIC8qCgkgICAgICogQnVpbGRzIGEgaGFzaCBmb3IgZWFjaCBtYXBwYWJsZSBlbnRpdHkgZnJvbSBpdHMgSUQgdG8gYSBoYXNoIG9mCgkgICAgICogcHJvcGVydGllcy4gTm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgc2luY2UgaXQganVzdCBnZXRzIGZsYXR0ZW5lZAoJICAgICAqIG91dCBsYXRlciwgYnV0IGl0IGNvdWxkIGJlIHVzZWZ1bCBhdCBzb21lIHBvaW50LgoJICAgICAqLwoJICAgICRpZHMgPSBhcnJheSgpOwoJICAgICRwb2ludEhhc2ggPSBhcnJheSgpOwoJICAgIHdoaWxlICgkcmVzdWx0ID0gJHJlc3VsdHMtPm5leHRSZXN1bHQoKSkgewoJCSRpZCA9ICRyZXN1bHRbMF07CgoJCSRpZHNbXSA9ICRpZDsKCQkkcG9pbnRIYXNoWyRpZF0gPSBhcnJheSgpOwoJCSRwb2ludEhhc2hbJGlkXVsnaWQnXSA9ICRpZDsKCQkkcG9pbnRIYXNoWyRpZF1bJ2dwcyddID0gJHJlc3VsdFsxXTsKCgoJCSR0bXAgPSBhcnJheSgpOwoJCWlmIChzdWJzdHIoJGlkLCAwLCAxKSA9PSAnRycpIHsKCQkgICAgaWYgKChhcnJheV9rZXlfZXhpc3RzKCdFZGl0R3JvdXAnLCAkZm9ybSkgYW5kICRmb3JtWydFZGl0R3JvdXAnXSAhPSAnJykKCQkJICAgIGFuZCAoYXJyYXlfa2V5X2V4aXN0cygnbW9kZScsICRmb3JtKSBhbmQgJGZvcm1bJ21vZGUnXSA9PSAnQWRkR3JvdXAnKSkgewoJCQkkdG1wID0gZXhwbG9kZSgnYCcsICRmb3JtWydFZGl0R3JvdXAnXSk7CgkJCWlmICgkdG1wWzBdID09IHN1YnN0cigkaWQsIDEpKSB7CgkJCSAgICB1bnNldCgkcG9pbnRIYXNoWyRpZF0pOwoJCQl9CgkJICAgIH0KCQkgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJGlkLCRwb2ludEhhc2gpKSB7CgkJCSRwb2ludEhhc2hbJGlkXVsndHlwZSddID0gJ0dvb2dsZU1hcEdyb3VwJzsKCQkJJGdyb3VwaWQgPSBzdWJzdHIoJGlkLCAxKTsKCQkJbGlzdCAoJHJldCwgJHRtcHBhcmFtKSA9CgkJCQlHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ01hcEdyb3VwcycpOwoJCQkkZ3JvdXBzID0gZXhwbG9kZSgnfCcsICR0bXBwYXJhbSk7CgkJCWZvcmVhY2ggKCRncm91cHMgYXMgJGdyb3VwKSB7CgkJCSAgICBpZiAoIWVtcHR5KCRncm91cCkpIHsKCQkJICAgIAkkZ3JvdXBpbmZvID0gZXhwbG9kZSgnYCcsICRncm91cCk7CgkJCQlpZiAoJGdyb3VwaW5mb1swXSA9PSAkZ3JvdXBpZCBhbmQgJGdyb3VwaWQgIT0gJycpIHsKCQkJCSAgICAkdGh1bWJwaWMgPSAkYmFzZWdhbGxlcnlkaXIgLiAnbW9kdWxlcy9tYXAvaW1hZ2VzL2dyb3Vwcy8nCgkJCQkJCS4gJGdyb3VwaW5mb1s0XTsKCQkJCSAgICAkcG9pbnRIYXNoWyRpZF1bJ3RpdGxlJ10gPSAkZ3JvdXBpbmZvWzFdOwoJCQkJICAgICRwb2ludEhhc2hbJGlkXVsnZGF0ZSddID0gc3RyZnRpbWUoJGRhdGVGb3JtYXQsJGdyb3VwaW5mb1s1XSk7CgkJCQkgICAgJHBvaW50SGFzaFskaWRdWydkZXNjcmlwdGlvbiddID0gJGdyb3VwaW5mb1szXTsKCQkJCSAgICAkcG9pbnRIYXNoWyRpZF1bJ3RodW1iJ10gPQoJCQkJCSAgICBHYWxsZXJ5VXRpbGl0aWVzOjpjb252ZXJ0UGF0aFRvVXJsKCR0aHVtYnBpYyk7CgkJCQl9CgkJCSAgICB9CgkJCX0KCQkgICAgfQoJCX0KCSAgICB9CgoJICAgIC8qIGNyZWF0ZSBhbiBJRCBhcnJheSB3aXRob3V0IHRoZSBncm91cHMgaW4gaXQgKi8KCSAgICAkdG1wID0gYXJyYXkoKTsKCSAgICBmb3JlYWNoICgkaWRzIGFzICRpZCkgewoJCWlmIChzdWJzdHIoJGlkLCAwLCAxKSAhPSAnRycpIHsKCQkgICAgJHRtcFtdID0gJGlkOwoJCX0KCSAgICB9CgkgICAgJGlkcyA9ICR0bXA7CgoKCSAgICAvKiBUcmltIHRoZSBsaXN0IGRvd24gdG8gdGhlIGl0ZW1zIHRoYXQgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBzZWUgKi8KCSAgICBsaXN0ICgkcmV0LCAkcGVybXMpID0KCQlHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hQZXJtaXNzaW9uc0Zvckl0ZW1zKCRpZHMsICRnYWxsZXJ5LT5nZXRBY3RpdmVVc2VySWQoKSk7CgkgICAgZm9yKCRpID0gMDsgJGkgPCBjb3VudCgkaWRzKTsgJGkrKykgewoJCWlmICghYXJyYXlfa2V5X2V4aXN0cygkaWRzWyRpXSwgJHBlcm1zKQoJCQl8fCAhYXJyYXlfa2V5X2V4aXN0cygnY29yZS52aWV3JywgJHBlcm1zWyRpZHNbJGldXSkpIHsKCQkgICAgdW5zZXQoJHBvaW50SGFzaFskaWRzWyRpXV0pOwoJCSAgICB1bnNldCgkaWRzWyRpXSk7CgkJfQoJICAgIH0KCgkgICAgJGlkcyA9IGFycmF5X3ZhbHVlcygkaWRzKTsKCSAgICAvKiBSZXRyaWV2ZSBkYXRhIGZvciBlYWNoIGVudGl0eSAqLwoJICAgIGxpc3QgKCRyZXQsICRlbnRpdGllcykgPSAkc3RvcmFnZS0+bG9hZEVudGl0aWVzKCRpZHMpOwoJICAgIGxpc3QgKCRyZXQsICR0aHVtYnMpID0gR2FsbGVyeUNvcmVBcGk6OmZldGNoVGh1bWJuYWlsc0J5SXRlbUlkcygkaWRzKTsKCgkgICAgLyoKCSAgICAgKiBGaWxsIG91dCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgZm9yIGVhY2ggZW50aXR5LCB0YWtpbmcgY2FyZSB0bwoJICAgICAqIGZvcm1hdCB0aGVtIHNvIHRoYXQgdGhleSBkb24ndCBicmVhayB0aGUgSmF2YXNjcmlwdCB0aGF0IHRoZXkKCSAgICAgKiBlbmQgdXAgZW1iZWRkZWQgd2l0aGluLgoJICAgICAqLwoJICAgIGZvcmVhY2ggKCRlbnRpdGllcyBhcyAkZW50aXR5KSB7CgkJJHBvaW50SGFzaFskZW50aXR5LT5nZXRJZCgpXVsndHlwZSddID0gJGVudGl0eS0+Z2V0RW50aXR5VHlwZSgpOwoJCSRwb2ludEhhc2hbJGVudGl0eS0+Z2V0SWQoKV1bJ3RpdGxlJ10gPQoJCQlwcmVnX3JlcGxhY2UoYXJyYXkoJy9cbi8nLCcvXHIvJyksIGFycmF5KCcnLCcnKSwgJGVudGl0eS0+Z2V0VGl0bGUoKSk7CgkJJHBvaW50SGFzaFskZW50aXR5LT5nZXRJZCgpXVsnZGVzY3JpcHRpb24nXSA9CgkJCXByZWdfcmVwbGFjZShhcnJheSgnL1xuLycsJy9cci8nKSwgYXJyYXkoJycsJycpLCAkZW50aXR5LT5nZXREZXNjcmlwdGlvbigpKTsKCQkkcG9pbnRIYXNoWyRlbnRpdHktPmdldElkKCldWyd0aHVtYiddID0gJHVybEdlbmVyYXRvci0+Z2VuZXJhdGVVcmwoCgkJCWFycmF5KCd2aWV3JyA9PiAnY29yZS5Eb3dubG9hZEl0ZW0nLAoJCQkgICAgICAnaXRlbUlkJyA9PiAkdGh1bWJzWyRlbnRpdHktPmdldElkKCldLT5nZXRJZCgpLAoJCQkgICAgICAnc2VyaWFsTnVtYmVyJyA9PiAkdGh1bWJzWyRlbnRpdHktPmdldElkKCldLT5nZXRTZXJpYWxOdW1iZXIoKSkpOwoJCSRwb2ludEhhc2hbJGVudGl0eS0+Z2V0SWQoKV1bJ2RhdGUnXSA9CgkJCXN0cmZ0aW1lKCRkYXRlRm9ybWF0LCAkZW50aXR5LT5nZXRDcmVhdGlvblRpbWVzdGFtcCgpKTsKCSAgICB9CgoKCSAgICAkR1BTSXRlbSA9IGFycmF5KCk7CgkgICAgZm9yZWFjaCAoJHBvaW50SGFzaCBhcyAkaWQgPT4gJHBvaW50KSB7CgkJJEdQU0l0ZW1bXSA9ICRwb2ludDsKCSAgICB9CgoJICAgICRmb3JtWydpdGVtcyddID0gJEdQU0l0ZW07Cgl9CgoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5FZGl0cy5pbmMnKTsKCgkvKiBDcmVhdGUgdGhlIG9wdGlvbiBsaXN0IGZvciBHcm91cCBDb2xvciAoYmFzZWQgb24gUGhvdG8gc2VsZWN0aW9uKSAqLwoJaWYgKGFycmF5X2tleV9leGlzdHMoJ3VzZU1hcmtlclNldCcsICRmb3JtKSkgewoJICAgIGlmIChmaWxlX2V4aXN0cygkYmFzZWdhbGxlcnlkaXIgLiAnbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvJyAuICRmb3JtWyd1c2VNYXJrZXJTZXQnXQoJCQkgICAgLiAnL2NvbG9ybGlzdCcpKSB7CgkJJGhhbmRsZSA9IGZvcGVuKCRiYXNlZ2FsbGVyeWRpciAuICdtb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy8nCgkJCQkuICRmb3JtWyd1c2VNYXJrZXJTZXQnXSAuICcvY29sb3JsaXN0JywgJ3InKTsKCQkkbGlzdCA9IGV4cGxvZGUoJyonLCBmcmVhZCgkaGFuZGxlLAoJCQlmaWxlc2l6ZSgkYmFzZWdhbGxlcnlkaXIgCgkJCQkgLiAnbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvJwoJCQkJIC4gJGZvcm1bJ3VzZU1hcmtlclNldCddCgkJCQkgLiAnL2NvbG9ybGlzdCcpIC0gMSkpOwoJCWZjbG9zZSgkaGFuZGxlKTsKCQkkZm9ybVsnY29sb3JHb3B0aW9uJ10gPSAnJzsKCQlmb3JlYWNoICgkbGlzdCBhcyAkY29sb3IpIHsKCQkgICAgJGZvcm1bJ2NvbG9yR29wdGlvbiddIC49ICc8b3B0aW9uIHZhbHVlPSInIC4gJGNvbG9yIC4gJyIgJzsKCQkgICAgaWYgKChhcnJheV9rZXlfZXhpc3RzKCdFZGl0R3JvdXBQYXJhbScsICRmb3JtKSAKCQkJICAgIGFuZCBpc19hcnJheSgkZm9ybVsnRWRpdEdyb3VwUGFyYW0nXSkKCQkJICAgIGFuZCBhcnJheV9rZXlfZXhpc3RzKCdDb2xvcicsICRmb3JtWydFZGl0R3JvdXBQYXJhbSddKQoJCQkgICAgYW5kICgkZm9ybVsnRWRpdEdyb3VwUGFyYW0nXVsnQ29sb3InXSA9PSAkY29sb3IpKSAKCQkJb3IgKCghYXJyYXlfa2V5X2V4aXN0cygnRWRpdEdyb3VwUGFyYW0nLCAkZm9ybSkKCQkJCW9yICFpc19hcnJheSgkZm9ybVsnRWRpdEdyb3VwUGFyYW0nXSkKCQkJCW9yICFhcnJheV9rZXlfZXhpc3RzKCdDb2xvcicsICRmb3JtWydFZGl0R3JvdXBQYXJhbSddKSkKCQkJICAgIGFuZCBhcnJheV9rZXlfZXhpc3RzKCdkZWZhdWx0cGhvdG9jb2xvcicsICRmb3JtKQoJCQkgICAgYW5kICgkZm9ybVsnZGVmYXVsdHBob3RvY29sb3InXSA9PSAkY29sb3IpKSkgewoJCQkkZm9ybVsnY29sb3JHb3B0aW9uJ10gLj0gJ3NlbGVjdGVkJzsKCQkgICAgfQoJCSAgICAkZm9ybVsnY29sb3JHb3B0aW9uJ10gLj0gJz4nIC4gJGNvbG9yIC4gJzwvb3B0aW9uPic7CgkJfQoJICAgIH0KCX0KCgkvKiBDcmVhdGUgdGhlIGdyb3VwIGFycmF5ICovCglpZiAoYXJyYXlfa2V5X2V4aXN0cygnTWFwR3JvdXBzJywgJHBhcmFtKSBhbmQgJHBhcmFtWydNYXBHcm91cHMnXSAhPSAnJykgewoJICAgICRncm91cHMgPSBleHBsb2RlKCd8JywgJHBhcmFtWydNYXBHcm91cHMnXSk7CgkgICAgc29ydCgkZ3JvdXBzKTsKCSAgICBmb3JlYWNoICgkZ3JvdXBzIGFzICRncm91cCkgewoJCSR0bXAgPSBleHBsb2RlKCdgJywgJGdyb3VwKTsKCQkkdG1wWzVdID0gc3RyZnRpbWUoJGRhdGVGb3JtYXQsICR0bXBbNV0pOwoJCSRwaWMgPSBHYWxsZXJ5VXRpbGl0aWVzOjpjb252ZXJ0UGF0aFRvVXJsKCRiYXNlZ2FsbGVyeWRpcgoJCQkJCQkJICAuICdtb2R1bGVzL21hcC9pbWFnZXMvZ3JvdXBzLycgLiAkdG1wWzRdKTsKCQkkdG1wWzRdID0gJzxpbWcgd2lkdGg9ODBweCBzcmM9IicgLiAkcGljIC4gJyIgLz4nOwoJCSRmb3JtWyd0aGVncm91cHMnXVtdID0gJHRtcDsKCSAgICB9Cgl9CgoJaWYgKCR0ZW1wbGF0ZS0+aGFzVmFyaWFibGUoJ1NpdGVBZG1pbicpKSB7CgkgICAgJFNpdGVBZG1pbiA9JiAkdGVtcGxhdGUtPmdldFZhcmlhYmxlQnlSZWZlcmVuY2UoJ1NpdGVBZG1pbicpOwoJICAgICRTaXRlQWRtaW5bJ2VuY3R5cGUnXSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJzsKCX0gZWxzZSB7CgkgICAgJFNpdGVBZG1pblsnZW5jdHlwZSddID0gJ211bHRpcGFydC9mb3JtLWRhdGEnOwoJICAgICR0ZW1wbGF0ZS0+c2V0VmFyaWFibGUoJ1NpdGVBZG1pbicsICRTaXRlQWRtaW4pOwoJfQoKCSR0ZW1wbGF0ZS0+c2V0VmFyaWFibGUoJ2NvbnRyb2xsZXInLCAnbWFwLk1hcEdyb3VwQWRtaW4nKTsKCXJldHVybiBhcnJheShudWxsLCBhcnJheSgnYm9keScgPT4gJ21vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBHcm91cEFkbWluLnRwbCcpKTsKICAgIH0KfQo/Pg==');
expand_3537250845($outputDir, 'MapLegendAdmin.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBTdGV2ZW4gTi4gU2V2ZXJpbmdoYXVzIDxzbnNAc2V2ZXJpbmdoYXVzLm9yZz4KICogQHZlcnNpb24gJFJldmlzaW9uOiAxMjUzICQKICoKICogVGhpcyBpcyBzb21lIG9mIHRoZSB1Z2xpZXN0IGNvZGUgSSd2ZSBldmVyIHdyaXR0ZW4uIFBsZWFzZSBkbyBub3QKICoganVkZ2UgbWUgYnkgaXQuIDopCiAqLwoKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL21hcEhlbHBlci5jbGFzcycpOwpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvR29vZ2xlTWFwVXRpbGl0aWVzLmNsYXNzJyk7CgoKLyoqCiAqIEBwYWNrYWdlIG1hcAogKiBAc3VicGFja2FnZSBVc2VySW50ZXJmYWNlCiAqLwpjbGFzcyBNYXBMZWdlbmRBZG1pbkNvbnRyb2xsZXIgZXh0ZW5kcyBHYWxsZXJ5Q29udHJvbGxlciB7CgogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlDb250cm9sbGVyOjpoYW5kbGVSZXF1ZXN0CiAgICAgKi8KICAgIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QoJGZvcm0pIHsKCglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pIC4gJy9pbmNsdWRlcy9NYXBBZG1pbkNvbnRyb2xsZXJJbml0LmluYycpOwoKCS8qIENhbmNlbCBoaXQsIHJldHVybiB0byB0aGUgZGVmYXVsdCBMZWdlbmQgQWRtaW4gUGFnZSAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnY2FuY2VsJ10pKSB7CgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwTGVnZW5kQWRtaW4nOwoKCX0KCgkvKiBTYXZlIExlZ2VuZCBpbmZvcm1hdGlvbiAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnc2F2ZSddKSkgewoKCSAgICAkZm9ybVsnQWxidW1MZWdlbmQnXSA9IGZhbHNlOwoJICAgICRmb3JtWydQaG90b0xlZ2VuZCddID0gZmFsc2U7CgkgICAgJGZvcm1bJ0dyb3VwTGVnZW5kJ10gPSBmYWxzZTsKCgkgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ3VzZWFsYnVtbGVnZW5kJywgJF9QT1NUKSBhbmQgJF9QT1NUWyd1c2VhbGJ1bWxlZ2VuZCddKSB7CgkJJGZvcm1bJ0FsYnVtTGVnZW5kJ10gPSB0cnVlOwoJICAgIH0KCSAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygndXNlcGhvdG9sZWdlbmQnLCAkX1BPU1QpIGFuZCAkX1BPU1RbJ3VzZXBob3RvbGVnZW5kJ10pIHsKCQkkZm9ybVsnUGhvdG9MZWdlbmQnXSA9IHRydWU7CgkgICAgfQoJICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdVc2VHcm91cExlZ2VuZCcsICRfUE9TVCkgYW5kICRfUE9TVFsnVXNlR3JvdXBMZWdlbmQnXSkgewoJCSRmb3JtWydHcm91cExlZ2VuZCddID0gdHJ1ZTsKCSAgICB9CgoJICAgICRmb3JtWydFeHBhbmRBbGJ1bUxlZ2VuZCddID0gZmFsc2U7CgkgICAgJGZvcm1bJ0V4cGFuZFBob3RvTGVnZW5kJ10gPSBmYWxzZTsKCSAgICAkZm9ybVsnRXhwYW5kR3JvdXBMZWdlbmQnXSA9IGZhbHNlOwoKCSAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnRXhwYW5kQWxidW1MZWdlbmQnLCAkX1BPU1QpIGFuZCAkX1BPU1RbJ0V4cGFuZEFsYnVtTGVnZW5kJ10pIHsKCQkkZm9ybVsnRXhwYW5kQWxidW1MZWdlbmQnXSA9IHRydWU7CgkgICAgfQoJICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdFeHBhbmRQaG90b0xlZ2VuZCcsICRfUE9TVCkgYW5kICRfUE9TVFsnRXhwYW5kUGhvdG9MZWdlbmQnXSkgewoJCSRmb3JtWydFeHBhbmRQaG90b0xlZ2VuZCddID0gdHJ1ZTsKCSAgICB9CgkgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ0V4cGFuZEdyb3VwTGVnZW5kJywgJF9QT1NUKSBhbmQgJF9QT1NUWydFeHBhbmRHcm91cExlZ2VuZCddKSB7CgkJJGZvcm1bJ0V4cGFuZEdyb3VwTGVnZW5kJ10gPSB0cnVlOwoJICAgIH0KCgkgICAgJGFsYnVtbGVnZW5kaXRlbSA9ICcnOwoJICAgICRwaG90b2xlZ2VuZGl0ZW0gPSAnJzsKCSAgICAkZ3JvdXBsZWdlbmRpdGVtID0gJyc7CgoJICAgIGZvciAoJGkgPSAwOyAkaSA8IDEwOyAkaSsrKSB7CgkJaWYgKCRmb3JtWydBbGJ1bUxlZ2VuZCddKSB7CgkJICAgICRhbGJ1bWxlZ2VuZGl0ZW0gLj0gJF9QT1NUWydBJyAuICRpXSAuICd8JzsKCQl9CgkJaWYgKCRmb3JtWydQaG90b0xlZ2VuZCddKSB7CgkJICAgICRwaG90b2xlZ2VuZGl0ZW0gLj0gJF9QT1NUWydQJyAuICRpXSAuICd8JzsKCQl9CgkJaWYgKCRmb3JtWydHcm91cExlZ2VuZCddKSB7CgkJICAgICRncm91cGxlZ2VuZGl0ZW0gLj0gJF9QT1NUWydHJyAuICRpXSAuICd8JzsKCQl9CgkgICAgfQoJICAgICRmb3JtWydQaG90b0xlZ2VuZHMnXSA9ICRwaG90b2xlZ2VuZGl0ZW07CgkgICAgJGZvcm1bJ0FsYnVtTGVnZW5kcyddID0gJGFsYnVtbGVnZW5kaXRlbTsKCSAgICAkZm9ybVsnR3JvdXBMZWdlbmRzJ10gPSAkZ3JvdXBsZWdlbmRpdGVtOwoKCSAgICBzd2l0Y2ggKCRmb3JtWydMZWdlbmRQb3MnXSkgewoJICAgIGNhc2UgMToKCQkvKiBMZWdlbmQgaXMgb24gdGhlIGxlZnQsIGFkZCB0aGUgbWFwLkxlZ2VuZCBCbG9jayAqLwoJCS8qIEdyYWIgdGhlIERlZmF1bHQgdGhlbWUgdmFsdWUgKHVzZWQgZm9yIHRoZSBnb29nbGUgbWFwKSAqLwoJCWxpc3QgKCRyZXQsICR0aGVtZUlkKSA9CgkJCUdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdjb3JlJywgJ2RlZmF1bHQudGhlbWUnKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsKTsKCQl9CgkJLyogR3JhYiB0aGUgVGhlbWUgRGVmYXVsdCBzZXR0aW5ncyAqLwoJCWxpc3QgKCRyZXQsICRkZWZ0aGVtZSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZFBsdWdpbigndGhlbWUnLCAkdGhlbWVJZCk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCk7CgkJfQoJCSRzZXR0aW5ncyA9ICRkZWZ0aGVtZS0+Z2V0U2V0dGluZ3MobnVsbCk7CgkJbGlzdCAoJHRoZW1lbWFqb3IsICR0aGVtZW1pbm9yKSA9ICRkZWZ0aGVtZS0+Z2V0QXBpVmVyc2lvbigpOwoJCS8qIAoJICAgICAgICAgKiBUaGlzIGJsb2NrIG1hbmlwdWxhdGlvbiBsb2dpYyBvbmx5IHdvcmtzIGZvciBlYXJsaWVyIGJsb2NrIGVuY29kaW5nLCAKCSAgICAgICAgICogc28gc2tpcCBpdCBmb3IgbGF0ZXIgVGhlbWUgQVBJIHZlcnNpb25zIHRvIGF2b2lkIGNvcnJ1cHRpbmcgdGhlIAoJICAgICAgICAgKiBibG9jayBsaXN0LgoJICAgICAgICAgKi8KCQlpZiAoJHRoZW1lbWFqb3IgPT0gMiAmJiAkdGhlbWVtaW5vciA8PSAzKSB7CgkJICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCcyJywgJHNldHRpbmdzKSkgewoJCQkkc2V0dGluZ3MgPSAkc2V0dGluZ3NbMl07CgkJCWZvcmVhY2ggKCRzZXR0aW5ncyBhcyAka2V5ID0+ICR2YWx1ZXMpIHsKCQkJICAgIGlmICgka2V5ID09ICdzaWRlYmFyQmxvY2tzJykgewoJCQkJbGlzdCAoJHJldCwgJHZhbHVlKSA9CgkJCQkJJGRlZnRoZW1lLT51bnBhY2tTZXR0aW5nKCdibG9jay1saXN0JywgJHZhbHVlcyk7CgkJCQkkdmFsdWUgPSBzdHJfcmVwbGFjZSgnW21hcC5MZWdlbmRdJywgJycsICR2YWx1ZSk7CgkJCQkkdmFsdWUgPSAnW21hcC5MZWdlbmRdICcgLiAkdmFsdWU7CgkJCQlsaXN0ICgkcmV0LCAkbmV3dmFsdWUpID0gCgkJCQkJJGRlZnRoZW1lLT5wYWNrU2V0dGluZygnYmxvY2stbGlzdCcsICR2YWx1ZSk7CgkJCQkkcmV0ID0gJGRlZnRoZW1lLT5zZXRQYXJhbWV0ZXIoJ3NpZGViYXJCbG9ja3MnLCAkbmV3dmFsdWUpOwoJCQkgICAgfQoJCQl9CgkJICAgIH0gZWxzZSBpZiAoaXNfYXJyYXkoJHNldHRpbmdzWzFdKSkgewoJCQlmb3JlYWNoICgkc2V0dGluZ3NbMV0gYXMgJG51bSA9PiAkYXJyYXl2YWx1ZSkgewoJCQkgICAgaWYgKCRhcnJheXZhbHVlWydrZXknXSA9PSAic2lkZWJhckJsb2NrcyIpIHsKCQkJCWxpc3QgKCRzdWNjZXNzLCAkdmFsdWUpID0gCgkJCQkJJGRlZnRoZW1lLT51bnBhY2tTZXR0aW5nKCdibG9jay1saXN0JywgCgkJCQkJCQkJICRzZXR0aW5nc1sxXVskbnVtXVsndmFsdWUnXSk7CgkJCQkkdmFsdWUgPSBzdHJfcmVwbGFjZSgnW21hcC5MZWdlbmRdJywgJycsICR2YWx1ZSk7CgkJCQkkdmFsdWUgPSAnW21hcC5MZWdlbmRdICcgLiAkdmFsdWU7CgkJCQlsaXN0ICgkcmV0LCAkbmV3dmFsdWUpID0KCQkJCQkkZGVmdGhlbWUtPnBhY2tTZXR0aW5nKCdibG9jay1saXN0JywgJHZhbHVlKTsKCQkJCSRyZXQgPSAkZGVmdGhlbWUtPnNldFBhcmFtZXRlcignc2lkZWJhckJsb2NrcycsICRuZXd2YWx1ZSk7CgkJCSAgICB9CgkJCX0KCQkgICAgfQoJCX0KCQlicmVhazsKCSAgICBjYXNlIDI6IC8qIExlZ2VuZCBvbiB0aGUgdG9wICAgLT4gY29udGludWUgKi8KCSAgICBjYXNlIDM6IC8qIExlZ2VuZCBvbiB0aGUgYm90dG9tIC0+IGNvbnRpbnVlICovCgkgICAgY2FzZSA0OiAvKiBObyBMZWdlbmQgdG8gc2hvdyAtPiBjb250aW51ZSAqLwoJICAgIGNhc2UgMDogLyogTGVnZW5kIG9uIHRoZSByaWdodCwgcmVtb3ZlIHRoZSBtYXAuTGVnZW5kIGJsb2NrIGZyb20gdGhlIHNpZGViYXIgKi8KCQkvKiBHcmFiIHRoZSBEZWZhdWx0IHRoZW1lIHZhbHVlICh1c2VkIGZvciB0aGUgZ29vZ2xlIG1hcCkgKi8KCQlsaXN0ICgkcmV0LCAkdGhlbWVJZCkgPSAKCQkJR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ2NvcmUnLCAnZGVmYXVsdC50aGVtZScpOwoJCWlmICgkcmV0KSB7CgkJICAgIHJldHVybiBhcnJheSgkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwpOwoJCX0KCQkvKiBHcmFiIHRoZSBUaGVtZSBEZWZhdWx0IHNldHRpbmdzICovCgkJbGlzdCAoJHJldCwgJGRlZnRoZW1lKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkUGx1Z2luKCd0aGVtZScsICR0aGVtZUlkKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsKTsKCQl9CgkJJHNldHRpbmdzID0gJGRlZnRoZW1lLT5nZXRTZXR0aW5ncyhudWxsKTsKCQlsaXN0ICgkdGhlbWVtYWpvciwgJHRoZW1lbWlub3IpID0gJGRlZnRoZW1lLT5nZXRBcGlWZXJzaW9uKCk7CgkJLyogCgkgICAgICAgICAqIFRoaXMgYmxvY2sgbWFuaXB1bGF0aW9uIGxvZ2ljIG9ubHkgd29ya3MgZm9yIGVhcmxpZXIgYmxvY2sgZW5jb2RpbmcsIAoJICAgICAgICAgKiBzbyBza2lwIGl0IGZvciBsYXRlciBUaGVtZSBBUEkgdmVyc2lvbnMgdG8gYXZvaWQgY29ycnVwdGluZyB0aGUgCgkgICAgICAgICAqIGJsb2NrIGxpc3QuCgkgICAgICAgICAqLwoJCWlmICgkdGhlbWVtYWpvciA9PSAyICYmICR0aGVtZW1pbm9yIDw9IDMpIHsKCQkgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJzInLCAkc2V0dGluZ3MpKSB7CgkJCSRzZXR0aW5ncyA9ICRzZXR0aW5nc1syXTsKCQkJZm9yZWFjaCAoJHNldHRpbmdzIGFzICRrZXkgPT4gJHZhbHVlcykgewoJCQkgICAgaWYgKCRrZXkgPT0gJ3NpZGViYXJCbG9ja3MnKSB7CgkJCQlsaXN0ICgkcmV0LCAkdmFsdWUpID0gCgkJCQkJJGRlZnRoZW1lLT51bnBhY2tTZXR0aW5nKCdibG9jay1saXN0JywgJHZhbHVlcyk7CgkJCQkkdmFsdWUgPSBzdHJfcmVwbGFjZSgnW21hcC5MZWdlbmRdJywgJycsICR2YWx1ZSk7CgkJCQlsaXN0ICgkcmV0LCAkbmV3dmFsdWUpID0gCgkJCQkJJGRlZnRoZW1lLT5wYWNrU2V0dGluZygnYmxvY2stbGlzdCcsICR2YWx1ZSk7CgkJCQkkcmV0ID0gJGRlZnRoZW1lLT5zZXRQYXJhbWV0ZXIoJ3NpZGViYXJCbG9ja3MnLCAkbmV3dmFsdWUpOwoJCQkgICAgfQoJCQl9CgkJICAgIH0gZWxzZSBpZiAoaXNfYXJyYXkoJHNldHRpbmdzWzFdKSkgewoJCQlmb3JlYWNoICgkc2V0dGluZ3NbMV0gYXMgJG51bSA9PiAkYXJyYXl2YWx1ZSkgewoJCQkgICAgaWYgKCRhcnJheXZhbHVlWydrZXknXSA9PSAic2lkZWJhckJsb2NrcyIpIHsKCQkJCWxpc3QgKCRzdWNjZXNzLCAkdmFsdWUpID0gJGRlZnRoZW1lLT51bnBhY2tTZXR0aW5nKCdibG9jay1saXN0JywgCgkJCQkJJHNldHRpbmdzWzFdWyRudW1dWyd2YWx1ZSddKTsKCQkJCSR2YWx1ZSA9IHN0cl9yZXBsYWNlKCdbbWFwLkxlZ2VuZF0nLCAnJywgJHZhbHVlKTsKCQkJCWxpc3QgKCRyZXQsICRuZXd2YWx1ZSkgPSAKCQkJCQkkZGVmdGhlbWUtPnBhY2tTZXR0aW5nKCdibG9jay1saXN0JywgJHZhbHVlKTsKCQkJCSRyZXQgPSAkZGVmdGhlbWUtPnNldFBhcmFtZXRlcignc2lkZWJhckJsb2NrcycsICRuZXd2YWx1ZSk7CgkJCSAgICB9CgkJCX0KCQkgICAgfQoJCX0KCSAgICB9CgoJICAgIGZvcmVhY2ggKGFycmF5KCdBbGJ1bUxlZ2VuZHMnLAoJCQkgICAnUGhvdG9MZWdlbmRzJywKCQkJICAgJ0dyb3VwTGVnZW5kcycsCgkJCSAgICdMZWdlbmRQb3MnKSBhcyAkc2V0dGluZykgewoJCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAkc2V0dGluZywgJGZvcm1bJHNldHRpbmddKTsKCSAgICB9CgoJICAgIGZvcmVhY2ggKGFycmF5KCdBbGJ1bUxlZ2VuZCcsCgkJCSAgICdQaG90b0xlZ2VuZCcsCgkJCSAgICdHcm91cExlZ2VuZCcsCgkJCSAgICdFeHBhbmRBbGJ1bUxlZ2VuZCcsCgkJCSAgICdFeHBhbmRHcm91cExlZ2VuZCcsCgkJCSAgICdFeHBhbmRQaG90b0xlZ2VuZCcpIGFzICRzZXR0aW5nKSB7CgkJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICRzZXR0aW5nLAoJCQkoaXNzZXQoJGZvcm1bJHNldHRpbmddKSAmJiAkZm9ybVskc2V0dGluZ10pID8gMSA6IDApOwoJICAgIH0KCSAgICAkc3RhdHVzWydzYXZlZCddID0gMTsKCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwTGVnZW5kQWRtaW4nOwoJfQoKCXJldHVybiBhcnJheSAobnVsbCwgJHJlc3VsdHMpOwogICAgfQp9CgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBzdWJwYWNrYWdlIFVzZXJJbnRlcmZhY2UKICovCmNsYXNzIE1hcExlZ2VuZEFkbWluVmlldyBleHRlbmRzIEdhbGxlcnlWaWV3IHsKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Vmlldzo6bG9hZFRlbXBsYXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxvYWRUZW1wbGF0ZSgmJHRlbXBsYXRlLCAmJGZvcm0pIHsKCglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZXMvTWFwQWRtaW5WaWV3SW5pdC5pbmMnKTsKCSR0ZW1wbGF0ZS0+aGVhZCgnbW9kdWxlcy9tYXAvaW5jbHVkZXMvR29vZ2xlTWFwLmNzcycpOwoJJGZvcm1bJ2Zvcm1OYW1lJ10gPSAnTWFwTGVnZW5kQWRtaW4nOwoKICAgICAgICAvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIHVuZGVmaW5lZCBwbHVnaW4gcGFyYW1ldGVycyAqLwoJaWYoIWFycmF5X2tleV9leGlzdHMoJ0FsYnVtTGVnZW5kJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0FsYnVtTGVnZW5kJ10gPSBmYWxzZTsKCX0KCWlmKCFhcnJheV9rZXlfZXhpc3RzKCdQaG90b0xlZ2VuZCcsICRmb3JtKSkgewoJICAgICRmb3JtWydQaG90b0xlZ2VuZCddID0gZmFsc2U7Cgl9CglpZighYXJyYXlfa2V5X2V4aXN0cygnQWxidW1MZWdlbmRzJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0FsYnVtTGVnZW5kcyddID0gJyc7Cgl9CglpZighYXJyYXlfa2V5X2V4aXN0cygnR3JvdXBMZWdlbmQnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnR3JvdXBMZWdlbmQnXSA9IGZhbHNlOwoJfQoJaWYoIWFycmF5X2tleV9leGlzdHMoJ0dyb3VwTGVnZW5kcycsICRmb3JtKSkgewoJICAgICRmb3JtWydHcm91cExlZ2VuZHMnXSA9ICcnOwoJfQoJaWYoIWFycmF5X2tleV9leGlzdHMoJ1Bob3RvTGVnZW5kcycsICRmb3JtKSkgewoJICAgICRmb3JtWydQaG90b0xlZ2VuZHMnXSA9ICcnOwoJfQoJaWYoIWFycmF5X2tleV9leGlzdHMoJ0V4cGFuZEFsYnVtTGVnZW5kJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0V4cGFuZEFsYnVtTGVnZW5kJ10gPSB0cnVlOwoJfQoJaWYoIWFycmF5X2tleV9leGlzdHMoJ0V4cGFuZFBob3RvTGVnZW5kJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0V4cGFuZFBob3RvTGVnZW5kJ10gPSB0cnVlOwoJfQoJaWYoIWFycmF5X2tleV9leGlzdHMoJ0V4cGFuZEdyb3VwTGVnZW5kJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0V4cGFuZEdyb3VwTGVnZW5kJ10gPSB0cnVlOwoJfQoJaWYoIWFycmF5X2tleV9leGlzdHMoJ0xlZ2VuZFBvcycsICRmb3JtKSkgewoJICAgICRmb3JtWydMZWdlbmRQb3MnXSA9IDA7IC8qIHJpZ2h0IGJ5IGRlZmF1bHQgKi8KCX0KCgkvKiBFeHBsb2RlIHRoZSBsaXN0IG9mIGluZm9ybWF0aW9uIGluIHRoZSBsZWdlbmRzIGlmIGF2YWlsYWJsZSAqLwoJaWYgKCRmb3JtWydQaG90b0xlZ2VuZHMnXSA8PiAnJykgewoJICAgICRwaG90b2xlZ2VuZHMgPSBleHBsb2RlKCd8JywgJGZvcm1bJ1Bob3RvTGVnZW5kcyddKTsKCSAgICAkZm9ybVsnUGhvdG9MZWdlbmRzJ10gPSAkcGhvdG9sZWdlbmRzOwoJfQoJaWYgKCRmb3JtWydBbGJ1bUxlZ2VuZHMnXSA8PiAnJykgewoJICAgICRhbGJ1bWxlZ2VuZHMgPSBleHBsb2RlKCd8JywgJGZvcm1bJ0FsYnVtTGVnZW5kcyddKTsKCSAgICAkZm9ybVsnQWxidW1MZWdlbmRzJ10gPSAkYWxidW1sZWdlbmRzOwoJfQoJaWYgKCRmb3JtWydHcm91cExlZ2VuZHMnXSA8PiAnJykgewoJICAgICRncm91cGxlZ2VuZHMgPSBleHBsb2RlKCd8JywgJGZvcm1bJ0dyb3VwTGVnZW5kcyddKTsKCSAgICAkZm9ybVsnR3JvdXBMZWdlbmRzJ10gPSAkZ3JvdXBsZWdlbmRzOwoJfQoKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykgLiAnL2luY2x1ZGVzL01hcEFkbWluRWRpdHMuaW5jJyk7CgoJJGZvcm1bJ2FsbG1hcmtlcnMnXSA9IEdvb2dsZU1hcFV0aWxpdGllczo6QWxsTWFya2VycygpOwoKCWlmICgkdGVtcGxhdGUtPmhhc1ZhcmlhYmxlKCdTaXRlQWRtaW4nKSkgewoJICAgICRTaXRlQWRtaW4gPSYgJHRlbXBsYXRlLT5nZXRWYXJpYWJsZUJ5UmVmZXJlbmNlKCdTaXRlQWRtaW4nKTsKCSAgICAkU2l0ZUFkbWluWydlbmN0eXBlJ10gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7Cgl9IGVsc2UgewoJICAgICRTaXRlQWRtaW5bJ2VuY3R5cGUnXSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJzsKCSAgICAkdGVtcGxhdGUtPnNldFZhcmlhYmxlKCdTaXRlQWRtaW4nLCAkU2l0ZUFkbWluKTsKCX0KCgkkdGVtcGxhdGUtPnNldFZhcmlhYmxlKCdjb250cm9sbGVyJywgJ21hcC5NYXBMZWdlbmRBZG1pbicpOwoJcmV0dXJuIGFycmF5KG51bGwsIGFycmF5KCdib2R5JyA9PiAnbW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcExlZ2VuZEFkbWluLnRwbCcpKTsKICAgIH0KfQoKPz4=');
expand_3537250845($outputDir, 'MapMarkersAdmin.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBTdGV2ZW4gTi4gU2V2ZXJpbmdoYXVzIDxzbnNAc2V2ZXJpbmdoYXVzLm9yZz4KICogQHZlcnNpb24gJFJldmlzaW9uOiAxMjUzICQKICoKICogVGhpcyBpcyBzb21lIG9mIHRoZSB1Z2xpZXN0IGNvZGUgSSd2ZSBldmVyIHdyaXR0ZW4uIFBsZWFzZSBkbyBub3QKICoganVkZ2UgbWUgYnkgaXQuIDopCiAqLwoKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL21hcEhlbHBlci5jbGFzcycpOwpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvR29vZ2xlTWFwVXRpbGl0aWVzLmNsYXNzJyk7CgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBzdWJwYWNrYWdlIFVzZXJJbnRlcmZhY2UKICovCmNsYXNzIE1hcE1hcmtlcnNBZG1pbkNvbnRyb2xsZXIgZXh0ZW5kcyBHYWxsZXJ5Q29udHJvbGxlciB7CgogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlDb250cm9sbGVyOjpoYW5kbGVSZXF1ZXN0CiAgICAgKi8KICAgIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QoJGZvcm0pIHsKCglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pIC4gJy9pbmNsdWRlcy9NYXBBZG1pbkNvbnRyb2xsZXJJbml0LmluYycpOwoKCWdsb2JhbCAkZ2FsbGVyeTsKCSRwbGF0Zm9ybSA9ICRnYWxsZXJ5LT5nZXRQbGF0Zm9ybSgpOwoKCS8qIElmIHdlIHdhbnQgdG8gImFkZCIgYSBtYXJrZXIsIGNhbGwgdGhlIG1hcmtlciBjcmVhdGlvbiB0b29sICovCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydhZGQnXSkpIHsKCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJyc7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSAnJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ21hcC5NYXBNYXJrZXJzQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydtb2RlJ10gPSAnVG9vbCc7Cgl9CgoJLyogU2F2ZSB0aGUgTWFya2VycyBzZXR0aW5ncyAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnc2F2ZSddKSkgewoJICAgIC8qIENoZWNrIGZvciBlcnJvcnMgKi8KCSAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJ3VzZU1hcmtlclNldCcsICRmb3JtKQoJCSAgICB8fCAhYXJyYXlfa2V5X2V4aXN0cygndXNlQWxidW1NYXJrZXJTZXQnLCAkZm9ybSkpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtub21hcmtlcnNdJzsKCSAgICB9IGVsc2UgaWYgKCFpc19udW1lcmljKCRmb3JtWydyZWdyb3VwRGlzdCddKQoJCSAgICB8fCBpbnR2YWwoJGZvcm1bJ3JlZ3JvdXBEaXN0J10pICE9ICRmb3JtWydyZWdyb3VwRGlzdCddCgkJICAgIHx8ICRmb3JtWydyZWdyb3VwRGlzdCddIDw9IDApIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtyZWdyb3VwRGlzdF0nOwoJICAgIH0gZWxzZSBpZiAoIWFycmF5X2tleV9leGlzdHMoJ3JlZ3JvdXBJY29uJywgJF9QT1NUKQoJCSAgICBhbmQgYXJyYXlfa2V5X2V4aXN0cygncmVncm91cEl0ZW1zJywgJGZvcm0pIGFuZCAkZm9ybVsncmVncm91cEl0ZW1zJ10pIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVttYXJrZXJdJzsKCSAgICB9IGVsc2UgewoJCWlmICghYXJyYXlfa2V5X2V4aXN0cygncmVncm91cERpc3QnLCAkZm9ybSkpIHsKCQkgICAgJGZvcm1bJ3JlZ3JvdXBEaXN0J10gPSAnMTUnOwoJCX0KCgkJLyogbWFrZSBzdXJlIHRoZSAnQ29sb3InIEN1c3RvbUZpZWxkIGlzIGlubGluZSB3aXRoIHRoZSBtYXJrZXIgc2V0IHNlbGVjdGVkICovCgkJbGlzdCAoJHJldCwgJHBhcmFtKSA9IG1hcEhlbHBlcjo6bG9hZFBhcmFtZXRlcnMoMCwgZmFsc2UpOwoJCSRuZXdwYXJhbVsnY29tbW9uJ10gPSAkcGFyYW1bJ2NvbW1vbiddOwoKCQlpZiAoaXNzZXQoJGZvcm1bJ3VzZU1hcmtlclNldCddKSkgewoJCSAgICAkaGFuZGxlID0gZm9wZW4oJGJhc2VnYWxsZXJ5ZGlyIC4gJ21hcC9pbWFnZXMvbWFya2Vycy8nCgkJICAgIAkJICAgIC4gJGZvcm1bJ3VzZU1hcmtlclNldCddIC4gJy9jb2xvcmxpc3QnLCAncicpOwoJCSAgICAkbGlzdCA9IGV4cGxvZGUoJyonLCBmcmVhZCgkaGFuZGxlLAoJCQkgICAgZmlsZXNpemUoJGJhc2VnYWxsZXJ5ZGlyIC4gJ21hcC9pbWFnZXMvbWFya2Vycy8nCgkJCQkgICAgIC4gJGZvcm1bJ3VzZU1hcmtlclNldCddIC4gJy9jb2xvcmxpc3QnKSAtIDEpKTsKCQkgICAgZmNsb3NlKCRoYW5kbGUpOwoKCQkgICAgJG5ld3BhcmFtWydwaG90byddID0gYXJyYXkoKTsKCQkJJG5ld3BhcmFtWydwaG90byddW10gPQoJCQkJYXJyYXkoJ2ZpZWxkJyA9PiAnQ29sb3InLAoJCQkJICAgICAgJ3N1bW1hcnknID0+ICcnLAoJCQkJICAgICAgJ2RldGFpbCcgPT4gMSwKCQkJCSAgICAgICdjaG9pY2VzJyA9PiAkbGlzdCk7CgkJfQoKCQlpZiAoaXNzZXQoJGZvcm1bJ3VzZUFsYnVtTWFya2VyU2V0J10pKSB7CgkJICAgICRoYW5kbGUgPSBmb3BlbigkYmFzZWdhbGxlcnlkaXIgLiAnbWFwL2ltYWdlcy9tYXJrZXJzLycKCQkgICAgCQkgICAgLiAkZm9ybVsndXNlQWxidW1NYXJrZXJTZXQnXSAuICcvY29sb3JsaXN0JywgJ3InKTsKCQkgICAgJGxpc3QgPSBleHBsb2RlKCcqJywgZnJlYWQoJGhhbmRsZSwKCQkJICAgIGZpbGVzaXplKCRiYXNlZ2FsbGVyeWRpciAuICdtYXAvaW1hZ2VzL21hcmtlcnMvJwoJCQkJICAgICAuICRmb3JtWyd1c2VBbGJ1bU1hcmtlclNldCddIC4gJy9jb2xvcmxpc3QnKSAtIDEpKTsKCQkgICAgZmNsb3NlKCRoYW5kbGUpOwogICAgICAgICAgICAgICAgICAgIAoJCSAgICAkbmV3cGFyYW1bJ2FsYnVtJ10gPSBhcnJheSgpOwoJCQkkbmV3cGFyYW1bJ2FsYnVtJ11bXSA9CgkJCQlhcnJheSgnZmllbGQnID0+ICdDb2xvcicsCgkJCQkgICAgICAnc3VtbWFyeScgPT4gJycsCgkJCQkgICAgICAnZGV0YWlsJyA9PiAxLAoJCQkJICAgICAgJ2Nob2ljZXMnID0+ICRsaXN0KTsKCgkJfQoKCQkkcmV0ID0gbWFwSGVscGVyOjpzYXZlUGFyYW1ldGVycygkbmV3cGFyYW0sIDApOwoKCQlpZiAoIWlzc2V0KCRmb3JtWydkZWZhdWx0cGhvdG9jb2xvciddKSkgewoJCSAgICAkZm9ybVsnZGVmYXVsdHBob3RvY29sb3InXSA9ICcnOwoJCX0KCQlpZiAoIWlzc2V0KCRmb3JtWydkZWZhdWx0YWxidW1jb2xvciddKSkgewoJCSAgICAkZm9ybVsnZGVmYXVsdGFsYnVtY29sb3InXSA9ICcnOwoJCX0KCQlpZiAoIWlzc2V0KCRmb3JtWydkZWZhdWx0Z3JvdXBjb2xvciddKSkgewoJCSAgICAkZm9ybVsnZGVmYXVsdGdyb3VwY29sb3InXSA9ICcnOwoJCX0KCQlpZiAoIWlzc2V0KCRfUE9TVFsncmVncm91cEljb24nXSkpIHsKCQkgICAgJGZvcm1bJ3JlZ3JvdXBJY29uJ10gPSAnJzsKCQl9CgkJZWxzZSB7CgkJICAgICRmb3JtWydyZWdyb3VwSWNvbiddID0gJF9QT1NUWydyZWdyb3VwSWNvbiddOwoJCX0KCgkJLyogU2F2ZSBwYXJhbWV0ZXJzIGlmIHRoZXJlIGhhdmUgYmVlbiBubyBlcnJvcnMgKi8KCQlmb3JlYWNoIChhcnJheSgndXNlTWFya2VyU2V0JywKCQkJICAgICAgICd1c2VBbGJ1bU1hcmtlclNldCcsCgkJCSAgICAgICAndXNlR3JvdXBNYXJrZXJTZXQnLAoJCQkgICAgICAgJ2RlZmF1bHRwaG90b2NvbG9yJywKCQkJICAgICAgICdkZWZhdWx0Z3JvdXBjb2xvcicsCgkJCSAgICAgICAnZGVmYXVsdGFsYnVtY29sb3InLAoJCQkgICAgICAgJ3JlZ3JvdXBEaXN0JywKCQkJICAgICAgICdyZWdyb3VwSWNvbicpIGFzICRzZXR0aW5nKSB7CgkJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAkc2V0dGluZywgJGZvcm1bJHNldHRpbmddKTsKCQl9CgoJCWZvcmVhY2ggKGFycmF5KCd1c2VQYXJlbnRDb2xvcicsICdyZWdyb3VwQWxidW1zJywgJ3JlZ3JvdXBJdGVtcycpIGFzICRzZXR0aW5nKSB7CgkJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAkc2V0dGluZywKCQkJICAgIChpc3NldCgkZm9ybVskc2V0dGluZ10pICYmICRmb3JtWyRzZXR0aW5nXSkgPyAxIDogMCk7CgkJfQoKCQkkc3RhdHVzWydzYXZlZCddID0gMTsKCgkgICAgfQoKICAgICAgICAgICAgLyogRmlndXJlIG91dCB0aGUgbWV0aG9kIHdlIHdpbGwgdXNlICovCgkgICAgJG1ldGhvZCA9IGVtcHR5KCRlcnJvcikgPyAncmVkaXJlY3QnIDogJ2RlbGVnYXRlJzsKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWydzdWJWaWV3J10gPSAnbWFwLk1hcE1hcmtlcnNBZG1pbic7CgoJfQoKCS8qIEdlbmVyYXRlIHRoZSBtYXJrZXJzIGFjY29yZGluZyB0byBzcGVjcyAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnZ2VuZXJhdGUnXSkpIHsKCSAgICAvKiBDaGVjayBmb3IgZXJyb3JzICovCgkgICAgCgkgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdiYXNlJywgJGZvcm0pKSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bYmFzZV0nOwoJICAgIH0gZWxzZSBpZiAoJGZvcm1bJ3NldG5hbWUnXSA9PSAnJykgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW3NldG5hbWVdJzsKCSAgICB9IGVsc2UgaWYgKCRmb3JtWydzZXRuYW1lJ10gPT0gJ211bHRpJykgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW211bHRpbmFtZV0nOwoJICAgIH0gZWxzZSB7IC8qIE5vIGVycm9ycyBkZXRlY3RlZCAqLwoJCSRiYXNlbWFya2VybmFtZSA9ICRmb3JtWydiYXNlJ107CgkJJHNldG5hbWUgPSAkZm9ybVsnc2V0bmFtZSddOwoKCQkvKiBjcmVhdGUgdGhlIG1hcmtlciBkaXIgKi8KCQlpZiAoIWZpbGVfZXhpc3RzKCRiYXNlZ2FsbGVyeWRpciAuICdtYXAvaW1hZ2VzL21hcmtlcnMvJyAuICRzZXRuYW1lKSl7CgkJCWxpc3QgKCRyZXQsICRkaXJzKSA9IEdhbGxlcnlVdGlsaXRpZXM6Omd1YXJhbnRlZURpckV4aXN0cygkYmFzZWdhbGxlcnlkaXIgLiAnbWFwL2ltYWdlcy9tYXJrZXJzLycgLiAkc2V0bmFtZSk7CgkJCWlmICgkcmV0KXsKCQkJICAgICRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW2NyZWF0ZWRpcl0nOwoJCQl9CgkJfQoKCQkkcmVzaXplID0gJyc7CgkJJGJhc2VwbmdkaXIgPSAkYmFzZSAuICdtb2R1bGVzL21hcC9pbWFnZXMvYmFzZW1hcmtlcnMvJzsKCgkJLyogRmlndXJlIG91dCBpZiBhIHJlc2l6ZSBpcyBuZWVkZWQgYW5kIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgY29tbWFuZCAqLwoJCWlmICgkZm9ybVsnc2l6ZSddWzBdICE9ICdzYW1lJykgewoJCSAgICBpZiAoJGZvcm1bJ3NpemUnXVswXSA9PSAnY3VzdG9tJykgewoJCQkkcmVzaXplID0gJGZvcm1bJ0ltYWdlSGVpZ2h0J10gLiAneCcgLiAkZm9ybVsnSW1hZ2VXaWR0aCddOwoJCSAgICB9IGVsc2UgewoJCQkkY3VycmVudHNpemUgPSBnZXRpbWFnZXNpemUoJGJhc2VnYWxsZXJ5ZGlyIC4gJ21hcC9pbWFnZXMvYmFzZW1hcmtlcnMvJwoJCQkJCQkgICAgLiAkYmFzZW1hcmtlcm5hbWUgLiAnLnBuZycpOwoJCQkkaGVpZ2h0NTAgPSAkY3VycmVudHNpemVbMV0gLyAyOwoJCQkkd2lkdGg1MCA9ICRjdXJyZW50c2l6ZVswXSAvIDI7CgkJCSRoZWlnaHQyMDAgPSAkY3VycmVudHNpemVbMV0gKiAyOwoJCQkkd2lkdGgyMDAgPSAkY3VycmVudHNpemVbMF0gKiAyOwoJCQlpZiAoJGZvcm1bJ3NpemUnXVswXSA9PSAnNTAnKSB7CgkJCSAgICAkcmVzaXplID0gJHdpZHRoNTAgLiAneCcgLiAkaGVpZ2h0NTA7CgkJCX0KCQkJaWYgKCRmb3JtWydzaXplJ11bMF0gPT0gJzIwMCcpIHsKCQkJICAgICRyZXNpemUgPSAkd2lkdGgyMDAgLiAneCcgLiAkaGVpZ2h0MjAwOwoJCQl9CgkJICAgIH0KCQl9CgoJCS8qIENoZWNrIGZvciB0aGUgY29sb3JzIHNlbGVjdGVkIGFuZCBpbnB1dCB0aGVtIHRvIGFuIGFycmF5ICovCgkJJGNvbG9ycyA9IGFycmF5KCdPUkFOR0UnID0+ICc5NSwxMjcsMTI3JywKCQkJCSdQVVJQTEUnID0+ICc5NSwxMjcsMjU1JywKCQkJCSdZRUxMT1cnID0+ICcxMDUsMTAwLDE0MCcsCgkJCQknR1JFRU4nID0+ICc5NSwxMjcsMTU5JywKCQkJCSdCTFVFJyA9PiAnOTUsOTUsMzEnLAoJCQkJJ1JFRCcgPT4gJzk1LDI1NSw5NScsCgkJCQknQVFVQScgPT4gJzk1LDEyMCwyMDEnLAoJCQkJJ1dISVRFJyA9PiAnOTUsMCwwJywKCQkJCSdHUkFZJyA9PiAnNDcsMCwwJywKCQkJCSdCTEFDSycgPT4gJzAsMCwwJyk7CgoJCWlmICgkZm9ybVsnY29sb3JzJ10gPD4gJ2FsbCcpIHsKCQkgICAgJGNvbG9ycyA9IGFycmF5KCk7CgkJICAgIGlmIChpc3NldCgkX1BPU1RbJ2JsdWUnXSkpIHsKCQkJJGNvbG9ycyA9ICRjb2xvcnMgKyBhcnJheSAoJ0JMVUUnID0+ICc5NSw5NSwzMScsKTsKCQkgICAgfQoJCSAgICBpZiAoaXNzZXQoJF9QT1NUWydyZWQnXSkpIHsKCQkJJGNvbG9ycyA9ICRjb2xvcnMgKyBhcnJheSAoJ1JFRCcgPT4gJzk1LDI1NSw5NScsKTsKCQkgICAgfQoJCSAgICBpZiAoaXNzZXQoJF9QT1NUWyd5ZWxsb3cnXSkpIHsKCQkJJGNvbG9ycyA9ICRjb2xvcnMgKyBhcnJheSAoJ1lFTExPVycgPT4gJzk1LDEwMCwxNDAnLCk7CgkJICAgIH0KCQkgICAgaWYgKGlzc2V0KCRfUE9TVFsnZ3JlZW4nXSkpIHsKCQkJJGNvbG9ycyA9ICRjb2xvcnMgKyBhcnJheSAoJ0dSRUVOJyA9PiAnOTUsMTI3LDE1OScsKTsKCQkgICAgfQoJCSAgICBpZiAoaXNzZXQoJF9QT1NUWydvcmFuZ2UnXSkpIHsKCQkJJGNvbG9ycyA9ICRjb2xvcnMgKyBhcnJheSAoJ09SQU5HRScgPT4gJzk1LDEyNywxMjcnLCk7CgkJICAgIH0KCQkgICAgaWYgKGlzc2V0KCRfUE9TVFsnYXF1YSddKSkgewoJCQkkY29sb3JzID0gJGNvbG9ycyArIGFycmF5ICgnQVFVQScgPT4gJzk1LDI1NSwxOTEnLCk7CgkJICAgIH0KCQkgICAgaWYgKGlzc2V0KCRfUE9TVFsncHVycGxlJ10pKSB7CgkJCSRjb2xvcnMgPSAkY29sb3JzICsgYXJyYXkgKCdQVVJQTEUnID0+ICc5NSwxMjcsMjU1JywpOwoJCSAgICB9CgkJICAgIGlmIChpc3NldCgkX1BPU1RbJ3doaXRlJ10pKSB7CgkJCSRjb2xvcnMgPSAkY29sb3JzICsgYXJyYXkgKCdXSElURScgPT4gJzk1LDAsMCcsKTsKCQkgICAgfQoJCSAgICBpZiAoaXNzZXQoJF9QT1NUWydibGFjayddKSkgewoJCQkkY29sb3JzID0gJGNvbG9ycyArIGFycmF5ICgnQkxBQ0snID0+ICcwLDAsMCcsKTsKCQkgICAgfQoJCSAgICBpZiAoaXNzZXQoJF9QT1NUWydncmV5J10pKSB7CgkJCSRjb2xvcnMgPSAkY29sb3JzICsgYXJyYXkgKCdHUkFZJyA9PiAnNDcsMCwwJywpOwoJCSAgICB9CgkJfQoKCQkvKiBQdXQgdGhlIGNvbG9ybGlzdCBpbiBhIGZpbGUgZm9yIGxhdGVyIHJldHJpZXZhbCAqLwoJCSRjb2xvcmxpc3QgPSBhcnJheSgpOwoJCSRoYW5kbGUgPSBmb3BlbigkYmFzZWdhbGxlcnlkaXIgLiAnbWFwL2ltYWdlcy9tYXJrZXJzLycgLiAkc2V0bmFtZSAuICcvY29sb3JsaXN0JywgJ3cnKTsKCQlmb3JlYWNoICgkY29sb3JzIGFzICRuYW1lID0+ICR2YWx1ZSkgewoJCSAgICAkY29sb3JsaXN0W10gPSAkbmFtZTsKCQkgICAgZndyaXRlKCRoYW5kbGUsICRuYW1lIC4gJyonKTsKCQl9CgkJZmNsb3NlKCRoYW5kbGUpOwoKCQkkc3RhdHVzZXhlYyA9IDA7CgoJICAgIGxpc3QgKCRyZXQsICRtYWdpY3BhdGgpID0gCgkJICAgIEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdpbWFnZW1hZ2ljaycsICdwYXRoJyk7CgkgICAgaWYgKCRyZXQpIHsKCQkJcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCSAgICB9CgoJCS8qIEZvciBlYWNoIGNvbG9yLCBjcmVhdGVzIGEgbWFya2VyIHVzaW5nIENvbnZlcnQgZnJvbSB0aGUgaW1hZ2VtYWdpY2sgdG9vbGtpdCAqLwoJCWZvcmVhY2ggKCRjb2xvcnMgYXMgJGNvbG9yID0+ICRtb2R1bGF0ZSkgewoJCSAgICAvKiBidWlsZCB0aGUgYXJyYXkgb2YgY29tbWFuZCBhbmQgYXJndW1lbnRzIGZvciAkcGxhdGZvcm0tPmV4ZWMoKSAqLwoJCSAgICAkY29tbWFuZCA9IGFycmF5KCRtYWdpY3BhdGggLiAnY29udmVydCcpOwoJCSAgICAkY29tbWFuZFtdID0gJy1tb2R1bGF0ZSc7CgkJICAgICRjb21tYW5kW10gPSAkbW9kdWxhdGU7CgkJICAgIGlmKCFlbXB0eSgkcmVzaXplKSkgewoJCSAgICAJJGNvbW1hbmRbXSA9ICctcmVzaXplJzsKCQkgICAgCSRjb21tYW5kW10gPSAkcmVzaXplOwoJCSAgICB9CgkJICAgICRjb21tYW5kW10gPSAkYmFzZWdhbGxlcnlkaXIgLiAnbWFwL2ltYWdlcy9iYXNlbWFya2Vycy8nIC4gJGJhc2VtYXJrZXJuYW1lCgkJCSAgICAuICcucG5nJzsgCgkJICAgICRjb21tYW5kW10gPSAkYmFzZWdhbGxlcnlkaXIgLiAnbWFwL2ltYWdlcy9tYXJrZXJzLycgLiAkc2V0bmFtZQoJCQkJLiAnL21hcmtlcl8nIC4gJGNvbG9yIC4gJy5wbmcnOwoJCSAgICAkcmV0dXJuc3R1ZmYgPSAkcGxhdGZvcm0tPmV4ZWMoYXJyYXkoJGNvbW1hbmQpKTsKCQkgICAgLyoKCQkgICAgICogaWYgdGhlIG1hcmtlciBjcmVhdGVkIGRvZXMgbm90IGV4aXN0LCB0aGVuIHNvbWV0aGluZyB3ZW50IHdyb25nLAoJCSAgICAgKiBicmVhayBvdXQgYW5kIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZQoJCSAgICAgKi8KCQkgICAgaWYgKCEkcGxhdGZvcm0tPmZpbGVfZXhpc3RzKCRiYXNlZ2FsbGVyeWRpciAuICdtYXAvaW1hZ2VzL21hcmtlcnMvJyAuICRzZXRuYW1lCgkJICAgIAkJICAgICAuICcvbWFya2VyXycgLiAkY29sb3IgLiAnLnBuZycpKSB7CgkJCSRzdGF0dXNleGVjID0gMTsKCQkJJGVycm9yW10gPSAnZm9ybVtjcmVhdGVpY29uc11bJy4kcmV0dXJuc3R1ZmZbMl1bMF0uJ10nOwoJCQlicmVhazsKCQkgICAgfQoJCX0KCQlpZiAoZW1wdHkoJGVycm9yKSkgeyRzdGF0dXNbJ2dlbmVyYXRlZCddID0gMTt9CgkgICAgfQoKICAgICAgICAgICAgLyogUmVkaXJlY3QgdG8gdGhlIEFkbWluUGFuZWwgb25jZSBkb25lIDpEICovCgkgICAgJG1ldGhvZCA9IGVtcHR5KCRlcnJvcikgPyAncmVkaXJlY3QnIDogJ2RlbGVnYXRlJzsKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWydzdWJWaWV3J10gPSAnbWFwLk1hcE1hcmtlcnNBZG1pbic7CgkgICAgJHJlc3VsdHNbJG1ldGhvZF1bJ21vZGUnXSA9IGVtcHR5KCRlcnJvcikgPyAnJyA6ICdUb29sJzsKCgl9CgogICAgICAgIC8qICBEZWxldGluZyBhIG1hcmtlclNldCAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnZGVsZXRlJ10pKSB7CgoJICAgICRzdGF0dXNbJ2RlbGV0ZWQnXSA9IDA7CgoJICAgICRkaXIgPSAkYmFzZWdhbGxlcnlkaXIgLiAnbWFwL2ltYWdlcy9tYXJrZXJzLycgLiAkZm9ybVsnZGVsZXRlTWFya2VyU2V0J107CgoJICAgIC8qIERlbGV0ZSBhbGwgZmlsZSBpbiB0aGUgZm9sZGVyIGFuZCB0aGVuIGRlbGV0ZSB0aGUgZm9sZGVyICovCgkgICAgJHN0YXR1c1snZGVsZXRlZCddID0gJHBsYXRmb3JtLT5yZWN1cnNpdmVSbWRpcigkZGlyKTsKCgkgICAgLyogcmV0dXJuIHN0YXR1cyBhbmQgZGlzcGxheSB0aGUgTGVnZW5kIEFkbWluIFBhbmVsIGFnYWluICovCgkgICAgJG1ldGhvZCA9IGVtcHR5KCRlcnJvcikgPyAncmVkaXJlY3QnIDogJ2RlbGVnYXRlJzsKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWydzdWJWaWV3J10gPSAnbWFwLk1hcE1hcmtlcnNBZG1pbic7CgoJfQoKCS8qIFVwbG9hZCBhIG5ldyBiYXNlbWFya2VyIGFuZCB0aGVuIHJldHVybiB0byB0aGUgdG9vbCBwYWdlICovCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWyd1cGxvYWQnXSkpIHsKCSAgICAvKiBjaGVja2luZyBmb3IgZXJyb3IgKi8KCSAgICBpZiAoJGZvcm1bJ25hbWUnXVsxXSA9PSAnJykgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW25vZmlsZXNlbGVjdGVkXSc7CgkgICAgfSBlbHNlIGlmICgkZm9ybVsndHlwZSddWzFdIDw+ICdpbWFnZS9wbmcnIGFuZCAkZm9ybVsndHlwZSddWzFdIDw+ICdpbWFnZS94LXBuZycpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtiYWRmaWxlc2VsZWN0ZWRdJzsKCSAgICB9IGVsc2UgaWYgKCRmb3JtWyd0bXBfbmFtZSddWzFdID09ICcnKSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bbm90dXBsb2FkZWRdJzsKCSAgICB9IGVsc2UgaWYgKCFtb3ZlX3VwbG9hZGVkX2ZpbGUoJGZvcm1bJ3RtcF9uYW1lJ11bMV0sICRiYXNlZ2FsbGVyeWRpcgoJICAgIAkJCQkgICAuICdtYXAvaW1hZ2VzL2Jhc2VtYXJrZXJzLycgLiAkZm9ybVsnbmFtZSddWzFdKSkgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW3JpZ2h0c2Vycm9yXSc7CgkgICAgfSBlbHNlIHsKCQkkc3RhdHVzWyd1cGxvYWRlZCddID0gMTsKCSAgICB9CgkgICAgJG1ldGhvZCA9IGVtcHR5KCRlcnJvcikgPyAncmVkaXJlY3QnIDogJ2RlbGVnYXRlJzsKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWydzdWJWaWV3J10gPSAnbWFwLk1hcE1hcmtlcnNBZG1pbic7CgkgICAgJHJlc3VsdHNbJG1ldGhvZF1bJ21vZGUnXSA9ICdUb29sJzsKCgl9CgoJLyogQ2FuY2VsIGhpdCwgcmV0dXJuIHRvIHRoZSBkZWZhdWx0IGFkbWlucGFnZSAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnY2FuY2VsJ10pKSB7CgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwTWFya2Vyc0FkbWluJzsKCgl9CgoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsndmlld2FsbCddKSkgewoJICAgICRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcE1hcmtlcnNBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ21vZGUnXSA9ICdWaWV3TWFya2Vycyc7CgoJfQoKCS8qIFVwbG9hZCBhIG5ldyBpY29uIGFuZCB0aGVuIHJldHVybiB0byB0aGUgcmVncm91cCBwYWdlICovCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWyd1cGxvYWRpY29uJ10pKSB7CgkgICAgLyogY2hlY2tpbmcgZm9yIGVycm9yICovCgkgICAgaWYgKCRmb3JtWyduYW1lJ11bMl0gPT0gJycpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtub2ZpbGVzZWxlY3RlZF0nOwoJICAgIH0gZWxzZSBpZiAoJGZvcm1bJ3R5cGUnXVsyXSA8PiAnaW1hZ2UvcG5nJyBhbmQgJGZvcm1bJ3R5cGUnXVsyXSA8PiAnaW1hZ2UveC1wbmcnKSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bYmFkZmlsZXNlbGVjdGVkXSc7CgkgICAgfSBlbHNlIGlmICgkZm9ybVsndG1wX25hbWUnXVsyXSA9PSAnJykgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW25vdHVwbG9hZGVkXSc7CgkgICAgfSBlbHNlIGlmICghbW92ZV91cGxvYWRlZF9maWxlKCRmb3JtWyd0bXBfbmFtZSddWzJdLAoJCSAgICAkYmFzZWdhbGxlcnlkaXIgLiAnbWFwL2ltYWdlcy9tdWx0aS8nIC4gJGZvcm1bJ25hbWUnXVsyXSkpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtyaWdodHNlcnJvcl0nOwoJICAgIH0gZWxzZSB7CgkJJHN0YXR1c1sndXBsb2FkZWQnXSA9IDE7CgkgICAgfQoJICAgICRtZXRob2QgPSBlbXB0eSgkZXJyb3IpID8gJ3JlZGlyZWN0JyA6ICdkZWxlZ2F0ZSc7CgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9ICRlcnJvcjsKCSAgICAkcmVzdWx0c1skbWV0aG9kXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCSAgICAkcmVzdWx0c1skbWV0aG9kXVsnc3ViVmlldyddID0gJ21hcC5NYXBNYXJrZXJzQWRtaW4nOwoKCX0KCglyZXR1cm4gYXJyYXkgKG51bGwsICRyZXN1bHRzKTsKICAgIH0KfQoKLyoqCiAqIEBwYWNrYWdlIG1hcAogKiBAc3VicGFja2FnZSBVc2VySW50ZXJmYWNlCiAqLwpjbGFzcyBNYXBNYXJrZXJzQWRtaW5WaWV3IGV4dGVuZHMgR2FsbGVyeVZpZXcgewogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlWaWV3Ojpsb2FkVGVtcGxhdGUKICAgICAqLwogICAgZnVuY3Rpb24gbG9hZFRlbXBsYXRlKCYkdGVtcGxhdGUsICYkZm9ybSkgewoKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykgLiAnL2luY2x1ZGVzL01hcEFkbWluVmlld0luaXQuaW5jJyk7CgkkZm9ybVsnZm9ybU5hbWUnXSA9ICdNYXBNYXJrZXJzQWRtaW4nOwoJJHRlbXBsYXRlLT5oZWFkKCdtb2R1bGVzL21hcC9pbmNsdWRlcy9Hb29nbGVNYXAuY3NzJyk7CgkkdGVtcGxhdGUtPmphdmFzY3JpcHQoJ21vZHVsZXMvbWFwL0dvb2dsZU1hcC5qcycpOwoKCSRiYXNlcG5nZGlyID0gJGJhc2VnYWxsZXJ5ZGlyIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy9iYXNlbWFya2Vycy8nOwoJJHBuZ2RpciA9ICRiYXNlIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy9iYXNlbWFya2Vycy8nOwoKCS8qIHZlcmlmeSB0aGF0IHRoZSBtb2R1bGUgaW5zdGFsbCB3YXMgZG9uZSByaWdodCwgbWF5YmUgc29tZSBtaXNzaW5nIGZpbGVzID8gKi8KCWlmICghaXNfZGlyKCRiYXNlcG5nZGlyKSkgewoJICAgICRmb3JtWydub2Jhc2UnXSA9ICdicm9rZW5kaXInOwoJfSBlbHNlIHsKCSAgICAkZm9ybVsnYmFzZW1hcmtlcnMnXSA9IEdvb2dsZU1hcFV0aWxpdGllczo6VGFibGVGcm9tRmlsZXMoJGJhc2VnYWxsZXJ5ZGlyLCAkYmFzZSwKCQkgICAgJ21vZHVsZXMvbWFwL2ltYWdlcy9iYXNlbWFya2Vycy8nKTsKCX0KCgkkZm9ybVsnbXVsdGltYXJrZXJzJ10gPSBHb29nbGVNYXBVdGlsaXRpZXM6OlRhYmxlRnJvbUZpbGVzKCRiYXNlZ2FsbGVyeWRpciwgJGJhc2UsCgkJJ21vZHVsZXMvbWFwL2ltYWdlcy9tdWx0aS8nKTsKCgkkbXlkaXIgPSBkaXIoJGJhc2VnYWxsZXJ5ZGlyIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzLycpOwoJd2hpbGUgKCgkZmlsZSA9ICRteWRpci0+cmVhZCgpKSAhPT0gZmFsc2UpIHsKCSAgICBpZiAoKGlzX2RpcigkYmFzZWdhbGxlcnlkaXIgLiAnbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvJyAuICRmaWxlKSkKCQkgICAgYW5kIChzdWJzdHIoJGZpbGUsIC0xKSA8PiAnLicpIGFuZCAoJGZpbGUgIT0gJ0NWUycpKSB7CgkJJGZvcm1bJ21hcmtlcnMnXVtdID0gJGZpbGU7CgkgICAgfQoJfQoJaWYgKGFycmF5X2tleV9leGlzdHMoJ21hcmtlcnMnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnbWFya2VybGlzdCddID0gJyInIC4gaW1wbG9kZSgnIiwiJywgJGZvcm1bJ21hcmtlcnMnXSkgLiAnIic7Cgl9CgoKCS8qIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgdW5kZWZpbmVkIHBsdWdpbiBwYXJhbWV0ZXJzICovCglpZiAoIWFycmF5X2tleV9leGlzdHMoJ3JlZ3JvdXBBbGJ1bXMnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsncmVncm91cEFsYnVtcyddID0gZmFsc2U7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ3JlZ3JvdXBJdGVtcycsICRmb3JtKSkgewoJICAgICRmb3JtWydyZWdyb3VwSXRlbXMnXSA9IGZhbHNlOwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdyZWdyb3VwRGlzdCcsICRmb3JtKSkgewoJICAgICRmb3JtWydyZWdyb3VwRGlzdCddID0gMTU7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ3JlZ3JvdXBJY29uJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ3JlZ3JvdXBJY29uJ10gPSAnem9vbS1pbi10cmFucyc7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ211bHRpcm93cycsICRmb3JtKSkgewoJICAgICRmb3JtWydtdWx0aXJvd3MnXSA9IGFycmF5KCk7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ3VzZU1hcmtlclNldCcsICRmb3JtKSkgewoJICAgICRmb3JtWyd1c2VNYXJrZXJTZXQnXSA9ICdzbWFsbHB1c2hwaW5zJzsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygndXNlQWxidW1NYXJrZXJTZXQnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsndXNlQWxidW1NYXJrZXJTZXQnXSA9ICdzbWFsbHB1c2hwaW5zJzsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygndXNlR3JvdXBNYXJrZXJTZXQnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsndXNlR3JvdXBNYXJrZXJTZXQnXSA9ICdzbWFsbHB1c2hwaW5zJzsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnZGVmYXVsdGFsYnVtY29sb3InLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnZGVmYXVsdGFsYnVtY29sb3InXSA9ICdZRUxMT1cnOwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdkZWZhdWx0Z3JvdXBjb2xvcicsICRmb3JtKSkgewoJICAgICRmb3JtWydkZWZhdWx0Z3JvdXBjb2xvciddID0gJ1JFRCc7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ2RlZmF1bHRwaG90b2NvbG9yJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ2RlZmF1bHRwaG90b2NvbG9yJ10gPSAnR1JFRU4nOwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCd1c2VQYXJlbnRDb2xvcicsICRmb3JtKSkgewoJICAgICRmb3JtWyd1c2VQYXJlbnRDb2xvciddID0gZmFsc2U7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ0NvbG9ybGlzdHMnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnQ29sb3JsaXN0cyddID0gYXJyYXkoKTsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnY29sb3JBb3B0aW9uJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ2NvbG9yQW9wdGlvbiddID0gJyc7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ2NvbG9yUG9wdGlvbicsICRmb3JtKSkgewoJICAgICRmb3JtWydjb2xvclBvcHRpb24nXSA9ICcnOwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdjb2xvckdvcHRpb24nLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnY29sb3JHb3B0aW9uJ109IiI7Cgl9CgogICAgICAgIC8qIENyZWF0ZSB0aGUgbGlzdCBvZiBtYXJrZXIgYXZhaWxhYmxlIGFuZCBzZWxlY3QgdGhlIHJpZ2h0IG9uZSBmb3IgUGhvdG9zICYgYWxidW1zICovCgkkZm9ybVsnbWFya2Vyc2V0J10gPSBHb29nbGVNYXBVdGlsaXRpZXM6Ok9wdGlvbkZyb21Gb2xkZXIoCgkJJGJhc2VnYWxsZXJ5ZGlyIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzLycsICRmb3JtWyd1c2VNYXJrZXJTZXQnXSk7CgkkZm9ybVsnYWxidW1tYXJrZXJzZXQnXSA9IEdvb2dsZU1hcFV0aWxpdGllczo6T3B0aW9uRnJvbUZvbGRlcigKCQkkYmFzZWdhbGxlcnlkaXIgLiAnbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvJywgJGZvcm1bJ3VzZUFsYnVtTWFya2VyU2V0J10pOwoJJGZvcm1bJ2dyb3VwbWFya2Vyc2V0J10gPSBHb29nbGVNYXBVdGlsaXRpZXM6Ok9wdGlvbkZyb21Gb2xkZXIoCgkJJGJhc2VnYWxsZXJ5ZGlyIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzLycsICRmb3JtWyd1c2VHcm91cE1hcmtlclNldCddKTsKCiAgICAgICAgLyoKICAgICAgICAgKiBDcmVhdGUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbG9yIGZvciB0aGUgc2VsZWN0ZWQgbWFya2Vyc2V0IGZvciBQaG90b3MsIGFsYnVtcyAKICAgICAgICAgKiBhbmQgR3JvdXBzCiAgICAgICAgICovCgkkZm9ybVsnY29sb3JQb3B0aW9uJ10gPSBHb29nbGVNYXBVdGlsaXRpZXM6Ok9wdGlvbkZyb21Db2xvckxpc3QoCgkJJGJhc2VnYWxsZXJ5ZGlyIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzLycgLiAkZm9ybVsndXNlTWFya2VyU2V0J10sCgkJJGZvcm1bJ2RlZmF1bHRwaG90b2NvbG9yJ10pOwoJJGZvcm1bJ2NvbG9yR29wdGlvbiddID0gR29vZ2xlTWFwVXRpbGl0aWVzOjpPcHRpb25Gcm9tQ29sb3JMaXN0KAoJCSRiYXNlZ2FsbGVyeWRpciAuICdtb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy8nIC4gJGZvcm1bJ3VzZUdyb3VwTWFya2VyU2V0J10sCgkJJGZvcm1bJ2RlZmF1bHRncm91cGNvbG9yJ10pOwoJJGZvcm1bJ2NvbG9yQW9wdGlvbiddID0gR29vZ2xlTWFwVXRpbGl0aWVzOjpPcHRpb25Gcm9tQ29sb3JMaXN0KAoJCSRiYXNlZ2FsbGVyeWRpciAuICdtb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy8nIC4gJGZvcm1bJ3VzZUFsYnVtTWFya2VyU2V0J10sCgkJJGZvcm1bJ2RlZmF1bHRhbGJ1bWNvbG9yJ10pOwoKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykgLiAnL2luY2x1ZGVzL01hcEFkbWluRWRpdHMuaW5jJyk7CgoJJGZvcm1bJ2FsbG1hcmtlcnMnXSA9IEdvb2dsZU1hcFV0aWxpdGllczo6QWxsTWFya2VycygpOwoKCWlmICgkdGVtcGxhdGUtPmhhc1ZhcmlhYmxlKCdTaXRlQWRtaW4nKSkgewoJICAgICRTaXRlQWRtaW4gPSYgJHRlbXBsYXRlLT5nZXRWYXJpYWJsZUJ5UmVmZXJlbmNlKCdTaXRlQWRtaW4nKTsKCSAgICAkU2l0ZUFkbWluWydlbmN0eXBlJ10gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7Cgl9IGVsc2UgewoJICAgICRTaXRlQWRtaW5bJ2VuY3R5cGUnXSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJzsKCSAgICAkdGVtcGxhdGUtPnNldFZhcmlhYmxlKCdTaXRlQWRtaW4nLCAkU2l0ZUFkbWluKTsKCX0KCgkkdGVtcGxhdGUtPnNldFZhcmlhYmxlKCdjb250cm9sbGVyJywgJ21hcC5NYXBNYXJrZXJzQWRtaW4nKTsKCXJldHVybiBhcnJheShudWxsLCBhcnJheSgnYm9keScgPT4gJ21vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBNYXJrZXJzQWRtaW4udHBsJykpOwogICAgfQp9Cgo/Pg==');
expand_3537250845($outputDir, 'MapRouteAdmin.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBFcmljIEggRGFuaWVsIDxlaGRhbmllbEBnbWFpbC5jb20+CiAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMTI1MyAkCiAqCiAqLwoKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL21hcEhlbHBlci5jbGFzcycpOwpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvR29vZ2xlTWFwVXRpbGl0aWVzLmNsYXNzJyk7CgovKiBOb3RlOiBUaGUgdmFsdWUgb2YgdGhpcyBzdHJpbmcgbXVzdCBiZSBsb3dlciBjYXNlICovCmRlZmluZSgnSUVYTUxTVFJJTkcnLCAneG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOnY9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIicpOwoKLyoqCiAqIEBwYWNrYWdlIG1hcAogKiBAc3VicGFja2FnZSBVc2VySW50ZXJmYWNlCiAqLwpjbGFzcyBNYXBSb3V0ZUFkbWluQ29udHJvbGxlciBleHRlbmRzIEdhbGxlcnlDb250cm9sbGVyIHsKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Q29udHJvbGxlcjo6aGFuZGxlUmVxdWVzdAogICAgICovCiAgICBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KCRmb3JtKSB7CiAgICAgICAgCglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pIC4gJy9pbmNsdWRlcy9NYXBBZG1pbkNvbnRyb2xsZXJJbml0LmluYycpOwoKCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ2NyZWF0ZXJvdXRlJ10pKSB7CgoJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnRWRpdFJvdXRlJywgJycpOwoKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gYXJyYXkoKTsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ21hcC5NYXBSb3V0ZUFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnbW9kZSddID0gJ0FkZFJvdXRlJzsKCgl9CgoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnZGVsZXRlYWxscm91dGVzJ10pKSB7CgoJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnUm91dGVzJywgJycpOwoKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gYXJyYXkoKTsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ21hcC5NYXBSb3V0ZUFkbWluJzsKCgl9CglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydlZGl0cm91dGUnXSkpIHsKCgkgICAgJGlkID0gc3Vic3RyKCRmb3JtWydhY3Rpb24nXVsnZWRpdHJvdXRlJ10sIDExKTsKCgkgICAgJHRtcCA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnUm91dGVzJyk7CgkgICAgJGN1cnJlbnRyb3V0ZXMgPSBleHBsb2RlKCd8JywgJHRtcFsxXSk7CgoJICAgICRuZXdyb3V0ZXMgPSAnJzsKCSAgICBmb3JlYWNoICgkY3VycmVudHJvdXRlcyBhcyAkcm91dGUpIHsKCQkkdGVtcCA9IGV4cGxvZGUoJ2AnLCAkcm91dGUpOwoJCWlmICgkdGVtcFswXSA8PiAkaWQpIHsKCQkgICAgaWYgKCRuZXdyb3V0ZXMgPT0gJycpIHsKCQkJJG5ld3JvdXRlcyA9ICRyb3V0ZTsKCQkgICAgfSBlbHNlIHsKCQkJJG5ld3JvdXRlcyA9ICRuZXdyb3V0ZXMgLiAnfCcgLiAkcm91dGU7CgkJICAgIH0KCQl9IGVsc2UgewoJCSAgICAkZWRpdHJvdXRlID0gJHJvdXRlOwoJCX0KCSAgICB9CgoJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnUm91dGVzJywgJG5ld3JvdXRlcyk7CgkgICAgR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdFZGl0Um91dGUnLCAkZWRpdHJvdXRlKTsKCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwUm91dGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ21vZGUnXSA9ICdBZGRSb3V0ZSc7CgoJfQoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnZGVsZXRlcm91dGUnXSkpIHsKCgkgICAgJGlkID0gc3Vic3RyKCRmb3JtWydhY3Rpb24nXVsnZGVsZXRlcm91dGUnXSwgMTMpOwoKCSAgICAkdG1wID0gR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdSb3V0ZXMnKTsKCSAgICAkY3VycmVudHJvdXRlcyA9IGV4cGxvZGUoJ3wnLCAkdG1wWzFdKTsKCgkgICAgJG5ld3JvdXRlcyA9ICcnOwoKCSAgICBmb3JlYWNoICgkY3VycmVudHJvdXRlcyBhcyAkcm91dGUpIHsKCQkkdGVtcCA9IGV4cGxvZGUoJ2AnLCAkcm91dGUpOwoJCWlmICgkdGVtcFswXSA8PiAkaWQpIHsKCQkgICAgaWYgKCRuZXdyb3V0ZXMgPT0gJycpIHsKCQkJJG5ld3JvdXRlcyA9ICRyb3V0ZTsKCQkgICAgfSBlbHNlIHsKCQkJJG5ld3JvdXRlcyA9ICRuZXdyb3V0ZXMgLiAnfCcgLiAkcm91dGU7CgkJICAgIH0KCQl9CgkgICAgfQoKCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ1JvdXRlcycsICRuZXdyb3V0ZXMpOwoKCSAgICAkc3RhdHVzWydyb3V0ZWRlbGV0ZWQnXSA9IDE7CgoJICAgICRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcFJvdXRlQWRtaW4nOwoKCX0KCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWyd0cGx1cGRhdGUnXSkpIHsKCSAgICAkRGVmYXVsdFRoZW1lID0gQEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdjb3JlJywgJ2RlZmF1bHQudGhlbWUnKTsKCgkgICAgJGZpbGVuYW1lID0gJGJhc2VnYWxsZXJ5ZGlyIC4gJy4uL3RoZW1lcy8nIC4gJERlZmF1bHRUaGVtZVsxXSAuICcvdGVtcGxhdGVzL3RoZW1lLnRwbCc7CgkgICAgJGJhY2t1cCA9ICRiYXNlZ2FsbGVyeWRpciAuICcuLi90aGVtZXMvJyAuICREZWZhdWx0VGhlbWVbMV0gLiAnL3RlbXBsYXRlcy90aGVtZS5iYWNrJzsKCSAgICBpZiAoIWZpbGVfZXhpc3RzKCRiYWNrdXApKSB7CgkJY29weSgkZmlsZW5hbWUsICRiYWNrdXApOwoJICAgIH0KCgkgICAgJGZpbGUgPSBAZmlsZSgkYmFja3VwKTsKCSAgICAkaGFuZGxlID0gQGZvcGVuKCRmaWxlbmFtZSwgJ3cnKTsKCgkgICAgaWYgKCRmaWxlICYmICRoYW5kbGUpIHsKCQlmb3JlYWNoKCRmaWxlIGFzICRsaW5lKSB7CgkJICAgIC8qIFVzZSB0aGUgdHJpcGxlID09PSB0byBtYWtlIHN1cmUgaXQncyBub3QgdGhlIGJvb2xlYW4gdmFsdWUgZmFsc2UgKi8KCQkgICAgaWYgKHN0cnBvcyhzdHJ0b2xvd2VyKHRyaW0oJGxpbmUpKSwgJzxodG1sJykgPT09IDApIHsKCQkJLyogSXQgZG9lc24ndCBoYXZlIHRoZSBtYWdpYyBzdHJpbmcgKi8KCQkJaWYgKHN0cnBvcyhzdHJ0b2xvd2VyKCRsaW5lKSwgSUVYTUxTVFJJTkcpID09PSBmYWxzZSkgewoJCQkgICAgJG5ld2xpbmUgPSBwcmVnX3JlcGxhY2UoJy8+JC8nLCAnICcgLiBJRVhNTFNUUklORyAuICI+XG4iLCB0cmltKCRsaW5lKSk7CgkJCSAgICBmd3JpdGUoJGhhbmRsZSwgJG5ld2xpbmUpOwoJCQl9IGVsc2UgewoJCQkgICAgZndyaXRlKCRoYW5kbGUsICRsaW5lKTsKCQkJfQoJCSAgICB9IGVsc2UgewoJCQlmd3JpdGUoJGhhbmRsZSwgJGxpbmUpOwoJCSAgICB9CgkJfQoJICAgIH0gZWxzZSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bY2Fub3RvcGVudGVtcGxhdGVdJzsKCSAgICB9CgkgICAgJHN0YXR1c1snY2hhbmdlc3VjZXNzJ10gPSAxOwogICAgICAgICAgICAKCSAgICAkZGlyZWN0aW9uID0gKGVtcHR5KCRlcnJvcikpID8gJ3JlZGlyZWN0JyA6ICdkZWxlZ2F0ZSc7CgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9ICRlcnJvcjsKCSAgICAkcmVzdWx0c1skZGlyZWN0aW9uXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCSAgICAkcmVzdWx0c1skZGlyZWN0aW9uXVsnc3ViVmlldyddID0gJ21hcC5NYXBSb3V0ZUFkbWluJzsKCgl9CglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydzYXZlJ10pKSB7CgkgICAgLyogU29tZSBlcnJvciBjaGVja2luZyAqLwoJICAgIGlmIChlbXB0eSgkX1BPU1RbJ1JvdXRlTmFtZSddKSkgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW3JvdXRlbmFtZV0nOwoJICAgIH0gZWxzZSBpZiAoIShlbXB0eSgkX1BPU1RbJ1JvdXRlQ29sb3InXSkpCgkJICAgIGFuZCAoIXByZWdfbWF0Y2goJy9eI1swLTksQS1GXXs2fSQvJywgJF9QT1NUWydSb3V0ZUNvbG9yJ10pKSkgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW3JvdXRlY29sb3JdJzsKCSAgICB9IGVsc2UgaWYgKCEoZW1wdHkoJF9QT1NUWydSb3V0ZU9wYWNpdHknXSkpIAoJCSAgICBhbmQgKCgkX1BPU1RbJ1JvdXRlT3BhY2l0eSddID4gMSkgfHwgKCRfUE9TVFsnUm91dGVPcGFjaXR5J10gPCAwKSkpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtyb3V0ZW9wYWNpdHldJzsKCSAgICB9IGVsc2UgaWYgKChjb3VudCgkX1BPU1QpIC0gMTMpIDwgMikgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW3Rvb2Zld2FyZ10nOwoJICAgIH0gZWxzZSB7CgoJICAgIAkkUm91dGVDb2xvciA9ICRfUE9TVFsnUm91dGVDb2xvciddOwoJICAgIAlpZiAoZW1wdHkoJFJvdXRlQ29sb3IpKSB7CgkJICAgICRSb3V0ZUNvbG9yID0gJyM4QTJCRTInOwoJICAgIAl9CgkJJFJvdXRlTmFtZSA9ICRfUE9TVFsnUm91dGVOYW1lJ107CgkJJFJvdXRlV2VpZ2h0ID0gJF9QT1NUWydSb3V0ZVdlaWdodCddOwoJCWlmIChlbXB0eSgkUm91dGVXZWlnaHQpKSB7CgkJICAgICRSb3V0ZVdlaWdodCA9ICczJzsKCQl9CgkJJFJvdXRlT3BhY2l0eSA9ICRfUE9TVFsnUm91dGVPcGFjaXR5J107CgkJaWYgKGVtcHR5KCRSb3V0ZU9wYWNpdHkpKSB7CgkJICAgICRSb3V0ZU9wYWNpdHkgPSAnMSc7CgkJfQoJCSRSb3V0ZUVuYWJsZWQgPSAkX1BPU1RbJ1JvdXRlRW5hYmxlZCddOwoJCSRSb3V0ZUZpbHRlciA9ICRfUE9TVFsnUm91dGVGaWx0ZXInXTsKCgkJJGxhc3RrZXkgPSAnJzsKCQkkbGFzdHZhbHVlID0gJyc7CgkJJGhhc2ggPSBhcnJheSgpOwoKCQlmb3JlYWNoICgkX1BPU1QgYXMgJGtleSA9PiAkdmFsdWUpIHsKCgkJICAgIGlmICgka2V5ICE9ICdnMl9yZXR1cm5OYW1lJyBhbmQgJGtleSAhPSAnZzJfbmF2SWQnIGFuZCAka2V5ICE9ICdnMl9mb3JtVXJsJyAKCQkJICAgIGFuZCAka2V5ICE9ICdnMl9jb250cm9sbGVyJyBhbmQgJGtleSAhPSAnZzJfZm9ybScpIHsKCQkJaWYgKCRrZXkgPT0gJ09yZGVyJyAuICRsYXN0a2V5KSB7CgkJCSAgICAkY29tbWFwb3MgPSBzdHJwb3MoJHZhbHVlLCAnLCcpOwoJCQkgICAgaWYgKCFpc19udW1lcmljKCRjb21tYXBvcykgJiYgISRjb21tYXBvcykgewoJCQkJJGhhc2hbJHZhbHVlXSA9ICdgJyAuICRsYXN0dmFsdWU7CgkJCSAgICB9IGVsc2UgewoJCQkJJGFsbHZhbHVlcyA9IGV4cGxvZGUoJywnLCAkdmFsdWUpOwoJCQkJZm9yZWFjaCAoJGFsbHZhbHVlcyBhcyAkdmFsdWVzKSB7CgkJCQkgICAgJGhhc2hbJHZhbHVlc10gPSAnYCcgLiAkbGFzdHZhbHVlOwoJCQkJfQoJCQkgICAgfQoJCQl9CgkJCSRsYXN0a2V5ID0gJGtleTsKCQkJJGxhc3R2YWx1ZSA9ICR2YWx1ZTsKCQkgICAgfQoJCX0KCQlrc29ydCgkaGFzaCwgU09SVF9OVU1FUklDKTsKCQkkYWxsZ3BzcG9pbnQgPSAnJzsKCQlmb3JlYWNoICgkaGFzaCBhcyAkcG9pbnQpIHsKCQkgICAgJGFsbGdwc3BvaW50ID0gJGFsbGdwc3BvaW50IC4gJHBvaW50OwoJCX0KCgkJJG9sZHJvdXRlcyA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnUm91dGVzJyk7CgoJCWlmICgkb2xkcm91dGVzWzFdICE9ICcnKSB7CgkJICAgIC8qIEdldCB0aGUgUm91dGUgSUQgaWYgZWRpdGluZyBhbiBleGlzdGluZyBvbmUsIG90aGVyd2lzZSBpbml0aWFsaXplIHRvIDAgKi8KCQkgICAgJG51bSA9IGlzc2V0KCRfUE9TVFsnb2xkaWQnXSkgPyAkX1BPU1RbJ29sZGlkJ10gOiAwOwoKCQkgICAgLyogTWFrZSBzdXJlIGFsbCB0aGUgcm91dGVzIGhhdmUgdW5pcXVlIElEcyAqLwoJCSAgICAkcm91dGVzdHJpbmdzID0gZXhwbG9kZSgnfCcsICRvbGRyb3V0ZXNbMV0pOwoJCSAgICBmb3JlYWNoKCRyb3V0ZXN0cmluZ3MgYXMgJHRlbXByb3V0ZSkgewoJCSAgICAJJHRlbXByb3V0ZXNbXSA9IGV4cGxvZGUoJ2AnLCAkdGVtcHJvdXRlKTsKCQkgICAgfQoJCSAgICAkbWF4Um91dGVJZCA9IDA7CgkJICAgICRlZGl0SWREdXBlID0gZmFsc2U7CgkJICAgICRyb3V0ZXNCeUlkID0gYXJyYXkoKTsKCQkgICAgZm9yZWFjaCgkdGVtcHJvdXRlcyBhcyAkcm91dGVLZXkgPT4gJHJvdXRlQXJyYXkpIHsKCQkJJG1heFJvdXRlSWQgPSBtYXgoYXJyYXkoJG1heFJvdXRlSWQsICRyb3V0ZUFycmF5WzBdKSk7CgkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRyb3V0ZUFycmF5WzBdLCAkcm91dGVzQnlJZCkpIHsgLyogRHVwbGljYXRlIElEICovCgkJCSAgICAvKiBDaGVjayBpZiB0aGUgSUQgYmVpbmcgZWRpdGVkIGlzIGEgZHVwbGljYXRlICovCgkJCSAgICBpZiAoJG51bSA9PSAkcm91dGVBcnJheVswXSkgewoJCQkJJGVkaXRJZER1cGUgPSB0cnVlOwoJCQkgICAgfQoJCQkgICAgLyogTW92ZSB0aGUgZHVwZSB0byB0aGUgZW5kICovCgkJCSAgICAkbWF4Um91dGVJZCA9ICRtYXhSb3V0ZUlkICsgMTsKCQkJICAgIC8qIHJlYXNzaWduIHJvdXRlIElEIHRvIGhpZ2hlc3QgSUQgKyAxICovCgkJCSAgICAkdGVtcHJvdXRlc1skcm91dGVLZXldWzBdID0gJG1heFJvdXRlSWQ7CgkJCX0KCQkJLyogU3RvcmUgdGhlIHJvdXRlIHN0cmluZyBpbnRvIHRoZSBhcnJheSwga2V5ZWQgYnkgcm91dGUgSUQgKi8KCQkJJHJvdXRlc0J5SWRbJHRlbXByb3V0ZXNbJHJvdXRlS2V5XVswXV0gPSAKCQkJCWltcGxvZGUoJ2AnLCAkdGVtcHJvdXRlc1skcm91dGVLZXldKTsKCQkgICAgfQoJCSAgICAvKgoJCSAgICAgKiBpZiAkbnVtIHdhcyBub3QgZm91bmQgaW4gdGhlIGV4aXN0aW5nIFJvdXRlIElEcyAoaS5lLiwgaXQncyBuZXcpIAoJCSAgICAgKiBvciBpZiBpdCB3YXMgYSBkdXBlLCB0aGVuIGFkZCBpdCBhcyBhIG5ldyByb3V0ZSwgZWxzZSBsZWF2ZSBpdCBhbG9uZQoJCSAgICAgKi8KCQkgICAgJG51bSA9ICgkbnVtID09IDAgb3IgJGVkaXRJZER1cGUpID8gJG1heFJvdXRlSWQgKyAxIDogJG51bTsKCQl9IGVsc2UgewoJCSAgICAkbnVtID0gMTsKCQl9CgoJCSRyb3V0ZXNCeUlkWyRudW1dID0gJG51bSAuICdgJwoJCQkJICAgIC4gJFJvdXRlTmFtZSAuICdgJwoJCQkJICAgIC4gJFJvdXRlQ29sb3IgLiAnYCcKCQkJCSAgICAuICRSb3V0ZVdlaWdodCAuICdgJwoJCQkJICAgIC4gJFJvdXRlT3BhY2l0eSAuICdgJwoJCQkJICAgIC4gJFJvdXRlRW5hYmxlZCAuICdgJwoJCQkJICAgIC4gJFJvdXRlRmlsdGVyCgkJCQkgICAgLiAkYWxsZ3BzcG9pbnQ7CgkJJGZvcm1bJ1JvdXRlcyddID0gaW1wbG9kZSgnfCcsICRyb3V0ZXNCeUlkKTsKCgkJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdSb3V0ZXMnLCAkZm9ybVsnUm91dGVzJ10pOwoJICAgIH0KCgkgICAgaWYgKGVtcHR5KCRlcnJvcikpIHsKCgkJJHN0YXR1c1sncm91dGVzYXZlZCddID0gMTsKCgkJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdFZGl0Um91dGUnLCAnJyk7CgoJCSRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkJJHJlc3VsdHNbJ2Vycm9yJ10gPSAkZXJyb3I7CgkJJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkJJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwUm91dGVBZG1pbic7CgkgICAgfSBlbHNlIHsKCQkkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJCSRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJCSRyZXN1bHRzWydkZWxlZ2F0ZSddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJCSRyZXN1bHRzWydkZWxlZ2F0ZSddWydzdWJWaWV3J10gPSAnbWFwLk1hcFJvdXRlQWRtaW4nOwoJCSRyZXN1bHRzWydkZWxlZ2F0ZSddWydtb2RlJ10gPSAnQWRkUm91dGUnOwoJICAgIH0KCX0KCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydjYW5jZWwnXSkpIHsKCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwUm91dGVBZG1pbic7CgoJfQoKCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ3NhdmVzZXR0aW5ncyddKSkgewoJCQoJCWlmIChpc3NldCgkZm9ybVsnRW5hYmxlUm91dGVOdW1iZXInXSkgYW5kICRmb3JtWydFbmFibGVSb3V0ZU51bWJlciddKXsKCQkJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdFbmFibGVSb3V0ZU51bWJlcicsIDEpOwoJCX0gZWxzZSB7CgkJCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnRW5hYmxlUm91dGVOdW1iZXInLCAwKTsKCQl9CgkJCgoJICAgICRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcFJvdXRlQWRtaW4nOwoKCX0KCglyZXR1cm4gYXJyYXkgKG51bGwsICRyZXN1bHRzKTsKICAgIH0KfQoKLyoqCiAqIEBwYWNrYWdlIG1hcAogKiBAc3VicGFja2FnZSBVc2VySW50ZXJmYWNlCiAqLwpjbGFzcyBNYXBSb3V0ZUFkbWluVmlldyBleHRlbmRzIEdhbGxlcnlWaWV3IHsKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Vmlldzo6bG9hZFRlbXBsYXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxvYWRUZW1wbGF0ZSgmJHRlbXBsYXRlLCAmJGZvcm0pIHsKCglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pIC4gJy9pbmNsdWRlcy9NYXBBZG1pblZpZXdJbml0LmluYycpOwoJJHRlbXBsYXRlLT5oZWFkKCdtb2R1bGVzL21hcC9pbmNsdWRlcy9Hb29nbGVNYXAuY3NzJyk7CgkkZm9ybVsnZm9ybU5hbWUnXSA9ICdNYXBSb3V0ZUFkbWluJzsKCglsaXN0ICgkcmV0LCAkZGF0ZUZvcm1hdCkgPQoJCUdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdjb3JlJywgJ2Zvcm1hdC5kYXRlJyk7CgoJJGZvcm1bJ25vdyddID0gc3RyZnRpbWUoJGRhdGVGb3JtYXQsIHN0cnRvdGltZSgnbm93JykpOwoKCS8qIFNlbGVjdCBpdGVtcyB0aGF0IGhhdmUgR1BTIGNvb3JkaW5hdGVzIGZpbGxlZCBvdXQgKi8KCSRzdG9yYWdlID0mICRnYWxsZXJ5LT5nZXRTdG9yYWdlKCk7CgkkcXVlcnkgPSAnCiAgICAgICAgU0VMRUNUCgkgIFttYXBNYXA6Oml0ZW1JZF0sCgkgIFttYXBNYXA6OnZhbHVlXQoJRlJPTQoJICBbbWFwTWFwXQoJV0hFUkUKCSAgW21hcE1hcDo6ZmllbGRdID0gXCdHUFNcJwoJJzsKCWxpc3QgKCRyZXQsICRyZXN1bHRzKSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5LCBhcnJheSgpLCBhcnJheSgpKTsKCglpZiAoISRyZXQpIHsKCSAgICAkcmVzdWx0MSA9ICRyZXN1bHRzLT5uZXh0UmVzdWx0KCk7Cgl9CgoJaWYgKCFlbXB0eSgkcmVzdWx0MSkpIHsKCSAgICBsaXN0ICgkcmV0LCAkcmVzdWx0cykgPSAkZ2FsbGVyeS0+c2VhcmNoKCRxdWVyeSwgYXJyYXkoKSwgYXJyYXkoKSk7CgoJICAgIC8qCgkgICAgICogQnVpbGRzIGEgaGFzaCBmb3IgZWFjaCBtYXBwYWJsZSBlbnRpdHkgZnJvbSBpdHMgSUQgdG8gYSBoYXNoIG9mCgkgICAgICogcHJvcGVydGllcy4gTm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgc2luY2UgaXQganVzdCBnZXRzIGZsYXR0ZW5lZAoJICAgICAqIG91dCBsYXRlciwgYnV0IGl0IGNvdWxkIGJlIHVzZWZ1bCBhdCBzb21lIHBvaW50LgoJICAgICAqLwoJICAgICRpZHMgPSBhcnJheSgpOwoJICAgICRwb2ludEhhc2ggPSBhcnJheSgpOwoJICAgIHdoaWxlICgkcmVzdWx0ID0gJHJlc3VsdHMtPm5leHRSZXN1bHQoKSkgewoJCSRpZCA9ICRyZXN1bHRbMF07CgoJCSRpZHNbXSA9ICRpZDsKCQkkcG9pbnRIYXNoWyRpZF0gPSBhcnJheSgpOwoJCSRwb2ludEhhc2hbJGlkXVsnaWQnXSA9ICRpZDsKCQkkcG9pbnRIYXNoWyRpZF1bJ2dwcyddID0gJHJlc3VsdFsxXTsKICAgICAgICAgICAgCgkJJHRtcCA9IGFycmF5KCk7CgkJaWYgKHN1YnN0cigkaWQsIDAsIDEpID09ICdHJykgewoJCSAgICBpZiAoKGFycmF5X2tleV9leGlzdHMoJ0VkaXRHcm91cCcsICRmb3JtKSBhbmQgJGZvcm1bJ0VkaXRHcm91cCddICE9ICcnKQoJCQkgICAgYW5kIChhcnJheV9rZXlfZXhpc3RzKCdtb2RlJywgJGZvcm0pIGFuZCAkZm9ybVsnbW9kZSddID09ICdBZGRHcm91cCcpKSB7CgkJCSR0bXAgPSBleHBsb2RlKCdgJywgJGZvcm1bJ0VkaXRHcm91cCddKTsKCQkJaWYgKCR0bXBbMF0gPT0gc3Vic3RyKCRpZCwgMSkpIHsKCQkJICAgIHVuc2V0KCRwb2ludEhhc2hbJGlkXSk7CgkJCX0KCQkgICAgfQoJCSAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkaWQsICRwb2ludEhhc2gpKSB7CgkJCSRwb2ludEhhc2hbJGlkXVsndHlwZSddID0gJ0dvb2dsZU1hcEdyb3VwJzsKCQkJJGdyb3VwaWQgPSBzdWJzdHIoJGlkLCAxKTsKCQkJbGlzdCAoJHJldCwgJHRtcHBhcmFtKSA9CgkJCQlHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ01hcEdyb3VwcycpOwoJCQkkZ3JvdXBzID0gZXhwbG9kZSgnfCcsICR0bXBwYXJhbSk7CgkJCWZvcmVhY2ggKCRncm91cHMgYXMgJGdyb3VwKSB7CgkJCSAgICBpZiAoIWVtcHR5KCRncm91cCkpIHsKCQkJCSRncm91cGluZm8gPSBleHBsb2RlKCdgJywgJGdyb3VwKTsKCQkJCWlmICgkZ3JvdXBpbmZvWzBdID09ICRncm91cGlkIGFuZCAkZ3JvdXBpZCAhPSAnJykgewoJCQkJICAgICR0aHVtYnBpYyA9ICRiYXNlZ2FsbGVyeWRpciAuICdtYXAvaW1hZ2VzL2dyb3Vwcy8nCgkJCQkJCS4gJGdyb3VwaW5mb1s0XTsKCQkJCSAgICAkcG9pbnRIYXNoWyRpZF1bJ3RpdGxlJ10gPSAkZ3JvdXBpbmZvWzFdOwoJCQkJICAgICRwb2ludEhhc2hbJGlkXVsnZGF0ZSddID0gc3RyZnRpbWUoJGRhdGVGb3JtYXQsICRncm91cGluZm9bNV0pOwoJCQkJICAgICRwb2ludEhhc2hbJGlkXVsnZGVzY3JpcHRpb24nXSA9ICRncm91cGluZm9bM107CgkJCQkgICAgJHBvaW50SGFzaFskaWRdWyd0aHVtYiddID0KCQkJCQkgICAgR2FsbGVyeVV0aWxpdGllczo6Y29udmVydFBhdGhUb1VybCgkdGh1bWJwaWMpOwoJCQkJfQoJCQkgICAgfQoJCQl9CgkJICAgIH0KCQl9CgkgICAgfQoKCSAgICAvKiBjcmVhdGUgYW4gSUQgYXJyYXkgd2l0aG91dCB0aGUgZ3JvdXBzIGluIGl0ICovCgkgICAgJHRtcCA9IGFycmF5KCk7CgkgICAgZm9yZWFjaCAoJGlkcyBhcyAkaWQpIHsKCQlpZiAoc3Vic3RyKCRpZCwgMCwgMSkgIT0gJ0cnKSB7CgkJICAgICR0bXBbXSA9ICRpZDsKCQl9CgkgICAgfQoJICAgICRpZHMgPSAkdG1wOwoKCgkgICAgLyogVHJpbSB0aGUgbGlzdCBkb3duIHRvIHRoZSBpdGVtcyB0aGF0IHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gc2VlICovCgkgICAgbGlzdCAoJHJldCwgJHBlcm1zKSA9CgkJICAgIEdhbGxlcnlDb3JlQXBpOjpmZXRjaFBlcm1pc3Npb25zRm9ySXRlbXMoJGlkcywgJGdhbGxlcnktPmdldEFjdGl2ZVVzZXJJZCgpKTsKCSAgICBmb3IoJGkgPSAwOyAkaSA8IGNvdW50KCRpZHMpOyAkaSsrKSB7CgkJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRpZHNbJGldLCAkcGVybXMpCgkJCXx8ICFhcnJheV9rZXlfZXhpc3RzKCdjb3JlLnZpZXcnLCAkcGVybXNbJGlkc1skaV1dKSkgewoJCSAgICB1bnNldCgkcG9pbnRIYXNoWyRpZHNbJGldXSk7CgkJICAgIHVuc2V0KCRpZHNbJGldKTsKCQl9CgkgICAgfQoKCSAgICAkaWRzID0gYXJyYXlfdmFsdWVzKCRpZHMpOwoJICAgIC8qIFJldHJpZXZlIGRhdGEgZm9yIGVhY2ggZW50aXR5ICovCgkgICAgbGlzdCAoJHJldCwgJGVudGl0aWVzKSA9ICRzdG9yYWdlLT5sb2FkRW50aXRpZXMoJGlkcyk7CgkgICAgbGlzdCAoJHJldCwgJHRodW1icykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hUaHVtYm5haWxzQnlJdGVtSWRzKCRpZHMpOwoKCSAgICAvKgoJICAgICAqIEZpbGwgb3V0IGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgZWFjaCBlbnRpdHksIHRha2luZyBjYXJlIHRvCgkgICAgICogZm9ybWF0IHRoZW0gc28gdGhhdCB0aGV5IGRvbid0IGJyZWFrIHRoZSBKYXZhc2NyaXB0IHRoYXQgdGhleQoJICAgICAqIGVuZCB1cCBlbWJlZGRlZCB3aXRoaW4uCgkgICAgICovCgkgICAgZm9yZWFjaCAoJGVudGl0aWVzIGFzICRlbnRpdHkpIHsKCQkkcG9pbnRIYXNoWyRlbnRpdHktPmdldElkKCldWyd0eXBlJ10gPSAkZW50aXR5LT5nZXRFbnRpdHlUeXBlKCk7CgkJJHBvaW50SGFzaFskZW50aXR5LT5nZXRJZCgpXVsndGl0bGUnXSA9CgkJCXByZWdfcmVwbGFjZShhcnJheSgnL1xuLycsICcvXHIvJyksIGFycmF5KCcnLCAnJyksICRlbnRpdHktPmdldFRpdGxlKCkpOwoJCSRwb2ludEhhc2hbJGVudGl0eS0+Z2V0SWQoKV1bJ2Rlc2NyaXB0aW9uJ10gPQoJCQlwcmVnX3JlcGxhY2UoYXJyYXkoJy9cbi8nLCAnL1xyLycpLAoJCQkJICAgICBhcnJheSgnJywgJycpLAoJCQkJICAgICAkZW50aXR5LT5nZXREZXNjcmlwdGlvbigpKTsKCQkkcG9pbnRIYXNoWyRlbnRpdHktPmdldElkKCldWyd0aHVtYiddID0KCQkJJHVybEdlbmVyYXRvci0+Z2VuZXJhdGVVcmwoCgkJCWFycmF5KCd2aWV3JyA9PiAnY29yZS5Eb3dubG9hZEl0ZW0nLAoJCQkgICAgICAnaXRlbUlkJyA9PiAkdGh1bWJzWyRlbnRpdHktPmdldElkKCldLT5nZXRJZCgpLAoJCQkgICAgICAnc2VyaWFsTnVtYmVyJyA9PiAkdGh1bWJzWyRlbnRpdHktPmdldElkKCldLT5nZXRTZXJpYWxOdW1iZXIoKSkpOwoJCSRwb2ludEhhc2hbJGVudGl0eS0+Z2V0SWQoKV1bJ2RhdGUnXSA9CgkJCXN0cmZ0aW1lKCRkYXRlRm9ybWF0LCAkZW50aXR5LT5nZXRPcmlnaW5hdGlvblRpbWVzdGFtcCgpKTsKCSAgICB9CgoKCSAgICAkR1BTSXRlbSA9IGFycmF5KCk7CgkgICAgZm9yZWFjaCAoJHBvaW50SGFzaCBhcyAkaWQgPT4gJHBvaW50KSB7CgkgICAgCSRHUFNJdGVtW10gPSAkcG9pbnQ7CgkgICAgfQoKCSAgICAkZm9ybVsnaXRlbXMnXSA9ICRHUFNJdGVtOwoJfQogICAgICAgIAoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5FZGl0cy5pbmMnKTsKCgkvKiBDcmVhdGUgdGhlIHJvdXRlIGFycmF5ICovCglpZiAoYXJyYXlfa2V5X2V4aXN0cygnUm91dGVzJywgJHBhcmFtKSBhbmQgJHBhcmFtWydSb3V0ZXMnXSAhPSAnJykgewoJICAgICRyb3V0ZXMgPSBleHBsb2RlKCd8JywgJHBhcmFtWydSb3V0ZXMnXSk7CgkgICAgbmF0c29ydCgkcm91dGVzKTsKCSAgICBmb3JlYWNoICgkcm91dGVzIGFzICRyb3V0ZSkgewoJICAgIAkkZm9ybVsndGhlcm91dGVzJ11bXSA9IGV4cGxvZGUoJ2AnLCAkcm91dGUpOwoJICAgIH0KCX0KCgkvKiBjaGVja2luZyBmb3IgdGhlIHJpZ2h0IHBhcmFtZXRlcnMgaW4gdGVtcGxhdGUgZmlsZSAqLwoJJERlZmF1bHRUaGVtZSA9IEBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnY29yZScsICdkZWZhdWx0LnRoZW1lJyk7CgkkZmlsZW5hbWUgPSAkYmFzZWdhbGxlcnlkaXIgLiAndGhlbWVzLycgLiAkRGVmYXVsdFRoZW1lWzFdIC4gJy90ZW1wbGF0ZXMvdGhlbWUudHBsJzsKCSRmaWxlID0gQGZpbGUoJGZpbGVuYW1lKTsKCglpZiAoJGZpbGUpIHsKCSAgICBmb3JlYWNoKCRmaWxlIGFzICRsaW5lKSB7CgkJLyogVXNlIHRoZSB0cmlwbGUgPT09IHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCB0aGUgYm9vbGVhbiB2YWx1ZSBmYWxzZSAqLwoJCWlmIChzdHJwb3Moc3RydG9sb3dlcih0cmltKCRsaW5lKSksICc8aHRtbCcpID09PSAwKSB7CgkJICAgIC8qIEl0IGRvZXNuJ3QgaGF2ZSB0aGUgbWFnaWMgc3RyaW5nICovCgkJICAgIGlmIChzdHJwb3Moc3RydG9sb3dlcigkbGluZSksIElFWE1MU1RSSU5HKSA9PT0gZmFsc2UpIHsKCQkJJGZvcm1bJ2JhZGh0bWx0YWcnXSA9IDE7CgkJCWJyZWFrOwoJCSAgICB9CgkJfQoJICAgIH0KCX0KCQoJLyogR2V0IHRoZSBwYXJhbWV0ZXIgZm9yIFJvdXRlIE51bWJlcmluZyAqLwoJbGlzdCgkcmV0LCAkRW5hYmxlUm91dGVOdW1iZXIpID0gQEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnRW5hYmxlUm91dGVOdW1iZXInKTsKCWlmIChlbXB0eSgkRW5hYmxlUm91dGVOdW1iZXIpKSB7CgkJJEVuYWJsZVJvdXRlTnVtYmVyID0gMDsJCgl9CgkKCSRmb3JtWydFbmFibGVSb3V0ZU51bWJlciddID0gJEVuYWJsZVJvdXRlTnVtYmVyOwoKCWlmICgkdGVtcGxhdGUtPmhhc1ZhcmlhYmxlKCdTaXRlQWRtaW4nKSkgewoJICAgICRTaXRlQWRtaW4gPSYgJHRlbXBsYXRlLT5nZXRWYXJpYWJsZUJ5UmVmZXJlbmNlKCdTaXRlQWRtaW4nKTsKCSAgICAkU2l0ZUFkbWluWydlbmN0eXBlJ10gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7Cgl9IGVsc2UgewoJICAgICRTaXRlQWRtaW5bJ2VuY3R5cGUnXSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJzsKCSAgICAkdGVtcGxhdGUtPnNldFZhcmlhYmxlKCdTaXRlQWRtaW4nLCAkU2l0ZUFkbWluKTsKCX0KCgkkdGVtcGxhdGUtPnNldFZhcmlhYmxlKCdjb250cm9sbGVyJywgJ21hcC5NYXBSb3V0ZUFkbWluJyk7CglyZXR1cm4gYXJyYXkobnVsbCwgYXJyYXkoJ2JvZHknID0+ICdtb2R1bGVzL21hcC90ZW1wbGF0ZXMvTWFwUm91dGVBZG1pbi50cGwnKSk7CiAgICB9Cn0KPz4=');
expand_3537250845($outputDir, 'MapSiteAdmin.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBTdGV2ZW4gTi4gU2V2ZXJpbmdoYXVzIDxzbnNAc2V2ZXJpbmdoYXVzLm9yZz4KICogQHZlcnNpb24gJFJldmlzaW9uOiAxNTc2ICQKICoKICogVGhpcyBpcyBzb21lIG9mIHRoZSB1Z2xpZXN0IGNvZGUgSSd2ZSBldmVyIHdyaXR0ZW4uIFBsZWFzZSBkbyBub3QKICoganVkZ2UgbWUgYnkgaXQuIDopCiAqLwoKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL21hcEhlbHBlci5jbGFzcycpOwpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvR29vZ2xlTWFwVXRpbGl0aWVzLmNsYXNzJyk7CgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBzdWJwYWNrYWdlIFVzZXJJbnRlcmZhY2UKICovCmNsYXNzIE1hcFNpdGVBZG1pbkNvbnRyb2xsZXIgZXh0ZW5kcyBHYWxsZXJ5Q29udHJvbGxlciB7CiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeUNvbnRyb2xsZXI6OmhhbmRsZVJlcXVlc3QKICAgICAqLwogICAgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdCgkZm9ybSkgewoKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykgLiAnL2luY2x1ZGVzL01hcEFkbWluQ29udHJvbGxlckluaXQuaW5jJyk7CgogICAgICAgIC8qIENhbmNlbCBoaXQsIHJldHVybiB0byB0aGUgZGVmYXVsdCBBZG1pbiBQYWdlICovCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydjYW5jZWwnXSkpIHsKCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J10gPSBhcnJheSgndmlldycgPT4gJ2NvcmUuU2l0ZUFkbWluJywKCQkJCQkgJ3N1YlZpZXcnID0+ICdtYXAuTWFwU2l0ZUFkbWluJywKCQkJCQkgJ21vZGUnID0+ICdHZW5lcmFsJyk7Cgl9CgkKCS8qIFNhdmUgZ2VuZXJhbCBzZXR0aW5ncyAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnc2F2ZSddKSkgewoJICAgIC8qIENoZWNrIGZvciBlcnJvcnMgKi8KCSAgICBpZiAoIWlzX251bWVyaWMoJGZvcm1bJ21hcFdpZHRoJ10pIHx8IGludHZhbCgkZm9ybVsnbWFwV2lkdGgnXSkgIT0gJGZvcm1bJ21hcFdpZHRoJ10pIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVttYXBXaWR0aF0nOwoJICAgIH0gZWxzZSBpZiAoIWlzX251bWVyaWMoJGZvcm1bJ21hcEhlaWdodCddKQoJCSAgICB8fCBpbnR2YWwoJGZvcm1bJ21hcEhlaWdodCddKSAhPSAkZm9ybVsnbWFwSGVpZ2h0J10pIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVttYXBIZWlnaHRdJzsKCSAgICB9IGVsc2UgaWYgKCFpc3NldCgkZm9ybVsnQXV0b0NlbnRlclpvb20nXSkgJiYgKGVtcHR5KCRmb3JtWydjZW50ZXJMb25nTGF0J10pCgkJICAgIHx8ICFwcmVnX21hdGNoKCcvXihbLStdPygoWzAtOV17MSwzfShcLlswLTldezAsMTZ9KT8pfChcLlswLTldezEsMTZ9KSkoXDA0MCkqLCcKCQkJCSAuICcoXDA0MCkqWy0rXT8oKFswLTldezEsM30oXC5bMC05XXswLDE2fSk/KXwoXC5bMC05XXsxLDE2fSkpKT8kLycsCgkJCQkgJGZvcm1bJ2NlbnRlckxvbmdMYXQnXSkpKSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bY2VudGVyTG9uZ0xhdF0nOwoJICAgIH0gZWxzZSBpZiAoIWlzc2V0KCRmb3JtWydBdXRvQ2VudGVyWm9vbSddKQoJCSAgICAmJiAoIWlzX251bWVyaWMoJGZvcm1bJ3pvb21MZXZlbCddKQoJCQl8fCAoaW50dmFsKCRmb3JtWyd6b29tTGV2ZWwnXSkgIT0gJGZvcm1bJ3pvb21MZXZlbCddKQoJCQl8fCAoJGZvcm1bJ3pvb21MZXZlbCddIDwgMCkgfHwgKCRmb3JtWyd6b29tTGV2ZWwnXSA+IDE5KSkpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVt6b29tTGV2ZWxdJzsKCSAgICB9IGVsc2UgaWYgKCFlbXB0eSgkZm9ybVsnR1ZNQ2VudGVyJ10pCgkJICAgICYmICFwcmVnX21hdGNoKCcvXihbLStdPygoWzAtOV17MSwzfShcLlswLTldezAsMTZ9KT8pfChcLlswLTldezEsMTZ9KSkoXDA0MCkqLCcKCQkgICAgCQkgLiAnKFwwNDApKlstK10/KChbMC05XXsxLDN9KFwuWzAtOV17MCwxNn0pPyl8KFwuWzAtOV17MSwxNn0pKSk/JC8nLAoJCSAgICAJCSAkZm9ybVsnR1ZNQ2VudGVyJ10pKSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bR1ZNQ2VudGVyXSc7CgkgICAgfSBlbHNlIGlmICghZW1wdHkoJGZvcm1bJ0dWTVpvb20nXSkKCQkgICAgJiYgKCFpc19udW1lcmljKCRmb3JtWydHVk1ab29tJ10pCgkJCXx8IChpbnR2YWwoJGZvcm1bJ0dWTVpvb20nXSkgIT0gJGZvcm1bJ0dWTVpvb20nXSkKCQkJfHwgKCRmb3JtWydHVk1ab29tJ10gPCAwKSB8fCAoJGZvcm1bJ0dWTVpvb20nXSA+IDE5KSkpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtHVk1ab29tXSc7CgkgICAgfSBlbHNlIHsKCgkgICAgCWlmICghYXJyYXlfa2V5X2V4aXN0cygnc2hvd1NjYWxlJywgJGZvcm0pKSB7CgkJICAgICRmb3JtWydzaG93U2NhbGUnXSA9IGZhbHNlOwoJICAgIAl9CgkgICAgCWlmICghYXJyYXlfa2V5X2V4aXN0cygnY2VudGVyTG9uZ0xhdCcsICRmb3JtKSkgewoJCSAgICAkZm9ybVsnY2VudGVyTG9uZ0xhdCddID0gJzAsMCc7CgkgICAgCX0KCQlpZiAoIWFycmF5X2tleV9leGlzdHMoJ3pvb21MZXZlbCcsICRmb3JtKSkgewoJCSAgICAkZm9ybVsnem9vbUxldmVsJ10gPSAnMCc7CgkJfQoKCQkvKiBDbGVhbnVwIGNvb3JkaW5hdGVzIG9mIGFueSBzcGFjZXMgKi8KCQlpZiAoJGZvcm1bJ2NlbnRlckxvbmdMYXQnXSAhPSAnJykgewoJCSAgICAkZm9ybVsnY2VudGVyTG9uZ0xhdCddID0gc3RyX3JlcGxhY2UoJyAnLCAnJywgdHJpbSgkZm9ybVsnY2VudGVyTG9uZ0xhdCddKSk7CgkJfQoKCQkvKiBTYXZlIHBhcmFtZXRlcnMgaWYgdGhlcmUgaGF2ZSBiZWVuIG5vIGVycm9ycyAqLwoJCWZvcmVhY2ggKGFycmF5KCdHVk1ab29tJywgJ0dWTUNlbnRlcicsICdtYXBXaWR0aCcsICdsaW5rdHlwZScsICdtYXBIZWlnaHQnLAoJCQkgICAgICAgJ2NlbnRlckxvbmdMYXQnLCAnem9vbUxldmVsJywgJ21hcFR5cGUnLCAnTWFwV2lkdGhGb3JtYXQnLAoJCQkgICAgICAgJ01hcEhlaWdodEZvcm1hdCcpIGFzICRzZXR0aW5nKSB7CgkJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAkc2V0dGluZywgJGZvcm1bJHNldHRpbmddKTsKCQl9CgoJCWZvcmVhY2ggKGFycmF5KCdzaG93U2NhbGUnLCAnQXV0b0NlbnRlclpvb20nLCAnU2hvd0V4cG9ydEdFTGluaycsCgkJCSAgICAgICAnR29vZ2xlT3ZlcnZpZXdGZWF0dXJlJywgJ1RoZW1lRmVhdHVyZScsICdNYXJrZXJGZWF0dXJlJywKCQkJICAgICAgICdMZWdlbmRGZWF0dXJlJywgJ0FkbWluSGVscCcsICdVc2VySGVscCcsICdGaWx0ZXJGZWF0dXJlJywKCQkJICAgICAgICdHcm91cEZlYXR1cmUnLCAnUm91dGVGZWF0dXJlJywgJ0dab29tRmVhdHVyZScpIGFzICRzZXR0aW5nKSB7CgkJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAkc2V0dGluZywKCQkJICAgIChpc3NldCgkZm9ybVskc2V0dGluZ10pICYmICRmb3JtWyRzZXR0aW5nXSkgPyAxIDogMCk7CgkJfQoKCQkkc3RhdHVzWydzYXZlZCddID0gMTsKCSAgICB9CgoJICAgIC8qIEZpZ3VyZSBvdXQgdGhlIG1ldGhvZCB3ZSB3aWxsIHVzZSAqLwoJICAgICRtZXRob2QgPSBlbXB0eSgkZXJyb3IpID8gJ3JlZGlyZWN0JyA6ICdkZWxlZ2F0ZSc7CgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9ICRlcnJvcjsKCSAgICAkcmVzdWx0c1skbWV0aG9kXSA9IGFycmF5KCd2aWV3JyA9PiAnY29yZS5TaXRlQWRtaW4nLAoJCQkJICAgICAgJ3N1YlZpZXcnID0+ICdtYXAuTWFwU2l0ZUFkbWluJywKCQkJCSAgICAgICdtb2RlJyA9PiAnR2VuZXJhbCcpOwoJfQoKCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ2VkaXRLZXknXSkpIHsKCgkgICAgJHVybCA9ICRmb3JtWydtYXBLZXlzJ107CgkgICAgCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJyc7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSAnJzsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXSA9IGFycmF5KCd2aWV3JyA9PiAnY29yZS5TaXRlQWRtaW4nLAoJCQkJCSAnc3ViVmlldycgPT4gJ21hcC5NYXBTaXRlQWRtaW4nLAoJCQkJCSAnbW9kZScgPT4gJ21hcEtleScsCgkJCQkJICdrZXlVcmwnID0+ICR1cmwpOwoJfQoKCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ2FkZEtleSddKSkgewoKCSAgICAvKiBEb24ndCBzdXBwbHkgYSBrZXlVcmwgcGFyYW0gd2hlbiBhZGRpbmcgYSBuZXcga2V5ICovCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gYXJyYXkoKTsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J10gPSBhcnJheSgndmlldycgPT4gJ2NvcmUuU2l0ZUFkbWluJywKCQkJCQkgJ3N1YlZpZXcnID0+ICdtYXAuTWFwU2l0ZUFkbWluJywKCQkJCQkgJ21vZGUnID0+ICdtYXBLZXknKTsKCX0KCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydkZWxLZXknXSkpIHsKCgkgICAgJHVybCA9ICRmb3JtWydtYXBLZXlzJ107CgoJICAgIGxpc3QgKCRyZXQsICRzdWNjZXNzKSA9IG1hcEhlbHBlcjo6ZGVsZXRlS2V5UHJvZmlsZSgkdXJsKTsKCgkgICAgJHN0YXR1c1sncHJvZmlsZURlbGV0ZWQnXSA9ICRzdWNjZXNzOwoKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gYXJyYXkoKTsKCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXSA9IGFycmF5KCd2aWV3JyA9PiAnY29yZS5TaXRlQWRtaW4nLAoJCQkJCSAnc3ViVmlldycgPT4gJ21hcC5NYXBTaXRlQWRtaW4nLAoJCQkJCSAnbW9kZScgPT4gJ0dlbmVyYWwnKTsKCX0KCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydzYXZlUHJvZmlsZSddKSkgewoKCSAgICAvKiBlcnJvciBjaGVja2luZyAqLwoJICAgIGlmICghZW1wdHkoJGZvcm1bJ29sZFByb2ZpbGVVcmwnXSkpIHsKCQkvKiBDaGVjayBpZiB0aGUgcHJvZmlsZSB3YXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIHNpbXVsdGFuZW91c2x5ICovCgkJbGlzdCAoJHJldCwgJG9sZFByb2ZpbGUpID0gCgkJCW1hcEhlbHBlcjo6ZmV0Y2hLZXlQcm9maWxlRm9yVXJsKCRmb3JtWydvbGRQcm9maWxlVXJsJ10pOwoJCWlmICgkcmV0KSB7CgkJICAgIHJldHVybiAkcmV0OwoJCX0KCQlpZiAoZW1wdHkoJG9sZFByb2ZpbGUpKSB7CgkJICAgICRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW3Byb2ZpbGVEZWxldGVkXSc7CgkJfSBlbHNlIGlmKCRvbGRQcm9maWxlWyduYW1lJ10gIT0gJGZvcm1bJ29sZFByb2ZpbGVOYW1lJ10KCQkJICB8fCAkb2xkUHJvZmlsZVsndXJsJ10gIT0gJGZvcm1bJ29sZFByb2ZpbGVVcmwnXQoJCQkgIHx8ICRvbGRQcm9maWxlWydhcGlLZXknXSAhPSAkZm9ybVsnb2xkUHJvZmlsZUFwaUtleSddKSB7CgkJICAgICRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW3Byb2ZpbGVNb2RpZmllZF0nOwoJCX0KCSAgICB9CgkgICAgaWYgKHRyaW0oJGZvcm1bJ2VkaXRQcm9maWxlJ11bJ25hbWUnXSkgPT0gJycpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtlZGl0UHJvZmlsZV1bbmFtZV1bbWlzc2luZ10nOwoJICAgIH0KCSAgICBpZiAodHJpbSgkZm9ybVsnZWRpdFByb2ZpbGUnXVsndXJsJ10pID09ICcnKSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bZWRpdFByb2ZpbGVdW3VybF1bbWlzc2luZ10nOwoJICAgIH0gCgkgICAgaWYgKHRyaW0oJGZvcm1bJ2VkaXRQcm9maWxlJ11bJ2FwaUtleSddKSA9PSAnJykgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW2VkaXRQcm9maWxlXVthcGlLZXldW21pc3NpbmddJzsKCSAgICB9CgkgICAgaWYgKGVtcHR5KCRlcnJvcikpIHsKCSAgICAgICAgbWFwSGVscGVyOjpzYXZlS2V5UHJvZmlsZSh0cmltKCRmb3JtWydlZGl0UHJvZmlsZSddWyduYW1lJ10pLAoJCQkJCSAgdHJpbSgkZm9ybVsnZWRpdFByb2ZpbGUnXVsndXJsJ10pLAoJCQkJCSAgdHJpbSgkZm9ybVsnZWRpdFByb2ZpbGUnXVsnYXBpS2V5J10pLAoJCQkJCSAgJGZvcm1bJ29sZFByb2ZpbGVVcmwnXSk7CgoJCSRzdGF0dXNbJ3Byb2ZpbGVzYXZlZCddID0gMTsKCgkJbGlzdCAoJHJldCwgJG1vZHVsZSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZFBsdWdpbignbW9kdWxlJywgJ21hcCcpOwoJCWlmICgkcmV0KSB7CgkJICAgIHJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKCQl9CgkJbGlzdCAoJHJldCwgJGlzQWN0aXZlKSA9ICRtb2R1bGUtPmlzQWN0aXZlKCk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJCX0KCQkkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCQlpZiAoJGlzQWN0aXZlKSB7CgkJICAgICRyZXN1bHRzWydzdGF0dXMnXSA9ICRzdGF0dXM7CgkJICAgICRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ21hcC5NYXBTaXRlQWRtaW4nOwoJCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsnbW9kZSddID0gJ0dlbmVyYWwnOwoJCX0gZWxzZSB7CgkJICAgICRzdGF0dXNbJ2NvbmZpZ3VyZWQnXSA9ICdtYXAnOwoJCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJCSAgICAkcmVzdWx0c1snZXJyb3InXSA9ICRlcnJvcjsKCQkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdjb3JlLkFkbWluTW9kdWxlcyc7CgkJfQoJICAgIH0gZWxzZSB7CgkJJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCQkkcmVzdWx0c1snZXJyb3InXSA9ICRlcnJvcjsKCQkkcmVzdWx0c1snZGVsZWdhdGUnXSA9IGFycmF5KCd2aWV3JyA9PiAnY29yZS5TaXRlQWRtaW4nLAoJCQkJCSAgICAgJ3N1YlZpZXcnID0+ICdtYXAuTWFwU2l0ZUFkbWluJywKCQkJCQkgICAgICdtb2RlJyA9PiAnbWFwS2V5JywKCQkJCQkgICAgICdrZXlVcmwnID0+ICRmb3JtWydvbGRQcm9maWxlVXJsJ10pOwoJICAgIH0KCX0KCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydnZXR2aWFtYXAnXSkpIHsKCgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJyc7CgkgICAgJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoJICAgICRyZXN1bHRzWydyZWRpcmVjdCddID0gYXJyYXkoJ3ZpZXcnID0+ICdtYXAuU2hvd01hcCcsCgkgICAgCQkJCSAnTW9kZScgPT4gJ1BpY2snLAoJICAgIAkJCQkgJ3BsdWdpbicgPT4gJ0FkbWluQ2VudGVyJyk7Cgl9CgoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnZ2V0dmlhbWFwMiddKSkgewoKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAnJzsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J10gPSBhcnJheSgndmlldycgPT4gJ21hcC5TaG93TWFwJywKCSAgICAJCQkJICdNb2RlJyA9PiAnUGljaycsCgkgICAgCQkJCSAncGx1Z2luJyA9PiAnR1ZNRGVmYXVsdCcpOwoJfQoJcmV0dXJuIGFycmF5IChudWxsLCAkcmVzdWx0cyk7CiAgICB9Cn0KCi8qKgogKiBAcGFja2FnZSBtYXAKICogQHN1YnBhY2thZ2UgVXNlckludGVyZmFjZQogKi8KY2xhc3MgbWFwU2l0ZUFkbWluVmlldyBleHRlbmRzIEdhbGxlcnlWaWV3IHsKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Vmlldzo6bG9hZFRlbXBsYXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxvYWRUZW1wbGF0ZSgmJHRlbXBsYXRlLCAmJGZvcm0pIHsKCglnbG9iYWwgJGdhbGxlcnk7CgkKCWxpc3QgKCRyZXQsICRtb2R1bGUpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRQbHVnaW4oJ21vZHVsZScsICdtYXAnKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCk7Cgl9CiAgICAJCQkJCglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pIC4gJy9pbmNsdWRlcy9NYXBBZG1pblZpZXdJbml0LmluYycpOwoJJGZvcm1bJ2Zvcm1OYW1lJ10gPSAnbWFwU2l0ZUFkbWluJzsKCSR0ZW1wbGF0ZS0+aGVhZCgnbW9kdWxlcy9tYXAvaW5jbHVkZXMvR29vZ2xlTWFwLmNzcycpOwoJJHRlbXBsYXRlLT5qYXZhc2NyaXB0KCdtb2R1bGVzL21hcC9Hb29nbGVNYXAuanMnKTsKCgkvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIHVuZGVmaW5lZCBwbHVnaW4gcGFyYW1ldGVycyAqLwoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdtYXBXaWR0aCcsICRmb3JtKSkgewoJICAgICRmb3JtWydtYXBXaWR0aCddID0gNjAwOwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdtYXBIZWlnaHQnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnbWFwSGVpZ2h0J10gPSA0MDA7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ2NlbnRlckxvbmdMYXQnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnY2VudGVyTG9uZ0xhdCddID0gJzAsMCc7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ3pvb21MZXZlbCcsICRmb3JtKSkgewoJICAgICRmb3JtWyd6b29tTGV2ZWwnXSA9IDE3OwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdtYXBUeXBlJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ21hcFR5cGUnXSA9ICdHX1NBVEVMTElURV9UWVBFJzsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnc2hvd1NjYWxlJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ3Nob3dTY2FsZSddID0gZmFsc2U7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ0F1dG9DZW50ZXJab29tJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0F1dG9DZW50ZXJab29tJ10gPSBmYWxzZTsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnU2hvd0V4cG9ydEdFTGluaycsICRmb3JtKSkgewoJICAgICRmb3JtWydTaG93RXhwb3J0R0VMaW5rJ10gPSB0cnVlOwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdHVk1DZW50ZXInLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnR1ZNQ2VudGVyJ10gPSAnMCwwJzsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnR1ZNWm9vbScsICRmb3JtKSkgewoJICAgICRmb3JtWydHVk1ab29tJ10gPSAxNzsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnTWFwV2lkdGhGb3JtYXQnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnTWFwV2lkdGhGb3JtYXQnXSA9IDE7IC8qIHBpeGVscyBieSBkZWZhdWx0ICovCgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ01hcEhlaWdodEZvcm1hdCcsICRmb3JtKSkgewoJICAgICRmb3JtWydNYXBIZWlnaHRGb3JtYXQnXSA9IDE7IC8qIHBpeGVscyBieSBkZWZhdWx0ICovCgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ0dvb2dsZU92ZXJ2aWV3RmVhdHVyZScsICRmb3JtKSkgewoJICAgICRmb3JtWydHb29nbGVPdmVydmlld0ZlYXR1cmUnXSA9IDA7IC8qIERpc2FibGVkIGJ5IGRlZmF1bHQgKi8KCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnR1pvb21GZWF0dXJlJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0dab29tRmVhdHVyZSddID0gMDsgLyogRGlzYWJsZWQgYnkgZGVmYXVsdCAqLwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdUaGVtZUZlYXR1cmUnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnVGhlbWVGZWF0dXJlJ10gPSAwOyAvKiBEaXNhYmxlZCBieSBkZWZhdWx0ICovCgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ01hcmtlckZlYXR1cmUnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnTWFya2VyRmVhdHVyZSddID0gMDsgLyogRGlzYWJsZWQgYnkgZGVmYXVsdCAqLwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdMZWdlbmRGZWF0dXJlJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ0xlZ2VuZEZlYXR1cmUnXSA9IDA7IC8qIERpc2FibGVkIGJ5IGRlZmF1bHQgKi8KCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnRmlsdGVyRmVhdHVyZScsICRmb3JtKSkgewoJICAgICRmb3JtWydGaWx0ZXJGZWF0dXJlJ10gPSAwOyAvKiBEaXNhYmxlZCBieSBkZWZhdWx0ICovCgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ0dyb3VwRmVhdHVyZScsICRmb3JtKSkgewoJICAgICRmb3JtWydHcm91cEZlYXR1cmUnXSA9IDA7IC8qIERpc2FibGVkIGJ5IGRlZmF1bHQgKi8KCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnUm91dGVGZWF0dXJlJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ1JvdXRlRmVhdHVyZSddID0gMDsgLyogRGlzYWJsZWQgYnkgZGVmYXVsdCAqLwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdsaW5rdHlwZScsICRmb3JtKSkgewoJICAgICRmb3JtWydsaW5rdHlwZSddID0gMDsgLyogRGVmYXVsdCBsaW5rICovCgl9CgoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5FZGl0cy5pbmMnKTsKCgkvKiBTdXBwbHkgdGhlIGN1cnJlbnQgVVJMIHRvIHRoZSBmb3JtIHRvIGZpbGwgaW4gZGVmYXVsdCBrZXkgcHJvZmlsZSB2YWx1ZXMgKi8KCSR1cmxHZW4gPSAkZ2FsbGVyeS0+Z2V0VXJsR2VuZXJhdG9yKCk7CgkkZm9ybVsnYmFzZVVybCddID0gJHVybEdlbi0+Z2V0Q3VycmVudFVybERpcigpOwoKCWxpc3QgKCRyZXQsICRmb3JtWydhcnJheU1hcEtleXMnXSkgPSBtYXBIZWxwZXI6OmdldEFsbEtleVByb2ZpbGVzKCk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoKCSRlZGl0VXJsID0gR2FsbGVyeVV0aWxpdGllczo6Z2V0UmVxdWVzdFZhcmlhYmxlcygna2V5VXJsJyk7CglsaXN0ICgkcmV0LCAkcHJvZmlsZSkgPSBtYXBIZWxwZXI6OmZldGNoS2V5UHJvZmlsZUZvclVybCgkZWRpdFVybCk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoJJGZvcm1bJ2VkaXRQcm9maWxlJ10gPSAkcHJvZmlsZTsKCglpZiAoJHRlbXBsYXRlLT5oYXNWYXJpYWJsZSgnU2l0ZUFkbWluJykpIHsKCSAgICAkU2l0ZUFkbWluID0mICR0ZW1wbGF0ZS0+Z2V0VmFyaWFibGVCeVJlZmVyZW5jZSgnU2l0ZUFkbWluJyk7CgkgICAgJFNpdGVBZG1pblsnZW5jdHlwZSddID0gJ211bHRpcGFydC9mb3JtLWRhdGEnOwoJfSBlbHNlIHsKCSAgICAkU2l0ZUFkbWluWydlbmN0eXBlJ10gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7CgkgICAgJHRlbXBsYXRlLT5zZXRWYXJpYWJsZSgnU2l0ZUFkbWluJywgJFNpdGVBZG1pbik7Cgl9CgkkdGVtcGxhdGUtPnNldFZhcmlhYmxlKCdjb250cm9sbGVyJywgJ21hcC5NYXBTaXRlQWRtaW4nKTsKCXJldHVybiBhcnJheShudWxsLCBhcnJheSgnYm9keScgPT4gJ21vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBTaXRlQWRtaW4udHBsJykpOwogICAgfQp9Cj8+');
expand_3537250845($outputDir, 'MapThemeAdmin.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBTdGV2ZW4gTi4gU2V2ZXJpbmdoYXVzIDxzbnNAc2V2ZXJpbmdoYXVzLm9yZz4KICogQHZlcnNpb24gJFJldmlzaW9uOiAxMjUzICQKICoKICogVGhpcyBpcyBzb21lIG9mIHRoZSB1Z2xpZXN0IGNvZGUgSSd2ZSBldmVyIHdyaXR0ZW4uIFBsZWFzZSBkbyBub3QKICoganVkZ2UgbWUgYnkgaXQuIDopCiAqLwoKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL21hcEhlbHBlci5jbGFzcycpOwpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvR29vZ2xlTWFwVXRpbGl0aWVzLmNsYXNzJyk7CgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBzdWJwYWNrYWdlIFVzZXJJbnRlcmZhY2UKICovCmNsYXNzIE1hcFRoZW1lQWRtaW5Db250cm9sbGVyIGV4dGVuZHMgR2FsbGVyeUNvbnRyb2xsZXIgewoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Q29udHJvbGxlcjo6aGFuZGxlUmVxdWVzdAogICAgICovCiAgICBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KCRmb3JtKSB7CgoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5Db250cm9sbGVySW5pdC5pbmMnKTsKCgkvKiBTYXZlIHRoZSB0aGVtZSBzZXR0aW5ncyAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnc2F2ZSddKSkgewoJICAgIC8qIENoZWNrIGZvciBlcnJvcnMgKi8KCSAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnTWFwQ29udHJvbFBvc09mZlgnLCAkZm9ybSkKCQkgICAgJiYgKCFpc19udW1lcmljKCRmb3JtWydNYXBDb250cm9sUG9zT2ZmWCddKQoJICAgIAkgICAgfHwgKGludHZhbCgkZm9ybVsnTWFwQ29udHJvbFBvc09mZlgnXSkgIT0gJGZvcm1bJ01hcENvbnRyb2xQb3NPZmZYJ10pKSkgewoJICAgIAkgICAgCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW01hcENvbnRyb2xQb3NPZmZYXSc7CgkgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdNYXBDb250cm9sUG9zT2ZmWScsICRmb3JtKSAKCQkgICAgJiYgKCFpc19udW1lcmljKCRmb3JtWydNYXBDb250cm9sUG9zT2ZmWSddKQoJCQl8fCAoaW50dmFsKCRmb3JtWydNYXBDb250cm9sUG9zT2ZmWSddKSAhPSAkZm9ybVsnTWFwQ29udHJvbFBvc09mZlknXSkpKSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bTWFwQ29udHJvbFBvc09mZlldJzsKCSAgICB9IGVsc2UgaWYgKCFpc19udW1lcmljKCRmb3JtWyd6b29tSW5MZXZlbCddKQoJCSAgICB8fCAoaW50dmFsKCRmb3JtWyd6b29tSW5MZXZlbCddKSAhPSAkZm9ybVsnem9vbUluTGV2ZWwnXSkKCQkgICAgfHwgKCRmb3JtWyd6b29tSW5MZXZlbCddIDwgMCkgfHwgKCRmb3JtWyd6b29tSW5MZXZlbCddID4gMTcpKSB7CgkJJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bem9vbUluTGV2ZWxdJzsKCSAgICB9IGVsc2UgaWYgKCFpc19udW1lcmljKCRmb3JtWydUaHVtYkhlaWdodCddKQoJCSAgICB8fCAoaW50dmFsKCRmb3JtWydUaHVtYkhlaWdodCddKSAhPSAkZm9ybVsnVGh1bWJIZWlnaHQnXSkpIHsKCQkkZXJyb3JbXSA9ICdmb3JtW2Vycm9yXVtUaHVtYkhlaWdodF0nOwoJICAgIH0gZWxzZSB7CgkJLyogU2F2ZSBwYXJhbWV0ZXJzIGlmIHRoZXJlIGhhdmUgYmVlbiBubyBlcnJvcnMgKi8KCQlmb3JlYWNoIChhcnJheSgnTWFwQ29udHJvbFR5cGUnLCAnTWFwQ29udHJvbFBvcycsICd6b29tSW5MZXZlbCcsCgkJCSdNYXBDb250cm9sUG9zT2ZmWCcsICdNYXBDb250cm9sUG9zT2ZmWScsICdNYXBXaW5kb3dUeXBlJywgJ1RodW1iQmFyUG9zJywKCQkJJ1RodW1iSGVpZ2h0JykgYXMgJHNldHRpbmcpIHsKCQkgICAgR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICRzZXR0aW5nLCAkZm9ybVskc2V0dGluZ10pOwoJCX0KCgkJZm9yZWFjaCAoYXJyYXkoJ3Nob3dNYXBUeXBlJywgJ3Nob3dab29tTGlua3MnLCAnc2hvd0l0ZW1TdW1tYXJpZXMnLAoJCQknc2hvd0l0ZW1EZXNjcmlwdGlvbnMnKSBhcyAkc2V0dGluZykgewoJCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJHNldHRpbmcsCgkJCSAgICAoaXNzZXQoJGZvcm1bJHNldHRpbmddKSAmJiAkZm9ybVskc2V0dGluZ10pID8gMSA6IDApOwoJCX0KCgkJJHN0YXR1c1snc2F2ZWQnXSA9IDE7CgoJICAgIH0KCgkgICAgLyogRmlndXJlIG91dCB0aGUgbWV0aG9kIHdlIHdpbGwgdXNlICovCgkgICAgJG1ldGhvZCA9IGVtcHR5KCRlcnJvcikgPyAncmVkaXJlY3QnIDogJ2RlbGVnYXRlJzsKCSAgICAkcmVzdWx0c1snc3RhdHVzJ10gPSAkc3RhdHVzOwoJICAgICRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJICAgICRyZXN1bHRzWyRtZXRob2RdWydzdWJWaWV3J10gPSAnbWFwLk1hcFRoZW1lQWRtaW4nOwoKCX0KCiAgICAgICAgLyogQ2FuY2VsIGhpdCwgcmV0dXJuIHRvIHRoZSBkZWZhdWx0IGFkbWlucGFnZSAqLwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnY2FuY2VsJ10pKSB7CgkgICAgJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSAgICAkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwVGhlbWVBZG1pbic7CgoJfQoJcmV0dXJuIGFycmF5IChudWxsLCAkcmVzdWx0cyk7CiAgICB9Cn0KCi8qKgogKiBAcGFja2FnZSBtYXAKICogQHN1YnBhY2thZ2UgVXNlckludGVyZmFjZQogKi8KY2xhc3MgTWFwVGhlbWVBZG1pblZpZXcgZXh0ZW5kcyBHYWxsZXJ5VmlldyB7CiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeVZpZXc6OmxvYWRUZW1wbGF0ZQogICAgICovCiAgICBmdW5jdGlvbiBsb2FkVGVtcGxhdGUoJiR0ZW1wbGF0ZSwgJiRmb3JtKSB7CgoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvaW5jbHVkZXMvTWFwQWRtaW5WaWV3SW5pdC5pbmMnKTsKCSRmb3JtWydmb3JtTmFtZSddID0gJ01hcFRoZW1lQWRtaW4nOwoJJHRlbXBsYXRlLT5oZWFkKCdtb2R1bGVzL21hcC9pbmNsdWRlcy9Hb29nbGVNYXAuY3NzJyk7CgkkdGVtcGxhdGUtPmphdmFzY3JpcHQoJ21vZHVsZXMvbWFwL0dvb2dsZU1hcC5qcycpOwoKCS8qIHNldHVwIHRoZSBkaXJlY3RvcnkgbGlzdGluZyBmb3IgdGhlIGN1c3RvbSBjb250cm9scyAqLwoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdNYXBDb250cm9sVHlwZScsICRmb3JtKSkgewoJICAgICRmb3JtWydNYXBDb250cm9sVHlwZSddID0gJ1NtYWxsJzsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnTWFwQ29udHJvbFBvcycsICRmb3JtKSkgewoJICAgICRmb3JtWydNYXBDb250cm9sUG9zJ10gPSAnMyc7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ01hcENvbnRyb2xQb3NPZmZYJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ01hcENvbnRyb2xQb3NPZmZYJ10gPSAnMTAnOwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdNYXBDb250cm9sUG9zT2ZmWScsICRmb3JtKSkgewoJICAgICRmb3JtWydNYXBDb250cm9sUG9zT2ZmWSddID0gJzE1JzsKCX0KCgkkZm9ybVsnY29udHJvbGxpc3QnXSA9IEdvb2dsZU1hcFV0aWxpdGllczo6T3B0aW9uRnJvbUZvbGRlcigKCQkkYmFzZWdhbGxlcnlkaXIgLiAnbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzLycsICRmb3JtWydNYXBDb250cm9sVHlwZSddKTsKCWlmICghJGZvcm1bJ2NvbnRyb2xsaXN0J10pIHsKCSAgICAkZm9ybVsnbm9jb250cm9scyddID0gJ1RoZXJlIGlzIG5vIGNvbnRyb2wgYXZhaWxhYmxlJzsKCX0KCgkvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIHVuZGVmaW5lZCBwbHVnaW4gcGFyYW1ldGVycyAqLwoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCd6b29tSW5MZXZlbCcsICRmb3JtKSkgewoJICAgICRmb3JtWyd6b29tSW5MZXZlbCddID0gNTsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnc2hvd1pvb21MaW5rcycsICRmb3JtKSkgewoJICAgICRmb3JtWydzaG93Wm9vbUxpbmtzJ10gPSBmYWxzZTsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnc2hvd0l0ZW1TdW1tYXJpZXMnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnc2hvd0l0ZW1TdW1tYXJpZXMnXSA9IHRydWU7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ3Nob3dJdGVtRGVzY3JpcHRpb25zJywgJGZvcm0pKSB7CgkgICAgJGZvcm1bJ3Nob3dJdGVtRGVzY3JpcHRpb25zJ10gPSBmYWxzZTsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnTWFwQ29udHJvbFR5cGUnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnTWFwQ29udHJvbFR5cGUnXSA9ICdTbWFsbCc7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ01hcENvbnRyb2xQb3MnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnTWFwQ29udHJvbFBvcyddID0gJzMnOwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdNYXBDb250cm9sUG9zT2ZmWCcsICRmb3JtKSkgewoJICAgICRmb3JtWydNYXBDb250cm9sUG9zT2ZmWCddID0gJzEwJzsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnTWFwQ29udHJvbFBvc09mZlknLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnTWFwQ29udHJvbFBvc09mZlknXSA9ICcxNSc7Cgl9CglpZiAoIWFycmF5X2tleV9leGlzdHMoJ01hcFdpbmRvd1R5cGUnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnTWFwV2luZG93VHlwZSddID0gJ2RlZmF1bHQnOwoJfQoJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdUaHVtYkJhclBvcycsICRmb3JtKSkgewoJICAgICRmb3JtWydUaHVtYkJhclBvcyddID0gMDsKCX0KCWlmICghYXJyYXlfa2V5X2V4aXN0cygnVGh1bWJIZWlnaHQnLCAkZm9ybSkpIHsKCSAgICAkZm9ybVsnVGh1bWJIZWlnaHQnXSA9IDYwOwoJfQoKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykgLiAnL2luY2x1ZGVzL01hcEFkbWluRWRpdHMuaW5jJyk7CgoJLyogc2V0dXAgdGhlIGxpc3Qgb2YgSW5mb1dpbmRvdyB0ZW1wbGF0ZXMgKi8KCSRteWRpciA9IGRpcigkYmFzZWdhbGxlcnlkaXIgLiAnbW9kdWxlcy9tYXAvdGVtcGxhdGVzL2luZm93aW5kb3cvJyk7CgkkZm9ybVsnd2luZG93bGlzdCddID0gJyc7CgkvKiBMb29wIHRocm91Z2ggYWxsIGZpbGUgYW5kIGZvbGRlciBpbiB0aGUgZGlyZWN0b3J5ICovCgl3aGlsZSAoJGZpbGUgPSAkbXlkaXItPnJlYWQoKSkgewoJICAgIC8qIGlmIHdlIGhhdmUgYSBmaWxlIHRoZW4gcHJvY2VlZCB3aXRoIGl0ICovCgkgICAgaWYgKEdvb2dsZU1hcFV0aWxpdGllczo6R29vZEZpbGUoJGJhc2VnYWxsZXJ5ZGlyIC4gJ21vZHVsZXMvbWFwL3RlbXBsYXRlcy9pbmZvd2luZG93LycsCgkJICAgICRmaWxlKSkgewoJCSRmb3JtWyd3aW5kb3dsaXN0J10gLj0gJzxvcHRpb24gdmFsdWU9IicgLiBzdWJzdHIoJGZpbGUsIDAsIC00KSAuICciICc7CgkJaWYgKChhcnJheV9rZXlfZXhpc3RzKCdNYXBXaW5kb3dUeXBlJywgJGZvcm0pKQoJCQlhbmQgKCRmb3JtWydNYXBXaW5kb3dUeXBlJ10gPT0gc3Vic3RyKCRmaWxlLCAwLCAtNCkpKSB7CgkJICAgICRmb3JtWyd3aW5kb3dsaXN0J10gLj0gJ3NlbGVjdGVkJzsKCQl9CgkJJGZvcm1bJ3dpbmRvd2xpc3QnXSAuPSAnPicgLiBzdWJzdHIoJGZpbGUsIDAsIC00KSAuICI8L29wdGlvbj5cblx0IjsKCSAgICB9Cgl9CgkkbXlkaXItPmNsb3NlKCk7CgkvKgoJICogSnVzdCBtYWtlIHN1cmUgYW55dGhpbmcgZ290IGNyZWF0ZWQsIGlmLCBub3QgcmV0dXJuIGFuIGVycm9yIHRoYXQgdGhlcmUgaXMgbm8gY29udHJvbCAKCSAqIGF2YWlsYWJsZQoJICovCglpZiAoJGZvcm1bJ3dpbmRvd2xpc3QnXSA9PSAnJykgewoJICAgICRmb3JtWydub3dpbmRvd3MnXSA9ICdUaGVyZSBpcyBubyBJbmZvV2luZG93IFRlbXBsYXRlIGF2YWlsYWJsZSc7Cgl9CgoJaWYgKCR0ZW1wbGF0ZS0+aGFzVmFyaWFibGUoJ1NpdGVBZG1pbicpKSB7CgkgICAgJFNpdGVBZG1pbiA9JiAkdGVtcGxhdGUtPmdldFZhcmlhYmxlQnlSZWZlcmVuY2UoJ1NpdGVBZG1pbicpOwoJICAgICRTaXRlQWRtaW5bJ2VuY3R5cGUnXSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJzsKCX0gZWxzZSB7CgkgICAgJFNpdGVBZG1pblsnZW5jdHlwZSddID0gJ211bHRpcGFydC9mb3JtLWRhdGEnOwoJICAgICR0ZW1wbGF0ZS0+c2V0VmFyaWFibGUoJ1NpdGVBZG1pbicsICRTaXRlQWRtaW4pOwoJfQoKCSR0ZW1wbGF0ZS0+c2V0VmFyaWFibGUoJ2NvbnRyb2xsZXInLCAnbWFwLk1hcFRoZW1lQWRtaW4nKTsKCXJldHVybiBhcnJheShudWxsLCBhcnJheSgnYm9keScgPT4gJ21vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBUaGVtZUFkbWluLnRwbCcpKTsKICAgIH0KfQo/Pg==');
expand_3537250845($outputDir, 'Preloads.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQHZlcnNpb24gJFJldmlzaW9uOiAxMjUzICQKICoKICovCi8qIFdyaXR0ZW4gYnkgTmljIFJvZXRzLiBQbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uICovCmNsYXNzIG1hcFByZWxvYWRzIHsKICAgIGZ1bmN0aW9uIHByZWxvYWQoJiR0ZW1wbGF0ZSwgJHByZWxvYWQsICRwYXJhbVNldCkgewoJc3RhdGljICRsb2FkZWQgPSBmYWxzZTsKCSRsb2FkZWQgPSB0cnVlOwoJJGl0ZW1JZCA9IEdhbGxlcnlVdGlsaXRpZXM6OmdldFJlcXVlc3RWYXJpYWJsZXMoJ2l0ZW1JZCcpOwoJaWYgKCFlbXB0eSgkaXRlbUlkKSkgewoJICAgIGxpc3QgKCRyZXQsICRpdGVtKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkRW50aXRpZXNCeUlkKCRpdGVtSWQpOwoJICAgIGlmICghJHJldCAmJiAvKiBleHRlbmQgdG8gYWxsIGRhdGEgaXRlbXMgPyAqLwoJCSAgICBHYWxsZXJ5VXRpbGl0aWVzOjppc0EoJGl0ZW0sICdHYWxsZXJ5UGhvdG9JdGVtJykpIHsKCQlHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvbWFwSGVscGVyLmNsYXNzJyk7CgkJbGlzdCAoJHJldCwgJHRtcCwgJHBhcmFtLCAkaXNDb250YWluZXJTZXR0aW5ncykgPQoJCQltYXBIZWxwZXI6OmZldGNoRmllbGRWYWx1ZXMoYXJyYXkoJGl0ZW0pLCBudWxsLCAncGhvdG8nKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCQlpZiAoaXNzZXQoJHRtcFskaXRlbS0+Z2V0SWQoKV1bJ0dQUyddKSAmJgoJCQlwcmVnX21hdGNoICgnL14oW14sXSspLCguKikkLycsICR0bXBbJGl0ZW0tPmdldElkKCldWydHUFMnXSwgJHJlZ3MpKSB7CgkJICAgICR0ZW1wbGF0ZS0+aGVhZCgnbW9kdWxlcy9tYXAvdGVtcGxhdGVzL0hlYWRlci50cGwnKTsKCQkgICAgJHRlbXBsYXRlLT5zZXRWYXJpYWJsZSgnbGF0aXR1ZGUnLCAkcmVnc1sxXSk7CgkJICAgICR0ZW1wbGF0ZS0+c2V0VmFyaWFibGUoJ2xvbmdpdHVkZScsICRyZWdzWzJdKTsKCQkgICAgJHRlbXBsYXRlLT5zZXRWYXJpYWJsZSgnaXRlbVRpdGxlJywgJGl0ZW0tPmdldFRpdGxlKCkpOwoJCX0KCSAgICB9Cgl9CglyZXR1cm4gbnVsbDsKICAgIH0KfQo=');
expand_3537250845($outputDir, 'ShowMap.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCiAqLwoKLyoqCiAqIEBwYWNrYWdlIG1hcAogKiBAYXV0aG9yIFN0ZXZlbiBOLiBTZXZlcmluZ2hhdXMgPHNuc0BzZXZlcmluZ2hhdXMub3JnPgogKiBAdmVyc2lvbiAkUmV2aXNpb246IDE1NzYgJAogKgogKiBUaGlzIGltcGxlbWVudHMgdGhlIEdvb2dsZSBtYXAgdmlldwogKiBUaGlzIGlzIHNvbWUgb2YgdGhlIHVnbGllc3QgY29kZSBJJ3ZlIGV2ZXIgd3JpdHRlbi4gUGxlYXNlIGRvIG5vdAogKiBqdWRnZSBtZSBieSBpdC4gOikKICovCgpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvR29vZ2xlTWFwVXRpbGl0aWVzLmNsYXNzJyk7CkdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBIZWxwZXIuY2xhc3MnKTsKCmNsYXNzIFNob3dNYXBDb250cm9sbGVyIGV4dGVuZHMgR2FsbGVyeUNvbnRyb2xsZXIgewogICAgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdCgkZm9ybSkgewoJZ2xvYmFsICRnYWxsZXJ5OwoKCWxpc3QgKCRyZXQsICRtb2R1bGUpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRQbHVnaW4oJ21vZHVsZScsICdtYXAnKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCX0KCgkvKiBXaGVuIHJlcXVlc3RlZCB0byBzYXZlIHRoZSBzZXR0aW5ncyBhbmQgcG9wdWxhdGUgdGhlIEdQUyBjb29yZGluYXRlICovCglpZiAoaXNzZXQoJGZvcm1bJ2NhbmNlbCddKSkgewoJICAgIGlmICgkZm9ybVsncGx1Z2luJ10gPT0gJ0l0ZW1FZGl0JykgewoJCSRyZXN1bHRzWydzdGF0dXMnXSA9ICcnOwoJCSRyZXN1bHRzWydlcnJvciddID0gYXJyYXkoKTsKCQkkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuSXRlbUFkbWluJzsKCQkkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ2NvcmUuSXRlbUVkaXQnOwoJCSRyZXN1bHRzWydyZWRpcmVjdCddWydpdGVtSWQnXSA9ICRmb3JtWydpZCddOwoJCSRyZXN1bHRzWydyZWRpcmVjdCddWydlZGl0UGx1Z2luJ10gPSAnbWFwSXRlbUVkaXQnOwoJICAgIH0KCgkgICAgaWYgKCRmb3JtWydwbHVnaW4nXSA9PSAnR3JvdXBDb29yZCcpIHsKCQkvKiByZXR1cm4gdG8gdGhlIHBhZ2UgIkVkaXQgZ3JvdXAiICovCgkJJHJlc3VsdHNbJ3N0YXR1cyddID0gJyc7CgkJJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoJCSRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJCSRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcEdyb3VwQWRtaW4nOwoJCSRyZXN1bHRzWydyZWRpcmVjdCddWydtb2RlJ10gPSAnQWRkR3JvdXAnOwoJICAgIH0KCgkgICAgaWYgKCRmb3JtWydwbHVnaW4nXSA9PSAnQWRtaW5DZW50ZXInIG9yICRmb3JtWydwbHVnaW4nXSA9PSAnR1ZNRGVmYXVsdCcpIHsKCQkvKiByZXR1cm4gdG8gdGhlIHBhZ2UgIkFkbWluUGFuZWwiICovCgkJJHJlc3VsdHNbJ3N0YXR1cyddID0gJyc7CgkJJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoJCSRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJCSRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcFNpdGVBZG1pbic7CgkgICAgfQoKCSAgICBpZiAoJGZvcm1bJ3BsdWdpbiddID09ICdGaWx0ZXJzJykgewoJCS8qIHJldHVybiB0byB0aGUgcGFnZSAiTGVnZW5kIEFkbWluIFBhbmVsIiAqLwoJCSRyZXN1bHRzWydzdGF0dXMnXSA9ICcnOwoJCSRyZXN1bHRzWydlcnJvciddID0gYXJyYXkoKTsKCQkkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCQkkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ21hcC5NYXBGaWx0ZXJBZG1pbic7CgkJJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ21vZGUnXSA9ICdBZGRGaWx0ZXInOwoJICAgIH0KCX0KCWlmIChpc3NldCgkZm9ybVsnc2F2ZSddKSkgewoJICAgIGlmICgkZm9ybVsncGx1Z2luJ10gPT0gJ0l0ZW1FZGl0JyBvciAkZm9ybVsncGx1Z2luJ10gPT0gJ0dyb3VwQ29vcmQnKSB7CgkJJGdyb3VwaWQgPSBHYWxsZXJ5VXRpbGl0aWVzOjpnZXRSZXF1ZXN0VmFyaWFibGVzKCdncm91cGlkJyk7CgkJaWYgKCFlbXB0eSgkZ3JvdXBpZCkpIHsKCQkgICAgJGlkID0gJGdyb3VwaWQ7CgkJfSBlbHNlIHsKCQkgICAgJGlkID0gJGZvcm1bJ2lkJ107CgkJfQoJCSRjb29yZGluYXRlID0gJGZvcm1bJ2Nvb3JkJ107CgkJJHpvb20gPSAkZm9ybVsnem9vbSddOwoKCQkkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OnJlbW92ZU1hcEVudHJ5KCdtYXBNYXAnLAoJCQlhcnJheSgnaXRlbUlkJyA9PiAkaWQsICdmaWVsZCcgPT4gJ0dQUycpKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCQkvKiBBY3R1YWxseSB1cGRhdGUgdGhlIGRhdGFiYXNlIHdpdGggdGhlIGNvb3JkaW5hdGVkIHBhc3NlZCBvbiB0byB0aGUgSXRlbUlEICovCgkJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphZGRNYXBFbnRyeSgnbWFwTWFwJywKCQkJYXJyYXkoJ2l0ZW1JZCcgPT4gJGlkLCAnZmllbGQnID0+ICdHUFMnLCAndmFsdWUnID0+ICRjb29yZGluYXRlLAoJCQkgICAgICAnc2V0SWQnID0+IDAsICdzZXRUeXBlJyA9PiAxKSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjpyZW1vdmVNYXBFbnRyeSgnbWFwTWFwJywKCQkJYXJyYXkoJ2l0ZW1JZCcgPT4gJGlkLCAnZmllbGQnID0+ICdab29tTGV2ZWwnKSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkJLyogQWN0dWFsbHkgdXBkYXRlIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSB6b29tbGV2ZWwgcGFzc2VkIG9uIHRvIHRoZSBJdGVtSUQgKi8KCQkkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OmFkZE1hcEVudHJ5KCdtYXBNYXAnLAoJCQlhcnJheSgnaXRlbUlkJyA9PiAkaWQsICdmaWVsZCcgPT4gJ1pvb21MZXZlbCcsICd2YWx1ZScgPT4gJHpvb20sCgkJCSAgICAgICdzZXRJZCcgPT4gMCwgJ3NldFR5cGUnID0+IDMpKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCgkJaWYgKCRmb3JtWydwbHVnaW4nXSA9PSAnR3JvdXBDb29yZCcpIHsKCQkgICAgLyogR2V0IHRoZSBjb29yZGluYXRlcyBhbmQgc3VjaCBpbiB0aGUgbWFwIGRhdGFiYXNlICovCgkJICAgICRxdWVyeSA9ICcKCQkgICAgU0VMRUNUCgkJICAgICAgW21hcE1hcDo6ZmllbGRdLAoJCSAgICAgIFttYXBNYXA6OnZhbHVlXQoJCSAgICBGUk9NCgkJICAgICAgW21hcE1hcF0KCQkgICAgV0hFUkUKCQkgICAgICBbbWFwTWFwOjppdGVtSWRdID0gXCcnIC4gJGlkIC4gJ1wnCgkJICAgICc7CgkJICAgIGxpc3QgKCRyZXQsICRyZXN1bHQpID0gJGdhbGxlcnktPnNlYXJjaCgkcXVlcnksIGFycmF5KCksIGFycmF5KCkpOwoKCQkgICAgJHBhcmFtcyA9ICcnOwoJCSAgICB3aGlsZSAoJHBhcmFtID0gJHJlc3VsdC0+bmV4dFJlc3VsdCgpKSB7CgkJCWlmICgkcGFyYW1zICE9ICcnKSB7CgkJCSAgICAkcGFyYW1zID0gJHBhcmFtcyAuICd8JyAuICRwYXJhbVswXSAuICc6JyAuICRwYXJhbVsxXTsKCQkJfSBlbHNlIHsKCQkJICAgICRwYXJhbXMgPSAkcGFyYW1bMF0gLiAnOicgLiAkcGFyYW1bMV07CgkJCX0KCQkgICAgfQoKCQkgICAgR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdFZGl0R3JvdXBQYXJhbScsICRwYXJhbXMpOwoJCX0KCgkJJHJlc3VsdHNbJ3N0YXR1cyddID0gJyc7CgkJJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoKCQlpZiAoJGZvcm1bJ3BsdWdpbiddID09ICdJdGVtRWRpdCcpIHsgLyogcmV0dXJuIHRvIHRoZSBwYWdlICJJdGVtRWRpdCIgKi8KCQkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLkl0ZW1BZG1pbic7CgkJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnY29yZS5JdGVtRWRpdCc7CgkJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydpdGVtSWQnXSA9ICRpZDsKCQkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ2VkaXRQbHVnaW4nXSA9ICdtYXBJdGVtRWRpdCc7CgkJfSBlbHNlIHsgLyogcmV0dXJuIHRvIHRoZSBwYWdlICJFZGl0IEdyb3VwIiAqLwoJCSAgICAkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCQkgICAgJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwR3JvdXBBZG1pbic7CgkJICAgICRyZXN1bHRzWydyZWRpcmVjdCddWydtb2RlJ10gPSAnQWRkR3JvdXAnOwoJCX0KCSAgICB9CgoJICAgIGlmICgkZm9ybVsncGx1Z2luJ10gPT0gJ0FkbWluQ2VudGVyJykgewoKCQlHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ2NlbnRlckxvbmdMYXQnLAoJCQkkZm9ybVsnY29vcmQnXSk7CgkJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICd6b29tTGV2ZWwnLCAkZm9ybVsnem9vbSddKTsKCgkJLyogcmV0dXJuIHRvIHRoZSBwYWdlICJBZG1pblBhbmVsIiAqLwoJCSRyZXN1bHRzWydzdGF0dXMnXSA9ICcnOwoJCSRyZXN1bHRzWydlcnJvciddID0gYXJyYXkoKTsKCQkkcmVzdWx0c1sncmVkaXJlY3QnXVsndmlldyddID0gJ2NvcmUuU2l0ZUFkbWluJzsKCQkkcmVzdWx0c1sncmVkaXJlY3QnXVsnc3ViVmlldyddID0gJ21hcC5NYXBTaXRlQWRtaW4nOwoJICAgIH0KCgkgICAgaWYgKCRmb3JtWydwbHVnaW4nXSA9PSAnR1ZNRGVmYXVsdCcpIHsKCgkJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdHVk1DZW50ZXInLCAkZm9ybVsnY29vcmQnXSk7CgkJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdHVk1ab29tJywgJGZvcm1bJ3pvb20nXSk7CgoJCS8qIHJldHVybiB0byB0aGUgcGFnZSAiQWRtaW5QYW5lbCIgKi8KCQkkcmVzdWx0c1snc3RhdHVzJ10gPSAnJzsKCQkkcmVzdWx0c1snZXJyb3InXSA9IGFycmF5KCk7CgkJJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3ZpZXcnXSA9ICdjb3JlLlNpdGVBZG1pbic7CgkJJHJlc3VsdHNbJ3JlZGlyZWN0J11bJ3N1YlZpZXcnXSA9ICdtYXAuTWFwU2l0ZUFkbWluJzsKCSAgICB9CgoJICAgIGlmICgkZm9ybVsncGx1Z2luJ10gPT0gJ0ZpbHRlcnMnKSB7CgoJCSRvbGRlZGl0ZmlsdGVyID0gR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdFZGl0RmlsdGVyJyk7CgkJaWYgKCFlbXB0eSgkb2xkZWRpdGZpbHRlclsxXSkpIHsKCQkgICAgJG9sZGZpbHRlciA9IGV4cGxvZGUoJ2AnLCAkb2xkZWRpdGZpbHRlclsxXSk7CgkJICAgICRvbGRmaWx0ZXJbMl0gPSAkZm9ybVsnem9vbSddOwoJCSAgICAkb2xkZmlsdGVyWzNdID0gJGZvcm1bJ2Nvb3JkJ107CgoJCSAgICAkbmV3ZWRpdGZpbHRlciA9IGltcGxvZGUoJ2AnLCAkb2xkZmlsdGVyKTsKCQl9IGVsc2UgewoJCSAgICAkb2xkZmlsdGVycyA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnRmlsdGVycycpOwoJCSAgICBpZiAoIWVtcHR5KCRvbGRmaWx0ZXJzWzFdKSkgewoJCQkkY3VycmVudGZpbHRlcnMgPSBleHBsb2RlKCd8JywgJG9sZGZpbHRlcnNbMV0pOwoJCQlmb3JlYWNoICgkY3VycmVudGZpbHRlcnMgYXMgJGZpbHRlcmluZm9zKSB7CgkJCSAgICAkaW5mb3MgPSBleHBsb2RlKCdgJywgJGZpbHRlcmluZm9zKTsKCQkJICAgICRpZHNbXSA9ICRpbmZvc1swXTsKCQkJfQoJCQkkbmV3aWQgPSBtYXgoJGlkcykgKyAxOwoJCQkkbmV3ZWRpdGZpbHRlciA9ICRuZXdpZCAuICdgYCcgLiAkZm9ybVsnem9vbSddIC4gJ2AnIC4gJGZvcm1bJ2Nvb3JkJ107CgkJICAgIH0gZWxzZSB7CgkJCSRuZXdlZGl0ZmlsdGVyID0gJzFgYCcgLiAkZm9ybVsnem9vbSddIC4gJ2AnIC4gJGZvcm1bJ2Nvb3JkJ107CgkJICAgIH0KCQl9CgoJCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnRWRpdEZpbHRlcicsICRuZXdlZGl0ZmlsdGVyKTsKCgkJLyogcmV0dXJuIHRvIHRoZSBwYWdlICJMZWdlbmQgQWRtaW4gUGFuZWwiICovCgkJJHJlc3VsdHNbJ3N0YXR1cyddID0gJyc7CgkJJHJlc3VsdHNbJ2Vycm9yJ10gPSBhcnJheSgpOwoJCSRyZXN1bHRzWydyZWRpcmVjdCddWyd2aWV3J10gPSAnY29yZS5TaXRlQWRtaW4nOwoJCSRyZXN1bHRzWydyZWRpcmVjdCddWydzdWJWaWV3J10gPSAnbWFwLk1hcEZpbHRlckFkbWluJzsKCQkkcmVzdWx0c1sncmVkaXJlY3QnXVsnbW9kZSddID0gJ0FkZEZpbHRlcic7CgkgICAgfQoKCX0KCglyZXR1cm4gYXJyYXkobnVsbCwgJHJlc3VsdHMpOwogICAgfQp9CgpjbGFzcyBTaG93TWFwVmlldyBleHRlbmRzIEdhbGxlcnlWaWV3IHsKCiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeVZpZXc6OmxvYWRUZW1wbGF0ZQogICAgICovCiAgICBmdW5jdGlvbiBsb2FkVGVtcGxhdGUoJiR0ZW1wbGF0ZSwgJiRmb3JtKSB7CglnbG9iYWwgJGdhbGxlcnk7CgkkcGxhdGZvcm0gPSAkZ2FsbGVyeS0+Z2V0UGxhdGZvcm0oKTsKCQoJbGlzdCAoJHJldCwgJG1vZHVsZSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZFBsdWdpbignbW9kdWxlJywgJ21hcCcpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsLCBudWxsKTsKCX0KCgkvKiBHZXQgdGhlIHJlYWwgcGF0aCBmb3IgdGhlIG1hcCBtb2R1bGUgaW5zdGFsbGF0aW9uICovCgkvKiogQHRvZG8gZm9yIGdhbGxlcnkgMi4zIGFuZCBsYXRlciBjaGFuZ2UgdGhpcyB0byB1c2UgZ2V0Q29kZUJhc2VQYXRoKCkgKi8KCS8qJG1hcE1vZEJhc2VEaXIgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luQmFzZURpcignbW9kdWxlJywgJ21hcCcpIC4gJ21vZHVsZXMvbWFwLyc7Ki8KCSRtYXBNb2RCYXNlRGlyID0gZGlybmFtZShfX0ZJTEVfXykgLiAnLyc7CgoJLyogSW5jbHVkZSBoZWFkZXIgdGhhdCBsaW5rcyB0byB0aGUgR29vZ2xlIE1hcHMgc2NyaXB0ICovCgoJJHRlbXBsYXRlLT5oZWFkKCdtb2R1bGVzL21hcC90ZW1wbGF0ZXMvTWFwSGVhZGVyLnRwbCcpOwoKCWxpc3QgKCRyZXQsICRwYXJhbSkgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hBbGxQbHVnaW5QYXJhbWV0ZXJzKCdtb2R1bGUnLCAnbWFwJyk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiBhcnJheSgkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwpOwoJfQoKCS8qIGNyZWF0ZXMgdGhlIGFycmF5IHRoYXQgd2lsbCBiZSBsYXRlciBwYXNzZWQgb24gdG8gU2hvd01hcC5pbmMgKi8KCSRtYXAgPSBhcnJheSgpOwoJZm9yZWFjaCAoJHBhcmFtIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkgICAgJG1hcFska2V5XSA9ICRwYXJhbVska2V5XTsKCX0KCgkvKiogQHRvZG8gQXJlbid0IHRoZXNlIGFscmVhZHkgY292ZXJlZCBieSB0aGUgZm9yZWFjaCgpIGFib3ZlPyAqLwoJaWYgKGFycmF5X2tleV9leGlzdHMoJ1RodW1iQmFyUG9zJywgJHBhcmFtKSkgewoJICAgICRtYXBbJ1RodW1iQmFyUG9zJ10gPSAkcGFyYW1bJ1RodW1iQmFyUG9zJ107Cgl9CglpZiAoYXJyYXlfa2V5X2V4aXN0cygnVGh1bWJIZWlnaHQnLCAkcGFyYW0pKSB7CgkgICAgJG1hcFsnVGh1bWJIZWlnaHQnXSA9ICRwYXJhbVsnVGh1bWJIZWlnaHQnXTsKCX0KCgkkbWFwWyd1c2VNYXJrZXJTZXQnXSA9ICdub25lJzsKCSRtYXBbJ3VzZUFsYnVtTWFya2VyU2V0J10gPSAnbm9uZSc7CgkkbWFwWyd1c2VHcm91cE1hcmtlclNldCddID0gJ25vbmUnOwoJaWYgKGFycmF5X2tleV9leGlzdHMoJ3VzZU1hcmtlclNldCcsICRwYXJhbSkKCQlhbmQgJHBsYXRmb3JtLT5pc19kaXIoJG1hcE1vZEJhc2VEaXIgLiAnaW1hZ2VzL21hcmtlcnMvJwoJCSAgICAgICAgICAgLiAkcGFyYW1bJ3VzZU1hcmtlclNldCddKSkgewoJICAgICRtYXBbJ3VzZU1hcmtlclNldCddID0gJHBhcmFtWyd1c2VNYXJrZXJTZXQnXTsKCX0KCWlmIChhcnJheV9rZXlfZXhpc3RzKCd1c2VHcm91cE1hcmtlclNldCcsICRwYXJhbSkKCQkmJiAkcGxhdGZvcm0tPmlzX2RpcigkbWFwTW9kQmFzZURpciAuICdpbWFnZXMvbWFya2Vycy8nCgkJCQkgICAgIC4gJHBhcmFtWyd1c2VHcm91cE1hcmtlclNldCddKSkgewoJICAgICRtYXBbJ3VzZUdyb3VwTWFya2VyU2V0J10gPSAkcGFyYW1bJ3VzZUdyb3VwTWFya2VyU2V0J107Cgl9IGVsc2UgewoJICAgICRtYXBbJ3VzZUdyb3VwTWFya2VyU2V0J10gPSAkcGFyYW1bJ3VzZU1hcmtlclNldCddOwoJfQoJaWYgKGFycmF5X2tleV9leGlzdHMoJ3VzZUFsYnVtTWFya2VyU2V0JywgJHBhcmFtKQoJCSYmICRwbGF0Zm9ybS0+aXNfZGlyKCRtYXBNb2RCYXNlRGlyIC4gJ2ltYWdlcy9tYXJrZXJzLycKCQkJCSAgICAgLiAkcGFyYW1bJ3VzZUFsYnVtTWFya2VyU2V0J10pKSB7CgkgICAgJG1hcFsndXNlQWxidW1NYXJrZXJTZXQnXSA9ICRwYXJhbVsndXNlQWxidW1NYXJrZXJTZXQnXTsKCX0gZWxzZSB7CgkgICAgJG1hcFsndXNlQWxidW1NYXJrZXJTZXQnXSA9ICRtYXBbJ3VzZU1hcmtlclNldCddOwoJfQoKCS8qIEdldCB0aGUgQVBJIGtleSBmb3IgdGhpcyBVUkwgKi8KCWxpc3QgKCRyZXQsICRtYXBbJ2dvb2dsZU1hcEtleSddKSA9IG1hcEhlbHBlcjo6ZmV0Y2hBcGlLZXkoKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQ7Cgl9CgkKCSRtYXBbJ1dpZHRoRm9ybWF0J10gPSAoaXNzZXQoJHBhcmFtWydNYXBXaWR0aEZvcm1hdCddKSBhbmQgJHBhcmFtWydNYXBXaWR0aEZvcm1hdCddID09ICcyJykgPyAnJScgOiAncHgnOwoJJG1hcFsnSGVpZ2h0Rm9ybWF0J10gPSAoaXNzZXQoJHBhcmFtWydNYXBIZWlnaHRGb3JtYXQnXSkgYW5kICRwYXJhbVsnTWFwSGVpZ2h0Rm9ybWF0J10gPT0gJzInKSA/ICclJyA6ICdweCc7CgkkbWFwWydtYXBXaWR0aCddID0gaXNzZXQoJHBhcmFtWydtYXBXaWR0aCddKSA/ICRwYXJhbVsnbWFwV2lkdGgnXSA6ICc2MDAnOwoJJG1hcFsnbWFwSGVpZ2h0J10gPSBpc3NldCgkcGFyYW1bJ21hcEhlaWdodCddKSA/ICRwYXJhbVsnbWFwSGVpZ2h0J10gOiAnNDAwJzsKCSRtYXBbJ21hcFR5cGUnXSA9IGlzc2V0KCRwYXJhbVsnbWFwVHlwZSddKSA/ICRwYXJhbVsnbWFwVHlwZSddIDogJ0dfU0FURUxMSVRFX1RZUEUnOwoKCSRtYXBbJ21vZGUnXSA9IEdhbGxlcnlVdGlsaXRpZXM6OmdldFJlcXVlc3RWYXJpYWJsZXMoJ01vZGUnKTsKCSRmdWxsU2NyZWVuID0gR2FsbGVyeVV0aWxpdGllczo6Z2V0UmVxdWVzdFZhcmlhYmxlcygnZnVsbFNjcmVlbicpOwoKCWlmIChlbXB0eSgkbWFwWydtb2RlJ10pKSB7CgkgICAgJG1hcFsnbW9kZSddID0gJ05vcm1hbCc7Cgl9CgoJLyogIk5vcm1hbCIgTW9kZSB0byBkaXNwbGF5IHRoZSBtYXAgKi8KCgkkc3RvcmFnZSA9JiAkZ2FsbGVyeS0+Z2V0U3RvcmFnZSgpOwoJJGd1cmwgPSYgJGdhbGxlcnktPmdldFVybEdlbmVyYXRvcigpOwoKCSRtYXBbJ2dhbGxlcnliYXNlJ10gPSAkZ3VybC0+Z2VuZXJhdGVVcmwoYXJyYXkoJ2hyZWYnID0+ICcnKSwgCgkgICAgYXJyYXkoJ2ZvcmNlRnVsbFVybCcgPT4gdHJ1ZSkpOwoKCXVuc2V0ICgkbWFwWyd6b29tTGV2ZWwnXSk7CgoJaWYgKCRtYXBbJ21vZGUnXSA9PSAnTm9ybWFsJykgewoKCSAgICAkbWFwWydFbmFibGVSb3V0ZU51bWJlciddID0gaXNzZXQoJHBhcmFtWydFbmFibGVSb3V0ZU51bWJlciddKSAKCSAgICAJCQkJPyAkcGFyYW1bJ0VuYWJsZVJvdXRlTnVtYmVyJ10gCgkgICAgCQkJCTogMDsKCgkgICAgJGNvbG9yID0gbWFwSGVscGVyOjpnZXRJdGVtQ29sb3IoMTc3KTsKCgkgICAgLyogR2V0IHRoZSBpdGVtcyB3aXRoIEdQUyBjb29yZGluYXRlcyAqLwoJICAgIGxpc3QgKCRyZXQsICRncHNpdGVtcykgPSBtYXBIZWxwZXI6OmdldEdQU0l0ZW1zKCk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gYXJyYXkgKCRyZXQsIG51bGwpOwoJICAgIH0KCgkgICAgaWYgKGNvdW50KCRncHNpdGVtcykgPiAwKSB7CgkJJG1hcFsnbm9ncHNjb29yZHMnXSA9IGZhbHNlOwoKCQkvKiBHZXQgdGhlIHBhcmVudCBzZXF1ZW5jZXMgKi8KCQkkTGV2ZWxGaWx0ZXJSb290ID0gaXNzZXQoJHBhcmFtWydMZXZlbEZpbHRlclJvb3QnXSkgPyAkcGFyYW1bJ0xldmVsRmlsdGVyUm9vdCddIDogMDsKCQkkTGV2ZWxGaWx0ZXJBbGwgPSBpc3NldCgkcGFyYW1bJ0xldmVsRmlsdGVyQWxsJ10pID8gJHBhcmFtWydMZXZlbEZpbHRlclJvb3QnXSA6IDA7CgkJJGFsYnVtZmlsdGVyID0gaHRtbF9lbnRpdHlfZGVjb2RlKEdhbGxlcnlVdGlsaXRpZXM6OmdldFJlcXVlc3RWYXJpYWJsZXMoJ2FsYnVtJykpOwoKCQlsaXN0ICgkcmV0LCAkcGFyZW50c2VxdWVuY2VzKSA9IAoJCSAgICBtYXBIZWxwZXI6OmdldFBhcmVudFNlcXVlbmNlKCRncHNpdGVtcywgJExldmVsRmlsdGVyUm9vdCwgJExldmVsRmlsdGVyQWxsLCAkYWxidW1maWx0ZXIpOwoJCWlmICgkcmV0KSB7CgkJICAgIHJldHVybiBhcnJheSAoJHJldCwgbnVsbCk7CgkJfQoKCQkvKiBHZXQgdGhlIGdyb3VwcyAqLwoJCWxpc3QgKCRyZXQsICRncm91cHMpID0gbWFwSGVscGVyOjpnZXRHUFNHcm91cHMoJG1hcFsnVGh1bWJIZWlnaHQnXSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuIGFycmF5ICgkcmV0LCBudWxsKTsKCQl9CgoJCS8qIG1ha2UgdGhlIHBvaW50IEhhc2ggYXJyYXkgKi8KCQkkcG9pbnRIYXNoID0gJGdwc2l0ZW1zICsgJGdyb3VwczsKCQkkaWRzID0gYXJyYXlfa2V5cygkZ3BzaXRlbXMpOwoKCQkkaXNncm91cCA9IEdhbGxlcnlVdGlsaXRpZXM6OmdldFJlcXVlc3RWYXJpYWJsZXMoJ0dyb3VwJyk7CgkJaWYgKCFlbXB0eSgkaXNncm91cCkpIHsKCQkgICAgLyoqIHRvZG8gYWRkIHRoaXMgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBpdGVtcyAqLwoJCSAgICAvKiBXZSdyZSBkZWFsaW5nIHdpdGggYSBncm91cCBkaXNwbGF5LCByZW1vdmluZyBhbGwgaXRlbSBub3QgaW4gdGhlIGdyb3VwICovCgkJICAgIC8qIEdldCB0aGUgZ3JvdXAgKi8KCQkgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ01hcEdyb3VwcycsICRwYXJhbSkgYW5kICRwYXJhbVsnTWFwR3JvdXBzJ10gIT0gJycpIHsKCQkJLyogd2UgaGF2ZSBzb21lIGdyb3VwcywgbGV0J3MgY2hlY2sgKi8KCQkJJGFsbGdyb3VwcyA9IGV4cGxvZGUoJ3wnLCAkcGFyYW1bJ01hcEdyb3VwcyddKTsKCQkJJHRoZW9uZWdyb3VwID0gYXJyYXkoKTsKCQkJZm9yZWFjaCAoJGFsbGdyb3VwcyBhcyAkYWdyb3VwKSB7CgkJCSAgICAkdG1wID0gZXhwbG9kZSgnYCcsICRhZ3JvdXApOwoJCQkgICAgaWYgKCdHJyAuICR0bXBbMF0gPT0gJGlzZ3JvdXApIHsKCQkJCSR0aGVvbmVncm91cCA9ICR0bXA7CgkJCSAgICB9CgkJCX0KCQkJaWYgKCFlbXB0eSgkdGhlb25lZ3JvdXApKSB7CgkJCSAgICAkbWFwWydGaWx0ZXInXSA9ICdHcm91cDogJyAuICR0aGVvbmVncm91cFsxXSAuICcgIDxhIGhyZWY9JwoJCQkJICAgIC4gJGd1cmwtPmdlbmVyYXRlVXJsKAoJCQkJCWFycmF5KCd2aWV3JyA9PiAnbWFwLlNob3dNYXAnLCAnR3JvdXAnID0+ICcnKSwKCQkJCQlhcnJheSgnZm9yY2VGdWxsVXJsJyA9PiB0cnVlKSkKCQkJCSAgICAuICc+U2hvdyBBbGw8L2E+JzsKCQkJICAgICROdW1iZXJPZklkcyA9IGNvdW50KCRpZHMpOwoJCQkgICAgZm9yICgkaSA9IDA7ICRpIDwgJE51bWJlck9mSWRzOyAkaSsrKSB7CgkJCQkkaW5Hcm91cCA9IGZhbHNlOwoJCQkJZm9yICgkaiA9IDY7ICRqIDwgY291bnQoJHRoZW9uZWdyb3VwKTsgJGorKykgewoJCQkJICAgIGlmICgkdGhlb25lZ3JvdXBbJGpdID09ICRpZHNbJGldKSB7CgkJCQkJJGluR3JvdXAgPSB0cnVlOwoJCQkJICAgIH0KCQkJCX0KCQkJCWlmICghJGluR3JvdXApIHsKCQkJCSAgICB1bnNldCgkcG9pbnRIYXNoWyRpZHNbJGldXSk7CgkJCQkgICAgdW5zZXQoJGlkc1skaV0pOwoJCQkJfQoJCQkgICAgfQoJCQl9IGVsc2UgeyAvKiBObyBncm91cCBmb3VuZCBjb3JyZXNwb25kaW5nLCBqb2tlID8gKi8KCQkJICAgICRtYXBbJ0dyb3VwSGFja2luZ0Vycm9yJ10gPSAxOwoJCQl9CgkJICAgIH0gZWxzZSB7IC8qIE5vIGdyb3VwcyBhdCBhbGwgLi4uICovCgkJCSRtYXBbJ0dyb3VwSGFja2luZ0Vycm9yJ10gPSAxOwoJCSAgICB9CgkJICAgICRpZHMgPSBhcnJheV92YWx1ZXMoJGlkcyk7CgkJfQoKCQlpZiAoY291bnQoJGlkcykgPiAwKSB7CgkJICAgICRtYXBbJ25vaXRlbXBlcm1zJ10gPSBmYWxzZTsKCgkJICAgIC8qIEdldCB0aGUgbGlzdCBvZiBhbGJ1bSB3aXRoIEdQUyBJdGVtIGluIHRoZW0gKi8KCQkgICAgJG1hcFsnbGlzdGFsYnVtcyddID0gJHBhcmVudHNlcXVlbmNlczsKCQkgICAgJHRlbXAgPSBhcnJheSgpOwoJCSAgICBmb3JlYWNoICgkbWFwWydsaXN0YWxidW1zJ10gYXMgJHRtcCkgewoJCQkkdGVtcFtdID0gaW1wbG9kZSgnYCcsICR0bXApOwoJCSAgICB9CgkJICAgICRsaXN0b2ZhbGJ1bXMgPSBpbXBsb2RlKCdgJywgYXJyYXlfdW5pcXVlKCR0ZW1wKSk7CgkJICAgICR0ZW1wID0gZXhwbG9kZSgnYCcsICRsaXN0b2ZhbGJ1bXMpOwoJCSAgICAkbGlzdG9mYWxidW1zID0gaW1wbG9kZSgnYCcsIGFycmF5X3VuaXF1ZSgkdGVtcCkpOwoJCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ2FsYnVtbGlzdCcsICRsaXN0b2ZhbGJ1bXMpOwoKCQkgICAgLyogVHJpbSB0aGUgbGlzdCBpZiB0aGUgIkFsYnVtIiBmaWx0ZXIgaXMgT04gKi8KCQkgICAgLyogJGFsYnVtZmlsdGVyID0gR2FsbGVyeVV0aWxpdGllczo6Z2V0UmVxdWVzdFZhcmlhYmxlcygnYWxidW0nKTsgKi8KCQkgICAgbGlzdCAoJHJldCwgJFRoZVJvb3QpID0KCQkJICAgIEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdjb3JlJywgJ2lkLnJvb3RBbGJ1bScpOwoJCSAgICBpZiAoJHJldCkgewoJCSAgICAJcmV0dXJuIGFycmF5ICgkcmV0LCBudWxsKTsKCQkgICAgfQoKCQkgICAgJG1hcFsnbm9pdGVtaW5hbGJ1bSddID0gZmFsc2U7CgkJICAgIGlmICghZW1wdHkoJGFsYnVtZmlsdGVyKSkgewoJCSAgICAJLyoqIEB0b2RvOiBJbmNsdWRlIGEgbWFya2VyIGZvciB0aGUgYWxidW0gaWYgaXQgaGFzIGNvb3JkaW5hdGVzICovCgkJCSRtYXBbJ0ZpbHRlciddID0gJ0FsYnVtOiAnIC4gJGFsYnVtZmlsdGVyOwoJCQkkTnVtYmVyT2ZJZHMgPSBjb3VudCgkaWRzKTsKCQkJZm9yICgkaSA9IDA7ICRpIDwgJE51bWJlck9mSWRzOyAkaSsrKSB7CgkJCSAgICAkcG9zID0gJGlkc1skaV07CgkJCSAgICAkSW5BbGJ1bSA9IGZhbHNlOwoJCQkgICAgaWYgKCRwb3MgIT0gJFRoZVJvb3QpIHsKCQkJCWZvciAoJGogPSAwOyAkaiA8IGNvdW50KCRwYXJlbnRzZXF1ZW5jZXNbJHBvc10pOyAkaisrKSB7CgkJCQkgICAgaWYgKHN0cnRvbG93ZXIoJHBhcmVudHNlcXVlbmNlc1skcG9zXVskal0pCgkJCQkJICAgID09IHN0cnRvbG93ZXIoJGFsYnVtZmlsdGVyKSkgewoJCQkJCSRJbkFsYnVtID0gdHJ1ZTsKCQkJCQlicmVhazsKCQkJCSAgICB9CgkJCQl9CgkJCSAgICB9CgkJCSAgICBpZiAoISRJbkFsYnVtKSB7CgkJCQl1bnNldCAoJHBvaW50SGFzaFskcG9zXSk7CgkJCQl1bnNldCAoJGlkc1skaV0pOwoJCQkgICAgfQoJCQl9CgkJICAgIH0KCgkJICAgICRpZHMgPSBhcnJheV92YWx1ZXMoJGlkcyk7CgoJCSAgICBpZiAoY291bnQoJGlkcykgPiAwKSB7CgkJICAgIC8qIHByZXBhcmUgZm9yIHJlZ3JvdXBpbmcgKi8KCQkJZm9yZWFjaCAoJGlkcyBhcyAkaWQpIHsKCQkJICAgICRwb2ludEhhc2hbJGlkXVsncmVncm91cFNob3dIaWdoJ10gPSAwOwoJCQkgICAgJHBvaW50SGFzaFskaWRdWydyZWdyb3VwU2hvd0xvdyddID0gMTk7CgkJCSAgICAkcGFyZW50SWQgPSAkcG9pbnRIYXNoWyRpZF1bJ3BhcmVudElkJ107CgoJCQkgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJHBvaW50SGFzaFskaWRdWydwYXJlbnRJZCddLCAkcG9pbnRIYXNoKQoJCQkJICAgIGFuZCAoYXJyYXlfa2V5X2V4aXN0cygncmVncm91cEFsYnVtcycsICRwYXJhbSkKCQkJCSAgICBhbmQgYXJyYXlfa2V5X2V4aXN0cygncmVncm91cERpc3QnLCAkcGFyYW0pCgkJCQkgICAgYW5kICgkcGFyYW1bJ3JlZ3JvdXBBbGJ1bXMnXSA9PSAxKSkpIHsKCQkJCSRwb2ludEhhc2hbJGlkXVsncGFyZW50RGlzdCddID0gMTsKCQkJCSRwb2ludEhhc2hbJHBhcmVudElkXVsnaGFzQ2hpbGQnXSA9IHRydWU7CgkJCSAgICB9IGVsc2UgewoJCQkJJHBvaW50SGFzaFskaWRdWydwYXJlbnREaXN0J10gPSAtMTsKCQkJCSRwb2ludEhhc2hbJGlkXVsnaGFzSGlkZGVuQ2hpbGQnXSA9IGZhbHNlOwoJCQkgICAgfQoJCQkgICAgJHBvaW50SGFzaFskaWRdWydncm91cCddID0gLTE7CgkJCSAgICAkcG9pbnRIYXNoWyRpZF1bJ2Rpc3BsYXknXSA9IHRydWU7CgkJCX0KCQkJCQkJCgkJCS8qIEFsYnVtIFJlZ3JvdXAgKi8KCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJ3JlZ3JvdXBBbGJ1bXMnLCAkcGFyYW0pIGFuZCBhcnJheV9rZXlfZXhpc3RzKCdyZWdyb3VwRGlzdCcsICRwYXJhbSkgCgkJCQkJYW5kICRwYXJhbVsncmVncm91cEFsYnVtcyddID09IDEpIHsKCQkJICAgICRtYXBbJ3JlZ3JvdXBBbGJ1bXMnXSA9IHRydWU7CgkJCQkkcG9pbnRIYXNoID0gR29vZ2xlTWFwVXRpbGl0aWVzOjp1cGRhdGVBcnJheUZvckFsYnVtUmVncm91cCgkcG9pbnRIYXNoLCAkcGFyYW1bJ3JlZ3JvdXBEaXN0J10pOwoJCQl9IGVsc2UgewoJCQkgICAgJG1hcFsncmVncm91cEFsYnVtcyddID0gZmFsc2U7CgkJCX0KCgkJCSRtYXBQb2ludHMgPSAkcG9pbnRIYXNoOwoKCQkJLyogaXRlbSBSZWdyb3VwICovCgkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCdyZWdyb3VwSXRlbXMnLCAkcGFyYW0pCgkJCQlhbmQgJHBhcmFtWydyZWdyb3VwSXRlbXMnXSkgewoJCQkgICAgJG1hcFsncmVncm91cEl0ZW1zJ10gPSB0cnVlOwoJCQkgICAgJG1hcFsncmVncm91cEljb24nXSA9ICRwYXJhbVsncmVncm91cEljb24nXTsKCQkJICAgICRpY29uc2l6ZSA9ICRwbGF0Zm9ybS0+Z2V0aW1hZ2VzaXplKCRtYXBNb2RCYXNlRGlyIC4gJ2ltYWdlcy9tdWx0aS8nCgkJCQkgICAgLiAkcGFyYW1bJ3JlZ3JvdXBJY29uJ10gLiAnLnBuZycpOwoJCQkgICAgJG1hcFsnUmVwbGFjZU1hcmtlclNpemVYJ10gPSAkaWNvbnNpemVbMF07CgkJCSAgICAkbWFwWydSZXBsYWNlTWFya2VyU2l6ZVknXSA9ICRpY29uc2l6ZVsxXTsKCQkJICAgIGlmICgkcGFyYW1bJ3JlZ3JvdXBJY29uJ10gPT0gJ3pvb20taW4tdHJhbnMnKSB7CgkJCQkkbWFwWydyZXBsYWNlQW5jaG9yUG9zJ10gPSAnJyAuICgkaWNvbnNpemVbMF0gLyAyKSAuICcsICcKCQkJCQkuICgkaWNvbnNpemVbMV0gLyAyKTsKCQkJICAgIH0gZWxzZSB7CgkJCQkkbWFwWydyZXBsYWNlQW5jaG9yUG9zJ10gPSAnJyAuICgkaWNvbnNpemVbMF0gLyAyKSAuICcsICcKCQkJCQkuICRpY29uc2l6ZVsxXTsKCQkJICAgIH0KCgkJCSAgICAkcmVncm91cERpc3QgPSAkcGFyYW1bJ3JlZ3JvdXBEaXN0J107CgkJCSAgICAkc2hvd0l0ZW1zID0gYXJyYXkoKTsKCQkJICAgICRzaG93R3JvdXBzID0gYXJyYXkoKTsKCQkJICAgICRncm91cHMgPSBhcnJheSgpOwoJCQkgICAgJG5iZ3JvdXBzID0gMDsKCQkJICAgICRkaXN0YW5jZXMgPSBhcnJheSgpOwoJCQkgICAgJGdyb3VwSXRlbURpc3RzID0gYXJyYXkoKTsKCQkJICAgICRncm91cERpc3RzID0gYXJyYXkoKTsKCQkJICAgICRuYnBvaW50cyA9IGNvdW50KCRtYXBQb2ludHMpOwoKJERFQlVHX1JFR1JPVVAgPSBmYWxzZTsgLyogc2V0IHRydWUgdG8gb3V0cHV0IHVnbHkgcmVncm91cCBmZWF0dXJlIGRlYnVnIGluZm8gaW5zdGVhZCBvZiBhIG5pY2UgbWFwICovCgkJCSAgICBmb3IgKCR6ID0gMTk7ICR6ID49IDA7ICR6LS0pIHsKaWYgKCRERUJVR19SRUdST1VQKSBwcmludCAiIC0tLS0tLS0tLS0tLS0tIFpPT01MRVZFTCAkeiAtLS0tLS0tLS0tLS0tLS0tLVxuIjsKCQkJCS8qCgkJCQkgKiB1bnNldCBwb2ludHMgdGhhdCBhcmUgbm90IHZpc2libGUgYW5kIHNldCBuZXcgcG9pbnRzCgkJCQkgKiAoYWxidW0gYmFzZWQpCgkJCQkgKi8KCQkJCWZvcmVhY2ggKCRtYXBQb2ludHMgYXMgJGlkID0+ICRwb2ludCkgewoJCQkJICAgIGlmICgkeiA8ICRwb2ludFsncmVncm91cFNob3dIaWdoJ10pIHsKCQkJCQkvKiBpdGVtIG5vIGxvbmdlciB2aXNpYmxlIGJlY2F1c2Ugb2YgYWxidW0gcmVncm91cCAqLwoJCQkJCSRtYXBQb2ludHNbJGlkXVsnZGlzcGxheSddID0gZmFsc2U7CgkJCQkJaWYgKGlzc2V0KCRzaG93SXRlbXNbJGlkXSkpIHsKCQkJCQkgICAgdW5zZXQoJHNob3dJdGVtc1skaWRdKTsKCQkJCQl9CgkJCQkgICAgfSBlbHNlIGlmICgoJHogPD0gJHBvaW50WydyZWdyb3VwU2hvd0xvdyddKQoJCQkJCSAgICAmJiAoJHogPj0gJHBvaW50WydyZWdyb3VwU2hvd0hpZ2gnXSkpIHsKCQkJCQkvKiBhbGJ1bSBpdGVtIHBvcHBlZCBpbiBhdCB0aGlzIGxldmVsICovCgkJCQkJaWYgKCFpc3NldCgkc2hvd0l0ZW1zWyRpZF0pKSB7CgkJCQkJICAgICRzaG93SXRlbXNbJGlkXSA9IHRydWU7CgkJCQkJfQoJCQkJCSRtYXBQb2ludHNbJGlkXVsnZGlzcGxheSddID0gdHJ1ZTsKCQkJCSAgICB9CgkJCQl9CgkJCQkvKiBjaGVjayBmaXJzdCBpZiBhbnkgaXRlbXMgY2FuIGJlIGFkZGVkIHRvIGFuIGV4aXN0aW5nIGdyb3VwICovCgkJCQlmb3JlYWNoICgkc2hvd0l0ZW1zIGFzICRpZCA9PiAkdHJ1ZTIpIHsKCQkJCSAgICBmb3JlYWNoICgkc2hvd0dyb3VwcyBhcyAkZ3JvdXBJZCA9PiAkdHJ1ZSkgewoJCQkJCWlmICgkbWFwUG9pbnRzWyRpZF1bJ2Rpc3BsYXknXSkgewoJCQkJCSAgICAvKiBpZiBub3QsIHRoZXkgYXJlIGFscmVhZHkgaW4gYSBwcmV2aW91cyBncm91cCAqLwoJCQkJCSAgICAkZ3JvdXBJdGVtRGlzdHNbJGdyb3VwSWRdWyRpZF0gPQoJCQkJCQkgICAgbWFwSGVscGVyOjpQaXhlbERpc3RhbmNlKAoJCQkJCQkJICAgICRtYXBQb2ludHNbJGlkXVsnZ3BzJ10sCgkJCQkJCQkgICAgJGdyb3Vwc1skZ3JvdXBJZF1bJ2dwcyddLCAkeik7CgkJCQkJICAgICRwaXhkaXN0ID0gJGdyb3VwSXRlbURpc3RzWyRncm91cElkXVskaWRdOwoJCQkJCSAgICBpZiAoJHBpeGRpc3QgPD0gJHJlZ3JvdXBEaXN0KSB7CgkJCQkJCWlmICgkbWFwUG9pbnRzWyRpZF1bJ3JlZ3JvdXBTaG93TG93J10gPT0gJHopIHsKaWYgKCRERUJVR19SRUdST1VQKSBwcmludCAiIElURU0gJGlkIE5FVkVSIFNIT1dTIFVQXG4iOwoJCQkJCQkgICAgLyoKCQkJCQkJICAgICAqIGluIHRoaXMgY2FzZSwgd2UgZG9uJ3QgYWRkIHRoZSBtYXJrZXIgdG8KCQkJCQkJICAgICAqIHRoZSBncm91cCBiZWNhdXNlIGl0IHdhcyBuZXZlciBzaG93ZWQuCgkJCQkJCSAgICAgKi8KCgkJCQkJCSAgICAvKiBkbyBub3RoaW5nICovCgkJCQkJCSAgICAkbWFwUG9pbnRzWyRpZF1bJ2Rpc3BsYXknXSA9IGZhbHNlOwoJCQkJCQkgICAgJG1hcFBvaW50c1skaWRdWydyZWdyb3VwU2hvd0hpZ2gnXSA9ICR6ICsgMTsKCQkJCQkJfSBlbHNlIHsgLyogYWRkIG1hcmtlciB0byBncm91cCAqLwppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgQWRkaW5nIEl0ZW0gICRpZCB0byBncm91cHMgJGdyb3VwSWRcbiI7CgkJCQkJCSAgICAkZ3JvdXBzWyRncm91cElkXVsnaXRlbXMnXSsrOwoJCQkJCQkgICAgJGdyb3Vwc1skZ3JvdXBJZF1bJ2RpcmVjdEl0ZW1zJ10rKzsKCQkJCQkJICAgICRtYXBQb2ludHNbJGlkXVsnZ3JvdXAnXSA9ICRncm91cElkOwoJCQkJCQkgICAgJG1hcFBvaW50c1skaWRdWydkaXNwbGF5J10gPSBmYWxzZTsKCQkJCQkJICAgICRtYXBQb2ludHNbJGlkXVsncmVncm91cFNob3dIaWdoJ10gPSAkeiArIDE7CgkJCQkJCSAgICAvKiBncm91cCBpdGVtIG9ubHkgaW50byBvbmUgZ3JvdXAhICovCgkJCQkJCSAgICBjb250aW51ZSAxOwoJCQkJCQl9CgkJCQkJICAgIH0KCQkJCQl9CgkJCQkgICAgfQoJCQkJfQoKCQkJCS8qIHVuZGlzcGxheSBncm91cGVkIGl0ZW1zICovCgkJCQlmb3JlYWNoICgkbWFwUG9pbnRzIGFzICRpZCA9PiAkcG9pbnQpIHsKCQkJCSAgICBpZiAoISRwb2ludFsnZGlzcGxheSddICYmIGlzc2V0KCRzaG93SXRlbXNbJGlkXSkpIHsKCQkJCQl1bnNldCgkc2hvd0l0ZW1zWyRpZF0pOwoJCQkJICAgIH0KCQkJCX0KCgkJCQkvKiBjcmVhdGUgbmV3IGdyb3VwcyB3aXRoIGNsb3NlIGl0ZW1zICovCgkJCQlmb3JlYWNoICgkc2hvd0l0ZW1zIGFzICRpZDEgPT4gJHRydWUxKSB7CgkJCQkgICAgZm9yZWFjaCAoJHNob3dJdGVtcyBhcyAkaWQyID0+ICR0cnVlMikgewoJCQkJCWlmICgkaWQxIDw+ICRpZDIpIHsKCQkJCQkgICAgJGRpc3QgPSBtYXBIZWxwZXI6OlBpeGVsRGlzdGFuY2UoCgkJCQkJCSAgICAkbWFwUG9pbnRzWyRpZDFdWydncHMnXSwKCQkJCQkJICAgICRtYXBQb2ludHNbJGlkMl1bJ2dwcyddLCAkeik7CgkJCQkJICAgICRkaXN0YW5jZXNbJGlkMV1bJGlkMl0gPSAkZGlzdDsKCQkJCQkgICAgJHBpeGRpc3QgPSAkZGlzdGFuY2VzWyRpZDFdWyRpZDJdOwoJCQkJCSAgICBpZiAoJHBpeGRpc3QgPD0gJHJlZ3JvdXBEaXN0KSB7CgkJCQkJCWlmICgkbWFwUG9pbnRzWyRpZDFdWydyZWdyb3VwU2hvd0xvdyddID09ICR6KSB7CgkJCQkJCSAgICAvKgoJCQkJCQkgICAgICogaW4gdGhpcyBjYXNlLCB3ZSBkb24ndCBhZGQgdGhlIG1hcmtlciB0bwoJCQkJCQkgICAgICogYW55IGdyb3VwIGJlY2F1c2UgaXQgd2FzIG5ldmVyIHNob3dlZC4KCQkJCQkJICAgICAqLwoKCQkJCQkJICAgIC8qIGRvIG5vdGhpbmcuIHNraXAgaXRlbSAxLCBpdCBkaXNhcHBlYXJzCgkJCQkJCSAgICAgKiBiZWZvcmUgc2hvd2luZyB1cC4KCQkJCQkJICAgICAqLwppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgSVRFTVMgJGlkMSBhbmQgJGlkMiBjbG9zZSBidXQgJGlkMSBuZXZlciBzaG93cyB1cCA9PiBza2lwICRpZDEgYW5kICRpZDJcbiI7CgkJCQkJCSAgICAkbWFwUG9pbnRzWyRpZDFdWydkaXNwbGF5J10gPSBmYWxzZTsKCQkJCQkJICAgICRtYXBQb2ludHNbJGlkMV1bJ3JlZ3JvdXBTaG93SGlnaCddID0gJHogKyAxOwoJCQkJCQkgICAgY29udGludWUgMTsKCQkJCQkJfQoJCQkJCQlpZiAoJG1hcFBvaW50c1skaWQyXVsncmVncm91cFNob3dMb3cnXSA9PSAkeikgewoJCQkJCQkgICAgLyoKCQkJCQkJICAgICAqIGluIHRoaXMgY2FzZSwgd2UgZG9uJ3QgYWRkIHRoZSBtYXJrZXIgdG8KCQkJCQkJICAgICAqIGFueSBncm91cCBiZWNhdXNlIGl0IHdhcyBuZXZlciBzaG93ZWQuCgkJCQkJCSAgICAgKi8KCgkJCQkJCSAgICAvKiBkbyBub3RoaW5nLCBjb250aW51ZSB3aXRoIG5leHQgaXRlbSAyICovCmlmICgkREVCVUdfUkVHUk9VUCkgcHJpbnQgIiBJVEVNUyAkaWQxIGFuZCAkaWQyIGNsb3NlIGJ1dCAkaWQyIG5ldmVyIHNob3dzIHVwID0+IHNraXAgJGlkMlxuIjsKCQkJCQkJICAgICRtYXBQb2ludHNbJGlkMl1bJ2Rpc3BsYXknXSA9IGZhbHNlOwoJCQkJCQkgICAgJG1hcFBvaW50c1skaWQyXVsncmVncm91cFNob3dIaWdoJ10gPSAkeiArIDE7CgkJCQkJCSAgICBjb250aW51ZTsKCQkJCQkJfQoJCQkJCQkvKiBjaGVjayBpZiB0aGVzZSBpdGVtcyBoYXZlIGJlZW4gZ3JvdXBlZCAqLwoJCQkJCQkkZzEgPSAkbWFwUG9pbnRzWyRpZDFdWydncm91cCddOwoJCQkJCQkkZzIgPSAkbWFwUG9pbnRzWyRpZDJdWydncm91cCddOwoJCQkJCQlpZiAoJGcxIDwgMCBhbmQgJGcyIDwgMCkgewppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgcmVncm91cGluZyBJVEVNUyAkaWQxIGFuZCAkaWQyLCBDUkVBVElORyBORVcgR1JPVVAgJG5iZ3JvdXBzICEhIVxuIjsKCQkJCQkJICAgIC8qIG1ha2UgYSBuZXcgZ3JvdXAgbWVyZ2luZyB0d28gZWxlbWVudHMgKi8KCQkJCQkJICAgICRncm91cHNbJG5iZ3JvdXBzXVsncmVncm91cFNob3dMb3cnXSA9ICR6OwoJCQkJCQkgICAgJGdyb3Vwc1skbmJncm91cHNdWydtYXh4J10gPQoJCQkJCQkJICAgIG1heCgkbWFwUG9pbnRzWyRpZDFdWydwb3N4J10sCgkJCQkJCQkJJG1hcFBvaW50c1skaWQyXVsncG9zeCddKTsKCQkJCQkJICAgICRncm91cHNbJG5iZ3JvdXBzXVsnbWlueCddID0KCQkJCQkJCSAgICBtaW4oJG1hcFBvaW50c1skaWQxXVsncG9zeCddLAoJCQkJCQkJCSRtYXBQb2ludHNbJGlkMl1bJ3Bvc3gnXSk7CgkJCQkJCSAgICAkZ3JvdXBzWyRuYmdyb3Vwc11bJ21heHknXSA9CgkJCQkJCQkgICAgbWF4KCRtYXBQb2ludHNbJGlkMV1bJ3Bvc3knXSwKCQkJCQkJCQkkbWFwUG9pbnRzWyRpZDJdWydwb3N5J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skbmJncm91cHNdWydtaW55J10gPQoJCQkJCQkJICAgIG1pbigkbWFwUG9pbnRzWyRpZDFdWydwb3N5J10sCgkJCQkJCQkJJG1hcFBvaW50c1skaWQyXVsncG9zeSddKTsKCQkJCQkJICAgICRncm91cHNbJG5iZ3JvdXBzXVsnZ3JvdXAnXSA9IC0xOwoJCQkJCQkgICAgJGdyb3Vwc1skbmJncm91cHNdWydncm91cHMnXSA9IDA7CgkJCQkJCSAgICAkZ3JvdXBzWyRuYmdyb3Vwc11bJ2Rpc3BsYXknXSA9IHRydWU7CgkJCQkJCSAgICAkZ3JvdXBzWyRuYmdyb3Vwc11bJ2l0ZW1zJ10gPSAyOwoJCQkJCQkgICAgJGdyb3Vwc1skbmJncm91cHNdWydkaXJlY3RJdGVtcyddID0gMjsKCgkJCQkJCSAgICAkbWFwUG9pbnRzWyRpZDFdWydncm91cCddID0gJG5iZ3JvdXBzOwoJCQkJCQkgICAgJG1hcFBvaW50c1skaWQyXVsnZ3JvdXAnXSA9ICRuYmdyb3VwczsKCQkJCQkJICAgICRtYXBQb2ludHNbJGlkMV1bJ3JlZ3JvdXBTaG93SGlnaCddID0gJHogKyAxOwoJCQkJCQkgICAgJG1hcFBvaW50c1skaWQyXVsncmVncm91cFNob3dIaWdoJ10gPSAkeiArIDE7CgkJCQkJCSAgICAkbWFwUG9pbnRzWyRpZDFdWydkaXNwbGF5J10gPSBmYWxzZTsKCQkJCQkJICAgICRtYXBQb2ludHNbJGlkMl1bJ2Rpc3BsYXknXSA9IGZhbHNlOwoJCQkJCQkgICAgJG5iZ3JvdXBzKys7CgkJCQkJCX0gZWxzZSBpZiAoJGcxIDwgMCkgewppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgcmVncm91cGluZyBJVEVNUyAkaWQxIGFuZCAkaWQyLCBwdXR0aW5nICRpZDEgaW50byAkZzJcbiI7CgkJCQkJCSAgICAvKiBpdGVtMSBub3QgeWV0IGdyb3VwZWQsIHB1dCBpdGVtMSBpbiBnMiAqLwoJCQkJCQkgICAgJGdyb3Vwc1skZzJdWydtYXh4J10gPQoJCQkJCQkJICAgIG1heCgkZ3JvdXBzWyRnMl1bJ21heHgnXSwKCQkJCQkJCQkkbWFwUG9pbnRzWyRpZDFdWydwb3N4J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skZzJdWydtaW54J10gPQoJCQkJCQkJICAgIG1pbigkZ3JvdXBzWyRnMl1bJ21pbngnXSwKCQkJCQkJCQkkbWFwUG9pbnRzWyRpZDFdWydwb3N4J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skZzJdWydtYXh5J10gPQoJCQkJCQkJICAgIG1heCgkZ3JvdXBzWyRnMl1bJ21heHknXSwKCQkJCQkJCQkkbWFwUG9pbnRzWyRpZDFdWydwb3N5J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skZzJdWydtaW55J10gPQoJCQkJCQkJICAgIG1pbigkZ3JvdXBzWyRnMl1bJ21pbnknXSwKCQkJCQkJCQkkbWFwUG9pbnRzWyRpZDFdWydwb3N5J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skZzJdWydpdGVtcyddKys7CgkJCQkJCSAgICAkZ3JvdXBzWyRnMl1bJ2RpcmVjdEl0ZW1zJ10rKzsKCgkJCQkJCSAgICAkbWFwUG9pbnRzWyRpZDFdWydncm91cCddID0gJGcyOwoJCQkJCQkgICAgJG1hcFBvaW50c1skaWQxXVsncmVncm91cFNob3dIaWdoJ10gPSAkeiArIDE7CgkJCQkJCSAgICAkbWFwUG9pbnRzWyRpZDFdWydkaXNwbGF5J10gPSBmYWxzZTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJICAgIGlmICgkZzEgPT0gJGcyKSB7CgkJCQkJCQkvKgoJCQkJCQkJICogYm90aCBhbHJlYWR5IGdyb3VwZWQgaW4gc2FtZSBncm91cCwKCQkJCQkJCSAqIGRvIG5vdGhpbmchCgkJCQkJCQkgKi8KCQkJCQkJCWNvbnRpbnVlOwppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgSVRFTVMgJGlkMSBhbmQgJGlkMiBhcmUgYWxyZWFkeSBpbiAkZzEsIHNraXBwaW5nICRpZDJcbiI7CgkJCQkJCSAgICB9CmlmICgkREVCVUdfUkVHUk9VUCkgcHJpbnQgIiByZWdyb3VwaW5nIElURU1TICRpZDEgYW5kICRpZDIsIHB1dHRpbmcgJGlkMiBpbnRvICRnMVxuIjsKCQkJCQkJICAgIC8qIHB1dCBpdGVtMiBpbiBnMSAqLwoJCQkJCQkgICAgLyoKCQkJCQkJICAgICAqIGlmIG9sZCBpdGVtMiB3YXMgYWxyZWFkeSBpbiBhIG5ldyBncm91cCwKCQkJCQkJICAgICAqIHRoaXMgd2lsbCBiZSBtZXJnZWQgYWZ0ZXJ3YXJkcwoJCQkJCQkgICAgICovCgkJCQkJCSAgICAkZ3JvdXBzWyRnMV1bJ21heHgnXSA9CgkJCQkJCQkgICAgbWF4KCRncm91cHNbJGcxXVsnbWF4eCddLAoJCQkJCQkJCSRtYXBQb2ludHNbJGlkMl1bJ3Bvc3gnXSk7CgkJCQkJCSAgICAkZ3JvdXBzWyRnMV1bJ21pbngnXSA9CgkJCQkJCQkgICAgbWluKCRncm91cHNbJGcxXVsnbWlueCddLAoJCQkJCQkJCSRtYXBQb2ludHNbJGlkMl1bJ3Bvc3gnXSk7CgkJCQkJCSAgICAkZ3JvdXBzWyRnMV1bJ21heHknXSA9CgkJCQkJCQkgICAgbWF4KCRncm91cHNbJGcxXVsnbWF4eSddLAoJCQkJCQkJCSRtYXBQb2ludHNbJGlkMl1bJ3Bvc3knXSk7CgkJCQkJCSAgICAkZ3JvdXBzWyRnMV1bJ21pbnknXSA9CgkJCQkJCQkgICAgbWluKCRncm91cHNbJGcxXVsnbWlueSddLAoJCQkJCQkJCSRtYXBQb2ludHNbJGlkMl1bJ3Bvc3knXSk7CgkJCQkJCSAgICAkZ3JvdXBzWyRnMV1bJ2l0ZW1zJ10rKzsKCQkJCQkJICAgICRncm91cHNbJGcxXVsnZGlyZWN0SXRlbXMnXSsrOwoKCQkJCQkJICAgICRtYXBQb2ludHNbJGlkMl1bJ2dyb3VwJ10gPSAkZzE7CgkJCQkJCSAgICAkbWFwUG9pbnRzWyRpZDJdWydyZWdyb3VwU2hvd0hpZ2gnXSA9ICR6ICsgMTsKCQkJCQkJICAgICRtYXBQb2ludHNbJGlkMl1bJ2Rpc3BsYXknXSA9IGZhbHNlOwoJCQkJCQkgICAgaWYgKCRnMiA+IC0xKSB7CmlmICgkREVCVUdfUkVHUk9VUCkgcHJpbnQgIiByZWdyb3VwaW5nIElURU1TICRpZDEgYW5kICRpZDIsIGJvdGggd2VyZSBpbiBhIGdyb3VwICgkZzEgYW5kICRnMikuIE1vdmluZyBlbGVtZW50cyBvZiAkZzIgaW50byAkZzFcbiI7CgkJCQkJCQkvKiBpdGVtMiB3YXMgYWxyZWFkeSBpbiBhIG5ldyBncm91cC4gKi8KCQkJCQkJCS8qCgkJCQkJCQkgKiBtb3ZlIG90aGVyIGVsZW1lbnRzIG9mIHRoaXMgbmV3IGdyb3VwCgkJCQkJCQkgKiBpbnRvIHRoaXMgb25lLCBhbmQga2lsbCBvdGhlciBuZXcgZ3JvdXAKCQkJCQkJCSAqLwoJCQkJCQkJZm9yZWFjaCAoJHNob3dJdGVtcyBhcyAkaWQzID0+ICR0cnVlMykgewoJCQkJCQkJICAgIGlmICgkaWQzICE9ICRpZDEgYW5kICRpZDMgIT0gJGlkMikgewoJCQkJCQkJCWlmICgkbWFwUG9pbnRzWyRpZDNdWydncm91cCddID09ICRnMgoJCQkJCQkJCQkmJiAkbWFwUG9pbnRzWyRpZDNdWydncm91cCddID4gLTEpIHsKaWYgKCRERUJVR19SRUdST1VQKSBwcmludCAiIG1vdmluZyBJVEVNICRpZDMgZnJvbSB7JG1hcFBvaW50c1skaWQzXVsnZ3JvdXAnXX0gdG8gJGcxXG4iOwoJCQkJCQkJCSAgICAvKiBub3cgdGhpcyBpY29uMyBnb2VzIGFsc28gaW4gTkVXIGcxICovCgkJCQkJCQkJICAgICRncm91cHNbJGcxXVsnbWF4eCddID0KCQkJCQkJCQkJICAgIG1heCgkZ3JvdXBzWyRnMV1bJ21heHgnXSwKCQkJCQkJCQkJCSRtYXBQb2ludHNbJGlkM11bJ3Bvc3gnXSk7CgkJCQkJCQkJICAgICRncm91cHNbJGcxXVsnbWlueCddID0KCQkJCQkJCQkJICAgIG1pbigkZ3JvdXBzWyRnMV1bJ21pbngnXSwKCQkJCQkJCQkJCSRtYXBQb2ludHNbJGlkM11bJ3Bvc3gnXSk7CgkJCQkJCQkJICAgICRncm91cHNbJGcxXVsnbWF4eSddID0KCQkJCQkJCQkJICAgIG1heCgkZ3JvdXBzWyRnMV1bJ21heHknXSwKCQkJCQkJCQkJCSRtYXBQb2ludHNbJGlkM11bJ3Bvc3knXSk7CgkJCQkJCQkJICAgICRncm91cHNbJGcxXVsnbWlueSddID0KCQkJCQkJCQkJICAgIG1pbigkZ3JvdXBzWyRnMV1bJ21pbnknXSwKCQkJCQkJCQkJCSRtYXBQb2ludHNbJGlkM11bJ3Bvc3knXSk7CgkJCQkJCQkJICAgICRncm91cHNbJGcxXVsnaXRlbXMnXSsrOwoJCQkJCQkJCSAgICAkZ3JvdXBzWyRnMV1bJ2RpcmVjdEl0ZW1zJ10rKzsKCgkJCQkJCQkJICAgICRtYXBQb2ludHNbJGlkM11bJ2dyb3VwJ10gPSAkZzE7CgkJCQkJCQkJICAgICRtYXBQb2ludHNbJGlkM11bJ3JlZ3JvdXBTaG93SGlnaCddID0KCQkJCQkJCQkJICAgICR6IC0gMTsKCQkJCQkJCQkgICAgJG1hcFBvaW50c1skaWQzXVsnZGlzcGxheSddID0gZmFsc2U7CgkJCQkJCQkJfQoJCQkJCQkJICAgIH0KCQkJCQkJCX0KaWYgKCRERUJVR19SRUdST1VQKSBwcmludCAiIERFTEVUSU5HIG5ldyBncm91cCAkZzJcbiI7CgkJCQkJCQl1bnNldCAoJGdyb3Vwc1skZzJdKTsKCQkJCQkJCWlmIChpc3NldCgkc2hvd0dyb3Vwc1skZzJdKSkgewoJCQkJCQkJICAgIHVuc2V0KCRzaG93R3JvdXBzWyRnMl0pOyAvKiBkaWUoIm5vbyAxIik7ICovCgkJCQkJCQl9CgkJCQkJCSAgICB9CgkJCQkJCX0KCQkJCQkgICAgfQoJCQkJCX0KCQkJCSAgICB9CgkJCQl9CgoJCQkJLyogc2V0dXAgYW5kIGRpc3BsYXkgbmV3IGdyb3VwcyAqLwoJCQkJZm9yZWFjaCAoJGdyb3VwcyBhcyAkaWQgPT4gJGdyb3VwKSB7CgkJCQkgICAgaWYgKCRncm91cFsnZGlzcGxheSddICYmICFpc3NldCgkc2hvd0dyb3Vwc1skaWRdKSkgewoJCQkJCS8qIG5ldyBncm91cCBpbiBhcnJheS4gc2hvdyBhbmQgY2FsY3VsYXRlIG1hcmtlciBwb3MgKi8KCQkJCQkkc2hvd0dyb3Vwc1skaWRdID0gdHJ1ZTsKCQkJCQkkZ3JvdXBzWyRpZF1bJ3Bvc3gnXSA9CgkJCQkJCSgkZ3JvdXBbJ21heHgnXSArICRncm91cFsnbWlueCddKSAvIDI7CgkJCQkJJGdyb3Vwc1skaWRdWydwb3N5J10gPQoJCQkJCQkoJGdyb3VwWydtYXh5J10gKyAkZ3JvdXBbJ21pbnknXSkgLyAyOwoJCQkJCSRncm91cHNbJGlkXVsnZ3BzJ10gPQoJCQkJCQludW1iZXJfZm9ybWF0KCRncm91cHNbJGlkXVsncG9zeCddLCAxMCwgJy4nLCAnJykKCQkJCQkJLiAnLCcKCQkJCQkJLiBudW1iZXJfZm9ybWF0KCRncm91cHNbJGlkXVsncG9zeSddLCAxMCwgJy4nLCAnJyk7CgkJCQkgICAgfQoJCQkJfQoKCQkJCS8qIHVuZGlzcGxheSBncm91cGVkIGl0ZW1zICovCgkJCQlmb3JlYWNoICgkbWFwUG9pbnRzIGFzICRpZCA9PiAkcG9pbnQpIHsKCQkJCSAgICBpZiAoISRwb2ludFsnZGlzcGxheSddIGFuZCBpc3NldCgkc2hvd0l0ZW1zWyRpZF0pKSB7CgkJCQkJdW5zZXQoJHNob3dJdGVtc1skaWRdKTsKCQkJCSAgICB9CgkJCQl9CgoJCQkJLyogY2hlY2sgaWYgYW55IGdyb3VwcyBjYW4gYmUgbWVyZ2VkICovCgkJCQlmb3JlYWNoICgkc2hvd0dyb3VwcyBhcyAkZ2lkMSA9PiAkdHJ1ZSkgewoJCQkJICAgIGZvcmVhY2ggKCRzaG93R3JvdXBzIGFzICRnaWQyID0+ICR0cnVlMikgewoJCQkJCWlmICgkZ2lkMSA8ICRnaWQyKSB7CgkJCQkJICAgICRncm91cERpc3RzWyRnaWQxXVskZ2lkMl0gPQoJCQkJCQkgICAgbWFwSGVscGVyOjpQaXhlbERpc3RhbmNlKAoJCQkJCQkJICAgICRncm91cHNbJGdpZDFdWydncHMnXSwKCQkJCQkJCSAgICAkZ3JvdXBzWyRnaWQyXVsnZ3BzJ10sICR6KTsKCQkJCQkgICAgJHBpeGRpc3QgPSAkZ3JvdXBEaXN0c1skZ2lkMV1bJGdpZDJdOwoJCQkJCSAgICBpZiAoJHBpeGRpc3QgPD0gJHJlZ3JvdXBEaXN0KSB7CmlmICgkREVCVUdfUkVHUk9VUCkgcHJpbnQgIiBncm91cHMgJGdpZDEgYW5kICRnaWQyIGhhdmUgZGlzdCAkcGl4ZGlzdFxuIjsKCQkJCQkJLyogY2hlY2sgaWYgdGhlc2UgZ3JvdXBzIGhhdmUgYmVlbiByZWdyb3VwZWQgKi8KCQkJCQkJJGcxID0gJGdyb3Vwc1skZ2lkMV1bJ2dyb3VwJ107CgkJCQkJCSRnMiA9ICRncm91cHNbJGdpZDJdWydncm91cCddOwoJCQkJCQlpZiAoJGcxIDwgMCAmJiAkZzIgPCAwKSB7CmlmICgkREVCVUdfUkVHUk9VUCkgcHJpbnQgIiByZWdyb3VwaW5nIGdyb3VwcyAkZ2lkMSBhbmQgJGdpZDIsIENSRUFUSU5HIE5FVyBHUk9VUCAkbmJncm91cHMgISEhXG4iOwoJCQkJCQkgICAgLyoKCQkJCQkJICAgICAqIG1ha2UgYSBuZXcgZ3JvdXAgbWVyZ2luZyB0d28gKG9sZCkgZ3JvdXBzCgkJCQkJCSAgICAgKi8KCQkJCQkJICAgICRncm91cHNbJG5iZ3JvdXBzXVsncmVncm91cFNob3dMb3cnXSA9ICR6OwoJCQkJCQkgICAgJGdyb3Vwc1skbmJncm91cHNdWydtYXh4J10gPQoJCQkJCQkJICAgIG1heCgkZ3JvdXBzWyRnaWQxXVsnbWF4eCddLAoJCQkJCQkJCSRncm91cHNbJGdpZDJdWydtYXh4J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skbmJncm91cHNdWydtaW54J10gPQoJCQkJCQkJICAgIG1pbigkZ3JvdXBzWyRnaWQxXVsnbWlueCddLAoJCQkJCQkJCSRncm91cHNbJGdpZDJdWydtaW54J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skbmJncm91cHNdWydtYXh5J10gPQoJCQkJCQkJICAgIG1heCgkZ3JvdXBzWyRnaWQxXVsnbWF4eSddLAoJCQkJCQkJCSRncm91cHNbJGdpZDJdWydtYXh5J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skbmJncm91cHNdWydtaW55J10gPQoJCQkJCQkJICAgIG1pbigkZ3JvdXBzWyRnaWQxXVsnbWlueSddLAoJCQkJCQkJCSRncm91cHNbJGdpZDJdWydtaW55J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skbmJncm91cHNdWydncm91cCddID0gLTE7CgkJCQkJCSAgICAkZ3JvdXBzWyRuYmdyb3Vwc11bJ2dyb3VwcyddID0gMjsKCQkJCQkJICAgICRncm91cHNbJG5iZ3JvdXBzXVsnZGlzcGxheSddID0gdHJ1ZTsKCQkJCQkJICAgICRncm91cHNbJG5iZ3JvdXBzXVsnaXRlbXMnXSA9CgkJCQkJCQkgICAgJGdyb3Vwc1skZ2lkMV1bJ2l0ZW1zJ10KCQkJCQkJCSAgICArICRncm91cHNbJGdpZDJdWydpdGVtcyddOwoJCQkJCQkgICAgJGdyb3Vwc1skbmJncm91cHNdWydkaXJlY3RJdGVtcyddID0gMDsKCgkJCQkJCSAgICAkZ3JvdXBzWyRnaWQxXVsnZ3JvdXAnXSA9ICRuYmdyb3VwczsKCQkJCQkJICAgICRncm91cHNbJGdpZDJdWydncm91cCddID0gJG5iZ3JvdXBzOwoJCQkJCQkgICAgJGdyb3Vwc1skZ2lkMV1bJ3JlZ3JvdXBTaG93SGlnaCddID0gJHogKyAxOwoJCQkJCQkgICAgJGdyb3Vwc1skZ2lkMl1bJ3JlZ3JvdXBTaG93SGlnaCddID0gJHogKyAxOwoJCQkJCQkgICAgJGdyb3Vwc1skZ2lkMV1bJ2Rpc3BsYXknXSA9IGZhbHNlOwoJCQkJCQkgICAgJGdyb3Vwc1skZ2lkMl1bJ2Rpc3BsYXknXSA9IGZhbHNlOwoJCQkJCQkgICAgJG5iZ3JvdXBzKys7CgkJCQkJCX0gZWxzZSBpZiAoJGcxIDwgMCkgewppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgYWRkaW5nIGdyb3VwMSAkZ2lkMSAoZ3JvdXAyID0gJGdpZDIpIHRvIE5FVyBncm91cCAkZzJcbiI7CgkJCQkJCSAgICAvKiBwdXQgKG9sZCkgZ3JvdXAxIGluIE5FVyBnMiAqLwoJCQkJCQkgICAgJGdyb3Vwc1skZzJdWydtYXh4J10gPQoJCQkJCQkJICAgIG1heCgkZ3JvdXBzWyRnMl1bJ21heHgnXSwKCQkJCQkJCQkkZ3JvdXBzWyRnaWQxXVsnbWF4eCddKTsKCQkJCQkJICAgICRncm91cHNbJGcyXVsnbWlueCddID0KCQkJCQkJCSAgICBtaW4oJGdyb3Vwc1skZzJdWydtaW54J10sCgkJCQkJCQkJJGdyb3Vwc1skZ2lkMV1bJ21pbngnXSk7CgkJCQkJCSAgICAkZ3JvdXBzWyRnMl1bJ21heHknXSA9CgkJCQkJCQkgICAgbWF4KCRncm91cHNbJGcyXVsnbWF4eSddLAoJCQkJCQkJCSRncm91cHNbJGdpZDFdWydtYXh5J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skZzJdWydtaW55J10gPQoJCQkJCQkJICAgIG1pbigkZ3JvdXBzWyRnMl1bJ21pbnknXSwKCQkJCQkJCQkkZ3JvdXBzWyRnaWQxXVsnbWlueSddKTsKCQkJCQkJICAgICRncm91cHNbJGcyXVsnZ3JvdXBzJ10rKzsKCQkJCQkJICAgICRncm91cHNbJGcyXVsnaXRlbXMnXSArPQoJCQkJCQkJICAgICRncm91cHNbJGdpZDFdWydpdGVtcyddOwoKCQkJCQkJICAgICRncm91cHNbJGdpZDFdWydncm91cCddID0gJGcyOwoJCQkJCQkgICAgJGdyb3Vwc1skZ2lkMV1bJ3JlZ3JvdXBTaG93SGlnaCddID0gJHogKyAxOwoJCQkJCQkgICAgJGdyb3Vwc1skZ2lkMV1bJ2Rpc3BsYXknXSA9IGZhbHNlOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkgICAgaWYgKCRnMSA9PSAkZzIpIHsKCQkJCQkJCS8qCgkJCQkJCQkgKiBib3RoIGFscmVhZHkgZ3JvdXBlZCBpbiBzYW1lIGdyb3VwLAoJCQkJCQkJICogZG8gbm90aGluZyEKCQkJCQkJCSAqLwppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgZ3JvdXAxICRnaWQxIGFuZCBncm91cDIgJGdpZDIgYXJlIGJvdGggYWxyZWFkeSBpbiBORVcgZ3JvdXAgJGcyLiBDT09MIVxuIjsKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQkgICAgfQppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgYWRkaW5nIGdyb3VwMiAkZ2lkMiAoZ3JvdXAxID0gJGdpZDEpIHRvIE5FVyBncm91cCAkZzFcbiI7CgkJCQkJCSAgICAvKiBwdXQgKG9sZCkgZ3JvdXAyIGluIE5FVyBnMSAqLwoJCQkJCQkgICAgLyoKCQkJCQkJICAgICAqIGlmIG9sZCBncm91cDIgd2FzIGFscmVhZHkgaW4gYSBuZXcgZ3JvdXAsCgkJCQkJCSAgICAgKiB0aGlzIHdpbGwgYmUgbWVyZ2VkIGFmdGVyd2FyZHMKCQkJCQkJICAgICAqLwoKCQkJCQkJICAgICRncm91cHNbJGcxXVsnbWF4eCddID0KCQkJCQkJCSAgICBtYXgoJGdyb3Vwc1skZzFdWydtYXh4J10sCgkJCQkJCQkJJGdyb3Vwc1skZ2lkMl1bJ21heHgnXSk7CgkJCQkJCSAgICAkZ3JvdXBzWyRnMV1bJ21pbngnXSA9CgkJCQkJCQkgICAgbWluKCRncm91cHNbJGcxXVsnbWlueCddLAoJCQkJCQkJCSRncm91cHNbJGdpZDJdWydtaW54J10pOwoJCQkJCQkgICAgJGdyb3Vwc1skZzFdWydtYXh5J10gPQoJCQkJCQkJICAgIG1heCgkZ3JvdXBzWyRnMV1bJ21heHknXSwKCQkJCQkJCQkkZ3JvdXBzWyRnaWQyXVsnbWF4eSddKTsKCQkJCQkJICAgICRncm91cHNbJGcxXVsnbWlueSddID0KCQkJCQkJCSAgICBtaW4oJGdyb3Vwc1skZzFdWydtaW55J10sCgkJCQkJCQkJJGdyb3Vwc1skZ2lkMl1bJ21pbnknXSk7CgkJCQkJCSAgICAkZ3JvdXBzWyRnMV1bJ2dyb3VwcyddKys7CgkJCQkJCSAgICAkZ3JvdXBzWyRnMV1bJ2l0ZW1zJ10gKz0KCQkJCQkJCSAgICAkZ3JvdXBzWyRnaWQyXVsnaXRlbXMnXTsKCgkJCQkJCSAgICAkZ3JvdXBzWyRnaWQyXVsnZ3JvdXAnXSA9ICRnMTsKCQkJCQkJICAgICRncm91cHNbJGdpZDJdWydyZWdyb3VwU2hvd0hpZ2gnXSA9ICR6ICsgMTsKCQkJCQkJICAgICRncm91cHNbJGdpZDJdWydkaXNwbGF5J10gPSBmYWxzZTsKCQkJCQkJICAgIGlmICgkZzIgPiAtMSkgewppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgZ3JvdXAyICRnaWQyIHdhcyBpbiBORVcgZ3JvdXAgJGcyXG4iOwoJCQkJCQkJLyogZ3JvdXAyIHdhcyBhbHJlYWR5IGluIGEgbmV3IGdyb3VwLiAqLwoJCQkJCQkJLyoKCQkJCQkJCSAqIG1vdmUgb3RoZXIgZWxlbWVudHMgb2YgdGhpcyBuZXcgZ3JvdXAKCQkJCQkJCSAqIGluIHRoaXMgb25lLCBhbmQga2lsbCBvdGhlciBuZXcgZ3JvdXAKCQkJCQkJCSAqLwoJCQkJCQkJZm9yZWFjaCAoJHNob3dHcm91cHMgYXMgJGdpZDMgPT4gJHRydWUzKSB7CgkJCQkJCQkgICAgaWYgKCRnaWQzICE9ICRnaWQxIGFuZCAkZ2lkMyAhPSAkZ2lkMikgewoJCQkJCQkJCWlmICgkZ3JvdXBzWyRnaWQzXVsnZ3JvdXAnXSA9PSAkZzIKCQkJCQkJCQkJJiYgJGdyb3Vwc1skZ2lkM11bJ2dyb3VwJ10gPiAtMSkgewppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgYWRkaW5nIGdyb3VwMyAkZ2lkMyB0byBORVcgZ3JvdXAgJGcxXG4iOwoJCQkJCQkJCSAgICAvKiBub3cgdGhpcyAob2xkKSBncm91cDMgY29tZXMgYWxzbyBpbiBORVcgZzEgKi8KCQkJCQkJCQkgICAgJGdyb3Vwc1skZzFdWydtYXh4J10gPQoJCQkJCQkJCQkgICAgbWF4KCRncm91cHNbJGcxXVsnbWF4eCddLAoJCQkJCQkJCQkJJGdyb3Vwc1skZ2lkM11bJ21heHgnXSk7CgkJCQkJCQkJICAgICRncm91cHNbJGcxXVsnbWlueCddID0KCQkJCQkJCQkJICAgIG1pbigkZ3JvdXBzWyRnMV1bJ21pbngnXSwKCQkJCQkJCQkJCSRncm91cHNbJGdpZDNdWydtaW54J10pOwoJCQkJCQkJCSAgICAkZ3JvdXBzWyRnMV1bJ21heHknXSA9CgkJCQkJCQkJCSAgICBtYXgoJGdyb3Vwc1skZzFdWydtYXh5J10sCgkJCQkJCQkJCQkkZ3JvdXBzWyRnaWQzXVsnbWF4eSddKTsKCQkJCQkJCQkgICAgJGdyb3Vwc1skZzFdWydtaW55J10gPQoJCQkJCQkJCQkgICAgbWluKCRncm91cHNbJGcxXVsnbWlueSddLAoJCQkJCQkJCQkJJGdyb3Vwc1skZ2lkM11bJ21pbnknXSk7CgkJCQkJCQkJICAgICRncm91cHNbJGcxXVsnZ3JvdXBzJ10rKzsKCQkJCQkJCQkgICAgJGdyb3Vwc1skZzFdWydpdGVtcyddICs9CgkJCQkJCQkJCSAgICAkZ3JvdXBzWyRnaWQzXVsnaXRlbXMnXTsKCgkJCQkJCQkJICAgICRncm91cHNbJGdpZDNdWydncm91cCddID0gJGcxOwoJCQkJCQkJCSAgICAkZ3JvdXBzWyRnaWQzXVsncmVncm91cFNob3dIaWdoJ10gPQoJCQkJCQkJCQkgICAgJHogKzE7CgkJCQkJCQkJICAgICRncm91cHNbJGdpZDNdWydkaXNwbGF5J10gPSBmYWxzZTsKCQkJCQkJCQl9CgkJCQkJCQkgICAgfQoJCQkJCQkJfQppZiAoJERFQlVHX1JFR1JPVVApIHByaW50ICIgREVMRVRJTkcgbmV3IGdyb3VwICRnMlxuIjsKCQkJCQkJCXVuc2V0KCRncm91cHNbJGcyXSk7CgkJCQkJCQlpZiAoaXNzZXQoJHNob3dHcm91cHNbJGcyXSkpIHsKCQkJCQkJCSAgICB1bnNldCgkc2hvd0dyb3Vwc1skZzJdKTsKCQkJCQkJCX0KCQkJCQkJICAgIH0KCQkJCQkJfQoJCQkJCSAgICB9CgkJCQkJfQoJCQkJICAgIH0KCQkJCX0KCgkJCQkvKiB1bmRpc3BsYXkgbWVyZ2VkIGdyb3VwcywgYW5kIHByZXBhcmUgbmV3IGdyb3VwcyAqLwoJCQkJZm9yZWFjaCAoJGdyb3VwcyBhcyAkaWQgPT4gJGdyb3VwKSB7CgkJCQkgICAgLyogdW5kaXNwbGF5IG1lcmdlZCBncm91cHMgKi8KCQkJCSAgICBpZiAoISRncm91cFsnZGlzcGxheSddICYmIGlzc2V0KCRzaG93R3JvdXBzWyRpZF0pKSB7CgkJCQkJLyogb2xkIGdyb3VwIGdvbmUgb3V0ICovCgkJCQkJdW5zZXQoJHNob3dHcm91cHNbJGlkXSk7CgkJCQkgICAgfSBlbHNlIGlmICgkZ3JvdXBbJ2Rpc3BsYXknXSAmJiAhaXNzZXQoJHNob3dHcm91cHNbJGlkXSkpIHsKCQkJCQkvKiBuZXcgZ3JvdXAgaW4gYXJyYXkuIHNob3cgYW5kIGNhbGN1bGF0ZSBtYXJrZXIgcG9zICovCgkJCQkJJHNob3dHcm91cHNbJGlkXSA9IHRydWU7CgkJCQkJJGdyb3Vwc1skaWRdWydwb3N4J10gPQoJCQkJCQkoJGdyb3VwWydtYXh4J10gKyAkZ3JvdXBbJ21pbngnXSkgLyAyOwoJCQkJCSRncm91cHNbJGlkXVsncG9zeSddID0KCQkJCQkJKCRncm91cFsnbWF4eSddICsgJGdyb3VwWydtaW55J10pIC8gMjsKCQkJCQkkZ3JvdXBzWyRpZF1bJ2dwcyddID0KCQkJCQkJbnVtYmVyX2Zvcm1hdCgkZ3JvdXBzWyRpZF1bJ3Bvc3gnXSwgMTAsICcuJywgJycpCgkJCQkJCS4gJywgJwoJCQkJCQkuIG51bWJlcl9mb3JtYXQoJGdyb3Vwc1skaWRdWydwb3N5J10sIDEwLCAnLicsICcnKTsKCQkJCSAgICB9CgkJCQl9CgkJCQkvKiBvaywgZG9uZSBmb3IgdGhpcyB6b29tbGV2ZWwuIG5leHQgem9vbWxldmVsIHBsZWFzZSEgKi8KCQkJICAgIH0KCgkJCSAgICAvKiBzZXQgc2hvd0hpZ2ggdG8gMCBmb3IgZ3JvdXBzIHdoaWNoIGFyZSBzdGlsbCBzaG93ZWQgYXQgdGhlIGVuZC4gKi8KCQkJICAgIGZvcmVhY2ggKCRzaG93R3JvdXBzIGFzICRpZCA9PiAkdHJ1ZSkgewoJCQkJJGdyb3Vwc1skaWRdWydyZWdyb3VwU2hvd0hpZ2gnXSA9IDA7CgkJCSAgICB9CgoJCQkgICAgLyogdW5zZXQgYWxidW1zIHRoYXQgbmV2ZXIgc2hvdyB1cCAqLwoJCQkgICAgZm9yZWFjaCAoJG1hcFBvaW50cyBhcyAkaWQgPT4gJHBvaW50KSB7CgkJCQlpZiAoJHBvaW50WydyZWdyb3VwU2hvd0hpZ2gnXSA+ICRwb2ludFsncmVncm91cFNob3dMb3cnXSkgewoJCQkJICAgIC8qCgkJCQkgICAgICogdGhpcyBzcGVjaWFsIGNhc2UgaXMgYW4gYWxidW0gdGhhdCBpcyBoaWRkZW4gKGdyb3VwZWQpCgkJCQkgICAgICogYmVjYXVzZSBvZiBncm91cGluZyBiZWZvcmUgaXQgaXMgYWN0dWFsbHkgc2hvd2VkLgoJCQkJICAgICAqLwoKCQkJCSAgICAvKiB3ZSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QuICovCgkJCQkgICAgdW5zZXQoJG1hcFBvaW50c1skaWRdKTsKCQkJCX0KCQkJICAgIH0KCgkJCSAgICAkbWFwWydyZWdyb3VwUG9pbnRzJ10gPSAkZ3JvdXBzOwoJCQl9IGVsc2UgewoJCQkgICAgJG1hcFsncmVncm91cEl0ZW1zJ10gPSBmYWxzZTsKCQkJfQoJCSAgICB9IGVsc2UgewoJCQkkbWFwWydub2l0ZW1pbmFsYnVtJ10gPSB0cnVlOyAvKiBObyBpdGVtIGluIHRoZSBzZWxlY3RlZCBhbGJ1bSAqLwoJCSAgICB9CgkJfSBlbHNlIHsKCQkgICAgLyoKCQkgICAgICogVGhlcmUgaXMgbm8gbWFya2VyIGJlY2F1c2Ugbm8gaXRlbSB3aXRoIEdQUyBjb29yZGluYXRlIGhhdmUgY29ycmVjdAoJCSAgICAgKiBwZXJtaXNzaW9uCgkJICAgICAqLwoJCSAgICAkbWFwWydub2dwc2Nvb3JkcyddID0gdHJ1ZTsKCQl9CgkgICAgfSBlbHNlIHsKCQkvKiBUaGVyZSBpcyBubyBtYXJrZXIgYmVjYXVzZSBubyBpdGVtIGhhdmUgR1BTIGNvb3JkaW5hdGUgKi8KCQkkbWFwWydub2l0ZW1wZXJtcyddID0gdHJ1ZTsKCSAgICB9CgkgICAgCgkgICAgLyoqIEVORCBPRiBNQUtJTkcgVEhFIEFSUkFZIE9GIElURU1TIFdJVEggR1BTICoqLwoKCSAgICAvKiBTZXQgdmFyaW91cyBwYXJhbWV0ZXJzIG5lZWRlZCBieSBTaG93TWFwLnRwbCwgYWNjZXNzaWJsZSBhcyB7JG1hcC5tYXBXaWR0aH0sIGV0Yy4gKi8KCQkkbWFwWydtYXBQb2ludHMnXSA9IChpc3NldCgkbWFwUG9pbnRzKSkgPyAkbWFwUG9pbnRzIDogYXJyYXkoKTsKCQkkbWFwWydSZWdyb3VwSXRlbXMnXSA9IChpc3NldCgkZ3JvdXBzKSkgPyAkZ3JvdXBzIDogYXJyYXkoKTsKCgkgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdNYXBXaW5kb3dUeXBlJywgJG1hcCkgb3IgJG1hcFsnTWFwV2luZG93VHlwZSddID09ICcnKSB7CgkJCSRtYXBbJ01hcFdpbmRvd1R5cGUnXSA9ICdkZWZhdWx0JzsKCSAgICB9CgkgICAgaW5jbHVkZSgkbWFwTW9kQmFzZURpciAuICd0ZW1wbGF0ZXMvaW5mb3dpbmRvdy8nIC4gJG1hcFsnTWFwV2luZG93VHlwZSddIC4gJy5pbmMnKTsKCgkgICAgJGZpbHRlciA9IEdhbGxlcnlVdGlsaXRpZXM6OmdldFJlcXVlc3RWYXJpYWJsZXMoJ2ZpbHRlcicpOwoJICAgIGlmICghZW1wdHkoJGZpbHRlcikpIHsKCQlpZiAoIWFycmF5X2tleV9leGlzdHMoJ0ZpbHRlcnMnLCAkcGFyYW0pIGFuZCBzdWJzdHIoJGZpbHRlciwgMCwgNSkgIT0gJ1JvdXRlJykgewoJCSAgICAkbWFwWydmaWx0ZXJoYWNraW5nZXJyb3InXSA9IDE7CgkJfSBlbHNlIHsKCQkgICAgJGN1cnJlbnRmaWx0ZXJzID0gJHBhcmFtWydGaWx0ZXJzJ107CgkJICAgIGlmICgkY3VycmVudGZpbHRlcnMgIT0gJycpIHsKCQkJJGZpbHRlcmFycmF5ID0gZXhwbG9kZSgnfCcsICRjdXJyZW50ZmlsdGVycyk7CgkJCWZvcmVhY2ggKCRmaWx0ZXJhcnJheSBhcyAkZmlsdGVyaW5mb3MpIHsKCQkJICAgICRpbmZvcyA9IGV4cGxvZGUoJ2AnLCAkZmlsdGVyaW5mb3MpOwoJCQkgICAgaWYgKCRpbmZvc1sxXSA9PSAkZmlsdGVyKSB7CgkJCQkkbWFwWydjZW50ZXJMb25nTGF0J10gPSAkaW5mb3NbM107CgkJCQkkbWFwWyd6b29tTGV2ZWwnXSA9ICRpbmZvc1syXTsKCQkJCSRtYXBbJ0ZpbHRlciddID0gJGluZm9zWzFdOwoJCQkJYnJlYWs7CgkJCSAgICB9CgkJCX0KCQkgICAgfQoJCSAgICBpZiAoc3Vic3RyKCRmaWx0ZXIsIDAsIDUpID09ICdSb3V0ZScpIHsKCQkJLyogZmlsdGVyaW5nIG9uIGEgcm91dGUsIGNyZWF0ZSB0aGUgdmFsdWVzIGluIHRoZSBqYXZhc2NyaXB0ICovCgkJCSRtYXBbJ2NlbnRlckxvbmdMYXQnXSA9ICcwLDAnOwoJCQkkbWFwWyd6b29tTGV2ZWwnXSA9ICc1JzsKCQkJJG1hcFsnRmlsdGVyJ10gPSAkZmlsdGVyOwoJCSAgICB9CgkJICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygnY2VudGVyTG9uZ0xhdCcsICRtYXApKSB7CgkJCSRtYXBbJ2ZpbHRlcmhhY2tpbmdlcnJvciddID0gMTsKCQkgICAgfQoJCX0KCSAgICB9IGVsc2UgewoJCWlmICgkbWFwWydtb2RlJ10gPT0gJ05vcm1hbCcpIHsKCQkgICAgJG1hcFsnQXV0b0NlbnRlclpvb20nXSA9ICRwYXJhbVsnQXV0b0NlbnRlclpvb20nXTsKCQkgICAgJG1hcFsnY2VudGVyTG9uZ0xhdCddID0gJHBhcmFtWydjZW50ZXJMb25nTGF0J107CgkJICAgICRtYXBbJ3pvb21MZXZlbCddID0gJHBhcmFtWyd6b29tTGV2ZWwnXTsKCQl9CgkgICAgfQoJICAgICRtYXBbJ3pvb21JbkxldmVsJ10gPSAoYXJyYXlfa2V5X2V4aXN0cygnem9vbUluTGV2ZWwnLCAkcGFyYW0pKSA/ICRwYXJhbVsnem9vbUluTGV2ZWwnXSA6ICcwJzsKCSAgICAkbWFwWydzaG93TWFwVHlwZSddID0gKGFycmF5X2tleV9leGlzdHMoJ3Nob3dNYXBUeXBlJywgJHBhcmFtKSkgPyAkcGFyYW1bJ3Nob3dNYXBUeXBlJ10gOiAnMCc7CgkgICAgJG1hcFsnc2hvd1NjYWxlJ10gPSAoYXJyYXlfa2V5X2V4aXN0cygnc2hvd1NjYWxlJywgJHBhcmFtKSkgPyAkcGFyYW1bJ3Nob3dTY2FsZSddIDogJzAnOwoJICAgICRtYXBbJ3Nob3dab29tU2NhbGUnXSA9IAoJCSAgICAoYXJyYXlfa2V5X2V4aXN0cygnc2hvd1pvb21TY2FsZScsICRwYXJhbSkpID8gJHBhcmFtWydzaG93Wm9vbVNjYWxlJ10gOiAnMCc7CgkgICAgJG1hcFsnc2hvd1pvb21MaW5rcyddID0gCgkJICAgIChhcnJheV9rZXlfZXhpc3RzKCdzaG93Wm9vbUxpbmtzJywgJHBhcmFtKSkgPyAkcGFyYW1bJ3Nob3dab29tTGlua3MnXSA6ICcwJzsKCSAgICAkbWFwWydzaG93SXRlbVN1bW1hcmllcyddID0gCgkJICAgIChhcnJheV9rZXlfZXhpc3RzKCdzaG93SXRlbVN1bW1hcmllcycsICRwYXJhbSkpID8gJHBhcmFtWydzaG93SXRlbVN1bW1hcmllcyddIDogJzAnOwoJICAgICRtYXBbJ3Nob3dJdGVtRGVzY3JpcHRpb25zJ10gPQoJCSAgICAoYXJyYXlfa2V5X2V4aXN0cygnc2hvd0l0ZW1EZXNjcmlwdGlvbnMnLCAkcGFyYW0pKSA/ICRwYXJhbVsnc2hvd0l0ZW1EZXNjcmlwdGlvbnMnXSA6ICcwJzsKCSAgICAkbWFwWydNYXBDb250cm9sVHlwZSddID0gCgkJICAgIChhcnJheV9rZXlfZXhpc3RzKCdNYXBDb250cm9sVHlwZScsICRwYXJhbSkpID8gJHBhcmFtWydNYXBDb250cm9sVHlwZSddIDogJ1NtYWxsJzsKCSAgICAkbWFwWydNYXBDb250cm9sUG9zJ10gPSAKCQkgICAgKGFycmF5X2tleV9leGlzdHMoJ01hcENvbnRyb2xQb3MnLCAkcGFyYW0pKSA/ICRwYXJhbVsnTWFwQ29udHJvbFBvcyddIDogJzAnOwoJICAgICRtYXBbJ01hcENvbnRyb2xQb3NPZmZZJ10gPSAKCQkgICAgKGFycmF5X2tleV9leGlzdHMoJ01hcENvbnRyb2xQb3NPZmZZJywgJHBhcmFtKSkgPyAkcGFyYW1bJ01hcENvbnRyb2xQb3NPZmZZJ10gOiAnMzAnOwoJICAgICRtYXBbJ01hcENvbnRyb2xQb3NPZmZYJ10gPSAKCQkgICAgKGFycmF5X2tleV9leGlzdHMoJ01hcENvbnRyb2xQb3NPZmZYJywgJHBhcmFtKSkgPyAkcGFyYW1bJ01hcENvbnRyb2xQb3NPZmZYJ10gOiAnMzAnOwoJICAgICRtYXBbJ2RlZmF1bHRhbGJ1bWNvbG9yJ10gPSAKCQkgICAgKGFycmF5X2tleV9leGlzdHMoJ2RlZmF1bHRhbGJ1bWNvbG9yJywgJHBhcmFtKSkgPyAkcGFyYW1bJ2RlZmF1bHRhbGJ1bWNvbG9yJ10gOiAnJzsKCSAgICAkbWFwWydkZWZhdWx0cGhvdG9jb2xvciddID0gCgkJICAgIChhcnJheV9rZXlfZXhpc3RzKCdkZWZhdWx0cGhvdG9jb2xvcicsICRwYXJhbSkpID8gJHBhcmFtWydkZWZhdWx0cGhvdG9jb2xvciddIDogJyc7CgkgICAgJG1hcFsnZGVmYXVsdGdyb3VwY29sb3InXSA9IAoJCSAgICAoYXJyYXlfa2V5X2V4aXN0cygnZGVmYXVsdGdyb3VwY29sb3InLCAkcGFyYW0pKSA/ICRwYXJhbVsnZGVmYXVsdGdyb3VwY29sb3InXSA6ICcnOwoJICAgICRtYXBbJ0dvb2dsZU92ZXJ2aWV3J10gPSAKCQkgICAgKGFycmF5X2tleV9leGlzdHMoJ0dvb2dsZU92ZXJ2aWV3JywgJHBhcmFtKSkgPyAkcGFyYW1bJ0dvb2dsZU92ZXJ2aWV3J10gOiBmYWxzZTsKCgkgICAgJG1hcFsnR1pvb20nXSA9IChhcnJheV9rZXlfZXhpc3RzKCdHWm9vbScsICRwYXJhbSkpID8gJHBhcmFtWydHWm9vbSddIDogZmFsc2U7CgkgICAgaWYgKCRtYXBbJ0dab29tJ10pIHsKCQkkbWFwWydHWlBvcyddID0gJHBhcmFtWydHWlBvcyddOwoJCSRtYXBbJ0daUG9zT2ZmWCddID0gaXNzZXQoJHBhcmFtWydHWlBvc09mZlgnXSkgPyAkcGFyYW1bJ0daUG9zT2ZmWCddIDogNzsKCQkkbWFwWydHWlBvc09mZlknXSA9IGlzc2V0KCRwYXJhbVsnR1pQb3NPZmZZJ10pID8gJHBhcmFtWydHWlBvc09mZlknXSA6IDMwOwoJICAgIH0KCgkgICAgaWYgKCRtYXBbJ0dvb2dsZU92ZXJ2aWV3J10pIHsKCQkkbWFwWydHT1NpemVYJ10gPSBpc3NldCgkcGFyYW1bJ0dPU2l6ZVgnXSkgPyAkcGFyYW1bJ0dPU2l6ZVgnXSA6IDIwMDsKCQkkbWFwWydHT1NpemVZJ10gPSBpc3NldCgkcGFyYW1bJ0dPU2l6ZVknXSkgPyAkcGFyYW1bJ0dPU2l6ZVknXSA6IDIwMDsKCQkkbWFwWydHT1BvcyddID0gaXNzZXQoJHBhcmFtWydHT1BvcyddKSA/ICRwYXJhbVsnR09Qb3MnXSA6IDM7CgkJJG1hcFsnR09UeXBlJ10gPSBpc3NldCgkcGFyYW1bJ0dPVHlwZSddKSA/ICRwYXJhbVsnR09UeXBlJ10gOiAnR19TQVRFTExJVEVfVFlQRSc7CgkJJG1hcFsnR09Qb3NPZmZYJ10gPSBpc3NldCgkcGFyYW1bJ0dPUG9zT2ZmWCddKSA/ICRwYXJhbVsnR09Qb3NPZmZYJ10gOiAwOwoJCSRtYXBbJ0dPUG9zT2ZmWSddID0gaXNzZXQoJHBhcmFtWydHT1Bvc09mZlknXSkgPyAkcGFyYW1bJ0dPUG9zT2ZmWSddIDogMDsKCSAgICB9CgoJICAgIC8qIHByZWxvYWQgSU1HIGZvciBJRSAqLwoJICAgICRtYXBbJ3ByZWxvYWQnXSA9ICcnOwoKCSAgICAvKiBQcmVsb2FkIFBob3RvIEljb25zICovCgkgICAgbGlzdCAoJFNpemVzLCAkbWFwWydwcmVsb2FkJ10pID0gCgkJICAgIEdvb2dsZU1hcFV0aWxpdGllczo6c2V0UHJlbG9hZEZyb21Gb2xkZXIoJG1hcFsncHJlbG9hZCddLCAkbWFwWyd1c2VNYXJrZXJTZXQnXSk7CgkgICAgLyogUHJlbG9hZCBBbGJ1bSBJY29ucyAqLwoJICAgIGxpc3QgKCRTaXplc0EsICRtYXBbJ3ByZWxvYWQnXSkgPSAKCQkgICAgR29vZ2xlTWFwVXRpbGl0aWVzOjpzZXRQcmVsb2FkRnJvbUZvbGRlcigkbWFwWydwcmVsb2FkJ10sICRtYXBbJ3VzZUFsYnVtTWFya2VyU2V0J10pOwoJICAgIC8qIFByZWxvYWQgR3JvdXAgSWNvbnMgKi8KCSAgICBsaXN0ICgkU2l6ZXNHLCAkbWFwWydwcmVsb2FkJ10pID0gCgkJICAgIEdvb2dsZU1hcFV0aWxpdGllczo6c2V0UHJlbG9hZEZyb21Gb2xkZXIoJG1hcFsncHJlbG9hZCddLCAkbWFwWyd1c2VHcm91cE1hcmtlclNldCddKTsKCQkJCgkgICAgJG1hcFsnTWFya2VyU2l6ZVgnXSA9ICRTaXplc1swXTsKCSAgICAkbWFwWydNYXJrZXJTaXplWSddID0gJFNpemVzWzFdOwoJICAgICRtYXBbJ0FsYnVtTWFya2VyU2l6ZVgnXSA9ICRTaXplc0FbMF07CgkgICAgJG1hcFsnQWxidW1NYXJrZXJTaXplWSddID0gJFNpemVzQVsxXTsKCSAgICAkbWFwWydHcm91cE1hcmtlclNpemVYJ10gPSAkU2l6ZXNHWzBdOwoJICAgICRtYXBbJ0dyb3VwTWFya2VyU2l6ZVknXSA9ICRTaXplc0dbMV07CgkgICAgJG1hcFsncm91dGVpdGVtJ10gPSBhcnJheSgpOwoJICAgIAoJICAgICRNYXJrZXJTZXRzID0gYXJyYXkgKAoJICAgIAknR2FsbGVyeVBob3RvSXRlbScgPT4gJG1hcFsndXNlTWFya2VyU2V0J10sCgkgICAgCSdHYWxsZXJ5QWxidW1JdGVtJyA9PiAkbWFwWyd1c2VBbGJ1bU1hcmtlclNldCddLAoJICAgIAknR29vZ2xlTWFwR3JvdXAnID0+ICRtYXBbJ3VzZUdyb3VwTWFya2VyU2V0J10KCQkpOwoJICAgICREZWZhdWx0Q29sb3JzID0gYXJyYXkgKAoJICAgIAknR2FsbGVyeVBob3RvSXRlbScgPT4gJG1hcFsnZGVmYXVsdHBob3RvY29sb3InXSwKCSAgICAJJ0dhbGxlcnlBbGJ1bUl0ZW0nID0+ICRtYXBbJ2RlZmF1bHRhbGJ1bWNvbG9yJ10sCgkgICAgCSdHb29nbGVNYXBHcm91cCcgPT4gJG1hcFsnZGVmYXVsdGdyb3VwY29sb3InXQoJCSk7CgkgICAgCgkgICAgCgkgICAgaWYgKChhcnJheV9rZXlfZXhpc3RzKCdSb3V0ZXMnLCAkcGFyYW0pKSBhbmQgKCRwYXJhbVsnUm91dGVzJ10gIT0gJycpKSB7CgkJbGlzdCAoJHJldCwgJG1hcFsnUm91dGVzJ10sICRtYXBbJ3JvdXRlaXRlbSddKSA9IG1hcEhlbHBlcjo6Z2V0Um91dGVzKCRtYXBQb2ludHMsICRtYXBbJ0VuYWJsZVJvdXRlTnVtYmVyJ10sICRNYXJrZXJTZXRzLCAkRGVmYXVsdENvbG9ycyk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuIGFycmF5ICgkcmV0LCBudWxsKTsKCQl9CgkgICAgfQoKCSAgICAkbWFwWydNYXBXaW5kb3dUeXBlJ10gPQoJCSAgICAoYXJyYXlfa2V5X2V4aXN0cygnTWFwV2luZG93VHlwZScsICRwYXJhbSkpID8gJHBhcmFtWydNYXBXaW5kb3dUeXBlJ10gOiAnZGVmYXVsdCc7CgkgICAgJG1hcFsnQWxidW1MZWdlbmQnXSA9CgkJICAgIChhcnJheV9rZXlfZXhpc3RzKCdBbGJ1bUxlZ2VuZCcsICRwYXJhbSkpID8gJHBhcmFtWydBbGJ1bUxlZ2VuZCddIDogMDsKCSAgICAkbWFwWydQaG90b0xlZ2VuZCddID0KCQkgICAgKGFycmF5X2tleV9leGlzdHMoJ1Bob3RvTGVnZW5kJywgJHBhcmFtKSkgPyAkcGFyYW1bJ1Bob3RvTGVnZW5kJ10gOiAwOwoJICAgICRtYXBbJ0V4cGFuZEFsYnVtTGVnZW5kJ10gPQoJCSAgICAoYXJyYXlfa2V5X2V4aXN0cygnRXhwYW5kQWxidW1MZWdlbmQnLCAkcGFyYW0pKSA/ICRwYXJhbVsnRXhwYW5kQWxidW1MZWdlbmQnXSA6IDA7CgkgICAgJG1hcFsnRXhwYW5kUGhvdG9MZWdlbmQnXSA9CgkJICAgIChhcnJheV9rZXlfZXhpc3RzKCdFeHBhbmRQaG90b0xlZ2VuZCcsICRwYXJhbSkpID8gJHBhcmFtWydFeHBhbmRQaG90b0xlZ2VuZCddIDogMDsKCSAgICAkbWFwWydBbGJ1bUxlZ2VuZHMnXSA9IAoJCSAgICAoYXJyYXlfa2V5X2V4aXN0cygnQWxidW1MZWdlbmRzJywgJHBhcmFtKSAmJiAoJHBhcmFtWydBbGJ1bUxlZ2VuZHMnXSAhPSAnJykpCgkJCT8gZXhwbG9kZSgnfCcsICRwYXJhbVsnQWxidW1MZWdlbmRzJ10pIDogJyc7CgkgICAgJG1hcFsnUGhvdG9MZWdlbmRzJ10gPSAKCQkgICAgKGFycmF5X2tleV9leGlzdHMoJ1Bob3RvTGVnZW5kcycsICRwYXJhbSkgJiYgKCRwYXJhbVsnUGhvdG9MZWdlbmRzJ10gIT0gJycpKSAKCQkJPyBleHBsb2RlKCd8JywgJHBhcmFtWydQaG90b0xlZ2VuZHMnXSkgOiAnJzsKCSAgICAkbWFwWydMZWdlbmRQb3MnXSA9ICghYXJyYXlfa2V5X2V4aXN0cygnTGVnZW5kUG9zJywgJHBhcmFtKSkgPyAwIDogJHBhcmFtWydMZWdlbmRQb3MnXTsKCSAgICAkbWFwWydhbGxtYXJrZXJzJ10gPSBHb29nbGVNYXBVdGlsaXRpZXM6OkFsbE1hcmtlcnMoKTsKCgkgICAgCgkgICAgLyoqCgkgICAgICogQHRvZG8gcmVwbGFjZSB0aGlzIHdpdGggYSBuaWNlIGZ1bmN0aW9uIHRvIGdldCB0aGUgYmFja2dyb3VuZCBjb2xvciBhbmQgY2hlY2sgCgkgICAgICogZm9yIGV4aXN0ZW5jZSBvZiBhIHNpZGViYXIKCSAgICAgKi8KCSAgICAvKiBUZXN0IGZvciB0aGUgZXhpc3RhbmNlIG9mIGEgc2lkZWJhciBvbiB0aGUgZ29vZ2xlIG1hcCB2aWV3ICovCgkgICAgJG1hcFsnc2lkZWJhciddID0gMTsKCgkgICAgJGFic29sdXRlZ2FsbGVyeWRpciA9IHN1YnN0cihkaXJuYW1lKF9fRklMRV9fKSwgMCwgLTExKTsKCSAgICAKCSAgICAvKiBHcmFiIHRoZSBEZWZhdWx0IHRoZW1lIHZhbHVlICh1c2VkIGZvciB0aGUgZ29vZ2xlIG1hcCkgKi8KCSAgICBsaXN0ICgkcmV0LCAkdGhlbWVJZCkgPQoJCSAgICBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnY29yZScsICdkZWZhdWx0LnRoZW1lJyk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsKTsKCSAgICB9CgkgICAgLyogR3JhYiB0aGUgVGhlbWUgRGVmYXVsdCBzZXR0aW5ncyAqLwoJICAgIGxpc3QgKCRyZXQsICRkZWZ0aGVtZSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZFBsdWdpbigndGhlbWUnLCAkdGhlbWVJZCk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsKTsKCSAgICB9CgkgICAgJHNldHRpbmdzID0gJGRlZnRoZW1lLT5nZXRTZXR0aW5ncyhudWxsKTsKCSAgICAkYm9keWNvbG9yID0gJyc7CgkgICAgaWYgKGlzX2FycmF5KCRzZXR0aW5nc1sxXSkpIHsKCQlmb3JlYWNoICgkc2V0dGluZ3NbMV0gYXMgJG51bSA9PiAkYXJyYXlpbmZvKSB7CgkJICAgIGlmICgoJHNldHRpbmdzWzFdWyRudW1dWydrZXknXSA9PSAnY29sb3JwYWNrJykKCQkJICAgIGFuZCAoJHNldHRpbmdzWzFdWyRudW1dWyd2YWx1ZSddICE9ICcnKSkgewoJCQkkY29sb3JwYWNrID0gJHNldHRpbmdzWzFdWyRudW1dWyd2YWx1ZSddOwoJCQkkZmlsZW5hbWUgPSAkYWJzb2x1dGVnYWxsZXJ5ZGlyIC4gJ21vZHVsZXMvY29sb3JwYWNrL3BhY2tzLycKCQkJCS4gJGNvbG9ycGFjayAuICcvY29sb3IuY3NzJzsKCQkJQCRmaWxlcG9pbnRlciA9IGZvcGVuKCRmaWxlbmFtZSwgJ3InKTsKCQkJJGZpbGUgPSAnJzsKCQkJaWYgKCRmaWxlcG9pbnRlcikgewoJCQkgICAgd2hpbGUgKCFmZW9mKCRmaWxlcG9pbnRlcikpIHsKCQkJCSRidWZmZXIgPSBmZ2V0cygkZmlsZXBvaW50ZXIsIDQwOTYpOwoJCQkJJGZpbGUgLj0gJGJ1ZmZlcjsKCQkJICAgIH0KCQkJICAgIGZjbG9zZSgkZmlsZXBvaW50ZXIpOwoJCQl9CgkJCXByZWdfbWF0Y2goJy9ib2R5LmdhbGxlcnkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAoLiopIH0vJywgJGZpbGUsICRtYXRjaCk7CgkJCSRyZXN1bHQgPSBleHBsb2RlKCcgJywgJG1hdGNoWzFdKTsKCQkJJGJvZHljb2xvciA9ICRyZXN1bHRbMF07CgkJICAgIH0KCQl9CgkJaWYgKCRib2R5Y29sb3IgPT0gJycpIHsKCQkgICAgJGJvZHljb2xvciA9ICd3aGl0ZSc7CgkJfQoJICAgIH0KCSAgICAkbWFwWydib2R5Y29sb3InXSA9ICRib2R5Y29sb3I7CgkgICAgaWYgKCRkZWZ0aGVtZS0+Z2V0TmFtZSgpID09ICdGbG9hdHJpeCcpIHsKCQkkbWFwWydzaWRlYmFyJ10gPSAwOwoJICAgIH0KCSAgICBpZiAoJGRlZnRoZW1lLT5nZXROYW1lKCkgPT0gJ0FqYXhpYW4nKSB7CgkJJG1hcFsnV2lkdGhGb3JtYXQnXSA9ICdweCc7CgkJJG1hcFsnbWFwV2lkdGgnXSA9IDY1MDsKCQkkbWFwWydtYXBIZWlnaHQnXSA9ICRtYXBbJ21hcEhlaWdodCddIC0gMjA7CgkgICAgfQoJICAgIGlmICgkZGVmdGhlbWUtPmdldE5hbWUoKSA9PSAnU2lyaXV4JykgewoJCSRtYXBbJ3NpZGViYXInXSA9IDA7CgkJJG1hcFsnV2lkdGhGb3JtYXQnXSA9ICdweCc7CgkJJG1hcFsnbWFwV2lkdGgnXSA9ICRzZXR0aW5nc1sxXVszXVsndmFsdWUnXTsKCSAgICB9CgkgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJzInLCAkc2V0dGluZ3MpKSB7CgkJJHNldHRpbmdzID0gJHNldHRpbmdzWzJdOwoKCQlmb3JlYWNoICgkc2V0dGluZ3MgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkgICAgaWYgKCRrZXkgPT0gJ3NpZGViYXJCbG9ja3MnKSB7CgkJCWxpc3QgKCRzdWNjZXNzLCAkc2lkZWJhcnZhbHVlKSA9CgkJCQkkZGVmdGhlbWUtPnVucGFja1NldHRpbmcoJ2Jsb2NrLWxpc3QnLCAkdmFsdWUpOwoJCQlpZiAoJHNpZGViYXJ2YWx1ZSA9PSAnJykgewoJCQkgICAgJG1hcFsnc2lkZWJhciddID0gMDsKCQkJfQoJCSAgICB9CgkJfQoJICAgIH0gZWxzZSBpZiAoaXNfYXJyYXkoJHNldHRpbmdzWzFdKSkgewoJCWZvcmVhY2ggKCRzZXR0aW5nc1sxXSBhcyAkbnVtID0+ICRhcnJheXZhbHVlKSB7CgkJICAgIGlmICgkYXJyYXl2YWx1ZVsna2V5J10gPT0gJ3NpZGViYXJCbG9ja3MnKSB7CgkJCWxpc3QgKCRzdWNjZXNzLCAkc2lkZWJhcnZhbHVlKSA9ICRkZWZ0aGVtZS0+dW5wYWNrU2V0dGluZygnYmxvY2stbGlzdCcsCgkJCQkkc2V0dGluZ3NbMV1bJG51bV1bJ3ZhbHVlJ10pOwoJCQlpZiAoJHNpZGViYXJ2YWx1ZSA9PSAnJykgewoJCQkgICAgJG1hcFsnc2lkZWJhciddID0gMDsKCQkJfQoJCSAgICB9CgkJfQoJICAgIH0gZWxzZSB7CgkJJG1hcFsnc2lkZWJhciddID0gMDsKCSAgICB9CgoJICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygnU2hvd0ZpbHRlcnMnLCAkcGFyYW0pKSB7CgkJJHBhcmFtWydTaG93RmlsdGVycyddID0gJzAnOwoJICAgIH0KCSAgICAkbWFwWydTaG93RmlsdGVycyddID0gJHBhcmFtWydTaG93RmlsdGVycyddOwoJfQoJCgkvKiBJZiB0aGUgIlBpY2siIE1vZGUgaXMgcmVxdWlyZWQgLi4uICovCglpZiAoJG1hcFsnbW9kZSddID09ICdQaWNrJykgewoJICAgIC8qIEdldCB0aGUgaXRlbUlkIHRvIGJlIGFibGUgbGF0ZXIgdG8gcG9wdWxhdGUgdGhlIGNvb3JkaW5hdGVkIHBpY2tlZCBvdXQuICovCgkgICAgbGlzdCAoJGZvcm1bJ2lkJ10sICRtYXBbJ3BsdWdpbiddKSA9IEdhbGxlcnlVdGlsaXRpZXM6OmdldFJlcXVlc3RWYXJpYWJsZXMoJ2l0ZW1JZCcsICdwbHVnaW4nKTsKCSAgICAkZm9ybVsnZm9ybU5hbWUnXSA9ICdTaG93TWFwJzsKCgkgICAgLyogR2V0IHRoZSB0aHVtYiB0byBkaXNwbGF5ICovCgkgICAgbGlzdCAoJHJldCwgJHRodW1iKSA9IEdhbGxlcnlDb3JlQXBpOjpmZXRjaFRodW1ibmFpbHNCeUl0ZW1JZHMoYXJyYXkoJGZvcm1bJ2lkJ10pKTsKCSAgICBpZiAoJHJldCkgewoJCQlyZXR1cm4gYXJyYXkgKCRyZXQsIG51bGwpOwoJCX0KCgkgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJGZvcm1bJ2lkJ10sICR0aHVtYikpIHsKCQkkZm9ybVsnaXRlbXRodW1iJ10gPSAkZ3VybC0+Z2VuZXJhdGVVcmwoYXJyYXkoCgkJCSd2aWV3JyA9PiAnY29yZS5Eb3dubG9hZEl0ZW0nLAoJCQknaXRlbUlkJyA9PiAkdGh1bWJbJGZvcm1bJ2lkJ11dLT5nZXRJZCgpLAoJCQknc2VyaWFsTnVtYmVyJyA9PiAkdGh1bWJbJGZvcm1bJ2lkJ11dLT5nZXRTZXJpYWxOdW1iZXIoKSkpOwoJICAgIH0KCgkgICAgLyogZ2V0IGRhdGEgZm9yIGl0ZW0gZWRpdCAqLwoJICAgIGlmICgkbWFwWydwbHVnaW4nXSA9PSAnSXRlbUVkaXQnIG9yICRtYXBbJ3BsdWdpbiddID09ICdHcm91cENvb3JkJykgewoJCSRncm91cGlkID0gR2FsbGVyeVV0aWxpdGllczo6Z2V0UmVxdWVzdFZhcmlhYmxlcygnZ3JvdXBpZCcpOwoJCWlmICghZW1wdHkoJGdyb3VwaWQpKSB7CgkJICAgICRmb3JtWydpZCddID0gJGdyb3VwaWQ7CgkJfQoKCQkvKiBHZXQgY29vcmRpbmF0ZXMgZm9yIHRoaXMgaXRlbSAqLwoJCSRxdWVyeSA9ICcKCQlTRUxFQ1QKCQkgIFttYXBNYXA6OmZpZWxkXSwKCQkgIFttYXBNYXA6OnZhbHVlXQoJCUZST00KCQkgIFttYXBNYXBdCgkJV0hFUkUKCQkgIFttYXBNYXA6Oml0ZW1JZF0gPSBcJycgLiAkZm9ybVsnaWQnXSAuICdcJwoJCSc7CgkJbGlzdCAoJHJldCwgJHJlc3VsdHMpID0gJGdhbGxlcnktPnNlYXJjaCgkcXVlcnksIGFycmF5KCksIGFycmF5KCkpOwoKCQlpZiAoJHJlc3VsdHMtPnJlc3VsdENvdW50KCk+MCkgewoJCSAgICB3aGlsZSAoJHJlc3VsdCA9ICRyZXN1bHRzLT5uZXh0UmVzdWx0KCkpIHsKCQkJaWYgKCRyZXN1bHRbMF0gPT0gJ0dQUycpIHsKCQkJICAgICRtYXBbJ2Nvb3JkaW5hdGVzJ10gPSAkcmVzdWx0WzFdOwoJCQl9CgkJCWlmICgkcmVzdWx0WzBdID09ICdab29tTGV2ZWwnKSB7CgkJCSAgICAkbWFwWyd6b29tTGV2ZWwnXSA9ICRyZXN1bHRbMV07CgkJCX0KCQkJaWYgKCRyZXN1bHRbMF0gPT0gJ0NvbG9ycycpIHsKCQkJICAgICRtYXBbJ2NvbG9ycyddID0gJHJlc3VsdFsxXTsKCQkJfQoJCSAgICB9CgkJfQoKCQlpZiAoJG1hcFsncGx1Z2luJ10gIT0gJ0dyb3VwQ29vcmQnKSB7CgkJICAgIGxpc3QgKCRyZXQsICRpdGVtKSA9ICR0aGlzLT5fZ2V0SXRlbSgpOwoJCSAgICAkc2V0ID0gR2FsbGVyeVV0aWxpdGllczo6aXNBKCRpdGVtLCAnR2FsbGVyeUFsYnVtSXRlbScpCgkJCSAgICA/ICdhbGJ1bScKCQkJICAgIDogKChHYWxsZXJ5VXRpbGl0aWVzOjppc0EoJGl0ZW0sICdHYWxsZXJ5UGhvdG9JdGVtJykpCgkJCSAgICAgID8gJ3Bob3RvJwoJCQkgICAgICA6ICdjb21tb24nKTsKCQkgICAgJG1hcFsndHlwZSddID0gJHNldDsKCQl9CgkgICAgfQoKCSAgICBpZiAoJG1hcFsncGx1Z2luJ10gPT0gJ0FkbWluQ2VudGVyJyBhbmQgISRtYXBbJ0F1dG9DZW50ZXJab29tJ10pIHsKCQlpZiAoaXNzZXQoJHBhcmFtWydjZW50ZXJMb25nTGF0J10pKSB7CgkJICAgICRtYXBbJ2NlbnRlckxvbmdMYXQnXSA9ICRwYXJhbVsnY2VudGVyTG9uZ0xhdCddOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtWyd6b29tTGV2ZWwnXSkpIHsKCQkgICAgJG1hcFsnem9vbUxldmVsJ10gPSAkcGFyYW1bJ3pvb21MZXZlbCddOwoJCX0KCgkJJG1hcFsnY29sb3JzJ10gPSAnJzsKCQkkbWFwWyd0eXBlJ10gPSAnY29tbW9uJzsKCSAgICB9CgoJICAgIGlmICgkbWFwWydwbHVnaW4nXSA9PSAnRmlsdGVycycpIHsKCgkJJG1hcFsnZmlsdGVyJ10gPSB0cnVlOwoKCQkkY2VudGVyID0gR2FsbGVyeVV0aWxpdGllczo6Z2V0UmVxdWVzdFZhcmlhYmxlcygnY2VudGVyJyk7CgkJJHpvb20gPSBHYWxsZXJ5VXRpbGl0aWVzOjpnZXRSZXF1ZXN0VmFyaWFibGVzKCd6b29tJyk7CgkJaWYgKCFlbXB0eSgkY2VudGVyKSkgewoJCSAgICAkbWFwWydjb29yZGluYXRlcyddID0gJGNlbnRlcjsKCQl9CgkJaWYgKCFlbXB0eSgkem9vbSkpIHsKCQkgICAgJG1hcFsnem9vbUxldmVsJ10gPSAkem9vbTsKCQl9CgkgICAgfQoKCgkgICAgLyogbWFrZSBzdXJlIHBhcmFtZXRlcnMgYXJlIHNldC4gKi8KCSAgICBpZiAoIWlzc2V0KCRtYXBbJ2Nvb3JkaW5hdGVzJ10pKSB7CgkgICAgCSRtYXBbJ2Nvb3JkaW5hdGVzJ10gPSAKCQkgICAgKGlzc2V0KCRtYXBbJ0dWTUNlbnRlciddKSAmJiAkbWFwWydHVk1DZW50ZXInXSAhPSAnJykgPyAkbWFwWydHVk1DZW50ZXInXSA6ICczMywtMjAnOwoJICAgIH0KCSAgICAkbWFwWydjZW50ZXJMb25nTGF0J10gPSAkbWFwWydjb29yZGluYXRlcyddOwoJICAgIAoJICAgIGlmICghaXNzZXQoJG1hcFsnem9vbUxldmVsJ10pIG9yICRtYXBbJ3pvb21MZXZlbCddID09ICcnKSB7CgkJJG1hcFsnem9vbUxldmVsJ10gPSAoaXNzZXQoJG1hcFsnR1ZNWm9vbSddKSBhbmQgJG1hcFsnR1ZNWm9vbSddICE9ICcnKSA/ICRtYXBbJ0dWTVpvb20nXSA6ICcyJzsKCSAgICB9CgkgICAgaWYgKCFpc3NldCgkbWFwWydjb2xvcnMnXSkpIHsKCQkkbWFwWydjb2xvcnMnXSA9ICcnOwoJICAgIH0KCSAgICBpZiAoIWlzc2V0KCRtYXBbJ3R5cGUnXSkpIHsKCQkkbWFwWyd0eXBlJ10gPSAnY29tbW9uJzsKCSAgICB9CgkgICAgaWYgKCFpc3NldCgkbWFwWydtYXBUeXBlJ10pKSB7CgkJJG1hcFsnbWFwVHlwZSddID0gJ0dfTUFQX1RZUEUnOwoJICAgIH0KCSAgICAvKiBGZWF0dXJlIHNldCB0cmFuc2ZlcnQgKi8KCSAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnTGVnZW5kRmVhdHVyZScsICRwYXJhbSkpIHsKCQkkbWFwWydMZWdlbmRGZWF0dXJlJ10gPSAkcGFyYW1bJ0xlZ2VuZEZlYXR1cmUnXTsKCSAgICB9CgoJICAgICR0ZW1wbGF0ZS0+c2V0VmFyaWFibGUoJ2NvbnRyb2xsZXInLCAnbWFwLlNob3dNYXAnKTsKCgl9CgoJJG1hcFsnaGFzYWRtaW5yaWdodHMnXSA9IGZhbHNlOwoJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphc3NlcnRVc2VySXNTaXRlQWRtaW5pc3RyYXRvcigpOwoJaWYgKCEkcmV0KSB7CgkgICAgJG1hcFsnaGFzYWRtaW5yaWdodHMnXSA9IHRydWU7Cgl9CgoJJG1hcFsnZnVsbFNjcmVlbiddID0gJGZ1bGxTY3JlZW47CgkKCSR0ZW1wbGF0ZS0+c2V0VmFyaWFibGUoJ21hcCcsICRtYXApOwoKICAgIC8qIFJlbmRlciB0aGUgYWN0dWFsIHRlbXBsYXRlIHdpdGggdGhlIG1hcCBkaXNwbGF5ICovCglyZXR1cm4gYXJyYXkobnVsbCwgYXJyYXkoJ2JvZHknID0+ICdtb2R1bGVzL21hcC90ZW1wbGF0ZXMvU2hvd01hcC50cGwnLAoJCQkJICd1c2VGdWxsU2NyZWVuJyA9PiAkZnVsbFNjcmVlbikpOwogICAgfQp9Cj8+');
expand_3537250845($outputDir, 'classes/GNUmakefile', 'aW5jbHVkZSAuLi8uLi8uLi9saWIvdG9vbHMvYmluL0dOVW1ha2VmaWxlLmNsYXNzZXMK');
expand_3537250845($outputDir, 'classes/GalleryStorage/GNUmakefile', 'aW5jbHVkZSAuLi8uLi8uLi8uLi9saWIvdG9vbHMvYmluL0dOVW1ha2VmaWxlLkdhbGxlcnlTdG9yYWdlCg==');
expand_3537250845($outputDir, 'classes/GalleryStorage/schema.tpl', 'IyMgbXlzcWwKIyBtYXBNYXAKQ1JFQVRFIFRBQkxFIERCX1RBQkxFX1BSRUZJWG1hcE1hcCgKIERCX0NPTFVNTl9QUkVGSVhpdGVtSWQgdmFyY2hhcigxMSkgTk9UIE5VTEwsCiBEQl9DT0xVTU5fUFJFRklYZmllbGQgdmFyY2hhcigxMjgpIE5PVCBOVUxMLAogREJfQ09MVU1OX1BSRUZJWHZhbHVlIHZhcmNoYXIoMjU1KSwKIERCX0NPTFVNTl9QUkVGSVhzZXRJZCBpbnQoMTEpLAogREJfQ09MVU1OX1BSRUZJWHNldFR5cGUgaW50KDExKSwKIElOREVYIERCX1RBQkxFX1BSRUZJWG1hcE1hcF83NTk4NShEQl9DT0xVTU5fUFJFRklYaXRlbUlkKQopIFRZUEU9REJfVEFCTEVfVFlQRSA7CgpJTlNFUlQgSU5UTyBEQl9UQUJMRV9QUkVGSVhTY2hlbWEgKAogREJfQ09MVU1OX1BSRUZJWG5hbWUsCiBEQl9DT0xVTU5fUFJFRklYbWFqb3IsCiBEQl9DT0xVTU5fUFJFRklYbWlub3IKKSBWQUxVRVMoJ21hcE1hcCcsIDEsIDEpOwoKIyMgcG9zdGdyZXMKIyBtYXBNYXAKQ1JFQVRFIFRBQkxFIERCX1RBQkxFX1BSRUZJWG1hcE1hcCgKIERCX0NPTFVNTl9QUkVGSVhpdGVtSWQgdmFyY2hhcigxMSkgTk9UIE5VTEwsCiBEQl9DT0xVTU5fUFJFRklYZmllbGQgVkFSQ0hBUigxMjgpIE5PVCBOVUxMLAogREJfQ09MVU1OX1BSRUZJWHZhbHVlIFZBUkNIQVIoMjU1KSwKIERCX0NPTFVNTl9QUkVGSVhzZXRJZCBJTlRFR0VSLAogREJfQ09MVU1OX1BSRUZJWHNldFR5cGUgSU5URUdFUgopOwoKQ1JFQVRFIElOREVYIERCX1RBQkxFX1BSRUZJWG1hcE1hcF83NTk4NSBPTiBEQl9UQUJMRV9QUkVGSVhtYXBNYXAoREJfQ09MVU1OX1BSRUZJWGl0ZW1JZCk7CgpJTlNFUlQgSU5UTyBEQl9UQUJMRV9QUkVGSVhTY2hlbWEgKAogREJfQ09MVU1OX1BSRUZJWG5hbWUsCiBEQl9DT0xVTU5fUFJFRklYbWFqb3IsCiBEQl9DT0xVTU5fUFJFRklYbWlub3IKKSBWQUxVRVMoJ21hcE1hcCcsIDEsIDEpOwoKIyMgb3JhY2xlCiMgbWFwTWFwCkNSRUFURSBUQUJMRSBEQl9UQUJMRV9QUkVGSVhtYXBNYXAoCiBEQl9DT0xVTU5fUFJFRklYaXRlbUlkIHZhcmNoYXIoMTEpIE5PVCBOVUxMLAogREJfQ09MVU1OX1BSRUZJWGZpZWxkIFZBUkNIQVIyKDEyOCkgTk9UIE5VTEwsCiBEQl9DT0xVTU5fUFJFRklYdmFsdWUgVkFSQ0hBUjIoMjU1KSwKIERCX0NPTFVNTl9QUkVGSVhzZXRJZCBJTlRFR0VSLAogREJfQ09MVU1OX1BSRUZJWHNldFR5cGUgSU5URUdFUgopOwoKQ1JFQVRFIElOREVYIERCX1RBQkxFX1BSRUZJWG1hcE1hcF83NTk4NQogICBPTiBEQl9UQUJMRV9QUkVGSVhtYXBNYXAoREJfQ09MVU1OX1BSRUZJWGl0ZW1JZCk7CgpJTlNFUlQgSU5UTyBEQl9UQUJMRV9QUkVGSVhTY2hlbWEgKAogREJfQ09MVU1OX1BSRUZJWG5hbWUsCiBEQl9DT0xVTU5fUFJFRklYbWFqb3IsCiBEQl9DT0xVTU5fUFJFRklYbWlub3IKKSBWQUxVRVMoJ21hcE1hcCcsIDEsIDEpOwoKIyMgZGIyCiMgbWFwTWFwCkNSRUFURSBUQUJMRSBEQl9UQUJMRV9QUkVGSVhtYXBNYXAoCiBEQl9DT0xVTU5fUFJFRklYaXRlbUlkIHZhcmNoYXIoMTEpIE5PVCBOVUxMLAogREJfQ09MVU1OX1BSRUZJWGZpZWxkIFZBUkNIQVIoMTI4KSBOT1QgTlVMTCwKIERCX0NPTFVNTl9QUkVGSVh2YWx1ZSBWQVJDSEFSKDI1NSksCiBEQl9DT0xVTU5fUFJFRklYc2V0SWQgSU5URUdFUiwKIERCX0NPTFVNTl9QUkVGSVhzZXRUeXBlIElOVEVHRVIKKTsKCkNSRUFURSBJTkRFWCBEQl9UQUJMRV9QUkVGSVhDdXN0bzY1Xzc1OTg1CiAgIE9OIERCX1RBQkxFX1BSRUZJWG1hcE1hcChEQl9DT0xVTU5fUFJFRklYaXRlbUlkKTsKCklOU0VSVCBJTlRPIERCX1RBQkxFX1BSRUZJWFNjaGVtYSAoCiBEQl9DT0xVTU5fUFJFRklYbmFtZSwKIERCX0NPTFVNTl9QUkVGSVhtYWpvciwKIERCX0NPTFVNTl9QUkVGSVhtaW5vcgopIFZBTFVFUygnbWFwTWFwJywgMSwgMSk7Cgo=');
expand_3537250845($outputDir, 'classes/GoogleMapUtilities.class', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCiAqLwoKLyoqCiAqIEBwYWNrYWdlIG1hcAogKiBAYXV0aG9yIEVyaWMgSCBEYW5pZWwgPGVoZGFuaWVsQGdtYWlsLmNvbT4KICogQHZlcnNpb24gJFJldmlzaW9uOiAxNTkxICQKICoKICovCgovKioKICogVGhpcyBpbXBsZW1lbnRzIHNvbWUgR29vZ2xlIG1hcCB1dGlsaXRpZXMgYW5kIGZ1bmN0aW9ucwogKgogKiBAcGFja2FnZSBtYXAKICovCgpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2luY2x1ZGVzL3Rvb2xraXQvSlBFRy5waHAnKTsKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9pbmNsdWRlcy90b29sa2l0L0VYSUYucGhwJyk7CgpjbGFzcyBHb29nbGVNYXBVdGlsaXRpZXMgewoKICAgIC8qKgogICAgICogV3JpdHRlbiBieSBKY2FtcGJlbDEKCSAqIEdldCBhIGlkZWFsIGNlbnRlciBhbmQgem9vbSBsZXZlbCBmb3IgYSBzZXQgb2YgY29vcmRzIGFuZCBhIG1hcCBzaXplCiAgICAgKgogICAgICogQHBhcmFtICRjb29yZHMgYXJyYXkgb2YgY29vcmRpbmF0ZXMgdG8gdGFrZSBpbnRvIGFjY291bnQKICAgICAqCQkgICRtYXB3IHRoZSB3aWR0aCBvZiB0aGUgbWFwIGluIHBpeGVscwogICAgICoJCSAgJG1hcGggdGhlIGhlaWdodCBvZiB0aGUgbWFwIGluIHBpeGVscwogICAgICogQHJldHVybiAkem9vbSB0aGUgaWRlYWwgem9vbSBsZXZlbAogICAgICoJCSAgICRjZW50ZXIgdGhlIGlkZWFsIGNlbnRlcgogICAgICoJCSAgICRtYXhtZXJjbWlsZXMgdGhlIG1heGltdW0gbWVyY2FudGlsZSBwcm9qZWN0aW9uIG1pbGVzIGluIGxhdGl0dWRlIGZvciB0aGF0IGxldmVsIG9mIHpvb20KICAgICAqCQkgICAkbWF4bG9ubWlsZXMgdGhlIG1heGltdW0gbG9uZ2l0dWRlIG1pbGVzIGZvciB0aGF0IGxldmVsIG9mIHpvb20KICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIEdldFpvb21hbmRDZW50ZXIoJGNvb3JkcywgJiR6b29tLCAmJGNlbnRlciwgJG1hcHcsICRtYXBoLCAmJG1heG1lcmNtaWxlcywgCgkJCSAgICAgICYkbWF4bG9ubWlsZXMpIHsKCS8qIAoJICogcHJlOiAkY29vcmRzIGlzIGluIHRoZSBmb3JtIChsb24sbGF0KQoJICogcG9zdDogcmV0dXJucyAiaWRlYWwiIHpvb20gYW5kIGNlbnRlciBmb3IgdGhlIG1hcAoJICovCgkkYmFzZSA9ICgzLjcyNUUtMDYpKjEuNTsgLyogY29uc3RhbnQgTWVyY2FudG9yIFJhZGlhbiBtaWxlcyBwZXIgcGl4ZWwgYXQgem9vbSBsZXZlbCA1ICovCgoJLyogdmVyaWZ5IHRoYXQgbW9yZSB0aGFuIG9uZSBkaXN0aW5jdCBjb29yZGluYXRlIGV4aXN0cyAqLwoJaWYgKCFpc19hcnJheSgkY29vcmRzKSkgewoJICAgICR6b29tID0gMTU7CgkgICAgJGNlbnRlciA9ICcwLDAnOwoJICAgIHJldHVybjsKCX0KCWlmIChjb3VudChhcnJheV91bmlxdWUoJGNvb3JkcykpID09IDEpIHsKCSAgICAkem9vbSA9IDY7CgkgICAgJGNlbnRlciA9IGltcGxvZGUoJ2AnLCAkY29vcmRzKTsKCSAgICByZXR1cm47Cgl9IGVsc2UgaWYgKGNvdW50KGFycmF5X3VuaXF1ZSgkY29vcmRzKSkgPT0gMCkgewoJICAgICR6b29tID0gMTU7CgkgICAgJGNlbnRlciA9ICcwLDAnOwoJICAgIHJldHVybjsKCX0KCgkkYyA9IGFycmF5KCk7CgkoZmxvYXQpJG1lcmNsYXQgPSBhcnJheSgpOwoJKGZsb2F0KSRsb24gPSBhcnJheSgpOwoKCS8qIG5hc3R5IGhhY2tlcnkgLi4uIG5lZWQgdG8gcmVtZW1iZXIgaG93IHRvIHdyaXRlIGNvZGUuICovCglmb3JlYWNoICgkY29vcmRzIGFzICR2YWwpIHsKCSAgICAkYyA9IGV4cGxvZGUoJywnLCAkdmFsKTsKCSAgICAkeCA9IHRhbihkZWcycmFkKCRjWzFdKSk7CgkgICAgLyogbWF0aCBub25zZW5zZSB0byB0cmFuc2xhdGUgdG8geHkgY29vcmRpbmF0ZXMgaW4gTWVyY2F0b3IgcHJvamVjdGlvbiAqLwoJICAgIGFycmF5X3B1c2goJG1lcmNsYXQsIGxvZygkeCArIHNxcnQoJHggKiAkeCArIDEpKSAvIGxvZyhleHAoMSkpKTsKCSAgICBhcnJheV9wdXNoKCRsb24sICRjWzBdKTsKCX0KCSRjZW50ZXJsb25nID0gKG1pbigkbG9uKSArIG1heCgkbG9uKSkgLyAyOwoJaWYgKHN0cnBvcygkY2VudGVybG9uZywgJywnKSkgewoJICAgICRjZW50ZXJsb25nID0gc3RyX3JlcGxhY2UoJywnLCAnLicsICRjZW50ZXJsb25nKTsKCX0KCSRjZW50ZXJsYXQgPSByYWQyZGVnKGF0YW4oc2luaCggKG1pbigkbWVyY2xhdCkgKyBtYXgoJG1lcmNsYXQpKSAvIDIgKSkpOwoJaWYgKHN0cnBvcygkY2VudGVybGF0LCAnLCcpKSB7CgkgICAgJGNlbnRlcmxhdCA9IHN0cl9yZXBsYWNlKCcsJywgJy4nLCAkY2VudGVybGF0KTsKCX0KCgkkY2VudGVyID0gJGNlbnRlcmxvbmcgLiAnLCcgLiAkY2VudGVybGF0OwoKCSRtYXhtZXJjbWlsZXMgPSBtYXgoJG1lcmNsYXQpIC0gbWluKCRtZXJjbGF0KTsKCSRtYXhsb25taWxlcyA9IGRlZzJyYWQobWF4KCRsb24pIC0gbWluKCRsb24pKTsKCglpZiAoJG1heG1lcmNtaWxlcyAvICRtYXBoID4gJG1heGxvbm1pbGVzIC8gJG1hcHcpIHsKCSAgICAkZGlzdHBlcnBpeGVsID0gJG1heG1lcmNtaWxlcyAvICRtYXBoOwoJfSBlbHNlIHsKCSAgICAkZGlzdHBlcnBpeGVsID0gJG1heGxvbm1pbGVzIC8gJG1hcHc7Cgl9CgoJJHpvb20gPSAoIChsb2coJGRpc3RwZXJwaXhlbCkgLSBsb2coJGJhc2UpICkgLyBsb2coMikgKSArIDU7Cgkkem9vbSA9IGNlaWwoJHpvb20pOwoJaWYgKCR6b29tID4gMTcgKSB7CgkgICAgJHpvb20gPSAxNzsKCX0KCWlmICgkem9vbSA8IDAgKSB7CgkgICAgJHpvb20gPSAwOwoJfQogICAgfQoKCiAgICAvKioKICAgICAqIFZhbGlkYXRlIHRoYXQgYSBmaWxlIGV4aXN0cyBhbmQgY2FuIGJlIHVzZWQgZm9yIHRoZSBtb2R1bGUKICAgICAqCiAgICAgKiBAcGFyYW0gJHJlcCB0aGUgZm9sZGVyIHdlJ3JlIGxvb2tpbmcgaW4KICAgICAqCQkgICRmaWxlIHRoZSBmaWxlIHRvIHZlcmlmeQogICAgICogQHJldHVybiBib29sZWFuIHRydWUsIGlmIHRoZSBmaWxlIHZhbGlkYXRlcwogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gR29vZEZpbGUoJHJlcCwgJGZpbGUpIHsKICAgIAkkZ29vZCA9IGZhbHNlOwoJaWYgKCFpc19kaXIoJHJlcCAuICRmaWxlKSBhbmQgKHN1YnN0cigkZmlsZSwgLTEpIDw+ICcuJykgYW5kICgkZmlsZSAhPSAnQ1ZTJykgYW5kICgkZmlsZSAhPSAnLnN2bicpKSB7CgkgICAgJGdvb2QgPSB0cnVlOwoJfQoJcmV0dXJuICRnb29kOwogICAgfQoKICAgIC8qKgogICAgICogVmFsaWRhdGUgdGhhdCBhIGZvbGRlciBleGlzdHMgYW5kIGNhbiBiZSB1c2VkIGZvciB0aGUgbW9kdWxlCiAgICAgKgogICAgICogQHBhcmFtICRyZXAgdGhlIGZvbGRlciB3ZSdyZSBsb29raW5nIGluCiAgICAgKgkJICAkZmlsZSB0aGUgZm9sZGVyIHRvIHZlcmlmeQogICAgICogQHJldHVybiBib29sZWFuIHRydWUsIGlmIHRoZSBmb2xkZXIgdmFsaWRhdGVzCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBHb29kRm9sZGVyKCRyZXAsICRmaWxlKSB7CgkkZ29vZCA9IGZhbHNlOwoJaWYgKGlzX2RpcigkcmVwIC4gJGZpbGUpIGFuZCAoc3Vic3RyKCRmaWxlLCAtMSkgPD4gJy4nKSBhbmQgKCRmaWxlICE9ICdDVlMnKSBhbmQgKCRmaWxlICE9ICcuc3ZuJykpIHsKCSAgICAkZ29vZCA9IHRydWU7Cgl9CglyZXR1cm4gJGdvb2Q7CiAgICB9CgoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgc2VsZWN0IGZyb20gYSBjb2xvcmxpc3QgZmlsZSBpbiBhIGZvbGRlcgogICAgICoKICAgICAqIEBwYXJhbSAkZm9sZGVyIHRoZSBmb2xkZXIgd2UncmUgbG9va2luZyBpbgogICAgICoJCSAgJHNlbGVjdGVkLCB3aGljaCBpdGVtIHNob3VsZCBiZSBzZWxlY3RlZCBpZiBhbnkKICAgICAqIEByZXR1cm4gc3RyaW5nIEhUTUwgPG9wdGlvbnM+IGl0ZW1zCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBPcHRpb25Gcm9tQ29sb3JMaXN0KCRmb2xkZXIsICRzZWxlY3RlZCkgewoJJGNvbG9ybGlzdCA9ICcnOwoJaWYgKGZpbGVfZXhpc3RzKCRmb2xkZXIgLiAnL2NvbG9ybGlzdCcpKQoJewoJICAgICRoYW5kbGUgPSBmb3BlbigkZm9sZGVyIC4gJy9jb2xvcmxpc3QnLCAncicpOwoJICAgICRsaXN0ID0gZXhwbG9kZSgnKicsIGZyZWFkKCRoYW5kbGUsIGZpbGVzaXplKCRmb2xkZXIgLiAnL2NvbG9ybGlzdCcpIC0gMSkpOwoJICAgIGZjbG9zZSgkaGFuZGxlKTsKCgkgICAgZm9yZWFjaCAoJGxpc3QgYXMgJGNvbG9yKQoJICAgIHsKCQkkY29sb3JsaXN0IC49ICc8b3B0aW9uIHZhbHVlPSInIC4gJGNvbG9yIC4gJyIgJzsKCQlpZiAoJHNlbGVjdGVkID09ICRjb2xvcikgewoJCSAgICAkY29sb3JsaXN0IC49ICdzZWxlY3RlZCc7CgkJfQoJCSRjb2xvcmxpc3QgLj0gJz4nLiRjb2xvci4nPC9vcHRpb24+JzsKCSAgICB9Cgl9CglpZiAoJGNvbG9ybGlzdCA9PSAnJykgewoJICAgICRjb2xvcmxpc3QgPSBmYWxzZTsKCX0KCXJldHVybiAkY29sb3JsaXN0OwogICAgfQoKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHNlbGVjdCBmcm9tIGEgbGlzdCBvZiBpdGVtIGluIGEgZm9sZGVyCiAgICAgKgogICAgICogQHBhcmFtICRmb2xkZXIgdGhlIGZvbGRlciB3ZSdyZSBsb29raW5nIGluCiAgICAgKgkJICAkc2VsZWN0ZWQsIHdoaWNoIGl0ZW0gc2hvdWxkIGJlIHNlbGVjdGVkIGlmIGFueQogICAgICogQHJldHVybiBzdHJpbmcgSFRNTCA8b3B0aW9ucz4gaXRlbXMKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIE9wdGlvbkZyb21Gb2xkZXIoJGZvbGRlciwgJHNlbGVjdGVkKSB7CgkkbGlzdCA9ICcnOwoJJG15ZGlyID0gZGlyKCRmb2xkZXIpOwoJLyogTG9vcCB0aHJvdWdoIGFsbCBmaWxlIGFuZCBmb2xkZXIgaW4gdGhlIGRpcmVjdG9yeSAqLwoJd2hpbGUgKCgkZmlsZSA9ICRteWRpci0+cmVhZCgpKSAhPT0gZmFsc2UpIHsKCSAgICAvKiBpZiB0aGUgImZpbGUiIGlzIGEgZm9sZGVyIGFuZCBpc24ndCAiLiIgb3IgIi4uIiBvciAiQ1ZTIiB0aGVuIHByb2NlZWQgd2l0aCBpdCAqLwoJICAgIGlmIChHb29nbGVNYXBVdGlsaXRpZXM6Okdvb2RGb2xkZXIoJGZvbGRlciwgJGZpbGUpKQoJICAgIHsKCQkkbGlzdCAuPSAnPG9wdGlvbiB2YWx1ZT0iJyAuICRmaWxlIC4gJyIgJzsKCQlpZiAoJHNlbGVjdGVkID09ICRmaWxlKSB7CgkJICAgICRsaXN0IC49ICdzZWxlY3RlZCc7CgkJfQoJCSRsaXN0IC49ICc+JyAuICRmaWxlIC4gIjwvb3B0aW9uPlxuXHQiOwoJICAgIH0KCX0KCSRteWRpci0+Y2xvc2UoKTsKCWlmICgkbGlzdCA9PSAnJykgewoJICAgICRsaXN0ID0gZmFsc2U7Cgl9CgoJcmV0dXJuICRsaXN0OwogICAgfQoKCiAgICAvKiogQFRPRE8gSU1QUk9WRSBUSElTICovCiAgICAvKiogQ3JlYXRlIGFuIEhUTkwgdGFibGUgd2l0aCBhIHNldCBvZiBtYXJrZXJzIGZyb20gYSBzcGVjaWZpYyBmb2xkZXIKICAgICAqIFRoaXMgaXMgdXNlZCBpbiB0aGUgYWRtaW4gcGFuZWwgYXQgdGhpcyBwb2ludAogICAgICoKICAgICAqIEBwYXJhbSAkZm9sZGVyIHN0cmluZyBhIGZvbGRlciB3aGVyZSB0aGUgcGljdHVyZXMgZXhpc3RzIGkuZS4gbW9kdWxlcy9tYXAvaW1hZ2VzL2Jhc2VtYXJrZXJzLwogICAgICoJCSAgJHdlYnBhdGggc3RyaW5nLCBhIHdheSB0byBhY2Nlc3MgdGhhdCBmb2xkZXIgdmlhIHRoZSB3ZWJzZXJ2ZXIgKHRvIHNob3cgdGhlIHBpY3MpCiAgICAgKgkJICAkaW1hZ2Vmb2xkZXIgYSBzdWJmb2xkZXIgd2hlcmUgdGhlIHBpY3R1cmVzIG1heSBiZQogICAgICogQHJldHVybiBsaXN0IG9mIGZpbGVuYW1lcyBpbiBhIHRhYmxlIGZvcm1hdAogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gVGFibGVGcm9tRmlsZXMoJGZvbGRlciwgJHdlYnBhdGgsICRpbWFnZWZvbGRlcikgewoJJGJhc2VnYWxsZXJ5ZGlyID0gc3Vic3RyKGRpcm5hbWUoX19GSUxFX18pLCAwLCAtMTkpOwoJJGJhc2UgPSBHYWxsZXJ5VXRpbGl0aWVzOjpjb252ZXJ0UGF0aFRvVXJsKCRiYXNlZ2FsbGVyeWRpcik7CgoJJG15ZGlyID0gZGlyKCRmb2xkZXIgLiAkaW1hZ2Vmb2xkZXIpOwoKCS8qIGdvIHRob3VnaHQgdGhlIGZpbGVzIGluIHRoZSBiYXNlbWFya2VyIGZvbGRlciBpbnNpZGUgdGhlIG1vZHVsZSB0byB1c2UgdGhlbSBhcyBiYXNlLiAqLwoJd2hpbGUgKCgkZmlsZSA9ICRteWRpci0+cmVhZCgpKSAhPT0gZmFsc2UpIHsKCSAgICBpZiAoR29vZ2xlTWFwVXRpbGl0aWVzOjpHb29kRmlsZSgkZm9sZGVyIC4gJGltYWdlZm9sZGVyLCAkZmlsZSkpIHsKCQkkbWltZXR5cGUgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0TWltZVR5cGUoJGZpbGUpOwoJCWlmICgoJG1pbWV0eXBlWzFdID09ICdpbWFnZS9wbmcnKSBhbmQgKCRmaWxlIDw+ICdtYXJrZXJfc2hhZG93LnBuZycpKSB7CgkJICAgIC8qIAoJCSAgICAgKiBUaGUgb3V0cHV0IGZyb20gdGhpcyBmdW5jdGlvbiBpcyBzdXJyb3VuZGVkIGJ5IHF1b3RlcywgCgkJICAgICAqIGZvciB1c2UgaW4gYSBJTUcgYmxvY2sKCQkgICAgICovCgkJICAgICRzaXplcyA9IGdldGltYWdlc2l6ZSgkZm9sZGVyIC4gJGltYWdlZm9sZGVyIC4gJGZpbGUpOwoJCSAgICAkbmFtZSA9IHN1YnN0cigkZmlsZSwgMCwgc3RycnBvcygkZmlsZSwgJy4nKSk7CgkJICAgICRtc2llID0gJy9tc2llXHMoNVwuWzUtOV18WzYtOV1cLlswLTldKikuKih3aW4pL2knOwoJCSAgICBpZiAoIWlzc2V0KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkKCQkJICAgIHx8ICFwcmVnX21hdGNoKCRtc2llLCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkKCQkJICAgIHx8IHByZWdfbWF0Y2goJy9vcGVyYS9pJywkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7CgkJCSRzcmMgPSAnIicuICRiYXNlIC4gJGltYWdlZm9sZGVyIC4gJG5hbWUgLiAnLnBuZyInOwoJCSAgICB9IGVsc2UgewoJCQkkc3JjID0gJyInLiAkYmFzZSAuICdtb2R1bGVzL21hcC9pbWFnZXMvYmxhbmsuZ2lmIiBzdHlsZT0iZmlsdGVyOiAnCiAgICAgICAgICAgICAgICAgICAgICAJCS4gJ3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz1cJycKCQkJCS4gJGJhc2UgLiAkaW1hZ2Vmb2xkZXIgLiAkbmFtZSAuICcucG5nXCcpOyInOwoJCSAgICB9CgkJICAgICRzaXplc1syXSA9ICRzcmM7CgkJICAgICRmaWxlbmFtZXNbJG5hbWVdID0gJHNpemVzOwoJCX0KCSAgICB9Cgl9CiAgICAgICAgJG15ZGlyLT5jbG9zZSgpOwogICAgICAgIHJldHVybiAkZmlsZW5hbWVzOwogICAgfQoKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgd2l0aCBhbGwgdGhlIG1hcmtlcnMgYXZhaWxhYmxlIGZvciBkaXNwbGF5IG9yIHVzZQogICAgICoKICAgICAqIEBwYXJhbSAkaW1hZ2V0eXBlIHN0cmluZyBjYW4gYmUgJ21ha2VycycgZm9yIG5vdyBvbmx5CiAgICAgKiBAcmV0dXJuIGFycmF5IE1hcmtlck5hbWUgPT4gTWFya2VySWNvbnMKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIEFsbE1hcmtlcnMoJGltYWdldHlwZSA9ICdtYXJrZXJzJykgewogICAgCWdsb2JhbCAkZ2FsbGVyeTsKICAgIAkkZ3VybCA9JiAkZ2FsbGVyeS0+Z2V0VXJsR2VuZXJhdG9yKCk7CgkkYmFzZWdhbGxlcnlkaXIgPSBzdWJzdHIoZGlybmFtZShfX0ZJTEVfXyksIDAsIC0xOSk7CgkkYmFzZSA9ICRndXJsLT5nZW5lcmF0ZVVybChhcnJheSgnaHJlZicgPT4gJycpLAoJCWFycmF5KCdmb3JjZUZ1bGxVcmwnID0+IHRydWUpKTsKCSRteWRpciA9IGRpcigkYmFzZWdhbGxlcnlkaXIgLiAnbW9kdWxlcy9tYXAvaW1hZ2VzLycgLiAkaW1hZ2V0eXBlIC4gJy8nKTsKCSRmaWxlbmFtZWFycmF5ID0gYXJyYXkoKTsKCXdoaWxlICgoJGZpbGVuYW1lcyA9ICRteWRpci0+cmVhZCgpKSAhPT0gZmFsc2UpIHsKCSAgICBpZiAoaXNfZGlyKCRiYXNlZ2FsbGVyeWRpciAuICdtb2R1bGVzL21hcC9pbWFnZXMvJyAuICRpbWFnZXR5cGUgLiAnLycgLiAkZmlsZW5hbWVzKQoJCSAgICAmJiAkZmlsZW5hbWVzICE9ICcuJyAmJiAkZmlsZW5hbWVzICE9ICcuLicgJiYgJGZpbGVuYW1lcyAhPSAnbXVsdGknIAoJCSAgICAmJiAkZmlsZW5hbWVzICE9ICdDVlMnICYmICRmaWxlbmFtZXMgIT0gJy5zdm4nKSB7CgkJJG15ZGlyMiA9IGRpcigkYmFzZWdhbGxlcnlkaXIgLiAnbW9kdWxlcy9tYXAvaW1hZ2VzLycgLiAkaW1hZ2V0eXBlIC4gJy8nIAoJCQkgICAgICAuICRmaWxlbmFtZXMgLiAnLycpOwoJCSRpbWFnZWFycmF5ID0gYXJyYXkoKTsKCQl3aGlsZSAoKCRpbWFnZXMgPSAkbXlkaXIyLT5yZWFkKCkpICE9PSBmYWxzZSkgewoJCSAgICBpZiAoaXNfZmlsZSgkYmFzZWdhbGxlcnlkaXIgLiAnbW9kdWxlcy9tYXAvaW1hZ2VzLycgLiAkaW1hZ2V0eXBlIC4gJy8nIAoJCQkgICAgLiAkZmlsZW5hbWVzIC4gJy8nIC4gJGltYWdlcykgJiYgJGltYWdlcyA8PiAnY29sb3JsaXN0JykgewoJCQkkaW1hZ2VhcnJheVtdID0gJGltYWdlczsKCQkgICAgfQoJCX0KCQkkbXlkaXIyLT5jbG9zZSgpOwoJCXNvcnQoJGltYWdlYXJyYXksIFNPUlRfU1RSSU5HKTsKCgkJJGFsbGltYWdlc2FycmF5ID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkaW1hZ2VhcnJheSBhcyAkaW1hZ2VzKSB7CgkJICAgICRtc2llPScvbXNpZVxzKDVcLls1LTldfFs2LTldXC5bMC05XSopLiood2luKS9pJzsKCQkgICAgJGNvbG9yID0gc3Vic3RyICgkaW1hZ2VzLDcsLTQpOwoJCSAgICBpZighaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSAKCQkJICAgIHx8ICFwcmVnX21hdGNoKCRtc2llLCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkKCQkJICAgIHx8IHByZWdfbWF0Y2goJy9vcGVyYS9pJywkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7CgkJCSRhbGxpbWFnZXNhcnJheVtdID0gJGNvbG9yIC4gJzogPGltZyBhbHQ9Im5vbmUiIHNyYz0iJyAuICRiYXNlCgkJCQkJICAgIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy8nIC4gJGltYWdldHlwZSAuICcvJwoJCQkJCSAgICAuICRmaWxlbmFtZXMgLiAnLycgLiAkaW1hZ2VzIC4gJyIvPic7CgkJICAgIH0gZWxzZSB7CgkJCSRhbGxpbWFnZXNhcnJheVtdID0gJGNvbG9yIC4gJzogPGltZyBhbHQ9Im5vbmUiIHNyYz0iJyAuICRiYXNlCgkJCQkJICAgIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy9ibGFuay5naWYiIHN0eWxlPSJmaWx0ZXI6IHByb2dpZDonCgkJCQkJICAgIC4gJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPVwnJwoJCQkJCSAgICAuICRiYXNlIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy8nIC4gJGltYWdldHlwZSAuICcvJwoJCQkJCSAgICAuICRmaWxlbmFtZXMgLiAnLycgLiAkaW1hZ2VzIC4gJ1wnKTsiLz4nOwoJCSAgICB9CgkJfQoJCSRmaWxlbmFtZWFycmF5WyRmaWxlbmFtZXNdID0gJGFsbGltYWdlc2FycmF5OwoJICAgIH0KCX0KCSRteWRpci0+Y2xvc2UoKTsKCglrc29ydCgkZmlsZW5hbWVhcnJheSwgU09SVF9TVFJJTkcpOwoJZm9yZWFjaCAoJGZpbGVuYW1lYXJyYXkgYXMgJGZpbGVuYW1lcyA9PiAkYWxsaW1hZ2VzYXJyYXkpIHsKCSAgICAkYWxsbWFya2Vyc1tdPSBhcnJheSgkZmlsZW5hbWVzPT4kYWxsaW1hZ2VzYXJyYXkpOwoJfQoKCXJldHVybiAkYWxsbWFya2VyczsKICAgIH0KCiAgICAvKioKICAgICAqIFdyaXRlIHRoZSBFWElGIGhlYWRlciBpbmNsdWRpbmcgR1BTIGNvb3JkaW5hdGVzCiAgICAgKgogICAgICogQHBhcmFtICRpdGVtIGEgR2FsbGVyeSBJdGVtCiAgICAgKgkJICAkY29vcmRpbmF0ZXMgYSBzdHJpbmcgd2l0aCB0aGUgZm9ybWF0ICJMYXRpdHVkZSwgTG9uZ2l0dWRlIgogICAgICoJCSAgJG92ZXJ3cml0ZSBib29sZWFuLCBvdmVyd3JpdGVzIHRoZSBjb29yZGluYXRlcyBmb3VuZCBpbiBoZWFkZXIgKGZhbHNlIGJ5IGRlZmF1bHQpCiAgICAgKiBAcmV0dXJuIGFycmF5ICBHYWxsZXJ5U3RhdHVzCgkgKgkJCSAgICAgIEVycm9ycwoJICoJCQkJICBTdGF0dXMKCSAqCQkJCSAgRGF0YQogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gc2V0R1BTQ29vcmRzSW5FeGlmKCRpdGVtLCAkY29vcmRpbmF0ZXMsICRvdmVyd3JpdGUgPSBmYWxzZSl7CiAgICAgICAgZ2xvYmFsICRnYWxsZXJ5OwogICAgICAgICRlcnJvciA9IGFycmF5KCk7CiAgICAgICAgJHN0YXR1cyA9ICcnOwoKICAgICAgICBsaXN0ICgkcmV0LCAkZmlsZW5hbWUpID0gJGl0ZW0tPmZldGNoUGF0aCgpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsLCBudWxsLCBudWxsKTsKCX0KCSRvbGRmaWxlbmFtZSA9IGRpcm5hbWUoJGZpbGVuYW1lKSAuICcvb2xkJyAuIGJhc2VuYW1lKCRmaWxlbmFtZSk7CgkkanBlZ19oZWFkZXJfZGF0YSA9IGdldF9qcGVnX2hlYWRlcl9kYXRhKCRmaWxlbmFtZSk7CgkvKiBiYWNrdXAgdGhlIGZpbGUgYXMgIm9sZHh5ei5qcGciIGlmIGl0IGRvZXNuJ3QgZXhpc3QgKi8KCWlmICghZmlsZV9leGlzdHMoJG9sZGZpbGVuYW1lKSkgewoJICAgIHB1dF9qcGVnX2hlYWRlcl9kYXRhKCRmaWxlbmFtZSwgJG9sZGZpbGVuYW1lLCAkanBlZ19oZWFkZXJfZGF0YSk7Cgl9CiAgICAgICAgJGV4aWZkYXRhID0gZ2V0X0VYSUZfSlBFRygkZmlsZW5hbWUpOwoJaWYgKGlzX2FycmF5KCRleGlmZGF0YVswXSkgJiYgYXJyYXlfa2V5X2V4aXN0cygzNDg1MywgJGV4aWZkYXRhWzBdKQoJICAgICAgICAmJiAkZXhpZmRhdGFbMF1bMzQ4NTNdWydUYWcgTmFtZSddCgkJPT0gJ0dQUyBJbmZvIEltYWdlIEZpbGUgRGlyZWN0b3J5IChJRkQpJyAmJiAkb3ZlcndyaXRlID09IGZhbHNlKSB7CgkgICAgJGVycm9yW10gPSAnZm9ybVtlcnJvcl1bZ3BzXVtjb29yZGluYXRlc0FscmVhZHlJbkhlYWRlcl0nOwoJfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGVtcHR5KCRleGlmZGF0YSkpIHsKICAgICAgICAgICAgICAgICRiYXNlZXhpZiA9IHN1YnN0cihkaXJuYW1lKF9fRklMRV9fKSwwLC04KS4nL2luY2x1ZGVzL3Rvb2xraXQvYmFzZWV4aWZoZWFkZXIuZGF0JzsKICAgICAgICAgICAgICAgICRuZXdfanBlZ19oZWFkZXJfZGF0YSA9IGFycmF5X21lcmdlKHVuc2VyaWFsaXplKGZpbGVfZ2V0X2NvbnRlbnRzKCRiYXNlZXhpZikpLAogICAgICAgICAgICAgICAgCQkJJGpwZWdfaGVhZGVyX2RhdGEpOwogICAgICAgICAgICAgICAgcHV0X2pwZWdfaGVhZGVyX2RhdGEoJGZpbGVuYW1lLCAkZmlsZW5hbWUsICRuZXdfanBlZ19oZWFkZXJfZGF0YSk7CgogICAgICAgICAgICAgICAgJGpwZWdfaGVhZGVyX2RhdGEgPSBnZXRfanBlZ19oZWFkZXJfZGF0YSgkZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgJGV4aWZkYXRhID0gZ2V0X0VYSUZfSlBFRygkZmlsZW5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb29yZHMgPSBleHBsb2RlKCcsJywgJGNvb3JkaW5hdGVzKTsKCSAgICAkbGF0WzBdWydOdW1lcmF0b3InXSA9IGZsb29yKGFicygkY29vcmRzWzBdKSk7CgkgICAgJGxhdFswXVsnRGVub21pbmF0b3InXSA9IDE7CgkgICAgJGxhdFsxXVsnTnVtZXJhdG9yJ10gPSBmbG9vcigoYWJzKCRjb29yZHNbMF0pIC0gJGxhdFswXVsnTnVtZXJhdG9yJ10pICogNjApOwoJICAgICRsYXRbMV1bJ0Rlbm9taW5hdG9yJ10gPSAxOwoJICAgICRsYXRbMl1bJ051bWVyYXRvciddID0gcm91bmQoMzYwMCAqIChhYnMoJGNvb3Jkc1swXSkgLSAkbGF0WzBdWydOdW1lcmF0b3InXQoJCQkJCSAtICRsYXRbMV1bJ051bWVyYXRvciddIC8gNjApLCA0KSAqIDEwMDAwOwoJICAgICRsYXRbMl1bJ0Rlbm9taW5hdG9yJ10gPSAxMDAwMDsKCSAgICAkbGF0UmVmWzBdID0gKGZsb29yKCRjb29yZHNbMF0pIDwgMCkgPyAnUycgOiAnTic7CgkgICAgJGxvblswXVsnTnVtZXJhdG9yJ10gPSBmbG9vcihhYnMoJGNvb3Jkc1sxXSkpOwoJICAgICRsb25bMF1bJ0Rlbm9taW5hdG9yJ10gPSAxOwoJICAgICRsb25bMV1bJ051bWVyYXRvciddID0gZmxvb3IoKGFicygkY29vcmRzWzFdKSAtICRsb25bMF1bJ051bWVyYXRvciddKSAqIDYwKTsKCSAgICAkbG9uWzFdWydEZW5vbWluYXRvciddID0gMTsKCSAgICAkbG9uWzJdWydOdW1lcmF0b3InXSA9IHJvdW5kKDM2MDAgKiAoYWJzKCRjb29yZHNbMV0pIC0gJGxvblswXVsnTnVtZXJhdG9yJ10KCQkJCQkgLSAkbG9uWzFdWydOdW1lcmF0b3InXSAvIDYwKSwgMikgKiAxMDA7CgkgICAgJGxvblsyXVsnRGVub21pbmF0b3InXSA9IDEwMDsKCSAgICAkbG9uUmVmWzBdID0gKGZsb29yKCRjb29yZHNbMV0pIDwgMCkgPyAnVycgOiAnRSc7CgkgICAgJGdwc3ZlcnNpb24gPSBhcnJheSgnVGFnIE51bWJlcicgPT4gMCwKCQkJCSdUYWcgTmFtZScgPT4gJ0dQUyBUYWcgVmVyc2lvbicsCgkJCQknVGFnIERlc2NyaXB0aW9uJyA9PiAnJywKCQkJCSdEYXRhIFR5cGUnID0+IDEsCgkJCQknVHlwZScgPT4gJ051bWVyaWMnLAoJCQkJJ1VuaXRzJyA9PiAnJywKCQkJCSdEYXRhJyA9PiBhcnJheSgyLCAwLCAwLCAwKSwKCQkJCSdUZXh0IFZhbHVlJyA9PiAnMiwwLDAsMCcsCgkJCQknRGVjb2RlZCcgPT4gMSk7CgkgICAgJGdwc2xhdHJlZiA9IGFycmF5KCdUYWcgTnVtYmVyJyA9PiAxLAoJICAgIAkgICAgICAgICAgICAgICAnVGFnIE5hbWUnID0+ICdOb3J0aCBvciBTb3V0aCBMYXRpdHVkZScsCgkJCSAgICAgICAnVGFnIERlc2NyaXB0aW9uJyA9PiAnJywKCQkJICAgICAgICdEYXRhIFR5cGUnID0+IDIsCgkJCSAgICAgICAnVHlwZScgPT4gJ1N0cmluZycsCgkJCSAgICAgICAnVW5pdHMnID0+ICcnLAoJCQkgICAgICAgJ0RhdGEnID0+ICRsYXRSZWYsCgkJCSAgICAgICAnVGV4dCBWYWx1ZScgPT4gJGxhdFJlZlswXSwKCQkJICAgICAgICdEZWNvZGVkJyA9PiAxKTsKCSAgICAkZ3BzbGF0ID0gYXJyYXkoJ1RhZyBOdW1iZXInID0+IDIsCgkJCSAgICAnVGFnIE5hbWUnID0+ICdMYXRpdHVkZScsCgkJCSAgICAnVGFnIERlc2NyaXB0aW9uJyA9PiAnJywKCQkJICAgICdEYXRhIFR5cGUnID0+IDUsCgkJCSAgICAnVHlwZScgPT4gJ051bWVyaWMnLAoJCQkgICAgJ1VuaXRzJyA9PiAnKERlZ3JlZXMgTWludXRlcyBTZWNvbmRzIE5vcnRoIG9yIFNvdXRoKScsCgkJCSAgICAnRGF0YScgPT4gJGxhdCwKCQkJICAgICdUZXh0IFZhbHVlJyA9PiAkbGF0WzBdWydOdW1lcmF0b3InXSAuICcvJwoJCQkJICAgIC4gJGxhdFswXVsnRGVub21pbmF0b3InXSAuICcgKCcgLiAkbGF0WzBdWydOdW1lcmF0b3InXQoJCQkJICAgIC8gJGxhdFswXVsnRGVub21pbmF0b3InXSAuICcpLCAnIC4gJGxhdFsxXVsnTnVtZXJhdG9yJ10KCQkJCSAgICAuICcvJyAuICRsYXRbMV1bJ0Rlbm9taW5hdG9yJ10gLiAnICgnCgkJCQkgICAgLiAkbGF0WzFdWydOdW1lcmF0b3InXSAvICRsYXRbMV1bJ0Rlbm9taW5hdG9yJ10gLiAnKSwgJwoJCQkJICAgIC4gJGxhdFsyXVsnTnVtZXJhdG9yJ10gLiAnLycgLiAkbGF0WzJdWydEZW5vbWluYXRvciddCgkJCQkgICAgLiAnICgnIC4gJGxhdFsyXVsnTnVtZXJhdG9yJ10gLyAkbGF0WzJdWydEZW5vbWluYXRvciddCgkJCQkgICAgLiAnKSwgKERlZ3JlZXMgTWludXRlcyBTZWNvbmRzIE5vcnRoIG9yIFNvdXRoKScsCgkJCSAgICAnRGVjb2RlZCcgPT4gMSk7CgkgICAgJGdwc2xvbnJlZiA9IGFycmF5KCdUYWcgTnVtYmVyJyA9PiAzLAoJCQkgICAgICAgJ1RhZyBOYW1lJyA9PiAnRWFzdCBvciBXZXN0IExvbmdpdHVkZScsCgkJCSAgICAgICAnVGFnIERlc2NyaXB0aW9uJyA9PiAnJywKCQkJICAgICAgICdEYXRhIFR5cGUnID0+IDIsCgkJCSAgICAgICAnVHlwZScgPT4gJ1N0cmluZycsCgkJCSAgICAgICAnVW5pdHMnID0+ICcnLAoJCQkgICAgICAgJ0RhdGEnID0+ICRsb25SZWYsCgkJCSAgICAgICAnVGV4dCBWYWx1ZScgPT4gJGxvblJlZlswXSwKCQkJICAgICAgICdEZWNvZGVkJyA9PiAxKTsKCSAgICAkZ3BzbG9uID0gYXJyYXkoJ1RhZyBOdW1iZXInID0+IDQsCgkJCSAgICAnVGFnIE5hbWUnID0+ICdMb25naXR1ZGUnLAoJCQkgICAgJ1RhZyBEZXNjcmlwdGlvbicgPT4gJycsCgkJCSAgICAnRGF0YSBUeXBlJyA9PiA1LAoJCQkgICAgJ1R5cGUnID0+ICdOdW1lcmljJywKCQkJICAgICdVbml0cycgPT4gJyhEZWdyZWVzIE1pbnV0ZXMgU2Vjb25kcyBOb3J0aCBvciBTb3V0aCknLAoJCQkgICAgJ0RhdGEnID0+ICRsb24sCgkJCSAgICAnVGV4dCBWYWx1ZScgPT4gJGxvblswXVsnTnVtZXJhdG9yJ10gLiAnLycKCQkJCSAgICAuICRsb25bMF1bJ0Rlbm9taW5hdG9yJ10gLiAnICgnIC4gJGxvblswXVsnTnVtZXJhdG9yJ10KCQkJCSAgICAvICRsb25bMF1bJ0Rlbm9taW5hdG9yJ10gLiAnKSwgJyAuICRsb25bMV1bJ051bWVyYXRvciddCgkJCQkgICAgLiAnLycgLiAkbG9uWzFdWydEZW5vbWluYXRvciddIC4gJyAoJwoJCQkJICAgIC4gJGxvblsxXVsnTnVtZXJhdG9yJ10gLyAkbG9uWzFdWydEZW5vbWluYXRvciddIC4gJyksICcKCQkJCSAgICAuICRsb25bMl1bJ051bWVyYXRvciddIC4gJy8nIC4gJGxvblsyXVsnRGVub21pbmF0b3InXQoJCQkJICAgIC4gJyAoJy4kbG9uWzJdWydOdW1lcmF0b3InXSAvICRsb25bMl1bJ0Rlbm9taW5hdG9yJ10KCQkJCSAgICAuICcpLCAoRGVncmVlcyBNaW51dGVzIFNlY29uZHMgTm9ydGggb3IgU291dGgpJywKCQkJICAgICdEZWNvZGVkJyA9PiAxKTsKCSAgICAkZ3BzaW5mb3MgPSBhcnJheSgnVGFncyBOYW1lJyA9PiAnR1BTJywKCQkJICAgICAgJ1RpZmYgT2Zmc2V0JyA9PiAxMiwKCQkJICAgICAgJzAnID0+ICRncHN2ZXJzaW9uLAoJCQkgICAgICAnMScgPT4gJGdwc2xhdHJlZiwKCQkJICAgICAgJzInID0+ICRncHNsYXQsCgkJCSAgICAgICczJyA9PiAkZ3BzbG9ucmVmLAoJCQkgICAgICAnNCcgPT4gJGdwc2xvbik7CgkgICAgJGV4aWZkYXRhWzBdWzM0ODUzXSA9IGFycmF5KCdUYWcgTnVtYmVyJyA9PiAzNDg1MywKCQkJCQknVGFnIE5hbWUnID0+ICdHUFMgSW5mbyBJbWFnZSBGaWxlIERpcmVjdG9yeSAoSUZEKScsCgkJCQkJJ1RhZyBEZXNjcmlwdGlvbicgPT4gJycsCgkJCQkJJ0RhdGEgVHlwZScgPT4gNCwKCQkJCQknVHlwZScgPT4gJ1N1YklGRCcsCgkJCQkJJ1VuaXRzJyA9PiAnJywKCQkJCQknRGF0YScgPT4gYXJyYXkoJzAnID0+ICRncHNpbmZvcyksCgkJCQkJJ1RleHQgVmFsdWUnID0+JycsICdEZWNvZGVkJyA9PiAxICk7CgkgICAgJGpwZWdfaGVhZGVyX2RhdGEgPSBwdXRfRVhJRl9KUEVHKCRleGlmZGF0YSwgJGpwZWdfaGVhZGVyX2RhdGEpOwogICAgICAgICAgICBwdXRfanBlZ19oZWFkZXJfZGF0YSgkZmlsZW5hbWUsICRmaWxlbmFtZSwgJGpwZWdfaGVhZGVyX2RhdGEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAkc3RhdHVzID0gJGdhbGxlcnktPmkxOG4oJ0dQUyBjb29yZGluYXRlcyB3cml0dGVuIHRvIGZpbGUsIG9sZCBmaWxlIGJhY2tlZCB1cCcpOwoKICAgICAgICAgICAgcmV0dXJuIGFycmF5KG51bGwsICRlcnJvciwgJHN0YXR1cywgbnVsbCk7CiAgICB9CgoKICAgIC8qKgogICAgICogUmVhZCB0aGUgRVhJRiBoZWFkZXIgdG8gc2VhcmNoIGZvciBHUFMgY29vcmRpbmF0ZXMKICAgICAqCiAgICAgKiBAcGFyYW0gJGl0ZW0gYSBHYWxsZXJ5IEl0ZW0KICAgICAqIEByZXR1cm4gYXJyYXkgIEdhbGxlcnlTdGF0dXMKCSAqCQkJICAgICAgc3RyaW5nIG9mIGNvb3JkaW5hdGVzICdsYXRpdHVkZSwgbG9uZ2l0dWRlJwogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0R1BTQ29vcmRzRnJvbUV4aWYoJGl0ZW0pIHsKCWxpc3QoJHJldCwgJGZpbGVuYW1lKSA9ICRpdGVtLT5mZXRjaFBhdGgoKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCk7Cgl9CglpZiAoIWlzX2RpcigkZmlsZW5hbWUpKSB7CgkgICAgJGpwZWdfaGVhZGVyX2RhdGEgPSBAZ2V0X2pwZWdfaGVhZGVyX2RhdGEoJGZpbGVuYW1lKTsKCSAgICBpZiAoISRqcGVnX2hlYWRlcl9kYXRhKSB7CgkJJGNvb3JkcyA9IG51bGw7CgkgICAgfSBlbHNlIHsKCQkkdGVtcCA9IEBnZXRfRVhJRl9KUEVHKCRmaWxlbmFtZSk7CgkJJExhdGl0dWRlID0gJyc7CgkJJExvbmdpdHVkZSA9ICcnOwoJCSROb3J0aFNvdXRoID0gJyc7CgkJJEVhc3RXZXN0ID0gJyc7CgkJaWYgKGlzX2FycmF5KCR0ZW1wWzBdKSkgewoJCSAgICBmb3JlYWNoICgkdGVtcFswXSBhcyAkaWQgPT4gJGRhdGEpIHsKCQkJaWYgKGlzX2FycmF5KCRkYXRhKSBhbmQgYXJyYXlfa2V5X2V4aXN0cygnVGFnIE5hbWUnLCAkdGVtcFswXVskaWRdKQoJCQkJYW5kICgkdGVtcFswXVskaWRdWydUYWcgTmFtZSddCgkJCQkgICAgID09ICdHUFMgSW5mbyBJbWFnZSBGaWxlIERpcmVjdG9yeSAoSUZEKScpKSB7CgkJCSAgICAkZ3BzZGF0YSA9ICR0ZW1wWzBdWyRpZF1bJ0RhdGEnXVswXTsKCQkJICAgIGZvcmVhY2ggKCRncHNkYXRhIGFzICRpZDIgPT4gJGRhdGEpIHsKCQkJCWlmIChpc19hcnJheSgkZGF0YSkKCQkJCQlhbmQgYXJyYXlfa2V5X2V4aXN0cygnVGFnIE5hbWUnLCAkZ3BzZGF0YVskaWQyXSkKCQkJCQlhbmQgKCRncHNkYXRhWyRpZDJdWydUYWcgTmFtZSddCgkJCQkJICAgICA9PSAnTm9ydGggb3IgU291dGggTGF0aXR1ZGUnKSkgewoJCQkJICAgICROb3J0aFNvdXRoID0gJGdwc2RhdGFbJGlkMl1bJ0RhdGEnXVswXTsKCQkJCX0KCQkJCWlmIChpc19hcnJheSgkZGF0YSkKCQkJCQlhbmQgYXJyYXlfa2V5X2V4aXN0cygnVGFnIE5hbWUnLCAkZ3BzZGF0YVskaWQyXSkKCQkJCQlhbmQgKCRncHNkYXRhWyRpZDJdWydUYWcgTmFtZSddCgkJCQkJICAgICA9PSAnRWFzdCBvciBXZXN0IExvbmdpdHVkZScpKSB7CgkJCQkgICAgJEVhc3RXZXN0ID0gJGdwc2RhdGFbJGlkMl1bJ0RhdGEnXVswXTsKCQkJCX0KCQkJCWlmIChpc19hcnJheSgkZGF0YSkKCQkJCQlhbmQgYXJyYXlfa2V5X2V4aXN0cygnVGFnIE5hbWUnLCAkZ3BzZGF0YVskaWQyXSkKCQkJCQlhbmQgKCRncHNkYXRhWyRpZDJdWydUYWcgTmFtZSddID09ICdMYXRpdHVkZScpKSB7CgkJCQkgICAgJGxhdCA9ICRncHNkYXRhWyRpZDJdWydEYXRhJ107CgkJCQkgICAgJExhdGl0dWRlID0gKCRsYXRbMF1bJ051bWVyYXRvciddIC8gJGxhdFswXVsnRGVub21pbmF0b3InXSkKCQkJCQkJKyAoaXNfYXJyYXkoJGxhdFsxXSkKCQkJCQkJICAgPyAoJGxhdFsxXVsnTnVtZXJhdG9yJ10gLyAkbGF0WzFdWydEZW5vbWluYXRvciddKQoJCQkJCQkgICAgICAvIDYwCgkJCQkJCSAgIDogMCkKCQkJCQkJKyAoaXNfYXJyYXkoJGxhdFsyXSkgCgkJCQkJCSAgID8gKCRsYXRbMl1bJ051bWVyYXRvciddIC8gJGxhdFsyXVsnRGVub21pbmF0b3InXSkgCgkJCQkJCSAgICAgIC8gMzYwMAoJCQkJCQkgICA6IDApOwoJCQkJfQoJCQkJaWYgKGlzX2FycmF5KCRkYXRhKQoJCQkJCWFuZCBhcnJheV9rZXlfZXhpc3RzKCdUYWcgTmFtZScsICRncHNkYXRhWyRpZDJdKQoJCQkJCWFuZCAoJGdwc2RhdGFbJGlkMl1bJ1RhZyBOYW1lJ10gPT0gJ0xvbmdpdHVkZScpKSB7CgkJCQkgICAgJGxvbiA9ICRncHNkYXRhWyRpZDJdWydEYXRhJ107CgkJCQkgICAgJExvbmdpdHVkZSA9ICgkbG9uWzBdWydOdW1lcmF0b3InXSAvICRsb25bMF1bJ0Rlbm9taW5hdG9yJ10pCgkJCQkJCSArIChpc19hcnJheSgkbG9uWzFdKQoJCQkJCQkgICA/ICgkbG9uWzFdWydOdW1lcmF0b3InXSAvICRsb25bMV1bJ0Rlbm9taW5hdG9yJ10pCgkJCQkJCSAgICAgIC8gNjAKCQkJCQkJICAgOiAwKQoJCQkJCQkgKyAoaXNfYXJyYXkoJGxvblsyXSkKCQkJCQkJICAgPyAoJGxvblsyXVsnTnVtZXJhdG9yJ10gLyAkbG9uWzJdWydEZW5vbWluYXRvciddKQoJCQkJCQkgICAgICAvIDM2MDAKCQkJCQkJICAgOiAwKTsKCQkJCX0KCQkJICAgIH0KCQkJfQoJCSAgICB9CgkJICAgIGlmICh0cmltKCROb3J0aFNvdXRoKSA9PSAnUycpIHsKCQkJJExhdGl0dWRlID0gLSRMYXRpdHVkZTsKCQkgICAgfQoJCSAgICBpZiAodHJpbSgkRWFzdFdlc3QpID09ICdXJykgewoJCQkkTG9uZ2l0dWRlID0gLSRMb25naXR1ZGU7CgkJICAgIH0KCgkJICAgICRMYXRpdHVkZSA9IHN0cl9yZXBsYWNlKCcsJywgJy4nLCAkTGF0aXR1ZGUpOwoJCSAgICAkTG9uZ2l0dWRlID0gc3RyX3JlcGxhY2UoJywnLCAnLicsICRMb25naXR1ZGUpOwoJCX0KCgkJaWYgKCRMYXRpdHVkZSAhPSAnJyBhbmQgJExvbmdpdHVkZSAhPSAnJykgewoJCSAgICAkY29vcmRzID0gJExhdGl0dWRlIC4gJywnIC4gJExvbmdpdHVkZTsKCQl9IGVsc2UgewoJCSAgICAkY29vcmRzID0gbnVsbDsKCQl9CgkgICAgfQoJfSBlbHNlIHsgLyogdGhpcyBpcyBhIGRpcmVjdG9yeSwgbm8gRVhJRiBhY3Rpb25zICovCgkgICAgJGNvb3JkcyA9IG51bGw7Cgl9CglyZXR1cm4gYXJyYXkobnVsbCwgJGNvb3Jkcyk7CiAgICB9CiAgICAKCiAgICAvKioKICAgICAqIENyZWF0ZSB0aGUgYWxidW0gcmVncm91cCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhcnJheSBvZiBwb2ludAogICAgICoKICAgICAqIEBwYXJhbSAkcG9pbnRzIGFycmF5IG9mIGl0ZW0KICAgICAqCQkgICRkaXN0YW5jZSB0aGUgZGlzdGFuY2UgaW4gcGl4ZWxzIGF0IHdoaWNoIHRoZSBpdGVtIG11c3QgYmUgcmVncm91cGVkCiAgICAgKiBAcmV0dXJuIGFycmF5IG9mIHBvaW50cyB3aXRoIHNob3dsb3csIHNob3doaWdoIHNldHVwLgogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gdXBkYXRlQXJyYXlGb3JBbGJ1bVJlZ3JvdXAoJHBvaW50cywgJGRpc3RhbmNlKXsKICAgIAkKCQlmb3IgKCR6ID0gMTk7ICR6ID49IDA7ICR6LS0pIHsKCQkJLyogc2V0IHVwcGVyIGJvdW5kcyBmb3IgaXRlbXMgKCAqLwoJCQlmb3JlYWNoICgkcG9pbnRzIGFzICRpZCA9PiAkcG9pbnQpIHsKCQkJCWlmICgkcG9pbnRbJ3BhcmVudERpc3QnXSA+PSAwKSB7CgkJCQkJJHBpeGRpc3QgPSBtYXBIZWxwZXI6OlBpeGVsRGlzdGFuY2UoJHBvaW50WydncHMnXSwgJHBvaW50c1skcG9pbnRbJ3BhcmVudElkJ11dWydncHMnXSwgJHopOwoJCQkJCWlmICgkcGl4ZGlzdCA8PSAkZGlzdGFuY2UpIHsKCQkJCQkJLyogaGlkZSB0aGlzIG9uZSwgc2V0ICR6KzEgd2hlbiBmaXJzdCB0aW1lIGhpZGRlbiAqLwoJCQkJCQlpZiAoJHBvaW50WydyZWdyb3VwU2hvd0hpZ2gnXSA8PSAkeikgewoJCQkJCQkJJHBvaW50c1skaWRdWydyZWdyb3VwU2hvd0hpZ2gnXSA9ICR6ICsgMTsKCQkJCQkJfQoJCQkJCQkkcG9pbnRzWyRwb2ludFsncGFyZW50SWQnXV1bJ2hhc0hpZGRlbkNoaWxkJ10gPSB0cnVlOwoJCQkJCX0KCQkJCX0KCQkJfQoJCgkJCS8qCgkJCSAqIHNldCBsb3dlciBib3VuZHMgZm9yIGl0ZW1zIGRpc3BsYXkKCQkJICogKGFsYnVtIGl0ZW1zIHdpdGhvdXQgaGlkZGVuIGNoaWxkcmVuKQoJCQkgKi8KCQkJZm9yZWFjaCAoJHBvaW50cyBhcyAkaWQgPT4gJHBvaW50KSB7CgkJCSAgICBpZiAoJHBvaW50WydoYXNDaGlsZCddIGFuZCAkcG9pbnRbJ2hhc0hpZGRlbkNoaWxkJ10gYW5kICgkcG9pbnRbJ3JlZ3JvdXBTaG93TG93J10gPT0gMTkpKSB7CgkJCQkJJHBvaW50c1skaWRdWydyZWdyb3VwU2hvd0xvdyddID0gJHo7CgkJCQkJJHBvaW50c1skaWRdWydkaXNwbGF5J10gPSBmYWxzZTsKCQkJICAgIH0KCQkJfQoJICAgIH0KCQlyZXR1cm4gJHBvaW50czsKCX0KCQogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBwcmVsb2FkIHN0cmluZyB0byBhZGQgdG8gdGhlIEhUTUwgZm9yIGEgbWFya2VyIHNldCAobmVlZGVkIGJ5IElFKQogICAgICoKICAgICAqIEBwYXJhbSAkcHJlbG9hZCBleGlzdGluZyBwcmVsb2FkIHRvIGFwcGVuZCB0bwogICAgICoJCSAgJHNldCB0aGUgbmFtZSBvZiB0aGUgbWFya2VyIHNldCB0byBwcmVsb2FkCiAgICAgKiBAcmV0dXJuIGFycmF5ICRzaXplcyB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2VzCiAgICAgKgkJCQkgJHByZWxvYWQgcmV0dXJuIHByZWxvYWQgd2l0aCBhZGRlZCBpbWFnZXMKICAgICAqCiAgICAgKi8KCWZ1bmN0aW9uIHNldFByZWxvYWRGcm9tRm9sZGVyKCRwcmVsb2FkLCAkc2V0KXsKCQlnbG9iYWwgJGdhbGxlcnk7CgkJJHBsYXRmb3JtID0mICRnYWxsZXJ5LT5nZXRQbGF0Zm9ybSgpOwoJCQoJCSRTaXplcyA9IGFycmF5KCk7CgkJCgkgICAgaWYgKCRzZXQgPD4gJ25vbmUnKSB7CiAgIAkJCSRmb2xkZXIgPSBzdWJzdHIoZGlybmFtZShfX0ZJTEVfXyksMCwtNykgLiAnaW1hZ2VzL21hcmtlcnMvJyAuICRzZXQgLiAnLyc7CgkJCSR1cmwgPSBHYWxsZXJ5VXRpbGl0aWVzOjpjb252ZXJ0UGF0aFRvVXJsKCRmb2xkZXIpOwoJCQkKCQkJJG15ZGlyID0gJHBsYXRmb3JtLT5vcGVuZGlyKCRmb2xkZXIpOwoJCQl3aGlsZSAoKCRmaWxlID0gJHBsYXRmb3JtLT5yZWFkZGlyKCRteWRpcikpICE9PSBmYWxzZSkgewoJCQkgICAgaWYgKCgkZmlsZSA8PiAnY29sb3JsaXN0JykgYW5kIEdvb2dsZU1hcFV0aWxpdGllczo6Z29vZEZpbGUoJGZvbGRlciwgJGZpbGUpKSB7CgkJCQkJJHByZWxvYWQgLj0gCgkJCQkJCSc8ZGl2IHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxpbWcgYWx0PSJub25lIiBzcmM9IicgLiAkdXJsIC4gJGZpbGUgLiAnIiAvPjwvZGl2Pic7CgkJCQkJaWYgKGVtcHR5KCRTaXplcykpIHsKCQkJCQkJJFNpemVzID0gJHBsYXRmb3JtLT5nZXRpbWFnZXNpemUoJGZvbGRlciAuICRmaWxlKTsKCQkJCQl9CgkJCSAgICB9CgkJCX0KCQkJJHBsYXRmb3JtLT5jbG9zZWRpcigkbXlkaXIpOwoJICAgIH0KCSAgICByZXR1cm4gYXJyYXkgKCRTaXplcywgJHByZWxvYWQpOwoJfQp9');
expand_3537250845($outputDir, 'classes/Maps.inc', 'PD9waHAKLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gTWFwcy54bWwgYnkgbGliL3Rvb2xzL2Jpbi9nZW5lcmF0ZS1tYXBzLnBocCAqLwokbWFwSW5mb1snbWFwTWFwJ10gPSBhcnJheSgnaXRlbUlkJz0+YXJyYXkoJ3R5cGUnPT5TVE9SQUdFX1RZUEVfU1RSSU5HLCdzaXplJz0+U1RPUkFHRV9TSVpFX01FRElVTSwnbm90TnVsbCc9PnRydWUpLCdmaWVsZCc9PmFycmF5KCd0eXBlJz0+U1RPUkFHRV9UWVBFX1NUUklORywnc2l6ZSc9PlNUT1JBR0VfU0laRV9NRURJVU0sJ25vdE51bGwnPT50cnVlKSwndmFsdWUnPT5hcnJheSgndHlwZSc9PlNUT1JBR0VfVFlQRV9TVFJJTkcsJ3NpemUnPT5TVE9SQUdFX1NJWkVfTEFSR0UpLCdzZXRJZCc9PmFycmF5KCd0eXBlJz0+U1RPUkFHRV9UWVBFX0lOVEVHRVIsJ3NpemUnPT5TVE9SQUdFX1NJWkVfTUVESVVNKSwnc2V0VHlwZSc9PmFycmF5KCd0eXBlJz0+U1RPUkFHRV9UWVBFX0lOVEVHRVIsJ3NpemUnPT5TVE9SQUdFX1NJWkVfTUVESVVNKSk7Cj8+');
expand_3537250845($outputDir, 'classes/Maps.xml', 'PCFET0NUWVBFIG1hcHMgU1lTVEVNICIuLi8uLi8uLi9saWIvdG9vbHMvZHRkL01hcHNEZWZpbml0aW9uMi4wLmR0ZCI+CjxtYXBzPgogIDxtYXA+CiAgICA8bWFwLW5hbWU+bWFwTWFwPC9tYXAtbmFtZT4KICAgIDxzY2hlbWE+CiAgICAgIDxzY2hlbWEtbWFqb3I+MTwvc2NoZW1hLW1ham9yPgogICAgICA8c2NoZW1hLW1pbm9yPjE8L3NjaGVtYS1taW5vcj4KICAgIDwvc2NoZW1hPgogICAgPG1lbWJlcj4KICAgICAgPG1lbWJlci1uYW1lPml0ZW1JZDwvbWVtYmVyLW5hbWU+CiAgICAgIDxtZW1iZXItdHlwZT5TVFJJTkc8L21lbWJlci10eXBlPgogICAgICA8bWVtYmVyLXNpemU+TUVESVVNPC9tZW1iZXItc2l6ZT4KICAgICAgPGluZGV4ZWQvPgogICAgICA8cmVxdWlyZWQvPgogICAgPC9tZW1iZXI+CiAgICA8bWVtYmVyPgogICAgICA8bWVtYmVyLW5hbWU+ZmllbGQ8L21lbWJlci1uYW1lPgogICAgICA8bWVtYmVyLXR5cGU+U1RSSU5HPC9tZW1iZXItdHlwZT4KICAgICAgPG1lbWJlci1zaXplPk1FRElVTTwvbWVtYmVyLXNpemU+CiAgICAgIDxyZXF1aXJlZC8+CiAgICA8L21lbWJlcj4KICAgIDxtZW1iZXI+CiAgICAgIDxtZW1iZXItbmFtZT52YWx1ZTwvbWVtYmVyLW5hbWU+CiAgICAgIDxtZW1iZXItdHlwZT5TVFJJTkc8L21lbWJlci10eXBlPgogICAgICA8bWVtYmVyLXNpemU+TEFSR0U8L21lbWJlci1zaXplPgogICAgPC9tZW1iZXI+CiAgICA8bWVtYmVyPgogICAgICA8bWVtYmVyLW5hbWU+c2V0SWQ8L21lbWJlci1uYW1lPgogICAgICA8bWVtYmVyLXR5cGU+SU5URUdFUjwvbWVtYmVyLXR5cGU+CiAgICA8L21lbWJlcj4KICAgIDxtZW1iZXI+CiAgICAgIDxtZW1iZXItbmFtZT5zZXRUeXBlPC9tZW1iZXItbmFtZT4KICAgICAgPG1lbWJlci10eXBlPklOVEVHRVI8L21lbWJlci10eXBlPgogICAgPC9tZW1iZXI+CiAgPC9tYXA+CjwvbWFwcz4K');
expand_3537250845($outputDir, 'classes/PopulateGPSEXIFInfos.class', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQHN1YnBhY2thZ2UgQ2xhc3NlcwogKiBAYXV0aG9yIEVyaWMgRGFuaWVsIDxlaGRhbmllbEBnbWFpbC5jb20+CiAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMTI1MyAkCiAqLwoKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL2NvcmUvQWRtaW5NYWludGVuYW5jZS5pbmMnKTsKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL21hcEhlbHBlci5jbGFzcycpOwpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvR29vZ2xlTWFwVXRpbGl0aWVzLmNsYXNzJyk7CgovKioKICogVGhpcyBpcyBhIE1haW50ZW5hbmNlVGFzayB0aGF0IHdpbGwgcG9wdWxhdGUgdGhlIGRhdGFiYXNlIHdpdGggYWxsIEdQUyBjb29yZGluYXRlcyBpbmNsdWRlZCBpbiB0aGUgRVhJRiBoZWFkZXIgaWYgdGhleSBleGlzdC4KICoKICogQHBhY2thZ2UgbWFwCiAqIEBzdWJwYWNrYWdlIENsYXNzZXMKICovCmNsYXNzIFBvcHVsYXRlR1BTRVhJRkluZm9zIGV4dGVuZHMgTWFpbnRlbmFuY2VUYXNrIHsKCiAgICAvKioKICAgICAqIEBzZWUgTWFpbnRlbmFuY2VUYXNrOjpnZXRJbmZvKCkKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0SW5mbygpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCgkkaW5mb1snbDEwRG9tYWluJ10gPSAnbW9kdWxlc19tYXAnOwoJJGluZm9bJ3RpdGxlJ10gPSAkZ2FsbGVyeS0+aTE4bignUG9wdWxhdGUgR1BTIERhdGEgZnJvbSBFWElGIEhlYWRlcnMnKTsKCSRpbmZvWydkZXNjcmlwdGlvbiddID0gJGdhbGxlcnktPmkxOG4oCgkJJ1RoaXMgdGFzayB3aWxsIGdvIHRocm91Z2ggYWxsIHRoZSBnYWxsZXJ5IGl0ZW1zIGFuZCBwb3B1bGF0ZSB0aGUgR1BTIHByb3BlcnR5Jy4KCQknIGZvciBlYWNoIHBob3RvIGl0ZW0gZnJvbSB0aGUgR1BTIGluZm9ybWF0aW9uIGluIHRoZSBFWElGIGhlYWRlciwgaWYgcHJlc2VudC4nKTsKCXJldHVybiAkaW5mbzsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgTWFpbnRlbmFuY2VUYXNrOjpydW4oKQogICAgICovCiAgICBmdW5jdGlvbiBydW4oKSB7CglnbG9iYWwgJGdhbGxlcnk7CgkkdGVtcGxhdGVBZGFwdGVyID0mICRnYWxsZXJ5LT5nZXRUZW1wbGF0ZUFkYXB0ZXIoKTsKCglsaXN0ICgkcmV0LCAkbW9kdWxlKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkUGx1Z2luKCdtb2R1bGUnLCAnbWFwJyk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7Cgl9CgoJJHF1ZXJ5ID0gJ1NFTEVDVCBbUGhvdG9JdGVtOjppZF0gRlJPTSBbUGhvdG9JdGVtXSBPUkRFUiBCWSBbUGhvdG9JdGVtOjppZF0nOwoJbGlzdCAoJHJldCwgJHJlc3VsdCkgPSAkZ2FsbGVyeS0+c2VhcmNoKCRxdWVyeSk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7Cgl9CgkkaWRzID0gYXJyYXkoKTsKCXdoaWxlICgkcmVzID0gJHJlc3VsdC0+bmV4dFJlc3VsdCgpKSB7CgkgICAgJGlkc1tdID0gJHJlc1swXTsKCX0KCSR0b3RhbGl0ZW1zID0gY291bnQoJGlkcyk7CgkkY3VycmVudCA9IDE7CgkkaW5zZXJ0RVhJRmNvb3JkaW5hdGVzID0gJG1vZHVsZS0+dHJhbnNsYXRlKCdJbnNlcnRpbmcgR1BTIGNvb3JkaW5hdGVzIGZyb20gRVhJRiBoZWFkZXInKTsKCgkkcmV0ID0gJHRlbXBsYXRlQWRhcHRlci0+dXBkYXRlUHJvZ3Jlc3NCYXIoJGluc2VydEVYSUZjb29yZGluYXRlcywKCQkkbW9kdWxlLT50cmFuc2xhdGUoYXJyYXkoJ3RleHQnID0+ICdJdGVtICVkIG9mICVkJywKCQkJCQkgJ2FyZzEnID0+IDAsICdhcmcyJyA9PiAkdG90YWxpdGVtcykpLCAwKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCX0KCglmb3JlYWNoICgkaWRzIGFzICRpZCkgewoJICAgIGxpc3QoJHJldCwgJGl0ZW0pID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRFbnRpdGllc0J5SWQoJGlkKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiBhcnJheSgkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwpOwoJICAgIH0KCgkgICAgbGlzdCAoJHJldCwgJGNvb3JkcykgPSBHb29nbGVNYXBVdGlsaXRpZXM6OmdldEdQU0Nvb3Jkc0Zyb21FeGlmKCRpdGVtKTsKCSAgICBpZiAoJHJldCkgewoJICAgIAlyZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsKTsKCSAgICB9CgoJICAgIGlmICgkY29vcmRzICE9IG51bGwpIHsKCQlsaXN0ICgkcmV0LCAkZmllbGRzKSA9IG1hcEhlbHBlcjo6ZmV0Y2hGaWVsZFZhbHVlcyhhcnJheSgkaXRlbSkpOwoJCSRmaWVsZHNbJGlkXVsnR1BTJ10gPSAkY29vcmRzOwoJCSRyZXQgPSBtYXBIZWxwZXI6OnNhdmVGaWVsZFZhbHVlcygkaXRlbSwgJGZpZWxkc1skaWRdKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCSAgICB9CgkgICAgJHJldCA9ICR0ZW1wbGF0ZUFkYXB0ZXItPnVwZGF0ZVByb2dyZXNzQmFyKCRpbnNlcnRFWElGY29vcmRpbmF0ZXMsCgkJICAgICRtb2R1bGUtPnRyYW5zbGF0ZShhcnJheSgndGV4dCcgPT4gJ0l0ZW0gJWQgb2YgJWQnLCAnYXJnMScgPT4gJGN1cnJlbnQsCgkJCQkJICAgICAnYXJnMicgPT4gJHRvdGFsaXRlbXMpKSwgJGN1cnJlbnQgLyAkdG90YWxpdGVtcyk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJICAgIH0KCSAgICAkY3VycmVudCsrOwoJfQoJcmV0dXJuIGFycmF5KG51bGwsIHRydWUsIAoJCSAgICAgYXJyYXkoJG1vZHVsZS0+dHJhbnNsYXRlKCdFWElGIGhlYWRlciBpbmZvcm1hdGlvbiBpbXBvcnRlZCBzdWNjZXNzZnVsbHknKSkpOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBNYWludGVuYW5jZVRhc2s6OnJlcXVpcmVzUHJvZ3Jlc3NCYXIoKQogICAgICovCiAgICBmdW5jdGlvbiByZXF1aXJlc1Byb2dyZXNzQmFyKCkgewoJcmV0dXJuIHRydWU7CiAgICB9Cn0KPz4K');
expand_3537250845($outputDir, 'classes/WriteExifHeaderToPictures.class', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQHN1YnBhY2thZ2UgQ2xhc3NlcwogKiBAYXV0aG9yIEVyaWMgRGFuaWVsIDxlaGRhbmllbEBnbWFpbC5jb20+CiAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMTU5MSAkCiAqLwoKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL2NvcmUvQWRtaW5NYWludGVuYW5jZS5pbmMnKTsKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL21hcEhlbHBlci5jbGFzcycpOwpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvR29vZ2xlTWFwVXRpbGl0aWVzLmNsYXNzJyk7CgovKioKICogVGhpcyBpcyBhIE1haW50ZW5hbmNlVGFzayB0aGF0IHdpbGwgd3JpdGUgdG8gdGhlIEVYSUYgaGVhZGVyIG9mIHRoZSBmaWxlIHRoZSBHUFMgY29vcmRpbmF0ZXMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSBpZiB0aGUgaGVhZGVyIGRvZXNuJ3QgZXhpc3QuCiAqCiAqIEBwYWNrYWdlIG1hcAogKiBAc3VicGFja2FnZSBDbGFzc2VzCiAqLwpjbGFzcyBXcml0ZUV4aWZIZWFkZXJUb1BpY3R1cmVzIGV4dGVuZHMgTWFpbnRlbmFuY2VUYXNrIHsKCiAgICAvKioKICAgICAqIEBzZWUgTWFpbnRlbmFuY2VUYXNrOjpnZXRJbmZvKCkKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0SW5mbygpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCgkkaW5mb1snbDEwRG9tYWluJ10gPSAnbW9kdWxlc19tYXAnOwoJJGluZm9bJ3RpdGxlJ10gPSAkZ2FsbGVyeS0+aTE4bignV3JpdGUgR1BTIEluZm9ybWF0aW9uIG9udG8gdGhlIEVYSUYgaGVhZGVyIGZvciB0aGUgcGljdHVyZXMnKTsKCSRpbmZvWydkZXNjcmlwdGlvbiddID0gJGdhbGxlcnktPmkxOG4oCgkJJ1RoaXMgdGFzayB3aWxsIGdvIHRocm91Z2ggYWxsIHRoZSBnYWxsZXJ5IGl0ZW1zIGFuZCBwb3B1bGF0ZSB0aGUgR1BTIGluZm9ybWF0aW9uJyAuIAogICAgICAgICAgICAgICAgJyBpbiB0aGUgRVhJRiBoZWFkZXJzIGZvciBlYWNoIEpQRUcgaWYgdGhvc2UgZG9uXCd0IGFscmVhZHkgZXhpc3QuJyk7CglyZXR1cm4gJGluZm87CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIE1haW50ZW5hbmNlVGFzazo6cnVuKCkKICAgICAqLwogICAgZnVuY3Rpb24gcnVuKCkgewoJZ2xvYmFsICRnYWxsZXJ5OwoJJHRlbXBsYXRlQWRhcHRlciA9JiAkZ2FsbGVyeS0+Z2V0VGVtcGxhdGVBZGFwdGVyKCk7CgoJbGlzdCAoJHJldCwgJG1vZHVsZSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZFBsdWdpbignbW9kdWxlJywgJ21hcCcpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJfQoKCSRxdWVyeSA9ICcKICAgICAgICAgICAgU0VMRUNUCiAgICAgICAgICAgICAgW1Bob3RvSXRlbTo6aWRdLCBbbWFwTWFwOjp2YWx1ZV0KICAgICAgICAgICAgRlJPTQogICAgICAgICAgICAgIFtQaG90b0l0ZW1dCiAgICAgICAgICAgIElOTkVSIEpPSU4KICAgICAgICAgICAgICBbRGF0YUl0ZW1dIE9OIFtQaG90b0l0ZW06OmlkXSA9IFtEYXRhSXRlbTo6aWRdCiAgICAgICAgICAgIElOTkVSIEpPSU4KICAgICAgICAgICAgICBbbWFwTWFwXSBPTiBbbWFwTWFwOjppdGVtSWRdID0gW1Bob3RvSXRlbTo6aWRdCiAgICAgICAgICAgIFdIRVJFCiAgICAgICAgICAgICAgW0RhdGFJdGVtOjptaW1lVHlwZV0gPSBcJ2ltYWdlL2pwZWdcJwogICAgICAgICAgICBBTkQKICAgICAgICAgICAgICBbbWFwTWFwOjpmaWVsZF0gPSBcJ0dQU1wnCiAgICAgICAgICAgIE9SREVSIEJZIFtQaG90b0l0ZW06OmlkXSc7CglsaXN0ICgkcmV0LCAkcmVzdWx0KSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5KTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCX0KCSRpZHMgPSBhcnJheSgpOwoJd2hpbGUgKCRyZXMgPSAkcmVzdWx0LT5uZXh0UmVzdWx0KCkpIHsKCSAgICAkaWRzW10gPSAkcmVzWzBdOwoJfQoJJHRvdGFsaXRlbXMgPSBjb3VudCgkaWRzKTsKCSRjdXJyZW50ID0gMTsKCSRpbnNlcnRFWElGY29vcmRpbmF0ZXMgPSAkbW9kdWxlLT50cmFuc2xhdGUoJ0luc2VydGluZyBHUFMgY29vcmRpbmF0ZXMgaW50byBFWElGIGhlYWRlcicpOwoKCSRyZXQgPSAkdGVtcGxhdGVBZGFwdGVyLT51cGRhdGVQcm9ncmVzc0JhcigkaW5zZXJ0RVhJRmNvb3JkaW5hdGVzLAoJCSRtb2R1bGUtPnRyYW5zbGF0ZShhcnJheSgndGV4dCcgPT4gJ0l0ZW0gJWQgb2YgJWQnLAoJCQkJCSAnYXJnMScgPT4gMCwgJ2FyZzInID0+ICR0b3RhbGl0ZW1zKSksIDApOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldDsKCX0KCglsaXN0ICgkcmV0LCAkaXRlbXMpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRFbnRpdGllc0J5SWQoJGlkcywgJ0dhbGxlcnlQaG90b0l0ZW0nKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJfQoJbGlzdCAoJHJldCwgJGNvb3JkZGF0YSkgPSBtYXBIZWxwZXI6OmZldGNoRmllbGRWYWx1ZXMoJGl0ZW1zKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJfQoJCglmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsKCgkgICAgLyogQ2hlY2sgaWYgRVhJRiBIZWFkZXIgZXhpc3QgKi8KCSAgICBsaXN0ICgkcmV0LCAkY29vcmRzKSA9IEdvb2dsZU1hcFV0aWxpdGllczo6Z2V0R1BTQ29vcmRzRnJvbUV4aWYoJGl0ZW0pOwoJICAgIGlmICgkcmV0KSB7CgkgICAgCXJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKCSAgICB9CgoJICAgIGlmICgkY29vcmRzID09IG51bGwpIHsKCQkvKiB0aGVyZSBhcmUgbm8gZXhpc3RpbmcgR1BTIGNvb3JkcyBpbiB0aGUgaGVhZGVyLCBwcm9jZWVkICovCgkgICAgCWlmIChhcnJheV9rZXlfZXhpc3RzKCRpdGVtLT5nZXRJZCgpLCAkY29vcmRkYXRhKSAmJiB0cmltKCRjb29yZGRhdGFbJGl0ZW0tPmdldElkKCldWydHUFMnXSkgIT0gJycpIHsKCQkgICAgbGlzdCgkcmV0LCAkZXJyb3IsICRzdGF0dXMsICRvdGhlcikgPSAKCQkJICAgIEdvb2dsZU1hcFV0aWxpdGllczo6c2V0R1BTQ29vcmRzSW5FeGlmKCRpdGVtLCAkY29vcmRkYXRhWyRpdGVtLT5nZXRJZCgpXVsnR1BTJ10pOwoJCSAgICBpZiAoJHJldCkgewoJCQlyZXR1cm4gYXJyYXkoJHJldCwgbnVsbCk7CgkJICAgIH0KCQl9CgkgICAgfQoKCgkgICAgJHJldCA9ICR0ZW1wbGF0ZUFkYXB0ZXItPnVwZGF0ZVByb2dyZXNzQmFyKCRpbnNlcnRFWElGY29vcmRpbmF0ZXMsCgkJICAgICRtb2R1bGUtPnRyYW5zbGF0ZShhcnJheSgndGV4dCcgPT4gJ0l0ZW0gJWQgb2YgJWQnLCAnYXJnMScgPT4gJGN1cnJlbnQsCgkJCQkJICAgICAnYXJnMicgPT4gJHRvdGFsaXRlbXMpKSwgJGN1cnJlbnQgLyAkdG90YWxpdGVtcyk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gYXJyYXkoJHJldCwgbnVsbCk7CgkgICAgfQoJICAgICRjdXJyZW50Kys7Cgl9CglyZXR1cm4gYXJyYXkobnVsbCwgdHJ1ZSwgCgkJICAgICBhcnJheSgkbW9kdWxlLT50cmFuc2xhdGUoJ0VYSUYgaGVhZGVyIGluZm9ybWF0aW9uIHdyaXRlbiBzdWNjZXNzZnVsbHknKSkpOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBNYWludGVuYW5jZVRhc2s6OnJlcXVpcmVzUHJvZ3Jlc3NCYXIoKQogICAgICovCiAgICBmdW5jdGlvbiByZXF1aXJlc1Byb2dyZXNzQmFyKCkgewoJcmV0dXJuIHRydWU7CiAgICB9Cn0KPz4K');
expand_3537250845($outputDir, 'classes/mapHelper.class', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBFcmljIERhbmllbCA8ZWhkYW5pZWxAZ21haWwuY29tPgogKiBAdmVyc2lvbiAkUmV2aXNpb246IDE1NzYgJAogKgogKiBiYXNlZCBvbiBhIGNvZGUgZnJvbSBBbGFuIEhhcmRlciA8YWxhbi5oYXJkZXJAc3VuLmNvbT4KICovCi8qCiAqIFNlc3Npb24ga2V5IGZvciBzdG9yaW5nIGl0ZW0gYWRtaW4gbW9kZQogKi8KZGVmaW5lKCdtYXBfU0VTU0lPTl9LRVknLCAnbWFwLmFkbWluTW9kZS5pdGVtSWQnKTsKCkdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBJbnRlcmZhY2VfMV8wLmNsYXNzJyk7CkdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9Hb29nbGVNYXBVdGlsaXRpZXMuY2xhc3MnKTsKCi8qKgogKiBBIGhlbHBlciBjbGFzcyBmb3IgdGhlIG1hcCBtb2R1bGUuCiAqCiAqIEBwYWNrYWdlIG1hcAogKiBAc3VicGFja2FnZSBDbGFzc2VzCiAqLwpjbGFzcyBtYXBIZWxwZXIgZXh0ZW5kcyBtYXBJbnRlcmZhY2VfMV8wIC8qIGFuZCBHYWxsZXJ5RXZlbnRMaXN0ZW5lciAqLyB7CgogICAgLyoqCiAgICAgKiBMb2FkIGFuZCBkZWNvZGUgbW9kdWxlIHBhcmFtZXRlcnMKICAgICAqCiAgICAgKiBAcGFyYW0gaW50IGlkIG9mIGNvbnRhaW5lcjsgY2hlY2sgZm9yIGFsYnVtLXNwZWNpZmljIHNldHRpbmdzCiAgICAgKiBAcGFyYW0gYm9vbGVhbiBmYWxsYmFjayB0byBzaXRlLWRlZmF1bHRzIGlmIG5vIGFsYnVtLXNwZWNpZmljIHNldHRpbmdzIGZvdW5kCiAgICAgKiBAcGFyYW0gYXJyYXkgc2V0cyB0byBsb2FkOyBhbGwgYnkgZGVmYXVsdAogICAgICogQHJldHVybiBhcnJheSBHYWxsZXJ5U3RhdHVzIGEgc3RhdHVzIGNvZGUKICAgICAqICAgICAgICAgICAgICAgbWl4ZWQgY29udGFpbmluZyBjdXN0b20gZmllbGQgZGF0YQogICAgICogICAgICAgICAgICAgICBib29sZWFuIHRydWUgaWYgYWxidW0tc3BlY2lmaWMgc2V0dGluZ3MgYXJlIHJldHVybmVkCiAgICAgKiBAc3RhdGljCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxvYWRQYXJhbWV0ZXJzKCRjb250YWluZXJJZCA9IDAsICRmYWxsYmFjayA9IHRydWUsCgkJCSAgICAkc2V0cyA9IGFycmF5KCdjb21tb24nLCAnYWxidW0nLCAncGhvdG8nKSkgewoJJGlzQ29udGFpbmVyID0gKCRjb250YWluZXJJZCA+IDApOwoJbGlzdCAoJHJldCwgJHBhcmFtKSA9CgkgICAgR2FsbGVyeUNvcmVBcGk6OmZldGNoQWxsUGx1Z2luUGFyYW1ldGVycygnbW9kdWxlJywgJ21hcCcsICRjb250YWluZXJJZCk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiBhcnJheSgkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwsIG51bGwpOwoJfQoJaWYgKGVtcHR5KCRwYXJhbSkgJiYgJGNvbnRhaW5lcklkID4gMCAmJiAkZmFsbGJhY2spIHsKCSAgICBsaXN0ICgkcmV0LCAkcGFyYW0pID0gR2FsbGVyeUNvcmVBcGk6OmZldGNoQWxsUGx1Z2luUGFyYW1ldGVycygnbW9kdWxlJywgJ21hcCcpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCwgbnVsbCk7CgkgICAgfQoJICAgICRpc0NvbnRhaW5lciA9IGZhbHNlOwoJfQoJZm9yZWFjaCAoJHNldHMgYXMgJHNldCkgewoJICAgICRyZXN1bHRbJHNldF0gPSBhcnJheSgpOwoJICAgIGZvcmVhY2ggKCghZW1wdHkoJHBhcmFtWyRzZXRdKSA/IGV4cGxvZGUoJ3wnLCAkcGFyYW1bJHNldF0pIDogYXJyYXkoKSkgYXMgJHRtcCkgewoJCSRsaXN0ID0gZXhwbG9kZSgnYCcsICR0bXApOwoJCSRyZXN1bHRbJHNldF1bXSA9IGFycmF5KCdmaWVsZCcgPT4gJGxpc3RbMF0sCgkJCQkJJ3N1bW1hcnknID0+ICgkbGlzdFsxXSA9PSAnMScpLAoJCQkJCSdkZXRhaWwnID0+ICgkbGlzdFsyXSA9PSAnMScpLAoJCQkJCSdjaG9pY2VzJyA9PiBhcnJheV9zcGxpY2UoJGxpc3QsIDMpKTsKCSAgICB9Cgl9CglyZXR1cm4gYXJyYXkobnVsbCwgJHJlc3VsdCwgJGlzQ29udGFpbmVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY29kZSBhbmQgc2F2ZSBtb2R1bGUgcGFyYW1ldGVycwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSBkYXRhIHRvIHNhdmUKICAgICAqIEBwYXJhbSBpbnQgaWQgb2YgY29udGFpbmVyOyB0byBzYXZlIGFsYnVtLXNwZWNpZmljIHNldHRpbmdzCiAgICAgKiBAcmV0dXJuIEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICogQHN0YXRpYwogICAgICovCiAgICBmdW5jdGlvbiBzYXZlUGFyYW1ldGVycygkcGFyYW0sICRjb250YWluZXJJZCA9IDApIHsKCWZvcmVhY2ggKGFycmF5KCdjb21tb24nLCAnYWxidW0nLCAncGhvdG8nKSBhcyAkc2V0KSB7CgkgICAgaWYgKCFpc3NldCgkcGFyYW1bJHNldF0pKSB7CgkJY29udGludWU7CgkgICAgfQoJICAgICRsaXN0ID0gYXJyYXkoKTsKCSAgICAvKiogQHRvZG86IGZpeCB0aGlzIHRvIHVzZSBzZXJpYWxpemUvdW5zZXJpYWxpemUgKi8KCSAgICBmb3JlYWNoICgkcGFyYW1bJHNldF0gYXMgJGl0ZW0pIHsKCQkkbGlzdFtdID0gJGl0ZW1bJ2ZpZWxkJ10gLiAnYCcgLiAoJGl0ZW1bJ3N1bW1hcnknXSA/IDEgOiAwKSAuICdgJwoJCQkgIC4gKCRpdGVtWydkZXRhaWwnXSA/IDEgOiAwKQoJCQkgIC4gKCFlbXB0eSgkaXRlbVsnY2hvaWNlcyddKSA/ICgnYCcgLiBpbXBsb2RlKCdgJywgJGl0ZW1bJ2Nob2ljZXMnXSkpIAoJCQkJCQkgICAgICA6ICcnKTsKCSAgICB9CgkgICAgJHJldCA9IEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAkc2V0LAoJCQkJCQkgICAgICBpbXBsb2RlKCd8JywgJGxpc3QpLCAkY29udGFpbmVySWQpOwogICAgICAgICAgICBpZiAoJHJldCkgewogICAgICAgICAgICAgICAgIHJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CiAgICAgICAgICAgIH0KCX0KCXJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIG5ldyBjdXN0b20gZmllbGQgaW4gZ2l2ZW4gc2V0L2NvbnRhaW5lci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIGZpZWxkIG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgc2V0IChjb21tb24sIGFsYnVtLCBwaG90bykKICAgICAqIEBwYXJhbSBpbnQgaWQgb2YgY29udGFpbmVyOyB0byBzYXZlIGFsYnVtLXNwZWNpZmljIHNldHRpbmdzCiAgICAgKiBAcmV0dXJuIGFycmF5IG9iamVjdCBHYWxsZXJ5U3RhdHVzIGEgc3RhdHVzIGNvZGUKICAgICAqICAgICAgICAgICAgICAgYm9vbGVhbiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGR1cGxpY2F0ZSBmaWVsZCBuYW1lCiAgICAgKiBAc3RhdGljCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZEZpZWxkKCRuZXdGaWVsZCwgJHNldCwgJGNvbnRhaW5lcklkID0gMCkgewoJbGlzdCAoJHJldCwgJHBhcmFtKSA9IG1hcEhlbHBlcjo6bG9hZFBhcmFtZXRlcnMoJGNvbnRhaW5lcklkLCBmYWxzZSk7CiAgICAgICAgaWYgKCRyZXQpIHsKICAgICAgICAgICAgIHJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CiAgICAgICAgfQoJZm9yZWFjaCAoJHBhcmFtIGFzICRsaXN0KSB7CgkgICAgJGlkeCA9IG1hcEhlbHBlcjo6ZmluZFBhcmFtZXRlcigkbGlzdCwgJG5ld0ZpZWxkKTsKCSAgICBpZiAoJGlkeCA+PSAwKSB7CgkJcmV0dXJuIGFycmF5KG51bGwsIGZhbHNlKTsKCSAgICB9Cgl9CgkkcGFyYW1bJHNldF1bXSA9IGFycmF5KCdmaWVsZCcgPT4gJG5ld0ZpZWxkLAoJCQkgICAgICAgJ3N1bW1hcnknID0+IGZhbHNlLCAnZGV0YWlsJyA9PiB0cnVlLCAnY2hvaWNlcycgPT4gYXJyYXkoKSk7CgkkcmV0ID0gbWFwSGVscGVyOjpzYXZlUGFyYW1ldGVycyhhcnJheSgkc2V0ID0+ICRwYXJhbVskc2V0XSksICRjb250YWluZXJJZCk7CiAgICAgICAgaWYgKCRyZXQpIHsKICAgICAgICAgICAgIHJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CiAgICAgICAgfQoJcmV0dXJuIGFycmF5KG51bGwsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogRmluZCBhIGZpZWxkIGluIGEgcGFyYW1ldGVyIGxpc3QKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgcGFyYW1ldGVyIGxpc3QKICAgICAqIEBwYXJhbSBzdHJpbmcgZmllbGQgdG8gZmluZAogICAgICogQHJldHVybiBpbnQgaW5kZXggb3IgLTEgaWYgbm90IGZvdW5kCiAgICAgKiBAc3RhdGljCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZpbmRQYXJhbWV0ZXIoJiRsaXN0LCAkZmllbGQpIHsKCWZvcmVhY2ggKCRsaXN0IGFzICRpID0+ICRpdGVtKSB7CgkgICAgaWYgKCRpdGVtWydmaWVsZCddID09ICRmaWVsZCkgewoJCXJldHVybiAkaTsKCSAgICB9Cgl9CglyZXR1cm4gLTE7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWxldGUgY3VzdG9tIGZpZWxkIHZhbHVlcyBmb3IgZ2l2ZW4gZmllbGQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIGZpZWxkIHRvIGRlbGV0ZQogICAgICogQHBhcmFtIGludCBpZCBvZiBjb250YWluZXIsIHRvIGRlbGV0ZSBvbmx5IGZvciBzcGVjaWZpYyBhbGJ1bQogICAgICogQHBhcmFtIHN0cmluZyAnYWxidW0nIG9yICdwaG90bycgLS0gZG9uJ3QgZGVsZXRlIHZhbHVlcyBmb3IgaXRlbXMgb2YgdGhpcyB0eXBlCiAgICAgKiBAcmV0dXJuIEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICogQHN0YXRpYwogICAgICovCiAgICBmdW5jdGlvbiBkZWxldGVGaWVsZCgkZmllbGQsICRjb250YWluZXJJZCA9IDAsICRleGNlcHRUeXBlID0gJycpIHsKCglzd2l0Y2ggKCRleGNlcHRUeXBlKSB7CgoJY2FzZSAnYWxidW0nOgoJICAgICRzZXRUeXBlcyA9IGFycmF5KDAsIDIpOwoJY2FzZSAncGhvdG8nOgoJICAgIGlmICghaXNzZXQoJHNldFR5cGVzKSkgewoJCSRzZXRUeXBlcyA9IGFycmF5KDAsIDEpOwoJICAgIH0KCSAgICAkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OnJlbW92ZU1hcEVudHJ5KCdtYXBNYXAnLAoJCSAgICBhcnJheSgnZmllbGQnID0+ICRmaWVsZCwgJ3NldElkJyA9PiAkY29udGFpbmVySWQsICdzZXRUeXBlJyA9PiAkc2V0VHlwZXMpICk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJICAgIH0KCSAgICBicmVhazsKCglkZWZhdWx0OgoJICAgICRyZXQgPSBHYWxsZXJ5Q29yZUFwaTo6cmVtb3ZlTWFwRW50cnkoJ21hcE1hcCcsCgkJICAgIGFycmF5KCdmaWVsZCcgPT4gJGZpZWxkLCAnc2V0SWQnID0+ICRjb250YWluZXJJZCkgKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CgkgICAgfQoJfQoJcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkIGN1c3RvbSBmaWVsZCB2YWx1ZXMgZm9yIHNwZWNpZmllZCBpdGVtcwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAgb2JqZWN0IEdhbGxlcnlFbnRpdHkgaXRlbSwgLi4uCiAgICAgKiBAcGFyYW0gc3RyaW5nIGlmIHNwZWNpZmllZCB0aGVuIG9ubHkgaW5jbHVkZSBmaWVsZHMgZm9yIHRoYXQgdmlldyAoc3VtbWFyeSBvciBkZXRhaWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nIGlmIHNwZWNpZmllZCB0aGVuIGluY2x1ZGUgaW4gcmVzdWx0cyBhbGwgdmFsaWQgZmllbGRzIGZvcgogICAgICogICAgICAgICAgICAgICB0aGlzIHR5cGUsIGV2ZW4gaWYgaXRlbSBoYXMgbm8gdmFsdWUKICAgICAqIEByZXR1cm4gYXJyYXkgR2FsbGVyeVN0YXR1cyBhIHN0YXR1cyBjb2RlCiAgICAgKiAgICAgICAgICAgICAgIGFycmF5KGl0ZW1JZCA9PiBhcnJheShmaWVsZCA9PiB2YWx1ZSkpCiAgICAgKiAgICAgICAgICAgICAgIGFycmF5KGl0ZW1JZCA9PiBhcnJheSkgbG9hZFBhcmFtZXRlcnMgcmVzdWx0cwogICAgICoJCSAgICAgYXJyYXkoaXRlbUlkID0+IGJvb2xlYW4pIGxvYWRQYXJhbWV0ZXJzIHJlc3VsdHMKICAgICAqIEBzdGF0aWMKICAgICAqLwogICAgZnVuY3Rpb24gZmV0Y2hGaWVsZFZhbHVlcygkaXRlbXMsICR2aWV3VHlwZSA9IG51bGwsICRmaWxsU2V0ID0gbnVsbCkgewoJZ2xvYmFsICRnYWxsZXJ5OwoJJGRhdGEgPSAkcmVzdWx0ID0gYXJyYXkoKTsKCglpZiAoZW1wdHkoJGl0ZW1zKSB8fCAhaXNfYXJyYXkoJGl0ZW1zKSkgewoJICAgIHJldHVybiBhcnJheShHYWxsZXJ5Q29yZUFwaTo6ZXJyb3IoRVJST1JfQkFEX1BBUkFNRVRFUiwgX19GSUxFX18sIF9fTElORV9fKSwKCQkJIG51bGwsIG51bGwsIG51bGwpOwoJfQoKCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgewoJICAgICRpdGVtSWQgPSAoaW50KSRpdGVtLT5nZXRJZCgpOwoJICAgICRpdGVtSWRzW10gPSAkaXRlbUlkOwoJICAgICRyZXN1bHRbJGl0ZW1JZF0gPSBhcnJheSgpOwoJICAgICRjb250YWluZXJJZCA9CgkJR2FsbGVyeVV0aWxpdGllczo6aXNBKCRpdGVtLCAnR2FsbGVyeUFsYnVtSXRlbScpID8gKGludCkkaXRlbUlkIAoJCQkJCQkJCSA6IChpbnQpJGl0ZW0tPmdldFBhcmVudElkKCk7CgoJICAgIGxpc3QgKCRyZXQsICRwYXJhbVskaXRlbUlkXSwgJGlzQ29udGFpbmVyWyRpdGVtSWRdKSA9CgkJbWFwSGVscGVyOjpsb2FkUGFyYW1ldGVycygkY29udGFpbmVySWQpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJICAgIH0KCX0KCgkkcXVlcnkgPSAnCglTRUxFQ1QgW21hcE1hcDo6aXRlbUlkXSwgW21hcE1hcDo6ZmllbGRdLCBbbWFwTWFwOjp2YWx1ZV0KCUZST00gW21hcE1hcF0KCVdIRVJFIFttYXBNYXA6Oml0ZW1JZF0gSU4gKCcgLiBHYWxsZXJ5VXRpbGl0aWVzOjptYWtlTWFya2VycygkaXRlbUlkcykgLiAnKSc7CgoJbGlzdCAoJHJldCwgJHNlYXJjaFJlc3VsdHMpID0gJGdhbGxlcnktPnNlYXJjaCgkcXVlcnksICRpdGVtSWRzKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwogICAgICAgIH0KCgl3aGlsZSAoJHJlYyA9ICRzZWFyY2hSZXN1bHRzLT5uZXh0UmVzdWx0KCkpIHsKCSAgICAkZGF0YVsoaW50KSRyZWNbMF1dWyRyZWNbMV1dID0gJHJlY1syXTsKCX0KCglmb3JlYWNoICgkaXRlbUlkcyBhcyAkaXRlbUlkKSB7CgkgICAgZm9yZWFjaCAoYXJyYXkoJ2NvbW1vbicsICdhbGJ1bScsICdwaG90bycpIGFzICRzZXQpIHsKCQlmb3JlYWNoICgkcGFyYW1bJGl0ZW1JZF1bJHNldF0gYXMgJGl0KSB7CgkJICAgICRmaWVsZCA9ICRpdFsnZmllbGQnXTsKCQkgICAgaWYgKGlzc2V0KCR2aWV3VHlwZSkgJiYgISRpdFskdmlld1R5cGVdKSB7CgkJCWNvbnRpbnVlOwoJCSAgICB9CgkJICAgIGlmIChpc3NldCgkZGF0YVskaXRlbUlkXVskZmllbGRdKSkgewoJCQkkcmVzdWx0WyRpdGVtSWRdWyRmaWVsZF0gPSAkZGF0YVskaXRlbUlkXVskZmllbGRdOwoJCSAgICB9CgkJICAgIGVsc2UgaWYgKGlzc2V0KCRmaWxsU2V0KSAmJiAoJHNldCA9PSAnY29tbW9uJyB8fCAkc2V0ID09ICRmaWxsU2V0KSkgewoJCQkkcmVzdWx0WyRpdGVtSWRdWyRmaWVsZF0gPSAnJzsKCQkgICAgfQoJCX0KCSAgICB9Cgl9CgoJcmV0dXJuIGFycmF5KG51bGwsICRyZXN1bHQsICRwYXJhbSwgJGlzQ29udGFpbmVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhdmUgY3VzdG9tIGZpZWxkIHZhbHVlcyBmb3Igc3BlY2lmaWVkIGl0ZW0sIG92ZXJ3cml0aW5nIGFueSBleGlzdGluZyB2YWx1ZXMKICAgICAqCiAgICAgKiBAcGFyYW0gb2JqZWN0IEdhbGxlcnlFbnRpdHkgaXRlbQogICAgICogQHBhcmFtIGFycmF5IChmaWVsZCA9PiB2YWx1ZSkKICAgICAqIEByZXR1cm4gR2FsbGVyeVN0YXR1cyBhIHN0YXR1cyBjb2RlCiAgICAgKiBAc3RhdGljCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNhdmVGaWVsZFZhbHVlcygmJGl0ZW0sICRmaWVsZHMpIHsKCSRzZXQgPSAoR2FsbGVyeVV0aWxpdGllczo6aXNBKCRpdGVtLCAnR2FsbGVyeUFsYnVtSXRlbScpKQoJCT8gMQoJCTogKChHYWxsZXJ5VXRpbGl0aWVzOjppc0EoJGl0ZW0sICdHYWxsZXJ5UGhvdG9JdGVtJykpCgkJICA/IDIKCQkgIDogMCk7CgkkY29udGFpbmVySWQgPSAoJHNldCA9PSAxKSA/ICRpdGVtLT5nZXRJZCgpIDogJGl0ZW0tPmdldFBhcmVudElkKCk7CglsaXN0ICgkcmV0LCAkcGFyYW0pID0KCSAgICBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hBbGxQbHVnaW5QYXJhbWV0ZXJzKCdtb2R1bGUnLCAnbWFwJywgJGNvbnRhaW5lcklkKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCX0KCSRpc0NvbnRhaW5lciA9ICFlbXB0eSgkcGFyYW0pOwoKCSRyZXQgPSBHYWxsZXJ5Q29yZUFwaTo6cmVtb3ZlTWFwRW50cnkoJ21hcE1hcCcsIGFycmF5KCdpdGVtSWQnID0+ICRpdGVtLT5nZXRJZCgpKSk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7Cgl9Cglmb3JlYWNoICgkZmllbGRzIGFzICRmaWVsZCA9PiAkdmFsdWUpIHsKCSAgICBpZiAoIWVtcHR5KCR2YWx1ZSkpIHsKCQkkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OmFkZE1hcEVudHJ5KCdtYXBNYXAnLAoJCQlhcnJheSgnaXRlbUlkJyA9PiAkaXRlbS0+Z2V0SWQoKSwgJ2ZpZWxkJyA9PiAkZmllbGQsICd2YWx1ZScgPT4gJHZhbHVlLAoJCQkgICAgICAnc2V0SWQnID0+ICRpc0NvbnRhaW5lciA/ICRjb250YWluZXJJZCA6IDAsICdzZXRUeXBlJyA9PiAkc2V0KSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkgICAgfQoJfQoJcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBFdmVudCBoYW5kbGVyIGZvciBHYWxsZXJ5RW50aXR5OjpkZWxldGUgZXZlbnQKICAgICAqIFJlbW92ZSBhbnkgY3VzdG9tIGZpZWxkIHZhbHVlcyBmb3IgZW50aXR5IGJlaW5nIGRlbGV0ZWQuCiAgICAgKgogICAgICogQHNlZSBHYWxsZXJ5RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQKICAgICAqLwogICAgZnVuY3Rpb24gaGFuZGxlRXZlbnQoJGV2ZW50KSB7CgogICAgICAgIEdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9Hb29nbGVNYXBVdGlsaXRpZXMuY2xhc3MnKTsKCiAgICAgICAgaWYgKCRldmVudC0+Z2V0RXZlbnROYW1lKCkgPT0gJ0dhbGxlcnlFbnRpdHk6OmRlbGV0ZScpIHsKCSAgICAkaXRlbSA9ICRldmVudC0+Z2V0RW50aXR5KCk7CgkgICAgJHJldCA9IEdhbGxlcnlDb3JlQXBpOjpyZW1vdmVNYXBFbnRyeSgnbWFwTWFwJywgYXJyYXkoJ2l0ZW1JZCcgPT4gJGl0ZW0tPmdldElkKCkpKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CgkgICAgfQoJfQoJaWYgKCRldmVudC0+Z2V0RXZlbnROYW1lKCkgPT0gJ0dhbGxlcnlFbnRpdHk6OnNhdmUnKSB7CgkgICAgJGl0ZW0gPSAkZXZlbnQtPmdldEVudGl0eSgpOwoJICAgIGlmICgkaXRlbS0+Z2V0RW50aXR5VHlwZSgpID09ICdHYWxsZXJ5UGhvdG9JdGVtJykgewoJCWxpc3QgKCRyZXQsICRjb29yZHMpID0gR29vZ2xlTWFwVXRpbGl0aWVzOjpnZXRHUFNDb29yZHNGcm9tRXhpZigkaXRlbSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCk7CgkJfQogIAoJCWlmICgkY29vcmRzICE9IG51bGwpIHsKCQkgICAgJGZpZWxkc1snR1BTJ10gPSAkY29vcmRzOwoJCSAgICAkcmV0ID0gbWFwSGVscGVyOjpzYXZlRmllbGRWYWx1ZXMoJGl0ZW0sICRmaWVsZHMpOwoJCSAgICBpZiAoJHJldCkgewoJCQlyZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCSAgICB9CgkJfQoJICAgIH0KCX0KCXJldHVybiBhcnJheShudWxsLCBudWxsKTsKICAgIH0KCiAgICAvKioKICAgICAqIEhhbmRsZXIgZm9yIEN1c3RvbSBGaWVsZCBBZG1pbiBhY3Rpb25zCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkIGZvcm0gZGF0YQogICAgICogQHBhcmFtIGludCBpZCBvZiBjb250YWluZXIsIGZvciBhbGJ1bS1zcGVjaWZpYyBzZXR0aW5ncwogICAgICogQHJldHVybiBhcnJheSBHYWxsZXJ5U3RhdHVzIGEgc3RhdHVzIGNvZGUKICAgICAqICAgICAgICAgICAgICAgbWl4ZWQgc3RhdHVzIHRvIHJldHVybiBmcm9tIGNvbnRyb2xsZXIKICAgICAqIEBzdGF0aWMKICAgICAqLwogICAgZnVuY3Rpb24gaGFuZGxlQWRtaW5BY3Rpb24oJGZvcm0sICRjb250YWluZXJJZCA9IDApIHsKCSRzdGF0dXMgPSBhcnJheSgpOwoKCWlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ3NhdmUnXSkpIHsKCSAgICBsaXN0ICgkcmV0LCAkcGFyYW0pID0gbWFwSGVscGVyOjpsb2FkUGFyYW1ldGVycygkY29udGFpbmVySWQsIGZhbHNlKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CgkgICAgfQoJICAgIGZvcmVhY2ggKGFycmF5KCdjb21tb24nLCAnYWxidW0nLCAncGhvdG8nKSBhcyAkc2V0KSB7CgkJJG5ld1BhcmFtWyRzZXRdID0gYXJyYXkoKTsKCQlpZiAoaXNzZXQoJGZvcm1bJHNldF1bJ2luZGV4J10pKSB7CgkJICAgIGZvcmVhY2ggKCRmb3JtWyRzZXRdWydpbmRleCddIGFzICRuZXdpZHggPT4gJG9sZGlkeCkgewoJCQkkbmV3UGFyYW1bJHNldF1bXSA9CgkJCQlhcnJheSgnZmllbGQnID0+ICRwYXJhbVskc2V0XVskb2xkaWR4XVsnZmllbGQnXSwKCQkJCSAgICAgICdzdW1tYXJ5JyA9PiBpc3NldCgkZm9ybVskc2V0XVsnc3VtbWFyeSddWyRuZXdpZHhdKSwKCQkJCSAgICAgICdkZXRhaWwnID0+IGlzc2V0KCRmb3JtWyRzZXRdWydkZXRhaWwnXVskbmV3aWR4XSksCgkJCQkgICAgICAnY2hvaWNlcycgPT4gJHBhcmFtWyRzZXRdWyRvbGRpZHhdWydjaG9pY2VzJ10pOwoJCSAgICB9CgkJfQoJICAgIH0KCSAgICAkcmV0ID0gbWFwSGVscGVyOjpzYXZlUGFyYW1ldGVycygkbmV3UGFyYW0sICRjb250YWluZXJJZCk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJICAgIH0KCSAgICAkc3RhdHVzWydzYXZlZCddID0gMTsKCX0gZWxzZSBpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydhZGQnXSkpIHsKCSAgICBmb3JlYWNoICgkZm9ybVsnYWN0aW9uJ11bJ2FkZCddIGFzICRzZXQgPT4gJHRtcCkgewoJICAgIH0gLyoqIEB0b2RvOiBJcyB0aGlzIGludGVuZGVkLS1lbXB0eSBhY3Rpb24gZm9yIGZvcmVhY2g/ICovCgkgICAgJG5ld0ZpZWxkID0gc3RyX3JlcGxhY2UoJ3wnLCAnOicsIHN0cl9yZXBsYWNlKCdgJywgIiYjMDM5OyIsICRmb3JtWyRzZXRdWyduZXdGaWVsZCddKSk7CgkgICAgaWYgKGVtcHR5KCRuZXdGaWVsZCkpIHsKCQkkc3RhdHVzWydlcnJvciddWydlbXB0eSddID0gMTsKCQlyZXR1cm4gYXJyYXkobnVsbCwgJHN0YXR1cyk7CgkgICAgfQoJICAgIGxpc3QgKCRyZXQsICRhZGRlZCkgPSBtYXBIZWxwZXI6OmFkZEZpZWxkKCRuZXdGaWVsZCwgJHNldCwgJGNvbnRhaW5lcklkKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CgkgICAgfQoJICAgIGlmICgkYWRkZWQpIHsKCQkkc3RhdHVzWydhZGRlZCddID0gMTsKCSAgICB9IGVsc2UgewoJCSRzdGF0dXNbJ2Vycm9yJ11bJ2R1cGxpY2F0ZSddID0gMTsKCSAgICB9Cgl9IGVsc2UgaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnZ28nXSkpIHsKCSAgICBmb3JlYWNoICgkZm9ybVsnYWN0aW9uJ11bJ2dvJ10gYXMgJHNldCA9PiAkdG1wKSB7CgkgICAgfSAvKiogQHRvZG86IElzIHRoaXMgaW50ZW5kZWQtLWVtcHR5IGFjdGlvbiBmb3IgZm9yZWFjaD8gKi8KCSAgICBsaXN0ICgkcmV0LCAkcGFyYW0sICRpc0NvbnRhaW5lcikgPSBtYXBIZWxwZXI6OmxvYWRQYXJhbWV0ZXJzKCRjb250YWluZXJJZCwgZmFsc2UpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCSAgICB9CgkgICAgJGlkeCA9IG1hcEhlbHBlcjo6ZmluZFBhcmFtZXRlcigkcGFyYW1bJHNldF0sICRmb3JtWyRzZXRdWydnb0ZpZWxkJ10pOwoJICAgIGlmICgkaWR4IDwgMCkgewoJCXJldHVybiBhcnJheShHYWxsZXJ5Q29yZUFwaTo6ZXJyb3IoRVJST1JfTUlTU0lOR19PQkpFQ1QsIF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwpOwoJICAgIH0KCSAgICBzd2l0Y2ggKCRmb3JtWyRzZXRdWydnb0FjdGlvbiddKSB7CgoJICAgIGNhc2UgJ2NvbW1vbic6CgkJLyogUmVtb3ZlIGZyb20gJHNldCwgYWRkIHRvIGNvbW1vbjsgbm8gZGIgY2hhbmdlICovCgkJJHBhcmFtWydjb21tb24nXVtdID0gJHBhcmFtWyRzZXRdWyRpZHhdOwoJCXVuc2V0KCRwYXJhbVskc2V0XVskaWR4XSk7CgkJJHJldCA9IG1hcEhlbHBlcjo6c2F2ZVBhcmFtZXRlcnMoCgkJCWFycmF5KCdjb21tb24nID0+ICRwYXJhbVsnY29tbW9uJ10sICRzZXQgPT4gJHBhcmFtWyRzZXRdKSwgJGNvbnRhaW5lcklkKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCQlicmVhazsKCgkgICAgY2FzZSAncmVtb3ZlJzoKCQkvKiBSZW1vdmUgZnJvbSAkc2V0OyBkZWxldGUgZnJvbSBhbGwgaXRlbXMgKi8KCQl1bnNldCgkcGFyYW1bJHNldF1bJGlkeF0pOwoJCSRyZXQgPSBtYXBIZWxwZXI6OnNhdmVQYXJhbWV0ZXJzKGFycmF5KCRzZXQgPT4gJHBhcmFtWyRzZXRdKSwgJGNvbnRhaW5lcklkKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCQkkcmV0ID0gbWFwSGVscGVyOjpkZWxldGVGaWVsZCgkZm9ybVskc2V0XVsnZ29GaWVsZCddLAoJCQkJCSAgICAgICRpc0NvbnRhaW5lciA/ICRjb250YWluZXJJZCA6IDApOwogICAgICAgICAgICAgICAgaWYgKCRyZXQpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKICAgICAgICAgICAgICAgIH0KCQkkc3RhdHVzWydyZW1vdmVkJ10gPSAxOwoJCWJyZWFrOwoKCSAgICBjYXNlICdhbGJ1bSc6CgkJLyogUmVtb3ZlIGZyb20gY29tbW9uLCBhZGQgdG8gYWxidW07IGRlbGV0ZSBmcm9tIG5vbi1hbGJ1bSBpdGVtcyAqLwoJICAgIGNhc2UgJ3Bob3RvJzoKCQkvKiBSZW1vdmUgZnJvbSBjb21tb24sIGFkZCB0byBwaG90bzsgZGVsZXRlIGZyb20gbm9uLXBob3RvIGl0ZW1zICovCgkJJG5ld1NldCA9ICRmb3JtWyRzZXRdWydnb0FjdGlvbiddOwoJCSRwYXJhbVskbmV3U2V0XVtdID0gJHBhcmFtWyRzZXRdWyRpZHhdOwoJCXVuc2V0KCRwYXJhbVskc2V0XVskaWR4XSk7CgkJJHJldCA9IG1hcEhlbHBlcjo6c2F2ZVBhcmFtZXRlcnMoCgkJCWFycmF5KCdjb21tb24nID0+ICRwYXJhbVsnY29tbW9uJ10sICRuZXdTZXQgPT4gJHBhcmFtWyRuZXdTZXRdKSwgCgkJCSRjb250YWluZXJJZCk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkJJHJldCA9IG1hcEhlbHBlcjo6ZGVsZXRlRmllbGQoJGZvcm1bJHNldF1bJ2dvRmllbGQnXSwKCQkJCQkgICAgICAkaXNDb250YWluZXIgPyAkY29udGFpbmVySWQgOiAwLCAkbmV3U2V0KTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJCX0KCQlicmVhazsKCgkgICAgZGVmYXVsdDoKCQlyZXR1cm4gYXJyYXkoR2FsbGVyeUNvcmVBcGk6OmVycm9yKEVSUk9SX1VOSU1QTEVNRU5URUQsIF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwpOwoJICAgIH0KCSAgICBpZiAoZW1wdHkoJHN0YXR1cykpIHsKCQkkc3RhdHVzWydtb3ZlZCddID0gMTsKCSAgICB9Cgl9IGVsc2UgaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsncGlja2xpc3QnXSkpIHsKCSAgICAkY2hvaWNlcyA9IGFycmF5KCk7CgkgICAgZm9yZWFjaCAoYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgiXG4iLCAkZm9ybVsncGlja2xpc3QnXSkpIGFzICR0bXApIHsKCQlpZiAoIWVtcHR5KCR0bXApKSB7CgkJICAgICRjaG9pY2VzW10gPSAkdG1wOwoJCX0KCSAgICB9CgkgICAgbGlzdCAoJHJldCwgJHBhcmFtKSA9IG1hcEhlbHBlcjo6bG9hZFBhcmFtZXRlcnMoJGNvbnRhaW5lcklkLCBmYWxzZSk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJICAgIH0KCSAgICBmb3JlYWNoICgkcGFyYW0gYXMgJHNldCA9PiAkbGlzdCkgewoJCSRpZHggPSBtYXBIZWxwZXI6OmZpbmRQYXJhbWV0ZXIoJGxpc3QsICRmb3JtWydwaWNrRmllbGQnXSk7CgkJaWYgKCRpZHggPj0gMCkgewoJCSAgICAkcGFyYW1bJHNldF1bJGlkeF1bJ2Nob2ljZXMnXSA9ICRjaG9pY2VzOwoJCSAgICAkcmV0ID0gbWFwSGVscGVyOjpzYXZlUGFyYW1ldGVycyhhcnJheSgkc2V0ID0+ICRwYXJhbVskc2V0XSksICRjb250YWluZXJJZCk7CgkJICAgIGlmICgkcmV0KSB7CgkJCXJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CgkJICAgIH0KCQkgICAgJHN0YXR1c1sncGlja2xpc3QnXSA9IDE7CgkJICAgIGJyZWFrOwoJCX0KCSAgICB9Cgl9IC8qIGVsc2UgJGZvcm1bJ2FjdGlvbiddWydyZXNldCddICovCgoJcmV0dXJuIGFycmF5KG51bGwsICRzdGF0dXMpOwogICAgfQoKICAgIC8qKgogICAgICogTG9hZCBmb3JtIGRhdGEgZm9yIEFkbWluIHRlbXBsYXRlCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkIGZvcm0KICAgICAqIEBwYXJhbSBpbnQgaWQgb2YgY29udGFpbmVyLCBmb3IgYWxidW0tc3BlY2lmaWMgc2V0dGluZ3MKICAgICAqIEByZXR1cm4gb2JqZWN0IEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICogQHN0YXRpYwogICAgICovCiAgICBmdW5jdGlvbiBsb2FkQWRtaW5Gb3JtKCYkZm9ybSwgJGNvbnRhaW5lcklkID0gMCkgewoJZ2xvYmFsICRnYWxsZXJ5OwoJbGlzdCAoJHJldCwgJG1vZHVsZSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZFBsdWdpbignbW9kdWxlJywgJ21hcCcpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJfQoKCSRmb3JtWydzZXQnXSA9IGFycmF5KCk7CgkkZm9ybVsnc2V0J11bXSA9IGFycmF5KCdrZXknID0+ICdjb21tb24nLCAnbmFtZScgPT4gJGdhbGxlcnktPmkxOG4oJ0NvbW1vbiBGaWVsZHMnKSk7CgkkZm9ybVsnc2V0J11bXSA9IGFycmF5KCdrZXknID0+ICdhbGJ1bScsICduYW1lJyA9PiAkZ2FsbGVyeS0+aTE4bignQWxidW0gRmllbGRzJykpOwoJJGZvcm1bJ3NldCddW10gPSBhcnJheSgna2V5JyA9PiAncGhvdG8nLCAnbmFtZScgPT4gJGdhbGxlcnktPmkxOG4oJ1Bob3RvIEZpZWxkcycpKTsKCglsaXN0ICgkcmV0LCAkZm9ybVsnZmllbGRzJ10pID0gbWFwSGVscGVyOjpsb2FkUGFyYW1ldGVycygkY29udGFpbmVySWQsIGZhbHNlKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCX0KCglyZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgbWFwSW50ZXJmYWNlXzFfMDo6Y3JlYXRlbWFwcygpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyZWF0ZW1hcHMoJGZpZWxkTmFtZXMsICRjb250YWluZXJJZCA9IDApIHsKCSRkdXBsaWNhdGVzID0gYXJyYXkoKTsKCWZvcmVhY2ggKCRmaWVsZE5hbWVzIGFzICRmaWVsZE5hbWUpIHsKCSAgICBsaXN0ICgkcmV0LCAkYWRkZWQpID0gbWFwSGVscGVyOjphZGRGaWVsZCgkZmllbGROYW1lLCAnY29tbW9uJywgJGNvbnRhaW5lcklkKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7CgkgICAgfQoJICAgIGlmICghJGFkZGVkKSB7CgkJJGR1cGxpY2F0ZXNbXSA9ICRmaWVsZE5hbWU7CgkgICAgfQoJfQoJcmV0dXJuIGFycmF5KG51bGwsICRkdXBsaWNhdGVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgbWFwSW50ZXJmYWNlXzFfMDo6c2V0bWFwVmFsdWVzKCkKICAgICAqLwogICAgZnVuY3Rpb24gc2V0bWFwVmFsdWVzKCRpdGVtSWQsICRkYXRhKSB7CglsaXN0ICgkcmV0LCAkaXRlbSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZEVudGl0aWVzQnlJZCgkaXRlbUlkKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCX0KCSRyZXQgPSBtYXBIZWxwZXI6OnNhdmVGaWVsZFZhbHVlcygkaXRlbSwgJGRhdGEpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJfQoJcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYWxsIHRoZSBHb29nbGUgQVBJIGtleSBwcm9maWxlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICogICAgICAgICAgICAgICBhcnJheSBHb29nbGUgQVBJIGtleSBwcm9maWxlcwogICAgICovCiAgICBmdW5jdGlvbiBnZXRBbGxLZXlQcm9maWxlcygpIHsKCWxpc3QgKCRyZXQsICRtYXBLZXlzKSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnbWFwS2V5cycpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldCwgbnVsbCk7Cgl9CglyZXR1cm4gYXJyYXkobnVsbCwgKCRtYXBLZXlzICE9ICcnKSA/IHVuc2VyaWFsaXplKCRtYXBLZXlzKSA6IGFycmF5KCkpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBHb29nbGUgQVBJIGtleSBmb3IgdGhlIGN1cnJlbnQgVVJMLCBvciBlbXB0eSBzdHJpbmcgaWYgbm9uZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICogCSAgICAgICAgICAgICBzdHJpbmcgR29vZ2xlIEFQSSBrZXkgd2hpY2ggbWF0Y2hlcyB0aGUgZGV0ZWN0ZWQgY3VycmVudCBVUkwKICAgICAqLwogICAgZnVuY3Rpb24gZmV0Y2hBcGlLZXkoKSB7CglnbG9iYWwgJGdhbGxlcnk7CgkKCSR1cmxHZW5lcmF0b3IgPSYgJGdhbGxlcnktPmdldFVybEdlbmVyYXRvcigpOwoKCS8qIEdyYWIgdGhlIGN1cnJlbnQgVVJMIGRpcmVjdG9yeSAqLwoJJHVybERpciA9ICR1cmxHZW5lcmF0b3ItPmdldEN1cnJlbnRVcmxEaXIoKTsKCWxpc3QgKCRyZXQsICRwcm9maWxlKSA9IG1hcEhlbHBlcjo6ZmV0Y2hLZXlQcm9maWxlRm9yVXJsKCR1cmxEaXIpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldCwgbnVsbCk7Cgl9Cgkka2V5ID0gKGFycmF5X2tleV9leGlzdHMoJ2FwaUtleScsICRwcm9maWxlKSkgPyAkcHJvZmlsZVsnYXBpS2V5J10gOiAnJzsKCglyZXR1cm4gYXJyYXkoJHJldCwgJGtleSk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIEFQSSBrZXkgcHJvZmlsZSBmb3IgdGhlIGdpdmVuIFVSTCwgb3IgZW1wdHkgYXJyYXkgaWYgbm9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gJHVybCBVUkwgdG8gbWF0Y2ggYWdhaW5zdCB0aGUgc3RvcmVkIHByb2ZpbGVzLiBEaXJlY3Rvcnkgb25seSwgbm8gVVJJLgogICAgICogQHJldHVybiBhcnJheSBHYWxsZXJ5U3RhdHVzIGEgc3RhdHVzIGNvZGUKICAgICAqIAkgICAgICAgICAgICAgYXJyYXkgR29vZ2xlIEFQSSBrZXkgcHJvZmlsZSB3aGljaCBtYXRjaGVzIHRoZSBwcm92aWRlZCBVUkwKICAgICAqLwogICAgZnVuY3Rpb24gZmV0Y2hLZXlQcm9maWxlRm9yVXJsKCR1cmwpIHsKCSRwcm9maWxlID0gYXJyYXkoKTsKCgkvKiBHZXQgdGhlIGtleSBwcm9maWxlcyBhbmQgdGVzdCBlYWNoIG9uZSBhZ2FpbnN0IHRoZSBwYXNzZWQgVVJMLiAqLwoJbGlzdCAoJHJldCwgJGFsbEtleVNldHMpID0gbWFwSGVscGVyOjpnZXRBbGxLZXlQcm9maWxlcygpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldCwgbnVsbCk7Cgl9CgoJJGluZGV4ID0gbWFwSGVscGVyOjpfbWF0Y2hMb25nZXN0VXJsKCRhbGxLZXlTZXRzLCAkdXJsKTsKCWlmICgkaW5kZXggIT0gLTEpIHsKCSAgICAkcHJvZmlsZSA9ICRhbGxLZXlTZXRzWyRpbmRleF07Cgl9CgoJcmV0dXJuIGFycmF5KG51bGwsICRwcm9maWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlbW92ZSB0aGUgQVBJIGtleSBwcm9maWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gVVJMLgogICAgICoKICAgICAqIEBwYXJhbSAkdXJsIFVSTCB0byBtYXRjaCBhZ2FpbnN0IHRoZSBzdG9yZWQgcHJvZmlsZXMuIERpcmVjdG9yeSBvbmx5LCBubyBVUkkuCiAgICAgKiAKICAgICAqIEByZXR1cm4gYXJyYXkgR2FsbGVyeVN0YXR1cyBhIHN0YXR1cyBjb2RlCiAgICAgKiAgICAgICAgICAgICAgIGJvb2xlYW4gZGVsZXRlIHdhcyBzdWNjZXNzZnVsCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRlbGV0ZUtleVByb2ZpbGUoJHVybCkgewoJLyoKCSAqIEdldCB0aGUga2V5IHByb2ZpbGVzIGFuZCB0ZXN0IGVhY2ggb25lIGFnYWluc3QgdGhlIHBhc3NlZCBVUkwuIERlbGV0ZSB0aGUgbWF0Y2hpbmcgb25lLgoJICovCglsaXN0ICgkcmV0LCAkYWxsS2V5U2V0cykgPSBtYXBIZWxwZXI6OmdldEFsbEtleVByb2ZpbGVzKCk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiBhcnJheSgkcmV0LCBmYWxzZSk7Cgl9CgoJJGluZGV4ID0gbWFwSGVscGVyOjpfbWF0Y2hMb25nZXN0VXJsKCRhbGxLZXlTZXRzLCAkdXJsKTsKCWlmICgkaW5kZXggIT0gLTEpIHsKCSAgICB1bnNldCgkYWxsS2V5U2V0c1skaW5kZXhdKTsKCX0KCgkkcmV0ID0gbWFwSGVscGVyOjpfc2F2ZUFsbEtleVByb2ZpbGVzKCRhbGxLZXlTZXRzKTsKCXJldHVybiBhcnJheSgkcmV0LCAkZm91bmQpOwogICAgfQoKICAgIC8qKgogICAgICogU2F2ZSB0aGUgZ2l2ZW4gR29vZ2xlIEFQSSBrZXkgcHJvZmlsZSBpbiB0aGUgZGF0YWJhc2UuCiAgICAgKgogICAgICogQHBhcmFtICRuYW1lIE5hbWUgb2YgdGhlIHByb2ZpbGUKICAgICAqIEBwYXJhbSAkdXJsIFVSTCBmb3IgdGhlIHByb2ZpbGUKICAgICAqIEBwYXJhbSAkYXBpS2V5IEdvb2dsZSBBUEkga2V5IGZvciB0aGUgcHJvZmlsZQogICAgICogQHBhcmFtICRvbGRVcmwgVXJsIG9mIG9sZCBwcm9maWxlIHRvIHJlcGxhY2UgaWYgZWRpdGluZywgb3IgYmxhbmsgaWYgbmV3CiAgICAgKiAKICAgICAqIEByZXR1cm4gR2FsbGVyeVN0YXR1cyBhIHN0YXR1cyBjb2RlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNhdmVLZXlQcm9maWxlKCRuYW1lLCAkdXJsLCAkYXBpS2V5LCAkb2xkVXJsKSB7CgkvKiBHZXQgYWxsIHRoZSBrZXkgcHJvZmlsZXMuICovCglsaXN0ICgkcmV0LCAkYWxsS2V5U2V0cykgPSBtYXBIZWxwZXI6OmdldEFsbEtleVByb2ZpbGVzKCk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKCX0KCSRhZGROZXcgPSBmYWxzZTsKCglpZiAoIWVtcHR5KCRvbGRVcmwpKSB7CgkgICAgLyogSWYgd2UncmUgZWRpdGluZyBhIGtleSwgbG9jYXRlIGl0IGJ5IHRoZSBvbGRVcmwgYW5kIG1vZGlmeSB0aGUgc2F2ZWQgcHJvZmlsZS4KCSAgICAgKiBJZiBubyBtYXRjaCwgdGhlbiBhZGQgYSBuZXcgcHJvZmlsZS4KCSAgICAgKi8KCSAgICAkaW5kZXggPSBtYXBIZWxwZXI6Ol9tYXRjaExvbmdlc3RVcmwoJGFsbEtleVNldHMsICRvbGRVcmwpOwoJICAgIGlmICgkaW5kZXggIT0gLTEpIHsKCQkkYWxsS2V5U2V0c1skaW5kZXhdWyd1cmwnXSA9ICR1cmw7CgkJJGFsbEtleVNldHNbJGluZGV4XVsnbmFtZSddID0gJG5hbWU7CgkJJGFsbEtleVNldHNbJGluZGV4XVsnYXBpS2V5J10gPSAkYXBpS2V5OwoJICAgIH0gZWxzZSB7CgkgICAgCSRhZGROZXcgPSB0cnVlOwoJICAgIH0KCX0gZWxzZSB7CgkgICAgJGFkZE5ldyA9IHRydWU7Cgl9CglpZiAoJGFkZE5ldykgewoJICAgIC8qIEFkZCBhIG5ldyBrZXkgcHJvZmlsZSAqLwoJICAgICRhbGxLZXlTZXRzW10gPSBhcnJheSgndXJsJyA9PiAkdXJsLCAnbmFtZScgPT4gJG5hbWUsICdhcGlLZXknID0+ICRhcGlLZXkpOwoJfQoJJHJldCA9IG1hcEhlbHBlcjo6X3NhdmVBbGxLZXlQcm9maWxlcygkYWxsS2V5U2V0cyk7CglyZXR1cm4gJHJldDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBGaW5kIHRoZSBwcm9maWxlIGluZGV4IG9mIHRoZSBsb25nZXN0IG1hdGNoaW5nIHVybCBpbiB0aGUgR29vZ2xlIEFQSSBrZXkgcHJvZmlsZXMgaW4gdGhlIGRhdGFiYXNlLgogICAgICoKICAgICAqIEBwYXJhbSAkcHJvZmlsZXMgYXJyYXkgR29vZ2xlIEFQSSBrZXkgcHJvZmlsZXMKICAgICAqIEBwYXJhbSAkdXJsIFVybCB0byBmaW5kIGxvbmdlc3QgbWF0Y2gKICAgICAqICAKICAgICAqIEByZXR1cm4gaW50ZWdlciBpbmRleCBvZiBsb25nZXN0IG1hdGNoaW5nIHVybCBwcm9maWxlLCBvciAtMSBpZiBub25lIGZvdW5kCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9tYXRjaExvbmdlc3RVcmwoJHByb2ZpbGVzLCAkdXJsKSB7CgkkbG9uZ2VzdE1hdGNoID0gMDsKCSRtYXRjaEluZGV4ID0gLTE7CgoJZm9yZWFjaCAoJHByb2ZpbGVzIGFzICRpbmRleCA9PiAka2V5U2V0KSB7CgkgICAgLyogCgkgICAgICogR28gdGhyb3VnaCBhbGwgdGhlIGtleXMgYW5kIHBpY2sgdGhlIGxvbmdlc3QgKG1vc3Qtc3BlY2lmaWMpIG1hdGNoLCBpbiBjYXNlIG1vcmUgdGhhbgoJICAgICAqIG9uZSBrZXkgYXBwbGllcyB0byB0aGUgZ2l2ZW4gdXJsLiBVc2UgYSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmUuIENvdWxkIGNvbmNlaXZhYmx5CgkgICAgICogZ2l2ZSBhIGZhbHNlIG1hdGNoIGlmIFVSTCBjb250YWlucyBhIHBhdGggYWZ0ZXIgdGhlIGhvc3QgbmFtZSwgaWYgdGhlIHBhdGggaXMgCgkgICAgICogY2FzZS1zZW5zaXRpdmUsIGJ1dCB0aGF0J3MgYSB2ZXJ5IHVubGlrZXkgc2l0dWF0aW9uLgoJICAgICAqLwoJICAgICRsZW5ndGggPSBzdHJsZW4oJGtleVNldFsndXJsJ10pOwoJICAgIGlmICghc3RybmNhc2VjbXAoJHVybCwgJGtleVNldFsndXJsJ10sICRsZW5ndGgpICYmICRsZW5ndGggPiAkbG9uZ2VzdE1hdGNoKSB7CgkJJG1hdGNoSW5kZXggPSAkaW5kZXg7CgkJJGxvbmdlc3RNYXRjaCA9ICRsZW5ndGg7CgkgICAgfQoJfQoJcmV0dXJuICRtYXRjaEluZGV4OwogICAgfQogICAgCiAgICAvKioKICAgICAqIFNhdmUgdGhlIEdvb2dsZSBBUEkga2V5IHByb2ZpbGVzIGluIHRoZSBkYXRhYmFzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gJHByb2ZpbGVzIGFycmF5IEdvb2dsZSBBUEkga2V5IHByb2ZpbGVzCiAgICAgKiAKICAgICAqIEByZXR1cm4gR2FsbGVyeVN0YXR1cyBhIHN0YXR1cyBjb2RlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9zYXZlQWxsS2V5UHJvZmlsZXMoJHByb2ZpbGVzKSB7CiAgICAJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnbWFwS2V5cycsIHNlcmlhbGl6ZSgkcHJvZmlsZXMpKTsKICAgIAkKICAgIAlyZXR1cm4gJHJldDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBHZXQgYW4gaXRlbSBjb2xvciBpbiB0aGUgREIKICAgICAqCiAgICAgKiBAcGFyYW0gJGl0ZW1JZCBpbnRlZ2VyIHRoZSBpdGVtIElECiAgICAgKiBAcmV0dXJuIGFycmF5ICBHYWxsZXJ5U3RhdHVzIGEgc3RhdHVzIGNvZGUKICAgICAqCSAgICAgICAgICAgICAgc3RyaW5nIEl0ZW0gY29sb3IKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEl0ZW1Db2xvcigkaXRlbUlkKXsKCWdsb2JhbCAkZ2FsbGVyeTsKCgkkcXVlcnkgPSAnCglTRUxFQ1QgCgkgIFttYXBNYXA6OnZhbHVlXQoJRlJPTSBbbWFwTWFwXQoJV0hFUkUKCSAgW21hcE1hcDo6ZmllbGRdID0gXCdDb2xvclwnCgkgIEFORAoJICBbbWFwTWFwOjppdGVtSWRdID0gPwoJJzsKCSAgICAKCWxpc3QgKCRyZXQsICRyZXN1bHRzKSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5LCBhcnJheSgkaXRlbUlkKSwgYXJyYXkoKSk7CglpZiAoJHJldCBvciAkcmVzdWx0cy0+cmVzdWx0Q291bnQoKSA9PSAwKSB7CgkgICAgcmV0dXJuICJkZWZhdWx0IjsKCX0KCQkKCSRDb2xvciA9ICRyZXN1bHRzLT5uZXh0UmVzdWx0KCk7CgoJcmV0dXJuICRDb2xvclswXTsKCQkKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhbiBpdGVtIHpvb21sZXZlbCBpbiB0aGUgREIKICAgICAqCiAgICAgKiBAcGFyYW0gJGl0ZW1JZCBpbnRlZ2VyIHRoZSBpdGVtIElECiAgICAgKiBAcmV0dXJuIHpvb21sZXZlbCBvZiBpdGVtCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBnZXRJdGVtWm9vbUxldmVsKCRpdGVtSWQpewoJZ2xvYmFsICRnYWxsZXJ5OwoKCWxpc3QgKCRyZXQsICRkZWZhdWx0em9vbWxldmVsKSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnem9vbUluTGV2ZWwnKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICI0IjsKCX0KCgkkcXVlcnkgPSAnCglTRUxFQ1QgCgkgIFttYXBNYXA6OnZhbHVlXQoJRlJPTSBbbWFwTWFwXQoJV0hFUkUKCSAgW21hcE1hcDo6ZmllbGRdID0gXCdab29tTGV2ZWxcJwoJICBBTkQKCSAgW21hcE1hcDo6aXRlbUlkXSA9ID8KCSc7CgkgICAgCglsaXN0ICgkcmV0LCAkcmVzdWx0cykgPSAkZ2FsbGVyeS0+c2VhcmNoKCRxdWVyeSwgYXJyYXkoJGl0ZW1JZCksIGFycmF5KCkpOwoJaWYgKCRyZXQgb3IgJHJlc3VsdHMtPnJlc3VsdENvdW50KCkgPT0gMCkgewoJICAgIHJldHVybiAkZGVmYXVsdHpvb21sZXZlbDsKCX0KCQkKCSRab29tTGV2ZWwgPSAkcmVzdWx0cy0+bmV4dFJlc3VsdCgpOwoKCXJldHVybiAkWm9vbUxldmVsWzBdOwoJCQogICAgfQoKCiAgICAvKioKICAgICAqIEdldCBhbiBpdGVtIEdQUyBDb29yZGluYXRlcyBmcm9tIHRoZSBEQgogICAgICoKICAgICAqIEBwYXJhbSAkaXRlbUlkIGludGVnZXIgdGhlIGl0ZW0gSUQKICAgICAqIEByZXR1cm4gY29vcmRpbmF0ZXMgb2YgaXRlbQogICAgICoKICAgICAqLwoJZnVuY3Rpb24gZ2V0SXRlbUdQU0Nvb3JkaW5hdGVzRnJvbURCKCRpdGVtSWQpewoJCWdsb2JhbCAkZ2FsbGVyeTsKCgkgICAgJHF1ZXJ5ID0gJwoJICAgICAgIFNFTEVDVCAKCQkgICAgICAgW21hcE1hcDo6dmFsdWVdCgkJICAgRlJPTSBbbWFwTWFwXQogICAgICAgICAgIFdIRVJFIFttYXBNYXA6OmZpZWxkXSA9IFwnR1BTXCcgQU5EIFttYXBNYXA6Oml0ZW1JZF0gPSA/CgkgICAgJzsKCSAgICAKCSAgICBsaXN0ICgkcmV0LCAkcmVzdWx0cykgPSAkZ2FsbGVyeS0+c2VhcmNoKCRxdWVyeSwgYXJyYXkoJGl0ZW1JZCksIGFycmF5KCkpOwoJCWlmICgkcmV0IG9yICRyZXN1bHRzLT5yZXN1bHRDb3VudCgpID09IDApIHsKCQkJcmV0dXJuIG51bGw7CgkJfQoJCQoJCSRDb29yZGluYXRlcyA9ICRyZXN1bHRzLT5uZXh0UmVzdWx0KCk7CgoJCXJldHVybiAkQ29vcmRpbmF0ZXNbMF07CgkJCgl9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4gYXJyYXkgd2l0aCBpdGVtIHByb3BlcnRpZXMgdG8gYmUgdXNlZCB0byBkaXNwbGF5IG9uIHRoZSBtYXAKICAgICAqCiAgICAgKiBAcGFyYW0gJGl0ZW1JZCBpbnRlZ2VyIHRoZSBpdGVtSWQKICAgICAqIEByZXR1cm4gYXJyYXkgIEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICoJCQkJICBudWxsIG9yIGFycmF5IG9mIGl0ZW0gcHJvcGVydGllcwogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gX2dldFByb3BlcnRpZXNGb3JJdGVtSWQoJGl0ZW1JZCl7CiAgICAJCiAgICAJZ2xvYmFsICRnYWxsZXJ5OwogICAgCSRndXJsID0mICRnYWxsZXJ5LT5nZXRVcmxHZW5lcmF0b3IoKTsKICAgIAkkcHJvcGVydGllcyA9IGFycmF5KCk7CiAgICAJCiAgICAJbGlzdCAoJHJldCwgJG1hcFRodW1iSGVpZ2h0KSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnVGh1bWJIZWlnaHQnKTsKICAgIAlpZiAoJHJldCkgewoJCQlyZXR1cm4gYXJyYXkgKCRyZXQsIG51bGwpOwoJCX0KICAgIAkKCQkvKiBHZXQgdGhlIGl0ZW0gKi8KCQlsaXN0ICgkcmV0LCAkaXRlbSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZEVudGl0aWVzQnlJZCgkaXRlbUlkKTsKCQlpZiAoJHJldCkgewoJCQlyZXR1cm4gYXJyYXkoJHJldCwgbnVsbCk7CgkJfQoJCS8qIEdldCB0aGUgdGh1bWJuYWlsIGluZm9ybWF0aW9uICovCgkJbGlzdCAoJHJldCwgJHRodW1iKSA9IEdhbGxlcnlDb3JlQXBpOjpmZXRjaFRodW1ibmFpbHNCeUl0ZW1JZHMoYXJyYXkoJGl0ZW1JZCkpOwoJCWlmICgkcmV0KSB7CgkJCXJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKCQl9CgkJLyogR2V0IHRoZSBkYXRlIGZvcm1hdCAqLwoJCWxpc3QgKCRyZXQsICRkYXRlRm9ybWF0KSA9IAoJCQlHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnY29yZScsICdmb3JtYXQuZGF0ZScpOwoJCWlmICgkcmV0KSB7CgkJCXJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKCQl9CgkJCgkJJGl0ZW1UaXRsZSA9ICRpdGVtLT5nZXRUaXRsZSgpOwoJCQoJCSRwcm9wZXJ0aWVzID0gYXJyYXkoCgkJICAgICd0eXBlJyA9PiAkaXRlbS0+Z2V0RW50aXR5VHlwZSgpLAoJCSAgICAndGl0bGUnID0+IChlbXB0eSgkaXRlbVRpdGxlKSkgPyAKCQkJCXByZWdfcmVwbGFjZShhcnJheSgnL1xuLycsICcvXHIvJyksIGFycmF5KCcnLCAnJyksICRpdGVtLT5nZXRQYXRoQ29tcG9uZW50KCkpIDogCgkJCQlwcmVnX3JlcGxhY2UoYXJyYXkoJy9cbi8nLCAnL1xyLycpLCBhcnJheSgnJywgJycpLCAkaXRlbVRpdGxlKSwKCQkgICAgJ3N1bW1hcnknID0+IHByZWdfcmVwbGFjZShhcnJheSgnL1xuLycsICcvXHIvJyksIGFycmF5KCcnLCAnJyksCgkJCQkkaXRlbS0+Z2V0U3VtbWFyeSgpKSwKCQkgICAgJ2Rlc2NyaXB0aW9uJyA9PiBwcmVnX3JlcGxhY2UoYXJyYXkoJy9cbi8nLCAnL1xyLycpLCBhcnJheSgnJywgJycpLAoJCQkJJGl0ZW0tPmdldERlc2NyaXB0aW9uKCkpLAoJCSAgICAnY3JlYXRlZCcgPT4gc3RyZnRpbWUoJGRhdGVGb3JtYXQsICRpdGVtLT5nZXRPcmlnaW5hdGlvblRpbWVzdGFtcCgpKQoJCSk7CgkJCgkJaWYgKGFycmF5X2tleV9leGlzdHMoJGl0ZW1JZCwgJHRodW1iKSkgewoJCQkvKiBBZGQgdGhlIFRodW1ibmFpbCBJbmZvIHRvIHRoZSBhcnJheSAqLwoJCQkkcG9pbnRUaHVtYiA9ICR0aHVtYlskaXRlbUlkXTsKCQkJJHByb3BlcnRpZXNbJ3RodW1iTGluayddID0gCgkJCQkkZ3VybC0+Z2VuZXJhdGVVcmwoCgkJCQkJYXJyYXkoJ3ZpZXcnID0+ICdjb3JlLkRvd25sb2FkSXRlbScsCgkJCQkJICAgICAgJ2l0ZW1JZCcgPT4gJHBvaW50VGh1bWItPmdldElkKCksCgkJCQkJICAgICAgJ3NlcmlhbE51bWJlcicgPT4gJHBvaW50VGh1bWItPmdldFNlcmlhbE51bWJlcigpKSwKCQkJCQkgICAgICBhcnJheSgnZm9yY2VGdWxsVXJsJyA9PiB0cnVlKSk7CgkJCSRwcm9wZXJ0aWVzWyd0aHVtYldpZHRoJ10gPSAkcG9pbnRUaHVtYi0+Z2V0V2lkdGgoKTsKCQkJJHByb3BlcnRpZXNbJ3RodW1iSGVpZ2h0J10gPSAkcG9pbnRUaHVtYi0+Z2V0SGVpZ2h0KCk7CgkJfSBlbHNlIHsKCQkJLyogTm8gVGh1bWJuYWlsIEluZm9ybWF0aW9uICovCgkJCSRwcm9wZXJ0aWVzWyd0aHVtYkxpbmsnXSA9ICcnOwoJCQkkcHJvcGVydGllc1sndGh1bWJXaWR0aCddID0gJzEwMCc7CgkJCSRwcm9wZXJ0aWVzWyd0aHVtYkhlaWdodCddID0gJzEwMCc7CgkJfQoJCQoJCS8qIFNldCB0aGUgVGh1bWJuYWlsIEJhciBTaXplcyAqLwoJICAgICRwcm9wZXJ0aWVzWyd0aHVtYmJhcldpZHRoJ10gPSAKCQkJJG1hcFRodW1iSGVpZ2h0ICogJHByb3BlcnRpZXNbJ3RodW1iV2lkdGgnXSAvICRwcm9wZXJ0aWVzWyd0aHVtYkhlaWdodCddOwoJICAgICRwcm9wZXJ0aWVzWyd0aHVtYmJhckhlaWdodCddID0gCgkJCSRtYXBUaHVtYkhlaWdodCAqICRwcm9wZXJ0aWVzWyd0aHVtYkhlaWdodCddIC8gJHByb3BlcnRpZXNbJ3RodW1iV2lkdGgnXTsKCgkJCgkJcmV0dXJuIGFycmF5IChudWxsLCAkcHJvcGVydGllcyk7Cgl9CiAgICAKCiAgICAvKioKICAgICAqIEdldCBhbGwgdGhlIEdQUyBjb29yZGluYXRlcyBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlCiAgICAgKgogICAgICogQHBhcmFtIG5vbmUKICAgICAqIEByZXR1cm4gYXJyYXkgIEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICoJCQkJICBudWxsIG9yIGFycmF5IG9mIGl0ZW1zCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBnZXRHUFNJdGVtcygpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCSRndXJsID0mICRnYWxsZXJ5LT5nZXRVcmxHZW5lcmF0b3IoKTsKCgkvKiBPbmx5IHJldHJpZXZlIGl0ZW1zIHRoYXQgd2UgaGF2ZSBwZXJtaXNzaW9ucyB0byAqLwoJbGlzdCAoJHJldCwgJGFjbElkcykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hBY2Nlc3NMaXN0SWRzKCdjb3JlLnZpZXcnLCAkZ2FsbGVyeS0+Z2V0QWN0aXZlVXNlcklkKCkpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkgKCRyZXQsIG51bGwpOwoJfQoJaWYgKGVtcHR5KCRhY2xJZHMpKSB7CgkgICAgcmV0dXJuIGFycmF5ICgkcmV0LCBudWxsKTsKCX0KCSRhY2xNYXJrZXJzID0gR2FsbGVyeVV0aWxpdGllczo6bWFrZU1hcmtlcnMoY291bnQoJGFjbElkcykpOwoKCSRxdWVyeSA9ICcKCVNFTEVDVCAKCSAgW21hcE1hcDo6aXRlbUlkXSwgW21hcE1hcDo6dmFsdWVdCglGUk9NIAoJICBbbWFwTWFwXSwgW0dhbGxlcnlBY2Nlc3NTdWJzY3JpYmVyTWFwXQoJV0hFUkUgCgkgIFttYXBNYXA6OmZpZWxkXSA9IFwnR1BTXCcgCglBTkQKCSAgU1VCU1RSSU5HKFttYXBNYXA6Oml0ZW1JZF0sMSwxKSA8PiBcJ0dcJwoJQU5ECgkgIFtHYWxsZXJ5QWNjZXNzU3Vic2NyaWJlck1hcDo6aXRlbUlkXSA9IFttYXBNYXA6Oml0ZW1JZF0KCUFORAoJICBbR2FsbGVyeUFjY2Vzc1N1YnNjcmliZXJNYXA6OmFjY2Vzc0xpc3RJZF0gaW4gKCcgLiAkYWNsTWFya2VycyAuICcpCgknOwoKCWxpc3QgKCRyZXQsICRyZXN1bHRzKSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5LCAkYWNsSWRzLCBhcnJheSgpKTsKCWlmICgkcmV0IG9yICRyZXN1bHRzLT5yZXN1bHRDb3VudCgpID09IDApIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldCwgYXJyYXkoKSk7Cgl9CgoJJGl0ZW1zID0gYXJyYXkoKTsKCgl3aGlsZSAoJHJlc3VsdCA9ICRyZXN1bHRzLT5uZXh0UmVzdWx0KCkpIHsKCgkgICAgbGlzdCAoJHJldCwgJGl0ZW0pID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRFbnRpdGllc0J5SWQoJHJlc3VsdFswXSk7CQkJCgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gYXJyYXkoJHJldCwgbnVsbCk7CgkgICAgfQoKCSAgICAkZXhwbG9kZWRDb29yZCA9IGV4cGxvZGUoJywnLCAkcmVzdWx0WzFdKTsKCSAgICAkaXRlbUxpbmsgPSAkZ3VybC0+Z2VuZXJhdGVVcmwoCgkJICAgIGFycmF5KCd2aWV3JyA9PiAnY29yZS5TaG93SXRlbScsICdpdGVtSWQnID0+ICRyZXN1bHRbMF0pLAoJCSAgICBhcnJheSgnZm9yY2VGdWxsVXJsJyA9PiB0cnVlKSk7CgoJICAgICRpdGVtc1skcmVzdWx0WzBdXSA9IGFycmF5KAoJCSdpZCcgPT4gJHJlc3VsdFswXSwKCQknZ3BzJyA9PiAkcmVzdWx0WzFdLAoJCSdjb2xvcicgPT4gbWFwSGVscGVyOjpnZXRJdGVtQ29sb3IoJHJlc3VsdFswXSksCgkJJ3pvb21sZXZlbCcgPT4gbWFwSGVscGVyOjpnZXRJdGVtWm9vbUxldmVsKCRyZXN1bHRbMF0pLAoJCSdpdGVtTGluaycgPT4gJGl0ZW1MaW5rLAoJCSdwYXJlbnRJZCcgPT4gJGl0ZW0tPmdldFBhcmVudElkKCksCgkJJ2hhc0NoaWxkJyA9PiBmYWxzZSwKCQkncG9zeCcgPT4gJGV4cGxvZGVkQ29vcmRbMF0sCgkJJ3Bvc3knID0+ICRleHBsb2RlZENvb3JkWzFdCgkJKTsKCgkgICAgbGlzdCAoJHJldCwgJGFkZGl0aW9uYWxQcm9wZXJ0aWVzKSA9IG1hcEhlbHBlcjo6X2dldFByb3BlcnRpZXNGb3JJdGVtSWQoJHJlc3VsdFswXSk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gYXJyYXkgKCRyZXQsIG51bGwpOwoJICAgIH0KCgkgICAgJGl0ZW1zWyRyZXN1bHRbMF1dID0gJGl0ZW1zWyRyZXN1bHRbMF1dICsgJGFkZGl0aW9uYWxQcm9wZXJ0aWVzOwoJfQoKCXJldHVybiBhcnJheShudWxsLCAkaXRlbXMpOwogICAgfQoJCiAgICAvKioKICAgICAqIFByaXZhdGUgZnVuY3Rpb24gdG8gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhlIEdyb3VwcyBmcm9tIHRoZSBEYXRhYmFzZSBzYXZlCiAgICAgKgogICAgICogQHBhcmFtIG5vbmUKICAgICAqIEByZXR1cm4gYXJyYXkgIEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICoJCQkJICBudWxsIG9yIGFycmF5IG9mIEdyb3VwcwogICAgICoKICAgICAqLwoKCWZ1bmN0aW9uIF9nZXRHcm91cHNGcm9tREIoKSAgewoJCWdsb2JhbCAkZ2FsbGVyeTsKCQkkZ3VybCA9JiAkZ2FsbGVyeS0+Z2V0VXJsR2VuZXJhdG9yKCk7CgkJJHBsYXRmb3JtID0mICRnYWxsZXJ5LT5nZXRQbGF0Zm9ybSgpOwoJCQoJCSRncm91cHMgPSBhcnJheSgpOwoJCQoJCS8qIEdldCB0aGUgZGF0ZSBmb3JtYXQgKi8KCQlsaXN0ICgkcmV0LCAkZGF0ZUZvcm1hdCkgPSAKCQkJR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ2NvcmUnLCAnZm9ybWF0LmRhdGUnKTsKCQlpZiAoJHJldCkgewoJCQlyZXR1cm4gYXJyYXkoJHJldCwgbnVsbCk7CgkJfQoKCQlsaXN0ICgkcmV0LCAkdG1wcGFyYW0pID0KICAJCSAgICBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ01hcEdyb3VwcycpOwogIAkJaWYgKCRyZXQpIHsKCQkJcmV0dXJuIGFycmF5ICgkcmV0LCBudWxsKTsKCQl9CgkJJHRtcGdyb3VwcyA9IGV4cGxvZGUoJ3wnLCAkdG1wcGFyYW0pOwoKCQlmb3JlYWNoICgkdG1wZ3JvdXBzIGFzICR0bXBncm91cCkgewoJCSAgICAkZ3JvdXBpbmZvID0gZXhwbG9kZSgnYCcsICR0bXBncm91cCk7CgoJCQkkdGh1bWJwaWMgPSBzdWJzdHIoZGlybmFtZShfX0ZJTEVfXyksMCwtNykuICdpbWFnZXMvZ3JvdXBzLycgLiAkZ3JvdXBpbmZvWzRdOwoJCQkkVHNpemVzID0gJHBsYXRmb3JtLT5nZXRpbWFnZXNpemUoJHRodW1icGljKTsKCQkJaWYgKCRUc2l6ZXMgIT09IGZhbHNlKSB7CgkJCQkkdGh1bWJXaWR0aCA9ICRUc2l6ZXNbMF07CgkJCQkkdGh1bWJIZWlnaHQgPSAkVHNpemVzWzFdOwoJCQkJJHRodW1iYmFyV2lkdGggPSAoJFRzaXplc1sxXSAhPSAwKSA/ICRUc2l6ZXNbMF0gLyAkVHNpemVzWzFdIDogMTsKCQkJCSR0aHVtYmJhckhlaWdodCA9ICgkVHNpemVzWzBdICE9IDApID8gJFRzaXplc1sxXSAvICRUc2l6ZXNbMF0gOiAxOwoJCQl9IGVsc2UgewoJCQkJJHRodW1iV2lkdGggPSAkdGh1bWJIZWlnaHQgPSAkdGh1bWJiYXJXaWR0aCA9ICR0aHVtYmJhckhlaWdodCA9IDE7CgkJCX0KCQkJCgkJCSRncm91cHNbIkciLiRncm91cGluZm9bMF1dID0gYXJyYXkoCgkJICAgICAgICAnaWQnID0+ICJHIi4kZ3JvdXBpbmZvWzBdLAoJCSAgICAgICAgJ3RpdGxlJyA9PiAkZ3JvdXBpbmZvWzFdLAoJCSAgICAgICAgJ2Rlc2NyaXB0aW9uJyA9PiAkZ3JvdXBpbmZvWzNdLAoJCSAgICAgICAgJ3N1bW1hcnknID0+ICRncm91cGluZm9bMl0sCgkJICAgICAgICAnY3JlYXRlZCcgPT4gc3RyZnRpbWUoJGRhdGVGb3JtYXQsICRncm91cGluZm9bNV0pLAoJCSAgICAgICAgJ3RodW1iTGluaycgPT4gR2FsbGVyeVV0aWxpdGllczo6Y29udmVydFBhdGhUb1VybCgkdGh1bWJwaWMsCgkJCQkJYXJyYXkoJ2ZvcmNlRnVsbFVybCcgPT4gdHJ1ZSwgJ2ZvcmNlRGlyZWN0JyA9PiB0cnVlKSksCgkJCQkndGh1bWJXaWR0aCcgPT4gJHRodW1iV2lkdGgsCgkJCQkndGh1bWJIZWlnaHQnID0+ICR0aHVtYkhlaWdodCwKCQkJCSd0aHVtYmJhcldpZHRoJyA9PiAkdGh1bWJiYXJXaWR0aCwKCQkJCSd0aHVtYmJhckhlaWdodCcgPT4gJHRodW1iYmFySGVpZ2h0LAoJCQkpOwoJCQkKCQl9CgkJCgkJcmV0dXJuIGFycmF5IChudWxsLCAkZ3JvdXBzKTsKCX0KCQoKICAgIC8qKgogICAgICogR2V0IGFsbCB0aGUgR1BTIGNvb3JkaW5hdGVzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UKICAgICAqCiAgICAgKiBAcGFyYW0gbm9uZQogICAgICogQHJldHVybiBhcnJheSAgR2FsbGVyeVN0YXR1cyBhIHN0YXR1cyBjb2RlCiAgICAgKgkJCQkgIG51bGwgb3IgYXJyYXkgb2YgaXRlbXMKICAgICAqCiAgICAgKi8KCWZ1bmN0aW9uIGdldEdQU0dyb3VwcygpIHsKCQlnbG9iYWwgJGdhbGxlcnk7CgkJJGd1cmwgPSYgJGdhbGxlcnktPmdldFVybEdlbmVyYXRvcigpOwoJCQkJCiAgICAJbGlzdCAoJHJldCwgJG1hcFRodW1iSGVpZ2h0KSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnVGh1bWJIZWlnaHQnKTsKICAgIAlpZiAoJHJldCkgewoJCQlyZXR1cm4gYXJyYXkgKCRyZXQsIG51bGwpOwoJCX0KCgkgICAgJHF1ZXJ5ID0gJwoJICAgICAgIFNFTEVDVCAKCQkJICAgW21hcE1hcDo6aXRlbUlkXSwgW21hcE1hcDo6dmFsdWVdCgkJICAgRlJPTSAKCQkgICAgICAgW21hcE1hcF0KICAgICAgICAgICBXSEVSRQoJCSAgICAgICBbbWFwTWFwOjpmaWVsZF0gPSBcJ0dQU1wnIAoJCSAgIEFORCAKCQkgICAgICAgU1VCU1RSSU5HKFttYXBNYXA6Oml0ZW1JZF0sMSwxKSA9IFwnR1wnCgkgICAgJzsKCSAgICAKCSAgICBsaXN0ICgkcmV0LCAkcmVzdWx0cykgPSAkZ2FsbGVyeS0+c2VhcmNoKCRxdWVyeSwgYXJyYXkoKSwgYXJyYXkoKSk7CgkJaWYgKCRyZXQgb3IgJHJlc3VsdHMtPnJlc3VsdENvdW50KCkgPT0gMCkgewoJCQlyZXR1cm4gYXJyYXkoJHJldCwgYXJyYXkoKSk7CgkJfQoJCQoJCSRpdGVtcyA9IGFycmF5KCk7CgkJbGlzdCAoJHJldCwgJGdyb3Vwc2luZm9zKSA9IG1hcEhlbHBlcjo6X2dldEdyb3Vwc0Zyb21EQigpOwoJCWlmICgkcmV0KSB7CgkJCXJldHVybiBhcnJheSAoJHJldCwgbnVsbCk7CgkJfQoKCQl3aGlsZSAoJHJlc3VsdCA9ICRyZXN1bHRzLT5uZXh0UmVzdWx0KCkpIHsKCQkJCQkJCgkJCSRleHBsb2RlZENvb3JkID0gZXhwbG9kZSgiLCIsICRyZXN1bHRbMV0pOwoJCQkkaXRlbUxpbmsgPSAkZ3VybC0+Z2VuZXJhdGVVcmwoCgkJCSAgICBhcnJheSgndmlldycgPT4gJ21hcC5TaG93TWFwJywgJ0dyb3VwJyA9PiAkcmVzdWx0WzBdKSwKCQkJICAgIGFycmF5KCdmb3JjZUZ1bGxVcmwnID0+IHRydWUpKTsKCQkJCgkJCSRpdGVtc1skcmVzdWx0WzBdXSA9IGFycmF5KAoJCQkgICAgJ2lkJyA9PiAkcmVzdWx0WzBdLAoJCQkJJ2dwcycgPT4gJHJlc3VsdFsxXSwKCQkJCSdjb2xvcicgPT4gbWFwSGVscGVyOjpnZXRJdGVtQ29sb3IoJHJlc3VsdFswXSksCgkJCQknem9vbWxldmVsJyA9PiBtYXBIZWxwZXI6OmdldEl0ZW1ab29tTGV2ZWwoJHJlc3VsdFswXSksCgkJCQknaXRlbUxpbmsnID0+ICRpdGVtTGluaywKCQkJICAgICd0aXRsZScgPT4gJGdyb3Vwc2luZm9zWyRyZXN1bHRbMF1dWyd0aXRsZSddLAoJCQkgICAgJ2Rlc2NyaXB0aW9uJyA9PiAkZ3JvdXBzaW5mb3NbJHJlc3VsdFswXV1bJ2Rlc2NyaXB0aW9uJ10sCgkJCSAgICAnc3VtbWFyeScgPT4gJGdyb3Vwc2luZm9zWyRyZXN1bHRbMF1dWydzdW1tYXJ5J10sCgkJCSAgICAnY3JlYXRlZCcgPT4gJGdyb3Vwc2luZm9zWyRyZXN1bHRbMF1dWydjcmVhdGVkJ10sCgkJCSAgICAndGh1bWJMaW5rJyA9PiAkZ3JvdXBzaW5mb3NbJHJlc3VsdFswXV1bJ3RodW1iTGluayddLAoJCQkJJ3RodW1iV2lkdGgnID0+ICRncm91cHNpbmZvc1skcmVzdWx0WzBdXVsndGh1bWJXaWR0aCddLAoJCQkJJ3RodW1iSGVpZ2h0JyA9PiAkZ3JvdXBzaW5mb3NbJHJlc3VsdFswXV1bJ3RodW1iSGVpZ2h0J10sCgkJCQkndGh1bWJiYXJXaWR0aCcgPT4gJGdyb3Vwc2luZm9zWyRyZXN1bHRbMF1dWyd0aHVtYmJhcldpZHRoJ10gKiAkbWFwVGh1bWJIZWlnaHQsCgkJCQkndGh1bWJiYXJIZWlnaHQnID0+ICRncm91cHNpbmZvc1skcmVzdWx0WzBdXVsndGh1bWJiYXJIZWlnaHQnXSAqICRtYXBUaHVtYkhlaWdodCwKCQkJCSdyZWdyb3VwU2hvd0hpZ2gnID0+IDAsCgkJCQkncmVncm91cFNob3dMb3cnID0+IDE5LAoJCQkJJ3BhcmVudERpc3QnID0+IC0xLAoJCQkJJ2hhc0hpZGRlbkNoaWxkJyA9PiBmYWxzZSwKCQkJCSdncm91cCcgPT4gLTEsCgkJCQkndHlwZScgPT4gJ0dvb2dsZU1hcEdyb3VwJywKCQkJCSdkaXNwbGF5JyA9PiB0cnVlLAoJCQkJJ3Bvc3gnID0+ICRleHBsb2RlZENvb3JkWzBdLAoJCQkJJ3Bvc3knID0+ICRleHBsb2RlZENvb3JkWzFdCgkJCSk7CgkJfQoJCQoJCXJldHVybiBhcnJheShudWxsLCAkaXRlbXMpOwoJfQoKICAgIC8qKgogICAgICogQ3JlYXRlIHRoZSBwYXJlbnRzZXF1ZW5jZSBhcnJheQogICAgICoKICAgICAqIEBwYXJhbSAkaXRlbXMgYXJyYXkgdGhlIGl0ZW1zIGZvciB3aGljaCB0byBnZXQgdGhlIHBhcmVudCBzZXF1ZW5jZQogICAgICoJCSAgJExldmVsRmlsdGVyUm9vdCB0aGUgbGV2ZWwgdG8gZmlsdGVyIHRoZSByb290IGF0CgkgKgkJICAkTGV2ZWxGaWx0ZXJBbGwgdGhlIGxldmVsIHRvIGZpbHRlciBhbGwgb3RoZXIgaXRlbXMKCSAqCQkgICRhbGJ1bWZpbHRlcgl0cnVlIHRvIGVuYWJsZSBhbGJ1bWZpbHRlcnMKICAgICAqIEByZXR1cm4gYXJyYXkgIEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICoJCQkJICBudWxsIG9yIGFycmF5IG9mIHBhcmVudHNlcXVlbmNlcwogICAgICoKICAgICAqLwoJZnVuY3Rpb24gZ2V0UGFyZW50U2VxdWVuY2UoJGl0ZW1zLCAkTGV2ZWxGaWx0ZXJSb290LCAkTGV2ZWxGaWx0ZXJBbGwsICRhbGJ1bWZpbHRlcikgewoJCSRwYXJlbnRzID0gYXJyYXkoKTsKCQkKCQkvKiBHcmFiIHRoZSBJRCBvZiB0aGUgcm9vdCBhbGJ1bSAqLwoJCWxpc3QgKCRyZXQsICRUaGVSb290KSA9CgkJCUdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdjb3JlJywgJ2lkLnJvb3RBbGJ1bScpOwoJCWlmICgkcmV0KSB7CgkJCXJldHVybiBhcnJheSAoJHJldCwgbnVsbCk7CgkJfQoJCQkKCQlmb3JlYWNoICgkaXRlbXMgYXMgJGlkID0+ICRjdXJyZW50aXRlbSkgewoJCSAgICBpZiAoJGlkICE9ICRUaGVSb290KSB7CgkJCSAgICAvKiByZXRyaWV2ZSB0aGUgInBhcmVudCIgc2VxdWVuY2UgZm9yIGVhY2ggaXRlbSAoZXhjZXB0IGdyb3VwcyBhbmQgcm9vdCBhbGJ1bSkgKi8KCQkJICAgIGxpc3QgKCRyZXQsICRwYXJlbnRzWyRpZF0pID0KCQkJCSAgICBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hQYXJlbnRTZXF1ZW5jZSgkaWQpOwoJCSAgICAgICAgaWYgKCRyZXQpIHsKCQkJCQlyZXR1cm4gYXJyYXkgKCRyZXQsIG51bGwpOwoJCQkJfQoJCQkgICAgbGlzdCAoJHJldCwgJGFsYnVtaW5mb3MpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRFbnRpdGllc0J5SWQoJHBhcmVudHNbJGlkXSk7CgkJICAgICAgICBpZiAoJHJldCkgewoJCQkJCXJldHVybiBhcnJheSAoJHJldCwgbnVsbCk7CgkJCQl9CgogICAJCQkgICAgbGlzdCAoJHJldCwgJFJvb3RBbGJ1bU5hbWUpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRFbnRpdGllc0J5SWQoJFRoZVJvb3QpOwoJCSAgICAgICAgaWYgKCRyZXQpIHsKCQkJCQlyZXR1cm4gYXJyYXkgKCRyZXQsIG51bGwpOwoJCQkJfQogCSAJCSAgICBpZiAoJExldmVsRmlsdGVyUm9vdCA9PSAxIGFuZCAkYWxidW1maWx0ZXIgPT0gJFJvb3RBbGJ1bU5hbWUtPmdldFRpdGxlKCkpIHsKCQkJICAgICAgICAkZnJvbUxldmVsID0gY291bnQoJHBhcmVudHNbJGlkXSkgLSAxOwoJICAgICAJCX0gZWxzZSBpZiAoJExldmVsRmlsdGVyQWxsID4gMCkgewoJCQkgICAgICAgICRmcm9tTGV2ZWwgPSAoY291bnQoJHBhcmVudHNbJGlkXSkgLSAkTGV2ZWxGaWx0ZXJBbGwgPj0gMCkKCQkJCQkgICAgPyBjb3VudCgkcGFyZW50c1skaWRdKSAtICRMZXZlbEZpbHRlckFsbCA6IDA7CgkJCSAgICB9IGVsc2UgewoJCQkgICAgJGZyb21MZXZlbCA9IDA7CgkJCSAgICB9CgoJCQkgICAgLyogZ2V0IGl0ZW0gYW5kIHBhcmVudCBpZCAqLwoJCSAgICAgICAgbGlzdCgkcmV0LCAkaXRlbSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZEVudGl0aWVzQnlJZCgkaWQpOwoJCSAgICAgICAgaWYgKCRyZXQpIHsKCQkJCQlyZXR1cm4gYXJyYXkgKCRyZXQsIG51bGwpOwoJCQkJfQoJCQkJJHBhcmVudElkID0gJHBhcmVudHNbJGlkXVtjb3VudCgkcGFyZW50c1skaWRdKS0xXTsKCgkJCQlmb3IgKCRpID0gJGZyb21MZXZlbDsgJGkgPCBjb3VudCgkcGFyZW50c1skaWRdKTsgJGkrKykgewoJCQkgICAgCSRwYXJlbnRzWyRpZF1bJGldID0gKCRhbGJ1bWluZm9zWyRpXS0+Z2V0VGl0bGUoKSAhPSAiIikgPyAkYWxidW1pbmZvc1skaV0tPmdldFRpdGxlKCk6ICRhbGJ1bWluZm9zWyRpXS0+Z2V0UGF0aENvbXBvbmVudCgpOwoJCQkJfQoJCQkJaWYgKCRmcm9tTGV2ZWwgPiAwKSB7CgkJCSAgICAJZm9yICgkaSA9IDA7ICRpIDwgJGZyb21MZXZlbDsgJGkrKykgewoJCQkJCQlhcnJheV9zaGlmdCgkcGFyZW50c1skaWRdKTsKCQkJICAgIAl9CgkJCQl9CgkJCX0JCQkKCQl9CgoJCXJldHVybiBhcnJheShudWxsLCAkcGFyZW50cyk7Cgl9CgoKICAgIC8qKgogICAgICogR2V0IHRoZSBkaXN0YW5jZSBpbiBwaXhlbCBiZXR3ZWVuIDIgY29vcmRpbmF0ZXMgZm9yIGEgc3BlY2lmaWMgem9vbSBsZXZlbAogICAgICoKICAgICAqIEBwYXJhbSAkcG9pbnQxIHN0cmluZyB0aGUgY29vcmRpbmF0ZXMgZm9yIHRoZSBmaXJzdCBwb2ludCAobGF0LCBsb24pCiAgICAgKgkJICAkcG9pbnQyIHN0cmluZyB0aGUgY29vcmRpbmF0ZXMgZm9yIHRoZSBzZWNvbmQgcG9pbnQgKGxhdCwgbG9uKQoJICoJCSAgJHpvb21sZXZlCXRoZSB6b29tbGV2ZWwgYXQgd2hpY2ggdGhlIGNhbGN1bGF0aW9uIGlzIG1hZGUKICAgICAqIEByZXR1cm4gZmxvdCBkaXN0YW5jZSBpbiBwaXhlbHMKICAgICAqCiAgICAgKi8KCiAgICBmdW5jdGlvbiBQaXhlbERpc3RhbmNlKCRwb2ludDEsICRwb2ludDIsICR6b29tbGV2ZWwpIHsKICAgIAkKCQkkdG1wMSA9IGV4cGxvZGUoJywnLCAkcG9pbnQxKTsKCQkkdG1wMiA9IGV4cGxvZGUoJywnLCAkcG9pbnQyKTsKCQkkZiA9IE1fUEkgLyAxODA7CgkJJGQgPSBhY29zKHNpbigkdG1wMVswXSAqICRmKSAqIHNpbigkdG1wMlswXSAqICRmKSArIGNvcygkdG1wMVswXSAqICRmKSAqIGNvcygkdG1wMlswXSAqICRmKQoJCQkqIGNvcygkdG1wMlsxXSAqICRmIC0gJHRtcDFbMV0gKiAkZikpICogNjM3MTsKCQkkZmFjdCA9ICg0MDA3NCAqIChjb3MoJHRtcDJbMF0gKiAkZikpKSAvIDI1NiAvIHBvdygyLCAkem9vbWxldmVsKTsKCQkkcGl4ZGlzdCA9IHJvdW5kKCRkIC8gJGZhY3QpOwoJCQoJCXJldHVybiAkcGl4ZGlzdDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBpdGVtcyBmb3IgYSBzcGVjaWZpYyBhbGJ1bSAKICAgICAqCiAgICAgKiBAcGFyYW0gJGl0ZW1JZCBpbnRlZ2VyIHRoZSBJRCBvZiB0aGUgaXRlbSwgbnVsbCB3aWxsIHVzZWQgdGhlIHJvb3QgYWxidW0KICAgICAqIEByZXR1cm4gYXJyYXkgR2FsbGVyeVN0YXR1cwogICAgICoJCQkJICRjb3VudCwgYW4gaW50ZWdlcgogICAgICoKICAgICAqLwogICAgCiAgICBmdW5jdGlvbiBnZXRDb3VudEl0ZW1XaXRoQ29vcmRzICgkaXRlbUlkID0gbnVsbCkgewoJZ2xvYmFsICRnYWxsZXJ5OwoJJHVzZXJJZCA9ICRnYWxsZXJ5LT5nZXRBY3RpdmVVc2VySWQoKTsKICAgICAgICAKCWlmICgkaXRlbUlkID09IG51bGwpIHsKCSAgICBsaXN0ICgkcmV0LCAkaXRlbUlkKSA9IAoJCUdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdjb3JlJywgJ2lkLnJvb3RBbGJ1bScpOwoJICAgIGlmICgkcmV0KSB7CiAgICAJCXJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKCSAgICB9Cgl9CgoJaWYgKGVtcHR5KCRpdGVtSWQpKXsKCSAgICByZXR1cm4gYXJyYXkoR2FsbGVyeUNvcmVBcGk6OmVycm9yKEVSUk9SX0JBRF9QQVJBTUVURVIsIF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwpOwoJfQogICAgICAgIAoJbGlzdCgkcmV0LCAkaXRlbSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZEVudGl0aWVzQnlJZCgkaXRlbUlkKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJfQogICAgICAgIAoJbGlzdCAoJHJldCwgJGl0ZW1JZHMpID0gR2FsbGVyeUNvcmVBcGk6OmZldGNoRGVzY2VuZGVudEl0ZW1JZHMoJGl0ZW0sIG51bGwsIG51bGwsICdjb3JlLnZpZXcnKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJfQoJCQoJCglpZiAoZW1wdHkoJGl0ZW1JZHMpKXsKCSAgICByZXR1cm4gYXJyYXkgKG51bGwsIDApOwoJfQoJCgkkcXVlcnk9JwoJU0VMRUNUCgkgY291bnQoW21hcE1hcDo6aXRlbUlkXSkKCUZST00KCSBbbWFwTWFwXQoJV0hFUkUKCSBbbWFwTWFwOjppdGVtSWRdIElOICgnIC4gR2FsbGVyeVV0aWxpdGllczo6bWFrZU1hcmtlcnMoY291bnQoJGl0ZW1JZHMpKSAuICcpCgknOwoKCWxpc3QgKCRyZXQsICRzZWFyY2hSZXN1bHRzKSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5LCAkaXRlbUlkcyk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKCX0KCQkKCSRjb3VudCA9ICRzZWFyY2hSZXN1bHRzLT5uZXh0UmVzdWx0KCk7CgoJcmV0dXJuIGFycmF5KG51bGwsICRjb3VudFswXSk7CiAgICB9CgoKICAgIC8qKgogICAgICogR2V0IHRoZSByb3V0ZXMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZQogICAgICogQWxzbyBjcmVhdGVzIHRoZSBOdW1iZXJlZCBtYXJrZXJzIGlmIG5lZWRlZAogICAgICoKICAgICAqIEBwYXJhbSAJJFBvaW50cyB0aGUgYXJyYXkgb2YgcG9pbnQgc2hvd24gb24gdGhlIG1hcAogICAgICoJCQkkRW5hYmxlUm91dGVOdW1iZXJpbmcgYm9vbGVhbiB0byB1c2Ugcm91dGUgbnVtYmVyaW5nIG9yIG5vdAogICAgICoJCQkkTWFya2VyU2V0cyBsaXN0IG9mIE1hcmtlciBTZXRzIHNlbGVjdGVkIHBlciBpdGVtIHR5cGUKICAgICAqCQkJJERlZmF1bHRDb2xvciBsaXN0IG9mIERlZmF1bHQgY29sb3JzIHBlciBpdGVtIHR5cGUKICAgICAqIEByZXR1cm4gYXJyYXkgR2FsbGVyeVN0YXR1cwogICAgICoJCQkJICRyb3V0ZXMgYXJyYXkgb2Ygcm91dGVzCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBnZXRSb3V0ZXMgKCRQb2ludHMsICRFbmFibGVSb3V0ZU51bWJlcmluZyA9IGZhbHNlLCAkTWFya2VyU2V0cywgJERlZmF1bHRDb2xvcnMpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCSRwbGF0Zm9ybSA9JiAkZ2FsbGVyeS0+Z2V0UGxhdGZvcm0oKTsKCQkKCWxpc3QgKCRyZXQsICREQlJvdXRlcykgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ1JvdXRlcycpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkgKCRyZXQsIG51bGwpOwoJfQoJbGlzdCAoJHJldCwgJGltcGF0aCkgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnaW1hZ2VtYWdpY2snLCAncGF0aCcpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldCwgbnVsbCk7Cgl9CglpZiAoZW1wdHkoJGltcGF0aCkpIHsKCSAgICAkRW5hYmxlUm91dGVOdW1iZXJpbmcgPSBmYWxzZTsKCX0KCgkkbWFwTW9kQmFzZURpciA9IHN1YnN0cihkaXJuYW1lKF9fRklMRV9fKSwwLC03KTsKCQkKCSRhbGxyb3V0ZXBhcmFtID0gYXJyYXkoKTsKCSRyb3V0ZWl0ZW1zID0gYXJyYXkoKTsKCSRyb3V0ZXMgPSBleHBsb2RlKCd8JywgJERCUm91dGVzKTsKCWZvcmVhY2ggKCRyb3V0ZXMgYXMgJHJvdXRlKSB7CgkgICAgJHRtcHBvaW50ID0gYXJyYXkoKTsKCSAgICAkdG1wcGFyYW0gPSBhcnJheSgpOwoJICAgICRyYXdpdGVtID0gYXJyYXkoKTsKCSAgICAkcm91dGVpbmZvID0gZXhwbG9kZSgnYCcsICRyb3V0ZSk7CgkgICAgZm9yICgkaSA9IDA7ICRpIDwgNzsgJGkrKykgewoJCSR0bXBwYXJhbVtdID0gJHJvdXRlaW5mb1skaV07CgkgICAgfQoKCSAgICBHYWxsZXJ5VXRpbGl0aWVzOjpndWFyYW50ZWVEaXJFeGlzdHMoJG1hcE1vZEJhc2VEaXIgLiAnaW1hZ2VzL3JvdXRlcy8nIC4gJHJvdXRlaW5mb1sxXSk7CgoJICAgICRuYiA9IDA7CgoJICAgIGZvciAoJGkgPSA3OyAkaSA8IGNvdW50KCRyb3V0ZWluZm8pOyAkaSsrKSB7CgkJaWYgKGluX2FycmF5KCRyb3V0ZWluZm9bJGldLCBhcnJheV9rZXlzKCRQb2ludHMpKSkgewoJCSAgICAkcmF3aXRlbVtdID0gJHJvdXRlaW5mb1skaV07CgkJICAgICRuYisrOwoJCSAgICBpZiAoJEVuYWJsZVJvdXRlTnVtYmVyaW5nKSB7CgkJCS8qIEdldCBpbmZvIG9uIHRoZSBpdGVtIHRvIGNyZWF0ZSB0aGUgInJvdXRlIG51bWVyaWNhbCBtYXJrZXIiICovCgkJCWxpc3QgKCRyZXQsICRpdGVtKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkRW50aXRpZXNCeUlkKCRyb3V0ZWluZm9bJGldKTsKCQkJaWYgKCRyZXQpIHsKCQkJICAgIHJldHVybiBhcnJheSAoJHJldCwgbnVsbCk7CgkJCX0KCQkJJHR5cGUgPSAkaXRlbS0+Z2V0RW50aXR5VHlwZSgpOwoJCQkkaW1hZ2VuYW1lID0gJE1hcmtlclNldHNbJHR5cGVdOwoJCQkkZGVmYXVsdGNvbG9yID0gJERlZmF1bHRDb2xvcnNbJHR5cGVdOwoJCQkkY29sb3IgPSBtYXBIZWxwZXI6OmdldEl0ZW1Db2xvcigkcm91dGVpbmZvWyRpXSk7CgkJCSRjb2xvciA9ICgkY29sb3IgPT0gImRlZmF1bHQiKSA/ICRkZWZhdWx0Y29sb3IgOiAkY29sb3I7CgoJCQkkc291cmNlaW1hZ2UgPSAkbWFwTW9kQmFzZURpciAuICdpbWFnZXMvbWFya2Vycy8nIC4gJGltYWdlbmFtZQoJCQkJCS4gJy9tYXJrZXJfJyAuIHN0cnRvdXBwZXIoJGNvbG9yKSAuICcucG5nJzsKCQkJJGRlc3RpbmF0aW9uID0gJG1hcE1vZEJhc2VEaXIgLiAnaW1hZ2VzL3JvdXRlcy8nIC4gJHJvdXRlaW5mb1sxXSAuICcvJwoJCQkJCS4gJG5iIC4gJy1tYXJrZXJfJyAuIHN0cnRvdXBwZXIoJGNvbG9yKSAuICcucG5nJzsKCQkKCQkJJHBpY3NpemUgPSAkcGxhdGZvcm0tPmdldGltYWdlc2l6ZSgkc291cmNlaW1hZ2UpOwoJCQoJCQkkeHBvcyA9ICRwaWNzaXplWzBdIC8gMiAtIDM7CgkJCSR5cG9zID0gJHBpY3NpemVbMV0gLyAyICsgMjsKCQkJLyoqCgkJCSAqIEB0b2RvIENoYW5nZSB0aGlzIHRvIHVzZSBJbWFnZU1hZ2ljaydzICJhbm5vdGF0ZSIgaW5zdGVhZCBvZiAKCQkJICogImRyYXcgdGV4dCIuCgkJCSAqIENhbid0IGRvIGl0IHlldCBiZWNhdXNlIEltYWdlTWFnaWNrIDYgaXMgcmVxdWlyZWQuCgkJCSAqLwoJCQkvKiBJbWFnZU1hZ2ljaydzIGNvbnZlcnQgaXMgcGlja3kgYWJvdXQgdGhlIGZvcm1hdCB1c2VkIGZvciB0aGUKCQkJICogLWRyYXcgdGV4dCBhcmd1bWVudCBhbmQgaG93IGl0J3MgcXVvdGVkLCBzbyBub3RlIHRoZSBleHRyYSBkb3VibGUKCQkJICogcXVvdGVzIHVzZWQgYmVmb3JlIHRleHQgYW5kIGFmdGVyIHRoZSB0ZXh0IHRvIGJlIGRyYXduICgkbmIpLCBhbmQgCgkJCSAqIHRoZSBzaW5nbGUgcXVvdGVzIGFyb3VuZCB0aGUgdGV4dCB0byBiZSBkcmF3biBvbiB0aGUgaW1hZ2UuCgkJCSAqLwoJCQkkY29tbWFuZCA9IGFycmF5KCRpbXBhdGggLiAnY29udmVydCcsCgkJCQkJICRzb3VyY2VpbWFnZSwKCQkJCQkgJy1kcmF3JywKCQkJCQkgJyJ0ZXh0JywKCQkJCQkgJHhwb3MgLiAnLCcgLiAkeXBvcywKCQkJCQkgJ1wnJyAuICRuYiAuICdcJyInLAoJCQkJCSAkZGVzdGluYXRpb24pOwoJCQkkcmV0dXJuc3R1ZmYgPSAkcGxhdGZvcm0tPmV4ZWMoYXJyYXkoJGNvbW1hbmQpKTsKCQkJCQkJCgkJICAgIH0KCQkgICAgLyoKCQkgICAgICogZm9yIGVhY2ggaXRlbSwgZ3JhYiB0aGUgY29vcmRpbmF0ZXMgYW5kIHN0b3JlIHRoZW0gaW4gYW4gYXJyYXkuCgkJICAgICAqLwoJCSAgICAkdG1wcG9pbnRbXSA9IGV4cGxvZGUoJywnLCBtYXBIZWxwZXI6OmdldEl0ZW1HUFNDb29yZGluYXRlc0Zyb21EQigkcm91dGVpbmZvWyRpXSkpOwoJCX0KCSAgICB9CgkgICAgJHJvdXRlaXRlbXNbJHJvdXRlaW5mb1sxXV0gPSAkcmF3aXRlbTsKCSAgICAkdG1wcGFyYW1bXSA9ICR0bXBwb2ludDsKCSAgICAkYWxscm91dGVwYXJhbVtdID0gJHRtcHBhcmFtOwoJfQoJcmV0dXJuIGFycmF5IChudWxsLCAkYWxscm91dGVwYXJhbSwgJHJvdXRlaXRlbXMpOwogICAgfQp9Cj8+Cg==');
expand_3537250845($outputDir, 'classes/mapInterface_1_0.class', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA1IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBFcmljIERhbmllbCA8ZWhkYW5pZWxAZ21haWwuY29tPgogKiBAdmVyc2lvbiAkUmV2aXNpb246IDEyNTMgJAogKgogKiBiYXNlZCBvbiBhIGNvZGUgZnJvbSBBbGFuIEhhcmRlciA8YWxhbi5oYXJkZXJAc3VuLmNvbT4KICovCgovKioKICoKICogQHBhY2thZ2UgbWFwCiAqIEBzdWJwYWNrYWdlIENsYXNzZXMKICovCmNsYXNzIG1hcEludGVyZmFjZV8xXzAgewoKICAgIC8qKgogICAgICogQ3JlYXRlIG5ldyBjdXN0b20gZmllbGRzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5IG9mIHN0cmluZyBmaWVsZCBuYW1lcwogICAgICogQHBhcmFtIGludCBpZCBvZiBjb250YWluZXI7IGZvciBhbGJ1bS1zcGVjaWZpYyBzZXR0aW5ncwogICAgICogQHJldHVybiBhcnJheShvYmplY3QgR2FsbGVyeVN0YXR1cyBhIHN0YXR1cyBjb2RlLAogICAgICogICAgICAgICAgICAgICBhcnJheShzdHJpbmcgZHVwbGljYXRlIGZpZWxkIG5hbWVzKSkKICAgICAqLwogICAgZnVuY3Rpb24gY3JlYXRlbWFwcygkZmllbGROYW1lcywgJGNvbnRhaW5lcklkPTApIHsKCXJldHVybiBhcnJheShHYWxsZXJ5Q29yZUFwaTo6ZXJyb3IoRVJST1JfVU5JTVBMRU1FTlRFRCwgX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgY3VzdG9tIGZpZWxkIHZhbHVlcyBmb3IgYW4gaXRlbTsgb3ZlcndyaXRlcyBhbGwgZXhpc3RpbmcgZmllbGQgdmFsdWVzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgaXRlbSBpZAogICAgICogQHBhcmFtIGFycmF5KGZpZWxkPT52YWx1ZSwgLi4pIGZpZWxkIHZhbHVlcwogICAgICogQHJldHVybiBvYmplY3QgR2FsbGVyeVN0YXR1cyBhIHN0YXR1cyBjb2RlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldG1hcFZhbHVlcygkaXRlbUlkLCAkZGF0YSkgewoJcmV0dXJuIEdhbGxlcnlDb3JlQXBpOjplcnJvcihFUlJPUl9VTklNUExFTUVOVEVELCBfX0ZJTEVfXywgX19MSU5FX18pOwogICAgfQp9Cj8+Cg==');
expand_3537250845($outputDir, 'classes/mapSearch.class', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBhdXRob3IgRXJpYyBEYW5pZWwgPGVoZGFuaWVsQGdtYWlsLmNvbT4KICogQHZlcnNpb24gJFJldmlzaW9uOiAxMjUzICQKICoKICogYmFzZWQgb24gYSBjb2RlIGZyb20gQWxhbiBIYXJkZXIgPGFsYW4uaGFyZGVyQHN1bi5jb20+CiAqLwovKgogKiBSZXF1aXJlZCBjbGFzc2VzCiAqLwpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvc2VhcmNoL2NsYXNzZXMvR2FsbGVyeVNlYXJjaEludGVyZmFjZV8xXzAuY2xhc3MnKTsKCi8qKgogKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzZWFyY2ggbW9kdWxlJ3MgU2VhcmNoSW50ZXJmYWNlXzFfMAogKgogKiBAcGFja2FnZSBtYXAKICogQHN1YnBhY2thZ2UgQ2xhc3NlcwogKgogKi8KY2xhc3MgbWFwU2VhcmNoIGV4dGVuZHMgR2FsbGVyeVNlYXJjaEludGVyZmFjZV8xXzAgewoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5U2VhcmNoSW50ZXJmYWNlXzFfMDo6Z2V0U2VhcmNoTW9kdWxlSW5mbygpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFNlYXJjaE1vZHVsZUluZm8oKSB7CglnbG9iYWwgJGdhbGxlcnk7CgoJbGlzdCAoJHJldCwgJG1vZHVsZSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZFBsdWdpbignbW9kdWxlJywgJ21hcCcpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJfQoKCSRpbmZvID0gYXJyYXkoJ25hbWUnID0+ICRnYWxsZXJ5LT5pMThuKCdHb29nbGUgTWFwJyksCgkJICAgICAgJ2Rlc2NyaXB0aW9uJyA9PiAkZ2FsbGVyeS0+aTE4bignR29vZ2xlIE1hcCBNb2R1bGUnKSwKCQkgICAgICAnb3B0aW9ucycgPT4gYXJyYXkoJ21hcCcgPT4gYXJyYXkoJ2Rlc2NyaXB0aW9uJyA9PgoJCQkJCQkJJGdhbGxlcnktPmkxOG4oJ1NlYXJjaCBHb29nbGUgTWFwIEZpZWxkcycpLAoJCQkJCQkJJ2VuYWJsZWQnID0+IDEpKSk7CglyZXR1cm4gYXJyYXkobnVsbCwgJGluZm8pOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5U2VhcmNoSW50ZXJmYWNlXzFfMDo6c2VhcmNoKCkKICAgICAqLwogICAgZnVuY3Rpb24gc2VhcmNoKCRvcHRpb25zLCAkY3JpdGVyaWEsICRvZmZzZXQgPSAwLCAkY291bnQgPSAtMSkgewoJZ2xvYmFsICRnYWxsZXJ5OwoKCWxpc3QgKCRyZXQsICRhY2xJZHMpID0KCSAgICBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hBY2Nlc3NMaXN0SWRzKCdjb3JlLnZpZXcnLCAkZ2FsbGVyeS0+Z2V0QWN0aXZlVXNlcklkKCkpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJfQoJaWYgKGVtcHR5KCRhY2xJZHMpKSB7CgkgICAgcmV0dXJuIGFycmF5KG51bGwsIGFycmF5KCdzdGFydCcgPT4gMCwgJ2VuZCcgPT4gJzAnLCAKCQkJCSAgICAgJ2NvdW50JyA9PiAwLCAncmVzdWx0cycgPT4gYXJyYXkoKSkpOwoJfQoJJGFjbE1hcmtlcnMgPSBHYWxsZXJ5VXRpbGl0aWVzOjptYWtlTWFya2Vycyhjb3VudCgkYWNsSWRzKSk7CgoJJGNvdW50UXVlcnkgPSBzcHJpbnRmKCcKCVNFTEVDVAoJICBDT1VOVChbbWFwTWFwOjppdGVtSWRdKQoJRlJPTQoJICBbbWFwTWFwXSwgW0dhbGxlcnlBY2Nlc3NTdWJzY3JpYmVyTWFwXQoJV0hFUkUKCSAgW21hcE1hcDo6aXRlbUlkXSA9ICBbR2FsbGVyeUFjY2Vzc1N1YnNjcmliZXJNYXA6Oml0ZW1JZF0gCgkgIEFORAoJICBbR2FsbGVyeUFjY2Vzc1N1YnNjcmliZXJNYXA6OmFjY2Vzc0xpc3RJZF0gSU4gKCVzKQoJICBBTkQKCSAgW21hcE1hcDo6dmFsdWVdIExJS0UgPwoJJywgJGFjbE1hcmtlcnMpOwoKCSRxdWVyeSA9IHNwcmludGYoJwoJU0VMRUNUCgkgIFttYXBNYXA6Oml0ZW1JZF0sCgkgIFttYXBNYXA6OmZpZWxkXSwKCSAgW21hcE1hcDo6dmFsdWVdCglGUk9NCgkgIFttYXBNYXBdLCBbR2FsbGVyeUFjY2Vzc1N1YnNjcmliZXJNYXBdCglXSEVSRQoJICBbbWFwTWFwOjppdGVtSWRdID0gW0dhbGxlcnlBY2Nlc3NTdWJzY3JpYmVyTWFwOjppdGVtSWRdCgkgIEFORAoJICBbR2FsbGVyeUFjY2Vzc1N1YnNjcmliZXJNYXA6OmFjY2Vzc0xpc3RJZF0gSU4gKCVzKQoJICBBTkQKCSAgW21hcE1hcDo6dmFsdWVdIExJS0UgPwoJT1JERVIgQlkKCSAgW21hcE1hcDo6aXRlbUlkXSBERVNDCgknLCAkYWNsTWFya2Vycyk7CgoJJGRhdGEgPSAkYWNsSWRzOwoJJGRhdGFbXSA9ICclJyAuICRjcml0ZXJpYSAuICclJzsKCgkvKiBGaW5kIHRoZSB0b3RhbCAqLwoJbGlzdCAoJHJldCwgJHJlc3VsdHMpID0gJGdhbGxlcnktPnNlYXJjaCgkY291bnRRdWVyeSwgJGRhdGEpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pOwoJfQoJJHJlc3VsdCA9ICRyZXN1bHRzLT5uZXh0UmVzdWx0KCk7CgkkbnVtUm93cyA9IChpbnQpJHJlc3VsdFswXTsKCglsaXN0ICgkcmV0LCAkcmVzdWx0cykgPSAkZ2FsbGVyeS0+c2VhcmNoKCRxdWVyeSwgJGRhdGEsCgkJYXJyYXkoJ2xpbWl0JyA9PiBhcnJheSgnb2Zmc2V0JyA9PiAkb2Zmc2V0LCAnY291bnQnID0+ICRjb3VudCkpKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCX0KCgkkc2VhcmNoUmVzdWx0cyA9IGFycmF5KCk7Cgl3aGlsZSAoJHJlc3VsdCA9ICRyZXN1bHRzLT5uZXh0UmVzdWx0KCkpIHsKCSAgICAkc2VhcmNoUmVzdWx0c1tdID0gYXJyYXkoJ2l0ZW1JZCcgPT4gKGludCkkcmVzdWx0WzBdLAoJCSAgICAnZmllbGRzJyA9PiBhcnJheShhcnJheSgna2V5JyA9PiAkcmVzdWx0WzFdLCAndmFsdWUnID0+ICRyZXN1bHRbMl0pKSk7Cgl9CgoJJGRhdGEgPSBhcnJheSgnc3RhcnQnID0+ICgkbnVtUm93cyA9PSAwKSA/IDAgOiAkb2Zmc2V0ICsgMSwKCQkgICAgICAnZW5kJyA9PiAoJG51bVJvd3MgPT0gMCkgPyAwIDogJG9mZnNldCArIHNpemVvZigkc2VhcmNoUmVzdWx0cyksCgkJICAgICAgJ2NvdW50JyA9PiAkbnVtUm93cywKCQkgICAgICAncmVzdWx0cycgPT4gJHNlYXJjaFJlc3VsdHMpOwoJcmV0dXJuIGFycmF5KG51bGwsICRkYXRhKTsKICAgIH0KfQo/Pgo=');
expand_3537250845($outputDir, 'images/arrow.png', 'iVBORw0KGgoAAAANSUhEUgAAAA0AAAAeCAYAAAD3qZRJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAATklEQVR42mL8z4AC0LgogBHGYGIgA4xqGtU0pDSxEMgOWLMN2c5jpIefGJnQs/KgCXJGdE2MtLAJZxHGSE2bGAlpYqRrkDPis5ksmwADACuxBEaog/PTAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/basemarkers/GroupMarker.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gERFSU3l9VYqwAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAACkUlEQVR42uWUv28SYRzGn/fgChQQyoBFpdUYE1GTmjg0HYwmJl10cNPF+Ac4uXXSxMlJZ+usiYkxNcQ4kJAusgiDKKJSKFjPVlMr9I7jfnCcA0I57u49pKM33b3fu8/7PN/nvS/w313ErqCfmLsCf/AmfIEFsBNRdLQWJLEIUXgNrc0hNvsYAMBVFkkpn+p95zaBjp06jEj0CYLhC4YCw7AIhOYRCM3TFLqHYEcwHc/A44uP7FHXDxn27a8fPUkQiT41wORWDd+r11H7HEL1kx/fypdQ335plMR6rRWynssIhs/3nxV5C1tfF8h6cXPg/TSAtJ44dxsH4w96WqyBk4Ebhp13ftwbgu0lWcw91AkzBTcbh9au2gGNzVakV9Tj8fHtHXoorCdmqHQ6nKn/F6/q1E1WVwgzGNdQ3TvOwWYGQtgwVFzuxP6AovDGUPH5r1lZQu3LjImysXaWrK4QI1CWVMNLU9Fb+vEzc+aD3Nk2bVT+8M4cCsOUwdfrCIbDXcsuH6Zn0rqbXYIsvQB0Hi73aQRCS6P9em0lB5AqmrsJ+A94uslPRBCbXQaw/M89JKV8CiL/DKxHhNDgqV8JuxJkiaOH0lOpSEV4/YCqtmyB3kkVjV9rjkBSyqcgiVlo6g4IaVNVery7+MndBVdZtFcIAJq2CVXhqDC5Ve7+TdrvweFqDWwrOUhilj4DOyI0rQFFTtN72LMNAFLzPUTBHtpqPieVQsER2LfdnUD2QK3tHMrevMve/zvCzPNQaGTQ5JNW6uwVAkCTT0KR18cfDuYkk+PUbIF2lpxqDFV/k0+OtDYyUG4lITQyhkBorXACWlmj2XVWCAB8/ZHl/dhAVcn1batKbt9AUikUekE42QWAP+yRGWG9kbBaAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/basemarkers/group.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAaCAYAAAC3g3x9AAAAB3RJTUUH1QsRCjM2JxRTqAAAAAlwSFlzAAAnEAAAJxABlGlRGQAAAARnQU1BAACxjwv8YQUAAAMnSURBVHjapVVLTFNBFD2lrXzLR0FEwIJiANEYFdRgZKHEzwYXYnBh3OBCETUxRrswEE3cKviLBqOJxgWJC+NKXGgiC1mgUjC2IMivRSiCiJWWlna89/W9ArXFNt7kpG/uzJy599w7UxUis1LCUUKePP5KaCa0RsgDFeEmQSRqNGJPSpooJyRrtIJ9hHsEdSSEd3hjTWauGC09IMTewxJsuw6Kc1nrFNIm5eR/pWQm3Dq9Ohe3i0oAzxzg9fpmo6IoLi3Om9pxw9LHnn0KIf82Es5QSijWpYCWov3XFKbm3NCoVOjduR/62Lh5Mr8YURhzzyK/7RV+zrnvqxekVEsp4VnRdtSsWY/jGXpUr8qGSwi8m56E3etBxfL0IGoIJGij0TI5hgHnjE1DnjJCjZTSBjklj0damhYdi4bCYoy6nHgw0g8jRZyqXYa1sfGoWpmJ3Ukr/KROr7THy5lVxavVMOQULNaHl9H3WdKn2WYFS6EjuIUXT8eGUfaxFSd7OuChlE32abyf/sFbzBxhzuaEZGSxPnJkitV+MeKutR8sRZ0+H+kUGdu4cwbXBnvQSIXwkPw2l4MOEm6aesKEHilcIRaRvZ2akMiWkoLTk6vLZiB0su9TB2ljpLChnu/N5nELQkkhfVP1L9FckkbLHiPhutRJHCZNOw29XRQkRanydRJVDH4pAlvFJzDSKdItumQejShuJjQRLryksld/biePL0o1aRNMisCWkavrWUio9OHVR6NDaBjsBiiNjXRyMCn8RgcvrG4gIVs94U39gAlWhx2VqRnSBQ2Uwnc7fN+Gvi5/dZWpwKPNs17viQS6nzOUyovv39Dr+I0hwqH0bEk33y4NTpk/UD9aeHSR8HwJXdCij4kThXE6DrCTcIXFupG3SYjyI/TKVIqHBduUF6YRYdgxeTHjsux7ze+ghZ4re1mFyIyO4TkHQRsOoZ7gkglLZN8OHtflFIqmgq3KYaZwyJRC9ROovEgMIcUE4XG4hGxtQSIIJsVfpgnh5+YKvB78R+SWdWuJlHCAEB/gGyZYCfwIdkeSbqRShBVhKAsmxX8RBpNikf0BoO1eNjqq60MAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/basemarkers/infobulle.png', 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAjCAYAAADmOUiuAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAD6klEQVR4nGL8//8/w2AGAAHENNAOIAQAAogFmcPIyMgFpGyBOBSIjYFYEIj/0NgNzED8GYhvAPFOIF4FjNXPMEmAAGIARTEMA0E5ED8A4u9A/BuI/0IdSEv8F2rXDyB+C8TzgJgN5iaAAIKHIDD0vIFUFBDLI3tPi5uXwZhHgIGTmZnioEIH3//+ZTj75QPDta+fQUkN5BZ2IPYC4jggngNSAxBAjLBMAnTgQiAVDlXEYMMvzLBY05hBgYOL6g5DB7e/f2GIu36O4cSndzCho0B32YAYAAGE7MAzQEof5BOQoy6aODHwsbBgNZAW4NOfPwxqp3YzvPz1E8T9DHQXH4gBEEDIuZgN5E4Qo0BGma6OAwGQfflAe6GAE8YACCBkB8ILRHM+QTo5CxVY8AnBmP9gDIAAwloOcjHRN/RgQJiFDUMMIIAGfUENEECD3oEAATToHQgQQIPegQABNOgdCBBAg96BAAE06B0IEECD3oEAATToHQgQQMgOZIQxvv2jdRsVO3j75xeGWwACCN2BYIkjH98xDAQ48vEthhhAACE78D0DpHXL0PP4NqzZQzfw5Od3hqlP74GYoEbLa5g4QAAhO/AQEH8EMUCOszh3kGHt62dYDQO13agF9r5/zdD04AaDydkDsEABxfNemDxAACE3WBWA1HIgtkA3xJhXAM5+8/sXwzOgbyeo6jJkSSkR5Yid714xTHpyl+Hlb9RY+f3/H8OlL5/QlT8H4gCgu06BOAABhOxAUGgaAHEZA6TpTxD8dwjAKfcW6JH5Lx4xTAA67OnP70R5BAjOAnEDEO8CugucYwACiBG94w50qB6QMgNiKSAWZYCmSwZIizseiLkk2Nj/PLX0YGKCeAoFgPoVk57c+7f2zTPGX//+MSJJgYJvERB/Q9MC6o2BgvElEF8FumcvsiRAAGE4EM2xoH4BLMHNBeIIEOOdjfcXQRZWHpi67//+Mix+8Zhh1vMHDGc/f0A3BhQSu4B4DRBvYIB0MVEciNIPRgMAAYS36QzU+Anq0DSY486aOP6DOe4b0GHND24yTAPmvk9/UTIOiHMA6qltMHPIAQABhNJxx4aBABTloGj5v8/A+j8w3YHxCm1TkCQyBiWFc0AcCcR8hMwlFgMEECHHgXpXt0AO6FPR+f/Jxuf/Y0v3/wIsrMgOewjEpdR0FDIGCCBCDgT18P87CIj8n6ii91+anRPmqC8MkCEKBVo4ChkDBBDOTAItF0EDOuxIwqAEfw6ox5LsNEUiAAggfA6EhdQbBkgxsB+otoBeDoMBgADCmouBjtvPABlpEgZiXSAGlR0K9HMWAgAEEN5ycDAAgAADACHyXfiqzf45AAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/basemarkers/infobulle_markers.png', 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAjCAYAAADmOUiuAAAAB3RJTUUH1QsRCicU3NrFGQAAAAlwSFlzAABOIAAATiABFn2Z3gAAAARnQU1BAACxjwv8YQUAAAVMSURBVHja7VhrbFNlGH57Wbt2666wLRuVsQ0GbG7DDZFsJKCJEKeJP1TUZPjDxNtMIEZlMVG86w9iQB0heCGAP9BIYvxhRIMiwUvItjDILjLYOrfO3S9d13Zb2+Pznp5TTs+60RbH/OGTPMn53nP6fc/3vt/3fu9Xov9xc9Co2mZwC/gwWA6mgt5F1qADJ8F28DT4ldQOi72gDXSDs6BPEriY9EljecAR8HPQIAvSK8RVg4+DK5WK1ydYqDwxhUw63b/uOrfPR43OcWqdmtRKWozgfeAu8FP+RhniY+BO6SOqSk6nE+vKKTfeHNLpbxOjdHKwl666p8R2nimBdmbkIE6aqOxb0L+MDreTdrU10R+OUdn0K0tQC2wAS3kmLKq54m5K0l93sADu7rhEH9k7RXuFJZV42g2T4zTunRW/icb+dHYu1a8uJZ0mIMHh9dKaCz/SwMw0SWswSR1igyx4z4r8EHGM5zua6ZC9i57LWUWvrSykTHiCMeRx0TvdV+hg7zV6ID2LvijeFLHdJwj0SeGG4CR2Y9xXOlu5aZLHVS6sZ8AMULsvdy2tMAa/oXPjI1QLgbXZq6i+aCMl8nr0++FWgRLiDLQjw0qOGQ8d+bubKpNSKd9ojsh+qK+LKpPTKF+arBf9Hev/S3wE3+YHbbjFa9aGeu/LoV5KgKg6CCefNyBOBj8jZHvxLlkfR6eG+mKzA+l6wxwtYQWqYUNYSrGTV5jMoeKCC9RPmfD4BksK9Uy7Y7eHQUQCeSd6/D4xpPNDEL/Rzsn90dpjEFickEQXsfuanQ6oDZMPtTpqw7tGxxitNSfGbo9VYE2WlQzotO7qZTgRXtQoZi091127zA2qybwtNvvNCFxnttD+/CL6fnSAnmxtED2g9Maz7U307XA/vV9QTCWJSZHb89Zft88DPUWI2pw8GpydoTdt7eg0mfbwjoY3jyI3Hka6EMdm72JnRmJ/0VpAL4A3QkQelPEGRG1LWUb7bG1kx/E0BcGvdrXQHdiNW6O0vwvvRYKIPSjjvbwiuqvpFzpit5E13kT2aQ8dXlNGy+OMUdnjNJH5JmqBm3Ai3JuWgYzfjYSuo9uxw6txlPHSj8YeKZTTCG5Nl3/hGrUm00rdSN5trkl6BJWJJka7GiPemTla1ALFF+cnRmkhcKkkh2h7WkbMdjXOT4ws6MExClS3tL+nQy57wsKKYyrHGE8WnZ4KTZaY7Ur04sirRylHgcpuKJzAc+AEP7A4XtjKg1wJJyrhTIMRg5pCyjItknA0dsaZsSExdVU0npWdwnE+I79Xfs0l9j3gMm5wgfBQywXxRTnSgoxhpIo+zHY1jqhUzm0qpKIiUZ+vp0cHqRMVtQuFBguRMYui4RIfn6Hg9fVxOIFciNWCL1Og9A+iEeewGrhHiItfDa7Gp1CSjWAiR1HbHUBhaldULOH6Ug4Fvg5elA3hNlQJeCeYDS4naV1SoOJ+AjRnGYxe++YdWoRuTjLje8WHvZ3+U8N9mhm/X9k/x+846FL9hM9NduMA2KIM73wCleCDUs45n4GPijGoqnYivMEyxI2y6UR/DypnWzgP8Zr6Afwa/IYCV0y1wHnvwTdK1PICeUoW11ixzS+Lc0HYW7Y/cVfpJIcvJHdy46w0qe8U/SwKOOQcFuGnskpB2PqgyJNFGzkdKMlLoQl8TPL8LQHfnK6wgA8KigVH1f1Cz+btQoo+TimsG3zpVopSgm/4AioS4WBBiYA8JotyUuAvitylECWDB/dQaBh5J/6+lKKUYEG8u7jqbAYPLLUgJX4GhyWRuSAfJWVLLeo/iX8AN2KaKzOMg40AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/basemarkers/man.png', 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAmCAYAAADeB1slAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAEqElEQVR4nGL8//8/Ay0BQAAx0dR0IAAIIBZ0gQOXL6PwhaSkGPRFRByA9P6vr14xCAkIMKw8enQy469feX9//YKr+/LgAYN3UBCGBQABhGEBDDjo6oJpRkZGCyC1/+frNwwF8qoMpz68Y/BWV8+9+v//ClkGhmMgNQevX2dgYMIeGAABhCHKISICxnAFTEwtvMwsDF+svRg6ZNUZ9ulaMnwGik8vKiqEqXm3ezfDr0ePsFoAEEAMoEhGxj25uSh8Ph6e/8pcPP//OwTAsQwXFyhl/EdWN7O5GcMsEAYIIAwfCBkbo/A/ffnS+Pznd4YPf36D+SD6x09w2Jsiq4tKTMTqAYAAwoyDf//QRfq//f3raHz+kN3Tb18YfgJdxcnCCgqlJ8iKPn74wMAjLY1hHEAAYfUWNG/Ig6wTExP7z8nB8YOZmfk/MMYhGCjOCMRA2hOm/smVK1jNAQggRmwZDZhywoEGLmH995/FQlySYb8GSmgw3PvxneH4xzcMsdfPMoRr6DCsuHFFAWjOQ2xBBBBAWC2QFxH9JfzrN+s5Y0dselCA443TDIysrH/2PbrPik0eIIBQIhnocgEg/v/ry2eiDAcBkO9ev37FAtTHhk0eIIDQU5ECiLhh6gLm6F4+itNgz+unGN7+huTkX5BQ4MemDiCAUCwABtcFsEoWVgbrhxcZrr5/i9OCT4xMDKZnDzD8BRr+9i84CVtjUwcQQDgLO1ZQ1mdkxGkBGxMjw31g/mACqhFkBBuD1bsAAYTTguvAgg0fEGQFxik7OwPICXos4PjF6hqAAMJpwavPwLzEhjXewIARyYffgT4Bgh/Y1AEEEE4L1MXFcRoOAiIsiFQJTepYfQAQQDgtYAG57vdvnBZ8+vsHZDKEw8wMtgebOoAAwmkBOKv//YvTgr/AOGAEOuA5018GFl5BnBYABBDWCofxwAYIzcUFF+M6vJmBiZub4YuRE5gvycPHwAvkK+7bzMACiSusrgEIIGw+gGXhVf+/fYMLcrOyMXxH4l/8+Y2Bk4dny08g++uvXx5AH39jwAIAAgjDAqDCA0AMijBwzrzw5SNY/B8wBP4hBdnDmzcYXj57NhekFoh3YjMcBAACCF+rApwqFDggwcTGxIwiaczBDaKu4tEPBgABhM8CPRAhAE2OIuwcKJLsTLhzOTIACCB8FlwFVvjwlCHAxo4i+QxPEkYGAAGEz4Jf0LgAg4+/f6FI3v4FzrgfCVkAEED4LLBArozeAGsxBiQ+O6Qd9JOQBQABhM+C7SgK8ZSs+ABAAOGzQJYRyVAuUGQj8T8CkywfPz9BWwECCG8yZYS0IMCAFUvT8NvXr4TMZwAIIHwWfGVmYYFb8PUPaqrhA+bsP3/+EGz7AwQQPgs+/P71Cy7//c8fFElQJAMTAcFUBBBA+CwQQw4iblANhhxMRHZcAAIInwXANjkDo8KJXWDOX1A5BMSSx3eA+d///sGtEwkABBC+pqMVEP8BJs//ICzEzvEfKvYfGDz/edk5fiCrP3vyJFZzAAIIZwcEKAnqXIAaVKJcXFwsb79+fQ4SB/I5ufj55d6/f/+UGA8ABBDWpiM1AUCAAQBqxO3z/zASQgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/basemarkers/marker.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHESURBVHjajJI/LENRFMZP+96j2qIkNFENwkAMQiIREhIMGBg6MBhFgsFGBxazSVKRGAxisFktFolIhPgXOqBSJIikVKWt6ru+8/peQhU9ye/l3XO+795z/5joe7SCIVCjj6/AOthO05EJLABRIMuis6hEdAOHrAjOgSUgfTX4uDDuqhL3rT1CdHk0Htt6xWR5tWFaJt3VDhYnyqrIV99MdgkpVYVEkE3JoZ5SN4XfY7QbDjVBt2PGZ9AGkbeylij5kRIbwf8fCZpGrVBWOONhQ2WD3UHledbvYiOESs7cPGrMd/DIzYZkTE1qLfwegjQNpmTD6eHrMx1FwtiR9FNrlugctf1wiEd+NqyikZj34gSLYBWT6cthp/69lyeUECLBWp7yCTxfRN/6gtE3GnC6tb61kGQa8x/Q2sMtj6bAhtHDHi9+GHnpcKCtlmInZjfTyl2AZgNnXJ8Hc5l2t8U3fYsLi7T3C1euhU9iHyiGIH2X/riqjtglhYLxKFq54dwo5/84QtqssFhFnTWfZz/W39mfMay/HWaGsogK8K4bmrMx8N0EAG6SCtKLcgYDX8IDiOmmfw0cId1I2RqugS1T4VOAAQDkdp2PrH9XuAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/basemarkers/marker_SGREEN.png', 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMASURBVDiNtZNNaFxVFMd/533NR6xR2zgtBikutAXrrq2YoEWKXSgICYhgEboQRRQXamrFhWQhNGMWgtsujItI22g1oAYEWzuhUqGWUmvRUBGNJKZanTYz89597x4XfR1ex/lAoQf+HLjv/n/nvnPPFVXlRoRzQ6iA1+nD0Ji/hKXU1e2wPD9h1v8nMJbSW89NkdiYWA2JNcQ2zYnBJCHvTo93LNwZDCBC5cIhwrhOGNeu067Nz/T4mf8ZSvdL7w5WbQtQlF7T1PPEqopVi4pFXHBcsGKQHs5mj4fH/C/VsqNZ0ZOGVZvHsbi+4lpFFSLHECeruK7guhIOveqbax5xOF7Zbx6+DmwTnSytHdz2wuh4MfALqI3zViziKaKKq0JkQ2rxn3g5cH3h+d2v5dTClfplDn72XuNKo3qgWSTbq6FX/JfvvnPL+FO7XiqeWzlGNVrBSkhEjUvmV+rxpWbzRF3WeANsLY3w4dx0fXll8Z3KhNnXtsfzb5vJhcUz05+cmGrcc/v9BIFPxCpL4Xka/IWXd/DzDn7OoVAosG3wcY5+M9dYXln8Yr4cv9718jb8lDx76vuvTp44OxdvGhjmYvgz6sR4geDlroJzhYDtd4zw3Y+n4/M/nF3w++IntGVMpN3YDO+VNSL+6UcfGt14y4aCc+qPI7gBeIGDFwhb+h+juhTpzMeHLoZq7js5oUutjLZDU9mvlx1jdnx6dObvejXh3rU7Qa+O3l3FB5DVPo7MflQzVna2g3YEAxyb1F+s4ZHZz2dWC8kAG/u2UvI3sU4388Hh6XoURU9+XQ7PdPK3bUU2hsa80ZuK/VO7R/YUgyDPwdn3a8u///ZmpWzK3Xw9wQAP7vX3rbtt/Rv9N98qCxfOHT5ejp/u5fkXWERcIAf4qTzA2/6iOyEeg98eSPaEVQyQADFgUkVAdG06mmARcYB8Cm3NuUwRzYDCVI1MrquqaT5pVbUikqRGmyrJnEzSNc2sJy17o3Rv+x6LiABuRl4qJ4XEmYIJkLQ+kH8AJW58zDA7aJ8AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/basemarkers/markerpoint.png', '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');
expand_3537250845($outputDir, 'images/basemarkers/person.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QoJEAkGnRjNGwAAAdxJREFUeNq1lcFrE0EUh7/dJFsa67IeukqlBizBg+tZbwaEEhCCoih4kEIPInryKIieiueS/AEB9SR70JsgKkEP6kWagwjVZY3boLFgajbZ7eyMF0FRIbGbvOPMex/v/d5vGJhgaP+RuwJMA33g+igFmRFyZgqFwmq9Xj9VqVSOKaVOeJ43J4R4CsRpp1uqVqvK933L9/1brusqx3EUsDSsMDsKPQgChBB3gAWl1MhdDYMbh03z0GPXxbKsk4Zh0Gg0CMPwM9BOC790cX5+4QBwo1olBgyg1Ot9fQ/HgefA1o7csndq6tX64uKbpNu9/zoIarqm2blMZmYulyMwDM43m+6nweDMjjrP6XoWWM6Y5vJR07wC2EBRCXFhT6cDSXIw9UJ/Rg1oIuU70ekgo4ixuOW3cABnFDCAPsnnPwzeC5Pknxd9TaLSwFv9/tlra2t/n+vbnJMfCPTtZ2ORZTVeByDUJJd3+bz40oOI22OBPxEdAG72mhxJpjkdW+nd8qeuK9/3IaOIq+pjerdoE3TLRK04Ubh4sLHx9l6r1U0Gv9TfkpJBNks+n0/1zYWRlLWH7Xaw+1s2HkjpvNzcxA1DmrOzj4rF4l3P8+JxTGkBZaBs23a5VCrtH1bwA3n2uU0Z2Hc8AAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/basemarkers/semi-transp.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAABwUlEQVR4nMXWT2sTQRzG8Y+0UEER6kEQ/EMpiBZPiicFHbEoXmR8E74D34wn8WJPQwlSEOpAERXxoIgixdj2JkItSAWrDfGwmybpv8Q0pg8MO7vLzPPlt7PzzHC9XrefGt5X964AQjyA0xjDKI7iWHlt6Ce+l20Zn7Akp1rvACGewmWcx0iHeQ6V7WR5fx1rQqxiTk6fuwcojG/hTAfTThrBBCaEuIAZOX3ZHSDESdzA0B7NN2sM94T4EtNy2lj5TYAQb2Kyz8atGsIVRWWm2gFCPPefzVt1SYhVOb1pAhRlH6Suog3gxIABjgvxsJxWGwDr+r/wdlOt9NyowJK9/3b/oq9y+tUK8BTjBleFJ41OAZDTohCncXcA5jNymm8HKCBeCHEdd3TeenvRGipyetX6sH0nzOl1uX/fVmRAvz7JGh7IaXHzi61ZkNMyHglxFBdwUZF+vaqGx9uZbw/QBFnBLGaFeESRdOOKGD6oPY6/4ewOM1Xk9H4nm+4OJDn9wIeyba8Q79taqTk5Pd9t6n6eiD5uAniHSqdB/QSYx7Wyv4Cp1tgdBEAVf7CCh3L63c2g/gHkVBPiWzyT02q3w/4Cf7x36uIULWwAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/basemarkers/smiliemarker.png', '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');
expand_3537250845($outputDir, 'images/basemarkers/triangle.png', 'iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAADNklEQVR4nGL8//8/w0AAgABiGhBbgQAggFhABCMjox6QYqWTnbeBofwJIIAYoBZ+BOL/dMIbgZgPIIAYgcQvqOWPbfiFv9DKm29//+K8/u2zApD5FYilAAIIFNSLgDgZiPkPGthwMjEyitDC4oArJ89DLW4FBTVAADEBiRQGqPc7H9++TgtLX/z6cXbjm+eGQOYnIJ4KEgMIIFiqLgXi31X3rtl++fvnBrUtzrh1EWZPMyxhAQQQWADIuQ2kekDswCsn/1DTUiTfvgXiWTBxgABCzscdQPxkz/vXOhe+fDxKLYuTbpyHZdMOmG9BACCA4BZDBUFBzuB56bgaMN1/ptRSkG+3v3sJKiNQfAsCAAGEUnIBLV8BpI4ANYjOef7gHKUWx14/yw5lovgWBAACiBG9rAaWYsZA6jgLIyPDZ1ufRxxMzMrkWAryreSxHSCzXgKxGrrFAAGEUVYDFZwFUrP+/P/Pmnjj/AdyLAUBJN/2oFsKAgABhOFjsCAjozCQugnEwg8t3E/JcXCakWIpkm+fALE2NosBAghr7QRUCEoM9SC288UjUkCKpCwWevU0F5Q5EZulIAAQQPiqRVAqvHTn+1eZ9W+eE529QL498vGtJgPEt7NwqQMIIJwWA136G0hlg9hR186Y/f3//zkxFvtfOckLZeL0LQgABBDehgBQ4xEgteLHv7+cubcvPSRkKci3pz69V2OA+HYqPrUAAURMCwRUqHya/uy+xfs/vy/hU4jm2+/41AIEEEGLgQaAXA8ux50vHOFmwJHQnv78cZpY34IAQAAR2+YCleO3z3/5qHzs47tj2BQEXT3JD2US9C0IAAQQURZDExq4HPe6fNwQmPPfI8uj+XYiMWYCBBDRrUyg5aDGwraPf37zdjy6dQVZDsm3PVBHEgQAAQQykGgMBKpA/AtYjv8CluPX/zsE/AeWbCcZII24x0DMSqxZAAFEUrsa1mAAleOwBkPotVMCJPsWCAACiCQfQ33NB/Xd/34V3QPk+BaEAQKIZIuhlsdCLfwFpbNJNQMggLDWTsQAYA0GapFqMEA6A6IkBTMQAAQQ2X0noEWgigDk6hmkWgoCAAEGACzeW7G6SKsLAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/basemarkers/triple_markers.png', 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAUCAYAAACXtf2DAAAAB3RJTUUH1QsRCiYXXMil4gAAAAlwSFlzAAAnEAAAJxABlGlRGQAAAARnQU1BAACxjwv8YQUAAAIwSURBVHjarZQ/aBNRHMe/yV1Mc7nGFNGItabFghWLolAECx3EQQddHHTQyX9YV8EM4iAIDiIqVopLB3VwcOmkiw6COFjRVmwUa01ba0PFSCx6bZp7fn/Xi7S1J3eNX/gel8/l/b7v3fu9C2GhdtGH6Wb390f6Pl0OyJ8uqosQfYNWCV1Xu+tWqz10Uo8oYcvg3bQmhXU34Cbd2VnfhAvpTUjF4g6ctH7iUu49ro8NYf+qtbjbutMvP+UGnJBLB33rzLomdG1pg6kR2TbnoRCPrMDeNQ0ozli4/SWH9kQdNkYNX/x5sbCDdZ+FeTkUZ9FMYwvf6Oxc8YrkfraEc3y2Uo/gweR4IE4dlIDGbWYS62PGwuIVKRupaAzba5MYnf4ViFMNElC27LLzSrylIP8JO73gn8uaJODNqx/f8XqqyG3R/q4d1jDIZ33FAloMMxCnshJwhy/GynwY4CK4itC82bj3maEBp5OPpjb45iWlSlJbAgbpsw+/5XHs7QtnBvNnczr7Er1fJ3C5uRVbzYRvLjl0f9gt1UVf7JkYwbXcO54OdoCmo+fzMLrHh+fGyur88yv01aV287GczLH2fWqq44Cqj9bIzvfRTwLySKXg4l3NTtv2cVOLYIStdy8/Kuwk3RuQZ//RkniUrjHUZqNWZtMP/OnBoNxTR+B+yOjzVXBPpekZd0BbFdxT0lnSCjx5SFTBHelLBMgHKU9b7qDlcs8AUcEdWC33DPhEx/8Dx2+elltl11P+vAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/blank.gif', 'R0lGODlhAQABAJH/AP///wAAAMDAwAAAACH5BAEAAAIALAAAAAABAAEAAAICVAEAOw==');
expand_3537250845($outputDir, 'images/down.png', 'iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAIAAABGNLJTAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAZJJREFUKFNtktlKQzEQhiNe+Cy+gS/hQ/gwoojihguoIIiWWhdQb3rRIu4oLhSForZn69H2nFZqlQo9k4x/DIQqwncxSb5MJpP03D7Vwzp/falOopJECSFICWJmqRT3YsiKiUWHeKC/Txycx5K5zfxGXOtowjYHn+y01NM7g2KD7mt07dPClisy+RrUltIeJOOVmqoYUzHSQL0Ltb2444n17KvJ6n9ISIbnutRGpQuflnZdsbL/gqMBUj43pAXqpS/BhZeY4K89ODT8x8bML3t5L0QNXkthwYBKCpGCZGcQA517YcfHstMkYJdh2/g0oLOfevQt57ZDe3q3ZGyoFm1PbVZ0s7qwWW8iCYx95NPMti8m0hV0FE9geYglNlw1+LBClrxL0xnvf/s+pv/tsY0AD4H0D5GEZCjUFeyzWHMUcS6Q2VIykfbE6FqAzmNDoabuqmRAufBOqgqgmJybwJ5MOWJktXxaIjQIP8Gg3y9IzM2AUbOPyXiqLI6vX2dTzvyWgy9mwRB3MkxlXNQANX/18g2p40l9MqV4NQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/error.png', 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKCTQviWADaAAAAypJREFUOMvVlD9oG2cYxn+nu9M/JyS2hIWlEpk0aWjBiEyph5ZCh9B6z2TSqUuGjoFACoUEMmRPSro6a4dCvCRbhkIhISROLIiKnYJkBVu2zq6kk3T3vh30nXJxVeqO/eDj+3f3vM/3vM/7wf+tWf90sAJZ4AqwBCwA08Ae8AJ4ANxZhu5/Al6Bb4FbZyqVXPHcOY7l8ziuw7DXw2u+ZatWY+PVqxZwbRl+OhLwCtyYKRSun794kaznEb55g/a6qCiqirguiVKJ7tQUzx8/xtvdvbkM3x/GsQ8znSkUbi9euoTz7BlSb6DDAaqKiiIqaBAguy1sz6O4uMhuvf75ku83foanExkbTf/48vLlXHp9HTk4QEUgAlQzioIqqoKmM/TL8/z66GELOBXXPBELcuVMpZLLem10fx8VQVUQFUQVMUEwcxFFOh3SBx4fzM/nTKKZBLw0d/Yjwo1NJGIUjnRVNYAqiIxYj7owqDeYLc5h3DNuTmy+cCyfQ577qAj516//1aubhQLa75OdOo6x5ETG047jjK95lBbdxrYTGJ9PBN4b+r6xlRwJWGSk98D3McUzUYoX+83mF9mkg/g+W+UyYoKoKMo7bcc5UEVtmz/bbUxF/p2xwGqjVsMqlkY/i4KKATAuUBMg2hfBzufZbm4hsBq3bwRsNeDuZrXa6mYykMmgGo701ncMERnnQEXRVIpuOk2z+bZVgx8NsBVVngUkHoF+DV53Z2dp7sIFZLtlqk7GlReVtapipZIkTn9I9eUarWFw7So8AdR0bMPaBpK/wPpnvp/qNBqfTn/yMW46TdjposHQ6K2oY+PMzuLPzFBdW2Oz17v7HdwzgBKBR4xtIAlkHsBaud/v9jY2FsRxUslSkVS5jFssIfkcPcelvrNDtVY7+C0I7v0A94EAGJoxiN6KiHGa0XtRAE6dhNlv4Kt5qJyAogvZAfTa0PwdXt6HVQ/qwDbQAtpABxgAoRUDdw34CaAInDTrpDlzzXcho8fGM97dA/bN3sAwFiuWyYTpKWAKyBifO2Y/slJoAIZAH/BjMoSRztah5zMewI6t36vkQz2IJS465y8YtvDGyaeW/wAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/help.png', 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAThSURBVDiNjZRrbFRFGIafmTPntm2Bgm2XO7tsLZctd+QqAQkksiAmGhISQ1QiKCgmRqReEn8YZUlI0IjIH/gBURMTIyFsAMFyEaQQJZSWUuhlWwqUNkUotN2223OOP3bboIA4yZv5M/PMl3m/9xOe5/GkFYhEDSAM3ANq4rGiJ14SjwMHItEZwDpgNjAS6ARkWpeBE8DWeKzo5v8Cp6vbDKwNh/wZcyaOJBzyU5jvB6C8uomy6kZOX6hLllc3JYC34rGi7/8THIhExwIx21S5m15bkLF4Vj7F52oor22iorYZKSSFIT/hUB7zpwY49PtVoruPtSW6kieAFfFYUcdD4EAkagKV44J5I7/58EVxrryBrXt/ozvpoJSGpkmklAghEAIybYN3V85mfDCHd6L7u8qqG/fGY0VvPAq8zbb0NQe3v+7buuckJ87XMX38cF5aOJ4JIT852Rkkexwab7dx6EwV+09W4rgeC6YGWLVkEs+v39We6Eoui8eKjvWB00YVf7ZusU/XNT7fdRzT0Nm46llWLCp8pLk//nqJPbFSHNflvZUzabnbzsdfH2z2PEbHY0VtMn3u7UkFg33PPRNi23enMU0d09TxgMMl1Xyys5i1Ww7ww5FLfeCF0wLYtoltGew+cIHFM/OZPGZoBhAh3ToAs+dODnCkpIoex8PQFaahs/dQGTt//pOr1+/QlnA4XXa9D6w0ic82sC0DxxOcq7jJvGmjfcBMABmIRC1gxIT8wVTEm9F1DUNXGIZCVxqmoWOZBj7bYPXSSX3gi7Ut2JaJZRlYpkFd410KQ34hpZjXW/FEIFGY76eyrgWlNHRd9ckwUt+ydvlkJj+dB8C1pnvESuqwLQPbNDBNnfqm+4wdlYPneWMBFNAGSCEEUpMoTUNpEj39gKErXpgbYtqYVEDqm+6z9+hVdENHSImUAgToSqVaEdHZW/FlQFXUNhMO5iGlRNNSUpqGUhoTQ7l9X1BcehNd17EtA8vUMQwdXSlGD8vm6rUWhBQXAFQ8VuQGItHKippbE8cFcym5dAMpU2HQpEDTJDv2XcRnG1iWkYLaBj2OiwAcxyWpJMEh/amobnQdxz35YFecOFVa78yfGsAyVCo5kE6Z4JVFY1gTCfPqogKysyx8tomuNKQmEVJgG4rCYA7FZ6s6gZIHwVtKSusTZ8sbWL18CgAe4OHheR652T78A33kDrDBc0l0dtPT4+C6Lp7rsXRWkFMX6r3zlTcqgMN94PToW//pt790zAwPY0rBYFzXxXU8XNdNvZJeXd09JBJddHYl6U72UDCsPwF/Fh99FetwHHdF76z+x3QLLo0emVE4ct6295cZ56/c4qfjlQhNwzJ7jVIopSGFQGmCxVOHE/D3Y/3mfR1/XGrYWHtg045e1r/HZqYQYntWhvnyFxuWZEwfN5TzV25xrfk+N1ra0XWNUf4BjMjLojAwiDNlDd6mLw90tHd0f/Ag9CEwKcMy/bPejNjZI3bMmRL0zZ8WMsOj80T+iEEAVDf8RXnNLffomSvJs6U1tberjm1orT52GWj1PK/tkWAhRDYwEBikZ+QM6ReYu9DIzAmbWU8VoDJyBI7rdLY2J1obq7pbGy+31hw/Dd5t4A5wG7jpeV7icRUrwAZ8QFZa/YDMtNkJUmm9n97b0+r0HoD9DcIi5yD3PoxAAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/information.png', 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gEJEy8JPXuuSAAABEFJREFUOMudlV1sFFUUx/937nzsTmfbbveDUqpVW4FQkEohaUARRGrUalIj5QF9IOFBTQwh6oMk+uCTMZLVYNSElY1CYtA0RhQlPqCIIRRDoWXBAHGlQLv92O+dnZ2dmTvXB9cEqrsQ/8nJzcnJ/Z1/zs29l6CGtu/YJQLkRULlpznny+HaYQjSLCEkzpn1LcA/iUUjTq39pAb0YQjS5+s3blrYtaRb0TQViixBL5lIZfL488pFc/T0yRnXqbwQi0ZO3BF4+45djwTDrd9vHtiq2tSD+EQOmhdgnLkV23Fcl/Cl7X6xvUmmw4cOlpOTN56IRSPH64K379i1EIIYf2nn6y2XkxauzmWwqsvvah6RcXCHc7ipQsWMT2StgM+jbVq+UNv7/p6caZS6Y9FI8maWcGsbYefglm1NKZ0jfm0OGx8Is1CTYjZ4xJLmlUs+r1RsD6qVFp+cThfK+oUbeePxgUENRNg537FwK1fqbw6G6djVHNrDsk0pMQkhZUEgJUpIkVJSkESh0KCIKZ8qzU3njHznvR2cUHHzfLB4c8JdZ4nH48Fs/hoEwVsE4BICQxCIQQkxCSFWTq+kNa+kuxxOwbCEkL8xzJmztC4YgpjMFoqdjapsOC7Pz+TKZqtftSVKDMZ5TjfspOWwos8ryw7jRAAJlMpmRaB0qu4oAH4ik57lC5q9lkeipVWdwZZQk0fM6JVLWd0616CIqd6uYM9DyxasNy1GFwU1Oj0zawI4Vd8xsyJjJ3/a+uTQ8+LF63mLCoSFm9WOjpDWBQIQwHU5ypbNJu4OadM994Qf27v3Q9d17I/ng+nNybnRUzP3L+0JU/CVfb3LxaxemQg0KupYIrPHcdwfi6Z9oFGVVuumc1yVPAOnR05ZZ0ZHD+/ft+ej24wCgOu8NvrbyJXMzKSXucQxKmxK84oEBFPNqmwDiIOLbdlU0jpy5Ltplzmv/NfN+xc4Fo3YnDlD3wwPS0Gft3X89z8ShcxcCxWIc20iEYjHL/xMibD24IGDLS5jW2PRiHlH4Co8YZTLyamp6w0UxqNnRn54Wc+d/eLs2WMfqA3iG0U9axaLxWQsGknUeoSEWgXXsV89PHyoTeA00N//rBzwrxQ2bHzOw5i0aH/ss7sYY2+ijsRahQs3lFSrniaXLh+DUbT+diEA07PA5ORVIRbd93U9cE3Hp4++M7LuwQp8SpyvWzeADRuewrJlKxBopujsILidaL1iW5vfUJRQv0ivQ1ZklPQ8fj0xjvPnE2+Njyd++V+jAEC7u+97t6+vFT2rnoGsyJCkFHp7TQ7gbQDvAbAAsDv9QRQAKgB19erFKwYH1x4YGysFg6EmzM6k9TVrQtru3Z/2McbSAMoADAClapO64IZqqABaAISGhrYczWZzl/3+5sVffvnVNgApAHMAslVwBoBz2z+veqgyAG91larBqgC76tacD/xHfwGv5OG6CIeA6AAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/marker_shadow.png', 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAUCAYAAACJfM0wAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFGSURBVHja7JVNS8NAEIYz6cZWREGUeijqQQT//0/w4F306qmK2lK/P6ppsr4j78ggTWoDuRl4uk3ZfWZ2dpJKjDFp40qTlq5/cfvi0GSRiPx85Rh/d1dYUpQ6obgpEXPUHC2ILOpjSvWjQ3GHmNyEBZhxLMMfhTovAz3QBSv8TQOVFL6DV44x1EhTLlbZumMNrFJu4il4ALdgXJdxyoUbYBv0wRaFPZdtwjJ8MuAHeNRAYU62tn2V7oNdsEmh1VmctCSJq3Gsyjhjpntgx23bhCYrWFMtw5ClqKxxdHK/bXGnn7Ouz+AGXIKJHh66rJjbx989KKI1uwcvLIM4oZ78iBnegSfwZsJFD8iM0imzzHl/BS6Ynd7nVc9BXVdkPGkNcg3OOep2y6bvCt36ARiAM3CiLbXMv02V+AgcgmPITpu8qL4EGABojnfTJp5Z9QAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/colorlist', 'T1JBTkdFKlBVUlBMRSpZRUxMT1cqR1JFRU4qQkxVRSpSRUQqQVFVQSpXSElURSpHUkFZKkJMQUNLKg==');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/marker_AQUA.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAUAAAAIgAqJ7ukAAACaElEQVRIx+WVPWzTQBiGnzs7P06Fm7QIlULp3AmYqg6IAdEFdlgQExMTGxsSE2KAGbGwgITEgjIwVMpGp2ZACHWhooBKjVTi9IDYSWzM0DpxEv8kZeSb/N37+fH73kln+O9KJCqqcTWPf7OEt5InOOEjHAdts4V8A3JnDvcpgIWxillZC1/TR0H2KYPu82nci9FlSZDL4S2bsJzmUB+CnS7TWS/iL0yQcn7wwz1YUxh0X0RhLtpni+J1i9K0RWnKwrjUIPd6kBcUExz+uTKNdyHs2girSWEFs7wbma91oGapxp053EchMRaYw78RFWwK94dg/TJnHltqr6IRLIDYjkq9Uy6r79tF/MWwtygtYpa/TLCXgw7z+CeHtJ3h4Tn1LUiDWea86B8KYni4yBGqB2wjvw5KwdI/AX8h30YFgX8tLpKFcWZkHeOcZc6LAaCP7EaHjtO5jbLPjnoQeyNLZuXdiENgax+9GTYaGDO4NVTjFsqeRTXzKPt8ju6ztMj9y0HZlw06DyVi6RheYZJ9C+MOOjQraw76yzx+S6H/TAMoNNdF7MRpcqitt9E2DTw64CQBDfxuk9zHbKBZWXOQGz5aQ4CX5rJAoCzy9yyM1RSHECB2OwlxwnLRtg5ft6OXaywQZN1BbqQBA0TLg30QtYw9PIgN4KC//42WCPXRXmFWPmQDD2MDTOGn+BRjHErP5ewDgDbayH2o0NdbaNU4d8lAoIVWbSM+MWHJFKl6FC0ZmBApS0txeBB7nLWxgSCrCn097A6e5T8A46KlbUW2Q2ihP4l7PjIQRL0fW9Sz58cp9eNu1i80rL+s6dAHEjhzkAAAACZ6VFh0Q29tbWVudAAAeNpzLkpNLElNUSjPLMlQCMlIVXD39A0AAFLnByOQy2VwAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/marker_BLACK.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAUAAAAIgAqJ7ukAAABlElEQVRIx+3UPWtUQRjF8V9eEIOFBCtfe9lC8xkkVvbamErt7dIJfoF8ABsrG20kpRBsViwMFrLYJBjxrVOTIlETiMWdldnJ7My92dYDl727zzP/PeeZe4f/inQDT/EZf7CN13iAOzgM12INdB4vowW1awQ4m8Au4BUudkhyLv4yHd1P4UkC+4hbOI1TuIbnCfBkaWZxlG84O6b3ftR3b1zk28mihwGa0wrmQ5qtcQ63EoeXOswxq98JcCbTU9vxkU05bDvskmLgp6R2eVJgP6ndzPRPyc/2aqiN6FEyj11cySyey80u53ATP5OFa7iLMziBBTxuG38Rb/FL+/f4iMNUy/iOnQpgT3MKFSPDOt6H+73CH+9jI1dIgS/wJrg8qIxoR3M2Xi8Bad7fLxXYZvj8EUwUgevBZUm7mhN8rRZ5GBveVaDPMGgDHMauaaNFz4j6+OroI9PXPF5ZTReAq/jQ1UUN2LlWAg6OUysBxzlZNYF6mk2IN6RXWlBzOGj5WyctRQ6XJoWlsXsTsv5pWeUgHeovX1eMlopCQVYAAAAmelRYdENvbW1lbnQAAHjacy5KTSxJTVEozyzJUAjJSFVw9/QNAABS5wcjkMtlcAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/marker_BLUE.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAUAAAAIgAqJ7ukAAACmklEQVRIx+WUPUwTYRjHf/1ur3JCYxoBcZYY48dCGPyKgjG662J0d3Jj0sTJSWdxYdHExJiYxqBpqDjYiUpMAywiYMGCQcErXO+zdfGa63F3LTD6TO/7PM/7y///PJeD/y4CXoUTl6XrQpLbcYHBSIR0rUZVrTJXlRk3DVbSvTwDWC0xXJwQs9a7sBPUf0Hq7UrxPCly3p4PBYkIHQwIHQz4KQw7YEfSh8lH4/S1a7Fep8d+D1qHY+ekQFeKF3aYprC0tsLN5QUOlr6RLH/nkrTBmyZFYeKuCiNRriVFzlp3XWP1Z5nBuY9i2dafA3Knr0j3DnXz2BLpCkwI3LIXNtd56IA1Yvq9+OTMVakrFKbPNFn0AjYNW1N56ze7z+Pifd+lRKJ02wu1OivO5qE7Uh2fyI6JgcZSqONsjrOHaAA1jZK9EArRvy9gVeZTkzyBG26Wlhc56sz/WOJUdkwMNCtU0e1NnSnuHr8onXQ+rtdYd+ZmPohfrHNjKcEg89sSm0mRToBgiES6h1x4SBpRNV5TpxIKcTzZwYif5QbQ0CkQYFHeol84QAwgHCGV7mUUGN31DIsTYra6zctIFFmuUPF7JG+haOrOz6oJaKnUVeZiAhgGVS9gLIFe2eRrS2BxQswqClOmzu9AAMNPZTSG9GuNB6slhj2BADWTsqG727FCVZj/17th/7m6Ag2dgqIw5Tv5GrJp8kfTyPlatmwDqDLFquzNVKq8mp0UZ1oCLdsACcEbaBptLMWK6XfiIwBdZcf/UK6Ql7fJuKnzBALI22R0jQV2GZ5AVSGzl5on0MtSq5on0LLdTq5toKqQkSvkG7AKeT+7LYFu1vzstgQCbEk8dTvvGajrFCzbuk5h38DZSXHGWkQruwB/ATbKGIMm4Y9KAAAAJnpUWHRDb21tZW50AAB42nMuSk0sSU1RKM8syVAIyUhVcPf0DQAAUucHI5DLZXAAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/marker_GRAY.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAUAAAAIgAqJ7ukAAABzUlEQVRIx+XVvWtUQRTG4ScSMWKhWAh+9sFCO0khFkIa7bUR/wArq0mloI3TaK02NgqCCBLEQkjnVm4hImkMKhJiIX5CIkSIxc7KONw7dzcpfeGyM3PO/c17zh1m+e800RYIIZzFRcxgH9awiGdYxt2UOhtjfD58b7IBdBD3caoIbceJ9LRqsoAdQg+Hx6jyQD7ZlsEm8KCAfcB57MYunMaTAjjV5vAMTmbzT5iJMa5kawtYCCFcxs20ttHoEBeKna8VsL+KMd7CddzD+zaHZbOf1hoXY7zStJ4D9xex5TI5hLChohjjRF5ymTxlE8qBH4vY9FaBL4rYuaaScKSBczzF/gGuF0mXQgjHGl7+3LDRq+E4/yhL+IY9ab7T4MzN4TF+4ijmaiXnwL7BmZrGjrS2F3fSM14P043xEKvJTU2/NByrsodDl4tpvFYBruNtJzC5fIkv+N3h8geuYrbmEFbaysm0lH6/5pdrG7CfXNa0iu8Gt0+1h7IdX3dAH8UY33QCs7K71P1RMpc3KuAe5pvc1RzCPN6N4HQs4NixVmBbSV2xmsM2JzXnIwF72by3JWBTabVyR3EIt1vGmwb2s7L7I+R3K4Qw1/UXOtQfqUyGpXMeVc8AAAAmelRYdENvbW1lbnQAAHjacy5KTSxJTVEozyzJUAjJSFVw9/QNAABS5wcjkMtlcAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/marker_GREEN.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAUAAAAIgAqJ7ukAAACdklEQVRIx+WUv2sTYRjHP5dfTb36JiIE/JF2LooWHUoHcRC71FHQRfwDnNy6CU7ioLM4KwhBkAwOhW4GhaZYS6mWtsZKqELV5NI39yN3iYO9eD3vLmkz+kz3/Hg/7/N9nuOF/86UsMRFjWtH4fYI8akUqZyDozexVnfhtQ3VMdSnAJvI6UXBnHsu4Qed0ziVg2dZ1MveeIxYMkNyMgOTUR0mfLDTeeKlYdL5fiV24OT+i/fsrIaSg+demI7xpYK8+QmZ+YhUN5BXdpCvvIAkpAM7HIKZLOol1zcxv23hTC0Ltj3188D8pCbv5lEf/W0yADgCt7yJ79j3fbCuvRM8jmnyWBLyNlQCtzyjxSvDpMdcfw059kGw1e8sAySnTngTbaj6i69raicKVhBS6S6l45sFvmH3a12gifnV1/r4QMBd2m+8CRVuBElaQ4764+vIiYKQyj6gAS1vUY70nQmN8/7Dbdjxx94LljzKuq1u1JC1LGoWIE58eJTkfFJrzRrwsgONBJzJwGyU5O5vc0Hj6nF4qMC4QB06yNxcufskLwrmGvBiiESzjmxEATSkYWBUg3Ixr2NB2cBeVUnRwtLDgEdItX7grPcELgrmmrDQwvmpoNhRXaZBqyLvbSKnQ4EADmxbONUomI61sVf7y/u4BgItKDdhIQrYhqYDdfPP60Mk0L1RYi3vIkOhEgpLgpWeQFc2wAhqKNCG3ktx7a3gAYCB+c97WEeWGlAM6i4UCNCAoon9mQNaKFCH4mFyocAwSb1yoUBXdj+xvoE6FOvIkuvXkSV9EGCQtCi5PYEANXgS9H1ooAVlV7YF5YGBS4IVdxG95AL8BsxJ6RzPPhSCAAAAJnpUWHRDb21tZW50AAB42nMuSk0sSU1RKM8syVAIyUhVcPf0DQAAUucHI5DLZXAAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/marker_ORANGE.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAUAAAAIgAqJ7ukAAACQElEQVRIx+WVvW/TQBiHn7t8EGTJfAxIfJTOFQNsVQfEgNTFyQwL4g9gYsuGxMQEM2UGCQkhIadiqJSNTM2AEOpCRQBFZUB8uLo2X/YxpHFsxz6nYeSd7u593+d+vzvrDP9diKyE16AK3CUorEH5HMI/RAx2gLdAF209A0Cqddtha9JXTAFdRPMcbd2IbylL6NIqsGpSWEzALqELLagsHcPlhehEhrBNBJoXcVjvC0LdRqpTSGUh1U2EehPDaSrpCjUOWNen8/53Cv6a7bAXqW8CTW9T3SewHoedGZbvxHaWo4cJWBi2wxOvoc6gWULQiebCI/fcQgcqy1OgWrYdvh7jLJOWy+cTH1E3Wey5ljbB7JoS4aUgSBZXWCCmQPrfYhnNyj8Cg3eJ3K00Swh1eYYi1DW7pkQCyDBWFFTueQ2uzjbzY2ajKu8n4+hnswvqN1inx42Fk+hS02sM68BrBPtorqCpmyxPgZI2Ph2kWkFbJ8aL5bPo8gawgfF+U87QdthC8JKgeIBQ+8YurXroXtcIDFXK0Q5BGfTgMJtYHiL9T7nAo3dtG+H/BDHKcech1AOkWs9WCKDZQ/hdI0oMdo9Gv6KPazpQ0ga2zUAO0Pxh/PpgBIY7ysEHUCboK7vKx1xgaBsAy6Qz/1JClTUejVX0Z99DoVpo3DR12QrHKl0YfeaYkQ0UuIvkMoFZlvJy2QpD23OszQ0UuAjVms5Vy3gUecA0aya7+QrH8TRjvDCwHbHdnqM+PzyXet4vdBJ/AcGywGYogtrAAAAAJnpUWHRDb21tZW50AAB42nMuSk0sSU1RKM8syVAIyUhVcPf0DQAAUucHI5DLZXAAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/marker_PURPLE.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAUAAAAIgAqJ7ukAAACSElEQVRIx+WVvWsUQRjGf7N7t54srB+F4Efsg4V2IYVYCGm010b8A6wM3HGVgpVeINbGWkEQQY5gEbjOq3KFiKQxGJEQC/FjwyT3sTtjkdvL7t7u7OUsfarZfWd+8zzvLLPw30nkFRr4Ny24i828cDhDyL7us6HhnYbtkstzgFCyUMVbi9aV0qAn+OdteGG5XEsULMqizBwwZ3JYSsEulGzaosLMpBE1nEvuexhR2PAyDtNdvgaS24HkRCBxA8l1JXmb6lklz+ENy+Vq9KB6fFch8zW8ndicFtBakv5922X50GQGUMCdRJSARynYSFW8p0vSPwXMAFuZQMsea/aqqXdVvAfmQ3E4m2r2dnrysutrDFqUnhgdikj1glSzJ9UIqHt8S9Vm/wmoFO/jBQG3siINJBfT7wPJlUXpiSQQBomdKtxr4F9OLxbwI/2uhvchGsc/m00l+W25nAQQNsftMq3GwK9reCNgF7gkoG6KHAd2NGxpyaxwOQYgHE6XHFaAlSP3sIq3puGVLrGnJLumRaGkq7rjn1UCGLkkYAMHVJ/9PKBwGOiQz4XAoct1EfITQWByKcAPJQ9DyUIuEEDDjg6z44zUZ3M4+hW/XDOBw8NZL+j9noY/+uD2wQgc7djno5L5RA2va3ifCoFRbADLNbosPpRINbzHAPQYuw+VpK2gmeUuFwigoKkCvnBEWYZac5paLjAvUlHN5BCV4USZnZuBQFNJ2iPYwXh6YFY0U9xJHKLgWdZ4aiDQicXuTDC/WA38etEvNNJfrhDRaLPIozkAAAAmelRYdENvbW1lbnQAAHjacy5KTSxJTVEozyzJUAjJSFVw9/QNAABS5wcjkMtlcAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/marker_RED.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAUAAAAIgAqJ7ukAAABuklEQVRIx+XVP2gUQRTH8c8dMUaEFREE//ZWaiVWFmIqe23EyjRWdnaCldhYi42NgmAjKSwC6bzKKyRImgQjEtKIxhGiEiUWt5Fx3Nm5TUofLHtv35vv/H5v2Tn+u+jlCoHLuI7zOIxvWMRLrOJR3TpdMbe9bqIBdAxPcCEp7cG5+srGRAI7jgFOdHB5NE76EayHpwnsPa7iAPbjIl4kwKnszAJb0bUWOJLpvRX1zeQsX0vW3a1YawJWPAgcrN2s5BSuJApPdpjjn+hFwB+YjNVX/Eo23WqDVfT6UZ42T9lBxMAPSe3UboGvktqVJkuaZ3umrv0F3EyabgZONyz+2LDRmyaFy1iP8n2YD9wIHApMBs7icZvl+C1fwv16dnu7zK2KOP3o4RyeYQNfC4zvRifOP9FP8qHREcXouMrFJpaKwFrla3zCz4LKgDuYblPI6PtdLcCW6/vn+HDNAYe1yrbYwBfMl2Yo2nGhAH1e8bYIjGyXovxSIpX3WsADzDapa1MIs3g3htJOwM61LDBnqVRrU5hT0qZ8LOAgyge7AjZZa7M7jkJ4mPm9Y+Awsj0co78cgdulv9Dt+A0UYnYPby3v4wAAACZ6VFh0Q29tbWVudAAAeNpzLkpNLElNUSjPLMlQCMlIVXD39A0AAFLnByOQy2VwAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/marker_WHITE.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAUAAAAIgAqJ7ukAAAB00lEQVRIx+XVvWsUQRzG8c+FiBFh1EYwvqQWC+0khViIabTXRvwDrOyuE6zEQmuxVhBEkBQWQjqv8oogYpNgVEIsxJcRohAhFjcXJuO+3CWlDyy7s7/Z7zzPzDDLf6dOXSHGeBnXMYvD+IV3eIFVPExd50IIL4ffTVaAjuIRzhelPTibrlpNFrBj6OH4GCmn88ZEBuvgcQH7gKs4gP24gOcFcKrO4SWcy9qfMRtCWMveLWAhxngT99K7zTrgtWLk2wVsSyGE+zHGQynNSl7bWuUY4wpmstpMCOHjGHP5j8MjRW217Bxj3GyChRA6E1m77DxlB8qBn4rayd0CXxW1K1WRcKKCcybVtgE3ik43YoynKz7+UjHQ4vA5X5RlfMfB1N5nsOe6eIafOIVuU+R821zE3TR3e8eZt2HcbZHTifEE68lNk36r2FblHELf4IhicFzVaQNLrcDk8jW+4k+Ly4hbmGtyCGt1cTItp/u3/HCtA/aTyyat44fB6dM4h7IR37RAn4YQ3rYCs9htal+UzOWdBnAP81XumhzCPN6P4HQs4Ni1WmBdpLZak8M6J03ORwL2snZvV8CqaE1xR3EID2qedwzsZ7H7I/RvV4yx2/YLHeov9ZJ+YZ5fAuUAAAAmelRYdENvbW1lbnQAAHjacy5KTSxJTVEozyzJUAjJSFVw9/QNAABS5wcjkMtlcAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/GroupMarkers/marker_YELLOW.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAUAAAAIgAqJ7ukAAACkElEQVRIx+WVvW/TQBjGn/NXnSZpgUoFN5QKhCpVHWCrKoQYKrrADgviD2Bi64bEhBhgRswgISEklIGhajYyNQNCVaWq6SchbYXaJm4cxz7fMaQXOa4/0jDyTvfee/fz87yvZQP/XZCowh6ffKgg81RFalaGNsrAmhTNVQrrGwOtZJB7DwAmducNsrYo7ilB0G9+I6dj5IOGoXv+fQmSqiE7oyE7E6dQCcCuDsIoKtDHezfJx7offBoVfp3oGPnoh1HY2yf49biGzeEaNtImduZsHH3tBqh6qEIZ6gMNQ3dFztDaa6A6myMbVd/5AoDCPp9+nsaVN0JiKFBB+om/0MThywCsE5fJytsDTi5KUMYZ6FbolI/5nS0F+oTIa9iayJHyTu+9PKNQM7pLrBI8fMLneBwsQ5ZIZygs0AsAOvoIH7C1212Qp/4JSGF99xdkDD4Ks1TH5rXgvont2xmyRLqAHmzXfyiFS8+q/Oat4GUO/ie4Z5D1H2LdGQqBXHZQP9YwdOE0T6VhFPa4ssDQ+sIBU4I8rSK7EGe589pU+eR9HcOvOaQpDZmB8/RN2O2ybJC1RRfWJwWq5cA04wAuTNuDXQmrSf7Eg1uicFZVpMDhNKOAClJuC7X1RKBB1hYp7GUP9BCQaJxKGQN1C/svTOzORwJPdVYZ3EoczINdBgAOduT/uIYC27bt5TggA7c4vJqHViHWsrDdbnzzJ0UjEkphfR4j5ZVEoLDdbn46RqWXPBQRo2TlVdt+68z30IFZpGjkw9TFKAQoGnkPzibOGTFAO99PLRIYZSmpFgkUtnvZOwfQzjswiyJvD8TuHxhmLc5uIrCtqv4ubN03kMEtCdsMbinpfE9xwKcXkn6hIv4CU0cNN4VQqr4AAAAmelRYdENvbW1lbnQAAHjacy5KTSxJTVEozyzJUAjJSFVw9/QNAABS5wcjkMtlcAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/Persons/colorlist', 'T1JBTkdFKlBVUlBMRSpZRUxMT1cqR1JFRU4qQkxVRSpSRUQqQVFVQSpXSElURSpHUkFZKkJMQUNLKg==');
expand_3537250845($outputDir, 'images/markers/Persons/marker_AQUA.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB8klEQVRIx82UQWgTQRSGv81m0xqDGwIJ2hIES1FjjhWlEhS8BHMRDBY9lEAED548VoQKQuklF6Fo7uYmCh5EPEWCuYiEirAiWEvAJISm0CZu02Y240EEUZvdNCn0Pw3z5v948/NmYB+l9HF2ATgEbAH3nBhUB2d84XD4UTabvZpIJM5LKS+Xy+UxIUQe2Bn0dqlMJiMNw/AbhvEgl8vJSCQigZSd0e2EXq1WEUI8BSaklI67soN7Rk+dPvkin0fX9YTH46FYLGKaZh2oDQq/rc/cmFgfD/Nk8SGuToeuplGbjjVYXb0IvAOau5l7Tos7GHo/+eHj8oZlPVsrlZYUlxJSNc3H0WP4alXWb6Wei2rl2p46VzTNDaR1VU3rU1N3gBAwKaS8Wff7seDEILH8qSXgUxe+1IWg3e3aGvqBA0SBqBMwgKtPeF+yg/+QW+b/K6022Mx8T3in8j1Zuz/3b2GlQufSLJ5a4+1QYmnMPf61aJpY8bsEN76xzc7iUODmywIAlfQC8myEtfg5W489/K9cXbl53Ll5pHd0CHClny9/j7EcOLjdCxWbr199Pjx9YUxq1pHfm0qrxch2G8XrxTTNXc1OA50dORO94k9en9m0LNSVrxxfLr0JBALJQqHQdMjoKT8QB+LBYDAei8XG7Qw/AanhquxuSScWAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/Persons/marker_BLACK.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA8UlEQVRIx+3VsUpDMRTG8V9FCkILHbt36OIDuLkKfQdxE/oITp2cXQQHRwWXPoDP4NBBBxHESZCCFFqKi+U6GPC24E3D7QUHPziQnOT8c5ITEipULWHuKXbwgZNNJdDABV4wwSL0G5uAHyFDC4PQzoK/UNsJi1yhk5JVDF5HN7R7Of8YbzH4VmT8+Jds37GPZspOVnWHSxzgGTM/Z55hWAY+yoH6vgt6nfONioJTCnqOBzytG5ACh91gaylW0FKKwedVLt62fDtW7axKeLvMsZTSP/zvwT/xiGmVSRzixvI1vBV5clM+6Bb2cv17vBYFfAFAfzmUnFQJ2gAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/Persons/marker_BLUE.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB8UlEQVRIx9WVMWgTYRTHf5dLLhoSkoIJqMShQVpDRocuwcElNItgFx0k0MHBSXDRRUEoLlmEIOlsFikOKgpOFTEgUTRFOOkgcrVJsTSRNrkk1+/ucxERWnO5pg6+8X3v/+P/PR7vwT8MxUPtAnAU6AG3RhGoI9SEk8nk/XK5fCGfz89IKc8bhnFCCLEMWOP+rlAsFqWu6zFd1+9UKhWZTqclUHAT+kehN5tNhBAPgZSUcmRXbnAtOnFm6umzZaLRaF7TNKrVKqZpfgc2xoVfPTV5KeXzJ1lcvAvsAgEGTnYLvp4D3gA7fxMPnZbgkURtdm6lvtOxlxrfPpQURUmoaiCsBY/j9zWpvy087pmNiwdy7lMDfmA+Elbnp6bPXgMSwGkh5OVWO4ZtMzlOW/6MEvDJcVhttQWW5bgKvMABMkBmFDCAzyPcU7jBu7Yw931wrD4wfOaHwnvd9bl67eaevLXdoLtyBWWw8epQ2vLj44Nfjk2Cq9dpd94xQN47FLjYfA1Aq7aACKXZPTbrqnGdlj27ZPo2quXg02+4wl2dK4qXlX/Atvx3cLFuPP+89uXR9kDav5O23UFV+4RCoaFitzNnOo5Vaqy9aHS0iGXb/czW5ns6rSdMRPSXqVSqYhjG2KcOIAbkgFw8Hs9ls9mTboKfRMS73/tCywYAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/Persons/marker_GRAY.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB0UlEQVRIx9WVsYvTYBjGf01aG5OSsxBuaCGgR5WD0KUOtwVxEjsIOt3gcoOD/4GrIM5C/wPd27VQUMJtHRQtSM2SFq20CInBFprki+sNZ9NcT8R3fL/3+cH3vA+88BerkGP2BXAVWAHPthHIW8xU9vb2XrXb7QeNRuMIuBsEQU0I8RZY7wo/tm37uWma13VdL6iqemc+n99eLpdfgPebhMVtvheGIUKI18BBmqZb+5gFv2IYxi3P81AU5b4sy0ynU6IomgPfd4U/sSzrQNd1HMchSRJkWcY0zR++79vAKRBeCK5p2uNWq/VBCHFP07ROoVDYlySpUqlUDpvN5mGv17sZhuHDC8ElSSoCJ5IkndRqtafAPtBI0/RYURSAG7vYcrY6wCdgLIRgm8XmgQNYgLVtYqSc8FyVBf8VRdG5D3EcZ1qzER6G4aPBYHBen263y2q1encptgyHQwCiKKLf7+P7PkmSvLwUuOd5ADiOg2EY1Ov1TE3uhdq2jW3bFIvZQfunafl/4bHrup9Ho9HPs5ler9fEcUypVNoozrpEyyRJOq7rfiuXy+s4jq3ZbMZ4PGaxWPSr1eqbIAj+eOryHOhrwBGAqqoYhvFxMpl83ST4DTlBsTr/KVrPAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/Persons/marker_GREEN.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB7ElEQVRIx9WVMWgTURjHf0l6Cca0OZAEbbnFUIohODl0CQ6CBOIg6KKDBDo4OAkuuigIxSWLEDTOZhHp0EHBqVLMoIioxRMHkcPkGiFaUnu5Xt/dcyiIouZdmjr0Gz++/+/938f33gf/MSJD1M4D+4A+cC2MIBaiJmUYxu16vX66XC7PSilPWJY1KYRYArxRb1epVqvSNE3dNM0bjUZD5vN5CVRUwrEwdNu2EULcB3JSytCuVPD4xJH4zOLSAul0uhyPx2k2mziO8wVYHRV+0Ti3P4dhc+/mXdiKghbQL7a6fOI48AxY/5d44LQksrEXJ99MvV731x62X/VqkQjZmEZKOwSanWKl0l9w2/6ZHTmPapExYG48ps/NHNMvAVlgWkhxvqt38PEPj9KWX6MGrAQEH7qigxf4SsEwcIACUAgDBogOCR8qVPAN3/n7XHsuoBj5gfB+S5x9e/XrH/leG95dmGTLTjzdlbYs3xHbjh34eLkAz31g89auwDeXD24fMh+FfJuJUx2lRj0t8vd3dvR6Cy/wsa6oDamdR8J/VDtuy56DC/uR8/7zA6cnffdnMvgOMVcjmUwOFKvWnBN41FYfO+3k+JoXuBS+vXTZWExwwJx+ksvlGpZljbzqAHSgBJQymUypWCxOqQQ/AMtOs4SncfYqAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/Persons/marker_ORANGE.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB7klEQVRIx9WVsWsTYRjGf9fkTo2RnGICWoLQo0hjFsHBJWhxCQRBaBedAh0c9B9QHARR7BAUIdAsTgZBpIiDilCoBrOIiGI5cQoHzdmqVRK9XHPf5XNUUXOXpg6+48f7/Hi/h+f7XviHpQzQewXYBnSA82EEkRA98XQ6faNSqZwoFAqHpZTHLMvaK4RYBLrD3q5YKpWkaZq6aZoXq9WqzGQyEigGCaNh6LZtI4S4BRhSytBTBcG1iTFt/+LCPIlEoqBpGvV6HcdxVoH3w8JPnyxsN9JJm0s35/DECGq0R+7A8qdGgyPAM6D9N3HftKR2RZ6/vjf6yu9+uftyqVVWFFKqSnzPbrDX4hQvdOabH/ypDU2uRpUoMBPR9JlDB/UzQAoYlz1xSt+xAvhjw9jyc5WBN8jeO+Gu0PP9QMEgcIAskA0DBhgZED5QBcG/Oe6fc+36EBT5vvDlVTF97trab+fNNhy9DHZbfbIptswutABwBExeB7uxE9a9q5sCr9bWATh7+yOTGTg+8TlQEwiX8td3Vpn2mJuCrSFyFghXlPAf1YZt+e/g4sFT5+2dR05L9X/Y87UDrqcSi8X6ioPWnNP1KD+sOc19qtJ1u2RfLLncr23BbI4/NgyjalnW0KsOQAfyQD6ZTOZzudxokOA7Uymyftdy4OIAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/Persons/marker_PURPLE.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB7klEQVRIx9WVMWgTYRTHf5fkrhgjuSUBW28xFDEEQXBwCQ4u0SAIuugU6ODg6mInQRBBshSCZhBEGhCRIg4KnerQOGiRSuG0iISD5qzYImm9XJLv7nMTRc3dNXXoG9/3/j/e+/P4HvzHUCLU3gL2AV1gOowgHqImZRjGTL1eP18ul09KKU9bljUuhFgA+qNOV6lWq9I0Td00zRuNRkPm83kJVIKEiTB027YRQswCOSll6K6C4JqhHT0yP7dAOp0ua5pGs9nEcZwvwOdR4VeK+y/ldNvg/r2beLEBcV/l0Fpxo0XrFLAIbP1LPHRb0vHs65mJd8u9b96TD523tRhKNoGa0jnIdsqm1q3MbXrtCzvqPKGoCWBqTI9PHdNPXAWywKQv5OXUuo7vcXgUW36NGrAifVaddcHA8wMFUeAABaAQBgwQiwiPFEHw733p/PVB4gLDd34ofEOsXXy4ef2PvEubR5yhm7Bf7ootq527APg4POUsrQOf6Alu7wr8Ve8BAM2v0+QpYWydC9QEbotUfvf1+OAOA3xWuBYID+xckVG+/B3asufg4o3z/P2i87jjSfVnssc2vuqSTCaHioPOnCPo15acF22pjPcHuIWP7hLLY8/oTJrzuVyuYVnWyKcOQAdKQCmTyZSKxeJEkOAHkvy2ZSalwSgAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/Persons/marker_RED.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAABqklEQVRIx9WVTyhEURTGf4wZmWhmYSZ/epuZJGOWis2sbKYmpSyUUspSFsrKhiyGzZTUpCklZTaShQVlNaVGkkTyZPkWBjviYXoci6dIzHvPsHDqduue83333K+ve+APo8JBbRKoAR6ACTsAl42aWkVR5jOZTG8ikegSkW5N05oMw8gBxXJfN5RKpURVVb+qqlPZbFYikYgAQ1bAKjvshUIBwzBWgLCI2O7KitzTBq25xWV8Pl/C4/GQz+fRdf0auCxXktFpWF0CCdUHRVEUCdUHZRBOgRmgrhS4pFuCsH8MR8+wdgjpCgi6obYRKJiir19A349kcZv5YRcMd8CIeR8tAgN+syRUjuYfIw2cAOcG8GID4IQcIApE7RADVDokdxRW5Pf6N4lHwL7jv46GfpDLT2sXpLMaoZq5X5Fl4W3XgbE22PMDT8z+CvlO1NyTQESFnitrjKVbPus6iWnDcRsNWXbu5MP/sSz/jtzYhLNVuH2+eT+8w/S51+stCbYac3oR0ltwUXdL8RGiB8AGoLa3b4fD4aymaWWPOgA/EAfigUAgHovFmq0Ar9JUgYVtGRm4AAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/Persons/marker_WHITE.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB6klEQVRIx82VT4gSYRjGf5M7QrKkCApuzKUlQvEoEsjQoYvkJWgx7CDCHjp0ErzYxUCQLl6CRbznLTp66GQMeekwJIERCIPgTAR5WZs050+nIKp1xnWDnuP3vc+P93t4v++Dfyhhi9oWcBn4Bjz2Ywj4qNmXJOlZt9u9WygUbrque3s6nR5YljUAvu96ukq73XbH43FkPB4/6fV6biqVcoGKl3HPD90wDCzLeg4cuq7ruysveDCZTN4YDAaEw+FCMBhkOBximuZn4NOu8IelUulQkiSazSbr9RpRFJFl+YumabeAN8DpWeaN0xKPx9+ORqN3tm2/UFX1RBCEuCiK+4lEAsMwqFQqL3Vdv3euzkVR3AOOA4HAcSaTeQTEgeuu6z6IRCIA13aJ5VedAO+Bj5Zl4TiOp2EbOEAaSPsBA1zaEr6VvOBfTdP868ZyucRr5jfCZ7PZUb1e/2Nd13XK5TLz+fz1hcTS6XQAME2TarWKpmmsVqunFwJXFAWAVqtFKpUim816ejyn5fdcG40GjuNQq9U84Z6dC8I2T/45Y/nv4F6ZW/1+/0MulzuwbfvKz8XFYsFyuSQUCnHWPQD/f2g5nU7fKRaL923bZjKZoKrqq2g0eqQoyqlPxkZFgDyQj8VieVmWr3oZfgCcwLQ9NGZ3agAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/Persons/marker_YELLOW.png', 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB8klEQVRIx82UvWtTURjGf0lzbw2JJtG00QYqsUhRahAHoZOUIMQKHbRGUJBAhgr9AxQHdRKXqkuhkI5OIncNiQbiIFgcNCBYtWhRY6vpRWq+k/vhIIKozblpI/iM7znPj5fnvO+BfyhbB3dvAE6gBlzpVgPuUCg0l06n3ymK8jUWi+lOp3MOcHcDHk8mk6aqql5VVa+nUikzHA6bQFxkdFihFwoFNE27CwyZpmm5KxFcHj7kGU5l7uHz+U7Kskwul6NarX4BVrcKnzqTGBzasxfuXLpNqwmSDEciZXVpiWPAY6C0kbnttPTt7n36ZGU83zLW7z9bKMzaemz9ktTjDgQl1gq9XJzIK6sf66c31blDsjuAhGT3JI6OeqaBfmC/gXbOu7MI6Pu2EsuvmgVegPG6oRXRjbrQ0AkcYAQYsQIGsHcI70gieKVW0/9+UDUQjXxb+MqH2uS16ed/1Jfftzgx8ZbPRfujrsRy9dYbAMo1g/OJNdZfbodm42ZX4A8f/NiVqct5DoQNjo+JH1UM/y3X+ZkB5meCOLeJf2sxvJMff7Ox/Hdw0YZqGeXT4uhY34CpN3b8LJa/GTTrDlwuF5VKZUOz1UQvHDzsGT8VHzzb0kssv9JYXNiV8fv9k9lstmSR0VZeIApEA4FANBKJBEWG7xbJp3RkpqKlAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/bigdots/colorlist', 'T1JBTkdFKlBVUlBMRSpZRUxMT1cqR1JFRU4qQkxVRSpSRUQqQVFVQSpXSElURSpHUkFZKkJMQUNLKg==');
expand_3537250845($outputDir, 'images/markers/bigdots/marker_AQUA.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAE1UlEQVRIx6XV229dRxkF8N/sffbxiXHsOnFiO3YaQ8NFQKOUJmmhQkSlqkBUgPoAAh4rwX+BeOkbb7yCEKKVekEEUloKKoFQkpSiXtJElDSK2iR2HCd2Ujv2ue89PHjbct0k5rKk0b7MzJq1vvlmvuDDqGEC9+NzGEdf2beEKbyBV3AOzbWT03VkW7APX8ID2BPS9K7Q1zcWarVheT6kKLZgAP2o4AbqKwRhHeFX8BgO4o7QsylUdo2HMLpdTBLx8lX5+QtivV5gHsfwUzy3QlApn1txH76Lg+nYjqHsvv2yvXtku8YkfX2EoFhc1LkwpXPyVNJ55R9b84uTX0SjdHoMVyvowV58X5YdTEeGB2oPf9mmR78ue+DzqklcjUuOjlT7xAmNLXdovvinwXx6+mvanc2l7SMpduNBfCcZHR6oPfRg6P/et/R+9lNirUcU5GWLgiCqDfZLR4YVjYb88pUsLixswwW8XcEB7BfC1mzvHrVHH1E9cK9M1BEVUlEsAx4EhbSvV7Zvr1qrLb86F1pTlwZjUezH8aS0uzNkVdV79qge2CePUUNQSFbJIIoKQVMqj/Tsv1fPPXup1WAMdyeYUElHkvFR1Y/v1tNbIyxbhIUfPe7y8EfNfePb6k8+DQqJEBLVakV214TKneNCtboN4wl6Q6VSrQxvl/T3C+syqfHzJ2i1dY7+zdKPf7KmZ3lcsrlPOjJMpVJFLUGikBDENC1NrrG5VBdjFJOEIv/AYolIJSNGoYgJkgQLscjr+dVZ+bW5VasrOjc//kPp6Ih0dETtm498gDAX5Neuya/OKfJuA4sVzMjz6/nFqYn84qRuuyVUe8otCD7yg8f0fPXh5VNw585ysUIQdIuoOzmle/4C3e48ZtPylGyTdz+jpyoZHpHtmpCFuKo2GRiQDAysKqsqFGgee1Xz0GGd0/+EE/hNWt4WW3B/fH8+C0LIPv1Jlf4+RUg+dBUFZEWhPTml/sunNI8cjXFxqYVf4XBaHpmIAc3WWLG4uCnGKN2+TXVoUBB1BRGZKFVon3vX0qHfaT7/R/nk1IKieAm/xtspuriOWTFuLeaujeWXLlfj5r5Q+cRuSZYKSSqIkjyXLy6p//Z5S088E/N/vbOoKP6Kn+FV1FfOfRezSDCi3tgRQpLaPiQd2irrrUmQLy5pnzylceg5nTdOdnQ6p/EMfo8FFCuEsYzlFeTy7u58bm4oLtVDZWJCbecOCRpnzqo/+az2kaPi/MJ7+AUO4zIKpaK1mMaL+HucX5hv//llnVOntSW6gu6Zc1ov/UU+O9fCm3gBF9cSrC8BLNeNDnbGZvNjyfgOyeiwuNTQfPm41gt/IMbX8RSOo70RYcQlDOMLyaZaWjQbIZ+e0XntTd0zZzt4umzvr1jdiLCLEdwtGIzzC2kxOa3z3nlxdm4Gz5bquusnV9wcBd7B8WJmdrC4fn1MVhVb7Rt4C2fXW11B4taYxWux076k3mThBs3mtOWafP1WkyobEL4lxisxrl5nV/B6mQ03xe0UNnEec2v+zZWhmP9fCJXWrq35voEZN9mM/5SwWappWC7L85ZT5Zao2BitkqgXi26xu/8NYbu0Gkul8f8lbJXKYvl+W2wUQ5aTvFMqzTcanG5It1wecrxrOQfP3G7wvwGnSAb0Vqv1pwAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/bigdots/marker_BLACK.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAACNklEQVRIx63WS2tTQRjG8V9OS62tF7TesC2IuhFRRKooCiKKuPET+NkU3ImKqCBuFNSFqFAtRfB+W2jtzdp7mrSNi5kDIT1JmrQPDBzOnPznfWfe95nkrFQ79uEUjqMHm+LcLH7hLV7iK/LlP26pgG1HH87hDI7iALqxGzviN1uxBa2YxpwquozbGEURi1jKGEWM4T6uZEXYhfO4iosxkiSOXMZI0IFd6IwLj6eRbsAF3MM/lBoc03iIS2hN4gH04Sw2a1ydOI2T6Eriw4mYdtIEMIdtkXE4wTH0NgGqVDeOpCnvWQfgTvSkp9W2DsA2tKel0czeVSpBkmBKjUpvQPOYSTCMiXUATmIswSt8WQfgN/SnwAHBSUpNgEqC4wxgoEXYv5LgIN3Y2CBwCo9xF+9bhMaeENyjK0LbhA6oF9kMnuMaXmMudZvFCEyEIt9rpVdWqoh3uIVHMdLllrLV8hgR/O6gYGG1ovyBG3iAP1jO+iiH/bget6GaZeVxB4dUNEVWWrMxnd4Iz9Ib3MQLFMonslpuEU/jyFtZSkU8w5NKWDXgcozys1DwxYr5UXzAUFy8LjCFfoopjZa9n8ZgXKyQEX1NlxlDP36XvRsS7uSqvV8POCiUUqoR4UCGmgHm8VO4HlONx62YbAYopva3Yg+HZRzGaoH5GM280EGTwt1dVa3qayGCOgQzKKwVWIiplmKkpbUCF2JkpfhcU6u57ZaFbikI+1hT9TyP8H9wCd+FGvxY6+P/HemxVWHOUAgAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/bigdots/marker_BLUE.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAEx0lEQVRIx6WV628UVRiHn3NmdnZ2uu12291u67ZQATFeMGAoEImRGGM0ftDwTf1oov+GX/zmn6AxRki8RRQjYkIwarhoAgiSYEEotNvtddvudi+zcznHDzPVtkDr5U0me2b2nGd+v/d95xzB3WEDw8AB4ElgEEjH/zWASeAScB64CbirFxvrYD3AXuAZ4CDwhBDGdiORLkrDLqDDHKgeIAN0ASawDDRXAGId8AXgDeAQ0G3IlEh1DgnLGQAkXmuaVv0OYdBUQBU4A7wHfL0CMOPfXmA/8BpwyHaKuUx+P1253XRktmIm0oAg8Os0a+PUKpdldfZ8b6sx8TTQip2eAeZMIAnsBt4UInHI7ujP5Aafp//Bw2T7DpJISqSM3qoUBB4szp1jOtXD3PjJrNucekkrrzO2fdoAdgDPAq8mnYFMrvic2PLw6/QUHkdIG3QEUgq0BiHBSWdJOv0Efot2czoR+LU8MA5cM4F9wAiI3q7e3RS2Haa7sA/LAtcFFYJelXAhwXLSZPr24nttvOacaDcns1qrEeCsjO0OSWmRye8hm9+HCjXtdTCIxkqB1wIVarJ9I3Tn9yBNG6AI7JLAsJBmv50u0pl5iKTjAIIwjCA3Lr7NqSMFLnz3MuU/jka5DEEgsGyLju7tpNJbkNLKA4MScIQwraRTwLS67uqj0ugH6LDNwvQPjF1+d61cwEx0kkz1IwzTAmwJSLSWaEAYCLnWZug30FpH01BrXiYkCGFGdK0lRA1R0zpseq05vPYCKrYqYqk7R97BdgawnQEKw6+sAaoQvPYCXmsOFQYtoG4CM1qHi61GabjVmMD3PaS0IlcatjzyFvmhFwFIpbesUgZhoGjVSzSX76B1UAXmjfgryWsdPCaNJMlUAadzK2bi78IkrAwJK/OXsoQVVbtSPsPM2DGWF68CnAO+NOLdogc4ELSXEmhEZ8+jWHYXWq0vUaTMMBSNWonS6EdUJk/rMKi3gc+B40b8yWggo0K3GAT1lFYa2+nD7sghZKQGwDRBmlBfukn51jHmxr/BbZRqoE4BXwDXDCAAFoF50L2+Wym6jbIlzU7R0b0TaSSQyLhIIb5XZ+rWV0xeP6IbS7/XQf0IvA/8AjRX9sMgAiKB/jBsPSDASNh9JO0clu0gJPhener8ZWbGjlGdv+Rr5V8FPgW+BWqAWgHqOJezQKh1sMNzK7nQbwinc5h09xBSQq0yyuT1o1QmTxN41dvAh8BxYBqiJpXrcj4FnAR+DrxqdaH8PbXKbwQehAHUF0eplE7hufNt4FfgBDCxGrD+CIDo3PCBIRW62+yOQZKpAcKgQaX8E7MTJwB9EfgYOAt4mwE1UAYKwFNGImWEoSvcxhS1+Qs0qqM+8El8La1Y3QwYAP3ALoHI+l7VaDdKNJZv47vzM8Bnsbpg/WKTe4cCrgNn283ZrOctFgUJlGovA1eAG+utroTk/jEPXFDKKyu/SejXUIE7RXQmL95vkbkJ8Aro2Wj7AqK2uhh3wz1jI4UucAeorHpWiVNR/S9AYmsLq+6XgRnuUYx/CnRjNS0gjMdLGy0w2TzaMcgB6tynuv8G6MVWdaxU/19gO1am4/GGsVkOIWpyP1YabjbZ2BQXHQ8hMEbUg6MbTf4T+EsOpg90zI0AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/bigdots/marker_GRAY.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAEWklEQVRIx6WVy28bVRjFf3Nn4kdm7HHipnXtRGpDFo0iI0QpVCBElRUSfwFskfirYMGOlxAqErBAqEJqeKhAlCA1xorsPGicEON4bI/nfVl4HNzEiXkcyfLYM+fMOd/33XsVziMF3ADuAs8D84AR3+sBvwO/AN8D24AzSlbPiM0CLwCvAa8AzyqK8kwymSxpmnZNSnlFSjkLmEAW0IAOYA8FlDOCrwNvA/eAnKZpimmaimEYKIpCt9ul3W7j+34EtIGHwLvA50MBLf7OAy8BbwH3MpnMlVKpRKFQwDRNkskkAJ7n0W63OTw8FPv7+3nLsl4F+nHSh8AfGpAEngPeEULcy2Qy5uLiIsvLyywsLKAoZ0PA/v4+6XSa7e3tmU6n80YYhpk49jcqsASsAm8ahmHevHlTKZfLXL16FU3TGIdUKoVhGPi+T6/Xm3Jddw7YBR5rwIvAHSBfKBRYXl6mVCpxGRKJBMVikTAM6fV6imVZM1LKO8CaiOMuqKpKoVCgVCohpWQSpJQUi0WuX78+TFICyhpwQwhRyGazzM7OMjU19RTxwYMHPHr0iPn5eVZWViiXy4PxUBRUVWVmZgbTNGm1WnNhGM4LYFoIkdB1/bSbo1hfXycMQ3Z2dlhbWxsbX9d1hBAJICUAIaUUAEKIcwTf95FSoijK2FIMObGGEIAlpbRt26bf758jrK6ukslkMAyDW7dunbvvOA62bRNFUR/oasBhFEUty7JuWJZFGIao6t8r8vbt2ywtLQFgmua5xliWRbvdJoqiNnCsMlglc1EUrWiahq7r5HK5pwY6lUqRSqXOudvb22Nra4ujoyOA74DPVAa7xSxw13GcKUCZm5sjmUyOXSWjzjY2NqjX69LzPBf4BLivMlgyEjCDICj5vp8G0HWd6enpsYKtVoutrS2q1SqWZVlSyq+BT4HHKhAALeAYyPf7/VKn00kkEgkln8+jquqp0yiK8DyPSqXC5uamPD4+7kopvwXeA34E7GH1g1hQAIUgCIqKoqi6rpNOp0+H3fM8Go0GlUqFRqPhR1H0K/AR8CVgAdFQUMa1PALCKIqW+v3+Fc/zlFwud9rdZrPJ5uYmtVoN13XrwPvAfaABRMSORnEAfAX84DhOu16vDzt4Klir1bBt2wXWgS+AvVGBs0cADM4NH1gIgmAxm81iGAae57G7u0u1WgX4GfgAWAO8SYISeAJcA17WNE0NgkDpdrscHBzQbDZ94MP4czKMOkkwAApAGZhxXVe1LIuTkxNs2z4EPo7dBWfJ47fkwVt/A9Z6vd6M4zglIQRhGHaADaB6NuoQgotxDPwUhuET3/dxXZcgCA4YnMmti0jaBMEN4Ghk2zqKG3JwEekyhw6wAzRH/mvGpWj/F0HiaH+O/O4Ah4xpxj8VdGI3fSCMr08uI2hMhhsLTQNdLujuvxH04qgydir/r6AbO5Px9aWYVEMYDLkfOw0nPaxOlBscDyFQYzCDlcse/gvBjuVbtMF8agAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/bigdots/marker_GREEN.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAEo0lEQVRIx6XV3W8cVxnH8c+ZmV2vX2I3tvPiOm4jEnrBS5WiJq2oEBFCCMQFqHfAJRL8G9xwx58AQggqAUIEiii9qIIoSlqQ2tIS0QZo0zRunNiJHTu217szcw4XOw6J82JentVoZ2fn+Z7f8zvPOSe4Ozo4jKfxKRzCWPPfBj7EG3gV72Lr9uR8B2wST+KzeAaPh9yRYsxs1nEg1aZFk5jAOArcxOY2IOwAfhHfxEk8FIaFsbk8DM8kMrausHExqTdTxCrO4Pv4zTagaL6n8BS+jpOd2TA9+VRm8lhu/NFCaywQKNejmx9EK2/W2fVX41T3UvwMuk2lZ7BUYAjH8K3QcnL4YDYx84XC3LOFqWcynWxIJgNR1NO3/Ert0mTl8ovl3u5C+nLs29OUfTrHUXwOXxueMTHz+SIc+caw/Z/oCJ0oSermE0WZYM/ejs7BoOxG3SuxVa7Zhw/wdoETOC6YeuhYbu7ZwvSJwpCWrr5aRLpleSbojOWmn8z1ey3dpRS6H9Z7U0zHcTZryp3L2sHUE7mpE7k6Vbo2d8AgiaJNXVWqTB0vTD3RknfALD6Z4XBWODg6G+z5aMvIyBCBWg3Ofafn1IF1L3+l6+JzJQwGCsFwu238SGb0kSBrh304lGEkFNqdA5n2eLirk977YSX2gqU/RH/7XnWb1kG09mQ6B3NZoY1OhiylkCXIk0y4o8xqg5QSWRJiumOwTBg0XiIlGbIMa6lOm72lqL8cG98IjdLHv9vWmcl0ZjKzXy3uANai/nKtuxTFKnWxXuBqqq1szMfDm5eisl8J7dCUlRz9dsvDXxqs0JFHslvKgqCMlY35aONilCqruJY3q2Rfqnw8H2LoQDD6aKEdWioDz1oTQWvi394OGRLVrp6pXDpVWT1Xwyv4Vd7sFpN4un9DKwlh4mOZznghhvqurSgIitiyPl9578elK6erVK/r4Rd4Pm+WTMJE3Aqz9XoaTonO/szodEsmu9VCLW0tubV3S++f6rn820p3Pq2JXsIv8XaOCiu4JpnqXU+z3cuxne9JYfyxoGgFssEKCXXQX69d/HXPhZ+Uae2dtC56GT/An7G5vR9WuIYMB6uuhwn50H4607nOyEBpf722/ObAt+U3YplK5/Bz/A5riNvA1Hi5iDpVjvaux+lyQxg7nJuYa8tkls/3XXiudOV0VK6m9/EjPI8rDPot2+H5Al7En8pVq4u/j1b+Wunpq9RWz9cWXqr1rsUe/oIXcOl2wM4jgMG5UWIubqWPjB4KhmYoN5LFP1YWXqhIXsdPcRb93YAJl3EAny6GszxupbC5kCy/Vrt5Ppb4WXPd2C51O4p7AGOj8h/458Z8fMyZ2M5HM5vzNSzhncaeamfyvYDb0L/j7NZi2luupFmtKPbcxFvNYP17JWbuH9fwWuyny9VmUK1Rb1kwOJNX7pdU7AJ8S7KY0q1taxGvN+XeMx6kcAsXcf22Z9cbK1b/F6CmtOXbft/EVfeYjP8UuNWo6aJu7m88KKGwe/Qa0AjW3Wd2/xtgvyk1NUrT/wvsNcpSc//A2M1DBk1eNkrr3V7Od8UNjocaFwx68PyDXv4X2kX/11RYDHEAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/bigdots/marker_ORANGE.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAEvklEQVRIx6XV649VVxnH8c/ae58zM9ymc2GY6QAlgm2qYqgB2hSNxDRGo4mmvlLfaaJ/hYlvfOefoDGNNvHSiNZYa0IxaqFF01JoIyKtLR3KZS7AGWY4c87Zey1fnE0dply8/JKds/fZe33X73nW86wVfFCD2IHH8AlsxYb63TLewwm8jLewsnpwvgY2ir34NA7g43lm54Yh04MNW6poPCajGMYmFLiOGzcBYQ3wc/gmDuK+oUFh2+Y8TN2XZBmXrnFuNrnRThEtHMUP8JubgKL+HcOj+BoOTm8O448+nNmzM/fARGHDUBCw1I7enY9OvlllL5+OYzOz8VNo15EexVyBAezBtxqFg5Oj2fBn9xae/GThwO5MZoCQ9adNkazrpdcroxtLz/+1N3JxPn2hW9lYh30kxy58Bl+dGjH8xN4ifP2JIR/bMWiwGQkJVf8KEcHIhkGTI0G7E126FhuLyzbjXZwusB/7QjC2Z1fuyccL+x8q0CB2ySMx9R1mgRRsaOb27sp1eg1zrRTem69GYkz7cCyrw93WbASP7MztfziXUtmPIKyC0b9PkawtKe17qPDIgw2DDTCN3Rl2FJnJ6dHgw9sb1g0MCAGpAt99qmPLV5Z86TttT7/Qq2sjClnQLJp2TmW2TwTNRtiMrRnWFbnmltHMpvWhH9Yq/ej3pU4Z/PFU9P1nyn+/qNdp41BmcixXZJoYzJClEDKBPEukcEuYyyuklGQhiVW6ZTIpKApSIvWnyDIsVlW6MXctutKKiLfU/Pe+0TQ1lpkay3z5QHErMERXFitzraisUhtLBS5X0dXzc3HHzOWo2y01G6HPS8m3v9jw+f39Dt0+kb3vTAhiKp2fi85djspKC/N53SWby8pHBxpsGQseuL8QNNDP2fD6YHj96twOkCpH/1Y69GLpjbcreAm/yuvdYhSPXVvSEEL4yPbMpnWFECofVBA1nJ8r/fhwz5ETZVpq6+AZPJvXLZMwvNIL00vtNJQSEyOZ8U2NejlrcGiScm9d6Dn0Ysdvj5fOz6XFmBzGL3E6r+O6ivmUjC0spukLC7G5cSiFB7cGjTzI8n6HVFWw1K78+mjHT17opb/PpKUY/Qk/xF9w4+Z+WGK+tjPZ7rhfFvKJYcaHc+uafadL7crJN0uHjpZOnI29XuUN/By/wyLiTWCqczmLqqzsWliM48srwo6p3LaJJiFzZqbr6SM9R16LWsvpHTyFZ3HpZr1lazJ+Ec/jeGtZ6w8no9f/WRK6qJw5Xzl8ojLfih28hucwsxqw9gigf270sG2lmz60dTyYGmV5Jfnz66XnjpdS8ip+imPo3guYcAFb8PjQQJavdFK4eCV55WzlzEzs4Wf1dW1Va90VWGISuwMjraWYn19I3rlYmW+5jF/U7sq1gwu3V8Q/cGy2lUauXk/TjUbU6bqOUzi7NtSbytxZ83il20sXbnSDxWVWui7qn8lX7zSouAfwVEpmU3p/25rFq3U13FZ3c7iCc1hY9d9CnYrW/wJUh3Zl1fN1XHabxfhPgSu1m7b+DtHSL5U7qnBvdWrQOiy5w+r+N8BuHWqqnab/F9ipnaX6/q66Vw7pF3mvdlrd6+P8nrj+8VDhbf0aPHO3j/8FkZ/6Owu+hIQAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/bigdots/marker_PURPLE.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAEvUlEQVRIx6XV3Y9VZxXH8c+z9z5nXgpzOjDA0GFglNpE1EpNgcZqJMYYjYma3qmXJvofeO2Nd/4BXmiM0SZqjGjV2osGowaKGFqoaDuFpgWG14EZhjnzcs7Z+3m8OHuQjsD4spKds/c+z/o+v7X2WusJ/t0GMYVn8DHswqb6vyVcxms4gbexeq9zvg62BU/jU3gWT2byvU2bJhoGdyTVWBK3oIURFFjE8hogrAN+Dl/HYTw6YCg8mk+GzWmnINN2zVy6oJOWIxZwDN/Hb9YARf27FYfwVRweDRNjU9khu/L9Ros9BsMmBJ3YNh8vmqnOZO/GE1vn4qVPYqWO9BhmCwxgP76RaxweycZb+4rP2l88Z2/2rGwgI6u3jehyvnrFcLnFP3ovjd5OV78QdTfXYR/N8Tg+ja+M2Nn6YPGZcGjoax4b/LAiDgoJVX3FfpKGB0dtDuN6ccVivNZYdWcbLuKNAgdxIAhbJ/P9niyes6c4KGtQdgmRmPoCs0AKNPJNJvOnlY2OdpoNt6vLoynFAzie1eFOFqFpV/6U9+UHpTKJy31FazD69ykSVlAmU8UBuxtPaRiECXwkw1RQjI+ECeOND2gODCOIVR/y2863fau9w/dWvuSvvefv5jILQdFsGsv2Gg27FaG5DbsyDOeKZivbYSiMyNYV0onyh6rQcS7+0dHyu3ffry0bzDZr5eMyRRODGbIQUhYQUi4F0j1hdi2RkixlqhTfs1kKFAokpAxZhjsxVcuLcVY7zgm1T6glfLH5Ha1sp1a200eLL79XfmSxmtOOs6pUrqBd4HpUzc/Hmam5eEm37CpCs5bAJxrftC//fL8vs9134w2BWEa344y5eEFULuBmXnfJtqj8UG5AK+ywrdgjNIJU9v2HQstQaP1L2QCp4p3ymNPlEZers/AKfpXX02ILnllxu5EFYTzbZ6gYEar1rd5XFhrRfDnjZO/HpsujqaPdwS/wQl63TEKrDKsTq6k9lCQj2XabGmP9tqtLKGuScmZ7bzvdOeLv5e/Mp5k7SXwZv8QbOUrM4yZp61K6NbEQrzSbaXPYHp6QhYY8ZARiqHSqtjOdXzvZ+0m6nt5sR/FP+AFOYnltHpZ9oAzjPSuPhSB/xHab8zGNxjAZnartUnnGmfKIS/G1XqV3Fj/H73EHcQ2Y6lzeQBWVj7fjrbGepTCWT9nSnBQyrnWnneo976141EpaeBc/wgu4Vo+Ou4Npza7iJfxl1cLCufgHl8u/Cd1+HmeradPVy9rxZgen8SIu3QtYfwTQPzd6mOyl1fe3wi4jduqmJefLPztbvihJr+KnOI7uRsCEK9iBjzezobyTVsNiuupidcr1ON3Dz+rr9lqoa1bcBxhrledwfj7OPBHjseZw9ohb1QzM4s06PeV65/sB16Bv4Xg73RhdSvMTRWzo6Szi9Xqz7v0cMw+2mzhVpu6VXli26o7S6lX9M3n+QU7FBsDXk3RDSuqJdgOv1uHe1x6mcBUXcOued7fqVCz8L0B1aHP3PC/iuvt8jP8UuFqrWdEfEQv6pfJAK2xsnRo0jLYHfN3/BtitQ0210vT/Aju1slTfP9Q2yiH9Iu/VSquNFucb4vrHQ4V39Gtw+mGL/wm6D/XwTcXLOQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/bigdots/marker_RED.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAADVklEQVRIx6XVW29UZRQG4Gf2TCtUsCktUhzARpBEowaMHKIxoDFGY4zGO/Ve/4Y33vkXjDFq4ikaSFQuDEYNCCaIoAmg4IlDobRAS1umM53ZXnxr4qTudoy8yc582etb77zruEv+jWUYwU48iHVYEbYZnMdRHMIZ1DqdywvIVuEh7MIjeKDMxhVUl7GmyVAr3enHbajgOmYtgqfwES6jsZz5zTR30XyM5j00+2iigXHswbOdBJX4HcQOvITdVYZ2YAvujHhLmMZfOEZ2iMGzPIobEekBXK7glvB9pYfdw/Q/iRci5qwgjO8iN/sYGOWZOisj7P1lbMLjeHEt/U9Qehn3RXWKMIDhkHaRnilWh/gTFWzHthKDW0LZdktjRVRuLiW7dJ6BFttwMItw1/dia5DluiOXGLb+E0kV92cYqTBcxd3oiwK08RrW4Dm81/G+hF5sxIZ0Xo11Gfoq9K6JxlqItyK0r/FGgX1l5LOS+JdlyPIoZrnAYSbCy9AqsFfCHhxZhqkms5dxpcDhdayN5/kC+5VUGPOp6NMVXGpy9RwjZ1GP3LTxKp6O84YFZC2cw5+JcBLjGQ7nnK5JrX6gILQNBWRwMJ5Iy284Upa2xSrsvEYPSvdGgUqK0Vb2DvaTT6e6fYy9ZWlkcvTXqE6zPMftGFqE8Aw+xWeJeKrFl/gEJ8opfFcxnjM4QfUCvSspbZYkt+e5KS2IPXiX/CTTLb7Bm/ges+1OmZfWUYbhG9yBcltlX1yaxrFQd5RGg5/xIb7AFFptwjxyOYbmPJsmGJqhNIL1cemUNC37MckfeBt7cbFdy4XbaRT7cHiSya/wU4fxlJSs8VSEH/E5znYSLDYcDayvcdc6qaln8G0w5PyA96Nr6t0Ic1yQdsLDyynXKI3iSFLZwAfxXLOgbSsFhK0Q9CtOn2PzAXpvjd6TJu1kpGd+oXMRYZv0FxwcY+Aq1R7MpS/c8fizepFjZnGM40idC7PRE7Wk6qjUt4WodCE8njPWscHHpIKMLua0lMKatEgmOt5NRCom/w+hCK1zTV7HJQXF+K+EtVBzQxrlSalVFkVFd8wFUZ80zvWbJaxHqHkozW+WcC6U5XFeEt1ySGryRihtdrtc7kqXPg9N/C714KmlLv8NKi0QyKg3J34AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/bigdots/marker_WHITE.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAEp0lEQVRIx6WVTU8bVxSGn/nwYCyDayCxp8aASpJFmlS4AhMVVY2qKGrURSJ2aZaVmr+RTXb5Ca2iKkHql+omVSgLRJRGBFqJUBKkxK1QARtMsA2YjPHXzNwuPKYEE9yPVxrN1Zw5j95z77n3StTLDfQAZ4B3gU7A68TywAowC0wDC0Bxb7KyD9YG9AMfAEPAO4qi9Hq93pDb7Q5YltVh23Yb4ANaARV4CezUANI+4EfAp8BZ4I3m5mYpHA5Luq4jyzJra2ssLS2xs7NjAzlgEvgc+LEGUJ13OzAIfAKcDYVCHYODg/T19dHd3Y3X60WSJAzDYHl5mbm5OXl6ero9kUi8DxScSieBtAo0AX3AZy6X62wwGPSdP3+e4eFhhoaGkGW5bpKnpqZoa2tjbGzMn0qlPi6Xyy1O2RMKcAz4ELis67rv3Llz0pUrVzh16hRut5uD5Pf7CQaDFAoF1tbWXNvb20eAZeCZCkSBAUmS2vv6+hgeHiYajXKYvF4v/f39lEol0um0tLKy4rdtewB4JDvlhjVNIxKJEI1GEULQSEIIBgYGiEQitUpCwGkZ6FFVNRgKhTh+/DgejwdJ+nvxr127RiAQ4OLFi4yMjOx+lyQJTdPo7e2lq6sLTdOOAJ0y4FFVVQsEArS2ttY5uXnzJqVSiQcPHnDjxo26eEtLC8FgEFVVNcAtA7IQQgZQFKUuIZ/PI4RAlmVs266Lq6qKEAKHIcvAtmVZO+l0mo2NjbqE69evo+s6uq5z6dKluvjGxgbpdBrTNAuAoQIvLMvaTCaTPYlEgnK5jKZpuwlXr17lwoULAHR1db0Cs22bZDLJ0tISpmnmgIxCdZccMU3z7aamJgKBAN3d3a8sjM/nw+fz1bmbnJwkFosxPz8PMAX8oFA9LdqAM1tbWy5AOnnyJK2tra9AD3J269YtJiYmhGEYJeA74K5CdcsIwFcsFkOGYTQLITh69CgdHR0HAhcWFojFYty7d49kMrlt2/Y48D3wTAFMYBPICCHas9lsaHV1VWtpaZFOnDiBy+Xa3c+WZWEYBnfu3OH27dvi+fPnhm3bPwNfAL8CO7U+MYEMIAPBQqHwJqDUXHo8HgAMw2Bubo5YLMbs7GylUqnMA98APwHbgF0DCmcu1wHLNM1j2Wy2I5/PSz09PYTDYQDi8TgjIyNMTEyQy+UWgS+Bu8AaYOM42qsUMAb8ksvlcvfv3+fp06e7wXg8zvj4OJlMpgT8BowCib2A+q1RvTcqQLhYLL7V2dmJruvk83kePnzI6OgoQojHwFfAI6DcCCiAVSAAvNfc3KwUi0UplUoxMzNDPB6vAF87z1at1EZAEwgCpyVJ8udyOSWZTLK4uEgmk3kBfOu4M/cnqxwsG/gdeLS+vu7f3NwMuVwuSqXSS+AJ8Mf+UhsBcdpoplwuRyqVSkiSJIQQKap38ubrkhoBnwgh1vec4OvAY6cbDpR8CLAILAHZPd+yzlTk/gsQp7S9h+RL4AUHLMY/BRYdNwXAcsZbhyWoNFbJAXkAg9es7r8Blp1SheNU/F9gyXEmnPGhajSHUG3yiuPUavSz0hBXvR4s4E+qPRg/7Oe/AB2L5cbZTkk/AAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/bigdots/marker_YELLOW.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAYAAABfqvm9AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAE4UlEQVRIx6WV229URRzHP3PO2T2728u2dOu2u72hJZgQFCoUIqKESEJAH0h8UEPig5H4X8ibia/GxKgkSgzihWrQAMaKEcJFLoUQEORiW3rddtvt3nfPbXzobFMqdL38ksmZc87MZ37f3/zmN4K/WwDoAjYDPUAbUKv+5YEx4ApwHrgHlBZP1pfAVgAbgBeALcBTui6eqK3X44GgFnUdIp7HCiAM1AMGkAUKFYBYAtwJvAlsAxrMoCY6V4ZELO5D02Bi3GZ4sEgh53pAGjgDfAJ8XwEY6tkEbAJeB7bF2s3Ipq1henrr6VoZoq7eAAG5rMPwYJGrFzPaudPpptGh0lagqJSeAaYNwATWAfsMn9gWazPDO16K8MreKFt6G/BhAppa18PF4vxAmqbIJCeOTjeOj5R3W5asU7JP6kA3sB14rTXuD+/YHRF73+rg6XWNBDSQSCSuah4CQVNLiNa4ST7vMDlR9qXn3GbgPnBTB3YB24XgmedfbBRv7Ivx3MYmgloAsJFIwAPkQtBrhEksalAT0Ri9Xxa3fy8EpSQH/Kkpue0+v0ZPb5jeLQ1IXFyKeItA8yaReNiU8HDZuKGBnk0NBEMaQBxYqwFdhiFa2jtNup+spY4gApC4AOx/5x7NoV94eecVPj88oSLpAYIgAVatDtHRFcTn15qBNg0IGYbwR1sD1DcYyCWZdOCDMcplya8/pXhv//AiX+etts5HNGbi9ws/ENAAzZNoEtB1EAjEIpm5rIuUEk0D6XkPLCYQ6D6BlOC6aICmARnPlYXphEUqaSHxFgYDvPv+KlriJi1tJntejT4AlHikZspMJywcxysCOQNIuK5MjQwVu0aHS5Sx8C/Ilry9r41deyIAdDQHANAQSAQONqNDJYYHC7iOTANJXZ2SZteRa8yAxmNtfjo6ajDwI3EACNcYhGuMBc90TMDl9MVZ+g4luH4lB3AO+E5X1WIFsHlu1vZ5CLFmQy3hGj+CB2NWCYXEYCSZ59MPx+g/PiPzWbcMfAMc1dWRkUC4VJTxfNYNep4k2mHSHA4pgKtgPnR07o7lOPLFBD8cSTI6XMp4Hv1AX+WkOEAKSEpJ08y0HR8bLfnr6jWxen0IU9cQiIW4ZVybbw9PcvCjcXnrej7neZwCDgAXgEKlHjpAUlWBlkLeiyGEHm3x0RQzqTVMhIJdvZSm71CCgQsZ27bkdeAr4DiQAbwKUKpYTgGu68jumWkrks26oqu7hs5YLaBx806agx+P8/PxWdIpZwj4DDgKTKoDv1CXKjYBnAB+S6ec9MkfU1y7nMHFQuJw80aO/mMzJKesMnAVOAaMLAYsvQJg/t6wgfZy0Xu8rdOkdaVJ3nY51T/Lsb5ppGQAOAycBaxqQAmMA1Hg2WDI0EtFV4yPlrl8PsOtG3kb+FK1uYrUakAHaAHWImjMzDn6yP0yg3cLJKfsBPC18s5ZOtng4eYBt4GziQmrMT1rx3WfwCp7WeAacGep1GpAVBpdti1vvWOLuBAgpZxg/k5OPWpSNeA1KZmScqGcTQEDKhseatoywBIwDMws+jajQpH+L0CUtNlF71kgwUM2458CS8qbIuCq/txyEwyqW1mBQkCOR+zuvwFaSqpUnsr/Cywrz6TqL2vVYgjzSW4rT91qg/WquPnrwQUGmc/BP5Yb/BcIigb4wLuVrAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/dudes/colorlist', 'R1JFRU4qQkxVRSpSRUQq');
expand_3537250845($outputDir, 'images/markers/dudes/marker_BLUE.png', 'iVBORw0KGgoAAAANSUhEUgAAABIAAAAcCAYAAABsxO8nAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAEYklEQVQ4y42VW2xUVRSG/7X3OZ12ZnqbKaWSwlRSoBiMElvLRSrEFHnCy4MvIMQQk5ogxIQalfhgYuKDMZqYiA+kJQYxMQ0PYsLFQmKMEgixqQpqC0UuZaZ2Ls0w13P23suH6Uxn2hJcT+vsk/3tf631n30omUyiGERUkVuWBQAwhqG1wlwQmA3KwyomxmjEYvdgjIElJcKRcNWpU+d2GoP1odDy+89v33pSG4yBGdmcxpLmFtT6vWCeB2JjkIhPwu9vhDFe8eb+t14Z+e3mZ03LtgWJLyIeD7fs2/f64XQqk56YGIPXW4davw9AgSSKIKUNcjlGINgM2/bW3b4TPtC27kDwyedOoKV9P44f/+7lO3enO2q8QUTjhHxeoawTcyDXVZgM51BTE4QQ5AohozR7nLQsjI3fuBUJ34s3NdWju2sdfL6aUlkVpVmWxLJHGjEzk8D4+HjAdbOnJsePdU7fPb3Eyf7LRmeuhsPhGAA0BhpgSQKXkag4NSJCJBKp6u8/tO3MmbMf1wXWtHtqn7C1di02mp183LXMxLeH33v3m9WrHj3X1fWUsm25UJHWCqOjo+vP/nDpy9a1/W1LlveiNtgJAsCsycnHqhLhH3d/8NHAjr5929/YsmXjkNZ6Iaivry/088WRo22PH2pb2vYi7OpmMCswAAKBSKI5tBPC8jUNDLy/fmtP19Dmzc9AKVXZ7I6O1dV5s3xZoKUb16/0w81NozgUEhLxydO4fe1zkKjCVORuYzqd9pQbWBT7s3fv3lgg2KIyiV+RjF6ZbWQJBUAhfONrKCcJImkIVGHtkiKtFAFAJjMD5WYrPhdmhpQe2BYghB/Cakox2F0UVLYLQi5YhZBVENKCYYbWbGjee6vykeCproOgKjAYIAFBVDIeMyCKa/MPmmMIcnLTMhm/Bm0MCAKZ5HUkwhfAxoElBdi4SMV/AShNbMziICKZTsVHhm/9eTSitUoKYWPqn5O4+tNrUG4SQmi2ZTZ88/dPbvVsfuzymo61KPeRKDazoaEhPTQ0dHDXrt2f5rM5lc9FIUhC6cLJM4kojFZfnThx/IUjR774PhQKwZSpKimybRubNm2aWrFiRZSBGsv2Q0gbRBJgBosASPj/2LChe7S1tdUtV7NgakopGGNskICQ1bBsH4T0zHZagaGhlK5Q8uDxA3kAqlCyArMGiKCcGIxKZ+dM+nCQB1ywhXKzMLrCdy4eEIuBUiA4BUdYIBKzHnJh27LC8Q8D2UQkgYL5iiCA4Tj5isvsYaBcsQStXTAXrgkpPejt3aF8Pu+isMVAgo0ho/MgIQEwCrmNV/fscerr6/+fIq31FPh+9u/L7+D+zA3kMtHJvy69jUxynJRyCQAcxyldaMWw5kHQ09NzJZVKfTg4eGzV090b3Zd6D54dHBx4NuHqWsKOCSKBWCwOr9eLhob6UplU/ssu9EJCKYXh4WG0t7dj5cqVOH/+PJx8njq7Orm5eSkymQyklLBtu7TvP5UpFoPA/pOQAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/dudes/marker_GREEN.png', 'iVBORw0KGgoAAAANSUhEUgAAABIAAAAcCAYAAABsxO8nAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAETklEQVQ4y42VW2xUVRSGv7XPOR2m09IbvYCFAikWjIkSW4tVS0iAYEzQ+GBiEAgxGEy4GG/REPXFJ03UxER9IJQQFR4aXiRctDUxRk0UJXhLoKACxbZ0emHa6VzOvvgwdJhpS8J+Otl7r2//a/1rny2JRILpISIggANRgu/5ADjn0FpzayM46ygc/vSHNZbhqyNYa/GUz8DgQMmJnuObrZjVSxqXTGzo3HTMirmAg7RNUb+wlrLSchxuJsgRvzJOeU0MV2bV3pf2PP3b5V8+rF+navgxynD/WMPO55/bn0xNJi+dv0isIkpZrJybHNQ0yFhNyiWpqa8mUhbM7x+6srdlb1DT8UUpTbuzHD1x+Klro1dXxmqjjPqDpHUaQfKp5UGhCRk2/ZTVRRFRofJUPFcth+d79F26cHnwv8HRBRW1tN/bQVk0lk+rKDVf+SyqXsz42Dh9fX3VYUp/+e8h0zpwMl2buW6dmeLPgYGBEYCqymp8CXBujmJHS6M0LGwo2bN7z7pTp0+9V9lS0lx5XxCY0OKaheyo2/H2u/tjWW/qyIplLV+1PfCgpkCRTNtvjaWn9+v2bbufObpsp1q6cENAVWtukzOQHXFc/9byz0ET37nx5RfeePGtbmP0bEW7du1q+uHsdwdaXvGXNj7pEakDN71PQDzhrs0+XowFB988sHpt2/ruhx/pyPdXvtgr7141Ty8eWVTbHvD7q47McEH/eTB0Evo+0qgSx2B/vCqZnIyIzHBNRNi+fftITUOFTvzqM3bG4Zwj764AWnHlc0s2AeJhRcQWdvatPtJGAKbG04QpQ+FpOFARwcNHlQlqAZPOEc4JKgpys6e9EkH5gnWgHVZmrKuCeBCIzA9QEcE5hygQvzhAFCiZdc4tkCgkPey88b9CrDWIEiYuOoa/AZsFT/m4rHDje0ElEWPtbUAeyRtn6bl4ID1otEmoAK4dM/y8IyRMgGd856dKB86/n7n86D3rflq5qgVjTDHIOUdlZWWyu7t735Znt3yQThudjlvEE4w1gGMsnsBqd/jIZ0ee+OTjT483NTVhC1TlFQVBQEdHx9CSJU1xB1G/TFCBIB7gBKpDpNz9saZ9zbnGxsawUM0s17TWWGsDUeDNgyCm8CK5yjotYEAbXaTk9vZDBtC5YIczOTf1CJgkKeZw7HagiLt5B8OUxYRFp4dw56BJgSyA8gW52TQuhMALiju+YPhzzAUieIKgFHkQDjLpbO4O3qGi9HQKJnRYnQv0IsLGx9brWGlsTthcIGUtYjIO8UCcYDMOFcDWbVuzFRUVd6bIGD3EBKlzr2e4cSkkFdfXzr6WYaLPiQ5zf4hsNlv8YM6skTGGzs7OM5OTk+90Hepa0f5QW/j4vvtPdx3sWhs3mXLZxN+ihPhonFhpKZUVVfk0pfDJBvA8D601PT09NDc3s3z5cnp7e8lkstLW2urq6uuYmprC8zyCIMjH/Q8cmfiipI4L6QAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/dudes/marker_RED.png', 'iVBORw0KGgoAAAANSUhEUgAAABIAAAAcCAYAAABsxO8nAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAD70lEQVQ4y42VXWhbVRzAf+fc3LRplqSm29p1tcHSrltBnBho7UM3cQzng4KIDuasgvhkN2H4McQ396KigiAMxFVxFqXsxeE+aF+EMZDpEFeHdp3WrWRt0jbefDXJuff4kJv0pt3c/nDhnnP+/9/5f51zhGVZVEUKUfsXQmD4fABorbGVwrOI4zh4xVf9UY7DH4sL2I6D9BnMJ275L5z+4SlZVg+3d3Zm4k/uPWXa+k/QiFyBzs2tNIXDoPUakHa4kk7REQzR6iDfGjn03NzPlz95HFouBgJMpZNtI6+8+k4xk81NXb3KpsYgwUgE7YJkFeSUFSK1zNZoC1GzIZyevXnodWj5BhgpFLg4evKZlX/mtnf6GglNzVC2MrCaiVWQLpXYeGOBrkAIpChLKVOArrp9fWZmNjE/vxTp2MKD+/YSCIdqYdWFJv1+ott7WE6nmZ6ejhZs9f0oxM/ApgXQeZhKJBKLIGhuiSICjV7OKqgpEGBLa6v/tZGRx86dPftBrxDdD0lplh2HbmAJXn7/6NGgYVljD/T0nn9koF+5DlfEsiwsy2I5nWb82+/62xB/vQv6x4oXOg86A/pv0F+C3gXJY0eOPJvL52u2lmWtgp7fvz+2rX3rbx+Cvgba8nwZ0DdAL4MeB70jGj12fmKCvAdWS/a2vr7G+xeT7f3AG0DS02wGcAb4FPADN5eW7stlsw3C08Cy2sXDw8OLbaGw+gW4JCSa1eoKQAEnAasCdoQQda1d80gpJQDSQF7UtQgaaADwSTYAGyGroXxbkNcIY900fsAnBLqi46xd93kHAggDDY6DdncRdbvo9XNrPZIgkmD8DjiuwTVgUkpKrmJJCy4AORBrT38NZEDuspQTnwtxS4FlAqeAlwzJv4Bt+HU+GEp8JOVs3+7dP+3o7cW27XqQ1prm5ubc+Pj44RcOHPh4xdEq5ZadskIAKcfG9ptffT029vRnx4+fjsVidXdSzSPTNBkcHJzvjMVSQGADYLowDUS1TQh9pX9g4NeOjo6y15t1VVNK4TiOKYFGIFgtu9tHNmBXdO6cbI8UXbuasQAWK0ku3K5idwI1VNuiwJquWzf8f1AWKOHSpIcg/SYIcc8gU7gFkx4FDRSLpbpb8W6glWoI5Wqy3Hj37dmjmoLB2oV/N5B0QBRxSy8q2TeBFw8eLEUikXvzyFZqPgOFt4EZIKWZexOYBlG2bQFQKhZR3geTNYfWtm2GhoYuZbPZ90ZPnOh5NB4vH96589wXo6O77JWV0BNwXQrBUjJJUzBIJBqthSm8TzaAYRgopZiYmKC7u5uuri4mJycplkoiHo/r1s2byedyGD4fpmnW7P4Db6S8ywu6eSsAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/smallpushpins/colorlist', 'T1JBTkdFKlBVUlBMRSpZRUxMT1cqR1JFRU4qQkxVRSpSRUQqQVFVQSpXSElURSpHUkFZKkJMQUNLKg==');
expand_3537250845($outputDir, 'images/markers/smallpushpins/marker_AQUA.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAADAAAABQATL6qJwAAAaBJREFUKM+NkL9PE2Ecxj/v1Tb24MpCKvRScCAORtxYMBIX/wIHHDBpTCEhdZHZhLDIYFxMMCaOTDCwu7g4q7F2qD8CDL0zTuq7UK71Hpc701749STv8OZ5Pvl+v49hWPPAfWAm+e8DO8C7TA4DvABkRj0VFm6pcOe2zFhJgIBXQG4Q2ALk1msqf2/Kt6F8G6q835K7Wk+h12l4AVBxuaYpG6hiQ00kr2JDTdmO3MZKCt11gEXjunhrj+hjiAfGxkAPQ+lxA1PyAO45wNX87HXyfmUonEoYcuVxCjdvAFQd4K+6x4izZNBxBBA7QKvXbNH/3BquIZGD6H35SvTxE0DbAbaRur/XnyIJk+ka4M/6JvT7PWA79RqALi8tyrfB/5Z8G6j48EHa0Fp2+gYgb3NDVRvIt4HGXj5Pw89Ou+6tGfV0pf1BEz++yZmcFPAeyKeB7J1toqhuRorEnZCj3T2AFaB9VodvclVfuWszApoDt5+qpWRvAU/OCwNMA1ECzF0EcIADwAKlrHnpBCAGfgLdBDoXAPiVgFwUOARGTjL+AQ4/p9oY7sgVAAAAInpUWHRTb2Z0d2FyZQAAeNpzTMlPSlXwzE1MTw1KTUypBAAvnAXUrgypTQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/smallpushpins/marker_BLACK.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAADAAAABQATL6qJwAAANJJREFUKM+V0i9LQ1EYx/HPzjQJvgPRYFmxycBgs9kM+h5svgPzmiAIRpN7BxaLeWUsmLbVJcGiCG4Gz5Xr5dy7c3/wwDk83y/nb8f/HOEC+3E+xSNeKpwObrCqqTt0y8JtA1zUfQEfZ8BFnQScy89ZwF4LYSfgu4WwDJi0EF6hh4+MA3/hoDAvM4Sr6nLXDfCgbo/PCXiEzTqhnxBO193EUwke+/1nfwkJ4aE0HkaxMbvxClc4zHmcgBnesV1tbiSEJRb4jNJaAd6iKFeYYyvV+AGr+FdCKpDBgAAAACJ6VFh0U29mdHdhcmUAAHjac0zJT0pV8MxNTE8NSk1MqQQAL5wF1K4MqU0AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/smallpushpins/marker_BLUE.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAADAAAABQATL6qJwAAAb5JREFUKM+N0j9I1GEcx/HX/X53mnd5goJ4lGQZOaUR1NBgQrTU2GBDbdrQVA3REATRVjQE/RnabKmptaUlapEQrj+cQRYlWGSmXuWfvN/T0Ilppn6m5+H7fj98vw/flOU5gOPYWb2P4D6erOCkcAMhna4PjYXu0FjoCemahoCAO4gXQbiJ060dfXZ0XVC3uRnM/hw3Urzqw+vbcBf9Mbpxa2tHv87u6+JMTpIQApmarJa2w+Zmpk19GdyLZxF64zirfc85lQpJstRnkrCwQHvXWelMHo5FaKtv2q0ut2UZvJiQUJttlm/qhNYIlaQyK1gjgaQyB0mEl9Nfi8oTL8TRv2wUUZ4cNjU+BKUIA4TZ4cFLQghSqSV48fxm8JIQFn5hIMY4JmfKI0dmvo9q2X5UqPYXx7x6esankQdwHg/j6mODiMoTxYNxJq+psF8qxcfhe94OXYFruLzaeI/T6frQ01sKh06Ohdq6QsBzZBaBeIVQSpL5viiTM/dj1NifVk6htNYnPtqUaw3Zhl0Bxb/W5785UV24gIvrwbAN81Vh30aECO8wjfzKYnoVIcFnzFaldQX4VhVtVHiP3GqF38UYlxEyX7hsAAAAInpUWHRTb2Z0d2FyZQAAeNpzTMlPSlXwzE1MTw1KTUypBAAvnAXUrgypTQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/smallpushpins/marker_GRAY.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAADAAAABQATL6qJwAAAY9JREFUKM+N0j9rU1EYx/FPb7xJiSRLIIWAXAn2BTQgBCm6dXB10MFRHXwBDiIIzk6C4uDWyc01k6EX7GBxMBIyqVNpgsVwCaXk33UwkTY0tr/tnOf7PefhnGfF6dzAPVybrb/jPeIFzgpeIc1ms2kURWkURWkul0uR4i0ycxBe4/HGxobNzU35fB4cHR3Z3d21t7cH7/Awg5t4U6vVbG1tCcPw37VhGKpWq4bDof39/Ro+BbgbhqF6vW5Z6vW6XC4HdwJcLZfLCoXCUiGfz1tbW4MrASbj8dh5mTHTAN+63a5er7cUPjw8dHBwAJ0A2zhuNptLhWazaTqdjrCdwS/0+/3+7SRJrK+vn4IbjYZ2uw1P8CEz2/+MoNfr3VpdXVWpVECr1RLHMbzECwhOHPYcH+M4NhgMjEYjOzs78AVP51Bmod3OZDJ5kM1mJUkyb+UROv97wUaxWExLpVKKryfGZ2nu+ztwKZ6d+0GIMJwJ1y8iBPiBBMXF4qUzhCm6OJ5J5wrweya6qPATl88q/AFJ94NO+F5pZgAAACJ6VFh0U29mdHdhcmUAAHjac0zJT0pV8MxNTE8NSk1MqQQAL5wF1K4MqU0AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/smallpushpins/marker_GREEN.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAADAAAABQATL6qJwAAAapJREFUKM+N0j9IlVEYx/HPe997U+5Vr5MQYYZIg1BBIEGDtLSkU4EZNFrQVg1NgTQ1BA1BEjQ61dTa0hK0SITWYBAWJUQQKZeyq973fRq8lpr/vtM5PL8v53nOOYnNnMYo+pr7OTzByy05CR4giu1JdA2m0XUmjVJVIPAI6UbhIaJ3rBRDH8oxUqvGSK0aw3OV6LtWWpcea1qDmOi9kjp1v11aSYRMyJXKqZ6zrX7XGn5M5SfxqoCLaZn+m60aMiH7e2zIrGrov9Gq1AEuFHCk81iqfKi4KbxOLlfuSnUeL0J3AVlWDyHsRI5sOSAv4N3iTK72NlNQ/C+cStXeNyy8yWC2gEmhPj1eFxEShQ13vbaeHl8WDauYTPEdiz/n4tyv+czhoRa5HBSlpq4v+fK0AbfwbOPpdxAn7h6IS7XOGK1VY2CiZf0N7u0034tiexLDs21x/mtbtB5MAq9R+jfTZmbzFWOlCkvz4fNaK1cxaxeel7uTaD+aBGaa/2xXLjf7DtzeKww9WGkKA/sRCviIGjq2FovbCDm+od6U9hRgoSnar/AJle0KfwAvxJs0qwvOAAAAACJ6VFh0U29mdHdhcmUAAHjac0zJT0pV8MxNTE8NSk1MqQQAL5wF1K4MqU0AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/smallpushpins/marker_ORANGE.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAADAAAABQATL6qJwAAAapJREFUKM+N0j9I1GEcx/HX736ax516QhhESULRllQQQYO0tChNBjU0WuAQVENTIE0NQUOQBC2SNOQUOrUEEbREBNZwUlwRQkVCcUOp9+fb0F1cl/8+0/PwvN/P9/vleRL/5gTO4UBjX8IjPG/jJLiD6MknMTyUxsnDaRTyAoF7SFuFu4jx0c54P5OL8nwhyvOFKD3Mx8TpzqZ0X8MaxtSFkdTtiR75bIIa6nJdqVNHssq/ql4u1o/iRQZnc1munsk2wFpL4RpJ1ZWxrN4cGMtg8NBgak9/RxvcnK5uV19qaH8HDGRQW6k029wgCauVgHoGbxdKdW9KNXT8D0dq8VPV63c1KGYwE2FlcnpFRCDTQv9ZTz5YVa2pYCbFMn6UvsTI0rea0eNdJPW/t1+e+mn2WRWu4XFr8RuIm+M7ojzXF+W5Qkxd6moOd2uj8Z725JMoTnfH59nu2L0zCbxCZxNI24TiWsV4voul5Wi2chFFm+TJQH8SB/cmgYXGP9s05xt9B65vBcM+rDWEY9sRMviAMnrbD9d5WnV8xUpD2lKA7w3RdoWPyK938BtuPpbyaJoIcQAAACJ6VFh0U29mdHdhcmUAAHjac0zJT0pV8MxNTE8NSk1MqQQAL5wF1K4MqU0AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/smallpushpins/marker_PURPLE.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAADAAAABQATL6qJwAAAbJJREFUKM+N0j9IlVEYx/HP+75evHq9XlwEKcmhbKmGoIb+WBQtNRbU0GhBWzU0BYYFLZEQFEGjLUVDQ0EtLUEQUoE13CCsSKmgUO4QV73vexp8TS1Tv9M5nN+X8zznOZGl7MIJbMz3Y7iH53/lRLiB0BKVw6akL/Qm+0NRJSDgNpLFwk2EPYX+MNj6IQxVamGoUguXS2Nhb+HMvHRHbvXh1u7klGPl65qjkpAiozlptbl4yHSj5nM2sh0vYhxv1upg8TypuXBOSNHgQPGconY4GqOnK9mqo2ndkvCf5jLKSaf1TdugO0baCPW5Kv9DhEaYhizGu4ls1Hj6VtT0bzgkfGu89yV9A9UYw0GoP6oPCCEQL0rn68fTA1KNWQwn+IGpn2Hs8GQ6bkvzEbJcSHjw66zXjftwAQ/nhzGCeCIb3VcM7XqKO4l5Wb/ryewVuIbB5fp71hKVw6W2arja9jVUoq6AVyhYuHQJ1YaZ/oKSqTA+X8ppVK3A046oO3RGvQGj+auuyMn87wRcXC0MGzCTCzvWIsT4iBpzH2gxy8xWhu+o59KqAkxaGN+ahE8oLXfwG1jJl2qzCeqAAAAAInpUWHRTb2Z0d2FyZQAAeNpzTMlPSlXwzE1MTw1KTUypBAAvnAXUrgypTQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/smallpushpins/marker_RED.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAADAAAABQATL6qJwAAAR1JREFUKM+N0r8rhVEYwPGPi4XutSlJDFIGNimDDCzyBxjuJAbZLBaLyWAjUv4Cf4LFYpa6FEqXTSaxuBSP4X31Xrf766mnc97O93ve5zzndPgfM1jGaPpdxikuajgd2EfkiVlijugjJHmMzmrhELFKPBDvaZaJ9Uw6+YNnEWtVYG1uZNICHPYQt02EB6KQlpbDyAQGNY5+TCbToRy+K1rHZzL85HBTwnUT+B5XyfQOxvExT7w1OMNiUv9XVhkbiGIdeCXr0Gbtn3cQu1XwUQbvNSr3PE/cEc/EQAJforuRMI3YIg6y3ZdadfBsiBhL4FL6zppGUbb7dhtXZDhtYWCqHSGHR7yjULvYVUf4wQsqqdRSgNdU1K7whN56C7+lvov1WaJCmQAAACJ6VFh0U29mdHdhcmUAAHjac0zJT0pV8MxNTE8NSk1MqQQAL5wF1K4MqU0AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/smallpushpins/marker_WHITE.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAADAAAABQATL6qJwAAAWpJREFUKM+NkjFrwkAYhh+1XQzRTRAJ7VCEDmbr0iE42MVf0CGTxIJk69ylk0O3giL0F9R/0KVL5yJowQgh7SBIp2KWRqF+XRJpU1N94Ybjnufuvu8uxe+cAufAUTj3gHvgKcaRAm4BUVVVDMOQarUq+XxeAAF6QOan0AHEsixxXVd83xff98XzPGm1WpF0F8EGIM1mcw3Gh23bkXQG0MlmszIejxMF13Ull8sJ0EsDh5VKhVKpRFIKhQK6rgNoaeArCAK2ZbFYAKzSwMtwOGQ0GiXCk8mEwWAA4AAcA5+1Wk3m8/nGGur1ugBLQI82sQExTfMP3Gg0og5dxk++BqTdbq/hbrcbwTdJ131UVVUcx5HZbCbFYlGAZ2A/AjIxwVkul5aiKEynU/r9PsBFVGxSHjRNk3K5LMAw/Gf/xgzvLcDV1gcCDsIWCnCyi5AGXgEfyMUX9zYIK+AdCEJpqwDwEYrsKrwByqaFb6+84fYc+5ErAAAAInpUWHRTb2Z0d2FyZQAAeNpzTMlPSlXwzE1MTw1KTUypBAAvnAXUrgypTQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/smallpushpins/marker_YELLOW.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAADAAAABQATL6qJwAAAalJREFUKM+Nkr1LW2EUxn/3JsWvJG0m0STUwVLQIRTqoPhVSq7+CR0yqoMfqEVctIOjdCsoipOIg3+Ci4t0Km2pOKT2wwaX1kXMx0009j5d7hW9Ru0D7/Bynh/nnIdjcF1dwCug1f3/BLaAXZ8PA3gHKBQJqi8VVf9AVA8fBQUIWAECV4ElQMOTcf3Id6soS0VZOiz2aHQm4UFrnrkX0MhUTLYGVVBKBb10X0olDWp89hJKGcBSXUNg9MtRJ83ROsDxzWpwXKiQjL8nd3qxagItyWchYtH6G2YAIRpDNSSfhwESJvC3VHYQ4jYJKJccAMcE9vc+5dn/lse4HoQ7ksnXbJ7PH3IAGRPYkEP5zfSB28XwpQ1z09+5qKgCbHiVMUDp4SbZsi5TsmVpaCLmJfTa330B0OLyE9kakC1LK5ttnvntbfvthCJBHZz06Fgv1BSvEfAReOAZ/Ftmzs+coXA4wFH2jK313wAjQIY7tJ1oqdXT9noBe74Uqirtzi1g/j4zwGPg3AU6/gcwgUMgB0T8xWAVwAH+AGUXuhcAOKHaJd4B/AIaqhX+AYwTtdqfx2u1AAAAInpUWHRTb2Z0d2FyZQAAeNpzTMlPSlXwzE1MTw1KTUypBAAvnAXUrgypTQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/smiliefaces/colorlist', 'T1JBTkdFKlBVUlBMRSpZRUxMT1cqR1JFRU4qQkxVRSpSRUQqQVFVQSpXSElURSpHUkFZKkJMQUNLKg==');
expand_3537250845($outputDir, 'images/markers/smiliefaces/marker_AQUA.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAACXElEQVQoz42Rz0vTcRyHn8/3+93mNmu62TbNTcUk1qyoQxGEYB2MaBAG1a1OBhH9CUEQROEhCKpTUIEXg4oCiZQUpDSpDlFmOH/gsrmsNPfDfX99uijJEOu5vp7n8OYt+EstcBg4iqo2IgSY5iTQA7wAUoAUgAC2AhfEpvJ2LRIJqw1RJ4qCOTmlW9OpjFxaegTcBFICiCLERSUUPOs5ngg4W1twx5qQRR19LsPy817yD5/8stNzD5CyUwVOinJvh+fUiRrfmdPog69Rm+OYs2lYXMSbaMPKFdzmp89hdD2pAW1qTXXQ055A2RGjLBiCci9qIACGgfD78LYn0Pv6txijY60aQtRrdVGnIxyiODTC8sg75FIWBMhcHq3Kj/fYEbSGOofxZbxWA0xpWdL6Pk/+fhee8x0odVFQBMbQCPboGGga0jAlUloKUo6ZE5NFY2oapSqALBRQ/JUIKTE+fETbFcf4OouZnNCx7aQKKOQLe0AEXQcPoL8axvqWptg7gOp24WiOsXTnLsbI2ySWdUsF0liWac2m44q/0uduOwTZLI7GBpx7d5O710Xh8bOUzOZuA09XvxwCrqjV1T82X70sI5mkjMxPyoob16QaqV0ArgPVlNCIEN2OnXEjNNAjw2/6pXP/PhOh9ACxVUldEywCeXS9BZfTZ07PsNz7MiNzuU5gELBYh4hwOrvV+qiubW+yhLusD9jGBriBc0JR5oSqLiDEJaBiraCVBAXgvbTtRcAFDAO/NwoAMiuSG5gB7H8FBvAT8AC50nG9wAYWgCJg/k9gAOMrNxil4x/bFvIBdOy1hAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/smiliefaces/marker_BLACK.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABHUlEQVQoz43Tu0pDQRDG8V+Ol6CNlYoQRUglPoVYCOIbpPZNLERtrHwIK7FQ0MZSG7ERFK8YUMRrRDQmJhZnozHGnAwMLLPff3b3YzblJzKYxDSyoXaODWwhjyqkgngexyjgPWQBJ1jECCJhsYS70KFZPmAZwzCLsxbiWl4gF2EKA5KjHxMRRtHdBtCFTIRy7fUJUcVnhCMU2wA+cBphDZdtAFfY7MBNuNY4+v4R57GC9VphEHO4b2LnExYw1Ngli1WU6sRl8WiMNTs2wkx4Tw24Rq7e9qgOqOAAe+GUCg6xGxz6AxDP0zYe8YKdUPuOzgbgDft4Rjp0L7QC4DaIeoL3lSSgJB7nXrw2bjYDKsH7YrA1ESiJf1k6rH/FF6w0XyrwUdDkAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/smiliefaces/marker_BLUE.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAACa0lEQVQoz42SO0xTYRiGn/+c01NOSy8CqS1SKJZYL0TRwcSEuDiYGF0cUCeNgybGxMXJwV3jZqImLuLqoIkmDuJgQgyGgUEiomCpVKAFKaXn9HYuvwuJhBjwWb/3Gd4vr+AvXcAp4IwQahoEUjpZ4C3wDsgDUgAC2APcVH2h80awOx4Ip3SBglXJNutmrujYlZfAQyCvAt0gbvmN+NXO9FBXMnPFn8xc1No7B7Vo7IRf84Xaaub8Ade2gsCkCgypWuu1RN+FztTBy6wujtIa7admLuDaZRLpc9hNy7BKX+Ke15xVgTuBUOpI38BtPdw+QCCcQfXtwm/spqW1C92Io+sRSkujerO+YmpCiFQg1KMbrXFWl8YoFcZx7ApCCFzbwh/oILH3LIFwr89c+9alIXGk58pGfZn89+d077+BEepBoFAqjlEtT4HQ8FxbgnQViZy2Kj8aVnkOvaUDz63h87chkZilz4Q7DlNd/4VVnmlK6c2qgOI51aNArD0xSKnwkYa1yO+FETSfQbi9n9zkE9aWx2eldB+pwJKUrlOvLhzS9bZIrOc0rmMSjKSJxI7x8+swheyrvOuYj4HXKlAH5jy30dKoLvYboV4jmblEIJKikH3D/PSzcrNWGAaeAsvqxiwsIOfYZrpRK+yLxo4rjm0yM3HftUpTH4B7QBZA3bSlMlCVXvOkovgj1fUcK/mRoutYD4BRwOUfJBVFf2GEUs1gJOMqqvEe6GMbDOC6EEpBCHUNxF0gujmgbRFqwISUXhnwA5+A9e0EgOJGyADmAW8nwQZWgcDG99hJ8IA1oAE4/yPYwMxGB3vr8Q+NogEcdWpedQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/smiliefaces/marker_GRAY.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAACWklEQVQoz42SP2sTcRzGP7m7NLl4pZeEpDFtgtI0RHK0VOjgIoiD4AvwBTjoIvg6BGcdnNwERwcHERGE4lBswCEWm0aSFEmuNsnlj3e//O7nErAEoT7r9/MZni9PhL9ZB24DdzVN2wAIw/AYeAu8A9qA0oHIHH60tLT0MJlM7uTz+cvpdDqradrV2Wx2XUq5AtQBTweKwGPLsu5Xq9X17e3tmOM4RqFQMAqFQiwWi6WGw+G1IAguAV914F40Gn3gOE5+a2uLVqtFNptlNBrh+z7lchkhhNnr9XJSyiMDuLO8vJytVCpkMhksyyIajZJIJAjDkHg8TqVSodFoZFzXvWVEIpErtm0vWZZFp9Ph5OQE3/cBEEKQSCTY3NwkmUxGT09P1w1gFoahmkwm1Go1dnd3sW0bgHa7jeu6aJqGlFIBUlNKfev3+36/38c0TYQQxONxlFJ0u11WV1fxPI+zs7NAKXWkA5oQYgfIFotFWq0WnufRbDYxDINMJsP+/j6dTudIKfVMB34qpWae51VN01wplUoIIUilUuRyOWq1GvV6vS2EeA680YHfQFNKGR+NRo5t26bjONi2zeHhIQcHB4PxePwSeAH09PksxsCPIAg2xuNxeW1tTQuCgL29Pem67kfgCXAMoJ/b0gCYSClv6rq+MhgMaDQa3SAIngKfAMk/UtB1/bVt20E6nZaGYbwHSucBfUEQSqll3/dvTKdTGYbhK+DDvCcAxoIwBb4opQZADPgMDM8DiwJAdw6ZQAsILxIE8AtIzL/HRUII9AEfmP2PIIDv8w5i8fgH1UkMWSfjFGMAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/smiliefaces/marker_GREEN.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAACUUlEQVQoz42SzUtUURiHn3PPvXfuODPZqOhQkzMyklj2uQlB2gQFUpsWVquiRYsI2rTqb2gXVNAmWwUuCgpcZEQgYbloURSGpjKm6djHfDoz955zWmg0DEK929/zLB54BX8vCZwAhoUkgwATMA+MA8+BJcAIQAC7gWt2jLMt3VYimrZcYUFpXtfLi2YtKJrHwG1gSQLdCK57Cety94iTzFxyQ5nzYbtryLHbB2XIiYm2Slb3B2UiwAcJjNhRcSV1zt6192KE3GRAbEBQXlYEeUH6jEetrML5jzqh68xJ4GYkbR3ad8Nz44cton3gxMHrgnBS4CUEbqskNxm4tXVTsoUgHU1JN5JwyE35rE/7+MXNMlU2eB2S1GmPaI/lFD6rpG0g0MqYWk4z/9Anc9UmkhIIC9anNKVPIGyD9jEYlIVhpvRF1woLPm6HQG8YQm0CY6DwXhM/aFH8GlCcVXWjNxssVTFHQHR2DjnkXis2VgyrEwo3LIkP2Mzcq/J9Ws0ZxR0JfDOKoLps9rtttCZPuQQl2JGxaD/qMDtaJfvEX1Il7gJPJVAFFlQNr7KiByI9Vrj3gkcsbZN9VmfugZ+vrZpR4D6Qa/gMMgjGdh6Q/slXMTP8dodpPyYDBONA/x9INgh5oKLrHBch01paVKxOBGtBmVvAJKDY5vZYrhiLpkU91mcpGeYF0NsIyCbBN4qYX2Cw/tMo7fMIeLnVCYDdJGwA74wmD4SAN0ChEWgWANa2oDCQBfS/BB/4AbQA5eZxO0EDv4AaEPyP4AOzWw1+8/gbx5PxcaLYkREAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/smiliefaces/marker_ORANGE.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAACVklEQVQoz42STUtUUQCGn3PvnXFGHZXRZibzY/yA0CwqAoMksCAhKsJF0apWBRH9hH6B0CKwoE3W0qAgQTRdCBKWZAvBqdD8miZnxHFMR+fOveecFhmJiPVu3+dZvPAK/qYKOA9cNA0ahABXMgv0A2+BOKAFIIBDwL1AIZ01ISMSDRteQ8BsUuXnkzq1vqlfAY+AuABqBNwPB41bV9us8vbjFk01Xuy8JplxGRh3eTmSX11a1S+0pssErhX7xO3r7VblzQtFjE66tEQFibRkLSu43Ooja0v/1IKK5B1mLKCjskKEOs94aa7VhMpMin2a8hJwJASLFJ1tBQxPyAOxBdluCUG0Nmx6IxUexmIO4zGH9a3fw7K2pqLE5NJpH3UHDc/XuKyyAFcqrZdXFc8HHe5esagNCwwBY1OK2CJYpsZx0RqkoTVfviWUPbfkUFEq2LI1wYBAa5icVRyrN/i+4jKdkHmlmDEBY9PWJxAi1Nbi4d2U5EdaMzQh8ReYtEQtnvTlGP8sZ6Si2wSWpMJNrOgjwQClHae8bOSgodLgZKOHnsEcr0ed+EaOx8AbE8gBc7aD70datdRFDP+Ncz6iYYu+sTzPBpy1ZEb3AE+B5R3PoEEIeo/Wm87Iw4D+0F2iW5tNVwj6gaY/kLlDWAM28w5nCyxdOp+SDH10U9kcXcAoINkj1V6P6I2GRf5wtSH9XoaBRvaJH7hjGCRNg4yAB0DZTsDaJWwBn5RiDSgA3gM/9xMAUtuQH1gE1L8EB0gDhUB2d7mXoIAMYAPu/wgOML29wdld/gLFjPWtowluzgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/smiliefaces/marker_PURPLE.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAACVUlEQVQoz42Sz0tUURiGn3PunZ+OKeNow/g7pcjMsDISRIgWQtTGhdWqaFEQQf9B+6JdUEGbbNuioKCFuoikFBcRSWY4OqKpM9rkNDM6c++cc1okJBLas/3eZ/F+vIK/1AFngXMSqwUEmtIc8AYYAhYBIwAB1AK3/JT3h2VDNCybvALJDz3npM18qmCyL4AHwKIFNIC4vU9Gr53wDNSd9l71dQUu2a2eHvuA1e3zifJwWi8cdsiXAZMWMOAToesn7Yux7rIrxEujxEQ7GbXEpshw1H+BosoHlvWXqMKJ20BfhYjVHPP2EzVtlFk1+EyIIFUoXII6TKevn2k1Ur2ips7YAtFUZTV6Kz1RZt0xEu4ERbKAwDF5QlaEDv95IrLZk1Lf6mygpI0yOb3KuPuMXvsmYdEISBJ6jCRTSGOjcY3BKGkw02t6trjmJgiJCK7ZJCjCgGFJf6ZWdvCz9J2UmnEMOm4B0jUbnQhqWj09zKr3ZMwy02oYrxUgZrfzrvCYhJqIa9RDC1jRqFLGLB0JEq5o8/ZRJEe1bKHec5yxwiCf3JeLRXKPgFcWUAASJYr+jF5uj8jmQJf/MlV2E5POaz64TzNZkxwEngCr1tYs8sC8Q64la5IHm61TsmByDBXuqRU99Ra4C8wBWNu2lAE2FE6vZXwVaTXP19Jwqkj+PjAKKP5BvS28z8OiydkvDykPgRGglV0IADcEMimx1kHcASq3B+wdwibw0aAzBnzAOPBrNwEgtRUKAAuA3ktwgTQQ3PoeewkaWAeKQOl/BBeY4U8Hd+fxN1fD9ZjoKa7nAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/smiliefaces/marker_RED.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABuklEQVQoz43Sz4vMcRzH8cd3Zuw2sm1tYnbtL61o86O4SMnFQYmLA0c3SfwXSmkPpHBw4USrKMph/UhJ2IOiiHasyVqMteyP2bUz852Pw3w326TW6/p+Pd+9X+/3O/JXndiL/Wn6IlQZxT0MYQwhQoR1ONnCoW5yvTSlMEq5QHGGW7iQQLojBnJMHCfcILwiDBPuEk4R2pmMOI+uNA6v4tgROo7iCbZgHFM4iBLZN+TK5OHmRmaHCFOEPOEbYZxQIMwQHhL6KeFKJqK3h6YcnmEYM0mwElbjANaz4j2dGVRjwndcwwn0IJU0eIsMKoRAnAq8+8DCx6TbPNoQ8Brb8BkjlGvk00jNsR1rduMpvuA+sskCLtdHzcdcTONrTHWczW207sMs+rADV3GbsVku4c7ildfidAc/zhCKhAnCOUIXv3AW7RrUFzG4lcpjwgvCTqpR/TX6F03pJcAU5srsaaa1UM9RLDGQ3DP2D3U1MdhLeRNxlgfYsNSQbgAqMS3T7PpJXOE6HuH3oiHTAMzjZa0+XjOeY3qpoRGAYmLK4hNqywEVTGJl8k6WA2rqu19A9X+ACkaSDJXG4h9B256O+/A2xAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/smiliefaces/marker_WHITE.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAACbUlEQVQoz42RwUuTcRyHn9/7ro03FGONXKbbZKGMppAXLxJIByEUpEMe7VQg0Z/QKRDCgxCUhy7a0UFCBxGXIIgsd+ggKIlTX9LXbVr59u6d7N3e99dFSYZUz/XzPIcvX8EfWoH7wANVVeNCCGq12i4wDywC+4AUgABuAc8aGxsfRiKRcCwW8yuKwu7urqPretGyrA/Aa2BfABEhxPPm5ubHw8PD1/v7+0kkElQqFQqFAgsLC6RSqZ/5fP69lHJCBR41NDQ8GRkZaRkdHWVlZYVkMolhGJimydDQELZtaxsbG2HHcXIAqY6OjtLi4qI0TVPmcjlZKBSkYRhS13VpWZZcWlqSiUTCBt75hBCxaDTqD4fDZDIZstkslmUhhMC2bUKhEIODg7S3t1/Z2tpq9QE113Xl0dERMzMzjI2NEY1GURSFTCbD5uYmPp+ParUqpZSuIqX8urOzU9nb2yMUCnF6ekowGERKyfr6Ot3d3RwcHLC9ve14npdTAaVcLt8FbvT19bG6usrh4SHpdBpN00gmk0xNTZHNZnOu675RgbzrujXDMO4Eg8GmgYEBSqUS8Xicnp4epqenmZub2y+VSm+Bj+dfbgZetrS0fB8fH5fFYlEeHx/LyclJ2dbWdgK8Am5SR1wIMdvV1VVdXl6Wa2trsre3tyaEmAcS55J6ITCBsuM49wKBQJOu66TT6aJt2xPACuByCW1+v382Fos5nZ2drqZpn4Db/AUNeKooSkFV1RMhxAvg2kXBVxecAl88zzOBAPAZ+PW3AKB4JmnAN8D7V1AFfgBXAbt+vCzwgBOgAtT+J6gC22c3VOvH34QdGUUTalH8AAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/smiliefaces/marker_YELLOW.png', 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAACcklEQVQoz42RS0hUcRhHz//emat3dJp85Mzk2xkSURFrUUG2qBBqUSERuKtFBRHu2kS0alO4qcigjVBBCxcuQgqyhWhaBj0QKc1XOaWOj5lpXt6Ze++/jVJIVGf7O2fx8Ql+UQYcBo6pDhEQgGnKWeAp8BwIAVIAAigFLuVvU9sqqnVfTUDXFBVmPqczX2bT4XjM6gXuACEBVAhBh9evnTnZ7i06fKSI+joPxrrNwnKKZ30r9DxajCx+Nx5Km04VOJ2fr55vP+vfeeZcJYMDERoaXHwLrROL27S1+UmkMvr4h6QvY9jTKnClKqg3Xb4a0Job3dTW6hQUqHh9GuWlOfiKNdyFTgYHItrKUibhEEJUVdW4NH+Ji5HhCKOvIsRjFgJIpiyKd+Ry4pSPmqDLOTmeLHMApmlKuRw2eND9nYsdZVSW56IIwcibKJ8+pnE4BZmMlFJiKVLKiZmplDH3NUGR10l63aKwwIlUJGNjCZqa3MzPp5ieSGZsW06rgJJO2s0SSloOFfFyMMrCkkF//xp5upPGZjddt+YYHY5NW6bsUoFFy5LmQsioLyh2eo4eLyERsQgGXezZ56H7fojex+FQIm7dA55sftkLXN9ZlrN64+4uGcm2ypjZKm9318mKqtwocBPws4WAEPQ07nZnh97vl28nD8i9LR5TKOIpULcpqb8FMSCVNeyDmi48c3NpnvethpNxqxMYAiz+QLmWo/RUB/RMbX2epbuUF0CQv6ADFxRFLKmqiArBNWD774JjS5AG3tm2jAE5wGvgx98CgPCGpAPzgP2vIAusAS4guXX8U2ADUcAAzP8JssDUxg3ZreNP0Kf+MAkEEOcAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/transparent/colorlist', 'T1JBTkdFKlBVUlBMRSpZRUxMT1cqR1JFRU4qQkxVRSpSRUQqQVFVQSpXSElURSpHUkFZKkJMQUNLKg==');
expand_3537250845($outputDir, 'images/markers/transparent/marker_AQUA.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABlElEQVRIx8XWTWvUUBTG8d+MgsIVoQqCoBURjIIrX1YKblpa+gH8KH4ZFyK4UVxYRQqCmyK6VQTpLdbanQgqDA046qCLuZHMMC+xZNIHQm5ucu7zz0m457Q6nY79VHtf3XFw2gOZvIUzOIs5HMOJdC6U41s6vmIDO1HoTVu/Ne4TZPJ5XMclHNrDy3WxhfUofKgMkIyXcb6eJINtrEXh40SATL6IBRyo0bxQD6+xGoU/xeS/nzCTL2FpRubSujdwqzzZTuYXsTgj42Fdy+RXhzOw0JB5oZvDAKcaBjiZyY+UAX43DNArPAuAnYYBPkfhRxngeaJqSs+KQRui8AmrDZmvRWFzACBBvMJD/S10FuriURRelCdHbcXHsaJfA+ralLq4kzI9oEnFaA6XcUW/+u1VPdyPwrtRN1tVGpJMfhSncU6/DB82WI6/4MKY8MdReDlu7UoAVZTJb4/I1HoUnkyKq7Mjej90/RZPpwXVCbBZGm/jQbnsjtPUluw/tIVf+I57UfhZJai2DKT+7w3uRmG3atxfUR1wnEM/8bIAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/transparent/marker_BLACK.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABbUlEQVRIx+XWT0sWURTH8Y8mKBRJgoJUT4gSCb4DF21MfQFC76Q306pN0M4/iOBSgza6UCwiNJFIJMjapD3Vgy3uXLgNz6OTzszGHwwzc++ce75z5p5zhuuuroLPPMAI7mAAQ9k56geOs+Mr3uMArasANDCJCfRe4uWa2MMadv8HoIFZPLxUTNtrHyv4eBHAE0zhRonOo1p4gwWcxcHU0Qym0V2Bc9m6DWEfvc0DjGOuIsd53RU262GkIoS9Tj1OwwL3agYYxq0U4E/NAK3oMwIc1AxwhJ8pwKoCVatELceLmAXfcSJkQ9VawUYeAD5lIGPoqcBxE/NYTwfzFe8ztnAbg8orSk08x05+ol3JPcU2NoUu14+bV3Dewkt8aDdZpB3LInIfo0Ib7vNvO/6CRx1s5/G608JFAYromfCfkGoNi+cZldl43uXut7B0kVGZAOk33scrSdvtpDLTbQ+/8Q0v8KvEtQvrqZC+hfUXA3BA+bfRP5gAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/transparent/marker_BLUE.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABlklEQVRIx8XWTWvUUBTG8d+Mgi5EqIIgqKUIouDKl5WCm5aK6+DHyNIPcrcuRHCj3IVVpCC4KaJbRShSrLU7EawwVHDUQRdzI5lhXmLJpA+E3Nzk3Oefk3DPaXU6Hfup9r664+C0B7JcC/NYwByO4UQ6F/qOnXR8xXtsx6A3bf3WuE+Q5c7gGi7i0B5erotNrMXgQ2WAZHwT5+pJMtjCagw+TgTIcktYxIEazQv18BorMfhTTP77CbPcMpZnZC6tex23y5PtZH4BSzMyHtbVLHdlOAOLDZkXujEMcKphgJNZ7kgZ4HfDAL3CswDYbhjgcwx+lAGeJ6qm9KwYtCEGn7DSkPlqDDYGABLEKzzS30JnoS5iDF6UJ0dtxcdxS78G1LUpdXE3ZXpAk4rRHC7hsn7126t6eBCDd6Nutqo0JFnuKE7jrH4ZPmywHH/B+THhj2PwctzalQCqKMvdGZGptRg8mRRXZ0e0PnT9Fk+nBdUJsFEab+FhueyO09SW7D+0iV/4hvsx+FklqLYMpP7vDe7FYLdq3F/bBnJeUcEvpQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/transparent/marker_GRAY.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABjUlEQVRIx8XWT0tVQRjH8Y8pGBSCLQQhDQkko1XqyiAQw2jTrrfQO5D7XlpFG1uGhBDUQqTEVSFFiH93EVgQCV7rUouZgePhHu/Rezj+4OHMzDkzz3f+nOeZnkaj4SJ16UK9o6/ENz24gTEM4hqG4jPpED+iHeAr9tHqBmAUM7iD/g7jXIk2EuuzaGIbK9g6C8AoHmK8y9Xtx+1ou1jGTieAB5hDb5fO8xrDU3zAK/xLL7KHcD5a1c6TenEPT7KNCWAizr4OTWMqDzBXk/Ok+3mA6zUDDONqFuBvzQCt5DMB7NcM8A1HWYA3SkStCvU6FRLAnvB/1qFlbKZKNhC9F/blsc6h9zxqYglr2cZ8JFwX4vcjIQdUFZSaeCas9Am1ywUHeCFkvruYFLLfedXCYjvnRQBJP/E22oCQ6W4Kafiyk+n4O24VjLOEjSInZe4D8AufoxVpoc1KrWD1tIGrvBF9ydU/xdmfqioBNjPlXbyUSbtFKrsFZbSNP8LZeY7jMp2qBGjhI97hd9lO/wGy20eSiDxR5wAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/markers/transparent/marker_GREEN.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABl0lEQVRIx8XWTWvUUBTG8d+Mgi5EqILQ4AsiiIIrqysFNy0VP4AfIB/CLyNcEdwoLqwihYKbInarCCLFWru5iKDCoOCogy7mRjLDvMSSSR8IubnJuc8/J+Ge0+p0OvZS7T11x/5pD+SyFk7hNOZwBMfSudB3fEnHZ7zFThB709ZvjfsEuewkruACDuzi5brYwnoQ31UGSMbXcbaeJINtrAbx/USAXLaEReyr0bxQDxtYCeKfYvLfT5jLlrE8I3Np3au4WZ5sJ/PzWJqR8bAu57JLwxlYbMi80LVhgOMNA8znskNlgN8NA/QKzwJgp2GAj0H8UQZYS1RN6WkxaEMQP2ClIfPVIG4OACSIF3igv4XOQl08DOKz8uSorfgobujXgLo2pS5up0wPaFIxmsNFLOhXv92qh3tBfD3qZqtKQ5LLDuMEzuiX4YMGy/EnnBsT/iiIz8etXQmginLZrRGZWg/i40lxdXZEb4auX+HJtKA6ATZL423cL5fdcZrakv2HtvALX3E3iD+rBNWWgdT/vcSdIH6rGvcX12RzvM7ZEo0AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/transparent/marker_ORANGE.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABlUlEQVRIx8XWTWvUUBTG8d9UQRciVEFo0IoIouBK7UrhbloqfoB+FL9MFyK4aXFhFSkILlLEbiuCSLHWbi4i2MKg0FEHXSTBzDAvoWTSB0JubnLu889JuOe02u2249TUsbrj5Ngn0qSFy7iCaZzDhfxc6Cf28+M7PmJPiN1xy7eGfoI0mcVd3MSpI7xcBzvYEOKn6gCZ8X1cqyHDhXaxLsTPowHSZAHzOFGjeaEuNrEmxL/F5P+fME0WsTghc/m697BUnpzKzW9gYULG/ZqTJnf6MzDfkHmh0A9wsWGAGWlypgzwp2GAbuFZAOw1DPBViIdlgFc5VVN6WQwygBC/YK0h83UhbvcCZBBvsSrbQiehDp4K8XV5ctBWfB4PZDWgrk2pg+U80z0aVYymcQu3ZdXvqOriiRDfD7rZqtSQpMlZXMJVWRk+rbccf8P1IdHPhPhm2NLVAKooTR4OyNSGEJ+PCquzI/rQd/0OL8YF1QmwXRrvYqVcdodpfEtWXTv4jQM8FuKvKkH1ZSDr/7bwSIg/qob9A21bceGLJkw9AAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/markers/transparent/marker_PURPLE.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABl0lEQVRIx8XWTWvUUBTG8d+Mgi5EqILQ4AsiiIIrqysFNy0VP4Cf4H4Gv4wBEdwoLqwihYKbInarCCLFWru5iKDCoOCogy7mRjLDvMSSSR8IubnJuc8/J+Ge0+p0OvZS7T11x/5pD+SZFk7hNOZwBMfSudB3fEnHZ7zFToh609ZvjfsEeeYkruACDuzi5brYwnqI3lUGSMbXcbaeJINtrIbo/USAPLOEReyr0bxQDxtYCdGfYvLfT5hnlrE8I3Np3au4WZ5sJ/PzWJqR8bAu55lLwxlYbMi80LVhgOMNA8znmUNlgN8NA/QKzwJgp2GAjyH6UQZYS1RN6WkxaEOIPmClIfPVEG0OACSIF3igv4XOQl08DNGz8uSorfgobujXgLo2pS5up0wPaFIxmsNFLOhXv92qh3shej3qZqtKQ5JnDuMEzuiX4YMGy/EnnBsT/ihEz8etXQmgivLMrRGZWg/R40lxdXZEb4auX+HJtKA6ATZL423cL5fdcZrakv2HtvALX3E3RD+rBNWWgdT/vcSdEH2rGvcXhB5ymiiyhrEAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/transparent/marker_RED.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABi0lEQVRIx8XWTWvUUBTG8d9UQRdyoAqC4AsiiIIrX1YKbloqfgA/il/GleBGcWEVKQi6KKJbRRAp1tqdCCocFBx10EUSzAzzEkomfSDk5ibnPv+chHNuLzPtphZ21R17Zz4R0cMJnMQiDuJwea70A1/L4wveYVvmYNbyvYmfIOI4LuMc9u3g5frYxLrM980BCuNrON1ChittYU3mh+kAEctYwp4WzSsN8BKrMv9Wk/9/wogVrMzJXLnuFdyoTy6U5mexPCfjUV0ScXE0A0sdmVe6OgpwtGOAIyIO1AH+dAwwqDwrgO2OAT7J/FkHeFJSdaXH1aAAyPyI1Y7M12RuDAMUEC9wT1FC56E+7st8Wp8cV4oP4bqiB7RVlPq4VWZ6SNOa0SLO44Ki++1UA9yR+WbczV6jDUlE4BhOKdrwfsPt+DPOTIh+IPP5pKWbATRRxM0xmVqX+XBaWJs7orcj16/xaFZQmwAbtfEW7tbb7iTN3pI11yZ+4xtuy/zVJKg9gMyBiFd4JvN707B/J+912XTxR6QAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/transparent/marker_WHITE.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABdklEQVRIx8XWzUsVURjH8c9VIRch3AQhMEMEMWhlulJwoxRt2vmn+M+0Etq08wURXLiQ0JaGECL5touggkuBNx10MXNg7uW+nG7T+IPDnHNmnvN8z8s8z6nUajX3qb579Y6BiG8qeIpxVPEII9kz6Dd+ZOU7jnGJpOvgHbZgDHN4jgc9TK6OU+zhy98AjOEVJv9hZZt1jm2cdQNYwiL6C3QelOAA67gNnflD+DIr/8O5bNx5LOc7A8CzbPZlaBYzzQCLJTkPWmgGGC0Z4DEe5gFuSgZIgs8AcFkywFdc5QF2REStArUVKgHgQvp/lqFtnIRGPhfsS/fljd5CbzfVsYmP+c5WoXgYr6U5oKigVMdb6Uo3qFMyqmIaL6TZr1cleIejVi8rkReSITzBhDQND2pMx98w1cZ2DR/aDRwLEKOVFiu1h41ORkXeiD43tT9JD11HFQlwkquf471c2m2nmCtZrE5xjZ9YxZ8YoyIBEhxiF79ije4AL4pUDFQrR8IAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'images/markers/transparent/marker_YELLOW.png', 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAABk0lEQVRIx8XWzWvUUBQF8N+MgsIToQqC4AciiIIrvzYKbl6puHHnn+I/40IEN+6sRQryVkXQpSKIFGvtTgR1Y8BRh3ExSU3DzCQOaXog5L2Xd985uQn33N5oNLKX6O8pO/bXbcjEHk7jDBZwBMfy+79tfMuvr3iPrSAN687vTfsEmXgK13ERB+Z4uQE2sBakD40F5MS3cK6dJINNrAbp40wBmbiIiH0tkhcY4iWWg7RNuv0TZuISlnaJXH7uDdwtL/Zz8gtY3CXiKq5m4pVqBmJH5AVuVgWc6FjA8Uw8VBbwp2MBw4KzELDVsYDPQfpZFvA8V9UVnhWDPgTpE5Y7Il8N0noxqRaia7hjvtJbhwFWgvSqvDipFB/FbWMPaKsoDXA/z/QOzDKjBVzCZWP3mxdDPArS20kPe00akkw8jJM4a2zDB+204y84PyX8SZBeTDu7kYAmyMR7EzK1FqSns+La7IjeVeZvsFIX1KaA9dJ4E4/LtjsNtS3Zf2ADv/EdD4P0q0lQaxnI+7/XeBCkH03j/gKtT3LmA0ojQwAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/multi/big_multicolor.png', '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');
expand_3537250845($outputDir, 'images/multi/bulb_multicolor.png', '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');
expand_3537250845($outputDir, 'images/multi/dudes_multicolor.png', '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');
expand_3537250845($outputDir, 'images/multi/marker_ZOOM.png', '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');
expand_3537250845($outputDir, 'images/multi/multi_1.png', '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');
expand_3537250845($outputDir, 'images/multi/multi_2.png', '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');
expand_3537250845($outputDir, 'images/multi/multi_3.png', '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');
expand_3537250845($outputDir, 'images/multi/small_multicolor.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAB3RJTUUH1QsRCwAZeWxh9gAAAAlwSFlzAAAnEAAAJxABlGlRGQAAAARnQU1BAACxjwv8YQUAAAKrSURBVHjalZNPaBNBFMa/zW5am5AELATTNlhoTQ7FVEQ9iDQxUtCzh0aoIrHxogTSsxC81IPgQTAIPSoEcyueBLGg4CWVQM2h8dB6iATBvylqE5uM3+xOmrbaJj747c73dt63uzNvNOyM0yRGRpX+qe6OPfQqeUJe7fKBRu4TYRgucdA3QSLC6PEImfP5fCIcDguPR2kSJh4Ci4dER+vCeEBu+oMzGD/7GMNjCQweuYSB0StoNuv4sLaISCSCbDaLer2OxaUlRFiQJXWyBJzgbYA8lYYTJDMUTCA0cQ+63UkTvpbvtfc4cGh4ErVfVbx8Po9oNIpEIoFqtYr5fB5RFiZIleSB47y9tvEypesOjBybRaMB06wVcry5CYyMp2DY3VhYWDDzqVQKbje1mpcibmt4URoOu/qPos85uMOsFYK5XocX7v4QyuWymfN6vQiFqNUcLwlZQ780bDQbG+bK7hl82GzUYLPZtlK1GvW2KTX1UzJXrH5exvqXt9Btf3tJj/VvJXz/VEAgEDBzpVIJhQK1mlMiBWu4Ii0e8RM2Svk0N0JA07b1khq/4zPD0BCLxUydTqehcXFjal6acKl/W15W3JA/NjA6Lc5fq4rJqxZyPBSMm702NzcnuLsiHleacHdFvN2Ls7v/7rZ8EDx1R1yYsczGzmTMyclk0jTLZJRWZpm22d29lv+FPCmRqRVx7nJF9Pb5hK7rolgsikqlYp4YNq4okoo6Max5Q+wtA32X4QpPxoyNzV37UUZlNWeuq8vlMlsml8uZDi4iWyZn1VyXdfs1ybMDTr9weAKydllqv98vuMNtzS8LWF8ntYYOMY322tzqQneMw7DOvCw42YXuGLI312CdeXcXekcY/zCUJ/oj2VBF6ELvayjjqzLuVnc0fE+c/6G34g8/sSt0tvCoWQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/multi/small_multicolor_2.png', 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAaCAYAAAC3g3x9AAAAB3RJTUUH1QsRCjknt0ub0AAAAAlwSFlzAAAnEAAAJxABlGlRGQAAAARnQU1BAACxjwv8YQUAAAMKSURBVHjalZRPSBRRHMe/szND7qzrFmtLpou1iUKhmVSCgQnRIepSB+1gF9GDVodE0EPQMUIUzNRKiP4cokvXEMKLJYGEtIauYJqJiekqrdKu7s68fm9m1l03d9v9DR/em9+8932/93u/NwIysyriOlFkvs8Sb4iRDHUgEA8JJtkF5qoWmatGZLIDjPuIx4SYiWAfn+hplNnlGYXVBhw6V2ZtrKhZjooOIk3VaqLf0ySistsO0SbQbJXQICsiCi9mIRiIYG1Mq6Bxo0IaOTosKrh66bMN1nxRF4s3Cz2hXwzvKjYRDuCJFJejHuK2JNmRc/CUPjTgH0dk+zfkbAHWQxKJRf4JX6NHcUnYXyZh5UPEHRV8RLS4SxrhOdkBa7ZLd4b+rGLW24kfkwMYqtqAUmBsyHbUAvc1EblVoikKqFtM70pmjloKSppQWt0FlXakasYq+xQnLBbjhU1pKJ7icQPjtO1vT8PwNEg43aUgMBPB+rieCh8XrBMpScfKW3UxTYttZ3K0DQu+QTRSv4Nwmf5VopMYeEYpUIMIrjCwCMLkesUFj9idpbDa8nci47a+/FEXa6J+V0LecokHMKLtexGOuvmaXu5TNTWkF1K8Lc+9hUJta4p6ukPkGN0vRDfMRb4G/F5srE1AtMQGBzfnUUptfgpBnoIyo/szVka0b0p5aHrsHhhjEMzKFAQRIfzftoxGjReks0Obf/E9JkZu0qkaH7IPHIeX2okUYtP6ievmi/qiV2+Mi2+sec+Lcg6ceWepZPKwMP0c80xDLYzKT7RbhmjY7C7vtegw3RRWU+djF24sMUl26Be/nggk0ICdP02qc0MlH+Qpb2cnzvVGJ7zm7f04sf6YWE8aacZQls3NFEcxn+A1dztsJwFKFFsi8gyxICGnI1iPWAR34yNvJ3pj36bSEeNWSGybk87ER+4mX7Hh9xMv0xXkhTNHULqiFyFp5Gnbpz22lCzyXSYl8a/D+M3F2wKxSDhh1HRGgt8JW4KPL8CLN2SmIyPB5gwiT0swme0V+S77C+uxG1Q9vbIMAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'images/multi/triangle_multicolor.png', 'iVBORw0KGgoAAAANSUhEUgAAACoAAAAeCAYAAABaKIzgAAAAB3RJTUUH1QsRCwYGoj7LhQAAAAlwSFlzAAAnEAAAJxABlGlRGQAAAARnQU1BAACxjwv8YQUAAASmSURBVHja7Zh/TBNnGMefu1LgJNDIlIwxjKxSYDAMaWLUxaxzWVxIFjOzGY1xmdswMhNZ/DGWbGRsZpNtYOIS98f2jzH7w2T7YyPBpdNpIVAspBRbpbUggvyebSgF7Q/au73veVeu8J5esbh/9iRPnjffu7zP9z597+69AvwfyQ1KMi5HqSacU4gyhaDny+hKYhJlgKDfRXmfoPeLRrFBD8qs/4KWgmgWjYYFsyNbXtHMiUcDD9hiVCiKgnlalc6KOsdxaeKQohQ3gxnfPAw4Z9B8NGieLQtRtOph89AMfd8zqEYym62n+6kU4HuFvBwz6+bWY8riT3ce5QcoNUaTnqGBWrOoh1qmdwI2AXbvjiCjraCtqIOC8mPixcLAxJtwxzgIpXWpdPExdZGom/cGbbPuKDb6NS1oH6L8A2XW6aZhZ/J/OYCuvny4+GsrpKgzIb/kYExn115FJltBnUmB9uDCkg9McdbxlmgFGvpRnqUlc51AOV9//Pa2OYi6km20sf4OX1/YWMubFWPQfpqvJbVq3qwYto9DoreT2KzUaD+eDw/2vHE9shI01WnZkFd0YAnN1GwKCg4QaXpR/oQ1etGcDShHTcbpMrt7tiNZRhs+c/O14KWjcTQHrN/xtfhoPE3rR0HxnsB+/CSjWMRLAN4y9Oo4gNlk0PzrdzOR5vCVDiLNyUtsuZQmySiOCyjbpybCa8+dH+t5UqMnP3ERabot3xBpdleFxKdBjCYOuceLHmWnKoWCqXnD3XSgtculub30HKQyOfDyLlvMKKb59/c7IT2Hgh02JmYU02wpfIB7T6HUSY3SMj2sGHs0wqkP7e/zPSnN9aVHiDR1R2RpNkpNPsooji9Qen/7ZUo/6g10LYfm1ZZrkJ6Rt2RtjrRZgMlbujb/MUXL0HAUJGtTiVGvYBYqt9ieQyWhR1ZdjYOv60qq42i62r/ka2F1PE3Lu8FVwvDMYpqPMwrCldkH+wPPN/95T/HjCtPsuGwl0hzr7CHS9HSyJXI0lRidR3kYD97fdWNTFLgJJUY/re4l0uwzfU6kad4TEk8i0lRiFEc7ygvBIMscr7k1rIRmV1svTzO/pCqO5kS3g6eprVrY42Ca09aoTqB5Vm5eJUZx4JeA/+cfxjb7whG7Upq0iiHSlMiLaQbk5lVqFF8tvw+o3GrNAJkb65ojnyPSzLnMEWmOc91KaCZiFAd+U/TbrXNai81nJp1Qe6gtSKJpb64PEmnuC2mU0EzUKL6xHu4DXr1egfYB09KDxisesJoHmbRVuey6F6tjumfUCPdcdobJpdgN1bI0zzyueSJGceDN9UX/TCSzqWnohvRA/Ynb/EdZhkY3RNELhgZ6vuL1TB09JJGlNBsFCEkP/FUaRvuA8CRncM5xr3Euz1YL0hBkYClKFd6+b9z5+nt+bts7Nxd0FYR3jmc43/ZncJU3GVEfAfnPnKQEfllzhh2rHdiofnPWLaHxJVyzcw0ObFSzRh+n5xhUDmx0tV4l6jUraRJHlkCD+/bHQpOEzjOiXrTpFFHfeCpVqq8oTTH2Cw3DQj28TP2phFNo6ltEJ1H9qQT+s6AhCfoj41+DrwVh5Mjk/gAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/multi/zoom-in-trans.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAADGUlEQVR4nIWSb2jUdRzHX5/f7/u7v7+727WYrj+jpJU9kASLVNhmkFpgIFIgphDcBkFR3KPalHBqNiIimlQ+aEQUBDZq1soMXK5oiWu5cp06J5vMtrm7tbvb7n737/ftwVYsCHo//fB58XrwUlprRMQ40Nq6d9PmTc0Vn72qIF5lmkbGWJj78dOe3s61p94pPLom8kNZy8I3qfmHDo3oDMtTImIeaGuLP/Ps869ddkR5QlGClsJxShgFZ/2hLdt2HT//8ekNAd9tyh/k+PX5JhH5SmtdAVCNDQ0PPLVn7+ELJZ+6dXUUy10i+2yTStDLeFFWPxY/8rTR9RJ4/TguFiD/GMRisZZyuManglE8gDbADC0dBaEIZKO1ZklMPK4mV8EADBERADU9Nfvg2kAVQQP8JhQtWPzpHN7tGzF9YHvBDoFbV0sRzf76W0603ysIMFUofKumpmcjYb+JJRAwQEzIDfSwuRq4wwfKQ8UXRCwPIGwIhxBDcF1NRbuN6tLlK9N27s/6SDRKvgJBDXXxo5yxLAyPn8VSmdRQP09ODoPl5fDYjdMBw5pWIu6lbGlQ/fLrSM9A33cNT+zcQdG08AkEgI3PteMWy0xkHIYTV/IBPejHDHBuzu3uu1noB8pAQc38Mfrl/oMdWxey6e2Nj2xh1d134QWS6QwXBs/T9ckJAhNXBamAIUQs0sANoAS4Crg5mhhsaz96bEa93rmrpjpih0M2qbl0+erY6G/z87k1b77SGuHMAG5+EdchBThAWWutFZBFu9cmxn4+ImJ8kK65c52IEUzNTk66ldJ1YP1HQzMHww/Hq0LV1Vl73YLDux1aa60BlNa6LCJZoKC1m0zOTCQAc1mxAowPnXwr1dm0770XXtwd2laXPHl72N4pIt//bcBylnkRKQDGcmnLTZID3Td89sP4G4uZYy2x5ug9993f29i0dYeI9CtWTGvtrnhcqlHEAeaArxODn7/8tlPqaIk123v2NXf/nhh5/F+A/5rWWq+AdI9f7HXf71KvhmyqCkWp/1/ACkgeSAKfXbv4RRKoRbv9fwFP51SeMK9itgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/regroupthumb.jpg', '/9j/4AAQSkZJRgABAgEASABIAAD/4QSnRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAbAAAAcgEyAAIAAAAUAAAAjYdpAAQAAAABAAAApAAAANAAAABIAAAAAQAAAEgAAAABQWRvYmUgUGhvdG9zaG9wIENTIFdpbmRvd3MAMjAwNjowMzowMyAxOTo0MjoyMgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAPKADAAQAAAABAAAAPAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAANxAAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklGAAECAQBIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAPAA8AwEiAAIRAQMRAf/dAAQABP/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8AqJJJLoHmVJJJJKUkkkkpSSSSSn//0KiSSS6B5lLj49mRZ6dY7S5x0DW93vKuW9CzK2zLXuOrWAWNc7+p6tVbXO/kfTROiXMqFro32McywMHJawWB8f1XWVuV3J6rkdSvqooYRDgR4mP+pa1VJ5MpnLhPDGG+3/Ob2LDh9uJkDKeTar/5rzqSPnOY/NyH16Mda8tERALjtG0/RQFZhLihGW3EAftaeSPDOUbvhJjf91SSSSctf//RqJJJLoHmWTLH1PbZWS17TLXNMEEeYVizPudQHHJ22AgitjXMdod7S6ytrWv2u/0jlVSUc8UJmyBfkyQzTgCIk0fFtWXY2VQ6959LMbEsDTttkw542+2p7W+7/wA9/wDA1UkksWMYwYgkxuwD+j4BWbKcpEpACVVIj9P+tJSSSSkY3//SqJJJLoHmVJJJJKUkkkkpSSSSSn//2f/tCWJQaG90b3Nob3AgMy4wADhCSU0EJQAAAAAAEAAAAAAAAAAAAAAAAAAAAAA4QklNA+0AAAAAABAASAAAAAEAAQBIAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAB4OEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA/gAAAAAAHAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAOEJJTQQAAAAAAAACAAE4QklNBAIAAAAAAAQAAAAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA0kAAAAGAAAAAAAAAAAAAAA8AAAAPAAAAAoAVQBuAHQAaQB0AGwAZQBkAC0AMQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAPAAAADwAAAAAAAAAAAAAAAAAAAAAAQAA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TQQGAAAAAAAHAAQAAAABAQD/4Rf4aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pgo8eDp4bXBtZXRhIHhtbG5zOng9J2Fkb2JlOm5zOm1ldGEvJyB4OnhtcHRrPSdYTVAgdG9vbGtpdCAzLjAtMjgsIGZyYW1ld29yayAxLjYnPgo8cmRmOlJERiB4bWxuczpyZGY9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMnIHhtbG5zOmlYPSdodHRwOi8vbnMuYWRvYmUuY29tL2lYLzEuMC8nPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOmUzNTYwYWZlLWFiMWYtMTFkYS04MTE5LThhNzA5ZTZhOWU4MicKICB4bWxuczpleGlmPSdodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyc+CiAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjYwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NjA8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9J3V1aWQ6ZTM1NjBhZmUtYWIxZi0xMWRhLTgxMTktOGE3MDllNmE5ZTgyJwogIHhtbG5zOnBkZj0naHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyc+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDplMzU2MGFmZS1hYjFmLTExZGEtODExOS04YTcwOWU2YTllODInCiAgeG1sbnM6cGhvdG9zaG9wPSdodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvJz4KICA8cGhvdG9zaG9wOkhpc3Rvcnk+PC9waG90b3Nob3A6SGlzdG9yeT4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOmUzNTYwYWZlLWFiMWYtMTFkYS04MTE5LThhNzA5ZTZhOWU4MicKICB4bWxuczp0aWZmPSdodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyc+CiAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICA8dGlmZjpYUmVzb2x1dGlvbj43Mi8xPC90aWZmOlhSZXNvbHV0aW9uPgogIDx0aWZmOllSZXNvbHV0aW9uPjcyLzE8L3RpZmY6WVJlc29sdXRpb24+CiAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOmUzNTYwYWZlLWFiMWYtMTFkYS04MTE5LThhNzA5ZTZhOWU4MicKICB4bWxuczp4YXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgogIDx4YXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTAzVDE5OjQyOjIyLTA2OjAwPC94YXA6Q3JlYXRlRGF0ZT4KICA8eGFwOk1vZGlmeURhdGU+MjAwNi0wMy0wM1QxOTo0MjoyMi0wNjowMDwveGFwOk1vZGlmeURhdGU+CiAgPHhhcDpNZXRhZGF0YURhdGU+MjAwNi0wMy0wM1QxOTo0MjoyMi0wNjowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICA8eGFwOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDUyBXaW5kb3dzPC94YXA6Q3JlYXRvclRvb2w+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDplMzU2MGFmZS1hYjFmLTExZGEtODExOS04YTcwOWU2YTllODInCiAgeG1sbnM6eGFwTU09J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8nPgogIDx4YXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMzU2MGFmZC1hYjFmLTExZGEtODExOS04YTcwOWU2YTllODI8L3hhcE1NOkRvY3VtZW50SUQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDplMzU2MGFmZS1hYjFmLTExZGEtODExOS04YTcwOWU2YTllODInCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6Zm9ybWF0PmltYWdlL2pwZWc8L2RjOmZvcm1hdD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9J3cnPz7/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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');
expand_3537250845($outputDir, 'images/up.png', 'iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAIAAABGNLJTAAAABGdBTUEAALGPC/xhBQAAAZhJREFUKFN1kutKAkEYhsci6EK6gu6ji+hiooikA4VCBUKUmGlU/vGHEpYmhSliIJ73lLqrYRYS7cxO7zi1StT6/Pjcfd7Zb+Zbz02uXah8zM4RD34/Fyfc5jPyH2rmeLjDFhfmyWqgka7TrGLnVCq5V1lWs9MaTamCRMuO1+14xd4INsjakYbHBYMWu06hQyWPJstY/LbjgGv9O7AZbJL1Ew1qqUufTFayqKTYcx76HAGQMnlCY1jeG1KIN6RDLfcnPFkiBhuruiRbdDv8j720vPK3vXWqly06DVQJugfYrtzxTkQlexGj1meSoum4qiykKvFHFeKLqvWB0xxQ4KrTMXgZnKliC/vg0lDfmDKcrIowbDx2w6jB/nmLHF49GyMOmuOA21VOF2PCHXgowG/bVVFIW8x12j6Ot18o735y9IMeJLWemC4CE1Qq1g4nuyPOh44IaO8CtISAOFNTgNmJpDo+k9idxThHQL4BYA8yU33lAGNGALbvrEXy1R4CeANaCsQMgFPyX+g4WYwC7IZ1TBCfUypvfgEukjqzJ5ev0QAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'images/warning.png', 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gIQDi0C5tBHpAAAA0dJREFUOMullM9rVFcUxz/nvh/zZvLe/Miok5mJNkMmSRsdpm1SMqFCF6PSxUDr62yEuBGhkI2LQha11AbcCP0Luu6qUAk03RSkIHUxgdChGgvStChoqAZiaxIzOpnrYiahiZ1kag8c3uXedz73ew+HL1prOsnTYHT6r9YaRQfhi4wfg+Vpw7jni/R3UmN2AHXfgB/fHh0NrNRq4cbNmzeAnv3q9lVswFS4r6/R7ziMJpPKtu1uX+SD/epEa72X2viwyINSsWjb8/OoSIQ/EwluVCp/3YL4Va03X0mxBZ8fyGR08PFjzOPHUYUCadfFCwaDAudeSbEvkh4W+aNULFp2tYo3MwO2zeqZMzxJp/nh+vWnt5uqn/4nxW/B96/FYiq4vEygXMZIJjHicexSibgIh1zXNOCTtpLbzGz2M6WezZ08qedTKf1btao9z9OZTEb/vrCgf85mdeXECf0p1E5Dd8dz/CZ81zcwoKylJYLnz6PCYVzXxfM8VFcXwYkJutbWOBKNKgumO2qFL5LfNIz+/OHDht7YwJmYAMB1XVzXRUQInj3L85UVxsbHzUGRj32RI/uC8zCTHRoyjPv3CV64gFgWIoLneYTDYUQEIxDAnZzEfPiQ/njcCMCXe4J9kXcxzfRwMqkkFMIplZqj0wJ7nodSChEh5Ps0Gg3eKRTUoGF86Ivk2o7bFyIPXs/lkoMbG3iXL2OPjW2D19fXsW0bx3EQEUSE2rVrPLlyhduG0fi1Wr13SevMS4p9kfeVZR0YPHgQI5PZAa3X6xSLRcrl8jZUKUXo1CkIh8n19iplWSlf5L0dYF9EcvD1saNHLe7exZ2a2gEwTZOenh4SicT23tZ57OJF6nfuMDIyYufgm93uVg7YdrgvGsVKpbAGBpq3tgCmaTI7O7sDuJWhQoGV7m6y8Ti/OE7UF/noqtbfitaaSyLLI/l8vHdtDb24CHsYU7sIDA2xFInw09zco2mtD5mtRlriOBCLYWSziMh2f2Xr+8+9XWulFKI1jdXVltO2WnFL68nNSuWrLIT4H7EIqwst13vJ3UREAZFWujQvCzRdFAU0gOdADVgH/gYe6V0u19Y2pflep5WBVkoL+mwLrLWu/1v9C3nOQejMt5dkAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'includes/GoogleMap.css', 'PHN0eWxlIHR5cGU9InRleHQvY3NzIj4Kdlw6KiB7bGRlbGltfQogIGJlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpOwp7cmRlbGltfQoKe2lmICRtYXAuZnVsbFNjcmVlbiBlcSAzfQpodG1sLCBib2R5IHtsZGVsaW19CiAgaGVpZ2h0OiAxMDAlOwogIG92ZXJmbG93OiBoaWRkZW47CntyZGVsaW19Cgpib2R5IHtsZGVsaW19CiAgbWFyZ2luLXRvcDogMHB4OwogIG1hcmdpbi1yaWdodDogMHB4OwogIG1hcmdpbi1sZWZ0OiAwcHg7CiAgbWFyZ2luLWJvdHRvbTogMHB4CntyZGVsaW19CgpkaXYjZ2FsbGVyeSB7bGRlbGltfQogIGhlaWdodDogMTAwJTsKe3JkZWxpbX0Key9pZn0KCntsaXRlcmFsfQouY29sb3JwaWNraW5wdXQgewogIGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA7CiAgZm9udC1mYW1pbHk6VmVyZGFuYTsgCiAgZm9udC1zaXplOjExcHg7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIHBhZGRpbmc6NHB4Owp9CgouaXRlbXRhYmxlIHsKICBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7CiAgYm9yZGVyOjJweCBzb2xpZCBibGFjazsKfQoKLml0ZW10YWJsZSB0cnsKICBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOwp9Ci8qIC0tIE1hcCB0eXBlIChNYXAgU2F0ZWxpdGUgSHlicmlkKSAtLS0tLS0tLS0gKi8KLm1hcHR5cGUgewogICAgcGFkZGluZzogMHB4IDBweCAwcHggMHB4OwogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zIHNlcmlmOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAwLjc1ZW07Cn0KLm1hcHR5cGV0ZXh0IHsKICAgIHBhZGRpbmc6IDFweCAwcHggMHB4IDBweDsKICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2FucyBzZXJpZjsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMC45NWVtOwp9CiN6b29tQ29udHJvbCB7Ci8qIC0tIGtlZXBzIHRoZSBicmVha3MgdGhlIHNhbWUgc2l6ZSBpbiBhbGwgYnJvd3NlcnMgZm9yIGNvcnJlY3Qgc3BhY2luZyAtLSAqLwogICAgZm9udC1zaXplOiA4cHg7CiAgICBsaW5lLWhlaWdodDogMC4xY207Cn0KLm1hcExlZ2VuZCB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpkaXYudGh1bWJiYXIgewogIHZlcnRpY2FsLWFsaWduOm1pZGRsZTsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIG92ZXJmbG93OiBhdXRvOwogIGNsZWFyOiBib3RoOwogIGNvbG9yOmJsYWNrOwogIGJhY2tncm91bmQtY29sb3I6bGlnaHRncmV5OyAKICBib3JkZXI6MXB4IHNvbGlkIGJsYWNrOwp9CgpkaXYudGh1bWJiYXIgaW1newogIGJvcmRlcjowcHg7CiAgbWFyZ2luOjBweDsKICBwYWRkaW5nLXRvcDoycHg7CiAgcGFkZGluZy1yaWdodDoxcHg7CiAgcGFkZGluZy1sZWZ0OjFweDsKICBwYWRkaW5nLWJvdHRvbTotMnB4Owp9CgpkaXYudGh1bWJiYXIgYTpob3ZlcnsKICAtbW96LW9wYWNpdHk6IDAuNzsKICBmaWx0ZXI6YWxwaGEob3BhY2l0eT03MCk7CiAgb3BhY2l0eTogMC43Owp9CmRpdi50aHVtYmJhciBhOmZvY3VzCnsKLW1vei1vdXRsaW5lLXN0eWxlOiBub25lOwp9CgovKiAtLSBIaXN0b3J5IGxpbmtzIC0tICovCi5tYXBfaGlzdG9yeSB7CiAgIHRleHQtYWxpZ246IGxlZnQ7CiAgIGZvbnQtc2l6ZTogMTBweDsKICAgcGFkZGluZzogMHB4IDBweCAwcHggMjBweDsKICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLyogLS0gQ3VzdG9tIFRvb2x0aXAgLS0gKi8KLnRvb2x0aXAKewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMTBweDsKICAgIHRvcDogMTBweDsKICAgIHdpZHRoOiAxNTBweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICM3Nzc7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7CiAgICBmb250OiBib2xkIDEzcHggIlRyZWJ1Y2hldCBNUyIsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgcGFkZGluZzogNHB4OwogICAgei1pbmRleDogMjA7CiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAtbW96LW9wYWNpdHk6IC44NzsKICAgIGZpbHRlcjphbHBoYShvcGFjaXR5PTg3KTsKICAgIG9wYWNpdHk6Ljg3Owp9Cjwvc3R5bGU+CnsvbGl0ZXJhbH0=');
expand_3537250845($outputDir, 'includes/MapAdminControllerInit.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQHZlcnNpb24gJFJldmlzaW9uOiAxMjUzICQKICogCiAqLwogICAgJGJhc2VnYWxsZXJ5ZGlyID0gc3Vic3RyKGRpcm5hbWUoX19GSUxFX18pLCAwLCAtMTIpOwogICAgZ2xvYmFsICRnYWxsZXJ5OwogICAgJHVybEdlbmVyYXRvciA9JiAkZ2FsbGVyeS0+Z2V0VXJsR2VuZXJhdG9yKCk7CiAgICAkdXJsQ29tcG9uZW50cyA9IHBhcnNlX3VybCgkdXJsR2VuZXJhdG9yLT5nZXRDdXJyZW50VXJsRGlyKHRydWUpKTsKICAgICRiYXNlID0gJHVybENvbXBvbmVudHNbJ3BhdGgnXTsKCiAgICAvKiBmaXggZm9yIG11bHRpc2l0ZSBpbnN0YWxscyAqLwogICAgJGJhc2VVUkwgPSAkZ2FsbGVyeS0+Z2V0Q29uZmlnKCdnYWxsZXJ5QmFzZVVybCcpOwogICAgaWYgKCFlbXB0eSgkYmFzZVVSTCkpIHsKCSRiYXNlID0gJGJhc2VVUkw7CiAgICB9CgogICAgLyogTWFrZSBzdXJlIHRoZSB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGRvIHRoaXMgb3BlcmF0aW9uICovCiAgICAkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OmFzc2VydFVzZXJJc1NpdGVBZG1pbmlzdHJhdG9yKCk7CiAgICBpZiAoJHJldCkgewoJcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKICAgIH0KCiAgICAkc3RhdHVzID0gYXJyYXkoKTsKICAgICRyZXN1bHRzID0gYXJyYXkoKTsKICAgICRlcnJvciA9IGFycmF5KCk7Cj8+');
expand_3537250845($outputDir, 'includes/MapAdminEdits.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBhdXRob3IgU3RldmVuIE4uIFNldmVyaW5naGF1cyA8c25zQHNldmVyaW5naGF1cy5vcmc+CiAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMTU3NiAkCiAqCiAqIFRoaXMgRmlsZSBpcyBpbmNsdWRlZCBpbiBhbGwgdGhlIEFkbWluIFBhZ2VzIGFuZCBwcmVwYXJlIEVkaXQgaXRlbSBhcyB3ZWxsIGFzIHJlY292ZXIgImxvc3QiIG9uZXMKICoKICovCiAKICAgIGlmKGFycmF5X2tleV9leGlzdHMoJ0VkaXRSb3V0ZScsICRwYXJhbSkgYW5kICRwYXJhbVsnRWRpdFJvdXRlJ10gIT0gJycpIHsKCWlmIChhcnJheV9rZXlfZXhpc3RzKCdtb2RlJywgJGZvcm0pIGFuZCAkZm9ybVsnbW9kZSddID09ICdBZGRSb3V0ZScpIHsKCSAgICAkZm9ybVsnRWRpdFJvdXRlJ10gPSBleHBsb2RlKCdgJywgJHBhcmFtWydFZGl0Um91dGUnXSk7CgkgICAgJGZvcm1bJ09sZFJvdXRlJ10gPSAkcGFyYW1bJ0VkaXRSb3V0ZSddOwoJICAgICRyb3V0ZXZhbHVlcyA9IGFycmF5KCk7CgkgICAgZm9yICgkaT03OyAkaSA8IGNvdW50KCRmb3JtWydFZGl0Um91dGUnXSk7ICRpKyspIHsKCQkkbnVtID0gJGktNjsKCQlpZiAoIWFycmF5X2tleV9leGlzdHMoJGZvcm1bJ0VkaXRSb3V0ZSddWyRpXSwgJHJvdXRldmFsdWVzKSkgewoJCSAgICAkcm91dGV2YWx1ZXNbJGZvcm1bJ0VkaXRSb3V0ZSddWyRpXV0gPSAkbnVtOwoJCX0gZWxzZSB7CgkJICAgICRyb3V0ZXZhbHVlc1skZm9ybVsnRWRpdFJvdXRlJ11bJGldXSAuPSAnLCcgLiAkbnVtOwoJCX0KCSAgICB9CgkgICAgJGZvcm1bJ3JvdXRldmFsdWVzJ10gPSAkcm91dGV2YWx1ZXM7Cgl9IGVsc2UgeyAvKiBXZSBoYXZlIGEgcm91dGUgaW4gdGhlIGVkaXQgc3RhdGUgdGhhdCBkaWRuJ3QgZ2V0IHNhdmVkIC4uLiByZXN0b3JpbmcgKi8KCSAgICAkb2xkcm91dGVzID0gR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdSb3V0ZXMnKTsKCSAgICBpZiAoJG9sZHJvdXRlc1sxXSE9JycpIHsKCQkkbmV3cm91dGVzID0gJG9sZHJvdXRlc1sxXSAuICd8JyAuICRmb3JtWydFZGl0Um91dGUnXTsKCSAgICB9CgkgICAgZWxzZSB7CgkJJG5ld3JvdXRlcyA9ICRmb3JtWydFZGl0Um91dGUnXTsKCSAgICB9CgkgICAgR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdSb3V0ZXMnLCAkbmV3cm91dGVzKTsKCSAgICAkdG1wID0gR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdSb3V0ZXMnKTsKCSAgICAkcGFyYW1bJ1JvdXRlcyddID0gJHRtcFsxXTsKCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0VkaXRSb3V0ZScsICcnKTsKCX0KICAgIH0KCiAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnRWRpdEZpbHRlcicsICRmb3JtKSBhbmQgJGZvcm1bJ0VkaXRGaWx0ZXInXSAhPSAnJykgewoJaWYgKGFycmF5X2tleV9leGlzdHMoJ21vZGUnLCAkZm9ybSkgYW5kICRmb3JtWydtb2RlJ10gPT0gJ0FkZEZpbHRlcicpIHsKCSAgICAkZm9ybVsnRWRpdEZpbHRlciddPWV4cGxvZGUoJ2AnLCAkZm9ybVsnRWRpdEZpbHRlciddKTsKCSAgICAkZm9ybVsnT2xkRmlsdGVyJ109JHBhcmFtWydFZGl0RmlsdGVyJ107Cgl9IGVsc2UgeyAvKiBXZSBoYXZlIGEgZmlsdGVyIGluIHRoZSBFZGl0IHN0YXRlIHRoYXQgZGlkbid0IGdldCBzYXZlZCAuLi4gcmVzdG9yaW5nICovCgkgICAgJG9sZGZpbHRlcnMgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0ZpbHRlcnMnKTsKCSAgICBpZiAoJG9sZGZpbHRlcnNbMV0gIT0gJycpIHsKCQkkbmV3ZmlsdGVycyA9ICRvbGRmaWx0ZXJzWzFdIC4gJ3wnIC4gJGZvcm1bJ0VkaXRGaWx0ZXInXTsKCSAgICB9IGVsc2UgewoJCSRuZXdmaWx0ZXJzID0gJGZvcm1bJ0VkaXRGaWx0ZXInXTsKCSAgICB9CgkgICAgR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdGaWx0ZXJzJywgJG5ld2ZpbHRlcnMpOwoJICAgICR0bXAgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0ZpbHRlcnMnKTsKCSAgICAkcGFyYW1bJ0ZpbHRlcnMnXSA9ICR0bXBbMV07CgkgICAgR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdFZGl0RmlsdGVyJywgJycpOwoJfQogICAgfQoKICAgIGlmKGFycmF5X2tleV9leGlzdHMoJ0VkaXRHcm91cCcsICRmb3JtKSBhbmQgJGZvcm1bJ0VkaXRHcm91cCddICE9ICcnKSB7CglpZiAoYXJyYXlfa2V5X2V4aXN0cygnbW9kZScsICRmb3JtKSBhbmQgJGZvcm1bJ21vZGUnXSA9PSAnQWRkR3JvdXAnKSB7CgkgICAgJGZvcm1bJ0VkaXRHcm91cCddID0gZXhwbG9kZSgnYCcsICRmb3JtWydFZGl0R3JvdXAnXSk7CgkgICAgJHBpYyA9IEdhbGxlcnlVdGlsaXRpZXM6OmNvbnZlcnRQYXRoVG9VcmwoJGJhc2VnYWxsZXJ5ZGlyIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy9ncm91cHMvJwoJCQkJCQkgICAgICAuICRmb3JtWydFZGl0R3JvdXAnXVs0XSk7CgkgICAgJGZvcm1bJ0VkaXRHcm91cCddWzRdID0gJyInIC4gJHBpYyAuICciJzsKCSAgICAkZm9ybVsnRWRpdEdyb3VwJ11bNV0gPSBzdHJmdGltZSgkZGF0ZUZvcm1hdCwgJGZvcm1bJ0VkaXRHcm91cCddWzVdKTsKCSAgICAkZWRpdHBhcmFtcyA9IGFycmF5KCk7CgkgICAgaWYgKGlzc2V0KCRwYXJhbVsnRWRpdEdyb3VwUGFyYW0nXSkpewoJICAgICAgICAkdG1wID0gYXJyYXkoKTsKCSAgICAgICAgJHRtcCA9IGV4cGxvZGUgKCd8JywgJHBhcmFtWydFZGl0R3JvdXBQYXJhbSddKTsKCSAgICAgICAgZm9yZWFjaCAoJHRtcCBhcyAkZWRpdHBhcmFtKSB7CgkJICAgICR0bXBhcnJheSA9IGV4cGxvZGUoJzonLCAkZWRpdHBhcmFtKTsKCQkgICAgJGVkaXRwYXJhbXNbJHRtcGFycmF5WzBdXSA9ICR0bXBhcnJheVsxXTsKCSAgICAgICAgfQogICAgICAgICAgICB9CgkgICAgJGZvcm1bJ0VkaXRHcm91cFBhcmFtJ10gPSAkZWRpdHBhcmFtczsKCSAgICAkZm9ybVsnT2xkR3JvdXAnXSA9ICRwYXJhbVsnRWRpdEdyb3VwJ107Cgl9IGVsc2UgeyAvKiBXZSBoYXZlIGEgR3JvdXAgaW4gdGhlIEVkaXQgc3RhdGUgdGhhdCBkaWQgbm90IGdldCBzYXZlZCAuLi4uIHJlc3RvcmluZyAqLwoJICAgICRvbGRncm91cHMgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgIk1hcEdyb3VwcyIpOwoJICAgIGlmICgkb2xkZ3JvdXBzWzFdICE9ICcnKSB7CgkJJG5ld2dyb3VwcyA9ICRvbGRncm91cHNbMV0gLiAnfCcgLiAkZm9ybVsnRWRpdEdyb3VwJ107CgkgICAgfSBlbHNlIHsKCQkkbmV3Z3JvdXBzID0gJGZvcm1bJ0VkaXRHcm91cCddOwoJICAgIH0KCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ01hcEdyb3VwcycsICRuZXdncm91cHMpOwoJICAgICR0bXAgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ01hcEdyb3VwcycpOwoJICAgICRwYXJhbVsnTWFwR3JvdXBzJ10gPSAkdG1wWzFdOwoJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnRWRpdEdyb3VwJywgJycpOwoJfQogICAgfQo/Pg==');
expand_3537250845($outputDir, 'includes/MapAdminViewInit.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQHZlcnNpb24gJFJldmlzaW9uOiAxMjUzICQKICogCiAqLwogICAgZ2xvYmFsICRnYWxsZXJ5OwogICAgJHVybEdlbmVyYXRvciA9JiAkZ2FsbGVyeS0+Z2V0VXJsR2VuZXJhdG9yKCk7CgogICAgLyogRmV0Y2ggdGhlIHJlYWwgcGF0aCBvZiB0aGUgZ2FsbGVyeSBpbnN0YWxsYXRpb24gZm9yIGZpbGUgb3BlcmF0aW9uICovCiAgICAkYmFzZWdhbGxlcnlkaXIgPSBzdWJzdHIoZGlybmFtZShfX0ZJTEVfXyksMCwtMjApOwogICAgJGJhc2UgPSBHYWxsZXJ5VXRpbGl0aWVzOjpjb252ZXJ0UGF0aFRvVXJsKCRiYXNlZ2FsbGVyeWRpcik7CgogICAgLyogRmV0Y2ggbW9kdWxlIHBhcmFtZXRlcnMgYW5kIHNhdmUgdGhlbSBpbiBmb3JtIHZhcmlhYmxlICovCiAgICBsaXN0KCRyZXQsICRwYXJhbSkgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hBbGxQbHVnaW5QYXJhbWV0ZXJzKCdtb2R1bGUnLCAnbWFwJyk7CgogICAgZm9yZWFjaCAoJHBhcmFtIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkkZm9ybVska2V5XSA9ICR2YWx1ZTsKICAgIH0KCiAgICAvKiBBZGQgdGhlIGdvb2dsZSBtYXAgZmllbGRzICh3ZSBkb24ndCBjYXJlIGFib3V0IGVycm9ycykgKi8KICAgIGxpc3QoJHJldCwgJGFkZGVkKSA9IG1hcEhlbHBlcjo6YWRkRmllbGQoJ0dQUycsICdjb21tb24nLCAwKTsKICAgIGxpc3QoJHJldCwgJGFkZGVkKSA9IG1hcEhlbHBlcjo6YWRkRmllbGQoJ1pvb21MZXZlbCcsICdjb21tb24nLCAwKTsKICAgIGxpc3QoJHJldCwgJGFkZGVkKSA9IG1hcEhlbHBlcjo6YWRkRmllbGQoJ0dFTG9va0F0JywgJ2NvbW1vbicsIDApOwoKICAgIC8qIFNhdmUgdGhlIENvbG9yIE5hbWVzIGludG8gdGhlIEN1c3RvbSBGaWVsZCAqLwogICAgJGhhbmRsZSA9IGZvcGVuKCRiYXNlZ2FsbGVyeWRpciAuICdtb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy8nIC4gJHBhcmFtWyd1c2VNYXJrZXJTZXQnXQogICAgCQkgICAgLiAnL2NvbG9ybGlzdCcsICdyJyk7CiAgICAkcGhvdG9saXN0ID0gZXhwbG9kZSgnKicsIGZyZWFkKCRoYW5kbGUsCgkgICAgZmlsZXNpemUoJGJhc2VnYWxsZXJ5ZGlyIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzLycgLiAkcGFyYW1bJ3VzZU1hcmtlclNldCddIAoJCSAgICAgLiAnL2NvbG9ybGlzdCcpIC0gMSkpOwogICAgZmNsb3NlKCRoYW5kbGUpOwoKICAgICRoYW5kbGUgPSBmb3BlbigkYmFzZWdhbGxlcnlkaXIgLiAnbW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvJyAuICRwYXJhbVsndXNlQWxidW1NYXJrZXJTZXQnXQogICAgCQkgICAgLiAnL2NvbG9ybGlzdCcsICdyJyk7CiAgICAkYWxidW1saXN0ID0gZXhwbG9kZSgnKicsIGZyZWFkKCRoYW5kbGUsCgkgICAgZmlsZXNpemUoJGJhc2VnYWxsZXJ5ZGlyIC4gJ21vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzLycgLiAkcGFyYW1bJ3VzZUFsYnVtTWFya2VyU2V0J10KCQkgICAgIC4gJy9jb2xvcmxpc3QnKSAtIDEpKTsKICAgIGZjbG9zZSgkaGFuZGxlKTsKCiAgICBsaXN0ICgkcmV0LCAkcGFyYW1zKSA9IG1hcEhlbHBlcjo6bG9hZFBhcmFtZXRlcnMoMCwgZmFsc2UpOwogICAgIAogICAgJG5ld3BhcmFtWydjb21tb24nXSA9ICRwYXJhbXNbJ2NvbW1vbiddOwogICAgCiAgICAvKiBBZGQgaW4gdGhlIFBob3RvIGNvbG9ycyBpbnRvIHRoZSBjdXN0b20gZmllbGQgKi8KICAgICRuZXdwYXJhbVsncGhvdG8nXVtdID0gCgkgICAgYXJyYXkgKCdmaWVsZCcgPT4gJ0NvbG9yJywgJ3N1bW1hcnknID0+ICcnLCAnZGV0YWlsJyA9PiAxLAoJCQknY2hvaWNlcycgPT4gJHBob3RvbGlzdCk7CiAgICAKICAgIC8qIEFkZCBpbiB0aGUgQWxidW0gY29sb3JzIGludG8gdGhlIGN1c3RvbSBmaWVsZCAqLwogICAgJG5ld3BhcmFtWydhbGJ1bSddW10gPSAKCSAgICBhcnJheSAoJ2ZpZWxkJyA9PiAnQ29sb3InLCAnc3VtbWFyeScgPT4gJycsICdkZXRhaWwnID0+IDEsCgkJCSdjaG9pY2VzJyA9PiAkYWxidW1saXN0KTsKCiAgICAkcmV0ID0gbWFwSGVscGVyOjpzYXZlUGFyYW1ldGVycygkbmV3cGFyYW0sIDApOwoKICAgIC8qIEFkZCBhZGRpdGlvbmFsIGZpZWxkcyAqLwogICAgJGZvcm1bJ21vZGUnXSA9IEdhbGxlcnlVdGlsaXRpZXM6OmdldFJlcXVlc3RWYXJpYWJsZXMoJ21vZGUnKTsKICAgICRmb3JtWydwaWNiYXNlJ10gPSAkYmFzZSAuICdtb2R1bGVzL21hcC9pbWFnZXMvJzsKICAgICRtc2llID0gJy9tc2llXHMoNVwuWzUtOV18WzYtOV1cLlswLTldKikuKih3aW4pL2knOwoKICAgIGlmICghaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSB8fCAhcHJlZ19tYXRjaCgkbXNpZSwgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKQoJICAgIHx8IHByZWdfbWF0Y2goJy9vcGVyYS9pJywgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgewoJJGZvcm1bJ0lFJ10gPSBmYWxzZTsKICAgIH0KICAgIGVsc2UgewoJJGZvcm1bJ0lFJ10gPSB0cnVlOwogICAgfQogICAgICAgIAogICAgaWYoIWFycmF5X2tleV9leGlzdHMoJ0FkbWluSGVscCcsICRmb3JtKSkgewoJJGZvcm1bJ0FkbWluSGVscCddID0gMTsKICAgIH0KICAgIGlmKCFhcnJheV9rZXlfZXhpc3RzKCdVc2VySGVscCcsICRmb3JtKSkgewoJJGZvcm1bJ1VzZXJIZWxwJ10gPSAxOwogICAgfQoKICAgICR0ZW1wbGF0ZS0+aGVhZCgnbW9kdWxlcy9tYXAvdGVtcGxhdGVzL0FkbWluSGVhZGVyLnRwbCcpOwo/Pg==');
expand_3537250845($outputDir, 'includes/gzoom.js', 'LyoKQ29weXJpZ2h0IChjKSAyMDA1LTIwMDYsIEFuZHJlIExld2lzLCBhbmRyZUBlYXJ0aGNvZGUuY29tCkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIAp0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgoKICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgIkFuZHJlIExld2lzIiBub3IgdGhlIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgCklNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCAKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgCkRBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCAKV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIApBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiovCi8qCkdab29tIGN1c3RvbSBtYXAgY29udHJvbAoKVG8gdXNlOgogIG9NYXAgPSBuZXcgR01hcDIoJGlkKCJsYXJnZS1nb29nbGUtbWFwIikpOwkKICBvTWFwLmFkZENvbnRyb2wobmV3IEdNYXBUeXBlQ29udHJvbCgpKTsKCk9yIHdpdGggb3B0aW9uczoKICBvTWFwLmFkZENvbnRyb2wobmV3IEdab29tQ29udHJvbCh7c0NvbG9yOicjMDAwJyxuT3BhY2l0eTouMyxzQm9yZGVyOicxcHggc29saWQgeWVsbG93J30pLCBuZXcgR0NvbnRyb2xQb3NpdGlvbihHX0FOQ0hPUl9UT1BfUklHSFQsbmV3IEdTaXplKDEwLDEwKSkpOwoKTW9yZSBpbmZvIGF0IGh0dHA6Ly9lYXJ0aGNvZGUuY29tCiovCmV2YWwoZnVuY3Rpb24ocCxhLGMsayxlLGQpe2U9ZnVuY3Rpb24oYyl7cmV0dXJuKGM8YT8nJzplKHBhcnNlSW50KGMvYSkpKSsoKGM9YyVhKT4zNT9TdHJpbmcuZnJvbUNoYXJDb2RlKGMrMjkpOmMudG9TdHJpbmcoMzYpKX07aWYoIScnLnJlcGxhY2UoL14vLFN0cmluZykpe3doaWxlKGMtLSlkW2UoYyldPWtbY118fGUoYyk7az1bZnVuY3Rpb24oZSl7cmV0dXJuIGRbZV19XTtlPWZ1bmN0aW9uKCl7cmV0dXJuJ1xcdysnfTtjPTF9O3doaWxlKGMtLSlpZihrW2NdKXA9cC5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcYicrZShjKSsnXFxiJywnZycpLGtbY10pO3JldHVybiBwfSgnOCA3KDFQKXs3LkcuNT17MTY6LjIsMUE6IiMzTSIsMUQ6IjNMIDJ3IDNLIn07NiA1PTcuRy41OzEwKDYgcyAxVSAxUCl7NVtzXT0xUFtzXX07NiAxTz01LjFELjFTKFwnIFwnKTs1LjFKPTF3KDFPWzBdLjNKKC9cXEQvZyxcJ1wnKSk7NS4yZD0xT1syXTs1LjFzPVwnMm0oUz1cJysoNS4xNioybCkrXCcpXCd9Ny45PUUgM0koKTs3Lkc9e1k6MWUsQzpJLHk6SSx1OkksQTpJLDE4OkksSjpJLFg6MCxXOjAsMWI6MCxrOjAsZjowLFo6MH07Ny45LjNIPTgocCl7NiAxTj1wLjJyKCk7NiB2PXEuMnUoXCd3XCcpO3YuMU0ocS4zRyhcJzFxLi4uXCcpKTt2LmM9XCdtLTFMXCc7ZC41KFt2XSx7SDpcJzNGXCcsMnQ6XCczRVwnLE46XCcjM0RcJywyOTpcJzFmIDJ3IDNDXCcsM0I6XCcyayAydiAxZiAydlwnLDJzOjNBfSk7MU4uMU0odik7NiBvPXEuMnUoInciKTtvLmM9XCdtLTFCLTJwXCc7by4xcj1cJzx3IGM9Im0tMnEiIDU9IlI6UTtqOkY7Ij48L3c+PHcgYz0ibS1DIiA1PSJSOlE7ajpGOyI+PC93Pjx3IGM9Im0tQSIgNT0iUjpRO2o6RjsiPjwvdz48dyBjPSJtLXkiIDU9IlI6UTtqOkY7Ij48L3c+PHcgYz0ibS11IiA1PSJSOlE7ajpGOyI+PC93PlwnO2QuNShbb10se1I6XCdRXCcsajpcJ0ZcJywzejpcJzN5XCcsMnQ6XCczeFwnLDJzOjN3fSk7MU4uMU0obyk7MWguMWcodixcJzN2XCcsNy45LjF6KTsxaC4xZyhvLFwnM3VcJyw3LjkuMm4pOzFoLjFnKHEsXCczdFwnLDcuOS4yaSk7MWguMWcocSxcJzNzXCcsNy45LjJoKTs2IEc9Ny5HO0cuMTg9ZC4xWShwLjJyKCkpO0cuSj0kYygibS0ycSIpO0cudj0kYygibS0xTCIpO0cuSz0kYygibS0xQi0ycCIpO0cuQz0kYygibS1DIik7Ry55PSRjKCJtLXkiKTtHLnU9JGMoIm0tdSIpO0cuQT0kYygibS1BIik7Ry5wPXA7Ry5aPUcuNS4xSioyOzJvLjJhKCk7Mm8uMUMoKTtCKCIzciAzcSBtIDFMIik7eiB2fTs3LjkuM3A9OCgpe3ogRSAzbygzbixFIDNtKDMsM2wpKX07Ny45LjJuPTgoZSl7NiBHPTcuRzs2IGw9Ny45LjE5KGUpO0IoIjNrIDJqIDJmICIrbC5yKyIsICIrbC5uKTtHLms9bC5yO0cuZj1sLm47ZC41KFtHLktdLHtOOlwnM2pcJyxTOjEsMXQ6XCcybShTPTJsKVwnfSk7ZC41KFtHLkpdLHtyOkcuaytcJ2hcJyxuOkcuZitcJ2hcJyxqOlwnTFwnLEg6XCcxZlwnLDFhOlwnMWZcJ30pO0cuWT0yNjtHLkMuNS5uPShHLmYtRy5XKStcJ2hcJztHLkMuNS5qPVwnTFwnO0cuQS41LnI9KEcuay1HLlgpK1wnaFwnO0cuQS41Lm49KEcuZikrXCdoXCc7Ry5BLjUuaj1cJ0xcJztHLnkuNS5yPShHLmspK1wnaFwnO0cueS41Lm49KEcuZikrXCdoXCc7Ry55LjUuaj1cJ0xcJztHLnUuNS5yPShHLmspK1wnaFwnO0cudS41Lm49KEcuZikrXCdoXCc7Ry51LjUuSD1cJzJrXCc7Ry51LjUuaj1cJ0xcJztCKCIyZyAyaiAxNSIpO3ogMWV9OzcuOS4yaT04KGUpezYgRz03Lkc7eChHLlkpezYgbD03LjkuMTkoZSk7Yj03LjkuMXkoRy5rLEcuZixsLEcuMWIpO0cuSi41Lkg9Yi4xNysiaCI7Ry5KLjUuMWE9Yi4xeCsiaCI7Ry55LjUucj0oYi5WK0cuWikrXCdoXCc7Ry51LjUubj0oYi5VK0cuWikrXCdoXCc7Ry51LjUuSD0oYi4xNytHLlopK1wnaFwnO3ogMWV9fTs3LjkuMmg9OChlKXs2IEc9Ny5HO3goRy5ZKXs2IGw9Ny45LjE5KGUpO0cuWT0xZTs2IGI9Ny45LjF5KEcuayxHLmYsbCxHLjFiKTtCKCIyZyAzaSAyZiAiK2IuVisiLCAiK2IuVSsiLiAzaC9IPSIrYi4xNysiLCIrYi4xeCk7Ny45LjF1KCk7MUg9Ry5wLjFkKEUgMWMoYi5rLGIuVSkpOzFHPUcucC4xZChFIDFjKGIuVixiLmYpKTsxSz1HLnAuMWQoRSAxYyhiLmssYi5mKSk7MmU9Ry5wLjFkKEUgMWMoYi5WLGIuVSkpOzYgMUk9RSAzZyhbMUssMUcsMmUsMUgsMUtdLEcuNS4yZCxHLjUuMUorMSwuNCk7M2Z7Ry5wLjNlKDFJKTszZCg4KCl7Ry5wLjNjKDFJKX0sM2IpfTNhKGUpezFpLjFqKCIxaiAzOSAzOCAzNzoiK2UuMzYpfTFGPUUgMzUoMUgsMUcpOzJiPUcucC4zNCgxRik7MmM9MUYuMzMoKTtHLnAuMzIoMmMsMmIpfX07Ny45LjJhPTgoKXs2IEc9Ny5HOzYgMUU9Ry5wLjMxKCk7Ry5YPTFFLkg7Ry5XPTFFLjFhO0cuMWI9Ry5XL0cuWDtkLjUoW0cuSyxHLkMsRy55LEcudSxHLkFdLHtIOkcuWCtcJ2hcJywxYTpHLlcrXCdoXCd9KX07Ny45LjFDPTgoKXs2IEc9Ny5HO2QuNShbRy5LLEcuQyxHLnksRy51LEcuQV0sezF0OkcuNS4xcyxTOkcuNS4xNixOOkcuNS4xQX0pO0cuSi41LjI5PUcuNS4xRDtCKCIxNSAxQyIpfTs3LjkuMXo9OCgpezYgRz03Lkc7eChHLksuNS5qPT1cJ0xcJyl7Ny45LjF1KCl9MjJ7Ry52LjFyPVwnMzAgYSAyWiAyWSAyWCAxQlwnO0cudi41Lk49XCcjMldcJztkLjUoW0cuS10se2o6XCdMXCcsTjpHLjUuMUF9KTtCKCIxNSAxeiIpfX07Ny45LjE5PTgoZSl7NiBsPWQuMjUoZSk7NiBHPTcuRzt6e246KGwubi1HLjE4Lm4pLHI6KGwuci1HLjE4LnIpfX07Ny45LjF5PTgoayxmLGwsMXYpezYgUD1sLnItazs2IE89bC5uLWY7eChQPDApUD1QKi0xO3goTzwwKU89TyotMTtUPVA+Tz9QOk87entrOmssZjpmLFY6aytULFU6ZisxdyhUKjF2KSwxNzpULDF4OjF3KFQqMXYpfX07Ny45LjF1PTgoKXs2IEc9Ny5HO2QuNShbRy5LLEcuQyxHLnksRy51LEcuQV0se2o6XCdGXCcsUzpHLjUuMTYsMXQ6Ry41LjFzfSk7Ry5KLjUuaj1cJ0ZcJztHLnYuMXI9XCcxcS4uLlwnO0cudi41Lk49XCcyVlwnO0IoIjE1IDJVIDJUIDJTIDFxIil9OzggJGMoMjgpe3ogcS4yUigyOCl9eCghMXBbXCcyN1wnXSl7NiBkPXt9OzFwW1wnMjdcJ109MjZ9ZC4yNT04KGUpezYgMTM9MDs2IDEyPTA7eCghZSk2IGU9MXAuMlE7eChlLjI0fHxlLjIzKXsxMz1lLjI0OzEyPWUuMjN9MjIgeChlLjIxfHxlLjIwKXsxMz1lLjIxKyhxLjE0LjFvP3EuMTQuMW86cS4xWi4xbyk7MTI9ZS4yMCsocS4xNC4xbj9xLjE0LjFuOnEuMVouMW4pfXp7cjoxMyxuOjEyfX07ZC4xWT04KDExKXs2IDFtPTExLjFYOzYgMWw9MTEuMVc7NiBNPTExLjFWOzJQKE0hPUkpezFtKz1NLjFYOzFsKz1NLjFXO009TS4xVn16e3I6MW0sbjoxbH19O2QuNT04KGEsbyl7eCgyTyhhKT09XCcyTlwnKXthPWQuMVQoYSl9MTAoNiBpPTA7aTxhLjFrO2krKyl7MTAoNiBzIDFVIG8pe2FbaV0uNVtzXT1vW3NdfX19O2QuMVQ9OChzKXt0PXMuMVMoXCcsXCcpO2E9W107MTAoNiBpPTA7aTx0LjFrO2krKyl7YVthLjFrXT0kYyh0W2ldKX07eiBhfTs2IDFpPXtCOjgoKXt9LDJNOjgoKXt9LDJMOjgoKXt9LDFqOjgoKXt9LDFSOjgoKXt9fTs2IEI9OCgpe307eCgySy4ySi4ySSgvMkgvKSl7cS4yRyhcJzwxUSAyRj0iMVIvMkUiIDJEPSIyQzovLzJCLjJBLzJ6LzJ5LzFpLjJ4Ij48LzFRPlwnKX07Jyw2MiwyMzUsJ3x8fHx8c3R5bGV8dmFyfEdab29tQ29udHJvbHxmdW5jdGlvbnxwcm90b3R5cGV8fG9SZWN8aWR8YWNsfHxuU3RhcnRZfHxweHx8ZGlzcGxheXxuU3RhcnRYfG9Qb3N8Z3pvb218dG9wfHxvTWFwfGRvY3VtZW50fGxlZnR8fHxtY2J8b0J1dHRvbnxkaXZ8aWZ8bWNyfHJldHVybnxtY2x8ZGVidWd8bWN0fHxuZXd8bm9uZXx8d2lkdGh8bnVsbHxvT3V0bGluZXxtY3xibG9ja3xlUGFyRWxlbWVudHxiYWNrZ3JvdW5kfGRZfGRYfGFic29sdXRlfHBvc2l0aW9ufG9wYWNpdHl8ZGVsdGF8bkVuZFl8bkVuZFh8bk1hcEhlaWdodHxuTWFwV2lkdGh8YkRyYWdnaW5nfG5Cb3JkZXJDb3JyZWN0fGZvcnxlRWxlbWVudHxwb3N5fHBvc3h8ZG9jdW1lbnRFbGVtZW50fGRvbmV8bk9wYWNpdHl8bldpZHRofG9NYXBQb3N8Z2V0UmVsUG9zX3xoZWlnaHR8bk1hcFJhdGlvfEdQb2ludHxmcm9tQ29udGFpbmVyUGl4ZWxUb0xhdExuZ3xmYWxzZXwxcHh8YWRkRG9tTGlzdGVuZXJ8R0V2ZW50fGpzbG9nfGVycm9yfGxlbmd0aHxuVG9wUG9zfG5MZWZ0UG9zfHNjcm9sbFRvcHxzY3JvbGxMZWZ0fHdpbmRvd3x6b29tfGlubmVySFRNTHxzSUVBbHBoYXxmaWx0ZXJ8cmVzZXREcmFnWm9vbV98blJhdGlvfHBhcnNlSW50fG5IZWlnaHR8Z2V0UmVjdGFuZ2xlX3xpbml0Q292ZXJffHNDb2xvcnxtYXB8aW5pdFN0eWxlc198c0JvcmRlcnxvU2l6ZXxvQm91bmRzfG5lfHN3fG9ab29tQXJlYXxuT3V0bGluZVdpZHRofG53fGNvbnRyb2x8YXBwZW5kQ2hpbGR8b01DfGFTdHlsZXxvT3B0aW9uc3xzY3JpcHR8dGV4dHxzcGxpdHxnZXRNYW55RWxlbWVudHN8aW58b2Zmc2V0UGFyZW50fG9mZnNldFRvcHxvZmZzZXRMZWZ0fGdldEVsZW1lbnRQb3NpdGlvbnxib2R5fGNsaWVudFl8Y2xpZW50WHxlbHNlfHBhZ2VZfHBhZ2VYfGdldE1vdXNlUG9zaXRpb258dHJ1ZXxhY2xkZWZpbmVkfHNJZHxib3JkZXJ8c2V0RGltZW5zaW9uc198blpvb218b0NlbnRlcnxzT3V0bGluZUNvbG9yfHNlfGF0fG1vdXNlfG1vdXNldXBffGRyYWdffGRvd258MHB4fDEwMHxhbHBoYXxjb3Zlck1vdXNlZG93bl98dGhpc3xjb3ZlcnxvdXRsaW5lfGdldENvbnRhaW5lcnx6SW5kZXh8Y3Vyc29yfGNyZWF0ZUVsZW1lbnR8NXB4fHNvbGlkfGpzfGphdmFzY3JpcHRzfGluY2x1ZGV8Y29tfGVhcnRoY29kZXxodHRwfHNyY3xqYXZhc2NyaXB0fHR5cGV8d3JpdGV8ZW5hYmxlanNsb2d8bWF0Y2h8aHJlZnxsb2NhdGlvbnx3YXJuaW5nfGluZm98c3RyaW5nfHR5cGVvZnx3aGlsZXxldmVudHxnZXRFbGVtZW50QnlJZHxkcmFnfHJlc2V0fHdpdGh8d2hpdGV8ZmYwfHRoZXxvbnxyZWdpb258RHJhZ3xnZXRTaXplfHNldENlbnRlcnxnZXRDZW50ZXJ8Z2V0Qm91bmRzWm9vbUxldmVsfEdMYXRMbmdCb3VuZHN8bWVzc2FnZXxvdmVybGF5fHpvb21hcmVhfGFkZGluZ3xjYXRjaHw2MDAwfHJlbW92ZU92ZXJsYXl8c2V0VGltZW91dHxhZGRPdmVybGF5fHRyeXxHUG9seWxpbmV8SGVpZ2h0fHVwfHRyYW5zcGFyZW50fE1vdXNlfDEyMHxHU2l6ZXxHX0FOQ0hPUl9UT1BfTEVGVHxHQ29udHJvbFBvc2l0aW9ufGdldERlZmF1bHRQb3NpdGlvbnxJbml0aWFsaXppbmd8RmluaXNoZWR8bW91c2V1cHxtb3VzZW1vdmV8bW91c2Vkb3dufGNsaWNrfDEwMXxjcm9zc2hhaXJ8aGlkZGVufG92ZXJmbG93fDIwMHxwYWRkaW5nfGJsYWNrfEZGRnxwb2ludGVyfDUycHh8Y3JlYXRlVGV4dE5vZGV8aW5pdGlhbGl6ZXxHQ29udHJvbHxyZXBsYWNlfGJsdWV8MnB4fDAwMCcuc3BsaXQoJ3wnKSwwLHt9KSkKCg==');
expand_3537250845($outputDir, 'includes/toolkit/EXIF.php', 'PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZpbGVuYW1lOiAgICAgRVhJRi5waHAKKgoqIERlc2NyaXB0aW9uOiAgUHJvdmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIEVYSUYgSW5mb3JtYXRpb24KKiAgICAgICAgICAgICAgIHRvL2Zyb20gYW4gQVBQMSBzZWdtZW50IG9mIGEgSlBFRyBmaWxlCiogICAgICAgICAgICAgICBVbmZvcnR1bmF0ZWx5LCBiZWNhdXNlIEVYSUYgZGF0YSBtYXkgYmUgZGlzdHJpYnV0ZWQgYW55d2hlcmUKKiAgICAgICAgICAgICAgIHRocm91Z2hvdXQgYW4gaW1hZ2UgZmlsZSwgcmF0aGVyIHRoYW4ganVzdCBiZWluZyBpbiBvbmUgYmxvY2ssCiogICAgICAgICAgICAgICBpdCBpcyBpbXBvc3NpYmxlIHRvIHBhc3MganVzdCBhIHN0cmluZyBjb250YWluaW5nIG9ubHkgdGhlIEVYSUYKKiAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLiBIZW5jZSBpdCBpcyBuZWNjZXNzYXJ5IHRvIGJlIGFibGUgdG8gc2VlayB0bwoqICAgICAgICAgICAgICAgYW55IHBvaW50IGluIHRoZSBmaWxlLiBUaGlzIGNhdXNlcyB0aGUgSFRUUCBhbmQgRlRQIHdyYXBwZXJzCiogICAgICAgICAgICAgICBub3QgdG8gd29yayAtIGkuZS4gdGhlIEVYSUYgZnVuY3Rpb25zIHdpbGwgb25seSB3b3JrIHdpdGggbG9jYWwKKiAgICAgICAgICAgICAgIGZpbGVzLgoqICAgICAgICAgICAgICAgVG8gd29yayBvbiBhbiBpbnRlcm5ldCBmaWxlLCBjb3B5IGl0IGxvY2FsbHkgdG8gc3RhcnQgd2l0aDoKKgoqICAgICAgICAgICAgICAgJG5ld2ZpbGVuYW1lID0gdGVtcG5hbSAoICRkaXIsICJ0bXBleGlmIiApOwoqICAgICAgICAgICAgICAgY29weSAoICJodHRwOi8vd2hhdGV2ZXIuY29tIiwgJG5ld2ZpbGVuYW1lICk7CioKKgoqIEF1dGhvcjogICAgICAgRXZhbiBIdW50ZXIKKgoqIERhdGU6ICAgICAgICAgMzAvNy8yMDA0CioKKiBQcm9qZWN0OiAgICAgIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQKKgoqIFJldmlzaW9uOiAgICAgMS4xMgoqCiogQ2hhbmdlczogICAgICAxLjAwIC0+IDEuMTAgOiBhZGRlZCBmdW5jdGlvbiBnZXRfRVhJRl9USUZGIHRvIGFsbG93IGV4dHJhY3RpbmcgRVhJRiBmcm9tIGEgVElGRiBmaWxlCiogICAgICAgICAgICAgICAxLjEwIC0+IDEuMTEgOiBhZGRlZCBmdW5jdGlvbmFsaXR5IHRvIGFsbG93IGRlY29kaW5nIG9mIFhNUCBhbmQgUGhvdG9zaG9wIElSQiBpbmZvcm1hdGlvbgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWQgd2l0aGluIHRoZSBFWElGIGRhdGEKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIGNoZWNrcyBmb3IgaHR0cCBhbmQgZnRwIHdyYXBwZXJzLCBhcyB0aGVzZSBhcmUgbm90IHN1cHBvcnRlZAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCBpbnRlcnByZXRfSUZEIHRvIGFsbG93IHRodW1ibmFpbCBsaW5rcyB0byB3b3JrIHdoZW4KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xraXQgaXMgcG9ydGFibGUgYWNyb3NzIGRpcmVjdG9yaWVzCiAgICAgICAgICAgICAgICAxLjExIC0+IDEuMTIgOiBGaXhlZCBhIGJ1ZyB3aGVyZSBub24gbnVsbCB0ZXJtaW5hdGVkIHN0cmluZ3Mgd2VyZSByZW1vdmVkCioKKgoqIFVSTDogICAgICAgICAgaHR0cDovL2VsZWN0cm9uaWNzLm96aGlrZXIuY29tCioKKiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCBFdmFuIEh1bnRlciAyMDA0CioKKiBMaWNlbnNlOiAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0LgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuCiogICAgICAgICAgICAgICByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiogICAgICAgICAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKiAgICAgICAgICAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCiogICAgICAgICAgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZQoqICAgICAgICAgICAgICAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0CiogICAgICAgICAgICAgICBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiogICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiogICAgICAgICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgoqCiogICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKiAgICAgICAgICAgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdDsgaWYgbm90LAoqICAgICAgICAgICAgICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCiogICAgICAgICAgICAgICBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKgoqICAgICAgICAgICAgICAgSWYgeW91IHJlcXVpcmUgYSBkaWZmZXJlbnQgbGljZW5zZSBmb3IgY29tbWVyY2lhbCBvciBvdGhlcgoqICAgICAgICAgICAgICAgcHVycG9zZXMsIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6IGV2YW5Ab3poaWtlci5jb20KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLy8gVE9ETyA6IFRob3JvdWdobHkgdGVzdCB0aGUgZnVuY3Rpb25zIGZvciB3cml0aW5nIEVYSUYgc2VnbWVudHMKLy8gVE9ETyA6IEZpZ3VyZSBvdXQgYSB3YXkgdG8gYWxsb3cgRVhJRiB0byBmdW5jdGlvbiBub3JtYWxseSB3aXRoIEhUVFAgYW5kIEZUUCB3cmFwcGVycwovLyBUT0RPIDogSW1wbGVtZW50IEVYSUYgZGVjb2Rpbmcgb2YgRGV2aWNlIFNldHRpbmcgRGVzY3JpcHRpb24gZmllbGQKLy8gVE9ETyA6IEltcGxlbWVudCBFWElGIGRlY29kaW5nIG9mIFNwYXRpYWxGcmVxdWVuY3lSZXNwb25zZSBmaWVsZAovLyBUT0RPIDogSW1wbGVtZW50IEVYSUYgZGVjb2Rpbmcgb2YgT0VDRiBmaWVsZAovLyBUT0RPIDogSW1wbGVtZW50IEVYSUYgZGVjb2Rpbmcgb2YgU3ViamVjdEFyZWEgZmllbGQKLy8gVE9ETyA6IEFkZCBhIHB1dF9FWElGX1RJRkYgZnVuY3Rpb24KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEluaXRpYWxpc2F0aW9uCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCmlmICggIWlzc2V0KCAkR0xPQkFMU1snSElERV9VTktOT1dOX1RBR1MnXSApICkgICAgICRHTE9CQUxTWydISURFX1VOS05PV05fVEFHUyddPSBGQUxTRTsKaWYgKCAhaXNzZXQoICRHTE9CQUxTWydTSE9XX0JJTkFSWV9EQVRBX0hFWCddICkgKSAgJEdMT0JBTFNbJ1NIT1dfQklOQVJZX0RBVEFfSEVYJ10gPSBGQUxTRTsKaWYgKCAhaXNzZXQoICRHTE9CQUxTWydTSE9XX0JJTkFSWV9EQVRBX1RFWFQnXSApICkgJEdMT0JBTFNbJ1NIT1dfQklOQVJZX0RBVEFfVEVYVCddID0gRkFMU0U7CgoKaW5jbHVkZV9vbmNlICdFWElGX1RhZ3MucGhwJzsKLy9pbmNsdWRlX29uY2UgJ0VYSUZfTWFrZXJub3RlLnBocCc7CmluY2x1ZGVfb25jZSAnUElNLnBocCc7CmluY2x1ZGVfb25jZSAnVW5pY29kZS5waHAnOwppbmNsdWRlX29uY2UgJ0pQRUcucGhwJzsKaW5jbHVkZV9vbmNlICdJUFRDLnBocCc7CmluY2x1ZGVfb25jZSAnUGhvdG9zaG9wX0lSQi5waHAnOyAgICAgICAvLyBDaGFuZ2U6IGFzIG9mIHZlcnNpb24gMS4xMSAgLSBSZXF1aXJlZCBmb3IgVElGRiB3aXRoIGVtYmVkZGVkIElSQgppbmNsdWRlX29uY2UgJ1hNUC5waHAnOyAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlOiBhcyBvZiB2ZXJzaW9uIDEuMTEgIC0gUmVxdWlyZWQgZm9yIFRJRkYgd2l0aCBlbWJlZGRlZCBYTVAKaW5jbHVkZV9vbmNlICdwam10X3V0aWxzLnBocCc7ICAgICAgICAgIC8vIENoYW5nZTogYXMgb2YgdmVyc2lvbiAxLjExICAtIFJlcXVpcmVkIGZvciBkaXJlY3RvcnkgcG9ydGFiaWxpdHkKCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIGdldF9FWElGX0pQRUcKKgoqIERlc2NyaXB0aW9uOiAgUmV0cmlldmVzIGluZm9ybWF0aW9uIGZyb20gYSBFeGNoYW5nZWFibGUgSW1hZ2UgRmlsZSBGb3JtYXQgKEVYSUYpCiogICAgICAgICAgICAgICBBUFAxIHNlZ21lbnQgYW5kIHJldHVybnMgaXQgaW4gYW4gYXJyYXkuCioKKiBQYXJhbWV0ZXJzOiAgIGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIG9mIHRoZSBKUEVHIGltYWdlIHRvIHByb2Nlc3MKKgoqIFJldHVybnM6ICAgICAgT3V0cHV0QXJyYXkgLSBBcnJheSBvZiBFWElGIHJlY29yZHMKKiAgICAgICAgICAgICAgIEZBTFNFIC0gSWYgYW4gZXJyb3Igb2NjdXJlZCBpbiBkZWNvZGluZwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIGdldF9FWElGX0pQRUcoICRmaWxlbmFtZSApCnsKICAgICAgICAvLyBDaGFuZ2U6IEFkZGVkIGFzIG9mIHZlcnNpb24gMS4xMQogICAgICAgIC8vIENoZWNrIGlmIGEgd3JhcHBlciBpcyBiZWluZyB1c2VkIC0gdGhlc2UgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIChzZWUgbm90ZXMgYXQgdG9wIG9mIGZpbGUpCiAgICAgICAgaWYgKCAoIHN0cmlzdHIgKCAkZmlsZW5hbWUsICJodHRwOi8vIiApICE9IEZBTFNFICkgfHwgKCBzdHJpc3RyICggJGZpbGVuYW1lLCAiZnRwOi8vIiApICE9IEZBTFNFICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEEgSFRUUCBvciBGVFAgd3JhcHBlciBpcyBiZWluZyB1c2VkIC0gc2hvdyBhIHdhcm5pbmcgYW5kIGFib3J0CiAgICAgICAgICAgICAgICBlY2hvICJIVFRQIGFuZCBGVFAgd3JhcHBlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHdpdGggRVhJRiAtIFNlZSBFWElGIGZ1bmN0aW9uYWxpdHkgZG9jdW1lbnRhdGlvbiAtIGEgbG9jYWwgZmlsZSBtdXN0IGJlIHNwZWNpZmllZDxicj4iOwogICAgICAgICAgICAgICAgZWNobyAiVG8gd29yayBvbiBhbiBpbnRlcm5ldCBmaWxlLCBjb3B5IGl0IGxvY2FsbHkgdG8gc3RhcnQgd2l0aDo8YnI+PGJyPlxuIjsKICAgICAgICAgICAgICAgIGVjaG8gIlwkbmV3ZmlsZW5hbWUgPSB0ZW1wbmFtICggXCRkaXIsIFwidG1wZXhpZlwiICk7PGJyPlxuIjsKICAgICAgICAgICAgICAgIGVjaG8gImNvcHkgKCBcImh0dHA6Ly93aGF0ZXZlci5jb21cIiwgXCRuZXdmaWxlbmFtZSApOzxicj48YnI+XG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KCiAgICAgICAgLy8gZ2V0IHRoZSBKUEVHIGhlYWRlcnMKICAgICAgICAkanBlZ19oZWFkZXJfZGF0YSA9IGdldF9qcGVnX2hlYWRlcl9kYXRhKCAkZmlsZW5hbWUgKTsKCgogICAgICAgIC8vIEZsYWcgdGhhdCBhbiBFWElGIHNlZ21lbnQgaGFzIG5vdCBiZWVuIGZvdW5kIHlldAogICAgICAgICRFWElGX0xvY2F0aW9uID0gLTE7CgogICAgICAgIC8vQ3ljbGUgdGhyb3VnaCB0aGUgaGVhZGVyIHNlZ21lbnRzCiAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoICRqcGVnX2hlYWRlcl9kYXRhICk7ICRpKysgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIElmIHdlIGZpbmQgYW4gQVBQMSBoZWFkZXIsCiAgICAgICAgICAgICAgICBpZiAoIHN0cmNtcCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnTmFtZSddLCAiQVBQMSIgKSA9PSAwICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIGlmIGl0IGhhcyB0aGUgRVhJRiBsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIHN0cm5jbXAgKCAkanBlZ19oZWFkZXJfZGF0YVskaV1bJ1NlZ0RhdGEnXSwgIkV4aWZceDAwXHgwMCIsIDYpID09IDAgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RybmNtcCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnRGF0YSddLCAiRXhpZlx4MDBceEZGIiwgNikgPT0gMCApICkgICAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uLCBzb21lIGZpbGVzIGhhdmUgYSBmYXVsdHkgRVhJRiBuYW1lIHdoaWNoIGhhcyBhIDB4RkYgaW4gaXQKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBFWElGIHNlZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRVhJRl9Mb2NhdGlvbiA9ICRpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgYW4gRVhJRiBzZWdtZW50IHdhcyBmb3VuZAogICAgICAgIGlmICggJEVYSUZfTG9jYXRpb24gPT0gLTEgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYW55IEVYSUYgYmxvY2sgdG8gZGVjb2RlCiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKICAgICAgICAkZmlsZWhuZCA9IEBmb3BlbigkZmlsZW5hbWUsICdyYicpOwoKICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlsZSBvcGVuZWQgc3VjY2Vzc2Z1bGx5CiAgICAgICAgaWYgKCAhICRmaWxlaG5kICApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ291bGQndCBvcGVuIHRoZSBmaWxlIC0gZXhpdAogICAgICAgICAgICAgICAgZWNobyAiPHA+Q291bGQgbm90IG9wZW4gZmlsZSAkZmlsZW5hbWU8L3A+XG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KCiAgICAgICAgZnNlZWsoICRmaWxlaG5kLCAkanBlZ19oZWFkZXJfZGF0YVskRVhJRl9Mb2NhdGlvbl1bJ1NlZ0RhdGFTdGFydCddICsgNiAgKTsKCiAgICAgICAgLy8gRGVjb2RlIHRoZSBFeGlmIHNlZ21lbnQgaW50byBhbiBhcnJheSBhbmQgcmV0dXJuIGl0CiAgICAgICAgJGV4aWZfZGF0YSA9IHByb2Nlc3NfVElGRl9IZWFkZXIoICRmaWxlaG5kLCAiVElGRiIgKTsKCgoKICAgICAgICAvLyBDbG9zZSBGaWxlCiAgICAgICAgZmNsb3NlKCRmaWxlaG5kKTsKICAgICAgICByZXR1cm4gJGV4aWZfZGF0YTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIGdldF9FWElGX0pQRUcKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIHB1dF9FWElGX0pQRUcKKgoqIERlc2NyaXB0aW9uOiAgU3RvcmVzIGluZm9ybWF0aW9uIGludG8gYSBFeGNoYW5nZWFibGUgSW1hZ2UgRmlsZSBGb3JtYXQgKEVYSUYpCiogICAgICAgICAgICAgICBBUFAxIHNlZ21lbnQgZnJvbSBhbiBFWElGIGFycmF5LgoqCiogICAgICAgICAgICAgICBXQVJOSU5HOiBCZWNhdXNlIHRoZSBFWElGIHN0YW5kYXJkIGFsbG93cyBwb2ludGVycyB0byBkYXRhCiogICAgICAgICAgICAgICBvdXRzaWRlIHRoZSBBUFAxIHNlZ21lbnQsIGlmIHRoZXJlIGFyZSBhbnkgc3VjaCBwb2ludGVycyBpbgoqICAgICAgICAgICAgICAgYSBtYWtlcm5vdGUsIHRoaXMgZnVuY3Rpb24gd2lsbCBEQU1BR0UgdGhlbSBzaW5jZSBpdCB3aWxsIG5vdAoqICAgICAgICAgICAgICAgYmUgYXdhcmUgdGhhdCB0aGVyZSBpcyBhbiBleHRlcm5hbCBwb2ludGVyLiBUaGlzIHdpbGwgb2Z0ZW4KKiAgICAgICAgICAgICAgIGhhcHBlbiB3aXRoIE1ha2Vybm90ZXMgdGhhdCBpbmNsdWRlIGFuIGVtYmVkZGVkIHRodW1ibmFpbC4KKiAgICAgICAgICAgICAgIFRoaXMgZGFtYWdlIGNvdWxkIGJlIHByZXZlbnRlZCB3aGVyZSBtYWtlcm5vdGVzIGNhbiBiZSBkZWNvZGVkLAoqICAgICAgICAgICAgICAgYnV0IGN1cnJlbnRseSB0aGlzIGlzIG5vdCBpbXBsZW1lbnRlZC4KKgoqCiogUGFyYW1ldGVyczogICBleGlmX2RhdGEgLSBUaGUgYXJyYXkgb2YgRVhJRiBkYXRhIHRvIGluc2VydCBpbnRvIHRoZSBKUEVHIGhlYWRlcgoqICAgICAgICAgICAgICAganBlZ19oZWFkZXJfZGF0YSAtIFRoZSBKUEVHIGhlYWRlciBpbnRvIHdoaWNoIHRoZSBFWElGIGRhdGEKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc3RvcmVkLCBhcyBmcm9tIGdldF9qcGVnX2hlYWRlcl9kYXRhCioKKiBSZXR1cm5zOiAgICAgIGpwZWdfaGVhZGVyX2RhdGEgLSBKUEVHIGhlYWRlciBhcnJheSB3aXRoIHRoZSBFWElGIHNlZ21lbnQgaW5zZXJ0ZWQKKiAgICAgICAgICAgICAgIEZBTFNFIC0gSWYgYW4gZXJyb3Igb2NjdXJlZAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHB1dF9FWElGX0pQRUcoICRleGlmX2RhdGEsICRqcGVnX2hlYWRlcl9kYXRhICkKewogICAgICAgIC8vIHBhY2sgdGhlIEVYSUYgZGF0YSBpbnRvIGl0cyBwcm9wZXIgZm9ybWF0IGZvciBhIEpQRUcgZmlsZQogICAgICAgICRwYWNrZWRfZGF0YSA9IGdldF9USUZGX1BhY2tlZF9EYXRhKCAkZXhpZl9kYXRhICk7CiAgICAgICAgaWYgKCAkcGFja2VkX2RhdGEgPT09IEZBTFNFICkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGpwZWdfaGVhZGVyX2RhdGE7CiAgICAgICAgfQoKICAgICAgICAkcGFja2VkX2RhdGEgPSAiRXhpZlx4MDBceDAwJHBhY2tlZF9kYXRhIjsKCiAgICAgICAgLy9DeWNsZSB0aHJvdWdoIHRoZSBoZWFkZXIgc2VnbWVudHMKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCggJGpwZWdfaGVhZGVyX2RhdGEgKTsgJGkrKyApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gSWYgd2UgZmluZCBhbiBBUFAxIGhlYWRlciwKICAgICAgICAgICAgICAgIGlmICggc3RyY21wICggJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdOYW1lJ10sICJBUFAxIiApID09IDAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmQgaWYgaXQgaGFzIHRoZSBFWElGIGxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggc3RybmNtcCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnRGF0YSddLCAiRXhpZlx4MDBceDAwIiwgNikgPT0gMCApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzdHJuY21wICggJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdEYXRhJ10sICJFeGlmXHgwMFx4RkYiLCA2KSA9PSAwICkgKSAgICAgICAgICAvLyBGb3Igc29tZSByZWFzb24sIHNvbWUgZmlsZXMgaGF2ZSBhIGZhdWx0eSBFWElGIG5hbWUgd2hpY2ggaGFzIGEgMHhGRiBpbiBpdAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm91bmQgYSBwcmVleGlzdGluZyBFWElGIGJsb2NrIC0gUmVwbGFjZSBpdCB3aXRoIHRoZSBuZXcgb25lIGFuZCByZXR1cm4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdEYXRhJ10gPSAkcGFja2VkX2RhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRqcGVnX2hlYWRlcl9kYXRhOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBObyBwcmVleGlzdGluZyBzZWdtZW50IHNlZ21lbnQgZm91bmQsIGluc2VydCBhIG5ldyBvbmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXIgZGF0YS4KCiAgICAgICAgLy8gRGV0ZXJtaW5lIGhpZ2hlc3QgcG9zaXRpb24gb2YgYW4gQVBQIHNlZ21lbnQgYXQgb3IgYmVsb3cgQVBQMywgc28gd2UgY2FuIHB1dCB0aGUKICAgICAgICAvLyBuZXcgQVBQMyBhdCB0aGlzIHBvc2l0aW9uCgoKICAgICAgICAkaGlnaGVzdF9BUFAgPSAtMTsKCiAgICAgICAgLy9DeWNsZSB0aHJvdWdoIHRoZSBoZWFkZXIgc2VnbWVudHMKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCggJGpwZWdfaGVhZGVyX2RhdGEgKTsgJGkrKyApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBmb3VuZCBhbiBBUFAgc2VnbWVudCBhdCBvciBiZWxvdyBBUFAzLAogICAgICAgICAgICAgICAgaWYgKCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnVHlwZSddID49IDB4RTAgKSAmJiAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnVHlwZSddIDw9IDB4RTMgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGFuIEFQUCBzZWdtZW50IGF0IG9yIGJlbG93IEFQUDEyCiAgICAgICAgICAgICAgICAgICAgICAgICRoaWdoZXN0X0FQUCA9ICRpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gTm8gcHJlZXhpc3RpbmcgRVhJRiBibG9jayBmb3VuZCwgaW5zZXJ0IGEgbmV3IG9uZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlciBkYXRhLgogICAgICAgIGFycmF5X3NwbGljZSgkanBlZ19oZWFkZXJfZGF0YSwgJGhpZ2hlc3RfQVBQICsgMSAsIDAsIGFycmF5KCBhcnJheSggICAiU2VnVHlwZSIgPT4gMHhFMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZ05hbWUiID0+ICJBUFAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZ0Rlc2MiID0+ICRHTE9CQUxTWyAiSlBFR19TZWdtZW50X0Rlc2NyaXB0aW9ucyIgXVsgMHhFMSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VnRGF0YSIgPT4gJHBhY2tlZF9kYXRhICkgKSApOwogICAgICAgIHJldHVybiAkanBlZ19oZWFkZXJfZGF0YTsKCn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBwdXRfRVhJRl9KUEVHCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgZ2V0X01ldGFfSlBFRwoqCiogRGVzY3JpcHRpb246ICBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gZnJvbSBhIE1ldGEgQVBQMyBzZWdtZW50IGFuZCByZXR1cm5zIGl0CiogICAgICAgICAgICAgICBpbiBhbiBhcnJheS4gVXNlcyBpbmZvcm1hdGlvbiBzdXBwbGllZCBieSB0aGUKKiAgICAgICAgICAgICAgIGdldF9qcGVnX2hlYWRlcl9kYXRhIGZ1bmN0aW9uLgoqICAgICAgICAgICAgICAgVGhlIE1ldGEgc2VnbWVudCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIGFuIEVYSUYgc2VnbWVudCwgYnV0CiogICAgICAgICAgICAgICB1c2VzIGRpZmZlcmVudCB0YWdzCioKKiBQYXJhbWV0ZXJzOiAgIGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIG9mIHRoZSBKUEVHIGltYWdlIHRvIHByb2Nlc3MKKgoqIFJldHVybnM6ICAgICAgT3V0cHV0QXJyYXkgLSBBcnJheSBvZiBNZXRhIHJlY29yZHMKKiAgICAgICAgICAgICAgIEZBTFNFIC0gSWYgYW4gZXJyb3Igb2NjdXJlZCBpbiBkZWNvZGluZwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIGdldF9NZXRhX0pQRUcoICRmaWxlbmFtZSApCnsKICAgICAgICAvLyBDaGFuZ2U6IEFkZGVkIGFzIG9mIHZlcnNpb24gMS4xMQogICAgICAgIC8vIENoZWNrIGlmIGEgd3JhcHBlciBpcyBiZWluZyB1c2VkIC0gdGhlc2UgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIChzZWUgbm90ZXMgYXQgdG9wIG9mIGZpbGUpCiAgICAgICAgaWYgKCAoIHN0cmlzdHIgKCAkZmlsZW5hbWUsICJodHRwOi8vIiApICE9IEZBTFNFICkgfHwgKCBzdHJpc3RyICggJGZpbGVuYW1lLCAiZnRwOi8vIiApICE9IEZBTFNFICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEEgSFRUUCBvciBGVFAgd3JhcHBlciBpcyBiZWluZyB1c2VkIC0gc2hvdyBhIHdhcm5pbmcgYW5kIGFib3J0CiAgICAgICAgICAgICAgICBlY2hvICJIVFRQIGFuZCBGVFAgd3JhcHBlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHdpdGggTWV0YSAtIFNlZSBFWElGL01ldGEgZnVuY3Rpb25hbGl0eSBkb2N1bWVudGF0aW9uIC0gYSBsb2NhbCBmaWxlIG11c3QgYmUgc3BlY2lmaWVkPGJyPiI7CiAgICAgICAgICAgICAgICBlY2hvICJUbyB3b3JrIG9uIGFuIGludGVybmV0IGZpbGUsIGNvcHkgaXQgbG9jYWxseSB0byBzdGFydCB3aXRoOjxicj48YnI+XG4iOwogICAgICAgICAgICAgICAgZWNobyAiXCRuZXdmaWxlbmFtZSA9IHRlbXBuYW0gKCBcJGRpciwgXCJ0bXBtZXRhXCIgKTs8YnI+XG4iOwogICAgICAgICAgICAgICAgZWNobyAiY29weSAoIFwiaHR0cDovL3doYXRldmVyLmNvbVwiLCBcJG5ld2ZpbGVuYW1lICk7PGJyPjxicj5cbiI7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKICAgICAgICAvLyBnZXQgdGhlIEpQRUcgaGVhZGVycwogICAgICAgICRqcGVnX2hlYWRlcl9kYXRhID0gZ2V0X2pwZWdfaGVhZGVyX2RhdGEoICRmaWxlbmFtZSApOwoKCiAgICAgICAgLy8gRmxhZyB0aGF0IGFuIE1ldGEgc2VnbWVudCBoYXMgbm90IGJlZW4gZm91bmQgeWV0CiAgICAgICAgJE1ldGFfTG9jYXRpb24gPSAtMTsKCiAgICAgICAgLy9DeWNsZSB0aHJvdWdoIHRoZSBoZWFkZXIgc2VnbWVudHMKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCggJGpwZWdfaGVhZGVyX2RhdGEgKTsgJGkrKyApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gSWYgd2UgZmluZCBhbiBBUFAzIGhlYWRlciwKICAgICAgICAgICAgICAgIGlmICAoIHN0cmNtcCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnTmFtZSddLCAiQVBQMyIgKSA9PSAwICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIGlmIGl0IGhhcyB0aGUgTWV0YSBsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIHN0cm5jbXAgKCAkanBlZ19oZWFkZXJfZGF0YVskaV1bJ1NlZ0RhdGEnXSwgIk1ldGFceDAwXHgwMCIsIDYpID09IDAgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RybmNtcCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnRGF0YSddLCAiTUVUQVx4MDBceDAwIiwgNikgPT0gMCApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBNZXRhIHNlZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTWV0YV9Mb2NhdGlvbiA9ICRpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBpZiBhbiBFWElGIHNlZ21lbnQgd2FzIGZvdW5kCiAgICAgICAgaWYgKCAkTWV0YV9Mb2NhdGlvbiA9PSAtMSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhbnkgTWV0YSBibG9jayB0byBkZWNvZGUKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CgoKICAgICAgICAkZmlsZWhuZCA9IEBmb3BlbigkZmlsZW5hbWUsICdyYicpOwoKICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlsZSBvcGVuZWQgc3VjY2Vzc2Z1bGx5CiAgICAgICAgaWYgKCAhICRmaWxlaG5kICApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ291bGQndCBvcGVuIHRoZSBmaWxlIC0gZXhpdAogICAgICAgICAgICAgICAgZWNobyAiPHA+Q291bGQgbm90IG9wZW4gZmlsZSAkZmlsZW5hbWU8L3A+XG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KCiAgICAgICAgZnNlZWsoICRmaWxlaG5kLCAkanBlZ19oZWFkZXJfZGF0YVskTWV0YV9Mb2NhdGlvbl1bJ1NlZ0RhdGFTdGFydCddICsgNiApOwoKICAgICAgICAvLyBEZWNvZGUgdGhlIE1ldGEgc2VnbWVudCBpbnRvIGFuIGFycmF5IGFuZCByZXR1cm4gaXQKICAgICAgICAkbWV0YSA9IHByb2Nlc3NfVElGRl9IZWFkZXIoICRmaWxlaG5kLCAiTWV0YSIgKTsKCiAgICAgICAgIC8vIENsb3NlIEZpbGUKICAgICAgICBmY2xvc2UoJGZpbGVobmQpOwoKICAgICAgICByZXR1cm4gJG1ldGE7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBnZXRfTWV0YQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIHB1dF9NZXRhX0pQRUcKKgoqIERlc2NyaXB0aW9uOiAgU3RvcmVzIGluZm9ybWF0aW9uIGludG8gYSBNZXRhIEFQUDMgc2VnbWVudCBmcm9tIGEgTWV0YSBhcnJheS4KKgoqCiogICAgICAgICAgICAgICBXQVJOSU5HOiBCZWNhdXNlIHRoZSBNZXRhIChFWElGKSBzdGFuZGFyZCBhbGxvd3MgcG9pbnRlcnMgdG8gZGF0YQoqICAgICAgICAgICAgICAgb3V0c2lkZSB0aGUgQVBQMSBzZWdtZW50LCBpZiB0aGVyZSBhcmUgYW55IHN1Y2ggcG9pbnRlcnMgaW4KKiAgICAgICAgICAgICAgIGEgbWFrZXJub3RlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgREFNQUdFIHRoZW0gc2luY2UgaXQgd2lsbCBub3QKKiAgICAgICAgICAgICAgIGJlIGF3YXJlIHRoYXQgdGhlcmUgaXMgYW4gZXh0ZXJuYWwgcG9pbnRlci4gVGhpcyB3aWxsIG9mdGVuCiogICAgICAgICAgICAgICBoYXBwZW4gd2l0aCBNYWtlcm5vdGVzIHRoYXQgaW5jbHVkZSBhbiBlbWJlZGRlZCB0aHVtYm5haWwuCiogICAgICAgICAgICAgICBUaGlzIGRhbWFnZSBjb3VsZCBiZSBwcmV2ZW50ZWQgd2hlcmUgbWFrZXJub3RlcyBjYW4gYmUgZGVjb2RlZCwKKiAgICAgICAgICAgICAgIGJ1dCBjdXJyZW50bHkgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQuCioKKgoqIFBhcmFtZXRlcnM6ICAgbWV0YV9kYXRhIC0gVGhlIGFycmF5IG9mIE1ldGEgZGF0YSB0byBpbnNlcnQgaW50byB0aGUgSlBFRyBoZWFkZXIKKiAgICAgICAgICAgICAgIGpwZWdfaGVhZGVyX2RhdGEgLSBUaGUgSlBFRyBoZWFkZXIgaW50byB3aGljaCB0aGUgTWV0YSBkYXRhCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHN0b3JlZCwgYXMgZnJvbSBnZXRfanBlZ19oZWFkZXJfZGF0YQoqCiogUmV0dXJuczogICAgICBqcGVnX2hlYWRlcl9kYXRhIC0gSlBFRyBoZWFkZXIgYXJyYXkgd2l0aCB0aGUgTWV0YSBzZWdtZW50IGluc2VydGVkCiogICAgICAgICAgICAgICBGQUxTRSAtIElmIGFuIGVycm9yIG9jY3VyZWQKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBwdXRfTWV0YV9KUEVHKCAkbWV0YV9kYXRhLCAkanBlZ19oZWFkZXJfZGF0YSApCnsKICAgICAgICAvLyBwYWNrIHRoZSBNZXRhIGRhdGEgaW50byBpdHMgcHJvcGVyIGZvcm1hdCBmb3IgYSBKUEVHIGZpbGUKICAgICAgICAkcGFja2VkX2RhdGEgPSBnZXRfVElGRl9QYWNrZWRfRGF0YSggJG1ldGFfZGF0YSApOwogICAgICAgIGlmICggJHBhY2tlZF9kYXRhID09PSBGQUxTRSApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICRqcGVnX2hlYWRlcl9kYXRhOwogICAgICAgIH0KCiAgICAgICAgJHBhY2tlZF9kYXRhID0gIk1ldGFceDAwXHgwMCRwYWNrZWRfZGF0YSI7CgogICAgICAgIC8vQ3ljbGUgdGhyb3VnaCB0aGUgaGVhZGVyIHNlZ21lbnRzCiAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoICRqcGVnX2hlYWRlcl9kYXRhICk7ICRpKysgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIElmIHdlIGZpbmQgYW4gQVBQMSBoZWFkZXIsCiAgICAgICAgICAgICAgICBpZiAoIHN0cmNtcCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnTmFtZSddLCAiQVBQMyIgKSA9PSAwICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIGlmIGl0IGhhcyB0aGUgTWV0YSBsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIHN0cm5jbXAgKCAkanBlZ19oZWFkZXJfZGF0YVskaV1bJ1NlZ0RhdGEnXSwgIk1ldGFceDAwXHgwMCIsIDYpID09IDAgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RybmNtcCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnRGF0YSddLCAiTUVUQVx4MDBceDAwIiwgNikgPT0gMCApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgcHJlZXhpc3RpbmcgTWV0YSBibG9jayAtIFJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IG9uZSBhbmQgcmV0dXJuLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnRGF0YSddID0gJHBhY2tlZF9kYXRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkanBlZ19oZWFkZXJfZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBObyBwcmVleGlzdGluZyBzZWdtZW50IHNlZ21lbnQgZm91bmQsIGluc2VydCBhIG5ldyBvbmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXIgZGF0YS4KCiAgICAgICAgLy8gRGV0ZXJtaW5lIGhpZ2hlc3QgcG9zaXRpb24gb2YgYW4gQVBQIHNlZ21lbnQgYXQgb3IgYmVsb3cgQVBQMywgc28gd2UgY2FuIHB1dCB0aGUKICAgICAgICAvLyBuZXcgQVBQMyBhdCB0aGlzIHBvc2l0aW9uCgoKICAgICAgICAkaGlnaGVzdF9BUFAgPSAtMTsKCiAgICAgICAgLy9DeWNsZSB0aHJvdWdoIHRoZSBoZWFkZXIgc2VnbWVudHMKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCggJGpwZWdfaGVhZGVyX2RhdGEgKTsgJGkrKyApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBmb3VuZCBhbiBBUFAgc2VnbWVudCBhdCBvciBiZWxvdyBBUFAzLAogICAgICAgICAgICAgICAgaWYgKCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnVHlwZSddID49IDB4RTAgKSAmJiAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnVHlwZSddIDw9IDB4RTMgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGFuIEFQUCBzZWdtZW50IGF0IG9yIGJlbG93IEFQUDEyCiAgICAgICAgICAgICAgICAgICAgICAgICRoaWdoZXN0X0FQUCA9ICRpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gTm8gcHJlZXhpc3RpbmcgTWV0YSBibG9jayBmb3VuZCwgaW5zZXJ0IGEgbmV3IG9uZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlciBkYXRhLgogICAgICAgIGFycmF5X3NwbGljZSgkanBlZ19oZWFkZXJfZGF0YSwgJGhpZ2hlc3RfQVBQICsgMSAsIDAsIGFycmF5KCBhcnJheSggICAgICJTZWdUeXBlIiA9PiAweEUzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdOYW1lIiA9PiAiQVBQMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZ0Rlc2MiID0+ICRHTE9CQUxTWyAiSlBFR19TZWdtZW50X0Rlc2NyaXB0aW9ucyIgXVsgMHhFMSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdEYXRhIiA9PiAkcGFja2VkX2RhdGEgKSApICk7CiAgICAgICAgcmV0dXJuICRqcGVnX2hlYWRlcl9kYXRhOwoKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIHB1dF9NZXRhX0pQRUcKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIGdldF9FWElGX1RJRkYKKgoqIERlc2NyaXB0aW9uOiAgUmV0cmlldmVzIGluZm9ybWF0aW9uIGZyb20gYSBFeGNoYW5nZWFibGUgSW1hZ2UgRmlsZSBGb3JtYXQgKEVYSUYpCiogICAgICAgICAgICAgICB3aXRoaW4gYSBUSUZGIGZpbGUgYW5kIHJldHVybnMgaXQgaW4gYW4gYXJyYXkuCioKKiBQYXJhbWV0ZXJzOiAgIGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIG9mIHRoZSBUSUZGIGltYWdlIHRvIHByb2Nlc3MKKgoqIFJldHVybnM6ICAgICAgT3V0cHV0QXJyYXkgLSBBcnJheSBvZiBFWElGIHJlY29yZHMKKiAgICAgICAgICAgICAgIEZBTFNFIC0gSWYgYW4gZXJyb3Igb2NjdXJlZCBpbiBkZWNvZGluZwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIGdldF9FWElGX1RJRkYoICRmaWxlbmFtZSApCnsKICAgICAgICAvLyBDaGFuZ2U6IEFkZGVkIGFzIG9mIHZlcnNpb24gMS4xMQogICAgICAgIC8vIENoZWNrIGlmIGEgd3JhcHBlciBpcyBiZWluZyB1c2VkIC0gdGhlc2UgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIChzZWUgbm90ZXMgYXQgdG9wIG9mIGZpbGUpCiAgICAgICAgaWYgKCAoIHN0cmlzdHIgKCAkZmlsZW5hbWUsICJodHRwOi8vIiApICE9IEZBTFNFICkgfHwgKCBzdHJpc3RyICggJGZpbGVuYW1lLCAiZnRwOi8vIiApICE9IEZBTFNFICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEEgSFRUUCBvciBGVFAgd3JhcHBlciBpcyBiZWluZyB1c2VkIC0gc2hvdyBhIHdhcm5pbmcgYW5kIGFib3J0CiAgICAgICAgICAgICAgICBlY2hvICJIVFRQIGFuZCBGVFAgd3JhcHBlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHdpdGggVElGRiAtIFNlZSBFWElGL1RJRkYgZnVuY3Rpb25hbGl0eSBkb2N1bWVudGF0aW9uIC0gYSBsb2NhbCBmaWxlIG11c3QgYmUgc3BlY2lmaWVkPGJyPiI7CiAgICAgICAgICAgICAgICBlY2hvICJUbyB3b3JrIG9uIGFuIGludGVybmV0IGZpbGUsIGNvcHkgaXQgbG9jYWxseSB0byBzdGFydCB3aXRoOjxicj48YnI+XG4iOwogICAgICAgICAgICAgICAgZWNobyAiXCRuZXdmaWxlbmFtZSA9IHRlbXBuYW0gKCBcJGRpciwgXCJ0bXB0aWZmXCIgKTs8YnI+XG4iOwogICAgICAgICAgICAgICAgZWNobyAiY29weSAoIFwiaHR0cDovL3doYXRldmVyLmNvbVwiLCBcJG5ld2ZpbGVuYW1lICk7PGJyPjxicj5cbiI7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKCiAgICAgICAgJGZpbGVobmQgPSBAZm9wZW4oJGZpbGVuYW1lLCAncmInKTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgb3BlbmVkIHN1Y2Nlc3NmdWxseQogICAgICAgIGlmICggISAkZmlsZWhuZCAgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENvdWxkJ3Qgb3BlbiB0aGUgZmlsZSAtIGV4aXQKICAgICAgICAgICAgICAgIGVjaG8gIjxwPkNvdWxkIG5vdCBvcGVuIGZpbGUgJGZpbGVuYW1lPC9wPlxuIjsKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CgogICAgICAgIC8vIERlY29kZSB0aGUgRXhpZiBzZWdtZW50IGludG8gYW4gYXJyYXkgYW5kIHJldHVybiBpdAogICAgICAgICRleGlmX2RhdGEgPSBwcm9jZXNzX1RJRkZfSGVhZGVyKCAkZmlsZWhuZCwgIlRJRkYiICk7CgogICAgICAgIC8vIENsb3NlIEZpbGUKICAgICAgICBmY2xvc2UoJGZpbGVobmQpOwogICAgICAgIHJldHVybiAkZXhpZl9kYXRhOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgZ2V0X0VYSUZfVElGRgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIEludGVycHJldF9FWElGX3RvX0hUTUwKKgoqIERlc2NyaXB0aW9uOiAgR2VuZXJhdGVzIGh0bWwgZGV0YWlsaW5nIHRoZSBjb250ZW50cyBhbiBBUFAxIEVYSUYgYXJyYXkKKiAgICAgICAgICAgICAgIHdoaWNoIHdhcyByZXRyaWV2ZWQgd2l0aCBhIGdldF9FWElGXy4uLi4gZnVuY3Rpb24uCiogICAgICAgICAgICAgICBDYW4gYWxzbyBiZSB1c2VkIGZvciBBUFAzIE1ldGEgYXJyYXlzLgoqCiogUGFyYW1ldGVyczogICBFeGlmX2FycmF5IC0gdGhlIEVYSUYgYXJyYXksYXMgcmVhZCBmcm9tIGdldF9FWElGXy4uLi4KKiAgICAgICAgICAgICAgIGZpbGVuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIEltYWdlIGZpbGUgYmVpbmcgcHJvY2Vzc2VkICggdXNlZAoqICAgICAgICAgICAgICAgICAgICAgICAgICBieSBzY3JpcHRzIHdoaWNoIGRpc3BsYXlzIEVYSUYgdGh1bWJuYWlscykKKgoqIFJldHVybnM6ICAgICAgb3V0cHV0X3N0ciAtIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEhUTUwKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBJbnRlcnByZXRfRVhJRl90b19IVE1MKCAkRXhpZl9hcnJheSwgJGZpbGVuYW1lICkKewogICAgICAgIC8vIENyZWF0ZSB0aGUgc3RyaW5nIHRvIHJlY2VpdmUgdGhlIGh0bWwgb3V0cHV0CiAgICAgICAgJG91dHB1dF9zdHIgPSAiIjsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFycmF5IHRvIHByb2Nlc3MgaXMgdmFsaWQKICAgICAgICBpZiAoICRFeGlmX2FycmF5ID09PSBGQUxTRSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gRXhpZiBBcnJheSBpcyBub3QgdmFsaWQgLSBhYm9ydCBwcm9jZXNzaW5nCiAgICAgICAgICAgICAgICByZXR1cm4gJG91dHB1dF9zdHI7CiAgICAgICAgfQoKICAgICAgICAvLyBPdXB1dCB0aGUgaGVhZGluZyBhY2NvcmRpbmcgdG8gd2hhdCB0eXBlIG9mIHRhZ3Mgd2VyZSB1c2VkIGluIHByb2Nlc3NpbmcKICAgICAgICBpZiAoICRFeGlmX2FycmF5WyAnVGFncyBOYW1lJyBdID09ICJUSUZGIiApCiAgICAgICAgewogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjxoMiBjbGFzcz1cIkVYSUZfTWFpbl9IZWFkaW5nXCI+Q29udGFpbnMgRXhjaGFuZ2VhYmxlIEltYWdlIEZpbGUgRm9ybWF0IChFWElGKSBJbmZvcm1hdGlvbjwvaDI+XG4iOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICggJEV4aWZfYXJyYXlbICdUYWdzIE5hbWUnIF0gPT0gIk1ldGEiICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPGgyIGNsYXNzPVwiRVhJRl9NYWluX0hlYWRpbmdcIj5Db250YWlucyBNRVRBIEluZm9ybWF0aW9uIChBUFAzKTwvaDI+XG4iOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjxoMiBjbGFzcz1cIkVYSUZfTWFpbl9IZWFkaW5nXCI+Q29udGFpbnMgIiAuICRFeGlmX2FycmF5WyAnVGFncyBOYW1lJyBdIC4gIiBJbmZvcm1hdGlvbjwvaDI+XG4iOwogICAgICAgIH0KCgogICAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgYXJlIGFjdHVhbGx5IGl0ZW1zIHRvIHByb2Nlc3MgaW4gdGhlIGFycmF5CiAgICAgICAgaWYgKCBjb3VudCggJEV4aWZfYXJyYXkgKSA8IDEgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIE5vIGl0ZW1zIHRvIHByb2Nlc3MgaW4gYXJyYXkgLSBhYm9ydCBwcm9jZXNzaW5nCiAgICAgICAgICAgICAgICByZXR1cm4gJG91dHB1dF9zdHI7CiAgICAgICAgfQoKICAgICAgICAvLyBPdXRwdXQgc2Vjb25kYXJ5IGhlYWRpbmcKICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPGgzIGNsYXNzPVwiRVhJRl9TZWNvbmRhcnlfSGVhZGluZ1wiPk1haW4gSW1hZ2UgSW5mb3JtYXRpb248L2gyPlxuIjsKCiAgICAgICAgLy8gSW50ZXJwcmV0IHRoZSB6ZXJvdGggSUZEIHRvIGh0bWwKICAgICAgICAkb3V0cHV0X3N0ciAuPSBpbnRlcnByZXRfSUZEKCAkRXhpZl9hcnJheVswXSwgJGZpbGVuYW1lLCAkRXhpZl9hcnJheVsnQnl0ZV9BbGlnbiddICk7CgogICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgZmlyc3QgSUZEIHRvIHByb2Nlc3MKICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMoIDEsICRFeGlmX2FycmF5ICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgZmlyc3QgSUZEIGZvciBhIHRodW1ibmFpbAogICAgICAgICAgICAgICAgLy8gQWRkIGEgaGVhZGluZyBmb3IgaXQgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjxoMyBjbGFzcz1cIkVYSUZfU2Vjb25kYXJ5X0hlYWRpbmdcIj5UaHVtYm5haWwgSW5mb3JtYXRpb248L2gyPlxuIjsKCiAgICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgdGhlIElGRCB0byBodG1sIGFuZCBhZGQgaXQgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gaW50ZXJwcmV0X0lGRCggJEV4aWZfYXJyYXlbMV0sICRmaWxlbmFtZSwgJEV4aWZfYXJyYXlbJ0J5dGVfQWxpZ24nXSApOwogICAgICAgIH0KCiAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCBhbnkgb3RoZXIgSUZEJ3MKICAgICAgICAkaSA9IDI7CiAgICAgICAgd2hpbGUgKCBhcnJheV9rZXlfZXhpc3RzKCAkaSwgJEV4aWZfYXJyYXkgKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQWRkIGEgaGVhZGluZyBmb3IgdGhlIElGRAogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjxoMyAgY2xhc3M9XCJFWElGX1NlY29uZGFyeV9IZWFkaW5nXCI+SW1hZ2UgRmlsZSBEaXJlY3RvcnkgKElGRCkgJGkgSW5mb3JtYXRpb248L2gyPlxuIjsKCiAgICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgdGhlIElGRCB0byBodG1sIGFuZCBhZGQgaXQgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gaW50ZXJwcmV0X0lGRCggJEV4aWZfYXJyYXlbJGldLCAkZmlsZW5hbWUsICRFeGlmX2FycmF5WydCeXRlX0FsaWduJ10gKTsKICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBIVE1MCiAgICAgICAgcmV0dXJuICRvdXRwdXRfc3RyOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgSW50ZXJwcmV0X0VYSUZfdG9fSFRNTAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgoKCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiAgICAgICAgIElOVEVSTkFMIEZVTkNUSU9OUwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBJbnRlcm5hbCBGdW5jdGlvbjogICAgIGdldF9USUZGX1BhY2tlZF9EYXRhCioKKiBEZXNjcmlwdGlvbjogIFBhY2tzIFRJRkYgSUZEIGRhdGEgZnJvbSBFWElGIG9yIE1ldGEgaW50byBhIGZvcm0gcmVhZHkgZm9yCiogICAgICAgICAgICAgICBlaXRoZXIgYSBKUEVHIEVYSUYvTWV0YSBzZWdtZW50IG9yIGEgVElGRiBmaWxlCiogICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHByb3RlY3QgdGhlIGNvbnRlbnRzIG9mIGFuIEVYSUYgbWFrZXJub3RlLAoqICAgICAgICAgICAgICAgYnkgZW5zdXJpbmcgdGhhdCBpdCByZW1haW5zIGluIHRoZSBzYW1lIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZQoqICAgICAgICAgICAgICAgVElGRiBoZWFkZXIKKgoqIFBhcmFtZXRlcnM6ICAgdGlmZl9kYXRhIC0gdGhlIEVYSUYgYXJyYXksYXMgcmVhZCBmcm9tIGdldF9FWElGX0pQRUcgb3IgZ2V0X01ldGFfSlBFRwoqCiogUmV0dXJuczogICAgICBwYWNrZWRfZGF0YSAtIEEgc3RyaW5nIGNvbnRhaW5pbmcgcGFja2VkIHNlZ21lbnQKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBnZXRfVElGRl9QYWNrZWRfRGF0YSggJHRpZmZfZGF0YSApCnsKICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBzZWdtZW50IGlzIHZhbGlkCiAgICAgICAgaWYgKCAkdGlmZl9kYXRhID09PSBGQUxTRSApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KCiAgICAgICAgLy8gR2V0IHRoZSBieXRlIGFsaWdubWVudAogICAgICAgIEAkQnl0ZV9BbGlnbiA9ICR0aWZmX2RhdGFbJ0J5dGVfQWxpZ24nXTsKCiAgICAgICAgLy8gQWRkIHRoZSBCeXRlIEFsaWdubWVudCB0byB0aGUgUGFja2VkIGRhdGEKICAgICAgICAkcGFja2VkX2RhdGEgPSAkQnl0ZV9BbGlnbjsKCiAgICAgICAgLy8gQWRkIHRoZSBUSUZGIElEIHRvIHRoZSBQYWNrZWQgRGF0YQogICAgICAgICRwYWNrZWRfZGF0YSAuPSBwdXRfSUZEX0RhdGFfVHlwZSggNDIsIDMsICRCeXRlX0FsaWduICk7CgogICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyBmb3IgdGhlIG1ha2Vybm90ZQogICAgICAgICRtYWtlcm5vdGUgPSAiIjsKCiAgICAgICAgLy8gQ2FsY3VsYWdlIHdoZXJlIHRoZSB6ZXJvdGggaWZkIHdpbGwgYmUKICAgICAgICAkaWZkX29mZnNldCA9IHN0cmxlbiggJG1ha2Vybm90ZSApICsgODsKCiAgICAgICAgLy8gQWRkIHRoZSBaZXJvdGggSUZEIHBvaW50ZXIgdG8gdGhlIHBhY2tlZCBkYXRhCiAgICAgICAgJHBhY2tlZF9kYXRhIC49IHB1dF9JRkRfRGF0YV9UeXBlKCAkaWZkX29mZnNldCwgNCwgJEJ5dGVfQWxpZ24gKTsKCiAgICAgICAgLy8gQWRkIHRoZSBtYWtlcm5vdGUgdG8gdGhlIHBhY2tlZCBkYXRhIChpZiB0aGVyZSB3YXMgb25lKQogICAgICAgICRwYWNrZWRfZGF0YSAuPSAkbWFrZXJub3RlOwoKICAgICAgICAvL0FkZCB0aGUgSUZEJ3MgdG8gdGhlIHBhY2tlZCBkYXRhCiAgICAgICAgJHBhY2tlZF9kYXRhIC49IGdldF9JRkRfQXJyYXlfUGFja2VkX0RhdGEoICR0aWZmX2RhdGEsICRpZmRfb2Zmc2V0LCAkQnl0ZV9BbGlnbiApOwoKICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdAogICAgICAgIHJldHVybiAkcGFja2VkX2RhdGE7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBnZXRfVElGRl9QYWNrZWRfRGF0YQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBJbnRlcm5hbCBGdW5jdGlvbjogICAgIGdldF9JRkRfQXJyYXlfUGFja2VkX0RhdGEKKgoqIERlc2NyaXB0aW9uOiAgUGFja3MgYSBjaGFpbiBvZiBJRkQncyBmcm9tIEVYSUYgb3IgTWV0YSBzZWdtZW50cyBpbnRvIGEgZm9ybQoqICAgICAgICAgICAgICAgcmVhZHkgZm9yIGVpdGhlciBhIEpQRUcgRVhJRi9NZXRhIHNlZ21lbnQgb3IgYSBUSUZGIGZpbGUKKgoqIFBhcmFtZXRlcnM6ICAgaWZkX2RhdGEgLSB0aGUgSUZEIGNoYWluIGFycmF5LCBhcyByZWFkIGZyb20gZ2V0X0VYSUZfSlBFRyBvciBnZXRfTWV0YV9KUEVHCiogICAgICAgICAgICAgICBaZXJvX0lGRF9vZmZzZXQgLSBUaGUgb2Zmc2V0IHRvIHRoZSBmaXJzdCBJRkQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIFRJRkYgaGVhZGVyCiogICAgICAgICAgICAgICBCeXRlX0FsaWduIC0gdGhlIEJ5dGUgYWxpZ25tZW50IHRvIHVzZSAtICJNTSIgb3IgIklJIgoqCiogUmV0dXJuczogICAgICBwYWNrZWRfZGF0YSAtIEEgc3RyaW5nIGNvbnRhaW5pbmcgcGFja2VkIElGRCdzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gZ2V0X0lGRF9BcnJheV9QYWNrZWRfRGF0YSggJGlmZF9kYXRhLCAkWmVyb19JRkRfb2Zmc2V0LCAkQnl0ZV9BbGlnbiApCnsKICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgdG8gcmVjZWl2ZSB0aGUgcGFja2VkIG91dHB1dAogICAgICAgICRwYWNrZWRfZGF0YSA9ICIiOwoKICAgICAgICAvLyBDb3VudCB0aGUgSUZEcwogICAgICAgICRpZmRfY291bnQgPSAwOwogICAgICAgIGZvcmVhY2goICRpZmRfZGF0YSBhcyAka2V5ID0+ICRJRkQgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IGNvdW50IHRoZSBJRkQncywgbm90IG90aGVyIGluZm9ybWF0aW9uIGtleXMKICAgICAgICAgICAgICAgIGlmICggaXNfbnVtZXJpYyggJGtleSApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlmZF9jb3VudCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBJRkQsCiAgICAgICAgZm9yICggJGlmZG5vID0gMDsgJGlmZG5vIDwgJGlmZF9jb3VudDsgJGlmZG5vKysgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgSUZEIGlzIHRoZSBsYXN0IG9uZQogICAgICAgICAgICAgICAgaWYgKCAkaWZkbm8gPT0gJGlmZF9jb3VudCAtIDEgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIElGRCBpcyB0aGUgbGFzdCBvbmUsIGdldCBpdCdzIHBhY2tlZCBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICRwYWNrZWRfZGF0YSAuPSBnZXRfSUZEX1BhY2tlZF9EYXRhKCAkaWZkX2RhdGFbICRpZmRubyBdLCAkWmVyb19JRkRfb2Zmc2V0ICtzdHJsZW4oJHBhY2tlZF9kYXRhKSwgJEJ5dGVfQWxpZ24sIEZBTFNFICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgSUZEIGlzIE5PVCB0aGUgbGFzdCBvbmUsIGdldCBpdCdzIHBhY2tlZCBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICRwYWNrZWRfZGF0YSAuPSBnZXRfSUZEX1BhY2tlZF9EYXRhKCAkaWZkX2RhdGFbICRpZmRubyBdLCAkWmVyb19JRkRfb2Zmc2V0ICtzdHJsZW4oJHBhY2tlZF9kYXRhKSwgJEJ5dGVfQWxpZ24sIFRSVUUgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIHBhY2tlZCBvdXRwdXQKICAgICAgICByZXR1cm4gJHBhY2tlZF9kYXRhOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgZ2V0X0lGRF9BcnJheV9QYWNrZWRfRGF0YQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEludGVybmFsIEZ1bmN0aW9uOiAgICAgZ2V0X0lGRF9QYWNrZWRfRGF0YQoqCiogRGVzY3JpcHRpb246ICBQYWNrcyBhbiBJRkQgZnJvbSBFWElGIG9yIE1ldGEgc2VnbWVudHMgaW50byBhIGZvcm0KKiAgICAgICAgICAgICAgIHJlYWR5IGZvciBlaXRoZXIgYSBKUEVHIEVYSUYvTWV0YSBzZWdtZW50IG9yIGEgVElGRiBmaWxlCioKKiBQYXJhbWV0ZXJzOiAgIGlmZF9kYXRhIC0gdGhlIElGRCBjaGFpbiBhcnJheSwgYXMgcmVhZCBmcm9tIGdldF9FWElGX0pQRUcgb3IgZ2V0X01ldGFfSlBFRwoqICAgICAgICAgICAgICAgSUZEX29mZnNldCAtIFRoZSBvZmZzZXQgdG8gdGhlIElGRCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgVElGRiBoZWFkZXIKKiAgICAgICAgICAgICAgIEJ5dGVfQWxpZ24gLSB0aGUgQnl0ZSBhbGlnbm1lbnQgdG8gdXNlIC0gIk1NIiBvciAiSUkiCiogICAgICAgICAgICAgICBBbm90aGVyX0lGRCAtIGJvb2xlYW4gLSBmYWxzZSBpZiB0aGlzIGlzIHRoZSBsYXN0IElGRCBpbiB0aGUgY2hhaW4KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHRydWUgaWYgaXQgaXMgbm90IHRoZSBsYXN0CioKKiBSZXR1cm5zOiAgICAgIHBhY2tlZF9kYXRhIC0gQSBzdHJpbmcgY29udGFpbmluZyBwYWNrZWQgSUZEJ3MKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBnZXRfSUZEX1BhY2tlZF9EYXRhKCAkaWZkX2RhdGEsICRJRkRfb2Zmc2V0LCAkQnl0ZV9BbGlnbiwgJEFub3RoZXJfSUZEICkKewoKICAgICAgICAkaWZkX2JvZHlfc3RyID0gIiI7CiAgICAgICAgJGlmZF9kYXRhX3N0ciA9ICIiOwoKICAgICAgICBAJFRhZ19EZWZpbml0aW9uc19OYW1lID0gJGlmZF9kYXRhWyAnVGFncyBOYW1lJyBdOwoKCiAgICAgICAgLy8gQ291bnQgdGhlIFRhZ3MgaW4gdGhpcyBJRkQKICAgICAgICAkdGFnX2NvdW50ID0gMDsKICAgICAgICBmb3JlYWNoKCAkaWZkX2RhdGEgYXMgJGtleSA9PiAkdGFnICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugb25seSBjb3VudCB0aGUgVGFncywgbm90IG90aGVyIGluZm9ybWF0aW9uIGtleXMKICAgICAgICAgICAgICAgIGlmICggaXNfbnVtZXJpYyggJGtleSApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRhZ19jb3VudCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSBUYWcgY291bnQgdG8gdGhlIHBhY2tlZCBkYXRhCiAgICAgICAgJHBhY2tlZF9kYXRhID0gcHV0X0lGRF9EYXRhX1R5cGUoICR0YWdfY291bnQsIDMsICRCeXRlX0FsaWduICk7CgogICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBJRkQgKHdpdGhvdXQgdGhlIG9mZnNldCBkYXRhKQogICAgICAgICRJRkRfbGVuID0gMiArICR0YWdfY291bnQgKiAxMiArIDQ7CgoKICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggdGFnCiAgICAgICAgZm9yZWFjaCggJGlmZF9kYXRhIGFzICRrZXkgPT4gJHRhZyApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoaXMgaXMgYSB0YWcsIG5vdCBhbm90aGVyIGluZm9ybWF0aW9uIGtleQogICAgICAgICAgICAgICAgaWYgKCBpc19udW1lcmljKCAka2V5ICkgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSB0YWcgbnVtYmVyIHRvIHRoZSBwYWNrZWQgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAkaWZkX2JvZHlfc3RyIC49IHB1dF9JRkRfRGF0YV9UeXBlKCAkdGFnWyAnVGFnIE51bWJlcicgXSwgMywgJEJ5dGVfQWxpZ24gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgRGF0YSB0eXBlIHRvIHRoZSBwYWNrZWQgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAkaWZkX2JvZHlfc3RyIC49IHB1dF9JRkRfRGF0YV9UeXBlKCAkdGFnWydEYXRhIFR5cGUnXSwgMywgJEJ5dGVfQWxpZ24gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBQcmludCBJbWFnZSBNYXRjaGluZyBlbnRyeQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR0YWdbJ1R5cGUnXSA9PSAiUElNIiApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgUHJpbnQgSW1hZ2UgTWF0Y2hpbmcgZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5jb2RlIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSBFbmNvZGVfUElNKCAkdGFnLCAkQnl0ZV9BbGlnbiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIElQVEMvTkFBIFJlY29yZCB3aXRoaW4gdGhlIEVYSUYgSUZECiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJFWElGIiApIHx8ICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJUSUZGIiApICkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggJHRhZ1sgJ1RhZyBOdW1iZXInIF0gPT0gMzM3MjMgKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgSVBUQy9OQUEgUmVjb3JkLCBlbmNvZGUgaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YSA9IHB1dF9JUFRDKCAkdGFnWydEYXRhJ10gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZTogQ2hlY2sgZm9yIGVtYmVkZGVkIFhNUCBhcyBvZiB2ZXJzaW9uIDEuMTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgWE1QIFJlY29yZCB3aXRoaW4gdGhlIEVYSUYgSUZECiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJFWElGIiApIHx8ICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJUSUZGIiApICkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggJHRhZ1sgJ1RhZyBOdW1iZXInIF0gPT0gNzAwICkgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFhNUCBSZWNvcmQsIGVuY29kZSBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhID0gd3JpdGVfWE1QX2FycmF5X3RvX3RleHQoICR0YWdbJ0RhdGEnXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlOiBDaGVjayBmb3IgZW1iZWRkZWQgSVJCIGFzIG9mIHZlcnNpb24gMS4xMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBQaG90b3Nob3AgSVJCIFJlY29yZCB3aXRoaW4gdGhlIEVYSUYgSUZECiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJFWElGIiApIHx8ICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJUSUZGIiApICkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggJHRhZ1sgJ1RhZyBOdW1iZXInIF0gPT0gMzQzNzcgKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgUGhvdG9zaG9wIElSQiBSZWNvcmQsIGVuY29kZSBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhID0gcGFja19QaG90b3Nob3BfSVJCX0RhdGEoICR0YWdbJ0RhdGEnXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhpZiBUaHVtYm5haWwgT2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICR0YWdbICdUYWcgTnVtYmVyJyBdID09IDUxMyApICYmICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJUSUZGIiApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIEV4aWYgVGh1bWJuYWlsIE9mZnNldCBpcyBhIHBvaW50ZXIgYnV0IG9mIHR5cGUgTG9uZywgbm90IFVua25vd24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhlbmNlIHdlIG5lZWQgdG8gcHV0IHRoZSBkYXRhIGludG8gdGhlIHBhY2tlZCBzdHJpbmcgc2VwYXJhdGVseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0aHVtYm5haWwgb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YV9vZmZzZXQgPSAkSUZEX29mZnNldCArICRJRkRfbGVuICsgc3RybGVuKCRpZmRfZGF0YV9zdHIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgT2Zmc2V0IGZvciB0aGUgSUZECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YSA9IHB1dF9JRkRfRGF0YV9UeXBlKCAkZGF0YV9vZmZzZXQsIDQsICRCeXRlX0FsaWduICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHRodW1ibmFpbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlmZF9kYXRhX3N0ciAuPSAkdGFnWydEYXRhJ107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGlmIFRodW1ibmFpbCBMZW5ndGgKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoICggJHRhZ1sgJ1RhZyBOdW1iZXInIF0gPT0gNTE0ICkgJiYgKCAkVGFnX0RlZmluaXRpb25zX05hbWUgPT0gIlRJRkYiICkgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmNvZGUgdGhlIFRodW1ibmFpbCBMZW5ndGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhID0gcHV0X0lGRF9EYXRhX1R5cGUoIHN0cmxlbigkaWZkX2RhdGFbNTEzXVsnRGF0YSddKSwgNCwgJEJ5dGVfQWxpZ24gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1Yi1JRkQKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoICR0YWdbJ1R5cGUnXSA9PSAiU3ViSUZEIiApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBTdWItSUZECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIFN1Yi1JRkQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhX29mZnNldCA9ICRJRkRfb2Zmc2V0ICsgJElGRF9sZW4gKyBzdHJsZW4oJGlmZF9kYXRhX3N0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHBhY2tlZCBkYXRhIGZvciB0aGUgSUZEIGNoYWluIGFzIHRoZSBkYXRhIGZvciB0aGlzIHRhZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSBnZXRfSUZEX0FycmF5X1BhY2tlZF9EYXRhKCAkdGFnWydEYXRhJ10sICRkYXRhX29mZnNldCwgJEJ5dGVfQWxpZ24gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYSBzcGVjaWFsIHRhZwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgdG8gcmVjZWl2ZSB0aGUgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhID0gIiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSB0eXBlIFVua25vd24gdGFnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkdGFnWydEYXRhIFR5cGUnXSAhPSA3ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1QgdHlwZSBVbmtub3duCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggZGF0YSB2YWx1ZSBhbmQgYWRkIGl0IHRvIHRoZSBkYXRhIHN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJHRhZ1sgJ0RhdGEnIF0gYXMgJGRhdGFfdmFsICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgLj0gcHV0X0lGRF9EYXRhX1R5cGUoICRkYXRhX3ZhbCwgJHRhZ1snRGF0YSBUeXBlJ10sICRCeXRlX0FsaWduICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdHlwZSBVbmtub3duIC0ganVzdCBhZGQgdGhlIGRhdGEgYXMgaXMgdG8gdGhlIGRhdGEgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YSAuPSAkdGFnWyAnRGF0YScgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhZCB0aGUgZGF0YSBzdHJpbmcgb3V0IHRvIGF0IGxlYXN0IDQgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSBzdHJfcGFkICggJGRhdGEsIDQsICJceDAwIiApOwoKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBkYXRhIHR5cGUgaXMgYW4gQVNDSUkgU3RyaW5nIG9yIHR5cGUgVW5rbm93bgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggJHRhZ1snRGF0YSBUeXBlJ10gPT0gMiApIHx8ICggJHRhZ1snRGF0YSBUeXBlJ10gPT0gNyApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gQVNDSUkgU3RyaW5nIG9yIHR5cGUgVW5rbm93bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgTGVuZ3RoIG9mIHRoZSBzdHJpbmcgdG8gdGhlIHBhY2tlZCBkYXRhIGFzIHRoZSBDb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZmRfYm9keV9zdHIgLj0gcHV0X0lGRF9EYXRhX1R5cGUoIHN0cmxlbigkZGF0YSksIDQsICRCeXRlX0FsaWduICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBhcnJheSBjb3VudCB0byB0aGUgcGFja2VkIGRhdGEgYXMgdGhlIENvdW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlmZF9ib2R5X3N0ciAuPSBwdXRfSUZEX0RhdGFfVHlwZSggY291bnQoJHRhZ1sgJ0RhdGEnIF0pLCA0LCAkQnl0ZV9BbGlnbiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRhdGEgaXMgb3ZlciA0IGJ5dGVzIGxvbmcKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdHJsZW4oICRkYXRhICkgPiA0ICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgaXMgbG9uZ2VyIHRoYW4gNCBieXRlcyAtIGl0IG5lZWRzIHRvIGJlIG9mZnNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgZW50cnkgaXMgdGhlIE1ha2VyIE5vdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJFWElGIiApICYmICggJHRhZ1sgJ1RhZyBOdW1iZXInIF0gPT0gMzc1MDAgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbWFrZXJub3RlIC0gSXQgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBzdG9yZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IGl0cyBvcmlnaW5hbCBvZmZzZXQgdG8gaGVscCBwcmVzZXJ2ZSBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsIHdlIG5lZWQgdG8gZG8gaXMgYWRkIHRoZSBPZmZzZXQgdG8gdGhlIElGRCBwYWNrZWQgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGFfb2Zmc2V0ID0gJHRhZ1sgJ09mZnNldCcgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWZkX2JvZHlfc3RyIC49IHB1dF9JRkRfRGF0YV9UeXBlKCAkZGF0YV9vZmZzZXQsIDQsICRCeXRlX0FsaWduICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIE5PVCB0aGUgbWFrZXJub3RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRhdGEgb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YV9vZmZzZXQgPSAkSUZEX29mZnNldCArICRJRkRfbGVuICsgc3RybGVuKCRpZmRfZGF0YV9zdHIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgb2Zmc2V0IHRvIHRoZSBJRkQgcGFja2VkIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZmRfYm9keV9zdHIgLj0gcHV0X0lGRF9EYXRhX1R5cGUoICRkYXRhX29mZnNldCwgNCwgJEJ5dGVfQWxpZ24gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGRhdGEgdG8gdGhlIG9mZnNldCBwYWNrZWQgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlmZF9kYXRhX3N0ciAuPSAkZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNCBieXRlcyAtIEFkZCBpdCB0byB0aGUgcGFja2VkIElGRCBkYXRhIGFzIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlmZF9ib2R5X3N0ciAuPSAkZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEFzc2VtYmxlIHRoZSBJRkQgYm9keSBvbnRvIHRoZSBwYWNrZWQgZGF0YQogICAgICAgICRwYWNrZWRfZGF0YSAuPSAkaWZkX2JvZHlfc3RyOwoKICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIElGRCBhZnRlciB0aGlzIG9uZQogICAgICAgIGlmKCAkQW5vdGhlcl9JRkQgPT09IFRSVUUgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGFub3RoZXIgSUZEIGFmdGVyIHRoaXMKICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgTmV4dC1JRkQgb2Zmc2V0IHNvIHRoYXQgaXQgZ29lcyBpbW1lZGlhdGVseSBhZnRlciB0aGlzIElGRAogICAgICAgICAgICAgICAgJG5leHRfaWZkX29mZnNldCA9ICRJRkRfb2Zmc2V0ICsgJElGRF9sZW4gKyBzdHJsZW4oJGlmZF9kYXRhX3N0cik7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBOTyBJRkQgYWZ0ZXIgdGhpcyAtIGluZGljYXRlIHdpdGggb2Zmc2V0PTAKICAgICAgICAgICAgICAgICRuZXh0X2lmZF9vZmZzZXQgPSAwOwogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSBOZXh0LUlGRCBvZmZzZXQgdG8gdGhlIHBhY2tlZCBkYXRhCiAgICAgICAgJHBhY2tlZF9kYXRhIC49IHB1dF9JRkRfRGF0YV9UeXBlKCAkbmV4dF9pZmRfb2Zmc2V0LCA0LCAkQnl0ZV9BbGlnbiApOwoKICAgICAgICAvLyBBZGQgdGhlIG9mZnNldCBkYXRhIHRvIHRoZSBwYWNrZWQgZGF0YQogICAgICAgICRwYWNrZWRfZGF0YSAuPSAkaWZkX2RhdGFfc3RyOwoKICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBwYWNrZWQgZGF0YQogICAgICAgIHJldHVybiAkcGFja2VkX2RhdGE7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBnZXRfSUZEX1BhY2tlZF9EYXRhCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBJbnRlcm5hbCBGdW5jdGlvbjogICAgIHByb2Nlc3NfVElGRl9IZWFkZXIKKgoqIERlc2NyaXB0aW9uOiAgRGVjb2RlcyB0aGUgaW5mb3JtYXRpb24gc3RvcmVkIGluIGEgVElGRiBoZWFkZXIgYW5kIGl0J3MKKiAgICAgICAgICAgICAgIEltYWdlIEZpbGUgRGlyZWN0b3JpZXMgKElGRCdzKS4gVGhpcyBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZAoqICAgICAgICAgICAgICAgaW4gYW4gYXJyYXkKKgoqIFBhcmFtZXRlcnM6ICAgZmlsZWhuZCAtIFRoZSBoYW5kbGUgb2YgYSBvcGVuIGltYWdlIGZpbGUsIHBvc2l0aW9uZWQgYXQgdGhlCiogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IG9mIHRoZSBUSUZGIGhlYWRlcgoqICAgICAgICAgICAgICAgVGFnX0RlZmluaXRpb25zX05hbWUgLSBUaGUgbmFtZSBvZiB0aGUgVGFnIERlZmluaXRpb25zIGdyb3VwCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgZ2xvYmFsIGFycmF5IElGRF9UYWdfRGVmaW5pdGlvbnMKKgoqCiogUmV0dXJuczogICAgICBPdXRwdXRBcnJheSAtIEFycmF5IG9mIElGRCByZWNvcmRzCiogICAgICAgICAgICAgICBGQUxTRSAtIElmIGFuIGVycm9yIG9jY3VyZWQgaW4gZGVjb2RpbmcKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBwcm9jZXNzX1RJRkZfSGVhZGVyKCAkZmlsZWhuZCwgJFRhZ19EZWZpbml0aW9uc19OYW1lICkKewoKCiAgICAgICAgLy8gU2F2ZSB0aGUgZmlsZSBwb3NpdGlvbiB3aGVyZSB0aGUgVElGRiBoZWFkZXIgc3RhcnRzLCBhcyBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBvc2l0aW9uCiAgICAgICAgJFRpZmZfc3RhcnRfcG9zID0gZnRlbGwoICRmaWxlaG5kICk7CgoKCiAgICAgICAgLy8gUmVhZCB0aGUgZWlnaHQgYnl0ZXMgb2YgdGhlIFRJRkYgaGVhZGVyCiAgICAgICAgJERhdGFTdHIgPSBuZXR3b3JrX3NhZmVfZnJlYWQoICRmaWxlaG5kLCA4ICk7CgogICAgICAgIC8vIENoZWNrIHRoYXQgd2UgZGlkIGdldCBhbGwgZWlnaHQgYnl0ZXMKICAgICAgICBpZiAoIHN0cmxlbiggJERhdGFTdHIgKSAhPSA4ICkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7ICAgLy8gQ291bGRuJ3QgcmVhZCB0aGUgVElGRiBoZWFkZXIgcHJvcGVybHkKICAgICAgICB9CgogICAgICAgICRwb3MgPSAwOwogICAgICAgIC8vIEZpcnN0IHR3byBieXRlcyBpbmRpY2F0ZSB0aGUgYnl0ZSBhbGlnbm1lbnQgLSBzaG91bGQgYmUgJ0lJJyBvciAnTU0nCiAgICAgICAgLy8gSUkgPSBJbnRlbCAoTFNCIGZpcnN0LCBNU0IgbGFzdCAtIExpdHRsZSBFbmRpYW4pCiAgICAgICAgLy8gTU0gPSBNb3Rvcm9sYSAoTVNCIGZpcnN0LCBMU0IgbGFzdCAtIEJpZyBFbmRpYW4pCiAgICAgICAgJEJ5dGVfQWxpZ24gPSBzdWJzdHIoICREYXRhU3RyLCAkcG9zLCAyICk7CgoKCiAgICAgICAgLy8gQ2hlY2sgdGhlIEJ5dGUgQWxpZ24gQ2hhcmFjdGVycyBmb3IgdmFsaWRpdHkKICAgICAgICBpZiAoICggJEJ5dGVfQWxpZ24gIT0gIklJIiApICYmICggJEJ5dGVfQWxpZ24gIT0gIk1NIiApICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBCeXRlIGFsaWduIGZpZWxkIGlzIGludmFsaWQgLSB3ZSB3b24ndCBiZSBhYmxlIHRvIGRlY29kZSBmaWxlCiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKICAgICAgICAvLyBTa2lwIG92ZXIgdGhlIEJ5dGUgQWxpZ24gZmllbGQgd2hpY2ggd2FzIGp1c3QgcmVhZAogICAgICAgICRwb3MgKz0gMjsKCiAgICAgICAgLy8gTmV4dCB0d28gYnl0ZXMgYXJlIFRJRkYgSUQgLSBzaG91bGQgYmUgdmFsdWUgNDIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYnl0ZSBhbGlnbm1lbnQKICAgICAgICAkVElGRl9JRCA9IHN1YnN0ciggJERhdGFTdHIsICRwb3MsIDIgKTsKCiAgICAgICAgaWYgKCBnZXRfSUZEX0RhdGFfVHlwZSggJFRJRkZfSUQsIDMsICRCeXRlX0FsaWduICkgIT0gNDIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFRJRkYgaGVhZGVyIElEIG5vdCBmb3VuZAogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KCiAgICAgICAgLy8gU2tpcCBvdmVyIHRoZSBUSUZGIElEIGZpZWxkIHdoaWNoIHdhcyBqdXN0IHJlYWQKICAgICAgICAkcG9zICs9IDI7CgoKICAgICAgICAvLyBOZXh0IGZvdXIgYnl0ZXMgYXJlIHRoZSBvZmZzZXQgdG8gdGhlIGZpcnN0IElGRAogICAgICAgICRvZmZzZXRfc3RyID0gc3Vic3RyKCAkRGF0YVN0ciwgJHBvcywgNCApOwogICAgICAgICRvZmZzZXQgPSBnZXRfSUZEX0RhdGFfVHlwZSggJG9mZnNldF9zdHIsIDQsICRCeXRlX0FsaWduICk7CgogICAgICAgIC8vIERvbmUgcmVhZGluZyBUSUZGIEhlYWRlcgoKCiAgICAgICAgLy8gTW92ZSB0byBmaXJzdCBJRkQKCiAgICAgICAgaWYgKCBmc2VlayggJGZpbGVobmQsICRUaWZmX3N0YXJ0X3BvcyArICRvZmZzZXQgKSAhPT0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gRXJyb3Igc2Vla2luZyB0byBwb3NpdGlvbiBvZiBmaXJzdCBJRkQKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CgoKCiAgICAgICAgLy8gRmxhZyB0aGF0IGEgbWFrZXJub3RlIGhhcyBub3QgYmVlbiBmb3VuZCB5ZXQKICAgICAgICAkR0xPQkFMU1sgIk1ha2VyX05vdGVfVGFnIiBdID0gRkFMU0U7CgogICAgICAgIC8vIFJlYWQgdGhlIElGRCBjaGFpbiBpbnRvIGFuIGFycmF5CiAgICAgICAgJE91dHB1dF9BcnJheSA9IHJlYWRfTXVsdGlwbGVfSUZEcyggJGZpbGVobmQsICRUaWZmX3N0YXJ0X3BvcywgJEJ5dGVfQWxpZ24sICRUYWdfRGVmaW5pdGlvbnNfTmFtZSApOwoKICAgICAgICAvLyBTYXZlIHRoZSBOYW1lIG9mIHRoZSBUYWdzIHVzZWQgaW4gdGhlIG91dHB1dCBhcnJheQogICAgICAgICRPdXRwdXRfQXJyYXlbICdUYWdzIE5hbWUnIF0gPSAkVGFnX0RlZmluaXRpb25zX05hbWU7CgoKCiAgICAgICAgLy8gU2F2ZSB0aGUgQnl0ZSBhbGlnbm1lbnQKICAgICAgICAkT3V0cHV0X0FycmF5WydCeXRlX0FsaWduJ10gPSAkQnl0ZV9BbGlnbjsKCgogICAgICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IGFycmF5CiAgICAgICAgcmV0dXJuICRPdXRwdXRfQXJyYXkgOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgcHJvY2Vzc19USUZGX0hlYWRlcgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEludGVybmFsIEZ1bmN0aW9uOiAgICAgcmVhZF9NdWx0aXBsZV9JRkRzCioKKiBEZXNjcmlwdGlvbjogIFJlYWRzIGFuZCBpbnRlcnByZXRzIGEgY2hhaW4gb2Ygc3RhbmRhcmQgSW1hZ2UgRmlsZSBEaXJlY3RvcmllcyAoSUZEJ3MpLAoqICAgICAgICAgICAgICAgYW5kIHJldHVybnMgdGhlIGVudHJpZXMgaW4gYW4gYXJyYXkuIFRoaXMgY2hhaW4gaXMgbWFkZSB1cCBmcm9tIElGRCdzCiogICAgICAgICAgICAgICB3aGljaCBoYXZlIGEgcG9pbnRlciB0byB0aGUgbmV4dCBJRkQuIElGRCdzIGFyZSByZWFkIHVudGlsIHRoZSBuZXh0CiogICAgICAgICAgICAgICBwb2ludGVyIGluZGljYXRlcyB0aGVyZSBhcmUgbm8gbW9yZQoqCiogUGFyYW1ldGVyczogICBmaWxlaG5kIC0gYSBoYW5kbGUgZm9yIHRoZSBpbWFnZSBmaWxlIGJlaW5nIHJlYWQsIHBvc2l0aW9uZWQgYXQgdGhlCiogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgb2YgdGhlIElGRCBjaGFpbgoqICAgICAgICAgICAgICAgVGlmZl9vZmZzZXQgLSBUaGUgb2Zmc2V0IG9mIHRoZSBUSUZGIGhlYWRlciBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlsZQoqICAgICAgICAgICAgICAgQnl0ZV9BbGlnbiAtIGVpdGhlciAiTU0iIG9yICJJSSIgaW5kaWNhdGluZyBNb3Rvcm9sYSBvciBJbnRlbCBCeXRlIGFsaWdubWVudAoqICAgICAgICAgICAgICAgVGFnX0RlZmluaXRpb25zX05hbWUgLSBUaGUgbmFtZSBvZiB0aGUgVGFnIERlZmluaXRpb25zIGdyb3VwIHdpdGhpbiB0aGUgZ2xvYmFsIGFycmF5IElGRF9UYWdfRGVmaW5pdGlvbnMKKiAgICAgICAgICAgICAgIGxvY2FsX29mZnNldHMgLSBUcnVlIGluZGljYXRlcyB0aGF0IG9mZnNldCBkYXRhIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBiZWluZyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJyZW50IGVudHJ5CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UgKG5vcm1hbCkgaW5kaWNhdGVzIG9mZmVzdHMgYXJlIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIFRpZmYgaGVhZGVyIGFzIHBlciBJRkQgc3RhbmRhcmQKKiAgICAgICAgICAgICAgIHJlYWRfbmV4dF9wdHIgLSBUcnVlIChub3JtYWwpIGluZGljYXRlcyB0aGF0IGEgcG9pbnRlciB0byB0aGUgbmV4dCBJRkQgc2hvdWxkIGJlIHJlYWQgYXQgdGhlIGVuZCBvZiB0aGUgSUZECiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UgaW5kaWNhdGVzIHRoYXQgbm8gcG9pbnRlciBmb2xsb3dzIHRoZSBJRkQKKgoqCiogUmV0dXJuczogICAgICBPdXRwdXRBcnJheSAtIEFycmF5IG9mIElGRCBlbnRyaWVzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gcmVhZF9NdWx0aXBsZV9JRkRzKCAkZmlsZWhuZCwgJFRpZmZfb2Zmc2V0LCAkQnl0ZV9BbGlnbiwgJFRhZ19EZWZpbml0aW9uc19OYW1lLCAkbG9jYWxfb2Zmc2V0cyA9IEZBTFNFLCAkcmVhZF9uZXh0X3B0ciA9IFRSVUUgKQp7CiAgICAgICAgLy8gU3RhcnQgYXQgdGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgSUZECiAgICAgICAgJE5leHRfT2Zmc2V0ID0gMDsKCiAgICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBSZWFkIGFuIElGRAogICAgICAgICAgICAgICAgbGlzdCgkSUZEX0FycmF5ICwgJE5leHRfT2Zmc2V0KSA9IHJlYWRfSUZEX3VuaXZlcnNhbCggJGZpbGVobmQsICRUaWZmX29mZnNldCwgJEJ5dGVfQWxpZ24sICRUYWdfRGVmaW5pdGlvbnNfTmFtZSwgJGxvY2FsX29mZnNldHMsICRyZWFkX25leHRfcHRyICk7CgogICAgICAgICAgICAgICAgLy8gTW92ZSB0byB0aGUgcG9zaXRpb24gb2YgdGhlIG5leHQgSUZECiAgICAgICAgICAgICAgICBpZiAoIGZzZWVrKCAkZmlsZWhuZCwgJFRpZmZfb2Zmc2V0ICsgJE5leHRfT2Zmc2V0ICkgIT09IDAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBzZWVraW5nIHRvIHBvc2l0aW9uIG9mIG5leHQgSUZECiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxwPkVycm9yOiBDb3JydXB0ZWQgRVhJRjwvcD5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkT3V0cHV0X0FycmF5W10gPSAkSUZEX0FycmF5OwoKCiAgICAgICAgfSB3aGlsZSAoICROZXh0X09mZnNldCAhPSAwICk7ICAgICAgLy8gVW50aWwgdGhlIE5leHQgSUZEIE9mZnNldCBpcyB6ZXJvCgoKICAgICAgICAvLyByZXR1cm4gcmVzdWx0aW5nIGFycmF5CgogICAgICAgIHJldHVybiAkT3V0cHV0X0FycmF5IDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIHJlYWRfTXVsdGlwbGVfSUZEcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBJbnRlcm5hbCBGdW5jdGlvbjogICAgIHJlYWRfSUZEX3VuaXZlcnNhbAoqCiogRGVzY3JpcHRpb246ICBSZWFkcyBhbmQgaW50ZXJwcmV0cyBhIHN0YW5kYXJkIG9yIE5vbi1zdGFuZGFyZCBJbWFnZSBGaWxlCiogICAgICAgICAgICAgICBEaXJlY3RvcnkgKElGRCksIGFuZCByZXR1cm5zIHRoZSBlbnRyaWVzIGluIGFuIGFycmF5CioKKiBQYXJhbWV0ZXJzOiAgIGZpbGVobmQgLSBhIGhhbmRsZSBmb3IgdGhlIGltYWdlIGZpbGUgYmVpbmcgcmVhZCwgcG9zaXRpb25lZCBhdCB0aGUgc3RhcnQKKiAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgSUZECiogICAgICAgICAgICAgICBUaWZmX29mZnNldCAtIFRoZSBvZmZzZXQgb2YgdGhlIFRJRkYgaGVhZGVyIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlCiogICAgICAgICAgICAgICBCeXRlX0FsaWduIC0gZWl0aGVyICJNTSIgb3IgIklJIiBpbmRpY2F0aW5nIE1vdG9yb2xhIG9yIEludGVsIEJ5dGUgYWxpZ25tZW50CiogICAgICAgICAgICAgICBUYWdfRGVmaW5pdGlvbnNfTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBUYWcgRGVmaW5pdGlvbnMgZ3JvdXAgd2l0aGluIHRoZSBnbG9iYWwgYXJyYXkgSUZEX1RhZ19EZWZpbml0aW9ucwoqICAgICAgICAgICAgICAgbG9jYWxfb2Zmc2V0cyAtIFRydWUgaW5kaWNhdGVzIHRoYXQgb2Zmc2V0IGRhdGEgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJlaW5nIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycnJlbnQgZW50cnkKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSAobm9ybWFsKSBpbmRpY2F0ZXMgb2ZmZXN0cyBhcmUgcmVsYXRpdmUgdG8gc3RhcnQgb2YgVGlmZiBoZWFkZXIgYXMgcGVyIElGRCBzdGFuZGFyZAoqICAgICAgICAgICAgICAgcmVhZF9uZXh0X3B0ciAtIFRydWUgKG5vcm1hbCkgaW5kaWNhdGVzIHRoYXQgYSBwb2ludGVyIHRvIHRoZSBuZXh0IElGRCBzaG91bGQgYmUgcmVhZCBhdCB0aGUgZW5kIG9mIHRoZSBJRkQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSBpbmRpY2F0ZXMgdGhhdCBubyBwb2ludGVyIGZvbGxvd3MgdGhlIElGRAoqCiogUmV0dXJuczogICAgICBPdXRwdXRBcnJheSAtIEFycmF5IG9mIElGRCBlbnRyaWVzCiogICAgICAgICAgICAgICBOZXh0X09mZnNldCAtIE9mZnNldCB0byBuZXh0IElGRCAoemVybyA9IG5vIG5leHQgSUZEKQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHJlYWRfSUZEX3VuaXZlcnNhbCggJGZpbGVobmQsICRUaWZmX29mZnNldCwgJEJ5dGVfQWxpZ24sICRUYWdfRGVmaW5pdGlvbnNfTmFtZSwgJGxvY2FsX29mZnNldHMgPSBGQUxTRSwgJHJlYWRfbmV4dF9wdHIgPSBUUlVFICkKewogICAgICAgIGlmICggKCAkZmlsZWhuZCA9PSBOVUxMICkgfHwgKCBmZW9mKCAkZmlsZWhuZCApICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSAoRkFMU0UgLCAwKTsKICAgICAgICB9CgogICAgICAgIC8vIFJlY29yZCB0aGUgTmFtZSBvZiB0aGUgVGFnIEdyb3VwIHVzZWQgZm9yIHRoaXMgSUZEIGluIHRoZSBvdXRwdXQgYXJyYXkKICAgICAgICAkT3V0cHV0QXJyYXlbICdUYWdzIE5hbWUnIF0gPSAkVGFnX0RlZmluaXRpb25zX05hbWU7CgogICAgICAgIC8vIFJlY29yZCB0aGUgb2Zmc2V0IG9mIHRoZSBUSUZGIGhlYWRlciBpbiB0aGUgb3V0cHV0IGFycmF5CiAgICAgICAgJE91dHB1dEFycmF5WyAnVGlmZiBPZmZzZXQnIF0gPSAkVGlmZl9vZmZzZXQ7CgogICAgICAgIC8vIEZpcnN0IDIgYnl0ZXMgb2YgSUZEIGFyZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgSUZECiAgICAgICAgJE5vX0VudHJpZXNfc3RyID0gbmV0d29ya19zYWZlX2ZyZWFkKCAkZmlsZWhuZCwgMiApOwogICAgICAgICROb19FbnRyaWVzID0gZ2V0X0lGRF9EYXRhX1R5cGUoICROb19FbnRyaWVzX3N0ciwgMywgJEJ5dGVfQWxpZ24gKTsKCgogICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGNvcnJ1cHQsIHRoZSBudW1iZXIgb2YgZW50cmllcyBtYXkgYmUgaHVnZSwgd2hpY2ggd2lsbCBjYXVzZSBlcnJvcnMKICAgICAgICAvLyBUaGlzIGlzIG9mdGVuIGNhdXNlZCBieSBhIGxhY2sgb2YgYSBOZXh0LUlGRCBwb2ludGVyCiAgICAgICAgaWYgKCAkTm9fRW50cmllcz4gODAwMDAgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEh1Z2UgbnVtYmVyIG9mIGVudHJpZXMgLSBhYm9ydAogICAgICAgICAgICAgICAgZWNobyAiPHA+RXJyb3I6IGh1Z2UgbnVtYmVyIG9mIEVYSUYgZW50cmllcyAoJE5vX0VudHJpZXMpLSBFWElGIGlzIHByb2JhYmx5IENvcnJ1cHRlZDwvcD5cbiI7CgogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5ICggRkFMU0UgLCAwKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGNvcnJ1cHQgb3IganVzdCBzdHVwaWQsIHRoZSBudW1iZXIgb2YgZW50cmllcyBtYXkgemVybywKICAgICAgICAvLyBJbmRpY2F0ZSB0aGlzIGJ5IHJldHVybmluZyBmYWxzZQogICAgICAgIGlmICggJE5vX0VudHJpZXMgPT09IDAgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIE5vIGVudHJpZXMgLSBhYm9ydAogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5ICggRkFMU0UgLCAwKTsKICAgICAgICB9CgogICAgICAgIC8vIFNhdmUgdGhlIGZpbGUgcG9zaXRpb24gd2hlcmUgZmlyc3QgSUZEIHJlY29yZCBzdGFydHMgYXMgbm9uLXN0YW5kYXJkIG9mZnNldHMKICAgICAgICAvLyBuZWVkIHRvIGtub3cgdGhpcyB0byBjYWxjdWxhdGUgYW4gYWJzb2x1dGUgb2Zmc2V0CiAgICAgICAgJElGRF9maXJzdF9yZWNfcG9zID0gZnRlbGwoICRmaWxlaG5kICk7CgoKICAgICAgICAvLyBSZWFkIGluIHRoZSBJRkQgc3RydWN0dXJlCiAgICAgICAgJElGRF9EYXRhID0gbmV0d29ya19zYWZlX2ZyZWFkKCAkZmlsZWhuZCwgMTIgKiAkTm9fRW50cmllcyApOwoKICAgICAgICAvLyBDaGVjayBpZiB0aGUgZW50aXJlIElGRCB3YXMgYWJsZSB0byBiZSByZWFkCiAgICAgICAgaWYgKCBzdHJsZW4oICRJRkRfRGF0YSApICE9ICgxMiAqICROb19FbnRyaWVzKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgcmVhZCB0aGUgSUZEIERhdGEgcHJvcGVybHksIFNvbWUgQ2FzaW8gZmlsZXMgaGF2ZSBubyBOZXh0IElGRCBwb2ludGVyLCBoZW5jZSBjYXVzZSB0aGlzIGVycm9yCiAgICAgICAgICAgICAgICBlY2hvICI8cD5FcnJvcjogRVhJRiBDb3JydXB0ZWQ8L3A+XG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KEZBTFNFLCAwKTsKICAgICAgICB9CgoKICAgICAgICAvLyBMYXN0IDQgYnl0ZXMgb2YgYSBzdGFuZGFyZCBJRkQgYXJlIHRoZSBvZmZzZXQgdG8gdGhlIG5leHQgSUZECiAgICAgICAgLy8gU29tZSBOT04tU3RhbmRhcmQgSUZEIGltcGxlbWVudGF0aW9ucyBkbyBub3QgaGF2ZSB0aGlzLCBoZW5jZSBjYXVzaW5nIHByb2JsZW1zIGlmIGl0IGlzIHJlYWQKCiAgICAgICAgLy8gSWYgdGhlIE5leHQgSUZEIHBvaW50ZXIgaGFzIGJlZW4gcmVxdWVzdGVkIHRvIGJlIHJlYWQsCiAgICAgICAgaWYgKCAkcmVhZF9uZXh0X3B0ciApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBJRkQKCiAgICAgICAgICAgICAgICAkTmV4dF9PZmZzZXRfc3RyID0gbmV0d29ya19zYWZlX2ZyZWFkKCAkZmlsZWhuZCwgNCApOwogICAgICAgICAgICAgICAgJE5leHRfT2Zmc2V0ID0gZ2V0X0lGRF9EYXRhX1R5cGUoICROZXh0X09mZnNldF9zdHIsIDQsICRCeXRlX0FsaWduICk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ugc2V0IHRoZSBwb2ludGVyIHRvIHplcm8gKCBubyBuZXh0IElGRCApCiAgICAgICAgICAgICAgICAkTmV4dF9PZmZzZXQgPSAwOwogICAgICAgIH0KCgoKICAgICAgICAvLyBJbml0aWFsaXNlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIHN0YXJ0CiAgICAgICAgJHBvcyA9IDA7CgoKICAgICAgICAvLyBMb29wIGZvciByZWFkaW5nIElGRCBlbnRyaWVzCgogICAgICAgIGZvciAoICRpID0gMDsgJGkgPCAkTm9fRW50cmllczsgJGkrKyApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gRmlyc3QgMiBieXRlcyBvZiBJRkQgZW50cnkgYXJlIHRoZSB0YWcgbnVtYmVyICggVW5zaWduZWQgU2hvcnQgKQogICAgICAgICAgICAgICAgJFRhZ19Ob19zdHIgPSBzdWJzdHIoICRJRkRfRGF0YSwgJHBvcywgMiApOwogICAgICAgICAgICAgICAgJFRhZ19ObyA9IGdldF9JRkRfRGF0YV9UeXBlKCAkVGFnX05vX3N0ciwgMywgJEJ5dGVfQWxpZ24gKTsKICAgICAgICAgICAgICAgICRwb3MgKz0gMjsKCiAgICAgICAgICAgICAgICAvLyBOZXh0IDIgYnl0ZXMgb2YgSUZEIGVudHJ5IGFyZSB0aGUgZGF0YSBmb3JtYXQgKCBVbnNpZ25lZCBTaG9ydCApCiAgICAgICAgICAgICAgICAkRGF0YV9UeXBlX3N0ciA9IHN1YnN0ciggJElGRF9EYXRhLCAkcG9zLCAyICk7CiAgICAgICAgICAgICAgICAkRGF0YV9UeXBlID0gZ2V0X0lGRF9EYXRhX1R5cGUoICREYXRhX1R5cGVfc3RyLCAzLCAkQnl0ZV9BbGlnbiApOwogICAgICAgICAgICAgICAgJHBvcyArPSAyOwoKICAgICAgICAgICAgICAgIC8vIElmIERhdGF0eXBlIGlzIG5vdCBiZXR3ZWVuIDEgYW5kIDEyLCB0aGVuIHNraXAgdGhpcyBlbnRyeSwgaXQgaXMgcHJvYmFibHkgY29ycnVwdGVkIG9yIGN1c3RvbQogICAgICAgICAgICAgICAgaWYgKCggJERhdGFfVHlwZSA+IDEyICkgfHwgKCAkRGF0YV9UeXBlIDwgMSApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBvcyArPSA4OwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAxOyAgLy8gU3RvcCB0cnlpbmcgdG8gcHJvY2VzcyB0aGUgdGFnIGFueSBmdXJ0aGVyIGFuZCBza2lwIHRvIHRoZSBuZXh0IG9uZQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIE5leHQgNCBieXRlcyBvZiBJRkQgZW50cnkgYXJlIHRoZSBkYXRhIGNvdW50ICggVW5zaWduZWQgTG9uZyApCiAgICAgICAgICAgICAgICAkRGF0YV9Db3VudF9zdHIgPSBzdWJzdHIoICRJRkRfRGF0YSwgJHBvcywgNCApOwogICAgICAgICAgICAgICAgJERhdGFfQ291bnQgPSBnZXRfSUZEX0RhdGFfVHlwZSggJERhdGFfQ291bnRfc3RyLCA0LCAkQnl0ZV9BbGlnbiApOwogICAgICAgICAgICAgICAgJHBvcyArPSA0OwoKICAgICAgICAgICAgICAgIGlmICggJERhdGFfQ291bnQgPiAxMDAwMDAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvL2VjaG8gIjxwPkVycm9yOiBodWdlIEVYSUYgZGF0YSBjb3VudCAtIEVYSUYgaXMgcHJvYmFibHkgQ29ycnVwdGVkPC9wPlxuIjsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbWUgQ2FzaW8gZmlsZXMgaGF2ZSBubyBOZXh0IElGRCBwb2ludGVyLCBoZW5jZSBjYXVzZSBlcnJvcnMKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSAoIEZBTFNFICwgMCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gVG90YWwgRGF0YSBzaXplIGlzIHRoZSBEYXRhIENvdW50IG11bHRpcGxpZWQgYnkgdGhlIHNpemUgb2YgdGhlIERhdGEgVHlwZQogICAgICAgICAgICAgICAgJFRvdGFsX0RhdGFfU2l6ZSA9ICRHTE9CQUxTWydJRkRfRGF0YV9TaXplcyddWyAkRGF0YV9UeXBlIF0gKiAkRGF0YV9Db3VudDsKCiAgICAgICAgICAgICAgICAkRGF0YV9TdGFydF9wb3MgPSAtMTsKCgogICAgICAgICAgICAgICAgLy8gSWYgdGhlIHRvdGFsIGRhdGEgc2l6ZSBpcyBsYXJnZXIgdGhhbiA0IGJ5dGVzLCB0aGVuIHRoZSBkYXRhIHBhcnQgaXMgdGhlIG9mZnNldCB0byB0aGUgcmVhbCBkYXRhCiAgICAgICAgICAgICAgICBpZiAoICRUb3RhbF9EYXRhX1NpemUgPiA0ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IGVub3VnaCByb29tIGZvciBkYXRhIC0gb2Zmc2V0IHByb3ZpZGVkIGluc3RlYWQKICAgICAgICAgICAgICAgICAgICAgICAgJERhdGFfT2Zmc2V0X3N0ciA9IHN1YnN0ciggJElGRF9EYXRhLCAkcG9zLCA0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhX1N0YXJ0X3BvcyA9IGdldF9JRkRfRGF0YV9UeXBlKCAkRGF0YV9PZmZzZXRfc3RyLCA0LCAkQnl0ZV9BbGlnbiApOwoKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHNvbWUgTk9OLVNUQU5EQVJEIG1ha2Vybm90ZXMsIHRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IElGRCBlbnRyeQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRsb2NhbF9vZmZzZXRzICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBOT04tU3RhbmRhcmQgSUZELCBzZWVrIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCB0YWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc2VlayggJGZpbGVobmQsICRJRkRfZmlyc3RfcmVjX3BvcyArICAkcG9zIC0gOCArICREYXRhX1N0YXJ0X3BvcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBub3JtYWwgSUZELCBzZWVrIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgVElGRiBoZWFkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc2VlayggJGZpbGVobmQsICRUaWZmX29mZnNldCArICREYXRhX1N0YXJ0X3BvcyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSBkYXRhIGJsb2NrIGZyb20gdGhlIG9mZnNldCBwb3NpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YVN0ciA9IG5ldHdvcmtfc2FmZV9mcmVhZCggJGZpbGVobmQsICRUb3RhbF9EYXRhX1NpemUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRhdGEgYmxvY2sgaXMgbGVzcyB0aGFuIDQgYnl0ZXMsIGFuZCBpcyBwcm92aWRlZCBpbiB0aGUgSUZEIGVudHJ5LCBzbyByZWFkIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhU3RyID0gc3Vic3RyKCAkSUZEX0RhdGEsICRwb3MsICRUb3RhbF9EYXRhX1NpemUgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIHBvc2l0aW9uIHBhc3QgdGhlIGRhdGEKICAgICAgICAgICAgICAgICRwb3MgKz0gNDsKCgogICAgICAgICAgICAgICAgLy8gTm93IGNyZWF0ZSB0aGUgZW50cnkgZm9yIG91dHB1dCBhcnJheQoKICAgICAgICAgICAgICAgICREYXRhX0FycmF5ID0gYXJyYXkoICk7CgoKICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIGRhdGEgaXRlbXMgZnJvbSB0aGUgZGF0YSBibG9jawoKICAgICAgICAgICAgICAgIGlmICggKCAkRGF0YV9UeXBlICE9IDIgKSAmJiAoICREYXRhX1R5cGUgIT0gNyApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRhdGEgdHlwZSBpcyBOdW1lcmljYWwsIFJlYWQgdGhlIGRhdGEgaXRlbXMgZnJvbSB0aGUgZGF0YSBibG9jawogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCAkaiA9IDA7ICRqIDwgJERhdGFfQ291bnQ7ICRqKysgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBhcnRfRGF0YV9TdHIgPSBzdWJzdHIoICREYXRhU3RyLCAkaiAqICRHTE9CQUxTWydJRkRfRGF0YV9TaXplcyddWyAkRGF0YV9UeXBlIF0sICRHTE9CQUxTWydJRkRfRGF0YV9TaXplcyddWyAkRGF0YV9UeXBlIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YV9BcnJheVtdID0gZ2V0X0lGRF9EYXRhX1R5cGUoICRQYXJ0X0RhdGFfU3RyLCAkRGF0YV9UeXBlLCAkQnl0ZV9BbGlnbiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlaWYgKCAkRGF0YV9UeXBlID09IDIgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZGF0YSB0eXBlIGlzIFN0cmluZyhzKSAgICh0eXBlIDIpCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpcCB0aGUgbGFzdCB0ZXJtaW5hdGluZyBOdWxsCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdHIoJERhdGFTdHIsLTEpID09ICJceDAwIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICREYXRhU3RyID0gc3Vic3RyKCAkRGF0YVN0ciwgMCwgc3RybGVuKCREYXRhU3RyKS0xICk7CgkJCQkJCX0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBkYXRhIGJsb2NrIGludG8gbXVsdGlwbGUgc3RyaW5ncyB3aGVyZWV2ZXIgdGhlcmUgaXMgYSBOdWxsCiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhX0FycmF5ID0gZXhwbG9kZSggIlx4MDAiLCAkRGF0YVN0ciApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZGF0YSB0eXBlIGlzIFVua25vd24gKHR5cGUgNykKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZyB0byBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhX0FycmF5ID0gJERhdGFTdHI7CiAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBTdWItSUZEIGVudHJ5LAogICAgICAgICAgICAgICAgaWYgKCAoIGFycmF5X2tleV9leGlzdHMoICRUYWdfTm8sICRHTE9CQUxTWyAiSUZEX1RhZ19EZWZpbml0aW9ucyIgXVskVGFnX0RlZmluaXRpb25zX05hbWVdICkgKSAmJgogICAgICAgICAgICAgICAgICAgICAoICJTdWJJRkQiID09ICRHTE9CQUxTWyAiSUZEX1RhZ19EZWZpbml0aW9ucyIgXVskVGFnX0RlZmluaXRpb25zX05hbWVdWyAkVGFnX05vIF1bJ1R5cGUnXSApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFN1Yi1JRkQgZW50cnksIGdvIGFuZCBwcm9jZXNzIHRoZSBkYXRhIGZvcm1pbmcgU3ViLUlGRCBhbmQgdXNlIGl0cyBvdXRwdXQgYXJyYXkgYXMgdGhlIG5ldyBkYXRhIGZvciB0aGlzIGVudHJ5CiAgICAgICAgICAgICAgICAgICAgICAgIGZzZWVrKCAkZmlsZWhuZCwgJFRpZmZfb2Zmc2V0ICsgJERhdGFfQXJyYXlbMF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgJERhdGFfQXJyYXkgPSByZWFkX011bHRpcGxlX0lGRHMoICRmaWxlaG5kLCAkVGlmZl9vZmZzZXQsICRCeXRlX0FsaWduLCAkR0xPQkFMU1sgIklGRF9UYWdfRGVmaW5pdGlvbnMiIF1bJFRhZ19EZWZpbml0aW9uc19OYW1lXVsgJFRhZ19ObyBdWydUYWdzIE5hbWUnXSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRkZXNjID0gIiI7CiAgICAgICAgICAgICAgICAkdW5pdHMgPSAiIjsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHRhZyBleGlzdHMgaW4gdGhlIGxpc3Qgb2YgdGFnIGRlZmluaXRpb25zLAoKICAgICAgICAgICAgICAgIGlmICggYXJyYXlfa2V5X2V4aXN0cyAoICRUYWdfTm8sICRHTE9CQUxTWyAiSUZEX1RhZ19EZWZpbml0aW9ucyIgXVskVGFnX0RlZmluaXRpb25zX05hbWVdKSApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMgKCAnRGVzY3JpcHRpb24nLCAkR0xPQkFMU1sgIklGRF9UYWdfRGVmaW5pdGlvbnMiIF1bJFRhZ19EZWZpbml0aW9uc19OYW1lXVsgJFRhZ19ObyBdICkgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlc2MgPSAkR0xPQkFMU1sgIklGRF9UYWdfRGVmaW5pdGlvbnMiIF1bJFRhZ19EZWZpbml0aW9uc19OYW1lXVsgJFRhZ19ObyBdWydEZXNjcmlwdGlvbiddOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMgKCAnVW5pdHMnLCAkR0xPQkFMU1sgIklGRF9UYWdfRGVmaW5pdGlvbnMiIF1bJFRhZ19EZWZpbml0aW9uc19OYW1lXVsgJFRhZ19ObyBdICkgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVuaXRzID0gJEdMT0JBTFNbICJJRkRfVGFnX0RlZmluaXRpb25zIiBdWyRUYWdfRGVmaW5pdGlvbnNfTmFtZV1bICRUYWdfTm8gXVsnVW5pdHMnXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFnIGV4aXN0cyBpbiBkZWZpbml0aW9ucywgYXBwZW5kIGRldGFpbHMgdG8gb3V0cHV0IGFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICRPdXRwdXRBcnJheVsgJFRhZ19ObyBdID0gYXJyYXkgKCAgICAgICAiVGFnIE51bWJlciIgICAgICA9PiAkVGFnX05vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhZyBOYW1lIiAgICAgICAgPT4gJEdMT0JBTFNbICJJRkRfVGFnX0RlZmluaXRpb25zIiBdWyRUYWdfRGVmaW5pdGlvbnNfTmFtZV1bICRUYWdfTm8gXVsnTmFtZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhZyBEZXNjcmlwdGlvbiIgPT4gJGRlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGF0YSBUeXBlIiAgICAgICA9PiAkRGF0YV9UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlR5cGUiICAgICAgICAgICAgPT4gJEdMT0JBTFNbICJJRkRfVGFnX0RlZmluaXRpb25zIiBdWyRUYWdfRGVmaW5pdGlvbnNfTmFtZV1bICRUYWdfTm8gXVsnVHlwZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRzIiAgICAgICAgICAgPT4gJHVuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRhdGEiICAgICAgICAgICAgPT4gJERhdGFfQXJyYXkgKTsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhZyBkb2VzbnQgZXhpc3QgaW4gZGVmaW5pdGlvbnMsIGFwcGVuZCB1bmtub3duIGRldGFpbHMgdG8gb3V0cHV0IGFycmF5CgogICAgICAgICAgICAgICAgICAgICAgICAkT3V0cHV0QXJyYXlbICRUYWdfTm8gXSA9IGFycmF5ICggICAgICAgIlRhZyBOdW1iZXIiICAgICAgPT4gJFRhZ19ObywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYWcgTmFtZSIgICAgICAgID0+ICJVbmtub3duIFRhZyAjIiAuICRUYWdfTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFnIERlc2NyaXB0aW9uIiA9PiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYXRhIFR5cGUiICAgICAgID0+ICREYXRhX1R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHlwZSIgICAgICAgICAgICA9PiAiVW5rbm93biIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5pdHMiICAgICAgICAgICA9PiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYXRhIiAgICAgICAgICAgID0+ICREYXRhX0FycmF5ICk7CiAgICAgICAgICAgICAgICB9CgoKCiAgICAgICAgICAgICAgICAvLyBTb21lIGluZm9ybWF0aW9uIG9mIHR5cGUgIlVua25vd24iICh0eXBlIDcpIG1pZ2h0IHJlcXVpcmUgaW5mb3JtYXRpb24gYWJvdXQKICAgICAgICAgICAgICAgIC8vIGhvdyBpdCdzIHBvc2l0aW9uIGFuZCBieXRlIGFsaWdubWVudCBpbiBvcmRlciB0byBiZSBkZWNvZGVkCiAgICAgICAgICAgICAgICBpZiAoICREYXRhX1R5cGUgPT0gNyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRPdXRwdXRBcnJheVsgJFRhZ19ObyBdWydPZmZzZXQnXSA9ICREYXRhX1N0YXJ0X3BvczsKICAgICAgICAgICAgICAgICAgICAgICAgJE91dHB1dEFycmF5WyAkVGFnX05vIF1bJ0J5dGUgQWxpZ24nXSA9ICRCeXRlX0FsaWduOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgRGF0YSBoYW5kbGluZwogICAgICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBQcmludCBJbWFnZSBNYXRjaGluZyBlbnRyeQogICAgICAgICAgICAgICAgaWYgKCAkT3V0cHV0QXJyYXlbICRUYWdfTm8gXVsnVHlwZSddID09ICJQSU0iICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFByaW50IEltYWdlIE1hdGNoaW5nIGVudHJ5LCBkZWNvZGUgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgICRPdXRwdXRBcnJheVsgJFRhZ19ObyBdID0gRGVjb2RlX1BJTSggJE91dHB1dEFycmF5WyAkVGFnX05vIF0sICRUYWdfRGVmaW5pdGlvbnNfTmFtZSApOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgdGhlIGVudHJ5IGludG8gYSB0ZXh0IHN0cmluZyB1c2luZyBhIGN1c3RvbSBpbnRlcnByZXRlcgogICAgICAgICAgICAgICAgJHRleHRfdmFsID0gZ2V0X1RhZ19UZXh0X1ZhbHVlKCAkT3V0cHV0QXJyYXlbICRUYWdfTm8gXSwgJFRhZ19EZWZpbml0aW9uc19OYW1lICk7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYSB0ZXh0IHN0cmluZyB3YXMgZ2VuZXJhdGVkCiAgICAgICAgICAgICAgICBpZiAoICR0ZXh0X3ZhbCAhPT0gRkFMU0UgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHN0cmluZyB3YXMgZ2VuZXJhdGVkLCBhcHBlbmQgaXQgdG8gdGhlIG91dHB1dCBhcnJheSBlbnRyeQogICAgICAgICAgICAgICAgICAgICAgICAkT3V0cHV0QXJyYXlbICRUYWdfTm8gXVsnVGV4dCBWYWx1ZSddID0gJHRleHRfdmFsOwogICAgICAgICAgICAgICAgICAgICAgICAkT3V0cHV0QXJyYXlbICRUYWdfTm8gXVsnRGVjb2RlZCddID0gVFJVRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBzdHJpbmcgd2FzIE5PVCBnZW5lcmF0ZWQsIGFwcGVuZCBhIGdlbmVyaWMgc3RyaW5nIHRvIHRoZSBvdXRwdXQgYXJyYXkgZW50cnkKICAgICAgICAgICAgICAgICAgICAgICAgJE91dHB1dEFycmF5WyAkVGFnX05vIF1bJ1RleHQgVmFsdWUnXSA9IGdldF9JRkRfdmFsdWVfYXNfdGV4dCggJE91dHB1dEFycmF5WyAkVGFnX05vIF0gKSAgLiAiICIgLiAkdW5pdHM7CiAgICAgICAgICAgICAgICAgICAgICAgICRPdXRwdXRBcnJheVsgJFRhZ19ObyBdWydEZWNvZGVkJ10gPSBGQUxTRTsKICAgICAgICAgICAgICAgIH0KCgoKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGVudHJ5IGlzIHRoZSBNYWtlciBOb3RlCiAgICAgICAgICAgICAgICBpZiAoICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJFWElGIiApICYmICggJFRhZ19ObyA9PSAzNzUwMCApICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgc29tZSBleHRyYSBpbmZvcm1hdGlvbiB3aGljaCB3aWxsIGFsbG93IE1ha2Vybm90ZSBEZWNvZGluZyB3aXRoIHRoZSBvdXRwdXQgYXJyYXkgZW50cnkKICAgICAgICAgICAgICAgICAgICAgICAgJE91dHB1dEFycmF5WyAkVGFnX05vIF1bJ09mZnNldCddID0gJERhdGFfU3RhcnRfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICAkT3V0cHV0QXJyYXlbICRUYWdfTm8gXVsgJ1RpZmYgT2Zmc2V0JyBdID0gJFRpZmZfb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAkT3V0cHV0QXJyYXlbICRUYWdfTm8gXVsnQnl0ZUFsaWduJ10gPSAkQnl0ZV9BbGlnbjsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgYSBwb2ludGVyIHRvIHRoaXMgZW50cnkgZm9yIE1ha2VyIG5vdGUgcHJvY2Vzc2luZyBsYXRlcgogICAgICAgICAgICAgICAgICAgICAgICAkR0xPQkFMU1sgIk1ha2VyX05vdGVfVGFnIiBdID0gJiAkT3V0cHV0QXJyYXlbICRUYWdfTm8gXTsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIElQVEMvTkFBIFJlY29yZCB3aXRoaW4gdGhlIEVYSUYgSUZECiAgICAgICAgICAgICAgICBpZiAoICggKCAkVGFnX0RlZmluaXRpb25zX05hbWUgPT0gIkVYSUYiICkgfHwgKCAkVGFnX0RlZmluaXRpb25zX05hbWUgPT0gIlRJRkYiICkgKSAmJgogICAgICAgICAgICAgICAgICAgICAoICRUYWdfTm8gPT0gMzM3MjMgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBJUFRDL05BQSBSZWNvcmQsIGludGVycHJldCBpdCBhbmQgcHV0IHJlc3VsdCBpbiB0aGUgZGF0YSBmb3IgdGhpcyBlbnRyeQogICAgICAgICAgICAgICAgICAgICAgICAkT3V0cHV0QXJyYXlbICRUYWdfTm8gXVsnRGF0YSddID0gZ2V0X0lQVEMoICREYXRhU3RyICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRPdXRwdXRBcnJheVsgJFRhZ19ObyBdWydEZWNvZGVkJ10gPSBUUlVFOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gQ2hhbmdlOiBDaGVjayBmb3IgZW1iZWRkZWQgWE1QIGFzIG9mIHZlcnNpb24gMS4xMQogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIFhNUCBSZWNvcmQgd2l0aGluIHRoZSBFWElGIElGRAogICAgICAgICAgICAgICAgaWYgKCAoICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJFWElGIiApIHx8ICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJUSUZGIiApICkgJiYKICAgICAgICAgICAgICAgICAgICAgKCAkVGFnX05vID09IDcwMCApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFhNUCBSZWNvcmQsIGludGVycHJldCBpdCBhbmQgcHV0IHJlc3VsdCBpbiB0aGUgZGF0YSBmb3IgdGhpcyBlbnRyeQogICAgICAgICAgICAgICAgICAgICAgICAkT3V0cHV0QXJyYXlbICRUYWdfTm8gXVsnRGF0YSddID0gIHJlYWRfWE1QX2FycmF5X2Zyb21fdGV4dCggJERhdGFTdHIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJE91dHB1dEFycmF5WyAkVGFnX05vIF1bJ0RlY29kZWQnXSA9IFRSVUU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2hhbmdlOiBDaGVjayBmb3IgZW1iZWRkZWQgSVJCIGFzIG9mIHZlcnNpb24gMS4xMQogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIFBob3Rvc2hvcCBJUkIgUmVjb3JkIHdpdGhpbiB0aGUgRVhJRiBJRkQKICAgICAgICAgICAgICAgIGlmICggKCAoICRUYWdfRGVmaW5pdGlvbnNfTmFtZSA9PSAiRVhJRiIgKSB8fCAoICRUYWdfRGVmaW5pdGlvbnNfTmFtZSA9PSAiVElGRiIgKSApICYmCiAgICAgICAgICAgICAgICAgICAgICggJFRhZ19ObyA9PSAzNDM3NyApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFBob3Rvc2hvcCBJUkIgUmVjb3JkLCBpbnRlcnByZXQgaXQgYW5kIHB1dCByZXN1bHQgaW4gdGhlIGRhdGEgZm9yIHRoaXMgZW50cnkKICAgICAgICAgICAgICAgICAgICAgICAgJE91dHB1dEFycmF5WyAkVGFnX05vIF1bJ0RhdGEnXSA9IHVucGFja19QaG90b3Nob3BfSVJCX0RhdGEoICREYXRhU3RyICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRPdXRwdXRBcnJheVsgJFRhZ19ObyBdWydEZWNvZGVkJ10gPSBUUlVFOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEV4aWYgVGh1bWJuYWlsCiAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IGJvdGggdGhlIHRodW1ibmFpbCBsZW5ndGggYW5kIG9mZnNldCBlbnRyaWVzIGhhdmUgYmVlbiBwcm9jZXNzZWQsCiAgICAgICAgICAgICAgICAvLyBhbmQgdGhhdCB0aGlzIGlzIG9uZSBvZiB0aGVtCiAgICAgICAgICAgICAgICBpZiAoICggKCAoICRUYWdfTm8gPT0gNTEzICkgJiYgKCBhcnJheV9rZXlfZXhpc3RzKCA1MTQsICRPdXRwdXRBcnJheSApICkgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICggKCAkVGFnX05vID09IDUxNCApICYmICggYXJyYXlfa2V5X2V4aXN0cyggNTEzLCAkT3V0cHV0QXJyYXkgKSApICkgKSAgJiYKICAgICAgICAgICAgICAgICAgICAgKCAkVGFnX0RlZmluaXRpb25zX05hbWUgPT0gIlRJRkYiICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWVrIHRvIHRoZSBzdGFydCBvZiB0aGUgdGh1bWJuYWlsIHVzaW5nIHRoZSBvZmZzZXQgZW50cnkKICAgICAgICAgICAgICAgICAgICAgICAgZnNlZWsoICRmaWxlaG5kLCAkVGlmZl9vZmZzZXQgKyAkT3V0cHV0QXJyYXlbNTEzXVsnRGF0YSddWzBdICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSB0aHVtYm5haWwgZGF0YSwgYW5kIHJlcGxhY2UgdGhlIG9mZnNldCBkYXRhIHdpdGggdGhlIHRodW1ibmFpbAogICAgICAgICAgICAgICAgICAgICAgICAkT3V0cHV0QXJyYXlbNTEzXVsnRGF0YSddID0gbmV0d29ya19zYWZlX2ZyZWFkKCAkZmlsZWhuZCwgJE91dHB1dEFycmF5WzUxNF1bJ0RhdGEnXVswXSApOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAvLyBDYXNpbyBUaHVtYm5haWwKICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgYm90aCB0aGUgdGh1bWJuYWlsIGxlbmd0aCBhbmQgb2Zmc2V0IGVudHJpZXMgaGF2ZSBiZWVuIHByb2Nlc3NlZCwKICAgICAgICAgICAgICAgIC8vIGFuZCB0aGF0IHRoaXMgaXMgb25lIG9mIHRoZW0KICAgICAgICAgICAgICAgIGlmICggKCAoICggJFRhZ19ObyA9PSAweDAwMDQgKSAmJiAoIGFycmF5X2tleV9leGlzdHMoIDB4MDAwMywgJE91dHB1dEFycmF5ICkgKSApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgKCAoICRUYWdfTm8gPT0gMHgwMDAzICkgJiYgKCBhcnJheV9rZXlfZXhpc3RzKCAweDAwMDQsICRPdXRwdXRBcnJheSApICkgKSApICAmJgogICAgICAgICAgICAgICAgICAgICAoICRUYWdfRGVmaW5pdGlvbnNfTmFtZSA9PSAiQ2FzaW8gVHlwZSAyIiApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlayB0byB0aGUgc3RhcnQgb2YgdGhlIHRodW1ibmFpbCB1c2luZyB0aGUgb2Zmc2V0IGVudHJ5CiAgICAgICAgICAgICAgICAgICAgICAgIGZzZWVrKCAkZmlsZWhuZCwgJFRpZmZfb2Zmc2V0ICsgJE91dHB1dEFycmF5WzB4MDAwNF1bJ0RhdGEnXVswXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgdGh1bWJuYWlsIGRhdGEsIGFuZCByZXBsYWNlIHRoZSBvZmZzZXQgZGF0YSB3aXRoIHRoZSB0aHVtYm5haWwKICAgICAgICAgICAgICAgICAgICAgICAgJE91dHB1dEFycmF5WzB4MDAwNF1bJ0RhdGEnXSA9IG5ldHdvcmtfc2FmZV9mcmVhZCggJGZpbGVobmQsICRPdXRwdXRBcnJheVsweDAwMDNdWydEYXRhJ11bMF0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNaW5vbHRhIFRodW1ibmFpbAogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBib3RoIHRoZSB0aHVtYm5haWwgbGVuZ3RoIGFuZCBvZmZzZXQgZW50cmllcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLAogICAgICAgICAgICAgICAgLy8gYW5kIHRoYXQgdGhpcyBpcyBvbmUgb2YgdGhlbQogICAgICAgICAgICAgICAgaWYgKCAoICggKCAkVGFnX05vID09IDB4MDA4OCApICYmICggYXJyYXlfa2V5X2V4aXN0cyggMHgwMDg5LCAkT3V0cHV0QXJyYXkgKSApICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAoICggJFRhZ19ObyA9PSAweDAwODkgKSAmJiAoIGFycmF5X2tleV9leGlzdHMoIDB4MDA4OCwgJE91dHB1dEFycmF5ICkgKSApICkgICYmCiAgICAgICAgICAgICAgICAgICAgICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJPbHltcHVzIiApICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZWsgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0aHVtYm5haWwgdXNpbmcgdGhlIG9mZnNldCBlbnRyeQogICAgICAgICAgICAgICAgICAgICAgICBmc2VlayggJGZpbGVobmQsICRUaWZmX29mZnNldCArICRPdXRwdXRBcnJheVsweDAwODhdWydEYXRhJ11bMF0gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIHRodW1ibmFpbCBkYXRhLCBhbmQgcmVwbGFjZSB0aGUgb2Zmc2V0IGRhdGEgd2l0aCB0aGUgdGh1bWJuYWlsCiAgICAgICAgICAgICAgICAgICAgICAgICRPdXRwdXRBcnJheVsweDAwODhdWydEYXRhJ10gPSBuZXR3b3JrX3NhZmVfZnJlYWQoICRmaWxlaG5kLCAkT3V0cHV0QXJyYXlbMHgwMDg5XVsnRGF0YSddWzBdICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgdGhlIG1pbm9sdGEgdGh1bWJuYWlsIGRhdGEgaXMgZW1wdHkgKG9yIHRoZSBvZmZzZXQgaXMgY29ycnVwdCwgd2hpY2ggcmVzdWx0cyBpbiB0aGUgc2FtZSB0aGluZykKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB0aHVtYm5haWwgZGF0YSBleGlzdHMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkT3V0cHV0QXJyYXlbMHgwMDg4XVsnRGF0YSddICE9ICIiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRodW1ibmFpbCBleGlzdHMKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWlub2x0YSBUaHVtYm5haWxzIGFyZSBtaXNzaW5nIHRoZWlyIGZpcnN0IDB4RkYgZm9yIHNvbWUgcmVhc29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIGlzIHJlcGxhY2VkIHdpdGggc29tZSB3ZWlyZCBjaGFyYWN0ZXIsIHNvIGZpeCB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE91dHB1dEFycmF5WzB4MDA4OF1bJ0RhdGEnXXswfSA9ICJceEZGIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaHVtYm5haWwgZG9lc250IGV4aXN0IC0gbWFrZSBpdCBvYnZpb3VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE91dHB1dEFycmF5WzB4MDA4OF1bJ0RhdGEnXSA9IEZBTFNFOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0KCgoKCgoKCiAgICAgICAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiBJRkQgZW50cmllcyBhbmQgdGhlIG9mZnNldCB0byB0aGUgbmV4dCBJRkQKCiAgICAgICAgcmV0dXJuIGFycmF5ICgkT3V0cHV0QXJyYXkgLCAkTmV4dF9PZmZzZXQpOwp9CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICByZWFkX0lGRF91bml2ZXJzYWwKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBJbnRlcm5hbCBGdW5jdGlvbjogICAgIGdldF9UYWdfVGV4dF9WYWx1ZQoqCiogRGVzY3JpcHRpb246ICBBdHRlbXB0cyB0byBpbnRlcnByZXQgYW4gSUZEIGVudHJ5IGludG8gYSB0ZXh0IHN0cmluZyB1c2luZyB0aGUKKiAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBJRkRfVGFnX0RlZmluaXRpb25zIGdsb2JhbCBhcnJheS4KKgoqIFBhcmFtZXRlcnM6ICAgVGFnIC0gVGhlIElGRCBlbnRyeSB0byBwcm9jZXNzCiogICAgICAgICAgICAgICBUYWdfRGVmaW5pdGlvbnNfTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWcgZGVmaW5pdGlvbnMgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBJRkRfVGFnX0RlZmluaXRpb25zIGdsb2JhbCBhcnJheQoqCiogUmV0dXJuczogICAgICBTdHJpbmcgLSBpZiB0aGUgdGFnIHdhcyBzdWNjZXNzZnVsbHkgZGVjb2RlZCBpbnRvIGEgdGV4dCBzdHJpbmcKKiAgICAgICAgICAgICAgIEZBTFNFIC0gaWYgdGhlIHRhZyBjb3VsZCBub3QgYmUgZGVjb2RlZCB1c2luZyB0aGUgaW5mb3JtYXRpb24KKiAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIElGRF9UYWdfRGVmaW5pdGlvbnMgZ2xvYmFsIGFycmF5CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gZ2V0X1RhZ19UZXh0X1ZhbHVlKCAkVGFnLCAkVGFnX0RlZmluaXRpb25zX05hbWUgKQp7CiAgICAgICAgLy8gQ2hlY2sgd2hhdCBmb3JtYXQgdGhlIGVudHJ5IGlzIHNwZWNpZmllZCBhcwoKICAgICAgICBpZiAoICRUYWdbJ1R5cGUnXSA9PSAiU3RyaW5nIiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gRm9ybWF0IGlzIFRleHQgU3RyaW5nCgogICAgICAgICAgICAgICAgLy8gSWYgIlVua25vd24iICh0eXBlIDcpIGRhdGEgdHlwZSwKICAgICAgICAgICAgICAgIGlmICggJFRhZ1snRGF0YSBUeXBlJ10gPT0gNyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiBkYXRhIGFzIGlzLgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFRhZ1snRGF0YSddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIHRoZSBkZWZhdWx0IHN0cmluZyB2YWx1ZSBvZiB0aGUgZGF0YXR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldF9JRkRfdmFsdWVfYXNfdGV4dCggJFRhZyApOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmICggJFRhZ1snVHlwZSddID09ICJDaGFyYWN0ZXIgQ29kZWQgU3RyaW5nIiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gRm9ybWF0IGlzIENoYXJhY3RlciBDb2RlZCBTdHJpbmcgKEZpcnN0IDggY2hhcmFjdGVycyBpbmRpY2F0ZSBjb2Rpbmcgc2NoZW1lKQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgRGF0YSB0byBhIHN0cmluZwogICAgICAgICAgICAgICAgaWYgKCAkVGFnWydEYXRhIFR5cGUnXSA9PSA3ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQgaXMgdHlwZSAiVW5rbm93biIgKHR5cGUgNykgdXNlIGRhdGEgYXMgaXMKICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSAgJFRhZ1snRGF0YSddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBkZWZhdWx0IHN0cmluZyB2YWx1ZSBvZiB0aGUgZGF0YXR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSBnZXRfSUZEX3ZhbHVlX2FzX3RleHQoICRUYWcgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTb21lIGltcGxlbWVudGF0aW9ucyBhbGxvdyBjb21wbGV0ZWx5IGRhdGEgd2l0aCBubyBDb2RpbmcgU2NoZW1lIE5hbWUsCiAgICAgICAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIGhhbmRsZSB0aGlzIHRvIGF2b2lkIGVycm9ycwogICAgICAgICAgICAgICAgaWYgKCB0cmltKCAkZGF0YSApID09ICIiICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIENvZGluZyBTY2hlbWUgTmFtZSBmcm9tIHRoZSBmaXJzdCA4IGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICRjaGFyX2NvZGUgPSBzdWJzdHIoICRkYXRhLCAwLCA4ICk7CgogICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgRGF0YSBwYXJ0IGZyb20gYWZ0ZXIgdGhlIGZpcnN0IDggY2hhcmFjdGVycwogICAgICAgICAgICAgICAgJGNoYXJhY3RlcnMgPSBzdWJzdHIoICRkYXRhLCA4ICk7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgY29kaW5nIHNjaGVtZSBhbmQgaW50ZXJwcmV0IGFzIG5lY2Nlc3NhcnkKCiAgICAgICAgICAgICAgICBpZiAoICRjaGFyX2NvZGUgPT09ICJBU0NJSVx4MDBceDAwXHgwMCIgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBU0NJSSBjb2RpbmcgLSByZXR1cm4gZGF0YSBhcyBpcy4KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRjaGFyYWN0ZXJzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZWlmICggKCAkY2hhcl9jb2RlID09PSAiVU5JQ09ERVx4MDAiICkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICggJGNoYXJfY29kZSA9PT0gIlVuaWNvZGVceDAwIiApICkgICAgICAgICAgICAgLy8gTm90ZSBsb3dlcmNhc2UgaXMgbm9uIHN0YW5kYXJkCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuaWNvZGUgY29kaW5nIC0gaW50ZXJwcmV0IGFuZCByZXR1cm4gcmVzdWx0LgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geG1sX1VURjE2X2NsZWFuKCAkY2hhcmFjdGVycywgVFJVRSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmtub3duIGNvZGluZyAtIHJldHVybiBzdHJpbmcgaW5kaWNhdGluZyB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiVW5zdXBwb3J0ZWQgY2hhcmFjdGVyIGNvZGluZyA6IFwiJGNoYXJfY29kZVwiXG5cIiIgLiB0cmltKCRjaGFyYWN0ZXJzKSAuICJcIiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoICRUYWdbJ1R5cGUnXSA9PSAiTnVtZXJpYyIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBpcyBudW1lcmljIC0gcmV0dXJuIGRlZmF1bHQgdGV4dCB2YWx1ZSB3aXRoIGFueSByZXF1aXJlZCB1bml0cyB0ZXh0IGFwcGVuZGVkCiAgICAgICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMgKCAnVW5pdHMnLCAkR0xPQkFMU1sgIklGRF9UYWdfRGVmaW5pdGlvbnMiIF1bJFRhZ19EZWZpbml0aW9uc19OYW1lXVsgJFRhZ1siVGFnIE51bWJlciJdIF0gKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICR1bml0cyA9ICRHTE9CQUxTWyAiSUZEX1RhZ19EZWZpbml0aW9ucyIgXVskVGFnX0RlZmluaXRpb25zX05hbWVdWyAkVGFnWyJUYWcgTnVtYmVyIl0gXVsnVW5pdHMnXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHVuaXRzID0gIiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X0lGRF92YWx1ZV9hc190ZXh0KCAkVGFnICkgIC4gIiAiIC4gJHVuaXRzOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICAoICRUYWdbJ1R5cGUnXSA9PSAiTG9va3VwIiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gRm9ybWF0IGlzIGEgTG9va3VwIFRhYmxlCgogICAgICAgICAgICAgICAgLy8gR2V0IGEgbnVtZXJpYyB2YWx1ZSB0byB1c2UgaW4gbG9va3VwCgogICAgICAgICAgICAgICAgaWYgKCBpc19hcnJheSggJFRhZ1snRGF0YSddICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBkYXRhIGlzIGFuIGFycmF5LCB1c2UgZmlyc3QgZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAkZmlyc3RfdmFsID0gJFRhZ1snRGF0YSddWzBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoIGlzX3N0cmluZyggJFRhZ1snRGF0YSddICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBkYXRhIGlzIGEgc3RyaW5nLCB1c2UgdGhlIGZpcnN0IGNoYXJhY3RlcgogICAgICAgICAgICAgICAgICAgICAgICAkZmlyc3RfdmFsID0gb3JkKCRUYWdbJ0RhdGEnXXswfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIGRhdGEgYXMgaXMKICAgICAgICAgICAgICAgICAgICAgICAgJGZpcnN0X3ZhbCA9ICRUYWdbJ0RhdGEnXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZGF0YSB2YWx1ZSBleGlzdHMgaW4gdGhlIGxvb2t1cCB0YWJsZSBmb3IgdGhpcyBJRkQgZW50cnkKICAgICAgICAgICAgICAgIGlmICggYXJyYXlfa2V5X2V4aXN0cyggJGZpcnN0X3ZhbCwgJEdMT0JBTFNbICJJRkRfVGFnX0RlZmluaXRpb25zIiBdWyRUYWdfRGVmaW5pdGlvbnNfTmFtZV1bICRUYWdbIlRhZyBOdW1iZXIiXSBdICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIHZhbHVlIGV4aXN0cyBpbiBsb29rdXAgdGFibGUgLSByZXR1cm4gdGhlIG1hdGNoaW5nIHN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJEdMT0JBTFNbICJJRkRfVGFnX0RlZmluaXRpb25zIiBdWyRUYWdfRGVmaW5pdGlvbnNfTmFtZV1bICRUYWdbIlRhZyBOdW1iZXIiXSBdWyAkZmlyc3RfdmFsIF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgdmFsdWUgZG9lc250IGV4aXN0IGluIGxvb2t1cCB0YWJsZSAtIHJldHVybiBleHBsYW5hdGlvbiBzdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJVbmtub3duIFJlc2VydmVkIHZhbHVlICRmaXJzdF92YWwgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAgKCAkVGFnWydUeXBlJ10gPT0gIlNwZWNpYWwiICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgaXMgc3BlY2lhbCAtIGludGVycHJldCB0byB0ZXh0IHdpdGggc3BlY2lhbCBoYW5kbGVycwogICAgICAgICAgICAgICAgcmV0dXJuIGdldF9TcGVjaWFsX1RhZ19UZXh0X1ZhbHVlKCAkVGFnLCAkVGFnX0RlZmluaXRpb25zX05hbWUgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAgKCAkVGFnWydUeXBlJ10gPT0gIlBJTSIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBpcyBQcmludCBJbWFnZSBNYXRjaGluZyBpbmZvIC0gaW50ZXJwcmV0IHdpdGggY3VzdG9tIGhhbmRsZXIKICAgICAgICAgICAgICAgIHJldHVybiBnZXRfUElNX1RleHRfVmFsdWUoICRUYWcsICRUYWdfRGVmaW5pdGlvbnNfTmFtZSApOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICAoICRUYWdbJ1R5cGUnXSA9PSAiU3ViSUZEIiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gRm9ybWF0IGlzIGEgU3ViLUlGRCAtIHRoaXMgaGFzIG5vIHRleHQgdmFsdWUKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFVua25vd24gRm9ybWF0IC0gQ291bGRuJ3QgaW50ZXJwcmV0IHVzaW5nIHRoZSBJRkRfVGFnX0RlZmluaXRpb25zIGdsb2JhbCBhcnJheSBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIGdldF9UYWdfVGV4dF9WYWx1ZQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEludGVybmFsIEZ1bmN0aW9uOiAgICAgZ2V0X1NwZWNpYWxfVGFnX1RleHRfVmFsdWUKKgoqIERlc2NyaXB0aW9uOiAgSW50ZXJwcmV0cyBhbiBJRkQgZW50cnkgbWFya2VkIGFzICJTcGVjaWFsIiBpbiB0aGUgSUZEX1RhZ19EZWZpbml0aW9ucwoqICAgICAgICAgICAgICAgZ2xvYmFsIGFycmF5IGludG8gYSB0ZXh0IHN0cmluZyB1c2luZyBjdXN0b20gaGFuZGxlcnMKKgoqIFBhcmFtZXRlcnM6ICAgVGFnIC0gVGhlIElGRCBlbnRyeSB0byBwcm9jZXNzCiogICAgICAgICAgICAgICBUYWdfRGVmaW5pdGlvbnNfTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWcgZGVmaW5pdGlvbnMgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBJRkRfVGFnX0RlZmluaXRpb25zIGdsb2JhbCBhcnJheQoqCiogUmV0dXJuczogICAgICBTdHJpbmcgLSBpZiB0aGUgdGFnIHdhcyBzdWNjZXNzZnVsbHkgZGVjb2RlZCBpbnRvIGEgdGV4dCBzdHJpbmcKKiAgICAgICAgICAgICAgIEZBTFNFIC0gaWYgdGhlIHRhZyBjb3VsZCBub3QgYmUgZGVjb2RlZAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIGdldF9TcGVjaWFsX1RhZ19UZXh0X1ZhbHVlKCAkVGFnLCAkVGFnX0RlZmluaXRpb25zX05hbWUgKQp7CiAgICAgICAgLy8gQ2hlY2sgd2hhdCB0eXBlIG9mIElGRCBpcyBiZWluZyBkZWNvZGVkCgogICAgICAgIGlmICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJUSUZGIiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFRJRkYgSUZEIChib3R0b20gbGV2ZWwpCgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hhdCB0YWcgbnVtYmVyIHRoZSBJRkQgZW50cnkgaGFzLgogICAgICAgICAgICAgICAgc3dpdGNoICggJFRhZ1snVGFnIE51bWJlciddICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1MzA6ICAvLyBZQ2JDciBTdWIgU2FtcGxpbmcgRW50cnkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBjb250YWlucyB0d28gbnVtZXJpY2FsIHZhbHVlcwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggJFRhZ1snRGF0YSddWzBdID09IDIgKSAmJiAoICRUYWdbJ0RhdGEnXVsxXSA9PSAxICkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhbHVlcyBhcmUgMiwxIC0gaGVuY2UgWUNiQ3IgNDoyOjIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiWUNiQ3IgNDoyOjIgcmF0aW8gb2YgY2hyb21pbmFuY2UgY29tcG9uZW50cyB0byB0aGUgbHVtaW5hbmNlIGNvbXBvbmVudHMiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAoICRUYWdbJ0RhdGEnXVswXSA9PSAyICkgJiYgKCAkVGFnWydEYXRhJ11bMV0gPT0gMiApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWx1ZXMgYXJlIDIsMiAtIGhlbmNlIFlDYkNyIDQ6MjowCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIllDYkNyIDQ6MjowIHJhdGlvIG9mIGNocm9taW5hbmNlIGNvbXBvbmVudHMgdG8gdGhlIGx1bWluYW5jZSBjb21wb25lbnRzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyIHZhbHVlcyBhcmUgdW5rbm93bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJVbmtub3duIFJlc2VydmVkIHZhbHVlICgiIC4gJFRhZ1snRGF0YSddWzBdIC4gIikiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmICggJFRhZ19EZWZpbml0aW9uc19OYW1lID09ICJFWElGIiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBFWElGIElGRAoKICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoYXQgdGFnIG51bWJlciB0aGUgSUZEIGVudHJ5IGhhcy4KICAgICAgICAgICAgICAgIHN3aXRjaCAoICRUYWdbJ1RhZyBOdW1iZXInXSApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM3MTIxOiAvLyBDb21wb25lbnRzIGNvbmZpZ3VyYXRpb24KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBjb250YWlucyA0IG51bWVyaWNhbCB2YWx1ZXMgaW5kaWNhdGluZyBjb21wb25lbnQgdHlwZQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciA9ICIiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggY29tcG9uZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggJE51bSA9IDA7ICROdW0gPCA0OyAkTnVtKysgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCBmaXJzdCBwYXJ0IG9mIHRleHQgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiQ29tcG9uZW50ICIgLiAoICROdW0gKyAxICkgLiAiOiAiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCBzZWNvbmQgcGFydCBvZiB0ZXh0IHN0cmluZyB2aWEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvb2t1cCB1c2luZyBudW1lcmljYWwgdmFsdWUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSBvcmQoICRUYWdbJ0RhdGEnXXskTnVtfSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCAkdmFsdWUgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkRvZXMgbm90IGV4aXN0XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlkgKEx1bWluYW5jZSlcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiQ2IgKENocm9tYSBtaW51cyBCbHVlKVxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJDciAoQ2hyb21hIG1pbnVzIFJlZClcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiUmVkXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkdyZWVuXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkJsdWVcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlVua25vd24gdmFsdWUgJHZhbHVlXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgY29tcGxldGVkIHN0cmluZwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG91dHB1dF9zdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDE3MzA6IC8vIENvbG91ciBGaWx0ZXIgQXJyYXkgUGF0dGVybgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgYXJlIGEgU0hPUlQgZm9yIEhvcml6b250YWwgcmVwZWF0IHBpeGVsIHVuaXQgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuX21heCA9IGdldF9JRkRfRGF0YV9UeXBlKCBzdWJzdHIoICRUYWdbJ0RhdGEnXSwgMCwgMiApLCAzLCAkVGFnWydCeXRlIEFsaWduJ10gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG5leHQgdHdvIGNoYXJhY3RlcnMgYXJlIGEgU0hPUlQgZm9yIFZlcnRpY2FsIHJlcGVhdCBwaXhlbCB1bml0IC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbV9tYXggPSBnZXRfSUZEX0RhdGFfVHlwZSggc3Vic3RyKCAkVGFnWydEYXRhJ10sIDIsIDIgKSwgMywgJFRhZ1snQnl0ZSBBbGlnbiddICk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCBsZWFzdCBvbmUgY2FtZXJhIHR5cGUgYXBwZWFycyB0byBoYXZlIGJ5dGUgcmV2ZXJzZWQgdmFsdWVzIGZvciBOX01heCBhbmQgTV9NYXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGV5IG5lZWQgcmV2ZXJzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbl9tYXggPiAyNTYgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuX21heCA9ICRuX21heC8yNTYgKyAyNTYqKCRuX21heCUyNTYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbV9tYXggPiAyNTYgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtX21heCA9ICRtX21heC8yNTYgKyAyNTYqKCRtX21heCUyNTYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyID0gIiI7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIHJlc3VsdGluZyAyIGRpbWVuc2lvbmFsIGFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciggJG0gPSAxOyAkbSA8PSAkbV9tYXg7ICRtKysgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciggJG4gPSAxOyAkbiA8PSAkbl9tYXg7ICRuKysgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRleHQgZnJvbSBhIGxvb2t1cCB0YWJsZSBhY2NvcmRpbmcgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHZhbHVlIHJlYWQgZm9yIHRoaXMgZWxlbWVudAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggb3JkKCRUYWdbJ0RhdGEnXXsoJG5fbWF4KigkbS0xKSskbiszKX0pICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJSRUQgICAgICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiR1JFRU4gICAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkJMVUUgICAgIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJDWUFOICAgICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiTUFHRU5UQSAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIllFTExPVyAgIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJXSElURSAgICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlVua25vd24gIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRvdXRwdXRfc3RyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBVbmtub3duIElGRCB0eXBlLCBzZWUgaWYgaXQgaXMgcGFydCBvZiBhIG1ha2Vybm90ZQogICAgICAgICAgICAgICAgcmV0dXJuIGdldF9NYWtlcm5vdGVfVGV4dF9WYWx1ZSggJFRhZywgJFRhZ19EZWZpbml0aW9uc19OYW1lICk7CiAgICAgICAgfQoKCn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBnZXRfVGFnX1RleHRfVmFsdWUKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgaW50ZXJwcmV0X0lGRAoqCiogRGVzY3JpcHRpb246ICBHZW5lcmF0ZXMgaHRtbCBkZXRhaWxpbmcgdGhlIGNvbnRlbnRzIGEgc2luZ2xlIElGRC4KKgoqIFBhcmFtZXRlcnM6ICAgSUZEX2FycmF5IC0gdGhlIGFycmF5IGNvbnRhaW5pbmcgYW4gSUZECiogICAgICAgICAgICAgICBmaWxlbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBJbWFnZSBmaWxlIGJlaW5nIHByb2Nlc3NlZCAoIHVzZWQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgc2NyaXB0cyB3aGljaCBkaXNwbGF5cyBFWElGIHRodW1ibmFpbHMpCioKKiBSZXR1cm5zOiAgICAgIG91dHB1dF9zdHIgLSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBIVE1MCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gaW50ZXJwcmV0X0lGRCggJElGRF9hcnJheSwgJGZpbGVuYW1lICkKewogICAgICAgIC8vIENyZWF0ZSB0aGUgb3V0cHV0IHN0cmluZyB3aXRoIHRoZSB0YWJsZSB0YWcKICAgICAgICAkb3V0cHV0X3N0ciA9ICI8dGFibGUgY2xhc3M9XCJFWElGX1RhYmxlXCIgYm9yZGVyPTE+XG4iOwoKICAgICAgICAvLyBDcmVhdGUgYW4gZXh0cmEgb3V0cHV0IHN0cmluZyB0byByZWNlaXZlIGFueSBzdXBwbGVtZW50YXJ5IGh0bWwKICAgICAgICAvLyB3aGljaCBjYW5ub3QgZ28gaW5zaWRlIHRoZSB0YWJsZQogICAgICAgICRleHRyYV9JRkRfc3RyID0gIiI7CgogICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIElGRCBhcnJheSBpcyB2YWxpZAogICAgICAgIGlmICggKCAkSUZEX2FycmF5ID09PSBGQUxTRSApIHx8ICggJElGRF9hcnJheSA9PT0gTlVMTCApICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyB0aGUgSUZEIGFycmF5IGlzIE5PVCB2YWxpZCAtIGV4aXQKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gRVhJRiBJRkQgYW5kIGlmIHRoZXJlIGlzIGEgbWFrZXJub3RlIHByZXNlbnQKICAgICAgICBpZiAoICggJElGRF9hcnJheVsnVGFncyBOYW1lJ10gPT09ICJFWElGIiApICYmCiAgICAgICAgICAgICAoICEgYXJyYXlfa2V5X2V4aXN0cyggMzc1MDAsICRJRkRfYXJyYXkgKSApICkKICAgICAgICB7CgogICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBFWElGIElGRCBidXQgTk8gbWFrZXJub3RlIGlzIHByZXNlbnQgLSBBZGQgYSBtZXNzYWdlIHRvIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICRleHRyYV9JRkRfc3RyIC49ICI8aDMgY2xhc3M9XCJFWElGX1NlY29uZGFyeV9IZWFkaW5nXCI+Tm8gTWFrZXJub3RlIFByZXNlbnQ8L2gzPiI7CiAgICAgICAgfQoKICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggdGFnIGluIHRoZSBJRkQKCiAgICAgICAgZm9yZWFjaCggJElGRF9hcnJheSBhcyAkVGFnX0lEID0+ICRFeGlmX1RhZyApCiAgICAgICAgewoKICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgbm9uIG51bWVyaWMgZWxlbWVudHMgLSB0aGV5IGFyZW4ndCB0YWdzCiAgICAgICAgICAgICAgICBpZiAoICEgaXNfbnVtZXJpYyAoICRUYWdfSUQgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgVGFncyBOYW1lCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBUYWcgaGFzIGJlZW4gZGVjb2RlZCBzdWNjZXNzZnVsbHkKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAkRXhpZl9UYWdbJ0RlY29kZWQnXSA9PSBUUlVFICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0YWcgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGRlY29kZWQKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhYmxlIGNlbGxzIHdvbid0IGdldCBkcmF3biB3aXRoIG5vdGhpbmcgaW4gdGhlbSAtCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGF0IGxlYXN0IGEgbm9uIGJyZWFraW5nIHNwYWNlIGV4aXN0cyBpbiB0aGVtCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRyaW0oJEV4aWZfVGFnWydUZXh0IFZhbHVlJ10pID09ICIiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFeGlmX1RhZ1snVGV4dCBWYWx1ZSddID0gIiZuYnNwOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgaXMgYSBzdWItSUZECiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEV4aWZfVGFnWydUeXBlJ10gPT0gIlN1YklGRCIgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHN1Yi1JRkQgdGFnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgc3ViLWhlYWRpbmcgZm9yIHRoZSBzdWItSUZECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV4dHJhX0lGRF9zdHIgLj0gIjxoMyBjbGFzcz1cIkVYSUZfU2Vjb25kYXJ5X0hlYWRpbmdcIj4iIC4gJEV4aWZfVGFnWydUYWcgTmFtZSddIC4gIiBjb250ZW50czwvaDM+IjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCBlYWNoIHN1Yi1JRkQgaW4gdGhlIGNoYWluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoICRFeGlmX1RhZ1snRGF0YSddIGFzICRzdWJJRkQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVycHJldCB0aGlzIHN1Yi1JRkQgYW5kIGFkZCB0aGUgaHRtbCB0byB0aGUgc2Vjb25kYXJ5IG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV4dHJhX0lGRF9zdHIgLj0gaW50ZXJwcmV0X0lGRCggJHN1YklGRCwgJGZpbGVuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBpcyBhIG1ha2Vybm90ZQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggJEV4aWZfVGFnWydUeXBlJ10gPT0gIk1ha2VyIE5vdGUiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBNYWtlcm5vdGUgVGFnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgc3ViLWhlYWRpbmcgZm9yIHRoZSBNYWtlcm5vdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXh0cmFfSUZEX3N0ciAuPSAiPGgzIGNsYXNzPVwiRVhJRl9TZWNvbmRhcnlfSGVhZGluZ1wiPk1ha2VyIE5vdGUgQ29udGVudHM8L2gzPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVycHJldCB0aGUgTWFrZXJub3RlIGFuZCBhZGQgdGhlIGh0bWwgdG8gdGhlIHNlY29uZGFyeSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXh0cmFfSUZEX3N0ciAuPSBJbnRlcnByZXRfTWFrZXJub3RlX3RvX0hUTUwoICRFeGlmX1RhZywgJGZpbGVuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgSVBUQy9OQUEgUmVjb3JkIHdpdGhpbiB0aGUgRVhJRiBJRkQKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoICRFeGlmX1RhZ1snVHlwZSddID09ICJJUFRDIiApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgSVBUQy9OQUEgUmVjb3JkLCBpbnRlcnByZXQgaXQgYW5kIG91dHB1dCB0byB0aGUgc2Vjb25kYXJ5IGh0bWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXh0cmFfSUZEX3N0ciAuPSAiPGgzIGNsYXNzPVwiRVhJRl9TZWNvbmRhcnlfSGVhZGluZ1wiPkNvbnRhaW5zIElQVEMvTkFBIEVtYmVkZGVkIGluIEVYSUY8L2gzPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV4dHJhX0lGRF9zdHIgLj1JbnRlcnByZXRfSVBUQ190b19IVE1MKCAkRXhpZl9UYWdbJ0RhdGEnXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlOiBDaGVjayBmb3IgZW1iZWRkZWQgWE1QIGFzIG9mIHZlcnNpb24gMS4xMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBYTVAgUmVjb3JkIHdpdGhpbiB0aGUgRVhJRiBJRkQKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoICRFeGlmX1RhZ1snVHlwZSddID09ICJYTVAiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBYTVAgUmVjb3JkLCBpbnRlcnByZXQgaXQgYW5kIG91dHB1dCB0byB0aGUgc2Vjb25kYXJ5IGh0bWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXh0cmFfSUZEX3N0ciAuPSAiPGgzIGNsYXNzPVwiRVhJRl9TZWNvbmRhcnlfSGVhZGluZ1wiPkNvbnRhaW5zIFhNUCBFbWJlZGRlZCBpbiBFWElGPC9oMz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleHRyYV9JRkRfc3RyIC49IEludGVycHJldF9YTVBfdG9fSFRNTCggJEV4aWZfVGFnWydEYXRhJ10gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZTogQ2hlY2sgZm9yIGVtYmVkZGVkIElSQiBhcyBvZiB2ZXJzaW9uIDEuMTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgUGhvdG9zaG9wIElSQiBSZWNvcmQgd2l0aGluIHRoZSBFWElGIElGRAogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggJEV4aWZfVGFnWydUeXBlJ10gPT0gIklSQiIgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFBob3Rvc2hvcCBJUkIgUmVjb3JkLCBpbnRlcnByZXQgaXQgYW5kIG91dHB1dCB0byB0aGUgc2Vjb25kYXJ5IGh0bWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXh0cmFfSUZEX3N0ciAuPSAiPGgzIGNsYXNzPVwiRVhJRl9TZWNvbmRhcnlfSGVhZGluZ1wiPkNvbnRhaW5zIFBob3Rvc2hvcCBJUkIgRW1iZWRkZWQgaW4gRVhJRjwvaDM+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXh0cmFfSUZEX3N0ciAuPSBJbnRlcnByZXRfSVJCX3RvX0hUTUwoICRFeGlmX1RhZ1snRGF0YSddLCAkZmlsZW5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgaXMgTnVtZXJpYwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggJEV4aWZfVGFnWydUeXBlJ10gPT0gIk51bWVyaWMiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bWVyaWMgVGFnIC0gT3V0cHV0IHRleHQgdmFsdWUgYXMgaXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIkVYSUZfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiRVhJRl9DYXB0aW9uX0NlbGxcIj4iIC4gJEV4aWZfVGFnWydUYWcgTmFtZSddIC4gIjwvdGQ+PHRkIGNsYXNzPVwiRVhJRl9WYWx1ZV9DZWxsXCI+IiAuICRFeGlmX1RhZ1snVGV4dCBWYWx1ZSddIC4gIjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXIgdGFnIC0gT3V0cHV0IHRleHQgYXMgcHJlZm9ybWF0dGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIkVYSUZfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiRVhJRl9DYXB0aW9uX0NlbGxcIj4iIC4gJEV4aWZfVGFnWydUYWcgTmFtZSddIC4gIjwvdGQ+PHRkIGNsYXNzPVwiRVhJRl9WYWx1ZV9DZWxsXCI+PHByZT4iIC4gdHJpbSggJEV4aWZfVGFnWydUZXh0IFZhbHVlJ10pIC4gIjwvcHJlPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhZyBoYXMgTk9UIGJlZW4gZGVjb2RlZCBzdWNjZXNzZnVsbHkKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGVuY2UgaXQgaXMgZWl0aGVyIGFuIHVua25vd24gdGFnLCBvciBvbmUgd2hpY2gKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZXMgcHJvY2Vzc2luZyBhdCB0aGUgdGltZSBvZiBodG1sIGNvbnN0cnVjdGlvbgoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFibGUgY2VsbHMgd29uJ3QgZ2V0IGRyYXduIHdpdGggbm90aGluZyBpbiB0aGVtIC0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgYXQgbGVhc3QgYSBub24gYnJlYWtpbmcgc3BhY2UgZXhpc3RzIGluIHRoZW0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHJpbSgkRXhpZl9UYWdbJ1RleHQgVmFsdWUnXSkgPT0gIiIgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEV4aWZfVGFnWydUZXh0IFZhbHVlJ10gPSAiJm5ic3A7IjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyB0YWcgaXMgdGhlIGZpcnN0IElGRCBUaHVtYm5haWwKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoICRJRkRfYXJyYXlbJ1RhZ3MgTmFtZSddID09ICJUSUZGIiApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAkVGFnX0lEID09IDUxMyApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IElGRCB0aHVtYm5haWwgLSBBZGQgaHRtbCB0byB0aGUgb3V0cHV0CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZTogYXMgb2YgdmVyc2lvbiAxLjExIC0gQ2hhbmdlZCB0byBtYWtlIHRodW1ibmFpbCBsaW5rIHBvcnRhYmxlIGFjcm9zcyBkaXJlY3RvcmllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIHRoZSBwYXRoIG9mIHRoZSB0aHVtYm5haWwgc2NyaXB0IGFuZCBpdHMgZmlsZW5hbWUgcGFyYW1ldGVyIHRvIHB1dCBpbiBhIHVybAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rX3N0ciA9IGdldF9yZWxhdGl2ZV9wYXRoKCBkaXJuYW1lKF9fRklMRV9fKSAuICIvZ2V0X2V4aWZfdGh1bWIucGhwIiAsIGdldGN3ZCAoICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGlua19zdHIgLj0gIj9maWxlbmFtZT0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rX3N0ciAuPSBnZXRfcmVsYXRpdmVfcGF0aCggJGZpbGVuYW1lLCBkaXJuYW1lKF9fRklMRV9fKSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGh1bWJuYWlsIGxpbmsgdG8gaHRtbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJFWElGX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIkVYSUZfQ2FwdGlvbl9DZWxsXCI+IiAuICRFeGlmX1RhZ1snVGFnIE5hbWUnXSAuICI8L3RkPjx0ZCBjbGFzcz1cIkVYSUZfVmFsdWVfQ2VsbFwiPjxhIGNsYXNzPVwiRVhJRl9GaXJzdF9JRkRfVGh1bWJfTGlua1wiIGhyZWY9XCIkbGlua19zdHJcIj48aW1nIGNsYXNzPVwiRVhJRl9GaXJzdF9JRkRfVGh1bWJcIiBzcmM9XCIkbGlua19zdHJcIj48L2E+PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIE1ha2Vybm90ZQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggJEV4aWZfVGFnWydUeXBlJ10gPT0gIk1ha2VyIE5vdGUiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG1ha2Vybm90ZSwgYnV0IGhhcyBub3QgYmVlbiBkZWNvZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgbWVzc2FnZSB0byB0aGUgc2Vjb25kYXJ5IG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleHRyYV9JRkRfc3RyIC49ICI8aDMgY2xhc3M9XCJFWElGX1NlY29uZGFyeV9IZWFkaW5nXCI+TWFrZXJub3RlIENvZGluZyBVbmtub3duPC9oMz5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBVbmtub3duIFRhZwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciB3YW50cyB0byBoaWRlIHVua25vd24gdGFncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdMT0JBTFNbJ0hJREVfVU5LTk9XTl9UQUdTJ10gPT09IEZBTFNFICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2VyIHdhbnRzIHRvIGRpc3BsYXkgdW5rbm93biB0YWdzCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIERhdGEgaXMgYW4gYXNjaWkgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRFeGlmX1RhZ1snRGF0YSBUeXBlJ10gPT0gMiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBBc2NpaSBTdHJpbmcgZmllbGQgLSBhZGQgaXQgcHJlZm9ybWF0dGVkIHRvIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIkVYSUZfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiRVhJRl9DYXB0aW9uX0NlbGxcIj4iIC4gJEV4aWZfVGFnWydUYWcgTmFtZSddIC4gIjwvdGQ+PHRkIGNsYXNzPVwiRVhJRl9WYWx1ZV9DZWxsXCI+PHByZT4iIC4gdHJpbSggJEV4aWZfVGFnWydUZXh0IFZhbHVlJ10gKSAuICI8L3ByZT48L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYW4gQVNDSUkgc3RyaW5nIC0gYWRkIGl0IGFzIGlzIHRvIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIkVYSUZfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiRVhJRl9DYXB0aW9uX0NlbGxcIj4iIC4gJEV4aWZfVGFnWydUYWcgTmFtZSddIC4gIjwvdGQ+PHRkIGNsYXNzPVwiRVhJRl9WYWx1ZV9DZWxsXCI+IiAuIHRyaW0oICRFeGlmX1RhZ1snVGV4dCBWYWx1ZSddICkgLiAiPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIENsb3NlIHRoZSB0YWJsZSBpbiB0aGUgb3V0cHV0CiAgICAgICAgJG91dHB1dF9zdHIgLj0gIjwvdGFibGU+XG4iOwoKICAgICAgICAvLyBBZGQgdGhlIHNlY29uZGFyeSBvdXRwdXQgYXQgdGhlIGVuZCBvZiB0aGUgbWFpbiBvdXRwdXQKICAgICAgICAkb3V0cHV0X3N0ciAuPSAiJGV4dHJhX0lGRF9zdHJcbiI7CgogICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIGh0bWwKICAgICAgICByZXR1cm4gJG91dHB1dF9zdHI7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBpbnRlcnByZXRfSUZECioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgoKCgoKCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBnZXRfSUZEX0RhdGFfVHlwZQoqCiogRGVzY3JpcHRpb246ICBEZWNvZGVzIGFuIElGRCBmaWVsZCB2YWx1ZSBmcm9tIGEgYmluYXJ5IGRhdGEgc3RyaW5nLCB1c2luZwoqICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gc3VwcGxpZWQgYWJvdXQgdGhlIGRhdGEgdHlwZSBhbmQgYnl0ZSBhbGlnbm1lbnQgb2YKKiAgICAgICAgICAgICAgIHRoZSBzdG9yZWQgZGF0YS4KKiAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGFsbCBkYXRhdHlwZXMgZXhjZXB0IEFTQ0lJIHN0cmluZ3MKKgoqIFBhcmFtZXRlcnM6ICAgaW5wdXRfZGF0YSAtIGEgYmluYXJ5IGRhdGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIElGRCB2YWx1ZSwKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIGV4YWN0IGxlbmd0aCBvZiB0aGUgdmFsdWUKKiAgICAgICAgICAgICAgIGRhdGFfdHlwZSAtIGEgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgSUZEIGRhdGF0eXBlIGFzIHBlciB0aGUKKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJRkYgNi4wIHNwZWNpZmljYXRpb246CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IFVuc2lnbmVkIDgtYml0IEJ5dGUKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0gQVNDSUkgU3RyaW5nCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9IFVuc2lnbmVkIDE2LWJpdCBTaG9ydAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgPSBVbnNpZ25lZCAzMi1iaXQgTG9uZwoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgPSBVbnNpZ25lZCAyeDMyLWJpdCBSYXRpb25hbAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgPSBTaWduZWQgOC1iaXQgQnl0ZQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgPSBVbmRlZmluZWQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ID0gU2lnbmVkIDE2LWJpdCBTaG9ydAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkgPSBTaWduZWQgMzItYml0IExvbmcKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCA9IFNpZ25lZCAyeDMyLWJpdCBSYXRpb25hbAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExID0gMzItYml0IEZsb2F0CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgPSA2NC1iaXQgRG91YmxlCiogICAgICAgICAgICAgICBCeXRlX0FsaWduIC0gSW5kaWNhdGVzIHRoZSBieXRlIGFsaWdubWVudCBvZiB0aGUgZGF0YS4KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTSA9IE1vdG9yb2xhLCBNU0IgZmlyc3QsIEJpZyBFbmRpYW4KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJSSA9IEludGVsLCBMU0IgZmlyc3QsIExpdHRsZSBFbmRpYW4KKgoqIFJldHVybnM6ICAgICAgb3V0cHV0IC0gdGhlIHZhbHVlIG9mIHRoZSBkYXRhIChzdHJpbmcgb3IgbnVtZXJpYykKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBnZXRfSUZEX0RhdGFfVHlwZSggJGlucHV0X2RhdGEsICRkYXRhX3R5cGUsICRCeXRlX0FsaWduICkKewogICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBVbnNpZ25lZCBCeXRlLCBVbnNpZ25lZCBTaG9ydCBvciBVbnNpZ25lZCBMb25nCiAgICAgICAgaWYgKCggJGRhdGFfdHlwZSA9PSAxICkgfHwgKCAkZGF0YV90eXBlID09IDMgKSB8fCAoICRkYXRhX3R5cGUgPT0gNCApKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBVbnNpZ25lZCBCeXRlLCBVbnNpZ25lZCBTaG9ydCBvciBVbnNpZ25lZCBMb25nCgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGJ5dGUgYWxpZ25tZW50IHRvIHNlZSBpZiB0aGUgYnl0ZXMgbmVlZCB0cCBiZSByZXZlcnNlZAogICAgICAgICAgICAgICAgaWYgKCAkQnl0ZV9BbGlnbiA9PSAiSUkiICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBpbiBJbnRlbCBmb3JtYXQsIHJldmVyc2UgaXQKICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0X2RhdGEgPSBzdHJyZXYgKCAkaW5wdXRfZGF0YSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgdG8gYSBudW1iZXIgYW5kIHJldHVybiBpdAogICAgICAgICAgICAgICAgcmV0dXJuIGhleGRlYyggYmluMmhleCggJGlucHV0X2RhdGEgKSApOwogICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBBU0NJSSBzdHJpbmcgdHlwZQogICAgICAgIGVsc2VpZiAoICRkYXRhX3R5cGUgPT0gMiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gTnVsbCB0ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyhzKQogICAgICAgICAgICAgICAgLy8gVGhlIGlucHV0IGRhdGEgbWF5IHJlcHJlc2VudCBtdWx0aXBsZSBzdHJpbmdzLCBhcyB0aGUKICAgICAgICAgICAgICAgIC8vICdjb3VudCcgZmllbGQgcmVwcmVzZW50cyB0aGUgdG90YWwgYnl0ZXMsIG5vdCB0aGUgbnVtYmVyIG9mIHN0cmluZ3MKICAgICAgICAgICAgICAgIC8vIEhlbmNlIHRoaXMgc2hvdWxkIG5vdCBiZSBwcm9jZXNzZWQgaGVyZSwgYXMgaXQgd291bGQgaGF2ZQogICAgICAgICAgICAgICAgLy8gdG8gcmV0dXJuIG11bHRpcGxlIHZhbHVlcyBpbnN0ZWFkIG9mIGEgc2luZ2xlIHZhbHVlCgogICAgICAgICAgICAgICAgZWNobyAiPHA+RXJyb3IgLSBBU0NJSSBTdHJpbmdzIHNob3VsZCBub3QgYmUgcHJvY2Vzc2VkIGluIGdldF9JRkRfRGF0YV9UeXBlPC9wPlxuIjsKICAgICAgICAgICAgICAgIHJldHVybiAiRXJyb3IgU2hvdWxkIG5ldmVyIGdldCBoZXJlIjsgLy9leHBsb2RlKCAiXHgwMCIsICRpbnB1dF9kYXRhICk7CiAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIFVuc2lnbmVkIHJhdGlvbmFsIHR5cGUKICAgICAgICBlbHNlaWYgKCAkZGF0YV90eXBlID09IDUgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBVbnNpZ25lZCByYXRpb25hbCB0eXBlCgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGJ5dGUgYWxpZ25tZW50IHRvIHNlZSBpZiB0aGUgYnl0ZXMgbmVlZCB0byBiZSByZXZlcnNlZAogICAgICAgICAgICAgICAgaWYgKCAkQnl0ZV9BbGlnbiA9PSAiTU0iICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW90b3JvbGEgTVNCIGZpcnN0IGJ5dGUgYWxpZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5wYWNrIHRoZSBOdW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGFuZCByZXR1cm4gdGhlbQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5wYWNrKCAnTk51bWVyYXRvci9ORGVub21pbmF0b3InLCAkaW5wdXRfZGF0YSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlbCBMU0IgZmlyc3QgYnl0ZSBhbGlnbWVudAogICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnBhY2sgdGhlIE51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgYW5kIHJldHVybiB0aGVtCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bnBhY2soICdWTnVtZXJhdG9yL1ZEZW5vbWluYXRvcicsICRpbnB1dF9kYXRhICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIFNpZ25lZCBCeXRlLCBTaWduZWQgU2hvcnQgb3IgU2lnbmVkIExvbmcKICAgICAgICBlbHNlaWYgKCAoICRkYXRhX3R5cGUgPT0gNiApIHx8ICggJGRhdGFfdHlwZSA9PSA4ICkgfHwgKCAkZGF0YV90eXBlID09IDkgKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFNpZ25lZCBCeXRlLCBTaWduZWQgU2hvcnQgb3IgU2lnbmVkIExvbmcKCiAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGUgYnl0ZSBhbGlnbm1lbnQgdG8gc2VlIGlmIHRoZSBieXRlcyBuZWVkIHRvIGJlIHJldmVyc2VkCiAgICAgICAgICAgICAgICBpZiAoICRCeXRlX0FsaWduID09ICJJSSIgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ludGVsIGZvcm1hdCwgcmV2ZXJzZSB0aGUgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0X2RhdGEgPSBzdHJyZXYgKCAkaW5wdXRfZGF0YSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgdG8gYW4gVW5zaWduZWQgbnVtYmVyCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBoZXhkZWMoIGJpbjJoZXgoICRpbnB1dF9kYXRhICkgKTsKCiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIHNpZ25lZCBudW1iZXIKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBhIEJ5dGUgYWJvdmUgMTI4IChpLmUuIGEgbmVnYXRpdmUgbnVtYmVyKQogICAgICAgICAgICAgICAgaWYgKCAoICRkYXRhX3R5cGUgPT0gNiApICYmICggJHZhbHVlID4gMTI4ICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgc2hvdWxkIGJlIG5lZ2F0aXZlIC0gbWFrZSBpdCBuZWdhdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gICR2YWx1ZSAtIDI1NjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBhIFNob3J0IGFib3ZlIDMyNzY3IChpLmUuIGEgbmVnYXRpdmUgbnVtYmVyKQogICAgICAgICAgICAgICAgaWYgKCAoICRkYXRhX3R5cGUgPT0gOCApICYmICggJHZhbHVlID4gMzI3NjcgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciBzaG91bGQgYmUgbmVnYXRpdmUgLSBtYWtlIGl0IG5lZ2F0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgJHZhbHVlIC0gNjU1MzY7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgYSBMb25nIGFib3ZlIDIxNDc0ODM2NDggKGkuZS4gYSBuZWdhdGl2ZSBudW1iZXIpCiAgICAgICAgICAgICAgICBpZiAoICggJGRhdGFfdHlwZSA9PSA5ICkgJiYgKCAkdmFsdWUgPiAyMTQ3NDgzNjQ4ICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgc2hvdWxkIGJlIG5lZ2F0aXZlIC0gbWFrZSBpdCBuZWdhdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gICR2YWx1ZSAtIDQyOTQ5NjcyOTY7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBzaWduZWQgbnVtYmVyCiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgVW5kZWZpbmVkIHR5cGUKICAgICAgICBlbHNlaWYgKCAkZGF0YV90eXBlID09IDcgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEN1c3RvbSBEYXRhIC0gRG8gbm90aGluZwogICAgICAgICAgICAgICAgcmV0dXJuICRpbnB1dF9kYXRhOwogICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBTaWduZWQgUmF0aW9uYWwgdHlwZQogICAgICAgIGVsc2VpZiAoICRkYXRhX3R5cGUgPT0gMTAgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBTaWduZWQgUmF0aW9uYWwgdHlwZQoKICAgICAgICAgICAgICAgIC8vIFNpZ25lZCBMb25nIG5vdCBhdmFpbGFibGUgd2l0aCBlbmRpYW4gaW4gdW5wYWNrICwgdXNlIHVuc2lnbmVkIGFuZCBjb252ZXJ0CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGJ5dGUgYWxpZ25tZW50IHRvIHNlZSBpZiB0aGUgYnl0ZXMgbmVlZCB0byBiZSByZXZlcnNlZAogICAgICAgICAgICAgICAgaWYgKCAkQnl0ZV9BbGlnbiA9PSAiTU0iICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW90b3JvbGEgTVNCIGZpcnN0IGJ5dGUgYWxpZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5wYWNrIHRoZSBOdW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9IHVucGFjayggJ05OdW1lcmF0b3IvTkRlbm9taW5hdG9yJywgJGlucHV0X2RhdGEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWwgTFNCIGZpcnN0IGJ5dGUgYWxpZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5wYWNrIHRoZSBOdW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9IHVucGFjayggJ1ZOdW1lcmF0b3IvVkRlbm9taW5hdG9yJywgJGlucHV0X2RhdGEgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBudW1lcmF0b3IgdG8gYSBzaWduZWQgbnVtYmVyCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBhYm92ZSAyMTQ3NDgzNjQ4IChpLmUuIGEgbmVnYXRpdmUgbnVtYmVyKQogICAgICAgICAgICAgICAgaWYgKCAkdmFsdWVbJ051bWVyYXRvciddID4gMjE0NzQ4MzY0OCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciBpcyBuZWdhdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWVbJ051bWVyYXRvciddIC09IDQyOTQ5NjcyOTY7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgZGVub21pbmF0b3IgdG8gYSBzaWduZWQgbnVtYmVyCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBhYm92ZSAyMTQ3NDgzNjQ4IChpLmUuIGEgbmVnYXRpdmUgbnVtYmVyKQogICAgICAgICAgICAgICAgaWYgKCAkdmFsdWVbJ0Rlbm9taW5hdG9yJ10gPiAyMTQ3NDgzNjQ4ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbnVtYmVyIGlzIG5lZ2F0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICR2YWx1ZVsnRGVub21pbmF0b3InXSAtPSA0Mjk0OTY3Mjk2OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgU2lnbmVkIFJhdGlvbmFsIHZhbHVlCiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBGbG9hdCB0eXBlCiAgICAgICAgZWxzZWlmICggJGRhdGFfdHlwZSA9PSAxMSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gSUVFRSA3NTQgRmxvYXQKICAgICAgICAgICAgICAgIC8vIFRPRE8gLSBFWElGIC0gSUZEIGRhdGF0eXBlIEZsb2F0IG5vdCBpbXBsZW1lbnRlZCB5ZXQKICAgICAgICAgICAgICAgIHJldHVybiAiRkxPQVQgTk9UIElNUExFTUVOVEVEIFlFVCI7CiAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIERvdWJsZSB0eXBlCiAgICAgICAgZWxzZWlmICggJGRhdGFfdHlwZSA9PSAxMiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gSUVFRSA3NTQgRG91YmxlCiAgICAgICAgICAgICAgICAvLyBUT0RPIC0gRVhJRiAtIElGRCBkYXRhdHlwZSBEb3VibGUgbm90IGltcGxlbWVudGVkIHlldAogICAgICAgICAgICAgICAgcmV0dXJuICJET1VCTEUgTk9UIElNUExFTUVOVEVEIFlFVCI7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBFcnJvciAtIEludmFsaWQgRGF0YXR5cGUKICAgICAgICAgICAgICAgIHJldHVybiAiSW52YWxpZCBEYXRhdHlwZSAkZGF0YV90eXBlIjsKCiAgICAgICAgfQoKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIGdldF9JRkRfRGF0YV9UeXBlCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBwdXRfSUZEX0RhdGFfVHlwZQoqCiogRGVzY3JpcHRpb246ICBFbmNvZGVzIGFuIElGRCBmaWVsZCBmcm9tIGEgdmFsdWUgdG8gYSBiaW5hcnkgZGF0YSBzdHJpbmcsIHVzaW5nCiogICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBzdXBwbGllZCBhYm91dCB0aGUgZGF0YSB0eXBlIGFuZCBieXRlIGFsaWdubWVudCBvZgoqICAgICAgICAgICAgICAgdGhlIHN0b3JlZCBkYXRhLgoqCiogUGFyYW1ldGVyczogICBpbnB1dF9kYXRhIC0gYW4gSUZEIGRhdGEgdmFsdWUsIG51bWVyaWMgb3Igc3RyaW5nCiogICAgICAgICAgICAgICBkYXRhX3R5cGUgLSBhIG51bWJlciByZXByZXNlbnRpbmcgdGhlIElGRCBkYXRhdHlwZSBhcyBwZXIgdGhlCiogICAgICAgICAgICAgICAgICAgICAgICAgICBUSUZGIDYuMCBzcGVjaWZpY2F0aW9uOgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBVbnNpZ25lZCA4LWJpdCBCeXRlCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9IEFTQ0lJIFN0cmluZwoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgPSBVbnNpZ25lZCAxNi1iaXQgU2hvcnQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ID0gVW5zaWduZWQgMzItYml0IExvbmcKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ID0gVW5zaWduZWQgMngzMi1iaXQgUmF0aW9uYWwKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ID0gU2lnbmVkIDgtYml0IEJ5dGUKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ID0gVW5kZWZpbmVkCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCA9IFNpZ25lZCAxNi1iaXQgU2hvcnQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5ID0gU2lnbmVkIDMyLWJpdCBMb25nCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgPSBTaWduZWQgMngzMi1iaXQgUmF0aW9uYWwKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMSA9IDMyLWJpdCBGbG9hdAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyID0gNjQtYml0IERvdWJsZQoqICAgICAgICAgICAgICAgQnl0ZV9BbGlnbiAtIEluZGljYXRlcyB0aGUgYnl0ZSBhbGlnbm1lbnQgb2YgdGhlIGRhdGEuCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgTU0gPSBNb3Rvcm9sYSwgTVNCIGZpcnN0LCBCaWcgRW5kaWFuCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgSUkgPSBJbnRlbCwgTFNCIGZpcnN0LCBMaXR0bGUgRW5kaWFuCioKKiBSZXR1cm5zOiAgICAgIG91dHB1dCAtIHRoZSBwYWNrZWQgYmluYXJ5IHN0cmluZyBvZiB0aGUgZGF0YQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHB1dF9JRkRfRGF0YV9UeXBlKCAkaW5wdXRfZGF0YSwgJGRhdGFfdHlwZSwgJEJ5dGVfQWxpZ24gKQp7CiAgICAgICAgLy8gUHJvY2VzcyBhY2NvcmRpbmcgdG8gdGhlIGRhdGF0eXBlCiAgICAgICAgc3dpdGNoICggJGRhdGFfdHlwZSApCiAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBVbnNpZ25lZCBCeXRlIC0gcmV0dXJuIGNoYXJhY3RlciBhcyBpcwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hyKCRpbnB1dF9kYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBBU0NJSSBTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBzdHJpbmcgd2l0aCB0ZXJtaW5hdGluZyBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkaW5wdXRfZGF0YSAuICJceDAwIjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAzOiAvLyBVbnNpZ25lZCBTaG9ydAogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBieXRlIGFsaWdubWVudAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRCeXRlX0FsaWduID09ICJJSSIgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWwvTGl0dGxlIEVuZGlhbiAtIHBhY2sgdGhlIHNob3J0IGFuZCByZXR1cm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFjayggInYiLCAkaW5wdXRfZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdG9yb2xhL0JpZyBFbmRpYW4gLSBwYWNrIHRoZSBzaG9ydCBhbmQgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhY2soICJuIiwgJGlucHV0X2RhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDQ6IC8vIFVuc2lnbmVkIExvbmcKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYnl0ZSBhbGlnbm1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQnl0ZV9BbGlnbiA9PSAiSUkiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVsL0xpdHRsZSBFbmRpYW4gLSBwYWNrIHRoZSBsb25nIGFuZCByZXR1cm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFjayggIlYiLCAkaW5wdXRfZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdG9yb2xhL0JpZyBFbmRpYW4gLSBwYWNrIHRoZSBsb25nIGFuZCByZXR1cm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFjayggIk4iLCAkaW5wdXRfZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgNTogLy8gVW5zaWduZWQgUmF0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYnl0ZSBhbGlnbm1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQnl0ZV9BbGlnbiA9PSAiSUkiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVsL0xpdHRsZSBFbmRpYW4gLSBwYWNrIHRoZSB0d28gbG9uZ3MgYW5kIHJldHVybgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrKCAiVlYiLCAkaW5wdXRfZGF0YVsnTnVtZXJhdG9yJ10sICRpbnB1dF9kYXRhWydEZW5vbWluYXRvciddICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW90b3JvbGEvQmlnIEVuZGlhbiAtIHBhY2sgdGhlIHR3byBsb25ncyBhbmQgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhY2soICJOTiIsICRpbnB1dF9kYXRhWydOdW1lcmF0b3InXSwgJGlucHV0X2RhdGFbJ0Rlbm9taW5hdG9yJ10gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDY6IC8vIFNpZ25lZCBCeXRlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIG51bWJlciBpcyBuZWdhdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRpbnB1dF9kYXRhIDwgMCApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgaXMgbmVnYXRpdmUgLSByZXR1cm4gc2lnbmVkIGNoYXJhY3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHIoICRpbnB1dF9kYXRhICsgMjU2ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIGlzIHBvc2l0aXZlIC0gcmV0dXJuIGNoYXJhY3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHIoICRpbnB1dF9kYXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSA3OiAvLyBVbmtub3duIC0gcmV0dXJuIGFzIGlzCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkaW5wdXRfZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSA4OiAvLyBTaWduZWQgU2hvcnQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbnVtYmVyIGlzIG5lZ2F0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggICRpbnB1dF9kYXRhIDwgMCApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgaXMgbmVnYXRpdmUgLSBtYWtlIHNpZ25lZCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dF9kYXRhID0gJGlucHV0X2RhdGEgKyA2NTUzNjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBieXRlIGFsaWdubWVudAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRCeXRlX0FsaWduID09ICJJSSIgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWwvTGl0dGxlIEVuZGlhbiAtIHBhY2sgdGhlIHNob3J0IGFuZCByZXR1cm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFjayggInYiLCAkaW5wdXRfZGF0YSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdG9yb2xhL0JpZyBFbmRpYW4gLSBwYWNrIHRoZSBzaG9ydCBhbmQgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhY2soICJuIiwgJGlucHV0X2RhdGEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIFNpZ25lZCBMb25nCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIG51bWJlciBpcyBuZWdhdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAkaW5wdXRfZGF0YSA8IDAgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIGlzIG5lZ2F0aXZlIC0gbWFrZSBzaWduZWQgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXRfZGF0YSA9ICRpbnB1dF9kYXRhICsgNDI5NDk2NzI5NjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBieXRlIGFsaWdubWVudAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRCeXRlX0FsaWduID09ICJJSSIgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWwvTGl0dGxlIEVuZGlhbiAtIHBhY2sgdGhlIGxvbmcgYW5kIHJldHVybgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrKCAidiIsICRpbnB1dF9kYXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW90b3JvbGEvQmlnIEVuZGlhbiAtIHBhY2sgdGhlIGxvbmcgYW5kIHJldHVybgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrKCAibiIsICRpbnB1dF9kYXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gU2lnbmVkIFJhdGlvbmFsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIG51bWVyYXRvciBpcyBuZWdhdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAkaW5wdXRfZGF0YVsnTnVtZXJhdG9yJ10gPCAwICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBpcyBudW1lcmF0b3IgLSBtYWtlIHNpZ25lZCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dF9kYXRhWydOdW1lcmF0b3InXSA9ICRpbnB1dF9kYXRhWydOdW1lcmF0b3InXSArIDQyOTQ5NjcyOTY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVub21pbmF0b3IgaXMgbmVnYXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAgJGlucHV0X2RhdGFbJ0Rlbm9taW5hdG9yJ10gPCAwICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBpcyBkZW5vbWluYXRvciAtIG1ha2Ugc2lnbmVkIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0X2RhdGFbJ0Rlbm9taW5hdG9yJ10gPSAkaW5wdXRfZGF0YVsnRGVub21pbmF0b3InXSArIDQyOTQ5NjcyOTY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYnl0ZSBhbGlnbm1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQnl0ZV9BbGlnbiA9PSAiSUkiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVsL0xpdHRsZSBFbmRpYW4gLSBwYWNrIHRoZSB0d28gbG9uZ3MgYW5kIHJldHVybgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrKCAiVlYiLCAkaW5wdXRfZGF0YVsnTnVtZXJhdG9yJ10sICRpbnB1dF9kYXRhWydEZW5vbWluYXRvciddICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW90b3JvbGEvQmlnIEVuZGlhbiAtIHBhY2sgdGhlIHR3byBsb25ncyBhbmQgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhY2soICJOTiIsICRpbnB1dF9kYXRhWydOdW1lcmF0b3InXSwgJGlucHV0X2RhdGFbJ0Rlbm9taW5hdG9yJ10gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDExOiAvLyBGbG9hdAogICAgICAgICAgICAgICAgICAgICAgICAvLyBJRUVFIDc1NCBGbG9hdAogICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIC0gRVhJRiAtIElGRCBkYXRhdHlwZSBGbG9hdCBub3QgaW1wbGVtZW50ZWQgeWV0CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiRkxPQVQgTk9UIElNUExFTUVOVEVEIFlFVCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMTI6IC8vIERvdWJsZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBJRUVFIDc1NCBEb3VibGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyAtIEVYSUYgLSBJRkQgZGF0YXR5cGUgRG91YmxlIG5vdCBpbXBsZW1lbnRlZCB5ZXQKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJET1VCTEUgTk9UIElNUExFTUVOVEVEIFlFVCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVycm9yIC0gSW52YWxpZCBEYXRhdHlwZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkludmFsaWQgRGF0YXR5cGUgJGRhdGFfdHlwZSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICB9CgogICAgICAgIC8vIFNob3VsZG4ndCBnZXQgaGVyZQogICAgICAgIHJldHVybiBGQUxTRTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIHB1dF9JRkRfRGF0YV9UeXBlCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIGdldF9JRkRfdmFsdWVfYXNfdGV4dAoqCiogRGVzY3JpcHRpb246ICBEZWNvZGVzIGFuIElGRCBmaWVsZCB2YWx1ZSBmcm9tIGEgYmluYXJ5IGRhdGEgc3RyaW5nLCB1c2luZwoqICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gc3VwcGxpZWQgYWJvdXQgdGhlIGRhdGEgdHlwZSBhbmQgYnl0ZSBhbGlnbm1lbnQgb2YKKiAgICAgICAgICAgICAgIHRoZSBzdG9yZWQgZGF0YS4KKiAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGFsbCBkYXRhdHlwZXMgZXhjZXB0IEFTQ0lJIHN0cmluZ3MKKgoqIFBhcmFtZXRlcnM6ICAgaW5wdXRfZGF0YSAtIGEgYmluYXJ5IGRhdGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIElGRCB2YWx1ZSwKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIGV4YWN0IGxlbmd0aCBvZiB0aGUgdmFsdWUKKiAgICAgICAgICAgICAgIGRhdGFfdHlwZSAtIGEgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgSUZEIGRhdGF0eXBlIGFzIHBlciB0aGUKKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJRkYgNi4wIHNwZWNpZmljYXRpb246CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IFVuc2lnbmVkIDgtYml0IEJ5dGUKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0gQVNDSUkgU3RyaW5nCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9IFVuc2lnbmVkIDE2LWJpdCBTaG9ydAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgPSBVbnNpZ25lZCAzMi1iaXQgTG9uZwoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgPSBVbnNpZ25lZCAyeDMyLWJpdCBSYXRpb25hbAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgPSBTaWduZWQgOC1iaXQgQnl0ZQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgPSBVbmRlZmluZWQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ID0gU2lnbmVkIDE2LWJpdCBTaG9ydAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkgPSBTaWduZWQgMzItYml0IExvbmcKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCA9IFNpZ25lZCAyeDMyLWJpdCBSYXRpb25hbAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExID0gMzItYml0IEZsb2F0CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgPSA2NC1iaXQgRG91YmxlCiogICAgICAgICAgICAgICBCeXRlX0FsaWduIC0gSW5kaWNhdGVzIHRoZSBieXRlIGFsaWdubWVudCBvZiB0aGUgZGF0YS4KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTSA9IE1vdG9yb2xhLCBNU0IgZmlyc3QsIEJpZyBFbmRpYW4KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJSSA9IEludGVsLCBMU0IgZmlyc3QsIExpdHRsZSBFbmRpYW4KKgoqIFJldHVybnM6ICAgICAgb3V0cHV0IC0gdGhlIHZhbHVlIG9mIHRoZSBkYXRhIChzdHJpbmcgb3IgbnVtZXJpYykKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBnZXRfSUZEX3ZhbHVlX2FzX3RleHQoICRFeGlmX1RhZyApCnsKICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgdG8gcmVjZWl2ZSB0aGUgb3V0cHV0IHRleHQKICAgICAgICAkb3V0cHV0X3N0ciA9ICIiOwoKICAgICAgICAvLyBTZWxlY3QgUHJvY2Vzc2luZyBtZXRob2QgYWNjb3JkaW5nIHRvIHRoZSBkYXRhdHlwZQogICAgICAgIHN3aXRjaCAgKCRFeGlmX1RhZ1snRGF0YSBUeXBlJ10pCiAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSAxIDogLy8gVW5zaWduZWQgQnl0ZQogICAgICAgICAgICAgICAgY2FzZSAzIDogLy8gVW5zaWduZWQgU2hvcnQKICAgICAgICAgICAgICAgIGNhc2UgNCA6IC8vIFVuc2lnbmVkIExvbmcKICAgICAgICAgICAgICAgIGNhc2UgNiA6IC8vIFNpZ25lZCBCeXRlCiAgICAgICAgICAgICAgICBjYXNlIDggOiAvLyBTaWduZWQgU2hvcnQKICAgICAgICAgICAgICAgIGNhc2UgOSA6IC8vIFNpZ25lZCBMb25nCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggb2YgdGhlIHZhbHVlcyBmb3IgdGhpcyB0YWcKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoICRFeGlmX1RhZ1snRGF0YSddIGFzICR2YWwgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGlzIGlzbid0IHRoZSBmaXJzdCB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRvdXRwdXRfc3RyICE9ICIiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzbid0IHRoZSBmaXJzdCB2YWx1ZSwgQWRkIGEgQ29tbWEgYW5kIE5ld2xpbmUgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIixcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgVmFsdWUgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICR2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAyIDogLy8gQVNDSUkKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIGFsbCB0aGUgc3RyaW5ncyB0b2dldGhlciwgc2VwYXJhdGVkIGJ5IE5ld2xpbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49IGltcGxvZGUgKCAiXG4iLCAkRXhpZl9UYWdbJ0RhdGEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgNSA6IC8vIFVuc2lnbmVkIFJhdGlvbmFsCiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBTaWduZWQgUmF0aW9uYWwKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBvZiB0aGUgdmFsdWVzIGZvciB0aGlzIHRhZwogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICggJEV4aWZfVGFnWydEYXRhJ10gYXMgJHZhbCApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoaXMgaXNuJ3QgdGhlIGZpcnN0IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJG91dHB1dF9zdHIgIT0gIiIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXNuJ3QgdGhlIGZpcnN0IHZhbHVlLCBBZGQgYSBDb21tYSBhbmQgTmV3bGluZSB0byB0aGUgb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiLFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgRnVsbCBWYWx1ZSB0byB0aGUgb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gJHZhbFsnTnVtZXJhdG9yJ10gLiIvIiAuICR2YWxbJ0Rlbm9taW5hdG9yJ107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGRpdmlzaW9uIGJ5IHplcm8gbWlnaHQgYmUgYSBwcm9ibGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkdmFsWydEZW5vbWluYXRvciddICE9IDAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbm9taW5hdG9yIGlzIG5vdCB6ZXJvLCBBZGQgdGhlIERlY2ltYWwgVmFsdWUgdG8gdGhlIG91dHB1dCB0ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiICgiIC4gKCR2YWxbJ051bWVyYXRvciddIC8gJHZhbFsnRGVub21pbmF0b3InXSkgLiAiKSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMTE6IC8vIEZsb2F0CiAgICAgICAgICAgICAgICBjYXNlIDEyOiAvLyBEb3VibGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyAtIEVYSUYgLSBJRkQgZGF0YXR5cGUgRG91YmxlIGFuZCBGbG9hdCBub3QgaW1wbGVtZW50ZWQgeWV0CiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJGbG9hdCBhbmQgRG91YmxlIG5vdCBpbXBsZW1lbnRlZCB5ZXQiOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDcgOiAvLyBVbmRlZmluZWQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIHRoZSBVc2VyIGhhcyBhc2tlZCB0byBzZWUgdGhlIHJhdyBiaW5hcnkgZGF0YSwgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvLyB0eXBlIHNob3VsZCBub3QgYmUgZGlzcGxheWVkCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIHRvIHNlZSB0aGUgYmluYXJ5IGRhdGEgaW4gaGV4CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdMT0JBTFNbJ1NIT1dfQklOQVJZX0RBVEFfSEVYJ10gPT0gVFJVRSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZXIgaGFzIHJlcXVlc3RlZCB0byBzZWUgdGhlIGJpbmFyeSBkYXRhIGluIGhleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgaW4gaGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIiggIiAuIHN0cmxlbiggJEV4aWZfVGFnWydEYXRhJ10gKSAuICIgYnl0ZXMgb2YgYmluYXJ5IGRhdGEgKTogIiAuIGJpbjJoZXgoICRFeGlmX1RhZ1snRGF0YSddICkgIDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdG8gc2VlIHRoZSBiaW5hcnkgZGF0YSBhcyBpcwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggJEdMT0JBTFNbJ1NIT1dfQklOQVJZX0RBVEFfVEVYVCddID09IFRSVUUpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2VyIGhhcyByZXF1ZXN0ZWQgdG8gc2VlIHRoZSBiaW5hcnkgZGF0YSBhcyBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgYXMgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiKCAiIC4gc3RybGVuKCAkRXhpZl9UYWdbJ0RhdGEnXSApIC4gIiBieXRlcyBvZiBiaW5hcnkgZGF0YSApOiAiIC4gJEV4aWZfVGFnWydEYXRhJ10gIDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2VyIGhhcyBOT1QgcmVxdWVzdGVkIHRvIHNlZSBiaW5hcnkgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSBtZXNzYWdlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBieXRlcyB0byB0aGUgb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIiggIiAuIHN0cmxlbiggJEV4aWZfVGFnWydEYXRhJ10gKSAuICIgYnl0ZXMgb2YgYmluYXJ5IGRhdGEgKSAiICA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgZGVmYXVsdCA6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVycm9yIC0gVW5rbm93biBJRkQgZGF0YXR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkVycm9yIC0gRXhpZiB0YWcgZGF0YSB0eXBlICgiIC4gJEV4aWZfVGFnWydEYXRhIFR5cGUnXSAuIikgaXMgaW52YWxpZCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgdGV4dCBzdHJpbmcKICAgICAgICByZXR1cm4gJG91dHB1dF9zdHI7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBnZXRfSUZEX3ZhbHVlX2FzX3RleHQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEdsb2JhbCBWYXJpYWJsZTogICAgICBJRkRfRGF0YV9TaXplcwoqCiogQ29udGVudHM6ICAgICBUaGUgc2l6ZXMgKGluIGJ5dGVzKSBvZiBlYWNoIEVYSUYgSUZEIERhdGF0eXBlLCBpbmRleGVkIGJ5CiogICAgICAgICAgICAgICB0aGVpciBkYXRhdHlwZSBudW1iZXIKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgokR0xPQkFMU1snSUZEX0RhdGFfU2l6ZXMnXSA9IGFycmF5KCAgICAgMSA9PiAxLCAgICAgICAgIC8vIFVuc2lnbmVkIEJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPT4gMSwgICAgICAgICAvLyBBU0NJSSBTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgPT4gMiwgICAgICAgICAvLyBVbnNpZ25lZCBTaG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA9PiA0LCAgICAgICAgIC8vIFVuc2lnbmVkIExvbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgPT4gOCwgICAgICAgICAvLyBVbnNpZ25lZCBSYXRpb25hbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiA9PiAxLCAgICAgICAgIC8vIFNpZ25lZCBCeXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ID0+IDEsICAgICAgICAgLy8gVW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ID0+IDIsICAgICAgICAgLy8gU2lnbmVkIFNob3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5ID0+IDQsICAgICAgICAgLy8gU2lnbmVkIExvbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwID0+IDgsICAgICAgICAvLyBTaWduZWQgUmF0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExID0+IDQsICAgICAgICAvLyBGbG9hdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgPT4gOCApOyAgICAgIC8vIERvdWJsZQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBHbG9iYWwgVmFyaWFibGU6ICAgICBJRkRfRGF0YV9TaXplcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCj8+');
expand_3537250845($outputDir, 'includes/toolkit/EXIF_Tags.php', 'PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZpbGVuYW1lOiAgICAgRVhJRl9UYWdzLnBocAoqCiogRGVzY3JpcHRpb246ICBQcm92aWRlcyBkZWZpbml0aW9ucyBvZiB0aGUgdGFncyBmb3IgVElGRiwgRVhJRiwgSW50ZXJvcGVyYWJpbGl0eSwKKiAgICAgICAgICAgICAgIEdQUywgTWV0YSwgS29kYWsgU3BlY2lhbCBFZmZlY3RzIGFuZCBLb2RhayBCb3JkZXJzIElGRCdzLgoqCiogQXV0aG9yOiAgICAgICBFdmFuIEh1bnRlcgoqCiogRGF0ZTogICAgICAgICAxLzgvMjAwNAoqCiogUHJvamVjdDogICAgICBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0CioKKiBSZXZpc2lvbjogICAgIDEuMTEKKgoqIENoYW5nZXM6ICAgICAgMS4wMCAtPiAxLjExIDogQWRkZWQgVElGRiBjb21wcmVzc2lvbiB0eXBlcyBaSVAsIExaVyBhbmQgSlBFRwoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZW1iZWRkZWQgWE1QIHRhZwoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZW1iZWRkZWQgUGhvdG9zaG9wIElSQiB0YWcKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIEdQUyB0YWdzIGFmdGVyIHRlc3RpbmcKKgoqIFVSTDogICAgICAgICAgaHR0cDovL2VsZWN0cm9uaWNzLm96aGlrZXIuY29tCioKKiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCBFdmFuIEh1bnRlciAyMDA0CioKKiBMaWNlbnNlOiAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0LgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuCiogICAgICAgICAgICAgICByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiogICAgICAgICAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKiAgICAgICAgICAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCiogICAgICAgICAgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZQoqICAgICAgICAgICAgICAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0CiogICAgICAgICAgICAgICBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiogICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiogICAgICAgICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgoqCiogICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKiAgICAgICAgICAgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdDsgaWYgbm90LAoqICAgICAgICAgICAgICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCiogICAgICAgICAgICAgICBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKgoqICAgICAgICAgICAgICAgSWYgeW91IHJlcXVpcmUgYSBkaWZmZXJlbnQgbGljZW5zZSBmb3IgY29tbWVyY2lhbCBvciBvdGhlcgoqICAgICAgICAgICAgICAgcHVycG9zZXMsIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6IGV2YW5Ab3poaWtlci5jb20KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBHbG9iYWwgVmFyaWFibGU6ICAgICAgSUZEX1RhZ19EZWZpbml0aW9ucwoqCiogQ29udGVudHM6ICAgICBUaGlzIGFycmF5IGRlZmluZXMgdGhlIGZpZWxkcyBmb3IgdGhlIFRJRkYsIEVYSUYsIEludGVyb3BlcmFiaWxpdHksCiogICAgICAgICAgICAgICBHUFMsIE1ldGEsIEtvZGFrIFNwZWNpYWwgRWZmZWN0cyBhbmQgS29kYWsgQm9yZGVycyBJRkQncy4KKiAgICAgICAgICAgICAgIEl0IGlzIGluZGV4ZWQgYnkgdGhlIElGRCBUeXBlLCB0aGVuIHRoZSBUYWcgbnVtYmVyCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKJEdMT0JBTFNbICJJRkRfVGFnX0RlZmluaXRpb25zIiBdID0gYXJyYXkoCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qIFRJRkYgVGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKIlRJRkYiID0+IGFycmF5KAoKCjI1NiA9PiBhcnJheSggICAnTmFtZScgID0+ICJJbWFnZSBXaWR0aCIsCiAgICAgICAgICAgICAgICAnRGVzY3JpcHRpb24nID0+ICJXaWR0aCBvZiBpbWFnZSBpbiBwaXhlbHMgKG51bWJlciBvZiBjb2x1bW5zKSIsCiAgICAgICAgICAgICAgICAnVHlwZScgID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gInBpeGVscyIgKSwKCjI1NyA9PiBhcnJheSggICAnTmFtZScgID0+ICAiSW1hZ2UgTGVuZ3RoIiwKICAgICAgICAgICAgICAgICdEZXNjcmlwdGlvbicgPT4gIkhlaWdodCBvZiBpbWFnZSBpbiBwaXhlbHMgKG51bWJlciBvZiByb3dzKSIsCiAgICAgICAgICAgICAgICAnVHlwZScgID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gInBpeGVscyIgKSwKCjI1OCA9PiBhcnJheSggICAnTmFtZScgID0+ICJCaXRzIFBlciBTYW1wbGUiLAogICAgICAgICAgICAgICAgJ0Rlc2NyaXB0aW9uJyA9PiAiTnVtYmVyIG9mIGJpdHMgcmVjb3JkZWQgcGVyIHNhbXBsZSAoYSBzYW1wbGUgaXMgdXN1YWxseSBvbmUgY29sb3VyIChSZWQsIEdyZWVuIG9yIEJsdWUpIG9mIG9uZSBwaXhlbCkiLAogICAgICAgICAgICAgICAgJ1R5cGUnICA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnID0+ICJiaXRzICggZm9yIGVhY2ggY29sb3VyIGNvbXBvbmVudCApIiApLAoKCjI1OSA9PiBhcnJheSggICAnTmFtZScgPT4gIkNvbXByZXNzaW9uIiwKICAgICAgICAgICAgICAgICdEZXNjcmlwdGlvbicgPT4gIlNwZWNpZmllcyB3aGF0IHR5cGUgb2YgY29tcHJlc3Npb24gaXMgdXNlZCAxID0gdW5jb21wcmVzc2VkLCA2ID0gSlBFRyBjb21wcmVzc2lvbiAodGh1bWJuYWlscyBvbmx5KSwgT3RoZXIgPSByZXNlcnZlZCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAxID0+ICJVbmNvbXByZXNzZWQiLAogICAgICAgICAgICAgICAgNSA9PiAiTFpXIENvbXByZXNzaW9uIiwKICAgICAgICAgICAgICAgIDYgPT4gIlRodW1ibmFpbCBjb21wcmVzc2VkIHdpdGggSlBFRyBjb21wcmVzc2lvbiIsCiAgICAgICAgICAgICAgICA3ID0+ICJKUEVHIENvbXByZXNzaW9uIiwKICAgICAgICAgICAgICAgIDggPT4gIlpJUCBDb21wcmVzc2lvbiIgKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZTogQWRkZWQgVElGRiBjb21wcmVzc2lvbiB0eXBlcyBhcyBvZiB2ZXJzaW9uIDEuMTEKCjI2MiA9PiBhcnJheSggICAnTmFtZScgPT4gICJQaG90b21ldHJpYyBJbnRlcnByZXRhdGlvbiIsCiAgICAgICAgICAgICAgICAnRGVzY3JpcHRpb24nID0+ICJTcGVjaWZpZXMgUGl4ZWwgQ29tcG9zaXRpb24gLSAwIG9yIDEgPSBtb25vY2hyb21lLCAyID0gUkdCLCAzID0gUGFsYXR0ZSBDb2xvdXIsIDQgPSBUcmFuc3BhcmVuY3kgTWFzaywgNiA9IFlDYkNyIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDIgPT4gIlJHQiAoUmVkIEdyZWVuIEJsdWUpIiwKICAgICAgICAgICAgICAgIDYgPT4gIllDYkNyIChMdW1pbmFuY2UsIENocm9tYSBtaW51cyBCbHVlLCBhbmQgQ2hyb21hIG1pbnVzIFJlZCkiICksCgoyNzQgPT4gYXJyYXkoICAgJ05hbWUnID0+ICAiT3JpZW50YXRpb24iLAogICAgICAgICAgICAgICAgJ0Rlc2NyaXB0aW9uJyA9PiAiU3BlY2lmaWVzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgaW1hZ2UuXG4KMSA9IFJvdyAwIHRvcCwgY29sdW1uIDAgbGVmdFxuCjIgPSBSb3cgMCB0b3AsIGNvbHVtbiAwIHJpZ2h0XG4KMyA9IFJvdyAwIGJvdHRvbSwgY29sdW1uIDAgcmlnaHRcbgo0ID0gUm93IDAgYm90dG9tLCBjb2x1bW4gMCBsZWZ0XG4KNSA9IFJvdyAwIGxlZnQsIGNvbHVtbiAwIHRvcFxuCjYgPSBSb3cgMCByaWdodCwgY29sdW1uIDAgdG9wXG4KNyA9IFJvdyAwIHJpZ2h0LCBjb2x1bW4gMCBib3R0b21cbgo4ID0gUm93IDAgbGVmdCwgY29sdW1uIDAgYm90dG9tIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDEgPT4gIk5vIFJvdGF0aW9uLCBObyBGbGlwIFxuKFJvdyAwIGlzIGF0IHRoZSB2aXN1YWwgdG9wIG9mIHRoZSBpbWFnZSxcbiBhbmQgY29sdW1uIDAgaXMgdGhlIHZpc3VhbCBsZWZ0LWhhbmQgc2lkZSkiLAogICAgICAgICAgICAgICAgMiA9PiAiTm8gUm90YXRpb24sIEZsaXBwZWQgSG9yaXpvbnRhbGx5IFxuKFJvdyAwIGlzIGF0IHRoZSB2aXN1YWwgdG9wIG9mIHRoZSBpbWFnZSxcbiBhbmQgY29sdW1uIDAgaXMgdGhlIHZpc3VhbCByaWdodC1oYW5kIHNpZGUpIiwKICAgICAgICAgICAgICAgIDMgPT4gIlJvdGF0ZWQgMTgwIGRlZ3JlZXMsIE5vIEZsaXAgXG4oUm93IDAgaXMgYXQgdGhlIHZpc3VhbCBib3R0b20gb2YgdGhlIGltYWdlLFxuIGFuZCBjb2x1bW4gMCBpcyB0aGUgdmlzdWFsIHJpZ2h0LWhhbmQgc2lkZSkiLAogICAgICAgICAgICAgICAgNCA9PiAiTm8gUm90YXRpb24sIEZsaXBwZWQgVmVydGljYWxseSBcbihSb3cgMCBpcyBhdCB0aGUgdmlzdWFsIGJvdHRvbSBvZiB0aGUgaW1hZ2UsXG4gYW5kIGNvbHVtbiAwIGlzIHRoZSB2aXN1YWwgbGVmdC1oYW5kIHNpZGUpIiwKICAgICAgICAgICAgICAgIDUgPT4gIkZsaXBwZWQgSG9yaXpvbnRhbGx5LCBSb3RhdGVkIDkwIGRlZ3JlZXMgY291bnRlciBjbG9ja3dpc2UgXG4oUm93IDAgaXMgYXQgdGhlIHZpc3VhbCBsZWZ0LWhhbmQgc2lkZSBvZiBvZiB0aGUgaW1hZ2UsXG4gYW5kIGNvbHVtbiAwIGlzIHRoZSB2aXN1YWwgdG9wKSIsCiAgICAgICAgICAgICAgICA2ID0+ICJObyBGbGlwLCBSb3RhdGVkIDkwIGRlZ3JlZXMgY2xvY2t3aXNlIFxuKFJvdyAwIGlzIGF0IHRoZSB2aXN1YWwgcmlnaHQtaGFuZCBzaWRlIG9mIG9mIHRoZSBpbWFnZSxcbiBhbmQgY29sdW1uIDAgaXMgdGhlIHZpc3VhbCB0b3ApIiwKICAgICAgICAgICAgICAgIDcgPT4gIkZsaXBwZWQgSG9yaXpvbnRhbGx5LCBSb3RhdGVkIDkwIGRlZ3JlZXMgY2xvY2t3aXNlIFxuKFJvdyAwIGlzIGF0IHRoZSB2aXN1YWwgcmlnaHQtaGFuZCBzaWRlIG9mIG9mIHRoZSBpbWFnZSxcbiBhbmQgY29sdW1uIDAgaXMgdGhlIHZpc3VhbCBib3R0b20pIiwKICAgICAgICAgICAgICAgIDggPT4gIk5vIEZsaXAsIFJvdGF0ZWQgOTAgZGVncmVlcyBjb3VudGVyIGNsb2Nrd2lzZSBcbihSb3cgMCBpcyBhdCB0aGUgdmlzdWFsIGxlZnQtaGFuZCBzaWRlIG9mIG9mIHRoZSBpbWFnZSxcbiBhbmQgY29sdW1uIDAgaXMgdGhlIHZpc3VhbCBib3R0b20pIiApLAoyNzcgPT4gYXJyYXkoICAgJ05hbWUnID0+ICAiU2FtcGxlcyBQZXIgUGl4ZWwiLAogICAgICAgICAgICAgICAgJ0Rlc2NyaXB0aW9uJyA9PiAiTnVtYmVyIG9mIHJlY29yZGVkIHNhbXBsZXMgKGNvbG91cnMpIHBlciBwaXhlbCAtIHVzdWFsbHkgMSBmb3IgQiZXLCBncmF5c2NhbGUsIGFuZCBwYWxldHRlLWNvbG91ciwgdXN1YWxseSAzIGZvciBSR0IgYW5kIFlDYkNyIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnID0+ICJDb21wb25lbnRzIChjb2xvdXJzKSIgKSwKCjI4NCA9PiBhcnJheSggICAnTmFtZScgPT4gICJQbGFuYXIgQ29uZmlndXJhdGlvbiIsCiAgICAgICAgICAgICAgICAnRGVzY3JpcHRpb24nID0+ICJTcGVjaWZpZXMgd2hldGhlciBwaXhlbCBjb21wb25lbnRzIGFyZSByZWNvcmRlZCBpbiBjaHVua3kgb3IgcGxhbmFyIGZvcm1hdCAtIDEgPSBDaHVua3ksIDIgPSBQbGFuYXIiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJMb29rdXAiLAogICAgICAgICAgICAgICAgMSA9PiAiQ2h1bmt5IEZvcm1hdCIsCiAgICAgICAgICAgICAgICAyID0+ICJQbGFuYXIgRm9ybWF0IiApLAoKNTMwID0+IGFycmF5KCAgICdOYW1lJyA9PiAgIllDYkNyIFN1Yi1TYW1wbGluZyIsCiAgICAgICAgICAgICAgICAnRGVzY3JpcHRpb24nID0+ICJTcGVjaWZpZXMgcmF0aW8gb2YgY2hyb21pbmFuY2UgdG8gbHVtaW5hbmNlIGNvbXBvbmVudHMgLSBbMiwgMV0gPSBZQ2JDcjQ6MjoyLCAgWzIsIDJdID0gWUNiQ3I0OjI6MCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlNwZWNpYWwiICksCgoKNTMxID0+IGFycmF5KCAgICdOYW1lJyA9PiAgIllDYkNyIFBvc2l0aW9uaW5nIiwKICAgICAgICAgICAgICAgICdEZXNjcmlwdGlvbicgPT4gIlNwZWNpZmllcyBsb2NhdGlvbiBvZiBjaHJvbWluYW5jZSBhbmQgbHVtaW5hbmNlIGNvbXBvbmVudHMgLSAxID0gY2VudGVyZWQsIDIgPSBjby1zaXRlZCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAxID0+ICJDaHJvbWluYW5jZSBjb21wb25lbnRzIENlbnRyZWQgaW4gcmVsYXRpb24gdG8gbHVtaW5hbmNlIGNvbXBvbmVudHMiLAogICAgICAgICAgICAgICAgMiA9PiAiQ2hyb21pbmFuY2UgYW5kIGx1bWluYW5jZSBjb21wb25lbnRzIENvLVNpdGVkIiApLAoKCjI4MiA9PiBhcnJheSggICAnTmFtZScgPT4gICJYIFJlc29sdXRpb24iLAogICAgICAgICAgICAgICAgJ0Rlc2NyaXB0aW9uJyA9PiAiTnVtYmVyIG9mIGNvbHVtbnMgKHBpeGVscykgcGVyIFwnUmVzb2x1dGlvblVuaXRcJyIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJz0+ICJwaXhlbHMgcGVyICdSZXNvbHV0aW9uIFVuaXQnICIgKSwKCjI4MyA9PiBhcnJheSggICAnTmFtZScgPT4gICJZIFJlc29sdXRpb24iLAogICAgICAgICAgICAgICAgJ0Rlc2NyaXB0aW9uJyA9PiAiTnVtYmVyIG9mIHJvd3MgKHBpeGVscykgcGVyIFwnUmVzb2x1dGlvblVuaXRcJyIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJz0+ICJwaXhlbHMgcGVyICdSZXNvbHV0aW9uIFVuaXQnICIgKSwKCjI5NiA9PiBhcnJheSggICAnTmFtZScgPT4gICJSZXNvbHV0aW9uIFVuaXQiLAogICAgICAgICAgICAgICAgJ0Rlc2NyaXB0aW9uJyA9PiAiVW5pdHMgZm9yIG1lYXN1cmluZyBYUmVzb2x1dGlvbiBhbmQgWVJlc29sdXRpb24gLSAxID0gTm8gdW5pdHMsIDIgPSBJbmNoZXMsIDMgPSBDZW50aW1ldHJlcyIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAyID0+ICJJbmNoZXMiLAogICAgICAgICAgICAgICAgMyA9PiAiQ2VudGltZXRyZXMiICksCgoyNzMgPT4gYXJyYXkoICAgJ05hbWUnID0+ICAiU3RyaXAgT2Zmc2V0cyIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJz0+ICJieXRlcyBvZmZzZXQiICksCgoyNzggPT4gYXJyYXkoICAgJ05hbWUnID0+ICAiUm93cyBQZXIgU3RyaXAiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cyc9PiAicm93cyIgKSwKCjI3OSA9PiBhcnJheSggICAnTmFtZScgPT4gIlN0cmlwIEJ5dGUgQ291bnRzIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnPT4gImJ5dGVzIiApLAoKNTEzID0+IGFycmF5KCAgICdOYW1lJyA9PiAiRXhpZiBUaHVtYm5haWwgKEpQRUcgSW50ZXJjaGFuZ2UgRm9ybWF0KSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlNwZWNpYWwiICksCgo1MTQgPT4gYXJyYXkoICAgJ05hbWUnID0+ICJFeGlmIFRodW1ibmFpbCBMZW5ndGggKEpQRUcgSW50ZXJjaGFuZ2UgRm9ybWF0IExlbmd0aCkiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cyc9PiAiYnl0ZXMiICksCgozMDEgPT4gYXJyYXkoICAgJ05hbWUnID0+ICJUcmFuc2ZlciBGdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJz0+ICIiICksCgozMTggPT4gYXJyYXkoICAgJ05hbWUnID0+ICJXaGl0ZSBQb2ludCBDaHJvbWF0aWNpdHkiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cyc9PiAiKHgseSBjb29yZGluYXRlcyBvbiBhIDE5MzEgQ0lFIHh5IGNocm9tYXRpY2l0eSBkaWFncmFtKSIgKSwKCjMxOSA9PiBhcnJheSggICAnTmFtZScgPT4gIlByaW1hcnkgQ2hyb21hdGljaXRpZXMiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cyc9PiAiKFJlZCB4LHksIEdyZWVuIHgseSwgQmx1ZSB4LHkgY29vcmRpbmF0ZXMgb24gYSAxOTMxIENJRSB4eSBjaHJvbWF0aWNpdHkgZGlhZ3JhbSkiICksCgo1MjkgPT4gYXJyYXkoICAgJ05hbWUnID0+ICJZQ2JDciBDb2VmZmljaWVudHMiLAogICAgICAgICAgICAgICAgJ0Rlc2NyaXB0aW9uJyA9PiAiVHJhbnNmb3JtIENvZWZmaWNpZW50cyBmb3IgdHJhbnNmb3JtYXRpb24gZnJvbSBSR0IgdG8gWUNiQ3IiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cyc9PiAiKEx1bWFSZWQsIEx1bWFHcmVlbiwgTHVtYUJsdWUgW3Byb3BvcnRpb25zIG9mIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGluIGx1bWluYW5jZV0pIiApLAoKNTMyID0+IGFycmF5KCAgICdOYW1lJyA9PiAiUmVmZXJlbmNlIEJsYWNrIHBvaW50IGFuZCBXaGl0ZSBwb2ludCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJz0+ICIoUiBvciBZIFdoaXRlIEhlYWRyb29tLCBSIG9yIFkgQmxhY2sgRm9vdHJvb20sIEcgb3IgQ2IgV2hpdGUgSGVhZHJvb20sIEcgb3IgQ2IgQmxhY2sgRm9vdHJvb20sIEIgb3IgQ3IgV2hpdGUgSGVhZHJvb20sIEIgb3IgQ3IgQmxhY2sgRm9vdHJvb20pIiApLAoKMzA2ID0+IGFycmF5KCAgICdOYW1lJyA9PiAiRGF0ZSBhbmQgVGltZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJz0+ICIgKEZvcm1hdDogWVlZWTpNTTpERCBISDptbTpTUykiICksCgoyNzAgPT4gYXJyYXkoICAgJ05hbWUnID0+ICJJbWFnZSBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjI3MSA9PiBhcnJheSggICAnTmFtZScgPT4gIk1ha2UgKE1hbnVmYWN0dXJlcikiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgoyNzIgPT4gYXJyYXkoICAgJ05hbWUnID0+ICJNb2RlbCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjMwNSA9PiBhcnJheSggICAnTmFtZScgPT4gIlNvZnR3YXJlIG9yIEZpcm13YXJlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiU3RyaW5nIiApLAoKMzE1ID0+IGFycmF5KCAgICdOYW1lJyA9PiAiQXJ0aXN0IE5hbWUiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgo3MDAgPT4gYXJyYXkoICAgJ05hbWUnID0+ICJFbWJlZGRlZCBYTVAgQmxvY2siLCAgICAgICAgLy8gQ2hhbmdlOiBBZGRlZCBlbWJlZGRlZCBYTVAgYXMgb2YgdmVyc2lvbiAxLjExCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlhNUCIgKSwKCjMzNDMyID0+IGFycmF5KCAnTmFtZScgPT4gIkNvcHlyaWdodCBJbmZvcm1hdGlvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjM0NjY1ID0+IGFycmF5KCAnTmFtZScgPT4gIkVYSUYgSW1hZ2UgRmlsZSBEaXJlY3RvcnkgKElGRCkiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdWJJRkQiLAogICAgICAgICAgICAgICAgJ1RhZ3MgTmFtZScgPT4gIkVYSUYiICksCgozMzcyMyA9PiBhcnJheSggJ05hbWUnID0+ICJJUFRDIFJlY29yZHMiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJJUFRDIiApLAoKMzQzNzcgPT4gYXJyYXkoICdOYW1lJyA9PiAiRW1iZWRkZWQgUGhvdG9zaG9wIElSQiIsICAgIC8vIENoYW5nZTogQWRkZWQgZW1iZWRkZWQgSVJCIGFzIG9mIHZlcnNpb24gMS4xMQogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJJUkIiICksCgozNDg1MyA9PiBhcnJheSggJ05hbWUnID0+ICJHUFMgSW5mbyBJbWFnZSBGaWxlIERpcmVjdG9yeSAoSUZEKSIsICAgICAgICAvLyBDaGFuZ2U6IE1vdmVkIEdQUyBJRkQgdGFnIHRvIGNvcnJlY3QgbG9jYXRpb24gYXMgb2YgdmVyc2lvbiAxLjExCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN1YklGRCIsCiAgICAgICAgICAgICAgICAnVGFncyBOYW1lJyA9PiAiR1BTIiApLAoKNTAzNDEgPT4gYXJyYXkoICdOYW1lJyA9PiAiUHJpbnQgSW1hZ2UgTWF0Y2hpbmcgSW5mbyIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlBJTSIgKSwKCiksCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qIEVYSUYgVGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKJ0VYSUYnID0+IGFycmF5ICgKCi8vIEV4aWYgSUZECjM2ODY0ID0+IGFycmF5KCAnTmFtZScgPT4gIkV4aWYgVmVyc2lvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjQwOTY1ID0+IGFycmF5KCAnTmFtZScgPT4gIkludGVyb3BlcmFiaWxpdHkgSW1hZ2UgRmlsZSBEaXJlY3RvcnkgKElGRCkiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdWJJRkQiLAogICAgICAgICAgICAgICAgJ1RhZ3MgTmFtZScgPT4gIkludGVyb3BlcmFiaWxpdHkiICksCgovLyBDaGFuZ2U6IHJlbW92ZWQgR1BTIElGRCB0YWcgZnJvbSBoZXJlIGFzIGl0IHdhcyBpbmNvcnJlY3QgbG9jYXRpb24gLSBhcyBvZiB2ZXJzaW9uIDEuMTEKCjQwOTYwID0+IGFycmF5KCAnTmFtZScgPT4gIkZsYXNoUGl4IFZlcnNpb24iLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgo0MDk2MSA9PiBhcnJheSggJ05hbWUnID0+ICJDb2xvdXIgU3BhY2UiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJMb29rdXAiLAogICAgICAgICAgICAgICAgMSA9PiAic1JHQiIsCiAgICAgICAgICAgICAgICAweEZGRkYgPT4gIlVuY2FsaWJyYXRlZCIgKSwKCjQwOTYyID0+IGFycmF5KCAnTmFtZScgPT4gIlBpeGVsIFggRGltZW5zaW9uIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnPT4gInBpeGVscyIgKSwKCjQwOTYzID0+IGFycmF5KCAnTmFtZScgPT4gIlBpeGVsIFkgRGltZW5zaW9uIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnID0+ICJwaXhlbHMiICksCgozNzEyMSA9PiBhcnJheSggJ05hbWUnID0+ICJDb21wb25lbnRzIENvbmZpZ3VyYXRpb24iLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTcGVjaWFsIiApLAoKMzcxMjIgPT4gYXJyYXkoICdOYW1lJyA9PiAiQ29tcHJlc3NlZCBCaXRzIFBlciBQaXhlbCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiYml0cyIgKSwKCjM3NTAwID0+IGFycmF5KCAnTmFtZScgPT4gIk1ha2VyIE5vdGUiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJNYWtlciBOb3RlIiApLAoKMzc1MTAgPT4gYXJyYXkoICdOYW1lJyA9PiAiVXNlciBDb21tZW50IiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiQ2hhcmFjdGVyIENvZGVkIFN0cmluZyIgKSwKCjQwOTY0ID0+IGFycmF5KCAnTmFtZScgPT4gIlJlbGF0ZWQgU291bmQgRmlsZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjM2ODY3ID0+IGFycmF5KCAnTmFtZScgPT4gIkRhdGUgYW5kIFRpbWUgb2YgT3JpZ2luYWwiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiIChGb3JtYXQ6IFlZWVk6TU06REQgSEg6bW06U1MpIiApLAoKMzY4NjggPT4gYXJyYXkoICdOYW1lJyA9PiAiRGF0ZSBhbmQgVGltZSB3aGVuIERpZ2l0aXplZCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnID0+ICIgKEZvcm1hdDogWVlZWTpNTTpERCBISDptbTpTUykiICksCgozNzUyMCA9PiBhcnJheSggJ05hbWUnID0+ICJTdWIgU2Vjb25kIFRpbWUiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgozNzUyMSA9PiBhcnJheSggJ05hbWUnID0+ICJTdWIgU2Vjb25kIFRpbWUgb2YgT3JpZ2luYWwiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgozNzUyMiA9PiBhcnJheSggJ05hbWUnID0+ICJTdWIgU2Vjb25kIFRpbWUgd2hlbiBEaWdpdGl6ZWQiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgozMzQzNCA9PiBhcnJheSggJ05hbWUnID0+ICJFeHBvc3VyZSBUaW1lIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnID0+ICJzZWNvbmRzIiApLAoKMzczNzcgPT4gYXJyYXkoICdOYW1lJyA9PiAiQVBFWCBTaHV0dGVyIFNwZWVkIFZhbHVlIChUdikiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiApLAoKMzczNzggPT4gYXJyYXkoICdOYW1lJyA9PiAiQVBFWCBBcGVydHVyZSBWYWx1ZSAoQXYpIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIgKSwKCjM3Mzc5ID0+IGFycmF5KCAnTmFtZScgPT4gIkFQRVggQnJpZ2h0bmVzcyBWYWx1ZSAoQnYpIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIgKSwKCjM3MzgwID0+IGFycmF5KCAnTmFtZScgPT4gIkFQRVggRXhwb3N1cmUgQmlhcyBWYWx1ZSAoRXhwb3N1cmUgQ29tcGVuc2F0aW9uKSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiRVYiICksCgo0MjI0MCA9PiBhcnJheSggJ05hbWUnID0+ICJHYW1tYSBDb21wZW5zYXRpb24gZm9yIFBsYXliYWNrIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIgKSwKCgozNzM4MSA9PiBhcnJheSggJ05hbWUnID0+ICJBUEVYIE1heGltdW0gQXBlcnR1cmUgVmFsdWUiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiApLAoKMzczODIgPT4gYXJyYXkoICdOYW1lJyA9PiAiU3ViamVjdCBEaXN0YW5jZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAibWV0cmVzIiApLAoKMzczODMgPT4gYXJyYXkoICdOYW1lJyA9PiAiTWV0ZXJpbmcgTW9kZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAwID0+ICJVbmtub3duIiwKICAgICAgICAgICAgICAgIDEgPT4gIkF2ZXJhZ2UiLAogICAgICAgICAgICAgICAgMiA9PiAiQ2VudGVyIFdlaWdodGVkIEF2ZXJhZ2UiLAogICAgICAgICAgICAgICAgMyA9PiAiU3BvdCIsCiAgICAgICAgICAgICAgICA0ID0+ICJNdWx0aSBTcG90IiwKICAgICAgICAgICAgICAgIDUgPT4gIlBhdHRlcm4iLAogICAgICAgICAgICAgICAgNiA9PiAiUGFydGlhbCIsCiAgICAgICAgICAgICAgICAyNTUgPT4gIk90aGVyIiApLAoKMzczODQgPT4gYXJyYXkoICdOYW1lJyA9PiAiTGlnaHQgU291cmNlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDAgPT4gIlVua25vd24iLAogICAgICAgICAgICAgICAgMSA9PiAiRGF5bGlnaHQiLAogICAgICAgICAgICAgICAgMiA9PiAiRmx1b3Jlc2NlbnQiLAogICAgICAgICAgICAgICAgMyA9PiAiVHVuZ3N0ZW4gKGluY2FuZGVzY2VudCBsaWdodCkiLAogICAgICAgICAgICAgICAgNCA9PiAiRmxhc2giLAogICAgICAgICAgICAgICAgOSA9PiAiRmluZSB3ZWF0aGVyIiwKICAgICAgICAgICAgICAgIDEwID0+ICJDbG91ZHkgd2VhdGhlciIsCiAgICAgICAgICAgICAgICAxMSA9PiAiU2hhZGUiLAogICAgICAgICAgICAgICAgMTIgPT4gIkRheWxpZ2h0IGZsdW9yZXNjZW50IChEIDU3MDAgliA3MTAwSykiLAogICAgICAgICAgICAgICAgMTMgPT4gIkRheSB3aGl0ZSBmbHVvcmVzY2VudCAoTiA0NjAwIJYgNTQwMEspIiwKICAgICAgICAgICAgICAgIDE0ID0+ICJDb29sIHdoaXRlIGZsdW9yZXNjZW50IChXIDM5MDAgliA0NTAwSykiLAogICAgICAgICAgICAgICAgMTUgPT4gIldoaXRlIGZsdW9yZXNjZW50IChXVyAzMjAwIJYgMzcwMEspIiwKICAgICAgICAgICAgICAgIDE3ID0+ICJTdGFuZGFyZCBsaWdodCBBIiwKICAgICAgICAgICAgICAgIDE4ID0+ICJTdGFuZGFyZCBsaWdodCBCIiwKICAgICAgICAgICAgICAgIDE5ID0+ICJTdGFuZGFyZCBsaWdodCBDIiwKICAgICAgICAgICAgICAgIDIwID0+ICJENTUiLAogICAgICAgICAgICAgICAgMjEgPT4gIkQ2NSIsCiAgICAgICAgICAgICAgICAyMiA9PiAiRDc1IiwKICAgICAgICAgICAgICAgIDIzID0+ICJENTAiLAogICAgICAgICAgICAgICAgMjQgPT4gIklTTyBzdHVkaW8gdHVuZ3N0ZW4iLAogICAgICAgICAgICAgICAgMjU1ID0+ICJPdGhlciIgKSwKCjM3Mzg1ID0+IGFycmF5KCAnTmFtZScgPT4gIkZsYXNoIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDAgID0+ICJGbGFzaCBkaWQgbm90IGZpcmUiLAogICAgICAgICAgICAgICAgMSAgPT4gIkZsYXNoIGZpcmVkIiwKICAgICAgICAgICAgICAgIDUgID0+ICJTdHJvYmUgcmV0dXJuIGxpZ2h0IG5vdCBkZXRlY3RlZCIsCiAgICAgICAgICAgICAgICA3ICA9PiAiU3Ryb2JlIHJldHVybiBsaWdodCBkZXRlY3RlZCIsCiAgICAgICAgICAgICAgICA5ICA9PiAiRmxhc2ggZmlyZWQsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSIsCiAgICAgICAgICAgICAgICAxMyA9PiAiRmxhc2ggZmlyZWQsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSwgcmV0dXJuIGxpZ2h0IG5vdCBkZXRlY3RlZCIsCiAgICAgICAgICAgICAgICAxNSA9PiAiRmxhc2ggZmlyZWQsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSwgcmV0dXJuIGxpZ2h0IGRldGVjdGVkIiwKICAgICAgICAgICAgICAgIDE2ID0+ICJGbGFzaCBkaWQgbm90IGZpcmUsIGNvbXB1bHNvcnkgZmxhc2ggc3VwcHJlc3Npb24gbW9kZSIsCiAgICAgICAgICAgICAgICAyNCA9PiAiRmxhc2ggZGlkIG5vdCBmaXJlLCBhdXRvIG1vZGUiLAogICAgICAgICAgICAgICAgMjUgPT4gIkZsYXNoIGZpcmVkLCBhdXRvIG1vZGUiLAogICAgICAgICAgICAgICAgMjkgPT4gIkZsYXNoIGZpcmVkLCBhdXRvIG1vZGUsIHJldHVybiBsaWdodCBub3QgZGV0ZWN0ZWQiLAogICAgICAgICAgICAgICAgMzEgPT4gIkZsYXNoIGZpcmVkLCBhdXRvIG1vZGUsIHJldHVybiBsaWdodCBkZXRlY3RlZCIsCiAgICAgICAgICAgICAgICAzMiA9PiAiTm8gZmxhc2ggZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgNjUgPT4gIkZsYXNoIGZpcmVkLCByZWQtZXllIHJlZHVjdGlvbiBtb2RlIiwKICAgICAgICAgICAgICAgIDY5ID0+ICJGbGFzaCBmaXJlZCwgcmVkLWV5ZSByZWR1Y3Rpb24gbW9kZSwgcmV0dXJuIGxpZ2h0IG5vdCBkZXRlY3RlZCIsCiAgICAgICAgICAgICAgICA3MSA9PiAiRmxhc2ggZmlyZWQsIHJlZC1leWUgcmVkdWN0aW9uIG1vZGUsIHJldHVybiBsaWdodCBkZXRlY3RlZCIsCiAgICAgICAgICAgICAgICA3MyA9PiAiRmxhc2ggZmlyZWQsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSwgcmVkLWV5ZSByZWR1Y3Rpb24gbW9kZSIsCiAgICAgICAgICAgICAgICA3NyA9PiAiRmxhc2ggZmlyZWQsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSwgcmVkLWV5ZSByZWR1Y3Rpb24gbW9kZSwgcmV0dXJuIGxpZ2h0IG5vdCBkZXRlY3RlZCIsCiAgICAgICAgICAgICAgICA3OSA9PiAiRmxhc2ggZmlyZWQsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSwgcmVkLWV5ZSByZWR1Y3Rpb24gbW9kZSwgcmV0dXJuIGxpZ2h0IGRldGVjdGVkIiwKICAgICAgICAgICAgICAgIDg5ID0+ICJGbGFzaCBmaXJlZCwgYXV0byBtb2RlLCByZWQtZXllIHJlZHVjdGlvbiBtb2RlIiwKICAgICAgICAgICAgICAgIDkzID0+ICJGbGFzaCBmaXJlZCwgYXV0byBtb2RlLCByZXR1cm4gbGlnaHQgbm90IGRldGVjdGVkLCByZWQtZXllIHJlZHVjdGlvbiBtb2RlIiwKICAgICAgICAgICAgICAgIDk1ID0+ICJGbGFzaCBmaXJlZCwgYXV0byBtb2RlLCByZXR1cm4gbGlnaHQgZGV0ZWN0ZWQsIHJlZC1leWUgcmVkdWN0aW9uIG1vZGUiICksCgozNzM4NiA9PiBhcnJheSggJ05hbWUnID0+ICJGb2NhbExlbmd0aCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAibW0iICksCgozNzM5NiA9PiBhcnJheSggJ05hbWUnID0+ICJTdWJqZWN0IEFyZWEiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gIiggVHdvIFZhbHVlczogeCx5IGNvb3JkaW5hdGVzLCAgVGhyZWUgVmFsdWVzOiB4LHkgY29vcmRpbmF0ZXMsIGRpYW1ldGVyLCAgRm91ciBWYWx1ZXM6IGNlbnRlciB4LHkgY29vcmRpbmF0ZXMsIHdpZHRoLCBoZWlnaHQpIiApLAoKMzM0MzcgPT4gYXJyYXkoICdOYW1lJyA9PiAiQXBlcnR1cmUgRiBOdW1iZXIiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiApLAoKMzQ4NTAgPT4gYXJyYXkoICdOYW1lJyA9PiAiRXhwb3N1cmUgUHJvZ3JhbSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAwID0+ICJOb3QgZGVmaW5lZCIsCiAgICAgICAgICAgICAgICAxID0+ICJNYW51YWwiLAogICAgICAgICAgICAgICAgMiA9PiAiTm9ybWFsIHByb2dyYW0iLAogICAgICAgICAgICAgICAgMyA9PiAiQXBlcnR1cmUgcHJpb3JpdHkiLAogICAgICAgICAgICAgICAgNCA9PiAiU2h1dHRlciBwcmlvcml0eSIsCiAgICAgICAgICAgICAgICA1ID0+ICJDcmVhdGl2ZSBwcm9ncmFtIChiaWFzZWQgdG93YXJkIGRlcHRoIG9mIGZpZWxkKSIsCiAgICAgICAgICAgICAgICA2ID0+ICJBY3Rpb24gcHJvZ3JhbSAoYmlhc2VkIHRvd2FyZCBmYXN0IHNodXR0ZXIgc3BlZWQpIiwKICAgICAgICAgICAgICAgIDcgPT4gIlBvcnRyYWl0IG1vZGUgKGZvciBjbG9zZXVwIHBob3RvcyB3aXRoIHRoZSBiYWNrZ3JvdW5kIG91dCBvZiBmb2N1cykiLAogICAgICAgICAgICAgICAgOCA9PiAiTGFuZHNjYXBlIG1vZGUgKGZvciBsYW5kc2NhcGUgcGhvdG9zIHdpdGggdGhlIGJhY2tncm91bmQgaW4gZm9jdXMpIiApLAoKMzQ4NTIgPT4gYXJyYXkoICdOYW1lJyA9PiAiU3BlY3RyYWwgU2Vuc2l0aXZpdHkiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgozNDg1NSA9PiBhcnJheSggJ05hbWUnID0+ICJJU08gU3BlZWQgUmF0aW5ncyIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiICksCgozNDg1NiA9PiBhcnJheSggJ05hbWUnID0+ICJPcHRvLUVsZWN0cm9uaWMgQ29udmVyc2lvbiBGdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo0MTQ4MyA9PiBhcnJheSggJ05hbWUnID0+ICJGbGFzaCBFbmVyZ3kiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gIkJlYW0gQ2FuZGxlIFBvd2VyIFNlY29uZHMgKEJDUFMpIiApLAoKNDE0ODQgPT4gYXJyYXkoICdOYW1lJyA9PiAiU3BhdGlhbCBGcmVxdWVuY3kgUmVzcG9uc2UiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApLAoKNDE0ODYgPT4gYXJyYXkoICdOYW1lJyA9PiAiRm9jYWwgUGxhbmUgWCBSZXNvbHV0aW9uIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnID0+ICJwaXhlbHMgcGVyICdGb2NhbCBQbGFuZSBSZXNvbHV0aW9uIFVuaXQnIiApLAoKNDE0ODcgPT4gYXJyYXkoICdOYW1lJyA9PiAiRm9jYWwgUGxhbmUgWSBSZXNvbHV0aW9uIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnID0+ICJwaXhlbHMgcGVyICdGb2NhbCBQbGFuZSBSZXNvbHV0aW9uIFVuaXQnIiApLAoKNDE0ODggPT4gYXJyYXkoICdOYW1lJyA9PiAiRm9jYWwgUGxhbmUgUmVzb2x1dGlvbiBVbml0IiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDIgPT4gIkluY2hlcyIsCiAgICAgICAgICAgICAgICAzID0+ICJDZW50aW1ldHJlcyIgKSwKCjQxNDkyID0+IGFycmF5KCAnTmFtZScgPT4gIlN1YmplY3QgTG9jYXRpb24iLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gIih4LHkgcGl4ZWwgY29vcmRpbmF0ZXMgb2Ygc3ViamVjdCkiICksCgo0MTQ5MyA9PiBhcnJheSggJ05hbWUnID0+ICJFeHBvc3VyZSBJbmRleCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiICksCgo0MTQ5NSA9PiBhcnJheSggJ05hbWUnID0+ICJTZW5zaW5nIE1ldGhvZCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAxID0+ICJOb3QgZGVmaW5lZCIsCiAgICAgICAgICAgICAgICAyID0+ICJPbmUtY2hpcCBjb2xvdXIgYXJlYSBzZW5zb3IiLAogICAgICAgICAgICAgICAgMyA9PiAiVHdvLWNoaXAgY29sb3VyIGFyZWEgc2Vuc29yIiwKICAgICAgICAgICAgICAgIDQgPT4gIlRocmVlLWNoaXAgY29sb3VyIGFyZWEgc2Vuc29yIiwKICAgICAgICAgICAgICAgIDUgPT4gIkNvbG91ciBzZXF1ZW50aWFsIGFyZWEgc2Vuc29yIiwKICAgICAgICAgICAgICAgIDcgPT4gIlRyaWxpbmVhciBzZW5zb3IiLAogICAgICAgICAgICAgICAgOCA9PiAiQ29sb3VyIHNlcXVlbnRpYWwgbGluZWFyIHNlbnNvciIgKSwKCjQxNzI4ID0+IGFycmF5KCAnTmFtZScgPT4gIkZpbGUgU291cmNlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDMgPT4gIkRpZ2l0YWwgU3RpbGwgQ2FtZXJhIiApLAoKNDE3MjkgPT4gYXJyYXkoICdOYW1lJyA9PiAiU2NlbmUgVHlwZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAxID0+ICJBIGRpcmVjdGx5IHBob3RvZ3JhcGhlZCBpbWFnZSIgKSwKCjQxNzMwID0+IGFycmF5KCAnTmFtZScgPT4gIkNvbG91ciBGaWx0ZXIgQXJyYXkgUGF0dGVybiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlNwZWNpYWwiICksCgo0MTk4NSA9PiBhcnJheSggJ05hbWUnID0+ICJTcGVjaWFsIFByb2Nlc3NpbmcgKEN1c3RvbSBSZW5kZXJlZCkiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJMb29rdXAiLAogICAgICAgICAgICAgICAgMCA9PiAiTm9ybWFsIHByb2Nlc3MiLAogICAgICAgICAgICAgICAgMSA9PiAiQ3VzdG9tIHByb2Nlc3MiICksCgo0MTk4NiA9PiBhcnJheSggJ05hbWUnID0+ICJFeHBvc3VyZSBNb2RlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDAgPT4gIkF1dG8gZXhwb3N1cmUiLAogICAgICAgICAgICAgICAgMSA9PiAiTWFudWFsIGV4cG9zdXJlIiwKICAgICAgICAgICAgICAgIDIgPT4gIkF1dG8gYnJhY2tldCIgKSwKCjQxOTg3ID0+IGFycmF5KCAnTmFtZScgPT4gIldoaXRlIEJhbGFuY2UiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJMb29rdXAiLAogICAgICAgICAgICAgICAgMCA9PiAiQXV0byB3aGl0ZSBiYWxhbmNlIiwKICAgICAgICAgICAgICAgIDEgPT4gIk1hbnVhbCB3aGl0ZSBiYWxhbmNlIiApLAoKNDE5ODggPT4gYXJyYXkoICdOYW1lJyA9PiAiRGlnaXRhbCBab29tIFJhdGlvIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnID0+ICIgKCBaZXJvID0gRGlnaXRhbCBab29tIE5vdCBVc2VkICkiICksCgo0MTk4OSA9PiBhcnJheSggJ05hbWUnID0+ICJFcXVpdmFsZW50IEZvY2FsIExlbmd0aCBJbiAzNW1tIEZpbG0iLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gIm1tIiApLAoKNDE5OTAgPT4gYXJyYXkoICdOYW1lJyA9PiAiU2NlbmUgQ2FwdHVyZSBUeXBlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDAgPT4gIlN0YW5kYXJkIiwKICAgICAgICAgICAgICAgIDEgPT4gIkxhbmRzY2FwZSIsCiAgICAgICAgICAgICAgICAyID0+ICJQb3J0cmFpdCIsCiAgICAgICAgICAgICAgICAzID0+ICJOaWdodCBzY2VuZSIgKSwKCjQxOTkxID0+IGFycmF5KCAnTmFtZScgPT4gIkdhaW4gQ29udHJvbCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAwID0+ICJOb25lIiwKICAgICAgICAgICAgICAgIDEgPT4gIkxvdyBnYWluIHVwIiwKICAgICAgICAgICAgICAgIDIgPT4gIkhpZ2ggZ2FpbiB1cCIsCiAgICAgICAgICAgICAgICAzID0+ICJMb3cgZ2FpbiBkb3duIiwKICAgICAgICAgICAgICAgIDQgPT4gIkhpZ2ggZ2FpbiBkb3duIiApLAoKNDE5OTIgPT4gYXJyYXkoICdOYW1lJyA9PiAiQ29udHJhc3QiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJMb29rdXAiLAogICAgICAgICAgICAgICAgMCA9PiAiTm9ybWFsIiwKICAgICAgICAgICAgICAgIDEgPT4gIlNvZnQiLAogICAgICAgICAgICAgICAgMiA9PiAiSGFyZCIgKSwKCjQxOTkzID0+IGFycmF5KCAnTmFtZScgPT4gIlNhdHVyYXRpb24iLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJMb29rdXAiLAogICAgICAgICAgICAgICAgMCA9PiAiTm9ybWFsIiwKICAgICAgICAgICAgICAgIDEgPT4gIkxvdyBzYXR1cmF0aW9uIiwKICAgICAgICAgICAgICAgIDIgPT4gIkhpZ2ggc2F0dXJhdGlvbiIgKSwKCjQxOTk0ID0+IGFycmF5KCAnTmFtZScgPT4gIlNoYXJwbmVzcyIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAwID0+ICJOb3JtYWwiLAogICAgICAgICAgICAgICAgMSA9PiAiU29mdCIsCiAgICAgICAgICAgICAgICAyID0+ICJIYXJkIiApLAoKNDE5OTUgPT4gYXJyYXkoICdOYW1lJyA9PiAiRGV2aWNlIFNldHRpbmcgRGVzY3JpcHRpb24iLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApLAoKNDE5OTYgPT4gYXJyYXkoICdOYW1lJyA9PiAiU3ViamVjdCBEaXN0YW5jZSBSYW5nZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAwID0+ICJVbmtub3duIiwKICAgICAgICAgICAgICAgIDEgPT4gIk1hY3JvIiwKICAgICAgICAgICAgICAgIDIgPT4gIkNsb3NlIHZpZXciLAogICAgICAgICAgICAgICAgMyA9PiAiRGlzdGFudCB2aWV3IiApLAoKNDIwMTYgPT4gYXJyYXkoICdOYW1lJyA9PiAiSW1hZ2UgVW5pcXVlIElEIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiU3RyaW5nIiApLAoKCgovLyAgMTEgID0+ICJBQ0RDb21tZW50IiwKLy8gIDI1NSA9PiAiTmV3U3ViZmlsZVR5cGUiCgoKKSwKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiBJbnRlcm9wZXJhYmlsaXR5IFRhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKIkludGVyb3BlcmFiaWxpdHkiID0+IGFycmF5KAoKMSA9PiBhcnJheSggICAgICdOYW1lJyA9PiAiSW50ZXJvcGVyYWJpbGl0eSBJbmRleCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjIgPT4gYXJyYXkoICAgICAnTmFtZScgPT4gIkludGVyb3BlcmFiaWxpdHkgVmVyc2lvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjQwOTYgPT4gYXJyYXkoICAnTmFtZScgPT4gIlJlbGF0ZWQgSW1hZ2UgRmlsZSBGb3JtYXQiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgo0MDk3ID0+IGFycmF5KCAgJ05hbWUnID0+ICJSZWxhdGVkIEltYWdlIEZpbGUgV2lkdGgiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gInBpeGVscyIgKSwKCjQwOTggPT4gYXJyYXkoICAnTmFtZScgPT4gIlJlbGF0ZWQgSW1hZ2UgRmlsZSBMZW5ndGgiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gInBpeGVscyAiICkKCiksCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qIEdQUyBUYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoiR1BTIiA9PiBhcnJheSgKCjAgPT4gYXJyYXkoICAgICAnTmFtZScgPT4gIkdQUyBUYWcgVmVyc2lvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiKGUuZy46IDIuMi4wLjAgPSBWZXJzaW9uIDIuMiApIiApLAoKMSA9PiBhcnJheSggICAgICdOYW1lJyA9PiAiTm9ydGggb3IgU291dGggTGF0aXR1ZGUiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgoyID0+IGFycmF5KCAgICAgJ05hbWUnID0+ICJMYXRpdHVkZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiKERlZ3JlZXMgTWludXRlcyBTZWNvbmRzIE5vcnRoIG9yIFNvdXRoKSIgKSwKCjMgPT4gYXJyYXkoICAgICAnTmFtZScgPT4gIkVhc3Qgb3IgV2VzdCBMb25naXR1ZGUiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgo0ID0+IGFycmF5KCAgICAgJ05hbWUnID0+ICJMb25naXR1ZGUiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gIihEZWdyZWVzIE1pbnV0ZXMgU2Vjb25kcyBFYXN0IG9yIFdlc3QpIiApLAoKNSA9PiBhcnJheSggICAgICdOYW1lJyA9PiAiQWx0aXR1ZGUgUmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDAgPT4gIlNlYSBMZXZlbCIsCiAgICAgICAgICAgICAgICAxID0+ICJTZWEgbGV2ZWwgcmVmZXJlbmNlIChuZWdhdGl2ZSB2YWx1ZSkiICksCgo2ID0+IGFycmF5KCAgICAgJ05hbWUnID0+ICJBbHRpdHVkZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiTWV0cmVzIHdpdGggcmVzcGVjdCB0byBBbHRpdHVkZSBSZWZlcmVuY2UiICksCgo3ID0+IGFycmF5KCAgICAgJ05hbWUnID0+ICJHUFMgVGltZSAoYXRvbWljIGNsb2NrKSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiKEhvdXJzIE1pbnV0ZXMgU2Vjb25kcykiICksCgo4ID0+IGFycmF5KCAgICAgJ05hbWUnID0+ICJHUFMgU2F0ZWxsaXRlcyB1c2VkIGZvciBNZWFzdXJlbWVudCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjkgPT4gYXJyYXkoICAgICAnTmFtZScgPT4gIkdQUyBSZWNlaXZlciBTdGF0dXMiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJMb29rdXAiLAogICAgICAgICAgICAgICAgJ0EnID0+ICJNZWFzdXJlbWVudCBpbiBwcm9ncmVzcyIsICAgICAgICAgIC8vIENoYW5nZTogRml4ZWQgdGFnIHZhbHVlcyBhcyBvZiB2ZXJzaW9uIDEuMTEKICAgICAgICAgICAgICAgICdWJyA9PiAiTWVhc3VyZW1lbnQgSW50ZXJvcGVyYWJpbGl0eSIgKSwKCjEwID0+IGFycmF5KCAgICAnTmFtZScgPT4gIkdQUyBNZWFzdXJlbWVudCBNb2RlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDIgPT4gIjItZGltZW5zaW9uYWwgbWVhc3VyZW1lbnQiLCAgICAgICAgIC8vIENoYW5nZTogRml4ZWQgdGFnIHZhbHVlcyBhcyBvZiB2ZXJzaW9uIDEuMTEKICAgICAgICAgICAgICAgIDMgPT4gIjMtZGltZW5zaW9uYWwgbWVhc3VyZW1lbnQiICksCgoxMSA9PiBhcnJheSggICAgJ05hbWUnID0+ICJNZWFzdXJlbWVudCBQcmVjaXNpb24iLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gIihEYXRhIERlZ3JlZSBvZiBQcmVjaXNpb24sIEhvcml6b250YWwgZm9yIDJELCBQb3NpdGlvbiBmb3IgM0QpIiApLAoKMTIgPT4gYXJyYXkoICAgICdOYW1lJyA9PiAiU3BlZWQgVW5pdCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAnSycgPT4gIktpbG9tZXRlcnMgcGVyIEhvdXIiLCAgICAgICAgICAgIC8vIENoYW5nZTogRml4ZWQgdGFnIHZhbHVlcyBhcyBvZiB2ZXJzaW9uIDEuMTEKICAgICAgICAgICAgICAgICdNJyA9PiAiTWlsZXMgcGVyIEhvdXIiLAogICAgICAgICAgICAgICAgJ04nID0+ICJLbm90cyIgKSwKCjEzID0+IGFycmF5KCAgICAnTmFtZScgPT4gIlNwZWVkIG9mIEdQUyByZWNlaXZlciIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiU3BlZWQgVW5pdHMiICksCgoxNCA9PiBhcnJheSggICAgJ05hbWUnID0+ICJSZWZlcmVuY2UgZm9yIGRpcmVjdGlvbiBvZiBNb3ZlbWVudCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlOiBGaXhlZCB0YWcgdmFsdWVzIGFzIG9mIHZlcnNpb24gMS4xMQogICAgICAgICAgICAgICAgJ1QnID0+ICJUcnVlIE5vcnRoIiwKICAgICAgICAgICAgICAgICdNJyA9PiAiTWFnbmV0aWMgTm9ydGgiICksCgoxNSA9PiBhcnJheSggICAgJ05hbWUnID0+ICJEaXJlY3Rpb24gb2YgTW92ZW1lbnQiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiwKICAgICAgICAgICAgICAgICdVbml0cycgPT4gIkRlZ3JlZXMgcmVsYXRpdmUgdG8gTW92ZW1lbnQgRGlyZWN0aW9uIFJlZmVyZW5jZSIgKSwKCjE2ID0+IGFycmF5KCAgICAnTmFtZScgPT4gIlJlZmVyZW5jZSBmb3IgRGlyZWN0aW9uIG9mIEltYWdlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgICdUJyA9PiAiVHJ1ZSBOb3J0aCIsICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2U6IEZpeGVkIHRhZyB2YWx1ZXMgYXMgb2YgdmVyc2lvbiAxLjExCiAgICAgICAgICAgICAgICAnTScgPT4gIk1hZ25ldGljIE5vcnRoIiApLAoKMTcgPT4gYXJyYXkoICAgICdOYW1lJyA9PiAiRGlyZWN0aW9uIG9mIEltYWdlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnID0+ICJEZWdyZWVzIHJlbGF0aXZlIHRvIEltYWdlIERpcmVjdGlvbiBSZWZlcmVuY2UiICksCgoxOCA9PiBhcnJheSggICAgJ05hbWUnID0+ICJHZW9kZXRpYyBTdXJ2ZXkgRGF0dW0gVXNlZCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjE5ID0+IGFycmF5KCAgICAnTmFtZScgPT4gIkRlc3RpbmF0aW9uIC0gTm9ydGggb3IgU291dGggTGF0aXR1ZGUiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdHJpbmciICksCgoyMCA9PiBhcnJheSggICAgJ05hbWUnID0+ICJMYXRpdHVkZSBvZiBEZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiKERlZ3JlZXMgTWludXRlcyBTZWNvbmRzIE5vcnRoIG9yIFNvdXRoKSIgKSwKCjIxID0+IGFycmF5KCAgICAnTmFtZScgPT4gIkRlc3RpbmF0aW9uIC0gRWFzdCBvciBXZXN0IExvbmdpdHVkZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjIyID0+IGFycmF5KCAgICAnTmFtZScgPT4gIkxvbmdpdHVkZSBvZiBEZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiKERlZ3JlZXMgTWludXRlcyBTZWNvbmRzIEVhc3Qgb3IgV2VzdCkiICksCgoyMyA9PiBhcnJheSggICAgJ05hbWUnID0+ICJSZWZlcmVuY2UgZm9yIEJlYXJpbmcgb2YgRGVzdGluYXRpb24iLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJMb29rdXAiLAogICAgICAgICAgICAgICAgJ1QnID0+ICJUcnVlIE5vcnRoIiwgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZTogRml4ZWQgdGFnIHZhbHVlcyBhcyBvZiB2ZXJzaW9uIDEuMTEKICAgICAgICAgICAgICAgICdNJyA9PiAiTWFnbmV0aWMgTm9ydGgiICksCgoyNCA9PiBhcnJheSggICAgJ05hbWUnID0+ICJCZWFyaW5nIG9mIERlc3RpbmF0aW9uIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnID0+ICJEZWdyZWVzIHJlbGF0aXZlIHRvIERlc3RpbmF0aW9uIEJlYXJpbmcgUmVmZXJlbmNlIiApLAoKMjUgPT4gYXJyYXkoICAgICdOYW1lJyA9PiAiVW5pdHMgZm9yIERpc3RhbmNlIHRvIERlc3RpbmF0aW9uIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgICdLJyA9PiAiS2lsb21ldHJlcyIsICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2U6IEZpeGVkIHRhZyB2YWx1ZXMgYXMgb2YgdmVyc2lvbiAxLjExCiAgICAgICAgICAgICAgICAnTScgPT4gIk1pbGVzIiwKICAgICAgICAgICAgICAgICdOJyA9PiAiTmF1dGljYWwgTWlsZXMiICksCgoyNiA9PiBhcnJheSggICAgJ05hbWUnID0+ICJEaXN0YW5jZSB0byBEZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIk51bWVyaWMiLAogICAgICAgICAgICAgICAgJ1VuaXRzJyA9PiAiRGVzdGluYXRpb24gRGlzdGFuY2UgVW5pdHMiICksCgoyNyA9PiBhcnJheSggICAgJ05hbWUnID0+ICJOYW1lIG9mIEdQUyBQcm9jZXNzaW5nIE1ldGhvZCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkNoYXJhY3RlciBDb2RlZCBTdHJpbmciICksCgoyOCA9PiBhcnJheSggICAgJ05hbWUnID0+ICJOYW1lIG9mIEdQUyBBcmVhIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiQ2hhcmFjdGVyIENvZGVkIFN0cmluZyIgKSwKCjI5ID0+IGFycmF5KCAgICAnTmFtZScgPT4gIkdQUyBEYXRlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIsCiAgICAgICAgICAgICAgICAnVW5pdHMnPT4gIiAoRm9ybWF0OiBZWVlZOk1NOkREIEhIOm1tOlNTKSIgKSwKCjMwID0+IGFycmF5KCAgICAnTmFtZScgPT4gIkdQUyBEaWZmZXJlbnRpYWwgQ29ycmVjdGlvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAwID0+ICJNZWFzdXJlbWVudCB3aXRob3V0IGRpZmZlcmVudGlhbCBjb3JyZWN0aW9uIiwKICAgICAgICAgICAgICAgIDEgPT4gIkRpZmZlcmVudGlhbCBjb3JyZWN0aW9uIGFwcGxpZWQiICksCgopLAoKCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogTUVUQSAoQXBwMykgVGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiJNZXRhIiA9PiBhcnJheSgKCgo1MDAwMCA9PiBhcnJheSggJ05hbWUnID0+ICJDYXB0dXJlRGV2aWNlLkZpbG1Qcm9kdWN0Q29kZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDAwMSA9PiBhcnJheSggJ05hbWUnID0+ICJEaWdpdGFsUHJvY2Vzcy5JbWFnZVNvdXJjZUVLIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiVW5rbm93biIgKSwKCjUwMDAyID0+IGFycmF5KCAnTmFtZScgPT4gIkNhcHR1cmVDb25kaXRpb25zLlBBUiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDAwMyA9PiBhcnJheSggJ05hbWUnID0+ICJDYXB0dXJlRGV2aWNlLkNhbWVyYU93bmVyLkVLIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiQ2hhcmFjdGVyIENvZGVkIFN0cmluZyIgKSwKCjUwMDA0ID0+IGFycmF5KCAnTmFtZScgPT4gIkNhcHR1cmVEZXZpY2UuU2VyaWFsTnVtYmVyLkNhbWVyYSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDAwNSA9PiBhcnJheSggJ05hbWUnID0+ICJTY2VuZUNvbnRlbnQuR3JvdXBDYXB0aW9uLlVzZXJTZWxlY3RHcm91cFRpdGxlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiVW5rbm93biIgKSwKCjUwMDA2ID0+IGFycmF5KCAnTmFtZScgPT4gIk91dHB1dE9yZGVyLkluZm9ybWF0aW9uLkRlYWxlcklETnVtYmVyIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiVW5rbm93biIgKSwKCjUwMDA3ID0+IGFycmF5KCAnTmFtZScgPT4gIkNhcHR1cmVEZXZpY2UuRklEIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiVW5rbm93biIgKSwKCjUwMDA4ID0+IGFycmF5KCAnTmFtZScgPT4gIk91dHB1dE9yZGVyLkluZm9ybWF0aW9uLkVudmVsb3BlTnVtYmVyIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiVW5rbm93biIgKSwKCjUwMDA5ID0+IGFycmF5KCAnTmFtZScgPT4gIk91dHB1dE9yZGVyLlNpbXBsZVJlbmRlckluc3QuRnJhbWVOdW1iZXIiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApLAoKNTAwMTAgPT4gYXJyYXkoICdOYW1lJyA9PiAiQ2FwdHVyZURldmljZS5GaWxtQ2F0ZWdvcnkiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApLAoKNTAwMTEgPT4gYXJyYXkoICdOYW1lJyA9PiAiQ2FwdHVyZURldmljZS5GaWxtR2VuY29kZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDAxMiA9PiBhcnJheSggJ05hbWUnID0+ICJDYXB0dXJlRGV2aWNlLlNjYW5uZXIuTW9kZWxBbmRWZXJzaW9uIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiVW5rbm93biIgKSwKCjUwMDEzID0+IGFycmF5KCAnTmFtZScgPT4gIkNhcHR1cmVEZXZpY2UuRmlsbVNpemUiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApLAoKNTAwMTQgPT4gYXJyYXkoICdOYW1lJyA9PiAiRGlnaXRhbFByb2Nlc3MuSGlzdG9yeS5TQkFSR0JTaGlmdHMiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApLAoKNTAwMTUgPT4gYXJyYXkoICdOYW1lJyA9PiAiRGlnaXRhbFByb2Nlc3MuSGlzdG9yeS5TQkFJbnB1dEltYWdlQ29sb3Vyc3BhY2UiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApLAoKNTAwMTYgPT4gYXJyYXkoICdOYW1lJyA9PiAiRGlnaXRhbFByb2Nlc3MuSGlzdG9yeS5TQkFJbnB1dEltYWdlQml0RGVwdGgiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApLAoKNTAwMTcgPT4gYXJyYXkoICdOYW1lJyA9PiAiRGlnaXRhbFByb2Nlc3MuSGlzdG9yeS5TQkFFeHBvc3VyZVJlY29yZCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDAxOCA9PiBhcnJheSggJ05hbWUnID0+ICJEaWdpdGFsUHJvY2Vzcy5IaXN0b3J5LlVzZXJBZGpTQkFSR0JTaGlmdHMiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApLAoKNTAwMTkgPT4gYXJyYXkoICdOYW1lJyA9PiAiRGlnaXRhbFByb2Nlc3MuSW1hZ2VSb3RhdGlvblN0YXR1cyIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDAyMCA9PiBhcnJheSggJ05hbWUnID0+ICJEaWdpdGFsUHJvY2Vzcy5Sb2xsR3VpZC5FbGVtZW50cyIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDAyMSA9PiBhcnJheSggJ05hbWUnID0+ICJJbWFnZUNvbnRhaW5lci5NZXRhZGF0YU51bWJlciIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlN0cmluZyIgKSwKCjUwMDIyID0+IGFycmF5KCAnTmFtZScgPT4gIkRpZ2l0YWxQcm9jZXNzLkhpc3RvcnkuRWRpdFRhZ0FycmF5IiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiVW5rbm93biIgKSwKCjUwMDIzID0+IGFycmF5KCAnTmFtZScgPT4gIkNhcHR1cmVDb25kaXRpb25zLk1hZ25pZmljYXRpb24iLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApLAoKNTAwMjggPT4gYXJyYXkoICdOYW1lJyA9PiAiQ2FwdHVyZURldmljZS5OYXRpdmVQaHlzaWNhbFhSZXNvbHV0aW9uIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiVW5rbm93biIgKSwKCjUwMDI5ID0+IGFycmF5KCAnTmFtZScgPT4gIkNhcHR1cmVEZXZpY2UuTmF0aXZlUGh5c2ljYWxZUmVzb2x1dGlvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDAzMCA9PiBhcnJheSggJ05hbWUnID0+ICJLb2RhayBTcGVjaWFsIEVmZmVjdHMgSUZEIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiU3ViSUZEIiwKICAgICAgICAgICAgICAgICdUYWdzIE5hbWUnID0+ICJLb2Rha1NwZWNpYWxFZmZlY3RzIiApLAoKNTAwMzEgPT4gYXJyYXkoICdOYW1lJyA9PiAiS29kYWsgQm9yZGVycyBJRkQiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJTdWJJRkQiLAogICAgICAgICAgICAgICAgJ1RhZ3MgTmFtZScgPT4gIktvZGFrQm9yZGVycyIgKSwKCjUwMDQyID0+IGFycmF5KCAnTmFtZScgPT4gIkNhcHR1cmVEZXZpY2UuTmF0aXZlUGh5c2ljYWxSZXNvbHV0aW9uVW5pdCIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDIwMCA9PiBhcnJheSggJ05hbWUnID0+ICJJbWFnZUNvbnRhaW5lci5Tb3VyY2VJbWFnZURpcmVjdG9yeSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDIwMSA9PiBhcnJheSggJ05hbWUnID0+ICJJbWFnZUNvbnRhaW5lci5Tb3VyY2VJbWFnZUZpbGVOYW1lIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiVW5rbm93biIgKSwKCjUwMjAyID0+IGFycmF5KCAnTmFtZScgPT4gIkltYWdlQ29udGFpbmVyLlNvdXJjZUltYWdlVm9sdW1lTmFtZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIlVua25vd24iICksCgo1MDI4NCA9PiBhcnJheSggJ05hbWUnID0+ICJDYXB0dXJlQ29uZGl0aW9ucy5QcmludFF1YW50aXR5IiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiVW5rbm93biIgKSwKCjUwMjg2ID0+IGFycmF5KCAnTmFtZScgPT4gIkRpZ2l0YWxQcm9jZXNzLkltYWdlUHJpbnRTdGF0dXMiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJVbmtub3duIiApCgopLAoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogS29kYWsgU3BlY2lhbCBFZmZlY3RzIElGRCBUYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiJLb2Rha1NwZWNpYWxFZmZlY3RzIiA9PiBhcnJheSgKCjAgPT4gYXJyYXkoICAgICAnTmFtZScgPT4gIkRpZ2l0YWwgRWZmZWN0cyBWZXJzaW9uIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIgKSwKCjEgPT4gYXJyYXkoICAgICAnTmFtZScgPT4gIkRpZ2l0YWwgRWZmZWN0cyBOYW1lIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiQ2hhcmFjdGVyIENvZGVkIFN0cmluZyIgKSwKCjIgPT4gYXJyYXkoICAgICAnTmFtZScgPT4gIkRpZ2l0YWwgRWZmZWN0cyBUeXBlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDAgPT4gIk5vbmUgQXBwbGllZCIgKQoKKSwKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiBLb2RhayBCb3JkZXJzIElGRCBUYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKIktvZGFrQm9yZGVycyIgPT4gYXJyYXkoCgowID0+IGFycmF5KCAgICAgJ05hbWUnID0+ICJCb3JkZXJzIFZlcnNpb24iLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJOdW1lcmljIiApLAoKMSA9PiBhcnJheSggICAgICdOYW1lJyA9PiAiQm9yZGVyIE5hbWUiLAogICAgICAgICAgICAgICAgJ1R5cGUnID0+ICJDaGFyYWN0ZXIgQ29kZWQgU3RyaW5nIiApLAoKMiA9PiBhcnJheSggICAgICdOYW1lJyA9PiAiQm9yZGVyIElEIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTnVtZXJpYyIgKSwKCjMgPT4gYXJyYXkoICAgICAnTmFtZScgPT4gIkJvcmRlciBMb2NhdGlvbiIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIgKSwKCjQgPT4gYXJyYXkoICAgICAnTmFtZScgPT4gIkJvcmRlciBUeXBlIiwKICAgICAgICAgICAgICAgICdUeXBlJyA9PiAiTG9va3VwIiwKICAgICAgICAgICAgICAgIDAgPT4gIk5vbmUiICksCgo4ID0+IGFycmF5KCAgICAgJ05hbWUnID0+ICJXYXRlcm1hcmsgVHlwZSIsCiAgICAgICAgICAgICAgICAnVHlwZScgPT4gIkxvb2t1cCIsCiAgICAgICAgICAgICAgICAwID0+ICJOb25lIiApCgopLAoKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgR2xvYmFsIFZhcmlhYmxlOiAgICAgSUZEX1RhZ19EZWZpbml0aW9ucwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgo/Pg==');
expand_3537250845($outputDir, 'includes/toolkit/IPTC.php', 'PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZpbGVuYW1lOiAgICAgSVBUQy5waHAKKgoqIERlc2NyaXB0aW9uOiAgUHJvdmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIElQVEMtTkFBIEluZm9ybWF0aW9uCiogICAgICAgICAgICAgICBJbnRlcmNoYW5nZSBNb2RlbCBtZXRhZGF0YQoqCiogQXV0aG9yOiAgICAgICBFdmFuIEh1bnRlcgoqCiogRGF0ZTogICAgICAgICAyMy83LzIwMDQKKgoqIFByb2plY3Q6ICAgICAgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdAoqCiogUmV2aXNpb246ICAgICAxLjEwCioKKiBDaGFuZ2VzOiAgICAgIDEuMDAgLT4gMS4wMSA6IGNoYW5nZWQgZ2V0X0lQVEMgdG8gcmV0dXJuIHBhcnRpYWwgZGF0YSB3aGVuIGVycm9yIG9jY3VycwoqICAgICAgICAgICAgICAgMS4wMSAtPiAxLjEwIDogY2hhbmdlZCBwdXRfSVBUQyB0byBjaGVjayBpZiB0aGUgaW5jb21pbmcgSVBUQyBibG9jayBpcyB2YWxpZAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCBJbnRlcnByZXRfSVBUQ190b19IVE1MLCBhZGRpbmcgbmwyYnIgZnVuY3Rpb25zIGZvciBlYWNoIHRleHQgZmllbGQsCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyB0aGF0IG11bHRpbGluZSB0ZXh0IGRpc3BsYXlzIHByb3Blcmx5CioKKiBVUkw6ICAgICAgICAgIGh0dHA6Ly9lbGVjdHJvbmljcy5vemhpa2VyLmNvbQoqCiogQ29weXJpZ2h0OiAgICBDb3B5cmlnaHQgRXZhbiBIdW50ZXIgMjAwNAoqCiogTGljZW5zZTogICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdC4KKgoqICAgICAgICAgICAgICAgVGhlIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbgoqICAgICAgICAgICAgICAgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQoqICAgICAgICAgICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiogICAgICAgICAgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgoqICAgICAgICAgICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKgoqICAgICAgICAgICAgICAgVGhlIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUKKiAgICAgICAgICAgICAgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dAoqICAgICAgICAgICAgICAgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwoqICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQoqICAgICAgICAgICAgICAgZm9yIG1vcmUgZGV0YWlscy4KKgoqICAgICAgICAgICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiogICAgICAgICAgICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQ7IGlmIG5vdCwKKiAgICAgICAgICAgICAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQoqICAgICAgICAgICAgICAgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCioKKiAgICAgICAgICAgICAgIElmIHlvdSByZXF1aXJlIGEgZGlmZmVyZW50IGxpY2Vuc2UgZm9yIGNvbW1lcmNpYWwgb3Igb3RoZXIKKiAgICAgICAgICAgICAgIHB1cnBvc2VzLCBwbGVhc2UgY29udGFjdCB0aGUgYXV0aG9yOiBldmFuQG96aGlrZXIuY29tCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8vIFRPRE86IE5vdCBhbGwgb2YgdGhlIElQVEMgZmllbGRzIGhhdmUgYmVlbiB0ZXN0ZWQgcHJvcGVybHkKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgZ2V0X0lQVEMKKgoqIERlc2NyaXB0aW9uOiAgRXh0cmFjdHMgSVBUQy1OQUEgSUlNIGRhdGEgZnJvbSB0aGUgc3RyaW5nIHByb3ZpZGVkLCBhbmQgcmV0dXJucwoqICAgICAgICAgICAgICAgdGhlIGluZm9ybWF0aW9uIGFzIGFuIGFycmF5CioKKiBQYXJhbWV0ZXJzOiAgIERhdGFfU3RyIC0gdGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBJUFRDLU5BQSBJSU0gcmVjb3Jkcy4gTXVzdAoqICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBleGFjdCBsZW5ndGggb2YgdGhlIElQVEMtTkFBIElJTSBkYXRhLgoqCiogUmV0dXJuczogICAgICBPdXRwdXRBcnJheSAtIEFycmF5IG9mIElQVEMtTkFBIElJTSByZWNvcmRzCiogICAgICAgICAgICAgICBGQUxTRSAtIElmIGFuIGVycm9yIG9jY3VyZWQgaW4gZGVjb2RpbmcKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBnZXRfSVBUQyggJERhdGFfU3RyICkKewoKICAgICAgICAvLyBJbml0aWFsaXNlIHRoZSBzdGFydCBwb3NpdGlvbgogICAgICAgICRwb3MgPSAwOwogICAgICAgIC8vIENyZWF0ZSB0aGUgYXJyYXkgdG8gcmVjZWl2ZSB0aGUgZGF0YQogICAgICAgICRPdXRwdXRBcnJheSA9IGFycmF5KCApOwoKICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIHRoZSBJUFRDIHJlY29yZHMsIGRlY29kaW5nIGFuZCBzdG9yaW5nIHRoZW0KICAgICAgICB3aGlsZSggJHBvcyA8IHN0cmxlbigkRGF0YV9TdHIpICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBUT0RPIC0gRXh0ZW5kZWQgRGF0YXNldCByZWNvcmQgbm90IHN1cHBvcnRlZAoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIHN1ZmZpY2llbnQgZGF0YSBmb3IgcmVhZGluZyB0aGUgcmVjb3JkCiAgICAgICAgICAgICAgICBpZiAoIHN0cmxlbiggc3Vic3RyKCREYXRhX1N0ciwkcG9zKSApIDwgNSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBlbm91Z2ggZGF0YSBsZWZ0IGZvciBhIHJlY29yZCAtIFByb2JhYmx5IGNvcnJ1cHQgZGF0YSAtIEVSUk9SCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZTogY2hhbmdlZCB0byByZXR1cm4gcGFydGlhbCBkYXRhIGFzIG9mIHJldmlzaW9uIDEuMDEKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRPdXRwdXRBcnJheTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBVbnBhY2sgZGF0YSBmcm9tIElQVEMgcmVjb3JkOgogICAgICAgICAgICAgICAgLy8gRmlyc3QgYnl0ZSAtIElQVEMgVGFnIE1hcmtlciAtIGFsd2F5cyAyOAogICAgICAgICAgICAgICAgLy8gU2Vjb25kIGJ5dGUgLSBJUFRDIFJlY29yZCBOdW1iZXIKICAgICAgICAgICAgICAgIC8vIFRoaXJkIGJ5dGUgLSBJUFRDIERhdGFzZXQgTnVtYmVyCiAgICAgICAgICAgICAgICAvLyBGb3VydGggYW5kIGZpZnRoIGJ5dGVzIC0gdHdvIGJ5dGUgc2l6ZSB2YWx1ZQogICAgICAgICAgICAgICAgJGlwdGNfcmF3ID0gdW5wYWNrKCAiQ0lQVENfVGFnX01hcmtlci9DSVBUQ19SZWNvcmRfTm8vQ0lQVENfRGF0YXNldF9Oby9uSVBUQ19TaXplIiwgc3Vic3RyKCREYXRhX1N0ciwkcG9zKSApOwoKICAgICAgICAgICAgICAgIC8vIFNraXAgcG9zaXRpb24gb3ZlciB0aGUgdW5wYWNrZWQgZGF0YQogICAgICAgICAgICAgICAgJHBvcyArPSA1OwoKICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgSVBUQyB0eXBlIHN0cmluZyBlZyAyOjEwNQogICAgICAgICAgICAgICAgJGlwdGN0eXBlID0gc3ByaW50ZiggIiUwMWQ6JTAyZCIsICRpcHRjX3Jhd1snSVBUQ19SZWNvcmRfTm8nXSwgJGlwdGNfcmF3WydJUFRDX0RhdGFzZXRfTm8nXSk7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgc3VmZmljaWVudCBkYXRhIGZvciByZWFkaW5nIHRoZSByZWNvcmQgY29udGVudHMKICAgICAgICAgICAgICAgIGlmICggc3RybGVuKCBzdWJzdHIoICREYXRhX1N0ciwgJHBvcywgJGlwdGNfcmF3WydJUFRDX1NpemUnXSApICkgIT09ICRpcHRjX3Jhd1snSVBUQ19TaXplJ10gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgZW5vdWdoIGRhdGEgbGVmdCBmb3IgdGhlIHJlY29yZCBjb250ZW50IC0gUHJvYmFibHkgY29ycnVwdCBkYXRhIC0gRVJST1IKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlOiBjaGFuZ2VkIHRvIHJldHVybiBwYXJ0aWFsIGRhdGEgYXMgb2YgcmV2aXNpb24gMS4wMQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJE91dHB1dEFycmF5OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgSVBUQyByZWNvcmQgdG8gdGhlIG91dHB1dCBhcnJheQogICAgICAgICAgICAgICAgJE91dHB1dEFycmF5W10gPSBhcnJheSggIklQVENfVHlwZSIgPT4gJGlwdGN0eXBlICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWNOYW1lIiA9PiAkR0xPQkFMU1sgIklQVENfRW50cnlfTmFtZXMiIF1bICRpcHRjdHlwZSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlY0Rlc2MiID0+ICRHTE9CQUxTWyAiSVBUQ19FbnRyeV9EZXNjcmlwdGlvbnMiIF1bICRpcHRjdHlwZSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlY0RhdGEiID0+IHN1YnN0ciggJERhdGFfU3RyLCAkcG9zLCAkaXB0Y19yYXdbJ0lQVENfU2l6ZSddICkgKTsKCiAgICAgICAgICAgICAgICAvLyBTa2lwIG92ZXIgdGhlIElQVEMgcmVjb3JkIGRhdGEKICAgICAgICAgICAgICAgICRwb3MgKz0gJGlwdGNfcmF3WydJUFRDX1NpemUnXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRPdXRwdXRBcnJheTsKCn0KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgZ2V0X0lQVEMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBwdXRfSVBUQwoqCiogRGVzY3JpcHRpb246ICBFbmNvZGVzIGFuIGFycmF5IG9mIElQVEMtTkFBIHJlY29yZHMgaW50byBhIHN0cmluZyBlbmNvZGVkCiogICAgICAgICAgICAgICBhcyBJUFRDLU5BQSBJSU0uIChUaGUgcmV2ZXJzZSBvZiBnZXRfSVBUQykKKgoqIFBhcmFtZXRlcnM6ICAgbmV3X0lQVENfYmxvY2sgLSB0aGUgSVBUQy1OQUEgYXJyYXkgdG8gYmUgZW5jb2RlZC4gU2hvdWxkIGJlCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGF0IHJlY2VpdmVkIGZyb20gZ2V0X0lQVEMKKgoqIFJldHVybnM6ICAgICAgaXB0Y19wYWNrZWRfZGF0YSAtIElQVEMtTkFBIElJTSBlbmNvZGVkIHN0cmluZwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgpmdW5jdGlvbiBwdXRfSVBUQyggJG5ld19JUFRDX2Jsb2NrICkKewogICAgICAgIC8vIENoZWNrIGlmIHRoZSBpbmNvbWluZyBJUFRDIGJsb2NrIGlzIHZhbGlkCiAgICAgICAgaWYgKCAkbmV3X0lQVENfYmxvY2sgPT0gRkFMU0UgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEludmFsaWQgSVBUQyBibG9jayAtIGFib3J0CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQogICAgICAgIC8vIEluaXRpYWxpc2UgdGhlIHBhY2tlZCBvdXRwdXQgZGF0YSBzdHJpbmcKICAgICAgICAkaXB0Y19wYWNrZWRfZGF0YSA9ICIiOwoKICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggcmVjb3JkIGluIHRoZSBuZXcgSVBUQyBibG9jawogICAgICAgIGZvcmVhY2ggKCRuZXdfSVBUQ19ibG9jayBhcyAkcmVjb3JkKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIFJlY29yZCBOdW1iZXIgYW5kIERhdGFzZXQgTnVtYmVyIGZyb20gdGhlIElQVENfVHlwZSBmaWVsZAogICAgICAgICAgICAgICAgbGlzdCgkSVBUQ19SZWNvcmQsICRJUFRDX0RhdGFzZXQpID0gc3NjYW5mKCAkcmVjb3JkWydJUFRDX1R5cGUnXSwgIiVkOiVkIik7CgogICAgICAgICAgICAgICAgLy8gV3JpdGUgdGhlIElQVEMtTkFBIElJTSBUYWcgTWFya2VyLCBSZWNvcmQgTnVtYmVyLCBEYXRhc2V0IE51bWJlciBhbmQgRGF0YSBTaXplIHRvIHRoZSBwYWNrZWQgb3V0cHV0IGRhdGEgc3RyaW5nCiAgICAgICAgICAgICAgICAkaXB0Y19wYWNrZWRfZGF0YSAuPSBwYWNrKCAiQ0NDbiIsIDI4LCAkSVBUQ19SZWNvcmQsICRJUFRDX0RhdGFzZXQsIHN0cmxlbigkcmVjb3JkWydSZWNEYXRhJ10pICk7CgogICAgICAgICAgICAgICAgLy8gV3JpdGUgdGhlIElQVEMtTkFBIElJTSBEYXRhIHRvIHRoZSBwYWNrZWQgb3V0cHV0IGRhdGEgc3RyaW5nCiAgICAgICAgICAgICAgICAkaXB0Y19wYWNrZWRfZGF0YSAuPSAkcmVjb3JkWydSZWNEYXRhJ107CiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIElQVEMtTkFBIElJTSBkYXRhCiAgICAgICAgcmV0dXJuICRpcHRjX3BhY2tlZF9kYXRhOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgcHV0X0lQVEMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIEludGVycHJldF9JUFRDX3RvX0hUTUwKKgoqIERlc2NyaXB0aW9uOiAgR2VuZXJhdGVzIGh0bWwgZGV0YWlsaW5nIHRoZSBjb250ZW50cyBhIElQVEMtTkFBIElJTSBhcnJheQoqICAgICAgICAgICAgICAgd2hpY2ggd2FzIHJldHJpZXZlZCB3aXRoIHRoZSBnZXRfSVBUQyBmdW5jdGlvbgoqCiogUGFyYW1ldGVyczogICBJUFRDX2luZm8gLSB0aGUgSVBUQy1OQUEgSUlNIGFycmF5LGFzIHJlYWQgZnJvbSBnZXRfSVBUQwoqCiogUmV0dXJuczogICAgICBPdXRwdXRTdHIgLSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBIVE1MCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gSW50ZXJwcmV0X0lQVENfdG9fSFRNTCggJElQVENfaW5mbyApCnsKICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgdG8gcmVjZWl2ZSB0aGUgSFRNTAogICAgICAgICRvdXRwdXRfc3RyID0iIjsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIElQVEMKICAgICAgICBpZiAoICRJUFRDX2luZm8gIT09IEZBTFNFICkKICAgICAgICB7CgoKICAgICAgICAgICAgICAgIC8vIEFkZCBIZWFkaW5nIHRvIEhUTUwKICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8aDMgY2xhc3M9XCJJUFRDX01haW5fSGVhZGluZ1wiPklQVEMtTkFBIFJlY29yZDwvaDM+XG4iOwoKICAgICAgICAgICAgICAgIC8vIEFkZCBUYWJsZSB0byBIVE1MCiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiXG48dGFibGUgY2xhc3M9XCJJUFRDX1RhYmxlXCIgYm9yZGVyPTE+XG4iOwoKICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBvZiB0aGUgSVBUQy1OQUEgSUlNIHJlY29yZHMKICAgICAgICAgICAgICAgIGZvcmVhY2goICRJUFRDX2luZm8gYXMgJElQVENfUmVjb3JkICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlY29yZCBpcyBhIGtub3duIElQVEMgZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgJFJlY29yZF9OYW1lID0gJElQVENfUmVjb3JkWydSZWNOYW1lJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFJlY29yZF9OYW1lID09ICIiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlY29yZCBpcyBhbiB1bmtub3duIGZpZWxkIC0gYWRkIG1lc3NhZ2UgdG8gSFRNTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJJUFRDX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIklQVENfQ2FwdGlvbl9DZWxsXCI+VW5rbm93biBJUFRDIGZpZWxkICciLiBodG1sZW50aXRpZXMoICRJUFRDX1JlY29yZFsnSVBUQ19UeXBlJ10gKS4gIicgOjwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+IiAuIG5sMmJyKCBIVE1MX1VURjhfRXNjYXBlKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSApICkgLiI8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlY29yZCBpcyBhIHJlY29nbmlzZWQgSVBUQyBmaWVsZCAtIFByb2Nlc3MgaXQgYWNjb3JkaW5nbHkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggJElQVENfUmVjb3JkWydJUFRDX1R5cGUnXSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiMTowMCI6ICAgIC8vIEVudmVsb3BlIFJlY29yZDpNb2RlbCBWZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIxOjIyIjogICAgLy8gRW52ZWxvcGUgUmVjb3JkOkZpbGUgRm9ybWF0IFZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIklQVENfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSVBUQ19DYXB0aW9uX0NlbGxcIj4kUmVjb3JkX05hbWU8L3RkPjx0ZCBjbGFzcz1cIklQVENfVmFsdWVfQ2VsbFwiPiIgLiBoZXhkZWMoIGJpbjJoZXgoICRJUFRDX1JlY29yZFsnUmVjRGF0YSddICkgKSAuIjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIjE6OTAiOiAgICAvLyBFbnZlbG9wZSBSZWNvcmQ6Q29kZWQgQ2hhcmFjdGVyIFNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiSVBUQ19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJJUFRDX0NhcHRpb25fQ2VsbFwiPiRSZWNvcmRfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+RGVjb2Rpbmcgbm90IHlldCBpbXBsZW1lbnRlZDxicj5cbiAoSGV4IERhdGE6ICIgLiBiaW4yaGV4KCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSApICAuIik8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IGRlY29kaW5nIG9mIElQVEMgcmVjb3JkIDE6OTAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIxOjIwIjogICAgLy8gRW52ZWxvcGUgUmVjb3JkOkZpbGUgRm9ybWF0CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm9ybWF0bm8gPSBoZXhkZWMoIGJpbjJoZXgoICRJUFRDX1JlY29yZFsnUmVjRGF0YSddICkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvb2t1cCBmaWxlIGZvcm1hdCBmcm9tIGxvb2t1cC10YWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMoICRmb3JtYXRubywgJEdMT0JBTFNbICJJUFRDX0ZpbGUgRm9ybWF0cyIgXSApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVudHJ5IHdhcyBmb3VuZCBpbiBsb29rdXAgdGFibGUgLSBhZGQgaXQgdG8gSFRNTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJJUFRDX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIklQVENfQ2FwdGlvbl9DZWxsXCI+RmlsZSBGb3JtYXQ8L3RkPjx0ZCBjbGFzcz1cIklQVENfVmFsdWVfQ2VsbFwiPiIuICRHTE9CQUxTWyAiSVBUQ19GaWxlIEZvcm1hdHMiIF1bJGZvcm1hdG5vXSAuICI8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIG1hdGNoaW5nIGVudHJ5IHdhcyBmb3VuZCBpbiBsb29rdXAgdGFibGUgLSBhZGQgbWVzc2FnZSB0byBodG1sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIklQVENfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSVBUQ19DYXB0aW9uX0NlbGxcIj5GaWxlIEZvcm1hdDwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+VW5rbm93biBGaWxlIEZvcm1hdCAoJGZvcm1hdG5vKTwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIjI6MDAiOiAgICAvLyBBcHBsaWNhdGlvbiBSZWNvcmQ6UmVjb3JkIFZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIklQVENfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSVBUQ19DYXB0aW9uX0NlbGxcIj5JUFRDIFZlcnNpb248L3RkPjx0ZCBjbGFzcz1cIklQVENfVmFsdWVfQ2VsbFwiPiIgLiBoZXhkZWMoIGJpbjJoZXgoICRJUFRDX1JlY29yZFsnUmVjRGF0YSddICkgKSAuIjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIjI6NDIiOiAgICAvLyBBcHBsaWNhdGlvbiBSZWNvcmQ6IEFjdGlvbiBBZHZpc2VkCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb291cCBBY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSA9PSAiMDEiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJJUFRDX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIklQVENfQ2FwdGlvbl9DZWxsXCI+JFJlY29yZF9OYW1lPC90ZD48dGQgY2xhc3M9XCJJUFRDX1ZhbHVlX0NlbGxcIj5LaWxsPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSA9PSAiMDIiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJJUFRDX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIklQVENfQ2FwdGlvbl9DZWxsXCI+JFJlY29yZF9OYW1lPC90ZD48dGQgY2xhc3M9XCJJUFRDX1ZhbHVlX0NlbGxcIj5SZXBsYWNlPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSA9PSAiMDMiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJJUFRDX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIklQVENfQ2FwdGlvbl9DZWxsXCI+JFJlY29yZF9OYW1lPC90ZD48dGQgY2xhc3M9XCJJUFRDX1ZhbHVlX0NlbGxcIj5BcHBlbmQ8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoICRJUFRDX1JlY29yZFsnUmVjRGF0YSddID09ICIwNCIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIklQVENfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSVBUQ19DYXB0aW9uX0NlbGxcIj4kUmVjb3JkX05hbWU8L3RkPjx0ZCBjbGFzcz1cIklQVENfVmFsdWVfQ2VsbFwiPlJlZmVyZW5jZTwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5rbm93biBBY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiSVBUQ19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJJUFRDX0NhcHRpb25fQ2VsbFwiPiRSZWNvcmRfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+VW5rbm93biA6ICIgLiBubDJiciggSFRNTF9VVEY4X0VzY2FwZSggJElQVENfUmVjb3JkWydSZWNEYXRhJ10gKSApIC4iPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIyOjA4IjogICAgLy8gQXBwbGljYXRpb24gUmVjb3JkOkVkaXRvcmlhbCBVcGRhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSA9PSAiMDEiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZGl0aW9uYWwgTGFuZ3VhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiSVBUQ19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJJUFRDX0NhcHRpb25fQ2VsbFwiPiRSZWNvcmRfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+QWRkaXRpb25hbCBsYW5ndWFnZTwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5rbm93biBWYWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJJUFRDX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIklQVENfQ2FwdGlvbl9DZWxsXCI+JFJlY29yZF9OYW1lPC90ZD48dGQgY2xhc3M9XCJJUFRDX1ZhbHVlX0NlbGxcIj5Vbmtub3duIDogIiAuIG5sMmJyKCBIVE1MX1VURjhfRXNjYXBlKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSApICkgLiI8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIjI6MzAiOiAgICAvLyBBcHBsaWNhdGlvbiBSZWNvcmQ6UmVsZWFzZSBEYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIyOjM3IjogICAgLy8gQXBwbGljYXRpb24gUmVjb3JkOkV4cGlyYXRpb24gRGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiMjo0NyI6ICAgIC8vIEFwcGxpY2F0aW9uIFJlY29yZDpSZWZlcmVuY2UgRGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiMjo1NSI6ICAgIC8vIEFwcGxpY2F0aW9uIFJlY29yZDpEYXRlIENyZWF0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIjI6NjIiOiAgICAvLyBBcHBsaWNhdGlvbiBSZWNvcmQ6RGlnaXRhbCBDcmVhdGlvbiBEYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIxOjcwIjogICAgLy8gRW52ZWxvcGUgUmVjb3JkOkRhdGUgU2VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0ZV9hcnJheSA9IHVucGFjayggImE0WWVhci9hMk1vbnRoL0EyRGF5IiwgJElQVENfUmVjb3JkWydSZWNEYXRhJ10gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIklQVENfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSVBUQ19DYXB0aW9uX0NlbGxcIj4kUmVjb3JkX05hbWU8L3RkPjx0ZCBjbGFzcz1cIklQVENfVmFsdWVfQ2VsbFwiPiIgLiBubDJiciggSFRNTF9VVEY4X0VzY2FwZSggJGRhdGVfYXJyYXlbJ0RheSddIC4gIi8iIC4gJGRhdGVfYXJyYXlbJ01vbnRoJ10gLiAiLyIgLiAkZGF0ZV9hcnJheVsnWWVhciddICkgKSAuIjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIjI6MzUiOiAgICAvLyBBcHBsaWNhdGlvbiBSZWNvcmQ6UmVsZWFzZSBUaW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIyOjM4IjogICAgLy8gQXBwbGljYXRpb24gUmVjb3JkOkV4cGlyYXRpb24gVGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiMjo2MCI6ICAgIC8vIEFwcGxpY2F0aW9uIFJlY29yZDpUaW1lIENyZWF0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIjI6NjMiOiAgICAvLyBBcHBsaWNhdGlvbiBSZWNvcmQ6RGlnaXRhbCBDcmVhdGlvbiBUaW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIxOjgwIjogICAgLy8gRW52ZWxvcGUgUmVjb3JkOlRpbWUgU2VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZV9hcnJheSA9IHVucGFjayggImEySG91ci9hMk1pbnV0ZS9BMlNlY29uZC9BUGx1c01pbnVzL0E0VGltZXpvbmUiLCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiSVBUQ19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJJUFRDX0NhcHRpb25fQ2VsbFwiPiRSZWNvcmRfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+IiAuIG5sMmJyKCBIVE1MX1VURjhfRXNjYXBlKCAkdGltZV9hcnJheVsnSG91ciddIC4gIjoiIC4gJHRpbWVfYXJyYXlbJ01pbnV0ZSddIC4gIjoiIC4gJHRpbWVfYXJyYXlbJ1NlY29uZCddIC4gIiAiLiAkdGltZV9hcnJheVsnUGx1c01pbnVzJ10gLiAkdGltZV9hcnJheVsnVGltZXpvbmUnXSApICkgLiI8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIyOjc1IjogICAgLy8gQXBwbGljYXRpb24gUmVjb3JkOk9iamVjdCBDeWNsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb29rdXAgVmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSA9PSAiYSIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIklQVENfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSVBUQ19DYXB0aW9uX0NlbGxcIj4kUmVjb3JkX05hbWU8L3RkPjx0ZCBjbGFzcz1cIklQVENfVmFsdWVfQ2VsbFwiPk1vcm5pbmc8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoICRJUFRDX1JlY29yZFsnUmVjRGF0YSddID09ICJwIiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiSVBUQ19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJJUFRDX0NhcHRpb25fQ2VsbFwiPiRSZWNvcmRfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+RXZlbmluZzwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICggJElQVENfUmVjb3JkWydSZWNEYXRhJ10gPT0gImIiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJJUFRDX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIklQVENfQ2FwdGlvbl9DZWxsXCI+JFJlY29yZF9OYW1lPC90ZD48dGQgY2xhc3M9XCJJUFRDX1ZhbHVlX0NlbGxcIj5Cb3RoIE1vcm5pbmcgYW5kIEV2ZW5pbmc8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVua25vd24gVmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiSVBUQ19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJJUFRDX0NhcHRpb25fQ2VsbFwiPiRSZWNvcmRfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+VW5rbm93biA6ICIgLiBubDJiciggSFRNTF9VVEY4X0VzY2FwZSggJElQVENfUmVjb3JkWydSZWNEYXRhJ10gKSApIC4iPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIyOjEyNSI6ICAgLy8gQXBwbGljYXRpb24gUmVjb3JkOlJhc3RlcmlzZWQgQ2FwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiSVBUQ19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJJUFRDX0NhcHRpb25fQ2VsbFwiPiRSZWNvcmRfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+NDYweDEyOCBwaXhlbCBibGFjayBhbmQgd2hpdGUgY2FwdGlvbiBpbWFnZTwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBEaXNwbGF5IFJhc3RlcmlzZWQgQ2FwdGlvbiBmb3IgSVBUQyByZWNvcmQgMjoxMjUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIyOjEzMCI6ICAgLy8gQXBwbGljYXRpb24gUmVjb3JkOkltYWdlIFR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9va3VwIE51bWJlciBvZiBDb21wb25lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJElQVENfUmVjb3JkWydSZWNEYXRhJ117MH0gPT0gIjAiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJJUFRDX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIklQVENfQ2FwdGlvbl9DZWxsXCI+JFJlY29yZF9OYW1lPC90ZD48dGQgY2xhc3M9XCJJUFRDX1ZhbHVlX0NlbGxcIj5ObyBPYmplY3RkYXRhIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXXswfSA9PSAiOSIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIklQVENfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSVBUQ19DYXB0aW9uX0NlbGxcIj4kUmVjb3JkX05hbWU8L3RkPjx0ZCBjbGFzcz1cIklQVENfVmFsdWVfQ2VsbFwiPlN1cHBsZW1lbnRhbCBvYmplY3RzIHJlbGF0ZWQgdG8gb3RoZXIgb2JqZWN0ZGF0YSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIklQVENfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSVBUQ19DYXB0aW9uX0NlbGxcIj4kUmVjb3JkX05hbWU8L3RkPjx0ZCBjbGFzcz1cIklQVENfVmFsdWVfQ2VsbFwiPk51bWJlciBvZiBDb2xvdXIgQ29tcG9uZW50cyA6ICIgLiBubDJiciggSFRNTF9VVEY4X0VzY2FwZSggJElQVENfUmVjb3JkWydSZWNEYXRhJ117MH0gKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb29rdXAgY3VycmVudCBvYmplY3RkYXRhIGNvbG91cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRHTE9CQUxTWydJbWFnZVR5cGVfTmFtZXMnXVsgJElQVENfUmVjb3JkWydSZWNEYXRhJ117MX0gXSA9PSAiIiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiLCBVbmtub3duIDogIiAuIG5sMmJyKCBIVE1MX1VURjhfRXNjYXBlKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXXsxfSApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIiwgIiAuIG5sMmJyKCBIVE1MX1VURjhfRXNjYXBlKCAkR0xPQkFMU1snSW1hZ2VUeXBlX05hbWVzJ11bICRJUFRDX1JlY29yZFsnUmVjRGF0YSddezF9IF0gKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIyOjEzMSI6ICAgLy8gQXBwbGljYXRpb24gUmVjb3JkOkltYWdlIE9yaWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvb2t1cCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRJUFRDX1JlY29yZFsnUmVjRGF0YSddID09ICJMIiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiSVBUQ19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJJUFRDX0NhcHRpb25fQ2VsbFwiPiRSZWNvcmRfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+TGFuZHNjYXBlPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSA9PSAiUCIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIklQVENfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSVBUQ19DYXB0aW9uX0NlbGxcIj4kUmVjb3JkX05hbWU8L3RkPjx0ZCBjbGFzcz1cIklQVENfVmFsdWVfQ2VsbFwiPlBvcnRyYWl0PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSA9PSAiUyIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIklQVENfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSVBUQ19DYXB0aW9uX0NlbGxcIj4kUmVjb3JkX05hbWU8L3RkPjx0ZCBjbGFzcz1cIklQVENfVmFsdWVfQ2VsbFwiPlNxdWFyZTwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5rbm93biBPcmllbnRhdGlvbiBWYWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJJUFRDX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIklQVENfQ2FwdGlvbl9DZWxsXCI+JFJlY29yZF9OYW1lPC90ZD48dGQgY2xhc3M9XCJJUFRDX1ZhbHVlX0NlbGxcIj5Vbmtub3duIDogIiAuIG5sMmJyKCBIVE1MX1VURjhfRXNjYXBlKCAkSVBUQ19SZWNvcmRbJ1JlY0RhdGEnXSApICkgLiI8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAvLyBBbGwgb3RoZXIgcmVjb3JkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiSVBUQ19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJJUFRDX0NhcHRpb25fQ2VsbFwiPiRSZWNvcmRfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiSVBUQ19WYWx1ZV9DZWxsXCI+IiAubmwyYnIoIEhUTUxfVVRGOF9Fc2NhcGUoICRJUFRDX1JlY29yZFsnUmVjRGF0YSddICkgKSAuIjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCBUYWJsZSBFbmQgdG8gSFRNTAogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjwvdGFibGU+PGJyPlxuIjsKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiBIVE1MCiAgICAgICAgcmV0dXJuICRvdXRwdXRfc3RyOwp9CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIEludGVycHJldF9JUFRDX3RvX0hUTUwKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogR2xvYmFsIFZhcmlhYmxlOiAgICAgIElQVENfRW50cnlfTmFtZXMKKgoqIENvbnRlbnRzOiAgICAgVGhlIG5hbWVzIG9mIHRoZSBJUFRDLU5BQSBJSU0gZmllbGRzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKJEdMT0JBTFNbICJJUFRDX0VudHJ5X05hbWVzIiBdID0gYXJyYXkoCi8vIEVudmVsb3BlIFJlY29yZAoiMTowMCIgPT4gIk1vZGVsIFZlcnNpb24iLAoiMTowNSIgPT4gIkRlc3RpbmF0aW9uIiwKIjE6MjAiID0+ICJGaWxlIEZvcm1hdCIsCiIxOjIyIiA9PiAiRmlsZSBGb3JtYXQgVmVyc2lvbiIsCiIxOjMwIiA9PiAiU2VydmljZSBJZGVudGlmaWVyIiwKIjE6NDAiID0+ICJFbnZlbG9wZSBOdW1iZXIiLAoiMTo1MCIgPT4gIlByb2R1Y3QgSUQiLAoiMTo2MCIgPT4gIkVudmVsb3BlIFByaW9yaXR5IiwKIjE6NzAiID0+ICJEYXRlIFNlbnQiLAoiMTo4MCIgPT4gIlRpbWUgU2VudCIsCiIxOjkwIiA9PiAiQ29kZWQgQ2hhcmFjdGVyIFNldCIsCiIxOjEwMCIgPT4gIlVOTyAoVW5pcXVlIE5hbWUgb2YgT2JqZWN0KSIsCiIxOjEyMCIgPT4gIkFSTSBJZGVudGlmaWVyIiwKIjE6MTIyIiA9PiAiQVJNIFZlcnNpb24iLAoKLy8gQXBwbGljYXRpb24gUmVjb3JkCiIyOjAwIiA9PiAiUmVjb3JkIFZlcnNpb24iLAoiMjowMyIgPT4gIk9iamVjdCBUeXBlIFJlZmVyZW5jZSIsCiIyOjA1IiA9PiAiT2JqZWN0IE5hbWUgKFRpdGxlKSIsCiIyOjA3IiA9PiAiRWRpdCBTdGF0dXMiLAoiMjowOCIgPT4gIkVkaXRvcmlhbCBVcGRhdGUiLAoiMjoxMCIgPT4gIlVyZ2VuY3kiLAoiMjoxMiIgPT4gIlN1YmplY3QgUmVmZXJlbmNlIiwKIjI6MTUiID0+ICJDYXRlZ29yeSIsCiIyOjIwIiA9PiAiU3VwcGxlbWVudGFsIENhdGVnb3J5IiwKIjI6MjIiID0+ICJGaXh0dXJlIElkZW50aWZpZXIiLAoiMjoyNSIgPT4gIktleXdvcmRzIiwKIjI6MjYiID0+ICJDb250ZW50IExvY2F0aW9uIENvZGUiLAoiMjoyNyIgPT4gIkNvbnRlbnQgTG9jYXRpb24gTmFtZSIsCiIyOjMwIiA9PiAiUmVsZWFzZSBEYXRlIiwKIjI6MzUiID0+ICJSZWxlYXNlIFRpbWUiLAoiMjozNyIgPT4gIkV4cGlyYXRpb24gRGF0ZSIsCiIyOjM1IiA9PiAiRXhwaXJhdGlvbiBUaW1lIiwKIjI6NDAiID0+ICJTcGVjaWFsIEluc3RydWN0aW9ucyIsCiIyOjQyIiA9PiAiQWN0aW9uIEFkdmlzZWQiLAoiMjo0NSIgPT4gIlJlZmVyZW5jZSBTZXJ2aWNlIiwKIjI6NDciID0+ICJSZWZlcmVuY2UgRGF0ZSIsCiIyOjUwIiA9PiAiUmVmZXJlbmNlIE51bWJlciIsCiIyOjU1IiA9PiAiRGF0ZSBDcmVhdGVkIiwKIjI6NjAiID0+ICJUaW1lIENyZWF0ZWQiLAoiMjo2MiIgPT4gIkRpZ2l0YWwgQ3JlYXRpb24gRGF0ZSIsCiIyOjYzIiA9PiAiRGlnaXRhbCBDcmVhdGlvbiBUaW1lIiwKIjI6NjUiID0+ICJPcmlnaW5hdGluZyBQcm9ncmFtIiwKIjI6NzAiID0+ICJQcm9ncmFtIFZlcnNpb24iLAoiMjo3NSIgPT4gIk9iamVjdCBDeWNsZSIsCiIyOjgwIiA9PiAiQnktTGluZSAoQXV0aG9yKSIsCiIyOjg1IiA9PiAiQnktTGluZSBUaXRsZSAoQXV0aG9yIFBvc2l0aW9uKSBbTm90IHVzZWQgaW4gUGhvdG9zaG9wIDddIiwKIjI6OTAiID0+ICJDaXR5IiwKIjI6OTIiID0+ICJTdWItTG9jYXRpb24iLAoiMjo5NSIgPT4gIlByb3ZpbmNlL1N0YXRlIiwKIjI6MTAwIiA9PiAiQ291bnRyeS9QcmltYXJ5IExvY2F0aW9uIENvZGUiLAoiMjoxMDEiID0+ICJDb3VudHJ5L1ByaW1hcnkgTG9jYXRpb24gTmFtZSIsCiIyOjEwMyIgPT4gIk9yaWdpbmFsIFRyYW5zbWlzc2lvbiBSZWZlcmVuY2UiLAoiMjoxMDUiID0+ICJIZWFkbGluZSIsCiIyOjExMCIgPT4gIkNyZWRpdCIsCiIyOjExNSIgPT4gIlNvdXJjZSIsCiIyOjExNiIgPT4gIkNvcHlyaWdodCBOb3RpY2UiLAoiMjoxMTgiID0+ICJDb250YWN0IiwKIjI6MTIwIiA9PiAiQ2FwdGlvbi9BYnN0cmFjdCIsCiIyOjEyMiIgPT4gIkNhcHRpb24gV3JpdGVyL0VkaXRvciIsCiIyOjEyNSIgPT4gIlJhc3Rlcml6ZWQgQ2FwdGlvbiIsCiIyOjEzMCIgPT4gIkltYWdlIFR5cGUiLAoiMjoxMzEiID0+ICJJbWFnZSBPcmllbnRhdGlvbiIsCiIyOjEzNSIgPT4gIkxhbmd1YWdlIElkZW50aWZpZXIiLAoiMjoxNTAiID0+ICJBdWRpbyBUeXBlIiwKIjI6MTUxIiA9PiAiQXVkaW8gU2FtcGxpbmcgUmF0ZSIsCiIyOjE1MiIgPT4gIkF1ZGlvIFNhbXBsaW5nIFJlc29sdXRpb24iLAoiMjoxNTMiID0+ICJBdWRpbyBEdXJhdGlvbiIsCiIyOjE1NCIgPT4gIkF1ZGlvIE91dGN1ZSIsCiIyOjIwMCIgPT4gIk9iamVjdERhdGEgUHJldmlldyBGaWxlIEZvcm1hdCIsCiIyOjIwMSIgPT4gIk9iamVjdERhdGEgUHJldmlldyBGaWxlIEZvcm1hdCBWZXJzaW9uIiwKIjI6MjAyIiA9PiAiT2JqZWN0RGF0YSBQcmV2aWV3IERhdGEiLAoKLy8gUHJlLU9iamVjdERhdGEgRGVzY3JpcHRvciBSZWNvcmQKIjc6MTAiICA9PiAiU2l6ZSBNb2RlIiwKIjc6MjAiICA9PiAiTWF4IFN1YmZpbGUgU2l6ZSIsCiI3OjkwIiAgPT4gIk9iamVjdERhdGEgU2l6ZSBBbm5vdW5jZWQiLAoiNzo5NSIgID0+ICJNYXhpbXVtIE9iamVjdERhdGEgU2l6ZSIsCgovLyBPYmplY3REYXRhIFJlY29yZAoiODoxMCIgID0+ICJTdWJmaWxlIiwKCi8vIFBvc3QgT2JqZWN0RGF0YSBEZXNjcmlwdG9yIFJlY29yZAoiOToxMCIgID0+ICJDb25maXJtZWQgT2JqZWN0RGF0YSBTaXplIgoKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgR2xvYmFsIFZhcmlhYmxlOiAgICAgSVBUQ19FbnRyeV9OYW1lcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEdsb2JhbCBWYXJpYWJsZTogICAgICBJUFRDX0VudHJ5X0Rlc2NyaXB0aW9ucwoqCiogQ29udGVudHM6ICAgICBUaGUgRGVzY3JpcHRpb25zIG9mIHRoZSBJUFRDLU5BQSBJSU0gZmllbGRzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKJEdMT0JBTFNbICJJUFRDX0VudHJ5X0Rlc2NyaXB0aW9ucyIgXSA9IGFycmF5KAovLyBFbnZlbG9wZSBSZWNvcmQKIjE6MDAiID0+ICIyIGJ5dGUgYmluYXJ5IHZlcnNpb24gbnVtYmVyIiwKIjE6MDUiID0+ICJNYXggMTAyNCBjaGFyYWN0ZXJzIG9mIERlc3RpbmF0aW9uIiwKIjE6MjAiID0+ICIyIGJ5dGUgYmluYXJ5IGZpbGUgZm9ybWF0IG51bWJlciwgc2VlIElQVEMtTkFBIFY0IEFwcGVuZGl4IEEiLAoiMToyMiIgPT4gIkJpbmFyeSB2ZXJzaW9uIG51bWJlciBvZiBmaWxlIGZvcm1hdCIsCiIxOjMwIiA9PiAiTWF4IDEwIGNoYXJhY3RlcnMgb2YgU2VydmljZSBJZGVudGlmaWVyIiwKIjE6NDAiID0+ICI4IENoYXJhY3RlciBFbnZlbG9wZSBOdW1iZXIiLAoiMTo1MCIgPT4gIlByb2R1Y3QgSUQgLSBNYXggMzIgY2hhcmFjdGVycyIsCiIxOjYwIiA9PiAiRW52ZWxvcGUgUHJpb3JpdHkgLSAxIG51bWVyaWMgY2hhcmFjdGVycyIsCiIxOjcwIiA9PiAiRGF0ZSBTZW50IC0gOCBudW1lcmljIGNoYXJhY3RlcnMgQ0NZWU1NREQiLAoiMTo4MCIgPT4gIlRpbWUgU2VudCAtIDExIGNoYXJhY3RlcnMgSEhNTVNTsUhITU0iLAoiMTo5MCIgPT4gIkNvZGVkIENoYXJhY3RlciBTZXQgLSBNYXggMzIgY2hhcmFjdGVycyIsCiIxOjEwMCIgPT4gIlVOTyAoVW5pcXVlIE5hbWUgb2YgT2JqZWN0KSAtIDE0IHRvIDgwIGNoYXJhY3RlcnMiLAoiMToxMjAiID0+ICJBUk0gSWRlbnRpZmllciAtIDIgYnl0ZSBiaW5hcnkgbnVtYmVyIiwKIjE6MTIyIiA9PiAiQVJNIFZlcnNpb24gLSAyIGJ5dGUgYmluYXJ5IG51bWJlciIsCgovLyBBcHBsaWNhdGlvbiBSZWNvcmQKIjI6MDAiID0+ICJSZWNvcmQgVmVyc2lvbiAtIDIgYnl0ZSBiaW5hcnkgbnVtYmVyIiwKIjI6MDMiID0+ICJPYmplY3QgVHlwZSBSZWZlcmVuY2UgLSAgMyBwbHVzIDAgdG8gNjQgQ2hhcmFjdGVycyIsCiIyOjA1IiA9PiAiT2JqZWN0IE5hbWUgKFRpdGxlKSAtIE1heCA2NCBjaGFyYWN0ZXJzIiwKIjI6MDciID0+ICJFZGl0IFN0YXR1cyAtIE1heCA2NCBjaGFyYWN0ZXJzIiwKIjI6MDgiID0+ICJFZGl0b3JpYWwgVXBkYXRlIC0gMiBudW1lcmljIGNoYXJhY3RlcnMiLAoiMjoxMCIgPT4gIlVyZ2VuY3kgLSAxIG51bWVyaWMgY2hhcmFjdGVyIiwKIjI6MTIiID0+ICJTdWJqZWN0IFJlZmVyZW5jZSAtIDEzIHRvIDIzNiBjaGFyYWN0ZXJzIiwKIjI6MTUiID0+ICJDYXRlZ29yeSAtIE1heCAzIGNoYXJhY3RlcnMiLAoiMjoyMCIgPT4gIlN1cHBsZW1lbnRhbCBDYXRlZ29yeSAtIE1heCAzMiBjaGFyYWN0ZXJzIiwKIjI6MjIiID0+ICJGaXh0dXJlIElkZW50aWZpZXIgLSBNYXggMzIgY2hhcmFjdGVycyIsCiIyOjI1IiA9PiAiS2V5d29yZHMgLSBNYXggNjQgY2hhcmFjdGVycyIsCiIyOjI2IiA9PiAiQ29udGVudCBMb2NhdGlvbiBDb2RlIC0gMyBjaGFyYWN0ZXJzIiwKIjI6MjciID0+ICJDb250ZW50IExvY2F0aW9uIE5hbWUgLSBNYXggNjQgY2hhcmFjdGVycyIsCiIyOjMwIiA9PiAiUmVsZWFzZSBEYXRlIC0gOCBudW1lcmljIGNoYXJhY3RlcnMgQ0NZWU1NREQiLAoiMjozNSIgPT4gIlJlbGVhc2UgVGltZSAtIDExIGNoYXJhY3RlcnMgSEhNTVNTsUhITU0iLAoiMjozNyIgPT4gIkV4cGlyYXRpb24gRGF0ZSAtIDggbnVtZXJpYyBjaGFyYWN0ZXJzIENDWVlNTUREIiwKIjI6MzUiID0+ICJFeHBpcmF0aW9uIFRpbWUgLSAxMSBjaGFyYWN0ZXJzIEhITU1TU7FISE1NIiwKIjI6NDAiID0+ICJTcGVjaWFsIEluc3RydWN0aW9ucyAtIE1heCAyNTYgQ2hhcmFjdGVycyIsCiIyOjQyIiA9PiAiQWN0aW9uIEFkdmlzZWQgLSAyIG51bWVyaWMgY2hhcmFjdGVycyIsCiIyOjQ1IiA9PiAiUmVmZXJlbmNlIFNlcnZpY2UgLSBNYXggMTAgY2hhcmFjdGVycyIsCiIyOjQ3IiA9PiAiUmVmZXJlbmNlIERhdGUgLSA4IG51bWVyaWMgY2hhcmFjdGVycyBDQ1lZTU1ERCIsCiIyOjUwIiA9PiAiUmVmZXJlbmNlIE51bWJlciAtIDggY2hhcmFjdGVycyIsCiIyOjU1IiA9PiAiRGF0ZSBDcmVhdGVkIC0gOCBudW1lcmljIGNoYXJhY3RlcnMgQ0NZWU1NREQiLAoiMjo2MCIgPT4gIlRpbWUgQ3JlYXRlZCAtIDExIGNoYXJhY3RlcnMgSEhNTVNTsUhITU0iLAoiMjo2MiIgPT4gIkRpZ2l0YWwgQ3JlYXRpb24gRGF0ZSAtIDggbnVtZXJpYyBjaGFyYWN0ZXJzIENDWVlNTUREIiwKIjI6NjMiID0+ICJEaWdpdGFsIENyZWF0aW9uIFRpbWUgLSAxMSBjaGFyYWN0ZXJzIEhITU1TU7FISE1NIiwKIjI6NjUiID0+ICJPcmlnaW5hdGluZyBQcm9ncmFtIC0gTWF4IDMyIGNoYXJhY3RlcnMiLAoiMjo3MCIgPT4gIlByb2dyYW0gVmVyc2lvbiAtIE1heCAxMCBjaGFyYWN0ZXJzIiwKIjI6NzUiID0+ICJPYmplY3QgQ3ljbGUgLSAxIGNoYXJhY3RlciIsCiIyOjgwIiA9PiAiQnktTGluZSAoQXV0aG9yKSAtIE1heCAzMiBDaGFyYWN0ZXJzIiwKIjI6ODUiID0+ICJCeS1MaW5lIFRpdGxlIChBdXRob3IgUG9zaXRpb24pIC0gTWF4IDMyIGNoYXJhY3RlcnMiLAoiMjo5MCIgPT4gIkNpdHkgLSBNYXggMzIgQ2hhcmFjdGVycyIsCiIyOjkyIiA9PiAiU3ViLUxvY2F0aW9uIC0gTWF4IDMyIGNoYXJhY3RlcnMiLAoiMjo5NSIgPT4gIlByb3ZpbmNlL1N0YXRlIC0gTWF4IDMyIENoYXJhY3RlcnMiLAoiMjoxMDAiID0+ICJDb3VudHJ5L1ByaW1hcnkgTG9jYXRpb24gQ29kZSAtIDMgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIiwKIjI6MTAxIiA9PiAiQ291bnRyeS9QcmltYXJ5IExvY2F0aW9uIE5hbWUgLSBNYXggNjQgY2hhcmFjdGVycyIsCiIyOjEwMyIgPT4gIk9yaWdpbmFsIFRyYW5zbWlzc2lvbiBSZWZlcmVuY2UgLSBNYXggMzIgY2hhcmFjdGVycyIsCiIyOjEwNSIgPT4gIkhlYWRsaW5lIC0gTWF4IDI1NiBDaGFyYWN0ZXJzIiwKIjI6MTEwIiA9PiAiQ3JlZGl0IC0gTWF4IDMyIENoYXJhY3RlcnMiLAoiMjoxMTUiID0+ICJTb3VyY2UgLSBNYXggMzIgQ2hhcmFjdGVycyIsCiIyOjExNiIgPT4gIkNvcHlyaWdodCBOb3RpY2UgLSBNYXggMTI4IENoYXJhY3RlcnMiLAoiMjoxMTgiID0+ICJDb250YWN0IC0gTWF4IDEyOCBjaGFyYWN0ZXJzIiwKIjI6MTIwIiA9PiAiQ2FwdGlvbi9BYnN0cmFjdCAtIE1heCAyMDAwIENoYXJhY3RlcnMiLAoiMjoxMjIiID0+ICJDYXB0aW9uIFdyaXRlci9FZGl0b3IgLSBNYXggMzIgQ2hhcmFjdGVycyIsCiIyOjEyNSIgPT4gIlJhc3Rlcml6ZWQgQ2FwdGlvbiAtIDczNjAgYnl0ZXMsIDEgYml0IHBlciBwaXhlbCwgNDYweDEyOHBpeGVsIGltYWdlIiwKIjI6MTMwIiA9PiAiSW1hZ2UgVHlwZSAtIDIgY2hhcmFjdGVycyIsCiIyOjEzMSIgPT4gIkltYWdlIE9yaWVudGF0aW9uIC0gMSBhbHBoYWJldGljIGNoYXJhY3RlciIsCiIyOjEzNSIgPT4gIkxhbmd1YWdlIElkZW50aWZpZXIgLSAyIG9yIDMgYXBoYWJldGljIGNoYXJhY3RlcnMiLAoiMjoxNTAiID0+ICJBdWRpbyBUeXBlIC0gMiBjaGFyYWN0ZXJzIiwKIjI6MTUxIiA9PiAiQXVkaW8gU2FtcGxpbmcgUmF0ZSAtIDYgbnVtZXJpYyBjaGFyYWN0ZXJzIiwKIjI6MTUyIiA9PiAiQXVkaW8gU2FtcGxpbmcgUmVzb2x1dGlvbiAtIDIgbnVtZXJpYyBjaGFyYWN0ZXJzIiwKIjI6MTUzIiA9PiAiQXVkaW8gRHVyYXRpb24gLSA2IG51bWVyaWMgY2hhcmFjdGVycyIsCiIyOjE1NCIgPT4gIkF1ZGlvIE91dGN1ZSAtIE1heCA2NCBjaGFyYWN0ZXJzIiwKIjI6MjAwIiA9PiAiT2JqZWN0RGF0YSBQcmV2aWV3IEZpbGUgRm9ybWF0IC0gMiBieXRlIGJpbmFyeSBudW1iZXIiLAoiMjoyMDEiID0+ICJPYmplY3REYXRhIFByZXZpZXcgRmlsZSBGb3JtYXQgVmVyc2lvbiAtIDIgYnl0ZSBiaW5hcnkgbnVtYmVyIiwKIjI6MjAyIiA9PiAiT2JqZWN0RGF0YSBQcmV2aWV3IERhdGEgLSBNYXggMjU2MDAwIGJpbmFyeSBieXRlcyIsCgovLyBQcmUtT2JqZWN0RGF0YSBEZXNjcmlwdG9yIFJlY29yZAoiNzoxMCIgID0+ICJTaXplIE1vZGUgLSAxIG51bWVyaWMgY2hhcmFjdGVyIiwKIjc6MjAiICA9PiAiTWF4IFN1YmZpbGUgU2l6ZSIsCiI3OjkwIiAgPT4gIk9iamVjdERhdGEgU2l6ZSBBbm5vdW5jZWQiLAoiNzo5NSIgID0+ICJNYXhpbXVtIE9iamVjdERhdGEgU2l6ZSIsCgovLyBPYmplY3REYXRhIFJlY29yZAoiODoxMCIgID0+ICJTdWJmaWxlIiwKCi8vIFBvc3QgT2JqZWN0RGF0YSBEZXNjcmlwdG9yIFJlY29yZAoiOToxMCIgID0+ICJDb25maXJtZWQgT2JqZWN0RGF0YSBTaXplIgoKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgR2xvYmFsIFZhcmlhYmxlOiAgICAgSVBUQ19FbnRyeV9EZXNjcmlwdGlvbnMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEdsb2JhbCBWYXJpYWJsZTogICAgICBJUFRDX0ZpbGUgRm9ybWF0cwoqCiogQ29udGVudHM6ICAgICBUaGUgbmFtZXMgb2YgdGhlIElQVEMtTkFBIElJTSBGaWxlIEZvcm1hdHMgZm9yIGZpZWxkIDE6MjAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgokR0xPQkFMU1sgIklQVENfRmlsZSBGb3JtYXRzIiBdID0gYXJyYXkoCjAwID0+ICJObyBPYmplY3REYXRhIiwKMDEgPT4gIklQVEMtTkFBIERpZ2l0YWwgTmV3c3Bob3RvIFBhcmFtZXRlciBSZWNvcmQiLAowMiA9PiAiSVBUQzc5MDEgUmVjb21tZW5kZWQgTWVzc2FnZSBGb3JtYXQiLAowMyA9PiAiVGFnZ2VkIEltYWdlIEZpbGUgRm9ybWF0IChBZG9iZS9BbGR1cyBJbWFnZSBkYXRhKSIsCjA0ID0+ICJJbGx1c3RyYXRvciAoQWRvYmUgR3JhcGhpY3MgZGF0YSkiLAowNSA9PiAiQXBwbGVTaW5nbGUgKEFwcGxlIENvbXB1dGVyIEluYykiLAowNiA9PiAiTkFBIDg5LTMgKEFOUEEgMTMxMikiLAowNyA9PiAiTWFjQmluYXJ5IElJIiwKMDggPT4gIklQVEMgVW5zdHJ1Y3R1cmVkIENoYXJhY3RlciBPcmllbnRlZCBGaWxlIEZvcm1hdCAoVUNPRkYpIiwKMDkgPT4gIlVuaXRlZCBQcmVzcyBJbnRlcm5hdGlvbmFsIEFOUEEgMTMxMiB2YXJpYW50IiwKMTAgPT4gIlVuaXRlZCBQcmVzcyBJbnRlcm5hdGlvbmFsIERvd24tTG9hZCBNZXNzYWdlIiwKMTEgPT4gIkpQRUcgRmlsZSBJbnRlcmNoYW5nZSAoSkZJRikiLAoxMiA9PiAiUGhvdG8tQ0QgSW1hZ2UtUGFjIChFYXN0bWFuIEtvZGFrKSIsCjEzID0+ICJNaWNyb3NvZnQgQml0IE1hcHBlZCBHcmFwaGljcyBGaWxlIFsqLkJNUF0iLAoxNCA9PiAiRGlnaXRhbCBBdWRpbyBGaWxlIFsqLldBVl0gKE1pY3Jvc29mdCAmIENyZWF0aXZlIExhYnMpIiwKMTUgPT4gIkF1ZGlvIHBsdXMgTW92aW5nIFZpZGVvIFsqLkFWSV0gKE1pY3Jvc29mdCkiLAoxNiA9PiAiUEMgRE9TL1dpbmRvd3MgRXhlY3V0YWJsZSBGaWxlcyBbKi5DT01dWyouRVhFXSIsCjE3ID0+ICJDb21wcmVzc2VkIEJpbmFyeSBGaWxlIFsqLlpJUF0gKFBLV2FyZSBJbmMpIiwKMTggPT4gIkF1ZGlvIEludGVyY2hhbmdlIEZpbGUgRm9ybWF0IEFJRkYgKEFwcGxlIENvbXB1dGVyIEluYykiLAoxOSA9PiAiUklGRiBXYXZlIChNaWNyb3NvZnQgQ29ycG9yYXRpb24pIiwKMjAgPT4gIkZyZWVoYW5kIChNYWNyb21lZGlhL0FsZHVzKSIsCjIxID0+ICJIeXBlcnRleHQgTWFya3VwIExhbmd1YWdlIC0gSFRNTCAoVGhlIEludGVybmV0IFNvY2lldHkpIiwKMjIgPT4gIk1QRUcgMiBBdWRpbyBMYXllciAyIChNdXNpY29tKSwgSVNPL0lFQyIsCjIzID0+ICJNUEVHIDIgQXVkaW8gTGF5ZXIgMywgSVNPL0lFQyIsCjI0ID0+ICJQb3J0YWJsZSBEb2N1bWVudCBGaWxlICgqLlBERikgQWRvYmUiLAoyNSA9PiAiTmV3cyBJbmR1c3RyeSBUZXh0IEZvcm1hdCAoTklURikiLAoyNiA9PiAiVGFwZSBBcmNoaXZlICgqLlRBUikiLAoyNyA9PiAiVGlkbmluZ2FybmFzIFRlbGVncmFtYnly5SBOSVRGIHZlcnNpb24gKFRUTklURiBEVEQpIiwKMjggPT4gIlJpdHphdXMgQnVyZWF1IE5JVEYgdmVyc2lvbiAoUkJOSVRGIERURCkiLAoyOSA9PiAiQ29yZWwgRHJhdyBbKi5DRFJdIgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgR2xvYmFsIFZhcmlhYmxlOiAgICAgSVBUQ19GaWxlIEZvcm1hdHMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEdsb2JhbCBWYXJpYWJsZTogICAgICBJbWFnZVR5cGVfTmFtZXMKKgoqIENvbnRlbnRzOiAgICAgVGhlIG5hbWVzIG9mIHRoZSBjb2xvdXIgY29tcG9uZW50cyBmb3IgSVBUQy1OQUEgSUlNIGZpZWxkIDI6MTMwCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKJEdMT0JBTFNbJ0ltYWdlVHlwZV9OYW1lcyddID0gYXJyYXkoICAgICJNIiA9PiAiTW9ub2Nocm9tZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWSIgPT4gIlllbGxvdyBDb21wb25lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk0iID0+ICJNYWdlbnRhIENvbXBvbmVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQyIgPT4gIkN5YW4gQ29tcG9uZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLIiA9PiAiQmxhY2sgQ29tcG9uZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSIiA9PiAiUmVkIENvbXBvbmVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRyIgPT4gIkdyZWVuIENvbXBvbmVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQiIgPT4gIkJsdWUgQ29tcG9uZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUIiA9PiAiVGV4dCBPbmx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGIiA9PiAiRnVsbCBjb2xvdXIgY29tcG9zaXRlLCBmcmFtZSBzZXF1ZW50aWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMIiA9PiAiRnVsbCBjb2xvdXIgY29tcG9zaXRlLCBsaW5lIHNlcXVlbnRpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlAiID0+ICJGdWxsIGNvbG91ciBjb21wb3NpdGUsIHBpeGVsIHNlcXVlbnRpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlMiID0+ICJGdWxsIGNvbG91ciBjb21wb3NpdGUsIHNwZWNpYWwgaW50ZXJsZWF2aW5nIiApOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEdsb2JhbCBWYXJpYWJsZTogICAgIEltYWdlVHlwZV9OYW1lcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgo/Pg==');
expand_3537250845($outputDir, 'includes/toolkit/JPEG.php', 'PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZpbGVuYW1lOiAgICAgSlBFRy5waHAKKgoqIERlc2NyaXB0aW9uOiAgUHJvdmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGluZm9ybWF0aW9uIHRvL2Zyb20KKiAgICAgICAgICAgICAgIEpQRUcgZm9ybWF0IGZpbGVzCioKKiBBdXRob3I6ICAgICAgIEV2YW4gSHVudGVyCioKKiBEYXRlOiAgICAgICAgIDIzLzcvMjAwNAoqCiogUHJvamVjdDogICAgICBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0CioKKiBSZXZpc2lvbjogICAgIDEuMTAKKgoqIENoYW5nZXM6ICAgICAgMS4wMCAtPiAxLjEwIDogY2hhbmdlZCBwdXRfanBlZ19oZWFkZXJfZGF0YSB0byBjaGVjayBpZiB0aGUgZGF0YQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgd3JpdHRlbiBleGlzdHMKKgoqIFVSTDogICAgICAgICAgaHR0cDovL2VsZWN0cm9uaWNzLm96aGlrZXIuY29tCioKKiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCBFdmFuIEh1bnRlciAyMDA0CioKKiBMaWNlbnNlOiAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0LgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuCiogICAgICAgICAgICAgICByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiogICAgICAgICAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKiAgICAgICAgICAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCiogICAgICAgICAgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZQoqICAgICAgICAgICAgICAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0CiogICAgICAgICAgICAgICBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiogICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiogICAgICAgICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgoqCiogICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKiAgICAgICAgICAgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdDsgaWYgbm90LAoqICAgICAgICAgICAgICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCiogICAgICAgICAgICAgICBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKgoqICAgICAgICAgICAgICAgSWYgeW91IHJlcXVpcmUgYSBkaWZmZXJlbnQgbGljZW5zZSBmb3IgY29tbWVyY2lhbCBvciBvdGhlcgoqICAgICAgICAgICAgICAgcHVycG9zZXMsIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6IGV2YW5Ab3poaWtlci5jb20KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIGdldF9qcGVnX2hlYWRlcl9kYXRhCioKKiBEZXNjcmlwdGlvbjogIFJlYWRzIGFsbCB0aGUgSlBFRyBoZWFkZXIgc2VnbWVudHMgZnJvbSBhbiBKUEVHIGltYWdlIGZpbGUgaW50byBhbgoqICAgICAgICAgICAgICAgYXJyYXkKKgoqIFBhcmFtZXRlcnM6ICAgZmlsZW5hbWUgLSB0aGUgZmlsZW5hbWUgb2YgdGhlIGZpbGUgdG8gSlBFRyBmaWxlIHRvIHJlYWQKKgoqIFJldHVybnM6ICAgICAgaGVhZGVyZGF0YSAtIEFycmF5IG9mIEpQRUcgaGVhZGVyIHNlZ21lbnRzCiogICAgICAgICAgICAgICBGQUxTRSAtIGlmIGhlYWRlcnMgY291bGQgbm90IGJlIHJlYWQKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBnZXRfanBlZ19oZWFkZXJfZGF0YSggJGZpbGVuYW1lICkKewoKICAgICAgICAvLyBwcmV2ZW50IHJlZnJlc2ggZnJvbSBhYm9ydGluZyBmaWxlIG9wZXJhdGlvbnMgYW5kIGhvc2luZyBmaWxlCiAgICAgICAgaWdub3JlX3VzZXJfYWJvcnQodHJ1ZSk7CgoKICAgICAgICAvLyBBdHRlbXB0IHRvIG9wZW4gdGhlIGpwZWcgZmlsZSAtIHRoZSBhdCBzeW1ib2wgc3VwcmVzc2VzIHRoZSBlcnJvciBtZXNzYWdlIGFib3V0CiAgICAgICAgLy8gbm90IGJlaW5nIGFibGUgdG8gb3BlbiBmaWxlcy4gVGhlIGZpbGVfZXhpc3RzIHdvdWxkIGhhdmUgYmVlbiB1c2VkLCBidXQgaXQKICAgICAgICAvLyBkb2VzIG5vdCB3b3JrIHdpdGggZmlsZXMgZmV0Y2hlZCBvdmVyIGh0dHAgb3IgZnRwLgogICAgICAgICRmaWxlaG5kID0gQGZvcGVuKCRmaWxlbmFtZSwgJ3JiJyk7CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaWxlIG9wZW5lZCBzdWNjZXNzZnVsbHkKICAgICAgICBpZiAoICEgJGZpbGVobmQgICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBDb3VsZCd0IG9wZW4gdGhlIGZpbGUgLSBleGl0CiAgICAgICAgICAgICAgICBlY2hvICI8cD5Db3VsZCBub3Qgb3BlbiBmaWxlICRmaWxlbmFtZTwvcD5cbiI7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKCiAgICAgICAgLy8gUmVhZCB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMKICAgICAgICAkZGF0YSA9IG5ldHdvcmtfc2FmZV9mcmVhZCggJGZpbGVobmQsIDIgKTsKCiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgYXJlIDB4RkYgMHhEQSAgKFNPSSAtIFN0YXJ0IG9mIGltYWdlKQogICAgICAgIGlmICggJGRhdGEgIT0gIlx4RkZceEQ4IiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gTm8gU09JIChGRiBEOCkgYXQgc3RhcnQgb2YgZmlsZSAtIFRoaXMgcHJvYmFibHkgaXNuJ3QgYSBKUEVHIGZpbGUgLSBjbG9zZSBmaWxlIGFuZCByZXR1cm47CiAgICAgICAgICAgICAgICBmY2xvc2UoJGZpbGVobmQpOwogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KCgogICAgICAgIC8vIFJlYWQgdGhlIHRoaXJkIGNoYXJhY3RlcgogICAgICAgICRkYXRhID0gbmV0d29ya19zYWZlX2ZyZWFkKCAkZmlsZWhuZCwgMiApOwoKICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSB0aGlyZCBjaGFyYWN0ZXIgaXMgMHhGRiAoU3RhcnQgb2YgZmlyc3Qgc2VnbWVudCBoZWFkZXIpCiAgICAgICAgaWYgKCAkZGF0YXswfSAhPSAiXHhGRiIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIE5PIEZGIGZvdW5kIC0gY2xvc2UgZmlsZSBhbmQgcmV0dXJuIC0gSlBFRyBpcyBwcm9iYWJseSBjb3JydXB0ZWQKICAgICAgICAgICAgICAgIGZjbG9zZSgkZmlsZWhuZCk7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKICAgICAgICAvLyBGbGFnIHRoYXQgd2UgaGF2ZW50IHlldCBoaXQgdGhlIGNvbXByZXNzZWQgaW1hZ2UgZGF0YQogICAgICAgICRoaXRfY29tcHJlc3NlZF9pbWFnZV9kYXRhID0gRkFMU0U7CgoKICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIHRoZSBmaWxlIHVudGlsLCBvbmUgb2Y6IDEpIGFuIEVPSSAoRW5kIG9mIGltYWdlKSBtYXJrZXIgaXMgaGl0LAogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikgd2UgaGF2ZSBoaXQgdGhlIGNvbXByZXNzZWQgaW1hZ2UgZGF0YSAobm8gbW9yZSBoZWFkZXJzIGFyZSBhbGxvd2VkIGFmdGVyIGRhdGEpCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzKSBvciBlbmQgb2YgZmlsZSBpcyBoaXQKCiAgICAgICAgd2hpbGUgKCAoICRkYXRhezF9ICE9ICJceEQ5IiApICYmICghICRoaXRfY29tcHJlc3NlZF9pbWFnZV9kYXRhKSAmJiAoICEgZmVvZiggJGZpbGVobmQgKSApKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgc2VnbWVudCB0byBsb29rIGF0LgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc2VnbWVudCBtYXJrZXIgaXMgbm90IGEgUmVzdGFydCBtYXJrZXIgLSByZXN0YXJ0IG1hcmtlcnMgZG9uJ3QgaGF2ZSBzaXplIG9yIGRhdGEgYWZ0ZXIgdGhlbQogICAgICAgICAgICAgICAgaWYgKCAgKCBvcmQoJGRhdGF7MX0pIDwgMHhEMCApIHx8ICggb3JkKCRkYXRhezF9KSA+IDB4RDcgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZ21lbnQgaXNuJ3QgYSBSZXN0YXJ0IG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IHR3byBieXRlcyAoc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgJHNpemVzdHIgPSBuZXR3b3JrX3NhZmVfZnJlYWQoICRmaWxlaG5kLCAyICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBzaXplIGJ5dGVzIHRvIGFuIGludGVnZXIKICAgICAgICAgICAgICAgICAgICAgICAgJGRlY29kZWRzaXplID0gdW5wYWNrICgibnNpemUiLCAkc2l6ZXN0cik7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAkc2VnZGF0YXN0YXJ0ID0gZnRlbGwoICRmaWxlaG5kICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSBzZWdtZW50IGRhdGEgd2l0aCBsZW5ndGggaW5kaWNhdGVkIGJ5IHRoZSBwcmV2aW91c2x5IHJlYWQgc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAkc2VnZGF0YSA9IG5ldHdvcmtfc2FmZV9mcmVhZCggJGZpbGVobmQsICRkZWNvZGVkc2l6ZVsnc2l6ZSddIC0gMiApOwoKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBzZWdtZW50IGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWRlcmRhdGFbXSA9IGFycmF5KCAgIlNlZ1R5cGUiID0+IG9yZCgkZGF0YXsxfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdOYW1lIiA9PiAkR0xPQkFMU1sgIkpQRUdfU2VnbWVudF9OYW1lcyIgXVsgb3JkKCRkYXRhezF9KSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VnRGVzYyIgPT4gJEdMT0JBTFNbICJKUEVHX1NlZ21lbnRfRGVzY3JpcHRpb25zIiBdWyBvcmQoJGRhdGF7MX0pIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdEYXRhU3RhcnQiID0+ICRzZWdkYXRhc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdEYXRhIiA9PiAkc2VnZGF0YSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBTT1MgKFN0YXJ0IE9mIFNjYW4pIHNlZ21lbnQsIHRoZW4gdGhlcmUgaXMgbm8gbW9yZSBoZWFkZXIgZGF0YSAtIHRoZSBjb21wcmVzc2VkIGltYWdlIGRhdGEgZm9sbG93cwogICAgICAgICAgICAgICAgaWYgKCAkZGF0YXsxfSA9PSAiXHhEQSIgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBGbGFnIHRoYXQgd2UgaGF2ZSBoaXQgdGhlIGNvbXByZXNzZWQgaW1hZ2UgZGF0YSAtIGV4aXQgbG9vcCBhcyBubyBtb3JlIGhlYWRlcnMgYXZhaWxhYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAkaGl0X2NvbXByZXNzZWRfaW1hZ2VfZGF0YSA9IFRSVUU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhbiBTT1MgLSBSZWFkIHRoZSBuZXh0IHR3byBieXRlcyAtIHNob3VsZCBiZSB0aGUgc2VnbWVudCBtYXJrZXIgZm9yIHRoZSBuZXh0IHNlZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSBuZXR3b3JrX3NhZmVfZnJlYWQoICRmaWxlaG5kLCAyICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSB0d28gaXMgMHhGRiBhcyBpdCBzaG91bGQgYmUgZm9yIGEgbWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGRhdGF7MH0gIT0gIlx4RkYiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PIEZGIGZvdW5kIC0gY2xvc2UgZmlsZSBhbmQgcmV0dXJuIC0gSlBFRyBpcyBwcm9iYWJseSBjb3JydXB0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGZpbGVobmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ2xvc2UgRmlsZQogICAgICAgIGZjbG9zZSgkZmlsZWhuZCk7CiAgICAgICAgLy8gQWxvdyB0aGUgdXNlciB0byBhYm9ydCBmcm9tIG5vdyBvbgogICAgICAgIGlnbm9yZV91c2VyX2Fib3J0KGZhbHNlKTsKCiAgICAgICAgLy8gUmV0dXJuIHRoZSBoZWFkZXIgZGF0YSByZXRyaWV2ZWQKICAgICAgICByZXR1cm4gJGhlYWRlcmRhdGE7Cn0KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgZ2V0X2pwZWdfaGVhZGVyX2RhdGEKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBwdXRfanBlZ19oZWFkZXJfZGF0YQoqCiogRGVzY3JpcHRpb246ICBXcml0ZXMgSlBFRyBoZWFkZXIgZGF0YSBpbnRvIGEgSlBFRyBmaWxlLiBUYWtlcyBhbiBhcnJheSBpbiB0aGUKKiAgICAgICAgICAgICAgIHNhbWUgZm9ybWF0IGFzIGZyb20gZ2V0X2pwZWdfaGVhZGVyX2RhdGEsIGFuZCBjb21iaW5lcyBpdCB3aXRoCiogICAgICAgICAgICAgICB0aGUgaW1hZ2UgZGF0YSBvZiBhbiBleGlzdGluZyBKUEVHIGZpbGUsIHRvIGNyZWF0ZSBhIG5ldyBKUEVHIGZpbGUKKiAgICAgICAgICAgICAgIFdBUk5JTkc6IEFzIHRoaXMgZnVuY3Rpb24gd2lsbCByZXBsYWNlIGFsbCBKUEVHIGhlYWRlcnMsCiogICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgU09GIGV0YywgaXQgaXMgYmVzdCB0byByZWFkIHRoZSBqcGVnIGhlYWRlcnMKKiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYSBmaWxlLCBhbHRlciB0aGVtLCB0aGVuIHB1dCB0aGVtIGJhY2sgb24gdGhlIHNhbWUKKiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuIElmIGEgU09GIHNlZ21lbnQgd2VyIHRvIGJlIHRyYW5zZmVyZWQgZnJvbSBvbmUKKiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgdG8gYW5vdGhlciwgdGhlIGltYWdlIGNvdWxkIGJlY29tZSB1bnJlYWRhYmxlIHVubGVzcwoqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlcyB3ZXJlIGlkZW5pY2FsIHNpemUgYW5kIGNvbmZpZ3VyYXRpb24KKgoqCiogUGFyYW1ldGVyczogICBvbGRfZmlsZW5hbWUgLSB0aGUgSlBFRyBmaWxlIGZyb20gd2hpY2ggdGhlIGltYWdlIGRhdGEgd2lsbCBiZSByZXRyaWV2ZWQKKiAgICAgICAgICAgICAgIG5ld19maWxlbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBuZXcgSlBFRyB0byBjcmVhdGUgKGNhbiBiZSBzYW1lIGFzIG9sZF9maWxlbmFtZSkKKiAgICAgICAgICAgICAgIGpwZWdfaGVhZGVyX2RhdGEgLSBhIEpQRUcgaGVhZGVyIGRhdGEgYXJyYXkgaW4gdGhlIHNhbWUgZm9ybWF0CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZnJvbSBnZXRfanBlZ19oZWFkZXJfZGF0YQoqCiogUmV0dXJuczogICAgICBUUlVFIC0gb24gU3VjY2VzcwoqICAgICAgICAgICAgICAgRkFMU0UgLSBvbiBGYWlsdXJlCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gcHV0X2pwZWdfaGVhZGVyX2RhdGEoICRvbGRfZmlsZW5hbWUsICRuZXdfZmlsZW5hbWUsICRqcGVnX2hlYWRlcl9kYXRhICkKewoKICAgICAgICAvLyBDaGFuZ2U6IGFkZGVkIGNoZWNrIHRvIGVuc3VyZSBkYXRhIGV4aXN0cywgYXMgb2YgcmV2aXNpb24gMS4xMAogICAgICAgIC8vIENoZWNrIGlmIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gZXhpc3RzCiAgICAgICAgaWYgKCAkanBlZ19oZWFkZXJfZGF0YSA9PSBGQUxTRSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gRGF0YSB0byBiZSB3cml0dGVuIG5vdCB2YWxpZCAtIGFib3J0CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKICAgICAgICAvLyBleHRyYWN0IHRoZSBjb21wcmVzc2VkIGltYWdlIGRhdGEgZnJvbSB0aGUgb2xkIGZpbGUKICAgICAgICAkY29tcHJlc3NlZF9pbWFnZV9kYXRhID0gZ2V0X2pwZWdfaW1hZ2VfZGF0YSggJG9sZF9maWxlbmFtZSApOwoKICAgICAgICAvLyBDaGVjayBpZiB0aGUgZXh0cmFjdGlvbiB3b3JrZWQKICAgICAgICBpZiAoICggJGNvbXByZXNzZWRfaW1hZ2VfZGF0YSA9PT0gRkFMU0UgKSB8fCAoICRjb21wcmVzc2VkX2ltYWdlX2RhdGEgPT09IE5VTEwgKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgZ2V0IGltYWdlIGRhdGEgZnJvbSBvbGQgZmlsZQogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KCgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggbmV3IGhlYWRlcnMKICAgICAgICBmb3JlYWNoICgkanBlZ19oZWFkZXJfZGF0YSBhcyAkc2Vnbm8gPT4gJHNlZ21lbnQpCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGlzIGhlYWRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIG1heGltdW0gc2l6ZQogICAgICAgICAgICAgICAgaWYgKCBzdHJsZW4oJHNlZ21lbnRbJ1NlZ0RhdGEnXSkgPiAweGZmZmQgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDb3VsZCd0IG9wZW4gdGhlIGZpbGUgLSBleGl0CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxwPkEgSGVhZGVyIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gSlBFRyBzZWdtZW50PC9wPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWdub3JlX3VzZXJfYWJvcnQodHJ1ZSk7ICAgICMjIHByZXZlbnQgcmVmcmVzaCBmcm9tIGFib3J0aW5nIGZpbGUgb3BlcmF0aW9ucyBhbmQgaG9zaW5nIGZpbGUKCgogICAgICAgIC8vIEF0dGVtcHQgdG8gb3BlbiB0aGUgbmV3IGpwZWcgZmlsZQogICAgICAgICRuZXdmaWxlaG5kID0gQGZvcGVuKCRuZXdfZmlsZW5hbWUsICd3YicpOwogICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaWxlIG9wZW5lZCBzdWNjZXNzZnVsbHkKICAgICAgICBpZiAoICEgJG5ld2ZpbGVobmQgICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBDb3VsZCd0IG9wZW4gdGhlIGZpbGUgLSBleGl0CiAgICAgICAgICAgICAgICBlY2hvICI8cD5Db3VsZCBub3Qgb3BlbiBmaWxlICRuZXdfZmlsZW5hbWU8L3A+XG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KCiAgICAgICAgLy8gV3JpdGUgU09JCiAgICAgICAgZndyaXRlKCAkbmV3ZmlsZWhuZCwgIlx4RkZceEQ4IiApOwoKICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIG5ldyBoZWFkZXJzLCB3cml0aW5nIHRoZW0gdG8gdGhlIG5ldyBmaWxlCiAgICAgICAgZm9yZWFjaCAoJGpwZWdfaGVhZGVyX2RhdGEgYXMgJHNlZ25vID0+ICRzZWdtZW50KQogICAgICAgIHsKCiAgICAgICAgICAgICAgICAvLyBXcml0ZSBzZWdtZW50IG1hcmtlcgogICAgICAgICAgICAgICAgZndyaXRlKCAkbmV3ZmlsZWhuZCwgc3ByaW50ZiggIlx4RkYlYyIsICRzZWdtZW50WydTZWdUeXBlJ10gKSApOwoKICAgICAgICAgICAgICAgIC8vIFdyaXRlIHNlZ21lbnQgc2l6ZQogICAgICAgICAgICAgICAgZndyaXRlKCAkbmV3ZmlsZWhuZCwgcGFjayggIm4iLCBzdHJsZW4oJHNlZ21lbnRbJ1NlZ0RhdGEnXSkgKyAyICkgKTsKCiAgICAgICAgICAgICAgICAvLyBXcml0ZSBzZWdtZW50IGRhdGEKICAgICAgICAgICAgICAgIGZ3cml0ZSggJG5ld2ZpbGVobmQsICRzZWdtZW50WydTZWdEYXRhJ10gKTsKICAgICAgICB9CgogICAgICAgIC8vIFdyaXRlIHRoZSBjb21wcmVzc2VkIGltYWdlIGRhdGEKICAgICAgICBmd3JpdGUoICRuZXdmaWxlaG5kLCAkY29tcHJlc3NlZF9pbWFnZV9kYXRhICk7CgogICAgICAgIC8vIFdyaXRlIEVPSQogICAgICAgIGZ3cml0ZSggJG5ld2ZpbGVobmQsICJceEZGXHhEOSIgKTsKCiAgICAgICAgLy8gQ2xvc2UgRmlsZQogICAgICAgIGZjbG9zZSgkbmV3ZmlsZWhuZCk7CgogICAgICAgIC8vIEFsb3cgdGhlIHVzZXIgdG8gYWJvcnQgZnJvbSBub3cgb24KICAgICAgICBpZ25vcmVfdXNlcl9hYm9ydChmYWxzZSk7CgoKICAgICAgICByZXR1cm4gVFJVRTsKCn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBwdXRfanBlZ19oZWFkZXJfZGF0YQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgZ2V0X2pwZWdfQ29tbWVudAoqCiogRGVzY3JpcHRpb246ICBSZXRyZWl2ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBKUEVHIENvbW1lbnQgKENPTSA9IDB4RkZGRSkgc2VnbWVudCBpZiBvbmUKKiAgICAgICAgICAgICAgIGV4aXN0cwoqCiogUGFyYW1ldGVyczogICBqcGVnX2hlYWRlcl9kYXRhIC0gdGhlIEpQRUcgaGVhZGVyIGRhdGEsIGFzIHJldHJpZXZlZAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGdldF9qcGVnX2hlYWRlcl9kYXRhIGZ1bmN0aW9uCioKKiBSZXR1cm5zOiAgICAgIHN0cmluZyAtIENvbnRlbnRzIG9mIHRoZSBDb21tZW50IHNlZ2VtZW50CiogICAgICAgICAgICAgICBGQUxTRSAtIGlmIHRoZSBjb21tZW50IHNlZ21lbnQgY291bGRudCBiZSBmb3VuZAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIGdldF9qcGVnX0NvbW1lbnQoICRqcGVnX2hlYWRlcl9kYXRhICkKewogICAgICAgIC8vQ3ljbGUgdGhyb3VnaCB0aGUgaGVhZGVyIHNlZ21lbnRzIHVudGlsIENPTSBpcyBmb3VuZCBvciB3ZSBydW4gb3V0IG9mIHNlZ21lbnRzCiAgICAgICAgJGkgPSAwOwogICAgICAgIHdoaWxlICggKCAkaSA8IGNvdW50KCAkanBlZ19oZWFkZXJfZGF0YSkgKSAgJiYgKCAkanBlZ19oZWFkZXJfZGF0YVskaV1bJ1NlZ05hbWUnXSAhPSAiQ09NIiApICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgYSBDT00gc2VnbWVudCBoYXMgYmVlbiBmb3VuZAogICAgICAgIGlmICggICRpIDwgY291bnQoICRqcGVnX2hlYWRlcl9kYXRhKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQSBDT00gc2VnbWVudCB3YXMgZm91bmQsIHJldHVybiBpdCdzIGNvbnRlbnRzCiAgICAgICAgICAgICAgICByZXR1cm4gJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdEYXRhJ107CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBObyBDT00gc2VnbWVudCBmb3VuZAogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIGdldF9qcGVnX0NvbW1lbnQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgcHV0X2pwZWdfQ29tbWVudAoqCiogRGVzY3JpcHRpb246ICBDcmVhdGVzIGEgbmV3IEpQRUcgQ29tbWVudCBzZWdtZW50IGZyb20gYSBzdHJpbmcsIGFuZCBpbnNlcnRzCiogICAgICAgICAgICAgICB0aGlzIHNlZ21lbnQgaW50byB0aGUgc3VwcGxpZWQgSlBFRyBoZWFkZXIgYXJyYXkKKgoqIFBhcmFtZXRlcnM6ICAganBlZ19oZWFkZXJfZGF0YSAtIGEgSlBFRyBoZWFkZXIgZGF0YSBhcnJheSBpbiB0aGUgc2FtZSBmb3JtYXQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBmcm9tIGdldF9qcGVnX2hlYWRlcl9kYXRhLCBpbnRvIHdoaWNoIHRoZQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb21tZW50IHNlZ21lbnQgd2lsbCBiZSBwdXQKKiAgICAgICAgICAgICAgICRuZXdfQ29tbWVudCAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5ldyBDb21tZW50CioKKiBSZXR1cm5zOiAgICAgIGpwZWdfaGVhZGVyX2RhdGEgLSB0aGUgSlBFRyBoZWFkZXIgZGF0YSBhcnJheSB3aXRoIHRoZSBuZXcKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKUEVHIENvbW1lbnQgc2VnbWVudCBhZGRlZAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHB1dF9qcGVnX0NvbW1lbnQoICRqcGVnX2hlYWRlcl9kYXRhLCAkbmV3X0NvbW1lbnQgKQp7CiAgICAgICAgLy9DeWNsZSB0aHJvdWdoIHRoZSBoZWFkZXIgc2VnbWVudHMKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCggJGpwZWdfaGVhZGVyX2RhdGEgKTsgJGkrKyApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gSWYgd2UgZmluZCBhbiBDT00gaGVhZGVyLAogICAgICAgICAgICAgICAgaWYgKCBzdHJjbXAgKCAkanBlZ19oZWFkZXJfZGF0YVskaV1bJ1NlZ05hbWUnXSwgIkNPTSIgKSA9PSAwICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm91bmQgYSBwcmVleGlzdGluZyBDb21tZW50IGJsb2NrIC0gUmVwbGFjZSBpdCB3aXRoIHRoZSBuZXcgb25lIGFuZCByZXR1cm4uCiAgICAgICAgICAgICAgICAgICAgICAgICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnRGF0YSddID0gJG5ld19Db21tZW50OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGpwZWdfaGVhZGVyX2RhdGE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCgogICAgICAgIC8vIE5vIHByZWV4aXN0aW5nIENvbW1lbnQgYmxvY2sgZm91bmQsIGZpbmQgd2hlcmUgdG8gcHV0IGl0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIGhpZ2hlc3QgYXBwIHNlZ21lbnQKICAgICAgICAkaSA9IDA7CiAgICAgICAgd2hpbGUgKCAoICRpIDwgY291bnQoICRqcGVnX2hlYWRlcl9kYXRhICkgKSAmJiAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsiU2VnVHlwZSJdID49IDB4RTAgKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CgoKICAgICAgICAvLyBpbnNlcnQgYSBDb21tZW50IHNlZ21lbnQgbmV3IGF0IHRoZSBwb3NpdGlvbiBmb3VuZCBvZiB0aGUgaGVhZGVyIGRhdGEuCiAgICAgICAgYXJyYXlfc3BsaWNlKCRqcGVnX2hlYWRlcl9kYXRhLCAkaSAsIDAsIGFycmF5KCBhcnJheSggICAiU2VnVHlwZSIgPT4gMHhGRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdOYW1lIiA9PiAkR0xPQkFMU1sgIkpQRUdfU2VnbWVudF9OYW1lcyIgXVsgMHhGRSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZ0Rlc2MiID0+ICRHTE9CQUxTWyAiSlBFR19TZWdtZW50X0Rlc2NyaXB0aW9ucyIgXVsgMHhGRSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZ0RhdGEiID0+ICRuZXdfQ29tbWVudCApICkgKTsKICAgICAgICByZXR1cm4gJGpwZWdfaGVhZGVyX2RhdGE7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBwdXRfanBlZ19Db21tZW50CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgSW50ZXJwcmV0X0NvbW1lbnRfdG9fSFRNTAoqCiogRGVzY3JpcHRpb246ICBHZW5lcmF0ZXMgaHRtbCBzaG93aW5nIHRoZSBjb250ZW50cyBvZiBhbnkgSlBFRyBDb21tZW50IHNlZ21lbnQKKgoqIFBhcmFtZXRlcnM6ICAganBlZ19oZWFkZXJfZGF0YSAtIHRoZSBKUEVHIGhlYWRlciBkYXRhLCBhcyByZXRyaWV2ZWQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBnZXRfanBlZ19oZWFkZXJfZGF0YSBmdW5jdGlvbgoqCiogUmV0dXJuczogICAgICBvdXRwdXQgLSB0aGUgSFRNTAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIEludGVycHJldF9Db21tZW50X3RvX0hUTUwoICRqcGVnX2hlYWRlcl9kYXRhICkKewogICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyB0byByZWNlaXZlIHRoZSBvdXRwdXQKICAgICAgICAkb3V0cHV0ID0gIiI7CgogICAgICAgIC8vIHJlYWQgdGhlIGNvbW1lbnQgc2VnbWVudAogICAgICAgICRjb21tZW50ID0gZ2V0X2pwZWdfQ29tbWVudCggJGpwZWdfaGVhZGVyX2RhdGEgKTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbW1lbnQgc2VnbWVudCB3YXMgdmFsaWQKICAgICAgICBpZiAoICRjb21tZW50ICE9PSBGQUxTRSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ29tbWVudCBleGlzdHMgLSBhZGQgaXQgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgJG91dHB1dCAuPSAiPGgyIGNsYXNzPVwiSlBFR19Db21tZW50X01haW5fSGVhZGluZ1wiPkpQRUcgQ29tbWVudDwvaDI+XG4iOwogICAgICAgICAgICAgICAgJG91dHB1dCAuPSAiPHAgY2xhc3M9XCJKUEVHX0NvbW1lbnRfVGV4dFwiPiRjb21tZW50PC9wPlxuIjsKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0CiAgICAgICAgcmV0dXJuICRvdXRwdXQ7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBJbnRlcnByZXRfQ29tbWVudF90b19IVE1MCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgZ2V0X2pwZWdfaW50cmluc2ljX3ZhbHVlcwoqCiogRGVzY3JpcHRpb246ICBSZXRyZWl2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGludHJpbnNpYyBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlCiogICAgICAgICAgICAgICBqcGVnIGltYWdlLCBzdWNoIGFzIEJpdHMgcGVyIENvbXBvbmVudCwgSGVpZ2h0IGFuZCBXaWR0aC4KKgoqIFBhcmFtZXRlcnM6ICAganBlZ19oZWFkZXJfZGF0YSAtIHRoZSBKUEVHIGhlYWRlciBkYXRhLCBhcyByZXRyaWV2ZWQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBnZXRfanBlZ19oZWFkZXJfZGF0YSBmdW5jdGlvbgoqCiogUmV0dXJuczogICAgICBhcnJheSAtIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGludHJpbnNpYyBKUEVHIHZhbHVlcwoqICAgICAgICAgICAgICAgRkFMU0UgLSBpZiB0aGUgY29tbWVudCBzZWdtZW50IGNvdWxkbnQgYmUgZm91bmQKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBnZXRfanBlZ19pbnRyaW5zaWNfdmFsdWVzKCAkanBlZ19oZWFkZXJfZGF0YSApCnsKICAgICAgICAvLyBDcmVhdGUgYSBibGFuayBhcnJheSBmb3IgdGhlIG91dHB1dAogICAgICAgICRPdXRwdXRhcnJheSA9IGFycmF5KCApOwoKICAgICAgICAvL0N5Y2xlIHRocm91Z2ggdGhlIGhlYWRlciBzZWdtZW50cyB1bnRpbCBTdGFydCBPZiBGcmFtZSAoU09GKSBpcyBmb3VuZCBvciB3ZSBydW4gb3V0IG9mIHNlZ21lbnRzCiAgICAgICAgJGkgPSAwOwogICAgICAgIHdoaWxlICggKCAkaSA8IGNvdW50KCAkanBlZ19oZWFkZXJfZGF0YSkgKSAgJiYgKCBzdWJzdHIoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnTmFtZSddLCAwLCAzICkgIT0gIlNPRiIgKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIGEgU09GIHNlZ21lbnQgaGFzIGJlZW4gZm91bmQKICAgICAgICBpZiAoIHN1YnN0ciggJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdOYW1lJ10sIDAsIDMgKSA9PSAiU09GIiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gU09GIHNlZ21lbnQgd2FzIGZvdW5kLCBleHRyYWN0IHRoZSBpbmZvcm1hdGlvbgoKICAgICAgICAgICAgICAgICRkYXRhID0gJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdEYXRhJ107CgogICAgICAgICAgICAgICAgLy8gRmlyc3QgYnl0ZSBpcyBCaXRzIHBlciBjb21wb25lbnQKICAgICAgICAgICAgICAgICRPdXRwdXRhcnJheVsnQml0cyBwZXIgQ29tcG9uZW50J10gPSBvcmQoICRkYXRhezB9ICk7CgogICAgICAgICAgICAgICAgLy8gU2Vjb25kIGFuZCB0aGlyZCBieXRlcyBhcmUgSW1hZ2UgSGVpZ2h0CiAgICAgICAgICAgICAgICAkT3V0cHV0YXJyYXlbJ0ltYWdlIEhlaWdodCddID0gb3JkKCAkZGF0YXsgMSB9ICkgKiAyNTYgKyBvcmQoICRkYXRheyAyIH0gKTsKCiAgICAgICAgICAgICAgICAvLyBGb3J0aCBhbmQgZmlmdGggYnl0ZXMgYXJlIEltYWdlIFdpZHRoCiAgICAgICAgICAgICAgICAkT3V0cHV0YXJyYXlbJ0ltYWdlIFdpZHRoJ10gPSBvcmQoICRkYXRheyAzIH0gKSAqIDI1NiArIG9yZCggJGRhdGF7IDQgfSApOwoKICAgICAgICAgICAgICAgIC8vIFNpeHRoIGJ5dGUgaXMgbnVtYmVyIG9mIGNvbXBvbmVudHMKICAgICAgICAgICAgICAgICRudW1jb21wb25lbnRzID0gb3JkKCAkZGF0YXsgNSB9ICk7CgogICAgICAgICAgICAgICAgLy8gRm9sbG93aW5nIHRoaXMgaXMgYSB0YWJsZSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21wb25lbnRzCiAgICAgICAgICAgICAgICBmb3IoICRpID0gMDsgJGkgPCAkbnVtY29tcG9uZW50czsgJGkrKyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRPdXRwdXRhcnJheVsnQ29tcG9uZW50cyddW10gPSBhcnJheSAoICAnQ29tcG9uZW50IElkZW50aWZpZXInID0+IG9yZCggJGRhdGF7IDYgKyAkaSAqIDMgfSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwgU2FtcGxpbmcgRmFjdG9yJyA9PiAoIG9yZCggJGRhdGF7IDcgKyAkaSAqIDMgfSApICYgMHhGMCApIC8gMTYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmVydGljYWwgU2FtcGxpbmcgRmFjdG9yJyA9PiAoIG9yZCggJGRhdGF7IDcgKyAkaSAqIDMgfSApICYgMHgwRiApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1F1YW50aXphdGlvbiB0YWJsZSBkZXN0aW5hdGlvbiBzZWxlY3RvcicgPT4gb3JkKCAkZGF0YXsgOCArICRpICogMyB9ICkgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgU3RhcnQgT2YgRnJhbWUgc2VnbWVudCwgaGVuY2UgY2FuJ3QgcmV0cmlldmUgaW5mbwogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRPdXRwdXRhcnJheTsKfQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBnZXRfanBlZ19pbnRyaW5zaWNfdmFsdWVzCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIEludGVycHJldF9pbnRyaW5zaWNfdmFsdWVzX3RvX0hUTUwKKgoqIERlc2NyaXB0aW9uOiAgR2VuZXJhdGVzIGh0bWwgc2hvd2luZyBzb21lIG9mIHRoZSBpbnRyaW5zaWMgSlBFRyB2YWx1ZXMgd2hpY2gKKiAgICAgICAgICAgICAgIHdlcmUgcmV0cmlldmVkIHdpdGggdGhlIGdldF9qcGVnX2ludHJpbnNpY192YWx1ZXMgZnVuY3Rpb24KKgoqIFBhcmFtZXRlcnM6ICAgdmFsdWVzIC0gdGhlIEpQRUcgaW50cmluc2ljIHZhbHVlcywgYXMgcmVhZCBmcm9tIGdldF9qcGVnX2ludHJpbnNpY192YWx1ZXMKKgoqIFJldHVybnM6ICAgICAgT3V0cHV0U3RyIC0gQSBzdHJpbmcgY29udGFpbmluZyB0aGUgSFRNTAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIEludGVycHJldF9pbnRyaW5zaWNfdmFsdWVzX3RvX0hUTUwoICR2YWx1ZXMgKQp7CiAgICAgICAgLy8gQ2hlY2sgdmFsdWVzIGFyZSB2YWxpZAogICAgICAgIGlmICggJHZhbHVlcyAhPSBGQUxTRSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gV3JpdGUgSGVhZGluZwogICAgICAgICAgICAgICAgJE91dHB1dFN0ciA9ICI8aDIgY2xhc3M9XCJKUEVHX0ludHJpbnNpY19NYWluX0hlYWRpbmdcIj5JbnRyaW5zaWMgSlBFRyBJbmZvcm1hdGlvbjwvaDI+XG4iOwoKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBUYWJsZQogICAgICAgICAgICAgICAgJE91dHB1dFN0ciAuPSAiPHRhYmxlIGNsYXNzPVwiSlBFR19JbnRyaW5zaWNfVGFibGVcIiBib3JkZXI9MT5cbiI7CgogICAgICAgICAgICAgICAgLy8gUHV0IGltYWdlIGhlaWdodCBhbmQgd2lkdGggaW50byB0YWJsZQogICAgICAgICAgICAgICAgJE91dHB1dFN0ciAuPSAiPHRyIGNsYXNzPVwiSlBFR19JbnRyaW5zaWNfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSlBFR19JbnRyaW5zaWNfQ2FwdGlvbl9DZWxsXCI+SW1hZ2UgSGVpZ2h0PC90ZD48dGQgY2xhc3M9XCJKUEVHX0ludHJpbnNpY19WYWx1ZV9DZWxsXCI+IiAuICR2YWx1ZXNbJ0ltYWdlIEhlaWdodCddIC4gIiBwaXhlbHM8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgJE91dHB1dFN0ciAuPSAiPHRyIGNsYXNzPVwiSlBFR19JbnRyaW5zaWNfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSlBFR19JbnRyaW5zaWNfQ2FwdGlvbl9DZWxsXCI+SW1hZ2UgV2lkdGg8L3RkPjx0ZCBjbGFzcz1cIkpQRUdfSW50cmluc2ljX1ZhbHVlX0NlbGxcIj4iIC4gJHZhbHVlc1snSW1hZ2UgV2lkdGgnXSAuICIgcGl4ZWxzPC90ZD48L3RyPlxuIjsKCiAgICAgICAgICAgICAgICAvLyBQdXQgY29sb3VyIGRlcHRoIGludG8gdGFibGUKICAgICAgICAgICAgICAgIGlmICggY291bnQoICR2YWx1ZXNbJ0NvbXBvbmVudHMnXSApID09IDEgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkT3V0cHV0U3RyIC49ICI8dHIgY2xhc3M9XCJKUEVHX0ludHJpbnNpY19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJKUEVHX0ludHJpbnNpY19DYXB0aW9uX0NlbGxcIj5Db2xvdXIgRGVwdGg8L3RkPjx0ZCBjbGFzcz1cIkpQRUdfSW50cmluc2ljX1ZhbHVlX0NlbGxcIj4iIC4gJHZhbHVlc1snQml0cyBwZXIgQ29tcG9uZW50J10gLiAiIGJpdCBNb25vY2hyb21lPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE91dHB1dFN0ciAuPSAiPHRyIGNsYXNzPVwiSlBFR19JbnRyaW5zaWNfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiSlBFR19JbnRyaW5zaWNfQ2FwdGlvbl9DZWxsXCI+Q29sb3VyIERlcHRoPC90ZD48dGQgY2xhc3M9XCJKUEVHX0ludHJpbnNpY19WYWx1ZV9DZWxsXCI+IiAuICgkdmFsdWVzWydCaXRzIHBlciBDb21wb25lbnQnXSAqIGNvdW50KCAkdmFsdWVzWydDb21wb25lbnRzJ10gKSApIC4gIiBiaXQ8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENsb3NlIFRhYmxlCiAgICAgICAgICAgICAgICAkT3V0cHV0U3RyIC49ICI8L3RhYmxlPlxuIjsKCiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gaHRtbAogICAgICAgICAgICAgICAgcmV0dXJuICRPdXRwdXRTdHI7CiAgICAgICAgfQp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgSW50ZXJwcmV0X2ludHJpbnNpY192YWx1ZXNfdG9fSFRNTAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIGdldF9qcGVnX2ltYWdlX2RhdGEKKgoqIERlc2NyaXB0aW9uOiAgUmV0cmlldmVzIHRoZSBjb21wcmVzc2VkIGltYWdlIGRhdGEgcGFydCBvZiB0aGUgSlBFRyBmaWxlCioKKiBQYXJhbWV0ZXJzOiAgIGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIG9mIHRoZSBKUEVHIGZpbGUgdG8gcmVhZAoqCiogUmV0dXJuczogICAgICBjb21wcmVzc2VkX2RhdGEgLSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21wcmVzc2VkIGRhdGEKKiAgICAgICAgICAgICAgIEZBTFNFIC0gaWYgcmV0cmlldmFsIGZhaWxlZAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIGdldF9qcGVnX2ltYWdlX2RhdGEoICRmaWxlbmFtZSApCnsKCiAgICAgICAgLy8gcHJldmVudCByZWZyZXNoIGZyb20gYWJvcnRpbmcgZmlsZSBvcGVyYXRpb25zIGFuZCBob3NpbmcgZmlsZQogICAgICAgIGlnbm9yZV91c2VyX2Fib3J0KHRydWUpOwoKICAgICAgICAvLyBBdHRlbXB0IHRvIG9wZW4gdGhlIGpwZWcgZmlsZQogICAgICAgICRmaWxlaG5kID0gQGZvcGVuKCRmaWxlbmFtZSwgJ3JiJyk7CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaWxlIG9wZW5lZCBzdWNjZXNzZnVsbHkKICAgICAgICBpZiAoICEgJGZpbGVobmQgICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBDb3VsZCd0IG9wZW4gdGhlIGZpbGUgLSBleGl0CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKCiAgICAgICAgLy8gUmVhZCB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMKICAgICAgICAkZGF0YSA9IG5ldHdvcmtfc2FmZV9mcmVhZCggJGZpbGVobmQsIDIgKTsKCiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgYXJlIDB4RkYgMHhEQSAgKFNPSSAtIFN0YXJ0IG9mIGltYWdlKQogICAgICAgIGlmICggJGRhdGEgIT0gIlx4RkZceEQ4IiApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gTm8gU09JIChGRiBEOCkgYXQgc3RhcnQgb2YgZmlsZSAtIGNsb3NlIGZpbGUgYW5kIHJldHVybjsKICAgICAgICAgICAgICAgIGZjbG9zZSgkZmlsZWhuZCk7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKCgogICAgICAgIC8vIFJlYWQgdGhlIHRoaXJkIGNoYXJhY3RlcgogICAgICAgICRkYXRhID0gbmV0d29ya19zYWZlX2ZyZWFkKCAkZmlsZWhuZCwgMiApOwoKICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSB0aGlyZCBjaGFyYWN0ZXIgaXMgMHhGRiAoU3RhcnQgb2YgZmlyc3Qgc2VnbWVudCBoZWFkZXIpCiAgICAgICAgaWYgKCAkZGF0YXswfSAhPSAiXHhGRiIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIE5PIEZGIGZvdW5kIC0gY2xvc2UgZmlsZSBhbmQgcmV0dXJuCiAgICAgICAgICAgICAgICBmY2xvc2UoJGZpbGVobmQpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gRmxhZyB0aGF0IHdlIGhhdmVudCB5ZXQgaGl0IHRoZSBjb21wcmVzc2VkIGltYWdlIGRhdGEKICAgICAgICAkaGl0X2NvbXByZXNzZWRfaW1hZ2VfZGF0YSA9IEZBTFNFOwoKCiAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCB0aGUgZmlsZSB1bnRpbCwgb25lIG9mOiAxKSBhbiBFT0kgKEVuZCBvZiBpbWFnZSkgbWFya2VyIGlzIGhpdCwKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHdlIGhhdmUgaGl0IHRoZSBjb21wcmVzc2VkIGltYWdlIGRhdGEgKG5vIG1vcmUgaGVhZGVycyBhcmUgYWxsb3dlZCBhZnRlciBkYXRhKQogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMykgb3IgZW5kIG9mIGZpbGUgaXMgaGl0CgogICAgICAgIHdoaWxlICggKCAkZGF0YXsxfSAhPSAiXHhEOSIgKSAmJiAoISAkaGl0X2NvbXByZXNzZWRfaW1hZ2VfZGF0YSkgJiYgKCAhIGZlb2YoICRmaWxlaG5kICkgKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIHNlZ21lbnQgdG8gbG9vayBhdC4KICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHNlZ21lbnQgbWFya2VyIGlzIG5vdCBhIFJlc3RhcnQgbWFya2VyIC0gcmVzdGFydCBtYXJrZXJzIGRvbid0IGhhdmUgc2l6ZSBvciBkYXRhIGFmdGVyIHRoZW0KICAgICAgICAgICAgICAgIGlmICggICggb3JkKCRkYXRhezF9KSA8IDB4RDAgKSB8fCAoIG9yZCgkZGF0YXsxfSkgPiAweEQ3ICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWdtZW50IGlzbid0IGEgUmVzdGFydCBtYXJrZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCB0d28gYnl0ZXMgKHNpemUpCiAgICAgICAgICAgICAgICAgICAgICAgICRzaXplc3RyID0gbmV0d29ya19zYWZlX2ZyZWFkKCAkZmlsZWhuZCwgMiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCB0aGUgc2l6ZSBieXRlcyB0byBhbiBpbnRlZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgICRkZWNvZGVkc2l6ZSA9IHVucGFjayAoIm5zaXplIiwgJHNpemVzdHIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIHNlZ21lbnQgZGF0YSB3aXRoIGxlbmd0aCBpbmRpY2F0ZWQgYnkgdGhlIHByZXZpb3VzbHkgcmVhZCBzaXplCiAgICAgICAgICAgICAgICAgICAgICAgICRzZWdkYXRhID0gbmV0d29ya19zYWZlX2ZyZWFkKCAkZmlsZWhuZCwgJGRlY29kZWRzaXplWydzaXplJ10gLSAyICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIFNPUyAoU3RhcnQgT2YgU2Nhbikgc2VnbWVudCwgdGhlbiB0aGVyZSBpcyBubyBtb3JlIGhlYWRlciBkYXRhIC0gdGhlIGNvbXByZXNzZWQgaW1hZ2UgZGF0YSBmb2xsb3dzCiAgICAgICAgICAgICAgICBpZiAoICRkYXRhezF9ID09ICJceERBIiApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZsYWcgdGhhdCB3ZSBoYXZlIGhpdCB0aGUgY29tcHJlc3NlZCBpbWFnZSBkYXRhIC0gZXhpdCBsb29wIGFmdGVyIHJlYWRpbmcgdGhlIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgJGhpdF9jb21wcmVzc2VkX2ltYWdlX2RhdGEgPSBUUlVFOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgdGhlIGZpbGVzaXplIGZ1bmN0aW9uIHRvIHdvcmsgb3V0CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhvdyBtdWNoIHRvIHJlYWQsIGFzIGl0IHdvbid0IHdvcmsgZm9yIGZpbGVzIGJlaW5nIHJlYWQgYnkgaHR0cCBvciBmdHAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU28gaW5zdGVhZCByZWFkIDFNYiBhdCBhIHRpbWUgdGlsbCBFT0YKCiAgICAgICAgICAgICAgICAgICAgICAgICRjb21wcmVzc2VkX2RhdGEgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wcmVzc2VkX2RhdGEgLj0gbmV0d29ya19zYWZlX2ZyZWFkKCAkZmlsZWhuZCwgMTA0ODU3NiApOwogICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKCAhIGZlb2YoICRmaWxlaG5kICkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmlwIG9mZiBFT0kgYW5kIGFueXRoaW5nIGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICRFT0lfcG9zID0gc3RycG9zKCAkY29tcHJlc3NlZF9kYXRhLCAiXHhGRlx4RDkiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb21wcmVzc2VkX2RhdGEgPSBzdWJzdHIoICRjb21wcmVzc2VkX2RhdGEsIDAsICRFT0lfcG9zICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhbiBTT1MgLSBSZWFkIHRoZSBuZXh0IHR3byBieXRlcyAtIHNob3VsZCBiZSB0aGUgc2VnbWVudCBtYXJrZXIgZm9yIHRoZSBuZXh0IHNlZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSBuZXR3b3JrX3NhZmVfZnJlYWQoICRmaWxlaG5kLCAyICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSB0d28gaXMgMHhGRiBhcyBpdCBzaG91bGQgYmUgZm9yIGEgbWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGRhdGF7MH0gIT0gIlx4RkYiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb2JsZW0gLSBOTyBGRiBmb3VuZGNsb3NlIGZpbGUgYW5kIHJldHVybiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRmaWxlaG5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIENsb3NlIEZpbGUKICAgICAgICBmY2xvc2UoJGZpbGVobmQpOwoKICAgICAgICAvLyBBbG93IHRoZSB1c2VyIHRvIGFib3J0IGZyb20gbm93IG9uCiAgICAgICAgaWdub3JlX3VzZXJfYWJvcnQoZmFsc2UpOwoKCiAgICAgICAgLy8gUmV0dXJuIHRoZSBjb21wcmVzc2VkIGRhdGEgaWYgaXQgd2FzIGZvdW5kCiAgICAgICAgaWYgKCAkaGl0X2NvbXByZXNzZWRfaW1hZ2VfZGF0YSApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICRjb21wcmVzc2VkX2RhdGE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQp9CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIGdldF9qcGVnX2ltYWdlX2RhdGEKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBHZW5lcmF0ZV9KUEVHX0FQUF9TZWdtZW50X0hUTUwKKgoqIERlc2NyaXB0aW9uOiAgR2VuZXJhdGVzIGh0bWwgc2hvd2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQXBwbGljYXRpb24gKEFQUCkKKiAgICAgICAgICAgICAgIHNlZ21lbnRzIHdoaWNoIGFyZSBwcmVzZW50IGluIHRoZSBKUEVHIGZpbGUKKgoqIFBhcmFtZXRlcnM6ICAganBlZ19oZWFkZXJfZGF0YSAtIHRoZSBKUEVHIGhlYWRlciBkYXRhLCBhcyByZXRyaWV2ZWQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBnZXRfanBlZ19oZWFkZXJfZGF0YSBmdW5jdGlvbgoqCiogUmV0dXJuczogICAgICBvdXRwdXQgLSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBIVE1MCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gR2VuZXJhdGVfSlBFR19BUFBfU2VnbWVudF9IVE1MKCAkanBlZ19oZWFkZXJfZGF0YSApCnsKICAgICAgICBpZiAoICRqcGVnX2hlYWRlcl9kYXRhID09IEZBTFNFICkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQoKCiAgICAgICAgLy8gV3JpdGUgSGVhZGluZwogICAgICAgICRvdXRwdXQgPSAiPGgyIGNsYXNzPVwiSlBFR19BUFBfU2VnbWVudHNfTWFpbl9IZWFkaW5nXCI+QXBwbGljYXRpb24gTWV0YWRhdGEgU2VnbWVudHM8L2gyPlxuIjsKCiAgICAgICAgLy8gQ3JlYXRlIHRhYmxlCiAgICAgICAgJG91dHB1dCAuPSAiPHRhYmxlIGNsYXNzPVwiSlBFR19BUFBfU2VnbWVudHNfVGFibGVcIiBib3JkZXI9MT5cbiI7CgoKICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggc2VnbWVudCBpbiB0aGUgYXJyYXkKCiAgICAgICAgZm9yZWFjaCggJGpwZWdfaGVhZGVyX2RhdGEgYXMgJGpwZWdfaGVhZGVyICkKICAgICAgICB7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNlZ21lbnQgaXMgYSBBUFAgc2VnbWVudAoKICAgICAgICAgICAgICAgIGlmICggKCAkanBlZ19oZWFkZXJbJ1NlZ1R5cGUnXSA+PSAweEUwICkgJiYgKCAkanBlZ19oZWFkZXJbJ1NlZ1R5cGUnXSA8PSAweEVGICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIEFQUCBzZWdtZW50CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIEFQUCBTZWdtZW50IE5hbWUgLSBhIE51bGwgdGVybWluYXRlZCBzdHJpbmcgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzZWdtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWdfbmFtZSA9IHN0cnRvaygkanBlZ19oZWFkZXJbJ1NlZ0RhdGEnXSwgIlx4MDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbWUgU2VnbWVudCBuYW1lcyBhcmUgZWl0aGVyIHRvbyBsb25nIG9yIG5vdCBtZWFuaW5nZnVsbCwgc28KICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkIGNsZWFuIHRoZW0gdXAKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHNlZ19uYW1lID09ICJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VnX25hbWUgPSAiWEFQL1JERiAoXCJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvXCIpIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkc2VnX25hbWUgPT0gIlBob3Rvc2hvcCAzLjAiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWdfbmFtZSA9ICJQaG90b3Nob3AgSVJCIChcIlBob3Rvc2hvcCAzLjBcIikiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoICggc3RybmNtcCAoICRzZWdfbmFtZSwgIltwaWN0dXJlIGluZm9dIiwgMTQpID09IDAgKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN0cm5jbXAgKCAkc2VnX25hbWUsICJceDBhXHgwOVx4MDlceDA5XHgwOVtwaWN0dXJlIGluZm9dIiwgMTkpID09IDAgKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VnX25hbWUgPSAiW3BpY3R1cmUgaW5mb10iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoICBzdHJuY21wICggJHNlZ19uYW1lLCAiVHlwZT0iLCA1KSA9PSAwICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWdfbmFtZSA9ICJFcHNvbiBJbmZvIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAoIHN0cm5jbXAgKCAkc2VnX25hbWUsICJISEhISEhISEhISEhISEgiLCAxNSkgPT0gMCApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RybmNtcCAoICRzZWdfbmFtZSwgIkBzMzMiLCA1KSA9PSAwICkgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlZ19uYW1lID0gIkhQIHNlZ21lbnQgZnVsbCBvZiBcIkhISEhIXCIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW4gdGhlIHNlZ21lbnQgbmFtZSBzbyBpdCBkb2Vzbid0IGNhdXNlIHByb2JsZW1zIHdpdGggSFRNTAogICAgICAgICAgICAgICAgICAgICAgICAkc2VnX25hbWUgPSBodG1sZW50aXRpZXMoICRzZWdfbmFtZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3V0cHV0IGEgVGFibGUgcm93IGNvbnRhaW5pbmcgdGhpcyBBUFAgc2VnbWVudAogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICI8dHIgY2xhc3M9XCJKUEVHX0FQUF9TZWdtZW50c19UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJKUEVHX0FQUF9TZWdtZW50c19DYXB0aW9uX0NlbGxcIj4kc2VnX25hbWU8L3RkPjx0ZCBjbGFzcz1cIkpQRUdfQVBQX1NlZ21lbnRzX1R5cGVfQ2VsbFwiPiIgLiAkanBlZ19oZWFkZXJbJ1NlZ05hbWUnXSAuICI8L3RkPjx0ZCAgY2xhc3M9XCJKUEVHX0FQUF9TZWdtZW50c19TaXplX0NlbGxcIiBhbGlnbj1cInJpZ2h0XCI+IiAuIHN0cmxlbiggJGpwZWdfaGVhZGVyWydTZWdEYXRhJ10pLiAiIGJ5dGVzPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIENsb3NlIHRoZSB0YWJsZQogICAgICAgICRvdXRwdXQgLj0gIjwvdGFibGU+XG4iOwoKICAgICAgICAvLyBSZXR1cm4gdGhlIEhUTUwKICAgICAgICByZXR1cm4gJG91dHB1dDsKfQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBHZW5lcmF0ZV9KUEVHX0FQUF9TZWdtZW50X0hUTUwKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBuZXR3b3JrX3NhZmVfZnJlYWQKKgoqIERlc2NyaXB0aW9uOiAgUmV0cmlldmVzIGRhdGEgZnJvbSBhIGZpbGUuIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgc2luY2UKKiAgICAgICAgICAgICAgIHRoZSBmcmVhZCBmdW5jdGlvbiB3aWxsIG5vdCBhbHdheXMgcmV0dXJuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyCiogICAgICAgICAgICAgICBvZiBjaGFyYWN0ZXJzIHdoZW4gcmVhZGluZyBmcm9tIGEgbmV0d29yayBzdHJlYW0gb3IgcGlwZQoqCiogUGFyYW1ldGVyczogICBmaWxlX2hhbmRsZSAtIHRoZSBoYW5kbGUgb2YgYSBmaWxlIHRvIHJlYWQgZnJvbQoqICAgICAgICAgICAgICAgbGVuZ3RoIC0gdGhlIG51bWJlciBvZiBieXRlcyByZXF1ZXN0ZWQKKgoqIFJldHVybnM6ICAgICAgZGF0YSAtIHRoZSBkYXRhIHJlYWQgZnJvbSB0aGUgZmlsZS4gbWF5IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyCiogICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkIGlmIEVPRiB3YXMgaGl0CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gbmV0d29ya19zYWZlX2ZyZWFkKCAkZmlsZV9oYW5kbGUsICRsZW5ndGggKQp7CiAgICAgICAgLy8gQ3JlYXRlIGJsYW5rIHN0cmluZyB0byByZWNlaXZlIGRhdGEKICAgICAgICAkZGF0YSA9ICIiOwoKICAgICAgICAvLyBLZWVwIHJlYWRpbmcgZGF0YSBmcm9tIHRoZSBmaWxlIHVudGlsIGVpdGhlciBFT0Ygb2NjdXJzIG9yIHdlIGhhdmUKICAgICAgICAvLyByZXRyaWV2ZWQgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMKCiAgICAgICAgd2hpbGUgKCAoICFmZW9mKCAkZmlsZV9oYW5kbGUgKSApICYmICggc3RybGVuKCRkYXRhKSA8ICRsZW5ndGggKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJGRhdGEgLj0gZnJlYWQoICRmaWxlX2hhbmRsZSwgJGxlbmd0aC1zdHJsZW4oJGRhdGEpICk7CiAgICAgICAgfQoKICAgICAgICAvLyByZXR1cm4gdGhlIGRhdGEgcmVhZAogICAgICAgIHJldHVybiAkZGF0YTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIG5ldHdvcmtfc2FmZV9mcmVhZAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogR2xvYmFsIFZhcmlhYmxlOiAgICAgIEpQRUdfU2VnbWVudF9OYW1lcwoqCiogQ29udGVudHM6ICAgICBUaGUgbmFtZXMgb2YgdGhlIEpQRUcgc2VnbWVudCBtYXJrZXJzLCBpbmRleGVkIGJ5IHRoZWlyIG1hcmtlciBudW1iZXIKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgokR0xPQkFMU1sgIkpQRUdfU2VnbWVudF9OYW1lcyIgXSA9IGFycmF5KAoKMHhDMCA9PiAgIlNPRjAiLCAgMHhDMSA9PiAgIlNPRjEiLCAgMHhDMiA9PiAgIlNPRjIiLCAgMHhDMyA9PiAgIlNPRjQiLAoweEM1ID0+ICAiU09GNSIsICAweEM2ID0+ICAiU09GNiIsICAweEM3ID0+ICAiU09GNyIsICAweEM4ID0+ICAiSlBHIiwKMHhDOSA9PiAgIlNPRjkiLCAgMHhDQSA9PiAgIlNPRjEwIiwgMHhDQiA9PiAgIlNPRjExIiwgMHhDRCA9PiAgIlNPRjEzIiwKMHhDRSA9PiAgIlNPRjE0IiwgMHhDRiA9PiAgIlNPRjE1IiwKMHhDNCA9PiAgIkRIVCIsICAgMHhDQyA9PiAgIkRBQyIsCgoweEQwID0+ICAiUlNUMCIsICAweEQxID0+ICAiUlNUMSIsICAweEQyID0+ICAiUlNUMiIsICAweEQzID0+ICAiUlNUMyIsCjB4RDQgPT4gICJSU1Q0IiwgIDB4RDUgPT4gICJSU1Q1IiwgIDB4RDYgPT4gICJSU1Q2IiwgIDB4RDcgPT4gICJSU1Q3IiwKCjB4RDggPT4gICJTT0kiLCAgIDB4RDkgPT4gICJFT0kiLCAgIDB4REEgPT4gICJTT1MiLCAgIDB4REIgPT4gICJEUVQiLAoweERDID0+ICAiRE5MIiwgICAweEREID0+ICAiRFJJIiwgICAweERFID0+ICAiREhQIiwgICAweERGID0+ICAiRVhQIiwKCjB4RTAgPT4gICJBUFAwIiwgIDB4RTEgPT4gICJBUFAxIiwgIDB4RTIgPT4gICJBUFAyIiwgIDB4RTMgPT4gICJBUFAzIiwKMHhFNCA9PiAgIkFQUDQiLCAgMHhFNSA9PiAgIkFQUDUiLCAgMHhFNiA9PiAgIkFQUDYiLCAgMHhFNyA9PiAgIkFQUDciLAoweEU4ID0+ICAiQVBQOCIsICAweEU5ID0+ICAiQVBQOSIsICAweEVBID0+ICAiQVBQMTAiLCAweEVCID0+ICAiQVBQMTEiLAoweEVDID0+ICAiQVBQMTIiLCAweEVEID0+ICAiQVBQMTMiLCAweEVFID0+ICAiQVBQMTQiLCAweEVGID0+ICAiQVBQMTUiLAoKCjB4RjAgPT4gICJKUEcwIiwgIDB4RjEgPT4gICJKUEcxIiwgIDB4RjIgPT4gICJKUEcyIiwgIDB4RjMgPT4gICJKUEczIiwKMHhGNCA9PiAgIkpQRzQiLCAgMHhGNSA9PiAgIkpQRzUiLCAgMHhGNiA9PiAgIkpQRzYiLCAgMHhGNyA9PiAgIkpQRzciLAoweEY4ID0+ICAiSlBHOCIsICAweEY5ID0+ICAiSlBHOSIsICAweEZBID0+ICAiSlBHMTAiLCAweEZCID0+ICAiSlBHMTEiLAoweEZDID0+ICAiSlBHMTIiLCAweEZEID0+ICAiSlBHMTMiLAoKMHhGRSA9PiAgIkNPTSIsICAgMHgwMSA9PiAgIlRFTSIsICAgMHgwMiA9PiAgIlJFUyIsCgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBHbG9iYWwgVmFyaWFibGU6ICAgICBKUEVHX1NlZ21lbnRfTmFtZXMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBHbG9iYWwgVmFyaWFibGU6ICAgICAgSlBFR19TZWdtZW50X0Rlc2NyaXB0aW9ucwoqCiogQ29udGVudHM6ICAgICBUaGUgZGVzY3JpcHRpb25zIG9mIHRoZSBKUEVHIHNlZ21lbnQgbWFya2VycywgaW5kZXhlZCBieSB0aGVpciBtYXJrZXIgbnVtYmVyCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKJEdMT0JBTFNbICJKUEVHX1NlZ21lbnRfRGVzY3JpcHRpb25zIiBdID0gYXJyYXkoCgovKiBKSUYgTWFya2VyIGJ5dGUgcGFpcnMgaW4gSlBFRyBJbnRlcmNoYW5nZSBGb3JtYXQgc2VxdWVuY2UgKi8KMHhDMCA9PiAiU3RhcnQgT2YgRnJhbWUgKFNPRikgSHVmZm1hbiAgLSBCYXNlbGluZSBEQ1QiLAoweEMxID0+ICAiU3RhcnQgT2YgRnJhbWUgKFNPRikgSHVmZm1hbiAgLSBFeHRlbmRlZCBzZXF1ZW50aWFsIERDVCIsCjB4QzIgPT4gICJTdGFydCBPZiBGcmFtZSBIdWZmbWFuICAtIFByb2dyZXNzaXZlIERDVCAoU09GMikiLAoweEMzID0+ICAiU3RhcnQgT2YgRnJhbWUgSHVmZm1hbiAgLSBTcGF0aWFsIChzZXF1ZW50aWFsKSBsb3NzbGVzcyAoU09GMykiLAoweEM1ID0+ICAiU3RhcnQgT2YgRnJhbWUgSHVmZm1hbiAgLSBEaWZmZXJlbnRpYWwgc2VxdWVudGlhbCBEQ1QgKFNPRjUpIiwKMHhDNiA9PiAgIlN0YXJ0IE9mIEZyYW1lIEh1ZmZtYW4gIC0gRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlIERDVCAoU09GNikiLAoweEM3ID0+ICAiU3RhcnQgT2YgRnJhbWUgSHVmZm1hbiAgLSBEaWZmZXJlbnRpYWwgc3BhdGlhbCAoU09GNykiLAoweEM4ID0+ICAiU3RhcnQgT2YgRnJhbWUgQXJpdGhtZXRpYyAtIFJlc2VydmVkIGZvciBKUEVHIGV4dGVuc2lvbnMgKEpQRykiLAoweEM5ID0+ICAiU3RhcnQgT2YgRnJhbWUgQXJpdGhtZXRpYyAtIEV4dGVuZGVkIHNlcXVlbnRpYWwgRENUIChTT0Y5KSIsCjB4Q0EgPT4gICJTdGFydCBPZiBGcmFtZSBBcml0aG1ldGljIC0gUHJvZ3Jlc3NpdmUgRENUIChTT0YxMCkiLAoweENCID0+ICAiU3RhcnQgT2YgRnJhbWUgQXJpdGhtZXRpYyAtIFNwYXRpYWwgKHNlcXVlbnRpYWwpIGxvc3NsZXNzIChTT0YxMSkiLAoweENEID0+ICAiU3RhcnQgT2YgRnJhbWUgQXJpdGhtZXRpYyAtIERpZmZlcmVudGlhbCBzZXF1ZW50aWFsIERDVCAoU09GMTMpIiwKMHhDRSA9PiAgIlN0YXJ0IE9mIEZyYW1lIEFyaXRobWV0aWMgLSBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUgRENUIChTT0YxNCkiLAoweENGID0+ICAiU3RhcnQgT2YgRnJhbWUgQXJpdGhtZXRpYyAtIERpZmZlcmVudGlhbCBzcGF0aWFsIChTT0YxNSkiLAoweEM0ID0+ICAiRGVmaW5lIEh1ZmZtYW4gVGFibGUocykgKERIVCkiLAoweENDID0+ICAiRGVmaW5lIEFyaXRobWV0aWMgY29kaW5nIGNvbmRpdGlvbmluZyhzKSAoREFDKSIsCgoweEQwID0+ICAiUmVzdGFydCB3aXRoIG1vZHVsbyA4IGNvdW50IDAgKFJTVDApIiwKMHhEMSA9PiAgIlJlc3RhcnQgd2l0aCBtb2R1bG8gOCBjb3VudCAxIChSU1QxKSIsCjB4RDIgPT4gICJSZXN0YXJ0IHdpdGggbW9kdWxvIDggY291bnQgMiAoUlNUMikiLAoweEQzID0+ICAiUmVzdGFydCB3aXRoIG1vZHVsbyA4IGNvdW50IDMgKFJTVDMpIiwKMHhENCA9PiAgIlJlc3RhcnQgd2l0aCBtb2R1bG8gOCBjb3VudCA0IChSU1Q0KSIsCjB4RDUgPT4gICJSZXN0YXJ0IHdpdGggbW9kdWxvIDggY291bnQgNSAoUlNUNSkiLAoweEQ2ID0+ICAiUmVzdGFydCB3aXRoIG1vZHVsbyA4IGNvdW50IDYgKFJTVDYpIiwKMHhENyA9PiAgIlJlc3RhcnQgd2l0aCBtb2R1bG8gOCBjb3VudCA3IChSU1Q3KSIsCgoweEQ4ID0+ICAiU3RhcnQgb2YgSW1hZ2UgKFNPSSkiLAoweEQ5ID0+ICAiRW5kIG9mIEltYWdlIChFT0kpIiwKMHhEQSA9PiAgIlN0YXJ0IG9mIFNjYW4gKFNPUykiLAoweERCID0+ICAiRGVmaW5lIHF1YW50aXphdGlvbiBUYWJsZShzKSAoRFFUKSIsCjB4REMgPT4gICJEZWZpbmUgTnVtYmVyIG9mIExpbmVzIChETkwpIiwKMHhERCA9PiAgIkRlZmluZSBSZXN0YXJ0IEludGVydmFsIChEUkkpIiwKMHhERSA9PiAgIkRlZmluZSBIaWVyYXJjaGljYWwgcHJvZ3Jlc3Npb24gKERIUCkiLAoweERGID0+ICAiRXhwYW5kIFJlZmVyZW5jZSBDb21wb25lbnQocykgKEVYUCkiLAoKMHhFMCA9PiAgIkFwcGxpY2F0aW9uIEZpZWxkIDAgKEFQUDApIC0gdXN1YWxseSBKRklGIG9yIEpGWFgiLAoweEUxID0+ICAiQXBwbGljYXRpb24gRmllbGQgMSAoQVBQMSkgLSB1c3VhbGx5IEVYSUYgb3IgWE1QL1JERiIsCjB4RTIgPT4gICJBcHBsaWNhdGlvbiBGaWVsZCAyIChBUFAyKSAtIHVzdWFsbHkgRmxhc2hwaXgiLAoweEUzID0+ICAiQXBwbGljYXRpb24gRmllbGQgMyAoQVBQMykiLAoweEU0ID0+ICAiQXBwbGljYXRpb24gRmllbGQgNCAoQVBQNCkiLAoweEU1ID0+ICAiQXBwbGljYXRpb24gRmllbGQgNSAoQVBQNSkiLAoweEU2ID0+ICAiQXBwbGljYXRpb24gRmllbGQgNiAoQVBQNikiLAoweEU3ID0+ICAiQXBwbGljYXRpb24gRmllbGQgNyAoQVBQNykiLAoKMHhFOCA9PiAgIkFwcGxpY2F0aW9uIEZpZWxkIDggKEFQUDgpIiwKMHhFOSA9PiAgIkFwcGxpY2F0aW9uIEZpZWxkIDkgKEFQUDkpIiwKMHhFQSA9PiAgIkFwcGxpY2F0aW9uIEZpZWxkIDEwIChBUFAxMCkiLAoweEVCID0+ICAiQXBwbGljYXRpb24gRmllbGQgMTEgKEFQUDExKSIsCjB4RUMgPT4gICJBcHBsaWNhdGlvbiBGaWVsZCAxMiAoQVBQMTIpIC0gdXN1YWxseSBbcGljdHVyZSBpbmZvXSIsCjB4RUQgPT4gICJBcHBsaWNhdGlvbiBGaWVsZCAxMyAoQVBQMTMpIC0gdXN1YWxseSBwaG90b3Nob3AgSVJCIC8gSVBUQyIsCjB4RUUgPT4gICJBcHBsaWNhdGlvbiBGaWVsZCAxNCAoQVBQMTQpIiwKMHhFRiA9PiAgIkFwcGxpY2F0aW9uIEZpZWxkIDE1IChBUFAxNSkiLAoKCjB4RjAgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEcwKSIsCjB4RjEgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEcxKSIsCjB4RjIgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEcyKSIsCjB4RjMgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEczKSIsCjB4RjQgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEc0KSIsCjB4RjUgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEc1KSIsCjB4RjYgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEc2KSIsCjB4RjcgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEc3KSIsCjB4RjggPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEc4KSIsCjB4RjkgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEc5KSIsCjB4RkEgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEcxMCkiLAoweEZCID0+ICAiUmVzZXJ2ZWQgZm9yIEpQRUcgZXh0ZW5zaW9ucyAoSlBHMTEpIiwKMHhGQyA9PiAgIlJlc2VydmVkIGZvciBKUEVHIGV4dGVuc2lvbnMgKEpQRzEyKSIsCjB4RkQgPT4gICJSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zIChKUEcxMykiLAoKMHhGRSA9PiAgIkNvbW1lbnQgKENPTSkiLAoweDAxID0+ICAiRm9yIHRlbXAgcHJpdmF0ZSB1c2UgYXJpdGggY29kZSAoVEVNKSIsCjB4MDIgPT4gICJSZXNlcnZlZCAoUkVTKSIsCgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBHbG9iYWwgVmFyaWFibGU6ICAgICBKUEVHX1NlZ21lbnRfRGVzY3JpcHRpb25zCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKPz4=');
expand_3537250845($outputDir, 'includes/toolkit/PIM.php', 'PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZpbGVuYW1lOiAgICAgUElNLnBocAoqCiogRGVzY3JpcHRpb246ICBQcm92aWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcsIHdyaXRpbmcgYW5kIGludGVycHJldGluZyBhCiogICAgICAgICAgICAgICBQcmludCBJbWFnZSBNYXRjaGluZyBpbmZvcm1hdGlvbiBkYXRhIGJsb2NrLgoqCiogQXV0aG9yOiAgICAgICBFdmFuIEh1bnRlcgoqCiogRGF0ZTogICAgICAgICAyMy83LzIwMDQKKgoqIFByb2plY3Q6ICAgICAgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdAoqCiogUmV2aXNpb246ICAgICAxLjAwCioKKiBVUkw6ICAgICAgICAgIGh0dHA6Ly9lbGVjdHJvbmljcy5vemhpa2VyLmNvbQoqCiogQ29weXJpZ2h0OiAgICBDb3B5cmlnaHQgRXZhbiBIdW50ZXIgMjAwNAoqCiogTGljZW5zZTogICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdC4KKgoqICAgICAgICAgICAgICAgVGhlIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbgoqICAgICAgICAgICAgICAgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQoqICAgICAgICAgICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiogICAgICAgICAgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgoqICAgICAgICAgICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKgoqICAgICAgICAgICAgICAgVGhlIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUKKiAgICAgICAgICAgICAgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dAoqICAgICAgICAgICAgICAgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwoqICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQoqICAgICAgICAgICAgICAgZm9yIG1vcmUgZGV0YWlscy4KKgoqICAgICAgICAgICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiogICAgICAgICAgICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQ7IGlmIG5vdCwKKiAgICAgICAgICAgICAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQoqICAgICAgICAgICAgICAgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCioKKiAgICAgICAgICAgICAgIElmIHlvdSByZXF1aXJlIGEgZGlmZmVyZW50IGxpY2Vuc2UgZm9yIGNvbW1lcmNpYWwgb3Igb3RoZXIKKiAgICAgICAgICAgICAgIHB1cnBvc2VzLCBwbGVhc2UgY29udGFjdCB0aGUgYXV0aG9yOiBldmFuQG96aGlrZXIuY29tCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCmluY2x1ZGVfb25jZSAiRVhJRi5waHAiOwoKLy8gVE9ETyBGaW5kIG91dCBkZWZpbml0aW9ucyBvZiBQcmludCBJbWFnZSBNYXRjaGluZyBJbmZvIHRhZ3MKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIERlY29kZV9QSU0KKgoqIERlc2NyaXB0aW9uOiAgRGVjb2RlcyB0aGUgY29udGVudHMgb2YgYSBFWElGIHRhZyBjb250YWluaW5nIFByaW50IEltYWdlCiogICAgICAgICAgICAgICBNYXRjaGluZyBpbmZvcm1hdGlvbiwgYW5kIHJldHVybnMgdGhlIGNvbnRlbnRzIGFzIGFuIGFycmF5CioKKiBQYXJhbWV0ZXJzOiAgIHRhZyAtIEFuIEVYSUYgdGFnIGNvbnRhaW5pbmcgUHJpbnQgSW1hZ2UgTWF0Y2hpbmcgaW5mb3JtYXRpb24KKiAgICAgICAgICAgICAgICAgICAgIGFzIGZyb20gZ2V0X0VYSUZfSlBFRwoqICAgICAgICAgICAgICAgVGFnX0RlZmluaXRpb25zX05hbWUgLSBUaGUgbmFtZSBvZiB0aGUgVGFnIERlZmluaXRpb25zIGdyb3VwCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgZ2xvYmFsIGFycmF5IElGRF9UYWdfRGVmaW5pdGlvbnMKKgoqIFJldHVybnM6ICAgICAgbmV3dGFnIC0gVGhlIEVYSUYgdGFnLCBtb2RpZmllZCB3aXRoIHRoZSBkYXRhIGZpZWxkIGNvbnRhaW5pbmcKKiAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFycmF5IG9mIHRoZSBQSU0gY29udGVudHMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBEZWNvZGVfUElNKCAkdGFnLCAkVGFnX0RlZmluaXRpb25zX05hbWUgKQp7CgogICAgICAgIC8vIENyZWF0ZSBhIG5ldyBFWElGIHRhZyBmb3IgdGhlIG91dHB1dAogICAgICAgICRuZXd0YWcgPSAkdGFnOwoKICAgICAgICAvLyBDaGVjayB0aGF0IHRoaXMgdGFnIGlzIGZvciBQcmludCBJbWFnZSBNYXRjaGluZyBJbmZvCiAgICAgICAgaWYgKCAkdGFnWydUeXBlJ10gPT0gIlBJTSIgKQogICAgICAgIHsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBkYXRhIHN0YXJ0cyB3aXRoIFByaW50SU0KICAgICAgICAgICAgICAgIGlmICggc3Vic3RyKCAkdGFnWydEYXRhJ10sIDAsIDggKSA9PSAiUHJpbnRJTVx4MDAiICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGVuZCBvZiB0aGUgdmVyc2lvbiBzdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoICR2ZXJfcG9zID0gc3RycG9zICggJHRhZ1snRGF0YSddLCAiXDAiLCA4ICkgKSA9PSAtMSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3VsZG4ndCBmaW5kIHRoZSBzdGFydCBvZiB0aGUgdmVyc2lvbiBzdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG5ld3RhZzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IHRvIHJlY2VpdmUgdGhlIERhdGEKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld3RhZ1snRGF0YSddID0gYXJyYXkoICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBQcmludElNIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgJG5ld3RhZ1snRGF0YSddWydWZXJzaW9uJ10gPSBzdWJzdHIoICR0YWdbJ0RhdGEnXSwgOCwgJHZlcl9wb3MgLSA4ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIHBvc2l0aW9uIG92ZXIgdGhlIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgJGNvdW50X3BvcyA9ICAkdmVyX3BvcysyOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgY291bnQgb2YgdGFncyAtIDIgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgJFBJX3RhZ19jb3VudCA9IGdldF9JRkRfRGF0YV9UeXBlKCBzdWJzdHIoJHRhZ1snRGF0YSddLCAkY291bnRfcG9zLCAyKSAsIDMsICR0YWdbJ0J5dGUgQWxpZ24nXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFuYXNvbmljIGhhdmUgcHV0IGFuIGV4dHJhIE51bGwgYWZ0ZXIgdGhlIFZlcnNpb24sIHdoaWNoCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhdXNlcyB0aGUgdGFnIGNvdW50IHRvIGJlIHdyb25nIC0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQgaXMgemVybyAtIGkuZS4gcG9zc2libHkgd3JvbmcKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoICRQSV90YWdfY291bnQgPT0gMCApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhZyBjb3VudCBpcyB6ZXJvIC0gdHJ5IG1vdmluZyB0aGUgcG9zaXRpb24gYnkgb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gcmUtZXh0cmFjdGluZyB0aGUgY291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY291bnRfcG9zKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBJX3RhZ19jb3VudCA9IGdldF9JRkRfRGF0YV9UeXBlKCBzdWJzdHIoJHRhZ1snRGF0YSddLCAkY291bnRfcG9zLCAyKSAsIDMsICR0YWdbJ0J5dGUgQWxpZ24nXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBkYXRhIHBhcnQgb2YgdGhlIFByaW50SU0gYmxvY2sKICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGFfcGFydCA9IHN1YnN0cigkdGFnWydEYXRhJ10sICRjb3VudF9wb3MrMik7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggdGFnCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoICRhID0gMDsgJGEgPCAkUElfdGFnX2NvdW50OyAkYSsrICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIHRhZyBudW1iZXIgLSAyIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBJX3RhZyA9IGdldF9JRkRfRGF0YV9UeXBlKCBzdWJzdHIoJGRhdGFfcGFydCwgJGEqNiwgMikgLCAzLCAkdGFnWydCeXRlIEFsaWduJ10gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSB0YWcgZGF0YSAtIDQgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3dGFnWydEYXRhJ11bIF0gPSBhcnJheSggJ1RhZyBOdW1iZXInID0+ICRQSV90YWcsICdEYXRhJyA9PiBzdWJzdHIoJGRhdGFfcGFydCwgJGEqNisyLCA0KSAsICdEZWNvZGVkJyA9PiBGYWxzZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiB0aGUgdXBkYXRlZCB0YWcKICAgICAgICByZXR1cm4gJG5ld3RhZzsKICAgICAgICAKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIERlY29kZV9QSU0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBFbmNvZGVfUElNCioKKiBEZXNjcmlwdGlvbjogIEVuY29kZXMgdGhlIGNvbnRlbnRzIG9mIGEgRVhJRiB0YWcgY29udGFpbmluZyBQcmludCBJbWFnZQoqICAgICAgICAgICAgICAgTWF0Y2hpbmcgaW5mb3JtYXRpb24sIGFuZCByZXR1cm5zIHRoZSBjb250ZW50cyBhcyBhIHBhY2tlZCBiaW5hcnkgc3RyaW5nCioKKiBQYXJhbWV0ZXJzOiAgIHRhZyAtIEFuIEVYSUYgdGFnIGNvbnRhaW5pbmcgUHJpbnQgSW1hZ2UgTWF0Y2hpbmcgaW5mb3JtYXRpb24KKiAgICAgICAgICAgICAgICAgICAgIGFzIGZyb20gZ2V0X0VYSUZfSlBFRwoqICAgICAgICAgICAgICAgQnl0ZV9BbGlnbiAtIHRoZSBCeXRlIGFsaWdubWVudCB0byB1c2UgLSAiTU0iIG9yICJJSSIKKgoqIFJldHVybnM6ICAgICAgcGFja2VkX2RhdGEgLSBUaGUgcGFja2VkIGJpbmFyeSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBQSU0gZGF0YQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIEVuY29kZV9QSU0oICR0YWcsICRCeXRlX0FsaWduKQp7CgogICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyB0byByZWNlaXZlIHRoZSBwYWNrZWQgZGF0YQogICAgICAgICRwYWNrZWRfZGF0YSA9ICIiOwoKICAgICAgICAvLyBDaGVjayB0aGF0IHRoaXMgdGFnIGlzIGZvciBQcmludCBJbWFnZSBNYXRjaGluZyBJbmZvCiAgICAgICAgaWYgKCAkdGFnWydUeXBlJ10gPT0gIlBJTSIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHRhZyBoYXMgYmVlbiBkZWNvZGVkIC0gb3RoZXJ3aXNlIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcKICAgICAgICAgICAgICAgIGlmICggKCBpc19hcnJheSggJHRhZ1snRGF0YSddICkgKSAmJgogICAgICAgICAgICAgICAgICAgICAoIGNvdW50ICggJHRhZ1snRGF0YSddICkgPiAwICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGhlYWRlciB0byB0aGUgcGFja2VkIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgJHBhY2tlZF9kYXRhIC49ICJQcmludElNXHgwMCI7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHZlcnNpb24gdG8gdGhlIHBhY2tlZCBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICRwYWNrZWRfZGF0YSAuPSAkdGFnWydEYXRhJ11bJ1ZlcnNpb24nXSAuICJceDAwIjsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyB0byByZWNlaXZlIHRoZSB0YWcgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAkdGFnX2RhdGFfc3RyID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggdGFnCiAgICAgICAgICAgICAgICAgICAgICAgICR0YWdfY291bnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCAkdGFnWydEYXRhJ10gYXMgJGtleSA9PiAkY3Vycl90YWcgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoaXMgaXMgYSB0YWcgYW5kIG5vdCBzdXBwbGVtZW50YXJ5IGluZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzX251bWVyaWMoICRrZXkgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ291bnQgaG93IG1hbnkgdGFncyBhcmUgY3JlYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhZ19jb3VudCsrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgdGFnIG51bWJlciB0byB0aGUgcGFja2VkIHRhZyBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFnX2RhdGFfc3RyIC49IHB1dF9JRkRfRGF0YV9UeXBlKCAkY3Vycl90YWdbJ1RhZyBOdW1iZXInXSwgMywgJEJ5dGVfQWxpZ24gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHRhZyBkYXRhIHRvIHRoZSBwYWNrZWQgdGFnIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWdfZGF0YV9zdHIgLj0gJGN1cnJfdGFnWydEYXRhJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHRhZyBjb3VudCB0byB0aGUgcGFja2VkIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgJHBhY2tlZF9kYXRhIC49IHB1dF9JRkRfRGF0YV9UeXBlKCAkdGFnX2NvdW50LCAzLCAkQnl0ZV9BbGlnbiApOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBwYWNrZWQgdGFnIGRhdGEgdG8gdGhlIHBhY2tlZCBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICRwYWNrZWRfZGF0YSAuPSAkdGFnX2RhdGFfc3RyOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgcGFja2VkIGRhdGEKICAgICAgICByZXR1cm4gJHBhY2tlZF9kYXRhOwoKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIEVuY29kZV9QSU0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBnZXRfUElNX1RleHRfVmFsdWUKKgoqIERlc2NyaXB0aW9uOiAgSW50ZXJwcmV0cyB0aGUgY29udGVudHMgb2YgYSBFWElGIHRhZyBjb250YWluaW5nIFByaW50IEltYWdlCiogICAgICAgICAgICAgICBNYXRjaGluZyBpbmZvcm1hdGlvbiwgYW5kIHJldHVybnMgY29udGVudCBhcyBhcyBhIHRleHQgc3RyaW5nCioKKiBQYXJhbWV0ZXJzOiAgIHRhZyAtIEFuIEVYSUYgdGFnIGNvbnRhaW5pbmcgUHJpbnQgSW1hZ2UgTWF0Y2hpbmcgaW5mb3JtYXRpb24KKiAgICAgICAgICAgICAgICAgICAgIGFzIGZyb20gZ2V0X0VYSUZfSlBFRwoqICAgICAgICAgICAgICAgVGFnX0RlZmluaXRpb25zX05hbWUgLSBUaGUgbmFtZSBvZiB0aGUgVGFnIERlZmluaXRpb25zIGdyb3VwCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgZ2xvYmFsIGFycmF5IElGRF9UYWdfRGVmaW5pdGlvbnMKKgoqIFJldHVybnM6ICAgICAgb3V0cHV0X3N0ciAtIFRoZSB0ZXh0IHN0cmluZyByZXByZXNlbnRpbmcgdGhlIFBJTSBpbmZvCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gZ2V0X1BJTV9UZXh0X1ZhbHVlKCAkVGFnLCAkVGFnX0RlZmluaXRpb25zX05hbWUgKQp7CgogICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyB0byByZWNlaXZlIHRoZSBvdXRwdXQKICAgICAgICAkb3V0cHV0X3N0ciA9ICIiOwogICAgICAgIAogICAgICAgIC8vIENoZWNrIGlmIHRoZSBQSU0gdGFnIGhhcyBiZWVuIGRlY29kZWQKICAgICAgICBpZiAoICggaXNfYXJyYXkoICRUYWdbJ0RhdGEnXSApICkgJiYKICAgICAgICAgICAgICggY291bnQgKCAkVGFnWydEYXRhJ10gKSA+IDAgKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gVGhlIHRhZyBoYXMgYmVlbiBkZWNvZGVkCgogICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBWZXJzaW9uIHRvIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyID0gIlZlcnNpb246ICIgLiAkVGFnWydEYXRhJ11bJ1ZlcnNpb24nXSAuICJcbiI7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGhpZGUgdW5rbm93biB0YWdzCiAgICAgICAgICAgICAgICBpZiAoICRHTE9CQUxTWydISURFX1VOS05PV05fVEFHUyddID09IEZBTFNFICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVzZXIgd2FudHMgdG8gc2VlIHVua25vd24gdGFncwogICAgICAgICAgICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggdGFnCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCAkVGFnWydEYXRhJ10gYXMgJFBJTV90YWdfS2V5ID0+ICRQSU1fdGFnICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHRhZyBpcyBub3QgdGhlIHZlcnNpb24gYXJyYXkgZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFBJTV90YWdfS2V5ICE9PSAnVmVyc2lvbicgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgdGFnIHRvIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJVbmtub3duIFRhZyAiIC4gJFBJTV90YWdbJ1RhZyBOdW1iZXInXSAuICI6ICgiIC4gc3RybGVuKCAkUElNX3RhZ1snRGF0YSddICkgLiAiIGJ5dGVzIG9mIGRhdGEpXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBSZXR1cm4gdGhlIG91dHB1dCB0ZXh0CiAgICAgICAgcmV0dXJuICRvdXRwdXRfc3RyOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgZ2V0X1BJTV9UZXh0X1ZhbHVlCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKPz4K');
expand_3537250845($outputDir, 'includes/toolkit/Photoshop_IRB.php', 'PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZpbGVuYW1lOiAgICAgUGhvdG9zaG9wX0lSQi5waHAKKgoqIERlc2NyaXB0aW9uOiAgUHJvdmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGluZm9ybWF0aW9uIHRvL2Zyb20KKiAgICAgICAgICAgICAgIHRoZSAnQXBwIDEzJyBQaG90b3Nob3AgSW5mb3JtYXRpb24gUmVzb3VyY2UgQmxvY2sgc2VnbWVudCBvZgoqICAgICAgICAgICAgICAgSlBFRyBmb3JtYXQgZmlsZXMKKgoqIEF1dGhvcjogICAgICAgRXZhbiBIdW50ZXIKKgoqIERhdGU6ICAgICAgICAgMjMvNy8yMDA0CioKKiBQcm9qZWN0OiAgICAgIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQKKgoqIFJldmlzaW9uOiAgICAgMS4xMQoqCiogQ2hhbmdlczogICAgICAxLjAwIC0+IDEuMDIgOiBjaGFuZ2VkIGdldF9QaG90b3Nob3BfSVJCIHRvIHdvcmsgd2l0aCBjb3JydXB0ZWQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlIG5hbWVzIHdoaWNoIFBob3Rvc2hvcCBjYW4gc3RpbGwgcmVhZAoqICAgICAgICAgICAgICAgMS4wMiAtPiAxLjAzIDogRml4ZWQgcHV0X1Bob3Rvc2hvcF9JUkIgdG8gb3V0cHV0ICJQaG90b3Nob3AgMy4wXHgwMCIKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyB3aXRoIGV2ZXJ5IEFQUDEzIHNlZ21lbnQsIG5vdCBqdXN0IHRoZSBmaXJzdCBvbmUKKiAgICAgICAgICAgICAgIDEuMDMgLT4gMS4xMCA6IGNoYW5nZWQgZ2V0X1Bob3Rvc2hvcF9JUkIgdG8gZml4IHByb2Nlc3Npbmcgb2YgZW1iZWRkZWQgcmVzb3VyY2UgbmFtZXMsCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBkaXNjb3ZlcmluZyB0aGF0IFBob3Rvc2hvcCBkb2VzIG5vdCBwcm9jZXNzCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZSBuYW1lcyBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkIDoKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZG9iZSBQaG90b3Nob3AgNi4wIEZpbGUgRm9ybWF0cyBTcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDYuMCwgUmVsZWFzZSAyLCBOb3ZlbWJlciAyMDAwIgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhbiB1cGRhdGUgdG8gdGhlIGNoYW5nZSAxLjAwIC0+IDEuMDIsIHdoaWNoIHdhcyBub3QgZnVsbHkgY29ycmVjdAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCBwdXRfUGhvdG9zaG9wX0lSQiB0byBmaXggdGhlIHdyaXRpbmcgb2YgZW1iZWRkZWQgcmVzb3VyY2UgbmFtZSwKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGF2b2lkIGNyZWF0aW5nIGJsYW5rIHJlc291cmNlcywgYW5kIHRvIGZpeCBhIHByb2JsZW0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNpbmcgdGhlIElSQiBibG9jayB0byBiZSBpbmNvcnJlY3RseSBwb3NpdGlvbmVkIGlmIG5vIEFQUCBzZWdtZW50cyBleGlzdGVkLgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCBnZXRfUGhvdG9zaG9wX0lQVEMgdG8gaW5pdGlhbGlzZSB0aGUgb3V0cHV0IGFycmF5IGNvcnJlY3RseS4KKiAgICAgICAgICAgICAgIDEuMTAgLT4gMS4xMSA6IE1vdmVkIGNvZGUgb3V0IG9mIGdldF9QaG90b3Nob3BfSVJCIGludG8gbmV3IGZ1bmN0aW9uIHVucGFja19QaG90b3Nob3BfSVJCX0RhdGEKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFsbG93IHJlYWRpbmcgb2YgSVJCIGJsb2NrcyBlbWJlZGRlZCB3aXRoaW4gRVhJRiAoZm9yIFRJRkYgRmlsZXMpCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBjb2RlIG91dCBvZiBwdXRfUGhvdG9zaG9wX0lSQiBpbnRvIG5ldyBmdW5jdGlvbiBwYWNrX1Bob3Rvc2hvcF9JUkJfRGF0YQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWxsb3cgd3JpdGluZyBvZiBJUkIgYmxvY2tzIGVtYmVkZGVkIHdpdGhpbiBFWElGIChmb3IgVElGRiBGaWxlcykKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZWQgdGhlIHVzYWdlIG9mICRHTE9CQUxTWydISURFX1VOS05PV05fVEFHUyddIHRvIGhpZGUgdW5rbm93biByZXNvdXJjZXMKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgSW50ZXJwcmV0X0lSQl90b19IVE1MIHRvIGFsbG93IHRodW1ibmFpbCBsaW5rcyB0byB3b3JrIHdoZW4KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xraXQgaXMgcG9ydGFibGUgYWNyb3NzIGRpcmVjdG9yaWVzCioKKgoqIFVSTDogICAgICAgICAgaHR0cDovL2VsZWN0cm9uaWNzLm96aGlrZXIuY29tCioKKiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCBFdmFuIEh1bnRlciAyMDA0CioKKiBMaWNlbnNlOiAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0LgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuCiogICAgICAgICAgICAgICByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiogICAgICAgICAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKiAgICAgICAgICAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCiogICAgICAgICAgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZQoqICAgICAgICAgICAgICAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0CiogICAgICAgICAgICAgICBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiogICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiogICAgICAgICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgoqCiogICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKiAgICAgICAgICAgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdDsgaWYgbm90LAoqICAgICAgICAgICAgICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCiogICAgICAgICAgICAgICBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKgoqICAgICAgICAgICAgICAgSWYgeW91IHJlcXVpcmUgYSBkaWZmZXJlbnQgbGljZW5zZSBmb3IgY29tbWVyY2lhbCBvciBvdGhlcgoqICAgICAgICAgICAgICAgcHVycG9zZXMsIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6IGV2YW5Ab3poaWtlci5jb20KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovLyBDaGFuZ2U6IGFzIG9mIHZlcnNpb24gMS4xMSAtIGFkZGVkIHRvIGVuc3VyZSB0aGUgSElERV9VTktOT1dOX1RBR1MgdmFyaWFibGUgaXMgc2V0IGV2ZW4gaWYgRVhJRi5waHAgaXMgbm90IGluY2x1ZGVkCmlmICggIWlzc2V0KCAkR0xPQkFMU1snSElERV9VTktOT1dOX1RBR1MnXSApICkgICAgICRHTE9CQUxTWydISURFX1VOS05PV05fVEFHUyddPSBGQUxTRTsKCmluY2x1ZGVfb25jZSAnSVBUQy5waHAnOwppbmNsdWRlX29uY2UgJ1VuaWNvZGUucGhwJzsKCgoKLy8gVE9ETzogTWFueSBQaG90b3Nob3AgSVJCIHJlc291cmNlcyBub3QgaW50ZXJwZXRlZAovLyBUT0RPOiBPYnRhaW4gYSBjb3B5IG9mIHRoZSBQaG90b3Nob3AgQ1MgRmlsZSBGb3JtYXQgU3BlY2lmaWNhdGlvbgovLyBUT0RPOiBGaW5kIG91dCB3aGF0IFBob3Rvc2hvcCBJUkIgcmVzb3VyY2VzIDEwNjEsIDEwNjIgJiAxMDY0IGFyZQovLyBUT0RPOiBUZXN0IGdldF9QaG90b3Nob3BfSVJCIGFuZCBwdXRfUGhvdG9zaG9wX0lSQiB3aXRoIG11bHRpcGxlIEFQUDEzIHNlZ21lbnRzCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIGdldF9QaG90b3Nob3BfSVJCCioKKiBEZXNjcmlwdGlvbjogIFJldHJpZXZlcyB0aGUgUGhvdG9zaG9wIEluZm9ybWF0aW9uIFJlc291cmNlIEJsb2NrIChJUkIpIGluZm9ybWF0aW9uCiogICAgICAgICAgICAgICBmcm9tIGFuIEFwcDEzIEpQRUcgc2VnbWVudCBhbmQgcmV0dXJucyBpdCBhcyBhbiBhcnJheS4gVGhpcyBtYXkKKiAgICAgICAgICAgICAgIGluY2x1ZGUgSVBUQy1OQUEgSUlNIEluZm9ybWF0aW9uLiBVc2VzIGluZm9ybWF0aW9uCiogICAgICAgICAgICAgICBzdXBwbGllZCBieSB0aGUgZ2V0X2pwZWdfaGVhZGVyX2RhdGEgZnVuY3Rpb24KKgoqIFBhcmFtZXRlcnM6ICAganBlZ19oZWFkZXJfZGF0YSAtIGEgSlBFRyBoZWFkZXIgZGF0YSBhcnJheSBpbiB0aGUgc2FtZSBmb3JtYXQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBmcm9tIGdldF9qcGVnX2hlYWRlcl9kYXRhCioKKiBSZXR1cm5zOiAgICAgIElSQmRhdGEgLSBUaGUgYXJyYXkgb2YgUGhvdG9zaG9wIElSQiByZWNvcmRzCiogICAgICAgICAgICAgICBGQUxTRSAtIGlmIGFuIEFQUCAxMyBQaG90b3Nob3AgSVJCIHNlZ21lbnQgY291bGQgbm90IGJlIGZvdW5kLAoqICAgICAgICAgICAgICAgICAgICAgICBvciBpZiBhbiBlcnJvciBvY2N1cmVkCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gZ2V0X1Bob3Rvc2hvcF9JUkIoICRqcGVnX2hlYWRlcl9kYXRhICkKewogICAgICAgIC8vIFBob3Rvc2hvcCBJbWFnZSBSZXNvdXJjZSBibG9ja3MgY2FuIHNwYW4gc2V2ZXJhbCBKUEVHIEFQUDEzIHNlZ21lbnRzLCBzbyB3ZSBuZWVkIHRvIGpvaW4gdGhlbSB1cCBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZQogICAgICAgICRqb2luZWRfSVJCID0gIiI7CgoKICAgICAgICAvL0N5Y2xlIHRocm91Z2ggdGhlIGhlYWRlciBzZWdtZW50cwogICAgICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCAkanBlZ19oZWFkZXJfZGF0YSApOyAkaSsrICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBmaW5kIGFuIEFQUDEzIGhlYWRlciwKICAgICAgICAgICAgICAgIGlmICggc3RyY21wICggJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdOYW1lJ10sICJBUFAxMyIgKSA9PSAwICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIGlmIGl0IGhhcyB0aGUgcGhvdG9zaG9wIGxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICBpZiggc3RybmNtcCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnRGF0YSddLCAiUGhvdG9zaG9wIDMuMFx4MDAiLCAxNCkgPT0gMCApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqb2luIGl0IHRvIHRoZSBvdGhlciBwcmV2aW91cyBJUkIgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqb2luZWRfSVJCIC49IHN1YnN0ciAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnRGF0YSddLCAxNCApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGVyZSB3YXMgc29tZSBQaG90b3Nob3AgSVJCIGluZm9ybWF0aW9uIGZvdW5kLAogICAgICAgIGlmICggJGpvaW5lZF9JUkIgIT0gIiIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgUGhvdG9zaG9wIEltYWdlIFJlc291cmNlIEJsb2NrIC0gZXh0cmFjdCBpdC4KICAgICAgICAgICAgICAgIC8vIENoYW5nZTogTW92ZWQgY29kZSBpbnRvIHVucGFja19QaG90b3Nob3BfSVJCX0RhdGEgdG8gYWxsb3cgVElGRiByZWFkaW5nIGFzIG9mIDEuMTEKICAgICAgICAgICAgICAgIHJldHVybiB1bnBhY2tfUGhvdG9zaG9wX0lSQl9EYXRhKCAkam9pbmVkX0lSQiApOwoKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIE5vIFBob3Rvc2hvcCBJUkIgZm91bmQKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9Cgp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgZ2V0X1Bob3Rvc2hvcF9JUkIKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBwdXRfUGhvdG9zaG9wX0lSQgoqCiogRGVzY3JpcHRpb246ICBBZGRzIG9yIG1vZGlmaWVzIHRoZSBQaG90b3Nob3AgSW5mb3JtYXRpb24gUmVzb3VyY2UgQmxvY2sgKElSQikKKiAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGZyb20gYW4gQXBwMTMgSlBFRyBzZWdtZW50LiBJZiBhIFBob3Rvc2hvcCBJUkIgYWxyZWFkeQoqICAgICAgICAgICAgICAgZXhpc3RzLCBpdCBpcyByZXBsYWNlZCwgb3RoZXJ3aXNlIGEgbmV3IG9uZSBpcyBpbnNlcnRlZCwgdXNpbmcgdGhlCiogICAgICAgICAgICAgICBzdXBwbGllZCBkYXRhLiBVc2VzIGluZm9ybWF0aW9uIHN1cHBsaWVkIGJ5IHRoZSBnZXRfanBlZ19oZWFkZXJfZGF0YQoqICAgICAgICAgICAgICAgZnVuY3Rpb24KKgoqIFBhcmFtZXRlcnM6ICAganBlZ19oZWFkZXJfZGF0YSAtIGEgSlBFRyBoZWFkZXIgZGF0YSBhcnJheSBpbiB0aGUgc2FtZSBmb3JtYXQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBmcm9tIGdldF9qcGVnX2hlYWRlcl9kYXRhCiogICAgICAgICAgICAgICBuZXdfSVJCX2RhdGEgLSBhbiBhcnJheSBvZiB0aGUgZGF0YSB0byBiZSBzdG9yZWQgaW4gdGhlIFBob3Rvc2hvcAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJCIHNlZ21lbnQuIFNob3VsZCBiZSBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgcmVjZWl2ZWQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gZ2V0X1Bob3Rvc2hvcF9JUkIKKgoqIFJldHVybnM6ICAgICAganBlZ19oZWFkZXJfZGF0YSAtIHRoZSBKUEVHIGhlYWRlciBkYXRhIGFycmF5IHdpdGggdGhlCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhvdG9zaG9wIElSQiBhZGRlZC4KKiAgICAgICAgICAgICAgIEZBTFNFIC0gaWYgYW4gZXJyb3Igb2NjdXJlZAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHB1dF9QaG90b3Nob3BfSVJCKCAkanBlZ19oZWFkZXJfZGF0YSwgJG5ld19JUkJfZGF0YSApCnsKICAgICAgICAvLyBEZWxldGUgYWxsIGV4aXN0aW5nIFBob3Rvc2hvcCBJUkIgYmxvY2tzIC0gdGhlIG5ldyBvbmUgd2lsbCByZXBsYWNlIHRoZW0KCiAgICAgICAgLy9DeWNsZSB0aHJvdWdoIHRoZSBoZWFkZXIgc2VnbWVudHMKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCggJGpwZWdfaGVhZGVyX2RhdGEgKSA7ICRpKysgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIElmIHdlIGZpbmQgYW4gQVBQMTMgaGVhZGVyLAogICAgICAgICAgICAgICAgaWYgKCBzdHJjbXAgKCAkanBlZ19oZWFkZXJfZGF0YVskaV1bJ1NlZ05hbWUnXSwgIkFQUDEzIiApID09IDAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmQgaWYgaXQgaGFzIHRoZSBwaG90b3Nob3AgbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzdHJuY21wICggJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdEYXRhJ10sICJQaG90b3Nob3AgMy4wXHgwMCIsIDE0KSA9PSAwICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgYmxvY2sgaW5mb3JtYXRpb24gLSBpdCBuZWVkcyB0byBiZSByZWJ1aWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfc3BsaWNlKCAkanBlZ19oZWFkZXJfZGF0YSwgJGksIDEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICAgIC8vIE5vdyB3ZSBoYXZlIGRlbGV0ZWQgdGhlIHByZS1leGlzdGluZyBibG9ja3MKCgogICAgICAgIC8vIFJldHJpZXZlIHRoZSBQYWNrZWQgUGhvdG9zaG9wIElSQiBEYXRhCiAgICAgICAgLy8gQ2hhbmdlOiBNb3ZlZCBjb2RlIGludG8gcGFja19QaG90b3Nob3BfSVJCX0RhdGEgdG8gYWxsb3cgVElGRiB3cml0aW5nIGFzIG9mIDEuMTEKICAgICAgICAkcGFja2VkX0lSQl9kYXRhID0gcGFja19QaG90b3Nob3BfSVJCX0RhdGEoICRuZXdfSVJCX2RhdGEgKTsKCiAgICAgICAgLy8gQ2hhbmdlIDogVGhpcyBzZWN0aW9uIGNoYW5nZWQgdG8gZml4IGluY29ycmVjdCBwb3NpdGlvbmluZyBvZiBJUkIgc2VnbWVudCwgYXMgb2YgcmV2aXNpb24gMS4xMAogICAgICAgIC8vICAgICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIEFQUCBzZWdtZW50cyBwcmVzZW50CgogICAgICAgIC8vQ3ljbGUgdGhyb3VnaCB0aGUgaGVhZGVyIHNlZ21lbnRzIGluIHJldmVyc2Ugb3JkZXIgKHRvIGZpbmQgd2hlcmUgdG8gcHV0IHRoZSBBUFAxMyBibG9jayAtIGFmdGVyIGFueSBBUFAwIHRvIEFQUDEyIGJsb2NrcykKICAgICAgICAkaSA9IGNvdW50KCAkanBlZ19oZWFkZXJfZGF0YSApIC0gMTsKICAgICAgICB3aGlsZSAoKCAkaSA+PSAwICkgJiYgKCAoICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnVHlwZSddID4gMHhFRCApIHx8ICggJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdUeXBlJ10gPCAweEUwICkgKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJGktLTsKICAgICAgICB9CgoKCiAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCB0aGUgcGFja2VkIG91dHB1dCBkYXRhIHVudGlsIGl0J3Mgc2l6ZSBpcyBsZXNzIHRoYW4gMzIwMDAgYnl0ZXMsIG91dHB1dHRpbmcgZWFjaCAzMjAwMCBieXRlIGJsb2NrIHRvIGFuIEFQUDEzIHNlZ21lbnQKICAgICAgICB3aGlsZSAoIHN0cmxlbiggJHBhY2tlZF9JUkJfZGF0YSApID4gMzIwMDAgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENoYW5nZTogRml4ZWQgcHV0X1Bob3Rvc2hvcF9JUkIgdG8gb3V0cHV0ICJQaG90b3Nob3AgMy4wXHgwMCIgc3RyaW5nIHdpdGggZXZlcnkgQVBQMTMgc2VnbWVudCwgbm90IGp1c3QgdGhlIGZpcnN0IG9uZSwgYXMgb2YgMS4wMwoKICAgICAgICAgICAgICAgIC8vIFdyaXRlIGEgMzIwMDAgYnl0ZSBBUFAxMyBzZWdtZW50CiAgICAgICAgICAgICAgICBhcnJheV9zcGxpY2UoJGpwZWdfaGVhZGVyX2RhdGEsICRpICsxICAsIDAsIGFycmF5KCAgIlNlZ1R5cGUiID0+IDB4RUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VnTmFtZSIgPT4gIkFQUDEzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdEZXNjIiA9PiAkR0xPQkFMU1sgIkpQRUdfU2VnbWVudF9EZXNjcmlwdGlvbnMiIF1bIDB4RUQgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdEYXRhIiA9PiAiUGhvdG9zaG9wIDMuMFx4MDAiIC4gc3Vic3RyKCAkcGFja2VkX0lSQl9kYXRhLDAsMzIwMDApICkgKTsKCiAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIDMyMDAwIGJ5dGVzIGZyb20gdGhlIHBhY2tlZCBvdXRwdXQgZGF0YSwgdGhhdCB3ZXJlIGp1c3Qgb3V0cHV0CiAgICAgICAgICAgICAgICAkcGFja2VkX0lSQl9kYXRhID0gc3Vic3RyX3JlcGxhY2UoJHBhY2tlZF9JUkJfZGF0YSwgJycsIDAsIDMyMDAwKTsKICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgfQoKICAgICAgICAvLyBXcml0ZSB0aGUgbGFzdCBibG9jayBvZiBwYWNrZWQgb3V0cHV0IGRhdGEgdG8gYW4gQVBQMTMgc2VnbWVudCAtIE5vdGUgYXJyYXlfc3BsaWNlIGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpZGltZW5zaW9uYWwgYXJyYXlzLCBoZW5jZSBpbnNlcnRpbmcgYSBibGFuayBzdHJpbmcKICAgICAgICBhcnJheV9zcGxpY2UoJGpwZWdfaGVhZGVyX2RhdGEsICRpICsgMSAsIDAsICIiICk7CiAgICAgICAgJGpwZWdfaGVhZGVyX2RhdGFbJGkgKyAxXSA9ICBhcnJheSggIlNlZ1R5cGUiID0+IDB4RUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VnTmFtZSIgPT4gIkFQUDEzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdEZXNjIiA9PiAkR0xPQkFMU1sgIkpQRUdfU2VnbWVudF9EZXNjcmlwdGlvbnMiIF1bIDB4RUQgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdEYXRhIiA9PiAiUGhvdG9zaG9wIDMuMFx4MDAiIC4gJHBhY2tlZF9JUkJfZGF0YSApOwoKICAgICAgICByZXR1cm4gJGpwZWdfaGVhZGVyX2RhdGE7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBwdXRfUGhvdG9zaG9wX0lSQgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBnZXRfUGhvdG9zaG9wX0lQVEMKKgoqIERlc2NyaXB0aW9uOiAgUmV0cmlldmVzIElQVEMtTkFBIElJTSBpbmZvcm1hdGlvbiBmcm9tIHdpdGhpbiBhIFBob3Rvc2hvcAoqICAgICAgICAgICAgICAgSVJCIChpZiBpdCBpcyBwcmVzZW50KSBhbmQgcmV0dXJucyBpdCBpbiBhbiBhcnJheS4gVXNlcwoqICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gc3VwcGxpZWQgYnkgdGhlIGdldF9qcGVnX2hlYWRlcl9kYXRhIGZ1bmN0aW9uCioKKiBQYXJhbWV0ZXJzOiAgIFBob3Rvc2hvcF9JUkJfZGF0YSAtIGFuIGFycmF5IG9mIFBob3Rvc2hvcCBJUkIgcmVjb3JkcywgYXMKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGZyb20gZ2V0X1Bob3Rvc2hvcF9JUkIKKgoqIFJldHVybnM6ICAgICAgSVBUQ19EYXRhX091dCAtIFRoZSBhcnJheSBvZiBJUFRDLU5BQSBJSU0gcmVjb3JkcwoqICAgICAgICAgICAgICAgRkFMU0UgLSBpZiBhbiBJUFRDLU5BQSBJSU0gcmVjb3JkIGNvdWxkIG5vdCBiZSBmb3VuZCwgb3IgaWYKKiAgICAgICAgICAgICAgICAgICAgICAgYW4gZXJyb3Igb2NjdXJlZAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIGdldF9QaG90b3Nob3BfSVBUQyggJFBob3Rvc2hvcF9JUkJfZGF0YSApCnsKCiAgICAgICAgLy8gQ2hhbmdlOiBJbml0aWFsaXNlIGFycmF5IGNvcnJlY3RseSwgYXMgb2YgcmV2aXNpb24gMS4xMAogICAgICAgICRJUFRDX0RhdGFfT3V0ID0gYXJyYXkoKTsKCiAgICAgICAgLy9DeWNsZSB0aHJvdWdoIHRoZSBQaG90b3Nob3AgOEJJTSByZWNvcmRzIGxvb2tpbmcgZm9yIHRoZSBJUFRDLU5BQSByZWNvcmQKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCggJFBob3Rvc2hvcF9JUkJfZGF0YSApOyAkaSsrICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBlYWNoIHJlY29yZCBpcyBhIElQVEMgcmVjb3JkICh3aGljaCBoYXMgaWQgMHgwNDA0KQogICAgICAgICAgICAgICAgaWYgKCAkUGhvdG9zaG9wX0lSQl9kYXRhWyRpXVsnUmVzSUQnXSAgPT0gMHgwNDA0ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgYW4gSVBUQyBibG9jayAtIERlY29kZSBpdAogICAgICAgICAgICAgICAgICAgICAgICAkSVBUQ19EYXRhX091dCA9IGdldF9JUFRDKCAkUGhvdG9zaG9wX0lSQl9kYXRhWyRpXVsnUmVzRGF0YSddICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGVyZSB3YXMgbm8gcmVjb3JkcyBwdXQgaW50byB0aGUgb3V0cHV0IGFycmF5LAogICAgICAgIGlmICggY291bnQoICRJUFRDX0RhdGFfT3V0ICkgPT0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gVGhlbiByZXR1cm4gZmFsc2UKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gdGhlIGFycmF5CiAgICAgICAgICAgICAgICByZXR1cm4gJElQVENfRGF0YV9PdXQ7CiAgICAgICAgfQoKfQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgZ2V0X1Bob3Rvc2hvcF9JUFRDCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBwdXRfUGhvdG9zaG9wX0lQVEMKKgoqIERlc2NyaXB0aW9uOiAgSW5zZXJ0cyBhIG5ldyBJUFRDLU5BQSBJSU0gcmVzb3VyY2UgaW50byBhIFBob3Rvc2hvcAoqICAgICAgICAgICAgICAgSVJCLCBvciByZXBsYWNlcyBhbiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgaWYgb25lIGlzIHByZXNlbnQuCiogICAgICAgICAgICAgICBVc2VzIGluZm9ybWF0aW9uIHN1cHBsaWVkIGJ5IHRoZSBnZXRfUGhvdG9zaG9wX0lSQiBmdW5jdGlvbgoqCiogUGFyYW1ldGVyczogICBQaG90b3Nob3BfSVJCX2RhdGEgLSBhbiBhcnJheSBvZiBQaG90b3Nob3AgSVJCIHJlY29yZHMsIGFzCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCBmcm9tIGdldF9QaG90b3Nob3BfSVJCLCBpbnRvCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgSVBUQy1OQUEgSUlNIHJlY29yZCB3aWxsIGJlIGluc2VydGVkCiogICAgICAgICAgICAgICBuZXdfSVBUQ19ibG9jayAtIGFuIGFycmF5IG9mIElQVEMtTkFBIHJlY29yZHMgaW4gdGhlIHNhbWUgZm9ybWF0CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRob3NlIHJldHVybmVkIGJ5IGdldF9QaG90b3Nob3BfSVBUQwoqCiogUmV0dXJuczogICAgICBQaG90b3Nob3BfSVJCX2RhdGEgLSBUaGUgUGhvdG9zaG9wIElSQiBhcnJheSB3aXRoIHRoZQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVEMtTkFBIElJTSByZXNvdXJjZSBpbnNlcnRlZAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHB1dF9QaG90b3Nob3BfSVBUQyggJFBob3Rvc2hvcF9JUkJfZGF0YSwgJG5ld19JUFRDX2Jsb2NrICkKewogICAgICAgICRpcHRjX2Jsb2NrX3BvcyA9IC0xOwoKICAgICAgICAvL0N5Y2xlIHRocm91Z2ggdGhlIDhCSU0gcmVjb3JkcyBsb29raW5nIGZvciB0aGUgSVBUQy1OQUEgcmVjb3JkCiAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoICRQaG90b3Nob3BfSVJCX2RhdGEgKTsgJGkrKyApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZWFjaCByZWNvcmQgaXMgYSBJUFRDIHJlY29yZCAod2hpY2ggaGFzIGlkIDB4MDQwNCkKICAgICAgICAgICAgICAgIGlmICggJFBob3Rvc2hvcF9JUkJfZGF0YVskaV1bJ1Jlc0lEJ10gID09IDB4MDQwNCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGZvdW5kIGFuIElQVEMgYmxvY2sgLSBzYXZlIHRoZSBwb3NpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAkaXB0Y19ibG9ja19wb3MgPSAkaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIElmIG5vIElQVEMgYmxvY2sgd2FzIGZvdW5kLCBjcmVhdGUgYSBuZXcgb25lCiAgICAgICAgaWYgKCAkaXB0Y19ibG9ja19wb3MgPT0gLTEgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIE5ldyBibG9jayBwb3NpdGlvbiB3aWxsIGJlIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5CiAgICAgICAgICAgICAgICAkaXB0Y19ibG9ja19wb3MgPSBjb3VudCggJFBob3Rvc2hvcF9JUkJfZGF0YSApOwogICAgICAgIH0KCgogICAgICAgIC8vIFdyaXRlIHRoZSBuZXcgSVJCIHJlc291cmNlIHRvIHRoZSBQaG90b3Nob3AgSVJCIGFycmF5IHdpdGggbm8gZGF0YQogICAgICAgICRQaG90b3Nob3BfSVJCX2RhdGFbJGlwdGNfYmxvY2tfcG9zXSA9IGFycmF5KCAgICJSZXNJRCIgPT4gICAweDA0MDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc05hbWUiID0+ICRHTE9CQUxTWydQaG90b3Nob3BfSURfTmFtZXMnXVsgMHgwNDA0IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc0Rlc2MiID0+ICRHTE9CQUxTWyAiUGhvdG9zaG9wX0lEX0Rlc2NyaXB0aW9ucyIgXVsgMHgwNDA0IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc0VtYmVkZGVkTmFtZSIgPT4gIlx4MDBceDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVzRGF0YSIgPT4gcHV0X0lQVEMoICRuZXdfSVBUQ19ibG9jayApICk7CgoKICAgICAgICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIElSQgogICAgICAgIHJldHVybiAkUGhvdG9zaG9wX0lSQl9kYXRhOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgcHV0X1Bob3Rvc2hvcF9JUFRDCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIEludGVycHJldF9JUkJfdG9fSFRNTAoqCiogRGVzY3JpcHRpb246ICBHZW5lcmF0ZXMgaHRtbCBzaG93aW5nIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gYSBQaG90b3Nob3AKKiAgICAgICAgICAgICAgIElSQiBkYXRhIGFycmF5LCBhcyByZXRyaWV2ZWQgd2l0aCBnZXRfUGhvdG9zaG9wX0lSQiwgaW5jbHVkaW5nCiogICAgICAgICAgICAgICBhbnkgSVBUQy1OQUEgSUlNIHJlY29yZHMgZm91bmQuCioKKiAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlIGZvbGxvd2luZyByZXNvdXJjZSBudW1iZXJzIGFyZSBub3QgY3VycmVudGx5CiogICAgICAgICAgICAgICBkZWNvZGVkOiAoIE1hbnkgb2YgdGhlc2UgZG8gbm90IGFwcGx5IHRvIEpQRUcgaW1hZ2VzKQoqICAgICAgICAgICAgICAgMHgwM0U5LCAweDAzRUUsIDB4MDNFRiwgMHgwM0YwLCAweDAzRjEsIDB4MDNGMiwgMHgwM0Y2LCAweDAzRjksCiogICAgICAgICAgICAgICAweDAzRkEsIDB4MDNGQiwgMHgwM0ZELCAweDAzRkUsIDB4MDQwMCwgMHgwNDAxLCAweDA0MDIsIDB4MDQwNSwKKiAgICAgICAgICAgICAgIDB4MDQwRSwgMHgwNDBGLCAweDA0MTAsIDB4MDQxMiwgMHgwNDEzLCAweDA0MTUsIDB4MDQxNiwgMHgwNDE3LAoqICAgICAgICAgICAgICAgMHgwNDFCLCAweDA0MUMsIDB4MDQxRCwgMHgwQkI3CioKKiAgICAgICAgICAgICAgICggQWxzbyB0aGVzZSBPYnNvbGV0ZSByZXNvdXJjZSBudW1iZXJzKQoqICAgICAgICAgICAgICAgMHgwM0U4LCAweDAzRUIsIDB4MDNGQywgMHgwM0ZGLCAweDA0MDMKKgoqCiogUGFyYW1ldGVyczogICBJUkJfYXJyYXkgLSBhIFBob3Rvc2hvcCBJUkIgZGF0YSBhcnJheSBhcyBmcm9tIGdldF9QaG90b3Nob3BfSVJCCiogICAgICAgICAgICAgICBmaWxlbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBKUEVHIGZpbGUgYmVpbmcgcHJvY2Vzc2VkICggdXNlZAoqICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgc2NyaXB0IHdoaWNoIGRpc3BsYXlzIHRoZSBQaG90b3Nob3AgdGh1bWJuYWlsKQoqCioKKiBSZXR1cm5zOiAgICAgIG91dHB1dF9zdHIgLSB0aGUgSFRNTCBzdHJpbmcKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBJbnRlcnByZXRfSVJCX3RvX0hUTUwoICRJUkJfYXJyYXksICRmaWxlbmFtZSApCnsKICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgdG8gcmVjZWl2ZSB0aGUgSFRNTAogICAgICAgICRvdXRwdXRfc3RyID0gIiI7CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBQaG90b3Nob3AgSVJCIGFycmF5IGlzIHZhbGlkCiAgICAgICAgaWYgKCAkSVJCX2FycmF5ICE9PSBGQUxTRSApCiAgICAgICAgewoKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhbm90aGVyIHN0cmluZyB0byByZWNlaXZlIHNlY29uZGFyeSBIVE1MIHRvIGJlIGFwcGVuZGVkIGF0IHRoZSBlbmQKICAgICAgICAgICAgICAgICRzZWNvbmRhcnlfb3V0cHV0X3N0ciA9ICIiOwoKICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgSGVhZGluZyB0byB0aGUgSFRNTAogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjxoMiBjbGFzcz1cIlBob3Rvc2hvcF9NYWluX0hlYWRpbmdcIj5Db250YWlucyBQaG90b3Nob3AgSW5mb3JtYXRpb24gUmVzb3VyY2UgQmxvY2sgKElSQik8L2gyPiI7CgogICAgICAgICAgICAgICAgLy8gQWRkIFRhYmxlIHRvIHRoZSBIVE1MCiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRhYmxlIGNsYXNzPVwiUGhvdG9zaG9wX1RhYmxlXCIgYm9yZGVyPTE+XG4iOwoKICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBvZiB0aGUgUGhvdG9zaG9wIElSQiByZWNvcmRzLCBjcmVhdGluZyBIVE1MIGZvciBlYWNoCiAgICAgICAgICAgICAgICBmb3JlYWNoKCAkSVJCX2FycmF5IGFzICRJUkJfUmVzb3VyY2UgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZW50cnkgaXMgYSBrbm93biBQaG90b3Nob3AgSVJCIHJlc291cmNlCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIE5hbWUgb2YgdGhlIFJlc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJyYXlfa2V5X2V4aXN0cyggJElSQl9SZXNvdXJjZVsnUmVzSUQnXSwgJEdMT0JBTFNbICJQaG90b3Nob3BfSURfTmFtZXMiIF0gKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUmVzb3VyY2VfTmFtZSA9ICRHTE9CQUxTWydQaG90b3Nob3BfSURfTmFtZXMnXVsgJElSQl9SZXNvdXJjZVsnUmVzSUQnXSBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZTogQWRkZWQgY2hlY2sgZm9yICRHTE9CQUxTWydISURFX1VOS05PV05fVEFHUyddIHRvIGFsbG93IGhpZGluZyBvZiB1bmtub3duIHJlc291cmNlcyBhcyBvZiAxLjExCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkR0xPQkFMU1snSElERV9VTktOT1dOX1RBR1MnXSA9PSBUUlVFICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVua25vd24gUmVzb3VyY2UgLSBNYWtlIGFwcHJvcHJpYXRlIG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRSZXNvdXJjZV9OYW1lID0gIlVua25vd24gUmVzb3VyY2UgKCIuICRJUkJfUmVzb3VyY2VbJ1Jlc0lEJ10gLiIpIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBIVE1MIGZvciB0aGUgcmVzb3VyY2UgYXMgYXBwcm9wcmlhdGUKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggJElSQl9SZXNvdXJjZVsnUmVzSUQnXSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDA0MDQgOiAvLyBJUFRDLU5BQSBJSU0gUmVjb3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2Vjb25kYXJ5X291dHB1dF9zdHIgLj0gSW50ZXJwcmV0X0lQVENfdG9fSFRNTCggZ2V0X0lQVEMoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDA0MEIgOiAvLyBVUkwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJQaG90b3Nob3BfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX0NhcHRpb25fQ2VsbFwiPiRSZXNvdXJjZV9OYW1lPC90ZD48dGQgY2xhc3M9XCJQaG90b3Nob3BfVmFsdWVfQ2VsbFwiPjxhIGhyZWY9XCIiIC4gJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddIC4gIlwiPiIgLiBodG1sZW50aXRpZXMoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSApIC4iPC9hPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDA0MEEgOiAvLyBDb3B5cmlnaHQgTWFya2VkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhleGRlYyggYmluMmhleCggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddICkgKSA9PSAxICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIlBob3Rvc2hvcF9UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJQaG90b3Nob3BfQ2FwdGlvbl9DZWxsXCI+JFJlc291cmNlX05hbWU8L3RkPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9WYWx1ZV9DZWxsXCI+PHByZT5JbWFnZSBpcyBDb3B5cmlnaHRlZCBNYXRlcmlhbDwvcHJlPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJQaG90b3Nob3BfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX0NhcHRpb25fQ2VsbFwiPiRSZXNvdXJjZV9OYW1lPC90ZD48dGQgY2xhc3M9XCJQaG90b3Nob3BfVmFsdWVfQ2VsbFwiPjxwcmU+SW1hZ2UgaXMgTm90IENvcHlyaWdodGVkIE1hdGVyaWFsPC9wcmU+PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDQwRCA6IC8vIEdsb2JhbCBMaWdodGluZyBBbmdsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIlBob3Rvc2hvcF9UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJQaG90b3Nob3BfQ2FwdGlvbl9DZWxsXCI+JFJlc291cmNlX05hbWU8L3RkPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9WYWx1ZV9DZWxsXCI+PHByZT5HbG9iYWwgbGlnaHRpbmcgYW5nbGUgZm9yIGVmZmVjdHMgbGF5ZXIgPSAiIC4gaGV4ZGVjKCBiaW4yaGV4KCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10gKSApIC4gIiBkZWdyZWVzPC9wcmU+PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDQxOSA6IC8vIEdsb2JhbCBBbHRpdHVkZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIlBob3Rvc2hvcF9UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJQaG90b3Nob3BfQ2FwdGlvbl9DZWxsXCI+JFJlc291cmNlX05hbWU8L3RkPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9WYWx1ZV9DZWxsXCI+PHByZT5HbG9iYWwgQWx0aXR1ZGUgPSAiIC4gaGV4ZGVjKCBiaW4yaGV4KCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10gKSApIC4gIjwvcHJlPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDA0MjEgOiAvLyBWZXJzaW9uIEluZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJQaG90b3Nob3BfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX0NhcHRpb25fQ2VsbFwiPiRSZXNvdXJjZV9OYW1lPC90ZD48dGQgY2xhc3M9XCJQaG90b3Nob3BfVmFsdWVfQ2VsbFwiPjxwcmU+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlZlcnNpb24gPSAiIC4gaGV4ZGVjKCBiaW4yaGV4KCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgMCwgNCApICkgKSAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiSGFzIFJlYWwgTWVyZ2VkIERhdGEgPSAiIC4gb3JkKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ117NH0gKSAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd3JpdGVyX3NpemUgPSBoZXhkZWMoIGJpbjJoZXgoIHN1YnN0ciggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddLCA1LCA0ICkgKSApICogMjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiV3JpdGVyIE5hbWUgPSAiIC4gSFRNTF9VVEYxNl9Fc2NhcGUoIHN1YnN0ciggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddLCA5LCAkd3JpdGVyX3NpemUgKSwgVFJVRSApIC4gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWFkZXJfc2l6ZSA9IGhleGRlYyggYmluMmhleCggc3Vic3RyKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10sIDkgKyAkd3JpdGVyX3NpemUgLCA0ICkgKSApICogMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJSZWFkZXIgTmFtZSA9ICIgLiBIVE1MX1VURjE2X0VzY2FwZSggc3Vic3RyKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10sIDEzICsgJHdyaXRlcl9zaXplLCAkcmVhZGVyX3NpemUgKSwgVFJVRSApIC4gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJGaWxlIFZlcnNpb24gPSAiIC4gaGV4ZGVjKCBiaW4yaGV4KCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgMTMgKyAkd3JpdGVyX3NpemUgKyAkcmVhZGVyX3NpemUsIDQgKSApICkgLiAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gICI8L3ByZT48L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwNDExIDogLy8gSUNDIFVudGFnZ2VkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSA9PSAiXHgwMSIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiUGhvdG9zaG9wX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9DYXB0aW9uX0NlbGxcIj4kUmVzb3VyY2VfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX1ZhbHVlX0NlbGxcIj48cHJlPkludGVudGlvbmFsbHkgdW50YWdnZWQgLSBhbnkgYXNzdW1lZCBJQ0MgcHJvZmlsZSBoYW5kbGluZyBkaXNhYmxlZDwvcHJlPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJQaG90b3Nob3BfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX0NhcHRpb25fQ2VsbFwiPiRSZXNvdXJjZV9OYW1lPC90ZD48dGQgY2xhc3M9XCJQaG90b3Nob3BfVmFsdWVfQ2VsbFwiPjxwcmU+VW5rbm93biB2YWx1ZSAoMHgiIC5iaW4yaGV4KCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10gKS4gIik8L3ByZT48L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwNDFBIDogLy8gU2xpY2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiUGhvdG9zaG9wX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9DYXB0aW9uX0NlbGxcIj4kUmVzb3VyY2VfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX1ZhbHVlX0NlbGxcIj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucGFjayB0aGUgZmlyc3QgMjQgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTbGljZXNfSW5mbyA9IHVucGFjaygiTlZlcnNpb24vTkJvdW5kX3RvcC9OQm91bmRfbGVmdC9OQm91bmRfYm90dG9tL05Cb3VuZF9yaWdodC9OU3RyaW5nbGVuIiwgJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiVmVyc2lvbiA9ICIgLiAkU2xpY2VzX0luZm9bJ1ZlcnNpb24nXSAuICI8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkJvdW5kaW5nIFJlY3RhbmdsZSA9ICBUb3A6IiAuICRTbGljZXNfSW5mb1snQm91bmRfdG9wJ10gLiAiLCBMZWZ0OiIgLiAkU2xpY2VzX0luZm9bJ0JvdW5kX2xlZnQnXSAuICIsIEJvdHRvbToiIC4gJFNsaWNlc19JbmZvWydCb3VuZF9ib3R0b20nXSAuICIsIFJpZ2h0OiIgLiAkU2xpY2VzX0luZm9bJ0JvdW5kX3JpZ2h0J10gLiAiIChQaXhlbHMpPGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTbGljZXBvcyA9IDI0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgYSBVbmljb2RlIFN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlRleHQgPSAnIiAuIEhUTUxfVVRGMTZfRXNjYXBlKCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgMjQsICRTbGljZXNfSW5mb1snU3RyaW5nbGVuJ10qMiksIFRSVUUgKSAuICInPGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTbGljZXBvcyArPSAkU2xpY2VzX0luZm9bJ1N0cmluZ2xlbiddICogMjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnBhY2sgdGhlIG51bWJlciBvZiBTbGljZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROdW1fU2xpY2VzID0gaGV4ZGVjKCBiaW4yaGV4KCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgJFNsaWNlcG9zLCA0ICkgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIk51bWJlciBvZiBTbGljZXMgPSAiIC4gJE51bV9TbGljZXMgLiAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNsaWNlcG9zICs9IDQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCB0aGUgc2xpY2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoICRpID0gMTsgJGkgPD0gJE51bV9TbGljZXM7ICRpKysgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPGJyPjxicj5TbGljZSAkaTo8YnI+XG4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5wYWNrIHRoZSBmaXJzdCAxNiBieXRlcyBvZiB0aGUgc2xpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNsaWNlQSA9IHVucGFjaygiTklEL05Hcm91cElEL05PcmlnaW4vTlN0cmluZ2xlbiIsIHN1YnN0cigkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10sICRTbGljZXBvcyApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTbGljZXBvcyArPSAxNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIklEID0gIiAuICRTbGljZUFbJ0lEJ10gLiAiPGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkdyb3VwIElEID0gIiAuICRTbGljZUFbJ0dyb3VwSUQnXSAuICI8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiT3JpZ2luID0gIiAuICRTbGljZUFbJ09yaWdpbiddIC4gIjxicj5cbiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGEgVW5pY29kZSBTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlRleHQgPSAnIiAuIEhUTUxfVVRGMTZfRXNjYXBlKCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgJFNsaWNlcG9zLCAkU2xpY2VBWydTdHJpbmdsZW4nXSoyKSwgVFJVRSApIC4gIic8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2xpY2Vwb3MgKz0gJFNsaWNlQVsnU3RyaW5nbGVuJ10gKiAyOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5wYWNrIHRoZSBuZXh0IDI0IGJ5dGVzIG9mIHRoZSBzbGljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2xpY2VCID0gdW5wYWNrKCJOVHlwZS9OTGVmdFBvcy9OVG9wUG9zL05SaWdodFBvcy9OQm90dG9tUG9zL05VUkxsZW4iLCBzdWJzdHIoJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddLCAkU2xpY2Vwb3MgKSAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNsaWNlcG9zICs9IDI0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiVHlwZSA9ICIgLiAkU2xpY2VCWydUeXBlJ10gLiAiPGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlBvc2l0aW9uID0gIFRvcDoiIC4gJFNsaWNlQlsnVG9wUG9zJ10gLiAiLCBMZWZ0OiIgLiAkU2xpY2VCWydMZWZ0UG9zJ10gLiAiLCBCb3R0b206IiAuICRTbGljZUJbJ0JvdHRvbVBvcyddIC4gIiwgUmlnaHQ6IiAuICRTbGljZUJbJ1JpZ2h0UG9zJ10gLiAiIChQaXhlbHMpPGJyPlxuIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgYSBVbmljb2RlIFN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiVVJMID0gPGEgaHJlZj0nIiAuIHN1YnN0ciggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddLCAkU2xpY2Vwb3MsICRTbGljZUJbJ1VSTGxlbiddKjIpIC4gIic+IiAuIEhUTUxfVVRGMTZfRXNjYXBlKCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgJFNsaWNlcG9zLCAkU2xpY2VCWydVUkxsZW4nXSoyKSwgVFJVRSApIC4gIjwvYT48YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2xpY2Vwb3MgKz0gJFNsaWNlQlsnVVJMbGVuJ10gKiAyOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5wYWNrIHRoZSBsZW5ndGggb2YgYSBVbmljb2RlIFN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGFyZ2V0bGVuID0gaGV4ZGVjKCBiaW4yaGV4KCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgJFNsaWNlcG9zLCA0ICkgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2xpY2Vwb3MgKz0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBhIFVuaWNvZGUgU3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJUYXJnZXQgPSAnIiAuIEhUTUxfVVRGMTZfRXNjYXBlKCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgJFNsaWNlcG9zLCAkVGFyZ2V0bGVuKjIpLCBUUlVFICkgLiAiJzxicj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTbGljZXBvcyArPSAkVGFyZ2V0bGVuICogMjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucGFjayB0aGUgbGVuZ3RoIG9mIGEgVW5pY29kZSBTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE1lc3NhZ2VsZW4gPSBoZXhkZWMoIGJpbjJoZXgoIHN1YnN0ciggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddLCAkU2xpY2Vwb3MsIDQgKSApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTbGljZXBvcyArPSA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGEgVW5pY29kZSBTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIk1lc3NhZ2UgPSAnIiAuIEhUTUxfVVRGMTZfRXNjYXBlKCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgJFNsaWNlcG9zLCAkTWVzc2FnZWxlbioyKSwgVFJVRSApIC4gIic8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2xpY2Vwb3MgKz0gJE1lc3NhZ2VsZW4gKiAyOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5wYWNrIHRoZSBsZW5ndGggb2YgYSBVbmljb2RlIFN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0VGFnbGVuID0gaGV4ZGVjKCBiaW4yaGV4KCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgJFNsaWNlcG9zLCA0ICkgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2xpY2Vwb3MgKz0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBhIFVuaWNvZGUgU3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJBbHQgVGFnID0gJyIgLiBIVE1MX1VURjE2X0VzY2FwZSggc3Vic3RyKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10sICRTbGljZXBvcywgJEFsdFRhZ2xlbioyKSwgVFJVRSApIC4gIic8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2xpY2Vwb3MgKz0gJEFsdFRhZ2xlbiAqIDI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnBhY2sgdGhlIEhUTUwgZmxhZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9yZCggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddeyAkU2xpY2Vwb3MgfSApID09PSAweDAxICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJDZWxsIFRleHQgaXMgSFRNTDxicj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkNlbGwgVGV4dCBpcyBOT1QgSFRNTDxicj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNsaWNlcG9zKys7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbnBhY2sgdGhlIGxlbmd0aCBvZiBhIFVuaWNvZGUgU3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDZWxsVGV4dGxlbiA9IGhleGRlYyggYmluMmhleCggc3Vic3RyKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10sICRTbGljZXBvcywgNCApICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNsaWNlcG9zICs9IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgYSBVbmljb2RlIFN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiQ2VsbCBUZXh0ID0gJyIgLiBIVE1MX1VURjE2X0VzY2FwZSggc3Vic3RyKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10sICRTbGljZXBvcywgJENlbGxUZXh0bGVuKjIpLCBUUlVFICkgLiAiJzxicj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTbGljZXBvcyArPSAkQ2VsbFRleHRsZW4gKiAyOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucGFjayB0aGUgbGFzdCAxMiBieXRlcyBvZiB0aGUgc2xpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNsaWNlQyA9IHVucGFjaygiTkFsaWduSC9OQWxpZ25WL0NBbHBoYS9DUmVkL0NHcmVlbi9DQmx1ZSIsIHN1YnN0cigkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10sICRTbGljZXBvcyApICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2xpY2Vwb3MgKz0gMTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJBbGlnbm1lbnQgPSAgSG9yaXpvbnRhbDoiIC4gJFNsaWNlQ1snQWxpZ25IJ10gLiAiLCBWZXJ0aWNhbDoiIC4gJFNsaWNlQ1snQWxpZ25WJ10gLiAiPGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkFscGhhIENvbG91ciA9ICIgLiAkU2xpY2VDWydBbHBoYSddIC4gIjxicj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJSZWQgPSAiIC4gJFNsaWNlQ1snUmVkJ10gLiAiPGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkdyZWVuID0gIiAuICRTbGljZUNbJ0dyZWVuJ10gLiAiPGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkJsdWUgPSAiIC4gJFNsaWNlQ1snQmx1ZSddIC4gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPC90ZD48L3RyPlxuIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwNDA4IDogLy8gR3JpZCBhbmQgR3VpZGVzIGluZm9ybWF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiUGhvdG9zaG9wX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9DYXB0aW9uX0NlbGxcIj4kUmVzb3VyY2VfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX1ZhbHVlX0NlbGxcIj4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucGFjayB0aGUgR3JpZHMgaW5mbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdyaWRfSW5mbyA9IHVucGFjaygiTlZlcnNpb24vTkdyaWRDeWNsZUgvTkdyaWRDeWNsZVYvTkd1aWRlQ291bnQiLCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJWZXJzaW9uID0gIiAuICRHcmlkX0luZm9bJ1ZlcnNpb24nXSAuICI8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkdyaWQgQ3ljbGUgPSAiIC4gJEdyaWRfSW5mb1snR3JpZEN5Y2xlSCddLzMyIC4gIiBQaXhlbChzKSAgeCAgIiAuICRHcmlkX0luZm9bJ0dyaWRDeWNsZVYnXS8zMiAuICIgUGl4ZWwocyk8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIk51bWJlciBvZiBHdWlkZXMgPSAiIC4gJEdyaWRfSW5mb1snR3VpZGVDb3VudCddIC4gIlxuIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIHRoZSBHdWlkZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciggJGkgPSAwOyAkaSA8ICRHcmlkX0luZm9bJ0d1aWRlQ291bnQnXTsgJGkrKyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucGFjayB0aGUgaW5mbyBmb3IgdGhpcyBndWlkZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR3VpZGVfSW5mbyA9IHVucGFjaygiTkxvY2F0aW9uL0NEaXJlY3Rpb24iLCBzdWJzdHIoJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddLDE2KyRpKjUsNSkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjxicj5HdWlkZSAkaSA6IExvY2F0aW9uID0gIiAuICRHdWlkZV9JbmZvWydMb2NhdGlvbiddLzMyIC4gIiBQaXhlbChzKSBmcm9tIGVkZ2UiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRHdWlkZV9JbmZvWydEaXJlY3Rpb24nXSA9PT0gMCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiLCBWZXJ0aWNhbFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiLCBIb3Jpem9udGFsXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8L3RkPjwvdHI+XG4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDQwNiA6IC8vIEpQRUcgUXVhbGl0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFF1YWxfSW5mbyA9IHVucGFjaygiblF1YWxpdHkvbkZvcm1hdC9uU2NhbnMvQ2NvbnN0IiwgJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiUGhvdG9zaG9wX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9DYXB0aW9uX0NlbGxcIj4kUmVzb3VyY2VfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX1ZhbHVlX0NlbGxcIj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggJFF1YWxfSW5mb1snUXVhbGl0eSddICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRkQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlF1YWxpdHkgMSAoTG93KTxicj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkZFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJRdWFsaXR5IDIgKExvdyk8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZGRjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiUXVhbGl0eSAzIChMb3cpPGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAwMDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlF1YWxpdHkgNCAoTG93KTxicj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwMDAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJRdWFsaXR5IDUgKE1lZGl1bSk8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiUXVhbGl0eSA2IChNZWRpdW0pPGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAwMDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlF1YWxpdHkgNyAoTWVkaXVtKTxicj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwMDA0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJRdWFsaXR5IDggKEhpZ2gpPGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAwMDU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlF1YWxpdHkgOSAoSGlnaCk8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwNjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiUXVhbGl0eSAxMCAoTWF4aW11bSk8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwNzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiUXVhbGl0eSAxMSAoTWF4aW11bSk8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwODoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiUXVhbGl0eSAxMiAoTWF4aW11bSk8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJVbmtub3duIFF1YWxpdHkgKCIgLiAkUXVhbF9JbmZvWydRdWFsaXR5J10gLiAiKTxicj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggJFF1YWxfSW5mb1snRm9ybWF0J10gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiU3RhbmRhcmQgRm9ybWF0XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiT3B0aW1pc2VkIEZvcm1hdFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAxMDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlByb2dyZXNzaXZlIEZvcm1hdDxicj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlVua25vd24gRm9ybWF0ICgiIC4gJFF1YWxfSW5mb1snRm9ybWF0J10gLiIpXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkUXVhbF9JbmZvWydGb3JtYXQnXSA9PSAweDAxMDEgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCAkUXVhbF9JbmZvWydTY2FucyddICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwMDAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjMgU2NhbnNcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI0IFNjYW5zXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAwMDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiNSBTY2Fuc1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiVW5rbm93biBudW1iZXIgb2Ygc2NhbnMgKCIgLiAkUXVhbF9JbmZvWydTY2FucyddIC4iKVxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDQwOSA6IC8vIFRodW1ibmFpbCBSZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwNDBDIDogLy8gVGh1bWJuYWlsIFJlc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGh1bWJfZGF0YSA9IHVucGFjaygiTkZvcm1hdC9OV2lkdGgvTkhlaWdodC9OV2lkdGhCeXRlcy9OU2l6ZS9OQ29tcHJlc3NlZFNpemUvbkJpdHNQaXhlbC9uUGxhbmVzIiwgJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiUGhvdG9zaG9wX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9DYXB0aW9uX0NlbGxcIj4kUmVzb3VyY2VfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX1ZhbHVlX0NlbGxcIj48cHJlPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJGb3JtYXQgPSAiIC4gKCggJHRodW1iX2RhdGFbJ0Zvcm1hdCddID09IDEgKSA/ICJKUEVHIFJHQlxuIiA6ICAiUmF3IFJHQlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiV2lkdGggPSAiIC4gJHRodW1iX2RhdGFbJ1dpZHRoJ10gLiAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkhlaWdodCA9ICIgLiAkdGh1bWJfZGF0YVsnSGVpZ2h0J10gLiAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlBhZGRlZCBSb3cgQnl0ZXMgPSAiIC4gJHRodW1iX2RhdGFbJ1dpZHRoQnl0ZXMnXSAuICIgYnl0ZXNcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiVG90YWwgU2l6ZSA9ICIgLiAkdGh1bWJfZGF0YVsnU2l6ZSddIC4gIiBieXRlc1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJDb21wcmVzc2VkIFNpemUgPSAiIC4gJHRodW1iX2RhdGFbJ0NvbXByZXNzZWRTaXplJ10gLiAiIGJ5dGVzXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkJpdHMgcGVyIFBpeGVsID0gIiAuICR0aHVtYl9kYXRhWydCaXRzUGl4ZWwnXSAuICIgYml0c1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJOdW1iZXIgb2YgcGxhbmVzID0gIiAuICR0aHVtYl9kYXRhWydQbGFuZXMnXSAuICIgYnl0ZXNcbiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlOiBhcyBvZiB2ZXJzaW9uIDEuMTEgLSBDaGFuZ2VkIHRvIG1ha2UgdGh1bWJuYWlsIGxpbmsgcG9ydGFibGUgYWNyb3NzIGRpcmVjdG9yaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdWlsZCB0aGUgcGF0aCBvZiB0aGUgdGh1bWJuYWlsIHNjcmlwdCBhbmQgaXRzIGZpbGVuYW1lIHBhcmFtZXRlciB0byBwdXQgaW4gYSB1cmwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rX3N0ciA9IGdldF9yZWxhdGl2ZV9wYXRoKCBkaXJuYW1lKF9fRklMRV9fKSAuICIvZ2V0X3BzX3RodW1iLnBocCIgLCBnZXRjd2QgKCApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGlua19zdHIgLj0gIj9maWxlbmFtZT0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmtfc3RyIC49IGdldF9yZWxhdGl2ZV9wYXRoKCAkZmlsZW5hbWUsIGRpcm5hbWUoX19GSUxFX18pICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRodW1ibmFpbCBsaW5rIHRvIGh0bWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJUaHVtYm5haWwgRGF0YTo8L3ByZT48YSBjbGFzcz1cIlBob3Rvc2hvcF9UaHVtYm5haWxfTGlua1wiIGhyZWY9XCIkbGlua19zdHJcIj48aW1nIGNsYXNzPVwiUGhvdG9zaG9wX1RodW1ibmFpbF9MaW5rXCIgc3JjPVwiJGxpbmtfc3RyXCI+PC9hPlxuIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAgIjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDA0MTQgOiAvLyBEb2N1bWVudCBTcGVjaWZpYyBJRCdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiUGhvdG9zaG9wX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9DYXB0aW9uX0NlbGxcIj4kUmVzb3VyY2VfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX1ZhbHVlX0NlbGxcIj48cHJlPiIgLiBoZXhkZWMoIGJpbjJoZXgoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSApICkgLiAiPC9wcmU+PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDQxRSA6IC8vIFVSTCBMaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVVJMX2NvdW50ID0gaGV4ZGVjKCBiaW4yaGV4KCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgMCwgNCApICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJQaG90b3Nob3BfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX0NhcHRpb25fQ2VsbFwiPiRSZXNvdXJjZV9OYW1lPC90ZD48dGQgY2xhc3M9XCJQaG90b3Nob3BfVmFsdWVfQ2VsbFwiPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICIkVVJMX2NvdW50IFVSTCdzIGluIGxpc3Q8YnI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybHN0ciA9IHN1YnN0ciggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddLCA0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBDaGVjayBpZiBVUkwgTGlzdCBpbiBQaG90b3Nob3AgSVJCIHdvcmtzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoICRpID0gMDsgJGkgPCAkVVJMX2NvdW50OyAkaSsrICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybF9kYXRhID0gdW5wYWNrKCAiTkxvbmcvTklEL05VUkxTaXplIiwgJHVybHN0ciApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiVVJMICRpIGluZm86IGxvbmcgPSAiIC4gJHVybF9kYXRhWydMb25nJ10gLiIsICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJJRCA9ICIgLiAkdXJsX2RhdGFbJ0lEJ10gLiAiLCAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXJsc3RyID0gc3Vic3RyKCAkdXJsc3RyLCAxMiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXJsID0gc3Vic3RyKCAkdXJsc3RyLCAwLCAkdXJsX2RhdGFbJ1VSTFNpemUnXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiVVJMID0gPGEgaHJlZj1cIiIgLiB4bWxfVVRGMTZfY2xlYW4oICR1cmwsIFRSVUUgKSAuICJcIj4iIC4gSFRNTF9VVEYxNl9Fc2NhcGUoICR1cmwsIFRSVUUgKSAuICI8L2E+PGJyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAzRjQgOiAvLyBHcmF5c2NhbGUgYW5kIG11bHRpY2hhbm5lbCBoYWxmdG9uaW5nIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjx0ciBjbGFzcz1cIlBob3Rvc2hvcF9UYWJsZV9Sb3dcIj48dGQgY2xhc3M9XCJQaG90b3Nob3BfQ2FwdGlvbl9DZWxsXCI+JFJlc291cmNlX05hbWU8L3RkPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9WYWx1ZV9DZWxsXCI+PHByZT5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSBJbnRlcnByZXRfSGFsZnRvbmUoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjwvcHJlPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDNGNSA6IC8vIENvbG9yIGhhbGZ0b25pbmcgaW5mb3JtYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJQaG90b3Nob3BfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX0NhcHRpb25fQ2VsbFwiPiRSZXNvdXJjZV9OYW1lPC90ZD48dGQgY2xhc3M9XCJQaG90b3Nob3BfVmFsdWVfQ2VsbFwiPjxwcmU+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkN5YW4gSGFsZnRvbmluZyBJbmZvOlxuIiAuIEludGVycHJldF9IYWxmdG9uZSggc3Vic3RyKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10sIDAsIDE4ICkgKSAuICJcblxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJNYWdlbnRhIEhhbGZ0b25pbmcgSW5mbzpcbiIgLiBJbnRlcnByZXRfSGFsZnRvbmUoIHN1YnN0ciggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddLCAxOCwgMTggKSApIC4gIlxuXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlllbGxvdyBIYWxmdG9uaW5nIEluZm86XG4iIC4gSW50ZXJwcmV0X0hhbGZ0b25lKCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgMzYsIDE4ICkgKSAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiQmxhY2sgSGFsZnRvbmluZyBJbmZvOlxuIiAuIEludGVycHJldF9IYWxmdG9uZSggc3Vic3RyKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10sIDU0LCAxOCApICkgLiAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjwvcHJlPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAzRjcgOiAvLyBHcmF5c2NhbGUgYW5kIG11bHRpY2hhbm5lbCB0cmFuc2ZlciBmdW5jdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJQaG90b3Nob3BfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX0NhcHRpb25fQ2VsbFwiPiRSZXNvdXJjZV9OYW1lPC90ZD48dGQgY2xhc3M9XCJQaG90b3Nob3BfVmFsdWVfQ2VsbFwiPjxwcmU+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gSW50ZXJwcmV0X1RyYW5zZmVyX0Z1bmN0aW9uKCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgMCwgMjggKSApIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8L3ByZT48L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwM0Y4IDogLy8gQ29sb3IgdHJhbnNmZXIgZnVuY3Rpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiUGhvdG9zaG9wX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9DYXB0aW9uX0NlbGxcIj4kUmVzb3VyY2VfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX1ZhbHVlX0NlbGxcIj48cHJlPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJSZWQgVHJhbnNmZXIgRnVuY3Rpb246ICAgXG4iIC4gSW50ZXJwcmV0X1RyYW5zZmVyX0Z1bmN0aW9uKCBzdWJzdHIoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSwgMCwgMjggKSApIC4gIlxuXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkdyZWVuIFRyYW5zZmVyIEZ1bmN0aW9uOiBcbiIgLiBJbnRlcnByZXRfVHJhbnNmZXJfRnVuY3Rpb24oIHN1YnN0ciggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddLCAyOCwgMjggKSApIC4gIlxuXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkJsdWUgVHJhbnNmZXIgRnVuY3Rpb246ICBcbiIgLiBJbnRlcnByZXRfVHJhbnNmZXJfRnVuY3Rpb24oIHN1YnN0ciggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddLCA1NiwgMjggKSApIC4gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8L3ByZT48L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwM0YzIDogLy8gUHJpbnQgRmxhZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJQaG90b3Nob3BfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX0NhcHRpb25fQ2VsbFwiPiRSZXNvdXJjZV9OYW1lPC90ZD48dGQgY2xhc3M9XCJQaG90b3Nob3BfVmFsdWVfQ2VsbFwiPjxwcmU+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ117MH0gPT0gIlx4MDEiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkxhYmVscyBTZWxlY3RlZFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkxhYmVscyBOb3QgU2VsZWN0ZWRcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXXsxfSA9PSAiXHgwMSIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiQ3JvcCBNYXJrcyBTZWxlY3RlZFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkNyb3AgTWFya3MgTm90IFNlbGVjdGVkXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ117Mn0gPT0gIlx4MDEiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkNvbG9yIEJhcnMgU2VsZWN0ZWRcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJDb2xvciBCYXJzIE5vdCBTZWxlY3RlZFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddezN9ID09ICJceDAxIiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJSZWdpc3RyYXRpb24gTWFya3MgU2VsZWN0ZWRcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJSZWdpc3RyYXRpb24gTWFya3MgTm90IFNlbGVjdGVkXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ117NH0gPT0gIlx4MDEiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIk5lZ2F0aXZlIFNlbGVjdGVkXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiTmVnYXRpdmUgTm90IFNlbGVjdGVkXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ117NX0gPT0gIlx4MDEiICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkZsaXAgU2VsZWN0ZWRcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJGbGlwIE5vdCBTZWxlY3RlZFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddezZ9ID09ICJceDAxIiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJJbnRlcnBvbGF0ZSBTZWxlY3RlZFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkludGVycG9sYXRlIE5vdCBTZWxlY3RlZFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddezd9ID09ICJceDAxIiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJDYXB0aW9uIFNlbGVjdGVkIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkNhcHRpb24gTm90IFNlbGVjdGVkIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8L3ByZT48L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyNzEwIDogLy8gUHJpbnQgRmxhZ3MgSW5mb3JtYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQcmludEZsYWdzID0gdW5wYWNrKCAiblZlcnNpb24vQ0NlbnRDcm9wL0NqdW5rL05CbGVlZFdpZHRoL25CbGVlZFdpZHRoU2NhbGUiLCAkSVJCX1Jlc291cmNlWydSZXNEYXRhJ10gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8dHIgY2xhc3M9XCJQaG90b3Nob3BfVGFibGVfUm93XCI+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX0NhcHRpb25fQ2VsbFwiPiRSZXNvdXJjZV9OYW1lPC90ZD48dGQgY2xhc3M9XCJQaG90b3Nob3BfVmFsdWVfQ2VsbFwiPjxwcmU+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlZlcnNpb24gPSAiIC4gJFByaW50RmxhZ3NbJ1ZlcnNpb24nXSAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiQ2VudHJlIENyb3AgTWFya3MgPSAiIC4gJFByaW50RmxhZ3NbJ0NlbnRDcm9wJ10gLiAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkJsZWVkIFdpZHRoID0gIiAuICRQcmludEZsYWdzWydCbGVlZFdpZHRoJ10gLiAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkJsZWVkIFdpZHRoIFNjYWxlID0gIiAuICRQcmludEZsYWdzWydCbGVlZFdpZHRoU2NhbGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICI8L3ByZT48L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwM0VEIDogLy8gUmVzb2x1dGlvbiBJbmZvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUmVzSW5mbyA9IHVucGFjayggIm5oUmVzX2ludC9uaFJlc2RlYy9uaFJlc1VuaXQvbndpZHRoVW5pdC9udlJlc19pbnQvbnZSZXNkZWMvbnZSZXNVbml0L25oZWlnaHRVbml0IiwgJElSQl9SZXNvdXJjZVsnUmVzRGF0YSddICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiUGhvdG9zaG9wX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9DYXB0aW9uX0NlbGxcIj4kUmVzb3VyY2VfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX1ZhbHVlX0NlbGxcIj48cHJlPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJIb3Jpem9udGFsIFJlc29sdXRpb24gPSAiIC4gKCRSZXNJbmZvWydoUmVzX2ludCddICsgJFJlc0luZm9bJ2hSZXNkZWMnXS82NTUzNikgLiAiIHBpeGVscyBwZXIgSW5jaFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJWZXJ0aWNhbCBSZXNvbHV0aW9uID0gIiAuICgkUmVzSW5mb1sndlJlc19pbnQnXSArICRSZXNJbmZvWyd2UmVzZGVjJ10vNjU1MzYpIC4gIiBwaXhlbHMgcGVyIEluY2hcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRSZXNJbmZvWydoUmVzVW5pdCddID09IDEgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiRGlzcGxheSB1bml0cyBmb3IgSG9yaXpvbnRhbCBSZXNvbHV0aW9uID0gUGl4ZWxzIHBlciBJbmNoXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICggJFJlc0luZm9bJ2hSZXNVbml0J10gPT0gMiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJEaXNwbGF5IHVuaXRzIGZvciBIb3Jpem9udGFsIFJlc29sdXRpb24gPSBQaXhlbHMgcGVyIENlbnRpbWV0cmVcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJEaXNwbGF5IHVuaXRzIGZvciBIb3Jpem9udGFsIFJlc29sdXRpb24gPSBVbmtub3duIFZhbHVlICgiLiAkUmVzSW5mb1snaFJlc1VuaXQnXSAuIilcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkUmVzSW5mb1sndlJlc1VuaXQnXSA9PSAxICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkRpc3BsYXkgdW5pdHMgZm9yIFZlcnRpY2FsIFJlc29sdXRpb24gPSBQaXhlbHMgcGVyIEluY2hcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkUmVzSW5mb1sndlJlc1VuaXQnXSA9PSAyICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkRpc3BsYXkgdW5pdHMgZm9yIFZlcnRpY2FsIFJlc29sdXRpb24gPSBQaXhlbHMgcGVyIENlbnRpbWV0cmVcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJEaXNwbGF5IHVuaXRzIGZvciBWZXJ0aWNhbCBSZXNvbHV0aW9uID0gVW5rbm93biBWYWx1ZSAoIi4gJFJlc0luZm9bJ3ZSZXNVbml0J10gLiIpXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFJlc0luZm9bJ3dpZHRoVW5pdCddID09IDEgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiRGlzcGxheSB1bml0cyBmb3IgSW1hZ2UgV2lkdGggPSBJbmNoZXNcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkUmVzSW5mb1snd2lkdGhVbml0J10gPT0gMiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJEaXNwbGF5IHVuaXRzIGZvciBJbWFnZSBXaWR0aCA9IENlbnRpbWV0cmVzXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICggJFJlc0luZm9bJ3dpZHRoVW5pdCddID09IDMgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiRGlzcGxheSB1bml0cyBmb3IgSW1hZ2UgV2lkdGggPSBQb2ludHNcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkUmVzSW5mb1snd2lkdGhVbml0J10gPT0gNCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJEaXNwbGF5IHVuaXRzIGZvciBJbWFnZSBXaWR0aCA9IFBpY2FzXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICggJFJlc0luZm9bJ3dpZHRoVW5pdCddID09IDUgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiRGlzcGxheSB1bml0cyBmb3IgSW1hZ2UgV2lkdGggPSBDb2x1bW5zXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiRGlzcGxheSB1bml0cyBmb3IgSW1hZ2UgV2lkdGggPSBVbmtub3duIFZhbHVlICgiLiAkUmVzSW5mb1snd2lkdGhVbml0J10gLiIpXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFJlc0luZm9bJ2hlaWdodFVuaXQnXSA9PSAxICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkRpc3BsYXkgdW5pdHMgZm9yIEltYWdlIEhlaWdodCA9IEluY2hlcyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkUmVzSW5mb1snaGVpZ2h0VW5pdCddID09IDIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiRGlzcGxheSB1bml0cyBmb3IgSW1hZ2UgSGVpZ2h0ID0gQ2VudGltZXRyZXMiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICggJFJlc0luZm9bJ2hlaWdodFVuaXQnXSA9PSAzICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkRpc3BsYXkgdW5pdHMgZm9yIEltYWdlIEhlaWdodCA9IFBvaW50cyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCAkUmVzSW5mb1snaGVpZ2h0VW5pdCddID09IDQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiRGlzcGxheSB1bml0cyBmb3IgSW1hZ2UgSGVpZ2h0ID0gUGljYXMiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICggJFJlc0luZm9bJ2hlaWdodFVuaXQnXSA9PSA1ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIkRpc3BsYXkgdW5pdHMgZm9yIEltYWdlIEhlaWdodCA9IENvbHVtbnMiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiRGlzcGxheSB1bml0cyBmb3IgSW1hZ2UgSGVpZ2h0ID0gVW5rbm93biBWYWx1ZSAoIi4gJFJlc0luZm9bJ2hlaWdodFVuaXQnXSAuIikiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIjwvcHJlPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA6IC8vIEFsbCBvdGhlciByZWNvcmRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPHRyIGNsYXNzPVwiUGhvdG9zaG9wX1RhYmxlX1Jvd1wiPjx0ZCBjbGFzcz1cIlBob3Rvc2hvcF9DYXB0aW9uX0NlbGxcIj4kUmVzb3VyY2VfTmFtZTwvdGQ+PHRkIGNsYXNzPVwiUGhvdG9zaG9wX1ZhbHVlX0NlbGxcIj5SRVNPVVJDRSBERUNPRElORyBOT1QgSU1QTEVNRU5URUQgWUVUPEJSPiIgLiBzdHJsZW4oICRJUkJfUmVzb3VyY2VbJ1Jlc0RhdGEnXSApIC4gIiBieXRlczwvdGQ+PC90cj5cbiI7CgogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgdGFibGUgZW5kIHRvIHRoZSBIVE1MCiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiPC90YWJsZT5cbiI7CgogICAgICAgICAgICAgICAgLy8gQWRkIGFueSBzZWNvbmRhcnkgb3V0cHV0IHRvIHRoZSBIVE1MCiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAkc2Vjb25kYXJ5X291dHB1dF9zdHI7CgogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIHRoZSBIVE1MCiAgICAgICAgcmV0dXJuICRvdXRwdXRfc3RyOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgSW50ZXJwcmV0X0lSQl90b19IVE1MCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogICAgICAgICBJTlRFUk5BTCBGVU5DVElPTlMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIHVucGFja19QaG90b3Nob3BfSVJCX0RhdGEKKgoqIERlc2NyaXB0aW9uOiAgRXh0cmFjdHMgUGhvdG9zaG9wIEluZm9ybWF0aW9uIFJlc291cmNlIEJsb2NrIChJUkIpIGluZm9ybWF0aW9uCiogICAgICAgICAgICAgICBmcm9tIGEgYmluYXJ5IHN0cmluZyBjb250YWluaW5nIHRoZSBJUkIsIGFzIHJlYWQgZnJvbSBhIGZpbGUKKgoqIFBhcmFtZXRlcnM6ICAgSVJCX0RhdGEgLSBUaGUgYmluYXJ5IHN0cmluZyBjb250YWluaW5nIHRoZSBJUkIKKgoqIFJldHVybnM6ICAgICAgSVJCZGF0YSAtIFRoZSBhcnJheSBvZiBQaG90b3Nob3AgSVJCIHJlY29yZHMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiB1bnBhY2tfUGhvdG9zaG9wX0lSQl9EYXRhKCAkSVJCX0RhdGEgKQp7CiAgICAgICAgJHBvcyA9IDA7CgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggdGhlIElSQiBhbmQgZXh0cmFjdCBpdHMgcmVjb3JkcyAtIFJlY29yZHMgYXJlIHN0YXJ0ZWQgd2l0aCA4QklNLCBzbyBjeWNsZSB1bnRpbCBubyBtb3JlIGluc3RhbmNlcyBvZiA4QklNIGNhbiBiZSBmb3VuZAogICAgICAgIHdoaWxlICggKCAkcG9zIDwgc3RybGVuKCAkSVJCX0RhdGEgKSApICYmICggKCRwb3MgPSBzdHJwb3MoICRJUkJfRGF0YSwgIjhCSU0iLCAkcG9zKSApICE9PSBGQUxTRSApICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZSBwb3NpdGlvbiBvdmVyIHRoZSA4QklNIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICRwb3MgKz0gNDsKCiAgICAgICAgICAgICAgICAvLyBOZXh0IHR3byBjaGFyYWN0ZXJzIGFyZSB0aGUgcmVjb3JkIElEIC0gZGVub3Rpbmcgd2hhdCB0eXBlIG9mIHJlY29yZCBpdCBpcy4KICAgICAgICAgICAgICAgICRJRCA9IG9yZCggJElSQl9EYXRheyAkcG9zIH0gKSAqIDI1NiArIG9yZCggJElSQl9EYXRheyAkcG9zICsxIH0gKTsKCiAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZSBwb3NpdGlvbm92ZXIgdGhlIHR3byByZWNvcmQgSUQgY2hhcmFjdGVycwogICAgICAgICAgICAgICAgJHBvcyArPSAyOwoKICAgICAgICAgICAgICAgIC8vIE5leHQgY29tZXMgYSBSZWNvcmQgTmFtZSAtIHVzdWFsbHkgbm90IHVzZWQsIGJ1dCBpdCBzaG91bGQgYmUgYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nLCBwYWRkZWQgd2l0aCAweDAwIHRvIGJlIGFuIGV2ZW4gbGVuZ3RoCiAgICAgICAgICAgICAgICAkbmFtZXN0YXJ0cG9zID0gJHBvczsKCiAgICAgICAgICAgICAgICAvLyBDaGFuZ2U6IEZpeGVkIHByb2Nlc3Npbmcgb2YgZW1iZWRkZWQgcmVzb3VyY2UgbmFtZXMsIGFzIG9mIHJldmlzaW9uIDEuMTAKCiAgICAgICAgICAgICAgICAvLyBOT1RFOiBQaG90b3Nob3AgZG9lcyBub3QgcHJvY2VzcyByZXNvdXJjZSBuYW1lcyBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkIDoKICAgICAgICAgICAgICAgIC8vICJBZG9iZSBQaG90b3Nob3AgNi4wIEZpbGUgRm9ybWF0cyBTcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDYuMCwgUmVsZWFzZSAyLCBOb3ZlbWJlciAyMDAwIgogICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgIC8vIFRoZSByZXNvdXJjZSBuYW1lIGlzIGFjdHVhbGx5IGZvcm1hdHRlZCBhcyBmb2xsb3dzOgogICAgICAgICAgICAgICAgLy8gT25lIGJ5dGUgbmFtZSBsZW5ndGgsIGZvbGxvd2VkIGJ5IHRoZSBudWxsIHRlcm1pbmF0ZWQgYXNjaWkgbmFtZSBzdHJpbmcuCiAgICAgICAgICAgICAgICAvLyBUaGUgZmllbGQgaXMgdGhlbiBwYWRkZWQgd2l0aCBhIE51bGwgY2hhcmFjdGVyIGlmIHJlcXVpcmVkLCB0byBlbnN1cmUgdGhhdCB0aGUKICAgICAgICAgICAgICAgIC8vIHRvdGFsIGxlbmd0aCBvZiB0aGUgbmFtZSBsZW5ndGggYW5kIG5hbWUgaXMgZXZlbi4KCiAgICAgICAgICAgICAgICAvLyBOYW1lIC0gcHJvY2VzcyBpdAogICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBsZW5ndGgKICAgICAgICAgICAgICAgICRuYW1lbGVuID0gb3JkICggJElSQl9EYXRheyAkbmFtZXN0YXJ0cG9zIH0gKTsKCiAgICAgICAgICAgICAgICAvLyBUb3RhbCBsZW5ndGggb2YgbmFtZSBhbmQgbGVuZ3RoIGluZm8gbXVzdCBiZSBldmVuLCBoZW5jZSBuYW1lIGxlbmd0aCBtdXN0IGJlIG9kZAogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG5hbWUgbGVuZ3RoIGlzIGV2ZW4sCiAgICAgICAgICAgICAgICBpZiAoICRuYW1lbGVuICUgMiA9PSAwICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIG9uZSB0byBsZW5ndGggdG8gbWFrZSBpdCBvZGQKICAgICAgICAgICAgICAgICAgICAgICAgJG5hbWVsZW4gKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBuYW1lCiAgICAgICAgICAgICAgICAkcmVzZW1iZWRkZWRuYW1lID0gdHJpbSggc3Vic3RyICggJElSQl9EYXRhLCAkbmFtZXN0YXJ0cG9zKzEsICAkbmFtZWxlbikgKTsKICAgICAgICAgICAgICAgICRwb3MgKz0gJG5hbWVsZW4gKyAxOwoKCiAgICAgICAgICAgICAgICAvLyBOZXh0IGlzIGEgZm91ciBieXRlIHNpemUgZmllbGQgaW5kaWNhdGluZyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgcmVjb3JkJ3MgZGF0YSAgLSBNU0IgZmlyc3QKICAgICAgICAgICAgICAgICRkYXRhc2l6ZSA9ICAgICBvcmQoICRJUkJfRGF0YXsgJHBvcyB9ICkgKiAxNjc3NzIxNiArIG9yZCggJElSQl9EYXRheyAkcG9zICsgMSB9ICkgKiA2NTUzNiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkKCAkSVJCX0RhdGF7ICRwb3MgKyAyIH0gKSAqIDI1NiArIG9yZCggJElSQl9EYXRheyAkcG9zICsgMyB9ICk7CiAgICAgICAgICAgICAgICAkcG9zICs9IDQ7CgogICAgICAgICAgICAgICAgLy8gVGhlIHJlY29yZCBpcyBzdG9yZWQgcGFkZGVkIHdpdGggMHgwMCBjaGFyYWN0ZXJzIHRvIG1ha2UgdGhlIHNpemUgZXZlbiwgc28gd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHN0b3JlZCBzaXplCiAgICAgICAgICAgICAgICAkc3RvcmVkc2l6ZSA9ICAkZGF0YXNpemUgKyAoJGRhdGFzaXplICUgMik7CgogICAgICAgICAgICAgICAgJHJlc2RhdGEgPSBzdWJzdHIgKCAkSVJCX0RhdGEsICRwb3MsICRkYXRhc2l6ZSApOwoKICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgcmVzb3VyY2UKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBQYXRoIGluZm9ybWF0aW9uIFJlc291cmNlLCBzaW5jZSB0aGV5IGhhdmUgYSByYW5nZSBvZiBJRCdzCiAgICAgICAgICAgICAgICBpZiAoICggJElEID49IDB4MDdEMCApICYmICggJElEIDw9IDB4MEJCNiApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFJlc0Rlc2MgPSAiSUQgSW5mbyA6IFBhdGggSW5mb3JtYXRpb24gKHNhdmVkIHBhdGhzKS4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMoICRJRCwgJEdMT0JBTFNbICJQaG90b3Nob3BfSURfRGVzY3JpcHRpb25zIiBdICkgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFJlc0Rlc2MgPSAkR0xPQkFMU1sgIlBob3Rvc2hvcF9JRF9EZXNjcmlwdGlvbnMiIF1bICRJRCBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRSZXNEZXNjID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIE5hbWUgb2YgdGhlIFJlc291cmNlCiAgICAgICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMoICRJRCwgJEdMT0JBTFNbICJQaG90b3Nob3BfSURfTmFtZXMiIF0gKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRSZXNOYW1lID0gJEdMT0JBTFNbJ1Bob3Rvc2hvcF9JRF9OYW1lcyddWyAkSUQgXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFJlc05hbWUgPSAiIjsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIFJlc291cmNlIGluIHRoZSBhcnJheSB0byBiZSByZXR1cm5lZAoKICAgICAgICAgICAgICAgICRJUkJfQXJyYXlbXSA9IGFycmF5KCAgICAgIlJlc0lEIiA9PiAkSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVzTmFtZSIgPT4gJFJlc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVzRGVzYyIgPT4gJFJlc0Rlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVzRW1iZWRkZWROYW1lIiA9PiAkcmVzZW1iZWRkZWRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc0RhdGEiID0+ICRyZXNkYXRhICk7CgogICAgICAgICAgICAgICAgLy8gSnVtcCBvdmVyIHRoZSBkYXRhIHRvIHRoZSBuZXh0IHJlY29yZAogICAgICAgICAgICAgICAgJHBvcyArPSAkc3RvcmVkc2l6ZTsKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiB0aGUgYXJyYXkgY3JlYXRlZAogICAgICAgIHJldHVybiAkSVJCX0FycmF5Owp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgdW5wYWNrX1Bob3Rvc2hvcF9JUkJfRGF0YQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBwYWNrX1Bob3Rvc2hvcF9JUkJfRGF0YQoqCiogRGVzY3JpcHRpb246ICBQYWNrcyBhIFBob3Rvc2hvcCBJbmZvcm1hdGlvbiBSZXNvdXJjZSBCbG9jayAoSVJCKSBhcnJheSBpbnRvIGl0J3MKKiAgICAgICAgICAgICAgIGJpbmFyeSBmb3JtLCB3aGljaCBjYW4gYmUgd3JpdHRlbiB0byBhIGZpbGUKKgoqIFBhcmFtZXRlcnM6ICAgSVJCX2RhdGEgLSBhbiBQaG90b3Nob3AgSVJCIGFycmF5IHRvIGJlIGNvbnZlcnRlZC4gU2hvdWxkIGJlIGluCiogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIGZvcm1hdCBhcyByZWNlaXZlZCBmcm9tIGdldF9QaG90b3Nob3BfSVJCCioKKiBSZXR1cm5zOiAgICAgIHBhY2tlZF9JUkJfZGF0YSAtIHRoZSBiaW5hcnkgc3RyaW5nIG9mIHBhY2tlZCBJUkIgZGF0YQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHBhY2tfUGhvdG9zaG9wX0lSQl9EYXRhKCAkSVJCX2RhdGEgKQp7CiAgICAgICAgJHBhY2tlZF9JUkJfZGF0YSA9ICIiOwoKICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggcmVzb3VyY2UgaW4gdGhlIElSQiwKICAgICAgICBmb3JlYWNoICgkSVJCX2RhdGEgYXMgJHJlc291cmNlKQogICAgICAgIHsKCiAgICAgICAgICAgICAgICAvLyBDaGFuZ2U6IEZpeCB0byBhdm9pZCBjcmVhdGluZyBibGFuayByZXNvdXJjZXMsIGFzIG9mIHJldmlzaW9uIDEuMTAKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhY3R1YWxseSBhbnkgZGF0YSBmb3IgdGhpcyByZXNvdXJjZQogICAgICAgICAgICAgICAgaWYoIHN0cmxlbiggJHJlc291cmNlWydSZXNEYXRhJ10gKSA9PSAwICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gZGF0YSBmb3IgcmVzb3VyY2UgLSBza2lwIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgOEJJTSB0YWcsIGFuZCByZXNvdXJjZSBJRCB0byB0aGUgcGFja2VkIG91dHB1dCBkYXRhCiAgICAgICAgICAgICAgICAkcGFja2VkX0lSQl9kYXRhIC49IHBhY2soImE0biIsICI4QklNIiwgJHJlc291cmNlWydSZXNJRCddICk7CgoKICAgICAgICAgICAgICAgIC8vIENoYW5nZTogRml4ZWQgcHJvY2Vzc2luZyBvZiBlbWJlZGRlZCByZXNvdXJjZSBuYW1lcywgYXMgb2YgcmV2aXNpb24gMS4xMAoKICAgICAgICAgICAgICAgIC8vIE5PVEU6IFBob3Rvc2hvcCBkb2VzIG5vdCBwcm9jZXNzIHJlc291cmNlIG5hbWVzIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQgOgogICAgICAgICAgICAgICAgLy8gIkFkb2JlIFBob3Rvc2hvcCA2LjAgRmlsZSBGb3JtYXRzIFNwZWNpZmljYXRpb24sIFZlcnNpb24gNi4wLCBSZWxlYXNlIDIsIE5vdmVtYmVyIDIwMDAiCiAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgLy8gVGhlIHJlc291cmNlIG5hbWUgaXMgYWN0dWFsbHkgZm9ybWF0dGVkIGFzIGZvbGxvd3M6CiAgICAgICAgICAgICAgICAvLyBPbmUgYnl0ZSBuYW1lIGxlbmd0aCwgZm9sbG93ZWQgYnkgdGhlIG51bGwgdGVybWluYXRlZCBhc2NpaSBuYW1lIHN0cmluZy4KICAgICAgICAgICAgICAgIC8vIFRoZSBmaWVsZCBpcyB0aGVuIHBhZGRlZCB3aXRoIGEgTnVsbCBjaGFyYWN0ZXIgaWYgcmVxdWlyZWQsIHRvIGVuc3VyZSB0aGF0IHRoZQogICAgICAgICAgICAgICAgLy8gdG90YWwgbGVuZ3RoIG9mIHRoZSBuYW1lIGxlbmd0aCBhbmQgbmFtZSBpcyBldmVuLgoKICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBOYW1lIFNpemUKICAgICAgICAgICAgICAgICRwYWNrZWRfSVJCX2RhdGEgLj0gcGFjayggImMiLCBzdHJsZW4odHJpbSgkcmVzb3VyY2VbJ1Jlc0VtYmVkZGVkTmFtZSddKSkpOwoKICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgUmVzb3VyY2UgTmFtZSB0byB0aGUgcGFja2VkIG91dHB1dCBkYXRhCiAgICAgICAgICAgICAgICAkcGFja2VkX0lSQl9kYXRhIC49IHRyaW0oJHJlc291cmNlWydSZXNFbWJlZGRlZE5hbWUnXSk7CgogICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlc291cmNlIG5hbWUgaXMgZXZlbiBsZW5ndGgsIHRoZW4gd2l0aCB0aGUgYWRkaXRpb24gb2YKICAgICAgICAgICAgICAgIC8vIHRoZSBzaXplIGl0IGJlY29tZXMgb2RkIGFuZCBuZWVkcyB0byBiZSBwYWRkZWQgdG8gYW4gZXZlbiBudW1iZXIKICAgICAgICAgICAgICAgIGlmICggc3RybGVuKCB0cmltKCRyZXNvdXJjZVsnUmVzRW1iZWRkZWROYW1lJ10pICkgJSAyID09IDAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGl0IG5lZWRzIHRvIGJlIGV2ZW5lZCB1cCBieSBhcHBlbmRpbmcgYW5vdGhlciBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICRwYWNrZWRfSVJCX2RhdGEgLj0gIlx4MDAiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcmVzb3VyY2UgZGF0YSBzaXplIHRvIHRoZSBwYWNrZWQgb3V0cHV0IGRhdGEKICAgICAgICAgICAgICAgICRwYWNrZWRfSVJCX2RhdGEgLj0gcGFjaygiTiIsIHN0cmxlbiggJHJlc291cmNlWydSZXNEYXRhJ10gKSApOwoKICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcmVzb3VyY2UgZGF0YSB0byB0aGUgcGFja2VkIG91dHB1dCBkYXRhCiAgICAgICAgICAgICAgICAkcGFja2VkX0lSQl9kYXRhIC49ICRyZXNvdXJjZVsnUmVzRGF0YSddOwoKICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXNvdXJjZSBkYXRhIGlzIG9kZCBsZW5ndGgsCiAgICAgICAgICAgICAgICBpZiAoIHN0cmxlbiggJHJlc291cmNlWydSZXNEYXRhJ10gKSAlIDIgPT0gMSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gaXQgbmVlZHMgdG8gYmUgZXZlbmVkIHVwIGJ5IGFwcGVuZGluZyBhbm90aGVyIG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgJHBhY2tlZF9JUkJfZGF0YSAuPSAiXHgwMCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIHBhY2tlZCBkYXRhIHN0cmluZwogICAgICAgIHJldHVybiAkcGFja2VkX0lSQl9kYXRhOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgcGFja19QaG90b3Nob3BfSVJCX0RhdGEKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEludGVybmFsIEZ1bmN0aW9uOiAgICAgSW50ZXJwcmV0X1RyYW5zZmVyX0Z1bmN0aW9uCioKKiBEZXNjcmlwdGlvbjogIFVzZWQgYnkgSW50ZXJwcmV0X0lSQl90b19IVE1MIHRvIGludGVycHJldCBDb2xvciB0cmFuc2ZlciBmdW5jdGlvbnMKKiAgICAgICAgICAgICAgIGZvciBQaG90b3Nob3AgSVJCIHJlc291cmNlIDB4MDNGOC4gQ29udmVydHMgdGhlIHRyYW5zZmVyIGZ1bmN0aW9uCiogICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0byBhIGh1bWFuIHJlYWRhYmxlIHZlcnNpb24uCioKKiBQYXJhbWV0ZXJzOiAgIFRyYW5zZmVyX0Z1bmN0aW9uX0JpbmFyeSAtIGEgMjggYnl0ZSBJbmsgY3VydmVzIHN0cnVjdHVyZSBzdHJpbmcKKgoqIFJldHVybnM6ICAgICAgb3V0cHV0X3N0ciAtIHRoZSB0ZXh0IHN0cmluZyBjb250YWluaW5nIHRoZSB0cmFuc2ZlciBmdW5jdGlvbgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gSW50ZXJwcmV0X1RyYW5zZmVyX0Z1bmN0aW9uKCAkVHJhbnNmZXJfRnVuY3Rpb25fQmluYXJ5ICkKewogICAgICAgIC8vIFVucGFjayB0aGUgVHJhbnNmZXIgZnVuY3Rpb24gaW5mb3JtYXRpb24KICAgICAgICAkVHJhbnNfdmFscyA9IHVucGFjayAoICJuMTNDdXJ2ZS9uT3ZlcnJpZGUiLCAgJFRyYW5zZmVyX0Z1bmN0aW9uX0JpbmFyeSApOwoKICAgICAgICAkb3V0cHV0X3N0ciA9ICJUcmFuc2ZlciBGdW5jdGlvbiBQb2ludHM6ICI7CgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBvZiB0aGUgVHJhbnNmZXIgZnVuY3Rpb24gYXJyYXkgdmFsdWVzCiAgICAgICAgZm9yZWFjaCAoICRUcmFuc192YWxzIGFzICRLZXkgPT4gJHZhbCApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHZhbHVlIHNob3VsZCBiZSBuZWdhdGl2ZQogICAgICAgICAgICAgICAgaWYgKCR2YWwgPiAzMjc2OCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhbHVlIHNob3VsZCBiZSBuZWdhdGl2ZSAtIG1ha2UgaXQgc28KICAgICAgICAgICAgICAgICAgICAgICAgJHZhbCA9ICR2YWwgLSA2NTUzNjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIE92ZXJyaWRlIGl0ZW0gaXMgbm90IGdldHRpbmcgaW4gdGhpcyBsaXN0LCBhbmQKICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIHZhbHVlIGlzIG5vdCAtMSwgd2hpY2ggbWVhbnMgaWdub3JlZAogICAgICAgICAgICAgICAgaWYgKCAoICRLZXkgIT0gIk92ZXJyaWRlIiApICYmICggJHZhbCAhPSAtMSApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHZhbGlkIHRyYW5zZmVyIGZ1bmN0aW9uIHBvaW50LCBvdXRwdXQgaXQKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gJHZhbC8xMCAuICIlLCAiOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gT3V0cHV0IHRoZSBvdmVycmlkZSBpbmZvCiAgICAgICAgaWYgKCAkVHJhbnNfdmFsc1snT3ZlcnJpZGUnXSA9PSAwICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiXG5PdmVycmlkZTogTGV0IHByaW50ZXIgc3VwcGx5IGN1cnZlIjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJcbk92ZXJyaWRlOiBPdmVycmlkZSBwcmludGVyknMgZGVmYXVsdCB0cmFuc2ZlciBjdXJ2ZSI7CiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdAogICAgICAgIHJldHVybiAkb3V0cHV0X3N0cjsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIEludGVycHJldF9UcmFuc2Zlcl9GdW5jdGlvbgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogSW50ZXJuYWwgRnVuY3Rpb246ICAgICBJbnRlcnByZXRfSGFsZnRvbmUKKgoqIERlc2NyaXB0aW9uOiAgVXNlZCBieSBJbnRlcnByZXRfSVJCX3RvX0hUTUwgdG8gaW50ZXJwcmV0IENvbG9yIGhhbGZ0b25pbmcgaW5mb3JtYXRpb24KKiAgICAgICAgICAgICAgIGZvciBQaG90b3Nob3AgSVJCIHJlc291cmNlIDB4MDNGNS4gQ29udmVydHMgdGhlIGhhbGZ0b25pbmcgaW5mbwoqICAgICAgICAgICAgICAgdG8gYSBodW1hbiByZWFkYWJsZSB2ZXJzaW9uLgoqCiogUGFyYW1ldGVyczogICBUcmFuc2Zlcl9GdW5jdGlvbl9CaW5hcnkgLSBhIDE4IGJ5dGUgSGFsZnRvbmUgc2NyZWVuIHBhcmFtZXRlcgomICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlIHN0cmluZwoqCiogUmV0dXJuczogICAgICBvdXRwdXRfc3RyIC0gdGhlIHRleHQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHRyYW5zZmVyIGZ1bmN0aW9uCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBJbnRlcnByZXRfSGFsZnRvbmUoICRIYWxmdG9uZV9CaW5hcnkgKQp7CiAgICAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHRvIHJlY2VpdmUgdGhlIG91dHB1dAogICAgICAgICRvdXRwdXRfc3RyID0gIiI7CgogICAgICAgIC8vIFVucGFjayB0aGUgYmluYXJ5IGRhdGEgaW50byBhbiBhcnJheQogICAgICAgICRIYWxmdG9uZUluZm8gPSB1bnBhY2soICJuRnJlcVZhbF9pbnQvbkZyZXFWYWxfZGVjL25GcmVxU2NhbGUvbkFuZ2xlX2ludC9uQW5nbGVfZGVjL25TaGFwZUNvZGUvTk1pc2MvQ0FjY3VyYXRlL0NEZWZhdWx0IiwgJEhhbGZ0b25lX0JpbmFyeSApOwoKICAgICAgICAvLyBJbnRlcnByZXQgSW5rIFNjcmVlbiBGcmVxdWVuY3kKICAgICAgICAkb3V0cHV0X3N0ciAuPSAiSW5rIFNjcmVlbiBGcmVxdWVuY3kgPSAiIC4gKCRIYWxmdG9uZUluZm9bJ0ZyZXFWYWxfaW50J10gKyAkSGFsZnRvbmVJbmZvWydGcmVxVmFsX2RlYyddLzY1NTM2KSAuICIgbGluZXMgcGVyIEluY2hcbiI7CiAgICAgICAgaWYgKCAkSGFsZnRvbmVJbmZvWydGcmVxU2NhbGUnXSA9PSAxICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiRGlzcGxheSB1bml0cyBmb3IgSW5rIFNjcmVlbiBGcmVxdWVuY3kgPSBJbmNoZXNcbiI7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiRGlzcGxheSB1bml0cyBmb3IgSW5rIFNjcmVlbiBGcmVxdWVuY3kgPSBDZW50aW1ldHJlc1xuIjsKICAgICAgICB9CgogICAgICAgIC8vIEludGVycHJldCBBbmdsZSBmb3Igc2NyZWVuCiAgICAgICAgJG91dHB1dF9zdHIgLj0gIkFuZ2xlIGZvciBzY3JlZW4gPSAiIC4gKCRIYWxmdG9uZUluZm9bJ0FuZ2xlX2ludCddICsgJEhhbGZ0b25lSW5mb1snQW5nbGVfZGVjJ10vNjU1MzYpIC4gIiBkZWdyZWVzXG4iOwoKICAgICAgICAvLyBJbnRlcnByZXQgU2hhcGUgb2YgSGFsZnRvbmUgRG90cwogICAgICAgIGlmICgkSGFsZnRvbmVJbmZvWydTaGFwZUNvZGUnXSA+IDMyNzY4ICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkSGFsZnRvbmVJbmZvWydTaGFwZUNvZGUnXSA9ICRIYWxmdG9uZUluZm9bJ1NoYXBlQ29kZSddIC0gNjU1MzY7CiAgICAgICAgfQogICAgICAgIGlmICggJEhhbGZ0b25lSW5mb1snU2hhcGVDb2RlJ10gPT0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlNoYXBlIG9mIEhhbGZ0b25lIERvdHMgPSBSb3VuZFxuIjsKICAgICAgICB9CiAgICAgICAgZWxzZWlmICggJEhhbGZ0b25lSW5mb1snU2hhcGVDb2RlJ10gPT0gMSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlNoYXBlIG9mIEhhbGZ0b25lIERvdHMgPSBFbGxpcHNlXG4iOwogICAgICAgIH0KICAgICAgICBlbHNlaWYgKCAkSGFsZnRvbmVJbmZvWydTaGFwZUNvZGUnXSA9PSAyICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiU2hhcGUgb2YgSGFsZnRvbmUgRG90cyA9IExpbmVcbiI7CiAgICAgICAgfQogICAgICAgIGVsc2VpZiAoICRIYWxmdG9uZUluZm9bJ1NoYXBlQ29kZSddID09IDMgKQogICAgICAgIHsKICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJTaGFwZSBvZiBIYWxmdG9uZSBEb3RzID0gU3F1YXJlXG4iOwogICAgICAgIH0KICAgICAgICBlbHNlaWYgKCAkSGFsZnRvbmVJbmZvWydTaGFwZUNvZGUnXSA9PSA0ICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiU2hhcGUgb2YgSGFsZnRvbmUgRG90cyA9IENyb3NzXG4iOwogICAgICAgIH0KICAgICAgICBlbHNlaWYgKCAkSGFsZnRvbmVJbmZvWydTaGFwZUNvZGUnXSA9PSA2ICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiU2hhcGUgb2YgSGFsZnRvbmUgRG90cyA9IERpYW1vbmRcbiI7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiU2hhcGUgb2YgSGFsZnRvbmUgRG90cyA9IFVua25vd24gc2hhcGUgKCIgLiAkSGFsZnRvbmVJbmZvWydTaGFwZUNvZGUnXSAuICIpXG4iOwogICAgICAgIH0KCiAgICAgICAgLy8gSW50ZXJwcmV0IEFjY3VyYXRlIFNjcmVlbnMKICAgICAgICBpZiAoICRIYWxmdG9uZUluZm9bJ0FjY3VyYXRlJ10gPT0gMSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlVzZSBBY2N1cmF0ZSBTY3JlZW5zIFNlbGVjdGVkXG4iOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlVzZSBPdGhlciAobm90IEFjY3VyYXRlKSBTY3JlZW5zIFNlbGVjdGVkXG4iOwogICAgICAgIH0KCiAgICAgICAgLy8gSW50ZXJwcmV0IFByaW50ZXIgRGVmYXVsdCBTY3JlZW5zCiAgICAgICAgaWYgKCAkSGFsZnRvbmVJbmZvWydEZWZhdWx0J10gPT0gMSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlVzZSBwcmludGVyknMgZGVmYXVsdCBzY3JlZW5zXG4iOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlVzZSBPdGhlciAobm90IFByaW50ZXIgRGVmYXVsdCkgU2NyZWVucyBTZWxlY3RlZFxuIjsKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiBUZXh0CiAgICAgICAgcmV0dXJuICRvdXRwdXRfc3RyOwoKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBHbG9iYWwgVmFyaWFibGU6ICAgICBJbnRlcnByZXRfSGFsZnRvbmUKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogR2xvYmFsIFZhcmlhYmxlOiAgICAgIFBob3Rvc2hvcF9JRF9OYW1lcwoqCiogQ29udGVudHM6ICAgICBUaGUgTmFtZXMgb2YgdGhlIFBob3Rvc2hvcCBJUkIgcmVzb3VyY2VzLCBpbmRleGVkIGJ5IHRoZWlyCiogICAgICAgICAgICAgICByZXNvdXJjZSBudW1iZXIKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgokR0xPQkFMU1sgIlBob3Rvc2hvcF9JRF9OYW1lcyIgXSA9IGFycmF5KAoweDAzRTggPT4gIk51bWJlciBvZiBjaGFubmVscywgcm93cywgY29sdW1ucywgZGVwdGgsIGFuZCBtb2RlLiAoT2Jzb2xldGUpIiwKMHgwM0U5ID0+ICJNYWNpbnRvc2ggcHJpbnQgbWFuYWdlciBpbmZvICIsCjB4MDNFQiA9PiAiSW5kZXhlZCBjb2xvciB0YWJsZSAoT2Jzb2xldGUpIiwKMHgwM0VEID0+ICJSZXNvbHV0aW9uIEluZm8iLAoweDAzRUUgPT4gIkFscGhhIENoYW5uZWwgTmFtZXMiLAoweDAzRUYgPT4gIkRpc3BsYXkgSW5mbyIsCjB4MDNGMCA9PiAiQ2FwdGlvbiBTdHJpbmciLAoweDAzRjEgPT4gIkJvcmRlciBpbmZvcm1hdGlvbiIsCjB4MDNGMiA9PiAiQmFja2dyb3VuZCBjb2xvciIsCjB4MDNGMyA9PiAiUHJpbnQgZmxhZ3MiLAoweDAzRjQgPT4gIkdyYXlzY2FsZSBhbmQgbXVsdGljaGFubmVsIGhhbGZ0b25pbmcgaW5mb3JtYXRpb24iLAoweDAzRjUgPT4gIkNvbG9yIGhhbGZ0b25pbmcgaW5mb3JtYXRpb24iLAoweDAzRjYgPT4gIkR1b3RvbmUgaGFsZnRvbmluZyBpbmZvcm1hdGlvbiIsCjB4MDNGNyA9PiAiR3JheXNjYWxlIGFuZCBtdWx0aWNoYW5uZWwgdHJhbnNmZXIgZnVuY3Rpb24iLAoweDAzRjggPT4gIkNvbG9yIHRyYW5zZmVyIGZ1bmN0aW9ucyIsCjB4MDNGOSA9PiAiRHVvdG9uZSB0cmFuc2ZlciBmdW5jdGlvbnMiLAoweDAzRkEgPT4gIkR1b3RvbmUgaW1hZ2UgaW5mb3JtYXRpb24iLAoweDAzRkIgPT4gIkJsYWNrIGFuZCB3aGl0ZSB2YWx1ZXMiLAoweDAzRkMgPT4gIk9ic29sZXRlIFJlc291cmNlLiIsCjB4MDNGRCA9PiAiRVBTIG9wdGlvbnMiLAoweDAzRkUgPT4gIlF1aWNrIE1hc2sgaW5mb3JtYXRpb24iLAoweDAzRkYgPT4gIk9ic29sZXRlIFJlc291cmNlIiwKMHgwNDAwID0+ICJMYXllciBzdGF0ZSBpbmZvcm1hdGlvbiIsCjB4MDQwMSA9PiAiV29ya2luZyBwYXRoIChub3Qgc2F2ZWQpIiwKMHgwNDAyID0+ICJMYXllcnMgZ3JvdXAgaW5mb3JtYXRpb24iLAoweDA0MDMgPT4gIk9ic29sZXRlIFJlc291cmNlIiwKMHgwNDA0ID0+ICJJUFRDLU5BQSByZWNvcmQiLAoweDA0MDUgPT4gIlJhdyBGb3JtYXQgSW1hZ2UgbW9kZSIsCjB4MDQwNiA9PiAiSlBFRyBxdWFsaXR5IiwKMHgwNDA4ID0+ICJHcmlkIGFuZCBndWlkZXMgaW5mb3JtYXRpb24iLAoweDA0MDkgPT4gIlRodW1ibmFpbCByZXNvdXJjZSIsCjB4MDQwQSA9PiAiQ29weXJpZ2h0IGZsYWciLAoweDA0MEIgPT4gIlVSTCIsCjB4MDQwQyA9PiAiVGh1bWJuYWlsIHJlc291cmNlIiwKMHgwNDBEID0+ICJHbG9iYWwgQW5nbGUiLAoweDA0MEUgPT4gIkNvbG9yIHNhbXBsZXJzIHJlc291cmNlIiwKMHgwNDBGID0+ICJJQ0MgUHJvZmlsZSIsCjB4MDQxMCA9PiAiV2F0ZXJtYXJrIiwKMHgwNDExID0+ICJJQ0MgVW50YWdnZWQiLAoweDA0MTIgPT4gIkVmZmVjdHMgdmlzaWJsZSIsCjB4MDQxMyA9PiAiU3BvdCBIYWxmdG9uZSIsCjB4MDQxNCA9PiAiRG9jdW1lbnQgU3BlY2lmaWMgSURzIiwKMHgwNDE1ID0+ICJVbmljb2RlIEFscGhhIE5hbWVzIiwKMHgwNDE2ID0+ICJJbmRleGVkIENvbG9yIFRhYmxlIENvdW50IiwKMHgwNDE3ID0+ICJUYW5zcGFyZW50IEluZGV4LiBJbmRleCBvZiB0cmFuc3BhcmVudCBjb2xvciwgaWYgYW55LiIsCjB4MDQxOSA9PiAiR2xvYmFsIEFsdGl0dWRlIiwKMHgwNDFBID0+ICJTbGljZXMiLAoweDA0MUIgPT4gIldvcmtmbG93IFVSTCIsCjB4MDQxQyA9PiAiSnVtcCBUbyBYUEVQIiwKMHgwNDFEID0+ICJBbHBoYSBJZGVudGlmaWVycyIsCjB4MDQxRSA9PiAiVVJMIExpc3QiLAoweDA0MjEgPT4gIlZlcnNpb24gSW5mbyIsCjB4MEJCNyA9PiAiTmFtZSBvZiBjbGlwcGluZyBwYXRoLiIsCjB4MjcxMCA9PiAiUHJpbnQgZmxhZ3MgaW5mb3JtYXRpb24iCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEdsb2JhbCBWYXJpYWJsZTogICAgIFBob3Rvc2hvcF9JRF9OYW1lcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEdsb2JhbCBWYXJpYWJsZTogICAgICBQaG90b3Nob3BfSURfRGVzY3JpcHRpb25zCioKKiBDb250ZW50czogICAgIFRoZSBEZXNjcmlwdGlvbnMgb2YgdGhlIFBob3Rvc2hvcCBJUkIgcmVzb3VyY2VzLCBpbmRleGVkIGJ5IHRoZWlyCiogICAgICAgICAgICAgICByZXNvdXJjZSBudW1iZXIKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgokR0xPQkFMU1sgIlBob3Rvc2hvcF9JRF9EZXNjcmlwdGlvbnMiIF0gPSBhcnJheSgKMHgwM0U4ID0+ICJPYnNvbGV0ZZdQaG90b3Nob3AgMi4wIG9ubHkuIG51bWJlciBvZiBjaGFubmVscywgcm93cywgY29sdW1ucywgZGVwdGgsIGFuZCBtb2RlLiIsCjB4MDNFOSA9PiAiT3B0aW9uYWwuIE1hY2ludG9zaCBwcmludCBtYW5hZ2VyIHByaW50IGluZm8gcmVjb3JkLiIsCjB4MDNFQiA9PiAiT2Jzb2xldGWXUGhvdG9zaG9wIDIuMCBvbmx5LiBDb250YWlucyB0aGUgaW5kZXhlZCBjb2xvciB0YWJsZS4iLAoweDAzRUQgPT4gIlJlc29sdXRpb25JbmZvIHN0cnVjdHVyZS4gU2VlIEFwcGVuZGl4IEEgaW4gUGhvdG9zaG9wIFNESyBHdWlkZS5wZGYiLAoweDAzRUUgPT4gIk5hbWVzIG9mIHRoZSBhbHBoYSBjaGFubmVscyBhcyBhIHNlcmllcyBvZiBQYXNjYWwgc3RyaW5ncy4iLAoweDAzRUYgPT4gIkRpc3BsYXlJbmZvIHN0cnVjdHVyZS4gU2VlIEFwcGVuZGl4IEEgaW4gUGhvdG9zaG9wIFNESyBHdWlkZS5wZGYiLAoweDAzRjAgPT4gIk9wdGlvbmFsLiBUaGUgY2FwdGlvbiBhcyBhIFBhc2NhbCBzdHJpbmcuIiwKMHgwM0YxID0+ICJCb3JkZXIgaW5mb3JtYXRpb24uIGJvcmRlciB3aWR0aCwgYm9yZGVyIHVuaXRzIiwKMHgwM0YyID0+ICJCYWNrZ3JvdW5kIGNvbG9yLiIsCjB4MDNGMyA9PiAiUHJpbnQgZmxhZ3MuIGxhYmVscywgY3JvcCBtYXJrcywgY29sb3IgYmFycywgcmVnaXN0cmF0aW9uIG1hcmtzLCBuZWdhdGl2ZSwgZmxpcCwgaW50ZXJwb2xhdGUsIGNhcHRpb24uIiwKMHgwM0Y0ID0+ICJHcmF5c2NhbGUgYW5kIG11bHRpY2hhbm5lbCBoYWxmdG9uaW5nIGluZm9ybWF0aW9uLiIsCjB4MDNGNSA9PiAiQ29sb3IgaGFsZnRvbmluZyBpbmZvcm1hdGlvbi4iLAoweDAzRjYgPT4gIkR1b3RvbmUgaGFsZnRvbmluZyBpbmZvcm1hdGlvbi4iLAoweDAzRjcgPT4gIkdyYXlzY2FsZSBhbmQgbXVsdGljaGFubmVsIHRyYW5zZmVyIGZ1bmN0aW9uLiIsCjB4MDNGOCA9PiAiQ29sb3IgdHJhbnNmZXIgZnVuY3Rpb25zLiIsCjB4MDNGOSA9PiAiRHVvdG9uZSB0cmFuc2ZlciBmdW5jdGlvbnMuIiwKMHgwM0ZBID0+ICJEdW90b25lIGltYWdlIGluZm9ybWF0aW9uLiIsCjB4MDNGQiA9PiAiRWZmZWN0aXZlIGJsYWNrIGFuZCB3aGl0ZSB2YWx1ZXMgZm9yIHRoZSBkb3QgcmFuZ2UuIiwKMHgwM0ZDID0+ICJPYnNvbGV0ZSBSZXNvdXJjZS4iLAoweDAzRkQgPT4gIkVQUyBvcHRpb25zLiIsCjB4MDNGRSA9PiAiUXVpY2sgTWFzayBpbmZvcm1hdGlvbi4gUXVpY2sgTWFzayBjaGFubmVsIElELCBNYXNrIGluaXRpYWxseSBlbXB0eS4iLAoweDAzRkYgPT4gIk9ic29sZXRlIFJlc291cmNlLiIsCjB4MDQwMCA9PiAiTGF5ZXIgc3RhdGUgaW5mb3JtYXRpb24uIEluZGV4IG9mIHRhcmdldCBsYXllci4iLAoweDA0MDEgPT4gIldvcmtpbmcgcGF0aCAobm90IHNhdmVkKS4iLAoweDA0MDIgPT4gIkxheWVycyBncm91cCBpbmZvcm1hdGlvbi4gR3JvdXAgSUQgZm9yIHRoZSBkcmFnZ2luZyBncm91cHMuIExheWVycyBpbiBhIGdyb3VwIGhhdmUgdGhlIHNhbWUgZ3JvdXAgSUQuIiwKMHgwNDAzID0+ICJPYnNvbGV0ZSBSZXNvdXJjZS4iLAoweDA0MDQgPT4gIklQVEMtTkFBIHJlY29yZC4gVGhpcyBjb250YWlucyB0aGUgRmlsZSBJbmZvLi4uIGluZm9ybWF0aW9uLiBTZWUgdGhlIElJTVY0LnBkZiBkb2N1bWVudC4iLAoweDA0MDUgPT4gIkltYWdlIG1vZGUgZm9yIHJhdyBmb3JtYXQgZmlsZXMuIiwKMHgwNDA2ID0+ICJKUEVHIHF1YWxpdHkuIFByaXZhdGUuIiwKMHgwNDA4ID0+ICJHcmlkIGFuZCBndWlkZXMgaW5mb3JtYXRpb24uIiwKMHgwNDA5ID0+ICJUaHVtYm5haWwgcmVzb3VyY2UuIiwKMHgwNDBBID0+ICJDb3B5cmlnaHQgZmxhZy4gQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW1hZ2UgaXMgY29weXJpZ2h0ZWQuIENhbiBiZSBzZXQgdmlhIFByb3BlcnR5IHN1aXRlIG9yIGJ5IHVzZXIgaW4gRmlsZSBJbmZvLi4uIiwKMHgwNDBCID0+ICJVUkwuIEhhbmRsZSBvZiBhIHRleHQgc3RyaW5nIHdpdGggdW5pZm9ybSByZXNvdXJjZSBsb2NhdG9yLiBDYW4gYmUgc2V0IHZpYSBQcm9wZXJ0eSBzdWl0ZSBvciBieSB1c2VyIGluIEZpbGUgSW5mby4uLiIsCjB4MDQwQyA9PiAiVGh1bWJuYWlsIHJlc291cmNlLiIsCjB4MDQwRCA9PiAiR2xvYmFsIEFuZ2xlLiBHbG9iYWwgbGlnaHRpbmcgYW5nbGUgZm9yIGVmZmVjdHMgbGF5ZXIuIiwKMHgwNDBFID0+ICJDb2xvciBzYW1wbGVycyByZXNvdXJjZS4iLAoweDA0MEYgPT4gIklDQyBQcm9maWxlLiBUaGUgcmF3IGJ5dGVzIG9mIGFuIElDQyBmb3JtYXQgcHJvZmlsZSwgc2VlIHRoZSBJQ0MzNC5wZGYgYW5kIElDQzM0LmggZmlsZXMgZnJvbSB0aGUgSW50ZXJuYXRpb24gQ29sb3IgQ29uc29ydGl1bS4iLAoweDA0MTAgPT4gIldhdGVybWFyay4iLAoweDA0MTEgPT4gIklDQyBVbnRhZ2dlZC4gRGlzYWJsZXMgYW55IGFzc3VtZWQgcHJvZmlsZSBoYW5kbGluZyB3aGVuIG9wZW5pbmcgdGhlIGZpbGUuIDEgPSBpbnRlbnRpb25hbGx5IHVudGFnZ2VkLiIsCjB4MDQxMiA9PiAiRWZmZWN0cyB2aXNpYmxlLiBTaG93L2hpZGUgYWxsIHRoZSBlZmZlY3RzIGxheWVyLiIsCjB4MDQxMyA9PiAiU3BvdCBIYWxmdG9uZS4gVmVyc2lvbiwgbGVuZ3RoLCB2YXJpYWJsZSBsZW5ndGggZGF0YS4iLAoweDA0MTQgPT4gIkRvY3VtZW50IHNwZWNpZmljIElEcyBmb3IgbGF5ZXIgaWRlbnRpZmljYXRpb24iLAoweDA0MTUgPT4gIlVuaWNvZGUgQWxwaGEgTmFtZXMuIExlbmd0aCBhbmQgdGhlIHN0cmluZyIsCjB4MDQxNiA9PiAiSW5kZXhlZCBDb2xvciBUYWJsZSBDb3VudC4gTnVtYmVyIG9mIGNvbG9ycyBpbiB0YWJsZSB0aGF0IGFyZSBhY3R1YWxseSBkZWZpbmVkIiwKMHgwNDE3ID0+ICJUcmFuc3BhcmVudCBJbmRleC4gSW5kZXggb2YgdHJhbnNwYXJlbnQgY29sb3IsIGlmIGFueS4iLAoweDA0MTkgPT4gIkdsb2JhbCBBbHRpdHVkZS4iLAoweDA0MUEgPT4gIlNsaWNlcy4iLAoweDA0MUIgPT4gIldvcmtmbG93IFVSTC4gTGVuZ3RoLCBzdHJpbmcuIiwKMHgwNDFDID0+ICJKdW1wIFRvIFhQRVAuIE1ham9yIHZlcnNpb24sIE1pbm9yIHZlcnNpb24sIENvdW50LiBUYWJsZSB3aGljaCBjYW4gaW5jbHVkZTogRGlydHkgZmxhZywgTW9kIGRhdGUuIiwKMHgwNDFEID0+ICJBbHBoYSBJZGVudGlmaWVycy4iLAoweDA0MUUgPT4gIlVSTCBMaXN0LiBDb3VudCBvZiBVUkxzLCBJRHMsIGFuZCBzdHJpbmdzIiwKMHgwNDIxID0+ICJWZXJzaW9uIEluZm8uIFZlcnNpb24sIEhhc1JlYWxNZXJnZWREYXRhLCBzdHJpbmcgb2Ygd3JpdGVyIG5hbWUsIHN0cmluZyBvZiByZWFkZXIgbmFtZSwgZmlsZSB2ZXJzaW9uLiIsCjB4MEJCNyA9PiAiTmFtZSBvZiBjbGlwcGluZyBwYXRoLiIsCjB4MjcxMCA9PiAiUHJpbnQgZmxhZ3MgaW5mb3JtYXRpb24uIFZlcnNpb24sIENlbnRlciBjcm9wIG1hcmtzLCBCbGVlZCB3aWR0aCB2YWx1ZSwgQmxlZWQgd2lkdGggc2NhbGUuIgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBHbG9iYWwgVmFyaWFibGU6ICAgICBQaG90b3Nob3BfSURfRGVzY3JpcHRpb25zCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgoKPz4=');
expand_3537250845($outputDir, 'includes/toolkit/Unicode.php', 'PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZpbGVuYW1lOiAgICAgVW5pY29kZS5waHAKKgoqIERlc2NyaXB0aW9uOiAgUHJvdmlkZXMgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBVbmljb2RlIHN0cmluZ3MgaW4gUEhQIHdpdGhvdXQKKiAgICAgICAgICAgICAgIG5lZWRpbmcgdG8gY29uZmlndXJlIHRoZSBub24tZGVmYXVsdCBtYnN0cmluZyBleHRlbnNpb24KKgoqIEF1dGhvcjogICAgICAgRXZhbiBIdW50ZXIKKgoqIERhdGU6ICAgICAgICAgMjcvNy8yMDA0CioKKiBQcm9qZWN0OiAgICAgIEpQRUcgTWV0YWRhdGEKKgoqIFJldmlzaW9uOiAgICAgMS4xMAoqCiogQ2hhbmdlczogICAgICAxLjAwIC0+IDEuMTAgOiBBZGRlZCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYXJ0X0hUTUxfRW50aXRpZXMKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYXJ0X2h0bWxzcGVjaWFsY2hhcnMKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxfVVRGMTZfVW5Fc2NhcGUKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxfVVRGOF9VbkVzY2FwZQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCBIVE1MX1VURjhfRXNjYXBlIGFuZCBIVE1MX1VURjE2X0VzY2FwZSB0bwoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHNtYXJ0X2h0bWxzcGVjaWFsY2hhcnMsIHNvIHRoYXQgY2hhcmFjdGVycyB3aGljaAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VyZSBhbHJlYWR5IGVzY2FwZWQgd291bGQgcmVtYWluIGludGFjdAoqCioKKiBVUkw6ICAgICAgICAgIGh0dHA6Ly9lbGVjdHJvbmljcy5vemhpa2VyLmNvbQoqCiogTGljZW5zZTogICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdC4KKgoqICAgICAgICAgICAgICAgVGhlIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbgoqICAgICAgICAgICAgICAgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQoqICAgICAgICAgICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiogICAgICAgICAgICAgICBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgoqICAgICAgICAgICAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKgoqICAgICAgICAgICAgICAgVGhlIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUKKiAgICAgICAgICAgICAgIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dAoqICAgICAgICAgICAgICAgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwoqICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQoqICAgICAgICAgICAgICAgZm9yIG1vcmUgZGV0YWlscy4KKgoqICAgICAgICAgICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiogICAgICAgICAgICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQ7IGlmIG5vdCwKKiAgICAgICAgICAgICAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQoqICAgICAgICAgICAgICAgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCioKKiAgICAgICAgICAgICAgIElmIHlvdSByZXF1aXJlIGEgZGlmZmVyZW50IGxpY2Vuc2UgZm9yIGNvbW1lcmNpYWwgb3Igb3RoZXIKKiAgICAgICAgICAgICAgIHB1cnBvc2VzLCBwbGVhc2UgY29udGFjdCB0aGUgYXV0aG9yOiBldmFuQG96aGlrZXIuY29tCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8vIFRPRE86IFVURi0xNiBmdW5jdGlvbnMgaGF2ZSBub3QgYmVlbiB0ZXN0ZWQgZnVsbHkKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogVW5pY29kZSBVVEYtOCBFbmNvZGluZyBGdW5jdGlvbnMKKgoqIERlc2NyaXB0aW9uOiAgVVRGLTggaXMgYSBVbmljb2RlIGVuY29kaW5nIHN5c3RlbSBpbiB3aGljaCBleHRlbmRlZCBjaGFyYWN0ZXJzCiogICAgICAgICAgICAgICB1c2Ugb25seSB0aGUgdXBwZXIgaGFsZiAoMTI4IHZhbHVlcykgb2YgdGhlIGJ5dGUgcmFuZ2UsIHRodXMgaXQKKiAgICAgICAgICAgICAgIGFsbG93cyB0aGUgdXNlIG9mIG5vcm1hbCA3LWJpdCBBU0NJSSB0ZXh0LgoqICAgICAgICAgICAgICAgNy1CaXQgQVNDSUkgd2lsbCBwYXNzIHN0cmFpZ2h0IHRocm91Z2ggVVRGLTggZW5jb2RpbmcvZGVjb2Rpbmcgd2l0aG91dCBjaGFuZ2UKKgoqCiogVGhlIGVuY29kaW5nIGlzIGFzIGZvbGxvd3M6CiogVW5pY29kZSBWYWx1ZSAgICAgICAgICA6ICBCaW5hcnkgcmVwcmVzZW50YXRpb24gKHg9ZGF0YSBiaXQpCiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoqIFUtMDAwMDAwMDAgLSBVLTAwMDAwMDdGOiAgMHh4eHh4eHggICAgICAgICAgICAgICAgICAgICAgPC0gVGhpcyBpcyA3LWJpdCBBU0NJSQoqIFUtMDAwMDAwODAgLSBVLTAwMDAwN0ZGOiAgMTEweHh4eHggMTB4eHh4eHgKKiBVLTAwMDAwODAwIC0gVS0wMDAwRkZGRjogIDExMTB4eHh4IDEweHh4eHh4IDEweHh4eHh4CiogVS0wMDAxMDAwMCAtIFUtMDAxRkZGRkY6ICAxMTExMHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eAoqIFUtMDAyMDAwMDAgLSBVLTAzRkZGRkZGOiAgMTExMTEweHggMTB4eHh4eHggMTB4eHh4eHggMTB4eHh4eHggMTB4eHh4eHgKKiBVLTA0MDAwMDAwIC0gVS03RkZGRkZGRjogIDExMTExMTB4IDEweHh4eHh4IDEweHh4eHh4IDEweHh4eHh4IDEweHh4eHh4IDEweHh4eHh4CiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIFVuaWNvZGUgVVRGLTE2IEVuY29kaW5nIEZ1bmN0aW9ucwoqCiogRGVzY3JpcHRpb246ICBVVEYtMTYgaXMgYSBVbmljb2RlIGVuY29kaW5nIHN5c3RlbSB1c2VzIDE2IGJpdCB2YWx1ZXMgZm9yIHJlcHJlc2VudGluZwoqICAgICAgICAgICAgICAgY2hhcmFjdGVycy4KKiAgICAgICAgICAgICAgIEl0IGFsc28gaGFzIGFuIGV4dGVuZGVkIHNldCBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBieSB0aGUgdXNlCiogICAgICAgICAgICAgICBvZiBzdXJyb2dhdGUgcGFpcnMsIHdoaWNoIGFyZSBhIHBhaXIgb2YgMTYgYml0IHZhbHVlcywgZ2l2aW5nIGEKKiAgICAgICAgICAgICAgIHRvdGFsIGRhdGEgbGVuZ3RoIG9mIDIwIHVzZWZ1bCBiaXRzLgoqCioKKiBUaGUgZW5jb2RpbmcgaXMgYXMgZm9sbG93czoKKiBVbmljb2RlIFZhbHVlICAgICAgICAgIDogIEJpbmFyeSByZXByZXNlbnRhdGlvbiAoeD1kYXRhIGJpdCkKKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiogVS0wMDAwMDAgLSBVLTAwRDdGRjogIHh4eHh4eHh4IHh4eHh4eHh4CiogVS0wMEQ4MDAgLSBVLTAwREJGRjogIE5vdCBhdmFpbGFibGUgLSB1c2VkIGZvciBoaWdoIHN1cnJvZ2F0ZSBwYWlycwoqIFUtMDBEQzAwIC0gVS0wMERGRkY6ICBOb3QgYXZhaWxhYmxlIC0gdXNlZCBmb3IgbG93IHN1cnJvZ2F0ZSBwYWlycwogIFUtMDBFMDAwIC0gVS0wMEZGRkY6ICB4eHh4eHh4eCB4eHh4eHh4eAoqIFUtMDEwMDAwIC0gVS0xMEZGRkY6ICAxMTAxMTB3dyB3d3h4eHh4eCAgMTEwMTExeHggeHh4eHh4eHggICAgICAoIHd3d3cgPSAodW5pLTB4MTAwMDApLzB4MTAwMDAgKQoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKgoqICBTdXJyb2dhdGUgcGFpciBDYWxjdWxhdGlvbnMKKgoqICAkaGkgPSAoJHVuaSAtIDB4MTAwMDApIC8gMHg0MDAgKyAweEQ4MDA7CiogICRsbyA9ICgkdW5pIC0gMHgxMDAwMCkgJSAweDQwMCArIDB4REMwMDsKKgoqCiogICR1bmkgPSAweDEwMDAwICsgKCRoaSAtIDB4RDgwMCkgKiAweDQwMCArICgkbG8gLSAweERDMDApOwoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIFVURjhfZml4CioKKiBEZXNjcmlwdGlvbjogIENoZWNrcyBhIHN0cmluZyBmb3IgYmFkbHkgZm9ybWVkIFVuaWNvZGUgVVRGLTggY29kaW5nIGFuZAoqICAgICAgICAgICAgICAgcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcgY29udGFpbmluZyBvbmx5IHRoZSBwYXJ0cyB3aGljaAoqICAgICAgICAgICAgICAgd2VyZSBwcm9wZXJseSBmb3JtZWQgVVRGLTggZGF0YS4KKgoqIFBhcmFtZXRlcnM6ICAgdXRmOF90ZXh0IC0gYSBzdHJpbmcgd2l0aCBwb3NzaWJseSBiYWRseSBmb3JtZWQgVVRGLTggZGF0YQoqCiogUmV0dXJuczogICAgICBvdXRwdXQgLSB0aGUgd2VsbCBmb3JtZWQgVVRGLTggdmVyc2lvbiBvZiB0aGUgc3RyaW5nCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gVVRGOF9maXgoICR1dGY4X3RleHQgKQp7CiAgICAgICAgLy8gSW5pdGlhbGlzZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nCiAgICAgICAgJHBvcyA9IDA7CgogICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyB0byBhY2NlcHQgdGhlIHdlbGwgZm9ybWVkIG91dHB1dAogICAgICAgICRvdXRwdXQgPSAiIiA7CgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBncm91cCBvZiBieXRlcywgZW5zdXJpbmcgdGhlIGNvZGluZyBpcyBjb3JyZWN0CiAgICAgICAgd2hpbGUgKCAkcG9zIDwgc3RybGVuKCAkdXRmOF90ZXh0ICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFJldHJlaXZlIHRoZSBjdXJyZW50IG51bWVyaWNhbCBjaGFyYWN0ZXIgdmFsdWUKICAgICAgICAgICAgICAgICRjaHZhbCA9IG9yZCgkdXRmOF90ZXh0eyRwb3N9KTsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgLSBpdCB3aWxsIHRlbGwgdXMgaG93IG1hbnkgYnl0ZXMgdGhlCiAgICAgICAgICAgICAgICAvLyBVbmljb2RlIHZhbHVlIGNvdmVycwoKICAgICAgICAgICAgICAgIGlmICggKCAkY2h2YWwgPj0gMHgwMCApICYmICggJGNodmFsIDw9IDB4N0YgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgQnl0ZSBVVEYtOCBVbmljb2RlICg3LUJpdCBBU0NJSSkgQ2hhcmFjdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICRieXRlcyA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICggKCAkY2h2YWwgPj0gMHhDMCApICYmICggJGNodmFsIDw9IDB4REYgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIgQnl0ZSBVVEYtOCBVbmljb2RlIENoYXJhY3RlcgogICAgICAgICAgICAgICAgICAgICAgICAkYnl0ZXMgPSAyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoICggJGNodmFsID49IDB4RTAgKSAmJiAoICRjaHZhbCA8PSAweEVGICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyAzIEJ5dGUgVVRGLTggVW5pY29kZSBDaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgJGJ5dGVzID0gMzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICRjaHZhbCA+PSAweEYwICkgJiYgKCAkY2h2YWwgPD0gMHhGNyApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gNCBCeXRlIFVURi04IFVuaWNvZGUgQ2hhcmFjdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICRieXRlcyA9IDQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICggKCAkY2h2YWwgPj0gMHhGOCApICYmICggJGNodmFsIDw9IDB4RkIgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDUgQnl0ZSBVVEYtOCBVbmljb2RlIENoYXJhY3RlcgogICAgICAgICAgICAgICAgICAgICAgICAkYnl0ZXMgPSA1OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoICggJGNodmFsID49IDB4RkMgKSAmJiAoICRjaHZhbCA8PSAweEZEICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyA2IEJ5dGUgVVRGLTggVW5pY29kZSBDaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgJGJ5dGVzID0gNjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBDb2RlIC0gc2tpcCBjaGFyYWN0ZXIgYW5kIGRvIG5vdGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgJGJ5dGVzID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgJHBvcysrOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCBkYXRhIHJlbWFpbmluZyB0byByZWFkCiAgICAgICAgICAgICAgICBpZiAoKCRwb3MgKyAkYnl0ZXMgLSAxKSA8IHN0cmxlbiggJHV0ZjhfdGV4dCApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNwZWNpZmllZCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weWluZyB0aGVtIHRvIHRoZSBvdXRwdXQgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggJGJ5dGVzID4gMCApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICR1dGY4X3RleHR7JHBvc307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBvcysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRieXRlcy0tOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQKICAgICAgICByZXR1cm4gJG91dHB1dDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIFVURjhfZml4CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBVVEYxNl9maXgKKgoqIERlc2NyaXB0aW9uOiAgQ2hlY2tzIGEgc3RyaW5nIGZvciBiYWRseSBmb3JtZWQgVW5pY29kZSBVVEYtMTYgY29kaW5nIGFuZAoqICAgICAgICAgICAgICAgcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcgY29udGFpbmluZyBvbmx5IHRoZSBwYXJ0cyB3aGljaAoqICAgICAgICAgICAgICAgd2VyZSBwcm9wZXJseSBmb3JtZWQgVVRGLTE2IGRhdGEuCioKKiBQYXJhbWV0ZXJzOiAgIHV0ZjE2X3RleHQgLSBhIHN0cmluZyB3aXRoIHBvc3NpYmx5IGJhZGx5IGZvcm1lZCBVVEYtMTYgZGF0YQoqICAgICAgICAgICAgICAgTVNCX2ZpcnN0IC0gVHJ1ZSB3aWxsIGNhdXNlIHByb2Nlc3NpbmcgYXMgQmlnIEVuZGlhbiBVVEYtMTYgKE1vdG9yb2xhLCBNU0IgZmlyc3QpCiogICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSB3aWxsIGNhdXNlIHByb2Nlc3NpbmcgYXMgTGl0dGxlIEVuZGlhbiBVVEYtMTYgKEludGVsLCBMU0IgZmlyc3QpCioKKiBSZXR1cm5zOiAgICAgIG91dHB1dCAtIHRoZSB3ZWxsIGZvcm1lZCBVVEYtMTYgdmVyc2lvbiBvZiB0aGUgc3RyaW5nCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gVVRGMTZfZml4KCAkdXRmMTZfdGV4dCwgJE1TQl9maXJzdCApCnsKICAgICAgICAvLyBJbml0aWFsaXNlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJpbmcKICAgICAgICAkcG9zID0gMDsKCiAgICAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHRvIGFjY2VwdCB0aGUgd2VsbCBmb3JtZWQgb3V0cHV0CiAgICAgICAgJG91dHB1dCA9ICIiIDsKCiAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCBlYWNoIGdyb3VwIG9mIGJ5dGVzLCBlbnN1cmluZyB0aGUgY29kaW5nIGlzIGNvcnJlY3QKICAgICAgICB3aGlsZSAoICRwb3MgPCBzdHJsZW4oICR1dGYxNl90ZXh0ICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFJldHJlaXZlIHRoZSBjdXJyZW50IG51bWVyaWNhbCBjaGFyYWN0ZXIgdmFsdWUKICAgICAgICAgICAgICAgICRjaHZhbDEgPSBvcmQoJHV0ZjE2X3RleHR7JHBvc30pOwoKICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciBjaGFyYWN0ZXIganVzdCByZWFkCiAgICAgICAgICAgICAgICAkcG9zKys7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW5vdGhlciBjaGFyYWN0ZXIgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICBpZiAoICRwb3MgIDwgc3RybGVuKCAkdXRmMTZfdGV4dCApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5vdGhlciBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlIC0gZ2V0IGl0IGZvciB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIFVURi0xNiB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAkY2h2YWwyID0gb3JkKCAkdXRmMTZfdGV4dHskcG9zfSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciAtIG5vIHNlY29uZCBieXRlIHRvIHRoaXMgVVRGLTE2IHZhbHVlIC0gZW5kIHByb2Nlc3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTa2lwIG92ZXIgY2hhcmFjdGVyIGp1c3QgcmVhZAogICAgICAgICAgICAgICAgJHBvcysrOwoKICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgMTYgYml0IHVuaWNvZGUgdmFsdWUKICAgICAgICAgICAgICAgIGlmICggJE1TQl9maXJzdCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpZyBFbmRpYW4KICAgICAgICAgICAgICAgICAgICAgICAgJFVURjE2X3ZhbCA9ICRjaHZhbDEgKiAweDEwMCArICRjaHZhbDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpdHRsZSBFbmRpYW4KICAgICAgICAgICAgICAgICAgICAgICAgJFVURjE2X3ZhbCA9ICRjaHZhbDIgKiAweDEwMCArICRjaHZhbDE7CiAgICAgICAgICAgICAgICB9CgoKCiAgICAgICAgICAgICAgICBpZiAoICggKCAkVVRGMTZfdmFsID49IDB4MDAwMCApICYmICggJFVURjE2X3ZhbCA8PSAweEQ3RkYgKSApIHx8CiAgICAgICAgICAgICAgICAgICAgICggKCAkVVRGMTZfdmFsID49IDB4RTAwMCApICYmICggJFVURjE2X3ZhbCA8PSAweEZGRkYgKSApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsIENoYXJhY3RlciAoTm9uIFN1cnJvZ2F0ZSBwYWlyKQogICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgaXQgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNociggJGNodmFsMSApIC4gY2hyICggJGNodmFsMiApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoICggJFVURjE2X3ZhbCA+PSAweEQ4MDAgKSAmJiAoICRVVEYxNl92YWwgPD0gMHhEQkZGICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBIaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHJlYWQgdGhlIGxvdyBzdXJyb2dhdGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW5vdGhlciAyIGNoYXJhY3RlcnMgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCAkcG9zICsgMyApIDwgc3RybGVuKCAkdXRmMTZfdGV4dCApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFub3RoZXIgMiBjaGFyYWN0ZXJzIGFyZSBhdmFpbGFibGUgLSBnZXQgdGhlbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaHZhbDMgPSBvcmQoICR1dGYxNl90ZXh0eyRwb3N9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNodmFsNCA9IG9yZCggJHV0ZjE2X3RleHR7JHBvcysxfSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHNlY29uZCAxNiBiaXQgdW5pY29kZSB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJE1TQl9maXJzdCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmlnIEVuZGlhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFVURjE2X3ZhbDIgPSAkY2h2YWwzICogMHgxMDAgKyAkY2h2YWw0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGl0dGxlIEVuZGlhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFVURjE2X3ZhbDIgPSAkY2h2YWw0ICogMHgxMDAgKyAkY2h2YWwzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGlzIGlzIGEgbG93IHN1cnJvZ2F0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCAkVVRGMTZfdmFsMiA+PSAweERDMDAgKSAmJiAoICRVVEYxNl92YWwyIDw9IDB4REZGRiApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb3cgc3Vycm9nYXRlIGZvdW5kIGZvbGxvd2luZyBoaWdoIHN1cnJvZ2F0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGJvdGggdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSBjaHIoICRjaHZhbDEgKSAuIGNociAoICRjaHZhbDIgKSAuIGNociggJGNodmFsMyApIC4gY2hyICggJGNodmFsNCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciB0aGUgbG93IHN1cnJvZ2F0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBvcyArPSAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG93IHN1cnJvZ2F0ZSBub3QgZm91bmQgYWZ0ZXIgaGlnaCBzdXJyb2dhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGFkZCBlaXRoZXIgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSB0aGUgSGlnaCBzdXJyb2dhdGUgaXMgc2tpcHBlZCBhbmQgcHJvY2Vzc2luZyBjb250aW51ZXMgYWZ0ZXIgaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVycm9yIC0gbm90IGVub3VnaCBkYXRhIGZvciBsb3cgc3Vycm9nYXRlIC0gZW5kIHByb2Nlc3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBMb3cgc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiAtIGl0IG1lYW5zIHRoaXMgaXMgYSBsb25lIGxvdyBzdXJyb2dhdGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9udCBhZGQgaXQgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0CiAgICAgICAgcmV0dXJuICRvdXRwdXQ7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBVVEYxNl9maXgKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgVVRGOF90b191bmljb2RlX2FycmF5CioKKiBEZXNjcmlwdGlvbjogIENvbnZlcnRzIGEgc3RyaW5nIGVuY29kZWQgd2l0aCBVbmljb2RlIFVURi04LCB0byBhbiBhcnJheSBvZgoqICAgICAgICAgICAgICAgbnVtYmVycyB3aGljaCByZXByZXNlbnQgdW5pY29kZSBjaGFyYWN0ZXIgbnVtYmVycwoqCiogUGFyYW1ldGVyczogICB1dGY4X3RleHQgLSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBVVEYtOCBkYXRhCioKKiBSZXR1cm5zOiAgICAgIG91dHB1dCAtIHRoZSBhcnJheSBjb250YWluaW5nIHRoZSB1bmljb2RlIGNoYXJhY3RlciBudW1iZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gVVRGOF90b191bmljb2RlX2FycmF5KCAkdXRmOF90ZXh0ICkKewogICAgICAgIC8vIENyZWF0ZSBhbiBhcnJheSB0byByZWNlaXZlIHRoZSB1bmljb2RlIGNoYXJhY3RlciBudW1iZXJzIG91dHB1dAogICAgICAgICRvdXRwdXQgPSBhcnJheSggKTsKCiAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgVVRGLTggc3RyaW5nCiAgICAgICAgZm9yICggJHBvcyA9IDA7ICRwb3MgPCBzdHJsZW4oICR1dGY4X3RleHQgKTsgJHBvcysrICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBSZXRyZWl2ZSB0aGUgY3VycmVudCBudW1lcmljYWwgY2hhcmFjdGVyIHZhbHVlCiAgICAgICAgICAgICAgICAkY2h2YWwgPSBvcmQoJHV0ZjhfdGV4dHskcG9zfSk7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIC0gaXQgd2lsbCB0ZWxsIHVzIGhvdyBtYW55IGJ5dGVzIHRoZQogICAgICAgICAgICAgICAgLy8gVW5pY29kZSB2YWx1ZSBjb3ZlcnMKCiAgICAgICAgICAgICAgICBpZiAoICggJGNodmFsID49IDB4MDAgKSAmJiAoICRjaHZhbCA8PSAweDdGICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyAxIEJ5dGUgVVRGLTggVW5pY29kZSAoNy1CaXQgQVNDSUkpIENoYXJhY3RlcgogICAgICAgICAgICAgICAgICAgICAgICAkYnl0ZXMgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0dmFsID0gJGNodmFsOyAgICAvLyBTaW5jZSA3LWJpdCBBU0NJSSBpcyB1bmFmZmVjdGVkLCB0aGUgb3V0cHV0IGVxdWFscyB0aGUgaW5wdXQKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICRjaHZhbCA+PSAweEMwICkgJiYgKCAkY2h2YWwgPD0gMHhERiApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gMiBCeXRlIFVURi04IFVuaWNvZGUKICAgICAgICAgICAgICAgICAgICAgICAgJGJ5dGVzID0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dHZhbCA9ICRjaHZhbCAmIDB4MUY7ICAgICAvLyBUaGUgZmlyc3QgYnl0ZSBpcyBiaXR3aXNlIEFORGVkIHdpdGggMHgxRiB0byByZW1vdmUgdGhlIGxlYWRpbmcgMTEwYgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoICggJGNodmFsID49IDB4RTAgKSAmJiAoICRjaHZhbCA8PSAweEVGICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyAzIEJ5dGUgVVRGLTggVW5pY29kZQogICAgICAgICAgICAgICAgICAgICAgICAkYnl0ZXMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0dmFsID0gJGNodmFsICYgMHgwRjsgICAgIC8vIFRoZSBmaXJzdCBieXRlIGlzIGJpdHdpc2UgQU5EZWQgd2l0aCAweDBGIHRvIHJlbW92ZSB0aGUgbGVhZGluZyAxMTEwYgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoICggJGNodmFsID49IDB4RjAgKSAmJiAoICRjaHZhbCA8PSAweEY3ICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyA0IEJ5dGUgVVRGLTggVW5pY29kZQogICAgICAgICAgICAgICAgICAgICAgICAkYnl0ZXMgPSA0OwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0dmFsID0gJGNodmFsICYgMHgwNzsgICAgIC8vIFRoZSBmaXJzdCBieXRlIGlzIGJpdHdpc2UgQU5EZWQgd2l0aCAweDA3IHRvIHJlbW92ZSB0aGUgbGVhZGluZyAxMTExMGIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICRjaHZhbCA+PSAweEY4ICkgJiYgKCAkY2h2YWwgPD0gMHhGQiApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gNSBCeXRlIFVURi04IFVuaWNvZGUKICAgICAgICAgICAgICAgICAgICAgICAgJGJ5dGVzID0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dHZhbCA9ICRjaHZhbCAmIDB4MDM7ICAgICAvLyBUaGUgZmlyc3QgYnl0ZSBpcyBiaXR3aXNlIEFORGVkIHdpdGggMHgwMyB0byByZW1vdmUgdGhlIGxlYWRpbmcgMTExMTEwYgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoICggJGNodmFsID49IDB4RkMgKSAmJiAoICRjaHZhbCA8PSAweEZEICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyA2IEJ5dGUgVVRGLTggVW5pY29kZQogICAgICAgICAgICAgICAgICAgICAgICAkYnl0ZXMgPSA2OwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0dmFsID0gJGNodmFsICYgMHgwMTsgICAgIC8vIFRoZSBmaXJzdCBieXRlIGlzIGJpdHdpc2UgQU5EZWQgd2l0aCAweDAxIHRvIHJlbW92ZSB0aGUgbGVhZGluZyAxMTExMTEwYgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIENvZGUgLSBkbyBub3RoaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICRieXRlcyA9IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJ5dGUgd2FzIHZhbGlkCiAgICAgICAgICAgICAgICBpZiAoICRieXRlcyAhPT0gMCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBieXRlIHdhcyB2YWxpZAoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIGRhdGEgbGVmdCBpbiB0aGUgVVRGLTggc3RyaW5nIHRvIGFsbG93IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRyaWV2YWwgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGlzIHVuaWNvZGUgY2hhcmFjdGVyCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHBvcyArICRieXRlcyAtIDEgPCBzdHJsZW4oICR1dGY4X3RleHQgKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgVVRGLTggc3RyaW5nIGlzIGxvbmcgZW5vdWdoCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtaW51cyB0aGUgZmlyc3Qgb25lIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gZG9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggJGJ5dGVzID4gMSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBvcysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJ5dGVzLS07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWFjaCByZW1haW5pbmcgYnl0ZSBpcyBjb2RlZCB3aXRoIDYgYml0cyBvZiBkYXRhIGFuZCAxMGIgb24gdGhlIGhpZ2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yZGVyIGJpdHMuIEhlbmNlIHdlIG5lZWQgdG8gc2hpZnQgbGVmdCBieSA2IGJpdHMgKDB4NDApIHRoZW4gYWRkIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBjaGFyYWNlciBhZnRlciBpdCBoYXMgYmVlbiBiaXR3aXNlIEFORGVkIHdpdGggMHgzRiB0byByZW1vdmUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoaWdoZXN0IHR3byBiaXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dHZhbCA9ICRvdXRwdXR2YWwqMHg0MCArICggKG9yZCgkdXRmOF90ZXh0eyRwb3N9KSkgJiAweDNGICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGNhbGN1bGF0ZWQgVW5pY29kZSBudW1iZXIgdG8gdGhlIG91dHB1dCBhcnJheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRbXSA9ICRvdXRwdXR2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBhcnJheQogICAgICAgIHJldHVybiAkb3V0cHV0Owp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgVVRGOF90b191bmljb2RlX2FycmF5CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIFVURjE2X3RvX3VuaWNvZGVfYXJyYXkKKgoqIERlc2NyaXB0aW9uOiAgQ29udmVydHMgYSBzdHJpbmcgZW5jb2RlZCB3aXRoIFVuaWNvZGUgVVRGLTE2LCB0byBhbiBhcnJheSBvZgoqICAgICAgICAgICAgICAgbnVtYmVycyB3aGljaCByZXByZXNlbnQgdW5pY29kZSBjaGFyYWN0ZXIgbnVtYmVycwoqCiogUGFyYW1ldGVyczogICB1dGYxNl90ZXh0IC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgVVRGLTE2IGRhdGEKKiAgICAgICAgICAgICAgIE1TQl9maXJzdCAtIFRydWUgd2lsbCBjYXVzZSBwcm9jZXNzaW5nIGFzIEJpZyBFbmRpYW4gVVRGLTE2IChNb3Rvcm9sYSwgTVNCIGZpcnN0KQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2Ugd2lsbCBjYXVzZSBwcm9jZXNzaW5nIGFzIExpdHRsZSBFbmRpYW4gVVRGLTE2IChJbnRlbCwgTFNCIGZpcnN0KQoqCiogUmV0dXJuczogICAgICBvdXRwdXQgLSB0aGUgYXJyYXkgY29udGFpbmluZyB0aGUgdW5pY29kZSBjaGFyYWN0ZXIgbnVtYmVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIFVURjE2X3RvX3VuaWNvZGVfYXJyYXkoICR1dGYxNl90ZXh0LCAkTVNCX2ZpcnN0ICkKewogICAgICAgIC8vIENyZWF0ZSBhbiBhcnJheSB0byByZWNlaXZlIHRoZSB1bmljb2RlIGNoYXJhY3RlciBudW1iZXJzIG91dHB1dAogICAgICAgICRvdXRwdXQgPSBhcnJheSggKTsKCgogICAgICAgIC8vIEluaXRpYWxpc2UgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0cmluZwogICAgICAgICRwb3MgPSAwOwoKICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggZ3JvdXAgb2YgYnl0ZXMsIGVuc3VyaW5nIHRoZSBjb2RpbmcgaXMgY29ycmVjdAogICAgICAgIHdoaWxlICggJHBvcyA8IHN0cmxlbiggJHV0ZjE2X3RleHQgKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gUmV0cmVpdmUgdGhlIGN1cnJlbnQgbnVtZXJpY2FsIGNoYXJhY3RlciB2YWx1ZQogICAgICAgICAgICAgICAgJGNodmFsMSA9IG9yZCgkdXRmMTZfdGV4dHskcG9zfSk7CgogICAgICAgICAgICAgICAgLy8gU2tpcCBvdmVyIGNoYXJhY3RlciBqdXN0IHJlYWQKICAgICAgICAgICAgICAgICRwb3MrKzsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIGNoYXJhY3RlciBhdmFpbGFibGUKICAgICAgICAgICAgICAgIGlmICggJHBvcyAgPCBzdHJsZW4oICR1dGYxNl90ZXh0ICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBbm90aGVyIGNoYXJhY3RlciBpcyBhdmFpbGFibGUgLSBnZXQgaXQgZm9yIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgVVRGLTE2IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICRjaHZhbDIgPSBvcmQoICR1dGYxNl90ZXh0eyRwb3N9ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVycm9yIC0gbm8gc2Vjb25kIGJ5dGUgdG8gdGhpcyBVVEYtMTYgdmFsdWUgLSBlbmQgcHJvY2Vzc2luZwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciBjaGFyYWN0ZXIganVzdCByZWFkCiAgICAgICAgICAgICAgICAkcG9zKys7CgogICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSAxNiBiaXQgdW5pY29kZSB2YWx1ZQogICAgICAgICAgICAgICAgaWYgKCAkTVNCX2ZpcnN0ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmlnIEVuZGlhbgogICAgICAgICAgICAgICAgICAgICAgICAkVVRGMTZfdmFsID0gJGNodmFsMSAqIDB4MTAwICsgJGNodmFsMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGl0dGxlIEVuZGlhbgogICAgICAgICAgICAgICAgICAgICAgICAkVVRGMTZfdmFsID0gJGNodmFsMiAqIDB4MTAwICsgJGNodmFsMTsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgaWYgKCAoICggJFVURjE2X3ZhbCA+PSAweDAwMDAgKSAmJiAoICRVVEYxNl92YWwgPD0gMHhEN0ZGICkgKSB8fAogICAgICAgICAgICAgICAgICAgICAoICggJFVURjE2X3ZhbCA+PSAweEUwMDAgKSAmJiAoICRVVEYxNl92YWwgPD0gMHhGRkZGICkgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbCBDaGFyYWN0ZXIgKE5vbiBTdXJyb2dhdGUgcGFpcikKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGl0IHRvIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dFtdID0gJFVURjE2X3ZhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICRVVEYxNl92YWwgPj0gMHhEODAwICkgJiYgKCAkVVRGMTZfdmFsIDw9IDB4REJGRiApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpcgogICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgd2UgbmVlZCB0byByZWFkIHRoZSBsb3cgc3Vycm9nYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFub3RoZXIgMiBjaGFyYWN0ZXJzIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggJHBvcyArIDMgKSA8IHN0cmxlbiggJHV0ZjE2X3RleHQgKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbm90aGVyIDIgY2hhcmFjdGVycyBhcmUgYXZhaWxhYmxlIC0gZ2V0IHRoZW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2h2YWwzID0gb3JkKCAkdXRmMTZfdGV4dHskcG9zfSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaHZhbDQgPSBvcmQoICR1dGYxNl90ZXh0eyRwb3MrMX0gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzZWNvbmQgMTYgYml0IHVuaWNvZGUgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRNU0JfZmlyc3QgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpZyBFbmRpYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRVVEYxNl92YWwyID0gJGNodmFsMyAqIDB4MTAwICsgJGNodmFsNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpdHRsZSBFbmRpYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRVVEYxNl92YWwyID0gJGNodmFsNCAqIDB4MTAwICsgJGNodmFsMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhpcyBpcyBhIGxvdyBzdXJyb2dhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggJFVURjE2X3ZhbDIgPj0gMHhEQzAwICkgJiYgKCAkVVRGMTZfdmFsMiA8PSAweERGRkYgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG93IHN1cnJvZ2F0ZSBmb3VuZCBmb2xsb3dpbmcgaGlnaCBzdXJyb2dhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBib3RoIHRvIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRbXSA9IDB4MTAwMDAgKyAoICggJFVURjE2X3ZhbCAtIDB4RDgwMCApICogMHg0MDAgKSArICggJFVURjE2X3ZhbDIgLSAweERDMDAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIG92ZXIgdGhlIGxvdyBzdXJyb2dhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwb3MgKz0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvdyBzdXJyb2dhdGUgbm90IGZvdW5kIGFmdGVyIGhpZ2ggc3Vycm9nYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBhZGQgZWl0aGVyIHRvIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBoaWdoIHN1cnJvZ2F0ZSBpcyBza2lwcGVkIGFuZCBwcm9jZXNzaW5nIGNvbnRpbnVlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IgLSBub3QgZW5vdWdoIGRhdGEgZm9yIGxvdyBzdXJyb2dhdGUgLSBlbmQgcHJvY2Vzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvdyBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpcgogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuIC0gaXQgbWVhbnMgdGhpcyBpcyBhIGxvbmUgbG93IHN1cnJvZ2F0ZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBhZGQgaXQgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0CiAgICAgICAgcmV0dXJuICRvdXRwdXQ7CgoKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIFVURjE2X3RvX3VuaWNvZGVfYXJyYXkKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICB1bmljb2RlX2FycmF5X3RvX1VURjgKKgoqIERlc2NyaXB0aW9uOiAgQ29udmVydHMgYW4gYXJyYXkgb2YgdW5pY29kZSBjaGFyYWN0ZXIgbnVtYmVycyB0byBhIHN0cmluZwoqICAgICAgICAgICAgICAgZW5jb2RlZCBieSBVVEYtOAoqCiogUGFyYW1ldGVyczogICB1bmljb2RlX2FycmF5IC0gdGhlIGFycmF5IGNvbnRhaW5pbmcgdW5pY29kZSBjaGFyYWN0ZXIgbnVtYmVycwoqCiogUmV0dXJuczogICAgICBvdXRwdXQgLSB0aGUgVVRGLTggZW5jb2RlZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkYXRhCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gdW5pY29kZV9hcnJheV90b19VVEY4KCAkdW5pY29kZV9hcnJheSApCnsKCiAgICAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHRvIHJlY2VpdmUgdGhlIFVURi04IG91dHB1dAogICAgICAgICRvdXRwdXQgPSAiIjsKCiAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCBlYWNoIFVuaWNvZGUgY2hhcmFjdGVyIG51bWJlcgogICAgICAgIGZvcmVhY2goICR1bmljb2RlX2FycmF5IGFzICR1bmljb2RlX2NoYXIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoaWNoIHJhbmdlIHRoZSBjdXJyZW50IHVuaWNvZGUgY2hhcmFjdGVyIGxpZXMgaW4KICAgICAgICAgICAgICAgIGlmICggKCAkdW5pY29kZV9jaGFyID49IDB4MDAgKSAmJiAoICR1bmljb2RlX2NoYXIgPD0gMHg3RiApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSBCeXRlIFVURi04IFVuaWNvZGUgKDctQml0IEFTQ0lJKSBDaGFyYWN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKCR1bmljb2RlX2NoYXIpOyAgICAgICAgICAvLyBPdXRwdXQgaXMgZXF1YWwgdG8gaW5wdXQgZm9yIDctYml0IEFTQ0lJCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICggKCAkdW5pY29kZV9jaGFyID49IDB4ODAgKSAmJiAoICR1bmljb2RlX2NoYXIgPD0gMHg3RkYgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIgQnl0ZSBVVEYtOCBVbmljb2RlIC0gYmluYXJ5IGVuY29kZSBkYXRhIGFzIDogMTEweHh4eHggMTB4eHh4eHgKCiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKDB4QzAgKyAoJHVuaWNvZGVfY2hhci8weDQwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKDB4ODAgKyAoJHVuaWNvZGVfY2hhciAmIDB4M0YpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICR1bmljb2RlX2NoYXIgPj0gMHg4MDAgKSAmJiAoICR1bmljb2RlX2NoYXIgPD0gMHhGRkZGICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyAzIEJ5dGUgVVRGLTggVW5pY29kZSAtIGJpbmFyeSBlbmNvZGUgZGF0YSBhcyA6IDExMTB4eHh4IDEweHh4eHh4IDEweHh4eHh4CgogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNocigweEUwICsgKCR1bmljb2RlX2NoYXIvMHgxMDAwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKDB4ODAgKyAoKCR1bmljb2RlX2NoYXIvMHg0MCkgJiAweDNGKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKDB4ODAgKyAoJHVuaWNvZGVfY2hhciAmIDB4M0YpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICR1bmljb2RlX2NoYXIgPj0gMHgxMDAwMCApICYmICggJHVuaWNvZGVfY2hhciA8PSAweDFGRkZGRiApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gNCBCeXRlIFVURi04IFVuaWNvZGUgLSBiaW5hcnkgZW5jb2RlIGRhdGEgYXMgOiAxMTExMHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eAoKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSBjaHIoMHhGMCArICgkdW5pY29kZV9jaGFyLzB4NDAwMDApKTsKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSBjaHIoMHg4MCArICgoJHVuaWNvZGVfY2hhci8weDEwMDApICYgMHgzRikpOwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNocigweDgwICsgKCgkdW5pY29kZV9jaGFyLzB4NDApICYgMHgzRikpOwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNocigweDgwICsgKCR1bmljb2RlX2NoYXIgJiAweDNGKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICggKCAkdW5pY29kZV9jaGFyID49IDB4MjAwMDAwICkgJiYgKCAkdW5pY29kZV9jaGFyIDw9IDB4M0ZGRkZGRiApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gNSBCeXRlIFVURi04IFVuaWNvZGUgLSBiaW5hcnkgZW5jb2RlIGRhdGEgYXMgOiAxMTExMTB4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eAoKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSBjaHIoMHhGOCArICgkdW5pY29kZV9jaGFyLzB4MTAwMDAwMCkpOwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNocigweDgwICsgKCgkdW5pY29kZV9jaGFyLzB4NDAwMDApICYgMHgzRikpOwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNocigweDgwICsgKCgkdW5pY29kZV9jaGFyLzB4MTAwMCkgJiAweDNGKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKDB4ODAgKyAoKCR1bmljb2RlX2NoYXIvMHg0MCkgJiAweDNGKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKDB4ODAgKyAoJHVuaWNvZGVfY2hhciAmIDB4M0YpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICR1bmljb2RlX2NoYXIgPj0gMHg0MDAwMDAwICkgJiYgKCAkdW5pY29kZV9jaGFyIDw9IDB4N0ZGRkZGRkYgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDYgQnl0ZSBVVEYtOCBVbmljb2RlIC0gYmluYXJ5IGVuY29kZSBkYXRhIGFzIDogMTExMTExMHggMTB4eHh4eHggMTB4eHh4eHggMTB4eHh4eHggMTB4eHh4eHggMTB4eHh4eHgKCiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKDB4RkMgKyAoJHVuaWNvZGVfY2hhci8weDQwMDAwMDAwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKDB4ODAgKyAoKCR1bmljb2RlX2NoYXIvMHgxMDAwMDAwKSAmIDB4M0YpKTsKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSBjaHIoMHg4MCArICgoJHVuaWNvZGVfY2hhci8weDQwMDAwKSAmIDB4M0YpKTsKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSBjaHIoMHg4MCArICgoJHVuaWNvZGVfY2hhci8weDEwMDApICYgMHgzRikpOwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNocigweDgwICsgKCgkdW5pY29kZV9jaGFyLzB4NDApICYgMHgzRikpOwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNocigweDgwICsgKCR1bmljb2RlX2NoYXIgJiAweDNGKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgQ29kZSAtIGRvIG5vdGhpbmcKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gcmVzdWx0aW5nIFVURi04IFN0cmluZwogICAgICAgIHJldHVybiAkb3V0cHV0Owp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgdW5pY29kZV9hcnJheV90b19VVEY4CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICB1bmljb2RlX2FycmF5X3RvX1VURjE2CioKKiBEZXNjcmlwdGlvbjogIENvbnZlcnRzIGFuIGFycmF5IG9mIHVuaWNvZGUgY2hhcmFjdGVyIG51bWJlcnMgdG8gYSBzdHJpbmcKKiAgICAgICAgICAgICAgIGVuY29kZWQgYnkgVVRGLTE2CioKKiBQYXJhbWV0ZXJzOiAgIHVuaWNvZGVfYXJyYXkgLSB0aGUgYXJyYXkgY29udGFpbmluZyB1bmljb2RlIGNoYXJhY3RlciBudW1iZXJzCiogICAgICAgICAgICAgICBNU0JfZmlyc3QgLSBUcnVlIHdpbGwgY2F1c2UgcHJvY2Vzc2luZyBhcyBCaWcgRW5kaWFuIFVURi0xNiAoTW90b3JvbGEsIE1TQiBmaXJzdCkKKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlIHdpbGwgY2F1c2UgcHJvY2Vzc2luZyBhcyBMaXR0bGUgRW5kaWFuIFVURi0xNiAoSW50ZWwsIExTQiBmaXJzdCkKKgoqIFJldHVybnM6ICAgICAgb3V0cHV0IC0gdGhlIFVURi0xNiBlbmNvZGVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRhdGEKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiB1bmljb2RlX2FycmF5X3RvX1VURjE2KCAkdW5pY29kZV9hcnJheSwgJE1TQl9maXJzdCApCnsKCiAgICAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHRvIHJlY2VpdmUgdGhlIFVURi0xNiBvdXRwdXQKICAgICAgICAkb3V0cHV0ID0gIiI7CgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBVbmljb2RlIGNoYXJhY3RlciBudW1iZXIKICAgICAgICBmb3JlYWNoKCAkdW5pY29kZV9hcnJheSBhcyAkdW5pY29kZV9jaGFyICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGljaCByYW5nZSB0aGUgY3VycmVudCB1bmljb2RlIGNoYXJhY3RlciBsaWVzIGluCiAgICAgICAgICAgICAgICBpZiAoICggKCAkdW5pY29kZV9jaGFyID49IDB4MDAwMCApICYmICggJHVuaWNvZGVfY2hhciA8PSAweEQ3RkYgKSApIHx8CiAgICAgICAgICAgICAgICAgICAgICggKCAkdW5pY29kZV9jaGFyID49IDB4RTAwMCApICYmICggJHVuaWNvZGVfY2hhciA8PSAweEZGRkYgKSApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsIDE2IEJpdCBDaGFyYWN0ZXIgIChOb3QgYSBTdXJyb2dhdGUgUGFpcikKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoYXQgYnl0ZSBvcmRlciBzaG91bGQgYmUgdXNlZAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRNU0JfZmlyc3QgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmlnIEVuZGlhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKCAkdW5pY29kZV9jaGFyIC8gMHgxMDAgKSAuIGNociggJHVuaWNvZGVfY2hhciAlIDB4MTAwICkgOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpdHRsZSBFbmRpYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNociggJHVuaWNvZGVfY2hhciAlIDB4MTAwICkgLiBjaHIoICR1bmljb2RlX2NoYXIgLyAweDEwMCApIDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICR1bmljb2RlX2NoYXIgPj0gMHgxMDAwMCApICYmICggJHVuaWNvZGVfY2hhciA8PSAweDEwRkZGRiApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3Vycm9nYXRlIFBhaXIgcmVxdWlyZWQKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBTdXJyb2dhdGVzCiAgICAgICAgICAgICAgICAgICAgICAgICRIaWdoX1N1cnJvZ2F0ZSA9ICggKCAkdW5pY29kZV9jaGFyIC0gMHgxMDAwMCApIC8gMHg0MDAgKSArIDB4RDgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgJExvd19TdXJyb2dhdGUgPSAoICggJHVuaWNvZGVfY2hhciAtIDB4MTAwMDAgKSAlIDB4NDAwICkgKyAweERDMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGF0IGJ5dGUgb3JkZXIgc2hvdWxkIGJlIHVzZWQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkTVNCX2ZpcnN0ICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpZyBFbmRpYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNociggJEhpZ2hfU3Vycm9nYXRlIC8gMHgxMDAgKSAuIGNociggJEhpZ2hfU3Vycm9nYXRlICUgMHgxMDAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGNociggJExvd19TdXJyb2dhdGUgLyAweDEwMCApIC4gY2hyKCAkTG93X1N1cnJvZ2F0ZSAlIDB4MTAwICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGl0dGxlIEVuZGlhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKCAkSGlnaF9TdXJyb2dhdGUgJSAweDEwMCApIC4gY2hyKCAkSGlnaF9TdXJyb2dhdGUgLyAweDEwMCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gY2hyKCAkTG93X1N1cnJvZ2F0ZSAlIDB4MTAwICkgLiBjaHIoICRMb3dfU3Vycm9nYXRlIC8gMHgxMDAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIFVURi0xNiBjb2RlcG9pbnQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pY29kZSB2YWx1ZSBzaG91bGQgbmV2ZXIgYmUgYmV0d2VlbiAweEQ4MDAgYW5kIDB4REZGRgogICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3Qgb3V0cHV0IHRoaXMgcG9pbnQgLSB0aGVyZSBpcyBubyB3YXkgdG8gZW5jb2RlIGl0IGluIFVURi0xNgogICAgICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiByZXN1bHRpbmcgVVRGLTE2IFN0cmluZwogICAgICAgIHJldHVybiAkb3V0cHV0Owp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgdW5pY29kZV9hcnJheV90b19VVEYxNgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICB4bWxfVVRGOF9jbGVhbgoqCiogRGVzY3JpcHRpb246ICBYTUwgaGFzIHNwZWNpZmljIHJlcXVpcmVtZW50cyBhYm91dCB0aGUgY2hhcmFjdGVycyB0aGF0IGFyZQoqICAgICAgICAgICAgICAgYWxsb3dlZCwgYW5kIGNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGVzY2FwZWQuCiogICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBhbGwgY2hhcmFjdGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nCiogICAgICAgICAgICAgICBhcmUgdmFsaWQsIGFuZCB0aGF0IGNoYXJhY3RlcnMgc3VjaCBhcyBRdW90ZXMsIEdyZWF0ZXIgdGhhbiwKKiAgICAgICAgICAgICAgIExlc3MgdGhhbiBhbmQgQW1wZXJzYW5kIGFyZSBwcm9wZXJseSBlc2NhcGVkLiBOZXdsaW5lcyBhbmQgVGFicwoqICAgICAgICAgICAgICAgYXJlIGFsc28gZXNjYXBlZC4KKiAgICAgICAgICAgICAgIE5vdGUgLSBEbyBub3QgdXNlIHRoaXMgb24gY29uc3RydWN0ZWQgWE1MIHdoaWNoIGluY2x1ZGVzIHRhZ3MsCiogICAgICAgICAgICAgICAgICAgICAgYXMgaXQgd2lsbCBlc2NhcGUgdGhlIHRhZ3MuIEl0IGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQKKiAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgdGFnIGFuZCBhdHRyaWJ1dGUgbmFtZXMsIGF0dHJpYnV0ZSB2YWx1ZXMsIGFuZCB0ZXh0LgoqCiogUGFyYW1ldGVyczogICB1dGY4X3RleHQgLSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBVVEYtOCBkYXRhCioKKiBSZXR1cm5zOiAgICAgIG91dHB1dCAtIHRoZSBhcnJheSBjb250YWluaW5nIHRoZSB1bmljb2RlIGNoYXJhY3RlciBudW1iZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24geG1sX1VURjhfY2xlYW4oICRVVEY4X3RleHQgKQp7CiAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIFVuaWNvZGUgVVRGOCBlbmNvZGluZyBpcyB2YWxpZC4KCiAgICAgICAgJFVURjhfdGV4dCA9IFVURjhfZml4KCAkVVRGOF90ZXh0ICk7CgoKICAgICAgICAvLyBYTUwgb25seSBhbGxvd3MgY2hhcmFjdGVycyBpbiB0aGUgZm9sbG93aW5nIHVuaWNvZGUgcmFuZ2VzCiAgICAgICAgLy8gI3g5IHwgI3hBIHwgI3hEIHwgWyN4MjAtI3hEN0ZGXSB8IFsjeEUwMDAtI3hGRkZEXSB8IFsjeDEwMDAwLSN4MTBGRkZGXQogICAgICAgIC8vIEhlbmNlIHdlIG5lZWQgdG8gZGVsZXRlIGFueSBjaGFyYWN0ZXJzIHRoYXQgZG9udCBmaXQgdGhpcwoKICAgICAgICAvLyBDb252ZXJ0IHRoZSBVVEYtOCBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgdW5pY29kZSBjaGFyYWN0ZXIgbnVtYmVycwogICAgICAgICR1bmljb2RlX2FycmF5ID0gVVRGOF90b191bmljb2RlX2FycmF5KCAkVVRGOF90ZXh0ICk7CgogICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB0byByZWNlaXZlIHRoZSB2YWxpZCB1bmljb2RlIGNoYXJhY3RlciBudW1iZXJzCiAgICAgICAgJG5ld191bmljb2RlX2FycmF5ID0gYXJyYXkoICk7CgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggdGhlIHVuaWNvZGUgY2hhcmFjdGVyIG51bWJlcnMKICAgICAgICBmb3JlYWNoKCAkdW5pY29kZV9hcnJheSBhcyAgJHVuaWNoYXIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB1bmljb2RlIGNoYXJhY3RlciBudW1iZXIgaXMgdmFsaWQgZm9yIFhNTAogICAgICAgICAgICAgICAgaWYgKCAoICR1bmljaGFyID09IDB4MDkgKSB8fAogICAgICAgICAgICAgICAgICAgICAoICR1bmljaGFyID09IDB4MEEgKSB8fAogICAgICAgICAgICAgICAgICAgICAoICR1bmljaGFyID09IDB4MEQgKSB8fAogICAgICAgICAgICAgICAgICAgICAoICggJHVuaWNoYXIgPj0gMHgyMCApICYmICggJHVuaWNoYXIgPD0gMHhEN0ZGICkgKSB8fAogICAgICAgICAgICAgICAgICAgICAoICggJHVuaWNoYXIgPj0gMHhFMDAwICkgJiYgKCAkdW5pY2hhciA8PSAweEZGRkQgKSApIHx8CiAgICAgICAgICAgICAgICAgICAgICggKCAkdW5pY2hhciA+PSAweDEwMDAwICkgJiYgKCAkdW5pY2hhciA8PSAweDEwRkZGRiApICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIC8vIFVuaWNvZGUgY2hhcmFjdGVyIGlzIHZhbGlkIGZvciBYTUwgLSBhZGQgaXQgdG8gdGhlIHZhbGlkIGNoYXJhY3RlcnMgYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAkbmV3X3VuaWNvZGVfYXJyYXlbXSA9ICR1bmljaGFyOwogICAgICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIC8vIENvbnZlcnQgdGhlIGFycmF5IG9mIHZhbGlkIHVuaWNvZGUgY2hhcmFjdGVyIG51bWJlcnMgYmFjayB0byBVVEYtOCBlbmNvZGVkIHRleHQKICAgICAgICAkVVRGOF90ZXh0ID0gdW5pY29kZV9hcnJheV90b19VVEY4KCAkbmV3X3VuaWNvZGVfYXJyYXkgKTsKCiAgICAgICAgLy8gRXNjYXBlIGFueSBzcGVjaWFsIEhUTUwgY2hhcmFjdGVycyBwcmVzZW50CiAgICAgICAgJFVURjhfdGV4dCA9ICBodG1sc3BlY2lhbGNoYXJzICggJFVURjhfdGV4dCwgRU5UX1FVT1RFUyApOwoKICAgICAgICAvLyBFc2NhcGUgQ1IsIExGIGFuZCBUQUIgY2hhcmFjdGVycywgc28gdGhhdCB0aGV5IGFyZSBrZXB0IGFuZCBub3QgdHJlYXRlZCBhcyBleHBlbmRhYmxlIHdoaXRlIHNwYWNlCiAgICAgICAgJHRyYW5zID0gYXJyYXkoICJceDA5IiA9PiAiJiN4MDk7IiwgIlx4MEEiID0+ICImI3gwQTsiLCAiXHgwRCIgPT4gIiYjeDBEOyIgKTsKICAgICAgICAkVVRGOF90ZXh0ID0gc3RydHIoICRVVEY4X3RleHQsICR0cmFucyApOwoKICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBYTUwgdmFsaWQgc3RyaW5nCiAgICAgICAgcmV0dXJuICRVVEY4X3RleHQ7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICB4bWxfVVRGOF9jbGVhbgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgeG1sX1VURjE2X2NsZWFuCioKKiBEZXNjcmlwdGlvbjogIFhNTCBoYXMgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGFib3V0IHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlCiogICAgICAgICAgICAgICBhbGxvd2VkLCBhbmQgY2hhcmFjdGVycyB0aGF0IG11c3QgYmUgZXNjYXBlZC4KKiAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBnaXZlbiBzdHJpbmcKKiAgICAgICAgICAgICAgIGFyZSB2YWxpZCwgYW5kIHRoYXQgY2hhcmFjdGVycyBzdWNoIGFzIFF1b3RlcywgR3JlYXRlciB0aGFuLAoqICAgICAgICAgICAgICAgTGVzcyB0aGFuIGFuZCBBbXBlcnNhbmQgYXJlIHByb3Blcmx5IGVzY2FwZWQuIE5ld2xpbmVzIGFuZCBUYWJzCiogICAgICAgICAgICAgICBhcmUgYWxzbyBlc2NhcGVkLgoqICAgICAgICAgICAgICAgTm90ZSAtIERvIG5vdCB1c2UgdGhpcyBvbiBjb25zdHJ1Y3RlZCBYTUwgd2hpY2ggaW5jbHVkZXMgdGFncywKKiAgICAgICAgICAgICAgICAgICAgICBhcyBpdCB3aWxsIGVzY2FwZSB0aGUgdGFncy4gSXQgaXMgZGVzaWduZWQgdG8gYmUgdXNlZAoqICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB0YWcgYW5kIGF0dHJpYnV0ZSBuYW1lcywgYXR0cmlidXRlIHZhbHVlcywgYW5kIHRleHQuCioKKiBQYXJhbWV0ZXJzOiAgIHV0ZjE2X3RleHQgLSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBVVEYtMTYgZGF0YQoqICAgICAgICAgICAgICAgTVNCX2ZpcnN0IC0gVHJ1ZSB3aWxsIGNhdXNlIHByb2Nlc3NpbmcgYXMgQmlnIEVuZGlhbiBVVEYtMTYgKE1vdG9yb2xhLCBNU0IgZmlyc3QpCiogICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSB3aWxsIGNhdXNlIHByb2Nlc3NpbmcgYXMgTGl0dGxlIEVuZGlhbiBVVEYtMTYgKEludGVsLCBMU0IgZmlyc3QpCioKKiBSZXR1cm5zOiAgICAgIG91dHB1dCAtIHRoZSBhcnJheSBjb250YWluaW5nIHRoZSB1bmljb2RlIGNoYXJhY3RlciBudW1iZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24geG1sX1VURjE2X2NsZWFuKCAkVVRGMTZfdGV4dCwgJE1TQl9maXJzdCApCnsKICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgVW5pY29kZSBVVEYxNiBlbmNvZGluZyBpcyB2YWxpZC4KCiAgICAgICAgJFVURjE2X3RleHQgPSBVVEYxNl9maXgoICRVVEYxNl90ZXh0LCAkTVNCX2ZpcnN0ICk7CgoKICAgICAgICAvLyBYTUwgb25seSBhbGxvd3MgY2hhcmFjdGVycyBpbiB0aGUgZm9sbG93aW5nIHVuaWNvZGUgcmFuZ2VzCiAgICAgICAgLy8gI3g5IHwgI3hBIHwgI3hEIHwgWyN4MjAtI3hEN0ZGXSB8IFsjeEUwMDAtI3hGRkZEXSB8IFsjeDEwMDAwLSN4MTBGRkZGXQogICAgICAgIC8vIEhlbmNlIHdlIG5lZWQgdG8gZGVsZXRlIGFueSBjaGFyYWN0ZXJzIHRoYXQgZG9udCBmaXQgdGhpcwoKICAgICAgICAvLyBDb252ZXJ0IHRoZSBVVEYtMTYgc3RyaW5nIHRvIGFuIGFycmF5IG9mIHVuaWNvZGUgY2hhcmFjdGVyIG51bWJlcnMKICAgICAgICAkdW5pY29kZV9hcnJheSA9IFVURjE2X3RvX3VuaWNvZGVfYXJyYXkoICRVVEYxNl90ZXh0LCAkTVNCX2ZpcnN0ICk7CgogICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB0byByZWNlaXZlIHRoZSB2YWxpZCB1bmljb2RlIGNoYXJhY3RlciBudW1iZXJzCiAgICAgICAgJG5ld191bmljb2RlX2FycmF5ID0gYXJyYXkoICk7CgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggdGhlIHVuaWNvZGUgY2hhcmFjdGVyIG51bWJlcnMKICAgICAgICBmb3JlYWNoKCAkdW5pY29kZV9hcnJheSBhcyAgJHVuaWNoYXIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB1bmljb2RlIGNoYXJhY3RlciBudW1iZXIgaXMgdmFsaWQgZm9yIFhNTAogICAgICAgICAgICAgICAgaWYgKCAoICR1bmljaGFyID09IDB4MDkgKSB8fAogICAgICAgICAgICAgICAgICAgICAoICR1bmljaGFyID09IDB4MEEgKSB8fAogICAgICAgICAgICAgICAgICAgICAoICR1bmljaGFyID09IDB4MEQgKSB8fAogICAgICAgICAgICAgICAgICAgICAoICggJHVuaWNoYXIgPj0gMHgyMCApICYmICggJHVuaWNoYXIgPD0gMHhEN0ZGICkgKSB8fAogICAgICAgICAgICAgICAgICAgICAoICggJHVuaWNoYXIgPj0gMHhFMDAwICkgJiYgKCAkdW5pY2hhciA8PSAweEZGRkQgKSApIHx8CiAgICAgICAgICAgICAgICAgICAgICggKCAkdW5pY2hhciA+PSAweDEwMDAwICkgJiYgKCAkdW5pY2hhciA8PSAweDEwRkZGRiApICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIC8vIFVuaWNvZGUgY2hhcmFjdGVyIGlzIHZhbGlkIGZvciBYTUwgLSBhZGQgaXQgdG8gdGhlIHZhbGlkIGNoYXJhY3RlcnMgYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAkbmV3X3VuaWNvZGVfYXJyYXlbXSA9ICR1bmljaGFyOwogICAgICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIC8vIENvbnZlcnQgdGhlIGFycmF5IG9mIHZhbGlkIHVuaWNvZGUgY2hhcmFjdGVyIG51bWJlcnMgYmFjayB0byBVVEYtMTYgZW5jb2RlZCB0ZXh0CiAgICAgICAgJFVURjE2X3RleHQgPSB1bmljb2RlX2FycmF5X3RvX1VURjE2KCAkbmV3X3VuaWNvZGVfYXJyYXksICRNU0JfZmlyc3QgKTsKCiAgICAgICAgLy8gRXNjYXBlIGFueSBzcGVjaWFsIEhUTUwgY2hhcmFjdGVycyBwcmVzZW50CiAgICAgICAgJFVURjE2X3RleHQgPSAgaHRtbHNwZWNpYWxjaGFycyAoICRVVEYxNl90ZXh0LCBFTlRfUVVPVEVTICk7CgogICAgICAgIC8vIEVzY2FwZSBDUiwgTEYgYW5kIFRBQiBjaGFyYWN0ZXJzLCBzbyB0aGF0IHRoZXkgYXJlIGtlcHQgYW5kIG5vdCB0cmVhdGVkIGFzIGV4cGVuZGFibGUgd2hpdGUgc3BhY2UKICAgICAgICAkdHJhbnMgPSBhcnJheSggIlx4MDkiID0+ICImI3gwOTsiLCAiXHgwQSIgPT4gIiYjeDBBOyIsICJceDBEIiA9PiAiJiN4MEQ7IiApOwogICAgICAgICRVVEYxNl90ZXh0ID0gc3RydHIoICRVVEYxNl90ZXh0LCAkdHJhbnMgKTsKCiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgWE1MIHZhbGlkIHN0cmluZwogICAgICAgIHJldHVybiAkVVRGMTZfdGV4dDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIHhtbF9VVEYxNl9jbGVhbgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgSFRNTF9VVEY4X0VzY2FwZQoqCiogRGVzY3JpcHRpb246ICBBIEhUTUwgcGFnZSBjYW4gZGlzcGxheSBVVEYtOCBkYXRhIHByb3Blcmx5IGlmIGl0IGhhcyBhCiogICAgICAgICAgICAgICBNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgdGFnIHdpdGggdGhlIGNvbnRlbnQgYXR0cmlidXRlCiogICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIHZhbHVlOiAiY2hhcnNldD11dGYtOCIuCiogICAgICAgICAgICAgICBPdGhlcndpc2UgdGhlIElTTy04ODU5LTEgY2hhcmFjdGVyIHNldCBpcyB1c3VhbGx5IGFzc3VtZWQsIGFuZAoqICAgICAgICAgICAgICAgVW5pY29kZSB2YWx1ZXMgYWJvdmUgMHg3RiBtdXN0IGJlIGVzY2FwZWQuCiogICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgVVRGLTggZW5jb2RlZCBzdHJpbmcgYW5kIGVzY2FwZXMgdGhlCiogICAgICAgICAgICAgICBjaGFyYWN0ZXJzIGFib3ZlIDB4N0YgYXMgd2VsbCBhcyByZXNlcnZlZCBIVE1MIGNoYXJhY3RlcnMgc3VjaAoqICAgICAgICAgICAgICAgYXMgUXVvdGVzLCBHcmVhdGVyIHRoYW4sIExlc3MgdGhhbiBhbmQgQW1wZXJzYW5kLgoqCiogUGFyYW1ldGVyczogICB1dGY4X3RleHQgLSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBVVEYtOCBkYXRhCioKKiBSZXR1cm5zOiAgICAgIGh0bWxvdXRwdXQgLSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBIVE1MIGVxdWl2YWxlbnQKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBIVE1MX1VURjhfRXNjYXBlKCAkVVRGOF90ZXh0ICkKewoKICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgVW5pY29kZSBVVEY4IGVuY29kaW5nIGlzIHZhbGlkLgogICAgICAgICRVVEY4X3RleHQgPSBVVEY4X2ZpeCggJFVURjhfdGV4dCApOwoKICAgICAgICAvLyBDaGFuZ2U6IGNoYW5nZWQgdG8gdXNlIHNtYXJ0X2h0bWxzcGVjaWFsY2hhcnMsIHNvIHRoYXQgY2hhcmFjdGVycyB3aGljaCB3ZXJlIGFscmVhZHkgZXNjYXBlZCB3b3VsZCByZW1haW4gaW50YWN0LCBhcyBvZiByZXZpc2lvbiAxLjEwCiAgICAgICAgLy8gRXNjYXBlIGFueSBzcGVjaWFsIEhUTUwgY2hhcmFjdGVycyBwcmVzZW50CiAgICAgICAgJFVURjhfdGV4dCA9ICBzbWFydF9odG1sc3BlY2lhbGNoYXJzKCAkVVRGOF90ZXh0LCBFTlRfUVVPVEVTICk7CgogICAgICAgIC8vIENvbnZlcnQgdGhlIFVURi04IHN0cmluZyB0byBhbiBhcnJheSBvZiB1bmljb2RlIGNoYXJhY3RlciBudW1iZXJzCiAgICAgICAgJHVuaWNvZGVfYXJyYXkgPSBVVEY4X3RvX3VuaWNvZGVfYXJyYXkoICRVVEY4X3RleHQgKTsKCiAgICAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHRvIHJlY2VpdmUgdGhlIGVzY2FwZWQgSFRNTAogICAgICAgICRodG1sb3V0cHV0ID0gIiI7CgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggdGhlIHVuaWNvZGUgY2hhcmFjdGVyIG51bWJlcnMKICAgICAgICBmb3JlYWNoKCAkdW5pY29kZV9hcnJheSBhcyAgJHVuaWNoYXIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBjaGFyYWN0ZXIgbmVlZHMgdG8gYmUgZXNjYXBlZAogICAgICAgICAgICAgICAgaWYgKCAoICR1bmljaGFyID49IDB4MDAgKSAmJiAoICR1bmljaGFyIDw9IDB4N0YgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYXJhY3RlciBpcyBsZXNzIHRoYW4gMHg3RiAtIGFkZCBpdCB0byB0aGUgaHRtbCBhcyBpcwogICAgICAgICAgICAgICAgICAgICAgICAkaHRtbG91dHB1dCAuPSBjaHIoICR1bmljaGFyICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYXJhY3RlciBpcyBncmVhdGVyIHRoYW4gMHg3RiAtIGVzY2FwZSBpdCBhbmQgYWRkIGl0IHRvIHRoZSBodG1sCiAgICAgICAgICAgICAgICAgICAgICAgICRodG1sb3V0cHV0IC49ICImI3giIC4gZGVjaGV4KCR1bmljaGFyKSAuICI7IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIGVzY2FwZWQgSFRNTAogICAgICAgIHJldHVybiAkaHRtbG91dHB1dDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIEhUTUxfVVRGOF9Fc2NhcGUKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIEhUTUxfVVRGOF9VbkVzY2FwZQoqCiogRGVzY3JpcHRpb246ICBDb252ZXJ0cyBIVE1MIHdoaWNoIGNvbnRhaW5zIGVzY2FwZWQgZGVjaW1hbCBvciBoZXggY2hhcmFjdGVycwoqICAgICAgICAgICAgICAgaW50byBVVEYtOCB0ZXh0CioKKiBQYXJhbWV0ZXJzOiAgIEhUTUxfdGV4dCAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEhUTUwgdGV4dCB0byBjb252ZXJ0CioKKiBSZXR1cm5zOiAgICAgIHV0Zm91dHB1dCAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVURi04IGVxdWl2YWxlbnQKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBIVE1MX1VURjhfVW5Fc2NhcGUoICRIVE1MX3RleHQgKQp7CiAgICAgICAgcHJlZ19tYXRjaF9hbGwoICIvXCZcIyhcZCspOy8iLCAkSFRNTF90ZXh0LCAkbWF0Y2hlcyk7CiAgICAgICAgcHJlZ19tYXRjaF9hbGwoICIvXCZcI1t4fFhdKFtBfEJ8Q3xEfEV8RnxhfGJ8Y3xkfGV8ZnwwLTldKyk7LyIsICRIVE1MX3RleHQsICRoZXhtYXRjaGVzKTsKICAgICAgICBmb3JlYWNoKCAkaGV4bWF0Y2hlc1sxXSBhcyAkaW5kZXggPT4gJG1hdGNoICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkbWF0Y2hlc1swXVtdID0gJGhleG1hdGNoZXNbMF1bJGluZGV4XTsKICAgICAgICAgICAgICAgICRtYXRjaGVzWzFdW10gPSBoZXhkZWMoICRtYXRjaCApOwogICAgICAgIH0KCiAgICAgICAgZm9yICggJGkgPSAwOyAkaSA8IGNvdW50KCAkbWF0Y2hlc1sgMCBdICk7ICRpKysgKQogICAgICAgIHsKICAgICAgICAgICAgICAgICR0cmFucyA9IGFycmF5KCAkbWF0Y2hlc1swXVskaV0gPT4gdW5pY29kZV9hcnJheV90b19VVEY4KCBhcnJheSggJG1hdGNoZXNbMV1bJGldICkgKSApOwoKICAgICAgICAgICAgICAgICRIVE1MX3RleHQgPSBzdHJ0ciggJEhUTUxfdGV4dCAsICR0cmFucyApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJEhUTUxfdGV4dDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIEhUTUxfVVRGOF9VbkVzY2FwZQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgSFRNTF9VVEYxNl9Fc2NhcGUKKgoqIERlc2NyaXB0aW9uOiAgQSBIVE1MIHBhZ2UgY2FuIGRpc3BsYXkgVVRGLTE2IGRhdGEgcHJvcGVybHkgaWYgaXQgaGFzIGEKKiAgICAgICAgICAgICAgIE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiB0YWcgd2l0aCB0aGUgY29udGVudCBhdHRyaWJ1dGUKKiAgICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgdmFsdWU6ICJjaGFyc2V0PXV0Zi0xNiIuCiogICAgICAgICAgICAgICBPdGhlcndpc2UgdGhlIElTTy04ODU5LTEgY2hhcmFjdGVyIHNldCBpcyB1c3VhbGx5IGFzc3VtZWQsIGFuZAoqICAgICAgICAgICAgICAgVW5pY29kZSB2YWx1ZXMgYWJvdmUgMHg3RiBtdXN0IGJlIGVzY2FwZWQuCiogICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgVVRGLTE2IGVuY29kZWQgc3RyaW5nIGFuZCBlc2NhcGVzIHRoZQoqICAgICAgICAgICAgICAgY2hhcmFjdGVycyBhYm92ZSAweDdGIGFzIHdlbGwgYXMgcmVzZXJ2ZWQgSFRNTCBjaGFyYWN0ZXJzIHN1Y2gKKiAgICAgICAgICAgICAgIGFzIFF1b3RlcywgR3JlYXRlciB0aGFuLCBMZXNzIHRoYW4gYW5kIEFtcGVyc2FuZC4KKgoqIFBhcmFtZXRlcnM6ICAgdXRmMTZfdGV4dCAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFVURi0xNiBkYXRhCiogICAgICAgICAgICAgICBNU0JfZmlyc3QgLSBUcnVlIHdpbGwgY2F1c2UgcHJvY2Vzc2luZyBhcyBCaWcgRW5kaWFuIFVURi0xNiAoTW90b3JvbGEsIE1TQiBmaXJzdCkKKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlIHdpbGwgY2F1c2UgcHJvY2Vzc2luZyBhcyBMaXR0bGUgRW5kaWFuIFVURi0xNiAoSW50ZWwsIExTQiBmaXJzdCkKKgoqIFJldHVybnM6ICAgICAgaHRtbG91dHB1dCAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEhUTUwgZXF1aXZhbGVudAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIEhUTUxfVVRGMTZfRXNjYXBlKCAkVVRGMTZfdGV4dCwgJE1TQl9maXJzdCApCnsKCiAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIFVuaWNvZGUgVVRGMTYgZW5jb2RpbmcgaXMgdmFsaWQuCiAgICAgICAgJFVURjE2X3RleHQgPSBVVEYxNl9maXgoICRVVEYxNl90ZXh0LCAkTVNCX2ZpcnN0ICk7CgogICAgICAgIC8vIENoYW5nZTogY2hhbmdlZCB0byB1c2Ugc21hcnRfaHRtbHNwZWNpYWxjaGFycywgc28gdGhhdCBjaGFyYWN0ZXJzIHdoaWNoIHdlcmUgYWxyZWFkeSBlc2NhcGVkIHdvdWxkIHJlbWFpbiBpbnRhY3QsIGFzIG9mIHJldmlzaW9uIDEuMTAKICAgICAgICAvLyBFc2NhcGUgYW55IHNwZWNpYWwgSFRNTCBjaGFyYWN0ZXJzIHByZXNlbnQKICAgICAgICAkVVRGMTZfdGV4dCA9ICBzbWFydF9odG1sc3BlY2lhbGNoYXJzKCAkVVRGMTZfdGV4dCApOwoKICAgICAgICAvLyBDb252ZXJ0IHRoZSBVVEYtMTYgc3RyaW5nIHRvIGFuIGFycmF5IG9mIHVuaWNvZGUgY2hhcmFjdGVyIG51bWJlcnMKICAgICAgICAkdW5pY29kZV9hcnJheSA9IFVURjE2X3RvX3VuaWNvZGVfYXJyYXkoICRVVEYxNl90ZXh0LCAkTVNCX2ZpcnN0ICk7CgogICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyB0byByZWNlaXZlIHRoZSBlc2NhcGVkIEhUTUwKICAgICAgICAkaHRtbG91dHB1dCA9ICIiOwoKICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIHRoZSB1bmljb2RlIGNoYXJhY3RlciBudW1iZXJzCiAgICAgICAgZm9yZWFjaCggJHVuaWNvZGVfYXJyYXkgYXMgICR1bmljaGFyICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgY2hhcmFjdGVyIG5lZWRzIHRvIGJlIGVzY2FwZWQKICAgICAgICAgICAgICAgIGlmICggKCAkdW5pY2hhciA+PSAweDAwICkgJiYgKCAkdW5pY2hhciA8PSAweDdGICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyYWN0ZXIgaXMgbGVzcyB0aGFuIDB4N0YgLSBhZGQgaXQgdG8gdGhlIGh0bWwgYXMgaXMKICAgICAgICAgICAgICAgICAgICAgICAgJGh0bWxvdXRwdXQgLj0gY2hyKCAkdW5pY2hhciApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyYWN0ZXIgaXMgZ3JlYXRlciB0aGFuIDB4N0YgLSBlc2NhcGUgaXQgYW5kIGFkZCBpdCB0byB0aGUgaHRtbAogICAgICAgICAgICAgICAgICAgICAgICAkaHRtbG91dHB1dCAuPSAiJiN4IiAuIGRlY2hleCgkdW5pY2hhcikgLiAiOyI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBlc2NhcGVkIEhUTUwKICAgICAgICByZXR1cm4gJGh0bWxvdXRwdXQ7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBIVE1MX1VURjE2X0VzY2FwZQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBIVE1MX1VURjE2X1VuRXNjYXBlCioKKiBEZXNjcmlwdGlvbjogIENvbnZlcnRzIEhUTUwgd2hpY2ggY29udGFpbnMgZXNjYXBlZCBkZWNpbWFsIG9yIGhleCBjaGFyYWN0ZXJzCiogICAgICAgICAgICAgICBpbnRvIFVURi0xNiB0ZXh0CioKKiBQYXJhbWV0ZXJzOiAgIEhUTUxfdGV4dCAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEhUTUwgdGV4dCB0byBiZSBjb252ZXJ0ZWQKKiAgICAgICAgICAgICAgIE1TQl9maXJzdCAtIFRydWUgd2lsbCBjYXVzZSBwcm9jZXNzaW5nIGFzIEJpZyBFbmRpYW4gVVRGLTE2IChNb3Rvcm9sYSwgTVNCIGZpcnN0KQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2Ugd2lsbCBjYXVzZSBwcm9jZXNzaW5nIGFzIExpdHRsZSBFbmRpYW4gVVRGLTE2IChJbnRlbCwgTFNCIGZpcnN0KQoqCiogUmV0dXJuczogICAgICB1dGZvdXRwdXQgLSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBVVEYtMTYgZXF1aXZhbGVudAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIEhUTUxfVVRGMTZfVW5Fc2NhcGUoICRIVE1MX3RleHQsICRNU0JfZmlyc3QgKQp7CiAgICAgICAgJHV0ZjhfdGV4dCA9IEhUTUxfVVRGOF9VbkVzY2FwZSggJEhUTUxfdGV4dCApOwoKICAgICAgICByZXR1cm4gdW5pY29kZV9hcnJheV90b19VVEYxNiggVVRGOF90b191bmljb2RlX2FycmF5KCAkdXRmOF90ZXh0ICksICRNU0JfZmlyc3QgKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIEhUTUxfVVRGMTZfVW5Fc2NhcGUKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBzbWFydF9IVE1MX0VudGl0aWVzCioKKiBEZXNjcmlwdGlvbjogIFBlcmZvcm1zIHRoZSBzYW1lIGZ1bmN0aW9uIGFzIEhUTUxfRW50aXRpZXMsIGJ1dCBsZWF2ZXMgZW50aXRpZXMKKiAgICAgICAgICAgICAgIHRoYXQgYXJlIGFscmVhZHkgZXNjYXBlZCBpbnRhY3QuCioKKiBQYXJhbWV0ZXJzOiAgIEhUTUxfdGV4dCAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEhUTUwgdGV4dCB0byBiZSBlc2NhcGVkCioKKiBSZXR1cm5zOiAgICAgIEhUTUxfdGV4dF9vdXQgLSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBlc2NhcGVkIEhUTUwgdGV4dAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHNtYXJ0X0hUTUxfRW50aXRpZXMoICRIVE1MX3RleHQgKQp7CiAgICAgICAgLy8gR2V0IGEgdGFibGUgY29udGFpbmluZyB0aGUgSFRNTCBlbnRpdGllcyB0cmFuc2xhdGlvbnMKICAgICAgICAkdHJhbnNsYXRpb25fdGFibGUgPSBnZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZSggSFRNTF9FTlRJVElFUyApOwoKICAgICAgICAvLyBDaGFuZ2UgdGhlIGFtcGVyc2FuZCB0byB0cmFuc2xhdGUgdG8gaXRzZWxmLCB0byBhdm9pZCBnZXR0aW5nICZhbXA7CiAgICAgICAgJHRyYW5zbGF0aW9uX3RhYmxlWyBjaHIoMzgpIF0gPSAnJic7CgogICAgICAgIC8vIFBlcmZvcm0gcmVwbGFjZW1lbnRzCiAgICAgICAgLy8gUmVndWxhciBleHByZXNzaW9uIHNheXM6IGZpbmQgYW4gYW1wZXJzYW5kLCBjaGVjayB0aGUgdGV4dCBhZnRlciBpdCwKICAgICAgICAvLyBpZiB0aGUgdGV4dCBhZnRlciBpdCBpcyBub3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcsIHRoZW4gcmVwbGFjZSB0aGUgYW1wZXJzYW5kCiAgICAgICAgLy8gd2l0aCAmYW1wOwogICAgICAgIC8vIGEpIGFueSBjb21iaW5hdGlvbiBvZiB1cCB0byA0IGxldHRlcnMgKHVwcGVyIG9yIGxvd2VyIGNhc2UpIHdpdGggYXQgbGVhc3QgMiBvciAzIG5vbiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIHRoZW4gYSBzZW1pY29sb24KICAgICAgICAvLyBiKSBhIGhhc2ggc3ltYm9sLCB0aGVuIGJldHdlZW4gMiBhbmQgNyBkaWdpdHMKICAgICAgICAvLyBjKSBhIGhhc2ggc3ltYm9sLCBhbiAneCcgY2hhcmFjdGVyLCB0aGVuIGJldHdlZW4gMiBhbmQgNyBkaWdpdHMKICAgICAgICAvLyBkKSBhIGhhc2ggc3ltYm9sLCBhbiAnWCcgY2hhcmFjdGVyLCB0aGVuIGJldHdlZW4gMiBhbmQgNyBkaWdpdHMKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlKCAiLyYoPyFbQS1aYS16XXswLDR9XHd7MiwzfTt8I1swLTldezIsN318I3hbMC05XXsyLDd9fCNYWzAtOV17Miw3fTspLyIsIiZhbXA7IiAsIHN0cnRyKCAkSFRNTF90ZXh0LCAkdHJhbnNsYXRpb25fdGFibGUgKSApOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgc21hcnRfSFRNTF9FbnRpdGllcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgc21hcnRfaHRtbHNwZWNpYWxjaGFycwoqCiogRGVzY3JpcHRpb246ICBQZXJmb3JtcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyBodG1sc3BlY2lhbGNoYXJzLCBidXQgbGVhdmVzIGNoYXJhY3RlcnMKKiAgICAgICAgICAgICAgIHRoYXQgYXJlIGFscmVhZHkgZXNjYXBlZCBpbnRhY3QuCioKKiBQYXJhbWV0ZXJzOiAgIEhUTUxfdGV4dCAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEhUTUwgdGV4dCB0byBiZSBlc2NhcGVkCioKKiBSZXR1cm5zOiAgICAgIEhUTUxfdGV4dF9vdXQgLSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBlc2NhcGVkIEhUTUwgdGV4dAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHNtYXJ0X2h0bWxzcGVjaWFsY2hhcnMoICRIVE1MX3RleHQgKQp7CiAgICAgICAgLy8gR2V0IGEgdGFibGUgY29udGFpbmluZyB0aGUgSFRNTCBzcGVjaWFsIGNoYXJhY3RlcnMgdHJhbnNsYXRpb25zCiAgICAgICAgJHRyYW5zbGF0aW9uX3RhYmxlPWdldF9odG1sX3RyYW5zbGF0aW9uX3RhYmxlIChIVE1MX1NQRUNJQUxDSEFSUyk7CgogICAgICAgIC8vIENoYW5nZSB0aGUgYW1wZXJzYW5kIHRvIHRyYW5zbGF0ZSB0byBpdHNlbGYsIHRvIGF2b2lkIGdldHRpbmcgJmFtcDsKICAgICAgICAkdHJhbnNsYXRpb25fdGFibGVbIGNocigzOCkgXSA9ICcmJzsKCiAgICAgICAgLy8gUGVyZm9ybSByZXBsYWNlbWVudHMKICAgICAgICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gc2F5czogZmluZCBhbiBhbXBlcnNhbmQsIGNoZWNrIHRoZSB0ZXh0IGFmdGVyIGl0LAogICAgICAgIC8vIGlmIHRoZSB0ZXh0IGFmdGVyIGl0IGlzIG5vdCBvbmUgb2YgdGhlIGZvbGxvd2luZywgdGhlbiByZXBsYWNlIHRoZSBhbXBlcnNhbmQKICAgICAgICAvLyB3aXRoICZhbXA7CiAgICAgICAgLy8gYSkgYW55IGNvbWJpbmF0aW9uIG9mIHVwIHRvIDQgbGV0dGVycyAodXBwZXIgb3IgbG93ZXIgY2FzZSkgd2l0aCBhdCBsZWFzdCAyIG9yIDMgbm9uIHdoaXRlc3BhY2UgY2hhcmFjdGVycywgdGhlbiBhIHNlbWljb2xvbgogICAgICAgIC8vIGIpIGEgaGFzaCBzeW1ib2wsIHRoZW4gYmV0d2VlbiAyIGFuZCA3IGRpZ2l0cwogICAgICAgIC8vIGMpIGEgaGFzaCBzeW1ib2wsIGFuICd4JyBjaGFyYWN0ZXIsIHRoZW4gYmV0d2VlbiAyIGFuZCA3IGRpZ2l0cwogICAgICAgIC8vIGQpIGEgaGFzaCBzeW1ib2wsIGFuICdYJyBjaGFyYWN0ZXIsIHRoZW4gYmV0d2VlbiAyIGFuZCA3IGRpZ2l0cwogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2UoICIvJig/IVtBLVphLXpdezAsNH1cd3syLDN9O3wjWzAtOV17Miw3fXwjeFswLTldezIsN318I1hbMC05XXsyLDd9OykvIiwiJmFtcDsiICwgc3RydHIoICRIVE1MX3RleHQsICR0cmFuc2xhdGlvbl90YWJsZSApICk7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBzbWFydF9odG1sc3BlY2lhbGNoYXJzCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgo/Pg==');
expand_3537250845($outputDir, 'includes/toolkit/XML.php', 'PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZpbGVuYW1lOiAgICAgWE1MLnBocAoqCiogRGVzY3JpcHRpb246ICBQcm92aWRlcyBmdW5jdGlvbnMgZm9yIHBhcnNpbmcgYW5kIGNvbnN0cnVjdGluZyBYTUwgaW5mb3JtYXRpb24KKgoqIEF1dGhvcjogICAgICAgRXZhbiBIdW50ZXIKKgoqIERhdGU6ICAgICAgICAgMjcvNy8yMDA0CioKKiBQcm9qZWN0OiAgICAgIEpQRUcgTWV0YWRhdGEKKgoqIFJldmlzaW9uOiAgICAgMS4xMAoqCiogQ2hhbmdlczogICAgICAxLjAwIC0+IDEuMTAgOiBDaGFuZ2VkIHJlYWRfeG1sX2FycmF5X2Zyb21fdGV4dCB0byBmaXggcHJvYmxlbSB0aGF0CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXVzZWQgdGhlIHdoaXRlc3BhY2UgKGVzcGVjaWFsbHkgbmV3bGluZXMpIHRvIGJlCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95ZWQgd2hlbiBjb252ZXJ0aW5nIHhtbCB0ZXh0IHRvIGFuIHhtbCBhcnJheQoqCiogVVJMOiAgICAgICAgICBodHRwOi8vZWxlY3Ryb25pY3Mub3poaWtlci5jb20KKgoqIExpY2Vuc2U6ICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUCBKUEVHIE1ldGFkYXRhIFRvb2xraXQuCioKKiAgICAgICAgICAgICAgIFRoZSBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4KKiAgICAgICAgICAgICAgIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKiAgICAgICAgICAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQoqICAgICAgICAgICAgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKiAgICAgICAgICAgICAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCioKKiAgICAgICAgICAgICAgIFRoZSBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlCiogICAgICAgICAgICAgICB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQKKiAgICAgICAgICAgICAgIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKKiAgICAgICAgICAgICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKiAgICAgICAgICAgICAgIGZvciBtb3JlIGRldGFpbHMuCioKKiAgICAgICAgICAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwoqICAgICAgICAgICAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0OyBpZiBub3QsCiogICAgICAgICAgICAgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKKiAgICAgICAgICAgICAgIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQoqCiogICAgICAgICAgICAgICBJZiB5b3UgcmVxdWlyZSBhIGRpZmZlcmVudCBsaWNlbnNlIGZvciBjb21tZXJjaWFsIG9yIG90aGVyCiogICAgICAgICAgICAgICBwdXJwb3NlcywgcGxlYXNlIGNvbnRhY3QgdGhlIGF1dGhvcjogZXZhbkBvemhpa2VyLmNvbQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmluY2x1ZGVfb25jZSAnVW5pY29kZS5waHAnOyAgICAgICAgICAvLyBVbmljb2RlIGlzIHJlcXVpcmVkIGFzIFhNTCBpcyBhbHdheXMgVW5pY29kZSBlbmNvZGVkCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICByZWFkX3htbF9hcnJheV9mcm9tX3RleHQKKgoqIERlc2NyaXB0aW9uOiAgUGFyc2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MLCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nCiogICAgICAgICAgICAgICB0cmVlIHN0cnVjdHVyZSBhcnJheSwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBYTUwgaW5mb3JtYXRpb24uCiogICAgICAgICAgICAgICBOb3RlOiBXaGl0ZSBzcGFjZSBhbmQgY29tbWVudHMgaW4gdGhlIFhNTCBhcmUgaWdub3JlZAoqICAgICAgICAgICAgICAgTm90ZTogQWxsIHRleHQgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSB0cmVlIHN0cnVjdHVyZQoqICAgICAgICAgICAgICAgICAgICAgaXMgZW5jb2RlZCBhcyBVbmljb2RlIFVURi04LiBIZW5jZSB0ZXh0IHdpbGwgYXBwZWFyIGFzCiogICAgICAgICAgICAgICAgICAgICBub3JtYWwgQVNDSUkgZXhjZXB0IHdoZXJlIHRoZXJlIGlzIGFuIGV4dGVuZGVkIGNoYXJhY3Rlci4KKgoqIFBhcmFtZXRlcnM6ICAgeG1sdGV4dCAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCB0byBiZSBwYXJzZWQKKgoqIFJldHVybnM6ICAgICAgb3V0cHV0IC0gdGhlIHRyZWUgc3RydWN0dXJlIGFycmF5IGNvbnRhaW5pbmcgdGhlIFhNTCBpbmZvcm1hdGlvbgoqICAgICAgICAgICAgICAgRkFMU0UgLSBpZiBhbiBlcnJvciBvY2N1cmVkCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gcmVhZF94bWxfYXJyYXlfZnJvbV90ZXh0KCAkeG1sdGV4dCApCnsKICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBhY3R1YWxseSBpcyBhbnkgdGV4dCB0byBwYXJzZQogICAgICAgIGlmICggdHJpbSggJHhtbHRleHQgKSA9PSAiIiApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KCiAgICAgICAgLy8gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgeG1sIHBhcnNlciB0byBwYXJzZSB0aGUgWE1MIHRleHQKICAgICAgICAkeG1sX3BhcnNlciA9IHhtbF9wYXJzZXJfY3JlYXRlKCAiVVRGLTgiICk7CgoKICAgICAgICAvLyBDaGFuZ2U6IEZpeGVkIHByb2JsZW0gdGhhdCBjYXVzZWQgdGhlIHdoaXRlc3BhY2UgKGVzcGVjaWFsbHkgbmV3bGluZXMpIHRvIGJlIGRlc3Ryb3llZCB3aGVuIGNvbnZlcnRpbmcgeG1sIHRleHQgdG8gYW4geG1sIGFycmF5LCBhcyBvZiByZXZpc2lvbiAxLjEwCgogICAgICAgIC8vIFdlIHdvdWxkIGxpa2UgdG8gcmVtb3ZlIHVubmVjY2Vzc2FyeSB3aGl0ZSBzcGFjZSwgYnV0IHRoaXMgd2lsbCBhbHNvCiAgICAgICAgLy8gcmVtb3ZlIHRoaW5ncyBsaWtlIG5ld2xpbmVzICgmI3hBOykgaW4gdGhlIFhNTCB2YWx1ZXMsIHNvIHdoaXRlIHNwYWNlCiAgICAgICAgLy8gd2lsbCBoYXZlIHRvIGJlIHJlbW92ZWQgbGF0ZXIKICAgICAgICBpZiAoIHhtbF9wYXJzZXJfc2V0X29wdGlvbigkeG1sX3BhcnNlcixYTUxfT1BUSU9OX1NLSVBfV0hJVEUsMCkgPT0gRkFMU0UgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEVycm9yIHNldHRpbmcgY2FzZSBmb2xkaW5nIC0gZGVzdHJveSB0aGUgcGFyc2VyIGFuZCByZXR1cm4KICAgICAgICAgICAgICAgIHhtbF9wYXJzZXJfZnJlZSgkeG1sX3BhcnNlcik7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKICAgICAgICAvLyB0byB1c2UgWE1MIGNvZGUgY29ycmVjdGx5IHdlIGhhdmUgdG8gdHVybiBjYXNlIGZvbGRpbmcKICAgICAgICAvLyAodXBwZXJjYXNpbmcpIG9mZi4gWE1MIGlzIGNhc2Ugc2Vuc2l0aXZlIGFuZCB1cHBlcgogICAgICAgIC8vIGNhc2luZyBpcyBpbiByZWFsaXR5IFhNTCBzdGFuZGFyZHMgdmlvbGF0aW9uCiAgICAgICAgaWYgKCB4bWxfcGFyc2VyX3NldF9vcHRpb24oJHhtbF9wYXJzZXIsWE1MX09QVElPTl9DQVNFX0ZPTERJTkcsMCkgPT0gRkFMU0UgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEVycm9yIHNldHRpbmcgY2FzZSBmb2xkaW5nIC0gZGVzdHJveSB0aGUgcGFyc2VyIGFuZCByZXR1cm4KICAgICAgICAgICAgICAgIHhtbF9wYXJzZXJfZnJlZSgkeG1sX3BhcnNlcik7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQoKICAgICAgICAvLyBQYXJzZSB0aGUgWE1MIHRleHQgaW50byBhIGFycmF5IHN0cnVjdHVyZQogICAgICAgIGlmICggeG1sX3BhcnNlX2ludG9fc3RydWN0KCR4bWxfcGFyc2VyLCAkeG1sdGV4dCwgJHZhbHMsICRpbmRleCkgPT0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gRXJyb3IgUGFyc2luZyBYTUwgLSBkZXN0cm95IHRoZSBwYXJzZXIgYW5kIHJldHVybgogICAgICAgICAgICAgICAgeG1sX3BhcnNlcl9mcmVlKCR4bWxfcGFyc2VyKTsKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CgogICAgICAgIC8vIERlc3Ryb3kgdGhlIHhtbCBwYXJzZXIKICAgICAgICB4bWxfcGFyc2VyX2ZyZWUoJHhtbF9wYXJzZXIpOwoKCiAgICAgICAgLy8gQ2hhbmdlOiBGaXhlZCBwcm9ibGVtIHRoYXQgY2F1c2VkIHRoZSB3aGl0ZXNwYWNlIChlc3BlY2lhbGx5IG5ld2xpbmVzKSB0byBiZSBkZXN0cm95ZWQgd2hlbiBjb252ZXJ0aW5nIHhtbCB0ZXh0IHRvIGFuIHhtbCBhcnJheSwgYXMgb2YgcmV2aXNpb24gMS4xMAoKICAgICAgICAvLyBTaW5jZSB0aGUgeG1sIHdhcyBwcm9jZXNzZWQgd2l0aCB3aGl0ZXNwYWNlIGVuYWJsZWQsIGl0IHdpbGwgaGF2ZSBtYW55IHZhbHVlcyB3aGljaCBhcmUKICAgICAgICAvLyBvbmx5IHdoaXRlc3BhY2UuIFRoZXNlIG5lZWQgdG8gYmUgcmVtb3ZlZCB0byBtYWtlIGEgc2Vuc2libGUgYXJyYXkuCgogICAgICAgICRuZXd2YWxzID0gYXJyYXkoICk7CgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBvZiB0aGUgaXRlbXMKICAgICAgICBmb3JlYWNoKCAkdmFscyBhcyAkdmFsbm8gPT4gJHZhbCApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGl0ZW0gaGFzIGEgd2hpdGVzcGFjZSBvbmx5IHZhbHVlLCByZW1vdmUgaXQKICAgICAgICAgICAgICAgIGlmICggKCBhcnJheV9rZXlfZXhpc3RzKCAndmFsdWUnLCAkdmFsICkgKSAmJiAodHJpbSggJHZhbFsgJ3ZhbHVlJyBdICkgPT0gIiIgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0KCAkdmFsWyAndmFsdWUnIF0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpdGVtIGhhcyBhIHZhbHVlICh3aGljaCB3aWxsIGJlIG5vbiBibGFuayBub3cpIG9yIGlzIG9mIHR5cGUgb3RoZXIgdGhhbiBjZGF0YSwgYWRkIGl0IHRvIHRoZSBuZXcgYXJyYXkKICAgICAgICAgICAgICAgIGlmICggKCAkdmFsWyAndHlwZScgXSAhPSAnY2RhdGEnICkgfHwgKCBhcnJheV9rZXlfZXhpc3RzKCAndmFsdWUnLCAkdmFsICkgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXd2YWxzW10gPSAkdmFsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIC8vIFRoZSB4bWxfcGFyc2VfaW50b19zdHJ1Y3QgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXQgdmVyc2lvbgogICAgICAgIC8vIG9mIHRoZSBYTUwgZGF0YSwgd2hlcmUgZWFjaCB0YWcgaGFzIGEgbGV2ZWwgbnVtYmVyIGF0dGFjaGVkLgogICAgICAgIC8vIFRoaXMgaXMgdmVyeSBkaWZmaWN1bHQgdG8gd29yayB3aXRoLCBzbyBpdCBuZWVkcyB0byBiZQogICAgICAgIC8vIGNvbnZlcnRlZCB0byBhIHRyZWUgc3RydWN0dXJlIGJlZm9yZSBiZWluZyByZXR1cm5lZAogICAgICAgIHJldHVybiB4bWxfZ2V0X2NoaWxkcmVuKCRuZXd2YWxzLCAkaT0wKTsKCn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICByZWFkX3htbF9hcnJheV9mcm9tX3RleHQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgd3JpdGVfeG1sX2FycmF5X3RvX3RleHQKKgoqIERlc2NyaXB0aW9uOiAgVGFrZXMgYSB0cmVlIHN0cnVjdHVyZSBhcnJheSAoaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHJldHVybmVkCiogICAgICAgICAgICAgICBieSByZWFkX3htbF9hcnJheV9mcm9tX3RleHQsIGFuZCBjb25zdHJ1Y3RzIGEgc3RyaW5nIGNvbnRhaW5pbmcKKiAgICAgICAgICAgICAgIHRoZSBlcXVpdmFsZW50IFhNTC4gVGhpcyBmdW5jdGlvbiBpcyByZWN1cnNpdmUsIGFuZCBwcm9kdWNlcwoqICAgICAgICAgICAgICAgWE1MIHdoaWNoIGhhcyBjb3JyZWN0IGluZGVudHMuCiogICAgICAgICAgICAgICBOb3RlOiBBbGwgdGV4dCBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIHRyZWUgc3RydWN0dXJlCiogICAgICAgICAgICAgICAgICAgICBjYW4gYmUgZWl0aGVyIDctYml0IEFTQ0lJIG9yIGVuY29kZWQgYXMgVW5pY29kZSBVVEYtOCwKKiAgICAgICAgICAgICAgICAgICAgIHNpbmNlIFVURi04IHBhc3NlcyA3LWJpdCBBU0NJSSB0ZXh0IHVuY2hhbmdlZC4KKgoqIFBhcmFtZXRlcnM6ICAgeG1sYXJyYXkgLSB0aGUgdHJlZSBzdHJ1Y3R1cmUgYXJyYXkgY29udGFpbmluZyB0aGUgaW5mb3JtYXRpb24gdG8KKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgY29udmVydGVkIHRvIFhNTAoqICAgICAgICAgICAgICAgaW5kZW50bGV2ZWwgLSB0aGUgaW5kZW50IGxldmVsIG9mIHRoZSB0b3AgbGV2ZWwgdGFncyAodXN1YWxseSB6ZXJvKQoqCiogUmV0dXJuczogICAgICBvdXRwdXQgLSB0aGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVxdWl2YWxlbnQgWE1MCiogICAgICAgICAgICAgICBGQUxTRSAtIGlmIGFuIGVycm9yIG9jY3VyZWQKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiB3cml0ZV94bWxfYXJyYXlfdG9fdGV4dCggJHhtbGFycmF5LCAkaW5kZW50bGV2ZWwgKQp7CiAgICAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHRvIHJlY2VpdmUgdGhlIFhNTAogICAgICAgICRvdXRwdXRfeG1sX3RleHQgPSAiIjsKCgogICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCB4bWwgZWxlbWVudCBhdCB0aGlzIGxldmVsCiAgICAgICAgZm9yZWFjaCAoJHhtbGFycmF5IGFzICR4bWxfZWxlbSkKICAgICAgICB7CgogICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBpbmRlbnQsIHRoZW4gdGhlIGNsZWFuZWQgdGFnIG5hbWUgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgJG91dHB1dF94bWxfdGV4dCAuPSBzdHJfcmVwZWF0ICggIiAiLCAkaW5kZW50bGV2ZWwgKSAuICI8IiAuIHhtbF9VVEY4X2NsZWFuKCAkeG1sX2VsZW1bJ3RhZyddICk7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBhdHRyaWJ1dGVzIGZvciB0aGlzIHRhZwogICAgICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2F0dHJpYnV0ZXMnLCR4bWxfZWxlbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBhdHRyaWJ1dGUgZm9yIHRoaXMgdGFnCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR4bWxfZWxlbVsnYXR0cmlidXRlcyddIGFzICAkeG1sX2F0dHJfbmFtZSA9PiAkeG1sX2F0dHJfdmFsKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBjbGVhbmVkIGF0dHJpYnV0ZSBuYW1lLCBhbmQgY2xlYW5lZCBhdHRyaWJ1dGUgdmFsdWUgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfeG1sX3RleHQgLj0gIiAiLiB4bWxfVVRGOF9jbGVhbiggJHhtbF9hdHRyX25hbWUgKSAuIiA9JyIgLiAgeG1sX1VURjhfY2xlYW4oICR4bWxfYXR0cl92YWwgKSAuIiciOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQWRkIHRoZSAnZ3JlYXRlci10aGFuJyB0byBjbG9zZSB0aGlzIHRhZyB0byB0aGUgb3V0cHV0CiAgICAgICAgICAgICAgICAkb3V0cHV0X3htbF90ZXh0IC49ICI+IjsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGVsZW1lbnQgaGFzIGFueSB0ZXh0IGluc2lkZSBpdC4KICAgICAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCd2YWx1ZScsJHhtbF9lbGVtKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIHRleHQgZm9yIHRoaXMgZWxlbWVudCAtIGNsZWFuIGl0IGFuZCBhZGQgaXQgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3htbF90ZXh0IC49ICB4bWxfVVRGOF9jbGVhbiggJHhtbF9lbGVtWyd2YWx1ZSddICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBsb3dlciBsZXZlbHMgY29udGFpbmVkIGJ5IHRoaXMgZWxlbWVudAogICAgICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2NoaWxkcmVuJywkeG1sX2VsZW0pICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHN1Yi1lbGVtZW50cyBmb3IgdGhpcyBlbGVtZW50CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSBuZXdsaW5lIHRvIHRoZSBvdXRwdXQsIHNvIHRoZSBzdWItZWxlbWVudHMgc3RhcnQgb24gYSBmcmVzaCBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfeG1sX3RleHQgLj0gIlxuIjsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgdGhpcyBmdW5jdGlvbiB0byBvdXRwdXQgdGhlIHN1Yi1lbGVtZW50cywgYW5kIGFkZCB0aGUgcmVzdWx0IHRvIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF94bWxfdGV4dCAuPSB3cml0ZV94bWxfYXJyYXlfdG9fdGV4dCggJHhtbF9lbGVtWydjaGlsZHJlbiddLCAkaW5kZW50bGV2ZWwgKyAxICk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYW4gaW5kZW50IHRvIHRoZSBvdXRwdXQgZm9yIHRoZSBjbG9zaW5nIHRhZywgc2luY2Ugd2UgYXJlIG9uIGEgbmV3IGxpbmUgZHVlIHRvIHRoZSBzdWItZWxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF94bWxfdGV4dCAuPSBzdHJfcmVwZWF0ICggIiAiLCAkaW5kZW50bGV2ZWwgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGNsZWFuZWQgY2xvc2luZyB0YWcgdG8gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgJG91dHB1dF94bWxfdGV4dCAuPSAiPC8iIC54bWxfVVRGOF9jbGVhbigkeG1sX2VsZW1bJ3RhZyddKSAuICI+XG4iOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIHRoZSBYTUwgdGV4dAogICAgICAgIHJldHVybiAkb3V0cHV0X3htbF90ZXh0Owp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgd3JpdGVfeG1sX2FycmF5X3RvX3RleHQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqICAgICAgICAgSU5URVJOQUwgRlVOQ1RJT05TCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBJbnRlcm5hbCBGdW5jdGlvbjogICAgIHhtbF9nZXRfY2hpbGRyZW4KKgoqIERlc2NyaXB0aW9uOiAgVXNlZCBieSB0aGUgcmVhZF94bWxfYXJyYXlfZnJvbV90ZXh0IGZ1bmN0aW9uLgoqICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSBjb252ZXJ0cyB0aGUgdmFsdWVzIHJldHJpZXZlZCBmcm9tCiogICAgICAgICAgICAgICB0aGUgeG1sX3BhcnNlX2ludG9fc3RydWN0IGZ1bmN0aW9uIGludG8gYSB0cmVlIHN0cnVjdHVyZSBhcnJheSwKKiAgICAgICAgICAgICAgIHdoaWNoIGlzIG11Y2ggbW9yZSB1c2VmdWwgYW5kIGVhc2llciB0byB1c2UuCioKKiBQYXJhbWV0ZXJzOiAgIGlucHV0X3htbF9hcnJheSAtIHRoZSBmbGF0IGFycmF5IG9mIFhNTCBlbGVtZW50cyByZXRyaWV2ZWQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20geG1sX3BhcnNlX2ludG9fc3RydWN0CiogICAgICAgICAgICAgICAkaXRlbV9udW0gLSB0aGUgbnVtYmVyIG9mIHRoZSBlbGVtZW50IGF0IHdoaWNoIHRoZSBjb252ZXJzaW9uCiogICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgc3RhcnQgKHVzdWFsbHkgemVybyB3aGVuIGNhbGxlZCBmcm9tIGFub3RoZXIKKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCB0aGlzIGlzIHVzZWQgZm9yIHJlY3Vyc2lvbikKKgoqIFJldHVybnM6ICAgICAgY2hpbGRyZW4gLSB0aGUgdHJlZSBzdHJ1Y3R1cmUgYXJyYXkgY29udGFpbmluZyBYTUwgZWxlbWVudHMKKiAgICAgICAgICAgICAgIEZBTFNFIC0gaWYgYW4gZXJyb3Igb2NjdXJlZAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHhtbF9nZXRfY2hpbGRyZW4oICYkaW5wdXRfeG1sX2FycmF5LCAmJGl0ZW1fbnVtICkKewoKICAgICAgICAvLyBNYWtlIGFuIGFycmF5IHRvIHJlY2VpdmUgdGhlIG91dHB1dCBYTUwgdHJlZSBzdHJ1Y3R1cmUKICAgICAgICAkY2hpbGRyZW4gPSBhcnJheSgpOwoKCiAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBpbnB1dCBYTUwgYXJyYXkKICAgICAgICB3aGlsZSAoICRpdGVtX251bSA8IGNvdW50KCAkaW5wdXRfeG1sX2FycmF5ICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBjdXJyZW50IGFycmF5IGVsZW1lbnQKICAgICAgICAgICAgICAgICR2ID0gJiRpbnB1dF94bWxfYXJyYXlbICRpdGVtX251bSsrIF07CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hhdCB0eXBlIG9mIFhNTCBhcnJheSBlbGVtZW50IHRoaXMgaXMsIGFuZCBwcm9jZXNzIGFjY29yZGluZ2x5CgogICAgICAgICAgICAgICAgc3dpdGNoICggJHZbJ3R5cGUnXSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NkYXRhJzogICAgIC8vIFRoaXMgaXMgYSBub24gcGFyc2VkIENoYXJhY3RlciBEYXRhIHRhZwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6ICAvLyBUaGlzIGlzIGEgcGFpciBvZiBYTUwgbWF0Y2hpbmcgdGFncyBwb3NzaWJseSB3aXRoIHRleHQgKGJ1dCBubyB0YWdzKSBpbnNpZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hpbGRyZW5bXSA9IHhtbF9nZXRfY2hpbGQoICR2ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvcGVuJzogICAgICAvLyBUaGlzIGlzIGEgc2luZ2xlIG9wZW5pbmcgdGFnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZ2V0IHRoZSBjaGlsZHJlbiBmb3IgdGhpcyBvcGVuaW5nIHRhZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGlsZHJlbltdID0geG1sX2dldF9jaGlsZCggJHYsIHhtbF9nZXRfY2hpbGRyZW4oICRpbnB1dF94bWxfYXJyYXksICRpdGVtX251bSApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgIC8vIFRoaXMgaXMgYSBzaW5nbGUgb3BlbmluZyB0YWcKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlJzogICAgIC8vIFRoaXMgaXMgYSBzaW5nbGUgY2xvc2luZyB0YWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayAyOyAgLy8gbGVhdmUgIndoaWxlIiBsb29wIChhbmQgdGhlIGZ1bmN0aW9uKQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHRzCiAgICAgICAgcmV0dXJuICRjaGlsZHJlbjsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIHhtbF9nZXRfY2hpbGRyZW4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEludGVybmFsIEZ1bmN0aW9uOiAgICAgeG1sX2dldF9jaGlsZAoqCiogRGVzY3JpcHRpb246ICBVc2VkIGJ5IHRoZSB4bWxfZ2V0X2NoaWxkcmVuIGZ1bmN0aW9uLgoqICAgICAgICAgICAgICAgVGFrZXMgYW4gZWxlbWVudCBmcm9tIGFuIGFycmF5IHByb3ZpZGVkIGJ5IHhtbF9wYXJzZV9pbnRvX3N0cnVjdAoqICAgICAgICAgICAgICAgYW5kIHJldHVybnMgYW4gZWxlbWVudCBmb3IgYSB0cmVlIHN0cnVjdHVyZSBhcnJheQoqCiogUGFyYW1ldGVyczogICBpbnB1dF94bWxfaXRlbSAtIHRoZSBpdGVtIGZyb20gdGhlIGFycmF5IHByb3ZpZGVkIGJ5IHhtbF9wYXJzZV9pbnRvX3N0cnVjdAoqICAgICAgICAgICAgICAgY2hpbGRyZW4gLSBhbiBhcnJheSBvZiBzdWItZWxlbWVudHMgdG8gYmUgYWRkZWQgdG8gdGhlIHRyZWUKKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlIGFycmF5LiBOdWxsIG9yIG1pc3NpbmcgdmFsdWUgaW5kaWNhdGUgbm8KKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViLWVsZW1lbnRzIGFyZSB0byBiZSBhZGRlZC4KKgoqIFJldHVybnM6ICAgICAgY2hpbGQgLSB0aGUgZWxlbWVudCBmb3IgYSB0cmVlIHN0cnVjdHVyZSBhcnJheQoqICAgICAgICAgICAgICAgRkFMU0UgLSBpZiBhbiBlcnJvciBvY2N1cmVkCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24geG1sX2dldF9jaGlsZCggJiRpbnB1dF94bWxfaXRlbSwgJGNoaWxkcmVuID0gTlVMTCApCnsKICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgdG8gcmVjZWl2ZSB0aGUgY2hpbGQgc3RydWN0dXJlCiAgICAgICAgJGNoaWxkID0gYXJyYXkoKTsKCiAgICAgICAgLy8gSWYgdGhlIGlucHV0IGl0ZW0gaGFzIHRoZSAndGFnJyBlbGVtZW50IHNldCwgY29weSBpdCB0byB0aGUgY2hpbGQKICAgICAgICBpZiAoIGlzc2V0KCAkaW5wdXRfeG1sX2l0ZW1bJ3RhZyddICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgICRjaGlsZFsndGFnJ10gPSAkaW5wdXRfeG1sX2l0ZW1bJ3RhZyddIDsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBpbnB1dCBpdGVtIGhhcyB0aGUgJ3ZhbHVlJyBlbGVtZW50IHNldCwgY29weSBpdCB0byB0aGUgY2hpbGQKICAgICAgICBpZiAoIGlzc2V0KCAkaW5wdXRfeG1sX2l0ZW1bJ3ZhbHVlJ10gKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJGNoaWxkWyd2YWx1ZSddID0gJGlucHV0X3htbF9pdGVtWyd2YWx1ZSddIDsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBpbnB1dCBpdGVtIGhhcyB0aGUgJ2F0dHJpYnV0ZXMnIGVsZW1lbnQgc2V0LCBjb3B5IGl0IHRvIHRoZSBjaGlsZAogICAgICAgIGlmICggaXNzZXQoICRpbnB1dF94bWxfaXRlbVsnYXR0cmlidXRlcyddICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgICRjaGlsZFsnYXR0cmlidXRlcyddID0gJGlucHV0X3htbF9pdGVtWydhdHRyaWJ1dGVzJ107CiAgICAgICAgfQoKICAgICAgICAvLyBJZiBjaGlsZHJlbiBoYXZlIGJlZW4gc3BlY2lmaWVkLCBhZGQgdGhlbSB0byB0aGUgY2hpbGQKICAgICAgICBpZiAoIGlzX2FycmF5KCAkY2hpbGRyZW4gKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJGNoaWxkWydjaGlsZHJlbiddID0gJGNoaWxkcmVuOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIHRoZSBjaGlsZCBzdHJ1Y3R1cmUKICAgICAgICByZXR1cm4gJGNoaWxkOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgeG1sX2dldF9jaGlsZHJlbgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgoKCgoKCj8+');
expand_3537250845($outputDir, 'includes/toolkit/XMP.php', 'PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZpbGVuYW1lOiAgICAgWE1QLnBocAoqCiogRGVzY3JpcHRpb246ICBQcm92aWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgaW5mb3JtYXRpb24gdG8vZnJvbQoqICAgICAgICAgICAgICAgdGhlICdBcHAgMScgRXh0ZW5zaWJsZSBNZXRhZGF0YSBQbGF0Zm9ybSAoWE1QKSBzZWdtZW50IG9mIEpQRUcKKiAgICAgICAgICAgICAgIGZvcm1hdCBmaWxlcy4gVGhpcyBYTVAgc2VnbWVudCBpcyBYTUwgYmFzZWQgYW5kIGNvbnRhaW5zIHRoZQoqICAgICAgICAgICAgICAgUmVzb3VyY2UgRGVzY3JpcHRpb24gRnJhbWV3b3JrIChSREYpIGRhdGEsIHdoaWNoIGl0c2VsZiBjYW4KKiAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIER1YmxpbiBDb3JlIE1ldGFkYXRhIEluaXRpYXRpdmUgKERDTUkpIGluZm9ybWF0aW9uLgoqCiogQXV0aG9yOiAgICAgICBFdmFuIEh1bnRlcgoqCiogRGF0ZTogICAgICAgICAyNy83LzIwMDQKKgoqIFByb2plY3Q6ICAgICAgSlBFRyBNZXRhZGF0YQoqCiogUmV2aXNpb246ICAgICAxLjEwCioKKiBDaGFuZ2VzOiAgICAgIDEuMDAgLT4gMS4wNCA6IGNoYW5nZWQgcHV0X0lQVEMgdG8gZml4IGEgYnVnIHByZXZlbnRpbmcgdGhlIGNvcnJlY3QKKiAgICAgICAgICAgICAgIGluc2VydGlvbiBvZiBhIFhNUCBibG9jayB3aGVyZSBub25lIGV4aXN0ZWQgcHJldmlvdXNseQoqCiogICAgICAgICAgICAgICAxLjA0IC0+IDEuMTAgOiBjaGFuZ2VkIHB1dF9YTVBfdGV4dCB0byBmaXggc29tZSBhcnJheSBpbmRleGVzIHdoaWNoIHdlcmUgbWlzc2luZyBxb3V0ZXMKKgoqIFVSTDogICAgICAgICAgaHR0cDovL2VsZWN0cm9uaWNzLm96aGlrZXIuY29tCioKKiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCBFdmFuIEh1bnRlciAyMDA0CioKKiBMaWNlbnNlOiAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0LgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuCiogICAgICAgICAgICAgICByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiogICAgICAgICAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKiAgICAgICAgICAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCiogICAgICAgICAgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZQoqICAgICAgICAgICAgICAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0CiogICAgICAgICAgICAgICBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiogICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiogICAgICAgICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgoqCiogICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKiAgICAgICAgICAgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdDsgaWYgbm90LAoqICAgICAgICAgICAgICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCiogICAgICAgICAgICAgICBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKgoqICAgICAgICAgICAgICAgSWYgeW91IHJlcXVpcmUgYSBkaWZmZXJlbnQgbGljZW5zZSBmb3IgY29tbWVyY2lhbCBvciBvdGhlcgoqICAgICAgICAgICAgICAgcHVycG9zZXMsIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6IGV2YW5Ab3poaWtlci5jb20KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgppbmNsdWRlX29uY2UgJ1hNTC5waHAnOwoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgZ2V0X1hNUF90ZXh0CioKKiBEZXNjcmlwdGlvbjogIFJldHJpZXZlcyB0aGUgRXh0ZW5zaWJsZSBNZXRhZGF0YSBQbGF0Zm9ybSAoWE1QKSBpbmZvcm1hdGlvbgoqICAgICAgICAgICAgICAgZnJvbSBhbiBBcHAxIEpQRUcgc2VnbWVudCBhbmQgcmV0dXJucyB0aGUgcmF3IFhNTCB0ZXh0IGFzIGEKKiAgICAgICAgICAgICAgIHN0cmluZy4gVGhpcyBpbmNsdWRlcyB0aGUgUmVzb3VyY2UgRGVzY3JpcHRpb24gRnJhbWV3b3JrIChSREYpCiogICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBhbmQgbWF5IGluY2x1ZGUgRHVibGluIENvcmUgTWV0YWRhdGEgSW5pdGlhdGl2ZSAoRENNSSkKKiAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLiBVc2VzIGluZm9ybWF0aW9uIHN1cHBsaWVkIGJ5IHRoZSBnZXRfanBlZ19oZWFkZXJfZGF0YQoqICAgICAgICAgICAgICAgZnVuY3Rpb24KKgoqIFBhcmFtZXRlcnM6ICAganBlZ19oZWFkZXJfZGF0YSAtIGEgSlBFRyBoZWFkZXIgZGF0YSBhcnJheSBpbiB0aGUgc2FtZSBmb3JtYXQKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBmcm9tIGdldF9qcGVnX2hlYWRlcl9kYXRhCioKKiBSZXR1cm5zOiAgICAgIHhtcF9kYXRhIC0gdGhlIHN0cmluZyBvZiByYXcgWE1MIHRleHQKKiAgICAgICAgICAgICAgIEZBTFNFIC0gaWYgYW4gQVBQIDEgWE1QIHNlZ21lbnQgY291bGQgbm90IGJlIGZvdW5kLAoqICAgICAgICAgICAgICAgICAgICAgICBvciBpZiBhbiBlcnJvciBvY2N1cmVkCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gZ2V0X1hNUF90ZXh0KCAkanBlZ19oZWFkZXJfZGF0YSApCnsKICAgICAgICAvL0N5Y2xlIHRocm91Z2ggdGhlIGhlYWRlciBzZWdtZW50cwogICAgICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCAkanBlZ19oZWFkZXJfZGF0YSApOyAkaSsrICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBmaW5kIGFuIEFQUDEgaGVhZGVyLAogICAgICAgICAgICAgICAgaWYgKCBzdHJjbXAgKCAkanBlZ19oZWFkZXJfZGF0YVskaV1bJ1NlZ05hbWUnXSwgIkFQUDEiICkgPT0gMCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZCBpZiBpdCBoYXMgdGhlIEFkb2JlIFhNUC9SREYgbGFiZWwgKGh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9ceDAwKSAsCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzdHJuY21wICggJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdEYXRhJ10sICJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvXHgwMCIsIDI5KSA9PSAwICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgWE1QL1JERiBibG9jawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgWE1QIHRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeG1wX2RhdGEgPSBzdWJzdHIgKCAkanBlZ19oZWFkZXJfZGF0YVskaV1bJ1NlZ0RhdGEnXSwgMjkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR4bXBfZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gRkFMU0U7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBnZXRfWE1QX3RleHQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBGdW5jdGlvbjogICAgIHB1dF9YTVBfdGV4dAoqCiogRGVzY3JpcHRpb246ICBBZGRzIG9yIG1vZGlmaWVzIHRoZSBFeHRlbnNpYmxlIE1ldGFkYXRhIFBsYXRmb3JtIChYTVApIGluZm9ybWF0aW9uCiogICAgICAgICAgICAgICBpbiBhbiBBcHAxIEpQRUcgc2VnbWVudC4gSWYgYSBYTVAgc2VnbWVudCBhbHJlYWR5IGV4aXN0cywgaXQgaXMKKiAgICAgICAgICAgICAgIHJlcGxhY2VkLCBvdGhlcndpc2UgYSBuZXcgb25lIGlzIGluc2VydGVkLCB1c2luZyB0aGUgc3VwcGxpZWQgZGF0YS4KKiAgICAgICAgICAgICAgIFVzZXMgaW5mb3JtYXRpb24gc3VwcGxpZWQgYnkgdGhlIGdldF9qcGVnX2hlYWRlcl9kYXRhIGZ1bmN0aW9uCioKKiBQYXJhbWV0ZXJzOiAgIGpwZWdfaGVhZGVyX2RhdGEgLSBhIEpQRUcgaGVhZGVyIGRhdGEgYXJyYXkgaW4gdGhlIHNhbWUgZm9ybWF0CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZnJvbSBnZXRfanBlZ19oZWFkZXJfZGF0YQoqICAgICAgICAgICAgICAgbmV3WE1QIC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgWE1QIHRleHQgdG8gYmUgc3RvcmVkIGluIHRoZSBYTVAKKiAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQuIFNob3VsZCBiZSBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgd3JpdGVfWE1QX2FycmF5X3RvX3RleHQKKiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uCioKKiBSZXR1cm5zOiAgICAgIGpwZWdfaGVhZGVyX2RhdGEgLSB0aGUgSlBFRyBoZWFkZXIgZGF0YSBhcnJheSB3aXRoIHRoZQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNUCBzZWdtZW50IGFkZGVkLgoqICAgICAgICAgICAgICAgRkFMU0UgLSBpZiBhbiBlcnJvciBvY2N1cmVkCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gcHV0X1hNUF90ZXh0KCAkanBlZ19oZWFkZXJfZGF0YSwgJG5ld1hNUCApCnsKICAgICAgICAvL0N5Y2xlIHRocm91Z2ggdGhlIGhlYWRlciBzZWdtZW50cwogICAgICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCAkanBlZ19oZWFkZXJfZGF0YSApOyAkaSsrICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBmaW5kIGFuIEFQUDEgaGVhZGVyLAogICAgICAgICAgICAgICAgaWYgKCBzdHJjbXAgKCAkanBlZ19oZWFkZXJfZGF0YVskaV1bJ1NlZ05hbWUnXSwgIkFQUDEiICkgPT0gMCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZCBpZiBpdCBoYXMgdGhlIEFkb2JlIFhNUC9SREYgbGFiZWwgKGh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9ceDAwKSAsCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzdHJuY21wICggJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdEYXRhJ10sICJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvXHgwMCIsIDI5KSA9PSAwICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgcHJlZXhpc3RpbmcgWE1QL1JERiBibG9jayAtIFJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IG9uZSBhbmQgcmV0dXJuLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqcGVnX2hlYWRlcl9kYXRhWyRpXVsnU2VnRGF0YSddID0gImh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9ceDAwIiAuICRuZXdYTVA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRqcGVnX2hlYWRlcl9kYXRhOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBObyBwcmUtZXhpc3RpbmcgWE1QL1JERiBmb3VuZCAtIGluc2VydCBhIG5ldyBvbmUgYWZ0ZXIgYW55IHByZS1leGlzdGluZyBBUFAwIG9yIEFQUDEgYmxvY2tzCiAgICAgICAgLy8gQ2hhbmdlOiBjaGFuZ2VkIHRvIGluaXRpYWxpc2UgJGkgcHJvcGVybHkgYXMgb2YgcmV2aXNpb24gMS4wNAogICAgICAgICRpID0gMDsKICAgICAgICAvLyBMb29wIHVudGlsIGEgYmxvY2sgaXMgZm91bmQgdGhhdCBpc24ndCBhbiBBUFAwIG9yIEFQUDEKICAgICAgICB3aGlsZSAoICggJGpwZWdfaGVhZGVyX2RhdGFbJGldWydTZWdOYW1lJ10gPT0gIkFQUDAiICkgfHwgKCAkanBlZ19oZWFkZXJfZGF0YVskaV1bJ1NlZ05hbWUnXSA9PSAiQVBQMSIgKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CgoKCiAgICAgICAgLy8gSW5zZXJ0IGEgbmV3IFhNUC9SREYgQVBQMSBzZWdtZW50IGF0IHRoZSBzcGVjaWZpZWQgcG9pbnQuCiAgICAgICAgLy8gQ2hhbmdlOiBjaGFuZ2VkIHRvIHByb3Blcmx5IGNvbnN0cnVjdCBhcnJheSBlbGVtZW50IGFzIG9mIHJldmlzaW9uIDEuMDQgLSByZXF1aXJlcyB0d28gYXJyYXkgc3RhdGVtZW50cyBub3Qgb25lLCByZXF1aXJlcyBpbnNlcnRpb24gYXQgJGksIG5vdCAkaSAtIDEKICAgICAgICBhcnJheV9zcGxpY2UoJGpwZWdfaGVhZGVyX2RhdGEsICRpLCAwLCBhcnJheSggYXJyYXkoICAgICAgICJTZWdUeXBlIiA9PiAweEUxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VnTmFtZSIgPT4gIkFQUDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VnRGVzYyIgPT4gJEdMT0JBTFNbICJKUEVHX1NlZ21lbnRfRGVzY3JpcHRpb25zIiBdWyAweEUxIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdEYXRhIiA9PiAiaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL1x4MDAiIC4gJG5ld1hNUCApICkgKTsKCiAgICAgICAgLy8gUmV0dXJuIHRoZSBoZWFkZXJzIHdpdGggdGhlIG5ldyBzZWdtZW50IGluc2VydGVkCiAgICAgICAgcmV0dXJuICRqcGVnX2hlYWRlcl9kYXRhOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgcHV0X1hNUF90ZXh0CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICByZWFkX1hNUF9hcnJheV9mcm9tX3RleHQKKgoqIERlc2NyaXB0aW9uOiAgQW4gYWxpYXMgZm9yIHJlYWRfeG1sX2FycmF5X2Zyb21fdGV4dC4KKiAgICAgICAgICAgICAgIFBhcnNlcyBhIHN0cmluZyBjb250YWluaW5nIFhNUCBkYXRhIChYTUwpLCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nCiogICAgICAgICAgICAgICB0cmVlIHN0cnVjdHVyZSBhcnJheSwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBYTVAgKFhNTCkgaW5mb3JtYXRpb24uCiogICAgICAgICAgICAgICBOb3RlOiBXaGl0ZSBzcGFjZSBhbmQgY29tbWVudHMgaW4gdGhlIFhNUCBkYXRhIChYTUwpIGFyZSBpZ25vcmVkCiogICAgICAgICAgICAgICBOb3RlOiBBbGwgdGV4dCBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIHRyZWUgc3RydWN0dXJlCiogICAgICAgICAgICAgICAgICAgICBpcyBlbmNvZGVkIGFzIFVuaWNvZGUgVVRGLTguIEhlbmNlIHRleHQgd2lsbCBhcHBlYXIgYXMKKiAgICAgICAgICAgICAgICAgICAgIG5vcm1hbCBBU0NJSSBleGNlcHQgd2hlcmUgdGhlcmUgaXMgYW4gZXh0ZW5kZWQgY2hhcmFjdGVyLgoqCiogUGFyYW1ldGVyczogICB4bXB0ZXh0IC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgWE1QIGRhdGEgKFhNTCkgdG8gYmUgcGFyc2VkCioKKiBSZXR1cm5zOiAgICAgIG91dHB1dCAtIHRoZSB0cmVlIHN0cnVjdHVyZSBhcnJheSBjb250YWluaW5nIHRoZSBYTVAgKFhNTCkgaW5mb3JtYXRpb24KKiAgICAgICAgICAgICAgIEZBTFNFIC0gaWYgYW4gZXJyb3Igb2NjdXJlZAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHJlYWRfWE1QX2FycmF5X2Zyb21fdGV4dCggJHhtcHRleHQgKQp7CiAgICAgICAgcmV0dXJuIHJlYWRfeG1sX2FycmF5X2Zyb21fdGV4dCggJHhtcHRleHQgKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIHJlYWRfWE1QX2FycmF5X2Zyb21fdGV4dAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICB3cml0ZV9YTVBfYXJyYXlfdG9fdGV4dAoqCiogRGVzY3JpcHRpb246ICBUYWtlcyBhIHRyZWUgc3RydWN0dXJlIGFycmF5IGNvbnRhaW5pbmcgWE1QIChpbiB0aGUgc2FtZSBmb3JtYXQKKiAgICAgICAgICAgICAgIGFzIHJldHVybmVkIGJ5IHJlYWRfWE1QX2FycmF5X2Zyb21fdGV4dCwgYW5kIGNvbnN0cnVjdHMgYSBzdHJpbmcKKiAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIGVxdWl2YWxlbnQgWE1QLCBpbmNsdWRpbmcgdGhlIFhNUCBQYWNrZXQgaGVhZGVyCiogICAgICAgICAgICAgICBhbmQgdHJhaWxlci4gUHJvZHVjZXMgWE1QIHRleHQgd2hpY2ggaGFzIGNvcnJlY3QgaW5kZW50cywgZW5jb2RlZAoqICAgICAgICAgICAgICAgdXNpbmcgVVRGLTguCiogICAgICAgICAgICAgICBOb3RlOiBBbGwgdGV4dCBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIHRyZWUgc3RydWN0dXJlCiogICAgICAgICAgICAgICAgICAgICBjYW4gYmUgZWl0aGVyIDctYml0IEFTQ0lJIG9yIGVuY29kZWQgYXMgVW5pY29kZSBVVEYtOCwKKiAgICAgICAgICAgICAgICAgICAgIHNpbmNlIFVURi04IHBhc3NlcyA3LWJpdCBBU0NJSSB0ZXh0IHVuY2hhbmdlZC4KKgoqIFBhcmFtZXRlcnM6ICAgeG1wYXJyYXkgLSB0aGUgdHJlZSBzdHJ1Y3R1cmUgYXJyYXkgY29udGFpbmluZyB0aGUgaW5mb3JtYXRpb24gdG8KKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgY29udmVydGVkIHRvIFhNUCB0ZXh0CioKKiBSZXR1cm5zOiAgICAgIG91dHB1dF9YTVBfdGV4dCAtIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXF1aXZhbGVudCBYTVAgdGV4dAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIHdyaXRlX1hNUF9hcnJheV90b190ZXh0KCAkeG1wYXJyYXkgKQp7CiAgICAgICAgLy8gQWRkIHRoZSBYTVAgcGFja2V0IGhlYWRlcgogICAgICAgIC8vIFRoZSBzZXF1ZW5jZSAweEVGQkJCRiBpcyB0aGUgVVRGLTggZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBVbmljb2RlIJN6ZXJvCiAgICAgICAgLy8gd2lkdGggbm9uLWJyZWFraW5nIHNwYWNlIGNoYXJhY3RlcpQgKFUrRkVGRiksIHdoaWNoIGlzIHVzZWQgZm9yIGRldGVjdGluZwogICAgICAgIC8vIHdoZXRoZXIgVVRGLTE2IG9yIFVURi04IGlzIGJlaW5nIHVzZWQuCiAgICAgICAgJG91dHB1dF9YTVBfdGV4dCA9ICI8P3BocCB4cGFja2V0IGJlZ2luPSdceGVmXHhiYlx4YmYnIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz5cbiI7CgogICAgICAgIC8vIFBob3Rvc2hvcCBTZWVtcyB0byBhZGQgdGhpcywgYnV0IHRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlCiAgICAgICAgLy8gYW55IGluZm9ybWF0aW9uIG9uIHdoYXQgaXQgbWVhbnMKICAgICAgICAvLyBUT0RPIDogWE1QLCBGaW5kIG91dCB3aGF0IHRoZSBhZG9iZS14YXAtZmlsdGVycyB0YWcgbWVhbnMKICAgICAgICAkb3V0cHV0X1hNUF90ZXh0IC49ICI8P3BocCBhZG9iZS14YXAtZmlsdGVycyBlc2M9XCJDUlwiPz5cbiI7CgogICAgICAgIC8vIEFkZCB0aGUgWE1MIHRleHQKICAgICAgICAkb3V0cHV0X1hNUF90ZXh0IC49IHdyaXRlX3htbF9hcnJheV90b190ZXh0KCAkeG1wYXJyYXksIDAgKTsKCgogICAgICAgIC8vIFRoZSBYTVAgc3RhbmRhcmQgcmVjb21tZW5kcyBhZGRpbmcgMi00ayBvZiB3aGl0ZSBzcGFjZSBhdCB0aGUKICAgICAgICAvLyBlbmQgZm9yIGluIHBsYWNlIGVkaXRpbmcsIHNvIHdlIHdpbGwgYWRkIGl0IHRvIHRoZSBYTUwgbm93CiAgICAgICAgJG91dHB1dF9YTVBfdGV4dCAuPSBzdHJfcmVwZWF0KCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIsIDMwKTsKCiAgICAgICAgLy8gQWRkIHRoZSBYTVAgcGFja2V0IHRyYWlsZXIKICAgICAgICAkb3V0cHV0X1hNUF90ZXh0IC49ICI8P3BocCB4cGFja2V0IGVuZD0ndyc/PiI7CgogICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIFhNUCB0ZXh0CiAgICAgICAgcmV0dXJuICRvdXRwdXRfWE1QX3RleHQ7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICB3cml0ZV9YTVBfYXJyYXlfdG9fdGV4dAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZ1bmN0aW9uOiAgICAgSW50ZXJwcmV0X1hNUF90b19IVE1MCioKKiBEZXNjcmlwdGlvbjogIEdlbmVyYXRlcyBodG1sIHNob3dpbmcgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBhbiBFeHRlbnNpYmxlCiogICAgICAgICAgICAgICBNZXRhZGF0YSBQbGF0Zm9ybSAoWE1QKSB0cmVlIHN0cnVjdHVyZSBhcnJheSwgYXMgcmV0cmlldmVkCiogICAgICAgICAgICAgICB3aXRoIHJlYWRfWE1QX2FycmF5X2Zyb21fdGV4dAoqCiogUGFyYW1ldGVyczogICBYTVBfYXJyYXkgLSBhIFhNUCB0cmVlIHN0cnVjdHVyZSBhcnJheSBhcyBmcm9tIHJlYWRfWE1QX2FycmF5X2Zyb21fdGV4dAoqCiogUmV0dXJuczogICAgICBvdXRwdXQgLSB0aGUgSFRNTCBzdHJpbmcKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpmdW5jdGlvbiBJbnRlcnByZXRfWE1QX3RvX0hUTUwoICRYTVBfYXJyYXkgKQp7CiAgICAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHRvIHJlY2VpdmUgdGhlIG91dHB1dCBodG1sCiAgICAgICAgJG91dHB1dCA9IiI7CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBYTVAgdHJlZSBzdHJ1Y3R1cmUgYXJyYXkgaXMgdmFsaWQKICAgICAgICBpZiAoICRYTVBfYXJyYXkgIT09IEZBTFNFICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHJkZjpSREYgdGFnIGF0IGVpdGhlciB0aGUgZmlyc3Qgb3Igc2Vjb25kIGxldmVsCiAgICAgICAgICAgICAgICBpZiAoICggJFhNUF9hcnJheVswXVsndGFnJ10gPT0gICJ4OnhhcG1ldGEiICkgJiYgKCAkWE1QX2FycmF5WzBdWydjaGlsZHJlbiddWzBdWyd0YWcnXSA9PSAgInJkZjpSREYiICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBSREYgZm91bmQgYXQgc2Vjb25kIGxldmVsIC0gU2F2ZSBpdCdzIHBvc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICRSREZfQ29udGVudHMgPSAmJFhNUF9hcnJheVswXVsnY2hpbGRyZW4nXVswXVsnY2hpbGRyZW4nXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoICRYTVBfYXJyYXlbMF1bJ3RhZyddID09ICAieDp4bXBtZXRhIiApICYmICggJFhNUF9hcnJheVswXVsnY2hpbGRyZW4nXVswXVsndGFnJ10gPT0gICJyZGY6UkRGIiApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUkRGIGZvdW5kIGF0IHNlY29uZCBsZXZlbCAtIFNhdmUgaXQncyBwb3NpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAkUkRGX0NvbnRlbnRzID0gJiRYTVBfYXJyYXlbMF1bJ2NoaWxkcmVuJ11bMF1bJ2NoaWxkcmVuJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICggJFhNUF9hcnJheVswXVsndGFnJ10gPT0gICJyZGY6UkRGIiApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJERiBmb3VuZCBhdCBmaXJzdCBsZXZlbCAtIFNhdmUgaXQncyBwb3NpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAkUkRGX0NvbnRlbnRzID0gJiRYTVBfYXJyYXlbMF1bJ2NoaWxkcmVuJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJERiBzZWN0aW9uIG5vdCBmb3VuZCAtIGFib3J0CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBZGQgaGVhZGluZyB0byBodG1sIG91dHB1dAogICAgICAgICAgICAgICAgJG91dHB1dCAuPSAiPGgyIGNsYXNzPVwiWE1QX01haW5fSGVhZGluZ1wiPkNvbnRhaW5zIEV4dGVuc2libGUgTWV0YWRhdGEgUGxhdGZvcm0gKFhNUCkgLyBSZXNvdXJjZSBEZXNjcmlwdGlvbiBGcmFtZXdvcmsgKFJERikgSW5mb3JtYXRpb248L2gyPlxuIjsKCiAgICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBSREYgdHJlZSBhcnJheSwgYW5kIHByb2Nlc3MgdGhlbQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJFJERl9Db250ZW50cyBhcyAkUkRGX0l0ZW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBpdGVtIGlzIGEgcmRmOkRlc2NyaXB0aW9uIHRhZyAtIHRoZXNlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2FuIGJlIHByb2Nlc3NlZAoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoICRSREZfSXRlbVsndGFnJ10gPT0gInJkZjpEZXNjcmlwdGlvbiIgKSAmJiAoIGFycmF5X2tleV9leGlzdHMoICdjaGlsZHJlbicsICRSREZfSXRlbSApICkgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXRlbSBpcyBhIHJkZjpEZXNjcmlwdGlvbiB0YWcuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBvZiB0aGUgYXR0cmlidXRlcyBmb3IgdGhpcyB0YWcsIGxvb2tpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYSB4bWxuczogYXR0cmlidXRlLCB3aGljaCB0ZWxscyB1cyB3aGF0IE5hbWVzcGFjZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWItaXRlbXMgd2lsbCBiZSBpbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCAkUkRGX0l0ZW1bJ2F0dHJpYnV0ZXMnXSBhcyAka2V5ID0+ICR2YWwgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciB0aGUgeG1sbnM6IG5hbWVzcGFjZSBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3Vic3RyKCAka2V5LDAsNikgPT0gInhtbG5zOiIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIHhtbG5zOiBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgbmFtZXNwYWNlIHN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgaGVhZGluZyB0byB0aGUgSFRNTCBhY2NvcmRpbmcgdG8gd2hpY2ggTmFtZXNwYWNlIHRoZSBSREYgaXRlbXMgaGF2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCBzdWJzdHIoICRrZXksNikgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAicGhvdG9zaG9wIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gIjxoMyBjbGFzcz1cIlhNUF9TZWNvbmRhcnlfSGVhZGluZ1wiPlBob3Rvc2hvcCBSREYgU2VnbWVudDwvaDM+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAieGFwQkoiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSAiPGgzIGNsYXNzPVwiWE1QX1NlY29uZGFyeV9IZWFkaW5nXCI+QmFzaWMgSm9iIFRpY2tldCBSREYgU2VnbWVudDwvaDM+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAieGFwTU0iOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSAiPGgzIGNsYXNzPVwiWE1QX1NlY29uZGFyeV9IZWFkaW5nXCI+TWVkaWEgTWFuYWdlbWVudCBSREYgU2VnbWVudDwvaDM+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAieGFwUmlnaHRzIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gIjxoMyBjbGFzcz1cIlhNUF9TZWNvbmRhcnlfSGVhZGluZ1wiPlJpZ2h0cyBNYW5hZ2VtZW50IFJERiBTZWdtZW50PC9oMz5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJkYyI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICI8aDMgY2xhc3M9XCJYTVBfU2Vjb25kYXJ5X0hlYWRpbmdcIj5EdWJsaW4gQ29yZSBNZXRhZGF0YSBJbml0aWF0aXZlIFJERiBTZWdtZW50PC9oMz5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ4bXAiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInhhcCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICI8aDMgY2xhc3M9XCJYTVBfU2Vjb25kYXJ5X0hlYWRpbmdcIj5YTVAgQmFzaWMgU2VnbWVudDwvaDM+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAieG1wVFBnIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gIjxoMyBjbGFzcz1cIlhNUF9TZWNvbmRhcnlfSGVhZGluZ1wiPlhNUCBQYWdlZC1UZXh0IFNlZ21lbnQ8L2gzPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInhtcFRQZyI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICI8aDMgY2xhc3M9XCJYTVBfU2Vjb25kYXJ5X0hlYWRpbmdcIj5BZG9iZSBQREYgU2VnbWVudDwvaDM+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGlmZiI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICI8aDMgY2xhc3M9XCJYTVBfU2Vjb25kYXJ5X0hlYWRpbmdcIj5YTVAgLSBlbWJlZGRlZCBUSUZGIFNlZ21lbnQ8L2gzPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImV4aWYiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSAiPGgzIGNsYXNzPVwiWE1QX1NlY29uZGFyeV9IZWFkaW5nXCI+WE1QIC0gZW1iZWRkZWQgRVhJRiBTZWdtZW50PC9oMz5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ4YXBHSW1nIjogIC8vIFN1YiBDYXRlZ29yeSAtIERvIG5vdGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0RGltIjogIC8vIFN1YiBDYXRlZ29yeSAtIERvIG5vdGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0RXZ0IjogIC8vIFN1YiBDYXRlZ29yeSAtIERvIG5vdGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0UmVmIjogIC8vIFN1YiBDYXRlZ29yeSAtIERvIG5vdGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0VmVyIjogIC8vIFN1YiBDYXRlZ29yeSAtIERvIG5vdGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0Sm9iIjogIC8vIFN1YiBDYXRlZ29yeSAtIERvIG5vdGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSAiPGgzIGNsYXNzPVwiWE1QX1NlY29uZGFyeV9IZWFkaW5nXCI+VW5rbm93biBSREYgU2VnbWVudCAnIiAuIHN1YnN0ciggJGtleSw2KSAuICInPC9oMz5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBzdGFydCBvZiB0aGUgdGFibGUgdG8gdGhlIEhUTUwgb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCAuPSAiXG48dGFibGUgIGNsYXNzPVwiWE1QX1RhYmxlXCIgYm9yZGVyPTE+XG4iOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBlbGVtZW50IGhhcyBzdWItaXRlbXMKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcnJheV9rZXlfZXhpc3RzKCAnY2hpbGRyZW4nLCAkUkRGX0l0ZW0gKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBvZiB0aGUgc3ViLWl0ZW1zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCAkUkRGX0l0ZW1bJ2NoaWxkcmVuJ10gYXMgJGNoaWxkX2l0ZW0gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYW4gaW50ZXJwcmV0YXRpb24gb2YgdGhlIHN1Yi1pdGVtJ3MgY2FwdGlvbiBhbmQgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCgkdGFnX2NhcHRpb24sICR2YWx1ZV9zdHIpID0gSW50ZXJwcmV0X1JERl9JdGVtKCAkY2hpbGRfaXRlbSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlIHRoZSB0ZXh0IG9mIHRoZSBjYXB0aW9uIGZvciBodG1sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWdfY2FwdGlvbiA9IEhUTUxfVVRGOF9Fc2NhcGUoICR0YWdfY2FwdGlvbiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGUgdGhlIHRleHQgb2YgdGhlIHZhbHVlIGZvciBodG1sIGFuZCB0dXJuIG5ld2xpbmVzIHRvIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlX3N0ciA9IG5sMmJyKCBIVE1MX1VURjhfRXNjYXBlKCAkdmFsdWVfc3RyICkgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBlbXB0eSAtIGlmIGl0IGlzLCBwdXQgYSBuby1icmVhay1zcGFjZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhlIHRhYmxlIGNlbGwgZ2V0cyBkcmF3bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR2YWx1ZV9zdHIgPT0gIiIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlX3N0ciA9ICImbmJzcDsiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgdGFibGUgcm93IHRvIHRoZSBvdXRwdXQgaHRtbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICI8dHIgY2xhc3M9XCJYTVBfVGFibGVfUm93XCI+PHRkICBjbGFzcz1cIlhNUF9DYXB0aW9uX0NlbGxcIj4iIC4gJHRhZ19jYXB0aW9uIC4gIjo8L3RkPjx0ZCAgY2xhc3M9XCJYTVBfVmFsdWVfQ2VsbFwiPiIgLiAkdmFsdWVfc3RyIC4gIjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGVuZCBvZiB0aGUgdGFibGUgdG8gdGhlIGh0bWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICJcbjwvdGFibGU+XG4iOwoKCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gcHJvY2VzcyB0YWdzIG90aGVyIHRoYW4gcmRmOkRlc2NyaXB0aW9uIC0gZG8gbm90aGluZwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgoKCiAgICAgICAgfQogICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIEhUTUwKICAgICAgICByZXR1cm4gJG91dHB1dDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIEludGVycHJldF9YTVBfdG9fSFRNTAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgoKCgoKCgoKCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqICAgICAgICAgSU5URVJOQUwgRlVOQ1RJT05TCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBJbnRlcm5hbCBGdW5jdGlvbjogICAgIEludGVycHJldF9SREZfSXRlbQoqCiogRGVzY3JpcHRpb246ICBVc2VkIGJ5IEludGVycHJldF9YTVBfdG9fSFRNTAoqICAgICAgICAgICAgICAgVXNlZCBieSBnZXRfUkRGX2ZpZWxkX2h0bWxfdmFsdWUKKiAgICAgICAgICAgICAgIFVzZWQgYnkgaW50ZXJwcmV0X1JERl9jb2xsZWN0aW9uCiogICAgICAgICAgICAgICBHZW5lcmF0ZXMgYSBjYXB0aW9uIGFuZCB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiBhCiogICAgICAgICAgICAgICBwYXJ0aWN1bGFyIFJERiBpdGVtLgoqCiogUGFyYW1ldGVyczogICBJdGVtIC0gVGhlIFJERiBpdGVtIHRvIGV2YWx1YXRlCioKKiBSZXR1cm5zOiAgICAgIHRhZ19jYXB0aW9uIC0gdGhlIGNhcHRpb24gb2YgdGhlIHRhZwoqICAgICAgICAgICAgICAgdmFsdWVfc3RyIC0gdGhlIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gSW50ZXJwcmV0X1JERl9JdGVtKCAkSXRlbSApCnsKCiAgICAgICAgLy8gVE9ETzogTWFueSBSREYgaXRlbXMgaGF2ZSBub3QgYmVlbiB0ZXN0ZWQgLSBvbmx5IHBob3Rvc2hvcCA3LjAgYW5kIENTIGl0ZW1zCgogICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyB0byByZWNlaXZlIHRoZSBIVE1MIG91dHB1dAogICAgICAgICR2YWx1ZV9zdHIgPSAiIjsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGl0ZW0gaGFzIGlzIGluIHRoZSBsb29rdXAgdGFibGUgb2YgdGFnIGNhcHRpb25zCiAgICAgICAgaWYgKCBhcnJheV9rZXlfZXhpc3RzKCAkSXRlbVsndGFnJ10sICRHTE9CQUxTWyAnWE1QX3RhZ19jYXB0aW9ucycgXSApICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBJdGVtIGlzIGluIGxpc3Qgb2YgY2FwdGlvbnMsIGdldCB0aGUgY2FwdGlvbgogICAgICAgICAgICAgICAgJHRhZ19jYXB0aW9uID0gJEdMT0JBTFNbICdYTVBfdGFnX2NhcHRpb25zJyBdWyAkSXRlbVsndGFnJ10gXTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEl0ZW0gaGFzIG5vIGNhcHRpb24gLSBtYWtlIG9uZQogICAgICAgICAgICAgICAgJHRhZ19jYXB0aW9uID0gIlVua25vd24gZmllbGQgIiAuICRJdGVtWyd0YWcnXTsKICAgICAgICB9CgoKICAgICAgICAvLyBQcm9jZXNzIHNwZWNpYWxseSB0aGUgaXRlbSBhY2NvcmRpbmcgdG8gaXQncyB0YWcKICAgICAgICBzd2l0Y2ggKCAkSXRlbVsndGFnJ10gKQogICAgICAgIHsKCiAgICAgICAgICAgICAgICBjYXNlICJwaG90b3Nob3A6RGF0ZUNyZWF0ZWQiOiAgICAgICAgICAgIC8vIFRoaXMgaXMgaW4geWVhciBtb250aCBkYXkgb3JkZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgeWVhcixtb250aCBhbmQgZGF5CiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoICR5ZWFyLCAkbW9udGgsICRkYXkgKSA9IHNzY2FuZiggJEl0ZW1bJ3ZhbHVlJ10sICIlZC0lZC0lZCIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhIG5ldyBkYXRlIHN0cmluZyB3aXRoIERheSwgTW9udGgsIFllYXIKICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlX3N0ciA9ICIkZGF5LyRtb250aC8keWVhciI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQgOgogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWVfc3RyID0gZ2V0X1JERl9maWVsZF9odG1sX3ZhbHVlKCAkSXRlbSApOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKCgogICAgICAgIC8vIFJldHVybiB0aGUgY2FwdGlvbmEgYW5kIHZhbHVlCiAgICAgICAgcmV0dXJuIGFycmF5KCR0YWdfY2FwdGlvbiwgJHZhbHVlX3N0cik7Cn0KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgSW50ZXJwcmV0X1JERl9JdGVtCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiBJbnRlcm5hbCBGdW5jdGlvbjogICAgIGdldF9SREZfZmllbGRfaHRtbF92YWx1ZQoqCiogRGVzY3JpcHRpb246ICBBdHRlbXB0cyB0byBidWlsZCBhIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIG9mIGFuIFJERgoqICAgICAgICAgICAgICAgaXRlbS4gVGhpcyBpbmNsdWRlcyBoYW5kbGluZyBhbnkgY29sbGVjdGlvbnMgb3Igc3ViLXJlc291cmNlcy4KKgoqIFBhcmFtZXRlcnM6ICAgcmRmX2l0ZW0gLSBUaGUgUkRGIGl0ZW0gdG8gZXZhbHVhdGUKKgoqIFJldHVybnM6ICAgICAgb3V0cHV0X3N0ciAtIHRoZSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaWVsZCB2YWx1ZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIGdldF9SREZfZmllbGRfaHRtbF92YWx1ZSggJHJkZl9pdGVtICkKewogICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyB0byByZWNlaXZlIHRoZSBvdXRwdXQgdGV4dAogICAgICAgICRvdXRwdXRfc3RyID0gIiI7CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBpdGVtIGhhcyBhIHZhbHVlCiAgICAgICAgaWYgKCBhcnJheV9rZXlfZXhpc3RzKCAndmFsdWUnLCAkcmRmX2l0ZW0gKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gVGhlIGl0ZW0gZG9lcyBoYXZlIGEgdmFsdWUgLSBhZGQgaXQgdG8gdGhlIHRleHQKICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICRyZGZfaXRlbVsndmFsdWUnXTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBpdGVtIGhhcyBhbnkgYXR0cmlidXRlcwogICAgICAgIGlmICggYXJyYXlfa2V5X2V4aXN0cyggJ2F0dHJpYnV0ZXMnLCAkcmRmX2l0ZW0gKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCBlYWNoIG9mIHRoZSBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICBmb3JlYWNoKCAkcmRmX2l0ZW1bJ2F0dHJpYnV0ZXMnXSBhcyAka2V5ID0+ICR2YWwgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGF0dHJpYnV0ZSBpcyByZGY6cGFyc2VUeXBlID0gJ1Jlc291cmNlJyBpLmUuIGEgc3ViLXJlc291cmNlIGluZGljYXRvcgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggJGtleSA9PSAicmRmOnBhcnNlVHlwZSIgKSAmJiAoICR2YWwgPT0gIlJlc291cmNlIiApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXRlbSBoYXMgYSBhdHRyaWJ1dGUgaW5kaWNhdGluZyBzdWItcmVzb3VyY2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgaXRlbSBoYXMgc3ViIGl0ZW1zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcnJheV9rZXlfZXhpc3RzKCAnY2hpbGRyZW4nLCAkcmRmX2l0ZW0gKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGl0ZW0gZG9lcyBoYXZlIHN1Yi1pdGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCwgSW50ZXJwcmV0aW5nIHRoZW0gYW5kIGFkZGluZyB0aGUgcmVzdWx0IHRvIHRoZSBvdXRwdXQgdGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJHJkZl9pdGVtWydjaGlsZHJlbiddIGFzICRjaGlsZCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoJHRhZ19jYXB0aW9uLCAkdmFsdWVfc3RyKSA9IEludGVycHJldF9SREZfSXRlbSggJGNoaWxkICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICIkdGFnX2NhcHRpb24gID0gICR2YWx1ZV9zdHJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3V0cHV0IHRleHQgd2lsbCBoYXZlIGFuIGV4dHJhIFxuIG9uIGl0IC0gcmVtb3ZlIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciA9IHJ0cmltKCAkb3V0cHV0X3N0ciApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpdGVtIGRpZCBub3QgaGF2ZSBzdWItcmVzb3VyY2VzLCBpdCBtYXkgc3RpbGwgaGF2ZSBzdWItaXRlbXMgLSBjaGVjayBmb3IgdGhpcwogICAgICAgIGVsc2UgaWYgKCBhcnJheV9rZXlfZXhpc3RzKCAnY2hpbGRyZW4nLCAkcmRmX2l0ZW0gKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gTm9uLXJlc291cmNlIFN1Yi1pdGVtcyBmb3VuZCwgQ3ljbGUgdGhyb3VnaCBlYWNoCiAgICAgICAgICAgICAgICBmb3JlYWNoKCAkcmRmX2l0ZW1bJ2NoaWxkcmVuJ10gYXMgJGNoaWxkX2l0ZW0gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHN1Yi1pdGVtIGhhcyBhIHRhZwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMoICd0YWcnLCAkY2hpbGRfaXRlbSApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1YiBpdGVtIGhhcyBhIHRhZywgUHJvY2VzcyBpdCBhY2NvcmRpbmcgdG8gdGhlIHRhZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoICRjaGlsZF9pdGVtWyAndGFnJyBdICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb2xsZWN0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAicmRmOkFsdCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICJMaXN0IG9mIEFsdGVybmF0ZXM6XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSBpbnRlcnByZXRfUkRGX2NvbGxlY3Rpb24oICRjaGlsZF9pdGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInJkZjpCYWciOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiVW5vcmRlcmVkIExpc3Q6XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSBpbnRlcnByZXRfUkRGX2NvbGxlY3Rpb24oICRjaGlsZF9pdGVtICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInJkZjpTZXEiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiT3JkZXJlZCBMaXN0OlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gaW50ZXJwcmV0X1JERl9jb2xsZWN0aW9uKCAkY2hpbGRfaXRlbSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWItUmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInJkZjpEZXNjcmlwdGlvbiI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGl0ZW0gaGFzIHN1YiBpdGVtcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMoICdjaGlsZHJlbicsICRjaGlsZF9pdGVtICkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGl0ZW0gZG9lcyBoYXZlIHN1Yi1pdGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGVhY2gsIEludGVycHJldGluZyB0aGVtIGFuZCBhZGRpbmcgdGhlIHJlc3VsdCB0byB0aGUgb3V0cHV0IHRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCAkY2hpbGRfaXRlbVsnY2hpbGRyZW4nXSBhcyAkY2hpbGQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoJHRhZ19jYXB0aW9uLCAkdmFsdWVfc3RyKSA9IEludGVycHJldF9SREZfSXRlbSggJGNoaWxkICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiJHRhZ19jYXB0aW9uICA9ICAkdmFsdWVfc3RyXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3V0cHV0IHRleHQgd2lsbCBoYXZlIGFuIGV4dHJhIFxuIG9uIGl0IC0gcmVtb3ZlIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgPSBydHJpbSggJG91dHB1dF9zdHIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgLj0gIlVua25vd24gU3ViIEl0ZW0gdHlwZToiLiAkY2hpbGRfaXRlbVsgJ3RhZycgXS4gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IC8vIHN1Yi1pdGVtIEhhcyBubyB0YWdzLCBsb29rIGZvciBhIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBhcnJheV9rZXlfZXhpc3RzKCAndmFsdWUnLCAkY2hpbGRfaXRlbSApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyIC49ICRyZGZfaXRlbVsndmFsdWUnXSAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gaW5mbyAtIGRvIG5vdGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIHJldHVybiB0aGUgcmVzdWx0aW5nIHZhbHVlIHN0cmluZwogICAgICAgIHJldHVybiAkb3V0cHV0X3N0cjsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEVuZCBvZiBGdW5jdGlvbjogICAgIGdldF9SREZfZmllbGRfaHRtbF92YWx1ZQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogSW50ZXJuYWwgRnVuY3Rpb246ICAgICBpbnRlcnByZXRfUkRGX2NvbGxlY3Rpb24KKgoqIERlc2NyaXB0aW9uOiAgQXR0ZW1wdHMgdG8gYnVpbGQgYSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBvZiBhbiBSREYKKiAgICAgICAgICAgICAgIGNvbGxlY3Rpb24gaXRlbS4gVGhpcyBpbmNsdWRlcyBoYW5kbGluZyBhbnkgc3ViLWNvbGxlY3Rpb25zIG9yCiogICAgICAgICAgICAgICBzdWItcmVzb3VyY2VzLgoqCiogUGFyYW1ldGVyczogICByZGZfaXRlbSAtIFRoZSBSREYgY29sbGVjdGlvbiBpdGVtIHRvIGV2YWx1YXRlCioKKiBSZXR1cm5zOiAgICAgIG91dHB1dF9zdHIgLSB0aGUgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29sbGVjdGlvbiB2YWx1ZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIGludGVycHJldF9SREZfY29sbGVjdGlvbiggJGl0ZW0gKQp7CiAgICAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHRvIHJlY2VpdmUgdGhlIG91dHB1dAogICAgICAgICRvdXRwdXRfc3RyID0gIiI7CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBjb2xsZWN0aW9uIGl0ZW0gaGFzIHN1Yi1pdGVtcwogICAgICAgIGlmICggYXJyYXlfa2V5X2V4aXN0cyggJ2NoaWxkcmVuJywgJGl0ZW0gKSApCiAgICAgICAgewoKICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBvZiB0aGUgc3ViLWl0ZW1zCiAgICAgICAgICAgICAgICBmb3JlYWNoKCAkaXRlbVsnY2hpbGRyZW4nXSBhcyAkbGlzdF9pdGVtICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc3ViIGl0ZW0gaGFzIGEgdGFnLCBhbmQgZG9uJ3QgcHJvY2VzcyBpdCBpZiBpdCBkb2Vzbid0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISBhcnJheV9rZXlfZXhpc3RzKCAndGFnJywgJGxpc3RfaXRlbSApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHN1Yi1pdGVtIHRhZyBpcyBlaXRoZXIgcmRmOmxpIG9yIHJkZjpfMSAuLi4uCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2lnbmlmaWVzIGl0IGlzIGEgbGlzdCBpdGVtIG9mIHRoZSBjb2xsZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCAkbGlzdF9pdGVtWyd0YWcnXSA9PSAicmRmOmxpIiApIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBwcmVnX21hdGNoICggInJkZjpfXGQrIiwgJGxpc3RfaXRlbVsndGFnJ10gKSA9PSAxICkgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBMaXN0IGl0ZW0gaGFzIGJlZW4gZm91bmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgc3ViLXJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydGluZyBieSBjaGVja2luZyBpZiB0aGVyZSBhcmUgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJyYXlfa2V5X2V4aXN0cyggJ2F0dHJpYnV0ZXMnLCAkbGlzdF9pdGVtICkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCBvZiB0aGUgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJGxpc3RfaXRlbVsnYXR0cmlidXRlcyddIGFzICRrZXkgPT4gJHZhbCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgYXR0cmlidXRlIGlzIHJkZjpwYXJzZVR5cGUgPSAnUmVzb3VyY2UnIGkuZS4gYSBzdWItcmVzb3VyY2UgaW5kaWNhdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCAka2V5ID09ICJyZGY6cGFyc2VUeXBlIiApICYmICggJHZhbCA9PSAiUmVzb3VyY2UiICkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpdGVtIGhhcyBhIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHN1Yi1yZXNvdXJjZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBpdGVtIGhhcyBzdWIgaXRlbXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMoICdjaGlsZHJlbicsICRsaXN0X2l0ZW0gKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGl0ZW0gZG9lcyBoYXZlIHN1Yi1pdGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN5Y2xlIHRocm91Z2ggZWFjaCwgSW50ZXJwcmV0aW5nIHRoZW0gYW5kIGFkZGluZyB0aGUgcmVzdWx0IHRvIHRoZSBvdXRwdXQgdGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJGxpc3RfaXRlbVsnY2hpbGRyZW4nXSBhcyAkY2hpbGQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KCR0YWdfY2FwdGlvbiwgJHZhbHVlX3N0cikgPSBJbnRlcnByZXRfUkRGX0l0ZW0oICRjaGlsZCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSAiJHRhZ19jYXB0aW9uICA9ICAkdmFsdWVfc3RyXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG91dHB1dCB0ZXh0IHdpbGwgaGF2ZSBhbiBleHRyYSBcbiBvbiBpdCAtIHJlbW92ZSBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgPSBydHJpbSggJG91dHB1dF9zdHIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBsaXN0IGl0ZW0gaGFzIGEgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMoICd2YWx1ZScsICRsaXN0X2l0ZW0gKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsdWUgZm91bmQsIGFkZCBpdCB0byB0aGUgb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X3N0ciAuPSBnZXRfUkRGX2ZpZWxkX2h0bWxfdmFsdWUoICRsaXN0X2l0ZW0gKSAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gVGhlIGxpc3Qgb2Ygc3ViLWl0ZW1zIGZvcm1lZCB3aWxsIGhhdmUgYSB0cmFpbGluZyBcbiwgcmVtb3ZlIGl0LgogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgPSBydHJpbSggJG91dHB1dF9zdHIgKTsKCiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBObyBzdWItaXRlbXMgaW4gY29sbGVjdGlvbiAtIGNhbid0IGRvIGFueXRoaW5nCiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIG91dHB1dCB2YWx1ZQogICAgICAgIHJldHVybiAkb3V0cHV0X3N0cjsKCn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgRnVuY3Rpb246ICAgICBpbnRlcnByZXRfUkRGX2NvbGxlY3Rpb24KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKCgoKCgoKCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogR2xvYmFsIFZhcmlhYmxlOiAgICAgIFhNUF90YWdfY2FwdGlvbnMKKgoqIENvbnRlbnRzOiAgICAgVGhlIENhcHRpb25zIG9mIHRoZSBrbm93biBYTVAgZmllbGRzLCBpbmRleGVkIGJ5IHRoZWlyIGZpZWxkIG5hbWUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgokR0xPQkFMU1sgJ1hNUF90YWdfY2FwdGlvbnMnIF0gPSBhcnJheSAoCgoiZGM6Y29udHJpYnV0b3IiID0+ICJPdGhlciBDb250cmlidXRvcihzKSIsCiJkYzpjb3ZlcmFnZSIgPT4gIkNvdmVyYWdlIChzY29wZSkiLAoiZGM6Y3JlYXRvciIgPT4gIkNyZWF0b3IocykgKEF1dGhvcnMpIiwKImRjOmRhdGUiID0+ICJEYXRlIiwKImRjOmRlc2NyaXB0aW9uIiA9PiAiRGVzY3JpcHRpb24gKENhcHRpb24pIiwKImRjOmZvcm1hdCIgPT4gIk1JTUUgRGF0YSBGb3JtYXQiLAoiZGM6aWRlbnRpZmllciIgPT4gIlVuaXF1ZSBSZXNvdXJjZSBJZGVudGlmZXIiLAoiZGM6bGFuZ3VhZ2UiID0+ICJMYW5ndWFnZShzKSIsCiJkYzpwdWJsaXNoZXIiID0+ICJQdWJsaXNoZXIocykiLAoiZGM6cmVsYXRpb24iID0+ICJSZWxhdGlvbnMgdG8gb3RoZXIgZG9jdW1lbnRzIiwKImRjOnJpZ2h0cyIgPT4gIlJpZ2h0cyBTdGF0ZW1lbnQiLAoiZGM6c291cmNlIiA9PiAiU291cmNlIChmcm9tIHdoaWNoIHRoaXMgUmVzb3VyY2UgaXMgZGVyaXZlZCkiLAoiZGM6c3ViamVjdCIgPT4gIlN1YmplY3QgYW5kIEtleXdvcmRzIiwKImRjOnRpdGxlIiA9PiAiVGl0bGUiLAoiZGM6dHlwZSIgPT4gIlJlc291cmNlIFR5cGUiLAoKInhtcDpBZHZpc29yeSIgPT4gIkV4dGVybmFsbHkgRWRpdGllZCBQcm9wZXJ0aWVzIiwKInhtcDpCYXNlVVJMIiA9PiAiQmFzZSBVUkwgZm9yIHJlbGF0aXZlIFVSTCdzIiwKInhtcDpDcmVhdGVEYXRlIiA9PiAiT3JpZ2luYWwgQ3JlYXRpb24gRGF0ZSIsCiJ4bXA6Q3JlYXRvclRvb2wiID0+ICJDcmVhdG9yIFRvb2wiLAoieG1wOklkZW50aWZpZXIiID0+ICJJZGVudGlmaWVyKHMpIiwKInhtcDpNZXRhZGF0YURhdGUiID0+ICJNZXRhZGF0YSBMYXN0IE1vZGlmeSBEYXRlIiwKInhtcDpNb2RpZnlEYXRlIiA9PiAiUmVzb3VyY2UgTGFzdCBNb2RpZnkgRGF0ZSIsCiJ4bXA6Tmlja25hbWUiID0+ICJOaWNrbmFtZSIsCiJ4bXA6VGh1bWJuYWlscyIgPT4gIlRodW1ibmFpbHMiLAoKInhtcGlkcTpTY2hlbWUiID0+ICJJZGVudGlmaWNhdGlvbiBTY2hlbWUiLAoKLy8gVGhlc2UgYXJlIG5vdCBpbiBzcGVjIGJ1dCBQaG90b3Nob3AgQ1Mgc2VlbXMgdG8gdXNlIHRoZW0KInhhcDpBZHZpc29yeSIgPT4gIkV4dGVybmFsbHkgRWRpdGllZCBQcm9wZXJ0aWVzIiwKInhhcDpCYXNlVVJMIiA9PiAiQmFzZSBVUkwgZm9yIHJlbGF0aXZlIFVSTCdzIiwKInhhcDpDcmVhdGVEYXRlIiA9PiAiT3JpZ2luYWwgQ3JlYXRpb24gRGF0ZSIsCiJ4YXA6Q3JlYXRvclRvb2wiID0+ICJDcmVhdG9yIFRvb2wiLAoieGFwOklkZW50aWZpZXIiID0+ICJJZGVudGlmaWVyKHMpIiwKInhhcDpNZXRhZGF0YURhdGUiID0+ICJNZXRhZGF0YSBMYXN0IE1vZGlmeSBEYXRlIiwKInhhcDpNb2RpZnlEYXRlIiA9PiAiUmVzb3VyY2UgTGFzdCBNb2RpZnkgRGF0ZSIsCiJ4YXA6Tmlja25hbWUiID0+ICJOaWNrbmFtZSIsCiJ4YXA6VGh1bWJuYWlscyIgPT4gIlRodW1ibmFpbHMiLAoieGFwaWRxOlNjaGVtZSIgPT4gIklkZW50aWZpY2F0aW9uIFNjaGVtZSIsCgoKInhhcFJpZ2h0czpDZXJ0aWZpY2F0ZSIgPT4gIkNlcnRpZmljYXRlIiwKInhhcFJpZ2h0czpDb3B5cmlnaHQiID0+ICJDb3B5cmlnaHQiLAoieGFwUmlnaHRzOk1hcmtlZCIgPT4gIk1hcmtlZCIsCiJ4YXBSaWdodHM6T3duZXIiID0+ICJPd25lciIsCiJ4YXBSaWdodHM6VXNhZ2VUZXJtcyIgPT4gIkxlZ2FsIFRlcm1zIG9mIFVzYWdlIiwKInhhcFJpZ2h0czpXZWJTdGF0ZW1lbnQiID0+ICJXZWIgUGFnZSBkZXNjcmliaW5nIHJpZ2h0cyBzdGF0ZW1lbnQgKE93bmVyIFVSTCkiLAoKInhhcE1NOkNvbnRhaW5lZFJlc291cmNlcyIgPT4gIkNvbnRhaW5lZCBSZXNvdXJjZXMiLAoieGFwTU06Q29udHJpYnV0b3JSZXNvdXJjZXMiID0+ICJDb250cmlidXRvciBSZXNvdXJjZXMiLAoieGFwTU06RGVyaXZlZEZyb20iID0+ICJEZXJpdmVkIEZyb20iLAoieGFwTU06RG9jdW1lbnRJRCIgPT4gIkRvY3VtZW50IElEIiwKInhhcE1NOkhpc3RvcnkiID0+ICJIaXN0b3J5IiwKInhhcE1NOkxhc3RVUkwiID0+ICJMYXN0IFdyaXR0ZW4gVVJMIiwKInhhcE1NOk1hbmFnZWRGcm9tIiA9PiAiTWFuYWdlZCBGcm9tIiwKInhhcE1NOk1hbmFnZXIiID0+ICJBc3NldCBNYW5hZ2VtZW50IFN5c3RlbSIsCiJ4YXBNTTpNYW5hZ2VUbyIgPT4gIk1hbmFnZSBUbyIsCiJ4YXBNTTp4bXBNTTpNYW5hZ2VVSSIgPT4gIk1hbmFnZWQgUmVzb3VyY2UgVVJJIiwKInhhcE1NOk1hbmFnZXJWYXJpYW50IiA9PiAiUGFydGljdWxhciBWYXJpYW50IG9mIEFzc2V0IE1hbmFnZW1lbnQgU3lzdGVtIiwKInhhcE1NOlJlbmRpdGlvbkNsYXNzIiA9PiAiUmVuZGl0aW9uIENsYXNzIiwKInhhcE1NOlJlbmRpdGlvblBhcmFtcyIgPT4gIlJlbmRpdGlvbiBQYXJhbWV0ZXJzIiwKInhhcE1NOlJlbmRpdGlvbk9mIiA9PiAiUmVuZGl0aW9uIE9mIiwKInhhcE1NOlNhdmVJRCIgPT4gIlNhdmUgSUQiLAoieGFwTU06VmVyc2lvbklEIiA9PiAiVmVyc2lvbiBJRCIsCiJ4YXBNTTpWZXJzaW9ucyIgPT4gIlZlcnNpb25zIiwKCiJ4YXBCSjpKb2JSZWYiID0+ICJKb2IgUmVmZXJlbmNlIiwKCiJ4bXBUUGc6TWF4UGFnZVNpemUiID0+ICJMYXJnZXN0IFBhZ2UgU2l6ZSIsCiJ4bXBUUGc6TlBhZ2VzIiA9PiAiTnVtYmVyIG9mIHBhZ2VzIiwKCiJwZGY6S2V5d29yZHMiID0+ICJLZXl3b3JkcyIsCiJwZGY6UERGVmVyc2lvbiIgPT4gIlBERiBmaWxlIHZlcnNpb24iLAoicGRmOlByb2R1Y2VyIiA9PiAiUERGIENyZWF0aW9uIFRvb2wiLAoKInBob3Rvc2hvcDpBdXRob3JzUG9zaXRpb24iID0+ICJBdXRob3JzIFBvc2l0aW9uIiwKInBob3Rvc2hvcDpDYXB0aW9uV3JpdGVyIiA9PiAiQ2FwdGlvbiBXcml0ZXIiLAoicGhvdG9zaG9wOkNhdGVnb3J5IiA9PiAiQ2F0ZWdvcnkiLAoicGhvdG9zaG9wOkNpdHkiID0+ICJDaXR5IiwKInBob3Rvc2hvcDpDb3VudHJ5IiA9PiAiQ291bnRyeSIsCiJwaG90b3Nob3A6Q3JlZGl0IiA9PiAiQ3JlZGl0IiwKInBob3Rvc2hvcDpEYXRlQ3JlYXRlZCIgPT4gIkNyZWF0aW9uIERhdGUiLAoicGhvdG9zaG9wOkhlYWRsaW5lIiA9PiAiSGVhZGxpbmUiLAoicGhvdG9zaG9wOkhpc3RvcnkiID0+ICJIaXN0b3J5IiwgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBpbiBYTVAgc3BlYwoicGhvdG9zaG9wOkluc3RydWN0aW9ucyIgPT4gIkluc3RydWN0aW9ucyIsCiJwaG90b3Nob3A6U291cmNlIiA9PiAiU291cmNlIiwKInBob3Rvc2hvcDpTdGF0ZSIgPT4gIlN0YXRlIiwKInBob3Rvc2hvcDpTdXBwbGVtZW50YWxDYXRlZ29yaWVzIiA9PiAiU3VwcGxlbWVudGFsIENhdGVnb3JpZXMiLAoicGhvdG9zaG9wOlRyYW5zbWlzc2lvblJlZmVyZW5jZSIgPT4gIlRlY2huaWNhbCAoVHJhbnNtaXNzaW9uKSBSZWZlcmVuY2UiLAoicGhvdG9zaG9wOlVyZ2VuY3kiID0+ICJVcmdlbmN5IiwKCgoidGlmZjpJbWFnZVdpZHRoIiA9PiAiSW1hZ2UgV2lkdGgiLAoidGlmZjpJbWFnZUxlbmd0aCIgPT4gIkltYWdlIExlbmd0aCIsCiJ0aWZmOkJpdHNQZXJTYW1wbGUiID0+ICJCaXRzIFBlciBTYW1wbGUiLAoidGlmZjpDb21wcmVzc2lvbiIgPT4gIkNvbXByZXNzaW9uIiwKInRpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbiIgPT4gIlBob3RvbWV0cmljIEludGVycHJldGF0aW9uIiwKInRpZmY6T3JpZW50YXRpb24iID0+ICJPcmllbnRhdGlvbiIsCiJ0aWZmOlNhbXBsZXNQZXJQaXhlbCIgPT4gIlNhbXBsZXMgUGVyIFBpeGVsIiwKInRpZmY6UGxhbmFyQ29uZmlndXJhdGlvbiIgPT4gIlBsYW5hciBDb25maWd1cmF0aW9uIiwKInRpZmY6WUNiQ3JTdWJTYW1wbGluZyIgPT4gIllDYkNyIFN1Yi1TYW1wbGluZyIsCiJ0aWZmOllDYkNyUG9zaXRpb25pbmciID0+ICJZQ2JDciBQb3NpdGlvbmluZyIsCiJ0aWZmOlhSZXNvbHV0aW9uIiA9PiAiWCBSZXNvbHV0aW9uIiwKInRpZmY6WVJlc29sdXRpb24iID0+ICJZIFJlc29sdXRpb24iLAoidGlmZjpSZXNvbHV0aW9uVW5pdCIgPT4gIlJlc29sdXRpb24gVW5pdCIsCiJ0aWZmOlRyYW5zZmVyRnVuY3Rpb24iID0+ICJUcmFuc2ZlciBGdW5jdGlvbiIsCiJ0aWZmOldoaXRlUG9pbnQiID0+ICJXaGl0ZSBQb2ludCIsCiJ0aWZmOlByaW1hcnlDaHJvbWF0aWNpdGllcyIgPT4gIlByaW1hcnkgQ2hyb21hdGljaXRpZXMiLAoidGlmZjpZQ2JDckNvZWZmaWNpZW50cyIgPT4gIllDYkNyIENvZWZmaWNpZW50cyIsCiJ0aWZmOlJlZmVyZW5jZUJsYWNrV2hpdGUiID0+ICJCbGFjayAmIFdoaXRlIFJlZmVyZW5jZSIsCiJ0aWZmOkRhdGVUaW1lIiA9PiAiRGF0ZSAmIFRpbWUiLAoidGlmZjpJbWFnZURlc2NyaXB0aW9uIiA9PiAiSW1hZ2UgRGVzY3JpcHRpb24iLAoidGlmZjpNYWtlIiA9PiAiTWFrZSIsCiJ0aWZmOk1vZGVsIiA9PiAiTW9kZWwiLAoidGlmZjpTb2Z0d2FyZSIgPT4gIlNvZnR3YXJlIiwKInRpZmY6QXJ0aXN0IiA9PiAiQXJ0aXN0IiwKInRpZmY6Q29weXJpZ2h0IiA9PiAiQ29weXJpZ2h0IiwKCgoiZXhpZjpFeGlmVmVyc2lvbiIgPT4gIkV4aWYgVmVyc2lvbiIsCiJleGlmOkZsYXNocGl4VmVyc2lvbiIgPT4gIkZsYXNoIHBpeCBWZXJzaW9uIiwKImV4aWY6Q29sb3JTcGFjZSIgPT4gIkNvbG9yIFNwYWNlIiwKImV4aWY6Q29tcG9uZW50c0NvbmZpZ3VyYXRpb24iID0+ICJDb21wb25lbnRzIENvbmZpZ3VyYXRpb24iLAoiZXhpZjpDb21wcmVzc2VkQml0c1BlclBpeGVsIiA9PiAiQ29tcHJlc3NlZCBCaXRzIFBlciBQaXhlbCIsCiJleGlmOlBpeGVsWERpbWVuc2lvbiIgPT4gIlBpeGVsIFggRGltZW5zaW9uIiwKImV4aWY6UGl4ZWxZRGltZW5zaW9uIiA9PiAiUGl4ZWwgWSBEaW1lbnNpb24iLAoiZXhpZjpNYWtlck5vdGUiID0+ICJNYWtlciBOb3RlIiwKImV4aWY6VXNlckNvbW1lbnQiID0+ICJVc2VyIENvbW1lbnQiLAoiZXhpZjpSZWxhdGVkU291bmRGaWxlIiA9PiAiUmVsYXRlZCBTb3VuZCBGaWxlIiwKImV4aWY6RGF0ZVRpbWVPcmlnaW5hbCIgPT4gIkRhdGUgJiBUaW1lIG9mIE9yaWdpbmFsIiwKImV4aWY6RGF0ZVRpbWVEaWdpdGl6ZWQiID0+ICJEYXRlICYgVGltZSBEaWdpdGl6ZWQiLAoiZXhpZjpFeHBvc3VyZVRpbWUiID0+ICJFeHBvc3VyZSBUaW1lIiwKImV4aWY6Rk51bWJlciIgPT4gIkYgTnVtYmVyIiwKImV4aWY6RXhwb3N1cmVQcm9ncmFtIiA9PiAiRXhwb3N1cmUgUHJvZ3JhbSIsCiJleGlmOlNwZWN0cmFsU2Vuc2l0aXZpdHkiID0+ICJTcGVjdHJhbCBTZW5zaXRpdml0eSIsCiJleGlmOklTT1NwZWVkUmF0aW5ncyIgPT4gIklTTyBTcGVlZCBSYXRpbmdzIiwKImV4aWY6T0VDRiIgPT4gIk9wdG8tRWxlY3Ryb25pYyBDb252ZXJzaW9uIEZ1bmN0aW9uIiwKImV4aWY6U2h1dHRlclNwZWVkVmFsdWUiID0+ICJTaHV0dGVyIFNwZWVkIFZhbHVlIiwKImV4aWY6QXBlcnR1cmVWYWx1ZSIgPT4gIkFwZXJ0dXJlIFZhbHVlIiwKImV4aWY6QnJpZ2h0bmVzc1ZhbHVlIiA9PiAiQnJpZ2h0bmVzcyBWYWx1ZSIsCiJleGlmOkV4cG9zdXJlQmlhc1ZhbHVlIiA9PiAiRXhwb3N1cmUgQmlhcyBWYWx1ZSIsCiJleGlmOk1heEFwZXJ0dXJlVmFsdWUiID0+ICJNYXggQXBlcnR1cmUgVmFsdWUiLAoiZXhpZjpTdWJqZWN0RGlzdGFuY2UiID0+ICJTdWJqZWN0IERpc3RhbmNlIiwKImV4aWY6TWV0ZXJpbmdNb2RlIiA9PiAiTWV0ZXJpbmcgTW9kZSIsCiJleGlmOkxpZ2h0U291cmNlIiA9PiAiTGlnaHQgU291cmNlIiwKImV4aWY6Rmxhc2giID0+ICJGbGFzaCIsCiJleGlmOkZvY2FsTGVuZ3RoIiA9PiAiRm9jYWwgTGVuZ3RoIiwKImV4aWY6U3ViamVjdEFyZWEiID0+ICJTdWJqZWN0IEFyZWEiLAoiZXhpZjpGbGFzaEVuZXJneSIgPT4gIkZsYXNoIEVuZXJneSIsCiJleGlmOlNwYXRpYWxGcmVxdWVuY3lSZXNwb25zZSIgPT4gIlNwYXRpYWwgRnJlcXVlbmN5IFJlc3BvbnNlIiwKImV4aWY6Rm9jYWxQbGFuZVhSZXNvbHV0aW9uIiA9PiAiRm9jYWwgUGxhbmUgWCBSZXNvbHV0aW9uIiwKImV4aWY6Rm9jYWxQbGFuZVlSZXNvbHV0aW9uIiA9PiAiRm9jYWwgUGxhbmUgWSBSZXNvbHV0aW9uIiwKImV4aWY6Rm9jYWxQbGFuZVJlc29sdXRpb25Vbml0IiA9PiAiRm9jYWwgUGxhbmUgUmVzb2x1dGlvbiBVbml0IiwKImV4aWY6U3ViamVjdExvY2F0aW9uIiA9PiAiU3ViamVjdCBMb2NhdGlvbiIsCiJleGlmOlNlbnNpbmdNZXRob2QiID0+ICJTZW5zaW5nIE1ldGhvZCIsCiJleGlmOkZpbGVTb3VyY2UiID0+ICJGaWxlIFNvdXJjZSIsCiJleGlmOlNjZW5lVHlwZSIgPT4gIlNjZW5lIFR5cGUiLAoiZXhpZjpDRkFQYXR0ZXJuIiA9PiAiQ29sb3VyIEZpbHRlciBBcnJheSBQYXR0ZXJuIiwKImV4aWY6Q3VzdG9tUmVuZGVyZWQiID0+ICJDdXN0b20gUmVuZGVyZWQiLAoiZXhpZjpFeHBvc3VyZU1vZGUiID0+ICJFeHBvc3VyZSBNb2RlIiwKImV4aWY6V2hpdGVCYWxhbmNlIiA9PiAiV2hpdGUgQmFsYW5jZSIsCiJleGlmOkRpZ2l0YWxab29tUmF0aW8iID0+ICJEaWdpdGFsIFpvb20gUmF0aW8iLAoiZXhpZjpGb2NhbExlbmd0aEluMzVtbUZpbG0iID0+ICJGb2NhbCBMZW5ndGggSW4gMzVtbSBGaWxtIiwKImV4aWY6U2NlbmVDYXB0dXJlVHlwZSIgPT4gIlNjZW5lIENhcHR1cmUgVHlwZSIsCiJleGlmOkdhaW5Db250cm9sIiA9PiAiR2FpbiBDb250cm9sIiwKImV4aWY6Q29udHJhc3QiID0+ICJDb250cmFzdCIsCiJleGlmOlNhdHVyYXRpb24iID0+ICJTYXR1cmF0aW9uIiwKImV4aWY6U2hhcnBuZXNzIiA9PiAiU2hhcnBuZXNzIiwKImV4aWY6RGV2aWNlU2V0dGluZ0Rlc2NyaXB0aW9uIiA9PiAiRGV2aWNlIFNldHRpbmcgRGVzY3JpcHRpb24iLAoiZXhpZjpTdWJqZWN0RGlzdGFuY2VSYW5nZSIgPT4gIlN1YmplY3QgRGlzdGFuY2UgUmFuZ2UiLAoiZXhpZjpJbWFnZVVuaXF1ZUlEIiA9PiAiSW1hZ2UgVW5pcXVlIElEIiwKImV4aWY6R1BTVmVyc2lvbklEIiA9PiAiR1BTIFZlcnNpb24gSUQiLAoiZXhpZjpHUFNMYXRpdHVkZSIgPT4gIkdQUyBMYXRpdHVkZSIsCiJleGlmOkdQU0xvbmdpdHVkZSIgPT4gIkdQUyBMb25naXR1ZGUiLAoiZXhpZjpHUFNBbHRpdHVkZVJlZiIgPT4gIkdQUyBBbHRpdHVkZSBSZWZlcmVuY2UiLAoiZXhpZjpHUFNBbHRpdHVkZSIgPT4gIkdQUyBBbHRpdHVkZSIsCiJleGlmOkdQU1RpbWVTdGFtcCIgPT4gIkdQUyBUaW1lIFN0YW1wIiwKImV4aWY6R1BTU2F0ZWxsaXRlcyIgPT4gIkdQUyBTYXRlbGxpdGVzIiwKImV4aWY6R1BTU3RhdHVzIiA9PiAiR1BTIFN0YXR1cyIsCiJleGlmOkdQU01lYXN1cmVNb2RlIiA9PiAiR1BTIE1lYXN1cmUgTW9kZSIsCiJleGlmOkdQU0RPUCIgPT4gIkdQUyBEZWdyZWUgT2YgUHJlY2lzaW9uIiwKImV4aWY6R1BTU3BlZWRSZWYiID0+ICJHUFMgU3BlZWQgUmVmZXJlbmNlIiwKImV4aWY6R1BTU3BlZWQiID0+ICJHUFMgU3BlZWQiLAoiZXhpZjpHUFNUcmFja1JlZiIgPT4gIkdQUyBUcmFjayBSZWZlcmVuY2UiLAoiZXhpZjpHUFNUcmFjayIgPT4gIkdQUyBUcmFjayIsCiJleGlmOkdQU0ltZ0RpcmVjdGlvblJlZiIgPT4gIkdQUyBJbWFnZSBEaXJlY3Rpb24gUmVmZXJlbmNlIiwKImV4aWY6R1BTSW1nRGlyZWN0aW9uIiA9PiAiR1BTIEltYWdlIERpcmVjdGlvbiIsCiJleGlmOkdQU01hcERhdHVtIiA9PiAiR1BTIE1hcCBEYXR1bSIsCiJleGlmOkdQU0Rlc3RMYXRpdHVkZSIgPT4gIkdQUyBEZXN0aW5hdGlvbiBMYXRpdHVkZSIsCiJleGlmOkdQU0Rlc3RMb25naXR1ZGUiID0+ICJHUFMgRGVzdG5hdGlvbiBMb25naXR1ZGUiLAoiZXhpZjpHUFNEZXN0QmVhcmluZ1JlZiIgPT4gIkdQUyBEZXN0aW5hdGlvbiBCZWFyaW5nIFJlZmVyZW5jZSIsCiJleGlmOkdQU0Rlc3RCZWFyaW5nIiA9PiAiR1BTIERlc3RpbmF0aW9uIEJlYXJpbmciLAoiZXhpZjpHUFNEZXN0RGlzdGFuY2VSZWYiID0+ICJHUFMgRGVzdGluYXRpb24gRGlzdGFuY2UgUmVmZXJlbmNlIiwKImV4aWY6R1BTRGVzdERpc3RhbmNlIiA9PiAiR1BTIERlc3RpbmF0aW9uIERpc3RhbmNlIiwKImV4aWY6R1BTUHJvY2Vzc2luZ01ldGhvZCIgPT4gIkdQUyBQcm9jZXNzaW5nIE1ldGhvZCIsCiJleGlmOkdQU0FyZWFJbmZvcm1hdGlvbiIgPT4gIkdQUyBBcmVhIEluZm9ybWF0aW9uIiwKImV4aWY6R1BTRGlmZmVyZW50aWFsIiA9PiAiR1BTIERpZmZlcmVudGlhbCIsCgoic3REaW06dyIgPT4gIldpZHRoIiwKInN0RGltOmgiID0+ICJIZWlnaHQiLAoic3REaW06dW5pdCIgPT4gIlVuaXRzIiwKCiJ4YXBHSW1nOmhlaWdodCIgPT4gIkhlaWdodCIsCiJ4YXBHSW1nOndpZHRoIiA9PiAiV2lkdGgiLAoieGFwR0ltZzpmb3JtYXQiID0+ICJGb3JtYXQiLAoieGFwR0ltZzppbWFnZSIgPT4gIkltYWdlIiwKCiJzdEV2dDphY3Rpb24iID0+ICJBY3Rpb24iLAoic3RFdnQ6aW5zdGFuY2VJRCIgPT4gIkluc3RhbmNlIElEIiwKInN0RXZ0OnBhcmFtZXRlcnMiID0+ICJQYXJhbWV0ZXJzIiwKInN0RXZ0OnNvZnR3YXJlQWdlbnQiID0+ICJTb2Z0d2FyZSBBZ2VudCIsCiJzdEV2dDp3aGVuIiA9PiAiV2hlbiIsCgoic3RSZWY6aW5zdGFuY2VJRCIgPT4gIkluc3RhbmNlIElEIiwKInN0UmVmOmRvY3VtZW50SUQiID0+ICJEb2N1bWVudCBJRCIsCiJzdFJlZjp2ZXJzaW9uSUQiID0+ICJWZXJzaW9uIElEIiwKInN0UmVmOnJlbmRpdGlvbkNsYXNzIiA9PiAiUmVuZGl0aW9uIENsYXNzIiwKInN0UmVmOnJlbmRpdGlvblBhcmFtcyIgPT4gIlJlbmRpdGlvbiBQYXJhbWV0ZXJzIiwKInN0UmVmOm1hbmFnZXIiID0+ICJBc3NldCBNYW5hZ2VtZW50IFN5c3RlbSIsCiJzdFJlZjptYW5hZ2VyVmFyaWFudCIgPT4gIlBhcnRpY3VsYXIgVmFyaWFudCBvZiBBc3NldCBNYW5hZ2VtZW50IFN5c3RlbSIsCiJzdFJlZjptYW5hZ2VUbyIgPT4gIk1hbmFnZSBUbyIsCiJzdFJlZjptYW5hZ2VVSSIgPT4gIk1hbmFnZWQgUmVzb3VyY2UgVVJJIiwKCiJzdFZlcjpjb21tZW50cyIgPT4gIiIsCiJzdFZlcjpldmVudCIgPT4gIiIsCiJzdFZlcjptb2RpZnlEYXRlIiA9PiAiIiwKInN0VmVyOm1vZGlmaWVyIiA9PiAiIiwKInN0VmVyOnZlcnNpb24iID0+ICIiLAoKCgoic3RKb2I6bmFtZSIgPT4gIkpvYiBOYW1lIiwKInN0Sm9iOmlkIiA9PiAiVW5pcXVlIEpvYiBJRCIsCiJzdEpvYjp1cmwiID0+ICJVUkwgZm9yIEV4dGVybmFsIEpvYiBNYW5hZ2VtZW50IEZpbGUiLAoKLy8gRXhpZiBGbGFzaAoiZXhpZjpGaXJlZCIgPT4gIkZpcmVkIiwKImV4aWY6UmV0dXJuIiA9PiAiUmV0dXJuIiwKImV4aWY6TW9kZSIgPT4gIk1vZGUiLAoiZXhpZjpGdW5jdGlvbiIgPT4gIkZ1bmN0aW9uIiwKImV4aWY6UmVkRXllTW9kZSIgPT4gIlJlZCBFeWUgTW9kZSIsCgovLyBFeGlmIE9FQ0YvU0ZSCiJleGlmOkNvbHVtbnMiID0+ICJDb2x1bW5zIiwKImV4aWY6Um93cyIgPT4gIlJvd3MiLAoiZXhpZjpOYW1lcyIgPT4gIk5hbWVzIiwKImV4aWY6VmFsdWVzIiA9PiAiVmFsdWVzIiwKCi8vIEV4aWYgQ0ZBUGF0dGVybgoiZXhpZjpDb2x1bW5zIiA9PiAiQ29sdW1ucyIsCiJleGlmOlJvd3MiID0+ICJSb3dzIiwKImV4aWY6VmFsdWVzIiA9PiAiVmFsdWVzIiwKCgovLyBFeGlmIERldmljZVNldHRpbmdzCiJleGlmOkNvbHVtbnMiID0+ICJDb2x1bW5zIiwKImV4aWY6Um93cyIgPT4gIlJvd3MiLAoiZXhpZjpTZXR0aW5ncyIgPT4gIlNldHRpbmdzIiwKCgoKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBFbmQgb2YgR2xvYmFsIFZhcmlhYmxlOiAgICAgWE1QX3RhZ19jYXB0aW9ucwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKPz4=');
expand_3537250845($outputDir, 'includes/toolkit/baseexifheader.dat', 'YToxOntpOjA7YTo0OntzOjc6IlNlZ1R5cGUiO2k6MjI1O3M6NzoiU2VnTmFtZSI7czo0OiJBUFAxIjtzOjc6IlNlZ0Rlc2MiO3M6NTI6IkFwcGxpY2F0aW9uIEZpZWxkIDEgKEFQUDEpIC0gdXN1YWxseSBFWElGIG9yIFhNUC9SREYiO3M6NzoiU2VnRGF0YSI7czoxNDY6IkV4aWYAAElJKgAIAAAAAQAliAQAAQAAABoAAAAAAAAABQAAAAEABAAAAAIAAAABAAIABAAAAE4AAAACAAUAAwAAAFwAAAADAAIABAAAAEUAAAAEAAUAAwAAAHQAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAQJwAAAAAAAAEAAAAAAAAAAQAAAAAAAABkAAAAIjt9fQ==');
expand_3537250845($outputDir, 'includes/toolkit/pjmt_utils.php', 'PD9waHAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRmlsZW5hbWU6ICAgICBwam10X3V0aWxzLnBocAoqCiogRGVzY3JpcHRpb246ICBQcm92aWRlcyB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgdG9vbGtpdAoqCiogQXV0aG9yOiAgICAgICBFdmFuIEh1bnRlcgoqCiogRGF0ZTogICAgICAgICAyMC8xLzIwMDUKKgoqIFByb2plY3Q6ICAgICAgSlBFRyBNZXRhZGF0YQoqCiogUmV2aXNpb246ICAgICAxLjExCioKKiBOT1RFOiAgICAgICAgIFRoaXMgZmlsZSB3aWxsIGNoYW5nZSB3aXRoIGV2ZXJ5IHJldmlzaW9uIHVwZGF0ZSwgaGVuY2Ugd2lsbCBub3QKKiAgICAgICAgICAgICAgIGJlIHNob3duIGluIHRoZSBjaGFuZ2VzIGxpc3QKKgoqIFVSTDogICAgICAgICAgaHR0cDovL2VsZWN0cm9uaWNzLm96aGlrZXIuY29tCioKKiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCBFdmFuIEh1bnRlciAyMDA0CioKKiBMaWNlbnNlOiAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBQSFAgSlBFRyBNZXRhZGF0YSBUb29sa2l0LgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuCiogICAgICAgICAgICAgICByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiogICAgICAgICAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKiAgICAgICAgICAgICAgIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCiogICAgICAgICAgICAgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoqCiogICAgICAgICAgICAgICBUaGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZQoqICAgICAgICAgICAgICAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0CiogICAgICAgICAgICAgICBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiogICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiogICAgICAgICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgoqCiogICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKiAgICAgICAgICAgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUEhQIEpQRUcgTWV0YWRhdGEgVG9vbGtpdDsgaWYgbm90LAoqICAgICAgICAgICAgICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCiogICAgICAgICAgICAgICBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKgoqICAgICAgICAgICAgICAgSWYgeW91IHJlcXVpcmUgYSBkaWZmZXJlbnQgbGljZW5zZSBmb3IgY29tbWVyY2lhbCBvciBvdGhlcgoqICAgICAgICAgICAgICAgcHVycG9zZXMsIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3I6IGV2YW5Ab3poaWtlci5jb20KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRnVuY3Rpb246ICAgICBnZXRfcmVsYXRpdmVfcGF0aAoqCiogRGVzY3JpcHRpb246ICBDcmVhdGVzIGEgcmVsYXRpdmUgcGF0aCB2ZXJzaW9uIG9mIGEgZmlsZSBvciBkaXJlY3Rpcm95IG5hbWUsCiogICAgICAgICAgICAgICBnaXZlbiBhIGRpcmVjdG9yeSB0aGF0IGl0IHdpbGwgYmUgcmVsYXRpdmUgdG8uCioKKiBQYXJhbWV0ZXJzOiAgIHRhcmdldCAtIGEgZmlsZSBvciBkaXJlY3RvcnkgbmFtZSB3aGljaCB3aWxsIGJlIG1hZGUgcmVsYXRpdmUKKiAgICAgICAgICAgICAgIGZyb21kaXIgLSB0aGUgZGlyZWN0b3J5IHdoaWNoIHRoZSByZXR1cm5lZCBwYXRoIGlzIHJlbGF0aXZlIHRvCioKKiBSZXR1cm5zOiAgICAgIG91dHB1dCAtIHRoZSByZWxhdGl2ZSBwYXRoCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZnVuY3Rpb24gZ2V0X3JlbGF0aXZlX3BhdGgoICR0YXJnZXQsICRmcm9tZGlyICkKewogICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGZyb21kaXIgaGFzIGEgdHJhaWxpbmcgc2xhc2gsIG90aGVyd2lzZSByZWFscGF0aCB3aWxsCiAgICAgICAgLy8gc3RyaXAgdGhlIGxhc3QgZGlyZWN0b3J5IG5hbWUgb2ZmCiAgICAgICAgaWYgKCAoICRmcm9tZGlyWyBzdHJsZW4oICRmcm9tZGlyICkgLSAxIF0gIT0gIlxcIiApICYmCiAgICAgICAgICAgICAoICRmcm9tZGlyWyBzdHJsZW4oICRmcm9tZGlyICkgLSAxIF0gIT0gIi8iICkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgICRmcm9tZGlyIC49ICIvIjsKICAgICAgICB9CgogICAgICAgIC8vIGdldCBhIHJlYWwgZGlyZWN0b3J5IG5hbWUgZm9yIGVhY2ggb2YgdGhlIHRhcmdldCBhbmQgZnJvbSBkaXJlY3RvcnkKICAgICAgICAkZnJvbSA9IHJlYWxwYXRoKCAkZnJvbWRpciApOwogICAgICAgICR0YXJnZXQgPSByZWFscGF0aCggJHRhcmdldCApOwogICAgICAgICR0byA9IGRpcm5hbWUoICR0YXJnZXQgICk7CgogICAgICAgIC8vIENhbid0IGdldCByZWxhdGl2ZSBwYXRoIHdpdGggZHJpdmUgaW4gcGF0aCAtIHJlbW92ZSBpdAogICAgICAgIGlmICggKCAkY29sb25wb3MgPSBzdHJwb3MoICR0YXJnZXQsICI6IiApICkgIT0gRkFMU0UgKQogICAgICAgIHsKICAgICAgICAgICAgICAgICR0YXJnZXQgPSBzdWJzdHIoICR0YXJnZXQsICRjb2xvbnBvcysxICk7CiAgICAgICAgfQogICAgICAgIGlmICggKCAkY29sb25wb3MgPSBzdHJwb3MoICRmcm9tLCAiOiIgKSApICE9IEZBTFNFICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkZnJvbSA9IHN1YnN0ciggJGZyb20sICRjb2xvbnBvcysxICk7CiAgICAgICAgfQogICAgICAgIGlmICggKCAkY29sb25wb3MgPSBzdHJwb3MoICR0bywgIjoiICkgKSAhPSBGQUxTRSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJHRvID0gc3Vic3RyKCAkdG8sICRjb2xvbnBvcysxICk7CiAgICAgICAgfQoKCiAgICAgICAgJHBhdGggPSAiLi4vIjsKICAgICAgICAkcG9zdmFsID0gMDsKICAgICAgICAvLyBTdGVwIHRocm91Z2ggdGhlIHBhdGhzIHVudGlsIGEgZGlmZmVyZW5jZSBpcyBmb3VuZCAoaWdub3JlIHNsYXNoLCBiYWNrc2xhc2ggZGlmZmVyZW5jZXMKICAgICAgICAvLyBvciB0aGUgZW5kIG9mIG9uZSBpcyBmb3VuZAogICAgICAgIHdoaWxlICggKCAoICRmcm9tWyRwb3N2YWxdID09ICR0b1skcG9zdmFsXSApIHx8CiAgICAgICAgICAgICAgICAgICggKCAkZnJvbVskcG9zdmFsXSA9PSAiXFwiICkgJiYgKCAkdG9bJHBvc3ZhbF0gPT0gIi8iICkgKSB8fAogICAgICAgICAgICAgICAgICAoICggJGZyb21bJHBvc3ZhbF0gPT0gIi8iICkgJiYgKCAkdG9bJHBvc3ZhbF0gPT0gIlxcIiApICkgKSAmJgogICAgICAgICAgICAgICAgKCAkZnJvbVskcG9zdmFsXSAmJiAkdG9bJHBvc3ZhbF0gKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgJHBvc3ZhbCsrOwogICAgICAgIH0KICAgICAgICAvLyBTYXZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgZGlmZmVyZW5jZQogICAgICAgICRkaWZmcG9zID0gJHBvc3ZhbDsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yaWVzIGFyZSB0aGUgc2FtZSBvcgogICAgICAgIC8vIHRoZSBpZiB0YXJnZXQgaXMgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGZyb21kaXIKICAgICAgICBpZiAoICggISAkZnJvbVskcG9zdmFsXSApICYmCiAgICAgICAgICAgICAoICR0b1skcG9zdmFsXSA9PSAiLyIgfHwgJHRvWyRwb3N2YWxdID09ICJcXCIgfHwgISR0b1skcG9zdmFsXSApICkKICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyB0YXJnZXQgaXMgaW4gZnJvbWRpciBvciBhIHN1YmRpcmVjdG9yeQogICAgICAgICAgICAgICAgLy8gQnVpbGQgcmVsYXRpdmUgcGF0aCBzdGFydGluZyB3aXRoIGEgLi8KICAgICAgICAgICAgICAgIHJldHVybiAoICIuLyIgLiBzdWJzdHIoICR0YXJnZXQsICRwb3N2YWwrMSwgc3RybGVuKCAkdGFyZ2V0ICkgKSApOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIG91dHNpZGUgdGhlIGZyb21kaXIgYnJhbmNoCiAgICAgICAgICAgICAgICAvLyBmaW5kIG91dCBob3cgbWFueSAiLi4vIidzIGFyZSBuZWNlc3NhcnkKICAgICAgICAgICAgICAgIC8vIFN0ZXAgdGhyb3VnaCB0aGUgZnJvbWRpciBwYXRoLCBjaGVja2luZyBmb3Igc2xhc2hlcwogICAgICAgICAgICAgICAgLy8gZWFjaCBzbGFzaCBlbmNvdW50ZXJlZCByZXF1aXJlcyBhICIuLi8iCiAgICAgICAgICAgICAgICB3aGlsZSAoICRmcm9tWysrJHBvc3ZhbF0gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3Igc2xhc2gKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoICRmcm9tWyRwb3N2YWxdID09ICIvIiApIHx8ICggJGZyb21bJHBvc3ZhbF0gPT0gIlxcIiApICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgc2xhc2gsIGFkZCBhICIuLi8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhdGggLj0gIi4uLyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTZWFyY2ggYmFja3dhcmRzIHRvIGZpbmQgd2hlcmUgdGhlIGZpcnN0IGNvbW1vbiBkaXJlY3RvcnkKICAgICAgICAgICAgICAgIC8vIGFzIHNvbWUgbGV0dGVycyBpbiB0aGUgZmlyc3QgZGlmZmVyZW50IGRpcmVjdG9yeSBuYW1lcwogICAgICAgICAgICAgICAgLy8gbWF5IGhhdmUgYmVlbiB0aGUgc2FtZQogICAgICAgICAgICAgICAgJGRpZmZwb3MtLTsKICAgICAgICAgICAgICAgIHdoaWxlICggKCAkdG9bJGRpZmZwb3NdICE9ICIvIiApICYmICggJHRvWyRkaWZmcG9zXSAhPSAiXFwiICkgJiYgJHRvWyRkaWZmcG9zXSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkaWZmcG9zLS07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBCdWlsZCByZWxhdGl2ZSBwYXRoIHRvIHJldHVybgoKICAgICAgICAgICAgICAgIHJldHVybiAoICRwYXRoIC4gc3Vic3RyKCAkdGFyZ2V0LCAkZGlmZnBvcysxLCBzdHJsZW4oICR0YXJnZXQgKSApICk7CiAgICAgICAgfQp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRW5kIG9mIEZ1bmN0aW9uOiAgICAgZ2V0X3JlbGF0aXZlX3BhdGgKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCj8+');
expand_3537250845($outputDir, 'mapItemEdit.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCgovKioKICogQHBhY2thZ2UgbWFwCiAqIEBhdXRob3IgRXJpYyBIIERhbmllbCA8ZWhkYW5pZWxAZ21haWwuY29tPgogKiBAdmVyc2lvbiAkUmV2aXNpb246IDE1NzYgJAogKgogKi8KCkdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBIZWxwZXIuY2xhc3MnKTsKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL21hcC9jbGFzc2VzL0dvb2dsZU1hcFV0aWxpdGllcy5jbGFzcycpOwoKLyoqCiAqIFRoaXMgY29udHJvbGxlciB3aWxsIGhhbmRsZSBhc3NpZ25pbmcgdmFsdWVzIHRvIGN1c3RvbSBmaWVsZHMKICoKICogQHBhY2thZ2UgbWFwCiAqIEBzdWJwYWNrYWdlIFVzZXJJbnRlcmZhY2UKICoKICovCmNsYXNzIG1hcEl0ZW1FZGl0IGV4dGVuZHMgSXRlbUVkaXRQbHVnaW4gewoKICAgIC8qKgogICAgICogQHNlZSBJdGVtRWRpdFBsdWdpbjo6aGFuZGxlUmVxdWVzdAogICAgICovCiAgICBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KCRmb3JtLCAmJGl0ZW0sICYkcHJlZmVycmVkKSB7CglnbG9iYWwgJGdhbGxlcnk7CgkkZ3VybCA9JiAkZ2FsbGVyeS0+Z2V0VXJsR2VuZXJhdG9yKCk7CgoJJHN0YXR1cyA9IG51bGw7CgkkZXJyb3IgPSBhcnJheSgpOwoJbGlzdCAoJHJldCwgJG1vZHVsZSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZFBsdWdpbignbW9kdWxlJywgJ21hcCcpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsLCBudWxsLCBudWxsKTsKCX0KCglpZiAoaXNzZXQoJGZvcm1bJ2FjdGlvbiddWydzYXZlJ10pKSB7CgkgICAgLyogZXJyb3IgY29udHJvbCAqLwoJICAgIC8qCgkgICAgICogaGVhZGluZyBjYW4gYmUgKy8tIDE4MCBkZWdyZWVzCgkgICAgICogdGlsdCBjYW4gYmUgMC05MCBkZWdyZWVzCgkgICAgICogcmFuZ2UgY2FuIGJlIDAtNjM3MTAwMDAgbQoJICAgICAqLwoJICAgICRoZWFkaW5ncmVnZXggPSAnWy0rXT8oKDE4MChcLjAqKT8pfCgoMVswLTddfFswLTldKT8nCgkgICAgCQkgICAgLiAnWzAtOV0oXC5bMC05XXswLDIwfSk/KXwoXC5bMC05XXsxLDE5fSkpJzsKCSAgICAkdGlsdHJlZ2V4ID0gJygoOTAoXC4wKik/KXwoWzAtOF0/WzAtOV0oXC5bMC05XXswLDIwfSk/KXwoXC5bMC05XXsxLDE5fSkpPyc7CgkgICAgJHJhbmdlcmVnZXggPSAnKFswLTldezAsOH0pJzsKCSAgICAvKiBsYXRpdHVkZSBjYW4gYmUgKy8tIDkwIGRlZ3JlZXMsIGxvbmdpdHVkZSBjYW4gYmUgKy8tIDE4MCBkZWdyZWVzICovCgkgICAgJGxhdHJlZ2V4PSdbLStdPycgLiAkdGlsdHJlZ2V4OwoJICAgICRsb25yZWdleCA9ICRoZWFkaW5ncmVnZXg7CgkgICAgaWYgKCFwcmVnX21hdGNoKCcvXignIC4gJGxhdHJlZ2V4IC4gJyhcMDQwKSosKFwwNDApKicgLiAkbG9ucmVnZXgKCQkJICAgIC4gJyk/JC8nLCB0cmltKCRmb3JtWydmaWVsZHMnXVsnR1BTJ10pKSkgewoJCSRzdGF0dXMgPSAnPHNwYW4gY2xhc3M9ImdpRXJyb3IiPicKCQkJICAuICRtb2R1bGUtPnRyYW5zbGF0ZSgnQmFkIGNvb3JkaW5hdGVzLCBwbGVhc2UgdmVyaWZ5JykgLiAnPC9zcGFuPic7CgkgICAgfSBlbHNlIGlmICghcHJlZ19tYXRjaCgnL14oJyAuICRoZWFkaW5ncmVnZXggLiAnKChcMDQwKSosKFwwNDApKicKCQkgICAgLiAkdGlsdHJlZ2V4IC4gJygoXDA0MCkqLChcMDQwKSonIC4gJHJhbmdlcmVnZXggLiAnKT8pPyk/JC8nLAoJCSAgICB0cmltKCRmb3JtWydmaWVsZHMnXVsnR0VMb29rQXQnXSkpKSB7CgkJJHN0YXR1cyA9ICc8c3BhbiBjbGFzcz0iZ2lFcnJvciI+JwoJCQkuICRtb2R1bGUtPnRyYW5zbGF0ZSgnQmFkIExvb2tBdCBwYXJhbWV0ZXJzLCBwbGVhc2UgdmVyaWZ5JykgLiAnPC9zcGFuPic7CgkgICAgfSBlbHNlIHsKCQkvKiBjbGVhbnVwIHRoZSBjb29yZGluYXRlcyBvZiBhbnkgc3BhY2VzICovCgkJaWYgKCRmb3JtWydmaWVsZHMnXVsnR1BTJ10gIT0gJycpIHsKCQkgICAgJGZvcm1bJ2ZpZWxkcyddWydHUFMnXSA9IHN0cl9yZXBsYWNlKCcgJywgJycsIHRyaW0oJGZvcm1bJ2ZpZWxkcyddWydHUFMnXSkpOwoJCX0KCQlpZiAoJGZvcm1bJ2ZpZWxkcyddWydHRUxvb2tBdCddICE9ICcnKSB7CgkJICAgICRmb3JtWydmaWVsZHMnXVsnR0VMb29rQXQnXSA9CgkJCXN0cl9yZXBsYWNlKCcgJywgJycsIHRyaW0oJGZvcm1bJ2ZpZWxkcyddWydHRUxvb2tBdCddKSk7CgkJfQoKCQlpZiAoKCRmb3JtWydmaWVsZHMnXVsnWm9vbUxldmVsJ10gIT0gJycpIGFuZCAoJGZvcm1bJ2ZpZWxkcyddWydab29tTGV2ZWwnXSA9PSAwKSkgewoJCSAgICAkZm9ybVsnZmllbGRzJ11bJ1pvb21MZXZlbCddID0gJzAuMCc7CgkJfQoKCQkkcmV0ID0gbWFwSGVscGVyOjpzYXZlRmllbGRWYWx1ZXMoJGl0ZW0sICRmb3JtWydmaWVsZHMnXSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKTsKCQl9CgkJJHN0YXR1cyA9ICRtb2R1bGUtPnRyYW5zbGF0ZSgnQ2hhbmdlcyBzYXZlZCBzdWNjZXNzZnVsbHknKTsKCSAgICB9Cgl9IGVsc2UgaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnZ2V0ZXhpZiddKSkgewoKCSAgICAkZm9ybVsnZmllbGRzJ11bJ0dQUyddID0gJGZvcm1bJ2V4aWYnXTsKCSAgICAkcmV0ID0gbWFwSGVscGVyOjpzYXZlRmllbGRWYWx1ZXMoJGl0ZW0sICRmb3JtWydmaWVsZHMnXSk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsLCBudWxsLCBudWxsKTsKCSAgICB9CgkgICAgbGlzdCAoJHJldCwgJG1vZHVsZSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZFBsdWdpbignbW9kdWxlJywgJ21hcCcpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCwgbnVsbCwgbnVsbCk7CgkgICAgfQoKCSAgICAkc3RhdHVzID0gJG1vZHVsZS0+dHJhbnNsYXRlKCdHUFMgY29vcmRpbmF0ZXMgc3VjY2Vzc2Z1bGx5IGVudGVyZWQgYW5kIHNhdmVkJyk7CgoJfSBlbHNlIGlmIChpc3NldCgkZm9ybVsnYWN0aW9uJ11bJ3NldGV4aWYnXSkpIHsKCSAgICAvKiBXcml0ZSB0aGUgR1BTIGNvb3JkaW5hdGVzIHRvIHRoZSBFWElGIGhlYWRlciAqLwoJICAgIC8qIEdldCB0aGUgY29vcmRpbmF0ZXMgZnJvbSB0aGUgZmllbGQgKi8KCSAgICBpZiAoJGZvcm1bJ2ZpZWxkcyddWydHUFMnXSAhPSAnJykgewoJCSRjb29yZGluYXRlcyA9ICRmb3JtWydmaWVsZHMnXVsnR1BTJ107CgogICAgICAgICAgICAgICAgbGlzdCAoJHJldCwgJGVycm9yLCAkc3RhdHVzLCAkb3RoZXIpID0gR29vZ2xlTWFwVXRpbGl0aWVzOjpzZXRHUFNDb29yZHNJbkV4aWYoJGl0ZW0sICRjb29yZGluYXRlcywgdHJ1ZSk7CgkgICAgICAgIGlmICgkcmV0KSB7CgkJICAgcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCwgbnVsbCwgbnVsbCk7CgkgICAgICAgIH0KCSAgICB9IGVsc2UgewoJCSRlcnJvcltdID0gJ2Zvcm1bZXJyb3JdW2dwc11bbWlzc2luZ0dQU0Nvb3JkaW5hdGVzXSc7CgkgICAgfQoJfQoJcmV0dXJuIGFycmF5KG51bGwsICRlcnJvciwgJHN0YXR1cywgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBJdGVtRWRpdFBsdWdpbjo6bG9hZFRlbXBsYXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxvYWRUZW1wbGF0ZSgmJHRlbXBsYXRlLCAmJGZvcm0sICRpdGVtLCAkdGh1bWJuYWlsKSB7CglpZiAoJGZvcm1bJ2Zvcm1OYW1lJ10gIT0gJ21hcEl0ZW1FZGl0JykgewoJICAgICRmb3JtWydmb3JtTmFtZSddID0gJ21hcEl0ZW1FZGl0JzsKCSAgICAkZm9ybVsnaXRlbUlkJ10gPSAkaXRlbS0+Z2V0SWQoKTsKCX0KCglsaXN0ICgkcmV0LCAkZm9ybVsnZXhpZiddKSA9IEdvb2dsZU1hcFV0aWxpdGllczo6Z2V0R1BTQ29vcmRzRnJvbUV4aWYoJGl0ZW0pOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldC0+d3JhcChfX0ZJTEVfXywgX19MSU5FX18pLCBudWxsLCBudWxsKTsKCX0KCWlmICgkZm9ybVsnZXhpZiddID09IG51bGwpIHsKCSAgICAkZm9ybVsnbm9leGlmJ10gPSAxOwoJfQoKCS8qIEdldCB0aGUgQVBJIGtleSBmb3IgdGhlIGN1cnJlbnQgVVJMICovCglsaXN0ICgkcmV0LCAkZm9ybVsnYXBpS2V5J10pID0gbWFwSGVscGVyOjpmZXRjaEFwaUtleSgpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldCwgbnVsbCwgbnVsbCk7Cgl9CgoJJHR5cGUgPSBHYWxsZXJ5VXRpbGl0aWVzOjppc0EoJGl0ZW0sICdHYWxsZXJ5QWxidW1JdGVtJykgPyAnQWxidW1MZWdlbmQnIDogJ1Bob3RvTGVnZW5kJzsKCglsaXN0ICgkcmV0LCAkTGVnZW5kRW5hYmxlKSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAkdHlwZSk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiBhcnJheSgkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwsIG51bGwpOwoJfQoKCWlmICgkTGVnZW5kRW5hYmxlKSB7CgkgICAgbGlzdCAoJHJldCwkTGVnZW5kcykgPSBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJHR5cGUgLiAncycpOwoJfQoKCSRzZXQgPSAoR2FsbGVyeVV0aWxpdGllczo6aXNBKCRpdGVtLCAnR2FsbGVyeUFsYnVtSXRlbScpKQoJCT8gJ2FsYnVtJwoJCTogKChHYWxsZXJ5VXRpbGl0aWVzOjppc0EoJGl0ZW0sICdHYWxsZXJ5UGhvdG9JdGVtJykpID8gJ3Bob3RvJyA6ICdjb21tb24nKTsKCWxpc3QgKCRyZXQsICR0bXAsICRwYXJhbSwgJGlzQ29udGFpbmVyU2V0dGluZ3MpID0KCSAgICBtYXBIZWxwZXI6OmZldGNoRmllbGRWYWx1ZXMoYXJyYXkoJGl0ZW0pLCBudWxsLCAkc2V0KTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQtPndyYXAoX19GSUxFX18sIF9fTElORV9fKSwgbnVsbCwgbnVsbCk7Cgl9CgkkZm9ybVsnZmllbGRzJ10gPSAkdG1wWyRpdGVtLT5nZXRJZCgpXTsKCWZvcmVhY2ggKGFycmF5KCdjb21tb24nID0+IDEsICRzZXQgPT4gMSkgYXMgJHMgPT4gJHRtcCkgewoJICAgIGZvcmVhY2ggKCRwYXJhbVskaXRlbS0+Z2V0SWQoKV1bJHNdIGFzICRpdCkgewoJCWlmICghZW1wdHkoJGl0WydjaG9pY2VzJ10pKSB7CgkJICAgICRmb3JtWydjaG9pY2VzJ11bJGl0WydmaWVsZCddXSA9ICRpdFsnY2hvaWNlcyddOwoJCX0KCSAgICB9Cgl9CglpZiAoJHNldCA9PSAnYWxidW0nKSB7CgkgICAgJGZvcm1bJ2FkbWluRmxhZyddID0gJGlzQ29udGFpbmVyU2V0dGluZ3NbJGl0ZW0tPmdldElkKCldID8gMSA6IDI7Cgl9CgkkdHBsID0gJ21vZHVsZXMvbWFwL3RlbXBsYXRlcy9tYXBJdGVtRWRpdC50cGwnOwoJJHRlbXBsYXRlLT5zZXRWYXJpYWJsZSgnY29udHJvbGxlcicsICdtYXAubWFwSXRlbUVkaXQnKTsKCQoJLyogQWRkIHN0dWZmIGZvciB0aGUgaGVscCBzeXN0ZW0gKi8KCSRmb3JtWydwaWNiYXNlJ10gPSBHYWxsZXJ5VXRpbGl0aWVzOjpjb252ZXJ0UGF0aFRvVXJsKHN1YnN0cihkaXJuYW1lKF9fRklMRV9fKSwwLC0xMSkpLiAnbW9kdWxlcy9tYXAvaW1hZ2VzLyc7CglsaXN0KCRyZXQsICRmb3JtWydVc2VySGVscCddKSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnVXNlckhlbHAnKTsKICAgICRtc2llID0gJy9tc2llXHMoNVwuWzUtOV18WzYtOV1cLlswLTldKikuKih3aW4pL2knOwoKICAgIGlmICghaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSB8fCAhcHJlZ19tYXRjaCgkbXNpZSwgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKQoJICAgIHx8IHByZWdfbWF0Y2goJy9vcGVyYS9pJywgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgewoJJGZvcm1bJ0lFJ10gPSBmYWxzZTsKICAgIH0KICAgIGVsc2UgewoJJGZvcm1bJ0lFJ10gPSB0cnVlOwogICAgfQoJCglyZXR1cm4gYXJyYXkobnVsbCwgJHRwbCwgJ21vZHVsZXNfbWFwJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIEl0ZW1FZGl0UGx1Z2luOjppc1N1cHBvcnRlZAogICAgICovCiAgICBmdW5jdGlvbiBpc1N1cHBvcnRlZCgkaXRlbSwgJHRodW1ibmFpbCkgewoKCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHBlcm1pc3Npb24gZG8gZWRpdCB0aGUgZ29vZ2xlIG1hcCBvcHRpb24gb2YgdGhpcyBpdGVtICovCgkkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OmFzc2VydEhhc0l0ZW1QZXJtaXNzaW9uKCRpdGVtLT5nZXRJZCgpLCAnbWFwLkVkaXRNYXAnKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGZhbHNlOwoJfQoKCWlmIChHYWxsZXJ5VXRpbGl0aWVzOjppc0EoJGl0ZW0sICdHYWxsZXJ5QWxidW1JdGVtJykpIHsKCSAgICByZXR1cm4gdHJ1ZTsKCX0KCWxpc3QgKCRyZXQsICRwYXJhbSkgPSBtYXBIZWxwZXI6OmxvYWRQYXJhbWV0ZXJzKCRpdGVtLT5nZXRQYXJlbnRJZCgpKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGZhbHNlOwoJfQoJaWYgKCFlbXB0eSgkcGFyYW1bJ2NvbW1vbiddKQoJCXx8IChHYWxsZXJ5VXRpbGl0aWVzOjppc0EoJGl0ZW0sICdHYWxsZXJ5UGhvdG9JdGVtJykgJiYgIWVtcHR5KCRwYXJhbVsncGhvdG8nXSkpKSB7CgkgICAgcmV0dXJuIHRydWU7Cgl9CgoJcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBJdGVtRWRpdFBsdWdpbjo6Z2V0VGl0bGUKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0VGl0bGUoKSB7CglnbG9iYWwgJGdhbGxlcnk7CglsaXN0ICgkcmV0LCAkbW9kdWxlKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkUGx1Z2luKCdtb2R1bGUnLCAnbWFwJyk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyk7Cgl9CglyZXR1cm4gYXJyYXkobnVsbCwgJG1vZHVsZS0+dHJhbnNsYXRlKCdHb29nbGUgTWFwJykpOwogICAgfQp9Cj8+Cg==');
expand_3537250845($outputDir, 'module.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCi8qKgogKiBAcGFja2FnZSBtYXAKICogQGF1dGhvciBTdGV2ZW4gTi4gU2V2ZXJpbmdoYXVzIDxzbnNAc2V2ZXJpbmdoYXVzLm9yZz4KICogQHZlcnNpb24gJFJldmlzaW9uOiAxNTkyICQKICoKICogVGhpcyBpcyBzb21lIG9mIHRoZSB1Z2xpZXN0IGNvZGUgSSd2ZSBldmVyIHdyaXR0ZW4uIFBsZWFzZSBkbyBub3QKICoganVkZ2UgbWUgYnkgaXQuIDopCiAqCiAqLwoKLyoqCiAqIE1hcAogKgogKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBHb29nbGUgTWFwIGZvciBHYWxsZXJ5IGl0ZW1zLgogKgogKiBAcGFja2FnZSBtYXAKICovCmNsYXNzIG1hcE1vZHVsZSBleHRlbmRzIEdhbGxlcnlNb2R1bGUgewoKICAgIGZ1bmN0aW9uIG1hcE1vZHVsZSgpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCSR0aGlzLT5zZXRJZCgnbWFwJyk7CgkkdGhpcy0+c2V0TmFtZSgkZ2FsbGVyeS0+aTE4bignR29vZ2xlIE1hcCBNb2R1bGUnKSk7CgkkdGhpcy0+c2V0RGVzY3JpcHRpb24oJGdhbGxlcnktPmkxOG4oJ1Nob3cgaXRlbXMgb24gYSBkeW5hbWljIEdvb2dsZSBNYXAnKSk7CgkkdGhpcy0+c2V0VmVyc2lvbignMC41LjgnKTsKCSR0aGlzLT5zZXRHcm91cCgnZ2FsbGVyeScsICRnYWxsZXJ5LT5pMThuKCdHYWxsZXJ5JykpOwoJJHRoaXMtPnNldENhbGxiYWNrcygncmVnaXN0ZXJFdmVudExpc3RlbmVyc3xnZXRTaXRlQWRtaW5WaWV3c3xnZXRJdGVtU3VtbWFyaWVzJwoJCQkgICAgLiAnfGdldEl0ZW1MaW5rcycpOwoJJHRoaXMtPnNldFJlcXVpcmVkQ29yZUFwaShhcnJheSg3LCAwKSk7CgkkdGhpcy0+c2V0UmVxdWlyZWRNb2R1bGVBcGkoYXJyYXkoMywgMCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5TW9kdWxlOjpyZWdpc3RlckV2ZW50TGlzdGVuZXJzKCkKICAgICAqLwogICAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudExpc3RlbmVycygpIHsKCUdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBIZWxwZXIuY2xhc3MnKTsKCUdhbGxlcnlDb3JlQXBpOjpyZWdpc3RlckV2ZW50TGlzdGVuZXIoJ0dhbGxlcnlFbnRpdHk6OmRlbGV0ZScsIG5ldyBtYXBIZWxwZXIoKSk7CglHYWxsZXJ5Q29yZUFwaTo6cmVnaXN0ZXJFdmVudExpc3RlbmVyKCdHYWxsZXJ5RW50aXR5OjpzYXZlJywgbmV3IG1hcEhlbHBlcigpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBuZWVkc0NvbmZpZ3VyYXRpb24oKSB7CglHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvbWFwSGVscGVyLmNsYXNzJyk7CiAgICAJLyogVGhpcyBtb2R1bGUgcmVxdWlyZXMgYSBHb29nbGUgTWFwIEFQSSBrZXkuICovCglsaXN0ICgkcmV0LCAkcHJvZmlsZXMpID0gbWFwSGVscGVyOjpnZXRBbGxLZXlQcm9maWxlcygpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkoJHJldCwgbnVsbCk7Cgl9CglyZXR1cm4gYXJyYXkobnVsbCwgZW1wdHkoJHByb2ZpbGVzKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlNb2R1bGU6OmF1dG9Db25maWd1cmUKICAgICAqLwogICAgZnVuY3Rpb24gYXV0b0NvbmZpZ3VyZSgpIHsKCglsaXN0ICgkcmV0LCAkbmVlZHNDb25maWd1cmF0aW9uKSA9ICR0aGlzLT5uZWVkc0NvbmZpZ3VyYXRpb24oKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQsIGZhbHNlKTsKCX0KCglpZiAoISRuZWVkc0NvbmZpZ3VyYXRpb24pIHsKCSAgICByZXR1cm4gYXJyYXkobnVsbCwgdHJ1ZSk7Cgl9CgoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdtYXBXaWR0aCcsIDYwMCk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ21hcEhlaWdodCcsIDQwMCk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ2NlbnRlckxvbmdMYXQnLCAnMCwwJyk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ3pvb21MZXZlbCcsIDApOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICd6b29tSW5MZXZlbCcsIDUpOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdtYXBUeXBlJywgJ0dfTk9STUFMX01BUCcpOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdzaG93Wm9vbVNjYWxlJywgMCk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ3Nob3dNYXBUeXBlJywgMSk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ3Nob3dab29tTGlua3MnLCAwKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnc2hvd0l0ZW1TdW1tYXJpZXMnLCAxKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnc2hvd0l0ZW1EZXNjcmlwdGlvbnMnLCAwKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAncmVncm91cEFsYnVtcycsIDApOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdyZWdyb3VwSXRlbXMnLCAwKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAncmVncm91cERpc3QnLCAxNSk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ3JlZ3JvdXBJY29uJywgJ3pvb20taW4tdHJhbnMnKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAndXNlTWFya2VyU2V0JywgJ3NtYWxscHVzaHBpbnMnKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAndXNlQWxidW1NYXJrZXJTZXQnLCAnc21hbGxwdXNocGlucycpOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICd1c2VHcm91cE1hcmtlclNldCcsICdzbWFsbHB1c2hwaW5zJyk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ2RlZmF1bHRwaG90b2NvbG9yJywgJ0dSRUVOJyk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ2RlZmF1bHRhbGJ1bWNvbG9yJywgJ1lFTExPVycpOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdkZWZhdWx0Z3JvdXBjb2xvcicsICdSRUQnKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAndXNlUGFyZW50Q29sb3InLCAwKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnR3hNYWduaWZpZXInLCAwKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnR3hNYWduaWZpZXIyJywgMCk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ01hcENvbnRyb2xUeXBlJywgJ1NtYWxsJyk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ01hcENvbnRyb2xQb3MnLCAnMCcpOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdNYXBDb250cm9sUG9zT2ZmWCcsICcxMCcpOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdNYXBDb250cm9sUG9zT2ZmWScsICcxNScpOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdBdXRvQ2VudGVyWm9vbScsIDApOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdTaG93RXhwb3J0R0VMaW5rJywgMSk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0V4cGFuZEFsYnVtTGVnZW5kJywgMSk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0V4cGFuZFBob3RvTGVnZW5kJywgMSk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ1Nob3dGaWx0ZXJzJywgMCk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0xlZ2VuZFBvcycsIDApOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdHeE1hZ25pZmllckZlYXR1cmUnLCAwKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnVGhlbWVGZWF0dXJlJywgMCk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ01hcmtlckZlYXR1cmUnLCAwKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnTGVnZW5kRmVhdHVyZScsIDApOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdGaWx0ZXJGZWF0dXJlJywgMCk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0dyb3VwRmVhdHVyZScsIDApOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdSb3V0ZUZlYXR1cmUnLCAwKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnVGh1bWJCYXJQb3MnLCAwKTsKCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnVGh1bWJIZWlnaHQnLCA2MCk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ2xpbmt0eXBlJywgMCk7CglHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ0FkbWluSGVscCcsIDEpOwoJR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdVc2VySGVscCcsIDEpOwoJbGlzdCAoJHJldCwgJGV4aWZNb2R1bGUpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRQbHVnaW4oJ21vZHVsZScsICdleGlmJywgZmFsc2UpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gYXJyYXkobnVsbCwgZmFsc2UpOwoJfSBlbHNlIHsKCSAgICBpZiAoIXZlcnNpb25fY29tcGFyZSAoJzEuMC4xJywgJGV4aWZNb2R1bGUtPmdldFZlcnNpb24oKSwgJzw9JykpIHsKCQlHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ29sZGV4aWZ2ZXJzaW9uJywgMSk7CgkgICAgfSBlbHNlIHsKCQlHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ29sZGV4aWZ2ZXJzaW9uJywgMCk7CgkgICAgfQoJfQoJbGlzdCAoJHJldCwgJGltYWdlbWFnaWNrTW9kdWxlKSA9CgkJR2FsbGVyeUNvcmVBcGk6OmxvYWRQbHVnaW4oJ21vZHVsZScsICdpbWFnZW1hZ2ljaycsIGZhbHNlKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KG51bGwsIGZhbHNlKTsKCX0gZWxzZSB7CgkgICAgaWYgKGVtcHR5KCRpbWFnZW1hZ2lja01vZHVsZSkpIHsKCQlHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ25vaW1hZ2VtYWdpY2snLCAxKTsKCSAgICB9IGVsc2UgewoJCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnbm9pbWFnZW1hZ2ljaycsIDApOwoJICAgIH0KCX0KCXJldHVybiBhcnJheShudWxsLCBmYWxzZSk7CiAgICB9CgogICAgZnVuY3Rpb24gYWN0aXZhdGUoJHBvc3RBY3RpdmF0aW9uRXZlbnQgPSB0cnVlKSB7CgkvKiBSZWdpc3RlciB0aGUgTWFwIEVkaXQgUGVybWlzc2lvbiwgbm8gZXJyb3IgY2hlY2tpbmcgKi8KCSRyZXQgPSBHYWxsZXJ5Q29yZUFwaTo6cmVnaXN0ZXJQZXJtaXNzaW9uKCR0aGlzLT5nZXRJZCgpLCAnbWFwLkVkaXRNYXAnLAoJCSR0aGlzLT5fdHJhbnNsYXRlKCdbR29vZ2xlIE1hcF0gQWxsb3cgQ29vcmRpbmF0ZSBFZGl0aW5nJykpOwoKCS8qIEJ5IGRlZmF1bHQgYWRtaW4gY2FuIGVkaXQgZXZlcnl0aGluZyAqLwoJbGlzdCAoJHJldCwgJHJvb3RhbGJ1bSkgPQoJCUdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdjb3JlJywgJ2lkLnJvb3RBbGJ1bScpOwoJbGlzdCAoJHJldCwgJHNpdGVhZG1pbnMpID0KCQlHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnY29yZScsICdpZC5hZG1pbkdyb3VwJyk7CgkkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OmFkZEdyb3VwUGVybWlzc2lvbigkcm9vdGFsYnVtLCAkc2l0ZWFkbWlucywgJ21hcC5FZGl0TWFwJywgdHJ1ZSk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiBhcnJheSgkcmV0LT53cmFwKF9fRklMRV9fLCBfX0xJTkVfXyksIG51bGwpOwoJfQoKCWxpc3QgKCRyZXQsICRyZWRpcmVjdCkgPSBwYXJlbnQ6OmFjdGl2YXRlKCRwb3N0QWN0aXZhdGlvbkV2ZW50KTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJfQoKCXJldHVybiBhcnJheShudWxsLCAkcmVkaXJlY3QpOwoKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDb25maWd1cmF0aW9uVmlldygpIHsKCXJldHVybiAnbWFwLk1hcFNpdGVBZG1pbic7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlNb2R1bGU6OmdldFNpdGVBZG1pblZpZXdzKCkKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0U2l0ZUFkbWluVmlld3MoKSB7CglnbG9iYWwgJGdhbGxlcnk7CglyZXR1cm4gYXJyYXkobnVsbCwgYXJyYXkoYXJyYXkoJ25hbWUnID0+ICR0aGlzLT5fdHJhbnNsYXRlKCdHb29nbGUgTWFwJyksCgkJCQkgICAgICAgJ3ZpZXcnID0+ICdtYXAuTWFwU2l0ZUFkbWluJykpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeU1vZHVsZTo6Z2V0SXRlbVN1bW1hcmllcygpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEl0ZW1TdW1tYXJpZXMoJGl0ZW1zLCAkcGVybWlzc2lvbnMpIHsKCUdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBIZWxwZXIuY2xhc3MnKTsKCUdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbGliL3NtYXJ0eV9wbHVnaW5zL21vZGlmaWVyLm1hcmt1cC5waHAnKTsKCSRzdW1tYXJpZXMgPSAkZGF0YSA9IGFycmF5KCk7CgoJbGlzdCAoJHJldCwgJGRhdGEpID0gbWFwSGVscGVyOjpmZXRjaEZpZWxkVmFsdWVzKCRpdGVtcywgJ3N1bW1hcnknKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJfQoKCWZvcmVhY2ggKCRkYXRhIGFzICRpdGVtSWQgPT4gJGZpZWxkcykgewoJICAgICRsaXN0ID0gYXJyYXkoKTsKCSAgICBmb3JlYWNoICgkZmllbGRzIGFzICRmaWVsZCA9PiAkdmFsdWUpIHsKCQkkbGlzdFtdID0gJGZpZWxkIC4gJzogJyAuIHNtYXJ0eV9tb2RpZmllcl9tYXJrdXAoJHZhbHVlKTsKCSAgICB9CgkgICAgaWYgKCFlbXB0eSgkbGlzdCkpIHsKCQkkc3VtbWFyaWVzWyRpdGVtSWRdID0gaW1wbG9kZSgiPGJyLz5cbiIsICRsaXN0KTsKCSAgICB9Cgl9CglyZXR1cm4gYXJyYXkobnVsbCwgJHN1bW1hcmllcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlNb2R1bGU6OmdldFJld3JpdGVSdWxlcygpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFJld3JpdGVSdWxlcygpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCSRydWxlcyA9IGFycmF5KCk7CgoJJHJ1bGUgPSBhcnJheSgpOwoJJHJ1bGVbJ2NvbW1lbnQnXSA9ICdWaWV3IEdvb2dsZSBNYXAgR3JvdXAnOwoJJHJ1bGVbJ21hdGNoJ10gPSBhcnJheSgndmlldycgPT4gJ21hcC5TaG93TWFwJyk7CgkkcnVsZVsncGF0dGVybiddID0gJ01hcC8lR3JvdXAlJzsKCSRydWxlWydrZXl3b3JkcyddID0gYXJyYXkoCgkJJ0dyb3VwJyA9PiBhcnJheSgKCQkJJ3BhdHRlcm4nID0+ICcoR3sxfVswLTldKykqJywKCQkJJ2hlbHAnID0+ICR0aGlzLT5fdHJhbnNsYXRlKCdUaGUgSUQgb2YgdGhlIGdyb3VwIHRvIHNob3csICcKCQkJCQkJICAgIC4gJ05vIGdyb3VwIHdpbGwgc2hvdyB0aGUgZGVmYXVsdCBNYXAnKSkpOwoJJHJ1bGVzWzBdID0gJHJ1bGU7CgoJcmV0dXJuICRydWxlczsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeU1vZHVsZTo6cGVyZm9ybUZhY3RvcnlSZWdpc3RyYXRpb25zKCkKICAgICAqLwogICAgZnVuY3Rpb24gcGVyZm9ybUZhY3RvcnlSZWdpc3RyYXRpb25zKCkgewoJLyogUmVnaXN0ZXIgb3VyIGl0ZW0gZWRpdCBwbHVnaW4gKi8KCSRyZXQgPSBHYWxsZXJ5Q29yZUFwaTo6cmVnaXN0ZXJGYWN0b3J5SW1wbGVtZW50YXRpb24oCgkJJ0l0ZW1FZGl0UGx1Z2luJywgJ21hcEl0ZW1FZGl0JywgJ21hcEl0ZW1FZGl0JywKCQknbW9kdWxlcy9tYXAvbWFwSXRlbUVkaXQuaW5jJywgJ21hcCcsIG51bGwpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldDsKCX0KCgkvKiBSZWdpc3RlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gKi8KCSRyZXQgPSBHYWxsZXJ5Q29yZUFwaTo6cmVnaXN0ZXJGYWN0b3J5SW1wbGVtZW50YXRpb24oCgkJJ21hcEludGVyZmFjZV8xXzAnLCAnbWFwSGVscGVyJywgJ21hcCcsCgkJJ21vZHVsZXMvbWFwL2NsYXNzZXMvbWFwSGVscGVyLmNsYXNzJywgJ21hcCcsIG51bGwpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldDsKCX0KCgkvKiBSZWdpc3RlciBzZWFyY2ggaW1wbGVtZW50YXRpb24gKi8KCSRyZXQgPSBHYWxsZXJ5Q29yZUFwaTo6cmVnaXN0ZXJGYWN0b3J5SW1wbGVtZW50YXRpb24oCgkJJ0dhbGxlcnlTZWFyY2hJbnRlcmZhY2VfMV8wJywgJ21hcFNlYXJjaCcsICdtYXAnLAoJCSdtb2R1bGVzL21hcC9jbGFzc2VzL21hcFNlYXJjaC5jbGFzcycsICdtYXAnLCBudWxsKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQ7Cgl9CgoJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjpyZWdpc3RlckZhY3RvcnlJbXBsZW1lbnRhdGlvbigKCQknTWFpbnRlbmFuY2VUYXNrJywgJ1BvcHVsYXRlR1BTRVhJRkluZm9zJywgJ1BvcHVsYXRlR1BTRVhJRkluZm9zJywKCQknbW9kdWxlcy9tYXAvY2xhc3Nlcy9Qb3B1bGF0ZUdQU0VYSUZJbmZvcy5jbGFzcycsICdtYXAnLCBudWxsKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQ7Cgl9CgoJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjpyZWdpc3RlckZhY3RvcnlJbXBsZW1lbnRhdGlvbigKCQknTWFpbnRlbmFuY2VUYXNrJywgJ1dyaXRlRXhpZkhlYWRlclRvUGljdHVyZXMnLCAnV3JpdGVFeGlmSGVhZGVyVG9QaWN0dXJlcycsCgkJJ21vZHVsZXMvbWFwL2NsYXNzZXMvV3JpdGVFeGlmSGVhZGVyVG9QaWN0dXJlcy5jbGFzcycsICdtYXAnLCBudWxsKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQ7Cgl9CgoJcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlNb2R1bGU6OmdldEl0ZW1MaW5rcygpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEl0ZW1MaW5rcygkaXRlbXMsICR3YW50c0RldGFpbGVkTGlua3MsICRwZXJtaXNzaW9ucykgewoKCUdhbGxlcnlDb3JlQXBpOjpyZXF1aXJlT25jZSgnbW9kdWxlcy9tYXAvY2xhc3Nlcy9tYXBIZWxwZXIuY2xhc3MnKTsKCSRsaW5rcyA9IGFycmF5KCk7CgoJbGlzdCAoJHJldCwgJGxpbmt0eXBlKSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnbGlua3R5cGUnKTsKCWlmIChlbXB0eSgkbGlua3R5cGUpKSB7CgkgICAgJGxpbmt0eXBlID0gMDsKCX0KCWxpc3QgKCRyZXQsICRFeHBvcnRHRUxpbmspID0gCgkJR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdTaG93RXhwb3J0R0VMaW5rJyk7Cglmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsKCSAgICAkaXRlbUlkID0gJGl0ZW0tPmdldElkKCk7CgkgICAgJHR5cGUgPSAkaXRlbS0+Z2V0RW50aXR5VHlwZSgpOwoJICAgIGlmICgkbGlua3R5cGUgIT0gMykgewoJCWlmICgkdHlwZSA9PSAnR2FsbGVyeVBob3RvSXRlbScpIHsKCQkgICAgJE5pdGVtSWQgPSAkaXRlbS0+Z2V0UGFyZW50SWQoKTsKCQl9IGVsc2UgewoJCSAgICAkTml0ZW1JZCA9ICRpdGVtSWQ7CgkJfQoJCWxpc3QgKCRyZXQsICRpdGVtKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkRW50aXRpZXNCeUlkKCROaXRlbUlkKTsKCQkkbmFtZSA9ICRpdGVtLT5nZXRUaXRsZSgpOwogIAoJCSRnb29kYWxidW0gID0gZmFsc2U7CgkJaWYgKCRsaW5rdHlwZSA9PSAyKSB7CgkJICAgICRnb29kYWxidW0gPSB0cnVlOyAvKiBBbHdheXMgZmlsdGVyIG9uIGN1cnJlbnQgYWxidW0gKi8KCQl9CiAgCgkJaWYgKCRsaW5rdHlwZSA9PSAxKSB7CgkJICAgIC8qIER5bmFtaWMgbGluayAtPiBzZWFyY2ggZm9yIGl0ZW0gaW4gdGhlIGFsYnVtL3N1YmFsYnVtIHdpdGggR1BTIGNvb3JkcyAqLwoJCSAgICBsaXN0ICgkcmV0LCAkY291bnQpID0gbWFwSGVscGVyOjpnZXRDb3VudEl0ZW1XaXRoQ29vcmRzKCRpdGVtLT5nZXRJZCgpKTsKCQkgICAgaWYgKCRyZXQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGNvdW50ICE9IDApewogICAgICAgICAgICAgICAgJGdvb2RhbGJ1bSA9IHRydWU7CiAgICAgICAgICAgIH0KCQl9CgkJaWYgKGlzc2V0KCR3YW50c0RldGFpbGVkTGlua3NbJGl0ZW1JZF0pKSB7CgkJICAgIC8qIFRoZSBWaWV3IGluIEdvb2dsZSBFYXJ0aCBMaW5rIChvbmx5IGlmIGVuYWJsZWQgaW4gdGhlIFBhbmVsKSAqLwoJCSAgICBpZiAoJEV4cG9ydEdFTGluaykgewoJCQkkbGlua3NbJGl0ZW1JZF1bXSA9CgkJCQlhcnJheSgndGV4dCcgPT4gJHRoaXMtPl90cmFuc2xhdGUoJ1ZpZXcgaW4gR29vZ2xlIEVhcnRoJyksCgkJCQkgICAgICAncGFyYW1zJyA9PiBhcnJheSgndmlldycgPT4gJ21hcC5Hb29nbGVFYXJ0aCcsCgkJCQkJCQknaXRlbUlkJyA9PiAkaXRlbUlkKSk7CgkJICAgIH0KCQkgICAgLyogVGhlIEdvb2dsZSBNYXAgbGluayAqLwoJCSAgICBpZiAoJGdvb2RhbGJ1bSkgewoJCQkkbGlua3NbJGl0ZW1JZF1bXSA9CgkJCQlhcnJheSgndGV4dCcgPT4gJHRoaXMtPl90cmFuc2xhdGUoJ1ZpZXcgQWxidW0gb24gYSBNYXAnKSwKCQkJCSAgICAgICdwYXJhbXMnID0+IGFycmF5KCd2aWV3JyA9PiAnbWFwLlNob3dNYXAnLAoJCQkJCQkJJ01vZGUnID0+ICdOb3JtYWwnLAoJCQkJCQkJJ0dyb3VwJyA9PiAnJywKCQkJCQkJCSdhbGJ1bScgPT4gJG5hbWUpKTsKCQkgICAgfSBlbHNlIHsKCQkJLyoKCQkJICogVGhlIGN1cnJlbnQgYWxidW0gKG9yIHBhcmVudCBvZiB0aGUgY3VycmVudCBwaG90bykgZG9lcyBub3QgaGF2ZSBhbnkKCQkJICogR1BTIGl0ZW0sIGNoZWNrIGZyb20gdGhlIHJvb3QKCQkJICovCiAgICAgICAgCQlsaXN0ICgkcmV0LCAkY291bnQpID0gbWFwSGVscGVyOjpnZXRDb3VudEl0ZW1XaXRoQ29vcmRzKCk7CiAgICAgICAgCQlpZiAoJHJldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY291bnQpIHsKCQkJICAgIC8qIFRoZXJlIGFyZSBzb21lIGl0ZW1zIHRvIHNob3cgaW4gdGhlIEdhbGxlcnkgRGlzcGxheSB0aGUgTWFwIExpbmsgKi8KCQkJICAgICRsaW5rc1skaXRlbUlkXVtdID0gYXJyYXkoJ3RleHQnID0+ICR0aGlzLT5fdHJhbnNsYXRlKCdTaG93IGEgR29vZ2xlIE1hcCcpLAoJCQkgICAgCQkJICAgICAgJ3BhcmFtcycgPT4gYXJyYXkoJ3ZpZXcnID0+ICdtYXAuU2hvd01hcCcpKTsKCQkJfQoJCSAgICB9CgkJfQoJICAgIH0KCX0KCXJldHVybiBhcnJheShudWxsLCAkbGlua3MpOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZ3JhZGUoJGN1cnJlbnRWZXJzaW9uKSB7CglnbG9iYWwgJGdhbGxlcnk7Cgkkc3RvcmFnZSA9JiAkZ2FsbGVyeS0+Z2V0U3RvcmFnZSgpOwoKCWxpc3QgKCRyZXQsICRleGlmTW9kdWxlKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkUGx1Z2luKCdtb2R1bGUnLCAnZXhpZicsIGZhbHNlKTsKCWlmICgkcmV0KSB7CgkgICAgLyoqCgkgICAgICogQHRvZG8gVGhpcyBkb2Vzbid0IHNlZW0gcmlnaHQuIFRoZSB1cGdyYWRlIHNob3VsZG4ndCBiYWlsIG91dCBqdXN0IGJlY2F1c2UgdGhpcwoJICAgICAqIHBsdWdpbiBjb3VsZG4ndCBiZSBsb2FkZWQuIEl0J3Mgbm90IHJlcXVpcmVkIGZvciBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBtb2R1bGUuCgkgICAgICovCgkgICAgcmV0dXJuICRyZXQ7Cgl9IGVsc2UgewoJICAgIEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnb2xkZXhpZnZlcnNpb24nLCAwKTsKCSAgICBpZiAoIXZlcnNpb25fY29tcGFyZSgnMS4wLjEnLCAkZXhpZk1vZHVsZS0+Z2V0VmVyc2lvbigpLCAnPD0nKSkgewoJCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnb2xkZXhpZnZlcnNpb24nLCAxKTsKCSAgICB9Cgl9CglsaXN0ICgkcmV0LCAkaW1hZ2VtYWdpY2tNb2R1bGUpID0KCQlHYWxsZXJ5Q29yZUFwaTo6bG9hZFBsdWdpbignbW9kdWxlJywgJ2ltYWdlbWFnaWNrJywgZmFsc2UpOwoJaWYgKCRyZXQpIHsKCSAgICAvKgoJICAgICAqIEB0b2RvIFRoaXMgZG9lc24ndCBzZWVtIHJpZ2h0LiBUaGUgdXBncmFkZSBzaG91bGRuJ3QgYmFpbCBvdXQganVzdCBiZWNhdXNlIHRoaXMKCSAgICAgKiBwbHVnaW4gY291bGRuJ3QgYmUgbG9hZGVkLiBJdCdzIG5vdCByZXF1aXJlZCBmb3IgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgbW9kdWxlLgoJICAgICAqLwoJICAgIHJldHVybiAkcmV0OwoJfSBlbHNlIHsKCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ25vaW1hZ2VtYWdpY2snLCAwKTsKCX0KCgoJaWYgKCFpc3NldCgkY3VycmVudFZlcnNpb24pKSB7CgkgICAgJGN1cnJlbnRWZXJzaW9uID0gJzAnOwoJfQoKCXN3aXRjaCAoJGN1cnJlbnRWZXJzaW9uKSB7CgljYXNlICcwJzoKCgkgICAgLyogSW5pdGlhbCBpbnN0YWxsICovCgkgICAgYnJlYWs7CgljYXNlICcwLjEuMCc6CgljYXNlICcwLjEuMSc6CgljYXNlICcwLjEuMic6CgljYXNlICcwLjEuMyc6CgljYXNlICcwLjInOgoJY2FzZSAnMC4zYmV0YTEnOgogCWNhc2UgJzAuMy4wJzoKCWNhc2UgJzAuMy4xJzoKCWNhc2UgJzAuMy4xYic6CgljYXNlICcwLjMuMic6CgljYXNlICcwLjMuMmInOgoJICAgIC8qIFVwZ3JhZGUgZnJvbSB3aGVuIHdlIHdlcmUgdXNpbmcgQ3VzdG9tRmllbGQgKi8KCgkgICAgLyogZ2V0IEN1c3RvbWZpZWxkTWFwIHRhYmxlIGZpZWxkcyByZWxhdGVkIHRvIE1hcCAqLwoJICAgICRxdWVyeSA9ICcKCSAgICBTRUxFQ1QgKgoJICAgIEZST00KCSAgICAgIFtHYWxsZXJ5Q3VzdG9tRmllbGRNYXBdCgkgICAgV0hFUkUKCSAgICAgIFtHYWxsZXJ5Q3VzdG9tRmllbGRNYXA6OmZpZWxkXSA9IFwnR1BTXCcKCSAgICAgIE9SCgkgICAgICBbR2FsbGVyeUN1c3RvbUZpZWxkTWFwOjpmaWVsZF0gPSBcJ0NvbG9yc1wnCgkgICAgICBPUgogICAgICAgICAgICAgIFtHYWxsZXJ5Q3VzdG9tRmllbGRNYXA6OmZpZWxkXSA9IFwnQ29sb3JcJwoJICAgICAgT1IKCSAgICAgIFtHYWxsZXJ5Q3VzdG9tRmllbGRNYXA6OmZpZWxkXSA9IFwnWm9vbUxldmVsXCcKCSAgICAnOwoJICAgIGxpc3QgKCRyZXQsICRyZXN1bHRzKSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5LCBhcnJheSgpLCBhcnJheSgpKTsKCgkgICAgaWYgKCRyZXN1bHRzLT5yZXN1bHRDb3VudCgpID4gMCkgeyAvKiBWZXJpZnkgdGhhdCBpdCBpc24ndCBlbXB0eSAqLwoJCXdoaWxlICgkcmVzdWx0ID0gJHJlc3VsdHMtPm5leHRSZXN1bHQoKSkgewoJCSAgICBpZiAoJHJlc3VsdFsxXSA9PSAnQ29sb3InKSB7CgkJCSRyZXN1bHRbMV0gPSAnQ29sb3JzJzsgLyogUmVwbGFjZSB0aGUgImNvbG9yIiBmaWVsZCBmb3IgImNvbG9ycyIgKi8KCQkgICAgfQoKCQkgICAgJGluc2VydHF1ZXJ5ID0gJwoJCSAgICBJTlNFUlQgSU5UTwoJCSAgICBbbWFwTWFwXQoJCSAgICBWQUxVRVMgKFwnJyAuICRyZXN1bHRbMF0gLiAnXCcsXCcnIC4gJHJlc3VsdFsxXSAuICdcJyxcJycgLiAkcmVzdWx0WzJdCgkJCSAgICAuICdcJyxcJycgLiAkcmVzdWx0WzNdIC4gJ1wnLFwnJyAuICRyZXN1bHRbNF0gLiAnXCcpCgkJICAgICc7CiAgICAKCQkgICAgJHJldCA9ICRzdG9yYWdlLT5leGVjdXRlKCRpbnNlcnRxdWVyeSk7IC8qIHB1dCB0aGUgdmFsdWVzIGluIE1hcG1hcCAqLwoJCSAgICBpZiAoJHJldCkgewoJCQlyZXR1cm4gJHJldDsKCQkgICAgfQoKCQl9CgkgICAgfQoJY2FzZSAnMC40LjAnOgoJY2FzZSAnMC40LjEnOgoJY2FzZSAnMC40LjInOgoJY2FzZSAnMC40LjJiJzoKCWNhc2UgJzAuNC4yYyc6CgljYXNlICcwLjQuMyc6CgljYXNlICcwLjQuNCc6CgljYXNlICcwLjQuNGInOgoJY2FzZSAnMC40LjRjJzoKCWNhc2UgJzAuNC40ZSc6CgkgICAgLyogVXBncmFkZSBmcm9tIGJlZm9yZSB0aGUgcm91dGVzIHdlcmUgYWJsZSB0byBiZSBmaWx0ZXJzICovCgkgICAgLyogR2V0IHRoZSBSb3V0ZXMgZmllbGQgKi8KCSAgICAkcm91dGVzID0gR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdSb3V0ZXMnKTsKCSAgICAkbmV3cm91dGVzID0gYXJyYXkoKTsKCgkgICAgLyogVXBkYXRlIHdpdGggbmV3IHBhcmFtZXRlcnMgc2V0IHRvIG5vICovCgkgICAgaWYgKCFlbXB0eSgkcm91dGVzWzFdKSkgeyAgLyogVGhlcmUgaXMgc29tZSByb3V0ZXMsIHVwZ3JhZGluZyAqLwoJCSRhbGxyb3V0ZXMgPSBleHBsb2RlICgnfCcsICRyb3V0ZXNbMV0pOwoJCWZvcmVhY2ggKCRhbGxyb3V0ZXMgYXMgJHJvdXRlKSB7CgkJICAgICR1c2luZ25ld3JvdXRlcyA9IHN0cnBvcygkcm91dGUsICdgWWVzYE5vJykgPyAxIDogMCAKCQkJICAgICsgc3RycG9zKCRyb3V0ZSwgJ2BZZXNgWWVzJykgPyAxIDogMAoJCQkgICAgKyBzdHJwb3MoJHJvdXRlLCAnYE5vYFllcycpID8gMSA6IDAKCQkJICAgICsgc3RycG9zKCRyb3V0ZSwgJ2BOb2BObycpID8gMSA6IDA7CgkJICAgICRwb3N5ZXMgPSBzdHJwb3MoJHJvdXRlLCAnYFllcycpOwoJCSAgICAkcG9zbm8gPSBzdHJwb3MoJHJvdXRlLCAnYE5vJyk7CgkJICAgIGlmICgkcG9zeWVzIGFuZCAkdXNpbmduZXdyb3V0ZXMgPT0gMCkgewoJCQkkbmV3cm91dGVzW10gPSBzdWJzdHIoJHJvdXRlLCAwLCAkcG9zeWVzICsgNCkgLiAnYE5vJwoJCQkJICAgICAgIC4gc3Vic3RyKCRyb3V0ZSwgJHBvc3llcyArIDQpIC4gJzxicj4nOwoJCSAgICB9IGVsc2UgaWYgKCRwb3NubyBhbmQgJHVzaW5nbmV3cm91dGVzID09IDApIHsKCQkJJG5ld3JvdXRlc1tdID0gc3Vic3RyKCRyb3V0ZSwgMCwgJHBvc25vKzMpIC4gJ2BObycKCQkJCSAgICAgICAuIHN1YnN0cigkcm91dGUsICRwb3NubyArIDMpIC4gJzxicj4nOwoJCSAgICB9CgkJfQoJCWlmICgkbmV3cm91dGVzICE9ICcxJykgIHsKCQkgICAgJHRoZXJvdXRlcyA9IGltcGxvZGUoJ3wnLCAkbmV3cm91dGVzKTsKCQkgICAgLyogU2V0IHRoZSBuZXcgcm91dGVzIGluIHRoZSBkYXRhYmFzZSAqLwoJCSAgICBHYWxsZXJ5Q29yZUFwaTo6c2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnbWFwJywgJ1JvdXRlcycsICR0aGVyb3V0ZXMpOwoJCX0KCSAgICB9CgkgICAgCgkgICAgLyogY29weSBtYXJrZXJzIHRvIHRoZSBtb2R1bGUgZGlyZWN0b3J5ICh3ZSBkb24ndCBjYXJlIGlmIHRoYXQgZmFpbHMpICovCgkgICAgLyoqCgkgICAgICogQHRvZG8gVGhlIHN1YnN0cigpIG1ldGhvZCBpcyBmcmFnaWxlLiBDaGFuZ2UgdG8gdXNlCgkgICAgICogR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpbkJhc2VEaXIoKSBmb3Igbm93LCB0aGVuIGdldENvZGVCYXNlUGF0aCgpIGZvciBHYWxsZXJ5IDIuMysKCSAgICAgKi8KCSAgICAkYmFzZWdhbGxlcnlkaXIgPSBzdWJzdHIoZGlybmFtZShfX0ZJTEVfXyksIDAsIC0xMSk7CgkgICAgLyoqCgkgICAgICogQHRvZG8gVGhpcyBpcyB0aGUgb25seSBwbGFjZSBDb3B5RGlyIGlzIHVzZWQuIElmIHdlIGNhbiBtb3ZlIHRoYXQgZnVuY3Rpb25hbGl0eQoJICAgICAqIGhlcmUsIHdlIGNhbiBlbGltaW5hdGUgZmlsZWNvcHkuY2xhc3MgYWx0b2dldGhlci4KCSAgICAgKi8KCSAgICBHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvbWFwL2NsYXNzZXMvZmlsZWNvcHkuY2xhc3MnKTsKCSAgICBAQ29weURpcigkYmFzZWdhbGxlcnlkaXIgLiAnLi4vaW1hZ2VzL21hcCcsICRiYXNlZ2FsbGVyeWRpciAuICdtYXAvaW1hZ2VzL21hcmtlcnMnLCAwNzc3LCAKCQkgICAgZmFsc2UpOwoJICAgIEBybSgkYmFzZWdhbGxlcnlkaXIgLiAnaW1hZ2VzL21hcCcpOwoKCSAgICAvKiBVcGdyYWRlIHJvdXRlcyB0byBiZSBwb2ludGluZyB0byBJdGVtIGluc3RlYWQgb2YgY29vcmRpbmF0ZXMgb2YgaXRlbXMgKi8KCSAgICAvKiBHZXQgY3VycmVudCByb3V0ZXMgKi8KCSAgICBsaXN0ICgkcmV0LCAkcm91dGVzKSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnUm91dGVzJyk7CgkgICAgJG5ld3JvdXRlcyA9ICcnOwoJICAgIGlmICghZW1wdHkoJHJvdXRlcykpIHsgLyogdGhlcmUgaXMgc29tZSByb3V0ZSwgZml4IHRoZW0gOi0pICovCgkJJGFsbHJvdXRlcyA9IGV4cGxvZGUgKCd8JywgJHJvdXRlcyk7CgkJZm9yZWFjaCAoJGFsbHJvdXRlcyBhcyAkcm91dGUpIHsgLyogZ28gdGhyb3VnaCBlYWNoIHJvdXRlICovCgkJICAgICRyb3V0ZWluZm9zID0gZXhwbG9kZSAoJ2AnLCAkcm91dGUpOwoJCSAgICAkdGhlcm91dGUgPSAkcm91dGVpbmZvc1swXSAuICdgJyAuICRyb3V0ZWluZm9zWzFdIC4gJ2AnIC4gJHJvdXRlaW5mb3NbMl0KCQkJCS4gJ2AnIC4gJHJvdXRlaW5mb3NbM10gLiAnYCcgLiAkcm91dGVpbmZvc1s0XSAuICdgJyAuICRyb3V0ZWluZm9zWzVdCgkJCQkuICdgJyAuICRyb3V0ZWluZm9zWzZdOwoJCSAgICBmb3IgKCRpID0gNzsgJGk8IGNvdW50KCRyb3V0ZWluZm9zKTsgJGkrKykgewoJCQkvKiBTZWFyY2ggZm9yIHRoZSBpdGVtaWQgZnJvbSB0aGUgY29vcmRpbmF0ZSBhbmQgcmVwbGFjZSAqLwoJCQkkcXVlcnkgPSAnCQkJCQkgICAgCgkJCVNFTEVDVAoJCQkgIFttYXBNYXA6Oml0ZW1JZF0KCQkJRlJPTQoJCQkgIFttYXBNYXBdCgkJCVdIRVJFCgkJCSAgW21hcE1hcDo6dmFsdWVdID0gXCcnIC4gJHJvdXRlaW5mb3NbJGldIC4gJ1wnCgkJCSc7CgkJCWxpc3QgKCRyZXQsICRyZXN1bHRzKSA9ICRzdG9yYWdlLT5zZWFyY2goJHF1ZXJ5KTsKCQkJaWYgKCRyZXN1bHRzLT5yZXN1bHRDb3VudCA+IDApIHsKCQkJICAgICRyZXN1bHQgPSAkcmVzdWx0cy0+bmV4dFJlc3VsdCgpOwoJCQkgICAgJHRoZXJvdXRlIC49ICdgJyAuICRyZXN1bHRbMF07CgkJCX0KCQkJZWxzZSB7CgkJCSAgICAkdGhlcm91dGUgLj0gJ2AnIC4gJHJvdXRlaW5mb3NbJGldOwoJCQl9CgkJICAgIH0KCQkgICAgaWYgKCRuZXdyb3V0ZXMgPT0gJycpIHsKCQkJJG5ld3JvdXRlcyA9ICR0aGVyb3V0ZTsKCQkgICAgfSBlbHNlIHsKCQkJJG5ld3JvdXRlcyAuPSAnfCcgLiAkdGhlcm91dGU7CgkJICAgIH0KCQl9CgkJLyogUmVwbGFjZSByb3V0ZSB3aXRoIG5ldyBpbmZvcyAqLwoJCUdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnUm91dGVzJywgJG5ld3JvdXRlcyk7CgkgICAgfQoJY2FzZSAnMC40LjUnOgoJY2FzZSAnMC40LjVjJzoKCWNhc2UgJzAuNC41ZCc6CgljYXNlICcwLjQuNic6CgljYXNlICcwLjQuNmInOgoJY2FzZSAnMC40LjZlJzoKCWNhc2UgJzAuNC43Yyc6CgljYXNlICcwLjQuN2QnOgoJICAgIC8qIGF0dGVtcHQgdG8gY2hhbmdlIHRoZSBkYXRhYmFzZSBpdGVtSWQgZnJvbSBpbnQgdG8gdmFyY2hhciAqLwoKCSAgICAkcXVlcnkgPSAnCgkgICAgQUxURVIgVEFCTEUKCSAgICAgIFttYXBNYXBdCgkgICAgQ0hBTkdFCgkgICAgICBbbWFwTWFwOjppdGVtSWRdCgkgICAgICBbbWFwTWFwOjppdGVtSWRdIFZBUkNIQVIoMTEpIERFRkFVTFQgXCcwXCcgTk9UIE5VTEwKCSAgICAnOwoKCSAgICAkcmV0ID0gJHN0b3JhZ2UtPmV4ZWN1dGUoJHF1ZXJ5KTsgLyogcnVuIHRoZSBjb21tYW5kICovCgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9CgljYXNlICcwLjQuOCc6CgljYXNlICcwLjQuOGInOgoJY2FzZSAnMC40LjhjJzoKCWNhc2UgJzAuNC44ZCc6CgljYXNlICcwLjQuOGUnOgoJY2FzZSAnMC40LjknOgoJY2FzZSAnMC40LjliJzoKCWNhc2UgJzAuNC45Yyc6CgljYXNlICcwLjQuMTAnOgoJY2FzZSAnMC40LjEwYic6CgljYXNlICcwLjQuMTBjJzoKCWNhc2UgJzAuNC4xMGQnOgoJY2FzZSAnMC40LjEwZSc6CgljYXNlICcwLjQuMTBmJzoKCWNhc2UgJzAuNC4xMWEnOgoJY2FzZSAnMC40LjExYic6CgljYXNlICcwLjQuMTFjJzoKCWNhc2UgJzAuNC4xMWQnOgoJICAgICRyZXQgPSAkc3RvcmFnZS0+Y29uZmlndXJlU3RvcmUoJHRoaXMtPmdldElkKCksIGFycmF5KCdtYXBNYXA6MS4yJykpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuICRyZXQ7CgkgICAgfQoJY2FzZSAnMC41LjAnOgoJY2FzZSAnMC41LjBiJzoKCWNhc2UgJzAuNS4wYyc6CgljYXNlICcwLjUuMGQnOgoJY2FzZSAnMC41LjBlJzoKCWNhc2UgJzAuNS4wZic6CgljYXNlICcwLjUuMGcnOgoJICAgIC8qIFJldmVyc2UgdGhlIGV4aXN0aW5nICdHUFMnIGNvb3JkaW5hdGVzIGluIHRoZSBEQiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwoJICAgICRxdWVyeSA9ICcKCSAgICBTRUxFQ1QgKgoJICAgIEZST00KCSAgICAgIFttYXBNYXBdCgkgICAgV0hFUkUKCSAgICAgIFttYXBNYXA6OmZpZWxkXSA9IFwnR1BTXCcKCSAgICAnOwoJICAgIGxpc3QgKCRyZXQsICRyZXN1bHRzKSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5LCBhcnJheSgpLCBhcnJheSgpKTsKCgkgICAgaWYgKCRyZXN1bHRzLT5yZXN1bHRDb3VudCgpID4gMCkgeyAvKiBWZXJpZnkgdGhhdCBpdCBpc24ndCBlbXB0eSAqLwoJCXdoaWxlICgkcmVzdWx0ID0gJHJlc3VsdHMtPm5leHRSZXN1bHQoKSkgewoKCQkgICAgaWYgKCFlbXB0eSgkcmVzdWx0WzJdKSkgewoJCQkkdGVtcGNvb3JkID0gZXhwbG9kZSgnLCcsICRyZXN1bHRbMl0pOwoJCQkkcmVzdWx0WzJdID0gIiR0ZW1wY29vcmRbMV0sJHRlbXBjb29yZFswXSI7CgkJICAgIH0KCgkJICAgICR1cGRhdGVxdWVyeSA9ICcKCQkgICAgVVBEQVRFCgkJICAgICAgW21hcE1hcF0KCQkgICAgU0VUCgkJICAgICAgW21hcE1hcDo6dmFsdWVdID0gXCcnIC4gJHJlc3VsdFsyXSAuICdcJwoJCSAgICBXSEVSRQoJCSAgICAgIFttYXBNYXA6Oml0ZW1JZF0gPSBcJycgLiAkcmVzdWx0WzBdIC4gJ1wnCgkJICAgICAgQU5ECgkJICAgICAgW21hcE1hcDo6ZmllbGRdID0gXCcnIC4gJHJlc3VsdFsxXSAuICdcJwoJCSAgICAgIEFORAoJCSAgICAgIFttYXBNYXA6OnNldElkXSA9IFwnJyAuICRyZXN1bHRbM10gLiAnXCcKCQkgICAgICBBTkQKCQkgICAgICBbbWFwTWFwOjpzZXRUeXBlXSA9IFwnJyAuICRyZXN1bHRbNF0gLiAnXCcKCQkgICAgJzsKCgkJICAgICRyZXQgPSAkc3RvcmFnZS0+ZXhlY3V0ZSgkdXBkYXRlcXVlcnkpOyAvKiBwdXQgdGhlIHZhbHVlcyBpbiBNYXBtYXAgKi8KCQkgICAgaWYgKCRyZXQpIHsKCQkJcmV0dXJuICRyZXQ7CgkJICAgIH0KCgkJfQoJICAgIH0KCSAgICAvKiBFbmQgcmV2ZXJzaW5nIEdQUyBjb29yZGluYXRlcyBpbiBEQiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KCgkgICAgLyogVXBkYXRlIG1hcCB0eXBlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KCSAgICAkcXVlcnkgPSAnCgkgICAgU0VMRUNUICoKCSAgICBGUk9NCgkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcF0KCSAgICBXSEVSRQoJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBsdWdpblR5cGVdID0gXCdtb2R1bGVcJwoJICAgICAgQU5ECgkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGx1Z2luSWRdID0gXCdtYXBcJwoJICAgICAgQU5ECgkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGFyYW1ldGVyTmFtZV0gPSBcJ21hcFR5cGVcJwoJICAgICc7CgkgICAgbGlzdCAoJHJldCwgJHJlc3VsdHMpID0gJGdhbGxlcnktPnNlYXJjaCgkcXVlcnksIGFycmF5KCksIGFycmF5KCkpOwoKCSAgICBpZiAoJHJlc3VsdHMtPnJlc3VsdENvdW50KCkgPiAwKSB7IC8qIFZlcmlmeSB0aGF0IGl0IGlzbid0IGVtcHR5ICovCgkJd2hpbGUgKCRyZXN1bHQgPSAkcmVzdWx0cy0+bmV4dFJlc3VsdCgpKSB7CgoJCSAgICBpZiAoIWVtcHR5KCRyZXN1bHRbNF0pKSB7CgkJCWlmICgkcmVzdWx0WzRdID09ICdHX01BUF9UWVBFJykgewoJCQkgICAgJHJlc3VsdFs0XSA9ICdHX05PUk1BTF9NQVAnOwoJCQl9CgkJCWlmICgkcmVzdWx0WzRdID09ICdHX1NBVEVMTElURV9UWVBFJykgewoJCQkgICAgJHJlc3VsdFs0XSA9ICdHX1NBVEVMTElURV9NQVAnOwoJCQl9CgkJCWlmICgkcmVzdWx0WzRdID09ICdHX0hZQlJJRF9UWVBFJykgewoJCQkgICAgJHJlc3VsdFs0XSA9ICdHX0hZQlJJRF9NQVAnOwoJCQl9CgoJCSAgICB9CgoJCSAgICAkdXBkYXRlcXVlcnkgPSAnCgkJICAgIFVQREFURQoJCSAgICAgIFtQbHVnaW5QYXJhbWV0ZXJNYXBdCgkJICAgIFNFVAoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwYXJhbWV0ZXJWYWx1ZV0gPSBcJycgLiAkcmVzdWx0WzRdIC4gJ1wnCgkJICAgIFdIRVJFCgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBsdWdpblR5cGVdID0gXCcnIC4gJHJlc3VsdFswXSAuICdcJwoJCSAgICAgIEFORAoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwbHVnaW5JZF0gPSBcJycgLiAkcmVzdWx0WzFdIC4gJ1wnCgkJICAgICAgQU5ECgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6Oml0ZW1JZF0gPSBcJycgLiAkcmVzdWx0WzJdIC4gJ1wnCgkJICAgICAgQU5ECgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBhcmFtZXRlck5hbWVdID0gXCcnIC4gJHJlc3VsdFszXSAuICdcJwoJCSAgICAnOwoKCQkgICAgJHJldCA9ICRzdG9yYWdlLT5leGVjdXRlKCR1cGRhdGVxdWVyeSk7IC8qIHB1dCB0aGUgdmFsdWVzIGluIE1hcG1hcCAqLwoJCSAgICBpZiAoJHJldCkgewoJCQlyZXR1cm4gJHJldDsKCQkgICAgfQoKCQl9CgkgICAgfQoJICAgIC8qIEVuZCB1cGRhdGluZyB0aGUgTWFwIFR5cGUgaW4gdGhlIERCICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwoKCSAgICAvKiBSZXZlcnNlIHRoZSBNYXAgQ2VudGVyIHBhcmFtZXRlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KCSAgICAkcXVlcnkgPSAnCgkgICAgU0VMRUNUICoKCSAgICBGUk9NCgkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcF0KCSAgICBXSEVSRQoJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBsdWdpblR5cGVdID0gXCdtb2R1bGVcJwoJICAgICAgQU5ECgkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGx1Z2luSWRdID0gXCdtYXBcJwoJICAgICAgQU5ECgkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGFyYW1ldGVyTmFtZV0gPSBcJ2NlbnRlckxvbmdMYXRcJwoJICAgICc7CgkgICAgbGlzdCAoJHJldCwgJHJlc3VsdHMpID0gJGdhbGxlcnktPnNlYXJjaCgkcXVlcnksIGFycmF5KCksIGFycmF5KCkpOwoKCSAgICBpZiAoJHJlc3VsdHMtPnJlc3VsdENvdW50KCkgPiAwKSB7IC8qIFZlcmlmeSB0aGF0IGl0IGlzbid0IGVtcHR5ICovCgkJd2hpbGUgKCRyZXN1bHQgPSAkcmVzdWx0cy0+bmV4dFJlc3VsdCgpKSB7CgoJCSAgICBpZiAoIWVtcHR5KCRyZXN1bHRbNF0pKSB7CgkJCSR0ZW1wY29vcmQgPSBleHBsb2RlKCcsJywgJHJlc3VsdFs0XSk7CgkJCSRyZXN1bHRbNF0gPSAiJHRlbXBjb29yZFsxXSwkdGVtcGNvb3JkWzBdIjsKCQkgICAgfQoKCQkgICAgJHVwZGF0ZXF1ZXJ5ID0gJwoJCSAgICBVUERBVEUKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcF0KCQkgICAgU0VUCgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBhcmFtZXRlclZhbHVlXSA9IFwnJyAuICRyZXN1bHRbNF0gLiAnXCcKCQkgICAgV0hFUkUKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGx1Z2luVHlwZV0gPSBcJycgLiAkcmVzdWx0WzBdIC4gJ1wnCgkJICAgICAgQU5ECgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBsdWdpbklkXSA9IFwnJyAuICRyZXN1bHRbMV0gLiAnXCcKCQkgICAgICBBTkQKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6aXRlbUlkXSA9IFwnJyAuICRyZXN1bHRbMl0gLiAnXCcKCQkgICAgICBBTkQKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGFyYW1ldGVyTmFtZV0gPSBcJycgLiAkcmVzdWx0WzNdIC4gJ1wnCgkJICAgICc7CgoJCSAgICAkcmV0ID0gJHN0b3JhZ2UtPmV4ZWN1dGUoJHVwZGF0ZXF1ZXJ5KTsgLyogcHV0IHRoZSB2YWx1ZXMgaW4gTWFwbWFwICovCgkJICAgIGlmICgkcmV0KSB7CgkJCXJldHVybiAkcmV0OwoJCSAgICB9CgoJCX0KCSAgICB9CgkgICAgLyogRW5kIHJldmVyc2luZyB0aGUgY29vcmRpbmF0ZXMgaW4gdGhlIE1hcCBDZW50ZXIgUGFyYW1hdGVyICoqKioqKioqKioqKioqKioqKiogKi8KCgkgICAgLyogUmV2ZXJzZSB0aGUgRGVmYXVsdCBNYXAgQ2VudGVyIHBhcmFtZXRlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwoJICAgICRxdWVyeSA9ICcKCSAgICBTRUxFQ1QgKgoJICAgIEZST00KCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwXQoJICAgIFdIRVJFCgkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGx1Z2luVHlwZV0gPSBcJ21vZHVsZVwnCgkgICAgICBBTkQKCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwbHVnaW5JZF0gPSBcJ21hcFwnCgkgICAgICBBTkQgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBhcmFtZXRlck5hbWVdID0gXCdHVk1DZW50ZXJcJwoJICAgICc7CgkgICAgbGlzdCAoJHJldCwgJHJlc3VsdHMpID0gJGdhbGxlcnktPnNlYXJjaCgkcXVlcnksIGFycmF5KCksIGFycmF5KCkpOwoKCSAgICBpZiAoJHJlc3VsdHMtPnJlc3VsdENvdW50KCkgPiAwKSB7IC8qIFZlcmlmeSB0aGF0IGl0IGlzbid0IGVtcHR5ICovCgkJd2hpbGUgKCRyZXN1bHQgPSAkcmVzdWx0cy0+bmV4dFJlc3VsdCgpKSB7CgoJCSAgICBpZiAoIWVtcHR5KCRyZXN1bHRbNF0pKSB7CgkJCSR0ZW1wY29vcmQgPSBleHBsb2RlKCcsJywgJHJlc3VsdFs0XSk7CgkJCSRyZXN1bHRbNF0gPSAiJHRlbXBjb29yZFsxXSwkdGVtcGNvb3JkWzBdIjsKCQkgICAgfQoKCQkgICAgJHVwZGF0ZXF1ZXJ5ID0gJwoJCSAgICBVUERBVEUKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcF0KCQkgICAgU0VUCgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBhcmFtZXRlclZhbHVlXSA9IFwnJyAuICRyZXN1bHRbNF0gLiAnXCcKCQkgICAgV0hFUkUKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGx1Z2luVHlwZV0gPSBcJycgLiAkcmVzdWx0WzBdIC4gJ1wnCgkJICAgICAgQU5ECgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBsdWdpbklkXSA9IFwnJyAuICRyZXN1bHRbMV0gLiAnXCcKCQkgICAgICBBTkQKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6aXRlbUlkXSA9IFwnJyAuICRyZXN1bHRbMl0gLiAnXCcKCQkgICAgICBBTkQKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGFyYW1ldGVyTmFtZV0gPSBcJycgLiAkcmVzdWx0WzNdIC4gJ1wnCgkJICAgICc7CgoJCSAgICAkcmV0ID0gJHN0b3JhZ2UtPmV4ZWN1dGUoJHVwZGF0ZXF1ZXJ5KTsgLyogcHV0IHRoZSB2YWx1ZXMgaW4gTWFwbWFwICovCgkJICAgIGlmICgkcmV0KSB7CgkJCXJldHVybiAkcmV0OwoJCSAgICB9CgoJCX0KCSAgICB9CgkgICAgLyogRW5kIHJldmVyc2luZyB0aGUgY29vcmRpbmF0ZXMgaW4gdGhlIERlZmF1bHQgTWFwIENlbnRlciBQYXJhbWF0ZXIgKioqKioqKioqKiogKi8KCgkgICAgLyogVXBkYXRpbmcgdGhlIFpvb20gTGV2ZWwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwoJICAgICRxdWVyeSA9ICcKCSAgICBTRUxFQ1QgKgoJICAgIEZST00KCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwXQoJICAgIFdIRVJFCgkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGx1Z2luVHlwZV0gPSBcJ21vZHVsZVwnCgkgICAgICBBTkQKCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwbHVnaW5JZF0gPSBcJ21hcFwnCgkgICAgICBBTkQKCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwYXJhbWV0ZXJOYW1lXSA9IFwnem9vbUxldmVsXCcKCSAgICAnOwoJICAgIGxpc3QgKCRyZXQsICRyZXN1bHRzKSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5LCBhcnJheSgpLCBhcnJheSgpKTsKCgkgICAgaWYgKCRyZXN1bHRzLT5yZXN1bHRDb3VudCgpID4gMCkgeyAvKiBWZXJpZnkgdGhhdCBpdCBpc24ndCBlbXB0eSAqLwoJCXdoaWxlICgkcmVzdWx0ID0gJHJlc3VsdHMtPm5leHRSZXN1bHQoKSkgewoKCQkgICAgaWYgKCFlbXB0eSgkcmVzdWx0WzRdKSkgewoJCQkkcmVzdWx0WzRdID0gMTcgLSAkcmVzdWx0WzRdOwoJCSAgICB9CgoJCSAgICAkdXBkYXRlcXVlcnkgPSAnCgkJICAgIFVQREFURQoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwXQoJCSAgICBTRVQKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGFyYW1ldGVyVmFsdWVdID0gXCcnIC4gJHJlc3VsdFs0XSAuICdcJwoJCSAgICBXSEVSRQoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwbHVnaW5UeXBlXSA9IFwnJyAuICRyZXN1bHRbMF0gLiAnXCcKCQkgICAgICBBTkQKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGx1Z2luSWRdID0gXCcnIC4gJHJlc3VsdFsxXSAuICdcJwoJCSAgICAgIEFORAoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjppdGVtSWRdID0gXCcnIC4gJHJlc3VsdFsyXSAuICdcJwoJCSAgICAgIEFORAoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwYXJhbWV0ZXJOYW1lXSA9IFwnJyAuICRyZXN1bHRbM10gLiAnXCcKCQkgICAgJzsKCgkJICAgICRyZXQgPSAkc3RvcmFnZS0+ZXhlY3V0ZSgkdXBkYXRlcXVlcnkpOyAvKiBwdXQgdGhlIHZhbHVlcyBpbiBNYXBtYXAgKi8KCQkgICAgaWYgKCRyZXQpIHsKCQkJcmV0dXJuICRyZXQ7CgkJICAgIH0KCgkJfQoJICAgIH0KCSAgICAvKiBFbmQgdXBkYXRpbmcgdGhlIE1hcCBab29tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwoKCSAgICAvKiBVcGRhdGluZyB0aGUgRGVmYXVsdCBab29tIExldmVsICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCgkgICAgJHF1ZXJ5ID0gJwoJICAgIFNFTEVDVCAqCgkgICAgRlJPTQoJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXBdCgkgICAgV0hFUkUKCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwbHVnaW5UeXBlXSA9IFwnbW9kdWxlXCcKCSAgICAgIEFORAoJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBsdWdpbklkXSA9IFwnbWFwXCcKCSAgICAgIEFORAoJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBhcmFtZXRlck5hbWVdID0gXCdHVk1ab29tXCcKCSAgICAnOwoJICAgIGxpc3QgKCRyZXQsICRyZXN1bHRzKSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5LCBhcnJheSgpLCBhcnJheSgpKTsKCgkgICAgaWYgKCRyZXN1bHRzLT5yZXN1bHRDb3VudCgpID4gMCkgeyAvKiBWZXJpZnkgdGhhdCBpdCBpc24ndCBlbXB0eSAqLwoJCXdoaWxlICgkcmVzdWx0ID0gJHJlc3VsdHMtPm5leHRSZXN1bHQoKSkgewoKCQkgICAgaWYgKCFlbXB0eSgkcmVzdWx0WzRdKSkgewoJCQkkcmVzdWx0WzRdID0gMTcgLSAkcmVzdWx0WzRdOwoJCSAgICB9CgoJCSAgICAkdXBkYXRlcXVlcnkgPSAnCgkJICAgIFVQREFURQoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwXQoJCSAgICBTRVQKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGFyYW1ldGVyVmFsdWVdID0gXCcnIC4gJHJlc3VsdFs0XSAuICdcJwoJCSAgICBXSEVSRQoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwbHVnaW5UeXBlXSA9IFwnJyAuICRyZXN1bHRbMF0gLiAnXCcKCQkgICAgICBBTkQKCQkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGx1Z2luSWRdID0gXCcnIC4gJHJlc3VsdFsxXSAuICdcJwoJCSAgICAgIEFORAoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjppdGVtSWRdID0gXCcnIC4gJHJlc3VsdFsyXSAuICdcJwoJCSAgICAgIEFORAoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwYXJhbWV0ZXJOYW1lXSA9IFwnJyAuICRyZXN1bHRbM10gLiAnXCcKCQkgICAgJzsKCgkJICAgICRyZXQgPSAkc3RvcmFnZS0+ZXhlY3V0ZSgkdXBkYXRlcXVlcnkpOyAvKiBwdXQgdGhlIHZhbHVlcyBpbiBNYXBtYXAgKi8KCQkgICAgaWYgKCRyZXQpIHsKCQkJcmV0dXJuICRyZXQ7CgkJICAgIH0KCgkJfQoJICAgIH0KCSAgICAvKiBFbmQgdXBkYXRpbmcgdGhlIERlZmF1bHQgTWFwIFpvb20gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCgoJICAgIC8qIFVwZGF0aW5nIHRoZSBEZWZhdWx0IFpvb21JbiBMZXZlbCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwoJICAgICRxdWVyeSA9ICcKCSAgICBTRUxFQ1QgKgoJICAgIEZST00KCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwXQoJICAgIFdIRVJFCgkgICAgICBbR2FsbGVyeVBsdWdpblBhcmFtZXRlck1hcDo6cGx1Z2luVHlwZV0gPSBcJ21vZHVsZVwnCgkgICAgICBBTkQKCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwbHVnaW5JZF0gPSBcJ21hcFwnCgkgICAgICBBTkQKCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwYXJhbWV0ZXJOYW1lXSA9IFwnem9vbUluTGV2ZWxcJwoJICAgICc7CgkgICAgbGlzdCAoJHJldCwgJHJlc3VsdHMpID0gJGdhbGxlcnktPnNlYXJjaCgkcXVlcnksIGFycmF5KCksIGFycmF5KCkpOwoKCSAgICBpZiAoJHJlc3VsdHMtPnJlc3VsdENvdW50KCkgPiAwKSB7IC8qIFZlcmlmeSB0aGF0IGl0IGlzbid0IGVtcHR5ICovCgkJd2hpbGUgKCRyZXN1bHQgPSAkcmVzdWx0cy0+bmV4dFJlc3VsdCgpKSB7CgoJCSAgICBpZiAoIWVtcHR5KCRyZXN1bHRbNF0pKSB7CgkJCSRyZXN1bHRbNF0gPSAxNyAtICRyZXN1bHRbNF07CgkJICAgIH0KCgkJICAgICR1cGRhdGVxdWVyeSA9ICcKCQkgICAgVVBEQVRFCgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXBdCgkJICAgIFNFVAoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwYXJhbWV0ZXJWYWx1ZV0gPSBcJycgLiAkcmVzdWx0WzRdIC4gJ1wnCgkJICAgIFdIRVJFCgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBsdWdpblR5cGVdID0gXCcnIC4gJHJlc3VsdFswXSAuICdcJwoJCSAgICAgIEFORAoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwbHVnaW5JZF0gPSBcJycgLiAkcmVzdWx0WzFdIC4gJ1wnCgkJICAgICAgQU5ECgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6Oml0ZW1JZF0gPSBcJycgLiAkcmVzdWx0WzJdIC4gJ1wnCgkJICAgICAgQU5ECgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBhcmFtZXRlck5hbWVdID0gXCcnIC4gJHJlc3VsdFszXSAuICdcJwoJCSAgICAnOwoKCQkgICAgJHJldCA9ICRzdG9yYWdlLT5leGVjdXRlKCR1cGRhdGVxdWVyeSk7IC8qIHB1dCB0aGUgdmFsdWVzIGluIE1hcG1hcCAqLwoJCSAgICBpZiAoJHJldCkgewoJCQlyZXR1cm4gJHJldDsKCQkgICAgfQoKCQl9CgkgICAgfQoJICAgIC8qIEVuZCB1cGRhdGluZyB0aGUgRGVmYXVsdCBNYXAgWm9vbUluICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KCgkgICAgLyogVXBkYXRpbmcgdGhlIE1hbnVhbCBGaWx0ZXIgaW5mb3JtYXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCgkgICAgJHF1ZXJ5ID0gJwoJICAgIFNFTEVDVCAqCgkgICAgRlJPTQoJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXBdCgkgICAgV0hFUkUKCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwbHVnaW5UeXBlXSA9IFwnbW9kdWxlXCcKCSAgICAgIEFORAoJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBsdWdpbklkXSA9IFwnbWFwXCcKCSAgICAgIEFORAoJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBhcmFtZXRlck5hbWVdID0gXCdGaWx0ZXJzXCcKCSAgICAnOwoJICAgIGxpc3QgKCRyZXQsICRyZXN1bHRzKSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5LCBhcnJheSgpLCBhcnJheSgpKTsKCgkgICAgaWYgKCRyZXN1bHRzLT5yZXN1bHRDb3VudCgpID4gMCkgeyAvKiBWZXJpZnkgdGhhdCBpdCBpc24ndCBlbXB0eSAqLwoJCXdoaWxlICgkcmVzdWx0ID0gJHJlc3VsdHMtPm5leHRSZXN1bHQoKSkgewoKCQkgICAgaWYgKCFlbXB0eSgkcmVzdWx0WzRdKSkgeyAvKiB3ZSBkbyBoYXZlIHNvbWUgZmlsdGVycywgc3RhcnQgdGhlIHVwZ3JhZGUgKi8KCQkJJGZpbHRlcmFycmF5ID0gZXhwbG9kZSgnfCcsICRyZXN1bHRbNF0pOwoJCQlmb3JlYWNoICgkZmlsdGVyYXJyYXkgYXMgJGtleSA9PiAkZmlsdGVyaW5mb3MpIHsKCQkJICAgICRpbmZvcyA9IGV4cGxvZGUoJ2AnLCAkZmlsdGVyaW5mb3MpOwoJCQkgICAgJHRlbXBjZW50ZXIgPSBleHBsb2RlKCcsJywgJGluZm9zWzNdKTsKCQkJICAgIC8qIGludmVydCB0aGUgY29vcmRpbmF0ZXMgZm9yIHRoaXMgZmlsdGVyICovCgkJCSAgICAkaW5mb3NbM10gPSAkdGVtcGNlbnRlclsxXSAuICcsJyAuICR0ZW1wY2VudGVyWzBdOwoJCQkgICAgJGluZm9zWzJdID0gMTcgLSAkaW5mb3NbMl07ICAvKiBjaGFuZ2UgdGhlIHpvb20gZm9yIHRoaXMgZmlsdGVyICovCgkJCSAgICAvKiBwdXQgdGhlIG5ldyBpbmZvcyBiYWNrIGludG8gdGhlIG9yaWdpbmFsIGFycmF5ICovCgkJCSAgICAkZmlsdGVyYXJyYXlbJGtleV0gPSBpbXBsb2RlICgnYCcsICRpbmZvcyk7CgkJCX0KCQkJLyogcHV0IGFsbCB0aGUgZml4ZWQgZmlsdGVyIGludG8gdGhlIHJlc3VsdCAqLwoJCQkkcmVzdWx0WzRdID0gaW1wbG9kZSgnfCcsICRmaWx0ZXJhcnJheSk7CgkJICAgIH0KCgkJICAgICR1cGRhdGVxdWVyeSA9ICcKCQkgICAgVVBEQVRFCgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXBdCgkJICAgIFNFVAoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwYXJhbWV0ZXJWYWx1ZV0gPSBcJycgLiAkcmVzdWx0WzRdIC4gJ1wnCgkJICAgIFdIRVJFCgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBsdWdpblR5cGVdID0gXCcnIC4gJHJlc3VsdFswXSAuICdcJwoJCSAgICAgIEFORAoJCSAgICAgIFtHYWxsZXJ5UGx1Z2luUGFyYW1ldGVyTWFwOjpwbHVnaW5JZF0gPSBcJycgLiAkcmVzdWx0WzFdIC4gJ1wnCgkJICAgICAgQU5ECgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6Oml0ZW1JZF0gPSBcJycgLiAkcmVzdWx0WzJdIC4gJ1wnCgkJICAgICAgQU5ECgkJICAgICAgW0dhbGxlcnlQbHVnaW5QYXJhbWV0ZXJNYXA6OnBhcmFtZXRlck5hbWVdID0gXCcnIC4gJHJlc3VsdFszXSAuICdcJwoJCSAgICAnOwoKCQkgICAgJHJldCA9ICRzdG9yYWdlLT5leGVjdXRlKCR1cGRhdGVxdWVyeSk7IC8qIHB1dCB0aGUgdmFsdWVzIGluIE1hcG1hcCAqLwoJCSAgICBpZiAoJHJldCkgewoJCQlyZXR1cm4gJHJldDsKCQkgICAgfQoKCQl9CgkgICAgfQoJICAgIC8qIEVuZCB1cGRhdGluZyB0aGUgTWFudWFsIEZpbHRlciBJbmZvcm1hdGlvbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KCSAgICAKCWNhc2UgJzAuNS4xJzoKCWNhc2UgJzAuNS4xYSc6CgljYXNlICcwLjUuMWInOgoJY2FzZSAnMC41LjFjJzoKCWNhc2UgJzAuNS4xZCc6CgljYXNlICcwLjUuMic6CgljYXNlICcwLjUuMmEnOgoJCQkJCS8qIEdldCBJbmZvcm1hdGlvbiBmb3IgdGhlICJDb2xvcnMiLCAiQWxidW1Db2xvciIgYW5kICJQaG90b0NvbG9yIiBmaWVsZHMgYW5kIG1vdmUgYWxsIG9mIGl0IHRvICJDb2xvciIgKi8KCSAgICAkdXBkYXRlcXVlcnkgPSAnCgkgICAgVVBEQVRFCgkgICAgICBbbWFwTWFwXQoJICAgIFNFVAoJICAgICAgW21hcE1hcDo6ZmllbGRdID0gXCdDb2xvclwnCgkgICAgV0hFUkUKCSAgICAgIFttYXBNYXA6OmZpZWxkXSA9IFwnQ29sb3JzXCcKCSAgICAgIE9SCgkgICAgICBbbWFwTWFwOjpmaWVsZF0gPSBcJ0FsYnVtQ29sb3JcJwoJICAgICAgT1IKCSAgICAgIFttYXBNYXA6OmZpZWxkXSA9IFwnUGhvdG9Db2xvclwnCgkgICAgJzsKCSAgICAkcmV0ID0gJHN0b3JhZ2UtPmV4ZWN1dGUoJHVwZGF0ZXF1ZXJ5KTsgLyogcHV0IHRoZSB2YWx1ZXMgaW4gTWFwbWFwICovCgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9CQkJCQoJY2FzZSAnMC41LjMnOgoJY2FzZSAnMC41LjQnOgoJY2FzZSAnMC41LjUnOgoJY2FzZSAnMC41LjYnOgoJICAgIC8qIENoYW5nZSBzdG9yZWQgbWFwIGtleXMgdG8gbmV3IHN0eWxlICovCgkgICAgJG5ld0tleXMgPSBhcnJheSgpOwoJICAgIGxpc3QgKCRyZXQsICRtYXBLZXlzKSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnTWFwS2V5cycpOwoJICAgIC8qIEZvcm1hdCBvZiBvbGQga2V5cyBhcyBzZXJpYWxpemVkIGluIHRoZSBkYXRhYmFzZTogCgkgICAgICogMWBQMU5hbWVgUDFIb3N0YFAxUG9ydGBQMUFwaUtleXwyYFAyTmFtZWBQMkhvc3RgUDJQb3J0YFAyQXBpS2V5CgkgICAgICogRm9ybWF0IG9mIG5ldyBrZXlzIHNlcmlhbGl6ZWQgaW4gdGhlIGRhdGFiYXNlOgoJICAgICAqIGFycmF5KAoJICAgICAqICAgYXJyYXkoJ25hbWUnID0+IFAxTmFtZSwKCSAgICAgKiAgICAgICAgICd1cmwnID0+IGh0dHA6Ly9QMUhvc3Q6UDFQb3J0LCAob3IgaHR0cHMgd2hlcmUgcG9ydD00NDMpCgkgICAgICogICAgICAgICAnYXBpS2V5JyA9PiBQMUFwaUtleSksCgkgICAgICogICBhcnJheSgnbmFtZScgPT4gUDJOYW1lLAoJICAgICAqICAgICAgICAgJ3VybCcgPT4gaHR0cDovL1AySG9zdDpQMlBvcnQsIChvciBodHRwcyB3aGVyZSBwb3J0PTQ0MykKCSAgICAgKiAgICAgICAgICdhcGlLZXknID0+IFAyQXBpS2V5KQoJICAgICAqICkKCSAgICAgKi8KCSAgICBpZiAoZW1wdHkoJHJldCkpIHsKCSAgICAJJGFsbGtleXNldHMgPSBleHBsb2RlKCd8JywgJG1hcEtleXMpOwoJICAgIAlmb3JlYWNoICgkYWxsa2V5c2V0cyBhcyAka2V5c2V0KSB7CgkJICAgICR0ZW1wID0gZXhwbG9kZSgnYCcsICRrZXlzZXQpOwoJCSAgICAkcHJvdG9jb2wgPSAoJHRlbXBbM10gPT0gJzQ0MycpID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJzsKCQkgICAgJHBvcnRTdWZmaXggPSAoJHRlbXBbM10gPT0gJzQ0MycgfHwgJHRlbXBbM10gPT0gJzgwJykgPyAnJyA6ICc6JyAuICR0ZW1wWzNdOwoJCSAgICAkdXJsID0gJHByb3RvY29sIC4gJHRlbXBbMl0gLiAkcG9ydFN1ZmZpeDsKCQkgICAgJG5ld0tleXNbXSA9IGFycmF5KCduYW1lJyA9PiAkdGVtcFsxXSwgJ3VybCcgPT4gJHVybCwgJ2FwaUtleScgPT4gJHRlbXBbNF0pOwoJCX0KCQkvLyByZW1vdmUgaXQgZmlyc3QsIG90aGVyd2lzZSBteXNxbCB3aWxsIHRocm93IGEgbmFtZSBjb2xsaXNpb24sIGV2ZW4gdGhvdWdoCgkJLy8gdGhlIGNhc2UgaXMgZGlmZmVyZW50CgkJR2FsbGVyeUNvcmVBcGk6OnJlbW92ZVBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdNYXBLZXlzJyk7CgkJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjpzZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsCgkJCSdtYXAnLAoJCQknbWFwS2V5cycsIAoJCQlzZXJpYWxpemUoJG5ld0tleXMpKTsKCQlpZiAoJHJldCkgewoJCSAgICAvLyBBdHRlbXB0IHRvIHB1dCB0aGUgb2xkIHZhbHVlIGJhY2sKCQkgICAgR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ21hcCcsICdNYXBLZXlzJywgJG1hcEtleXMpOyAKCQkgICAgcmV0dXJuICRyZXQ7CgkJfQoJCUdhbGxlcnlDb3JlQXBpOjpyZW1vdmVQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdtYXAnLCAnRWRpdEtleScpOwoJICAgIH0KCgljYXNlICdlbmQgb2YgdXBncmFkZSBwYXRoJzoKCSAgICAvKgoJICAgICAqIExlYXZlIHRoaXMgYm9ndXMgY2FzZSBhdCB0aGUgZW5kIG9mIHRoZSBsZWdpdGltYXRlIGNhc2Ugc3RhdGVtZW50cyBzbyB0aGF0IHdlIGFsd2F5cwoJICAgICAqIHByb3Blcmx5IHRlcm1pbmF0ZSBvdXIgdXBncmFkZSBwYXRoIHdpdGggYSBicmVhawoJICAgICAqLwoJICAgIGJyZWFrOwoJfQoKCXJldHVybiBudWxsOwogICAgfQoKfQo/Pgo=');
expand_3537250845($outputDir, 'pngbehavior.htc', 'PHB1YmxpYzpjb21wb25lbnQgbGlnaHRXZWlnaHQ9InRydWUiPgo8cHVibGljOmF0dGFjaCBldmVudD0ib25wcm9wZXJ0eWNoYW5nZSIgb25ldmVudD0icHJvcGVydHlDaGFuZ2VkKCkiIC8+CjxwdWJsaWM6YXR0YWNoIGV2ZW50PSJvbmJlZm9yZXByaW50IiBvbmV2ZW50PSJiZWZvcmVQcmludCgpIiBmb3I9IndpbmRvdyIvPgo8cHVibGljOmF0dGFjaCBldmVudD0ib25hZnRlcnByaW50IiBvbmV2ZW50PSJhZnRlclByaW50KCkiIGZvcj0id2luZG93Ii8+CjxzY3JpcHQ+CgovKgogKiBQTkcgQmVoYXZpb3IKICoKICogVGhpcyBzY3JpcHQgd2FzIGNyZWF0ZWQgYnkgRXJpayBBcnZpZHNzb24gKGh0dHA6Ly93ZWJmeC5lYWUubmV0L2NvbnRhY3QuaHRtbCNlcmlrKQogKiBmb3IgV2ViRlggKGh0dHA6Ly93ZWJmeC5lYWUubmV0KQogKiBDb3B5cmlnaHQgMjAwMi0yMDA0CiAqCiAqIEZvciB1c2FnZSBzZWUgbGljZW5zZSBhdCBodHRwOi8vd2ViZnguZWFlLm5ldC9saWNlbnNlLmh0bWwKICoKICogVmVyc2lvbjogMS4wMgogKiBDcmVhdGVkOiAyMDAxLT8/LT8/CUZpcnN0IHdvcmtpbmcgdmVyc2lvbgogKiBVcGRhdGVkOiAyMDAyLTAzLTI4CUZpeGVkIGlzc3VlIHdoZW4gc3RhcnRpbmcgd2l0aCBhIG5vbiBwbmcgaW1hZ2UgYW5kCiAqICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGluZyBiZXR3ZWVuIG5vbiBwbmcgaW1hZ2VzCiAqICAgICAgICAgIDIwMDMtMDEtMDYJRml4ZWQgUmVnRXhwIHRvIGNvcnJlY3RseSB3b3JrIHdpdGggSUUgNS4weAogKiAgICAgICAgICAyMDA0LTA1LTA5ICBXaGVuIHByaW50aW5nIHJldmVydCB0byBvcmlnaW5hbAogKgogKi8KCnZhciBzdXBwb3J0ZWQgPSAvTVNJRSAoKDVcLjUpfFs2Nzg5XSkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYKCQkJCW5hdmlnYXRvci5wbGF0Zm9ybSA9PSAiV2luMzIiOwoKdmFyIHJlYWxTcmM7CnZhciBibGFua1NyYyA9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vbWFwZmlsZXMvdHJhbnNwYXJlbnQuZ2lmIjsKdmFyIGlzUHJpbnRpbmcgPSBmYWxzZTsKCmlmIChzdXBwb3J0ZWQpIGZpeEltYWdlKCk7CgpmdW5jdGlvbiBwcm9wZXJ0eUNoYW5nZWQoKSB7CglpZiAoIXN1cHBvcnRlZCB8fCBpc1ByaW50aW5nKSByZXR1cm47CgoJdmFyIHBOYW1lID0gZXZlbnQucHJvcGVydHlOYW1lOwoJaWYgKHBOYW1lICE9ICJzcmMiKSByZXR1cm47CgkvLyBpZiBub3Qgc2V0IHRvIGJsYW5rCglpZiAoIW5ldyBSZWdFeHAoYmxhbmtTcmMpLnRlc3Qoc3JjKSkKCQlmaXhJbWFnZSgpOwp9OwoKZnVuY3Rpb24gZml4SW1hZ2UoKSB7CgkvLyBnZXQgc3JjCgl2YXIgc3JjID0gZWxlbWVudC5zcmM7CgoJLy8gY2hlY2sgZm9yIHJlYWwgY2hhbmdlCglpZiAoc3JjID09IHJlYWxTcmMgJiYgL1wucG5nJC9pLnRlc3Qoc3JjKSkgewoJCWVsZW1lbnQuc3JjID0gYmxhbmtTcmM7CgkJcmV0dXJuOwoJfQoKCWlmICggISBuZXcgUmVnRXhwKGJsYW5rU3JjKS50ZXN0KHNyYykpIHsKCQkvLyBiYWNrdXAgb2xkIHNyYwoJCXJlYWxTcmMgPSBzcmM7Cgl9CgoJLy8gdGVzdCBmb3IgcG5nCglpZiAoL1wucG5nJC9pLnRlc3QocmVhbFNyYykpIHsKCQkvLyBzZXQgYmxhbmsgaW1hZ2UKCQllbGVtZW50LnNyYyA9IGJsYW5rU3JjOwoJCS8vIHNldCBmaWx0ZXIKCQllbGVtZW50LnJ1bnRpbWVTdHlsZS5maWx0ZXIgPSAicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LiIgKwoJCQkJCSJBbHBoYUltYWdlTG9hZGVyKHNyYz0nIiArIHNyYyArICInLHNpemluZ01ldGhvZD0nc2NhbGUnKSI7Cgl9CgllbHNlIHsKCQkvLyByZW1vdmUgZmlsdGVyCgkJZWxlbWVudC5ydW50aW1lU3R5bGUuZmlsdGVyID0gIiI7Cgl9Cn0KCmZ1bmN0aW9uIGJlZm9yZVByaW50KCkgewoJaXNQcmludGluZyA9IHRydWU7CgllbGVtZW50LnNyYyA9IHJlYWxTcmM7CgllbGVtZW50LnJ1bnRpbWVTdHlsZS5maWx0ZXIgPSAiIjsKCXJlYWxTcmMgPSBudWxsOwp9CgpmdW5jdGlvbiBhZnRlclByaW50KCkgewoJaXNQcmludGluZyA9IGZhbHNlOwoJZml4SW1hZ2UoKTsKfQoKPC9zY3JpcHQ+CjwvcHVibGljOmNvbXBvbmVudD4K');
expand_3537250845($outputDir, 'po/GNUmakefile', 'R0FMTEVSWURJUiA/PSAuLi8uLi8uLgpUT09MRElSID89ICQoR0FMTEVSWURJUikvbGliL3Rvb2xzCgppbmNsdWRlICQoVE9PTERJUikvcG8vR05VbWFrZWZpbGUuaW5jCgo=');
expand_3537250845($outputDir, 'po/strings.raw', 'IyAkSWQ6IHN0cmluZ3MucmF3IDEyNjYgMjAwNy0xMi0yNyAwNTo1NDoyNVogc2lsaWNvbmZpZW5kICQKCi8qIENhbGxiYWNrcy5pbmMgKi8KZ2V0dGV4dCgiUm91dGUiKQpnZXR0ZXh0KCJBbGJ1bSIpCmdldHRleHQoIkRlZmF1bHQiKQpnZXR0ZXh0KCJObyBGaWx0ZXJzIikKZ2V0dGV4dCgiRGVmaW5lLi4uIikKZ2V0dGV4dCgiUGhvdG8iKQpnZXR0ZXh0KCJJdGVtIikKLy8gSElOVDogTm9ydGggYWJicmV2aWF0aW9uCmdldHRleHQoIk4iKQovLyBISU5UOiBTb3V0aCBhYmJyZXZpYXRpb24KZ2V0dGV4dCgiUyIpCi8vIEhJTlQ6IEVhc3QgYWJicmV2aWF0aW9uCmdldHRleHQoIkUiKQovLyBISU5UOiBXZXN0IGFiYnJldmlhdGlvbgpnZXR0ZXh0KCJXIikKCi8qIE1hcFNpdGVBZG1pbi5pbmMgKi8KZ2V0dGV4dCgiTm8gUHJvZmlsZXMiKQoKLyogbWFwSXRlbUVkaXQuaW5jICovCmdldHRleHQoIkJhZCBjb29yZGluYXRlcywgcGxlYXNlIHZlcmlmeSIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBGaWx0ZXJBZG1pbi50cGwgKi8KZ2V0dGV4dCgiQmFkIExvb2tBdCBwYXJhbWV0ZXJzLCBwbGVhc2UgdmVyaWZ5IikKZ2V0dGV4dCgiQ2hhbmdlcyBzYXZlZCBzdWNjZXNzZnVsbHkiKQpnZXR0ZXh0KCJHUFMgY29vcmRpbmF0ZXMgc3VjY2Vzc2Z1bGx5IGVudGVyZWQgYW5kIHNhdmVkIikKZ2V0dGV4dCgiR29vZ2xlIE1hcCIpIC8qIGFsc28gaW46IG1vZHVsZS5pbmMgY2xhc3Nlcy9tYXBTZWFyY2guY2xhc3MgKi8KCi8qIG1vZHVsZS5pbmMgKi8KZ2V0dGV4dCgiR29vZ2xlIE1hcCBNb2R1bGUiKSAvKiBhbHNvIGluOiBjbGFzc2VzL21hcFNlYXJjaC5jbGFzcyAqLwpnZXR0ZXh0KCJTaG93IGl0ZW1zIG9uIGEgZHluYW1pYyBHb29nbGUgTWFwIikKZ2V0dGV4dCgiR2FsbGVyeSIpCmdldHRleHQoIltHb29nbGUgTWFwXSBBbGxvdyBDb29yZGluYXRlIEVkaXRpbmciKQpnZXR0ZXh0KCJUaGUgSUQgb2YgdGhlIGdyb3VwIHRvIHNob3csIE5vIGdyb3VwIHdpbGwgc2hvdyB0aGUgZGVmYXVsdCBNYXAiKQpnZXR0ZXh0KCJWaWV3IGluIEdvb2dsZSBFYXJ0aCIpCmdldHRleHQoIlZpZXcgQWxidW0gb24gYSBNYXAiKQpnZXR0ZXh0KCJTaG93IGEgR29vZ2xlIE1hcCIpCgovKiBjbGFzc2VzL0dvb2dsZU1hcFV0aWxpdGllcy5jbGFzcyAqLwpnZXR0ZXh0KCJHUFMgY29vcmRpbmF0ZXMgd3JpdHRlbiB0byBmaWxlLCBvbGQgZmlsZSBiYWNrZWQgdXAiKQoKLyogY2xhc3Nlcy9Qb3B1bGF0ZUdQU0VYSUZJbmZvcy5jbGFzcyAqLwpnZXR0ZXh0KCJQb3B1bGF0ZSBHUFMgRGF0YSBmcm9tIEVYSUYgSGVhZGVycyIpCmdldHRleHQoIlRoaXMgdGFzayB3aWxsIGdvIHRocm91Z2ggYWxsIHRoZSBnYWxsZXJ5IGl0ZW1zIGFuZCBwb3B1bGF0ZSB0aGUgR1BTIHByb3BlcnR5IGZvciBlYWNoIHBob3RvIGl0ZW0gZnJvbSB0aGUgR1BTIGluZm9ybWF0aW9uIGluIHRoZSBFWElGIGhlYWRlciwgaWYgcHJlc2VudC4iKQpnZXR0ZXh0KCJJbnNlcnRpbmcgR1BTIGNvb3JkaW5hdGVzIGZyb20gRVhJRiBoZWFkZXIiKQpnZXR0ZXh0KCJJdGVtICVkIG9mICVkIikgLyogYWxzbyBpbjogY2xhc3Nlcy9Xcml0ZUV4aWZIZWFkZXJUb1BpY3R1cmVzLmNsYXNzICovCmdldHRleHQoIkVYSUYgaGVhZGVyIGluZm9ybWF0aW9uIGltcG9ydGVkIHN1Y2Nlc3NmdWxseSIpCgovKiBjbGFzc2VzL1dyaXRlRXhpZkhlYWRlclRvUGljdHVyZXMuY2xhc3MgKi8KZ2V0dGV4dCgiV3JpdGUgR1BTIEluZm9ybWF0aW9uIG9udG8gdGhlIEVYSUYgaGVhZGVyIGZvciB0aGUgcGljdHVyZXMiKQpnZXR0ZXh0KCJUaGlzIHRhc2sgd2lsbCBnbyB0aHJvdWdoIGFsbCB0aGUgZ2FsbGVyeSBpdGVtcyBhbmQgcG9wdWxhdGUgdGhlIEdQUyBpbmZvcm1hdGlvbiBpbiB0aGUgRVhJRiBoZWFkZXJzIGZvciBlYWNoIEpQRUcgaWYgdGhvc2UgZG9uJ3QgYWxyZWFkeSBleGlzdC4iKQpnZXR0ZXh0KCJJbnNlcnRpbmcgR1BTIGNvb3JkaW5hdGVzIGludG8gRVhJRiBoZWFkZXIiKQpnZXR0ZXh0KCJFWElGIGhlYWRlciBpbmZvcm1hdGlvbiB3cml0ZW4gc3VjY2Vzc2Z1bGx5IikKCi8qIGNsYXNzZXMvbWFwSGVscGVyLmNsYXNzICovCmdldHRleHQoIkNvbW1vbiBGaWVsZHMiKQpnZXR0ZXh0KCJBbGJ1bSBGaWVsZHMiKQpnZXR0ZXh0KCJQaG90byBGaWVsZHMiKQoKLyogY2xhc3Nlcy9tYXBTZWFyY2guY2xhc3MgKi8KZ2V0dGV4dCgiU2VhcmNoIEdvb2dsZSBNYXAgRmllbGRzIikKCi8qIHRlbXBsYXRlcy9NYXBBZG1pblRhYi50cGwgKi8KZ2V0dGV4dCgiR2VuZXJhbCBTZXR0aW5ncyIpCmdldHRleHQoIjx1Pkc8L3U+ZW5lcmFsIFNldHRpbmdzIikKZ2V0dGV4dCgiR29vZ2xlIE92ZXJ2aWV3IFNldHRpbmdzIikKZ2V0dGV4dCgiR1pvb20gU2V0dGluZ3MiKQpnZXR0ZXh0KCJUaGVtZSBTZXR0aW5ncyIpCmdldHRleHQoIjx1PlQ8L3U+aGVtZSBTZXR0aW5ncyIpCmdldHRleHQoIk1hcmtlcnMgU2V0dGluZ3MiKQpnZXR0ZXh0KCJMZWdlbmQgTWFuYWdlbWVudCIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBMZWdlbmRBZG1pbi50cGwgKi8KZ2V0dGV4dCgiPHU+TDwvdT5lZ2VuZCBNYW5hZ2VtZW50IikKZ2V0dGV4dCgiRmlsdGVyIE1hbmFnZW1lbnQiKQpnZXR0ZXh0KCI8dT5GPC91PmlsdGVyIE1hbmFnZW1lbnQiKQpnZXR0ZXh0KCJHcm91cCBNYW5hZ2VtZW50IikgLyogYWxzbyBpbjogdGVtcGxhdGVzL01hcEdyb3VwQWRtaW4udHBsICovCmdldHRleHQoIlJvdXRlcyBNYW5hZ2VtZW50IikKZ2V0dGV4dCgiPHU+UjwvdT5vdXRlcyBNYW5hZ2VtZW50IikKCi8qIHRlbXBsYXRlcy9NYXBGaWx0ZXJBZG1pbi50cGwgKi8KZ2V0dGV4dCgiTWFwIE1vZHVsZSBTZXR0aW5ncyIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBHWm9vbUFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwR29vZ2xlT3ZlcnZpZXdBZG1pbi50cGwgdGVtcGxhdGVzL01hcEdyb3VwQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBMZWdlbmRBZG1pbi50cGwgdGVtcGxhdGVzL01hcE1hcmtlcnNBZG1pbi50cGwgdGVtcGxhdGVzL01hcFJvdXRlQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBTaXRlQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBUaGVtZUFkbWluLnRwbCAqLwpnZXR0ZXh0KCJTaG93IEdvb2dsZSBNYXAiKSAvKiBhbHNvIGluOiB0ZW1wbGF0ZXMvTWFwR1pvb21BZG1pbi50cGwgdGVtcGxhdGVzL01hcEdvb2dsZU92ZXJ2aWV3QWRtaW4udHBsIHRlbXBsYXRlcy9NYXBHcm91cEFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwTGVnZW5kQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBNYXJrZXJzQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBSb3V0ZUFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwU2l0ZUFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwVGhlbWVBZG1pbi50cGwgKi8KZ2V0dGV4dCgiU2V0dGluZ3MgaGF2ZSBiZWVuIHNhdmVkISIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBHWm9vbUFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwR29vZ2xlT3ZlcnZpZXdBZG1pbi50cGwgdGVtcGxhdGVzL01hcEdyb3VwQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBMZWdlbmRBZG1pbi50cGwgdGVtcGxhdGVzL01hcE1hcmtlcnNBZG1pbi50cGwgdGVtcGxhdGVzL01hcFJvdXRlQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBTaXRlQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBUaGVtZUFkbWluLnRwbCAqLwpnZXR0ZXh0KCJUaGVyZSB3YXMgYSBwcm9ibGVtIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0LiIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBHcm91cEFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwTGVnZW5kQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBNYXJrZXJzQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBSb3V0ZUFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwU2l0ZUFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwVGhlbWVBZG1pbi50cGwgKi8KZ2V0dGV4dCgiRmlsdGVyIHN1Y2Nlc3NmdWxseSBzYXZlZCIpCmdldHRleHQoIkZpbHRlciBzdWNjZXNzZnVsbHkgZGVsZXRlZCIpCmdldHRleHQoIkZpbHRlcnMgTWFuYWdlbWVudCIpCmdldHRleHQoIlRoaXMgc2VjdGlvbiBhbGxvd3MgeW91IHRvIG1hbmFnZSBGaWx0ZXJzIikKZ2V0dGV4dCgiRmlsdGVyIDx1Pk48L3U+YW1lIikKZ2V0dGV4dCgiUGxlYXNlIGVudGVyIGEgZmlsdGVyIG5hbWUiKQpnZXR0ZXh0KCJCYXNlIDx1Plo8L3U+b29tIikKZ2V0dGV4dCgiUGxlYXNlIGVudGVyIGEgem9vbSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDE5IikgLyogYWxzbyBpbjogdGVtcGxhdGVzL01hcFNpdGVBZG1pbi50cGwgKi8KZ2V0dGV4dCgiQmFzZSBDZW50ZXIiKQpnZXR0ZXh0KCJHZXQgdmlhIGEgTWFwIikgLyogYWxzbyBpbjogdGVtcGxhdGVzL01hcEdyb3VwQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBTaXRlQWRtaW4udHBsICovCmdldHRleHQoIlNhdmUgRmlsdGVyIikKLy8gSElOVDogRGlzY2FyZCBjaGFuZ2VzCmdldHRleHQoIkNhbmNlbCIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBHWm9vbUFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwR29vZ2xlT3ZlcnZpZXdBZG1pbi50cGwgdGVtcGxhdGVzL01hcEdyb3VwQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBMZWdlbmRBZG1pbi50cGwgdGVtcGxhdGVzL01hcE1hcmtlcnNBZG1pbi50cGwgdGVtcGxhdGVzL01hcFJvdXRlQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBTaXRlQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBUaGVtZUFkbWluLnRwbCB0ZW1wbGF0ZXMvU2hvd01hcC50cGwgKi8KZ2V0dGV4dCgiRmlsdGVyIEJsb2NrIFBvc2l0aW9uIikKLy8gSElOVDogRG9uJ3QgZGlzcGxheQpnZXR0ZXh0KCJIaWRlIikgLyogYWxzbyBpbjogdGVtcGxhdGVzL01hcExlZ2VuZEFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwVGhlbWVBZG1pbi50cGwgKi8KLy8gSElOVDogT3Bwb3NpdGUgb2YgcmlnaHQKZ2V0dGV4dCgiTGVmdCIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBMZWdlbmRBZG1pbi50cGwgdGVtcGxhdGVzL01hcFRoZW1lQWRtaW4udHBsICovCi8vIEhJTlQ6IE9wcG9zaXRlIG9mIGxlZnQKZ2V0dGV4dCgiUmlnaHQiKSAvKiBhbHNvIGluOiB0ZW1wbGF0ZXMvTWFwTGVnZW5kQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBUaGVtZUFkbWluLnRwbCAqLwovLyBISU5UOiBPcHBvc2l0ZSBvZiBib3R0b20KZ2V0dGV4dCgiVG9wIikgLyogYWxzbyBpbjogdGVtcGxhdGVzL01hcExlZ2VuZEFkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwVGhlbWVBZG1pbi50cGwgKi8KLy8gSElOVDogT3Bwb3NpdGUgb2YgdG9wCmdldHRleHQoIkJvdHRvbSIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBMZWdlbmRBZG1pbi50cGwgdGVtcGxhdGVzL01hcFRoZW1lQWRtaW4udHBsICovCmdldHRleHQoIk1hbnVhbCBGaWx0ZXIgTGlzdCIpCmdldHRleHQoIkRlbGV0ZSIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBNYXJrZXJzQWRtaW4udHBsICovCmdldHRleHQoIkVkaXQiKQpnZXR0ZXh0KCJUaGVyZSBhcmUgbm8gZmlsdGVycyBkZWZpbmVkLCBjbGljayBhZGQgdG8gY3JlYXRlIG9uZSIpCi8vIEhJTlQ6IENyZWF0ZSBuZXcKZ2V0dGV4dCgiQWRkIikgLyogYWxzbyBpbjogdGVtcGxhdGVzL01hcEdyb3VwQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBNYXJrZXJzQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBSb3V0ZUFkbWluLnRwbCAqLwpnZXR0ZXh0KCJDcmVhdGUgPHU+QTwvdT5sYnVtIEZpbHRlcnMiKQpnZXR0ZXh0KCJTZXQgQWxidW0gRmlsdGVyIERlcHRoIikKZ2V0dGV4dCgiUm9vdCBBbGJ1bSBzaG93cyBvbmx5IDEgbGV2ZWwiKQpnZXR0ZXh0KCJTYXZlIFNldHRpbmdzIikgLyogYWxzbyBpbjogdGVtcGxhdGVzL01hcEdab29tQWRtaW4udHBsIHRlbXBsYXRlcy9NYXBHb29nbGVPdmVydmlld0FkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwTWFya2Vyc0FkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwUm91dGVBZG1pbi50cGwgdGVtcGxhdGVzL01hcFNpdGVBZG1pbi50cGwgdGVtcGxhdGVzL01hcFRoZW1lQWRtaW4udHBsICovCgovKiB0ZW1wbGF0ZXMvTWFwR1pvb21BZG1pbi50cGwgKi8KZ2V0dGV4dCgiR1pvb20gRXh0ZW5zaW9uIikKZ2V0dGV4dCgiVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIHRoZSBHWm9vbSBFeHRlbnNpb24iKQpnZXR0ZXh0KCJFbmE8dT5iPC91PmxlIikgLyogYWxzbyBpbjogdGVtcGxhdGVzL01hcEdvb2dsZU92ZXJ2aWV3QWRtaW4udHBsICovCmdldHRleHQoIldpbmRvdyBQb3NpdGlvbiIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBHb29nbGVPdmVydmlld0FkbWluLnRwbCAqLwpnZXR0ZXh0KCJUb3AgTGVmdCBDb3JuZXIiKSAvKiBhbHNvIGluOiB0ZW1wbGF0ZXMvTWFwR29vZ2xlT3ZlcnZpZXdBZG1pbi50cGwgdGVtcGxhdGVzL01hcFRoZW1lQWRtaW4udHBsICovCmdldHRleHQoIkJvdHRvbSBMZWZ0IENvcm5lciIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBHb29nbGVPdmVydmlld0FkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwVGhlbWVBZG1pbi50cGwgKi8KZ2V0dGV4dCgiVG9wIFJpZ2h0IENvcm5lciIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBHb29nbGVPdmVydmlld0FkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwVGhlbWVBZG1pbi50cGwgKi8KZ2V0dGV4dCgiQm90dG9tIFJpZ2h0IENvcm5lciIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBHb29nbGVPdmVydmlld0FkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwVGhlbWVBZG1pbi50cGwgKi8KZ2V0dGV4dCgiT2Zmc2V0IChsZWZ0LXJpZ2h0KSIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBHb29nbGVPdmVydmlld0FkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwVGhlbWVBZG1pbi50cGwgKi8KZ2V0dGV4dCgiT2Zmc2V0ICh0b3AtYm90dG9tKSIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBHb29nbGVPdmVydmlld0FkbWluLnRwbCB0ZW1wbGF0ZXMvTWFwVGhlbWVBZG1pbi50cGwgKi8KCi8qIHRlbXBsYXRlcy9NYXBHb29nbGVPdmVydmlld0FkbWluLnRwbCAqLwpnZXR0ZXh0KCJHb29nbGUgT3ZlcnZpZXcgTWFwIikKZ2V0dGV4dCgiVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIGFuIE92ZXJ2aWV3IE1hcCIpCmdldHRleHQoIldpbmRvdyBzaXplICg8dT53PC91PiB4IDx1Pmg8L3U+KSIpCmdldHRleHQoIlZlcmlmeSB0aGF0IHRoZSBzaXplKHMpIGZvciB0aGUgb2JqZWN0IGFyZSBjb3JyZWN0bHkgZW50ZXJlZCIpCgovKiB0ZW1wbGF0ZXMvTWFwR3JvdXBBZG1pbi50cGwgKi8KZ2V0dGV4dCgiR3JvdXAgU2V0dGluZ3MiKQpnZXR0ZXh0KCJTZXR0aW5ncyBzcGVjaWZpYyB0byB0aGlzIEdvb2dsZSBNYXAgR3JvdXAiKQpnZXR0ZXh0KCJFbnRlciBHcm91cCBUaXRsZSIpCmdldHRleHQoIlBsZWFzZSBlbnRlciBhIGdyb3VwIHRpdGxlLiIpCmdldHRleHQoIkdyb3VwIFRodW1ibmFpbCIpCmdldHRleHQoIkVudGVyIGEgY3JlYXRpb24gZGF0ZSBmb3IgdGhlIGdyb3VwIikKZ2V0dGV4dCgiRGVmYXVsdCBpcyB0b2RheSdzIGRhdGUiKQpnZXR0ZXh0KCJFbnRlciBhIFN1bW1hcnkgZm9yIHRoaXMgZ3JvdXAiKQpnZXR0ZXh0KCJVcGxvYWQgYSBUaHVtYm5haWwiKQpnZXR0ZXh0KCJVcGxvYWQgYW5kIFNldCIpCmdldHRleHQoIkVudGVyIGEgR3JvdXAgRGVzY3JpcHRpb24iKQpnZXR0ZXh0KCJHUFMgY29vcmRpbmF0ZXMgZm9yIHRoZSBtYXJrZXIiKQpnZXR0ZXh0KCJab29tTGV2ZWwgZm9yICdab29tLWluJyBsaW5rIikKZ2V0dGV4dCgiTWFya2VyIENvbG9yIikKZ2V0dGV4dCgiSXRlbXMgaW4gR3JvdXAiKQpnZXR0ZXh0KCJTZWxlY3QgdGhlIGl0ZW1zIHlvdSB3YW50IHRvIGJlIHBhcnQgb2YgdGhpcyBncm91cCIpCmdldHRleHQoIlRoZXJlIGFyZSBubyBpdGVtcyB3aXRoIEdQUyBjb29yZGluYXRlcy4gUGxlYXNlIGFkZCBjb29yZGluYXRlcyB0byBhdCBsZWFzdCBvbmUgaXRlbSB0byBjcmVhdGUgYSBncm91cC4iKQpnZXR0ZXh0KCJTYXZlIEdyb3VwIikKZ2V0dGV4dCgiVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIEdyb3Vwcy4gQSBHcm91cCBpcyBzaG93biBhcyBhIG1hcmtlciBvbiB0aGUgbWFpbiBNYXAuIFdoZW4gY2xpY2tpbmcgaXRzIHRodW1ibmFpbCwgaXQgd2lsbCBub3Qgb3BlbiBhIFBob3RvIFBhZ2Ugb3IgYW4gQWxidW0gcGFnZSBidXQgYW5vdGhlciBNYXAgd2l0aCB0aGUgaXRlbXMgc2VsZWN0ZWQgdG8gYmUgaW4gdGhhdCBncm91cC4iKQpnZXR0ZXh0KCJHcm91cCBJRCIpCmdldHRleHQoIkdyb3VwIE5hbWUiKQpnZXR0ZXh0KCJHcm91cCBDcmVhdGlvbiBEYXRlIikKZ2V0dGV4dCgiQWN0aW9ucyIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9NYXBSb3V0ZUFkbWluLnRwbCAqLwpnZXR0ZXh0KCJEZWxldGUgR3JvdXAgJXMiKQpnZXR0ZXh0KCJFZGl0IEdyb3VwICVzIikKZ2V0dGV4dCgiVGhlcmUgYXJlIG5vIEdyb3VwcyBjcmVhdGVkLCBjbGljayIpCmdldHRleHQoIkFkZCBHcm91cCIpCgovKiB0ZW1wbGF0ZXMvTWFwSGVhZGVyLnRwbCAqLwpnZXR0ZXh0KCJHb29nbGUgTG9jYWwiKQpnZXR0ZXh0KCJab29tIEluIikgLyogYWxzbyBpbjogdGVtcGxhdGVzL2luZm93aW5kb3cvY2VudGVyZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2RlZmF1bHQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2cyY2VudGVyZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2cyZGVmYXVsdC5pbmMgdGVtcGxhdGVzL2luZm93aW5kb3cvZzJ0YWJiZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2cydGFibGUuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2czY2VudGVyZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2czZGVmYXVsdC5pbmMgdGVtcGxhdGVzL2luZm93aW5kb3cvZzN0YWJiZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2czdGFibGUuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2djZW50ZXJlZC5pbmMgdGVtcGxhdGVzL2luZm93aW5kb3cvZ2RlZmF1bHQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2d0YWJiZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2d0YWJsZS5pbmMgdGVtcGxhdGVzL2luZm93aW5kb3cvZ3ZpbWFnZS5pbmMgdGVtcGxhdGVzL2luZm93aW5kb3cvdGFiYmVkLmluYyB0ZW1wbGF0ZXMvaW5mb3dpbmRvdy90YWJsZS5pbmMgKi8KZ2V0dGV4dCgiWm9vbSBPdXQiKQpnZXR0ZXh0KCJDbGljayB0byBzZXQgem9vbSBsZXZlbCIpCmdldHRleHQoIkRyYWcgdG8gem9vbSIpCmdldHRleHQoIkdvIGxlZnQiKQpnZXR0ZXh0KCJHbyByaWdodCIpCmdldHRleHQoIkdvIHVwIikKZ2V0dGV4dCgiR28gZG93biIpCmdldHRleHQoIlJldHVybiB0byB0aGUgbGFzdCByZXN1bHQiKQpnZXR0ZXh0KCIoYykyMDA3IEdvb2dsZSIpCmdldHRleHQoIk1hcCBkYXRhIChjKTIwMDcgIikKZ2V0dGV4dCgiTkFWVEVRKHRtKSIpCmdldHRleHQoIlRlbGUgQXRsYXMiKQpnZXR0ZXh0KCJaRU5SSU4iKQpnZXR0ZXh0KCJNYXAgKGMpMjAwNyAiKQpnZXR0ZXh0KCJNYXAiKSAvKiBhbHNvIGluOiB0ZW1wbGF0ZXMvYmxvY2tzL2Jsb2Nrcy5pbmMgKi8KLy8gSElOVDogU2hvcnQgZm9ybSBmb3IgTWFwCmdldHRleHQoIk1hcCIpCmdldHRleHQoIkh5YnJpZCIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9ibG9ja3MvYmxvY2tzLmluYyAqLwovLyBISU5UOiBTaG9ydCBmb3JtIGZvciBIeWJyaWQKZ2V0dGV4dCgiSHliIikKZ2V0dGV4dCgiTmV3ISIpCmdldHRleHQoIlRlcm1zIG9mIFVzZSIpCmdldHRleHQoIlNhdGVsbGl0ZSIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9ibG9ja3MvYmxvY2tzLmluYyAqLwovLyBISU5UOiBTaG9ydCBmb3JtIGZvciBTYXRlbGxpdGUKZ2V0dGV4dCgiU2F0IikKZ2V0dGV4dCgiSW1hZ2VyeSAoYykyMDA3ICIpCmdldHRleHQoIlNjYWxlIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hcCIpCmdldHRleHQoImttIikKZ2V0dGV4dCgibWkiKQpnZXR0ZXh0KCJtIikKZ2V0dGV4dCgiZnQiKQovLyBISU5UOiBEZWNpbWFsIHBvaW50CmdldHRleHQoIi4iKQovLyBISU5UOiBUaG91c2FuZHMgc2VwYXJhdG9yCmdldHRleHQoIiwiKQpnZXR0ZXh0KCJXZSBhcmUgc29ycnksIGJ1dCB3ZSBkb24ndCBoYXZlIG1hcHMgYXQgdGhpcyB6b29tIGxldmVsIGZvciB0aGlzIHJlZ2lvbi4gVHJ5IHpvb21pbmcgb3V0IGZvciBhIGJyb2FkZXIgbG9vay4iKQpnZXR0ZXh0KCJXZSBhcmUgc29ycnksIGJ1dCB3ZSBkb24ndCBoYXZlIGltYWdlcnkgYXQgdGhpcyB6b29tIGxldmVsIGZvciB0aGlzIHJlZ2lvbi4gVHJ5IHpvb21pbmcgb3V0IGZvciBhIGJyb2FkZXIgbG9vay4iKQpnZXR0ZXh0KCJodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW50bC9lbl9BTEwvaGVscC90ZXJtc19sb2NhbC5odG1sIikKZ2V0dGV4dCgiaHR0cDovL3d3dy5nb29nbGUuY29tL2ludGwvZW5fQUxML21hcGZpbGVzLyIpCmdldHRleHQoImdvb2dsZS5jb20iKQpnZXR0ZXh0KCJUaGUgR29vZ2xlIE1hcHMgQVBJIGtleSB1c2VkIG9uIHRoaXMgd2ViIHNpdGUgd2FzIHJlZ2lzdGVyZWQgZm9yIGEgZGlmZmVyZW50IHdlYiBzaXRlLiBZb3UgY2FuIGdlbmVyYXRlIGEgbmV3IGtleSBmb3IgdGhpcyB3ZWIgc2l0ZSBhdCBodHRwOi8vd3d3Lmdvb2dsZS5jb20vYXBpcy9tYXBzLyIpCmdldHRleHQoIk1vdmUgaGlzdG9yeSIpIC8qIGFsc28gaW46IHRlbXBsYXRlcy9TaG93TWFwLnRwbCAqLwpnZXR0ZXh0KCJtb3ZlIikKZ2V0dGV4dCgiem9vbSIpCmdldHRleHQoInN0YXJ0IikKZ2V0dGV4dCgid2luZG93IikKCi8qIHRlbXBsYXRlcy9NYXBMZWdlbmRBZG1pbi50cGwgKi8KZ2V0dGV4dCgiVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYSBsZWdlbmQiKQpnZXR0ZXh0KCJNYWluIE9wdGlvbnMiKQpnZXR0ZXh0KCJMZWdlbmQgUG9zaXRpb24iKQpnZXR0ZXh0KCJQaG90byBMZWdlbmQiKSAvKiBhbHNvIGluOiB0ZW1wbGF0ZXMvYmxvY2tzL0xlZ2VuZC50cGwgKi8KZ2V0dGV4dCgiQWN0aXZhdGUgPHU+UDwvdT5ob3RvIExlZ2VuZCIpCmdldHRleHQoIkluaXRpYWxseSBFeHBhbmQgTGVnZW5kIikKZ2V0dGV4dCgiTm90IHZhbGlkIHdoZW4gbGVnZW5kIGlzIGxvY2F0ZWQgb24gdGhlIHRvcCBvciBib3R0b20iKQpnZXR0ZXh0KCJBbGJ1bSBMZWdlbmQiKSAvKiBhbHNvIGluOiB0ZW1wbGF0ZXMvYmxvY2tzL0xlZ2VuZC50cGwgKi8KZ2V0dGV4dCgiQWN0aXZhdGUgQWxidW0gPHU+TDwvdT5lZ2VuZCIpCmdldHRleHQoIkdyb3VwIExlZ2VuZCIpCmdldHRleHQoIkFjdGl2YXRlIEdyb3VwIExlZ2VuZCIpCmdldHRleHQoIlNhdmUgTGVnZW5kIikKCi8qIHRlbXBsYXRlcy9NYXBNYXJrZXJzQWRtaW4udHBsICovCmdldHRleHQoIk1hcmtlcnMgaGF2ZSBiZWVuIGdlbmVyYXRlZCBzdWNjZXNmdWxseSEiKQpnZXR0ZXh0KCJTYXZlIHNldHRpbmdzIGJlZm9yZSBjb250aW51aW5nISIpCmdldHRleHQoIlRoZSBNYXJrZXIgU2V0IGhhcyBiZWVuIGRlbGV0ZWQsIGl0IGNhbiBiZSByZWNyZWF0ZWQgdmlhIHRoZSBBZGQgYnV0dG9uIikKZ2V0dGV4dCgiQ2Fubm90IGNyZWF0ZSB0aGUgbWFya2VyIGRpcmVjdG9yeSwgY2hlY2sgcGVybWlzc2lvbnMuIikKZ2V0dGV4dCgiVW5rbm93biBlcnJvciBjcmVhdGluZyB0aGUgbWFya2VycyEiKQpnZXR0ZXh0KCJQbGVhc2Ugc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQhIikKZ2V0dGV4dCgiUGxlYXNlIHNlbGVjdCBhIFBORyBmaWxlIHRvIHVwbG9hZCEiKQpnZXR0ZXh0KCJGaWxlIG5vdCB1cGxvYWRlZCwgY2hlY2sgdGhhdCBQSFAgc3VwcG9ydHMgZmlsZSB1cGxvYWQiKQpnZXR0ZXh0KCJGaWxlIG5vdCB1cGxvYWRlZCwgY2hlY2sgdGhlIHJpZ2h0cyBvbiB0aGUgbWFwL2ltYWdlcyBmb2xkZXIgYW5kIHN1YmZvbGRlcnMiKQpnZXR0ZXh0KCJGaWxlIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZCIpCmdldHRleHQoIk1hcmtlcnMiKQpnZXR0ZXh0KCJUaGlzIHNlY3Rpb24gYWxsb3dzIHlvdSB0byBtYW5hZ2UgbWFya2VyIHNldHRpbmdzIikKZ2V0dGV4dCgiTWFuYWdlIG1hcmtlciBzZXRzIikKZ2V0dGV4dCgiUGxlYXNlIGNyZWF0ZSBzb21lIG1hcmtlcnMiKQpnZXR0ZXh0KCJWaWV3IEFsbCBBdmFpbGFibGUiKQpnZXR0ZXh0KCJTZWxlY3QgZGVmYXVsdCBwaG90byBtYXJrZXIgc2V0IGFuZCBjb2xvciIpCmdldHRleHQoIllvdSBuZWVkIHRvIGNyZWF0ZSBzb21lIG1hcmtlcnMgZmlyc3QuIikKZ2V0dGV4dCgiUGxlYXNlIHNlbGVjdCBhIGRlZmF1bHQgbWFya2VyIHNldCBhbmQgc2F2ZS4iKQpnZXR0ZXh0KCJTZWxlY3QgZGVmYXVsdCBhbGJ1bSBtYXJrZXIgc2V0IGFuZCBjb2xvciIpCmdldHRleHQoIlNlbGVjdCBkZWZhdWx0IGdyb3VwIG1hcmtlciBzZXQgYW5kIGNvbG9yIikKZ2V0dGV4dCgiVXNlIHBhcmVudCBhbGJ1bSBjPHU+bzwvdT5sb3IgZm9yIGl0ZW1zIHdpdGggbm8gY29sb3Igc2V0dGluZyIpCmdldHRleHQoIkF1dG9tYXRpYyBSZWdyb3VwIFNldHRpbmdzIikKZ2V0dGV4dCgiVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gdXNlIHRoZSByZWdyb3VwIGZlYXR1cmUiKQpnZXR0ZXh0KCJBdXRvbWF0aWMgPHU+YTwvdT5sYnVtIGJhc2VkIHJlZ3JvdXAiKQpnZXR0ZXh0KCJBdXRvbWF0aWMgPHU+aTwvdT50ZW0gcmVncm91cCIpCmdldHRleHQoIkl0ZW0gcmVncm91cCBkaXN0YW5jZSIpCmdldHRleHQoIlBsZWFzZSBzcGVjaWZ5IGEgcG9zaXRpdmUgaW50ZWdlci4iKSAvKiBhbHNvIGluOiB0ZW1wbGF0ZXMvTWFwVGhlbWVBZG1pbi50cGwgKi8KZ2V0dGV4dCgiVXBsb2FkIGEgbmV3IEljb24iKQpnZXR0ZXh0KCJJY29uIGZvciByZWdyb3VwZWQgbWFya2VycyIpCmdldHRleHQoIlBsZWFzZSBzZWxlY3QgYW4gaWNvbi4iKQpnZXR0ZXh0KCJWaWV3IEFsbCBBdmFpbGFibGUgTWFya2VyU2V0cyIpCmdldHRleHQoIlRoaXMgc2VjdGlvbiBzaG93cyBhbGwgYXZhaWxhYmxlIE1hcmtlclNldHMiKQpnZXR0ZXh0KCJUaGVyZSBhcmUgbm8gTWFya2VyU2V0cyB0byBkaXNwbGF5LCBob3cgZGlkIHlvdSBnZXQgaGVyZT8iKQovLyBISU5UOiBHbyBiYWNrCmdldHRleHQoIlJldHVybiIpCmdldHRleHQoIk1hcmtlcnMgQ3JlYXRpb24gVG9vbCIpCmdldHRleHQoIlRoaXMgc2VjdGlvbiBwZXJtaXRzIHRoZSBjcmVhdGlvbiBvZiBuZXcgbWFya2VycyBpbiB2YXJpb3VzIHNpemVzLCBjb2xvcnMgYW5kIGFzcGVjdHMiKQpnZXR0ZXh0KCJJbWFnZU1hZ2ljayB3YXNuJ3QgZGV0ZWN0ZWQgYXMgaW5zdGFsbGVkLCB5b3UgbWF5IGV4cGVyaWVuY2UgcHJvYmxlbSBnZW5lcmF0aW5nIG1hcmtlcnMiKQpnZXR0ZXh0KCJZb3VyIEJhc2VNYXJrZXIgZm9sZGVyIGRvZXMgbm90IGV4aXN0LCBwbGVhc2UgY2hlY2sgdGhlIG1vZHVsZSBpbnN0YWxsYXRpb24uIikKZ2V0dGV4dCgiQmFzZSBJbWFnZSIpCmdldHRleHQoIlBsZWFzZSBzZWxlY3QgYSBiYXNlIHN0eWxlIHRvIHVzZSIpCmdldHRleHQoIlVwbG9hZCBhIG5ldyBiYXNlIGljb24iKQpnZXR0ZXh0KCJVcGxvYWQgYSBCYXNlIE1hcmtlciIpCmdldHRleHQoIk5ldyBTaXplIikKZ2V0dGV4dCgiVW5jaGFuZ2U8dT5kPC91PiIpCmdldHRleHQoIjx1PjU8L3U+MCUiKQpnZXR0ZXh0KCI8dT4yPC91PjAwJSIpCmdldHRleHQoIkN1czx1PnQ8L3U+b20iKQpnZXR0ZXh0KCJDb2xvcnMiKQpnZXR0ZXh0KCI8dT5BPC91PmxsIENvbG9ycyIpCmdldHRleHQoIjx1PlM8L3U+ZWxlY3RlZCBjb2xvcnMiKQpnZXR0ZXh0KCJCbHVlIikKZ2V0dGV4dCgiUmVkIikKZ2V0dGV4dCgiWWVsbG93IikKZ2V0dGV4dCgiR3JlZW4iKQpnZXR0ZXh0KCJPcmFuZ2UiKQpnZXR0ZXh0KCJBcXVhIikKZ2V0dGV4dCgiUHVycGxlIikKZ2V0dGV4dCgiV2hpdGUiKQpnZXR0ZXh0KCJCbGFjayIpCmdldHRleHQoIkdyZXkiKQpnZXR0ZXh0KCJNYXJrZXIgU2V0IDx1Pk48L3U+YW1lIikKZ2V0dGV4dCgiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBzZXQiKQpnZXR0ZXh0KCJUaGUgbmFtZSA8Yj5tdWx0aTwvYj4gaXMgbm90IGFsbG93ZWQuIikKZ2V0dGV4dCgiR2VuZXJhdGUgTWFya2VycyIpCgovKiB0ZW1wbGF0ZXMvTWFwUm91dGVBZG1pbi50cGwgKi8KZ2V0dGV4dCgiVGVtcGxhdGUgZmlsZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCwgYmFja3VwIGZpbGUgY3JlYXRlZCIpCmdldHRleHQoIkVycm9yIG9wZW5pbmcgZmlsZSwgY2hlY2sgcGVybWlzc2lvbnMgb24gdGhlIERlZmF1bHRUaGVtZS90ZW1wbGF0ZSBmb2xkZXIiKQpnZXR0ZXh0KCJSb3V0ZSBzdWNjZXNzZnVsbHkgZGVsZXRlZCIpCmdldHRleHQoIlJvdXRlIHN1Y2Nlc3NmdWxseSBlZGl0ZWQgYW5kIHNhdmVkIikKZ2V0dGV4dCgiUm91dGUgTWFuYWdlbWVudCIpCmdldHRleHQoIllvdXIgVGhlbWUudHBsIGZpbGUgZG9lcyBub3QgY29udGFpbiB0aGUgcmlnaHQgSFRNTCB0YWcsIHJvdXRlcyB3aWxsIG5vdCBkaXNwbGF5IGluIEludGVybmV0IEV4cGxvcmVyIikKZ2V0dGV4dCgiUmVmZXIgdG8gJXN0aGUgTWFwIE1vZHVsZSBXaWtpJXMgKFJvdXRlIGluIElFKSBmb3IgYSB3b3JrYXJvdW5kIikKLy8gSElOVDogVXBkYXRlIHRoZSBUaGVtZS50cGwgZmlsZQpnZXR0ZXh0KCJVcGRhdGUgaXQgZm9yIG1lIikKZ2V0dGV4dCgiRW5hYmxlIFJvdXRlIE51bWJlcmluZyIpCmdldHRleHQoIlRoaXMgc2VjdGlvbiBwZXJtaXRzIGNyZWF0aW9uIG9mIHJvdXRlcyBhbmQgbWFuYWdlbWVudCBvZiB0aGUgcGF0aCB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIG1hcCIpCmdldHRleHQoIlJvdXRlIElEIikKZ2V0dGV4dCgiUm91dGUgTmFtZSIpCmdldHRleHQoIlJvdXRlIExpbmUgQ29sb3IiKQpnZXR0ZXh0KCJSb3V0ZSBMaW5lIFdpZHRoIikKZ2V0dGV4dCgiUm91dGUgTGluZSBPcGFjaXR5IikKZ2V0dGV4dCgiRW5hYmxlZCIpCmdldHRleHQoIkZpbHRlciIpCmdldHRleHQoIkRlbGV0ZSBSb3V0ZSIpCmdldHRleHQoIkVkaXQgUm91dGUiKQpnZXR0ZXh0KCJBZGQgYSBSb3V0ZSIpCmdldHRleHQoIkRlbGV0ZSBBbGwgUm91dGVzIikKZ2V0dGV4dCgiVGhlcmUgYXJlIG5vIFJvdXRlcyBjcmVhdGVkLCBjbGljayIpCmdldHRleHQoIlJvdXRlIFNldHRpbmdzIikKZ2V0dGV4dCgiU2V0dGluZ3Mgc3BlY2lmaWMgdG8gdGhpcyByb3V0ZSIpCmdldHRleHQoIkVudGVyIFJvdXRlIDx1Pk48L3U+YW1lIikKZ2V0dGV4dCgiUGxlYXNlIGVudGVyIGEgcm91dGUgbmFtZS4iKQpnZXR0ZXh0KCJJbnB1dCBSb3V0ZSBDbzx1Pmw8L3U+b3IiKQpnZXR0ZXh0KCJTZWxlY3QiKQpnZXR0ZXh0KCJQbGVhc2UgZW50ZXIgYSByb3V0ZSBjb2xvciAoRm9ybWF0OiAjUlJHR0JCKSAtIE5vIGNvbG9yIHdpbGwgZGVmYXVsdCB0byBwdXJwbGUiKQpnZXR0ZXh0KCJFbnRlciBSb3V0ZSBzaXplIGluIDx1PnA8L3U+aXhlbHMiKQpnZXR0ZXh0KCJFbnRlciBSb3V0ZSA8dT5PPC91PnBhY2l0eSIpCmdldHRleHQoIlBsZWFzZSBlbnRlciB0aGUgb3BhY2l0eSBiZXR3ZWVuIDAgYW5kIDEgLSBkZWZhdWx0IGlzIDEiKQpnZXR0ZXh0KCJSb3V0ZSBFbmFibGVkPyIpCmdldHRleHQoIlllcyIpCmdldHRleHQoIk5vIikKZ2V0dGV4dCgiQ3JlYXRlIGEgRmlsdGVyIGZvciB0aGlzIHJvdXRlPyIpCmdldHRleHQoIkl0ZW1zIGluIFJvdXRlIikKZ2V0dGV4dCgiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCAyIG1hcmtlcnMuIikKZ2V0dGV4dCgiU2VsZWN0IHRoZSBpdGVtcyB5b3Ugd2FudCBhZGRlZCB0byB0aGlzIHJvdXRlIGFuZCB0aGUgb3JkZXIgdG8gYWRkIHRoZW0gaW4iKQpnZXR0ZXh0KCJUaHVtYm5haWwiKQpnZXR0ZXh0KCJJdGVtIEluZm9ybWF0aW9uIikKZ2V0dGV4dCgiU2VsZWN0ZWQiKQpnZXR0ZXh0KCJPcmRlciIpCmdldHRleHQoIlRpdGxlOiIpCmdldHRleHQoIkRhdGU6IikgLyogYWxzbyBpbjogdGVtcGxhdGVzL2luZm93aW5kb3cvY2VudGVyZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2RlZmF1bHQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2cyY2VudGVyZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2cyZGVmYXVsdC5pbmMgdGVtcGxhdGVzL2luZm93aW5kb3cvZzJ0YWJiZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2cydGFibGUuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2czY2VudGVyZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2czZGVmYXVsdC5pbmMgdGVtcGxhdGVzL2luZm93aW5kb3cvZzN0YWJiZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2czdGFibGUuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2djZW50ZXJlZC5pbmMgdGVtcGxhdGVzL2luZm93aW5kb3cvZ2RlZmF1bHQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2d0YWJiZWQuaW5jIHRlbXBsYXRlcy9pbmZvd2luZG93L2d0YWJsZS5pbmMgdGVtcGxhdGVzL2luZm93aW5kb3cvZ3ZpbWFnZS5pbmMgdGVtcGxhdGVzL2luZm93aW5kb3cvdGFiYmVkLmluYyB0ZW1wbGF0ZXMvaW5mb3dpbmRvdy90YWJsZS5pbmMgKi8KZ2V0dGV4dCgiVGhlcmUgYXJlIG5vIGl0ZW1zIHdpdGggR1BTIGNvb3JkaW5hdGVzLCBwbGVhc2UgYWRkIGF0IGxlYXN0IHR3byBlbnRyaWVzIHRvIG1ha2UgYSByb3V0ZSIpCmdldHRleHQoIlNhdmUgUm91dGUiKQoKLyogdGVtcGxhdGVzL01hcFNpdGVBZG1pbi50cGwgKi8KZ2V0dGV4dCgiR1BTIGNvb3JkaW5hdGVzIGhhdmUgYmVlbiBwb3B1bGF0ZWQgZnJvbSBFWElGIG9uICVkIHBob3RvcyIpCmdldHRleHQoIkFjdGlvbiBzdWNjZXNzZnVsIGJ1dCBubyBHUFMgY29vcmRpbmF0ZXMgZm91bmQuIikKZ2V0dGV4dCgiUHJvZmlsZSBzdWNjZXNzZnVsbHkgZGVsZXRlZC4iKQpnZXR0ZXh0KCJQcm9maWxlIHN1Y2Nlc3NmdWxseSBzYXZlZC4iKQpnZXR0ZXh0KCJNYXAgU2V0dGluZ3MiKQpnZXR0ZXh0KCJTZWxlY3QgTWFwIHNldHRpbmdzIGZvciB0aGUgR29vZ2xlIEFQSSIpCmdldHRleHQoIkdvb2dsZSBNYXAgS2V5IFByb2ZpbGVzIikKZ2V0dGV4dCgiQWRkIFByb2ZpbGUiKQpnZXR0ZXh0KCJFZGl0IFByb2ZpbGUiKQpnZXR0ZXh0KCJEZWxldGUgUHJvZmlsZSIpCmdldHRleHQoIk1hcCA8dT5XPC91PmlkdGgiKQpnZXR0ZXh0KCJNYXAgd2lkdGggbXVzdCBiZSBhbiBpbnRlZ2VyLiIpCmdldHRleHQoIk1hcCA8dT5IPC91PmVpZ2h0IikKZ2V0dGV4dCgiTWFwIGhlaWdodCBtdXN0IGJlIGFuIGludGVnZXIuIikKLy8gSElOVDogU3R5bGUgb2YgR29vZ2xlIG1hcApnZXR0ZXh0KCJNYXAgdHlwZSIpCi8vIEhJTlQ6IE1hcCBzdHlsZQpnZXR0ZXh0KCI8dT5NPC91PmFwIikKLy8gSElOVDogTWFwIHN0eWxlCmdldHRleHQoIlM8dT5hPC91PnRlbGxpdGUiKQovLyBISU5UOiBNYXAgc3R5bGUKZ2V0dGV4dCgiSDx1Pnk8L3U+YnJpZCIpCi8vIEhJTlQ6IE1hcCB6b29tIHNjYWxlCmdldHRleHQoIlNob3cgU2NhbGUiKQpnZXR0ZXh0KCJDPHU+ZTwvdT5udGVyIE9uIikKZ2V0dGV4dCgiRm9ybWF0OiBsYXRpdHVkZSxsb25naXR1ZGUiKQpnZXR0ZXh0KCJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIGZvcm1hdHRlZCB0aGUgY29vcmRpbmF0ZXMgY29ycmVjdGx5IikKZ2V0dGV4dCgiPHU+WjwvdT5vb20gTGV2ZWwiKQpnZXR0ZXh0KCJQbGVhc2Ugc3BlY2lmeSBhbiBpbnRlZ2VyIGJldHdlZW4gMCB0byAxOSIpCmdldHRleHQoIkF1dDx1Pm88L3U+IENlbnRlciBhbmQgWm9vbSIpCmdldHRleHQoIlRoaXMgd2lsbCBpZ25vcmUgdGhlIHR3byBzZXR0aW5ncyBhYm92ZS4iKQpnZXR0ZXh0KCJTaG93IHRoZSA8dT5WPC91PmlldyBpbiBHb29nbGUgRWFydGggbGluayIpCmdldHRleHQoIkdvb2dsZSBNYXAgTGluayBCZWhhdmlvciIpCmdldHRleHQoIkRpc2FibGUgdGhlIExpbmsiKQpnZXR0ZXh0KCJTaG93IHRoZSBEZWZhdWx0IE1hcCIpCmdldHRleHQoIkR5bmFtaWMgTGluayIpCmdldHRleHQoIlNob3cgTWFwIGZpbHRlcmVkIG9uIGN1cnJlbnQgYWxidW0iKQpnZXR0ZXh0KCJIZWxwIG9uIHRoZSBBZG1pbiBQYWdlcyIpCmdldHRleHQoIkhlbHAgb24gdGhlIFVzZXIncyBQYWdlcyIpCmdldHRleHQoIkdldCB2aWEgYSBNYXAgRGVmYXVsdCBTZXR0aW5ncyIpCmdldHRleHQoIlRoaXMgc2VjdGlvbiB3aWxsIGxldCB5b3Ugc2VsZWN0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgJ0dldCB2aWEgYSBNYXAnIG9wdGlvbiIpCmdldHRleHQoIkRlZmF1bHQgTWFwIENlbnRlciIpCmdldHRleHQoIkRlZmF1bHQgTWFwIFpvb20iKQpnZXR0ZXh0KCJQbGVhc2Ugc3BlY2lmeSBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTciKQpnZXR0ZXh0KCJDaG9vc2UgZmVhdHVyZShzKSB0byBlbmFibGUiKQpnZXR0ZXh0KCJUaGlzIHNlY3Rpb24gd2lsbCBsZXQgeW91IGVuYWJsZSBvciBkaXNhYmxlIHRoZSBmZWF0dXJlIGRlcGVuZGluZyBvbiB3aGF0IHlvdSBuZWVkIikKZ2V0dGV4dCgiRW5hYmxlIHRoZSBHb29nbGUgT3ZlcnZpZXcgRmVhdHVyZSIpCmdldHRleHQoIkVuYWJsZSB0aGUgR1pvb20gRmVhdHVyZSIpCmdldHRleHQoIkVuYWJsZSB0aGUgVGhlbWUgRmVhdHVyZSIpCmdldHRleHQoIkVuYWJsZSB0aGUgTWFya2VyU2V0cyBGZWF0dXJlIikKZ2V0dGV4dCgiRW5hYmxlIHRoZSBMZWdlbmQgRmVhdHVyZSIpCmdldHRleHQoIkVuYWJsZSB0aGUgRmlsdGVyIEZlYXR1cmUiKQpnZXR0ZXh0KCJFbmFibGUgdGhlIEdyb3VwIEZlYXR1cmUiKQpnZXR0ZXh0KCJFbmFibGUgdGhlIFJvdXRlIEZlYXR1cmUiKQpnZXR0ZXh0KCJFZGl0IGEgR29vZ2xlIE1hcCBLZXkiKQpnZXR0ZXh0KCJBZGQgYSBHb29nbGUgTWFwIEtleSIpCmdldHRleHQoIlRoaXMgc2VjdGlvbiB3aWxsIGFkZCBhIGtleSB0byBiZSB1c2VkIHdpdGggY2VydGFpbiBzZXR0aW5ncyBvZiB0aGUgd2Vic2VydmVyLiBJZiB5b3UgYXJlIHVuc3VyZSBvZiB0aGUgdmFsdWVzLCBsZWF2ZSB0aGUgZGVmYXVsdHMuIikKZ2V0dGV4dCgiTmFtZSBmb3IgdGhlIFByb2ZpbGUiKQpnZXR0ZXh0KCJFbnRlciBhIHByb2ZpbGUgbmFtZSIpCmdldHRleHQoIlNlcnZlciBOYW1lIChlLmcuIHd3dy5teXNlcnZlci5jb20pIikKZ2V0dGV4dCgiRW50ZXIgYSBTZXJ2ZXIgbmFtZSBvciBJUCBhZGRyZXNzIikKZ2V0dGV4dCgiUG9ydCBOdW1iZXIgKGUuZy4gODAsIDQ0MywgLi4uKSIpCi8vIEhJTlQ6IERlZmF1bHQgc2VydmVyIHBvcnQKZ2V0dGV4dCgiRGVmYXVsdCBpcyA4MCIpCmdldHRleHQoIkdvb2dsZSBNYXAgS2V5IikKZ2V0dGV4dCgiRW50ZXIgYSBHb29nbGUgTWFwIEtleSIpCi8vIEhJTlQ6IEdldCB0aGUgR29vZ2xlIE1hcCBrZXkKZ2V0dGV4dCgiQ2xpY2sgJXNoZXJlJXMgdG8gZ2V0IHRoZSBrZXkgZm9yIikKCi8qIHRlbXBsYXRlcy9NYXBUaGVtZUFkbWluLnRwbCAqLwpnZXR0ZXh0KCJDb250cm9sIFNldHRpbmdzIikKZ2V0dGV4dCgiVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIE1hcCBDb250cm9sIHNldHRpbmdzIikKZ2V0dGV4dCgiTWFwIENvbnRyb2wgU2l6ZSAvIFR5cGUiKQpnZXR0ZXh0KCJDb250cm9sIHRoZSBwb3NpdGlvbiBiZWxvdy4iKQpnZXR0ZXh0KCJDb250cm9sIHBvc2l0aW9uIikKZ2V0dGV4dCgiUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSBmb3JtYXR0ZWQgdGhlIG9mZnNldChzKSBjb3JyZWN0bHkuIikKZ2V0dGV4dCgiU2hvdyBNYXAgVHk8dT5wPC91PmUiKQpnZXR0ZXh0KCJJbmZvV2luZG93IFNldHRpbmdzIikKZ2V0dGV4dCgiVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIEluZm9XaW5kb3cgc2V0dGluZ3MiKQpnZXR0ZXh0KCJNYXAgSW5mb1dpbmRvdyBUZW1wbGF0ZSIpCmdldHRleHQoIkRlZmF1bHQgWm9vbSA8dT5JPC91Pm4gTGV2ZWwiKQpnZXR0ZXh0KCJUaGUgZGVmYXVsdCB6b29tIGxldmVsIHdoZW4gYSAnem9vbSBpbicgbGluayBpcyBjbGlja2VkLiBTcGVjaWZ5IGFuIGludGVnZXIgZnJvbSAwIHRvIDE3LiIpCmdldHRleHQoIlBsZWFzZSBzcGVjaWZ5IGFuIGludGVnZXIgYmV0d2VlbiAwIHRvIDE3IikKZ2V0dGV4dCgiU2hvdyBcIlpvb20gaW5cIiBMaTx1Pm48L3U+a3MiKQpnZXR0ZXh0KCJTaG93IEl0ZW0gUzx1PnU8L3U+bW1hcmllcyIpCmdldHRleHQoIlNob3cgSXRlbSA8dT5EPC91PmVzY3JpcHRpb25zIikKZ2V0dGV4dCgiVGh1bWJuYWlsIGJhciBzZXR0aW5ncyIpCmdldHRleHQoIlRoaXMgc2VjdGlvbiBtYW5hZ2VzIHRoZSB0aHVtYm5haWwgYmFyIHZpc2liaWxpdHkgYW5kIGJhc2ljIHNldHRpbmdzIikKZ2V0dGV4dCgiVGh1bWJuYWlsIEJhciBQb3NpdGlvbiIpCmdldHRleHQoIlRodW1ibmFpbCBTaXplIikKZ2V0dGV4dCgiSGVpZ2h0IGZvciBUT1AgJmFtcDsgQk9UVE9NIHBvc2l0aW9uLCBXaWR0aCBmb3IgTEVGVCAmYW1wOyBSSUdIVCBwb3NpdGlvbiIpCgovKiB0ZW1wbGF0ZXMvU2hvd01hcC50cGwgKi8KZ2V0dGV4dCgiUGhvdG8gTWFwIikKZ2V0dGV4dCgiRmlsdGVyZWQgb24iKQpnZXR0ZXh0KCJHcmFiIGNvb3JkaW5hdGVzIGZyb20gTWFwIikKZ2V0dGV4dCgiVGhlcmUgd2FzIGEgaGFja2luZyBhdHRlbXB0IG9uIHRoZSBmaWx0ZXIgbmFtZSwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsdGVyIG9wdGlvbiBmcm9tIHRoZSBhZGRyZXNzIGJhci4iKQpnZXR0ZXh0KCJUaGVyZSBhcmUgbm8gbWFya2VycyBjcmVhdGVkIG9yIGEgYmFkIG1hcmtlciBzZXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLiBQbGVhc2UgcmV2aWV3IHNldHRpbmdzIGluIHRoZSAlc2NvbnRyb2wgcGFuZWwlcy4iKQpnZXR0ZXh0KCJUaGVyZSBhcmUgbm8gaXRlbXMgd2l0aCBHUFMgY29vcmRpbmF0ZXMiKQpnZXR0ZXh0KCJDaGVjayB0aGUgV2lraSBmb3IgbW9yZSBpbmZvcm1hdGlvbiIpCmdldHRleHQoIlRoZXJlIGFyZSBubyBpdGVtcyBhdmFpbGFibGUgdG8gYmUgbWFwcGVkIikKZ2V0dGV4dCgiVGhlcmUgd2VyZSBubyBpdGVtcyBmb3VuZCBpbiB0aGUgc2VsZWN0ZWQgJXMsIHdoYXQgd291bGQgeW91IGxpa2UgdG8gZG8/IikKZ2V0dGV4dCgiJXNHbyBCYWNrJXMgdG8gdGhlIEFsYnVtIGFuZCBhZGQgY29vcmRpbmF0ZXMgdG8gaXRlbXMiKQpnZXR0ZXh0KCJTaG93IG1lIHRoZSAlc2RlZmF1bHQgbWFwJXMiKQpnZXR0ZXh0KCJZb3UgZG8gbm90IGhhdmUgYSBwcm9maWxlIHNldHVwIGZvciB0aGlzIHdlYnNpdGUgdG8gdXNlIHRoZSBHb29nbGUgTWFwLiBSZXZpZXcgeW91ciBzZXR0aW5ncyBpbiB0aGUgJXNBZG1pbiBQYW5lbCVzIG9yICVzY2hlY2sgdGhlIFdpa2klcy4iKQpnZXR0ZXh0KCJMb2FkaW5nLCBwbGVhc2Ugd2FpdC4uLiIpCmdldHRleHQoIk1FTlUiKQpnZXR0ZXh0KCJTYXZlIHRoZXNlIGNvb3JkaW5hdGVzIikKLy8gSElOVDogSGludHMgb3Igc3VnZ2VzdGlvbnMKZ2V0dGV4dCgiVGlwcyIpCmdldHRleHQoIkNsaWNrIG9uIHRoZSBtYXAgdG8gY2hvb3NlIHRoZSBwb2ludC4iKQpnZXR0ZXh0KCJFYWNoIGNsaWNrIHdpbGwgY3JlYXRlIGEgbWFya2VyIHRvIGVhc2UgYWltaW5nLiIpCmdldHRleHQoIldoZW4geW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgY29vcmRpbmF0ZXMsIGNsaWNrIDxCPlNhdmU8L0I+IGFib3ZlIGFuZCB0aGUgY2VudGVyIG9mIHRoZSBtYXAgYW5kIHRoZSB6b29tIGxldmVsIHdpbGwgYmUgY29waWVkIGluIHRoZSBHUFMgYW5kIFpvb21MZXZlbCBmaWVsZHMgb2YgdGhlIGl0ZW0uIikKZ2V0dGV4dCgiQ3VycmVudCBDb29yZGluYXRlcyIpCmdldHRleHQoIkN1cnJlbnQgWm9vbWxldmVsIikKZ2V0dGV4dCgiR29vZ2xlIE1hcCBBZG1pbmlzdHJhdGlvbiIpCgovKiB0ZW1wbGF0ZXMvaGVscGZpbGUudHBsICovCmdldHRleHQoIlRoaXMgaGFzIG5vIGhlbHAgeWV0LiIpCmdldHRleHQoIlRoaXMgYWxsb3dzIHlvdSB0byBzZXR1cCBkaWZmZXJlbnQga2V5cyBpbiBjYXNlIHlvdXIgd2Vic2l0ZSBpcyBhY2Nlc3NlZCB2aWEgZGlmZmVyZW50IGFkZHJlc3Nlcy48YnIvPlRoZSBwcm9ncmFtIHdpbGwgc2VsZWN0IHRoZSByaWdodCBrZXkgYXV0b21hdGljYWxseSBwcm92aWRlZCB0aGF0IGl0IHdhcyBjcmVhdGVkLjxici8+PGJyLz48Yj5Gb3IgRXhhbXBsZTogPC9iPklmIHVzZXJzIGFjY2VzcyB5b3VyIHdlYnNpdGUgdmlhIGh0dHA6Ly93d3cubXl3ZWIuY29tIGFuZCBodHRwOi8vbXl3ZWIuY29tLCB5b3UgbmVlZCB0d28gc2VwYXJhdGUga2V5cy48YnIvPjxici8+QWRkIFByb2ZpbGUgd2lsbCBhZGQgYSBuZXcga2V5IGZvciBhIHNwZWNpZmljIHNlcnZlciBhZGRyZXNzLjxici8+PGJyLz5UbyBlZGl0IG9yIGRlbGV0ZSBhIHByb2ZpbGUsIGp1c3Qgc2VsZWN0IGl0IGFuZCBjbGljayB0aGUgYnV0dG9uLiIpCmdldHRleHQoIlRoaXMgaXMgdGhlIFdpZHRoIG9mIHRoZSBNYXAuPGJyLz48YnIvPllvdSBoYXZlIGEgY2hvaWNlIGJldHdlZW4gYSBzaXplIGluIDx1PlBpeGVsczwvdT4gb3IgYSBzaXplIGluIDx1PlBlcmNlbnRhZ2U8L3U+Ljxici8+PGJyLz5QaXhlbHMgd2lsbCBiZSBhbiBleGFjdCBzaXplLCBQZXJjZW50YWdlIHdpbGwgYmUgZGVwZW5kZW50IG9uIHRoZSB3aW5kb3cgc2l6ZSBhbmQgdGhlIHRoaW5ncyBvbiB0aGUgcGFnZSB0aGF0IGNhbiByZWR1Y2UgdGhlIHNpemUgKHNpZGViYXIsIGV0Yy4uLik8YnIvPjxici8+Tm90ZTogUGVyY2VudGFnZSBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIHdpdGggY2VydGFpbiBUaGVtZXMuIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUgSGVpZ2h0IG9mIHRoZSBNYXAuPGJyLz48YnIvPllvdSBoYXZlIGEgY2hvaWNlIGJldHdlZW4gYSBzaXplIGluIDx1PlBpeGVsczwvdT4gb3IgYSBzaXplIGluIDx1PlBlcmNlbnRhZ2U8L3U+Ljxici8+PGJyLz5QaXhlbHMgd2lsbCBiZSBhbiBleGFjdCBzaXplLCBQZXJjZW50YWdlIHdpbGwgYmUgZGVwZW5kZW50IG9uIHRoZSB3aW5kb3cgc2l6ZSBhbmQgdGhlIHRoaW5ncyBvbiB0aGUgcGFnZSB0aGF0IGNhbiByZWR1Y2UgdGhlIHNpemUgKHNpZGViYXIsIGV0Yy4uLik8YnIvPjxici8+Tm90ZTogUGVyY2VudGFnZSBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIHdpdGggY2VydGFpbiBUaGVtZXMuIikKZ2V0dGV4dCgiVGhlIE1hcCBUeXBlIGlzIHRoZSBEZWZhdWx0IE1hcCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGZyb20gR29vZ2xlLjxici8+PGJyLz48Yj5NYXA8L2I+IGlzIGEgdmVjdG9yIHR5cGUgd2l0aCByb2FkcywgYm91bmRhcmllcywgZXRjLiBzaW1pbGFyIHRvIGEgcGFwZXIgbWFwLjxici8+PGJyLz48Yj5TYXRlbGxpdGU8L2I+IHdpbGwgc2hvdyBpbWFnZXJ5IG9mIHRoZSBhcmVhICgyIGV4dHJhIHpvb20gbGV2ZWxzIGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgTWFwIFR5cGUpPGJyLz48YnIvPjxiPkh5YnJpZDwvYj4gd2lsbCBvdmVybGF5IHRoZSBNYXAgdmVjdG9yIGRhdGEgb24gdGhlIHNhdGVsbGl0ZSBpbWFnZXJ5LiIpCmdldHRleHQoIlRoaXMgd2lsbCBlbmFibGUvZGlzYWJsZSB0aGUgZGlzcGxheSBvZiBhIHNjYWxlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHRoZSBHb29nbGUgQVBJIG9uIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgb2YgdGhlIG1hcC4iKQpnZXR0ZXh0KCJUaGVzZSBhcmUgdGhlIEdQUyBjb29yZGluYXRlcyBvZiB0aGUgbG9jYXRpb24geW91IHdvdWxkIGxpa2UgdG8gc2hvdyBhdCB0aGUgY2VudGVyIG9mIHRoZSBNYXAgd2hlbiBmaXJzdCBkaXNwbGF5ZWQuPGJyLz48YnIvPlRoZSBHZXQgdmlhIGEgTWFwIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gY2xpY2sgb24gYSBtYXAgdG8gY2hvb3NlIHRoZSBjZW50ZXIuIikKZ2V0dGV4dCgiVGhpcyB3aWxsIHNldCB0aGUgZGVmYXVsdCBab29tIGZvciB0aGUgTWFwIHdoZW4gZmlyc3QgZGlzcGxheWVkLiIpCmdldHRleHQoIlRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGNlbnRlciBhbmQgem9vbSB0aGUgbWFwIHRvIGluY2x1ZGUgYWxsIHRoZSBpdGVtcyBkaXNwbGF5ZWQuPGJyLz48YnIvPkl0IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBDZW50ZXIgYW5kIFpvb20gc2V0dGluZ3MgYWJvdmUuIikKZ2V0dGV4dCgiU2VsZWN0IGlmIHlvdSB3YW50IHRvIHNob3cgdGhlIFwiRXhwb3J0IHRvIEdvb2dsZSBFYXJ0aFwiIGxpbmsgZm9yIGl0ZW1zLjxici8+IFRoaXMgaXMgb3JpZ2luYWxseSBmcm9tIHRoZSBncHMgbW9kdWxlIHRoYXQgd2FzIGluY2x1ZGVkIGluIHRoaXMgbW9kdWxlLiA8YnIvPjxici8+PGEgdGFyZ2V0PVwiX25ld1wiIGhyZWY9XCJodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL2luZGV4LnBocC9HYWxsZXJ5MjpNb2R1bGVzOkdwc1wiPk1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBtb2R1bGUuPC9hPiIpCmdldHRleHQoIlRoaXMgbGV0cyB5b3UgY2hvb3NlIHRoZSBiZWhhdmlvciBmb3IgdGhlIFwiU2hvdyBHb29nbGUgTWFwXCIgTGluay48YnIvPjxici8+PGI+RGlzYWJsZSB0aGUgbGluazwvYj4gd2lsbCByZW1vdmUgdGhlIGxpbmsgZnJvbSBhbGwgbG9jYXRpb25zIGluIHlvdXIgR2FsbGVyeS4gWW91IHdpbGwgbmVlZCB0byBwb2ludCB0byBtYWluLnBocD9nMl92aWV3PW1hcC5TaG93TWFwIHRvIHZpZXcgdGhlIG1hcC48YnIvPjxici8+PGI+U2hvdyBUaGUgRGVmYXVsdCBNYXA8L2I+IHdpbGwgc2ltcGx5IHNob3cgYWxsIGl0ZW1zIGF2YWlsYWJsZSBpbiB5b3VyIGdhbGxlcnkgdGhhdCBoYXZlIEdQUyBjb29yZGluYXRlIHNldC48YnIvPjxici8+PGI+RHluYW1pYyBMaW5rPC9iPiB3aWxsIHNob3cgZWl0aGVyIHRoZSBkZWZhdWx0IG1hcCBvciBhIG1hcCBmaWx0ZXJlZCBvbiB0aGUgY3VycmVudCBhbGJ1bSBkZXBlbmRpbmcgaWYgdGhlcmUgYXJlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGFsYnVtIC8gc3ViLWFsYnVtLjxici8+VGhpcyBhZGRzIHNvbWUgcHJvY2Vzc2luZyBvbiB0aGUgc2VydmVyIGFuZCBjYW4gYmUgc2xvdyBkZXBlbmRpbmcgb24geW91ciBnYWxsZXJ5IHNpemUuPGJyLz48YnIvPjxiPlNob3cgTWFwIEZpbHRlcmVkIG9uIGN1cnJlbnQgYWxidW08L2I+IHdpbGwgYWx3YXlzIGZpbHRlciB0aGUgbWFwIG9uIHRoZSBjdXJyZW50IGFsYnVtLjxici8+IElmIHRoZXJlIGFyZSBubyBpdGVtcyBpbiB0aGUgY3VycmVudCBhbGJ1bSBvciBzdWItYWxidW1zIHdpdGggR1BTIGNvb3JkaW5hdGVzIGl0IHdpbGwgc2hvdyBhIFwiZnJpZW5kbHlcIiBlcnJvciBtZXNzYWdlLiIpCmdldHRleHQoIlRoaXMgZW5hYmxlcy9kaXNhYmxlcyB0aGUgaGVscCBvbiB0aGUgYWRtaW4gcGFnZXMuIikKZ2V0dGV4dCgiVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBoZWxwIG9uIHRoZSB1c2VyIHBhZ2VzLiIpCmdldHRleHQoIlRoaXMgc2V0cyB0aGUgZGVmYXVsdCBjZW50ZXIgZm9yIHRoZSBcIkdldCB2aWEgYSBNYXBcIiBvcGVyYXRpb25zLjxici8+PGJyLz5UaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaWYgYWxsIG9mIHlvdXIgbWFya2VycyB3aWxsIGJlIGluIHRoZSBzYW1lIGFyZWEuIikKZ2V0dGV4dCgiVGhpcyBzZXRzIHRoZSBkZWZhdWx0IHpvb20gZm9yIHRoZSBcIkdldCB2aWEgYSBNYXBcIiBvcGVyYXRpb25zLiIpCmdldHRleHQoIlRoaXMgd2lsbCBlbmFibGUvZGlzYWJsZSB0aGUgR29vZ2xlIE92ZXJ2aWV3IFNldHRpbmdzIHRhYi48YnIvPjxici8+VGhlIHNldHRpbmdzIGZvciB0aGUgT3ZlcnZpZXcgTWFwIGZyb20gdGhlIEdvb2dsZSBBUEkgY2FuIGJlIGNvbnRyb2xsZWQgb24gdGhpcyB0YWIuIikKZ2V0dGV4dCgiVGhpcyB3aWxsIGVuYWJsZS9kaXNhYmxlIHRoZSBHWm9vbSBTZXR0aW5ncyB0YWIuPGJyLz48YnIvPkZvciBtb3JlIGluZm9ybWF0aW9uLCA8YSB0YXJnZXQ9XCJfbmV3XCIgaHJlZj1cImh0dHA6Ly9lYXJ0aGNvZGUuY29tL2Jsb2cvMjAwNi8wNy9nem9vbS5odG1sXCI+Y2xpY2sgaGVyZTwvYT4uIikKZ2V0dGV4dCgiVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBUaGVtZSBTZXR0aW5ncyB0YWIuPGJyLz48YnIvPk9uIHRoaXMgdGFiIDMgdGhpbmdzIGNhbiBiZSBzZXQ6PGJyLz48YnIvPjxiPkNvbnRyb2xzPC9iPjogQ2hvb3NlIGJldHdlZW4gY3VzdG9tIG9yIGJ1aWx0LWluIGNvbnRyb2xzIGFuZCBzZWxlY3QgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYXAgY29udHJvbHMuPGJyLz48YnIvPjxiPkluZm9XaW5kb3c8L2I+OiBUaGUgSW5mb1dpbmRvd3MgY2FuIGJlIGNoYW5nZWQgYnkgc2VsZWN0aW5nIGEgdGVtcGxhdGUgZnJvbSBhIGRyb3Bkb3duLjxici8+PGJyLz48Yj5UaHVtYm5haWwgQmFyPC9iPjogVGhlIFRodW1ibmFpbCBiYXIgaXMgYSBiYXIgd2l0aCBzbWFsbCB2ZXJzaW9uIG9mIHRoZSBwaWN0dXJlcyBjdXJyZW50bHkgZGlzcGxheWVkIG9uIHRoZSBtYXAuIEl0cyBzaXplIGFuZCBwb3NpdGlvbiBjYW4gYmUgY3VzdG9taXplZC4iKQpnZXR0ZXh0KCJUaGlzIGVuYWJsZXMvZGlzYWJsZXMgdGhlIE1hcmtlcnMgU2V0dGluZ3MgdGFiLjxici8+PGJyLz5PbiB0aGlzIHRhYiwgeW91IGNhbjo8YnIvPjxici8+Q3JlYXRlIGEgbmV3IG1hcmtlciBzZXQgdG8gYmUgdXNlZCBmb3IgdGhlIG1hcC48YnIvPjxici8+U2VsZWN0IHdoaWNoIG1hcmtlciBzZXQgdG8gdXNlIGZvciBwaG90b3MsIGFsYnVtIG9yIGdyb3Vwcy48YnIvPjxici8+RW5hYmxlIG9yIGRpc2FibGUgdGhlIGF1dG9tYXRpYyByZWdyb3VwIGZlYXR1cmUuIikKZ2V0dGV4dCgiVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBMZWdlbmQgTWFuYWdlbWVudCB0YWIuPGJyLz48YnIvPlRoaXMgaXMgd2hlcmUgeW91IGVudGVyIHRoZSBsZWdlbmQgdG8gYXNzb2NpYXRlIHRleHQgd2l0aCBlYWNoIG1hcmtlciBjb2xvci48YnIvPjxici8+QWxzbywgeW91IGNhbiBlbmFibGUgYW5kIHBvc2l0aW9uIHRoZSBMZWdlbmQgQmxvY2suIikKZ2V0dGV4dCgiVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBGaWx0ZXIgTWFuYWdlbWVudCB0YWIuPGJyLz48YnIvPlRoaXMgcGVybWl0cyB5b3UgdG8gZW5hYmxlIGFuZCBjb250cm9sIGZpbHRlcnMuIFRoZXJlIGFyZSAyIHR5cGVzIG9mIGZpbHRlcnM6PGJyLz48YnIvPjxiPk1hbnVhbCBGaWx0ZXJzPC9iPiB0aGF0IHNpbXBseSBsZXRzIHlvdSBjaG9vc2UgYSBjZW50ZXIgYW5kIGEgem9vbSBvbiB0aGUgbWFwIHRvIHNob3cgYSBzcGVjaWZpYyBhcmVhIHdoZW4gc2VsZWN0ZWQuPGJyLz48YnIvPjxiPkFsYnVtIEZpbHRlcnM8L2I+IGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgb24gdGhlIGZseSAod2hlbiBlbmFibGVkKSBhbmQgZGlzcGxheSBvbmx5IGl0ZW1zIGNvbnRhaW5lZCBpbiB0aGUgYWxidW0gYW5kIGl0cyBzdWJhbGJ1bXMuIFlvdSBjYW4gYWxzbyBjaG9vc2UgaG93IG1hbnkgc3ViYWxidW0gbGV2ZWxzIHRvIGluY2x1ZGUuIikKZ2V0dGV4dCgiVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBHcm91cCBNYW5hZ2VtZW50IHRhYi48YnIvPjxici8+VGhpcyBhbGxvd3MgeW91IHRvIGNyZWF0ZSBHcm91cHMgd2hpY2ggYXJlIGl0ZW1zIHdpdGggR1BTIGNvb3JkaW5hdGVzIGFuZCBhIHRodW1ibmFpbCBwaWN0dXJlLiBFYWNoIGdyb3VwIGNhbiBcImNvbnRhaW5cIiBvdGhlciBncm91cHMsIHBob3RvcyBhbmQgYWxidW1zLjxici8+PGJyLz5XaGVuIGEgZ3JvdXAgaXMgc2VsZWN0ZWQgb24gdGhlIG1hcCwgaXQgd2lsbCBzaG93IG9ubHkgdGhlIGl0ZW1zIGNvbnRhaW5lZCBpbnRvIHRoYXQgZ3JvdXAgKGl0J3MgbGlrZSBtYW51YWwgYWxidW1zKS48YnIvPjxici8+VG8gc2VlIGEgZ3JvdXAgeW91IGhhdmUgdHdvIGNob2ljZXM6IEVpdGhlciBjbGljayBvbiBpdCBvbiB0aGUgZGVmYXVsdCBtYXAgYW5kIHRoZW4gY2xpY2sgdGhlIHRodW1ibmFpbCBvciBlbHNlIGdvIGRpcmVjdGx5IHRvIGl0IHZpYSB0aGUgYWRkcmVzcyBiYXIgd2l0aCBnMl92aWV3PW1hcC5TaG93TWFwJmcyX2dyb3VwPUcxIChmb3IgR3JvdXAgMSkuIikKZ2V0dGV4dCgiVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBSb3V0ZXMgTWFuYWdlbWVudCB0YWIuPGJyLz48YnIvPlJvdXRlcyBsaW5rIGV4aXN0aW5nIGFsYnVtLCBwaG90b3MgYW5kIGdyb3VwcyBpbiBhIHBhdGguIFlvdSBjYW4gc2VsZWN0IGFzIG1hbnkgaXRlbXMgYXMgeW91J2QgbGlrZSB0byBiZSBwYXJ0IG9mIHRoYXQgcm91dGUgYW5kIHNlbGVjdCB0aGVpciBvcmRlci4iKQpnZXR0ZXh0KCJUaGlzIGlzIHNpbXBseSB0aGUgbmFtZSBvZiB0aGUgcHJvZmlsZS4gSXQgd2lsbCBhcHBlYXIgaW4gdGhlIGxpc3Qgb2Yga2V5cyB3aGVuIGl0J3MgZnVsbHkgY3JlYXRlZC4iKQpnZXR0ZXh0KCJFbnRlciB0aGUgbmFtZSBvZiB5b3VyIHNlcnZlciBhcyB1c2VycyB3aWxsIGFjY2VzcyBpdC48YnIvPjxici8+PGI+Rm9yIGV4YW1wbGU6PC9iPiBpZiB1c2VycyBhY2Nlc3MgeW91ciBzZXJ2ZXIgdmlhIGh0dHA6Ly9teXNlcnZlci5teWRvbWFpbi5jb20sIHRoZSBzZXJ2ZXIgbmFtZSBpcyBteXNlcnZlci5teWRvbWFpbi5jb20iKQpnZXR0ZXh0KCJUaGlzIGlzIHRoZSBwb3J0IHVzZWQgdG8gYWNjZXNzIHRoZSBzZXJ2ZXIuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgaXQgaXMsIGl0J3MgcHJvYmFibHkgODAgKGZvciBodHRwKSBvciA0NDMgKGZvciBodHRwcykuPGJyLz48YnIvPklmIHlvdSBhY2Nlc3MgdGhlIHNlcnZlciB3aXRoIGEgdXJsIHN1Y2ggYXMgaHR0cDovL215c2VydmVyOjU2NDMvIHRoZSBwb3J0IHdvdWxkIGJlIDU2NDMuIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUga2V5IHRoYXQgR29vZ2xlIGdpdmVzIHlvdSBmb3IgeW91ciBzZXJ2ZXIvcG9ydCwgY29weSBmcm9tIHRoZSBHb29nbGUgc2lnbnVwIHNpdGUgYW5kIHBhc3RlIGl0IGhlcmUuPGJyLz48YnIvPlRoZSBHb29nbGUgc2lnbnVwIHNpdGUgaXMgaGVyZTo8YnIvPjxhIHRhcmdldD1cIl9uZXdcIiBocmVmPVwiaHR0cDovL3d3dy5nb29nbGUuY29tL2FwaXMvbWFwcy9zaWdudXAuaHRtbFwiPmh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9hcGlzL21hcHMvc2lnbnVwLmh0bWw8L2E+IikKZ2V0dGV4dCgiVGhpcyBhbGxvd3MgeW91IHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBHWm9vbSBmZWF0dXJlLjxici8+PGJyLz5JZiB5b3UgZW5hYmxlIHRoaXMsIHlvdSB3aWxsIHNlZSBhIFpvb20gQ29udHJvbCBvbiB5b3VyIE1hcC4gSW5zdHJ1Y3Rpb25zIGFyZSBwcm92aWRlZCB3aGVuIHlvdSBzZWxlY3QgaXQuIikKZ2V0dGV4dCgiVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBPdmVydmlldyBNYXAgdGhhdCBHb29nbGUgaGFzIGltcGxlbWVudGVkIGluIEdvb2dsZSBNYXBzIEFQSSB2ZXJzaW9uIDIuPGJyLz48YnIvPkl0IHdpbGwgc2hvdyBhIHpvb21lZCBvdXQgdmVyc2lvbiBvZiB0aGUgbWFwIG9uIGEgY29ybmVyIChvZiB5b3VyIGNob2ljZSkgc28geW91IGNhbiB0ZWxsIHdoZXJlIHlvdSBhcmUgb24gdGhlIFwiZ2xvYmFsXCIgbWFwLiIpCmdldHRleHQoIlRoZSBzaXplIG9mIHRoZSBPdmVydmlldyBNYXAgd2luZG93IG9uIHRoZSBjb3JuZXIgb2YgdGhlIG1haW4gbWFwLjxici8+PGJyLz5CeSBkZWZhdWx0IGl0IGlzIDIwMHB4IHggMjAwcHguIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIE92ZXJ2aWV3IE1hcC48YnIvPjxici8+QnkgZGVmYXVsdCBpdCdzIG9uIHRoZSBib3R0b20gcmlnaHQtaGFuZCBjb3JuZXIgb2YgdGhlIG1hcC48YnIvPjxici8+QWxzbywgeW91IGNhbiBjb25maWd1cmUgdGhlIHdpbmRvdyBvZmZzZXQgaW4gcGl4ZWxzLiIpCmdldHRleHQoIlRoaXMgd2lsbCBsZXQgeW91IGNob29zZSB3aGljaCBzZXQgb2YgQ29udHJvbHMgdG8gdXNlIG9uIHRoZSBtYXAuPGJyLz48YnIvPlRoZSBjb250cm9scyBpbmNsdWRlIGJ1dHRvbnMgdG8gY2hhbmdlIHRoZSBtYXAgVHlwZSAoTUFQLCBIWUJSSUQsIFNBVEVMTElURSksIFpvb20gSW4gJiBPdXQgYW5kIFBhbiB0aGUgbWFwLjxici8+PGJyLz5CeSBkZWZhdWx0IGl0IHVzZXMgdGhlIFN0b2NrIC0gU21hbGwgd2hpY2ggYXJlIGluY2x1ZGVkIGluIHRoZSBHb29nbGUgTWFwIEFQSS4iKQpnZXR0ZXh0KCJUaGlzIHNlbGVjdHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBDb250cm9scy4gVGhlIGRlZmF1bHQgQW5jaG9yIGlzIG9uZSBvZiB0aGUgY29ybmVycy48YnIvPjxici8+V2hlbiBhbiBhbmNob3IgaXMgc2VsZWN0ZWQsIHlvdSBjYW4gYWxzbyBzZXQgYW4gb2Zmc2V0IGZyb20gdGhhdCBzcGVjaWZpYyBjb3JuZXIgaW4gcGl4ZWxzLjxici8+PGJyLz5UaGlzIGlzIG9ubHkgZm9yIHRoZSB6b29tIGluLCB6b29tIG91dCwgem9vbSBzbGlkZXIgYW5kIHBhbm5pbmcgY29udHJvbHMuIikKZ2V0dGV4dCgiVGhpcyBkZXRlcm1pbmVzIGlmIHRoZSBNYXAgVHlwZSBzZWxlY3RvciBpcyBzaG93bi48YnIvPklmIHRoaXMgaXMgYWN0aXZhdGVkLCB1c2VycyB3aWxsIGhhdmUgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBtYXAgdHlwZSBiZXR3ZWVuOiBNQVAsIFNBVEVMTElURSBvciBIWUJSSUQuIikKZ2V0dGV4dCgiVGhpcyBhbGxvd3MgeW91IGNob29zZSB0aGUgSW5mb1dpbmRvdyB0ZW1wbGF0ZSB0byB1c2UgZm9yIGFsbCBpdGVtcy48YnIvPjxici8+WW91IGNhbiBjcmVhdGUgbmV3IHRlbXBsYXRlcyBieSBmb2xsb3dpbmcgdGhlIGV4YW1wbGVzIGluIG1vZHVsZXMvbWFwL3RlbXBsYXRlcy9pbmZvd2luZG93LzsgZWFjaCB0ZW1wbGF0ZSBpcyBhbiAuaW5jIGZpbGUuPGJyLz48YnIvPlRoZSBJbmZvV2luZG93cyBhcmUgdGhlIGJ1YmJsZXMgdGhhdCBvcGVuIHVwIHdoZW4geW91IGNsaWNrIGEgbWFya2VyIGl0ZW0gb24gdGhlIG1hcC4iKQpnZXR0ZXh0KCJXaGVuIGVkaXRpbmcgYW4gaXRlbSwgeW91IGNhbiBhZGQgR1BTIGNvb3JkaW5hdGVzLCBhIHpvb20gdmFsdWUgYW5kIGEgY29sb3IgZm9yIHRoZSBtYXJrZXIuPGJyLz48YnIvPlRoZSB6b29tLWluIHZhbHVlIGlzIHVzZWQgYnkgdGhlIE1pbmkgTWFwIGJsb2NrIGFuZCBieSBsaW5rcyBvbiB0aGUgSW5mb1dpbmRvd3MgaWYgYWN0aXZhdGVkIGJlbG93Ljxici8+PGJyLz5UaGlzIGxldHMgeW91IHNldCBhIGRlZmF1bHQgem9vbSBsZXZlbCBpbiBjYXNlIGEgdmFsdWUgd2FzIG5vdCBzZXQgYnkgdGhlIHVzZXIuIEEgem9vbSBsZXZlbCBvZiA1IGlzIGEgZ29vZCBkZWZhdWx0IHZhbHVlLiIpCmdldHRleHQoIlRoaXMgd2lsbCBzaG93IHRoZSB6b29tLWluIHZhbHVlIGluIHRoZSBJbmZvV2luZG93IGlmIHRoZSB0ZW1wbGF0ZSBzdXBwb3J0cyBpdC4gQWxsIHRoZSBpbmNsdWRlZCB0ZW1wbGF0ZXMgc3VwcG9ydCB0aGlzIGZlYXR1cmUuPGJyLz48YnIvPlRoZSBsaW5rIGlzIEphdmFzY3JpcHQgYW5kIHNpbXBseSBjaGFuZ2VzIHRoZSB6b29tIGxldmVsIG9mIHRoZSBtYXAgd2hlbiBjbGlja2VkLiIpCmdldHRleHQoIlRoaXMgd2lsbCBzaG93IHRoZSBpdGVtIFN1bW1hcnkgKG9yIHNob3J0IGRlc2NyaXB0aW9uKSBpbiB0aGUgSW5mb1dpbmRvdyBpZiB0aGUgdGVtcGxhdGUgc3VwcG9ydHMgaXQuIEFsbCB0aGUgaW5jbHVkZWQgdGVtcGxhdGVzIHN1cHBvcnQgdGhpcyBmZWF0dXJlLiIpCmdldHRleHQoIlRoaXMgd2lsbCBzaG93IHRoZSBpdGVtIERlc2NyaXB0aW9uIGluIHRoZSBJbmZvV2luZG93IGlmIHRoZSB0ZW1wbGF0ZSBzdXBwb3J0cyBpdC4gQWxsIHRoZSBpbmNsdWRlZCB0ZW1wbGF0ZXMgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIikKZ2V0dGV4dCgiVGhpcyB3aWxsIHNob3cgYSBiYXIgb2YgdGh1bWJuYWlscyBmb3IgdGhlIGl0ZW1zIHRoYXQgYXJlIGN1cmVudGx5IHNob3duIG9uIHRoZSBtYXAuPGJyLz48YnIvPllvdSBjYW4gc2VsZWN0IHRoZSB2aXNpYmlsaXR5IGFuZCBwb3NpdGlvbiBvZiB0aGUgVGh1bWJuYWlsIEJhciAodG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0KS48YnIvPjxici8+QnkgZGVmYXVsdCBpdCBpcyBoaWRkZW4uIikKZ2V0dGV4dCgiVGhpcyBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgVGh1bWJuYWlsIEJhci48YnIvPjxici8+SWYgdGhlIFRodW1ibmFpbCBCYXIgaXMgb24gdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIG1hcCwgdGhlIHNpemUgd2lsbCBjb250cm9sIHRoZSBoZWlnaHQgb2YgdGhlIGJhciAodGhlIHdpZHRoIG1hdGNoZXMgdGhlIG1hcCB3aWR0aCkuPGJyLz48YnIvPklmIHRoZSBUaHVtYm5haWwgQmFyIGlzIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0IG9mIHRoZSBtYXAsIHRoZSBzaXplIHdpbGwgY29udHJvbCB0aGUgd2lkdGggb2YgdGhlIGJhciAodGhlIGhlaWdodCBtYXRjaGVzIHRoZSBtYXAgaGVpZ2h0KS4iKQpnZXR0ZXh0KCJUaGlzIGlzIHRoZSBMZWdlbmQgUG9zaXRpb24uPGJyLz48YnIvPklmIExlZnQgaXMgc2VsZWN0ZWQgaXQgd2lsbCBiZSBzaG93biBpbiB0aGUgU2lkZWJhciAoZG9lc24ndCB3b3JrIHdpdGggR2FsbGVyeSB2Mi4yKykuPGJyLz48YnIvPklmIFRvcCBvciBCb3R0b20gaXMgc2VsZWN0ZWQsIGl0IHdpbGwgYmUgZmxhdCBhbmQgd2lsbCBub3QgaGF2ZSB0aGUgZXhwYW5kIGZlYXR1cmUgZXhwbGFpbmVkIGJlbG93Ljxici8+PGJyLz5CeSBkZWZhdWx0IHRoZSBMZWdlbmQgaXMgaGlkZGVuLiIpCmdldHRleHQoIlRoaXMgYWN0aXZhdGVzIHRoZSBQaG90byBtYXJrZXIgbGVnZW5kLiBPbmNlIGFjdGl2YXRlZCwgdGhlIGNvbG9yZWQgbWFya2VycyB3aWxsIGFwcGVhciBiZWxvdyB3aXRoIHRleHQgYm94ZXMgZm9yIGRlc2NyaXB0aW9ucy48YnIvPjxici8+SWYgeW91IGVudGVyIGEgZGVzY3JpcHRpb24gZm9yIGEgY29sb3IgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBpdGVtcyBhc3NvY2lhdGVkIHdpdGggaXQsIGl0IHdpbGwgc3RpbGwgYXBwZWFyIGluIHRoZSBsZWdlbmQuIikKZ2V0dGV4dCgiV2hlbiB0aGUgTGVnZW5kIGlzIHVzZWQgaG9yaXpvbnRhbGx5IChsZWZ0IG9yIHJpZ2h0IHBvc2l0aW9uKSwgdGhlIHNlY3Rpb25zIGNhbiBiZSBleHBhbmRlZC9jb2xsYXBzZWQuIFRoaXMgb3B0aW9uIHdpbGwgbWFrZSB0aGUgUGhvdG8gc2VjdGlvbiBleHBhbmRlZCBieSBkZWZhdWx0LiIpCmdldHRleHQoIlRoaXMgYWN0aXZhdGVzIHRoZSBBbGJ1bSBtYXJrZXIgbGVnZW5kIChzZWUgUGhvdG8gbGVnZW5kIGZvciBtb3JlIGluZm8pLiIpCmdldHRleHQoIlRoaXMgd2lsbCBtYWtlIHRoZSBBbGJ1bSBzZWN0aW9uIGV4cGFuZGVkIGJ5IGRlZmF1bHQgKHNlZSBQaG90byBsZWdlbmQgZm9yIG1vcmUgaW5mbykuIikKZ2V0dGV4dCgiVGhpcyBhY3RpdmF0ZXMgdGhlIEdyb3VwIG1hcmtlciBsZWdlbmQgKHNlZSBQaG90byBsZWdlbmQgZm9yIG1vcmUgaW5mbykuIikKZ2V0dGV4dCgiVGhpcyB3aWxsIG1ha2UgdGhlIEdyb3VwIHNlY3Rpb24gZXhwYW5kZWQgYnkgZGVmYXVsdCAoc2VlIFBob3RvIGxlZ2VuZCBmb3IgbW9yZSBpbmZvKS4iKQpnZXR0ZXh0KCJUaGlzIGlzIHRoZSBGaWx0ZXIgQmxvY2sgUG9zaXRpb248YnIvPjxici8+SWYgTGVmdCBpcyBzZWxlY3RlZCBpdCB3aWxsIGJlIHNob3duIGluIHRoZSBTaWRlYmFyIChkb2Vzbid0IHdvcmsgd2l0aCBHYWxsZXJ5IHYyLjIrKS48YnIvPjxici8+SWYgVG9wIG9yIEJvdHRvbSBpcyBzZWxlY3RlZCwgaXQgd2lsbCBiZSBmbGF0Ljxici8+PGJyLz5CeSBkZWZhdWx0IGl0IGlzIGhpZGRlbi4iKQpnZXR0ZXh0KCJUaGlzIGFsbG93cyB5b3UgdG8gYWRkIE1hbnVhbCBmaWx0ZXJzLjxici8+PGJyLz5NYW51YWwgZmlsdGVycyBhcmUgYSBzZXQgb2YgY29vcmRpbmF0ZXMgYW5kIGEgem9vbSBsZXZlbCB0byBjZW50ZXIgdGhlIG1hcCBvbiBhIHNwZWNpZmljIGFyZWE7IGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBNYXAgZGF0YS48YnIvPjxici8+WW91IGNhbiBhZGQsIHJlbW92ZSBvciBlZGl0IGZpbHRlcnM7IEFkZCBvciBFZGl0IHdpbGwgc2hvdyB0aGUgc2FtZSB3aW5kb3cuIikKZ2V0dGV4dCgiQWxidW0gRmlsdGVycyB3aWxsIGNyZWF0ZSBhIGZpbHRlciBmb3IgZWFjaCBhbGJ1bSB0aGF0IGhhcyBpdGVtcyAob3Igc3ViLWl0ZW1zKSB3aXRoIEdQUyBjb29yZGluYXRlcy48YnIvPjxici8+U2VsZWN0aW5nIGFuIEFsYnVtIEZpbHRlciB3aWxsIHNob3cgYSBtYXAgd2l0aCBvbmx5IGl0ZW1zIGZyb20gdGhhdCBhbGJ1bSwgc2ltaWxhciB0byBcIlNob3cgQWxidW0gb24gYSBNYXBcIiIpCmdldHRleHQoIlRoaXMgY29udHJvbHMgdGhlIGRlcHRoIG9mIHN1Yi1hbGJ1bXMgdG8gc2hvdy48YnIvPjxici8+VGhlIEFsYnVtIE1hcCB3aWxsIG5vdCBzaG93IGl0ZW1zIHRoYXQgYXJlIG5lc3RlZCBkZWVwZXIgdGhhbiB0aGUgbGV2ZWwgZW50ZXJlZC48YnIvPjxici8+QnkgZGVmYXVsdCwgdGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIGRlcHRoLiIpCmdldHRleHQoIlRoaXMgb3ZlcnJpZGVzIHRoZSBhYm92ZSBzZXR0aW5ncyBmb3IgdGhlIFJvb3QgYWxidW0gYW5kIGxpbWl0cyB0aGUgQWxidW0gTWFwIHRvIHNob3cgb25seSB0b3AtbGV2ZWwgaXRlbXMgaW5jbHVkZWQgaW4gdGhlIFJvb3QgYWxidW0gYW5kIGV4Y2x1ZGVzIGl0ZW1zIGluIHN1Yi1hbGJ1bXMuIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsdGVyIHdoaWNoIHdpbGwgYmUgc2hvd24gaW4gdGhlIGRyb3Bkb3duIGluc2lkZSB0aGUgZmlsdGVyIGJsb2NrLiIpCmdldHRleHQoIlRoZXNlIGFyZSB0aGUgY29vcmRpbmF0ZXMgb24gd2hpY2ggdG8gY2VudGVyIHRoZSBtYXAgZm9yIHRoaXMgc3BlY2lmaWMgZmlsdGVyLiBTZWxlY3RpbmcgdGhlIGNvb3JkaW5hdGVzIGZyb20gYSBtYXAgd2lsbCBzZXQgYm90aCB0aGUgY29vcmRpbmF0ZXMgYW5kIHpvb20uIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUgem9vbSB0byB1c2Ugd2hlbiB0aGUgZmlsdGVyIGlzIHNlbGVjdGVkLiBJdCBjYW4gYmUgY2hvc2VuIGZyb20gYSBtYXAgZGlyZWN0bHkgKHNlZSBiZWxvdykuIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUgbmFtZSBhbmQgdGl0bGUgb2YgdGhlIEdyb3VwLjxici8+PGJyLz5JdCB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgdG9wIG9mIHRoZSBJbmZvV2luZG93IGFzIHdlbGwgYXMgaW4gdGhlIHRvb2x0aXAgd2hlbiB0aGUgbW91c2UgaXMgb24gdGhlIG1hcmtlci4iKQpnZXR0ZXh0KCJUaGlzIHRoZSBkYXRlIG9mIHRoZSBpdGVtIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgSW5mb1dpbmRvdy4iKQpnZXR0ZXh0KCJUaGlzIGlzIHRoZSBcIlN1bW1hcnlcIiBpbiB0aGUgR2FsbGVyeSBzZW5zZS48YnIvPjxici8+VGhpcyB3aWxsIHNob3cgaW4gdGhlIEluZm9XaW5kb3cgaWYgY29uZmlndXJlZCBpbiB0aGUgVGhlbWUgU2V0dGluZ3MuIikKZ2V0dGV4dCgiU2VsZWN0IGEgVGh1bWJuYWlsIGZvciB0aGlzIGdyb3VwLjxici8+PGJyLz5UaGUgcGljdHVyZSB3aWxsIGJlIHNob3duIGluIHRoZSBJbmZvV2luZG93IHNpemVkIHRvIGZpdC48YnIvPjxici8+T25seSBKUEcgaW1hZ2VzIHNlZW0gdG8gd29yayBjb3JyZWN0bHkuIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUgXCJEZXNjcmlwdGlvblwiIGluIHRoZSBHYWxsZXJ5IHNlbnNlLjxici8+PGJyLz5UaGlzIHdpbGwgc2hvdyBpbiB0aGUgSW5mb1dpbmRvdyBpZiBjb25maWd1cmVkIGluIHRoZSBUaGVtZSBTZXR0aW5ncy4iKQpnZXR0ZXh0KCJUaGVzZSBhcmUgdGhlIGNvb3JkaW5hdGVzIGF0IHdoaWNoIHRoZSBHcm91cCBNYXJrZXIgd2lsbCBzaG93IHVwIG9uIHRoZSBtYXAuPGJyLz48YnIvPlRoZSBjb29yZGluYXRlcyBhbmQgem9vbSBjYW4gYmUgY2hvc2VuIGZyb20gYSBtYXAuIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUgem9vbSBsZXZlbCBhdCB3aGljaCB0aGUgbWFwIHdpbGwgYmUgZGlzcGxheWVkIHdoZW4gdGhlIFpvb20gSW4gbGluayBpcyBjbGlja2VkLjxici8+PGJyLz5UaGUgWm9vbSBJbiBsaW5rIHdpbGwgYmUgc2hvd24gaW4gdGhlIEluZm9XaW5kb3cgaWYgY29uZmlndXJlZCBpbiB0aGUgVGhlbWUgU2V0dGluZ3MuIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUgY29sb3Igb2YgdGhlIG1hcmtlci48YnIvPjxici8+VGhlIGxpc3QgaXMgY3JlYXRlZCBmcm9tIHRoZSBhdmFpbGFibGUgY29sb3JzIGZvciB0aGUgR3JvdXAgTWFya2VyIGluIHRoZSBNYXJrZXIgVGFiLiIpCmdldHRleHQoIkNoZWNrIHRoZSBpdGVtcyB5b3Ugd2FudCB0byBkaXNwbGF5IG9uIHRoZSBtYXAgd2hlbiB0aGUgZ3JvdXAgaXMgc2VsZWN0ZWQuPGJyLz48YnIvPklmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZCwgYW4gZXJyb3Igd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiB0aGUgZ3JvdXAgdGh1bWJuYWlsIGlzIGNsaWNrZWQuIFBpbmsgaXRlbXMgYXJlIHBob3RvcywgZ3JlZW4gaXRlbXMgYXJlIGFsYnVtcyBhbmQgYmx1ZSBpdGVtcyBhcmUgb3RoZXIgZ3JvdXBzLiIpCmdldHRleHQoIkFjY29yZGluZyB0byB0aGUgR29vZ2xlIEFQSSBkb2N1bWVudGF0aW9uLCBpZiB5b3Ugd2FudCB0aGUgcm91dGVzIChhbHNvIGtub3duIGFzIHBvbHlsaW5lcykgdG8gd29yayBwcm9wZXJseSBpbiBJbnRlcm5ldCBFeHBsb3JlciwgeW91IG11c3QgaGF2ZSB0aGUgcHJvcGVyIGF0dHJpYnV0ZXMgaW4gdGhlIHdlYiBwYWdlIEhUTUwgdGFnLjxici8+PGJyLz5JZiB5b3UgZG9uJ3QgaGF2ZSB0aGlzIHNldHVwIHByb3Blcmx5LCB0aGUgbWFwIHdpbGwgbm90IHdvcmsgb3IgdGhlIHJvdXRlcyB3aWxsIG5vdCBzaG93IHVwIHdoZW4gdmlld2VkIGluIEludGVybmV0IEV4cGxvcmVyLjxici8+PGJyLz5UaGlzIGJ1dHRvbiB3aWxsIGNoYW5nZSB0aGVtZS50cGwgb2YgdGhlIGRlZmF1bHQgR2FsbGVyeSB0aGVtZSB0byBtb2RpZnkgdGhlIEhUTUwgdGFnLiBBIGJhY2t1cCBvZiB0aGUgZmlsZSBjYWxsZWQgdGhlbWUuYmFrIHdpbGwgYmUgc2F2ZWQgaW4gdGhlIHNhbWUgcGxhY2UuPGJyLz48YnIvPklmIHlvdXIgR2FsbGVyeSBiZWNvbWVzIHVudXNhYmxlIGFmdGVyIGNsaWNraW5nIHRoaXMsIHJlc3RvcmUgdGhlbWUuYmFrIHRvIHRoZW1lLnRwbCAodmlhIEZUUCBvciBzaGVsbCBhY2Nlc3MpIHRvIGdldCBldmVyeXRoaW5nIGJhY2sgdG8gbm9ybWFsLjxici8+PGJyLz5Zb3UgY2FuIHRoZW4gbWFrZSB0aGUgY2hhbmdlIGJ5IGhhbmQgKHNlZSBXaWtpKSB3aGljaCBpcyBhIGJpdCBzYWZlci4iKQpnZXR0ZXh0KCJUaGlzIHdpbGwgcHV0IG51bWJlcnMgaW4gZWFjaCBpY29uIHRoYXQgYmVsb25ncyB0byBhIHJvdXRlLjxicj48YnI+Q3VycmVudGx5LCB0aGlzIHJlcXVpcmVzIEltYWdlTWFnaWNrIHRvIGJlIGZ1bmN0aW9uYWwsIG90aGVyd2lzZSB0aGUgbWFya2VycyBjYW5ub3QgYmUgY3JlYXRlZCBhbmQgd2lsbCBub3QgYmUgc2hvd24uPGJyPjxicj5JZiB5b3UncmUgZ2V0dGluZyBubyBtYXJrZXJzIGF0IGFsbCwgdmVyaWZ5IHRoYXQgdGhlIHdlYiBzZXJ2ZXIgaGFzIHJpZ2h0cyB0byB3cml0ZSB0byBtb2R1bGVzL21hcC9pbWFnZXMvcm91dGVzLy4iKQpnZXR0ZXh0KCJUaGlzIGlzIGEgbmFtZSBmb3IgeW91ciByb3V0ZS4gSXQgd2lsbCBiZSB1c2VkIG9uIHRoZSBSb3V0ZXMgbWFuYWdlbWVudCBwYWdlIGFuZCBzaG93biBpbiB0aGUgZmlsdGVyIGxpc3QgaWYgXCJGaWx0ZXJcIiBpcyBzZWxlY3RlZCBiZWxvdy4iKQpnZXR0ZXh0KCJUaGlzIGlzIHRoZSBjb2xvciBmb3IgdGhlIGxpbmVzIHRoYXQgd2lsbCBzaG93IGFzIGEgcm91dGUgb24gdGhlIG1hcC48YnIvPjxici8+VGhlIGRlZmF1bHQgaXMgcHVycGxlLjxici8+PGJyLz5DbGljayBvbiB0aGUgY29sb3IgdG8gcGljayBmcm9tIGEgcGFsZXR0ZSBvciBlbnRlciB0aGUgUkdCIGhleCB2YWx1ZSBpbiB0aGUgdGV4dCBib3guIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUgd2lkdGggb2YgdGhlIGxpbmUgaW4gcGl4ZWxzLjxici8+PGJyLz5UaGUgd2lkdGggaXMgMyBwaXhlbHMgYnkgZGVmYXVsdC4iKQpnZXR0ZXh0KCJDaGFuZ2UgdGhlIG9wYWNpdHkgdG8gYWRqdXN0IHRoZSB0cmFuc3BhcmVuY3kgb2YgdGhlIHJvdXRlIGxpbmUuPGJyLz48YnIvPkl0IGlzIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSwgd2l0aCAxIGJlaW5nIHRoZSBkZWZhdWx0Ljxici8+PGJyLz4wIGlzIGludmlzaWJsZSBhbmQgMSBpcyBjb21wbGV0ZWx5IG9wYXF1ZS4iKQpnZXR0ZXh0KCJEaXNhYmxpbmcgdGhlIHJvdXRlIGFsbG93cyB5b3UgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIG1hcCB3aXRob3V0IGRlbGV0aW5nIHRoZSByb3V0ZSBpdHNlbGYuIikKZ2V0dGV4dCgiVGhpcyBzZXR0aW5nIHdpbGwgY3JlYXRlIGEgZmlsdGVyIGZvciB0aGlzIHJvdXRlIHdoaWNoIHdpbGwgYXBwZWFyIGluIHRoZSBmaWx0ZXIgYmxvY2suPGJyLz48YnIvPldoZW4gdGhlIGZpbHRlciBpcyBzZWxlY3RlZCBpdCB3aWxsIGF1dG8tem9vbSBhbmQgY2VudGVyIHRoZSBtYXAgdG8gZGlzcGxheSBpdGVtcyBpbiB0aGUgcm91dGUuIikKZ2V0dGV4dCgiU2VsZWN0IHRoZSBpdGVtcyB0byBpbmNsdWRlIGluIHRoaXMgcm91dGUgYW5kIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgaXRlbXMgc2hvdWxkIGFwcGVhci4gVGhlIG1hcmtlcnMgZm9yIHRoZXNlIGl0ZW1zIHdpbGwgYmUgY3JlYXRlZCBkeW5hbWljYWxseSB0byBhZGQgYSBudW1iZXIgZm9yIHRoZSBpdGVtIGluIHRoZSByb3V0ZSBzZXF1ZW5jZS48YnIvPjxici8+WW91IG11c3Qgc2VsZWN0IGF0IGxlYXN0IDIgaXRlbXMgdG8gY3JlYXRlIGEgcm91dGUuPGJyLz48YnIvPlBpbmsgaXRlbXMgYXJlIHBob3RvcywgZ3JlZW4gaXRlbXMgYXJlIGFsYnVtcyBhbmQgYmx1ZSBpdGVtcyBhcmUgZ3JvdXBzLiIpCmdldHRleHQoIlRoaXMgYWxsb3dzIHlvdSB0byBzZWUgd2hhdCBtYXJrZXJzIGFyZSBhdmFpbGFibGUuPGJyLz48YnIvPkNsaWNrIFZpZXcgQWxsIHRvIHNlZSBhbGwgYXZhaWxhYmxlIG1hcmtlciBzZXRzLjxici8+PGJyLz5TZWxlY3QgYSBtYXJrZXJzZXQgZnJvbSB0aGUgZHJvcGRvd24gYW5kIENsaWNrIERlbGV0ZSB0byByZW1vdmUgaXQuPGJyLz48YnIvPkNsaWNrIEFkZCB0byBjcmVhdGUgYSBuZXcgbWFya2VyIHNldC4iKQpnZXR0ZXh0KCJUaGlzIGlzIHRoZSBNYXJrZXIgU2V0IGZvciBQaG90b3MgYW5kIGFsc28gdGhlIGRlZmF1bHQgY29sb3IgaWYgbm9uZSBpcyBzZWxlY3RlZCBmb3IgYSBzcGVjaWZpYyBwaG90by4iKQpnZXR0ZXh0KCJUaGlzIGlzIHRoZSBNYXJrZXIgU2V0IGZvciBBbGJ1bXMgYW5kIGFsc28gdGhlIGRlZmF1bHQgY29sb3IgaWYgbm9uZSBpcyBzZWxlY3RlZCBmb3IgYSBzcGVjaWZpYyBhbGJ1bS4iKQpnZXR0ZXh0KCJUaGlzIGlzIHRoZSBNYXJrZXIgU2V0IGZvciBHcm91cHMgYW5kIGFsc28gdGhlIGRlZmF1bHQgY29sb3IgaWYgbm9uZSBpcyBzZWxlY3RlZCBmb3IgYSBzcGVjaWZpYyBncm91cC4iKQpnZXR0ZXh0KCJXaGVuIHRoaXMgaXMgY2hlY2tlZCwgYW4gaXRlbSB3aXRob3V0IGEgY29sb3Igc2VsZWN0ZWQgd2lsbCB1c2UgaXRzIHBhcmVudCBhbGJ1bSdzIGNvbG9yLjxicj48YnI+SWYgdGhlIHBhcmVudCBoYXMgbm8gY29sb3Igc2VsZWN0ZWQsIHRoZW4gaXQgd2lsbCB1c2UgdGhlIGRlZmF1bHQgY29sb3IgYWJvdmUuPGJyPjxicj5UaGlzIGFsbG93cyB5b3UgdG8gdXNlIGEgc3BlY2lmaWMgY29sb3IgZm9yIGFuIGVudGlyZSBhbGJ1bS4iKQpnZXR0ZXh0KCJXaGVuIHRoaXMgaXMgY2hlY2tlZCwgYWxsIGl0ZW1zIGNsb3NlIHRvIHRoZWlyIHBhcmVudCBhbGJ1bSB3aWxsIGJlIGhpZGRlbi48YnI+PGJyPldoZW4gdGhlIHpvb20gbGV2ZWwgaXMgaGlnaCBlbm91Z2ggdG8gc2hvdyBhbGwgb2YgdGhlIGNoaWxkcmVuIGl0ZW1zLCB0aGUgYWxidW0gaXRlbSB3aWxsIG5vdCBzaG93biBvbiB0aGUgbWFwLiIpCmdldHRleHQoIldoZW4gdGhpcyBpcyBjaGVja2VkLCBhbGwgaXRlbXMgdG9vIGNsb3NlIHRvZ2V0aGVyIHdpbGwgYmUgZ3JvdXBlZCBpbnRvIGFub3RoZXIgaXRlbS48YnI+PGJyPklmIHRoZSBpdGVtIGlzIGNsaWNrZWQsIHRoZSBjb3JyZWN0IHpvb20gbGV2ZWwgd2lsbCBiZSB1c2VkIHRvIHNob3cgYWxsIGl0ZW1zIGluc2lkZSB0aGUgZ3JvdXAuPGJyPjxicj5UaGUgcmVncm91cGluZyBoYXBwZW5zIGR5bmFtaWNhbGx5IHdoZW4gdGhlIHpvb20gc2NhbGUgaXMgY2hhbmdlZC48YnI+PGJyPlRoaXMgY2FuIHNsb3cgZG93biB0aGUgbWFwIGRpc3BsYXkgaWYgbG90cyBvZiBpdGVtcyBhcmUgcHJlc2VudC4gKD4xMDAwKSIpCmdldHRleHQoIlRoaXMgaXMgdGhlIGRpc3RhbmNlIChpbiBwaXhlbHMpIGF0IHdoaWNoIGl0ZW1zIGdldCByZWdyb3VwZWQuIFRoaXMgY2FuIGJlIGNoYW5nZWQgc28gdGhhdCBkaWZmZXJlbnQgaWNvbiBzaXplcyB3b24ndCBvdmVybGFwLjxicj48YnI+VGhlIGRlZmF1bHQgaXMgMTUgcGl4ZWxzLiIpCmdldHRleHQoIlRoaXMgYWxsb3dzIHlvdSB0byB1cGxvYWQgYSBuZXcgaWNvbiB0byB1c2UgZm9yIHRoZSByZWdyb3VwZWQgaXRlbXMuIikKZ2V0dGV4dCgiU2VsZWN0IHdoaWNoIGljb24geW91IHdhbnQgdG8gZGlzcGxheSBvbiB0aGUgbWFwIGluIHBsYWNlIG9mIHRoZSByZWdyb3VwZWQgaXRlbXMuPGJyPjxicj5UaGlzIGlzIG9ubHkgdXNlZCBpZiBhdXRvbWF0aWMgcmVncm91cCBvZiBpdGVtcyBpcyBlbmFibGVkLiIpCmdldHRleHQoIlNlbGVjdCBhbiBleGlzdGluZyBiYXNlIGltYWdlIGZyb20gd2hpY2ggdG8gY3JlYXRlIGEgbWFya2VyIHNldC48YnIvPjxici8+VGhlIGJhc2UgY29sb3IgbXVzdCBiZSByZWRkaXNoIGluIG9yZGVyIGZvciBJbWFnZU1hZ2ljayB0byBwcm9wZXJseSBwcm9jZXNzIHRoZSBjb2xvcnMuIE90aGVyd2lzZSwgcmVzdWx0cyB3aWxsIGJlIHVucHJlZGljdGFibGUuIikKZ2V0dGV4dCgiVGhpcyBhbGxvd3MgeW91IHRvIHVwbG9hZCBhIG5ldyBpY29uIGZyb20gd2hpY2ggdG8gY3JlYXRlIGEgbWFya2VyIHNldC48YnIvPjxici8+UmVtZW1iZXIgdGhlIGNvbG9yIG5lZWRzIHRvIGJlIHNvbWV3aGF0IHJlZC9waW5rIGZvciB0aGUgY29sb3JpbmcgdG8gd29yayBjb3JyZWN0bHkuIikKZ2V0dGV4dCgiVGhpcyBhbGxvd3MgeW91IHRvIGFkanVzdCB0aGUgc2l6ZSBvZiBhbGwgdGhlIG1hcmtlcnMgY3JlYXRlZCBpbiB0aGUgbmV3IHNldCByZWxhdGl2ZSB0byB0aGUgb3JpZ2luYWwgKGJhc2UpIGltYWdlIHVzZWQuIikKZ2V0dGV4dCgiSGVyZSB5b3UgY2FuIGVpdGhlciBjaG9vc2UgYWxsIGNvbG9ycywgb3Igc2VsZWN0IHNwZWNpZmljIGNvbG9ycy4gSWYgeW91IGNob29vc2Ugc3BlY2lmaWMgY29sb3JzLCBvbmx5IHRob3NlIGNvbG9ycyB3aWxsIGJlIGF2YWlsYWJsZSBpbiB0aGUgY29sb3Igc2VsZWN0aW9uIGZvciBlYWNoIGl0ZW0uIikKZ2V0dGV4dCgiVGhpcyBpcyB0aGUgbWFya2VyIHNldCBuYW1lLjxici8+PGJyLz5JZiB0aGUgc2V0IGFscmVhZHkgZXhpc3RzLCB5b3Ugd2lsbCBiZSBnaXZlbiB0aGUgb3BvcnR1bml0eSB0byBvdmVyd3JpdGUgb3IgY2FuY2VsLiIpCmdldHRleHQoIlRoaXMgaXMgdGhlIEdQUyBjb29yZGluYXRlcyBpbiB0aGUgZm9ybWF0IGxhdGl0dWRlLCBsb25naXR1ZGUuPGJyPjxicj5UaGVyZSBhcmUgNCBvcHRpb25zIHRvIGdldCBjb29yZGluYXRlcyBoZXJlOjxicj4gLSBFbnRlciB0aGVtIG1hbnVhbGx5Ljxicj48YnI+IC0gR2V0IHRoZW0gZnJvbSB0aGUgRVhJRiBoZWFkZXIgKGEgYnV0dG9uIHRvIGdldCBmcm9tIEVYSUYgaGVhZGVyIHdpbGwgc2hvdyB1cCBpZiB0aGV5J3JlIGF2YWlsYWJsZSkuPGJyPjxicj4gLSBFbnRlciBhbiBhZGRyZXNzIGFuZCBjbGljayAnR2V0IFZpYSBBZGRyZXNzJy48YnI+PGJyPiAtIENsaWNrIHRoZSBHZXQgdmlhIG1hcCB0byBtYW51YWxseSBzZWxlY3QgdGhlbS4pIikKZ2V0dGV4dCgiVGhpcyBpcyB1c2VkIHdpdGggdGhlICdab29tLWluJyBsaW5rLjxicj48YnI+SWYgdGhhdCBvcHRpb24gaXMgYWN0aXZhdGVkIGluIHRoZSBTaXRlIEFkbWluLCBpdCB3aWxsIHNob3cgYSBsaW5rIGluIHRoZSBJbmZvV2luZG93IHRvIHpvb20gdGhlIG1hcCB0byB0aGUgdmFsdWUgZW50ZXJlZCBmb3IgdGhlIGl0ZW0uPGJyPjxicj5IaWdoZXIgdmFsdWVzIG1lYW4gY2xvc2VyIHRvIHRoZSBzdHJlZXQgbGV2ZWwgKGZyb20gMCB0byAxOSkuIikKZ2V0dGV4dCgiVGhpcyBmaWVsZCBhbGxvd3MgeW91IHRvIGN1c3RvbWl6ZSB0aGUgdmlld3BvaW50IGZvciB0aGUgaXRlbSBpbiBHb29nbGUgRWFydGggd2hlbiB0aGUgbWFya2VyIGlzIGRvdWJsZS1jbGlja2VkLjxicj48YnI+RW50ZXIgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIGZvcm1hdDogaGVhZGluZyx0aWx0LHJhbmdlLiIpCmdldHRleHQoIlRoaXMgaXMgc2ltcGx5IHRoZSBjb2xvciBvZiB0aGUgbWFya2VyIHRvIHVzZSBmb3IgdGhhdCBpdGVtLjxicj48YnI+SWYgbm8gY29sb3IgaXMgc2VsZWN0ZWQsIGVpdGhlciB0aGUgZGVmYXVsdCBtYXJrZXIgY29sb3IgaXMgY2hvc2VuIG9yIChpZiBhdmFpbGFibGUgYW5kIGVuYWJsZWQpIHRoZSBwYXJlbnQgYWxidW0gY29sb3Igd2lsbCBiZSB1c2VkLiIpCmdldHRleHQoIlRoaXMgc2ltcGx5IHNob3dzIGEgbWFwIGFuZCBhbGxvd3MgeW91IHRvIGNsaWNrIG9uIGl0IHRvIGRlZmluZSB3aGVyZSB0aGUgbWFya2VyIGxvY2F0aW9uIGFuZCBhc3NvY2lhdGVkIHpvb20gbGV2ZWwuIikKZ2V0dGV4dCgiRW50ZXIgdGhlIGFkZHJlc3MgaW4gdGhlIGZvcm1hdCA8YnI+ICcyMDIgTm9ydGggTGFzYWxsZSwgQ2hpY2FnbywgSUwnIGZvciBleGFtcGxlLjxicj48YnI+VGhlbiBjbGljayB0aGUgYnV0dG9uIHRvIHJldHJpZXZlIHRoZSBjb29yZGluYXRlcy4gQmUgc3VyZSB0byBjbGljayB0aGUgc2F2ZSBidXR0b24gdG8ga2VlcCB0aGUgY29vcmRpbmF0ZXMuIikKZ2V0dGV4dCgiVGhpcyBidXR0b24gb25seSBhcHBlYXJzIHdoZW4gYW4gRVhJRiBoZWFkZXIgaXMgcHJlc2VudCBhbmQgR1BTIGNvb3JkaW5hdGVzIGFyZSBmb3VuZCBpbiB0aGUgcGhvdG8gaGVhZGVyIGRhdGEuPGJyPjxicj5TaW1wbHkgY2xpY2sgdGhlIGJ1dHRvbiB0byBwb3B1bGF0ZSBhbmQgc2F2ZSB0aGUgY29vcmRpbmF0ZXMgZm9yIHRoYXQgaXRlbS4iKQpnZXR0ZXh0KCJUaGlzIHdpbGwgbW9kaWZ5IHRoZSBwaG90byBhbmQgd3JpdGUgdGhlIGN1cnJlbnQgY29vcmRpbmF0ZXMgdG8gaXRzIEVYSUYgaGVhZGVyLjxicj48YnI+SXQgY2FuIGJlIHVzZWQgYXMgYSBmb3JtIG9mIGJhY2t1cCBmb3IgdGhlIGNvb3JkaW5hdGVzIGlmIHRoZXkgZ2V0IGxvc3QuIikKCi8qIHRlbXBsYXRlcy9tYXBJdGVtRWRpdC50cGwgKi8KLy8gSElOVDogQWRkcmVzcyBub3QgZm91bmQKZ2V0dGV4dCgiTm90IGZvdW5kIikKZ2V0dGV4dCgiTm8gVmFsdWUiKQpnZXR0ZXh0KCI8dT5HPC91PmV0IHZpYSBhIE1hcCIpCmdldHRleHQoIkdldCB2aWEgRVhJRiBoZWFkZXJzIikKZ2V0dGV4dCgiV3JpdGUgR1BTIHRvIEVYSUYgaGVhZGVyIikKZ2V0dGV4dCgiTm8gR1BTIGNvb3JkaW5hdGVzIHRvIHdyaXRlLiIpCmdldHRleHQoIlRoaXMgcGljdHVyZSBhbHJlYWR5IGhhcyBHUFMgY29vcmRpbmF0ZXMgaW4gdGhlIGhlYWRlciIpCmdldHRleHQoIjx1PkU8L3U+bnRlciBBZGRyZXNzIGFuZCAiKQpnZXR0ZXh0KCJHZXQgdmlhIGFkZHJlc3MiKQpnZXR0ZXh0KCJTYXZlIikKZ2V0dGV4dCgiUmVzZXQiKQoKLyogdGVtcGxhdGVzL2Jsb2Nrcy9JdGVtQ29vcmRzLnRwbCAqLwpnZXR0ZXh0KCIlcyBDb29yZGluYXRlczoiKQoKLyogdGVtcGxhdGVzL2Jsb2Nrcy9MZWdlbmQudHBsICovCmdldHRleHQoIkxlZ2VuZChzKSIpCmdldHRleHQoIkdyb3VwaW5nIikKZ2V0dGV4dCgiV2hlbiB5b3UgY2xpY2sgb24gdGhpcyBpY29uLCBpdCBhdXRvbWF0aWNhbGx5IHpvb21zIGluIHRvIHNob3cgdGhlIGljb25zIHRoYXQgYXJlIFJlZ3JvdXBlZCB0b2dldGhlciIpCgovKiB0ZW1wbGF0ZXMvYmxvY2tzL01pbmlNYXAudHBsICovCmdldHRleHQoIiVzIExvY2F0aW9uIE1hcCIpCgovKiB0ZW1wbGF0ZXMvYmxvY2tzL2Jsb2Nrcy5pbmMgKi8KZ2V0dGV4dCgiR29vZ2xlIE1hcCBGaWx0ZXJzIChNYXAgVmlldyBvbmx5KSIpCmdldHRleHQoIkdvb2dsZSBNYXAgTWFya2VyIExlZ2VuZCAoTWFwIFZpZXcgb25seSkiKQpnZXR0ZXh0KCJHb29nbGUgTWFwIFRodW1ibmFpbCBCYXIgKE1hcCBWaWV3IG9ubHkpIikKZ2V0dGV4dCgiSXRlbSBNYXAgY29vcmRpbmF0ZXMiKQpnZXR0ZXh0KCJDb29yZGluYXRlIGRpc3BsYXkgc3R5bGUiKQpnZXR0ZXh0KCJEZWNpbWFsIERlZ3JlZXMiKQpnZXR0ZXh0KCJEZWdyZWVzIERlY2ltYWwgTWludXRlcyIpCmdldHRleHQoIkRlZ3JlZXMgTWludXRlcyBTZWNvbmRzIikKZ2V0dGV4dCgiTWluaSBHb29nbGUgTWFwIikKZ2V0dGV4dCgiTWFwIGhlaWdodCAocGl4ZWxzKSIpCmdldHRleHQoIk1hcCB3aWR0aCAoJSBvciBweCkiKQpnZXR0ZXh0KCJNYXAgdHlwZSIpCmdldHRleHQoIkVuYWJsZSBwYW4gYW5kIHpvb20gY29udHJvbHMiKQpnZXR0ZXh0KCJVc2UgcGFyZW50IGFsYnVtIGNvb3JkaW5hdGVzIGlmIGl0ZW0gaGFzIG5vbmUiKQpnZXR0ZXh0KCJBbGJ1bSBwYWdlOiBTaG93IGFsYnVtIG1hcmtlciIpCmdldHRleHQoIkFsYnVtIHBhZ2U6IFNob3cgaXRlbSBtYXJrZXJzIikKZ2V0dGV4dCgiTm9uZSIpCmdldHRleHQoIlNob3cgaXRlbXMgaW4gY3VycmVudCBhbGJ1bSBsZXZlbCIpCmdldHRleHQoIlNob3cgYWxsIGFsYnVtIHN1Yml0ZW1zIikKCi8qIHRlbXBsYXRlcy9ibG9ja3MvbWFwLnRwbCAqLwpnZXR0ZXh0KCJBcmVhIHRvIHNob3cgb24gdGhlIE1hcCIpCg==');
expand_3537250845($outputDir, 'templates/AdminHeader.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjUzICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKe2luY2x1ZGUgZmlsZT0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL2hlbHBmaWxlLnRwbCJ9Cgp7bGl0ZXJhbH0KZnVuY3Rpb24gaGlkZWhlbHAoKXsKICB2YXIgaGVscGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWxwZGl2Jyk7CiAgaGVscGRpdi5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7Cn0KCmZ1bmN0aW9uIHNob3doZWxwKGhlbHAscG9zKXsKICB2YXIgaGVscHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVscHRleHQnKTsKICBoZWxwdGV4dC5pbm5lckhUTUwgPSBoZWxwOwogIHZhciBoZWxwZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHBkaXYnKTsKICBoZWxwZGl2LnN0eWxlLnRvcCA9IHBvcysicHgiOwogIGhlbHBkaXYuc3R5bGUudmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsKfQoKaWYgKGRvY3VtZW50LmxheWVycykgeyAvLyBOZXRzY2FwZQogICAgZG9jdW1lbnQuY2FwdHVyZUV2ZW50cyhFdmVudC5NT1VTRU1PVkUpOwogICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBjYXB0dXJlTW91c2VQb3NpdGlvbjsKfSBlbHNlIGlmIChkb2N1bWVudC5hbGwpIHsgLy8gSW50ZXJuZXQgRXhwbG9yZXIKICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gY2FwdHVyZU1vdXNlUG9zaXRpb247Cn0gZWxzZSBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsgLy8gTmV0Y3NhcGUgNgogICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBjYXB0dXJlTW91c2VQb3NpdGlvbjsKfQovLyBHbG9iYWwgdmFyaWFibGVzCnZhciB4TW91c2VQb3MgPSAwOyAvLyBIb3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBtb3VzZSBvbiB0aGUgc2NyZWVuCnZhciB5TW91c2VQb3MgPSAwOyAvLyBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgbW91c2Ugb24gdGhlIHNjcmVlbgp2YXIgeE1vdXNlUG9zTWF4ID0gMDsgLy8gV2lkdGggb2YgdGhlIHBhZ2UKdmFyIHlNb3VzZVBvc01heCA9IDA7IC8vIEhlaWdodCBvZiB0aGUgcGFnZQoKZnVuY3Rpb24gY2FwdHVyZU1vdXNlUG9zaXRpb24oZSkgewogICAgaWYgKGRvY3VtZW50LmxheWVycykgewogICAgICAgIC8vIFdoZW4gdGhlIHBhZ2Ugc2Nyb2xscyBpbiBOZXRzY2FwZSwgdGhlIGV2ZW50J3MgbW91c2UgcG9zaXRpb24KICAgICAgICAvLyByZWZsZWN0cyB0aGUgYWJzb2x1dGUgcG9zaXRpb24gb24gdGhlIHNjcmVlbi4gaW5uZXJIaWdodC9XaWR0aAogICAgICAgIC8vIGlzIHRoZSBwb3NpdGlvbiBmcm9tIHRoZSB0b3AvbGVmdCBvZiB0aGUgc2NyZWVuIHRoYXQgdGhlIHVzZXIgaXMKICAgICAgICAvLyBsb29raW5nIGF0LiBwYWdlWC9ZT2Zmc2V0IGlzIHRoZSBhbW91bnQgdGhhdCB0aGUgdXNlciBoYXMKICAgICAgICAvLyBzY3JvbGxlZCBpbnRvIHRoZSBwYWdlLiBTbyB0aGUgdmFsdWVzIHdpbGwgYmUgaW4gcmVsYXRpb24gdG8KICAgICAgICAvLyBlYWNoIG90aGVyIGFzIHRoZSB0b3RhbCBvZmZzZXRzIGludG8gdGhlIHBhZ2UsIG5vIG1hdHRlciBpZgogICAgICAgIC8vIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCBvciBub3QuCiAgICAgICAgeE1vdXNlUG9zID0gZS5wYWdlWDsKICAgICAgICB5TW91c2VQb3MgPSBlLnBhZ2VZOwogICAgICAgIHhNb3VzZVBvc01heCA9IHdpbmRvdy5pbm5lcldpZHRoK3dpbmRvdy5wYWdlWE9mZnNldDsKICAgICAgICB5TW91c2VQb3NNYXggPSB3aW5kb3cuaW5uZXJIZWlnaHQrd2luZG93LnBhZ2VZT2Zmc2V0OwogICAgfSBlbHNlIGlmIChkb2N1bWVudC5hbGwpIHsKICAgICAgICAvLyBXaGVuIHRoZSBwYWdlIHNjcm9sbHMgaW4gSUUsIHRoZSBldmVudCdzIG1vdXNlIHBvc2l0aW9uCiAgICAgICAgLy8gcmVmbGVjdHMgdGhlIHBvc2l0aW9uIGZyb20gdGhlIHRvcC9sZWZ0IG9mIHRoZSBzY3JlZW4gdGhlCiAgICAgICAgLy8gdXNlciBpcyBsb29raW5nIGF0LiBzY3JvbGxMZWZ0L1RvcCBpcyB0aGUgYW1vdW50IHRoZSB1c2VyCiAgICAgICAgLy8gaGFzIHNjcm9sbGVkIGludG8gdGhlIHBhZ2UuIGNsaWVudFdpZHRoL0hlaWdodCBpcyB0aGUgaGVpZ2h0LwogICAgICAgIC8vIHdpZHRoIG9mIHRoZSBjdXJyZW50IHBhZ2UgdGhlIHVzZXIgaXMgbG9va2luZyBhdC4gU28sIHRvIGJlCiAgICAgICAgLy8gY29uc2lzdGVudCB3aXRoIE5ldHNjYXBlIChhYm92ZSksIGFkZCB0aGUgc2Nyb2xsIG9mZnNldHMgdG8KICAgICAgICAvLyBib3RoIHNvIHdlIGVuZCB1cCB3aXRoIGFuIGFic29sdXRlIHZhbHVlIG9uIHRoZSBwYWdlLCBubwogICAgICAgIC8vIG1hdHRlciBpZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgb3Igbm90LgogICAgICAgIHhNb3VzZVBvcyA9IHdpbmRvdy5ldmVudC54KyAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCk7CiAgICAgICAgeU1vdXNlUG9zID0gd2luZG93LmV2ZW50LnkrIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKTsKICAgICAgICB4TW91c2VQb3NNYXggPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKyAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCk7CiAgICAgICAgeU1vdXNlUG9zTWF4ID0gZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQrIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKTsKICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsKICAgICAgICAvLyBOZXRzY2FwZSA2IGJlaGF2ZXMgdGhlIHNhbWUgYXMgTmV0c2NhcGUgNCBpbiB0aGlzIHJlZ2FyZAogICAgICAgIHhNb3VzZVBvcyA9IGUucGFnZVg7CiAgICAgICAgeU1vdXNlUG9zID0gZS5wYWdlWTsKICAgICAgICB4TW91c2VQb3NNYXggPSB3aW5kb3cuaW5uZXJXaWR0aCt3aW5kb3cucGFnZVhPZmZzZXQ7CiAgICAgICAgeU1vdXNlUG9zTWF4ID0gd2luZG93LmlubmVySGVpZ2h0K3dpbmRvdy5wYWdlWU9mZnNldDsKICAgIH0Kd2luZG93LnN0YXR1cyA9ICJ4TW91c2VQb3M9IiArIHhNb3VzZVBvcyArICIsIHlNb3VzZVBvcz0iICsgeU1vdXNlUG9zICsgIiwgeE1vdXNlUG9zTWF4PSIgKyB4TW91c2VQb3NNYXggKyAiLCB5TW91c2VQb3NNYXg9IiArIHlNb3VzZVBvc01heDsKcmV0dXJuIHRydWU7Cn0KCgovLyBDb2xvciBQaWNrZXIgU2NyaXB0IGZyb20gRmxvb2JsZS5jb20KLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0Ci8vCWh0dHA6Ly93d3cuZmxvb2JsZS5jb20vc2NyaXB0cy9jb2xvcnBpY2tlci5waHAKLy8gQ29weXJpZ2h0IDIwMDMgQW5pbXVzIFBhY3R1bSBDb25zdWx0aW5nIGluYy4KLy8gWW91IG1heSB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhpcyBjb2RlIGZyZWVseSwgYXMgbG9uZyBhcwovLyB5b3Uga2VlcCB0aGlzIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBsaW5rIHRvIGZsb29ibGUuY29tCi8vIGlmIHlvdSBjaG9zZSB0byByZW1vdmUgdGhlbSwgeW91IG11c3QgbGluayB0byB0aGUgcGFnZQovLyBsaXN0ZWQgYWJvdmUgZnJvbSBldmVyeSB3ZWIgcGFnZSB3aGVyZSB5b3UgdXNlIHRoZSBjb2xvcgovLyBwaWNrZXIgY29kZS4KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICB2YXIgcGVybGluZSA9IDk7CiAgICAgdmFyIGRpdlNldCA9IGZhbHNlOwogICAgIHZhciBjdXJJZDsKICAgICB2YXIgY29sb3JMZXZlbHMgPSBBcnJheSgnMCcsICczJywgJzYnLCAnOScsICdDJywgJ0YnKTsKICAgICB2YXIgY29sb3JBcnJheSA9IEFycmF5KCk7CiAgICAgdmFyIGllID0gZmFsc2U7CiAgICAgdmFyIG5vY29sb3IgPSAnbm9uZSc7CgkgaWYgKGRvY3VtZW50LmFsbCkgeyBpZSA9IHRydWU7IG5vY29sb3IgPSAnJzsgfQoJIGZ1bmN0aW9uIGdldE9iaihpZCkgewoJCWlmIChpZSkgeyByZXR1cm4gZG9jdW1lbnQuYWxsW2lkXTsgfSAKCQllbHNlIHsJcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsJfQoJIH0KCiAgICAgZnVuY3Rpb24gYWRkQ29sb3IociwgZywgYikgewogICAgIAl2YXIgcmVkID0gY29sb3JMZXZlbHNbcl07CiAgICAgCXZhciBncmVlbiA9IGNvbG9yTGV2ZWxzW2ddOwogICAgIAl2YXIgYmx1ZSA9IGNvbG9yTGV2ZWxzW2JdOwogICAgIAlhZGRDb2xvclZhbHVlKHJlZCwgZ3JlZW4sIGJsdWUpOwogICAgIH0KCiAgICAgZnVuY3Rpb24gYWRkQ29sb3JWYWx1ZShyLCBnLCBiKSB7CiAgICAgCWNvbG9yQXJyYXlbY29sb3JBcnJheS5sZW5ndGhdID0gJyMnICsgciArIHIgKyBnICsgZyArIGIgKyBiOwogICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBzZXRDb2xvcihjb2xvcikgewogICAgIAl2YXIgbGluayA9IGdldE9iaihjdXJJZCk7CiAgICAgCXZhciBmaWVsZCA9IGdldE9iaihjdXJJZCArICdmaWVsZCcpOwogICAgIAl2YXIgcGlja2VyID0gZ2V0T2JqKCdjb2xvcnBpY2tlcicpOwogICAgIAlmaWVsZC52YWx1ZSA9IGNvbG9yOwogICAgIAlpZiAoY29sb3IgPT0gJycpIHsKCSAgICAgCWxpbmsuc3R5bGUuYmFja2dyb3VuZCA9IG5vY29sb3I7CgkgICAgIAlsaW5rLnN0eWxlLmNvbG9yID0gbm9jb2xvcjsKCSAgICAgCWNvbG9yID0gbm9jb2xvcjsKICAgICAJfSBlbHNlIHsKCSAgICAgCWxpbmsuc3R5bGUuYmFja2dyb3VuZCA9IGNvbG9yOwoJICAgICAJbGluay5zdHlsZS5jb2xvciA9IGNvbG9yOwoJICAgIH0KICAgICAJcGlja2VyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkgICAgZXZhbChnZXRPYmooY3VySWQgKyAnZmllbGQnKS50aXRsZSk7CiAgICAgfQogICAgICAgIAogICAgIGZ1bmN0aW9uIHNldERpdigpIHsgICAgIAogICAgIAlpZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpIHsgcmV0dXJuOyB9CiAgICAgICAgdmFyIGVsZW1EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBpZiAodHlwZW9mKGVsZW1EaXYuaW5uZXJIVE1MKSAhPSAnc3RyaW5nJykgeyByZXR1cm47IH0KICAgICAgICBnZW5Db2xvcnMoKTsKICAgICAgICBlbGVtRGl2LmlkID0gJ2NvbG9ycGlja2VyJzsKCSAgICBlbGVtRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKICAgICAgICBlbGVtRGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgZWxlbURpdi5zdHlsZS5ib3JkZXIgPSAnIzAwMDAwMCAxcHggc29saWQnOwogICAgICAgIGVsZW1EaXYuc3R5bGUuYmFja2dyb3VuZCA9ICcjQkJCQkJCJzsKICAgICAgICBlbGVtRGl2LnN0eWxlLmxlZnQgPSAnNTUwcHgnOwogICAgICAgIGVsZW1EaXYuc3R5bGUudG9wID0gJzE4MHB4JzsKICAgICAgICBlbGVtRGl2LmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6VmVyZGFuYTsgZm9udC1zaXplOjExcHg7Ij5QaWNrIGEgY29sb3I6ICcKICAgICAgICAgIAkrICcoPGEgaHJlZj0iamF2YXNjcmlwdDpzZXRDb2xvcihcJ1wnKTsiPk5vIGNvbG9yPC9hPik8YnI+JyAKICAgICAgICAJKyBnZXRDb2xvclRhYmxlKCkgCiAgICAgICAgCSsgJzxjZW50ZXI+PGEgaHJlZj0iaHR0cDovL3d3dy5mbG9vYmxlLmNvbS9zY3JpcHRzL2NvbG9ycGlja2VyLnBocCInCiAgICAgICAgCSsgJyB0YXJnZXQ9Il9ibGFuayI+Y29sb3IgcGlja2VyPC9hPiBieSA8YSBocmVmPSJodHRwOi8vd3d3LmZsb29ibGUuY29tIiB0YXJnZXQ9Il9ibGFuayI+PGI+Zmxvb2JsZTwvYj48L2E+PC9jZW50ZXI+PC9zcGFuPic7CgogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbURpdik7CiAgICAgICAgZGl2U2V0ID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gcGlja0NvbG9yKGlkKSB7CiAgICAgCWlmICghZGl2U2V0KSB7IHNldERpdigpOyB9CiAgICAgCXZhciBwaWNrZXIgPSBnZXRPYmooJ2NvbG9ycGlja2VyJyk7ICAgICAJCgkJaWYgKGlkID09IGN1cklkICYmIHBpY2tlci5zdHlsZS5kaXNwbGF5ID09ICdibG9jaycpIHsKCQkJcGlja2VyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJCXJldHVybjsKCQl9CiAgICAgCWN1cklkID0gaWQ7CiAgICAgCXZhciB0aGVsaW5rID0gZ2V0T2JqKGlkKTsKICAgICAJcGlja2VyLnN0eWxlLnRvcCA9IGdldEFic29sdXRlT2Zmc2V0VG9wKHRoZWxpbmspICsgMjA7CiAgICAgCXBpY2tlci5zdHlsZS5sZWZ0ID0gZ2V0QWJzb2x1dGVPZmZzZXRMZWZ0KHRoZWxpbmspOyAgICAgCglwaWNrZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIGdlbkNvbG9ycygpIHsKICAgICAgICBhZGRDb2xvclZhbHVlKCcwJywnMCcsJzAnKTsKICAgICAgICBhZGRDb2xvclZhbHVlKCczJywnMycsJzMnKTsKICAgICAgICBhZGRDb2xvclZhbHVlKCc2JywnNicsJzYnKTsKICAgICAgICBhZGRDb2xvclZhbHVlKCc4JywnOCcsJzgnKTsKICAgICAgICBhZGRDb2xvclZhbHVlKCc5JywnOScsJzknKTsgICAgICAgICAgICAgICAgCiAgICAgICAgYWRkQ29sb3JWYWx1ZSgnQScsJ0EnLCdBJyk7CiAgICAgICAgYWRkQ29sb3JWYWx1ZSgnQycsJ0MnLCdDJyk7CiAgICAgICAgYWRkQ29sb3JWYWx1ZSgnRScsJ0UnLCdFJyk7CiAgICAgICAgYWRkQ29sb3JWYWx1ZSgnRicsJ0YnLCdGJyk7CgogICAgICAgIGZvciAoYSA9IDE7IGEgPCBjb2xvckxldmVscy5sZW5ndGg7IGErKykKCQkJYWRkQ29sb3IoMCwwLGEpOwogICAgICAgIGZvciAoYSA9IDE7IGEgPCBjb2xvckxldmVscy5sZW5ndGggLSAxOyBhKyspCgkJCWFkZENvbG9yKGEsYSw1KTsKCiAgICAgICAgZm9yIChhID0gMTsgYSA8IGNvbG9yTGV2ZWxzLmxlbmd0aDsgYSsrKQoJCQlhZGRDb2xvcigwLGEsMCk7CiAgICAgICAgZm9yIChhID0gMTsgYSA8IGNvbG9yTGV2ZWxzLmxlbmd0aCAtIDE7IGErKykKCQkJYWRkQ29sb3IoYSw1LGEpOwoJCQkKICAgICAgICBmb3IgKGEgPSAxOyBhIDwgY29sb3JMZXZlbHMubGVuZ3RoOyBhKyspCgkJCWFkZENvbG9yKGEsMCwwKTsKICAgICAgICBmb3IgKGEgPSAxOyBhIDwgY29sb3JMZXZlbHMubGVuZ3RoIC0gMTsgYSsrKQoJCQlhZGRDb2xvcig1LGEsYSk7CgkJCQoJCQkKICAgICAgICBmb3IgKGEgPSAxOyBhIDwgY29sb3JMZXZlbHMubGVuZ3RoOyBhKyspCgkJCWFkZENvbG9yKGEsYSwwKTsKICAgICAgICBmb3IgKGEgPSAxOyBhIDwgY29sb3JMZXZlbHMubGVuZ3RoIC0gMTsgYSsrKQoJCQlhZGRDb2xvcig1LDUsYSk7CgkJCQogICAgICAgIGZvciAoYSA9IDE7IGEgPCBjb2xvckxldmVscy5sZW5ndGg7IGErKykKCQkJYWRkQ29sb3IoMCxhLGEpOwogICAgICAgIGZvciAoYSA9IDE7IGEgPCBjb2xvckxldmVscy5sZW5ndGggLSAxOyBhKyspCgkJCWFkZENvbG9yKGEsNSw1KTsKCiAgICAgICAgZm9yIChhID0gMTsgYSA8IGNvbG9yTGV2ZWxzLmxlbmd0aDsgYSsrKQoJCQlhZGRDb2xvcihhLDAsYSk7CQkJCiAgICAgICAgZm9yIChhID0gMTsgYSA8IGNvbG9yTGV2ZWxzLmxlbmd0aCAtIDE7IGErKykKCQkJYWRkQ29sb3IoNSxhLDUpOwoJCQkKICAgICAgIAlyZXR1cm4gY29sb3JBcnJheTsKICAgICB9CiAgICAgZnVuY3Rpb24gZ2V0Q29sb3JUYWJsZSgpIHsKICAgICAgICAgdmFyIGNvbG9ycyA9IGNvbG9yQXJyYXk7CiAgICAgIAkgdmFyIHRhYmxlQ29kZSA9ICcnOwogICAgICAgICB0YWJsZUNvZGUgKz0gJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMSI+JzsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGlmIChpICUgcGVybGluZSA9PSAwKSB7IHRhYmxlQ29kZSArPSAnPHRyPic7IH0KICAgICAgICAgICAgICB0YWJsZUNvZGUgKz0gJzx0ZCBiZ2NvbG9yPSIjMDAwMDAwIj48YSBzdHlsZT0ib3V0bGluZTogMXB4IHNvbGlkICMwMDAwMDA7IGNvbG9yOiAnIAogICAgICAgICAgICAgIAkgICsgY29sb3JzW2ldICsgJzsgYmFja2dyb3VuZDogJyArIGNvbG9yc1tpXSArICc7Zm9udC1zaXplOiAxMHB4OyIgdGl0bGU9IicgCiAgICAgICAgICAgICAgCSAgKyBjb2xvcnNbaV0gKyAnIiBocmVmPSJqYXZhc2NyaXB0OnNldENvbG9yKFwnJyArIGNvbG9yc1tpXSArICdcJyk7Ij4mbmJzcDsmbmJzcDsmbmJzcDs8L2E+PC90ZD4nOwogICAgICAgICAgICAgIGlmIChpICUgcGVybGluZSA9PSBwZXJsaW5lIC0gMSkgeyB0YWJsZUNvZGUgKz0gJzwvdHI+JzsgfQogICAgICAgICB9CiAgICAgICAgIGlmIChpICUgcGVybGluZSAhPSAwKSB7IHRhYmxlQ29kZSArPSAnPC90cj4nOyB9CiAgICAgICAgIHRhYmxlQ29kZSArPSAnPC90YWJsZT4nOwogICAgICAJIHJldHVybiB0YWJsZUNvZGU7CiAgICAgfQogICAgIGZ1bmN0aW9uIHJlbGF0ZUNvbG9yKGlkLCBjb2xvcikgewogICAgIAl2YXIgbGluayA9IGdldE9iaihpZCk7CiAgICAgCWlmIChjb2xvciA9PSAnJykgewoJICAgICAJbGluay5zdHlsZS5iYWNrZ3JvdW5kID0gbm9jb2xvcjsKCSAgICAgCWxpbmsuc3R5bGUuY29sb3IgPSBub2NvbG9yOwoJICAgICAJY29sb3IgPSBub2NvbG9yOwogICAgIAl9IGVsc2UgewoJICAgICAJbGluay5zdHlsZS5iYWNrZ3JvdW5kID0gY29sb3I7CgkgICAgIAlsaW5rLnN0eWxlLmNvbG9yID0gY29sb3I7CgkgICAgfQoJICAgIGV2YWwoZ2V0T2JqKGlkICsgJ2ZpZWxkJykudGl0bGUpOwogICAgIH0KICAgICBmdW5jdGlvbiBnZXRBYnNvbHV0ZU9mZnNldFRvcChvYmopIHsKICAgICAJdmFyIHRvcCA9IG9iai5vZmZzZXRUb3A7CiAgICAgCXZhciBwYXJlbnQgPSBvYmoub2Zmc2V0UGFyZW50OwogICAgIAl3aGlsZSAocGFyZW50ICE9IGRvY3VtZW50LmJvZHkpIHsKICAgICAJCXRvcCArPSBwYXJlbnQub2Zmc2V0VG9wOwogICAgIAkJcGFyZW50ID0gcGFyZW50Lm9mZnNldFBhcmVudDsKICAgICAJfQogICAgIAlyZXR1cm4gdG9wOwogICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBnZXRBYnNvbHV0ZU9mZnNldExlZnQob2JqKSB7CiAgICAgCXZhciBsZWZ0ID0gb2JqLm9mZnNldExlZnQ7CiAgICAgCXZhciBwYXJlbnQgPSBvYmoub2Zmc2V0UGFyZW50OwogICAgIAl3aGlsZSAocGFyZW50ICE9IGRvY3VtZW50LmJvZHkpIHsKICAgICAJCWxlZnQgKz0gcGFyZW50Lm9mZnNldExlZnQ7CiAgICAgCQlwYXJlbnQgPSBwYXJlbnQub2Zmc2V0UGFyZW50OwogICAgIAl9CiAgICAgCXJldHVybiBsZWZ0OwogICAgIH0KCjwhLS0gZmxvb2JsZSBDb2xvciBQaWNrZXIgaGVhZGVyIGVuZCAtLT4KCiAgZnVuY3Rpb24gU2hvd3BpYyhuYW1lKXsKICAgIHZhciBkaXNwbGF5c3R5bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUCIrbmFtZSkuc3R5bGUuZGlzcGxheTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJQIituYW1lKS5zdHlsZS50b3AgPSAgeU1vdXNlUG9zLTUwKyJweCI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUCIrbmFtZSkuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgfQogIGZ1bmN0aW9uIEhpZGVwaWMobmFtZSl7CiAgICB2YXIgZGlzcGxheXN0eWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlAiK25hbWUpLnN0eWxlLmRpc3BsYXk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUCIrbmFtZSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICB9Cjwvc2NyaXB0Pgp7L2xpdGVyYWx9');
expand_3537250845($outputDir, 'templates/Header.tpl', 'PG1ldGEgbmFtZT0iSUNCTSIgY29udGVudD0ieyRsYXRpdHVkZX0seyRsb25naXR1ZGV9Ij4KPG1ldGEgbmFtZT0iREMudGl0bGUiIGNvbnRlbnQ9InskaXRlbVRpdGxlfG1hcmt1cDonc3RyaXAnfSI+CjxtZXRhIG5hbWU9Imdlby5wb3NpdGlvbiIgY29udGVudD0ieyRsYXRpdHVkZX07eyRsb25naXR1ZGV9Ij4=');
expand_3537250845($outputDir, 'templates/MapAdminTab.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjUzICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQp7KgogKiBUaGlzIHdpbGwgZGlzcGxheSB0aGUgdGFicyBhc3N1bWluZyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLgogKn0KCjxkaXYgY2xhc3M9ImdiVGFiQmFyIj4KICB7aWYgKCRtb2RlID09ICdHZW5lcmFsJyl9CiAgICA8c3BhbiBjbGFzcz0iZ2lTZWxlY3RlZCBvIj48c3Bhbj4KICAgICAge2ctPnRleHQgdGV4dD0iR2VuZXJhbCBTZXR0aW5ncyJ9CiAgICA8L3NwYW4+PC9zcGFuPgogIHtlbHNlfQogICAgPHNwYW4gY2xhc3M9Im8iPjxzcGFuPgogICAgICA8YSBhY2Nlc3NrZXk9ImciIGhyZWY9IntnLT51cmwgYXJnMT0idmlldz1jb3JlLlNpdGVBZG1pbiIgYXJnMj0ic3ViVmlldz1tYXAuTWFwU2l0ZUFkbWluIn0iPntnLT50ZXh0IHRleHQ9Ijx1Pkc8L3U+ZW5lcmFsIFNldHRpbmdzIn08L2E+CiAgICA8L3NwYW4+PC9zcGFuPgogIHsvaWZ9CiAge2lmIGlzc2V0KCRmb3JtLkdvb2dsZU92ZXJ2aWV3RmVhdHVyZSkgYW5kICRmb3JtLkdvb2dsZU92ZXJ2aWV3RmVhdHVyZX0KICAgIHtpZiAoJG1vZGUgPT0gJ0dvb2dsZU92ZXJ2aWV3Jyl9CiAgICAgIDxzcGFuIGNsYXNzPSJnaVNlbGVjdGVkIG8iPjxzcGFuPgogICAgICAgIHtnLT50ZXh0IHRleHQ9Ikdvb2dsZSBPdmVydmlldyBTZXR0aW5ncyJ9CiAgICAgIDwvc3Bhbj48L3NwYW4+CiAgICB7ZWxzZX0KICAgICAgPHNwYW4gY2xhc3M9Im8iPjxzcGFuPgogICAgICAgIDxhIGhyZWY9IntnLT51cmwgYXJnMT0idmlldz1jb3JlLlNpdGVBZG1pbiIgYXJnMj0ic3ViVmlldz1tYXAuTWFwR29vZ2xlT3ZlcnZpZXdBZG1pbiJ9Ij57Zy0+dGV4dCB0ZXh0PSJHb29nbGUgT3ZlcnZpZXcgU2V0dGluZ3MifTwvYT4KICAgICAgPC9zcGFuPjwvc3Bhbj4KICAgIHsvaWZ9CiAgey9pZn0KICB7aWYgaXNzZXQoJGZvcm0uR1pvb21GZWF0dXJlKSBhbmQgJGZvcm0uR1pvb21GZWF0dXJlfQogICAge2lmICgkbW9kZSA9PSAnR1pvb20nKX0KICAgICAgPHNwYW4gY2xhc3M9ImdpU2VsZWN0ZWQgbyI+PHNwYW4+CiAgICAgICAge2ctPnRleHQgdGV4dD0iR1pvb20gU2V0dGluZ3MifQogICAgICA8L3NwYW4+PC9zcGFuPgogICAge2Vsc2V9CiAgICAgIDxzcGFuIGNsYXNzPSJvIj48c3Bhbj4KICAgICAgICA8YSBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9Y29yZS5TaXRlQWRtaW4iIGFyZzI9InN1YlZpZXc9bWFwLk1hcEdab29tQWRtaW4ifSI+e2ctPnRleHQgdGV4dD0iR1pvb20gU2V0dGluZ3MifTwvYT4KICAgICAgPC9zcGFuPjwvc3Bhbj4KICAgIHsvaWZ9CiAgey9pZn0KICB7aWYgaXNzZXQoJGZvcm0uVGhlbWVGZWF0dXJlKSBhbmQgJGZvcm0uVGhlbWVGZWF0dXJlfQogICAge2lmICgkbW9kZSA9PSAnVGhlbWUnKX0KICAgICAgPHNwYW4gY2xhc3M9ImdpU2VsZWN0ZWQgbyI+PHNwYW4+CiAgICAgICAge2ctPnRleHQgdGV4dD0iVGhlbWUgU2V0dGluZ3MifQogICAgICA8L3NwYW4+PC9zcGFuPgogICAge2Vsc2V9CiAgICAgIDxzcGFuIGNsYXNzPSJvIj48c3Bhbj4KICAgICAgICA8YSBhY2Nlc3NrZXk9InQiIGhyZWY9IntnLT51cmwgYXJnMT0idmlldz1jb3JlLlNpdGVBZG1pbiIgYXJnMj0ic3ViVmlldz1tYXAuTWFwVGhlbWVBZG1pbiJ9Ij57Zy0+dGV4dCB0ZXh0PSI8dT5UPC91PmhlbWUgU2V0dGluZ3MifTwvYT4KICAgICAgPC9zcGFuPjwvc3Bhbj4KICAgIHsvaWZ9CiAgey9pZn0KICB7aWYgaXNzZXQoJGZvcm0uTWFya2VyRmVhdHVyZSkgYW5kICRmb3JtLk1hcmtlckZlYXR1cmV9CiAgICB7aWYgKCRtb2RlID09ICdNYXJrZXJzJyl9CiAgICAgIDxzcGFuIGNsYXNzPSJnaVNlbGVjdGVkIG8iPjxzcGFuPgogICAgICAgIHtnLT50ZXh0IHRleHQ9Ik1hcmtlcnMgU2V0dGluZ3MifQogICAgICA8L3NwYW4+PC9zcGFuPgogICAge2Vsc2V9CiAgICAgIDxzcGFuIGNsYXNzPSJvIj48c3Bhbj4KICAgICAgICA8YSBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9Y29yZS5TaXRlQWRtaW4iIGFyZzI9InN1YlZpZXc9bWFwLk1hcE1hcmtlcnNBZG1pbiJ9Ij57Zy0+dGV4dCB0ZXh0PSJNYXJrZXJzIFNldHRpbmdzIn08L2E+CiAgICAgIDwvc3Bhbj48L3NwYW4+CiAgICB7L2lmfQogIHsvaWZ9CiAge2lmIGlzc2V0KCRmb3JtLkxlZ2VuZEZlYXR1cmUpIGFuZCAkZm9ybS5MZWdlbmRGZWF0dXJlfQogICAge2lmICgkbW9kZSA9PSAnTGVnZW5kJyl9CiAgICAgIDxzcGFuIGNsYXNzPSJnaVNlbGVjdGVkIG8iPjxzcGFuPgogICAgICAgIHtnLT50ZXh0IHRleHQ9IkxlZ2VuZCBNYW5hZ2VtZW50In0KICAgICAgPC9zcGFuPjwvc3Bhbj4KICAgIHtlbHNlfQogICAgICA8c3BhbiBjbGFzcz0ibyI+PHNwYW4+CiAgICAgICAgPGEgYWNjZXNza2V5PSJsIiBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9Y29yZS5TaXRlQWRtaW4iIGFyZzI9InN1YlZpZXc9bWFwLk1hcExlZ2VuZEFkbWluIn0iPntnLT50ZXh0IHRleHQ9Ijx1Pkw8L3U+ZWdlbmQgTWFuYWdlbWVudCJ9PC9hPgogICAgICA8L3NwYW4+PC9zcGFuPgogICAgey9pZn0KICB7L2lmfQogIHtpZiBpc3NldCgkZm9ybS5GaWx0ZXJGZWF0dXJlKSBhbmQgJGZvcm0uRmlsdGVyRmVhdHVyZX0KICAgIHtpZiAoJG1vZGUgPT0gJ0ZpbHRlcicpfQogICAgICA8c3BhbiBjbGFzcz0iZ2lTZWxlY3RlZCBvIj48c3Bhbj4KICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJGaWx0ZXIgTWFuYWdlbWVudCJ9CiAgICAgIDwvc3Bhbj48L3NwYW4+CiAgICB7ZWxzZX0KICAgICAgPHNwYW4gY2xhc3M9Im8iPjxzcGFuPgogICAgICAgIDxhIGFjY2Vzc2tleT0iZiIgaHJlZj0ie2ctPnVybCBhcmcxPSJ2aWV3PWNvcmUuU2l0ZUFkbWluIiBhcmcyPSJzdWJWaWV3PW1hcC5NYXBGaWx0ZXJBZG1pbiJ9Ij57Zy0+dGV4dCB0ZXh0PSI8dT5GPC91PmlsdGVyIE1hbmFnZW1lbnQifTwvYT4KICAgICAgPC9zcGFuPjwvc3Bhbj4KICAgIHsvaWZ9CiAgey9pZn0KICB7aWYgaXNzZXQoJGZvcm0uR3JvdXBGZWF0dXJlKSBhbmQgJGZvcm0uR3JvdXBGZWF0dXJlfQogICAge2lmICgkbW9kZSA9PSAnR3JvdXAnKX0KICAgICAgPHNwYW4gY2xhc3M9ImdpU2VsZWN0ZWQgbyI+PHNwYW4+CiAgICAgICAge2ctPnRleHQgdGV4dD0iR3JvdXAgTWFuYWdlbWVudCJ9CiAgICAgIDwvc3Bhbj48L3NwYW4+CiAgICB7ZWxzZX0KICAgICAgPHNwYW4gY2xhc3M9Im8iPjxzcGFuPgogICAgICAgIDxhIGhyZWY9IntnLT51cmwgYXJnMT0idmlldz1jb3JlLlNpdGVBZG1pbiIgYXJnMj0ic3ViVmlldz1tYXAuTWFwR3JvdXBBZG1pbiJ9Ij57Zy0+dGV4dCB0ZXh0PSJHcm91cCBNYW5hZ2VtZW50In08L2E+CiAgICAgIDwvc3Bhbj48L3NwYW4+CiAgICB7L2lmfQogIHsvaWZ9CiAge2lmIGlzc2V0KCRmb3JtLlJvdXRlRmVhdHVyZSkgYW5kICRmb3JtLlJvdXRlRmVhdHVyZX0KICAgIHtpZiAoJG1vZGUgPT0gJ1JvdXRlcycpfQogICAgICA8c3BhbiBjbGFzcz0iZ2lTZWxlY3RlZCBvIj48c3Bhbj4KICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJSb3V0ZXMgTWFuYWdlbWVudCJ9CiAgICAgIDwvc3Bhbj48L3NwYW4+CiAgICB7ZWxzZX0KICAgICAgPHNwYW4gY2xhc3M9Im8iPjxzcGFuPgogICAgICAgIDxhIGFjY2Vzc2tleT0iciIgaHJlZj0ie2ctPnVybCBhcmcxPSJ2aWV3PWNvcmUuU2l0ZUFkbWluIiBhcmcyPSJzdWJWaWV3PW1hcC5NYXBSb3V0ZUFkbWluIn0iPntnLT50ZXh0IHRleHQ9Ijx1PlI8L3U+b3V0ZXMgTWFuYWdlbWVudCJ9PC9hPgogICAgICA8L3NwYW4+PC9zcGFuPgogICAgey9pZn0KICB7L2lmfQo8L2Rpdj4=');
expand_3537250845($outputDir, 'templates/MapFilterAdmin.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxoMj57Zy0+dGV4dCB0ZXh0PSJNYXAgTW9kdWxlIFNldHRpbmdzIn0gICA8YSBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MHB4O2JvcmRlci10b3A6MnB4IHNvbGlkICNjZWNlY2U7IGJvcmRlci1sZWZ0OjJweCBzb2xpZCAjY2VjZWNlOyBib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNGE0YTRhO2JvcmRlci1yaWdodDoycHggc29saWQgIzRhNGE0YTtwYWRkaW5nOi4yZW07cGFkZGluZy1yaWdodDoxZW07cGFkZGluZy1sZWZ0OjFlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzAwMDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7IiBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9bWFwLlNob3dNYXAifSI+e2ctPnRleHQgdGV4dD0iU2hvdyBHb29nbGUgTWFwIn08L2E+PC9oMj4KPC9kaXY+Cgo8IS0tCkJlZ2lubmluZyBvZiBlcnJvci9zdWNjZXNzIGRpc3BsYXlpbmcKLS0+CntpZiBpc3NldCgkc3RhdHVzLnNhdmVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lTdWNjZXNzIj57Zy0+dGV4dCB0ZXh0PSJTZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQhIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CntpZiAhZW1wdHkoJGZvcm0uZXJyb3IpfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJUaGVyZSB3YXMgYSBwcm9ibGVtIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0LiJ9PC9oMj4KPC9kaXY+CnsvaWZ9CntpZiBpc3NldCgkc3RhdHVzLmZpbHRlcnNhdmVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lTdWNjZXNzIj57Zy0+dGV4dCB0ZXh0PSJGaWx0ZXIgc3VjY2Vzc2Z1bGx5IHNhdmVkIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CntpZiBpc3NldCgkc3RhdHVzLmZpbHRlcmRlbGV0ZWQpfQogICAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgICAgICAgPGgyIGNsYXNzPSJnaVN1Y2Nlc3MiPntnLT50ZXh0IHRleHQ9IkZpbHRlciBzdWNjZXNzZnVsbHkgZGVsZXRlZCJ9PC9oMj4KICAgIDwvZGl2Pgp7L2lmfQoKPCEtLQpFbmQgb2YgZXJyb3Ivc3VjY2VzcyBkaXNwbGF5aW5nCi0tPgoKe2luY2x1ZGUgZmlsZT0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcEFkbWluVGFiLnRwbCIgbW9kZT0iRmlsdGVyIn0KCjwhLS0gSGVscCBEaXYgLS0+CjxkaXYgaWQ9ImhlbHBkaXYiIHN0eWxlPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MnB4IHNvbGlkIGJsYWNrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjM1MHB4O3RvcDoyMDBweDt3aWR0aDoyNTBweDtoZWlnaHQ6MTUwcHg7Ij4KICAgIDxkaXYgaWQ9ImhlbHBoZWFkIiBzdHlsZT0id2lkdGg6MjUwcHg7aGVpZ2h0OjI1cHg7YmFja2dyb3VuZDojMTUwMDk1O2NvbG9yOndoaXRlO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGJsYWNrOyI+PGltZyBhbHQ9Im5vbmUiIHtpZiAhJGZvcm0uSUV9c3R5bGU9ImZsb2F0OmxlZnQ7IiBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIntlbHNlfXNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJyBzdHlsZT0nZmxvYXQ6bGVmdDtmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsney9pZn0vPjx0YWJsZSBzdHlsZT0iaGVpZ2h0OjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyI+PHRyPjx0ZCBzdHlsZT0id2lkdGg6MjMwcHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyI+PGI+SGVscCBXaW5kb3c8L2I+PC90ZD48dGQgc3R5bGU9IndpZHRoOjI1cHg7Y3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJqYXZhc2NyaXB0OmhpZGVoZWxwKCkiPjxjZW50ZXI+PGI+WDwvYj48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KICAgIDxkaXYgaWQ9ImhlbHB0ZXh0IiBzdHlsZT0id2lkdGg6MjUwcHg7aGVpZ2h0OjEyM3B4O2NvbG9yOmJsYWNrO2ZvbnQtc2l6ZToxMnB4O2JhY2tncm91bmQ6I0IyRTRGNjstbW96LW9wYWNpdHk6Ljc1O2ZpbHRlcjphbHBoYShvcGFjaXR5PTc1KTtvcGFjaXR5Oi43NTtvdmVyZmxvdzphdXRvO2NsZWFyOmJvdGg7Ij4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBFbmQgb2YgSGVscCBEaXYgLS0+CgoKe2lmICRmb3JtLm1vZGUgZXEgJ0FkZEZpbHRlcid9CjxkaXYgY2xhc3M9ImdiQmxvY2siPgogIDxoMz4ge2ctPnRleHQgdGV4dD0iRmlsdGVycyBNYW5hZ2VtZW50In0gPC9oMz4KICB7aWYgaXNzZXQoJGZvcm0uT2xkRmlsdGVyKX0KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlZGl0IiB2YWx1ZT0ieyRmb3JtLk9sZEZpbHRlcn0iLz4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvbGRpZCIgdmFsdWU9InskZm9ybS5FZGl0RmlsdGVyLjB9Ii8+CiAgey9pZn0KICA8cCBjbGFzcz0iZ2lEZXNjcmlwdGlvbiI+CiAgICB7Zy0+dGV4dCB0ZXh0PSJUaGlzIHNlY3Rpb24gYWxsb3dzIHlvdSB0byBtYW5hZ2UgRmlsdGVycyJ9CiAgPC9wPgogICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgPHRyPgogICAgIDx0aD48bGFiZWwgZm9yPSJGaWx0ZXJOYW1lIj57Zy0+dGV4dCB0ZXh0PSJGaWx0ZXIgPHU+TjwvdT5hbWUifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfRklfQWRkTmFtZSwyMDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICA8dGQ+CiAgICAgICAgPGlucHV0IGFjY2Vzc2tleT0ibiIgdHlwZT0idGV4dCIgbmFtZT0iRmlsdGVyTmFtZSIge2lmIGlzc2V0KCRmb3JtLk9sZEZpbHRlcil9dmFsdWU9InskZm9ybS5FZGl0RmlsdGVyLjF9InsvaWZ9Lz4gKgogICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5maWx0ZXJuYW1lKX0KICAgICAgICA8c3BhbiBjbGFzcz0iZ2lFcnJvciI+CiAgICAgICAge2ctPnRleHQgdGV4dD0iUGxlYXNlIGVudGVyIGEgZmlsdGVyIG5hbWUifQogICAgICAgIDwvc3Bhbj4KICAgICAgICB7L2lmfQogICAgIDwvdGQ+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iRmlsdGVyWm9vbSI+e2ctPnRleHQgdGV4dD0iQmFzZSA8dT5aPC91Pm9vbSJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9GSV9BZGRab29tLDIwMCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgIDx0ZD4KICAgICAgICA8aW5wdXQgYWNjZXNza2V5PSJ6IiBzaXplPSIzIiB0eXBlPSJ0ZXh0IiBuYW1lPSJGaWx0ZXJab29tIiAgIHtpZiBpc3NldCgkZm9ybS5PbGRGaWx0ZXIpfXZhbHVlPSJ7JGZvcm0uRWRpdEZpbHRlci4yfSJ7L2lmfS8+CiAgICAgICAge2lmIGlzc2V0KCRmb3JtLmVycm9yLmZpbHRlcnpvb20pfQogICAgICAgIDxzcGFuIGNsYXNzPSJnaUVycm9yIj4KICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJQbGVhc2UgZW50ZXIgYSB6b29tIHZhbHVlIGJldHdlZW4gMCBhbmQgMTkifQogICAgICAgIDwvc3Bhbj4KICAgICAgICB7L2lmfQogICAgIDwvdGQ+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iRmlsdGVyQ2VudGVyIj57Zy0+dGV4dCB0ZXh0PSJCYXNlIENlbnRlciJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9GSV9BZGRHUFMsMjAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgPHRkPgogICAgICAgIDxpbnB1dCBzaXplPSI0MCIgdHlwZT0idGV4dCIgbmFtZT0iRmlsdGVyQ2VudGVyIiAgIHtpZiBpc3NldCgkZm9ybS5PbGRGaWx0ZXIpfXZhbHVlPSJ7JGZvcm0uRWRpdEZpbHRlci4zfSJ7L2lmfS8+ICoKICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNlbnRlciIgdmFsdWU9IntpZiBpc3NldCgkZm9ybS5PbGRGaWx0ZXIpfXskZm9ybS5FZGl0RmlsdGVyLjN9ey9pZn0iLz4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Inpvb20iIHZhbHVlPSJ7aWYgaXNzZXQoJGZvcm0uT2xkRmlsdGVyKX17JGZvcm0uRWRpdEZpbHRlci4yfXsvaWZ9Ii8+CiAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtnZXR2aWFtYXBdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJHZXQgdmlhIGEgTWFwIn0iLz4KICAgICAgICB7aWYgaXNzZXQoJGZvcm0uZXJyb3IuZmlsdGVyY2VudGVyKX0KICAgICAgICA8c3BhbiBjbGFzcz0iZ2lFcnJvciI+CiAgICAgICAge2ctPnRleHQgdGV4dD0iQmFkIGNvb3JkaW5hdGVzLCBwbGVhc2UgdmVyaWZ5In0KICAgICAgICA8L3NwYW4+CiAgICAgICAgey9pZn0KICAgICA8L3RkPgogICA8L3RyPgogIDwvdGFibGU+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJnYkJsb2NrIGdjQmFja2dyb3VuZDEiPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bc2F2ZV0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IlNhdmUgRmlsdGVyIn0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2NhbmNlbF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkNhbmNlbCIgaGludD0iRGlzY2FyZCBjaGFuZ2VzIn0iLz4KPC9kaXY+Cgp7ZWxzZX0KCjxkaXYgY2xhc3M9ImdiQmxvY2siPgogIDxoMz4ge2ctPnRleHQgdGV4dD0iRmlsdGVycyBNYW5hZ2VtZW50In0gPC9oMz4KCiAgPHAgY2xhc3M9ImdpRGVzY3JpcHRpb24iPgogICAge2ctPnRleHQgdGV4dD0iVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIEZpbHRlcnMifQogIDwvcD4KICAgPHRhYmxlIGNsYXNzPSJnYkRhdGFUYWJsZSI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iU2hvd0ZpbHRlcnMiPntnLT50ZXh0IHRleHQ9IkZpbHRlciBCbG9jayBQb3NpdGlvbiJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9GSV9CbG9ja1BvcywyNTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICA8dGQ+CiAgICAgICAgICA8c2VsZWN0IG5hbWU9IlNob3dGaWx0ZXJzIj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPntnLT50ZXh0IHRleHQ9IkhpZGUiIGhpbnQ9IkRvbid0IGRpc3BsYXkifTwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIge2lmICRmb3JtLlNob3dGaWx0ZXJzIGVxIDF9c2VsZWN0ZWR7L2lmfT57Zy0+dGV4dCB0ZXh0PSJMZWZ0IiBoaW50PSJPcHBvc2l0ZSBvZiByaWdodCJ9PC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyIiB7aWYgJGZvcm0uU2hvd0ZpbHRlcnMgZXEgMn1zZWxlY3RlZHsvaWZ9PntnLT50ZXh0IHRleHQ9IlJpZ2h0IiBoaW50PSJPcHBvc2l0ZSBvZiBsZWZ0In08L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjMiIHtpZiAkZm9ybS5TaG93RmlsdGVycyBlcSAzfXNlbGVjdGVkey9pZn0+e2ctPnRleHQgdGV4dD0iVG9wIiBoaW50PSJPcHBvc2l0ZSBvZiBib3R0b20ifTwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNCIge2lmICRmb3JtLlNob3dGaWx0ZXJzIGVxIDR9c2VsZWN0ZWR7L2lmfT57Zy0+dGV4dCB0ZXh0PSJCb3R0b20iIGhpbnQ9Ik9wcG9zaXRlIG9mIHRvcCJ9PC9vcHRpb24+CiAgICAgICAgPC90ZD4KICAgPC90cj4KICAgPHRyPgogICAgIDx0aD48bGFiZWwgZm9yPSJGaWx0ZXJMaXN0Ij57Zy0+dGV4dCB0ZXh0PSJNYW51YWwgRmlsdGVyIExpc3QifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfRklfTWFudWFsRmlsdGVyLDI1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5maWx0ZXJsaXN0KSBhbmQgIWVtcHR5KCRmb3JtLmZpbHRlcmxpc3QpfQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtmaWx0ZXJdIn0iPgogICAgICAgICAgICB7Zm9yZWFjaCBpdGVtPW9wdGlvbiBmcm9tPSRmb3JtLmZpbHRlcmxpc3R9CiAgICAgICAgICAgICAgPG9wdGlvbiBsYWJlbD17JG9wdGlvbi5uYW1lfSB2YWx1ZT0ieyRvcHRpb24uaWR9Ij57JG9wdGlvbi5uYW1lfTwvb3B0aW9uPgogICAgICAgICAgICB7L2ZvcmVhY2h9CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtkZWxldGVdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJEZWxldGUifSIvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtlZGl0XSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iRWRpdCJ9Ii8+CiAgICAgICAgICB7ZWxzZX0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdpRXJyb3IiPntnLT50ZXh0IHRleHQ9IlRoZXJlIGFyZSBubyBmaWx0ZXJzIGRlZmluZWQsIGNsaWNrIGFkZCB0byBjcmVhdGUgb25lIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgey9pZn0KICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bYWRkXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iQWRkIiBoaW50PSJDcmVhdGUgbmV3In0iLz4KICAgICAgICA8L3RkPgogICA8L3RyPgogICA8dHI+CiAgICAgPHRoPjxsYWJlbCBmb3I9IlNob3dBbGJ1bUZpbHRlcnMiPntnLT50ZXh0IHRleHQ9IkNyZWF0ZSA8dT5BPC91PmxidW0gRmlsdGVycyJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9GSV9BbGJ1bUZpbHRlciwyNTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICA8dGQ+CiAgICAgICAgICA8aW5wdXQgYWNjZXNza2V5PSJhIiB0eXBlPSJjaGVja2JveCIgbmFtZSA9InNob3dhbGJ1bWZpbHRlcnMiIHZhbHVlPSIxIntpZiAkZm9ybS5TaG93QWxidW1GaWx0ZXJzfWNoZWNrZWR7L2lmfS8+CiAgICAgICAgPC90ZD4KICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRoPjxsYWJlbCBmb3I9IkxldmVsRmlsdGVyQWxsIj57Zy0+dGV4dCB0ZXh0PSJTZXQgQWxidW0gRmlsdGVyIERlcHRoIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX0ZJX0FsYnVtRmlsdGVyRGVwdGgsMjUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgIDx0ZD4KICAgICAgICAgICA8aW5wdXQgdHlwZT0iVGV4dCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW0xldmVsRmlsdGVyQWxsXSJ9IiB2YWx1ZT0ieyRmb3JtLkxldmVsRmlsdGVyQWxsfSIvPgogICAgICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRoPjxsYWJlbCBmb3I9IkxldmVsRmlsdGVyUm9vdCI+e2ctPnRleHQgdGV4dD0iUm9vdCBBbGJ1bSBzaG93cyBvbmx5IDEgbGV2ZWwifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfRklfQWxidW1GaWx0ZXJEZXB0aFJvb3QsMjUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgIDx0ZD4KICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtMZXZlbEZpbHRlclJvb3RdIn0iIHZhbHVlPSIxIiB7aWYgJGZvcm0uTGV2ZWxGaWx0ZXJSb290fWNoZWNrZWR7L2lmfS8+CiAgICAgICAgIDwvdGQ+CiAgICA8L3RyPgogPC90YWJsZT4KPC9kaXY+CjxkaXYgY2xhc3M9ImdiQmxvY2sgZ2NCYWNrZ3JvdW5kMSI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtzYXZlc2V0dGluZ3NdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJTYXZlIFNldHRpbmdzIn0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2NhbmNlbF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkNhbmNlbCIgaGludD0iRGlzY2FyZCBjaGFuZ2VzIn0iLz4KPC9kaXY+CnsvaWZ9');
expand_3537250845($outputDir, 'templates/MapGZoomAdmin.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxoMj57Zy0+dGV4dCB0ZXh0PSJNYXAgTW9kdWxlIFNldHRpbmdzIn0gICA8YSBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MHB4O2JvcmRlci10b3A6MnB4IHNvbGlkICNjZWNlY2U7IGJvcmRlci1sZWZ0OjJweCBzb2xpZCAjY2VjZWNlOyBib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNGE0YTRhO2JvcmRlci1yaWdodDoycHggc29saWQgIzRhNGE0YTtwYWRkaW5nOi4yZW07cGFkZGluZy1yaWdodDoxZW07cGFkZGluZy1sZWZ0OjFlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzAwMDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7IiBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9bWFwLlNob3dNYXAifSI+e2ctPnRleHQgdGV4dD0iU2hvdyBHb29nbGUgTWFwIn08L2E+PC9oMj4KPC9kaXY+Cgo8IS0tCkJlZ2lubmluZyBvZiBlcnJvci9zdWNjZXNzIGRpc3BsYXlpbmcKLS0+CntpZiBpc3NldCgkc3RhdHVzLnNhdmVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lTdWNjZXNzIj57Zy0+dGV4dCB0ZXh0PSJTZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQhIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CjwhLS0KRW5kIG9mIGVycm9yL3N1Y2Nlc3MgZGlzcGxheWluZwotLT4KCntpbmNsdWRlIGZpbGU9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBBZG1pblRhYi50cGwiIG1vZGU9Ikdab29tIn0KCjwhLS0gSGVscCBEaXYgLS0+CjxkaXYgaWQ9ImhlbHBkaXYiIHN0eWxlPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MnB4IHNvbGlkIGJsYWNrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjM1MHB4O3RvcDoyMDBweDt3aWR0aDoyNTBweDtoZWlnaHQ6MTUwcHg7Ij4KICA8ZGl2IGlkPSJoZWxwaGVhZCIgc3R5bGU9IndpZHRoOjI1MHB4O2hlaWdodDoyNXB4O2JhY2tncm91bmQ6IzE1MDA5NTtjb2xvcjp3aGl0ZTtib3JkZXItYm90dG9tOjJweCBzb2xpZCBibGFjazsiPjxpbWcgYWx0PSJub25lIiB7aWYgISRmb3JtLklFfXN0eWxlPSJmbG9hdDpsZWZ0OyIgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyJ7ZWxzZX1zcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZicgc3R5bGU9J2Zsb2F0OmxlZnQ7ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7J3svaWZ9Lz48dGFibGUgc3R5bGU9ImhlaWdodDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPjx0cj48dGQgc3R5bGU9IndpZHRoOjIzMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsiPjxiPkhlbHAgV2luZG93PC9iPjwvdGQ+PHRkIHN0eWxlPSJ3aWR0aDoyNXB4O2N1cnNvcjpwb2ludGVyOyIgb25jbGljaz0iamF2YXNjcmlwdDpoaWRlaGVscCgpIj48Y2VudGVyPjxiPlg8L2I+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CiAgPGRpdiBpZCA9ImhlbHB0ZXh0IiBzdHlsZT0id2lkdGg6MjUwcHg7aGVpZ2h0OjEyM3B4O2NvbG9yOmJsYWNrO2ZvbnQtc2l6ZToxMnB4O2JhY2tncm91bmQ6I0IyRTRGNjstbW96LW9wYWNpdHk6Ljc1O2ZpbHRlcjphbHBoYShvcGFjaXR5PTc1KTtvcGFjaXR5Oi43NTtvdmVyZmxvdzphdXRvO2NsZWFyOmJvdGg7Ij4KICA8L2Rpdj4KPC9kaXY+CjwhLS0gRW5kIG9mIEhlbHAgRGl2IC0tPgoKPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgPGgzPiB7Zy0+dGV4dCB0ZXh0PSJHWm9vbSBFeHRlbnNpb24ifSA8L2gzPgoKICA8cCBjbGFzcz0iZ2lEZXNjcmlwdGlvbiI+CiAgICB7Zy0+dGV4dCB0ZXh0PSJUaGlzIHNlY3Rpb24gYWxsb3dzIHlvdSB0byBtYW5hZ2UgdGhlIEdab29tIEV4dGVuc2lvbiJ9CiAgPC9wPgogICAgICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJHWm9vbSI+e2ctPnRleHQgdGV4dD0iRW5hPHU+YjwvdT5sZSJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9HWl9FbmFibGUsNDAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCBhY2Nlc3NrZXk9ImIiIHR5cGU9ImNoZWNrYm94IiBpZD0iR1pvb20iCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW0dab29tXSJ9IgogICAgICAgICAgICAgICAgICAgIHtpZiAkZm9ybS5HWm9vbX1jaGVja2VkPSJjaGVja2VkInsvaWZ9CiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjEiLz4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9IkdaUG9zIj57Zy0+dGV4dCB0ZXh0PSJXaW5kb3cgUG9zaXRpb24ifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfR1pfUG9zaXRpb24sNDAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9IkdaUG9zIiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bR1pQb3NdIn0iPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZSA9IjAiIHtpZiAkZm9ybS5HWlBvcyBlcSAiMCJ9c2VsZWN0ZWR7L2lmfS8+e2ctPnRleHQgdGV4dD0iVG9wIExlZnQgQ29ybmVyIn08L29wdGlvbj4KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWUgPSIyIiB7aWYgJGZvcm0uR1pQb3MgZXEgIjIifXNlbGVjdGVkey9pZn0vPntnLT50ZXh0IHRleHQ9IkJvdHRvbSBMZWZ0IENvcm5lciJ9PC9vcHRpb24+CiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlID0iMSIge2lmICRmb3JtLkdaUG9zIGVxICIxIn1zZWxlY3RlZHsvaWZ9Lz57Zy0+dGV4dCB0ZXh0PSJUb3AgUmlnaHQgQ29ybmVyIn08L29wdGlvbj4KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWUgPSIzIiB7aWYgJGZvcm0uR1pQb3MgZXEgIjMifXNlbGVjdGVkey9pZn0vPntnLT50ZXh0IHRleHQ9IkJvdHRvbSBSaWdodCBDb3JuZXIifTwvb3B0aW9uPgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJPZmZzZXQgKGxlZnQtcmlnaHQpIn08aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMyIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW0daUG9zT2ZmWF0ifSIgdmFsdWU9InskZm9ybS5HWlBvc09mZlh9Ii8+CiAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJPZmZzZXQgKHRvcC1ib3R0b20pIn08aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMyIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW0daUG9zT2ZmWV0ifSIgdmFsdWU9InskZm9ybS5HWlBvc09mZll9Ii8+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KPC9kaXY+CjxkaXYgY2xhc3M9ImdiQmxvY2sgZ2NCYWNrZ3JvdW5kMSI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtzYXZlXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iU2F2ZSBTZXR0aW5ncyJ9Ii8+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtjYW5jZWxdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJDYW5jZWwiIGhpbnQ9IkRpc2NhcmQgY2hhbmdlcyJ9Ii8+CjwvZGl2Pg==');
expand_3537250845($outputDir, 'templates/MapGoogleOverviewAdmin.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxoMj57Zy0+dGV4dCB0ZXh0PSJNYXAgTW9kdWxlIFNldHRpbmdzIn0gICA8YSBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MHB4O2JvcmRlci10b3A6MnB4IHNvbGlkICNjZWNlY2U7IGJvcmRlci1sZWZ0OjJweCBzb2xpZCAjY2VjZWNlOyBib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNGE0YTRhO2JvcmRlci1yaWdodDoycHggc29saWQgIzRhNGE0YTtwYWRkaW5nOi4yZW07cGFkZGluZy1yaWdodDoxZW07cGFkZGluZy1sZWZ0OjFlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzAwMDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7IiBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9bWFwLlNob3dNYXAifSI+e2ctPnRleHQgdGV4dD0iU2hvdyBHb29nbGUgTWFwIn08L2E+PC9oMj4KPC9kaXY+Cgo8IS0tCkJlZ2lubmluZyBvZiBlcnJvci9zdWNjZXNzIGRpc3BsYXlpbmcKLS0+CntpZiBpc3NldCgkc3RhdHVzLnNhdmVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lTdWNjZXNzIj57Zy0+dGV4dCB0ZXh0PSJTZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQhIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CjwhLS0KRW5kIG9mIGVycm9yL3N1Y2Nlc3MgZGlzcGxheWluZwotLT4KCntpbmNsdWRlIGZpbGU9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBBZG1pblRhYi50cGwiIG1vZGU9Ikdvb2dsZU92ZXJ2aWV3In0KCjwhLS0gSGVscCBEaXYgLS0+CjxkaXYgaWQ9ImhlbHBkaXYiIHN0eWxlPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MnB4IHNvbGlkIGJsYWNrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjM1MHB4O3RvcDoyMDBweDt3aWR0aDoyNTBweDtoZWlnaHQ6MTUwcHg7Ij4KICA8ZGl2IGlkPSJoZWxwaGVhZCIgc3R5bGU9IndpZHRoOjI1MHB4O2hlaWdodDoyNXB4O2JhY2tncm91bmQ6IzE1MDA5NTtjb2xvcjp3aGl0ZTtib3JkZXItYm90dG9tOjJweCBzb2xpZCBibGFjazsiPjxpbWcgYWx0PSJub25lIiB7aWYgISRmb3JtLklFfXN0eWxlPSJmbG9hdDpsZWZ0OyIgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyJ7ZWxzZX1zcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZicgc3R5bGU9J2Zsb2F0OmxlZnQ7ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7J3svaWZ9Lz48dGFibGUgc3R5bGU9ImhlaWdodDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPjx0cj48dGQgc3R5bGU9IndpZHRoOjIzMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsiPjxiPkhlbHAgV2luZG93PC9iPjwvdGQ+PHRkIHN0eWxlPSJ3aWR0aDoyNXB4O2N1cnNvcjpwb2ludGVyOyIgb25jbGljaz0iamF2YXNjcmlwdDpoaWRlaGVscCgpIj48Y2VudGVyPjxiPlg8L2I+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CiAgPGRpdiBpZCA9ImhlbHB0ZXh0IiBzdHlsZT0id2lkdGg6MjUwcHg7aGVpZ2h0OjEyM3B4O2NvbG9yOmJsYWNrO2ZvbnQtc2l6ZToxMnB4O2JhY2tncm91bmQ6I0IyRTRGNjstbW96LW9wYWNpdHk6Ljc1O2ZpbHRlcjphbHBoYShvcGFjaXR5PTc1KTtvcGFjaXR5Oi43NTtvdmVyZmxvdzphdXRvO2NsZWFyOmJvdGg7Ij4KICA8L2Rpdj4KPC9kaXY+CjwhLS0gRW5kIG9mIEhlbHAgRGl2IC0tPgoKPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgPGgzPiB7Zy0+dGV4dCB0ZXh0PSJHb29nbGUgT3ZlcnZpZXcgTWFwIn0gPC9oMz4KCiAgPHAgY2xhc3M9ImdpRGVzY3JpcHRpb24iPgogICAge2ctPnRleHQgdGV4dD0iVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIGFuIE92ZXJ2aWV3IE1hcCJ9CiAgPC9wPgogICAgICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJHb29nbGVPdmVydmlldyI+e2ctPnRleHQgdGV4dD0iRW5hPHU+YjwvdT5sZSJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9PVl9FbmFibGUsNDAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCBhY2Nlc3NrZXk9ImIiIHR5cGU9ImNoZWNrYm94IiBpZD0iR29vZ2xlT3ZlcnZpZXciCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW0dvb2dsZU92ZXJ2aWV3XSJ9IgogICAgICAgICAgICAgICAgICAgIHtpZiAkZm9ybS5Hb29nbGVPdmVydmlld31jaGVja2VkPSJjaGVja2VkInsvaWZ9CiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjEiLz4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9IkdPU2l6ZSI+e2ctPnRleHQgdGV4dD0iV2luZG93IHNpemUgKDx1Pnc8L3U+IHggPHU+aDwvdT4pIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX09WX1NpemUsNDAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCBhY2Nlc3NrZXk9InciIHR5cGU9InRleHQiIGlkPSJHT1NpemVYIiBzaXplPTUKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bR09TaXplWF0ifSIKICAgICAgICAgICAgICAgICAgICB7aWYgKChpc3NldCgkZm9ybS5HT1NpemVYKSkgYW5kICgkZm9ybS5HT1NpemVYIDw+IDApKX0gdmFsdWU9eyRmb3JtLkdPU2l6ZVh9IHsvaWZ9Lz4KICAgICAgICAgICAgICAgICB4IDxpbnB1dCBhY2Nlc3NrZXk9ImgiIHR5cGU9InRleHQiIGlkPSJHT1NpemVZIiBzaXplPTUKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bR09TaXplWV0ifSIKICAgICAgICAgICAgICAgICAgICB7aWYgKChpc3NldCgkZm9ybS5HT1NpemVZKSkgYW5kICgkZm9ybS5HT1NpemVZIDw+IDApKX0gdmFsdWU9eyRmb3JtLkdPU2l6ZVl9IHsvaWZ9Lz4KICAgICAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5ub0dPU2l6ZSl9CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdpRXJyb3IiPgogICAgICAgICAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJWZXJpZnkgdGhhdCB0aGUgc2l6ZShzKSBmb3IgdGhlIG9iamVjdCBhcmUgY29ycmVjdGx5IGVudGVyZWQifQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIHsvaWZ9CgogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iR09Qb3MiPntnLT50ZXh0IHRleHQ9IldpbmRvdyBQb3NpdGlvbiJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9PVl9Qb3NpdGlvbiw0MDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0iR09Qb3MiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtHT1Bvc10ifSI+CiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlID0iMCIge2lmICRmb3JtLkdPUG9zIGVxICIwIn1zZWxlY3RlZHsvaWZ9Lz57Zy0+dGV4dCB0ZXh0PSJUb3AgTGVmdCBDb3JuZXIifTwvb3B0aW9uPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZSA9IjIiIHtpZiAkZm9ybS5HT1BvcyBlcSAiMiJ9c2VsZWN0ZWR7L2lmfS8+e2ctPnRleHQgdGV4dD0iQm90dG9tIExlZnQgQ29ybmVyIn08L29wdGlvbj4KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWUgPSIxIiB7aWYgJGZvcm0uR09Qb3MgZXEgIjEifXNlbGVjdGVkey9pZn0vPntnLT50ZXh0IHRleHQ9IlRvcCBSaWdodCBDb3JuZXIifTwvb3B0aW9uPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZSA9IjMiIHtpZiAkZm9ybS5HT1BvcyBlcSAiMyJ9c2VsZWN0ZWR7L2lmfS8+e2ctPnRleHQgdGV4dD0iQm90dG9tIFJpZ2h0IENvcm5lciJ9PC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIHtnLT50ZXh0IHRleHQ9Ik9mZnNldCAobGVmdC1yaWdodCkifTxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIzIiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bR09Qb3NPZmZYXSJ9IiB2YWx1ZT0ieyRmb3JtLkdPUG9zT2ZmWH0iLz4KICAgICAgICAgICAgICAgIHtnLT50ZXh0IHRleHQ9Ik9mZnNldCAodG9wLWJvdHRvbSkifTxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIzIiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bR09Qb3NPZmZZXSJ9IiB2YWx1ZT0ieyRmb3JtLkdPUG9zT2ZmWX0iLz4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICA8L3RhYmxlPgo8L2Rpdj4KPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW3NhdmVdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJTYXZlIFNldHRpbmdzIn0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2NhbmNlbF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkNhbmNlbCIgaGludD0iRGlzY2FyZCBjaGFuZ2VzIn0iLz4KPC9kaXY+');
expand_3537250845($outputDir, 'templates/MapGroupAdmin.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxoMj57Zy0+dGV4dCB0ZXh0PSJNYXAgTW9kdWxlIFNldHRpbmdzIn0gICA8YSBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MHB4O2JvcmRlci10b3A6MnB4IHNvbGlkICNjZWNlY2U7IGJvcmRlci1sZWZ0OjJweCBzb2xpZCAjY2VjZWNlOyBib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNGE0YTRhO2JvcmRlci1yaWdodDoycHggc29saWQgIzRhNGE0YTtwYWRkaW5nOi4yZW07cGFkZGluZy1yaWdodDoxZW07cGFkZGluZy1sZWZ0OjFlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzAwMDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7IiBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9bWFwLlNob3dNYXAifSI+e2ctPnRleHQgdGV4dD0iU2hvdyBHb29nbGUgTWFwIn08L2E+PC9oMj4KPC9kaXY+Cgo8IS0tCkJlZ2lubmluZyBvZiBlcnJvci9zdWNjZXNzIGRpc3BsYXlpbmcKLS0+CntpZiBpc3NldCgkc3RhdHVzLnNhdmVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lTdWNjZXNzIj57Zy0+dGV4dCB0ZXh0PSJTZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQhIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CntpZiAhZW1wdHkoJGZvcm0uZXJyb3IpfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJUaGVyZSB3YXMgYSBwcm9ibGVtIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0LiJ9PC9oMj4KPC9kaXY+CnsvaWZ9CgoKPCEtLQpFbmQgb2YgZXJyb3Ivc3VjY2VzcyBkaXNwbGF5aW5nCi0tPgoKe2luY2x1ZGUgZmlsZT0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcEFkbWluVGFiLnRwbCIgbW9kZT0iR3JvdXAifQoKPCEtLSBIZWxwIERpdiAtLT4KPGRpdiBpZD0iaGVscGRpdiIgc3R5bGU9InZpc2liaWxpdHk6aGlkZGVuO2JvcmRlcjoycHggc29saWQgYmxhY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MzUwcHg7dG9wOjIwMHB4O3dpZHRoOjI1MHB4O2hlaWdodDoxNTBweDsiPgogICAgPGRpdiBpZD0iaGVscGhlYWQiIHN0eWxlPSJ3aWR0aDoyNTBweDtoZWlnaHQ6MjVweDtiYWNrZ3JvdW5kOiMxNTAwOTU7Y29sb3I6d2hpdGU7Ym9yZGVyLWJvdHRvbToycHggc29saWQgYmxhY2s7Ij48aW1nIGFsdD0ibm9uZSIge2lmICEkZm9ybS5JRX1zdHlsZT0iZmxvYXQ6bGVmdDsiIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmcie2Vsc2V9c3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYnIHN0eWxlPSdmbG9hdDpsZWZ0O2ZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOyd7L2lmfS8+PHRhYmxlIHN0eWxlPSJoZWlnaHQ6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ij48dHI+PHRkIHN0eWxlPSJ3aWR0aDoyMzBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ij48Yj5IZWxwIFdpbmRvdzwvYj48L3RkPjx0ZCBzdHlsZT0id2lkdGg6MjVweDtjdXJzb3I6cG9pbnRlcjsiIG9uY2xpY2s9ImphdmFzY3JpcHQ6aGlkZWhlbHAoKSI+PGNlbnRlcj48Yj5YPC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgogICAgPGRpdiBpZD0iaGVscHRleHQiIHN0eWxlPSJ3aWR0aDoyNTBweDtoZWlnaHQ6MTIzcHg7Y29sb3I6YmxhY2s7Zm9udC1zaXplOjEycHg7YmFja2dyb3VuZDojQjJFNEY2Oy1tb3otb3BhY2l0eTouNzU7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NzUpO29wYWNpdHk6Ljc1O292ZXJmbG93OmF1dG87Y2xlYXI6Ym90aDsiPgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIEVuZCBvZiBIZWxwIERpdiAtLT4KCntpZiAkZm9ybS5tb2RlIGVxICdBZGRHcm91cCd9Cgo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICA8aDM+IHtnLT50ZXh0IHRleHQ9Ikdyb3VwIFNldHRpbmdzIn08L2gzPgogIDxwIGNsYXNzPSJnaURlc2NyaXB0aW9uIj4KICAgIHtnLT50ZXh0IHRleHQ9IlNldHRpbmdzIHNwZWNpZmljIHRvIHRoaXMgR29vZ2xlIE1hcCBHcm91cCJ9CiAgPC9wPgogIHtpZiBpc3NldCgkZm9ybS5PbGRHcm91cCl9CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZWRpdCIgdmFsdWU9InskZm9ybS5PbGRHcm91cH0iLz4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvbGRpZCIgdmFsdWU9InskZm9ybS5FZGl0R3JvdXAuMH0iLz4KICB7L2lmfQogICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgPHRyPgogICAgIDx0aD48bGFiZWwgZm9yPSJHcm91cFRpdGxlIj57Zy0+dGV4dCB0ZXh0PSJFbnRlciBHcm91cCBUaXRsZSJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9HX05hbWUsMzUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgPHRkPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJHcm91cFRpdGxlIiB7aWYgaXNzZXQoJGZvcm0uT2xkR3JvdXApIGFuZCBpc3NldCgkZm9ybS5FZGl0R3JvdXAuMSl9dmFsdWU9InskZm9ybS5FZGl0R3JvdXAuMX0iey9pZn0vPiAqCiAgICAgICAge2lmIGlzc2V0KCRmb3JtLmVycm9yLmdyb3VwdGl0bGUpfQogICAgICAgICAgPHNwYW4gY2xhc3M9ImdpRXJyb3IiPgogICAgICAgICAge2ctPnRleHQgdGV4dD0iUGxlYXNlIGVudGVyIGEgZ3JvdXAgdGl0bGUuIn0KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICB7L2lmfQogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHdpZHRoPTUwcHggcm93c3Bhbj01PiZuYnNwOzwvdGQ+CiAgICAgICAgPHRoPntnLT50ZXh0IHRleHQ9Ikdyb3VwIFRodW1ibmFpbCJ9PC90ZD4KICAgPC90cj4KICAgPHRyPgogICAgIDx0aD48bGFiZWwgZm9yPSJHcm91cERhdGUiPntnLT50ZXh0IHRleHQ9IkVudGVyIGEgY3JlYXRpb24gZGF0ZSBmb3IgdGhlIGdyb3VwIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX0dfRGF0ZSwzNTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICA8dGQ+CiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iR3JvdXBEYXRlIiB2YWx1ZT0ie2lmIGlzc2V0KCRmb3JtLk9sZEdyb3VwKX17JGZvcm0uRWRpdEdyb3VwLjV9e2Vsc2V9eyRmb3JtLm5vd317L2lmfSIvPiA8aT57Zy0+dGV4dCB0ZXh0PSJEZWZhdWx0IGlzIHRvZGF5J3MgZGF0ZSJ9PC9pPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHJvd3NwYW49ND4KICAgICAgICB7aWYgaXNzZXQoJGZvcm0uT2xkR3JvdXApfQogICAgICAgICAgIDxpbWcgd2lkdGg9MTQwcHggc3JjPXskZm9ybS5FZGl0R3JvdXAuNH0vPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBpYyIgdmFsdWU9eyRmb3JtLkVkaXRHcm91cC40fS8+CiAgICAgICAge2Vsc2V9CiAgICAgICAgICAgPGNlbnRlcj5Ob25lPGNlbnRlcj4KICAgICAgICB7L2lmfQogICAgICAgIDwvdGQ+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iR3JvdXBTdW1tIj57Zy0+dGV4dCB0ZXh0PSJFbnRlciBhIFN1bW1hcnkgZm9yIHRoaXMgZ3JvdXAifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfR19TdW1tYXJ5LDM1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICAgIDxpbnB1dCBuYW1lPSJHcm91cFN1bW0iIHR5cGU9InRleHQiIHNpemU9IjUwIiB7aWYgaXNzZXQoJGZvcm0uT2xkR3JvdXApIGFuZCBpc3NldCgkZm9ybS5FZGl0R3JvdXAuMyl9dmFsdWU9InskZm9ybS5FZGl0R3JvdXAuM30iey9pZn0vPgogICAgICAgIDwvdGQ+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iR3JvdXBQaWMiPntnLT50ZXh0IHRleHQ9IlVwbG9hZCBhIFRodW1ibmFpbCJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9HX1RodW1iLDM1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVszXSJ9Ii8+CiAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW3VwbG9hZHBpY10ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IlVwbG9hZCBhbmQgU2V0In0iIC8+CiAgICAgICAgPC90ZD4KICAgPC90cj4KICAgPHRyPgogICAgIDx0aD48bGFiZWwgZm9yPSJHcm91cERlc2MiPntnLT50ZXh0IHRleHQ9IkVudGVyIGEgR3JvdXAgRGVzY3JpcHRpb24ifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfR19EZXNjcmlwdGlvbiwzNTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICA8dGQ+CiAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iR3JvdXBEZXNjIiBjb2xzPTM4IHJvd3M9ND57aWYgaXNzZXQoJGZvcm0uT2xkR3JvdXApIGFuZCBpc3NldCgkZm9ybS5FZGl0R3JvdXAuMil9eyRmb3JtLkVkaXRHcm91cC4yfXsvaWZ9PC90ZXh0YXJlYT4KICAgICAgICA8L3RkPgogICA8L3RyPgogICA8dHI+CiAgICAgPHRoPjxsYWJlbCBmb3I9Ikdyb3VwR1BTIj57Zy0+dGV4dCB0ZXh0PSJHUFMgY29vcmRpbmF0ZXMgZm9yIHRoZSBtYXJrZXIifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfR19HUFMsMzUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgPHRkIGNvbHNwYW49Mz4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJHcm91cEdQUyIgc2l6ZT00MCB7aWYgaXNzZXQoJGZvcm0uT2xkR3JvdXApIGFuZCBpc3NldCgkZm9ybS5FZGl0R3JvdXBQYXJhbS5HUFMpfXZhbHVlPSJ7JGZvcm0uRWRpdEdyb3VwUGFyYW0uR1BTfSJ7L2lmfS8+ICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtnZXRjb29yZF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkdldCB2aWEgYSBNYXAifSIvPgogICAgICAgIDwvdGQ+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iR3JvdXBab29tbGV2ZWwiPntnLT50ZXh0IHRleHQ9Ilpvb21MZXZlbCBmb3IgJ1pvb20taW4nIGxpbmsifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfR19ab29tSW4sMzUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgPHRkPgogICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ikdyb3VwWm9vbWxldmVsIiB7aWYgaXNzZXQoJGZvcm0uT2xkR3JvdXApIGFuZCBpc3NldCgkZm9ybS5FZGl0R3JvdXBQYXJhbS5ab29tTGV2ZWwpfXZhbHVlPSJ7JGZvcm0uRWRpdEdyb3VwUGFyYW0uWm9vbUxldmVsfSJ7L2lmfS8+CiAgICAgICAgPC90ZD4KICAgPC90cj4KICAgPHRyPgogICAgIDx0aD48bGFiZWwgZm9yPSJHcm91cENvbG9yIj57Zy0+dGV4dCB0ZXh0PSJNYXJrZXIgQ29sb3IifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfR19Db2xvciwzNTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICA8dGQ+CiAgICAgICAgICA8c2VsZWN0IG5hbWU9Ikdyb3VwQ29sb3IiPgogICAgICAgICAgICB7JGZvcm0uY29sb3JHb3B0aW9ufQogICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgPC90ZD4KICAgPC90cj4KICA8L3RhYmxlPgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImdiQmxvY2siPgogIDxoMz4Ke2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICA8aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX0dfSXRlbXMsNjAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPgogIHsvaWZ9CiAge2ctPnRleHQgdGV4dD0iSXRlbXMgaW4gR3JvdXAifQogIDwvaDM+CiAge2lmIGlzc2V0KCRmb3JtLml0ZW1zKX0KICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIGl0ZW10YWJsZSI+CiAgPHRyPjx0aCBjb2xzcGFuPTI+e2ctPnRleHQgdGV4dD0iU2VsZWN0IHRoZSBpdGVtcyB5b3Ugd2FudCB0byBiZSBwYXJ0IG9mIHRoaXMgZ3JvdXAifTwvdGg+PC90cj4KICB7Zm9yZWFjaCBmcm9tPSRmb3JtLml0ZW1zIGl0ZW09aXRlbSBrZXk9bnVtfQogIDx0ciBvbm1vdXNlb3Zlcj0iU2hvd3BpYygneyRpdGVtLmlkfScpIiBvbm1vdXNlb3V0PSJIaWRlcGljKCd7JGl0ZW0uaWR9JykiIGJnY29sb3I9IntpZiAkaXRlbS50eXBlIGVxICdHb29nbGVNYXBHcm91cCd9bGlnaHRibHVley9pZn17aWYgJGl0ZW0udHlwZSBlcSAnR2FsbGVyeVBob3RvSXRlbSd9cGlua3svaWZ9e2lmICRpdGVtLnR5cGUgZXEgJ0dhbGxlcnlBbGJ1bUl0ZW0nfWxpZ2h0Z3JlZW57L2lmfSI+CiAgPHRkPjxmb250IGNvbG9yPWJsYWNrPnskaXRlbS50aXRsZX08L2ZvbnQ+PC90ZD4KICA8dGQ+PGlucHV0IG5hbWU9IlA6eyRpdGVtLmlkfSIgdHlwZT0iY2hlY2tib3giIHZhbHVlPSJ7JGl0ZW0uaWR9IgogICAgIHtpZiBpc3NldCgkZm9ybS5PbGRHcm91cCl9CiAgICAgICB7Zm9yZWFjaCBmcm9tPSRmb3JtLkVkaXRHcm91cCBpdGVtPWdyb3VwcG9pbnR9CiAgICAgICAgIHtpZiAkZ3JvdXBwb2ludCBlcSAkaXRlbS5pZH1jaGVja2Vkey9pZn0KICAgICAgIHsvZm9yZWFjaH0KICAgICB7L2lmfQogIC8+PC90ZD4KICA8L3RyPgogIDxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjUwcHg7ZGlzcGxheTpub25lIiBpZD0iUHskaXRlbS5pZH0iPjxpbWcgc3JjPSJ7JGl0ZW0udGh1bWJ9Ii8+PC9kaXY+CiAgey9mb3JlYWNofQogIDwvdGFibGU+CiAge2Vsc2V9CiAgIHtnLT50ZXh0IHRleHQ9IlRoZXJlIGFyZSBubyBpdGVtcyB3aXRoIEdQUyBjb29yZGluYXRlcy4gUGxlYXNlIGFkZCBjb29yZGluYXRlcyB0byBhdCBsZWFzdCBvbmUgaXRlbSB0byBjcmVhdGUgYSBncm91cC4ifQogIHsvaWZ9CjwvZGl2PgoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW3NhdmVdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJTYXZlIEdyb3VwIn0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2NhbmNlbF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkNhbmNlbCIgaGludD0iRGlzY2FyZCBjaGFuZ2VzIn0iLz4KPC9kaXY+Cgp7ZWxzZX0KCjxkaXYgY2xhc3M9ImdiQmxvY2siPgogIDxoMz4ge2ctPnRleHQgdGV4dD0iR3JvdXAgTWFuYWdlbWVudCJ9IDwvaDM+CgogIDxwIGNsYXNzPSJnaURlc2NyaXB0aW9uIj4KICAgIDxpbWcge2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aW5mb3JtYXRpb24ucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aW5mb3JtYXRpb24ucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+CiAgICB7Zy0+dGV4dCB0ZXh0PSJUaGlzIHNlY3Rpb24gYWxsb3dzIHlvdSB0byBtYW5hZ2UgR3JvdXBzLiBBIEdyb3VwIGlzIHNob3duIGFzIGEgbWFya2VyIG9uIHRoZSBtYWluIE1hcC4gV2hlbiBjbGlja2luZyBpdHMgdGh1bWJuYWlsLCBpdCB3aWxsIG5vdCBvcGVuIGEgUGhvdG8gUGFnZSBvciBhbiBBbGJ1bSBwYWdlIGJ1dCBhbm90aGVyIE1hcCB3aXRoIHRoZSBpdGVtcyBzZWxlY3RlZCB0byBiZSBpbiB0aGF0IGdyb3VwLiJ9CiAgPC9wPgogICB7aWYgaXNzZXQoJGZvcm0udGhlZ3JvdXBzKSBhbmQgJGZvcm0udGhlZ3JvdXBzICE9ICIifQogICAgIDx0YWJsZSBjbGFzcz0iZ2JEYXRhVGFibGUiPgogICAgICAgPHRyPjx0aD57Zy0+dGV4dCB0ZXh0PSJHcm91cCBJRCJ9PC90aD48dGg+e2ctPnRleHQgdGV4dD0iR3JvdXAgTmFtZSJ9PC90aD48dGg+e2ctPnRleHQgdGV4dD0iR3JvdXAgQ3JlYXRpb24gRGF0ZSJ9PC90aD48dGg+e2ctPnRleHQgdGV4dD0iR3JvdXAgVGh1bWJuYWlsIn08L3RoPjx0aCBjb2xzcGFuPTI+e2ctPnRleHQgdGV4dD0iQWN0aW9ucyJ9PC90aD48L3RyPgogICAgICAge2ZvcmVhY2ggZnJvbT0kZm9ybS50aGVncm91cHMgaXRlbT1ncm91cH0KICAgICAgICAgIDx0cj48dGQ+eyRncm91cFswXX08L3RkPjx0ZD57JGdyb3VwWzFdfTwvdGQ+PHRkPnskZ3JvdXBbNV19PC90ZD48dGQ+eyRncm91cFs0XX08L3RkPgogICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2RlbGV0ZV0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkRlbGV0ZSBHcm91cCAlcyIgYXJnMT0kZ3JvdXBbMF19IiAvPjwvdGQ+CiAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bZWRpdF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkVkaXQgR3JvdXAgJXMiIGFyZzE9JGdyb3VwWzBdfSIgLz48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgIHsvZm9yZWFjaH0KICAgICA8L3RhYmxlPgogICB7ZWxzZX0KICAgICB7Zy0+dGV4dCB0ZXh0PSJUaGVyZSBhcmUgbm8gR3JvdXBzIGNyZWF0ZWQsIGNsaWNrIn0gPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bYWRkXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iQWRkIiBoaW50PSJDcmVhdGUgbmV3In0iIC8+CiAgIHsvaWZ9CjwvZGl2Pgo8ZGl2IGNsYXNzPSJnYkJsb2NrIGdjQmFja2dyb3VuZDEiPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bYWRkXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iQWRkIEdyb3VwIn0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2NhbmNlbF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkNhbmNlbCIgaGludD0iRGlzY2FyZCBjaGFuZ2VzIn0iLz4KPC9kaXY+CnsvaWZ9');
expand_3537250845($outputDir, 'templates/MapHeader.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQp7KiBDdXN0b20gbmF2aWdhdGlvbiBuZWVkcyBhIElFIC5wbmcgZml4CntpZiAoaXNzZXQoJG1hcC5NYXBDb250cm9sVHlwZSkpfQogIHtpZiAkbWFwLk1hcENvbnRyb2xUeXBlIG5lcSAiTm9uZSIgYW5kICRtYXAuTWFwQ29udHJvbFR5cGUgbmVxICJTbWFsbCIgYW5kICRtYXAuTWFwQ29udHJvbFR5cGUgbmVxICJMYXJnZSJ9CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgLnRoZW1hcCBpbWcge2xkZWxpbX0KICAgIGJlaGF2aW9yOiB1cmwoIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvcG5nYmVoYXZpb3IuaHRjIn0iKTsKICAgIHtyZGVsaW19CiAgICA8L3N0eWxlPgogIHsvaWZ9CnsvaWZ9ICAqfQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgphIHtsZGVsaW19b3ZlcmZsb3c6IGhpZGRlbjt7cmRlbGltfQphOmhvdmVyIHtsZGVsaW19IG91dGxpbmU6IG5vbmU7IHtyZGVsaW19Cjwvc3R5bGU+CntpbmNsdWRlIGZpbGU9Im1vZHVsZXMvbWFwL2luY2x1ZGVzL0dvb2dsZU1hcC5jc3MifQo8IS0tIEdvb2dsZSBNYXBzIHNjcmlwdCAtLT4Ke2lmIGlzc2V0KCRtYXAuZ29vZ2xlTWFwS2V5KSBhbmQgJG1hcC5nb29nbGVNYXBLZXkgbmVxICdmJ30KPHNjcmlwdCBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9maWxlPWFwaSZhbXA7dj0yLngmYW1wO2tleT17JG1hcC5nb29nbGVNYXBLZXl9IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pgp7aWYgaXNzZXQoJG1hcC5HWm9vbSkgYW5kICRtYXAuR1pvb219CiAgPHNjcmlwdCBzcmM9IntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW5jbHVkZXMvZ3pvb20uanMifSIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4Key9pZn0KPHNjcmlwdCBzcmM9IntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvR29vZ2xlTWFwLmpzIn0iIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CjwhLS0gVGhpcyBpcyBtb3N0bHkgYm9pbGVycGxhdGUgY29kZSBmcm9tIEdvb2dsZS4gU2VlOiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vYXBpcy9tYXBzL2RvY3VtZW50YXRpb24vIC0tPgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgLy88IVtDREFUQVsKCiAgICB2YXIgREVCVUdJTkZPID0gMDsgLy9zZXQgdG8gMSB0byB2aWV3IHRoZSBHbG9nLCAwIG90aGVyd2lzZQogICAgdmFyIGNvbnRyb2xuYW1lID0gInskbWFwLk1hcENvbnRyb2xUeXBlfSI7CiAgICB2YXIgSUVCcm93c2VyID0gbmF2aWdhdG9yLmFwcFZlcnNpb24uc3BsaXQoIk1TSUUiKTsKICAgIHZhciBJRVZlcnNpb24gPSBwYXJzZUZsb2F0KElFQnJvd3NlclsxXSk7CgogICAge2lmICRtYXAubW9kZSBlcSAiTm9ybWFsIiBhbmQgaXNzZXQoJG1hcC5UaHVtYkJhclBvcykgYW5kICRtYXAuVGh1bWJCYXJQb3MgbmVxICIwIiBhbmQgJG1hcC5mdWxsU2NyZWVuIG5lcSAzfQogICAgLyogaW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlIGZvciB0aGUgc2lkZWJhciAqLwogICAgdmFyIHNpZGViYXJoZWlnaHQgPSB7JG1hcC5UaHVtYkhlaWdodCs0fTsKICAgIHsqIFNob3VsZCB0aGlzIGJlIFRodW1iV2lkdGg/ICp9CiAgICB2YXIgc2lkZWJhcndpZHRoID0geyRtYXAuVGh1bWJIZWlnaHQrNH07CiAgICB7L2lmfQogICAgdmFyIHNpZGViYXJodG1sID0gJyc7CiAgICB2YXIgc2lkZWJhcnNpemUgPSAwOwoKICAgIC8vQ3JlYXRlIHRoZSBNYXAgdmFyaWFibGUgdG8gYmUgdXNlZCB0byBzdG9yZSB0aGUgbWFwIGluZm9zCiAgICB2YXIgbWFwOwogICAgLy9WYXJpYWJsZSBmb3IgdGhlIGdvb2dsZSBtYXAgc28gdGhhdCB3ZSBjYW4gZ2V0IGl0IHRyYW5zbGF0ZWQKICAgIHZhciBfbVNpdGVOYW1lID0gJ3tnLT50ZXh0IHRleHQ9Ikdvb2dsZSBMb2NhbCIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CiAgICB2YXIgX21ab29tSW4gPSAne2ctPnRleHQgdGV4dD0iWm9vbSBJbiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CiAgICB2YXIgX21ab29tT3V0ID0gJ3tnLT50ZXh0IHRleHQ9Ilpvb20gT3V0IiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbVpvb21TZXQgPSAne2ctPnRleHQgdGV4dD0iQ2xpY2sgdG8gc2V0IHpvb20gbGV2ZWwiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tWm9vbURyYWcgPSAne2ctPnRleHQgdGV4dD0iRHJhZyB0byB6b29tIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbVBhbldlc3QgPSAne2ctPnRleHQgdGV4dD0iR28gbGVmdCIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CiAgICB2YXIgX21QYW5FYXN0ID0gJ3tnLT50ZXh0IHRleHQ9IkdvIHJpZ2h0IiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbVBhbk5vcnRoID0gJ3tnLT50ZXh0IHRleHQ9IkdvIHVwIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbVBhblNvdXRoID0gJ3tnLT50ZXh0IHRleHQ9IkdvIGRvd24iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tTGFzdFJlc3VsdCA9ICd7Zy0+dGV4dCB0ZXh0PSJSZXR1cm4gdG8gdGhlIGxhc3QgcmVzdWx0IiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbUdvb2dsZUNvcHkgPSAne2ctPnRleHQgdGV4dD0iKGMpMjAwNyBHb29nbGUiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tRGF0YUNvcHkgPSAne2ctPnRleHQgdGV4dD0iTWFwIGRhdGEgKGMpMjAwNyAiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tTmF2dGVxID0gJ3tnLT50ZXh0IHRleHQ9Ik5BVlRFUSh0bSkiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tVGVsZUF0bGFzID0gJ3tnLT50ZXh0IHRleHQ9IlRlbGUgQXRsYXMiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tWmVucmluID0gJ3tnLT50ZXh0IHRleHQ9IlpFTlJJTiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CiAgICB2YXIgX21aZW5yaW5Db3B5ID0gJ3tnLT50ZXh0IHRleHQ9Ik1hcCAoYykyMDA3ICIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CiAgICB2YXIgX21Ob3JtYWxNYXAgPSAne2ctPnRleHQgdGV4dD0iTWFwIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbU5vcm1hbE1hcFNob3J0ID0gJ3tnLT50ZXh0IHRleHQ9Ik1hcCIgaGludD0iU2hvcnQgZm9ybSBmb3IgTWFwIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbUh5YnJpZE1hcCA9ICd7Zy0+dGV4dCB0ZXh0PSJIeWJyaWQiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tSHlicmlkTWFwU2hvcnQgPSAne2ctPnRleHQgdGV4dD0iSHliIiBoaW50PSJTaG9ydCBmb3JtIGZvciBIeWJyaWQiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tTmV3ID0gJ3tnLT50ZXh0IHRleHQ9Ik5ldyEiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tVGVybXMgPSAne2ctPnRleHQgdGV4dD0iVGVybXMgb2YgVXNlIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbUtleWhvbGVNYXAgPSAne2ctPnRleHQgdGV4dD0iU2F0ZWxsaXRlIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbUtleWhvbGVNYXBTaG9ydCA9ICd7Zy0+dGV4dCB0ZXh0PSJTYXQiIGhpbnQ9IlNob3J0IGZvcm0gZm9yIFNhdGVsbGl0ZSIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CiAgICB2YXIgX21LZXlob2xlQ29weSA9ICd7Zy0+dGV4dCB0ZXh0PSJJbWFnZXJ5IChjKTIwMDcgIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbVNjYWxlID0gJ3tnLT50ZXh0IHRleHQ9IlNjYWxlIGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hcCIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CiAgICB2YXIgX21LaWxvbWV0ZXJzID0gJ3tnLT50ZXh0IHRleHQ9ImttIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbU1pbGVzID0gJ3tnLT50ZXh0IHRleHQ9Im1pIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbU1ldGVycyA9ICd7Zy0+dGV4dCB0ZXh0PSJtIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbUZlZXQgPSAne2ctPnRleHQgdGV4dD0iZnQiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tRGVjaW1hbFBvaW50ID0gJ3tnLT50ZXh0IHRleHQ9Ii4iIGhpbnQ9IkRlY2ltYWwgcG9pbnQiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tVGhvdXNhbmRzU2VwYXJhdG9yID0gJ3tnLT50ZXh0IHRleHQ9IiwiIGhpbnQ9IlRob3VzYW5kcyBzZXBhcmF0b3IiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF9tTWFwRXJyb3JUaWxlID0gIntnLT50ZXh0IHRleHQ9IldlIGFyZSBzb3JyeSwgYnV0IHdlIGRvbid0IGhhdmUgbWFwcyBhdCB0aGlzIHpvb20gbGV2ZWwgZm9yIHRoaXMgcmVnaW9uLiBUcnkgem9vbWluZyBvdXQgZm9yIGEgYnJvYWRlciBsb29rLiIgZm9ySmF2YXNjcmlwdD10cnVlfSI7CiAgICB2YXIgX21LZXlob2xlRXJyb3JUaWxlID0gIntnLT50ZXh0IHRleHQ9IldlIGFyZSBzb3JyeSwgYnV0IHdlIGRvbid0IGhhdmUgaW1hZ2VyeSBhdCB0aGlzIHpvb20gbGV2ZWwgZm9yIHRoaXMgcmVnaW9uLiBUcnkgem9vbWluZyBvdXQgZm9yIGEgYnJvYWRlciBsb29rLiIgZm9ySmF2YXNjcmlwdD10cnVlfSI7CiAgICB2YXIgX21UZXJtc1VSTCA9ICd7Zy0+dGV4dCB0ZXh0PSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW50bC9lbl9BTEwvaGVscC90ZXJtc19sb2NhbC5odG1sIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfbVN0YXRpY1BhdGggPSAne2ctPnRleHQgdGV4dD0iaHR0cDovL3d3dy5nb29nbGUuY29tL2ludGwvZW5fQUxML21hcGZpbGVzLyIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CiAgICB2YXIgX21Eb21haW4gPSAne2ctPnRleHQgdGV4dD0iZ29vZ2xlLmNvbSIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CiAgICB2YXIgX21BcGlCYWRLZXkgPSAne2ctPnRleHQgdGV4dD0iVGhlIEdvb2dsZSBNYXBzIEFQSSBrZXkgdXNlZCBvbiB0aGlzIHdlYiBzaXRlIHdhcyByZWdpc3RlcmVkIGZvciBhIGRpZmZlcmVudCB3ZWIgc2l0ZS4gWW91IGNhbiBnZW5lcmF0ZSBhIG5ldyBrZXkgZm9yIHRoaXMgd2ViIHNpdGUgYXQgaHR0cDovL3d3dy5nb29nbGUuY29tL2FwaXMvbWFwcy8iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgCiAgICB2YXIgX2Rpdmhpc3Rvcnl0ZXh0ID0gJ3tnLT50ZXh0IHRleHQ9Ik1vdmUgaGlzdG9yeSIgZm9ySmF2YXNjcmlwdD10cnVlfTonCiAgICB2YXIgX21vdmV0ZXh0ID0gJ3tnLT50ZXh0IHRleHQ9Im1vdmUiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwogICAgdmFyIF96b29tdGV4dCA9ICd7Zy0+dGV4dCB0ZXh0PSJ6b29tIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfc3RhcnR0ZXh0ID0gJ3tnLT50ZXh0IHRleHQ9InN0YXJ0IiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKICAgIHZhciBfd2luZG93dGV4dCA9ICd7Zy0+dGV4dCB0ZXh0PSJ3aW5kb3ciIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwoKCgogICAgLy9GdW5jdGlvbnMgZm9yIHRoZSBQQU4gJiBab29tIEN1c3RvbSBjb250cm9scwogICAgdmFyIFpvb21PdXQ7IC8vdGhpcyBuZWVkcyB0byBiZSBnbG9iYWwgdG8gZW5hYmxlIHRoZSBNYXAgdHlwZSB0byBjaGFuZ2UgaXQgOi0pCiAgICB2YXIgWm9vbVNsaWRlID0gW107CgogICB7aWYgJG1hcC5NYXBDb250cm9sVHlwZSBuZXEgIk5vbmUiIGFuZCAkbWFwLk1hcENvbnRyb2xUeXBlIG5lcSAiU21hbGwiIGFuZCAkbWFwLk1hcENvbnRyb2xUeXBlIG5lcSAiTGFyZ2UifQogICAgZnVuY3Rpb24gTXlQYW5ab29tQ29udHJvbHMoKSB7bGRlbGltfQogICAge3JkZWxpbX0KICAgIE15UGFuWm9vbUNvbnRyb2xzLnByb3RvdHlwZSA9IG5ldyBHQ29udHJvbCgpOwoKICAgIE15UGFuWm9vbUNvbnRyb2xzLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24obWFwKSB7bGRlbGltfQogICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGNvbnRhaW5lci5zdHlsZS5mb250U2l6ZSA9ICI4cHgiOwogICAgICBjb250YWluZXIuc3R5bGUubGluZUhlaWdodCA9ICIwLjFjbSI7CgogICAgICB2YXIgQ2VudGVyQkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgdGhpcy5zZXRCdXR0b25TdHlsZV8oQ2VudGVyQkcsIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzLyJ9Iitjb250cm9sbmFtZSsiL0NlbnRlckJHLnBuZyIsImJrIik7CiAgICAgIENlbnRlckJHLnN0eWxlLnRvcCA9ICIwcHgiOwogICAgICBDZW50ZXJCRy5zdHlsZS5sZWZ0ID0gIjBweCI7CiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChDZW50ZXJCRyk7CgogICAgICB2YXIgR29MZWZ0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHRoaXMuc2V0QnV0dG9uU3R5bGVfKEdvTGVmdERpdiwie2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvIn0iK2NvbnRyb2xuYW1lKyIvV2VzdC5wbmciLCJndyIpOwogICAgICBHb0xlZnREaXYuc3R5bGUudG9wID0gIjE3cHgiOwogICAgICBHb0xlZnREaXYuc3R5bGUubGVmdCA9ICIwcHgiOwogICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoR29MZWZ0RGl2KTsKICAgICAgR0V2ZW50LmFkZERvbUxpc3RlbmVyKEdvTGVmdERpdiwgImNsaWNrIiwgZnVuY3Rpb24oKSB7bGRlbGltfQogICAgICAgIG1hcC5wYW5EaXJlY3Rpb24oMSwwKTsKICAgICAge3JkZWxpbX0pOwoKICAgICAgdmFyIEdvVXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgdGhpcy5zZXRCdXR0b25TdHlsZV8oR29VcERpdiwie2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvIn0iK2NvbnRyb2xuYW1lKyIvTm9ydGgucG5nIiwiZ24iKTsKICAgICAgR29VcERpdi5zdHlsZS50b3AgPSAiMHB4IjsKICAgICAgR29VcERpdi5zdHlsZS5sZWZ0ID0gIjE3cHgiOwogICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoR29VcERpdik7CiAgICAgIEdFdmVudC5hZGREb21MaXN0ZW5lcihHb1VwRGl2LCAiY2xpY2siLCBmdW5jdGlvbigpIHtsZGVsaW19CiAgICAgICAgbWFwLnBhbkRpcmVjdGlvbigwLDEpOwogICAgICB7cmRlbGltfSk7CgogICAgICB2YXIgQ2VudGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHRoaXMuc2V0QnV0dG9uU3R5bGVfKENlbnRlciwie2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvIn0iK2NvbnRyb2xuYW1lKyIvQ2VudGVyLnBuZyIsImdiIik7CiAgICAgIENlbnRlci5zdHlsZS50b3AgPSAiMTdweCI7CiAgICAgIENlbnRlci5zdHlsZS5sZWZ0ID0gIjE3cHgiOwogICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoQ2VudGVyKTsKICAgICAgR0V2ZW50LmFkZERvbUxpc3RlbmVyKENlbnRlciwgImNsaWNrIiwgZnVuY3Rpb24oKSB7bGRlbGltfQogICAgICAgIG1hcC5yZXR1cm5Ub1NhdmVkUG9zaXRpb24oKTsKICAgICAge3JkZWxpbX0pOwoKICAgICAgdmFyIEdvRG93bkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB0aGlzLnNldEJ1dHRvblN0eWxlXyhHb0Rvd25EaXYsIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzLyJ9Iitjb250cm9sbmFtZSsiL1NvdXRoLnBuZyIsImdzIik7CiAgICAgIEdvRG93bkRpdi5zdHlsZS50b3AgPSAiMzZweCI7CiAgICAgIEdvRG93bkRpdi5zdHlsZS5sZWZ0ID0gIjE3cHgiOwogICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoR29Eb3duRGl2KTsKICAgICAgR0V2ZW50LmFkZERvbUxpc3RlbmVyKEdvRG93bkRpdiwgImNsaWNrIiwgZnVuY3Rpb24oKSB7bGRlbGltfQogICAgICAgIG1hcC5wYW5EaXJlY3Rpb24oMCwtMSk7CiAgICAgIHtyZGVsaW19KTsKCiAgICAgIHZhciBHb1JpZ2h0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHRoaXMuc2V0QnV0dG9uU3R5bGVfKEdvUmlnaHREaXYsIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzLyJ9Iitjb250cm9sbmFtZSsiL0Vhc3QucG5nIiwiZ2UiKTsKICAgICAgR29SaWdodERpdi5zdHlsZS50b3AgPSAiMTdweCI7CiAgICAgIEdvUmlnaHREaXYuc3R5bGUubGVmdCA9ICIzNnB4IjsKICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKEdvUmlnaHREaXYpOwogICAgICBHRXZlbnQuYWRkRG9tTGlzdGVuZXIoR29SaWdodERpdiwgImNsaWNrIiwgZnVuY3Rpb24oKSB7bGRlbGltfQogICAgICAgIG1hcC5wYW5EaXJlY3Rpb24oLTEsMCk7CiAgICAgIHtyZGVsaW19KTsKCiAgICAgIHZhciBab29tSW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgdGhpcy5zZXRCdXR0b25TdHlsZV8oWm9vbUluLCJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy8ifSIrY29udHJvbG5hbWUrIi9ab29tSW4ucG5nIiwiemkiKTsKICAgICAgWm9vbUluLnN0eWxlLnRvcCA9ICI1N3B4IjsKICAgICAgWm9vbUluLnN0eWxlLmxlZnQgPSAiMTdweCI7CiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChab29tSW4pOwogICAgICBHRXZlbnQuYWRkRG9tTGlzdGVuZXIoWm9vbUluLCAiY2xpY2siLCBmdW5jdGlvbigpIHtsZGVsaW19CiAgICAgICAgbWFwLnpvb21JbigpOwogICAgICB7cmRlbGltfSk7CgogICAgICB7c2VjdGlvbiBuYW1lPWxvb3Agc3RhcnQ9MCBsb29wPTIwfQogICAgICAgIFpvb21TbGlkZVt7JHNtYXJ0eS5zZWN0aW9uLmxvb3AuaW5kZXh9XSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGlmIChJRVZlcnNpb24pIFpvb21TbGlkZVt7JHNtYXJ0eS5zZWN0aW9uLmxvb3AuaW5kZXh9XS5zdHlsZS50b3AgPSAie21hdGggZXF1YXRpb249NjIreCo3IHg9JHNtYXJ0eS5zZWN0aW9uLmxvb3AuaW5kZXh9cHgiOwogICAgICAgIGVsc2UgWm9vbVNsaWRlW3skc21hcnR5LnNlY3Rpb24ubG9vcC5pbmRleH1dLnN0eWxlLnRvcCA9ICJ7bWF0aCBlcXVhdGlvbj01Nit4KjcgeD0kc21hcnR5LnNlY3Rpb24ubG9vcC5pbmRleH1weCI7CiAgICAgICAgWm9vbVNsaWRlW3skc21hcnR5LnNlY3Rpb24ubG9vcC5pbmRleH1dLnN0eWxlLmxlZnQgPSAiMTdweCI7CiAgICAgICAgaWYgKHskc21hcnR5LnNlY3Rpb24ubG9vcC5pbmRleH0gPCAyKSBab29tU2xpZGVbeyRzbWFydHkuc2VjdGlvbi5sb29wLmluZGV4fV0uc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICAgIHRoaXMuc2V0QnV0dG9uU3R5bGVfKFpvb21TbGlkZVt7JHNtYXJ0eS5zZWN0aW9uLmxvb3AuaW5kZXh9XSwie2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvIn0iK2NvbnRyb2xuYW1lKyIvU2xpZGVOb3RjaC5wbmciLCJ6eyRzbWFydHkuc2VjdGlvbi5sb29wLmluZGV4fSIpOwogICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChab29tU2xpZGVbeyRzbWFydHkuc2VjdGlvbi5sb29wLmluZGV4fV0pOwogICAgICAgIEdFdmVudC5hZGREb21MaXN0ZW5lcihab29tU2xpZGVbeyRzbWFydHkuc2VjdGlvbi5sb29wLmluZGV4fV0sICJjbGljayIsIGZ1bmN0aW9uKCkge2xkZWxpbX0KICAgICAgICAgIG1hcC5zZXRab29tKHttYXRoIGVxdWF0aW9uPTE5LXggeD0kc21hcnR5LnNlY3Rpb24ubG9vcC5pbmRleH0pOwogICAgICAgIHtyZGVsaW19KTsKICAgICAgey9zZWN0aW9ufQoKICAgICAgWm9vbU91dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB0aGlzLnNldEJ1dHRvblN0eWxlXyhab29tT3V0LCJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy8ifSIrY29udHJvbG5hbWUrIi9ab29tT3V0LnBuZyIsInpvIik7CiAgICAgIFpvb21PdXQuc3R5bGUudG9wID0gIjIwNXB4IjsKICAgICAgWm9vbU91dC5zdHlsZS5sZWZ0ID0gIjE3cHgiOwogICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoWm9vbU91dCk7CiAgICAgIEdFdmVudC5hZGREb21MaXN0ZW5lcihab29tT3V0LCAiY2xpY2siLCBmdW5jdGlvbigpIHtsZGVsaW19CiAgICAgICAgbWFwLnpvb21PdXQoKTsKICAgICAge3JkZWxpbX0pOwoKICAgICAgbWFwLmdldENvbnRhaW5lcigpLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICAgIHJldHVybiBjb250YWluZXI7CiAgICB7cmRlbGltfQoKICAgIGZ1bmN0aW9uIHNldEN1c3RvbVpvb20gKG1hcCx6b29tbnVtYmVyKSB7bGRlbGltfQogICAgICBtYXAuc2V0Wm9vbSh6b29tbnVtYmVyKTsKICAgIHtyZGVsaW19CgogICAgTXlQYW5ab29tQ29udHJvbHMucHJvdG90eXBlLnNldEJ1dHRvblN0eWxlXyA9IGZ1bmN0aW9uKGJ1dHRvbixpbWdmaWxlLGlkKSB7bGRlbGltfQogICAgICB2YXIgaW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKICAgICAgaWYgKCFJRVZlcnNpb24gfHwgKElFVmVyc2lvbiAmJiBJRVZlcnNpb24gPj0gNykpIGltYWdlLnNyYyA9IGltZ2ZpbGU7CiAgICAgIGVsc2Uge2xkZWxpbX0KICAgICAgICBpbWFnZS5zcmMgPSAie2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC9pbWFnZXMvYmxhbmsuZ2lmIn0iOwogICAgICAgIGltYWdlLnN0eWxlLmZpbHRlciA9ICJmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0nIitpbWdmaWxlKyInKSI7CiAgICAgIHtyZGVsaW19CiAgICAgIGltYWdlLmlkID0gaWQ7CiAgICAgIGJ1dHRvbi5hcHBlbmRDaGlsZChpbWFnZSk7CiAgICAgIGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAicG9pbnRlciI7CiAgICAgIGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgIGJ1dHRvbi5zdHlsZS5jb2xvciA9ICJ3aGl0ZSI7CiAgICAgIGJ1dHRvbi5zdHlsZS5mb250ID0gInNtYWxsIEFyaWFsIjsKICAgICAgYnV0dG9uLnN0eWxlLnBhZGRpbmcgPSAiMnB4IjsKICAgICAgYnV0dG9uLnN0eWxlLm1hcmdpbkJvdHRvbSA9ICIzcHgiOwogICAgICBidXR0b24uc3R5bGUudGV4dEFsaWduID0gImNlbnRlciI7CiAgICB7cmRlbGltfQoKICAgIE15UGFuWm9vbUNvbnRyb2xzLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb24gPSBmdW5jdGlvbigpIHtsZGVsaW19CiAgICAgIHJldHVybiBuZXcgR0NvbnRyb2xQb3NpdGlvbih7JG1hcC5NYXBDb250cm9sUG9zfSxuZXcgR1NpemUoeyRtYXAuTWFwQ29udHJvbFBvc09mZlh9LHskbWFwLk1hcENvbnRyb2xQb3NPZmZZfSkpOwogICAge3JkZWxpbX0KCiAgICAvL0VuZCBvZiB0aGUgZnVuY3Rpb25zIGZvciB0aGUgY3VzdG9tIFBBTiAmIFpvb20gY29udHJvbHMKCiAgICAvL0Z1bmN0aW9uIGZvciB0aGUgTWFwIFR5cGUgY3VzdG9tIGNvbnRyb2xzCiAgICBmdW5jdGlvbiBNeU1hcFR5cGVDb250cm9scygpIHtsZGVsaW19CiAgICB7cmRlbGltfQogICAgTXlNYXBUeXBlQ29udHJvbHMucHJvdG90eXBlID0gbmV3IEdDb250cm9sKCk7CgogICAgTXlNYXBUeXBlQ29udHJvbHMucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbihtYXApIHtsZGVsaW19CiAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCiAgICAgIHZhciBNYXBUeXBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHRoaXMuc2V0QnV0dG9uU3R5bGVfKE1hcFR5cGUsIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzLyJ9Iitjb250cm9sbmFtZSsiL1R5cGVCRy5wbmciLCJtdCIpOwogICAgICB0aGlzLkNyZWF0ZVRleHRFbF8oTWFwVHlwZSwiTWFwIik7CiAgICAgIE1hcFR5cGUuc3R5bGUudG9wID0gIjIzN3B4IjsKICAgICAgTWFwVHlwZS5zdHlsZS5sZWZ0ID0gIi03cHgiOwogICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoTWFwVHlwZSk7CiAgICAgIEdFdmVudC5hZGREb21MaXN0ZW5lcihNYXBUeXBlLCAiY2xpY2siLCBmdW5jdGlvbigpIHtsZGVsaW19CiAgICAgICAgbWFwLnNldE1hcFR5cGUoR19OT1JNQUxfTUFQKTsKICAgICAgICBab29tT3V0LnN0eWxlLnRvcCA9ICIyMDVweCI7CiAgICAgICAgWm9vbVNsaWRlWzBdLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgICAgICBab29tU2xpZGVbMV0uc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICAgIHtzZWN0aW9uIG5hbWU9bG9vcCBsb29wPTIwIHN0YXJ0PTB9CiAgICAgICAgICAgaWYgKG5hdmlnYXRvci5hcHBOYW1lID09ICJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiKSBab29tU2xpZGVbeyRzbWFydHkuc2VjdGlvbi5sb29wLmluZGV4fV0uc3R5bGUudG9wID0gInttYXRoIGVxdWF0aW9uPTYyK3gqNyB4PSRzbWFydHkuc2VjdGlvbi5sb29wLmluZGV4fXB4IjsKICAgICAgICAgICBlbHNlIFpvb21TbGlkZVt7JHNtYXJ0eS5zZWN0aW9uLmxvb3AuaW5kZXh9XS5zdHlsZS50b3AgPSAie21hdGggZXF1YXRpb249NTYreCo3IHg9JHNtYXJ0eS5zZWN0aW9uLmxvb3AuaW5kZXh9cHgiOwogICAgICAgIHsvc2VjdGlvbn0KICAgICAge3JkZWxpbX0pOwoKICAgICAgdmFyIFNhdFR5cGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgdGhpcy5zZXRCdXR0b25TdHlsZV8oU2F0VHlwZSwie2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvIn0iK2NvbnRyb2xuYW1lKyIvVHlwZUJHLnBuZyIsInN0Iik7CiAgICAgIHRoaXMuQ3JlYXRlVGV4dEVsXyhTYXRUeXBlLCJTYXRlbGxpdGUiKTsKICAgICAgU2F0VHlwZS5zdHlsZS50b3AgPSAiMjU3cHgiOwogICAgICBTYXRUeXBlLnN0eWxlLmxlZnQgPSAiLTdweCI7CiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChTYXRUeXBlKTsKICAgICAgR0V2ZW50LmFkZERvbUxpc3RlbmVyKFNhdFR5cGUsICJjbGljayIsIGZ1bmN0aW9uKCkge2xkZWxpbX0KICAgICAgICBtYXAuc2V0TWFwVHlwZShHX1NBVEVMTElURV9NQVApOwogICAgICAgIFpvb21PdXQuc3R5bGUudG9wID0gIjIxOXB4IjsKICAgICAgICB7c2VjdGlvbiBuYW1lPWxvb3AgbG9vcD0yMCBzdGFydD0wfQogICAgICAgICAgIGlmIChuYXZpZ2F0b3IuYXBwTmFtZSA9PSAiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIikgWm9vbVNsaWRlW3skc21hcnR5LnNlY3Rpb24ubG9vcC5pbmRleH1dLnN0eWxlLnRvcCA9ICJ7bWF0aCBlcXVhdGlvbj03Nit4KjcgeD0kc21hcnR5LnNlY3Rpb24ubG9vcC5pbmRleH1weCI7CiAgICAgICAgICAgZWxzZSBab29tU2xpZGVbeyRzbWFydHkuc2VjdGlvbi5sb29wLmluZGV4fV0uc3R5bGUudG9wID0gInttYXRoIGVxdWF0aW9uPTcwK3gqNyB4PSRzbWFydHkuc2VjdGlvbi5sb29wLmluZGV4fXB4IjsKICAgICAgICB7L3NlY3Rpb259CiAgICAgICAgWm9vbVNsaWRlWzBdLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CiAgICAgICAgWm9vbVNsaWRlWzFdLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CiAgICAgIHtyZGVsaW19KTsKCiAgICAgIHZhciBIeWJyaWRUeXBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHRoaXMuc2V0QnV0dG9uU3R5bGVfKEh5YnJpZFR5cGUsIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzLyJ9Iitjb250cm9sbmFtZSsiL1R5cGVCRy5wbmciLCJodCIpOwogICAgICB0aGlzLkNyZWF0ZVRleHRFbF8oSHlicmlkVHlwZSwiSHlicmlkIik7CiAgICAgIEh5YnJpZFR5cGUuc3R5bGUudG9wID0gIjI3N3B4IjsKICAgICAgSHlicmlkVHlwZS5zdHlsZS5sZWZ0ID0gIi03cHgiOwogICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoSHlicmlkVHlwZSk7CiAgICAgIEdFdmVudC5hZGREb21MaXN0ZW5lcihIeWJyaWRUeXBlLCAiY2xpY2siLCBmdW5jdGlvbigpIHtsZGVsaW19CiAgICAgICAgbWFwLnNldE1hcFR5cGUoR19IWUJSSURfTUFQKTsKICAgICAgICBab29tT3V0LnN0eWxlLnRvcCA9ICIyMTlweCI7CiAgICAgICAge3NlY3Rpb24gbmFtZT1sb29wIGxvb3A9MjAgc3RhcnQ9MH0KICAgICAgICAgICBpZiAobmF2aWdhdG9yLmFwcE5hbWUgPT0gIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciIpIFpvb21TbGlkZVt7JHNtYXJ0eS5zZWN0aW9uLmxvb3AuaW5kZXh9XS5zdHlsZS50b3AgPSAie21hdGggZXF1YXRpb249NzYreCo3IHg9JHNtYXJ0eS5zZWN0aW9uLmxvb3AuaW5kZXh9cHgiOwogICAgICAgICAgIGVsc2UgWm9vbVNsaWRlW3skc21hcnR5LnNlY3Rpb24ubG9vcC5pbmRleH1dLnN0eWxlLnRvcCA9ICJ7bWF0aCBlcXVhdGlvbj03MCt4KjcgeD0kc21hcnR5LnNlY3Rpb24ubG9vcC5pbmRleH1weCI7CiAgICAgICAgey9zZWN0aW9ufQogICAgICAgIFpvb21TbGlkZVswXS5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOwogICAgICAgIFpvb21TbGlkZVsxXS5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOwogICAgICB7cmRlbGltfSk7CgogICAgICBtYXAuZ2V0Q29udGFpbmVyKCkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKICAgICAgcmV0dXJuIGNvbnRhaW5lcjsKICAgIHtyZGVsaW19CgoKICAgIE15TWFwVHlwZUNvbnRyb2xzLnByb3RvdHlwZS5DcmVhdGVUZXh0RWxfID0gZnVuY3Rpb24oYnV0dG9uLHRleHQpIHtsZGVsaW19CiAgICAgIHZhciB0ZXh0ZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgdGV4dGVsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgdGV4dGVsLnN0eWxlLnRleHRBbGlnbiA9ICJjZW50ZXIiOwogICAgICBpZiAoIUlFVmVyc2lvbikgdGV4dGVsLnN0eWxlLnRvcCA9IjNweCI7CiAgICAgIHRleHRlbC5zdHlsZS5sZWZ0ID0gIjBweCI7CiAgICAgIHRleHRlbC5zdHlsZS56SW5kZXggPSAxMDE7CiAgICAgIHRleHRlbC5zdHlsZS53aWR0aCA9ICI4MHB4IjsKICAgICAgdGV4dGVsLmlubmVySFRNTCA9IHRleHQ7CiAgICAgIGJ1dHRvbi5hcHBlbmRDaGlsZCh0ZXh0ZWwpOwogICAge3JkZWxpbX0KCgogICAgTXlNYXBUeXBlQ29udHJvbHMucHJvdG90eXBlLnNldEJ1dHRvblN0eWxlXyA9IGZ1bmN0aW9uKGJ1dHRvbixpbWdmaWxlLGlkKSB7bGRlbGltfQogICAgICB2YXIgaW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKICAgICAgaWYgKCFJRVZlcnNpb24gfHwoSUVWZXJzaW9uICYmIElFVmVyc2lvbiA+PSA3KSkgaW1hZ2Uuc3JjID0gaW1nZmlsZTsKICAgICAgZWxzZSB7bGRlbGltfQogICAgICAgIGltYWdlLnNyYyA9ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL2ltYWdlcy9ibGFuay5naWYifSI7CiAgICAgICAgaW1hZ2Uuc3R5bGUuZmlsdGVyID0gImZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSciK2ltZ2ZpbGUrIicpIjsKICAgICAge3JkZWxpbX0KICAgICAgaW1hZ2UuaWQgPSBpZDsKICAgICAgYnV0dG9uLmFwcGVuZENoaWxkKGltYWdlKTsKICAgICAgYnV0dG9uLnN0eWxlLmN1cnNvciA9ICJwb2ludGVyIjsKICAgICAgYnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgYnV0dG9uLnN0eWxlLmNvbG9yID0gIndoaXRlIjsKICAgICAgYnV0dG9uLnN0eWxlLmZvbnQgPSAic21hbGwgQXJpYWwiOwogICAgICBidXR0b24uc3R5bGUucGFkZGluZyA9ICIycHgiOwogICAgICBidXR0b24uc3R5bGUubWFyZ2luQm90dG9tID0gIjNweCI7CiAgICAgIGJ1dHRvbi5zdHlsZS50ZXh0QWxpZ24gPSAiY2VudGVyIjsKICAgIHtyZGVsaW19CgogICAgTXlNYXBUeXBlQ29udHJvbHMucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge2xkZWxpbX0KICAgICAgcmV0dXJuIG5ldyBHQ29udHJvbFBvc2l0aW9uKEdfQU5DSE9SX1RPUF9MRUZULCBuZXcgR1NpemUoNSwxNSkpOwogICAge3JkZWxpbX0KCiAgICAvL0VORCBvZiB0aGUgZnVuY3Rpb25zIGZvciB0aGUgTWFwIFR5cGUgQ3VzdG9tIENvbnRyb2xzCiAgICB7L2lmfQogICAgCiAgICAvLyA9PT09PSBTaG93IGFuZCBIaWRlIG1hcmtlcnMgPT09PT0KICAgIGZ1bmN0aW9uIG1hcmtlckRpc3BsYXkobnVtYmVyLHNob3csdHlwZSkge2xkZWxpbX0KICAgICAgaWYgKHR5cGUgIT0gJ1JlZ3JvdXAnKXtsZGVsaW19CiAgICAgICAgaWYgKChzaG93KSAmJiAoIW1hcmtlcnNbbnVtYmVyXS5vbm1hcCkpIHtsZGVsaW19CiAgICAgICAgICAgaWYgKERFQlVHSU5GTykgR0xvZy53cml0ZSgnTm9ybWFsIEljb24sc2hvdywnK251bWJlcik7CiAgICAgICAgICAgbWFya2Vyc1tudW1iZXJdLm9ubWFwID0gdHJ1ZTsKICAgICAgICAgICBtYXAuYWRkT3ZlcmxheShtYXJrZXJzW251bWJlcl0pOwogICAgICAgIHtyZGVsaW19CiAgICAgICAgaWYgKCghc2hvdykgJiYgKG1hcmtlcnNbbnVtYmVyXS5vbm1hcCkpIHtsZGVsaW19CiAgICAgICAgICAgaWYgKERFQlVHSU5GTykgR0xvZy53cml0ZSgnTm9ybWFsIEljb24saGlkZSwnK251bWJlcik7CiAgICAgICAgICAgbWFya2Vyc1tudW1iZXJdLm9ubWFwID0gZmFsc2U7CiAgICAgICAgICAgbWFwLnJlbW92ZU92ZXJsYXkobWFya2Vyc1tudW1iZXJdKTsKICAgICAgICB7cmRlbGltfQogICAgICB7cmRlbGltfWVsc2V7bGRlbGltfQogICAgICAgIGlmICgoc2hvdykgJiYgKCFSbWFya2Vyc1tudW1iZXJdLm9ubWFwKSkge2xkZWxpbX0KICAgICAgICAgICBpZiAoREVCVUdJTkZPKSBHTG9nLndyaXRlKCdSZWdyb3VwIEljb24sc2hvdywnK251bWJlcik7CiAgICAgICAgICAgUm1hcmtlcnNbbnVtYmVyXS5vbm1hcCA9IHRydWU7CiAgICAgICAgICAgbWFwLmFkZE92ZXJsYXkoUm1hcmtlcnNbbnVtYmVyXSk7CiAgICAgICAge3JkZWxpbX0KICAgICAgICBpZiAoKCFzaG93KSAmJiAoUm1hcmtlcnNbbnVtYmVyXS5vbm1hcCkpIHtsZGVsaW19CiAgICAgICAgICAgaWYgKERFQlVHSU5GTykgR0xvZy53cml0ZSgnUmVncm91cCBJY29uLGhpZGUsJytudW1iZXIpOwogICAgICAgICAgIFJtYXJrZXJzW251bWJlcl0ub25tYXAgPSBmYWxzZTsKICAgICAgICAgICBtYXAucmVtb3ZlT3ZlcmxheShSbWFya2Vyc1tudW1iZXJdKTsKICAgICAgICB7cmRlbGltfQogICAgICB7cmRlbGltfQogICAge3JkZWxpbX0KICAgIHtpZiAkbWFwLmZ1bGxTY3JlZW4gbmVxIDN9CiAgICAvLyA9PT09IGdvIHN0YXJ0ICYgcmVtb3ZlIGhpc3RvcnkgID09PT09PT0KICAgIGZ1bmN0aW9uIGdvU3RhcnQoKSB7bGRlbGltfQogICAgICBpZiAoREVCVUdJTkZPKSBHTG9nLndyaXRlKCdzdGFydCBvZiBzYXZlZCBwb3NpdGlvbicpOwogICAgICByZXR1cm5pbmdUb1NhdmVkID0gdHJ1ZTsKICAgICAgbWFwLmNsb3NlSW5mb1dpbmRvdygpOwogICAgICBtYXAucmV0dXJuVG9TYXZlZFBvc2l0aW9uKCk7ICAvLyB0YWtlcyBzb21lIHRpbWUgZm9yIHRoZSBtYXAgdG8gbW92ZSBzbwogICAgICBzZXRUaW1lb3V0KCdyZW1vdmVIaXN0b3J5KCknLDUwMCk7IC8vIHdhaXQgZm9yIHRoZSBtYXAgdG8gbW92ZSBzbyB0aGF0IHRoZSBtb3ZlZW5kIGlzIG5vdCBmaXJlZAogICAge3JkZWxpbX0KICAgIAogICAgZnVuY3Rpb24gcmVtb3ZlSGlzdG9yeSgpIHtsZGVsaW19CiAgICAgIHZhciBkaXZfaGlzdG9yeSA9ICIiOwogICAgICB2aWV3X2hpc3RvcnkgPSBbXTsgIC8vIHJlc2V0IHRoZSBoaXN0b3J5CiAgICAgIGRpdl9oaXN0b3J5ID0gX2Rpdmhpc3Rvcnl0ZXh0OwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2X2hpc3RvcnkiKS5pbm5lckhUTUwgPSBkaXZfaGlzdG9yeTsKICAgICAgcmV0dXJuaW5nVG9TYXZlZCA9IGZhbHNlOwogICAge3JkZWxpbX0KCiAgICAvLyA9PT09PT09PT09PSBnb0hpc3RvcnkgPT09PT09PT09PT09PT09PT09CiAgICAvLyBnb2VzIHRvIGEgY2VydGFpbiBwbGFjZSBpbiB0aGUgdmlldyBoaXN0b3J5CiAgICBmdW5jdGlvbiBnb0hpc3RvcnkoaSkge2xkZWxpbX0KICAgICAgdmFyIHg9dmlld19oaXN0b3J5W2ldWzBdOwogICAgICB2YXIgeT12aWV3X2hpc3RvcnlbaV1bMV07CiAgICAgIHZhciB6PXZpZXdfaGlzdG9yeVtpXVsyXTsKICAgICAgdmlld19oaXN0b3J5PXZpZXdfaGlzdG9yeS5zcGxpY2UoMCxpKTsKICAgICAgbWFwLnNldENlbnRlcihuZXcgR0xhdExuZyh4LHkpLHopOwogICAge3JkZWxpbX0KICAgIC8vID09PT1FbmQgaGlzdG9yeSBmdW5jdGlvbnMgPT09PT09PT0KICAgIHsvaWZ9IHsqIGVuZCBpZiAkbWFwLmZ1bGxTY3JlZW4gbmVxIDMgKn0KCiAgICB7KiBDYWxjdWxhdGUgdGhlIHdpZHRoIGFuZCB3ZWlnaHQgb2YgdGhlIG1hcCBkaXYsIGl0IHBlcm1pdHMgdGhlIHVzZSBvZiBwZXJjZW50YWdlcyBvciBmaXhlZCBwaXhlbCBzaXplICp9CiAgICB2YXIgbXlXaWR0aCA9IHskbWFwLm1hcFdpZHRofTsKICAgIHtpZiAkbWFwLm1vZGUgZXEgIk5vcm1hbCJ9dmFyIG1pbnVzVyA9IHtpZiAkbWFwLnNpZGViYXIgZXEgMSBhbmQgJG1hcC5mdWxsU2NyZWVuIGVxIDB9MjEwe2Vsc2V9MjB7L2lmfXtpZiAoJG1hcC5MZWdlbmRQb3MgZXEgMCBhbmQgJG1hcC5MZWdlbmRGZWF0dXJlIG5lcSAnMCcgYW5kICgkbWFwLkFsYnVtTGVnZW5kIG9yICRtYXAuUGhvdG9MZWdlbmQgb3IgKGlzc2V0KCRtYXAucmVncm91cEl0ZW1zKSBhbmQgJG1hcC5yZWdyb3VwSXRlbXMpKSkgb3IgKCRtYXAuRmlsdGVyRmVhdHVyZSBuZXEgJzAnIGFuZCBpc3NldCgkbWFwLlNob3dGaWx0ZXJzKSBhbmQgJG1hcC5TaG93RmlsdGVycyBlcSAnMicpfSsxNTV7L2lmfTt7L2lmfQogICAge2lmICRtYXAuVGh1bWJCYXJQb3MgZXEgIjMiIG9yICRtYXAuVGh1bWJCYXJQb3MgZXEgIjQifQogICAgICBtaW51c1cgKz17JG1hcC5UaHVtYkhlaWdodH0rMzA7CiAgICAgIGlmIChJRVZlcnNpb24pIG1pbnVzVyArPSAxMDsKICAgIHsvaWZ9CiAgICB7aWYgJG1hcC5tb2RlIGVxICJQaWNrIn0gdmFyIG1pbnVzVyA9IDQxMDsgey9pZn0KICAgIHtpZiAkbWFwLldpZHRoRm9ybWF0IGVxICIlIn0gbXlXaWR0aCA9IGdldG1hcHdpZHRoKG15V2lkdGgsbWludXNXKTsgey9pZn0KCiAgICB2YXIgbXlIZWlnaHQgPSB7JG1hcC5tYXBIZWlnaHR9OwogICAge2lmICRtYXAubW9kZSBlcSAiTm9ybWFsIn12YXIgbWludXNIID0gMTUwe2lmICRtYXAuZnVsbFNjcmVlbiBlcSAyfS0xMjB7L2lmfXtpZiAkbWFwLlNob3dGaWx0ZXJzIGVxIDMgb3IgJG1hcC5TaG93RmlsdGVycyBlcSA0fSsyNXsvaWZ9e2lmICRtYXAuTGVnZW5kUG9zIGVxIDIgb3IgJG1hcC5MZWdlbmRQb3MgZXEgM30rOTB7L2lmfXtpZiAkbWFwLlRodW1iQmFyUG9zIGVxICIxIiBvciAkbWFwLlRodW1iQmFyUG9zIGVxICIyIn0reyRtYXAuVGh1bWJIZWlnaHR9KzI1ey9pZn07ey9pZn0KICAgIHtpZiAkbWFwLm1vZGUgZXEgIlBpY2sifSB2YXIgbWludXNIID0gMTU1OyB7L2lmfQogICAge2lmICRtYXAuSGVpZ2h0Rm9ybWF0IGVxICIlIn0gbXlIZWlnaHQgPSBnZXRtYXBoZWlnaHQobXlIZWlnaHQsbWludXNIKTsgey9pZn0KCiAgICB2YXIgbXlab29tID0geyRtYXAuem9vbUxldmVsfTsKCiAgICB2YXIgbWFya2VycyA9IFtdOwogICAgdmFyIFJtYXJrZXJzID0gW107CiAgICB2YXIgYXJyb3dtYXJrZXI7CiAgICB2YXIgYm91bmRzID0gbmV3IEdMYXRMbmdCb3VuZHMoKTsKICAgIHZhciBtYXhab29tID0gMTA7IC8vIGRlZmF1bHQgdG8gc29tZXdoYXQgem9vbWVkLW91dAoKICAgIHtpZiAkbWFwLmZ1bGxTY3JlZW4gbmVxIDN9CiAgICAvKiBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgVGh1bWJuYWlsIGJhciAqLwogICAgZnVuY3Rpb24gc2hvd19hcnJvdyhudW1iZXIseGNvb3JkLHljb29yZCx0eXBlKXtsZGVsaW19CiAgICAgIGlmIChERUJVR0lORk8pIEdMb2cud3JpdGUoJ1Nob3cgJytudW1iZXIrJywnK3R5cGUpOwogICAgICBpZiAoREVCVUdJTkZPKSBHTG9nLndyaXRlKCdIaWRpbmcgdGhlIEljb24nKTsKICAgICAgbWFya2VyRGlzcGxheShudW1iZXIsMCx0eXBlKTsKICAgICAgdmFyIEljb24gPSBuZXcgR0ljb24oKTsKICAgICAgSWNvbi5pbWFnZSA9ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL2ltYWdlcy9hcnJvdy5wbmcifSI7CiAgICAgIEljb24uaWNvblNpemUgPSBuZXcgR1NpemUoMjAsIDMwKTsKICAgICAgSWNvbi5pY29uQW5jaG9yID0gbmV3IEdQb2ludCgxMCwgMzApOwogICAgICBJY29uLmluZm9XaW5kb3dBbmNob3IgPSBuZXcgR1BvaW50KDksIDIpOwogICAgICB2YXIgUG9pbnQgPSBuZXcgR0xhdExuZyh4Y29vcmQsIHljb29yZCk7CiAgICAgIHZhciBuZXdhcnJvdyA9IG5ldyBHTWFya2VyKFBvaW50LCBJY29uKTsKICAgICAgYXJyb3cgPSBuZXdhcnJvdzsKICAgICAgbWFwLmFkZE92ZXJsYXkobmV3YXJyb3cpOwogICAge3JkZWxpbX0KCiAgICBmdW5jdGlvbiBoaWRlX2Fycm93KG51bWJlcix0eXBlKXtsZGVsaW19CiAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJzW251bWJlcl07CiAgICAgIGlmICh0eXBlICE9ICdub3JtYWwnKSBtYXJrZXIgPSBSbWFya2Vyc1tudW1iZXJdOwogICAgICBpZiAoREVCVUdJTkZPKSBHTG9nLndyaXRlKCdoaWRlOiAnK251bWJlcisnLCcrdHlwZSsnO215em9vbTonK215Wm9vbSsnOyBsb3c6JyttYXJrZXIuc2hvd0xvdysnLGhpZ2g6JyttYXJrZXIuc2hvd0hpZ2gpOwogICAgICBpZiAobXlab29tIDw9IG1hcmtlci5zaG93TG93ICYmIG15Wm9vbSA+PSBtYXJrZXIuc2hvd0hpZ2gpIHtsZGVsaW19CiAgICAgICAgaWYgKERFQlVHSU5GTykgR0xvZy53cml0ZSgnU2hvd2luZyB0aGUgSWNvbicpOwogICAgICAgIG1hcmtlckRpc3BsYXkobnVtYmVyLDEsdHlwZSk7IC8vbWFya2VyLmRpc3BsYXkodHJ1ZSk7CiAgICAgIHtyZGVsaW19CiAgICAgIG1hcC5yZW1vdmVPdmVybGF5KGFycm93KTsKICAgIHtyZGVsaW19CiAgICB7L2lmfSB7KiBlbmQgJG1hcC5mdWxsc2NyZWVuIG5lcSAzICp9CgogICAgZnVuY3Rpb24gU2hvd01lVGhlTWFwKCl7bGRlbGltfQoKICAgICBpZiAoREVCVUdJTkZPKSBHTG9nLndyaXRlKCdJbml0aWFsaXppbmcgTWFwJyk7CiAgICAgdmFyIG1hcmtlcl9udW0gPSAwOwogICAgIHZhciBSbWFya2VyX251bSA9IDA7CgogICAgaWYgKERFQlVHSU5GTykgR0xvZy53cml0ZSgnQ3JlYXRlIHRoZSBNYXAnKTsKICAgIC8vR29vZ2xlIE1hcCBpbXBsZW1lbnRhdGlvbgogICAgbWFwID0gbmV3IEdNYXAyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXAiKSk7CgogICAgaWYgKERFQlVHSU5GTykgR0xvZy53cml0ZSgnQWRkIGNvbnRyb2xzJyk7CiAgIHtpZiAkbWFwLk1hcENvbnRyb2xUeXBlIG5lcSAiTm9uZSIgYW5kICRtYXAuTWFwQ29udHJvbFR5cGUgbmVxICJTbWFsbCIgYW5kICRtYXAuTWFwQ29udHJvbFR5cGUgbmVxICJMYXJnZSJ9CiAgICAgbWFwLmFkZENvbnRyb2wobmV3IE15UGFuWm9vbUNvbnRyb2xzKCkpOwogICAgIHtpZiAoaXNzZXQoJG1hcC5zaG93TWFwVHlwZSkgYW5kICgkbWFwLnNob3dNYXBUeXBlKSl9bWFwLmFkZENvbnRyb2wobmV3IE15TWFwVHlwZUNvbnRyb2xzKCkpO3svaWZ9CiAgIHsvaWZ9CiAgIAogICAvLyA9PT09PT09PT09PT09PT09PSBpbmZvT3BlbmVkIExJU1RFTkVSID09PT09PT09PT09CiAgIEdFdmVudC5hZGRMaXN0ZW5lcihtYXAsICJpbmZvd2luZG93b3BlbiIsIGZ1bmN0aW9uKCkgIHtsZGVsaW19CiAgICAgaW5mb09wZW5lZCA9IHRydWU7CS8vIHNldCBpbmZvT3BlbmVkIHRvIHRydWUgdG8gY2hhbmdlIHRoZSBoaXN0b3J5IHRleHQKICAge3JkZWxpbX0pOwogICAvLyA9PT09PT09PT09PT09PT09PSBpbmZvQ2xvc2VkIExJU1RFTkVSID09PT09PT09PT09CiAgIEdFdmVudC5hZGRMaXN0ZW5lcihtYXAsICJpbmZvd2luZG93Y2xvc2UiLCBmdW5jdGlvbigpICB7bGRlbGltfQogICAgIGluZm9PcGVuZWQgPSBmYWxzZTsJLy8gc2V0IGluZm9PcGVuZWQgdG8gZmFsc2UKICAge3JkZWxpbX0pOwoKICAgIC8vUmVnaXN0ZXIgdGhlIGtleSBoYW5kbGVycwogICAgbmV3IEdLZXlib2FyZEhhbmRsZXIobWFwKTsKCiAgICAvL1Nob3cgYW5kIHBvc2l0aW9uIHRoZSBNQVAgTGFyZ2UgY29udHJvbAogICAge2lmICRtYXAuTWFwQ29udHJvbFR5cGUgZXEgIkxhcmdlIn0gbWFwLmFkZENvbnRyb2wobmV3IEdMYXJnZU1hcENvbnRyb2woKSxuZXcgR0NvbnRyb2xQb3NpdGlvbih7JG1hcC5NYXBDb250cm9sUG9zfSxuZXcgR1NpemUoeyRtYXAuTWFwQ29udHJvbFBvc09mZlh9LHskbWFwLk1hcENvbnRyb2xQb3NPZmZZfSkpKTsgey9pZn0KICAgIC8vU2hvdyBhbmQgcG9zaXRpb24gdGhlIE1BUCBTbWFsbCBjb250cm9sCiAgICB7aWYgJG1hcC5NYXBDb250cm9sVHlwZSBlcSAiU21hbGwifSBtYXAuYWRkQ29udHJvbChuZXcgR1NtYWxsTWFwQ29udHJvbCgpLG5ldyBHQ29udHJvbFBvc2l0aW9uKHskbWFwLk1hcENvbnRyb2xQb3N9LG5ldyBHU2l6ZSh7JG1hcC5NYXBDb250cm9sUG9zT2ZmWH0seyRtYXAuTWFwQ29udHJvbFBvc09mZll9KSkpOyB7L2lmfQogICAge2lmICgkbWFwLk1hcENvbnRyb2xUeXBlIGVxICJTbWFsbCIgb3IgJG1hcC5NYXBDb250cm9sVHlwZSBlcSAiTGFyZ2UiKSBhbmQgKGlzc2V0KCRtYXAuc2hvd01hcFR5cGUpIGFuZCAoJG1hcC5zaG93TWFwVHlwZSkpfW1hcC5hZGRDb250cm9sKG5ldyBHTWFwVHlwZUNvbnRyb2woKSk7ey9pZn0KCiAgICAge2lmIGlzc2V0ICgkbWFwLkdab29tKSBhbmQgJG1hcC5HWm9vbX0KICAgICAgIG1hcC5hZGRDb250cm9sKG5ldyBHWm9vbUNvbnRyb2woKSxuZXcgR0NvbnRyb2xQb3NpdGlvbih7JG1hcC5HWlBvc30sbmV3IEdTaXplKHskbWFwLkdaUG9zT2ZmWH0seyRtYXAuR1pQb3NPZmZZfSkpKTsKICAgICB7L2lmfQogICAgIGlmIChERUJVR0lORk8pIEdMb2cud3JpdGUoJ0NvbnRyb2xzIEFkZGVkJyk7CiAgICAvL05lZWRlZCB0byBzaG93IHRoZSBzY2FsZQogICAge2lmICRtYXAubW9kZSBlcSAiUGljayIgb3IgJG1hcC5zaG93U2NhbGV9IG1hcC5hZGRDb250cm9sKG5ldyBHU2NhbGVDb250cm9sKCkpOyB7L2lmfQoKICAgIC8vSW5pdGlhbGl6ZSB0aGUgem9vbSBhbmQgY2VudGVyIG9mIHRoZSBtYXAgd2hlcmUgaXQgbmVlZCB0byBiZSBhbmQgdGhlIE1hcCBUeXBlCiAgICBpZiAoREVCVUdJTkZPKSBHTG9nLndyaXRlKCdTZXQgdGhlIGNlbnRlciwgem9vbSBhbmQgbWFwIHR5cGUnKTsKICAgIGlmIChERUJVR0lORk8pIEdMb2cud3JpdGUoInskbWFwLmNlbnRlckxvbmdMYXR9ICIrbXlab29tKyIgeyRtYXAubWFwVHlwZX0iKTsKICAgIHZhciBwb2ludCA9IG5ldyBHTGF0TG5nICh7JG1hcC5jZW50ZXJMb25nTGF0fSk7CiAgICBtYXAuc2V0Q2VudGVyKHBvaW50LCBteVpvb20seyRtYXAubWFwVHlwZX0pOwogICAge2lmICRtYXAubW9kZSBlcSAiUGljayJ9CiAgICBtYXAuYWRkT3ZlcmxheShuZXcgR01hcmtlcihwb2ludCkpOwogICAgey9pZn0KICAgIG1hcC5zYXZlUG9zaXRpb24oKTsKICAgIGlmIChERUJVR0lORk8pIEdMb2cud3JpdGUoJ2RvbmUhJyk7CgogICAgaWYgKERFQlVHSU5GTykgR0xvZy53cml0ZSgnQ3JlYXRpbmcgdGhlIHRvb2x0aXAgZGl2Jyk7CiAgICB0b29sdGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBtYXAuZ2V0UGFuZShHX01BUF9GTE9BVF9QQU5FKS5hcHBlbmRDaGlsZCh0b29sdGlwKTsKICAgIHRvb2x0aXAuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKICAgIGlmIChERUJVR0lORk8pIEdMb2cud3JpdGUoJ2RvbmUhJyk7CgogICAge2lmICRtYXAuZnVsbFNjcmVlbiBlcSAzfQogICAgaWYgKGRvY3VtZW50LmFsbCYmd2luZG93LmF0dGFjaEV2ZW50KSB7bGRlbGltfSAvLyBJRS1XaW4KICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCJvbnJlc2l6ZSIsIGZ1bmN0aW9uKCkge2xkZWxpbX10aGlzLm1hcC5vblJlc2l6ZSgpe3JkZWxpbX0gKTsKICAgIHtyZGVsaW19IGVsc2UgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7bGRlbGltfSAvLyBPdGhlcnMKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIGZ1bmN0aW9uKCkge2xkZWxpbX10aGlzLm1hcC5vblJlc2l6ZSgpe3JkZWxpbX0sIGZhbHNlICk7CiAgICB7cmRlbGltfQogICAgey9pZn0KCiAgICB7aWYgJG1hcC5tb2RlIGVxICJOb3JtYWwifQogICAgLy9BZGQgYSBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIG1hcmtlcnMvU2xpZGVyIHdoZW4gdGhlIHpvb20gY2hhbmdlCiAgICBHRXZlbnQuYWRkTGlzdGVuZXIobWFwLCAiem9vbWVuZCIsIGZ1bmN0aW9uKG9sZFpvb20sIHpvb20pIHtsZGVsaW19CiAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykge2xkZWxpbX0gLy9VcGRhdGluZyB0aGUgbm9ybWFsIGl0ZW1zCiAgICAgICAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJzW2ldOwogICAgICAgICAgICBpZiAoem9vbSA8PSBtYXJrZXIuc2hvd0xvdyAmJiB6b29tID49IG1hcmtlci5zaG93SGlnaCkge2xkZWxpbX0KICAgICAgICAgICAgICBtYXJrZXJEaXNwbGF5KGksMSwnbm9ybWFsJyk7IC8vbWFya2VyLmRpc3BsYXkodHJ1ZSk7CiAgICAgICAgICAgICAgdmFyIENvcnJlY3RBID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RodW1iJytpKTsKICAgICAgICAgICAgICBpZiAoQ29ycmVjdEEgIT0gbnVsbCApIENvcnJlY3RBLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKICAgICAgICAgICAge3JkZWxpbX0KICAgICAgICAgICAgZWxzZSB7bGRlbGltfQogICAgICAgICAgICAgIG1hcmtlckRpc3BsYXkoaSwwLCdub3JtYWwnKTsgLy9tYXJrZXIuZGlzcGxheShmYWxzZSk7CiAgICAgICAgICAgICAgdmFyIENvcnJlY3RBID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RodW1iJytpKTsKICAgICAgICAgICAgICBpZiAoQ29ycmVjdEEgIT0gbnVsbCkgQ29ycmVjdEEuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAge3JkZWxpbX0KICAgICAgICB7cmRlbGltfQogICAgICAgIGZvciAodmFyIGk9MDsgaSA8IFJtYXJrZXJzLmxlbmd0aDsgaSsrKSB7bGRlbGltfSAvL1VwZGF0aW5nIHRoZSBSZWdyb3VwZWQgaXRlbXMKICAgICAgICAgICAgdmFyIG1hcmtlciA9IFJtYXJrZXJzW2ldOwogICAgICAgICAgICBpZiAoem9vbSA8PSBtYXJrZXIuc2hvd0xvdyAmJiB6b29tID49IG1hcmtlci5zaG93SGlnaCkge2xkZWxpbX0KICAgICAgICAgICAgICBtYXJrZXJEaXNwbGF5KGksMSwnUmVncm91cCcpOyAvL21hcmtlci5kaXNwbGF5KHRydWUpOwogICAgICAgICAgICB7cmRlbGltfQogICAgICAgICAgICBlbHNlIHtsZGVsaW19CiAgICAgICAgICAgICAgbWFya2VyRGlzcGxheShpLDAsJ1JlZ3JvdXAnKTsgLy9tYXJrZXIuZGlzcGxheShmYWxzZSk7CiAgICAgICAgICAgIHtyZGVsaW19CiAgICAgICAge3JkZWxpbX0KICAgICAgICBteVpvb20gPSAxOS16b29tOwogICAgICAgIHZhciB6b29tID0gMTktem9vbTsKICAgICAgICB2YXIgb2xkWm9vbSA9IDE5LW9sZFpvb207CiAgICAgICAge2lmICRtYXAuTWFwQ29udHJvbFR5cGUgbmVxICJOb25lIiBhbmQgJG1hcC5NYXBDb250cm9sVHlwZSBuZXEgIlNtYWxsIiBhbmQgJG1hcC5NYXBDb250cm9sVHlwZSBuZXEgIkxhcmdlIn0KICAgICAgICAgICAgaWYgKCFJRVZlcnNpb24gfHwoSUVWZXJzaW9uICYmIElFVmVyc2lvbiA+PSA3KSkge2xkZWxpbX0KICAgICAgICAgICAgICBkb2N1bWVudC5pbWFnZXNbJ3onK3pvb21dLnNyYyA9ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy8ifXskbWFwLk1hcENvbnRyb2xUeXBlfS9TbGlkZVNlbC5wbmciOwogICAgICAgICAgICAgIGRvY3VtZW50LmltYWdlc1sneicrb2xkWm9vbV0uc3JjID0gIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL2NvbnRyb2xzLyJ9eyRtYXAuTWFwQ29udHJvbFR5cGV9L1NsaWRlTm90Y2gucG5nIjsKICAgICAgICAgICAge3JkZWxpbX0gZWxzZSB7bGRlbGltfQogICAgICAgICAgICAgIGRvY3VtZW50LmltYWdlc1sneicrem9vbV0uc3JjID0gIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL2JsYW5rLmdpZiJ9IjsKICAgICAgICAgICAgICBkb2N1bWVudC5pbWFnZXNbJ3onK3pvb21dLnN0eWxlLmZpbHRlciA9ICJmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ne2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvIn17JG1hcC5NYXBDb250cm9sVHlwZX0vU2xpZGVTZWwucG5nJykiOwogICAgICAgICAgICAgIGRvY3VtZW50LmltYWdlc1sneicrb2xkWm9vbV0uc3JjID0gIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL2JsYW5rLmdpZiJ9IjsKICAgICAgICAgICAgICBkb2N1bWVudC5pbWFnZXNbJ3onK29sZFpvb21dLnN0eWxlLmZpbHRlciA9ICJmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ne2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvIn17JG1hcC5NYXBDb250cm9sVHlwZX0vU2xpZGVOb3RjaC5wbmcnKSI7CiAgICAgICAgICAgIHtyZGVsaW19CiAgICAgICAgey9pZn0KICAgIHtyZGVsaW19KTsKICAgIGlmIChERUJVR0lORk8pIEdMb2cud3JpdGUoJ1pvb20gTGlzdGVuZXIgZW50ZXJlZCcpOwoKICAgIC8vIENyZWF0ZSB0aGUgb3ZlcnZpZXcgTWFwCiAgICB7aWYgJG1hcC5Hb29nbGVPdmVydmlld30KICAgICAgbWFwLmFkZENvbnRyb2wobmV3IEdPdmVydmlld01hcENvbnRyb2wobmV3IEdTaXplKHskbWFwLkdPU2l6ZVh9LCB7JG1hcC5HT1NpemVZfSkpKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtsZGVsaW19CiAgICAgIHZhciBvbWFwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXBfb3ZlcnZpZXciKTsKICAgICAgdmFyIG1hcGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXAiKTsKICAgICAgb21hcC5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CiAgICAgIG9tYXAuZmlyc3RDaGlsZC5zdHlsZS5iYWNrZ3JvdW5kID0gInskbWFwLmJvZHljb2xvcn0iOwogICAgICBvbWFwLmZpcnN0Q2hpbGQuc3R5bGUuYm9yZGVyVG9wID0gIjFweCBzb2xpZCBibGFjayI7CiAgICAgIG9tYXAuZmlyc3RDaGlsZC5zdHlsZS5ib3JkZXJMZWZ0ID0gIjFweCBzb2xpZCBibGFjayI7CiAgICAgIG9tYXAuZmlyc3RDaGlsZC5maXJzdENoaWxkLnN0eWxlLmJvcmRlciA9ICIxcHggc29saWQgYmxhY2siOwoKICAgICAge2lmICRtYXAuR09Qb3MgZXEgIjMiIG9yICRtYXAuR09Qb3MgZXEgIjEifQogICAgICAgIG9tYXAuc3R5bGUucmlnaHQgPSAieyRtYXAuR09Qb3NPZmZYfXB4IjsKICAgICAge2Vsc2V9CiAgICAgICAgb21hcC5zdHlsZS5sZWZ0ID0gInskbWFwLkdPUG9zT2ZmWH1weCI7CiAgICAgIHsvaWZ9CiAgICAgIHtpZiAkbWFwLkdPUG9zIGVxICIwIiBvciAkbWFwLkdPUG9zIGVxICIxIn0KICAgICAgICAgb21hcC5zdHlsZS50b3AgPSAieyRtYXAuR09Qb3NPZmZZfXB4IjsKICAgICAge2Vsc2V9CiAgICAgICAgIG9tYXAuc3R5bGUuYm90dG9tID0gInskbWFwLkdPUG9zT2ZmWX1weCI7CiAgICAgIHsvaWZ9CiAgICAgIG1hcGRpdi5hcHBlbmRDaGlsZChvbWFwKTsKICAgICAge3JkZWxpbX0sIDEpOwogICAgey9pZn0KICAgIGlmIChERUJVR0lORk8pIEdMb2cud3JpdGUoJ092ZXJ2aWV3IGNyZWF0ZWQnKTsKCiAgICBmdW5jdGlvbiBzaG93VG9vbHRpcChtYXJrZXIpIHtsZGVsaW19CiAgICAgIHRvb2x0aXAuaW5uZXJIVE1MID0gbWFya2VyLnRvb2x0aXA7CiAgICAgIHZhciBwb2ludD1tYXAuZ2V0Q3VycmVudE1hcFR5cGUoKS5nZXRQcm9qZWN0aW9uKCkuZnJvbUxhdExuZ1RvUGl4ZWwobWFwLmZyb21EaXZQaXhlbFRvTGF0TG5nKG5ldyBHTGF0TG5nKDAsMCksdHJ1ZSksbWFwLmdldFpvb20oKSk7CiAgICAgIHZhciBvZmZzZXQ9bWFwLmdldEN1cnJlbnRNYXBUeXBlKCkuZ2V0UHJvamVjdGlvbigpLmZyb21MYXRMbmdUb1BpeGVsKG1hcmtlci5nZXRQb2ludCgpLG1hcC5nZXRab29tKCkpOwogICAgICB2YXIgYW5jaG9yPW1hcmtlci5nZXRJY29uKCkuaWNvbkFuY2hvcjsKICAgICAgdmFyIHdpZHRoPW1hcmtlci5nZXRJY29uKCkuaWNvblNpemUud2lkdGg7CiAgICAgIHZhciBoZWlnaHQ9dG9vbHRpcC5jbGllbnRIZWlnaHQ7CiAgICAgIHZhciBwb3MgPSBuZXcgR0NvbnRyb2xQb3NpdGlvbihHX0FOQ0hPUl9UT1BfTEVGVCwgbmV3IEdTaXplKG9mZnNldC54IC0gcG9pbnQueCAtIGFuY2hvci54ICsgd2lkdGgsIG9mZnNldC55IC0gcG9pbnQueSAtYW5jaG9yLnkgLWhlaWdodCkpOwogICAgICBwb3MuYXBwbHkodG9vbHRpcCk7CiAgICAgIHRvb2x0aXAuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSI7CiAgICB7cmRlbGltfQoKICAgIHZhciBCYXNlSWNvbiA9IG5ldyBHSWNvbigpOwogICAgQmFzZUljb24uc2hhZG93ID0gIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcl9zaGFkb3cucG5nIn0iOwogICAgQmFzZUljb24uaWNvblNpemUgPSBuZXcgR1NpemUoeyRtYXAuTWFya2VyU2l6ZVh9LHskbWFwLk1hcmtlclNpemVZfSk7CiAgICBCYXNlSWNvbi5zaGFkb3dTaXplID0gbmV3IEdTaXplKHskbWFwLk1hcmtlclNpemVYfSsxNSx7JG1hcC5NYXJrZXJTaXplWX0pOwogICAgQmFzZUljb24uaWNvbkFuY2hvciA9IG5ldyBHUG9pbnQoNiwgMjApOwogICAgQmFzZUljb24uaW5mb1dpbmRvd0FuY2hvciA9IG5ldyBHUG9pbnQoNSwgMSk7CgogICAge2lmIChpc3NldCgkbWFwLnJlZ3JvdXBJdGVtcykgYW5kICRtYXAucmVncm91cEl0ZW1zKX0KICAgIHZhciByZXBsYWNlSWNvbiA9IG5ldyBHSWNvbihCYXNlSWNvbik7CiAgICByZXBsYWNlSWNvbi5pY29uU2l6ZSA9IG5ldyBHU2l6ZSh7JG1hcC5SZXBsYWNlTWFya2VyU2l6ZVh9LHskbWFwLlJlcGxhY2VNYXJrZXJTaXplWX0pOwogICAgcmVwbGFjZUljb24uc2hhZG93U2l6ZSA9IG5ldyBHU2l6ZSh7JG1hcC5SZXBsYWNlTWFya2VyU2l6ZVh9KzE1LHskbWFwLlJlcGxhY2VNYXJrZXJTaXplWX0pOwogICAgcmVwbGFjZUljb24uaWNvbkFuY2hvciA9IG5ldyBHUG9pbnQoeyRtYXAucmVwbGFjZUFuY2hvclBvc30pOwogICAgcmVwbGFjZUljb24uaW1hZ2UgPSAie2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC9pbWFnZXMvbXVsdGkvYCRtYXAucmVncm91cEljb25gLnBuZyJ9IjsKCiAgICBmdW5jdGlvbiBDcmVhdGVSZWdyb3VwKGxhdCxsb24sIHNob3dMb3csIHNob3dIaWdoLCBuYkRpcmVjdCwgbmJJdGVtcywgbmJHcm91cHMpe2xkZWxpbX0KICAgICAgdmFyIHBvaW50ID0gbmV3IEdMYXRMbmcobGF0LGxvbik7CiAgICAgIHtpZiAhaXNzZXQoJG1hcC5GaWx0ZXIpIG9yIChpc3NldCgkbWFwLkZpbHRlcikgYW5kICgkbWFwLkZpbHRlcnx0cnVuY2F0ZTo1OiIiIG5lcSAnUm91dGUnKSl9Ym91bmRzLmV4dGVuZChwb2ludCk7ey9pZn0KICAgICAgdmFyIG1hcmtlciA9IG5ldyBHTWFya2VyKHBvaW50LHJlcGxhY2VJY29uKQogICAgICBtYXJrZXIub25tYXAgPSB0cnVlOwogICAgICBtYXJrZXIuc2hvd0hpZ2ggPSBzaG93SGlnaDsKICAgICAgbWFya2VyLnNob3dMb3cgPSBzaG93TG93OwogICAgICBHRXZlbnQuYWRkTGlzdGVuZXIobWFya2VyLCJtb3VzZW92ZXIiLCBmdW5jdGlvbigpIHtsZGVsaW19CiAgICAgICAgc2hvd1Rvb2x0aXAobWFya2VyKTsKICAgICAge3JkZWxpbX0pOwogICAgICBHRXZlbnQuYWRkTGlzdGVuZXIobWFya2VyLCJtb3VzZW91dCIsIGZ1bmN0aW9uKCkge2xkZWxpbX0KCXRvb2x0aXAuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKICAgICAge3JkZWxpbX0pOwogICAgICBHRXZlbnQuYWRkTGlzdGVuZXIobWFya2VyLCAiY2xpY2siLCBmdW5jdGlvbigpIHtsZGVsaW19CiAgICAgICAgdG9vbHRpcC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iOwogICAgICAgIG1hcC5zZXRDZW50ZXIocG9pbnQsc2hvd0xvdysxKTsKICAgICAge3JkZWxpbX0pOwogICAgICB2YXIgZGlyZWN0VGV4dCA9IG5iRGlyZWN0PjAgPyAiIituYkRpcmVjdCsiIGl0ZW1zIGFuZCAiKyAobmJJdGVtcy1uYkRpcmVjdCkgKyIgbW9yZSAiIDogIiI7CiAgICAgIHZhciBzdWJncm91cFRleHQgPSBuYkdyb3Vwcz4wID8gIiAoIitkaXJlY3RUZXh0KyJpbiAiK25iR3JvdXBzKyIgc3ViZ3JvdXBzKSIgOiAiIjsKICAgICAgdmFyIHRpdGxlID0gJycrbmJJdGVtcysnIGVsZW1lbnRzIGhlcmUnK3N1Ymdyb3VwVGV4dCsnLiBDbGljayB0byB6b29tIGluLic7CiAgICAgIG1hcmtlci50b29sdGlwID0gJzxkaXYgY2xhc3M9InRvb2x0aXAiPicrdGl0bGUrJzxcL2Rpdj4nOwogICAgICBtYXJrZXIudHlwZSA9ICdSZWdyb3VwJzsKICAgICAgUm1hcmtlcnNbUm1hcmtlcl9udW1dID0gbWFya2VyOwogICAgICBSbWFya2VyX251bSsrOwogICAgICBtYXAuYWRkT3ZlcmxheShtYXJrZXIpOwogICAge3JkZWxpbX0KICAgIHsvaWZ9CgogICAgZnVuY3Rpb24gQ3JlYXRlTWFya2VyKGxhdCwgbG9uLCBpdGVtTGluaywgdGl0bGUsIHRodW1iTGluaywgY3JlYXRlZCwgem9vbWxldmVsLCB0aHcsIHRoaCwgc3VtbWFyeSwgZGVzY3JpcHRpb24sIGljb24sIHNob3dMb3csIHNob3dIaWdoLCBoaWRlLCB0eXBlKSB7bGRlbGltfQogICAgICB2YXIgaHRtbHMgPSBbe2ZvcmVhY2ggZnJvbT0kbWFwLmluZm93aW5kb3dzIGl0ZW09aW5mb3dpbmRvdyBrZXk9bnVtfXtpZiAkbnVtID4wfSx7L2lmfXskaW5mb3dpbmRvd317L2ZvcmVhY2h9XTsKICAgICAgdmFyIGxhYmVscyA9IFt7Zm9yZWFjaCBmcm9tPSRtYXAuTGFiZWxzIGl0ZW09TGFiZWxzIGtleT1udW19e2lmICRudW0gPjB9LHsvaWZ9InskTGFiZWxzfSJ7L2ZvcmVhY2h9XTsKICAgICAgdmFyIHBvaW50ID0gbmV3IEdMYXRMbmcobGF0LGxvbik7CiAgICAgIHtpZiAhaXNzZXQoJG1hcC5GaWx0ZXIpIG9yIChpc3NldCgkbWFwLkZpbHRlcikgYW5kICgkbWFwLkZpbHRlcnx0cnVuY2F0ZTo1OiIiIG5lcSAnUm91dGUnKSl9CiAgICAgIGJvdW5kcy5leHRlbmQocG9pbnQpOwogICAgICBtYXhab29tID0gTWF0aC5tYXgobWF4Wm9vbSwgem9vbWxldmVsKTsKICAgICAgey9pZn0KICAgICAgdmFyIG1hcmtlciA9IG5ldyBHTWFya2VyKHBvaW50LCBpY29uKTsKICAgICAgbWFya2VyLm9ubWFwID0gdHJ1ZTsKICAgICAgbWFya2VyLnNob3dIaWdoID0gc2hvd0hpZ2g7CiAgICAgIG1hcmtlci5zaG93TG93ID0gc2hvd0xvdzsKICAgICAgR0V2ZW50LmFkZExpc3RlbmVyKG1hcmtlciwibW91c2VvdmVyIiwgZnVuY3Rpb24oKSB7bGRlbGltfQogICAgICAgIHNob3dUb29sdGlwKG1hcmtlcik7CiAgICAgIHtyZGVsaW19KTsKICAgICAgR0V2ZW50LmFkZExpc3RlbmVyKG1hcmtlciwibW91c2VvdXQiLCBmdW5jdGlvbigpIHtsZGVsaW19CgkJdG9vbHRpcC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iCiAgICAgIHtyZGVsaW19KTsKICAgICAgR0V2ZW50LmFkZExpc3RlbmVyKG1hcmtlciwgImNsaWNrIiwgZnVuY3Rpb24oKSB7bGRlbGltfQogICAgICAgIHRvb2x0aXAuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIgogICAgICAgIGlmIChodG1scy5sZW5ndGggPiAyKSB7bGRlbGltfQogICAgICAgICAgaHRtbHNbMF0gPSAnPGRpdiBzdHlsZT0id2lkdGg6JytodG1scy5sZW5ndGgqODgrJ3B4Ij4nICsgaHRtbHNbMF0gKyAnPFwvZGl2Pic7CiAgICAgICAge3JkZWxpbX0KICAgICAgICB2YXIgdGFicyA9IFtdOwogICAgICAgIGZvciAodmFyIGk9MDsgaTxodG1scy5sZW5ndGg7IGkrKykge2xkZWxpbX0KICAgICAgICAgICAgdGFicy5wdXNoKG5ldyBHSW5mb1dpbmRvd1RhYihsYWJlbHNbaV0saHRtbHNbaV0pKTsKICAgICAgICB7cmRlbGltfQogICAgICAgIG1hcmtlci5vcGVuSW5mb1dpbmRvd1RhYnNIdG1sKHRhYnMpOwogICAgICB7cmRlbGltfSk7CiAgICAgIG1hcmtlci50b29sdGlwID0gJzxkaXYgY2xhc3M9InRvb2x0aXAiPicrdGl0bGUrJzxcL2Rpdj4nOwogICAgICBtYXJrZXIudHlwZSA9IHR5cGU7CiAgICAgIG1hcmtlcnNbbWFya2VyX251bV0gPSBtYXJrZXI7CiAgICAgIG1hcmtlcl9udW0rKzsKCiAgICAgIG1hcC5hZGRPdmVybGF5KG1hcmtlcik7CgogICAgICBpZiAoaGlkZT09MSkgbWFya2VyRGlzcGxheShtYXJrZXJfbnVtLTEsMCwnbm9ybWFsJyk7CiAgICB7cmRlbGltfQoKICAgLy9DcmVhdGUgdGhlIGJhc2UgZm9yIGFsbCBpY29ucwogICB2YXIgQmFzZUljb24gPSBuZXcgR0ljb24oKTsKICAgQmFzZUljb24uc2hhZG93ID0gIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcl9zaGFkb3cucG5nIn0iOwogICBCYXNlSWNvbi5pY29uU2l6ZSA9IG5ldyBHU2l6ZSh7JG1hcC5NYXJrZXJTaXplWH0seyRtYXAuTWFya2VyU2l6ZVl9KTsKICAgQmFzZUljb24uc2hhZG93U2l6ZSA9IG5ldyBHU2l6ZSh7JG1hcC5NYXJrZXJTaXplWH0rMTUseyRtYXAuTWFya2VyU2l6ZVl9KTsKICAgQmFzZUljb24uaWNvbkFuY2hvciA9IG5ldyBHUG9pbnQoNiwgMjApOwogICBCYXNlSWNvbi5pbmZvV2luZG93QW5jaG9yID0gbmV3IEdQb2ludCg1LCAxKTsKCiAgIHZhciBEZWZhdWx0cGhvdG9JY29uID0gbmV3IEdJY29uKEJhc2VJY29uKTsKICAgRGVmYXVsdHBob3RvSWNvbi5pbWFnZSA9ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL2AkbWFwLnVzZU1hcmtlclNldGAvbWFya2VyX2AkbWFwLmRlZmF1bHRwaG90b2NvbG9yYC5wbmcifSI7CiAgIERlZmF1bHRwaG90b0ljb24uaWNvblNpemUgPSBuZXcgR1NpemUoeyRtYXAuTWFya2VyU2l6ZVh9LHskbWFwLk1hcmtlclNpemVZfSk7CiAgIERlZmF1bHRwaG90b0ljb24uc2hhZG93U2l6ZSA9IG5ldyBHU2l6ZSh7JG1hcC5NYXJrZXJTaXplWH0rMTUseyRtYXAuTWFya2VyU2l6ZVl9KTsKICAgRGVmYXVsdHBob3RvSWNvbi5pY29uQW5jaG9yID0gbmV3IEdQb2ludCh7JG1hcC5NYXJrZXJTaXplWH0vMiwgeyRtYXAuTWFya2VyU2l6ZVl9KTsKCiAgIHZhciBEZWZhdWx0YWxidW1JY29uID0gbmV3IEdJY29uKEJhc2VJY29uKTsKICAgRGVmYXVsdGFsYnVtSWNvbi5pbWFnZSA9ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL2ltYWdlcy9tYXJrZXJzL2AkbWFwLnVzZUFsYnVtTWFya2VyU2V0YC9tYXJrZXJfYCRtYXAuZGVmYXVsdGFsYnVtY29sb3JgLnBuZyJ9IjsKICAgRGVmYXVsdGFsYnVtSWNvbi5pY29uU2l6ZSA9IG5ldyBHU2l6ZSh7JG1hcC5BbGJ1bU1hcmtlclNpemVYfSx7JG1hcC5BbGJ1bU1hcmtlclNpemVZfSk7CiAgIERlZmF1bHRhbGJ1bUljb24uc2hhZG93U2l6ZSA9IG5ldyBHU2l6ZSh7JG1hcC5BbGJ1bU1hcmtlclNpemVYfSsxNSx7JG1hcC5BbGJ1bU1hcmtlclNpemVZfSk7CiAgIERlZmF1bHRhbGJ1bUljb24uaWNvbkFuY2hvciA9IG5ldyBHUG9pbnQoeyRtYXAuQWxidW1NYXJrZXJTaXplWH0vMix7JG1hcC5BbGJ1bU1hcmtlclNpemVZfSk7CgogICB2YXIgRGVmYXVsdGdyb3VwSWNvbiA9IG5ldyBHSWNvbihCYXNlSWNvbik7CiAgIERlZmF1bHRncm91cEljb24uaW1hZ2UgPSAie2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC9pbWFnZXMvbWFya2Vycy9gJG1hcC51c2VHcm91cE1hcmtlclNldGAvbWFya2VyX2AkbWFwLmRlZmF1bHRncm91cGNvbG9yYC5wbmcifSI7CiAgIERlZmF1bHRncm91cEljb24uaWNvblNpemUgPSBuZXcgR1NpemUoeyRtYXAuR3JvdXBNYXJrZXJTaXplWH0seyRtYXAuR3JvdXBNYXJrZXJTaXplWX0pOwogICBEZWZhdWx0Z3JvdXBJY29uLnNoYWRvd1NpemUgPSBuZXcgR1NpemUoeyRtYXAuR3JvdXBNYXJrZXJTaXplWH0rMTUseyRtYXAuR3JvdXBNYXJrZXJTaXplWX0pOwogICBEZWZhdWx0Z3JvdXBJY29uLmljb25BbmNob3IgPSBuZXcgR1BvaW50KHskbWFwLkdyb3VwTWFya2VyU2l6ZVh9LzIseyRtYXAuR3JvdXBNYXJrZXJTaXplWX0pOwoKICAgIHtpZiAoaXNzZXQoJG1hcC5yZWdyb3VwSXRlbXMpIGFuZCAkbWFwLnJlZ3JvdXBJdGVtcyl9CiAgICAvKkxvb3Agb3ZlciB0aGUgUmVncm91cCBNYXJrZXJzIGFuZCBzaG93IHRoZW0gKi8KICAgIHtmb3JlYWNoIGZyb209JG1hcC5SZWdyb3VwSXRlbXMgaXRlbT1ScG9pbnR9CiAgICAgIENyZWF0ZVJlZ3JvdXAoeyRScG9pbnQuZ3BzfSx7JFJwb2ludC5yZWdyb3VwU2hvd0xvd30seyRScG9pbnQucmVncm91cFNob3dIaWdofSx7JFJwb2ludC5kaXJlY3RJdGVtc30sIHskUnBvaW50Lml0ZW1zfSwgeyRScG9pbnQuZ3JvdXBzfSk7CiAgICB7L2ZvcmVhY2h9CiAgICB7L2lmfQoKICAgIC8qIExvb3Agb3ZlciBnYWxsZXJ5IGl0ZW1zIHRoYXQgaGF2ZSBHUFMgY29vcmRpbmF0ZXMKICAgICAgICBhbmQgb3V0cHV0IGNvZGUgdG8gYWRkIHRoZW0gdG8gdGhlIG1hcC4gKi8KICAgIHtpZiAoIWVtcHR5KCRtYXAubWFwUG9pbnRzKSl9CiAgICB7Y291bnRlciBuYW1lPSJudW0iIHN0YXJ0PS0xIHByaW50PWZhbHNlfQogICAge2NvdW50ZXIgbmFtZT0ibnVtMSIgc3RhcnQ9LTEgcHJpbnQ9ZmFsc2V9CiAgICB7Y291bnRlciBuYW1lPSJudW0yIiBzdGFydD0tMSBwcmludD1mYWxzZX0KICAgIHtjb3VudGVyIG5hbWU9Im51bTMiIHN0YXJ0PS0xIHByaW50PWZhbHNlfQogICAge2NvdW50ZXIgbmFtZT0ibnVtNCIgc3RhcnQ9LTEgcHJpbnQ9ZmFsc2V9CiAgICB7Zm9yZWFjaCBmcm9tPSRtYXAubWFwUG9pbnRzIGl0ZW09cG9pbnR9CiAgICAgIHtpZiAkbWFwLlRodW1iQmFyUG9zIG5lcSAiMCIgYW5kICRtYXAuZnVsbFNjcmVlbiBuZXEgM30KICAgICAgLyogY3JlYXRlcyB0aGUgVGh1bWJuYWlsIGJhciBhcyB3ZSBnbyAqLwogICAgICB2YXIgc3R5bGUgPSAiIjsKICAgICAgLy9tYXAuc2V0Q2VudGVyKG5ldyBHUG9pbnQoeyRwb2ludC5ncHN9KSk7CiAgICAgIHNpZGViYXJodG1sICs9ICc8YSBpZD0idGh1bWJ7Y291bnRlciBuYW1lPSJudW0zIn0iICcrc3R5bGUrJyBocmVmPSIjIiBvbmNsaWNrPSJHRXZlbnQudHJpZ2dlcihtYXJrZXJzW3tjb3VudGVyIG5hbWU9Im51bTIifV0sXCdjbGlja1wnKTsgcmV0dXJuIGZhbHNlOyIgb25tb3VzZW92ZXI9InNob3dfYXJyb3coe2NvdW50ZXIgbmFtZT0ibnVtIn0seyRwb2ludC5ncHN9LFwnbm9ybWFsXCcpOyIgb25tb3VzZW91dD0iaGlkZV9hcnJvdyh7Y291bnRlciBuYW1lPSJudW0xIn0sXCdub3JtYWxcJyk7Ij48aW1nIHN0eWxlPSJ7aWYgJG1hcC5UaHVtYkJhclBvcyBlcSAiMyIgb3IgJG1hcC5UaHVtYkJhclBvcyBlcSAiNCJ9d2lkdGh7ZWxzZX1oZWlnaHR7L2lmfTp7JG1hcC5UaHVtYkhlaWdodH1weDsiIHNyYz0ieyRwb2ludC50aHVtYkxpbmt9Ii8+e2lmICRtYXAuVGh1bWJCYXJQb3MgZXEgIjMiIG9yICRtYXAuVGh1bWJCYXJQb3MgZXEgIjQifTxici8+ey9pZn08XC9hPic7CiAgICAgIHNpZGViYXJzaXplICs9e2lmICRtYXAuVGh1bWJCYXJQb3MgZXEgIjMiIG9yICRtYXAuVGh1bWJCYXJQb3MgZXEgIjQifXskcG9pbnQudGh1bWJiYXJIZWlnaHR9e2Vsc2V9eyRwb2ludC50aHVtYmJhcldpZHRofXsvaWZ9KzI7CiAgICAgIHsvaWZ9CiAgICAgIHtpZiAkcG9pbnQudHlwZSBlcSAiR2FsbGVyeUFsYnVtSXRlbSJ9CiAgICAgICB7YXNzaWduIHZhcj1pdGVtVHlwZSB2YWx1ZT0iYWxidW0ifQogICAgICAge2Fzc2lnbiB2YXI9bWFya2VyU2V0IHZhbHVlPSJgJG1hcC51c2VBbGJ1bU1hcmtlclNldGAifQogICAgICAge2Fzc2lnbiB2YXI9bWFya2VyQ29sb3IgdmFsdWU9ImAkbWFwLmRlZmF1bHRhbGJ1bWNvbG9yYCJ9CiAgICAgIHtlbHNlaWYgJHBvaW50LnR5cGUgZXEgIkdvb2dsZU1hcEdyb3VwIn0KICAgICAgIHthc3NpZ24gdmFyPWl0ZW1UeXBlIHZhbHVlPSJncm91cCJ9CiAgICAgICB7YXNzaWduIHZhcj1tYXJrZXJTZXQgdmFsdWU9ImAkbWFwLnVzZUdyb3VwTWFya2VyU2V0YCJ9CiAgICAgICB7YXNzaWduIHZhcj1tYXJrZXJDb2xvciB2YWx1ZT0iYCRtYXAuZGVmYXVsdGdyb3VwY29sb3JgIn0KICAgICAge2Vsc2V9CiAgICAgICB7YXNzaWduIHZhcj1pdGVtVHlwZSB2YWx1ZT0icGhvdG8ifQogICAgICAge2Fzc2lnbiB2YXI9bWFya2VyU2V0IHZhbHVlPSJgJG1hcC51c2VNYXJrZXJTZXRgIn0KICAgICAgIHthc3NpZ24gdmFyPW1hcmtlckNvbG9yIHZhbHVlPSJgJG1hcC5kZWZhdWx0cGhvdG9jb2xvcmAifQogICAgICB7L2lmfQogICAgICB7YXNzaWduIHZhcj1pY29uRGVmIHZhbHVlPSJEZWZhdWx0In0KICAgICAge2lmICRwb2ludC5jb2xvciBuZXEgImRlZmF1bHQifQogICAgICB2YXIgeyRpdGVtVHlwZX1JY29uID0gbmV3IEdJY29uKERlZmF1bHR7JGl0ZW1UeXBlfUljb24pOwogICAgICB7YXNzaWduIHZhcj1pY29uRGVmIHZhbHVlPSIifXsqIENsZWFyIHRoZSAiRGVmYXVsdCIgYW5kIGZsYWcgdGhhdCB3ZSBkZWNsYXJlZCB0aGUgdmFyaWFibGUgKn0KICAgICAge2Fzc2lnbiB2YXI9bWFya2VyQ29sb3IgdmFsdWU9ImAkcG9pbnQuY29sb3JgIn0KICAgICAgeyRpdGVtVHlwZX1JY29uLmltYWdlID0gIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL21hcmtlcnMvYCRtYXJrZXJTZXRgL21hcmtlcl9gJHBvaW50LmNvbG9yYC5wbmcifSI7CiAgICAgIHsvaWZ9CiAgICAgIHsqIHF1aWNrIGhhY2t5IGZpeCBmb3IgbWlzc2luZyBudW1iZXJlZCBtYXJrZXJzICp9CiAgICAgIHtpZiAkbWFwLkVuYWJsZVJvdXRlTnVtYmVyfQogICAgICB7Zm9yZWFjaCBmcm9tPSRtYXAucm91dGVpdGVtIGtleT1uYW1lIGl0ZW09aXRlbXN9CiAgICAgICB7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWlkIGtleT1udW19CiAgICAgICAge2lmICRwb2ludC5pZCA9PSAkaWR9CiAgICAgICAgIHtpZiAkaWNvbkRlZiBlcSAiRGVmYXVsdCJ9eyogdmFyaWFibGUgaGFzbid0IGJlZW4gZGVjbGFyZWQgeWV0ICp9CiAgICAgICAgICB7YXNzaWduIHZhcj1pY29uRGVmIHZhbHVlPSIifXsqIENsZWFyIHRoZSAiRGVmYXVsdCIgdGV4dCAqfQogICAgICAgICAgdmFyIHskaXRlbVR5cGV9SWNvbiA9IG5ldyBHSWNvbihEZWZhdWx0eyRpdGVtVHlwZX1JY29uKTsKICAgICAgICAgey9pZn0KICAgICAgICAgeyRpdGVtVHlwZX1JY29uLmltYWdlID0gIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL3JvdXRlcy9gJG5hbWVgL2AkbnVtKzFgLW1hcmtlcl9gJG1hcmtlckNvbG9yYC5wbmcifSI7CiAgICAgICAgey9pZn0gCiAgICAgICB7L2ZvcmVhY2h9CiAgICAgIHsvZm9yZWFjaH0KICAgICAgey9pZn0KICAgICAge2lmICRwb2ludC5pZHx0cnVuY2F0ZToxOiIiIG5lcSAnVCd9CiAgICAgICAgQ3JlYXRlTWFya2VyKHskcG9pbnQuZ3BzfSwgInskcG9pbnQuaXRlbUxpbmt9IiwgInskcG9pbnQudGl0bGV8bWFya3VwfGVzY2FwZToiamF2YXNjcmlwdCJ9IiwgInskcG9pbnQudGh1bWJMaW5rfSIsICJ7JHBvaW50LmNyZWF0ZWR9IiwgeyRwb2ludC56b29tbGV2ZWx9LCB7JHBvaW50LnRodW1iV2lkdGh9LCB7JHBvaW50LnRodW1iSGVpZ2h0fSwKICAgICAgICAgIHtpZiAkbWFwLnNob3dJdGVtU3VtbWFyaWVzICYmICFlbXB0eSgkcG9pbnQuc3VtbWFyeSl9ICJ7JHBvaW50LnN1bW1hcnl8bWFya3VwfGVzY2FwZToiamF2YXNjcmlwdCJ9IntlbHNlfSIiey9pZn0KICAgICAgICAgICwKICAgICAgICAgIHtpZiAkbWFwLnNob3dJdGVtRGVzY3JpcHRpb25zICYmICFlbXB0eSgkcG9pbnQuZGVzY3JpcHRpb24pfSAieyRwb2ludC5kZXNjcmlwdGlvbnxtYXJrdXB8ZXNjYXBlOiJqYXZhc2NyaXB0In0ie2Vsc2V9IiJ7L2lmfQogICAgICAgICAgLAogICAgICAgICAgeyRpY29uRGVmfXskaXRlbVR5cGV9SWNvbgogICAgICAgICAgLCB7JHBvaW50LnJlZ3JvdXBTaG93TG93fSx7JHBvaW50LnJlZ3JvdXBTaG93SGlnaH0sMCwieyRwb2ludC50eXBlfSIpOwogICAgICB7L2lmfQogICAgey9mb3JlYWNofQoKICAgIHtpZiBpc3NldCgkbWFwLlRodW1iQmFyUG9zKSBhbmQgJG1hcC5UaHVtYkJhclBvcyBuZXEgMCBhbmQgJG1hcC5mdWxsU2NyZWVuIG5lcSAzfQogICAgdmFyIHRodW1iZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRodW1icyIpOwogICAgdGh1bWJkaXYuaW5uZXJIVE1MID0gc2lkZWJhcmh0bWw7CiAgICB2YXIgbWFwZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcCIpOwoKICAgIHtpZiAkbWFwLlRodW1iQmFyUG9zIGVxICIxIiBvciAkbWFwLlRodW1iQmFyUG9zIGVxICIyIn0KICAgIGlmIChzaWRlYmFyc2l6ZSsxID4gbXlXaWR0aCkgIHNpZGViYXJoZWlnaHQgPSB7JG1hcC5UaHVtYkhlaWdodCsyNX07CiAgICB0aHVtYmRpdi5zdHlsZS5oZWlnaHQgPSBzaWRlYmFyaGVpZ2h0KyJweCI7CiAgICB7ZWxzZX0KICAgIHsqIFNob3VsZCB0aGlzIGJlICRtYXAuVGh1bWJXaWR0aD8gKn0KICAgIGlmIChzaWRlYmFyc2l6ZSsxID4gbXlIZWlnaHQpICBzaWRlYmFyd2lkdGggPSB7JG1hcC5UaHVtYkhlaWdodCsyNX07CiAgICB0aHVtYmRpdi5zdHlsZS53aWR0aCA9IHNpZGViYXJ3aWR0aCsicHgiOwogICAgey9pZn0KCiAgICB7L2lmfQoKICAgIHsvaWZ9CgogICAgLyogTG9vcCBvdmVyIHJvdXRlcyBpZiBhbnkgYW5kIGRpc3BsYXkgdGhlbSAqLwogICAge2lmICghZW1wdHkoJG1hcC5Sb3V0ZXMpKX0KICAgIHZhciBwb2ludDsKICAgIHtmb3JlYWNoIGZyb209JG1hcC5Sb3V0ZXMgaXRlbT1yb3V0ZXN9CiAgICAgIHZhciBwb2ludHMgPSBbXTsKICAgICAge2lmICRyb3V0ZXMuNSBlcSAiWWVzIn0KICAgICAge2ZvcmVhY2ggZnJvbT0kcm91dGVzWzddIGl0ZW09cG9pbnR9CiAgICAgICAgIHBvaW50ID0gbmV3IEdMYXRMbmcoeyRwb2ludFswXX0seyRwb2ludFsxXX0pOwogICAgICAgICBwb2ludHMucHVzaChwb2ludCk7CiAgICAgICAgIHtpZiAoaXNzZXQoJG1hcC5GaWx0ZXIpIGFuZCAoKCRtYXAuRmlsdGVyfHRydW5jYXRlOjU6IiIgZXEgJ1JvdXRlJykpKX1ib3VuZHMuZXh0ZW5kKHBvaW50KTt7L2lmfQogICAgICB7L2ZvcmVhY2h9CiAgICAgIG1hcC5hZGRPdmVybGF5KG5ldyBHUG9seWxpbmUocG9pbnRzLCJ7JHJvdXRlc1syXX0iLHskcm91dGVzWzNdfSx7JHJvdXRlc1s0XX0pKTsKICAgICAgey9pZn0KICAgIHsvZm9yZWFjaH0KICAgIHsvaWZ9CiAgICAKICAgIHtpZiAkbWFwLkF1dG9DZW50ZXJab29tIGFuZCAoIWlzc2V0KCRtYXAuRmlsdGVyKSBvciAoaXNzZXQoJG1hcC5GaWx0ZXIpIGFuZCAoKCRtYXAuRmlsdGVyfHRydW5jYXRlOjU6IiIgZXEgJ1JvdXRlJykgb3IgKCRtYXAuRmlsdGVyfHRydW5jYXRlOjU6IiIgZXEgJ0FsYnVtJykgb3IgKCRtYXAuRmlsdGVyfHRydW5jYXRlOjU6IiIgZXEgJ0dyb3VwJykpKSl9CiAgICAgIG1hcC5zZXRDZW50ZXIoYm91bmRzLmdldENlbnRlcigpLCBNYXRoLm1pbihtYXAuZ2V0Qm91bmRzWm9vbUxldmVsKGJvdW5kcyksIG1heFpvb20pKTsKICAgICAgbWFwLnNhdmVQb3NpdGlvbigpOwogICAgey9pZn0KICAgIHtpZiAkbWFwLmZ1bGxTY3JlZW4gbmVxIDN9CgogICAgLy8gY2hlY2sgZm9yIG1vdm1lbnQgb2YgdGhlIG1hcCBhbmQgYWRkIGxpbmtzIHRvIHRoZSBoaXN0b3J5CiAgICB2aWV3X2hpc3RvcnkgPSBbXTsKICAgIHJldHVybmluZ1RvU2F2ZWQgPSBmYWxzZTsKICAgIGxhc3Rfem9vbSA9IGZhbHNlOwogICAgbGFzdF9jZW50ZXIgPSBtYXAuZ2V0Q2VudGVyKCk7CiAgICBsYXN0X3pvb20gPSBtYXAuZ2V0Wm9vbSgpOwogICAgaW5mb09wZW5lZCA9IGZhbHNlOwkvLyBzZXQgdG8gdHJ1ZSB3aGVuIGFuIGluZm8gd2luZG93IGlzIG9wZW5lZC4KICAgIEdFdmVudC5hZGRMaXN0ZW5lcihtYXAsICJtb3ZlZW5kIiwgZnVuY3Rpb24gKCkge2xkZWxpbX0KICAgICAgaWYgKCFyZXR1cm5pbmdUb1NhdmVkKSB7bGRlbGltfQogICAgICAgIGlmIChERUJVR0lORk8pIEdMb2cud3JpdGUoJ21vdmVlbmQgZmlyZWQnKTsKICAgICAgICBjZW50ZXIgPSBtYXAuZ2V0Q2VudGVyKCk7CiAgICAgICAgYm91bmRzID0gbWFwLmdldEJvdW5kcygpOwogICAgICAgIHpvb20gPSBtYXAuZ2V0Wm9vbSgpOwogICAgICAgIHZhciBkaXZfaGlzdG9yeSA9IF9kaXZoaXN0b3J5dGV4dDsKICAgICAgICBkaXZfaGlzdG9yeSArPSAnPGEgaHJlZj0iamF2YXNjcmlwdDpnb1N0YXJ0KCk7Ij5TdGFydDwvYT4nOwogICAgICAgIHZhciB0YWcgPSAibW92ZSI7CiAgICAgICAgaWYgKHpvb20gIT0gbGFzdF96b29tKSB7bGRlbGltfQogICAgICAgICAgdGFnID0gInpvb20iOwogICAgICAgICAgbGFzdF96b29tID0gbWFwLmdldFpvb20oKTsKICAgICAgICB7cmRlbGltfQogICAgICAgIGlmIChpbmZvT3BlbmVkKSB7bGRlbGltfQogICAgICAgICAgdGFnID0gIndpbmRvdyI7CiAgICAgICAgICBpbmZvT3BlbmVkID0gZmFsc2U7CiAgICAgICAge3JkZWxpbX0KICAgICAgICB2aWV3X2hpc3Rvcnlbdmlld19oaXN0b3J5Lmxlbmd0aF09bmV3IEFycmF5KGNlbnRlci55LGNlbnRlci54LHpvb20sdGFnKTsKICAgICAgICBpZiAodmlld19oaXN0b3J5Lmxlbmd0aCA+IDEwKSB7bGRlbGltfSAgLy8gdHJpbSB0aGUgIyBvZiBsaW5rcyBpbiBoaXN0b3J5CiAgICAgICAgICB2aWV3X2hpc3Rvcnkuc2hpZnQoKTsKICAgICAgICB7cmRlbGltfQogICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgaGlzdG9yeSBhbmQgd3JpdGUgdGhlIGxpbmtzCiAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgdmlld19oaXN0b3J5Lmxlbmd0aDsgaisrKSB7bGRlbGltfQogICAgICAgICAgZGl2X2hpc3RvcnkgKz0gIi0+ICI7ICAvLyB0ZXh0IGJlZm9yZSB0aGUgbGluawogICAgICAgICAgZGl2X2hpc3RvcnkgKz0gJzxhIGhyZWY9ImphdmFzY3JpcHQ6Z29IaXN0b3J5KCcrKGotMSkrJyk7Ij4nK3ZpZXdfaGlzdG9yeVtqXVszXSsnPC9hPic7CiAgICAgICAge3JkZWxpbX0KICAgICAgICBkaXZfaGlzdG9yeSArPSAnJzsgLy8gYWRkIHRleHQgdG8gdGhlIGVuZCBpZiBuZWVkZWQKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2X2hpc3RvcnkiKS5pbm5lckhUTUwgPSBkaXZfaGlzdG9yeTsKICAgICAge3JkZWxpbX0KICAgIHtyZGVsaW19KTsKICAgIHsvaWZ9IHsqIGVuZCAkbWFwLmZ1bGxTY3JlZW4gbmVxIDN9CgogICAgeyogc2V0IHRoZSBjb3JyZWN0IHpvb20gc2xpZGUgbm90Y2ggYW5kIHNob3cvaGlkZSB0aGUgcmVncm91cGVkIGl0ZW0gKn0KICAgIHpvb20gPSBtYXAuZ2V0Wm9vbSgpOwogICAgbXlab29tID0gMTktem9vbTsKICAge2lmICRtYXAuTWFwQ29udHJvbFR5cGUgbmVxICJOb25lIiBhbmQgJG1hcC5NYXBDb250cm9sVHlwZSBuZXEgIlNtYWxsIiBhbmQgJG1hcC5NYXBDb250cm9sVHlwZSBuZXEgIkxhcmdlIn0KICAgICAgaWYgKCFJRVZlcnNpb24gfHwoSUVWZXJzaW9uICYmIElFVmVyc2lvbiA+PSA3KSkgZG9jdW1lbnQuaW1hZ2VzWyd6JytteVpvb21dLnNyYyA9ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy9gJG1hcC5NYXBDb250cm9sVHlwZWAvU2xpZGVTZWwucG5nIn0iOwogICAgICBlbHNlIHtsZGVsaW19CiAgICAgICAgZG9jdW1lbnQuaW1hZ2VzWyd6JytteVpvb21dLnNyYyA9ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL2ltYWdlcy9ibGFuay5naWYifSI7CiAgICAgICAgZG9jdW1lbnQuaW1hZ2VzWyd6JytteVpvb21dLnN0eWxlLmZpbHRlciA9ICJmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ne2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvYCRtYXAuTWFwQ29udHJvbFR5cGVgL1NsaWRlU2VsLnBuZyJ9JykiOwogICAgICB7cmRlbGltfQogICB7L2lmfQogICAgZm9yICh2YXIgaT0wOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykge2xkZWxpbX0gLy9VcGRhdGluZyB0aGUgbm9ybWFsIGl0ZW1zCiAgICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV07CiAgICAgICAgaWYgKHpvb20gPD0gbWFya2VyLnNob3dMb3cgJiYgem9vbSA+PSBtYXJrZXIuc2hvd0hpZ2gpIHtsZGVsaW19CiAgICAgICAgICBtYXJrZXJEaXNwbGF5KGksMSwnbm9ybWFsJyk7IC8vbWFya2VyLmRpc3BsYXkodHJ1ZSk7CiAgICAgICAgICB2YXIgQ29ycmVjdEEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGh1bWInK2kpOwogICAgICAgICAgaWYgKENvcnJlY3RBICE9IG51bGwgKSBDb3JyZWN0QS5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7CiAgICAgICAge3JkZWxpbX0KICAgICAgICBlbHNlIHtsZGVsaW19CiAgICAgICAgICBtYXJrZXJEaXNwbGF5KGksMCwnbm9ybWFsJyk7IC8vbWFya2VyLmRpc3BsYXkoZmFsc2UpOwogICAgICAgICAgdmFyIENvcnJlY3RBID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RodW1iJytpKTsKICAgICAgICAgIGlmIChDb3JyZWN0QSAhPSBudWxsKSBDb3JyZWN0QS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIHtyZGVsaW19CiAgICB7cmRlbGltfQogICAgZm9yICh2YXIgaT0wOyBpIDwgUm1hcmtlcnMubGVuZ3RoOyBpKyspIHtsZGVsaW19IC8vVXBkYXRpbmcgdGhlIG5vcm1hbCBpdGVtcwogICAgICAgIHZhciBtYXJrZXIgPSBSbWFya2Vyc1tpXTsKICAgICAgICBpZiAoem9vbSA8PSBtYXJrZXIuc2hvd0xvdyAmJiB6b29tID49IG1hcmtlci5zaG93SGlnaCkge2xkZWxpbX0KICAgICAgICAgIG1hcmtlckRpc3BsYXkoaSwxLCdSZWdyb3VwJyk7IC8vbWFya2VyLmRpc3BsYXkodHJ1ZSk7CiAgICAgICAge3JkZWxpbX0KICAgICAgICBlbHNlIHtsZGVsaW19CiAgICAgICAgICBtYXJrZXJEaXNwbGF5KGksMCwnUmVncm91cCcpOyAvL21hcmtlci5kaXNwbGF5KGZhbHNlKTsKICAgICAgICB7cmRlbGltfQogICAge3JkZWxpbX0KCiAgICB7L2lmfQoKICAgIHtpZiAkbWFwLm1vZGUgZXEgIlBpY2sifQogICAgICAgIEdFdmVudC5hZGRMaXN0ZW5lcihtYXAsICJtb3ZlZW5kIiwgZnVuY3Rpb24oKSB7bGRlbGltfQogICAgICAgIHZhciBjZW50ZXIgPSBtYXAuZ2V0Q2VudGVyKCk7CiAgICAgICAgbWFwLmNsZWFyT3ZlcmxheXMoKTsKICAgICAgICBtYXAuYWRkT3ZlcmxheShuZXcgR01hcmtlcihjZW50ZXIpKTsKICAgICAgICB2YXIgbGF0TG5nU3RyID0gY2VudGVyLnRvVXJsVmFsdWUoNik7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lc3NhZ2VfaWQiKS5pbm5lckhUTUwgPSAnKCcgKyBsYXRMbmdTdHIgKyAnKSc7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvb3JkIikudmFsdWUgPSBsYXRMbmdTdHI7CiAgICAgICAge3JkZWxpbX0pOwoKICAgICAgICBHRXZlbnQuYWRkTGlzdGVuZXIobWFwLCAnY2xpY2snLCBmdW5jdGlvbihvdmVybGF5LCBwb2ludCkge2xkZWxpbX0KICAgICAgICAgICBtYXAuY2xlYXJPdmVybGF5cygpOwogICAgICAgICAgIGlmIChwb2ludCkge2xkZWxpbX0KICAgICAgICAgICAgbWFwLmFkZE92ZXJsYXkobmV3IEdNYXJrZXIocG9pbnQpKTsKICAgICAgICAgICAgbWFwLnBhblRvKHBvaW50KTsKICAgICAgICAgICAgdmFyIGxhdExuZ1N0ciA9IHBvaW50LnRvVXJsVmFsdWUoNik7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZXNzYWdlX2lkIikuaW5uZXJIVE1MID0gJygnICsgbGF0TG5nU3RyICsgJyknOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29vcmQiKS52YWx1ZSA9IGxhdExuZ1N0cjsKICAgICAgICAgIHtyZGVsaW19CiAgICAgICAge3JkZWxpbX0pOwogICAgICAgIEdFdmVudC5hZGRMaXN0ZW5lcihtYXAsICd6b29tZW5kJywgZnVuY3Rpb24ob2xkWm9vbUxldmVsLCBuZXdab29tTGV2ZWwpIHtsZGVsaW19CiAgICAgICAgICB2YXIgY2VudGVyID0gJycgKyBuZXdab29tTGV2ZWwKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ6b29tX2lkIikuaW5uZXJIVE1MID0gY2VudGVyOwogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInpvb20iKS52YWx1ZSA9IGNlbnRlcjsKICAgICAgICAgIHZhciB6b29tID0gMTktbmV3Wm9vbUxldmVsOwogICAgICAgICAgdmFyIG9sZFpvb20gPSAxOS1vbGRab29tTGV2ZWw7CiAgICAgICAgICB7aWYgJG1hcC5NYXBDb250cm9sVHlwZSBuZXEgIk5vbmUiIGFuZCAkbWFwLk1hcENvbnRyb2xUeXBlIG5lcSAiU21hbGwiIGFuZCAkbWFwLk1hcENvbnRyb2xUeXBlIG5lcSAiTGFyZ2UifQogICAgICAgICAgICAgIGlmICghSUVWZXJzaW9uIHx8KElFVmVyc2lvbiAmJiBJRVZlcnNpb24gPj0gNykpIHtsZGVsaW19CiAgICAgICAgICAgICAgICBkb2N1bWVudC5pbWFnZXNbJ3onK3pvb21dLnNyYyA9ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy8ifXskbWFwLk1hcENvbnRyb2xUeXBlfS9TbGlkZVNlbC5wbmciOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuaW1hZ2VzWyd6JytvbGRab29tXS5zcmMgPSAie2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvIn17JG1hcC5NYXBDb250cm9sVHlwZX0vU2xpZGVOb3RjaC5wbmciOwogICAgICAgICAgICAgIHtyZGVsaW19IGVsc2Uge2xkZWxpbX0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmltYWdlc1sneicrem9vbV0uc3JjID0gIntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL2JsYW5rLmdpZiJ9IjsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmltYWdlc1sneicrem9vbV0uc3R5bGUuZmlsdGVyID0gImZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSd7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9jb250cm9scy8ifXskbWFwLk1hcENvbnRyb2xUeXBlfS9TbGlkZVNlbC5wbmcnKSI7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5pbWFnZXNbJ3onK29sZFpvb21dLnNyYyA9ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL2ltYWdlcy9ibGFuay5naWYifSI7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5pbWFnZXNbJ3onK29sZFpvb21dLnN0eWxlLmZpbHRlciA9ICJmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ne2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvY29udHJvbHMvIn17JG1hcC5NYXBDb250cm9sVHlwZX0vU2xpZGVOb3RjaC5wbmcnKSI7CiAgICAgICAgICAgICAge3JkZWxpbX0KICAgICAgICAgIHsvaWZ9CiAgICAgICAge3JkZWxpbX0pOwogICAgey9pZn0KICAgIHtyZGVsaW19IC8qIGVuZCBTaG93TWVUaGVNYXAoKSAqLwoKICAgIHtpZiAkbWFwLm1vZGUgZXEgIk5vcm1hbCIgYW5kICRtYXAuZnVsbFNjcmVlbiBuZXEgM30KICAgIGZ1bmN0aW9uIHRvZ2dsZWFsYnVtbGVnZW5kKCkKICAgIHtsZGVsaW19CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKSB7bGRlbGltfSAvLyBzdGFuZGFyZAogICAgICAgICAgICB2YXIgZGlzcGxheXN0eWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsYnVtbGVnZW5kIikuc3R5bGUuZGlzcGxheTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsYnVtbGVnZW5kIikuc3R5bGUuZGlzcGxheSA9IChkaXNwbGF5c3R5bGUgPT0gIm5vbmUiID8gImJsb2NrIjoibm9uZSIpOwogICAgICAgIHtyZGVsaW19IGVsc2UgaWYgKGRvY3VtZW50LmFsbCl7bGRlbGltfSAvLyBvbGQgbXNpZSB2ZXJzaW9ucwogICAgICAgICAgICB2YXIgZGlzcGxheXN0eWxlID0gZG9jdW1lbnQuYWxsWyJhbGJ1bWxlZ2VuZCJdLnN0eWxlLmRpc3BsYXk7CiAgICAgICAgICAgIGRvY3VtZW50LmFsbFsiYWxidW1sZWdlbmQiXS5zdHlsZS5kaXNwbGF5ID0gKGRpc3BsYXlzdHlsZSA9PSAibm9uZSIgPyAiYmxvY2siOiJub25lIik7CiAgICAgICAge3JkZWxpbX0gZWxzZSBpZiAoZG9jdW1lbnQubGF5ZXJzKXtsZGVsaW19IC8vIG5uNAogICAgICAgICAgICB2YXIgZGlzcGxheXN0eWxlID0gZG9jdW1lbnQubGF5ZXJzWyJhbGJ1bWxlZ2VuZCJdLnN0eWxlLmRpc3BsYXk7CiAgICAgICAgICAgIGRvY3VtZW50LmxheWVyc1siYWxidW1sZWdlbmQiXS5zdHlsZS5kaXNwbGF5ID0gKGRpc3BsYXlzdHlsZSA9PSAibm9uZSIgPyAiYmxvY2siOiJub25lIik7CiAgICAgICAge3JkZWxpbX0KICAgICAgICB2YXIgaW1nc3JjID0gZG9jdW1lbnQuYWxidW1hcnJvdy5pZDsKICAgICAgICBkb2N1bWVudC5hbGJ1bWFycm93LnNyYyA9IChpbWdzcmMgID09ICJkb3duIiA/ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL2ltYWdlcy91cC5wbmcifSI6IntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL2Rvd24ucG5nIn0iKTsKICAgICAgICBkb2N1bWVudC5hbGJ1bWFycm93LmlkID0gKGltZ3NyYyA9PSAiZG93biIgPyAidXAiOiJkb3duIik7CiAgICB7cmRlbGltfQoKICAgIGZ1bmN0aW9uIHRvZ2dsZXBob3RvbGVnZW5kKCkKICAgIHtsZGVsaW19CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKSB7bGRlbGltfSAvLyBzdGFuZGFyZAogICAgICAgICAgICB2YXIgZGlzcGxheXN0eWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBob3RvbGVnZW5kIikuc3R5bGUuZGlzcGxheTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBob3RvbGVnZW5kIikuc3R5bGUuZGlzcGxheSA9IChkaXNwbGF5c3R5bGUgPT0gIm5vbmUiID8gImJsb2NrIjoibm9uZSIpOwogICAgICAgIHtyZGVsaW19IGVsc2UgaWYgKGRvY3VtZW50LmFsbCl7bGRlbGltfSAvLyBvbGQgbXNpZSB2ZXJzaW9ucwogICAgICAgICAgICB2YXIgZGlzcGxheXN0eWxlID0gZG9jdW1lbnQuYWxsWyJwaG90b2xlZ2VuZCJdLnN0eWxlLmRpc3BsYXk7CiAgICAgICAgICAgIGRvY3VtZW50LmFsbFsicGhvdG9sZWdlbmQiXS5zdHlsZS5kaXNwbGF5ID0gKGRpc3BsYXlzdHlsZSA9PSAibm9uZSIgPyAiYmxvY2siOiJub25lIik7CiAgICAgICAge3JkZWxpbX0gZWxzZSBpZiAoZG9jdW1lbnQubGF5ZXJzKXtsZGVsaW19IC8vIG5uNAogICAgICAgICAgICB2YXIgZGlzcGxheXN0eWxlID0gZG9jdW1lbnQubGF5ZXJzWyJwaG90b2xlZ2VuZCJdLnN0eWxlLmRpc3BsYXk7CiAgICAgICAgICAgIGRvY3VtZW50LmxheWVyc1sicGhvdG9sZWdlbmQiXS5zdHlsZS5kaXNwbGF5ID0gKGRpc3BsYXlzdHlsZSA9PSAibm9uZSIgPyAiYmxvY2siOiJub25lIik7CiAgICAgICAge3JkZWxpbX0KICAgICAgICB2YXIgaW1nc3JjID0gZG9jdW1lbnQucGhvdG9hcnJvdy5pZDsKICAgICAgICBkb2N1bWVudC5waG90b2Fycm93LnNyYyA9IChpbWdzcmMgID09ICJkb3duIiA/ICJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL2ltYWdlcy91cC5wbmcifSI6IntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL2Rvd24ucG5nIn0iKTsKICAgICAgICBkb2N1bWVudC5waG90b2Fycm93LmlkID0gKGltZ3NyYyA9PSAiZG93biIgPyAidXAiOiJkb3duIik7CiAgICB7cmRlbGltfQoKICAgIGZ1bmN0aW9uIHN0ckxlZnQoa3N0cixrY2hhcikKICAgIHtsZGVsaW19CiAgICAgIHZhciByZXRWYWwgPSAiLTEiOwoKICAgICAgaWYgKGtzdHIuaW5kZXhPZiAoa2NoYXIpID4gLTEpCiAgICAgICAgcmV0VmFsID0KICAgICAgICAgIGtzdHIuc3Vic3RyaW5nICgwLCBrc3RyLmluZGV4T2Yoa2NoYXIpKTsKICAgICAgcmV0dXJuKHJldFZhbCk7CgogICAge3JkZWxpbX0KICAgIGZ1bmN0aW9uIHN0clJpZ2h0KGtzdHIsIGtjaGFyKQogICAge2xkZWxpbX0KICAgICAgdmFyICAgcmV0VmFsID0gIi0xIjsKCiAgICAgIGlmIChrc3RyLmluZGV4T2Yoa2NoYXIpID4gLTEgKQogICAgICAgIHJldFZhbCA9CiAgICAgICAgICBrc3RyLnN1YnN0cmluZyhrc3RyLmluZGV4T2Yoa2NoYXIpICsga2NoYXIubGVuZ3RoLAogICAgICAgICAgICAgIGtzdHIubGVuZ3RoKTsKICAgICAgcmV0dXJuKHJldFZhbCk7CiAgICB7cmRlbGltfQoKICAgIGZ1bmN0aW9uIHRvZ2dsZW1hcmtlcnMobnVtYmVyKQogICAge2xkZWxpbX0KICAgICAgaWYgKERFQlVHSU5GTykgR0xvZy53cml0ZSgnRW50ZXJpbmcgVG9nZ2xlIE1hcmtlcicpOwogICAgICB2YXIgbWFya2VyY29sb3I7CiAgICAgIHZhciB0aGV0ZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG51bWJlcik7CiAgICAgIHZhciBJdHlwZSA9IG51bWJlci5zdWJzdHJpbmcoMCwxKTsKICAgICAgaWYgKEl0eXBlPT0iQSIpIHZhciB0aGV0eXBlID0gIkdhbGxlcnlBbGJ1bUl0ZW0iOwogICAgICBlbHNlIHZhciB0aGV0eXBlID0gIkdhbGxlcnlQaG90b0l0ZW0iOwogICAgICB2YXIgdGhlY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiQyIrbnVtYmVyKTsKICAgICAgdmFyIGNsaWNrZWRjb2xvciA9IHN0clJpZ2h0KHN0ckxlZnQodGhldGQuaW5uZXJIVE1MLCIucG5nIiksIm1hcmtlcl8iKTsKICAgICAgdmFyIHpvb20gPSBtYXAuZ2V0Wm9vbSgpOwogICAgICBpZiAoREVCVUdJTkZPKSB7bGRlbGltfQogICAgICAgICBHTG9nLndyaXRlKGNsaWNrZWRjb2xvcisnICcrdGhldHlwZSsnICcrem9vbSk7CiAgICAgICAgIGlmICh0aGVjaGVja2JveC5pdGVtKDApLmNoZWNrZWQpIEdMb2cud3JpdGUoJ1Nob3dpbmcnKTsKICAgICAgICAgZWxzZSBHTG9nLndyaXRlKCdIaWRpbmcnKTsKICAgICAge3JkZWxpbX0KICAgICAgZm9yICh2YXIgaT0wOyBpPG1hcmtlcnMubGVuZ3RoOyBpKyspIHtsZGVsaW19CiAgICAgICB2YXIgY2hlY2t0eXBlID0gKG1hcmtlcnNbaV1bInR5cGUiXSA9PSAiR2FsbGVyeUFsYnVtSXRlbSIpID8gIkdhbGxlcnlBbGJ1bUl0ZW0iOiJHYWxsZXJ5UGhvdG9JdGVtIjsKICAgICAgIG1hcmtlcmNvbG9yID0gc3RyUmlnaHQoc3RyTGVmdChtYXJrZXJzW2ldLmdldEljb24oKS5pbWFnZSwiLnBuZyIpLCJtYXJrZXJfIik7CiAgICAgICBpZiAoREVCVUdJTkZPKSBHTG9nLndyaXRlKCdNYXJrZXI6ICcrbWFya2Vyc1tpXVsidHlwZSJdKycgJyttYXJrZXJjb2xvcisnICcrbWFya2Vyc1tpXS5zaG93TG93KycgJyttYXJrZXJzW2ldLnNob3dIaWdoKTsKICAgICAgIGlmIChtYXJrZXJjb2xvciA9PSBjbGlja2VkY29sb3IgJiYgKGNoZWNrdHlwZSA9PSB0aGV0eXBlIHx8IG1hcmtlcnNbaV1bJ3R5cGUnXSA9PSAiUmVncm91cCIpKXtsZGVsaW19CiAgICAgICAgIGlmICh0aGVjaGVja2JveC5pdGVtKDApLmNoZWNrZWQgJiYgem9vbSA8PSBtYXJrZXJzW2ldLnNob3dMb3cgJiYgem9vbSA+PSBtYXJrZXJzW2ldLnNob3dIaWdoKSBtYXJrZXJEaXNwbGF5KGksMSwnbm9ybWFsJyk7IC8vbWFya2Vyc1tpXS5kaXNwbGF5KHRydWUpOwogICAgICAgICBlbHNlCiAgICAgICAgIHtsZGVsaW19CiAgICAgICAgICAgaWYgKERFQlVHSU5GTykgR0xvZy53cml0ZSgnSGlkaW5nJyk7CiAgICAgICAgICAgbWFya2VyRGlzcGxheShpLDAsJ25vcm1hbCcpOyAvL21hcmtlcnNbaV0uZGlzcGxheShmYWxzZSk7CiAgICAgICAgIHtyZGVsaW19CiAgICAgICB7cmRlbGltfQoKICAgICAge3JkZWxpbX0KICAgIHtyZGVsaW19CiAgICB7L2lmfQoKICAgICBpZiAoZG9jdW1lbnQuYWxsJiZ3aW5kb3cuYXR0YWNoRXZlbnQpIHtsZGVsaW19IC8vIElFLVdpbgogICAgICAgICB3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIsIFNob3dNZVRoZU1hcCk7CiAgICAgICAgIHdpbmRvdy5hdHRhY2hFdmVudCgib251bmxvYWQiLEdVbmxvYWQpOwogICAgICB7cmRlbGltfSBlbHNlIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge2xkZWxpbX0gLy8gT3RoZXJzCiAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgU2hvd01lVGhlTWFwLCBmYWxzZSk7CiAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLCBHVW5sb2FkLCBmYWxzZSk7CiAgICAgIHtyZGVsaW19CgogICAgIHZhciBHb29nbGVNYXAgPSB0cnVlOwoKICAgIC8vXV0+Cjwvc2NyaXB0Pgp7L2lmfQo=');
expand_3537250845($outputDir, 'templates/MapLegendAdmin.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxoMj57Zy0+dGV4dCB0ZXh0PSJNYXAgTW9kdWxlIFNldHRpbmdzIn0gICA8YSBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MHB4O2JvcmRlci10b3A6MnB4IHNvbGlkICNjZWNlY2U7IGJvcmRlci1sZWZ0OjJweCBzb2xpZCAjY2VjZWNlOyBib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNGE0YTRhO2JvcmRlci1yaWdodDoycHggc29saWQgIzRhNGE0YTtwYWRkaW5nOi4yZW07cGFkZGluZy1yaWdodDoxZW07cGFkZGluZy1sZWZ0OjFlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzAwMDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7IiBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9bWFwLlNob3dNYXAifSI+e2ctPnRleHQgdGV4dD0iU2hvdyBHb29nbGUgTWFwIn08L2E+PC9oMj4KPC9kaXY+Cgo8IS0tCkJlZ2lubmluZyBvZiBlcnJvci9zdWNjZXNzIGRpc3BsYXlpbmcKLS0+CntpZiBpc3NldCgkc3RhdHVzLnNhdmVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lTdWNjZXNzIj57Zy0+dGV4dCB0ZXh0PSJTZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQhIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CntpZiAhZW1wdHkoJGZvcm0uZXJyb3IpfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJUaGVyZSB3YXMgYSBwcm9ibGVtIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0LiJ9PC9oMj4KPC9kaXY+CnsvaWZ9CjwhLS0KRW5kIG9mIGVycm9yL3N1Y2Nlc3MgZGlzcGxheWluZwotLT4KCntpbmNsdWRlIGZpbGU9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBBZG1pblRhYi50cGwiIG1vZGU9IkxlZ2VuZCJ9Cgo8IS0tIEhlbHAgRGl2IC0tPgo8ZGl2IGlkPSJoZWxwZGl2IiBzdHlsZT0idmlzaWJpbGl0eTpoaWRkZW47Ym9yZGVyOjJweCBzb2xpZCBibGFjaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDozNTBweDt0b3A6MjAwcHg7d2lkdGg6MjUwcHg7aGVpZ2h0OjE1MHB4OyI+CiAgICA8ZGl2IGlkPSJoZWxwaGVhZCIgc3R5bGU9IndpZHRoOjI1MHB4O2hlaWdodDoyNXB4O2JhY2tncm91bmQ6IzE1MDA5NTtjb2xvcjp3aGl0ZTtib3JkZXItYm90dG9tOjJweCBzb2xpZCBibGFjazsiPjxpbWcgYWx0PSJub25lIiB7aWYgISRmb3JtLklFfXN0eWxlPSJmbG9hdDpsZWZ0OyIgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyJ7ZWxzZX1zcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZicgc3R5bGU9J2Zsb2F0OmxlZnQ7ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7J3svaWZ9Lz48dGFibGUgc3R5bGU9ImhlaWdodDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPjx0cj48dGQgc3R5bGU9IndpZHRoOjIzMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsiPjxiPkhlbHAgV2luZG93PC9iPjwvdGQ+PHRkIHN0eWxlPSJ3aWR0aDoyNXB4O2N1cnNvcjpwb2ludGVyOyIgb25jbGljaz0iamF2YXNjcmlwdDpoaWRlaGVscCgpIj48Y2VudGVyPjxiPlg8L2I+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CiAgICA8ZGl2IGlkPSJoZWxwdGV4dCIgc3R5bGU9IndpZHRoOjI1MHB4O2hlaWdodDoxMjNweDtjb2xvcjpibGFjaztmb250LXNpemU6MTJweDtiYWNrZ3JvdW5kOiNCMkU0RjY7LW1vei1vcGFjaXR5Oi43NTtmaWx0ZXI6YWxwaGEob3BhY2l0eT03NSk7b3BhY2l0eTouNzU7b3ZlcmZsb3c6YXV0bztjbGVhcjpib3RoOyI+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gRW5kIG9mIEhlbHAgRGl2IC0tPgoKPCEtLQpEaXNwbGF5aW5nIHRoZSBMZWdlbmQgbWFuYWdlbWVudCBhcmVhCi0tPgo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICA8aDM+IHtnLT50ZXh0IHRleHQ9IkxlZ2VuZCBNYW5hZ2VtZW50In0gPC9oMz4KCiAgPHAgY2xhc3M9ImdpRGVzY3JpcHRpb24iPgogICAge2ctPnRleHQgdGV4dD0iVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYSBsZWdlbmQifQogIDwvcD4KICAgPHRhYmxlIGNsYXNzPSJnYkRhdGFUYWJsZSI+CiAgIDx0cj4KICAgICA8dGggY29sc3Bhbj0zPjxsYWJlbCBmb3I9IlBob3RvTGVnZW5kIj57Zy0+dGV4dCB0ZXh0PSJNYWluIE9wdGlvbnMifTo8L2xhYmVsPjwvdGg+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iTGVnZW5kUG9zIj57Zy0+dGV4dCB0ZXh0PSJMZWdlbmQgUG9zaXRpb24ifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfTF9MZWdlbmRQb3MsMjIwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgPHRkPgogICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bTGVnZW5kUG9zXSJ9Ij4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9MD57Zy0+dGV4dCB0ZXh0PSJSaWdodCIgaGludD0iT3Bwb3NpdGUgb2YgbGVmdCJ9PC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPTEge2lmIGlzc2V0KCRmb3JtLkxlZ2VuZFBvcykgYW5kICRmb3JtLkxlZ2VuZFBvcyBlcSAiMSJ9c2VsZWN0ZWR7L2lmfT57Zy0+dGV4dCB0ZXh0PSJMZWZ0IiBoaW50PSJPcHBvc2l0ZSBvZiByaWdodCJ9PC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPTIge2lmIGlzc2V0KCRmb3JtLkxlZ2VuZFBvcykgYW5kICRmb3JtLkxlZ2VuZFBvcyBlcSAiMiJ9c2VsZWN0ZWR7L2lmfT57Zy0+dGV4dCB0ZXh0PSJUb3AiIGhpbnQ9Ik9wcG9zaXRlIG9mIGJvdHRvbSJ9PC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPTMge2lmIGlzc2V0KCRmb3JtLkxlZ2VuZFBvcykgYW5kICRmb3JtLkxlZ2VuZFBvcyBlcSAiMyJ9c2VsZWN0ZWR7L2lmfT57Zy0+dGV4dCB0ZXh0PSJCb3R0b20iIGhpbnQ9Ik9wcG9zaXRlIG9mIHRvcCJ9PC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPTQge2lmIGlzc2V0KCRmb3JtLkxlZ2VuZFBvcykgYW5kICRmb3JtLkxlZ2VuZFBvcyBlcSAiNCJ9c2VsZWN0ZWR7L2lmfT57Zy0+dGV4dCB0ZXh0PSJIaWRlIiBoaW50PSJEb24ndCBkaXNwbGF5In08L29wdGlvbj4KICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgIDwvdGQ+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGggY29sc3Bhbj0zPjxsYWJlbCBmb3I9IlBob3RvTGVnZW5kIj57Zy0+dGV4dCB0ZXh0PSJQaG90byBMZWdlbmQifTo8L2xhYmVsPjwvdGg+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iVXNlUGhvdG9MZWdlbmQiPntnLT50ZXh0IHRleHQ9IkFjdGl2YXRlIDx1PlA8L3U+aG90byBMZWdlbmQifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfTF9MZWdlbmRQaG90bywzMDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICA8dGQ+CiAgICAgICAgICA8aW5wdXQgYWNjZXNza2V5PSJwIiB0eXBlPSJjaGVja2JveCIgbmFtZSA9InVzZXBob3RvbGVnZW5kIiB2YWx1ZT0iMSJ7aWYgJGZvcm0uUGhvdG9MZWdlbmR9Y2hlY2tlZHsvaWZ9Lz4KICAgICAgICA8L3RkPgogICA8L3RyPgogICA8dHI+CiAgICAgPHRoPjxsYWJlbCBmb3I9IkV4cGFuZFBob3RvTGVnZW5kIj57Zy0+dGV4dCB0ZXh0PSJJbml0aWFsbHkgRXhwYW5kIExlZ2VuZCJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9MX0xlZ2VuZFBob3RvRXhwLDMwMCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZSA9IkV4cGFuZFBob3RvTGVnZW5kIiB2YWx1ZT0iMSJ7aWYgJGZvcm0uRXhwYW5kUGhvdG9MZWdlbmR9Y2hlY2tlZHsvaWZ9Lz4KICAgICAgICAgIHtnLT50ZXh0IHRleHQ9Ik5vdCB2YWxpZCB3aGVuIGxlZ2VuZCBpcyBsb2NhdGVkIG9uIHRoZSB0b3Agb3IgYm90dG9tIn0KICAgICAgICA8L3RkPgogICA8L3RyPgogICB7Zm9yZWFjaCBmcm9tPSRmb3JtLmFsbG1hcmtlcnMga2V5PW51bSBpdGVtPWltYWdlbGlzdH0KICAge2ZvcmVhY2ggZnJvbT0kaW1hZ2VsaXN0IGtleT1uYW1lIGl0ZW09aW1hZ2VzfQogICAgIHtpZiAkbmFtZSBlcSAkZm9ybS51c2VNYXJrZXJTZXR9CiAgICAge2ZvcmVhY2ggZnJvbT0kaW1hZ2VzIGl0ZW09aW1hZ2Uga2V5PW51bX0KICAgICAgIDx0ciB7aWYgISRmb3JtLlBob3RvTGVnZW5kfXN0eWxlPSJkaXNwbGF5Om5vbmU7InsvaWZ9PgogICAgICAgICA8dGg+CiAgICAgICAgICAgeyRpbWFnZX0KICAgICAgICAgPC90aD4KICAgICAgICAgPHRkIGNvbHNwYW49Mj4KICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0yMCBuYW1lPSJQeyRudW19IiB7aWYgJGZvcm0uUGhvdG9MZWdlbmRzIG5lcSAiIn12YWx1ZT0ieyRmb3JtLlBob3RvTGVnZW5kc1skbnVtXX0iey9pZn0+PC9pbnB1dD4KICAgICAgICAgPC90ZD4KICAgICAgIDwvdHI+CiAgICAgICB7L2ZvcmVhY2h9CiAgICAgey9pZn0KICAgey9mb3JlYWNofQogICB7L2ZvcmVhY2h9CiAgIDx0cj4KICAgICA8dGggY29sc3Bhbj0zPjxsYWJlbCBmb3I9IkFsYnVtTGVnZW5kIj57Zy0+dGV4dCB0ZXh0PSJBbGJ1bSBMZWdlbmQifTo8L2xhYmVsPjwvdGg+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iVXNlQWxidW1MZWdlbmQiPntnLT50ZXh0IHRleHQ9IkFjdGl2YXRlIEFsYnVtIDx1Pkw8L3U+ZWdlbmQifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfTF9MZWdlbmRBbGJ1bSwzNTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICA8dGQ+CiAgICAgICAgICA8aW5wdXQgYWNjZXNza2V5PSJsIiB0eXBlPSJjaGVja2JveCIgbmFtZSA9InVzZWFsYnVtbGVnZW5kIiB2YWx1ZT0iMSIge2lmICRmb3JtLkFsYnVtTGVnZW5kfWNoZWNrZWR7L2lmfS8+CiAgICAgICAgPC90ZD4KICAgPC90cj4KICAgPHRyPgogICAgIDx0aD48bGFiZWwgZm9yPSJFeHBhbmRBbGJ1bUxlZ2VuZCI+e2ctPnRleHQgdGV4dD0iSW5pdGlhbGx5IEV4cGFuZCBMZWdlbmQifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfTF9MZWdlbmRBbGJ1bUV4cCwzNTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICA8dGQ+CiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWUgPSJFeHBhbmRBbGJ1bUxlZ2VuZCIgdmFsdWU9IjEie2lmICRmb3JtLkV4cGFuZEFsYnVtTGVnZW5kfWNoZWNrZWR7L2lmfS8+CiAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJOb3QgdmFsaWQgd2hlbiBsZWdlbmQgaXMgbG9jYXRlZCBvbiB0aGUgdG9wIG9yIGJvdHRvbSJ9CiAgICAgICAgPC90ZD4KICAgPC90cj4KICAge2ZvcmVhY2ggZnJvbT0kZm9ybS5hbGxtYXJrZXJzIGtleT1udW0gaXRlbT1pbWFnZWxpc3R9CiAgIHtmb3JlYWNoIGZyb209JGltYWdlbGlzdCBrZXk9bmFtZSBpdGVtPWltYWdlc30KICAgICB7aWYgJG5hbWUgZXEgJGZvcm0udXNlQWxidW1NYXJrZXJTZXR9CiAgICAge2ZvcmVhY2ggZnJvbT0kaW1hZ2VzIGl0ZW09aW1hZ2Uga2V5PW51bX0KICAgICAgIDx0ciB7aWYgISRmb3JtLkFsYnVtTGVnZW5kfXN0eWxlPSJkaXNwbGF5Om5vbmU7InsvaWZ9PgogICAgICAgICA8dGg+CiAgICAgICAgICAgeyRpbWFnZX0KICAgICAgICAgPC90aD4KICAgICAgICAgPHRkIGNvbHNwYW49Mj4KICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0yMCBuYW1lPSJBeyRudW19IiB7aWYgJGZvcm0uQWxidW1MZWdlbmRzIG5lcSAiIn12YWx1ZT0ieyRmb3JtLkFsYnVtTGVnZW5kc1skbnVtXX0iey9pZn0+PC9pbnB1dD4KICAgICAgICAgPC90ZD4KICAgICAgIDwvdHI+CiAgICAgICB7L2ZvcmVhY2h9CiAgICAgey9pZn0KICAgey9mb3JlYWNofQogICB7L2ZvcmVhY2h9CiAgIDx0cj4KICAgICA8dGggY29sc3Bhbj0zPjxsYWJlbCBmb3I9Ikdyb3VwTGVnZW5kIj57Zy0+dGV4dCB0ZXh0PSJHcm91cCBMZWdlbmQifTo8L2xhYmVsPjwvdGg+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iVXNlR3JvdXBMZWdlbmQiPntnLT50ZXh0IHRleHQ9IkFjdGl2YXRlIEdyb3VwIExlZ2VuZCJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9MX0xlZ2VuZEdyb3VwLDQ1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZSA9IlVzZUdyb3VwTGVnZW5kIiB2YWx1ZT0iMSJ7aWYgJGZvcm0uR3JvdXBMZWdlbmR9Y2hlY2tlZHsvaWZ9Lz4KICAgICAgICA8L3RkPgogICA8L3RyPgogICA8dHI+CiAgICAgPHRoPjxsYWJlbCBmb3I9IkV4cGFuZEdyb3VwTGVnZW5kIj57Zy0+dGV4dCB0ZXh0PSJJbml0aWFsbHkgRXhwYW5kIExlZ2VuZCJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9MX0xlZ2VuZEdyb3VwRXhwLDQ1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZSA9IkV4cGFuZEdyb3VwTGVnZW5kIiB2YWx1ZT0iMSJ7aWYgJGZvcm0uRXhwYW5kR3JvdXBMZWdlbmR9Y2hlY2tlZHsvaWZ9Lz4KICAgICAgICAgIHtnLT50ZXh0IHRleHQ9Ik5vdCB2YWxpZCB3aGVuIGxlZ2VuZCBpcyBsb2NhdGVkIG9uIHRoZSB0b3Agb3IgYm90dG9tIn0KICAgICAgICA8L3RkPgogICA8L3RyPgogICB7Zm9yZWFjaCBmcm9tPSRmb3JtLmFsbG1hcmtlcnMga2V5PW51bSBpdGVtPWltYWdlbGlzdH0KICAge2ZvcmVhY2ggZnJvbT0kaW1hZ2VsaXN0IGtleT1uYW1lIGl0ZW09aW1hZ2VzfQogICAgIHtpZiAkbmFtZSBlcSAkZm9ybS51c2VHcm91cE1hcmtlclNldH0KICAgICB7Zm9yZWFjaCBmcm9tPSRpbWFnZXMgaXRlbT1pbWFnZSBrZXk9bnVtfQogICAgICAgPHRyIHtpZiAhJGZvcm0uR3JvdXBMZWdlbmR9c3R5bGU9ImRpc3BsYXk6bm9uZTsiey9pZn0+CiAgICAgICAgIDx0aD4KICAgICAgICAgICB7JGltYWdlfQogICAgICAgICA8L3RoPgogICAgICAgICA8dGQgY29sc3Bhbj0yPgogICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPTIwIG5hbWU9Ikd7JG51bX0iIHtpZiAkZm9ybS5Hcm91cExlZ2VuZHMgbmVxICIifXZhbHVlPSJ7JGZvcm0uR3JvdXBMZWdlbmRzWyRudW1dfSJ7L2lmfT48L2lucHV0PgogICAgICAgICA8L3RkPgogICAgICAgPC90cj4KICAgICAgIHsvZm9yZWFjaH0KICAgICB7L2lmfQogICB7L2ZvcmVhY2h9CiAgIHsvZm9yZWFjaH0KICA8L3RhYmxlPgo8ZGl2PgoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW3NhdmVdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJTYXZlIExlZ2VuZCJ9Ii8+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtjYW5jZWxdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJDYW5jZWwiIGhpbnQ9IkRpc2NhcmQgY2hhbmdlcyJ9Ii8+CjwvZGl2Pg==');
expand_3537250845($outputDir, 'templates/MapMarkersAdmin.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxoMj57Zy0+dGV4dCB0ZXh0PSJNYXAgTW9kdWxlIFNldHRpbmdzIn0gICA8YSBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MHB4O2JvcmRlci10b3A6MnB4IHNvbGlkICNjZWNlY2U7IGJvcmRlci1sZWZ0OjJweCBzb2xpZCAjY2VjZWNlOyBib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNGE0YTRhO2JvcmRlci1yaWdodDoycHggc29saWQgIzRhNGE0YTtwYWRkaW5nOi4yZW07cGFkZGluZy1yaWdodDoxZW07cGFkZGluZy1sZWZ0OjFlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzAwMDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7IiBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9bWFwLlNob3dNYXAifSI+e2ctPnRleHQgdGV4dD0iU2hvdyBHb29nbGUgTWFwIn08L2E+PC9oMj4KPC9kaXY+Cgo8IS0tCkJlZ2lubmluZyBvZiBlcnJvci9zdWNjZXNzIGRpc3BsYXlpbmcKLS0+CntpZiBpc3NldCgkc3RhdHVzLnNhdmVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lTdWNjZXNzIj57Zy0+dGV4dCB0ZXh0PSJTZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQhIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CntpZiBpc3NldCgkc3RhdHVzLmdlbmVyYXRlZCl9CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICA8aDIgY2xhc3M9ImdpU3VjY2VzcyI+e2ctPnRleHQgdGV4dD0iTWFya2VycyBoYXZlIGJlZW4gZ2VuZXJhdGVkIHN1Y2Nlc2Z1bGx5ISJ9PC9oMj4KICAgICAgICA8aDIgY2xhc3M9ImdpV2FybmluZyI+e2ctPnRleHQgdGV4dD0iU2F2ZSBzZXR0aW5ncyBiZWZvcmUgY29udGludWluZyEifTwvaDI+CiAgICA8L2Rpdj4Key9pZn0Ke2lmIGlzc2V0KCRzdGF0dXMuZGVsZXRlZCl9CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICA8aDIgY2xhc3M9ImdpU3VjY2VzcyI+e2ctPnRleHQgdGV4dD0iVGhlIE1hcmtlciBTZXQgaGFzIGJlZW4gZGVsZXRlZCwgaXQgY2FuIGJlIHJlY3JlYXRlZCB2aWEgdGhlIEFkZCBidXR0b24ifTwvaDI+CiAgICAgICAgPGgyIGNsYXNzPSJnaVdhcm5pbmciPntnLT50ZXh0IHRleHQ9IlNhdmUgc2V0dGluZ3MgYmVmb3JlIGNvbnRpbnVpbmchIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CntpZiAhZW1wdHkoJGZvcm0uZXJyb3IpfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJUaGVyZSB3YXMgYSBwcm9ibGVtIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0LiJ9PC9oMj4KPC9kaXY+CnsvaWZ9CntpZiBpc3NldCgkZm9ybS5lcnJvci5jcmVhdGVkaXIpfQogICAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgICAgICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJDYW5ub3QgY3JlYXRlIHRoZSBtYXJrZXIgZGlyZWN0b3J5LCBjaGVjayBwZXJtaXNzaW9ucy4ifTwvaDI+CiAgICA8L2Rpdj4Key9pZn0Ke2lmIGlzc2V0KCRmb3JtLmNyZWF0ZWljb25zKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lFcnJvciI+e2ctPnRleHQgdGV4dD0iVW5rbm93biBlcnJvciBjcmVhdGluZyB0aGUgbWFya2VycyEifTwvaDI+CiAgICA8L2Rpdj4Key9pZn0Ke2lmIGlzc2V0KCRmb3JtLmVycm9yLm5vZmlsZXNlbGVjdGVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lFcnJvciI+e2ctPnRleHQgdGV4dD0iUGxlYXNlIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkISJ9PC9oMj4KICAgIDwvZGl2Pgp7L2lmfQp7aWYgaXNzZXQoJGZvcm0uZXJyb3IuYmFkZmlsZXNlbGVjdGVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lFcnJvciI+e2ctPnRleHQgdGV4dD0iUGxlYXNlIHNlbGVjdCBhIFBORyBmaWxlIHRvIHVwbG9hZCEifTwvaDI+CiAgICA8L2Rpdj4Key9pZn0Ke2lmIGlzc2V0KCRmb3JtLmVycm9yLm5vdHVwbG9hZGVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lFcnJvciI+e2ctPnRleHQgdGV4dD0iRmlsZSBub3QgdXBsb2FkZWQsIGNoZWNrIHRoYXQgUEhQIHN1cHBvcnRzIGZpbGUgdXBsb2FkIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CntpZiBpc3NldCgkZm9ybS5lcnJvci5yaWdodHNlcnJvcil9CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICA8aDIgY2xhc3M9ImdpRXJyb3IiPntnLT50ZXh0IHRleHQ9IkZpbGUgbm90IHVwbG9hZGVkLCBjaGVjayB0aGUgcmlnaHRzIG9uIHRoZSBtYXAvaW1hZ2VzIGZvbGRlciBhbmQgc3ViZm9sZGVycyJ9PC9oMj4KICAgIDwvZGl2Pgp7L2lmfQp7aWYgaXNzZXQoJHN0YXR1cy51cGxvYWRlZCl9CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICA8aDIgY2xhc3M9ImdpU3VjY2VzcyI+e2ctPnRleHQgdGV4dD0iRmlsZSBzdWNjZXNzZnVsbHkgdXBsb2FkZWQifTwvaDI+CiAgICA8L2Rpdj4Key9pZn0KPCEtLQpFbmQgb2YgZXJyb3Ivc3VjY2VzcyBkaXNwbGF5aW5nCi0tPgoKe2luY2x1ZGUgZmlsZT0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcEFkbWluVGFiLnRwbCIgbW9kZT0iTWFya2VycyJ9Cgo8IS0tIEhlbHAgRGl2IC0tPgo8ZGl2IGlkPSJoZWxwZGl2IiBzdHlsZT0idmlzaWJpbGl0eTpoaWRkZW47Ym9yZGVyOjJweCBzb2xpZCBibGFjaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDozNTBweDt0b3A6MjAwcHg7d2lkdGg6MjUwcHg7aGVpZ2h0OjE1MHB4OyI+CiAgICA8ZGl2IGlkPSJoZWxwaGVhZCIgc3R5bGU9IndpZHRoOjI1MHB4O2hlaWdodDoyNXB4O2JhY2tncm91bmQ6IzE1MDA5NTtjb2xvcjp3aGl0ZTtib3JkZXItYm90dG9tOjJweCBzb2xpZCBibGFjazsiPjxpbWcgYWx0PSJub25lIiB7aWYgISRmb3JtLklFfXN0eWxlPSJmbG9hdDpsZWZ0OyIgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyJ7ZWxzZX1zcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZicgc3R5bGU9J2Zsb2F0OmxlZnQ7ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7J3svaWZ9Lz48dGFibGUgc3R5bGU9ImhlaWdodDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPjx0cj48dGQgc3R5bGU9IndpZHRoOjIzMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsiPjxiPkhlbHAgV2luZG93PC9iPjwvdGQ+PHRkIHN0eWxlPSJ3aWR0aDoyNXB4O2N1cnNvcjpwb2ludGVyOyIgb25jbGljaz0iamF2YXNjcmlwdDpoaWRlaGVscCgpIj48Y2VudGVyPjxiPlg8L2I+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CiAgICA8ZGl2IGlkPSJoZWxwdGV4dCIgc3R5bGU9IndpZHRoOjI1MHB4O2hlaWdodDoxMjNweDtjb2xvcjpibGFjaztmb250LXNpemU6MTJweDtiYWNrZ3JvdW5kOiNCMkU0RjY7LW1vei1vcGFjaXR5Oi43NTtmaWx0ZXI6YWxwaGEob3BhY2l0eT03NSk7b3BhY2l0eTouNzU7b3ZlcmZsb3c6YXV0bztjbGVhcjpib3RoOyI+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gRW5kIG9mIEhlbHAgRGl2IC0tPgoKPCEtLQpNYXJrZXJzIHNldHRpbmdzCi0tPgoKe2lmICRmb3JtLm1vZGUgZXEgJyd9CjxkaXYgY2xhc3M9ImdiQmxvY2siPgogIDxoMz4ge2ctPnRleHQgdGV4dD0iTWFya2VycyJ9PC9oMz4KCiAgPHAgY2xhc3M9ImdpRGVzY3JpcHRpb24iPgogICAge2ctPnRleHQgdGV4dD0iVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIG1hcmtlciBzZXR0aW5ncyJ9CiAgPC9wPgogICAgICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJDaG9vc2VNYXJrZXJTZXQiPntnLT50ZXh0IHRleHQ9Ik1hbmFnZSBtYXJrZXIgc2V0cyJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9NX01hbmFnZSwyMDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICB7aWYgKChpc3NldCgkZm9ybS5ub21hcmtlcnMpKSBvciAoaXNzZXQoJGZvcm0uZXJyb3Iubm9tYXJrZXJzKSkpfQogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iZ2lFcnJvciI+e2ctPnRleHQgdGV4dD0iUGxlYXNlIGNyZWF0ZSBzb21lIG1hcmtlcnMifSAtJmd0OzwvaDI+CiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgICAgIHtpZiAhKGlzc2V0KCRmb3JtLm5vbWFya2VycykpfQogICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVt2aWV3YWxsXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iVmlldyBBbGwgQXZhaWxhYmxlIn0iLz4KICAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bYWRkXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iQWRkIiBoaW50PSJDcmVhdGUgbmV3In0iLz4KICAgICAgICAgICAgICAgIHtpZiAhKGlzc2V0KCRmb3JtLm5vbWFya2VycykpfQogICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtkZWxldGVdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJEZWxldGUifSIvPgogICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtkZWxldGVNYXJrZXJTZXRdIn0iIHZhbHVlPSJ7JGZvcm0uZGVsZXRlTWFya2VyU2V0fSI+CiAgICAgICAgICAgICAgICAgICB7JGZvcm0ubWFya2Vyc2V0fQogICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJDaG9vc2VNYXJrZXJTZXQiPntnLT50ZXh0IHRleHQ9IlNlbGVjdCBkZWZhdWx0IHBob3RvIG1hcmtlciBzZXQgYW5kIGNvbG9yIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX01fRGVmUGhvdG8sMjAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIHtpZiAhKGlzc2V0KCRmb3JtLm5vbWFya2VycykpfQogICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVt1c2VNYXJrZXJTZXRdIn0iIHZhbHVlPSJ7JGZvcm0udXNlTWFya2VyU2V0fSI+CiAgICAgICAgICAgICAgICAgICB7JGZvcm0ubWFya2Vyc2V0fQogICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgICAge2lmICgoaXNzZXQoJGZvcm0ubm9tYXJrZXJzKSkgb3IgKGlzc2V0KCRmb3JtLmVycm9yLm5vbWFya2VycykpKX0KICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImdpRXJyb3IiPntnLT50ZXh0IHRleHQ9IllvdSBuZWVkIHRvIGNyZWF0ZSBzb21lIG1hcmtlcnMgZmlyc3QuIn08L2gyPgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICAgICAge2lmICEoaXNzZXQoJGZvcm0ubm9tYXJrZXJzKSkgYW5kICgoIWlzc2V0KCRmb3JtLnVzZU1hcmtlclNldCkpIG9yICRmb3JtLnVzZU1hcmtlclNldD09JycpfQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJQbGVhc2Ugc2VsZWN0IGEgZGVmYXVsdCBtYXJrZXIgc2V0IGFuZCBzYXZlLiJ9PC9oMj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICAgICAge2lmICEoaXNzZXQoJGZvcm0ubm9tYXJrZXJzKSl9CiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtkZWZhdWx0cGhvdG9jb2xvcl0ifSIgdmFsdWU9InskZm9ybS5kZWZhdWx0cGhvdG9jb2xvcn0iPgogICAgICAgICAgICAgICAgICAgIHskZm9ybS5jb2xvclBvcHRpb259CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJDaG9vc2VNYXJrZXJTZXQiPntnLT50ZXh0IHRleHQ9IlNlbGVjdCBkZWZhdWx0IGFsYnVtIG1hcmtlciBzZXQgYW5kIGNvbG9yIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX01fRGVmQWxidW0sMjAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICB7aWYgIShpc3NldCgkZm9ybS5ub21hcmtlcnMpKX0KICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bdXNlQWxidW1NYXJrZXJTZXRdIn0iIHZhbHVlPSJ7JGZvcm0udXNlQWxidW1NYXJrZXJTZXR9Ij4KICAgICAgICAgICAgICAgICAgIHskZm9ybS5hbGJ1bW1hcmtlcnNldH0KICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgICAgICB7aWYgIShpc3NldCgkZm9ybS5ub21hcmtlcnMpKSBhbmQgKCghaXNzZXQoJGZvcm0udXNlQWxidW1NYXJrZXJTZXQpKSBvciAkZm9ybS51c2VBbGJ1bU1hcmtlclNldD09JycpfQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJQbGVhc2Ugc2VsZWN0IGEgZGVmYXVsdCBtYXJrZXIgc2V0IGFuZCBzYXZlLiJ9PC9oMj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICAgICAge2lmICEoaXNzZXQoJGZvcm0ubm9tYXJrZXJzKSl9CiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtkZWZhdWx0YWxidW1jb2xvcl0ifSIgdmFsdWU9InskZm9ybS5kZWZhdWx0YWxidW1jb2xvcn0iPgogICAgICAgICAgICAgICAgICAgIHskZm9ybS5jb2xvckFvcHRpb259CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgICAgICB7aWYgKChpc3NldCgkZm9ybS5ub21hcmtlcnMpKSBvciAoaXNzZXQoJGZvcm0uZXJyb3Iubm9tYXJrZXJzKSkpfQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJZb3UgbmVlZCB0byBjcmVhdGUgc29tZSBtYXJrZXJzIGZpcnN0LiJ9PC9oMj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iQ2hvb3NlTWFya2VyU2V0Ij57Zy0+dGV4dCB0ZXh0PSJTZWxlY3QgZGVmYXVsdCBncm91cCBtYXJrZXIgc2V0IGFuZCBjb2xvciJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9NX0RlZkdyb3VwLDIwMCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICB7aWYgIShpc3NldCgkZm9ybS5ub21hcmtlcnMpKX0KICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bdXNlR3JvdXBNYXJrZXJTZXRdIn0iIHZhbHVlPSJ7JGZvcm0udXNlR3JvdXBNYXJrZXJTZXR9Ij4KICAgICAgICAgICAgICAgICAgIHskZm9ybS5ncm91cG1hcmtlcnNldH0KICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgICAgIHtpZiAoKGlzc2V0KCRmb3JtLm5vbWFya2VycykpIG9yIChpc3NldCgkZm9ybS5lcnJvci5ub21hcmtlcnMpKSl9CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJZb3UgbmVlZCB0byBjcmVhdGUgc29tZSBtYXJrZXJzIGZpcnN0LiJ9PC9oMj4KICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgICAgIHtpZiAhKGlzc2V0KCRmb3JtLm5vbWFya2VycykpIGFuZCAoKCFpc3NldCgkZm9ybS51c2VHcm91cE1hcmtlclNldCkpIG9yICRmb3JtLnVzZUdyb3VwTWFya2VyU2V0PT0nJyl9CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImdpRXJyb3IiPntnLT50ZXh0IHRleHQ9IlBsZWFzZSBzZWxlY3QgYSBkZWZhdWx0IG1hcmtlciBzZXQgYW5kIHNhdmUuIn08L2gyPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgICAgICB7aWYgIShpc3NldCgkZm9ybS5ub21hcmtlcnMpKX0KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2RlZmF1bHRncm91cGNvbG9yXSJ9IiB2YWx1ZT0ieyRmb3JtLmRlZmF1bHRncm91cGNvbG9yfSI+CiAgICAgICAgICAgICAgICAgICAgeyRmb3JtLmNvbG9yR29wdGlvbn0KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9InVzZVBhcmVudENvbG9yIj57Zy0+dGV4dCB0ZXh0PSJVc2UgcGFyZW50IGFsYnVtIGM8dT5vPC91PmxvciBmb3IgaXRlbXMgd2l0aCBubyBjb2xvciBzZXR0aW5nIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX01fVXNlUGFyZW50LDIwMCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgYWNjZXNza2V5PSJvIiB0eXBlPSJjaGVja2JveCIgaWQ9InVzZVBhcmVudENvbG9yIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVt1c2VQYXJlbnRDb2xvcl0ifSIKICAgICAgICAgICAgICAgICAgICB7aWYgJGZvcm0udXNlUGFyZW50Q29sb3J9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfQogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIxIi8+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgPC90YWJsZT4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICA8aDM+IHtnLT50ZXh0IHRleHQ9IkF1dG9tYXRpYyBSZWdyb3VwIFNldHRpbmdzIn08L2gzPgoKICA8cCBjbGFzcz0iZ2lEZXNjcmlwdGlvbiI+CiAgICB7Zy0+dGV4dCB0ZXh0PSJUaGlzIHNlY3Rpb24gYWxsb3dzIHlvdSB0byB1c2UgdGhlIHJlZ3JvdXAgZmVhdHVyZSJ9CiAgPC9wPgogICAgICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJyZWdyb3VwQWxidW1zIj57Zy0+dGV4dCB0ZXh0PSJBdXRvbWF0aWMgPHU+YTwvdT5sYnVtIGJhc2VkIHJlZ3JvdXAifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfTV9BbGJ1bVJlZ3JvdXAsNTAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCBhY2Nlc3NrZXk9ImEiIHR5cGU9ImNoZWNrYm94IiBpZD0icmVncm91cEFsYnVtcyIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bcmVncm91cEFsYnVtc10ifSIKICAgICAgICAgICAgICAgICAgICB7aWYgJGZvcm0ucmVncm91cEFsYnVtc31jaGVja2VkPSJjaGVja2VkInsvaWZ9CiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjEiLz4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9InJlZ3JvdXBJdGVtcyI+e2ctPnRleHQgdGV4dD0iQXV0b21hdGljIDx1Pmk8L3U+dGVtIHJlZ3JvdXAifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfTV9JdGVtUmVncm91cCw1MDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IGFjY2Vzc2tleT0iaSIgdHlwZT0iY2hlY2tib3giIGlkPSJyZWdyb3VwSXRlbXMiCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW3JlZ3JvdXBJdGVtc10ifSIKICAgICAgICAgICAgICAgICAgICB7aWYgJGZvcm0ucmVncm91cEl0ZW1zfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0KICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iMSIgb25jbGljaz0iVG9nZ2xlSW5wdXRzKFsncmVncm91cEljb24nXSk7Ii8+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJSZWdyb3VwRGlzdCI+e2ctPnRleHQgdGV4dD0iSXRlbSByZWdyb3VwIGRpc3RhbmNlIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX01fRGlzdGFuY2UsNTAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icmVncm91cERpc3QiCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW3JlZ3JvdXBEaXN0XSJ9IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJ7JGZvcm0ucmVncm91cERpc3R9IiBtYXhsZW5ndGg9IjIiIHNpemU9IjIiLz4KICAgICAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5yZWdyb3VwRGlzdCl9CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdpRXJyb3IiPgogICAgICAgICAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJQbGVhc2Ugc3BlY2lmeSBhIHBvc2l0aXZlIGludGVnZXIuIn0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0aD48bGFiZWw+e2ctPnRleHQgdGV4dD0iVXBsb2FkIGEgbmV3IEljb24ifTwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9NX1VwbG9hZE5ldyw1MDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICAgPHRkPgogICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtWzJdIn0iLz4KICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bdXBsb2FkaWNvbl0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IlVwbG9hZCBhIG5ldyBJY29uIn0iIC8+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGg+CiAgICAgICAgPGxhYmVsIGZvcj0iUmVncm91cEljb24iPntnLT50ZXh0IHRleHQ9Ikljb24gZm9yIHJlZ3JvdXBlZCBtYXJrZXJzIn06PC9sYWJlbD4KICAgICAgICB7aWYgaXNzZXQoJGZvcm0uZXJyb3IubWFya2VyKX0KICAgICAgICAgICAgPGJyXD48c3BhbiBjbGFzcz0iZ2lFcnJvciI+CiAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJQbGVhc2Ugc2VsZWN0IGFuIGljb24uIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgIHsvaWZ9CiAgICAgIDwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfTV9JY29uRm9yUmVncm91cCw1MDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgPHRkPgogICAgICA8dGFibGUgYm9yZGVyPTEgc3R5bGU9J2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsnPgogICAgICAgIDx0cj4KICAgICAgICB7Zm9yZWFjaCBmcm9tPSRmb3JtLm11bHRpbWFya2VycyBrZXk9cGljbmFtZSBpdGVtPXNpemV9CiAgICAgICAgICA8dGQgYWxpZ249Y2VudGVyPjxpbnB1dCB7aWYgISRmb3JtLnJlZ3JvdXBJdGVtc31kaXNhYmxlZD0idHJ1ZSJ7L2lmfSBpZD0iaXRlbWljb24iIHR5cGU9cmFkaW8gbmFtZT0icmVncm91cEljb24iIHZhbHVlPSJ7JHBpY25hbWV9IiB7aWYgJGZvcm0ucmVncm91cEljb24gZXEgJHBpY25hbWV9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+PC90ZD4KICAgICAgICB7L2ZvcmVhY2h9CiAgICAgICAgPC90cj48dHI+CiAgICAgICAge2ZvcmVhY2ggZnJvbT0kZm9ybS5tdWx0aW1hcmtlcnMga2V5PXBpY25hbWUgaXRlbT1zaXplfQogICAgICAgICAgPHRkIGFsaWduPWNlbnRlcj48aW1nIHNyYz17JHNpemUuMn0vPjwvdGQ+CiAgICAgICAgey9mb3JlYWNofQogICAgICAgIDwvdHI+CiAgICAgIDwvdGFibGU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGFibGU+CjwvZGl2PgoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW3NhdmVdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJTYXZlIFNldHRpbmdzIn0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2NhbmNlbF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkNhbmNlbCIgaGludD0iRGlzY2FyZCBjaGFuZ2VzIn0iLz4KPC9kaXY+CnsvaWZ9Cgo8IS0tCkRpc3BsYXlpbmcgYWxsIHRoZSBNYXJrZXJTZXQgYWxyZWFkeSBjcmVhdGVkCi0tPgp7aWYgJGZvcm0ubW9kZSBlcSAnVmlld01hcmtlcnMnfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KIDxoMz4ge2ctPnRleHQgdGV4dD0iVmlldyBBbGwgQXZhaWxhYmxlIE1hcmtlclNldHMifSA8L2gzPgoKIDxwIGNsYXNzPSJnaURlc2NyaXB0aW9uIj4KICAge2ctPnRleHQgdGV4dD0iVGhpcyBzZWN0aW9uIHNob3dzIGFsbCBhdmFpbGFibGUgTWFya2VyU2V0cyJ9CiA8L3A+CiAgICB7aWYgKGlzc2V0KCRmb3JtLm5vbWFya2VycykpfQogICAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgICAgICA8aDIgY2xhc3M9ImdpRXJyb3IiPntnLT50ZXh0IHRleHQ9IlRoZXJlIGFyZSBubyBNYXJrZXJTZXRzIHRvIGRpc3BsYXksIGhvdyBkaWQgeW91IGdldCBoZXJlPyJ9PC9oMj4KICAgIDwvZGl2PgogICAgey9pZn0KICAgIHtpZiAhKGlzc2V0KCRmb3JtLm5vbWFya2VycykpfQogICAgIDx0YWJsZSBjbGFzcz0iZ2JEYXRhVGFibGUiIHN0eWxlPSdib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Jz4KICAgICAgICAge2ZvcmVhY2ggZnJvbT0kZm9ybS5hbGxtYXJrZXJzIGtleT1udW0gaXRlbT1pbWFnZWxpc3R9CiAgICAgICAgIHtmb3JlYWNoIGZyb209JGltYWdlbGlzdCBrZXk9bmFtZSBpdGVtPWltYWdlc30KICAgICAgICAgIDx0cj4KICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0ieyRuYW1lfSI+eyRuYW1lfTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgPHRkPgogICAgICAgICAgICB7Zm9yZWFjaCBmcm9tPSRpbWFnZXMgaXRlbT1pbWFnZX17JGltYWdlfXsvZm9yZWFjaH0KICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIHsvZm9yZWFjaH0KICAgICAgICAgIHsvZm9yZWFjaH0KICAgIDwvdGFibGU+CiAgICB7L2lmfQogPC9kaXY+CjxkaXYgY2xhc3M9ImdiQmxvY2sgZ2NCYWNrZ3JvdW5kMSI+CiAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2NhbmNlbF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IlJldHVybiIgaGludD0iR28gYmFjayJ9Ii8+CjwvZGl2Pgp7L2lmfQoKCjwhLS0KRGlzcGxheWluZyB0aGUgbWFya2VyIGNyZWF0aW9uIHRvb2wgd2hlbiByZXF1ZXN0ZWQKLS0+CntpZiAkZm9ybS5tb2RlIGVxICdUb29sJ30KPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgPGgzPiB7Zy0+dGV4dCB0ZXh0PSJNYXJrZXJzIENyZWF0aW9uIFRvb2wifSA8L2gzPgoKICA8cCBjbGFzcz0iZ2lEZXNjcmlwdGlvbiI+CiAgICB7Zy0+dGV4dCB0ZXh0PSJUaGlzIHNlY3Rpb24gcGVybWl0cyB0aGUgY3JlYXRpb24gb2YgbmV3IG1hcmtlcnMgaW4gdmFyaW91cyBzaXplcywgY29sb3JzIGFuZCBhc3BlY3RzIn0KICA8L3A+CiAge2lmICRmb3JtLm5vaW1hZ2VtYWdpY2t9CiAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgICAgPGgyIGNsYXNzPSJnaVdhcm5pbmciPntnLT50ZXh0IHRleHQ9IkltYWdlTWFnaWNrIHdhc24ndCBkZXRlY3RlZCBhcyBpbnN0YWxsZWQsIHlvdSBtYXkgZXhwZXJpZW5jZSBwcm9ibGVtIGdlbmVyYXRpbmcgbWFya2VycyJ9PC9oMj4KICA8L2Rpdj4KICB7L2lmfQogIHtpZiBpc3NldCgkZm9ybS5ub2Jhc2UpfQogIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgIDxoMiBjbGFzcz0iZ2lFcnJvciI+e2ctPnRleHQgdGV4dD0iWW91ciBCYXNlTWFya2VyIGZvbGRlciBkb2VzIG5vdCBleGlzdCwgcGxlYXNlIGNoZWNrIHRoZSBtb2R1bGUgaW5zdGFsbGF0aW9uLiJ9PC9oMj4KICA8L2Rpdj4KICB7L2lmfQoKICB7aWYgIShpc3NldCgkZm9ybS5ub2Jhc2UpKX0KICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgICAgPHRyPgogICAgICAgIDx0aD4KICAgICAgICAgIDxsYWJlbD57Zy0+dGV4dCB0ZXh0PSJCYXNlIEltYWdlIn08L2xhYmVsPgogICAgICAgICAge2lmIGlzc2V0KCRmb3JtLmVycm9yLmJhc2UpfQogICAgICAgICAgICAgIDxiclw+PHNwYW4gY2xhc3M9ImdpRXJyb3IiPgogICAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJQbGVhc2Ugc2VsZWN0IGEgYmFzZSBzdHlsZSB0byB1c2UifQogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIHsvaWZ9CiAgICAgICAgPC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9NQ19CYXNlLDQ1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICAgIDx0YWJsZSBib3JkZXI9MSBzdHlsZT0nYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyc+PHRyPgogICAgICAgICAge2ZvcmVhY2ggZnJvbT0kZm9ybS5iYXNlbWFya2VycyBrZXk9cGljbmFtZSBpdGVtPXNpemV9CiAgICAgICAgICAgIDx0ZCBhbGlnbj1jZW50ZXI+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2Jhc2VdIn0iIHZhbHVlPSd7JHBpY25hbWV9Jy8+PC90ZD4KICAgICAgICAgIHsvZm9yZWFjaH08L3RyPjx0cj4KICAgICAgICAgIHtmb3JlYWNoIGZyb209JGZvcm0uYmFzZW1hcmtlcnMga2V5PXBpY25hbWUgaXRlbT1zaXplfQogICAgICAgICAgICA8dGQgYWxpZ249Y2VudGVyPjxpbWcgc3JjPXskc2l6ZS4yfS8+PC90ZD4KICAgICAgICAgIHsvZm9yZWFjaH08L3RyPjx0cj4KICAgICAgICAgIHtmb3JlYWNoIGZyb209JGZvcm0uYmFzZW1hcmtlcnMga2V5PXBpY25hbWUgaXRlbT1zaXplfQogICAgICAgICAgICA8dGQ+Q3VycmVudCBTaXplIHskc2l6ZS4wfXh7JHNpemUuMX08L3RkPgogICAgICAgICAgey9mb3JlYWNofTwvdHI+CiAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGg+PGxhYmVsPntnLT50ZXh0IHRleHQ9IlVwbG9hZCBhIG5ldyBiYXNlIGljb24ifTwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9NQ19VcGxvYWROZXcsNDUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgPHRkPgogICAgICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bMV0ifSIvPgogICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW3VwbG9hZF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IlVwbG9hZCBhIEJhc2UgTWFya2VyIn0iIC8+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0aD48bGFiZWw+e2ctPnRleHQgdGV4dD0iTmV3IFNpemUifTwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9NQ19TaXplQ2hhbmdlLDQ1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0wIHN0eWxlPSdib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Jz4KICAgICAgICAgICAgPHRyPjx0ZD48aW5wdXQgYWNjZXNza2V5PSJkIiB0eXBlPXJhZGlvIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtzaXplXSJ9IiB2YWx1ZT0ic2FtZSIgY2hlY2tlZCBvbmNsaWNrPSdEaXNhYmxlSW5wdXRzKFsiSW1hZ2VIZWlnaHQiLCJJbWFnZVdpZHRoIl0sdHJ1ZSk7Jz57Zy0+dGV4dCB0ZXh0PSJVbmNoYW5nZTx1PmQ8L3U+In08L2lucHV0PjwvdGQ+PC90cj4KICAgICAgICAgICAgPHRyPjx0ZD48aW5wdXQgYWNjZXNza2V5PSI1IiB0eXBlPXJhZGlvIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtzaXplXSJ9IiB2YWx1ZT0iNTAiIG9uY2xpY2s9J0Rpc2FibGVJbnB1dHMoWyJJbWFnZUhlaWdodCIsIkltYWdlV2lkdGgiXSx0cnVlKTsnPntnLT50ZXh0IHRleHQ9Ijx1PjU8L3U+MCUifTwvaW5wdXQ+PC90ZD48L3RyPgogICAgICAgICAgICA8dHI+PHRkPjxpbnB1dCBhY2Nlc3NrZXk9IjIiIHR5cGU9cmFkaW8gbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW3NpemVdIn0iIHZhbHVlPSIyMDAiIG9uY2xpY2s9J0Rpc2FibGVJbnB1dHMoWyJJbWFnZUhlaWdodCIsIkltYWdlV2lkdGgiXSx0cnVlKTsnPntnLT50ZXh0IHRleHQ9Ijx1PjI8L3U+MDAlIn08L2lucHV0PjwvdGQ+PC90cj4KICAgICAgICAgICAgPHRyPjx0ZD48aW5wdXQgYWNjZXNza2V5PSJ0IiB0eXBlPXJhZGlvIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtzaXplXSJ9IiB2YWx1ZT0iY3VzdG9tIiBvbmNsaWNrPSdEaXNhYmxlSW5wdXRzKFsiSW1hZ2VIZWlnaHQiLCJJbWFnZVdpZHRoIl0sZmFsc2UpOyc+e2ctPnRleHQgdGV4dD0iQ3VzPHU+dDwvdT5vbSJ9PC9pbnB1dD4gPGlucHV0IGRpc2FibGVkIHR5cGU9dGV4dCBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bSW1hZ2VIZWlnaHRdIn0iIGlkPSJJbWFnZUhlaWdodCIgc2l6ZT0zIG1heGxlbmd0aD0zLz4geCA8aW5wdXQgZGlzYWJsZWQgdHlwZT10ZXh0IG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtJbWFnZVdpZHRoXSJ9IiBpZD0iSW1hZ2VXaWR0aCIgc2l6ZT0zIG1heGxlbmd0aD0zLz48L3RkPjwvdHI+CiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0aD48bGFiZWw+e2ctPnRleHQgdGV4dD0iQ29sb3JzIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfTUNfQ29sb3JDaGFuZ2UsNDUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgPHRkPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPTAgc3R5bGU9J2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsnPgogICAgICAgICAgICA8dHI+PHRkPjxpbnB1dCBhY2Nlc3NrZXk9ImEiIHR5cGU9cmFkaW8gbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2NvbG9yc10ifSIgdmFsdWU9YWxsIGNoZWNrZWQgb25jbGljaz0nRGlzYWJsZUlucHV0cyhbImJsdWUiLCJyZWQiLCJvcmFuZ2UiLCJncmVlbiIsInllbGxvdyIsImdyZXkiLCJibGFjayIsIndoaXRlIiwicHVycGxlIiwiYXF1YSJdLHRydWUpOyc+e2ctPnRleHQgdGV4dD0iPHU+QTwvdT5sbCBDb2xvcnMifTwvaW5wdXQ+PC90ZD48L3RyPgogICAgICAgICAgICA8dHI+PHRkPjxpbnB1dCBhY2Nlc3NrZXk9InMiIHR5cGU9cmFkaW8gbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2NvbG9yc10ifSIgdmFsdWU9Y3VzdG9tIG9uY2xpY2s9J0Rpc2FibGVJbnB1dHMoWyJibHVlIiwicmVkIiwib3JhbmdlIiwiZ3JlZW4iLCJ5ZWxsb3ciLCJncmV5IiwiYmxhY2siLCJ3aGl0ZSIsInB1cnBsZSIsImFxdWEiXSxmYWxzZSk7Jz57Zy0+dGV4dCB0ZXh0PSI8dT5TPC91PmVsZWN0ZWQgY29sb3JzIn06PC9pbnB1dD48L3RkPjwvdHI+CiAgICAgICAgICAgIDx0cj48dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggZGlzYWJsZWQgbmFtZT0nYmx1ZScgaWQ9J2JsdWUnLz57Zy0+dGV4dCB0ZXh0PSJCbHVlIn08aW5wdXQgZGlzYWJsZWQgdHlwZT1jaGVja2JveCBuYW1lPSdyZWQnIGlkPSdyZWQnLz57Zy0+dGV4dCB0ZXh0PSJSZWQifTxpbnB1dCBkaXNhYmxlZCB0eXBlPWNoZWNrYm94IG5hbWU9J3llbGxvdycgaWQ9J3llbGxvdycvPntnLT50ZXh0IHRleHQ9IlllbGxvdyJ9PGlucHV0IGRpc2FibGVkIHR5cGU9Y2hlY2tib3ggbmFtZT0nZ3JlZW4nIGlkPSdncmVlbicvPntnLT50ZXh0IHRleHQ9IkdyZWVuIn08aW5wdXQgZGlzYWJsZWQgdHlwZT1jaGVja2JveCBuYW1lPSdvcmFuZ2UnIGlkPSdvcmFuZ2UnLz57Zy0+dGV4dCB0ZXh0PSJPcmFuZ2UifTwvdGQ+PC90cj4KICAgICAgICAgICAgPHRyPjx0ZD48aW5wdXQgdHlwZT1jaGVja2JveCBkaXNhYmxlZCBuYW1lPSdhcXVhJyBpZD0nYXF1YScvPntnLT50ZXh0IHRleHQ9IkFxdWEifTxpbnB1dCBkaXNhYmxlZCB0eXBlPWNoZWNrYm94IG5hbWU9J3B1cnBsZScgaWQ9J3B1cnBsZScvPntnLT50ZXh0IHRleHQ9IlB1cnBsZSJ9PGlucHV0IGRpc2FibGVkIHR5cGU9Y2hlY2tib3ggbmFtZT0nd2hpdGUnIGlkPSd3aGl0ZScvPntnLT50ZXh0IHRleHQ9IldoaXRlIn08aW5wdXQgZGlzYWJsZWQgdHlwZT1jaGVja2JveCBuYW1lPSdibGFjaycgaWQ9J2JsYWNrJy8+e2ctPnRleHQgdGV4dD0iQmxhY2sifTxpbnB1dCBkaXNhYmxlZCB0eXBlPWNoZWNrYm94IG5hbWU9J2dyZXknIGlkPSdncmV5Jy8+e2ctPnRleHQgdGV4dD0iR3JleSJ9PC90ZD48L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGg+CiAgICAgICAgICA8bGFiZWw+e2ctPnRleHQgdGV4dD0iTWFya2VyIFNldCA8dT5OPC91PmFtZSJ9PC9sYWJlbD4KICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5zZXRuYW1lKX0KICAgICAgICAgICAgICA8YnJcPjxzcGFuIGNsYXNzPSJnaUVycm9yIj4KICAgICAgICAgICAgICAgICAge2ctPnRleHQgdGV4dD0iUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBzZXQifQogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIHsvaWZ9CiAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uZXJyb3IubXVsdGluYW1lKX0KICAgICAgICAgICAgICA8YnJcPjxzcGFuIGNsYXNzPSJnaUVycm9yIj4KICAgICAgICAgICAgICAgICAge2ctPnRleHQgdGV4dD0iVGhlIG5hbWUgPGI+bXVsdGk8L2I+IGlzIG5vdCBhbGxvd2VkLiJ9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgey9pZn0KICAgICAgICA8L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX01DX01hcmtlck5hbWUsNDUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgPHRkPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPTAgc3R5bGU9J2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsnPgogICAgICAgICAgICA8dHI+PHRkPjxpbnB1dCBhY2Nlc3NrZXk9Im4iIHR5cGU9dGV4dCBpZD0iU2V0TmFtZSIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW3NldG5hbWVdIn0iIHNpemU9MjUgbWF4bGVuZ3RoPTI0Lz48L3RkPjwvdHI+CiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICA8L3RhYmxlPgogIDwvZGl2PgogIAogIDxkaXYgY2xhc3M9ImdiQmxvY2sgZ2NCYWNrZ3JvdW5kMSI+CiAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2dlbmVyYXRlXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iR2VuZXJhdGUgTWFya2VycyJ9IiBvbkNsaWNrPSdyZXR1cm4gdmVyaWZ5KFt7JGZvcm0ubWFya2VybGlzdH1dKTsnLz4KICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bY2FuY2VsXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iQ2FuY2VsIiBoaW50PSJEaXNjYXJkIGNoYW5nZXMifSIvPgogIDwvZGl2PgogIHsvaWZ9CnsvaWZ9');
expand_3537250845($outputDir, 'templates/MapRouteAdmin.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxoMj57Zy0+dGV4dCB0ZXh0PSJNYXAgTW9kdWxlIFNldHRpbmdzIn08YSBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MHB4O2JvcmRlci10b3A6MnB4IHNvbGlkICNjZWNlY2U7IGJvcmRlci1sZWZ0OjJweCBzb2xpZCAjY2VjZWNlOyBib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNGE0YTRhO2JvcmRlci1yaWdodDoycHggc29saWQgIzRhNGE0YTtwYWRkaW5nOi4yZW07cGFkZGluZy1yaWdodDoxZW07cGFkZGluZy1sZWZ0OjFlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzAwMDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7IiBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9bWFwLlNob3dNYXAifSI+e2ctPnRleHQgdGV4dD0iU2hvdyBHb29nbGUgTWFwIn08L2E+PC9oMj4KPC9kaXY+Cgo8IS0tCkJlZ2lubmluZyBvZiBlcnJvci9zdWNjZXNzIGRpc3BsYXlpbmcKLS0+CntpZiBpc3NldCgkc3RhdHVzLnNhdmVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lTdWNjZXNzIj57Zy0+dGV4dCB0ZXh0PSJTZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQhIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CntpZiBpc3NldCgkc3RhdHVzLmNoYW5nZXN1Y2Vzcyl9CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICA8aDIgY2xhc3M9ImdpU3VjY2VzcyI+e2ctPnRleHQgdGV4dD0iVGVtcGxhdGUgZmlsZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCwgYmFja3VwIGZpbGUgY3JlYXRlZCJ9PC9oMj4KICAgIDwvZGl2Pgp7L2lmfQp7aWYgIWVtcHR5KCRmb3JtLmVycm9yKX0KPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgIDxoMiBjbGFzcz0iZ2lFcnJvciI+e2ctPnRleHQgdGV4dD0iVGhlcmUgd2FzIGEgcHJvYmxlbSBwcm9jZXNzaW5nIHlvdXIgcmVxdWVzdC4ifTwvaDI+CjwvZGl2Pgp7L2lmfQp7aWYgaXNzZXQoJGZvcm0uZXJyb3IuY2Fub3RvcGVudGVtcGxhdGUpfQogICAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgICAgICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJFcnJvciBvcGVuaW5nIGZpbGUsIGNoZWNrIHBlcm1pc3Npb25zIG9uIHRoZSBEZWZhdWx0VGhlbWUvdGVtcGxhdGUgZm9sZGVyIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CntpZiBpc3NldCgkc3RhdHVzLnJvdXRlZGVsZXRlZCl9CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICA8aDIgY2xhc3M9ImdpU3VjY2VzcyI+e2ctPnRleHQgdGV4dD0iUm91dGUgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQifTwvaDI+CiAgICA8L2Rpdj4Key9pZn0Ke2lmIGlzc2V0KCRzdGF0dXMucm91dGVzYXZlZCl9CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICA8aDIgY2xhc3M9ImdpU3VjY2VzcyI+e2ctPnRleHQgdGV4dD0iUm91dGUgc3VjY2Vzc2Z1bGx5IGVkaXRlZCBhbmQgc2F2ZWQifTwvaDI+CiAgICA8L2Rpdj4Key9pZn0KPCEtLQpFbmQgb2YgZXJyb3Ivc3VjY2VzcyBkaXNwbGF5aW5nCi0tPgoKe2luY2x1ZGUgZmlsZT0ibW9kdWxlcy9tYXAvdGVtcGxhdGVzL01hcEFkbWluVGFiLnRwbCIgbW9kZT0iUm91dGVzIn0KCjwhLS0gSGVscCBEaXYgLS0+CjxkaXYgaWQ9ImhlbHBkaXYiIHN0eWxlPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MnB4IHNvbGlkIGJsYWNrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjM1MHB4O3RvcDoyMDBweDt3aWR0aDoyNTBweDtoZWlnaHQ6MTUwcHg7Ij4KICAgIDxkaXYgaWQ9ImhlbHBoZWFkIiBzdHlsZT0id2lkdGg6MjUwcHg7aGVpZ2h0OjI1cHg7YmFja2dyb3VuZDojMTUwMDk1O2NvbG9yOndoaXRlO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGJsYWNrOyI+PGltZyBhbHQ9Im5vbmUiIHtpZiAhJGZvcm0uSUV9c3R5bGU9ImZsb2F0OmxlZnQ7IiBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIntlbHNlfXNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJyBzdHlsZT0nZmxvYXQ6bGVmdDtmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsney9pZn0vPjx0YWJsZSBzdHlsZT0iaGVpZ2h0OjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyI+PHRyPjx0ZCBzdHlsZT0id2lkdGg6MjMwcHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyI+PGI+SGVscCBXaW5kb3c8L2I+PC90ZD48dGQgc3R5bGU9IndpZHRoOjI1cHg7Y3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJqYXZhc2NyaXB0OmhpZGVoZWxwKCkiPjxjZW50ZXI+PGI+WDwvYj48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KICAgIDxkaXYgaWQ9ImhlbHB0ZXh0IiBzdHlsZT0id2lkdGg6MjUwcHg7aGVpZ2h0OjEyM3B4O2NvbG9yOmJsYWNrO2ZvbnQtc2l6ZToxMnB4O2JhY2tncm91bmQ6I0IyRTRGNjstbW96LW9wYWNpdHk6Ljc1O2ZpbHRlcjphbHBoYShvcGFjaXR5PTc1KTtvcGFjaXR5Oi43NTtvdmVyZmxvdzphdXRvO2NsZWFyOmJvdGg7Ij4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBFbmQgb2YgSGVscCBEaXYgLS0+Cgo8IS0tClJvdXRlIE1hbmFnZW1lbnQKLS0+CntpZiAkZm9ybS5tb2RlIG5lcSAnQWRkUm91dGUnfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICA8aDM+IHtnLT50ZXh0IHRleHQ9IlJvdXRlIE1hbmFnZW1lbnQifTwvaDM+CiAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAge2lmIGlzc2V0KCRmb3JtLmJhZGh0bWx0YWcpfQogICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgPGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9SX01haW5IZWxwLDI1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz4KICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICA8c3BhbiBjbGFzcz0iZ2lXYXJuaW5nIj57Zy0+dGV4dCB0ZXh0PSJZb3VyIFRoZW1lLnRwbCBmaWxlIGRvZXMgbm90IGNvbnRhaW4gdGhlIHJpZ2h0IEhUTUwgdGFnLCByb3V0ZXMgd2lsbCBub3QgZGlzcGxheSBpbiBJbnRlcm5ldCBFeHBsb3JlciJ9CiAgICAge2ctPnRleHQgdGV4dD0iUmVmZXIgdG8gJXN0aGUgTWFwIE1vZHVsZSBXaWtpJXMgKFJvdXRlIGluIElFKSBmb3IgYSB3b3JrYXJvdW5kIiBhcmcxPSI8YSBocmVmPSdodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL2luZGV4LnBocC9HYWxsZXJ5MjpNb2R1bGVzOk1hcCNXb3JrYXJvdW5kJz4iIGFyZzI9IjwvYT4ifQogICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW3RwbHVwZGF0ZV0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IlVwZGF0ZSBpdCBmb3IgbWUiIGhpbnQ9IlVwZGF0ZSB0aGUgVGhlbWUudHBsIGZpbGUifSIgLz4KICAgICA8L3NwYW4+CiAgey9pZn0KICA8YnI+CiAgPHRhYmxlIGNsYXNzPSJnYkRhdGFUYWJsZSI+CiAgICAgPHRyPgogICAgICAgPHRoPjxsYWJlbCBmb3I9IkVuYWJsZVJvdXRlTnVtYmVyIj57Zy0+dGV4dCB0ZXh0PSJFbmFibGUgUm91dGUgTnVtYmVyaW5nIn06PC9sYWJlbD48L3RoPgogICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX1JfQWN0aXZhdGVOdW1iZXJzLDE4MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgey9pZn0KICAgICAgIDx0ZD4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IkVuYWJsZVJvdXRlTnVtYmVyIgogICAgICAgICAgICAgICAgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtFbmFibGVSb3V0ZU51bWJlcl0ifSIKICAgICAgICAgICAgICAgICB7aWYgJGZvcm0uRW5hYmxlUm91dGVOdW1iZXJ9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfQogICAgICAgICAgICAgICAgIHZhbHVlPSIxIi8+CiAgICAgICA8L3RkPgogICAgIDwvdHI+CiAgPC90YWJsZT4KICA8L2Rpdj4KPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW3NhdmVzZXR0aW5nc10ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IlNhdmUgU2V0dGluZ3MifSIvPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bY2FuY2VsXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iQ2FuY2VsIiBoaW50PSJEaXNjYXJkIGNoYW5nZXMifSIvPgo8L2Rpdj4KCiAgCiAgPHAgY2xhc3M9ImdpRGVzY3JpcHRpb24iPgogICAge2ctPnRleHQgdGV4dD0iVGhpcyBzZWN0aW9uIHBlcm1pdHMgY3JlYXRpb24gb2Ygcm91dGVzIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBwYXRoIHRvIGJlIGRpc3BsYXllZCBvbiB0aGUgbWFwIn0KICA8L3A+CiAge2lmIGlzc2V0KCRmb3JtLnRoZXJvdXRlcykgYW5kICRmb3JtLnRoZXJvdXRlcyAhPSAiIn0KICAgIDxici8+CiAgICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgICAgPHRyPjx0aD57Zy0+dGV4dCB0ZXh0PSJSb3V0ZSBJRCJ9PC90aD48dGg+e2ctPnRleHQgdGV4dD0iUm91dGUgTmFtZSJ9PC90aD48dGg+e2ctPnRleHQgdGV4dD0iUm91dGUgTGluZSBDb2xvciJ9PC90aD48dGg+e2ctPnRleHQgdGV4dD0iUm91dGUgTGluZSBXaWR0aCJ9PC90aD48dGg+e2ctPnRleHQgdGV4dD0iUm91dGUgTGluZSBPcGFjaXR5In08L3RoPjx0aD57Zy0+dGV4dCB0ZXh0PSJFbmFibGVkIn08L3RoPjx0aD57Zy0+dGV4dCB0ZXh0PSJGaWx0ZXIifTwvdGg+PHRoIGNvbHNwYW49Mj57Zy0+dGV4dCB0ZXh0PSJBY3Rpb25zIn08L3RoPjwvdHI+CiAgICB7Zm9yZWFjaCBmcm9tPSRmb3JtLnRoZXJvdXRlcyBpdGVtPXJvdXRlc30KICAgICAgPHRyIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnskcm91dGVzWzJdfSI+PHRkPjxmb250IGNvbG9yPSJibGFjayI+eyRyb3V0ZXNbMF19PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPSJibGFjayI+eyRyb3V0ZXNbMV19PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPSJibGFjayI+eyRyb3V0ZXNbMl19PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPSJibGFjayI+eyRyb3V0ZXNbM119PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPSJibGFjayI+eyRyb3V0ZXNbNF19PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPSJibGFjayI+eyRyb3V0ZXNbNV19PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPSJibGFjayI+eyRyb3V0ZXNbNl19PC9mb250PjwvdGQ+CiAgICAgIDx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtkZWxldGVyb3V0ZV0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkRlbGV0ZSBSb3V0ZSJ9IHskcm91dGVzWzBdfSIgLz48L3RkPgogICAgICA8dGQ+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bZWRpdHJvdXRlXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iRWRpdCBSb3V0ZSJ9IHskcm91dGVzWzBdfSIgLz48L3RkPgogICAgICA8L3RyPgogICAgey9mb3JlYWNofQogICAgPC90YWJsZT4KICAgIDxici8+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtjcmVhdGVyb3V0ZV0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkFkZCBhIFJvdXRlIn0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2RlbGV0ZWFsbHJvdXRlc10ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkRlbGV0ZSBBbGwgUm91dGVzIn0iLz4KICB7ZWxzZX0KICAgIHtnLT50ZXh0IHRleHQ9IlRoZXJlIGFyZSBubyBSb3V0ZXMgY3JlYXRlZCwgY2xpY2sifSA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtjcmVhdGVyb3V0ZV0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkFkZCIgaGludD0iQ3JlYXRlIG5ldyJ9IiAvPgogIHsvaWZ9CjxkaXY+Cgp7ZWxzZX0KCjxkaXYgY2xhc3M9ImdiQmxvY2siPgogIDxoMz4ge2ctPnRleHQgdGV4dD0iUm91dGUgU2V0dGluZ3MifTwvaDM+CiAgPHAgY2xhc3M9ImdpRGVzY3JpcHRpb24iPgogICAge2ctPnRleHQgdGV4dD0iU2V0dGluZ3Mgc3BlY2lmaWMgdG8gdGhpcyByb3V0ZSJ9CiAgPC9wPgogIHtpZiBpc3NldCgkZm9ybS5PbGRSb3V0ZSl9CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZWRpdCIgdmFsdWU9InskZm9ybS5PbGRSb3V0ZX0iLz4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvbGRpZCIgdmFsdWU9InskZm9ybS5FZGl0Um91dGUuMH0iLz4KICB7L2lmfQogICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgPHRyPgogICAgIDx0aD48bGFiZWwgZm9yPSJSb3V0ZU5hbWUiPntnLT50ZXh0IHRleHQ9IkVudGVyIFJvdXRlIDx1Pk48L3U+YW1lIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX1JfTmFtZSwyNTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICA8dGQ+CiAgICAgICAgPGlucHV0IGFjY2Vzc2tleT0ibiIgdHlwZT0idGV4dCIgbmFtZT0iUm91dGVOYW1lIiAgIHtpZiBpc3NldCgkZm9ybS5PbGRSb3V0ZSl9dmFsdWU9InskZm9ybS5FZGl0Um91dGUuMX0iey9pZn0vPiAqCiAgICAgICAge2lmIGlzc2V0KCRmb3JtLmVycm9yLnJvdXRlbmFtZSl9CiAgICAgICAgPHNwYW4gY2xhc3M9ImdpRXJyb3IiPgogICAgICAgIHtnLT50ZXh0IHRleHQ9IlBsZWFzZSBlbnRlciBhIHJvdXRlIG5hbWUuIn0KICAgICAgICA8L3NwYW4+CiAgICAgICAgey9pZn0KICAgICAgICA8L3RkPgogICA8L3RyPgogICA8dHI+CiAgICAgPHRoPjxsYWJlbCBmb3I9IlJvdXRlQ29sb3IiPntnLT50ZXh0IHRleHQ9IklucHV0IFJvdXRlIENvPHU+bDwvdT5vciJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9SX0NvbG9yLDI1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICB7KiBAdG9kbzogTG9vayBhdCB1c2luZyBHYWxsZXJ5J3MgQ29sb3JDaG9vc2VyLmpzICp9CiAgICAgICAgPCEtLSBmbG9vYmxlLmNvbSBDb2xvciBQaWNrZXIgc3RhcnQgLS0+CiAgICAgICAgPGEgYWNjZXNza2V5PSJsIiBocmVmPSJKYXZhc2NyaXB0OnBpY2tDb2xvcigncGljazExMzE2MDY2ODInKTsiIGlkPSJwaWNrMTEzMTYwNjY4MiIgY2xhc3M9ImNvbG9ycGlja2lucHV0Ij57Zy0+dGV4dCB0ZXh0PSJTZWxlY3QifTwvYT4KICAgICAgICA8aW5wdXQgaWQ9InBpY2sxMTMxNjA2NjgyZmllbGQiIHNpemU9IjciIG9uQ2hhbmdlPSJyZWxhdGVDb2xvcigncGljazExMzE2MDY2ODInLCB0aGlzLnZhbHVlKTsiIG5hbWU9IlJvdXRlQ29sb3IiICB7aWYgaXNzZXQoJGZvcm0uT2xkUm91dGUpfXZhbHVlPSJ7JGZvcm0uRWRpdFJvdXRlLjJ9InsvaWZ9Lz4KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij5yZWxhdGVDb2xvcigncGljazExMzE2MDY2ODInLCBnZXRPYmooJ3BpY2sxMTMxNjA2NjgyZmllbGQnKS52YWx1ZSk7PC9zY3JpcHQ+CiAgICAgICAgPG5vc2NyaXB0PjxhIGhyZWY9Imh0dHA6Ly93d3cuZmxvb2JsZS5jb20vc2NyaXB0cy9jb2xvcnBpY2tlci5waHAiPmphdmFzY3JpcHQgY29sb3IgcGlja2VyIGJ5IGZsb29ibGU8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3d3dy5mbG9vYmxlLmNvbS9zY3JpcHRzLyI+Z2V0IGZyZWUgamF2YXNjcmlwdCBnYW1lcyBhbmQgZWZmZWN0czwvYT48L25vc2NyaXB0PgogICAgICAgIDwhLS0gZmxvb2JsZSBDb2xvciBQaWNrZXIgZW5kIC0tPgogICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5yb3V0ZWNvbG9yKX0KICAgICAgICA8c3BhbiBjbGFzcz0iZ2lFcnJvciI+CiAgICAgICAge2ctPnRleHQgdGV4dD0iUGxlYXNlIGVudGVyIGEgcm91dGUgY29sb3IgKEZvcm1hdDogI1JSR0dCQikgLSBObyBjb2xvciB3aWxsIGRlZmF1bHQgdG8gcHVycGxlIn0KICAgICAgICA8L3NwYW4+CiAgICAgICAgey9pZn0KICAgICAgICA8L3RkPgogICA8L3RyPgogICA8dHI+CiAgICAgPHRoPjxsYWJlbCBmb3I9IlJvdXRlV2VpZ2h0Ij57Zy0+dGV4dCB0ZXh0PSJFbnRlciBSb3V0ZSBzaXplIGluIDx1PnA8L3U+aXhlbHMifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfUl9TaXplLDI1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICAgIDxpbnB1dCBhY2Nlc3NrZXk9InAiIHR5cGU9InRleHQiIG5hbWU9IlJvdXRlV2VpZ2h0IiB7aWYgaXNzZXQoJGZvcm0uT2xkUm91dGUpfXZhbHVlPSJ7JGZvcm0uRWRpdFJvdXRlLjN9InsvaWZ9Lz4KICAgICAgICA8L3RkPgogICA8L3RyPgogICA8dHI+CiAgICAgPHRoPjxsYWJlbCBmb3I9IlJvdXRlT3BhY2l0eSI+e2ctPnRleHQgdGV4dD0iRW50ZXIgUm91dGUgPHU+TzwvdT5wYWNpdHkifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfUl9PcGFjaXR5LDI1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgIDx0ZD4KICAgICAgICAgIDxpbnB1dCBhY2Nlc3NrZXk9Im8iIHR5cGU9InRleHQiIG5hbWU9IlJvdXRlT3BhY2l0eSIge2lmIGlzc2V0KCRmb3JtLk9sZFJvdXRlKX12YWx1ZT0ieyRmb3JtLkVkaXRSb3V0ZS40fSJ7L2lmfS8+CiAgICAgICAge2lmIGlzc2V0KCRmb3JtLmVycm9yLnJvdXRlb3BhY2l0eSl9CiAgICAgICAgPHNwYW4gY2xhc3M9ImdpRXJyb3IiPgogICAgICAgIHtnLT50ZXh0IHRleHQ9IlBsZWFzZSBlbnRlciB0aGUgb3BhY2l0eSBiZXR3ZWVuIDAgYW5kIDEgLSBkZWZhdWx0IGlzIDEifQogICAgICAgIDwvc3Bhbj4KICAgICAgICB7L2lmfQogICAgICAgIDwvdGQ+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iUm91dGVFbmFibGVkIj57Zy0+dGV4dCB0ZXh0PSJSb3V0ZSBFbmFibGVkPyJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9SX0VuYWJsZWQsMjUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgPHRkPgogICAgICAgICAgPHNlbGVjdCBuYW1lPSJSb3V0ZUVuYWJsZWQiPgogICAgICAgICAgPG9wdGlvbiB7aWYgaXNzZXQoJGZvcm0uT2xkUm91dGUpIGFuZCAkZm9ybS5FZGl0Um91dGUuNSBlcSAiWWVzIn1zZWxlY3RlZHsvaWZ9IHZhbHVlPSJZZXMiPntnLT50ZXh0IHRleHQ9IlllcyJ9PC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHtpZiBpc3NldCgkZm9ybS5PbGRSb3V0ZSkgYW5kICRmb3JtLkVkaXRSb3V0ZS41IGVxICJObyJ9c2VsZWN0ZWR7L2lmfSB2YWx1ZT0iTm8iPntnLT50ZXh0IHRleHQ9Ik5vIn08L29wdGlvbj4KICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgIDwvdGQ+CiAgIDwvdHI+CiAgIDx0cj4KICAgICA8dGg+PGxhYmVsIGZvcj0iUm91dGVGaWx0ZXIiPntnLT50ZXh0IHRleHQ9IkNyZWF0ZSBhIEZpbHRlciBmb3IgdGhpcyByb3V0ZT8ifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfUl9GaWx0ZXIsMjUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgPHRkPgogICAgICAgICAgPHNlbGVjdCBuYW1lPSJSb3V0ZUZpbHRlciI+CiAgICAgICAgICA8b3B0aW9uIHtpZiBpc3NldCgkZm9ybS5PbGRSb3V0ZSkgYW5kICRmb3JtLkVkaXRSb3V0ZS42IGVxICJZZXMifXNlbGVjdGVkey9pZn0gdmFsdWU9IlllcyI+e2ctPnRleHQgdGV4dD0iWWVzIn08L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24ge2lmIGlzc2V0KCRmb3JtLk9sZFJvdXRlKSBhbmQgJGZvcm0uRWRpdFJvdXRlLjYgZXEgIk5vIn1zZWxlY3RlZHsvaWZ9IHZhbHVlPSJObyI+e2ctPnRleHQgdGV4dD0iTm8ifTwvb3B0aW9uPgogICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgPC90ZD4KICAgPC90cj4KICA8L3RhYmxlPgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImdiQmxvY2siPgogIDxoMz4KICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgIDxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfUl9pdGVtcywyNTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+CiAgICB7L2lmfSAgICAgICAgICAgIAogICAge2ctPnRleHQgdGV4dD0iSXRlbXMgaW4gUm91dGUifTwvaDM+IHtpZiBpc3NldCgkZm9ybS5lcnJvci50b29mZXdhcmcpfTxzcGFuIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IDIgbWFya2Vycy4ifTwvc3Bhbj57L2lmfQogIDxwIGNsYXNzPSJnaURlc2NyaXB0aW9uIj4KICAgIHtnLT50ZXh0IHRleHQ9IlNlbGVjdCB0aGUgaXRlbXMgeW91IHdhbnQgYWRkZWQgdG8gdGhpcyByb3V0ZSBhbmQgdGhlIG9yZGVyIHRvIGFkZCB0aGVtIGluIn0KICA8L3A+CiAge2lmIGlzc2V0KCRmb3JtLml0ZW1zKX0KICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIGl0ZW10YWJsZSIgc3R5bGU9IndpZHRoOjcwJSI+CiAgPHRyPjx0aD57Zy0+dGV4dCB0ZXh0PSJUaHVtYm5haWwifTwvdGg+PHRoPntnLT50ZXh0IHRleHQ9Ikl0ZW0gSW5mb3JtYXRpb24ifTwvdGg+PHRoPntnLT50ZXh0IHRleHQ9IlNlbGVjdGVkIn08L3RoPjx0aD57Zy0+dGV4dCB0ZXh0PSJPcmRlciJ9PC90aD48L3RyPgogIHtmb3JlYWNoIGZyb209JGZvcm0uaXRlbXMgaXRlbT1wb2ludH0KICA8dHIgYmdjb2xvcj0ie2lmICRwb2ludC50eXBlIGVxICdHb29nbGVNYXBHcm91cCd9bGlnaHRibHVley9pZn17aWYgJHBvaW50LnR5cGUgZXEgJ0dhbGxlcnlQaG90b0l0ZW0nfXBpbmt7L2lmfXtpZiAkcG9pbnQudHlwZSBlcSAnR2FsbGVyeUFsYnVtSXRlbSd9bGlnaHRncmVlbnsvaWZ9Ij48dGQ+PGZvbnQgY29sb3I9ImJsYWNrIj48aW1nIHNyYz0ieyRwb2ludC50aHVtYn0iIGFsdD0ieyRwb2ludC50aXRsZX0iLz48L2ZvbnQ+PC90ZD48dGQ+PGI+PGZvbnQgY29sb3I9ImJsYWNrIj57Zy0+dGV4dCB0ZXh0PSJUaXRsZToifTwvZm9udD48L2I+IDxmb250IGNvbG9yPSJibGFjayI+eyRwb2ludC50aXRsZX08L2ZvbnQ+PGJyPjxiPjxmb250IGNvbG9yPSJibGFjayI+e2ctPnRleHQgdGV4dD0iRGF0ZToifTwvZm9udD48L2I+IDxmb250IGNvbG9yPSJibGFjayI+eyRwb2ludC5kYXRlfTwvZm9udD48YnI+PGk+PGZvbnQgY29sb3I9ImJsYWNrIj57JHBvaW50LmRlc2NyaXB0aW9ufTwvZm9udD48L2k+PC90ZD4KICA8dGQ+PGlucHV0IG5hbWU9InskcG9pbnQuaWR9IiB0eXBlPSJjaGVja2JveCIgdmFsdWU9InskcG9pbnQuaWR9IgogIHtmb3JlYWNoIGZyb209JGZvcm0uRWRpdFJvdXRlIGl0ZW09cm91dGV9CiAgIHtpZiAkcm91dGUgZXEgJHBvaW50LmlkfWNoZWNrZWR7L2lmfQogIHsvZm9yZWFjaH0KICAvPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJPcmRlcnskcG9pbnQuaWR9IiBzaXplPSIzIiB7aWYgaXNzZXQoJGZvcm0ucm91dGV2YWx1ZXNbJHBvaW50LmlkXSl9dmFsdWU9InskZm9ybS5yb3V0ZXZhbHVlc1skcG9pbnQuaWRdfSJ7L2lmfS8+PC90ZD4KICA8L3RyPgogIHsvZm9yZWFjaH0KICA8L3RhYmxlPgogIHtlbHNlfQogIHtnLT50ZXh0IHRleHQ9IlRoZXJlIGFyZSBubyBpdGVtcyB3aXRoIEdQUyBjb29yZGluYXRlcywgcGxlYXNlIGFkZCBhdCBsZWFzdCB0d28gZW50cmllcyB0byBtYWtlIGEgcm91dGUifQogIHsvaWZ9CjwvZGl2PgoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4Ke2lmIGlzc2V0KCRmb3JtLml0ZW1zKX08aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtzYXZlXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iU2F2ZSBSb3V0ZSJ9Ii8+ey9pZn0KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2NhbmNlbF0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkNhbmNlbCIgaGludD0iRGlzY2FyZCBjaGFuZ2VzIn0iLz4KPC9kaXY+CnsvaWZ9');
expand_3537250845($outputDir, 'templates/MapSiteAdmin.tpl', 'eyoKICogJFJldmlzaW9uOiAxNTc2ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIGdjQmFja2dyb3VuZDEiPgogICAgPGgyPntnLT50ZXh0IHRleHQ9Ik1hcCBNb2R1bGUgU2V0dGluZ3MifXtpZiAhZW1wdHkoJGZvcm0uYXJyYXlNYXBLZXlzKX08YSBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MHB4O2JvcmRlci10b3A6MnB4IHNvbGlkICNjZWNlY2U7IGJvcmRlci1sZWZ0OjJweCBzb2xpZCAjY2VjZWNlOyBib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNGE0YTRhO2JvcmRlci1yaWdodDoycHggc29saWQgIzRhNGE0YTtwYWRkaW5nOi4yZW07cGFkZGluZy1yaWdodDoxZW07cGFkZGluZy1sZWZ0OjFlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzAwMDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7IiBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9bWFwLlNob3dNYXAifSI+e2ctPnRleHQgdGV4dD0iU2hvdyBHb29nbGUgTWFwIn08L2E+ey9pZn08L2gyPgo8L2Rpdj4KCjwhLS0KQmVnaW5uaW5nIG9mIGVycm9yL3N1Y2Nlc3MgZGlzcGxheWluZwotLT4Ke2lmIGlzc2V0KCRzdGF0dXMuc2F2ZWQpfQogICAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgICAgICAgPGgyIGNsYXNzPSJnaVN1Y2Nlc3MiPntnLT50ZXh0IHRleHQ9IlNldHRpbmdzIGhhdmUgYmVlbiBzYXZlZCEifTwvaDI+CiAgICA8L2Rpdj4Key9pZn0Ke2lmICFlbXB0eSgkZm9ybS5lcnJvcil9CjxkaXYgY2xhc3M9ImdiQmxvY2siPgogICA8aDIgY2xhc3M9ImdpRXJyb3IiPntnLT50ZXh0IHRleHQ9IlRoZXJlIHdhcyBhIHByb2JsZW0gcHJvY2Vzc2luZyB5b3VyIHJlcXVlc3QuIn08L2gyPgo8L2Rpdj4Key9pZn0Ke2lmIGlzc2V0KCRzdGF0dXMucHJvZmlsZURlbGV0ZWQpfQogICAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAge2lmICgkc3RhdHVzLnByb2ZpbGVEZWxldGVkKX0KICAgICAgICA8aDIgY2xhc3M9ImdpU3VjY2VzcyI+e2ctPnRleHQgdGV4dD0iUHJvZmlsZSBzdWNjZXNzZnVsbHkgZGVsZXRlZC4ifTwvaDI+CiAge2Vsc2V9Cgk8aDIgY2xhc3M9ImdpV2FybmluZyI+e2ctPnRleHQgdGV4dD0iUHJvZmlsZSB3YXMgYWxyZWFkeSBkZWxldGVkLiJ9PC9oMj4KICAgIDwvZGl2PgogIHsvaWZ9CnsvaWZ9CntpZiBpc3NldCgkc3RhdHVzLnByb2ZpbGVzYXZlZCl9CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICA8aDIgY2xhc3M9ImdpU3VjY2VzcyI+e2ctPnRleHQgdGV4dD0iUHJvZmlsZSBzdWNjZXNzZnVsbHkgc2F2ZWQuIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CgoKPCEtLQpFbmQgb2YgZXJyb3Ivc3VjY2VzcyBkaXNwbGF5aW5nCi0tPgoKe2lmICFlbXB0eSgkZm9ybS5hcnJheU1hcEtleXMpfXtpbmNsdWRlIGZpbGU9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBBZG1pblRhYi50cGwiIG1vZGU9IkdlbmVyYWwifXsvaWZ9Cgo8IS0tIEhlbHAgRGl2IC0tPgo8ZGl2IGlkPSJoZWxwZGl2IiBzdHlsZT0idmlzaWJpbGl0eTpoaWRkZW47Ym9yZGVyOjJweCBzb2xpZCBibGFjaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDozNTBweDt0b3A6MjAwcHg7d2lkdGg6MjUwcHg7aGVpZ2h0OjE1MHB4OyI+CiAgICA8ZGl2IGlkPSJoZWxwaGVhZCIgc3R5bGU9IndpZHRoOjI1MHB4O2hlaWdodDoyNXB4O2JhY2tncm91bmQ6IzE1MDA5NTtjb2xvcjp3aGl0ZTtib3JkZXItYm90dG9tOjJweCBzb2xpZCBibGFjazsiPjxpbWcgYWx0PSJub25lIiB7aWYgISRmb3JtLklFfXN0eWxlPSJmbG9hdDpsZWZ0OyIgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyJ7ZWxzZX1zcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZicgc3R5bGU9J2Zsb2F0OmxlZnQ7ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7J3svaWZ9Lz48dGFibGUgc3R5bGU9ImhlaWdodDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPjx0cj48dGQgc3R5bGU9IndpZHRoOjIzMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsiPjxiPkhlbHAgV2luZG93PC9iPjwvdGQ+PHRkIHN0eWxlPSJ3aWR0aDoyNXB4O2N1cnNvcjpwb2ludGVyOyIgb25jbGljaz0iamF2YXNjcmlwdDpoaWRlaGVscCgpIj48Y2VudGVyPjxiPlg8L2I+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CiAgICA8ZGl2IGlkPSJoZWxwdGV4dCIgc3R5bGU9IndpZHRoOjI1MHB4O2hlaWdodDoxMjNweDtjb2xvcjpibGFjaztmb250LXNpemU6MTJweDtiYWNrZ3JvdW5kOiNCMkU0RjY7LW1vei1vcGFjaXR5Oi43NTtmaWx0ZXI6YWxwaGEob3BhY2l0eT03NSk7b3BhY2l0eTouNzU7b3ZlcmZsb3c6YXV0bztjbGVhcjpib3RoOyI+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gRW5kIG9mIEhlbHAgRGl2IC0tPgoKPCEtLQpEaXNwbGF5aW5nIHRoZSBjb250ZW50IG9mIHRoZSBhZG1pbiBwYW5lbCBkZXBlbmRpbmcgb24gdGhlICJtb2RlIgpHZW5lcmFsIFNldHRpbmdzCi0tPgp7aWYgJGZvcm0ubW9kZSBuZXEgJ21hcEtleScgYW5kICFlbXB0eSgkZm9ybS5hcnJheU1hcEtleXMpfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KPGgzPiB7Zy0+dGV4dCB0ZXh0PSJNYXAgU2V0dGluZ3MifSA8L2gzPgoKICA8cCBjbGFzcz0iZ2lEZXNjcmlwdGlvbiI+CiAgICB7Zy0+dGV4dCB0ZXh0PSJTZWxlY3QgTWFwIHNldHRpbmdzIGZvciB0aGUgR29vZ2xlIEFQSSJ9CiAgPC9wPgoKICAgIDx0YWJsZSBjbGFzcz0iZ2JEYXRhVGFibGUiPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9Im1hcEtleXMiPntnLT50ZXh0IHRleHQ9Ikdvb2dsZSBNYXAgS2V5IFByb2ZpbGVzIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfS2V5UHJvZmlsZSwxODApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0wIHN0eWxlPSJib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ij4KICAgICAgICAgICAgICAgIDx0cj48dGQgcm93c3Bhbj0zPgogICAgICAgICAgICAgICAgPHNlbGVjdCBzaXplPSI2IiBpZD0ibWFwS2V5cyIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW21hcEtleXNdIn0iPgogICAgICAgICAgICAgICAge2ZvcmVhY2ggZnJvbT0kZm9ybS5hcnJheU1hcEtleXMgaXRlbT1wcm9maWxlfQogICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7JHByb2ZpbGUudXJsfSI+eyRwcm9maWxlLm5hbWV9PC9vcHRpb24+CiAgICAgICAgICAgICAgICB7L2ZvcmVhY2h9CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIDwvdGQ+PHRkPgogICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPSJ3aWR0aDo3ZW07IiB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2FkZEtleV0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkFkZCBQcm9maWxlIn0iLz4KICAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHI+PHRkPgogICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPSJ3aWR0aDo3ZW07IiB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2VkaXRLZXldIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJFZGl0IFByb2ZpbGUifSIvPgogICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9IndpZHRoOjdlbTsiIHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bZGVsS2V5XSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iRGVsZXRlIFByb2ZpbGUifSIvPgogICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJNYXBXaWR0aCI+e2ctPnRleHQgdGV4dD0iTWFwIDx1Plc8L3U+aWR0aCJ9PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX01hcFdpZHRoLDI3MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgYWNjZXNza2V5PSJ3IiB0eXBlPSJ0ZXh0IiBpZD0iTWFwV2lkdGgiCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW21hcFdpZHRoXSJ9IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJ7JGZvcm0ubWFwV2lkdGh9IiBtYXhsZW5ndGg9IjQiIHNpemU9IjYiLz4KCiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJNYXBXaWR0aEZvcm1hdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW01hcFdpZHRoRm9ybWF0XSJ9Ij4KICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj5weDwvb3B0aW9uPgogICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIiIHtpZiAkZm9ybS5NYXBXaWR0aEZvcm1hdCBlcSAiMiJ9c2VsZWN0ZWQ9MXsvaWZ9PiU8L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLmVycm9yLm1hcFdpZHRoKX0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2lFcnJvciI+CiAgICAgICAgICAgICAgICAgICAgICAgIHtnLT50ZXh0IHRleHQ9Ik1hcCB3aWR0aCBtdXN0IGJlIGFuIGludGVnZXIuIn0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iTWFwSGVpZ2h0Ij57Zy0+dGV4dCB0ZXh0PSJNYXAgPHU+SDwvdT5laWdodCJ9PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX01hcEhlaWdodCwyNzApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IGFjY2Vzc2tleT0iaCIgdHlwZT0idGV4dCIgaWQ9Ik1hcEhlaWdodCIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bbWFwSGVpZ2h0XSJ9IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJ7JGZvcm0ubWFwSGVpZ2h0fSIgbWF4bGVuZ3RoPSI0IiBzaXplPSI2Ii8+CgogICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0iSGVpZ2h0Rm9ybWF0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bTWFwSGVpZ2h0Rm9ybWF0XSJ9Ij4KICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj5weDwvb3B0aW9uPgogICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIiIHtpZiAkZm9ybS5NYXBIZWlnaHRGb3JtYXQgZXEgIjIifXNlbGVjdGVkey9pZn0+JTwvb3B0aW9uPgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uZXJyb3IubWFwSGVpZ2h0KX0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2lFcnJvciI+CiAgICAgICAgICAgICAgICAgICAgICAgIHtnLT50ZXh0IHRleHQ9Ik1hcCBoZWlnaHQgbXVzdCBiZSBhbiBpbnRlZ2VyLiJ9CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9Ik1hcFR5cGUiPntnLT50ZXh0IHRleHQ9Ik1hcCB0eXBlIiBoaW50PSJTdHlsZSBvZiBHb29nbGUgbWFwIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfTWFwVHlwZSwzMjApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IGFjY2Vzc2tleT0ibSIgdHlwZT0icmFkaW8iIGlkPSJNYXBUeXBlTWFwIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVttYXBUeXBlXSJ9IiB2YWx1ZT0iR19OT1JNQUxfTUFQIgogICAgICAgICAgICAgICAgICAgIHtpZiAkZm9ybS5tYXBUeXBlIGVxICJHX05PUk1BTF9NQVAifWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTWFwVHlwZU1hcCI+e2ctPnRleHQgdGV4dD0iPHU+TTwvdT5hcCIgaGludD0iTWFwIHN0eWxlIn08L2xhYmVsPgoKICAgICAgICAgICAgICAgIDxpbnB1dCBhY2Nlc3NrZXk9ImEiIHR5cGU9InJhZGlvIiBpZD0iTWFwVHlwZVNhdGVsbGl0ZSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bbWFwVHlwZV0ifSIgdmFsdWU9IkdfU0FURUxMSVRFX01BUCIKICAgICAgICAgICAgICAgICAgICB7aWYgJGZvcm0ubWFwVHlwZSBlcSAiR19TQVRFTExJVEVfTUFQIn1jaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik1hcFR5cGVTYXRlbGxpdGUiPntnLT50ZXh0IHRleHQ9IlM8dT5hPC91PnRlbGxpdGUiIGhpbnQ9Ik1hcCBzdHlsZSJ9PC9sYWJlbD4KCiAgICAgICAgICAgICAgICA8aW5wdXQgYWNjZXNza2V5PSJ5IiB0eXBlPSJyYWRpbyIgaWQ9Ik1hcFR5cGVIeWJyaWQiCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW21hcFR5cGVdIn0iIHZhbHVlPSJHX0hZQlJJRF9NQVAiCiAgICAgICAgICAgICAgICAgICAge2lmICRmb3JtLm1hcFR5cGUgZXEgIkdfSFlCUklEX01BUCJ9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJNYXBUeXBlSHlicmlkIj57Zy0+dGV4dCB0ZXh0PSJIPHU+eTwvdT5icmlkIiBoaW50PSJNYXAgc3R5bGUifTwvbGFiZWw+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJzaG93U2NhbGUiPntnLT50ZXh0IHRleHQ9IlNob3cgU2NhbGUiIGhpbnQ9Ik1hcCB6b29tIHNjYWxlIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfU2hvd1NjYWxlLDM1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzaG93U2NhbGUiCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW3Nob3dTY2FsZV0ifSIKICAgICAgICAgICAgICAgICAgICB7aWYgJGZvcm0uc2hvd1NjYWxlfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0KICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iMSIvPgogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iQ2VudGVyTG9uZ0xhdCI+e2ctPnRleHQgdGV4dD0iQzx1PmU8L3U+bnRlciBPbiJ9PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX01hcENlbnRlciw0MDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IGFjY2Vzc2tleT0iZSIgdHlwZT0idGV4dCIgaWQ9IkNlbnRlckxvbmdMYXQiCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2NlbnRlckxvbmdMYXRdIn0iCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9InskZm9ybS5jZW50ZXJMb25nTGF0fSIgbWF4bGVuZ3RoPSIzMCIgc2l6ZT0iMzAiCiAgICAgICAgICAgICAgICAgICAge2lmICgoaXNzZXQoJGZvcm0uQXV0b0NlbnRlclpvb20pKSBhbmQgKCRmb3JtLkF1dG9DZW50ZXJab29tKSl9ZGlzYWJsZWR7L2lmfQogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJGb3JtYXQ6IGxhdGl0dWRlLGxvbmdpdHVkZSJ9CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iR2V0IHZpYSBhIE1hcCJ9IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtnZXR2aWFtYXBdIn0iLz4KICAgICAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5jZW50ZXJMb25nTGF0KX0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2lFcnJvciI+CiAgICAgICAgICAgICAgICAgICAgICAgIHtnLT50ZXh0IHRleHQ9IlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgZm9ybWF0dGVkIHRoZSBjb29yZGluYXRlcyBjb3JyZWN0bHkifQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJab29tTGV2ZWwiPntnLT50ZXh0IHRleHQ9Ijx1Plo8L3U+b29tIExldmVsIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfTWFwWm9vbSw0MDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IGFjY2Vzc2tleT0ieiIgdHlwZT0idGV4dCIgaWQ9Ilpvb21MZXZlbCIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bem9vbUxldmVsXSJ9IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJ7JGZvcm0uem9vbUxldmVsfSIgbWF4bGVuZ3RoPSIyIiBzaXplPSIyIgogICAgICAgICAgICAgICAgICAgIHtpZiAoKGlzc2V0KCRmb3JtLkF1dG9DZW50ZXJab29tKSkgYW5kICgkZm9ybS5BdXRvQ2VudGVyWm9vbSkpfWRpc2FibGVkey9pZn0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAge2ctPnRleHQgdGV4dD0iUGxlYXNlIGVudGVyIGEgem9vbSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDE5In0KICAgICAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci56b29tTGV2ZWwpfQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnaUVycm9yIj4KICAgICAgICAgICAgICAgICAgICAgICAge2ctPnRleHQgdGV4dD0iUGxlYXNlIHNwZWNpZnkgYW4gaW50ZWdlciBiZXR3ZWVuIDAgdG8gMTkifQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJBdXRvQ2VudGVyWm9vbSI+e2ctPnRleHQgdGV4dD0iQXV0PHU+bzwvdT4gQ2VudGVyIGFuZCBab29tIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfQXV0b0NaLDQwMCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgYWNjZXNza2V5PSJvIiB0eXBlPSJjaGVja2JveCIgaWQ9IkF1dG9DZW50ZXJab29tIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtBdXRvQ2VudGVyWm9vbV0ifSIKICAgICAgICAgICAgICAgICAgICB7aWYgJGZvcm0uQXV0b0NlbnRlclpvb219Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfQogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIxIiBPbkNsaWNrPSJUb2dnbGVJbnB1dHMoWyd7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bY2VudGVyTG9uZ0xhdF0ifScsJ3tnLT5mb3JtVmFyIHZhcj0iZm9ybVt6b29tTGV2ZWxdIn0nXSkiLz4KICAgICAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJUaGlzIHdpbGwgaWdub3JlIHRoZSB0d28gc2V0dGluZ3MgYWJvdmUuIn0KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9InNob3dHRSI+e2ctPnRleHQgdGV4dD0iU2hvdyB0aGUgPHU+VjwvdT5pZXcgaW4gR29vZ2xlIEVhcnRoIGxpbmsifTwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9TaG93R0UsNTAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCBhY2Nlc3NrZXk9InYiIHR5cGU9ImNoZWNrYm94IiBpZD0ic2hvd0dFIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtTaG93RXhwb3J0R0VMaW5rXSJ9IgogICAgICAgICAgICAgICAgICAgIHtpZiAkZm9ybS5TaG93RXhwb3J0R0VMaW5rfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0KICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iMSIvPgogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0ibGlua3R5cGUiPntnLT50ZXh0IHRleHQ9Ikdvb2dsZSBNYXAgTGluayBCZWhhdmlvciJ9PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX0dNTGluayw1MDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ibGlua3R5cGUiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtsaW5rdHlwZV0ifSI+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9MyB7aWYgJGZvcm0ubGlua3R5cGUgZXEgM31zZWxlY3RlZHsvaWZ9PntnLT50ZXh0IHRleHQ9IkRpc2FibGUgdGhlIExpbmsifTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPTAge2lmICRmb3JtLmxpbmt0eXBlIGVxIDB9c2VsZWN0ZWR7L2lmfT57Zy0+dGV4dCB0ZXh0PSJTaG93IHRoZSBEZWZhdWx0IE1hcCJ9PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9MSB7aWYgJGZvcm0ubGlua3R5cGUgZXEgMX1zZWxlY3RlZHsvaWZ9PntnLT50ZXh0IHRleHQ9IkR5bmFtaWMgTGluayJ9PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9MiB7aWYgJGZvcm0ubGlua3R5cGUgZXEgMn1zZWxlY3RlZHsvaWZ9PntnLT50ZXh0IHRleHQ9IlNob3cgTWFwIGZpbHRlcmVkIG9uIGN1cnJlbnQgYWxidW0ifTwvb3B0aW9uPgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJBZG1pbkhlbHAiPntnLT50ZXh0IHRleHQ9IkhlbHAgb24gdGhlIEFkbWluIFBhZ2VzIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfQWRtaW5IZWxwLDUwMCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJBZG1pbkhlbHAiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtBZG1pbkhlbHBdIn0iCiAgICAgICAgICAgICAgICB7aWYgJGZvcm0uQWRtaW5IZWxwfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0KICAgICAgICAgICAgICAgICB2YWx1ZT0iMSIvPgogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iVXNlckhlbHAiPntnLT50ZXh0IHRleHQ9IkhlbHAgb24gdGhlIFVzZXIncyBQYWdlcyJ9PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX1VzZXJIZWxwLDUwMCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJVc2VySGVscCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW1VzZXJIZWxwXSJ9IgogICAgICAgICAgICAgICAge2lmICRmb3JtLlVzZXJIZWxwfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0KICAgICAgICAgICAgICAgICB2YWx1ZT0iMSIvPgogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgIDwvdGFibGU+CjwvZGl2PgoKPGRpdiBjbGFzcz0iZ2JCbG9jayI+CjxoMz4ge2ctPnRleHQgdGV4dD0iR2V0IHZpYSBhIE1hcCBEZWZhdWx0IFNldHRpbmdzIn0gPC9oMz4KICA8cCBjbGFzcz0iZ2lEZXNjcmlwdGlvbiI+e2ctPnRleHQgdGV4dD0iVGhpcyBzZWN0aW9uIHdpbGwgbGV0IHlvdSBzZWxlY3QgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSAnR2V0IHZpYSBhIE1hcCcgb3B0aW9uIn08L3A+CiAgICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJHVk1DZW50ZXIiPntnLT50ZXh0IHRleHQ9IkRlZmF1bHQgTWFwIENlbnRlciJ9PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX0RlZkNlbnRlciw2NDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJHVk1DZW50ZXIiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtHVk1DZW50ZXJdIn0iIHZhbHVlPSJ7JGZvcm0uR1ZNQ2VudGVyfSIgbWF4bGVuZ3RoPSIzMCIgc2l6ZT0iMzAiLz4KICAgICAgICAgICAgICAgIHtnLT50ZXh0IHRleHQ9IkZvcm1hdDogbGF0aXR1ZGUsbG9uZ2l0dWRlIn0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJHZXQgdmlhIGEgTWFwIn0iIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW2dldHZpYW1hcDJdIn0iLz4KICAgICAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5HVk1DZW50ZXIpfQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnaUVycm9yIj4KICAgICAgICAgICAgICAgICAgICAgICAge2ctPnRleHQgdGV4dD0iUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSBmb3JtYXR0ZWQgdGhlIGNvb3JkaW5hdGVzIGNvcnJlY3RseSJ9CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9IkdWTVpvb20iPntnLT50ZXh0IHRleHQ9IkRlZmF1bHQgTWFwIFpvb20ifTwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9EZWZab29tLDY0MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkdWTVpvb20iIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtHVk1ab29tXSJ9IiB2YWx1ZT0ieyRmb3JtLkdWTVpvb219IiBtYXhsZW5ndGg9IjIiIHNpemU9IjMiLz4KICAgICAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5HVk1ab29tKX0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2lFcnJvciI+CiAgICAgICAgICAgICAgICAgICAgICAgIHtnLT50ZXh0IHRleHQ9IlBsZWFzZSBzcGVjaWZ5IGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxNyJ9CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgPC90YWJsZT4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KPGgzPiB7Zy0+dGV4dCB0ZXh0PSJDaG9vc2UgZmVhdHVyZShzKSB0byBlbmFibGUifSA8L2gzPgogIDxwIGNsYXNzPSJnaURlc2NyaXB0aW9uIj4KICAgIHtnLT50ZXh0IHRleHQ9IlRoaXMgc2VjdGlvbiB3aWxsIGxldCB5b3UgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGZlYXR1cmUgZGVwZW5kaW5nIG9uIHdoYXQgeW91IG5lZWQifQogIDwvcD4KICAgIDx0YWJsZSBjbGFzcz0iZ2JEYXRhVGFibGUiPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9Ikdvb2dsZU92ZXJ2aWV3RmVhdHVyZSI+e2ctPnRleHQgdGV4dD0iRW5hYmxlIHRoZSBHb29nbGUgT3ZlcnZpZXcgRmVhdHVyZSJ9PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX0ZfR29vZ2xlT3ZlcnZpZXcsODUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9Ikdvb2dsZU92ZXJ2aWV3RmVhdHVyZSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bR29vZ2xlT3ZlcnZpZXdGZWF0dXJlXSJ9IgogICAgICAgICAgICAgICAgICAgIHtpZiAkZm9ybS5Hb29nbGVPdmVydmlld0ZlYXR1cmV9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfQogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIxIi8+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJHWm9vbUZlYXR1cmUiPntnLT50ZXh0IHRleHQ9IkVuYWJsZSB0aGUgR1pvb20gRmVhdHVyZSJ9PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX0ZfR1pvb20sODUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9Ikdab29tRmVhdHVyZSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bR1pvb21GZWF0dXJlXSJ9IgogICAgICAgICAgICAgICAgICAgIHtpZiAkZm9ybS5HWm9vbUZlYXR1cmV9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfQogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIxIi8+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJURmVhdHVyZSI+e2ctPnRleHQgdGV4dD0iRW5hYmxlIHRoZSBUaGVtZSBGZWF0dXJlIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfRl9UaGVtZSw4NTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iVEZlYXR1cmUiCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW1RoZW1lRmVhdHVyZV0ifSIKICAgICAgICAgICAgICAgICAgICB7aWYgJGZvcm0uVGhlbWVGZWF0dXJlfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0KICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iMSIvPgogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iTUZlYXR1cmUiPntnLT50ZXh0IHRleHQ9IkVuYWJsZSB0aGUgTWFya2VyU2V0cyBGZWF0dXJlIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfRl9NYXJrZXIsODUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9Ik1GZWF0dXJlIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtNYXJrZXJGZWF0dXJlXSJ9IgogICAgICAgICAgICAgICAgICAgIHtpZiAkZm9ybS5NYXJrZXJGZWF0dXJlfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0KICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iMSIvPgogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iTEZlYXR1cmUiPntnLT50ZXh0IHRleHQ9IkVuYWJsZSB0aGUgTGVnZW5kIEZlYXR1cmUifTwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9GX0xlZ2VuZCw4NTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iTEZlYXR1cmUiCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW0xlZ2VuZEZlYXR1cmVdIn0iCiAgICAgICAgICAgICAgICAgICAge2lmICRmb3JtLkxlZ2VuZEZlYXR1cmV9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfQogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIxIi8+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJGRmVhdHVyZSI+e2ctPnRleHQgdGV4dD0iRW5hYmxlIHRoZSBGaWx0ZXIgRmVhdHVyZSJ9PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX0ZfRmlsdGVyLDg1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJGRmVhdHVyZSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bRmlsdGVyRmVhdHVyZV0ifSIKICAgICAgICAgICAgICAgICAgICB7aWYgJGZvcm0uRmlsdGVyRmVhdHVyZX1jaGVja2VkPSJjaGVja2VkInsvaWZ9CiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjEiLz4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9IkdGZWF0dXJlIj57Zy0+dGV4dCB0ZXh0PSJFbmFibGUgdGhlIEdyb3VwIEZlYXR1cmUifTwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9GX0dyb3VwLDg1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJHRmVhdHVyZSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bR3JvdXBGZWF0dXJlXSJ9IgogICAgICAgICAgICAgICAgICAgIHtpZiAkZm9ybS5Hcm91cEZlYXR1cmV9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfQogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIxIi8+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJSRmVhdHVyZSI+e2ctPnRleHQgdGV4dD0iRW5hYmxlIHRoZSBSb3V0ZSBGZWF0dXJlIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfRl9Sb3V0ZXMsODUwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IlJGZWF0dXJlIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtSb3V0ZUZlYXR1cmVdIn0iCiAgICAgICAgICAgICAgICAgICAge2lmICRmb3JtLlJvdXRlRmVhdHVyZX1jaGVja2VkPSJjaGVja2VkInsvaWZ9CiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjEiLz4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgPC90YWJsZT4KPC9kaXY+CjxkaXYgY2xhc3M9ImdiQmxvY2sgZ2NCYWNrZ3JvdW5kMSI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtzYXZlXSJ9IiAgdmFsdWU9IntnLT50ZXh0IHRleHQ9IlNhdmUgU2V0dGluZ3MifSIvPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bY2FuY2VsXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iQ2FuY2VsIiBoaW50PSJEaXNjYXJkIGNoYW5nZXMifSIvPgo8L2Rpdj4KCntlbHNlfSB7KiBNYXAgcHJvZmlsZSBrZXkgYWRkL2VkaXQgKn0KCjwhLS0KQWRkIGEgTWFwIEtleSBzZWN0aW9uCi0tPgo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAge2lmIGlzc2V0KCRmb3JtLmVycm9yLnByb2ZpbGVEZWxldGVkKX0KICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJQcm9maWxlIHdhcyBkZWxldGVkIGluIGFub3RoZXIgc2Vzc2lvbi4ifTwvaDI+CiAgIHsvaWZ9CiAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5wcm9maWxlTW9kaWZpZWQpfQogICA8aDIgY2xhc3M9ImdpRXJyb3IiPntnLT50ZXh0IHRleHQ9IlByb2ZpbGUgd2FzIG1vZGlmaWVkIGluIGFub3RoZXIgc2Vzc2lvbi4ifTwvaDI+CiAgIHsvaWZ9CiAgICB7aWYgIWVtcHR5KCRmb3JtLmVkaXRQcm9maWxlKX0KICAgICAgICA8IS0tIFJldHVybiB0aGUgb3JpZ2luYWwgZGF0YSB0byB0aGUgY29udHJvbGxlciB0byBkZXRlY3Qgc2ltdWx0YW5lb3VzIG1vZGlmaWNhdGlvbiAtLT4KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtvbGRQcm9maWxlTmFtZV0ifSIgdmFsdWU9InskZm9ybS5lZGl0UHJvZmlsZS5uYW1lfSIvPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW29sZFByb2ZpbGVVcmxdIn0iIHZhbHVlPSJ7JGZvcm0uZWRpdFByb2ZpbGUudXJsfSIvPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW29sZFByb2ZpbGVBcGlLZXldIn0iIHZhbHVlPSJ7JGZvcm0uZWRpdFByb2ZpbGUuYXBpS2V5fSIvPgoJPGgzPntnLT50ZXh0IHRleHQ9IkVkaXQgYSBHb29nbGUgQVBJIEtleSJ9PC9oMz4KICAgIHtlbHNlfQogICAgPGgzPntnLT50ZXh0IHRleHQ9IkFkZCBhIEdvb2dsZSBBUEkgS2V5In08L2gzPgogICAgey9pZn0KICA8cCBjbGFzcz0iZ2lEZXNjcmlwdGlvbiI+CiAgICB7Zy0+dGV4dCB0ZXh0PSJUaGlzIHNlY3Rpb24gd2lsbCBhZGQgYSBrZXkgdG8gYmUgdXNlZCB3aXRoIGNlcnRhaW4gc2V0dGluZ3Mgb2YgdGhlIHdlYnNlcnZlci4gSWYgeW91IGFyZSB1bnN1cmUgb2YgdGhlIHZhbHVlcywgbGVhdmUgdGhlIGRlZmF1bHRzLiJ9CiAgPC9wPgogICAgICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJwcm9maWxlTmFtZSI+e2ctPnRleHQgdGV4dD0iUHJvZmlsZSBOYW1lIn08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfS1BfTmFtZSwxOTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJwcm9maWxlTmFtZSIgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtlZGl0UHJvZmlsZV1bbmFtZV0ifSIKICAgICAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lZGl0UHJvZmlsZS5uYW1lKX12YWx1ZT0ieyRmb3JtLmVkaXRQcm9maWxlLm5hbWV9IgogICAgICAgICAgICAgICAge2Vsc2VpZiBpc3NldCgkZm9ybS5iYXNlVXJsKX12YWx1ZT0ieyRmb3JtLmJhc2VVcmx9InsvaWZ9Lz4KICAgICAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5lZGl0UHJvZmlsZS5uYW1lLm1pc3NpbmcpfTxzcGFuIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJFbnRlciBhIHByb2ZpbGUgbmFtZSJ9PC9zcGFuPnsvaWZ9CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJwcm9maWxlVXJsIj57Zy0+dGV4dCB0ZXh0PSJTZXJ2ZXIgVVJMIChlLmcuIGh0dHA6Ly93d3cubXlzZXJ2ZXIuY29tKSJ9PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX0tQX1NlcnZlciwxOTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJwcm9maWxlVXJsIiAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2VkaXRQcm9maWxlXVt1cmxdIn0iCiAgICAgICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uZWRpdFByb2ZpbGUudXJsKX12YWx1ZT0ieyRmb3JtLmVkaXRQcm9maWxlLnVybH0iCiAgICAgICAgICAgICAgICB7ZWxzZWlmIGlzc2V0KCRmb3JtLmJhc2VVcmwpfXZhbHVlPSJ7JGZvcm0uYmFzZVVybH0iey9pZn0vPgogICAgICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLmVycm9yLmVkaXRQcm9maWxlLnVybC5taXNzaW5nKX08c3BhbiBjbGFzcz0iZ2lFcnJvciI+e2ctPnRleHQgdGV4dD0iRW50ZXIgYSBTZXJ2ZXIgVVJMIn08L3NwYW4+ey9pZn0KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9InByb2ZpbGVBcGlLZXkiPntnLT50ZXh0IHRleHQ9Ikdvb2dsZSBBUEkgS2V5In08L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfS1BfR0tleSwxOTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJwcm9maWxlQXBpS2V5IiBzdHlsZT0iZm9udC1zaXplOiBzbWFsbGVyOyIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bZWRpdFByb2ZpbGVdW2FwaUtleV0ifSIKICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9IjEwMCIgc2l6ZT0iNjAiCiAgICAgICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uZWRpdFByb2ZpbGUuYXBpS2V5KX12YWx1ZT0ieyRmb3JtLmVkaXRQcm9maWxlLmFwaUtleX0iey9pZn0vPgogICAgICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLmVycm9yLmVkaXRQcm9maWxlLmFwaUtleS5taXNzaW5nKX08c3BhbiBjbGFzcz0iZ2lFcnJvciI+e2ctPnRleHQgdGV4dD0iRW50ZXIgYSBHb29nbGUgQVBJIEtleSJ9PC9zcGFuPiB7L2lmfQogICAgICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLmVkaXRQcm9maWxlLnVybCl9CiAgICAgICAgICAgICAgICAgICAge2Fzc2lnbiB2YXI9InJlcXVlc3RVcmwiIHZhbHVlPSJgJGZvcm0uZWRpdFByb2ZpbGUudXJsYCJ9CiAgICAgICAgICAgICAgICB7ZWxzZWlmIGlzc2V0KCRmb3JtLmJhc2VVcmwpfQogICAgICAgICAgICAgICAgICAgIHthc3NpZ24gdmFyPSJyZXF1ZXN0VXJsIiB2YWx1ZT0iYCRmb3JtLmJhc2VVcmxgIn0KCQl7L2lmfQoJCXtpZiBpc3NldCgkcmVxdWVzdFVybCl9CiAgICAgICAgICAgICAgICAgIHtnLT50ZXh0IHRleHQ9IkNsaWNrICVzaGVyZSVzIHRvIGdldCB0aGUga2V5IGZvciIgaGludD0iR2V0IHRoZSBHb29nbGUgQVBJIGtleSIKICAgICAgICAgICAgICAgICAgICBhcmcxPSI8YSB0YXJnZXQ9XCJfbmV3XCIgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL2FwaV9zaWdudXA/dXJsPWAkcmVxdWVzdFVybGBcIj4iCgkJICAgIGFyZzI9IjwvYT4ifSB7JHJlcXVlc3RVcmx9CgkJey9pZn0KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICA8L3RhYmxlPgo8L2Rpdj4KPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW3NhdmVQcm9maWxlXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iU2F2ZSBTZXR0aW5ncyJ9Ii8+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtjYW5jZWxdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJDYW5jZWwiIGhpbnQ9IkRpc2NhcmQgY2hhbmdlcyJ9Ii8+CjwvZGl2Pgp7L2lmfQ==');
expand_3537250845($outputDir, 'templates/MapThemeAdmin.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICAgIDxoMj57Zy0+dGV4dCB0ZXh0PSJNYXAgTW9kdWxlIFNldHRpbmdzIn0gICA8YSBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MHB4O2JvcmRlci10b3A6MnB4IHNvbGlkICNjZWNlY2U7IGJvcmRlci1sZWZ0OjJweCBzb2xpZCAjY2VjZWNlOyBib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNGE0YTRhO2JvcmRlci1yaWdodDoycHggc29saWQgIzRhNGE0YTtwYWRkaW5nOi4yZW07cGFkZGluZy1yaWdodDoxZW07cGFkZGluZy1sZWZ0OjFlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzAwMDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7IiBocmVmPSJ7Zy0+dXJsIGFyZzE9InZpZXc9bWFwLlNob3dNYXAifSI+e2ctPnRleHQgdGV4dD0iU2hvdyBHb29nbGUgTWFwIn08L2E+PC9oMj4KPC9kaXY+Cgo8IS0tCkJlZ2lubmluZyBvZiBlcnJvci9zdWNjZXNzIGRpc3BsYXlpbmcKLS0+CntpZiBpc3NldCgkc3RhdHVzLnNhdmVkKX0KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgIDxoMiBjbGFzcz0iZ2lTdWNjZXNzIj57Zy0+dGV4dCB0ZXh0PSJTZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQhIn08L2gyPgogICAgPC9kaXY+CnsvaWZ9CntpZiAhZW1wdHkoJGZvcm0uZXJyb3IpfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJUaGVyZSB3YXMgYSBwcm9ibGVtIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0LiJ9PC9oMj4KPC9kaXY+CnsvaWZ9CjwhLS0KRW5kIG9mIGVycm9yL3N1Y2Nlc3MgZGlzcGxheWluZwotLT4KCntpbmNsdWRlIGZpbGU9Im1vZHVsZXMvbWFwL3RlbXBsYXRlcy9NYXBBZG1pblRhYi50cGwiIG1vZGU9IlRoZW1lIn0KCjwhLS0gSGVscCBEaXYgLS0+CjxkaXYgaWQ9ImhlbHBkaXYiIHN0eWxlPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MnB4IHNvbGlkIGJsYWNrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjM1MHB4O3RvcDoyMDBweDt3aWR0aDoyNTBweDtoZWlnaHQ6MTUwcHg7Ij4KICAgIDxkaXYgaWQ9ImhlbHBoZWFkIiBzdHlsZT0id2lkdGg6MjUwcHg7aGVpZ2h0OjI1cHg7YmFja2dyb3VuZDojMTUwMDk1O2NvbG9yOndoaXRlO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGJsYWNrOyI+PGltZyBhbHQ9Im5vbmUiIHtpZiAhJGZvcm0uSUV9c3R5bGU9ImZsb2F0OmxlZnQ7IiBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIntlbHNlfXNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJyBzdHlsZT0nZmxvYXQ6bGVmdDtmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsney9pZn0vPjx0YWJsZSBzdHlsZT0iaGVpZ2h0OjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyI+PHRyPjx0ZCBzdHlsZT0id2lkdGg6MjMwcHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyI+PGI+SGVscCBXaW5kb3c8L2I+PC90ZD48dGQgc3R5bGU9IndpZHRoOjI1cHg7Y3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJqYXZhc2NyaXB0OmhpZGVoZWxwKCkiPjxjZW50ZXI+PGI+WDwvYj48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KICAgIDxkaXYgaWQ9ImhlbHB0ZXh0IiBzdHlsZT0id2lkdGg6MjUwcHg7aGVpZ2h0OjEyM3B4O2NvbG9yOmJsYWNrO2ZvbnQtc2l6ZToxMnB4O2JhY2tncm91bmQ6I0IyRTRGNjstbW96LW9wYWNpdHk6Ljc1O2ZpbHRlcjphbHBoYShvcGFjaXR5PTc1KTtvcGFjaXR5Oi43NTtvdmVyZmxvdzphdXRvO2NsZWFyOmJvdGg7Ij4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBFbmQgb2YgSGVscCBEaXYgLS0+Cgo8IS0tClRoZW1lIHNldHRpbmdzCi0tPgo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICA8aDM+IHtnLT50ZXh0IHRleHQ9IkNvbnRyb2wgU2V0dGluZ3MifTwvaDM+CgogIDxwIGNsYXNzPSJnaURlc2NyaXB0aW9uIj57Zy0+dGV4dCB0ZXh0PSJUaGlzIHNlY3Rpb24gYWxsb3dzIHlvdSB0byBtYW5hZ2UgTWFwIENvbnRyb2wgc2V0dGluZ3MifTwvcD4KICAgICAgPHRhYmxlIGNsYXNzPSJnYkRhdGFUYWJsZSI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iTWFwQ29udHJvbFNpemUiPntnLT50ZXh0IHRleHQ9Ik1hcCBDb250cm9sIFNpemUgLyBUeXBlIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX1RfQ29udHJvbFR5cGUsMjAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW01hcENvbnRyb2xUeXBlXSJ9IiB2YWx1ZT0ieyRmb3JtLk1hcENvbnRyb2xUeXBlfSI+CiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJMYXJnZSJ7aWYgJGZvcm0uTWFwQ29udHJvbFR5cGUgZXEgIkxhcmdlIn0gc2VsZWN0ZWR7L2lmfT4KICAgICAgICAgICAgICAgIFN0b2NrIC0gTGFyZ2U8L29wdGlvbj4KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IlNtYWxsIntpZiAkZm9ybS5NYXBDb250cm9sVHlwZSBlcSAiU21hbGwifSBzZWxlY3RlZHsvaWZ9PgogICAgICAgICAgICAgICAgU3RvY2sgLSBTbWFsbDwvb3B0aW9uPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iTm9uZSJ7aWYgJGZvcm0uTWFwQ29udHJvbFR5cGUgZXEgIk5vbmUifSBzZWxlY3RlZHsvaWZ9PgogICAgICAgICAgICAgICAgTm9uZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgeyRmb3JtLmNvbnRyb2xsaXN0fQogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJDb250cm9sIHRoZSBwb3NpdGlvbiBiZWxvdy4ifQogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iTWFwQ29udHJvbFBvcyI+e2ctPnRleHQgdGV4dD0iQ29udHJvbCBwb3NpdGlvbiJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9UX0NvbnRyb2xQb3NpdGlvbiwyMDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0iTWFwQ29udHJvbFBvcyIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW01hcENvbnRyb2xQb3NdIn0iPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZSA9IjAiIHtpZiAkZm9ybS5NYXBDb250cm9sUG9zIGVxICIwIn1zZWxlY3RlZHsvaWZ9Lz57Zy0+dGV4dCB0ZXh0PSJUb3AgTGVmdCBDb3JuZXIifTwvb3B0aW9uPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZSA9IjIiIHtpZiAkZm9ybS5NYXBDb250cm9sUG9zIGVxICIyIn1zZWxlY3RlZHsvaWZ9Lz57Zy0+dGV4dCB0ZXh0PSJCb3R0b20gTGVmdCBDb3JuZXIifTwvb3B0aW9uPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZSA9IjEiIHtpZiAkZm9ybS5NYXBDb250cm9sUG9zIGVxICIxIn1zZWxlY3RlZHsvaWZ9Lz57Zy0+dGV4dCB0ZXh0PSJUb3AgUmlnaHQgQ29ybmVyIn08L29wdGlvbj4KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWUgPSIzIiB7aWYgJGZvcm0uTWFwQ29udHJvbFBvcyBlcSAiMyJ9c2VsZWN0ZWR7L2lmfS8+e2ctPnRleHQgdGV4dD0iQm90dG9tIFJpZ2h0IENvcm5lciJ9PC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIHtnLT50ZXh0IHRleHQ9Ik9mZnNldCAobGVmdC1yaWdodCkifTxpbnB1dCBpZD0iTWFwQ29udHJvbFBvc09mZlgiIHR5cGU9InRleHQiIHNpemU9IjMiIG1heGxlbmd0aD0iMyIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW01hcENvbnRyb2xQb3NPZmZYXSJ9IiB2YWx1ZT0ieyRmb3JtLk1hcENvbnRyb2xQb3NPZmZYfSIvPgogICAgICAgICAgICAgICAge2ctPnRleHQgdGV4dD0iT2Zmc2V0ICh0b3AtYm90dG9tKSJ9PGlucHV0IGlkPSJNYXBDb250cm9sUG9zT2ZmWSIgdHlwZT0idGV4dCIgc2l6ZT0iMyIgbWF4bGVuZ3RoPSIzIiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bTWFwQ29udHJvbFBvc09mZlldIn0iIHZhbHVlPSJ7JGZvcm0uTWFwQ29udHJvbFBvc09mZll9Ii8+CiAgICAgICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uZXJyb3IuTWFwQ29udHJvbFBvc09mZlgpIHx8IGlzc2V0KCRmb3JtLmVycm9yLk1hcENvbnRyb2xQb3NPZmZYKSB9CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdpRXJyb3IiPgogICAgICAgICAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIGZvcm1hdHRlZCB0aGUgb2Zmc2V0KHMpIGNvcnJlY3RseS4ifQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJTaG93TWFwVHlwZSI+e2ctPnRleHQgdGV4dD0iU2hvdyBNYXAgVHk8dT5wPC91PmUifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfVF9Db250cm9sTWFwVHlwZSwyMDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IGFjY2Vzc2tleT0icCIgdHlwZT0iY2hlY2tib3giIGlkPSJTaG93TWFwVHlwZSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bc2hvd01hcFR5cGVdIn0iCiAgICAgICAgICAgICAgICAgICAge2lmICRmb3JtLnNob3dNYXBUeXBlfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0KICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iMSIvPgogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgIDwvdGFibGU+CjwvZGl2PgoKPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgPGgzPiB7Zy0+dGV4dCB0ZXh0PSJJbmZvV2luZG93IFNldHRpbmdzIn08L2gzPgoKICA8cCBjbGFzcz0iZ2lEZXNjcmlwdGlvbiI+e2ctPnRleHQgdGV4dD0iVGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIEluZm9XaW5kb3cgc2V0dGluZ3MifTwvcD4KICAgICAgPHRhYmxlIGNsYXNzPSJnYkRhdGFUYWJsZSI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iTWFwV2luZG93VHlwZSI+e2ctPnRleHQgdGV4dD0iTWFwIEluZm9XaW5kb3cgVGVtcGxhdGUifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfVF9JbmZvV2luZG93VGVtcGxhdGUsNDAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW01hcFdpbmRvd1R5cGVdIn0iIHZhbHVlPSJ7JGZvcm0uTWFwV2luZG93VHlwZX0iPgogICAgICAgICAgICAgICAgeyRmb3JtLndpbmRvd2xpc3R9CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9Ilpvb21JbkxldmVsIj57Zy0+dGV4dCB0ZXh0PSJEZWZhdWx0IFpvb20gPHU+STwvdT5uIExldmVsIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX1RfRGVmYXVsdFpvb21Jbiw0MDApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IGFjY2Vzc2tleT0iaSIgdHlwZT0idGV4dCIgaWQ9Ilpvb21JbkxldmVsIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVt6b29tSW5MZXZlbF0ifSIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ieyRmb3JtLnpvb21JbkxldmVsfSIgbWF4bGVuZ3RoPSIyIiBzaXplPSIyIi8+CiAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJUaGUgZGVmYXVsdCB6b29tIGxldmVsIHdoZW4gYSAnem9vbSBpbicgbGluayBpcyBjbGlja2VkLiBTcGVjaWZ5IGFuIGludGVnZXIgZnJvbSAwIHRvIDE3LiJ9CiAgICAgICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uZXJyb3Iuem9vbUluTGV2ZWwpfQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnaUVycm9yIj4KICAgICAgICAgICAgICAgICAgICAgICAge2ctPnRleHQgdGV4dD0iUGxlYXNlIHNwZWNpZnkgYW4gaW50ZWdlciBiZXR3ZWVuIDAgdG8gMTcifQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIHsvaWZ9CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJTaG93Wm9vbUxpbmtzIj57Zy0+dGV4dCB0ZXh0PSJTaG93IFwiWm9vbSBpblwiIExpPHU+bjwvdT5rcyJ9OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAge2lmIGlzc2V0KCRmb3JtLkFkbWluSGVscCkgYW5kICRmb3JtLkFkbWluSGVscCBlcSAxfQogICAgICAgICAgICA8dGg+PGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9UX1pvb21JbkxpbmtzLDQwMCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgYWNjZXNza2V5PSJuIiB0eXBlPSJjaGVja2JveCIgaWQ9IlNob3dab29tTGlua3MiCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW3Nob3dab29tTGlua3NdIn0iCiAgICAgICAgICAgICAgICAgICAge2lmICRmb3JtLnNob3dab29tTGlua3N9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfQogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIxIi8+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJTaG93SXRlbVN1bW1hcmllcyI+e2ctPnRleHQgdGV4dD0iU2hvdyBJdGVtIFM8dT51PC91Pm1tYXJpZXMifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfVF9JdGVtU3VtbWFyaWVzLDQwMCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8aW5wdXQgYWNjZXNza2V5PSJ1IiB0eXBlPSJjaGVja2JveCIgaWQ9IlNob3dJdGVtU3VtbWFyaWVzIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtzaG93SXRlbVN1bW1hcmllc10ifSIKICAgICAgICAgICAgICAgICAgICB7aWYgJGZvcm0uc2hvd0l0ZW1TdW1tYXJpZXN9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfQogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIxIi8+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJTaG93SXRlbURlc2NyaXB0aW9ucyI+e2ctPnRleHQgdGV4dD0iU2hvdyBJdGVtIDx1PkQ8L3U+ZXNjcmlwdGlvbnMifTo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5BZG1pbkhlbHApIGFuZCAkZm9ybS5BZG1pbkhlbHAgZXEgMX0KICAgICAgICAgICAgPHRoPjxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfVF9JdGVtRGVzY3JpcHRpb24sNDAwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPjwvdGg+CiAgICAgICAgICAgIHsvaWZ9ICAgICAgICAgICAgCiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxpbnB1dCBhY2Nlc3NrZXk9ImQiIHR5cGU9ImNoZWNrYm94IiBpZD0iU2hvd0l0ZW1EZXNjcmlwdGlvbnMiCiAgICAgICAgICAgICAgICAgICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW3Nob3dJdGVtRGVzY3JpcHRpb25zXSJ9IgogICAgICAgICAgICAgICAgICAgIHtpZiAkZm9ybS5zaG93SXRlbURlc2NyaXB0aW9uc31jaGVja2VkPSJjaGVja2VkInsvaWZ9CiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjEiLz4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogIDwvdGFibGU+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICA8aDM+IHtnLT50ZXh0IHRleHQ9IlRodW1ibmFpbCBiYXIgc2V0dGluZ3MifTwvaDM+CgogIDxwIGNsYXNzPSJnaURlc2NyaXB0aW9uIj4KICAgIHtnLT50ZXh0IHRleHQ9IlRoaXMgc2VjdGlvbiBtYW5hZ2VzIHRoZSB0aHVtYm5haWwgYmFyIHZpc2liaWxpdHkgYW5kIGJhc2ljIHNldHRpbmdzIn0KICA8L3A+CiAgICAgIDx0YWJsZSBjbGFzcz0iZ2JEYXRhVGFibGUiPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9IlRodW1iQmFyUG9zIj57Zy0+dGV4dCB0ZXh0PSJUaHVtYm5haWwgQmFyIFBvc2l0aW9uIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX1RfVGh1bWJuYWlsQmFyUG9zLDU1MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz48L3RoPgogICAgICAgICAgICB7L2lmfSAgICAgICAgICAgIAogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtUaHVtYkJhclBvc10ifSIgdmFsdWU9InskZm9ybS5NYXBXaW5kb3dUeXBlfSI+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPntnLT50ZXh0IHRleHQ9IkhpZGUiIGhpbnQ9IkRvbid0IGRpc3BsYXkifTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIiB7aWYgJGZvcm0uVGh1bWJCYXJQb3MgZXEgMX1zZWxlY3RlZHsvaWZ9PntnLT50ZXh0IHRleHQ9IlRvcCIgaGludD0iT3Bwb3NpdGUgb2YgYm90dG9tIn08L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMiIge2lmICRmb3JtLlRodW1iQmFyUG9zIGVxIDJ9c2VsZWN0ZWR7L2lmfT57Zy0+dGV4dCB0ZXh0PSJCb3R0b20iIGhpbnQ9Ik9wcG9zaXRlIG9mIHRvcCJ9PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjMiIHtpZiAkZm9ybS5UaHVtYkJhclBvcyBlcSAzfXNlbGVjdGVkey9pZn0+e2ctPnRleHQgdGV4dD0iUmlnaHQiIGhpbnQ9Ik9wcG9zaXRlIG9mIGxlZnQifTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICB7KjxvcHRpb24gdmFsdWU9IjQiIHtpZiAkZm9ybS5UaHVtYkJhclBvcyBlcSA0fXNlbGVjdGVkey9pZn0+e2ctPnRleHQgdGV4dD0iTGVmdCIgaGludD0iT3Bwb3NpdGUgb2YgcmlnaHQifTwvb3B0aW9uPiBBaW4ndCB3b3JraW5nIHJpZ2h0Kn0KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iVGh1bWJIZWlnaHQiPntnLT50ZXh0IHRleHQ9IlRodW1ibmFpbCBTaXplIn06PC9sYWJlbD48L3RoPgogICAgICAgICAgICB7aWYgaXNzZXQoJGZvcm0uQWRtaW5IZWxwKSBhbmQgJGZvcm0uQWRtaW5IZWxwIGVxIDF9CiAgICAgICAgICAgIDx0aD48aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX1RfVGh1bWJuYWlsQmFyU2l6ZSw1NTApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+PC90aD4KICAgICAgICAgICAgey9pZn0gICAgICAgICAgICAKICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJUaHVtYkhlaWdodCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW1RodW1iSGVpZ2h0XSJ9IiB2YWx1ZT0ieyRmb3JtLlRodW1iSGVpZ2h0fSIgbWF4bGVuZ3RoPSI1IiBzaXplPSI1Ii8+CiAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJIZWlnaHQgZm9yIFRPUCAmYW1wOyBCT1RUT00gcG9zaXRpb24sIFdpZHRoIGZvciBMRUZUICZhbXA7IFJJR0hUIHBvc2l0aW9uIn0KICAgICAgICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5UaHVtYkhlaWdodCl9CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdpRXJyb3IiPgogICAgICAgICAgICAgICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJQbGVhc2Ugc3BlY2lmeSBhIHBvc2l0aXZlIGludGVnZXIuIn0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgPC90YWJsZT4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJnYkJsb2NrIGdjQmFja2dyb3VuZDEiPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bc2F2ZV0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IlNhdmUgU2V0dGluZ3MifSIvPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bY2FuY2VsXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iQ2FuY2VsIiBoaW50PSJEaXNjYXJkIGNoYW5nZXMifSIvPgo8L2Rpdj4=');
expand_3537250845($outputDir, 'templates/ShowMap.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjUzICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQp7aWYgISRtYXAuZnVsbFNjcmVlbn0KPGRpdiBpZD0iZ3NDb250ZW50IiBjbGFzcz0iZ2NCb3JkZXIxIj4Key9pZn0KICB7aWYgJG1hcC5mdWxsU2NyZWVuIG5lcSAyIGFuZCAkbWFwLmZ1bGxTY3JlZW4gbmVxIDN9CiAgICB7aWYgJG1hcC5tb2RlIGVxICJOb3JtYWwifQogICAgICA8aDI+e2ctPnRleHQgdGV4dD0iUGhvdG8gTWFwIn17aWYgaXNzZXQoJG1hcC5GaWx0ZXIpfTxzcGFuIGNsYXNzPSJnaVdhcm5pbmciPiB7Zy0+dGV4dCB0ZXh0PSJGaWx0ZXJlZCBvbiJ9IHskbWFwLkZpbHRlcn08L3NwYW4+ey9pZn08L2gyPgogICAge2Vsc2V9CiAgICAgIDxoMj57Zy0+dGV4dCB0ZXh0PSJHcmFiIGNvb3JkaW5hdGVzIGZyb20gTWFwIn08L2gyPgogICAgICA8dGFibGUgYm9yZGVyPTA+CiAgICAgIDx0cj4KICAgICAgPHRkIHJvd3NwYW49Mj4KICAgIHsvaWZ9CiAgICB7aWYgaXNzZXQoJG1hcC5maWx0ZXJoYWNraW5nZXJyb3IpfQogICAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgICAgICA8aDIgY2xhc3M9ImdpRXJyb3IiPntnLT50ZXh0IHRleHQ9IlRoZXJlIHdhcyBhIGhhY2tpbmcgYXR0ZW1wdCBvbiB0aGUgZmlsdGVyIG5hbWUsIHBsZWFzZSByZW1vdmUgdGhlIGZpbHRlciBvcHRpb24gZnJvbSB0aGUgYWRkcmVzcyBiYXIuIn0KICAgIDwvZGl2PgogICAgey9pZn0KICB7L2lmfQoKCntpZiAkbWFwLm1vZGUgZXEgIk5vcm1hbCJ9CiAgICB7aWYgJG1hcC51c2VNYXJrZXJTZXQgZXEgIm5vbmUifQogICAgPCEtLSAKICAgIElmIHRoZXJlIGFyZSBubyBtYXJrZXJzLCBkb24ndCBkaXNwbGF5IGEgbWFwLiBJbnN0ZWFkLCBzaG93IGEgbGluayB0byB0aGUgYWRtaW4gcGFnZSBmb3IgdGhlIAogICAgbWFya2VycyB0byBiZSBjcmVhdGVkIAogICAgLS0+CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgIHtjYXB0dXJlIG5hbWU9Im1hcFRoZW1lQWRtaW5VcmwifQogICAgICB7Zy0+dXJsIGFyZzE9InZpZXc9Y29yZS5TaXRlQWRtaW4iIGFyZzI9InN1YlZpZXc9bWFwLk1hcFNpdGVBZG1pbiIgYXJnMz0ibW9kZT1UaGVtZSJ9CiAgICB7L2NhcHR1cmV9CiAgICAgIDxoMiBjbGFzcz0iZ2lFcnJvciI+e2ctPnRleHQgdGV4dD0iVGhlcmUgYXJlIG5vIG1hcmtlcnMgY3JlYXRlZCBvciBhIGJhZCBtYXJrZXIgc2V0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gUGxlYXNlIHJldmlldyBzZXR0aW5ncyBpbiB0aGUgJXNjb250cm9sIHBhbmVsJXMuIgogICAgICAgCWFyZzE9IjxhIGhyZWY9XCJgJHNtYXJ0eS5jYXB0dXJlLm1hcFRoZW1lQWRtaW5VcmxgXCI+IiBhcmcyPSI8L2E+In0KICAgICAgPC9oMj4KICAgIDwvZGl2PgogICAgey9pZn0KCiAgICB7aWYgaXNzZXQoJG1hcC5ub2dwc2Nvb3JkcykgYW5kICRtYXAubm9ncHNjb29yZHN9CiAgICA8IS0tIElmIHRoZXJlIGFyZSBubyBpdGVtcyB3aXRoIEdQUyBjb29yZGluYXRlLCBkb24ndCBkaXNwbGF5IGEgbWFwIGFuZCBzaG93IGEgbWVzc2FnZSAtLT4KICAgIDxkaXYgY2xhc3M9ImdiQmxvY2siPgogICAgICAgPGgyIGNsYXNzPSJnaUVycm9yIj57Zy0+dGV4dCB0ZXh0PSJUaGVyZSBhcmUgbm8gaXRlbXMgd2l0aCBHUFMgY29vcmRpbmF0ZXMifQogICAgICAgPGEgaHJlZj0naHR0cDovL2NvZGV4LmdhbGxlcnkyLm9yZy9pbmRleC5waHAvR2FsbGVyeTI6TW9kdWxlczpVc2VyR3VpZGUnPiB7Zy0+dGV4dCB0ZXh0PSJDaGVjayB0aGUgV2lraSBmb3IgbW9yZSBpbmZvcm1hdGlvbiJ9PC9hPjwvaDI+CiAgICAgICA8L2Rpdj4KICAgIHsvaWZ9CgogICAge2lmIGlzc2V0KCRtYXAubm9pdGVtcGVybXMpIGFuZCAkbWFwLm5vaXRlbXBlcm1zfQogICAgPCEtLSBJZiB0aGVyZSBhcmUgbm8gaXRlbXMgd2l0aCBzdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGJlIG1hcHBlZCB0aGVuIGRpc3BsYXkgYSBtZXNzYWdlIC0tPgogICAgPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgICAgICAgPGNlbnRlcj48aDIgY2xhc3M9ImdpRXJyb3IiPntnLT50ZXh0IHRleHQ9IlRoZXJlIGFyZSBubyBpdGVtcyBhdmFpbGFibGUgdG8gYmUgbWFwcGVkIn08YnIvPjxici8+CiAgICAgICAgPGEgaHJlZj0nSmF2YXNjcmlwdDpoaXN0b3J5LmdvKC0xKTsnPkdvIEJhY2s8L2E+PC9jZW50ZXI+PC9oMj4KICAgIDwvZGl2PgogICAgey9pZn0KCiAgICB7aWYgaXNzZXQoJG1hcC5ub2l0ZW1pbmFsYnVtKSBhbmQgJG1hcC5ub2l0ZW1pbmFsYnVtfQogICAgPCEtLSBObyBpdGVtIGluIHRoZSBzZWxlY3RlZCBhbGJ1bSwgaGFja2luZyBhdHRlbXB0ID8gLS0+CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICA8Y2VudGVyPjxoMiBjbGFzcz0iV2FybmluZyI+CiAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJUaGVyZSB3ZXJlIG5vIGl0ZW1zIGZvdW5kIGluIHRoZSBzZWxlY3RlZCAlcywgd2hhdCB3b3VsZCB5b3UgbGlrZSB0byBkbz8iCiAgICAgICAgICBhcmcxPSRtYXAuRmlsdGVyfTwvaDI+PGJyLz48L2NlbnRlcj4KICAgICAgICA8aDIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTAwcHg7Ij4xIC0ge2ctPnRleHQgdGV4dD0iJXNHbyBCYWNrJXMgdG8gdGhlIEFsYnVtIGFuZCBhZGQgY29vcmRpbmF0ZXMgdG8gaXRlbXMiCiAgICAgICAgICBhcmcxPSI8YSBocmVmPSdKYXZhc2NyaXB0Omhpc3RvcnkuZ28oLTEpOyc+IiBhcmcyPSI8L2E+In0KICAgICAgICA8L2gyPgoJe2NhcHR1cmUgbmFtZT0ibWFwVXJsIn0KCSAge2ctPnVybCBhcmcxPSJ2aWV3PW1hcC5TaG93TWFwIn0KCXsvY2FwdHVyZX0KCTxoMiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMDBweDsiPjIgLSB7Zy0+dGV4dCB0ZXh0PSJTaG93IG1lIHRoZSAlc2RlZmF1bHQgbWFwJXMiCiAgICAgICAgICBhcmcxPSI8YSBocmVmPVwiYCRzbWFydHkuY2FwdHVyZS5tYXBVcmxgXCI+IiBhcmcyPSI8L2E+In0KICAgICAgICA8L2gyPgogICAgICAgIDxici8+CiAgICA8L2Rpdj4KICAgIHsvaWZ9CnsvaWZ9CiAgICB7aWYgIWlzc2V0KCRtYXAuZ29vZ2xlTWFwS2V5KSBvciAkbWFwLmdvb2dsZU1hcEtleSBlcSAnJ30KICAgIDwhLS0gTm8gR29vZ2xlIE1hcCBLZXlzIHdlcmUgZm91bmQgdG8gc3VpdCB0aGlzIGluc3RhbGwgLS0+CiAgICA8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICAgICAgICA8Y2VudGVyPjxoMiBjbGFzcz0iZ2lFcnJvciI+CiAgICAgICAge2NhcHR1cmUgbmFtZT0ibWFwQWRtaW5VcmwifQogICAgICAgICAge2ctPnVybCBhcmcxPSJ2aWV3PWNvcmUuU2l0ZUFkbWluIiBhcmcyPSJzdWJWaWV3PW1hcC5NYXBTaXRlQWRtaW4ifQoJey9jYXB0dXJlfQoJe2ctPnRleHQgdGV4dD0iWW91IGRvIG5vdCBoYXZlIGEgcHJvZmlsZSBzZXR1cCBmb3IgdGhpcyB3ZWJzaXRlIHRvIHVzZSB0aGUgR29vZ2xlIE1hcC4gUmV2aWV3IHlvdXIgc2V0dGluZ3MgaW4gdGhlICVzQWRtaW4gUGFuZWwlcyBvciAlc2NoZWNrIHRoZSBXaWtpJXMuIgoJICBhcmcxPSI8YSBocmVmPVwiYCRzbWFydHkuY2FwdHVyZS5tYXBBZG1pblVybGBcIj4iIGFyZzI9IjwvYT4iCiAgICAgICAgICBhcmczPSI8YSBocmVmPVwiaHR0cDovL2NvZGV4LmdhbGxlcnkyLm9yZy9HYWxsZXJ5MjpNb2R1bGVzOk1hcDpVc2VyR3VpZGVcIj4iIGFyZzQ9IjwvYT4ifQogCTwvaDI+PC9jZW50ZXI+PGJyLz48YnIvPgogICAgPC9kaXY+CiAgICB7ZWxzZX0KCjwhLS0gQ3JlYXRlIHRoZSBEaXYgd2hlcmUgdGhlIG1hcCB3aWxsIGJlIGRpc3BsYXllZCAgLS0+CiAgICB7aWYgJG1hcC5tb2RlIGVxICJQaWNrIiBvciAoJG1hcC5tb2RlIGVxICJOb3JtYWwiIGFuZCAoIWlzc2V0KCRtYXAubm9pdGVtaW5hbGJ1bSkgb3IgISRtYXAubm9pdGVtaW5hbGJ1bSkgYW5kICghaXNzZXQoJG1hcC5ub2dwc2Nvb3Jkcykgb3IgISRtYXAubm9ncHNjb29yZHMpIGFuZCAoIWlzc2V0KCRtYXAubm9pdGVtcGVybXMpIG9yICEkbWFwLm5vaXRlbXBlcm1zKSBhbmQgaXNzZXQoJG1hcC5nb29nbGVNYXBLZXkpIGFuZCAkbWFwLmdvb2dsZU1hcEtleSBuZXEgJycpfQogICAge2lmICRtYXAubW9kZSBlcSAiUGljayIgb3IgJG1hcC51c2VNYXJrZXJTZXQgPD4gIm5vbmUifQogICAgICAgIHtpZiAkbWFwLm1vZGUgbmVxICJQaWNrIiBhbmQgaXNzZXQoJG1hcC5TaG93RmlsdGVycykgYW5kICRtYXAuU2hvd0ZpbHRlcnMgZXEgIjMiIGFuZCAhJG1hcC5mdWxsU2NyZWVufQogICAgICAgICB7Zy0+YmxvY2sgdHlwZT0ibWFwLm1hcCJ9CiAgICAgICAgey9pZn0KICAgICAgICB7aWYgJG1hcC5tb2RlIG5lcSAiUGljayIgYW5kICghaXNzZXQoJG1hcC5MZWdlbmRQb3MpIG9yIChpc3NldCgkbWFwLkxlZ2VuZFBvcykgYW5kICRtYXAuTGVnZW5kUG9zIGVxICcyJykpIGFuZCAkbWFwLmZ1bGxTY3JlZW4gbmVxIDN9CiAgICAgICAge2lmICRtYXAubW9kZSBuZXEgIlBpY2siIGFuZCAoKGlzc2V0KCRtYXAuQWxidW1MZWdlbmQpKSBhbmQgKCRtYXAuQWxidW1MZWdlbmQgZXEgIjEiKSkgb3IgKChpc3NldCgkbWFwLlBob3RvTGVnZW5kKSkgYW5kICgkbWFwLlBob3RvTGVnZW5kIGVxICIxIikpIG9yICgoaXNzZXQoJG1hcC5yZWdyb3VwSXRlbXMpKSBhbmQgKCRtYXAucmVncm91cEl0ZW1zIGVxICIxIikpIGFuZCAkbWFwLmZ1bGxTY3JlZW4gbmVxIDN9CiAgICAgICAgIHtnLT5ibG9jayB0eXBlPSJtYXAuTGVnZW5kIn0KICAgICAgICB7L2lmfXsvaWYgfQogICAgICAgIHtpZiAkbWFwLm1vZGUgbmVxICJQaWNrIiBhbmQgJG1hcC5mdWxsU2NyZWVuIG5lcSAzfQogICAgICAgIHtpZiAkbWFwLlRodW1iQmFyUG9zIGVxICIxIiBvciAkbWFwLlRodW1iQmFyUG9zIGVxICIzIiBvciAkbWFwLlRodW1iQmFyUG9zIGVxICI0In17Zy0+YmxvY2sgdHlwZT0ibWFwLlRodW1iIn17L2lmfQogICAgICAgIDx0YWJsZSBhbGlnbj1yaWdodCBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyI+CiAgICAgICAge2lmIGlzc2V0KCRtYXAuU2hvd0ZpbHRlcnMpIGFuZCAkbWFwLlNob3dGaWx0ZXJzIGVxICIyIiBhbmQgISRtYXAuZnVsbFNjcmVlbn0KICAgICAgICAgIDx0cj48dGQ+CiAgICAgICAgICB7Zy0+YmxvY2sgdHlwZT0ibWFwLm1hcCJ9CiAgICAgICAgICA8YnIvPgogICAgICAgICAgPC90ZD48L3RyPgogICAgICAgIHsvaWZ9CiAgICAgICAge2lmICRtYXAubW9kZSBuZXEgIlBpY2siIGFuZCBpc3NldCgkbWFwLkxlZ2VuZFBvcykgYW5kICRtYXAuTGVnZW5kUG9zIGVxICcwJ30KICAgICAgICAgIDx0cj48dGQ+CiAgICAgICAgICAge2ctPmJsb2NrIHR5cGU9Im1hcC5MZWdlbmQifQogICAgICAgICAgPC90ZD48L3RyPgogICAgICAgIHsvaWZ9CiAgICAgICAgPC90YWJsZT4KICAgICAgICB7L2lmfSB7KiBlbmQgaWYgJG1hcC5tb2RlIG5lcSAiUGljayIgYW5kICRtYXAuZnVsbFNjcmVlbiBuZXEgMyAqfQogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICBkb2N1bWVudC53cml0ZSgnPGRpdiBpZD0ibWFwIiB7aWYgJG1hcC5mdWxsU2NyZWVuIGVxIDN9c3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IntlbHNlfWNsYXNzPSJ0aGVtYXAiIHN0eWxlPSJvdmVyZmxvdzpoaWRkZW47d2lkdGg6JytteVdpZHRoKydweDtoZWlnaHQ6JytteUhlaWdodCsncHg7Y29sb3I6YmxhY2s7YmFja2dyb3VuZC1jb2xvcjpsaWdodGdyZXk7Ym9yZGVyOjFweCBzb2xpZCBibGFjazsiey9pZn0+Jyk7CiAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAge2lmICRtYXAubW9kZSBlcSAiTm9ybWFsIn0KICAgICAgICA8Y2VudGVyPjxoMyBpZD0ibG9hZGluZyI+e2ctPnRleHQgdGV4dD0iTG9hZGluZywgcGxlYXNlIHdhaXQuLi4ifTwvaDM+PC9jZW50ZXI+CiAgICAgICAgCiAgICAgICAgeyogcmV3cml0ZSBjdXN0b20gY29udHJvbHMgZm9yIHYyICp9CgogICAgICAgIHsvaWZ9CiAgICAgICAgPCEtLQogICAgICAgIFByZWxvYWQgaW1hZ2VzIHRvIGhlbHAgbG9hZGluZyB0aW1lIGluIElFCiAgICAgICAgLS0+CiAgICAgICAge2lmIGlzc2V0KCRtYXAucHJlbG9hZCl9CiAgICAgICAgICB7JG1hcC5wcmVsb2FkfQogICAgICAgIHsvaWZ9CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmRvY3VtZW50LndyaXRlKCc8XC9kaXY+Jyk7PC9zY3JpcHQ+IHsqIEVuZCBvZiB0aGUgbWFwIGRpdiAqfQoKICAgIHtpZiAkbWFwLmZ1bGxTY3JlZW4gbmVxIDN9CiAgICAgPGRpdiBpZD0iZGl2X2hpc3RvcnkiIGNsYXNzPSJtYXBfaGlzdG9yeSI+e2ctPnRleHQgdGV4dD0iTW92ZSBoaXN0b3J5In06PC9kaXY+CiAgICB7L2lmfQoKICAgICB7aWYgJG1hcC5tb2RlIGVxICJOb3JtYWwiIGFuZCAkbWFwLmZ1bGxTY3JlZW4gbmVxIDN9CiAgICAgIHtpZiAkbWFwLlRodW1iQmFyUG9zIGVxICIyIn17Zy0+YmxvY2sgdHlwZT0ibWFwLlRodW1iIn17L2lmfQogICAgICB7aWYgaXNzZXQoJG1hcC5TaG93RmlsdGVycykgYW5kICRtYXAuU2hvd0ZpbHRlcnMgZXEgIjQiIGFuZCAhJG1hcC5mdWxsU2NyZWVufXtnLT5ibG9jayB0eXBlPSJtYXAubWFwIn17L2lmfQogICAgICAge2lmICRtYXAubW9kZSBuZXEgIlBpY2siIGFuZCAoaXNzZXQoJG1hcC5MZWdlbmRQb3MpIGFuZCAoJG1hcC5MZWdlbmRQb3MgZXEgJzMnKSl9CiAgICAgICB7aWYgKChpc3NldCgkbWFwLkFsYnVtTGVnZW5kKSkgYW5kICgkbWFwLkFsYnVtTGVnZW5kIGVxICIxIikpIG9yICgoaXNzZXQoJG1hcC5QaG90b0xlZ2VuZCkpIGFuZCAoJG1hcC5QaG90b0xlZ2VuZCBlcSAiMSIpKSBvciAoKGlzc2V0KCRtYXAucmVncm91cEl0ZW1zKSkgYW5kICgkbWFwLnJlZ3JvdXBJdGVtcyBlcSAiMSIpKX0KICAgICAgICAge2ctPmJsb2NrIHR5cGU9Im1hcC5MZWdlbmQifQogICAgICAgey9pZn0KICAgICAgIHsvaWZ9CiAgICAgey9pZn0KICAgICB7aWYgJG1hcC5tb2RlIGVxICJQaWNrIn0KICAgICAgPC90ZD4KICAgICAgPHRkIHZhbGlnbj10b3A+CiAgICAgIDxoMiBjbGFzcz0iZ2lTdWNjZXNzIj57Zy0+dGV4dCB0ZXh0PSJNRU5VIn08L2gyPjxici8+CiAgICAgIDwhLS0KICAgICAgICBUaGlzIGNyZWF0ZXMgdGhlIFVSTCB0byBzYXZlIHRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdG8gdGhlIHJpZ2h0IHBsYWNlCiAgICAgIC0tPgogICAgICA8Zm9ybSBhY3Rpb249IntnLT51cmx9IiBtZXRob2Q9InBvc3QiIGlkPSJpdGVtRWRpdCIgZW5jdHlwZT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIj4KICAgICAgPGRpdj4KICAgICAge2ctPmhpZGRlbkZvcm1WYXJzfQogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7Zy0+Zm9ybXZhciB2YXI9ImNvbnRyb2xsZXIifSIgdmFsdWU9InskY29udHJvbGxlcn0iLz4KICAgICAgPC9kaXY+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtpZF0ifSIgdmFsdWU9InskZm9ybS5pZH0iLz4KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW21vZGVdIn0iIHZhbHVlPSJ7JG1hcC5tb2RlfSIvPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bcGx1Z2luXSJ9IiB2YWx1ZT0ieyRtYXAucGx1Z2lufSIvPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iY29vcmQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtjb29yZF0ifSIgdmFsdWU9IntpZiAkbWFwLmNlbnRlckxvbmdMYXQgbmVxICdub25lJ317JG1hcC5jZW50ZXJMb25nTGF0fXtlbHNlfS0xMiwyMHsvaWZ9Ii8+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJ6b29tIiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bem9vbV0ifSIgdmFsdWU9IntpZiAkbWFwLnpvb21MZXZlbCBuZXEgJ25vbmUnfXskbWFwLnpvb21MZXZlbH17ZWxzZX0xNnsvaWZ9Ii8+CiAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtzYXZlXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iU2F2ZSB0aGVzZSBjb29yZGluYXRlcyJ9IiAgY2xhc3M9ImlucHV0VHlwZVN1Ym1pdCIvPgogICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bY2FuY2VsXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iQ2FuY2VsIiBoaW50PSJEaXNjYXJkIGNoYW5nZXMifSIgIGNsYXNzPSJpbnB1dFR5cGVTdWJtaXQiLz4KICAgICAgPC9mb3JtPgogICAgICA8YnIvPjxici8+CiAgICAgICAgPCEtLQogICAgICAgIERpc3BsYXkgc29tZSB2ZXJ5IGJhc2ljIGhlbHAKICAgICAgICAtLT4KICAgICAgPGgyIGNsYXNzPSJnaVN1Y2Nlc3MiPntnLT50ZXh0IHRleHQ9IlRpcHMiIGhpbnQ9IkhpbnRzIG9yIHN1Z2dlc3Rpb25zIn08L2gyPgogICAgICA8dWw+PGxpLz57Zy0+dGV4dCB0ZXh0PSJDbGljayBvbiB0aGUgbWFwIHRvIGNob29zZSB0aGUgcG9pbnQuIn08YnIvPjxici8+CiAgICAgIDxsaS8+e2ctPnRleHQgdGV4dD0iRWFjaCBjbGljayB3aWxsIGNyZWF0ZSBhIG1hcmtlciB0byBlYXNlIGFpbWluZy4ifTxici8+PGJyLz4KICAgICAgPGxpLz57Zy0+dGV4dCB0ZXh0PSJXaGVuIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIGNvb3JkaW5hdGVzLCBjbGljayA8Qj5TYXZlPC9CPiBhYm92ZSBhbmQgdGhlIGNlbnRlciBvZiB0aGUgbWFwIGFuZCB0aGUgem9vbSBsZXZlbCB3aWxsIGJlIGNvcGllZCBpbiB0aGUgR1BTIGFuZCBab29tTGV2ZWwgZmllbGRzIG9mIHRoZSBpdGVtLiJ9PGJyLz4KICAgICAgPC91bD4KICAgICAgPGgyPnskdGhlbWUuaXRlbS50aXRsZXxtYXJrdXB9PC9oMj48YnIgLz48aW1nIHNyYz0ieyRmb3JtLml0ZW10aHVtYn0iIC8+CiAgICAgIDwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD4KICAgICAgPGgzPntnLT50ZXh0IHRleHQ9IkN1cnJlbnQgQ29vcmRpbmF0ZXMifTwvaDM+CiAgICAgIDxkaXYgaWQ9Im1lc3NhZ2VfaWQiPih7aWYgJG1hcC5jZW50ZXJMb25nTGF0IG5lcSAnbm9uZSd9eyRtYXAuY2VudGVyTG9uZ0xhdH17ZWxzZX0tMTIsMjB7L2lmfSk8L2Rpdj48YnIvPgogICAgICA8aDM+e2ctPnRleHQgdGV4dD0iQ3VycmVudCBab29tbGV2ZWwifTwvaDM+CiAgICAgIDxkaXYgaWQ9Inpvb21faWQiPntpZiAkbWFwLnpvb21MZXZlbCBuZXEgJ25vbmUnfXskbWFwLnpvb21MZXZlbH17ZWxzZX0xNnsvaWZ9PC9kaXY+PGJyLz4KICAgICAgPC90ZD48L3RyPgogICAgICA8L3RhYmxlPgoKICAgICB7L2lmfQogICAgey9pZn0KICB7L2lmfQp7L2lmfQp7aWYgJG1hcC5oYXNhZG1pbnJpZ2h0cyBhbmQgJG1hcC5mdWxsU2NyZWVuIG5lcSAzfQo8YSBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NTBweDsiIGhyZWY9IntnLT51cmwgYXJnMT0idmlldz1jb3JlLlNpdGVBZG1pbiIgYXJnMj0ic3ViVmlldz1tYXAuTWFwU2l0ZUFkbWluIn0iPntnLT50ZXh0IHRleHQ9Ikdvb2dsZSBNYXAgQWRtaW5pc3RyYXRpb24ifTwvYT4Key9pZn0Ke2lmICEkbWFwLmZ1bGxTY3JlZW59CjwvZGl2Pgp7L2lmfQo8IS0tICNnc0NvbnRlbnQgLS0+');
expand_3537250845($outputDir, 'templates/blocks/ItemCoords.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjUzICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQp7KiBTZXQgZGVmYXVsdHMgKn0Ke2lmICFpc3NldCgkaXRlbSl9e2Fzc2lnbiB2YXI9aXRlbSB2YWx1ZT0kdGhlbWUuaXRlbX17L2lmfQp7aWYgIWlzc2V0KCRjb29yZFN0eWxlKX17YXNzaWduIHZhcj1jb29yZFN0eWxlIHZhbHVlPTF9ey9pZn0Ke2ctPmNhbGxiYWNrIHR5cGU9Im1hcC5JdGVtQ29vcmRzIiBpdGVtSWQ9JGl0ZW0uaWQgY29vcmRTdHlsZT0kY29vcmRTdHlsZX0Ke2lmICFlbXB0eSgkYmxvY2subWFwLkl0ZW1Db29yZHMpIGFuZCAhZW1wdHkoJGJsb2NrLm1hcC5JdGVtQ29vcmRzLmxhdCkgYW5kICFlbXB0eSgkYmxvY2subWFwLkl0ZW1Db29yZHMubG5nKX0KPGRpdiBjbGFzcz0ieyRjbGFzc30iPgp7Zy0+dGV4dCB0ZXh0PSIlcyBDb29yZGluYXRlczoiIGFyZzE9JGJsb2NrLm1hcC5JdGVtQ29vcmRzLkl0ZW1UeXBlfQp7aWYgJGNvb3JkU3R5bGUgZXEgMX0KeyRibG9jay5tYXAuSXRlbUNvb3Jkcy5sYXQuZGVnfSZkZWc7LCB7JGJsb2NrLm1hcC5JdGVtQ29vcmRzLmxuZy5kZWd9JmRlZzsKe2Vsc2VpZiAkY29vcmRTdHlsZSBlcSAyfQp7KiBVc2UgJiMzOTsgZm9yIGFwb3N0cm9waGUgYmVjYXVzZSAmYXBvczsgZG9lc24ndCB3b3JrIGluIElFICp9CnskYmxvY2subWFwLkl0ZW1Db29yZHMubGF0LmRlZ30mZGVnO3skYmxvY2subWFwLkl0ZW1Db29yZHMubGF0Lm1pbn0mIzM5OyZuYnNwO3skYmxvY2subWFwLkl0ZW1Db29yZHMubGF0LmRpcn0sCnskYmxvY2subWFwLkl0ZW1Db29yZHMubG5nLmRlZ30mZGVnO3skYmxvY2subWFwLkl0ZW1Db29yZHMubG5nLm1pbn0mIzM5OyZuYnNwO3skYmxvY2subWFwLkl0ZW1Db29yZHMubG5nLmRpcn0Ke2Vsc2VpZiAkY29vcmRTdHlsZSBlcSAzfQp7JGJsb2NrLm1hcC5JdGVtQ29vcmRzLmxhdC5kZWd9JmRlZzt7JGJsb2NrLm1hcC5JdGVtQ29vcmRzLmxhdC5taW59JiMzOTt7JGJsb2NrLm1hcC5JdGVtQ29vcmRzLmxhdC5zZWN9JnF1b3Q7Jm5ic3A7eyRibG9jay5tYXAuSXRlbUNvb3Jkcy5sYXQuZGlyfSwKeyRibG9jay5tYXAuSXRlbUNvb3Jkcy5sbmcuZGVnfSZkZWc7eyRibG9jay5tYXAuSXRlbUNvb3Jkcy5sbmcubWlufSYjMzk7eyRibG9jay5tYXAuSXRlbUNvb3Jkcy5sbmcuc2VjfSZxdW90OyZuYnNwO3skYmxvY2subWFwLkl0ZW1Db29yZHMubG5nLmRpcn0Key9pZn0KPC9kaXY+CnsvaWZ9');
expand_3537250845($outputDir, 'templates/blocks/Legend.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjUzICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKe2lmIGlzc2V0KCRtYXAuTGVnZW5kUG9zKSBhbmQgaXNzZXQoJG1hcC5MZWdlbmRGZWF0dXJlKSBhbmQgJG1hcC5MZWdlbmRGZWF0dXJlIG5lcSAnMCcgYW5kICgoaXNzZXQoJG1hcC5BbGJ1bUxlZ2VuZCkgYW5kICRtYXAuQWxidW1MZWdlbmQpIG9yIChpc3NldCgkbWFwLlBob3RvTGVnZW5kKSBhbmQgJG1hcC5QaG90b0xlZ2VuZCkgb3IgKGlzc2V0KCRtYXAucmVncm91cEl0ZW1zKSBhbmQgJG1hcC5yZWdyb3VwSXRlbXMpKX0Ke2lmICRtYXAuTGVnZW5kUG9zIGVxICcwJyBvciAkbWFwLkxlZ2VuZFBvcyBlcSAnMSd9CjxkaXYgY2xhc3M9InskY2xhc3N9Ij4Key9pZn0KICA8ZGl2IGlkPSJsZWdlbmQiIGNsYXNzPSJnY0JhY2tncm91bmQxIiBzdHlsZT0ie2lmICRtYXAuTGVnZW5kUG9zIGVxICcwJ31yaWdodDo1cHg7e2lmICRtYXAuVGh1bWJCYXJQb3MgZXEgJzEnfXBvc2l0aW9uOnJlbGF0aXZlO3RvcDoteyRtYXAuVGh1bWJIZWlnaHR9cHg7ey9pZn17L2lmfXtpZiAkbWFwLkxlZ2VuZFBvcyBlcSAwIG9yICRtYXAuTGVnZW5kUG9zIGVxIDF9d2lkdGg6MTUwcHg7e2Vsc2V9d2lkdGg6bXl3aWR0aDt7L2lmfWJvcmRlcjogMnB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6LjVlbTsiPgogICAgPGNlbnRlcj48aDI+e2ctPnRleHQgdGV4dD0iTGVnZW5kKHMpIn08L2gyPjwvY2VudGVyPjxici8+CiAgICB7aWYgJG1hcC5BbGJ1bUxlZ2VuZCBlcSAiMSJ9CiAgICB7aWYgJG1hcC5MZWdlbmRQb3MgZXEgJzAnIG9yICRtYXAuTGVnZW5kUG9zIGVxICcxJ30KICAgICAgPGJyLz4KICAgICAgPHRhYmxlIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkOyBib3JkZXItY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyI+PHRyIGNsYXNzPSJnY0JhY2tncm91bmQyIiBvbmNsaWNrPSJ0b2dnbGVhbGJ1bWxlZ2VuZCgpOyIgc3R5bGU9ImN1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I2RmZGZkZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCBibGFjazsiPjx0ZCB3aWR0aD0xMDAlPntnLT50ZXh0IHRleHQ9IkFsYnVtIExlZ2VuZCJ9PC90ZD48dGQ+PGltZyBhbHQ9Im5vbmUiIG5hbWU9ImFsYnVtYXJyb3ciIHNyYz0ie2ctPnVybCBocmVmPSJtb2R1bGVzL21hcC9pbWFnZXMvZG93bi5wbmcifSIgaGVpZ2h0PSIxNiIgd2lkdGg9IjE1Ii8+PC90ZD48L3RyPgogICAgICA8dHI+PHRkIGNvbHNwYW49Mz4KICAgIHsvaWZ9CiAgICA8dGFibGUge2lmICRtYXAuTGVnZW5kUG9zIGVxICcwJyBvciAkbWFwLkxlZ2VuZFBvcyBlcSAnMSd9aWQ9ImFsYnVtbGVnZW5kIiB7aWYgJG1hcC5FeHBhbmRBbGJ1bUxlZ2VuZH1zdHlsZT0iZGlzcGxheTpibG9jazsie2Vsc2V9c3R5bGU9ImRpc3BsYXk6bm9uZTsiey9pZn17L2lmfT4KICAgIHtpZiAkbWFwLkxlZ2VuZFBvcyBlcSAnMicgb3IgJG1hcC5MZWdlbmRQb3MgZXEgJzMnfTx0cj48dGQ+e2ctPnRleHQgdGV4dD0iQWxidW0gTGVnZW5kIn08L3RkPnsvaWZ9CiAgICB7Zm9yZWFjaCBmcm9tPSRtYXAuYWxsbWFya2VycyBrZXk9bnVtIGl0ZW09aW1hZ2VsaXN0fQogICAge2ZvcmVhY2ggZnJvbT0kaW1hZ2VsaXN0IGtleT1uYW1lIGl0ZW09aW1hZ2VzfQogICAgICAge2lmICRuYW1lIGVxICRtYXAudXNlQWxidW1NYXJrZXJTZXR9CiAgICAgICB7Zm9yZWFjaCBmcm9tPSRpbWFnZXMgaXRlbT1pbWFnZSBrZXk9bnVtfQogICAgICAge2lmICRtYXAuQWxidW1MZWdlbmRzLiRudW0gbmVxICIifQogICAgICAgICB7aWYgJG1hcC5MZWdlbmRQb3MgZXEgJzAnIG9yICRtYXAuTGVnZW5kUG9zIGVxICcxJ308dHI+ey9pZn0KICAgICAgICAge2Fzc2lnbiB2YXI9ImNvbG9ucG9zIiB2YWx1ZT0kaW1hZ2V8c3RycG9zOiI6In0KICAgICAgICAge2Fzc2lnbiB2YXI9Im5ld2ltYWdlIiB2YWx1ZT0kaW1hZ2V8c3Vic3RyOiRjb2xvbnBvcysyfQogICAgICAgICA8dGQ+PGlucHV0IG9uY2xpY2s9InRvZ2dsZW1hcmtlcnMoJ0F7JG51bX0nKSIgdmFsdWU9IjEiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJDQXskbnVtfSIgY2hlY2tlZD0iY2hlY2tlZCIgLz48L3RkPjx0ZCBpZD0iQXskbnVtfSI+eyRuZXdpbWFnZX08L3RkPjx0ZD57JG1hcC5BbGJ1bUxlZ2VuZHMuJG51bX08L3RkPgogICAgICAgICB7aWYgJG1hcC5MZWdlbmRQb3MgZXEgJzAnIG9yICRtYXAuTGVnZW5kUG9zIGVxICcxJ308L3RyPnsvaWZ9CiAgICAgICB7L2lmfQogICAgICAgey9mb3JlYWNofQogICAgICAgey9pZn0KICAgIHsvZm9yZWFjaH0KICAgIHsvZm9yZWFjaH0KICAgIDwvdGFibGU+CiAgICB7aWYgJG1hcC5MZWdlbmRQb3MgZXEgJzAnIG9yICRtYXAuTGVnZW5kUG9zIGVxICcxJ308L3RkPjwvdHI+PC90YWJsZT57L2lmfQogICAgey9pZn0KICAgIHtpZiAkbWFwLlBob3RvTGVnZW5kIGVxICIxIn0KICAgIHtpZiAkbWFwLkxlZ2VuZFBvcyBlcSAnMCcgb3IgJG1hcC5MZWdlbmRQb3MgZXEgJzEnfQogICAgPGJyLz4KICAgIDx0YWJsZSBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZDsgYm9yZGVyLWNvbG9yOiBibGFjayAhaW1wb3J0YW50O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPjx0ciBjbGFzcz0iZ2NCYWNrZ3JvdW5kMiIgb25jbGljaz0idG9nZ2xlcGhvdG9sZWdlbmQoKTsiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNkZmRmZGY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgYmxhY2s7Ij48dGQgd2lkdGg9MTAwJT57Zy0+dGV4dCB0ZXh0PSJQaG90byBMZWdlbmQifTwvdGQ+PHRkPjxpbWcgYWx0PSJub25lIiBuYW1lPSJwaG90b2Fycm93IiBzcmM9IntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL2Rvd24ucG5nIn0iIGhlaWdodD0iMTYiIHdpZHRoPSIxNSIvPjwvdGQ+PC90cj4KICAgIDx0cj48dGQgY29sc3Bhbj0zPgogICAgey9pZn0KICAgIDx0YWJsZSB7aWYgJG1hcC5MZWdlbmRQb3MgZXEgJzAnIG9yICRtYXAuTGVnZW5kUG9zIGVxICcxJ31pZD0icGhvdG9sZWdlbmQiIHtpZiAkbWFwLkV4cGFuZEFsYnVtTGVnZW5kfXN0eWxlPSJkaXNwbGF5OmJsb2NrOyJ7ZWxzZX1zdHlsZT0iZGlzcGxheTpub25lOyJ7L2lmfXsvaWZ9PgogICAge2lmICRtYXAuTGVnZW5kUG9zIGVxICcyJyBvciAkbWFwLkxlZ2VuZFBvcyBlcSAnMyd9PHRyPjx0ZD57Zy0+dGV4dCB0ZXh0PSJQaG90byBMZWdlbmQifTwvdGQ+ey9pZn0KICAgIHtmb3JlYWNoIGZyb209JG1hcC5hbGxtYXJrZXJzIGtleT1udW0gaXRlbT1pbWFnZWxpc3R9CiAgICB7Zm9yZWFjaCBmcm9tPSRpbWFnZWxpc3Qga2V5PW5hbWUgaXRlbT1pbWFnZXN9CiAgICAgICB7aWYgJG5hbWUgZXEgJG1hcC51c2VNYXJrZXJTZXR9CiAgICAgICB7Zm9yZWFjaCBmcm9tPSRpbWFnZXMgaXRlbT1pbWFnZSBrZXk9bnVtfQogICAgICAge2lmICRtYXAuUGhvdG9MZWdlbmRzLiRudW0gbmVxICIifQogICAgICAgICB7aWYgJG1hcC5MZWdlbmRQb3MgZXEgJzAnIG9yICRtYXAuTGVnZW5kUG9zIGVxICcxJ308dHI+ey9pZn0KICAgICAgICAge2Fzc2lnbiB2YXI9ImNvbG9ucG9zIiB2YWx1ZT0kaW1hZ2V8c3RycG9zOiI6In0KICAgICAgICAge2Fzc2lnbiB2YXI9Im5ld2ltYWdlIiB2YWx1ZT0kaW1hZ2V8c3Vic3RyOiRjb2xvbnBvcysyfQogICAgICAgICA8dGQ+PGlucHV0IG9uY2xpY2s9InRvZ2dsZW1hcmtlcnMoJ1B7JG51bX0nKSIgdmFsdWU9IjEiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJDUHskbnVtfSIgY2hlY2tlZD0iY2hlY2tlZCIgLz48L3RkPjx0ZCBpZD0iUHskbnVtfSI+eyRuZXdpbWFnZX08L3RkPjx0ZD57JG1hcC5QaG90b0xlZ2VuZHMuJG51bX08L3RkPgogICAgICAgICB7aWYgJG1hcC5MZWdlbmRQb3MgZXEgJzAnIG9yICRtYXAuTGVnZW5kUG9zIGVxICcxJ308L3RyPnsvaWZ9CiAgICAgICB7L2lmfQogICAgICAgey9mb3JlYWNofQogICAgICAgey9pZn0KICAgIHsvZm9yZWFjaH0KICAgIHsvZm9yZWFjaH0KICAgIDwvdGFibGU+CiAgICB7aWYgJG1hcC5MZWdlbmRQb3MgZXEgJzAnIG9yICRtYXAuTGVnZW5kUG9zIGVxICcxJ308L3RkPjwvdHI+PC90YWJsZT57L2lmfQogICAgey9pZn0KICAgIHtpZiBpc3NldCgkbWFwLnJlZ3JvdXBJdGVtcykgYW5kICRtYXAucmVncm91cEl0ZW1zIGVxICIxIn0KICAgIDxici8+PHRhYmxlIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPjx0ciBjbGFzcz0iZ2NCYWNrZ3JvdW5kMiIgc3R5bGU9ImN1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I2RmZGZkZjtib3JkZXItYm90dG9tOjFweCBzb2xpZDsiPjx0ZCBjb2xzcGFuPTIgd2lkdGg9MTAwJT57Zy0+dGV4dCB0ZXh0PSJHcm91cGluZyJ9PC90ZD48L3RyPgogICAgPHRyPjx0ZD4KICAgIHtpZiAhaXNzZXQoJG1hcC5pc0lFKSBvciAoaXNzZXQoJG1hcC5pc0lFKSBhbmQgJG1hcC5pc0lFIGVxIGZhbHNlKX0KICAgIDxpbWcgYWx0PSJub25lIiBzcmM9IntnLT51cmwgaHJlZj0ibW9kdWxlcy9tYXAvaW1hZ2VzL211bHRpL3skbWFwLnJlZ3JvdXBJY29ufS5wbmcifSIvPgogICAge2Vsc2V9CiAgICA8aW1nIGFsdD0ibm9uZSIgc3JjPSJ7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL2ltYWdlcy9ibGFuay5naWYifSIgc3R5bGU9ImZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSd7Zy0+dXJsIGhyZWY9Im1vZHVsZXMvbWFwL2ltYWdlcy9tdWx0aS8ifXskbWFwLnJlZ3JvdXBJY29ufS5wbmcnKTsiLz4KICAgIHsvaWZ9CiAgICA8L3RkPjx0ZD57Zy0+dGV4dCB0ZXh0PSJXaGVuIHlvdSBjbGljayBvbiB0aGlzIGljb24sIGl0IGF1dG9tYXRpY2FsbHkgem9vbXMgaW4gdG8gc2hvdyB0aGUgaWNvbnMgdGhhdCBhcmUgUmVncm91cGVkIHRvZ2V0aGVyIn08L3RkPjwvdHI+CiAgICA8L3RhYmxlPgogICAgey9pZn0KICA8L2Rpdj4KPC9kaXY+CnsvaWZ9');
expand_3537250845($outputDir, 'templates/blocks/MiniMap.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQp7KiBTZXQgZGVmYXVsdHMgKn0Ke2lmICFpc3NldCgkaXRlbSl9e2Fzc2lnbiB2YXI9aXRlbSB2YWx1ZT0kdGhlbWUuaXRlbX17L2lmfQp7aWYgIWlzc2V0KCRtYXBIZWlnaHQpfXthc3NpZ24gdmFyPW1hcEhlaWdodCB2YWx1ZT0xNTB9ey9pZn0Ke2lmICFpc3NldCgkbWFwV2lkdGgpfXthc3NpZ24gdmFyPW1hcFdpZHRoIHZhbHVlPSIxMDAlIn17L2lmfQp7aWYgIWlzc2V0KCRtYXBUeXBlKX17YXNzaWduIHZhcj1tYXBUeXBlIHZhbHVlPTN9ey9pZn0Ke2lmICFpc3NldCgkc2hvd0NvbnRyb2xzKX17YXNzaWduIHZhcj1zaG93Q29udHJvbHMgdmFsdWU9ZmFsc2V9ey9pZn0KCntnLT5jYWxsYmFjayB0eXBlPSJtYXAuTWluaU1hcCIgaXRlbUlkPSRpdGVtLmlkIGFsYnVtTWFya2VyPSRhbGJ1bU1hcmtlcnxkZWZhdWx0OnRydWUgYWxidW1JdGVtcz0kYWxidW1JdGVtc3xkZWZhdWx0OjIgdXNlUGFyZW50Q29vcmRzPSR1c2VQYXJlbnRDb29yZHN8ZGVmYXVsdDpmYWxzZX0Ke2lmICFlbXB0eSgkYmxvY2subWFwLk1pbmlNYXApIGFuZCAkYmxvY2subWFwLk1pbmlNYXAuQVBJS2V5IG5lcSAnJyBhbmQgIShlbXB0eSgkYmxvY2subWFwLk1pbmlNYXAubWFwQ2VudGVyKSBhbmQgZW1wdHkoJGJsb2NrLm1hcC5NaW5pTWFwLm1hcmtlcnMpKX0KPGRpdiBjbGFzcz0ieyRjbGFzc30iIHN0eWxlPSJjbGVhcjpib3RoOyI+CntpZiAkYmxvY2subWFwLk1pbmlNYXAuYmxvY2tOdW0gPT0gMX17KiBPbmx5IGluY2x1ZGUgR29vZ2xlIE1hcHMgc2NyaXB0IG9uY2UgKn0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9maWxlPWFwaSZhbXA7dj0yLngmYW1wO2tleT17JGJsb2NrLm1hcC5NaW5pTWFwLkFQSUtleX0iCgl0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pgp7L2lmfQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+IAovLzwhW0NEQVRBWwp7KiBBcHBlbmQgdGhlIGJsb2NrTnVtIHRvIHRoZSBmdW5jdGlvbiBuYW1lIHRvIG1ha2UgaXQgdW5pcXVlIGluIHRoZSBkb2N1bWVudCAqfQpmdW5jdGlvbiBsb2FkX21hcF97JGJsb2NrLm1hcC5NaW5pTWFwLmJsb2NrTnVtfSgpIHtsZGVsaW19IAppZiAoR0Jyb3dzZXJJc0NvbXBhdGlibGUoKSkge2xkZWxpbX0KICAgIHZhciBtYXAgPSBuZXcgR01hcDIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1pbmltYXAteyRibG9jay5tYXAuTWluaU1hcC5ibG9ja051bX0iKSwKICAgIAl7bGRlbGltfW1hcFR5cGVzOlt7aWYgJG1hcFR5cGUgZXEgMX1HX05PUk1BTF9NQVB7ZWxzZWlmICRtYXBUeXBlIGVxIDJ9R19TQVRFTExJVEVfTUFQe2Vsc2V9R19IWUJSSURfTUFQey9pZn1de3JkZWxpbX0pOwogICAge2lmICFlbXB0eSgkYmxvY2subWFwLk1pbmlNYXAubWFwQ2VudGVyKX17KiBhbHJlYWR5IGhhdmUgYSB2YWxpZCBtYXBDZW50ZXIgKn0gCiAgICBtYXAuc2V0Q2VudGVyKG5ldyBHTGF0TG5nKHskYmxvY2subWFwLk1pbmlNYXAubWFwQ2VudGVyfSksIHskYmxvY2subWFwLk1pbmlNYXAubWFwWm9vbX0pOwogICAge2Vsc2V9CiAgICBtYXAuc2V0Q2VudGVyKG5ldyBHTGF0TG5nKDAsMCkpO3sqIFdpbGwgcmVzZXQgdG8gYXV0byBjZW50ZXIgYWZ0ZXIgYWRkaW5nIG1hcmtlcnMgKn0KICAgIHsvaWZ9CiAgICB7KiBTZXQgdXAgYWxsIHRoZSBpY29ucyBmb3IgdGhlIG1hcmtlcnMgKn0KICAgIHtmb3JlYWNoIGZyb209JGJsb2NrLm1hcC5NaW5pTWFwLm1hcmtlckljb25zIGtleT1pY29uTmFtZSBpdGVtPWljb259IAogICAgdmFyIHskaWNvbk5hbWV9ID0gbmV3IEdJY29uKCk7CiAgICB7JGljb25OYW1lfS5pbWFnZSA9ICJ7JGljb24uaW1nVXJsfSI7CiAgICB7JGljb25OYW1lfS5zaGFkb3cgPSAieyRpY29uLnNoYWRvd1VybH0iOwogICAgeyRpY29uTmFtZX0uaWNvblNpemUgPSBuZXcgR1NpemUoeyRpY29uLndpZHRofSwgeyRpY29uLmhlaWdodH0pOwogICAgeyRpY29uTmFtZX0uc2hhZG93U2l6ZSA9IG5ldyBHU2l6ZSh7JGljb24ud2lkdGh9KzE1LCB7JGljb24uaGVpZ2h0fSk7CiAgICB7JGljb25OYW1lfS5pY29uQW5jaG9yID0gbmV3IEdQb2ludCh7JGljb24ud2lkdGh9LzIsIHskaWNvbi5oZWlnaHR9KTsKICAgIHsvZm9yZWFjaH0KICAgIHsqIE5vdyBjcmVhdGUgYW5kIGFkZCB0aGUgbWFya2VycyB0byB0aGUgbWFwICp9CiAgICB2YXIgbWFya2VyQ29vcmRzOwogICAge2lmIGVtcHR5KCRibG9jay5tYXAuTWluaU1hcC5tYXBDZW50ZXIpfQogICAgdmFyIGF1dG9DZW50ZXJCb3VuZHMgPSBuZXcgR0xhdExuZ0JvdW5kcygpOwogICAgdmFyIG1heFpvb20gPSAwOwogICAgey9pZn0KICAgIHtmb3JlYWNoIGZyb209JGJsb2NrLm1hcC5NaW5pTWFwLm1hcmtlcnMgaXRlbT1tYXJrZXJ9CiAgICBtYXJrZXJDb29yZHMgPSBuZXcgR0xhdExuZyh7JG1hcmtlci5HUFN9KTsKICAgIHtpZiBlbXB0eSgkYmxvY2subWFwLk1pbmlNYXAubWFwQ2VudGVyKX0KICAgIHtpZiBpc3NldCgkbWFya2VyLlpvb21MZXZlbCl9CiAgICB7KiBHZXQgdGhlIG1heGltdW0gem9vbSB0byBwcmV2ZW50IGEgdXNlbGVzcyBzdXBlci16b29tZWQtaW4gdmlldy4gKn0KICAgIG1heFpvb20gPSBNYXRoLm1heChtYXhab29tLCB7JG1hcmtlci5ab29tTGV2ZWx9KTsKICAgIHsvaWZ9CiAgICBhdXRvQ2VudGVyQm91bmRzLmV4dGVuZChtYXJrZXJDb29yZHMpOwogICAgey9pZn0KICAgIG1hcC5hZGRPdmVybGF5KG5ldyBHTWFya2VyKG1hcmtlckNvb3Jkcyx7bGRlbGltfWNsaWNrYWJsZTpmYWxzZSx0aXRsZToieyRtYXJrZXIudGl0bGV8ZXNjYXBlOidqYXZhc2NyaXB0J30iLGljb246eyRtYXJrZXIuaWNvbn17cmRlbGltfSkpOwogICAgey9mb3JlYWNofQogICAge2lmIGVtcHR5KCRibG9jay5tYXAuTWluaU1hcC5tYXBDZW50ZXIpfXsqIEF1dG8gY2VudGVyIGFuZCB6b29tIGJhc2VkIG9uIG1hcmtlcnMgdG8gYmUgc2hvd24gKn0KICAgIG1hcC5zZXRDZW50ZXIoYXV0b0NlbnRlckJvdW5kcy5nZXRDZW50ZXIoKSwgTWF0aC5taW4obWFwLmdldEJvdW5kc1pvb21MZXZlbChhdXRvQ2VudGVyQm91bmRzKSwgbWF4Wm9vbSkpOwogICAgey9pZn0KICAgIHtpZiAkc2hvd0NvbnRyb2xzfQogICAgbWFwLmFkZENvbnRyb2wobmV3IEdTbWFsbE1hcENvbnRyb2woZmFsc2UsIGZhbHNlKSk7CiAgICB7ZWxzZX0KICAgIG1hcC5kaXNhYmxlRHJhZ2dpbmcoKTsKICAgIHsvaWZ9CntyZGVsaW19CntyZGVsaW19Ci8vPCEtLSBXZWlyZCB3b3JrYXJvdW5kIG9uTG9hZCBoYWNrIGZvciBJRTsgTW96aWxsYSBkb2Vzbid0IG5lZWQgdGhpcyBleHRyYSBjb2RlIC0tPgpmdW5jdGlvbiBpbml0X21hcF97JGJsb2NrLm1hcC5NaW5pTWFwLmJsb2NrTnVtfSgpIHtsZGVsaW19CmlmIChhcmd1bWVudHMuY2FsbGVlLmRvbmUpIHJldHVybjsgCmFyZ3VtZW50cy5jYWxsZWUuZG9uZSA9IHRydWU7IApsb2FkX21hcF97JGJsb2NrLm1hcC5NaW5pTWFwLmJsb2NrTnVtfSgpOyAKe3JkZWxpbX0KaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtsZGVsaW19Ci8qIGZvciBTYWZhcmkvTW96aWxsYSAqLwp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGluaXRfbWFwX3skYmxvY2subWFwLk1pbmlNYXAuYmxvY2tOdW19LCBmYWxzZSk7CndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCBHVW5sb2FkLCBmYWxzZSk7CntyZGVsaW19IGVsc2UgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkge2xkZWxpbX0KLyogZm9yIEludGVybmV0IEV4cGxvcmVyICovCndpbmRvdy5hdHRhY2hFdmVudCgnb25sb2FkJywgaW5pdF9tYXBfeyRibG9jay5tYXAuTWluaU1hcC5ibG9ja051bX0pOwp3aW5kb3cuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgR1VubG9hZCk7CntyZGVsaW19IGVsc2Uge2xkZWxpbX0KLyogZm9yIG90aGVyIGJyb3dzZXJzICovCnZhciBvbGRvbmxvYWR7JGJsb2NrLm1hcC5NaW5pTWFwLmJsb2NrTnVtfSA9IHdpbmRvdy5vbmxvYWQ7CnZhciBvbGR1bmxvYWQgPSB3aW5kb3cub251bmxvYWQ7CmlmICh0eXBlb2Ygd2luZG93Lm9ubG9hZCAhPSAnZnVuY3Rpb24nKSB7bGRlbGltfQogICAgd2luZG93Lm9ubG9hZCA9IGluaXRfbWFwX3skYmxvY2subWFwLk1pbmlNYXAuYmxvY2tOdW19Owp7cmRlbGltfSBlbHNlIHtsZGVsaW19CiAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7bGRlbGltfQogICAgICAgIGlmIChvbGRvbmxvYWR7JGJsb2NrLm1hcC5NaW5pTWFwLmJsb2NrTnVtfSkge2xkZWxpbX0KICAgICAgICAgICAgb2xkb25sb2FkeyRibG9jay5tYXAuTWluaU1hcC5ibG9ja051bX0oKTsKICAgICAgICB7cmRlbGltfQogICAgICAgIGluaXRfbWFwX3skYmxvY2subWFwLk1pbmlNYXAuYmxvY2tOdW19KCk7CiAgICB7cmRlbGltfQp7cmRlbGltfQp7aWYgJGJsb2NrLm1hcC5NaW5pTWFwLmJsb2NrTnVtID09IDF9eyogT25seSBuZWVkIHRvIGNhbGwgR1VubG9hZCBvbmNlLCBub3QgZm9yIGV2ZXJ5IGJsb2NrICp9CmlmICh0eXBlb2Ygd2luZG93Lm9udW5sb2FkICE9ICdmdW5jdGlvbicpIHtsZGVsaW19CiAgICB3aW5kb3cub251bmxvYWQgPSBHVW5sb2FkOwp7cmRlbGltfSBlbHNlIHtsZGVsaW19CiAgICB3aW5kb3cub251bmxvYWQgPSBmdW5jdGlvbigpIHtsZGVsaW19CiAgICAgICAgaWYgKG9sZG9udW5sb2FkKSB7bGRlbGltfQogICAgICAgICAgICBvbGRvbnVubG9hZCgpOwogICAgICAgIHtyZGVsaW19CiAgICAgICAgR1VubG9hZCgpOwogICAge3JkZWxpbX0Ke3JkZWxpbX0Key9pZn0Ke3JkZWxpbX0KLy9dXT4KPC9zY3JpcHQ+CjxkaXYgc3R5bGU9IndpZHRoOnskbWFwV2lkdGh9OyI+CjxkaXY+PGgzPntnLT50ZXh0IHRleHQ9IiVzIExvY2F0aW9uIE1hcCIgYXJnMT0kYmxvY2subWFwLk1pbmlNYXAuSXRlbVR5cGV9PC9oMz48L2Rpdj4KPGRpdiBpZD0ibWluaW1hcC17JGJsb2NrLm1hcC5NaW5pTWFwLmJsb2NrTnVtfSIgY2xhc3M9Ik1pbmlHTWFwIgogICAgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7aGVpZ2h0OnskbWFwSGVpZ2h0fXB4Ij48L2Rpdj4KPC9kaXY+CjwvZGl2Pgp7L2lmfQ==');
expand_3537250845($outputDir, 'templates/blocks/Thumb.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjUzICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQp7aWYgJG1hcC5UaHVtYkJhclBvcyBlcSAiMSIgb3IgJG1hcC5UaHVtYkJhclBvcyBlcSAiMiJ9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZG9jdW1lbnQud3JpdGUoJzxkaXYgaWQ9InRodW1icyIgY2xhc3M9InRodW1iYmFyIiBzdHlsZT0ie2lmICRtYXAuVGh1bWJCYXJQb3MgZXEgIjEifW1hcmdpbi1ib3R0b206e2Vsc2V9bWFyZ2luLXRvcDp7L2lmfTRweDt3aWR0aDogJytteVdpZHRoKydweDsiPjxcL2Rpdj4nKTsKPC9zY3JpcHQ+CnsvaWZ9CntpZiAkbWFwLlRodW1iQmFyUG9zIGVxICIzIiBvciAkbWFwLlRodW1iQmFyUG9zIGVxICI0In0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpkb2N1bWVudC53cml0ZSgnPGRpdiBpZD0idGh1bWJzIiBjbGFzcz0idGh1bWJiYXIgZ2NCYWNrZ3JvdW5kMSIgc3R5bGU9IntpZiAkbWFwLlRodW1iQmFyUG9zIGVxICIzIn1wb3NpdGlvbjphYnNvbHV0ZTtyaWdodDp7aWYgKCRtYXAuTGVnZW5kUG9zIGVxICcyJyBhbmQgJG1hcC5MZWdlbmRGZWF0dXJlIG5lcSAnMCcgYW5kICgkbWFwLkFsYnVtTGVnZW5kIG9yICRtYXAuUGhvdG9MZWdlbmQgb3IgJG1hcC5yZWdyb3VwSXRlbXMpKSBvciAoJG1hcC5GaWx0ZXJGZWF0dXJlIG5lcSAnMCcgYW5kIGlzc2V0KCRtYXAuU2hvd0ZpbHRlcnMpIGFuZCAkbWFwLlNob3dGaWx0ZXJzIGVxICcyJyl9MjA1e2Vsc2V9MTB7L2lmfXB4O21hcmdpbi1sZWZ0OjRweDt7L2lmfWhlaWdodDogJytteUhlaWdodCsncHg7Ij48XC9kaXY+Jyk7Cjwvc2NyaXB0Pgp7L2lmfQ==');
expand_3537250845($outputDir, 'templates/blocks/blocks.inc', 'PD9waHAKJGJsb2NrcyA9IGFycmF5KAogICAgJ21hcCcgPT4gYXJyYXkoCgknZGVzY3JpcHRpb24nID0+ICRnYWxsZXJ5LT5pMThuKCdHb29nbGUgTWFwIEZpbHRlcnMgKE1hcCBWaWV3IG9ubHkpJykpLAogICAgJ0xlZ2VuZCcgPT4gYXJyYXkgKAoJJ2Rlc2NyaXB0aW9uJyA9PiAkZ2FsbGVyeS0+aTE4bignR29vZ2xlIE1hcCBNYXJrZXIgTGVnZW5kIChNYXAgVmlldyBvbmx5KScpKSwKICAgICdUaHVtYicgPT4gYXJyYXkgKAoJJ2Rlc2NyaXB0aW9uJyA9PiAkZ2FsbGVyeS0+aTE4bignR29vZ2xlIE1hcCBUaHVtYm5haWwgQmFyIChNYXAgVmlldyBvbmx5KScpKSwKICAgICdJdGVtQ29vcmRzJyA9PiBhcnJheSgKCSdkZXNjcmlwdGlvbicgPT4gJGdhbGxlcnktPmkxOG4oJ0l0ZW0gTWFwIGNvb3JkaW5hdGVzJyksCgkndmFycycgPT4gYXJyYXkoCgkgICAgJ2Nvb3JkU3R5bGUnID0+IGFycmF5KAoJICAgIAknZGVzY3JpcHRpb24nID0+ICRnYWxsZXJ5LT5pMThuKCdDb29yZGluYXRlIGRpc3BsYXkgc3R5bGUnKSwKCSAgICAJJ3R5cGUnID0+ICdjaG9pY2UnLAoJICAgIAknZGVmYXVsdCcgPT4gJzEnLAoJICAgIAknY2hvaWNlcycgPT4gYXJyYXkoCgkJICAgICcxJyA9PiAkZ2FsbGVyeS0+aTE4bignRGVjaW1hbCBEZWdyZWVzJyksCgkJICAgICcyJyA9PiAkZ2FsbGVyeS0+aTE4bignRGVncmVlcyBEZWNpbWFsIE1pbnV0ZXMnKSwKCQkgICAgJzMnID0+ICRnYWxsZXJ5LT5pMThuKCdEZWdyZWVzIE1pbnV0ZXMgU2Vjb25kcycpKSkpKSwKICAgICdNaW5pTWFwJyA9PiBhcnJheSgKCSdkZXNjcmlwdGlvbicgPT4gJGdhbGxlcnktPmkxOG4oJ01pbmkgR29vZ2xlIE1hcCcpLAoJJ3ZhcnMnID0+IGFycmF5KAoJICAgICdtYXBIZWlnaHQnID0+IGFycmF5KAoJCSdkZXNjcmlwdGlvbicgPT4gJGdhbGxlcnktPmkxOG4oJ01hcCBoZWlnaHQgKHBpeGVscyknKSwKCQkndHlwZScgPT4gJ3RleHQnLAoJCSdkZWZhdWx0JyA9PiAnMTUwJyksCgkgICAgJ21hcFdpZHRoJyA9PiBhcnJheSgKCQknZGVzY3JpcHRpb24nID0+ICRnYWxsZXJ5LT5pMThuKCdNYXAgd2lkdGggKCUgb3IgcHgpJyksCgkJJ3R5cGUnID0+ICd0ZXh0JywKCQknZGVmYXVsdCcgPT4gJzEwMCUnKSwKCSAgICAnbWFwVHlwZScgPT4gYXJyYXkoCgkJJ2Rlc2NyaXB0aW9uJyA9PiAkZ2FsbGVyeS0+aTE4bignTWFwIHR5cGUnKSwKCQkvKmFycmF5KCd0ZXh0JyA9PiAnTWFwIHR5cGUnLCAnaGludCcgPT4gJ1N0eWxlIG9mIEdvb2dsZSBtYXAnKSovCgkJJ3R5cGUnID0+ICdjaG9pY2UnLAoJCSdkZWZhdWx0JyA9PiAnMycsCgkJJ2Nob2ljZXMnID0+IGFycmF5KAoJCSAgICAnMScgPT4gJGdhbGxlcnktPmkxOG4oJ01hcCcpLAoJCSAgICAvKmFycmF5KCd0ZXh0JyA9PiAnTWFwJywgJ2hpbnQnID0+ICdNYXAgc3R5bGUnKSovCgkJICAgICcyJyA9PiAkZ2FsbGVyeS0+aTE4bignU2F0ZWxsaXRlJyksCgkJICAgIC8qYXJyYXkoJ3RleHQnID0+ICdTYXRlbGxpdGUnLCAnaGludCcgPT4gJ01hcCBzdHlsZScpKi8KCQkgICAgJzMnID0+ICRnYWxsZXJ5LT5pMThuKCdIeWJyaWQnKSkpLAoJCSAgICAvKmFycmF5KCd0ZXh0JyA9PiAnSHlicmlkJywgJ2hpbnQnID0+ICdNYXAgc3R5bGUnKSovCgkgICAgJ3Nob3dDb250cm9scycgPT4gYXJyYXkoCgkgICAgCSdkZXNjcmlwdGlvbicgPT4gJGdhbGxlcnktPmkxOG4oJ0VuYWJsZSBwYW4gYW5kIHpvb20gY29udHJvbHMnKSwKCSAgICAJJ3R5cGUnID0+ICdib29sZWFuJywKCQknZGVmYXVsdCcgPT4gJ2ZhbHNlJyksCgkgICAgJ3VzZVBhcmVudENvb3JkcycgPT4gYXJyYXkoCgkgICAgCSdkZXNjcmlwdGlvbicgPT4gJGdhbGxlcnktPmkxOG4oJ1VzZSBwYXJlbnQgYWxidW0gY29vcmRpbmF0ZXMgaWYgaXRlbSBoYXMgbm9uZScpLAoJICAgIAkndHlwZScgPT4gJ2Jvb2xlYW4nLAoJICAgIAknZGVmYXVsdCcgPT4gJ2ZhbHNlJyksCgkgICAgJ2FsYnVtTWFya2VyJyA9PiBhcnJheSgKCSAgICAJJ2Rlc2NyaXB0aW9uJyA9PiAkZ2FsbGVyeS0+aTE4bignQWxidW0gcGFnZTogU2hvdyBhbGJ1bSBtYXJrZXInKSwKCSAgICAJJ3R5cGUnID0+ICdib29sZWFuJywKCQknZGVmYXVsdCcgPT4gJ3RydWUnKSwKCSAgICAnYWxidW1JdGVtcycgPT4gYXJyYXkoCgkJJ2Rlc2NyaXB0aW9uJyA9PiAkZ2FsbGVyeS0+aTE4bignQWxidW0gcGFnZTogU2hvdyBpdGVtIG1hcmtlcnMnKSwKCQkndHlwZScgPT4gJ2Nob2ljZScsCgkgICAgCSdkZWZhdWx0JyA9PiAnMicsCgkgICAgCSdjaG9pY2VzJyA9PiBhcnJheSgKCQkgICAgJzEnID0+ICRnYWxsZXJ5LT5pMThuKCdOb25lJyksCgkJICAgICcyJyA9PiAkZ2FsbGVyeS0+aTE4bignU2hvdyBpdGVtcyBpbiBjdXJyZW50IGFsYnVtIGxldmVsJyksCgkJICAgICczJyA9PiAkZ2FsbGVyeS0+aTE4bignU2hvdyBhbGwgYWxidW0gc3ViaXRlbXMnKSkpKSkpOwo/Pgo=');
expand_3537250845($outputDir, 'templates/blocks/map.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjUzICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQoKe2ctPmNhbGxiYWNrIHR5cGU9Im1hcC5Mb2FkRmlsdGVycyJ9CntpZiAhZW1wdHkoJGJsb2NrLm1hcC5Mb2FkRmlsdGVycyl9CjxkaXYgY2xhc3M9InskY2xhc3N9IiB7aWYgJG1hcC5TaG93RmlsdGVycyBlcSAyfXN0eWxlPSJyaWdodDoxMHB4O3tpZiAkbWFwLlRodW1iQmFyUG9zIGVxICcxJ31wb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LXskbWFwLlRodW1iSGVpZ2h0fXB4O3svaWZ9InsvaWZ9PgogIHtpZiBpc3NldCgkbWFwLlNob3dGaWx0ZXJzKSBhbmQgKCRtYXAuU2hvd0ZpbHRlcnMgZXEgMyBvciAkbWFwLlNob3dGaWx0ZXJzIGVxIDQpfQogIDx0YWJsZSBib3JkZXI9MCB3aWR0aD00MDBweD48dHI+PHRkIHdpZHRoPTIwMHB4PgogIHsvaWZ9CiAgPGgzPntnLT50ZXh0IHRleHQ9IkFyZWEgdG8gc2hvdyBvbiB0aGUgTWFwIn08L2gzPgogIHtpZiBpc3NldCgkbWFwLlNob3dGaWx0ZXJzKSBhbmQgKCRtYXAuU2hvd0ZpbHRlcnMgZXEgMyBvciAkbWFwLlNob3dGaWx0ZXJzIGVxIDQpfTwvdGQ+PHRkIHdpZHRoPTIwMHB4PnsvaWZ9CiAgICA8c2VsZWN0IHN0eWxlPSJ3aWR0aDo3NSU7IiBvbmNoYW5nZT0ie2xpdGVyYWx9aWYgKHRoaXMudmFsdWUpIHsgbmV3TG9jYXRpb24gPSB0aGlzLnZhbHVlOyB0aGlzLm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlOyBsb2NhdGlvbi5ocmVmPSBuZXdMb2NhdGlvbjsgfXsvbGl0ZXJhbH0iPgogICAge2ZvcmVhY2ggaXRlbT1vcHRpb24gZnJvbT0kYmxvY2subWFwLkxvYWRGaWx0ZXJzLmZpbHRlcnN9CiAgICAgICA8b3B0aW9uIGxhYmVsPSJ7JG9wdGlvbi5uYW1lfSIge2lmICRvcHRpb24ucGFyYW1zIG5lcSAnJ312YWx1ZT0ie2ctPnVybCBwYXJhbXM9JG9wdGlvbi5wYXJhbXN9InsvaWZ9IHtpZiAkb3B0aW9uLm5hbWUgZXEgJGJsb2NrLm1hcC5Mb2FkRmlsdGVycy5maWx0ZXJPbn1zZWxlY3RlZHsvaWZ9Pnskb3B0aW9uLm5hbWV9PC9vcHRpb24+CiAgICB7L2ZvcmVhY2h9CiAgPC9zZWxlY3Q+CiAge2lmIGlzc2V0KCRtYXAuU2hvd0ZpbHRlcnMpIGFuZCAoJG1hcC5TaG93RmlsdGVycyBlcSAzIG9yICRtYXAuU2hvd0ZpbHRlcnMgZXEgNCl9PC90ZD48L3RyPjwvdGFibGU+ey9pZn0KPC9kaXY+CnsvaWZ9');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/Center.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAF2SURBVHjarFS9SkMxGE0uPoDi4tC7FgSfoe1Q7yLddOmmguATCYXiA3gHoZNXh9pnuCh0bYdu9QmM54QvGGLSODRwuPk538n5cvNFq+HNs/ptn8AcaMzr1KhE0+e3Gp8KGACnbv7A47wDNURWIJ8AZxh3gQ5wBGyBNbAEWvBewPlA/xLo203EGYUeQfgCoYc+Uap0WwEL8BfgH6J/TcFCUqtF6AL9cSiEtbtAjOtj8hnHeOpQbC6p0c3Iuv1fI2/EOMZTh2INz0hS07scRRyS35P4Rhtj+HeGGFzFtvcFwJskXD6B91bIoJsT8IUiDm28E+sE92iScsT5iEMb79J8oHBkx5wjt/6NtXt3aXkhj3MOnOOIs62f5jo8s5Sj8Aj8eCe2zKWW+as2vpCibaVEVMphwpErrZY6dFaBtGGtMT7lMOHISI0yvqLYAKSSRYv+LBTc0cibSbGXVmefr4a7Gn1JoxYCDzT3nm3E0Z/3bC8v7Y8AAwDFAOHUFJ2LLgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/CenterBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/East.png', 'iVBORw0KGgoAAAANSUhEUgAAABEAAAATCAYAAAB2pebxAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACwSURBVHjaYmRwSdrAQD5Y8n/33DVMDJQBHRBBqSFqjK7JspQawgXEqpQaAgLyIEOuEFIFDDx/PNJSIEOuEjIE6O+NeAwSBRlyixg34zGIH2TIQ2I9j8MgbkZgYgMZtI6EMIAbCFPOAiSE8CjAGsho8r9BrpAn1jtYDACBryBD1CgwAAQ+ggzRpsAAEHjNBMtERAYiNvCMGsn+IaWGfAPi25QacgsYXo8pNQSceQECDADLJD7gsvcT9AAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/North.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC7SURBVHjaYvz//z8DCDC6JssCKVUglgdiKSAWBWJ+IOYGYlYg/g3EX4H4IxC/BuJnQPwQiG//3z33MdgMBpekECCtA8RqQMzFQDr4BsS3gPgKC5CIYaAMgBxgAMJMxKgGesOfGHVMxBpEjIFMhAwCRsxGaARtJGQgEzEGwQAhA5mINYgYA5lwacDnHVzyTAxUBIPXMFB22jD8vUlVw1hwiF8B4qvQogVUZr0DYiFoWQcqqrShxRYKAAgwAHpBO91k+3oeAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/SlideNotch.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAsSURBVHjaYvz//z8DDDC6Ji9jIBH83z03CsZmYqAiGDWMdMCIHJuUAoAAAwDcPQoH67Z9VQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/SlideSel.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAiSURBVHjaYmRwSfrPQCXAxEBFMGoY6YDx/3+qRSYDQIABAGGjBK/JjPHgAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/South.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC0SURBVHjaYmRwSdrAgAmuAPFVIL4FxA+B+B0QCwGxPBCrAbE2EOuga2JhwA50sCkmBJgYqAiGuGH/d8/1Hw0z/IYRCiNc8lgNY3RN3ohLA0gcJE+SN7EZiM8gsB4ceROrl/AZRFQEwAwgZBBRLiMFMDMoGf4B0v+AmA+IWckw4xu0uNrD+P//f5h3ZIGUKrTMkgJiUSDmB2JuqCW/gfgrEH8E4tdA/Axa1t0GhutjkBkAAQYAJ4Y7BrSL/YcAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/TypeBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/West.png', 'iVBORw0KGgoAAAANSUhEUgAAABEAAAATCAYAAAB2pebxAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC4SURBVHjaYvn//z8Do2tyCAMDQwwDmYAJSuswUACYgK6QBdJqFBkCxKpAzEWpIfIMFAKQIVK4JP/vnutPhBlXQIaI4jIAGF4biTDkKsgQfgoMAIFbIEO4KTAABB6yAAlW9DDAFxZYLHgHMuQ3ELPBFJDhEiGQd76i20RkrMCAPMiQj9icTIJBaiBDXuPyO5EGaYMMeUZCIGIDOiBDHlIj2d8G4m8UGQL092NQqqPUJeBMRIkhAAEGAMVsP4k7CLBnAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/ZoomIn.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADISURBVHjaYvz//z8DCDC6JisAKUUglgNiKSAWBWIhIOYBYjYg/gXEX4D4HRC/BuJnQPwIiO//3z33AdgMBpekcCCtA8RaUE2kApAl14D4CguQiGGgDIAcYADCTMSoBnrDhxh1TAxUBFQ1DBQBm0n1GjDmt5BkGLrBuAwY4mE24C4bvIaxYBF7DMq0QHwLiB8C8Usg/gzEvEAsDsTyQKwGLRxkcRl2G4gPA/FRYLp6hcWST1AMUrcHmO7EgLQ1ENsCsSpIAUCAAQDIBzIHpyZ8jQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/ZoomOut.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC3SURBVHjaYmRwSdrMAAG3gfgwEB/9v3vuKwYCgNE1WQxIWQOxLRCrgsWQDIOBx0B8BYhvAfFDIH4JxJ+BmBeIxYFYHojVgFgHiGWRNbJgsVQWij0ZSARMDFQEo4aRDlhwSQDTmg+eNLYFqziWdDYaAXQ0jJlByfAfkAZhITCfdPALiC8D8R7G////w6JbAUgpArEcEEsBsSjUAh4gZoNq+gLE74D4NRA/A+JHQHwfmIwegMwACDAAHI0omkKk5a0AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_Florida/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICdDZW50ZXIucG5nJzsKJG1hcFsnd2lkdGhDJ10gPSAnMTknOwokbWFwWydoZWlnaHRDJ10gPSAnMTknOwokbWFwWydwYWRUb3BDJ10gPSAnNDAnOwokbWFwWydwYWRMZWZ0QyddID0gJzI0JzsKCi8qIENlbnRlciBCYWNrZ3JvdW5kICovCiRtYXBbJ2ltYWdlQ2VudGVyQkcnXSA9ICdDZW50ZXJCRy5wbmcnOwokbWFwWyd3aWR0aENCRyddID0gJzU1JzsKJG1hcFsnaGVpZ2h0Q0JHJ10gPSAnNTUnOwokbWFwWydwYWRUb3BDQkcnXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnRDQkcnXSA9ICc3JzsKCi8qIE5vcnRoICovCiRtYXBbJ2ltYWdlTm9ydGgnXSA9ICdOb3J0aC5wbmcnOwokbWFwWyd3aWR0aE4nXSA9ICcxOSc7CiRtYXBbJ2hlaWdodE4nXSA9ICcxNyc7CiRtYXBbJ3BhZFRvcE4nXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnROJ10gPSAnMjQnOwoKLyogU291dGggKi8KJG1hcFsnaW1hZ2VTb3V0aCddID0gJ1NvdXRoLnBuZyc7CiRtYXBbJ3dpZHRoUyddID0gJzE5JzsKJG1hcFsnaGVpZ2h0UyddID0gJzE3JzsKJG1hcFsncGFkVG9wUyddID0gJzU5JzsKJG1hcFsncGFkTGVmdFMnXSA9ICcyNCc7CgovKiBFYXN0ICovCiRtYXBbJ2ltYWdlRWFzdCddID0gJ0Vhc3QucG5nJzsKJG1hcFsnd2lkdGhFJ10gPSAnMTcnOwokbWFwWydoZWlnaHRFJ10gPSAnMTknOwokbWFwWydwYWRUb3BFJ10gPSAnNDAnOwokbWFwWydwYWRMZWZ0RSddID0gJzQzJzsKCi8qIFdlc3QgKi8KJG1hcFsnaW1hZ2VXZXN0J10gPSAnV2VzdC5wbmcnOwokbWFwWyd3aWR0aFcnXSA9ICcxNyc7CiRtYXBbJ2hlaWdodFcnXSA9ICcxOSc7CiRtYXBbJ3BhZFRvcFcnXSA9ICc0MCc7CiRtYXBbJ3BhZExlZnRXJ10gPSAnNyc7CgovKiBab29tSW4gKi8KJG1hcFsnaW1hZ2VJbiddID0gJ1pvb21Jbi5wbmcnOwokbWFwWyd3aWR0aEluJ10gPSAnMTknOwokbWFwWydoZWlnaHRJbiddID0gJzE2JzsKJG1hcFsncGFkVG9wSW4nXSA9ICc4MCc7CiRtYXBbJ3BhZExlZnRJbiddID0gJzI1JzsKCi8qIFpvb21PdXQgKi8KJG1hcFsnaW1hZ2VPdXQnXSA9ICdab29tT3V0LnBuZyc7CiRtYXBbJ3dpZHRoT3V0J10gPSAnMTknOwokbWFwWydoZWlnaHRPdXQnXSA9ICcxNic7CiRtYXBbJ3BhZFRvcE91dCddID0gJzIyOCc7CiRtYXBbJ3BhZExlZnRPdXQnXSA9ICcyNSc7CgovKiBTbGlkZU5vdGNoICovCiRtYXBbJ2ltYWdlU2xpZGVOb3RjaCddID0gJ1NsaWRlTm90Y2gucG5nJzsKJG1hcFsnd2lkdGhTbGlkZU5vdGNoJ10gPSAnMTknOwokbWFwWydoZWlnaHRTbGlkZU5vdGNoJ10gPSAnNyc7CgovKiBTbGlkZVNlbCAqLwokbWFwWydpbWFnZVNsaWRlU2VsJ10gPSAnU2xpZGVTZWwucG5nJzsKJG1hcFsnd2lkdGhTbGlkZVNlbCddID0gJzE5JzsKJG1hcFsnaGVpZ2h0U2xpZGVTZWwnXSA9ICc3JzsKCi8qIHpvb21Db250cm9sIHBvc2l0aW9uICovCiRtYXBbJ3BhZFRvcHpvb21Db250cm9sJ10gPSAnOTUnOwokbWFwWydwYWRMZWZ0em9vbUNvbnRyb2wnXSA9ICcyNSc7CgovKiBtYXBUeXBlcyAqLwokbWFwWydsaW5rVHlwZUNvbG9yJ10gPSAnRkZGRkZGJzsKJG1hcFsnaW1hZ2VUeXBlQkcnXSA9ICdUeXBlQkcucG5nJzsKCi8qIG1hcFR5cGVNYXAgKi8KJG1hcFsnd2lkdGhUeXBlTWFwJ10gPSAnNjUnOwokbWFwWydwYWRUb3BUeXBlTWFwJ10gPSAnMjYwJzsKJG1hcFsncGFkTGVmdFR5cGVNYXAnXSA9ICcwJzsKCi8qIG1hcFR5cGVTYXQgKi8KJG1hcFsnd2lkdGhUeXBlU2F0J10gPSAnNjUnOwokbWFwWydwYWRUb3BUeXBlU2F0J10gPSAnMjgwJzsKJG1hcFsncGFkTGVmdFR5cGVTYXQnXSA9ICcwJzsKCi8qIG1hcFR5cGVIeWIgKi8KJG1hcFsnd2lkdGhUeXBlSHliJ10gPSAnNjUnOwokbWFwWydwYWRUb3BUeXBlSHliJ10gPSAnMzAwJzsKJG1hcFsncGFkTGVmdFR5cGVIeWInXSA9ICcwJzsKCi8qIEd4TWFnbmlmaWVyIGxvY2F0aW9uICovCiRtYXBbJ0d4UG9zWSddID0gJzEwJzsKJG1hcFsnR3hQb3NYJ10gPSAnNCc7Cj8+Cg==');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/Center.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAF2SURBVHjarFS9SkMxGE0uPoDi4tC7FgSfoe1Q7yLddOmmguATCYXiA3gHoZNXh9pnuCh0bYdu9QmM54QvGGLSODRwuPk538n5cvNFq+HNs/ptn8AcaMzr1KhE0+e3Gp8KGACnbv7A47wDNURWIJ8AZxh3gQ5wBGyBNbAEWvBewPlA/xLo203EGYUeQfgCoYc+Uap0WwEL8BfgH6J/TcFCUqtF6AL9cSiEtbtAjOtj8hnHeOpQbC6p0c3Iuv1fI2/EOMZTh2INz0hS07scRRyS35P4Rhtj+HeGGFzFtvcFwJskXD6B91bIoJsT8IUiDm28E+sE92iScsT5iEMb79J8oHBkx5wjt/6NtXt3aXkhj3MOnOOIs62f5jo8s5Sj8Aj8eCe2zKWW+as2vpCibaVEVMphwpErrZY6dFaBtGGtMT7lMOHISI0yvqLYAKSSRYv+LBTc0cibSbGXVmefr4a7Gn1JoxYCDzT3nm3E0Z/3bC8v7Y8AAwDFAOHUFJ2LLgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/CenterBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/East.png', 'iVBORw0KGgoAAAANSUhEUgAAABEAAAATCAYAAAB2pebxAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACwSURBVHjaYmRwSdrAQD5Y8n/33DVMDJQBHRBBqSFqjK7JspQawgXEqpQaAgLyIEOuEFIFDDx/PNJSIEOuEjIE6O+NeAwSBRlyixg34zGIH2TIQ2I9j8MgbkZgYgMZtI6EMIAbCFPOAiSE8CjAGsho8r9BrpAn1jtYDACBryBD1CgwAAQ+ggzRpsAAEHjNBMtERAYiNvCMGsn+IaWGfAPi25QacgsYXo8pNQSceQECDADLJD7gsvcT9AAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/North.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC7SURBVHjaYvz//z8DCDC6JssCKVUglgdiKSAWBWJ+IOYGYlYg/g3EX4H4IxC/BuJnQPwQiG//3z33MdgMBpekECCtA8RqQMzFQDr4BsS3gPgKC5CIYaAMgBxgAMJMxKgGesOfGHVMxBpEjIFMhAwCRsxGaARtJGQgEzEGwQAhA5mINYgYA5lwacDnHVzyTAxUBIPXMFB22jD8vUlVw1hwiF8B4qvQogVUZr0DYiFoWQcqqrShxRYKAAgwAHpBO91k+3oeAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/SlideNotch.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAsSURBVHjaYvz//z8DDDC6Ji9jIBH83z03CsZmYqAiGDWMdMCIHJuUAoAAAwDcPQoH67Z9VQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/SlideSel.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAiSURBVHjaYmRwSfrPQCXAxEBFMGoY6YDx/3+qRSYDQIABAGGjBK/JjPHgAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/South.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA7UlEQVR42mJkcEnawIAJrgDxVSC+BcQPgfgdEAsBsTwQqwGxNhDroGsCCCAWBuxAB5tiQgAggJgYqAgAAoiqhgEEEFUNAwggogz7v3uuPzHqAAKIqi4DCCCqGgYQQFQ1DCCAmMgJI1zyAAGE1TBG1+SNuDSAxEHy2OQAAginN7EZiM8gEAAIIEYceROrl/AZBAIAAUQwAmAGEDIIBAACiKDLSAEAAcTMoGT4B0j/A2I+IGYlw4xv0OJqD0AAMf7//x/mHVkgpQots6SAWBSI+YGYG2rJbyD+CsQfgfg1ED+DlnW3geH6GGQGQIABACeGOwYDPOd4AAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/TypeBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/West.png', 'iVBORw0KGgoAAAANSUhEUgAAABEAAAATCAYAAAB2pebxAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC4SURBVHjaYvn//z8Do2tyCAMDQwwDmYAJSuswUACYgK6QBdJqFBkCxKpAzEWpIfIMFAKQIVK4JP/vnutPhBlXQIaI4jIAGF4biTDkKsgQfgoMAIFbIEO4KTAABB6yAAlW9DDAFxZYLHgHMuQ3ELPBFJDhEiGQd76i20RkrMCAPMiQj9icTIJBaiBDXuPyO5EGaYMMeUZCIGIDOiBDHlIj2d8G4m8UGQL092NQqqPUJeBMRIkhAAEGAMVsP4k7CLBnAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/ZoomIn.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADISURBVHjaYvz//z8DCDC6JisAKUUglgNiKSAWBWIhIOYBYjYg/gXEX4D4HRC/BuJnQPwIiO//3z33AdgMBpekcCCtA8RaUE2kApAl14D4CguQiGGgDIAcYADCTMSoBnrDhxh1TAxUBFQ1DBQBm0n1GjDmt5BkGLrBuAwY4mE24C4bvIaxYBF7DMq0QHwLiB8C8Usg/gzEvEAsDsTyQKwGLRxkcRl2G4gPA/FRYLp6hcWST1AMUrcHmO7EgLQ1ENsCsSpIAUCAAQDIBzIHpyZ8jQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/ZoomOut.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC3SURBVHjaYmRwSdrMAAG3gfgwEB/9v3vuKwYCgNE1WQxIWQOxLRCrgsWQDIOBx0B8BYhvAfFDIH4JxJ+BmBeIxYFYHojVgFgHiGWRNbJgsVQWij0ZSARMDFQEo4aRDlhwSQDTmg+eNLYFqziWdDYaAXQ0jJlByfAfkAZhITCfdPALiC8D8R7G////w6JbAUgpArEcEEsBsSjUAh4gZoNq+gLE74D4NRA/A+JHQHwfmIwegMwACDAAHI0omkKk5a0AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_LBlue/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICdDZW50ZXIucG5nJzsKJG1hcFsnd2lkdGhDJ10gPSAnMTknOwokbWFwWydoZWlnaHRDJ10gPSAnMTknOwokbWFwWydwYWRUb3BDJ10gPSAnNDAnOwokbWFwWydwYWRMZWZ0QyddID0gJzI0JzsKCi8qIENlbnRlciBCYWNrZ3JvdW5kICovCiRtYXBbJ2ltYWdlQ2VudGVyQkcnXSA9ICdDZW50ZXJCRy5wbmcnOwokbWFwWyd3aWR0aENCRyddID0gJzU1JzsKJG1hcFsnaGVpZ2h0Q0JHJ10gPSAnNTUnOwokbWFwWydwYWRUb3BDQkcnXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnRDQkcnXSA9ICc3JzsKCi8qIE5vcnRoICovCiRtYXBbJ2ltYWdlTm9ydGgnXSA9ICdOb3J0aC5wbmcnOwokbWFwWyd3aWR0aE4nXSA9ICcxOSc7CiRtYXBbJ2hlaWdodE4nXSA9ICcxNyc7CiRtYXBbJ3BhZFRvcE4nXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnROJ10gPSAnMjQnOwoKLyogU291dGggKi8KJG1hcFsnaW1hZ2VTb3V0aCddID0gJ1NvdXRoLnBuZyc7CiRtYXBbJ3dpZHRoUyddID0gJzE5JzsKJG1hcFsnaGVpZ2h0UyddID0gJzE3JzsKJG1hcFsncGFkVG9wUyddID0gJzU5JzsKJG1hcFsncGFkTGVmdFMnXSA9ICcyNCc7CgovKiBFYXN0ICovCiRtYXBbJ2ltYWdlRWFzdCddID0gJ0Vhc3QucG5nJzsKJG1hcFsnd2lkdGhFJ10gPSAnMTcnOwokbWFwWydoZWlnaHRFJ10gPSAnMTknOwokbWFwWydwYWRUb3BFJ10gPSAnNDAnOwokbWFwWydwYWRMZWZ0RSddID0gJzQzJzsKCi8qIFdlc3QgKi8KJG1hcFsnaW1hZ2VXZXN0J10gPSAnV2VzdC5wbmcnOwokbWFwWyd3aWR0aFcnXSA9ICcxNyc7CiRtYXBbJ2hlaWdodFcnXSA9ICcxOSc7CiRtYXBbJ3BhZFRvcFcnXSA9ICc0MCc7CiRtYXBbJ3BhZExlZnRXJ10gPSAnNyc7CgovKiBab29tSW4gKi8KJG1hcFsnaW1hZ2VJbiddID0gJ1pvb21Jbi5wbmcnOwokbWFwWyd3aWR0aEluJ10gPSAnMTknOwokbWFwWydoZWlnaHRJbiddID0gJzE2JzsKJG1hcFsncGFkVG9wSW4nXSA9ICc4MCc7CiRtYXBbJ3BhZExlZnRJbiddID0gJzI1JzsKCi8qIFpvb21PdXQgKi8KJG1hcFsnaW1hZ2VPdXQnXSA9ICdab29tT3V0LnBuZyc7CiRtYXBbJ3dpZHRoT3V0J10gPSAnMTknOwokbWFwWydoZWlnaHRPdXQnXSA9ICcxNic7CiRtYXBbJ3BhZFRvcE91dCddID0gJzIyOCc7CiRtYXBbJ3BhZExlZnRPdXQnXSA9ICcyNSc7CgovKiBTbGlkZU5vdGNoICovCiRtYXBbJ2ltYWdlU2xpZGVOb3RjaCddID0gJ1NsaWRlTm90Y2gucG5nJzsKJG1hcFsnd2lkdGhTbGlkZU5vdGNoJ10gPSAnMTknOwokbWFwWydoZWlnaHRTbGlkZU5vdGNoJ10gPSAnNyc7CgovKiBTbGlkZVNlbCAqLwokbWFwWydpbWFnZVNsaWRlU2VsJ10gPSAnU2xpZGVTZWwucG5nJzsKJG1hcFsnd2lkdGhTbGlkZVNlbCddID0gJzE5JzsKJG1hcFsnaGVpZ2h0U2xpZGVTZWwnXSA9ICc3JzsKCi8qIHpvb21Db250cm9sIHBvc2l0aW9uICovCiRtYXBbJ3BhZFRvcHpvb21Db250cm9sJ10gPSAnOTUnOwokbWFwWydwYWRMZWZ0em9vbUNvbnRyb2wnXSA9ICcyNSc7CgovKiBtYXBUeXBlcyAqLwokbWFwWydsaW5rVHlwZUNvbG9yJ10gPSAnRkZGRkZGJzsKJG1hcFsnaW1hZ2VUeXBlQkcnXSA9ICdUeXBlQkcucG5nJzsKCi8qIG1hcFR5cGVNYXAgKi8KJG1hcFsnd2lkdGhUeXBlTWFwJ10gPSAnNjAnOwokbWFwWydwYWRUb3BUeXBlTWFwJ10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlTWFwJ10gPSAnMjkwJzsKCi8qIG1hcFR5cGVTYXQgKi8KJG1hcFsnd2lkdGhUeXBlU2F0J10gPSAnMTAwJzsKJG1hcFsncGFkVG9wVHlwZVNhdCddID0gJzAnOwokbWFwWydwYWRMZWZ0VHlwZVNhdCddID0gJzM0MCc7CgovKiBtYXBUeXBlSHliICovCiRtYXBbJ3dpZHRoVHlwZUh5YiddID0gJzc1JzsKJG1hcFsncGFkVG9wVHlwZUh5YiddID0gJzAnOwokbWFwWydwYWRMZWZ0VHlwZUh5YiddID0gJzQzMCc7CgovKiBHeE1hZ25pZmllciBsb2NhdGlvbiAqLwokbWFwWydHeFBvc1knXSA9ICcxMCc7CiRtYXBbJ0d4UG9zWCddID0gJzQnOwo/Pgo=');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/Center.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAABwElEQVR42mL8Hy+xgQEBrgPxASDexbDg+X8GXCBBkhFIugGxAxBrwoQBAogFSclBIF4DNOQxULEEEOsA+WpALAPEgkD8HoifAPEtIL4CVLcTqOYakB0CxPYgAwACiBHqMpBB84EKPgAV2AHZICzLgBs8BuJDQPWHgOoFgOxEkIEAAcQE9doaqEHeQHYUhkELnqehGSYLVgdSD9IH0g80ByCAmMBhBPEayDW+INcyEAcYwepB+kD6geYABBATOLBBYQTxGiNeF2G6kBGsD6J/F0AAMf7//x8UOy5ATihW+5ENSJCchcOVq4Hq9gAEEBOUo0bQAGSDMF0I1g8QQDDDZNDS0SycLgKJY7oQrB8ggGDenA42GNNGQi6Cyf8DymUCBBAs0YISpDBBF8BcjOkykH4GgACCefMJRpjhchF6ECDpBwggmGG3CHoNf6yC9QMEEBM0016BZhEGnC7E7iJY1roCMgcggJjAuX/B8xfgvMbA8B+nC7G76D80j4L0uwEEEBO4GEmQlAVnWgaGzRgG4gb/weohmR2UVx0AAoiqpQZAAMGShj3UG2ugCkABSqg8ewF1Ebw8AwggRmqWtAABBgDIWr0kQgPXxgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/CenterBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/East.png', 'iVBORw0KGgoAAAANSUhEUgAAABEAAAATCAYAAAB2pebxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA3UlEQVR42mL8Hy+xgYF8sIRhwfM1AAHExEAZ0AERAAFEqSFqDAmSsgABRKkhXECsChBAlBoCAvIAAQQy5ApBZQue++ORlQIIIJAhVwkakiC5EY9BogABBDLkFlGOxm0QP0AAgQx5SLTvsRvEDRBAjMDEBjJoHQlhgDAQAv4DBBALkBDCowB7IKPK/wYIIJAr5In2DqYBIPAVIICYwKmOfANA4CNAAIEM0abAABB4DRBATLBMRGQgYgPPAAKIGsn+IUAAUWrINyC+DRBAlBpyCxhejwECiFJDwJkXIMAAWgs1gEXqXg8AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/North.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA6klEQVR42mL8//8/AxgkSMoCSVUglgdiKSAWBWJ+IOYGYlYg/g3EX4H4IxC/BuJnQPwQiG8zLHj+GGQEQAAx/o+XCAHSOkCsBsRcDKSDb0B8C4ivAAQQC5CIYaAMgBxgAMIAAcRElPIFz/2JUQYQQExEG0SEgQABxETQoATJjdAI2kjIQIAAYiLKIBggYCBAADERbRARBgIEEBNODfgADnmAAGJioCIACCCqGgYQQFQ1DCCAiDOMUBhCAUAAUdVlAAFEVcMAAoiqhgEEEAsO8StAfBVatIDKrHdALAQt60BFlTa02EIBAAEGALUcMrLUZ0UNAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/SlideNotch.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAP0lEQVR42mL8//8/AxwkSC5jIBUseB4FYwIEEBMDFQFAAFHVMIAAoqphAAFEVcMAAoiqhgEEECNKbFIIAAIMAPhfCQfl91ojAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/SlideSel.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAN0lEQVR42mL8Hy/xn4FKACCAmBioCAACiKqGAQQQVQ0DCCCqGgYQQFQ1DCCAGP//p1pkMgAEGAAXWgV/k5jDtgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/South.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA7ElEQVR42mL8Hy+xgQETXAHiq0B8C4gfAvE7IBYCYnkgVgNibSDWQdcEEEAsDNiBDjbFhABAADExUBEABBBVDQMIIKoaBhBAxBm24Lk/McoAAoiqLgMIIKoaBhBAVDUMIICYyAojHPIAAYTdsATJjTgNBImD5LEAgADC7U1sBuIxCAQAAogRR97E7iU8BoEAQAARjgCYAQQMAgGAACIuNokwCAQAAghUaiyBlhCgooWLjBTxDVpUXQEIIMb////DbJcFkqrQMksKiEWBmB+IuYGYFYh/A/FXIP4IxK+B+Bm0rLsNDNfHICMAAgwA4OAyaaobIWUAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/TypeBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/West.png', 'iVBORw0KGgoAAAANSUhEUgAAABEAAAATCAYAAAB2pebxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA6klEQVR42mL8//8/A0OCZAgDA0MMA5kAIICYoLQOAwUAIICYgK6QBdJqlBgCEEAgl6gCMRclhgAEEMgQeQYKAUAAgQyRwim74Lk/EWZcAQggkCGiOA1IkNxIhCFXAQIIZAg/BQaAwC2AAAIZwk2BASDwECCAWIAEK0YY4AsLTAveAQQQyJDfQMwGV0C6S4QAAgjkna8YNhEXKzAgDxBAIEM+YnUy8QapAQQQyJDXOP1OnEHaAAEEMuQZCYGIDegABBDIkIeUJnuAAAIZchuIv1FiCEAAMQH9/RiU6igxBCCAYIXSFUoMAQgwAOJUNFac9y2mAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/ZoomIn.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA/klEQVR42mL8//8/AxgkSCoASUUglgNiKSAWBWIhIOYBYjYg/gXEX4D4HRC/BuJnQPwIiO8zLHj+AGQEQAAx/o+XCAfSOkCsBdVEKgBZcg2IrwAEEAuQiGGgDIAcYADCAAHERJTyBc99iFEGEEBMDFQEAAFEVcMAAoiFaK8h8xMkt2DTAhBAuA1D1gAyCIcByAAggKjqTYAAoqphAAFEnGFEeBEEAAKIqi4DCCCqGgYQQFQ1DCCAsCWNx6BMC8S3gPghEL8E4s9AzAvE4kAsD8Rq0MJBFlkjQAAhG3YbiA8D8VFgunqFxZJPUAxStwcYKWJA2hqIbYFYFaQAIMAAU9IuMM6onAAAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/ZoomOut.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA60lEQVR42mL8Hy+xmQECbgPxYSA+yrDg+SsGQiBBUgxIWgOxLRCrgoQAAogRyTAYeAzEV4D4FhA/BOKXQPwZiHmBWByI5YFYDYh1gFgWWSNAALFgsVMWij0ZSAQAAcTEQEUAEEBUNQwggKhqGEAAUdUwgACiqmEAAcSCU2bBcx88aWwLNmGAAGIhVQM+ABBAVPUmQABR1TCAAKKqYQABRFXDAAIIFAFLoJlWC4jZyDDjFxBfAxUOAAHE+P//f1jsKQBJRSCWA2IpIBYFYiEg5oFaAtL0BYjfAfFrIH4GxI+A+D4wGT0AGQEQYABmSyXJV0K7PwAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_Orange/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICdDZW50ZXIucG5nJzsKJG1hcFsnd2lkdGhDJ10gPSAnMTknOwokbWFwWydoZWlnaHRDJ10gPSAnMTknOwokbWFwWydwYWRUb3BDJ10gPSAnNDAnOwokbWFwWydwYWRMZWZ0QyddID0gJzI0JzsKCi8qIENlbnRlciBCYWNrZ3JvdW5kICovCiRtYXBbJ2ltYWdlQ2VudGVyQkcnXSA9ICdDZW50ZXJCRy5wbmcnOwokbWFwWyd3aWR0aENCRyddID0gJzU1JzsKJG1hcFsnaGVpZ2h0Q0JHJ10gPSAnNTUnOwokbWFwWydwYWRUb3BDQkcnXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnRDQkcnXSA9ICc3JzsKCi8qIE5vcnRoICovCiRtYXBbJ2ltYWdlTm9ydGgnXSA9ICdOb3J0aC5wbmcnOwokbWFwWyd3aWR0aE4nXSA9ICcxOSc7CiRtYXBbJ2hlaWdodE4nXSA9ICcxNyc7CiRtYXBbJ3BhZFRvcE4nXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnROJ10gPSAnMjQnOwoKLyogU291dGggKi8KJG1hcFsnaW1hZ2VTb3V0aCddID0gJ1NvdXRoLnBuZyc7CiRtYXBbJ3dpZHRoUyddID0gJzE5JzsKJG1hcFsnaGVpZ2h0UyddID0gJzE3JzsKJG1hcFsncGFkVG9wUyddID0gJzU5JzsKJG1hcFsncGFkTGVmdFMnXSA9ICcyNCc7CgovKiBFYXN0ICovCiRtYXBbJ2ltYWdlRWFzdCddID0gJ0Vhc3QucG5nJzsKJG1hcFsnd2lkdGhFJ10gPSAnMTcnOwokbWFwWydoZWlnaHRFJ10gPSAnMTknOwokbWFwWydwYWRUb3BFJ10gPSAnNDAnOwokbWFwWydwYWRMZWZ0RSddID0gJzQzJzsKCi8qIFdlc3QgKi8KJG1hcFsnaW1hZ2VXZXN0J10gPSAnV2VzdC5wbmcnOwokbWFwWyd3aWR0aFcnXSA9ICcxNyc7CiRtYXBbJ2hlaWdodFcnXSA9ICcxOSc7CiRtYXBbJ3BhZFRvcFcnXSA9ICc0MCc7CiRtYXBbJ3BhZExlZnRXJ10gPSAnNyc7CgovKiBab29tSW4gKi8KJG1hcFsnaW1hZ2VJbiddID0gJ1pvb21Jbi5wbmcnOwokbWFwWyd3aWR0aEluJ10gPSAnMTknOwokbWFwWydoZWlnaHRJbiddID0gJzE2JzsKJG1hcFsncGFkVG9wSW4nXSA9ICc4MCc7CiRtYXBbJ3BhZExlZnRJbiddID0gJzI1JzsKCi8qIFpvb21PdXQgKi8KJG1hcFsnaW1hZ2VPdXQnXSA9ICdab29tT3V0LnBuZyc7CiRtYXBbJ3dpZHRoT3V0J10gPSAnMTknOwokbWFwWydoZWlnaHRPdXQnXSA9ICcxNic7CiRtYXBbJ3BhZFRvcE91dCddID0gJzIyOCc7CiRtYXBbJ3BhZExlZnRPdXQnXSA9ICcyNSc7CgovKiBTbGlkZU5vdGNoICovCiRtYXBbJ2ltYWdlU2xpZGVOb3RjaCddID0gJ1NsaWRlTm90Y2gucG5nJzsKJG1hcFsnd2lkdGhTbGlkZU5vdGNoJ10gPSAnMTknOwokbWFwWydoZWlnaHRTbGlkZU5vdGNoJ10gPSAnNyc7CgovKiBTbGlkZVNlbCAqLwokbWFwWydpbWFnZVNsaWRlU2VsJ10gPSAnU2xpZGVTZWwucG5nJzsKJG1hcFsnd2lkdGhTbGlkZVNlbCddID0gJzE5JzsKJG1hcFsnaGVpZ2h0U2xpZGVTZWwnXSA9ICc3JzsKCi8qIHpvb21Db250cm9sIHBvc2l0aW9uICovCiRtYXBbJ3BhZFRvcHpvb21Db250cm9sJ10gPSAnOTUnOwokbWFwWydwYWRMZWZ0em9vbUNvbnRyb2wnXSA9ICcyNSc7CgovKiBtYXBUeXBlcyAqLwokbWFwWydsaW5rVHlwZUNvbG9yJ10gPSAnRkZGRkZGJzsKJG1hcFsnaW1hZ2VUeXBlQkcnXSA9ICdUeXBlQkcucG5nJzsKCi8qIG1hcFR5cGVNYXAgKi8KJG1hcFsnd2lkdGhUeXBlTWFwJ10gPSAnNjAnOwokbWFwWydwYWRUb3BUeXBlTWFwJ10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlTWFwJ10gPSAnMjkwJzsKCi8qIG1hcFR5cGVTYXQgKi8KJG1hcFsnd2lkdGhUeXBlU2F0J10gPSAnMTAwJzsKJG1hcFsncGFkVG9wVHlwZVNhdCddID0gJzAnOwokbWFwWydwYWRMZWZ0VHlwZVNhdCddID0gJzM0MCc7CgovKiBtYXBUeXBlSHliICovCiRtYXBbJ3dpZHRoVHlwZUh5YiddID0gJzc1JzsKJG1hcFsncGFkVG9wVHlwZUh5YiddID0gJzAnOwokbWFwWydwYWRMZWZ0VHlwZUh5YiddID0gJzQzMCc7CgovKiBHeE1hZ25pZmllciBsb2NhdGlvbiAqLwokbWFwWydHeFBvc1knXSA9ICcxMCc7CiRtYXBbJ0d4UG9zWCddID0gJzQnOwo/Pgo=');
expand_3537250845($outputDir, 'templates/controls/Full_brown/Center.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAB2klEQVR42mJMkmPYwIAA14H4ABDvmvvw/38GHCBZnpERSLkBsQMQa8LEAQKIBUnNQSBeAzTkMVCxBBDrAPlqQCwDxIJA/B6InwDxLSC+AlS3E6jmGpAdAsT2IAMAAogFyaD5QAUfgArsgGwQlkVzkDAU6wOxBVDdIaD6Q0B6PlTeHiCAmKBeWwM1yBvIjkI3CCiXhmYwSD4KpB6kD6QfZA5AAIEMOwD1Gsg1vkDMyEAcAKnzBekD6QeZAxBAIMN2gcII6jVGfC7C4kKQejuo/l0AAcT4HxhpQI4LkBOKzXpkA4DqZuFw5Wqguj0AAcQE5agRMgDZICwuBOsHCCCYYTJo6WgWLheBxLG4EKwfIIBg3pwOMhiLjYRcBJP/B5TLBAggWDoDJUhhQi6AuRiLy0D6GQACCObNJ+hhhstF6EGArB8ggGCG3SLkNQKxCtYPEEBM0Ex7BYgfY0sWyLGJLcyg+q6AzAEIIJDL3ICKXgDpQ0D8H5cLcbgIpP4QVL8bQACBDHMAKpIFZVogezO6gXgASN1maGYH5VUHgABigpZHIUABAaDEViB7GbqXsbgIJL8MpB6kD1oMaQIEECxp2EM1rYHaBApQQuXZC6iL4OUZQAAxUrOkBQgwAKqU3zCXC4kJAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_brown/CenterBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/Full_brown/East.png', 'iVBORw0KGgoAAAANSUhEUgAAABEAAAATCAYAAAB2pebxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA3ElEQVR42mJMkmPYwEA+WDL34f81AAHExEAZ0AERAAFEqSFqyfKMsgABRKkhXECsChBAlBoCAvIAAQQy5AohVcDA88cjLQUQQCBDrhIyBOjvjXgMEgUIIJAht4hxMx6D+AECCGTIQ2I9j8MgboAAYgES70gMA7A8yEAolxUggECGCGGzkUgDQOA3QACBvCNPrHewGAACXwECCGSIGgUGgMBHgAACGaJNgQEg8BoggJhgmYhQrOCRfgYQQNRI9g8BAohSQ74B8W2AAKLUkFvA8HoMEECUGgLOvAABBgC3v0Any+xLhgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_brown/North.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA7ElEQVR42mL8//8/AwgkyzPKAilVIJYHYikgFgVifiDmBmJWIP4NxF+B+CMQvwbiZ0D8EIhvz334/zHIDIAAYkySYwgB0jpArAbEXAykg29AfAuIrwAEEAuQiGGgDIAcYADCAAHERIxqoDf8iVEHEEBMxBpEjIEAAcREyCBgxGyERtBGQgYCBBATMQbBACEDAQKIiViDiDEQIICYcGnA5x1c8gABxMRARQAQQFQ1DCCAqGoYQAARZRihMIQBgACiqssAAoiqhgEEEFUNAwggFhziV4D4KrRoAZVZ74BYCFrWgYoqbWixhQIAAgwAVKo7vArllWYAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_brown/SlideNotch.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAQUlEQVR42mL8//8/AwwkyzMuYyARzH34PwrGBgggJgYqAoAAoqphAAFEVcMAAoiqhgEEEFUNAwggRuTYpBQABBgA1IUKBy4iw8YAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_brown/SlideSel.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAN0lEQVR42mJMkmP4z0AlABBATAxUBAABRFXDAAKIqoYBBBBVDQMIIKoaBhBAjP//Uy0yGQACDAASsQSJsHC95wAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_brown/South.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA70lEQVR42mJMkmPYwIAJrgDxVSC+BcQPgfgdEAsBsTwQqwGxNhDroGsCCCAWBuxAB5tiQgAggJgYqAgAAoiqhgEEEFUNAwggogyb+/C/PzHqAAKIqi4DCCCqGgYQQFQ1DCCAmMgJI1zyAAGE1bBkecaNuDSAxEHy2OQAAginN7EZiM8gEAAIIEYceROrl/AZBAIAAUQwAmAGEDIIBAACiKjYJMYgEAAIIGZDfoY/QPofEPMBMSsZKeIbtLjaAxBAjP///4fZLgukVKFllhQQiwIxPxBzQy35DcRfgfgjEL8G4mfQsu42MFwfg8wACDAAsjw6rDe5E+EAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_brown/TypeBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/Full_brown/West.png', 'iVBORw0KGgoAAAANSUhEUgAAABEAAAATCAYAAAB2pebxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA7ElEQVR42mL8//8/Q7I8YwgDA0MMA5kAIICYoLQOAwUAIICYgK6QBdJqlBgCEEAgl6gCMRclhgAEEMgQeQYKAUAAgQyRwiU59+F/fyLMuAIQQCBDRHEZAAyvjUQYchUggECG8FNgAAjcAgggkCHcFBgAAg8BAogFSLCihwG+sMBiwTuAAAIZ8huI2WAKyHCJEEAAgbzzFd0mImMFBuQBAghkyEdsTibBIDWAAAIZ8hqX34k0SBsggECGPCMhELEBHYAAAhnykNJkDxBAIENuA/E3SgwBCCAmoL8fg1IdJYYABBCsULpCiSEAAQYAxpg/YP0HG4QAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_brown/ZoomIn.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAABAElEQVR42mL8//8/AwgkyTMqAClFIJYDYikgFgViISDmAWI2IP4FxF+A+B0QvwbiZ0D8CIjvz3v4/wHIDIAAYkyUYwgH0jpArAXVRCoAWXINiK8ABBALkIhhoAyAHGAAwgABxESMaqA3fIhRBxBATAxUBAABRFXDAAKIhVivIfOBMb8Fmx6AAMJpGLIGkEG4DEAGAAFEVW8CBBBVDQMIIKIMI8aLIAAQQFR1GUAAUdUwgACiqmEAAYQtaTwGZVogvgXED4H4JRB/BmJeIBYHYnkgVoMWDrLIGgECCNmw20B8GIiPAtPVKyyWfIJikLo9wEgRA9LWQGwLxKogBQABBgC/KTM5GrgxaQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_brown/ZoomOut.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA7klEQVR42mJMkmPYzAABt4H4MBAfnfvw/ysGAiBZnlEMSFkDsS0Qq4LEAAKIBUleFYpdgQqvAOlbQPwQiF8C8Wcg5gVicSCWB2I1INYBYllkCwACiAWLpbJQ7MlAIgAIICYGKgKAAKKqYQABRFXDAAKIqoYBBBBVDQMIIBZcEsC05oMnjW3BJg4QQCykasAHAAKIqt4ECCCqGgYQQFQ1DCCAqGoYQAAxG/Iz/APSICwE4pNhxi8gvgzEewACiPH///+w2FMAUopALAfEUkAsCrWAB4jZoJq+APE7IH4NxM+A+BEQ3wcmowcgMwACDADNkCcbGOHr+gAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_brown/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICdDZW50ZXIucG5nJzsKJG1hcFsnd2lkdGhDJ10gPSAnMTknOwokbWFwWydoZWlnaHRDJ10gPSAnMTknOwokbWFwWydwYWRUb3BDJ10gPSAnNDAnOwokbWFwWydwYWRMZWZ0QyddID0gJzI0JzsKCi8qIENlbnRlciBCYWNrZ3JvdW5kICovCiRtYXBbJ2ltYWdlQ2VudGVyQkcnXSA9ICdDZW50ZXJCRy5wbmcnOwokbWFwWyd3aWR0aENCRyddID0gJzU1JzsKJG1hcFsnaGVpZ2h0Q0JHJ10gPSAnNTUnOwokbWFwWydwYWRUb3BDQkcnXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnRDQkcnXSA9ICc3JzsKCi8qIE5vcnRoICovCiRtYXBbJ2ltYWdlTm9ydGgnXSA9ICdOb3J0aC5wbmcnOwokbWFwWyd3aWR0aE4nXSA9ICcxOSc7CiRtYXBbJ2hlaWdodE4nXSA9ICcxNyc7CiRtYXBbJ3BhZFRvcE4nXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnROJ10gPSAnMjQnOwoKLyogU291dGggKi8KJG1hcFsnaW1hZ2VTb3V0aCddID0gJ1NvdXRoLnBuZyc7CiRtYXBbJ3dpZHRoUyddID0gJzE5JzsKJG1hcFsnaGVpZ2h0UyddID0gJzE3JzsKJG1hcFsncGFkVG9wUyddID0gJzU5JzsKJG1hcFsncGFkTGVmdFMnXSA9ICcyNCc7CgovKiBFYXN0ICovCiRtYXBbJ2ltYWdlRWFzdCddID0gJ0Vhc3QucG5nJzsKJG1hcFsnd2lkdGhFJ10gPSAnMTcnOwokbWFwWydoZWlnaHRFJ10gPSAnMTknOwokbWFwWydwYWRUb3BFJ10gPSAnNDAnOwokbWFwWydwYWRMZWZ0RSddID0gJzQzJzsKCi8qIFdlc3QgKi8KJG1hcFsnaW1hZ2VXZXN0J10gPSAnV2VzdC5wbmcnOwokbWFwWyd3aWR0aFcnXSA9ICcxNyc7CiRtYXBbJ2hlaWdodFcnXSA9ICcxOSc7CiRtYXBbJ3BhZFRvcFcnXSA9ICc0MCc7CiRtYXBbJ3BhZExlZnRXJ10gPSAnNyc7CgovKiBab29tSW4gKi8KJG1hcFsnaW1hZ2VJbiddID0gJ1pvb21Jbi5wbmcnOwokbWFwWyd3aWR0aEluJ10gPSAnMTknOwokbWFwWydoZWlnaHRJbiddID0gJzE2JzsKJG1hcFsncGFkVG9wSW4nXSA9ICc4MCc7CiRtYXBbJ3BhZExlZnRJbiddID0gJzI1JzsKCi8qIFpvb21PdXQgKi8KJG1hcFsnaW1hZ2VPdXQnXSA9ICdab29tT3V0LnBuZyc7CiRtYXBbJ3dpZHRoT3V0J10gPSAnMTknOwokbWFwWydoZWlnaHRPdXQnXSA9ICcxNic7CiRtYXBbJ3BhZFRvcE91dCddID0gJzIyOCc7CiRtYXBbJ3BhZExlZnRPdXQnXSA9ICcyNSc7CgovKiBTbGlkZU5vdGNoICovCiRtYXBbJ2ltYWdlU2xpZGVOb3RjaCddID0gJ1NsaWRlTm90Y2gucG5nJzsKJG1hcFsnd2lkdGhTbGlkZU5vdGNoJ10gPSAnMTknOwokbWFwWydoZWlnaHRTbGlkZU5vdGNoJ10gPSAnNyc7CgovKiBTbGlkZVNlbCAqLwokbWFwWydpbWFnZVNsaWRlU2VsJ10gPSAnU2xpZGVTZWwucG5nJzsKJG1hcFsnd2lkdGhTbGlkZVNlbCddID0gJzE5JzsKJG1hcFsnaGVpZ2h0U2xpZGVTZWwnXSA9ICc3JzsKCi8qIHpvb21Db250cm9sIHBvc2l0aW9uICovCiRtYXBbJ3BhZFRvcHpvb21Db250cm9sJ10gPSAnOTUnOwokbWFwWydwYWRMZWZ0em9vbUNvbnRyb2wnXSA9ICcyNSc7CgovKiBtYXBUeXBlcyAqLwokbWFwWydsaW5rVHlwZUNvbG9yJ10gPSAnRkZGRkZGJzsKJG1hcFsnaW1hZ2VUeXBlQkcnXSA9ICdUeXBlQkcucG5nJzsKCi8qIG1hcFR5cGVNYXAgKi8KJG1hcFsnd2lkdGhUeXBlTWFwJ10gPSAnNjAnOwokbWFwWydwYWRUb3BUeXBlTWFwJ10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlTWFwJ10gPSAnMjkwJzsKCi8qIG1hcFR5cGVTYXQgKi8KJG1hcFsnd2lkdGhUeXBlU2F0J10gPSAnMTAwJzsKJG1hcFsncGFkVG9wVHlwZVNhdCddID0gJzAnOwokbWFwWydwYWRMZWZ0VHlwZVNhdCddID0gJzM0MCc7CgovKiBtYXBUeXBlSHliICovCiRtYXBbJ3dpZHRoVHlwZUh5YiddID0gJzc1JzsKJG1hcFsncGFkVG9wVHlwZUh5YiddID0gJzAnOwokbWFwWydwYWRMZWZ0VHlwZUh5YiddID0gJzQzMCc7CgovKiBHeE1hZ25pZmllciBsb2NhdGlvbiAqLwokbWFwWydHeFBvc1knXSA9ICcxMCc7CiRtYXBbJ0d4UG9zWCddID0gJzQnOwo/Pgo=');
expand_3537250845($outputDir, 'templates/controls/Full_green/Center.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAB2klEQVR42mJMOzFlAwMCXAfiA0C8a6Z59n8GHCD95FRGIOUGxA5ArAkTBwggFiQ1B4F4DdCQx0DFEkCsA+SrAbEMEAsC8XsgfgLEt4D4ClDdTqCaa0B2CBDbgwwACCAmJIPmQw2yA7JTgDgUiPWBWBiqThjKB4mngNSB1IP0QfUzAAQQE9RrIBd9ACrwBrKjgFgW2VtAuTQ0n4Lko0DqQfpA+kHmAAQQyLADSC7yBWJGBuIASJ0vkgsPAAQQyLBdoDAC0nboBqG7CIsLQertoPp3AQQQ4////0Gx4wINCwyAbABQ3SwcrlwNVLcHIIBgEaBGyABkg7C4EKwfIIBghsmgpaNZuFwEEsfiQrB+gACCeXM6yGAsNhJyEUz+H1AuEyCAYIkWlCCFCbkA5mIsLgPpZwAIIJg3n6CHGS4XoQcBsn6AAIIZdouQ1wjEKlg/QAAxQTPtFSB+jC1ZIMcmtjCD6rsCMgcggEAucwMqegGkDwHxf1wuxOEikPpDUP1uAAEEMswBqEgWKAAybDO6gXgASN1mkD6QfpA5AAHEBC2PQoACAkCJrUD2MnQvY3ERSH4ZSD1IH7QY0gQIIFjSsIdqWgO1CRSghMqzF1AXwcszgABipGZJCxBgAIw46d1JSsY5AAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/Full_green/CenterBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/Full_green/East.png', 'iVBORw0KGgoAAAANSUhEUgAAABEAAAATCAYAAAB2pebxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA3ElEQVR42mJMOzFlAwP5YMlM8+w1AAHExEAZ0AERAAFEqSFq6SenygIEEKWGcAGxKkAAUWoICMgDBBDIkCuEVAEDzx+PtBRAAIEMuUrIEKC/N+IxSBQggECG3CLGzXgM4gcIIJAhD4n1PA6DuAECiAVIvCMxDMDyIAOhXFaAAAIZIoTNRiINAIHfAAEE8o48sd7BYgAIfAUIIJAhahQYAAIfAQIIZIg2BQaAwGuAAGKCZSJCsYJH+hlAAFEj2T8ECCBKDfkGxLcBAohSQ24Bw+sxQABRagg48wIEGACwP0AnTACLqQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_green/North.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA7ElEQVR42mL8//8/Awikn5wqC6RUgVgeiKWAWBSI+YGYG4hZgfg3EH8F4o9A/BqInwHxQyC+PdM8+zHIDIAAYkw7MSUESOsAsRoQczGQDr4B8S0gvgIQQCxAIoaBMgBygAEIAwQQEzGqgd7wJ0YdQAAxEWsQMQYCBBATIYOAEbMRGkEbCRkIEEBMxBgEA4QMBAggJmINIsZAgABiwqUBn3dwyQMEEBMDFQFAAFHVMIAAoqphAAFElGGEwhAGAAKIqi4DCCCqGgYQQFQ1DCCAWHCIXwHiq9CiBVRmvQNiIWhZByqqtKHFFgoACDAAPDQ8/vn/pLEAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_green/SlideNotch.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAQUlEQVR42mL8//8/Awykn5y6jIFEMNM8OwrGBgggJgYqAoAAoqphAAFEVcMAAoiqhgEEEFUNAwggRuTYpBQABBgAFfwKB1mow1AAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_green/SlideSel.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAN0lEQVR42mJMOzHlPwOVAEAAMTFQEQAEEFUNAwggqhoGEEBUNQwggKhqGEAAMf7/T7XIZAAIMAC1sQXL4qnD7wAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_green/South.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA7klEQVR42mJMOzFlAwMmuALEV4H4FhA/BOJ3QCwExPJArAbE2kCsg64JIIBYGLADHWyKCQGAAGJioCIACCCqGgYQQFQ1DCCAiDJspnm2PzHqAAKIqi4DCCCqGgYQQFQ1DCCAmMgJI1zyAAGE1bD0k1M34tIAEgfJY5MDCCCc3sRmID6DQAAggBhx5E2sXsJnEAgABBDBCIAZQMggEAAIIKJikxiDQAAggEClxhJoCQEqWrjISBHfoEXVFYAAYvz//z/MdlkgpQots6SAWBSI+YGYG4hZgfg3EH8F4o9A/BqIn0HLutvAcH0MMgMgwAAU1TwBeHc7YQAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_green/TypeBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/Full_green/West.png', 'iVBORw0KGgoAAAANSUhEUgAAABEAAAATCAYAAAB2pebxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA70lEQVR42mL8//8/Q/rJqSEMDAwxDGQCgABigtI6DBQAgABifu4pKgukI4CYlVxDAAII5BJVIOaixCUAAQQyRJ6BQgAQQCBDpHBJzjTP9ifCjCsAAQQyRBSXAcBY20iEIVcBAghkCD8FBoDALYAAAhnCTYEBIPAQIIBYkKMWFgb4wgKLBe8AAghkyG8gZoMpIMMlQgABBPLOV3SbiIwVGJAHCCCQIR+xOZkEg9QAAghkyGtcfifSIG2AAAIZ8oyEQMQGdAACCGTIQ0qTPUAAgQy5DcTfKDEEIICYgP5+DEp1lBgCEECwQukKJYYABBgAb+FAWqG9ZL8AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/Full_green/ZoomIn.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAABAElEQVR42mL8//8/Awikn5yqAKQUgVgOiKWAWBSIhYCYB4jZgPgXEH8B4ndA/BqInwHxIyC+P9M8+wHIDIAAYkw7MSUcSOsAsRZUE6kAZMk1IL4CEEAsQCKGgTIAcoABCAMEEBMxqoHe8CFGHUAAMTFQEQAEEFUNAwggFmK9hswHxvwWbHoAAginYcgaQAbhMgAZAAQQVb0JEEBUNQwggIgyjBgvggBAAFHVZQABRFXDAAKIqoYBBBC2pPEYlGmB+BYQPwTil0D8GYh5gVgciOWBWA1aOMgiawQIIGTDbgPxYSA+CkxXr7BY8gmKQer2ACNFDEhbA7EtEKuCFAAEGABuajR8W0wNdgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_green/ZoomOut.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA7klEQVR42mJMOzFlMwME3Abiw0B8dKZ59isGAiD95FQxIGUNxLZArAoSAwggFiR5VSh2BSq8AqRvAfFDIH4JxJ+BmBeIxYFYHojVgFgHiGWRLQAIIBYslspCsScDiQAggJgYqAgAAoiqhgEEEFUNAwggqhoGEEBUNQwggFhwSQDTmg+eNLYFmzhAALGQqgEfAAggqnoTIICoahhAAFHVMIAAoqphAAEEioAl0EyrBcRsZJjxC4ivAfEVgABi/P//Pyz2FICUIhDLAbEUEIsCsRAQ80AtAWn6AsTvgPg1ED8D4kdAfB+YjB6AzAAIMAAuPymsH7gMfAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/Full_green/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICdDZW50ZXIucG5nJzsKJG1hcFsnd2lkdGhDJ10gPSAnMTknOwokbWFwWydoZWlnaHRDJ10gPSAnMTknOwokbWFwWydwYWRUb3BDJ10gPSAnNDAnOwokbWFwWydwYWRMZWZ0QyddID0gJzI0JzsKCi8qIENlbnRlciBCYWNrZ3JvdW5kICovCiRtYXBbJ2ltYWdlQ2VudGVyQkcnXSA9ICdDZW50ZXJCRy5wbmcnOwokbWFwWyd3aWR0aENCRyddID0gJzU1JzsKJG1hcFsnaGVpZ2h0Q0JHJ10gPSAnNTUnOwokbWFwWydwYWRUb3BDQkcnXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnRDQkcnXSA9ICc3JzsKCi8qIE5vcnRoICovCiRtYXBbJ2ltYWdlTm9ydGgnXSA9ICdOb3J0aC5wbmcnOwokbWFwWyd3aWR0aE4nXSA9ICcxOSc7CiRtYXBbJ2hlaWdodE4nXSA9ICcxNyc7CiRtYXBbJ3BhZFRvcE4nXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnROJ10gPSAnMjQnOwoKLyogU291dGggKi8KJG1hcFsnaW1hZ2VTb3V0aCddID0gJ1NvdXRoLnBuZyc7CiRtYXBbJ3dpZHRoUyddID0gJzE5JzsKJG1hcFsnaGVpZ2h0UyddID0gJzE3JzsKJG1hcFsncGFkVG9wUyddID0gJzU5JzsKJG1hcFsncGFkTGVmdFMnXSA9ICcyNCc7CgovKiBFYXN0ICovCiRtYXBbJ2ltYWdlRWFzdCddID0gJ0Vhc3QucG5nJzsKJG1hcFsnd2lkdGhFJ10gPSAnMTcnOwokbWFwWydoZWlnaHRFJ10gPSAnMTknOwokbWFwWydwYWRUb3BFJ10gPSAnNDAnOwokbWFwWydwYWRMZWZ0RSddID0gJzQzJzsKCi8qIFdlc3QgKi8KJG1hcFsnaW1hZ2VXZXN0J10gPSAnV2VzdC5wbmcnOwokbWFwWyd3aWR0aFcnXSA9ICcxNyc7CiRtYXBbJ2hlaWdodFcnXSA9ICcxOSc7CiRtYXBbJ3BhZFRvcFcnXSA9ICc0MCc7CiRtYXBbJ3BhZExlZnRXJ10gPSAnNyc7CgovKiBab29tSW4gKi8KJG1hcFsnaW1hZ2VJbiddID0gJ1pvb21Jbi5wbmcnOwokbWFwWyd3aWR0aEluJ10gPSAnMTknOwokbWFwWydoZWlnaHRJbiddID0gJzE2JzsKJG1hcFsncGFkVG9wSW4nXSA9ICc4MCc7CiRtYXBbJ3BhZExlZnRJbiddID0gJzI1JzsKCi8qIFpvb21PdXQgKi8KJG1hcFsnaW1hZ2VPdXQnXSA9ICdab29tT3V0LnBuZyc7CiRtYXBbJ3dpZHRoT3V0J10gPSAnMTknOwokbWFwWydoZWlnaHRPdXQnXSA9ICcxNic7CiRtYXBbJ3BhZFRvcE91dCddID0gJzIyOCc7CiRtYXBbJ3BhZExlZnRPdXQnXSA9ICcyNSc7CgovKiBTbGlkZU5vdGNoICovCiRtYXBbJ2ltYWdlU2xpZGVOb3RjaCddID0gJ1NsaWRlTm90Y2gucG5nJzsKJG1hcFsnd2lkdGhTbGlkZU5vdGNoJ10gPSAnMTknOwokbWFwWydoZWlnaHRTbGlkZU5vdGNoJ10gPSAnNyc7CgovKiBTbGlkZVNlbCAqLwokbWFwWydpbWFnZVNsaWRlU2VsJ10gPSAnU2xpZGVTZWwucG5nJzsKJG1hcFsnd2lkdGhTbGlkZVNlbCddID0gJzE5JzsKJG1hcFsnaGVpZ2h0U2xpZGVTZWwnXSA9ICc3JzsKCi8qIHpvb21Db250cm9sIHBvc2l0aW9uICovCiRtYXBbJ3BhZFRvcHpvb21Db250cm9sJ10gPSAnOTUnOwokbWFwWydwYWRMZWZ0em9vbUNvbnRyb2wnXSA9ICcyNSc7CgovKiBtYXBUeXBlcyAqLwokbWFwWydsaW5rVHlwZUNvbG9yJ10gPSAnRkZGRkZGJzsKJG1hcFsnaW1hZ2VUeXBlQkcnXSA9ICdUeXBlQkcucG5nJzsKCi8qIG1hcFR5cGVNYXAgKi8KJG1hcFsnd2lkdGhUeXBlTWFwJ10gPSAnNjAnOwokbWFwWydwYWRUb3BUeXBlTWFwJ10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlTWFwJ10gPSAnMjkwJzsKCi8qIG1hcFR5cGVTYXQgKi8KJG1hcFsnd2lkdGhUeXBlU2F0J10gPSAnMTAwJzsKJG1hcFsncGFkVG9wVHlwZVNhdCddID0gJzAnOwokbWFwWydwYWRMZWZ0VHlwZVNhdCddID0gJzM0MCc7CgovKiBtYXBUeXBlSHliICovCiRtYXBbJ3dpZHRoVHlwZUh5YiddID0gJzc1JzsKJG1hcFsncGFkVG9wVHlwZUh5YiddID0gJzAnOwokbWFwWydwYWRMZWZ0VHlwZUh5YiddID0gJzQzMCc7CgovKiBHeE1hZ25pZmllciBsb2NhdGlvbiAqLwokbWFwWydHeFBvc1knXSA9ICcxMCc7CiRtYXBbJ0d4UG9zWCddID0gJzQnOwo/Pgo=');
expand_3537250845($outputDir, 'templates/controls/barrow/Center.png', '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');
expand_3537250845($outputDir, 'templates/controls/barrow/CenterBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/barrow/East.png', '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');
expand_3537250845($outputDir, 'templates/controls/barrow/North.png', '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');
expand_3537250845($outputDir, 'templates/controls/barrow/SlideNotch.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAB8UlEQVR42mJULvnygZmZmYuT5e8rXk4mtsPVnGIMRIDGBa8fPf7AxHju7jfGp4e33/j08FASQACxMDAxsDCxsLIyMjOLcHP8+9+85d9fDmaG/6WeTCzImucd+fePmYmBgZuVkYGJkYFRU1voH8vTv38vPPr9g4GBif3PP9bfAAEYkIMbgGAwAKNf/7YqTRpnF0vY0S42sIMNjCAcBCEqLe/4TLyvx5XOx2RcCIpphraBbiB7C1qBK2A7hbqC5YD3v3XX0o9KTLYZMjpZ+QQQy9+vzz4JygoKfPjGyPAPqOj1VwaG3dcZGBiZIC768RuoFCj+/x8Dw18g/gfU+vMPA8MvoDgrJxPD/x9A8/7//8fCIMIOEEAs3z5/2Pz749tUJUlRdk4WRgYuoO0gc1iZGYD+B2pm/M/wH2jaX6hhf/4CxYAm/gHa/OPHf4bXLz79/P/t8bnv3w59AAggRmbJ2Zw8bMzuioby8Xoe5q7MbOzcgsIsDNw8DAxcHEAvAr3KwAhxybfvDAxfgN78+PY3w4tbTz4+PH/k0OPz21Z8fnN689+/dz4DBBAj0Ilg7zAyxrNy873TE5ExMRaVF9HhFxUW5xOU4Obi4WEDhcm3b19/f3734uv7F+9evX744uabxwdOffv66uL//zd+wCIJIMAAOlq/zDkjNQsAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/barrow/SlideSel.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAgUlEQVR42mLUqP7zn4EK4MHUeHmAAGJioBL484/1N0AAUc0w5n+sTAABRDXDWBhE2AECiGqGff926ANAADEyS87m5GFjdlc0lI//oW0fQKohz2fHRH9+c3rzv3/vPwMEECMDzxQGhq9fGBj+X2PVqJ73i1TDrrcwMzIy8oE9ChBgAA7KIYCmIecgAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/barrow/South.png', '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');
expand_3537250845($outputDir, 'templates/controls/barrow/TypeBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/barrow/West.png', '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');
expand_3537250845($outputDir, 'templates/controls/barrow/ZoomIn.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAADGUlEQVR4nIWSb2jUdRzHX5/f7/u7v7+727WYrj+jpJU9kASLVNhmkFpgIFIgphDcBkFR3KPalHBqNiIimlQ+aEQUBDZq1soMXK5oiWu5cp06J5vMtrm7tbvb7n737/ftwVYsCHo//fB58XrwUlprRMQ40Nq6d9PmTc0Vn72qIF5lmkbGWJj78dOe3s61p94pPLom8kNZy8I3qfmHDo3oDMtTImIeaGuLP/Ps869ddkR5QlGClsJxShgFZ/2hLdt2HT//8ekNAd9tyh/k+PX5JhH5SmtdAVCNDQ0PPLVn7+ELJZ+6dXUUy10i+2yTStDLeFFWPxY/8rTR9RJ4/TguFiD/GMRisZZyuManglE8gDbADC0dBaEIZKO1ZklMPK4mV8EADBERADU9Nfvg2kAVQQP8JhQtWPzpHN7tGzF9YHvBDoFbV0sRzf76W0603ysIMFUofKumpmcjYb+JJRAwQEzIDfSwuRq4wwfKQ8UXRCwPIGwIhxBDcF1NRbuN6tLlK9N27s/6SDRKvgJBDXXxo5yxLAyPn8VSmdRQP09ODoPl5fDYjdMBw5pWIu6lbGlQ/fLrSM9A33cNT+zcQdG08AkEgI3PteMWy0xkHIYTV/IBPejHDHBuzu3uu1noB8pAQc38Mfrl/oMdWxey6e2Nj2xh1d134QWS6QwXBs/T9ckJAhNXBamAIUQs0sANoAS4Crg5mhhsaz96bEa93rmrpjpih0M2qbl0+erY6G/z87k1b77SGuHMAG5+EdchBThAWWutFZBFu9cmxn4+ImJ8kK65c52IEUzNTk66ldJ1YP1HQzMHww/Hq0LV1Vl73YLDux1aa60BlNa6LCJZoKC1m0zOTCQAc1mxAowPnXwr1dm0770XXtwd2laXPHl72N4pIt//bcBylnkRKQDGcmnLTZID3Td89sP4G4uZYy2x5ug9993f29i0dYeI9CtWTGvtrnhcqlHEAeaArxODn7/8tlPqaIk123v2NXf/nhh5/F+A/5rWWq+AdI9f7HXf71KvhmyqCkWp/1/ACkgeSAKfXbv4RRKoRbv9fwFP51SeMK9itgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/barrow/ZoomOut.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC70lEQVR4nIWSWUhUYRTH/+feb5Y7buNUmlbUWxuhlFlElKitlBmGSESLrQ+tDxUR2PJSVJRRYURkULRSiRFYkGhlq7lV5la22CI13hmdmebeuff7enCSFqrzcuCc8/9x+J/DhBAgImnHjp2LUlJTVwglMl4nG5Ml6oZPvV9xq+xIYeHBJvwlGBFZNm/ZujltdtZuf4RLtkTHwmGxQtd0iIAvOW/poAX5+ctzi4tP3RVC8D8AGRkZKXNycgu6nImyMy4elnDDbreDR0Ui0MXiFi9Zdvz06eI0AJ1/AHIW5K7mkS4bc8XDKvUWJRHOsgQeFQ3X4KEj8vLy0onoCgDjF4AvoI0jRzQcMqDIQEgA1toKOPcuhsU0+wb3A+f2z0j8SSqg6sYD5narMTaJw2YFHDKgcSDiTT1iIGC3sL95BwAIcZ7Kmpub3VK3e0hsnAsmSZBlIGr+SvQQ4DNC8Pt88HZ+FI9LL92zSeT/ISaAV3v0Zlb9pLq87tGj5AxnFET/BNgZwWF1wLpwA/RAEB+aGnHh7Jmmww3eQgAeAByAAGACCLCOdy3Xi4pOTvoW8E8cOz4FcYmJMJgMj+pBy8tG3KmshOrxKwMTBnd8/tTRGhYiDOEMQFtDbdWeo37/mgEDStL6u5yKotihqh7zVVtr+zfNSFi7qWDY5KnTTzyre5pTdGxfe1gMIYRgAL5wzmvammr2vm6RrsbExo+UJEnxer52GiHtvSTJo8pu3lo1f15W0oRJUyrtijL30IFddUIIAQBMCKERUScAH+e8XXV/qgLAAAQBGJyb9VW3L7pNgxdkZ88dNHJ0Uvm6jdtziKhCCMFZeJUQEXkB+ADIvSb3mdXFTV1/WHnZHjKMbbNmznQOHzGmND1zdjYRlfcdOryS8funEVEPgHfc1K/V3C+JCGqh9dMyMyPS0mddamx8Puffn9IL5mHIW9PQzr+ovsH1oLZOUSg6qJmj/wv4CeIF0M5N7WJLQ5lKstSPG6HH3wFawVVKQ7IuVAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/barrow/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICdjZW50ZXIucG5nJzsKJG1hcFsnd2lkdGhDJ10gPSAnMTEnOwokbWFwWydoZWlnaHRDJ10gPSAnMTEnOwokbWFwWydwYWRUb3BDJ10gPSAnMjgnOwokbWFwWydwYWRMZWZ0QyddID0gJzI1JzsKCi8qIENlbnRlciBCYWNrZ3JvdW5kICovCiRtYXBbJ2ltYWdlQ2VudGVyQkcnXSA9ICdjZW50ZXJCRy5wbmcnOwokbWFwWyd3aWR0aENCRyddID0gJzUwJzsKJG1hcFsnaGVpZ2h0Q0JHJ10gPSAnNTAnOwokbWFwWydwYWRUb3BDQkcnXSA9ICcxMCc7CiRtYXBbJ3BhZExlZnRDQkcnXSA9ICc1JzsKCi8qIE5vcnRoICovCiRtYXBbJ2ltYWdlTm9ydGgnXSA9ICdub3J0aC5wbmcnOwokbWFwWyd3aWR0aE4nXSA9ICcyMyc7CiRtYXBbJ2hlaWdodE4nXSA9ICcyMyc7CiRtYXBbJ3BhZFRvcE4nXSA9ICcxMCc7CiRtYXBbJ3BhZExlZnROJ10gPSAnMTgnOwoKLyogU291dGggKi8KJG1hcFsnaW1hZ2VTb3V0aCddID0gJ3NvdXRoLnBuZyc7CiRtYXBbJ3dpZHRoUyddID0gJzIzJzsKJG1hcFsnaGVpZ2h0UyddID0gJzIzJzsKJG1hcFsncGFkVG9wUyddID0gJzM4JzsKJG1hcFsncGFkTGVmdFMnXSA9ICcxOCc7CgovKiBFYXN0ICovCiRtYXBbJ2ltYWdlRWFzdCddID0gJ2Vhc3QucG5nJzsKJG1hcFsnd2lkdGhFJ10gPSAnMjMnOwokbWFwWydoZWlnaHRFJ10gPSAnMjMnOwokbWFwWydwYWRUb3BFJ10gPSAnMjUnOwokbWFwWydwYWRMZWZ0RSddID0gJzM1JzsKCi8qIFdlc3QgKi8KJG1hcFsnaW1hZ2VXZXN0J10gPSAnd2VzdC5wbmcnOwokbWFwWyd3aWR0aFcnXSA9ICcyMyc7CiRtYXBbJ2hlaWdodFcnXSA9ICcyMyc7CiRtYXBbJ3BhZFRvcFcnXSA9ICcyNSc7CiRtYXBbJ3BhZExlZnRXJ10gPSAnMic7CgovKiBab29tSW4gKi8KJG1hcFsnaW1hZ2VJbiddID0gJ3pvb20taW4ucG5nJzsKJG1hcFsnd2lkdGhJbiddID0gJzE5JzsKJG1hcFsnaGVpZ2h0SW4nXSA9ICcxNic7CiRtYXBbJ3BhZFRvcEluJ10gPSAnNjUnOwokbWFwWydwYWRMZWZ0SW4nXSA9ICcxNSc7CgovKiBab29tT3V0ICovCiRtYXBbJ2ltYWdlT3V0J10gPSAnem9vbS1vdXQucG5nJzsKJG1hcFsnd2lkdGhPdXQnXSA9ICcxOSc7CiRtYXBbJ2hlaWdodE91dCddID0gJzE2JzsKJG1hcFsncGFkVG9wT3V0J10gPSAnMjIwJzsKJG1hcFsncGFkTGVmdE91dCddID0gJzE1JzsKCi8qIFNsaWRlTm90Y2ggKi8KJG1hcFsnaW1hZ2VTbGlkZU5vdGNoJ10gPSAnU2xpZGVOb3RjaC5wbmcnOwokbWFwWyd3aWR0aFNsaWRlTm90Y2gnXSA9ICcxOSc7CiRtYXBbJ2hlaWdodFNsaWRlTm90Y2gnXSA9ICc3JzsKCi8qIFNsaWRlU2VsICovCiRtYXBbJ2ltYWdlU2xpZGVTZWwnXSA9ICdTbGlkZVNlbC5wbmcnOwokbWFwWyd3aWR0aFNsaWRlU2VsJ10gPSAnMTknOwokbWFwWydoZWlnaHRTbGlkZVNlbCddID0gJzcnOwoKLyogem9vbUNvbnRyb2wgcG9zaXRpb24gKi8KJG1hcFsncGFkVG9wem9vbUNvbnRyb2wnXSA9ICc3NSc7CiRtYXBbJ3BhZExlZnR6b29tQ29udHJvbCddID0gJzE1JzsKCi8qIG1hcFR5cGVzICovCiRtYXBbJ2xpbmtUeXBlQ29sb3InXSA9ICdGRkZGRkYnOwokbWFwWydpbWFnZVR5cGVCRyddID0gJ1R5cGVCRy5wbmcnOwoKLyogbWFwVHlwZU1hcCAqLwokbWFwWyd3aWR0aFR5cGVNYXAnXSA9ICc2MCc7CiRtYXBbJ3BhZFRvcFR5cGVNYXAnXSA9ICcwJzsKJG1hcFsncGFkTGVmdFR5cGVNYXAnXSA9ICcyOTAnOwoKLyogbWFwVHlwZVNhdCAqLwokbWFwWyd3aWR0aFR5cGVTYXQnXSA9ICcxMDAnOwokbWFwWydwYWRUb3BUeXBlU2F0J10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlU2F0J10gPSAnMzQwJzsKCi8qIG1hcFR5cGVIeWIgKi8KJG1hcFsnd2lkdGhUeXBlSHliJ10gPSAnNzUnOwokbWFwWydwYWRUb3BUeXBlSHliJ10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlSHliJ10gPSAnNDMwJzsKCi8qIEd4TWFnbmlmaWVyIGxvY2F0aW9uICovCiRtYXBbJ0d4UG9zWSddID0gJzQnOwokbWFwWydHeFBvc1gnXSA9ICc0JzsKPz4K');
expand_3537250845($outputDir, 'templates/controls/bblue/Center.png', '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');
expand_3537250845($outputDir, 'templates/controls/bblue/CenterBG.png', 'iVBORw0KGgoAAAANSUhEUgAAADcAAAA3CAYAAACo29JGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAJA0lEQVR42uRaTWwbxxV+b3ZJakmKXIoiuZIFEZZqy0lT5+DWPzXaxH8w7NpJAAcIkF7aS1Gg5yJtj0UQoKfeeuixKFCgQeUaDQxZcoM4DRo7tuEWaBpZjixRsShBorzk7pY/y92dHsJh1uvZJU1LsusO8LCzw+Hs++a9efPmvUFKKTyrhcAzXJ5pcOIWjYutsUMtElpt7kIBwAYACwDM1pM+9eDW1tbo6urqC5Zl7aOU7kLENCKGEZEBpI7jmJRSFRHvEkJu5XK5G0NDQ9amzvBmGRTDMMILCwsnKKUHS6VSWlXVCcdx9giCMIyIQAiBr7AB2LYNlFJwHGcNAOZkWf5scHBwgxDyyejo6LQsy/954uB0XU+vrKy8VCqVvnX37t2zoVDo65IkQV9fH4iiCIIgACFfLm0Gjn2TUgqWZYFlWWCaJlSrVTBNc350dPSCoihXM5nMR6lUamXbwWmaFtE07cVCoXBubm7ux4kvC4iiCISQNiEiICJQSh8Ax9pa0gNKKdi2DbZtg6ZpUKlUzHw+/9vdu3f/MR6P35Rlubot4DRNG7p58+axpaWlt2OxWD6ZTLalBABccH6SY+Acx2mrq+M4YFkWaJoGhmFsKIryiwMHDlySZbmwpeBqtdrQ5cuX39Z1/YepVAojkQggIgiC0FZBNzCvSrZNZeu7TGpe6THApmlCuVwGURT/dPr06Z9KkrSEiPZmgxMNw0hPTU1dQMQD8Xi8LS03MUC9SI7VGTgGtNlsQrVahXq9fvvkyZOvplKpz7sB2C04NAwjOzU1NSOK4vOSJAmhUAgEQWivsa2QHKvbtg2maUKj0XCq1WrxxIkTx9Pp9O1NAWfbtnL+/Pk/i6L4zWg0Krgl1g04LzA3wCDJWZbVBsfq9XodqtXqv8+ePXsuGo3OPha4er2uTE9Pv9NsNn8Qj8cxFAqBFxwP2FaBsywLDMMARJw8cuTIW8lk8vOefMtKpSJdvXr1pGEYbzBgblCMeG2dfnNPDO9/QRSLxaBer3/v+vXrr5RKpWhP7lez2fzG4uLiW7lcLsozHm6J+amlm3hrzr0HuvdC9u7tz56pVCpSLBZ/MjEx8SkAXHokcOVyOTs7O/tmLBZ7LhwOc2eat+aCrCVPLQkh4DgOF5zXELnbEBHi8fjYwsLC9yVJ+nRwcPBe12q5vr7+7bm5uTdkWW4z7wbhJzW/9RdEfuPx2t3/k2UZCoXCqWKxeKpryRmG0V8qlb6bTCaVIHXkMeBnTPzUkhkRtxp6pc0MDyK2PRlKKYiiCIlEYrBSqbysadq7iUSi3FFyi4uL35mfnz+RSCQCAXhns5t6r315UiWEQH9/PxSLxQO3b98+1VEtWyb5UCgUekEUxQckwFMpd7vXgPRKQd/wUigUgnA4PA4AR5lU/dSSlEolWF9fT0ej0Y4D+6lhkOvlVjX3ycCtql51FAShXSeEPGCICCEgSRLouj6wtrYmKoriAIDDk5y4urr6oqqqE5FIpGuD4DfbbknwpOMnLW9b0AQjIkQiEdB1PX/v3r2DboE9BK4VGtjjNut+DPoxtVlq6Z2IIGuLiHnLsg61YjZctQy1Yh45tn/5Df6oDHd9BgsAzFTZSy0DM4CIe4LACYg4QAgROm2mPOZ59U5rjuexdBrfBzxBxEwr0sZVSySEhNkxxc8z4O1FfnXeu1+foLagyXVpU9iNibfPEe8a82Nwu0rQxHnayf91ON1x7zF+e9B2Ft7pwK9rEDjqOE6TBUx5fiCv3okBHkN+G7Zfm3d8L7V4NplweNbSppSWKaUOA97t4Lwzmns9+AHkTVLQ+DxquYyUUrrRyj9wwVmIOO84TsmyrCyzQszNcXvvnZjoVt26JRaG8PvNtu0ypfROK6HCBdckhPyDUjpnWVY2FAo9FJ1idbapMmfVbVm3Apw71uIly7LAcZwlQsi1VsaIu+ZsRVFuyLL8mWmavoN5iffxTrPO69MLUUrBNE2IxWKLO3bs+Mitlg+By2QyzWw2u1GtVgNV4Wkhx3GgVqtBIpFQc7lcPWjNMT/tk0ajcceyrF2CIIBt24CI7SebNT+vgudJdDIobvX3kl+glqlkvV7/AhE/FEWxc5hhZGTkA1VVL62vr+9if+jkDLN3t+vWyXH2A8cD4gdO13VQFOXjsbGx97oKEMmyrCqKcqVSqZTcSYknTV5eWpmg8sDAwJV0Or3edWhvYGDg43w+P1kul38ky3JbJf2CPN4TM+94EmQp3bkCN/Ne6TGilIKmaaAoykw2m730SBHndDq9vHfv3t9pmrZomqbvR54UNRoN0DStODEx8XtFUeYfOeIsCMI/h4eHf6Wq6q9lWe7zO+6wpCMLMAmC0N4Le5Gcd32x1LK7XqlUzEwm85twOPxBT7mCVCplHD58+CIh5GKtVqPNZrM9OO+D7nfvk0dBv/H6sv61Wg0opR/u37//Qi6X0x4rhdVoNMYmJycvxmKxXZIkkaBwul+gqNssD88qusHV63Uol8vLZ86ceS2ZTN7YjOSjcP/+/fHp6em/SpI0Eo1GewLXTWbVTy3ZOlNV1Th27NhxRVGuI6KzKWljSqmoqur4zMzMpCiKz7ObC9sBjqWNDcNYPnr06Ou5XO4mIaS56Qn/crn83JUrV35Zq9Vel2UZIpGIb6LiccE5jgONRgMqlQoAwMzx48d/nkqlbnWS2GNd1SiVSl+7devWmZWVlZ/19/fn2FWNoBB7L1c1dF0HTdOMdDr9zr59+/6Sy+X+tS2XbFRV7dvY2Hi5WCyeKxQKb/b390eZqnoDut2AY08XKFtRlD/s3Lnz3UQi8X4mkzG2/XqUqqq5paWlV3RdP7S8vPxSOBwe6+vrg0gk8hBQr6V0eyKmaUKtVoNGo7GsKMr7sixfGxoaei+bzRZ65W3TLrZpmhabnZ19FRGPaJo2YBhGHhHzgiAMulXUKzHbtlXbtpfi8fhiMplUKaV/Gx8fn0yn0+Wn5taeu6ysrIjLy8sHLcs6hIh7EDGDiBHXnUtKKTUppRuU0juEkGvDw8N/HxkZqW4mH7hFITuEry6SssukhBNC9F4mdf4XwD21Qdlnpvx3AH+vstHx6jipAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/bblue/East.png', 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QcVAi4OtPusxAAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAACpklEQVQ4y42TW0hTAQCGv7Ozc3bR6bpsMbNSM+1qoFRUdE9FzULyIcgoIoqkp3qIqIcgeulNoisEQYUUUZQVBFKWD4JW5CU1EcOxqdt0udzFne2c04MPGXbxf//4+X/+X2DD3bfpkr4lMjEZS2r6FTprLzELCay9q56pLTLkOGXOX25ifEJ5g03ex4cT4X+BBkQJVTZTuS+PBzerKFjp3EkwNkDhrR3/AwVFMNAVAGuGg9t1lVTvX+0gHH/NmusX/gaKLD10VjCIUnauE09EJJKQqC7NwuVMEds+encm0ku3k1X1lKGG+O9g/uE+77fvJV+++M12p52xpJk+n8DuTQvYts5FZ08gK+gNHSW7qpXhF4O/wIH73aw4cm88ECnp7vA4JbOJiMlOSz/k5dg4uCcH/2g4tb/HV0PGXhX/y+apVqdre8NVFOXkouVLxPkr1xBTZYpXQXWhzvNn7Vy73crkpNKEVa4SZqTe9WoHsegjq90231awmbF4CkWL4XQFhLx+rtS9o38g4DHMrMscECWTomsQiuhowCcP1DWBT7Ngs5lAw/K7Y3nLOXMyerF4o1PuNy6jJ2DCYYcMB0y4B3A3t5AMhzoxGSumwANf0wiHG+al6lu3bMxkUFlA5xA45sC81CSjXR34uns1XU3coO3IqalyagY3MRl9nOkwunKXu+gdTcE3DgtdYFF/MNLRzcTwSAiDeoz31Y9/bbXGHbJapbTMLAeeoEgiCRlOUEMBfD19JKLRDlDLaSzzTk9lRJRsgiWNb6MiRhFcczXC3mGC7iFN14RbNJbU/mlyRkRZjyqCkGoHm5RgzD1CJBgKI8nHebK+/m9bNSLKgsUsImtx/O4gybjajiSX8TB/+F/vMCJJn+Px5NrYD0XRdfEO9dmnZnPkny72D7lCKy9SAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/bblue/North.png', 'iVBORw0KGgoAAAANSUhEUgAAABIAAAAOCAYAAAAi2ky3AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QcVAi0UYrQGfQAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAACgUlEQVQoz53SW0hTARzH8e852znrjOkWay1zWhYZWG41je4jGXSDkLAieykMiqCCXqKipF7qracYTeqph25E9KBiF8woI5AhzMlI09Fqa/NSzpVnc9vprYjKLr/nPx9+/PkJzJRavwU1F6SAglFaSc+h6O9OxRmh9PR9d5XN4V3rsPI508p/pdp3xuS+qgX6E1r3m5RmWnNdY0XLlX9r5PZ7mJo+f/HEaioq5xJUi9i4cwOCJhxh/a1dfwfVthTzSb2zr75SOtDo4l4I+iIwZ0kl85zLRXL5a3jbSv8MTWYeuKrn2i+d9vBoWCCUgLHPEE2CUlmDaC01Uyi0zQxV+86aTfKmy80eIlkjr95CNJZmMJIiMgqxlITmWAkGo5PtXb5fQ25/nZjJNTefWEvxwvl0vIZoMsuj208JdnRRJKqoU4CxGHF+FQi6wzT0Nv4I1fpNTEzdbmyokjZuXkZrHyRS8PJhgImRT6PZKTVW/iWM0wFaFgxz7Mi2MpF8oYV9QyXfoXT2gctVYtvftI6uYZF3KQi8GiISHMpjVPbkDcqWJy8/ZBdIcew2EAWwV5SiWGabKGjtADqcvnMWRWq6cGEbccFMfxwGBsbp6eimoNP5eL7bR+RmMre4KT869sVbtdSCiozVLFJeZiQ5kpmXd52yiXqEk0eP10GJjdAHiI9ME3jSQy6X7+PF7mPffvjYe2k8zbPBUIyy2TnsVli6SGbVKis6vf6gXimSlfD7NM9uhJlUdUSHE0yOfZxg1qytP01DUXbEktPhTH+ypHyhmfGkSE4T0SsGWaDG34ma9yBJoJcFDIqKbNhPZ/3dX65+7+t1iHI7glyETtaQDAKy1PsVV9/wKyBRbMIAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/bblue/SlideNotch.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAB8UlEQVR42mJULvnygZmZmYuT5e8rXk4mtsPVnGIMRIDGBa8fPf7AxHju7jfGp4e33/j08FASQACxMDAxsDCxsLIyMjOLcHP8+9+85d9fDmaG/6WeTCzImucd+fePmYmBgZuVkYGJkYFRU1voH8vTv38vPPr9g4GBif3PP9bfAAEYkIMbgGAwAKNf/7YqTRpnF0vY0S42sIMNjCAcBCEqLe/4TLyvx5XOx2RcCIpphraBbiB7C1qBK2A7hbqC5YD3v3XX0o9KTLYZMjpZ+QQQy9+vzz4JygoKfPjGyPAPqOj1VwaG3dcZGBiZIC768RuoFCj+/x8Dw18g/gfU+vMPA8MvoDgrJxPD/x9A8/7//8fCIMIOEEAs3z5/2Pz749tUJUlRdk4WRgYuoO0gc1iZGYD+B2pm/M/wH2jaX6hhf/4CxYAm/gHa/OPHf4bXLz79/P/t8bnv3w59AAggRmbJ2Zw8bMzuioby8Xoe5q7MbOzcgsIsDNw8DAxcHEAvAr3KwAhxybfvDAxfgN78+PY3w4tbTz4+PH/k0OPz21Z8fnN689+/dz4DBBAj0Ilg7zAyxrNy873TE5ExMRaVF9HhFxUW5xOU4Obi4WEDhcm3b19/f3734uv7F+9evX744uabxwdOffv66uL//zd+wCIJIMAAOlq/zDkjNQsAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/bblue/SlideSel.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAgUlEQVR42mLUqP7zn4EK4MHUeHmAAGJioBL484/1N0AAUc0w5n+sTAABRDXDWBhE2AECiGqGff926ANAADEyS87m5GFjdlc0lI//oW0fQKohz2fHRH9+c3rzv3/vPwMEECMDzxQGhq9fGBj+X2PVqJ73i1TDrrcwMzIy8oE9ChBgAA7KIYCmIecgAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/bblue/South.png', 'iVBORw0KGgoAAAANSUhEUgAAABIAAAAOCAYAAAAi2ky3AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QcVAiw5PnBrSQAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAACpklEQVQoz42R228McQCFv5nfzmXtbqtdtraU7rq0SIWStO51qbpXPQjiEt48+AP4B8S7CBISDyLhzSUIUiqpS6vp7qZFg1o1mC6prcvMtjsznsSlNM7zd76c5EjMP9mM7SxDUcCnSmh+G1XbS3PjRf6W7T2LkNVrSGoIoXoomoSqdEqhxafzDRvnif6cn8+2oK/X5EPayKLrs7mzxfhNsrWzANf3NDyxKDq5vBAhZPKezJNex5Wtz0NW5cQg+3dXUls3ndqGGkLhokJy9vURayzrcmlEic6YFWF8NEDVTD9Bv0feyg0Jt2SDL9meXrF2yWTGFgf4mheohUUYPemIW7ZtHH0XrwGw+vah4kJlf+WCqaSzOq4Dg9kh2ts/MOxIJwXm1Ra7oGFZ7/NMbMf6OHlZwdP9OELn/bP0fKbtvEd8d1CXvPN1KypE8lOYwW+A4/Cyy8C28wnOlW2WAQiqjYnEu8zZM60sj7lMKoDqmjjlVXHBN+uCyFk3Vi2coKaHo5gZcD0wew2sTwNfkKV1AAKAt1eGiDW1dyXe76yYFBD1i0voy0KwJELfc2MMsi8kKmpIGT4kBZwBk3z/KxdV28eFmfd/igDeXXnllW7yHrYZK7csjTKjPIRpCYrLStGjUxjIB7AdcL4M4r1JgsQJLtUe/VEXv73Sf7UlV9BQl+jKlB/YGkfWFLKOiqZrCAlcZ5hsdxue/TXJzTWbfq3KIy4OaY2JVL956EgL9TGP2SUQDkBZBKyex7gfjSyyvP7Pmhghens5R6zpUSpp7oqGdbF95QQyDnQ86KHzVpuLru/hbtND/jtVxw8Hq094Hd2m1/pi0AvWnvaYe+rYv3BpVFnlsebqOZG6opDG7dbXKZ4cnPMv1DeqKKg0dXRnUrj4CWgbRkO/AzRFBpt7FpoUAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/bblue/TypeBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/bblue/West.png', 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QcVAi4eqUy8oAAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAACgElEQVQ4y42TS0hUARSGv/ucO69GLB0dzSBsfJQTZC2MMpMCKbSXFK1aRERFVJCz6L2JVu3EGmnRJqgIykWKiBSJ1aKHpUVRmJYlOtnM6Mxc587cmVaSJVn//uP8/znnF/hfVbSclUXBb3dq1khS6BH+CawOOJgy2rKcau3F0zUMjhtcbnmeFueFVgU28kMf9JXn1t64uoP6bV5MVQNJQZ7H2hmiiXONu1YoJ4+uRZetDATBEESQFGEuuLp1AdFEm12RappOrKOhfjmvx0RCKdBI8qxvAjRt+veMlYFqItO3l5Xkus/7qyn0euh8A3oG9FCYzrt9DA1FIji0A8Isa6dIJC/UbfYqTcer+ZKwce8liAqEPg3ztLsfPW4OYNfq6Kr7KlMZyCJu3NVkqebI4Soatq3kzguBrjdglQy+v+3ny7thE1W9wuPtR2fmyCRT/cUl7kL/sQ24CnLx34Lnn2GhJcbn173Ew1Pfsdp2073lwexUMmmsTqeFsbSV6w/hxQikgUgsg5AGSbEYpqQF/9yhQGVgMYnUfdnhqihaX4WzaCnfghAMQ1lOguLUB7qejBvTsu0C7VWXfoEzWnO9WZCUQ+7yUnHRCh8TUZlgCCo8sEQdo+fJCBNR4REORz03SyZ/P0f1nUbS0jVnfp4rz1eOLi3g6yi4s6B0UYyP70YZCaZG0WyNc391U0cBSO2KzeZzl3mRXDl8GwdFhsJsk5GhIPF4cvLvT761t0UQlYPZRR7R7s4nOCWSMkE148TCk5n527Gzby9IrfZsl8PlyWMqqRAN62QSevrftdrzPh9R7ZAtlpUudza6IRCPGhnhv4u8b6xZkNX9okVVTaRXPwFQPuXT+fRg1QAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/bblue/ZoomIn.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAADGUlEQVR4nIWSb2jUdRzHX5/f7/u7v7+727WYrj+jpJU9kASLVNhmkFpgIFIgphDcBkFR3KPalHBqNiIimlQ+aEQUBDZq1soMXK5oiWu5cp06J5vMtrm7tbvb7n737/ftwVYsCHo//fB58XrwUlprRMQ40Nq6d9PmTc0Vn72qIF5lmkbGWJj78dOe3s61p94pPLom8kNZy8I3qfmHDo3oDMtTImIeaGuLP/Ps869ddkR5QlGClsJxShgFZ/2hLdt2HT//8ekNAd9tyh/k+PX5JhH5SmtdAVCNDQ0PPLVn7+ELJZ+6dXUUy10i+2yTStDLeFFWPxY/8rTR9RJ4/TguFiD/GMRisZZyuManglE8gDbADC0dBaEIZKO1ZklMPK4mV8EADBERADU9Nfvg2kAVQQP8JhQtWPzpHN7tGzF9YHvBDoFbV0sRzf76W0603ysIMFUofKumpmcjYb+JJRAwQEzIDfSwuRq4wwfKQ8UXRCwPIGwIhxBDcF1NRbuN6tLlK9N27s/6SDRKvgJBDXXxo5yxLAyPn8VSmdRQP09ODoPl5fDYjdMBw5pWIu6lbGlQ/fLrSM9A33cNT+zcQdG08AkEgI3PteMWy0xkHIYTV/IBPejHDHBuzu3uu1noB8pAQc38Mfrl/oMdWxey6e2Nj2xh1d134QWS6QwXBs/T9ckJAhNXBamAIUQs0sANoAS4Crg5mhhsaz96bEa93rmrpjpih0M2qbl0+erY6G/z87k1b77SGuHMAG5+EdchBThAWWutFZBFu9cmxn4+ImJ8kK65c52IEUzNTk66ldJ1YP1HQzMHww/Hq0LV1Vl73YLDux1aa60BlNa6LCJZoKC1m0zOTCQAc1mxAowPnXwr1dm0770XXtwd2laXPHl72N4pIt//bcBylnkRKQDGcmnLTZID3Td89sP4G4uZYy2x5ug9993f29i0dYeI9CtWTGvtrnhcqlHEAeaArxODn7/8tlPqaIk123v2NXf/nhh5/F+A/5rWWq+AdI9f7HXf71KvhmyqCkWp/1/ACkgeSAKfXbv4RRKoRbv9fwFP51SeMK9itgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/bblue/ZoomOut.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC70lEQVR4nIWSWUhUYRTH/+feb5Y7buNUmlbUWxuhlFlElKitlBmGSESLrQ+tDxUR2PJSVJRRYURkULRSiRFYkGhlq7lV5la22CI13hmdmebeuff7enCSFqrzcuCc8/9x+J/DhBAgImnHjp2LUlJTVwglMl4nG5Ml6oZPvV9xq+xIYeHBJvwlGBFZNm/ZujltdtZuf4RLtkTHwmGxQtd0iIAvOW/poAX5+ctzi4tP3RVC8D8AGRkZKXNycgu6nImyMy4elnDDbreDR0Ui0MXiFi9Zdvz06eI0AJ1/AHIW5K7mkS4bc8XDKvUWJRHOsgQeFQ3X4KEj8vLy0onoCgDjF4AvoI0jRzQcMqDIQEgA1toKOPcuhsU0+wb3A+f2z0j8SSqg6sYD5narMTaJw2YFHDKgcSDiTT1iIGC3sL95BwAIcZ7Kmpub3VK3e0hsnAsmSZBlIGr+SvQQ4DNC8Pt88HZ+FI9LL92zSeT/ISaAV3v0Zlb9pLq87tGj5AxnFET/BNgZwWF1wLpwA/RAEB+aGnHh7Jmmww3eQgAeAByAAGACCLCOdy3Xi4pOTvoW8E8cOz4FcYmJMJgMj+pBy8tG3KmshOrxKwMTBnd8/tTRGhYiDOEMQFtDbdWeo37/mgEDStL6u5yKotihqh7zVVtr+zfNSFi7qWDY5KnTTzyre5pTdGxfe1gMIYRgAL5wzmvammr2vm6RrsbExo+UJEnxer52GiHtvSTJo8pu3lo1f15W0oRJUyrtijL30IFddUIIAQBMCKERUScAH+e8XXV/qgLAAAQBGJyb9VW3L7pNgxdkZ88dNHJ0Uvm6jdtziKhCCMFZeJUQEXkB+ADIvSb3mdXFTV1/WHnZHjKMbbNmznQOHzGmND1zdjYRlfcdOryS8funEVEPgHfc1K/V3C+JCGqh9dMyMyPS0mddamx8Puffn9IL5mHIW9PQzr+ovsH1oLZOUSg6qJmj/wv4CeIF0M5N7WJLQ5lKstSPG6HH3wFawVVKQ7IuVAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/bblue/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICdjZW50ZXIucG5nJzsKJG1hcFsnd2lkdGhDJ10gPSAnMTgnOwokbWFwWydoZWlnaHRDJ10gPSAnMTgnOwokbWFwWydwYWRUb3BDJ10gPSAnMzInOwokbWFwWydwYWRMZWZ0QyddID0gJzIxJzsKCi8qIENlbnRlciBCYWNrZ3JvdW5kICovCiRtYXBbJ2ltYWdlQ2VudGVyQkcnXSA9ICdjZW50ZXJCRy5wbmcnOwokbWFwWyd3aWR0aENCRyddID0gJzUwJzsKJG1hcFsnaGVpZ2h0Q0JHJ10gPSAnNTAnOwokbWFwWydwYWRUb3BDQkcnXSA9ICcxNSc7CiRtYXBbJ3BhZExlZnRDQkcnXSA9ICc1JzsKCi8qIE5vcnRoICovCiRtYXBbJ2ltYWdlTm9ydGgnXSA9ICdub3J0aC5wbmcnOwokbWFwWyd3aWR0aE4nXSA9ICcxOCc7CiRtYXBbJ2hlaWdodE4nXSA9ICcxNCc7CiRtYXBbJ3BhZFRvcE4nXSA9ICcxMCc7CiRtYXBbJ3BhZExlZnROJ10gPSAnMjEnOwoKLyogU291dGggKi8KJG1hcFsnaW1hZ2VTb3V0aCddID0gJ3NvdXRoLnBuZyc7CiRtYXBbJ3dpZHRoUyddID0gJzE4JzsKJG1hcFsnaGVpZ2h0UyddID0gJzE0JzsKJG1hcFsncGFkVG9wUyddID0gJzU3JzsKJG1hcFsncGFkTGVmdFMnXSA9ICcyMSc7CgovKiBFYXN0ICovCiRtYXBbJ2ltYWdlRWFzdCddID0gJ2Vhc3QucG5nJzsKJG1hcFsnd2lkdGhFJ10gPSAnMTQnOwokbWFwWydoZWlnaHRFJ10gPSAnMTgnOwokbWFwWydwYWRUb3BFJ10gPSAnMzInOwokbWFwWydwYWRMZWZ0RSddID0gJzQ1JzsKCi8qIFdlc3QgKi8KJG1hcFsnaW1hZ2VXZXN0J10gPSAnd2VzdC5wbmcnOwokbWFwWyd3aWR0aFcnXSA9ICcxNCc7CiRtYXBbJ2hlaWdodFcnXSA9ICcxOCc7CiRtYXBbJ3BhZFRvcFcnXSA9ICczMic7CiRtYXBbJ3BhZExlZnRXJ10gPSAnMic7CgovKiBab29tSW4gKi8KJG1hcFsnaW1hZ2VJbiddID0gJ3pvb20taW4ucG5nJzsKJG1hcFsnd2lkdGhJbiddID0gJzE2JzsKJG1hcFsnaGVpZ2h0SW4nXSA9ICcxNic7CiRtYXBbJ3BhZFRvcEluJ10gPSAnNTUnOwokbWFwWydwYWRMZWZ0SW4nXSA9ICcyJzsKCi8qIFpvb21PdXQgKi8KJG1hcFsnaW1hZ2VPdXQnXSA9ICd6b29tLW91dC5wbmcnOwokbWFwWyd3aWR0aE91dCddID0gJzE2JzsKJG1hcFsnaGVpZ2h0T3V0J10gPSAnMTYnOwokbWFwWydwYWRUb3BPdXQnXSA9ICc1NSc7CiRtYXBbJ3BhZExlZnRPdXQnXSA9ICc0NSc7CgovKiBTbGlkZU5vdGNoICovCiRtYXBbJ2ltYWdlU2xpZGVOb3RjaCddID0gJ2JsYW5rLmdpZic7CiRtYXBbJ3dpZHRoU2xpZGVOb3RjaCddID0gJzAnOwokbWFwWydoZWlnaHRTbGlkZU5vdGNoJ10gPSAnMCc7CgovKiBTbGlkZVNlbCAqLwokbWFwWydpbWFnZVNsaWRlU2VsJ10gPSAnYmxhbmsuZ2lmJzsKJG1hcFsnd2lkdGhTbGlkZVNlbCddID0gJzAnOwokbWFwWydoZWlnaHRTbGlkZVNlbCddID0gJzAnOwoKLyogem9vbUNvbnRyb2wgcG9zaXRpb24gKi8KJG1hcFsncGFkVG9wem9vbUNvbnRyb2wnXSA9ICc2NSc7CiRtYXBbJ3BhZExlZnR6b29tQ29udHJvbCddID0gJzE3JzsKCi8qIG1hcFR5cGVzICovCiRtYXBbJ2xpbmtUeXBlQ29sb3InXSA9ICcwMDAwMDAnOwokbWFwWydpbWFnZVR5cGVCRyddID0gJ1R5cGVCRy5wbmcnOwoKLyogbWFwVHlwZU1hcCAqLwokbWFwWyd3aWR0aFR5cGVNYXAnXSA9ICc2MCc7CiRtYXBbJ3BhZFRvcFR5cGVNYXAnXSA9ICcwJzsKJG1hcFsncGFkTGVmdFR5cGVNYXAnXSA9ICcyOTAnOwoKLyogbWFwVHlwZVNhdCAqLwokbWFwWyd3aWR0aFR5cGVTYXQnXSA9ICcxMDAnOwokbWFwWydwYWRUb3BUeXBlU2F0J10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlU2F0J10gPSAnMzQwJzsKCi8qIG1hcFR5cGVIeWIgKi8KJG1hcFsnd2lkdGhUeXBlSHliJ10gPSAnNzUnOwokbWFwWydwYWRUb3BUeXBlSHliJ10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlSHliJ10gPSAnNDMwJzsKCi8qIEd4TWFnbmlmaWVyIGxvY2F0aW9uICovCiRtYXBbJ0d4UG9zWSddID0gJzUnOwokbWFwWydHeFBvc1gnXSA9ICc1JzsKPz4K');
expand_3537250845($outputDir, 'templates/controls/dteal/SlideNotch.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAB7klEQVR42mJU/pLxgZmZmYvzL+srXiZOtsOcbWIMRIDG1+sePWZ6w3ju2x3Gp9uf3fh06EESQACxMDD8Y2FiZWVlZGYW4f7H8b/536q/HAzs/0uZ/FmQNc/7t/cfMwMTAzcjF5BkZNQUEv/H8pfh74Xfd38wMDGy/2Fl/A0QgGE4uAEIBgMw+vVvq9XEwdHZCHa0ixjEDhZw4UAipEQ1L888V4zOFeExn6uUZ2aho6VnTAGPzly+y01DzcrBS2TTpwxqEmN1IoG2pfwCiOXvs6+fBAVFBT4w/mD4x/CX4TXDB4bdDBcZGEEqgOAHw28g6x+Y9xdIg1g/gYb9ArJYmYA8JiaW/////2MREWEHCCCWbx++bv799neqkqg4OyfQZVwMbEBvMDGwMrAAITPDv/9/GP4zQgwC4T8gA///Z/jD+Jfhx3+g5Z9+/Pz/+PO574fufgAIIJZPtwTKbt79uveXPGu8njm3KzM7G7cgCxsDN9BALqCR7IygoPsPdMlfhm9Ao74A6Y9//jC8ePL548Mjjw493nZtxefT9zb/vfP0M0AAMQKdCPYOY7wLK/e7z3oiJsrGoiLcOvzCPOJ8EkLcXDycbAxANd++fvv9+cWHr+/ffX31+sXnm28OXD317dX7i/9vPP4BiySAAAMAEUPID8K0mbAAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/dteal/SlideSel.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAp0lEQVR42mJksLf9z3DwMANFwN6WgUNSTh4ggFhAbI0/R7GqucFijSGGTe0N5wqGP6ysvwECiAWfhbgswQaYGViZAAKIiYFKgIVPhB0ggBjBYQZzyd4Okg0BeREEmL78EwYIICbmmBgu/pjEQIO6og0wCVIM4heTjma6/4zv75kj7wACiIGhZwrD//9AxwXGsYot6wS5kmjMmR71P2nCJAuQfhAGCDAAdmU9U2QdF4cAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/dteal/TypeBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/dteal/ZoomIn.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAADGUlEQVR4nIWSb2jUdRzHX5/f7/u7v7+727WYrj+jpJU9kASLVNhmkFpgIFIgphDcBkFR3KPalHBqNiIimlQ+aEQUBDZq1soMXK5oiWu5cp06J5vMtrm7tbvb7n737/ftwVYsCHo//fB58XrwUlprRMQ40Nq6d9PmTc0Vn72qIF5lmkbGWJj78dOe3s61p94pPLom8kNZy8I3qfmHDo3oDMtTImIeaGuLP/Ps869ddkR5QlGClsJxShgFZ/2hLdt2HT//8ekNAd9tyh/k+PX5JhH5SmtdAVCNDQ0PPLVn7+ELJZ+6dXUUy10i+2yTStDLeFFWPxY/8rTR9RJ4/TguFiD/GMRisZZyuManglE8gDbADC0dBaEIZKO1ZklMPK4mV8EADBERADU9Nfvg2kAVQQP8JhQtWPzpHN7tGzF9YHvBDoFbV0sRzf76W0603ysIMFUofKumpmcjYb+JJRAwQEzIDfSwuRq4wwfKQ8UXRCwPIGwIhxBDcF1NRbuN6tLlK9N27s/6SDRKvgJBDXXxo5yxLAyPn8VSmdRQP09ODoPl5fDYjdMBw5pWIu6lbGlQ/fLrSM9A33cNT+zcQdG08AkEgI3PteMWy0xkHIYTV/IBPejHDHBuzu3uu1noB8pAQc38Mfrl/oMdWxey6e2Nj2xh1d134QWS6QwXBs/T9ckJAhNXBamAIUQs0sANoAS4Crg5mhhsaz96bEa93rmrpjpih0M2qbl0+erY6G/z87k1b77SGuHMAG5+EdchBThAWWutFZBFu9cmxn4+ImJ8kK65c52IEUzNTk66ldJ1YP1HQzMHww/Hq0LV1Vl73YLDux1aa60BlNa6LCJZoKC1m0zOTCQAc1mxAowPnXwr1dm0770XXtwd2laXPHl72N4pIt//bcBylnkRKQDGcmnLTZID3Td89sP4G4uZYy2x5ug9993f29i0dYeI9CtWTGvtrnhcqlHEAeaArxODn7/8tlPqaIk123v2NXf/nhh5/F+A/5rWWq+AdI9f7HXf71KvhmyqCkWp/1/ACkgeSAKfXbv4RRKoRbv9fwFP51SeMK9itgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/dteal/ZoomOut.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC70lEQVR4nIWSWUhUYRTH/+feb5Y7buNUmlbUWxuhlFlElKitlBmGSESLrQ+tDxUR2PJSVJRRYURkULRSiRFYkGhlq7lV5la22CI13hmdmebeuff7enCSFqrzcuCc8/9x+J/DhBAgImnHjp2LUlJTVwglMl4nG5Ml6oZPvV9xq+xIYeHBJvwlGBFZNm/ZujltdtZuf4RLtkTHwmGxQtd0iIAvOW/poAX5+ctzi4tP3RVC8D8AGRkZKXNycgu6nImyMy4elnDDbreDR0Ui0MXiFi9Zdvz06eI0AJ1/AHIW5K7mkS4bc8XDKvUWJRHOsgQeFQ3X4KEj8vLy0onoCgDjF4AvoI0jRzQcMqDIQEgA1toKOPcuhsU0+wb3A+f2z0j8SSqg6sYD5narMTaJw2YFHDKgcSDiTT1iIGC3sL95BwAIcZ7Kmpub3VK3e0hsnAsmSZBlIGr+SvQQ4DNC8Pt88HZ+FI9LL92zSeT/ISaAV3v0Zlb9pLq87tGj5AxnFET/BNgZwWF1wLpwA/RAEB+aGnHh7Jmmww3eQgAeAByAAGACCLCOdy3Xi4pOTvoW8E8cOz4FcYmJMJgMj+pBy8tG3KmshOrxKwMTBnd8/tTRGhYiDOEMQFtDbdWeo37/mgEDStL6u5yKotihqh7zVVtr+zfNSFi7qWDY5KnTTzyre5pTdGxfe1gMIYRgAL5wzmvammr2vm6RrsbExo+UJEnxer52GiHtvSTJo8pu3lo1f15W0oRJUyrtijL30IFddUIIAQBMCKERUScAH+e8XXV/qgLAAAQBGJyb9VW3L7pNgxdkZ88dNHJ0Uvm6jdtziKhCCMFZeJUQEXkB+ADIvSb3mdXFTV1/WHnZHjKMbbNmznQOHzGmND1zdjYRlfcdOryS8funEVEPgHfc1K/V3C+JCGqh9dMyMyPS0mddamx8Puffn9IL5mHIW9PQzr+ovsH1oLZOUSg6qJmj/wv4CeIF0M5N7WJLQ5lKstSPG6HH3wFawVVKQ7IuVAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/dteal/center.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAABZ0lEQVR42mL8//8/A7UAQACx4JJIPznVBUipAbEMEAsC8XsgfgLEt4D4ykzz7BfoegACiBGby4AG1QApWTyOeAzEh4AGHkIWBAggJjRDvIF4BrpBs8pXpqEZBpKPAqlHFgQIICYkg+yAlC/ItUQGEUidL1QfGAAEEBOQwwjEEkC2HbpB6C7C4kJGqD4wAAggcJhBAzsUm/XIBqR1hs/C4crVwPDbAxBAMG+qETIA2SAsLgTrBwggmGEyyDIgjbhcBBLH4kKwfoAAgnlzOshgLDYSchFM/h/Qm5kAAQQzrA0oIIzuVWxhhEP8LdCwKoAAgnnzCT4N6F7G4kKwfoAAompsAgQQOJ2B8ho0i+D0Eg4XwbIWSD8DQADB8yY0JUdhywG4wg8IQJqXwfIoQADBsxNUYDNUATEApG4zcmYHCCCMUgPqQjtySg2AAMJVBIHyqg6p5RlAADGADEPHaSemMGITJyQPEGAA8mrsaCNYZu8AAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/dteal/centerBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/dteal/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICdjZW50ZXIucG5nJzsKJG1hcFsnd2lkdGhDJ10gPSAnMTknOwokbWFwWydoZWlnaHRDJ10gPSAnMTknOwokbWFwWydwYWRUb3BDJ10gPSAnMjMnOwokbWFwWydwYWRMZWZ0QyddID0gJzIyJzsKCi8qIENlbnRlciBCYWNrZ3JvdW5kICovCiRtYXBbJ2ltYWdlQ2VudGVyQkcnXSA9ICdibGFuay5naWYnOwokbWFwWyd3aWR0aENCRyddID0gJzEnOwokbWFwWydoZWlnaHRDQkcnXSA9ICcxJzsKJG1hcFsncGFkVG9wQ0JHJ10gPSAnMTAnOwokbWFwWydwYWRMZWZ0Q0JHJ10gPSAnOSc7CgovKiBOb3J0aCAqLwokbWFwWydpbWFnZU5vcnRoJ10gPSAnbm9ydGgucG5nJzsKJG1hcFsnd2lkdGhOJ10gPSAnMTgnOwokbWFwWydoZWlnaHROJ10gPSAnMTQnOwokbWFwWydwYWRUb3BOJ10gPSAnNSc7CiRtYXBbJ3BhZExlZnROJ10gPSAnMjMnOwoKLyogU291dGggKi8KJG1hcFsnaW1hZ2VTb3V0aCddID0gJ3NvdXRoLnBuZyc7CiRtYXBbJ3dpZHRoUyddID0gJzE4JzsKJG1hcFsnaGVpZ2h0UyddID0gJzE0JzsKJG1hcFsncGFkVG9wUyddID0gJzQ2JzsKJG1hcFsncGFkTGVmdFMnXSA9ICcyMyc7CgovKiBFYXN0ICovCiRtYXBbJ2ltYWdlRWFzdCddID0gJ2Vhc3QucG5nJzsKJG1hcFsnd2lkdGhFJ10gPSAnMTQnOwokbWFwWydoZWlnaHRFJ10gPSAnMTgnOwokbWFwWydwYWRUb3BFJ10gPSAnMjQnOwokbWFwWydwYWRMZWZ0RSddID0gJzQ1JzsKCi8qIFdlc3QgKi8KJG1hcFsnaW1hZ2VXZXN0J10gPSAnd2VzdC5wbmcnOwokbWFwWyd3aWR0aFcnXSA9ICcxNCc7CiRtYXBbJ2hlaWdodFcnXSA9ICcxOCc7CiRtYXBbJ3BhZFRvcFcnXSA9ICcyNCc7CiRtYXBbJ3BhZExlZnRXJ10gPSAnNSc7CgovKiBab29tSW4gKi8KJG1hcFsnaW1hZ2VJbiddID0gJ3pvb20taW4ucG5nJzsKJG1hcFsnd2lkdGhJbiddID0gJzE5JzsKJG1hcFsnaGVpZ2h0SW4nXSA9ICcxNic7CiRtYXBbJ3BhZFRvcEluJ10gPSAnNjUnOwokbWFwWydwYWRMZWZ0SW4nXSA9ICcxNSc7CgovKiBab29tT3V0ICovCiRtYXBbJ2ltYWdlT3V0J10gPSAnem9vbS1vdXQucG5nJzsKJG1hcFsnd2lkdGhPdXQnXSA9ICcxOSc7CiRtYXBbJ2hlaWdodE91dCddID0gJzE2JzsKJG1hcFsncGFkVG9wT3V0J10gPSAnMjMwJzsKJG1hcFsncGFkTGVmdE91dCddID0gJzE1JzsKCi8qIFNsaWRlTm90Y2ggKi8KJG1hcFsnaW1hZ2VTbGlkZU5vdGNoJ10gPSAnU2xpZGVOb3RjaC5wbmcnOwokbWFwWyd3aWR0aFNsaWRlTm90Y2gnXSA9ICcxOSc7CiRtYXBbJ2hlaWdodFNsaWRlTm90Y2gnXSA9ICc3JzsKCi8qIFNsaWRlU2VsICovCiRtYXBbJ2ltYWdlU2xpZGVTZWwnXSA9ICdTbGlkZVNlbC5wbmcnOwokbWFwWyd3aWR0aFNsaWRlU2VsJ10gPSAnMTknOwokbWFwWydoZWlnaHRTbGlkZVNlbCddID0gJzcnOwoKLyogem9vbUNvbnRyb2wgcG9zaXRpb24gKi8KJG1hcFsncGFkVG9wem9vbUNvbnRyb2wnXSA9ICc3NSc7CiRtYXBbJ3BhZExlZnR6b29tQ29udHJvbCddID0gJzE1JzsKCi8qIG1hcFR5cGVzICovCiRtYXBbJ2xpbmtUeXBlQ29sb3InXSA9ICcwMDAwMDAnOwokbWFwWydpbWFnZVR5cGVCRyddID0gJ1R5cGVCRy5wbmcnOwoKLyogbWFwVHlwZU1hcCAqLwokbWFwWyd3aWR0aFR5cGVNYXAnXSA9ICc2MCc7CiRtYXBbJ3BhZFRvcFR5cGVNYXAnXSA9ICcwJzsKJG1hcFsncGFkTGVmdFR5cGVNYXAnXSA9ICcyOTAnOwoKLyogbWFwVHlwZVNhdCAqLwokbWFwWyd3aWR0aFR5cGVTYXQnXSA9ICcxMDAnOwokbWFwWydwYWRUb3BUeXBlU2F0J10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlU2F0J10gPSAnMzQwJzsKCi8qIG1hcFR5cGVIeWIgKi8KJG1hcFsnd2lkdGhUeXBlSHliJ10gPSAnNzUnOwokbWFwWydwYWRUb3BUeXBlSHliJ10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlSHliJ10gPSAnNDMwJzsKCi8qIEd4TWFnbmlmaWVyIGxvY2F0aW9uICovCiRtYXBbJ0d4UG9zWSddID0gJzQnOwokbWFwWydHeFBvc1gnXSA9ICc0JzsKPz4K');
expand_3537250845($outputDir, 'templates/controls/dteal/east.png', 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACyklEQVR42mJkiHP9zPDwOw/Dz18MDDoSJxnmbLJgIAIABBATw+0vPIJBTgxaSZEMDOdfmDM4WX1mKAtTIaQRIICYGNhZGf6JsDE0pBowBEysZGBkE+Bh2HztFkO0WzM+jQABxMTAyszwj+MbwyqG1wzC1kIMefPKGdisTRkZzjytYXCzPYlLI0AAMTMYajT8ZmJlYLBRYHjI9IXhHS8zQ6y3LcOdfxwMn0/elGaQFC1hMFBez3Dn8RtkjQABxMzgofuX4fobx9fHnzD+UBdneC/4j+Ei018GPwtNBnYFVYbHl++wMdx9nc2gJfuf4dHzgzCNAAHECCZz/DUYnv86w8DJxs0Uoc/A6q3K8J+BicGYQYhB+TkHw/LKuQx/j59lYOBmO8Fw/qIlSAtAADGiODzS/RjDh9+WDPZKDIzl9mAhfgYehhCgAWs7NzO8X3OIgeHr168MHAzmAAHEiOHrKLckhrffZzPICjMxTPVhYGBjAtotwuDEwMXw6sRzhkutixkYHj79BxBATBga//y5z/D//ztICKBK/0cwnwEEEKqNAY6TGX4yZgKdyozTqV++HGDgZAwECCCIxnBHaYavLDsYBLh0cAbOsbO/GThYGxguX2oDaQEIIEagplCgptkMimL83AW2DGxKvAxsQHv8GQQYLu+6z3C8H+inW49fMvAzhTGcv3oI5jiAAGJh+Mm6kNFMgVOjyonhHzMD0A5+Bue/QgxzJ+9keL5kGwPD508HGARY/BnOXf6E7CuAAGJh+Pqbg1tbhEEbGBD8DOIMPM8ZGLrqZjD8OngS6DSWJoZb11qwJTmAAGJh+PXnP/MPLsYwBlGGZUffMcxrmc3w/+bd1wwCbOEM5y/tx5VWAQII6NTfDExvfjHUz77AcH3mcqDTvuwDO+385S/4cgdAADEyWBjsZ2DltmX48v07MA67gKHWTExGBggwAB8r2dySdhrdAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/dteal/north.png', 'iVBORw0KGgoAAAANSUhEUgAAABIAAAAOCAYAAAAi2ky3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACy0lEQVR42mJkwAcMtbUZ/jBcArKeMbAw6DKcv/oBl1KAAGLCa9APhpMM8tJMQCzD8P3/enxKAQKIGbdr9I8zsHMq6bWnMojZ6TO82ntBgUFY+DfDq5eHsSkHCCDsLrIxqmP4+stCMMSOQcxCkkEciEFshh+/G4DetcOmBSCAMJGntQaDqvY/5viY/yn/D/5n+r8JjEFskBiDkuYLBiNdPnRtAAGE6aKX304zKEszRrYnM6xheMfwj+ENGIPYIDEGNVlxhi9/N6JrAwgg1DBysz3J8J1R0aomheGdARvDXQZgJP36A5RgZPjJ9JeBm5eNQVZMleHJkUsKDCJCf4HhdQimFSCAEC6KdmtmePjOTCrGi0HHTZHhLNAFYJC9hYEhYxOYCRLTBcpJAtUw/PhTx2Co6wjTDhBAEIPKwlQYzj2rZrM1Y0jKdWfYCHQJI9BD/zsPMjA8fvuP4dGbNyA2SAwklwxUw2Zvzsrw4ddKYODzgIwACCCI19j5HzIKi7PnTMhhOML3ieElUPG3rbcY/q++yMAgxJ7CwMY4m+HW+5j/AjxMrGo8DJ+B1geYmjKcOnqNm+HVBwuGt68XAQQQM0OK3wmGB5+UAtrzGVi0OBluAgP2/b1PDL+mHAFa8P84w/JdOQxX7z9g0FEQ/X/rgxmzgRwDqyAjgwQvL4OcohbDjX2nFBlEhP8BBBAzAxv/bK3USIbcAAWGcwyvGN7+/c/wrHE3A8P7L18ZVu1QhofhjQfbGeTkQn7ffCsm5qbOwMf0jSFCTpjhCqMow5tzV0wBAoiFgZ2N4fn39wypy44y/OP4xvDl6htguLz5zyDDYYKRNLj/eDDcf3X1Rts+/sfaIgy7f3AxMH3/xcDAw8kJEECMDHGunxluf+FhYGdlYGAFBhkfOwODHGctQ//6FqwJNtwxlOEn60KGr785gEnjP8PP36BMeQggwABSHetW+4L24gAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/dteal/south.png', 'iVBORw0KGgoAAAANSUhEUgAAABIAAAAOCAYAAAAi2ky3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADA0lEQVR42mJksDDYz8DAYcfAzsrAwMbCyMDN+oOB/Xc8w8r9qxmwgcLAGoZH35sZPv1kYPj9l4Hh528GBlWeLwABxMhga/1HMMSZ+Z8IG8Nfjm8MX6++Yfh/6v5HBu4/2kDDnqIYkuOvwfDkxzVGI3lGHm0RBqYfXAxMb34xvF+3jwEggJgYvnz/LsEpyDA7yprBI8iAQaPKiYFBUYyf4SvLDgzXPP91hkFWhFETqMYdqBakRxKol+HnLwaAAGJmEBVleXPhhuNvbVMGQTlRhodMXxh+qIsz/D7xUIxBSUqE4caD7WBDIt2PMbCxK3FXOjPwCnMwqDFIMJw6+p7hcMt0BgZ9iZMAAQBJALb/AwDq6cIADQ8+2dPeIT1DPADuDQMA7xH+APoHBAD/x+MzADIhwwAvJUIA8PxrAmI2AAs3GgAdABEAIecFAKJzkgAABfr0AK28IwKICWwbN6P//5t3X0+vW8Dg/FeIgY2Bn4HVW5WBwV6JmeHDr1UMb7/PBrLBYiA5kBqQ2v8PH/1nMJExBBkBEEDMYINevP7FoCh15u/tx1G3/3My+1loMlxg+MTwz0aegeHQQy4Gfi5Gxk5PBiYgjAB6aeWkPQwf1u1iYDCWbmWYsWktyAiAAGKGB+SLVw8YpCX/f7n6wIlNQZVBSlmY4QnDNwYGkMs8VRkYmVkYzBiEGV7vesZwrX8ZA4MkzymGDfujYNoBAogZJVbA4cXn8OTmAwUHZ0eGR7z/GH4w/WBgYGZkEAB6yeI5D8PWyqkMDF8/fWE4clIJWStAADFhRDEPsz/Drccvl1fOZQhhEAJ6RgSMQWyQGMPdp/8ZxLlM0bUBBBAzZlp59ZNBQfzU/7vPYu5/+89sbaPJoMjAyrC3cxvDt80HGRjEORoY9p1ai64NIICYsWaDF68fMkhL/f1x66kzt54Ww7cnXxge9gJzDAvDCYZTF+KwaQEIIEYGfEBDaz+DiowDmH336VeG61d5cCkFCCAWvAZxMgYyPHx6GciSYuBgMMenFCDAAC8N6w7i9FLYAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/dteal/west.png', 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACvUlEQVR42mJkIBbo6tUysLCUMfBwcjL8/noYIIAYCWow1OZh+Pp/IwMvj5NmeiTDi+/vGd4v3/UPIICY8GvSdWT48Oceo5KCU8DESobGVAOGfyJsDAzsrAwAAcSCx2k1DF/+1LE5W7FmNiUwfJFkYFjF8JLhL8c3BgY2FkaAAMLUaKTLx/Dl70YGNi4HySQvhuRcd4a9zO8Y3jF8ZGD6y8Dw9eobBgZu1h8AAcSI5h87ho//VjGoyYpbFsYy6LopMmxk+MDwC6jp173PDF8nHGZguP/qIwP3n1SAAGJEcloVw4/fDcxWxqyR7ckMdyV/MJwF2sPI8I/h99bbDP9WXGRg+PDtClCTB8PK/U8BAogRaIsAw/f/6xl4eBwEQ+wYgst9GdaAHfYFbN7/zoMMDAfv/WVg/z+dYcP+XJg9AAHEwvCH4TKDioyMbnUsg7iFJMM8oJZ/DO8ZGID+YcjYxMDw6M0bBgG2MIZV+/cj+woggEDRIQViYETo338QmpFRCBjxiujSAAHEzCAttpbh9ef4l3vOs71//5sh2kaP4R5Q4ifzPwZGPy0GhqdfGBluvPVnMFVzZ7hydy5MI0AAISwy1D/O8PWXBbOlMQPOwPn+6yuDJJsJw5SNNwACiBmu8cXLuQyacv//33jicOnwRUY5MVUGN2UFhodAraxqPAzMBnIMv6++ZmN48imbwVPvL0AAYaZVT2sNhpffTjMwsvNIxXgxJCElAGZggF1v28fw/+IjBoAAYsbQeOfxG4bnL9oZdBW9Pu89I33i8nOGAFNTBgleXgY+pm8Mj99+Yvh19AEDQADhTuS7DpszmEi3/Dp6+v+kpE6Gt0ffMYQxiDIw/eBiYPj9lwEggAhnq7IwFYYzT84zfPzDowXMVs9B2WrFbgaAAGIkOiOn+J1guPLCnIEdmK3kOb8ABBgAmhTtq9vhlOIAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/redarrow/East.png', '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');
expand_3537250845($outputDir, 'templates/controls/redarrow/SlideNotch.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAB70lEQVR42mL8Yq38gZmZmesvO+crJh5eNs51h8UYiACvpzc+Ynr2mPHb5XOM298/vXHo9ackgABiYfjHwMLKwsTKzMwo8o+L+/+//ua/DJwc/5kySlmQNf9bMe8fAzMzAyMPNwMDIxOjkIzmv7//WP7+vnzhBxMjAzvr/z+/AQJQNAc3AMFgAEa/Vuun4iqxhIsdna1hAMu4WADhIEKbFAu8Zy7vH0nFmeBF5SXMEzQt9F2kcPwAVtDnAVUN2wJ3INlXrcZBWzExfpnNEv0KIJZnP/9+EpQQFGD8/IGB4e8/oPtfMzAc2s3A8J8R4qSfP4DOAikH4r9/gRRQzY+fQPYvBqb/rED8H2ja/38igizsAAHE8uH7t81v//1OFZVXArqMk4GBA+gaJiagVawMDCwsDP///GNghBkEwv/+AM0Div0B0r9/MHz69frn4/f/zx16/v0DQAAxzrZk5mTm5XGXF1SMNxfXc2VnZuZm4RQEGgQMG04eBgZ2TogLfwFd8/0zA8PvLwy/f31kePL5xccjTx8e2vbg8YrTzz9vvvPm72eAAGL8D/YxA0O8ASPru5/ceiYyIsYi3KI6wtz84hICfNw8nFxsICVfv337/eLT56/vvr1/9eLz65sH7r859erjt4s33vz/AYskgAADAPQoxI5y+4AwAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/redarrow/SlideSel.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAfElEQVR42mKcxOD0n4EKYAHDMXmAAGJioBpg/A0QQFQzjJXhLxNAAFHNMB6G/+wAAUQ1w+4w/P0AEEDM7Awfup4xPD/DzPCLg49BQINUQxYxHI/ewHA78QMDw0eAAGL6xfDr+1uGrxt2MDwII8dFPg3ly74wMHwGsQECDAAiOh9zSc7nJgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/redarrow/South.png', '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');
expand_3537250845($outputDir, 'templates/controls/redarrow/TypeBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/redarrow/West.png', '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');
expand_3537250845($outputDir, 'templates/controls/redarrow/ZoomIn.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAADGUlEQVR4nIWSb2jUdRzHX5/f7/u7v7+727WYrj+jpJU9kASLVNhmkFpgIFIgphDcBkFR3KPalHBqNiIimlQ+aEQUBDZq1soMXK5oiWu5cp06J5vMtrm7tbvb7n737/ftwVYsCHo//fB58XrwUlprRMQ40Nq6d9PmTc0Vn72qIF5lmkbGWJj78dOe3s61p94pPLom8kNZy8I3qfmHDo3oDMtTImIeaGuLP/Ps869ddkR5QlGClsJxShgFZ/2hLdt2HT//8ekNAd9tyh/k+PX5JhH5SmtdAVCNDQ0PPLVn7+ELJZ+6dXUUy10i+2yTStDLeFFWPxY/8rTR9RJ4/TguFiD/GMRisZZyuManglE8gDbADC0dBaEIZKO1ZklMPK4mV8EADBERADU9Nfvg2kAVQQP8JhQtWPzpHN7tGzF9YHvBDoFbV0sRzf76W0603ysIMFUofKumpmcjYb+JJRAwQEzIDfSwuRq4wwfKQ8UXRCwPIGwIhxBDcF1NRbuN6tLlK9N27s/6SDRKvgJBDXXxo5yxLAyPn8VSmdRQP09ODoPl5fDYjdMBw5pWIu6lbGlQ/fLrSM9A33cNT+zcQdG08AkEgI3PteMWy0xkHIYTV/IBPejHDHBuzu3uu1noB8pAQc38Mfrl/oMdWxey6e2Nj2xh1d134QWS6QwXBs/T9ckJAhNXBamAIUQs0sANoAS4Crg5mhhsaz96bEa93rmrpjpih0M2qbl0+erY6G/z87k1b77SGuHMAG5+EdchBThAWWutFZBFu9cmxn4+ImJ8kK65c52IEUzNTk66ldJ1YP1HQzMHww/Hq0LV1Vl73YLDux1aa60BlNa6LCJZoKC1m0zOTCQAc1mxAowPnXwr1dm0770XXtwd2laXPHl72N4pIt//bcBylnkRKQDGcmnLTZID3Td89sP4G4uZYy2x5ug9993f29i0dYeI9CtWTGvtrnhcqlHEAeaArxODn7/8tlPqaIk123v2NXf/nhh5/F+A/5rWWq+AdI9f7HXf71KvhmyqCkWp/1/ACkgeSAKfXbv4RRKoRbv9fwFP51SeMK9itgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/redarrow/ZoomOut.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC70lEQVR4nIWSWUhUYRTH/+feb5Y7buNUmlbUWxuhlFlElKitlBmGSESLrQ+tDxUR2PJSVJRRYURkULRSiRFYkGhlq7lV5la22CI13hmdmebeuff7enCSFqrzcuCc8/9x+J/DhBAgImnHjp2LUlJTVwglMl4nG5Ml6oZPvV9xq+xIYeHBJvwlGBFZNm/ZujltdtZuf4RLtkTHwmGxQtd0iIAvOW/poAX5+ctzi4tP3RVC8D8AGRkZKXNycgu6nImyMy4elnDDbreDR0Ui0MXiFi9Zdvz06eI0AJ1/AHIW5K7mkS4bc8XDKvUWJRHOsgQeFQ3X4KEj8vLy0onoCgDjF4AvoI0jRzQcMqDIQEgA1toKOPcuhsU0+wb3A+f2z0j8SSqg6sYD5narMTaJw2YFHDKgcSDiTT1iIGC3sL95BwAIcZ7Kmpub3VK3e0hsnAsmSZBlIGr+SvQQ4DNC8Pt88HZ+FI9LL92zSeT/ISaAV3v0Zlb9pLq87tGj5AxnFET/BNgZwWF1wLpwA/RAEB+aGnHh7Jmmww3eQgAeAByAAGACCLCOdy3Xi4pOTvoW8E8cOz4FcYmJMJgMj+pBy8tG3KmshOrxKwMTBnd8/tTRGhYiDOEMQFtDbdWeo37/mgEDStL6u5yKotihqh7zVVtr+zfNSFi7qWDY5KnTTzyre5pTdGxfe1gMIYRgAL5wzmvammr2vm6RrsbExo+UJEnxer52GiHtvSTJo8pu3lo1f15W0oRJUyrtijL30IFddUIIAQBMCKERUScAH+e8XXV/qgLAAAQBGJyb9VW3L7pNgxdkZ88dNHJ0Uvm6jdtziKhCCMFZeJUQEXkB+ADIvSb3mdXFTV1/WHnZHjKMbbNmznQOHzGmND1zdjYRlfcdOryS8funEVEPgHfc1K/V3C+JCGqh9dMyMyPS0mddamx8Puffn9IL5mHIW9PQzr+ovsH1oLZOUSg6qJmj/wv4CeIF0M5N7WJLQ5lKstSPG6HH3wFawVVKQ7IuVAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/redarrow/center.png', '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');
expand_3537250845($outputDir, 'templates/controls/redarrow/centerBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/redarrow/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICdjZW50ZXIucG5nJzsKJG1hcFsnd2lkdGhDJ10gPSAnMTEnOwokbWFwWydoZWlnaHRDJ10gPSAnMTEnOwokbWFwWydwYWRUb3BDJ10gPSAnMjknOwokbWFwWydwYWRMZWZ0QyddID0gJzI0JzsKCi8qIENlbnRlciBCYWNrZ3JvdW5kICovCiRtYXBbJ2ltYWdlQ2VudGVyQkcnXSA9ICdjZW50ZXJCRy5wbmcnOwokbWFwWyd3aWR0aENCRyddID0gJzUwJzsKJG1hcFsnaGVpZ2h0Q0JHJ10gPSAnNTAnOwokbWFwWydwYWRUb3BDQkcnXSA9ICcxMCc7CiRtYXBbJ3BhZExlZnRDQkcnXSA9ICc1JzsKCi8qIE5vcnRoICovCiRtYXBbJ2ltYWdlTm9ydGgnXSA9ICdub3J0aC5wbmcnOwokbWFwWyd3aWR0aE4nXSA9ICcyMyc7CiRtYXBbJ2hlaWdodE4nXSA9ICcyMyc7CiRtYXBbJ3BhZFRvcE4nXSA9ICcxMCc7CiRtYXBbJ3BhZExlZnROJ10gPSAnMTgnOwoKLyogU291dGggKi8KJG1hcFsnaW1hZ2VTb3V0aCddID0gJ3NvdXRoLnBuZyc7CiRtYXBbJ3dpZHRoUyddID0gJzIzJzsKJG1hcFsnaGVpZ2h0UyddID0gJzIzJzsKJG1hcFsncGFkVG9wUyddID0gJzQwJzsKJG1hcFsncGFkTGVmdFMnXSA9ICcxOCc7CgovKiBFYXN0ICovCiRtYXBbJ2ltYWdlRWFzdCddID0gJ2Vhc3QucG5nJzsKJG1hcFsnd2lkdGhFJ10gPSAnMjMnOwokbWFwWydoZWlnaHRFJ10gPSAnMjMnOwokbWFwWydwYWRUb3BFJ10gPSAnMjUnOwokbWFwWydwYWRMZWZ0RSddID0gJzM0JzsKCi8qIFdlc3QgKi8KJG1hcFsnaW1hZ2VXZXN0J10gPSAnd2VzdC5wbmcnOwokbWFwWyd3aWR0aFcnXSA9ICcyMyc7CiRtYXBbJ2hlaWdodFcnXSA9ICcyMyc7CiRtYXBbJ3BhZFRvcFcnXSA9ICcyNSc7CiRtYXBbJ3BhZExlZnRXJ10gPSAnMic7CgovKiBab29tSW4gKi8KJG1hcFsnaW1hZ2VJbiddID0gJ3pvb20taW4ucG5nJzsKJG1hcFsnd2lkdGhJbiddID0gJzE2JzsKJG1hcFsnaGVpZ2h0SW4nXSA9ICcxNic7CiRtYXBbJ3BhZFRvcEluJ10gPSAnNzAnOwokbWFwWydwYWRMZWZ0SW4nXSA9ICcyOSc7CgovKiBab29tT3V0ICovCiRtYXBbJ2ltYWdlT3V0J10gPSAnem9vbS1vdXQucG5nJzsKJG1hcFsnd2lkdGhPdXQnXSA9ICcxNic7CiRtYXBbJ2hlaWdodE91dCddID0gJzE2JzsKJG1hcFsncGFkVG9wT3V0J10gPSAnODUnOwokbWFwWydwYWRMZWZ0T3V0J10gPSAnMjknOwoKLyogU2xpZGVOb3RjaCAqLwokbWFwWydpbWFnZVNsaWRlTm90Y2gnXSA9ICdTbGlkZU5vdGNoLnBuZyc7CiRtYXBbJ3dpZHRoU2xpZGVOb3RjaCddID0gJzE5JzsKJG1hcFsnaGVpZ2h0U2xpZGVOb3RjaCddID0gJzcnOwoKLyogU2xpZGVTZWwgKi8KJG1hcFsnaW1hZ2VTbGlkZVNlbCddID0gJ1NsaWRlU2VsLnBuZyc7CiRtYXBbJ3dpZHRoU2xpZGVTZWwnXSA9ICcxOSc7CiRtYXBbJ2hlaWdodFNsaWRlU2VsJ10gPSAnNyc7CgovKiB6b29tQ29udHJvbCBwb3NpdGlvbiAqLwokbWFwWydwYWRUb3B6b29tQ29udHJvbCddID0gJzU1JzsKJG1hcFsncGFkTGVmdHpvb21Db250cm9sJ10gPSAnNSc7CgovKiBtYXBUeXBlcyAqLwokbWFwWydsaW5rVHlwZUNvbG9yJ10gPSAnRkZGRkZGJzsKJG1hcFsnaW1hZ2VUeXBlQkcnXSA9ICdUeXBlQkcucG5nJzsKCi8qIG1hcFR5cGVNYXAgKi8KJG1hcFsnd2lkdGhUeXBlTWFwJ10gPSAnNjAnOwokbWFwWydwYWRUb3BUeXBlTWFwJ10gPSAnMCc7CiRtYXBbJ3BhZExlZnRUeXBlTWFwJ10gPSAnMjkwJzsKCi8qIG1hcFR5cGVTYXQgKi8KJG1hcFsnd2lkdGhUeXBlU2F0J10gPSAnMTAwJzsKJG1hcFsncGFkVG9wVHlwZVNhdCddID0gJzAnOwokbWFwWydwYWRMZWZ0VHlwZVNhdCddID0gJzM0MCc7CgovKiBtYXBUeXBlSHliICovCiRtYXBbJ3dpZHRoVHlwZUh5YiddID0gJzc1JzsKJG1hcFsncGFkVG9wVHlwZUh5YiddID0gJzAnOwokbWFwWydwYWRMZWZ0VHlwZUh5YiddID0gJzQzMCc7CgoKLyogR3hNYWduaWZpZXIgbG9jYXRpb24gKi8KJG1hcFsnR3hQb3NZJ10gPSAnNSc7CiRtYXBbJ0d4UG9zWCddID0gJzUnOwo/Pgo=');
expand_3537250845($outputDir, 'templates/controls/redarrow/north.png', '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');
expand_3537250845($outputDir, 'templates/controls/roundblue/Center.png', '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');
expand_3537250845($outputDir, 'templates/controls/roundblue/East.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAPNSURBVHjaYmRAB6w5ugz/WKsYmDkdGZhZXjIwMIoy/P3LxfDv2yEGln9tDD8mnEBWDhBAjAhmGisDC886Bn4pL107MyYHOxUGSXFehn//GRmevfjKcOT4PYbLh0/++//u4WGG398DGRhmvAfpAgggqAFGQM2Ol+WsXdSLi50ZXExZGf7/ZWD49oOB4c8/BgYWJgaGL78ZGHaf/s0wf+4hhhcndz1j+PFVj4Fh6luAAGKGODtii7ytm8XcKR4M1lrMDE+ADr/3goHh+pP/DA9fMTJ8/Q40DIiVpJkZNAyUGK484+T9/OSuK8PfYzMBAoiZgaXQilFMqa2zO4xRTYqJ4fJ9BobPQMV/gC6Ic/gPNJCR4crj3wxvPzEzfPzCwMDDzsDAKSHHcPnKU8l/35RuAgQQ0ADbSWbeLprxIXIMNx4zMPz8w8Dw5C0Dw6sPDAxn7jAyGCgyMJiqMDG8/PyH4dFLZrC3uLgYGO6/YWX4+OCqDEAAMTPwe08LiHbjFODnYrj1lIHhBTBoXgI1f/3JwPDsHQPDozcMDIaKjAy6cswMjKy/GfZcZGZgZ2Vg+PiTm+HJrat8AAHEwsjJ9fQvE6fQsWsMDM7AYLHRBAYJCzDyoHHzG+gikAYQ306dleH3/98Mi3axMvxj4mBg5eZ/BRBATKxcbExffzMy3H0NDG1gkPJwQPzJBfIrGwMDBxvCMBDNDIwRkNpPvxgY2LjYGAECiIWJmfnh1+/ftL8wcDJ0bvnH0LP5L1y1hjgrg6wYA0OOJwMDL9Dg0/f/MlQtZmIA6mXg4PjDwMj0TxwggJgYmf/vevXiBYOMFAPDfw4mht8crBAMdDcfMLDi7SGaD1z/y1C0ipmBg4+ZQUIc6JLfrxgY/v25DRBATAxsrKsf3L77hoPlN4OMBAODiDADg7AQA4M8kN0S8ZdBmJeBYe+VvwwTjjAziADFRUWA8gIMDO8e3mb4z8zUDxBAzH9ebPrMIOzLxsLO4qRjIMbAAgwwJlAgAuk7dxkYDl9nZNj7gpGBjZ2RgZebgUFSFBiFVx8y3D1/487H0wkpAAEETok/Oe1Pffv+R4OJhUVLU1OQQVyYkYEdGIgvgQHxGWiQIC8jgwTQZaL8DAw3rzxjOLn3wucfv/85/Xq0+g1AAEGS8rsdf78xW236/Pkf++OH7/Q42ZjZJYVYGST5GBlEgLZyM/9leP3sA8PRA3cYzh65df/31+8OH4+E3QBpBQggRvTcLOy2Q4OFnTGCi5vDhoeHVY4RqOLnz3/Snz7+uPv31+85r7Z7TkJWDxBgAOYALbvrNi5pAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/roundblue/North.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAOnSURBVHjaYmRAB+yFEQysbPmMvMJarNz8r9i42BgZmf6JM/z7c/s/M1P/l/Opi5GVAwQQI4KZLczAxrmbRUbLUNrAlEFaUZHhHxMHw6dfDAwcHH8YmH+/Ynj38DbD++cv7/xiYvH9ciTsBkgXQABBDcgQZODguyJl4yvlGWzDICXMwPD9BwPDy/cMDHdfMzAAmQwS4gwMwgIMDK8ePGS4cPTS599ff5i9Oxx2AyCAmMD6WTnXS5i7SRUV2jCYqzAwsP2HaI5z+83QEvubgY3hL8O370CDfjMw6JrJM9h5G/Oy8nBvA2kFCCBmBo4CC0ZBhcbc8hBGPUVmhtcfgAqBzg60+c3gqMHKoCjMzKCv+J9h+xUmBg52oA6glVrqvAwfP/4Q/M7r9x4ggJgY/jBV6dqaM7masjJ8+crA8B9ou57ybwY7dVYGWACZAg1u9vvLAJRi+PmHgeHXPwYGQyNpBmY21hSAAGJiYOKys7FUYuBhZWD4DZQU4vvN4G/CwvDtJwPDH6DCv0D8GRgIDprMDLmWf4GG/mf4AvSOjDQfAx8/hzJAADExMDN/k5LgBit+85mBIdqOleHzd0aGqduBGr8BbQMaOgXIfvaOgcFGnZlBnYWR4RvQiywsTAzs7ExPAQII6KP/r5kY/zMA+QwszP8Zfv/+xzANGDxXHgLDlgUYoED8+BUDw6StDAzMwMBkZQbaBPIb0K8g7wIEEAvD3z/iz19+ZuDi4GGQEGBkWHOcERza3BzQhAJUfOPlb4bf7KwMCcuYGZg4GRikBRmAsfKb4cuX348AAoiJ4e/3/QcO3WFgZAbGNTCeWYE0JztE839YQvkP4X/5BWHzAg2/c+cdw7evP44ABBAwEH+3XT506t+e078ZlKSAzgR6RQJoAz8XJFB//0VKtkDTuICG/wZGw5mTDz//+fl/BUAAMTP8O/WK4beO6bUnjGo2dioMsiIMDK8/MTB8+g7R/ACYEg/fBupkZWQQ5mdgEBNiYDhz9A7DncuPJ73Z5b0cIICYwUb/013z8enTsENX/4soaSgwaCgygQPv0BUGhl2XgQYBrZaVAHqN+TfDhWPXGS6fuLHm9YOHuQzvdvwFCCCkzGTEysBqv5FRVMnD1NGU0dRMheEvMMS+/mZk+Pr9G8OrFy8YHty+++bT+y8TPr1908NwJ/8nSBdAADFiZGeWQisGJpZSBh4BO0ZOrqesXGxMTMzMDxmZ/+9iYGNd/f18yjNk5QABBgAM1yuCzAeubgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/roundblue/SlideNotch.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAB8UlEQVR42mJULvnygZmZmYuT5e8rXk4mtsPVnGIMRIDGBa8fPf7AxHju7jfGp4e33/j08FASQACxMDAxsDCxsLIyMjOLcHP8+9+85d9fDmaG/6WeTCzImucd+fePmYmBgZuVkYGJkYFRU1voH8vTv38vPPr9g4GBif3PP9bfAAEYkIMbgGAwAKNf/7YqTRpnF0vY0S42sIMNjCAcBCEqLe/4TLyvx5XOx2RcCIpphraBbiB7C1qBK2A7hbqC5YD3v3XX0o9KTLYZMjpZ+QQQy9+vzz4JygoKfPjGyPAPqOj1VwaG3dcZGBiZIC768RuoFCj+/x8Dw18g/gfU+vMPA8MvoDgrJxPD/x9A8/7//8fCIMIOEEAs3z5/2Pz749tUJUlRdk4WRgYuoO0gc1iZGYD+B2pm/M/wH2jaX6hhf/4CxYAm/gHa/OPHf4bXLz79/P/t8bnv3w59AAggRmbJ2Zw8bMzuioby8Xoe5q7MbOzcgsIsDNw8DAxcHEAvAr3KwAhxybfvDAxfgN78+PY3w4tbTz4+PH/k0OPz21Z8fnN689+/dz4DBBAj0Ilg7zAyxrNy873TE5ExMRaVF9HhFxUW5xOU4Obi4WEDhcm3b19/f3734uv7F+9evX744uabxwdOffv66uL//zd+wCIJIMAAOlq/zDkjNQsAAAAASUVORK5CYII=');
expand_3537250845($outputDir, 'templates/controls/roundblue/SlideSel.png', 'iVBORw0KGgoAAAANSUhEUgAAABMAAAAHCAYAAADqF3ZBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAgUlEQVR42mLUqP7zn4EK4MHUeHmAAGJioBL484/1N0AAUc0w5n+sTAABRDXDWBhE2AECiGqGff926ANAADEyS87m5GFjdlc0lI//oW0fQKohz2fHRH9+c3rzv3/vPwMEECMDzxQGhq9fGBj+X2PVqJ73i1TDrrcwMzIy8oE9ChBgAA7KIYCmIecgAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/roundblue/South.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAOtSURBVHjaYmRAA5yGc6QYfv0O/f+X0e3f37/yv7/9+vf/+zdphi8fDjH8+9PN8Kf/GLJ6gABihLNUJrLzCYuU8AnyFCioKouISUgwcHNyMXCz/mdg/ved4fSpOwyn95/+///1vR0Mvw/6MzCc+w3SBhBAjDDNIvKySzQMVUPU9dUZfvxhZXjyjIGBh4mBQVmUgcFKi4FBTpyB4fLtPwxtnXsZHh7efZPhz2ddBoZZvwECiBmkX8wku93ITivV1F6T4e1nZobHL4GCv/4xFHoyMiiIATU+YGBg/M/AYKTCxODiosJw8PI/kY9Pnxgy/Du+HCCAmITddmhIyAlnWNorM3z8ysDw/RcDw3+gYub/fxlc9BgYbDQZGH4Axf7+Y2C4/ZSBQU2SgaG42JmBgV/Ki4E1RxcggJhY2BkjTMzleVnZmBi+/YRohgFWoPtYWRgYPn5jYHjxHmLIPaDXXExZGXTtzJgY/rFWAQQQExc3h42KihDD5x+QEOFhQwTvf6RQ/g40/PdfoEEfgOJA2sFOBehMTkeAAGLi4WGV4+JkZfj4nYFBm/Ufw4KovwzWUgwMGuKscNd8BRrOwcrAEGL5D2jAf4ZvQL6kOC/QAJaXAAHExAiyghFi3e+/TAx/GZgZ8rwZGGSBgffrD1AMiHXkGRiyvIDeYWVi+POXkeEP0Cv//oM1igIEENPPn/+k/wBFuIBOv/nnP8ORm38ZpIQYGHI8GRjYgP7n5WJgyAayeTn/Myw99JtBBGgxCzB6n70Ahvjfv1wAAcT06eOPu0+efmLg4QQ5gpFh8nFmhgPX/zLwcgBdyARRzMXOwLDxzB+Gd59YwYH6BZiEjhy/B3TGt0MAAcT099fvOefPPWUARgIDOwsk0Go3MTOcvv8X7H9QMBy6+Zvh0l1WsE95uBkYdp/+zXD58Ml/DCz/2gACiPnrnaUnf/D6xLPzcAtKSvEyfAa67AcwQDef+M+gLPOX4e5rYMDuYgU7XRCIn39iYJg25QDDl1unDzH8mtACEEDglMguGbDzyYPX8UzMHOz8wgLAgALG/VcmhkOXgKnyBTODuCADAxMwFm4AE9LieUcYnh/f/ozh11d7BoYzPwACCJ6ZeGxWabD9+7NZUFJcRUheleEvqxjDjx8sDHzAwGX694Ph6f37DE8vnGb48+TaeYZf310ZGKa+BekDCCBG9OzMYzg7lvHvv0IGJhbV//+YXv769uv/768fxf5/fnuN4feviQw/+1cgqwcIMAAhPUNnxDnedgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/roundblue/TypeBG.png', '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');
expand_3537250845($outputDir, 'templates/controls/roundblue/West.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAPHSURBVHjaYmRAA2Ke2/OY2VhT+Pg5lNnZmZ7+/8/A8OXL70ffvv448ufn/xVvd3ncQFYPEECMMIaQ7SoNVh7ubRr6soqGRtIMMtJ8DCwsTAwMQBO+ff/NcOfOO4YzJx9+fvHo7YxX9+7VMtzJ/wnSBxBAzCCCx2aVBgcPxyk7byNxa0cVBlYeToZ335kYXnxmZHj7g4mBkZWFQUKKl0FdR5r9z38m648ffmp8Y7baxPBux1+AAIIYIBN43NjJRFJNT5bh2RsGhtcfGBi+fvvPoPiXkUHo3z+Gu0CD3gDFfv5mZJBXEmb4/u2v1ofXn3/8fLruMEAAMfIYzo4VV1JaZBXgxPDjNwPD7z9AVwMNzbX8y2CjzszAzPCXIWEZM8OXXwwMjEAPc7IxMHAx/WbYuXT7m7cvX+sDBBAL499/hULyqgxvgTZ8+87A8OcfA0Oz318GB01mhmfvGBgmbWVmePgCKdCAhsiJsTIoqCqLvH38LBQggFgYmFhU/7KKMbx4ycDABrRtUhIDg6kiM8PnHwwMCw8yMHz6xsDA+vM3xFlA8JeRmeHJMyYGMQkJhv9/Gd0AAojl/z+mlz9+sPAIsDIwtMT+A2pmBSvkAjq1wBtoKAvIVlYGUHT9/svAsOcSA8O0XQwM3OxcDP/+/pUHCCCWX99+/ecDKlYWBZr+D2IRSDGI/vELIsYA5YPC589fiNpf3/8z/P726x9AALH8/vpRjOnfDwZxQW6GRbtYGVgZfzPYqbMygFw9ew8Dw5WHQNs4IIbwczEwcAAts9JiYDh8+jvD/+/fpAECCBiNRv5MwnIyJgZiDGI8DAwPXjAzfABGh64cE4OePCPDA2DYcAB9JcrPwKAozsAgwgekpRgY5i25zPD0wvmdAAHEzMBo9vXrtz8hyoaGDOrSDAzMwMT34TMzw+0XfxiMlZkZzFT+Mbz4wMggDDScHRgemrIMDOdu/WGYNXHTf4Yvb1MAAggYzSeu/Puq6v/yG5ekkZkcg5IEMNSBhvz9y8yw7zJQ8X0GBj4uRgYJAQYGHUUGhsfAqC2t3s3w4caZHQx/+jsAAgiaF7KFGTi4L0mYu0klJtsxuJqyMvCwQtIEKDtwAcMAGHsMe07/Zujt3cvw6Oiemwx/9usCjf8NEECMiCSSIcjAyrmeUUjeVtfWnMnGUolBSoKbgYnxP8Pzl58ZDhy6w3D50Kl/DB+fbWP48yWIgWHWb5AugABiRM/ODBwFFgx/mKoYmLjsGJiZgcno/2uGv3/EGf5+38/A9LuN4feUy8jKAQIMAPnrPXHm/FIdAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/roundblue/ZoomIn.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAADGUlEQVR4nIWSb2jUdRzHX5/f7/u7v7+727WYrj+jpJU9kASLVNhmkFpgIFIgphDcBkFR3KPalHBqNiIimlQ+aEQUBDZq1soMXK5oiWu5cp06J5vMtrm7tbvb7n737/ftwVYsCHo//fB58XrwUlprRMQ40Nq6d9PmTc0Vn72qIF5lmkbGWJj78dOe3s61p94pPLom8kNZy8I3qfmHDo3oDMtTImIeaGuLP/Ps869ddkR5QlGClsJxShgFZ/2hLdt2HT//8ekNAd9tyh/k+PX5JhH5SmtdAVCNDQ0PPLVn7+ELJZ+6dXUUy10i+2yTStDLeFFWPxY/8rTR9RJ4/TguFiD/GMRisZZyuManglE8gDbADC0dBaEIZKO1ZklMPK4mV8EADBERADU9Nfvg2kAVQQP8JhQtWPzpHN7tGzF9YHvBDoFbV0sRzf76W0603ysIMFUofKumpmcjYb+JJRAwQEzIDfSwuRq4wwfKQ8UXRCwPIGwIhxBDcF1NRbuN6tLlK9N27s/6SDRKvgJBDXXxo5yxLAyPn8VSmdRQP09ODoPl5fDYjdMBw5pWIu6lbGlQ/fLrSM9A33cNT+zcQdG08AkEgI3PteMWy0xkHIYTV/IBPejHDHBuzu3uu1noB8pAQc38Mfrl/oMdWxey6e2Nj2xh1d134QWS6QwXBs/T9ckJAhNXBamAIUQs0sANoAS4Crg5mhhsaz96bEa93rmrpjpih0M2qbl0+erY6G/z87k1b77SGuHMAG5+EdchBThAWWutFZBFu9cmxn4+ImJ8kK65c52IEUzNTk66ldJ1YP1HQzMHww/Hq0LV1Vl73YLDux1aa60BlNa6LCJZoKC1m0zOTCQAc1mxAowPnXwr1dm0770XXtwd2laXPHl72N4pIt//bcBylnkRKQDGcmnLTZID3Td89sP4G4uZYy2x5ug9993f29i0dYeI9CtWTGvtrnhcqlHEAeaArxODn7/8tlPqaIk123v2NXf/nhh5/F+A/5rWWq+AdI9f7HXf71KvhmyqCkWp/1/ACkgeSAKfXbv4RRKoRbv9fwFP51SeMK9itgAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/roundblue/ZoomOut.png', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC70lEQVR4nIWSWUhUYRTH/+feb5Y7buNUmlbUWxuhlFlElKitlBmGSESLrQ+tDxUR2PJSVJRRYURkULRSiRFYkGhlq7lV5la22CI13hmdmebeuff7enCSFqrzcuCc8/9x+J/DhBAgImnHjp2LUlJTVwglMl4nG5Ml6oZPvV9xq+xIYeHBJvwlGBFZNm/ZujltdtZuf4RLtkTHwmGxQtd0iIAvOW/poAX5+ctzi4tP3RVC8D8AGRkZKXNycgu6nImyMy4elnDDbreDR0Ui0MXiFi9Zdvz06eI0AJ1/AHIW5K7mkS4bc8XDKvUWJRHOsgQeFQ3X4KEj8vLy0onoCgDjF4AvoI0jRzQcMqDIQEgA1toKOPcuhsU0+wb3A+f2z0j8SSqg6sYD5narMTaJw2YFHDKgcSDiTT1iIGC3sL95BwAIcZ7Kmpub3VK3e0hsnAsmSZBlIGr+SvQQ4DNC8Pt88HZ+FI9LL92zSeT/ISaAV3v0Zlb9pLq87tGj5AxnFET/BNgZwWF1wLpwA/RAEB+aGnHh7Jmmww3eQgAeAByAAGACCLCOdy3Xi4pOTvoW8E8cOz4FcYmJMJgMj+pBy8tG3KmshOrxKwMTBnd8/tTRGhYiDOEMQFtDbdWeo37/mgEDStL6u5yKotihqh7zVVtr+zfNSFi7qWDY5KnTTzyre5pTdGxfe1gMIYRgAL5wzmvammr2vm6RrsbExo+UJEnxer52GiHtvSTJo8pu3lo1f15W0oRJUyrtijL30IFddUIIAQBMCKERUScAH+e8XXV/qgLAAAQBGJyb9VW3L7pNgxdkZ88dNHJ0Uvm6jdtziKhCCMFZeJUQEXkB+ADIvSb3mdXFTV1/WHnZHjKMbbNmznQOHzGmND1zdjYRlfcdOryS8funEVEPgHfc1K/V3C+JCGqh9dMyMyPS0mddamx8Puffn9IL5mHIW9PQzr+ovsH1oLZOUSg6qJmj/wv4CeIF0M5N7WJLQ5lKstSPG6HH3wFawVVKQ7IuVAAAAABJRU5ErkJggg==');
expand_3537250845($outputDir, 'templates/controls/roundblue/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICd0cmFucy5wbmcnOwokbWFwWyd3aWR0aEMnXSA9ICcxJzsKJG1hcFsnaGVpZ2h0QyddID0gJzEnOwokbWFwWydwYWRUb3BDJ10gPSAnMzInOwokbWFwWydwYWRMZWZ0QyddID0gJzI0JzsKCi8qIENlbnRlciBCYWNrZ3JvdW5kICovCiRtYXBbJ2ltYWdlQ2VudGVyQkcnXSA9ICd0cmFucy5wbmcnOwokbWFwWyd3aWR0aENCRyddID0gJzEnOwokbWFwWydoZWlnaHRDQkcnXSA9ICcxJzsKJG1hcFsncGFkVG9wQ0JHJ10gPSAnMTAnOwokbWFwWydwYWRMZWZ0Q0JHJ10gPSAnNSc7CgovKiBOb3J0aCAqLwokbWFwWydpbWFnZU5vcnRoJ10gPSAnbm9ydGgucG5nJzsKJG1hcFsnd2lkdGhOJ10gPSAnMTYnOwokbWFwWydoZWlnaHROJ10gPSAnMTYnOwokbWFwWydwYWRUb3BOJ10gPSAnMTAnOwokbWFwWydwYWRMZWZ0TiddID0gJzE4JzsKCi8qIFNvdXRoICovCiRtYXBbJ2ltYWdlU291dGgnXSA9ICdzb3V0aC5wbmcnOwokbWFwWyd3aWR0aFMnXSA9ICcxNic7CiRtYXBbJ2hlaWdodFMnXSA9ICcxNic7CiRtYXBbJ3BhZFRvcFMnXSA9ICczOCc7CiRtYXBbJ3BhZExlZnRTJ10gPSAnMTgnOwoKLyogRWFzdCAqLwokbWFwWydpbWFnZUVhc3QnXSA9ICdlYXN0LnBuZyc7CiRtYXBbJ3dpZHRoRSddID0gJzE2JzsKJG1hcFsnaGVpZ2h0RSddID0gJzE2JzsKJG1hcFsncGFkVG9wRSddID0gJzI1JzsKJG1hcFsncGFkTGVmdEUnXSA9ICczNSc7CgovKiBXZXN0ICovCiRtYXBbJ2ltYWdlV2VzdCddID0gJ3dlc3QucG5nJzsKJG1hcFsnd2lkdGhXJ10gPSAnMTYnOwokbWFwWydoZWlnaHRXJ10gPSAnMTYnOwokbWFwWydwYWRUb3BXJ10gPSAnMjUnOwokbWFwWydwYWRMZWZ0VyddID0gJzInOwoKLyogWm9vbUluICovCiRtYXBbJ2ltYWdlSW4nXSA9ICd6b29tLWluLnBuZyc7CiRtYXBbJ3dpZHRoSW4nXSA9ICcxNic7CiRtYXBbJ2hlaWdodEluJ10gPSAnMTYnOwokbWFwWydwYWRUb3BJbiddID0gJzQ1JzsKJG1hcFsncGFkTGVmdEluJ10gPSAnMSc7CgovKiBab29tT3V0ICovCiRtYXBbJ2ltYWdlT3V0J10gPSAnem9vbS1vdXQucG5nJzsKJG1hcFsnd2lkdGhPdXQnXSA9ICcxNic7CiRtYXBbJ2hlaWdodE91dCddID0gJzE2JzsKJG1hcFsncGFkVG9wT3V0J10gPSAnNDUnOwokbWFwWydwYWRMZWZ0T3V0J10gPSAnMzUnOwoKLyogWm9vbUluICovCiRtYXBbJ2ltYWdlSW4nXSA9ICd6b29tLWluLnBuZyc7CiRtYXBbJ3dpZHRoSW4nXSA9ICcxNic7CiRtYXBbJ2hlaWdodEluJ10gPSAnMTYnOwokbWFwWydwYWRUb3BJbiddID0gJzQ1JzsKJG1hcFsncGFkTGVmdEluJ10gPSAnMSc7CgovKiBTbGlkZU5vdGNoICovCiRtYXBbJ2ltYWdlU2xpZGVOb3RjaCddID0gJ2JsYW5rLmdpZic7CiRtYXBbJ3dpZHRoU2xpZGVOb3RjaCddID0gJzAnOwokbWFwWydoZWlnaHRTbGlkZU5vdGNoJ10gPSAnMCc7CgovKiBTbGlkZVNlbCAqLwokbWFwWydpbWFnZVNsaWRlU2VsJ10gPSAnYmxhbmsuZ2lmJzsKJG1hcFsnd2lkdGhTbGlkZVNlbCddID0gJzAnOwokbWFwWydoZWlnaHRTbGlkZVNlbCddID0gJzAnOwoKLyogem9vbUNvbnRyb2wgcG9zaXRpb24gKi8KJG1hcFsncGFkVG9wem9vbUNvbnRyb2wnXSA9ICc2MDAnOwokbWFwWydwYWRMZWZ0em9vbUNvbnRyb2wnXSA9ICc2MDAnOwoKLyogbWFwVHlwZXMgKi8KJG1hcFsnbGlua1R5cGVDb2xvciddID0gJ0ZGRkZGRic7CiRtYXBbJ2ltYWdlVHlwZUJHJ10gPSAnVHlwZUJHLnBuZyc7CgovKiBtYXBUeXBlTWFwICovCiRtYXBbJ3dpZHRoVHlwZU1hcCddID0gJzY1JzsKJG1hcFsncGFkVG9wVHlwZU1hcCddID0gJzcwJzsKJG1hcFsncGFkTGVmdFR5cGVNYXAnXSA9ICcwJzsKCi8qIG1hcFR5cGVTYXQgKi8KJG1hcFsnd2lkdGhUeXBlU2F0J10gPSAnNjUnOwokbWFwWydwYWRUb3BUeXBlU2F0J10gPSAnOTAnOwokbWFwWydwYWRMZWZ0VHlwZVNhdCddID0gJzAnOwoKLyogbWFwVHlwZUh5YiAqLwokbWFwWyd3aWR0aFR5cGVIeWInXSA9ICc2NSc7CiRtYXBbJ3BhZFRvcFR5cGVIeWInXSA9ICcxMTAnOwokbWFwWydwYWRMZWZ0VHlwZUh5YiddID0gJzAnOwoKLyogR3hNYWduaWZpZXIgbG9jYXRpb24gKi8KJG1hcFsnR3hQb3NZJ10gPSAnOSc7CiRtYXBbJ0d4UG9zWCddID0gJzInOwo/Pgo=');
expand_3537250845($outputDir, 'templates/controls/trans-square/TypeBG.png', 'iVBORw0KGgoAAAANSUhEUgAAAGQAAAAUCAMAAABMHminAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADAFBMVEX///8AAADl5eUDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYjOldAAAAAXRSTlMAQObYZgAAAIBJREFUeNpiZGSgPQAIIBaG/7S1AOQJgABiooNHGAACiNaWgGMDIIDo4hOAAKKLJQABRBdLAAKILpYABBBdLAEIILpYAhBAdLEEIIDoYglAANHFEoAAooslAAFEF0sAAogulgAEEF0sAQggGlsCqRIBAoiFgQ5VI0AA0SW4AAIMAEMvATDFj0CRAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/trans-square/ZoomOut.gif', 'R0lGODlhDQANAKEAAP///wAAAOXl5QMDAyH5BAEAAAAALAAAAAANAA0AAAIdjI8Iyw3mnICRzVAtzXcl2GVAyG0VeYLCyrLfGxQAOw==');
expand_3537250845($outputDir, 'templates/controls/trans-square/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICdibGFuay5naWYnOwokbWFwWyd3aWR0aEMnXSA9ICcxJzsKJG1hcFsnaGVpZ2h0QyddID0gJzEnOwokbWFwWydwYWRUb3BDJ10gPSAnMSc7CiRtYXBbJ3BhZExlZnRDJ10gPSAnMSc7CgovKiBDZW50ZXIgQmFja2dyb3VuZCAqLwokbWFwWydpbWFnZUNlbnRlckJHJ10gPSAnYmxhbmsuZ2lmJzsKJG1hcFsnd2lkdGhDQkcnXSA9ICcxJzsKJG1hcFsnaGVpZ2h0Q0JHJ10gPSAnMSc7CiRtYXBbJ3BhZFRvcENCRyddID0gJzEwJzsKJG1hcFsncGFkTGVmdENCRyddID0gJzUnOwoKLyogTm9ydGggKi8KJG1hcFsnaW1hZ2VOb3J0aCddID0gJ25vcnRoLmdpZic7CiRtYXBbJ3dpZHRoTiddID0gJzEzJzsKJG1hcFsnaGVpZ2h0TiddID0gJzEzJzsKJG1hcFsncGFkVG9wTiddID0gJzUnOwokbWFwWydwYWRMZWZ0TiddID0gJzE2JzsKCi8qIFNvdXRoICovCiRtYXBbJ2ltYWdlU291dGgnXSA9ICdzb3V0aC5naWYnOwokbWFwWyd3aWR0aFMnXSA9ICcxMyc7CiRtYXBbJ2hlaWdodFMnXSA9ICcxMyc7CiRtYXBbJ3BhZFRvcFMnXSA9ICcyMyc7CiRtYXBbJ3BhZExlZnRTJ10gPSAnMTYnOwoKLyogRWFzdCAqLwokbWFwWydpbWFnZUVhc3QnXSA9ICdlYXN0LmdpZic7CiRtYXBbJ3dpZHRoRSddID0gJzEzJzsKJG1hcFsnaGVpZ2h0RSddID0gJzEzJzsKJG1hcFsncGFkVG9wRSddID0gJzE1JzsKJG1hcFsncGFkTGVmdEUnXSA9ICczMCc7CgovKiBXZXN0ICovCiRtYXBbJ2ltYWdlV2VzdCddID0gJ3dlc3QuZ2lmJzsKJG1hcFsnd2lkdGhXJ10gPSAnMTMnOwokbWFwWydoZWlnaHRXJ10gPSAnMTMnOwokbWFwWydwYWRUb3BXJ10gPSAnMTUnOwokbWFwWydwYWRMZWZ0VyddID0gJzInOwoKLyogWm9vbUluICovCiRtYXBbJ2ltYWdlSW4nXSA9ICd6b29tLWluLmdpZic7CiRtYXBbJ3dpZHRoSW4nXSA9ICcxMyc7CiRtYXBbJ2hlaWdodEluJ10gPSAnMTMnOwokbWFwWydwYWRUb3BJbiddID0gJzM2JzsKJG1hcFsncGFkTGVmdEluJ10gPSAnMzAnOwoKLyogWm9vbU91dCAqLwokbWFwWydpbWFnZU91dCddID0gJ3pvb20tb3V0LmdpZic7CiRtYXBbJ3dpZHRoT3V0J10gPSAnMTMnOwokbWFwWydoZWlnaHRPdXQnXSA9ICcxMyc7CiRtYXBbJ3BhZFRvcE91dCddID0gJzM2JzsKJG1hcFsncGFkTGVmdE91dCddID0gJzInOwoKLyogU2xpZGVOb3RjaCAqLwokbWFwWydpbWFnZVNsaWRlTm90Y2gnXSA9ICdibGFuay5naWYnOwokbWFwWyd3aWR0aFNsaWRlTm90Y2gnXSA9ICcwJzsKJG1hcFsnaGVpZ2h0U2xpZGVOb3RjaCddID0gJzAnOwoKLyogU2xpZGVTZWwgKi8KJG1hcFsnaW1hZ2VTbGlkZVNlbCddID0gJ2JsYW5rLmdpZic7CiRtYXBbJ3dpZHRoU2xpZGVTZWwnXSA9ICcwJzsKJG1hcFsnaGVpZ2h0U2xpZGVTZWwnXSA9ICcwJzsKCi8qIHpvb21Db250cm9sIHBvc2l0aW9uICovCiRtYXBbJ3BhZFRvcHpvb21Db250cm9sJ10gPSAnNjAwJzsKJG1hcFsncGFkTGVmdHpvb21Db250cm9sJ10gPSAnNjAwJzsKCi8qIG1hcFR5cGVzICovCiRtYXBbJ2xpbmtUeXBlQ29sb3InXSA9ICcwMDAwMDAnOwokbWFwWydpbWFnZVR5cGVCRyddID0gJ1R5cGVCRy5wbmcnOwoKLyogbWFwVHlwZU1hcCAqLwokbWFwWyd3aWR0aFR5cGVNYXAnXSA9ICc2NSc7CiRtYXBbJ3BhZFRvcFR5cGVNYXAnXSA9ICc3MCc7CiRtYXBbJ3BhZExlZnRUeXBlTWFwJ10gPSAnMCc7CgovKiBtYXBUeXBlU2F0ICovCiRtYXBbJ3dpZHRoVHlwZVNhdCddID0gJzY1JzsKJG1hcFsncGFkVG9wVHlwZVNhdCddID0gJzkwJzsKJG1hcFsncGFkTGVmdFR5cGVTYXQnXSA9ICcwJzsKCi8qIG1hcFR5cGVIeWIgKi8KJG1hcFsnd2lkdGhUeXBlSHliJ10gPSAnNjUnOwokbWFwWydwYWRUb3BUeXBlSHliJ10gPSAnMTEwJzsKJG1hcFsncGFkTGVmdFR5cGVIeWInXSA9ICcwJzsKCi8qIEd4TWFnbmlmaWVyIGxvY2F0aW9uICovCiRtYXBbJ0d4UG9zWSddID0gJzM2JzsKJG1hcFsnR3hQb3NYJ10gPSAnMTYnOwo/Pgo=');
expand_3537250845($outputDir, 'templates/controls/trans-square/east.gif', 'R0lGODlhDQANAKEAAP///wAAAOXl5QMDAyH5BAEAAAAALAAAAAANAA0AAAIjjI8Iyw3mnIAttGldBji+1T2JFWogVTHlsnGo1wnyTI92UAAAOw==');
expand_3537250845($outputDir, 'templates/controls/trans-square/north.gif', 'R0lGODlhDQANAKEAAP///wAAAOXl5QMDAyH5BAEAAAAALAAAAAANAA0AAAIkjI8Iyw3mnIAttGnZYVi/D3RgZokeR52LuWRrGoWQQNd2gh8FADs=');
expand_3537250845($outputDir, 'templates/controls/trans-square/south.gif', 'R0lGODlhDQANAKEAAP///wAAAOXl5QMDAyH5BAEAAAAALAAAAAANAA0AAAIkjI8Iyw3mnIAttGnrpSwvvGQiAIbPSXIPV3abF6WWQNd2gh8FADs=');
expand_3537250845($outputDir, 'templates/controls/trans-square/west.gif', 'R0lGODlhDQANAKEAAP///wAAAOXl5QMDAyH5BAEAAAAALAAAAAANAA0AAAIjjI8Iyw3mnIAttGlZZljH/iQW+HzUsi0kep0R0AnyTIt2UAAAOw==');
expand_3537250845($outputDir, 'templates/controls/trans-square/zoom-in.gif', 'R0lGODlhDQANAKEAAP///wAAAOXl5QMDAyH5BAEAAAAALAAAAAANAA0AAAIgjI8Iyw3mnIAttGnrpSwvvCQQqDFkt3lhGrHCC8fiHBQAOw==');
expand_3537250845($outputDir, 'templates/controls/zoom-only/TypeBG.png', 'iVBORw0KGgoAAAANSUhEUgAAAGQAAAAUCAMAAABMHminAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADAFBMVEX///8AAADl5eUDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYjOldAAAAAXRSTlMAQObYZgAAAIBJREFUeNpiZGSgPQAIIBaG/7S1AOQJgABiooNHGAACiNaWgGMDIIDo4hOAAKKLJQABRBdLAAKILpYABBBdLAEIILpYAhBAdLEEIIDoYglAANHFEoAAooslAAFEF0sAAogulgAEEF0sAQggGlsCqRIBAoiFgQ5VI0AA0SW4AAIMAEMvATDFj0CRAAAAAElFTkSuQmCC');
expand_3537250845($outputDir, 'templates/controls/zoom-only/control.inc', 'PD9waHAgLyogR29vZ2xlIG1hcCBjb250cm9sIHNpemVzIGFuZCBsb2NhdGlvbnMgKi8KICAvKiBDb250cmlidXRlZCBieTogZmxvcmlkYXZlICovCiAgLyogR3hNYWduaWZpZXIgaW1hZ2UgcGxhY2VtZW50IGF0IGJvdHRvbSAqLwovKiBDZW50ZXIgKi8KJG1hcFsnaW1hZ2VDZW50ZXInXSA9ICd0cmFucy5naWYnOwokbWFwWyd3aWR0aEMnXSA9ICcxJzsKJG1hcFsnaGVpZ2h0QyddID0gJzEnOwokbWFwWydwYWRUb3BDJ10gPSAnMSc7CiRtYXBbJ3BhZExlZnRDJ10gPSAnMSc7CgovKiBDZW50ZXIgQmFja2dyb3VuZCAqLwokbWFwWydpbWFnZUNlbnRlckJHJ10gPSAndHJhbnMuZ2lmJzsKJG1hcFsnd2lkdGhDQkcnXSA9ICcxJzsKJG1hcFsnaGVpZ2h0Q0JHJ10gPSAnMSc7CiRtYXBbJ3BhZFRvcENCRyddID0gJzEnOwokbWFwWydwYWRMZWZ0Q0JHJ10gPSAnMSc7CgovKiBOb3J0aCAqLwokbWFwWydpbWFnZU5vcnRoJ10gPSAndHJhbnMuZ2lmJzsKJG1hcFsnd2lkdGhOJ10gPSAnMSc7CiRtYXBbJ2hlaWdodE4nXSA9ICcxJzsKJG1hcFsncGFkVG9wTiddID0gJzEnOwokbWFwWydwYWRMZWZ0TiddID0gJzEnOwoKLyogU291dGggKi8KJG1hcFsnaW1hZ2VTb3V0aCddID0gJ3RyYW5zLmdpZic7CiRtYXBbJ3dpZHRoUyddID0gJzEnOwokbWFwWydoZWlnaHRTJ10gPSAnMSc7CiRtYXBbJ3BhZFRvcFMnXSA9ICcxJzsKJG1hcFsncGFkTGVmdFMnXSA9ICcxJzsKCi8qIEVhc3QgKi8KJG1hcFsnaW1hZ2VFYXN0J10gPSAndHJhbnMuZ2lmJzsKJG1hcFsnd2lkdGhFJ10gPSAnMSc7CiRtYXBbJ2hlaWdodEUnXSA9ICcxJzsKJG1hcFsncGFkVG9wRSddID0gJzEnOwokbWFwWydwYWRMZWZ0RSddID0gJzEnOwoKLyogV2VzdCAqLwokbWFwWydpbWFnZVdlc3QnXSA9ICd0cmFucy5naWYnOwokbWFwWyd3aWR0aFcnXSA9ICcxJzsKJG1hcFsnaGVpZ2h0VyddID0gJzEnOwokbWFwWydwYWRUb3BXJ10gPSAnMSc7CiRtYXBbJ3BhZExlZnRXJ10gPSAnMSc7CgovKiBab29tSW4gKi8KJG1hcFsnaW1hZ2VJbiddID0gJ3pvb20taW4uZ2lmJzsKJG1hcFsnd2lkdGhJbiddID0gJzE2JzsKJG1hcFsnaGVpZ2h0SW4nXSA9ICcxNic7CiRtYXBbJ3BhZFRvcEluJ10gPSAnMTAnOwokbWFwWydwYWRMZWZ0SW4nXSA9ICczNSc7CgovKiBab29tT3V0ICovCiRtYXBbJ2ltYWdlT3V0J10gPSAnem9vbS1vdXQuZ2lmJzsKJG1hcFsnd2lkdGhPdXQnXSA9ICcxNic7CiRtYXBbJ2hlaWdodE91dCddID0gJzE2JzsKJG1hcFsncGFkVG9wT3V0J10gPSAnMTAnOwokbWFwWydwYWRMZWZ0T3V0J10gPSAnMic7CgovKiBTbGlkZU5vdGNoICovCiRtYXBbJ2ltYWdlU2xpZGVOb3RjaCddID0gJ2JsYW5rLmdpZic7CiRtYXBbJ3dpZHRoU2xpZGVOb3RjaCddID0gJzAnOwokbWFwWydoZWlnaHRTbGlkZU5vdGNoJ10gPSAnMCc7CgovKiBTbGlkZVNlbCAqLwokbWFwWydpbWFnZVNsaWRlU2VsJ10gPSAnYmxhbmsuZ2lmJzsKJG1hcFsnd2lkdGhTbGlkZVNlbCddID0gJzAnOwokbWFwWydoZWlnaHRTbGlkZVNlbCddID0gJzAnOwoKLyogem9vbUNvbnRyb2wgcG9zaXRpb24gKi8KJG1hcFsncGFkVG9wem9vbUNvbnRyb2wnXSA9ICc2MDAnOwokbWFwWydwYWRMZWZ0em9vbUNvbnRyb2wnXSA9ICc2MDAnOwoKLyogbWFwVHlwZXMgKi8KJG1hcFsnbGlua1R5cGVDb2xvciddID0gJzAwMDAwMCc7CiRtYXBbJ2ltYWdlVHlwZUJHJ10gPSAnVHlwZUJHLnBuZyc7CgovKiBtYXBUeXBlTWFwICovCiRtYXBbJ3dpZHRoVHlwZU1hcCddID0gJzY1JzsKJG1hcFsncGFkVG9wVHlwZU1hcCddID0gJzQwJzsKJG1hcFsncGFkTGVmdFR5cGVNYXAnXSA9ICcwJzsKCi8qIG1hcFR5cGVTYXQgKi8KJG1hcFsnd2lkdGhUeXBlU2F0J10gPSAnNjUnOwokbWFwWydwYWRUb3BUeXBlU2F0J10gPSAnNjAnOwokbWFwWydwYWRMZWZ0VHlwZVNhdCddID0gJzAnOwoKLyogbWFwVHlwZUh5YiAqLwokbWFwWyd3aWR0aFR5cGVIeWInXSA9ICc2NSc7CiRtYXBbJ3BhZFRvcFR5cGVIeWInXSA9ICc4MCc7CiRtYXBbJ3BhZExlZnRUeXBlSHliJ10gPSAnMCc7CgovKiBHeE1hZ25pZmllciBsb2NhdGlvbiAqLwokbWFwWydHeFBvc1knXSA9ICcxMCc7CiRtYXBbJ0d4UG9zWCddID0gJzIwJzsKPz4K');
expand_3537250845($outputDir, 'templates/controls/zoom-only/magnify.gif', 'R0lGODlhEAAQAKIHAOPj5FyIt4m35Ym3t7fl5ZybmwAAAP///yH5BAEAAAcALAAAAAAQABAAAANEeHrWtnC1IERoURla+82GAIxD90CbCAxs+UnVyhL0q1UtXZ8aN+i7SEjw09kkHONRsgk4HRkmRsOLogpVqwarFXK7zAQAOw==');
expand_3537250845($outputDir, 'templates/controls/zoom-only/trans.gif', 'R0lGODlhAQABAPcAAPv6/Ozs9O7u9fr6/P7+//r6+ycqiExPnE1QnVhaosXG3w8VhBcchjE2jz9DlElNmlBUoKepztLT5RkhjBohhC41lcfJ4DhBlQIVjQMZkRIjjgIbkw8mkC5DowQinh4/tx9BuClDpzBKp1Bmthg/vBpEwxg6oi5Uxy1Rwi1LrDxWrZSj0jZbyKa02+bq9fj5/B9S0y5WtzNWs2uR7GqN6W2P5oSl9Iam84uf1Nng8trh8u7z//j6/yNTvSNRtjh1/Dpz9DVhv12Q/2iY/2mY/2iT9W6c/3ei/3mi+mGByX+n/4Go/4Op/4es/4iu/4uw/4+y/5Cz/5Gy+oGb1pm4+5+9/6PA/6TB/6fD/6jD/6vF/5qw4L/T/9ri9OXt/ypv/Dp8/0GA+jxt1EuH/0JuyFKF7F2R/12O9mOX/3Si/3+o/4Or/4au/4mv/4iu/Y+z/pq7/6C//4um3KPB/7HK/7XN/8rc/9Dg/+3z//P3//b5//n7//f5/fz9/zJ8/zJ3+Dh8/DVy4i9kxj6B/T+F/0GB+jlsyUt6zkx7zluE0X2q/4y1/6HA+qjG/7DM/7zT/Mba//H2//T4/zyI/0CK/zx00z940q/L+rvU/77X/7/W/NTk//L3/z2J/0qT/0eD4EeC2sDY+sbd/8re/OHt/0+a/1Ca/1Cb/1We/1mh/1uf/1ug/12j/1WT5WOj+mKb5dXn/7vX+r7Z+lun/1yn/l2o/12p/2Kr/2ev/3Cq7Wm1/3S5/3a6/4a/9/v9//3+/2m2/3O7/3i//4DB/YzF+5DJ/ZDI/H/E/4XG/4XH//z+//7///7//v///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAM4ALAAAAAABAAEAAAgEAJ0FBAA7');
expand_3537250845($outputDir, 'templates/controls/zoom-only/zoom-in.gif', 'R0lGODlhDQANAKEAAP///wAAAOXl5QMDAyH5BAEAAAAALAAAAAANAA0AAAIgjI8Iyw3mnIAttGnrpSwvvCQQqDFkt3lhGrHCC8fiHBQAOw==');
expand_3537250845($outputDir, 'templates/controls/zoom-only/zoom-out.gif', 'R0lGODlhDQANAKEAAP///wAAAOXl5QMDAyH5BAEAAAAALAAAAAANAA0AAAIdjI8Iyw3mnICRzVAtzXcl2GVAyG0VeYLCyrLfGxQAOw==');
expand_3537250845($outputDir, 'templates/helpfile.tpl', 'eyoKICogJFJldmlzaW9uOiAxNTc2ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQp7KgogKiBUaGVzZSBhcmUgdGhlIHZhcmlhYmxlcyB1c2VkIHRvIGRpc3BsYXkgdGhlIGhlbHAgZm9yIHRoZSBhZG1pbiBwYWdlcwogKiBQYXJ0IG9mIHRoZSBHb29nbGUgTWFwIG1vZHVsZQogKn0KeyogTm90ZTogVGhpcyBmaWxlIG11c3QgYmUgaW5jbHVkZWQgaW4gYSB0ZW1wbGF0ZSBpbnNpZGUgYSA8c2NyaXB0PiBibG9jayAqfQovKioqKioqKioqKioqKioqKioqIEdsb2JhbCBWYXJpYWJsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZhciBfSFBfRGVmYXVsdCA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGhhcyBubyBoZWxwIHlldC4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwoKLyoqKioqKioqKioqKioqKioqKiBWYXJpYWJsZXMgZm9yIHRoZSBTaXRlIEFkbWluIEdlbmVyYWwgVGFiICoqKioqKioqKioqKioqKioqKioqKioqKioqLwp2YXIgX0hQX0tleVByb2ZpbGUgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBhbGxvd3MgeW91IHRvIHNldHVwIGRpZmZlcmVudCBrZXlzIGluIGNhc2UgeW91ciB3ZWJzaXRlIGlzIGFjY2Vzc2VkIHZpYSBkaWZmZXJlbnQgYWRkcmVzc2VzLjxici8+VGhlIHByb2dyYW0gd2lsbCBzZWxlY3QgdGhlIHJpZ2h0IGtleSBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHRoYXQgaXQgd2FzIGNyZWF0ZWQuPGJyLz48YnIvPjxiPkZvciBFeGFtcGxlOiA8L2I+SWYgdXNlcnMgYWNjZXNzIHlvdXIgd2Vic2l0ZSB2aWEgaHR0cDovL3d3dy5teXdlYi5jb20gYW5kIGh0dHA6Ly9teXdlYi5jb20sIHlvdSBuZWVkIHR3byBzZXBhcmF0ZSBrZXlzLjxici8+PGJyLz5BZGQgUHJvZmlsZSB3aWxsIGFkZCBhIG5ldyBrZXkgZm9yIGEgc3BlY2lmaWMgc2VydmVyIGFkZHJlc3MuPGJyLz48YnIvPlRvIGVkaXQgb3IgZGVsZXRlIGEgcHJvZmlsZSwganVzdCBzZWxlY3QgaXQgYW5kIGNsaWNrIHRoZSBidXR0b24uIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9NYXBXaWR0aCA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGlzIHRoZSBXaWR0aCBvZiB0aGUgTWFwLjxici8+PGJyLz5Zb3UgaGF2ZSBhIGNob2ljZSBiZXR3ZWVuIGEgc2l6ZSBpbiA8dT5QaXhlbHM8L3U+IG9yIGEgc2l6ZSBpbiA8dT5QZXJjZW50YWdlPC91Pi48YnIvPjxici8+UGl4ZWxzIHdpbGwgYmUgYW4gZXhhY3Qgc2l6ZSwgUGVyY2VudGFnZSB3aWxsIGJlIGRlcGVuZGVudCBvbiB0aGUgd2luZG93IHNpemUgYW5kIHRoZSB0aGluZ3Mgb24gdGhlIHBhZ2UgdGhhdCBjYW4gcmVkdWNlIHRoZSBzaXplIChzaWRlYmFyLCBldGMuLi4pPGJyLz48YnIvPk5vdGU6IFBlcmNlbnRhZ2UgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIGNlcnRhaW4gVGhlbWVzLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfTWFwSGVpZ2h0ID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgaXMgdGhlIEhlaWdodCBvZiB0aGUgTWFwLjxici8+PGJyLz5Zb3UgaGF2ZSBhIGNob2ljZSBiZXR3ZWVuIGEgc2l6ZSBpbiA8dT5QaXhlbHM8L3U+IG9yIGEgc2l6ZSBpbiA8dT5QZXJjZW50YWdlPC91Pi48YnIvPjxici8+UGl4ZWxzIHdpbGwgYmUgYW4gZXhhY3Qgc2l6ZSwgUGVyY2VudGFnZSB3aWxsIGJlIGRlcGVuZGVudCBvbiB0aGUgd2luZG93IHNpemUgYW5kIHRoZSB0aGluZ3Mgb24gdGhlIHBhZ2UgdGhhdCBjYW4gcmVkdWNlIHRoZSBzaXplIChzaWRlYmFyLCBldGMuLi4pPGJyLz48YnIvPk5vdGU6IFBlcmNlbnRhZ2UgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIGNlcnRhaW4gVGhlbWVzLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfTWFwVHlwZSA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGUgTWFwIFR5cGUgaXMgdGhlIERlZmF1bHQgTWFwIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgZnJvbSBHb29nbGUuPGJyLz48YnIvPjxiPk1hcDwvYj4gaXMgYSB2ZWN0b3IgdHlwZSB3aXRoIHJvYWRzLCBib3VuZGFyaWVzLCBldGMuIHNpbWlsYXIgdG8gYSBwYXBlciBtYXAuPGJyLz48YnIvPjxiPlNhdGVsbGl0ZTwvYj4gd2lsbCBzaG93IGltYWdlcnkgb2YgdGhlIGFyZWEgKDIgZXh0cmEgem9vbSBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBNYXAgVHlwZSk8YnIvPjxici8+PGI+SHlicmlkPC9iPiB3aWxsIG92ZXJsYXkgdGhlIE1hcCB2ZWN0b3IgZGF0YSBvbiB0aGUgc2F0ZWxsaXRlIGltYWdlcnkuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9TaG93U2NhbGUgPSAne2ctPnRleHQgdGV4dD0iVGhpcyB3aWxsIGVuYWJsZS9kaXNhYmxlIHRoZSBkaXNwbGF5IG9mIGEgc2NhbGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgdGhlIEdvb2dsZSBBUEkgb24gdGhlIGJvdHRvbSBsZWZ0IGNvcm5lciBvZiB0aGUgbWFwLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfTWFwQ2VudGVyID0gJ3tnLT50ZXh0IHRleHQ9IlRoZXNlIGFyZSB0aGUgR1BTIGNvb3JkaW5hdGVzIG9mIHRoZSBsb2NhdGlvbiB5b3Ugd291bGQgbGlrZSB0byBzaG93IGF0IHRoZSBjZW50ZXIgb2YgdGhlIE1hcCB3aGVuIGZpcnN0IGRpc3BsYXllZC48YnIvPjxici8+VGhlIEdldCB2aWEgYSBNYXAgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBjbGljayBvbiBhIG1hcCB0byBjaG9vc2UgdGhlIGNlbnRlci4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX01hcFpvb20gPSAne2ctPnRleHQgdGV4dD0iVGhpcyB3aWxsIHNldCB0aGUgZGVmYXVsdCBab29tIGZvciB0aGUgTWFwIHdoZW4gZmlyc3QgZGlzcGxheWVkLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfQXV0b0NaID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGNlbnRlciBhbmQgem9vbSB0aGUgbWFwIHRvIGluY2x1ZGUgYWxsIHRoZSBpdGVtcyBkaXNwbGF5ZWQuPGJyLz48YnIvPkl0IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBDZW50ZXIgYW5kIFpvb20gc2V0dGluZ3MgYWJvdmUuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9TaG93R0UgPSAne2ctPnRleHQgdGV4dD0iU2VsZWN0IGlmIHlvdSB3YW50IHRvIHNob3cgdGhlIFwiRXhwb3J0IHRvIEdvb2dsZSBFYXJ0aFwiIGxpbmsgZm9yIGl0ZW1zLjxici8+IFRoaXMgaXMgb3JpZ2luYWxseSBmcm9tIHRoZSBncHMgbW9kdWxlIHRoYXQgd2FzIGluY2x1ZGVkIGluIHRoaXMgbW9kdWxlLiA8YnIvPjxici8+PGEgdGFyZ2V0PVwiX25ld1wiIGhyZWY9XCJodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL2luZGV4LnBocC9HYWxsZXJ5MjpNb2R1bGVzOkdwc1wiPk1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBtb2R1bGUuPC9hPiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfR01MaW5rID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgbGV0cyB5b3UgY2hvb3NlIHRoZSBiZWhhdmlvciBmb3IgdGhlIFwiU2hvdyBHb29nbGUgTWFwXCIgTGluay48YnIvPjxici8+PGI+RGlzYWJsZSB0aGUgbGluazwvYj4gd2lsbCByZW1vdmUgdGhlIGxpbmsgZnJvbSBhbGwgbG9jYXRpb25zIGluIHlvdXIgR2FsbGVyeS4gWW91IHdpbGwgbmVlZCB0byBwb2ludCB0byBtYWluLnBocD9nMl92aWV3PW1hcC5TaG93TWFwIHRvIHZpZXcgdGhlIG1hcC48YnIvPjxici8+PGI+U2hvdyBUaGUgRGVmYXVsdCBNYXA8L2I+IHdpbGwgc2ltcGx5IHNob3cgYWxsIGl0ZW1zIGF2YWlsYWJsZSBpbiB5b3VyIGdhbGxlcnkgdGhhdCBoYXZlIEdQUyBjb29yZGluYXRlIHNldC48YnIvPjxici8+PGI+RHluYW1pYyBMaW5rPC9iPiB3aWxsIHNob3cgZWl0aGVyIHRoZSBkZWZhdWx0IG1hcCBvciBhIG1hcCBmaWx0ZXJlZCBvbiB0aGUgY3VycmVudCBhbGJ1bSBkZXBlbmRpbmcgaWYgdGhlcmUgYXJlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGFsYnVtIC8gc3ViLWFsYnVtLjxici8+VGhpcyBhZGRzIHNvbWUgcHJvY2Vzc2luZyBvbiB0aGUgc2VydmVyIGFuZCBjYW4gYmUgc2xvdyBkZXBlbmRpbmcgb24geW91ciBnYWxsZXJ5IHNpemUuPGJyLz48YnIvPjxiPlNob3cgTWFwIEZpbHRlcmVkIG9uIGN1cnJlbnQgYWxidW08L2I+IHdpbGwgYWx3YXlzIGZpbHRlciB0aGUgbWFwIG9uIHRoZSBjdXJyZW50IGFsYnVtLjxici8+IElmIHRoZXJlIGFyZSBubyBpdGVtcyBpbiB0aGUgY3VycmVudCBhbGJ1bSBvciBzdWItYWxidW1zIHdpdGggR1BTIGNvb3JkaW5hdGVzIGl0IHdpbGwgc2hvdyBhIFwiZnJpZW5kbHlcIiBlcnJvciBtZXNzYWdlLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfQWRtaW5IZWxwID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgZW5hYmxlcy9kaXNhYmxlcyB0aGUgaGVscCBvbiB0aGUgYWRtaW4gcGFnZXMuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9Vc2VySGVscCA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGVuYWJsZXMvZGlzYWJsZXMgdGhlIGhlbHAgb24gdGhlIHVzZXIgcGFnZXMuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9EZWZDZW50ZXIgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBzZXRzIHRoZSBkZWZhdWx0IGNlbnRlciBmb3IgdGhlIFwiR2V0IHZpYSBhIE1hcFwiIG9wZXJhdGlvbnMuPGJyLz48YnIvPlRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiBhbGwgb2YgeW91ciBtYXJrZXJzIHdpbGwgYmUgaW4gdGhlIHNhbWUgYXJlYS4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX0RlZlpvb20gPSAne2ctPnRleHQgdGV4dD0iVGhpcyBzZXRzIHRoZSBkZWZhdWx0IHpvb20gZm9yIHRoZSBcIkdldCB2aWEgYSBNYXBcIiBvcGVyYXRpb25zLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfRl9Hb29nbGVPdmVydmlldyA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIHdpbGwgZW5hYmxlL2Rpc2FibGUgdGhlIEdvb2dsZSBPdmVydmlldyBTZXR0aW5ncyB0YWIuPGJyLz48YnIvPlRoZSBzZXR0aW5ncyBmb3IgdGhlIE92ZXJ2aWV3IE1hcCBmcm9tIHRoZSBHb29nbGUgQVBJIGNhbiBiZSBjb250cm9sbGVkIG9uIHRoaXMgdGFiLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfRl9HWm9vbSA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIHdpbGwgZW5hYmxlL2Rpc2FibGUgdGhlIEdab29tIFNldHRpbmdzIHRhYi48YnIvPjxici8+Rm9yIG1vcmUgaW5mb3JtYXRpb24sIDxhIHRhcmdldD1cIl9uZXdcIiBocmVmPVwiaHR0cDovL2VhcnRoY29kZS5jb20vYmxvZy8yMDA2LzA3L2d6b29tLmh0bWxcIj5jbGljayBoZXJlPC9hPi4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nCnZhciBfSFBfRl9UaGVtZSA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGVuYWJsZXMvZGlzYWJsZXMgdGhlIFRoZW1lIFNldHRpbmdzIHRhYi48YnIvPjxici8+T24gdGhpcyB0YWIgMyB0aGluZ3MgY2FuIGJlIHNldDo8YnIvPjxici8+PGI+Q29udHJvbHM8L2I+OiBDaG9vc2UgYmV0d2VlbiBjdXN0b20gb3IgYnVpbHQtaW4gY29udHJvbHMgYW5kIHNlbGVjdCB0aGUgcG9zaXRpb24gb2YgdGhlIG1hcCBjb250cm9scy48YnIvPjxici8+PGI+SW5mb1dpbmRvdzwvYj46IFRoZSBJbmZvV2luZG93cyBjYW4gYmUgY2hhbmdlZCBieSBzZWxlY3RpbmcgYSB0ZW1wbGF0ZSBmcm9tIGEgZHJvcGRvd24uPGJyLz48YnIvPjxiPlRodW1ibmFpbCBCYXI8L2I+OiBUaGUgVGh1bWJuYWlsIGJhciBpcyBhIGJhciB3aXRoIHNtYWxsIHZlcnNpb24gb2YgdGhlIHBpY3R1cmVzIGN1cnJlbnRseSBkaXNwbGF5ZWQgb24gdGhlIG1hcC4gSXRzIHNpemUgYW5kIHBvc2l0aW9uIGNhbiBiZSBjdXN0b21pemVkLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfRl9NYXJrZXIgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBNYXJrZXJzIFNldHRpbmdzIHRhYi48YnIvPjxici8+T24gdGhpcyB0YWIsIHlvdSBjYW46PGJyLz48YnIvPkNyZWF0ZSBhIG5ldyBtYXJrZXIgc2V0IHRvIGJlIHVzZWQgZm9yIHRoZSBtYXAuPGJyLz48YnIvPlNlbGVjdCB3aGljaCBtYXJrZXIgc2V0IHRvIHVzZSBmb3IgcGhvdG9zLCBhbGJ1bSBvciBncm91cHMuPGJyLz48YnIvPkVuYWJsZSBvciBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgcmVncm91cCBmZWF0dXJlLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfRl9MZWdlbmQgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBMZWdlbmQgTWFuYWdlbWVudCB0YWIuPGJyLz48YnIvPlRoaXMgaXMgd2hlcmUgeW91IGVudGVyIHRoZSBsZWdlbmQgdG8gYXNzb2NpYXRlIHRleHQgd2l0aCBlYWNoIG1hcmtlciBjb2xvci48YnIvPjxici8+QWxzbywgeW91IGNhbiBlbmFibGUgYW5kIHBvc2l0aW9uIHRoZSBMZWdlbmQgQmxvY2suIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9GX0ZpbHRlciA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGVuYWJsZXMvZGlzYWJsZXMgdGhlIEZpbHRlciBNYW5hZ2VtZW50IHRhYi48YnIvPjxici8+VGhpcyBwZXJtaXRzIHlvdSB0byBlbmFibGUgYW5kIGNvbnRyb2wgZmlsdGVycy4gVGhlcmUgYXJlIDIgdHlwZXMgb2YgZmlsdGVyczo8YnIvPjxici8+PGI+TWFudWFsIEZpbHRlcnM8L2I+IHRoYXQgc2ltcGx5IGxldHMgeW91IGNob29zZSBhIGNlbnRlciBhbmQgYSB6b29tIG9uIHRoZSBtYXAgdG8gc2hvdyBhIHNwZWNpZmljIGFyZWEgd2hlbiBzZWxlY3RlZC48YnIvPjxici8+PGI+QWxidW0gRmlsdGVyczwvYj4gYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBvbiB0aGUgZmx5ICh3aGVuIGVuYWJsZWQpIGFuZCBkaXNwbGF5IG9ubHkgaXRlbXMgY29udGFpbmVkIGluIHRoZSBhbGJ1bSBhbmQgaXRzIHN1YmFsYnVtcy4gWW91IGNhbiBhbHNvIGNob29zZSBob3cgbWFueSBzdWJhbGJ1bSBsZXZlbHMgdG8gaW5jbHVkZS4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX0ZfR3JvdXAgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBHcm91cCBNYW5hZ2VtZW50IHRhYi48YnIvPjxici8+VGhpcyBhbGxvd3MgeW91IHRvIGNyZWF0ZSBHcm91cHMgd2hpY2ggYXJlIGl0ZW1zIHdpdGggR1BTIGNvb3JkaW5hdGVzIGFuZCBhIHRodW1ibmFpbCBwaWN0dXJlLiBFYWNoIGdyb3VwIGNhbiBcImNvbnRhaW5cIiBvdGhlciBncm91cHMsIHBob3RvcyBhbmQgYWxidW1zLjxici8+PGJyLz5XaGVuIGEgZ3JvdXAgaXMgc2VsZWN0ZWQgb24gdGhlIG1hcCwgaXQgd2lsbCBzaG93IG9ubHkgdGhlIGl0ZW1zIGNvbnRhaW5lZCBpbnRvIHRoYXQgZ3JvdXAgKGl0J3MgbGlrZSBtYW51YWwgYWxidW1zKS48YnIvPjxici8+VG8gc2VlIGEgZ3JvdXAgeW91IGhhdmUgdHdvIGNob2ljZXM6IEVpdGhlciBjbGljayBvbiBpdCBvbiB0aGUgZGVmYXVsdCBtYXAgYW5kIHRoZW4gY2xpY2sgdGhlIHRodW1ibmFpbCBvciBlbHNlIGdvIGRpcmVjdGx5IHRvIGl0IHZpYSB0aGUgYWRkcmVzcyBiYXIgd2l0aCBnMl92aWV3PW1hcC5TaG93TWFwJmcyX2dyb3VwPUcxIChmb3IgR3JvdXAgMSkuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9GX1JvdXRlcyA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGVuYWJsZXMvZGlzYWJsZXMgdGhlIFJvdXRlcyBNYW5hZ2VtZW50IHRhYi48YnIvPjxici8+Um91dGVzIGxpbmsgZXhpc3RpbmcgYWxidW0sIHBob3RvcyBhbmQgZ3JvdXBzIGluIGEgcGF0aC4gWW91IGNhbiBzZWxlY3QgYXMgbWFueSBpdGVtcyBhcyB5b3UnZCBsaWtlIHRvIGJlIHBhcnQgb2YgdGhhdCByb3V0ZSBhbmQgc2VsZWN0IHRoZWlyIG9yZGVyLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfS1BfTmFtZSA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGlzIHNpbXBseSB0aGUgbmFtZSBvZiB0aGUgcHJvZmlsZS4gSXQgd2lsbCBhcHBlYXIgaW4gdGhlIGxpc3Qgb2Yga2V5cyB3aGVuIGl0J3MgZnVsbHkgY3JlYXRlZC4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX0tQX1NlcnZlciA9ICd7Zy0+dGV4dCB0ZXh0PSJFbnRlciB0aGUgVVJMIG9mIHlvdXIgc2VydmVyIGFzIHVzZXJzIHdpbGwgYWNjZXNzIGl0Ljxici8+PGJyLz48Yj5Gb3IgZXhhbXBsZTo8L2I+IGlmIHVzZXJzIGFjY2VzcyB5b3VyIHNlcnZlciB2aWEgaHR0cDovL215c2VydmVyLm15ZG9tYWluLmNvbSwgZW50ZXIgaHR0cDovL215c2VydmVyLm15ZG9tYWluLmNvbSIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfS1BfR0tleSA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGlzIHRoZSBrZXkgdGhhdCBHb29nbGUgZ2l2ZXMgeW91IGZvciB5b3VyIHNlcnZlciBVUkw7IGNvcHkgZnJvbSB0aGUgR29vZ2xlIHNpZ251cCBzaXRlIGFuZCBwYXN0ZSBpdCBoZXJlLjxici8+PGJyLz5UaGUgR29vZ2xlIHNpZ251cCBzaXRlIGlzIGhlcmU6PGJyLz48YSB0YXJnZXQ9XCJfbmV3XCIgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9hcGlzL21hcHMvc2lnbnVwLmh0bWxcIj5odHRwOi8vd3d3Lmdvb2dsZS5jb20vYXBpcy9tYXBzL3NpZ251cC5odG1sPC9hPiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CgovKioqKioqKioqKioqKioqKioqIFZhcmlhYmxlcyBmb3IgdGhlIFNpdGUgQWRtaW4gR1pvb20gVGFiICoqKioqKioqKioqKioqKioqKioqKioqKioqLwp2YXIgX0hQX0daX0VuYWJsZSA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGFsbG93cyB5b3UgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIEdab29tIGZlYXR1cmUuPGJyLz48YnIvPklmIHlvdSBlbmFibGUgdGhpcywgeW91IHdpbGwgc2VlIGEgWm9vbSBDb250cm9sIG9uIHlvdXIgTWFwLiBJbnN0cnVjdGlvbnMgYXJlIHByb3ZpZGVkIHdoZW4geW91IHNlbGVjdCBpdC4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX09WX0VuYWJsZSA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGVuYWJsZXMvZGlzYWJsZXMgdGhlIE92ZXJ2aWV3IE1hcCB0aGF0IEdvb2dsZSBoYXMgaW1wbGVtZW50ZWQgaW4gR29vZ2xlIE1hcHMgQVBJIHZlcnNpb24gMi48YnIvPjxici8+SXQgd2lsbCBzaG93IGEgem9vbWVkIG91dCB2ZXJzaW9uIG9mIHRoZSBtYXAgb24gYSBjb3JuZXIgKG9mIHlvdXIgY2hvaWNlKSBzbyB5b3UgY2FuIHRlbGwgd2hlcmUgeW91IGFyZSBvbiB0aGUgXCJnbG9iYWxcIiBtYXAuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9PVl9TaXplID0gJ3tnLT50ZXh0IHRleHQ9IlRoZSBzaXplIG9mIHRoZSBPdmVydmlldyBNYXAgd2luZG93IG9uIHRoZSBjb3JuZXIgb2YgdGhlIG1haW4gbWFwLjxici8+PGJyLz5CeSBkZWZhdWx0IGl0IGlzIDIwMHB4IHggMjAwcHguIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9PVl9Qb3NpdGlvbiA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgT3ZlcnZpZXcgTWFwLjxici8+PGJyLz5CeSBkZWZhdWx0IGl0J3Mgb24gdGhlIGJvdHRvbSByaWdodC1oYW5kIGNvcm5lciBvZiB0aGUgbWFwLjxici8+PGJyLz5BbHNvLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgd2luZG93IG9mZnNldCBpbiBwaXhlbHMuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKCi8qKioqKioqKioqKioqKioqKiogVmFyaWFibGVzIGZvciB0aGUgU2l0ZSBBZG1pbiBUaGVtZSBUYWIgKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZhciBfSFBfVF9Db250cm9sVHlwZSA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIHdpbGwgbGV0IHlvdSBjaG9vc2Ugd2hpY2ggc2V0IG9mIENvbnRyb2xzIHRvIHVzZSBvbiB0aGUgbWFwLjxici8+PGJyLz5UaGUgY29udHJvbHMgaW5jbHVkZSBidXR0b25zIHRvIGNoYW5nZSB0aGUgbWFwIFR5cGUgKE1BUCwgSFlCUklELCBTQVRFTExJVEUpLCBab29tIEluICYgT3V0IGFuZCBQYW4gdGhlIG1hcC48YnIvPjxici8+QnkgZGVmYXVsdCBpdCB1c2VzIHRoZSBTdG9jayAtIFNtYWxsIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiB0aGUgR29vZ2xlIE1hcCBBUEkuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9UX0NvbnRyb2xQb3NpdGlvbiA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIHNlbGVjdHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBDb250cm9scy4gVGhlIGRlZmF1bHQgQW5jaG9yIGlzIG9uZSBvZiB0aGUgY29ybmVycy48YnIvPjxici8+V2hlbiBhbiBhbmNob3IgaXMgc2VsZWN0ZWQsIHlvdSBjYW4gYWxzbyBzZXQgYW4gb2Zmc2V0IGZyb20gdGhhdCBzcGVjaWZpYyBjb3JuZXIgaW4gcGl4ZWxzLjxici8+PGJyLz5UaGlzIGlzIG9ubHkgZm9yIHRoZSB6b29tIGluLCB6b29tIG91dCwgem9vbSBzbGlkZXIgYW5kIHBhbm5pbmcgY29udHJvbHMuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9UX0NvbnRyb2xNYXBUeXBlID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgZGV0ZXJtaW5lcyBpZiB0aGUgTWFwIFR5cGUgc2VsZWN0b3IgaXMgc2hvd24uPGJyLz5JZiB0aGlzIGlzIGFjdGl2YXRlZCwgdXNlcnMgd2lsbCBoYXZlIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgbWFwIHR5cGUgYmV0d2VlbjogTUFQLCBTQVRFTExJVEUgb3IgSFlCUklELiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfVF9JbmZvV2luZG93VGVtcGxhdGUgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBhbGxvd3MgeW91IGNob29zZSB0aGUgSW5mb1dpbmRvdyB0ZW1wbGF0ZSB0byB1c2UgZm9yIGFsbCBpdGVtcy48YnIvPjxici8+WW91IGNhbiBjcmVhdGUgbmV3IHRlbXBsYXRlcyBieSBmb2xsb3dpbmcgdGhlIGV4YW1wbGVzIGluIG1vZHVsZXMvbWFwL3RlbXBsYXRlcy9pbmZvd2luZG93LzsgZWFjaCB0ZW1wbGF0ZSBpcyBhbiAuaW5jIGZpbGUuPGJyLz48YnIvPlRoZSBJbmZvV2luZG93cyBhcmUgdGhlIGJ1YmJsZXMgdGhhdCBvcGVuIHVwIHdoZW4geW91IGNsaWNrIGEgbWFya2VyIGl0ZW0gb24gdGhlIG1hcC4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX1RfRGVmYXVsdFpvb21JbiA9ICd7Zy0+dGV4dCB0ZXh0PSJXaGVuIGVkaXRpbmcgYW4gaXRlbSwgeW91IGNhbiBhZGQgR1BTIGNvb3JkaW5hdGVzLCBhIHpvb20gdmFsdWUgYW5kIGEgY29sb3IgZm9yIHRoZSBtYXJrZXIuPGJyLz48YnIvPlRoZSB6b29tLWluIHZhbHVlIGlzIHVzZWQgYnkgdGhlIE1pbmkgTWFwIGJsb2NrIGFuZCBieSBsaW5rcyBvbiB0aGUgSW5mb1dpbmRvd3MgaWYgYWN0aXZhdGVkIGJlbG93Ljxici8+PGJyLz5UaGlzIGxldHMgeW91IHNldCBhIGRlZmF1bHQgem9vbSBsZXZlbCBpbiBjYXNlIGEgdmFsdWUgd2FzIG5vdCBzZXQgYnkgdGhlIHVzZXIuIEEgem9vbSBsZXZlbCBvZiA1IGlzIGEgZ29vZCBkZWZhdWx0IHZhbHVlLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfVF9ab29tSW5MaW5rcyA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIHdpbGwgc2hvdyB0aGUgem9vbS1pbiB2YWx1ZSBpbiB0aGUgSW5mb1dpbmRvdyBpZiB0aGUgdGVtcGxhdGUgc3VwcG9ydHMgaXQuIEFsbCB0aGUgaW5jbHVkZWQgdGVtcGxhdGVzIHN1cHBvcnQgdGhpcyBmZWF0dXJlLjxici8+PGJyLz5UaGUgbGluayBpcyBKYXZhc2NyaXB0IGFuZCBzaW1wbHkgY2hhbmdlcyB0aGUgem9vbSBsZXZlbCBvZiB0aGUgbWFwIHdoZW4gY2xpY2tlZC4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX1RfSXRlbVN1bW1hcmllcyA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIHdpbGwgc2hvdyB0aGUgaXRlbSBTdW1tYXJ5IChvciBzaG9ydCBkZXNjcmlwdGlvbikgaW4gdGhlIEluZm9XaW5kb3cgaWYgdGhlIHRlbXBsYXRlIHN1cHBvcnRzIGl0LiBBbGwgdGhlIGluY2x1ZGVkIHRlbXBsYXRlcyBzdXBwb3J0IHRoaXMgZmVhdHVyZS4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX1RfSXRlbURlc2NyaXB0aW9uID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgd2lsbCBzaG93IHRoZSBpdGVtIERlc2NyaXB0aW9uIGluIHRoZSBJbmZvV2luZG93IGlmIHRoZSB0ZW1wbGF0ZSBzdXBwb3J0cyBpdC4gQWxsIHRoZSBpbmNsdWRlZCB0ZW1wbGF0ZXMgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9UX1RodW1ibmFpbEJhclBvcyA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIHdpbGwgc2hvdyBhIGJhciBvZiB0aHVtYm5haWxzIGZvciB0aGUgaXRlbXMgdGhhdCBhcmUgY3VyZW50bHkgc2hvd24gb24gdGhlIG1hcC48YnIvPjxici8+WW91IGNhbiBzZWxlY3QgdGhlIHZpc2liaWxpdHkgYW5kIHBvc2l0aW9uIG9mIHRoZSBUaHVtYm5haWwgQmFyICh0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQpLjxici8+PGJyLz5CeSBkZWZhdWx0IGl0IGlzIGhpZGRlbi4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX1RfVGh1bWJuYWlsQmFyU2l6ZSA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGNvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBUaHVtYm5haWwgQmFyLjxici8+PGJyLz5JZiB0aGUgVGh1bWJuYWlsIEJhciBpcyBvbiB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgbWFwLCB0aGUgc2l6ZSB3aWxsIGNvbnRyb2wgdGhlIGhlaWdodCBvZiB0aGUgYmFyICh0aGUgd2lkdGggbWF0Y2hlcyB0aGUgbWFwIHdpZHRoKS48YnIvPjxici8+SWYgdGhlIFRodW1ibmFpbCBCYXIgaXMgb24gdGhlIGxlZnQgb3IgcmlnaHQgb2YgdGhlIG1hcCwgdGhlIHNpemUgd2lsbCBjb250cm9sIHRoZSB3aWR0aCBvZiB0aGUgYmFyICh0aGUgaGVpZ2h0IG1hdGNoZXMgdGhlIG1hcCBoZWlnaHQpLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CgovKioqKioqKioqKioqKioqKioqIFZhcmlhYmxlcyBmb3IgdGhlIFNpdGUgQWRtaW4gTGVnZW5kIFRhYiAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdmFyIF9IUF9MX0xlZ2VuZFBvcyA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGlzIHRoZSBMZWdlbmQgUG9zaXRpb24uPGJyLz48YnIvPklmIExlZnQgaXMgc2VsZWN0ZWQgaXQgd2lsbCBiZSBzaG93biBpbiB0aGUgU2lkZWJhciAoZG9lc24ndCB3b3JrIHdpdGggR2FsbGVyeSB2Mi4yKykuPGJyLz48YnIvPklmIFRvcCBvciBCb3R0b20gaXMgc2VsZWN0ZWQsIGl0IHdpbGwgYmUgZmxhdCBhbmQgd2lsbCBub3QgaGF2ZSB0aGUgZXhwYW5kIGZlYXR1cmUgZXhwbGFpbmVkIGJlbG93Ljxici8+PGJyLz5CeSBkZWZhdWx0IHRoZSBMZWdlbmQgaXMgaGlkZGVuLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfTF9MZWdlbmRQaG90byA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGFjdGl2YXRlcyB0aGUgUGhvdG8gbWFya2VyIGxlZ2VuZC4gT25jZSBhY3RpdmF0ZWQsIHRoZSBjb2xvcmVkIG1hcmtlcnMgd2lsbCBhcHBlYXIgYmVsb3cgd2l0aCB0ZXh0IGJveGVzIGZvciBkZXNjcmlwdGlvbnMuPGJyLz48YnIvPklmIHlvdSBlbnRlciBhIGRlc2NyaXB0aW9uIGZvciBhIGNvbG9yIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgaXRlbXMgYXNzb2NpYXRlZCB3aXRoIGl0LCBpdCB3aWxsIHN0aWxsIGFwcGVhciBpbiB0aGUgbGVnZW5kLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfTF9MZWdlbmRQaG90b0V4cCA9ICd7Zy0+dGV4dCB0ZXh0PSJXaGVuIHRoZSBMZWdlbmQgaXMgdXNlZCBob3Jpem9udGFsbHkgKGxlZnQgb3IgcmlnaHQgcG9zaXRpb24pLCB0aGUgc2VjdGlvbnMgY2FuIGJlIGV4cGFuZGVkL2NvbGxhcHNlZC4gVGhpcyBvcHRpb24gd2lsbCBtYWtlIHRoZSBQaG90byBzZWN0aW9uIGV4cGFuZGVkIGJ5IGRlZmF1bHQuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9MX0xlZ2VuZEFsYnVtID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgYWN0aXZhdGVzIHRoZSBBbGJ1bSBtYXJrZXIgbGVnZW5kIChzZWUgUGhvdG8gbGVnZW5kIGZvciBtb3JlIGluZm8pLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfTF9MZWdlbmRBbGJ1bUV4cCA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIHdpbGwgbWFrZSB0aGUgQWxidW0gc2VjdGlvbiBleHBhbmRlZCBieSBkZWZhdWx0IChzZWUgUGhvdG8gbGVnZW5kIGZvciBtb3JlIGluZm8pLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfTF9MZWdlbmRHcm91cCA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGFjdGl2YXRlcyB0aGUgR3JvdXAgbWFya2VyIGxlZ2VuZCAoc2VlIFBob3RvIGxlZ2VuZCBmb3IgbW9yZSBpbmZvKS4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX0xfTGVnZW5kR3JvdXBFeHAgPSAne2ctPnRleHQgdGV4dD0iVGhpcyB3aWxsIG1ha2UgdGhlIEdyb3VwIHNlY3Rpb24gZXhwYW5kZWQgYnkgZGVmYXVsdCAoc2VlIFBob3RvIGxlZ2VuZCBmb3IgbW9yZSBpbmZvKS4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwoKLyoqKioqKioqKioqKioqKioqKiBWYXJpYWJsZXMgZm9yIHRoZSBTaXRlIEFkbWluIEZpbHRlciBNYW5hZ2VtZW50IFRhYiAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdmFyIF9IUF9GSV9CbG9ja1BvcyA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGlzIHRoZSBGaWx0ZXIgQmxvY2sgUG9zaXRpb248YnIvPjxici8+SWYgTGVmdCBpcyBzZWxlY3RlZCBpdCB3aWxsIGJlIHNob3duIGluIHRoZSBTaWRlYmFyIChkb2Vzbid0IHdvcmsgd2l0aCBHYWxsZXJ5IHYyLjIrKS48YnIvPjxici8+SWYgVG9wIG9yIEJvdHRvbSBpcyBzZWxlY3RlZCwgaXQgd2lsbCBiZSBmbGF0Ljxici8+PGJyLz5CeSBkZWZhdWx0IGl0IGlzIGhpZGRlbi4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwoKdmFyIF9IUF9GSV9NYW51YWxGaWx0ZXIgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBhbGxvd3MgeW91IHRvIGFkZCBNYW51YWwgZmlsdGVycy48YnIvPjxici8+TWFudWFsIGZpbHRlcnMgYXJlIGEgc2V0IG9mIGNvb3JkaW5hdGVzIGFuZCBhIHpvb20gbGV2ZWwgdG8gY2VudGVyIHRoZSBtYXAgb24gYSBzcGVjaWZpYyBhcmVhOyBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgTWFwIGRhdGEuPGJyLz48YnIvPllvdSBjYW4gYWRkLCByZW1vdmUgb3IgZWRpdCBmaWx0ZXJzOyBBZGQgb3IgRWRpdCB3aWxsIHNob3cgdGhlIHNhbWUgd2luZG93LiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7Cgp2YXIgX0hQX0ZJX0FsYnVtRmlsdGVyID0gJ3tnLT50ZXh0IHRleHQ9IkFsYnVtIEZpbHRlcnMgd2lsbCBjcmVhdGUgYSBmaWx0ZXIgZm9yIGVhY2ggYWxidW0gdGhhdCBoYXMgaXRlbXMgKG9yIHN1Yi1pdGVtcykgd2l0aCBHUFMgY29vcmRpbmF0ZXMuPGJyLz48YnIvPlNlbGVjdGluZyBhbiBBbGJ1bSBGaWx0ZXIgd2lsbCBzaG93IGEgbWFwIHdpdGggb25seSBpdGVtcyBmcm9tIHRoYXQgYWxidW0sIHNpbWlsYXIgdG8gXCJTaG93IEFsYnVtIG9uIGEgTWFwXCIiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX0ZJX0FsYnVtRmlsdGVyRGVwdGggPSAne2ctPnRleHQgdGV4dD0iVGhpcyBjb250cm9scyB0aGUgZGVwdGggb2Ygc3ViLWFsYnVtcyB0byBzaG93Ljxici8+PGJyLz5UaGUgQWxidW0gTWFwIHdpbGwgbm90IHNob3cgaXRlbXMgdGhhdCBhcmUgbmVzdGVkIGRlZXBlciB0aGFuIHRoZSBsZXZlbCBlbnRlcmVkLjxici8+PGJyLz5CeSBkZWZhdWx0LCB0aGVyZSBpcyBubyBsaW1pdCB0byB0aGUgZGVwdGguIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9GSV9BbGJ1bUZpbHRlckRlcHRoUm9vdCA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIG92ZXJyaWRlcyB0aGUgYWJvdmUgc2V0dGluZ3MgZm9yIHRoZSBSb290IGFsYnVtIGFuZCBsaW1pdHMgdGhlIEFsYnVtIE1hcCB0byBzaG93IG9ubHkgdG9wLWxldmVsIGl0ZW1zIGluY2x1ZGVkIGluIHRoZSBSb290IGFsYnVtIGFuZCBleGNsdWRlcyBpdGVtcyBpbiBzdWItYWxidW1zLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CgovKioqKioqKioqKioqKioqKioqIFZhcmlhYmxlcyBmb3IgdGhlIFNpdGUgQWRtaW4gQWRkL0VkaXQgRmlsdGVyICoqKioqKioqKioqKioqKioqKioqKioqKioqLwp2YXIgX0hQX0ZJX0FkZE5hbWUgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsdGVyIHdoaWNoIHdpbGwgYmUgc2hvd24gaW4gdGhlIGRyb3Bkb3duIGluc2lkZSB0aGUgZmlsdGVyIGJsb2NrLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfRklfQWRkR1BTID0gJ3tnLT50ZXh0IHRleHQ9IlRoZXNlIGFyZSB0aGUgY29vcmRpbmF0ZXMgb24gd2hpY2ggdG8gY2VudGVyIHRoZSBtYXAgZm9yIHRoaXMgc3BlY2lmaWMgZmlsdGVyLiBTZWxlY3RpbmcgdGhlIGNvb3JkaW5hdGVzIGZyb20gYSBtYXAgd2lsbCBzZXQgYm90aCB0aGUgY29vcmRpbmF0ZXMgYW5kIHpvb20uIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9GSV9BZGRab29tID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgaXMgdGhlIHpvb20gdG8gdXNlIHdoZW4gdGhlIGZpbHRlciBpcyBzZWxlY3RlZC4gSXQgY2FuIGJlIGNob3NlbiBmcm9tIGEgbWFwIGRpcmVjdGx5IChzZWUgYmVsb3cpLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CgovKioqKioqKioqKioqKioqKioqIFZhcmlhYmxlcyBmb3IgdGhlIFNpdGUgQWRtaW4gQWRkL0VkaXQgR3JvdXAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZhciBfSFBfR19OYW1lID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgaXMgdGhlIG5hbWUgYW5kIHRpdGxlIG9mIHRoZSBHcm91cC48YnIvPjxici8+SXQgd2lsbCBiZSBkaXNwbGF5ZWQgb24gdGhlIHRvcCBvZiB0aGUgSW5mb1dpbmRvdyBhcyB3ZWxsIGFzIGluIHRoZSB0b29sdGlwIHdoZW4gdGhlIG1vdXNlIGlzIG9uIHRoZSBtYXJrZXIuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9HX0RhdGUgPSAne2ctPnRleHQgdGV4dD0iVGhpcyB0aGUgZGF0ZSBvZiB0aGUgaXRlbSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIEluZm9XaW5kb3cuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9HX1N1bW1hcnkgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBpcyB0aGUgXCJTdW1tYXJ5XCIgaW4gdGhlIEdhbGxlcnkgc2Vuc2UuPGJyLz48YnIvPlRoaXMgd2lsbCBzaG93IGluIHRoZSBJbmZvV2luZG93IGlmIGNvbmZpZ3VyZWQgaW4gdGhlIFRoZW1lIFNldHRpbmdzLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfR19UaHVtYiA9ICd7Zy0+dGV4dCB0ZXh0PSJTZWxlY3QgYSBUaHVtYm5haWwgZm9yIHRoaXMgZ3JvdXAuPGJyLz48YnIvPlRoZSBwaWN0dXJlIHdpbGwgYmUgc2hvd24gaW4gdGhlIEluZm9XaW5kb3cgc2l6ZWQgdG8gZml0Ljxici8+PGJyLz5Pbmx5IEpQRyBpbWFnZXMgc2VlbSB0byB3b3JrIGNvcnJlY3RseS4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX0dfRGVzY3JpcHRpb24gPSAne2ctPnRleHQgdGV4dD0iVGhpcyBpcyB0aGUgXCJEZXNjcmlwdGlvblwiIGluIHRoZSBHYWxsZXJ5IHNlbnNlLjxici8+PGJyLz5UaGlzIHdpbGwgc2hvdyBpbiB0aGUgSW5mb1dpbmRvdyBpZiBjb25maWd1cmVkIGluIHRoZSBUaGVtZSBTZXR0aW5ncy4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX0dfR1BTID0gJ3tnLT50ZXh0IHRleHQ9IlRoZXNlIGFyZSB0aGUgY29vcmRpbmF0ZXMgYXQgd2hpY2ggdGhlIEdyb3VwIE1hcmtlciB3aWxsIHNob3cgdXAgb24gdGhlIG1hcC48YnIvPjxici8+VGhlIGNvb3JkaW5hdGVzIGFuZCB6b29tIGNhbiBiZSBjaG9zZW4gZnJvbSBhIG1hcC4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX0dfWm9vbUluID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgaXMgdGhlIHpvb20gbGV2ZWwgYXQgd2hpY2ggdGhlIG1hcCB3aWxsIGJlIGRpc3BsYXllZCB3aGVuIHRoZSBab29tIEluIGxpbmsgaXMgY2xpY2tlZC48YnIvPjxici8+VGhlIFpvb20gSW4gbGluayB3aWxsIGJlIHNob3duIGluIHRoZSBJbmZvV2luZG93IGlmIGNvbmZpZ3VyZWQgaW4gdGhlIFRoZW1lIFNldHRpbmdzLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfR19Db2xvciA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGlzIHRoZSBjb2xvciBvZiB0aGUgbWFya2VyLjxici8+PGJyLz5UaGUgbGlzdCBpcyBjcmVhdGVkIGZyb20gdGhlIGF2YWlsYWJsZSBjb2xvcnMgZm9yIHRoZSBHcm91cCBNYXJrZXIgaW4gdGhlIE1hcmtlciBUYWIuIiBmb3JKYXZhc2NyaXB0PXRydWV9Jwp2YXIgX0hQX0dfSXRlbXMgPSAne2ctPnRleHQgdGV4dD0iQ2hlY2sgdGhlIGl0ZW1zIHlvdSB3YW50IHRvIGRpc3BsYXkgb24gdGhlIG1hcCB3aGVuIHRoZSBncm91cCBpcyBzZWxlY3RlZC48YnIvPjxici8+SWYgbm8gaXRlbXMgYXJlIHNlbGVjdGVkLCBhbiBlcnJvciB3aWxsIGJlIGRpc3BsYXllZCB3aGVuIHRoZSBncm91cCB0aHVtYm5haWwgaXMgY2xpY2tlZC4gUGluayBpdGVtcyBhcmUgcGhvdG9zLCBncmVlbiBpdGVtcyBhcmUgYWxidW1zIGFuZCBibHVlIGl0ZW1zIGFyZSBvdGhlciBncm91cHMuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKCi8qKioqKioqKioqKioqKioqKiogVmFyaWFibGVzIGZvciB0aGUgU2l0ZSBBZG1pbiBSb3V0ZSBNYW5hZ2VtZW50ICoqKioqKioqKioqKioqKioqKioqKioqKioqLwp2YXIgX0hQX1JfTWFpbkhlbHAgPSAne2ctPnRleHQgdGV4dD0iQWNjb3JkaW5nIHRvIHRoZSBHb29nbGUgQVBJIGRvY3VtZW50YXRpb24sIGlmIHlvdSB3YW50IHRoZSByb3V0ZXMgKGFsc28ga25vd24gYXMgcG9seWxpbmVzKSB0byB3b3JrIHByb3Blcmx5IGluIEludGVybmV0IEV4cGxvcmVyLCB5b3UgbXVzdCBoYXZlIHRoZSBwcm9wZXIgYXR0cmlidXRlcyBpbiB0aGUgd2ViIHBhZ2UgSFRNTCB0YWcuPGJyLz48YnIvPklmIHlvdSBkb24ndCBoYXZlIHRoaXMgc2V0dXAgcHJvcGVybHksIHRoZSBtYXAgd2lsbCBub3Qgd29yayBvciB0aGUgcm91dGVzIHdpbGwgbm90IHNob3cgdXAgd2hlbiB2aWV3ZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIuPGJyLz48YnIvPlRoaXMgYnV0dG9uIHdpbGwgY2hhbmdlIHRoZW1lLnRwbCBvZiB0aGUgZGVmYXVsdCBHYWxsZXJ5IHRoZW1lIHRvIG1vZGlmeSB0aGUgSFRNTCB0YWcuIEEgYmFja3VwIG9mIHRoZSBmaWxlIGNhbGxlZCB0aGVtZS5iYWsgd2lsbCBiZSBzYXZlZCBpbiB0aGUgc2FtZSBwbGFjZS48YnIvPjxici8+SWYgeW91ciBHYWxsZXJ5IGJlY29tZXMgdW51c2FibGUgYWZ0ZXIgY2xpY2tpbmcgdGhpcywgcmVzdG9yZSB0aGVtZS5iYWsgdG8gdGhlbWUudHBsICh2aWEgRlRQIG9yIHNoZWxsIGFjY2VzcykgdG8gZ2V0IGV2ZXJ5dGhpbmcgYmFjayB0byBub3JtYWwuPGJyLz48YnIvPllvdSBjYW4gdGhlbiBtYWtlIHRoZSBjaGFuZ2UgYnkgaGFuZCAoc2VlIFdpa2kpIHdoaWNoIGlzIGEgYml0IHNhZmVyLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7Cgp2YXIgX0hQX1JfQWN0aXZhdGVOdW1iZXJzID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgd2lsbCBwdXQgbnVtYmVycyBpbiBlYWNoIGljb24gdGhhdCBiZWxvbmdzIHRvIGEgcm91dGUuPGJyPjxicj5DdXJyZW50bHksIHRoaXMgcmVxdWlyZXMgSW1hZ2VNYWdpY2sgdG8gYmUgZnVuY3Rpb25hbCwgb3RoZXJ3aXNlIHRoZSBtYXJrZXJzIGNhbm5vdCBiZSBjcmVhdGVkIGFuZCB3aWxsIG5vdCBiZSBzaG93bi48YnI+PGJyPklmIHlvdSdyZSBnZXR0aW5nIG5vIG1hcmtlcnMgYXQgYWxsLCB2ZXJpZnkgdGhhdCB0aGUgd2ViIHNlcnZlciBoYXMgcmlnaHRzIHRvIHdyaXRlIHRvIG1vZHVsZXMvbWFwL2ltYWdlcy9yb3V0ZXMvLiIgZm9ySmF2YXNjcmlwdD10cnVlfScKCi8qKioqKioqKioqKioqKioqKiogVmFyaWFibGVzIGZvciB0aGUgU2l0ZSBBZG1pbiBBZGQvRWRpdCBSb3V0ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdmFyIF9IUF9SX05hbWUgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBpcyBhIG5hbWUgZm9yIHlvdXIgcm91dGUuIEl0IHdpbGwgYmUgdXNlZCBvbiB0aGUgUm91dGVzIG1hbmFnZW1lbnQgcGFnZSBhbmQgc2hvd24gaW4gdGhlIGZpbHRlciBsaXN0IGlmIFwiRmlsdGVyXCIgaXMgc2VsZWN0ZWQgYmVsb3cuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKdmFyIF9IUF9SX0NvbG9yID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgaXMgdGhlIGNvbG9yIGZvciB0aGUgbGluZXMgdGhhdCB3aWxsIHNob3cgYXMgYSByb3V0ZSBvbiB0aGUgbWFwLjxici8+PGJyLz5UaGUgZGVmYXVsdCBpcyBwdXJwbGUuPGJyLz48YnIvPkNsaWNrIG9uIHRoZSBjb2xvciB0byBwaWNrIGZyb20gYSBwYWxldHRlIG9yIGVudGVyIHRoZSBSR0IgaGV4IHZhbHVlIGluIHRoZSB0ZXh0IGJveC4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX1JfU2l6ZSA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGlzIHRoZSB3aWR0aCBvZiB0aGUgbGluZSBpbiBwaXhlbHMuPGJyLz48YnIvPlRoZSB3aWR0aCBpcyAzIHBpeGVscyBieSBkZWZhdWx0LiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfUl9PcGFjaXR5ID0gJ3tnLT50ZXh0IHRleHQ9IkNoYW5nZSB0aGUgb3BhY2l0eSB0byBhZGp1c3QgdGhlIHRyYW5zcGFyZW5jeSBvZiB0aGUgcm91dGUgbGluZS48YnIvPjxici8+SXQgaXMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLCB3aXRoIDEgYmVpbmcgdGhlIGRlZmF1bHQuPGJyLz48YnIvPjAgaXMgaW52aXNpYmxlIGFuZCAxIGlzIGNvbXBsZXRlbHkgb3BhcXVlLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfUl9FbmFibGVkID0gJ3tnLT50ZXh0IHRleHQ9IkRpc2FibGluZyB0aGUgcm91dGUgYWxsb3dzIHlvdSB0byByZW1vdmUgaXQgZnJvbSB0aGUgbWFwIHdpdGhvdXQgZGVsZXRpbmcgdGhlIHJvdXRlIGl0c2VsZi4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwp2YXIgX0hQX1JfRmlsdGVyID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgc2V0dGluZyB3aWxsIGNyZWF0ZSBhIGZpbHRlciBmb3IgdGhpcyByb3V0ZSB3aGljaCB3aWxsIGFwcGVhciBpbiB0aGUgZmlsdGVyIGJsb2NrLjxici8+PGJyLz5XaGVuIHRoZSBmaWx0ZXIgaXMgc2VsZWN0ZWQgaXQgd2lsbCBhdXRvLXpvb20gYW5kIGNlbnRlciB0aGUgbWFwIHRvIGRpc3BsYXkgaXRlbXMgaW4gdGhlIHJvdXRlLiIgZm9ySmF2YXNjcmlwdD10cnVlfSc7CnZhciBfSFBfUl9pdGVtcyA9ICd7Zy0+dGV4dCB0ZXh0PSJTZWxlY3QgdGhlIGl0ZW1zIHRvIGluY2x1ZGUgaW4gdGhpcyByb3V0ZSBhbmQgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBpdGVtcyBzaG91bGQgYXBwZWFyLiBUaGUgbWFya2VycyBmb3IgdGhlc2UgaXRlbXMgd2lsbCBiZSBjcmVhdGVkIGR5bmFtaWNhbGx5IHRvIGFkZCBhIG51bWJlciBmb3IgdGhlIGl0ZW0gaW4gdGhlIHJvdXRlIHNlcXVlbmNlLjxici8+PGJyLz5Zb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3QgMiBpdGVtcyB0byBjcmVhdGUgYSByb3V0ZS48YnIvPjxici8+UGluayBpdGVtcyBhcmUgcGhvdG9zLCBncmVlbiBpdGVtcyBhcmUgYWxidW1zIGFuZCBibHVlIGl0ZW1zIGFyZSBncm91cHMuIiBmb3JKYXZhc2NyaXB0PXRydWV9JzsKCi8qKioqKioqKioqKioqKioqIFZhcmlhYmxlcyBmb3IgdGhlIFNpdGUgQWRtaW4gLyBNYXJrZXIgU2V0dGluZyAqKioqKioqKioqKioqKioqKioqKioqKiovCnZhciBfSFBfTV9NYW5hZ2UgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBhbGxvd3MgeW91IHRvIHNlZSB3aGF0IG1hcmtlcnMgYXJlIGF2YWlsYWJsZS48YnIvPjxici8+Q2xpY2sgVmlldyBBbGwgdG8gc2VlIGFsbCBhdmFpbGFibGUgbWFya2VyIHNldHMuPGJyLz48YnIvPlNlbGVjdCBhIG1hcmtlcnNldCBmcm9tIHRoZSBkcm9wZG93biBhbmQgQ2xpY2sgRGVsZXRlIHRvIHJlbW92ZSBpdC48YnIvPjxici8+Q2xpY2sgQWRkIHRvIGNyZWF0ZSBhIG5ldyBtYXJrZXIgc2V0LiIgZm9ySmF2YXNjcmlwdD10cnVlfScKCnZhciBfSFBfTV9EZWZQaG90byA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGlzIHRoZSBNYXJrZXIgU2V0IGZvciBQaG90b3MgYW5kIGFsc28gdGhlIGRlZmF1bHQgY29sb3IgaWYgbm9uZSBpcyBzZWxlY3RlZCBmb3IgYSBzcGVjaWZpYyBwaG90by4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nCgp2YXIgX0hQX01fRGVmQWxidW0gPSAne2ctPnRleHQgdGV4dD0iVGhpcyBpcyB0aGUgTWFya2VyIFNldCBmb3IgQWxidW1zIGFuZCBhbHNvIHRoZSBkZWZhdWx0IGNvbG9yIGlmIG5vbmUgaXMgc2VsZWN0ZWQgZm9yIGEgc3BlY2lmaWMgYWxidW0uIiBmb3JKYXZhc2NyaXB0PXRydWV9JwoKdmFyIF9IUF9NX0RlZkdyb3VwID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgaXMgdGhlIE1hcmtlciBTZXQgZm9yIEdyb3VwcyBhbmQgYWxzbyB0aGUgZGVmYXVsdCBjb2xvciBpZiBub25lIGlzIHNlbGVjdGVkIGZvciBhIHNwZWNpZmljIGdyb3VwLiIgZm9ySmF2YXNjcmlwdD10cnVlfScKCnZhciBfSFBfTV9Vc2VQYXJlbnQgPSAne2ctPnRleHQgdGV4dD0iV2hlbiB0aGlzIGlzIGNoZWNrZWQsIGFuIGl0ZW0gd2l0aG91dCBhIGNvbG9yIHNlbGVjdGVkIHdpbGwgdXNlIGl0cyBwYXJlbnQgYWxidW0ncyBjb2xvci48YnI+PGJyPklmIHRoZSBwYXJlbnQgaGFzIG5vIGNvbG9yIHNlbGVjdGVkLCB0aGVuIGl0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGNvbG9yIGFib3ZlLjxicj48YnI+VGhpcyBhbGxvd3MgeW91IHRvIHVzZSBhIHNwZWNpZmljIGNvbG9yIGZvciBhbiBlbnRpcmUgYWxidW0uIiBmb3JKYXZhc2NyaXB0PXRydWV9JwoKdmFyIF9IUF9NX0FsYnVtUmVncm91cCA9ICd7Zy0+dGV4dCB0ZXh0PSJXaGVuIHRoaXMgaXMgY2hlY2tlZCwgYWxsIGl0ZW1zIGNsb3NlIHRvIHRoZWlyIHBhcmVudCBhbGJ1bSB3aWxsIGJlIGhpZGRlbi48YnI+PGJyPldoZW4gdGhlIHpvb20gbGV2ZWwgaXMgaGlnaCBlbm91Z2ggdG8gc2hvdyBhbGwgb2YgdGhlIGNoaWxkcmVuIGl0ZW1zLCB0aGUgYWxidW0gaXRlbSB3aWxsIG5vdCBzaG93biBvbiB0aGUgbWFwLiIgZm9ySmF2YXNjcmlwdD10cnVlfScKCnZhciBfSFBfTV9JdGVtUmVncm91cCA9ICd7Zy0+dGV4dCB0ZXh0PSJXaGVuIHRoaXMgaXMgY2hlY2tlZCwgYWxsIGl0ZW1zIHRvbyBjbG9zZSB0b2dldGhlciB3aWxsIGJlIGdyb3VwZWQgaW50byBhbm90aGVyIGl0ZW0uPGJyPjxicj5JZiB0aGUgaXRlbSBpcyBjbGlja2VkLCB0aGUgY29ycmVjdCB6b29tIGxldmVsIHdpbGwgYmUgdXNlZCB0byBzaG93IGFsbCBpdGVtcyBpbnNpZGUgdGhlIGdyb3VwLjxicj48YnI+VGhlIHJlZ3JvdXBpbmcgaGFwcGVucyBkeW5hbWljYWxseSB3aGVuIHRoZSB6b29tIHNjYWxlIGlzIGNoYW5nZWQuPGJyPjxicj5UaGlzIGNhbiBzbG93IGRvd24gdGhlIG1hcCBkaXNwbGF5IGlmIGxvdHMgb2YgaXRlbXMgYXJlIHByZXNlbnQuICg+MTAwMCkiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nCgp2YXIgX0hQX01fRGlzdGFuY2UgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBpcyB0aGUgZGlzdGFuY2UgKGluIHBpeGVscykgYXQgd2hpY2ggaXRlbXMgZ2V0IHJlZ3JvdXBlZC4gVGhpcyBjYW4gYmUgY2hhbmdlZCBzbyB0aGF0IGRpZmZlcmVudCBpY29uIHNpemVzIHdvbid0IG92ZXJsYXAuPGJyPjxicj5UaGUgZGVmYXVsdCBpcyAxNSBwaXhlbHMuIiBmb3JKYXZhc2NyaXB0PXRydWV9JwoKdmFyIF9IUF9NX1VwbG9hZE5ldyA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGFsbG93cyB5b3UgdG8gdXBsb2FkIGEgbmV3IGljb24gdG8gdXNlIGZvciB0aGUgcmVncm91cGVkIGl0ZW1zLiIgZm9ySmF2YXNjcmlwdD10cnVlfScKCnZhciBfSFBfTV9JY29uRm9yUmVncm91cCA9ICd7Zy0+dGV4dCB0ZXh0PSJTZWxlY3Qgd2hpY2ggaWNvbiB5b3Ugd2FudCB0byBkaXNwbGF5IG9uIHRoZSBtYXAgaW4gcGxhY2Ugb2YgdGhlIHJlZ3JvdXBlZCBpdGVtcy48YnI+PGJyPlRoaXMgaXMgb25seSB1c2VkIGlmIGF1dG9tYXRpYyByZWdyb3VwIG9mIGl0ZW1zIGlzIGVuYWJsZWQuIiBmb3JKYXZhc2NyaXB0PXRydWV9JwoKCi8qKioqKioqKioqKioqKioqIFZhcmlhYmxlcyBmb3IgdGhlIFNpdGUgQWRtaW4gLyBNYXJrZXIgQ3JlYXRlICoqKioqKioqKioqKioqKioqKioqKioqKi8KdmFyIF9IUF9NQ19CYXNlID0gJ3tnLT50ZXh0IHRleHQ9IlNlbGVjdCBhbiBleGlzdGluZyBiYXNlIGltYWdlIGZyb20gd2hpY2ggdG8gY3JlYXRlIGEgbWFya2VyIHNldC48YnIvPjxici8+VGhlIGJhc2UgY29sb3IgbXVzdCBiZSByZWRkaXNoIGluIG9yZGVyIGZvciBJbWFnZU1hZ2ljayB0byBwcm9wZXJseSBwcm9jZXNzIHRoZSBjb2xvcnMuIE90aGVyd2lzZSwgcmVzdWx0cyB3aWxsIGJlIHVucHJlZGljdGFibGUuIiBmb3JKYXZhc2NyaXB0PXRydWV9JwoKdmFyIF9IUF9NQ19VcGxvYWROZXcgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBhbGxvd3MgeW91IHRvIHVwbG9hZCBhIG5ldyBpY29uIGZyb20gd2hpY2ggdG8gY3JlYXRlIGEgbWFya2VyIHNldC48YnIvPjxici8+UmVtZW1iZXIgdGhlIGNvbG9yIG5lZWRzIHRvIGJlIHNvbWV3aGF0IHJlZC9waW5rIGZvciB0aGUgY29sb3JpbmcgdG8gd29yayBjb3JyZWN0bHkuIiBmb3JKYXZhc2NyaXB0PXRydWV9JwoKdmFyIF9IUF9NQ19TaXplQ2hhbmdlID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgYWxsb3dzIHlvdSB0byBhZGp1c3QgdGhlIHNpemUgb2YgYWxsIHRoZSBtYXJrZXJzIGNyZWF0ZWQgaW4gdGhlIG5ldyBzZXQgcmVsYXRpdmUgdG8gdGhlIG9yaWdpbmFsIChiYXNlKSBpbWFnZSB1c2VkLiIgZm9ySmF2YXNjcmlwdD10cnVlfScKCnZhciBfSFBfTUNfQ29sb3JDaGFuZ2UgPSAne2ctPnRleHQgdGV4dD0iSGVyZSB5b3UgY2FuIGVpdGhlciBjaG9vc2UgYWxsIGNvbG9ycywgb3Igc2VsZWN0IHNwZWNpZmljIGNvbG9ycy4gSWYgeW91IGNob29vc2Ugc3BlY2lmaWMgY29sb3JzLCBvbmx5IHRob3NlIGNvbG9ycyB3aWxsIGJlIGF2YWlsYWJsZSBpbiB0aGUgY29sb3Igc2VsZWN0aW9uIGZvciBlYWNoIGl0ZW0uIiBmb3JKYXZhc2NyaXB0PXRydWV9JwoKdmFyIF9IUF9NQ19NYXJrZXJOYW1lID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgaXMgdGhlIG1hcmtlciBzZXQgbmFtZS48YnIvPjxici8+SWYgdGhlIHNldCBhbHJlYWR5IGV4aXN0cywgeW91IHdpbGwgYmUgZ2l2ZW4gdGhlIG9wb3J0dW5pdHkgdG8gb3ZlcndyaXRlIG9yIGNhbmNlbC4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nCgovKioqKioqKioqKioqKioqKiBWYXJpYWJsZXMgZm9yIHRoZSBVc2VyIEl0ZW0gQWRtaW4gKioqKioqKioqKioqKioqKioqKioqKioqLwoKdmFyIF9IUF9VX0dQUyA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGlzIHRoZSBHUFMgY29vcmRpbmF0ZXMgaW4gdGhlIGZvcm1hdCBsYXRpdHVkZSwgbG9uZ2l0dWRlLjxicj48YnI+VGhlcmUgYXJlIDQgb3B0aW9ucyB0byBnZXQgY29vcmRpbmF0ZXMgaGVyZTo8YnI+IC0gRW50ZXIgdGhlbSBtYW51YWxseS48YnI+PGJyPiAtIEdldCB0aGVtIGZyb20gdGhlIEVYSUYgaGVhZGVyIChhIGJ1dHRvbiB0byBnZXQgZnJvbSBFWElGIGhlYWRlciB3aWxsIHNob3cgdXAgaWYgdGhleSdyZSBhdmFpbGFibGUpLjxicj48YnI+IC0gRW50ZXIgYW4gYWRkcmVzcyBhbmQgY2xpY2sgJ0dldCBWaWEgQWRkcmVzcycuPGJyPjxicj4gLSBDbGljayB0aGUgR2V0IHZpYSBtYXAgdG8gbWFudWFsbHkgc2VsZWN0IHRoZW0uKSIgZm9ySmF2YXNjcmlwdD10cnVlfScKCnZhciBfSFBfVV9ab29tTGV2ZWwgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBpcyB1c2VkIHdpdGggdGhlICdab29tLWluJyBsaW5rLjxicj48YnI+SWYgdGhhdCBvcHRpb24gaXMgYWN0aXZhdGVkIGluIHRoZSBTaXRlIEFkbWluLCBpdCB3aWxsIHNob3cgYSBsaW5rIGluIHRoZSBJbmZvV2luZG93IHRvIHpvb20gdGhlIG1hcCB0byB0aGUgdmFsdWUgZW50ZXJlZCBmb3IgdGhlIGl0ZW0uPGJyPjxicj5IaWdoZXIgdmFsdWVzIG1lYW4gY2xvc2VyIHRvIHRoZSBzdHJlZXQgbGV2ZWwgKGZyb20gMCB0byAxOSkuIiAgZm9ySmF2YXNjcmlwdD10cnVlfScKCnZhciBfSFBfVV9HRUxvb2tBdCA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGZpZWxkIGFsbG93cyB5b3UgdG8gY3VzdG9taXplIHRoZSB2aWV3cG9pbnQgZm9yIHRoZSBpdGVtIGluIEdvb2dsZSBFYXJ0aCB3aGVuIHRoZSBtYXJrZXIgaXMgZG91YmxlLWNsaWNrZWQuPGJyPjxicj5FbnRlciB0aGUgcGFyYW1ldGVycyBpbiB0aGUgZm9ybWF0OiBoZWFkaW5nLHRpbHQscmFuZ2UuIiBmb3JKYXZhc2NyaXB0PXRydWV9JwoKdmFyIF9IUF9VX0NvbG9yID0gJ3tnLT50ZXh0IHRleHQ9IlRoaXMgaXMgc2ltcGx5IHRoZSBjb2xvciBvZiB0aGUgbWFya2VyIHRvIHVzZSBmb3IgdGhhdCBpdGVtLjxicj48YnI+SWYgbm8gY29sb3IgaXMgc2VsZWN0ZWQsIGVpdGhlciB0aGUgZGVmYXVsdCBtYXJrZXIgY29sb3IgaXMgY2hvc2VuIG9yIChpZiBhdmFpbGFibGUgYW5kIGVuYWJsZWQpIHRoZSBwYXJlbnQgYWxidW0gY29sb3Igd2lsbCBiZSB1c2VkLiIgZm9ySmF2YXNjcmlwdD10cnVlfScKCnZhciBfSFBfVV9HZXRWaWFNYXAgPSAne2ctPnRleHQgdGV4dD0iVGhpcyBzaW1wbHkgc2hvd3MgYSBtYXAgYW5kIGFsbG93cyB5b3UgdG8gY2xpY2sgb24gaXQgdG8gZGVmaW5lIHdoZXJlIHRoZSBtYXJrZXIgbG9jYXRpb24gYW5kIGFzc29jaWF0ZWQgem9vbSBsZXZlbC4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nCgp2YXIgX0hQX1VfR2V0VmlhQWRkcmVzcyA9ICd7Zy0+dGV4dCB0ZXh0PSJFbnRlciB0aGUgYWRkcmVzcyBpbiB0aGUgZm9ybWF0IDxicj4gJzIwMiBOb3J0aCBMYXNhbGxlLCBDaGljYWdvLCBJTCcgZm9yIGV4YW1wbGUuPGJyPjxicj5UaGVuIGNsaWNrIHRoZSBidXR0b24gdG8gcmV0cmlldmUgdGhlIGNvb3JkaW5hdGVzLiBCZSBzdXJlIHRvIGNsaWNrIHRoZSBzYXZlIGJ1dHRvbiB0byBrZWVwIHRoZSBjb29yZGluYXRlcy4iIGZvckphdmFzY3JpcHQ9dHJ1ZX0nCgp2YXIgX0hQX1VfR2V0VmlhRXhpZiA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIGJ1dHRvbiBvbmx5IGFwcGVhcnMgd2hlbiBhbiBFWElGIGhlYWRlciBpcyBwcmVzZW50IGFuZCBHUFMgY29vcmRpbmF0ZXMgYXJlIGZvdW5kIGluIHRoZSBwaG90byBoZWFkZXIgZGF0YS48YnI+PGJyPlNpbXBseSBjbGljayB0aGUgYnV0dG9uIHRvIHBvcHVsYXRlIGFuZCBzYXZlIHRoZSBjb29yZGluYXRlcyBmb3IgdGhhdCBpdGVtLiIgZm9ySmF2YXNjcmlwdD10cnVlfScKCnZhciBfSFBfVV9Xcml0ZVRvRXhpZiA9ICd7Zy0+dGV4dCB0ZXh0PSJUaGlzIHdpbGwgbW9kaWZ5IHRoZSBwaG90byBhbmQgd3JpdGUgdGhlIGN1cnJlbnQgY29vcmRpbmF0ZXMgdG8gaXRzIEVYSUYgaGVhZGVyLjxicj48YnI+SXQgY2FuIGJlIHVzZWQgYXMgYSBmb3JtIG9mIGJhY2t1cCBmb3IgdGhlIGNvb3JkaW5hdGVzIGlmIHRoZXkgZ2V0IGxvc3QuIiBmb3JKYXZhc2NyaXB0PXRydWV9Jwo=');
expand_3537250845($outputDir, 'templates/infowindow/centered.inc', 'PD9waHAKJG1hcFsnTGFiZWxzJ11bMF09Im5vbmUiOwokbWFwWydleHRyYW1hcCddID0gIiI7CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09IicnCiAgICAgICsnPGRpdiBzdHlsZT1cIndpZHRoOjIwMHB4XCI+PGNlbnRlcj48YSBocmVmPVwiJytpdGVtTGluaysnXCI+Jyt0aXRsZSsnPC9hPjxici8+JwogICAgICArJzxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIj48aW1nIHNyYz1cIicrdGh1bWJMaW5rKydcIiB3aWR0aD1cIicrdGh3KydcIiBoZWlnaHQ9XCInK3RoaCsnXCIgYWx0PVwiJyt0aXRsZSsnXCIgc3R5bGU9XCJtYXgtd2lkdGg6MjAwcHg7bWF4LWhlaWdodDoyMDBweDtcIi8+PC9hPicKICAgICAgKyc8YnIvPjxmb250IGNvbG9yPWJsYWNrPjxiPiIuJG1vZHVsZS0+dHJhbnNsYXRlKCJEYXRlOiIpLiI8L2I+ICcrY3JlYXRlZCsnPC9mb250PiciOwppZiAoJG1hcFsnc2hvd0l0ZW1TdW1tYXJpZXMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsoc3VtbWFyeSE9XCJcIj8nPGJyLz48YnIvPjxkaXYgc3R5bGU9XCJ3aWR0aDoyMDBweFwiPjxmb250IGNvbG9yPWJsYWNrPicrc3VtbWFyeSsnPC9mb250PjwvZGl2Pic6JycpIjsKfQppZiAoJG1hcFsnc2hvd0l0ZW1EZXNjcmlwdGlvbnMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsoZGVzY3JpcHRpb24hPVwiXCI/Jzxici8+PGJyLz48ZGl2IHN0eWxlPVwid2lkdGg6MjAwcHhcIj48Zm9udCBjb2xvcj1ibGFjaz4nK2Rlc2NyaXB0aW9uKyc8L2ZvbnQ+PC9kaXY+JzonJykiOwp9CgppZiAoJG1hcFsnc2hvd1pvb21MaW5rcyddKXsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48YSBocmVmPVwiI3pvb21pbmxpbmtcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDptYXAuc2V0Q2VudGVyKG5ldyBHTGF0TG5nKCcrbGF0KycsJytsb24rJyksICcrem9vbWxldmVsKycpOyByZXR1cm4gZmFsc2U7XCI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIlpvb20gSW4iKS4iPC9hPiciOwp9CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8L2Rpdj48L2NlbnRlcj4nIjsKPz4K');
expand_3537250845($outputDir, 'templates/infowindow/default.inc', 'PD9waHAKJG1hcFsnTGFiZWxzJ11bMF09Im5vbmUiOwokbWFwWydleHRyYW1hcCddID0gIiI7CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09Iic8ZGl2IHN0eWxlPVwid2lkdGg6MjAwcHhcIj48YSBocmVmPVwiJytpdGVtTGluaysnXCI+Jyt0aXRsZSsnPFwvYT48YnIvPicKICAgICAgKyc8YSBocmVmPVwiJytpdGVtTGluaysnXCI+PGltZyBzcmM9XCInK3RodW1iTGluaysnXCIgd2lkdGg9XCInK3RodysnXCIgaGVpZ2h0PVwiJyt0aGgrJ1wiIGFsdD1cIicrdGl0bGUrJ1wiIHN0eWxlPVwibWF4LXdpZHRoOjIwMHB4O21heC1oZWlnaHQ6MjAwcHg7XCIvPjxcL2E+JwogICAgICArJzxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIkRhdGU6IikuIjxcL2I+ICcrY3JlYXRlZCsnPFwvZm9udD4nIjsKaWYgKCRtYXBbJ3Nob3dJdGVtU3VtbWFyaWVzJ10pIHsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArKHN1bW1hcnkhPVwiXCI/Jzxici8+PGJyLz48ZGl2IHN0eWxlPVwid2lkdGg6MjAwcHhcIj48Zm9udCBjb2xvcj1ibGFjaz4nK3N1bW1hcnkrJzxcL2ZvbnQ+PFwvZGl2Pic6JycpIjsKfQppZiAoJG1hcFsnc2hvd0l0ZW1EZXNjcmlwdGlvbnMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsoZGVzY3JpcHRpb24hPVwiXCI/Jzxici8+PGJyLz48ZGl2IHN0eWxlPVwid2lkdGg6MjAwcHhcIj48Zm9udCBjb2xvcj1ibGFjaz4nK2Rlc2NyaXB0aW9uKyc8XC9mb250PjxcL2Rpdj4nOicnKSI7Cn0KCmlmICgkbWFwWydzaG93Wm9vbUxpbmtzJ10pewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsnPGJyLz48YnIvPjxhIGhyZWY9XCIjem9vbWlubGlua1wiIG9uY2xpY2s9XCJqYXZhc2NyaXB0Om1hcC5zZXRDZW50ZXIobmV3IEdMYXRMbmcoJytsYXQrJywnK2xvbisnKSwgJyt6b29tbGV2ZWwrJyk7IHJldHVybiBmYWxzZTtcIj4iLiRtb2R1bGUtPnRyYW5zbGF0ZSgiWm9vbSBJbiIpLiI8XC9hPiciOwp9CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8XC9kaXY+JyI7Cj8+Cg==');
expand_3537250845($outputDir, 'templates/infowindow/g2centered.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0ibm9uZSI7CiRtYXBbJ2V4dHJhbWFwJ10gPSAiIjsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0iJycKCSsnPGRpdiBzdHlsZT1cIjttYXJnaW4tdG9wOjEwcHg7d2lkdGg6MjUwcHg7aGVpZ2h0OjE1MHB4O292ZXJmbG93OmF1dG87XCI+JwoJKyc8Y2VudGVyPjxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+Jyt0aXRsZSsnPC9hPjxici8+JwoJKyc8YSBocmVmPVwiJytpdGVtTGluaysnXCIgdGFyZ2V0PVwnZ3BvcFwnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPjxpbWcgc3JjPVwiJyt0aHVtYkxpbmsrJ1wiIHdpZHRoPVwiJyt0aHcrJ1wiIGhlaWdodD1cIicrdGhoKydcIiBhbHQ9XCInK3RpdGxlKydcIiBzdHlsZT1cIm1heC13aWR0aDoyMDBweDttYXgtaGVpZ2h0OjIwMHB4O1wiLz48L2E+JwoJKyc8YnIvPjxmb250IGNvbG9yPWJsYWNrPjxiPiIuJG1vZHVsZS0+dHJhbnNsYXRlKCJEYXRlOiIpLiI8L2I+ICcrY3JlYXRlZCsnPC9mb250PiciOwoKaWYgKCRtYXBbJ3Nob3dJdGVtU3VtbWFyaWVzJ10pIHsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArKHN1bW1hcnkhPVwiXCI/Jzxici8+PGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj5TdW1tYXJ5OjwvYj48YnIvPicrc3VtbWFyeSsnPC9mb250Pic6JycpIjsKfQoKaWYgKCRtYXBbJ3Nob3dJdGVtRGVzY3JpcHRpb25zJ10pIHsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArKGRlc2NyaXB0aW9uIT1cIlwiPyc8YnIvPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+RGVzY3JpcHRpb246PC9iPjxici8+JytkZXNjcmlwdGlvbisnPC9mb250Pic6JycpIjsKfQoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj5Mb2NhdGlvbjo8L2I+PGJyPicrbGF0KycsJytsb24rJzwvZm9udD4nIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8YnIvPjxhIGhyZWY9XCJodHRwOi8vdGVycmFzZXJ2ZXIubWljcm9zb2Z0LmNvbS9pbWFnZS5hc3B4P3Q9MSZzPTEwJmxvbj0nK2xvbisnJmxhdD0nK2xhdCsnJnc9MVwiIHRhcmdldD1cJ2dwb3BcJycKICAgICAgICArJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj4nCiAgICAgICAgKydWaWV3IGxvY2F0aW9uIGF0IFRlcnJhc2VydmVyPC9hPjxici8+KFVuZm9ydHVuYXRlbHksIFVTQSBvbmx5KSciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGEgaHJlZj1cImh0dHA6Ly90b3Bvem9uZS5jb20vbWFwLmFzcD9sYXQ9JytsYXQrJyZsb249Jytsb24rJyZzPTUwJnNpemU9bSZkYXR1bT1uYWQ4MyZsYXllcj1EUkcyNVwiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj5WaWV3IExvY2FsdGlvbiBhdCBUb3BvWm9uZTwvYT48YnIvPihVbmZvcnR1bmF0ZWx5LCBVU0Egb25seSknIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8YnIvPjxhIGhyZWY9XCJodHRwOi8vd3d3LndlYXRoZXJib25rLmNvbS93ZWF0aGVyL2luZGV4LmpzcD9xdWVyeT0nK2xhdCsnLCcrbG9uKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+V2VhdGhlckJvbmsuY29tIHRoaXMgbG9jYXRpb248L2E+JyI7CgppZiAoJG1hcFsnc2hvd1pvb21MaW5rcyddKXsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48YSBocmVmPVwiI3pvb21pbmxpbmtcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDptYXAuc2V0Q2VudGVyKG5ldyBHTGF0TG5nKCcrbGF0KycsJytsb24rJyksICcrem9vbWxldmVsKycpOyByZXR1cm4gZmFsc2U7XCI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIlpvb20gSW4iKS4iPC9hPiciOwp9CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8L2NlbnRlcj48L2Rpdj4nIjsKPz4K');
expand_3537250845($outputDir, 'templates/infowindow/g2default.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0ibm9uZSI7CiRtYXBbJ2V4dHJhbWFwJ10gPSAiIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09IicnCgkrJzxkaXYgc3R5bGU9XCI7bWFyZ2luLXRvcDoxMHB4O3dpZHRoOjI1MHB4O2hlaWdodDoxNTBweDtvdmVyZmxvdzphdXRvO1wiPicKCSsnPGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj4nK3RpdGxlKyc8L2E+PGJyLz4nCgkrJzxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+PGltZyBzcmM9XCInK3RodW1iTGluaysnXCIgd2lkdGg9XCInK3RodysnXCIgaGVpZ2h0PVwiJyt0aGgrJ1wiIGFsdD1cIicrdGl0bGUrJ1wiIHN0eWxlPVwibWF4LXdpZHRoOjIwMHB4O21heC1oZWlnaHQ6MjAwcHg7XCIvPjwvYT4nCgkrJzxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIkRhdGU6IikuIjo8L2I+ICcrY3JlYXRlZCsnPC9mb250PiciOwoKaWYgKCRtYXBbJ3Nob3dJdGVtU3VtbWFyaWVzJ10pIHsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArKHN1bW1hcnkhPVwiXCI/Jzxici8+PGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj5TdW1tYXJ5OjwvYj48YnIvPicrc3VtbWFyeSsnPC9mb250Pic6JycpIjsKfQoKaWYgKCRtYXBbJ3Nob3dJdGVtRGVzY3JpcHRpb25zJ10pIHsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArKGRlc2NyaXB0aW9uIT1cIlwiPyc8YnIvPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+RGVzY3JpcHRpb246PC9iPjxici8+JytkZXNjcmlwdGlvbisnPC9mb250Pic6JycpIjsKfQoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj5Mb2NhdGlvbjo8L2I+PGJyPicrbGF0KycsJytsb24rJzwvZm9udD4nIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8YnIvPjxhIGhyZWY9XCJodHRwOi8vdGVycmFzZXJ2ZXIubWljcm9zb2Z0LmNvbS9pbWFnZS5hc3B4P3Q9MSZzPTEwJmxvbj0nK2xvbisnJmxhdD0nK2xhdCsnJnc9MVwiIHRhcmdldD1cJ2dwb3BcJycKICAgICAgICArJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj4nCiAgICAgICAgKydWaWV3IGxvY2F0aW9uIGF0IFRlcnJhc2VydmVyPC9hPjxici8+KFVuZm9ydHVuYXRlbHksIFVTQSBvbmx5KSciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGEgaHJlZj1cImh0dHA6Ly90b3Bvem9uZS5jb20vbWFwLmFzcD9sYXQ9JytsYXQrJyZsb249Jytsb24rJyZzPTUwJnNpemU9bSZkYXR1bT1uYWQ4MyZsYXllcj1EUkcyNVwiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj5WaWV3IExvY2FsdGlvbiBhdCBUb3BvWm9uZTwvYT48YnIvPihVbmZvcnR1bmF0ZWx5LCBVU0Egb25seSknIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8YnIvPjxhIGhyZWY9XCJodHRwOi8vd3d3LndlYXRoZXJib25rLmNvbS93ZWF0aGVyL2luZGV4LmpzcD9xdWVyeT0nK2xhdCsnLCcrbG9uKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+V2VhdGhlckJvbmsuY29tIHRoaXMgbG9jYXRpb248L2E+JyI7CgppZiAoJG1hcFsnc2hvd1pvb21MaW5rcyddKXsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48YSBocmVmPVwiI3pvb21pbmxpbmtcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDptYXAuc2V0Q2VudGVyKG5ldyBHTGF0TG5nKCcrbGF0KycsJytsb24rJyksICcrem9vbWxldmVsKycpOyByZXR1cm4gZmFsc2U7XCI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIlpvb20gSW4iKS4iPC9hPiciOwp9CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8L2Rpdj4nIjsKPz4K');
expand_3537250845($outputDir, 'templates/infowindow/g2tabbed.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0iUGljdHVyZSI7CiRtYXBbJ0xhYmVscyddWzFdPSJEZXRhaWxzIjsKJG1hcFsnZXh0cmFtYXAnXSA9ICIiOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0iJycKCSsnPGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj4nK3RpdGxlKyc8L2E+PGJyLz4nCgkrJzxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+PGltZyBzcmM9XCInK3RodW1iTGluaysnXCIgd2lkdGg9XCInK3RodysnXCIgaGVpZ2h0PVwiJyt0aGgrJ1wiIGFsdD1cIicrdGl0bGUrJ1wiIHN0eWxlPVwibWF4LXdpZHRoOjIwMHB4O21heC1oZWlnaHQ6MjAwcHg7XCIvPjwvYT4nIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMV09IicnCisnPGRpdiBzdHlsZT1cIjttYXJnaW4tdG9wOjEwcHg7d2lkdGg6MjUwcHg7aGVpZ2h0OjE1MHB4O292ZXJmbG93OmF1dG87XCI+JwoJKyc8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBzdHlsZT1cIndpZHRoOjkwJTtoZWlnaHQ6MTAwJTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1wiPicKCSsnPHRyPjx0ZD48YSBocmVmPVwiJytpdGVtTGluaysnXCIgdGFyZ2V0PVwnZ3BvcFwnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPicrdGl0bGUrJzwvYT48YnIvPicKCSsnPGZvbnQgY29sb3I9YmxhY2s+PGI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIkRhdGU6IikuIjwvYj4gJytjcmVhdGVkKyc8L2ZvbnQ+JyI7CgppZiAoJG1hcFsnc2hvd0l0ZW1TdW1tYXJpZXMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzFdPSRtYXBbJ2luZm93aW5kb3dzJ11bMV0uIgoJKyhzdW1tYXJ5IT1cIlwiPyc8YnIvPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+U3VtbWFyeTo8L2I+PGJyLz4nK3N1bW1hcnkrJzwvZm9udD4nOicnKSI7Cn0KCmlmICgkbWFwWydzaG93SXRlbURlc2NyaXB0aW9ucyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMV09JG1hcFsnaW5mb3dpbmRvd3MnXVsxXS4iCgkrKGRlc2NyaXB0aW9uIT1cIlwiPyc8YnIvPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+RGVzY3JpcHRpb246PC9iPjxici8+JytkZXNjcmlwdGlvbisnPC9mb250Pic6JycpIjsKfQoKJG1hcFsnaW5mb3dpbmRvd3MnXVsxXT0kbWFwWydpbmZvd2luZG93cyddWzFdLiIKCSsnPGJyLz48YnIvPjxmb250IGNvbG9yPWJsYWNrPjxiPkxvY2F0aW9uOjwvYj48YnI+JytsYXQrJywnK2xvbisnPC9mb250PiciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVsxXT0kbWFwWydpbmZvd2luZG93cyddWzFdLiIKICAgICAgICArJzxici8+PGEgaHJlZj1cImh0dHA6Ly90ZXJyYXNlcnZlci5taWNyb3NvZnQuY29tL2ltYWdlLmFzcHg/dD0xJnM9MTAmbG9uPScrbG9uKycmbGF0PScrbGF0Kycmdz0xXCIgdGFyZ2V0PVwnZ3BvcFwnJwogICAgICAgICsnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPicKICAgICAgICArJ1ZpZXcgbG9jYXRpb24gYXQgVGVycmFzZXJ2ZXI8L2E+PGJyLz4oVW5mb3J0dW5hdGVseSwgVVNBIG9ubHkpJyI7CgokbWFwWydpbmZvd2luZG93cyddWzFdPSRtYXBbJ2luZm93aW5kb3dzJ11bMV0uIgoJKyc8YnIvPjxhIGhyZWY9XCJodHRwOi8vdG9wb3pvbmUuY29tL21hcC5hc3A/bGF0PScrbGF0KycmbG9uPScrbG9uKycmcz01MCZzaXplPW0mZGF0dW09bmFkODMmbGF5ZXI9RFJHMjVcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+VmlldyBMb2NhbHRpb24gYXQgVG9wb1pvbmU8L2E+PGJyLz4oVW5mb3J0dW5hdGVseSwgVVNBIG9ubHkpJyI7CgokbWFwWydpbmZvd2luZG93cyddWzFdPSRtYXBbJ2luZm93aW5kb3dzJ11bMV0uIgoJKyc8YnIvPjxhIGhyZWY9XCJodHRwOi8vd3d3LndlYXRoZXJib25rLmNvbS93ZWF0aGVyL2luZGV4LmpzcD9xdWVyeT0nK2xhdCsnLCcrbG9uKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+V2VhdGhlckJvbmsuY29tIHRoaXMgbG9jYXRpb248L2E+JyI7CgppZiAoJG1hcFsnc2hvd1pvb21MaW5rcyddKXsKJG1hcFsnaW5mb3dpbmRvd3MnXVsxXT0kbWFwWydpbmZvd2luZG93cyddWzFdLiIKCSsnPGJyLz48YnIvPjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImphdmFzY3JpcHQ6bWFwLnNldENlbnRlcihuZXcgR0xhdExuZygnK2xhdCsnLCcrbG9uKycpLCAnK3pvb21sZXZlbCsnKTtcIj4iLiRtb2R1bGUtPnRyYW5zbGF0ZSgiWm9vbSBJbiIpLiI8L2E+JyI7Cn0KCiRtYXBbJ2luZm93aW5kb3dzJ11bMV09JG1hcFsnaW5mb3dpbmRvd3MnXVsxXS4iCgkrJzwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PiciOwo/Pgo=');
expand_3537250845($outputDir, 'templates/infowindow/g2table.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0ibm9uZSI7CiRtYXBbJ2V4dHJhbWFwJ10gPSAiIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09Iic8ZGl2IHN0eWxlPVwiO21hcmdpbi10b3A6MTBweDt3aWR0aDoyNTBweDtoZWlnaHQ6MTUwcHg7b3ZlcmZsb3c6YXV0bztcIj4nCgkrJzx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0wIHN0eWxlPVwid2lkdGg6OTAlO2hlaWdodDoxMDAlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XCI+JwoJKyc8dHI+PHRkICBjb2xzcGFuPVwiMlwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTozcHggc29saWQgb3JhbmdlXCI+PGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj4nK3RpdGxlKyc8L2E+PC90ZD48L3RyPicKCSsnPHRyPjx0ZCBzdHlsZT1cInBhZGRpbmctdG9wOjJweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7XCI+PGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj48aW1nIHNyYz1cIicrdGh1bWJMaW5rKydcIiB3aWR0aD1cIicrdGh3KydcIiBoZWlnaHQ9XCInK3RoaCsnXCIgYWx0PVwiJyt0aXRsZSsnXCIgc3R5bGU9XCJtYXgtd2lkdGg6MjAwcHg7bWF4LWhlaWdodDoyMDBweDtcIi8+PC9hPjwvdGQ+JwoJKyc8dGQgYWxpZ249bGVmdCBjb2xzcGFuPVwiMVwiPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIkRhdGU6IikuIjwvYj4gJytjcmVhdGVkKyc8L2ZvbnQ+PC90ZD48L3RyPiciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKCSsnPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPiZuYnNwOzwvdGQ+PC90cj4nIjsKCmlmICgkbWFwWydzaG93SXRlbVN1bW1hcmllcyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCgkrJzx0cj48dGQgY29sc3Bhbj1cIjJcIj4nCiAgICAgICAgKyhzdW1tYXJ5IT1cIlwiPyc8Zm9udCBjb2xvcj1ibGFjaz48Yj5TdW1tYXJ5OjwvYj48YnIvPicrc3VtbWFyeSsnPC9mb250PjwvdHI+PC90ZD4nOicnKSI7Cn0KCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCgkrJzx0cj48dGQgY29sc3Bhbj1cIjJcIj4mbmJzcDs8L3RkPjwvdHI+JyI7CgppZiAoJG1hcFsnc2hvd0l0ZW1EZXNjcmlwdGlvbnMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgoJKyc8dHI+PHRkIGNvbHNwYW49XCIyXCI+JwogICAgICAgICsoZGVzY3JpcHRpb24hPVwiXCI/Jzxmb250IGNvbG9yPWJsYWNrPjxiPkRlc2NyaXB0aW9uOjwvYj48YnIvPicrZGVzY3JpcHRpb24rJzwvZm9udD48L3RkPjwvdHI+JzonJykiOwp9CgokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgoJKyc8dHI+PHRkIGNvbHNwYW49XCIyXCI+Jm5ic3A7PC90ZD48L3RyPiciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKCSsnPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPicKICAgICAgICArJzxmb250IGNvbG9yPWJsYWNrPjxiPkxvY2F0aW9uOjwvYj48YnI+JytsYXQrJywnK2xvbisnPC9mb250PjwvdGQ+PC90cj4nIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCgkrJzx0cj48dGQgY29sc3Bhbj1cIjJcIj4nCiAgICAgICAgKyc8YSBocmVmPVwiaHR0cDovL3RlcnJhc2VydmVyLm1pY3Jvc29mdC5jb20vaW1hZ2UuYXNweD90PTEmcz0xMCZsb249Jytsb24rJyZsYXQ9JytsYXQrJyZ3PTFcIiB0YXJnZXQ9XCdncG9wXCcnCiAgICAgICAgKycgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+JwogICAgICAgICsnVmlldyBsb2NhdGlvbiBhdCBUZXJyYXNlcnZlcjwvYT48YnIvPihVbmZvcnR1bmF0ZWx5LCBVU0Egb25seSk8L3RkPjwvdHI+JyI7CgokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgoJKyc8dHI+PHRkIGNvbHNwYW49XCIyXCI+JwogICAgICAgICsnPGEgaHJlZj1cImh0dHA6Ly90b3Bvem9uZS5jb20vbWFwLmFzcD9sYXQ9JytsYXQrJyZsb249Jytsb24rJyZzPTUwJnNpemU9bSZkYXR1bT1uYWQ4MyZsYXllcj1EUkcyNVwiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj5WaWV3IExvY2FsdGlvbiBhdCBUb3BvWm9uZTwvYT48YnIvPihVbmZvcnR1bmF0ZWx5LCBVU0Egb25seSk8L3RkPjwvdHI+JyI7CgokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgoJKyc8dHI+PHRkIGNvbHNwYW49XCIyXCI+JwogICAgICAgICsnPGEgaHJlZj1cImh0dHA6Ly93d3cud2VhdGhlcmJvbmsuY29tL3dlYXRoZXIvaW5kZXguanNwP3F1ZXJ5PScrbGF0KycsJytsb24rJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj5XZWF0aGVyQm9uay5jb20gdGhpcyBsb2NhdGlvbjwvYT48L3RkPjwvdHI+JyI7CgokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgoJKyc8dHI+PHRkIGNvbHNwYW49XCIyXCI+Jm5ic3A7PC90ZD48L3RyPiciOwoKaWYgKCRtYXBbJ3Nob3dab29tTGlua3MnXSl7CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCgkrJzx0cj48dGQgY29sc3Bhbj1cIjJcIj4nCiAgICAgICAgKyc8YSBocmVmPVwiI3pvb21pbmxpbmtcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDptYXAuc2V0Q2VudGVyKG5ldyBHTGF0TG5nKCcrbGF0KycsJytsb24rJyksICcrem9vbWxldmVsKycpOyByZXR1cm4gZmFsc2U7XCI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIlpvb20gSW4iKS4iPC9hPiciOwp9CgokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsnPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+JyIKPz4K');
expand_3537250845($outputDir, 'templates/infowindow/g3centered.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0ibm9uZSI7CiRtYXBbJ2V4dHJhbWFwJ10gPSAiIjsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0iJycKCSsnPGRpdiBzdHlsZT1cIjttYXJnaW4tdG9wOjEwcHg7d2lkdGg6MjUwcHg7aGVpZ2h0OjE1MHB4O292ZXJmbG93OmF1dG87XCI+JwoJKyc8Y2VudGVyPjxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+Jyt0aXRsZSsnPC9hPjxici8+JwoJKyc8YSBocmVmPVwiJytpdGVtTGluaysnXCIgdGFyZ2V0PVwnZ3BvcFwnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPjxpbWcgc3JjPVwiJyt0aHVtYkxpbmsrJ1wiIHdpZHRoPVwiJyt0aHcrJ1wiIGhlaWdodD1cIicrdGhoKydcIiBhbHQ9XCInK3RpdGxlKydcIiBzdHlsZT1cIm1heC13aWR0aDoyMDBweDttYXgtaGVpZ2h0OjIwMHB4O1wiLz48L2E+JwoJKyc8YnIvPjxmb250IGNvbG9yPWJsYWNrPjxiPiIuJG1vZHVsZS0+dHJhbnNsYXRlKCJEYXRlOiIpLiI8L2I+ICcrY3JlYXRlZCsnPC9mb250PiciOwoKaWYgKCRtYXBbJ3Nob3dJdGVtU3VtbWFyaWVzJ10pIHsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArKHN1bW1hcnkhPVwiXCI/Jzxici8+PGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj5TdW1tYXJ5OjwvYj48YnIvPicrc3VtbWFyeSsnPC9mb250Pic6JycpIjsKfQoKaWYgKCRtYXBbJ3Nob3dJdGVtRGVzY3JpcHRpb25zJ10pIHsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArKGRlc2NyaXB0aW9uIT1cIlwiPyc8YnIvPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+RGVzY3JpcHRpb246PC9iPjxici8+JytkZXNjcmlwdGlvbisnPC9mb250Pic6JycpIjsKfQoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj5Mb2NhdGlvbjo8L2I+PGJyPicrbGF0KycsJytsb24rJzwvZm9udD4nIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8YnIvPjxici8+PGI+RGlyZWN0aW9ucyBUbyBMb2NhdGlvbjo8L2I+PGJyLz4nCiAgICAgICAgKyAnU3RhcnQgYWRkcmVzczo8Zm9ybSBhY3Rpb249XCJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/ZGFkZHI9JytsYXQrJywnK2xvbisnJnNhZGRyPVwiIHRhcmdldD1cImdwb3BcIiBvbnN1Ym1pdD1cIndpbmRvdy5vcGVuKGFjdGlvbitzYWRkci52YWx1ZSwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj4nCiAgICAgICAgKyAnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT0zMCBtYXhsZW5ndGg9NDAgbmFtZT1cInNhZGRyXCIgaWQ9XCJzYWRkclwiIHZhbHVlPVwiXCIgLz48YnI+JwogICAgICAgICsgJzxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImRhZGRyXCIgdmFsdWU9XCInK2xhdCsnLCcrbG9uKydcIi8+JwogICAgICAgICsgJzxJTlBVVCB2YWx1ZT1cIkdldCBEaXJlY3Rpb25zXCIgVFlQRT1cIlNVQk1JVFwiPjwvZm9ybT4nIjsKCmlmICgkbWFwWydzaG93Wm9vbUxpbmtzJ10pewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsnPGJyLz48YnIvPjxhIGhyZWY9XCIjem9vbWlubGlua1wiIG9uY2xpY2s9XCJqYXZhc2NyaXB0Om1hcC5zZXRDZW50ZXIobmV3IEdMYXRMbmcoJytsYXQrJywnK2xvbisnKSwgJyt6b29tbGV2ZWwrJyk7IHJldHVybiBmYWxzZTtcIj4iLiRtb2R1bGUtPnRyYW5zbGF0ZSgiWm9vbSBJbiIpLiI8L2E+JyI7Cn0KJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzwvY2VudGVyPjwvZGl2PiciOwo/Pgo=');
expand_3537250845($outputDir, 'templates/infowindow/g3default.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0ibm9uZSI7CiRtYXBbJ2V4dHJhbWFwJ10gPSAiIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09IicnCgkrJzxkaXYgc3R5bGU9XCI7bWFyZ2luLXRvcDoxMHB4O3dpZHRoOjI1MHB4O2hlaWdodDoxNTBweDtvdmVyZmxvdzphdXRvO1wiPicKCSsnPGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj4nK3RpdGxlKyc8L2E+PGJyLz4nCgkrJzxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+PGltZyBzcmM9XCInK3RodW1iTGluaysnXCIgd2lkdGg9XCInK3RodysnXCIgaGVpZ2h0PVwiJyt0aGgrJ1wiIGFsdD1cIicrdGl0bGUrJ1wiIHN0eWxlPVwibWF4LXdpZHRoOjIwMHB4O21heC1oZWlnaHQ6MjAwcHg7XCIvPjwvYT4nCgkrJzxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIkRhdGU6IikuIjwvYj4gJytjcmVhdGVkKyc8L2ZvbnQ+JyI7CgppZiAoJG1hcFsnc2hvd0l0ZW1TdW1tYXJpZXMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsoc3VtbWFyeSE9XCJcIj8nPGJyLz48YnIvPjxmb250IGNvbG9yPWJsYWNrPjxiPlN1bW1hcnk6PC9iPjxici8+JytzdW1tYXJ5Kyc8L2ZvbnQ+JzonJykiOwp9CgppZiAoJG1hcFsnc2hvd0l0ZW1EZXNjcmlwdGlvbnMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsoZGVzY3JpcHRpb24hPVwiXCI/Jzxici8+PGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj5EZXNjcmlwdGlvbjo8L2I+PGJyLz4nK2Rlc2NyaXB0aW9uKyc8L2ZvbnQ+JzonJykiOwp9CgokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsnPGJyLz48YnIvPjxmb250IGNvbG9yPWJsYWNrPjxiPkxvY2F0aW9uOjwvYj48YnI+JytsYXQrJywnK2xvbisnPC9mb250PiciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48Yj5EaXJlY3Rpb25zIFRvIExvY2F0aW9uOjwvYj48YnIvPicKICAgICAgICArICdTdGFydCBhZGRyZXNzOjxmb3JtIGFjdGlvbj1cImh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9kYWRkcj0nK2xhdCsnLCcrbG9uKycmc2FkZHI9XCIgdGFyZ2V0PVwiZ3BvcFwiIG9uc3VibWl0PVwid2luZG93Lm9wZW4oYWN0aW9uK3NhZGRyLnZhbHVlLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPicKICAgICAgICArICc8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPTMwIG1heGxlbmd0aD00MCBuYW1lPVwic2FkZHJcIiBpZD1cInNhZGRyXCIgdmFsdWU9XCJcIiAvPjxicj4nCiAgICAgICAgKyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZGFkZHJcIiB2YWx1ZT1cIicrbGF0KycsJytsb24rJ1wiLz4nCiAgICAgICAgKyAnPElOUFVUIHZhbHVlPVwiR2V0IERpcmVjdGlvbnNcIiBUWVBFPVwiU1VCTUlUXCI+PC9mb3JtPiciOwoKaWYgKCRtYXBbJ3Nob3dab29tTGlua3MnXSl7CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8YnIvPjxici8+PGEgaHJlZj1cIiN6b29taW5saW5rXCIgb25jbGljaz1cImphdmFzY3JpcHQ6bWFwLnNldENlbnRlcihuZXcgR0xhdExuZygnK2xhdCsnLCcrbG9uKycpLCAnK3pvb21sZXZlbCsnKTsgcmV0dXJuIGZhbHNlO1wiPiIuJG1vZHVsZS0+dHJhbnNsYXRlKCJab29tIEluIikuIjwvYT4nIjsKfQokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsnPC9kaXY+JyI7Cj8+Cg==');
expand_3537250845($outputDir, 'templates/infowindow/g3tabbed.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0iUGljdHVyZSI7CiRtYXBbJ0xhYmVscyddWzFdPSJEZXRhaWxzIjsKJG1hcFsnZXh0cmFtYXAnXSA9ICIiOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0iJycKCSsnPGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj4nK3RpdGxlKyc8L2E+PGJyLz4nCgkrJzxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+PGltZyBzcmM9XCInK3RodW1iTGluaysnXCIgd2lkdGg9XCInK3RodysnXCIgaGVpZ2h0PVwiJyt0aGgrJ1wiIGFsdD1cIicrdGl0bGUrJ1wiIHN0eWxlPVwibWF4LXdpZHRoOjIwMHB4O21heC1oZWlnaHQ6MjAwcHg7XCIvPjwvYT4nIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMV09IicnCisnPGRpdiBzdHlsZT1cIjttYXJnaW4tdG9wOjEwcHg7d2lkdGg6MjUwcHg7aGVpZ2h0OjE1MHB4O292ZXJmbG93OmF1dG87XCI+JwoJKyc8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBzdHlsZT1cIndpZHRoOjkwJTtoZWlnaHQ6MTAwJTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1wiPicKCSsnPHRyPjx0ZD48YSBocmVmPVwiJytpdGVtTGluaysnXCIgdGFyZ2V0PVwnZ3BvcFwnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPicrdGl0bGUrJzwvYT48YnIvPicKCSsnPGZvbnQgY29sb3I9YmxhY2s+PGI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIkRhdGU6IikuIjwvYj4gJytjcmVhdGVkKyc8L2ZvbnQ+JyI7CgppZiAoJG1hcFsnc2hvd0l0ZW1TdW1tYXJpZXMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzFdPSRtYXBbJ2luZm93aW5kb3dzJ11bMV0uIgoJKyhzdW1tYXJ5IT1cIlwiPyc8YnIvPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+U3VtbWFyeTo8L2I+PGJyLz4nK3N1bW1hcnkrJzwvZm9udD4nOicnKSI7Cn0KCmlmICgkbWFwWydzaG93SXRlbURlc2NyaXB0aW9ucyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMV09JG1hcFsnaW5mb3dpbmRvd3MnXVsxXS4iCgkrKGRlc2NyaXB0aW9uIT1cIlwiPyc8YnIvPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+RGVzY3JpcHRpb246PC9iPjxici8+JytkZXNjcmlwdGlvbisnPC9mb250Pic6JycpIjsKfQoKJG1hcFsnaW5mb3dpbmRvd3MnXVsxXT0kbWFwWydpbmZvd2luZG93cyddWzFdLiIKCSsnPGJyLz48YnIvPjxmb250IGNvbG9yPWJsYWNrPjxiPkxvY2F0aW9uOjwvYj48YnI+JytsYXQrJywnK2xvbisnPC9mb250PiciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVsxXT0kbWFwWydpbmZvd2luZG93cyddWzFdLiIKICAgICAgICArJzxici8+PGJyLz48Yj5EaXJlY3Rpb25zIFRvIExvY2F0aW9uOjwvYj48YnIvPicKICAgICAgICArICdTdGFydCBhZGRyZXNzOjxmb3JtIGFjdGlvbj1cImh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9kYWRkcj0nK2xhdCsnLCcrbG9uKycmc2FkZHI9XCIgdGFyZ2V0PVwiZ3BvcFwiIG9uc3VibWl0PVwid2luZG93Lm9wZW4oYWN0aW9uK3NhZGRyLnZhbHVlLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPicKICAgICAgICArICc8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPTMwIG1heGxlbmd0aD00MCBuYW1lPVwic2FkZHJcIiBpZD1cInNhZGRyXCIgdmFsdWU9XCJcIiAvPjxicj4nCiAgICAgICAgKyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZGFkZHJcIiB2YWx1ZT1cIicrbGF0KycsJytsb24rJ1wiLz4nCiAgICAgICAgKyAnPElOUFVUIHZhbHVlPVwiR2V0IERpcmVjdGlvbnNcIiBUWVBFPVwiU1VCTUlUXCI+PC9mb3JtPiciOwoKaWYgKCRtYXBbJ3Nob3dab29tTGlua3MnXSl7CiRtYXBbJ2luZm93aW5kb3dzJ11bMV09JG1hcFsnaW5mb3dpbmRvd3MnXVsxXS4iCiAgICAgICAgKyc8YnIvPjxici8+PGEgaHJlZj1cIiN6b29taW5saW5rXCIgb25jbGljaz1cImphdmFzY3JpcHQ6bWFwLnNldENlbnRlcihuZXcgR0xhdExuZygnK2xhdCsnLCcrbG9uKycpLCAnK3pvb21sZXZlbCsnKTsgcmV0dXJuIGZhbHNlO1wiPiIuJG1vZHVsZS0+dHJhbnNsYXRlKCJab29tIEluIikuIjwvYT4nIjsKfQoKJG1hcFsnaW5mb3dpbmRvd3MnXVsxXT0kbWFwWydpbmZvd2luZG93cyddWzFdLiIKCSsnPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+JyI7Cj8+Cg==');
expand_3537250845($outputDir, 'templates/infowindow/g3table.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0ibm9uZSI7CiRtYXBbJ2V4dHJhbWFwJ10gPSAiIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09Iic8ZGl2IHN0eWxlPVwiO21hcmdpbi10b3A6MTBweDt3aWR0aDoyNTBweDtoZWlnaHQ6MTUwcHg7b3ZlcmZsb3c6YXV0bztcIj4nCgkrJzx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0wIHN0eWxlPVwid2lkdGg6OTAlO2hlaWdodDoxMDAlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XCI+JwoJKyc8dHI+PHRkICBjb2xzcGFuPVwiMlwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTozcHggc29saWQgb3JhbmdlXCI+PGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj4nK3RpdGxlKyc8L2E+PC90ZD48L3RyPicKCSsnPHRyPjx0ZCBzdHlsZT1cInBhZGRpbmctdG9wOjJweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7XCI+PGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj48aW1nIHNyYz1cIicrdGh1bWJMaW5rKydcIiB3aWR0aD1cIicrdGh3KydcIiBoZWlnaHQ9XCInK3RoaCsnXCIgYWx0PVwiJyt0aXRsZSsnXCIgc3R5bGU9XCJtYXgtd2lkdGg6MjAwcHg7bWF4LWhlaWdodDoyMDBweDtcIi8+PC9hPjwvdGQ+JwoJKyc8dGQgYWxpZ249bGVmdCBjb2xzcGFuPVwiMVwiPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIkRhdGU6IikuIjwvYj4gJytjcmVhdGVkKyc8L2ZvbnQ+PC90ZD48L3RyPiciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKCSsnPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPiZuYnNwOzwvdGQ+PC90cj4nIjsKCmlmICgkbWFwWydzaG93SXRlbVN1bW1hcmllcyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCgkrJzx0cj48dGQgY29sc3Bhbj1cIjJcIj4nCiAgICAgICAgKyhzdW1tYXJ5IT1cIlwiPyc8Zm9udCBjb2xvcj1ibGFjaz48Yj5TdW1tYXJ5OjwvYj48YnIvPicrc3VtbWFyeSsnPC9mb250PjwvdHI+PC90ZD4nOicnKSI7Cn0KCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCgkrJzx0cj48dGQgY29sc3Bhbj1cIjJcIj4mbmJzcDs8L3RkPjwvdHI+JyI7CgppZiAoJG1hcFsnc2hvd0l0ZW1EZXNjcmlwdGlvbnMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgoJKyc8dHI+PHRkIGNvbHNwYW49XCIyXCI+JwogICAgICAgICsoZGVzY3JpcHRpb24hPVwiXCI/Jzxmb250IGNvbG9yPWJsYWNrPjxiPkRlc2NyaXB0aW9uOjwvYj48YnIvPicrZGVzY3JpcHRpb24rJzwvZm9udD48L3RkPjwvdHI+JzonJykiOwp9CgokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgoJKyc8dHI+PHRkIGNvbHNwYW49XCIyXCI+Jm5ic3A7PC90ZD48L3RyPiciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKCSsnPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPicKICAgICAgICArJzxmb250IGNvbG9yPWJsYWNrPjxiPkxvY2F0aW9uOjwvYj48YnI+JytsYXQrJywnK2xvbisnPC9mb250PjwvdGQ+PC90cj4nIjsKCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCgkrJzx0cj48dGQgY29sc3Bhbj1cIjJcIj4mbmJzcDs8L3RkPjwvdHI+JyI7CgokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsnPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPjxiPkRpcmVjdGlvbnMgVG8gTG9jYXRpb246PC9iPjxici8+JwogICAgICAgICsgJ1N0YXJ0IGFkZHJlc3M6PGZvcm0gYWN0aW9uPVwiaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP2RhZGRyPScrbGF0KycsJytsb24rJyZzYWRkcj1cIiB0YXJnZXQ9XCJncG9wXCIgb25zdWJtaXQ9XCJ3aW5kb3cub3BlbihhY3Rpb24rc2FkZHIudmFsdWUsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+JwogICAgICAgICsgJzxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9MzAgbWF4bGVuZ3RoPTQwIG5hbWU9XCJzYWRkclwiIGlkPVwic2FkZHJcIiB2YWx1ZT1cIlwiIC8+PGJyPicKICAgICAgICArICc8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJkYWRkclwiIHZhbHVlPVwiJytsYXQrJywnK2xvbisnXCIvPicKICAgICAgICArICc8SU5QVVQgdmFsdWU9XCJHZXQgRGlyZWN0aW9uc1wiIFRZUEU9XCJTVUJNSVRcIj48L2Zvcm0+PC90ZD48L3RyPiciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKCSsnPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPiZuYnNwOzwvdGQ+PC90cj4nIjsKCmlmICgkbWFwWydzaG93Wm9vbUxpbmtzJ10pewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgoJKyc8dHI+PHRkIGNvbHNwYW49XCIyXCI+JwogICAgICAgICsnPGEgaHJlZj1cIiN6b29taW5saW5rXCIgb25jbGljaz1cImphdmFzY3JpcHQ6bWFwLnNldENlbnRlcihuZXcgR0xhdExuZygnK2xhdCsnLCcrbG9uKycpLCAnK3pvb21sZXZlbCsnKTsgcmV0dXJuIGZhbHNlO1wiPiIuJG1vZHVsZS0+dHJhbnNsYXRlKCJab29tIEluIikuIjwvYT4nIjsKfQoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PiciCj8+Cg==');
expand_3537250845($outputDir, 'templates/infowindow/gcentered.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0ibm9uZSI7CiRtYXBbJ2V4dHJhbWFwJ10gPSAiIjsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0iJycKCSsnPGRpdiBzdHlsZT1cIndpZHRoOjIwMHB4XCI+PGNlbnRlcj48YSBocmVmPVwiJytpdGVtTGluaysnXCIgdGFyZ2V0PVwnZ3BvcFwnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPicrdGl0bGUrJzwvYT48YnIvPicKCSsnPGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj48aW1nIHNyYz1cIicrdGh1bWJMaW5rKydcIiB3aWR0aD1cIicrdGh3KydcIiBoZWlnaHQ9XCInK3RoaCsnXCIgYWx0PVwiJyt0aXRsZSsnXCIgc3R5bGU9XCJtYXgtd2lkdGg6MjAwcHg7bWF4LWhlaWdodDoyMDBweDtcIi8+PC9hPicKCSsnPGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj4iLiRtb2R1bGUtPnRyYW5zbGF0ZSgiRGF0ZToiKS4iPC9iPiAnK2NyZWF0ZWQrJzwvZm9udD4nIjsKCmlmICgkbWFwWydzaG93SXRlbVN1bW1hcmllcyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyhzdW1tYXJ5IT1cIlwiPyc8YnIvPjxici8+PGRpdiBzdHlsZT1cIndpZHRoOjIwMHB4XCI+PGZvbnQgY29sb3I9YmxhY2s+JytzdW1tYXJ5Kyc8L2ZvbnQ+PC9kaXY+JzonJykiOwp9CgppZiAoJG1hcFsnc2hvd0l0ZW1EZXNjcmlwdGlvbnMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsoZGVzY3JpcHRpb24hPVwiXCI/Jzxici8+PGJyLz48ZGl2IHN0eWxlPVwid2lkdGg6MjAwcHhcIj48Zm9udCBjb2xvcj1ibGFjaz4nK2Rlc2NyaXB0aW9uKyc8L2ZvbnQ+PC9kaXY+JzonJykiOwp9CgokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsnPGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj5Mb2NhdGlvbjo8L2I+PGJyPicrbGF0KycsJytsb24rJzwvZm9udD4nIjsKCmlmICgkbWFwWydzaG93Wm9vbUxpbmtzJ10pewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsnPGJyLz48YnIvPjxhIGhyZWY9XCIjem9vbWlubGlua1wiIG9uY2xpY2s9XCJqYXZhc2NyaXB0Om1hcC5zZXRDZW50ZXIobmV3IEdMYXRMbmcoJytsYXQrJywnK2xvbisnKSwgJyt6b29tbGV2ZWwrJyk7IHJldHVybiBmYWxzZTtcIj4iLiRtb2R1bGUtPnRyYW5zbGF0ZSgiWm9vbSBJbiIpLiI8L2E+JyI7Cn0KJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzwvZGl2PjwvY2VudGVyPiciOwo/Pgo=');
expand_3537250845($outputDir, 'templates/infowindow/gdefault.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0ibm9uZSI7CiRtYXBbJ2V4dHJhbWFwJ10gPSAiIjsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0iJycKCSsnPGRpdiBzdHlsZT1cIndpZHRoOjIwMHB4XCI+PGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj4nK3RpdGxlKyc8L2E+PGJyLz4nCgkrJzxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+PGltZyBzcmM9XCInK3RodW1iTGluaysnXCIgd2lkdGg9XCInK3RodysnXCIgaGVpZ2h0PVwiJyt0aGgrJ1wiIGFsdD1cIicrdGl0bGUrJ1wiIHN0eWxlPVwibWF4LXdpZHRoOjIwMHB4O21heC1oZWlnaHQ6MjAwcHg7XCIvPjwvYT4nCgkrJzxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIkRhdGU6IikuIjwvYj4gJytjcmVhdGVkKyc8L2ZvbnQ+JyI7CgppZiAoJG1hcFsnc2hvd0l0ZW1TdW1tYXJpZXMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsoc3VtbWFyeSE9XCJcIj8nPGJyLz48YnIvPjxkaXYgc3R5bGU9XCJ3aWR0aDoyMDBweFwiPjxmb250IGNvbG9yPWJsYWNrPicrc3VtbWFyeSsnPC9mb250PjwvZGl2Pic6JycpIjsKfQoKaWYgKCRtYXBbJ3Nob3dJdGVtRGVzY3JpcHRpb25zJ10pIHsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArKGRlc2NyaXB0aW9uIT1cIlwiPyc8YnIvPjxici8+PGRpdiBzdHlsZT1cIndpZHRoOjIwMHB4XCI+PGZvbnQgY29sb3I9YmxhY2s+JytkZXNjcmlwdGlvbisnPC9mb250PjwvZGl2Pic6JycpIjsKfQoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+TG9jYXRpb246PC9iPjxicj4nK2xhdCsnLCcrbG9uKyc8L2ZvbnQ+JyI7CgppZiAoJG1hcFsnc2hvd1pvb21MaW5rcyddKXsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48YSBocmVmPVwiI3pvb21pbmxpbmtcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDptYXAuc2V0Q2VudGVyKG5ldyBHTGF0TG5nKCcrbGF0KycsJytsb24rJyksICcrem9vbWxldmVsKycpOyByZXR1cm4gZmFsc2U7XCI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIlpvb20gSW4iKS4iPC9hPiciOwp9CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8L2Rpdj4nIjsKPz4K');
expand_3537250845($outputDir, 'templates/infowindow/gtabbed.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0iUGljdHVyZSI7CiRtYXBbJ0xhYmVscyddWzFdPSJEZXRhaWxzIjsKJG1hcFsnZXh0cmFtYXAnXSA9ICIiOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0iJycKCSsnPGRpdiBzdHlsZT1cImhlaWdodDoyMDBweDt3aWR0aDoyMDBweDtcIj48YSBocmVmPVwiJytpdGVtTGluaysnXCIgdGFyZ2V0PVwnZ3BvcFwnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPicrdGl0bGUrJzwvYT48YnIvPicKCSsnPGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiIHRhcmdldD1cJ2dwb3BcJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgXCdncG9wXCcsXCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllc1wnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIj48aW1nIHNyYz1cIicrdGh1bWJMaW5rKydcIiB3aWR0aD1cIicrdGh3KydcIiBoZWlnaHQ9XCInK3RoaCsnXCIgYWx0PVwiJyt0aXRsZSsnXCIgc3R5bGU9XCJtYXgtd2lkdGg6MjAwcHg7bWF4LWhlaWdodDoyMDBweDtcIi8+PC9hPjwvZGl2PiciOwoKJG1hcFsnaW5mb3dpbmRvd3MnXVsxXT0iJycKCSsnPHRhYmxlIHdpZHRoPTIwMHB4IGhlaWdodD0yMDBweD48dHI+PHRkPjxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+Jyt0aXRsZSsnPC9hPjxici8+JwoJKyc8Zm9udCBjb2xvcj1ibGFjaz48Yj4iLiRtb2R1bGUtPnRyYW5zbGF0ZSgiRGF0ZToiKS4iPC9iPiAnK2NyZWF0ZWQrJzwvZm9udD4nIjsKCmlmICgkbWFwWydzaG93SXRlbVN1bW1hcmllcyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMV09JG1hcFsnaW5mb3dpbmRvd3MnXVsxXS4iCgkrKHN1bW1hcnkhPVwiXCI/Jzxici8+PGJyLz48ZGl2IHN0eWxlPVwid2lkdGg6MjAwcHhcIj48Zm9udCBjb2xvcj1ibGFjaz4nK3N1bW1hcnkrJzwvZm9udD48L2Rpdj4nOicnKSI7Cn0KCmlmICgkbWFwWydzaG93SXRlbURlc2NyaXB0aW9ucyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMV09JG1hcFsnaW5mb3dpbmRvd3MnXVsxXS4iCgkrKGRlc2NyaXB0aW9uIT1cIlwiPyc8YnIvPjxici8+PGRpdiBzdHlsZT1cIndpZHRoOjIwMHB4XCI+PGZvbnQgY29sb3I9YmxhY2s+JytkZXNjcmlwdGlvbisnPC9mb250PjwvZGl2Pic6JycpIjsKfQoKJG1hcFsnaW5mb3dpbmRvd3MnXVsxXT0kbWFwWydpbmZvd2luZG93cyddWzFdLiIKCSsnPGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj5Mb2NhdGlvbjo8L2I+PGJyPicrbGF0KycsJytsb24rJzwvZm9udD4nIjsKCmlmICgkbWFwWydzaG93Wm9vbUxpbmtzJ10pewokbWFwWydpbmZvd2luZG93cyddWzFdPSRtYXBbJ2luZm93aW5kb3dzJ11bMV0uIgoJKyc8YnIvPjxici8+PGEgaHJlZj1cIiN6b29taW5saW5rXCIgb25jbGljaz1cImphdmFzY3JpcHQ6bWFwLnNldENlbnRlcihuZXcgR0xhdExuZygnK2xhdCsnLCcrbG9uKycpLCAnK3pvb21sZXZlbCsnKTtyZXR1cm4gZmFsc2U7XCI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIlpvb20gSW4iKS4iPC9hPiciOwp9CgokbWFwWydpbmZvd2luZG93cyddWzFdPSRtYXBbJ2luZm93aW5kb3dzJ11bMV0uIgoJKyc8L3RkPjwvdHI+PC90YWJsZT4nIjsKPz4K');
expand_3537250845($outputDir, 'templates/infowindow/gtable.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsndGl0bGUnXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50Wyd0aXRsZSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlt1cmwiLCI8YSB0YXJnZXQ9J2dwb3AnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCAnZ3BvcCcsJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCIgaHJlZiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydzdW1tYXJ5J10pOwogJHBvaW50WydzdW1tYXJ5J10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsnc3VtbWFyeSddKTsKICR0bXBbXT0kcG9pbnQ7Cn0KJG1hcFsnbWFwUG9pbnRzJ10gPSAkdG1wOwovL0NyZWF0ZSB0aGUgSFRNTCBmb3IgdGhlIHdpbmRvdwokbWFwWydMYWJlbHMnXVswXT0ibm9uZSI7CiRtYXBbJ2V4dHJhbWFwJ10gPSAiIjsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0iJzx0YWJsZSBib3JkZXI9MCBjZWxscGFkZGluZz0wIHN0eWxlPVwiYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcIj48dHI+JwoJKyc8dGQgIGNvbHNwYW49XCIyXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOjNweCBzb2xpZCBvcmFuZ2VcIj48YSBocmVmPVwiJytpdGVtTGluaysnXCIgdGFyZ2V0PVwnZ3BvcFwnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPicrdGl0bGUrJzwvYT48L3RkPjwvdHI+JwoJKyc8dHI+PHRkIHN0eWxlPVwicGFkZGluZy10b3A6MnB4O3ZlcnRpY2FsLWFsaWduOnRvcDtcIj4mbmJzcDs8YSBocmVmPVwiJytpdGVtTGluaysnXCIgdGFyZ2V0PVwnZ3BvcFwnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPjxpbWcgc3JjPVwiJyt0aHVtYkxpbmsrJ1wiIHdpZHRoPVwiJyt0aHcrJ1wiIGhlaWdodD1cIicrdGhoKydcIiBhbHQ9XCInK3RpdGxlKydcIiBzdHlsZT1cIm1heC13aWR0aDoyMDBweDttYXgtaGVpZ2h0OjIwMHB4O1wiLz48L2E+PC90ZD4nCgkrJzx0ZCBzdHlsZT1cInBhZGRpbmctdG9wOjJweDtwYWRkaW5nLWxlZnQ6MnB4O1wiPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIkRhdGU6IikuIjwvYj4gJytjcmVhdGVkKyc8L2ZvbnQ+JyI7CgppZiAoJG1hcFsnc2hvd0l0ZW1TdW1tYXJpZXMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsoc3VtbWFyeSE9XCJcIj8nPGJyLz48YnIvPjxkaXYgc3R5bGU9XCJ3aWR0aDoyMDBweFwiPjxmb250IGNvbG9yPWJsYWNrPicrc3VtbWFyeSsnPC9mb250PjwvZGl2Pic6JycpIjsKfQoKaWYgKCRtYXBbJ3Nob3dJdGVtRGVzY3JpcHRpb25zJ10pIHsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArKGRlc2NyaXB0aW9uIT1cIlwiPyc8YnIvPjxici8+PGRpdiBzdHlsZT1cIndpZHRoOjIwMHB4XCI+PGZvbnQgY29sb3I9YmxhY2s+JytkZXNjcmlwdGlvbisnPC9mb250PjwvZGl2Pic6JycpIjsKfQoKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+TG9jYXRpb246PC9iPjxicj4nK2xhdCsnLCcrbG9uKyc8L2ZvbnQ+JyI7CgppZiAoJG1hcFsnc2hvd1pvb21MaW5rcyddKXsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48YSBocmVmPVwiI3pvb21pbmxpbmtcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDptYXAuc2V0Q2VudGVyKG5ldyBHTGF0TG5nKCcrbGF0KycsJytsb24rJyksICcrem9vbWxldmVsKycpOyByZXR1cm4gZmFsc2U7XCI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIlpvb20gSW4iKS4iPC9hPiciOwp9CgokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsnPC90ZD48L3RyPjwvdGFibGU+JyIKPz4K');
expand_3537250845($outputDir, 'templates/infowindow/gvimage.inc', 'PD9waHAKLy9GaXggdGhlIGRlc2NyaXB0aW9uICwgc3VtbWFyeSBhbmQgdGl0bGUgSFJFRnMKJHRtcCA9YXJyYXkoKTsKZm9yZWFjaCAoJG1hcFsnbWFwUG9pbnRzJ10gYXMgJHBvaW50KXsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnZGVzY3JpcHRpb24nXSk7CiAkcG9pbnRbJ2Rlc2NyaXB0aW9uJ10gPSBzdHJfcmVwbGFjZSgiWy91cmxdIiwiPC9hPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKICRwb2ludFsnZGVzY3JpcHRpb24nXSA9IHN0cl9yZXBsYWNlKCJdIiwiPiIsJHBvaW50WydkZXNjcmlwdGlvbiddKTsKCiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiW3VybCIsIjxhIHRhcmdldD0nZ3BvcCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsICdncG9wJywnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXMnKS5mb2N1cygpO3JldHVybiBmYWxzZTtcIiBocmVmIiwkcG9pbnRbJ3RpdGxlJ10pOwogJHBvaW50Wyd0aXRsZSddID0gc3RyX3JlcGxhY2UoIlsvdXJsXSIsIjwvYT4iLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3RpdGxlJ10gPSBzdHJfcmVwbGFjZSgiXSIsIj4iLCRwb2ludFsndGl0bGUnXSk7CiAkcG9pbnRbJ3N1bW1hcnknXSA9IHN0cl9yZXBsYWNlKCJbdXJsIiwiPGEgdGFyZ2V0PSdncG9wJyBvbkNsaWNrPVwid2luZG93Lm9wZW4oaHJlZiwgJ2dwb3AnLCdsZWZ0PTIwLHRvcD0yMCxzY3JvbGxiYXJzPXllcycpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiIGhyZWYiLCRwb2ludFsnc3VtbWFyeSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIlsvdXJsXSIsIjwvYT4iLCRwb2ludFsnc3VtbWFyeSddKTsKICRwb2ludFsnc3VtbWFyeSddID0gc3RyX3JlcGxhY2UoIl0iLCI+IiwkcG9pbnRbJ3N1bW1hcnknXSk7CgoKIGlmICgkcG9pbnRbJ3R5cGUnXSA9PSAnR2FsbGVyeU1vdmllSXRlbScpIHsKIAkkcG9pbnRbJ2l0ZW1MaW5rJ109JzxkaXYgc3R5bGU9XCI7bWFyZ2luLXRvcDoxMHB4O3dpZHRoOjI1MHB4O2hlaWdodDoxODBweDtvdmVyZmxvdzphdXRvO1wiPjxjZW50ZXI+PGVtYmVkIHNyYz1cIicuJGd1cmwtPmdlbmVyYXRlVXJsKGFycmF5KCd2aWV3Jz0+J2NvcmUuRG93bmxvYWRJdGVtJywnaXRlbUlkJz0+JHBvaW50WydpZCddKSxmYWxzZSkuJ1wiIGF1dG9wbGF5PVwidHJ1ZVwiIGNvbnRyb2xsZXI9XCJ0cnVlXCIgd2lkdGg9XCIxODBcIiBoZWlnaHQ9XCIxODBcIiBiZ2NvbG9yPVwiI0ZGRkZGRlwiIGFzcGVjdD1cImZhbHNlXCI+PC9lbWJlZD48L2NlbnRlcj4nOwogfSBlbHNlIHsKIAkkcG9pbnRbJ2l0ZW1MaW5rJ10gPSAnPGRpdiBzdHlsZT1cIjttYXJnaW4tdG9wOjEwcHg7d2lkdGg6MjUwcHg7aGVpZ2h0OjE1MHB4O292ZXJmbG93OmF1dG87XCI+PGEgaHJlZj1cIicuJGd1cmwtPmdlbmVyYXRlVXJsKGFycmF5KCd2aWV3Jz0+J2NvcmUuU2hvd0l0ZW0nLCdpdGVtSWQnPT4kcG9pbnRbJ2lkJ10pLGZhbHNlKS4nXCIgdGFyZ2V0PVwnZ3BvcFwnIG9uQ2xpY2s9XCJ3aW5kb3cub3BlbihocmVmLCBcJ2dwb3BcJyxcJ2xlZnQ9MjAsdG9wPTIwLHNjcm9sbGJhcnM9eWVzXCcpLmZvY3VzKCk7cmV0dXJuIGZhbHNlO1wiPicuJHBvaW50Wyd0aXRsZSddLic8L2E+PGJyLz48YSBocmVmPVwiJy4kZ3VybC0+Z2VuZXJhdGVVcmwoYXJyYXkoJ3ZpZXcnPT4nY29yZS5TaG93SXRlbScsJ2l0ZW1JZCc9PiRwb2ludFsnaWQnXSksZmFsc2UpLidcIiB0YXJnZXQ9XCdncG9wXCcgb25DbGljaz1cIndpbmRvdy5vcGVuKGhyZWYsIFwnZ3BvcFwnLFwnbGVmdD0yMCx0b3A9MjAsc2Nyb2xsYmFycz15ZXNcJykuZm9jdXMoKTtyZXR1cm4gZmFsc2U7XCI+PGltZyBzcmM9XCInLiRwb2ludFsndGh1bWJMaW5rJ10uJ1wiIHdpZHRoPVwiJy4kcG9pbnRbJ3RodW1iV2lkdGgnXS4nXCIgaGVpZ2h0PVwiJy4kcG9pbnRbJ3RodW1iSGVpZ2h0J10uJ1wiIGFsdD1cIicuJHBvaW50Wyd0aXRsZSddLidcIiBzdHlsZT1cIm1heC13aWR0aDoxNTBweDttYXgtaGVpZ2h0OjIwMHB4O1wiLz48L2E+JzsKIH0KCiAkdG1wW109JHBvaW50Owp9CiRtYXBbJ21hcFBvaW50cyddID0gJHRtcDsKLy9DcmVhdGUgdGhlIEhUTUwgZm9yIHRoZSB3aW5kb3cKJG1hcFsnTGFiZWxzJ11bMF09Im5vbmUiOwokbWFwWydleHRyYW1hcCddID0gIiI7CgokbWFwWydpbmZvd2luZG93cyddWzBdPSInJwoJKycgJytpdGVtTGluaysnICcKCSsnPGJyLz48Zm9udCBjb2xvcj1ibGFjaz48Yj4iLiRtb2R1bGUtPnRyYW5zbGF0ZSgiRGF0ZToiKS4iPC9iPiAnK2NyZWF0ZWQrJzwvZm9udD4nIjsKCmlmICgkbWFwWydzaG93SXRlbVN1bW1hcmllcyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyhzdW1tYXJ5IT1cIlwiPyc8YnIvPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+U3VtbWFyeTo8L2I+PGJyLz4nK3N1bW1hcnkrJzwvZm9udD4nOicnKSI7Cn0KCmlmICgkbWFwWydzaG93SXRlbURlc2NyaXB0aW9ucyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyhkZXNjcmlwdGlvbiE9XCJcIj8nPGJyLz48YnIvPjxmb250IGNvbG9yPWJsYWNrPjxiPkRlc2NyaXB0aW9uOjwvYj48YnIvPicrZGVzY3JpcHRpb24rJzwvZm9udD4nOicnKSI7Cn0KCiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8YnIvPjxici8+PGZvbnQgY29sb3I9YmxhY2s+PGI+TG9jYXRpb246PC9iPjxicj4nK2xhdCsnLCcrbG9uKyc8L2ZvbnQ+JyI7CgppZiAoJG1hcFsnc2hvd1pvb21MaW5rcyddKXsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48YSBocmVmPVwiI3pvb21pbmxpbmtcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDptYXAuc2V0Q2VudGVyKG5ldyBHTGF0TG5nKCcrbGF0KycsJytsb24rJyksICcrem9vbWxldmVsKycpOyByZXR1cm4gZmFsc2U7XCI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIlpvb20gSW4iKS4iPC9hPiciOwp9CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8L2Rpdj4nIjsKPz4K');
expand_3537250845($outputDir, 'templates/infowindow/tabbed.inc', 'PD9waHAKJG1hcFsnTGFiZWxzJ11bMF09IlBpY3R1cmUiOwokbWFwWydMYWJlbHMnXVsxXT0iRGV0YWlscyI7CiRtYXBbJ2V4dHJhbWFwJ10gPSAiIjsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0iJycKICAgICAgKyc8YSBocmVmPVwiJytpdGVtTGluaysnXCI+Jyt0aXRsZSsnPC9hPjxici8+JwogICAgICArJzxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIj48aW1nIHNyYz1cIicrdGh1bWJMaW5rKydcIiB3aWR0aD1cIicrdGh3KydcIiBoZWlnaHQ9XCInK3RoaCsnXCIgYWx0PVwiJyt0aXRsZSsnXCIgc3R5bGU9XCJtYXgtd2lkdGg6MjAwcHg7bWF4LWhlaWdodDoyMDBweDtcIi8+PC9hPiciOwokbWFwWydpbmZvd2luZG93cyddWzFdPSInJwogICAgICArJzx0YWJsZSB3aWR0aD0yMDBweD48dHI+PHRkPjxhIGhyZWY9XCInK2l0ZW1MaW5rKydcIj4nK3RpdGxlKyc8L2E+PGJyLz4nCiAgICAgICsnPGZvbnQgY29sb3I9YmxhY2s+PGI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIkRhdGU6IikuIjwvYj4gJytjcmVhdGVkKyc8L2ZvbnQ+JyI7CmlmICgkbWFwWydzaG93SXRlbVN1bW1hcmllcyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMV09JG1hcFsnaW5mb3dpbmRvd3MnXVsxXS4iCiAgICAgICAgKyhzdW1tYXJ5IT1cIlwiPyc8YnIvPjxici8+PGRpdiBzdHlsZT1cIndpZHRoOjIwMHB4XCI+PGZvbnQgY29sb3I9YmxhY2s+JytzdW1tYXJ5Kyc8L2ZvbnQ+PC9kaXY+JzonJykiOwp9CmlmICgkbWFwWydzaG93SXRlbURlc2NyaXB0aW9ucyddKSB7CiRtYXBbJ2luZm93aW5kb3dzJ11bMV09JG1hcFsnaW5mb3dpbmRvd3MnXVsxXS4iCiAgICAgICAgKyhkZXNjcmlwdGlvbiE9XCJcIj8nPGJyLz48YnIvPjxkaXYgc3R5bGU9XCJ3aWR0aDoyMDBweFwiPjxmb250IGNvbG9yPWJsYWNrPicrZGVzY3JpcHRpb24rJzwvZm9udD48L2Rpdj4nOicnKSI7Cn0KCmlmICgkbWFwWydzaG93Wm9vbUxpbmtzJ10pewokbWFwWydpbmZvd2luZG93cyddWzFdPSRtYXBbJ2luZm93aW5kb3dzJ11bMV0uIgogICAgICAgICsnPGJyLz48YnIvPjxhIGhyZWY9XCIjem9vbWlubGlua1wiIG9uY2xpY2s9XCJqYXZhc2NyaXB0Om1hcC5zZXRDZW50ZXIobmV3IEdMYXRMbmcoJytsYXQrJywnK2xvbisnKSwgJyt6b29tbGV2ZWwrJyk7IHJldHVybiBmYWxzZTtcIj4iLiRtb2R1bGUtPnRyYW5zbGF0ZSgiWm9vbSBJbiIpLiI8L2E+JyI7Cn0KCiRtYXBbJ2luZm93aW5kb3dzJ11bMV09JG1hcFsnaW5mb3dpbmRvd3MnXVsxXS4iCiAgICAgICAgKyc8L3RkPjwvdHI+PC90YWJsZT4nIjsKPz4K');
expand_3537250845($outputDir, 'templates/infowindow/table.inc', 'PD9waHAKJG1hcFsnTGFiZWxzJ11bMF09Im5vbmUiOwokbWFwWydleHRyYW1hcCddID0gIiI7CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09Iic8dGFibGUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBzdHlsZT1cImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XCI+PHRyPicKICAgICAgKyc8dGQgIGNvbHNwYW49XCIyXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOjNweCBzb2xpZCBvcmFuZ2VcIj48YSBocmVmPVwiJytpdGVtTGluaysnXCI+Jyt0aXRsZSsnPC9hPjwvdGQ+PC90cj4nCiAgICAgICsnPHRyPjx0ZCBzdHlsZT1cInBhZGRpbmctdG9wOjJweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7XCI+Jm5ic3A7PGEgaHJlZj1cIicraXRlbUxpbmsrJ1wiPjxpbWcgc3JjPVwiJyt0aHVtYkxpbmsrJ1wiIHdpZHRoPVwiJyt0aHcrJ1wiIGhlaWdodD1cIicrdGhoKydcIiBhbHQ9XCInK3RpdGxlKydcIHN0eWxlPVwibWF4LXdpZHRoOjIwMHB4O21heC1oZWlnaHQ6MjAwcHg7XCIvPjwvYT48L3RkPicKICAgICAgKyc8dGQgc3R5bGU9XCJwYWRkaW5nLXRvcDoycHg7cGFkZGluZy1sZWZ0OjJweDtcIj48YnIvPjxmb250IGNvbG9yPWJsYWNrPjxiPiIuJG1vZHVsZS0+dHJhbnNsYXRlKCJEYXRlOiIpLiI8L2I+ICcrY3JlYXRlZCsnPC9mb250PiciOwppZiAoJG1hcFsnc2hvd0l0ZW1TdW1tYXJpZXMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsoc3VtbWFyeSE9XCJcIj8nPGJyLz48YnIvPjxkaXYgc3R5bGU9XCJ3aWR0aDoyMDBweFwiPjxmb250IGNvbG9yPWJsYWNrPicrc3VtbWFyeSsnPC9mb250PjwvZGl2Pic6JycpIjsKfQppZiAoJG1hcFsnc2hvd0l0ZW1EZXNjcmlwdGlvbnMnXSkgewokbWFwWydpbmZvd2luZG93cyddWzBdPSRtYXBbJ2luZm93aW5kb3dzJ11bMF0uIgogICAgICAgICsoZGVzY3JpcHRpb24hPVwiXCI/Jzxici8+PGJyLz48ZGl2IHN0eWxlPVwid2lkdGg6MjAwcHhcIj48Zm9udCBjb2xvcj1ibGFjaz4nK2Rlc2NyaXB0aW9uKyc8L2ZvbnQ+PC9kaXY+JzonJykiOwp9CgppZiAoJG1hcFsnc2hvd1pvb21MaW5rcyddKXsKJG1hcFsnaW5mb3dpbmRvd3MnXVswXT0kbWFwWydpbmZvd2luZG93cyddWzBdLiIKICAgICAgICArJzxici8+PGJyLz48YSBocmVmPVwiI3pvb21pbmxpbmtcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDptYXAuc2V0Q2VudGVyKG5ldyBHTGF0TG5nKCcrbGF0KycsJytsb24rJyksICcrem9vbWxldmVsKycpOyByZXR1cm4gZmFsc2U7XCI+Ii4kbW9kdWxlLT50cmFuc2xhdGUoIlpvb20gSW4iKS4iPC9hPiciOwp9CiRtYXBbJ2luZm93aW5kb3dzJ11bMF09JG1hcFsnaW5mb3dpbmRvd3MnXVswXS4iCiAgICAgICAgKyc8L3RkPjwvdHI+PC90YWJsZT4nIgo/Pgo=');
expand_3537250845($outputDir, 'templates/mapItemEdit.tpl', 'eyoKICogJFJldmlzaW9uOiAxMjY0ICQKICogUmVhZCB0aGlzIGJlZm9yZSBjaGFuZ2luZyB0ZW1wbGF0ZXMhICBodHRwOi8vY29kZXguZ2FsbGVyeTIub3JnL0dhbGxlcnkyOkVkaXRpbmdfVGVtcGxhdGVzCiAqfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIj4KICB7aWYgIWVtcHR5KCRmb3JtLmZpZWxkcyl9CiAge2lmICFlbXB0eSgkZm9ybS5hcGlLZXkpfQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9maWxlPWFwaSZhbXA7dj0yLngmYW1wO2tleT17JGZvcm0uYXBpS2V5fSIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KICB7L2lmfQogIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAvLyA8IVtDREFUQVsKICB7aWYgIWVtcHR5KCRmb3JtLmFwaUtleSl9CiAgQ0dDID0gbmV3IEdDbGllbnRHZW9jb2RlcigpOwogIGZ1bmN0aW9uIGdldEFkZHJlc3MoYWRkcmVzcykge2xkZWxpbX0KICAgIGlmIChhZGRyZXNzICE9ICcnKSB7bGRlbGltfQogICAgICBHUFNGaWVsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCd7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bZmllbGRzXVtHUFNdIn0nKVswXTsKICAgICAgQ0dDLmdldExhdExuZyhhZGRyZXNzLAoJZnVuY3Rpb24oTGF0TG5nUG50KSB7bGRlbGltfQoJICBpZiAoTGF0TG5nUG50ICE9IG51bGwpIHtsZGVsaW19CgkgICAgR1BTRmllbGQudmFsdWUgPSBMYXRMbmdQbnQudG9VcmxWYWx1ZSg2KTsKCSAge3JkZWxpbX0gZWxzZSB7bGRlbGltfQoJICAgIEdQU0ZpZWxkLnZhbHVlID0gJ3tnLT50ZXh0IHRleHQ9Ik5vdCBmb3VuZCIgaGludD0iQWRkcmVzcyBub3QgZm91bmQiIGZvckphdmFzY3JpcHQ9dHJ1ZX0nOwoJICB7cmRlbGltfQoJe3JkZWxpbX0KICAgICAgKTsgCiAgICB7cmRlbGltfSAKICB7cmRlbGltfQogIHsvaWZ9CiAgICAKICBmdW5jdGlvbiBoaWRlaGVscCgpe2xkZWxpbX0KICAgICB2YXIgaGVscGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWxwZGl2Jyk7CiAgICAgaGVscGRpdi5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAge3JkZWxpbX0KCiAgZnVuY3Rpb24gc2hvd2hlbHAoaGVscCxwb3Mpe2xkZWxpbX0KICAgIHZhciBoZWxwdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWxwdGV4dCcpOwogICAgaGVscHRleHQuaW5uZXJIVE1MID0gaGVscDsKICAgIHZhciBoZWxwZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHBkaXYnKTsKICAgIGhlbHBkaXYuc3R5bGUudG9wID0gcG9zKyJweCI7CiAgICBoZWxwZGl2LnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CiAge3JkZWxpbX0KICAKICB7aW5jbHVkZSBmaWxlPSJtb2R1bGVzL21hcC90ZW1wbGF0ZXMvaGVscGZpbGUudHBsIn0KICAvLyBdXT4KICA8L3NjcmlwdD4KICAKICA8IS0tIEhlbHAgRGl2IC0tPgogIDxkaXYgaWQ9ImhlbHBkaXYiIHN0eWxlPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MnB4IHNvbGlkIGJsYWNrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjM1MHB4O3RvcDoyMDBweDt3aWR0aDoyNTBweDtoZWlnaHQ6MTUwcHg7Ij4KICAgIDxkaXYgaWQ9ImhlbHBoZWFkIiBzdHlsZT0id2lkdGg6MjUwcHg7aGVpZ2h0OjI1cHg7YmFja2dyb3VuZDojMTUwMDk1O2NvbG9yOndoaXRlO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGJsYWNrOyI+PGltZyBhbHQ9Im5vbmUiIHtpZiAhJGZvcm0uSUV9c3R5bGU9ImZsb2F0OmxlZnQ7IiBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIntlbHNlfXNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJyBzdHlsZT0nZmxvYXQ6bGVmdDtmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsney9pZn0vPjx0YWJsZSBzdHlsZT0iaGVpZ2h0OjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyI+PHRyPjx0ZCBzdHlsZT0id2lkdGg6MjMwcHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyI+PGI+SGVscCBXaW5kb3c8L2I+PC90ZD48dGQgc3R5bGU9IndpZHRoOjI1cHg7Y3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJqYXZhc2NyaXB0OmhpZGVoZWxwKCkiPjxjZW50ZXI+PGI+WDwvYj48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KCSAgICA8ZGl2IGlkPSJoZWxwdGV4dCIgc3R5bGU9IndpZHRoOjI1MHB4O2hlaWdodDoxMjNweDtjb2xvcjpibGFjaztmb250LXNpemU6MTJweDtiYWNrZ3JvdW5kOiNCMkU0RjY7LW1vei1vcGFjaXR5Oi43NTtmaWx0ZXI6YWxwaGEob3BhY2l0eT03NSk7b3BhY2l0eTouNzU7b3ZlcmZsb3c6YXV0bztjbGVhcjpib3RoOyI+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8IS0tIEVuZCBvZiBIZWxwIERpdiAtLT4KICAKICA8dGFibGUgY2xhc3M9ImdiRGF0YVRhYmxlIj4KICB7Zm9yZWFjaCBmcm9tPSRmb3JtLmZpZWxkcyBrZXk9ZmllbGQgaXRlbT12YWx1ZX0KICAgIDx0cj48dGg+eyRmaWVsZH08L3RoPgogICAge2lmIGlzc2V0KCRmb3JtLlVzZXJIZWxwKSBhbmQgJGZvcm0uVXNlckhlbHAgZXEgMX0KCTx0aD4KCQk8aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX1VfeyRmaWVsZH0sMTgwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPgoJPC90aD4KCXsvaWZ9Cgk8dGQ+CiAgICB7aWYgaXNzZXQoJGZvcm0uY2hvaWNlc1skZmllbGRdKX0KICAgICAgPHNlbGVjdCBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bZmllbGRzXVskZmllbGRdIn0iPgoJPG9wdGlvbiB2YWx1ZT0iIj4mbGFxdW87IHtnLT50ZXh0IHRleHQ9Ik5vIFZhbHVlIn0gJnJhcXVvOzwvb3B0aW9uPgoJe2ZvcmVhY2ggZnJvbT0kZm9ybS5jaG9pY2VzWyRmaWVsZF0gaXRlbT1jaG9pY2V9Cgk8b3B0aW9ue2lmICRjaG9pY2U9PSR2YWx1ZX0gc2VsZWN0ZWQ9InNlbGVjdGVkInsvaWZ9PnskY2hvaWNlfTwvb3B0aW9uPnsvZm9yZWFjaH0KICAgICAgPC9zZWxlY3Q+CiAgICB7ZWxzZX0KICAgICAgPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjQwIiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bZmllbGRzXVskZmllbGRdIn0iIHZhbHVlPSJ7JHZhbHVlfSIvPgogICAgICAge2lmICgkZmllbGQgZXEgJ0dQUycpfQogICAgICAge2lmIGlzc2V0KCRmb3JtLlVzZXJIZWxwKSBhbmQgJGZvcm0uVXNlckhlbHAgZXEgMX0KCQk8aW1nIG9uY2xpY2s9ImphdmFzY3JpcHQ6c2hvd2hlbHAoX0hQX1VfR2V0VmlhTWFwLDE4MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz4KICAgCSAgIHsvaWZ9CiAgICAgICAgPGEgYWNjZXNza2V5PSJnIiBzdHlsZT0iYm9yZGVyLXRvcDoycHggc29saWQgI2NlY2VjZTsgYm9yZGVyLWxlZnQ6MnB4IHNvbGlkICNjZWNlY2U7IGJvcmRlci1ib3R0b206MnB4IHNvbGlkICM0YTRhNGE7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjNGE0YTRhO3BhZGRpbmc6LjJlbTtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLWxlZnQ6MWVtO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2ViZWJlYjtjb2xvcjojMDAwO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTJweDsiIGhyZWY9IntnLT51cmwgYXJnMT0idmlldz1tYXAuU2hvd01hcCIgYXJnMj0iaXRlbUlkPWAkZm9ybS5pdGVtSWRgIiBhcmczPSJwbHVnaW49SXRlbUVkaXQiIGFyZzQ9Ik1vZGU9UGljayJ9Ij57Zy0+dGV4dCB0ZXh0PSI8dT5HPC91PmV0IHZpYSBhIE1hcCJ9PC9hPgogICAgICAgIHtpZiAhaXNzZXQoJGZvcm0ubm9leGlmKSBvciAoaXNzZXQoJGZvcm0ubm9leGlmKSBhbmQgJGZvcm0ubm9leGlmIG5lcSAxKX0KICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5leGlmKX0KICAgICAgIHtpZiBpc3NldCgkZm9ybS5Vc2VySGVscCkgYW5kICRmb3JtLlVzZXJIZWxwIGVxIDF9CgkJPGltZyBvbmNsaWNrPSJqYXZhc2NyaXB0OnNob3doZWxwKF9IUF9VX0dldFZpYUV4aWYsMTgwKSIgYWx0PSJoZWxwIiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7e2lmICEkZm9ybS5JRX0nIHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciIHtlbHNlfWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIpOycgc3JjPSd7JGZvcm0ucGljYmFzZX1ibGFuay5naWYney9pZn0vPgogICAJICAgey9pZn0KICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9ImlucHV0VHlwZVN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bZ2V0ZXhpZl0ifSIgdmFsdWU9IntnLT50ZXh0IHRleHQ9IkdldCB2aWEgRVhJRiBoZWFkZXJzIn0iLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2V4aWZdIn0iIHZhbHVlPSJ7JGZvcm0uZXhpZn0iLz4KICAgICAgICAgIHsvaWZ9CiAgICAgICAgey9pZn0KICAgICAgIHtpZiAkSXRlbUFkbWluLml0ZW0uZW50aXR5VHlwZSBlcSAiR2FsbGVyeVBob3RvSXRlbSJ9CiAgICAgICB7aWYgaXNzZXQoJGZvcm0uVXNlckhlbHApIGFuZCAkZm9ybS5Vc2VySGVscCBlcSAxfQoJCTxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfVV9Xcml0ZVRvRXhpZiwxODApIiBhbHQ9ImhlbHAiIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjt7aWYgISRmb3JtLklFfScgc3JjPSJ7JGZvcm0ucGljYmFzZX1oZWxwLnBuZyIge2Vsc2V9ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIik7JyBzcmM9J3skZm9ybS5waWNiYXNlfWJsYW5rLmdpZid7L2lmfS8+CiAgIAkgICB7L2lmfQogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJpbnB1dFR5cGVTdWJtaXQiIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVthY3Rpb25dW3NldGV4aWZdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJXcml0ZSBHUFMgdG8gRVhJRiBoZWFkZXIifSIvPgogICAgICAgIDxicj4KICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5ncHMubWlzc2luZ0dQU0Nvb3JkaW5hdGVzKX0KICAgICAgICAgIDxkaXYgY2xhc3M9ImdpRXJyb3IiPgogICAgICAgICAgICB7Zy0+dGV4dCB0ZXh0PSJObyBHUFMgY29vcmRpbmF0ZXMgdG8gd3JpdGUuIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgey9pZn0KICAgICAgICAgIHtpZiBpc3NldCgkZm9ybS5lcnJvci5ncHMuY29vcmRpbmF0ZXNBbHJlYWR5SW5IZWFkZXIpfQogICAgICAgICAgPGRpdiBjbGFzcz0iZ2lFcnJvciI+CiAgICAgICAgICAgIHtnLT50ZXh0IHRleHQ9IlRoaXMgcGljdHVyZSBhbHJlYWR5IGhhcyBHUFMgY29vcmRpbmF0ZXMgaW4gdGhlIGhlYWRlciJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIHsvaWZ9CiAgICAgICAgey9pZn0KCXtpZiAhZW1wdHkoJGZvcm0uYXBpS2V5KX0KICAgICAgICA8YnI+CiAgICAgICAgPGlucHV0IGFjY2Vzc2tleT0iZSIgdHlwZT0idGV4dCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FkZHJlc3NdIn0iIGlkPSJtYXAuYWRkciIgc2l6ZT00MC8+IDxpPiB7Zy0+dGV4dCB0ZXh0PSI8dT5FPC91Pm50ZXIgQWRkcmVzcyBhbmQgIn0tJmd0OyA8L2k+CiAgICAgICB7aWYgaXNzZXQoJGZvcm0uVXNlckhlbHApIGFuZCAkZm9ybS5Vc2VySGVscCBlcSAxfQoJCTxpbWcgb25jbGljaz0iamF2YXNjcmlwdDpzaG93aGVscChfSFBfVV9HZXRWaWFBZGRyZXNzLDE4MCkiIGFsdD0iaGVscCIgc3R5bGU9J2N1cnNvcjpwb2ludGVyO3tpZiAhJGZvcm0uSUV9JyBzcmM9InskZm9ybS5waWNiYXNlfWhlbHAucG5nIiB7ZWxzZX1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0ieyRmb3JtLnBpY2Jhc2V9aGVscC5wbmciKTsnIHNyYz0neyRmb3JtLnBpY2Jhc2V9YmxhbmsuZ2lmJ3svaWZ9Lz4KICAgCSAgIHsvaWZ9CiAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImlucHV0VHlwZVN1Ym1pdCIgb25jbGljaz0iZ2V0QWRkcmVzcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFwLmFkZHInKS52YWx1ZSkiIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJHZXQgdmlhIGFkZHJlc3MifSIvPgogICAgICAgIHsvaWZ9CiAgICAgICB7L2lmfQogICAgey9pZn0KICAgIDwvdGQ+PC90cj4KICB7L2ZvcmVhY2h9CiAgPC90YWJsZT4KICB7L2lmfQo8L2Rpdj4KCntpZiAhZW1wdHkoJGZvcm0uZmllbGRzKX0KPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICA8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0iaW5wdXRUeXBlU3VibWl0IiBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtzYXZlXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iU2F2ZSJ9Ii8+CiAgPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9ImlucHV0VHlwZVN1Ym1pdCIgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bcmVzZXRdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJSZXNldCJ9Ii8+CjwvZGl2Pgp7L2lmfQo=');
}
function expand_3537250845($outputDir, $relativePath, $data) {
global $gallery;
$platform =& $gallery->getPlatform();
$platform->file_put_contents($outputDir . $relativePath, base64_decode($data));
$platform->chmod($outputDir . $relativePath);
}
$unpackFunction = "unpack_3537250845";
?>