; var StockChart = function (options) {
this.defVal = {
containerId: 'chart_container',
data: [],
PricePreviousClose: null,
style: {},
backgroundColor: 'white',
stroke: 'gray',
strokeWidth: 1,
fill: 'steelblue',
fillOpacity: '0.85',
};
var defStyle = {
fontFamily: 'Segoe UI',
fontSize: '20px',
fontWeight: 'bold',
fill: '#424444',
};
this.opts = $.extend({}, this.defVal, options);
this.opts.style = $.extend({}, defStyle, this.opts.style);
makeSVG = function (tag, attrs) {
var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
for (var k in attrs)
el.setAttribute(k, attrs[k]);
return el;
}
};
StockChart.prototype = {
draw: function () {
$("#" + this.opts.containerId).empty();
if (!this.opts.data) {
$("#" + this.opts.containerId).hide();
return;
}
if (!this.opts.data.map) {
$("#" + this.opts.containerId).hide();
return;
}
// get the max price from data array
var max = Math.max.apply(Math, this.opts.data.map(function (o) { return o.P; }));
if (this.opts.PricePreviousClose && this.opts.PricePreviousClose > max) max = this.opts.PricePreviousClose;
// get the min price from data array
var min = Math.min.apply(Math, this.opts.data.map(function (o) { return o.P; }));
if (this.opts.PricePreviousClose && this.opts.PricePreviousClose < min) min = this.opts.PricePreviousClose;
// actual min value in scale Y
var minAxisY = parseFloat(min) - 0.1;// * 0.9;
// actual max value in scale Y
var maxAxisY = parseFloat(max) + 0.1;// * 1.1;
var startPointX = 90; // the trended line default start point X
var startPointY = 205; // the trended line default start point Y
var margin = 20; // the whole chart margin value, four margin values are same
var topY = margin + 25; // the top Y axis line point Y
var defWidth = 430; // the whole chart default width
var defHeight = 230; // the whole chart default height
var totalMinutes = 390; //9:30 am through 16:00 pm, a total of 390 minutes.
var xLength = defWidth - (margin * 2); // axis width
var yLength = startPointY - topY; // axis length
var xScale = (xLength - startPointX + margin) / totalMinutes; // X scale value
var yScale = parseFloat(yLength / (maxAxisY - minAxisY)).toFixed(2); // Y scale value
var todayDate = this.opts.data[0].T;
todayDate = new Date(todayDate.replace(/ /g, "T"));
var startTime = new Date(todayDate.getFullYear(), todayDate.getMonth(), todayDate.getDate(), 9, 30, 0, 0); // the default start time is 9:30 am
var xStart = startPointX + (todayDate - startTime) / 1000 / 60 * xScale; // calculate the trended line actual start point X
var containerWidth = $("#" + this.opts.containerId).width();
if (containerWidth == 0)
containerWidth = defWidth;
// append svg element
var svg;
if (!!window.ActiveXObject || "ActiveXObject" in window) {
svg = makeSVG('svg', {
width: defWidth * containerWidth / defWidth,
height: defHeight * containerWidth / defWidth,
viewBox: '0 0 ' + defWidth * containerWidth / defWidth + ' 0', focusable: 'false'
/*preserveAspectRatio: 'xMidYMin meet'*/
});
}
else {
svg = makeSVG('svg', {
/*width: defWidth * containerWidth / defWidth,
height: defHeight * containerWidth / defWidth,*/
viewBox: '0 0 ' + defWidth * containerWidth / defWidth + ' ' + defHeight * containerWidth / defWidth, focusable: 'false'
/*preserveAspectRatio: 'xMidYMin meet'*/
});
}
document.getElementById(this.opts.containerId).appendChild(svg);
$(svg).attr("aria-labelledby", "title desc").attr("role", "img");
$(this.opts.style).each(function (i, n) {
$(svg).css(this, n);
});
//append title element in svg
var gtitle = makeSVG('title', { id: 'title' });
gtitle.textContent = "MSFT stock day chart showing stock value at various times";
svg.appendChild(gtitle);
//append desc element in svg
var gdesc = makeSVG('desc', { id: 'desc' });
var strdesc = "";
var hours = 0;
var mins = 0;
for (var i = 0; i < this.opts.data.length; i++) {
var dateTemp = new Date(this.opts.data[i].T.replace(/ /g, "T"));
hours = dateTemp.getHours();
mins = dateTemp.getMinutes();
if (hours == 10 && mins == 0) { strdesc += "At 10am, stock value is " + this.opts.data[i].P; }
if (hours == 12 && mins == 0) { strdesc += ", At 12pm, stock value is " + this.opts.data[i].P; }
if (hours == 14 && mins == 0) { strdesc += ", At 2pm, stock value is " + this.opts.data[i].P; }
if (hours == 16 && mins == 0) { strdesc += ", At 4pm, stock value is " + this.opts.data[i].P; }
}
gdesc.textContent = strdesc;
svg.appendChild(gdesc);
// append gPath element in svg
var gPath = makeSVG('g', { id: this.opts.containerId + '_gPath', transform: 'scale(' + containerWidth / defWidth + ')' });
svg.appendChild(gPath);
// append rect element in gPath
gPath.appendChild(makeSVG('rect', {
x: 0,
y: 0,
width: defWidth,
height: defHeight,
fill: this.opts.backgroundColor
}));
// append Y axis line at top in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: topY,
x2: defWidth - margin + 0.5,
y2: topY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append Y axis line at middle in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: (startPointY - topY) / 2 + topY,
x2: defWidth - margin + 0.5,
y2: (startPointY - topY) / 2 + topY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append Y axis line at bottom in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: startPointY,
x2: defWidth - margin + 0.5,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 1 in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX,
y1: topY,
x2: startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 2 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 30 + startPointX,
y1: topY,
x2: xScale * 30 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 3 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 150 + startPointX,
y1: topY,
x2: xScale * 150 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 4 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 270 + startPointX,
y1: topY,
x2: xScale * 270 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 5 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 390 + startPointX,
y1: topY,
x2: xScale * 390 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append Y scale label at bottom in gPath
var textY1 = makeSVG('text', {
x: margin - 10,
y: startPointY - 1,
id: this.opts.containerId + '_y0'
});
textY1.textContent = "$" + minAxisY.toFixed(2);
gPath.appendChild(textY1);
// append Y scale label at middle in gPath
var textY2 = makeSVG('text', {
x: margin - 10,
y: (startPointY - topY) / 2 + topY - 1,
id: this.opts.containerId + '_y1'
});
textY2.textContent = "$" + (minAxisY + (maxAxisY - minAxisY) / 2).toFixed(2);
gPath.appendChild(textY2);
// append gTxt element in gPath
var gTxt = makeSVG('g', { id: this.opts.containerId + '_gTxt' });
gPath.appendChild(gTxt);
// append X scale label 1 in gTxt
var textX1 = makeSVG('text', {
x: xScale * 30 + startPointX - 20,
y: margin + 15
});
//textX1.textContent = (todayDate).getShortMonthName() + todayDate.getDate();
textX1.textContent = "10am";
gTxt.appendChild(textX1);
// append X scale label 2 in gTxt
var textX2 = makeSVG('text', {
x: xScale * 150 + startPointX - 20,
y: margin + 15
});
textX2.textContent = "12pm";
gTxt.appendChild(textX2);
// append X scale label 3 in gTxt
var textX3 = makeSVG('text', {
x: xScale * 270 + startPointX - 20,
y: margin + 15
});
textX3.textContent = "2pm";
gTxt.appendChild(textX3);
// append X scale label 4 in gTxt
var textX4 = makeSVG('text', {
x: xScale * 390 + startPointX - 35,
y: margin + 15
});
textX4.textContent = "4pm";
gTxt.appendChild(textX4);
$('text').attr("aria-hidden", "true");
var d = "M" + xStart + "," + startPointY;
var x, y;
for (var i = 0, ci; ci = this.opts.data[i]; i++) {
if (typeof ci !== 'undefined') {
var currTime = isSafari() ? toJSDate(ci.T) : new Date(ci.T);
var duration = (currTime - todayDate) / 1000 / 60;
x = (parseFloat(xStart + xScale * duration));
y = startPointY - parseFloat((ci.P - minAxisY) * yScale).toFixed(2);
d = d + "L" + x + "," + y;
}
}
d = d + "L" + x + "," + startPointY + " Z";
// append path element in gPath
gPath.appendChild(makeSVG('path',
{
id: this.opts.containerId + '_area',
d: d,
fill: this.opts.fill,
"fill-opacity": this.opts.fillOpacity
}));
if (this.opts.PricePreviousClose) {
// append ycp orange line
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: startPointY - parseFloat((this.opts.PricePreviousClose - minAxisY) * yScale).toFixed(2),
x2: defWidth - margin + 0.5,
y2: startPointY - parseFloat((this.opts.PricePreviousClose - minAxisY) * yScale).toFixed(2),
stroke: '#FF8C00',
"stroke-dasharray": "4,4",
"stroke-width": this.opts.strokeWidth + 1
}));
}
}
};
Date.prototype.monthNames = [
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
];
Date.prototype.getMonthName = function () {
return this.monthNames[this.getMonth()];
};
Date.prototype.getShortMonthName = function () {
return this.getMonthName().substr(0, 3);
};
function isSafari() {
var is_safari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
return is_safari;
}
function toJSDate(dateTime) {
var dateTimeArr = dateTime.split(" ");//dateTime[0] = date, dateTime[1] = time
var date = dateTimeArr[0].split("-");
var time = dateTimeArr[1].split(":");
return new Date(date[0], date[1], date[2], time[0], time[1], time[2], 0);
}
function compareNine(value) {
return value > 9 ? value : '0' + value;
};
function addMins(date, min) {
return new Date(date.setMinutes(date.getMinutes() + min));
};
function toFixedNumber(v, fraction, unit) {
var numClear = v.toString().replace(/$/g, '').replace(/,/g, '');
var num = Number(numClear);
if (isNaN(num)) return v == '???' ? 'NA' : v;
else if (num == 0) return 0;
var p = 1;
var unitPost = unit == undefined ? '' : unit;
if (unit != undefined && unit.toLowerCase() == 'mil') p = 1000000;
else if (unit != undefined && unit.toLowerCase() == 'bil') p = 1000000000;
return (num / p).toFixed(fraction) + ' ' + unitPost;
};
function toFixedDatetime(d, t, foramtStr, timezone) {
var arrDateParts = d.split("-");
if (arrDateParts.length == 3) {
var dayNum = arrDateParts[0];
var monthNum = arrDateParts[1];
var yearNum = arrDateParts[2];
var D = new Date(monthNum.concat("/", dayNum, "/", yearNum, ' ', t));
return D.Format(foramtStr) + ' - ' + timezone;
}
return (new Date(d.concat(' ', t))).Format(foramtStr) + ' - ' + timezone;
};
function toFixedDatetimeSec(t, foramtStr, timezone) {
var arrDateParts = t.split("-");
if (arrDateParts.length == 3) {
t = new Date(t.replace(/ /g, "T"));
return t.Format(foramtStr) + ' - ' + timezone;
}
return (new Date(t.replace(/ /g, "T"))).Format(foramtStr) + ' - ' + timezone;
};
function toFixed(number, precision) {
var b = 1;
if (isNaN(number)) return number;
if (number < 0) b = -1;
var multiplier = Math.pow(10, precision);
return Math.round(Math.abs(number) * multiplier) / multiplier * b;
};
String.prototype.replaceAll = function (s1, s2) {
return this.replace(new RegExp(s1, "gm"), s2);
};
Date.prototype.Format = function (fmt) {
var that = this;
var postfix = false;
var o = {
"M+": this.getMonth() + 1, //month
"d+": this.getDate(), //day
"h+": function () {
return postfix ? (that.getHours() % 12 == 0 ? 12 : that.getHours() % 12) : that.getHours();
}, //hour
"m+": this.getMinutes(), //minute
"s+": this.getSeconds(), //second
"q+": Math.floor((this.getMonth() + 3) / 3), //quarter
"S": this.getMilliseconds() //millisecond
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
if (RegExp.$1.length == 1 && RegExp.$1 == "h") postfix = true;
var val = typeof (o[k]) == "function" ? o[k].apply(this) : o[k];
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (val) : (("00" + val).substr(("" + val).length)));
}
}
return fmt + (postfix ? ((this.getHours() < 12) ? " AM" : " PM") : "");
};
function getStockData(data, chartData, varMarketCap) {
if (data.valueM.length == 0) return;
var dataitem = data.valueM[0];
var last = dataitem.price;
var change = dataitem.priceChange;
var percentchange = dataitem.priceChangePercent;
var volume = dataitem.accumulatedVolume;
var cap = varMarketCap * last;
var yearhigh = dataitem.price52wHigh;
var yearlow = dataitem.price52wLow;
var timeoflastsale = (chartData.Series != null && typeof chartData.Series.EndTime !== 'undefined') ? chartData.Series.EndTime : dataitem.datePreviousClose;
var percentChangeClass = ' ';
$('.MicrosoftCorp_last').html("$" + toFixedNumber(last, 2));
var num_change = Number(change);
var external_change = toFixed(num_change, 2);
var external_percentchange = toFixed(Number(percentchange.toString().replace('%', '')), 2);
if (!isNaN(external_change)) external_change = external_change > 0 ? ('+$' + external_change) : ('-$' + Math.abs(external_change));
if (!isNaN(external_percentchange)) external_percentchange = external_percentchange > 0 ? ('+' + external_percentchange + '%') : (external_percentchange + '%');
if (!isNaN(num_change) && num_change < 0) percentChangeClass = ' class="MicrosoftCorp_percentChange"';
else if (isNaN(num_change) || num_change == 0) percentChangeClass = ' class="MicrosoftCorp_percentChange_none"';
$('.MicrosoftCorp_Change').html('' + external_change + ' (' + external_percentchange + ')');
$('.MicrosoftCorp_price>a').css("display", "inline-block").attr("aria-label", "Microsoft current price is " + toFixedNumber(last, 2) + "dollars, Today's change is " + external_change + ", or " + external_percentchange + " points.").attr("title", "click to stock detail page");
$('.MicrosoftCorp_volume').html(toFixedNumber(volume, 2, 'Mil'));
$('.MicrosoftCorp_cap').html(toFixedNumber(cap, 2, 'Bil'));
$('.MicrosoftCorp_yearhigh').html(toFixedNumber(yearhigh, 2));
$('.MicrosoftCorp_yearlow').html(toFixedNumber(yearlow, 2));
$('.MicrosoftCorp_footer_time').html('Quotes delayed by up to 15 minutes.' + '
' + ' Price Quote as of ' + toFixedDatetimeSec(timeoflastsale, "M/dd/yyyy h:mm:ss", 'ET. Supplied by LSEG Data & Analytics'));
$('.MicrosoftCorp_footer_time').attr("aria-label", 'Quotes delayed by up to 15 minutes. Price Quote as of ' + toFixedDatetimeSec(timeoflastsale, "M/dd/yyyy h:mm:ss", 'ET'));
};
function getStockChart(data) {
if (data.length == 0 || typeof data.Series == 'undefined' || data.Series == null) return;
var _data = [];
var startTime = data.Series.PT[0].T;
for (var i = 0, ci; ci = data.Series.PT[i]; i++) {
_data.push({
P: ci.P,
T: i == 0 ? startTime : ci.T
});
}
$('.stock-chart-container').each(function (i) {
var _id = "stock-chart-container-" + i.toString();
$(this).attr("id", _id);
try {
var stockChart = new StockChart({
containerId: _id,
fill: '#5f5f5f',
style: {
fontSize: '18px',
fill: '#424444',
fontWeight: 'normal'
},
data: _data,
PricePreviousClose: data.PricePreviousClose
});
stockChart.draw();
}
catch (err) {
console.info(err.message);
$(this).hide();
}
});
//});
};
function buildChart(strChart, strQuote, strOutstanding) {
if (strChart != "") {
var dataChart = JSON.parse(decodeURIComponent(strChart));
getStockChart(dataChart);
}
if (strQuote != "") {
var dataQuote = JSON.parse(decodeURIComponent(strQuote));
getStockData(dataQuote, dataChart, strOutstanding);
}
if (!strChart) {
strChart = "{\"id\":\"Chart1D1M:a1xzim\",\"PreHoursSeries\":null,\"AfterHoursSeries\":null,\"Series\":{\"PT\":[{\"P\": \"\" ,\"T\":\"\"}],\"StartTime\":\"\",\"EndTime\":\"\"},\"PricePreviousClose\":\"\",\"ChartType\":\"1D1M\",\"ExchangeId\":\"r6dwop\",\"ExchangeCode\":\"XNAS\", " + "\"ExchangeName\":\"Nasdaq Stock Market\",\"OfferingStatus\":\"regular\",\"DisplayName\":\"Microsoft Corp\",\"ShortName\":\"Microsoft\",\"SecurityType\":\"stock\",\"InstrumentId\":\"a1xzim\",\"Symbol\":\"MSFT\",\"Country\":\"US\",\"Market\":\"en-us\","
+ "\"LocalizedAttributes\":{\"enus\":null},\"TimeLastUpdated\":\"\",\"Currency\":\"USD\",\"_p\":\"a1xzim\",\"_t\":\"Chart\",\"_etag\":\"\",\"_rid\":\"\",\"_self\":\"\",\"_attachments\":null,\"_ts\":1580839600}";
dataChart = JSON.parse(strChart);
getStockChart(dataChart);
$("#stock-chart-container-0_y0").text("$");
$("#stock-chart-container-0_y1").text("$");
}
if (!strQuote) {
$(".MicrosoftCorp_volume").html(" ");
$(".MicrosoftCorp_cap").html(" ");
$(".MicrosoftCorp_yearhigh").html(" ");
$(".MicrosoftCorp_yearlow").html(" ");
$('.MicrosoftCorp_footer_time').html('Stock quotes are delayed and will be displayed soon. Supplied by LSEG Data & Analytics');
}
/*setInterval(function () {
getStockChart(dataChart);
getStockData(dataQuote,dataChart);
}, "300000");*/
$(window).resize(function () {
if (!!window.ActiveXObject || "ActiveXObject" in window) {
var defWidth = 430; // the whole chart default width
var defHeight = 230; // the whole chart default height
var containerWidth = $(".IRStock .stock-chart-container").width();
if (containerWidth == 0)
containerWidth = defWidth;
var width = defWidth * containerWidth / defWidth;
var height = defHeight * containerWidth / defWidth;
var viewbox = '0 0 ' + defWidth * containerWidth / defWidth + ' 0';
$(".IRStock .stock-chart-container svg").attr("width", width).attr("height", height);
document.querySelector(".IRStock .stock-chart-container svg").setAttribute('viewBox', viewbox);
document.querySelector(".IRStock .stock-chart-container svg g").setAttribute('transform', 'scale(' + containerWidth / defWidth + ')');
}
});
}
// SIG // Begin signature block
// SIG // MIIougYJKoZIhvcNAQcCoIIoqzCCKKcCAQExDzANBglg
// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
// SIG // 2PPHOi/JChgaTbGWA+QVq1F+IAG+E1ExdZYhiCwMPY6g
// SIG // gg3DMIIGrTCCBJWgAwIBAgITMwAAANMCiNhpvd8CCQAA
// SIG // AAAA0zANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQGEwJV
// SIG // UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
// SIG // MTMwMQYDVQQDEypBenVyZSBSU0EgUHVibGljIFNlcnZp
// SIG // Y2VzIENvZGUgU2lnbmluZyBQQ0EwHhcNMjYwMzA1MTkw
// SIG // NjE5WhcNMjcwMzAzMTkwNjE5WjCBgjELMAkGA1UEBhMC
// SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
// SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
// SIG // b3JhdGlvbjEsMCoGA1UEAxMjQXp1cmUgUHVibGljIFNl
// SIG // cnZpY2VzIFJTQSBDb2RlIFNpZ24wggGiMA0GCSqGSIb3
// SIG // DQEBAQUAA4IBjwAwggGKAoIBgQDJrDsZxGHNBYj5RPkR
// SIG // yGEIGZlcCQkqE7SdGa6c2FPAMGu1JLqHur8qNWjR5swe
// SIG // kMMn0WSz2+QE0c848wHvqVVLpWV+Un3Q01Dnyzjifae4
// SIG // h+kzhQTUIhX2rKQbGHdqBe7LXyCgkfDrTNLXsI1xAXAw
// SIG // A42Ar+PpVd1ktqLSsM6pwqrM/FFfEizl9h5gtrEIZODp
// SIG // +jo9vESxKvHGp/Ifca7e/IluDeJffP4ME/fFtUzUCLH/
// SIG // IweugiUcsaTmewSny4odYLtmZK/zpBuPjGTLpUnn4HMy
// SIG // WXLUSOFlgvFrLKCPZxbNxXxBo5EUquzrFbpg9NmQVipJ
// SIG // QsKDSKNHluTwNicItFpZpiPMc7Y2LG11dNAil3yJEBLF
// SIG // MQ/5RqQptcWmgSKoG8Tx7x+RCYQj4Sjl2yJt+4OykVn9
// SIG // /kQ5wo6v6TmIHHZsKdmgIkMCKBuIRcB2FaGwLY+UGMP1
// SIG // xmiwIaekgjUgVwXX8Kv/2SYI9XXrjyUME4NLj0JTBIO7
// SIG // YX201gYYOL8CAwEAAaOCAbkwggG1MA4GA1UdDwEB/wQE
// SIG // AwIHgDAfBgNVHSUEGDAWBggrBgEFBQcDAwYKKwYBBAGC
// SIG // N1sBATAdBgNVHQ4EFgQU6DIfaqBAAm33/QFJGYifZUeQ
// SIG // B3AwRQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jv
// SIG // c29mdCBDb3Jwb3JhdGlvbjEWMBQGA1UEBRMNNDY5OTgx
// SIG // KzUwNzE4MTAfBgNVHSMEGDAWgBTxL7qRFnzefVInMfV6
// SIG // +9VYWWk6PTBvBgNVHR8EaDBmMGSgYqBghl5odHRwOi8v
// SIG // d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9BenVy
// SIG // ZSUyMFJTQSUyMFB1YmxpYyUyMFNlcnZpY2VzJTIwQ29k
// SIG // ZSUyMFNpZ25pbmclMjBQQ0EuY3JsMHwGCCsGAQUFBwEB
// SIG // BHAwbjBsBggrBgEFBQcwAoZgaHR0cDovL3d3dy5taWNy
// SIG // b3NvZnQuY29tL3BraW9wcy9jZXJ0cy9BenVyZSUyMFJT
// SIG // QSUyMFB1YmxpYyUyMFNlcnZpY2VzJTIwQ29kZSUyMFNp
// SIG // Z25pbmclMjBQQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJ
// SIG // KoZIhvcNAQEMBQADggIBAKJEWoxuo4PDUOPrpeqZZBdc
// SIG // EBjIoYQZjSvEIMTd0fcf89rWN/fr6cbAs3fZtR1LQ2kR
// SIG // Wo2mYixmAQpm6ijAYu3Qg+/NIHofviOVCDqHmaQGEiwi
// SIG // oBsb7Et9V7B9rqsksJslTyCJUJYuIXaKv37suPC7cFpX
// SIG // aaWaNLn0juz1sPKdklvTO23fwcahgRO9nqd9gTi9j6dw
// SIG // /nEJURWo32dl+rxdylnuRd6RHpkJKdlPVXRrr/ZL8sby
// SIG // akoCUN4zNVivUMLmUspYRJIV2TpkZonQnrmTm6TpXGVg
// SIG // Cjj56duTzVa/GRAKLVBHNm8je6esjgoswv6eHmYkmgJR
// SIG // jvZ+eHNloLnXfqByg3CxJ0Gd+nja5RTavYplIc9zfOgq
// SIG // Ng5e6NW8E0Q/AI115WfpM+ncWenWqdPs1YLinyUdRDxi
// SIG // DTmhYTyN1p3FojGtyM+mrQVIvC2l8zQr/LNCTvz/dj2h
// SIG // WqsF/7SDnK4wE812YAp6pPfgtr6BfVD0LMJu+s6f2PXe
// SIG // oLskA4Ac2PoJz5N7FmeY7Wn5shZBf4hOqCJssd5ZBpUb
// SIG // tGYh3iCnQSJP9EokoxVxe7D5HmkqTRNnXqIDQ5zW6bL3
// SIG // SDCYFEG5EWtqV9Ytd0Mjplx/s5+w1TnYbXIKbPzi4Hnb
// SIG // 3Xr0m8YnMuVyhmxGyHZ2CjMpQclgocs2QNsOyr7evLGD
// SIG // MIIHDjCCBPagAwIBAgITMwAAAAKyxJOIeFns0wAAAAAA
// SIG // AjANBgkqhkiG9w0BAQwFADBbMQswCQYDVQQGEwJVUzEe
// SIG // MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSww
// SIG // KgYDVQQDEyNNaWNyb3NvZnQgUlNBIFNlcnZpY2VzIFJv
// SIG // b3QgQ0EgMjAyMTAeFw0yMTA5MDIxNzQxMTlaFw0zNjA5
// SIG // MDIxNzUxMTlaMGIxCzAJBgNVBAYTAlVTMR4wHAYDVQQK
// SIG // ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMzAxBgNVBAMT
// SIG // KkF6dXJlIFJTQSBQdWJsaWMgU2VydmljZXMgQ29kZSBT
// SIG // aWduaW5nIFBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
// SIG // ADCCAgoCggIBAKXd/Sy91nFgseVJOFgeRhVxrcahyp1Y
// SIG // GSN0FpOEgEREVb3ND/QgI7I0yd7XG6OE8Vomr5FMxvK8
// SIG // TvJ4Lc6LP9BDz2GSa1M0LlzHKX757/24C0ZndzccA1qQ
// SIG // i00+BmmOr4plmxRzTFv4Phdw8yBPF9GDvClqV8ASvvbi
// SIG // tfjaD7dVPOFLb7N7fvt/qWogGN5eis0FXCqVJdmPZZaX
// SIG // 2h4iG0otsAhfq8yvSlJ0YwO4i5GDeLQwTsMN1Rf2UAHQ
// SIG // KCUYkFsLSQ0mqbaRbDZhB+2pFL/q/c2a6hlHLnapYyfw
// SIG // lNFXkDhwAFWEzfwFHER2oR42UayfN9tsO/p2tWk33Crn
// SIG // HdndJDrIZ6oQ3D+Ngol/TR8BAgXCIM6se6YlLDTsxRwh
// SIG // 9QUDq7KVhKy58HGKJUqwgIW0E7cvlzUl0Hft/ebhALZy
// SIG // FDkhof9C5Cq4c/486XLjQq0nbuKsFNhQU0yvABR3eohw
// SIG // 63Kps66Uma48oE0JmqOxmzrPvrITYcsnByKleiHn+4yq
// SIG // +Ts/KrtqkQwQcuikMPrZwXCtsYkxMUyUn8gr8oew22WD
// SIG // eIQECAM1Cz9TcdJadsrToKqXQa2bAn/AABAYyogPPONf
// SIG // GvojTI3DlYD42etMa/gPeZJavX+z7x8d/4eYBnJ9WFSi
// SIG // 9q0v+vLOGc3fyM2KQtq5eVbHX5rVyWc6bJ35AgMBAAGj
// SIG // ggHCMIIBvjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4E
// SIG // FgQU8S+6kRZ83n1SJzH1evvVWFlpOj0wVAYDVR0gBE0w
// SIG // SzBJBgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93
// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBv
// SIG // c2l0b3J5Lmh0bTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi
// SIG // AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
// SIG // /zAfBgNVHSMEGDAWgBQODLFkab0tsdVrJqZH6lZOgMPt
// SIG // ijBmBgNVHR8EXzBdMFugWaBXhlVodHRwOi8vd3d3Lm1p
// SIG // Y3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQl
// SIG // MjBSU0ElMjBTZXJ2aWNlcyUyMFJvb3QlMjBDQSUyMDIw
// SIG // MjEuY3JsMHMGCCsGAQUFBwEBBGcwZTBjBggrBgEFBQcw
// SIG // AoZXaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w
// SIG // cy9jZXJ0cy9NaWNyb3NvZnQlMjBSU0ElMjBTZXJ2aWNl
// SIG // cyUyMFJvb3QlMjBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3
// SIG // DQEBDAUAA4ICAQBin7PMBnXjnIJ0x++LnudLDWWnZ8dZ
// SIG // mJ14DuZfUss/doUThLAM4crrHaTbJoulUUELNd2AnOpX
// SIG // /Z4tenUMT3sjYIdPYyJfIYWPRqfI6Nbz+JVK7RRvn2nl
// SIG // 5EEMIuRE6UKS9ZGBbf02a7sb04E/7BN/NhhrmtS/tVFj
// SIG // fRrrVh9zXku45rqWuCwUTzg3EqxKQ8OGbtjBQtq/Syb/
// SIG // clm5BHsoh3XhMnb9VLv3G1duNf90FL5/o88XZ4L18nx1
// SIG // lfky2nllY4HIA8PK8AarqAW4iKSTA3EGqn8s/47WtQKT
// SIG // +qED2YbZXVOYL+L7vQDCnFbwhgAx6ucuMz7Ae1rqibg3
// SIG // AjsC7U5M3oA/vqAHDKDA3mdM5D6L/ZEdQgaG20HhUOSQ
// SIG // +CiQD3TyHSiVCfVMuTv83IiKCni3LW/23tHC2tbN57rl
// SIG // hMcoyjIi+IVd7j7s41MFBaDwJrmfXn/YM+lR/5QqvO7z
// SIG // WAbbr/XU531v3jr/jBilmrqt6U/b7y8TXyA9nYxV9iSM
// SIG // FmcbyIi2xgdcAHhxnpXcvcvyFWET6YiJiyeSJZwwJv8g
// SIG // wXiBF+Zh0IHArl6KVsbAdsATuP1TCEBpPynXZmkviIEW
// SIG // Ptnv315ZjTC7nPoOpSnOVaO7wZztrOefZunI5fBxw7mG
// SIG // 1oyoRnADZawiFsVo9J/cDu15ErRCfDQRhwSiBTGCGk8w
// SIG // ghpLAgEBMHkwYjELMAkGA1UEBhMCVVMxHjAcBgNVBAoT
// SIG // FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEzMDEGA1UEAxMq
// SIG // QXp1cmUgUlNBIFB1YmxpYyBTZXJ2aWNlcyBDb2RlIFNp
// SIG // Z25pbmcgUENBAhMzAAAA0wKI2Gm93wIJAAAAAADTMA0G
// SIG // CWCGSAFlAwQCAQUAoIGQMBkGCSqGSIb3DQEJAzEMBgor
// SIG // BgEEAYI3AgEEMC8GCSqGSIb3DQEJBDEiBCBUfKS+mWwY
// SIG // NvS5DQGWzOwjK/njGgd1v1p7tyFfZ9KoIjBCBgorBgEE
// SIG // AYI3AgEMMTQwMqAUgBIATQBpAGMAcgBvAHMAbwBmAHSh
// SIG // GoAYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tMA0GCSqG
// SIG // SIb3DQEBAQUABIIBgDStJgn8tB1gvPjYt1mGNaChV2SC
// SIG // W1+TtgCMRtq8SPtI2gFIjTuKFMZB8q6qG7Aoh7imC+1X
// SIG // egUUJQTX1Gq9cBRHAi9ZggzxbEVZ12/zVn44Pja9HnX2
// SIG // BQImYdATY2YHWt1cA6/xPpT7wWTOwWvVpsCT+59iqpqe
// SIG // k2dwMVDo8A4DhstagW/fktQNg0meqpiMYFU4PkRmgGlM
// SIG // ojkGxUQmsHLz1p2hUAsR+uN2pkXCovO/ErU8f6KSl+nV
// SIG // bwGAaSCyl6NAfunJOUheQm5mPjwbf4DZ7mCbGfo6FdPN
// SIG // 2XTShmkXLdvb+JnhbkfyobFrYjVbEhq0uwI/ZkcRC4u9
// SIG // cMZ9KyXrgO/7d+/iE8shmqdAKxgLl/yL2Yvia8O3aHLc
// SIG // 8rKZY0z5rw5sE3o/4zm8eBGUs2ouwQWpocKd+nshKlJX
// SIG // hzr41HCS485KzVy6FGcednLVzx4CZOkSfdoBPYEOui6D
// SIG // mMGzGjnt8UsHk2HIrmEvYoanwq4qe/SOoXK1yBYFeugH
// SIG // aKGCF5QwgheQBgorBgEEAYI3AwMBMYIXgDCCF3wGCSqG
// SIG // SIb3DQEHAqCCF20wghdpAgEDMQ8wDQYJYIZIAWUDBAIB
// SIG // BQAwggFSBgsqhkiG9w0BCRABBKCCAUEEggE9MIIBOQIB
// SIG // AQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCBV
// SIG // gisBtsYr2jSMvA5FM0xQqZq0xlwgvp1mpdA8w1bcOAIG
// SIG // aqnN7Cv3GBMyMDI2MDkxNzE2MTgxNi40NjhaMASAAgH0
// SIG // oIHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYD
// SIG // VQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25z
// SIG // MScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046REMwMC0w
// SIG // NUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1l
// SIG // LVN0YW1wIFNlcnZpY2WgghHqMIIHIDCCBQigAwIBAgIT
// SIG // MwAAAiQ7hCGwLKxkIgABAAACJDANBgkqhkiG9w0BAQsF
// SIG // ADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
// SIG // Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
// SIG // TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N
// SIG // aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAeFw0y
// SIG // NjAyMTkxOTM5NTlaFw0yNzA1MTcxOTM5NTlaMIHLMQsw
// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
// SIG // b2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3Nv
// SIG // ZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5u
// SIG // U2hpZWxkIFRTUyBFU046REMwMC0wNUUwLUQ5NDcxJTAj
// SIG // BgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZp
// SIG // Y2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
// SIG // AQCj6W3UaQ2Zr4hNvSy7j7UMPFVys7aExGB+JFwykzzX
// SIG // g3jayYm9gOLXJ7tNhU2emhrLQCOZcgLvz6FkqmghzQxz
// SIG // mkgKtLYiKaEzhogO/ce0lThdLNdVtMwQOYgo+XtXAZcV
// SIG // iBX4LcHk38RusZiF7wxSa5t/Lxic04+Z/hly1gJQpIeF
// SIG // Dqp4a9PuLt8rsfH05vW9pU9uriGdDxfJXn/lc49CxbXq
// SIG // A3EX17L24bc6t+mFuPDAJKKpai3XXqF2nJlpTPfdrA29
// SIG // sWTSNKig9CtBC5tzQj0flbsa/4wqO9u+RkuwpZb3b7qn
// SIG // W5FdFrDR1vQmXfjlyUP9ZO38839NwSuiHtvsFCNkTNIX
// SIG // 8OL5XVq1nsKyu//GeIZ9YuxsfLBedqG024PDERyrAs0p
// SIG // vfUWOLapVQajHPoCnuNSKvbEh7s5IQ0YgupGji+H7rID
// SIG // x2/mIEI+6Q8WwBtk3Yxyhjj0GXw909i0EkTkVyy+1yAD
// SIG // jwSC8bw2qM4+Mc4hyytlZzSc0IPUBq1YGnYwCjIwa5/l
// SIG // MW0pFn/HpJdB6XeMuTtYTOpaPoo64FjQryLXWjd4ovpw
// SIG // 5lOw7X+v3E9kwN9VBC+wJESBECC1gZMCS5TaVwfE1w4p
// SIG // nXXb1qT9bjgRsPg4dklruUTdon/3SNt0a0Q5Nc2Ul+rM
// SIG // lQxXoP9isXwMNnKO5JJkqRDRVQIDAQABo4IBSTCCAUUw
// SIG // HQYDVR0OBBYEFHMfkX1u/zJLCMe0gqYitx1tAHeoMB8G
// SIG // A1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8G
// SIG // A1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9z
// SIG // b2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRp
// SIG // bWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggr
// SIG // BgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93
// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWlj
// SIG // cm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAo
// SIG // MSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAww
// SIG // CgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
// SIG // SIb3DQEBCwUAA4ICAQA+wHSbmhIpM8CRVZ4tk624hQ+L
// SIG // dZXE4qoeQui77CeNa3jq1FOzi7MRKkko6diEDHXPNWvA
// SIG // agxastCewPzm5TCNh1s4qCHh4R2G/r48wU/Mpc68/WDm
// SIG // Jy5CIQn/Fwps1sbNUEu7Bzg004qULIVJ963jo/am4xwK
// SIG // gwh+vSVL7/dhsfT7dvhpRddbYLQTHZgwuNB6QhcEEsgo
// SIG // gLVwNRj37VEWZDiwoMdxyC7YYrQu6MCVtizHnOtkSX7F
// SIG // qIoi6jlcfqfo619uDH9r8k2qAOHCeEAqKXKymIXDMcGG
// SIG // lEdDFbYiDZgPCBM0IHgAeilUSon07wjHu0e0ssBmtBaf
// SIG // Pb4Gd+5FuRnWG3XGe91NCpLKqmFa/4GkVz9OMzZUg8oc
// SIG // zxC/4JT3Hf45JEtszToXwNskV3JNCcu2IItr6SJHmi3E
// SIG // DVADDRSNhdzFRpYmplGElPl5GRoPtJiDEvRIbv5MFKIw
// SIG // 2x9gnehf5IvBjC4ZkBg+4GTpqGE3mmnzF3nIekOkX4ug
// SIG // 0/0mN2CSarhuSi9NmHIOpUN2eQHUtgTb/+Gmq7gktCMw
// SIG // Iq/JOCYIiTYqpv1objAGKdWMPCrlSyNAs0jZYzkha535
// SIG // 158NMx+wBGvsfFoVsCMG5Ocp6vW6CXyuWRbUVqMU1OrQ
// SIG // bHfdyzJpbhJC1PbAZIyJCbN+VBgDTAzTKY8w4ISSwTCC
// SIG // B3EwggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAAABUw
// SIG // DQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMw
// SIG // EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
// SIG // b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
// SIG // b24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRp
// SIG // ZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4
// SIG // MjIyNVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMC
// SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
// SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
// SIG // b3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUt
// SIG // U3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUA
// SIG // A4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC
// SIG // 0/3unAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm
// SIG // 95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1qUoNE
// SIG // t6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZT
// SIG // fDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQ
// SIG // HJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOORj7I5
// SIG // LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVV
// SIG // mG1oO5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKy
// SIG // zbnijYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpG
// SIG // dc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2
// SIG // TPYrbqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZ
// SIG // fD9M269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1q
// SIG // GFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSL
// SIG // W6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLU
// SIG // HMVr9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXb
// SIG // GjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQID
// SIG // AQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAj
// SIG // BgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8v
// SIG // BO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1Gely
// SIG // MFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYI
// SIG // KwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNv
// SIG // bS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNV
// SIG // HSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4K
// SIG // AFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
// SIG // BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2U
// SIG // kFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v
// SIG // Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0
// SIG // cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYI
// SIG // KwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8v
// SIG // d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jv
// SIG // b0NlckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0B
// SIG // AQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwU
// SIG // tj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTC
// SIG // j/ts0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+
// SIG // iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU5HhT
// SIG // dSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYS
// SIG // EhFdPSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qB
// SIG // woEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0
// SIG // DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxy
// SIG // bxCrdTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARx
// SIG // v2T5JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+k
// SIG // KNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2
// SIG // tVdUCbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4
// SIG // O+S3Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokL
// SIG // jzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTm
// SIG // dHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/Z
// SIG // cGNTTY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggNNMIIC
// SIG // NQIBATCB+aGB0aSBzjCByzELMAkGA1UEBhMCVVMxEzAR
// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
// SIG // bjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3Bl
// SIG // cmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNO
// SIG // OkRDMDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3Nv
// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4D
// SIG // AhoDFQCmCPHbmseASfe//bGtX9eQG+0+46CBgzCBgKR+
// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0GCSqG
// SIG // SIb3DQEBCwUAAgUA7lZGYjAiGA8yMDI2MDkxNzEwNTg0
// SIG // MloYDzIwMjYwOTE4MTA1ODQyWjB0MDoGCisGAQQBhFkK
// SIG // BAExLDAqMAoCBQDuVkZiAgEAMAcCAQACAjK2MAcCAQAC
// SIG // AhJZMAoCBQDuV5fiAgEAMDYGCisGAQQBhFkKBAIxKDAm
// SIG // MAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSChCjAIAgEA
// SIG // AgMBhqAwDQYJKoZIhvcNAQELBQADggEBABHnLgPkunyD
// SIG // w6nT5uhMFuaJjrb5io4FgD9uavt/lCq4ARiBG9tkI6RL
// SIG // IPma+1JHgVNumKWWepcVJsseFSc0Dit+KKI9DJr4Q3OA
// SIG // b30XwopKtfKNyVTgpSuy/5dEVGoaR/4QKVuhSbZvUbki
// SIG // UJuRejbrDwaxGPjX4LQ5qlh3Pulb0DBGNPOniPIO1bR5
// SIG // hS560AcwiXuZjzLJV0GGrsTaHZKHmbZA3kdNuLicZ7L5
// SIG // TkSggqr7pHGQyjY13fQryNT+X8RcwsA9gDd9Xu6atpJH
// SIG // yjEo6UhKCS+cteUXCJk4wmRslM9n/6IKy3Tqp7xs4qty
// SIG // BBPr+4bcYCMLcQEaiVRcJzQxggQNMIIECQIBATCBkzB8
// SIG // MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
// SIG // bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
// SIG // cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy
// SIG // b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAiQ7
// SIG // hCGwLKxkIgABAAACJDANBglghkgBZQMEAgEFAKCCAUow
// SIG // GgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqG
// SIG // SIb3DQEJBDEiBCCSYxie3woAizTP7ZC2AhoyaUSoz1iv
// SIG // 4OjXddpkYbMpQDCB+gYLKoZIhvcNAQkQAi8xgeowgecw
// SIG // geQwgb0EIEghPTdqm/dRyZ0BczXcdloVEqICdcmpVNbH
// SIG // 9CEVzWSOMIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzAR
// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
// SIG // bjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAg
// SIG // UENBIDIwMTACEzMAAAIkO4QhsCysZCIAAQAAAiQwIgQg
// SIG // 3ZIeo9+HmQ7iNJczuao4LHN45FdshKuU/wGgFggprWIw
// SIG // DQYJKoZIhvcNAQELBQAEggIAoOBV0ydGFJJ3iVQn0pOZ
// SIG // IBrbzVQaKBwBOS3Ma9FaLVAxX/Ih0IpgucoNF21+ldvF
// SIG // NyFDDKsMIP/H2gwhF7djukUIFPwXoiyfGqOAqlqEw8zn
// SIG // wv2YQin1Lvr6GbwsrTGNIZW7RMH3R99hXLiPz7oizhhG
// SIG // 2161p7yuYpR+2CjyCbaorMN1ncxQD+bv+gVr4VbYBRtl
// SIG // s37sjMssF5x4ffaqvZ5V1BKlyjmKx4O9ttyeD+aG6Dma
// SIG // 14PN8LNu8JIn3RtZUJgaDiusNFiuyIraE6z9GTIMyd2c
// SIG // 9PPa8yvbelc+ySoq87S/sIv1WoKUM4eT+Q6SMoAFd8tS
// SIG // WD0LVDCrtK+j/MH5K/bXSg4e1HC0FZzdf+zmRuvDP+cC
// SIG // 4UxOtIPYrBEYhsfxcqC2A4R94DICp+Hqj/bHqw3H+roz
// SIG // TpRJXBZWSyzT8NzxWeTXpR+fgW6KLJXT5aXvo1WmfWr4
// SIG // PuzbLyZMxcw54T/WLqanN5GIOqfxwbOVT27gg0otD1SH
// SIG // 1gyaoM/v+v0BV3/swrb/8PdPgxgpKaQFjfluf5gz38VL
// SIG // vf3ffykaiSwZf9sRHjMLgADcg6xnY4G8O6C6P8JA0fjd
// SIG // vO7OuV9bIMGi+a7oxD+/CrkqyINAalmaOexHfPSTpkVg
// SIG // 2WG4a1zrJCo2kocTyYS2lIFyJ8r1i4pr0qRKkdfCRjFT9B0=
// SIG // End signature block