ld31-space-diggers/public/app.js
2014-12-07 20:57:49 +01:00

954 lines
No EOL
87 KiB
JavaScript

var Base,
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
Base = (function() {
function Base() {
this.changeAnimation = __bind(this.changeAnimation, this);
this.frame = 0;
window.setInterval(this.changeAnimation, 500);
}
Base.prototype.tick = function(tile) {};
Base.prototype.sprite = function() {
return [this.frame * 8, 0, 8, 8];
};
Base.prototype.spritedetail = function() {
return [0, 0, 16, 16];
};
Base.prototype.isMoveable = function() {
return false;
};
Base.prototype.changeAnimation = function() {
if (this.frame === 3) {
return this.frame = 0;
} else {
return this.frame += 1;
}
};
Base.prototype.spaceProvided = 30;
Base.prototype.energyProvided = 7;
Base.prototype.isDockable = true;
return Base;
})();
var Miner,
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
Miner = (function() {
function Miner() {
this.changeAnimation = __bind(this.changeAnimation, this);
this.frame = 0;
window.setInterval(this.changeAnimation, 500);
}
Miner.prototype.tick = function(tile) {
tile.click("left");
tile.click("left");
tile.click("left");
return tile.click("left");
};
Miner.prototype.sprite = function() {
return [this.frame * 8, 16, 8, 8];
};
Miner.prototype.spritedetail = function() {
return [0, 16 * 2, 16, 16];
};
Miner.prototype.isMoveable = function() {
return true;
};
Miner.prototype.changeAnimation = function() {
if (this.frame === 1) {
return this.frame = 0;
} else {
return this.frame += 1;
}
};
Miner.prototype.spaceProvided = 5;
Miner.prototype.energyProvided = 0;
Miner.prototype.isDockable = false;
return Miner;
})();
var Silo,
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
Silo = (function() {
function Silo() {
this.changeAnimation = __bind(this.changeAnimation, this);
this.frame = 0;
window.setInterval(this.changeAnimation, 500);
}
Silo.prototype.tick = function(tile) {};
Silo.prototype.sprite = function() {
return [this.frame * 8, 8, 8, 8];
};
Silo.prototype.spritedetail = function() {
return [0, 16, 16, 16];
};
Silo.prototype.isMoveable = function() {
return false;
};
Silo.prototype.changeAnimation = function() {
if (this.frame === 1) {
return this.frame = 0;
} else {
return this.frame += 1;
}
};
Silo.prototype.spaceProvided = 15;
Silo.prototype.energyProvided = 0;
Silo.prototype.isDockable = true;
return Silo;
})();
var Solarpanel;
Solarpanel = (function() {
function Solarpanel() {}
Solarpanel.prototype.tick = function(tile) {};
Solarpanel.prototype.sprite = function() {
return [0, 8 * 3, 8, 8];
};
Solarpanel.prototype.spritedetail = function() {
return [0, 16 * 3, 16, 16];
};
Solarpanel.prototype.isMoveable = function() {
return false;
};
Solarpanel.prototype.spaceProvided = 0;
Solarpanel.prototype.energyProvided = 15;
Solarpanel.prototype.isDockable = true;
return Solarpanel;
})();
var AnimatedItem,
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
AnimatedItem = (function() {
function AnimatedItem(options) {
this.changeAnimation = __bind(this.changeAnimation, this);
this.maxFrames = options.maxFrames, this.image = options.image, this.speed = options.speed;
this.frame = 0;
window.setInterval(this.changeAnimation, this.speed);
}
AnimatedItem.prototype.sprite = function() {
return [this.frame * 8, 0, 8, 8];
};
AnimatedItem.prototype.changeAnimation = function() {
if (this.frame === this.maxFrames) {
return this.frame = 0;
} else {
return this.frame += 1;
}
};
return AnimatedItem;
})();
var Tile;
Tile = (function() {
function Tile(position) {
var i, restype, _i, _len, _ref;
this.position = position;
this.layers = [];
_ref = allResourceTypes();
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
restype = _ref[i];
this.layers.push(new Tilelayer({
type: restype,
depth: i,
amount: Math.round(Math.random() * app.game.maxTileAmount) + 1
}));
}
this.currentLayer = 0;
this.empty = false;
this.entity = null;
this.isActive = false;
this.isBuildable = !(Math.round(Math.random() * 10) === 5);
if (this.position === 20 * 5 + 10) {
this.isBuildable = true;
}
this.randomSeed = Math.round(Math.random() * 10);
}
Tile.prototype.click = function(button) {
var name;
if (!this.isBuildable) {
return;
}
if (button === "left" && !this.empty) {
if ((app.game.availableSiloStorage() - app.game.usedSiloStorage()) > 0) {
if (this.layers[this.currentLayer].collect()) {
name = app.layerIndexToName(this.currentLayer);
return app.game.resources[name] += 1;
} else {
this.currentLayer += 1;
if (this.currentLayer === allResourceTypes().length - 1) {
this.entity = null;
return this.empty = true;
}
}
}
}
};
Tile.prototype.tick = function() {
if (this.entity) {
return this.entity.tick(this);
}
};
Tile.prototype.moveIn = function() {
return this.isActive = true;
};
Tile.prototype.moveOut = function() {
return this.isActive = false;
};
Tile.prototype.select = function() {
return this.isSelected = true;
};
Tile.prototype.deselect = function() {
return this.isSelected = false;
};
Tile.prototype.getCurrentLayer = function() {
return this.layers[this.currentLayer];
};
Tile.prototype.render = function(x, y) {
var color, i, numPercent, tileLayer, _i;
tileLayer = this.getCurrentLayer();
app.layer.drawRegion(app.images.layers, tileLayer.sprite, x * 8, y * 8);
if (!this.isBuildable) {
app.layer.drawRegion(app.images.deadtiles, [8 * this.randomSeed, 0, 8, 8], x * 8, y * 8);
return;
}
if (this.entity) {
app.layer.drawRegion(app.images.entities, this.entity.sprite(), x * 8, y * 8);
}
if ((this.entity && this.entity.isMoveable()) || this.isActive) {
app.layer.drawImage(app.images.progress, x * 8, y * 8);
numPercent = Math.floor((tileLayer.amount * 6) / app.game.maxTileAmount);
for (i = _i = 0; 0 <= numPercent ? _i <= numPercent : _i >= numPercent; i = 0 <= numPercent ? ++_i : --_i) {
color = ["#f00", "#a00", "#f60", "#aa0", "#0a0", "#0a0"][numPercent];
if (i === numPercent) {
color = ["#f00", "#f00", "#f80", "#ff0", "#0f0", "#0f0"][numPercent];
}
app.layer.setPixel(color, x * 8 + 1 + i, y * 8 + 6);
}
}
if (this.isActive) {
app.layer.drawImage(app.images.active, x * 8, y * 8);
}
if (this.isSelected) {
return app.layer.drawImage(app.images.selected, x * 8, y * 8);
}
};
return Tile;
})();
var Tilelayer;
Tilelayer = (function() {
function Tilelayer(options) {
this.type = options.type, this.depth = options.depth, this.amount = options.amount;
this.randomFactor = getRandomInt(0, 4);
this.sprite = [this.randomFactor * 8, this.depth * 8, 8, 8];
this.spritedetail = [0, this.depth * 16, 16, 16];
this.hudSprite = [this.randomFactor * 8, this.depth * 8, 4, 4];
}
Tilelayer.prototype.collect = function() {
if (this.amount === 0) {
return false;
}
return this.amount -= 1;
};
return Tilelayer;
})();
var allResourceTypes, getRandomInt, posToTile, posToXY, xyToPos,
__hasProp = {}.hasOwnProperty;
getRandomInt = function(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
};
allResourceTypes = function() {
var k, _ref, _results;
_ref = app.game.resources;
_results = [];
for (k in _ref) {
if (!__hasProp.call(_ref, k)) continue;
_results.push(k);
}
return _results;
};
posToTile = function(x, y) {
return app.game.map[xyToPos(x, y)];
};
posToXY = function(pos) {
var x, y;
y = Math.floor(pos / 20);
x = pos - (y * 20);
return [x, y];
};
xyToPos = function(x, y) {
return y * 20 + x;
};
var app,
__hasProp = {}.hasOwnProperty;
app = playground({
width: 8 * 20,
height: 8 * 15,
scaleToFit: true,
smoothing: false,
create: function() {
this.loadImages("layers", "active", "progress", "selected", "entities", "hud", "actions", "speechbubbles", "deadtiles", "layerdetails", "entitydetails", "buildinfo", "cursor", "info", "end", "intro1", "intro2", "intro3", "intro4", "titlescreen");
return this.currentHoveredTile = new Tile;
},
ready: function() {
this.game.start();
return this.setState(this.game);
},
render: function() {
this.layer.clear("#00f");
return this.game.render();
},
layerIndexToName: function(index) {
var k, resTypes;
resTypes = (function() {
var _ref, _results;
_ref = this.game.resources;
_results = [];
for (k in _ref) {
if (!__hasProp.call(_ref, k)) continue;
_results.push(k);
}
return _results;
}).call(this);
return resTypes[index];
}
});
app.game = {
start: function() {
var i, _i, _ref;
for (i = _i = 0, _ref = 20 * 15 - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
this.map[i] = new Tile(i);
}
this.map[20 * 5 + 10].entity = new Base;
this.mouseX = 0;
this.mouseY = 0;
this.currentHoveredTile = new Tile(-1);
this.currentSelectedTile = null;
window.setInterval(this.tick, 1000);
this.hud.start();
this.speechbubble.start();
this.cutScene = false;
this.intro = false;
return this.titleScreen = true;
},
startCutScene: function() {
if (this.titleScreen) {
this.titleScreen = false;
this.cutScene = true;
app.game.cutSceneImage = app.images.intro1;
return window.setTimeout(app.game.cutScene2, 1500);
}
},
cutScene2: (function(_this) {
return function() {
app.game.cutSceneImage = app.images.intro2;
return window.setTimeout(app.game.cutScene3, 2000);
};
})(this),
cutScene3: (function(_this) {
return function() {
app.game.cutSceneImage = app.images.intro3;
return window.setTimeout(app.game.cutScene4, 1500);
};
})(this),
cutScene4: (function(_this) {
return function() {
app.game.cutSceneImage = app.images.intro4;
return window.setTimeout(app.game.cutSceneEnd, 1500);
};
})(this),
cutSceneEnd: (function(_this) {
return function() {
app.game.cutScene = false;
app.game.intro = true;
return app.game.startIntro();
};
})(this),
startIntro: function() {
this.speechbubble.setFix(90, 27);
this.speechbubble.say('help', 2000);
return this.timeout = window.setTimeout(this.intro2, 3000);
},
intro2: (function(_this) {
return function() {
app.game.speechbubble.say('damn', 2000);
return app.game.timeout = window.setTimeout(app.game.intro3, 3000);
};
})(this),
intro3: (function(_this) {
return function() {
app.game.speechbubble.say('need', 3500);
return app.game.timeout = window.setTimeout(app.game.intro4, 4500);
};
})(this),
intro4: (function(_this) {
return function() {
app.game.speechbubble.say('collect', 3500);
return app.game.timeout = window.setTimeout(app.game.introEnd, 3500);
};
})(this),
introEnd: (function(_this) {
return function() {
_this.intro = false;
return app.game.speechbubble.setMouse();
};
})(this),
render: function() {
var i, tile, x, y, _i, _len, _ref;
if (this.titleScreen) {
app.layer.drawImage(app.images.titlescreen, 0, 0, 20 * 8, 15 * 8);
return;
}
if (this.cutScene) {
app.layer.drawImage(this.cutSceneImage, 0, 0, 20 * 8, 15 * 8);
return;
}
if (this.gameEndCheck()) {
app.layer.drawImage(app.images.end, 0, 0, 20 * 8, 15 * 8);
return;
}
_ref = this.map;
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
tile = _ref[i];
y = Math.floor(i / 20);
x = i - (y * 20);
tile.render(x, y);
}
this.hud.render();
return this.speechbubble.render();
},
mousedown: function(event) {
var tile;
tile = posToTile(Math.floor(event.x / 8), Math.floor(event.y / 8));
if (!(tile && tile.isBuildable)) {
return;
}
if (this.isMouseInView(event.x / 8, event.y / 8)) {
switch (event.button) {
case 'left':
if (event.x > 143 && event.x < 151 && event.y > 95 && event.y < 106) {
return app.game.hud.showBuildInfo();
} else {
tile.click(event.button);
if (this.currentSelectedTile) {
this.currentSelectedTile.deselect();
}
tile.select();
return this.currentSelectedTile = tile;
}
break;
case 'right':
if (this.currentSelectedTile) {
this.currentSelectedTile.deselect();
}
return this.currentSelectedTile = null;
}
}
},
mousemove: function(event) {
var tile;
this.mouseX = event.x;
this.mouseY = event.y;
if (this.isMouseInView(event.x, event.y)) {
tile = posToTile(Math.floor(event.x / 8), Math.floor(event.y / 8));
if (tile) {
if (tile !== this.currentHoveredTile) {
tile.moveIn();
if (this.currentHoveredTile) {
this.currentHoveredTile.moveOut();
}
return this.currentHoveredTile = tile;
}
}
} else {
if (this.currentHoveredTile) {
this.currentHoveredTile.moveOut();
}
return this.currentHoveredTile = null;
}
},
isMouseInView: function(mouseX, mouseY) {
if (mouseX < app.width && mouseX >= 0 && mouseY < app.height && mouseY >= 0) {
return true;
}
return false;
},
keyup: function(event) {
switch (event.key) {
case "enter":
return this.startCutScene();
case "m":
return this.createMiner();
case "e":
return this.createSolarpanel();
case "i":
return app.game.hud.showBuildInfo();
case "s":
return this.createSilo();
case "c":
return this.cheatah();
case "1":
return this.releaseRes('stardust');
case "2":
return this.releaseRes('dirt');
case "3":
return this.releaseRes('bedrock');
case "4":
return this.releaseRes('oxodum');
case "5":
return this.releaseRes('lubinit');
case "6":
return this.releaseRes('darkana');
case "7":
return this.releaseRes('bio');
case "8":
return this.releaseRes('notch');
case "9":
return this.releaseRes('lava');
case "space":
if (this.currentSelectedTile) {
this.currentSelectedTile.deselect();
}
return this.currentSelectedTile = null;
}
},
releaseRes: function(string) {
return this.resources[string] = 0;
},
tick: (function(_this) {
return function() {
var tile, _i, _len, _ref, _results;
_ref = app.game.map;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
tile = _ref[_i];
_results.push(tile.tick());
}
return _results;
};
})(this),
createMiner: function() {
if (this.currentSelectedTile && !this.currentSelectedTile.entity) {
if (this.checkResource('lubinit', 5, true)) {
return this.currentSelectedTile.entity = new Miner;
} else {
return this.speechbubble.say('nores');
}
} else {
return this.speechbubble.say('nosel');
}
},
createSilo: function() {
if (this.currentSelectedTile) {
if (this.checkPosition(this.currentSelectedTile)) {
if (this.checkResource('dirt', 5, true)) {
return this.currentSelectedTile.entity = new Silo;
} else {
return this.speechbubble.say('nores');
}
} else {
return this.speechbubble.say('toofar');
}
} else {
return this.speechbubble.say('nosel');
}
},
createSolarpanel: function() {
if (this.currentSelectedTile) {
if (this.checkPosition(this.currentSelectedTile)) {
if (this.checkResource('notch', 30, true)) {
return this.currentSelectedTile.entity = new Solarpanel;
} else {
return this.speechbubble.say('nores');
}
} else {
return this.speechbubble.say('toofar');
}
} else {
return this.speechbubble.say('nosel');
}
},
checkResource: function(type, amount, drain) {
if (drain == null) {
drain = false;
}
if (this.resources[type] >= amount) {
if (drain) {
this.resources[type] -= amount;
}
return true;
}
return false;
},
checkPosition: function(tile) {
var x, y, _ref;
if (tile.entity) {
return false;
}
_ref = posToXY(tile.position), x = _ref[0], y = _ref[1];
if (app.game.map[xyToPos(x - 1, y)].entity && app.game.map[xyToPos(x - 1, y)].entity.isDockable && x > 0) {
return true;
}
if (app.game.map[xyToPos(x + 1, y)].entity && app.game.map[xyToPos(x + 1, y)].entity.isDockable && x < 19) {
return true;
}
if (app.game.map[xyToPos(x, y - 1)].entity && app.game.map[xyToPos(x, y - 1)].entity.isDockable && y > 0) {
return true;
}
if (app.game.map[xyToPos(x, y + 1)].entity && app.game.map[xyToPos(x, y + 1)].entity.isDockable && y < 14) {
return true;
}
return false;
},
cheatah: function() {
var amount, type, _ref, _results;
_ref = this.resources;
_results = [];
for (type in _ref) {
amount = _ref[type];
_results.push(this.resources[type] = 100);
}
return _results;
},
map: [],
miners: [],
maxTileAmount: 75,
availableSiloStorage: function() {
var space, tile, _i, _len, _ref;
space = 0;
_ref = app.game.map;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
tile = _ref[_i];
if (tile.entity) {
space += tile.entity.spaceProvided;
}
}
return space;
},
usedSiloStorage: function() {
var amount, resource, space, _ref;
space = 0;
_ref = this.resources;
for (resource in _ref) {
amount = _ref[resource];
space += amount;
}
return space;
},
solarpanelCount: function() {
var energy, tile, _i, _len, _ref;
energy = 0;
_ref = app.game.map;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
tile = _ref[_i];
if (tile.entity && tile.entity.energyProvided > 10) {
energy += 1;
}
}
return energy;
},
gameEndCheck: function() {
if (this.solarpanelCount() >= 4) {
return true;
}
return false;
},
resources: {
stardust: 0,
dirt: 0,
bedrock: 0,
oxodum: 0,
lubinit: 0,
darkana: 0,
bio: 0,
notch: 0,
lava: 0
}
};
var __hasProp = {}.hasOwnProperty;
app.game.hud = {
start: function() {
var i, k, resTypes, restype, _i, _len, _results;
resTypes = (function() {
var _ref, _results;
_ref = app.game.resources;
_results = [];
for (k in _ref) {
if (!__hasProp.call(_ref, k)) continue;
_results.push(k);
}
return _results;
})();
this.position = {
x: 45,
y: 103
};
this.buildinfo = false;
this.itemArrow = new AnimatedItem({
maxFrames: 10,
image: app.images.actions,
speed: 50
});
this.resources = [];
_results = [];
for (i = _i = 0, _len = resTypes.length; _i < _len; i = ++_i) {
restype = resTypes[i];
_results.push(this.resources[restype] = new Tilelayer({
type: restype,
depth: i
}));
}
return _results;
},
render: function() {
var colorStep, currentSelectedTile, f, i, length, panelusage, resourcePanelColor, usedSiloStoragePercent, x, y, _i, _j;
panelusage = 'resources';
app.layer.drawImage(app.images.hud, 0, 11 * 8);
app.layer.drawImage(app.images.info, 143, 95);
if (this.buildinfo) {
app.layer.drawRegion(app.images.buildinfo, [0, 0, 106, 10], 1, 1);
app.layer.drawRegion(app.images.buildinfo, [0, 10, 106, 10], 1, 12);
app.layer.drawRegion(app.images.buildinfo, [0, 20, 106, 10], 1, 23);
app.layer.drawRegion(app.images.buildinfo, [0, 30, 106, 10], 1, 34);
}
currentSelectedTile = app.game.currentSelectedTile;
if (currentSelectedTile !== null) {
panelusage = 'tile';
if (currentSelectedTile.entity) {
panelusage = 'entity';
app.layer.drawRegion(app.images.entitydetails, currentSelectedTile.entity.spritedetail(), 12, 95);
} else {
app.layer.drawRegion(app.images.layerdetails, currentSelectedTile.getCurrentLayer().spritedetail, 12, 95);
}
}
usedSiloStoragePercent = Math.round((100 / app.game.availableSiloStorage()) * app.game.usedSiloStorage());
for (f = _i = 0; _i <= 100; f = ++_i) {
resourcePanelColor = "#333";
if (f <= usedSiloStoragePercent) {
colorStep = Math.round((usedSiloStoragePercent / 100) * 5);
resourcePanelColor = ["#0a0", "#0a0", "#aa0", "#f60", "#a00", "#f00"][colorStep];
}
x = 44 + f;
y = 112;
app.layer.setPixel(resourcePanelColor, x, y);
}
length = Math.round(((25 * app.game.solarpanelCount()) * 45) / 100);
for (i = _j = 0; 0 <= length ? _j <= length : _j >= length; i = 0 <= length ? ++_j : --_j) {
app.layer.setPixel("#228ca5", 49 + i, 91);
app.layer.setPixel("#8ddaed", 50 + i, 92);
app.layer.setPixel("#228ca5", 49 + i, 93);
}
switch (panelusage) {
case 'tile':
return this.showResources();
case 'entity':
if (currentSelectedTile.entity.isMoveable()) {
return app.layer.drawRegion(this.itemArrow.image, this.itemArrow.sprite(), 44, 102);
}
break;
case 'resources':
return this.showResources();
}
},
showBuildInfo: function() {
if (this.timeout) {
clearTimeout(this.timeout);
}
this.buildinfo = true;
return this.timeout = window.setTimeout(this.hideBuildInfo, 6000);
},
hideBuildInfo: function() {
return app.game.hud.buildinfo = false;
},
showResources: function() {
var amount, amountByTwenty, amountLeft, color, e, f, i, spritePosition, tileLayer, type, x, y, _i, _j, _ref, _results;
i = 0;
_ref = app.game.resources;
_results = [];
for (type in _ref) {
amount = _ref[type];
if (amount > 0) {
tileLayer = this.resources[type];
spritePosition = {
x: i * 9 + this.position.x,
y: this.position.y
};
app.layer.drawRegion(app.images.layers, tileLayer.hudSprite, spritePosition.x, spritePosition.y);
amountByTwenty = Math.floor(amount / 20);
amountLeft = amount - amountByTwenty * 20;
for (e = _i = 0; 0 <= amountLeft ? _i <= amountLeft : _i >= amountLeft; e = 0 <= amountLeft ? ++_i : --_i) {
color = "#0a0";
if (e === amountLeft) {
color = "#0f0";
}
if (e < 6) {
x = spritePosition.x - 1 + e;
y = spritePosition.y - 1;
} else if (e < 10) {
x = spritePosition.x + 4;
y = spritePosition.y - 1 + e - 5;
} else if (e < 15) {
x = spritePosition.x + 14 - e;
y = spritePosition.y + 4;
} else {
x = spritePosition.x - 1;
y = spritePosition.y + 19 - e;
}
app.layer.setPixel(color, x, y);
}
for (f = _j = 0; 0 <= amountByTwenty ? _j <= amountByTwenty : _j >= amountByTwenty; f = 0 <= amountByTwenty ? ++_j : --_j) {
if (f > 0) {
color = "#0000ff";
x = spritePosition.x - 2 + f;
y = spritePosition.y + 7;
app.layer.setPixel(color, x, y);
}
}
}
_results.push(i++);
}
return _results;
}
};
app.game.speechbubble = {
start: function() {
this.sprite = [0, 0, 27, 13];
return this.positioning = 'mouse';
},
setFix: function(x, y) {
this.x = x;
this.y = y;
return this.positioning = 'fixed';
},
setMouse: function() {
return this.positioning = 'mouse';
},
say: function(text, timeout) {
if (timeout == null) {
timeout = 1000;
}
if (this.timeout) {
clearTimeout(this.timeout);
}
switch (text) {
case 'help':
this.sprite = [0, 0, 27, 13];
break;
case 'toofar':
this.sprite = [0, 13, 90, 13];
break;
case 'nores':
this.sprite = [0, 26, 90, 13];
break;
case 'nosel':
this.sprite = [0, 39, 90, 13];
break;
case 'damn':
this.sprite = [0, 52, 90, 13];
break;
case 'need':
this.sprite = [0, 65, 90, 13];
break;
case 'collect':
this.sprite = [0, 78, 90, 13];
}
this.visible = true;
return this.timeout = window.setTimeout(this.hide, timeout);
},
hide: (function(_this) {
return function() {
return app.game.speechbubble.visible = false;
};
})(this),
render: function() {
var x, y;
switch (this.positioning) {
case 'mouse':
x = app.game.mouseX + 5;
y = app.game.mouseY - 15;
break;
case 'fixed':
x = this.x;
y = this.y;
}
if (this.visible) {
return app.layer.drawRegion(app.images.speechbubbles, this.sprite, x, y);
}
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJhc2UuY29mZmVlIiwibWluZXIuY29mZmVlIiwic2lsby5jb2ZmZWUiLCJzb2xhcnBhbmVsLmNvZmZlZSIsImFuaW1hdGVkaXRlbS5jb2ZmZWUiLCJ0aWxlLmNvZmZlZSIsInRpbGVsYXllci5jb2ZmZWUiLCJ0b29scy5jb2ZmZWUiLCJhcHAuY29mZmVlIiwiZ2FtZS5jb2ZmZWUiLCJodWQuY29mZmVlIiwic3BlZWNoYnViYmxlLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFBLElBQUE7RUFBQSxrRkFBQTs7QUFBQTtBQUNlLEVBQUEsY0FBQSxHQUFBO0FBQ1gsNkRBQUEsQ0FBQTtBQUFBLElBQUEsSUFBQyxDQUFBLEtBQUQsR0FBUyxDQUFULENBQUE7QUFBQSxJQUVBLE1BQU0sQ0FBQyxXQUFQLENBQW1CLElBQUMsQ0FBQSxlQUFwQixFQUFxQyxHQUFyQyxDQUZBLENBRFc7RUFBQSxDQUFiOztBQUFBLGlCQUtBLElBQUEsR0FBTSxTQUFDLElBQUQsR0FBQSxDQUxOLENBQUE7O0FBQUEsaUJBT0EsTUFBQSxHQUFRLFNBQUEsR0FBQTtXQUNOLENBQUMsSUFBQyxDQUFBLEtBQUQsR0FBTyxDQUFSLEVBQVcsQ0FBWCxFQUFjLENBQWQsRUFBaUIsQ0FBakIsRUFETTtFQUFBLENBUFIsQ0FBQTs7QUFBQSxpQkFVQSxZQUFBLEdBQWMsU0FBQSxHQUFBO1dBQ1osQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLEVBQVAsRUFBVyxFQUFYLEVBRFk7RUFBQSxDQVZkLENBQUE7O0FBQUEsaUJBYUEsVUFBQSxHQUFZLFNBQUEsR0FBQTtXQUNWLE1BRFU7RUFBQSxDQWJaLENBQUE7O0FBQUEsaUJBZ0JBLGVBQUEsR0FBaUIsU0FBQSxHQUFBO0FBQ2YsSUFBQSxJQUFHLElBQUMsQ0FBQSxLQUFELEtBQVUsQ0FBYjthQUNFLElBQUMsQ0FBQSxLQUFELEdBQVMsRUFEWDtLQUFBLE1BQUE7YUFHRSxJQUFDLENBQUEsS0FBRCxJQUFVLEVBSFo7S0FEZTtFQUFBLENBaEJqQixDQUFBOztBQUFBLGlCQXNCQSxhQUFBLEdBQWUsRUF0QmYsQ0FBQTs7QUFBQSxpQkF1QkEsY0FBQSxHQUFnQixDQXZCaEIsQ0FBQTs7QUFBQSxpQkF3QkEsVUFBQSxHQUFZLElBeEJaLENBQUE7O2NBQUE7O0lBREYsQ0FBQTs7QUNBQSxJQUFBLEtBQUE7RUFBQSxrRkFBQTs7QUFBQTtBQUNlLEVBQUEsZUFBQSxHQUFBO0FBQ1gsNkRBQUEsQ0FBQTtBQUFBLElBQUEsSUFBQyxDQUFBLEtBQUQsR0FBUyxDQUFULENBQUE7QUFBQSxJQUNBLE1BQU0sQ0FBQyxXQUFQLENBQW1CLElBQUMsQ0FBQSxlQUFwQixFQUFxQyxHQUFyQyxDQURBLENBRFc7RUFBQSxDQUFiOztBQUFBLGtCQUlBLElBQUEsR0FBTSxTQUFDLElBQUQsR0FBQTtBQUNKLElBQUEsSUFBSSxDQUFDLEtBQUwsQ0FBVyxNQUFYLENBQUEsQ0FBQTtBQUFBLElBQ0EsSUFBSSxDQUFDLEtBQUwsQ0FBVyxNQUFYLENBREEsQ0FBQTtBQUFBLElBRUEsSUFBSSxDQUFDLEtBQUwsQ0FBVyxNQUFYLENBRkEsQ0FBQTtXQUdBLElBQUksQ0FBQyxLQUFMLENBQVcsTUFBWCxFQUpJO0VBQUEsQ0FKTixDQUFBOztBQUFBLGtCQVVBLE1BQUEsR0FBUSxTQUFBLEdBQUE7V0FDTixDQUFDLElBQUMsQ0FBQSxLQUFELEdBQU8sQ0FBUixFQUFXLEVBQVgsRUFBZSxDQUFmLEVBQWtCLENBQWxCLEVBRE07RUFBQSxDQVZSLENBQUE7O0FBQUEsa0JBYUEsWUFBQSxHQUFjLFNBQUEsR0FBQTtXQUNaLENBQUMsQ0FBRCxFQUFJLEVBQUEsR0FBRyxDQUFQLEVBQVUsRUFBVixFQUFjLEVBQWQsRUFEWTtFQUFBLENBYmQsQ0FBQTs7QUFBQSxrQkFnQkEsVUFBQSxHQUFZLFNBQUEsR0FBQTtXQUNWLEtBRFU7RUFBQSxDQWhCWixDQUFBOztBQUFBLGtCQW1CQSxlQUFBLEdBQWlCLFNBQUEsR0FBQTtBQUNmLElBQUEsSUFBRyxJQUFDLENBQUEsS0FBRCxLQUFVLENBQWI7YUFDRSxJQUFDLENBQUEsS0FBRCxHQUFTLEVBRFg7S0FBQSxNQUFBO2FBR0UsSUFBQyxDQUFBLEtBQUQsSUFBVSxFQUhaO0tBRGU7RUFBQSxDQW5CakIsQ0FBQTs7QUFBQSxrQkF5QkEsYUFBQSxHQUFlLENBekJmLENBQUE7O0FBQUEsa0JBMEJBLGNBQUEsR0FBZ0IsQ0ExQmhCLENBQUE7O0FBQUEsa0JBMkJBLFVBQUEsR0FBWSxLQTNCWixDQUFBOztlQUFBOztJQURGLENBQUE7O0FDQUEsSUFBQSxJQUFBO0VBQUEsa0ZBQUE7O0FBQUE7QUFDZSxFQUFBLGNBQUEsR0FBQTtBQUNYLDZEQUFBLENBQUE7QUFBQSxJQUFBLElBQUMsQ0FBQSxLQUFELEdBQVMsQ0FBVCxDQUFBO0FBQUEsSUFDQSxNQUFNLENBQUMsV0FBUCxDQUFtQixJQUFDLENBQUEsZUFBcEIsRUFBcUMsR0FBckMsQ0FEQSxDQURXO0VBQUEsQ0FBYjs7QUFBQSxpQkFJQSxJQUFBLEdBQU0sU0FBQyxJQUFELEdBQUEsQ0FKTixDQUFBOztBQUFBLGlCQU1BLE1BQUEsR0FBUSxTQUFBLEdBQUE7V0FDTixDQUFDLElBQUMsQ0FBQSxLQUFELEdBQU8sQ0FBUixFQUFXLENBQVgsRUFBYyxDQUFkLEVBQWlCLENBQWpCLEVBRE07RUFBQSxDQU5SLENBQUE7O0FBQUEsaUJBU0EsWUFBQSxHQUFjLFNBQUEsR0FBQTtXQUNaLENBQUMsQ0FBRCxFQUFJLEVBQUosRUFBUSxFQUFSLEVBQVksRUFBWixFQURZO0VBQUEsQ0FUZCxDQUFBOztBQUFBLGlCQVlBLFVBQUEsR0FBWSxTQUFBLEdBQUE7V0FDVixNQURVO0VBQUEsQ0FaWixDQUFBOztBQUFBLGlCQWVBLGVBQUEsR0FBaUIsU0FBQSxHQUFBO0FBQ2YsSUFBQSxJQUFHLElBQUMsQ0FBQSxLQUFELEtBQVUsQ0FBYjthQUNFLElBQUMsQ0FBQSxLQUFELEdBQVMsRUFEWDtLQUFBLE1BQUE7YUFHRSxJQUFDLENBQUEsS0FBRCxJQUFVLEVBSFo7S0FEZTtFQUFBLENBZmpCLENBQUE7O0FBQUEsaUJBcUJBLGFBQUEsR0FBZSxFQXJCZixDQUFBOztBQUFBLGlCQXNCQSxjQUFBLEdBQWdCLENBdEJoQixDQUFBOztBQUFBLGlCQXdCQSxVQUFBLEdBQVksSUF4QlosQ0FBQTs7Y0FBQTs7SUFERixDQUFBOztBQ0FBLElBQUEsVUFBQTs7QUFBQTswQkFDRTs7QUFBQSx1QkFBQSxJQUFBLEdBQU0sU0FBQyxJQUFELEdBQUEsQ0FBTixDQUFBOztBQUFBLHVCQUVBLE1BQUEsR0FBUSxTQUFBLEdBQUE7V0FDTixDQUFDLENBQUQsRUFBSSxDQUFBLEdBQUUsQ0FBTixFQUFTLENBQVQsRUFBWSxDQUFaLEVBRE07RUFBQSxDQUZSLENBQUE7O0FBQUEsdUJBS0EsWUFBQSxHQUFjLFNBQUEsR0FBQTtXQUNaLENBQUMsQ0FBRCxFQUFJLEVBQUEsR0FBRyxDQUFQLEVBQVUsRUFBVixFQUFjLEVBQWQsRUFEWTtFQUFBLENBTGQsQ0FBQTs7QUFBQSx1QkFRQSxVQUFBLEdBQVksU0FBQSxHQUFBO1dBQ1YsTUFEVTtFQUFBLENBUlosQ0FBQTs7QUFBQSx1QkFXQSxhQUFBLEdBQWUsQ0FYZixDQUFBOztBQUFBLHVCQVlBLGNBQUEsR0FBZ0IsRUFaaEIsQ0FBQTs7QUFBQSx1QkFhQSxVQUFBLEdBQVksSUFiWixDQUFBOztvQkFBQTs7SUFERixDQUFBOztBQ0FBLElBQUEsWUFBQTtFQUFBLGtGQUFBOztBQUFBO0FBQ2UsRUFBQSxzQkFBQyxPQUFELEdBQUE7QUFDWCw2REFBQSxDQUFBO0FBQUEsSUFBQyxJQUFDLENBQUEsb0JBQUEsU0FBRixFQUFhLElBQUMsQ0FBQSxnQkFBQSxLQUFkLEVBQXFCLElBQUMsQ0FBQSxnQkFBQSxLQUF0QixDQUFBO0FBQUEsSUFFQSxJQUFDLENBQUEsS0FBRCxHQUFTLENBRlQsQ0FBQTtBQUFBLElBR0EsTUFBTSxDQUFDLFdBQVAsQ0FBbUIsSUFBQyxDQUFBLGVBQXBCLEVBQXFDLElBQUMsQ0FBQSxLQUF0QyxDQUhBLENBRFc7RUFBQSxDQUFiOztBQUFBLHlCQU1BLE1BQUEsR0FBUSxTQUFBLEdBQUE7V0FDTixDQUFDLElBQUMsQ0FBQSxLQUFELEdBQU8sQ0FBUixFQUFXLENBQVgsRUFBYyxDQUFkLEVBQWlCLENBQWpCLEVBRE07RUFBQSxDQU5SLENBQUE7O0FBQUEseUJBU0EsZUFBQSxHQUFpQixTQUFBLEdBQUE7QUFDZixJQUFBLElBQUcsSUFBQyxDQUFBLEtBQUQsS0FBVSxJQUFDLENBQUEsU0FBZDthQUNFLElBQUMsQ0FBQSxLQUFELEdBQVMsRUFEWDtLQUFBLE1BQUE7YUFHRSxJQUFDLENBQUEsS0FBRCxJQUFVLEVBSFo7S0FEZTtFQUFBLENBVGpCLENBQUE7O3NCQUFBOztJQURGLENBQUE7O0FDQUEsSUFBQSxJQUFBOztBQUFBO0FBQ2UsRUFBQSxjQUFDLFFBQUQsR0FBQTtBQUNYLFFBQUEsMEJBQUE7QUFBQSxJQUFBLElBQUMsQ0FBQSxRQUFELEdBQVksUUFBWixDQUFBO0FBQUEsSUFDQSxJQUFDLENBQUEsTUFBRCxHQUFVLEVBRFYsQ0FBQTtBQUVBO0FBQUEsU0FBQSxtREFBQTt3QkFBQTtBQUNFLE1BQUEsSUFBQyxDQUFBLE1BQU0sQ0FBQyxJQUFSLENBQWlCLElBQUEsU0FBQSxDQUNmO0FBQUEsUUFBQSxJQUFBLEVBQU0sT0FBTjtBQUFBLFFBQ0EsS0FBQSxFQUFPLENBRFA7QUFBQSxRQUVBLE1BQUEsRUFBUSxJQUFJLENBQUMsS0FBTCxDQUFXLElBQUksQ0FBQyxNQUFMLENBQUEsQ0FBQSxHQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBbEMsQ0FBQSxHQUFpRCxDQUZ6RDtPQURlLENBQWpCLENBQUEsQ0FERjtBQUFBLEtBRkE7QUFBQSxJQVNBLElBQUMsQ0FBQSxZQUFELEdBQWdCLENBVGhCLENBQUE7QUFBQSxJQVVBLElBQUMsQ0FBQSxLQUFELEdBQVMsS0FWVCxDQUFBO0FBQUEsSUFXQSxJQUFDLENBQUEsTUFBRCxHQUFVLElBWFYsQ0FBQTtBQUFBLElBWUEsSUFBQyxDQUFBLFFBQUQsR0FBWSxLQVpaLENBQUE7QUFBQSxJQWFBLElBQUMsQ0FBQSxXQUFELEdBQWUsQ0FBQSxDQUFFLElBQUksQ0FBQyxLQUFMLENBQVcsSUFBSSxDQUFDLE1BQUwsQ0FBQSxDQUFBLEdBQWMsRUFBekIsQ0FBQSxLQUFnQyxDQUFqQyxDQWJoQixDQUFBO0FBY0EsSUFBQSxJQUF1QixJQUFDLENBQUEsUUFBRCxLQUFhLEVBQUEsR0FBRyxDQUFILEdBQUssRUFBekM7QUFBQSxNQUFBLElBQUMsQ0FBQSxXQUFELEdBQWUsSUFBZixDQUFBO0tBZEE7QUFBQSxJQWVBLElBQUMsQ0FBQSxVQUFELEdBQWMsSUFBSSxDQUFDLEtBQUwsQ0FBVyxJQUFJLENBQUMsTUFBTCxDQUFBLENBQUEsR0FBYyxFQUF6QixDQWZkLENBRFc7RUFBQSxDQUFiOztBQUFBLGlCQWtCQSxLQUFBLEdBQU8sU0FBQyxNQUFELEdBQUE7QUFFTCxRQUFBLElBQUE7QUFBQSxJQUFBLElBQUEsQ0FBQSxJQUFlLENBQUEsV0FBZjtBQUFBLFlBQUEsQ0FBQTtLQUFBO0FBRUEsSUFBQSxJQUFHLE1BQUEsS0FBVSxNQUFWLElBQXFCLENBQUEsSUFBRSxDQUFBLEtBQTFCO0FBQ0UsTUFBQSxJQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBVCxDQUFBLENBQUEsR0FBa0MsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFULENBQUEsQ0FBbkMsQ0FBQSxHQUFpRSxDQUFwRTtBQUNFLFFBQUEsSUFBRyxJQUFDLENBQUEsTUFBTyxDQUFBLElBQUMsQ0FBQSxZQUFELENBQWMsQ0FBQyxPQUF2QixDQUFBLENBQUg7QUFDRSxVQUFBLElBQUEsR0FBTyxHQUFHLENBQUMsZ0JBQUosQ0FBcUIsSUFBQyxDQUFBLFlBQXRCLENBQVAsQ0FBQTtpQkFDQSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVUsQ0FBQSxJQUFBLENBQW5CLElBQTRCLEVBRjlCO1NBQUEsTUFBQTtBQUlFLFVBQUEsSUFBQyxDQUFBLFlBQUQsSUFBaUIsQ0FBakIsQ0FBQTtBQUVBLFVBQUEsSUFBRyxJQUFDLENBQUEsWUFBRCxLQUFpQixnQkFBQSxDQUFBLENBQWtCLENBQUMsTUFBbkIsR0FBMEIsQ0FBOUM7QUFFRSxZQUFBLElBQUMsQ0FBQSxNQUFELEdBQVUsSUFBVixDQUFBO21CQUNBLElBQUMsQ0FBQSxLQUFELEdBQVMsS0FIWDtXQU5GO1NBREY7T0FERjtLQUpLO0VBQUEsQ0FsQlAsQ0FBQTs7QUFBQSxpQkFtQ0EsSUFBQSxHQUFNLFNBQUEsR0FBQTtBQUNKLElBQUEsSUFBa0IsSUFBQyxDQUFBLE1BQW5CO2FBQUEsSUFBQyxDQUFBLE1BQU0sQ0FBQyxJQUFSLENBQWEsSUFBYixFQUFBO0tBREk7RUFBQSxDQW5DTixDQUFBOztBQUFBLGlCQXNDQSxNQUFBLEdBQVEsU0FBQSxHQUFBO1dBQ04sSUFBQyxDQUFBLFFBQUQsR0FBWSxLQUROO0VBQUEsQ0F0Q1IsQ0FBQTs7QUFBQSxpQkF5Q0EsT0FBQSxHQUFTLFNBQUEsR0FBQTtXQUNQLElBQUMsQ0FBQSxRQUFELEdBQVksTUFETDtFQUFBLENBekNULENBQUE7O0FBQUEsaUJBNENBLE1BQUEsR0FBUSxTQUFBLEdBQUE7V0FDTixJQUFDLENBQUEsVUFBRCxHQUFjLEtBRFI7RUFBQSxDQTVDUixDQUFBOztBQUFBLGlCQStDQSxRQUFBLEdBQVUsU0FBQSxHQUFBO1dBQ1IsSUFBQyxDQUFBLFVBQUQsR0FBYyxNQUROO0VBQUEsQ0EvQ1YsQ0FBQTs7QUFBQSxpQkFrREEsZUFBQSxHQUFpQixTQUFBLEdBQUE7V0FDZixJQUFDLENBQUEsTUFBTyxDQUFBLElBQUMsQ0FBQSxZQUFELEVBRE87RUFBQSxDQWxEakIsQ0FBQTs7QUFBQSxpQkFxREEsTUFBQSxHQUFRLFNBQUMsQ0FBRCxFQUFJLENBQUosR0FBQTtBQUNOLFFBQUEsbUNBQUE7QUFBQSxJQUFBLFNBQUEsR0FBWSxJQUFDLENBQUEsZUFBRCxDQUFBLENBQVosQ0FBQTtBQUFBLElBQ0EsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFWLENBQXFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBaEMsRUFBd0MsU0FBUyxDQUFDLE1BQWxELEVBQTBELENBQUEsR0FBRSxDQUE1RCxFQUErRCxDQUFBLEdBQUUsQ0FBakUsQ0FEQSxDQUFBO0FBR0EsSUFBQSxJQUFBLENBQUEsSUFBUSxDQUFBLFdBQVI7QUFDRSxNQUFBLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVixDQUFxQixHQUFHLENBQUMsTUFBTSxDQUFDLFNBQWhDLEVBQTJDLENBQUMsQ0FBQSxHQUFFLElBQUMsQ0FBQSxVQUFKLEVBQWdCLENBQWhCLEVBQW1CLENBQW5CLEVBQXNCLENBQXRCLENBQTNDLEVBQXFFLENBQUEsR0FBRSxDQUF2RSxFQUEwRSxDQUFBLEdBQUUsQ0FBNUUsQ0FBQSxDQUFBO0FBQ0EsWUFBQSxDQUZGO0tBSEE7QUFPQSxJQUFBLElBQUcsSUFBQyxDQUFBLE1BQUo7QUFDRSxNQUFBLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVixDQUFxQixHQUFHLENBQUMsTUFBTSxDQUFDLFFBQWhDLEVBQTBDLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixDQUFBLENBQTFDLEVBQTRELENBQUEsR0FBRSxDQUE5RCxFQUFpRSxDQUFBLEdBQUUsQ0FBbkUsQ0FBQSxDQURGO0tBUEE7QUFVQSxJQUFBLElBQUcsQ0FBQyxJQUFDLENBQUEsTUFBRCxJQUFZLElBQUMsQ0FBQSxNQUFNLENBQUMsVUFBUixDQUFBLENBQWIsQ0FBQSxJQUFzQyxJQUFDLENBQUEsUUFBMUM7QUFFRSxNQUFBLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBVixDQUFvQixHQUFHLENBQUMsTUFBTSxDQUFDLFFBQS9CLEVBQXlDLENBQUEsR0FBRSxDQUEzQyxFQUE4QyxDQUFBLEdBQUUsQ0FBaEQsQ0FBQSxDQUFBO0FBQUEsTUFDQSxVQUFBLEdBQWEsSUFBSSxDQUFDLEtBQUwsQ0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFWLEdBQWlCLENBQWxCLENBQUEsR0FBcUIsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUF6QyxDQURiLENBQUE7QUFFQSxXQUFTLG9HQUFULEdBQUE7QUFDRSxRQUFBLEtBQUEsR0FBUSxDQUFDLE1BQUQsRUFBUyxNQUFULEVBQWlCLE1BQWpCLEVBQXlCLE1BQXpCLEVBQWlDLE1BQWpDLEVBQXlDLE1BQXpDLENBQWlELENBQUEsVUFBQSxDQUF6RCxDQUFBO0FBQ0EsUUFBQSxJQUF3RSxDQUFBLEtBQUssVUFBN0U7QUFBQSxVQUFBLEtBQUEsR0FBUSxDQUFDLE1BQUQsRUFBUyxNQUFULEVBQWlCLE1BQWpCLEVBQXlCLE1BQXpCLEVBQWlDLE1BQWpDLEVBQXlDLE1BQXpDLENBQWlELENBQUEsVUFBQSxDQUF6RCxDQUFBO1NBREE7QUFBQSxRQUVBLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBVixDQUFtQixLQUFuQixFQUEwQixDQUFBLEdBQUUsQ0FBRixHQUFJLENBQUosR0FBTSxDQUFoQyxFQUFtQyxDQUFBLEdBQUUsQ0FBRixHQUFJLENBQXZDLENBRkEsQ0FERjtBQUFBLE9BSkY7S0FWQTtBQW1CQSxJQUFBLElBQUcsSUFBQyxDQUFBLFFBQUo7QUFDRSxNQUFBLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBVixDQUFvQixHQUFHLENBQUMsTUFBTSxDQUFDLE1BQS9CLEVBQXVDLENBQUEsR0FBRSxDQUF6QyxFQUE0QyxDQUFBLEdBQUUsQ0FBOUMsQ0FBQSxDQURGO0tBbkJBO0FBc0JBLElBQUEsSUFBRyxJQUFDLENBQUEsVUFBSjthQUNFLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBVixDQUFvQixHQUFHLENBQUMsTUFBTSxDQUFDLFFBQS9CLEVBQXlDLENBQUEsR0FBRSxDQUEzQyxFQUE4QyxDQUFBLEdBQUUsQ0FBaEQsRUFERjtLQXZCTTtFQUFBLENBckRSLENBQUE7O2NBQUE7O0lBREYsQ0FBQTs7QUNBQSxJQUFBLFNBQUE7O0FBQUE7QUFDZSxFQUFBLG1CQUFDLE9BQUQsR0FBQTtBQUNYLElBQUMsSUFBQyxDQUFBLGVBQUEsSUFBRixFQUFRLElBQUMsQ0FBQSxnQkFBQSxLQUFULEVBQWdCLElBQUMsQ0FBQSxpQkFBQSxNQUFqQixDQUFBO0FBQUEsSUFDQSxJQUFDLENBQUEsWUFBRCxHQUFnQixZQUFBLENBQWEsQ0FBYixFQUFnQixDQUFoQixDQURoQixDQUFBO0FBQUEsSUFFQSxJQUFDLENBQUEsTUFBRCxHQUFVLENBQUMsSUFBQyxDQUFBLFlBQUQsR0FBYyxDQUFmLEVBQWtCLElBQUMsQ0FBQSxLQUFELEdBQU8sQ0FBekIsRUFBNEIsQ0FBNUIsRUFBK0IsQ0FBL0IsQ0FGVixDQUFBO0FBQUEsSUFHQSxJQUFDLENBQUEsWUFBRCxHQUFnQixDQUFDLENBQUQsRUFBSSxJQUFDLENBQUEsS0FBRCxHQUFPLEVBQVgsRUFBZSxFQUFmLEVBQW1CLEVBQW5CLENBSGhCLENBQUE7QUFBQSxJQUlBLElBQUMsQ0FBQSxTQUFELEdBQWEsQ0FBQyxJQUFDLENBQUEsWUFBRCxHQUFjLENBQWYsRUFBa0IsSUFBQyxDQUFBLEtBQUQsR0FBTyxDQUF6QixFQUE0QixDQUE1QixFQUErQixDQUEvQixDQUpiLENBRFc7RUFBQSxDQUFiOztBQUFBLHNCQU9BLE9BQUEsR0FBUyxTQUFBLEdBQUE7QUFDUCxJQUFBLElBQWdCLElBQUMsQ0FBQSxNQUFELEtBQVcsQ0FBM0I7QUFBQSxhQUFPLEtBQVAsQ0FBQTtLQUFBO1dBQ0EsSUFBQyxDQUFBLE1BQUQsSUFBVyxFQUZKO0VBQUEsQ0FQVCxDQUFBOzttQkFBQTs7SUFERixDQUFBOztBQ0FBLElBQUEsMkRBQUE7RUFBQSw2QkFBQTs7QUFBQSxZQUFBLEdBQWUsU0FBQyxHQUFELEVBQU0sR0FBTixHQUFBO1NBQ2IsSUFBSSxDQUFDLEtBQUwsQ0FBVyxJQUFJLENBQUMsTUFBTCxDQUFBLENBQUEsR0FBZ0IsQ0FBQyxHQUFBLEdBQU0sR0FBTixHQUFZLENBQWIsQ0FBM0IsQ0FBQSxHQUE4QyxJQURqQztBQUFBLENBQWYsQ0FBQTs7QUFBQSxnQkFHQSxHQUFtQixTQUFBLEdBQUE7QUFDakIsTUFBQSxpQkFBQTtBQUFDO0FBQUE7T0FBQSxTQUFBOzJDQUFBO0FBQUEsa0JBQUEsRUFBQSxDQUFBO0FBQUE7a0JBRGdCO0FBQUEsQ0FIbkIsQ0FBQTs7QUFBQSxTQU1BLEdBQVksU0FBQyxDQUFELEVBQUksQ0FBSixHQUFBO1NBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFJLENBQUEsT0FBQSxDQUFRLENBQVIsRUFBVyxDQUFYLENBQUEsRUFESDtBQUFBLENBTlosQ0FBQTs7QUFBQSxPQVNBLEdBQVUsU0FBQyxHQUFELEdBQUE7QUFDUixNQUFBLElBQUE7QUFBQSxFQUFBLENBQUEsR0FBSSxJQUFJLENBQUMsS0FBTCxDQUFXLEdBQUEsR0FBSSxFQUFmLENBQUosQ0FBQTtBQUFBLEVBQ0EsQ0FBQSxHQUFJLEdBQUEsR0FBSSxDQUFDLENBQUEsR0FBRSxFQUFILENBRFIsQ0FBQTtTQUVBLENBQUMsQ0FBRCxFQUFJLENBQUosRUFIUTtBQUFBLENBVFYsQ0FBQTs7QUFBQSxPQWNBLEdBQVUsU0FBQyxDQUFELEVBQUksQ0FBSixHQUFBO1NBQ1IsQ0FBQSxHQUFFLEVBQUYsR0FBTyxFQURDO0FBQUEsQ0FkVixDQUFBOztBQ0FBLElBQUEsR0FBQTtFQUFBLDZCQUFBOztBQUFBLEdBQUEsR0FBTSxVQUFBLENBQ0o7QUFBQSxFQUFBLEtBQUEsRUFBTyxDQUFBLEdBQUUsRUFBVDtBQUFBLEVBQ0EsTUFBQSxFQUFRLENBQUEsR0FBRSxFQURWO0FBQUEsRUFFQSxVQUFBLEVBQVksSUFGWjtBQUFBLEVBR0EsU0FBQSxFQUFXLEtBSFg7QUFBQSxFQUtBLE1BQUEsRUFBUSxTQUFBLEdBQUE7QUFDTixJQUFBLElBQUMsQ0FBQSxVQUFELENBQVksUUFBWixFQUFzQixRQUF0QixFQUFnQyxVQUFoQyxFQUE0QyxVQUE1QyxFQUF3RCxVQUF4RCxFQUFvRSxLQUFwRSxFQUEyRSxTQUEzRSxFQUFzRixlQUF0RixFQUF1RyxXQUF2RyxFQUFvSCxjQUFwSCxFQUFvSSxlQUFwSSxFQUFxSixXQUFySixFQUFrSyxRQUFsSyxFQUE0SyxNQUE1SyxFQUFvTCxLQUFwTCxFQUEyTCxRQUEzTCxFQUFxTSxRQUFyTSxFQUErTSxRQUEvTSxFQUF5TixRQUF6TixFQUFtTyxhQUFuTyxDQUFBLENBQUE7V0FDQSxJQUFDLENBQUEsa0JBQUQsR0FBc0IsR0FBQSxDQUFBLEtBRmhCO0VBQUEsQ0FMUjtBQUFBLEVBU0EsS0FBQSxFQUFPLFNBQUEsR0FBQTtBQUNMLElBQUEsSUFBQyxDQUFBLElBQUksQ0FBQyxLQUFOLENBQUEsQ0FBQSxDQUFBO1dBQ0EsSUFBQyxDQUFBLFFBQUQsQ0FBVSxJQUFDLENBQUEsSUFBWCxFQUZLO0VBQUEsQ0FUUDtBQUFBLEVBYUEsTUFBQSxFQUFRLFNBQUEsR0FBQTtBQUNOLElBQUEsSUFBQyxDQUFBLEtBQUssQ0FBQyxLQUFQLENBQWEsTUFBYixDQUFBLENBQUE7V0FDQSxJQUFDLENBQUEsSUFBSSxDQUFDLE1BQU4sQ0FBQSxFQUZNO0VBQUEsQ0FiUjtBQUFBLEVBaUJBLGdCQUFBLEVBQWtCLFNBQUMsS0FBRCxHQUFBO0FBQ2hCLFFBQUEsV0FBQTtBQUFBLElBQUEsUUFBQTs7QUFBWTtBQUFBO1dBQUEsU0FBQTsrQ0FBQTtBQUFBLHNCQUFBLEVBQUEsQ0FBQTtBQUFBOztpQkFBWixDQUFBO1dBQ0EsUUFBUyxDQUFBLEtBQUEsRUFGTztFQUFBLENBakJsQjtDQURJLENBQU4sQ0FBQTs7QUNBQSxHQUFHLENBQUMsSUFBSixHQUNFO0FBQUEsRUFBQSxLQUFBLEVBQU8sU0FBQSxHQUFBO0FBQ0wsUUFBQSxXQUFBO0FBQUEsU0FBUyxnR0FBVCxHQUFBO0FBQ0UsTUFBQSxJQUFDLENBQUEsR0FBSSxDQUFBLENBQUEsQ0FBTCxHQUFjLElBQUEsSUFBQSxDQUFLLENBQUwsQ0FBZCxDQURGO0FBQUEsS0FBQTtBQUFBLElBRUEsSUFBQyxDQUFBLEdBQUksQ0FBQSxFQUFBLEdBQUcsQ0FBSCxHQUFLLEVBQUwsQ0FBUSxDQUFDLE1BQWQsR0FBdUIsR0FBQSxDQUFBLElBRnZCLENBQUE7QUFBQSxJQUlBLElBQUMsQ0FBQSxNQUFELEdBQVUsQ0FKVixDQUFBO0FBQUEsSUFLQSxJQUFDLENBQUEsTUFBRCxHQUFVLENBTFYsQ0FBQTtBQUFBLElBTUEsSUFBQyxDQUFBLGtCQUFELEdBQTBCLElBQUEsSUFBQSxDQUFLLENBQUEsQ0FBTCxDQU4xQixDQUFBO0FBQUEsSUFPQSxJQUFDLENBQUEsbUJBQUQsR0FBdUIsSUFQdkIsQ0FBQTtBQUFBLElBU0EsTUFBTSxDQUFDLFdBQVAsQ0FBbUIsSUFBQyxDQUFBLElBQXBCLEVBQTBCLElBQTFCLENBVEEsQ0FBQTtBQUFBLElBVUEsSUFBQyxDQUFBLEdBQUcsQ0FBQyxLQUFMLENBQUEsQ0FWQSxDQUFBO0FBQUEsSUFXQSxJQUFDLENBQUEsWUFBWSxDQUFDLEtBQWQsQ0FBQSxDQVhBLENBQUE7QUFBQSxJQWFBLElBQUMsQ0FBQSxRQUFELEdBQVksS0FiWixDQUFBO0FBQUEsSUFjQSxJQUFDLENBQUEsS0FBRCxHQUFTLEtBZFQsQ0FBQTtXQWVBLElBQUMsQ0FBQSxXQUFELEdBQWUsS0FoQlY7RUFBQSxDQUFQO0FBQUEsRUFtQkEsYUFBQSxFQUFlLFNBQUEsR0FBQTtBQUNiLElBQUEsSUFBRyxJQUFDLENBQUEsV0FBSjtBQUNFLE1BQUEsSUFBQyxDQUFBLFdBQUQsR0FBZSxLQUFmLENBQUE7QUFBQSxNQUNBLElBQUMsQ0FBQSxRQUFELEdBQVksSUFEWixDQUFBO0FBQUEsTUFFQSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQVQsR0FBeUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUZwQyxDQUFBO2FBR0EsTUFBTSxDQUFDLFVBQVAsQ0FBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUEzQixFQUFzQyxJQUF0QyxFQUpGO0tBRGE7RUFBQSxDQW5CZjtBQUFBLEVBMEJBLFNBQUEsRUFBVyxDQUFBLFNBQUEsS0FBQSxHQUFBO1dBQUEsU0FBQSxHQUFBO0FBQ1QsTUFBQSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQVQsR0FBeUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFwQyxDQUFBO2FBQ0EsTUFBTSxDQUFDLFVBQVAsQ0FBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUEzQixFQUFzQyxJQUF0QyxFQUZTO0lBQUEsRUFBQTtFQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0ExQlg7QUFBQSxFQThCQSxTQUFBLEVBQVcsQ0FBQSxTQUFBLEtBQUEsR0FBQTtXQUFBLFNBQUEsR0FBQTtBQUNULE1BQUEsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFULEdBQXlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBcEMsQ0FBQTthQUNBLE1BQU0sQ0FBQyxVQUFQLENBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBM0IsRUFBc0MsSUFBdEMsRUFGUztJQUFBLEVBQUE7RUFBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBOUJYO0FBQUEsRUFrQ0EsU0FBQSxFQUFXLENBQUEsU0FBQSxLQUFBLEdBQUE7V0FBQSxTQUFBLEdBQUE7QUFDVCxNQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBVCxHQUF5QixHQUFHLENBQUMsTUFBTSxDQUFDLE1BQXBDLENBQUE7YUFDQSxNQUFNLENBQUMsVUFBUCxDQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLFdBQTNCLEVBQXdDLElBQXhDLEVBRlM7SUFBQSxFQUFBO0VBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQWxDWDtBQUFBLEVBc0NBLFdBQUEsRUFBYSxDQUFBLFNBQUEsS0FBQSxHQUFBO1dBQUEsU0FBQSxHQUFBO0FBQ1gsTUFBQSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVQsR0FBb0IsS0FBcEIsQ0FBQTtBQUFBLE1BQ0EsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFULEdBQWlCLElBRGpCLENBQUE7YUFFQSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVQsQ0FBQSxFQUhXO0lBQUEsRUFBQTtFQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0F0Q2I7QUFBQSxFQTJDQSxVQUFBLEVBQVksU0FBQSxHQUFBO0FBQ1YsSUFBQSxJQUFDLENBQUEsWUFBWSxDQUFDLE1BQWQsQ0FBcUIsRUFBckIsRUFBeUIsRUFBekIsQ0FBQSxDQUFBO0FBQUEsSUFDQSxJQUFDLENBQUEsWUFBWSxDQUFDLEdBQWQsQ0FBa0IsTUFBbEIsRUFBMEIsSUFBMUIsQ0FEQSxDQUFBO1dBR0EsSUFBQyxDQUFBLE9BQUQsR0FBVyxNQUFNLENBQUMsVUFBUCxDQUFrQixJQUFDLENBQUEsTUFBbkIsRUFBMkIsSUFBM0IsRUFKRDtFQUFBLENBM0NaO0FBQUEsRUFpREEsTUFBQSxFQUFRLENBQUEsU0FBQSxLQUFBLEdBQUE7V0FBQSxTQUFBLEdBQUE7QUFDTixNQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQXRCLENBQTBCLE1BQTFCLEVBQWtDLElBQWxDLENBQUEsQ0FBQTthQUNBLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBVCxHQUFtQixNQUFNLENBQUMsVUFBUCxDQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQTNCLEVBQW1DLElBQW5DLEVBRmI7SUFBQSxFQUFBO0VBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQWpEUjtBQUFBLEVBcURBLE1BQUEsRUFBUSxDQUFBLFNBQUEsS0FBQSxHQUFBO1dBQUEsU0FBQSxHQUFBO0FBQ04sTUFBQSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUF0QixDQUEwQixNQUExQixFQUFrQyxJQUFsQyxDQUFBLENBQUE7YUFDQSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQVQsR0FBbUIsTUFBTSxDQUFDLFVBQVAsQ0FBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUEzQixFQUFtQyxJQUFuQyxFQUZiO0lBQUEsRUFBQTtFQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FyRFI7QUFBQSxFQXlEQSxNQUFBLEVBQVEsQ0FBQSxTQUFBLEtBQUEsR0FBQTtXQUFBLFNBQUEsR0FBQTtBQUNOLE1BQUEsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBdEIsQ0FBMEIsU0FBMUIsRUFBcUMsSUFBckMsQ0FBQSxDQUFBO2FBQ0EsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFULEdBQW1CLE1BQU0sQ0FBQyxVQUFQLENBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBM0IsRUFBcUMsSUFBckMsRUFGYjtJQUFBLEVBQUE7RUFBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBekRSO0FBQUEsRUE2REEsUUFBQSxFQUFVLENBQUEsU0FBQSxLQUFBLEdBQUE7V0FBQSxTQUFBLEdBQUE7QUFDUixNQUFBLEtBQUMsQ0FBQSxLQUFELEdBQVMsS0FBVCxDQUFBO2FBQ0EsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBdEIsQ0FBQSxFQUZRO0lBQUEsRUFBQTtFQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0E3RFY7QUFBQSxFQWlFQSxNQUFBLEVBQVEsU0FBQSxHQUFBO0FBQ04sUUFBQSw2QkFBQTtBQUFBLElBQUEsSUFBRyxJQUFDLENBQUEsV0FBSjtBQUNFLE1BQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFWLENBQW9CLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBL0IsRUFBNEMsQ0FBNUMsRUFBK0MsQ0FBL0MsRUFBa0QsRUFBQSxHQUFHLENBQXJELEVBQXdELEVBQUEsR0FBRyxDQUEzRCxDQUFBLENBQUE7QUFDQSxZQUFBLENBRkY7S0FBQTtBQUlBLElBQUEsSUFBRyxJQUFDLENBQUEsUUFBSjtBQUNFLE1BQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFWLENBQW9CLElBQUMsQ0FBQSxhQUFyQixFQUFvQyxDQUFwQyxFQUF1QyxDQUF2QyxFQUEwQyxFQUFBLEdBQUcsQ0FBN0MsRUFBZ0QsRUFBQSxHQUFHLENBQW5ELENBQUEsQ0FBQTtBQUNBLFlBQUEsQ0FGRjtLQUpBO0FBUUEsSUFBQSxJQUFHLElBQUMsQ0FBQSxZQUFELENBQUEsQ0FBSDtBQUNFLE1BQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFWLENBQW9CLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBL0IsRUFBb0MsQ0FBcEMsRUFBdUMsQ0FBdkMsRUFBMEMsRUFBQSxHQUFHLENBQTdDLEVBQWdELEVBQUEsR0FBRyxDQUFuRCxDQUFBLENBQUE7QUFDQSxZQUFBLENBRkY7S0FSQTtBQVlBO0FBQUEsU0FBQSxtREFBQTtxQkFBQTtBQUNFLE1BQUEsQ0FBQSxHQUFJLElBQUksQ0FBQyxLQUFMLENBQVcsQ0FBQSxHQUFFLEVBQWIsQ0FBSixDQUFBO0FBQUEsTUFDQSxDQUFBLEdBQUksQ0FBQSxHQUFFLENBQUMsQ0FBQSxHQUFFLEVBQUgsQ0FETixDQUFBO0FBQUEsTUFFQSxJQUFJLENBQUMsTUFBTCxDQUFZLENBQVosRUFBZSxDQUFmLENBRkEsQ0FERjtBQUFBLEtBWkE7QUFBQSxJQWdCQSxJQUFDLENBQUEsR0FBRyxDQUFDLE1BQUwsQ0FBQSxDQWhCQSxDQUFBO1dBaUJBLElBQUMsQ0FBQSxZQUFZLENBQUMsTUFBZCxDQUFBLEVBbEJNO0VBQUEsQ0FqRVI7QUFBQSxFQXFGQSxTQUFBLEVBQVcsU0FBQyxLQUFELEdBQUE7QUFDVCxRQUFBLElBQUE7QUFBQSxJQUFBLElBQUEsR0FBTyxTQUFBLENBQVUsSUFBSSxDQUFDLEtBQUwsQ0FBVyxLQUFLLENBQUMsQ0FBTixHQUFRLENBQW5CLENBQVYsRUFBaUMsSUFBSSxDQUFDLEtBQUwsQ0FBVyxLQUFLLENBQUMsQ0FBTixHQUFRLENBQW5CLENBQWpDLENBQVAsQ0FBQTtBQUdBLElBQUEsSUFBQSxDQUFBLENBQWMsSUFBQSxJQUFTLElBQUksQ0FBQyxXQUE1QixDQUFBO0FBQUEsWUFBQSxDQUFBO0tBSEE7QUFLQSxJQUFBLElBQUcsSUFBQyxDQUFBLGFBQUQsQ0FBZSxLQUFLLENBQUMsQ0FBTixHQUFRLENBQXZCLEVBQTBCLEtBQUssQ0FBQyxDQUFOLEdBQVEsQ0FBbEMsQ0FBSDtBQUNFLGNBQU8sS0FBSyxDQUFDLE1BQWI7QUFBQSxhQUNPLE1BRFA7QUFFSSxVQUFBLElBQUcsS0FBSyxDQUFDLENBQU4sR0FBVSxHQUFWLElBQWtCLEtBQUssQ0FBQyxDQUFOLEdBQVUsR0FBNUIsSUFBb0MsS0FBSyxDQUFDLENBQU4sR0FBVSxFQUE5QyxJQUFxRCxLQUFLLENBQUMsQ0FBTixHQUFVLEdBQWxFO21CQUNFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWIsQ0FBQSxFQURGO1dBQUEsTUFBQTtBQUdFLFlBQUEsSUFBSSxDQUFDLEtBQUwsQ0FBVyxLQUFLLENBQUMsTUFBakIsQ0FBQSxDQUFBO0FBRUEsWUFBQSxJQUFtQyxJQUFDLENBQUEsbUJBQXBDO0FBQUEsY0FBQSxJQUFDLENBQUEsbUJBQW1CLENBQUMsUUFBckIsQ0FBQSxDQUFBLENBQUE7YUFGQTtBQUFBLFlBR0EsSUFBSSxDQUFDLE1BQUwsQ0FBQSxDQUhBLENBQUE7bUJBSUEsSUFBQyxDQUFBLG1CQUFELEdBQXVCLEtBUHpCO1dBRko7QUFDTztBQURQLGFBVU8sT0FWUDtBQVdJLFVBQUEsSUFBbUMsSUFBQyxDQUFBLG1CQUFwQztBQUFBLFlBQUEsSUFBQyxDQUFBLG1CQUFtQixDQUFDLFFBQXJCLENBQUEsQ0FBQSxDQUFBO1dBQUE7aUJBQ0EsSUFBQyxDQUFBLG1CQUFELEdBQXVCLEtBWjNCO0FBQUEsT0FERjtLQU5TO0VBQUEsQ0FyRlg7QUFBQSxFQTBHQSxTQUFBLEVBQVcsU0FBQyxLQUFELEdBQUE7QUFDVCxRQUFBLElBQUE7QUFBQSxJQUFBLElBQUMsQ0FBQSxNQUFELEdBQVUsS0FBSyxDQUFDLENBQWhCLENBQUE7QUFBQSxJQUNBLElBQUMsQ0FBQSxNQUFELEdBQVUsS0FBSyxDQUFDLENBRGhCLENBQUE7QUFHQSxJQUFBLElBQUcsSUFBQyxDQUFBLGFBQUQsQ0FBZSxLQUFLLENBQUMsQ0FBckIsRUFBd0IsS0FBSyxDQUFDLENBQTlCLENBQUg7QUFDRSxNQUFBLElBQUEsR0FBTyxTQUFBLENBQVUsSUFBSSxDQUFDLEtBQUwsQ0FBVyxLQUFLLENBQUMsQ0FBTixHQUFRLENBQW5CLENBQVYsRUFBaUMsSUFBSSxDQUFDLEtBQUwsQ0FBVyxLQUFLLENBQUMsQ0FBTixHQUFRLENBQW5CLENBQWpDLENBQVAsQ0FBQTtBQUVBLE1BQUEsSUFBRyxJQUFIO0FBQ0UsUUFBQSxJQUFHLElBQUEsS0FBUSxJQUFDLENBQUEsa0JBQVo7QUFDRSxVQUFBLElBQUksQ0FBQyxNQUFMLENBQUEsQ0FBQSxDQUFBO0FBQ0EsVUFBQSxJQUFpQyxJQUFDLENBQUEsa0JBQWxDO0FBQUEsWUFBQSxJQUFDLENBQUEsa0JBQWtCLENBQUMsT0FBcEIsQ0FBQSxDQUFBLENBQUE7V0FEQTtpQkFFQSxJQUFDLENBQUEsa0JBQUQsR0FBc0IsS0FIeEI7U0FERjtPQUhGO0tBQUEsTUFBQTtBQVNFLE1BQUEsSUFBaUMsSUFBQyxDQUFBLGtCQUFsQztBQUFBLFFBQUEsSUFBQyxDQUFBLGtCQUFrQixDQUFDLE9BQXBCLENBQUEsQ0FBQSxDQUFBO09BQUE7YUFDQSxJQUFDLENBQUEsa0JBQUQsR0FBc0IsS0FWeEI7S0FKUztFQUFBLENBMUdYO0FBQUEsRUEwSEEsYUFBQSxFQUFlLFNBQUMsTUFBRCxFQUFTLE1BQVQsR0FBQTtBQUNiLElBQUEsSUFBRyxNQUFBLEdBQVMsR0FBRyxDQUFDLEtBQWIsSUFBdUIsTUFBQSxJQUFVLENBQWpDLElBQXVDLE1BQUEsR0FBUyxHQUFHLENBQUMsTUFBcEQsSUFBK0QsTUFBQSxJQUFVLENBQTVFO0FBQ0UsYUFBTyxJQUFQLENBREY7S0FBQTtXQUdBLE1BSmE7RUFBQSxDQTFIZjtBQUFBLEVBZ0lBLEtBQUEsRUFBTyxTQUFDLEtBQUQsR0FBQTtBQUNMLFlBQU8sS0FBSyxDQUFDLEdBQWI7QUFBQSxXQUNPLE9BRFA7ZUFDb0IsSUFBQyxDQUFBLGFBQUQsQ0FBQSxFQURwQjtBQUFBLFdBRU8sR0FGUDtlQUVnQixJQUFDLENBQUEsV0FBRCxDQUFBLEVBRmhCO0FBQUEsV0FHTyxHQUhQO2VBR2dCLElBQUMsQ0FBQSxnQkFBRCxDQUFBLEVBSGhCO0FBQUEsV0FJTyxHQUpQO2VBSWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWIsQ0FBQSxFQUpoQjtBQUFBLFdBS08sR0FMUDtlQUtnQixJQUFDLENBQUEsVUFBRCxDQUFBLEVBTGhCO0FBQUEsV0FNTyxHQU5QO2VBTWdCLElBQUMsQ0FBQSxPQUFELENBQUEsRUFOaEI7QUFBQSxXQU9PLEdBUFA7ZUFPZ0IsSUFBQyxDQUFBLFVBQUQsQ0FBWSxVQUFaLEVBUGhCO0FBQUEsV0FRTyxHQVJQO2VBUWdCLElBQUMsQ0FBQSxVQUFELENBQVksTUFBWixFQVJoQjtBQUFBLFdBU08sR0FUUDtlQVNnQixJQUFDLENBQUEsVUFBRCxDQUFZLFNBQVosRUFUaEI7QUFBQSxXQVVPLEdBVlA7ZUFVZ0IsSUFBQyxDQUFBLFVBQUQsQ0FBWSxRQUFaLEVBVmhCO0FBQUEsV0FXTyxHQVhQO2VBV2dCLElBQUMsQ0FBQSxVQUFELENBQVksU0FBWixFQVhoQjtBQUFBLFdBWU8sR0FaUDtlQVlnQixJQUFDLENBQUEsVUFBRCxDQUFZLFNBQVosRUFaaEI7QUFBQSxXQWFPLEdBYlA7ZUFhZ0IsSUFBQyxDQUFBLFVBQUQsQ0FBWSxLQUFaLEVBYmhCO0FBQUEsV0FjTyxHQWRQO2VBY2dCLElBQUMsQ0FBQSxVQUFELENBQVksT0FBWixFQWRoQjtBQUFBLFdBZU8sR0FmUDtlQWVnQixJQUFDLENBQUEsVUFBRCxDQUFZLE1BQVosRUFmaEI7QUFBQSxXQWdCTyxPQWhCUDtBQWlCSSxRQUFBLElBQW1DLElBQUMsQ0FBQSxtQkFBcEM7QUFBQSxVQUFBLElBQUMsQ0FBQSxtQkFBbUIsQ0FBQyxRQUFyQixDQUFBLENBQUEsQ0FBQTtTQUFBO2VBQ0EsSUFBQyxDQUFBLG1CQUFELEdBQXVCLEtBbEIzQjtBQUFBLEtBREs7RUFBQSxDQWhJUDtBQUFBLEVBcUpBLFVBQUEsRUFBWSxTQUFDLE1BQUQsR0FBQTtXQUNWLElBQUMsQ0FBQSxTQUFVLENBQUEsTUFBQSxDQUFYLEdBQXFCLEVBRFg7RUFBQSxDQXJKWjtBQUFBLEVBd0pBLElBQUEsRUFBTSxDQUFBLFNBQUEsS0FBQSxHQUFBO1dBQUEsU0FBQSxHQUFBO0FBQ0osVUFBQSw4QkFBQTtBQUFBO0FBQUE7V0FBQSwyQ0FBQTt3QkFBQTtBQUFBLHNCQUFBLElBQUksQ0FBQyxJQUFMLENBQUEsRUFBQSxDQUFBO0FBQUE7c0JBREk7SUFBQSxFQUFBO0VBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQXhKTjtBQUFBLEVBMkpBLFdBQUEsRUFBYSxTQUFBLEdBQUE7QUFDWCxJQUFBLElBQUcsSUFBQyxDQUFBLG1CQUFELElBQXlCLENBQUEsSUFBRSxDQUFBLG1CQUFtQixDQUFDLE1BQWxEO0FBQ0UsTUFBQSxJQUFHLElBQUMsQ0FBQSxhQUFELENBQWUsU0FBZixFQUEwQixDQUExQixFQUE2QixJQUE3QixDQUFIO2VBQ0UsSUFBQyxDQUFBLG1CQUFtQixDQUFDLE1BQXJCLEdBQThCLEdBQUEsQ0FBQSxNQURoQztPQUFBLE1BQUE7ZUFHRSxJQUFDLENBQUEsWUFBWSxDQUFDLEdBQWQsQ0FBa0IsT0FBbEIsRUFIRjtPQURGO0tBQUEsTUFBQTthQU1FLElBQUMsQ0FBQSxZQUFZLENBQUMsR0FBZCxDQUFrQixPQUFsQixFQU5GO0tBRFc7RUFBQSxDQTNKYjtBQUFBLEVBb0tBLFVBQUEsRUFBWSxTQUFBLEdBQUE7QUFDVixJQUFBLElBQUcsSUFBQyxDQUFBLG1CQUFKO0FBQ0UsTUFBQSxJQUFHLElBQUMsQ0FBQSxhQUFELENBQWUsSUFBQyxDQUFBLG1CQUFoQixDQUFIO0FBQ0UsUUFBQSxJQUFHLElBQUMsQ0FBQSxhQUFELENBQWUsTUFBZixFQUF1QixDQUF2QixFQUEwQixJQUExQixDQUFIO2lCQUNFLElBQUMsQ0FBQSxtQkFBbUIsQ0FBQyxNQUFyQixHQUE4QixHQUFBLENBQUEsS0FEaEM7U0FBQSxNQUFBO2lCQUdFLElBQUMsQ0FBQSxZQUFZLENBQUMsR0FBZCxDQUFrQixPQUFsQixFQUhGO1NBREY7T0FBQSxNQUFBO2VBTUUsSUFBQyxDQUFBLFlBQVksQ0FBQyxHQUFkLENBQWtCLFFBQWxCLEVBTkY7T0FERjtLQUFBLE1BQUE7YUFTRSxJQUFDLENBQUEsWUFBWSxDQUFDLEdBQWQsQ0FBa0IsT0FBbEIsRUFURjtLQURVO0VBQUEsQ0FwS1o7QUFBQSxFQWlMQSxnQkFBQSxFQUFrQixTQUFBLEdBQUE7QUFDaEIsSUFBQSxJQUFHLElBQUMsQ0FBQSxtQkFBSjtBQUNFLE1BQUEsSUFBRyxJQUFDLENBQUEsYUFBRCxDQUFlLElBQUMsQ0FBQSxtQkFBaEIsQ0FBSDtBQUNFLFFBQUEsSUFBRyxJQUFDLENBQUEsYUFBRCxDQUFlLE9BQWYsRUFBd0IsRUFBeEIsRUFBNEIsSUFBNUIsQ0FBSDtpQkFDRSxJQUFDLENBQUEsbUJBQW1CLENBQUMsTUFBckIsR0FBOEIsR0FBQSxDQUFBLFdBRGhDO1NBQUEsTUFBQTtpQkFHRSxJQUFDLENBQUEsWUFBWSxDQUFDLEdBQWQsQ0FBa0IsT0FBbEIsRUFIRjtTQURGO09BQUEsTUFBQTtlQU1FLElBQUMsQ0FBQSxZQUFZLENBQUMsR0FBZCxDQUFrQixRQUFsQixFQU5GO09BREY7S0FBQSxNQUFBO2FBU0UsSUFBQyxDQUFBLFlBQVksQ0FBQyxHQUFkLENBQWtCLE9BQWxCLEVBVEY7S0FEZ0I7RUFBQSxDQWpMbEI7QUFBQSxFQTZMQSxhQUFBLEVBQWUsU0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLEtBQWYsR0FBQTs7TUFBZSxRQUFRO0tBQ3BDO0FBQUEsSUFBQSxJQUFHLElBQUMsQ0FBQSxTQUFVLENBQUEsSUFBQSxDQUFYLElBQW9CLE1BQXZCO0FBQ0UsTUFBQSxJQUE4QixLQUE5QjtBQUFBLFFBQUEsSUFBQyxDQUFBLFNBQVUsQ0FBQSxJQUFBLENBQVgsSUFBb0IsTUFBcEIsQ0FBQTtPQUFBO0FBQ0EsYUFBTyxJQUFQLENBRkY7S0FBQTtXQUdBLE1BSmE7RUFBQSxDQTdMZjtBQUFBLEVBbU1BLGFBQUEsRUFBZSxTQUFDLElBQUQsR0FBQTtBQUNiLFFBQUEsVUFBQTtBQUFBLElBQUEsSUFBZ0IsSUFBSSxDQUFDLE1BQXJCO0FBQUEsYUFBTyxLQUFQLENBQUE7S0FBQTtBQUFBLElBR0EsT0FBUyxPQUFBLENBQVEsSUFBSSxDQUFDLFFBQWIsQ0FBVCxFQUFDLFdBQUQsRUFBSSxXQUhKLENBQUE7QUFNQSxJQUFBLElBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFJLENBQUEsT0FBQSxDQUFRLENBQUEsR0FBRSxDQUFWLEVBQWEsQ0FBYixDQUFBLENBQWdCLENBQUMsTUFBOUIsSUFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUksQ0FBQSxPQUFBLENBQVEsQ0FBQSxHQUFFLENBQVYsRUFBYSxDQUFiLENBQUEsQ0FBZ0IsQ0FBQyxNQUFNLENBQUMsVUFENUIsSUFFVCxDQUFBLEdBQUksQ0FGVjtBQUFBLGFBQU8sSUFBUCxDQUFBO0tBTkE7QUFXQSxJQUFBLElBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFJLENBQUEsT0FBQSxDQUFRLENBQUEsR0FBRSxDQUFWLEVBQWEsQ0FBYixDQUFBLENBQWdCLENBQUMsTUFBOUIsSUFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUksQ0FBQSxPQUFBLENBQVEsQ0FBQSxHQUFFLENBQVYsRUFBYSxDQUFiLENBQUEsQ0FBZ0IsQ0FBQyxNQUFNLENBQUMsVUFENUIsSUFFVCxDQUFBLEdBQUksRUFGVjtBQUFBLGFBQU8sSUFBUCxDQUFBO0tBWEE7QUFnQkEsSUFBQSxJQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBSSxDQUFBLE9BQUEsQ0FBUSxDQUFSLEVBQVcsQ0FBQSxHQUFFLENBQWIsQ0FBQSxDQUFnQixDQUFDLE1BQTlCLElBQ1QsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFJLENBQUEsT0FBQSxDQUFRLENBQVIsRUFBVyxDQUFBLEdBQUUsQ0FBYixDQUFBLENBQWdCLENBQUMsTUFBTSxDQUFDLFVBRDVCLElBRVQsQ0FBQSxHQUFJLENBRlY7QUFBQSxhQUFPLElBQVAsQ0FBQTtLQWhCQTtBQXFCQSxJQUFBLElBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFJLENBQUEsT0FBQSxDQUFRLENBQVIsRUFBVyxDQUFBLEdBQUUsQ0FBYixDQUFBLENBQWdCLENBQUMsTUFBOUIsSUFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUksQ0FBQSxPQUFBLENBQVEsQ0FBUixFQUFXLENBQUEsR0FBRSxDQUFiLENBQUEsQ0FBZ0IsQ0FBQyxNQUFNLENBQUMsVUFENUIsSUFFVCxDQUFBLEdBQUksRUFGVjtBQUFBLGFBQU8sSUFBUCxDQUFBO0tBckJBO1dBeUJBLE1BMUJhO0VBQUEsQ0FuTWY7QUFBQSxFQStOQSxPQUFBLEVBQVMsU0FBQSxHQUFBO0FBQ1AsUUFBQSw0QkFBQTtBQUFBO0FBQUE7U0FBQSxZQUFBOzBCQUFBO0FBQ0Usb0JBQUEsSUFBQyxDQUFBLFNBQVUsQ0FBQSxJQUFBLENBQVgsR0FBbUIsSUFBbkIsQ0FERjtBQUFBO29CQURPO0VBQUEsQ0EvTlQ7QUFBQSxFQW1PQSxHQUFBLEVBQUssRUFuT0w7QUFBQSxFQW9PQSxNQUFBLEVBQVEsRUFwT1I7QUFBQSxFQXFPQSxhQUFBLEVBQWUsRUFyT2Y7QUFBQSxFQXVPQSxvQkFBQSxFQUFzQixTQUFBLEdBQUE7QUFDcEIsUUFBQSwyQkFBQTtBQUFBLElBQUEsS0FBQSxHQUFRLENBQVIsQ0FBQTtBQUNBO0FBQUEsU0FBQSwyQ0FBQTtzQkFBQTtBQUNFLE1BQUEsSUFBc0MsSUFBSSxDQUFDLE1BQTNDO0FBQUEsUUFBQSxLQUFBLElBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFyQixDQUFBO09BREY7QUFBQSxLQURBO1dBR0EsTUFKb0I7RUFBQSxDQXZPdEI7QUFBQSxFQTZPQSxlQUFBLEVBQWlCLFNBQUEsR0FBQTtBQUNmLFFBQUEsNkJBQUE7QUFBQSxJQUFBLEtBQUEsR0FBUSxDQUFSLENBQUE7QUFDQTtBQUFBLFNBQUEsZ0JBQUE7OEJBQUE7QUFBQSxNQUFBLEtBQUEsSUFBUyxNQUFULENBQUE7QUFBQSxLQURBO1dBRUEsTUFIZTtFQUFBLENBN09qQjtBQUFBLEVBa1BBLGVBQUEsRUFBaUIsU0FBQSxHQUFBO0FBQ2YsUUFBQSw0QkFBQTtBQUFBLElBQUEsTUFBQSxHQUFTLENBQVQsQ0FBQTtBQUNBO0FBQUEsU0FBQSwyQ0FBQTtzQkFBQTtBQUVFLE1BQUEsSUFBZSxJQUFJLENBQUMsTUFBTCxJQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQVosR0FBNkIsRUFBNUQ7QUFBQSxRQUFBLE1BQUEsSUFBVSxDQUFWLENBQUE7T0FGRjtBQUFBLEtBREE7V0FJQSxPQUxlO0VBQUEsQ0FsUGpCO0FBQUEsRUF5UEEsWUFBQSxFQUFjLFNBQUEsR0FBQTtBQUNaLElBQUEsSUFBZSxJQUFDLENBQUEsZUFBRCxDQUFBLENBQUEsSUFBc0IsQ0FBckM7QUFBQSxhQUFPLElBQVAsQ0FBQTtLQUFBO1dBQ0EsTUFGWTtFQUFBLENBelBkO0FBQUEsRUE2UEEsU0FBQSxFQUNFO0FBQUEsSUFBQSxRQUFBLEVBQVUsQ0FBVjtBQUFBLElBQ0EsSUFBQSxFQUFNLENBRE47QUFBQSxJQUVBLE9BQUEsRUFBUyxDQUZUO0FBQUEsSUFHQSxNQUFBLEVBQVEsQ0FIUjtBQUFBLElBSUEsT0FBQSxFQUFTLENBSlQ7QUFBQSxJQUtBLE9BQUEsRUFBUyxDQUxUO0FBQUEsSUFNQSxHQUFBLEVBQUssQ0FOTDtBQUFBLElBT0EsS0FBQSxFQUFPLENBUFA7QUFBQSxJQVFBLElBQUEsRUFBTSxDQVJOO0dBOVBGO0NBREYsQ0FBQTs7QUNBQSxJQUFBLDZCQUFBOztBQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBVCxHQUNFO0FBQUEsRUFBQSxLQUFBLEVBQU8sU0FBQSxHQUFBO0FBQ0wsUUFBQSwyQ0FBQTtBQUFBLElBQUEsUUFBQTs7QUFBWTtBQUFBO1dBQUEsU0FBQTsrQ0FBQTtBQUFBLHNCQUFBLEVBQUEsQ0FBQTtBQUFBOztRQUFaLENBQUE7QUFBQSxJQUVBLElBQUMsQ0FBQSxRQUFELEdBQVk7QUFBQSxNQUFBLENBQUEsRUFBRyxFQUFIO0FBQUEsTUFBTyxDQUFBLEVBQUcsR0FBVjtLQUZaLENBQUE7QUFBQSxJQUdBLElBQUMsQ0FBQSxTQUFELEdBQWEsS0FIYixDQUFBO0FBQUEsSUFLQSxJQUFDLENBQUEsU0FBRCxHQUFpQixJQUFBLFlBQUEsQ0FBYTtBQUFBLE1BQUEsU0FBQSxFQUFXLEVBQVg7QUFBQSxNQUFlLEtBQUEsRUFBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQWpDO0FBQUEsTUFBMEMsS0FBQSxFQUFPLEVBQWpEO0tBQWIsQ0FMakIsQ0FBQTtBQUFBLElBT0EsSUFBQyxDQUFBLFNBQUQsR0FBYSxFQVBiLENBQUE7QUFRQTtTQUFBLHVEQUFBOzRCQUFBO0FBQ0Usb0JBQUEsSUFBQyxDQUFBLFNBQVUsQ0FBQSxPQUFBLENBQVgsR0FBMEIsSUFBQSxTQUFBLENBQ3hCO0FBQUEsUUFBQSxJQUFBLEVBQU0sT0FBTjtBQUFBLFFBQ0EsS0FBQSxFQUFPLENBRFA7T0FEd0IsRUFBMUIsQ0FERjtBQUFBO29CQVRLO0VBQUEsQ0FBUDtBQUFBLEVBZUEsTUFBQSxFQUFRLFNBQUEsR0FBQTtBQUNOLFFBQUEsa0hBQUE7QUFBQSxJQUFBLFVBQUEsR0FBYSxXQUFiLENBQUE7QUFBQSxJQUNBLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBVixDQUFvQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQS9CLEVBQW9DLENBQXBDLEVBQXVDLEVBQUEsR0FBRyxDQUExQyxDQURBLENBQUE7QUFBQSxJQUdBLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBVixDQUFvQixHQUFHLENBQUMsTUFBTSxDQUFDLElBQS9CLEVBQXFDLEdBQXJDLEVBQTBDLEVBQTFDLENBSEEsQ0FBQTtBQVFBLElBQUEsSUFBRyxJQUFDLENBQUEsU0FBSjtBQUNFLE1BQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFWLENBQXFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBaEMsRUFBMkMsQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLEdBQVAsRUFBWSxFQUFaLENBQTNDLEVBQTRELENBQTVELEVBQStELENBQS9ELENBQUEsQ0FBQTtBQUFBLE1BQ0EsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFWLENBQXFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBaEMsRUFBMkMsQ0FBQyxDQUFELEVBQUksRUFBSixFQUFRLEdBQVIsRUFBYSxFQUFiLENBQTNDLEVBQTZELENBQTdELEVBQWdFLEVBQWhFLENBREEsQ0FBQTtBQUFBLE1BRUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFWLENBQXFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBaEMsRUFBMkMsQ0FBQyxDQUFELEVBQUksRUFBSixFQUFRLEdBQVIsRUFBYSxFQUFiLENBQTNDLEVBQTZELENBQTdELEVBQWdFLEVBQWhFLENBRkEsQ0FBQTtBQUFBLE1BR0EsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFWLENBQXFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBaEMsRUFBMkMsQ0FBQyxDQUFELEVBQUksRUFBSixFQUFRLEdBQVIsRUFBYSxFQUFiLENBQTNDLEVBQTZELENBQTdELEVBQWdFLEVBQWhFLENBSEEsQ0FERjtLQVJBO0FBQUEsSUFjQSxtQkFBQSxHQUFzQixHQUFHLENBQUMsSUFBSSxDQUFDLG1CQWQvQixDQUFBO0FBZUEsSUFBQSxJQUFHLG1CQUFBLEtBQXVCLElBQTFCO0FBQ0UsTUFBQSxVQUFBLEdBQWEsTUFBYixDQUFBO0FBRUEsTUFBQSxJQUFHLG1CQUFtQixDQUFDLE1BQXZCO0FBQ0UsUUFBQSxVQUFBLEdBQWEsUUFBYixDQUFBO0FBQUEsUUFDQSxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVYsQ0FBcUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFoQyxFQUErQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBM0IsQ0FBQSxDQUEvQyxFQUEwRixFQUExRixFQUE4RixFQUE5RixDQURBLENBREY7T0FBQSxNQUFBO0FBSUUsUUFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVYsQ0FBcUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFoQyxFQUE4QyxtQkFBbUIsQ0FBQyxlQUFwQixDQUFBLENBQXFDLENBQUMsWUFBcEYsRUFBa0csRUFBbEcsRUFBc0csRUFBdEcsQ0FBQSxDQUpGO09BSEY7S0FmQTtBQUFBLElBeUJBLHNCQUFBLEdBQXlCLElBQUksQ0FBQyxLQUFMLENBQVcsQ0FBQyxHQUFBLEdBQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBVCxDQUFBLENBQVAsQ0FBQSxHQUEwQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQVQsQ0FBQSxDQUFyRCxDQXpCekIsQ0FBQTtBQTBCQSxTQUFTLCtCQUFULEdBQUE7QUFDRSxNQUFBLGtCQUFBLEdBQXFCLE1BQXJCLENBQUE7QUFFQSxNQUFBLElBQUcsQ0FBQSxJQUFLLHNCQUFSO0FBQ0UsUUFBQSxTQUFBLEdBQVksSUFBSSxDQUFDLEtBQUwsQ0FBVyxDQUFDLHNCQUFBLEdBQXVCLEdBQXhCLENBQUEsR0FBNkIsQ0FBeEMsQ0FBWixDQUFBO0FBQUEsUUFDQSxrQkFBQSxHQUFxQixDQUFDLE1BQUQsRUFBUyxNQUFULEVBQWlCLE1BQWpCLEVBQXlCLE1BQXpCLEVBQWlDLE1BQWpDLEVBQXlDLE1BQXpDLENBQWlELENBQUEsU0FBQSxDQUR0RSxDQURGO09BRkE7QUFBQSxNQU1BLENBQUEsR0FBSSxFQUFBLEdBQUcsQ0FOUCxDQUFBO0FBQUEsTUFPQSxDQUFBLEdBQUksR0FQSixDQUFBO0FBQUEsTUFRQSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVYsQ0FBbUIsa0JBQW5CLEVBQXVDLENBQXZDLEVBQTBDLENBQTFDLENBUkEsQ0FERjtBQUFBLEtBMUJBO0FBQUEsSUF1Q0EsTUFBQSxHQUFTLElBQUksQ0FBQyxLQUFMLENBQVcsQ0FBQyxDQUFDLEVBQUEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQVQsQ0FBQSxDQUFKLENBQUEsR0FBZ0MsRUFBakMsQ0FBQSxHQUFxQyxHQUFoRCxDQXZDVCxDQUFBO0FBd0NBLFNBQVMsb0ZBQVQsR0FBQTtBQUNFLE1BQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFWLENBQW1CLFNBQW5CLEVBQThCLEVBQUEsR0FBRyxDQUFqQyxFQUFvQyxFQUFwQyxDQUFBLENBQUE7QUFBQSxNQUNBLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBVixDQUFtQixTQUFuQixFQUE4QixFQUFBLEdBQUcsQ0FBakMsRUFBb0MsRUFBcEMsQ0FEQSxDQUFBO0FBQUEsTUFFQSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVYsQ0FBbUIsU0FBbkIsRUFBOEIsRUFBQSxHQUFHLENBQWpDLEVBQW9DLEVBQXBDLENBRkEsQ0FERjtBQUFBLEtBeENBO0FBNkNBLFlBQU8sVUFBUDtBQUFBLFdBQ08sTUFEUDtlQUVJLElBQUMsQ0FBQSxhQUFELENBQUEsRUFGSjtBQUFBLFdBR08sUUFIUDtBQUtJLFFBQUEsSUFBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsVUFBM0IsQ0FBQSxDQUFIO2lCQUNFLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVixDQUFxQixJQUFDLENBQUEsU0FBUyxDQUFDLEtBQWhDLEVBQXVDLElBQUMsQ0FBQSxTQUFTLENBQUMsTUFBWCxDQUFBLENBQXZDLEVBQTRELEVBQTVELEVBQWdFLEdBQWhFLEVBREY7U0FMSjtBQUdPO0FBSFAsV0FPTyxXQVBQO2VBUUksSUFBQyxDQUFBLGFBQUQsQ0FBQSxFQVJKO0FBQUEsS0E5Q007RUFBQSxDQWZSO0FBQUEsRUF1RUEsYUFBQSxFQUFlLFNBQUEsR0FBQTtBQUNiLElBQUEsSUFBMEIsSUFBQyxDQUFBLE9BQTNCO0FBQUEsTUFBQSxZQUFBLENBQWEsSUFBQyxDQUFBLE9BQWQsQ0FBQSxDQUFBO0tBQUE7QUFBQSxJQUNBLElBQUMsQ0FBQSxTQUFELEdBQWEsSUFEYixDQUFBO1dBRUEsSUFBQyxDQUFBLE9BQUQsR0FBVyxNQUFNLENBQUMsVUFBUCxDQUFrQixJQUFDLENBQUEsYUFBbkIsRUFBa0MsSUFBbEMsRUFIRTtFQUFBLENBdkVmO0FBQUEsRUE0RUEsYUFBQSxFQUFlLFNBQUEsR0FBQTtXQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQWIsR0FBeUIsTUFEWjtFQUFBLENBNUVmO0FBQUEsRUErRUEsYUFBQSxFQUFlLFNBQUEsR0FBQTtBQUViLFFBQUEsaUhBQUE7QUFBQSxJQUFBLENBQUEsR0FBSSxDQUFKLENBQUE7QUFDQTtBQUFBO1NBQUEsWUFBQTswQkFBQTtBQUNFLE1BQUEsSUFBRyxNQUFBLEdBQVMsQ0FBWjtBQUNFLFFBQUEsU0FBQSxHQUFZLElBQUMsQ0FBQSxTQUFVLENBQUEsSUFBQSxDQUF2QixDQUFBO0FBQUEsUUFFQSxjQUFBLEdBQWlCO0FBQUEsVUFDZixDQUFBLEVBQUcsQ0FBQSxHQUFFLENBQUYsR0FBSSxJQUFDLENBQUEsUUFBUSxDQUFDLENBREY7QUFBQSxVQUVmLENBQUEsRUFBRyxJQUFDLENBQUEsUUFBUSxDQUFDLENBRkU7U0FGakIsQ0FBQTtBQUFBLFFBT0EsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFWLENBQXFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBaEMsRUFBd0MsU0FBUyxDQUFDLFNBQWxELEVBQTZELGNBQWMsQ0FBQyxDQUE1RSxFQUErRSxjQUFjLENBQUMsQ0FBOUYsQ0FQQSxDQUFBO0FBQUEsUUFTQSxjQUFBLEdBQWlCLElBQUksQ0FBQyxLQUFMLENBQVcsTUFBQSxHQUFPLEVBQWxCLENBVGpCLENBQUE7QUFBQSxRQVVBLFVBQUEsR0FBYSxNQUFBLEdBQVMsY0FBQSxHQUFlLEVBVnJDLENBQUE7QUFXQSxhQUFTLG9HQUFULEdBQUE7QUFDRSxVQUFBLEtBQUEsR0FBUSxNQUFSLENBQUE7QUFDQSxVQUFBLElBQWtCLENBQUEsS0FBSyxVQUF2QjtBQUFBLFlBQUEsS0FBQSxHQUFRLE1BQVIsQ0FBQTtXQURBO0FBR0EsVUFBQSxJQUFHLENBQUEsR0FBSSxDQUFQO0FBQ0UsWUFBQSxDQUFBLEdBQUksY0FBYyxDQUFDLENBQWYsR0FBaUIsQ0FBakIsR0FBbUIsQ0FBdkIsQ0FBQTtBQUFBLFlBQ0EsQ0FBQSxHQUFJLGNBQWMsQ0FBQyxDQUFmLEdBQWlCLENBRHJCLENBREY7V0FBQSxNQUdLLElBQUcsQ0FBQSxHQUFJLEVBQVA7QUFDSCxZQUFBLENBQUEsR0FBSSxjQUFjLENBQUMsQ0FBZixHQUFpQixDQUFyQixDQUFBO0FBQUEsWUFDQSxDQUFBLEdBQUksY0FBYyxDQUFDLENBQWYsR0FBaUIsQ0FBakIsR0FBbUIsQ0FBbkIsR0FBcUIsQ0FEekIsQ0FERztXQUFBLE1BR0EsSUFBRyxDQUFBLEdBQUksRUFBUDtBQUNILFlBQUEsQ0FBQSxHQUFJLGNBQWMsQ0FBQyxDQUFmLEdBQWlCLEVBQWpCLEdBQW9CLENBQXhCLENBQUE7QUFBQSxZQUNBLENBQUEsR0FBSSxjQUFjLENBQUMsQ0FBZixHQUFpQixDQURyQixDQURHO1dBQUEsTUFBQTtBQUlILFlBQUEsQ0FBQSxHQUFJLGNBQWMsQ0FBQyxDQUFmLEdBQWlCLENBQXJCLENBQUE7QUFBQSxZQUNBLENBQUEsR0FBSSxjQUFjLENBQUMsQ0FBZixHQUFpQixFQUFqQixHQUFvQixDQUR4QixDQUpHO1dBVEw7QUFBQSxVQWdCQSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVYsQ0FBbUIsS0FBbkIsRUFBMEIsQ0FBMUIsRUFBNkIsQ0FBN0IsQ0FoQkEsQ0FERjtBQUFBLFNBWEE7QUE4QkEsYUFBUyxvSEFBVCxHQUFBO0FBQ0UsVUFBQSxJQUFHLENBQUEsR0FBSSxDQUFQO0FBQ0UsWUFBQSxLQUFBLEdBQVEsU0FBUixDQUFBO0FBQUEsWUFFQSxDQUFBLEdBQUksY0FBYyxDQUFDLENBQWYsR0FBaUIsQ0FBakIsR0FBbUIsQ0FGdkIsQ0FBQTtBQUFBLFlBR0EsQ0FBQSxHQUFJLGNBQWMsQ0FBQyxDQUFmLEdBQWlCLENBSHJCLENBQUE7QUFBQSxZQUtBLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBVixDQUFtQixLQUFuQixFQUEwQixDQUExQixFQUE2QixDQUE3QixDQUxBLENBREY7V0FERjtBQUFBLFNBL0JGO09BQUE7QUFBQSxvQkF3Q0EsQ0FBQSxHQXhDQSxDQURGO0FBQUE7b0JBSGE7RUFBQSxDQS9FZjtDQURGLENBQUE7O0FDQUEsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFULEdBQ0U7QUFBQSxFQUFBLEtBQUEsRUFBTyxTQUFBLEdBQUE7QUFDTCxJQUFBLElBQUMsQ0FBQSxNQUFELEdBQVUsQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLEVBQVAsRUFBVyxFQUFYLENBQVYsQ0FBQTtXQUNBLElBQUMsQ0FBQSxXQUFELEdBQWUsUUFGVjtFQUFBLENBQVA7QUFBQSxFQUlBLE1BQUEsRUFBUSxTQUFDLENBQUQsRUFBSSxDQUFKLEdBQUE7QUFDTixJQUFBLElBQUMsQ0FBQSxDQUFELEdBQUssQ0FBTCxDQUFBO0FBQUEsSUFDQSxJQUFDLENBQUEsQ0FBRCxHQUFLLENBREwsQ0FBQTtXQUdBLElBQUMsQ0FBQSxXQUFELEdBQWUsUUFKVDtFQUFBLENBSlI7QUFBQSxFQVVBLFFBQUEsRUFBVSxTQUFBLEdBQUE7V0FDUixJQUFDLENBQUEsV0FBRCxHQUFlLFFBRFA7RUFBQSxDQVZWO0FBQUEsRUFhQSxHQUFBLEVBQUssU0FBQyxJQUFELEVBQU8sT0FBUCxHQUFBOztNQUFPLFVBQVU7S0FDcEI7QUFBQSxJQUFBLElBQTBCLElBQUMsQ0FBQSxPQUEzQjtBQUFBLE1BQUEsWUFBQSxDQUFhLElBQUMsQ0FBQSxPQUFkLENBQUEsQ0FBQTtLQUFBO0FBRUEsWUFBTyxJQUFQO0FBQUEsV0FDTyxNQURQO0FBQ21CLFFBQUEsSUFBQyxDQUFBLE1BQUQsR0FBVSxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sRUFBUCxFQUFXLEVBQVgsQ0FBVixDQURuQjtBQUNPO0FBRFAsV0FFTyxRQUZQO0FBRXFCLFFBQUEsSUFBQyxDQUFBLE1BQUQsR0FBVSxDQUFDLENBQUQsRUFBSSxFQUFKLEVBQVEsRUFBUixFQUFZLEVBQVosQ0FBVixDQUZyQjtBQUVPO0FBRlAsV0FHTyxPQUhQO0FBR29CLFFBQUEsSUFBQyxDQUFBLE1BQUQsR0FBVSxDQUFDLENBQUQsRUFBSSxFQUFKLEVBQVEsRUFBUixFQUFZLEVBQVosQ0FBVixDQUhwQjtBQUdPO0FBSFAsV0FJTyxPQUpQO0FBSW9CLFFBQUEsSUFBQyxDQUFBLE1BQUQsR0FBVSxDQUFDLENBQUQsRUFBSSxFQUFKLEVBQVEsRUFBUixFQUFZLEVBQVosQ0FBVixDQUpwQjtBQUlPO0FBSlAsV0FLTyxNQUxQO0FBS21CLFFBQUEsSUFBQyxDQUFBLE1BQUQsR0FBVSxDQUFDLENBQUQsRUFBSSxFQUFKLEVBQVEsRUFBUixFQUFZLEVBQVosQ0FBVixDQUxuQjtBQUtPO0FBTFAsV0FNTyxNQU5QO0FBTW1CLFFBQUEsSUFBQyxDQUFBLE1BQUQsR0FBVSxDQUFDLENBQUQsRUFBSSxFQUFKLEVBQVEsRUFBUixFQUFZLEVBQVosQ0FBVixDQU5uQjtBQU1PO0FBTlAsV0FPTyxTQVBQO0FBT3NCLFFBQUEsSUFBQyxDQUFBLE1BQUQsR0FBVSxDQUFDLENBQUQsRUFBSSxFQUFKLEVBQVEsRUFBUixFQUFZLEVBQVosQ0FBVixDQVB0QjtBQUFBLEtBRkE7QUFBQSxJQVdBLElBQUMsQ0FBQSxPQUFELEdBQVcsSUFYWCxDQUFBO1dBWUEsSUFBQyxDQUFBLE9BQUQsR0FBVyxNQUFNLENBQUMsVUFBUCxDQUFrQixJQUFDLENBQUEsSUFBbkIsRUFBeUIsT0FBekIsRUFiUjtFQUFBLENBYkw7QUFBQSxFQTRCQSxJQUFBLEVBQU0sQ0FBQSxTQUFBLEtBQUEsR0FBQTtXQUFBLFNBQUEsR0FBQTthQUNKLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQXRCLEdBQWdDLE1BRDVCO0lBQUEsRUFBQTtFQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0E1Qk47QUFBQSxFQStCQSxNQUFBLEVBQVEsU0FBQSxHQUFBO0FBQ04sUUFBQSxJQUFBO0FBQUEsWUFBTyxJQUFDLENBQUEsV0FBUjtBQUFBLFdBQ08sT0FEUDtBQUVJLFFBQUEsQ0FBQSxHQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBVCxHQUFnQixDQUFwQixDQUFBO0FBQUEsUUFDQSxDQUFBLEdBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFULEdBQWdCLEVBRHBCLENBRko7QUFDTztBQURQLFdBSU8sT0FKUDtBQUtJLFFBQUEsQ0FBQSxHQUFJLElBQUMsQ0FBQSxDQUFMLENBQUE7QUFBQSxRQUNBLENBQUEsR0FBSSxJQUFDLENBQUEsQ0FETCxDQUxKO0FBQUEsS0FBQTtBQVFBLElBQUEsSUFBZ0UsSUFBQyxDQUFBLE9BQWpFO2FBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFWLENBQXFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBaEMsRUFBK0MsSUFBQyxDQUFBLE1BQWhELEVBQXdELENBQXhELEVBQTJELENBQTNELEVBQUE7S0FUTTtFQUFBLENBL0JSO0NBREYsQ0FBQSIsImZpbGUiOiJhcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBCYXNlXG4gIGNvbnN0cnVjdG9yOiAtPlxuICAgIEBmcmFtZSA9IDBcblxuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCBAY2hhbmdlQW5pbWF0aW9uLCA1MDBcblxuICB0aWNrOiAodGlsZSktPlxuXG4gIHNwcml0ZTogLT5cbiAgICBbQGZyYW1lKjgsIDAsIDgsIDhdIFxuXG4gIHNwcml0ZWRldGFpbDogLT5cbiAgICBbMCwgMCwgMTYsIDE2XVxuXG4gIGlzTW92ZWFibGU6IC0+XG4gICAgZmFsc2VcblxuICBjaGFuZ2VBbmltYXRpb246ID0+XG4gICAgaWYgQGZyYW1lID09IDNcbiAgICAgIEBmcmFtZSA9IDBcbiAgICBlbHNlXG4gICAgICBAZnJhbWUgKz0gMVxuXG4gIHNwYWNlUHJvdmlkZWQ6IDMwXG4gIGVuZXJneVByb3ZpZGVkOiA3XG4gIGlzRG9ja2FibGU6IHRydWVcbiIsImNsYXNzIE1pbmVyXG4gIGNvbnN0cnVjdG9yOiAtPlxuICAgIEBmcmFtZSA9IDBcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwgQGNoYW5nZUFuaW1hdGlvbiwgNTAwXG5cbiAgdGljazogKHRpbGUpIC0+XG4gICAgdGlsZS5jbGljayBcImxlZnRcIlxuICAgIHRpbGUuY2xpY2sgXCJsZWZ0XCJcbiAgICB0aWxlLmNsaWNrIFwibGVmdFwiXG4gICAgdGlsZS5jbGljayBcImxlZnRcIlxuXG4gIHNwcml0ZTogLT5cbiAgICBbQGZyYW1lKjgsIDE2LCA4LCA4XSBcblxuICBzcHJpdGVkZXRhaWw6IC0+XG4gICAgWzAsIDE2KjIsIDE2LCAxNl1cblxuICBpc01vdmVhYmxlOiAtPlxuICAgIHRydWVcblxuICBjaGFuZ2VBbmltYXRpb246ID0+XG4gICAgaWYgQGZyYW1lID09IDFcbiAgICAgIEBmcmFtZSA9IDBcbiAgICBlbHNlXG4gICAgICBAZnJhbWUgKz0gMVxuXG4gIHNwYWNlUHJvdmlkZWQ6IDVcbiAgZW5lcmd5UHJvdmlkZWQ6IDBcbiAgaXNEb2NrYWJsZTogZmFsc2VcbiIsImNsYXNzIFNpbG9cbiAgY29uc3RydWN0b3I6IC0+XG4gICAgQGZyYW1lID0gMFxuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCBAY2hhbmdlQW5pbWF0aW9uLCA1MDBcbiAgICBcbiAgdGljazogKHRpbGUpLT5cblxuICBzcHJpdGU6IC0+XG4gICAgW0BmcmFtZSo4LCA4LCA4LCA4XVxuXG4gIHNwcml0ZWRldGFpbDogLT5cbiAgICBbMCwgMTYsIDE2LCAxNl1cblxuICBpc01vdmVhYmxlOiAtPlxuICAgIGZhbHNlXG5cbiAgY2hhbmdlQW5pbWF0aW9uOiA9PlxuICAgIGlmIEBmcmFtZSA9PSAxXG4gICAgICBAZnJhbWUgPSAwXG4gICAgZWxzZVxuICAgICAgQGZyYW1lICs9IDFcblxuICBzcGFjZVByb3ZpZGVkOiAxNVxuICBlbmVyZ3lQcm92aWRlZDogMFxuXG4gIGlzRG9ja2FibGU6IHRydWVcblxuIiwiY2xhc3MgU29sYXJwYW5lbFxuICB0aWNrOiAodGlsZSktPlxuXG4gIHNwcml0ZTogLT5cbiAgICBbMCwgOCozLCA4LCA4XSBcblxuICBzcHJpdGVkZXRhaWw6IC0+XG4gICAgWzAsIDE2KjMsIDE2LCAxNl1cblxuICBpc01vdmVhYmxlOiAtPlxuICAgIGZhbHNlXG5cbiAgc3BhY2VQcm92aWRlZDogMFxuICBlbmVyZ3lQcm92aWRlZDogMTVcbiAgaXNEb2NrYWJsZTogdHJ1ZVxuIiwiY2xhc3MgQW5pbWF0ZWRJdGVtXG4gIGNvbnN0cnVjdG9yOiAob3B0aW9ucykgLT5cbiAgICB7QG1heEZyYW1lcywgQGltYWdlLCBAc3BlZWR9ID0gb3B0aW9uc1xuXG4gICAgQGZyYW1lID0gMFxuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCBAY2hhbmdlQW5pbWF0aW9uLCBAc3BlZWRcblxuICBzcHJpdGU6IC0+XG4gICAgW0BmcmFtZSo4LCAwLCA4LCA4XVxuXG4gIGNoYW5nZUFuaW1hdGlvbjogPT5cbiAgICBpZiBAZnJhbWUgPT0gQG1heEZyYW1lc1xuICAgICAgQGZyYW1lID0gMFxuICAgIGVsc2VcbiAgICAgIEBmcmFtZSArPSAxXG4iLCJjbGFzcyBUaWxlXG4gIGNvbnN0cnVjdG9yOiAocG9zaXRpb24pLT5cbiAgICBAcG9zaXRpb24gPSBwb3NpdGlvblxuICAgIEBsYXllcnMgPSBbXVxuICAgIGZvciByZXN0eXBlLCBpIGluIGFsbFJlc291cmNlVHlwZXMoKVxuICAgICAgQGxheWVycy5wdXNoIG5ldyBUaWxlbGF5ZXIoXG4gICAgICAgIHR5cGU6IHJlc3R5cGUsXG4gICAgICAgIGRlcHRoOiBpLFxuICAgICAgICBhbW91bnQ6IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSphcHAuZ2FtZS5tYXhUaWxlQW1vdW50KSsxXG4gICAgICApXG4gICAgXG4gICAgQGN1cnJlbnRMYXllciA9IDBcbiAgICBAZW1wdHkgPSBmYWxzZVxuICAgIEBlbnRpdHkgPSBudWxsXG4gICAgQGlzQWN0aXZlID0gZmFsc2VcbiAgICBAaXNCdWlsZGFibGUgPSAhKE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxMCkgPT0gNSlcbiAgICBAaXNCdWlsZGFibGUgPSB0cnVlIGlmIEBwb3NpdGlvbiA9PSAyMCo1KzEwXG4gICAgQHJhbmRvbVNlZWQgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqMTApXG5cbiAgY2xpY2s6IChidXR0b24pLT5cbiAgICAjIFNvbWUgdGlsZXMgYXJlIG5vdCBidWlsZGFibGVcbiAgICByZXR1cm4gdW5sZXNzIEBpc0J1aWxkYWJsZVxuXG4gICAgaWYgYnV0dG9uID09IFwibGVmdFwiIGFuZCAhQGVtcHR5XG4gICAgICBpZiAoYXBwLmdhbWUuYXZhaWxhYmxlU2lsb1N0b3JhZ2UoKSAtIGFwcC5nYW1lLnVzZWRTaWxvU3RvcmFnZSgpKSA+IDBcbiAgICAgICAgaWYgQGxheWVyc1tAY3VycmVudExheWVyXS5jb2xsZWN0KClcbiAgICAgICAgICBuYW1lID0gYXBwLmxheWVySW5kZXhUb05hbWUoQGN1cnJlbnRMYXllcilcbiAgICAgICAgICBhcHAuZ2FtZS5yZXNvdXJjZXNbbmFtZV0gKz0gMVxuICAgICAgICBlbHNlXG4gICAgICAgICAgQGN1cnJlbnRMYXllciArPSAxXG5cbiAgICAgICAgICBpZiBAY3VycmVudExheWVyID09IGFsbFJlc291cmNlVHlwZXMoKS5sZW5ndGgtMVxuICAgICAgICAgICAgIyBJZiB3ZSByZWFjaCB0aGUgYm90dG9tLCB0aGUgZW50aXR5IG9uIHRvcCBkaWVzLlxuICAgICAgICAgICAgQGVudGl0eSA9IG51bGxcbiAgICAgICAgICAgIEBlbXB0eSA9IHRydWVcblxuICB0aWNrOiAtPlxuICAgIEBlbnRpdHkudGljayBAIGlmIEBlbnRpdHlcblxuICBtb3ZlSW46IC0+XG4gICAgQGlzQWN0aXZlID0gdHJ1ZVxuXG4gIG1vdmVPdXQ6IC0+XG4gICAgQGlzQWN0aXZlID0gZmFsc2VcblxuICBzZWxlY3Q6IC0+XG4gICAgQGlzU2VsZWN0ZWQgPSB0cnVlXG5cbiAgZGVzZWxlY3Q6IC0+XG4gICAgQGlzU2VsZWN0ZWQgPSBmYWxzZVxuXG4gIGdldEN1cnJlbnRMYXllcjogLT5cbiAgICBAbGF5ZXJzW0BjdXJyZW50TGF5ZXJdXG5cbiAgcmVuZGVyOiAoeCwgeSktPlxuICAgIHRpbGVMYXllciA9IEBnZXRDdXJyZW50TGF5ZXIoKVxuICAgIGFwcC5sYXllci5kcmF3UmVnaW9uIGFwcC5pbWFnZXMubGF5ZXJzLCB0aWxlTGF5ZXIuc3ByaXRlLCB4KjgsIHkqOFxuXG4gICAgdW5sZXNzIEBpc0J1aWxkYWJsZVxuICAgICAgYXBwLmxheWVyLmRyYXdSZWdpb24gYXBwLmltYWdlcy5kZWFkdGlsZXMsIFs4KkByYW5kb21TZWVkLCAwLCA4LCA4XSwgeCo4LCB5KjhcbiAgICAgIHJldHVyblxuXG4gICAgaWYgQGVudGl0eVxuICAgICAgYXBwLmxheWVyLmRyYXdSZWdpb24gYXBwLmltYWdlcy5lbnRpdGllcywgQGVudGl0eS5zcHJpdGUoKSwgeCo4LCB5KjhcblxuICAgIGlmIChAZW50aXR5IGFuZCBAZW50aXR5LmlzTW92ZWFibGUoKSkgb3IgQGlzQWN0aXZlXG4gICAgICAjIERyYXcgdGhlIHN0YXR1cyBpbmRpY2F0b3IuXG4gICAgICBhcHAubGF5ZXIuZHJhd0ltYWdlIGFwcC5pbWFnZXMucHJvZ3Jlc3MsIHgqOCwgeSo4XG4gICAgICBudW1QZXJjZW50ID0gTWF0aC5mbG9vcigodGlsZUxheWVyLmFtb3VudCo2KS9hcHAuZ2FtZS5tYXhUaWxlQW1vdW50KVxuICAgICAgZm9yIGkgaW4gWzAuLm51bVBlcmNlbnRdXG4gICAgICAgIGNvbG9yID0gW1wiI2YwMFwiLCBcIiNhMDBcIiwgXCIjZjYwXCIsIFwiI2FhMFwiLCBcIiMwYTBcIiwgXCIjMGEwXCJdW251bVBlcmNlbnRdXG4gICAgICAgIGNvbG9yID0gW1wiI2YwMFwiLCBcIiNmMDBcIiwgXCIjZjgwXCIsIFwiI2ZmMFwiLCBcIiMwZjBcIiwgXCIjMGYwXCJdW251bVBlcmNlbnRdIGlmIGkgPT0gbnVtUGVyY2VudFxuICAgICAgICBhcHAubGF5ZXIuc2V0UGl4ZWwoY29sb3IsIHgqOCsxK2ksIHkqOCs2KVxuICAgIFxuICAgIGlmIEBpc0FjdGl2ZVxuICAgICAgYXBwLmxheWVyLmRyYXdJbWFnZSBhcHAuaW1hZ2VzLmFjdGl2ZSwgeCo4LCB5KjhcblxuICAgIGlmIEBpc1NlbGVjdGVkICAgIFxuICAgICAgYXBwLmxheWVyLmRyYXdJbWFnZSBhcHAuaW1hZ2VzLnNlbGVjdGVkLCB4KjgsIHkqOFxuXG5cbiIsImNsYXNzIFRpbGVsYXllclxuICBjb25zdHJ1Y3RvcjogKG9wdGlvbnMpLT5cbiAgICB7QHR5cGUsIEBkZXB0aCwgQGFtb3VudH0gPSBvcHRpb25zXG4gICAgQHJhbmRvbUZhY3RvciA9IGdldFJhbmRvbUludCAwLCA0XG4gICAgQHNwcml0ZSA9IFtAcmFuZG9tRmFjdG9yKjgsIEBkZXB0aCo4LCA4LCA4XVxuICAgIEBzcHJpdGVkZXRhaWwgPSBbMCwgQGRlcHRoKjE2LCAxNiwgMTZdXG4gICAgQGh1ZFNwcml0ZSA9IFtAcmFuZG9tRmFjdG9yKjgsIEBkZXB0aCo4LCA0LCA0XVxuXG4gIGNvbGxlY3Q6IC0+XG4gICAgcmV0dXJuIGZhbHNlIGlmIEBhbW91bnQgPT0gMFxuICAgIEBhbW91bnQgLT0gMVxuIiwiZ2V0UmFuZG9tSW50ID0gKG1pbiwgbWF4KSAtPlxuICBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluO1xuXG5hbGxSZXNvdXJjZVR5cGVzID0gLT5cbiAgKGsgZm9yIG93biBrIG9mIGFwcC5nYW1lLnJlc291cmNlcylcblxucG9zVG9UaWxlID0gKHgsIHkpLT5cbiAgYXBwLmdhbWUubWFwW3h5VG9Qb3MoeCwgeSldXG5cbnBvc1RvWFkgPSAocG9zKS0+XG4gIHkgPSBNYXRoLmZsb29yKHBvcy8yMClcbiAgeCA9IHBvcy0oeSoyMClcbiAgW3gsIHldXG5cbnh5VG9Qb3MgPSAoeCwgeSktPlxuICB5KjIwICsgeFxuIiwiYXBwID0gcGxheWdyb3VuZChcbiAgd2lkdGg6IDgqMjAsXG4gIGhlaWdodDogOCoxNSxcbiAgc2NhbGVUb0ZpdDogdHJ1ZSxcbiAgc21vb3RoaW5nOiBmYWxzZSxcblxuICBjcmVhdGU6IC0+XG4gICAgQGxvYWRJbWFnZXMgXCJsYXllcnNcIiwgXCJhY3RpdmVcIiwgXCJwcm9ncmVzc1wiLCBcInNlbGVjdGVkXCIsIFwiZW50aXRpZXNcIiwgXCJodWRcIiwgXCJhY3Rpb25zXCIsIFwic3BlZWNoYnViYmxlc1wiLCBcImRlYWR0aWxlc1wiLCBcImxheWVyZGV0YWlsc1wiLCBcImVudGl0eWRldGFpbHNcIiwgXCJidWlsZGluZm9cIiwgXCJjdXJzb3JcIiwgXCJpbmZvXCIsIFwiZW5kXCIsIFwiaW50cm8xXCIsIFwiaW50cm8yXCIsIFwiaW50cm8zXCIsIFwiaW50cm80XCIsIFwidGl0bGVzY3JlZW5cIlxuICAgIEBjdXJyZW50SG92ZXJlZFRpbGUgPSBuZXcgVGlsZVxuICBcbiAgcmVhZHk6IC0+XG4gICAgQGdhbWUuc3RhcnQoKVxuICAgIEBzZXRTdGF0ZSBAZ2FtZVxuXG4gIHJlbmRlcjogLT5cbiAgICBAbGF5ZXIuY2xlYXIgXCIjMDBmXCJcbiAgICBAZ2FtZS5yZW5kZXIoKVxuXG4gIGxheWVySW5kZXhUb05hbWU6IChpbmRleCktPlxuICAgIHJlc1R5cGVzID0gKGsgZm9yIG93biBrIG9mIEBnYW1lLnJlc291cmNlcylcbiAgICByZXNUeXBlc1tpbmRleF1cbilcbiIsImFwcC5nYW1lID1cbiAgc3RhcnQ6IC0+XG4gICAgZm9yIGkgaW4gWzAuLjIwKjE1LTFdXG4gICAgICBAbWFwW2ldID0gbmV3IFRpbGUoaSlcbiAgICBAbWFwWzIwKjUrMTBdLmVudGl0eSA9IG5ldyBCYXNlXG5cbiAgICBAbW91c2VYID0gMFxuICAgIEBtb3VzZVkgPSAwICAgIFxuICAgIEBjdXJyZW50SG92ZXJlZFRpbGUgPSBuZXcgVGlsZSgtMSlcbiAgICBAY3VycmVudFNlbGVjdGVkVGlsZSA9IG51bGxcblxuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCBAdGljaywgMTAwMFxuICAgIEBodWQuc3RhcnQoKVxuICAgIEBzcGVlY2hidWJibGUuc3RhcnQoKVxuXG4gICAgQGN1dFNjZW5lID0gZmFsc2VcbiAgICBAaW50cm8gPSBmYWxzZVxuICAgIEB0aXRsZVNjcmVlbiA9IHRydWVcblxuICAjIFRPRE86IFJlZmFjdG9yIHRoaXMgd2hvbGUgY3JhcCAuLi4gSSBjYW4ndCBiZWxpdmUgSSBhbSB3cml0aW5nIHRoaXMgLi4uXG4gIHN0YXJ0Q3V0U2NlbmU6IC0+XG4gICAgaWYgQHRpdGxlU2NyZWVuXG4gICAgICBAdGl0bGVTY3JlZW4gPSBmYWxzZVxuICAgICAgQGN1dFNjZW5lID0gdHJ1ZVxuICAgICAgYXBwLmdhbWUuY3V0U2NlbmVJbWFnZSA9IGFwcC5pbWFnZXMuaW50cm8xXG4gICAgICB3aW5kb3cuc2V0VGltZW91dCBhcHAuZ2FtZS5jdXRTY2VuZTIsIDE1MDBcblxuICBjdXRTY2VuZTI6ID0+XG4gICAgYXBwLmdhbWUuY3V0U2NlbmVJbWFnZSA9IGFwcC5pbWFnZXMuaW50cm8yXG4gICAgd2luZG93LnNldFRpbWVvdXQgYXBwLmdhbWUuY3V0U2NlbmUzLCAyMDAwXG5cbiAgY3V0U2NlbmUzOiA9PlxuICAgIGFwcC5nYW1lLmN1dFNjZW5lSW1hZ2UgPSBhcHAuaW1hZ2VzLmludHJvM1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0IGFwcC5nYW1lLmN1dFNjZW5lNCwgMTUwMFxuXG4gIGN1dFNjZW5lNDogPT5cbiAgICBhcHAuZ2FtZS5jdXRTY2VuZUltYWdlID0gYXBwLmltYWdlcy5pbnRybzRcbiAgICB3aW5kb3cuc2V0VGltZW91dCBhcHAuZ2FtZS5jdXRTY2VuZUVuZCwgMTUwMFxuXG4gIGN1dFNjZW5lRW5kOiA9PlxuICAgIGFwcC5nYW1lLmN1dFNjZW5lID0gZmFsc2VcbiAgICBhcHAuZ2FtZS5pbnRybyA9IHRydWVcbiAgICBhcHAuZ2FtZS5zdGFydEludHJvKClcblxuICBzdGFydEludHJvOiAtPlxuICAgIEBzcGVlY2hidWJibGUuc2V0Rml4IDkwLCAyN1xuICAgIEBzcGVlY2hidWJibGUuc2F5ICdoZWxwJywgMjAwMFxuXG4gICAgQHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCBAaW50cm8yLCAzMDAwXG5cbiAgaW50cm8yOiA9PlxuICAgIGFwcC5nYW1lLnNwZWVjaGJ1YmJsZS5zYXkgJ2RhbW4nLCAyMDAwXG4gICAgYXBwLmdhbWUudGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0IGFwcC5nYW1lLmludHJvMywgMzAwMFxuXG4gIGludHJvMzogPT5cbiAgICBhcHAuZ2FtZS5zcGVlY2hidWJibGUuc2F5ICduZWVkJywgMzUwMFxuICAgIGFwcC5nYW1lLnRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCBhcHAuZ2FtZS5pbnRybzQsIDQ1MDBcblxuICBpbnRybzQ6ID0+XG4gICAgYXBwLmdhbWUuc3BlZWNoYnViYmxlLnNheSAnY29sbGVjdCcsIDM1MDBcbiAgICBhcHAuZ2FtZS50aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQgYXBwLmdhbWUuaW50cm9FbmQsIDM1MDBcblxuICBpbnRyb0VuZDogPT5cbiAgICBAaW50cm8gPSBmYWxzZVxuICAgIGFwcC5nYW1lLnNwZWVjaGJ1YmJsZS5zZXRNb3VzZSgpXG5cbiAgcmVuZGVyOiAtPlxuICAgIGlmIEB0aXRsZVNjcmVlblxuICAgICAgYXBwLmxheWVyLmRyYXdJbWFnZSBhcHAuaW1hZ2VzLnRpdGxlc2NyZWVuLCAwLCAwLCAyMCo4LCAxNSo4XG4gICAgICByZXR1cm5cbiAgICAgIFxuICAgIGlmIEBjdXRTY2VuZVxuICAgICAgYXBwLmxheWVyLmRyYXdJbWFnZSBAY3V0U2NlbmVJbWFnZSwgMCwgMCwgMjAqOCwgMTUqOFxuICAgICAgcmV0dXJuXG4gIFxuICAgIGlmIEBnYW1lRW5kQ2hlY2soKVxuICAgICAgYXBwLmxheWVyLmRyYXdJbWFnZSBhcHAuaW1hZ2VzLmVuZCwgMCwgMCwgMjAqOCwgMTUqOFxuICAgICAgcmV0dXJuXG5cbiAgICBmb3IgdGlsZSwgaSBpbiBAbWFwXG4gICAgICB5ID0gTWF0aC5mbG9vcihpLzIwKVxuICAgICAgeCA9IGktKHkqMjApXG4gICAgICB0aWxlLnJlbmRlcih4LCB5KVxuICAgIEBodWQucmVuZGVyKClcbiAgICBAc3BlZWNoYnViYmxlLnJlbmRlcigpXG5cbiAgbW91c2Vkb3duOiAoZXZlbnQpLT5cbiAgICB0aWxlID0gcG9zVG9UaWxlKE1hdGguZmxvb3IoZXZlbnQueC84KSwgTWF0aC5mbG9vcihldmVudC55LzgpKVxuXG4gICAgIyBDYW4ndCBjbGljayBvbiBkZWFkIHRpbGVzXG4gICAgcmV0dXJuIHVubGVzcyB0aWxlIGFuZCB0aWxlLmlzQnVpbGRhYmxlXG4gICAgXG4gICAgaWYgQGlzTW91c2VJblZpZXcgZXZlbnQueC84LCBldmVudC55LzhcbiAgICAgIHN3aXRjaCBldmVudC5idXR0b25cbiAgICAgICAgd2hlbiAnbGVmdCdcbiAgICAgICAgICBpZiBldmVudC54ID4gMTQzIGFuZCBldmVudC54IDwgMTUxIGFuZCBldmVudC55ID4gOTUgYW5kIGV2ZW50LnkgPCAxMDZcbiAgICAgICAgICAgIGFwcC5nYW1lLmh1ZC5zaG93QnVpbGRJbmZvKClcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aWxlLmNsaWNrKGV2ZW50LmJ1dHRvbilcblxuICAgICAgICAgICAgQGN1cnJlbnRTZWxlY3RlZFRpbGUuZGVzZWxlY3QoKSBpZiBAY3VycmVudFNlbGVjdGVkVGlsZVxuICAgICAgICAgICAgdGlsZS5zZWxlY3QoKVxuICAgICAgICAgICAgQGN1cnJlbnRTZWxlY3RlZFRpbGUgPSB0aWxlXG4gICAgICAgIHdoZW4gJ3JpZ2h0J1xuICAgICAgICAgIEBjdXJyZW50U2VsZWN0ZWRUaWxlLmRlc2VsZWN0KCkgaWYgQGN1cnJlbnRTZWxlY3RlZFRpbGVcbiAgICAgICAgICBAY3VycmVudFNlbGVjdGVkVGlsZSA9IG51bGxcblxuICBtb3VzZW1vdmU6IChldmVudCktPlxuICAgIEBtb3VzZVggPSBldmVudC54XG4gICAgQG1vdXNlWSA9IGV2ZW50LnlcblxuICAgIGlmIEBpc01vdXNlSW5WaWV3IGV2ZW50LngsIGV2ZW50LnlcbiAgICAgIHRpbGUgPSBwb3NUb1RpbGUoTWF0aC5mbG9vcihldmVudC54LzgpLCBNYXRoLmZsb29yKGV2ZW50LnkvOCkpXG5cbiAgICAgIGlmIHRpbGVcbiAgICAgICAgaWYgdGlsZSAhPSBAY3VycmVudEhvdmVyZWRUaWxlXG4gICAgICAgICAgdGlsZS5tb3ZlSW4oKVxuICAgICAgICAgIEBjdXJyZW50SG92ZXJlZFRpbGUubW92ZU91dCgpIGlmIEBjdXJyZW50SG92ZXJlZFRpbGVcbiAgICAgICAgICBAY3VycmVudEhvdmVyZWRUaWxlID0gdGlsZVxuICAgIGVsc2VcbiAgICAgIEBjdXJyZW50SG92ZXJlZFRpbGUubW92ZU91dCgpIGlmIEBjdXJyZW50SG92ZXJlZFRpbGVcbiAgICAgIEBjdXJyZW50SG92ZXJlZFRpbGUgPSBudWxsXG5cbiAgaXNNb3VzZUluVmlldzogKG1vdXNlWCwgbW91c2VZKSAtPlxuICAgIGlmIG1vdXNlWCA8IGFwcC53aWR0aCBhbmQgbW91c2VYID49IDAgYW5kIG1vdXNlWSA8IGFwcC5oZWlnaHQgYW5kIG1vdXNlWSA+PSAwXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgZmFsc2VcblxuICBrZXl1cDogKGV2ZW50KSAtPlxuICAgIHN3aXRjaCBldmVudC5rZXlcbiAgICAgIHdoZW4gXCJlbnRlclwiIHRoZW4gQHN0YXJ0Q3V0U2NlbmUoKVxuICAgICAgd2hlbiBcIm1cIiB0aGVuIEBjcmVhdGVNaW5lcigpXG4gICAgICB3aGVuIFwiZVwiIHRoZW4gQGNyZWF0ZVNvbGFycGFuZWwoKVxuICAgICAgd2hlbiBcImlcIiB0aGVuIGFwcC5nYW1lLmh1ZC5zaG93QnVpbGRJbmZvKClcbiAgICAgIHdoZW4gXCJzXCIgdGhlbiBAY3JlYXRlU2lsbygpXG4gICAgICB3aGVuIFwiY1wiIHRoZW4gQGNoZWF0YWgoKVxuICAgICAgd2hlbiBcIjFcIiB0aGVuIEByZWxlYXNlUmVzICdzdGFyZHVzdCdcbiAgICAgIHdoZW4gXCIyXCIgdGhlbiBAcmVsZWFzZVJlcyAnZGlydCdcbiAgICAgIHdoZW4gXCIzXCIgdGhlbiBAcmVsZWFzZVJlcyAnYmVkcm9jaydcbiAgICAgIHdoZW4gXCI0XCIgdGhlbiBAcmVsZWFzZVJlcyAnb3hvZHVtJ1xuICAgICAgd2hlbiBcIjVcIiB0aGVuIEByZWxlYXNlUmVzICdsdWJpbml0J1xuICAgICAgd2hlbiBcIjZcIiB0aGVuIEByZWxlYXNlUmVzICdkYXJrYW5hJ1xuICAgICAgd2hlbiBcIjdcIiB0aGVuIEByZWxlYXNlUmVzICdiaW8nXG4gICAgICB3aGVuIFwiOFwiIHRoZW4gQHJlbGVhc2VSZXMgJ25vdGNoJ1xuICAgICAgd2hlbiBcIjlcIiB0aGVuIEByZWxlYXNlUmVzICdsYXZhJ1xuICAgICAgd2hlbiBcInNwYWNlXCJcbiAgICAgICAgQGN1cnJlbnRTZWxlY3RlZFRpbGUuZGVzZWxlY3QoKSBpZiBAY3VycmVudFNlbGVjdGVkVGlsZVxuICAgICAgICBAY3VycmVudFNlbGVjdGVkVGlsZSA9IG51bGxcblxuICByZWxlYXNlUmVzOiAoc3RyaW5nKSAtPlxuICAgIEByZXNvdXJjZXNbc3RyaW5nXSA9IDBcblxuICB0aWNrOiA9PlxuICAgIHRpbGUudGljaygpIGZvciB0aWxlIGluIGFwcC5nYW1lLm1hcFxuXG4gIGNyZWF0ZU1pbmVyOiAtPlxuICAgIGlmIEBjdXJyZW50U2VsZWN0ZWRUaWxlIGFuZCAhQGN1cnJlbnRTZWxlY3RlZFRpbGUuZW50aXR5XG4gICAgICBpZiBAY2hlY2tSZXNvdXJjZSgnbHViaW5pdCcsIDUsIHRydWUpXG4gICAgICAgIEBjdXJyZW50U2VsZWN0ZWRUaWxlLmVudGl0eSA9IG5ldyBNaW5lclxuICAgICAgZWxzZVxuICAgICAgICBAc3BlZWNoYnViYmxlLnNheSAnbm9yZXMnXG4gICAgZWxzZVxuICAgICAgQHNwZWVjaGJ1YmJsZS5zYXkgJ25vc2VsJ1xuXG4gIGNyZWF0ZVNpbG86IC0+XG4gICAgaWYgQGN1cnJlbnRTZWxlY3RlZFRpbGVcbiAgICAgIGlmIEBjaGVja1Bvc2l0aW9uKEBjdXJyZW50U2VsZWN0ZWRUaWxlKVxuICAgICAgICBpZiBAY2hlY2tSZXNvdXJjZSgnZGlydCcsIDUsIHRydWUpXG4gICAgICAgICAgQGN1cnJlbnRTZWxlY3RlZFRpbGUuZW50aXR5ID0gbmV3IFNpbG9cbiAgICAgICAgZWxzZVxuICAgICAgICAgIEBzcGVlY2hidWJibGUuc2F5ICdub3JlcydcbiAgICAgIGVsc2VcbiAgICAgICAgQHNwZWVjaGJ1YmJsZS5zYXkgJ3Rvb2ZhcidcbiAgICBlbHNlXG4gICAgICBAc3BlZWNoYnViYmxlLnNheSAnbm9zZWwnXG5cbiAgIyBUT0RPOiBPTUcgcmVmYWN0b3IgdGhpcyAuLi5cbiAgY3JlYXRlU29sYXJwYW5lbDogLT5cbiAgICBpZiBAY3VycmVudFNlbGVjdGVkVGlsZVxuICAgICAgaWYgQGNoZWNrUG9zaXRpb24oQGN1cnJlbnRTZWxlY3RlZFRpbGUpXG4gICAgICAgIGlmIEBjaGVja1Jlc291cmNlKCdub3RjaCcsIDMwLCB0cnVlKVxuICAgICAgICAgIEBjdXJyZW50U2VsZWN0ZWRUaWxlLmVudGl0eSA9IG5ldyBTb2xhcnBhbmVsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBAc3BlZWNoYnViYmxlLnNheSAnbm9yZXMnXG4gICAgICBlbHNlXG4gICAgICAgIEBzcGVlY2hidWJibGUuc2F5ICd0b29mYXInXG4gICAgZWxzZVxuICAgICAgQHNwZWVjaGJ1YmJsZS5zYXkgJ25vc2VsJ1xuICAgIFxuICBjaGVja1Jlc291cmNlOiAodHlwZSwgYW1vdW50LCBkcmFpbiA9IGZhbHNlKSAtPlxuICAgIGlmIEByZXNvdXJjZXNbdHlwZV0gPj0gYW1vdW50XG4gICAgICBAcmVzb3VyY2VzW3R5cGVdIC09IGFtb3VudCBpZiBkcmFpblxuICAgICAgcmV0dXJuIHRydWVcbiAgICBmYWxzZVxuXG4gIGNoZWNrUG9zaXRpb246ICh0aWxlKS0+XG4gICAgcmV0dXJuIGZhbHNlIGlmIHRpbGUuZW50aXR5XG5cbiAgICAjIENoZWNrIGFsbCA0IGRpcmVjdGlvbnNcbiAgICBbeCwgeV0gPSBwb3NUb1hZKHRpbGUucG9zaXRpb24pXG5cbiAgICAjIExlZnRcbiAgICByZXR1cm4gdHJ1ZSBpZiBhcHAuZ2FtZS5tYXBbeHlUb1Bvcyh4LTEsIHkpXS5lbnRpdHkgXFxcbiAgICAgIGFuZCBhcHAuZ2FtZS5tYXBbeHlUb1Bvcyh4LTEsIHkpXS5lbnRpdHkuaXNEb2NrYWJsZSBcXFxuICAgICAgYW5kIHggPiAwXG5cbiAgICAjIFJpZ2h0XG4gICAgcmV0dXJuIHRydWUgaWYgYXBwLmdhbWUubWFwW3h5VG9Qb3MoeCsxLCB5KV0uZW50aXR5IFxcXG4gICAgICBhbmQgYXBwLmdhbWUubWFwW3h5VG9Qb3MoeCsxLCB5KV0uZW50aXR5LmlzRG9ja2FibGUgXFxcbiAgICAgIGFuZCB4IDwgMTlcblxuICAgICMgVG9wXG4gICAgcmV0dXJuIHRydWUgaWYgYXBwLmdhbWUubWFwW3h5VG9Qb3MoeCwgeS0xKV0uZW50aXR5IFxcXG4gICAgICBhbmQgYXBwLmdhbWUubWFwW3h5VG9Qb3MoeCwgeS0xKV0uZW50aXR5LmlzRG9ja2FibGUgXFxcbiAgICAgIGFuZCB5ID4gMFxuXG4gICAgIyBCb3R0b21cbiAgICByZXR1cm4gdHJ1ZSBpZiBhcHAuZ2FtZS5tYXBbeHlUb1Bvcyh4LCB5KzEpXS5lbnRpdHkgXFxcbiAgICAgIGFuZCBhcHAuZ2FtZS5tYXBbeHlUb1Bvcyh4LCB5KzEpXS5lbnRpdHkuaXNEb2NrYWJsZSBcXFxuICAgICAgYW5kIHkgPCAxNFxuXG4gICAgZmFsc2VcblxuICBjaGVhdGFoOiAtPlxuICAgIGZvciB0eXBlLCBhbW91bnQgb2YgQHJlc291cmNlc1xuICAgICAgQHJlc291cmNlc1t0eXBlXSA9IDEwMFxuXG4gIG1hcDogW11cbiAgbWluZXJzOiBbXVxuICBtYXhUaWxlQW1vdW50OiA3NVxuXG4gIGF2YWlsYWJsZVNpbG9TdG9yYWdlOiAtPlxuICAgIHNwYWNlID0gMFxuICAgIGZvciB0aWxlIGluIGFwcC5nYW1lLm1hcFxuICAgICAgc3BhY2UgKz0gdGlsZS5lbnRpdHkuc3BhY2VQcm92aWRlZCBpZiB0aWxlLmVudGl0eVxuICAgIHNwYWNlXG5cbiAgdXNlZFNpbG9TdG9yYWdlOiAtPlxuICAgIHNwYWNlID0gMFxuICAgIHNwYWNlICs9IGFtb3VudCBmb3IgcmVzb3VyY2UsIGFtb3VudCBvZiBAcmVzb3VyY2VzXG4gICAgc3BhY2VcblxuICBzb2xhcnBhbmVsQ291bnQ6IC0+XG4gICAgZW5lcmd5ID0gMFxuICAgIGZvciB0aWxlIGluIGFwcC5nYW1lLm1hcFxuICAgICAgIyBGSVhNRTogVGhhdHMgbm90IGEgc2FuZSBzb2x1dGlvbiBoYWhhaGFoIDpEXG4gICAgICBlbmVyZ3kgKz0gMSBpZiB0aWxlLmVudGl0eSBhbmQgdGlsZS5lbnRpdHkuZW5lcmd5UHJvdmlkZWQgPiAxMFxuICAgIGVuZXJneVxuXG4gIGdhbWVFbmRDaGVjazogLT5cbiAgICByZXR1cm4gdHJ1ZSBpZiBAc29sYXJwYW5lbENvdW50KCkgPj0gNFxuICAgIGZhbHNlXG5cbiAgcmVzb3VyY2VzOlxuICAgIHN0YXJkdXN0OiAwXG4gICAgZGlydDogMFxuICAgIGJlZHJvY2s6IDBcbiAgICBveG9kdW06IDBcbiAgICBsdWJpbml0OiAwXG4gICAgZGFya2FuYTogMFxuICAgIGJpbzogMFxuICAgIG5vdGNoOiAwXG4gICAgbGF2YTogMFxuIiwiYXBwLmdhbWUuaHVkID1cbiAgc3RhcnQ6IC0+XG4gICAgcmVzVHlwZXMgPSAoayBmb3Igb3duIGsgb2YgYXBwLmdhbWUucmVzb3VyY2VzKVxuICAgIFxuICAgIEBwb3NpdGlvbiA9IHg6IDQ1LCB5OiAxMDNcbiAgICBAYnVpbGRpbmZvID0gZmFsc2VcblxuICAgIEBpdGVtQXJyb3cgPSBuZXcgQW5pbWF0ZWRJdGVtIG1heEZyYW1lczogMTAsIGltYWdlOiBhcHAuaW1hZ2VzLmFjdGlvbnMsIHNwZWVkOiA1MFxuXG4gICAgQHJlc291cmNlcyA9IFtdXG4gICAgZm9yIHJlc3R5cGUsIGkgaW4gcmVzVHlwZXNcbiAgICAgIEByZXNvdXJjZXNbcmVzdHlwZV0gPSBuZXcgVGlsZWxheWVyKFxuICAgICAgICB0eXBlOiByZXN0eXBlLFxuICAgICAgICBkZXB0aDogaVxuICAgICAgKVxuXG4gIHJlbmRlcjogLT5cbiAgICBwYW5lbHVzYWdlID0gJ3Jlc291cmNlcydcbiAgICBhcHAubGF5ZXIuZHJhd0ltYWdlIGFwcC5pbWFnZXMuaHVkLCAwLCAxMSo4XG5cbiAgICBhcHAubGF5ZXIuZHJhd0ltYWdlIGFwcC5pbWFnZXMuaW5mbywgMTQzLCA5NVxuXG4gICAgIyBjdXJzb3JcbiAgICAjIGFwcC5sYXllci5kcmF3SW1hZ2UgYXBwLmltYWdlcy5jdXJzb3IsIGFwcC5nYW1lLm1vdXNlWCwgYXBwLmdhbWUubW91c2VZXG5cbiAgICBpZiBAYnVpbGRpbmZvXG4gICAgICBhcHAubGF5ZXIuZHJhd1JlZ2lvbiBhcHAuaW1hZ2VzLmJ1aWxkaW5mbywgWzAsIDAsIDEwNiwgMTBdLCAxLCAxXG4gICAgICBhcHAubGF5ZXIuZHJhd1JlZ2lvbiBhcHAuaW1hZ2VzLmJ1aWxkaW5mbywgWzAsIDEwLCAxMDYsIDEwXSwgMSwgMTJcbiAgICAgIGFwcC5sYXllci5kcmF3UmVnaW9uIGFwcC5pbWFnZXMuYnVpbGRpbmZvLCBbMCwgMjAsIDEwNiwgMTBdLCAxLCAyM1xuICAgICAgYXBwLmxheWVyLmRyYXdSZWdpb24gYXBwLmltYWdlcy5idWlsZGluZm8sIFswLCAzMCwgMTA2LCAxMF0sIDEsIDM0XG5cbiAgICBjdXJyZW50U2VsZWN0ZWRUaWxlID0gYXBwLmdhbWUuY3VycmVudFNlbGVjdGVkVGlsZVxuICAgIGlmIGN1cnJlbnRTZWxlY3RlZFRpbGUgIT0gbnVsbFxuICAgICAgcGFuZWx1c2FnZSA9ICd0aWxlJ1xuXG4gICAgICBpZiBjdXJyZW50U2VsZWN0ZWRUaWxlLmVudGl0eVxuICAgICAgICBwYW5lbHVzYWdlID0gJ2VudGl0eSdcbiAgICAgICAgYXBwLmxheWVyLmRyYXdSZWdpb24gYXBwLmltYWdlcy5lbnRpdHlkZXRhaWxzLCBjdXJyZW50U2VsZWN0ZWRUaWxlLmVudGl0eS5zcHJpdGVkZXRhaWwoKSwgMTIsIDk1XG4gICAgICBlbHNlXG4gICAgICAgIGFwcC5sYXllci5kcmF3UmVnaW9uIGFwcC5pbWFnZXMubGF5ZXJkZXRhaWxzLCBjdXJyZW50U2VsZWN0ZWRUaWxlLmdldEN1cnJlbnRMYXllcigpLnNwcml0ZWRldGFpbCwgMTIsIDk1XG5cbiAgICAjIHNpbG8gY2FwYWNpdHlcbiAgICB1c2VkU2lsb1N0b3JhZ2VQZXJjZW50ID0gTWF0aC5yb3VuZCgoMTAwIC8gYXBwLmdhbWUuYXZhaWxhYmxlU2lsb1N0b3JhZ2UoKSkgKiBhcHAuZ2FtZS51c2VkU2lsb1N0b3JhZ2UoKSlcbiAgICBmb3IgZiBpbiBbMC4uMTAwXVxuICAgICAgcmVzb3VyY2VQYW5lbENvbG9yID0gXCIjMzMzXCJcblxuICAgICAgaWYgZiA8PSB1c2VkU2lsb1N0b3JhZ2VQZXJjZW50XG4gICAgICAgIGNvbG9yU3RlcCA9IE1hdGgucm91bmQoKHVzZWRTaWxvU3RvcmFnZVBlcmNlbnQvMTAwKSo1KVxuICAgICAgICByZXNvdXJjZVBhbmVsQ29sb3IgPSBbXCIjMGEwXCIsIFwiIzBhMFwiLCBcIiNhYTBcIiwgXCIjZjYwXCIsIFwiI2EwMFwiLCBcIiNmMDBcIl1bY29sb3JTdGVwXVxuXG4gICAgICB4ID0gNDQrZlxuICAgICAgeSA9IDExMlxuICAgICAgYXBwLmxheWVyLnNldFBpeGVsKHJlc291cmNlUGFuZWxDb2xvciwgeCwgeSlcblxuICAgICMgRW5lcmd5IHByb2R1Y3Rpb24gKDQ3KVxuICAgIFxuICAgIGxlbmd0aCA9IE1hdGgucm91bmQoKCgyNSphcHAuZ2FtZS5zb2xhcnBhbmVsQ291bnQoKSkqNDUpLzEwMClcbiAgICBmb3IgaSBpbiBbMC4ubGVuZ3RoXVxuICAgICAgYXBwLmxheWVyLnNldFBpeGVsKFwiIzIyOGNhNVwiLCA0OStpLCA5MSlcbiAgICAgIGFwcC5sYXllci5zZXRQaXhlbChcIiM4ZGRhZWRcIiwgNTAraSwgOTIpXG4gICAgICBhcHAubGF5ZXIuc2V0UGl4ZWwoXCIjMjI4Y2E1XCIsIDQ5K2ksIDkzKVxuXG4gICAgc3dpdGNoIHBhbmVsdXNhZ2VcbiAgICAgIHdoZW4gJ3RpbGUnXG4gICAgICAgIEBzaG93UmVzb3VyY2VzKClcbiAgICAgIHdoZW4gJ2VudGl0eSdcbiAgICAgICAgI2FwcC5sYXllci5kcmF3UmVnaW9uIGFwcC5pbWFnZXMuZW50aXRpZXMsIGN1cnJlbnRTZWxlY3RlZFRpbGUuZW50aXR5LnNwcml0ZSgpLCA0NCwgMTAyXG4gICAgICAgIGlmIGN1cnJlbnRTZWxlY3RlZFRpbGUuZW50aXR5LmlzTW92ZWFibGUoKVxuICAgICAgICAgIGFwcC5sYXllci5kcmF3UmVnaW9uIEBpdGVtQXJyb3cuaW1hZ2UsIEBpdGVtQXJyb3cuc3ByaXRlKCksIDQ0LCAxMDJcbiAgICAgIHdoZW4gJ3Jlc291cmNlcydcbiAgICAgICAgQHNob3dSZXNvdXJjZXMoKVxuXG4gIHNob3dCdWlsZEluZm86IC0+XG4gICAgY2xlYXJUaW1lb3V0KEB0aW1lb3V0KSBpZiBAdGltZW91dFxuICAgIEBidWlsZGluZm8gPSB0cnVlXG4gICAgQHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCBAaGlkZUJ1aWxkSW5mbywgNjAwMFxuXG4gIGhpZGVCdWlsZEluZm86IC0+XG4gICAgYXBwLmdhbWUuaHVkLmJ1aWxkaW5mbyA9IGZhbHNlXG5cbiAgc2hvd1Jlc291cmNlczogLT5cbiAgICAjIHJlc291cmNlc1xuICAgIGkgPSAwXG4gICAgZm9yIHR5cGUsIGFtb3VudCBvZiBhcHAuZ2FtZS5yZXNvdXJjZXNcbiAgICAgIGlmIGFtb3VudCA+IDBcbiAgICAgICAgdGlsZUxheWVyID0gQHJlc291cmNlc1t0eXBlXVxuXG4gICAgICAgIHNwcml0ZVBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IGkqOStAcG9zaXRpb24ueFxuICAgICAgICAgIHk6IEBwb3NpdGlvbi55XG4gICAgICAgIH1cblxuICAgICAgICBhcHAubGF5ZXIuZHJhd1JlZ2lvbiBhcHAuaW1hZ2VzLmxheWVycywgdGlsZUxheWVyLmh1ZFNwcml0ZSwgc3ByaXRlUG9zaXRpb24ueCwgc3ByaXRlUG9zaXRpb24ueVxuXG4gICAgICAgIGFtb3VudEJ5VHdlbnR5ID0gTWF0aC5mbG9vcihhbW91bnQvMjApXG4gICAgICAgIGFtb3VudExlZnQgPSBhbW91bnQgLSBhbW91bnRCeVR3ZW50eSoyMFxuICAgICAgICBmb3IgZSBpbiBbMC4uYW1vdW50TGVmdF1cbiAgICAgICAgICBjb2xvciA9IFwiIzBhMFwiXG4gICAgICAgICAgY29sb3IgPSBcIiMwZjBcIiBpZiBlID09IGFtb3VudExlZnRcblxuICAgICAgICAgIGlmIGUgPCA2XG4gICAgICAgICAgICB4ID0gc3ByaXRlUG9zaXRpb24ueC0xK2VcbiAgICAgICAgICAgIHkgPSBzcHJpdGVQb3NpdGlvbi55LTFcbiAgICAgICAgICBlbHNlIGlmIGUgPCAxMFxuICAgICAgICAgICAgeCA9IHNwcml0ZVBvc2l0aW9uLngrNFxuICAgICAgICAgICAgeSA9IHNwcml0ZVBvc2l0aW9uLnktMStlLTVcbiAgICAgICAgICBlbHNlIGlmIGUgPCAxNVxuICAgICAgICAgICAgeCA9IHNwcml0ZVBvc2l0aW9uLngrMTQtZVxuICAgICAgICAgICAgeSA9IHNwcml0ZVBvc2l0aW9uLnkrNFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHggPSBzcHJpdGVQb3NpdGlvbi54LTFcbiAgICAgICAgICAgIHkgPSBzcHJpdGVQb3NpdGlvbi55KzE5LWVcblxuICAgICAgICAgIGFwcC5sYXllci5zZXRQaXhlbChjb2xvciwgeCwgeSlcblxuICAgICAgICBmb3IgZiBpbiBbMC4uYW1vdW50QnlUd2VudHldXG4gICAgICAgICAgaWYgZiA+IDBcbiAgICAgICAgICAgIGNvbG9yID0gXCIjMDAwMGZmXCJcblxuICAgICAgICAgICAgeCA9IHNwcml0ZVBvc2l0aW9uLngtMitmXG4gICAgICAgICAgICB5ID0gc3ByaXRlUG9zaXRpb24ueSs3XG5cbiAgICAgICAgICAgIGFwcC5sYXllci5zZXRQaXhlbChjb2xvciwgeCwgeSlcblxuICAgICAgaSsrXG4iLCJhcHAuZ2FtZS5zcGVlY2hidWJibGUgPVxuICBzdGFydDogLT5cbiAgICBAc3ByaXRlID0gWzAsIDAsIDI3LCAxM11cbiAgICBAcG9zaXRpb25pbmcgPSAnbW91c2UnXG5cbiAgc2V0Rml4OiAoeCwgeSkgLT5cbiAgICBAeCA9IHhcbiAgICBAeSA9IHlcblxuICAgIEBwb3NpdGlvbmluZyA9ICdmaXhlZCdcblxuICBzZXRNb3VzZTogLT5cbiAgICBAcG9zaXRpb25pbmcgPSAnbW91c2UnXG5cbiAgc2F5OiAodGV4dCwgdGltZW91dCA9IDEwMDApIC0+XG4gICAgY2xlYXJUaW1lb3V0KEB0aW1lb3V0KSBpZiBAdGltZW91dFxuXG4gICAgc3dpdGNoIHRleHRcbiAgICAgIHdoZW4gJ2hlbHAnIHRoZW4gQHNwcml0ZSA9IFswLCAwLCAyNywgMTNdXG4gICAgICB3aGVuICd0b29mYXInIHRoZW4gQHNwcml0ZSA9IFswLCAxMywgOTAsIDEzXVxuICAgICAgd2hlbiAnbm9yZXMnIHRoZW4gQHNwcml0ZSA9IFswLCAyNiwgOTAsIDEzXVxuICAgICAgd2hlbiAnbm9zZWwnIHRoZW4gQHNwcml0ZSA9IFswLCAzOSwgOTAsIDEzXVxuICAgICAgd2hlbiAnZGFtbicgdGhlbiBAc3ByaXRlID0gWzAsIDUyLCA5MCwgMTNdXG4gICAgICB3aGVuICduZWVkJyB0aGVuIEBzcHJpdGUgPSBbMCwgNjUsIDkwLCAxM11cbiAgICAgIHdoZW4gJ2NvbGxlY3QnIHRoZW4gQHNwcml0ZSA9IFswLCA3OCwgOTAsIDEzXVxuXG4gICAgQHZpc2libGUgPSB0cnVlXG4gICAgQHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCBAaGlkZSwgdGltZW91dFxuXG4gIGhpZGU6ID0+XG4gICAgYXBwLmdhbWUuc3BlZWNoYnViYmxlLnZpc2libGUgPSBmYWxzZVxuXG4gIHJlbmRlcjogLT5cbiAgICBzd2l0Y2ggQHBvc2l0aW9uaW5nXG4gICAgICB3aGVuICdtb3VzZSdcbiAgICAgICAgeCA9IGFwcC5nYW1lLm1vdXNlWCs1XG4gICAgICAgIHkgPSBhcHAuZ2FtZS5tb3VzZVktMTVcbiAgICAgIHdoZW4gJ2ZpeGVkJ1xuICAgICAgICB4ID0gQHhcbiAgICAgICAgeSA9IEB5XG5cbiAgICBhcHAubGF5ZXIuZHJhd1JlZ2lvbiBhcHAuaW1hZ2VzLnNwZWVjaGJ1YmJsZXMsIEBzcHJpdGUsIHgsIHkgaWYgQHZpc2libGUiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=