; 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 Refinitiv')); $('.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 Refinitiv'); } /*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 // MIIpAwYJKoZIhvcNAQcCoIIo9DCCKPACAQExDzANBglg // SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor // SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC // SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg // SIG // deRzoq11NrEfjWoD56q/sk+nfgeBgmwBr7EiLefEoRKg // SIG // gg3SMIIGvDCCBKSgAwIBAgITMwAAANLYbEaxncayoAAA // SIG // AAAA0jANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQGEwJV // SIG // UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u // SIG // MTMwMQYDVQQDEypBenVyZSBSU0EgUHVibGljIFNlcnZp // SIG // Y2VzIENvZGUgU2lnbmluZyBQQ0EwHhcNMjYwMzA1MTkw // SIG // NjE4WhcNMjcwMzAzMTkwNjE4WjCBgjELMAkGA1UEBhMC // SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT // SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw // SIG // b3JhdGlvbjEsMCoGA1UEAxMjQXp1cmUgUHVibGljIFNl // SIG // cnZpY2VzIFJTQSBDb2RlIFNpZ24wggGiMA0GCSqGSIb3 // SIG // DQEBAQUAA4IBjwAwggGKAoIBgQCzWKZG9P7t0hKBimeC // SIG // eMptumOPqwHZzspivt8o8D+6mS0L1WzQjEvrAtSYvzQI // SIG // MJXDWAf7ItbG2MxPPOVPtHNQaA8+mr9GdNgsb9bJM2hK // SIG // 4y4P1elGhGGX8NimfQZW9TeSAZsYe0OfRjMdwIphuyjh // SIG // 8kbARy3/mnDliXCdGj0u1Ft1qw87+bT6FlZ8Pv+OykUW // SIG // /WAM28r56qu1C5qm6Xx5LvRBxzk+i4K+Mu17yN3ALlad // SIG // 5w9uetGBa3WK1eN8ftCd2K0SV0AzpPVcuWbuYhhdifMW // SIG // trtg4r7pgWxQDBu6gSicXRt7oBFY56ilLxNqzs+UrhTq // SIG // Kq1taSw1qC3s0KzyxEC/Bz2+OFjnfbeZQxF2dMJ1r2Vw // SIG // E5nW65uckXepwgofsKgs806jTkt4Br8Kd0PAwmC9qF4T // SIG // xereCls2gIQmvAJxkACZnCbXGJp7XZ6Xsw+nykQzpiov // SIG // dlNLwTm/zzkDQSws7z+7m6jZEB3d7hiOqsuz47MEfmUJ // SIG // qluOioDD6d8CAwEAAaOCAcgwggHEMA4GA1UdDwEB/wQE // SIG // AwIHgDAfBgNVHSUEGDAWBggrBgEFBQcDAwYKKwYBBAGC // SIG // N1sBATAdBgNVHQ4EFgQUYqV4NR+DJwhQtHAKZqMo4HsM // SIG // aRkwVAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jv // SIG // c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEW // SIG // MBQGA1UEBRMNNDY5OTgxKzUwNzE4NzAfBgNVHSMEGDAW // SIG // gBTxL7qRFnzefVInMfV6+9VYWWk6PTBvBgNVHR8EaDBm // SIG // MGSgYqBghl5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v // SIG // cGtpb3BzL2NybC9BenVyZSUyMFJTQSUyMFB1YmxpYyUy // SIG // MFNlcnZpY2VzJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0Eu // SIG // Y3JsMHwGCCsGAQUFBwEBBHAwbjBsBggrBgEFBQcwAoZg // SIG // aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j // SIG // ZXJ0cy9BenVyZSUyMFJTQSUyMFB1YmxpYyUyMFNlcnZp // SIG // Y2VzJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0EuY3J0MAwG // SIG // A1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEMBQADggIBAKMM // SIG // UX0YVUUCTqE50xhl9Pk0hRfkLD14eIdvc+/cwwgKs2mR // SIG // DMG66/dGboyhlj1pogVsnvh0ByqJoFQYP/bqzQIgXJZM // SIG // 778xRQ3b5REzU+6sEFdnDBdWe2lT3SoEZD4gPGcqj6BZ // SIG // w/1dJDLeenv9hUIqZMGE28IZx26CIVXoieUq9Bj69Z0n // SIG // o0bzuzx20QwOqZ6yhiUT9UtOzSF55T3DJlx3COEYfQQP // SIG // Oomvj2V6lIVpum3v7OFSjGzTJaCcY/JKYqDHrcDCdmau // SIG // 3zAiCMkNJk5Nmsg5BPjes7MML/cC+6fSs+L3N1c8ilGt // SIG // Y7ghulNnBnJv+UZuD7ig5gANLk4wK/I5Y2BtxAtNowsy // SIG // nthb9Tnck5nYJ6i3HyWUc24TuXXAF++dG+H8Yes16vJL // SIG // HqH5b2xywVJelLFpYOj7kvGT8jJFZKUAJe1c//D1rBkA // SIG // Y+BT39mkAEd81B59pTHOwVS9uVxcwGa3yEXryhWbh44q // SIG // LQE9kfh8bypq2vLeSYZQX5kn3Lxyzk+W41MmabZHSu2R // SIG // X7ve201BkkpGuq8PL7IdQT8uba6Wqv7Pewiz4HsUfc0l // SIG // +PhcXgfn1ArJiUW1Sww92sLFk7C0UCufMjtxvxMwkfJc // SIG // edZWVele21OzOEXSzFf5OkPg6ne7JOvZeJYmCaFITJE+ // SIG // 9ha6TSs+TczP61FR7+ptMIIHDjCCBPagAwIBAgITMwAA // SIG // AAKyxJOIeFns0wAAAAAAAjANBgkqhkiG9w0BAQwFADBb // SIG // MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0 // SIG // IENvcnBvcmF0aW9uMSwwKgYDVQQDEyNNaWNyb3NvZnQg // SIG // UlNBIFNlcnZpY2VzIFJvb3QgQ0EgMjAyMTAeFw0yMTA5 // SIG // MDIxNzQxMTlaFw0zNjA5MDIxNzUxMTlaMGIxCzAJBgNV // SIG // BAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y // SIG // YXRpb24xMzAxBgNVBAMTKkF6dXJlIFJTQSBQdWJsaWMg // SIG // U2VydmljZXMgQ29kZSBTaWduaW5nIFBDQTCCAiIwDQYJ // SIG // KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXd/Sy91nFg // SIG // seVJOFgeRhVxrcahyp1YGSN0FpOEgEREVb3ND/QgI7I0 // SIG // yd7XG6OE8Vomr5FMxvK8TvJ4Lc6LP9BDz2GSa1M0LlzH // SIG // KX757/24C0ZndzccA1qQi00+BmmOr4plmxRzTFv4Phdw // SIG // 8yBPF9GDvClqV8ASvvbitfjaD7dVPOFLb7N7fvt/qWog // SIG // GN5eis0FXCqVJdmPZZaX2h4iG0otsAhfq8yvSlJ0YwO4 // SIG // i5GDeLQwTsMN1Rf2UAHQKCUYkFsLSQ0mqbaRbDZhB+2p // SIG // FL/q/c2a6hlHLnapYyfwlNFXkDhwAFWEzfwFHER2oR42 // SIG // UayfN9tsO/p2tWk33CrnHdndJDrIZ6oQ3D+Ngol/TR8B // SIG // AgXCIM6se6YlLDTsxRwh9QUDq7KVhKy58HGKJUqwgIW0 // SIG // E7cvlzUl0Hft/ebhALZyFDkhof9C5Cq4c/486XLjQq0n // SIG // buKsFNhQU0yvABR3eohw63Kps66Uma48oE0JmqOxmzrP // SIG // vrITYcsnByKleiHn+4yq+Ts/KrtqkQwQcuikMPrZwXCt // SIG // sYkxMUyUn8gr8oew22WDeIQECAM1Cz9TcdJadsrToKqX // SIG // Qa2bAn/AABAYyogPPONfGvojTI3DlYD42etMa/gPeZJa // SIG // vX+z7x8d/4eYBnJ9WFSi9q0v+vLOGc3fyM2KQtq5eVbH // SIG // X5rVyWc6bJ35AgMBAAGjggHCMIIBvjAQBgkrBgEEAYI3 // SIG // FQEEAwIBADAdBgNVHQ4EFgQU8S+6kRZ83n1SJzH1evvV // SIG // WFlpOj0wVAYDVR0gBE0wSzBJBgRVHSAAMEEwPwYIKwYB // SIG // BQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w // SIG // a2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTAZBgkrBgEE // SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw // SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBQODLFk // SIG // ab0tsdVrJqZH6lZOgMPtijBmBgNVHR8EXzBdMFugWaBX // SIG // hlVodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz // SIG // L2NybC9NaWNyb3NvZnQlMjBSU0ElMjBTZXJ2aWNlcyUy // SIG // MFJvb3QlMjBDQSUyMDIwMjEuY3JsMHMGCCsGAQUFBwEB // SIG // BGcwZTBjBggrBgEFBQcwAoZXaHR0cDovL3d3dy5taWNy // SIG // b3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQl // SIG // MjBSU0ElMjBTZXJ2aWNlcyUyMFJvb3QlMjBDQSUyMDIw // SIG // MjEuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBin7PMBnXj // SIG // nIJ0x++LnudLDWWnZ8dZmJ14DuZfUss/doUThLAM4crr // SIG // HaTbJoulUUELNd2AnOpX/Z4tenUMT3sjYIdPYyJfIYWP // SIG // RqfI6Nbz+JVK7RRvn2nl5EEMIuRE6UKS9ZGBbf02a7sb // SIG // 04E/7BN/NhhrmtS/tVFjfRrrVh9zXku45rqWuCwUTzg3 // SIG // EqxKQ8OGbtjBQtq/Syb/clm5BHsoh3XhMnb9VLv3G1du // SIG // Nf90FL5/o88XZ4L18nx1lfky2nllY4HIA8PK8AarqAW4 // SIG // iKSTA3EGqn8s/47WtQKT+qED2YbZXVOYL+L7vQDCnFbw // SIG // hgAx6ucuMz7Ae1rqibg3AjsC7U5M3oA/vqAHDKDA3mdM // SIG // 5D6L/ZEdQgaG20HhUOSQ+CiQD3TyHSiVCfVMuTv83IiK // SIG // Cni3LW/23tHC2tbN57rlhMcoyjIi+IVd7j7s41MFBaDw // SIG // JrmfXn/YM+lR/5QqvO7zWAbbr/XU531v3jr/jBilmrqt // SIG // 6U/b7y8TXyA9nYxV9iSMFmcbyIi2xgdcAHhxnpXcvcvy // SIG // FWET6YiJiyeSJZwwJv8gwXiBF+Zh0IHArl6KVsbAdsAT // SIG // uP1TCEBpPynXZmkviIEWPtnv315ZjTC7nPoOpSnOVaO7 // SIG // wZztrOefZunI5fBxw7mG1oyoRnADZawiFsVo9J/cDu15 // SIG // ErRCfDQRhwSiBTGCGokwghqFAgEBMHkwYjELMAkGA1UE // SIG // BhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh // SIG // dGlvbjEzMDEGA1UEAxMqQXp1cmUgUlNBIFB1YmxpYyBT // SIG // ZXJ2aWNlcyBDb2RlIFNpZ25pbmcgUENBAhMzAAAA0ths // SIG // RrGdxrKgAAAAAADSMA0GCWCGSAFlAwQCAQUAoIGuMBkG // SIG // CSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQB // SIG // gjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJ // SIG // BDEiBCAULgUwGHY+/n5Nx08ErZiUmqARk/x+7L82ifgw // SIG // pdwU1DBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBpAGMA // SIG // cgBvAHMAbwBmAHShGoAYaHR0cDovL3d3dy5taWNyb3Nv // SIG // ZnQuY29tMA0GCSqGSIb3DQEBAQUABIIBgIby55EPDvfb // SIG // MDCkLs3DCNH4ItmHIKwBGcMjXTrRVP1bC0gpcYrpwYxP // SIG // +BQiXvamrM4qNvstaD5ne9KmtZipdAFeLuBLgdhpJRmC // SIG // meyh8tyn3pKqVNFI6WMmyF5bgHFPcPRBgruDlFr5Vskn // SIG // gz2DdED1yFaugWOQQrqKk+fPmdPA3rahPP0y+Le6nOz5 // SIG // KnlRPg6MHmtu+yYT2ZN1ZdEJbfBoD5oqieFyil+/RQUo // SIG // l2V832voku+82F7dYSPjYY6eSuvCzSOBzDR3/N53dHVF // SIG // N8qRcc/CM3FTYbjWxq1FRVEaeEv4bax1tdiDHQT0Z416 // SIG // 7YoJeGNVhpv00ffOwkpd4IfeYwxT1ttpZ04BPrA+q2Qf // SIG // y9F7IPhkSR+BZCQSOTfvHSDQmGqCAAYiOmJtV9hKzaMI // SIG // zHo/3VO2JkbvM8fSqWDGTLV5MAedvfZJNq7xaHBNXebL // SIG // WpDHdKLMfyVFF/gDPXiLqcsDQwsIkQQz7SZQ80llucTj // SIG // 12XG7rEppSTcbvfKoKGCF7AwghesBgorBgEEAYI3AwMB // SIG // MYIXnDCCF5gGCSqGSIb3DQEHAqCCF4kwgheFAgEDMQ8w // SIG // DQYJYIZIAWUDBAIBBQAwggFaBgsqhkiG9w0BCRABBKCC // SIG // AUkEggFFMIIBQQIBAQYKKwYBBAGEWQoDATAxMA0GCWCG // SIG // SAFlAwQCAQUABCDg7xrqZ2DVwvK5WNtB9OJjMsXha/s7 // SIG // S3+QPZvxkmkexAIGaetN0QlCGBMyMDI2MDUwNzA0Mjcx // SIG // Ny40MjNaMASAAgH0oIHZpIHWMIHTMQswCQYDVQQGEwJV // SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH // SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv // SIG // cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFu // SIG // ZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5T // SIG // aGllbGQgVFNTIEVTTjo2QjA1LTA1RTAtRDk0NzElMCMG // SIG // A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj // SIG // ZaCCEf4wggcoMIIFEKADAgECAhMzAAACEUUYOZtDz/xs // SIG // AAEAAAIRMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYT // SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH // SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y // SIG // cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l // SIG // LVN0YW1wIFBDQSAyMDEwMB4XDTI1MDgxNDE4NDgxM1oX // SIG // DTI2MTExMzE4NDgxM1owgdMxCzAJBgNVBAYTAlVTMRMw // SIG // EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt // SIG // b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp // SIG // b24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9w // SIG // ZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVs // SIG // ZCBUU1MgRVNOOjZCMDUtMDVFMC1EOTQ3MSUwIwYDVQQD // SIG // ExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIC // SIG // IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAz7m7 // SIG // MxAdL5Vayrk7jsMo3GnhN85ktHCZEvEcj4BIccHKd/NK // SIG // C7uPvpX5dhO63W6VM5iCxklG8qQeVVrPaKvj8dYYJC7D // SIG // Nt4NN3XlVdC/voveJuPPhTJ/u7X+pYmV2qehTVPOOB1/ // SIG // hpmt51SzgxZczMdnFl+X2e1PgutSA5CAh9/Xz5NW0Cxn // SIG // YVz8g0Vpxg+Bq32amktRXr8m3BSEgUs8jgWRPVzPHEcz // SIG // pbhloGGEfHaROmHhVKIqN+JhMweEjU2NXM2W6hm32j/Q // SIG // H/I/KWqNNfYchHaG0xJljVTYoUKPpcQDuhH9dQKEgvGx // SIG // j2U5/3Fq1em4dO6Ih04m6R+ttxr6Y8oRJH9ZhZ3sciFB // SIG // IvZh7E2YFXOjP4MGybSylQTPDEFAtHHgpkskeEUhsPDR // SIG // 9VvWWhekhQx3qXaAKh+AkLmz/hpE3e0y+RIKO2AREjUL // SIG // JAKgf+R9QnNvqMeMkz9PGrjsijqWGzB2k2JNyaUYKlbm // SIG // QweOabsCioiY2fJbimjVyFAGk5AeYddUFxvJGgRVCH7B // SIG // eBPKAq7MMOmSCTOMZ0Sw6zyNx4Uhh5Y0uJ0ZOoTKnB3K // SIG // fdN/ba/eKHFeEhi3WqAfzTxiy0rMvhsfsXZK7zoclqaR // SIG // vVl8Q48J174+eyriypY9HhU+ohgiYi4uQGDDVdTDeKDt // SIG // oC/hD2Cn+ARzwE1rFfECAwEAAaOCAUkwggFFMB0GA1Ud // SIG // DgQWBBRifUUDwOnqIcvfb53+yV0EZn7OcDAfBgNVHSME // SIG // GDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8E // SIG // WDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5j // SIG // b20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0 // SIG // YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUH // SIG // AQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1p // SIG // Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29m // SIG // dCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNy // SIG // dDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsG // SIG // AQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0B // SIG // AQsFAAOCAgEApEKdnMeIIUiU6PatZ/qbrwiDzYUMKRcz // SIG // C4Bp/XY1S9NmHI+2c3dcpwH2SOmDfdvIIqt7mRrgvBPY // SIG // OvJ9CtZS5eeIrsObC0b0ggKTv2wrTgWG+qktqNFEhQei // SIG // pdURNLN68uHAm5edwBytd1kwy5r6B93klxDsldOmVWtw // SIG // /ngj7knN09muCmwr17JnsMFcoIN/H59s+1RYN7Vid4+7 // SIG // nj8FcvYy9rbZOMndBzsTiosF1M+aMIJX2k3EVFVsuDL7 // SIG // /R5ppI9Tg7eWQOWKMZHPdsA3ZqWzDuhJqTzoFSQShnZe // SIG // nC+xq/z9BhHPFFbUtfjAoG6EDPjSQJYXmogja8OEa19x // SIG // wnh3wVufeP+ck+/0gxNi7g+kO6WaOm052F4siD8xi6Uv // SIG // 75L7798lHvPThcxHHsgXqMY592d1wUof3tL/eDaQ0Uhn // SIG // YCU8yGkU2XJnctONnBKAvURAvf2qiIWDj4Lpcm0zA7Vu // SIG // ofuJR1Tpuyc5p1ja52bNZBBVqAOwyDhAmqWsJXAjYXns // SIG // sC/fJkee314Fh+GIyMgvAPRScgqRZqV16dTBYvoe+w1n // SIG // /wWs/ySTUsxDw4T/AITcu5PAsLnCVpArDrFLRTFyut+e // SIG // HUoG6UYZfj8/RsuQ42INse1pb/cPm7G2lcLJtkIKT80x // SIG // vB1LiaNvPTBVEcmNSvFUM0xrXZXcYcxVXiYwggdxMIIF // SIG // WaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqG // SIG // SIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UE // SIG // CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe // SIG // MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIw // SIG // MAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0 // SIG // ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIyMjVa // SIG // Fw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMw // SIG // EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt // SIG // b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp // SIG // b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w // SIG // IFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A // SIG // MIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwH // SIG // B9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa // SIG // 4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZr // SIG // BxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6 // SIG // xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEBydUv62 // SIG // 6GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlw // SIG // aQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDua // SIG // Rr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I // SIG // 5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF80 // SIG // 3RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26o // SIG // ElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/TNuv // SIG // XsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFz // SIG // ymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMh // SIG // XV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y1BzFa/Zc // SIG // UlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgV // SIG // GD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOC // SIG // Ad0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYB // SIG // BAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0G // SIG // A1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNV // SIG // HSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUF // SIG // BwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp // SIG // b3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAww // SIG // CgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUA // SIG // YgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMB // SIG // Af8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186a // SIG // GMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5t // SIG // aWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWlj // SIG // Um9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUF // SIG // BwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5t // SIG // aWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJB // SIG // dXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQAD // SIG // ggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+Tkdk // SIG // eLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGh // SIG // lBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6 // SIG // Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7nd // SIG // n/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n // SIG // 4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZ // SIG // UnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA // SIG // 0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3Uw // SIG // xTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+ // SIG // c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxko // SIG // JLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmx // SIG // aQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+DvktxW/ // SIG // tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM // SIG // +Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rR // SIG // nj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N // SIG // 7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDWTCCAkECAQEw // SIG // ggEBoYHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UE // SIG // CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe // SIG // MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0w // SIG // KwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRp // SIG // b25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNT // SIG // IEVTTjo2QjA1LTA1RTAtRDk0NzElMCMGA1UEAxMcTWlj // SIG // cm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcG // SIG // BSsOAwIaAxUAKyp8q2VdgAq1VGkzd7PZwV6zNc2ggYMw // SIG // gYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz // SIG // aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE // SIG // ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD // SIG // Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAN // SIG // BgkqhkiG9w0BAQsFAAIFAO2mRiowIhgPMjAyNjA1MDYy // SIG // MjU4NTBaGA8yMDI2MDUwNzIyNTg1MFowdzA9BgorBgEE // SIG // AYRZCgQBMS8wLTAKAgUA7aZGKgIBADAKAgEAAgIQNgIB // SIG // /zAHAgEAAgIShDAKAgUA7aeXqgIBADA2BgorBgEEAYRZ // SIG // CgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6Eg // SIG // oQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQBL // SIG // woLs7XiW6D6dAOOiPGeEIiHUhgyGcvoI73i3f7Ljk07X // SIG // aeEChoic4KoPMkw4pwkAZKvTlZqgMCwIk2MzLvNELKdf // SIG // ymZc6CpC+1USRZrCCugARO98KBN2wMXsLkGhrgWyvgas // SIG // OCmshVtjM/xhulTPSLUYfrxnbvxmfqxxiuh7NxnSdBvM // SIG // S0kkmf5gIdeH0EkAw8kflcEAkmaNLzI/bgEauorh9Vlj // SIG // eVhamaHgv1vsTv6yOvRWByRctQOX9PGZvplKo9iSMJXL // SIG // eyQy7Hwkm53KA9/ZDCvVa8DAb8Rrl1bmYbXRlIYbv8TJ // SIG // /XTMpsvog7QOSMtYnPZ20vfzWC2D5sWvMYIEDTCCBAkC // SIG // AQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh // SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV // SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE // SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAC // SIG // EzMAAAIRRRg5m0PP/GwAAQAAAhEwDQYJYIZIAWUDBAIB // SIG // BQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB // SIG // BDAvBgkqhkiG9w0BCQQxIgQgdyXkhK54yYTC1uvEqNI3 // SIG // Q+seydsa7KRWAd2KKiEuDMkwgfoGCyqGSIb3DQEJEAIv // SIG // MYHqMIHnMIHkMIG9BCAsrTOpmu+HTq1aXFwvlhjF8p2n // SIG // UCNNCEX/OWLHNDMmtzCBmDCBgKR+MHwxCzAJBgNVBAYT // SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH // SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y // SIG // cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l // SIG // LVN0YW1wIFBDQSAyMDEwAhMzAAACEUUYOZtDz/xsAAEA // SIG // AAIRMCIEIFMbxFpjrbxXE0BMA3XFVqP0pD4Z4N/7GRU9 // SIG // nSigvSO5MA0GCSqGSIb3DQEBCwUABIICALXDHe9cyCxt // SIG // WwiakCB3uSVYJYI+Su178PdKv2Rd4InYpLrLzW33vdlk // SIG // cIn/T90Y1qLel6odLE626T5dU1Mt1OgSB6FWK2cdUqW7 // SIG // Vi4om+sByORuypzOch0dd537qRuHazB0x7D6HfZTyOPn // SIG // 4qF+Z4Djn6WghhF1zf8+GnBm+K0dk56po/GfAyRnRtwg // SIG // 0Ouaxof9adOI7sbwtbgNrPFrdXcnONoYDlyUS1SFEQMA // SIG // nvjLLbKIwVhSSg/ps0xHGeqzFokZNkmgPoDyeDnJBYTp // SIG // IlhbDxTNyO7adMI7buJcHHjJPAVWtdZYImHSnPqLqQls // SIG // YTkUdH4CMuCdYPGGT73k6wA6AlqIwIGog8KB7w3QE7Bj // SIG // mfbuPNaHfK+duqx1I/3aJtt6hDN3nJXbbQDAPLFR9TIG // SIG // LamKdamjeU/x7P1952qRgu42QFCeRao9+r8BQUOH4xFx // SIG // 9b82yuM3MqwbCkuaNhAwD08F3awa7zjnlxSmEdXdxQWW // SIG // 1E0tjXhBrZzbh9WPZMwQCBsXSIE6bVPjk/U5ePOjP+fm // SIG // ElwkWQ6O6WVWNs1+1yvRT7d6zo3ILLVSe+HVXWW9jc74 // SIG // XlQP8SySgNMCIf+rdLgM8qAYgDWP0WhhgCB/d931uhnr // SIG // 900zXKsEniYGrvDvP8jANSrBNlKE5lNh5SQuBUX8hUog // SIG // Bk5eOHZsbmav // SIG // End signature block