From 260a1a453954c6f67d053d65972399b13dc25e80 Mon Sep 17 00:00:00 2001 From: AllenFang Date: Wed, 23 Sep 2015 20:54:54 +0800 Subject: [PATCH] fix #57 --- example/js/demo.bundle.js | 16 +++++++++++----- example/js/demo.js | 1 + src/BootstrapTable.js | 3 +++ src/TableBody.js | 7 +++++-- src/TableHeader.js | 5 +++-- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/example/js/demo.bundle.js b/example/js/demo.bundle.js index 45b41de81..0bfb238cf 100644 --- a/example/js/demo.bundle.js +++ b/example/js/demo.bundle.js @@ -58,6 +58,7 @@ function onAfterInsertRow(row) { var selectRowProp = { mode: "checkbox", clickToSelect: true, + // hideSelectColumn: true, //you can hide select column, if you enable clickToSelect selected: [], //default select on table bgColor: "rgb(238, 193, 213)", onSelect: onRowSelect, @@ -20449,6 +20450,7 @@ var BootstrapTable = (function (_React$Component) { React.createElement( TableHeader, { rowSelectType: this.props.selectRow.mode, + hideSelectColumn: this.props.selectRow.hideSelectColumn, sortName: this.props.options.sortName, sortOrder: this.props.options.sortOrder, onSort: this.handleSort.bind(this), @@ -20724,6 +20726,7 @@ BootstrapTable.propTypes = { onSelect: React.PropTypes.func, onSelectAll: React.PropTypes.func, clickToSelect: React.PropTypes.bool, + hideSelectColumn: React.PropTypes.bool, clickToSelectAndEditCell: React.PropTypes.bool }), cellEdit: React.PropTypes.shape({ @@ -20757,6 +20760,7 @@ BootstrapTable.defaultProps = { onSelect: undefined, onSelectAll: undefined, clickToSelect: false, + hideSelectColumn: false, clickToSelectAndEditCell: false }, cellEdit: { @@ -20949,7 +20953,7 @@ var TableBody = (function (_React$Component) { } }, this); var selected = this.props.selectedRowKeys.indexOf(data[this.props.keyField]) != -1; - var selectRowColumn = isSelectRowDefined ? this.renderSelectRowColumn(selected) : null; + var selectRowColumn = isSelectRowDefined && !this.props.selectRow.hideSelectColumn ? this.renderSelectRowColumn(selected) : null; return React.createElement( TableRow, { isSelected: selected, key: r, @@ -20999,7 +21003,7 @@ var TableBody = (function (_React$Component) { var style = { width: 35 }; - selectRowHeader = React.createElement("th", { style: style, key: -1 }); + selectRowHeader = this.props.selectRow.hideSelectColumn ? null : React.createElement("th", { style: style, key: -1 }); } var theader = this.props.columns.map(function (column, i) { var style = { @@ -21045,6 +21049,7 @@ var TableBody = (function (_React$Component) { this.editing = true; if (this._isSelectRowDefined()) { columnIndex--; + if (this.props.selectRow.hideSelectColumn) columnIndex++; } rowIndex--; var stateObj = { @@ -21429,7 +21434,7 @@ var TableHeader = (function (_React$Component) { render: { value: function render() { var containerClasses = classSet("table-header"); - var selectRowHeaderCol = this.renderSelectRowHeader(); + var selectRowHeaderCol = this.props.hideSelectColumn ? null : this.renderSelectRowHeader(); this._attachClearSortCaretFunc(); return React.createElement( @@ -21488,7 +21493,8 @@ TableHeader.propTypes = { onSort: React.PropTypes.func, onSelectAllRow: React.PropTypes.func, sortName: React.PropTypes.string, - sortOrder: React.PropTypes.string + sortOrder: React.PropTypes.string, + hideSelectColumn: React.PropTypes.bool }; TableHeader.defaultProps = {}; @@ -22470,4 +22476,4 @@ module.exports = { }; },{"./BootstrapTable":"/Users/allen/Node/react-bootstrap-table/src/BootstrapTable.js","./TableHeaderColumn":"/Users/allen/Node/react-bootstrap-table/src/TableHeaderColumn.js","./store/TableDataStore":"/Users/allen/Node/react-bootstrap-table/src/store/TableDataStore.js"}]},{},["./example/js/demo.js"]) -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvZXhhbXBsZS9qcy9kZW1vLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0F1dG9Gb2N1c01peGluLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9CZWZvcmVJbnB1dEV2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9DU1NQcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvQ1NTUHJvcGVydHlPcGVyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9DYWxsYmFja1F1ZXVlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9DaGFuZ2VFdmVudFBsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvQ2xpZW50UmVhY3RSb290SW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0RPTUNoaWxkcmVuT3BlcmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRE9NUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0RPTVByb3BlcnR5T3BlcmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRGFuZ2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9EZWZhdWx0RXZlbnRQbHVnaW5PcmRlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRW50ZXJMZWF2ZUV2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9FdmVudENvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXZlbnRMaXN0ZW5lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXZlbnRQbHVnaW5IdWIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0V2ZW50UGx1Z2luUmVnaXN0cnkuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0V2ZW50UGx1Z2luVXRpbHMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0V2ZW50UHJvcGFnYXRvcnMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9GYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0hUTUxET01Qcm9wZXJ0eUNvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvTGlua2VkVmFsdWVVdGlscy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvTG9jYWxFdmVudFRyYXBNaXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvT2JqZWN0LmFzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUG9vbGVkQ2xhc3MuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENoaWxkUmVjb25jaWxlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDaGlsZHJlbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDb21wb25lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDb250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEN1cnJlbnRPd25lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET00uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NQnV0dG9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTUNvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01Gb3JtLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTUlET3BlcmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01JZnJhbWUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NSW1nLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTUlucHV0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTU9wdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01TZWxlY3QuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NU2VsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTVRleHRDb21wb25lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NVGV4dGFyZWEuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RGVmYXVsdEluamVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3REZWZhdWx0UGVyZi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RWxlbWVudFZhbGlkYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbXB0eUNvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFcnJvclV0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEV2ZW50RW1pdHRlck1peGluLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEV2ZW50TGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RnJhZ21lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0SW5qZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdElucHV0U2VsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEluc3RhbmNlSGFuZGxlcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RJbnN0YW5jZU1hcC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RMaWZlQ3ljbGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0TWFya3VwQ2hlY2tzdW0uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0TW91bnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0TXVsdGlDaGlsZC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0TmF0aXZlQ29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE93bmVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFBlcmYuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFByb3BUeXBlTG9jYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFByb3BUeXBlcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RQdXRMaXN0ZW5lclF1ZXVlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFJlY29uY2lsZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0UmVmLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFJvb3RJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RTZXJ2ZXJSZW5kZXJpbmcuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0VXBkYXRlUXVldWUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0VXBkYXRlcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU1ZHRE9NUHJvcGVydHlDb25maWcuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1NlbGVjdEV2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TZXJ2ZXJSZWFjdFJvb3RJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU2ltcGxlRXZlbnRQbHVnaW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1N5bnRoZXRpY0NsaXBib2FyZEV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNEcmFnRXZlbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1N5bnRoZXRpY0V2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNGb2N1c0V2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNJbnB1dEV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNLZXlib2FyZEV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNNb3VzZUV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNUb3VjaEV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNVSUV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNXaGVlbEV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9UcmFuc2FjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvVmlld3BvcnRNZXRyaWNzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9hY2N1bXVsYXRlSW50by5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvYWRsZXIzMi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvY2FtZWxpemUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2NhbWVsaXplU3R5bGVOYW1lLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jb250YWluc05vZGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2NyZWF0ZUFycmF5RnJvbU1peGVkLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jcmVhdGVGdWxsUGFnZUNvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvY3JlYXRlTm9kZXNGcm9tTWFya3VwLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9kYW5nZXJvdXNTdHlsZVZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9lbXB0eU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9maW5kRE9NTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZmxhdHRlbkNoaWxkcmVuLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9mb2N1c05vZGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2ZvckVhY2hBY2N1bXVsYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0QWN0aXZlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRDaGFyQ29kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRLZXkuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldEV2ZW50TW9kaWZpZXJTdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRUYXJnZXQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldEl0ZXJhdG9yRm4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldE1hcmt1cFdyYXAuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0VGV4dENvbnRlbnRBY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2h5cGhlbmF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvaHlwaGVuYXRlU3R5bGVOYW1lLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pbnZhcmlhbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2lzRXZlbnRTdXBwb3J0ZWQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2lzTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvaXNUZXh0SW5wdXRFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pc1RleHROb2RlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9rZXlNaXJyb3IuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2tleU9mLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9tYXBPYmplY3QuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL21lbW9pemVTdHJpbmdPbmx5LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9vbmx5Q2hpbGQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3BlcmZvcm1hbmNlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9wZXJmb3JtYW5jZU5vdy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3NldElubmVySFRNTC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvc2V0VGV4dENvbnRlbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3NoYWxsb3dFcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3RvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3RyYXZlcnNlQWxsQ2hpbGRyZW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3dhcm5pbmcuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvcmVhY3QuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL0Jvb3RzdHJhcFRhYmxlLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9Db25zdC5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvU2VsZWN0Um93SGVhZGVyQ29sdW1uLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZUJvZHkuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL1RhYmxlQ29sdW1uLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZUVkaXRDb2x1bW4uanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL1RhYmxlRmlsdGVyLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZUhlYWRlci5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvVGFibGVIZWFkZXJDb2x1bW4uanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL1RhYmxlUm93LmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9wYWdpbmF0aW9uL1BhZ2VCdXR0b24uanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL3BhZ2luYXRpb24vUGFnaW5hdGlvbkxpc3QuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL3N0b3JlL1RhYmxlRGF0YVN0b3JlLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy90b29sYmFyL1Rvb2xCYXIuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL3V0aWwuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztJQ0FPLEtBQUssMkJBQU0sT0FBTzs7bUNBQ3VCLHVCQUF1Qjs7SUFBL0QsY0FBYyx3QkFBZCxjQUFjO0lBQUUsaUJBQWlCLHdCQUFqQixpQkFBaUI7O0FBRXpDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQzs7QUFFbEIsU0FBUyxXQUFXLENBQUMsUUFBUSxFQUFFO0FBQzdCLE1BQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDOUIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyxRQUFJLEVBQUUsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFlBQVEsQ0FBQyxJQUFJLENBQUM7QUFDWixRQUFFLEVBQUUsRUFBRTtBQUNOLFVBQUksRUFBRSxZQUFZLEdBQUcsRUFBRTtBQUN2QixXQUFLLEVBQUUsR0FBRyxHQUFHLENBQUM7S0FDZixDQUFDLENBQUM7R0FDSjtDQUNGOztBQUVELFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7QUFFaEIsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBQztBQUNuQyxTQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLFNBQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFBO0NBQ3ZDOztBQUVELFNBQVMsV0FBVyxDQUFDLFVBQVUsRUFBQztBQUM5QixTQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxDQUFDO0NBQzdDOztBQUVELFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDO0FBQ2hELFNBQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFDLFFBQVEsR0FBQyxnQkFBZ0IsR0FBQyxTQUFTLEdBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkUsU0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQy9CLFNBQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbEI7O0FBRUQsU0FBUyxvQkFBb0IsR0FBRTtBQUM3QixTQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7Q0FDdkM7O0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUM7QUFDaEMsU0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2hDLFNBQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Q0FDdEI7O0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUM7QUFDNUIsU0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2hDLFNBQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbEI7O0FBRUQsSUFBSSxhQUFhLEdBQUc7QUFDbEIsTUFBSSxFQUFFLFVBQVU7QUFDaEIsZUFBYSxFQUFFLElBQUk7QUFDbkIsVUFBUSxFQUFFLEVBQUU7QUFDWixTQUFPLEVBQUUsb0JBQW9CO0FBQzdCLFVBQVEsRUFBRSxXQUFXO0FBQ3JCLGFBQVcsRUFBRSxXQUFXO0NBQ3pCLENBQUM7O0FBRUYsSUFBSSxZQUFZLEdBQUc7QUFDakIsTUFBSSxFQUFFLE9BQU87QUFDYixZQUFVLEVBQUUsSUFBSTtBQUNoQixlQUFhLEVBQUUsZUFBZTtDQUMvQixDQUFDOztBQUVGLElBQUksT0FBTyxHQUFHO0FBQ1osVUFBUSxFQUFFLE1BQU07QUFDaEIsV0FBUyxFQUFFLE1BQU07QUFDakIsb0JBQWtCLEVBQUUsb0JBQW9CO0FBQ3hDLGdCQUFjLEVBQUUsZ0JBQWdCO0FBQ2hDLGdCQUFjLEVBQUUsZ0JBQWdCO0FBQUEsQ0FDakMsQ0FBQzs7QUFHRixTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFDO0FBQ2hDLFNBQU8sNENBQTBDLEdBQUcsSUFBSSxDQUFDO0NBQzFEOztBQUVELEtBQUssQ0FBQyxNQUFNLENBQ1Y7QUFBQyxnQkFBYztJQUFDLElBQUksRUFBRSxRQUFRLEFBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxBQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQUFBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLEFBQUMsRUFBQyxTQUFTLEVBQUUsYUFBYSxBQUFDLEVBQUMsUUFBUSxFQUFFLFlBQVksQUFBQztBQUMvRyxhQUFTLEVBQUUsSUFBSSxBQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksQUFBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLEFBQUMsRUFBQyxZQUFZLEVBQUUsSUFBSSxBQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sQUFBQztFQUNqRztBQUFDLHFCQUFpQjtNQUFDLFNBQVMsRUFBQyxJQUFJLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUUsSUFBSSxBQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQUFBQzs7R0FBK0I7RUFDaEg7QUFBQyxxQkFBaUI7TUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBRSxJQUFJLEFBQUM7O0dBQWlDO0VBQ3BGO0FBQUMscUJBQWlCO01BQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUUsY0FBYyxBQUFDLEVBQUMsUUFBUSxFQUFFLEtBQUssQUFBQzs7R0FBa0M7Q0FDdEcsRUFDbEIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FDaEMsQ0FBQzs7O0FDcEZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2o3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaDVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1YUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7SUNETyxLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsS0FBSywyQkFBTSxTQUFTOztJQUNwQixXQUFXLDJCQUFNLGVBQWU7O0lBQ2hDLFNBQVMsMkJBQU0sYUFBYTs7SUFDNUIsY0FBYywyQkFBTSw2QkFBNkI7O0lBQ2pELE9BQU8sMkJBQU0sbUJBQW1COztJQUNoQyxXQUFXLDJCQUFNLGVBQWU7O0lBQy9CLGNBQWMsV0FBTyx3QkFBd0IsRUFBN0MsY0FBYzs7SUFFaEIsY0FBYztBQUVQLFdBRlAsY0FBYyxDQUVOLEtBQUssRUFBRTs7OzBCQUZmLGNBQWM7O0FBR2xCLCtCQUhJLGNBQWMsNkNBR1osS0FBSyxFQUFFOztBQUVYLFFBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQzNCLFFBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixRQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQzs7QUFFM0IsU0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBUyxNQUFNLEVBQUM7QUFDMUQsVUFBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBQztBQUNwQixZQUFHLFFBQVEsSUFBSSxJQUFJLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRixnQkFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO09BQ25DO0FBQ0QsVUFBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBQztBQUN2Qix5QkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO09BQ25FO0tBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCxRQUFHLFFBQVEsSUFBSSxJQUFJLEVBQ2pCLE1BQU0sNEhBQTRILENBQUM7O0FBRXJJLFFBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUM7QUFDakMsVUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzNELFVBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hCLFVBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQSxVQUFDLElBQUksRUFBSztBQUNyQyxjQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsY0FBSyxRQUFRLENBQUM7QUFDWixjQUFJLEVBQUUsTUFBSyxZQUFZLEVBQUU7U0FDMUIsQ0FBQyxDQUFBO09BQ0gsQ0FBQSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ2YsTUFBSztBQUNKLFVBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsRDtBQUNELFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDOztBQUV4RSxRQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBQztBQUN2RCxVQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzdEOztBQUVELFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxVQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUN6QixxQkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUU7S0FDakQsQ0FBQztHQUNIOztZQTVDRyxjQUFjOztlQUFkLGNBQWM7QUE4Q2xCLGdCQUFZO2FBQUEsd0JBQUc7QUFDYixZQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBQztBQUN2QixnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDeEQsTUFBSztBQUNKLGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMzQjtBQUNELGVBQU8sTUFBTSxDQUFDO09BQ2Y7O0FBRUQsNkJBQXlCO2FBQUEsbUNBQUMsU0FBUyxFQUFDO0FBQ2xDLFlBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUM7QUFDL0IsY0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLGNBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixnQkFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7V0FDMUIsQ0FBQyxDQUFDO1NBQ0o7QUFDRCxZQUFHLFNBQVMsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUM7O0FBRXJELGNBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzRCxjQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osMkJBQWUsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVE7V0FDOUMsQ0FBQyxDQUFDO1NBQ0o7T0FDRjs7QUFFRCxzQkFBa0I7YUFBQSw4QkFBRTtBQUNsQixZQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUMzQixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO09BQzNDOztBQUVELHVCQUFtQjthQUFBLCtCQUFFO0FBQ25CLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUM7QUFDckIsY0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEUsY0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLGNBQWMsRUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztTQUM5QztPQUNGOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVDLFlBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQ3BDLFlBQUksS0FBSyxHQUFHO0FBQ1YsZ0JBQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDMUIsQ0FBQztBQUNGLFlBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUM7QUFDckMsbUJBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkM7QUFDRCxZQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUM3QyxpQkFBTztBQUNMLGdCQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQzVCLGlCQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQzdCLGdCQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQzNCLGtCQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVO0FBQy9CLG9CQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQy9CLGtCQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzNCLHFCQUFTLEVBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQ2hDLGlCQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLO0FBQ3pCLGlCQUFLLEVBQUUsQ0FBQztXQUNULENBQUM7U0FDSCxFQUFFLElBQUksQ0FBQyxDQUFDOztBQUVULFlBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3pDLFlBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNuQyxZQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEQsZUFDRTs7WUFBSyxTQUFTLEVBQUMsb0JBQW9CO1VBQ2hDLE9BQU87VUFDUjs7Y0FBSyxHQUFHLEVBQUMsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEFBQUMsRUFBQyxTQUFTLEVBQUUsVUFBVSxBQUFDO1lBQ25EO0FBQUMseUJBQVc7Z0JBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQUFBQztBQUN6Qyx3QkFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQUFBQztBQUN0Qyx5QkFBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQUFBQztBQUN4QyxzQkFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO0FBQ25DLDhCQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztjQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7YUFDUjtZQUNkLG9CQUFDLFNBQVMsSUFBQyxHQUFHLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQUFBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEFBQUM7QUFDNUQscUJBQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQUFBQztBQUM1QixtQkFBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxBQUFDO0FBQ3hCLHNCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQUFBQztBQUNuQyx1QkFBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxBQUFDO0FBQ2hDLHVCQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEFBQUM7QUFDaEMsc0JBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQUFBQztBQUM5Qiw2QkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxBQUFDO0FBQzVDLHlCQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUMsR0FBRTtZQUNoRCxXQUFXO1dBQ1I7VUFDTCxVQUFVO1NBQ1AsQ0FDUDtPQUNGOztBQUVELGNBQVU7YUFBQSxvQkFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDO0FBQzFCLFlBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxZQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osY0FBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7T0FDSjs7QUFFRCx3QkFBb0I7YUFBQSw4QkFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDO0FBQ3JDLFlBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN0RCxZQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osY0FBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7T0FDSjs7QUFFRCxzQkFBa0I7YUFBQSw0QkFBQyxDQUFDLEVBQUM7QUFDbkIsWUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7QUFDekMsWUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLFlBQUcsVUFBVSxFQUFDO0FBQ1oseUJBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzdDOztBQUVELFlBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDOUMsWUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLHlCQUFlLEVBQUUsZUFBZTtTQUNqQyxDQUFDLENBQUM7QUFDSCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBQztBQUNsQyxjQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDOUM7T0FDRjs7QUFFRCxtQkFBZTthQUFBLHlCQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUM7QUFDOUIsWUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0FBQ25ELFlBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDM0MsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLGlCQUFpQixFQUFDO0FBQ3ZELGNBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBVSxHQUFDLENBQUMsTUFBTSxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUM7U0FDdEQsTUFBTTtBQUNMLGNBQUcsVUFBVSxFQUFFO0FBQ2Isd0JBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDM0IsTUFBTTtBQUNMLHdCQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUM5QyxxQkFBTyxNQUFNLEtBQUssR0FBRyxDQUFDO2FBQ3ZCLENBQUMsQ0FBQztXQUNKO1NBQ0Y7O0FBRUQsWUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMzQyxZQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1oseUJBQWUsRUFBRSxZQUFZO1NBQzlCLENBQUMsQ0FBQzs7QUFFSCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBQztBQUMvQixjQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ2hEO09BQ0Y7O0FBRUQsa0JBQWM7YUFBQSx3QkFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQztBQUN4QyxZQUFJLFNBQVMsWUFBQSxDQUFDO0FBQ2QsYUFBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBUyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGNBQUcsQ0FBQyxJQUFJLFFBQVEsRUFBQztBQUNmLHFCQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDbkMsbUJBQU8sS0FBSyxDQUFDO1dBQ2Q7U0FDRixDQUFDLENBQUM7O0FBRUgsWUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoRSxZQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osY0FBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7O0FBRUgsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUM7QUFDbkMsY0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNqRjtPQUNGOztBQUVELGdCQUFZO2FBQUEsc0JBQUMsTUFBTSxFQUFDO0FBQ2xCLFlBQUksR0FBRyxHQUFHLElBQUk7WUFBRSxNQUFNLFlBQUEsQ0FBQztBQUN2QixZQUFJO0FBQ0YsY0FBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEIsQ0FBQyxPQUFNLENBQUMsRUFBQztBQUNSLGlCQUFPLENBQUMsQ0FBQztTQUNWOztBQUVELFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7O0FBRXZCLGNBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hELGNBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsRSxnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxRCxjQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osZ0JBQUksRUFBRSxNQUFNO1dBQ2IsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQy9DLE1BQUs7QUFDSixnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGdCQUFJLEVBQUUsTUFBTTtXQUNiLENBQUMsQ0FBQztTQUNKOztBQUVELFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFDO0FBQ25DLGNBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzQztPQUNGOztBQUVELGlCQUFhO2FBQUEseUJBQUU7QUFDYixZQUFJLE1BQU0sWUFBQSxDQUFDO0FBQ1gsWUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOztBQUVsRCxZQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMvQixZQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDOztBQUVqQyxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFDO0FBQ3ZCLGNBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hELGNBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsRSxjQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN4RCxjQUFHLFdBQVcsR0FBRyxZQUFZLEVBQzNCLFdBQVcsR0FBRyxZQUFZLENBQUM7QUFDN0IsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekQsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGdCQUFJLEVBQUUsTUFBTTtBQUNaLDJCQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtXQUNqRCxDQUFDLENBQUM7QUFDSCxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDOUMsTUFBSTtBQUNILGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixjQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osZ0JBQUksRUFBRSxNQUFNO0FBQ1osMkJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO1dBQ2pELENBQUMsQ0FBQztTQUNKO0FBQ0QsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUM7QUFDbkMsY0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hEO09BQ0Y7O0FBRUQsb0JBQWdCO2FBQUEsMEJBQUMsU0FBUyxFQUFDO0FBQ3pCLFlBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdCLFlBQUksTUFBTSxZQUFBLENBQUM7QUFDWCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFDO0FBQ3ZCLGNBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hELGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DLGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQyxNQUFJO0FBQ0gsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzNCO0FBQ0QsWUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGNBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQyxDQUFDO09BQ0o7O0FBRUQsZ0JBQVk7YUFBQSxzQkFBQyxVQUFVLEVBQUM7QUFDdEIsWUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUIsWUFBSSxNQUFNLFlBQUEsQ0FBQztBQUNYLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7QUFDdkIsY0FBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDeEQsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0MsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BDLE1BQUk7QUFDSCxnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDM0I7QUFDRCxZQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osY0FBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7T0FDSjs7QUFFRCxvQkFBZ0I7YUFBQSw0QkFBRTtBQUNoQixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFDO0FBQ3ZCLGlCQUNFOzs7WUFDRSxvQkFBQyxjQUFjLElBQUMsR0FBRyxFQUFDLFlBQVk7QUFDaEIsd0JBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO0FBQ2pELHlCQUFXLEVBQUUsS0FBSyxDQUFDLGFBQWEsQUFBQztBQUNqQyxzQkFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEFBQUMsR0FBRztXQUNqRCxDQUNQO1NBQ0YsTUFBSztBQUNKLGlCQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7O0FBRUQsaUJBQWE7YUFBQSx5QkFBRTtBQUNiLFlBQUksT0FBTyxZQUFBLENBQUM7QUFDWixZQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBQztBQUNwQyxpQkFBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBQztBQUNoRCxtQkFBTztBQUNMLGtCQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQzNCLG1CQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTO2FBQzlCLENBQUM7V0FDSCxDQUFDLENBQUM7U0FDSixNQUFNO0FBQ0wsaUJBQU8sR0FBRyxDQUFDO0FBQ1QsZ0JBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUN4QyxpQkFBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTO1dBQzNDLENBQUMsQ0FBQztTQUNKO0FBQ0QsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBQztBQUNuRSxpQkFDRTs7Y0FBSyxTQUFTLEVBQUMsVUFBVTtZQUN2QixvQkFBQyxPQUFPLElBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxBQUFDO0FBQ25DLDBCQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEFBQUM7QUFDbkMsMEJBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQUFBQztBQUNoQyxxQkFBTyxFQUFFLE9BQU8sQUFBQztBQUNqQiwrQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixBQUFDO0FBQ2hELHNCQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7QUFDdkMsdUJBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUN6QyxzQkFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUU7V0FDOUMsQ0FDUDtTQUNGLE1BQUk7QUFDSCxpQkFBTyxJQUFJLENBQUM7U0FDYjtPQUNGOztBQUVELHFCQUFpQjthQUFBLDJCQUFDLE9BQU8sRUFBQztBQUN4QixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFDO0FBQ3pCLGlCQUNFLG9CQUFDLFdBQVcsSUFBQyxPQUFPLEVBQUUsT0FBTyxBQUFDO0FBQ2pCLHlCQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxBQUFDO0FBQ3pDLG9CQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQyxHQUFFLENBQzFEO1NBQ0gsTUFBSTtBQUNILGlCQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7Ozs7U0F6V0csY0FBYztHQUFTLEtBQUssQ0FBQyxTQUFTOztBQTJXNUMsY0FBYyxDQUFDLFNBQVMsR0FBRztBQUN6QixRQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQzlCLE1BQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDM0IsU0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUM3QixPQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzNCLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDL0IsWUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNoQyxtQkFBaUIsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDekMsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQy9CLFFBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDNUIsV0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUMvQixZQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQy9CLFlBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDOUIsZUFBVyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNqQyxpQkFBYSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNuQyw0QkFBd0IsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7R0FDL0MsQ0FBQztBQUNGLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUM5QixRQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQzVCLGNBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDaEMsaUJBQWEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7R0FDcEMsQ0FBQztBQUNGLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDL0IsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMvQixRQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzVCLGNBQVksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDbEMsU0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQzdCLFlBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsYUFBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNqQyxzQkFBa0IsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDeEMsa0JBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDcEMsa0JBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7R0FDckMsQ0FBQztDQUNILENBQUM7QUFDRixjQUFjLENBQUMsWUFBWSxHQUFHO0FBQzVCLFFBQU0sRUFBRSxNQUFNO0FBQ2QsU0FBTyxFQUFFLEtBQUs7QUFDZCxPQUFLLEVBQUUsS0FBSztBQUNaLFdBQVMsRUFBRSxLQUFLO0FBQ2hCLFlBQVUsRUFBRSxLQUFLO0FBQ2pCLG1CQUFpQixFQUFFLFNBQVM7QUFDNUIsV0FBUyxFQUFFO0FBQ1QsUUFBSSxFQUFFLEtBQUssQ0FBQyxlQUFlO0FBQzNCLFdBQU8sRUFBRSxLQUFLLENBQUMsbUJBQW1CO0FBQ2xDLFlBQVEsRUFBRSxFQUFFO0FBQ1osWUFBUSxFQUFFLFNBQVM7QUFDbkIsZUFBVyxFQUFFLFNBQVM7QUFDdEIsaUJBQWEsRUFBRSxLQUFLO0FBQ3BCLDRCQUF3QixFQUFFLEtBQUs7R0FDaEM7QUFDRCxVQUFRLEVBQUM7QUFDUCxRQUFJLEVBQUUsS0FBSyxDQUFDLGNBQWM7QUFDMUIsY0FBVSxFQUFFLEtBQUs7QUFDakIsc0JBQWtCLEVBQUUsU0FBUztHQUM5QjtBQUNELFdBQVMsRUFBRSxLQUFLO0FBQ2hCLFdBQVMsRUFBRSxLQUFLO0FBQ2hCLFFBQU0sRUFBRSxLQUFLO0FBQ2IsY0FBWSxFQUFFLEtBQUs7QUFDbkIsU0FBTyxFQUFFO0FBQ1AsWUFBUSxFQUFFLElBQUk7QUFDZCxhQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7R0FDM0I7Q0FDRixDQUFDOztpQkFFYSxjQUFjOzs7OztpQkN0YmQ7QUFDYixXQUFTLEVBQUUsTUFBTTtBQUNqQixVQUFRLEVBQUUsS0FBSztBQUNmLGVBQWEsRUFBRSxFQUFFO0FBQ2pCLGVBQWEsRUFBRSxDQUFDO0FBQ2hCLFdBQVMsRUFBRSxHQUFHO0FBQ2QsV0FBUyxFQUFFLElBQUk7QUFDZixVQUFRLEVBQUUsR0FBRztBQUNiLFlBQVUsRUFBRSxJQUFJO0FBQ2hCLHFCQUFtQixFQUFFLEVBQUU7QUFDdkIsaUJBQWUsRUFBRSxNQUFNO0FBQ3ZCLG1CQUFpQixFQUFFLE9BQU87QUFDMUIsa0JBQWdCLEVBQUUsVUFBVTtBQUM1QixnQkFBYyxFQUFFLE1BQU07QUFDdEIsaUJBQWUsRUFBRSxPQUFPO0FBQ3hCLG1CQUFpQixFQUFFLFNBQVM7Q0FDN0I7Ozs7Ozs7Ozs7Ozs7SUNoQk0sS0FBSywyQkFBTSxPQUFPOztJQUNsQixRQUFRLDJCQUFNLFlBQVk7O0lBQzFCLEtBQUssMkJBQU0sU0FBUzs7SUFFckIscUJBQXFCO1dBQXJCLHFCQUFxQjswQkFBckIscUJBQXFCOzs7Ozs7O1lBQXJCLHFCQUFxQjs7ZUFBckIscUJBQXFCO0FBRXpCLFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksT0FBTyxHQUFHO0FBQ1osZUFBSyxFQUFFLEVBQUU7U0FDVixDQUFDOztBQUVGLGVBQ0U7O1lBQUksS0FBSyxFQUFFLE9BQU8sQUFBQztVQUNqQjs7Y0FBSyxTQUFTLEVBQUMsOEJBQThCO1lBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtXQUNoQjtTQUNILENBQ047T0FDRjs7OztTQWRHLHFCQUFxQjtHQUFTLEtBQUssQ0FBQyxTQUFTOztpQkFpQnBDLHFCQUFxQjs7Ozs7Ozs7Ozs7Ozs7O0lDckI3QixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLEtBQUssMkJBQU0sU0FBUzs7SUFDcEIsUUFBUSwyQkFBTSxZQUFZOztJQUMxQixXQUFXLDJCQUFNLGVBQWU7O0lBQ2hDLGVBQWUsMkJBQU0sbUJBQW1COztJQUN4QyxRQUFRLDJCQUFNLFlBQVk7O0lBRTNCLFNBQVM7QUFFRixXQUZQLFNBQVMsQ0FFRCxLQUFLLEVBQUU7MEJBRmYsU0FBUzs7QUFHYiwrQkFISSxTQUFTLDZDQUdQLEtBQUssRUFBRTtBQUNYLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxrQkFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQztBQUNGLFFBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0dBQ3RCOztZQVJHLFNBQVM7O2VBQVQsU0FBUztBQVViLFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7O0FBRW5ELFlBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7QUFDckQseUJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87QUFDbkMsdUJBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7QUFDL0IsMkJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO1NBQ3hDLENBQUMsQ0FBQzs7QUFFSCxZQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQ3BELFlBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOztBQUU3RCxZQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBUyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQ25ELGNBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBRSxDQUFDLEVBQUM7QUFDM0QsZ0JBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsZ0JBQUcsSUFBSSxDQUFDLE9BQU8sSUFDYixNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUNuQyxrQkFBTSxDQUFDLFFBQVE7QUFDZixnQkFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQy9CLHFCQUNFO0FBQUMsK0JBQWU7a0JBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7QUFDckQscUJBQUcsRUFBRSxDQUFDLEFBQUM7QUFDUCw0QkFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQUFBQztBQUMzQywwQkFBUSxFQUFFLENBQUMsQUFBQztBQUNaLDBCQUFRLEVBQUUsQ0FBQyxBQUFDO2dCQUMxQixVQUFVO2VBQ0ssQ0FDbkI7YUFDSixNQUFLO0FBQ0osa0JBQUcsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBQztBQUN0QyxvQkFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckQsb0JBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3pDLGdDQUFjLEdBQUcsNkJBQUssdUJBQXVCLEVBQUUsRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFDLEFBQUMsR0FBTyxDQUFDO2lCQUNqRjtBQUNELHVCQUNFO0FBQUMsNkJBQVc7b0JBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEFBQUM7QUFDeEIsdUJBQUcsRUFBRSxDQUFDLEFBQUM7QUFDUCw2QkFBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEFBQUM7QUFDNUIsNEJBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQUFBQztBQUM5QiwwQkFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO0FBQ3ZDLHlCQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQUFBQztrQkFDOUIsY0FBYztpQkFDSCxDQUNmO2VBQ0YsTUFBSztBQUNKLHVCQUNFO0FBQUMsNkJBQVc7b0JBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEFBQUM7QUFDeEIsdUJBQUcsRUFBRSxDQUFDLEFBQUM7QUFDUCw2QkFBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEFBQUM7QUFDNUIsNEJBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQUFBQztBQUM5QiwwQkFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEFBQUM7QUFDdEIsMEJBQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUN2Qyx5QkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEFBQUM7a0JBQzlCLFVBQVU7aUJBQ0MsQ0FDZjtlQUNGO2FBQ0Y7V0FDRixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1QsY0FBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkYsY0FBSSxlQUFlLEdBQUcsa0JBQWtCLEdBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxHQUFDLElBQUksQ0FBQztBQUNuRixpQkFDRTtBQUFDLG9CQUFRO2NBQUMsVUFBVSxFQUFFLFFBQVEsQUFBQyxFQUFDLEdBQUcsRUFBRSxDQUFDLEFBQUM7QUFDckMsdUJBQVMsRUFBRSxrQkFBa0IsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBQyxTQUFTLEFBQUM7QUFDN0QsNEJBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLGNBQWMsQUFBQztBQUNsRSx5QkFBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO1lBQzVDLGVBQWU7WUFBRSxZQUFZO1dBQ3JCLENBQ1o7U0FDRixFQUFFLElBQUksQ0FBQyxDQUFDOztBQUVULFlBQUcsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUM7QUFDeEIsbUJBQVMsQ0FBQyxJQUFJLENBQ2Q7QUFBQyxvQkFBUTtjQUFDLEdBQUcsRUFBQyxpQkFBaUI7WUFDN0I7O2dCQUFJLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUUsa0JBQWtCLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQSxBQUFDLEFBQUM7QUFDNUQscUJBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQUFBQzs7YUFFOUI7V0FDSSxDQUFDLENBQUM7U0FDZDs7QUFFRCxZQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNyQixlQUNFOztZQUFLLFNBQVMsRUFBRSxnQkFBZ0IsQUFBQztVQUMvQjs7Y0FBTyxTQUFTLEVBQUUsWUFBWSxBQUFDO1lBQzVCLFdBQVc7WUFDWjs7O2NBQ0csU0FBUzthQUNKO1dBQ0Y7U0FDSixDQUNQO09BQ0Y7O0FBRUQscUJBQWlCO2FBQUEsMkJBQUMsa0JBQWtCLEVBQUM7QUFDbkMsWUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDOztBQUUzQixZQUFHLGtCQUFrQixFQUFDO0FBQ3BCLGNBQUksS0FBSyxHQUFHO0FBQ1YsaUJBQUssRUFBQyxFQUFFO1dBQ1QsQ0FBQTtBQUNELHlCQUFlLEdBQUksNEJBQUksS0FBSyxFQUFFLEtBQUssQUFBQyxFQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQUFBQyxHQUFNLEFBQUMsQ0FBQztTQUN0RDtBQUNELFlBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBRSxDQUFDLEVBQUM7QUFDdEQsY0FBSSxLQUFLLEdBQUM7QUFDUixtQkFBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUMsTUFBTSxHQUFDLElBQUk7QUFDbEMsaUJBQUssRUFBRSxNQUFNLENBQUMsS0FBSztXQUNwQixDQUFDO0FBQ0YsaUJBQVEsNEJBQUksS0FBSyxFQUFFLEtBQUssQUFBQyxFQUFDLEdBQUcsRUFBRSxDQUFDLEFBQUMsRUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsQUFBQyxHQUFNLENBQUU7U0FDdkUsQ0FBQyxDQUFDOztBQUVILGVBQ0U7OztVQUNFOzs7WUFBSyxlQUFlO1lBQUUsT0FBTztXQUFNO1NBQzdCLENBQ1Q7T0FDRjs7QUFFRCxtQkFBZTthQUFBLHlCQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUM7QUFDbkMsWUFBSSxHQUFHLEVBQUUsV0FBVyxDQUFDO0FBQ3JCLFlBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUM7QUFDdEMsY0FBRyxDQUFDLElBQUksUUFBUSxHQUFDLENBQUMsRUFBQztBQUNqQixlQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0IsdUJBQVcsR0FBRyxHQUFHLENBQUM7V0FDbkI7U0FDRixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1QsWUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO09BQ2pEOztBQUVELDhCQUEwQjthQUFBLG9DQUFDLENBQUMsRUFBQztBQUMzQixZQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUM7QUFDdkYsY0FBSSxDQUFDLGVBQWUsQ0FDbEIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xGO09BQ0Y7O0FBRUQsa0JBQWM7YUFBQSx3QkFBQyxRQUFRLEVBQUUsV0FBVyxFQUFDO0FBQ25DLFlBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLFlBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUM7QUFDNUIscUJBQVcsRUFBRSxDQUFDO1NBQ2Y7QUFDRCxnQkFBUSxFQUFFLENBQUM7QUFDWCxZQUFJLFFBQVEsR0FBRztBQUNiLHNCQUFZLEVBQUU7QUFDWixlQUFHLEVBQUUsUUFBUTtBQUNiLGVBQUcsRUFBRSxXQUFXO1dBQ2pCO1NBQ0YsQ0FBQzs7QUFFRixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLHdCQUF3QixFQUFDOztBQUUvQyxjQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLGNBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdDO0FBQ0QsWUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUN6Qjs7QUFFRCwwQkFBc0I7YUFBQSxnQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBQztBQUNuRCxZQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFDcEMsWUFBRyxJQUFJLElBQUksTUFBTSxFQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDekU7O0FBRUQseUJBQXFCO2FBQUEsK0JBQUMsUUFBUSxFQUFDO0FBQzdCLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUN2RCxpQkFBUTtBQUFDLHVCQUFXOztZQUFDLCtCQUFPLElBQUksRUFBQyxPQUFPLEVBQUMsSUFBSSxFQUFDLFdBQVcsRUFBQyxPQUFPLEVBQUUsUUFBUSxBQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUMsR0FBRTtXQUFjLENBQUU7U0FDckosTUFBSztBQUNKLGlCQUFRO0FBQUMsdUJBQVc7O1lBQUMsK0JBQU8sSUFBSSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUUsUUFBUSxBQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUMsR0FBRTtXQUFjLENBQUU7U0FDdkk7T0FDRjs7QUFFRCx1QkFBbUI7YUFBQSwrQkFBRTtBQUNuQixlQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsaUJBQWlCLElBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7T0FDM0Q7Ozs7U0ExTEcsU0FBUztHQUFTLEtBQUssQ0FBQyxTQUFTOztBQTRMdkMsU0FBUyxDQUFDLFNBQVMsR0FBRztBQUNwQixNQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQzNCLFNBQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDOUIsU0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUM3QixPQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzNCLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDL0IsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNoQyxpQkFBZSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztBQUN0QyxhQUFXLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0NBQ2xDLENBQUM7aUJBQ2EsU0FBUzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUM3TWpCLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsS0FBSywyQkFBTSxTQUFTOztJQUVyQixXQUFXO0FBRUosV0FGUCxXQUFXLENBRUgsS0FBSyxFQUFFOzBCQUZmLFdBQVc7O0FBR2YsK0JBSEksV0FBVyw2Q0FHVCxLQUFLLEVBQUU7R0FDWjs7WUFKRyxXQUFXOztlQUFYLFdBQVc7QUFNZixrQkFBYzthQUFBLHdCQUFDLENBQUMsRUFBQztBQUNmLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBQztBQUNyRCxjQUFHLFFBQVEsQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDakQsb0JBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7V0FDNUIsTUFBTSxJQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUU7QUFDM0IsZ0JBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNoQyxlQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7V0FDekI7U0FDRjtBQUNELFlBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUNmLENBQUMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFDdEMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUM5Qjs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLE9BQU8sR0FBRztBQUNaLG1CQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQy9CLGlCQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUMsTUFBTSxHQUFDLElBQUk7U0FDdkMsQ0FBQzs7QUFFRixZQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDZCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFDO0FBQ3JCLGNBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUM7QUFDbkQsZ0JBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDL0MsTUFBSyxJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUM7QUFDM0QsZ0JBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDckQ7U0FDRjtBQUNELGVBQ0U7O3FCQUFJLEtBQUssRUFBRSxPQUFPLEFBQUMsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEFBQUMsSUFBSyxJQUFJO1VBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtTQUNqQixDQUNOO09BQ0Y7Ozs7U0F2Q0csV0FBVztHQUFTLEtBQUssQ0FBQyxTQUFTOztBQXlDekMsV0FBVyxDQUFDLFNBQVMsR0FBRztBQUN0QixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2pDLFFBQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDNUIsV0FBUyxFQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtDQUNqQyxDQUFDOztBQUVGLFdBQVcsQ0FBQyxZQUFZLEdBQUc7QUFDekIsV0FBUyxFQUFFLE1BQU07QUFDakIsUUFBTSxFQUFFLEtBQUs7QUFDYixXQUFTLEVBQUMsRUFBRTtDQUNiLENBQUE7aUJBQ2MsV0FBVzs7Ozs7Ozs7Ozs7OztJQ3ZEbkIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBRXJCLGVBQWU7V0FBZixlQUFlOzBCQUFmLGVBQWU7Ozs7Ozs7WUFBZixlQUFlOztlQUFmLGVBQWU7QUFFbkIsa0JBQWM7YUFBQSx3QkFBQyxDQUFDLEVBQUM7QUFDZixZQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFOztBQUNuQixjQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FDckIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNwRSxNQUFLLElBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUM7QUFDdkIsY0FBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25EO09BQ0Y7O0FBRUQsY0FBVTthQUFBLG9CQUFDLENBQUMsRUFBQztBQUNYLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7QUFDdkIsY0FBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQ3JCLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEU7T0FDRjs7QUFFRCxxQkFBaUI7YUFBQSw2QkFBRTtBQUNqQixZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM1QyxhQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQ2xDLGFBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztPQUNmOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLGVBQ0U7OztVQUNFLCtCQUFPLEdBQUcsRUFBQyxVQUFVLEVBQUMsSUFBSSxFQUFDLE1BQU07QUFDL0IscUJBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUMxQyxrQkFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUU7U0FDcEMsQ0FDTjtPQUNGOzs7O1NBakNHLGVBQWU7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUFtQzdDLGVBQWUsQ0FBQyxTQUFTLEdBQUc7QUFDMUIsY0FBWSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNsQyxVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2hDLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsWUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtDQUNqQyxDQUFDOztpQkFFYSxlQUFlOzs7Ozs7Ozs7Ozs7Ozs7SUM3Q3ZCLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsS0FBSywyQkFBTSxTQUFTOztJQUNwQixRQUFRLDJCQUFNLFlBQVk7O0lBRTNCLFdBQVc7QUFFSixXQUZQLFdBQVcsQ0FFSCxLQUFLLEVBQUU7MEJBRmYsV0FBVzs7QUFHYiwrQkFIRSxXQUFXLDZDQUdQLEtBQUssRUFBRTtBQUNiLFFBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0dBQ3JCOztZQUxHLFdBQVc7O2VBQVgsV0FBVztBQU9mLGVBQVc7YUFBQSxxQkFBQyxDQUFDLEVBQUM7QUFDWixZQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFDcEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsS0FFNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDOztBQUUvRCxZQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDckM7O0FBRUQsVUFBTTthQUFBLGtCQUFFO0FBQ04sWUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRTtBQUNuQyx5QkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztBQUNuQywyQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7U0FDeEMsQ0FBQyxDQUFDO0FBQ0gsWUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDOztBQUUzQixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsSUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFDO0FBQ3JELGNBQUksS0FBSyxHQUFHO0FBQ1YsaUJBQUssRUFBQyxFQUFFO0FBQ1IsdUJBQVcsRUFBRSxDQUFDO0FBQ2Qsd0JBQVksRUFBRSxDQUFDO1dBQ2hCLENBQUE7QUFDRCx5QkFBZSxHQUFJOztjQUFJLEtBQUssRUFBRSxLQUFLLEFBQUMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEFBQUM7O1dBQVksQUFBQyxDQUFDO1NBQzVEO0FBQ0QsWUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFDO0FBQ3ZELGNBQUksT0FBTyxHQUFHO0FBQ1osbUJBQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFDLE1BQU0sR0FBQyxJQUFJO0FBQ2xDLGlCQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7V0FDcEIsQ0FBQztBQUNGLGlCQUNFOztjQUFJLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxBQUFDLEVBQUMsS0FBSyxFQUFFLE9BQU8sQUFBQztZQUNuQzs7Z0JBQUssU0FBUyxFQUFDLDhCQUE4QjtjQUMzQywrQkFBTyxJQUFJLEVBQUMsTUFBTSxFQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxBQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEFBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUMsR0FBRTthQUNuRztXQUNILENBQ047U0FDRixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1QsZUFDRTs7WUFBTyxTQUFTLEVBQUUsWUFBWSxBQUFDLEVBQUMsS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxBQUFDO1VBQ25EOzs7WUFDRTs7Z0JBQUksS0FBSyxFQUFFLEVBQUMsaUJBQWlCLEVBQUUsUUFBUSxFQUFDLEFBQUM7Y0FDdEMsZUFBZTtjQUFFLFdBQVc7YUFDMUI7V0FDQztTQUNGLENBQ1Q7T0FDRjs7OztTQXRERyxXQUFXO0dBQVMsS0FBSyxDQUFDLFNBQVM7O0FBd0R6QyxXQUFXLENBQUMsU0FBUyxHQUFHO0FBQ3RCLFNBQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDOUIsZUFBYSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNyQyxVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0NBQy9CLENBQUM7aUJBQ2EsV0FBVzs7Ozs7Ozs7Ozs7Ozs7O0lDakVuQixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLEtBQUssMkJBQU0sU0FBUzs7SUFDcEIsSUFBSSwyQkFBTSxRQUFROztJQUNsQixRQUFRLDJCQUFNLFlBQVk7O0lBQzFCLHFCQUFxQiwyQkFBTSx5QkFBeUI7O0lBRXJELFdBQVc7QUFFSixXQUZQLFdBQVcsQ0FFSCxLQUFLLEVBQUU7MEJBRmYsV0FBVzs7QUFHYiwrQkFIRSxXQUFXLDZDQUdQLEtBQUssRUFBRTtHQUNkOztZQUpHLFdBQVc7O2VBQVgsV0FBVztBQU1mLGtCQUFjO2FBQUEsd0JBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQztBQUM5QixZQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN4QyxhQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFDLENBQUMsRUFBRSxFQUFDO0FBQ3RDLGNBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGNBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7QUFDbkQsa0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDL0Q7U0FDRjtBQUNELFlBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztPQUNyQzs7QUFFRCxxQkFBaUI7YUFBQSw2QkFBRTs7QUFFakIsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUM7QUFDOUIsY0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELGNBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3hDLGVBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDdEMsZ0JBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUM7QUFDM0Qsb0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDL0Qsb0JBQU07YUFDUDtXQUNGO1NBQ0Y7T0FDRjs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNoRCxZQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3RELFlBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDOztBQUVqQyxlQUNFOztZQUFLLFNBQVMsRUFBRSxnQkFBZ0IsQUFBQztVQUMvQjs7Y0FBTyxTQUFTLEVBQUMsa0NBQWtDO1lBQ2pEOzs7Y0FDRTs7a0JBQUksR0FBRyxFQUFDLFFBQVE7Z0JBQ2Isa0JBQWtCO2dCQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7ZUFDakI7YUFDQztXQUNGO1NBQ0osQ0FDUDtPQUNGOztBQUVELHlCQUFxQjthQUFBLGlDQUFFO0FBQ3JCLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQ3RELGlCQUFRLG9CQUFDLHFCQUFxQixPQUF5QixDQUFFO1NBQzFELE1BQUssSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUM7QUFDMUQsaUJBQVE7QUFBQyxpQ0FBcUI7O1lBQUMsK0JBQU8sSUFBSSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEFBQUMsR0FBRTtXQUF3QixDQUFFO1NBQ3ZILE1BQUk7QUFDSCxpQkFBTyxJQUFJLENBQUM7U0FDYjtPQUNGOztBQUVELDZCQUF5QjthQUFBLHFDQUFFO0FBQ3pCLFlBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFDO0FBQ3BDLGVBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDM0MsZ0JBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUNwQixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1dBQ3hHO1NBQ0YsTUFBTTtBQUNMLGNBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUNqQixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1NBQ3JHO09BQ0Y7Ozs7U0F2RUcsV0FBVztHQUFTLEtBQUssQ0FBQyxTQUFTOztBQXlFekMsV0FBVyxDQUFDLFNBQVMsR0FBRztBQUN0QixlQUFhLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ3JDLFFBQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDNUIsZ0JBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDcEMsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNoQyxXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0NBQ2xDLENBQUM7O0FBRUYsV0FBVyxDQUFDLFlBQVksR0FBRyxFQUMxQixDQUFDO2lCQUNhLFdBQVc7Ozs7Ozs7Ozs7Ozs7SUN6Rm5CLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsUUFBUSwyQkFBTSxZQUFZOztJQUMxQixLQUFLLDJCQUFNLFNBQVM7O0lBQ3BCLElBQUksMkJBQU0sUUFBUTs7SUFFbkIsaUJBQWlCO1dBQWpCLGlCQUFpQjswQkFBakIsaUJBQWlCOzs7Ozs7O1lBQWpCLGlCQUFpQjs7ZUFBakIsaUJBQWlCO0FBSXJCLHFCQUFpQjthQUFBLDJCQUFDLENBQUMsRUFBQztBQUNsQixZQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQUMsaUJBQU87U0FBQSxBQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMxQyxZQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsR0FBQyxLQUFLLENBQUMsUUFBUSxHQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDMUUsWUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVELFdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUNuRDs7QUFFRCxxQkFBaUI7YUFBQSw2QkFBRTtBQUNqQixZQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDbEY7O0FBRUQsVUFBTTthQUFBLGtCQUFFO0FBQ04sWUFBSSxPQUFPLEdBQUc7QUFDWixtQkFBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztBQUMvQixpQkFBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLE1BQU0sR0FBQyxJQUFJO0FBQ3RDLGVBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7U0FDeEIsQ0FBQzs7QUFFRixZQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBQyxHQUFHLElBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUMsYUFBYSxHQUFDLEVBQUUsQ0FBQSxBQUFDLENBQUM7QUFDOUUsZUFDRTs7WUFBSSxTQUFTLEVBQUUsT0FBTyxBQUFDLEVBQUMsS0FBSyxFQUFFLE9BQU8sQUFBQztVQUNyQzs7Y0FBSyxHQUFHLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyw4QkFBOEI7QUFDMUQscUJBQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1dBQU87U0FDdEUsQ0FDTjtPQUNGOzs7O1NBOUJHLGlCQUFpQjtHQUFTLEtBQUssQ0FBQyxTQUFTOztBQWdDL0MsaUJBQWlCLENBQUMsU0FBUyxHQUFHO0FBQzVCLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDakMsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNqQyxVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzlCLGdCQUFjLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ3BDLFlBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDaEMsT0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMzQixVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzlCLFFBQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDNUIsV0FBUyxFQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNoQyxPQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQzdCLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDL0IsQ0FBQzs7QUFFRixpQkFBaUIsQ0FBQyxZQUFZLEdBQUc7QUFDL0IsV0FBUyxFQUFFLE1BQU07QUFDakIsVUFBUSxFQUFFLEtBQUs7QUFDZixZQUFVLEVBQUUsU0FBUztBQUNyQixPQUFLLEVBQUUsS0FBSztBQUNaLFVBQVEsRUFBRSxJQUFJO0FBQ2QsZ0JBQWMsRUFBRSxTQUFTO0FBQ3pCLFFBQU0sRUFBRSxLQUFLO0FBQ2IsV0FBUyxFQUFFLEVBQUU7QUFDYixPQUFLLEVBQUUsSUFBSTtBQUNYLFVBQVEsRUFBRSxTQUFTO0NBQ3BCLENBQUM7O2lCQUVhLGlCQUFpQjs7Ozs7Ozs7Ozs7OztJQ2hFekIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBRXJCLFFBQVE7V0FBUixRQUFROzBCQUFSLFFBQVE7Ozs7Ozs7WUFBUixRQUFROztlQUFSLFFBQVE7QUFFWixZQUFRO2FBQUEsa0JBQUMsQ0FBQyxFQUFDO0FBQ1QsWUFBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztPQUM1RTs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7O0FBRU4sWUFBSSxRQUFRLEdBQUc7QUFDYix5QkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBQyxJQUFJO1NBQ3pFLENBQUM7O0FBRUYsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUEsQUFBQyxFQUFDO0FBQ3RGLGlCQUNFOztjQUFJLEtBQUssRUFBRSxRQUFRLEFBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7V0FBTSxDQUNuRjtTQUNGLE1BQUk7QUFDSCxpQkFDRTs7Y0FBSSxLQUFLLEVBQUUsUUFBUSxBQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1dBQU0sQ0FDaEQ7U0FDRjtPQUNGOzs7O1NBdkJHLFFBQVE7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUF5QnRDLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsWUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNoQyxnQkFBYyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNwQyxhQUFXLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0NBQ2xDLENBQUM7aUJBQ2EsUUFBUTs7Ozs7Ozs7Ozs7Ozs7O0lDakNoQixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFFM0IsVUFBVTtBQUVILFdBRlAsVUFBVSxDQUVGLEtBQUssRUFBRTswQkFGZixVQUFVOztBQUdkLCtCQUhJLFVBQVUsNkNBR1IsS0FBSyxFQUFFO0dBQ2I7O1lBSkksVUFBVTs7ZUFBVixVQUFVO0FBTWQsZ0JBQVk7YUFBQSxzQkFBQyxDQUFDLEVBQUM7QUFDYixTQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM3Qzs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUMsSUFBSSxDQUFDO0FBQ3hELGVBQ0k7O1lBQUksU0FBUyxFQUFFLE9BQU8sQUFBQztVQUFDOztjQUFHLElBQUksRUFBQyxHQUFHLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1dBQUs7U0FBSyxDQUM1RztPQUNGOzs7O1NBaEJHLFVBQVU7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUFrQnhDLFVBQVUsQ0FBQyxTQUFTLEdBQUc7QUFDckIsWUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNoQyxRQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0NBQzdCLENBQUM7O2lCQUVhLFVBQVU7Ozs7Ozs7Ozs7Ozs7OztJQzFCbEIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixVQUFVLDJCQUFNLGlCQUFpQjs7SUFDakMsS0FBSywyQkFBTSxVQUFVOztJQUV0QixjQUFjO0FBRVAsV0FGUCxjQUFjLENBRU4sS0FBSyxFQUFFOzBCQUZmLGNBQWM7O0FBR2xCLCtCQUhJLGNBQWMsNkNBR1osS0FBSyxFQUFFO0FBQ1gsUUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO0FBQ3pDLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDVCxpQkFBVyxFQUFFLENBQUM7QUFDZCxpQkFBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztLQUNwQyxDQUFDO0dBQ0o7O1lBVEksY0FBYzs7ZUFBZCxjQUFjO0FBV2xCLGNBQVU7YUFBQSxvQkFBQyxJQUFJLEVBQUM7QUFDZCxZQUFHLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFDO0FBQ3hCLGNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUM7U0FDaEUsTUFBSyxJQUFHLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFDO0FBQy9CLGNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQztTQUM1RixNQUFLLElBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUM7QUFDL0IsY0FBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDeEIsTUFBSyxJQUFHLElBQUksSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFDO0FBQ2hDLGNBQUksR0FBRyxDQUFDLENBQUM7U0FDVixNQUFJO0FBQ0gsY0FBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2Qjs7QUFFRCxZQUFHLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBQztBQUNoQyxjQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFDbkMsY0FBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDckQ7T0FDRjs7QUFFRCxxQkFBaUI7YUFBQSwyQkFBQyxDQUFDLEVBQUM7QUFDbEIsU0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ25CLFlBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELFlBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFDO0FBQ3RDLGNBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1RCxjQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDM0MsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLHVCQUFXLEVBQUUsVUFBVTtBQUN2Qix1QkFBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztXQUNwQyxDQUFDLENBQUM7QUFDSCxjQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUMzRDtPQUNGOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hFLFlBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMvQixZQUFJLGFBQWEsR0FBRztBQUNsQixtQkFBUyxFQUFFLEtBQUs7QUFBQSxTQUNqQixDQUFBO0FBQ0QsZUFDRTs7WUFBSyxTQUFTLEVBQUMsS0FBSztVQUNsQjs7Y0FBSyxTQUFTLEVBQUMsVUFBVTtZQUN2Qjs7Z0JBQUssU0FBUyxFQUFDLFVBQVU7Y0FDdkI7O2tCQUFRLFNBQVMsRUFBQyxpQ0FBaUMsRUFBQyxJQUFJLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsZUFBWSxVQUFVLEVBQUMsaUJBQWMsTUFBTTtnQkFDNUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO2dCQUN2Qiw4QkFBTSxTQUFTLEVBQUMsT0FBTyxHQUFRO2VBQ3hCO2NBQ1Q7O2tCQUFJLFNBQVMsRUFBQyxlQUFlLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxtQkFBZ0IsY0FBYztnQkFDdEU7O29CQUFJLElBQUksRUFBQyxjQUFjO2tCQUFDOztzQkFBRyxJQUFJLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQzs7bUJBQU87aUJBQUs7Z0JBQ3pIOztvQkFBSSxJQUFJLEVBQUMsY0FBYztrQkFBQzs7c0JBQUcsSUFBSSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxHQUFHLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7O21CQUFPO2lCQUFLO2dCQUN6SDs7b0JBQUksSUFBSSxFQUFDLGNBQWM7a0JBQUM7O3NCQUFHLElBQUksRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsR0FBRyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDOzttQkFBTztpQkFBSztnQkFDekg7O29CQUFJLElBQUksRUFBQyxjQUFjO2tCQUFDOztzQkFBRyxJQUFJLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQzs7bUJBQU87aUJBQUs7ZUFDdEg7YUFDRDtXQUNGO1VBQ047O2NBQUssU0FBUyxFQUFDLFVBQVU7WUFDdkI7O2dCQUFJLFNBQVMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFFLGFBQWEsQUFBQztjQUM3QyxRQUFRO2FBQ047V0FDRDtTQUNGLENBQ1A7T0FDRjs7QUFFRCxZQUFRO2FBQUEsb0JBQUU7QUFDUixZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDNUIsZUFBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVMsSUFBSSxFQUFDO0FBQzdCLGNBQUksUUFBUSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBQyxJQUFJLEdBQUMsS0FBSyxDQUFDO0FBQ3pELGlCQUNFO0FBQUMsc0JBQVU7Y0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUMsRUFBQyxNQUFNLEVBQUUsUUFBUSxBQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksQUFBQztZQUFFLElBQUk7V0FBYyxDQUNyRztTQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDVjs7QUFFRCxZQUFRO2FBQUEsb0JBQUU7QUFDUixZQUFJLFNBQVMsR0FBRyxDQUFDO1lBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O0FBRTdDLGlCQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakYsZUFBTyxHQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQzs7QUFFN0MsWUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUM3QixpQkFBTyxHQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDNUIsbUJBQVMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7U0FDNUM7QUFDRCxZQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLGFBQUksSUFBSSxDQUFDLEdBQUMsU0FBUyxFQUFDLENBQUMsSUFBRSxPQUFPLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDakMsY0FBRyxDQUFDLEdBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEI7QUFDRCxhQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QixhQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QixlQUFPLEtBQUssQ0FBQztPQUNkOztBQUVELGtCQUFjO2FBQUEsMEJBQUU7QUFDZCxlQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO09BQy9COztBQUVELGtCQUFjO2FBQUEsMEJBQUU7QUFDZCxlQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO09BQy9COzs7O1NBL0dHLGNBQWM7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUFpSDVDLGNBQWMsQ0FBQyxTQUFTLEdBQUc7QUFDekIsYUFBVyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNuQyxVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2hDLFlBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDakMsQ0FBQzs7QUFFRixjQUFjLENBQUMsWUFBWSxHQUFHO0FBQzVCLGFBQVcsRUFBRSxLQUFLLENBQUMsYUFBYTtDQUNqQyxDQUFBO2lCQUNjLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUM5SHRCLEtBQUssMkJBQU0sVUFBVTs7QUFDNUIsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQzs7QUFFbEQsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDO0FBQzdDLE9BQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUIsS0FBRyxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsRUFBQyxDQUFDLEVBQUs7QUFDaEIsUUFBRyxRQUFRLEVBQUM7QUFDVixhQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxVQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFDO0FBQzFCLGVBQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxBQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUksQ0FBQyxHQUFHLENBQUMsQUFBQyxDQUFDO09BQ2hGLE1BQUk7QUFDSCxlQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsQUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFJLENBQUMsR0FBRyxDQUFDLEFBQUMsQ0FBQztPQUNoRjtLQUNGO0dBQ0YsQ0FBQyxDQUFDOztBQUVILFNBQU8sR0FBRyxDQUFDO0NBQ1o7O0lBRVksWUFBWSxXQUFaLFlBQVk7QUFDWixXQURBLFlBQVksQ0FDWCxJQUFJLEVBQUM7MEJBRE4sWUFBWTs7QUFFckIsK0JBRlMsWUFBWSw2Q0FFZixJQUFJLEVBQUU7QUFDWixRQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztHQUNsQjs7WUFKVSxZQUFZOztlQUFaLFlBQVk7QUFNdkIsV0FBTzthQUFBLGlCQUFDLElBQUksRUFBRTtBQUNaLFlBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzNCOztBQUVELFNBQUs7YUFBQSxpQkFBRTtBQUNMLFlBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO09BQ2xCOztBQUVELFdBQU87YUFBQSxtQkFBRTtBQUNQLGVBQU8sSUFBSSxDQUFDLElBQUksQ0FBQztPQUNsQjs7OztTQWhCVSxZQUFZO0dBQVMsWUFBWTs7SUFtQmpDLGNBQWMsV0FBZCxjQUFjO0FBRWQsV0FGQSxjQUFjLENBRWIsSUFBSSxFQUFDOzBCQUZOLGNBQWM7O0FBR3ZCLFFBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFFBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDOUIsUUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdEIsUUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsUUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbEIsUUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7R0FDcEI7O2VBWlUsY0FBYztBQWN6QixZQUFRO2FBQUEsa0JBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBQztBQUNqRCxZQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QixZQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLFlBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztPQUM1Qzs7QUFFRCxXQUFPO2FBQUEsaUJBQUMsSUFBSSxFQUFFO0FBQ1osWUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2xCLGNBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEQsY0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzRDtBQUNELFlBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztBQUNkLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN2RDtPQUNGOztBQUVELHFCQUFpQjthQUFBLDJCQUFDLGVBQWUsRUFBQztBQUNoQyxZQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztPQUNqQzs7QUFFRCxzQkFBa0I7YUFBQSw4QkFBRTtBQUNsQixlQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7T0FDdEI7O0FBRUQseUJBQXFCO2FBQUEsaUNBQUU7QUFDckIsWUFBRyxJQUFJLENBQUMsVUFBVTtBQUFFLGlCQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7O0FBQ3hDLGlCQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7U0FBQTtPQUN2Qjs7QUFFRCxRQUFJO2FBQUEsY0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFDO0FBQ3BCLFlBQUksQ0FBQyxPQUFPLEdBQUc7QUFDYixlQUFLLEVBQUUsS0FBSztBQUNaLG1CQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDOztBQUVGLFlBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDdEQsWUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELDBCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztBQUUzRSxlQUFPLElBQUksQ0FBQztPQUNiOztBQUVELFFBQUk7Ozs7Ozs7Ozs7O1NBQUEsVUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDO0FBQ3JCLFlBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksR0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDO0FBQ3RDLFlBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUEsQUFBQyxDQUFDO0FBQzFELGVBQU8sSUFBSSxDQUFDO09BQ2I7O0FBRUQsUUFBSTthQUFBLGNBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUM7QUFDL0IsWUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztBQUN0RCxZQUFJLFdBQVcsWUFBQSxDQUFDO0FBQ2hCLFlBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUM7QUFDeEIsNEJBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELHFCQUFXLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNELE1BQUk7QUFDSCw0QkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEUscUJBQVcsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUU7QUFDRCxZQUFHLElBQUksQ0FBQyxVQUFVLEVBQUM7QUFDakIsY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBUyxHQUFHLEVBQUM7QUFDN0IsZ0JBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxXQUFXLEVBQUM7QUFDcEMsaUJBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO2FBQ3hDO1dBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNWO0FBQ0QsZUFBTyxJQUFJLENBQUM7T0FDYjs7QUFFRCxPQUFHO2FBQUEsYUFBQyxNQUFNLEVBQUM7QUFDVCxZQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFDO0FBQ3JDLGdCQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsd0JBQXdCLENBQUM7U0FDaEQ7QUFDRCxZQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3RELDBCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUN0QyxjQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQztBQUN6RCxrQkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1dBQ3ZFO1NBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCwwQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hCO09BQ0Y7O0FBRUQsVUFBTTthQUFBLGdCQUFDLE1BQU0sRUFBQztBQUNaLFlBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDdEQsWUFBSSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBRyxFQUFDO0FBQ2xELGlCQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2pELEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRVQsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGNBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBUyxHQUFHLEVBQUM7QUFDeEMsbUJBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7V0FDakQsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULGNBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1NBQzVCLE1BQUk7QUFDSCxjQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUNwQjtPQUNGOztBQUVELFVBQU07YUFBQSxnQkFBQyxTQUFTLEVBQUM7QUFDZixZQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBQztBQUNwQyxjQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixjQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN4QixjQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN2QixNQUFLO0FBQ0osY0FBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0IsY0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoRCxnQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGlCQUFJLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBQztBQUN2QixrQkFBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQy9FLHFCQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2Qsc0JBQU07ZUFDUDthQUNGO0FBQ0QsbUJBQU8sS0FBSyxDQUFDO1dBQ2QsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7T0FDRjs7QUFFRCxVQUFNO2FBQUEsZ0JBQUMsVUFBVSxFQUFDO0FBQ2hCLFlBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBQztBQUMxQixjQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixjQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN4QixjQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QixNQUFJO0FBQ0gsY0FBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDN0IsY0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoRCxnQkFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLGlCQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBQztBQUNqQixrQkFBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQ1IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztBQUM1RSxxQkFBSyxHQUFHLElBQUksQ0FBQztBQUNiLHNCQUFNO2VBQ1A7YUFDRjtBQUNELG1CQUFPLEtBQUssQ0FBQztXQUNkLENBQUMsQ0FBQztBQUNILGNBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO09BQ0Y7O0FBRUQsT0FBRzthQUFBLGVBQUU7QUFDSCxZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs7QUFFekMsWUFBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7QUFBRSxpQkFBTyxLQUFLLENBQUM7U0FBQSxBQUVuQyxJQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFDO0FBQ3hCLGlCQUFPLEtBQUssQ0FBQztTQUNkLE1BQUk7QUFDSCxjQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsZUFBSSxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxDQUFDLElBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDbkQsa0JBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsZ0JBQUcsQ0FBQyxHQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFDLE1BQU07V0FDOUI7QUFDRCxpQkFBTyxNQUFNLENBQUM7U0FDZjtPQUNGOztBQUVELGVBQVc7YUFBQSx1QkFBRTtBQUNYLGVBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztPQUN0Qjs7QUFFRCxjQUFVO2FBQUEsc0JBQUU7QUFDVixlQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztPQUM1Qzs7QUFFRCxnQkFBWTthQUFBLHdCQUFFO0FBQ1osZUFBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoQyxpQkFBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNCLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDVjs7OztTQTVMVSxjQUFjOzs7QUE4TDFCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ3JPSyxLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsS0FBSywyQkFBTSxVQUFVOztJQUV0QixPQUFPO0FBRUEsV0FGUCxPQUFPLENBRUMsS0FBSyxFQUFFOzBCQUZmLE9BQU87O0FBR1gsK0JBSEksT0FBTyw2Q0FHTCxLQUFLLEVBQUU7QUFDWCxRQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsd0JBQWtCLEVBQUUsSUFBSTtLQUN6QixDQUFDO0dBQ0g7O1lBUEcsT0FBTzs7ZUFBUCxPQUFPO0FBU1gsc0JBQWtCO2FBQUEsNEJBQUMsQ0FBQyxFQUFDO0FBQ25CLFlBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQixZQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBUyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzVDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDckUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULFlBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLFlBQUcsR0FBRyxFQUFFO0FBQ04sY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkQsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztTQUN0RCxNQUFLO0FBQ0osY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7U0FDdkQ7T0FDRjs7QUFFRCx5QkFBcUI7YUFBQSwrQkFBQyxDQUFDLEVBQUM7QUFDdEIsWUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztPQUN4Qjs7QUFFRCxrQkFBYzthQUFBLHdCQUFDLENBQUMsRUFBQztBQUNmLFlBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO09BQ3ZEOztBQUVELGVBQVc7YUFBQSxxQkFBQyxDQUFDLEVBQUM7QUFDWixZQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQzVDOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksY0FBYyxHQUFHLG1CQUFtQixHQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUQsWUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQ2pDOztZQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLGlCQUFpQixFQUFDLGVBQVksT0FBTyxFQUFDLGVBQWEsR0FBRyxHQUFDLGNBQWMsQUFBQzs7U0FDeEYsR0FBQyxJQUFJLENBQUM7O0FBRTFCLFlBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUNqQzs7WUFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxpQkFBaUIsRUFBQyxlQUFZLFNBQVMsRUFBQyxrQkFBZSxPQUFPLEVBQUMsS0FBSyxFQUFDLG1CQUFtQjtBQUN0SCxtQkFBTyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7O1NBRXhDLEdBQUMsSUFBSSxDQUFDO0FBQ3JCLFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUMzQywrQkFBTyxJQUFJLEVBQUMsTUFBTSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUMsUUFBUSxBQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUUsR0FBQyxJQUFJLENBQUM7QUFDbkosWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxHQUFDLElBQUksQ0FBQztBQUNuRixZQUFJLFlBQVksR0FBRztBQUNqQixpQkFBTyxFQUFFLE1BQU07QUFDZixzQkFBWSxFQUFFLENBQUM7U0FDaEIsQ0FBQztBQUNGLGVBQ0U7OztVQUNFOztjQUFLLFNBQVMsRUFBQyx3QkFBd0IsRUFBQyxJQUFJLEVBQUMsT0FBTyxFQUFDLGNBQVcsS0FBSztZQUNsRSxTQUFTO1lBQUUsU0FBUztXQUNqQjtVQUNMLGVBQWU7VUFDaEI7O2NBQUssR0FBRyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMscUJBQXFCLEVBQUMsS0FBSyxFQUFFLFlBQVksQUFBQztZQUNyRTs7Z0JBQVEsSUFBSSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsT0FBTyxFQUFDLGNBQVcsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztjQUFDOztrQkFBTSxlQUFZLE1BQU07O2VBQWU7YUFBUztZQUNwSjs7OzthQUEwQjtZQUFBLDhCQUFNLEdBQUcsRUFBQyxhQUFhLEdBQVE7V0FDckQ7VUFDTCxLQUFLO1NBQ0YsQ0FDUDtPQUNGOztBQUVELHdCQUFvQjthQUFBLDhCQUFDLGNBQWMsRUFBQzs7QUFFbEMsWUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUN6RCxpQkFDRTs7Y0FBSyxTQUFTLEVBQUMsWUFBWSxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxBQUFDO1lBQzVDOzs7Y0FBUSxNQUFNLENBQUMsSUFBSTthQUFTO1lBQzVCLCtCQUFPLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxHQUFDLENBQUMsQUFBQyxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLGNBQWMsRUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQUFBQyxHQUFTO1dBQy9GLENBQ047U0FDSCxDQUFDLENBQUM7QUFDSCxZQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUMzRCxlQUNFOztZQUFLLFNBQVMsRUFBRSxVQUFVLEFBQUMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxRQUFRLEVBQUMsZUFBWSxNQUFNO1VBQ3hFOztjQUFLLFNBQVMsRUFBQyx1QkFBdUI7WUFDcEM7O2dCQUFLLFNBQVMsRUFBQyxlQUFlO2NBQzVCOztrQkFBSyxTQUFTLEVBQUMsY0FBYztnQkFDM0I7O29CQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxnQkFBYSxPQUFPLEVBQUMsY0FBVyxPQUFPO2tCQUFDOztzQkFBTSxlQUFZLE1BQU07O21CQUFlO2lCQUFTO2dCQUNoSTs7b0JBQUksU0FBUyxFQUFDLGFBQWE7O2lCQUFnQjtlQUN2QztjQUNOOztrQkFBSyxTQUFTLEVBQUMsWUFBWTtnQkFDeEIsVUFBVTtlQUNQO2NBQ047O2tCQUFLLFNBQVMsRUFBQyxjQUFjO2dCQUMzQjs7b0JBQVEsSUFBSSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsaUJBQWlCLEVBQUMsZ0JBQWEsT0FBTzs7aUJBQWU7Z0JBQ3JGOztvQkFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxpQkFBaUIsRUFBQyxnQkFBYSxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7O2lCQUFjO2VBQzdIO2FBQ0Y7V0FDRjtTQUNGLENBQ1A7T0FDRjs7OztTQWxHRyxPQUFPO0dBQVMsS0FBSyxDQUFDLFNBQVM7O0FBb0dyQyxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDOUIsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMvQixjQUFZLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2xDLGNBQVksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDbEMsY0FBWSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNsQyxTQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQzlCLG1CQUFpQixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtDQUMxQyxDQUFDOztBQUVGLE9BQU8sQ0FBQyxZQUFZLEdBQUc7QUFDckIsY0FBWSxFQUFFLEtBQUs7QUFDbkIsY0FBWSxFQUFFLEtBQUs7QUFDbkIsY0FBWSxFQUFFLEtBQUs7Q0FDcEIsQ0FBQTtpQkFDYyxPQUFPOzs7Ozs7O0lDdkhmLEtBQUssMkJBQU0sU0FBUzs7aUJBQ1o7O0FBRWIsaUJBQWUsRUFBQSx5QkFBQyxLQUFLLEVBQUU7QUFDckIsUUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxRQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUN6QixRQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDO0FBQ3hELFFBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0MsU0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFDMUIsU0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQ2hDLFFBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsV0FBTyxJQUFJLENBQUM7R0FDYjs7Q0FFRjs7Ozs7OztJQ2RNLGNBQWMsMkJBQU0sa0JBQWtCOztJQUN0QyxpQkFBaUIsMkJBQU0scUJBQXFCOztJQUMzQyxZQUFZLFdBQU8sd0JBQXdCLEVBQTNDLFlBQVk7O0FBRXBCLElBQUcsTUFBTSxFQUFDO0FBQ1IsUUFBTSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDdkMsUUFBTSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0NBQzlDO2lCQUNjO0FBQ2IsZ0JBQWMsRUFBZCxjQUFjO0FBQ2QsbUJBQWlCLEVBQWpCLGlCQUFpQjtBQUNqQixjQUFZLEVBQVosWUFBWTtDQUNiIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Jvb3RzdHJhcFRhYmxlLCBUYWJsZUhlYWRlckNvbHVtbn0gZnJvbSAncmVhY3QtYm9vdHN0cmFwLXRhYmxlJztcblxudmFyIHByb2R1Y3RzID0gW107XG5cbmZ1bmN0aW9uIGFkZFByb2R1Y3RzKHF1YW50aXR5KSB7XG4gIHZhciBzdGFydElkID0gcHJvZHVjdHMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHF1YW50aXR5OyBpKyspIHtcbiAgICB2YXIgaWQgPSBzdGFydElkICsgaTtcbiAgICBwcm9kdWN0cy5wdXNoKHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIG5hbWU6IFwiSXRlbSBuYW1lIFwiICsgaWQsXG4gICAgICBwcmljZTogMTAwICsgaVxuICAgIH0pO1xuICB9XG59XG5cbmFkZFByb2R1Y3RzKDcwKTtcblxuZnVuY3Rpb24gb25Sb3dTZWxlY3Qocm93LCBpc1NlbGVjdGVkKXtcbiAgY29uc29sZS5sb2cocm93KTtcbiAgY29uc29sZS5sb2coXCJzZWxlY3RlZDogXCIgKyBpc1NlbGVjdGVkKVxufVxuXG5mdW5jdGlvbiBvblNlbGVjdEFsbChpc1NlbGVjdGVkKXtcbiAgY29uc29sZS5sb2coXCJpcyBzZWxlY3QgYWxsOiBcIiArIGlzU2VsZWN0ZWQpO1xufVxuXG5mdW5jdGlvbiBvbkFmdGVyU2F2ZUNlbGwocm93LCBjZWxsTmFtZSwgY2VsbFZhbHVlKXtcbiAgY29uc29sZS5sb2coXCJTYXZlIGNlbGwgJ1wiK2NlbGxOYW1lK1wiJyB3aXRoIHZhbHVlICdcIitjZWxsVmFsdWUrXCInXCIpO1xuICBjb25zb2xlLmxvZyhcIlRodyB3aG9sZSByb3cgOlwiKTtcbiAgY29uc29sZS5sb2cocm93KTtcbn1cblxuZnVuY3Rpb24gb25BZnRlclRhYmxlQ29tcGxldGUoKXtcbiAgY29uc29sZS5sb2coJ1RhYmxlIHJlbmRlciBjb21wbGV0ZS4nKTtcbn1cblxuZnVuY3Rpb24gb25BZnRlckRlbGV0ZVJvdyhyb3dLZXlzKXtcbiAgY29uc29sZS5sb2coXCJvbkFmdGVyRGVsZXRlUm93XCIpO1xuICBjb25zb2xlLmxvZyhyb3dLZXlzKTtcbn1cblxuZnVuY3Rpb24gb25BZnRlckluc2VydFJvdyhyb3cpe1xuICBjb25zb2xlLmxvZyhcIm9uQWZ0ZXJJbnNlcnRSb3dcIik7XG4gIGNvbnNvbGUubG9nKHJvdyk7XG59XG5cbnZhciBzZWxlY3RSb3dQcm9wID0ge1xuICBtb2RlOiBcImNoZWNrYm94XCIsXG4gIGNsaWNrVG9TZWxlY3Q6IHRydWUsXG4gIHNlbGVjdGVkOiBbXSwgLy9kZWZhdWx0IHNlbGVjdCBvbiB0YWJsZVxuICBiZ0NvbG9yOiBcInJnYigyMzgsIDE5MywgMjEzKVwiLFxuICBvblNlbGVjdDogb25Sb3dTZWxlY3QsXG4gIG9uU2VsZWN0QWxsOiBvblNlbGVjdEFsbFxufTtcblxudmFyIGNlbGxFZGl0UHJvcCA9IHtcbiAgbW9kZTogXCJjbGlja1wiLFxuICBibHVyVG9TYXZlOiB0cnVlLFxuICBhZnRlclNhdmVDZWxsOiBvbkFmdGVyU2F2ZUNlbGxcbn07XG5cbnZhciBvcHRpb25zID0ge1xuICBzb3J0TmFtZTogXCJuYW1lXCIsICAvL2RlZmF1bHQgc29ydCBjb2x1bW4gbmFtZVxuICBzb3J0T3JkZXI6IFwiZGVzY1wiLCAgLy9kZWZhdWx0IHNvcnQgb3JkZXJcbiAgYWZ0ZXJUYWJsZUNvbXBsZXRlOiBvbkFmdGVyVGFibGVDb21wbGV0ZSwgLy8gQSBob29rIGZvciBhZnRlciB0YWJsZSByZW5kZXIgY29tcGxldGUuXG4gIGFmdGVyRGVsZXRlUm93OiBvbkFmdGVyRGVsZXRlUm93LCAgLy8gQSBob29rIGZvciBhZnRlciBkcm9waW5nIHJvd3MuXG4gIGFmdGVySW5zZXJ0Um93OiBvbkFmdGVySW5zZXJ0Um93ICAgLy8gQSBob29rIGZvciBhZnRlciBpbnNlcnQgcm93c1xufTtcblxuXG5mdW5jdGlvbiBwcmljZUZvcm1hdHRlcihjZWxsLCByb3cpe1xuICByZXR1cm4gJzxpIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi11c2RcIj48L2k+ICcgKyBjZWxsO1xufVxuXG5SZWFjdC5yZW5kZXIoXG4gIDxCb290c3RyYXBUYWJsZSBkYXRhPXtwcm9kdWN0c30gc3RyaXBlZD17dHJ1ZX0gaG92ZXI9e3RydWV9IHBhZ2luYXRpb249e3RydWV9IHNlbGVjdFJvdz17c2VsZWN0Um93UHJvcH0gY2VsbEVkaXQ9e2NlbGxFZGl0UHJvcH1cbiAgICAgICAgICAgICAgICAgIGluc2VydFJvdz17dHJ1ZX0gZGVsZXRlUm93PXt0cnVlfSBzZWFyY2g9e3RydWV9IGNvbHVtbkZpbHRlcj17dHJ1ZX0gb3B0aW9ucz17b3B0aW9uc30+XG4gICAgICA8VGFibGVIZWFkZXJDb2x1bW4gZGF0YUZpZWxkPVwiaWRcIiBkYXRhQWxpZ249XCJjZW50ZXJcIiBkYXRhU29ydD17dHJ1ZX0gaXNLZXk9e3RydWV9PlByb2R1Y3QgSUQ8L1RhYmxlSGVhZGVyQ29sdW1uPlxuICAgICAgPFRhYmxlSGVhZGVyQ29sdW1uIGRhdGFGaWVsZD1cIm5hbWVcIiBkYXRhU29ydD17dHJ1ZX0+UHJvZHVjdCBOYW1lPC9UYWJsZUhlYWRlckNvbHVtbj5cbiAgICAgIDxUYWJsZUhlYWRlckNvbHVtbiBkYXRhRmllbGQ9XCJwcmljZVwiIGRhdGFGb3JtYXQ9e3ByaWNlRm9ybWF0dGVyfSBlZGl0YWJsZT17ZmFsc2V9PlByb2R1Y3QgUHJpY2U8L1RhYmxlSGVhZGVyQ29sdW1uPlxuICA8L0Jvb3RzdHJhcFRhYmxlPixcblx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiYXNpY1wiKVxuKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKVxuICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHtcbiAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuJyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoaGFuZGxlcikpIHtcbiAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKVxuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG5cbiAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7XG4gICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKVxuICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/XG4gICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICBlbHNlIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2VcbiAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07XG5cbiAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcbiAgICB2YXIgbTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykpIHtcbiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgICB9XG5cbiAgICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkge1xuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgdmFyIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHRoaXMub24odHlwZSwgZyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBlbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZFxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBwb3NpdGlvbiA9IC0xO1xuXG4gIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fFxuICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcblxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykge1xuICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG4gICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIga2V5LCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykge1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICB9IGVsc2Uge1xuICAgIC8vIExJRk8gb3JkZXJcbiAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aClcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7XG4gIH1cbiAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IFtdO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XG4gIGVsc2VcbiAgICByZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IDA7XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24oZW1pdHRlci5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSAxO1xuICBlbHNlXG4gICAgcmV0ID0gZW1pdHRlci5fZXZlbnRzW3R5cGVdLmxlbmd0aDtcbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudFF1ZXVlO1xuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICAgICAgICBjdXJyZW50UXVldWVbaV0oKTtcbiAgICAgICAgfVxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG59XG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHF1ZXVlLnB1c2goZnVuKTtcbiAgICBpZiAoIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbi8vIFRPRE8oc2h0eWxtYW4pXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE1IEplZCBXYXRzb24uXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG4gIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG5cbmZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdHZhciBjbGFzc2VzID0gJyc7XG5cdHZhciBhcmc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0aWYgKCFhcmcpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIGFyZyB8fCAnbnVtYmVyJyA9PT0gdHlwZW9mIGFyZykge1xuXHRcdFx0Y2xhc3NlcyArPSAnICcgKyBhcmc7XG5cdFx0fSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuXHRcdFx0Y2xhc3NlcyArPSAnICcgKyBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fSBlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIGFyZykge1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRpZiAoIWFyZy5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8ICFhcmdba2V5XSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNsYXNzZXMgKz0gJyAnICsga2V5O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gY2xhc3Nlcy5zdWJzdHIoMSk7XG59XG5cbi8vIHNhZmVseSBleHBvcnQgY2xhc3NOYW1lcyBmb3Igbm9kZSAvIGJyb3dzZXJpZnlcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG59XG5cbi8vIHNhZmVseSBleHBvcnQgY2xhc3NOYW1lcyBmb3IgUmVxdWlyZUpTXG5pZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuXHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdH0pO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEF1dG9Gb2N1c01peGluXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGZvY3VzTm9kZSA9IHJlcXVpcmUoXCIuL2ZvY3VzTm9kZVwiKTtcblxudmFyIEF1dG9Gb2N1c01peGluID0ge1xuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICBmb2N1c05vZGUodGhpcy5nZXRET01Ob2RlKCkpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvRm9jdXNNaXhpbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZShcIi4vRXZlbnRQcm9wYWdhdG9yc1wiKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xudmFyIEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZSA9IHJlcXVpcmUoXCIuL0ZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZVwiKTtcbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljQ29tcG9zaXRpb25FdmVudFwiKTtcbnZhciBTeW50aGV0aWNJbnB1dEV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljSW5wdXRFdmVudFwiKTtcblxudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG5cbnZhciBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl07IC8vIFRhYiwgUmV0dXJuLCBFc2MsIFNwYWNlXG52YXIgU1RBUlRfS0VZQ09ERSA9IDIyOTtcblxudmFyIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSAoXG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJlxuICAnQ29tcG9zaXRpb25FdmVudCcgaW4gd2luZG93XG4pO1xuXG52YXIgZG9jdW1lbnRNb2RlID0gbnVsbDtcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHtcbiAgZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufVxuXG4vLyBXZWJraXQgb2ZmZXJzIGEgdmVyeSB1c2VmdWwgYHRleHRJbnB1dGAgZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuLy8gZGlyZWN0bHkgcmVwcmVzZW50IGBiZWZvcmVJbnB1dGAuIFRoZSBJRSBgdGV4dGlucHV0YCBldmVudCBpcyBub3QgYXNcbi8vIHVzZWZ1bCwgc28gd2UgZG9uJ3QgdXNlIGl0LlxudmFyIGNhblVzZVRleHRJbnB1dEV2ZW50ID0gKFxuICBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiZcbiAgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmXG4gICFkb2N1bWVudE1vZGUgJiZcbiAgIWlzUHJlc3RvKClcbik7XG5cbi8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG52YXIgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPSAoXG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJlxuICAoXG4gICAgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8IGRvY3VtZW50TW9kZSAmJiBkb2N1bWVudE1vZGUgPiA4ICYmIGRvY3VtZW50TW9kZSA8PSAxMSlcbiAgKVxuKTtcblxuLyoqXG4gKiBPcGVyYSA8PSAxMiBpbmNsdWRlcyBUZXh0RXZlbnQgaW4gd2luZG93LCBidXQgZG9lcyBub3QgZmlyZVxuICogdGV4dCBpbnB1dCBldmVudHMuIFJlbHkgb24ga2V5cHJlc3MgaW5zdGVhZC5cbiAqL1xuZnVuY3Rpb24gaXNQcmVzdG8oKSB7XG4gIHZhciBvcGVyYSA9IHdpbmRvdy5vcGVyYTtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygb3BlcmEgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9wZXJhLnZlcnNpb24gPT09ICdmdW5jdGlvbicgJiZcbiAgICBwYXJzZUludChvcGVyYS52ZXJzaW9uKCksIDEwKSA8PSAxMlxuICApO1xufVxuXG52YXIgU1BBQ0VCQVJfQ09ERSA9IDMyO1xudmFyIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNQQUNFQkFSX0NPREUpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbi8vIEV2ZW50cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBuYW1lcy5cbnZhciBldmVudFR5cGVzID0ge1xuICBiZWZvcmVJbnB1dDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25CZWZvcmVJbnB1dDogbnVsbH0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkJlZm9yZUlucHV0Q2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25FbmQsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BUZXh0SW5wdXQsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcFBhc3RlXG4gICAgXVxuICB9LFxuICBjb21wb3NpdGlvbkVuZDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Db21wb3NpdGlvbkVuZDogbnVsbH0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNvbXBvc2l0aW9uRW5kQ2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25FbmQsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleURvd24sXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlVcCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duXG4gICAgXVxuICB9LFxuICBjb21wb3NpdGlvblN0YXJ0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNvbXBvc2l0aW9uU3RhcnQ6IG51bGx9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Db21wb3NpdGlvblN0YXJ0Q2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25TdGFydCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5RG93bixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3MsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVVwLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd25cbiAgICBdXG4gIH0sXG4gIGNvbXBvc2l0aW9uVXBkYXRlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNvbXBvc2l0aW9uVXBkYXRlOiBudWxsfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ29tcG9zaXRpb25VcGRhdGVDYXB0dXJlOiBudWxsfSlcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BCbHVyLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvblVwZGF0ZSxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5RG93bixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3MsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVVwLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd25cbiAgICBdXG4gIH1cbn07XG5cbi8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYW5kbGVkIGEga2V5cHJlc3Mgb24gdGhlIHNwYWNlIGtleS5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYSBuYXRpdmUga2V5cHJlc3MgZXZlbnQgaXMgYXNzdW1lZCB0byBiZSBhIGNvbW1hbmQuXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgRmlyZWZveCBmaXJlcyBga2V5cHJlc3NgIGV2ZW50cyBmb3Iga2V5IGNvbW1hbmRzXG4gKiAoY3V0LCBjb3B5LCBzZWxlY3QtYWxsLCBldGMuKSBldmVuIHRob3VnaCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAoXG4gICAgKG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHwgbmF0aXZlRXZlbnQuYWx0S2V5IHx8IG5hdGl2ZUV2ZW50Lm1ldGFLZXkpICYmXG4gICAgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICAgIShuYXRpdmVFdmVudC5jdHJsS2V5ICYmIG5hdGl2ZUV2ZW50LmFsdEtleSlcbiAgKTtcbn1cblxuXG4vKipcbiAqIFRyYW5zbGF0ZSBuYXRpdmUgdG9wIGxldmVsIGV2ZW50cyBpbnRvIGV2ZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUodG9wTGV2ZWxUeXBlKSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uU3RhcnQ6XG4gICAgICByZXR1cm4gZXZlbnRUeXBlcy5jb21wb3NpdGlvblN0YXJ0O1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvbkVuZDpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kO1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvblVwZGF0ZTpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uVXBkYXRlO1xuICB9XG59XG5cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAoXG4gICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEtleURvd24gJiZcbiAgICBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFXG4gICk7XG59XG5cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgbW9kZSB0aGluayB0aGF0IHRoaXMgZXZlbnQgaXMgdGhlIGVuZCBvZiBjb21wb3NpdGlvbj9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleVVwOlxuICAgICAgLy8gQ29tbWFuZCBrZXlzIGluc2VydCBvciBjbGVhciBJTUUgaW5wdXQuXG4gICAgICByZXR1cm4gKEVORF9LRVlDT0RFUy5pbmRleE9mKG5hdGl2ZUV2ZW50LmtleUNvZGUpICE9PSAtMSk7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleURvd246XG4gICAgICAvLyBFeHBlY3QgSU1FIGtleUNvZGUgb24gZWFjaCBrZXlkb3duLiBJZiB3ZSBnZXQgYW55IG90aGVyXG4gICAgICAvLyBjb2RlIHdlIG11c3QgaGF2ZSBleGl0ZWQgZWFybGllci5cbiAgICAgIHJldHVybiAobmF0aXZlRXZlbnQua2V5Q29kZSAhPT0gU1RBUlRfS0VZQ09ERSk7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzOlxuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd246XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEJsdXI6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gZmFsbGJhY2sgb2JqZWN0LCBpZiBhbnkuXG52YXIgY3VycmVudENvbXBvc2l0aW9uID0gbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LlxuICovXG5mdW5jdGlvbiBleHRyYWN0Q29tcG9zaXRpb25FdmVudChcbiAgdG9wTGV2ZWxUeXBlLFxuICB0b3BMZXZlbFRhcmdldCxcbiAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgbmF0aXZlRXZlbnRcbikge1xuICB2YXIgZXZlbnRUeXBlO1xuICB2YXIgZmFsbGJhY2tEYXRhO1xuXG4gIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgZXZlbnRUeXBlID0gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUodG9wTGV2ZWxUeXBlKTtcbiAgfSBlbHNlIGlmICghY3VycmVudENvbXBvc2l0aW9uKSB7XG4gICAgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICBldmVudFR5cGUgPSBldmVudFR5cGVzLmNvbXBvc2l0aW9uU3RhcnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSkge1xuICAgIGV2ZW50VHlwZSA9IGV2ZW50VHlwZXMuY29tcG9zaXRpb25FbmQ7XG4gIH1cblxuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgY29tcG9zaXRpb24gaXMgc3RvcmVkIHN0YXRpY2FsbHkgYW5kIG11c3Qgbm90IGJlXG4gICAgLy8gb3ZlcndyaXR0ZW4gd2hpbGUgY29tcG9zaXRpb24gY29udGludWVzLlxuICAgIGlmICghY3VycmVudENvbXBvc2l0aW9uICYmIGV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlcy5jb21wb3NpdGlvblN0YXJ0KSB7XG4gICAgICBjdXJyZW50Q29tcG9zaXRpb24gPSBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUuZ2V0UG9vbGVkKHRvcExldmVsVGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlcy5jb21wb3NpdGlvbkVuZCkge1xuICAgICAgaWYgKGN1cnJlbnRDb21wb3NpdGlvbikge1xuICAgICAgICBmYWxsYmFja0RhdGEgPSBjdXJyZW50Q29tcG9zaXRpb24uZ2V0RGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBldmVudCA9IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuZ2V0UG9vbGVkKFxuICAgIGV2ZW50VHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldElELFxuICAgIG5hdGl2ZUV2ZW50XG4gICk7XG5cbiAgaWYgKGZhbGxiYWNrRGF0YSkge1xuICAgIC8vIEluamVjdCBkYXRhIGdlbmVyYXRlZCBmcm9tIGZhbGxiYWNrIHBhdGggaW50byB0aGUgc3ludGhldGljIGV2ZW50LlxuICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgcHJvcGVydHkgb2YgbmF0aXZlIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UuXG4gICAgZXZlbnQuZGF0YSA9IGZhbGxiYWNrRGF0YTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VzdG9tRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgIGlmIChjdXN0b21EYXRhICE9PSBudWxsKSB7XG4gICAgICBldmVudC5kYXRhID0gY3VzdG9tRGF0YTtcbiAgICB9XG4gIH1cblxuICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7P3N0cmluZ30gVGhlIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgYGJlZm9yZUlucHV0YCBldmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uRW5kOlxuICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlQcmVzczpcbiAgICAgIC8qKlxuICAgICAgICogSWYgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCBvdXIgZ29hbCBpcyB0byBtYWtlXG4gICAgICAgKiB1c2Ugb2YgdGhlbS4gSG93ZXZlciwgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2U6IHRoZSBzcGFjZWJhciBrZXkuXG4gICAgICAgKiBJbiBXZWJraXQsIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBhIHNwYWNlYmFyIGB0ZXh0SW5wdXRgIGV2ZW50XG4gICAgICAgKiBjYW5jZWxzIGNoYXJhY3RlciBpbnNlcnRpb24sIGJ1dCBpdCAqYWxzbyogY2F1c2VzIHRoZSBicm93c2VyXG4gICAgICAgKiB0byBmYWxsIGJhY2sgdG8gaXRzIGRlZmF1bHQgc3BhY2ViYXIgYmVoYXZpb3Igb2Ygc2Nyb2xsaW5nIHRoZVxuICAgICAgICogcGFnZS5cbiAgICAgICAqXG4gICAgICAgKiBUcmFja2luZyBhdDpcbiAgICAgICAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNTUxMDNcbiAgICAgICAqXG4gICAgICAgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB1c2UgdGhlIGtleXByZXNzIGV2ZW50IGFzIGlmIG5vIGB0ZXh0SW5wdXRgXG4gICAgICAgKiBldmVudCBpcyBhdmFpbGFibGUuXG4gICAgICAgKi9cbiAgICAgIHZhciB3aGljaCA9IG5hdGl2ZUV2ZW50LndoaWNoO1xuICAgICAgaWYgKHdoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gdHJ1ZTtcbiAgICAgIHJldHVybiBTUEFDRUJBUl9DSEFSO1xuXG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFRleHRJbnB1dDpcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhcmFjdGVycyB0byBiZSBhZGRlZCB0byB0aGUgRE9NLlxuICAgICAgdmFyIGNoYXJzID0gbmF0aXZlRXZlbnQuZGF0YTtcblxuICAgICAgLy8gSWYgaXQncyBhIHNwYWNlYmFyIGNoYXJhY3RlciwgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWRcbiAgICAgIC8vIGl0IGF0IHRoZSBrZXlwcmVzcyBsZXZlbCBhbmQgYmFpbCBpbW1lZGlhdGVseS4gQW5kcm9pZCBDaHJvbWVcbiAgICAgIC8vIGRvZXNuJ3QgZ2l2ZSB1cyBrZXljb2Rlcywgc28gd2UgbmVlZCB0byBibGFja2xpc3QgaXQuXG4gICAgICBpZiAoY2hhcnMgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFzU3BhY2VLZXlwcmVzcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEZvciBvdGhlciBuYXRpdmUgZXZlbnQgdHlwZXMsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEZvciBicm93c2VycyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZSBgdGV4dElucHV0YCBldmVudCwgZXh0cmFjdCB0aGVcbiAqIGFwcHJvcHJpYXRlIHN0cmluZyB0byB1c2UgZm9yIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7P3N0cmluZ30gVGhlIGZhbGxiYWNrIHN0cmluZyBmb3IgdGhpcyBgYmVmb3JlSW5wdXRgIGV2ZW50LlxuICovXG5mdW5jdGlvbiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGNvbXBvc2luZyAoSU1FKSBhbmQgdXNpbmcgYSBmYWxsYmFjayB0byBkbyBzbyxcbiAgLy8gdHJ5IHRvIGV4dHJhY3QgdGhlIGNvbXBvc2VkIGNoYXJhY3RlcnMgZnJvbSB0aGUgZmFsbGJhY2sgb2JqZWN0LlxuICBpZiAoY3VycmVudENvbXBvc2l0aW9uKSB7XG4gICAgaWYgKFxuICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uRW5kIHx8XG4gICAgICBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudClcbiAgICApIHtcbiAgICAgIHZhciBjaGFycyA9IGN1cnJlbnRDb21wb3NpdGlvbi5nZXREYXRhKCk7XG4gICAgICBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUucmVsZWFzZShjdXJyZW50Q29tcG9zaXRpb24pO1xuICAgICAgY3VycmVudENvbXBvc2l0aW9uID0gbnVsbDtcbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BQYXN0ZTpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlQcmVzczpcbiAgICAgIC8qKlxuICAgICAgICogQXMgb2YgdjI3LCBGaXJlZm94IG1heSBmaXJlIGtleXByZXNzIGV2ZW50cyBldmVuIHdoZW4gbm8gY2hhcmFjdGVyXG4gICAgICAgKiB3aWxsIGJlIGluc2VydGVkLiBBIGZldyBwb3NzaWJpbGl0aWVzOlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyBgMGAuIEFycm93IGtleXMsIEVzYyBrZXksIGV0Yy5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBubyBjaGFyIGlzIGF2YWlsYWJsZS5cbiAgICAgICAqICAgRXg6ICdBbHRHciArIGRgIGluIFBvbGlzaC4gVGhlcmUgaXMgbm8gbW9kaWZpZWQgY2hhcmFjdGVyIGZvclxuICAgICAgICogICB0aGlzIGtleSBjb21iaW5hdGlvbiBhbmQgbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gdGhlXG4gICAgICAgKiAgIGRvY3VtZW50LCBidXQgRkYgZmlyZXMgdGhlIGtleXByZXNzIGZvciBjaGFyIGNvZGUgYDEwMGAgYW55d2F5LlxuICAgICAgICogICBObyBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgYSBjb21tYW5kIGNvbWJpbmF0aW9uIGlzXG4gICAgICAgKiAgIGJlaW5nIHVzZWQuIEV4OiBgQ21kK0NgLiBObyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGFuZCBub1xuICAgICAgICogICBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKi9cbiAgICAgIGlmIChuYXRpdmVFdmVudC53aGljaCAmJiAhaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvbkVuZDpcbiAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5mdW5jdGlvbiBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChcbiAgdG9wTGV2ZWxUeXBlLFxuICB0b3BMZXZlbFRhcmdldCxcbiAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgbmF0aXZlRXZlbnRcbikge1xuICB2YXIgY2hhcnM7XG5cbiAgaWYgKGNhblVzZVRleHRJbnB1dEV2ZW50KSB7XG4gICAgY2hhcnMgPSBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNoYXJzID0gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICB9XG5cbiAgLy8gSWYgbm8gY2hhcmFjdGVycyBhcmUgYmVpbmcgaW5zZXJ0ZWQsIG5vIEJlZm9yZUlucHV0IGV2ZW50IHNob3VsZFxuICAvLyBiZSBmaXJlZC5cbiAgaWYgKCFjaGFycykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGV2ZW50ID0gU3ludGhldGljSW5wdXRFdmVudC5nZXRQb29sZWQoXG4gICAgZXZlbnRUeXBlcy5iZWZvcmVJbnB1dCxcbiAgICB0b3BMZXZlbFRhcmdldElELFxuICAgIG5hdGl2ZUV2ZW50XG4gICk7XG5cbiAgZXZlbnQuZGF0YSA9IGNoYXJzO1xuICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGBvbkJlZm9yZUlucHV0YCBldmVudCB0byBtYXRjaFxuICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDUvI2V2ZW50cy1pbnB1dGV2ZW50cy5cbiAqXG4gKiBUaGlzIGV2ZW50IHBsdWdpbiBpcyBiYXNlZCBvbiB0aGUgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50XG4gKiBhdmFpbGFibGUgaW4gQ2hyb21lLCBTYWZhcmksIE9wZXJhLCBhbmQgSUUuIFRoaXMgZXZlbnQgZmlyZXMgYWZ0ZXJcbiAqIGBvbktleVByZXNzYCBhbmQgYG9uQ29tcG9zaXRpb25FbmRgLCBidXQgYmVmb3JlIGBvbklucHV0YC5cbiAqXG4gKiBgYmVmb3JlSW5wdXRgIGlzIHNwZWMnZCBidXQgbm90IGltcGxlbWVudGVkIGluIGFueSBicm93c2VycywgYW5kXG4gKiB0aGUgYGlucHV0YCBldmVudCBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBoYXNcbiAqIGFjdHVhbGx5IGJlZW4gYWRkZWQsIGNvbnRyYXJ5IHRvIHRoZSBzcGVjLiBUaHVzLCBgdGV4dElucHV0YCBpcyB0aGUgYmVzdFxuICogYXZhaWxhYmxlIGV2ZW50IHRvIGlkZW50aWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGluc2VydGVkXG4gKiBpbnRvIHRoZSB0YXJnZXQgbm9kZS5cbiAqXG4gKiBUaGlzIHBsdWdpbiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBgY29tcG9zaXRpb25gIGV2ZW50cywgdGh1c1xuICogYWxsb3dpbmcgdXMgdG8gc2hhcmUgY29tcG9zaXRpb24gZmFsbGJhY2sgY29kZSBmb3IgYm90aCBgYmVmb3JlSW5wdXRgIGFuZFxuICogYGNvbXBvc2l0aW9uYCBldmVudCB0eXBlcy5cbiAqL1xudmFyIEJlZm9yZUlucHV0RXZlbnRQbHVnaW4gPSB7XG5cbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9XG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICB0b3BMZXZlbFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICBuYXRpdmVFdmVudFxuICApIHtcbiAgICByZXR1cm4gW1xuICAgICAgZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICApLFxuICAgICAgZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICApXG4gICAgXTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIENTU1Byb3BlcnR5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENTUyBwcm9wZXJ0aWVzIHdoaWNoIGFjY2VwdCBudW1iZXJzIGJ1dCBhcmUgbm90IGluIHVuaXRzIG9mIFwicHhcIi5cbiAqL1xudmFyIGlzVW5pdGxlc3NOdW1iZXIgPSB7XG4gIGJveEZsZXg6IHRydWUsXG4gIGJveEZsZXhHcm91cDogdHJ1ZSxcbiAgY29sdW1uQ291bnQ6IHRydWUsXG4gIGZsZXg6IHRydWUsXG4gIGZsZXhHcm93OiB0cnVlLFxuICBmbGV4UG9zaXRpdmU6IHRydWUsXG4gIGZsZXhTaHJpbms6IHRydWUsXG4gIGZsZXhOZWdhdGl2ZTogdHJ1ZSxcbiAgZm9udFdlaWdodDogdHJ1ZSxcbiAgbGluZUNsYW1wOiB0cnVlLFxuICBsaW5lSGVpZ2h0OiB0cnVlLFxuICBvcGFjaXR5OiB0cnVlLFxuICBvcmRlcjogdHJ1ZSxcbiAgb3JwaGFuczogdHJ1ZSxcbiAgd2lkb3dzOiB0cnVlLFxuICB6SW5kZXg6IHRydWUsXG4gIHpvb206IHRydWUsXG5cbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogdHJ1ZSxcbiAgc3Ryb2tlT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlV2lkdGg6IHRydWVcbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4ge3N0cmluZ30gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbnZhciBwcmVmaXhlcyA9IFsnV2Via2l0JywgJ21zJywgJ01veicsICdPJ107XG5cbi8vIFVzaW5nIE9iamVjdC5rZXlzIGhlcmUsIG9yIGVsc2UgdGhlIHZhbmlsbGEgZm9yLWluIGxvb3AgbWFrZXMgSUU4IGdvIGludG8gYW5cbi8vIGluZmluaXRlIGxvb3AsIGJlY2F1c2UgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgbmV3bHkgYWRkZWQgcHJvcHMgdG9vLlxuT2JqZWN0LmtleXMoaXNVbml0bGVzc051bWJlcikuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gIHByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXkocHJlZml4LCBwcm9wKV0gPSBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIE1vc3Qgc3R5bGUgcHJvcGVydGllcyBjYW4gYmUgdW5zZXQgYnkgZG9pbmcgLnN0eWxlW3Byb3BdID0gJycgYnV0IElFOFxuICogZG9lc24ndCBsaWtlIGRvaW5nIHRoYXQgd2l0aCBzaG9ydGhhbmQgcHJvcGVydGllcyBzbyBmb3IgdGhlIHByb3BlcnRpZXMgdGhhdFxuICogSUU4IGJyZWFrcyBvbiwgd2hpY2ggYXJlIGxpc3RlZCBoZXJlLCB3ZSBpbnN0ZWFkIHVuc2V0IGVhY2ggb2YgdGhlXG4gKiBpbmRpdmlkdWFsIHByb3BlcnRpZXMuIFNlZSBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM4NS5cbiAqIFRoZSA0LXZhbHVlICdjbG9jaycgcHJvcGVydGllcyBsaWtlIG1hcmdpbiwgcGFkZGluZywgYm9yZGVyLXdpZHRoIHNlZW0gdG9cbiAqIGJlaGF2ZSB3aXRob3V0IGFueSBwcm9ibGVtcy4gQ3VyaW91c2x5LCBsaXN0LXN0eWxlIHdvcmtzIHRvbyB3aXRob3V0IGFueVxuICogc3BlY2lhbCBwcm9kZGluZy5cbiAqL1xudmFyIHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9ucyA9IHtcbiAgYmFja2dyb3VuZDoge1xuICAgIGJhY2tncm91bmRJbWFnZTogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb246IHRydWUsXG4gICAgYmFja2dyb3VuZFJlcGVhdDogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyOiB7XG4gICAgYm9yZGVyV2lkdGg6IHRydWUsXG4gICAgYm9yZGVyU3R5bGU6IHRydWUsXG4gICAgYm9yZGVyQ29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyQm90dG9tOiB7XG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IHRydWUsXG4gICAgYm9yZGVyQm90dG9tU3R5bGU6IHRydWUsXG4gICAgYm9yZGVyQm90dG9tQ29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyTGVmdDoge1xuICAgIGJvcmRlckxlZnRXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJMZWZ0U3R5bGU6IHRydWUsXG4gICAgYm9yZGVyTGVmdENvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgYm9yZGVyUmlnaHRXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJSaWdodFN0eWxlOiB0cnVlLFxuICAgIGJvcmRlclJpZ2h0Q29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyVG9wOiB7XG4gICAgYm9yZGVyVG9wV2lkdGg6IHRydWUsXG4gICAgYm9yZGVyVG9wU3R5bGU6IHRydWUsXG4gICAgYm9yZGVyVG9wQ29sb3I6IHRydWVcbiAgfSxcbiAgZm9udDoge1xuICAgIGZvbnRTdHlsZTogdHJ1ZSxcbiAgICBmb250VmFyaWFudDogdHJ1ZSxcbiAgICBmb250V2VpZ2h0OiB0cnVlLFxuICAgIGZvbnRTaXplOiB0cnVlLFxuICAgIGxpbmVIZWlnaHQ6IHRydWUsXG4gICAgZm9udEZhbWlseTogdHJ1ZVxuICB9XG59O1xuXG52YXIgQ1NTUHJvcGVydHkgPSB7XG4gIGlzVW5pdGxlc3NOdW1iZXI6IGlzVW5pdGxlc3NOdW1iZXIsXG4gIHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uczogc2hvcnRoYW5kUHJvcGVydHlFeHBhbnNpb25zXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENTU1Byb3BlcnR5O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBDU1NQcm9wZXJ0eU9wZXJhdGlvbnNcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ1NTUHJvcGVydHkgPSByZXF1aXJlKFwiLi9DU1NQcm9wZXJ0eVwiKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgY2FtZWxpemVTdHlsZU5hbWUgPSByZXF1aXJlKFwiLi9jYW1lbGl6ZVN0eWxlTmFtZVwiKTtcbnZhciBkYW5nZXJvdXNTdHlsZVZhbHVlID0gcmVxdWlyZShcIi4vZGFuZ2Vyb3VzU3R5bGVWYWx1ZVwiKTtcbnZhciBoeXBoZW5hdGVTdHlsZU5hbWUgPSByZXF1aXJlKFwiLi9oeXBoZW5hdGVTdHlsZU5hbWVcIik7XG52YXIgbWVtb2l6ZVN0cmluZ09ubHkgPSByZXF1aXJlKFwiLi9tZW1vaXplU3RyaW5nT25seVwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSBtZW1vaXplU3RyaW5nT25seShmdW5jdGlvbihzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGh5cGhlbmF0ZVN0eWxlTmFtZShzdHlsZU5hbWUpO1xufSk7XG5cbnZhciBzdHlsZUZsb2F0QWNjZXNzb3IgPSAnY3NzRmxvYXQnO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAvLyBJRTggb25seSBzdXBwb3J0cyBhY2Nlc3NpbmcgY3NzRmxvYXQgKHN0YW5kYXJkKSBhcyBzdHlsZUZsb2F0XG4gIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3NzRmxvYXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0eWxlRmxvYXRBY2Nlc3NvciA9ICdzdHlsZUZsb2F0JztcbiAgfVxufVxuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIC8vICdtc1RyYW5zZm9ybScgaXMgY29ycmVjdCwgYnV0IHRoZSBvdGhlciBwcmVmaXhlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWRcbiAgdmFyIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLztcblxuICAvLyBzdHlsZSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb25cbiAgdmFyIGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiA9IC87XFxzKiQvO1xuXG4gIHZhciB3YXJuZWRTdHlsZU5hbWVzID0ge307XG4gIHZhciB3YXJuZWRTdHlsZVZhbHVlcyA9IHt9O1xuXG4gIHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBmYWxzZSxcbiAgICAgICdVbnN1cHBvcnRlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsXG4gICAgICBuYW1lLFxuICAgICAgY2FtZWxpemVTdHlsZU5hbWUobmFtZSlcbiAgICApIDogbnVsbCk7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBmYWxzZSxcbiAgICAgICdVbnN1cHBvcnRlZCB2ZW5kb3ItcHJlZml4ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLFxuICAgICAgbmFtZSxcbiAgICAgIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpXG4gICAgKSA6IG51bGwpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24gPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZVZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgJiYgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdID0gdHJ1ZTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIGZhbHNlLFxuICAgICAgJ1N0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuXFwndCBjb250YWluIGEgc2VtaWNvbG9uLiAnICtcbiAgICAgICdUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsXG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUucmVwbGFjZShiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4sICcnKVxuICAgICkgOiBudWxsKTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKi9cbiAgdmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBpZiAobmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggQ1NTIHByb3BlcnRpZXMuXG4gKi9cbnZhciBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMgPSB7XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtYXBwaW5nIG9mIHN0eWxlIHByb3BlcnRpZXMgZm9yIHVzZSBhcyBpbmxpbmUgc3R5bGVzOlxuICAgKlxuICAgKiAgID4gY3JlYXRlTWFya3VwRm9yU3R5bGVzKHt3aWR0aDogJzIwMHB4JywgaGVpZ2h0OiAwfSlcbiAgICogICBcIndpZHRoOjIwMHB4O2hlaWdodDowO1wiXG4gICAqXG4gICAqIFVuZGVmaW5lZCB2YWx1ZXMgYXJlIGlnbm9yZWQgc28gdGhhdCBkZWNsYXJhdGl2ZSBwcm9ncmFtbWluZyBpcyBlYXNpZXIuXG4gICAqIFRoZSByZXN1bHQgc2hvdWxkIGJlIEhUTUwtZXNjYXBlZCBiZWZvcmUgaW5zZXJ0aW9uIGludG8gdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICAgKiBAcmV0dXJuIHs/c3RyaW5nfVxuICAgKi9cbiAgY3JlYXRlTWFya3VwRm9yU3R5bGVzOiBmdW5jdGlvbihzdHlsZXMpIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgc3R5bGVWYWx1ZSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICB3YXJuVmFsaWRTdHlsZShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0eWxlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBzZXJpYWxpemVkICs9IHByb2Nlc3NTdHlsZU5hbWUoc3R5bGVOYW1lKSArICc6JztcbiAgICAgICAgc2VyaWFsaXplZCArPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSkgKyAnOyc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemVkIHx8IG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIGZvciBtdWx0aXBsZSBzdHlsZXMgb24gYSBub2RlLiAgSWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXNcbiAgICogJycgKGVtcHR5IHN0cmluZyksIHRoZSBjb3JyZXNwb25kaW5nIHN0eWxlIHByb3BlcnR5IHdpbGwgYmUgdW5zZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzXG4gICAqL1xuICBzZXRWYWx1ZUZvclN0eWxlczogZnVuY3Rpb24obm9kZSwgc3R5bGVzKSB7XG4gICAgdmFyIHN0eWxlID0gbm9kZS5zdHlsZTtcbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICB3YXJuVmFsaWRTdHlsZShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdKTtcbiAgICAgIH1cbiAgICAgIHZhciBzdHlsZVZhbHVlID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdKTtcbiAgICAgIGlmIChzdHlsZU5hbWUgPT09ICdmbG9hdCcpIHtcbiAgICAgICAgc3R5bGVOYW1lID0gc3R5bGVGbG9hdEFjY2Vzc29yO1xuICAgICAgfVxuICAgICAgaWYgKHN0eWxlVmFsdWUpIHtcbiAgICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9IHN0eWxlVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXhwYW5zaW9uID0gQ1NTUHJvcGVydHkuc2hvcnRoYW5kUHJvcGVydHlFeHBhbnNpb25zW3N0eWxlTmFtZV07XG4gICAgICAgIGlmIChleHBhbnNpb24pIHtcbiAgICAgICAgICAvLyBTaG9ydGhhbmQgcHJvcGVydHkgdGhhdCBJRTggd29uJ3QgbGlrZSB1bnNldHRpbmcsIHNvIHVuc2V0IGVhY2hcbiAgICAgICAgICAvLyBjb21wb25lbnQgdG8gcGxhY2F0ZSBpdFxuICAgICAgICAgIGZvciAodmFyIGluZGl2aWR1YWxTdHlsZU5hbWUgaW4gZXhwYW5zaW9uKSB7XG4gICAgICAgICAgICBzdHlsZVtpbmRpdmlkdWFsU3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZVtzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDU1NQcm9wZXJ0eU9wZXJhdGlvbnM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZRMU5UVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdRMU5UVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6WEc0Z0tpQkFkSGx3WldOb1pXTnJjeUJ6ZEdGMGFXTXRiMjVzZVZ4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlFTlRVMUJ5YjNCbGNuUjVJRDBnY21WeGRXbHlaU2hjSWk0dlExTlRVSEp2Y0dWeWRIbGNJaWs3WEc1MllYSWdSWGhsWTNWMGFXOXVSVzUyYVhKdmJtMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOUZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkRndpS1R0Y2JseHVkbUZ5SUdOaGJXVnNhWHBsVTNSNWJHVk9ZVzFsSUQwZ2NtVnhkV2x5WlNoY0lpNHZZMkZ0Wld4cGVtVlRkSGxzWlU1aGJXVmNJaWs3WEc1MllYSWdaR0Z1WjJWeWIzVnpVM1I1YkdWV1lXeDFaU0E5SUhKbGNYVnBjbVVvWENJdUwyUmhibWRsY205MWMxTjBlV3hsVm1Gc2RXVmNJaWs3WEc1MllYSWdhSGx3YUdWdVlYUmxVM1I1YkdWT1lXMWxJRDBnY21WeGRXbHlaU2hjSWk0dmFIbHdhR1Z1WVhSbFUzUjViR1ZPWVcxbFhDSXBPMXh1ZG1GeUlHMWxiVzlwZW1WVGRISnBibWRQYm14NUlEMGdjbVZ4ZFdseVpTaGNJaTR2YldWdGIybDZaVk4wY21sdVowOXViSGxjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQndjbTlqWlhOelUzUjViR1ZPWVcxbElEMGdiV1Z0YjJsNlpWTjBjbWx1WjA5dWJIa29ablZ1WTNScGIyNG9jM1I1YkdWT1lXMWxLU0I3WEc0Z0lISmxkSFZ5YmlCb2VYQm9aVzVoZEdWVGRIbHNaVTVoYldVb2MzUjViR1ZPWVcxbEtUdGNibjBwTzF4dVhHNTJZWElnYzNSNWJHVkdiRzloZEVGalkyVnpjMjl5SUQwZ0oyTnpjMFpzYjJGMEp6dGNibWxtSUNoRmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRDNWpZVzVWYzJWRVQwMHBJSHRjYmlBZ0x5OGdTVVU0SUc5dWJIa2djM1Z3Y0c5eWRITWdZV05qWlhOemFXNW5JR056YzBac2IyRjBJQ2h6ZEdGdVpHRnlaQ2tnWVhNZ2MzUjViR1ZHYkc5aGRGeHVJQ0JwWmlBb1pHOWpkVzFsYm5RdVpHOWpkVzFsYm5SRmJHVnRaVzUwTG5OMGVXeGxMbU56YzBac2IyRjBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNCemRIbHNaVVpzYjJGMFFXTmpaWE56YjNJZ1BTQW5jM1I1YkdWR2JHOWhkQ2M3WEc0Z0lIMWNibjFjYmx4dWFXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0F2THlBbmJYTlVjbUZ1YzJadmNtMG5JR2x6SUdOdmNuSmxZM1FzSUdKMWRDQjBhR1VnYjNSb1pYSWdjSEpsWm1sNFpYTWdjMmh2ZFd4a0lHSmxJR05oY0dsMFlXeHBlbVZrWEc0Z0lIWmhjaUJpWVdSV1pXNWtiM0psWkZOMGVXeGxUbUZ0WlZCaGRIUmxjbTRnUFNBdlhpZy9PbmRsWW10cGRIeHRiM3A4YnlsYlFTMWFYUzg3WEc1Y2JpQWdMeThnYzNSNWJHVWdkbUZzZFdWeklITm9iM1ZzWkc0bmRDQmpiMjUwWVdsdUlHRWdjMlZ0YVdOdmJHOXVYRzRnSUhaaGNpQmlZV1JUZEhsc1pWWmhiSFZsVjJsMGFGTmxiV2xqYjJ4dmJsQmhkSFJsY200Z1BTQXZPMXhjY3lva0x6dGNibHh1SUNCMllYSWdkMkZ5Ym1Wa1UzUjViR1ZPWVcxbGN5QTlJSHQ5TzF4dUlDQjJZWElnZDJGeWJtVmtVM1I1YkdWV1lXeDFaWE1nUFNCN2ZUdGNibHh1SUNCMllYSWdkMkZ5YmtoNWNHaGxibUYwWldSVGRIbHNaVTVoYldVZ1BTQm1kVzVqZEdsdmJpaHVZVzFsS1NCN1hHNGdJQ0FnYVdZZ0tIZGhjbTVsWkZOMGVXeGxUbUZ0WlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa2dKaVlnZDJGeWJtVmtVM1I1YkdWT1lXMWxjMXR1WVcxbFhTa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhkaGNtNWxaRk4wZVd4bFRtRnRaWE5iYm1GdFpWMGdQU0IwY25WbE8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBblZXNXpkWEJ3YjNKMFpXUWdjM1I1YkdVZ2NISnZjR1Z5ZEhrZ0pYTXVJRVJwWkNCNWIzVWdiV1ZoYmlBbGN6OG5MRnh1SUNBZ0lDQWdibUZ0WlN4Y2JpQWdJQ0FnSUdOaGJXVnNhWHBsVTNSNWJHVk9ZVzFsS0c1aGJXVXBYRzRnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0I5TzF4dVhHNGdJSFpoY2lCM1lYSnVRbUZrVm1WdVpHOXlaV1JUZEhsc1pVNWhiV1VnUFNCbWRXNWpkR2x2YmlodVlXMWxLU0I3WEc0Z0lDQWdhV1lnS0hkaGNtNWxaRk4wZVd4bFRtRnRaWE11YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrZ0ppWWdkMkZ5Ym1Wa1UzUjViR1ZPWVcxbGMxdHVZVzFsWFNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmx4dUlDQWdJSGRoY201bFpGTjBlV3hsVG1GdFpYTmJibUZ0WlYwZ1BTQjBjblZsTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FuVlc1emRYQndiM0owWldRZ2RtVnVaRzl5TFhCeVpXWnBlR1ZrSUhOMGVXeGxJSEJ5YjNCbGNuUjVJQ1Z6TGlCRWFXUWdlVzkxSUcxbFlXNGdKWE0vSnl4Y2JpQWdJQ0FnSUc1aGJXVXNYRzRnSUNBZ0lDQnVZVzFsTG1Ob1lYSkJkQ2d3S1M1MGIxVndjR1Z5UTJGelpTZ3BJQ3NnYm1GdFpTNXpiR2xqWlNneEtWeHVJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdmVHRjYmx4dUlDQjJZWElnZDJGeWJsTjBlV3hsVm1Gc2RXVlhhWFJvVTJWdGFXTnZiRzl1SUQwZ1puVnVZM1JwYjI0b2JtRnRaU3dnZG1Gc2RXVXBJSHRjYmlBZ0lDQnBaaUFvZDJGeWJtVmtVM1I1YkdWV1lXeDFaWE11YUdGelQzZHVVSEp2Y0dWeWRIa29kbUZzZFdVcElDWW1JSGRoY201bFpGTjBlV3hsVm1Gc2RXVnpXM1poYkhWbFhTa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhkaGNtNWxaRk4wZVd4bFZtRnNkV1Z6VzNaaGJIVmxYU0E5SUhSeWRXVTdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0JtWVd4elpTeGNiaUFnSUNBZ0lDZFRkSGxzWlNCd2NtOXdaWEowZVNCMllXeDFaWE1nYzJodmRXeGtibHhjSjNRZ1kyOXVkR0ZwYmlCaElITmxiV2xqYjJ4dmJpNGdKeUFyWEc0Z0lDQWdJQ0FuVkhKNUlGd2lKWE02SUNWelhDSWdhVzV6ZEdWaFpDNG5MRnh1SUNBZ0lDQWdibUZ0WlN4Y2JpQWdJQ0FnSUhaaGJIVmxMbkpsY0d4aFkyVW9ZbUZrVTNSNWJHVldZV3gxWlZkcGRHaFRaVzFwWTI5c2IyNVFZWFIwWlhKdUxDQW5KeWxjYmlBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUgwN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbFhHNGdJQ0FxSUVCd1lYSmhiU0I3S24wZ2RtRnNkV1ZjYmlBZ0lDb3ZYRzRnSUhaaGNpQjNZWEp1Vm1Gc2FXUlRkSGxzWlNBOUlHWjFibU4wYVc5dUtHNWhiV1VzSUhaaGJIVmxLU0I3WEc0Z0lDQWdhV1lnS0c1aGJXVXVhVzVrWlhoUFppZ25MU2NwSUQ0Z0xURXBJSHRjYmlBZ0lDQWdJSGRoY201SWVYQm9aVzVoZEdWa1UzUjViR1ZPWVcxbEtHNWhiV1VwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvWW1Ga1ZtVnVaRzl5WldSVGRIbHNaVTVoYldWUVlYUjBaWEp1TG5SbGMzUW9ibUZ0WlNrcElIdGNiaUFnSUNBZ0lIZGhjbTVDWVdSV1pXNWtiM0psWkZOMGVXeGxUbUZ0WlNodVlXMWxLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR0poWkZOMGVXeGxWbUZzZFdWWGFYUm9VMlZ0YVdOdmJHOXVVR0YwZEdWeWJpNTBaWE4wS0haaGJIVmxLU2tnZTF4dUlDQWdJQ0FnZDJGeWJsTjBlV3hsVm1Gc2RXVlhhWFJvVTJWdGFXTnZiRzl1S0c1aGJXVXNJSFpoYkhWbEtUdGNiaUFnSUNCOVhHNGdJSDA3WEc1OVhHNWNiaThxS2x4dUlDb2dUM0JsY21GMGFXOXVjeUJtYjNJZ1pHVmhiR2x1WnlCM2FYUm9JRU5UVXlCd2NtOXdaWEowYVdWekxseHVJQ292WEc1MllYSWdRMU5UVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6SUQwZ2UxeHVYRzRnSUM4cUtseHVJQ0FnS2lCVFpYSnBZV3hwZW1WeklHRWdiV0Z3Y0dsdVp5QnZaaUJ6ZEhsc1pTQndjbTl3WlhKMGFXVnpJR1p2Y2lCMWMyVWdZWE1nYVc1c2FXNWxJSE4wZVd4bGN6cGNiaUFnSUNwY2JpQWdJQ29nSUNBK0lHTnlaV0YwWlUxaGNtdDFjRVp2Y2xOMGVXeGxjeWg3ZDJsa2RHZzZJQ2N5TURCd2VDY3NJR2hsYVdkb2REb2dNSDBwWEc0Z0lDQXFJQ0FnWENKM2FXUjBhRG95TURCd2VEdG9aV2xuYUhRNk1EdGNJbHh1SUNBZ0tseHVJQ0FnS2lCVmJtUmxabWx1WldRZ2RtRnNkV1Z6SUdGeVpTQnBaMjV2Y21Wa0lITnZJSFJvWVhRZ1pHVmpiR0Z5WVhScGRtVWdjSEp2WjNKaGJXMXBibWNnYVhNZ1pXRnphV1Z5TGx4dUlDQWdLaUJVYUdVZ2NtVnpkV3gwSUhOb2IzVnNaQ0JpWlNCSVZFMU1MV1Z6WTJGd1pXUWdZbVZtYjNKbElHbHVjMlZ5ZEdsdmJpQnBiblJ2SUhSb1pTQkVUMDB1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCemRIbHNaWE5jYmlBZ0lDb2dRSEpsZEhWeWJpQjdQM04wY21sdVozMWNiaUFnSUNvdlhHNGdJR055WldGMFpVMWhjbXQxY0VadmNsTjBlV3hsY3pvZ1puVnVZM1JwYjI0b2MzUjViR1Z6S1NCN1hHNGdJQ0FnZG1GeUlITmxjbWxoYkdsNlpXUWdQU0FuSnp0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJ6ZEhsc1pVNWhiV1VnYVc0Z2MzUjViR1Z6S1NCN1hHNGdJQ0FnSUNCcFppQW9JWE4wZVd4bGN5NW9ZWE5QZDI1UWNtOXdaWEowZVNoemRIbHNaVTVoYldVcEtTQjdYRzRnSUNBZ0lDQWdJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkbUZ5SUhOMGVXeGxWbUZzZFdVZ1BTQnpkSGxzWlhOYmMzUjViR1ZPWVcxbFhUdGNiaUFnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdkMkZ5YmxaaGJHbGtVM1I1YkdVb2MzUjViR1ZPWVcxbExDQnpkSGxzWlZaaGJIVmxLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoemRIbHNaVlpoYkhWbElDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdjMlZ5YVdGc2FYcGxaQ0FyUFNCd2NtOWpaWE56VTNSNWJHVk9ZVzFsS0hOMGVXeGxUbUZ0WlNrZ0t5QW5PaWM3WEc0Z0lDQWdJQ0FnSUhObGNtbGhiR2w2WldRZ0t6MGdaR0Z1WjJWeWIzVnpVM1I1YkdWV1lXeDFaU2h6ZEhsc1pVNWhiV1VzSUhOMGVXeGxWbUZzZFdVcElDc2dKenNuTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2MyVnlhV0ZzYVhwbFpDQjhmQ0J1ZFd4c08xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJUWlhSeklIUm9aU0IyWVd4MVpTQm1iM0lnYlhWc2RHbHdiR1VnYzNSNWJHVnpJRzl1SUdFZ2JtOWtaUzRnSUVsbUlHRWdkbUZzZFdVZ2FYTWdjM0JsWTJsbWFXVmtJR0Z6WEc0Z0lDQXFJQ2NuSUNobGJYQjBlU0J6ZEhKcGJtY3BMQ0IwYUdVZ1kyOXljbVZ6Y0c5dVpHbHVaeUJ6ZEhsc1pTQndjbTl3WlhKMGVTQjNhV3hzSUdKbElIVnVjMlYwTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJRzV2WkdWY2JpQWdJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSE4wZVd4bGMxeHVJQ0FnS2k5Y2JpQWdjMlYwVm1Gc2RXVkdiM0pUZEhsc1pYTTZJR1oxYm1OMGFXOXVLRzV2WkdVc0lITjBlV3hsY3lrZ2UxeHVJQ0FnSUhaaGNpQnpkSGxzWlNBOUlHNXZaR1V1YzNSNWJHVTdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2MzUjViR1ZPWVcxbElHbHVJSE4wZVd4bGN5a2dlMXh1SUNBZ0lDQWdhV1lnS0NGemRIbHNaWE11YUdGelQzZHVVSEp2Y0dWeWRIa29jM1I1YkdWT1lXMWxLU2tnZTF4dUlDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ2QyRnlibFpoYkdsa1UzUjViR1VvYzNSNWJHVk9ZVzFsTENCemRIbHNaWE5iYzNSNWJHVk9ZVzFsWFNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCMllYSWdjM1I1YkdWV1lXeDFaU0E5SUdSaGJtZGxjbTkxYzFOMGVXeGxWbUZzZFdVb2MzUjViR1ZPWVcxbExDQnpkSGxzWlhOYmMzUjViR1ZPWVcxbFhTazdYRzRnSUNBZ0lDQnBaaUFvYzNSNWJHVk9ZVzFsSUQwOVBTQW5abXh2WVhRbktTQjdYRzRnSUNBZ0lDQWdJSE4wZVd4bFRtRnRaU0E5SUhOMGVXeGxSbXh2WVhSQlkyTmxjM052Y2p0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDaHpkSGxzWlZaaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUhOMGVXeGxXM04wZVd4bFRtRnRaVjBnUFNCemRIbHNaVlpoYkhWbE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJR1Y0Y0dGdWMybHZiaUE5SUVOVFUxQnliM0JsY25SNUxuTm9iM0owYUdGdVpGQnliM0JsY25SNVJYaHdZVzV6YVc5dWMxdHpkSGxzWlU1aGJXVmRPMXh1SUNBZ0lDQWdJQ0JwWmlBb1pYaHdZVzV6YVc5dUtTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1UyaHZjblJvWVc1a0lIQnliM0JsY25SNUlIUm9ZWFFnU1VVNElIZHZiaWQwSUd4cGEyVWdkVzV6WlhSMGFXNW5MQ0J6YnlCMWJuTmxkQ0JsWVdOb1hHNGdJQ0FnSUNBZ0lDQWdMeThnWTI5dGNHOXVaVzUwSUhSdklIQnNZV05oZEdVZ2FYUmNiaUFnSUNBZ0lDQWdJQ0JtYjNJZ0tIWmhjaUJwYm1ScGRtbGtkV0ZzVTNSNWJHVk9ZVzFsSUdsdUlHVjRjR0Z1YzJsdmJpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2MzUjViR1ZiYVc1a2FYWnBaSFZoYkZOMGVXeGxUbUZ0WlYwZ1BTQW5KenRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdjM1I1YkdWYmMzUjViR1ZPWVcxbFhTQTlJQ2NuTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdRMU5UVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6TzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIENhbGxiYWNrUXVldWVcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoXCIuL1Bvb2xlZENsYXNzXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCBwc2V1ZG8tZXZlbnQgbW9kdWxlIHRvIGhlbHAga2VlcCB0cmFjayBvZiBjb21wb25lbnRzIHdhaXRpbmcgdG9cbiAqIGJlIG5vdGlmaWVkIHdoZW4gdGhlaXIgRE9NIHJlcHJlc2VudGF0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB1c2UuXG4gKlxuICogVGhpcyBpbXBsZW1lbnRzIGBQb29sZWRDbGFzc2AsIHNvIHlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzLlxuICogSW5zdGVhZCwgdXNlIGBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpYC5cbiAqXG4gKiBAY2xhc3MgUmVhY3RNb3VudFJlYWR5XG4gKiBAaW1wbGVtZW50cyBQb29sZWRDbGFzc1xuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIENhbGxiYWNrUXVldWUoKSB7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IG51bGw7XG4gIHRoaXMuX2NvbnRleHRzID0gbnVsbDtcbn1cblxuYXNzaWduKENhbGxiYWNrUXVldWUucHJvdG90eXBlLCB7XG5cbiAgLyoqXG4gICAqIEVucXVldWVzIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIGBub3RpZnlBbGxgIGlzIGludm9rZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIEludm9rZWQgd2hlbiBgbm90aWZ5QWxsYCBpcyBpbnZva2VkLlxuICAgKiBAcGFyYW0gez9vYmplY3R9IGNvbnRleHQgQ29udGV4dCB0byBjYWxsIGBjYWxsYmFja2Agd2l0aC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlOiBmdW5jdGlvbihjYWxsYmFjaywgY29udGV4dCkge1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCBbXTtcbiAgICB0aGlzLl9jb250ZXh0cyA9IHRoaXMuX2NvbnRleHRzIHx8IFtdO1xuICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLl9jb250ZXh0cy5wdXNoKGNvbnRleHQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGFsbCBlbnF1ZXVlZCBjYWxsYmFja3MgYW5kIGNsZWFycyB0aGUgcXVldWUuIFRoaXMgaXMgaW52b2tlZCBhZnRlclxuICAgKiB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9mIGEgY29tcG9uZW50IGhhcyBiZWVuIGNyZWF0ZWQgb3IgdXBkYXRlZC5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBub3RpZnlBbGw6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3M7XG4gICAgdmFyIGNvbnRleHRzID0gdGhpcy5fY29udGV4dHM7XG4gICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCA9PT0gY29udGV4dHMubGVuZ3RoLFxuICAgICAgICAnTWlzbWF0Y2hlZCBsaXN0IG9mIGNvbnRleHRzIGluIGNhbGxiYWNrIHF1ZXVlJ1xuICAgICAgKSA6IGludmFyaWFudChjYWxsYmFja3MubGVuZ3RoID09PSBjb250ZXh0cy5sZW5ndGgpKTtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IG51bGw7XG4gICAgICB0aGlzLl9jb250ZXh0cyA9IG51bGw7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwoY29udGV4dHNbaV0pO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2tzLmxlbmd0aCA9IDA7XG4gICAgICBjb250ZXh0cy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBpbnRlcm5hbCBxdWV1ZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0cyA9IG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIHRoaXMuXG4gICAqL1xuICBkZXN0cnVjdG9yOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cblxufSk7XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhDYWxsYmFja1F1ZXVlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYWxsYmFja1F1ZXVlO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UTJGc2JHSmhZMnRSZFdWMVpTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQkRZV3hzWW1GamExRjFaWFZsWEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1VHOXZiR1ZrUTJ4aGMzTWdQU0J5WlhGMWFYSmxLRndpTGk5UWIyOXNaV1JEYkdGemMxd2lLVHRjYmx4dWRtRnlJR0Z6YzJsbmJpQTlJSEpsY1hWcGNtVW9YQ0l1TDA5aWFtVmpkQzVoYzNOcFoyNWNJaWs3WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc0dktpcGNiaUFxSUVFZ2MzQmxZMmxoYkdsNlpXUWdjSE5sZFdSdkxXVjJaVzUwSUcxdlpIVnNaU0IwYnlCb1pXeHdJR3RsWlhBZ2RISmhZMnNnYjJZZ1kyOXRjRzl1Wlc1MGN5QjNZV2wwYVc1bklIUnZYRzRnS2lCaVpTQnViM1JwWm1sbFpDQjNhR1Z1SUhSb1pXbHlJRVJQVFNCeVpYQnlaWE5sYm5SaGRHbHZibk1nWVhKbElHRjJZV2xzWVdKc1pTQm1iM0lnZFhObExseHVJQ3BjYmlBcUlGUm9hWE1nYVcxd2JHVnRaVzUwY3lCZ1VHOXZiR1ZrUTJ4aGMzTmdMQ0J6YnlCNWIzVWdjMmh2ZFd4a0lHNWxkbVZ5SUc1bFpXUWdkRzhnYVc1emRHRnVkR2xoZEdVZ2RHaHBjeTVjYmlBcUlFbHVjM1JsWVdRc0lIVnpaU0JnUTJGc2JHSmhZMnRSZFdWMVpTNW5aWFJRYjI5c1pXUW9LV0F1WEc0Z0tseHVJQ29nUUdOc1lYTnpJRkpsWVdOMFRXOTFiblJTWldGa2VWeHVJQ29nUUdsdGNHeGxiV1Z1ZEhNZ1VHOXZiR1ZrUTJ4aGMzTmNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJEWVd4c1ltRmphMUYxWlhWbEtDa2dlMXh1SUNCMGFHbHpMbDlqWVd4c1ltRmphM01nUFNCdWRXeHNPMXh1SUNCMGFHbHpMbDlqYjI1MFpYaDBjeUE5SUc1MWJHdzdYRzU5WEc1Y2JtRnpjMmxuYmloRFlXeHNZbUZqYTFGMVpYVmxMbkJ5YjNSdmRIbHdaU3dnZTF4dVhHNGdJQzhxS2x4dUlDQWdLaUJGYm5GMVpYVmxjeUJoSUdOaGJHeGlZV05ySUhSdklHSmxJR2x1ZG05clpXUWdkMmhsYmlCZ2JtOTBhV1o1UVd4c1lDQnBjeUJwYm5admEyVmtMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCallXeHNZbUZqYXlCSmJuWnZhMlZrSUhkb1pXNGdZRzV2ZEdsbWVVRnNiR0FnYVhNZ2FXNTJiMnRsWkM1Y2JpQWdJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0JqYjI1MFpYaDBJRU52Ym5SbGVIUWdkRzhnWTJGc2JDQmdZMkZzYkdKaFkydGdJSGRwZEdndVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1pXNXhkV1YxWlRvZ1puVnVZM1JwYjI0b1kyRnNiR0poWTJzc0lHTnZiblJsZUhRcElIdGNiaUFnSUNCMGFHbHpMbDlqWVd4c1ltRmphM01nUFNCMGFHbHpMbDlqWVd4c1ltRmphM01nZkh3Z1cxMDdYRzRnSUNBZ2RHaHBjeTVmWTI5dWRHVjRkSE1nUFNCMGFHbHpMbDlqYjI1MFpYaDBjeUI4ZkNCYlhUdGNiaUFnSUNCMGFHbHpMbDlqWVd4c1ltRmphM011Y0hWemFDaGpZV3hzWW1GamF5azdYRzRnSUNBZ2RHaHBjeTVmWTI5dWRHVjRkSE11Y0hWemFDaGpiMjUwWlhoMEtUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nU1c1MmIydGxjeUJoYkd3Z1pXNXhkV1YxWldRZ1kyRnNiR0poWTJ0eklHRnVaQ0JqYkdWaGNuTWdkR2hsSUhGMVpYVmxMaUJVYUdseklHbHpJR2x1ZG05clpXUWdZV1owWlhKY2JpQWdJQ29nZEdobElFUlBUU0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUJoSUdOdmJYQnZibVZ1ZENCb1lYTWdZbVZsYmlCamNtVmhkR1ZrSUc5eUlIVndaR0YwWldRdVhHNGdJQ0FxWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnYm05MGFXWjVRV3hzT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCMllYSWdZMkZzYkdKaFkydHpJRDBnZEdocGN5NWZZMkZzYkdKaFkydHpPMXh1SUNBZ0lIWmhjaUJqYjI1MFpYaDBjeUE5SUhSb2FYTXVYMk52Ym5SbGVIUnpPMXh1SUNBZ0lHbG1JQ2hqWVd4c1ltRmphM01wSUh0Y2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUdOaGJHeGlZV05yY3k1c1pXNW5kR2dnUFQwOUlHTnZiblJsZUhSekxteGxibWQwYUN4Y2JpQWdJQ0FnSUNBZ0owMXBjMjFoZEdOb1pXUWdiR2x6ZENCdlppQmpiMjUwWlhoMGN5QnBiaUJqWVd4c1ltRmpheUJ4ZFdWMVpTZGNiaUFnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvWTJGc2JHSmhZMnR6TG14bGJtZDBhQ0E5UFQwZ1kyOXVkR1Y0ZEhNdWJHVnVaM1JvS1NrN1hHNGdJQ0FnSUNCMGFHbHpMbDlqWVd4c1ltRmphM01nUFNCdWRXeHNPMXh1SUNBZ0lDQWdkR2hwY3k1ZlkyOXVkR1Y0ZEhNZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQXNJR3dnUFNCallXeHNZbUZqYTNNdWJHVnVaM1JvT3lCcElEd2diRHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJR05oYkd4aVlXTnJjMXRwWFM1allXeHNLR052Ym5SbGVIUnpXMmxkS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdOaGJHeGlZV05yY3k1c1pXNW5kR2dnUFNBd08xeHVJQ0FnSUNBZ1kyOXVkR1Y0ZEhNdWJHVnVaM1JvSUQwZ01EdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsYzJWMGN5QjBhR1VnYVc1MFpYSnVZV3dnY1hWbGRXVXVYRzRnSUNBcVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ2NtVnpaWFE2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUhSb2FYTXVYMk5oYkd4aVlXTnJjeUE5SUc1MWJHdzdYRzRnSUNBZ2RHaHBjeTVmWTI5dWRHVjRkSE1nUFNCdWRXeHNPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCZ1VHOXZiR1ZrUTJ4aGMzTmdJR3h2YjJ0eklHWnZjaUIwYUdsekxseHVJQ0FnS2k5Y2JpQWdaR1Z6ZEhKMVkzUnZjam9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnZEdocGN5NXlaWE5sZENncE8xeHVJQ0I5WEc1Y2JuMHBPMXh1WEc1UWIyOXNaV1JEYkdGemN5NWhaR1JRYjI5c2FXNW5WRzhvUTJGc2JHSmhZMnRSZFdWMVpTazdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnUTJGc2JHSmhZMnRSZFdWMVpUdGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBDaGFuZ2VFdmVudFBsdWdpblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpbkh1YlwiKTtcbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZShcIi4vRXZlbnRQcm9wYWdhdG9yc1wiKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcbnZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0V2ZW50XCIpO1xuXG52YXIgaXNFdmVudFN1cHBvcnRlZCA9IHJlcXVpcmUoXCIuL2lzRXZlbnRTdXBwb3J0ZWRcIik7XG52YXIgaXNUZXh0SW5wdXRFbGVtZW50ID0gcmVxdWlyZShcIi4vaXNUZXh0SW5wdXRFbGVtZW50XCIpO1xudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIGNoYW5nZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25DaGFuZ2U6IG51bGx9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25DaGFuZ2VDYXB0dXJlOiBudWxsfSlcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BCbHVyLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BDaGFuZ2UsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcENsaWNrLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BGb2N1cyxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wSW5wdXQsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleURvd24sXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVVwLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BTZWxlY3Rpb25DaGFuZ2VcbiAgICBdXG4gIH1cbn07XG5cbi8qKlxuICogRm9yIElFIHNoaW1zXG4gKi9cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SUQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRWYWx1ZSA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudFZhbHVlUHJvcCA9IG51bGw7XG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjaGFuZ2VgIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgcmV0dXJuIChcbiAgICBlbGVtLm5vZGVOYW1lID09PSAnU0VMRUNUJyB8fFxuICAgIChlbGVtLm5vZGVOYW1lID09PSAnSU5QVVQnICYmIGVsZW0udHlwZSA9PT0gJ2ZpbGUnKVxuICApO1xufVxuXG52YXIgZG9lc0NoYW5nZUV2ZW50QnViYmxlID0gZmFsc2U7XG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIC8vIFNlZSBgaGFuZGxlQ2hhbmdlYCBjb21tZW50IGJlbG93XG4gIGRvZXNDaGFuZ2VFdmVudEJ1YmJsZSA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2NoYW5nZScpICYmIChcbiAgICAoISgnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCkgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOClcbiAgKTtcbn1cblxuZnVuY3Rpb24gbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZXZlbnQgPSBTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgZXZlbnRUeXBlcy5jaGFuZ2UsXG4gICAgYWN0aXZlRWxlbWVudElELFxuICAgIG5hdGl2ZUV2ZW50XG4gICk7XG4gIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG5cbiAgLy8gSWYgY2hhbmdlIGFuZCBwcm9wZXJ0eWNoYW5nZSBidWJibGVkLCB3ZSdkIGp1c3QgYmluZCB0byBpdCBsaWtlIGFsbCB0aGVcbiAgLy8gb3RoZXIgZXZlbnRzIGFuZCBoYXZlIGl0IGdvIHRocm91Z2ggUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLiBTaW5jZSBpdFxuICAvLyBkb2Vzbid0LCB3ZSBtYW51YWxseSBsaXN0ZW4gZm9yIHRoZSBldmVudHMgYW5kIHNvIHdlIGhhdmUgdG8gZW5xdWV1ZSBhbmRcbiAgLy8gcHJvY2VzcyB0aGUgYWJzdHJhY3QgZXZlbnQgbWFudWFsbHkuXG4gIC8vXG4gIC8vIEJhdGNoaW5nIGlzIG5lY2Vzc2FyeSBoZXJlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCBldmVudCBoYW5kbGVycyBydW5cbiAgLy8gYmVmb3JlIHRoZSBuZXh0IHJlcmVuZGVyIChpbmNsdWRpbmcgZXZlbnQgaGFuZGxlcnMgYXR0YWNoZWQgdG8gYW5jZXN0b3JcbiAgLy8gZWxlbWVudHMgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgaW5wdXQpLiBXaXRob3V0IHRoaXMsIGNvbnRyb2xsZWRcbiAgLy8gY29tcG9uZW50cyBkb24ndCB3b3JrIHByb3Blcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggZXZlbnQgYnViYmxpbmcgYmVjYXVzZVxuICAvLyB0aGUgY29tcG9uZW50IGlzIHJlcmVuZGVyZWQgYW5kIHRoZSB2YWx1ZSByZXZlcnRlZCBiZWZvcmUgYWxsIHRoZSBldmVudFxuICAvLyBoYW5kbGVycyBjYW4gcnVuLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MDguXG4gIFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBkYXRlcyhydW5FdmVudEluQmF0Y2gsIGV2ZW50KTtcbn1cblxuZnVuY3Rpb24gcnVuRXZlbnRJbkJhdGNoKGV2ZW50KSB7XG4gIEV2ZW50UGx1Z2luSHViLmVucXVldWVFdmVudHMoZXZlbnQpO1xuICBFdmVudFBsdWdpbkh1Yi5wcm9jZXNzRXZlbnRRdWV1ZSgpO1xufVxuXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgodGFyZ2V0LCB0YXJnZXRJRCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SUQgPSB0YXJnZXRJRDtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25jaGFuZ2UnLCBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KTtcbn1cblxuZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgoKSB7XG4gIGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuICBhY3RpdmVFbGVtZW50LmRldGFjaEV2ZW50KCdvbmNoYW5nZScsIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQpO1xuICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudElEID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SURGb3JDaGFuZ2VFdmVudChcbiAgICB0b3BMZXZlbFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcENoYW5nZSkge1xuICAgIHJldHVybiB0b3BMZXZlbFRhcmdldElEO1xuICB9XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JDaGFuZ2VFdmVudElFOChcbiAgICB0b3BMZXZlbFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEZvY3VzKSB7XG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCh0b3BMZXZlbFRhcmdldCwgdG9wTGV2ZWxUYXJnZXRJRCk7XG4gIH0gZWxzZSBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEJsdXIpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCgpO1xuICB9XG59XG5cblxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGlucHV0YCBldmVudFxuICovXG52YXIgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gZmFsc2U7XG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIC8vIElFOSBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgaW5wdXQgZXZlbnQgYnV0IGZhaWxzIHRvIHRyaWdnZXIgaXQgd2hlblxuICAvLyBkZWxldGluZyB0ZXh0LCBzbyB3ZSBpZ25vcmUgaXRzIGlucHV0IGV2ZW50c1xuICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBpc0V2ZW50U3VwcG9ydGVkKCdpbnB1dCcpICYmIChcbiAgICAoISgnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCkgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOSlcbiAgKTtcbn1cblxuLyoqXG4gKiAoRm9yIG9sZCBJRS4pIFJlcGxhY2VtZW50IGdldHRlci9zZXR0ZXIgZm9yIHRoZSBgdmFsdWVgIHByb3BlcnR5IHRoYXQgZ2V0c1xuICogc2V0IG9uIHRoZSBhY3RpdmUgZWxlbWVudC5cbiAqL1xudmFyIG5ld1ZhbHVlUHJvcCA9ICB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnRWYWx1ZVByb3AuZ2V0LmNhbGwodGhpcyk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgLy8gQ2FzdCB0byBhIHN0cmluZyBzbyB3ZSBjYW4gZG8gZXF1YWxpdHkgY2hlY2tzLlxuICAgIGFjdGl2ZUVsZW1lbnRWYWx1ZSA9ICcnICsgdmFsO1xuICAgIGFjdGl2ZUVsZW1lbnRWYWx1ZVByb3Auc2V0LmNhbGwodGhpcywgdmFsKTtcbiAgfVxufTtcblxuLyoqXG4gKiAoRm9yIG9sZCBJRS4pIFN0YXJ0cyB0cmFja2luZyBwcm9wZXJ0eWNoYW5nZSBldmVudHMgb24gdGhlIHBhc3NlZC1pbiBlbGVtZW50XG4gKiBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHVzZXIgZXZlbnRzIGZyb21cbiAqIHZhbHVlIGNoYW5nZXMgaW4gSlMuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldElEKSB7XG4gIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXQ7XG4gIGFjdGl2ZUVsZW1lbnRJRCA9IHRhcmdldElEO1xuICBhY3RpdmVFbGVtZW50VmFsdWUgPSB0YXJnZXQudmFsdWU7XG4gIGFjdGl2ZUVsZW1lbnRWYWx1ZVByb3AgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgIHRhcmdldC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG4gICAgJ3ZhbHVlJ1xuICApO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhY3RpdmVFbGVtZW50LCAndmFsdWUnLCBuZXdWYWx1ZVByb3ApO1xuICBhY3RpdmVFbGVtZW50LmF0dGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xufVxuXG4vKipcbiAqIChGb3Igb2xkIElFLikgUmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnRseS10cmFja2VkIGVsZW1lbnQsXG4gKiBpZiBhbnkgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZGVsZXRlIHJlc3RvcmVzIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBkZWZpbml0aW9uXG4gIGRlbGV0ZSBhY3RpdmVFbGVtZW50LnZhbHVlO1xuICBhY3RpdmVFbGVtZW50LmRldGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xuXG4gIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50SUQgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50VmFsdWUgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50VmFsdWVQcm9wID0gbnVsbDtcbn1cblxuLyoqXG4gKiAoRm9yIG9sZCBJRS4pIEhhbmRsZXMgYSBwcm9wZXJ0eWNoYW5nZSBldmVudCwgc2VuZGluZyBhIGBjaGFuZ2VgIGV2ZW50IGlmXG4gKiB0aGUgdmFsdWUgb2YgdGhlIGFjdGl2ZSBlbGVtZW50IGhhcyBjaGFuZ2VkLlxuICovXG5mdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQucHJvcGVydHlOYW1lICE9PSAndmFsdWUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciB2YWx1ZSA9IG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQudmFsdWU7XG4gIGlmICh2YWx1ZSA9PT0gYWN0aXZlRWxlbWVudFZhbHVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFjdGl2ZUVsZW1lbnRWYWx1ZSA9IHZhbHVlO1xuXG4gIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpO1xufVxuXG4vKipcbiAqIElmIGEgYGNoYW5nZWAgZXZlbnQgc2hvdWxkIGJlIGZpcmVkLCByZXR1cm5zIHRoZSB0YXJnZXQncyBJRC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFyZ2V0SURGb3JJbnB1dEV2ZW50KFxuICAgIHRvcExldmVsVHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldCxcbiAgICB0b3BMZXZlbFRhcmdldElEKSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wSW5wdXQpIHtcbiAgICAvLyBJbiBtb2Rlcm4gYnJvd3NlcnMgKGkuZS4sIG5vdCBJRTggb3IgSUU5KSwgdGhlIGlucHV0IGV2ZW50IGlzIGV4YWN0bHlcbiAgICAvLyB3aGF0IHdlIHdhbnQgc28gZmFsbCB0aHJvdWdoIGhlcmUgYW5kIHRyaWdnZXIgYW4gYWJzdHJhY3QgZXZlbnRcbiAgICByZXR1cm4gdG9wTGV2ZWxUYXJnZXRJRDtcbiAgfVxufVxuXG4vLyBGb3IgSUU4IGFuZCBJRTkuXG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50SUUoXG4gICAgdG9wTGV2ZWxUeXBlLFxuICAgIHRvcExldmVsVGFyZ2V0LFxuICAgIHRvcExldmVsVGFyZ2V0SUQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BGb2N1cykge1xuICAgIC8vIEluIElFOCwgd2UgY2FuIGNhcHR1cmUgYWxtb3N0IGFsbCAudmFsdWUgY2hhbmdlcyBieSBhZGRpbmcgYVxuICAgIC8vIHByb3BlcnR5Y2hhbmdlIGhhbmRsZXIgYW5kIGxvb2tpbmcgZm9yIGV2ZW50cyB3aXRoIHByb3BlcnR5TmFtZVxuICAgIC8vIGVxdWFsIHRvICd2YWx1ZSdcbiAgICAvLyBJbiBJRTksIHByb3BlcnR5Y2hhbmdlIGZpcmVzIGZvciBtb3N0IGlucHV0IGV2ZW50cyBidXQgaXMgYnVnZ3kgYW5kXG4gICAgLy8gZG9lc24ndCBmaXJlIHdoZW4gdGV4dCBpcyBkZWxldGVkLCBidXQgY29udmVuaWVudGx5LCBzZWxlY3Rpb25jaGFuZ2VcbiAgICAvLyBhcHBlYXJzIHRvIGZpcmUgaW4gYWxsIG9mIHRoZSByZW1haW5pbmcgY2FzZXMgc28gd2UgY2F0Y2ggdGhvc2UgYW5kXG4gICAgLy8gZm9yd2FyZCB0aGUgZXZlbnQgaWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgLy8gSW4gZWl0aGVyIGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gY2FsbCB0aGUgZXZlbnQgaGFuZGxlciBpZiB0aGUgdmFsdWVcbiAgICAvLyBpcyBjaGFuZ2VkIGZyb20gSlMgc28gd2UgcmVkZWZpbmUgYSBzZXR0ZXIgZm9yIGAudmFsdWVgIHRoYXQgdXBkYXRlc1xuICAgIC8vIG91ciBhY3RpdmVFbGVtZW50VmFsdWUgdmFyaWFibGUsIGFsbG93aW5nIHVzIHRvIGlnbm9yZSB0aG9zZSBjaGFuZ2VzXG4gICAgLy9cbiAgICAvLyBzdG9wV2F0Y2hpbmcoKSBzaG91bGQgYmUgYSBub29wIGhlcmUgYnV0IHdlIGNhbGwgaXQganVzdCBpbiBjYXNlIHdlXG4gICAgLy8gbWlzc2VkIGEgYmx1ciBldmVudCBzb21laG93LlxuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gICAgc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRvcExldmVsVGFyZ2V0LCB0b3BMZXZlbFRhcmdldElEKTtcbiAgfSBlbHNlIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wQmx1cikge1xuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gIH1cbn1cblxuLy8gRm9yIElFOCBhbmQgSUU5LlxuZnVuY3Rpb24gZ2V0VGFyZ2V0SURGb3JJbnB1dEV2ZW50SUUoXG4gICAgdG9wTGV2ZWxUeXBlLFxuICAgIHRvcExldmVsVGFyZ2V0LFxuICAgIHRvcExldmVsVGFyZ2V0SUQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BTZWxlY3Rpb25DaGFuZ2UgfHxcbiAgICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BLZXlVcCB8fFxuICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEtleURvd24pIHtcbiAgICAvLyBPbiB0aGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LCB0aGUgdGFyZ2V0IGlzIGp1c3QgZG9jdW1lbnQgd2hpY2ggaXNuJ3RcbiAgICAvLyBoZWxwZnVsIGZvciB1cyBzbyBqdXN0IGNoZWNrIGFjdGl2ZUVsZW1lbnQgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIDk5JSBvZiB0aGUgdGltZSwga2V5ZG93biBhbmQga2V5dXAgYXJlbid0IG5lY2Vzc2FyeS4gSUU4IGZhaWxzIHRvIGZpcmVcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBvbiB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYWZ0ZXIgc2V0dGluZyBgdmFsdWVgIGZyb20gYVxuICAgIC8vIHNjcmlwdCBhbmQgZmlyZXMgb25seSBrZXlkb3duLCBrZXlwcmVzcywga2V5dXAuIENhdGNoaW5nIGtleXVwIHVzdWFsbHlcbiAgICAvLyBnZXRzIGl0IGFuZCBjYXRjaGluZyBrZXlkb3duIGxldHMgdXMgZmlyZSBhbiBldmVudCBmb3IgdGhlIGZpcnN0XG4gICAgLy8ga2V5c3Ryb2tlIGlmIHVzZXIgZG9lcyBhIGtleSByZXBlYXQgKGl0J2xsIGJlIGEgbGl0dGxlIGRlbGF5ZWQ6IHJpZ2h0XG4gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQga2V5c3Ryb2tlKS4gT3RoZXIgaW5wdXQgbWV0aG9kcyAoZS5nLiwgcGFzdGUpIHNlZW0gdG9cbiAgICAvLyBmaXJlIHNlbGVjdGlvbmNoYW5nZSBub3JtYWxseS5cbiAgICBpZiAoYWN0aXZlRWxlbWVudCAmJiBhY3RpdmVFbGVtZW50LnZhbHVlICE9PSBhY3RpdmVFbGVtZW50VmFsdWUpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnRWYWx1ZSA9IGFjdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICByZXR1cm4gYWN0aXZlRWxlbWVudElEO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjbGlja2AgZXZlbnRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICByZXR1cm4gKFxuICAgIGVsZW0ubm9kZU5hbWUgPT09ICdJTlBVVCcgJiZcbiAgICAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJylcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SURGb3JDbGlja0V2ZW50KFxuICAgIHRvcExldmVsVHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldCxcbiAgICB0b3BMZXZlbFRhcmdldElEKSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wQ2xpY2spIHtcbiAgICByZXR1cm4gdG9wTGV2ZWxUYXJnZXRJRDtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uQ2hhbmdlYCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgY2hhbmdlIGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuIFRoaXMgZXZlbnQgZmlyZXMgYXQgYSB0aW1lIHdoZW4gaXQncyBwb3NzaWJsZSB0b1xuICogY2hhbmdlIHRoZSBlbGVtZW50J3MgdmFsdWUgd2l0aG91dCBzZWVpbmcgYSBmbGlja2VyLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIHNlbGVjdFxuICovXG52YXIgQ2hhbmdlRXZlbnRQbHVnaW4gPSB7XG5cbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9XG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG5cbiAgICB2YXIgZ2V0VGFyZ2V0SURGdW5jLCBoYW5kbGVFdmVudEZ1bmM7XG4gICAgaWYgKHNob3VsZFVzZUNoYW5nZUV2ZW50KHRvcExldmVsVGFyZ2V0KSkge1xuICAgICAgaWYgKGRvZXNDaGFuZ2VFdmVudEJ1YmJsZSkge1xuICAgICAgICBnZXRUYXJnZXRJREZ1bmMgPSBnZXRUYXJnZXRJREZvckNoYW5nZUV2ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9yQ2hhbmdlRXZlbnRJRTg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodG9wTGV2ZWxUYXJnZXQpKSB7XG4gICAgICBpZiAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkKSB7XG4gICAgICAgIGdldFRhcmdldElERnVuYyA9IGdldFRhcmdldElERm9ySW5wdXRFdmVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldFRhcmdldElERnVuYyA9IGdldFRhcmdldElERm9ySW5wdXRFdmVudElFO1xuICAgICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50SUU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzaG91bGRVc2VDbGlja0V2ZW50KHRvcExldmVsVGFyZ2V0KSkge1xuICAgICAgZ2V0VGFyZ2V0SURGdW5jID0gZ2V0VGFyZ2V0SURGb3JDbGlja0V2ZW50O1xuICAgIH1cblxuICAgIGlmIChnZXRUYXJnZXRJREZ1bmMpIHtcbiAgICAgIHZhciB0YXJnZXRJRCA9IGdldFRhcmdldElERnVuYyhcbiAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXRJRFxuICAgICAgKTtcbiAgICAgIGlmICh0YXJnZXRJRCkge1xuICAgICAgICB2YXIgZXZlbnQgPSBTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICAgICAgZXZlbnRUeXBlcy5jaGFuZ2UsXG4gICAgICAgICAgdGFyZ2V0SUQsXG4gICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgKTtcbiAgICAgICAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYW5kbGVFdmVudEZ1bmMpIHtcbiAgICAgIGhhbmRsZUV2ZW50RnVuYyhcbiAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXRJRFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDaGFuZ2VFdmVudFBsdWdpbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBDbGllbnRSZWFjdFJvb3RJbmRleFxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBuZXh0UmVhY3RSb290SW5kZXggPSAwO1xuXG52YXIgQ2xpZW50UmVhY3RSb290SW5kZXggPSB7XG4gIGNyZWF0ZVJlYWN0Um9vdEluZGV4OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV4dFJlYWN0Um9vdEluZGV4Kys7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2xpZW50UmVhY3RSb290SW5kZXg7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIERPTUNoaWxkcmVuT3BlcmF0aW9uc1xuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBEYW5nZXIgPSByZXF1aXJlKFwiLi9EYW5nZXJcIik7XG52YXIgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMgPSByZXF1aXJlKFwiLi9SZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlc1wiKTtcblxudmFyIHNldFRleHRDb250ZW50ID0gcmVxdWlyZShcIi4vc2V0VGV4dENvbnRlbnRcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIEluc2VydHMgYGNoaWxkTm9kZWAgYXMgYSBjaGlsZCBvZiBgcGFyZW50Tm9kZWAgYXQgdGhlIGBpbmRleGAuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBwYXJlbnROb2RlIFBhcmVudCBub2RlIGluIHdoaWNoIHRvIGluc2VydC5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY2hpbGROb2RlIENoaWxkIG5vZGUgdG8gaW5zZXJ0LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IGF0IHdoaWNoIHRvIGluc2VydCB0aGUgY2hpbGQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaW5zZXJ0Q2hpbGRBdChwYXJlbnROb2RlLCBjaGlsZE5vZGUsIGluZGV4KSB7XG4gIC8vIEJ5IGV4cGxvaXRpbmcgYXJyYXlzIHJldHVybmluZyBgdW5kZWZpbmVkYCBmb3IgYW4gdW5kZWZpbmVkIGluZGV4LCB3ZSBjYW5cbiAgLy8gcmVseSBleGNsdXNpdmVseSBvbiBgaW5zZXJ0QmVmb3JlKG5vZGUsIG51bGwpYCBpbnN0ZWFkIG9mIGFsc28gdXNpbmdcbiAgLy8gYGFwcGVuZENoaWxkKG5vZGUpYC4gSG93ZXZlciwgdXNpbmcgYHVuZGVmaW5lZGAgaXMgbm90IGFsbG93ZWQgYnkgYWxsXG4gIC8vIGJyb3dzZXJzIHNvIHdlIG11c3QgcmVwbGFjZSBpdCB3aXRoIGBudWxsYC5cbiAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoXG4gICAgY2hpbGROb2RlLFxuICAgIHBhcmVudE5vZGUuY2hpbGROb2Rlc1tpbmRleF0gfHwgbnVsbFxuICApO1xufVxuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIHVwZGF0aW5nIHdpdGggRE9NIGNoaWxkcmVuLlxuICovXG52YXIgRE9NQ2hpbGRyZW5PcGVyYXRpb25zID0ge1xuXG4gIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwOiBEYW5nZXIuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAsXG5cbiAgdXBkYXRlVGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgY29tcG9uZW50J3MgY2hpbGRyZW4gYnkgcHJvY2Vzc2luZyBhIHNlcmllcyBvZiB1cGRhdGVzLiBUaGVcbiAgICogdXBkYXRlIGNvbmZpZ3VyYXRpb25zIGFyZSBlYWNoIGV4cGVjdGVkIHRvIGhhdmUgYSBgcGFyZW50Tm9kZWAgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXk8b2JqZWN0Pn0gdXBkYXRlcyBMaXN0IG9mIHVwZGF0ZSBjb25maWd1cmF0aW9ucy5cbiAgICogQHBhcmFtIHthcnJheTxzdHJpbmc+fSBtYXJrdXBMaXN0IExpc3Qgb2YgbWFya3VwIHN0cmluZ3MuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvY2Vzc1VwZGF0ZXM6IGZ1bmN0aW9uKHVwZGF0ZXMsIG1hcmt1cExpc3QpIHtcbiAgICB2YXIgdXBkYXRlO1xuICAgIC8vIE1hcHBpbmcgZnJvbSBwYXJlbnQgSURzIHRvIGluaXRpYWwgY2hpbGQgb3JkZXJpbmdzLlxuICAgIHZhciBpbml0aWFsQ2hpbGRyZW4gPSBudWxsO1xuICAgIC8vIExpc3Qgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGJlIG1vdmVkIG9yIHJlbW92ZWQuXG4gICAgdmFyIHVwZGF0ZWRDaGlsZHJlbiA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVwZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZXNbaV07XG4gICAgICBpZiAodXBkYXRlLnR5cGUgPT09IFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLk1PVkVfRVhJU1RJTkcgfHxcbiAgICAgICAgICB1cGRhdGUudHlwZSA9PT0gUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuUkVNT1ZFX05PREUpIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRJbmRleCA9IHVwZGF0ZS5mcm9tSW5kZXg7XG4gICAgICAgIHZhciB1cGRhdGVkQ2hpbGQgPSB1cGRhdGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzW3VwZGF0ZWRJbmRleF07XG4gICAgICAgIHZhciBwYXJlbnRJRCA9IHVwZGF0ZS5wYXJlbnRJRDtcblxuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIHVwZGF0ZWRDaGlsZCxcbiAgICAgICAgICAncHJvY2Vzc1VwZGF0ZXMoKTogVW5hYmxlIHRvIGZpbmQgY2hpbGQgJXMgb2YgZWxlbWVudC4gVGhpcyAnICtcbiAgICAgICAgICAncHJvYmFibHkgbWVhbnMgdGhlIERPTSB3YXMgdW5leHBlY3RlZGx5IG11dGF0ZWQgKGUuZy4sIGJ5IHRoZSAnICtcbiAgICAgICAgICAnYnJvd3NlciksIHVzdWFsbHkgZHVlIHRvIGZvcmdldHRpbmcgYSA8dGJvZHk+IHdoZW4gdXNpbmcgdGFibGVzLCAnICtcbiAgICAgICAgICAnbmVzdGluZyB0YWdzIGxpa2UgPGZvcm0+LCA8cD4sIG9yIDxhPiwgb3IgdXNpbmcgbm9uLVNWRyBlbGVtZW50cyAnICtcbiAgICAgICAgICAnaW4gYW4gPHN2Zz4gcGFyZW50LiBUcnkgaW5zcGVjdGluZyB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIGVsZW1lbnQgJyArXG4gICAgICAgICAgJ3dpdGggUmVhY3QgSUQgYCVzYC4nLFxuICAgICAgICAgIHVwZGF0ZWRJbmRleCxcbiAgICAgICAgICBwYXJlbnRJRFxuICAgICAgICApIDogaW52YXJpYW50KHVwZGF0ZWRDaGlsZCkpO1xuXG4gICAgICAgIGluaXRpYWxDaGlsZHJlbiA9IGluaXRpYWxDaGlsZHJlbiB8fCB7fTtcbiAgICAgICAgaW5pdGlhbENoaWxkcmVuW3BhcmVudElEXSA9IGluaXRpYWxDaGlsZHJlbltwYXJlbnRJRF0gfHwgW107XG4gICAgICAgIGluaXRpYWxDaGlsZHJlbltwYXJlbnRJRF1bdXBkYXRlZEluZGV4XSA9IHVwZGF0ZWRDaGlsZDtcblxuICAgICAgICB1cGRhdGVkQ2hpbGRyZW4gPSB1cGRhdGVkQ2hpbGRyZW4gfHwgW107XG4gICAgICAgIHVwZGF0ZWRDaGlsZHJlbi5wdXNoKHVwZGF0ZWRDaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVkTWFya3VwID0gRGFuZ2VyLmRhbmdlcm91c2x5UmVuZGVyTWFya3VwKG1hcmt1cExpc3QpO1xuXG4gICAgLy8gUmVtb3ZlIHVwZGF0ZWQgY2hpbGRyZW4gZmlyc3Qgc28gdGhhdCBgdG9JbmRleGAgaXMgY29uc2lzdGVudC5cbiAgICBpZiAodXBkYXRlZENoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHVwZGF0ZWRDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICB1cGRhdGVkQ2hpbGRyZW5bal0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1cGRhdGVkQ2hpbGRyZW5bal0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdXBkYXRlcy5sZW5ndGg7IGsrKykge1xuICAgICAgdXBkYXRlID0gdXBkYXRlc1trXTtcbiAgICAgIHN3aXRjaCAodXBkYXRlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5JTlNFUlRfTUFSS1VQOlxuICAgICAgICAgIGluc2VydENoaWxkQXQoXG4gICAgICAgICAgICB1cGRhdGUucGFyZW50Tm9kZSxcbiAgICAgICAgICAgIHJlbmRlcmVkTWFya3VwW3VwZGF0ZS5tYXJrdXBJbmRleF0sXG4gICAgICAgICAgICB1cGRhdGUudG9JbmRleFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuTU9WRV9FWElTVElORzpcbiAgICAgICAgICBpbnNlcnRDaGlsZEF0KFxuICAgICAgICAgICAgdXBkYXRlLnBhcmVudE5vZGUsXG4gICAgICAgICAgICBpbml0aWFsQ2hpbGRyZW5bdXBkYXRlLnBhcmVudElEXVt1cGRhdGUuZnJvbUluZGV4XSxcbiAgICAgICAgICAgIHVwZGF0ZS50b0luZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5URVhUX0NPTlRFTlQ6XG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoXG4gICAgICAgICAgICB1cGRhdGUucGFyZW50Tm9kZSxcbiAgICAgICAgICAgIHVwZGF0ZS50ZXh0Q29udGVudFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuUkVNT1ZFX05PREU6XG4gICAgICAgICAgLy8gQWxyZWFkeSByZW1vdmVkIGJ5IHRoZSBmb3ItbG9vcCBhYm92ZS5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01DaGlsZHJlbk9wZXJhdGlvbnM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZSRTlOUTJocGJHUnlaVzVQY0dWeVlYUnBiMjV6TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRVQwMURhR2xzWkhKbGJrOXdaWEpoZEdsdmJuTmNiaUFxSUVCMGVYQmxZMmhsWTJ0eklITjBZWFJwWXkxdmJteDVYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnUkdGdVoyVnlJRDBnY21WeGRXbHlaU2hjSWk0dlJHRnVaMlZ5WENJcE8xeHVkbUZ5SUZKbFlXTjBUWFZzZEdsRGFHbHNaRlZ3WkdGMFpWUjVjR1Z6SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSTmRXeDBhVU5vYVd4a1ZYQmtZWFJsVkhsd1pYTmNJaWs3WEc1Y2JuWmhjaUJ6WlhSVVpYaDBRMjl1ZEdWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDNObGRGUmxlSFJEYjI1MFpXNTBYQ0lwTzF4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYmx4dUx5b3FYRzRnS2lCSmJuTmxjblJ6SUdCamFHbHNaRTV2WkdWZ0lHRnpJR0VnWTJocGJHUWdiMllnWUhCaGNtVnVkRTV2WkdWZ0lHRjBJSFJvWlNCZ2FXNWtaWGhnTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3UkU5TlJXeGxiV1Z1ZEgwZ2NHRnlaVzUwVG05a1pTQlFZWEpsYm5RZ2JtOWtaU0JwYmlCM2FHbGphQ0IwYnlCcGJuTmxjblF1WEc0Z0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJR05vYVd4a1RtOWtaU0JEYUdsc1pDQnViMlJsSUhSdklHbHVjMlZ5ZEM1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnBibVJsZUNCSmJtUmxlQ0JoZENCM2FHbGphQ0IwYnlCcGJuTmxjblFnZEdobElHTm9hV3hrTGx4dUlDb2dRR2x1ZEdWeWJtRnNYRzRnS2k5Y2JtWjFibU4wYVc5dUlHbHVjMlZ5ZEVOb2FXeGtRWFFvY0dGeVpXNTBUbTlrWlN3Z1kyaHBiR1JPYjJSbExDQnBibVJsZUNrZ2UxeHVJQ0F2THlCQ2VTQmxlSEJzYjJsMGFXNW5JR0Z5Y21GNWN5QnlaWFIxY201cGJtY2dZSFZ1WkdWbWFXNWxaR0FnWm05eUlHRnVJSFZ1WkdWbWFXNWxaQ0JwYm1SbGVDd2dkMlVnWTJGdVhHNGdJQzh2SUhKbGJIa2daWGhqYkhWemFYWmxiSGtnYjI0Z1lHbHVjMlZ5ZEVKbFptOXlaU2h1YjJSbExDQnVkV3hzS1dBZ2FXNXpkR1ZoWkNCdlppQmhiSE52SUhWemFXNW5YRzRnSUM4dklHQmhjSEJsYm1SRGFHbHNaQ2h1YjJSbEtXQXVJRWh2ZDJWMlpYSXNJSFZ6YVc1bklHQjFibVJsWm1sdVpXUmdJR2x6SUc1dmRDQmhiR3h2ZDJWa0lHSjVJR0ZzYkZ4dUlDQXZMeUJpY205M2MyVnljeUJ6YnlCM1pTQnRkWE4wSUhKbGNHeGhZMlVnYVhRZ2QybDBhQ0JnYm5Wc2JHQXVYRzRnSUhCaGNtVnVkRTV2WkdVdWFXNXpaWEowUW1WbWIzSmxLRnh1SUNBZ0lHTm9hV3hrVG05a1pTeGNiaUFnSUNCd1lYSmxiblJPYjJSbExtTm9hV3hrVG05a1pYTmJhVzVrWlhoZElIeDhJRzUxYkd4Y2JpQWdLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlBjR1Z5WVhScGIyNXpJR1p2Y2lCMWNHUmhkR2x1WnlCM2FYUm9JRVJQVFNCamFHbHNaSEpsYmk1Y2JpQXFMMXh1ZG1GeUlFUlBUVU5vYVd4a2NtVnVUM0JsY21GMGFXOXVjeUE5SUh0Y2JseHVJQ0JrWVc1blpYSnZkWE5zZVZKbGNHeGhZMlZPYjJSbFYybDBhRTFoY210MWNEb2dSR0Z1WjJWeUxtUmhibWRsY205MWMyeDVVbVZ3YkdGalpVNXZaR1ZYYVhSb1RXRnlhM1Z3TEZ4dVhHNGdJSFZ3WkdGMFpWUmxlSFJEYjI1MFpXNTBPaUJ6WlhSVVpYaDBRMjl1ZEdWdWRDeGNibHh1SUNBdktpcGNiaUFnSUNvZ1ZYQmtZWFJsY3lCaElHTnZiWEJ2Ym1WdWRDZHpJR05vYVd4a2NtVnVJR0o1SUhCeWIyTmxjM05wYm1jZ1lTQnpaWEpwWlhNZ2IyWWdkWEJrWVhSbGN5NGdWR2hsWEc0Z0lDQXFJSFZ3WkdGMFpTQmpiMjVtYVdkMWNtRjBhVzl1Y3lCaGNtVWdaV0ZqYUNCbGVIQmxZM1JsWkNCMGJ5Qm9ZWFpsSUdFZ1lIQmhjbVZ1ZEU1dlpHVmdJSEJ5YjNCbGNuUjVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTJGeWNtRjVQRzlpYW1WamRENTlJSFZ3WkdGMFpYTWdUR2x6ZENCdlppQjFjR1JoZEdVZ1kyOXVabWxuZFhKaGRHbHZibk11WEc0Z0lDQXFJRUJ3WVhKaGJTQjdZWEp5WVhrOGMzUnlhVzVuUG4wZ2JXRnlhM1Z3VEdsemRDQk1hWE4wSUc5bUlHMWhjbXQxY0NCemRISnBibWR6TGx4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUhCeWIyTmxjM05WY0dSaGRHVnpPaUJtZFc1amRHbHZiaWgxY0dSaGRHVnpMQ0J0WVhKcmRYQk1hWE4wS1NCN1hHNGdJQ0FnZG1GeUlIVndaR0YwWlR0Y2JpQWdJQ0F2THlCTllYQndhVzVuSUdaeWIyMGdjR0Z5Wlc1MElFbEVjeUIwYnlCcGJtbDBhV0ZzSUdOb2FXeGtJRzl5WkdWeWFXNW5jeTVjYmlBZ0lDQjJZWElnYVc1cGRHbGhiRU5vYVd4a2NtVnVJRDBnYm5Wc2JEdGNiaUFnSUNBdkx5Qk1hWE4wSUc5bUlHTm9hV3hrY21WdUlIUm9ZWFFnZDJsc2JDQmlaU0J0YjNabFpDQnZjaUJ5WlcxdmRtVmtMbHh1SUNBZ0lIWmhjaUIxY0dSaGRHVmtRMmhwYkdSeVpXNGdQU0J1ZFd4c08xeHVYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQjFjR1JoZEdWekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0IxY0dSaGRHVWdQU0IxY0dSaGRHVnpXMmxkTzF4dUlDQWdJQ0FnYVdZZ0tIVndaR0YwWlM1MGVYQmxJRDA5UFNCU1pXRmpkRTExYkhScFEyaHBiR1JWY0dSaGRHVlVlWEJsY3k1TlQxWkZYMFZZU1ZOVVNVNUhJSHg4WEc0Z0lDQWdJQ0FnSUNBZ2RYQmtZWFJsTG5SNWNHVWdQVDA5SUZKbFlXTjBUWFZzZEdsRGFHbHNaRlZ3WkdGMFpWUjVjR1Z6TGxKRlRVOVdSVjlPVDBSRktTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCMWNHUmhkR1ZrU1c1a1pYZ2dQU0IxY0dSaGRHVXVabkp2YlVsdVpHVjRPMXh1SUNBZ0lDQWdJQ0IyWVhJZ2RYQmtZWFJsWkVOb2FXeGtJRDBnZFhCa1lYUmxMbkJoY21WdWRFNXZaR1V1WTJocGJHUk9iMlJsYzF0MWNHUmhkR1ZrU1c1a1pYaGRPMXh1SUNBZ0lDQWdJQ0IyWVhJZ2NHRnlaVzUwU1VRZ1BTQjFjR1JoZEdVdWNHRnlaVzUwU1VRN1hHNWNiaUFnSUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdJQ0IxY0dSaGRHVmtRMmhwYkdRc1hHNGdJQ0FnSUNBZ0lDQWdKM0J5YjJObGMzTlZjR1JoZEdWektDazZJRlZ1WVdKc1pTQjBieUJtYVc1a0lHTm9hV3hrSUNWeklHOW1JR1ZzWlcxbGJuUXVJRlJvYVhNZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjNCeWIySmhZbXg1SUcxbFlXNXpJSFJvWlNCRVQwMGdkMkZ6SUhWdVpYaHdaV04wWldSc2VTQnRkWFJoZEdWa0lDaGxMbWN1TENCaWVTQjBhR1VnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMkp5YjNkelpYSXBMQ0IxYzNWaGJHeDVJR1IxWlNCMGJ5Qm1iM0puWlhSMGFXNW5JR0VnUEhSaWIyUjVQaUIzYUdWdUlIVnphVzVuSUhSaFlteGxjeXdnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMjVsYzNScGJtY2dkR0ZuY3lCc2FXdGxJRHhtYjNKdFBpd2dQSEErTENCdmNpQThZVDRzSUc5eUlIVnphVzVuSUc1dmJpMVRWa2NnWld4bGJXVnVkSE1nSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMmx1SUdGdUlEeHpkbWMrSUhCaGNtVnVkQzRnVkhKNUlHbHVjM0JsWTNScGJtY2dkR2hsSUdOb2FXeGtJRzV2WkdWeklHOW1JSFJvWlNCbGJHVnRaVzUwSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2QzYVhSb0lGSmxZV04wSUVsRUlHQWxjMkF1Snl4Y2JpQWdJQ0FnSUNBZ0lDQjFjR1JoZEdWa1NXNWtaWGdzWEc0Z0lDQWdJQ0FnSUNBZ2NHRnlaVzUwU1VSY2JpQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2gxY0dSaGRHVmtRMmhwYkdRcEtUdGNibHh1SUNBZ0lDQWdJQ0JwYm1sMGFXRnNRMmhwYkdSeVpXNGdQU0JwYm1sMGFXRnNRMmhwYkdSeVpXNGdmSHdnZTMwN1hHNGdJQ0FnSUNBZ0lHbHVhWFJwWVd4RGFHbHNaSEpsYmx0d1lYSmxiblJKUkYwZ1BTQnBibWwwYVdGc1EyaHBiR1J5Wlc1YmNHRnlaVzUwU1VSZElIeDhJRnRkTzF4dUlDQWdJQ0FnSUNCcGJtbDBhV0ZzUTJocGJHUnlaVzViY0dGeVpXNTBTVVJkVzNWd1pHRjBaV1JKYm1SbGVGMGdQU0IxY0dSaGRHVmtRMmhwYkdRN1hHNWNiaUFnSUNBZ0lDQWdkWEJrWVhSbFpFTm9hV3hrY21WdUlEMGdkWEJrWVhSbFpFTm9hV3hrY21WdUlIeDhJRnRkTzF4dUlDQWdJQ0FnSUNCMWNHUmhkR1ZrUTJocGJHUnlaVzR1Y0hWemFDaDFjR1JoZEdWa1EyaHBiR1FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCeVpXNWtaWEpsWkUxaGNtdDFjQ0E5SUVSaGJtZGxjaTVrWVc1blpYSnZkWE5zZVZKbGJtUmxjazFoY210MWNDaHRZWEpyZFhCTWFYTjBLVHRjYmx4dUlDQWdJQzh2SUZKbGJXOTJaU0IxY0dSaGRHVmtJR05vYVd4a2NtVnVJR1pwY25OMElITnZJSFJvWVhRZ1lIUnZTVzVrWlhoZ0lHbHpJR052Ym5OcGMzUmxiblF1WEc0Z0lDQWdhV1lnS0hWd1pHRjBaV1JEYUdsc1pISmxiaWtnZTF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYWlBOUlEQTdJR29nUENCMWNHUmhkR1ZrUTJocGJHUnlaVzR1YkdWdVozUm9PeUJxS3lzcElIdGNiaUFnSUNBZ0lDQWdkWEJrWVhSbFpFTm9hV3hrY21WdVcycGRMbkJoY21WdWRFNXZaR1V1Y21WdGIzWmxRMmhwYkdRb2RYQmtZWFJsWkVOb2FXeGtjbVZ1VzJwZEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCbWIzSWdLSFpoY2lCcklEMGdNRHNnYXlBOElIVndaR0YwWlhNdWJHVnVaM1JvT3lCckt5c3BJSHRjYmlBZ0lDQWdJSFZ3WkdGMFpTQTlJSFZ3WkdGMFpYTmJhMTA3WEc0Z0lDQWdJQ0J6ZDJsMFkyZ2dLSFZ3WkdGMFpTNTBlWEJsS1NCN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnVW1WaFkzUk5kV3gwYVVOb2FXeGtWWEJrWVhSbFZIbHdaWE11U1U1VFJWSlVYMDFCVWt0VlVEcGNiaUFnSUNBZ0lDQWdJQ0JwYm5ObGNuUkRhR2xzWkVGMEtGeHVJQ0FnSUNBZ0lDQWdJQ0FnZFhCa1lYUmxMbkJoY21WdWRFNXZaR1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaVzVrWlhKbFpFMWhjbXQxY0Z0MWNHUmhkR1V1YldGeWEzVndTVzVrWlhoZExGeHVJQ0FnSUNBZ0lDQWdJQ0FnZFhCa1lYUmxMblJ2U1c1a1pYaGNiaUFnSUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNCallYTmxJRkpsWVdOMFRYVnNkR2xEYUdsc1pGVndaR0YwWlZSNWNHVnpMazFQVmtWZlJWaEpVMVJKVGtjNlhHNGdJQ0FnSUNBZ0lDQWdhVzV6WlhKMFEyaHBiR1JCZENoY2JpQWdJQ0FnSUNBZ0lDQWdJSFZ3WkdGMFpTNXdZWEpsYm5ST2IyUmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2FXNXBkR2xoYkVOb2FXeGtjbVZ1VzNWd1pHRjBaUzV3WVhKbGJuUkpSRjFiZFhCa1lYUmxMbVp5YjIxSmJtUmxlRjBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjFjR1JoZEdVdWRHOUpibVJsZUZ4dUlDQWdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJR05oYzJVZ1VtVmhZM1JOZFd4MGFVTm9hV3hrVlhCa1lYUmxWSGx3WlhNdVZFVllWRjlEVDA1VVJVNVVPbHh1SUNBZ0lDQWdJQ0FnSUhObGRGUmxlSFJEYjI1MFpXNTBLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RYQmtZWFJsTG5CaGNtVnVkRTV2WkdVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IxY0dSaGRHVXVkR1Y0ZEVOdmJuUmxiblJjYmlBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUZKbFlXTjBUWFZzZEdsRGFHbHNaRlZ3WkdGMFpWUjVjR1Z6TGxKRlRVOVdSVjlPVDBSRk9seHVJQ0FnSUNBZ0lDQWdJQzh2SUVGc2NtVmhaSGtnY21WdGIzWmxaQ0JpZVNCMGFHVWdabTl5TFd4dmIzQWdZV0p2ZG1VdVhHNGdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdSRTlOUTJocGJHUnlaVzVQY0dWeVlYUnBiMjV6TzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIERPTVByb3BlcnR5XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbi8qanNsaW50IGJpdHdpc2U6IHRydWUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG5mdW5jdGlvbiBjaGVja01hc2sodmFsdWUsIGJpdG1hc2spIHtcbiAgcmV0dXJuICh2YWx1ZSAmIGJpdG1hc2spID09PSBiaXRtYXNrO1xufVxuXG52YXIgRE9NUHJvcGVydHlJbmplY3Rpb24gPSB7XG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCwgY2FtZWxjYXNlZCBwcm9wZXJ0eSBuYW1lcyB0byBhIGNvbmZpZ3VyYXRpb24gdGhhdFxuICAgKiBzcGVjaWZpZXMgaG93IHRoZSBhc3NvY2lhdGVkIERPTSBwcm9wZXJ0eSBzaG91bGQgYmUgYWNjZXNzZWQgb3IgcmVuZGVyZWQuXG4gICAqL1xuICBNVVNUX1VTRV9BVFRSSUJVVEU6IDB4MSxcbiAgTVVTVF9VU0VfUFJPUEVSVFk6IDB4MixcbiAgSEFTX1NJREVfRUZGRUNUUzogMHg0LFxuICBIQVNfQk9PTEVBTl9WQUxVRTogMHg4LFxuICBIQVNfTlVNRVJJQ19WQUxVRTogMHgxMCxcbiAgSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUU6IDB4MjAgfCAweDEwLFxuICBIQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFOiAweDQwLFxuXG4gIC8qKlxuICAgKiBJbmplY3Qgc29tZSBzcGVjaWFsaXplZCBrbm93bGVkZ2UgYWJvdXQgdGhlIERPTS4gVGhpcyB0YWtlcyBhIGNvbmZpZyBvYmplY3RcbiAgICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqXG4gICAqIGlzQ3VzdG9tQXR0cmlidXRlOiBmdW5jdGlvbiB0aGF0IGdpdmVuIGFuIGF0dHJpYnV0ZSBuYW1lIHdpbGwgcmV0dXJuIHRydWVcbiAgICogaWYgaXQgY2FuIGJlIGluc2VydGVkIGludG8gdGhlIERPTSB2ZXJiYXRpbS4gVXNlZnVsIGZvciBkYXRhLSogb3IgYXJpYS0qXG4gICAqIGF0dHJpYnV0ZXMgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIGVudW1lcmF0ZSBhbGwgb2YgdGhlIHBvc3NpYmxlXG4gICAqIGF0dHJpYnV0ZSBuYW1lcyxcbiAgICpcbiAgICogUHJvcGVydGllczogb2JqZWN0IG1hcHBpbmcgRE9NIHByb3BlcnR5IG5hbWUgdG8gb25lIG9mIHRoZVxuICAgKiBET01Qcm9wZXJ0eUluamVjdGlvbiBjb25zdGFudHMgb3IgbnVsbC4gSWYgeW91ciBhdHRyaWJ1dGUgaXNuJ3QgaW4gaGVyZSxcbiAgICogaXQgd29uJ3QgZ2V0IHdyaXR0ZW4gdG8gdGhlIERPTS5cbiAgICpcbiAgICogRE9NQXR0cmlidXRlTmFtZXM6IG9iamVjdCBtYXBwaW5nIFJlYWN0IGF0dHJpYnV0ZSBuYW1lIHRvIHRoZSBET01cbiAgICogYXR0cmlidXRlIG5hbWUuIEF0dHJpYnV0ZSBuYW1lcyBub3Qgc3BlY2lmaWVkIHVzZSB0aGUgKipsb3dlcmNhc2UqKlxuICAgKiBub3JtYWxpemVkIG5hbWUuXG4gICAqXG4gICAqIERPTVByb3BlcnR5TmFtZXM6IHNpbWlsYXIgdG8gRE9NQXR0cmlidXRlTmFtZXMgYnV0IGZvciBET00gcHJvcGVydGllcy5cbiAgICogUHJvcGVydHkgbmFtZXMgbm90IHNwZWNpZmllZCB1c2UgdGhlIG5vcm1hbGl6ZWQgbmFtZS5cbiAgICpcbiAgICogRE9NTXV0YXRpb25NZXRob2RzOiBQcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIG11dGF0aW9uIG1ldGhvZHMuIElmXG4gICAqIGB2YWx1ZWAgaXMgdW5kZWZpbmVkLCB0aGUgbXV0YXRpb24gbWV0aG9kIHNob3VsZCB1bnNldCB0aGUgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkb21Qcm9wZXJ0eUNvbmZpZyB0aGUgY29uZmlnIGFzIGRlc2NyaWJlZCBhYm92ZS5cbiAgICovXG4gIGluamVjdERPTVByb3BlcnR5Q29uZmlnOiBmdW5jdGlvbihkb21Qcm9wZXJ0eUNvbmZpZykge1xuICAgIHZhciBQcm9wZXJ0aWVzID0gZG9tUHJvcGVydHlDb25maWcuUHJvcGVydGllcyB8fCB7fTtcbiAgICB2YXIgRE9NQXR0cmlidXRlTmFtZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5ET01BdHRyaWJ1dGVOYW1lcyB8fCB7fTtcbiAgICB2YXIgRE9NUHJvcGVydHlOYW1lcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTVByb3BlcnR5TmFtZXMgfHwge307XG4gICAgdmFyIERPTU11dGF0aW9uTWV0aG9kcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTU11dGF0aW9uTWV0aG9kcyB8fCB7fTtcblxuICAgIGlmIChkb21Qcm9wZXJ0eUNvbmZpZy5pc0N1c3RvbUF0dHJpYnV0ZSkge1xuICAgICAgRE9NUHJvcGVydHkuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zLnB1c2goXG4gICAgICAgIGRvbVByb3BlcnR5Q29uZmlnLmlzQ3VzdG9tQXR0cmlidXRlXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIFByb3BlcnRpZXMpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICFET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSksXG4gICAgICAgICdpbmplY3RET01Qcm9wZXJ0eUNvbmZpZyguLi4pOiBZb3VcXCdyZSB0cnlpbmcgdG8gaW5qZWN0IERPTSBwcm9wZXJ0eSAnICtcbiAgICAgICAgJ1xcJyVzXFwnIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gaW5qZWN0ZWQuIFlvdSBtYXkgYmUgYWNjaWRlbnRhbGx5ICcgK1xuICAgICAgICAnaW5qZWN0aW5nIHRoZSBzYW1lIERPTSBwcm9wZXJ0eSBjb25maWcgdHdpY2UsIG9yIHlvdSBtYXkgYmUgJyArXG4gICAgICAgICdpbmplY3RpbmcgdHdvIGNvbmZpZ3MgdGhhdCBoYXZlIGNvbmZsaWN0aW5nIHByb3BlcnR5IG5hbWVzLicsXG4gICAgICAgIHByb3BOYW1lXG4gICAgICApIDogaW52YXJpYW50KCFET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpKTtcblxuICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbcHJvcE5hbWVdID0gdHJ1ZTtcblxuICAgICAgdmFyIGxvd2VyQ2FzZWQgPSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgRE9NUHJvcGVydHkuZ2V0UG9zc2libGVTdGFuZGFyZE5hbWVbbG93ZXJDYXNlZF0gPSBwcm9wTmFtZTtcblxuICAgICAgaWYgKERPTUF0dHJpYnV0ZU5hbWVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IERPTUF0dHJpYnV0ZU5hbWVzW3Byb3BOYW1lXTtcbiAgICAgICAgRE9NUHJvcGVydHkuZ2V0UG9zc2libGVTdGFuZGFyZE5hbWVbYXR0cmlidXRlTmFtZV0gPSBwcm9wTmFtZTtcbiAgICAgICAgRE9NUHJvcGVydHkuZ2V0QXR0cmlidXRlTmFtZVtwcm9wTmFtZV0gPSBhdHRyaWJ1dGVOYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgRE9NUHJvcGVydHkuZ2V0QXR0cmlidXRlTmFtZVtwcm9wTmFtZV0gPSBsb3dlckNhc2VkO1xuICAgICAgfVxuXG4gICAgICBET01Qcm9wZXJ0eS5nZXRQcm9wZXJ0eU5hbWVbcHJvcE5hbWVdID1cbiAgICAgICAgRE9NUHJvcGVydHlOYW1lcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgP1xuICAgICAgICAgIERPTVByb3BlcnR5TmFtZXNbcHJvcE5hbWVdIDpcbiAgICAgICAgICBwcm9wTmFtZTtcblxuICAgICAgaWYgKERPTU11dGF0aW9uTWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgRE9NUHJvcGVydHkuZ2V0TXV0YXRpb25NZXRob2RbcHJvcE5hbWVdID0gRE9NTXV0YXRpb25NZXRob2RzW3Byb3BOYW1lXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIERPTVByb3BlcnR5LmdldE11dGF0aW9uTWV0aG9kW3Byb3BOYW1lXSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9wQ29uZmlnID0gUHJvcGVydGllc1twcm9wTmFtZV07XG4gICAgICBET01Qcm9wZXJ0eS5tdXN0VXNlQXR0cmlidXRlW3Byb3BOYW1lXSA9XG4gICAgICAgIGNoZWNrTWFzayhwcm9wQ29uZmlnLCBET01Qcm9wZXJ0eUluamVjdGlvbi5NVVNUX1VTRV9BVFRSSUJVVEUpO1xuICAgICAgRE9NUHJvcGVydHkubXVzdFVzZVByb3BlcnR5W3Byb3BOYW1lXSA9XG4gICAgICAgIGNoZWNrTWFzayhwcm9wQ29uZmlnLCBET01Qcm9wZXJ0eUluamVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWSk7XG4gICAgICBET01Qcm9wZXJ0eS5oYXNTaWRlRWZmZWN0c1twcm9wTmFtZV0gPVxuICAgICAgICBjaGVja01hc2socHJvcENvbmZpZywgRE9NUHJvcGVydHlJbmplY3Rpb24uSEFTX1NJREVfRUZGRUNUUyk7XG4gICAgICBET01Qcm9wZXJ0eS5oYXNCb29sZWFuVmFsdWVbcHJvcE5hbWVdID1cbiAgICAgICAgY2hlY2tNYXNrKHByb3BDb25maWcsIERPTVByb3BlcnR5SW5qZWN0aW9uLkhBU19CT09MRUFOX1ZBTFVFKTtcbiAgICAgIERPTVByb3BlcnR5Lmhhc051bWVyaWNWYWx1ZVtwcm9wTmFtZV0gPVxuICAgICAgICBjaGVja01hc2socHJvcENvbmZpZywgRE9NUHJvcGVydHlJbmplY3Rpb24uSEFTX05VTUVSSUNfVkFMVUUpO1xuICAgICAgRE9NUHJvcGVydHkuaGFzUG9zaXRpdmVOdW1lcmljVmFsdWVbcHJvcE5hbWVdID1cbiAgICAgICAgY2hlY2tNYXNrKHByb3BDb25maWcsIERPTVByb3BlcnR5SW5qZWN0aW9uLkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFKTtcbiAgICAgIERPTVByb3BlcnR5Lmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWVbcHJvcE5hbWVdID1cbiAgICAgICAgY2hlY2tNYXNrKHByb3BDb25maWcsIERPTVByb3BlcnR5SW5qZWN0aW9uLkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUpO1xuXG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAhRE9NUHJvcGVydHkubXVzdFVzZUF0dHJpYnV0ZVtwcm9wTmFtZV0gfHxcbiAgICAgICAgICAhRE9NUHJvcGVydHkubXVzdFVzZVByb3BlcnR5W3Byb3BOYW1lXSxcbiAgICAgICAgJ0RPTVByb3BlcnR5OiBDYW5ub3QgcmVxdWlyZSB1c2luZyBib3RoIGF0dHJpYnV0ZSBhbmQgcHJvcGVydHk6ICVzJyxcbiAgICAgICAgcHJvcE5hbWVcbiAgICAgICkgOiBpbnZhcmlhbnQoIURPTVByb3BlcnR5Lm11c3RVc2VBdHRyaWJ1dGVbcHJvcE5hbWVdIHx8XG4gICAgICAgICFET01Qcm9wZXJ0eS5tdXN0VXNlUHJvcGVydHlbcHJvcE5hbWVdKSk7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICBET01Qcm9wZXJ0eS5tdXN0VXNlUHJvcGVydHlbcHJvcE5hbWVdIHx8XG4gICAgICAgICAgIURPTVByb3BlcnR5Lmhhc1NpZGVFZmZlY3RzW3Byb3BOYW1lXSxcbiAgICAgICAgJ0RPTVByb3BlcnR5OiBQcm9wZXJ0aWVzIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMgbXVzdCB1c2UgcHJvcGVydHk6ICVzJyxcbiAgICAgICAgcHJvcE5hbWVcbiAgICAgICkgOiBpbnZhcmlhbnQoRE9NUHJvcGVydHkubXVzdFVzZVByb3BlcnR5W3Byb3BOYW1lXSB8fFxuICAgICAgICAhRE9NUHJvcGVydHkuaGFzU2lkZUVmZmVjdHNbcHJvcE5hbWVdKSk7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAhIURPTVByb3BlcnR5Lmhhc0Jvb2xlYW5WYWx1ZVtwcm9wTmFtZV0gK1xuICAgICAgICAgICEhRE9NUHJvcGVydHkuaGFzTnVtZXJpY1ZhbHVlW3Byb3BOYW1lXSArXG4gICAgICAgICAgISFET01Qcm9wZXJ0eS5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlW3Byb3BOYW1lXSA8PSAxLFxuICAgICAgICAnRE9NUHJvcGVydHk6IFZhbHVlIGNhbiBiZSBvbmUgb2YgYm9vbGVhbiwgb3ZlcmxvYWRlZCBib29sZWFuLCBvciAnICtcbiAgICAgICAgJ251bWVyaWMgdmFsdWUsIGJ1dCBub3QgYSBjb21iaW5hdGlvbjogJXMnLFxuICAgICAgICBwcm9wTmFtZVxuICAgICAgKSA6IGludmFyaWFudCghIURPTVByb3BlcnR5Lmhhc0Jvb2xlYW5WYWx1ZVtwcm9wTmFtZV0gK1xuICAgICAgICAhIURPTVByb3BlcnR5Lmhhc051bWVyaWNWYWx1ZVtwcm9wTmFtZV0gK1xuICAgICAgICAhIURPTVByb3BlcnR5Lmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWVbcHJvcE5hbWVdIDw9IDEpKTtcbiAgICB9XG4gIH1cbn07XG52YXIgZGVmYXVsdFZhbHVlQ2FjaGUgPSB7fTtcblxuLyoqXG4gKiBET01Qcm9wZXJ0eSBleHBvcnRzIGxvb2t1cCBvYmplY3RzIHRoYXQgY2FuIGJlIHVzZWQgbGlrZSBmdW5jdGlvbnM6XG4gKlxuICogICA+IERPTVByb3BlcnR5LmlzVmFsaWRbJ2lkJ11cbiAqICAgdHJ1ZVxuICogICA+IERPTVByb3BlcnR5LmlzVmFsaWRbJ2Zvb2JhciddXG4gKiAgIHVuZGVmaW5lZFxuICpcbiAqIEFsdGhvdWdoIHRoaXMgbWF5IGJlIGNvbmZ1c2luZywgaXQgcGVyZm9ybXMgYmV0dGVyIGluIGdlbmVyYWwuXG4gKlxuICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9rZXktZXhpc3RzXG4gKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2tleS1taXNzaW5nXG4gKi9cbnZhciBET01Qcm9wZXJ0eSA9IHtcblxuICBJRF9BVFRSSUJVVEVfTkFNRTogJ2RhdGEtcmVhY3RpZCcsXG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgcHJvcGVydHkgbmFtZSBpcyBhIHN0YW5kYXJkIHByb3BlcnR5LlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgaXNTdGFuZGFyZE5hbWU6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbG93ZXJjYXNlIHByb3BlcnR5IG5hbWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLCB1c2VkXG4gICAqIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBwcm9wZXJ0aWVzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgZ2V0UG9zc2libGVTdGFuZGFyZE5hbWU6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCBuYW1lcyB0byBhdHRyaWJ1dGUgbmFtZXMgdGhhdCBkaWZmZXIuIEF0dHJpYnV0ZVxuICAgKiBuYW1lcyBhcmUgdXNlZCB3aGVuIHJlbmRlcmluZyBtYXJrdXAgb3Igd2l0aCBgKkF0dHJpYnV0ZSgpYC5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGdldEF0dHJpYnV0ZU5hbWU6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCBuYW1lcyB0byBwcm9wZXJ0aWVzIG9uIERPTSBub2RlIGluc3RhbmNlcy5cbiAgICogKFRoaXMgaW5jbHVkZXMgcHJvcGVydGllcyB0aGF0IG11dGF0ZSBkdWUgdG8gZXh0ZXJuYWwgZmFjdG9ycy4pXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBnZXRQcm9wZXJ0eU5hbWU6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCBuYW1lcyB0byBtdXRhdGlvbiBtZXRob2RzLiBUaGlzIHdpbGwgb25seSBleGlzdCBpZlxuICAgKiBtdXRhdGlvbiBjYW5ub3QgYmUgc2V0IHNpbXBseSBieSB0aGUgcHJvcGVydHkgb3IgYHNldEF0dHJpYnV0ZSgpYC5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGdldE11dGF0aW9uTWV0aG9kOiB7fSxcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJvcGVydHkgbXVzdCBiZSBhY2Nlc3NlZCBhbmQgbXV0YXRlZCBhcyBhbiBvYmplY3QgcHJvcGVydHkuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBtdXN0VXNlQXR0cmlidXRlOiB7fSxcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJvcGVydHkgbXVzdCBiZSBhY2Nlc3NlZCBhbmQgbXV0YXRlZCB1c2luZyBgKkF0dHJpYnV0ZSgpYC5cbiAgICogKFRoaXMgaW5jbHVkZXMgYW55dGhpbmcgdGhhdCBmYWlscyBgPHByb3BOYW1lPiBpbiA8ZWxlbWVudD5gLilcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIG11c3RVc2VQcm9wZXJ0eToge30sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHNldHRpbmcgYSB2YWx1ZSBjYXVzZXMgc2lkZSBlZmZlY3RzIHN1Y2ggYXMgdHJpZ2dlcmluZ1xuICAgKiByZXNvdXJjZXMgdG8gYmUgbG9hZGVkIG9yIHRleHQgc2VsZWN0aW9uIGNoYW5nZXMuIFdlIG11c3QgZW5zdXJlIHRoYXRcbiAgICogdGhlIHZhbHVlIGlzIG9ubHkgc2V0IGlmIGl0IGhhcyBjaGFuZ2VkLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgaGFzU2lkZUVmZmVjdHM6IHt9LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHNldCB0byBhIGZhbHNleSB2YWx1ZS5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGhhc0Jvb2xlYW5WYWx1ZToge30sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhXG4gICAqIG51bWVyaWMgYW5kIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gc2V0IHRvIGEgZmFsc2V5IHZhbHVlLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgaGFzTnVtZXJpY1ZhbHVlOiB7fSxcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJvcGVydHkgbXVzdCBiZSBwb3NpdGl2ZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgcG9zaXRpdmVcbiAgICogbnVtZXJpYyBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBoYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZToge30sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb3BlcnR5IGNhbiBiZSB1c2VkIGFzIGEgZmxhZyBhcyB3ZWxsIGFzIHdpdGggYSB2YWx1ZS4gUmVtb3ZlZFxuICAgKiB3aGVuIHN0cmljdGx5IGVxdWFsIHRvIGZhbHNlOyBwcmVzZW50IHdpdGhvdXQgYSB2YWx1ZSB3aGVuIHN0cmljdGx5IGVxdWFsXG4gICAqIHRvIHRydWU7IHByZXNlbnQgd2l0aCBhIHZhbHVlIG90aGVyd2lzZS5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWU6IHt9LFxuXG4gIC8qKlxuICAgKiBBbGwgb2YgdGhlIGlzQ3VzdG9tQXR0cmlidXRlKCkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGluamVjdGVkLlxuICAgKi9cbiAgX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zOiBbXSxcblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBwcm9wZXJ0eSBuYW1lIGlzIGEgY3VzdG9tIGF0dHJpYnV0ZS5cbiAgICogQG1ldGhvZFxuICAgKi9cbiAgaXNDdXN0b21BdHRyaWJ1dGU6IGZ1bmN0aW9uKGF0dHJpYnV0ZU5hbWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IERPTVByb3BlcnR5Ll9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlzQ3VzdG9tQXR0cmlidXRlRm4gPSBET01Qcm9wZXJ0eS5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnNbaV07XG4gICAgICBpZiAoaXNDdXN0b21BdHRyaWJ1dGVGbihhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHByb3BlcnR5IHZhbHVlIGZvciBhIERPTSBwcm9wZXJ0eSAoaS5lLiwgbm90IGFuXG4gICAqIGF0dHJpYnV0ZSkuIE1vc3QgZGVmYXVsdCB2YWx1ZXMgYXJlICcnIG9yIGZhbHNlLCBidXQgbm90IGFsbC4gV29yc2UgeWV0LFxuICAgKiBzb21lIChpbiBwYXJ0aWN1bGFyLCBgdHlwZWApIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGVsZW1lbnQuXG4gICAqXG4gICAqIFRPRE86IElzIGl0IGJldHRlciB0byBncmFiIGFsbCB0aGUgcG9zc2libGUgcHJvcGVydGllcyB3aGVuIGNyZWF0aW5nIGFuXG4gICAqIGVsZW1lbnQgdG8gYXZvaWQgaGF2aW5nIHRvIGNyZWF0ZSB0aGUgc2FtZSBlbGVtZW50IHR3aWNlP1xuICAgKi9cbiAgZ2V0RGVmYXVsdFZhbHVlRm9yUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGVOYW1lLCBwcm9wKSB7XG4gICAgdmFyIG5vZGVEZWZhdWx0cyA9IGRlZmF1bHRWYWx1ZUNhY2hlW25vZGVOYW1lXTtcbiAgICB2YXIgdGVzdEVsZW1lbnQ7XG4gICAgaWYgKCFub2RlRGVmYXVsdHMpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZUNhY2hlW25vZGVOYW1lXSA9IG5vZGVEZWZhdWx0cyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIShwcm9wIGluIG5vZGVEZWZhdWx0cykpIHtcbiAgICAgIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChub2RlTmFtZSk7XG4gICAgICBub2RlRGVmYXVsdHNbcHJvcF0gPSB0ZXN0RWxlbWVudFtwcm9wXTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVEZWZhdWx0c1twcm9wXTtcbiAgfSxcblxuICBpbmplY3Rpb246IERPTVByb3BlcnR5SW5qZWN0aW9uXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERPTVByb3BlcnR5O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UkU5TlVISnZjR1Z5ZEhrdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JFVDAxUWNtOXdaWEowZVZ4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0dkttcHpiR2x1ZENCaWFYUjNhWE5sT2lCMGNuVmxJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYmx4dVpuVnVZM1JwYjI0Z1kyaGxZMnROWVhOcktIWmhiSFZsTENCaWFYUnRZWE5yS1NCN1hHNGdJSEpsZEhWeWJpQW9kbUZzZFdVZ0ppQmlhWFJ0WVhOcktTQTlQVDBnWW1sMGJXRnphenRjYm4xY2JseHVkbUZ5SUVSUFRWQnliM0JsY25SNVNXNXFaV04wYVc5dUlEMGdlMXh1SUNBdktpcGNiaUFnSUNvZ1RXRndjR2x1WnlCbWNtOXRJRzV2Y20xaGJHbDZaV1FzSUdOaGJXVnNZMkZ6WldRZ2NISnZjR1Z5ZEhrZ2JtRnRaWE1nZEc4Z1lTQmpiMjVtYVdkMWNtRjBhVzl1SUhSb1lYUmNiaUFnSUNvZ2MzQmxZMmxtYVdWeklHaHZkeUIwYUdVZ1lYTnpiMk5wWVhSbFpDQkVUMDBnY0hKdmNHVnlkSGtnYzJodmRXeGtJR0psSUdGalkyVnpjMlZrSUc5eUlISmxibVJsY21Wa0xseHVJQ0FnS2k5Y2JpQWdUVlZUVkY5VlUwVmZRVlJVVWtsQ1ZWUkZPaUF3ZURFc1hHNGdJRTFWVTFSZlZWTkZYMUJTVDFCRlVsUlpPaUF3ZURJc1hHNGdJRWhCVTE5VFNVUkZYMFZHUmtWRFZGTTZJREI0TkN4Y2JpQWdTRUZUWDBKUFQweEZRVTVmVmtGTVZVVTZJREI0T0N4Y2JpQWdTRUZUWDA1VlRVVlNTVU5mVmtGTVZVVTZJREI0TVRBc1hHNGdJRWhCVTE5UVQxTkpWRWxXUlY5T1ZVMUZVa2xEWDFaQlRGVkZPaUF3ZURJd0lId2dNSGd4TUN4Y2JpQWdTRUZUWDA5V1JWSk1UMEZFUlVSZlFrOVBURVZCVGw5V1FVeFZSVG9nTUhnME1DeGNibHh1SUNBdktpcGNiaUFnSUNvZ1NXNXFaV04wSUhOdmJXVWdjM0JsWTJsaGJHbDZaV1FnYTI1dmQyeGxaR2RsSUdGaWIzVjBJSFJvWlNCRVQwMHVJRlJvYVhNZ2RHRnJaWE1nWVNCamIyNW1hV2NnYjJKcVpXTjBYRzRnSUNBcUlIZHBkR2dnZEdobElHWnZiR3h2ZDJsdVp5QndjbTl3WlhKMGFXVnpPbHh1SUNBZ0tseHVJQ0FnS2lCcGMwTjFjM1J2YlVGMGRISnBZblYwWlRvZ1puVnVZM1JwYjI0Z2RHaGhkQ0JuYVhabGJpQmhiaUJoZEhSeWFXSjFkR1VnYm1GdFpTQjNhV3hzSUhKbGRIVnliaUIwY25WbFhHNGdJQ0FxSUdsbUlHbDBJR05oYmlCaVpTQnBibk5sY25SbFpDQnBiblJ2SUhSb1pTQkVUMDBnZG1WeVltRjBhVzB1SUZWelpXWjFiQ0JtYjNJZ1pHRjBZUzBxSUc5eUlHRnlhV0V0S2x4dUlDQWdLaUJoZEhSeWFXSjFkR1Z6SUhkb1pYSmxJR2wwSjNNZ2FXMXdiM056YVdKc1pTQjBieUJsYm5WdFpYSmhkR1VnWVd4c0lHOW1JSFJvWlNCd2IzTnphV0pzWlZ4dUlDQWdLaUJoZEhSeWFXSjFkR1VnYm1GdFpYTXNYRzRnSUNBcVhHNGdJQ0FxSUZCeWIzQmxjblJwWlhNNklHOWlhbVZqZENCdFlYQndhVzVuSUVSUFRTQndjbTl3WlhKMGVTQnVZVzFsSUhSdklHOXVaU0J2WmlCMGFHVmNiaUFnSUNvZ1JFOU5VSEp2Y0dWeWRIbEpibXBsWTNScGIyNGdZMjl1YzNSaGJuUnpJRzl5SUc1MWJHd3VJRWxtSUhsdmRYSWdZWFIwY21saWRYUmxJR2x6YmlkMElHbHVJR2hsY21Vc1hHNGdJQ0FxSUdsMElIZHZiaWQwSUdkbGRDQjNjbWwwZEdWdUlIUnZJSFJvWlNCRVQwMHVYRzRnSUNBcVhHNGdJQ0FxSUVSUFRVRjBkSEpwWW5WMFpVNWhiV1Z6T2lCdlltcGxZM1FnYldGd2NHbHVaeUJTWldGamRDQmhkSFJ5YVdKMWRHVWdibUZ0WlNCMGJ5QjBhR1VnUkU5TlhHNGdJQ0FxSUdGMGRISnBZblYwWlNCdVlXMWxMaUJCZEhSeWFXSjFkR1VnYm1GdFpYTWdibTkwSUhOd1pXTnBabWxsWkNCMWMyVWdkR2hsSUNvcWJHOTNaWEpqWVhObEtpcGNiaUFnSUNvZ2JtOXliV0ZzYVhwbFpDQnVZVzFsTGx4dUlDQWdLbHh1SUNBZ0tpQkVUMDFRY205d1pYSjBlVTVoYldWek9pQnphVzFwYkdGeUlIUnZJRVJQVFVGMGRISnBZblYwWlU1aGJXVnpJR0oxZENCbWIzSWdSRTlOSUhCeWIzQmxjblJwWlhNdVhHNGdJQ0FxSUZCeWIzQmxjblI1SUc1aGJXVnpJRzV2ZENCemNHVmphV1pwWldRZ2RYTmxJSFJvWlNCdWIzSnRZV3hwZW1Wa0lHNWhiV1V1WEc0Z0lDQXFYRzRnSUNBcUlFUlBUVTExZEdGMGFXOXVUV1YwYUc5a2N6b2dVSEp2Y0dWeWRHbGxjeUIwYUdGMElISmxjWFZwY21VZ2MzQmxZMmxoYkNCdGRYUmhkR2x2YmlCdFpYUm9iMlJ6TGlCSlpseHVJQ0FnS2lCZ2RtRnNkV1ZnSUdseklIVnVaR1ZtYVc1bFpDd2dkR2hsSUcxMWRHRjBhVzl1SUcxbGRHaHZaQ0J6YUc5MWJHUWdkVzV6WlhRZ2RHaGxJSEJ5YjNCbGNuUjVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnWkc5dFVISnZjR1Z5ZEhsRGIyNW1hV2NnZEdobElHTnZibVpwWnlCaGN5QmtaWE5qY21saVpXUWdZV0p2ZG1VdVhHNGdJQ0FxTDF4dUlDQnBibXBsWTNSRVQwMVFjbTl3WlhKMGVVTnZibVpwWnpvZ1puVnVZM1JwYjI0b1pHOXRVSEp2Y0dWeWRIbERiMjVtYVdjcElIdGNiaUFnSUNCMllYSWdVSEp2Y0dWeWRHbGxjeUE5SUdSdmJWQnliM0JsY25SNVEyOXVabWxuTGxCeWIzQmxjblJwWlhNZ2ZId2dlMzA3WEc0Z0lDQWdkbUZ5SUVSUFRVRjBkSEpwWW5WMFpVNWhiV1Z6SUQwZ1pHOXRVSEp2Y0dWeWRIbERiMjVtYVdjdVJFOU5RWFIwY21saWRYUmxUbUZ0WlhNZ2ZId2dlMzA3WEc0Z0lDQWdkbUZ5SUVSUFRWQnliM0JsY25SNVRtRnRaWE1nUFNCa2IyMVFjbTl3WlhKMGVVTnZibVpwWnk1RVQwMVFjbTl3WlhKMGVVNWhiV1Z6SUh4OElIdDlPMXh1SUNBZ0lIWmhjaUJFVDAxTmRYUmhkR2x2YmsxbGRHaHZaSE1nUFNCa2IyMVFjbTl3WlhKMGVVTnZibVpwWnk1RVQwMU5kWFJoZEdsdmJrMWxkR2h2WkhNZ2ZId2dlMzA3WEc1Y2JpQWdJQ0JwWmlBb1pHOXRVSEp2Y0dWeWRIbERiMjVtYVdjdWFYTkRkWE4wYjIxQmRIUnlhV0oxZEdVcElIdGNiaUFnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbDlwYzBOMWMzUnZiVUYwZEhKcFluVjBaVVoxYm1OMGFXOXVjeTV3ZFhOb0tGeHVJQ0FnSUNBZ0lDQmtiMjFRY205d1pYSjBlVU52Ym1acFp5NXBjME4xYzNSdmJVRjBkSEpwWW5WMFpWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCbWIzSWdLSFpoY2lCd2NtOXdUbUZ0WlNCcGJpQlFjbTl3WlhKMGFXVnpLU0I3WEc0Z0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJQ0FoUkU5TlVISnZjR1Z5ZEhrdWFYTlRkR0Z1WkdGeVpFNWhiV1V1YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0U1aGJXVXBMRnh1SUNBZ0lDQWdJQ0FuYVc1cVpXTjBSRTlOVUhKdmNHVnlkSGxEYjI1bWFXY29MaTR1S1RvZ1dXOTFYRnduY21VZ2RISjVhVzVuSUhSdklHbHVhbVZqZENCRVQwMGdjSEp2Y0dWeWRIa2dKeUFyWEc0Z0lDQWdJQ0FnSUNkY1hDY2xjMXhjSnlCM2FHbGphQ0JvWVhNZ1lXeHlaV0ZrZVNCaVpXVnVJR2x1YW1WamRHVmtMaUJaYjNVZ2JXRjVJR0psSUdGalkybGtaVzUwWVd4c2VTQW5JQ3RjYmlBZ0lDQWdJQ0FnSjJsdWFtVmpkR2x1WnlCMGFHVWdjMkZ0WlNCRVQwMGdjSEp2Y0dWeWRIa2dZMjl1Wm1sbklIUjNhV05sTENCdmNpQjViM1VnYldGNUlHSmxJQ2NnSzF4dUlDQWdJQ0FnSUNBbmFXNXFaV04wYVc1bklIUjNieUJqYjI1bWFXZHpJSFJvWVhRZ2FHRjJaU0JqYjI1bWJHbGpkR2x1WnlCd2NtOXdaWEowZVNCdVlXMWxjeTRuTEZ4dUlDQWdJQ0FnSUNCd2NtOXdUbUZ0WlZ4dUlDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDZ2hSRTlOVUhKdmNHVnlkSGt1YVhOVGRHRnVaR0Z5WkU1aGJXVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRTVoYldVcEtTazdYRzVjYmlBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1selUzUmhibVJoY21ST1lXMWxXM0J5YjNCT1lXMWxYU0E5SUhSeWRXVTdYRzVjYmlBZ0lDQWdJSFpoY2lCc2IzZGxja05oYzJWa0lEMGdjSEp2Y0U1aGJXVXVkRzlNYjNkbGNrTmhjMlVvS1R0Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtZGxkRkJ2YzNOcFlteGxVM1JoYm1SaGNtUk9ZVzFsVzJ4dmQyVnlRMkZ6WldSZElEMGdjSEp2Y0U1aGJXVTdYRzVjYmlBZ0lDQWdJR2xtSUNoRVQwMUJkSFJ5YVdKMWRHVk9ZVzFsY3k1b1lYTlBkMjVRY205d1pYSjBlU2h3Y205d1RtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJR0YwZEhKcFluVjBaVTVoYldVZ1BTQkVUMDFCZEhSeWFXSjFkR1ZPWVcxbGMxdHdjbTl3VG1GdFpWMDdYRzRnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1kbGRGQnZjM05wWW14bFUzUmhibVJoY21ST1lXMWxXMkYwZEhKcFluVjBaVTVoYldWZElEMGdjSEp2Y0U1aGJXVTdYRzRnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1kbGRFRjBkSEpwWW5WMFpVNWhiV1ZiY0hKdmNFNWhiV1ZkSUQwZ1lYUjBjbWxpZFhSbFRtRnRaVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1kbGRFRjBkSEpwWW5WMFpVNWhiV1ZiY0hKdmNFNWhiV1ZkSUQwZ2JHOTNaWEpEWVhObFpEdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1WjJWMFVISnZjR1Z5ZEhsT1lXMWxXM0J5YjNCT1lXMWxYU0E5WEc0Z0lDQWdJQ0FnSUVSUFRWQnliM0JsY25SNVRtRnRaWE11YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0U1aGJXVXBJRDljYmlBZ0lDQWdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVVNWhiV1Z6VzNCeWIzQk9ZVzFsWFNBNlhHNGdJQ0FnSUNBZ0lDQWdjSEp2Y0U1aGJXVTdYRzVjYmlBZ0lDQWdJR2xtSUNoRVQwMU5kWFJoZEdsdmJrMWxkR2h2WkhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0hKdmNFNWhiV1VwS1NCN1hHNGdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWRsZEUxMWRHRjBhVzl1VFdWMGFHOWtXM0J5YjNCT1lXMWxYU0E5SUVSUFRVMTFkR0YwYVc5dVRXVjBhRzlrYzF0d2NtOXdUbUZ0WlYwN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVTNW5aWFJOZFhSaGRHbHZiazFsZEdodlpGdHdjbTl3VG1GdFpWMGdQU0J1ZFd4c08xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQjJZWElnY0hKdmNFTnZibVpwWnlBOUlGQnliM0JsY25ScFpYTmJjSEp2Y0U1aGJXVmRPMXh1SUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YlhWemRGVnpaVUYwZEhKcFluVjBaVnR3Y205d1RtRnRaVjBnUFZ4dUlDQWdJQ0FnSUNCamFHVmphMDFoYzJzb2NISnZjRU52Ym1acFp5d2dSRTlOVUhKdmNHVnlkSGxKYm1wbFkzUnBiMjR1VFZWVFZGOVZVMFZmUVZSVVVrbENWVlJGS1R0Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtMTFjM1JWYzJWUWNtOXdaWEowZVZ0d2NtOXdUbUZ0WlYwZ1BWeHVJQ0FnSUNBZ0lDQmphR1ZqYTAxaGMyc29jSEp2Y0VOdmJtWnBaeXdnUkU5TlVISnZjR1Z5ZEhsSmJtcGxZM1JwYjI0dVRWVlRWRjlWVTBWZlVGSlBVRVZTVkZrcE8xeHVJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3VhR0Z6VTJsa1pVVm1abVZqZEhOYmNISnZjRTVoYldWZElEMWNiaUFnSUNBZ0lDQWdZMmhsWTJ0TllYTnJLSEJ5YjNCRGIyNW1hV2NzSUVSUFRWQnliM0JsY25SNVNXNXFaV04wYVc5dUxraEJVMTlUU1VSRlgwVkdSa1ZEVkZNcE8xeHVJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3VhR0Z6UW05dmJHVmhibFpoYkhWbFczQnliM0JPWVcxbFhTQTlYRzRnSUNBZ0lDQWdJR05vWldOclRXRnpheWh3Y205d1EyOXVabWxuTENCRVQwMVFjbTl3WlhKMGVVbHVhbVZqZEdsdmJpNUlRVk5mUWs5UFRFVkJUbDlXUVV4VlJTazdYRzRnSUNBZ0lDQkVUMDFRY205d1pYSjBlUzVvWVhOT2RXMWxjbWxqVm1Gc2RXVmJjSEp2Y0U1aGJXVmRJRDFjYmlBZ0lDQWdJQ0FnWTJobFkydE5ZWE5yS0hCeWIzQkRiMjVtYVdjc0lFUlBUVkJ5YjNCbGNuUjVTVzVxWldOMGFXOXVMa2hCVTE5T1ZVMUZVa2xEWDFaQlRGVkZLVHRjYmlBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1oaGMxQnZjMmwwYVhabFRuVnRaWEpwWTFaaGJIVmxXM0J5YjNCT1lXMWxYU0E5WEc0Z0lDQWdJQ0FnSUdOb1pXTnJUV0Z6YXlod2NtOXdRMjl1Wm1sbkxDQkVUMDFRY205d1pYSjBlVWx1YW1WamRHbHZiaTVJUVZOZlVFOVRTVlJKVmtWZlRsVk5SVkpKUTE5V1FVeFZSU2s3WEc0Z0lDQWdJQ0JFVDAxUWNtOXdaWEowZVM1b1lYTlBkbVZ5Ykc5aFpHVmtRbTl2YkdWaGJsWmhiSFZsVzNCeWIzQk9ZVzFsWFNBOVhHNGdJQ0FnSUNBZ0lHTm9aV05yVFdGemF5aHdjbTl3UTI5dVptbG5MQ0JFVDAxUWNtOXdaWEowZVVsdWFtVmpkR2x2Ymk1SVFWTmZUMVpGVWt4UFFVUkZSRjlDVDA5TVJVRk9YMVpCVEZWRktUdGNibHh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdJVVJQVFZCeWIzQmxjblI1TG0xMWMzUlZjMlZCZEhSeWFXSjFkR1ZiY0hKdmNFNWhiV1ZkSUh4OFhHNGdJQ0FnSUNBZ0lDQWdJVVJQVFZCeWIzQmxjblI1TG0xMWMzUlZjMlZRY205d1pYSjBlVnR3Y205d1RtRnRaVjBzWEc0Z0lDQWdJQ0FnSUNkRVQwMVFjbTl3WlhKMGVUb2dRMkZ1Ym05MElISmxjWFZwY21VZ2RYTnBibWNnWW05MGFDQmhkSFJ5YVdKMWRHVWdZVzVrSUhCeWIzQmxjblI1T2lBbGN5Y3NYRzRnSUNBZ0lDQWdJSEJ5YjNCT1lXMWxYRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0NGRVQwMVFjbTl3WlhKMGVTNXRkWE4wVlhObFFYUjBjbWxpZFhSbFczQnliM0JPWVcxbFhTQjhmRnh1SUNBZ0lDQWdJQ0FoUkU5TlVISnZjR1Z5ZEhrdWJYVnpkRlZ6WlZCeWIzQmxjblI1VzNCeWIzQk9ZVzFsWFNrcE8xeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3ViWFZ6ZEZWelpWQnliM0JsY25SNVczQnliM0JPWVcxbFhTQjhmRnh1SUNBZ0lDQWdJQ0FnSUNGRVQwMVFjbTl3WlhKMGVTNW9ZWE5UYVdSbFJXWm1aV04wYzF0d2NtOXdUbUZ0WlYwc1hHNGdJQ0FnSUNBZ0lDZEVUMDFRY205d1pYSjBlVG9nVUhKdmNHVnlkR2xsY3lCMGFHRjBJR2hoZG1VZ2MybGtaU0JsWm1abFkzUnpJRzExYzNRZ2RYTmxJSEJ5YjNCbGNuUjVPaUFsY3ljc1hHNGdJQ0FnSUNBZ0lIQnliM0JPWVcxbFhHNGdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLRVJQVFZCeWIzQmxjblI1TG0xMWMzUlZjMlZRY205d1pYSjBlVnR3Y205d1RtRnRaVjBnZkh4Y2JpQWdJQ0FnSUNBZ0lVUlBUVkJ5YjNCbGNuUjVMbWhoYzFOcFpHVkZabVpsWTNSelczQnliM0JPWVcxbFhTa3BPMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdJU0ZFVDAxUWNtOXdaWEowZVM1b1lYTkNiMjlzWldGdVZtRnNkV1ZiY0hKdmNFNWhiV1ZkSUN0Y2JpQWdJQ0FnSUNBZ0lDQWhJVVJQVFZCeWIzQmxjblI1TG1oaGMwNTFiV1Z5YVdOV1lXeDFaVnR3Y205d1RtRnRaVjBnSzF4dUlDQWdJQ0FnSUNBZ0lDRWhSRTlOVUhKdmNHVnlkSGt1YUdGelQzWmxjbXh2WVdSbFpFSnZiMnhsWVc1V1lXeDFaVnR3Y205d1RtRnRaVjBnUEQwZ01TeGNiaUFnSUNBZ0lDQWdKMFJQVFZCeWIzQmxjblI1T2lCV1lXeDFaU0JqWVc0Z1ltVWdiMjVsSUc5bUlHSnZiMnhsWVc0c0lHOTJaWEpzYjJGa1pXUWdZbTl2YkdWaGJpd2diM0lnSnlBclhHNGdJQ0FnSUNBZ0lDZHVkVzFsY21saklIWmhiSFZsTENCaWRYUWdibTkwSUdFZ1kyOXRZbWx1WVhScGIyNDZJQ1Z6Snl4Y2JpQWdJQ0FnSUNBZ2NISnZjRTVoYldWY2JpQWdJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9JU0ZFVDAxUWNtOXdaWEowZVM1b1lYTkNiMjlzWldGdVZtRnNkV1ZiY0hKdmNFNWhiV1ZkSUN0Y2JpQWdJQ0FnSUNBZ0lTRkVUMDFRY205d1pYSjBlUzVvWVhOT2RXMWxjbWxqVm1Gc2RXVmJjSEp2Y0U1aGJXVmRJQ3RjYmlBZ0lDQWdJQ0FnSVNGRVQwMVFjbTl3WlhKMGVTNW9ZWE5QZG1WeWJHOWhaR1ZrUW05dmJHVmhibFpoYkhWbFczQnliM0JPWVcxbFhTQThQU0F4S1NrN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5TzF4dWRtRnlJR1JsWm1GMWJIUldZV3gxWlVOaFkyaGxJRDBnZTMwN1hHNWNiaThxS2x4dUlDb2dSRTlOVUhKdmNHVnlkSGtnWlhod2IzSjBjeUJzYjI5cmRYQWdiMkpxWldOMGN5QjBhR0YwSUdOaGJpQmlaU0IxYzJWa0lHeHBhMlVnWm5WdVkzUnBiMjV6T2x4dUlDcGNiaUFxSUNBZ1BpQkVUMDFRY205d1pYSjBlUzVwYzFaaGJHbGtXeWRwWkNkZFhHNGdLaUFnSUhSeWRXVmNiaUFxSUNBZ1BpQkVUMDFRY205d1pYSjBlUzVwYzFaaGJHbGtXeWRtYjI5aVlYSW5YVnh1SUNvZ0lDQjFibVJsWm1sdVpXUmNiaUFxWEc0Z0tpQkJiSFJvYjNWbmFDQjBhR2x6SUcxaGVTQmlaU0JqYjI1bWRYTnBibWNzSUdsMElIQmxjbVp2Y20xeklHSmxkSFJsY2lCcGJpQm5aVzVsY21Gc0xseHVJQ3BjYmlBcUlFQnpaV1VnYUhSMGNEb3ZMMnB6Y0dWeVppNWpiMjB2YTJWNUxXVjRhWE4wYzF4dUlDb2dRSE5sWlNCb2RIUndPaTh2YW5Od1pYSm1MbU52YlM5clpYa3RiV2x6YzJsdVoxeHVJQ292WEc1MllYSWdSRTlOVUhKdmNHVnlkSGtnUFNCN1hHNWNiaUFnU1VSZlFWUlVVa2xDVlZSRlgwNUJUVVU2SUNka1lYUmhMWEpsWVdOMGFXUW5MRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRhR1ZqYTNNZ2QyaGxkR2hsY2lCaElIQnliM0JsY25SNUlHNWhiV1VnYVhNZ1lTQnpkR0Z1WkdGeVpDQndjbTl3WlhKMGVTNWNiaUFnSUNvZ1FIUjVjR1VnZTA5aWFtVmpkSDFjYmlBZ0lDb3ZYRzRnSUdselUzUmhibVJoY21ST1lXMWxPaUI3ZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVFdGd2NHbHVaeUJtY205dElHeHZkMlZ5WTJGelpTQndjbTl3WlhKMGVTQnVZVzFsY3lCMGJ5QjBhR1VnY0hKdmNHVnliSGtnWTJGelpXUWdkbVZ5YzJsdmJpd2dkWE5sWkZ4dUlDQWdLaUIwYnlCM1lYSnVJR2x1SUhSb1pTQmpZWE5sSUc5bUlHMXBjM05wYm1jZ2NISnZjR1Z5ZEdsbGN5NWNiaUFnSUNvZ1FIUjVjR1VnZTA5aWFtVmpkSDFjYmlBZ0lDb3ZYRzRnSUdkbGRGQnZjM05wWW14bFUzUmhibVJoY21ST1lXMWxPaUI3ZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVFdGd2NHbHVaeUJtY205dElHNXZjbTFoYkdsNlpXUWdibUZ0WlhNZ2RHOGdZWFIwY21saWRYUmxJRzVoYldWeklIUm9ZWFFnWkdsbVptVnlMaUJCZEhSeWFXSjFkR1ZjYmlBZ0lDb2dibUZ0WlhNZ1lYSmxJSFZ6WldRZ2QyaGxiaUJ5Wlc1a1pYSnBibWNnYldGeWEzVndJRzl5SUhkcGRHZ2dZQ3BCZEhSeWFXSjFkR1VvS1dBdVhHNGdJQ0FxSUVCMGVYQmxJSHRQWW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0JuWlhSQmRIUnlhV0oxZEdWT1lXMWxPaUI3ZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVFdGd2NHbHVaeUJtY205dElHNXZjbTFoYkdsNlpXUWdibUZ0WlhNZ2RHOGdjSEp2Y0dWeWRHbGxjeUJ2YmlCRVQwMGdibTlrWlNCcGJuTjBZVzVqWlhNdVhHNGdJQ0FxSUNoVWFHbHpJR2x1WTJ4MVpHVnpJSEJ5YjNCbGNuUnBaWE1nZEdoaGRDQnRkWFJoZEdVZ1pIVmxJSFJ2SUdWNGRHVnlibUZzSUdaaFkzUnZjbk11S1Z4dUlDQWdLaUJBZEhsd1pTQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdaMlYwVUhKdmNHVnlkSGxPWVcxbE9pQjdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUV0Z3Y0dsdVp5Qm1jbTl0SUc1dmNtMWhiR2w2WldRZ2JtRnRaWE1nZEc4Z2JYVjBZWFJwYjI0Z2JXVjBhRzlrY3k0Z1ZHaHBjeUIzYVd4c0lHOXViSGtnWlhocGMzUWdhV1pjYmlBZ0lDb2diWFYwWVhScGIyNGdZMkZ1Ym05MElHSmxJSE5sZENCemFXMXdiSGtnWW5rZ2RHaGxJSEJ5YjNCbGNuUjVJRzl5SUdCelpYUkJkSFJ5YVdKMWRHVW9LV0F1WEc0Z0lDQXFJRUIwZVhCbElIdFBZbXBsWTNSOVhHNGdJQ0FxTDF4dUlDQm5aWFJOZFhSaGRHbHZiazFsZEdodlpEb2dlMzBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRmRvWlhSb1pYSWdkR2hsSUhCeWIzQmxjblI1SUcxMWMzUWdZbVVnWVdOalpYTnpaV1FnWVc1a0lHMTFkR0YwWldRZ1lYTWdZVzRnYjJKcVpXTjBJSEJ5YjNCbGNuUjVMbHh1SUNBZ0tpQkFkSGx3WlNCN1QySnFaV04wZlZ4dUlDQWdLaTljYmlBZ2JYVnpkRlZ6WlVGMGRISnBZblYwWlRvZ2UzMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGZG9aWFJvWlhJZ2RHaGxJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdZV05qWlhOelpXUWdZVzVrSUcxMWRHRjBaV1FnZFhOcGJtY2dZQ3BCZEhSeWFXSjFkR1VvS1dBdVhHNGdJQ0FxSUNoVWFHbHpJR2x1WTJ4MVpHVnpJR0Z1ZVhSb2FXNW5JSFJvWVhRZ1ptRnBiSE1nWUR4d2NtOXdUbUZ0WlQ0Z2FXNGdQR1ZzWlcxbGJuUStZQzRwWEc0Z0lDQXFJRUIwZVhCbElIdFBZbXBsWTNSOVhHNGdJQ0FxTDF4dUlDQnRkWE4wVlhObFVISnZjR1Z5ZEhrNklIdDlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlhhR1YwYUdWeUlHOXlJRzV2ZENCelpYUjBhVzVuSUdFZ2RtRnNkV1VnWTJGMWMyVnpJSE5wWkdVZ1pXWm1aV04wY3lCemRXTm9JR0Z6SUhSeWFXZG5aWEpwYm1kY2JpQWdJQ29nY21WemIzVnlZMlZ6SUhSdklHSmxJR3h2WVdSbFpDQnZjaUIwWlhoMElITmxiR1ZqZEdsdmJpQmphR0Z1WjJWekxpQlhaU0J0ZFhOMElHVnVjM1Z5WlNCMGFHRjBYRzRnSUNBcUlIUm9aU0IyWVd4MVpTQnBjeUJ2Ym14NUlITmxkQ0JwWmlCcGRDQm9ZWE1nWTJoaGJtZGxaQzVjYmlBZ0lDb2dRSFI1Y0dVZ2UwOWlhbVZqZEgxY2JpQWdJQ292WEc0Z0lHaGhjMU5wWkdWRlptWmxZM1J6T2lCN2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1YyaGxkR2hsY2lCMGFHVWdjSEp2Y0dWeWRIa2djMmh2ZFd4a0lHSmxJSEpsYlc5MlpXUWdkMmhsYmlCelpYUWdkRzhnWVNCbVlXeHpaWGtnZG1Gc2RXVXVYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCb1lYTkNiMjlzWldGdVZtRnNkV1U2SUh0OUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCWGFHVjBhR1Z5SUhSb1pTQndjbTl3WlhKMGVTQnRkWE4wSUdKbElHNTFiV1Z5YVdNZ2IzSWdjR0Z5YzJVZ1lYTWdZVnh1SUNBZ0tpQnVkVzFsY21saklHRnVaQ0J6YUc5MWJHUWdZbVVnY21WdGIzWmxaQ0IzYUdWdUlITmxkQ0IwYnlCaElHWmhiSE5sZVNCMllXeDFaUzVjYmlBZ0lDb2dRSFI1Y0dVZ2UwOWlhbVZqZEgxY2JpQWdJQ292WEc0Z0lHaGhjMDUxYldWeWFXTldZV3gxWlRvZ2UzMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGZG9aWFJvWlhJZ2RHaGxJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdjRzl6YVhScGRtVWdiblZ0WlhKcFl5QnZjaUJ3WVhKelpTQmhjeUJoSUhCdmMybDBhWFpsWEc0Z0lDQXFJRzUxYldWeWFXTWdZVzVrSUhOb2IzVnNaQ0JpWlNCeVpXMXZkbVZrSUhkb1pXNGdjMlYwSUhSdklHRWdabUZzYzJWNUlIWmhiSFZsTGx4dUlDQWdLaUJBZEhsd1pTQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdhR0Z6VUc5emFYUnBkbVZPZFcxbGNtbGpWbUZzZFdVNklIdDlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlhhR1YwYUdWeUlIUm9aU0J3Y205d1pYSjBlU0JqWVc0Z1ltVWdkWE5sWkNCaGN5QmhJR1pzWVdjZ1lYTWdkMlZzYkNCaGN5QjNhWFJvSUdFZ2RtRnNkV1V1SUZKbGJXOTJaV1JjYmlBZ0lDb2dkMmhsYmlCemRISnBZM1JzZVNCbGNYVmhiQ0IwYnlCbVlXeHpaVHNnY0hKbGMyVnVkQ0IzYVhSb2IzVjBJR0VnZG1Gc2RXVWdkMmhsYmlCemRISnBZM1JzZVNCbGNYVmhiRnh1SUNBZ0tpQjBieUIwY25WbE95QndjbVZ6Wlc1MElIZHBkR2dnWVNCMllXeDFaU0J2ZEdobGNuZHBjMlV1WEc0Z0lDQXFJRUIwZVhCbElIdFBZbXBsWTNSOVhHNGdJQ0FxTDF4dUlDQm9ZWE5QZG1WeWJHOWhaR1ZrUW05dmJHVmhibFpoYkhWbE9pQjdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRV3hzSUc5bUlIUm9aU0JwYzBOMWMzUnZiVUYwZEhKcFluVjBaU2dwSUdaMWJtTjBhVzl1Y3lCMGFHRjBJR2hoZG1VZ1ltVmxiaUJwYm1wbFkzUmxaQzVjYmlBZ0lDb3ZYRzRnSUY5cGMwTjFjM1J2YlVGMGRISnBZblYwWlVaMWJtTjBhVzl1Y3pvZ1cxMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTm9aV05yY3lCM2FHVjBhR1Z5SUdFZ2NISnZjR1Z5ZEhrZ2JtRnRaU0JwY3lCaElHTjFjM1J2YlNCaGRIUnlhV0oxZEdVdVhHNGdJQ0FxSUVCdFpYUm9iMlJjYmlBZ0lDb3ZYRzRnSUdselEzVnpkRzl0UVhSMGNtbGlkWFJsT2lCbWRXNWpkR2x2YmloaGRIUnlhV0oxZEdWT1lXMWxLU0I3WEc0Z0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0JFVDAxUWNtOXdaWEowZVM1ZmFYTkRkWE4wYjIxQmRIUnlhV0oxZEdWR2RXNWpkR2x2Ym5NdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJSFpoY2lCcGMwTjFjM1J2YlVGMGRISnBZblYwWlVadUlEMGdSRTlOVUhKdmNHVnlkSGt1WDJselEzVnpkRzl0UVhSMGNtbGlkWFJsUm5WdVkzUnBiMjV6VzJsZE8xeHVJQ0FnSUNBZ2FXWWdLR2x6UTNWemRHOXRRWFIwY21saWRYUmxSbTRvWVhSMGNtbGlkWFJsVG1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QjBhR1VnWkdWbVlYVnNkQ0J3Y205d1pYSjBlU0IyWVd4MVpTQm1iM0lnWVNCRVQwMGdjSEp2Y0dWeWRIa2dLR2t1WlM0c0lHNXZkQ0JoYmx4dUlDQWdLaUJoZEhSeWFXSjFkR1VwTGlCTmIzTjBJR1JsWm1GMWJIUWdkbUZzZFdWeklHRnlaU0FuSnlCdmNpQm1ZV3h6WlN3Z1luVjBJRzV2ZENCaGJHd3VJRmR2Y25ObElIbGxkQ3hjYmlBZ0lDb2djMjl0WlNBb2FXNGdjR0Z5ZEdsamRXeGhjaXdnWUhSNWNHVmdLU0IyWVhKNUlHUmxjR1Z1WkdsdVp5QnZiaUIwYUdVZ2RIbHdaU0J2WmlCbGJHVnRaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQlVUMFJQT2lCSmN5QnBkQ0JpWlhSMFpYSWdkRzhnWjNKaFlpQmhiR3dnZEdobElIQnZjM05wWW14bElIQnliM0JsY25ScFpYTWdkMmhsYmlCamNtVmhkR2x1WnlCaGJseHVJQ0FnS2lCbGJHVnRaVzUwSUhSdklHRjJiMmxrSUdoaGRtbHVaeUIwYnlCamNtVmhkR1VnZEdobElITmhiV1VnWld4bGJXVnVkQ0IwZDJsalpUOWNiaUFnSUNvdlhHNGdJR2RsZEVSbFptRjFiSFJXWVd4MVpVWnZjbEJ5YjNCbGNuUjVPaUJtZFc1amRHbHZiaWh1YjJSbFRtRnRaU3dnY0hKdmNDa2dlMXh1SUNBZ0lIWmhjaUJ1YjJSbFJHVm1ZWFZzZEhNZ1BTQmtaV1poZFd4MFZtRnNkV1ZEWVdOb1pWdHViMlJsVG1GdFpWMDdYRzRnSUNBZ2RtRnlJSFJsYzNSRmJHVnRaVzUwTzF4dUlDQWdJR2xtSUNnaGJtOWtaVVJsWm1GMWJIUnpLU0I3WEc0Z0lDQWdJQ0JrWldaaGRXeDBWbUZzZFdWRFlXTm9aVnR1YjJSbFRtRnRaVjBnUFNCdWIyUmxSR1ZtWVhWc2RITWdQU0I3ZlR0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0NFb2NISnZjQ0JwYmlCdWIyUmxSR1ZtWVhWc2RITXBLU0I3WEc0Z0lDQWdJQ0IwWlhOMFJXeGxiV1Z1ZENBOUlHUnZZM1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblFvYm05a1pVNWhiV1VwTzF4dUlDQWdJQ0FnYm05a1pVUmxabUYxYkhSelczQnliM0JkSUQwZ2RHVnpkRVZzWlcxbGJuUmJjSEp2Y0YwN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnViMlJsUkdWbVlYVnNkSE5iY0hKdmNGMDdYRzRnSUgwc1hHNWNiaUFnYVc1cVpXTjBhVzl1T2lCRVQwMVFjbTl3WlhKMGVVbHVhbVZqZEdsdmJseHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCRVQwMVFjbTl3WlhKMGVUdGNiaUpkZlE9PSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRE9NUHJvcGVydHlPcGVyYXRpb25zXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZShcIi4vRE9NUHJvcGVydHlcIik7XG5cbnZhciBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlciA9IHJlcXVpcmUoXCIuL3F1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG5mdW5jdGlvbiBzaG91bGRJZ25vcmVWYWx1ZShuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fFxuICAgIChET01Qcm9wZXJ0eS5oYXNCb29sZWFuVmFsdWVbbmFtZV0gJiYgIXZhbHVlKSB8fFxuICAgIChET01Qcm9wZXJ0eS5oYXNOdW1lcmljVmFsdWVbbmFtZV0gJiYgaXNOYU4odmFsdWUpKSB8fFxuICAgIChET01Qcm9wZXJ0eS5oYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZVtuYW1lXSAmJiAodmFsdWUgPCAxKSkgfHxcbiAgICAoRE9NUHJvcGVydHkuaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZVtuYW1lXSAmJiB2YWx1ZSA9PT0gZmFsc2UpO1xufVxuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIHZhciByZWFjdFByb3BzID0ge1xuICAgIGNoaWxkcmVuOiB0cnVlLFxuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB0cnVlLFxuICAgIGtleTogdHJ1ZSxcbiAgICByZWY6IHRydWVcbiAgfTtcbiAgdmFyIHdhcm5lZFByb3BlcnRpZXMgPSB7fTtcblxuICB2YXIgd2FyblVua25vd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAocmVhY3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiByZWFjdFByb3BzW25hbWVdIHx8XG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIGRhdGEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG4gICAgdmFyIHN0YW5kYXJkTmFtZSA9IChcbiAgICAgIERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKGxvd2VyQ2FzZWROYW1lKSA/XG4gICAgICAgIGxvd2VyQ2FzZWROYW1lIDpcbiAgICAgIERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/XG4gICAgICAgIERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2xvd2VyQ2FzZWROYW1lXSA6XG4gICAgICAgIG51bGxcbiAgICApO1xuXG4gICAgLy8gRm9yIG5vdywgb25seSB3YXJuIHdoZW4gd2UgaGF2ZSBhIHN1Z2dlc3RlZCBjb3JyZWN0aW9uLiBUaGlzIHByZXZlbnRzXG4gICAgLy8gbG9nZ2luZyB0b28gbXVjaCB3aGVuIHVzaW5nIHRyYW5zZmVyUHJvcHNUby5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIHN0YW5kYXJkTmFtZSA9PSBudWxsLFxuICAgICAgJ1Vua25vd24gRE9NIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JyxcbiAgICAgIG5hbWUsXG4gICAgICBzdGFuZGFyZE5hbWVcbiAgICApIDogbnVsbCk7XG5cbiAgfTtcbn1cblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggRE9NIHByb3BlcnRpZXMuXG4gKi9cbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciB0aGUgSUQgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBVbmVzY2FwZWQgSUQuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gTWFya3VwIHN0cmluZy5cbiAgICovXG4gIGNyZWF0ZU1hcmt1cEZvcklEOiBmdW5jdGlvbihpZCkge1xuICAgIHJldHVybiBET01Qcm9wZXJ0eS5JRF9BVFRSSUJVVEVfTkFNRSArICc9JyArXG4gICAgICBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlcihpZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciBhIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IE1hcmt1cCBzdHJpbmcsIG9yIG51bGwgaWYgdGhlIHByb3BlcnR5IHdhcyBpbnZhbGlkLlxuICAgKi9cbiAgY3JlYXRlTWFya3VwRm9yUHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKERPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1lLmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgIERPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1lW25hbWVdKSB7XG4gICAgICBpZiAoc2hvdWxkSWdub3JlVmFsdWUobmFtZSwgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gRE9NUHJvcGVydHkuZ2V0QXR0cmlidXRlTmFtZVtuYW1lXTtcbiAgICAgIGlmIChET01Qcm9wZXJ0eS5oYXNCb29sZWFuVmFsdWVbbmFtZV0gfHxcbiAgICAgICAgICAoRE9NUHJvcGVydHkuaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZVtuYW1lXSAmJiB2YWx1ZSA9PT0gdHJ1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlTmFtZSArICc9JyArIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmFtZSArICc9JyArIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgd2FyblVua25vd25Qcm9wZXJ0eShuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICovXG4gIHNldFZhbHVlRm9yUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKERPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1lLmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgIERPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1lW25hbWVdKSB7XG4gICAgICB2YXIgbXV0YXRpb25NZXRob2QgPSBET01Qcm9wZXJ0eS5nZXRNdXRhdGlvbk1ldGhvZFtuYW1lXTtcbiAgICAgIGlmIChtdXRhdGlvbk1ldGhvZCkge1xuICAgICAgICBtdXRhdGlvbk1ldGhvZChub2RlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNob3VsZElnbm9yZVZhbHVlKG5hbWUsIHZhbHVlKSkge1xuICAgICAgICB0aGlzLmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5Lm11c3RVc2VBdHRyaWJ1dGVbbmFtZV0pIHtcbiAgICAgICAgLy8gYHNldEF0dHJpYnV0ZWAgd2l0aCBvYmplY3RzIGJlY29tZXMgb25seSBgW29iamVjdF1gIGluIElFOC85LFxuICAgICAgICAvLyAoJycgKyB2YWx1ZSkgbWFrZXMgaXQgb3V0cHV0IHRoZSBjb3JyZWN0IHRvU3RyaW5nKCktdmFsdWUuXG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKERPTVByb3BlcnR5LmdldEF0dHJpYnV0ZU5hbWVbbmFtZV0sICcnICsgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gRE9NUHJvcGVydHkuZ2V0UHJvcGVydHlOYW1lW25hbWVdO1xuICAgICAgICAvLyBNdXN0IGV4cGxpY2l0bHkgY2FzdCB2YWx1ZXMgZm9yIEhBU19TSURFX0VGRkVDVFMtcHJvcGVydGllcyB0byB0aGVcbiAgICAgICAgLy8gcHJvcGVydHkgdHlwZSBiZWZvcmUgY29tcGFyaW5nOyBvbmx5IGB2YWx1ZWAgZG9lcyBhbmQgaXMgc3RyaW5nLlxuICAgICAgICBpZiAoIURPTVByb3BlcnR5Lmhhc1NpZGVFZmZlY3RzW25hbWVdIHx8XG4gICAgICAgICAgICAoJycgKyBub2RlW3Byb3BOYW1lXSkgIT09ICgnJyArIHZhbHVlKSkge1xuICAgICAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRBdHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgICAgICAvLyBgdG9TdHJpbmdgZWQgYnkgSUU4LzkuXG4gICAgICAgICAgbm9kZVtwcm9wTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgJycgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHdhcm5Vbmtub3duUHJvcGVydHkobmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eTogZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICAgIGlmIChET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICBET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtuYW1lXSkge1xuICAgICAgdmFyIG11dGF0aW9uTWV0aG9kID0gRE9NUHJvcGVydHkuZ2V0TXV0YXRpb25NZXRob2RbbmFtZV07XG4gICAgICBpZiAobXV0YXRpb25NZXRob2QpIHtcbiAgICAgICAgbXV0YXRpb25NZXRob2Qobm9kZSwgdW5kZWZpbmVkKTtcbiAgICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkubXVzdFVzZUF0dHJpYnV0ZVtuYW1lXSkge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShET01Qcm9wZXJ0eS5nZXRBdHRyaWJ1dGVOYW1lW25hbWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSA9IERPTVByb3BlcnR5LmdldFByb3BlcnR5TmFtZVtuYW1lXTtcbiAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IERPTVByb3BlcnR5LmdldERlZmF1bHRWYWx1ZUZvclByb3BlcnR5KFxuICAgICAgICAgIG5vZGUubm9kZU5hbWUsXG4gICAgICAgICAgcHJvcE5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFET01Qcm9wZXJ0eS5oYXNTaWRlRWZmZWN0c1tuYW1lXSB8fFxuICAgICAgICAgICAgKCcnICsgbm9kZVtwcm9wTmFtZV0pICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICBub2RlW3Byb3BOYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB3YXJuVW5rbm93blByb3BlcnR5KG5hbWUpO1xuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERPTVByb3BlcnR5T3BlcmF0aW9ucztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJFOU5VSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JFVDAxUWNtOXdaWEowZVU5d1pYSmhkR2x2Ym5OY2JpQXFJRUIwZVhCbFkyaGxZMnR6SUhOMFlYUnBZeTF2Ym14NVhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdSRTlOVUhKdmNHVnlkSGtnUFNCeVpYRjFhWEpsS0Z3aUxpOUVUMDFRY205d1pYSjBlVndpS1R0Y2JseHVkbUZ5SUhGMWIzUmxRWFIwY21saWRYUmxWbUZzZFdWR2IzSkNjbTkzYzJWeUlEMGdjbVZ4ZFdseVpTaGNJaTR2Y1hWdmRHVkJkSFJ5YVdKMWRHVldZV3gxWlVadmNrSnliM2R6WlhKY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JtWjFibU4wYVc5dUlITm9iM1ZzWkVsbmJtOXlaVlpoYkhWbEtHNWhiV1VzSUhaaGJIVmxLU0I3WEc0Z0lISmxkSFZ5YmlCMllXeDFaU0E5UFNCdWRXeHNJSHg4WEc0Z0lDQWdLRVJQVFZCeWIzQmxjblI1TG1oaGMwSnZiMnhsWVc1V1lXeDFaVnR1WVcxbFhTQW1KaUFoZG1Gc2RXVXBJSHg4WEc0Z0lDQWdLRVJQVFZCeWIzQmxjblI1TG1oaGMwNTFiV1Z5YVdOV1lXeDFaVnR1WVcxbFhTQW1KaUJwYzA1aFRpaDJZV3gxWlNrcElIeDhYRzRnSUNBZ0tFUlBUVkJ5YjNCbGNuUjVMbWhoYzFCdmMybDBhWFpsVG5WdFpYSnBZMVpoYkhWbFcyNWhiV1ZkSUNZbUlDaDJZV3gxWlNBOElERXBLU0I4ZkZ4dUlDQWdJQ2hFVDAxUWNtOXdaWEowZVM1b1lYTlBkbVZ5Ykc5aFpHVmtRbTl2YkdWaGJsWmhiSFZsVzI1aGJXVmRJQ1ltSUhaaGJIVmxJRDA5UFNCbVlXeHpaU2s3WEc1OVhHNWNibWxtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ2RtRnlJSEpsWVdOMFVISnZjSE1nUFNCN1hHNGdJQ0FnWTJocGJHUnlaVzQ2SUhSeWRXVXNYRzRnSUNBZ1pHRnVaMlZ5YjNWemJIbFRaWFJKYm01bGNraFVUVXc2SUhSeWRXVXNYRzRnSUNBZ2EyVjVPaUIwY25WbExGeHVJQ0FnSUhKbFpqb2dkSEoxWlZ4dUlDQjlPMXh1SUNCMllYSWdkMkZ5Ym1Wa1VISnZjR1Z5ZEdsbGN5QTlJSHQ5TzF4dVhHNGdJSFpoY2lCM1lYSnVWVzVyYm05M2JsQnliM0JsY25SNUlEMGdablZ1WTNScGIyNG9ibUZ0WlNrZ2UxeHVJQ0FnSUdsbUlDaHlaV0ZqZEZCeWIzQnpMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwSUNZbUlISmxZV04wVUhKdmNITmJibUZ0WlYwZ2ZIeGNiaUFnSUNBZ0lDQWdkMkZ5Ym1Wa1VISnZjR1Z5ZEdsbGN5NW9ZWE5QZDI1UWNtOXdaWEowZVNodVlXMWxLU0FtSmlCM1lYSnVaV1JRY205d1pYSjBhV1Z6VzI1aGJXVmRLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2QyRnlibVZrVUhKdmNHVnlkR2xsYzF0dVlXMWxYU0E5SUhSeWRXVTdYRzRnSUNBZ2RtRnlJR3h2ZDJWeVEyRnpaV1JPWVcxbElEMGdibUZ0WlM1MGIweHZkMlZ5UTJGelpTZ3BPMXh1WEc0Z0lDQWdMeThnWkdGMFlTMHFJR0YwZEhKcFluVjBaWE1nYzJodmRXeGtJR0psSUd4dmQyVnlZMkZ6WlRzZ2MzVm5aMlZ6ZENCMGFHVWdiRzkzWlhKallYTmxJSFpsY25OcGIyNWNiaUFnSUNCMllYSWdjM1JoYm1SaGNtUk9ZVzFsSUQwZ0tGeHVJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3VhWE5EZFhOMGIyMUJkSFJ5YVdKMWRHVW9iRzkzWlhKRFlYTmxaRTVoYldVcElEOWNiaUFnSUNBZ0lDQWdiRzkzWlhKRFlYTmxaRTVoYldVZ09seHVJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3VaMlYwVUc5emMybGliR1ZUZEdGdVpHRnlaRTVoYldVdWFHRnpUM2R1VUhKdmNHVnlkSGtvYkc5M1pYSkRZWE5sWkU1aGJXVXBJRDljYmlBZ0lDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdVoyVjBVRzl6YzJsaWJHVlRkR0Z1WkdGeVpFNWhiV1ZiYkc5M1pYSkRZWE5sWkU1aGJXVmRJRHBjYmlBZ0lDQWdJQ0FnYm5Wc2JGeHVJQ0FnSUNrN1hHNWNiaUFnSUNBdkx5QkdiM0lnYm05M0xDQnZibXg1SUhkaGNtNGdkMmhsYmlCM1pTQm9ZWFpsSUdFZ2MzVm5aMlZ6ZEdWa0lHTnZjbkpsWTNScGIyNHVJRlJvYVhNZ2NISmxkbVZ1ZEhOY2JpQWdJQ0F2THlCc2IyZG5hVzVuSUhSdmJ5QnRkV05vSUhkb1pXNGdkWE5wYm1jZ2RISmhibk5tWlhKUWNtOXdjMVJ2TGx4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ2MzUmhibVJoY21ST1lXMWxJRDA5SUc1MWJHd3NYRzRnSUNBZ0lDQW5WVzVyYm05M2JpQkVUMDBnY0hKdmNHVnlkSGtnSlhNdUlFUnBaQ0I1YjNVZ2JXVmhiaUFsY3o4bkxGeHVJQ0FnSUNBZ2JtRnRaU3hjYmlBZ0lDQWdJSE4wWVc1a1lYSmtUbUZ0WlZ4dUlDQWdJQ2tnT2lCdWRXeHNLVHRjYmx4dUlDQjlPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFOXdaWEpoZEdsdmJuTWdabTl5SUdSbFlXeHBibWNnZDJsMGFDQkVUMDBnY0hKdmNHVnlkR2xsY3k1Y2JpQXFMMXh1ZG1GeUlFUlBUVkJ5YjNCbGNuUjVUM0JsY21GMGFXOXVjeUE5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxjeUJ0WVhKcmRYQWdabTl5SUhSb1pTQkpSQ0J3Y205d1pYSjBlUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdsa0lGVnVaWE5qWVhCbFpDQkpSQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZTQk5ZWEpyZFhBZ2MzUnlhVzVuTGx4dUlDQWdLaTljYmlBZ1kzSmxZWFJsVFdGeWEzVndSbTl5U1VRNklHWjFibU4wYVc5dUtHbGtLU0I3WEc0Z0lDQWdjbVYwZFhKdUlFUlBUVkJ5YjNCbGNuUjVMa2xFWDBGVVZGSkpRbFZVUlY5T1FVMUZJQ3NnSnowbklDdGNiaUFnSUNBZ0lIRjFiM1JsUVhSMGNtbGlkWFJsVm1Gc2RXVkdiM0pDY205M2MyVnlLR2xrS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRM0psWVhSbGN5QnRZWEpyZFhBZ1ptOXlJR0VnY0hKdmNHVnlkSGt1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdVlXMWxYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdkbUZzZFdWY2JpQWdJQ29nUUhKbGRIVnliaUI3UDNOMGNtbHVaMzBnVFdGeWEzVndJSE4wY21sdVp5d2diM0lnYm5Wc2JDQnBaaUIwYUdVZ2NISnZjR1Z5ZEhrZ2QyRnpJR2x1ZG1Gc2FXUXVYRzRnSUNBcUwxeHVJQ0JqY21WaGRHVk5ZWEpyZFhCR2IzSlFjbTl3WlhKMGVUb2dablZ1WTNScGIyNG9ibUZ0WlN3Z2RtRnNkV1VwSUh0Y2JpQWdJQ0JwWmlBb1JFOU5VSEp2Y0dWeWRIa3VhWE5UZEdGdVpHRnlaRTVoYldVdWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa2dKaVpjYmlBZ0lDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdWFYTlRkR0Z1WkdGeVpFNWhiV1ZiYm1GdFpWMHBJSHRjYmlBZ0lDQWdJR2xtSUNoemFHOTFiR1JKWjI1dmNtVldZV3gxWlNodVlXMWxMQ0IyWVd4MVpTa3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NuTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZG1GeUlHRjBkSEpwWW5WMFpVNWhiV1VnUFNCRVQwMVFjbTl3WlhKMGVTNW5aWFJCZEhSeWFXSjFkR1ZPWVcxbFcyNWhiV1ZkTzF4dUlDQWdJQ0FnYVdZZ0tFUlBUVkJ5YjNCbGNuUjVMbWhoYzBKdmIyeGxZVzVXWVd4MVpWdHVZVzFsWFNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ2hFVDAxUWNtOXdaWEowZVM1b1lYTlBkbVZ5Ykc5aFpHVmtRbTl2YkdWaGJsWmhiSFZsVzI1aGJXVmRJQ1ltSUhaaGJIVmxJRDA5UFNCMGNuVmxLU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWVhSMGNtbGlkWFJsVG1GdFpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCaGRIUnlhV0oxZEdWT1lXMWxJQ3NnSnowbklDc2djWFZ2ZEdWQmRIUnlhV0oxZEdWV1lXeDFaVVp2Y2tKeWIzZHpaWElvZG1Gc2RXVXBPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9SRTlOVUhKdmNHVnlkSGt1YVhORGRYTjBiMjFCZEhSeWFXSjFkR1VvYm1GdFpTa3BJSHRjYmlBZ0lDQWdJR2xtSUNoMllXeDFaU0E5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUFuSnp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUJ1WVcxbElDc2dKejBuSUNzZ2NYVnZkR1ZCZEhSeWFXSjFkR1ZXWVd4MVpVWnZja0p5YjNkelpYSW9kbUZzZFdVcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0IzWVhKdVZXNXJibTkzYmxCeWIzQmxjblI1S0c1aGJXVXBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYm5Wc2JEdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVTJWMGN5QjBhR1VnZG1Gc2RXVWdabTl5SUdFZ2NISnZjR1Z5ZEhrZ2IyNGdZU0J1YjJSbExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUc1dlpHVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUc1aGJXVmNiaUFnSUNvZ1FIQmhjbUZ0SUhzcWZTQjJZV3gxWlZ4dUlDQWdLaTljYmlBZ2MyVjBWbUZzZFdWR2IzSlFjbTl3WlhKMGVUb2dablZ1WTNScGIyNG9ibTlrWlN3Z2JtRnRaU3dnZG1Gc2RXVXBJSHRjYmlBZ0lDQnBaaUFvUkU5TlVISnZjR1Z5ZEhrdWFYTlRkR0Z1WkdGeVpFNWhiV1V1YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrZ0ppWmNiaUFnSUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YVhOVGRHRnVaR0Z5WkU1aGJXVmJibUZ0WlYwcElIdGNiaUFnSUNBZ0lIWmhjaUJ0ZFhSaGRHbHZiazFsZEdodlpDQTlJRVJQVFZCeWIzQmxjblI1TG1kbGRFMTFkR0YwYVc5dVRXVjBhRzlrVzI1aGJXVmRPMXh1SUNBZ0lDQWdhV1lnS0cxMWRHRjBhVzl1VFdWMGFHOWtLU0I3WEc0Z0lDQWdJQ0FnSUcxMWRHRjBhVzl1VFdWMGFHOWtLRzV2WkdVc0lIWmhiSFZsS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2MyaHZkV3hrU1dkdWIzSmxWbUZzZFdVb2JtRnRaU3dnZG1Gc2RXVXBLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaR1ZzWlhSbFZtRnNkV1ZHYjNKUWNtOXdaWEowZVNodWIyUmxMQ0J1WVcxbEtUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9SRTlOVUhKdmNHVnlkSGt1YlhWemRGVnpaVUYwZEhKcFluVjBaVnR1WVcxbFhTa2dlMXh1SUNBZ0lDQWdJQ0F2THlCZ2MyVjBRWFIwY21saWRYUmxZQ0IzYVhSb0lHOWlhbVZqZEhNZ1ltVmpiMjFsY3lCdmJteDVJR0JiYjJKcVpXTjBYV0FnYVc0Z1NVVTRMemtzWEc0Z0lDQWdJQ0FnSUM4dklDZ25KeUFySUhaaGJIVmxLU0J0WVd0bGN5QnBkQ0J2ZFhSd2RYUWdkR2hsSUdOdmNuSmxZM1FnZEc5VGRISnBibWNvS1MxMllXeDFaUzVjYmlBZ0lDQWdJQ0FnYm05a1pTNXpaWFJCZEhSeWFXSjFkR1VvUkU5TlVISnZjR1Z5ZEhrdVoyVjBRWFIwY21saWRYUmxUbUZ0WlZ0dVlXMWxYU3dnSnljZ0t5QjJZV3gxWlNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMllYSWdjSEp2Y0U1aGJXVWdQU0JFVDAxUWNtOXdaWEowZVM1blpYUlFjbTl3WlhKMGVVNWhiV1ZiYm1GdFpWMDdYRzRnSUNBZ0lDQWdJQzh2SUUxMWMzUWdaWGh3YkdsamFYUnNlU0JqWVhOMElIWmhiSFZsY3lCbWIzSWdTRUZUWDFOSlJFVmZSVVpHUlVOVVV5MXdjbTl3WlhKMGFXVnpJSFJ2SUhSb1pWeHVJQ0FnSUNBZ0lDQXZMeUJ3Y205d1pYSjBlU0IwZVhCbElHSmxabTl5WlNCamIyMXdZWEpwYm1jN0lHOXViSGtnWUhaaGJIVmxZQ0JrYjJWeklHRnVaQ0JwY3lCemRISnBibWN1WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hSRTlOVUhKdmNHVnlkSGt1YUdGelUybGtaVVZtWm1WamRITmJibUZ0WlYwZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUNnbkp5QXJJRzV2WkdWYmNISnZjRTVoYldWZEtTQWhQVDBnS0NjbklDc2dkbUZzZFdVcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1EyOXVkSEpoY25rZ2RHOGdZSE5sZEVGMGRISnBZblYwWldBc0lHOWlhbVZqZENCd2NtOXdaWEowYVdWeklHRnlaU0J3Y205d1pYSnNlVnh1SUNBZ0lDQWdJQ0FnSUM4dklHQjBiMU4wY21sdVoyQmxaQ0JpZVNCSlJUZ3ZPUzVjYmlBZ0lDQWdJQ0FnSUNCdWIyUmxXM0J5YjNCT1lXMWxYU0E5SUhaaGJIVmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hFVDAxUWNtOXdaWEowZVM1cGMwTjFjM1J2YlVGMGRISnBZblYwWlNodVlXMWxLU2tnZTF4dUlDQWdJQ0FnYVdZZ0tIWmhiSFZsSUQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUNBZ2JtOWtaUzV5WlcxdmRtVkJkSFJ5YVdKMWRHVW9ibUZ0WlNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCdWIyUmxMbk5sZEVGMGRISnBZblYwWlNodVlXMWxMQ0FuSnlBcklIWmhiSFZsS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdkMkZ5YmxWdWEyNXZkMjVRY205d1pYSjBlU2h1WVcxbEtUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVJsYkdWMFpYTWdkR2hsSUhaaGJIVmxJR1p2Y2lCaElIQnliM0JsY25SNUlHOXVJR0VnYm05a1pTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCdWIyUmxYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdVlXMWxYRzRnSUNBcUwxeHVJQ0JrWld4bGRHVldZV3gxWlVadmNsQnliM0JsY25SNU9pQm1kVzVqZEdsdmJpaHViMlJsTENCdVlXMWxLU0I3WEc0Z0lDQWdhV1lnS0VSUFRWQnliM0JsY25SNUxtbHpVM1JoYm1SaGNtUk9ZVzFsTG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcElDWW1YRzRnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1selUzUmhibVJoY21ST1lXMWxXMjVoYldWZEtTQjdYRzRnSUNBZ0lDQjJZWElnYlhWMFlYUnBiMjVOWlhSb2IyUWdQU0JFVDAxUWNtOXdaWEowZVM1blpYUk5kWFJoZEdsdmJrMWxkR2h2WkZ0dVlXMWxYVHRjYmlBZ0lDQWdJR2xtSUNodGRYUmhkR2x2YmsxbGRHaHZaQ2tnZTF4dUlDQWdJQ0FnSUNCdGRYUmhkR2x2YmsxbGRHaHZaQ2h1YjJSbExDQjFibVJsWm1sdVpXUXBPMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hFVDAxUWNtOXdaWEowZVM1dGRYTjBWWE5sUVhSMGNtbGlkWFJsVzI1aGJXVmRLU0I3WEc0Z0lDQWdJQ0FnSUc1dlpHVXVjbVZ0YjNabFFYUjBjbWxpZFhSbEtFUlBUVkJ5YjNCbGNuUjVMbWRsZEVGMGRISnBZblYwWlU1aGJXVmJibUZ0WlYwcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJSEJ5YjNCT1lXMWxJRDBnUkU5TlVISnZjR1Z5ZEhrdVoyVjBVSEp2Y0dWeWRIbE9ZVzFsVzI1aGJXVmRPMXh1SUNBZ0lDQWdJQ0IyWVhJZ1pHVm1ZWFZzZEZaaGJIVmxJRDBnUkU5TlVISnZjR1Z5ZEhrdVoyVjBSR1ZtWVhWc2RGWmhiSFZsUm05eVVISnZjR1Z5ZEhrb1hHNGdJQ0FnSUNBZ0lDQWdibTlrWlM1dWIyUmxUbUZ0WlN4Y2JpQWdJQ0FnSUNBZ0lDQndjbTl3VG1GdFpWeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0JwWmlBb0lVUlBUVkJ5YjNCbGNuUjVMbWhoYzFOcFpHVkZabVpsWTNSelcyNWhiV1ZkSUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0FvSnljZ0t5QnViMlJsVzNCeWIzQk9ZVzFsWFNrZ0lUMDlJR1JsWm1GMWJIUldZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJRzV2WkdWYmNISnZjRTVoYldWZElEMGdaR1ZtWVhWc2RGWmhiSFZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoRVQwMVFjbTl3WlhKMGVTNXBjME4xYzNSdmJVRjBkSEpwWW5WMFpTaHVZVzFsS1NrZ2UxeHVJQ0FnSUNBZ2JtOWtaUzV5WlcxdmRtVkJkSFJ5YVdKMWRHVW9ibUZ0WlNrN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJSGRoY201VmJtdHViM2R1VUhKdmNHVnlkSGtvYm1GdFpTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnUkU5TlVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1ek8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBEYW5nZXJcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSwgc3ViOiB0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBjcmVhdGVOb2Rlc0Zyb21NYXJrdXAgPSByZXF1aXJlKFwiLi9jcmVhdGVOb2Rlc0Zyb21NYXJrdXBcIik7XG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG52YXIgZ2V0TWFya3VwV3JhcCA9IHJlcXVpcmUoXCIuL2dldE1hcmt1cFdyYXBcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG52YXIgT1BFTl9UQUdfTkFNRV9FWFAgPSAvXig8W14gXFwvPl0rKS87XG52YXIgUkVTVUxUX0lOREVYX0FUVFIgPSAnZGF0YS1kYW5nZXItaW5kZXgnO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBgbm9kZU5hbWVgIGZyb20gYSBzdHJpbmcgb2YgbWFya3VwLlxuICpcbiAqIE5PVEU6IEV4dHJhY3RpbmcgdGhlIGBub2RlTmFtZWAgZG9lcyBub3QgcmVxdWlyZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaFxuICogYmVjYXVzZSB3ZSBtYWtlIGFzc3VtcHRpb25zIGFib3V0IFJlYWN0LWdlbmVyYXRlZCBtYXJrdXAgKGkuZS4gdGhlcmUgYXJlIG5vXG4gKiBzcGFjZXMgc3Vycm91bmRpbmcgdGhlIG9wZW5pbmcgdGFnIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgYXR0cmlidXRlKS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIFN0cmluZyBvZiBtYXJrdXAuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vZGUgbmFtZSBvZiB0aGUgc3VwcGxpZWQgbWFya3VwLlxuICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9leHRyYWN0LW5vZGVuYW1lXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG1hcmt1cCkge1xuICByZXR1cm4gbWFya3VwLnN1YnN0cmluZygxLCBtYXJrdXAuaW5kZXhPZignICcpKTtcbn1cblxudmFyIERhbmdlciA9IHtcblxuICAvKipcbiAgICogUmVuZGVycyBtYXJrdXAgaW50byBhbiBhcnJheSBvZiBub2Rlcy4gVGhlIG1hcmt1cCBpcyBleHBlY3RlZCB0byByZW5kZXJcbiAgICogaW50byBhIGxpc3Qgb2Ygcm9vdCBub2Rlcy4gQWxzbywgdGhlIGxlbmd0aCBvZiBgcmVzdWx0TGlzdGAgYW5kXG4gICAqIGBtYXJrdXBMaXN0YCBzaG91bGQgYmUgdGhlIHNhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXk8c3RyaW5nPn0gbWFya3VwTGlzdCBMaXN0IG9mIG1hcmt1cCBzdHJpbmdzIHRvIHJlbmRlci5cbiAgICogQHJldHVybiB7YXJyYXk8RE9NRWxlbWVudD59IExpc3Qgb2YgcmVuZGVyZWQgbm9kZXMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlSZW5kZXJNYXJrdXA6IGZ1bmN0aW9uKG1hcmt1cExpc3QpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NLFxuICAgICAgJ2Rhbmdlcm91c2x5UmVuZGVyTWFya3VwKC4uLik6IENhbm5vdCByZW5kZXIgbWFya3VwIGluIGEgd29ya2VyICcgK1xuICAgICAgJ3RocmVhZC4gTWFrZSBzdXJlIGB3aW5kb3dgIGFuZCBgZG9jdW1lbnRgIGFyZSBhdmFpbGFibGUgZ2xvYmFsbHkgJyArXG4gICAgICAnYmVmb3JlIHJlcXVpcmluZyBSZWFjdCB3aGVuIHVuaXQgdGVzdGluZyBvciB1c2UgJyArXG4gICAgICAnUmVhY3QucmVuZGVyVG9TdHJpbmcgZm9yIHNlcnZlciByZW5kZXJpbmcuJ1xuICAgICkgOiBpbnZhcmlhbnQoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSk7XG4gICAgdmFyIG5vZGVOYW1lO1xuICAgIHZhciBtYXJrdXBCeU5vZGVOYW1lID0ge307XG4gICAgLy8gR3JvdXAgbWFya3VwIGJ5IGBub2RlTmFtZWAgaWYgYSB3cmFwIGlzIG5lY2Vzc2FyeSwgZWxzZSBieSAnKicuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrdXBMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICBtYXJrdXBMaXN0W2ldLFxuICAgICAgICAnZGFuZ2Vyb3VzbHlSZW5kZXJNYXJrdXAoLi4uKTogTWlzc2luZyBtYXJrdXAuJ1xuICAgICAgKSA6IGludmFyaWFudChtYXJrdXBMaXN0W2ldKSk7XG4gICAgICBub2RlTmFtZSA9IGdldE5vZGVOYW1lKG1hcmt1cExpc3RbaV0pO1xuICAgICAgbm9kZU5hbWUgPSBnZXRNYXJrdXBXcmFwKG5vZGVOYW1lKSA/IG5vZGVOYW1lIDogJyonO1xuICAgICAgbWFya3VwQnlOb2RlTmFtZVtub2RlTmFtZV0gPSBtYXJrdXBCeU5vZGVOYW1lW25vZGVOYW1lXSB8fCBbXTtcbiAgICAgIG1hcmt1cEJ5Tm9kZU5hbWVbbm9kZU5hbWVdW2ldID0gbWFya3VwTGlzdFtpXTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdExpc3QgPSBbXTtcbiAgICB2YXIgcmVzdWx0TGlzdEFzc2lnbm1lbnRDb3VudCA9IDA7XG4gICAgZm9yIChub2RlTmFtZSBpbiBtYXJrdXBCeU5vZGVOYW1lKSB7XG4gICAgICBpZiAoIW1hcmt1cEJ5Tm9kZU5hbWUuaGFzT3duUHJvcGVydHkobm9kZU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIG1hcmt1cExpc3RCeU5vZGVOYW1lID0gbWFya3VwQnlOb2RlTmFtZVtub2RlTmFtZV07XG5cbiAgICAgIC8vIFRoaXMgZm9yLWluIGxvb3Agc2tpcHMgdGhlIGhvbGVzIG9mIHRoZSBzcGFyc2UgYXJyYXkuIFRoZSBvcmRlciBvZlxuICAgICAgLy8gaXRlcmF0aW9uIHNob3VsZCBmb2xsb3cgdGhlIG9yZGVyIG9mIGFzc2lnbm1lbnQsIHdoaWNoIGhhcHBlbnMgdG8gbWF0Y2hcbiAgICAgIC8vIG51bWVyaWNhbCBpbmRleCBvcmRlciwgYnV0IHdlIGRvbid0IHJlbHkgb24gdGhhdC5cbiAgICAgIHZhciByZXN1bHRJbmRleDtcbiAgICAgIGZvciAocmVzdWx0SW5kZXggaW4gbWFya3VwTGlzdEJ5Tm9kZU5hbWUpIHtcbiAgICAgICAgaWYgKG1hcmt1cExpc3RCeU5vZGVOYW1lLmhhc093blByb3BlcnR5KHJlc3VsdEluZGV4KSkge1xuICAgICAgICAgIHZhciBtYXJrdXAgPSBtYXJrdXBMaXN0QnlOb2RlTmFtZVtyZXN1bHRJbmRleF07XG5cbiAgICAgICAgICAvLyBQdXNoIHRoZSByZXF1ZXN0ZWQgbWFya3VwIHdpdGggYW4gYWRkaXRpb25hbCBSRVNVTFRfSU5ERVhfQVRUUlxuICAgICAgICAgIC8vIGF0dHJpYnV0ZS4gIElmIHRoZSBtYXJrdXAgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIDwgY2hhcmFjdGVyLCBpdFxuICAgICAgICAgIC8vIHdpbGwgYmUgZGlzY2FyZGVkIGJlbG93ICh3aXRoIGFuIGFwcHJvcHJpYXRlIGNvbnNvbGUuZXJyb3IpLlxuICAgICAgICAgIG1hcmt1cExpc3RCeU5vZGVOYW1lW3Jlc3VsdEluZGV4XSA9IG1hcmt1cC5yZXBsYWNlKFxuICAgICAgICAgICAgT1BFTl9UQUdfTkFNRV9FWFAsXG4gICAgICAgICAgICAvLyBUaGlzIGluZGV4IHdpbGwgYmUgcGFyc2VkIGJhY2sgb3V0IGJlbG93LlxuICAgICAgICAgICAgJyQxICcgKyBSRVNVTFRfSU5ERVhfQVRUUiArICc9XCInICsgcmVzdWx0SW5kZXggKyAnXCIgJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVuZGVyIGVhY2ggZ3JvdXAgb2YgbWFya3VwIHdpdGggc2ltaWxhciB3cmFwcGluZyBgbm9kZU5hbWVgLlxuICAgICAgdmFyIHJlbmRlck5vZGVzID0gY3JlYXRlTm9kZXNGcm9tTWFya3VwKFxuICAgICAgICBtYXJrdXBMaXN0QnlOb2RlTmFtZS5qb2luKCcnKSxcbiAgICAgICAgZW1wdHlGdW5jdGlvbiAvLyBEbyBub3RoaW5nIHNwZWNpYWwgd2l0aCA8c2NyaXB0PiB0YWdzLlxuICAgICAgKTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByZW5kZXJOb2Rlcy5sZW5ndGg7ICsraikge1xuICAgICAgICB2YXIgcmVuZGVyTm9kZSA9IHJlbmRlck5vZGVzW2pdO1xuICAgICAgICBpZiAocmVuZGVyTm9kZS5oYXNBdHRyaWJ1dGUgJiZcbiAgICAgICAgICAgIHJlbmRlck5vZGUuaGFzQXR0cmlidXRlKFJFU1VMVF9JTkRFWF9BVFRSKSkge1xuXG4gICAgICAgICAgcmVzdWx0SW5kZXggPSArcmVuZGVyTm9kZS5nZXRBdHRyaWJ1dGUoUkVTVUxUX0lOREVYX0FUVFIpO1xuICAgICAgICAgIHJlbmRlck5vZGUucmVtb3ZlQXR0cmlidXRlKFJFU1VMVF9JTkRFWF9BVFRSKTtcblxuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgICAhcmVzdWx0TGlzdC5oYXNPd25Qcm9wZXJ0eShyZXN1bHRJbmRleCksXG4gICAgICAgICAgICAnRGFuZ2VyOiBBc3NpZ25pbmcgdG8gYW4gYWxyZWFkeS1vY2N1cGllZCByZXN1bHQgaW5kZXguJ1xuICAgICAgICAgICkgOiBpbnZhcmlhbnQoIXJlc3VsdExpc3QuaGFzT3duUHJvcGVydHkocmVzdWx0SW5kZXgpKSk7XG5cbiAgICAgICAgICByZXN1bHRMaXN0W3Jlc3VsdEluZGV4XSA9IHJlbmRlck5vZGU7XG5cbiAgICAgICAgICAvLyBUaGlzIHNob3VsZCBtYXRjaCByZXN1bHRMaXN0Lmxlbmd0aCBhbmQgbWFya3VwTGlzdC5sZW5ndGggd2hlblxuICAgICAgICAgIC8vIHdlJ3JlIGRvbmUuXG4gICAgICAgICAgcmVzdWx0TGlzdEFzc2lnbm1lbnRDb3VudCArPSAxO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdEYW5nZXI6IERpc2NhcmRpbmcgdW5leHBlY3RlZCBub2RlOicsXG4gICAgICAgICAgICByZW5kZXJOb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsdGhvdWdoIHJlc3VsdExpc3Qgd2FzIHBvcHVsYXRlZCBvdXQgb2Ygb3JkZXIsIGl0IHNob3VsZCBub3cgYmUgYSBkZW5zZVxuICAgIC8vIGFycmF5LlxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICByZXN1bHRMaXN0QXNzaWdubWVudENvdW50ID09PSByZXN1bHRMaXN0Lmxlbmd0aCxcbiAgICAgICdEYW5nZXI6IERpZCBub3QgYXNzaWduIHRvIGV2ZXJ5IGluZGV4IG9mIHJlc3VsdExpc3QuJ1xuICAgICkgOiBpbnZhcmlhbnQocmVzdWx0TGlzdEFzc2lnbm1lbnRDb3VudCA9PT0gcmVzdWx0TGlzdC5sZW5ndGgpKTtcblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICByZXN1bHRMaXN0Lmxlbmd0aCA9PT0gbWFya3VwTGlzdC5sZW5ndGgsXG4gICAgICAnRGFuZ2VyOiBFeHBlY3RlZCBtYXJrdXAgdG8gcmVuZGVyICVzIG5vZGVzLCBidXQgcmVuZGVyZWQgJXMuJyxcbiAgICAgIG1hcmt1cExpc3QubGVuZ3RoLFxuICAgICAgcmVzdWx0TGlzdC5sZW5ndGhcbiAgICApIDogaW52YXJpYW50KHJlc3VsdExpc3QubGVuZ3RoID09PSBtYXJrdXBMaXN0Lmxlbmd0aCkpO1xuXG4gICAgcmV0dXJuIHJlc3VsdExpc3Q7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGEgbm9kZSB3aXRoIGEgc3RyaW5nIG9mIG1hcmt1cCBhdCBpdHMgY3VycmVudCBwb3NpdGlvbiB3aXRoaW4gaXRzXG4gICAqIHBhcmVudC4gVGhlIG1hcmt1cCBtdXN0IHJlbmRlciBpbnRvIGEgc2luZ2xlIHJvb3Qgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBvbGRDaGlsZCBDaGlsZCBub2RlIHRvIHJlcGxhY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgTWFya3VwIHRvIHJlbmRlciBpbiBwbGFjZSBvZiB0aGUgY2hpbGQgbm9kZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cDogZnVuY3Rpb24ob2xkQ2hpbGQsIG1hcmt1cCkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00sXG4gICAgICAnZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAoLi4uKTogQ2Fubm90IHJlbmRlciBtYXJrdXAgaW4gYSAnICtcbiAgICAgICd3b3JrZXIgdGhyZWFkLiBNYWtlIHN1cmUgYHdpbmRvd2AgYW5kIGBkb2N1bWVudGAgYXJlIGF2YWlsYWJsZSAnICtcbiAgICAgICdnbG9iYWxseSBiZWZvcmUgcmVxdWlyaW5nIFJlYWN0IHdoZW4gdW5pdCB0ZXN0aW5nIG9yIHVzZSAnICtcbiAgICAgICdSZWFjdC5yZW5kZXJUb1N0cmluZyBmb3Igc2VydmVyIHJlbmRlcmluZy4nXG4gICAgKSA6IGludmFyaWFudChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KG1hcmt1cCwgJ2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKC4uLik6IE1pc3NpbmcgbWFya3VwLicpIDogaW52YXJpYW50KG1hcmt1cCkpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBvbGRDaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdodG1sJyxcbiAgICAgICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCguLi4pOiBDYW5ub3QgcmVwbGFjZSBtYXJrdXAgb2YgdGhlICcgK1xuICAgICAgJzxodG1sPiBub2RlLiBUaGlzIGlzIGJlY2F1c2UgYnJvd3NlciBxdWlya3MgbWFrZSB0aGlzIHVucmVsaWFibGUgJyArXG4gICAgICAnYW5kL29yIHNsb3cuIElmIHlvdSB3YW50IHRvIHJlbmRlciB0byB0aGUgcm9vdCB5b3UgbXVzdCB1c2UgJyArXG4gICAgICAnc2VydmVyIHJlbmRlcmluZy4gU2VlIFJlYWN0LnJlbmRlclRvU3RyaW5nKCkuJ1xuICAgICkgOiBpbnZhcmlhbnQob2xkQ2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnaHRtbCcpKTtcblxuICAgIHZhciBuZXdDaGlsZCA9IGNyZWF0ZU5vZGVzRnJvbU1hcmt1cChtYXJrdXAsIGVtcHR5RnVuY3Rpb24pWzBdO1xuICAgIG9sZENoaWxkLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld0NoaWxkLCBvbGRDaGlsZCk7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYW5nZXI7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZSR0Z1WjJWeUxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRVJoYm1kbGNseHVJQ29nUUhSNWNHVmphR1ZqYTNNZ2MzUmhkR2xqTFc5dWJIbGNiaUFxTDF4dVhHNHZLbXB6YkdsdWRDQmxkbWxzT2lCMGNuVmxMQ0J6ZFdJNklIUnlkV1VnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnUlhobFkzVjBhVzl1Ulc1MmFYSnZibTFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZEZ3aUtUdGNibHh1ZG1GeUlHTnlaV0YwWlU1dlpHVnpSbkp2YlUxaGNtdDFjQ0E5SUhKbGNYVnBjbVVvWENJdUwyTnlaV0YwWlU1dlpHVnpSbkp2YlUxaGNtdDFjRndpS1R0Y2JuWmhjaUJsYlhCMGVVWjFibU4wYVc5dUlEMGdjbVZ4ZFdseVpTaGNJaTR2Wlcxd2RIbEdkVzVqZEdsdmJsd2lLVHRjYm5aaGNpQm5aWFJOWVhKcmRYQlhjbUZ3SUQwZ2NtVnhkV2x5WlNoY0lpNHZaMlYwVFdGeWEzVndWM0poY0Z3aUtUdGNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiblpoY2lCUFVFVk9YMVJCUjE5T1FVMUZYMFZZVUNBOUlDOWVLRHhiWGlCY1hDOCtYU3NwTHp0Y2JuWmhjaUJTUlZOVlRGUmZTVTVFUlZoZlFWUlVVaUE5SUNka1lYUmhMV1JoYm1kbGNpMXBibVJsZUNjN1hHNWNiaThxS2x4dUlDb2dSWGgwY21GamRITWdkR2hsSUdCdWIyUmxUbUZ0WldBZ1puSnZiU0JoSUhOMGNtbHVaeUJ2WmlCdFlYSnJkWEF1WEc0Z0tseHVJQ29nVGs5VVJUb2dSWGgwY21GamRHbHVaeUIwYUdVZ1lHNXZaR1ZPWVcxbFlDQmtiMlZ6SUc1dmRDQnlaWEYxYVhKbElHRWdjbVZuZFd4aGNpQmxlSEJ5WlhOemFXOXVJRzFoZEdOb1hHNGdLaUJpWldOaGRYTmxJSGRsSUcxaGEyVWdZWE56ZFcxd2RHbHZibk1nWVdKdmRYUWdVbVZoWTNRdFoyVnVaWEpoZEdWa0lHMWhjbXQxY0NBb2FTNWxMaUIwYUdWeVpTQmhjbVVnYm05Y2JpQXFJSE53WVdObGN5QnpkWEp5YjNWdVpHbHVaeUIwYUdVZ2IzQmxibWx1WnlCMFlXY2dZVzVrSUhSb1pYSmxJR2x6SUdGMElHeGxZWE4wSUc5dVpTQmhkSFJ5YVdKMWRHVXBMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnRZWEpyZFhBZ1UzUnlhVzVuSUc5bUlHMWhjbXQxY0M1Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMGdUbTlrWlNCdVlXMWxJRzltSUhSb1pTQnpkWEJ3YkdsbFpDQnRZWEpyZFhBdVhHNGdLaUJBYzJWbElHaDBkSEE2THk5cWMzQmxjbVl1WTI5dEwyVjRkSEpoWTNRdGJtOWtaVzVoYldWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWjJWMFRtOWtaVTVoYldVb2JXRnlhM1Z3S1NCN1hHNGdJSEpsZEhWeWJpQnRZWEpyZFhBdWMzVmljM1J5YVc1bktERXNJRzFoY210MWNDNXBibVJsZUU5bUtDY2dKeWtwTzF4dWZWeHVYRzUyWVhJZ1JHRnVaMlZ5SUQwZ2UxeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pXNWtaWEp6SUcxaGNtdDFjQ0JwYm5SdklHRnVJR0Z5Y21GNUlHOW1JRzV2WkdWekxpQlVhR1VnYldGeWEzVndJR2x6SUdWNGNHVmpkR1ZrSUhSdklISmxibVJsY2x4dUlDQWdLaUJwYm5SdklHRWdiR2x6ZENCdlppQnliMjkwSUc1dlpHVnpMaUJCYkhOdkxDQjBhR1VnYkdWdVozUm9JRzltSUdCeVpYTjFiSFJNYVhOMFlDQmhibVJjYmlBZ0lDb2dZRzFoY210MWNFeHBjM1JnSUhOb2IzVnNaQ0JpWlNCMGFHVWdjMkZ0WlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdGhjbkpoZVR4emRISnBibWMrZlNCdFlYSnJkWEJNYVhOMElFeHBjM1FnYjJZZ2JXRnlhM1Z3SUhOMGNtbHVaM01nZEc4Z2NtVnVaR1Z5TGx4dUlDQWdLaUJBY21WMGRYSnVJSHRoY25KaGVUeEVUMDFGYkdWdFpXNTBQbjBnVEdsemRDQnZaaUJ5Wlc1a1pYSmxaQ0J1YjJSbGN5NWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQmtZVzVuWlhKdmRYTnNlVkpsYm1SbGNrMWhjbXQxY0RvZ1puVnVZM1JwYjI0b2JXRnlhM1Z3VEdsemRDa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCRmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRDNWpZVzVWYzJWRVQwMHNYRzRnSUNBZ0lDQW5aR0Z1WjJWeWIzVnpiSGxTWlc1a1pYSk5ZWEpyZFhBb0xpNHVLVG9nUTJGdWJtOTBJSEpsYm1SbGNpQnRZWEpyZFhBZ2FXNGdZU0IzYjNKclpYSWdKeUFyWEc0Z0lDQWdJQ0FuZEdoeVpXRmtMaUJOWVd0bElITjFjbVVnWUhkcGJtUnZkMkFnWVc1a0lHQmtiMk4xYldWdWRHQWdZWEpsSUdGMllXbHNZV0pzWlNCbmJHOWlZV3hzZVNBbklDdGNiaUFnSUNBZ0lDZGlaV1p2Y21VZ2NtVnhkV2x5YVc1bklGSmxZV04wSUhkb1pXNGdkVzVwZENCMFpYTjBhVzVuSUc5eUlIVnpaU0FuSUN0Y2JpQWdJQ0FnSUNkU1pXRmpkQzV5Wlc1a1pYSlViMU4wY21sdVp5Qm1iM0lnYzJWeWRtVnlJSEpsYm1SbGNtbHVaeTRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoRmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRDNWpZVzVWYzJWRVQwMHBLVHRjYmlBZ0lDQjJZWElnYm05a1pVNWhiV1U3WEc0Z0lDQWdkbUZ5SUcxaGNtdDFjRUo1VG05a1pVNWhiV1VnUFNCN2ZUdGNiaUFnSUNBdkx5QkhjbTkxY0NCdFlYSnJkWEFnWW5rZ1lHNXZaR1ZPWVcxbFlDQnBaaUJoSUhkeVlYQWdhWE1nYm1WalpYTnpZWEo1TENCbGJITmxJR0o1SUNjcUp5NWNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHMWhjbXQxY0V4cGMzUXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUcxaGNtdDFjRXhwYzNSYmFWMHNYRzRnSUNBZ0lDQWdJQ2RrWVc1blpYSnZkWE5zZVZKbGJtUmxjazFoY210MWNDZ3VMaTRwT2lCTmFYTnphVzVuSUcxaGNtdDFjQzRuWEc0Z0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHMWhjbXQxY0V4cGMzUmJhVjBwS1R0Y2JpQWdJQ0FnSUc1dlpHVk9ZVzFsSUQwZ1oyVjBUbTlrWlU1aGJXVW9iV0Z5YTNWd1RHbHpkRnRwWFNrN1hHNGdJQ0FnSUNCdWIyUmxUbUZ0WlNBOUlHZGxkRTFoY210MWNGZHlZWEFvYm05a1pVNWhiV1VwSUQ4Z2JtOWtaVTVoYldVZ09pQW5LaWM3WEc0Z0lDQWdJQ0J0WVhKcmRYQkNlVTV2WkdWT1lXMWxXMjV2WkdWT1lXMWxYU0E5SUcxaGNtdDFjRUo1VG05a1pVNWhiV1ZiYm05a1pVNWhiV1ZkSUh4OElGdGRPMXh1SUNBZ0lDQWdiV0Z5YTNWd1FubE9iMlJsVG1GdFpWdHViMlJsVG1GdFpWMWJhVjBnUFNCdFlYSnJkWEJNYVhOMFcybGRPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdjbVZ6ZFd4MFRHbHpkQ0E5SUZ0ZE8xeHVJQ0FnSUhaaGNpQnlaWE4xYkhSTWFYTjBRWE56YVdkdWJXVnVkRU52ZFc1MElEMGdNRHRjYmlBZ0lDQm1iM0lnS0c1dlpHVk9ZVzFsSUdsdUlHMWhjbXQxY0VKNVRtOWtaVTVoYldVcElIdGNiaUFnSUNBZ0lHbG1JQ2doYldGeWEzVndRbmxPYjJSbFRtRnRaUzVvWVhOUGQyNVFjbTl3WlhKMGVTaHViMlJsVG1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IyWVhJZ2JXRnlhM1Z3VEdsemRFSjVUbTlrWlU1aGJXVWdQU0J0WVhKcmRYQkNlVTV2WkdWT1lXMWxXMjV2WkdWT1lXMWxYVHRjYmx4dUlDQWdJQ0FnTHk4Z1ZHaHBjeUJtYjNJdGFXNGdiRzl2Y0NCemEybHdjeUIwYUdVZ2FHOXNaWE1nYjJZZ2RHaGxJSE53WVhKelpTQmhjbkpoZVM0Z1ZHaGxJRzl5WkdWeUlHOW1YRzRnSUNBZ0lDQXZMeUJwZEdWeVlYUnBiMjRnYzJodmRXeGtJR1p2Ykd4dmR5QjBhR1VnYjNKa1pYSWdiMllnWVhOemFXZHViV1Z1ZEN3Z2QyaHBZMmdnYUdGd2NHVnVjeUIwYnlCdFlYUmphRnh1SUNBZ0lDQWdMeThnYm5WdFpYSnBZMkZzSUdsdVpHVjRJRzl5WkdWeUxDQmlkWFFnZDJVZ1pHOXVKM1FnY21Wc2VTQnZiaUIwYUdGMExseHVJQ0FnSUNBZ2RtRnlJSEpsYzNWc2RFbHVaR1Y0TzF4dUlDQWdJQ0FnWm05eUlDaHlaWE4xYkhSSmJtUmxlQ0JwYmlCdFlYSnJkWEJNYVhOMFFubE9iMlJsVG1GdFpTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2JXRnlhM1Z3VEdsemRFSjVUbTlrWlU1aGJXVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NtVnpkV3gwU1c1a1pYZ3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RtRnlJRzFoY210MWNDQTlJRzFoY210MWNFeHBjM1JDZVU1dlpHVk9ZVzFsVzNKbGMzVnNkRWx1WkdWNFhUdGNibHh1SUNBZ0lDQWdJQ0FnSUM4dklGQjFjMmdnZEdobElISmxjWFZsYzNSbFpDQnRZWEpyZFhBZ2QybDBhQ0JoYmlCaFpHUnBkR2x2Ym1Gc0lGSkZVMVZNVkY5SlRrUkZXRjlCVkZSU1hHNGdJQ0FnSUNBZ0lDQWdMeThnWVhSMGNtbGlkWFJsTGlBZ1NXWWdkR2hsSUcxaGNtdDFjQ0JrYjJWeklHNXZkQ0J6ZEdGeWRDQjNhWFJvSUdFZ1BDQmphR0Z5WVdOMFpYSXNJR2wwWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkMmxzYkNCaVpTQmthWE5qWVhKa1pXUWdZbVZzYjNjZ0tIZHBkR2dnWVc0Z1lYQndjbTl3Y21saGRHVWdZMjl1YzI5c1pTNWxjbkp2Y2lrdVhHNGdJQ0FnSUNBZ0lDQWdiV0Z5YTNWd1RHbHpkRUo1VG05a1pVNWhiV1ZiY21WemRXeDBTVzVrWlhoZElEMGdiV0Z5YTNWd0xuSmxjR3hoWTJVb1hHNGdJQ0FnSUNBZ0lDQWdJQ0JQVUVWT1gxUkJSMTlPUVUxRlgwVllVQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRlJvYVhNZ2FXNWtaWGdnZDJsc2JDQmlaU0J3WVhKelpXUWdZbUZqYXlCdmRYUWdZbVZzYjNjdVhHNGdJQ0FnSUNBZ0lDQWdJQ0FuSkRFZ0p5QXJJRkpGVTFWTVZGOUpUa1JGV0Y5QlZGUlNJQ3NnSnoxY0lpY2dLeUJ5WlhOMWJIUkpibVJsZUNBcklDZGNJaUFuWEc0Z0lDQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0F2THlCU1pXNWtaWElnWldGamFDQm5jbTkxY0NCdlppQnRZWEpyZFhBZ2QybDBhQ0J6YVcxcGJHRnlJSGR5WVhCd2FXNW5JR0J1YjJSbFRtRnRaV0F1WEc0Z0lDQWdJQ0IyWVhJZ2NtVnVaR1Z5VG05a1pYTWdQU0JqY21WaGRHVk9iMlJsYzBaeWIyMU5ZWEpyZFhBb1hHNGdJQ0FnSUNBZ0lHMWhjbXQxY0V4cGMzUkNlVTV2WkdWT1lXMWxMbXB2YVc0b0p5Y3BMRnh1SUNBZ0lDQWdJQ0JsYlhCMGVVWjFibU4wYVc5dUlDOHZJRVJ2SUc1dmRHaHBibWNnYzNCbFkybGhiQ0IzYVhSb0lEeHpZM0pwY0hRK0lIUmhaM011WEc0Z0lDQWdJQ0FwTzF4dVhHNGdJQ0FnSUNCbWIzSWdLSFpoY2lCcUlEMGdNRHNnYWlBOElISmxibVJsY2s1dlpHVnpMbXhsYm1kMGFEc2dLeXRxS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ5Wlc1a1pYSk9iMlJsSUQwZ2NtVnVaR1Z5VG05a1pYTmJhbDA3WEc0Z0lDQWdJQ0FnSUdsbUlDaHlaVzVrWlhKT2IyUmxMbWhoYzBGMGRISnBZblYwWlNBbUpseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WdVpHVnlUbTlrWlM1b1lYTkJkSFJ5YVdKMWRHVW9Va1ZUVlV4VVgwbE9SRVZZWDBGVVZGSXBLU0I3WEc1Y2JpQWdJQ0FnSUNBZ0lDQnlaWE4xYkhSSmJtUmxlQ0E5SUN0eVpXNWtaWEpPYjJSbExtZGxkRUYwZEhKcFluVjBaU2hTUlZOVlRGUmZTVTVFUlZoZlFWUlVVaWs3WEc0Z0lDQWdJQ0FnSUNBZ2NtVnVaR1Z5VG05a1pTNXlaVzF2ZG1WQmRIUnlhV0oxZEdVb1VrVlRWVXhVWDBsT1JFVllYMEZVVkZJcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDRnlaWE4xYkhSTWFYTjBMbWhoYzA5M2JsQnliM0JsY25SNUtISmxjM1ZzZEVsdVpHVjRLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDZEVZVzVuWlhJNklFRnpjMmxuYm1sdVp5QjBieUJoYmlCaGJISmxZV1I1TFc5alkzVndhV1ZrSUhKbGMzVnNkQ0JwYm1SbGVDNG5YRzRnSUNBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDZ2hjbVZ6ZFd4MFRHbHpkQzVvWVhOUGQyNVFjbTl3WlhKMGVTaHlaWE4xYkhSSmJtUmxlQ2twS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJSEpsYzNWc2RFeHBjM1JiY21WemRXeDBTVzVrWlhoZElEMGdjbVZ1WkdWeVRtOWtaVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDOHZJRlJvYVhNZ2MyaHZkV3hrSUcxaGRHTm9JSEpsYzNWc2RFeHBjM1F1YkdWdVozUm9JR0Z1WkNCdFlYSnJkWEJNYVhOMExteGxibWQwYUNCM2FHVnVYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2QyVW5jbVVnWkc5dVpTNWNiaUFnSUNBZ0lDQWdJQ0J5WlhOMWJIUk1hWE4wUVhOemFXZHViV1Z1ZEVOdmRXNTBJQ3M5SURFN1hHNWNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emIyeGxMbVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnSjBSaGJtZGxjam9nUkdselkyRnlaR2x1WnlCMWJtVjRjR1ZqZEdWa0lHNXZaR1U2Snl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsYm1SbGNrNXZaR1ZjYmlBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdRV3gwYUc5MVoyZ2djbVZ6ZFd4MFRHbHpkQ0IzWVhNZ2NHOXdkV3hoZEdWa0lHOTFkQ0J2WmlCdmNtUmxjaXdnYVhRZ2MyaHZkV3hrSUc1dmR5QmlaU0JoSUdSbGJuTmxYRzRnSUNBZ0x5OGdZWEp5WVhrdVhHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJSEpsYzNWc2RFeHBjM1JCYzNOcFoyNXRaVzUwUTI5MWJuUWdQVDA5SUhKbGMzVnNkRXhwYzNRdWJHVnVaM1JvTEZ4dUlDQWdJQ0FnSjBSaGJtZGxjam9nUkdsa0lHNXZkQ0JoYzNOcFoyNGdkRzhnWlhabGNua2dhVzVrWlhnZ2IyWWdjbVZ6ZFd4MFRHbHpkQzRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoeVpYTjFiSFJNYVhOMFFYTnphV2R1YldWdWRFTnZkVzUwSUQwOVBTQnlaWE4xYkhSTWFYTjBMbXhsYm1kMGFDa3BPMXh1WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lISmxjM1ZzZEV4cGMzUXViR1Z1WjNSb0lEMDlQU0J0WVhKcmRYQk1hWE4wTG14bGJtZDBhQ3hjYmlBZ0lDQWdJQ2RFWVc1blpYSTZJRVY0Y0dWamRHVmtJRzFoY210MWNDQjBieUJ5Wlc1a1pYSWdKWE1nYm05a1pYTXNJR0oxZENCeVpXNWtaWEpsWkNBbGN5NG5MRnh1SUNBZ0lDQWdiV0Z5YTNWd1RHbHpkQzVzWlc1bmRHZ3NYRzRnSUNBZ0lDQnlaWE4xYkhSTWFYTjBMbXhsYm1kMGFGeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9jbVZ6ZFd4MFRHbHpkQzVzWlc1bmRHZ2dQVDA5SUcxaGNtdDFjRXhwYzNRdWJHVnVaM1JvS1NrN1hHNWNiaUFnSUNCeVpYUjFjbTRnY21WemRXeDBUR2x6ZER0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVZ3YkdGalpYTWdZU0J1YjJSbElIZHBkR2dnWVNCemRISnBibWNnYjJZZ2JXRnlhM1Z3SUdGMElHbDBjeUJqZFhKeVpXNTBJSEJ2YzJsMGFXOXVJSGRwZEdocGJpQnBkSE5jYmlBZ0lDb2djR0Z5Wlc1MExpQlVhR1VnYldGeWEzVndJRzExYzNRZ2NtVnVaR1Z5SUdsdWRHOGdZU0J6YVc1bmJHVWdjbTl2ZENCdWIyUmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlHOXNaRU5vYVd4a0lFTm9hV3hrSUc1dlpHVWdkRzhnY21Wd2JHRmpaUzVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHMWhjbXQxY0NCTllYSnJkWEFnZEc4Z2NtVnVaR1Z5SUdsdUlIQnNZV05sSUc5bUlIUm9aU0JqYUdsc1pDQnViMlJsTGx4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUdSaGJtZGxjbTkxYzJ4NVVtVndiR0ZqWlU1dlpHVlhhWFJvVFdGeWEzVndPaUJtZFc1amRHbHZiaWh2YkdSRGFHbHNaQ3dnYldGeWEzVndLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lFVjRaV04xZEdsdmJrVnVkbWx5YjI1dFpXNTBMbU5oYmxWelpVUlBUU3hjYmlBZ0lDQWdJQ2RrWVc1blpYSnZkWE5zZVZKbGNHeGhZMlZPYjJSbFYybDBhRTFoY210MWNDZ3VMaTRwT2lCRFlXNXViM1FnY21WdVpHVnlJRzFoY210MWNDQnBiaUJoSUNjZ0sxeHVJQ0FnSUNBZ0ozZHZjbXRsY2lCMGFISmxZV1F1SUUxaGEyVWdjM1Z5WlNCZ2QybHVaRzkzWUNCaGJtUWdZR1J2WTNWdFpXNTBZQ0JoY21VZ1lYWmhhV3hoWW14bElDY2dLMXh1SUNBZ0lDQWdKMmRzYjJKaGJHeDVJR0psWm05eVpTQnlaWEYxYVhKcGJtY2dVbVZoWTNRZ2QyaGxiaUIxYm1sMElIUmxjM1JwYm1jZ2IzSWdkWE5sSUNjZ0sxeHVJQ0FnSUNBZ0oxSmxZV04wTG5KbGJtUmxjbFJ2VTNSeWFXNW5JR1p2Y2lCelpYSjJaWElnY21WdVpHVnlhVzVuTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtFVjRaV04xZEdsdmJrVnVkbWx5YjI1dFpXNTBMbU5oYmxWelpVUlBUU2twTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9iV0Z5YTNWd0xDQW5aR0Z1WjJWeWIzVnpiSGxTWlhCc1lXTmxUbTlrWlZkcGRHaE5ZWEpyZFhBb0xpNHVLVG9nVFdsemMybHVaeUJ0WVhKcmRYQXVKeWtnT2lCcGJuWmhjbWxoYm5Rb2JXRnlhM1Z3S1NrN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJRzlzWkVOb2FXeGtMblJoWjA1aGJXVXVkRzlNYjNkbGNrTmhjMlVvS1NBaFBUMGdKMmgwYld3bkxGeHVJQ0FnSUNBZ0oyUmhibWRsY205MWMyeDVVbVZ3YkdGalpVNXZaR1ZYYVhSb1RXRnlhM1Z3S0M0dUxpazZJRU5oYm01dmRDQnlaWEJzWVdObElHMWhjbXQxY0NCdlppQjBhR1VnSnlBclhHNGdJQ0FnSUNBblBHaDBiV3crSUc1dlpHVXVJRlJvYVhNZ2FYTWdZbVZqWVhWelpTQmljbTkzYzJWeUlIRjFhWEpyY3lCdFlXdGxJSFJvYVhNZ2RXNXlaV3hwWVdKc1pTQW5JQ3RjYmlBZ0lDQWdJQ2RoYm1RdmIzSWdjMnh2ZHk0Z1NXWWdlVzkxSUhkaGJuUWdkRzhnY21WdVpHVnlJSFJ2SUhSb1pTQnliMjkwSUhsdmRTQnRkWE4wSUhWelpTQW5JQ3RjYmlBZ0lDQWdJQ2R6WlhKMlpYSWdjbVZ1WkdWeWFXNW5MaUJUWldVZ1VtVmhZM1F1Y21WdVpHVnlWRzlUZEhKcGJtY29LUzRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENodmJHUkRhR2xzWkM1MFlXZE9ZVzFsTG5SdlRHOTNaWEpEWVhObEtDa2dJVDA5SUNkb2RHMXNKeWtwTzF4dVhHNGdJQ0FnZG1GeUlHNWxkME5vYVd4a0lEMGdZM0psWVhSbFRtOWtaWE5HY205dFRXRnlhM1Z3S0cxaGNtdDFjQ3dnWlcxd2RIbEdkVzVqZEdsdmJpbGJNRjA3WEc0Z0lDQWdiMnhrUTJocGJHUXVjR0Z5Wlc1MFRtOWtaUzV5WlhCc1lXTmxRMmhwYkdRb2JtVjNRMmhwYkdRc0lHOXNaRU5vYVd4a0tUdGNiaUFnZlZ4dVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUVSaGJtZGxjanRjYmlKZGZRPT0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xuXG4vKipcbiAqIE1vZHVsZSB0aGF0IGlzIGluamVjdGFibGUgaW50byBgRXZlbnRQbHVnaW5IdWJgLCB0aGF0IHNwZWNpZmllcyBhXG4gKiBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGBFdmVudFBsdWdpbmBzLiBBIGNvbnZlbmllbnQgd2F5IHRvIHJlYXNvbiBhYm91dFxuICogcGx1Z2lucywgd2l0aG91dCBoYXZpbmcgdG8gcGFja2FnZSBldmVyeSBvbmUgb2YgdGhlbS4gVGhpcyBpcyBiZXR0ZXIgdGhhblxuICogaGF2aW5nIHBsdWdpbnMgYmUgb3JkZXJlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgYXJlIGluamVjdGVkIGJlY2F1c2VcbiAqIHRoYXQgb3JkZXJpbmcgd291bGQgYmUgaW5mbHVlbmNlZCBieSB0aGUgcGFja2FnaW5nIG9yZGVyLlxuICogYFJlc3BvbmRlckV2ZW50UGx1Z2luYCBtdXN0IG9jY3VyIGJlZm9yZSBgU2ltcGxlRXZlbnRQbHVnaW5gIHNvIHRoYXRcbiAqIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBldmVudHMgaXMgY29udmVuaWVudCBpbiBgU2ltcGxlRXZlbnRQbHVnaW5gIGhhbmRsZXJzLlxuICovXG52YXIgRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIgPSBbXG4gIGtleU9mKHtSZXNwb25kZXJFdmVudFBsdWdpbjogbnVsbH0pLFxuICBrZXlPZih7U2ltcGxlRXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe1RhcEV2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtFbnRlckxlYXZlRXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe0NoYW5nZUV2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtTZWxlY3RFdmVudFBsdWdpbjogbnVsbH0pLFxuICBrZXlPZih7QmVmb3JlSW5wdXRFdmVudFBsdWdpbjogbnVsbH0pLFxuICBrZXlPZih7QW5hbHl0aWNzRXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe01vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW46IG51bGx9KVxuXTtcblxubW9kdWxlLmV4cG9ydHMgPSBEZWZhdWx0RXZlbnRQbHVnaW5PcmRlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFbnRlckxlYXZlRXZlbnRQbHVnaW5cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZShcIi4vRXZlbnRQcm9wYWdhdG9yc1wiKTtcbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljTW91c2VFdmVudFwiKTtcblxudmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKFwiLi9SZWFjdE1vdW50XCIpO1xudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcbnZhciBnZXRGaXJzdFJlYWN0RE9NID0gUmVhY3RNb3VudC5nZXRGaXJzdFJlYWN0RE9NO1xuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgbW91c2VFbnRlcjoge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6IGtleU9mKHtvbk1vdXNlRW50ZXI6IG51bGx9KSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wTW91c2VPdXQsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3ZlclxuICAgIF1cbiAgfSxcbiAgbW91c2VMZWF2ZToge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6IGtleU9mKHtvbk1vdXNlTGVhdmU6IG51bGx9KSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wTW91c2VPdXQsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3ZlclxuICAgIF1cbiAgfVxufTtcblxudmFyIGV4dHJhY3RlZEV2ZW50cyA9IFtudWxsLCBudWxsXTtcblxudmFyIEVudGVyTGVhdmVFdmVudFBsdWdpbiA9IHtcblxuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIC8qKlxuICAgKiBGb3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0aW9uIHdlIGNhcmUgYWJvdXQsIHRoZXJlIHdpbGwgYmUgYm90aCBhIHRvcC1sZXZlbFxuICAgKiBgbW91c2VvdmVyYCBhbmQgYG1vdXNlb3V0YCBldmVudCB0aGF0IG9jY3Vycy4gT25seSB1c2UgYG1vdXNlb3V0YCBzbyB0aGF0XG4gICAqIHdlIGRvIG5vdCBleHRyYWN0IGR1cGxpY2F0ZSBldmVudHMuIEhvd2V2ZXIsIG1vdmluZyB0aGUgbW91c2UgaW50byB0aGVcbiAgICogYnJvd3NlciBmcm9tIG91dHNpZGUgd2lsbCBub3QgZmlyZSBhIGBtb3VzZW91dGAgZXZlbnQuIEluIHRoaXMgY2FzZSwgd2UgdXNlXG4gICAqIHRoZSBgbW91c2VvdmVyYCB0b3AtbGV2ZWwgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzfVxuICAgKi9cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24oXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudCkge1xuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wTW91c2VPdmVyICYmXG4gICAgICAgIChuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0b3BMZXZlbFR5cGUgIT09IHRvcExldmVsVHlwZXMudG9wTW91c2VPdXQgJiZcbiAgICAgICAgdG9wTGV2ZWxUeXBlICE9PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3Zlcikge1xuICAgICAgLy8gTXVzdCBub3QgYmUgYSBtb3VzZSBpbiBvciBtb3VzZSBvdXQgLSBpZ25vcmluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciB3aW47XG4gICAgaWYgKHRvcExldmVsVGFyZ2V0LndpbmRvdyA9PT0gdG9wTGV2ZWxUYXJnZXQpIHtcbiAgICAgIC8vIGB0b3BMZXZlbFRhcmdldGAgaXMgcHJvYmFibHkgYSB3aW5kb3cgb2JqZWN0LlxuICAgICAgd2luID0gdG9wTGV2ZWxUYXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMgdW5kZWZpbmVkIGluIElFOC5cbiAgICAgIHZhciBkb2MgPSB0b3BMZXZlbFRhcmdldC5vd25lckRvY3VtZW50O1xuICAgICAgaWYgKGRvYykge1xuICAgICAgICB3aW4gPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbiA9IHdpbmRvdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZnJvbSwgdG87XG4gICAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU91dCkge1xuICAgICAgZnJvbSA9IHRvcExldmVsVGFyZ2V0O1xuICAgICAgdG8gPVxuICAgICAgICBnZXRGaXJzdFJlYWN0RE9NKG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50KSB8fFxuICAgICAgICB3aW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyb20gPSB3aW47XG4gICAgICB0byA9IHRvcExldmVsVGFyZ2V0O1xuICAgIH1cblxuICAgIGlmIChmcm9tID09PSB0bykge1xuICAgICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBvdXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGZyb21JRCA9IGZyb20gPyBSZWFjdE1vdW50LmdldElEKGZyb20pIDogJyc7XG4gICAgdmFyIHRvSUQgPSB0byA/IFJlYWN0TW91bnQuZ2V0SUQodG8pIDogJyc7XG5cbiAgICB2YXIgbGVhdmUgPSBTeW50aGV0aWNNb3VzZUV2ZW50LmdldFBvb2xlZChcbiAgICAgIGV2ZW50VHlwZXMubW91c2VMZWF2ZSxcbiAgICAgIGZyb21JRCxcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKTtcbiAgICBsZWF2ZS50eXBlID0gJ21vdXNlbGVhdmUnO1xuICAgIGxlYXZlLnRhcmdldCA9IGZyb207XG4gICAgbGVhdmUucmVsYXRlZFRhcmdldCA9IHRvO1xuXG4gICAgdmFyIGVudGVyID0gU3ludGhldGljTW91c2VFdmVudC5nZXRQb29sZWQoXG4gICAgICBldmVudFR5cGVzLm1vdXNlRW50ZXIsXG4gICAgICB0b0lELFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApO1xuICAgIGVudGVyLnR5cGUgPSAnbW91c2VlbnRlcic7XG4gICAgZW50ZXIudGFyZ2V0ID0gdG87XG4gICAgZW50ZXIucmVsYXRlZFRhcmdldCA9IGZyb207XG5cbiAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyhsZWF2ZSwgZW50ZXIsIGZyb21JRCwgdG9JRCk7XG5cbiAgICBleHRyYWN0ZWRFdmVudHNbMF0gPSBsZWF2ZTtcbiAgICBleHRyYWN0ZWRFdmVudHNbMV0gPSBlbnRlcjtcblxuICAgIHJldHVybiBleHRyYWN0ZWRFdmVudHM7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFbnRlckxlYXZlRXZlbnRQbHVnaW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRDb25zdGFudHNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBrZXlNaXJyb3IgPSByZXF1aXJlKFwiLi9rZXlNaXJyb3JcIik7XG5cbnZhciBQcm9wYWdhdGlvblBoYXNlcyA9IGtleU1pcnJvcih7YnViYmxlZDogbnVsbCwgY2FwdHVyZWQ6IG51bGx9KTtcblxuLyoqXG4gKiBUeXBlcyBvZiByYXcgc2lnbmFscyBmcm9tIHRoZSBicm93c2VyIGNhdWdodCBhdCB0aGUgdG9wIGxldmVsLlxuICovXG52YXIgdG9wTGV2ZWxUeXBlcyA9IGtleU1pcnJvcih7XG4gIHRvcEJsdXI6IG51bGwsXG4gIHRvcENoYW5nZTogbnVsbCxcbiAgdG9wQ2xpY2s6IG51bGwsXG4gIHRvcENvbXBvc2l0aW9uRW5kOiBudWxsLFxuICB0b3BDb21wb3NpdGlvblN0YXJ0OiBudWxsLFxuICB0b3BDb21wb3NpdGlvblVwZGF0ZTogbnVsbCxcbiAgdG9wQ29udGV4dE1lbnU6IG51bGwsXG4gIHRvcENvcHk6IG51bGwsXG4gIHRvcEN1dDogbnVsbCxcbiAgdG9wRG91YmxlQ2xpY2s6IG51bGwsXG4gIHRvcERyYWc6IG51bGwsXG4gIHRvcERyYWdFbmQ6IG51bGwsXG4gIHRvcERyYWdFbnRlcjogbnVsbCxcbiAgdG9wRHJhZ0V4aXQ6IG51bGwsXG4gIHRvcERyYWdMZWF2ZTogbnVsbCxcbiAgdG9wRHJhZ092ZXI6IG51bGwsXG4gIHRvcERyYWdTdGFydDogbnVsbCxcbiAgdG9wRHJvcDogbnVsbCxcbiAgdG9wRXJyb3I6IG51bGwsXG4gIHRvcEZvY3VzOiBudWxsLFxuICB0b3BJbnB1dDogbnVsbCxcbiAgdG9wS2V5RG93bjogbnVsbCxcbiAgdG9wS2V5UHJlc3M6IG51bGwsXG4gIHRvcEtleVVwOiBudWxsLFxuICB0b3BMb2FkOiBudWxsLFxuICB0b3BNb3VzZURvd246IG51bGwsXG4gIHRvcE1vdXNlTW92ZTogbnVsbCxcbiAgdG9wTW91c2VPdXQ6IG51bGwsXG4gIHRvcE1vdXNlT3ZlcjogbnVsbCxcbiAgdG9wTW91c2VVcDogbnVsbCxcbiAgdG9wUGFzdGU6IG51bGwsXG4gIHRvcFJlc2V0OiBudWxsLFxuICB0b3BTY3JvbGw6IG51bGwsXG4gIHRvcFNlbGVjdGlvbkNoYW5nZTogbnVsbCxcbiAgdG9wU3VibWl0OiBudWxsLFxuICB0b3BUZXh0SW5wdXQ6IG51bGwsXG4gIHRvcFRvdWNoQ2FuY2VsOiBudWxsLFxuICB0b3BUb3VjaEVuZDogbnVsbCxcbiAgdG9wVG91Y2hNb3ZlOiBudWxsLFxuICB0b3BUb3VjaFN0YXJ0OiBudWxsLFxuICB0b3BXaGVlbDogbnVsbFxufSk7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHtcbiAgdG9wTGV2ZWxUeXBlczogdG9wTGV2ZWxUeXBlcyxcbiAgUHJvcGFnYXRpb25QaGFzZXM6IFByb3BhZ2F0aW9uUGhhc2VzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50Q29uc3RhbnRzO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRMaXN0ZW5lclxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbi8qKlxuICogVXBzdHJlYW0gdmVyc2lvbiBvZiBldmVudCBsaXN0ZW5lci4gRG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgc3BlY2lmaWNcbiAqIG5hdHVyZSBvZiBwbGF0Zm9ybS5cbiAqL1xudmFyIEV2ZW50TGlzdGVuZXIgPSB7XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRE9NIGV2ZW50cyBkdXJpbmcgdGhlIGJ1YmJsZSBwaGFzZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdGFyZ2V0IERPTSBlbGVtZW50IHRvIHJlZ2lzdGVyIGxpc3RlbmVyIG9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlIEV2ZW50IHR5cGUsIGUuZy4gJ2NsaWNrJyBvciAnbW91c2VvdmVyJy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IHdpdGggYSBgcmVtb3ZlYCBtZXRob2QuXG4gICAqL1xuICBsaXN0ZW46IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnRUeXBlLCBjYWxsYmFjaykge1xuICAgIGlmICh0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGNhbGxiYWNrLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0YXJnZXQuYXR0YWNoRXZlbnQpIHtcbiAgICAgIHRhcmdldC5hdHRhY2hFdmVudCgnb24nICsgZXZlbnRUeXBlLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRhcmdldC5kZXRhY2hFdmVudCgnb24nICsgZXZlbnRUeXBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRE9NIGV2ZW50cyBkdXJpbmcgdGhlIGNhcHR1cmUgcGhhc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRhcmdldCBET00gZWxlbWVudCB0byByZWdpc3RlciBsaXN0ZW5lciBvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlwZSBFdmVudCB0eXBlLCBlLmcuICdjbGljaycgb3IgJ21vdXNlb3ZlcicuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCB3aXRoIGEgYHJlbW92ZWAgbWV0aG9kLlxuICAgKi9cbiAgY2FwdHVyZTogZnVuY3Rpb24odGFyZ2V0LCBldmVudFR5cGUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdBdHRlbXB0ZWQgdG8gbGlzdGVuIHRvIGV2ZW50cyBkdXJpbmcgdGhlIGNhcHR1cmUgcGhhc2Ugb24gYSAnICtcbiAgICAgICAgICAnYnJvd3NlciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGNhcHR1cmUgcGhhc2UuIFlvdXIgYXBwbGljYXRpb24gJyArXG4gICAgICAgICAgJ3dpbGwgbm90IHJlY2VpdmUgc29tZSBldmVudHMuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3ZlOiBlbXB0eUZ1bmN0aW9uXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGNhbGxiYWNrLCB0cnVlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuXG4gIHJlZ2lzdGVyRGVmYXVsdDogZnVuY3Rpb24oKSB7fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudExpc3RlbmVyO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UlhabGJuUk1hWE4wWlc1bGNpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLbHh1SUNvZ1RHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFRndZV05vWlNCTWFXTmxibk5sTENCV1pYSnphVzl1SURJdU1DQW9kR2hsSUZ3aVRHbGpaVzV6WlZ3aUtUdGNiaUFxSUhsdmRTQnRZWGtnYm05MElIVnpaU0IwYUdseklHWnBiR1VnWlhoalpYQjBJR2x1SUdOdmJYQnNhV0Z1WTJVZ2QybDBhQ0IwYUdVZ1RHbGpaVzV6WlM1Y2JpQXFJRmx2ZFNCdFlYa2diMkowWVdsdUlHRWdZMjl3ZVNCdlppQjBhR1VnVEdsalpXNXpaU0JoZEZ4dUlDcGNiaUFxSUdoMGRIQTZMeTkzZDNjdVlYQmhZMmhsTG05eVp5OXNhV05sYm5ObGN5OU1TVU5GVGxORkxUSXVNRnh1SUNwY2JpQXFJRlZ1YkdWemN5QnlaWEYxYVhKbFpDQmllU0JoY0hCc2FXTmhZbXhsSUd4aGR5QnZjaUJoWjNKbFpXUWdkRzhnYVc0Z2QzSnBkR2x1Wnl3Z2MyOW1kSGRoY21WY2JpQXFJR1JwYzNSeWFXSjFkR1ZrSUhWdVpHVnlJSFJvWlNCTWFXTmxibk5sSUdseklHUnBjM1J5YVdKMWRHVmtJRzl1SUdGdUlGd2lRVk1nU1ZOY0lpQkNRVk5KVXl4Y2JpQXFJRmRKVkVoUFZWUWdWMEZTVWtGT1ZFbEZVeUJQVWlCRFQwNUVTVlJKVDA1VElFOUdJRUZPV1NCTFNVNUVMQ0JsYVhSb1pYSWdaWGh3Y21WemN5QnZjaUJwYlhCc2FXVmtMbHh1SUNvZ1UyVmxJSFJvWlNCTWFXTmxibk5sSUdadmNpQjBhR1VnYzNCbFkybG1hV01nYkdGdVozVmhaMlVnWjI5MlpYSnVhVzVuSUhCbGNtMXBjM05wYjI1eklHRnVaRnh1SUNvZ2JHbHRhWFJoZEdsdmJuTWdkVzVrWlhJZ2RHaGxJRXhwWTJWdWMyVXVYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElFVjJaVzUwVEdsemRHVnVaWEpjYmlBcUlFQjBlWEJsWTJobFkydHpYRzRnS2k5Y2JseHVkbUZ5SUdWdGNIUjVSblZ1WTNScGIyNGdQU0J5WlhGMWFYSmxLRndpTGk5bGJYQjBlVVoxYm1OMGFXOXVYQ0lwTzF4dVhHNHZLaXBjYmlBcUlGVndjM1J5WldGdElIWmxjbk5wYjI0Z2IyWWdaWFpsYm5RZ2JHbHpkR1Z1WlhJdUlFUnZaWE1nYm05MElIUmhhMlVnYVc1MGJ5QmhZMk52ZFc1MElITndaV05wWm1salhHNGdLaUJ1WVhSMWNtVWdiMllnY0d4aGRHWnZjbTB1WEc0Z0tpOWNiblpoY2lCRmRtVnVkRXhwYzNSbGJtVnlJRDBnZTF4dUlDQXZLaXBjYmlBZ0lDb2dUR2x6ZEdWdUlIUnZJRVJQVFNCbGRtVnVkSE1nWkhWeWFXNW5JSFJvWlNCaWRXSmliR1VnY0doaGMyVXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3UkU5TlJYWmxiblJVWVhKblpYUjlJSFJoY21kbGRDQkVUMDBnWld4bGJXVnVkQ0IwYnlCeVpXZHBjM1JsY2lCc2FYTjBaVzVsY2lCdmJpNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdWMlpXNTBWSGx3WlNCRmRtVnVkQ0IwZVhCbExDQmxMbWN1SUNkamJHbGpheWNnYjNJZ0oyMXZkWE5sYjNabGNpY3VYRzRnSUNBcUlFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlHTmhiR3hpWVdOcklFTmhiR3hpWVdOcklHWjFibU4wYVc5dUxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0dlltcGxZM1I5SUU5aWFtVmpkQ0IzYVhSb0lHRWdZSEpsYlc5MlpXQWdiV1YwYUc5a0xseHVJQ0FnS2k5Y2JpQWdiR2x6ZEdWdU9pQm1kVzVqZEdsdmJpaDBZWEpuWlhRc0lHVjJaVzUwVkhsd1pTd2dZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQnBaaUFvZEdGeVoyVjBMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSXBJSHRjYmlBZ0lDQWdJSFJoY21kbGRDNWhaR1JGZG1WdWRFeHBjM1JsYm1WeUtHVjJaVzUwVkhsd1pTd2dZMkZzYkdKaFkyc3NJR1poYkhObEtUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lISmxiVzkyWlRvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdGeVoyVjBMbkpsYlc5MlpVVjJaVzUwVEdsemRHVnVaWElvWlhabGJuUlVlWEJsTENCallXeHNZbUZqYXl3Z1ptRnNjMlVwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOU8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RHRnlaMlYwTG1GMGRHRmphRVYyWlc1MEtTQjdYRzRnSUNBZ0lDQjBZWEpuWlhRdVlYUjBZV05vUlhabGJuUW9KMjl1SnlBcklHVjJaVzUwVkhsd1pTd2dZMkZzYkdKaFkyc3BPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lDQWdjbVZ0YjNabE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNCMFlYSm5aWFF1WkdWMFlXTm9SWFpsYm5Rb0oyOXVKeUFySUdWMlpXNTBWSGx3WlN3Z1kyRnNiR0poWTJzcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVEdsemRHVnVJSFJ2SUVSUFRTQmxkbVZ1ZEhNZ1pIVnlhVzVuSUhSb1pTQmpZWEIwZFhKbElIQm9ZWE5sTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVYyWlc1MFZHRnlaMlYwZlNCMFlYSm5aWFFnUkU5TklHVnNaVzFsYm5RZ2RHOGdjbVZuYVhOMFpYSWdiR2x6ZEdWdVpYSWdiMjR1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmxkbVZ1ZEZSNWNHVWdSWFpsYm5RZ2RIbHdaU3dnWlM1bkxpQW5ZMnhwWTJzbklHOXlJQ2R0YjNWelpXOTJaWEluTGx4dUlDQWdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVmU0JqWVd4c1ltRmpheUJEWVd4c1ltRmpheUJtZFc1amRHbHZiaTVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdiMkpxWldOMGZTQlBZbXBsWTNRZ2QybDBhQ0JoSUdCeVpXMXZkbVZnSUcxbGRHaHZaQzVjYmlBZ0lDb3ZYRzRnSUdOaGNIUjFjbVU2SUdaMWJtTjBhVzl1S0hSaGNtZGxkQ3dnWlhabGJuUlVlWEJsTENCallXeHNZbUZqYXlrZ2UxeHVJQ0FnSUdsbUlDZ2hkR0Z5WjJWMExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJcElIdGNiaUFnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2loY2JpQWdJQ0FnSUNBZ0lDQW5RWFIwWlcxd2RHVmtJSFJ2SUd4cGMzUmxiaUIwYnlCbGRtVnVkSE1nWkhWeWFXNW5JSFJvWlNCallYQjBkWEpsSUhCb1lYTmxJRzl1SUdFZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjJKeWIzZHpaWElnZEdoaGRDQmtiMlZ6SUc1dmRDQnpkWEJ3YjNKMElIUm9aU0JqWVhCMGRYSmxJSEJvWVhObExpQlpiM1Z5SUdGd2NHeHBZMkYwYVc5dUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkM2FXeHNJRzV2ZENCeVpXTmxhWFpsSUhOdmJXVWdaWFpsYm5SekxpZGNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJSEpsYlc5MlpUb2daVzF3ZEhsR2RXNWpkR2x2Ymx4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdkR0Z5WjJWMExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb1pYWmxiblJVZVhCbExDQmpZV3hzWW1GamF5d2dkSEoxWlNrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnSUNCeVpXMXZkbVU2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJoY21kbGRDNXlaVzF2ZG1WRmRtVnVkRXhwYzNSbGJtVnlLR1YyWlc1MFZIbHdaU3dnWTJGc2JHSmhZMnNzSUhSeWRXVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNCeVpXZHBjM1JsY2tSbFptRjFiSFE2SUdaMWJtTjBhVzl1S0NrZ2UzMWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1JYWmxiblJNYVhOMFpXNWxjanRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV2ZW50UGx1Z2luSHViXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRQbHVnaW5SZWdpc3RyeSA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luUmVnaXN0cnlcIik7XG52YXIgRXZlbnRQbHVnaW5VdGlscyA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luVXRpbHNcIik7XG5cbnZhciBhY2N1bXVsYXRlSW50byA9IHJlcXVpcmUoXCIuL2FjY3VtdWxhdGVJbnRvXCIpO1xudmFyIGZvckVhY2hBY2N1bXVsYXRlZCA9IHJlcXVpcmUoXCIuL2ZvckVhY2hBY2N1bXVsYXRlZFwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogSW50ZXJuYWwgc3RvcmUgZm9yIGV2ZW50IGxpc3RlbmVyc1xuICovXG52YXIgbGlzdGVuZXJCYW5rID0ge307XG5cbi8qKlxuICogSW50ZXJuYWwgcXVldWUgb2YgZXZlbnRzIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZCB0aGVpciBkaXNwYXRjaGVzIGFuZCBhcmVcbiAqIHdhaXRpbmcgdG8gaGF2ZSB0aGVpciBkaXNwYXRjaGVzIGV4ZWN1dGVkLlxuICovXG52YXIgZXZlbnRRdWV1ZSA9IG51bGw7XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBhbmQgcmVsZWFzZXMgaXQgYmFjayBpbnRvIHRoZSBwb29sLCB1bmxlc3MgcGVyc2lzdGVudC5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGV2ZW50IFN5bnRoZXRpYyBldmVudCB0byBiZSBkaXNwYXRjaGVkLlxuICogQHByaXZhdGVcbiAqL1xudmFyIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIGlmIChldmVudCkge1xuICAgIHZhciBleGVjdXRlRGlzcGF0Y2ggPSBFdmVudFBsdWdpblV0aWxzLmV4ZWN1dGVEaXNwYXRjaDtcbiAgICAvLyBQbHVnaW5zIGNhbiBwcm92aWRlIGN1c3RvbSBiZWhhdmlvciB3aGVuIGRpc3BhdGNoaW5nIGV2ZW50cy5cbiAgICB2YXIgUGx1Z2luTW9kdWxlID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5nZXRQbHVnaW5Nb2R1bGVGb3JFdmVudChldmVudCk7XG4gICAgaWYgKFBsdWdpbk1vZHVsZSAmJiBQbHVnaW5Nb2R1bGUuZXhlY3V0ZURpc3BhdGNoKSB7XG4gICAgICBleGVjdXRlRGlzcGF0Y2ggPSBQbHVnaW5Nb2R1bGUuZXhlY3V0ZURpc3BhdGNoO1xuICAgIH1cbiAgICBFdmVudFBsdWdpblV0aWxzLmV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCwgZXhlY3V0ZURpc3BhdGNoKTtcblxuICAgIGlmICghZXZlbnQuaXNQZXJzaXN0ZW50KCkpIHtcbiAgICAgIGV2ZW50LmNvbnN0cnVjdG9yLnJlbGVhc2UoZXZlbnQpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiAtIGBJbnN0YW5jZUhhbmRsZWA6IFtyZXF1aXJlZF0gTW9kdWxlIHRoYXQgcGVyZm9ybXMgbG9naWNhbCB0cmF2ZXJzYWxzIG9mIERPTVxuICogICBoaWVyYXJjaHkgZ2l2ZW4gaWRzIG9mIHRoZSBsb2dpY2FsIERPTSBlbGVtZW50cyBpbnZvbHZlZC5cbiAqL1xudmFyIEluc3RhbmNlSGFuZGxlID0gbnVsbDtcblxuZnVuY3Rpb24gdmFsaWRhdGVJbnN0YW5jZUhhbmRsZSgpIHtcbiAgdmFyIHZhbGlkID1cbiAgICBJbnN0YW5jZUhhbmRsZSAmJlxuICAgIEluc3RhbmNlSGFuZGxlLnRyYXZlcnNlVHdvUGhhc2UgJiZcbiAgICBJbnN0YW5jZUhhbmRsZS50cmF2ZXJzZUVudGVyTGVhdmU7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgdmFsaWQsXG4gICAgJ0luc3RhbmNlSGFuZGxlIG5vdCBpbmplY3RlZCBiZWZvcmUgdXNlISdcbiAgKSA6IGludmFyaWFudCh2YWxpZCkpO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgZXZlbnQgcGx1Z2lucyB0byBiZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQuXG4gKlxuICogRXZlbnQgcGx1Z2lucyBjYW4gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIGBleHRyYWN0RXZlbnRzYCB7ZnVuY3Rpb24oc3RyaW5nLCBET01FdmVudFRhcmdldCwgc3RyaW5nLCBvYmplY3QpOiAqfVxuICogICAgIFJlcXVpcmVkLiBXaGVuIGEgdG9wLWxldmVsIGV2ZW50IGlzIGZpcmVkLCB0aGlzIG1ldGhvZCBpcyBleHBlY3RlZCB0b1xuICogICAgIGV4dHJhY3Qgc3ludGhldGljIGV2ZW50cyB0aGF0IHdpbGwgaW4gdHVybiBiZSBxdWV1ZWQgYW5kIGRpc3BhdGNoZWQuXG4gKlxuICogICBgZXZlbnRUeXBlc2Age29iamVjdH1cbiAqICAgICBPcHRpb25hbCwgcGx1Z2lucyB0aGF0IGZpcmUgZXZlbnRzIG11c3QgcHVibGlzaCBhIG1hcHBpbmcgb2YgcmVnaXN0cmF0aW9uXG4gKiAgICAgbmFtZXMgdGhhdCBhcmUgdXNlZCB0byByZWdpc3RlciBsaXN0ZW5lcnMuIFZhbHVlcyBvZiB0aGlzIG1hcHBpbmcgbXVzdFxuICogICAgIGJlIG9iamVjdHMgdGhhdCBjb250YWluIGByZWdpc3RyYXRpb25OYW1lYCBvciBgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNgLlxuICpcbiAqICAgYGV4ZWN1dGVEaXNwYXRjaGAge2Z1bmN0aW9uKG9iamVjdCwgZnVuY3Rpb24sIHN0cmluZyl9XG4gKiAgICAgT3B0aW9uYWwsIGFsbG93cyBwbHVnaW5zIHRvIG92ZXJyaWRlIGhvdyBhbiBldmVudCBnZXRzIGRpc3BhdGNoZWQuIEJ5XG4gKiAgICAgZGVmYXVsdCwgdGhlIGxpc3RlbmVyIGlzIHNpbXBseSBpbnZva2VkLlxuICpcbiAqIEVhY2ggcGx1Z2luIHRoYXQgaXMgaW5qZWN0ZWQgaW50byBgRXZlbnRzUGx1Z2luSHViYCBpcyBpbW1lZGlhdGVseSBvcGVyYWJsZS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbnZhciBFdmVudFBsdWdpbkh1YiA9IHtcblxuICAvKipcbiAgICogTWV0aG9kcyBmb3IgaW5qZWN0aW5nIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIGluamVjdGlvbjoge1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IEluamVjdGVkTW91bnRcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgaW5qZWN0TW91bnQ6IEV2ZW50UGx1Z2luVXRpbHMuaW5qZWN0aW9uLmluamVjdE1vdW50LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IEluamVjdGVkSW5zdGFuY2VIYW5kbGVcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgaW5qZWN0SW5zdGFuY2VIYW5kbGU6IGZ1bmN0aW9uKEluamVjdGVkSW5zdGFuY2VIYW5kbGUpIHtcbiAgICAgIEluc3RhbmNlSGFuZGxlID0gSW5qZWN0ZWRJbnN0YW5jZUhhbmRsZTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgdmFsaWRhdGVJbnN0YW5jZUhhbmRsZSgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJbnN0YW5jZUhhbmRsZTogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIHZhbGlkYXRlSW5zdGFuY2VIYW5kbGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBJbnN0YW5jZUhhbmRsZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHthcnJheX0gSW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGluamVjdEV2ZW50UGx1Z2luT3JkZXI6IEV2ZW50UGx1Z2luUmVnaXN0cnkuaW5qZWN0RXZlbnRQbHVnaW5PcmRlcixcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBpbmplY3RlZE5hbWVzVG9QbHVnaW5zIE1hcCBmcm9tIG5hbWVzIHRvIHBsdWdpbiBtb2R1bGVzLlxuICAgICAqL1xuICAgIGluamVjdEV2ZW50UGx1Z2luc0J5TmFtZTogRXZlbnRQbHVnaW5SZWdpc3RyeS5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWVcblxuICB9LFxuXG4gIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlnczogRXZlbnRQbHVnaW5SZWdpc3RyeS5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MsXG5cbiAgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM6IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMsXG5cbiAgLyoqXG4gICAqIFN0b3JlcyBgbGlzdGVuZXJgIGF0IGBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV1baWRdYC4gSXMgaWRlbXBvdGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBET00gZWxlbWVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGNhbGxiYWNrIHRvIHN0b3JlLlxuICAgKi9cbiAgcHV0TGlzdGVuZXI6IGZ1bmN0aW9uKGlkLCByZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhbGlzdGVuZXIgfHwgdHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ0V4cGVjdGVkICVzIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IHR5cGUgJXMnLFxuICAgICAgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyXG4gICAgKSA6IGludmFyaWFudCghbGlzdGVuZXIgfHwgdHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSk7XG5cbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPVxuICAgICAgbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdIHx8IChsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV0gPSB7fSk7XG4gICAgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWVbaWRdID0gbGlzdGVuZXI7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICAgKi9cbiAgZ2V0TGlzdGVuZXI6IGZ1bmN0aW9uKGlkLCByZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgdmFyIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lID0gbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdO1xuICAgIHJldHVybiBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSAmJiBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtpZF07XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBsaXN0ZW5lciBmcm9tIHRoZSByZWdpc3RyYXRpb24gYmFuay5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBET00gZWxlbWVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICAgKi9cbiAgZGVsZXRlTGlzdGVuZXI6IGZ1bmN0aW9uKGlkLCByZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgdmFyIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lID0gbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdO1xuICAgIGlmIChiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgZGVsZXRlIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lW2lkXTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIGxpc3RlbmVycyBmb3IgdGhlIERPTSBlbGVtZW50IHdpdGggdGhlIHN1cHBsaWVkIElELlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIERPTSBlbGVtZW50LlxuICAgKi9cbiAgZGVsZXRlQWxsTGlzdGVuZXJzOiBmdW5jdGlvbihpZCkge1xuICAgIGZvciAodmFyIHJlZ2lzdHJhdGlvbk5hbWUgaW4gbGlzdGVuZXJCYW5rKSB7XG4gICAgICBkZWxldGUgbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdW2lkXTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFsbG93cyByZWdpc3RlcmVkIHBsdWdpbnMgYW4gb3Bwb3J0dW5pdHkgdG8gZXh0cmFjdCBldmVudHMgZnJvbSB0b3AtbGV2ZWxcbiAgICogbmF0aXZlIGJyb3dzZXIgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIGV2ZW50cztcbiAgICB2YXIgcGx1Z2lucyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2lucztcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBsdWdpbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAvLyBOb3QgZXZlcnkgcGx1Z2luIGluIHRoZSBvcmRlcmluZyBtYXkgYmUgbG9hZGVkIGF0IHJ1bnRpbWUuXG4gICAgICB2YXIgcG9zc2libGVQbHVnaW4gPSBwbHVnaW5zW2ldO1xuICAgICAgaWYgKHBvc3NpYmxlUGx1Z2luKSB7XG4gICAgICAgIHZhciBleHRyYWN0ZWRFdmVudHMgPSBwb3NzaWJsZVBsdWdpbi5leHRyYWN0RXZlbnRzKFxuICAgICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICAgICk7XG4gICAgICAgIGlmIChleHRyYWN0ZWRFdmVudHMpIHtcbiAgICAgICAgICBldmVudHMgPSBhY2N1bXVsYXRlSW50byhldmVudHMsIGV4dHJhY3RlZEV2ZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50cztcbiAgfSxcblxuICAvKipcbiAgICogRW5xdWV1ZXMgYSBzeW50aGV0aWMgZXZlbnQgdGhhdCBzaG91bGQgYmUgZGlzcGF0Y2hlZCB3aGVuXG4gICAqIGBwcm9jZXNzRXZlbnRRdWV1ZWAgaXMgaW52b2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBldmVudHMgQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKSB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgZXZlbnRRdWV1ZSA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50UXVldWUsIGV2ZW50cyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFsbCBzeW50aGV0aWMgZXZlbnRzIG9uIHRoZSBldmVudCBxdWV1ZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm9jZXNzRXZlbnRRdWV1ZTogZnVuY3Rpb24oKSB7XG4gICAgLy8gU2V0IGBldmVudFF1ZXVlYCB0byBudWxsIGJlZm9yZSBwcm9jZXNzaW5nIGl0IHNvIHRoYXQgd2UgY2FuIHRlbGwgaWYgbW9yZVxuICAgIC8vIGV2ZW50cyBnZXQgZW5xdWV1ZWQgd2hpbGUgcHJvY2Vzc2luZy5cbiAgICB2YXIgcHJvY2Vzc2luZ0V2ZW50UXVldWUgPSBldmVudFF1ZXVlO1xuICAgIGV2ZW50UXVldWUgPSBudWxsO1xuICAgIGZvckVhY2hBY2N1bXVsYXRlZChwcm9jZXNzaW5nRXZlbnRRdWV1ZSwgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIWV2ZW50UXVldWUsXG4gICAgICAncHJvY2Vzc0V2ZW50UXVldWUoKTogQWRkaXRpb25hbCBldmVudHMgd2VyZSBlbnF1ZXVlZCB3aGlsZSBwcm9jZXNzaW5nICcgK1xuICAgICAgJ2FuIGV2ZW50IHF1ZXVlLiBTdXBwb3J0IGZvciB0aGlzIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQuJ1xuICAgICkgOiBpbnZhcmlhbnQoIWV2ZW50UXVldWUpKTtcbiAgfSxcblxuICAvKipcbiAgICogVGhlc2UgYXJlIG5lZWRlZCBmb3IgdGVzdHMgb25seS4gRG8gbm90IHVzZSFcbiAgICovXG4gIF9fcHVyZ2U6IGZ1bmN0aW9uKCkge1xuICAgIGxpc3RlbmVyQmFuayA9IHt9O1xuICB9LFxuXG4gIF9fZ2V0TGlzdGVuZXJCYW5rOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbGlzdGVuZXJCYW5rO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRQbHVnaW5IdWI7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZSWFpsYm5SUWJIVm5hVzVJZFdJdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRmRtVnVkRkJzZFdkcGJraDFZbHh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUVWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rZ1BTQnlaWEYxYVhKbEtGd2lMaTlGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1WENJcE8xeHVkbUZ5SUVWMlpXNTBVR3gxWjJsdVZYUnBiSE1nUFNCeVpYRjFhWEpsS0Z3aUxpOUZkbVZ1ZEZCc2RXZHBibFYwYVd4elhDSXBPMXh1WEc1MllYSWdZV05qZFcxMWJHRjBaVWx1ZEc4Z1BTQnlaWEYxYVhKbEtGd2lMaTloWTJOMWJYVnNZWFJsU1c1MGIxd2lLVHRjYm5aaGNpQm1iM0pGWVdOb1FXTmpkVzExYkdGMFpXUWdQU0J5WlhGMWFYSmxLRndpTGk5bWIzSkZZV05vUVdOamRXMTFiR0YwWldSY0lpazdYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzR2S2lwY2JpQXFJRWx1ZEdWeWJtRnNJSE4wYjNKbElHWnZjaUJsZG1WdWRDQnNhWE4wWlc1bGNuTmNiaUFxTDF4dWRtRnlJR3hwYzNSbGJtVnlRbUZ1YXlBOUlIdDlPMXh1WEc0dktpcGNiaUFxSUVsdWRHVnlibUZzSUhGMVpYVmxJRzltSUdWMlpXNTBjeUIwYUdGMElHaGhkbVVnWVdOamRXMTFiR0YwWldRZ2RHaGxhWElnWkdsemNHRjBZMmhsY3lCaGJtUWdZWEpsWEc0Z0tpQjNZV2wwYVc1bklIUnZJR2hoZG1VZ2RHaGxhWElnWkdsemNHRjBZMmhsY3lCbGVHVmpkWFJsWkM1Y2JpQXFMMXh1ZG1GeUlHVjJaVzUwVVhWbGRXVWdQU0J1ZFd4c08xeHVYRzR2S2lwY2JpQXFJRVJwYzNCaGRHTm9aWE1nWVc0Z1pYWmxiblFnWVc1a0lISmxiR1ZoYzJWeklHbDBJR0poWTJzZ2FXNTBieUIwYUdVZ2NHOXZiQ3dnZFc1c1pYTnpJSEJsY25OcGMzUmxiblF1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0JsZG1WdWRDQlRlVzUwYUdWMGFXTWdaWFpsYm5RZ2RHOGdZbVVnWkdsemNHRjBZMmhsWkM1Y2JpQXFJRUJ3Y21sMllYUmxYRzRnS2k5Y2JuWmhjaUJsZUdWamRYUmxSR2x6Y0dGMFkyaGxjMEZ1WkZKbGJHVmhjMlVnUFNCbWRXNWpkR2x2YmlobGRtVnVkQ2tnZTF4dUlDQnBaaUFvWlhabGJuUXBJSHRjYmlBZ0lDQjJZWElnWlhobFkzVjBaVVJwYzNCaGRHTm9JRDBnUlhabGJuUlFiSFZuYVc1VmRHbHNjeTVsZUdWamRYUmxSR2x6Y0dGMFkyZzdYRzRnSUNBZ0x5OGdVR3gxWjJsdWN5QmpZVzRnY0hKdmRtbGtaU0JqZFhOMGIyMGdZbVZvWVhacGIzSWdkMmhsYmlCa2FYTndZWFJqYUdsdVp5QmxkbVZ1ZEhNdVhHNGdJQ0FnZG1GeUlGQnNkV2RwYmsxdlpIVnNaU0E5SUVWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rdVoyVjBVR3gxWjJsdVRXOWtkV3hsUm05eVJYWmxiblFvWlhabGJuUXBPMXh1SUNBZ0lHbG1JQ2hRYkhWbmFXNU5iMlIxYkdVZ0ppWWdVR3gxWjJsdVRXOWtkV3hsTG1WNFpXTjFkR1ZFYVhOd1lYUmphQ2tnZTF4dUlDQWdJQ0FnWlhobFkzVjBaVVJwYzNCaGRHTm9JRDBnVUd4MVoybHVUVzlrZFd4bExtVjRaV04xZEdWRWFYTndZWFJqYUR0Y2JpQWdJQ0I5WEc0Z0lDQWdSWFpsYm5SUWJIVm5hVzVWZEdsc2N5NWxlR1ZqZFhSbFJHbHpjR0YwWTJobGMwbHVUM0prWlhJb1pYWmxiblFzSUdWNFpXTjFkR1ZFYVhOd1lYUmphQ2s3WEc1Y2JpQWdJQ0JwWmlBb0lXVjJaVzUwTG1selVHVnljMmx6ZEdWdWRDZ3BLU0I3WEc0Z0lDQWdJQ0JsZG1WdWRDNWpiMjV6ZEhKMVkzUnZjaTV5Wld4bFlYTmxLR1YyWlc1MEtUdGNiaUFnSUNCOVhHNGdJSDFjYm4wN1hHNWNiaThxS2x4dUlDb2dMU0JnU1c1emRHRnVZMlZJWVc1a2JHVmdPaUJiY21WeGRXbHlaV1JkSUUxdlpIVnNaU0IwYUdGMElIQmxjbVp2Y20xeklHeHZaMmxqWVd3Z2RISmhkbVZ5YzJGc2N5QnZaaUJFVDAxY2JpQXFJQ0FnYUdsbGNtRnlZMmg1SUdkcGRtVnVJR2xrY3lCdlppQjBhR1VnYkc5bmFXTmhiQ0JFVDAwZ1pXeGxiV1Z1ZEhNZ2FXNTJiMngyWldRdVhHNGdLaTljYm5aaGNpQkpibk4wWVc1alpVaGhibVJzWlNBOUlHNTFiR3c3WEc1Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFNXNXpkR0Z1WTJWSVlXNWtiR1VvS1NCN1hHNGdJSFpoY2lCMllXeHBaQ0E5WEc0Z0lDQWdTVzV6ZEdGdVkyVklZVzVrYkdVZ0ppWmNiaUFnSUNCSmJuTjBZVzVqWlVoaGJtUnNaUzUwY21GMlpYSnpaVlIzYjFCb1lYTmxJQ1ltWEc0Z0lDQWdTVzV6ZEdGdVkyVklZVzVrYkdVdWRISmhkbVZ5YzJWRmJuUmxja3hsWVhabE8xeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lIWmhiR2xrTEZ4dUlDQWdJQ2RKYm5OMFlXNWpaVWhoYm1Sc1pTQnViM1FnYVc1cVpXTjBaV1FnWW1WbWIzSmxJSFZ6WlNFblhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2RtRnNhV1FwS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJVYUdseklHbHpJR0VnZFc1cFptbGxaQ0JwYm5SbGNtWmhZMlVnWm05eUlHVjJaVzUwSUhCc2RXZHBibk1nZEc4Z1ltVWdhVzV6ZEdGc2JHVmtJR0Z1WkNCamIyNW1hV2QxY21Wa0xseHVJQ3BjYmlBcUlFVjJaVzUwSUhCc2RXZHBibk1nWTJGdUlHbHRjR3hsYldWdWRDQjBhR1VnWm05c2JHOTNhVzVuSUhCeWIzQmxjblJwWlhNNlhHNGdLbHh1SUNvZ0lDQmdaWGgwY21GamRFVjJaVzUwYzJBZ2UyWjFibU4wYVc5dUtITjBjbWx1Wnl3Z1JFOU5SWFpsYm5SVVlYSm5aWFFzSUhOMGNtbHVaeXdnYjJKcVpXTjBLVG9nS24xY2JpQXFJQ0FnSUNCU1pYRjFhWEpsWkM0Z1YyaGxiaUJoSUhSdmNDMXNaWFpsYkNCbGRtVnVkQ0JwY3lCbWFYSmxaQ3dnZEdocGN5QnRaWFJvYjJRZ2FYTWdaWGh3WldOMFpXUWdkRzljYmlBcUlDQWdJQ0JsZUhSeVlXTjBJSE41Ym5Sb1pYUnBZeUJsZG1WdWRITWdkR2hoZENCM2FXeHNJR2x1SUhSMWNtNGdZbVVnY1hWbGRXVmtJR0Z1WkNCa2FYTndZWFJqYUdWa0xseHVJQ3BjYmlBcUlDQWdZR1YyWlc1MFZIbHdaWE5nSUh0dlltcGxZM1I5WEc0Z0tpQWdJQ0FnVDNCMGFXOXVZV3dzSUhCc2RXZHBibk1nZEdoaGRDQm1hWEpsSUdWMlpXNTBjeUJ0ZFhOMElIQjFZbXhwYzJnZ1lTQnRZWEJ3YVc1bklHOW1JSEpsWjJsemRISmhkR2x2Ymx4dUlDb2dJQ0FnSUc1aGJXVnpJSFJvWVhRZ1lYSmxJSFZ6WldRZ2RHOGdjbVZuYVhOMFpYSWdiR2x6ZEdWdVpYSnpMaUJXWVd4MVpYTWdiMllnZEdocGN5QnRZWEJ3YVc1bklHMTFjM1JjYmlBcUlDQWdJQ0JpWlNCdlltcGxZM1J6SUhSb1lYUWdZMjl1ZEdGcGJpQmdjbVZuYVhOMGNtRjBhVzl1VG1GdFpXQWdiM0lnWUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpZQzVjYmlBcVhHNGdLaUFnSUdCbGVHVmpkWFJsUkdsemNHRjBZMmhnSUh0bWRXNWpkR2x2YmlodlltcGxZM1FzSUdaMWJtTjBhVzl1TENCemRISnBibWNwZlZ4dUlDb2dJQ0FnSUU5d2RHbHZibUZzTENCaGJHeHZkM01nY0d4MVoybHVjeUIwYnlCdmRtVnljbWxrWlNCb2IzY2dZVzRnWlhabGJuUWdaMlYwY3lCa2FYTndZWFJqYUdWa0xpQkNlVnh1SUNvZ0lDQWdJR1JsWm1GMWJIUXNJSFJvWlNCc2FYTjBaVzVsY2lCcGN5QnphVzF3YkhrZ2FXNTJiMnRsWkM1Y2JpQXFYRzRnS2lCRllXTm9JSEJzZFdkcGJpQjBhR0YwSUdseklHbHVhbVZqZEdWa0lHbHVkRzhnWUVWMlpXNTBjMUJzZFdkcGJraDFZbUFnYVhNZ2FXMXRaV1JwWVhSbGJIa2diM0JsY21GaWJHVXVYRzRnS2x4dUlDb2dRSEIxWW14cFkxeHVJQ292WEc1MllYSWdSWFpsYm5SUWJIVm5hVzVJZFdJZ1BTQjdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFMWxkR2h2WkhNZ1ptOXlJR2x1YW1WamRHbHVaeUJrWlhCbGJtUmxibU5wWlhNdVhHNGdJQ0FxTDF4dUlDQnBibXBsWTNScGIyNDZJSHRjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JKYm1wbFkzUmxaRTF2ZFc1MFhHNGdJQ0FnSUNvZ1FIQjFZbXhwWTF4dUlDQWdJQ0FxTDF4dUlDQWdJR2x1YW1WamRFMXZkVzUwT2lCRmRtVnVkRkJzZFdkcGJsVjBhV3h6TG1sdWFtVmpkR2x2Ymk1cGJtcGxZM1JOYjNWdWRDeGNibHh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQkpibXBsWTNSbFpFbHVjM1JoYm1ObFNHRnVaR3hsWEc0Z0lDQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0lDQXFMMXh1SUNBZ0lHbHVhbVZqZEVsdWMzUmhibU5sU0dGdVpHeGxPaUJtZFc1amRHbHZiaWhKYm1wbFkzUmxaRWx1YzNSaGJtTmxTR0Z1Wkd4bEtTQjdYRzRnSUNBZ0lDQkpibk4wWVc1alpVaGhibVJzWlNBOUlFbHVhbVZqZEdWa1NXNXpkR0Z1WTJWSVlXNWtiR1U3WEc0Z0lDQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0FnSUhaaGJHbGtZWFJsU1c1emRHRnVZMlZJWVc1a2JHVW9LVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlMRnh1WEc0Z0lDQWdaMlYwU1c1emRHRnVZMlZJWVc1a2JHVTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnSUNCMllXeHBaR0YwWlVsdWMzUmhibU5sU0dGdVpHeGxLQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdTVzV6ZEdGdVkyVklZVzVrYkdVN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlFQndZWEpoYlNCN1lYSnlZWGw5SUVsdWFtVmpkR1ZrUlhabGJuUlFiSFZuYVc1UGNtUmxjbHh1SUNBZ0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNBZ0tpOWNiaUFnSUNCcGJtcGxZM1JGZG1WdWRGQnNkV2RwYms5eVpHVnlPaUJGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1TG1sdWFtVmpkRVYyWlc1MFVHeDFaMmx1VDNKa1pYSXNYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdhVzVxWldOMFpXUk9ZVzFsYzFSdlVHeDFaMmx1Y3lCTllYQWdabkp2YlNCdVlXMWxjeUIwYnlCd2JIVm5hVzRnYlc5a2RXeGxjeTVjYmlBZ0lDQWdLaTljYmlBZ0lDQnBibXBsWTNSRmRtVnVkRkJzZFdkcGJuTkNlVTVoYldVNklFVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNua3VhVzVxWldOMFJYWmxiblJRYkhWbmFXNXpRbmxPWVcxbFhHNWNiaUFnZlN4Y2JseHVJQ0JsZG1WdWRFNWhiV1ZFYVhOd1lYUmphRU52Ym1acFozTTZJRVYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbmt1WlhabGJuUk9ZVzFsUkdsemNHRjBZMmhEYjI1bWFXZHpMRnh1WEc0Z0lISmxaMmx6ZEhKaGRHbHZiazVoYldWTmIyUjFiR1Z6T2lCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxuSmxaMmx6ZEhKaGRHbHZiazVoYldWTmIyUjFiR1Z6TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJUZEc5eVpYTWdZR3hwYzNSbGJtVnlZQ0JoZENCZ2JHbHpkR1Z1WlhKQ1lXNXJXM0psWjJsemRISmhkR2x2Yms1aGJXVmRXMmxrWFdBdUlFbHpJR2xrWlcxd2IzUmxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkpSQ0J2WmlCMGFHVWdSRTlOSUdWc1pXMWxiblF1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnlaV2RwYzNSeVlYUnBiMjVPWVcxbElFNWhiV1VnYjJZZ2JHbHpkR1Z1WlhJZ0tHVXVaeTRnWUc5dVEyeHBZMnRnS1M1Y2JpQWdJQ29nUUhCaGNtRnRJSHMvWm5WdVkzUnBiMjU5SUd4cGMzUmxibVZ5SUZSb1pTQmpZV3hzWW1GamF5QjBieUJ6ZEc5eVpTNWNiaUFnSUNvdlhHNGdJSEIxZEV4cGMzUmxibVZ5T2lCbWRXNWpkR2x2YmlocFpDd2djbVZuYVhOMGNtRjBhVzl1VG1GdFpTd2diR2x6ZEdWdVpYSXBJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lXeHBjM1JsYm1WeUlIeDhJSFI1Y0dWdlppQnNhWE4wWlc1bGNpQTlQVDBnSjJaMWJtTjBhVzl1Snl4Y2JpQWdJQ0FnSUNkRmVIQmxZM1JsWkNBbGN5QnNhWE4wWlc1bGNpQjBieUJpWlNCaElHWjFibU4wYVc5dUxDQnBibk4wWldGa0lHZHZkQ0IwZVhCbElDVnpKeXhjYmlBZ0lDQWdJSEpsWjJsemRISmhkR2x2Yms1aGJXVXNJSFI1Y0dWdlppQnNhWE4wWlc1bGNseHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9JV3hwYzNSbGJtVnlJSHg4SUhSNWNHVnZaaUJzYVhOMFpXNWxjaUE5UFQwZ0oyWjFibU4wYVc5dUp5a3BPMXh1WEc0Z0lDQWdkbUZ5SUdKaGJtdEdiM0pTWldkcGMzUnlZWFJwYjI1T1lXMWxJRDFjYmlBZ0lDQWdJR3hwYzNSbGJtVnlRbUZ1YTF0eVpXZHBjM1J5WVhScGIyNU9ZVzFsWFNCOGZDQW9iR2x6ZEdWdVpYSkNZVzVyVzNKbFoybHpkSEpoZEdsdmJrNWhiV1ZkSUQwZ2UzMHBPMXh1SUNBZ0lHSmhibXRHYjNKU1pXZHBjM1J5WVhScGIyNU9ZVzFsVzJsa1hTQTlJR3hwYzNSbGJtVnlPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1NVUWdiMllnZEdobElFUlBUU0JsYkdWdFpXNTBMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNCT1lXMWxJRzltSUd4cGMzUmxibVZ5SUNobExtY3VJR0J2YmtOc2FXTnJZQ2t1WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlejltZFc1amRHbHZibjBnVkdobElITjBiM0psWkNCallXeHNZbUZqYXk1Y2JpQWdJQ292WEc0Z0lHZGxkRXhwYzNSbGJtVnlPaUJtZFc1amRHbHZiaWhwWkN3Z2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNrZ2UxeHVJQ0FnSUhaaGNpQmlZVzVyUm05eVVtVm5hWE4wY21GMGFXOXVUbUZ0WlNBOUlHeHBjM1JsYm1WeVFtRnVhMXR5WldkcGMzUnlZWFJwYjI1T1lXMWxYVHRjYmlBZ0lDQnlaWFIxY200Z1ltRnVhMFp2Y2xKbFoybHpkSEpoZEdsdmJrNWhiV1VnSmlZZ1ltRnVhMFp2Y2xKbFoybHpkSEpoZEdsdmJrNWhiV1ZiYVdSZE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJFWld4bGRHVnpJR0VnYkdsemRHVnVaWElnWm5KdmJTQjBhR1VnY21WbmFYTjBjbUYwYVc5dUlHSmhibXN1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkpSQ0J2WmlCMGFHVWdSRTlOSUdWc1pXMWxiblF1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnlaV2RwYzNSeVlYUnBiMjVPWVcxbElFNWhiV1VnYjJZZ2JHbHpkR1Z1WlhJZ0tHVXVaeTRnWUc5dVEyeHBZMnRnS1M1Y2JpQWdJQ292WEc0Z0lHUmxiR1YwWlV4cGMzUmxibVZ5T2lCbWRXNWpkR2x2YmlocFpDd2djbVZuYVhOMGNtRjBhVzl1VG1GdFpTa2dlMXh1SUNBZ0lIWmhjaUJpWVc1clJtOXlVbVZuYVhOMGNtRjBhVzl1VG1GdFpTQTlJR3hwYzNSbGJtVnlRbUZ1YTF0eVpXZHBjM1J5WVhScGIyNU9ZVzFsWFR0Y2JpQWdJQ0JwWmlBb1ltRnVhMFp2Y2xKbFoybHpkSEpoZEdsdmJrNWhiV1VwSUh0Y2JpQWdJQ0FnSUdSbGJHVjBaU0JpWVc1clJtOXlVbVZuYVhOMGNtRjBhVzl1VG1GdFpWdHBaRjA3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCRVpXeGxkR1Z6SUdGc2JDQnNhWE4wWlc1bGNuTWdabTl5SUhSb1pTQkVUMDBnWld4bGJXVnVkQ0IzYVhSb0lIUm9aU0J6ZFhCd2JHbGxaQ0JKUkM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRWxFSUc5bUlIUm9aU0JFVDAwZ1pXeGxiV1Z1ZEM1Y2JpQWdJQ292WEc0Z0lHUmxiR1YwWlVGc2JFeHBjM1JsYm1WeWN6b2dablZ1WTNScGIyNG9hV1FwSUh0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJ5WldkcGMzUnlZWFJwYjI1T1lXMWxJR2x1SUd4cGMzUmxibVZ5UW1GdWF5a2dlMXh1SUNBZ0lDQWdaR1ZzWlhSbElHeHBjM1JsYm1WeVFtRnVhMXR5WldkcGMzUnlZWFJwYjI1T1lXMWxYVnRwWkYwN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkJiR3h2ZDNNZ2NtVm5hWE4wWlhKbFpDQndiSFZuYVc1eklHRnVJRzl3Y0c5eWRIVnVhWFI1SUhSdklHVjRkSEpoWTNRZ1pYWmxiblJ6SUdaeWIyMGdkRzl3TFd4bGRtVnNYRzRnSUNBcUlHNWhkR2wyWlNCaWNtOTNjMlZ5SUdWMlpXNTBjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhSdmNFeGxkbVZzVkhsd1pTQlNaV052Y21RZ1puSnZiU0JnUlhabGJuUkRiMjV6ZEdGdWRITmdMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVYyWlc1MFZHRnlaMlYwZlNCMGIzQk1aWFpsYkZSaGNtZGxkQ0JVYUdVZ2JHbHpkR1Z1YVc1bklHTnZiWEJ2Ym1WdWRDQnliMjkwSUc1dlpHVXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMGIzQk1aWFpsYkZSaGNtZGxkRWxFSUVsRUlHOW1JR0IwYjNCTVpYWmxiRlJoY21kbGRHQXVYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCdVlYUnBkbVZGZG1WdWRDQk9ZWFJwZG1VZ1luSnZkM05sY2lCbGRtVnVkQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdLbjBnUVc0Z1lXTmpkVzExYkdGMGFXOXVJRzltSUhONWJuUm9aWFJwWXlCbGRtVnVkSE11WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnWlhoMGNtRmpkRVYyWlc1MGN6b2dablZ1WTNScGIyNG9YRzRnSUNBZ0lDQjBiM0JNWlhabGJGUjVjR1VzWEc0Z0lDQWdJQ0IwYjNCTVpYWmxiRlJoY21kbGRDeGNiaUFnSUNBZ0lIUnZjRXhsZG1Wc1ZHRnlaMlYwU1VRc1hHNGdJQ0FnSUNCdVlYUnBkbVZGZG1WdWRDa2dlMXh1SUNBZ0lIWmhjaUJsZG1WdWRITTdYRzRnSUNBZ2RtRnlJSEJzZFdkcGJuTWdQU0JGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1TG5Cc2RXZHBibk03WEc0Z0lDQWdabTl5SUNoMllYSWdhU0E5SURBc0lHd2dQU0J3YkhWbmFXNXpMbXhsYm1kMGFEc2dhU0E4SUd3N0lHa3JLeWtnZTF4dUlDQWdJQ0FnTHk4Z1RtOTBJR1YyWlhKNUlIQnNkV2RwYmlCcGJpQjBhR1VnYjNKa1pYSnBibWNnYldGNUlHSmxJR3h2WVdSbFpDQmhkQ0J5ZFc1MGFXMWxMbHh1SUNBZ0lDQWdkbUZ5SUhCdmMzTnBZbXhsVUd4MVoybHVJRDBnY0d4MVoybHVjMXRwWFR0Y2JpQWdJQ0FnSUdsbUlDaHdiM056YVdKc1pWQnNkV2RwYmlrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnWlhoMGNtRmpkR1ZrUlhabGJuUnpJRDBnY0c5emMybGliR1ZRYkhWbmFXNHVaWGgwY21GamRFVjJaVzUwY3loY2JpQWdJQ0FnSUNBZ0lDQjBiM0JNWlhabGJGUjVjR1VzWEc0Z0lDQWdJQ0FnSUNBZ2RHOXdUR1YyWld4VVlYSm5aWFFzWEc0Z0lDQWdJQ0FnSUNBZ2RHOXdUR1YyWld4VVlYSm5aWFJKUkN4Y2JpQWdJQ0FnSUNBZ0lDQnVZWFJwZG1WRmRtVnVkRnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNCcFppQW9aWGgwY21GamRHVmtSWFpsYm5SektTQjdYRzRnSUNBZ0lDQWdJQ0FnWlhabGJuUnpJRDBnWVdOamRXMTFiR0YwWlVsdWRHOG9aWFpsYm5SekxDQmxlSFJ5WVdOMFpXUkZkbVZ1ZEhNcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJsZG1WdWRITTdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVWdWNYVmxkV1Z6SUdFZ2MzbHVkR2hsZEdsaklHVjJaVzUwSUhSb1lYUWdjMmh2ZFd4a0lHSmxJR1JwYzNCaGRHTm9aV1FnZDJobGJseHVJQ0FnS2lCZ2NISnZZMlZ6YzBWMlpXNTBVWFZsZFdWZ0lHbHpJR2x1ZG05clpXUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3S24wZ1pYWmxiblJ6SUVGdUlHRmpZM1Z0ZFd4aGRHbHZiaUJ2WmlCemVXNTBhR1YwYVdNZ1pYWmxiblJ6TGx4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUdWdWNYVmxkV1ZGZG1WdWRITTZJR1oxYm1OMGFXOXVLR1YyWlc1MGN5a2dlMXh1SUNBZ0lHbG1JQ2hsZG1WdWRITXBJSHRjYmlBZ0lDQWdJR1YyWlc1MFVYVmxkV1VnUFNCaFkyTjFiWFZzWVhSbFNXNTBieWhsZG1WdWRGRjFaWFZsTENCbGRtVnVkSE1wTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1JHbHpjR0YwWTJobGN5QmhiR3dnYzNsdWRHaGxkR2xqSUdWMlpXNTBjeUJ2YmlCMGFHVWdaWFpsYm5RZ2NYVmxkV1V1WEc0Z0lDQXFYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdjSEp2WTJWemMwVjJaVzUwVVhWbGRXVTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQzh2SUZObGRDQmdaWFpsYm5SUmRXVjFaV0FnZEc4Z2JuVnNiQ0JpWldadmNtVWdjSEp2WTJWemMybHVaeUJwZENCemJ5QjBhR0YwSUhkbElHTmhiaUIwWld4c0lHbG1JRzF2Y21WY2JpQWdJQ0F2THlCbGRtVnVkSE1nWjJWMElHVnVjWFZsZFdWa0lIZG9hV3hsSUhCeWIyTmxjM05wYm1jdVhHNGdJQ0FnZG1GeUlIQnliMk5sYzNOcGJtZEZkbVZ1ZEZGMVpYVmxJRDBnWlhabGJuUlJkV1YxWlR0Y2JpQWdJQ0JsZG1WdWRGRjFaWFZsSUQwZ2JuVnNiRHRjYmlBZ0lDQm1iM0pGWVdOb1FXTmpkVzExYkdGMFpXUW9jSEp2WTJWemMybHVaMFYyWlc1MFVYVmxkV1VzSUdWNFpXTjFkR1ZFYVhOd1lYUmphR1Z6UVc1a1VtVnNaV0Z6WlNrN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0ZsZG1WdWRGRjFaWFZsTEZ4dUlDQWdJQ0FnSjNCeWIyTmxjM05GZG1WdWRGRjFaWFZsS0NrNklFRmtaR2wwYVc5dVlXd2daWFpsYm5SeklIZGxjbVVnWlc1eGRXVjFaV1FnZDJocGJHVWdjSEp2WTJWemMybHVaeUFuSUN0Y2JpQWdJQ0FnSUNkaGJpQmxkbVZ1ZENCeGRXVjFaUzRnVTNWd2NHOXlkQ0JtYjNJZ2RHaHBjeUJvWVhNZ2JtOTBJSGxsZENCaVpXVnVJR2x0Y0d4bGJXVnVkR1ZrTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtDRmxkbVZ1ZEZGMVpYVmxLU2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGUm9aWE5sSUdGeVpTQnVaV1ZrWldRZ1ptOXlJSFJsYzNSeklHOXViSGt1SUVSdklHNXZkQ0IxYzJVaFhHNGdJQ0FxTDF4dUlDQmZYM0IxY21kbE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQnNhWE4wWlc1bGNrSmhibXNnUFNCN2ZUdGNiaUFnZlN4Y2JseHVJQ0JmWDJkbGRFeHBjM1JsYm1WeVFtRnVhem9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJR3hwYzNSbGJtVnlRbUZ1YXp0Y2JpQWdmVnh1WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRVYyWlc1MFVHeDFaMmx1U0hWaU8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFdmVudFBsdWdpblJlZ2lzdHJ5XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBJbmplY3RhYmxlIG9yZGVyaW5nIG9mIGV2ZW50IHBsdWdpbnMuXG4gKi9cbnZhciBFdmVudFBsdWdpbk9yZGVyID0gbnVsbDtcblxuLyoqXG4gKiBJbmplY3RhYmxlIG1hcHBpbmcgZnJvbSBuYW1lcyB0byBldmVudCBwbHVnaW4gbW9kdWxlcy5cbiAqL1xudmFyIG5hbWVzVG9QbHVnaW5zID0ge307XG5cbi8qKlxuICogUmVjb21wdXRlcyB0aGUgcGx1Z2luIGxpc3QgdXNpbmcgdGhlIGluamVjdGVkIHBsdWdpbnMgYW5kIHBsdWdpbiBvcmRlcmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpIHtcbiAgaWYgKCFFdmVudFBsdWdpbk9yZGVyKSB7XG4gICAgLy8gV2FpdCB1bnRpbCBhbiBgRXZlbnRQbHVnaW5PcmRlcmAgaXMgaW5qZWN0ZWQuXG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gbmFtZXNUb1BsdWdpbnMpIHtcbiAgICB2YXIgUGx1Z2luTW9kdWxlID0gbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV07XG4gICAgdmFyIHBsdWdpbkluZGV4ID0gRXZlbnRQbHVnaW5PcmRlci5pbmRleE9mKHBsdWdpbk5hbWUpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBwbHVnaW5JbmRleCA+IC0xLFxuICAgICAgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgZXZlbnQgcGx1Z2lucyB0aGF0IGRvIG5vdCBleGlzdCBpbiAnICtcbiAgICAgICd0aGUgcGx1Z2luIG9yZGVyaW5nLCBgJXNgLicsXG4gICAgICBwbHVnaW5OYW1lXG4gICAgKSA6IGludmFyaWFudChwbHVnaW5JbmRleCA+IC0xKSk7XG4gICAgaWYgKEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2luc1twbHVnaW5JbmRleF0pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgUGx1Z2luTW9kdWxlLmV4dHJhY3RFdmVudHMsXG4gICAgICAnRXZlbnRQbHVnaW5SZWdpc3RyeTogRXZlbnQgcGx1Z2lucyBtdXN0IGltcGxlbWVudCBhbiBgZXh0cmFjdEV2ZW50c2AgJyArXG4gICAgICAnbWV0aG9kLCBidXQgYCVzYCBkb2VzIG5vdC4nLFxuICAgICAgcGx1Z2luTmFtZVxuICAgICkgOiBpbnZhcmlhbnQoUGx1Z2luTW9kdWxlLmV4dHJhY3RFdmVudHMpKTtcbiAgICBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnNbcGx1Z2luSW5kZXhdID0gUGx1Z2luTW9kdWxlO1xuICAgIHZhciBwdWJsaXNoZWRFdmVudHMgPSBQbHVnaW5Nb2R1bGUuZXZlbnRUeXBlcztcbiAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcHVibGlzaGVkRXZlbnRzKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICBwdWJsaXNoRXZlbnRGb3JQbHVnaW4oXG4gICAgICAgICAgcHVibGlzaGVkRXZlbnRzW2V2ZW50TmFtZV0sXG4gICAgICAgICAgUGx1Z2luTW9kdWxlLFxuICAgICAgICAgIGV2ZW50TmFtZVxuICAgICAgICApLFxuICAgICAgICAnRXZlbnRQbHVnaW5SZWdpc3RyeTogRmFpbGVkIHRvIHB1Ymxpc2ggZXZlbnQgYCVzYCBmb3IgcGx1Z2luIGAlc2AuJyxcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBwbHVnaW5OYW1lXG4gICAgICApIDogaW52YXJpYW50KHB1Ymxpc2hFdmVudEZvclBsdWdpbihcbiAgICAgICAgcHVibGlzaGVkRXZlbnRzW2V2ZW50TmFtZV0sXG4gICAgICAgIFBsdWdpbk1vZHVsZSxcbiAgICAgICAgZXZlbnROYW1lXG4gICAgICApKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHVibGlzaGVzIGFuIGV2ZW50IHNvIHRoYXQgaXQgY2FuIGJlIGRpc3BhdGNoZWQgYnkgdGhlIHN1cHBsaWVkIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgRGlzcGF0Y2ggY29uZmlndXJhdGlvbiBmb3IgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtvYmplY3R9IFBsdWdpbk1vZHVsZSBQbHVnaW4gcHVibGlzaGluZyB0aGUgZXZlbnQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCB3YXMgc3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHB1Ymxpc2hFdmVudEZvclBsdWdpbihkaXNwYXRjaENvbmZpZywgUGx1Z2luTW9kdWxlLCBldmVudE5hbWUpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAhRXZlbnRQbHVnaW5SZWdpc3RyeS5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSxcbiAgICAnRXZlbnRQbHVnaW5IdWI6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lICcgK1xuICAgICdldmVudCBuYW1lLCBgJXNgLicsXG4gICAgZXZlbnROYW1lXG4gICkgOiBpbnZhcmlhbnQoIUV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpKTtcbiAgRXZlbnRQbHVnaW5SZWdpc3RyeS5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3NbZXZlbnROYW1lXSA9IGRpc3BhdGNoQ29uZmlnO1xuXG4gIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyA9IGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO1xuICBpZiAocGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICBmb3IgKHZhciBwaGFzZU5hbWUgaW4gcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICAgIGlmIChwaGFzZWRSZWdpc3RyYXRpb25OYW1lcy5oYXNPd25Qcm9wZXJ0eShwaGFzZU5hbWUpKSB7XG4gICAgICAgIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lID0gcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcGhhc2VOYW1lXTtcbiAgICAgICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUoXG4gICAgICAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZSxcbiAgICAgICAgICBQbHVnaW5Nb2R1bGUsXG4gICAgICAgICAgZXZlbnROYW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICBwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZShcbiAgICAgIGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICBQbHVnaW5Nb2R1bGUsXG4gICAgICBldmVudE5hbWVcbiAgICApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBQdWJsaXNoZXMgYSByZWdpc3RyYXRpb24gbmFtZSB0aGF0IGlzIHVzZWQgdG8gaWRlbnRpZnkgZGlzcGF0Y2hlZCBldmVudHMgYW5kXG4gKiBjYW4gYmUgdXNlZCB3aXRoIGBFdmVudFBsdWdpbkh1Yi5wdXRMaXN0ZW5lcmAgdG8gcmVnaXN0ZXIgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIFJlZ2lzdHJhdGlvbiBuYW1lIHRvIGFkZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBQbHVnaW5Nb2R1bGUgUGx1Z2luIHB1Ymxpc2hpbmcgdGhlIGV2ZW50LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUocmVnaXN0cmF0aW9uTmFtZSwgUGx1Z2luTW9kdWxlLCBldmVudE5hbWUpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAhRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSxcbiAgICAnRXZlbnRQbHVnaW5IdWI6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lICcgK1xuICAgICdyZWdpc3RyYXRpb24gbmFtZSwgYCVzYC4nLFxuICAgIHJlZ2lzdHJhdGlvbk5hbWVcbiAgKSA6IGludmFyaWFudCghRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSkpO1xuICBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdID0gUGx1Z2luTW9kdWxlO1xuICBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPVxuICAgIFBsdWdpbk1vZHVsZS5ldmVudFR5cGVzW2V2ZW50TmFtZV0uZGVwZW5kZW5jaWVzO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBwbHVnaW5zIHNvIHRoYXQgdGhleSBjYW4gZXh0cmFjdCBhbmQgZGlzcGF0Y2ggZXZlbnRzLlxuICpcbiAqIEBzZWUge0V2ZW50UGx1Z2luSHVifVxuICovXG52YXIgRXZlbnRQbHVnaW5SZWdpc3RyeSA9IHtcblxuICAvKipcbiAgICogT3JkZXJlZCBsaXN0IG9mIGluamVjdGVkIHBsdWdpbnMuXG4gICAqL1xuICBwbHVnaW5zOiBbXSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIGV2ZW50IG5hbWUgdG8gZGlzcGF0Y2ggY29uZmlnXG4gICAqL1xuICBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3M6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gcGx1Z2luIG1vZHVsZVxuICAgKi9cbiAgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gZXZlbnQgbmFtZVxuICAgKi9cbiAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczoge30sXG5cbiAgLyoqXG4gICAqIEluamVjdHMgYW4gb3JkZXJpbmcgb2YgcGx1Z2lucyAoYnkgcGx1Z2luIG5hbWUpLiBUaGlzIGFsbG93cyB0aGUgb3JkZXJpbmdcbiAgICogdG8gYmUgZGVjb3VwbGVkIGZyb20gaW5qZWN0aW9uIG9mIHRoZSBhY3R1YWwgcGx1Z2lucyBzbyB0aGF0IG9yZGVyaW5nIGlzXG4gICAqIGFsd2F5cyBkZXRlcm1pbmlzdGljIHJlZ2FyZGxlc3Mgb2YgcGFja2FnaW5nLCBvbi10aGUtZmx5IGluamVjdGlvbiwgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5fSBJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXJcbiAgICogQGludGVybmFsXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbk9yZGVyfVxuICAgKi9cbiAgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcjogZnVuY3Rpb24oSW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICFFdmVudFBsdWdpbk9yZGVyLFxuICAgICAgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgZXZlbnQgcGx1Z2luIG9yZGVyaW5nIG1vcmUgdGhhbiAnICtcbiAgICAgICdvbmNlLiBZb3UgYXJlIGxpa2VseSB0cnlpbmcgdG8gbG9hZCBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QuJ1xuICAgICkgOiBpbnZhcmlhbnQoIUV2ZW50UGx1Z2luT3JkZXIpKTtcbiAgICAvLyBDbG9uZSB0aGUgb3JkZXJpbmcgc28gaXQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IG11dGF0ZWQuXG4gICAgRXZlbnRQbHVnaW5PcmRlciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEluamVjdGVkRXZlbnRQbHVnaW5PcmRlcik7XG4gICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbiAgfSxcblxuICAvKipcbiAgICogSW5qZWN0cyBwbHVnaW5zIHRvIGJlIHVzZWQgYnkgYEV2ZW50UGx1Z2luSHViYC4gVGhlIHBsdWdpbiBuYW1lcyBtdXN0IGJlXG4gICAqIGluIHRoZSBvcmRlcmluZyBpbmplY3RlZCBieSBgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcmAuXG4gICAqXG4gICAqIFBsdWdpbnMgY2FuIGJlIGluamVjdGVkIGFzIHBhcnQgb2YgcGFnZSBpbml0aWFsaXphdGlvbiBvciBvbi10aGUtZmx5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0byBwbHVnaW4gbW9kdWxlcy5cbiAgICogQGludGVybmFsXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWV9XG4gICAqL1xuICBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6IGZ1bmN0aW9uKGluamVjdGVkTmFtZXNUb1BsdWdpbnMpIHtcbiAgICB2YXIgaXNPcmRlcmluZ0RpcnR5ID0gZmFsc2U7XG4gICAgZm9yICh2YXIgcGx1Z2luTmFtZSBpbiBpbmplY3RlZE5hbWVzVG9QbHVnaW5zKSB7XG4gICAgICBpZiAoIWluamVjdGVkTmFtZXNUb1BsdWdpbnMuaGFzT3duUHJvcGVydHkocGx1Z2luTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgUGx1Z2luTW9kdWxlID0gaW5qZWN0ZWROYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXTtcbiAgICAgIGlmICghbmFtZXNUb1BsdWdpbnMuaGFzT3duUHJvcGVydHkocGx1Z2luTmFtZSkgfHxcbiAgICAgICAgICBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSAhPT0gUGx1Z2luTW9kdWxlKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgIW5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdLFxuICAgICAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IHR3byBkaWZmZXJlbnQgZXZlbnQgcGx1Z2lucyAnICtcbiAgICAgICAgICAndXNpbmcgdGhlIHNhbWUgbmFtZSwgYCVzYC4nLFxuICAgICAgICAgIHBsdWdpbk5hbWVcbiAgICAgICAgKSA6IGludmFyaWFudCghbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0pKTtcbiAgICAgICAgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0gPSBQbHVnaW5Nb2R1bGU7XG4gICAgICAgIGlzT3JkZXJpbmdEaXJ0eSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc09yZGVyaW5nRGlydHkpIHtcbiAgICAgIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCB0aGUgcGx1Z2luIGZvciB0aGUgc3VwcGxpZWQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBBIHN5bnRoZXRpYyBldmVudC5cbiAgICogQHJldHVybiB7P29iamVjdH0gVGhlIHBsdWdpbiB0aGF0IGNyZWF0ZWQgdGhlIHN1cHBsaWVkIGV2ZW50LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFBsdWdpbk1vZHVsZUZvckV2ZW50OiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBkaXNwYXRjaENvbmZpZyA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnO1xuICAgIGlmIChkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgICByZXR1cm4gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tcbiAgICAgICAgZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZVxuICAgICAgXSB8fCBudWxsO1xuICAgIH1cbiAgICBmb3IgKHZhciBwaGFzZSBpbiBkaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgICAgaWYgKCFkaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcy5oYXNPd25Qcm9wZXJ0eShwaGFzZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgUGx1Z2luTW9kdWxlID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tcbiAgICAgICAgZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcGhhc2VdXG4gICAgICBdO1xuICAgICAgaWYgKFBsdWdpbk1vZHVsZSkge1xuICAgICAgICByZXR1cm4gUGx1Z2luTW9kdWxlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogRXhwb3NlZCBmb3IgdW5pdCB0ZXN0aW5nLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc2V0RXZlbnRQbHVnaW5zOiBmdW5jdGlvbigpIHtcbiAgICBFdmVudFBsdWdpbk9yZGVyID0gbnVsbDtcbiAgICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIG5hbWVzVG9QbHVnaW5zKSB7XG4gICAgICBpZiAobmFtZXNUb1BsdWdpbnMuaGFzT3duUHJvcGVydHkocGx1Z2luTmFtZSkpIHtcbiAgICAgICAgZGVsZXRlIG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnMubGVuZ3RoID0gMDtcblxuICAgIHZhciBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncztcbiAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzKSB7XG4gICAgICBpZiAoZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcbiAgICAgICAgZGVsZXRlIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlnc1tldmVudE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWdpc3RyYXRpb25OYW1lTW9kdWxlcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM7XG4gICAgZm9yICh2YXIgcmVnaXN0cmF0aW9uTmFtZSBpbiByZWdpc3RyYXRpb25OYW1lTW9kdWxlcykge1xuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHJlZ2lzdHJhdGlvbk5hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSByZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNVhHNGdLaUJBZEhsd1pXTm9aV05yY3lCemRHRjBhV010YjI1c2VWeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYmx4dUx5b3FYRzRnS2lCSmJtcGxZM1JoWW14bElHOXlaR1Z5YVc1bklHOW1JR1YyWlc1MElIQnNkV2RwYm5NdVhHNGdLaTljYm5aaGNpQkZkbVZ1ZEZCc2RXZHBiazl5WkdWeUlEMGdiblZzYkR0Y2JseHVMeW9xWEc0Z0tpQkpibXBsWTNSaFlteGxJRzFoY0hCcGJtY2dabkp2YlNCdVlXMWxjeUIwYnlCbGRtVnVkQ0J3YkhWbmFXNGdiVzlrZFd4bGN5NWNiaUFxTDF4dWRtRnlJRzVoYldWelZHOVFiSFZuYVc1eklEMGdlMzA3WEc1Y2JpOHFLbHh1SUNvZ1VtVmpiMjF3ZFhSbGN5QjBhR1VnY0d4MVoybHVJR3hwYzNRZ2RYTnBibWNnZEdobElHbHVhbVZqZEdWa0lIQnNkV2RwYm5NZ1lXNWtJSEJzZFdkcGJpQnZjbVJsY21sdVp5NWNiaUFxWEc0Z0tpQkFjSEpwZG1GMFpWeHVJQ292WEc1bWRXNWpkR2x2YmlCeVpXTnZiWEIxZEdWUWJIVm5hVzVQY21SbGNtbHVaeWdwSUh0Y2JpQWdhV1lnS0NGRmRtVnVkRkJzZFdkcGJrOXlaR1Z5S1NCN1hHNGdJQ0FnTHk4Z1YyRnBkQ0IxYm5ScGJDQmhiaUJnUlhabGJuUlFiSFZuYVc1UGNtUmxjbUFnYVhNZ2FXNXFaV04wWldRdVhHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNGdJR1p2Y2lBb2RtRnlJSEJzZFdkcGJrNWhiV1VnYVc0Z2JtRnRaWE5VYjFCc2RXZHBibk1wSUh0Y2JpQWdJQ0IyWVhJZ1VHeDFaMmx1VFc5a2RXeGxJRDBnYm1GdFpYTlViMUJzZFdkcGJuTmJjR3gxWjJsdVRtRnRaVjA3WEc0Z0lDQWdkbUZ5SUhCc2RXZHBia2x1WkdWNElEMGdSWFpsYm5SUWJIVm5hVzVQY21SbGNpNXBibVJsZUU5bUtIQnNkV2RwYms1aGJXVXBPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCd2JIVm5hVzVKYm1SbGVDQStJQzB4TEZ4dUlDQWdJQ0FnSjBWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rNklFTmhibTV2ZENCcGJtcGxZM1FnWlhabGJuUWdjR3gxWjJsdWN5QjBhR0YwSUdSdklHNXZkQ0JsZUdsemRDQnBiaUFuSUN0Y2JpQWdJQ0FnSUNkMGFHVWdjR3gxWjJsdUlHOXlaR1Z5YVc1bkxDQmdKWE5nTGljc1hHNGdJQ0FnSUNCd2JIVm5hVzVPWVcxbFhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHdiSFZuYVc1SmJtUmxlQ0ErSUMweEtTazdYRzRnSUNBZ2FXWWdLRVYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbmt1Y0d4MVoybHVjMXR3YkhWbmFXNUpibVJsZUYwcElIdGNiaUFnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUgxY2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdVR3gxWjJsdVRXOWtkV3hsTG1WNGRISmhZM1JGZG1WdWRITXNYRzRnSUNBZ0lDQW5SWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllVG9nUlhabGJuUWdjR3gxWjJsdWN5QnRkWE4wSUdsdGNHeGxiV1Z1ZENCaGJpQmdaWGgwY21GamRFVjJaVzUwYzJBZ0p5QXJYRzRnSUNBZ0lDQW5iV1YwYUc5a0xDQmlkWFFnWUNWellDQmtiMlZ6SUc1dmRDNG5MRnh1SUNBZ0lDQWdjR3gxWjJsdVRtRnRaVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvVUd4MVoybHVUVzlrZFd4bExtVjRkSEpoWTNSRmRtVnVkSE1wS1R0Y2JpQWdJQ0JGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1TG5Cc2RXZHBibk5iY0d4MVoybHVTVzVrWlhoZElEMGdVR3gxWjJsdVRXOWtkV3hsTzF4dUlDQWdJSFpoY2lCd2RXSnNhWE5vWldSRmRtVnVkSE1nUFNCUWJIVm5hVzVOYjJSMWJHVXVaWFpsYm5SVWVYQmxjenRjYmlBZ0lDQm1iM0lnS0haaGNpQmxkbVZ1ZEU1aGJXVWdhVzRnY0hWaWJHbHphR1ZrUlhabGJuUnpLU0I3WEc0Z0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJQ0J3ZFdKc2FYTm9SWFpsYm5SR2IzSlFiSFZuYVc0b1hHNGdJQ0FnSUNBZ0lDQWdjSFZpYkdsemFHVmtSWFpsYm5SelcyVjJaVzUwVG1GdFpWMHNYRzRnSUNBZ0lDQWdJQ0FnVUd4MVoybHVUVzlrZFd4bExGeHVJQ0FnSUNBZ0lDQWdJR1YyWlc1MFRtRnRaVnh1SUNBZ0lDQWdJQ0FwTEZ4dUlDQWdJQ0FnSUNBblJYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVUb2dSbUZwYkdWa0lIUnZJSEIxWW14cGMyZ2daWFpsYm5RZ1lDVnpZQ0JtYjNJZ2NHeDFaMmx1SUdBbGMyQXVKeXhjYmlBZ0lDQWdJQ0FnWlhabGJuUk9ZVzFsTEZ4dUlDQWdJQ0FnSUNCd2JIVm5hVzVPWVcxbFhHNGdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLSEIxWW14cGMyaEZkbVZ1ZEVadmNsQnNkV2RwYmloY2JpQWdJQ0FnSUNBZ2NIVmliR2x6YUdWa1JYWmxiblJ6VzJWMlpXNTBUbUZ0WlYwc1hHNGdJQ0FnSUNBZ0lGQnNkV2RwYmsxdlpIVnNaU3hjYmlBZ0lDQWdJQ0FnWlhabGJuUk9ZVzFsWEc0Z0lDQWdJQ0FwS1NrN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VIVmliR2x6YUdWeklHRnVJR1YyWlc1MElITnZJSFJvWVhRZ2FYUWdZMkZ1SUdKbElHUnBjM0JoZEdOb1pXUWdZbmtnZEdobElITjFjSEJzYVdWa0lIQnNkV2RwYmk1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnWkdsemNHRjBZMmhEYjI1bWFXY2dSR2x6Y0dGMFkyZ2dZMjl1Wm1sbmRYSmhkR2x2YmlCbWIzSWdkR2hsSUdWMlpXNTBMbHh1SUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUZCc2RXZHBiazF2WkhWc1pTQlFiSFZuYVc0Z2NIVmliR2x6YUdsdVp5QjBhR1VnWlhabGJuUXVYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlNCVWNuVmxJR2xtSUhSb1pTQmxkbVZ1ZENCM1lYTWdjM1ZqWTJWemMyWjFiR3g1SUhCMVlteHBjMmhsWkM1Y2JpQXFJRUJ3Y21sMllYUmxYRzRnS2k5Y2JtWjFibU4wYVc5dUlIQjFZbXhwYzJoRmRtVnVkRVp2Y2xCc2RXZHBiaWhrYVhOd1lYUmphRU52Ym1acFp5d2dVR3gxWjJsdVRXOWtkV3hsTENCbGRtVnVkRTVoYldVcElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWhSWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllUzVsZG1WdWRFNWhiV1ZFYVhOd1lYUmphRU52Ym1acFozTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb1pYWmxiblJPWVcxbEtTeGNiaUFnSUNBblJYWmxiblJRYkhWbmFXNUlkV0k2SUUxdmNtVWdkR2hoYmlCdmJtVWdjR3gxWjJsdUlHRjBkR1Z0Y0hSbFpDQjBieUJ3ZFdKc2FYTm9JSFJvWlNCellXMWxJQ2NnSzF4dUlDQWdJQ2RsZG1WdWRDQnVZVzFsTENCZ0pYTmdMaWNzWEc0Z0lDQWdaWFpsYm5ST1lXMWxYRzRnSUNrZ09pQnBiblpoY21saGJuUW9JVVYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbmt1WlhabGJuUk9ZVzFsUkdsemNHRjBZMmhEYjI1bWFXZHpMbWhoYzA5M2JsQnliM0JsY25SNUtHVjJaVzUwVG1GdFpTa3BLVHRjYmlBZ1JYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTNWxkbVZ1ZEU1aGJXVkVhWE53WVhSamFFTnZibVpwWjNOYlpYWmxiblJPWVcxbFhTQTlJR1JwYzNCaGRHTm9RMjl1Wm1sbk8xeHVYRzRnSUhaaGNpQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3lBOUlHUnBjM0JoZEdOb1EyOXVabWxuTG5Cb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPMXh1SUNCcFppQW9jR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNcElIdGNiaUFnSUNCbWIzSWdLSFpoY2lCd2FHRnpaVTVoYldVZ2FXNGdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNcElIdGNiaUFnSUNBZ0lHbG1JQ2h3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN5NW9ZWE5QZDI1UWNtOXdaWEowZVNod2FHRnpaVTVoYldVcEtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxJRDBnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTmJjR2hoYzJWT1lXMWxYVHRjYmlBZ0lDQWdJQ0FnY0hWaWJHbHphRkpsWjJsemRISmhkR2x2Yms1aGJXVW9YRzRnSUNBZ0lDQWdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpTeGNiaUFnSUNBZ0lDQWdJQ0JRYkhWbmFXNU5iMlIxYkdVc1hHNGdJQ0FnSUNBZ0lDQWdaWFpsYm5ST1lXMWxYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNCOUlHVnNjMlVnYVdZZ0tHUnBjM0JoZEdOb1EyOXVabWxuTG5KbFoybHpkSEpoZEdsdmJrNWhiV1VwSUh0Y2JpQWdJQ0J3ZFdKc2FYTm9VbVZuYVhOMGNtRjBhVzl1VG1GdFpTaGNiaUFnSUNBZ0lHUnBjM0JoZEdOb1EyOXVabWxuTG5KbFoybHpkSEpoZEdsdmJrNWhiV1VzWEc0Z0lDQWdJQ0JRYkhWbmFXNU5iMlIxYkdVc1hHNGdJQ0FnSUNCbGRtVnVkRTVoYldWY2JpQWdJQ0FwTzF4dUlDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJtWVd4elpUdGNibjFjYmx4dUx5b3FYRzRnS2lCUWRXSnNhWE5vWlhNZ1lTQnlaV2RwYzNSeVlYUnBiMjRnYm1GdFpTQjBhR0YwSUdseklIVnpaV1FnZEc4Z2FXUmxiblJwWm5rZ1pHbHpjR0YwWTJobFpDQmxkbVZ1ZEhNZ1lXNWtYRzRnS2lCallXNGdZbVVnZFhObFpDQjNhWFJvSUdCRmRtVnVkRkJzZFdkcGJraDFZaTV3ZFhSTWFYTjBaVzVsY21BZ2RHOGdjbVZuYVhOMFpYSWdiR2x6ZEdWdVpYSnpMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnlaV2RwYzNSeVlYUnBiMjVPWVcxbElGSmxaMmx6ZEhKaGRHbHZiaUJ1WVcxbElIUnZJR0ZrWkM1Y2JpQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQlFiSFZuYVc1TmIyUjFiR1VnVUd4MVoybHVJSEIxWW14cGMyaHBibWNnZEdobElHVjJaVzUwTGx4dUlDb2dRSEJ5YVhaaGRHVmNiaUFxTDF4dVpuVnVZM1JwYjI0Z2NIVmliR2x6YUZKbFoybHpkSEpoZEdsdmJrNWhiV1VvY21WbmFYTjBjbUYwYVc5dVRtRnRaU3dnVUd4MVoybHVUVzlrZFd4bExDQmxkbVZ1ZEU1aGJXVXBJSHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FoUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1eVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjMXR5WldkcGMzUnlZWFJwYjI1T1lXMWxYU3hjYmlBZ0lDQW5SWFpsYm5SUWJIVm5hVzVJZFdJNklFMXZjbVVnZEdoaGJpQnZibVVnY0d4MVoybHVJR0YwZEdWdGNIUmxaQ0IwYnlCd2RXSnNhWE5vSUhSb1pTQnpZVzFsSUNjZ0sxeHVJQ0FnSUNkeVpXZHBjM1J5WVhScGIyNGdibUZ0WlN3Z1lDVnpZQzRuTEZ4dUlDQWdJSEpsWjJsemRISmhkR2x2Yms1aGJXVmNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDZ2hSWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllUzV5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGMxdHlaV2RwYzNSeVlYUnBiMjVPWVcxbFhTa3BPMXh1SUNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxuSmxaMmx6ZEhKaGRHbHZiazVoYldWTmIyUjFiR1Z6VzNKbFoybHpkSEpoZEdsdmJrNWhiV1ZkSUQwZ1VHeDFaMmx1VFc5a2RXeGxPMXh1SUNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxuSmxaMmx6ZEhKaGRHbHZiazVoYldWRVpYQmxibVJsYm1OcFpYTmJjbVZuYVhOMGNtRjBhVzl1VG1GdFpWMGdQVnh1SUNBZ0lGQnNkV2RwYmsxdlpIVnNaUzVsZG1WdWRGUjVjR1Z6VzJWMlpXNTBUbUZ0WlYwdVpHVndaVzVrWlc1amFXVnpPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGSmxaMmx6ZEdWeWN5QndiSFZuYVc1eklITnZJSFJvWVhRZ2RHaGxlU0JqWVc0Z1pYaDBjbUZqZENCaGJtUWdaR2x6Y0dGMFkyZ2daWFpsYm5SekxseHVJQ3BjYmlBcUlFQnpaV1VnZTBWMlpXNTBVR3gxWjJsdVNIVmlmVnh1SUNvdlhHNTJZWElnUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVNBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1QzSmtaWEpsWkNCc2FYTjBJRzltSUdsdWFtVmpkR1ZrSUhCc2RXZHBibk11WEc0Z0lDQXFMMXh1SUNCd2JIVm5hVzV6T2lCYlhTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RXRndjR2x1WnlCbWNtOXRJR1YyWlc1MElHNWhiV1VnZEc4Z1pHbHpjR0YwWTJnZ1kyOXVabWxuWEc0Z0lDQXFMMXh1SUNCbGRtVnVkRTVoYldWRWFYTndZWFJqYUVOdmJtWnBaM002SUh0OUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCTllYQndhVzVuSUdaeWIyMGdjbVZuYVhOMGNtRjBhVzl1SUc1aGJXVWdkRzhnY0d4MVoybHVJRzF2WkhWc1pWeHVJQ0FnS2k5Y2JpQWdjbVZuYVhOMGNtRjBhVzl1VG1GdFpVMXZaSFZzWlhNNklIdDlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQk5ZWEJ3YVc1bklHWnliMjBnY21WbmFYTjBjbUYwYVc5dUlHNWhiV1VnZEc4Z1pYWmxiblFnYm1GdFpWeHVJQ0FnS2k5Y2JpQWdjbVZuYVhOMGNtRjBhVzl1VG1GdFpVUmxjR1Z1WkdWdVkybGxjem9nZTMwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdWFtVmpkSE1nWVc0Z2IzSmtaWEpwYm1jZ2IyWWdjR3gxWjJsdWN5QW9ZbmtnY0d4MVoybHVJRzVoYldVcExpQlVhR2x6SUdGc2JHOTNjeUIwYUdVZ2IzSmtaWEpwYm1kY2JpQWdJQ29nZEc4Z1ltVWdaR1ZqYjNWd2JHVmtJR1p5YjIwZ2FXNXFaV04wYVc5dUlHOW1JSFJvWlNCaFkzUjFZV3dnY0d4MVoybHVjeUJ6YnlCMGFHRjBJRzl5WkdWeWFXNW5JR2x6WEc0Z0lDQXFJR0ZzZDJGNWN5QmtaWFJsY20xcGJtbHpkR2xqSUhKbFoyRnlaR3hsYzNNZ2IyWWdjR0ZqYTJGbmFXNW5MQ0J2YmkxMGFHVXRabXg1SUdsdWFtVmpkR2x2Yml3Z1pYUmpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTJGeWNtRjVmU0JKYm1wbFkzUmxaRVYyWlc1MFVHeDFaMmx1VDNKa1pYSmNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxSUVCelpXVWdlMFYyWlc1MFVHeDFaMmx1U0hWaUxtbHVhbVZqZEdsdmJpNXBibXBsWTNSRmRtVnVkRkJzZFdkcGJrOXlaR1Z5ZlZ4dUlDQWdLaTljYmlBZ2FXNXFaV04wUlhabGJuUlFiSFZuYVc1UGNtUmxjam9nWm5WdVkzUnBiMjRvU1c1cVpXTjBaV1JGZG1WdWRGQnNkV2RwYms5eVpHVnlLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDRkZkbVZ1ZEZCc2RXZHBiazl5WkdWeUxGeHVJQ0FnSUNBZ0owVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNuazZJRU5oYm01dmRDQnBibXBsWTNRZ1pYWmxiblFnY0d4MVoybHVJRzl5WkdWeWFXNW5JRzF2Y21VZ2RHaGhiaUFuSUN0Y2JpQWdJQ0FnSUNkdmJtTmxMaUJaYjNVZ1lYSmxJR3hwYTJWc2VTQjBjbmxwYm1jZ2RHOGdiRzloWkNCdGIzSmxJSFJvWVc0Z2IyNWxJR052Y0hrZ2IyWWdVbVZoWTNRdUoxeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9JVVYyWlc1MFVHeDFaMmx1VDNKa1pYSXBLVHRjYmlBZ0lDQXZMeUJEYkc5dVpTQjBhR1VnYjNKa1pYSnBibWNnYzI4Z2FYUWdZMkZ1Ym05MElHSmxJR1I1Ym1GdGFXTmhiR3g1SUcxMWRHRjBaV1F1WEc0Z0lDQWdSWFpsYm5SUWJIVm5hVzVQY21SbGNpQTlJRUZ5Y21GNUxuQnliM1J2ZEhsd1pTNXpiR2xqWlM1allXeHNLRWx1YW1WamRHVmtSWFpsYm5SUWJIVm5hVzVQY21SbGNpazdYRzRnSUNBZ2NtVmpiMjF3ZFhSbFVHeDFaMmx1VDNKa1pYSnBibWNvS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzVxWldOMGN5QndiSFZuYVc1eklIUnZJR0psSUhWelpXUWdZbmtnWUVWMlpXNTBVR3gxWjJsdVNIVmlZQzRnVkdobElIQnNkV2RwYmlCdVlXMWxjeUJ0ZFhOMElHSmxYRzRnSUNBcUlHbHVJSFJvWlNCdmNtUmxjbWx1WnlCcGJtcGxZM1JsWkNCaWVTQmdhVzVxWldOMFJYWmxiblJRYkhWbmFXNVBjbVJsY21BdVhHNGdJQ0FxWEc0Z0lDQXFJRkJzZFdkcGJuTWdZMkZ1SUdKbElHbHVhbVZqZEdWa0lHRnpJSEJoY25RZ2IyWWdjR0ZuWlNCcGJtbDBhV0ZzYVhwaGRHbHZiaUJ2Y2lCdmJpMTBhR1V0Wm14NUxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdhVzVxWldOMFpXUk9ZVzFsYzFSdlVHeDFaMmx1Y3lCTllYQWdabkp2YlNCdVlXMWxjeUIwYnlCd2JIVm5hVzRnYlc5a2RXeGxjeTVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUlFQnpaV1VnZTBWMlpXNTBVR3gxWjJsdVNIVmlMbWx1YW1WamRHbHZiaTVwYm1wbFkzUkZkbVZ1ZEZCc2RXZHBibk5DZVU1aGJXVjlYRzRnSUNBcUwxeHVJQ0JwYm1wbFkzUkZkbVZ1ZEZCc2RXZHBibk5DZVU1aGJXVTZJR1oxYm1OMGFXOXVLR2x1YW1WamRHVmtUbUZ0WlhOVWIxQnNkV2RwYm5NcElIdGNiaUFnSUNCMllYSWdhWE5QY21SbGNtbHVaMFJwY25SNUlEMGdabUZzYzJVN1hHNGdJQ0FnWm05eUlDaDJZWElnY0d4MVoybHVUbUZ0WlNCcGJpQnBibXBsWTNSbFpFNWhiV1Z6Vkc5UWJIVm5hVzV6S1NCN1hHNGdJQ0FnSUNCcFppQW9JV2x1YW1WamRHVmtUbUZ0WlhOVWIxQnNkV2RwYm5NdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0d4MVoybHVUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQjJZWElnVUd4MVoybHVUVzlrZFd4bElEMGdhVzVxWldOMFpXUk9ZVzFsYzFSdlVHeDFaMmx1YzF0d2JIVm5hVzVPWVcxbFhUdGNiaUFnSUNBZ0lHbG1JQ2doYm1GdFpYTlViMUJzZFdkcGJuTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NHeDFaMmx1VG1GdFpTa2dmSHhjYmlBZ0lDQWdJQ0FnSUNCdVlXMWxjMVJ2VUd4MVoybHVjMXR3YkhWbmFXNU9ZVzFsWFNBaFBUMGdVR3gxWjJsdVRXOWtkV3hsS1NCN1hHNGdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lDQWdJVzVoYldWelZHOVFiSFZuYVc1elczQnNkV2RwYms1aGJXVmRMRnh1SUNBZ0lDQWdJQ0FnSUNkRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNU9pQkRZVzV1YjNRZ2FXNXFaV04wSUhSM2J5QmthV1ptWlhKbGJuUWdaWFpsYm5RZ2NHeDFaMmx1Y3lBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuZFhOcGJtY2dkR2hsSUhOaGJXVWdibUZ0WlN3Z1lDVnpZQzRuTEZ4dUlDQWdJQ0FnSUNBZ0lIQnNkV2RwYms1aGJXVmNiaUFnSUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENnaGJtRnRaWE5VYjFCc2RXZHBibk5iY0d4MVoybHVUbUZ0WlYwcEtUdGNiaUFnSUNBZ0lDQWdibUZ0WlhOVWIxQnNkV2RwYm5OYmNHeDFaMmx1VG1GdFpWMGdQU0JRYkhWbmFXNU5iMlIxYkdVN1hHNGdJQ0FnSUNBZ0lHbHpUM0prWlhKcGJtZEVhWEowZVNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2hwYzA5eVpHVnlhVzVuUkdseWRIa3BJSHRjYmlBZ0lDQWdJSEpsWTI5dGNIVjBaVkJzZFdkcGJrOXlaR1Z5YVc1bktDazdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJNYjI5cmN5QjFjQ0IwYUdVZ2NHeDFaMmx1SUdadmNpQjBhR1VnYzNWd2NHeHBaV1FnWlhabGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JsZG1WdWRDQkJJSE41Ym5Sb1pYUnBZeUJsZG1WdWRDNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1AyOWlhbVZqZEgwZ1ZHaGxJSEJzZFdkcGJpQjBhR0YwSUdOeVpXRjBaV1FnZEdobElITjFjSEJzYVdWa0lHVjJaVzUwTGx4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUdkbGRGQnNkV2RwYmsxdlpIVnNaVVp2Y2tWMlpXNTBPaUJtZFc1amRHbHZiaWhsZG1WdWRDa2dlMXh1SUNBZ0lIWmhjaUJrYVhOd1lYUmphRU52Ym1acFp5QTlJR1YyWlc1MExtUnBjM0JoZEdOb1EyOXVabWxuTzF4dUlDQWdJR2xtSUNoa2FYTndZWFJqYUVOdmJtWnBaeTV5WldkcGMzUnlZWFJwYjI1T1lXMWxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdSWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllUzV5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGMxdGNiaUFnSUNBZ0lDQWdaR2x6Y0dGMFkyaERiMjVtYVdjdWNtVm5hWE4wY21GMGFXOXVUbUZ0WlZ4dUlDQWdJQ0FnWFNCOGZDQnVkV3hzTzF4dUlDQWdJSDFjYmlBZ0lDQm1iM0lnS0haaGNpQndhR0Z6WlNCcGJpQmthWE53WVhSamFFTnZibVpwWnk1d2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjeWtnZTF4dUlDQWdJQ0FnYVdZZ0tDRmthWE53WVhSamFFTnZibVpwWnk1d2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHdhR0Z6WlNrcElIdGNiaUFnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQjJZWElnVUd4MVoybHVUVzlrZFd4bElEMGdSWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllUzV5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGMxdGNiaUFnSUNBZ0lDQWdaR2x6Y0dGMFkyaERiMjVtYVdjdWNHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE5iY0doaGMyVmRYRzRnSUNBZ0lDQmRPMXh1SUNBZ0lDQWdhV1lnS0ZCc2RXZHBiazF2WkhWc1pTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdVR3gxWjJsdVRXOWtkV3hsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2JuVnNiRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1JYaHdiM05sWkNCbWIzSWdkVzVwZENCMFpYTjBhVzVuTGx4dUlDQWdLaUJBY0hKcGRtRjBaVnh1SUNBZ0tpOWNiaUFnWDNKbGMyVjBSWFpsYm5SUWJIVm5hVzV6T2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCRmRtVnVkRkJzZFdkcGJrOXlaR1Z5SUQwZ2JuVnNiRHRjYmlBZ0lDQm1iM0lnS0haaGNpQndiSFZuYVc1T1lXMWxJR2x1SUc1aGJXVnpWRzlRYkhWbmFXNXpLU0I3WEc0Z0lDQWdJQ0JwWmlBb2JtRnRaWE5VYjFCc2RXZHBibk11YUdGelQzZHVVSEp2Y0dWeWRIa29jR3gxWjJsdVRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ1pHVnNaWFJsSUc1aGJXVnpWRzlRYkhWbmFXNXpXM0JzZFdkcGJrNWhiV1ZkTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbkJzZFdkcGJuTXViR1Z1WjNSb0lEMGdNRHRjYmx4dUlDQWdJSFpoY2lCbGRtVnVkRTVoYldWRWFYTndZWFJqYUVOdmJtWnBaM01nUFNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxtVjJaVzUwVG1GdFpVUnBjM0JoZEdOb1EyOXVabWxuY3p0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJsZG1WdWRFNWhiV1VnYVc0Z1pYWmxiblJPWVcxbFJHbHpjR0YwWTJoRGIyNW1hV2R6S1NCN1hHNGdJQ0FnSUNCcFppQW9aWFpsYm5ST1lXMWxSR2x6Y0dGMFkyaERiMjVtYVdkekxtaGhjMDkzYmxCeWIzQmxjblI1S0dWMlpXNTBUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdaR1ZzWlhSbElHVjJaVzUwVG1GdFpVUnBjM0JoZEdOb1EyOXVabWxuYzF0bGRtVnVkRTVoYldWZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUhaaGNpQnlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsY3lBOUlFVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNua3VjbVZuYVhOMGNtRjBhVzl1VG1GdFpVMXZaSFZzWlhNN1hHNGdJQ0FnWm05eUlDaDJZWElnY21WbmFYTjBjbUYwYVc5dVRtRnRaU0JwYmlCeVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjeWtnZTF4dUlDQWdJQ0FnYVdZZ0tISmxaMmx6ZEhKaGRHbHZiazVoYldWTmIyUjFiR1Z6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEpsWjJsemRISmhkR2x2Yms1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUdSbGJHVjBaU0J5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGMxdHlaV2RwYzNSeVlYUnBiMjVPWVcxbFhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYmx4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1TzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV2ZW50UGx1Z2luVXRpbHNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIEluamVjdGVkIGRlcGVuZGVuY2llczpcbiAqL1xuXG4vKipcbiAqIC0gYE1vdW50YDogW3JlcXVpcmVkXSBNb2R1bGUgdGhhdCBjYW4gY29udmVydCBiZXR3ZWVuIFJlYWN0IGRvbSBJRHMgYW5kXG4gKiAgIGFjdHVhbCBub2RlIHJlZmVyZW5jZXMuXG4gKi9cbnZhciBpbmplY3Rpb24gPSB7XG4gIE1vdW50OiBudWxsLFxuICBpbmplY3RNb3VudDogZnVuY3Rpb24oSW5qZWN0ZWRNb3VudCkge1xuICAgIGluamVjdGlvbi5Nb3VudCA9IEluamVjdGVkTW91bnQ7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgSW5qZWN0ZWRNb3VudCAmJiBJbmplY3RlZE1vdW50LmdldE5vZGUsXG4gICAgICAgICdFdmVudFBsdWdpblV0aWxzLmluamVjdGlvbi5pbmplY3RNb3VudCguLi4pOiBJbmplY3RlZCBNb3VudCBtb2R1bGUgJyArXG4gICAgICAgICdpcyBtaXNzaW5nIGdldE5vZGUuJ1xuICAgICAgKSA6IGludmFyaWFudChJbmplY3RlZE1vdW50ICYmIEluamVjdGVkTW91bnQuZ2V0Tm9kZSkpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzO1xuXG5mdW5jdGlvbiBpc0VuZGlzaCh0b3BMZXZlbFR5cGUpIHtcbiAgcmV0dXJuIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BNb3VzZVVwIHx8XG4gICAgICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wVG91Y2hFbmQgfHxcbiAgICAgICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BUb3VjaENhbmNlbDtcbn1cblxuZnVuY3Rpb24gaXNNb3ZlaXNoKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlTW92ZSB8fFxuICAgICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoTW92ZTtcbn1cbmZ1bmN0aW9uIGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duIHx8XG4gICAgICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wVG91Y2hTdGFydDtcbn1cblxuXG52YXIgdmFsaWRhdGVFdmVudERpc3BhdGNoZXM7XG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gICAgdmFyIGRpc3BhdGNoSURzID0gZXZlbnQuX2Rpc3BhdGNoSURzO1xuXG4gICAgdmFyIGxpc3RlbmVyc0lzQXJyID0gQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycyk7XG4gICAgdmFyIGlkc0lzQXJyID0gQXJyYXkuaXNBcnJheShkaXNwYXRjaElEcyk7XG4gICAgdmFyIElEc0xlbiA9IGlkc0lzQXJyID8gZGlzcGF0Y2hJRHMubGVuZ3RoIDogZGlzcGF0Y2hJRHMgPyAxIDogMDtcbiAgICB2YXIgbGlzdGVuZXJzTGVuID0gbGlzdGVuZXJzSXNBcnIgP1xuICAgICAgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoIDpcbiAgICAgIGRpc3BhdGNoTGlzdGVuZXJzID8gMSA6IDA7XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgaWRzSXNBcnIgPT09IGxpc3RlbmVyc0lzQXJyICYmIElEc0xlbiA9PT0gbGlzdGVuZXJzTGVuLFxuICAgICAgJ0V2ZW50UGx1Z2luVXRpbHM6IEludmFsaWQgYGV2ZW50YC4nXG4gICAgKSA6IGludmFyaWFudChpZHNJc0FyciA9PT0gbGlzdGVuZXJzSXNBcnIgJiYgSURzTGVuID09PSBsaXN0ZW5lcnNMZW4pKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjYihldmVudCwgbGlzdGVuZXIsIGlkKWAuIEF2b2lkcyB1c2luZyBjYWxsIGlmIG5vIHNjb3BlIGlzXG4gKiBwcm92aWRlZC4gVGhlIGAobGlzdGVuZXIsaWQpYCBwYWlyIGVmZmVjdGl2ZWx5IGZvcm1zIHRoZSBcImRpc3BhdGNoXCIgYnV0IGFyZVxuICoga2VwdCBzZXBhcmF0ZSB0byBjb25zZXJ2ZSBtZW1vcnkuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hFdmVudERpc3BhdGNoKGV2ZW50LCBjYikge1xuICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaElEcyA9IGV2ZW50Ll9kaXNwYXRjaElEcztcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycykpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIExpc3RlbmVycyBhbmQgSURzIGFyZSB0d28gcGFyYWxsZWwgYXJyYXlzIHRoYXQgYXJlIGFsd2F5cyBpbiBzeW5jLlxuICAgICAgY2IoZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzW2ldLCBkaXNwYXRjaElEc1tpXSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKSB7XG4gICAgY2IoZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzLCBkaXNwYXRjaElEcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFBsdWdpbk1vZHVsZS5leGVjdXRlRGlzcGF0Y2goKS5cbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IFN5bnRoZXRpY0V2ZW50IHRvIGhhbmRsZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gQXBwbGljYXRpb24tbGV2ZWwgY2FsbGJhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21JRCBET00gaWQgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGRvbUlEKSB7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBpbmplY3Rpb24uTW91bnQuZ2V0Tm9kZShkb21JRCk7XG4gIHZhciByZXR1cm5WYWx1ZSA9IGxpc3RlbmVyKGV2ZW50LCBkb21JRCk7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbi8qKlxuICogU3RhbmRhcmQvc2ltcGxlIGl0ZXJhdGlvbiB0aHJvdWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMuXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCwgY2IpIHtcbiAgZm9yRWFjaEV2ZW50RGlzcGF0Y2goZXZlbnQsIGNiKTtcbiAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgZXZlbnQuX2Rpc3BhdGNoSURzID0gbnVsbDtcbn1cblxuLyoqXG4gKiBTdGFuZGFyZC9zaW1wbGUgaXRlcmF0aW9uIHRocm91Z2ggYW4gZXZlbnQncyBjb2xsZWN0ZWQgZGlzcGF0Y2hlcywgYnV0IHN0b3BzXG4gKiBhdCB0aGUgZmlyc3QgZGlzcGF0Y2ggZXhlY3V0aW9uIHJldHVybmluZyB0cnVlLCBhbmQgcmV0dXJucyB0aGF0IGlkLlxuICpcbiAqIEByZXR1cm4gaWQgb2YgdGhlIGZpcnN0IGRpc3BhdGNoIGV4ZWN1dGlvbiB3aG8ncyBsaXN0ZW5lciByZXR1cm5zIHRydWUsIG9yXG4gKiBudWxsIGlmIG5vIGxpc3RlbmVyIHJldHVybmVkIHRydWUuXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsKGV2ZW50KSB7XG4gIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbiAgdmFyIGRpc3BhdGNoSURzID0gZXZlbnQuX2Rpc3BhdGNoSURzO1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMoZXZlbnQpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXJzKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gTGlzdGVuZXJzIGFuZCBJRHMgYXJlIHR3byBwYXJhbGxlbCBhcnJheXMgdGhhdCBhcmUgYWx3YXlzIGluIHN5bmMuXG4gICAgICBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnNbaV0oZXZlbnQsIGRpc3BhdGNoSURzW2ldKSkge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2hJRHNbaV07XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKSB7XG4gICAgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKGV2ZW50LCBkaXNwYXRjaElEcykpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaElEcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHNlZSBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbFxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlKGV2ZW50KSB7XG4gIHZhciByZXQgPSBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbChldmVudCk7XG4gIGV2ZW50Ll9kaXNwYXRjaElEcyA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogRXhlY3V0aW9uIG9mIGEgXCJkaXJlY3RcIiBkaXNwYXRjaCAtIHRoZXJlIG11c3QgYmUgYXQgbW9zdCBvbmUgZGlzcGF0Y2hcbiAqIGFjY3VtdWxhdGVkIG9uIHRoZSBldmVudCBvciBpdCBpcyBjb25zaWRlcmVkIGFuIGVycm9yLiBJdCBkb2Vzbid0IHJlYWxseSBtYWtlXG4gKiBzZW5zZSBmb3IgYW4gZXZlbnQgd2l0aCBtdWx0aXBsZSBkaXNwYXRjaGVzIChidWJibGVkKSB0byBrZWVwIHRyYWNrIG9mIHRoZVxuICogcmV0dXJuIHZhbHVlcyBhdCBlYWNoIGRpc3BhdGNoIGV4ZWN1dGlvbiwgYnV0IGl0IGRvZXMgdGVuZCB0byBtYWtlIHNlbnNlIHdoZW5cbiAqIGRlYWxpbmcgd2l0aCBcImRpcmVjdFwiIGRpc3BhdGNoZXMuXG4gKlxuICogQHJldHVybiBUaGUgcmV0dXJuIHZhbHVlIG9mIGV4ZWN1dGluZyB0aGUgc2luZ2xlIGRpc3BhdGNoLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlyZWN0RGlzcGF0Y2goZXZlbnQpIHtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTtcbiAgfVxuICB2YXIgZGlzcGF0Y2hMaXN0ZW5lciA9IGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbiAgdmFyIGRpc3BhdGNoSUQgPSBldmVudC5fZGlzcGF0Y2hJRHM7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgIUFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lciksXG4gICAgJ2V4ZWN1dGVEaXJlY3REaXNwYXRjaCguLi4pOiBJbnZhbGlkIGBldmVudGAuJ1xuICApIDogaW52YXJpYW50KCFBcnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXIpKSk7XG4gIHZhciByZXMgPSBkaXNwYXRjaExpc3RlbmVyID9cbiAgICBkaXNwYXRjaExpc3RlbmVyKGV2ZW50LCBkaXNwYXRjaElEKSA6XG4gICAgbnVsbDtcbiAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgZXZlbnQuX2Rpc3BhdGNoSURzID0gbnVsbDtcbiAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBldmVudFxuICogQHJldHVybiB7Ym9vbH0gVHJ1ZSBpZmYgbnVtYmVyIG9mIGRpc3BhdGNoZXMgYWNjdW11bGF0ZWQgaXMgZ3JlYXRlciB0aGFuIDAuXG4gKi9cbmZ1bmN0aW9uIGhhc0Rpc3BhdGNoZXMoZXZlbnQpIHtcbiAgcmV0dXJuICEhZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xufVxuXG4vKipcbiAqIEdlbmVyYWwgdXRpbGl0aWVzIHRoYXQgYXJlIHVzZWZ1bCBpbiBjcmVhdGluZyBjdXN0b20gRXZlbnQgUGx1Z2lucy5cbiAqL1xudmFyIEV2ZW50UGx1Z2luVXRpbHMgPSB7XG4gIGlzRW5kaXNoOiBpc0VuZGlzaCxcbiAgaXNNb3ZlaXNoOiBpc01vdmVpc2gsXG4gIGlzU3RhcnRpc2g6IGlzU3RhcnRpc2gsXG5cbiAgZXhlY3V0ZURpcmVjdERpc3BhdGNoOiBleGVjdXRlRGlyZWN0RGlzcGF0Y2gsXG4gIGV4ZWN1dGVEaXNwYXRjaDogZXhlY3V0ZURpc3BhdGNoLFxuICBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXI6IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcixcbiAgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZTogZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZSxcbiAgaGFzRGlzcGF0Y2hlczogaGFzRGlzcGF0Y2hlcyxcbiAgaW5qZWN0aW9uOiBpbmplY3Rpb24sXG4gIHVzZVRvdWNoRXZlbnRzOiBmYWxzZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFBsdWdpblV0aWxzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UlhabGJuUlFiSFZuYVc1VmRHbHNjeTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUVWMlpXNTBVR3gxWjJsdVZYUnBiSE5jYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCRmRtVnVkRU52Ym5OMFlXNTBjeUE5SUhKbGNYVnBjbVVvWENJdUwwVjJaVzUwUTI5dWMzUmhiblJ6WENJcE8xeHVYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzR2S2lwY2JpQXFJRWx1YW1WamRHVmtJR1JsY0dWdVpHVnVZMmxsY3pwY2JpQXFMMXh1WEc0dktpcGNiaUFxSUMwZ1lFMXZkVzUwWURvZ1czSmxjWFZwY21Wa1hTQk5iMlIxYkdVZ2RHaGhkQ0JqWVc0Z1kyOXVkbVZ5ZENCaVpYUjNaV1Z1SUZKbFlXTjBJR1J2YlNCSlJITWdZVzVrWEc0Z0tpQWdJR0ZqZEhWaGJDQnViMlJsSUhKbFptVnlaVzVqWlhNdVhHNGdLaTljYm5aaGNpQnBibXBsWTNScGIyNGdQU0I3WEc0Z0lFMXZkVzUwT2lCdWRXeHNMRnh1SUNCcGJtcGxZM1JOYjNWdWREb2dablZ1WTNScGIyNG9TVzVxWldOMFpXUk5iM1Z1ZENrZ2UxeHVJQ0FnSUdsdWFtVmpkR2x2Ymk1TmIzVnVkQ0E5SUVsdWFtVmpkR1ZrVFc5MWJuUTdYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ1NXNXFaV04wWldSTmIzVnVkQ0FtSmlCSmJtcGxZM1JsWkUxdmRXNTBMbWRsZEU1dlpHVXNYRzRnSUNBZ0lDQWdJQ2RGZG1WdWRGQnNkV2RwYmxWMGFXeHpMbWx1YW1WamRHbHZiaTVwYm1wbFkzUk5iM1Z1ZENndUxpNHBPaUJKYm1wbFkzUmxaQ0JOYjNWdWRDQnRiMlIxYkdVZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RwY3lCdGFYTnphVzVuSUdkbGRFNXZaR1V1SjF4dUlDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaEpibXBsWTNSbFpFMXZkVzUwSUNZbUlFbHVhbVZqZEdWa1RXOTFiblF1WjJWMFRtOWtaU2twTzF4dUlDQWdJSDFjYmlBZ2ZWeHVmVHRjYmx4dWRtRnlJSFJ2Y0V4bGRtVnNWSGx3WlhNZ1BTQkZkbVZ1ZEVOdmJuTjBZVzUwY3k1MGIzQk1aWFpsYkZSNWNHVnpPMXh1WEc1bWRXNWpkR2x2YmlCcGMwVnVaR2x6YUNoMGIzQk1aWFpsYkZSNWNHVXBJSHRjYmlBZ2NtVjBkWEp1SUhSdmNFeGxkbVZzVkhsd1pTQTlQVDBnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JOYjNWelpWVndJSHg4WEc0Z0lDQWdJQ0FnSUNCMGIzQk1aWFpsYkZSNWNHVWdQVDA5SUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3Vkc5MVkyaEZibVFnZkh4Y2JpQWdJQ0FnSUNBZ0lIUnZjRXhsZG1Wc1ZIbHdaU0E5UFQwZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCVWIzVmphRU5oYm1ObGJEdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2FYTk5iM1psYVhOb0tIUnZjRXhsZG1Wc1ZIbHdaU2tnZTF4dUlDQnlaWFIxY200Z2RHOXdUR1YyWld4VWVYQmxJRDA5UFNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0UxdmRYTmxUVzkyWlNCOGZGeHVJQ0FnSUNBZ0lDQWdkRzl3VEdWMlpXeFVlWEJsSUQwOVBTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNGUnZkV05vVFc5MlpUdGNibjFjYm1aMWJtTjBhVzl1SUdselUzUmhjblJwYzJnb2RHOXdUR1YyWld4VWVYQmxLU0I3WEc0Z0lISmxkSFZ5YmlCMGIzQk1aWFpsYkZSNWNHVWdQVDA5SUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3VFc5MWMyVkViM2R1SUh4OFhHNGdJQ0FnSUNBZ0lDQjBiM0JNWlhabGJGUjVjR1VnUFQwOUlIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1ZHOTFZMmhUZEdGeWREdGNibjFjYmx4dVhHNTJZWElnZG1Gc2FXUmhkR1ZGZG1WdWRFUnBjM0JoZEdOb1pYTTdYRzVwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lIWmhiR2xrWVhSbFJYWmxiblJFYVhOd1lYUmphR1Z6SUQwZ1puVnVZM1JwYjI0b1pYWmxiblFwSUh0Y2JpQWdJQ0IyWVhJZ1pHbHpjR0YwWTJoTWFYTjBaVzVsY25NZ1BTQmxkbVZ1ZEM1ZlpHbHpjR0YwWTJoTWFYTjBaVzVsY25NN1hHNGdJQ0FnZG1GeUlHUnBjM0JoZEdOb1NVUnpJRDBnWlhabGJuUXVYMlJwYzNCaGRHTm9TVVJ6TzF4dVhHNGdJQ0FnZG1GeUlHeHBjM1JsYm1WeWMwbHpRWEp5SUQwZ1FYSnlZWGt1YVhOQmNuSmhlU2hrYVhOd1lYUmphRXhwYzNSbGJtVnljeWs3WEc0Z0lDQWdkbUZ5SUdsa2MwbHpRWEp5SUQwZ1FYSnlZWGt1YVhOQmNuSmhlU2hrYVhOd1lYUmphRWxFY3lrN1hHNGdJQ0FnZG1GeUlFbEVjMHhsYmlBOUlHbGtjMGx6UVhKeUlEOGdaR2x6Y0dGMFkyaEpSSE11YkdWdVozUm9JRG9nWkdsemNHRjBZMmhKUkhNZ1B5QXhJRG9nTUR0Y2JpQWdJQ0IyWVhJZ2JHbHpkR1Z1WlhKelRHVnVJRDBnYkdsemRHVnVaWEp6U1hOQmNuSWdQMXh1SUNBZ0lDQWdaR2x6Y0dGMFkyaE1hWE4wWlc1bGNuTXViR1Z1WjNSb0lEcGNiaUFnSUNBZ0lHUnBjM0JoZEdOb1RHbHpkR1Z1WlhKeklEOGdNU0E2SURBN1hHNWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnYVdSelNYTkJjbklnUFQwOUlHeHBjM1JsYm1WeWMwbHpRWEp5SUNZbUlFbEVjMHhsYmlBOVBUMGdiR2x6ZEdWdVpYSnpUR1Z1TEZ4dUlDQWdJQ0FnSjBWMlpXNTBVR3gxWjJsdVZYUnBiSE02SUVsdWRtRnNhV1FnWUdWMlpXNTBZQzRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENocFpITkpjMEZ5Y2lBOVBUMGdiR2x6ZEdWdVpYSnpTWE5CY25JZ0ppWWdTVVJ6VEdWdUlEMDlQU0JzYVhOMFpXNWxjbk5NWlc0cEtUdGNiaUFnZlR0Y2JuMWNibHh1THlvcVhHNGdLaUJKYm5admEyVnpJR0JqWWlobGRtVnVkQ3dnYkdsemRHVnVaWElzSUdsa0tXQXVJRUYyYjJsa2N5QjFjMmx1WnlCallXeHNJR2xtSUc1dklITmpiM0JsSUdselhHNGdLaUJ3Y205MmFXUmxaQzRnVkdobElHQW9iR2x6ZEdWdVpYSXNhV1FwWUNCd1lXbHlJR1ZtWm1WamRHbDJaV3g1SUdadmNtMXpJSFJvWlNCY0ltUnBjM0JoZEdOb1hDSWdZblYwSUdGeVpWeHVJQ29nYTJWd2RDQnpaWEJoY21GMFpTQjBieUJqYjI1elpYSjJaU0J0WlcxdmNua3VYRzRnS2k5Y2JtWjFibU4wYVc5dUlHWnZja1ZoWTJoRmRtVnVkRVJwYzNCaGRHTm9LR1YyWlc1MExDQmpZaWtnZTF4dUlDQjJZWElnWkdsemNHRjBZMmhNYVhOMFpXNWxjbk1nUFNCbGRtVnVkQzVmWkdsemNHRjBZMmhNYVhOMFpXNWxjbk03WEc0Z0lIWmhjaUJrYVhOd1lYUmphRWxFY3lBOUlHVjJaVzUwTGw5a2FYTndZWFJqYUVsRWN6dGNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJSFpoYkdsa1lYUmxSWFpsYm5SRWFYTndZWFJqYUdWektHVjJaVzUwS1R0Y2JpQWdmVnh1SUNCcFppQW9RWEp5WVhrdWFYTkJjbkpoZVNoa2FYTndZWFJqYUV4cGMzUmxibVZ5Y3lrcElIdGNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHUnBjM0JoZEdOb1RHbHpkR1Z1WlhKekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb1pYWmxiblF1YVhOUWNtOXdZV2RoZEdsdmJsTjBiM0J3WldRb0tTa2dlMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lDOHZJRXhwYzNSbGJtVnljeUJoYm1RZ1NVUnpJR0Z5WlNCMGQyOGdjR0Z5WVd4c1pXd2dZWEp5WVhseklIUm9ZWFFnWVhKbElHRnNkMkY1Y3lCcGJpQnplVzVqTGx4dUlDQWdJQ0FnWTJJb1pYWmxiblFzSUdScGMzQmhkR05vVEdsemRHVnVaWEp6VzJsZExDQmthWE53WVhSamFFbEVjMXRwWFNrN1hHNGdJQ0FnZlZ4dUlDQjlJR1ZzYzJVZ2FXWWdLR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpLU0I3WEc0Z0lDQWdZMklvWlhabGJuUXNJR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpMQ0JrYVhOd1lYUmphRWxFY3lrN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkVaV1poZFd4MElHbHRjR3hsYldWdWRHRjBhVzl1SUc5bUlGQnNkV2RwYmsxdlpIVnNaUzVsZUdWamRYUmxSR2x6Y0dGMFkyZ29LUzVjYmlBcUlFQndZWEpoYlNCN1UzbHVkR2hsZEdsalJYWmxiblI5SUZONWJuUm9aWFJwWTBWMlpXNTBJSFJ2SUdoaGJtUnNaVnh1SUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2Ym4wZ1FYQndiR2xqWVhScGIyNHRiR1YyWld3Z1kyRnNiR0poWTJ0Y2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmtiMjFKUkNCRVQwMGdhV1FnZEc4Z2NHRnpjeUIwYnlCMGFHVWdZMkZzYkdKaFkyc3VYRzRnS2k5Y2JtWjFibU4wYVc5dUlHVjRaV04xZEdWRWFYTndZWFJqYUNobGRtVnVkQ3dnYkdsemRHVnVaWElzSUdSdmJVbEVLU0I3WEc0Z0lHVjJaVzUwTG1OMWNuSmxiblJVWVhKblpYUWdQU0JwYm1wbFkzUnBiMjR1VFc5MWJuUXVaMlYwVG05a1pTaGtiMjFKUkNrN1hHNGdJSFpoY2lCeVpYUjFjbTVXWVd4MVpTQTlJR3hwYzNSbGJtVnlLR1YyWlc1MExDQmtiMjFKUkNrN1hHNGdJR1YyWlc1MExtTjFjbkpsYm5SVVlYSm5aWFFnUFNCdWRXeHNPMXh1SUNCeVpYUjFjbTRnY21WMGRYSnVWbUZzZFdVN1hHNTlYRzVjYmk4cUtseHVJQ29nVTNSaGJtUmhjbVF2YzJsdGNHeGxJR2wwWlhKaGRHbHZiaUIwYUhKdmRXZG9JR0Z1SUdWMlpXNTBKM01nWTI5c2JHVmpkR1ZrSUdScGMzQmhkR05vWlhNdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdWNFpXTjFkR1ZFYVhOd1lYUmphR1Z6U1c1UGNtUmxjaWhsZG1WdWRDd2dZMklwSUh0Y2JpQWdabTl5UldGamFFVjJaVzUwUkdsemNHRjBZMmdvWlhabGJuUXNJR05pS1R0Y2JpQWdaWFpsYm5RdVgyUnBjM0JoZEdOb1RHbHpkR1Z1WlhKeklEMGdiblZzYkR0Y2JpQWdaWFpsYm5RdVgyUnBjM0JoZEdOb1NVUnpJRDBnYm5Wc2JEdGNibjFjYmx4dUx5b3FYRzRnS2lCVGRHRnVaR0Z5WkM5emFXMXdiR1VnYVhSbGNtRjBhVzl1SUhSb2NtOTFaMmdnWVc0Z1pYWmxiblFuY3lCamIyeHNaV04wWldRZ1pHbHpjR0YwWTJobGN5d2dZblYwSUhOMGIzQnpYRzRnS2lCaGRDQjBhR1VnWm1seWMzUWdaR2x6Y0dGMFkyZ2daWGhsWTNWMGFXOXVJSEpsZEhWeWJtbHVaeUIwY25WbExDQmhibVFnY21WMGRYSnVjeUIwYUdGMElHbGtMbHh1SUNwY2JpQXFJRUJ5WlhSMWNtNGdhV1FnYjJZZ2RHaGxJR1pwY25OMElHUnBjM0JoZEdOb0lHVjRaV04xZEdsdmJpQjNhRzhuY3lCc2FYTjBaVzVsY2lCeVpYUjFjbTV6SUhSeWRXVXNJRzl5WEc0Z0tpQnVkV3hzSUdsbUlHNXZJR3hwYzNSbGJtVnlJSEpsZEhWeWJtVmtJSFJ5ZFdVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdWNFpXTjFkR1ZFYVhOd1lYUmphR1Z6U1c1UGNtUmxjbE4wYjNCQmRGUnlkV1ZKYlhCc0tHVjJaVzUwS1NCN1hHNGdJSFpoY2lCa2FYTndZWFJqYUV4cGMzUmxibVZ5Y3lBOUlHVjJaVzUwTGw5a2FYTndZWFJqYUV4cGMzUmxibVZ5Y3p0Y2JpQWdkbUZ5SUdScGMzQmhkR05vU1VSeklEMGdaWFpsYm5RdVgyUnBjM0JoZEdOb1NVUnpPMXh1SUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnZG1Gc2FXUmhkR1ZGZG1WdWRFUnBjM0JoZEdOb1pYTW9aWFpsYm5RcE8xeHVJQ0I5WEc0Z0lHbG1JQ2hCY25KaGVTNXBjMEZ5Y21GNUtHUnBjM0JoZEdOb1RHbHpkR1Z1WlhKektTa2dlMXh1SUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0F3T3lCcElEd2daR2x6Y0dGMFkyaE1hWE4wWlc1bGNuTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDaGxkbVZ1ZEM1cGMxQnliM0JoWjJGMGFXOXVVM1J2Y0hCbFpDZ3BLU0I3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdMeThnVEdsemRHVnVaWEp6SUdGdVpDQkpSSE1nWVhKbElIUjNieUJ3WVhKaGJHeGxiQ0JoY25KaGVYTWdkR2hoZENCaGNtVWdZV3gzWVhseklHbHVJSE41Ym1NdVhHNGdJQ0FnSUNCcFppQW9aR2x6Y0dGMFkyaE1hWE4wWlc1bGNuTmJhVjBvWlhabGJuUXNJR1JwYzNCaGRHTm9TVVJ6VzJsZEtTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdaR2x6Y0dGMFkyaEpSSE5iYVYwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlJR1ZzYzJVZ2FXWWdLR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpLU0I3WEc0Z0lDQWdhV1lnS0dScGMzQmhkR05vVEdsemRHVnVaWEp6S0dWMlpXNTBMQ0JrYVhOd1lYUmphRWxFY3lrcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCa2FYTndZWFJqYUVsRWN6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUc1MWJHdzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FITmxaU0JsZUdWamRYUmxSR2x6Y0dGMFkyaGxjMGx1VDNKa1pYSlRkRzl3UVhSVWNuVmxTVzF3YkZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJsZUdWamRYUmxSR2x6Y0dGMFkyaGxjMGx1VDNKa1pYSlRkRzl3UVhSVWNuVmxLR1YyWlc1MEtTQjdYRzRnSUhaaGNpQnlaWFFnUFNCbGVHVmpkWFJsUkdsemNHRjBZMmhsYzBsdVQzSmtaWEpUZEc5d1FYUlVjblZsU1cxd2JDaGxkbVZ1ZENrN1hHNGdJR1YyWlc1MExsOWthWE53WVhSamFFbEVjeUE5SUc1MWJHdzdYRzRnSUdWMlpXNTBMbDlrYVhOd1lYUmphRXhwYzNSbGJtVnljeUE5SUc1MWJHdzdYRzRnSUhKbGRIVnliaUJ5WlhRN1hHNTlYRzVjYmk4cUtseHVJQ29nUlhobFkzVjBhVzl1SUc5bUlHRWdYQ0prYVhKbFkzUmNJaUJrYVhOd1lYUmphQ0F0SUhSb1pYSmxJRzExYzNRZ1ltVWdZWFFnYlc5emRDQnZibVVnWkdsemNHRjBZMmhjYmlBcUlHRmpZM1Z0ZFd4aGRHVmtJRzl1SUhSb1pTQmxkbVZ1ZENCdmNpQnBkQ0JwY3lCamIyNXphV1JsY21Wa0lHRnVJR1Z5Y205eUxpQkpkQ0JrYjJWemJpZDBJSEpsWVd4c2VTQnRZV3RsWEc0Z0tpQnpaVzV6WlNCbWIzSWdZVzRnWlhabGJuUWdkMmwwYUNCdGRXeDBhWEJzWlNCa2FYTndZWFJqYUdWeklDaGlkV0ppYkdWa0tTQjBieUJyWldWd0lIUnlZV05ySUc5bUlIUm9aVnh1SUNvZ2NtVjBkWEp1SUhaaGJIVmxjeUJoZENCbFlXTm9JR1JwYzNCaGRHTm9JR1Y0WldOMWRHbHZiaXdnWW5WMElHbDBJR1J2WlhNZ2RHVnVaQ0IwYnlCdFlXdGxJSE5sYm5ObElIZG9aVzVjYmlBcUlHUmxZV3hwYm1jZ2QybDBhQ0JjSW1ScGNtVmpkRndpSUdScGMzQmhkR05vWlhNdVhHNGdLbHh1SUNvZ1FISmxkSFZ5YmlCVWFHVWdjbVYwZFhKdUlIWmhiSFZsSUc5bUlHVjRaV04xZEdsdVp5QjBhR1VnYzJsdVoyeGxJR1JwYzNCaGRHTm9MbHh1SUNvdlhHNW1kVzVqZEdsdmJpQmxlR1ZqZFhSbFJHbHlaV04wUkdsemNHRjBZMmdvWlhabGJuUXBJSHRjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUhaaGJHbGtZWFJsUlhabGJuUkVhWE53WVhSamFHVnpLR1YyWlc1MEtUdGNiaUFnZlZ4dUlDQjJZWElnWkdsemNHRjBZMmhNYVhOMFpXNWxjaUE5SUdWMlpXNTBMbDlrYVhOd1lYUmphRXhwYzNSbGJtVnljenRjYmlBZ2RtRnlJR1JwYzNCaGRHTm9TVVFnUFNCbGRtVnVkQzVmWkdsemNHRjBZMmhKUkhNN1hHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lVRnljbUY1TG1selFYSnlZWGtvWkdsemNHRjBZMmhNYVhOMFpXNWxjaWtzWEc0Z0lDQWdKMlY0WldOMWRHVkVhWEpsWTNSRWFYTndZWFJqYUNndUxpNHBPaUJKYm5aaGJHbGtJR0JsZG1WdWRHQXVKMXh1SUNBcElEb2dhVzUyWVhKcFlXNTBLQ0ZCY25KaGVTNXBjMEZ5Y21GNUtHUnBjM0JoZEdOb1RHbHpkR1Z1WlhJcEtTazdYRzRnSUhaaGNpQnlaWE1nUFNCa2FYTndZWFJqYUV4cGMzUmxibVZ5SUQ5Y2JpQWdJQ0JrYVhOd1lYUmphRXhwYzNSbGJtVnlLR1YyWlc1MExDQmthWE53WVhSamFFbEVLU0E2WEc0Z0lDQWdiblZzYkR0Y2JpQWdaWFpsYm5RdVgyUnBjM0JoZEdOb1RHbHpkR1Z1WlhKeklEMGdiblZzYkR0Y2JpQWdaWFpsYm5RdVgyUnBjM0JoZEdOb1NVUnpJRDBnYm5Wc2JEdGNiaUFnY21WMGRYSnVJSEpsY3p0Y2JuMWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMU41Ym5Sb1pYUnBZMFYyWlc1MGZTQmxkbVZ1ZEZ4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkgwZ1ZISjFaU0JwWm1ZZ2JuVnRZbVZ5SUc5bUlHUnBjM0JoZEdOb1pYTWdZV05qZFcxMWJHRjBaV1FnYVhNZ1ozSmxZWFJsY2lCMGFHRnVJREF1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR2hoYzBScGMzQmhkR05vWlhNb1pYWmxiblFwSUh0Y2JpQWdjbVYwZFhKdUlDRWhaWFpsYm5RdVgyUnBjM0JoZEdOb1RHbHpkR1Z1WlhKek8xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGJtVnlZV3dnZFhScGJHbDBhV1Z6SUhSb1lYUWdZWEpsSUhWelpXWjFiQ0JwYmlCamNtVmhkR2x1WnlCamRYTjBiMjBnUlhabGJuUWdVR3gxWjJsdWN5NWNiaUFxTDF4dWRtRnlJRVYyWlc1MFVHeDFaMmx1VlhScGJITWdQU0I3WEc0Z0lHbHpSVzVrYVhOb09pQnBjMFZ1WkdsemFDeGNiaUFnYVhOTmIzWmxhWE5vT2lCcGMwMXZkbVZwYzJnc1hHNGdJR2x6VTNSaGNuUnBjMmc2SUdselUzUmhjblJwYzJnc1hHNWNiaUFnWlhobFkzVjBaVVJwY21WamRFUnBjM0JoZEdOb09pQmxlR1ZqZFhSbFJHbHlaV04wUkdsemNHRjBZMmdzWEc0Z0lHVjRaV04xZEdWRWFYTndZWFJqYURvZ1pYaGxZM1YwWlVScGMzQmhkR05vTEZ4dUlDQmxlR1ZqZFhSbFJHbHpjR0YwWTJobGMwbHVUM0prWlhJNklHVjRaV04xZEdWRWFYTndZWFJqYUdWelNXNVBjbVJsY2l4Y2JpQWdaWGhsWTNWMFpVUnBjM0JoZEdOb1pYTkpiazl5WkdWeVUzUnZjRUYwVkhKMVpUb2daWGhsWTNWMFpVUnBjM0JoZEdOb1pYTkpiazl5WkdWeVUzUnZjRUYwVkhKMVpTeGNiaUFnYUdGelJHbHpjR0YwWTJobGN6b2dhR0Z6UkdsemNHRjBZMmhsY3l4Y2JpQWdhVzVxWldOMGFXOXVPaUJwYm1wbFkzUnBiMjRzWEc0Z0lIVnpaVlJ2ZFdOb1JYWmxiblJ6T2lCbVlXeHpaVnh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQkZkbVZ1ZEZCc2RXZHBibFYwYVd4ek8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFdmVudFByb3BhZ2F0b3JzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luSHViXCIpO1xuXG52YXIgYWNjdW11bGF0ZUludG8gPSByZXF1aXJlKFwiLi9hY2N1bXVsYXRlSW50b1wiKTtcbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSByZXF1aXJlKFwiLi9mb3JFYWNoQWNjdW11bGF0ZWRcIik7XG5cbnZhciBQcm9wYWdhdGlvblBoYXNlcyA9IEV2ZW50Q29uc3RhbnRzLlByb3BhZ2F0aW9uUGhhc2VzO1xudmFyIGdldExpc3RlbmVyID0gRXZlbnRQbHVnaW5IdWIuZ2V0TGlzdGVuZXI7XG5cbi8qKlxuICogU29tZSBldmVudCB0eXBlcyBoYXZlIGEgbm90aW9uIG9mIGRpZmZlcmVudCByZWdpc3RyYXRpb24gbmFtZXMgZm9yIGRpZmZlcmVudFxuICogXCJwaGFzZXNcIiBvZiBwcm9wYWdhdGlvbi4gVGhpcyBmaW5kcyBsaXN0ZW5lcnMgYnkgYSBnaXZlbiBwaGFzZS5cbiAqL1xuZnVuY3Rpb24gbGlzdGVuZXJBdFBoYXNlKGlkLCBldmVudCwgcHJvcGFnYXRpb25QaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9XG4gICAgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbcHJvcGFnYXRpb25QaGFzZV07XG4gIHJldHVybiBnZXRMaXN0ZW5lcihpZCwgcmVnaXN0cmF0aW9uTmFtZSk7XG59XG5cbi8qKlxuICogVGFncyBhIGBTeW50aGV0aWNFdmVudGAgd2l0aCBkaXNwYXRjaGVkIGxpc3RlbmVycy4gQ3JlYXRpbmcgdGhpcyBmdW5jdGlvblxuICogaGVyZSwgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGJpbmQgb3IgY3JlYXRlIGZ1bmN0aW9ucyBmb3IgZWFjaCBldmVudC5cbiAqIE11dGF0aW5nIHRoZSBldmVudCdzIG1lbWJlcnMgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBhIHdyYXBwaW5nXG4gKiBcImRpc3BhdGNoXCIgb2JqZWN0IHRoYXQgcGFpcnMgdGhlIGV2ZW50IHdpdGggdGhlIGxpc3RlbmVyLlxuICovXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzKGRvbUlELCB1cHdhcmRzLCBldmVudCkge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgaWYgKCFkb21JRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNwYXRjaGluZyBpZCBtdXN0IG5vdCBiZSBudWxsJyk7XG4gICAgfVxuICB9XG4gIHZhciBwaGFzZSA9IHVwd2FyZHMgPyBQcm9wYWdhdGlvblBoYXNlcy5idWJibGVkIDogUHJvcGFnYXRpb25QaGFzZXMuY2FwdHVyZWQ7XG4gIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyQXRQaGFzZShkb21JRCwgZXZlbnQsIHBoYXNlKTtcbiAgaWYgKGxpc3RlbmVyKSB7XG4gICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID1cbiAgICAgIGFjY3VtdWxhdGVJbnRvKGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycywgbGlzdGVuZXIpO1xuICAgIGV2ZW50Ll9kaXNwYXRjaElEcyA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50Ll9kaXNwYXRjaElEcywgZG9tSUQpO1xuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdCBkaXNwYXRjaGVzIChtdXN0IGJlIGVudGlyZWx5IGNvbGxlY3RlZCBiZWZvcmUgZGlzcGF0Y2hpbmcgLSBzZWUgdW5pdFxuICogdGVzdHMpLiBMYXppbHkgYWxsb2NhdGUgdGhlIGFycmF5IHRvIGNvbnNlcnZlIG1lbW9yeS4gIFdlIG11c3QgbG9vcCB0aHJvdWdoXG4gKiBlYWNoIGV2ZW50IGFuZCBwZXJmb3JtIHRoZSB0cmF2ZXJzYWwgZm9yIGVhY2ggb25lLiBXZSBjYW4gbm90IHBlcmZvcm0gYVxuICogc2luZ2xlIHRyYXZlcnNhbCBmb3IgdGhlIGVudGlyZSBjb2xsZWN0aW9uIG9mIGV2ZW50cyBiZWNhdXNlIGVhY2ggZXZlbnQgbWF5XG4gKiBoYXZlIGEgZGlmZmVyZW50IHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZShldmVudCkge1xuICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICBFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uZ2V0SW5zdGFuY2VIYW5kbGUoKS50cmF2ZXJzZVR3b1BoYXNlKFxuICAgICAgZXZlbnQuZGlzcGF0Y2hNYXJrZXIsXG4gICAgICBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzLFxuICAgICAgZXZlbnRcbiAgICApO1xuICB9XG59XG5cblxuLyoqXG4gKiBBY2N1bXVsYXRlcyB3aXRob3V0IHJlZ2FyZCB0byBkaXJlY3Rpb24sIGRvZXMgbm90IGxvb2sgZm9yIHBoYXNlZFxuICogcmVnaXN0cmF0aW9uIG5hbWVzLiBTYW1lIGFzIGBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZWAgYnV0IHdpdGhvdXRcbiAqIHJlcXVpcmluZyB0aGF0IHRoZSBgZGlzcGF0Y2hNYXJrZXJgIGJlIHRoZSBzYW1lIGFzIHRoZSBkaXNwYXRjaGVkIElELlxuICovXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlzcGF0Y2hlcyhpZCwgaWdub3JlZERpcmVjdGlvbiwgZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaWQsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID1cbiAgICAgICAgYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gICAgICBldmVudC5fZGlzcGF0Y2hJRHMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hJRHMsIGlkKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2N1bXVsYXRlcyBkaXNwYXRjaGVzIG9uIGFuIGBTeW50aGV0aWNFdmVudGAsIGJ1dCBvbmx5IGZvciB0aGVcbiAqIGBkaXNwYXRjaE1hcmtlcmAuXG4gKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZShldmVudCkge1xuICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIGFjY3VtdWxhdGVEaXNwYXRjaGVzKGV2ZW50LmRpc3BhdGNoTWFya2VyLCBudWxsLCBldmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudHMpIHtcbiAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSk7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyhsZWF2ZSwgZW50ZXIsIGZyb21JRCwgdG9JRCkge1xuICBFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uZ2V0SW5zdGFuY2VIYW5kbGUoKS50cmF2ZXJzZUVudGVyTGVhdmUoXG4gICAgZnJvbUlELFxuICAgIHRvSUQsXG4gICAgYWNjdW11bGF0ZURpc3BhdGNoZXMsXG4gICAgbGVhdmUsXG4gICAgZW50ZXJcbiAgKTtcbn1cblxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyhldmVudHMpIHtcbiAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUpO1xufVxuXG5cblxuLyoqXG4gKiBBIHNtYWxsIHNldCBvZiBwcm9wYWdhdGlvbiBwYXR0ZXJucywgZWFjaCBvZiB3aGljaCB3aWxsIGFjY2VwdCBhIHNtYWxsIGFtb3VudFxuICogb2YgaW5mb3JtYXRpb24sIGFuZCBnZW5lcmF0ZSBhIHNldCBvZiBcImRpc3BhdGNoIHJlYWR5IGV2ZW50IG9iamVjdHNcIiAtIHdoaWNoXG4gKiBhcmUgc2V0cyBvZiBldmVudHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhbm5vdGF0ZWQgd2l0aCBhIHNldCBvZiBkaXNwYXRjaGVkXG4gKiBsaXN0ZW5lciBmdW5jdGlvbnMvaWRzLiBUaGUgQVBJIGlzIGRlc2lnbmVkIHRoaXMgd2F5IHRvIGRpc2NvdXJhZ2UgdGhlc2VcbiAqIHByb3BhZ2F0aW9uIHN0cmF0ZWdpZXMgZnJvbSBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGRpc3BhdGNoZXMsIHNpbmNlIHdlXG4gKiBhbHdheXMgd2FudCB0byBjb2xsZWN0IHRoZSBlbnRpcmUgc2V0IG9mIGRpc3BhdGNoZXMgYmVmb3JlIGV4ZWN1dGluZyBldmVudCBhXG4gKiBzaW5nbGUgb25lLlxuICpcbiAqIEBjb25zdHJ1Y3RvciBFdmVudFByb3BhZ2F0b3JzXG4gKi9cbnZhciBFdmVudFByb3BhZ2F0b3JzID0ge1xuICBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzOiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzLFxuICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlczogYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMsXG4gIGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlczogYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50UHJvcGFnYXRvcnM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZSWFpsYm5SUWNtOXdZV2RoZEc5eWN5NXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JGZG1WdWRGQnliM0JoWjJGMGIzSnpYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnUlhabGJuUkRiMjV6ZEdGdWRITWdQU0J5WlhGMWFYSmxLRndpTGk5RmRtVnVkRU52Ym5OMFlXNTBjMXdpS1R0Y2JuWmhjaUJGZG1WdWRGQnNkV2RwYmtoMVlpQTlJSEpsY1hWcGNtVW9YQ0l1TDBWMlpXNTBVR3gxWjJsdVNIVmlYQ0lwTzF4dVhHNTJZWElnWVdOamRXMTFiR0YwWlVsdWRHOGdQU0J5WlhGMWFYSmxLRndpTGk5aFkyTjFiWFZzWVhSbFNXNTBiMXdpS1R0Y2JuWmhjaUJtYjNKRllXTm9RV05qZFcxMWJHRjBaV1FnUFNCeVpYRjFhWEpsS0Z3aUxpOW1iM0pGWVdOb1FXTmpkVzExYkdGMFpXUmNJaWs3WEc1Y2JuWmhjaUJRY205d1lXZGhkR2x2YmxCb1lYTmxjeUE5SUVWMlpXNTBRMjl1YzNSaGJuUnpMbEJ5YjNCaFoyRjBhVzl1VUdoaGMyVnpPMXh1ZG1GeUlHZGxkRXhwYzNSbGJtVnlJRDBnUlhabGJuUlFiSFZuYVc1SWRXSXVaMlYwVEdsemRHVnVaWEk3WEc1Y2JpOHFLbHh1SUNvZ1UyOXRaU0JsZG1WdWRDQjBlWEJsY3lCb1lYWmxJR0VnYm05MGFXOXVJRzltSUdScFptWmxjbVZ1ZENCeVpXZHBjM1J5WVhScGIyNGdibUZ0WlhNZ1ptOXlJR1JwWm1abGNtVnVkRnh1SUNvZ1hDSndhR0Z6WlhOY0lpQnZaaUJ3Y205d1lXZGhkR2x2Ymk0Z1ZHaHBjeUJtYVc1a2N5QnNhWE4wWlc1bGNuTWdZbmtnWVNCbmFYWmxiaUJ3YUdGelpTNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2JHbHpkR1Z1WlhKQmRGQm9ZWE5sS0dsa0xDQmxkbVZ1ZEN3Z2NISnZjR0ZuWVhScGIyNVFhR0Z6WlNrZ2UxeHVJQ0IyWVhJZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNBOVhHNGdJQ0FnWlhabGJuUXVaR2x6Y0dGMFkyaERiMjVtYVdjdWNHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE5iY0hKdmNHRm5ZWFJwYjI1UWFHRnpaVjA3WEc0Z0lISmxkSFZ5YmlCblpYUk1hWE4wWlc1bGNpaHBaQ3dnY21WbmFYTjBjbUYwYVc5dVRtRnRaU2s3WEc1OVhHNWNiaThxS2x4dUlDb2dWR0ZuY3lCaElHQlRlVzUwYUdWMGFXTkZkbVZ1ZEdBZ2QybDBhQ0JrYVhOd1lYUmphR1ZrSUd4cGMzUmxibVZ5Y3k0Z1EzSmxZWFJwYm1jZ2RHaHBjeUJtZFc1amRHbHZibHh1SUNvZ2FHVnlaU3dnWVd4c2IzZHpJSFZ6SUhSdklHNXZkQ0JvWVhabElIUnZJR0pwYm1RZ2IzSWdZM0psWVhSbElHWjFibU4wYVc5dWN5Qm1iM0lnWldGamFDQmxkbVZ1ZEM1Y2JpQXFJRTExZEdGMGFXNW5JSFJvWlNCbGRtVnVkQ2R6SUcxbGJXSmxjbk1nWVd4c2IzZHpJSFZ6SUhSdklHNXZkQ0JvWVhabElIUnZJR055WldGMFpTQmhJSGR5WVhCd2FXNW5YRzRnS2lCY0ltUnBjM0JoZEdOb1hDSWdiMkpxWldOMElIUm9ZWFFnY0dGcGNuTWdkR2hsSUdWMlpXNTBJSGRwZEdnZ2RHaGxJR3hwYzNSbGJtVnlMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQmhZMk4xYlhWc1lYUmxSR2x5WldOMGFXOXVZV3hFYVhOd1lYUmphR1Z6S0dSdmJVbEVMQ0IxY0hkaGNtUnpMQ0JsZG1WdWRDa2dlMXh1SUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnYVdZZ0tDRmtiMjFKUkNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkRWFYTndZWFJqYUdsdVp5QnBaQ0J0ZFhOMElHNXZkQ0JpWlNCdWRXeHNKeWs3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSFpoY2lCd2FHRnpaU0E5SUhWd2QyRnlaSE1nUHlCUWNtOXdZV2RoZEdsdmJsQm9ZWE5sY3k1aWRXSmliR1ZrSURvZ1VISnZjR0ZuWVhScGIyNVFhR0Z6WlhNdVkyRndkSFZ5WldRN1hHNGdJSFpoY2lCc2FYTjBaVzVsY2lBOUlHeHBjM1JsYm1WeVFYUlFhR0Z6WlNoa2IyMUpSQ3dnWlhabGJuUXNJSEJvWVhObEtUdGNiaUFnYVdZZ0tHeHBjM1JsYm1WeUtTQjdYRzRnSUNBZ1pYWmxiblF1WDJScGMzQmhkR05vVEdsemRHVnVaWEp6SUQxY2JpQWdJQ0FnSUdGalkzVnRkV3hoZEdWSmJuUnZLR1YyWlc1MExsOWthWE53WVhSamFFeHBjM1JsYm1WeWN5d2diR2x6ZEdWdVpYSXBPMXh1SUNBZ0lHVjJaVzUwTGw5a2FYTndZWFJqYUVsRWN5QTlJR0ZqWTNWdGRXeGhkR1ZKYm5SdktHVjJaVzUwTGw5a2FYTndZWFJqYUVsRWN5d2daRzl0U1VRcE8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dRMjlzYkdWamRDQmthWE53WVhSamFHVnpJQ2h0ZFhOMElHSmxJR1Z1ZEdseVpXeDVJR052Ykd4bFkzUmxaQ0JpWldadmNtVWdaR2x6Y0dGMFkyaHBibWNnTFNCelpXVWdkVzVwZEZ4dUlDb2dkR1Z6ZEhNcExpQk1ZWHBwYkhrZ1lXeHNiMk5oZEdVZ2RHaGxJR0Z5Y21GNUlIUnZJR052Ym5ObGNuWmxJRzFsYlc5eWVTNGdJRmRsSUcxMWMzUWdiRzl2Y0NCMGFISnZkV2RvWEc0Z0tpQmxZV05vSUdWMlpXNTBJR0Z1WkNCd1pYSm1iM0p0SUhSb1pTQjBjbUYyWlhKellXd2dabTl5SUdWaFkyZ2diMjVsTGlCWFpTQmpZVzRnYm05MElIQmxjbVp2Y20wZ1lWeHVJQ29nYzJsdVoyeGxJSFJ5WVhabGNuTmhiQ0JtYjNJZ2RHaGxJR1Z1ZEdseVpTQmpiMnhzWldOMGFXOXVJRzltSUdWMlpXNTBjeUJpWldOaGRYTmxJR1ZoWTJnZ1pYWmxiblFnYldGNVhHNGdLaUJvWVhabElHRWdaR2xtWm1WeVpXNTBJSFJoY21kbGRDNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1lXTmpkVzExYkdGMFpWUjNiMUJvWVhObFJHbHpjR0YwWTJobGMxTnBibWRzWlNobGRtVnVkQ2tnZTF4dUlDQnBaaUFvWlhabGJuUWdKaVlnWlhabGJuUXVaR2x6Y0dGMFkyaERiMjVtYVdjdWNHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE1wSUh0Y2JpQWdJQ0JGZG1WdWRGQnNkV2RwYmtoMVlpNXBibXBsWTNScGIyNHVaMlYwU1c1emRHRnVZMlZJWVc1a2JHVW9LUzUwY21GMlpYSnpaVlIzYjFCb1lYTmxLRnh1SUNBZ0lDQWdaWFpsYm5RdVpHbHpjR0YwWTJoTllYSnJaWElzWEc0Z0lDQWdJQ0JoWTJOMWJYVnNZWFJsUkdseVpXTjBhVzl1WVd4RWFYTndZWFJqYUdWekxGeHVJQ0FnSUNBZ1pYWmxiblJjYmlBZ0lDQXBPMXh1SUNCOVhHNTlYRzVjYmx4dUx5b3FYRzRnS2lCQlkyTjFiWFZzWVhSbGN5QjNhWFJvYjNWMElISmxaMkZ5WkNCMGJ5QmthWEpsWTNScGIyNHNJR1J2WlhNZ2JtOTBJR3h2YjJzZ1ptOXlJSEJvWVhObFpGeHVJQ29nY21WbmFYTjBjbUYwYVc5dUlHNWhiV1Z6TGlCVFlXMWxJR0Z6SUdCaFkyTjFiWFZzWVhSbFJHbHlaV04wUkdsemNHRjBZMmhsYzFOcGJtZHNaV0FnWW5WMElIZHBkR2h2ZFhSY2JpQXFJSEpsY1hWcGNtbHVaeUIwYUdGMElIUm9aU0JnWkdsemNHRjBZMmhOWVhKclpYSmdJR0psSUhSb1pTQnpZVzFsSUdGeklIUm9aU0JrYVhOd1lYUmphR1ZrSUVsRUxseHVJQ292WEc1bWRXNWpkR2x2YmlCaFkyTjFiWFZzWVhSbFJHbHpjR0YwWTJobGN5aHBaQ3dnYVdkdWIzSmxaRVJwY21WamRHbHZiaXdnWlhabGJuUXBJSHRjYmlBZ2FXWWdLR1YyWlc1MElDWW1JR1YyWlc1MExtUnBjM0JoZEdOb1EyOXVabWxuTG5KbFoybHpkSEpoZEdsdmJrNWhiV1VwSUh0Y2JpQWdJQ0IyWVhJZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNBOUlHVjJaVzUwTG1ScGMzQmhkR05vUTI5dVptbG5MbkpsWjJsemRISmhkR2x2Yms1aGJXVTdYRzRnSUNBZ2RtRnlJR3hwYzNSbGJtVnlJRDBnWjJWMFRHbHpkR1Z1WlhJb2FXUXNJSEpsWjJsemRISmhkR2x2Yms1aGJXVXBPMXh1SUNBZ0lHbG1JQ2hzYVhOMFpXNWxjaWtnZTF4dUlDQWdJQ0FnWlhabGJuUXVYMlJwYzNCaGRHTm9UR2x6ZEdWdVpYSnpJRDFjYmlBZ0lDQWdJQ0FnWVdOamRXMTFiR0YwWlVsdWRHOG9aWFpsYm5RdVgyUnBjM0JoZEdOb1RHbHpkR1Z1WlhKekxDQnNhWE4wWlc1bGNpazdYRzRnSUNBZ0lDQmxkbVZ1ZEM1ZlpHbHpjR0YwWTJoSlJITWdQU0JoWTJOMWJYVnNZWFJsU1c1MGJ5aGxkbVZ1ZEM1ZlpHbHpjR0YwWTJoSlJITXNJR2xrS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibjFjYmx4dUx5b3FYRzRnS2lCQlkyTjFiWFZzWVhSbGN5QmthWE53WVhSamFHVnpJRzl1SUdGdUlHQlRlVzUwYUdWMGFXTkZkbVZ1ZEdBc0lHSjFkQ0J2Ym14NUlHWnZjaUIwYUdWY2JpQXFJR0JrYVhOd1lYUmphRTFoY210bGNtQXVYRzRnS2lCQWNHRnlZVzBnZTFONWJuUm9aWFJwWTBWMlpXNTBmU0JsZG1WdWRGeHVJQ292WEc1bWRXNWpkR2x2YmlCaFkyTjFiWFZzWVhSbFJHbHlaV04wUkdsemNHRjBZMmhsYzFOcGJtZHNaU2hsZG1WdWRDa2dlMXh1SUNCcFppQW9aWFpsYm5RZ0ppWWdaWFpsYm5RdVpHbHpjR0YwWTJoRGIyNW1hV2N1Y21WbmFYTjBjbUYwYVc5dVRtRnRaU2tnZTF4dUlDQWdJR0ZqWTNWdGRXeGhkR1ZFYVhOd1lYUmphR1Z6S0dWMlpXNTBMbVJwYzNCaGRHTm9UV0Z5YTJWeUxDQnVkV3hzTENCbGRtVnVkQ2s3WEc0Z0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z1lXTmpkVzExYkdGMFpWUjNiMUJvWVhObFJHbHpjR0YwWTJobGN5aGxkbVZ1ZEhNcElIdGNiaUFnWm05eVJXRmphRUZqWTNWdGRXeGhkR1ZrS0dWMlpXNTBjeXdnWVdOamRXMTFiR0YwWlZSM2IxQm9ZWE5sUkdsemNHRjBZMmhsYzFOcGJtZHNaU2s3WEc1OVhHNWNibVoxYm1OMGFXOXVJR0ZqWTNWdGRXeGhkR1ZGYm5SbGNreGxZWFpsUkdsemNHRjBZMmhsY3loc1pXRjJaU3dnWlc1MFpYSXNJR1p5YjIxSlJDd2dkRzlKUkNrZ2UxeHVJQ0JGZG1WdWRGQnNkV2RwYmtoMVlpNXBibXBsWTNScGIyNHVaMlYwU1c1emRHRnVZMlZJWVc1a2JHVW9LUzUwY21GMlpYSnpaVVZ1ZEdWeVRHVmhkbVVvWEc0Z0lDQWdabkp2YlVsRUxGeHVJQ0FnSUhSdlNVUXNYRzRnSUNBZ1lXTmpkVzExYkdGMFpVUnBjM0JoZEdOb1pYTXNYRzRnSUNBZ2JHVmhkbVVzWEc0Z0lDQWdaVzUwWlhKY2JpQWdLVHRjYm4xY2JseHVYRzVtZFc1amRHbHZiaUJoWTJOMWJYVnNZWFJsUkdseVpXTjBSR2x6Y0dGMFkyaGxjeWhsZG1WdWRITXBJSHRjYmlBZ1ptOXlSV0ZqYUVGalkzVnRkV3hoZEdWa0tHVjJaVzUwY3l3Z1lXTmpkVzExYkdGMFpVUnBjbVZqZEVScGMzQmhkR05vWlhOVGFXNW5iR1VwTzF4dWZWeHVYRzVjYmx4dUx5b3FYRzRnS2lCQklITnRZV3hzSUhObGRDQnZaaUJ3Y205d1lXZGhkR2x2YmlCd1lYUjBaWEp1Y3l3Z1pXRmphQ0J2WmlCM2FHbGphQ0IzYVd4c0lHRmpZMlZ3ZENCaElITnRZV3hzSUdGdGIzVnVkRnh1SUNvZ2IyWWdhVzVtYjNKdFlYUnBiMjRzSUdGdVpDQm5aVzVsY21GMFpTQmhJSE5sZENCdlppQmNJbVJwYzNCaGRHTm9JSEpsWVdSNUlHVjJaVzUwSUc5aWFtVmpkSE5jSWlBdElIZG9hV05vWEc0Z0tpQmhjbVVnYzJWMGN5QnZaaUJsZG1WdWRITWdkR2hoZENCb1lYWmxJR0ZzY21WaFpIa2dZbVZsYmlCaGJtNXZkR0YwWldRZ2QybDBhQ0JoSUhObGRDQnZaaUJrYVhOd1lYUmphR1ZrWEc0Z0tpQnNhWE4wWlc1bGNpQm1kVzVqZEdsdmJuTXZhV1J6TGlCVWFHVWdRVkJKSUdseklHUmxjMmxuYm1Wa0lIUm9hWE1nZDJGNUlIUnZJR1JwYzJOdmRYSmhaMlVnZEdobGMyVmNiaUFxSUhCeWIzQmhaMkYwYVc5dUlITjBjbUYwWldkcFpYTWdabkp2YlNCaFkzUjFZV3hzZVNCbGVHVmpkWFJwYm1jZ2RHaGxJR1JwYzNCaGRHTm9aWE1zSUhOcGJtTmxJSGRsWEc0Z0tpQmhiSGRoZVhNZ2QyRnVkQ0IwYnlCamIyeHNaV04wSUhSb1pTQmxiblJwY21VZ2MyVjBJRzltSUdScGMzQmhkR05vWlhNZ1ltVm1iM0psSUdWNFpXTjFkR2x1WnlCbGRtVnVkQ0JoWEc0Z0tpQnphVzVuYkdVZ2IyNWxMbHh1SUNwY2JpQXFJRUJqYjI1emRISjFZM1J2Y2lCRmRtVnVkRkJ5YjNCaFoyRjBiM0p6WEc0Z0tpOWNiblpoY2lCRmRtVnVkRkJ5YjNCaFoyRjBiM0p6SUQwZ2UxeHVJQ0JoWTJOMWJYVnNZWFJsVkhkdlVHaGhjMlZFYVhOd1lYUmphR1Z6T2lCaFkyTjFiWFZzWVhSbFZIZHZVR2hoYzJWRWFYTndZWFJqYUdWekxGeHVJQ0JoWTJOMWJYVnNZWFJsUkdseVpXTjBSR2x6Y0dGMFkyaGxjem9nWVdOamRXMTFiR0YwWlVScGNtVmpkRVJwYzNCaGRHTm9aWE1zWEc0Z0lHRmpZM1Z0ZFd4aGRHVkZiblJsY2t4bFlYWmxSR2x6Y0dGMFkyaGxjem9nWVdOamRXMTFiR0YwWlVWdWRHVnlUR1ZoZG1WRWFYTndZWFJqYUdWelhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUVWMlpXNTBVSEp2Y0dGbllYUnZjbk03WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXhlY3V0aW9uRW52aXJvbm1lbnRcbiAqL1xuXG4vKmpzbGludCBldmlsOiB0cnVlICovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgY2FuVXNlRE9NID0gISEoXG4gICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpXG4pO1xuXG4vKipcbiAqIFNpbXBsZSwgbGlnaHR3ZWlnaHQgbW9kdWxlIGFzc2lzdGluZyB3aXRoIHRoZSBkZXRlY3Rpb24gYW5kIGNvbnRleHQgb2ZcbiAqIFdvcmtlci4gSGVscHMgYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBhbGxvd3MgY29kZSB0byByZWFzb24gYWJvdXRcbiAqIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGluIGEgV29ya2VyLCBldmVuIGlmIHRoZXkgbmV2ZXIgaW5jbHVkZSB0aGUgbWFpblxuICogYFJlYWN0V29ya2VyYCBkZXBlbmRlbmN5LlxuICovXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSB7XG5cbiAgY2FuVXNlRE9NOiBjYW5Vc2VET00sXG5cbiAgY2FuVXNlV29ya2VyczogdHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcsXG5cbiAgY2FuVXNlRXZlbnRMaXN0ZW5lcnM6XG4gICAgY2FuVXNlRE9NICYmICEhKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8IHdpbmRvdy5hdHRhY2hFdmVudCksXG5cbiAgY2FuVXNlVmlld3BvcnQ6IGNhblVzZURPTSAmJiAhIXdpbmRvdy5zY3JlZW4sXG5cbiAgaXNJbldvcmtlcjogIWNhblVzZURPTSAvLyBGb3Igbm93LCB0aGlzIGlzIHRydWUgLSBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFeGVjdXRpb25FbnZpcm9ubWVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGVcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZ2V0VGV4dENvbnRlbnRBY2Nlc3NvciA9IHJlcXVpcmUoXCIuL2dldFRleHRDb250ZW50QWNjZXNzb3JcIik7XG5cbi8qKlxuICogVGhpcyBoZWxwZXIgY2xhc3Mgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHRleHQgY29udGVudCBvZiBhIHRhcmdldCBub2RlLFxuICogYWxsb3dpbmcgY29tcGFyaXNvbiBvZiBjb250ZW50IGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBJZGVudGlmeSB0aGUgbm9kZSB3aGVyZSBzZWxlY3Rpb24gY3VycmVudGx5IGJlZ2lucywgdGhlbiBvYnNlcnZlXG4gKiBib3RoIGl0cyB0ZXh0IGNvbnRlbnQgYW5kIGl0cyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBET00uIFNpbmNlIHRoZVxuICogYnJvd3NlciBtYXkgbmF0aXZlbHkgcmVwbGFjZSB0aGUgdGFyZ2V0IG5vZGUgZHVyaW5nIGNvbXBvc2l0aW9uLCB3ZSBjYW5cbiAqIHVzZSBpdHMgcG9zaXRpb24gdG8gZmluZCBpdHMgcmVwbGFjZW1lbnQuXG4gKlxuICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gcm9vdFxuICovXG5mdW5jdGlvbiBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUocm9vdCkge1xuICB0aGlzLl9yb290ID0gcm9vdDtcbiAgdGhpcy5fc3RhcnRUZXh0ID0gdGhpcy5nZXRUZXh0KCk7XG4gIHRoaXMuX2ZhbGxiYWNrVGV4dCA9IG51bGw7XG59XG5cbmFzc2lnbihGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUucHJvdG90eXBlLCB7XG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB0ZXh0IG9mIGlucHV0LlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBnZXRUZXh0OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoJ3ZhbHVlJyBpbiB0aGlzLl9yb290KSB7XG4gICAgICByZXR1cm4gdGhpcy5fcm9vdC52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3RbZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcigpXTtcbiAgfSxcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBkaWZmZXJpbmcgc3Vic3RyaW5nIGJldHdlZW4gdGhlIGluaXRpYWxseSBzdG9yZWRcbiAgICogdGV4dCBjb250ZW50IGFuZCB0aGUgY3VycmVudCBjb250ZW50LlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBnZXREYXRhOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fZmFsbGJhY2tUZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmFsbGJhY2tUZXh0O1xuICAgIH1cblxuICAgIHZhciBzdGFydDtcbiAgICB2YXIgc3RhcnRWYWx1ZSA9IHRoaXMuX3N0YXJ0VGV4dDtcbiAgICB2YXIgc3RhcnRMZW5ndGggPSBzdGFydFZhbHVlLmxlbmd0aDtcbiAgICB2YXIgZW5kO1xuICAgIHZhciBlbmRWYWx1ZSA9IHRoaXMuZ2V0VGV4dCgpO1xuICAgIHZhciBlbmRMZW5ndGggPSBlbmRWYWx1ZS5sZW5ndGg7XG5cbiAgICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBzdGFydExlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRdICE9PSBlbmRWYWx1ZVtzdGFydF0pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1pbkVuZCA9IHN0YXJ0TGVuZ3RoIC0gc3RhcnQ7XG4gICAgZm9yIChlbmQgPSAxOyBlbmQgPD0gbWluRW5kOyBlbmQrKykge1xuICAgICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRMZW5ndGggLSBlbmRdICE9PSBlbmRWYWx1ZVtlbmRMZW5ndGggLSBlbmRdKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzbGljZVRhaWwgPSBlbmQgPiAxID8gMSAtIGVuZCA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9mYWxsYmFja1RleHQgPSBlbmRWYWx1ZS5zbGljZShzdGFydCwgc2xpY2VUYWlsKTtcbiAgICByZXR1cm4gdGhpcy5fZmFsbGJhY2tUZXh0O1xuICB9XG59KTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEhUTUxET01Qcm9wZXJ0eUNvbmZpZ1xuICovXG5cbi8qanNsaW50IGJpdHdpc2U6IHRydWUqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5XCIpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBNVVNUX1VTRV9BVFRSSUJVVEUgPSBET01Qcm9wZXJ0eS5pbmplY3Rpb24uTVVTVF9VU0VfQVRUUklCVVRFO1xudmFyIE1VU1RfVVNFX1BST1BFUlRZID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLk1VU1RfVVNFX1BST1BFUlRZO1xudmFyIEhBU19CT09MRUFOX1ZBTFVFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19CT09MRUFOX1ZBTFVFO1xudmFyIEhBU19TSURFX0VGRkVDVFMgPSBET01Qcm9wZXJ0eS5pbmplY3Rpb24uSEFTX1NJREVfRUZGRUNUUztcbnZhciBIQVNfTlVNRVJJQ19WQUxVRSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfTlVNRVJJQ19WQUxVRTtcbnZhciBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSA9XG4gIERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRTtcbnZhciBIQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFID1cbiAgRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUU7XG5cbnZhciBoYXNTVkc7XG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIHZhciBpbXBsZW1lbnRhdGlvbiA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uO1xuICBoYXNTVkcgPSAoXG4gICAgaW1wbGVtZW50YXRpb24gJiZcbiAgICBpbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlICYmXG4gICAgaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZShcbiAgICAgICdodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0Jhc2ljU3RydWN0dXJlJyxcbiAgICAgICcxLjEnXG4gICAgKVxuICApO1xufVxuXG5cbnZhciBIVE1MRE9NUHJvcGVydHlDb25maWcgPSB7XG4gIGlzQ3VzdG9tQXR0cmlidXRlOiBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZChcbiAgICAvXihkYXRhfGFyaWEpLVthLXpfXVthLXpcXGRfLlxcLV0qJC9cbiAgKSxcbiAgUHJvcGVydGllczoge1xuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIFByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBhY2NlcHQ6IG51bGwsXG4gICAgYWNjZXB0Q2hhcnNldDogbnVsbCxcbiAgICBhY2Nlc3NLZXk6IG51bGwsXG4gICAgYWN0aW9uOiBudWxsLFxuICAgIGFsbG93RnVsbFNjcmVlbjogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgYWxsb3dUcmFuc3BhcmVuY3k6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBhbHQ6IG51bGwsXG4gICAgYXN5bmM6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGF1dG9Db21wbGV0ZTogbnVsbCxcbiAgICAvLyBhdXRvRm9jdXMgaXMgcG9seWZpbGxlZC9ub3JtYWxpemVkIGJ5IEF1dG9Gb2N1c01peGluXG4gICAgLy8gYXV0b0ZvY3VzOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBhdXRvUGxheTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgY2VsbFBhZGRpbmc6IG51bGwsXG4gICAgY2VsbFNwYWNpbmc6IG51bGwsXG4gICAgY2hhclNldDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGNoZWNrZWQ6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgY2xhc3NJRDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIC8vIFRvIHNldCBjbGFzc05hbWUgb24gU1ZHIGVsZW1lbnRzLCBpdCdzIG5lY2Vzc2FyeSB0byB1c2UgLnNldEF0dHJpYnV0ZTtcbiAgICAvLyB0aGlzIHdvcmtzIG9uIEhUTUwgZWxlbWVudHMgdG9vIGluIGFsbCBicm93c2VycyBleGNlcHQgSUU4LiBDb252ZW5pZW50bHksXG4gICAgLy8gSUU4IGRvZXNuJ3Qgc3VwcG9ydCBTVkcgYW5kIHNvIHdlIGNhbiBzaW1wbHkgdXNlIHRoZSBhdHRyaWJ1dGUgaW5cbiAgICAvLyBicm93c2VycyB0aGF0IHN1cHBvcnQgU1ZHIGFuZCB0aGUgcHJvcGVydHkgaW4gYnJvd3NlcnMgdGhhdCBkb24ndCxcbiAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgSFRNTCBvciBTVkcuXG4gICAgY2xhc3NOYW1lOiBoYXNTVkcgPyBNVVNUX1VTRV9BVFRSSUJVVEUgOiBNVVNUX1VTRV9QUk9QRVJUWSxcbiAgICBjb2xzOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgICBjb2xTcGFuOiBudWxsLFxuICAgIGNvbnRlbnQ6IG51bGwsXG4gICAgY29udGVudEVkaXRhYmxlOiBudWxsLFxuICAgIGNvbnRleHRNZW51OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgY29udHJvbHM6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgY29vcmRzOiBudWxsLFxuICAgIGNyb3NzT3JpZ2luOiBudWxsLFxuICAgIGRhdGE6IG51bGwsIC8vIEZvciBgPG9iamVjdCAvPmAgYWN0cyBhcyBgc3JjYC5cbiAgICBkYXRlVGltZTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGRlZmVyOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBkaXI6IG51bGwsXG4gICAgZGlzYWJsZWQ6IE1VU1RfVVNFX0FUVFJJQlVURSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGRvd25sb2FkOiBIQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFLFxuICAgIGRyYWdnYWJsZTogbnVsbCxcbiAgICBlbmNUeXBlOiBudWxsLFxuICAgIGZvcm06IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmb3JtQWN0aW9uOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZm9ybUVuY1R5cGU6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmb3JtTWV0aG9kOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZm9ybU5vVmFsaWRhdGU6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGZvcm1UYXJnZXQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmcmFtZUJvcmRlcjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGhlYWRlcnM6IG51bGwsXG4gICAgaGVpZ2h0OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgaGlkZGVuOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBoaWdoOiBudWxsLFxuICAgIGhyZWY6IG51bGwsXG4gICAgaHJlZkxhbmc6IG51bGwsXG4gICAgaHRtbEZvcjogbnVsbCxcbiAgICBodHRwRXF1aXY6IG51bGwsXG4gICAgaWNvbjogbnVsbCxcbiAgICBpZDogTVVTVF9VU0VfUFJPUEVSVFksXG4gICAgbGFiZWw6IG51bGwsXG4gICAgbGFuZzogbnVsbCxcbiAgICBsaXN0OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbG9vcDogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBsb3c6IG51bGwsXG4gICAgbWFuaWZlc3Q6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBtYXJnaW5IZWlnaHQ6IG51bGwsXG4gICAgbWFyZ2luV2lkdGg6IG51bGwsXG4gICAgbWF4OiBudWxsLFxuICAgIG1heExlbmd0aDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIG1lZGlhOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbWVkaWFHcm91cDogbnVsbCxcbiAgICBtZXRob2Q6IG51bGwsXG4gICAgbWluOiBudWxsLFxuICAgIG11bHRpcGxlOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG11dGVkOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG5hbWU6IG51bGwsXG4gICAgbm9WYWxpZGF0ZTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgb3BlbjogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgb3B0aW11bTogbnVsbCxcbiAgICBwYXR0ZXJuOiBudWxsLFxuICAgIHBsYWNlaG9sZGVyOiBudWxsLFxuICAgIHBvc3RlcjogbnVsbCxcbiAgICBwcmVsb2FkOiBudWxsLFxuICAgIHJhZGlvR3JvdXA6IG51bGwsXG4gICAgcmVhZE9ubHk6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgcmVsOiBudWxsLFxuICAgIHJlcXVpcmVkOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICByb2xlOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgcm93czogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgcm93U3BhbjogbnVsbCxcbiAgICBzYW5kYm94OiBudWxsLFxuICAgIHNjb3BlOiBudWxsLFxuICAgIHNjb3BlZDogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgc2Nyb2xsaW5nOiBudWxsLFxuICAgIHNlYW1sZXNzOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBzZWxlY3RlZDogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBzaGFwZTogbnVsbCxcbiAgICBzaXplOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgICBzaXplczogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHNwYW46IEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICAgIHNwZWxsQ2hlY2s6IG51bGwsXG4gICAgc3JjOiBudWxsLFxuICAgIHNyY0RvYzogTVVTVF9VU0VfUFJPUEVSVFksXG4gICAgc3JjU2V0OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3RhcnQ6IEhBU19OVU1FUklDX1ZBTFVFLFxuICAgIHN0ZXA6IG51bGwsXG4gICAgc3R5bGU6IG51bGwsXG4gICAgdGFiSW5kZXg6IG51bGwsXG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIHRpdGxlOiBudWxsLFxuICAgIHR5cGU6IG51bGwsXG4gICAgdXNlTWFwOiBudWxsLFxuICAgIHZhbHVlOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19TSURFX0VGRkVDVFMsXG4gICAgd2lkdGg6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB3bW9kZTogTVVTVF9VU0VfQVRUUklCVVRFLFxuXG4gICAgLyoqXG4gICAgICogTm9uLXN0YW5kYXJkIFByb3BlcnRpZXNcbiAgICAgKi9cbiAgICAvLyBhdXRvQ2FwaXRhbGl6ZSBhbmQgYXV0b0NvcnJlY3QgYXJlIHN1cHBvcnRlZCBpbiBNb2JpbGUgU2FmYXJpIGZvclxuICAgIC8vIGtleWJvYXJkIGhpbnRzLlxuICAgIGF1dG9DYXBpdGFsaXplOiBudWxsLFxuICAgIGF1dG9Db3JyZWN0OiBudWxsLFxuICAgIC8vIGl0ZW1Qcm9wLCBpdGVtU2NvcGUsIGl0ZW1UeXBlIGFyZSBmb3JcbiAgICAvLyBNaWNyb2RhdGEgc3VwcG9ydC4gU2VlIGh0dHA6Ly9zY2hlbWEub3JnL2RvY3MvZ3MuaHRtbFxuICAgIGl0ZW1Qcm9wOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgaXRlbVNjb3BlOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBpdGVtVHlwZTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIC8vIGl0ZW1JRCBhbmQgaXRlbVJlZiBhcmUgZm9yIE1pY3JvZGF0YSBzdXBwb3J0IGFzIHdlbGwgYnV0XG4gICAgLy8gb25seSBzcGVjaWZpZWQgaW4gdGhlIHRoZSBXSEFUV0cgc3BlYyBkb2N1bWVudC4gU2VlXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvbWljcm9kYXRhLmh0bWwjbWljcm9kYXRhLWRvbS1hcGlcbiAgICBpdGVtSUQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBpdGVtUmVmOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgLy8gcHJvcGVydHkgaXMgc3VwcG9ydGVkIGZvciBPcGVuR3JhcGggaW4gbWV0YSB0YWdzLlxuICAgIHByb3BlcnR5OiBudWxsLFxuICAgIC8vIElFLW9ubHkgYXR0cmlidXRlIHRoYXQgY29udHJvbHMgZm9jdXMgYmVoYXZpb3JcbiAgICB1bnNlbGVjdGFibGU6IE1VU1RfVVNFX0FUVFJJQlVURVxuICB9LFxuICBET01BdHRyaWJ1dGVOYW1lczoge1xuICAgIGFjY2VwdENoYXJzZXQ6ICdhY2NlcHQtY2hhcnNldCcsXG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGh0bWxGb3I6ICdmb3InLFxuICAgIGh0dHBFcXVpdjogJ2h0dHAtZXF1aXYnXG4gIH0sXG4gIERPTVByb3BlcnR5TmFtZXM6IHtcbiAgICBhdXRvQ2FwaXRhbGl6ZTogJ2F1dG9jYXBpdGFsaXplJyxcbiAgICBhdXRvQ29tcGxldGU6ICdhdXRvY29tcGxldGUnLFxuICAgIGF1dG9Db3JyZWN0OiAnYXV0b2NvcnJlY3QnLFxuICAgIGF1dG9Gb2N1czogJ2F1dG9mb2N1cycsXG4gICAgYXV0b1BsYXk6ICdhdXRvcGxheScsXG4gICAgLy8gYGVuY29kaW5nYCBpcyBlcXVpdmFsZW50IHRvIGBlbmN0eXBlYCwgSUU4IGxhY2tzIGFuIGBlbmN0eXBlYCBzZXR0ZXIuXG4gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZm9ybXMuaHRtbCNkb20tZnMtZW5jb2RpbmdcbiAgICBlbmNUeXBlOiAnZW5jb2RpbmcnLFxuICAgIGhyZWZMYW5nOiAnaHJlZmxhbmcnLFxuICAgIHJhZGlvR3JvdXA6ICdyYWRpb2dyb3VwJyxcbiAgICBzcGVsbENoZWNrOiAnc3BlbGxjaGVjaycsXG4gICAgc3JjRG9jOiAnc3JjZG9jJyxcbiAgICBzcmNTZXQ6ICdzcmNzZXQnXG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSFRNTERPTVByb3BlcnR5Q29uZmlnO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBMaW5rZWRWYWx1ZVV0aWxzXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZXNcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBoYXNSZWFkT25seVZhbHVlID0ge1xuICAnYnV0dG9uJzogdHJ1ZSxcbiAgJ2NoZWNrYm94JzogdHJ1ZSxcbiAgJ2ltYWdlJzogdHJ1ZSxcbiAgJ2hpZGRlbic6IHRydWUsXG4gICdyYWRpbyc6IHRydWUsXG4gICdyZXNldCc6IHRydWUsXG4gICdzdWJtaXQnOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBfYXNzZXJ0U2luZ2xlTGluayhpbnB1dCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGlucHV0LnByb3BzLmNoZWNrZWRMaW5rID09IG51bGwgfHwgaW5wdXQucHJvcHMudmFsdWVMaW5rID09IG51bGwsXG4gICAgJ0Nhbm5vdCBwcm92aWRlIGEgY2hlY2tlZExpbmsgYW5kIGEgdmFsdWVMaW5rLiBJZiB5b3Ugd2FudCB0byB1c2UgJyArXG4gICAgJ2NoZWNrZWRMaW5rLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVzZSB2YWx1ZUxpbmsgYW5kIHZpY2UgdmVyc2EuJ1xuICApIDogaW52YXJpYW50KGlucHV0LnByb3BzLmNoZWNrZWRMaW5rID09IG51bGwgfHwgaW5wdXQucHJvcHMudmFsdWVMaW5rID09IG51bGwpKTtcbn1cbmZ1bmN0aW9uIF9hc3NlcnRWYWx1ZUxpbmsoaW5wdXQpIHtcbiAgX2Fzc2VydFNpbmdsZUxpbmsoaW5wdXQpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGlucHV0LnByb3BzLnZhbHVlID09IG51bGwgJiYgaW5wdXQucHJvcHMub25DaGFuZ2UgPT0gbnVsbCxcbiAgICAnQ2Fubm90IHByb3ZpZGUgYSB2YWx1ZUxpbmsgYW5kIGEgdmFsdWUgb3Igb25DaGFuZ2UgZXZlbnQuIElmIHlvdSB3YW50ICcgK1xuICAgICd0byB1c2UgdmFsdWUgb3Igb25DaGFuZ2UsIHlvdSBwcm9iYWJseSBkb25cXCd0IHdhbnQgdG8gdXNlIHZhbHVlTGluay4nXG4gICkgOiBpbnZhcmlhbnQoaW5wdXQucHJvcHMudmFsdWUgPT0gbnVsbCAmJiBpbnB1dC5wcm9wcy5vbkNoYW5nZSA9PSBudWxsKSk7XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRDaGVja2VkTGluayhpbnB1dCkge1xuICBfYXNzZXJ0U2luZ2xlTGluayhpbnB1dCk7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgaW5wdXQucHJvcHMuY2hlY2tlZCA9PSBudWxsICYmIGlucHV0LnByb3BzLm9uQ2hhbmdlID09IG51bGwsXG4gICAgJ0Nhbm5vdCBwcm92aWRlIGEgY2hlY2tlZExpbmsgYW5kIGEgY2hlY2tlZCBwcm9wZXJ0eSBvciBvbkNoYW5nZSBldmVudC4gJyArXG4gICAgJ0lmIHlvdSB3YW50IHRvIHVzZSBjaGVja2VkIG9yIG9uQ2hhbmdlLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvICcgK1xuICAgICd1c2UgY2hlY2tlZExpbmsnXG4gICkgOiBpbnZhcmlhbnQoaW5wdXQucHJvcHMuY2hlY2tlZCA9PSBudWxsICYmIGlucHV0LnByb3BzLm9uQ2hhbmdlID09IG51bGwpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBlIGNoYW5nZSBldmVudCB0byBoYW5kbGVcbiAqL1xuZnVuY3Rpb24gX2hhbmRsZUxpbmtlZFZhbHVlQ2hhbmdlKGUpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdGhpcy5wcm9wcy52YWx1ZUxpbmsucmVxdWVzdENoYW5nZShlLnRhcmdldC52YWx1ZSk7XG59XG5cbi8qKlxuICAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGUgY2hhbmdlIGV2ZW50IHRvIGhhbmRsZVxuICAqL1xuZnVuY3Rpb24gX2hhbmRsZUxpbmtlZENoZWNrQ2hhbmdlKGUpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdGhpcy5wcm9wcy5jaGVja2VkTGluay5yZXF1ZXN0Q2hhbmdlKGUudGFyZ2V0LmNoZWNrZWQpO1xufVxuXG4vKipcbiAqIFByb3ZpZGUgYSBsaW5rZWQgYHZhbHVlYCBhdHRyaWJ1dGUgZm9yIGNvbnRyb2xsZWQgZm9ybXMuIFlvdSBzaG91bGQgbm90IHVzZVxuICogdGhpcyBvdXRzaWRlIG9mIHRoZSBSZWFjdERPTSBjb250cm9sbGVkIGZvcm0gY29tcG9uZW50cy5cbiAqL1xudmFyIExpbmtlZFZhbHVlVXRpbHMgPSB7XG4gIE1peGluOiB7XG4gICAgcHJvcFR5cGVzOiB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgICAgIGlmICghcHJvcHNbcHJvcE5hbWVdIHx8XG4gICAgICAgICAgICBoYXNSZWFkT25seVZhbHVlW3Byb3BzLnR5cGVdIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkNoYW5nZSB8fFxuICAgICAgICAgICAgcHJvcHMucmVhZE9ubHkgfHxcbiAgICAgICAgICAgIHByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgICAnWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgK1xuICAgICAgICAgICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgK1xuICAgICAgICAgICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsICcgK1xuICAgICAgICAgICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgY2hlY2tlZDogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgICAgIGlmICghcHJvcHNbcHJvcE5hbWVdIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkNoYW5nZSB8fFxuICAgICAgICAgICAgcHJvcHMucmVhZE9ubHkgfHxcbiAgICAgICAgICAgIHByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgICAnWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArXG4gICAgICAgICAgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArXG4gICAgICAgICAgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCAnICtcbiAgICAgICAgICAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJ1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9uQ2hhbmdlOiBSZWFjdFByb3BUeXBlcy5mdW5jXG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBpbnB1dCBGb3JtIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHsqfSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpbnB1dCBlaXRoZXIgZnJvbSB2YWx1ZSBwcm9wIG9yIGxpbmsuXG4gICAqL1xuICBnZXRWYWx1ZTogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQucHJvcHMudmFsdWVMaW5rKSB7XG4gICAgICBfYXNzZXJ0VmFsdWVMaW5rKGlucHV0KTtcbiAgICAgIHJldHVybiBpbnB1dC5wcm9wcy52YWx1ZUxpbmsudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC5wcm9wcy52YWx1ZTtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW5wdXQgRm9ybSBjb21wb25lbnRcbiAgICogQHJldHVybiB7Kn0gY3VycmVudCBjaGVja2VkIHN0YXR1cyBvZiB0aGUgaW5wdXQgZWl0aGVyIGZyb20gY2hlY2tlZCBwcm9wXG4gICAqICAgICAgICAgICAgIG9yIGxpbmsuXG4gICAqL1xuICBnZXRDaGVja2VkOiBmdW5jdGlvbihpbnB1dCkge1xuICAgIGlmIChpbnB1dC5wcm9wcy5jaGVja2VkTGluaykge1xuICAgICAgX2Fzc2VydENoZWNrZWRMaW5rKGlucHV0KTtcbiAgICAgIHJldHVybiBpbnB1dC5wcm9wcy5jaGVja2VkTGluay52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0LnByb3BzLmNoZWNrZWQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGlucHV0IEZvcm0gY29tcG9uZW50XG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBjaGFuZ2UgY2FsbGJhY2sgZWl0aGVyIGZyb20gb25DaGFuZ2UgcHJvcCBvciBsaW5rLlxuICAgKi9cbiAgZ2V0T25DaGFuZ2U6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnByb3BzLnZhbHVlTGluaykge1xuICAgICAgX2Fzc2VydFZhbHVlTGluayhpbnB1dCk7XG4gICAgICByZXR1cm4gX2hhbmRsZUxpbmtlZFZhbHVlQ2hhbmdlO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQucHJvcHMuY2hlY2tlZExpbmspIHtcbiAgICAgIF9hc3NlcnRDaGVja2VkTGluayhpbnB1dCk7XG4gICAgICByZXR1cm4gX2hhbmRsZUxpbmtlZENoZWNrQ2hhbmdlO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQucHJvcHMub25DaGFuZ2U7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTGlua2VkVmFsdWVVdGlscztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlRHbHVhMlZrVm1Gc2RXVlZkR2xzY3k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1RHbHVhMlZrVm1Gc2RXVlZkR2xzYzF4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEZCeWIzQlVlWEJsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFVISnZjRlI1Y0dWelhDSXBPMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc1MllYSWdhR0Z6VW1WaFpFOXViSGxXWVd4MVpTQTlJSHRjYmlBZ0oySjFkSFJ2YmljNklIUnlkV1VzWEc0Z0lDZGphR1ZqYTJKdmVDYzZJSFJ5ZFdVc1hHNGdJQ2RwYldGblpTYzZJSFJ5ZFdVc1hHNGdJQ2RvYVdSa1pXNG5PaUIwY25WbExGeHVJQ0FuY21Ga2FXOG5PaUIwY25WbExGeHVJQ0FuY21WelpYUW5PaUIwY25WbExGeHVJQ0FuYzNWaWJXbDBKem9nZEhKMVpWeHVmVHRjYmx4dVpuVnVZM1JwYjI0Z1gyRnpjMlZ5ZEZOcGJtZHNaVXhwYm1zb2FXNXdkWFFwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCcGJuQjFkQzV3Y205d2N5NWphR1ZqYTJWa1RHbHVheUE5UFNCdWRXeHNJSHg4SUdsdWNIVjBMbkJ5YjNCekxuWmhiSFZsVEdsdWF5QTlQU0J1ZFd4c0xGeHVJQ0FnSUNkRFlXNXViM1FnY0hKdmRtbGtaU0JoSUdOb1pXTnJaV1JNYVc1cklHRnVaQ0JoSUhaaGJIVmxUR2x1YXk0Z1NXWWdlVzkxSUhkaGJuUWdkRzhnZFhObElDY2dLMXh1SUNBZ0lDZGphR1ZqYTJWa1RHbHVheXdnZVc5MUlIQnliMkpoWW14NUlHUnZibHhjSjNRZ2QyRnVkQ0IwYnlCMWMyVWdkbUZzZFdWTWFXNXJJR0Z1WkNCMmFXTmxJSFpsY25OaExpZGNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaHBibkIxZEM1d2NtOXdjeTVqYUdWamEyVmtUR2x1YXlBOVBTQnVkV3hzSUh4OElHbHVjSFYwTG5CeWIzQnpMblpoYkhWbFRHbHVheUE5UFNCdWRXeHNLU2s3WEc1OVhHNW1kVzVqZEdsdmJpQmZZWE56WlhKMFZtRnNkV1ZNYVc1cktHbHVjSFYwS1NCN1hHNGdJRjloYzNObGNuUlRhVzVuYkdWTWFXNXJLR2x1Y0hWMEtUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQnBibkIxZEM1d2NtOXdjeTUyWVd4MVpTQTlQU0J1ZFd4c0lDWW1JR2x1Y0hWMExuQnliM0J6TG05dVEyaGhibWRsSUQwOUlHNTFiR3dzWEc0Z0lDQWdKME5oYm01dmRDQndjbTkyYVdSbElHRWdkbUZzZFdWTWFXNXJJR0Z1WkNCaElIWmhiSFZsSUc5eUlHOXVRMmhoYm1kbElHVjJaVzUwTGlCSlppQjViM1VnZDJGdWRDQW5JQ3RjYmlBZ0lDQW5kRzhnZFhObElIWmhiSFZsSUc5eUlHOXVRMmhoYm1kbExDQjViM1VnY0hKdlltRmliSGtnWkc5dVhGd25kQ0IzWVc1MElIUnZJSFZ6WlNCMllXeDFaVXhwYm1zdUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHbHVjSFYwTG5CeWIzQnpMblpoYkhWbElEMDlJRzUxYkd3Z0ppWWdhVzV3ZFhRdWNISnZjSE11YjI1RGFHRnVaMlVnUFQwZ2JuVnNiQ2twTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJmWVhOelpYSjBRMmhsWTJ0bFpFeHBibXNvYVc1d2RYUXBJSHRjYmlBZ1gyRnpjMlZ5ZEZOcGJtZHNaVXhwYm1zb2FXNXdkWFFwTzF4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUdsdWNIVjBMbkJ5YjNCekxtTm9aV05yWldRZ1BUMGdiblZzYkNBbUppQnBibkIxZEM1d2NtOXdjeTV2YmtOb1lXNW5aU0E5UFNCdWRXeHNMRnh1SUNBZ0lDZERZVzV1YjNRZ2NISnZkbWxrWlNCaElHTm9aV05yWldSTWFXNXJJR0Z1WkNCaElHTm9aV05yWldRZ2NISnZjR1Z5ZEhrZ2IzSWdiMjVEYUdGdVoyVWdaWFpsYm5RdUlDY2dLMXh1SUNBZ0lDZEpaaUI1YjNVZ2QyRnVkQ0IwYnlCMWMyVWdZMmhsWTJ0bFpDQnZjaUJ2YmtOb1lXNW5aU3dnZVc5MUlIQnliMkpoWW14NUlHUnZibHhjSjNRZ2QyRnVkQ0IwYnlBbklDdGNiaUFnSUNBbmRYTmxJR05vWldOclpXUk1hVzVySjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0dsdWNIVjBMbkJ5YjNCekxtTm9aV05yWldRZ1BUMGdiblZzYkNBbUppQnBibkIxZEM1d2NtOXdjeTV2YmtOb1lXNW5aU0E5UFNCdWRXeHNLU2s3WEc1OVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdFRlVzUwYUdWMGFXTkZkbVZ1ZEgwZ1pTQmphR0Z1WjJVZ1pYWmxiblFnZEc4Z2FHRnVaR3hsWEc0Z0tpOWNibVoxYm1OMGFXOXVJRjlvWVc1a2JHVk1hVzVyWldSV1lXeDFaVU5vWVc1blpTaGxLU0I3WEc0Z0lDOHFhbk5vYVc1MElIWmhiR2xrZEdocGN6cDBjblZsSUNvdlhHNGdJSFJvYVhNdWNISnZjSE11ZG1Gc2RXVk1hVzVyTG5KbGNYVmxjM1JEYUdGdVoyVW9aUzUwWVhKblpYUXVkbUZzZFdVcE8xeHVmVnh1WEc0dktpcGNiaUFnS2lCQWNHRnlZVzBnZTFONWJuUm9aWFJwWTBWMlpXNTBmU0JsSUdOb1lXNW5aU0JsZG1WdWRDQjBieUJvWVc1a2JHVmNiaUFnS2k5Y2JtWjFibU4wYVc5dUlGOW9ZVzVrYkdWTWFXNXJaV1JEYUdWamEwTm9ZVzVuWlNobEtTQjdYRzRnSUM4cWFuTm9hVzUwSUhaaGJHbGtkR2hwY3pwMGNuVmxJQ292WEc0Z0lIUm9hWE11Y0hKdmNITXVZMmhsWTJ0bFpFeHBibXN1Y21WeGRXVnpkRU5vWVc1blpTaGxMblJoY21kbGRDNWphR1ZqYTJWa0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCUWNtOTJhV1JsSUdFZ2JHbHVhMlZrSUdCMllXeDFaV0FnWVhSMGNtbGlkWFJsSUdadmNpQmpiMjUwY205c2JHVmtJR1p2Y20xekxpQlpiM1VnYzJodmRXeGtJRzV2ZENCMWMyVmNiaUFxSUhSb2FYTWdiM1YwYzJsa1pTQnZaaUIwYUdVZ1VtVmhZM1JFVDAwZ1kyOXVkSEp2Ykd4bFpDQm1iM0p0SUdOdmJYQnZibVZ1ZEhNdVhHNGdLaTljYm5aaGNpQk1hVzVyWldSV1lXeDFaVlYwYVd4eklEMGdlMXh1SUNCTmFYaHBiam9nZTF4dUlDQWdJSEJ5YjNCVWVYQmxjem9nZTF4dUlDQWdJQ0FnZG1Gc2RXVTZJR1oxYm1OMGFXOXVLSEJ5YjNCekxDQndjbTl3VG1GdFpTd2dZMjl0Y0c5dVpXNTBUbUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVhCeWIzQnpXM0J5YjNCT1lXMWxYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdhR0Z6VW1WaFpFOXViSGxXWVd4MVpWdHdjbTl3Y3k1MGVYQmxYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdjSEp2Y0hNdWIyNURhR0Z1WjJVZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUhCeWIzQnpMbkpsWVdSUGJteDVJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQndjbTl3Y3k1a2FYTmhZbXhsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lDQWdKMWx2ZFNCd2NtOTJhV1JsWkNCaElHQjJZV3gxWldBZ2NISnZjQ0IwYnlCaElHWnZjbTBnWm1sbGJHUWdkMmwwYUc5MWRDQmhiaUFuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5ZRzl1UTJoaGJtZGxZQ0JvWVc1a2JHVnlMaUJVYUdseklIZHBiR3dnY21WdVpHVnlJR0VnY21WaFpDMXZibXg1SUdacFpXeGtMaUJKWmlBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuZEdobElHWnBaV3hrSUhOb2IzVnNaQ0JpWlNCdGRYUmhZbXhsSUhWelpTQmdaR1ZtWVhWc2RGWmhiSFZsWUM0Z1QzUm9aWEozYVhObExDQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBbmMyVjBJR1ZwZEdobGNpQmdiMjVEYUdGdVoyVmdJRzl5SUdCeVpXRmtUMjVzZVdBdUoxeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdmU3hjYmlBZ0lDQWdJR05vWldOclpXUTZJR1oxYm1OMGFXOXVLSEJ5YjNCekxDQndjbTl3VG1GdFpTd2dZMjl0Y0c5dVpXNTBUbUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVhCeWIzQnpXM0J5YjNCT1lXMWxYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdjSEp2Y0hNdWIyNURhR0Z1WjJVZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUhCeWIzQnpMbkpsWVdSUGJteDVJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQndjbTl3Y3k1a2FYTmhZbXhsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lDQWdKMWx2ZFNCd2NtOTJhV1JsWkNCaElHQmphR1ZqYTJWa1lDQndjbTl3SUhSdklHRWdabTl5YlNCbWFXVnNaQ0IzYVhSb2IzVjBJR0Z1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2RnYjI1RGFHRnVaMlZnSUdoaGJtUnNaWEl1SUZSb2FYTWdkMmxzYkNCeVpXNWtaWElnWVNCeVpXRmtMVzl1YkhrZ1ptbGxiR1F1SUVsbUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkMGFHVWdabWxsYkdRZ2MyaHZkV3hrSUdKbElHMTFkR0ZpYkdVZ2RYTmxJR0JrWldaaGRXeDBRMmhsWTJ0bFpHQXVJRTkwYUdWeWQybHpaU3dnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM05sZENCbGFYUm9aWElnWUc5dVEyaGhibWRsWUNCdmNpQmdjbVZoWkU5dWJIbGdMaWRjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCdmJrTm9ZVzVuWlRvZ1VtVmhZM1JRY205d1ZIbHdaWE11Wm5WdVkxeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ2FXNXdkWFFnUm05eWJTQmpiMjF3YjI1bGJuUmNiaUFnSUNvZ1FISmxkSFZ5YmlCN0tuMGdZM1Z5Y21WdWRDQjJZV3gxWlNCdlppQjBhR1VnYVc1d2RYUWdaV2wwYUdWeUlHWnliMjBnZG1Gc2RXVWdjSEp2Y0NCdmNpQnNhVzVyTGx4dUlDQWdLaTljYmlBZ1oyVjBWbUZzZFdVNklHWjFibU4wYVc5dUtHbHVjSFYwS1NCN1hHNGdJQ0FnYVdZZ0tHbHVjSFYwTG5CeWIzQnpMblpoYkhWbFRHbHVheWtnZTF4dUlDQWdJQ0FnWDJGemMyVnlkRlpoYkhWbFRHbHVheWhwYm5CMWRDazdYRzRnSUNBZ0lDQnlaWFIxY200Z2FXNXdkWFF1Y0hKdmNITXVkbUZzZFdWTWFXNXJMblpoYkhWbE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdhVzV3ZFhRdWNISnZjSE11ZG1Gc2RXVTdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUkRiMjF3YjI1bGJuUjlJR2x1Y0hWMElFWnZjbTBnWTI5dGNHOXVaVzUwWEc0Z0lDQXFJRUJ5WlhSMWNtNGdleXA5SUdOMWNuSmxiblFnWTJobFkydGxaQ0J6ZEdGMGRYTWdiMllnZEdobElHbHVjSFYwSUdWcGRHaGxjaUJtY205dElHTm9aV05yWldRZ2NISnZjRnh1SUNBZ0tpQWdJQ0FnSUNBZ0lDQWdJQ0J2Y2lCc2FXNXJMbHh1SUNBZ0tpOWNiaUFnWjJWMFEyaGxZMnRsWkRvZ1puVnVZM1JwYjI0b2FXNXdkWFFwSUh0Y2JpQWdJQ0JwWmlBb2FXNXdkWFF1Y0hKdmNITXVZMmhsWTJ0bFpFeHBibXNwSUh0Y2JpQWdJQ0FnSUY5aGMzTmxjblJEYUdWamEyVmtUR2x1YXlocGJuQjFkQ2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhVzV3ZFhRdWNISnZjSE11WTJobFkydGxaRXhwYm1zdWRtRnNkV1U3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCcGJuQjFkQzV3Y205d2N5NWphR1ZqYTJWa08xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQnBibkIxZENCR2IzSnRJR052YlhCdmJtVnVkRnh1SUNBZ0tpQkFjbVYwZFhKdUlIdG1kVzVqZEdsdmJuMGdZMmhoYm1kbElHTmhiR3hpWVdOcklHVnBkR2hsY2lCbWNtOXRJRzl1UTJoaGJtZGxJSEJ5YjNBZ2IzSWdiR2x1YXk1Y2JpQWdJQ292WEc0Z0lHZGxkRTl1UTJoaGJtZGxPaUJtZFc1amRHbHZiaWhwYm5CMWRDa2dlMXh1SUNBZ0lHbG1JQ2hwYm5CMWRDNXdjbTl3Y3k1MllXeDFaVXhwYm1zcElIdGNiaUFnSUNBZ0lGOWhjM05sY25SV1lXeDFaVXhwYm1zb2FXNXdkWFFwTzF4dUlDQWdJQ0FnY21WMGRYSnVJRjlvWVc1a2JHVk1hVzVyWldSV1lXeDFaVU5vWVc1blpUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHbHVjSFYwTG5CeWIzQnpMbU5vWldOclpXUk1hVzVyS1NCN1hHNGdJQ0FnSUNCZllYTnpaWEowUTJobFkydGxaRXhwYm1zb2FXNXdkWFFwTzF4dUlDQWdJQ0FnY21WMGRYSnVJRjlvWVc1a2JHVk1hVzVyWldSRGFHVmphME5vWVc1blpUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR2x1Y0hWMExuQnliM0J6TG05dVEyaGhibWRsTzF4dUlDQjlYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlFeHBibXRsWkZaaGJIVmxWWFJwYkhNN1hHNGlYWDA9IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBMb2NhbEV2ZW50VHJhcE1peGluXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXCIpO1xuXG52YXIgYWNjdW11bGF0ZUludG8gPSByZXF1aXJlKFwiLi9hY2N1bXVsYXRlSW50b1wiKTtcbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSByZXF1aXJlKFwiLi9mb3JFYWNoQWNjdW11bGF0ZWRcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG5mdW5jdGlvbiByZW1vdmUoZXZlbnQpIHtcbiAgZXZlbnQucmVtb3ZlKCk7XG59XG5cbnZhciBMb2NhbEV2ZW50VHJhcE1peGluID0ge1xuICB0cmFwQnViYmxlZEV2ZW50OmZ1bmN0aW9uKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudCh0aGlzLmlzTW91bnRlZCgpLCAnTXVzdCBiZSBtb3VudGVkIHRvIHRyYXAgZXZlbnRzJykgOiBpbnZhcmlhbnQodGhpcy5pc01vdW50ZWQoKSkpO1xuICAgIC8vIElmIGEgY29tcG9uZW50IHJlbmRlcnMgdG8gbnVsbCBvciBpZiBhbm90aGVyIGNvbXBvbmVudCBmYXRhbHMgYW5kIGNhdXNlc1xuICAgIC8vIHRoZSBzdGF0ZSBvZiB0aGUgdHJlZSB0byBiZSBjb3JydXB0ZWQsIGBub2RlYCBoZXJlIGNhbiBiZSBudWxsLlxuICAgIHZhciBub2RlID0gdGhpcy5nZXRET01Ob2RlKCk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIG5vZGUsXG4gICAgICAnTG9jYWxFdmVudFRyYXBNaXhpbi50cmFwQnViYmxlZEV2ZW50KC4uLik6IFJlcXVpcmVzIG5vZGUgdG8gYmUgcmVuZGVyZWQuJ1xuICAgICkgOiBpbnZhcmlhbnQobm9kZSkpO1xuICAgIHZhciBsaXN0ZW5lciA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgaGFuZGxlckJhc2VOYW1lLFxuICAgICAgbm9kZVxuICAgICk7XG4gICAgdGhpcy5fbG9jYWxFdmVudExpc3RlbmVycyA9XG4gICAgICBhY2N1bXVsYXRlSW50byh0aGlzLl9sb2NhbEV2ZW50TGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH0sXG5cbiAgLy8gdHJhcENhcHR1cmVkRXZlbnQgd291bGQgbG9vayBuZWFybHkgaWRlbnRpY2FsLiBXZSBkb24ndCBpbXBsZW1lbnQgdGhhdFxuICAvLyBtZXRob2QgYmVjYXVzZSBpdCBpc24ndCBjdXJyZW50bHkgbmVlZGVkLlxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OmZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9sb2NhbEV2ZW50TGlzdGVuZXJzKSB7XG4gICAgICBmb3JFYWNoQWNjdW11bGF0ZWQodGhpcy5fbG9jYWxFdmVudExpc3RlbmVycywgcmVtb3ZlKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTG9jYWxFdmVudFRyYXBNaXhpbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlRHOWpZV3hGZG1WdWRGUnlZWEJOYVhocGJpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERTBMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdURzlqWVd4RmRtVnVkRlJ5WVhCTmFYaHBibHh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUZKbFlXTjBRbkp2ZDNObGNrVjJaVzUwUlcxcGRIUmxjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUW5KdmQzTmxja1YyWlc1MFJXMXBkSFJsY2x3aUtUdGNibHh1ZG1GeUlHRmpZM1Z0ZFd4aGRHVkpiblJ2SUQwZ2NtVnhkV2x5WlNoY0lpNHZZV05qZFcxMWJHRjBaVWx1ZEc5Y0lpazdYRzUyWVhJZ1ptOXlSV0ZqYUVGalkzVnRkV3hoZEdWa0lEMGdjbVZ4ZFdseVpTaGNJaTR2Wm05eVJXRmphRUZqWTNWdGRXeGhkR1ZrWENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVablZ1WTNScGIyNGdjbVZ0YjNabEtHVjJaVzUwS1NCN1hHNGdJR1YyWlc1MExuSmxiVzkyWlNncE8xeHVmVnh1WEc1MllYSWdURzlqWVd4RmRtVnVkRlJ5WVhCTmFYaHBiaUE5SUh0Y2JpQWdkSEpoY0VKMVltSnNaV1JGZG1WdWREcG1kVzVqZEdsdmJpaDBiM0JNWlhabGJGUjVjR1VzSUdoaGJtUnNaWEpDWVhObFRtRnRaU2tnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9kR2hwY3k1cGMwMXZkVzUwWldRb0tTd2dKMDExYzNRZ1ltVWdiVzkxYm5SbFpDQjBieUIwY21Gd0lHVjJaVzUwY3ljcElEb2dhVzUyWVhKcFlXNTBLSFJvYVhNdWFYTk5iM1Z1ZEdWa0tDa3BLVHRjYmlBZ0lDQXZMeUJKWmlCaElHTnZiWEJ2Ym1WdWRDQnlaVzVrWlhKeklIUnZJRzUxYkd3Z2IzSWdhV1lnWVc1dmRHaGxjaUJqYjIxd2IyNWxiblFnWm1GMFlXeHpJR0Z1WkNCallYVnpaWE5jYmlBZ0lDQXZMeUIwYUdVZ2MzUmhkR1VnYjJZZ2RHaGxJSFJ5WldVZ2RHOGdZbVVnWTI5eWNuVndkR1ZrTENCZ2JtOWtaV0FnYUdWeVpTQmpZVzRnWW1VZ2JuVnNiQzVjYmlBZ0lDQjJZWElnYm05a1pTQTlJSFJvYVhNdVoyVjBSRTlOVG05a1pTZ3BPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCdWIyUmxMRnh1SUNBZ0lDQWdKMHh2WTJGc1JYWmxiblJVY21Gd1RXbDRhVzR1ZEhKaGNFSjFZbUpzWldSRmRtVnVkQ2d1TGk0cE9pQlNaWEYxYVhKbGN5QnViMlJsSUhSdklHSmxJSEpsYm1SbGNtVmtMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0c1dlpHVXBLVHRjYmlBZ0lDQjJZWElnYkdsemRHVnVaWElnUFNCU1pXRmpkRUp5YjNkelpYSkZkbVZ1ZEVWdGFYUjBaWEl1ZEhKaGNFSjFZbUpzWldSRmRtVnVkQ2hjYmlBZ0lDQWdJSFJ2Y0V4bGRtVnNWSGx3WlN4Y2JpQWdJQ0FnSUdoaGJtUnNaWEpDWVhObFRtRnRaU3hjYmlBZ0lDQWdJRzV2WkdWY2JpQWdJQ0FwTzF4dUlDQWdJSFJvYVhNdVgyeHZZMkZzUlhabGJuUk1hWE4wWlc1bGNuTWdQVnh1SUNBZ0lDQWdZV05qZFcxMWJHRjBaVWx1ZEc4b2RHaHBjeTVmYkc5allXeEZkbVZ1ZEV4cGMzUmxibVZ5Y3l3Z2JHbHpkR1Z1WlhJcE8xeHVJQ0I5TEZ4dVhHNGdJQzh2SUhSeVlYQkRZWEIwZFhKbFpFVjJaVzUwSUhkdmRXeGtJR3h2YjJzZ2JtVmhjbXg1SUdsa1pXNTBhV05oYkM0Z1YyVWdaRzl1SjNRZ2FXMXdiR1Z0Wlc1MElIUm9ZWFJjYmlBZ0x5OGdiV1YwYUc5a0lHSmxZMkYxYzJVZ2FYUWdhWE51SjNRZ1kzVnljbVZ1ZEd4NUlHNWxaV1JsWkM1Y2JseHVJQ0JqYjIxd2IyNWxiblJYYVd4c1ZXNXRiM1Z1ZERwbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCcFppQW9kR2hwY3k1ZmJHOWpZV3hGZG1WdWRFeHBjM1JsYm1WeWN5a2dlMXh1SUNBZ0lDQWdabTl5UldGamFFRmpZM1Z0ZFd4aGRHVmtLSFJvYVhNdVgyeHZZMkZzUlhabGJuUk1hWE4wWlc1bGNuTXNJSEpsYlc5MlpTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRXh2WTJGc1JYWmxiblJVY21Gd1RXbDRhVzQ3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpblxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcblxuLyoqXG4gKiBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvbiBub24taW50ZXJhY3RpdmVcbiAqIGVsZW1lbnRzLCB3aGljaCBtZWFucyBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXJzIGRvIG5vdCBmaXJlLiBUaGUgd29ya2Fyb3VuZFxuICogZm9yIHRoaXMgYnVnIGludm9sdmVzIGF0dGFjaGluZyBhbiBlbXB0eSBjbGljayBsaXN0ZW5lciBvbiB0aGUgdGFyZ2V0IG5vZGUuXG4gKlxuICogVGhpcyBwYXJ0aWN1bGFyIHBsdWdpbiB3b3JrcyBhcm91bmQgdGhlIGJ1ZyBieSBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2tcbiAqIGxpc3RlbmVyIG9uIGB0b3VjaHN0YXJ0YCAod2hpY2ggZG9lcyBmaXJlIG9uIGV2ZXJ5IGVsZW1lbnQpLlxuICovXG52YXIgTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbiA9IHtcblxuICBldmVudFR5cGVzOiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuZXh0cmFjdEV2ZW50c31cbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnQpIHtcbiAgICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoU3RhcnQpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQ7XG4gICAgICBpZiAodGFyZ2V0ICYmICF0YXJnZXQub25jbGljaykge1xuICAgICAgICB0YXJnZXQub25jbGljayA9IGVtcHR5RnVuY3Rpb247XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBPYmplY3QuYXNzaWduXG4gKi9cblxuLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLW9iamVjdC5hc3NpZ25cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2VzKSB7XG4gIGlmICh0YXJnZXQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gdGFyZ2V0IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICB9XG5cbiAgdmFyIHRvID0gT2JqZWN0KHRhcmdldCk7XG4gIHZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbiAgZm9yICh2YXIgbmV4dEluZGV4ID0gMTsgbmV4dEluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgbmV4dEluZGV4KyspIHtcbiAgICB2YXIgbmV4dFNvdXJjZSA9IGFyZ3VtZW50c1tuZXh0SW5kZXhdO1xuICAgIGlmIChuZXh0U291cmNlID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBmcm9tID0gT2JqZWN0KG5leHRTb3VyY2UpO1xuXG4gICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgYWNjZXNzb3JzIG5vciBwcm94aWVzLiBUaGVyZWZvcmUgdGhpc1xuICAgIC8vIGNvcHkgY2Fubm90IHRocm93LiBJZiB3ZSBldmVyIHN1cHBvcnRlZCB0aGlzIHRoZW4gd2UgbXVzdCBoYW5kbGVcbiAgICAvLyBleGNlcHRpb25zIGFuZCBzaWRlLWVmZmVjdHMuIFdlIGRvbid0IHN1cHBvcnQgc3ltYm9scyBzbyB0aGV5IHdvbid0XG4gICAgLy8gYmUgdHJhbnNmZXJyZWQuXG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ247XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFBvb2xlZENsYXNzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIFN0YXRpYyBwb29sZXJzLiBTZXZlcmFsIGN1c3RvbSB2ZXJzaW9ucyBmb3IgZWFjaCBwb3RlbnRpYWwgbnVtYmVyIG9mXG4gKiBhcmd1bWVudHMuIEEgY29tcGxldGVseSBnZW5lcmljIHBvb2xlciBpcyBlYXN5IHRvIGltcGxlbWVudCwgYnV0IHdvdWxkXG4gKiByZXF1aXJlIGFjY2Vzc2luZyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBJbiBlYWNoIG9mIHRoZXNlLCBgdGhpc2AgcmVmZXJzIHRvXG4gKiB0aGUgQ2xhc3MgaXRzZWxmLCBub3QgYW4gaW5zdGFuY2UuIElmIGFueSBvdGhlcnMgYXJlIG5lZWRlZCwgc2ltcGx5IGFkZCB0aGVtXG4gKiBoZXJlLCBvciBpbiB0aGVpciBvd24gZmlsZXMuXG4gKi9cbnZhciBvbmVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uKGNvcHlGaWVsZHNGcm9tKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGNvcHlGaWVsZHNGcm9tKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhjb3B5RmllbGRzRnJvbSk7XG4gIH1cbn07XG5cbnZhciB0d29Bcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uKGExLCBhMikge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMik7XG4gIH1cbn07XG5cbnZhciB0aHJlZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24oYTEsIGEyLCBhMykge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIsIGEzKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzKTtcbiAgfVxufTtcblxudmFyIGZpdmVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uKGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIsIGEzLCBhNCwgYTUpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMsIGE0LCBhNSk7XG4gIH1cbn07XG5cbnZhciBzdGFuZGFyZFJlbGVhc2VyID0gZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBpbnN0YW5jZSBpbnN0YW5jZW9mIEtsYXNzLFxuICAgICdUcnlpbmcgdG8gcmVsZWFzZSBhbiBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLidcbiAgKSA6IGludmFyaWFudChpbnN0YW5jZSBpbnN0YW5jZW9mIEtsYXNzKSk7XG4gIGlmIChpbnN0YW5jZS5kZXN0cnVjdG9yKSB7XG4gICAgaW5zdGFuY2UuZGVzdHJ1Y3RvcigpO1xuICB9XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoIDwgS2xhc3MucG9vbFNpemUpIHtcbiAgICBLbGFzcy5pbnN0YW5jZVBvb2wucHVzaChpbnN0YW5jZSk7XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX1BPT0xfU0laRSA9IDEwO1xudmFyIERFRkFVTFRfUE9PTEVSID0gb25lQXJndW1lbnRQb29sZXI7XG5cbi8qKlxuICogQXVnbWVudHMgYENvcHlDb25zdHJ1Y3RvcmAgdG8gYmUgYSBwb29sYWJsZSBjbGFzcywgYXVnbWVudGluZyBvbmx5IHRoZSBjbGFzc1xuICogaXRzZWxmIChzdGF0aWNhbGx5KSBub3QgYWRkaW5nIGFueSBwcm90b3R5cGljYWwgZmllbGRzLiBBbnkgQ29weUNvbnN0cnVjdG9yXG4gKiB5b3UgZ2l2ZSB0aGlzIG1heSBoYXZlIGEgYHBvb2xTaXplYCBwcm9wZXJ0eSwgYW5kIHdpbGwgbG9vayBmb3IgYVxuICogcHJvdG90eXBpY2FsIGBkZXN0cnVjdG9yYCBvbiBpbnN0YW5jZXMgKG9wdGlvbmFsKS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBDb3B5Q29uc3RydWN0b3IgQ29uc3RydWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBvb2xlciBDdXN0b21pemFibGUgcG9vbGVyLlxuICovXG52YXIgYWRkUG9vbGluZ1RvID0gZnVuY3Rpb24oQ29weUNvbnN0cnVjdG9yLCBwb29sZXIpIHtcbiAgdmFyIE5ld0tsYXNzID0gQ29weUNvbnN0cnVjdG9yO1xuICBOZXdLbGFzcy5pbnN0YW5jZVBvb2wgPSBbXTtcbiAgTmV3S2xhc3MuZ2V0UG9vbGVkID0gcG9vbGVyIHx8IERFRkFVTFRfUE9PTEVSO1xuICBpZiAoIU5ld0tsYXNzLnBvb2xTaXplKSB7XG4gICAgTmV3S2xhc3MucG9vbFNpemUgPSBERUZBVUxUX1BPT0xfU0laRTtcbiAgfVxuICBOZXdLbGFzcy5yZWxlYXNlID0gc3RhbmRhcmRSZWxlYXNlcjtcbiAgcmV0dXJuIE5ld0tsYXNzO1xufTtcblxudmFyIFBvb2xlZENsYXNzID0ge1xuICBhZGRQb29saW5nVG86IGFkZFBvb2xpbmdUbyxcbiAgb25lQXJndW1lbnRQb29sZXI6IG9uZUFyZ3VtZW50UG9vbGVyLFxuICB0d29Bcmd1bWVudFBvb2xlcjogdHdvQXJndW1lbnRQb29sZXIsXG4gIHRocmVlQXJndW1lbnRQb29sZXI6IHRocmVlQXJndW1lbnRQb29sZXIsXG4gIGZpdmVBcmd1bWVudFBvb2xlcjogZml2ZUFyZ3VtZW50UG9vbGVyXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xlZENsYXNzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VUc5dmJHVmtRMnhoYzNNdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCUWIyOXNaV1JEYkdGemMxeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nY0c5dmJHVnljeTRnVTJWMlpYSmhiQ0JqZFhOMGIyMGdkbVZ5YzJsdmJuTWdabTl5SUdWaFkyZ2djRzkwWlc1MGFXRnNJRzUxYldKbGNpQnZabHh1SUNvZ1lYSm5kVzFsYm5SekxpQkJJR052YlhCc1pYUmxiSGtnWjJWdVpYSnBZeUJ3YjI5c1pYSWdhWE1nWldGemVTQjBieUJwYlhCc1pXMWxiblFzSUdKMWRDQjNiM1ZzWkZ4dUlDb2djbVZ4ZFdseVpTQmhZMk5sYzNOcGJtY2dkR2hsSUdCaGNtZDFiV1Z1ZEhOZ0lHOWlhbVZqZEM0Z1NXNGdaV0ZqYUNCdlppQjBhR1Z6WlN3Z1lIUm9hWE5nSUhKbFptVnljeUIwYjF4dUlDb2dkR2hsSUVOc1lYTnpJR2wwYzJWc1ppd2dibTkwSUdGdUlHbHVjM1JoYm1ObExpQkpaaUJoYm5rZ2IzUm9aWEp6SUdGeVpTQnVaV1ZrWldRc0lITnBiWEJzZVNCaFpHUWdkR2hsYlZ4dUlDb2dhR1Z5WlN3Z2IzSWdhVzRnZEdobGFYSWdiM2R1SUdacGJHVnpMbHh1SUNvdlhHNTJZWElnYjI1bFFYSm5kVzFsYm5SUWIyOXNaWElnUFNCbWRXNWpkR2x2YmloamIzQjVSbWxsYkdSelJuSnZiU2tnZTF4dUlDQjJZWElnUzJ4aGMzTWdQU0IwYUdsek8xeHVJQ0JwWmlBb1MyeGhjM011YVc1emRHRnVZMlZRYjI5c0xteGxibWQwYUNrZ2UxeHVJQ0FnSUhaaGNpQnBibk4wWVc1alpTQTlJRXRzWVhOekxtbHVjM1JoYm1ObFVHOXZiQzV3YjNBb0tUdGNiaUFnSUNCTGJHRnpjeTVqWVd4c0tHbHVjM1JoYm1ObExDQmpiM0I1Um1sbGJHUnpSbkp2YlNrN1hHNGdJQ0FnY21WMGRYSnVJR2x1YzNSaGJtTmxPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnUzJ4aGMzTW9ZMjl3ZVVacFpXeGtjMFp5YjIwcE8xeHVJQ0I5WEc1OU8xeHVYRzUyWVhJZ2RIZHZRWEpuZFcxbGJuUlFiMjlzWlhJZ1BTQm1kVzVqZEdsdmJpaGhNU3dnWVRJcElIdGNiaUFnZG1GeUlFdHNZWE56SUQwZ2RHaHBjenRjYmlBZ2FXWWdLRXRzWVhOekxtbHVjM1JoYm1ObFVHOXZiQzVzWlc1bmRHZ3BJSHRjYmlBZ0lDQjJZWElnYVc1emRHRnVZMlVnUFNCTGJHRnpjeTVwYm5OMFlXNWpaVkJ2YjJ3dWNHOXdLQ2s3WEc0Z0lDQWdTMnhoYzNNdVkyRnNiQ2hwYm5OMFlXNWpaU3dnWVRFc0lHRXlLVHRjYmlBZ0lDQnlaWFIxY200Z2FXNXpkR0Z1WTJVN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QkxiR0Z6Y3loaE1Td2dZVElwTzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnZEdoeVpXVkJjbWQxYldWdWRGQnZiMnhsY2lBOUlHWjFibU4wYVc5dUtHRXhMQ0JoTWl3Z1lUTXBJSHRjYmlBZ2RtRnlJRXRzWVhOeklEMGdkR2hwY3p0Y2JpQWdhV1lnS0V0c1lYTnpMbWx1YzNSaGJtTmxVRzl2YkM1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IyWVhJZ2FXNXpkR0Z1WTJVZ1BTQkxiR0Z6Y3k1cGJuTjBZVzVqWlZCdmIyd3VjRzl3S0NrN1hHNGdJQ0FnUzJ4aGMzTXVZMkZzYkNocGJuTjBZVzVqWlN3Z1lURXNJR0V5TENCaE15azdYRzRnSUNBZ2NtVjBkWEp1SUdsdWMzUmhibU5sTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1MyeGhjM01vWVRFc0lHRXlMQ0JoTXlrN1hHNGdJSDFjYm4wN1hHNWNiblpoY2lCbWFYWmxRWEpuZFcxbGJuUlFiMjlzWlhJZ1BTQm1kVzVqZEdsdmJpaGhNU3dnWVRJc0lHRXpMQ0JoTkN3Z1lUVXBJSHRjYmlBZ2RtRnlJRXRzWVhOeklEMGdkR2hwY3p0Y2JpQWdhV1lnS0V0c1lYTnpMbWx1YzNSaGJtTmxVRzl2YkM1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IyWVhJZ2FXNXpkR0Z1WTJVZ1BTQkxiR0Z6Y3k1cGJuTjBZVzVqWlZCdmIyd3VjRzl3S0NrN1hHNGdJQ0FnUzJ4aGMzTXVZMkZzYkNocGJuTjBZVzVqWlN3Z1lURXNJR0V5TENCaE15d2dZVFFzSUdFMUtUdGNiaUFnSUNCeVpYUjFjbTRnYVc1emRHRnVZMlU3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCTGJHRnpjeWhoTVN3Z1lUSXNJR0V6TENCaE5Dd2dZVFVwTzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnYzNSaGJtUmhjbVJTWld4bFlYTmxjaUE5SUdaMWJtTjBhVzl1S0dsdWMzUmhibU5sS1NCN1hHNGdJSFpoY2lCTGJHRnpjeUE5SUhSb2FYTTdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdhVzV6ZEdGdVkyVWdhVzV6ZEdGdVkyVnZaaUJMYkdGemN5eGNiaUFnSUNBblZISjVhVzVuSUhSdklISmxiR1ZoYzJVZ1lXNGdhVzV6ZEdGdVkyVWdhVzUwYnlCaElIQnZiMndnYjJZZ1lTQmthV1ptWlhKbGJuUWdkSGx3WlM0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2FXNXpkR0Z1WTJVZ2FXNXpkR0Z1WTJWdlppQkxiR0Z6Y3lrcE8xeHVJQ0JwWmlBb2FXNXpkR0Z1WTJVdVpHVnpkSEoxWTNSdmNpa2dlMXh1SUNBZ0lHbHVjM1JoYm1ObExtUmxjM1J5ZFdOMGIzSW9LVHRjYmlBZ2ZWeHVJQ0JwWmlBb1MyeGhjM011YVc1emRHRnVZMlZRYjI5c0xteGxibWQwYUNBOElFdHNZWE56TG5CdmIyeFRhWHBsS1NCN1hHNGdJQ0FnUzJ4aGMzTXVhVzV6ZEdGdVkyVlFiMjlzTG5CMWMyZ29hVzV6ZEdGdVkyVXBPMXh1SUNCOVhHNTlPMXh1WEc1MllYSWdSRVZHUVZWTVZGOVFUMDlNWDFOSldrVWdQU0F4TUR0Y2JuWmhjaUJFUlVaQlZVeFVYMUJQVDB4RlVpQTlJRzl1WlVGeVozVnRaVzUwVUc5dmJHVnlPMXh1WEc0dktpcGNiaUFxSUVGMVoyMWxiblJ6SUdCRGIzQjVRMjl1YzNSeWRXTjBiM0pnSUhSdklHSmxJR0VnY0c5dmJHRmliR1VnWTJ4aGMzTXNJR0YxWjIxbGJuUnBibWNnYjI1c2VTQjBhR1VnWTJ4aGMzTmNiaUFxSUdsMGMyVnNaaUFvYzNSaGRHbGpZV3hzZVNrZ2JtOTBJR0ZrWkdsdVp5QmhibmtnY0hKdmRHOTBlWEJwWTJGc0lHWnBaV3hrY3k0Z1FXNTVJRU52Y0hsRGIyNXpkSEoxWTNSdmNseHVJQ29nZVc5MUlHZHBkbVVnZEdocGN5QnRZWGtnYUdGMlpTQmhJR0J3YjI5c1UybDZaV0FnY0hKdmNHVnlkSGtzSUdGdVpDQjNhV3hzSUd4dmIyc2dabTl5SUdGY2JpQXFJSEJ5YjNSdmRIbHdhV05oYkNCZ1pHVnpkSEoxWTNSdmNtQWdiMjRnYVc1emRHRnVZMlZ6SUNodmNIUnBiMjVoYkNrdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0R2RXNWpkR2x2Ym4wZ1EyOXdlVU52Ym5OMGNuVmpkRzl5SUVOdmJuTjBjblZqZEc5eUlIUm9ZWFFnWTJGdUlHSmxJSFZ6WldRZ2RHOGdjbVZ6WlhRdVhHNGdLaUJBY0dGeVlXMGdlMFoxYm1OMGFXOXVmU0J3YjI5c1pYSWdRM1Z6ZEc5dGFYcGhZbXhsSUhCdmIyeGxjaTVjYmlBcUwxeHVkbUZ5SUdGa1pGQnZiMnhwYm1kVWJ5QTlJR1oxYm1OMGFXOXVLRU52Y0hsRGIyNXpkSEoxWTNSdmNpd2djRzl2YkdWeUtTQjdYRzRnSUhaaGNpQk9aWGRMYkdGemN5QTlJRU52Y0hsRGIyNXpkSEoxWTNSdmNqdGNiaUFnVG1WM1MyeGhjM011YVc1emRHRnVZMlZRYjI5c0lEMGdXMTA3WEc0Z0lFNWxkMHRzWVhOekxtZGxkRkJ2YjJ4bFpDQTlJSEJ2YjJ4bGNpQjhmQ0JFUlVaQlZVeFVYMUJQVDB4RlVqdGNiaUFnYVdZZ0tDRk9aWGRMYkdGemN5NXdiMjlzVTJsNlpTa2dlMXh1SUNBZ0lFNWxkMHRzWVhOekxuQnZiMnhUYVhwbElEMGdSRVZHUVZWTVZGOVFUMDlNWDFOSldrVTdYRzRnSUgxY2JpQWdUbVYzUzJ4aGMzTXVjbVZzWldGelpTQTlJSE4wWVc1a1lYSmtVbVZzWldGelpYSTdYRzRnSUhKbGRIVnliaUJPWlhkTGJHRnpjenRjYm4wN1hHNWNiblpoY2lCUWIyOXNaV1JEYkdGemN5QTlJSHRjYmlBZ1lXUmtVRzl2YkdsdVoxUnZPaUJoWkdSUWIyOXNhVzVuVkc4c1hHNGdJRzl1WlVGeVozVnRaVzUwVUc5dmJHVnlPaUJ2Ym1WQmNtZDFiV1Z1ZEZCdmIyeGxjaXhjYmlBZ2RIZHZRWEpuZFcxbGJuUlFiMjlzWlhJNklIUjNiMEZ5WjNWdFpXNTBVRzl2YkdWeUxGeHVJQ0IwYUhKbFpVRnlaM1Z0Wlc1MFVHOXZiR1Z5T2lCMGFISmxaVUZ5WjNWdFpXNTBVRzl2YkdWeUxGeHVJQ0JtYVhabFFYSm5kVzFsYm5SUWIyOXNaWEk2SUdacGRtVkJjbWQxYldWdWRGQnZiMnhsY2x4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JRYjI5c1pXUkRiR0Z6Y3p0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFxuICovXG5cbi8qIGdsb2JhbHMgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRQbHVnaW5VdGlscyA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luVXRpbHNcIik7XG52YXIgUmVhY3RDaGlsZHJlbiA9IHJlcXVpcmUoXCIuL1JlYWN0Q2hpbGRyZW5cIik7XG52YXIgUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudFwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdENvbnRleHQgPSByZXF1aXJlKFwiLi9SZWFjdENvbnRleHRcIik7XG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKFwiLi9SZWFjdEN1cnJlbnRPd25lclwiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50VmFsaWRhdG9yXCIpO1xudmFyIFJlYWN0RE9NID0gcmVxdWlyZShcIi4vUmVhY3RET01cIik7XG52YXIgUmVhY3RET01UZXh0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RET01UZXh0Q29tcG9uZW50XCIpO1xudmFyIFJlYWN0RGVmYXVsdEluamVjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0RGVmYXVsdEluamVjdGlvblwiKTtcbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzXCIpO1xudmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKFwiLi9SZWFjdE1vdW50XCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcbnZhciBSZWFjdFByb3BUeXBlcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVzXCIpO1xudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoXCIuL1JlYWN0UmVjb25jaWxlclwiKTtcbnZhciBSZWFjdFNlcnZlclJlbmRlcmluZyA9IHJlcXVpcmUoXCIuL1JlYWN0U2VydmVyUmVuZGVyaW5nXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBmaW5kRE9NTm9kZSA9IHJlcXVpcmUoXCIuL2ZpbmRET01Ob2RlXCIpO1xudmFyIG9ubHlDaGlsZCA9IHJlcXVpcmUoXCIuL29ubHlDaGlsZFwiKTtcblxuUmVhY3REZWZhdWx0SW5qZWN0aW9uLmluamVjdCgpO1xuXG52YXIgY3JlYXRlRWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50O1xudmFyIGNyZWF0ZUZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeTtcbnZhciBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50O1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIGNyZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudDtcbiAgY3JlYXRlRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5O1xuICBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2xvbmVFbGVtZW50O1xufVxuXG52YXIgcmVuZGVyID0gUmVhY3RQZXJmLm1lYXN1cmUoJ1JlYWN0JywgJ3JlbmRlcicsIFJlYWN0TW91bnQucmVuZGVyKTtcblxudmFyIFJlYWN0ID0ge1xuICBDaGlsZHJlbjoge1xuICAgIG1hcDogUmVhY3RDaGlsZHJlbi5tYXAsXG4gICAgZm9yRWFjaDogUmVhY3RDaGlsZHJlbi5mb3JFYWNoLFxuICAgIGNvdW50OiBSZWFjdENoaWxkcmVuLmNvdW50LFxuICAgIG9ubHk6IG9ubHlDaGlsZFxuICB9LFxuICBDb21wb25lbnQ6IFJlYWN0Q29tcG9uZW50LFxuICBET006IFJlYWN0RE9NLFxuICBQcm9wVHlwZXM6IFJlYWN0UHJvcFR5cGVzLFxuICBpbml0aWFsaXplVG91Y2hFdmVudHM6IGZ1bmN0aW9uKHNob3VsZFVzZVRvdWNoKSB7XG4gICAgRXZlbnRQbHVnaW5VdGlscy51c2VUb3VjaEV2ZW50cyA9IHNob3VsZFVzZVRvdWNoO1xuICB9LFxuICBjcmVhdGVDbGFzczogUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyxcbiAgY3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudCxcbiAgY2xvbmVFbGVtZW50OiBjbG9uZUVsZW1lbnQsXG4gIGNyZWF0ZUZhY3Rvcnk6IGNyZWF0ZUZhY3RvcnksXG4gIGNyZWF0ZU1peGluOiBmdW5jdGlvbihtaXhpbikge1xuICAgIC8vIEN1cnJlbnRseSBhIG5vb3AuIFdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdHJhY2UgbWl4aW5zLlxuICAgIHJldHVybiBtaXhpbjtcbiAgfSxcbiAgY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50OiBSZWFjdE1vdW50LmNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudCxcbiAgY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50QnlJRDogUmVhY3RNb3VudC5jb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25lbnRCeUlELFxuICBmaW5kRE9NTm9kZTogZmluZERPTU5vZGUsXG4gIHJlbmRlcjogcmVuZGVyLFxuICByZW5kZXJUb1N0cmluZzogUmVhY3RTZXJ2ZXJSZW5kZXJpbmcucmVuZGVyVG9TdHJpbmcsXG4gIHJlbmRlclRvU3RhdGljTWFya3VwOiBSZWFjdFNlcnZlclJlbmRlcmluZy5yZW5kZXJUb1N0YXRpY01hcmt1cCxcbiAgdW5tb3VudENvbXBvbmVudEF0Tm9kZTogUmVhY3RNb3VudC51bm1vdW50Q29tcG9uZW50QXROb2RlLFxuICBpc1ZhbGlkRWxlbWVudDogUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50LFxuICB3aXRoQ29udGV4dDogUmVhY3RDb250ZXh0LndpdGhDb250ZXh0LFxuXG4gIC8vIEhvb2sgZm9yIEpTWCBzcHJlYWQsIGRvbid0IHVzZSB0aGlzIGZvciBhbnl0aGluZyBlbHNlLlxuICBfX3NwcmVhZDogYXNzaWduXG59O1xuXG4vLyBJbmplY3QgdGhlIHJ1bnRpbWUgaW50byBhIGRldnRvb2xzIGdsb2JhbCBob29rIHJlZ2FyZGxlc3Mgb2YgYnJvd3Nlci5cbi8vIEFsbG93cyBmb3IgZGVidWdnaW5nIHdoZW4gdGhlIGhvb2sgaXMgaW5qZWN0ZWQgb24gdGhlIHBhZ2UuXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uaW5qZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3Qoe1xuICAgIEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gICAgSW5zdGFuY2VIYW5kbGVzOiBSZWFjdEluc3RhbmNlSGFuZGxlcyxcbiAgICBNb3VudDogUmVhY3RNb3VudCxcbiAgICBSZWNvbmNpbGVyOiBSZWFjdFJlY29uY2lsZXIsXG4gICAgVGV4dENvbXBvbmVudDogUmVhY3RET01UZXh0Q29tcG9uZW50XG4gIH0pO1xufVxuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIHZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuICBpZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmKSB7XG5cbiAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUsIGxvb2sgZm9yIHRoZSBkZXZ0b29scyBtYXJrZXIgYW5kIHByb3ZpZGUgYSBkb3dubG9hZFxuICAgIC8vIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA+IC0xKSB7XG4gICAgICBpZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgICAnRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOiAnICtcbiAgICAgICAgICAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXhwZWN0ZWRGZWF0dXJlcyA9IFtcbiAgICAgIC8vIHNoaW1zXG4gICAgICBBcnJheS5pc0FycmF5LFxuICAgICAgQXJyYXkucHJvdG90eXBlLmV2ZXJ5LFxuICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2gsXG4gICAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZixcbiAgICAgIEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgICBEYXRlLm5vdyxcbiAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLFxuICAgICAgT2JqZWN0LmtleXMsXG4gICAgICBTdHJpbmcucHJvdG90eXBlLnNwbGl0LFxuICAgICAgU3RyaW5nLnByb3RvdHlwZS50cmltLFxuXG4gICAgICAvLyBzaGFtc1xuICAgICAgT2JqZWN0LmNyZWF0ZSxcbiAgICAgIE9iamVjdC5mcmVlemVcbiAgICBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZEZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWV4cGVjdGVkRmVhdHVyZXNbaV0pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnT25lIG9yIG1vcmUgRVM1IHNoaW0vc2hhbXMgZXhwZWN0ZWQgYnkgUmVhY3QgYXJlIG5vdCBhdmFpbGFibGU6ICcgK1xuICAgICAgICAgICdodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmctcG9seWZpbGxzJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVhY3QudmVyc2lvbiA9ICcwLjEzLjMnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlNaV0ZqZEZ4dUlDb3ZYRzVjYmk4cUlHZHNiMkpoYkhNZ1gxOVNSVUZEVkY5RVJWWlVUMDlNVTE5SFRFOUNRVXhmU0U5UFMxOWZLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdSWFpsYm5SUWJIVm5hVzVWZEdsc2N5QTlJSEpsY1hWcGNtVW9YQ0l1TDBWMlpXNTBVR3gxWjJsdVZYUnBiSE5jSWlrN1hHNTJZWElnVW1WaFkzUkRhR2xzWkhKbGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRMmhwYkdSeVpXNWNJaWs3WEc1MllYSWdVbVZoWTNSRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVOc1lYTnpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEYkdGemMxd2lLVHRjYm5aaGNpQlNaV0ZqZEVOdmJuUmxlSFFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOdmJuUmxlSFJjSWlrN1hHNTJZWElnVW1WaFkzUkRkWEp5Wlc1MFQzZHVaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOMWNuSmxiblJQZDI1bGNsd2lLVHRjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eVhDSXBPMXh1ZG1GeUlGSmxZV04wUkU5TklEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkVUMDFjSWlrN1hHNTJZWElnVW1WaFkzUkVUMDFVWlhoMFEyOXRjRzl1Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkVUMDFVWlhoMFEyOXRjRzl1Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wUkdWbVlYVnNkRWx1YW1WamRHbHZiaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUkdWbVlYVnNkRWx1YW1WamRHbHZibHdpS1R0Y2JuWmhjaUJTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6WENJcE8xeHVkbUZ5SUZKbFlXTjBUVzkxYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFMXZkVzUwWENJcE8xeHVkbUZ5SUZKbFlXTjBVR1Z5WmlBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFVHVnlabHdpS1R0Y2JuWmhjaUJTWldGamRGQnliM0JVZVhCbGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVSEp2Y0ZSNWNHVnpYQ0lwTzF4dWRtRnlJRkpsWVdOMFVtVmpiMjVqYVd4bGNpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVbVZqYjI1amFXeGxjbHdpS1R0Y2JuWmhjaUJTWldGamRGTmxjblpsY2xKbGJtUmxjbWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFUyVnlkbVZ5VW1WdVpHVnlhVzVuWENJcE8xeHVYRzUyWVhJZ1lYTnphV2R1SUQwZ2NtVnhkV2x5WlNoY0lpNHZUMkpxWldOMExtRnpjMmxuYmx3aUtUdGNiblpoY2lCbWFXNWtSRTlOVG05a1pTQTlJSEpsY1hWcGNtVW9YQ0l1TDJacGJtUkVUMDFPYjJSbFhDSXBPMXh1ZG1GeUlHOXViSGxEYUdsc1pDQTlJSEpsY1hWcGNtVW9YQ0l1TDI5dWJIbERhR2xzWkZ3aUtUdGNibHh1VW1WaFkzUkVaV1poZFd4MFNXNXFaV04wYVc5dUxtbHVhbVZqZENncE8xeHVYRzUyWVhJZ1kzSmxZWFJsUld4bGJXVnVkQ0E5SUZKbFlXTjBSV3hsYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwTzF4dWRtRnlJR055WldGMFpVWmhZM1J2Y25rZ1BTQlNaV0ZqZEVWc1pXMWxiblF1WTNKbFlYUmxSbUZqZEc5eWVUdGNiblpoY2lCamJHOXVaVVZzWlcxbGJuUWdQU0JTWldGamRFVnNaVzFsYm5RdVkyeHZibVZGYkdWdFpXNTBPMXh1WEc1cFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJR055WldGMFpVVnNaVzFsYm5RZ1BTQlNaV0ZqZEVWc1pXMWxiblJXWVd4cFpHRjBiM0l1WTNKbFlYUmxSV3hsYldWdWREdGNiaUFnWTNKbFlYUmxSbUZqZEc5eWVTQTlJRkpsWVdOMFJXeGxiV1Z1ZEZaaGJHbGtZWFJ2Y2k1amNtVmhkR1ZHWVdOMGIzSjVPMXh1SUNCamJHOXVaVVZzWlcxbGJuUWdQU0JTWldGamRFVnNaVzFsYm5SV1lXeHBaR0YwYjNJdVkyeHZibVZGYkdWdFpXNTBPMXh1ZlZ4dVhHNTJZWElnY21WdVpHVnlJRDBnVW1WaFkzUlFaWEptTG0xbFlYTjFjbVVvSjFKbFlXTjBKeXdnSjNKbGJtUmxjaWNzSUZKbFlXTjBUVzkxYm5RdWNtVnVaR1Z5S1R0Y2JseHVkbUZ5SUZKbFlXTjBJRDBnZTF4dUlDQkRhR2xzWkhKbGJqb2dlMXh1SUNBZ0lHMWhjRG9nVW1WaFkzUkRhR2xzWkhKbGJpNXRZWEFzWEc0Z0lDQWdabTl5UldGamFEb2dVbVZoWTNSRGFHbHNaSEpsYmk1bWIzSkZZV05vTEZ4dUlDQWdJR052ZFc1ME9pQlNaV0ZqZEVOb2FXeGtjbVZ1TG1OdmRXNTBMRnh1SUNBZ0lHOXViSGs2SUc5dWJIbERhR2xzWkZ4dUlDQjlMRnh1SUNCRGIyMXdiMjVsYm5RNklGSmxZV04wUTI5dGNHOXVaVzUwTEZ4dUlDQkVUMDA2SUZKbFlXTjBSRTlOTEZ4dUlDQlFjbTl3Vkhsd1pYTTZJRkpsWVdOMFVISnZjRlI1Y0dWekxGeHVJQ0JwYm1sMGFXRnNhWHBsVkc5MVkyaEZkbVZ1ZEhNNklHWjFibU4wYVc5dUtITm9iM1ZzWkZWelpWUnZkV05vS1NCN1hHNGdJQ0FnUlhabGJuUlFiSFZuYVc1VmRHbHNjeTUxYzJWVWIzVmphRVYyWlc1MGN5QTlJSE5vYjNWc1pGVnpaVlJ2ZFdOb08xeHVJQ0I5TEZ4dUlDQmpjbVZoZEdWRGJHRnpjem9nVW1WaFkzUkRiR0Z6Y3k1amNtVmhkR1ZEYkdGemN5eGNiaUFnWTNKbFlYUmxSV3hsYldWdWREb2dZM0psWVhSbFJXeGxiV1Z1ZEN4Y2JpQWdZMnh2Ym1WRmJHVnRaVzUwT2lCamJHOXVaVVZzWlcxbGJuUXNYRzRnSUdOeVpXRjBaVVpoWTNSdmNuazZJR055WldGMFpVWmhZM1J2Y25rc1hHNGdJR055WldGMFpVMXBlR2x1T2lCbWRXNWpkR2x2YmlodGFYaHBiaWtnZTF4dUlDQWdJQzh2SUVOMWNuSmxiblJzZVNCaElHNXZiM0F1SUZkcGJHd2dZbVVnZFhObFpDQjBieUIyWVd4cFpHRjBaU0JoYm1RZ2RISmhZMlVnYldsNGFXNXpMbHh1SUNBZ0lISmxkSFZ5YmlCdGFYaHBianRjYmlBZ2ZTeGNiaUFnWTI5dWMzUnlkV04wUVc1a1VtVnVaR1Z5UTI5dGNHOXVaVzUwT2lCU1pXRmpkRTF2ZFc1MExtTnZibk4wY25WamRFRnVaRkpsYm1SbGNrTnZiWEJ2Ym1WdWRDeGNiaUFnWTI5dWMzUnlkV04wUVc1a1VtVnVaR1Z5UTI5dGNHOXVaVzUwUW5sSlJEb2dVbVZoWTNSTmIzVnVkQzVqYjI1emRISjFZM1JCYm1SU1pXNWtaWEpEYjIxd2IyNWxiblJDZVVsRUxGeHVJQ0JtYVc1a1JFOU5UbTlrWlRvZ1ptbHVaRVJQVFU1dlpHVXNYRzRnSUhKbGJtUmxjam9nY21WdVpHVnlMRnh1SUNCeVpXNWtaWEpVYjFOMGNtbHVaem9nVW1WaFkzUlRaWEoyWlhKU1pXNWtaWEpwYm1jdWNtVnVaR1Z5Vkc5VGRISnBibWNzWEc0Z0lISmxibVJsY2xSdlUzUmhkR2xqVFdGeWEzVndPaUJTWldGamRGTmxjblpsY2xKbGJtUmxjbWx1Wnk1eVpXNWtaWEpVYjFOMFlYUnBZMDFoY210MWNDeGNiaUFnZFc1dGIzVnVkRU52YlhCdmJtVnVkRUYwVG05a1pUb2dVbVZoWTNSTmIzVnVkQzUxYm0xdmRXNTBRMjl0Y0c5dVpXNTBRWFJPYjJSbExGeHVJQ0JwYzFaaGJHbGtSV3hsYldWdWREb2dVbVZoWTNSRmJHVnRaVzUwTG1selZtRnNhV1JGYkdWdFpXNTBMRnh1SUNCM2FYUm9RMjl1ZEdWNGREb2dVbVZoWTNSRGIyNTBaWGgwTG5kcGRHaERiMjUwWlhoMExGeHVYRzRnSUM4dklFaHZiMnNnWm05eUlFcFRXQ0J6Y0hKbFlXUXNJR1J2YmlkMElIVnpaU0IwYUdseklHWnZjaUJoYm5sMGFHbHVaeUJsYkhObExseHVJQ0JmWDNOd2NtVmhaRG9nWVhOemFXZHVYRzU5TzF4dVhHNHZMeUJKYm1wbFkzUWdkR2hsSUhKMWJuUnBiV1VnYVc1MGJ5QmhJR1JsZG5SdmIyeHpJR2RzYjJKaGJDQm9iMjlySUhKbFoyRnlaR3hsYzNNZ2IyWWdZbkp2ZDNObGNpNWNiaTh2SUVGc2JHOTNjeUJtYjNJZ1pHVmlkV2RuYVc1bklIZG9aVzRnZEdobElHaHZiMnNnYVhNZ2FXNXFaV04wWldRZ2IyNGdkR2hsSUhCaFoyVXVYRzVwWmlBb1hHNGdJSFI1Y0dWdlppQmZYMUpGUVVOVVgwUkZWbFJQVDB4VFgwZE1UMEpCVEY5SVQwOUxYMThnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltWEc0Z0lIUjVjR1Z2WmlCZlgxSkZRVU5VWDBSRlZsUlBUMHhUWDBkTVQwSkJURjlJVDA5TFgxOHVhVzVxWldOMElEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJRjlmVWtWQlExUmZSRVZXVkU5UFRGTmZSMHhQUWtGTVgwaFBUMHRmWHk1cGJtcGxZM1FvZTF4dUlDQWdJRU4xY25KbGJuUlBkMjVsY2pvZ1VtVmhZM1JEZFhKeVpXNTBUM2R1WlhJc1hHNGdJQ0FnU1c1emRHRnVZMlZJWVc1a2JHVnpPaUJTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3l4Y2JpQWdJQ0JOYjNWdWREb2dVbVZoWTNSTmIzVnVkQ3hjYmlBZ0lDQlNaV052Ym1OcGJHVnlPaUJTWldGamRGSmxZMjl1WTJsc1pYSXNYRzRnSUNBZ1ZHVjRkRU52YlhCdmJtVnVkRG9nVW1WaFkzUkVUMDFVWlhoMFEyOXRjRzl1Wlc1MFhHNGdJSDBwTzF4dWZWeHVYRzVwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lIWmhjaUJGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMFY0WldOMWRHbHZia1Z1ZG1seWIyNXRaVzUwWENJcE8xeHVJQ0JwWmlBb1JYaGxZM1YwYVc5dVJXNTJhWEp2Ym0xbGJuUXVZMkZ1VlhObFJFOU5JQ1ltSUhkcGJtUnZkeTUwYjNBZ1BUMDlJSGRwYm1SdmR5NXpaV3htS1NCN1hHNWNiaUFnSUNBdkx5QkpaaUIzWlNkeVpTQnBiaUJEYUhKdmJXVXNJR3h2YjJzZ1ptOXlJSFJvWlNCa1pYWjBiMjlzY3lCdFlYSnJaWElnWVc1a0lIQnliM1pwWkdVZ1lTQmtiM2R1Ykc5aFpGeHVJQ0FnSUM4dklHeHBibXNnYVdZZ2JtOTBJR2x1YzNSaGJHeGxaQzVjYmlBZ0lDQnBaaUFvYm1GMmFXZGhkRzl5TG5WelpYSkJaMlZ1ZEM1cGJtUmxlRTltS0NkRGFISnZiV1VuS1NBK0lDMHhLU0I3WEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUY5ZlVrVkJRMVJmUkVWV1ZFOVBURk5mUjB4UFFrRk1YMGhQVDB0Zlh5QTlQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWtaV0oxWnloY2JpQWdJQ0FnSUNBZ0lDQW5SRzkzYm14dllXUWdkR2hsSUZKbFlXTjBJRVJsZGxSdmIyeHpJR1p2Y2lCaElHSmxkSFJsY2lCa1pYWmxiRzl3YldWdWRDQmxlSEJsY21sbGJtTmxPaUFuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5hSFIwY0hNNkx5OW1ZaTV0WlM5eVpXRmpkQzFrWlhaMGIyOXNjeWRjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ1pYaHdaV04wWldSR1pXRjBkWEpsY3lBOUlGdGNiaUFnSUNBZ0lDOHZJSE5vYVcxelhHNGdJQ0FnSUNCQmNuSmhlUzVwYzBGeWNtRjVMRnh1SUNBZ0lDQWdRWEp5WVhrdWNISnZkRzkwZVhCbExtVjJaWEo1TEZ4dUlDQWdJQ0FnUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbVp2Y2tWaFkyZ3NYRzRnSUNBZ0lDQkJjbkpoZVM1d2NtOTBiM1I1Y0dVdWFXNWtaWGhQWml4Y2JpQWdJQ0FnSUVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV0WVhBc1hHNGdJQ0FnSUNCRVlYUmxMbTV2ZHl4Y2JpQWdJQ0FnSUVaMWJtTjBhVzl1TG5CeWIzUnZkSGx3WlM1aWFXNWtMRnh1SUNBZ0lDQWdUMkpxWldOMExtdGxlWE1zWEc0Z0lDQWdJQ0JUZEhKcGJtY3VjSEp2ZEc5MGVYQmxMbk53YkdsMExGeHVJQ0FnSUNBZ1UzUnlhVzVuTG5CeWIzUnZkSGx3WlM1MGNtbHRMRnh1WEc0Z0lDQWdJQ0F2THlCemFHRnRjMXh1SUNBZ0lDQWdUMkpxWldOMExtTnlaV0YwWlN4Y2JpQWdJQ0FnSUU5aWFtVmpkQzVtY21WbGVtVmNiaUFnSUNCZE8xeHVYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQmxlSEJsWTNSbFpFWmxZWFIxY21WekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lXVjRjR1ZqZEdWa1JtVmhkSFZ5WlhOYmFWMHBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpaGNiaUFnSUNBZ0lDQWdJQ0FuVDI1bElHOXlJRzF2Y21VZ1JWTTFJSE5vYVcwdmMyaGhiWE1nWlhod1pXTjBaV1FnWW5rZ1VtVmhZM1FnWVhKbElHNXZkQ0JoZG1GcGJHRmliR1U2SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2RvZEhSd2N6b3ZMMlppTG0xbEwzSmxZV04wTFhkaGNtNXBibWN0Y0c5c2VXWnBiR3h6SjF4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibjFjYmx4dVVtVmhZM1F1ZG1WeWMybHZiaUE5SUNjd0xqRXpMak1uTzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBmaW5kRE9NTm9kZSA9IHJlcXVpcmUoXCIuL2ZpbmRET01Ob2RlXCIpO1xuXG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBET00gbm9kZSByZW5kZXJlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybiB7RE9NRWxlbWVudH0gVGhlIHJvb3Qgbm9kZSBvZiB0aGlzIGNvbXBvbmVudC5cbiAgICogQGZpbmFsXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIGdldERPTU5vZGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kRE9NTm9kZSh0aGlzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luSHViXCIpO1xudmFyIEV2ZW50UGx1Z2luUmVnaXN0cnkgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpblJlZ2lzdHJ5XCIpO1xudmFyIFJlYWN0RXZlbnRFbWl0dGVyTWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEV2ZW50RW1pdHRlck1peGluXCIpO1xudmFyIFZpZXdwb3J0TWV0cmljcyA9IHJlcXVpcmUoXCIuL1ZpZXdwb3J0TWV0cmljc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaXNFdmVudFN1cHBvcnRlZCA9IHJlcXVpcmUoXCIuL2lzRXZlbnRTdXBwb3J0ZWRcIik7XG5cbi8qKlxuICogU3VtbWFyeSBvZiBgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyYCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgLSBUb3AtbGV2ZWwgZGVsZWdhdGlvbiBpcyB1c2VkIHRvIHRyYXAgbW9zdCBuYXRpdmUgYnJvd3NlciBldmVudHMuIFRoaXNcbiAqICAgIG1heSBvbmx5IG9jY3VyIGluIHRoZSBtYWluIHRocmVhZCBhbmQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mXG4gKiAgICBSZWFjdEV2ZW50TGlzdGVuZXIsIHdoaWNoIGlzIGluamVjdGVkIGFuZCBjYW4gdGhlcmVmb3JlIHN1cHBvcnQgcGx1Z2dhYmxlXG4gKiAgICBldmVudCBzb3VyY2VzLiBUaGlzIGlzIHRoZSBvbmx5IHdvcmsgdGhhdCBvY2N1cnMgaW4gdGhlIG1haW4gdGhyZWFkLlxuICpcbiAqICAtIFdlIG5vcm1hbGl6ZSBhbmQgZGUtZHVwbGljYXRlIGV2ZW50cyB0byBhY2NvdW50IGZvciBicm93c2VyIHF1aXJrcy4gVGhpc1xuICogICAgbWF5IGJlIGRvbmUgaW4gdGhlIHdvcmtlciB0aHJlYWQuXG4gKlxuICogIC0gRm9yd2FyZCB0aGVzZSBuYXRpdmUgZXZlbnRzICh3aXRoIHRoZSBhc3NvY2lhdGVkIHRvcC1sZXZlbCB0eXBlIHVzZWQgdG9cbiAqICAgIHRyYXAgaXQpIHRvIGBFdmVudFBsdWdpbkh1YmAsIHdoaWNoIGluIHR1cm4gd2lsbCBhc2sgcGx1Z2lucyBpZiB0aGV5IHdhbnRcbiAqICAgIHRvIGV4dHJhY3QgYW55IHN5bnRoZXRpYyBldmVudHMuXG4gKlxuICogIC0gVGhlIGBFdmVudFBsdWdpbkh1YmAgd2lsbCB0aGVuIHByb2Nlc3MgZWFjaCBldmVudCBieSBhbm5vdGF0aW5nIHRoZW0gd2l0aFxuICogICAgXCJkaXNwYXRjaGVzXCIsIGEgc2VxdWVuY2Ugb2YgbGlzdGVuZXJzIGFuZCBJRHMgdGhhdCBjYXJlIGFib3V0IHRoYXQgZXZlbnQuXG4gKlxuICogIC0gVGhlIGBFdmVudFBsdWdpbkh1YmAgdGhlbiBkaXNwYXRjaGVzIHRoZSBldmVudHMuXG4gKlxuICogT3ZlcnZpZXcgb2YgUmVhY3QgYW5kIHRoZSBldmVudCBzeXN0ZW06XG4gKlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogfCAgICBET00gICAgIHwgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogICAgICAgfCAgICAgICAgICAgLlxuICogICAgICAgdiAgICAgICAgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogfCBSZWFjdEV2ZW50IHwgICAgLlxuICogfCAgTGlzdGVuZXIgIHwgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiAgICAgICB8ICAgICAgICAgICAuICAgICAgICAgICAgICAgKy0tLS0tLS0tK3xTaW1wbGVFdmVudHxcbiAqICAgICAgIHwgICAgICAgICAgIC4gICAgICAgICAgICAgICB8ICAgICAgICAgfFBsdWdpbiAgICAgfFxuICogKy0tLS0tfC0tLS0tLSsgICAgLiAgICAgICAgICAgICAgIHYgICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiB8ICAgICB8ICAgICAgfCAgICAuICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rXG4gKiB8ICAgICArLS0tLS0tLS0tLS0uLS0tPnxFdmVudFBsdWdpbkh1YnwgICAgICAgICAgICAgICAgICAgIHwgICAgRXZlbnQgICB8XG4gKiB8ICAgICAgICAgICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgIHwgUHJvcGFnYXRvcnN8XG4gKiB8IFJlYWN0RXZlbnQgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgIHxUYXBFdmVudCAgIHwgIHwtLS0tLS0tLS0tLS18XG4gKiB8ICBFbWl0dGVyICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHw8LS0tK3xQbHVnaW4gICAgIHwgIHxvdGhlciBwbHVnaW58XG4gKiB8ICAgICAgICAgICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgIHwgIHV0aWxpdGllcyB8XG4gKiB8ICAgICArLS0tLS0tLS0tLS0uLS0tPnwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rXG4gKiB8ICAgICB8ICAgICAgfCAgICAuICAgICstLS0tLS0tLS0tLS0tLStcbiAqICstLS0tLXwtLS0tLS0rICAgIC4gICAgICAgICAgICAgICAgXiAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgICB8ICAgICAgICB8RW50ZXIvTGVhdmV8XG4gKiAgICAgICArICAgICAgICAgICAuICAgICAgICAgICAgICAgICstLS0tLS0tK3xQbHVnaW4gICAgIHxcbiAqICstLS0tLS0tLS0tLS0tKyAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogfCBhcHBsaWNhdGlvbiB8ICAgLlxuICogfC0tLS0tLS0tLS0tLS18ICAgLlxuICogfCAgICAgICAgICAgICB8ICAgLlxuICogfCAgICAgICAgICAgICB8ICAgLlxuICogKy0tLS0tLS0tLS0tLS0rICAgLlxuICogICAgICAgICAgICAgICAgICAgLlxuICogICAgUmVhY3QgQ29yZSAgICAgLiAgR2VuZXJhbCBQdXJwb3NlIEV2ZW50IFBsdWdpbiBTeXN0ZW1cbiAqL1xuXG52YXIgYWxyZWFkeUxpc3RlbmluZ1RvID0ge307XG52YXIgaXNNb25pdG9yaW5nU2Nyb2xsVmFsdWUgPSBmYWxzZTtcbnZhciByZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIgPSAwO1xuXG4vLyBGb3IgZXZlbnRzIGxpa2UgJ3N1Ym1pdCcgd2hpY2ggZG9uJ3QgY29uc2lzdGVudGx5IGJ1YmJsZSAod2hpY2ggd2UgdHJhcCBhdCBhXG4vLyBsb3dlciBub2RlIHRoYW4gYGRvY3VtZW50YCksIGJpbmRpbmcgYXQgYGRvY3VtZW50YCB3b3VsZCBjYXVzZSBkdXBsaWNhdGVcbi8vIGV2ZW50cyBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaGVyZVxudmFyIHRvcEV2ZW50TWFwcGluZyA9IHtcbiAgdG9wQmx1cjogJ2JsdXInLFxuICB0b3BDaGFuZ2U6ICdjaGFuZ2UnLFxuICB0b3BDbGljazogJ2NsaWNrJyxcbiAgdG9wQ29tcG9zaXRpb25FbmQ6ICdjb21wb3NpdGlvbmVuZCcsXG4gIHRvcENvbXBvc2l0aW9uU3RhcnQ6ICdjb21wb3NpdGlvbnN0YXJ0JyxcbiAgdG9wQ29tcG9zaXRpb25VcGRhdGU6ICdjb21wb3NpdGlvbnVwZGF0ZScsXG4gIHRvcENvbnRleHRNZW51OiAnY29udGV4dG1lbnUnLFxuICB0b3BDb3B5OiAnY29weScsXG4gIHRvcEN1dDogJ2N1dCcsXG4gIHRvcERvdWJsZUNsaWNrOiAnZGJsY2xpY2snLFxuICB0b3BEcmFnOiAnZHJhZycsXG4gIHRvcERyYWdFbmQ6ICdkcmFnZW5kJyxcbiAgdG9wRHJhZ0VudGVyOiAnZHJhZ2VudGVyJyxcbiAgdG9wRHJhZ0V4aXQ6ICdkcmFnZXhpdCcsXG4gIHRvcERyYWdMZWF2ZTogJ2RyYWdsZWF2ZScsXG4gIHRvcERyYWdPdmVyOiAnZHJhZ292ZXInLFxuICB0b3BEcmFnU3RhcnQ6ICdkcmFnc3RhcnQnLFxuICB0b3BEcm9wOiAnZHJvcCcsXG4gIHRvcEZvY3VzOiAnZm9jdXMnLFxuICB0b3BJbnB1dDogJ2lucHV0JyxcbiAgdG9wS2V5RG93bjogJ2tleWRvd24nLFxuICB0b3BLZXlQcmVzczogJ2tleXByZXNzJyxcbiAgdG9wS2V5VXA6ICdrZXl1cCcsXG4gIHRvcE1vdXNlRG93bjogJ21vdXNlZG93bicsXG4gIHRvcE1vdXNlTW92ZTogJ21vdXNlbW92ZScsXG4gIHRvcE1vdXNlT3V0OiAnbW91c2VvdXQnLFxuICB0b3BNb3VzZU92ZXI6ICdtb3VzZW92ZXInLFxuICB0b3BNb3VzZVVwOiAnbW91c2V1cCcsXG4gIHRvcFBhc3RlOiAncGFzdGUnLFxuICB0b3BTY3JvbGw6ICdzY3JvbGwnLFxuICB0b3BTZWxlY3Rpb25DaGFuZ2U6ICdzZWxlY3Rpb25jaGFuZ2UnLFxuICB0b3BUZXh0SW5wdXQ6ICd0ZXh0SW5wdXQnLFxuICB0b3BUb3VjaENhbmNlbDogJ3RvdWNoY2FuY2VsJyxcbiAgdG9wVG91Y2hFbmQ6ICd0b3VjaGVuZCcsXG4gIHRvcFRvdWNoTW92ZTogJ3RvdWNobW92ZScsXG4gIHRvcFRvdWNoU3RhcnQ6ICd0b3VjaHN0YXJ0JyxcbiAgdG9wV2hlZWw6ICd3aGVlbCdcbn07XG5cbi8qKlxuICogVG8gZW5zdXJlIG5vIGNvbmZsaWN0cyB3aXRoIG90aGVyIHBvdGVudGlhbCBSZWFjdCBpbnN0YW5jZXMgb24gdGhlIHBhZ2VcbiAqL1xudmFyIHRvcExpc3RlbmVyc0lES2V5ID0gJ19yZWFjdExpc3RlbmVyc0lEJyArIFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKTtcblxuZnVuY3Rpb24gZ2V0TGlzdGVuaW5nRm9yRG9jdW1lbnQobW91bnRBdCkge1xuICAvLyBJbiBJRTgsIGBtb3VudEF0YCBpcyBhIGhvc3Qgb2JqZWN0IGFuZCBkb2Vzbid0IGhhdmUgYGhhc093blByb3BlcnR5YFxuICAvLyBkaXJlY3RseS5cbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW91bnRBdCwgdG9wTGlzdGVuZXJzSURLZXkpKSB7XG4gICAgbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV0gPSByZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIrKztcbiAgICBhbHJlYWR5TGlzdGVuaW5nVG9bbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV1dID0ge307XG4gIH1cbiAgcmV0dXJuIGFscmVhZHlMaXN0ZW5pbmdUb1ttb3VudEF0W3RvcExpc3RlbmVyc0lES2V5XV07XG59XG5cbi8qKlxuICogYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgaXMgdXNlZCB0byBhdHRhY2ggdG9wLWxldmVsIGV2ZW50IGxpc3RlbmVycy4gRm9yXG4gKiBleGFtcGxlOlxuICpcbiAqICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnB1dExpc3RlbmVyKCdteUlEJywgJ29uQ2xpY2snLCBteUZ1bmN0aW9uKTtcbiAqXG4gKiBUaGlzIHdvdWxkIGFsbG9jYXRlIGEgXCJyZWdpc3RyYXRpb25cIiBvZiBgKCdvbkNsaWNrJywgbXlGdW5jdGlvbilgIG9uICdteUlEJy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IGFzc2lnbih7fSwgUmVhY3RFdmVudEVtaXR0ZXJNaXhpbiwge1xuXG4gIC8qKlxuICAgKiBJbmplY3RhYmxlIGV2ZW50IGJhY2tlbmRcbiAgICovXG4gIFJlYWN0RXZlbnRMaXN0ZW5lcjogbnVsbCxcblxuICBpbmplY3Rpb246IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gUmVhY3RFdmVudExpc3RlbmVyXG4gICAgICovXG4gICAgaW5qZWN0UmVhY3RFdmVudExpc3RlbmVyOiBmdW5jdGlvbihSZWFjdEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5zZXRIYW5kbGVUb3BMZXZlbChcbiAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmhhbmRsZVRvcExldmVsXG4gICAgICApO1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lciA9IFJlYWN0RXZlbnRMaXN0ZW5lcjtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgd2hldGhlciBvciBub3QgYW55IGNyZWF0ZWQgY2FsbGJhY2tzIHNob3VsZCBiZSBlbmFibGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgVHJ1ZSBpZiBjYWxsYmFja3Mgc2hvdWxkIGJlIGVuYWJsZWQuXG4gICAqL1xuICBzZXRFbmFibGVkOiBmdW5jdGlvbihlbmFibGVkKSB7XG4gICAgaWYgKFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIuc2V0RW5hYmxlZChlbmFibGVkKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgY2FsbGJhY2tzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgaXNFbmFibGVkOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gISEoXG4gICAgICAoUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lciAmJiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLmlzRW5hYmxlZCgpKVxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdlIGxpc3RlbiBmb3IgYnViYmxlZCB0b3VjaCBldmVudHMgb24gdGhlIGRvY3VtZW50IG9iamVjdC5cbiAgICpcbiAgICogRmlyZWZveCB2OC4wMSAoYW5kIHBvc3NpYmx5IG90aGVycykgZXhoaWJpdGVkIHN0cmFuZ2UgYmVoYXZpb3Igd2hlblxuICAgKiBtb3VudGluZyBgb25tb3VzZW1vdmVgIGV2ZW50cyBhdCBzb21lIG5vZGUgdGhhdCB3YXMgbm90IHRoZSBkb2N1bWVudFxuICAgKiBlbGVtZW50LiBUaGUgc3ltcHRvbXMgd2VyZSB0aGF0IGlmIHlvdXIgbW91c2UgaXMgbm90IG1vdmluZyBvdmVyIHNvbWV0aGluZ1xuICAgKiBjb250YWluZWQgd2l0aGluIHRoYXQgbW91bnQgcG9pbnQgKGZvciBleGFtcGxlIG9uIHRoZSBiYWNrZ3JvdW5kKSB0aGVcbiAgICogdG9wLWxldmVsIGxpc3RlbmVycyBmb3IgYG9ubW91c2Vtb3ZlYCB3b24ndCBiZSBjYWxsZWQuIEhvd2V2ZXIsIGlmIHlvdVxuICAgKiByZWdpc3RlciB0aGUgYG1vdXNlbW92ZWAgb24gdGhlIGRvY3VtZW50IG9iamVjdCwgdGhlbiBpdCB3aWxsIG9mIGNvdXJzZVxuICAgKiBjYXRjaCBhbGwgYG1vdXNlbW92ZWBzLiBUaGlzIGFsb25nIHdpdGggaU9TIHF1aXJrcywganVzdGlmaWVzIHJlc3RyaWN0aW5nXG4gICAqIHRvcC1sZXZlbCBsaXN0ZW5lcnMgdG8gdGhlIGRvY3VtZW50IG9iamVjdCBvbmx5LCBhdCBsZWFzdCBmb3IgdGhlc2VcbiAgICogbW92ZW1lbnQgdHlwZXMgb2YgZXZlbnRzIGFuZCBwb3NzaWJseSBhbGwgZXZlbnRzLlxuICAgKlxuICAgKiBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gICAqXG4gICAqIEFsc28sIGBrZXl1cGAvYGtleXByZXNzYC9ga2V5ZG93bmAgZG8gbm90IGJ1YmJsZSB0byB0aGUgd2luZG93IG9uIElFLCBidXRcbiAgICogdGhleSBidWJibGUgdG8gZG9jdW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRlbnREb2N1bWVudEhhbmRsZSBEb2N1bWVudCB3aGljaCBvd25zIHRoZSBjb250YWluZXJcbiAgICovXG4gIGxpc3RlblRvOiBmdW5jdGlvbihyZWdpc3RyYXRpb25OYW1lLCBjb250ZW50RG9jdW1lbnRIYW5kbGUpIHtcbiAgICB2YXIgbW91bnRBdCA9IGNvbnRlbnREb2N1bWVudEhhbmRsZTtcbiAgICB2YXIgaXNMaXN0ZW5pbmcgPSBnZXRMaXN0ZW5pbmdGb3JEb2N1bWVudChtb3VudEF0KTtcbiAgICB2YXIgZGVwZW5kZW5jaWVzID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5cbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgICB2YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY2llc1tpXTtcbiAgICAgIGlmICghKFxuICAgICAgICAgICAgKGlzTGlzdGVuaW5nLmhhc093blByb3BlcnR5KGRlcGVuZGVuY3kpICYmIGlzTGlzdGVuaW5nW2RlcGVuZGVuY3ldKVxuICAgICAgICAgICkpIHtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09IHRvcExldmVsVHlwZXMudG9wV2hlZWwpIHtcbiAgICAgICAgICBpZiAoaXNFdmVudFN1cHBvcnRlZCgnd2hlZWwnKSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcFdoZWVsLFxuICAgICAgICAgICAgICAnd2hlZWwnLFxuICAgICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNFdmVudFN1cHBvcnRlZCgnbW91c2V3aGVlbCcpKSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wV2hlZWwsXG4gICAgICAgICAgICAgICdtb3VzZXdoZWVsJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmlyZWZveCBuZWVkcyB0byBjYXB0dXJlIGEgZGlmZmVyZW50IG1vdXNlIHNjcm9sbCBldmVudC5cbiAgICAgICAgICAgIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vZXZlbnRzL3Rlc3RzL3Njcm9sbC5odG1sXG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wV2hlZWwsXG4gICAgICAgICAgICAgICdET01Nb3VzZVNjcm9sbCcsXG4gICAgICAgICAgICAgIG1vdW50QXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09IHRvcExldmVsVHlwZXMudG9wU2Nyb2xsKSB7XG5cbiAgICAgICAgICBpZiAoaXNFdmVudFN1cHBvcnRlZCgnc2Nyb2xsJywgdHJ1ZSkpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wU2Nyb2xsLFxuICAgICAgICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcFNjcm9sbCxcbiAgICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIuV0lORE9XX0hBTkRMRVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVwZW5kZW5jeSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BGb2N1cyB8fFxuICAgICAgICAgICAgZGVwZW5kZW5jeSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BCbHVyKSB7XG5cbiAgICAgICAgICBpZiAoaXNFdmVudFN1cHBvcnRlZCgnZm9jdXMnLCB0cnVlKSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQ2FwdHVyZWRFdmVudChcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlcy50b3BGb2N1cyxcbiAgICAgICAgICAgICAgJ2ZvY3VzJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgICAgICAgICAgJ2JsdXInLFxuICAgICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNFdmVudFN1cHBvcnRlZCgnZm9jdXNpbicpKSB7XG4gICAgICAgICAgICAvLyBJRSBoYXMgYGZvY3VzaW5gIGFuZCBgZm9jdXNvdXRgIGV2ZW50cyB3aGljaCBidWJibGUuXG4gICAgICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDA4LzA0L2RlbGVnYXRpbmdfdGhlLmh0bWxcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlcy50b3BGb2N1cyxcbiAgICAgICAgICAgICAgJ2ZvY3VzaW4nLFxuICAgICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcEJsdXIsXG4gICAgICAgICAgICAgICdmb2N1c291dCcsXG4gICAgICAgICAgICAgIG1vdW50QXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGJsdXIgYW5kIGZvY3VzIGV2ZW50IGxpc3RlbmVycyBhcmUgb25seSBhdHRhY2hlZCBvbmNlXG4gICAgICAgICAgaXNMaXN0ZW5pbmdbdG9wTGV2ZWxUeXBlcy50b3BCbHVyXSA9IHRydWU7XG4gICAgICAgICAgaXNMaXN0ZW5pbmdbdG9wTGV2ZWxUeXBlcy50b3BGb2N1c10gPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRvcEV2ZW50TWFwcGluZy5oYXNPd25Qcm9wZXJ0eShkZXBlbmRlbmN5KSkge1xuICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgICAgICAgIGRlcGVuZGVuY3ksXG4gICAgICAgICAgICB0b3BFdmVudE1hcHBpbmdbZGVwZW5kZW5jeV0sXG4gICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzTGlzdGVuaW5nW2RlcGVuZGVuY3ldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdHJhcEJ1YmJsZWRFdmVudDogZnVuY3Rpb24odG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHJldHVybiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICBoYW5kbGVyQmFzZU5hbWUsXG4gICAgICBoYW5kbGVcbiAgICApO1xuICB9LFxuXG4gIHRyYXBDYXB0dXJlZEV2ZW50OiBmdW5jdGlvbih0b3BMZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSwgaGFuZGxlKSB7XG4gICAgcmV0dXJuIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICBoYW5kbGVyQmFzZU5hbWUsXG4gICAgICBoYW5kbGVcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIHRvIHdpbmRvdyBzY3JvbGwgYW5kIHJlc2l6ZSBldmVudHMuIFdlIGNhY2hlIHNjcm9sbCB2YWx1ZXMgc28gdGhhdFxuICAgKiBhcHBsaWNhdGlvbiBjb2RlIGNhbiBhY2Nlc3MgdGhlbSB3aXRob3V0IHRyaWdnZXJpbmcgcmVmbG93cy5cbiAgICpcbiAgICogTk9URTogU2Nyb2xsIGV2ZW50cyBkbyBub3QgYnViYmxlLlxuICAgKlxuICAgKiBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9tL2V2ZW50cy9zY3JvbGwuaHRtbFxuICAgKi9cbiAgZW5zdXJlU2Nyb2xsVmFsdWVNb25pdG9yaW5nOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoIWlzTW9uaXRvcmluZ1Njcm9sbFZhbHVlKSB7XG4gICAgICB2YXIgcmVmcmVzaCA9IFZpZXdwb3J0TWV0cmljcy5yZWZyZXNoU2Nyb2xsVmFsdWVzO1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci5tb25pdG9yU2Nyb2xsVmFsdWUocmVmcmVzaCk7XG4gICAgICBpc01vbml0b3JpbmdTY3JvbGxWYWx1ZSA9IHRydWU7XG4gICAgfVxuICB9LFxuXG4gIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlnczogRXZlbnRQbHVnaW5IdWIuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLFxuXG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzOiBFdmVudFBsdWdpbkh1Yi5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcyxcblxuICBwdXRMaXN0ZW5lcjogRXZlbnRQbHVnaW5IdWIucHV0TGlzdGVuZXIsXG5cbiAgZ2V0TGlzdGVuZXI6IEV2ZW50UGx1Z2luSHViLmdldExpc3RlbmVyLFxuXG4gIGRlbGV0ZUxpc3RlbmVyOiBFdmVudFBsdWdpbkh1Yi5kZWxldGVMaXN0ZW5lcixcblxuICBkZWxldGVBbGxMaXN0ZW5lcnM6IEV2ZW50UGx1Z2luSHViLmRlbGV0ZUFsbExpc3RlbmVyc1xuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDaGlsZFJlY29uY2lsZXJcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZShcIi4vUmVhY3RSZWNvbmNpbGVyXCIpO1xuXG52YXIgZmxhdHRlbkNoaWxkcmVuID0gcmVxdWlyZShcIi4vZmxhdHRlbkNoaWxkcmVuXCIpO1xudmFyIGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50XCIpO1xudmFyIHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnRcIik7XG5cbi8qKlxuICogUmVhY3RDaGlsZFJlY29uY2lsZXIgcHJvdmlkZXMgaGVscGVycyBmb3IgaW5pdGlhbGl6aW5nIG9yIHVwZGF0aW5nIGEgc2V0IG9mXG4gKiBjaGlsZHJlbi4gSXRzIG91dHB1dCBpcyBzdWl0YWJsZSBmb3IgcGFzc2luZyBpdCBvbnRvIFJlYWN0TXVsdGlDaGlsZCB3aGljaFxuICogZG9lcyBkaWZmZWQgcmVvcmRlcmluZyBhbmQgaW5zZXJ0aW9uLlxuICovXG52YXIgUmVhY3RDaGlsZFJlY29uY2lsZXIgPSB7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIFwibW91bnQgaW1hZ2VcIiBmb3IgZWFjaCBvZiB0aGUgc3VwcGxpZWQgY2hpbGRyZW4uIEluIHRoZSBjYXNlXG4gICAqIG9mIGBSZWFjdERPTUNvbXBvbmVudGAsIGEgbW91bnQgaW1hZ2UgaXMgYSBzdHJpbmcgb2YgbWFya3VwLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5lc3RlZENoaWxkTm9kZXMgTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAqIEByZXR1cm4gez9vYmplY3R9IEEgc2V0IG9mIGNoaWxkIGluc3RhbmNlcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBpbnN0YW50aWF0ZUNoaWxkcmVuOiBmdW5jdGlvbihuZXN0ZWRDaGlsZE5vZGVzLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBjaGlsZHJlbiA9IGZsYXR0ZW5DaGlsZHJlbihuZXN0ZWRDaGlsZE5vZGVzKTtcbiAgICBmb3IgKHZhciBuYW1lIGluIGNoaWxkcmVuKSB7XG4gICAgICBpZiAoY2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bbmFtZV07XG4gICAgICAgIC8vIFRoZSByZW5kZXJlZCBjaGlsZHJlbiBtdXN0IGJlIHR1cm5lZCBpbnRvIGluc3RhbmNlcyBhcyB0aGV5J3JlXG4gICAgICAgIC8vIG1vdW50ZWQuXG4gICAgICAgIHZhciBjaGlsZEluc3RhbmNlID0gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChjaGlsZCwgbnVsbCk7XG4gICAgICAgIGNoaWxkcmVuW25hbWVdID0gY2hpbGRJbnN0YW5jZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSByZW5kZXJlZCBjaGlsZHJlbiBhbmQgcmV0dXJucyBhIG5ldyBzZXQgb2YgY2hpbGRyZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcHJldkNoaWxkcmVuIFByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgc2V0IG9mIGNoaWxkcmVuLlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHROZXN0ZWRDaGlsZE5vZGVzIE5lc3RlZCBjaGlsZCBtYXBzLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4gez9vYmplY3R9IEEgbmV3IHNldCBvZiBjaGlsZCBpbnN0YW5jZXMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKFxuICAgIHByZXZDaGlsZHJlbixcbiAgICBuZXh0TmVzdGVkQ2hpbGROb2RlcyxcbiAgICB0cmFuc2FjdGlvbixcbiAgICBjb250ZXh0KSB7XG4gICAgLy8gV2UgY3VycmVudGx5IGRvbid0IGhhdmUgYSB3YXkgdG8gdHJhY2sgbW92ZXMgaGVyZSBidXQgaWYgd2UgdXNlIGl0ZXJhdG9yc1xuICAgIC8vIGluc3RlYWQgb2YgZm9yLi5pbiB3ZSBjYW4gemlwIHRoZSBpdGVyYXRvcnMgYW5kIGNoZWNrIGlmIGFuIGl0ZW0gaGFzXG4gICAgLy8gbW92ZWQuXG4gICAgLy8gVE9ETzogSWYgbm90aGluZyBoYXMgY2hhbmdlZCwgcmV0dXJuIHRoZSBwcmV2Q2hpbGRyZW4gb2JqZWN0IHNvIHRoYXQgd2VcbiAgICAvLyBjYW4gcXVpY2tseSBiYWlsb3V0IGlmIG5vdGhpbmcgaGFzIGNoYW5nZWQuXG4gICAgdmFyIG5leHRDaGlsZHJlbiA9IGZsYXR0ZW5DaGlsZHJlbihuZXh0TmVzdGVkQ2hpbGROb2Rlcyk7XG4gICAgaWYgKCFuZXh0Q2hpbGRyZW4gJiYgIXByZXZDaGlsZHJlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBuYW1lO1xuICAgIGZvciAobmFtZSBpbiBuZXh0Q2hpbGRyZW4pIHtcbiAgICAgIGlmICghbmV4dENoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZDaGlsZCA9IHByZXZDaGlsZHJlbiAmJiBwcmV2Q2hpbGRyZW5bbmFtZV07XG4gICAgICB2YXIgcHJldkVsZW1lbnQgPSBwcmV2Q2hpbGQgJiYgcHJldkNoaWxkLl9jdXJyZW50RWxlbWVudDtcbiAgICAgIHZhciBuZXh0RWxlbWVudCA9IG5leHRDaGlsZHJlbltuYW1lXTtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpKSB7XG4gICAgICAgIFJlYWN0UmVjb25jaWxlci5yZWNlaXZlQ29tcG9uZW50KFxuICAgICAgICAgIHByZXZDaGlsZCwgbmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBjb250ZXh0XG4gICAgICAgICk7XG4gICAgICAgIG5leHRDaGlsZHJlbltuYW1lXSA9IHByZXZDaGlsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmV2Q2hpbGQpIHtcbiAgICAgICAgICBSZWFjdFJlY29uY2lsZXIudW5tb3VudENvbXBvbmVudChwcmV2Q2hpbGQsIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBjaGlsZCBtdXN0IGJlIGluc3RhbnRpYXRlZCBiZWZvcmUgaXQncyBtb3VudGVkLlxuICAgICAgICB2YXIgbmV4dENoaWxkSW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KFxuICAgICAgICAgIG5leHRFbGVtZW50LFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgICAgbmV4dENoaWxkcmVuW25hbWVdID0gbmV4dENoaWxkSW5zdGFuY2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVubW91bnQgY2hpbGRyZW4gdGhhdCBhcmUgbm8gbG9uZ2VyIHByZXNlbnQuXG4gICAgZm9yIChuYW1lIGluIHByZXZDaGlsZHJlbikge1xuICAgICAgaWYgKHByZXZDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICAgICEobmV4dENoaWxkcmVuICYmIG5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpIHtcbiAgICAgICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQocHJldkNoaWxkcmVuW25hbWVdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRDaGlsZHJlbjtcbiAgfSxcblxuICAvKipcbiAgICogVW5tb3VudHMgYWxsIHJlbmRlcmVkIGNoaWxkcmVuLiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIGNsZWFuIHVwIGNoaWxkcmVuXG4gICAqIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IHJlbmRlcmVkQ2hpbGRyZW4gUHJldmlvdXNseSBpbml0aWFsaXplZCBzZXQgb2YgY2hpbGRyZW4uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENoaWxkcmVuOiBmdW5jdGlvbihyZW5kZXJlZENoaWxkcmVuKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiByZW5kZXJlZENoaWxkcmVuKSB7XG4gICAgICB2YXIgcmVuZGVyZWRDaGlsZCA9IHJlbmRlcmVkQ2hpbGRyZW5bbmFtZV07XG4gICAgICBSZWFjdFJlY29uY2lsZXIudW5tb3VudENvbXBvbmVudChyZW5kZXJlZENoaWxkKTtcbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENoaWxkUmVjb25jaWxlcjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDaGlsZHJlblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgUmVhY3RGcmFnbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RnJhZ21lbnRcIik7XG5cbnZhciB0cmF2ZXJzZUFsbENoaWxkcmVuID0gcmVxdWlyZShcIi4vdHJhdmVyc2VBbGxDaGlsZHJlblwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIHR3b0FyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MudHdvQXJndW1lbnRQb29sZXI7XG52YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IFBvb2xlZENsYXNzLnRocmVlQXJndW1lbnRQb29sZXI7XG5cbi8qKlxuICogUG9vbGVkQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBib29ra2VlcGluZyBhc3NvY2lhdGVkIHdpdGggcGVyZm9ybWluZyBhIGNoaWxkXG4gKiB0cmF2ZXJzYWwuIEFsbG93cyBhdm9pZGluZyBiaW5kaW5nIGNhbGxiYWNrcy5cbiAqXG4gKiBAY29uc3RydWN0b3IgRm9yRWFjaEJvb2tLZWVwaW5nXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gZm9yRWFjaEZ1bmN0aW9uIEZ1bmN0aW9uIHRvIHBlcmZvcm0gdHJhdmVyc2FsIHdpdGguXG4gKiBAcGFyYW0gez8qfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IHRvIHBlcmZvcm0gY29udGV4dCB3aXRoLlxuICovXG5mdW5jdGlvbiBGb3JFYWNoQm9va0tlZXBpbmcoZm9yRWFjaEZ1bmN0aW9uLCBmb3JFYWNoQ29udGV4dCkge1xuICB0aGlzLmZvckVhY2hGdW5jdGlvbiA9IGZvckVhY2hGdW5jdGlvbjtcbiAgdGhpcy5mb3JFYWNoQ29udGV4dCA9IGZvckVhY2hDb250ZXh0O1xufVxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKEZvckVhY2hCb29rS2VlcGluZywgdHdvQXJndW1lbnRQb29sZXIpO1xuXG5mdW5jdGlvbiBmb3JFYWNoU2luZ2xlQ2hpbGQodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSwgaSkge1xuICB2YXIgZm9yRWFjaEJvb2tLZWVwaW5nID0gdHJhdmVyc2VDb250ZXh0O1xuICBmb3JFYWNoQm9va0tlZXBpbmcuZm9yRWFjaEZ1bmN0aW9uLmNhbGwoXG4gICAgZm9yRWFjaEJvb2tLZWVwaW5nLmZvckVhY2hDb250ZXh0LCBjaGlsZCwgaSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogVGhlIHByb3ZpZGVkIGZvckVhY2hGdW5jKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZvckVhY2hGdW5jLlxuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgdHJhdmVyc2VDb250ZXh0ID1cbiAgICBGb3JFYWNoQm9va0tlZXBpbmcuZ2V0UG9vbGVkKGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCk7XG4gIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5nbGVDaGlsZCwgdHJhdmVyc2VDb250ZXh0KTtcbiAgRm9yRWFjaEJvb2tLZWVwaW5nLnJlbGVhc2UodHJhdmVyc2VDb250ZXh0KTtcbn1cblxuLyoqXG4gKiBQb29sZWRDbGFzcyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5nIGEgY2hpbGRcbiAqIG1hcHBpbmcuIEFsbG93cyBhdm9pZGluZyBiaW5kaW5nIGNhbGxiYWNrcy5cbiAqXG4gKiBAY29uc3RydWN0b3IgTWFwQm9va0tlZXBpbmdcbiAqIEBwYXJhbSB7ISp9IG1hcFJlc3VsdCBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBtYXBGdW5jdGlvbiBGdW5jdGlvbiB0byBwZXJmb3JtIG1hcHBpbmcgd2l0aC5cbiAqIEBwYXJhbSB7Pyp9IG1hcENvbnRleHQgQ29udGV4dCB0byBwZXJmb3JtIG1hcHBpbmcgd2l0aC5cbiAqL1xuZnVuY3Rpb24gTWFwQm9va0tlZXBpbmcobWFwUmVzdWx0LCBtYXBGdW5jdGlvbiwgbWFwQ29udGV4dCkge1xuICB0aGlzLm1hcFJlc3VsdCA9IG1hcFJlc3VsdDtcbiAgdGhpcy5tYXBGdW5jdGlvbiA9IG1hcEZ1bmN0aW9uO1xuICB0aGlzLm1hcENvbnRleHQgPSBtYXBDb250ZXh0O1xufVxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKE1hcEJvb2tLZWVwaW5nLCB0aHJlZUFyZ3VtZW50UG9vbGVyKTtcblxuZnVuY3Rpb24gbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lLCBpKSB7XG4gIHZhciBtYXBCb29rS2VlcGluZyA9IHRyYXZlcnNlQ29udGV4dDtcbiAgdmFyIG1hcFJlc3VsdCA9IG1hcEJvb2tLZWVwaW5nLm1hcFJlc3VsdDtcblxuICB2YXIga2V5VW5pcXVlID0gIW1hcFJlc3VsdC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAga2V5VW5pcXVlLFxuICAgICAgJ1JlYWN0Q2hpbGRyZW4ubWFwKC4uLik6IEVuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgJyArXG4gICAgICAnYCVzYC4gQ2hpbGQga2V5cyBtdXN0IGJlIHVuaXF1ZTsgd2hlbiB0d28gY2hpbGRyZW4gc2hhcmUgYSBrZXksIG9ubHkgJyArXG4gICAgICAndGhlIGZpcnN0IGNoaWxkIHdpbGwgYmUgdXNlZC4nLFxuICAgICAgbmFtZVxuICAgICkgOiBudWxsKTtcbiAgfVxuXG4gIGlmIChrZXlVbmlxdWUpIHtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPVxuICAgICAgbWFwQm9va0tlZXBpbmcubWFwRnVuY3Rpb24uY2FsbChtYXBCb29rS2VlcGluZy5tYXBDb250ZXh0LCBjaGlsZCwgaSk7XG4gICAgbWFwUmVzdWx0W25hbWVdID0gbWFwcGVkQ2hpbGQ7XG4gIH1cbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGtleSwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIFRPRE86IFRoaXMgbWF5IGxpa2VseSBicmVhayBhbnkgY2FsbHMgdG8gYFJlYWN0Q2hpbGRyZW4ubWFwYCB0aGF0IHdlcmVcbiAqIHByZXZpb3VzbHkgcmVseWluZyBvbiB0aGUgZmFjdCB0aGF0IHdlIGd1YXJkZWQgYWdhaW5zdCBudWxsIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBtYXBGdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gbWFwQ29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIG1hcFJlc3VsdCA9IHt9O1xuICB2YXIgdHJhdmVyc2VDb250ZXh0ID0gTWFwQm9va0tlZXBpbmcuZ2V0UG9vbGVkKG1hcFJlc3VsdCwgZnVuYywgY29udGV4dCk7XG4gIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIG1hcFNpbmdsZUNoaWxkSW50b0NvbnRleHQsIHRyYXZlcnNlQ29udGV4dCk7XG4gIE1hcEJvb2tLZWVwaW5nLnJlbGVhc2UodHJhdmVyc2VDb250ZXh0KTtcbiAgcmV0dXJuIFJlYWN0RnJhZ21lbnQuY3JlYXRlKG1hcFJlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIGZvckVhY2hTaW5nbGVDaGlsZER1bW15KHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUsIGkpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuLCBjb250ZXh0KSB7XG4gIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoU2luZ2xlQ2hpbGREdW1teSwgbnVsbCk7XG59XG5cbnZhciBSZWFjdENoaWxkcmVuID0ge1xuICBmb3JFYWNoOiBmb3JFYWNoQ2hpbGRyZW4sXG4gIG1hcDogbWFwQ2hpbGRyZW4sXG4gIGNvdW50OiBjb3VudENoaWxkcmVuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q2hpbGRyZW47XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRGFHbHNaSEpsYmk1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRGFHbHNaSEpsYmx4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGQnZiMnhsWkVOc1lYTnpJRDBnY21WeGRXbHlaU2hjSWk0dlVHOXZiR1ZrUTJ4aGMzTmNJaWs3WEc1MllYSWdVbVZoWTNSR2NtRm5iV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJuSmhaMjFsYm5SY0lpazdYRzVjYm5aaGNpQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVJRDBnY21WeGRXbHlaU2hjSWk0dmRISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJsd2lLVHRjYm5aaGNpQjNZWEp1YVc1bklEMGdjbVZ4ZFdseVpTaGNJaTR2ZDJGeWJtbHVaMXdpS1R0Y2JseHVkbUZ5SUhSM2IwRnlaM1Z0Wlc1MFVHOXZiR1Z5SUQwZ1VHOXZiR1ZrUTJ4aGMzTXVkSGR2UVhKbmRXMWxiblJRYjI5c1pYSTdYRzUyWVhJZ2RHaHlaV1ZCY21kMWJXVnVkRkJ2YjJ4bGNpQTlJRkJ2YjJ4bFpFTnNZWE56TG5Sb2NtVmxRWEpuZFcxbGJuUlFiMjlzWlhJN1hHNWNiaThxS2x4dUlDb2dVRzl2YkdWa1EyeGhjM01nY21Wd2NtVnpaVzUwYVc1bklIUm9aU0JpYjI5cmEyVmxjR2x1WnlCaGMzTnZZMmxoZEdWa0lIZHBkR2dnY0dWeVptOXliV2x1WnlCaElHTm9hV3hrWEc0Z0tpQjBjbUYyWlhKellXd3VJRUZzYkc5M2N5QmhkbTlwWkdsdVp5QmlhVzVrYVc1bklHTmhiR3hpWVdOcmN5NWNiaUFxWEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0lnUm05eVJXRmphRUp2YjJ0TFpXVndhVzVuWEc0Z0tpQkFjR0Z5WVcwZ2V5Rm1kVzVqZEdsdmJuMGdabTl5UldGamFFWjFibU4wYVc5dUlFWjFibU4wYVc5dUlIUnZJSEJsY21admNtMGdkSEpoZG1WeWMyRnNJSGRwZEdndVhHNGdLaUJBY0dGeVlXMGdlejhxZlNCbWIzSkZZV05vUTI5dWRHVjRkQ0JEYjI1MFpYaDBJSFJ2SUhCbGNtWnZjbTBnWTI5dWRHVjRkQ0IzYVhSb0xseHVJQ292WEc1bWRXNWpkR2x2YmlCR2IzSkZZV05vUW05dmEwdGxaWEJwYm1jb1ptOXlSV0ZqYUVaMWJtTjBhVzl1TENCbWIzSkZZV05vUTI5dWRHVjRkQ2tnZTF4dUlDQjBhR2x6TG1admNrVmhZMmhHZFc1amRHbHZiaUE5SUdadmNrVmhZMmhHZFc1amRHbHZianRjYmlBZ2RHaHBjeTVtYjNKRllXTm9RMjl1ZEdWNGRDQTlJR1p2Y2tWaFkyaERiMjUwWlhoME8xeHVmVnh1VUc5dmJHVmtRMnhoYzNNdVlXUmtVRzl2YkdsdVoxUnZLRVp2Y2tWaFkyaENiMjlyUzJWbGNHbHVaeXdnZEhkdlFYSm5kVzFsYm5SUWIyOXNaWElwTzF4dVhHNW1kVzVqZEdsdmJpQm1iM0pGWVdOb1UybHVaMnhsUTJocGJHUW9kSEpoZG1WeWMyVkRiMjUwWlhoMExDQmphR2xzWkN3Z2JtRnRaU3dnYVNrZ2UxeHVJQ0IyWVhJZ1ptOXlSV0ZqYUVKdmIydExaV1Z3YVc1bklEMGdkSEpoZG1WeWMyVkRiMjUwWlhoME8xeHVJQ0JtYjNKRllXTm9RbTl2YTB0bFpYQnBibWN1Wm05eVJXRmphRVoxYm1OMGFXOXVMbU5oYkd3b1hHNGdJQ0FnWm05eVJXRmphRUp2YjJ0TFpXVndhVzVuTG1admNrVmhZMmhEYjI1MFpYaDBMQ0JqYUdsc1pDd2dhU2s3WEc1OVhHNWNiaThxS2x4dUlDb2dTWFJsY21GMFpYTWdkR2h5YjNWbmFDQmphR2xzWkhKbGJpQjBhR0YwSUdGeVpTQjBlWEJwWTJGc2JIa2djM0JsWTJsbWFXVmtJR0Z6SUdCd2NtOXdjeTVqYUdsc1pISmxibUF1WEc0Z0tseHVJQ29nVkdobElIQnliM1pwWkdWa0lHWnZja1ZoWTJoR2RXNWpLR05vYVd4a0xDQnBibVJsZUNrZ2QybHNiQ0JpWlNCallXeHNaV1FnWm05eUlHVmhZMmhjYmlBcUlHeGxZV1lnWTJocGJHUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIcy9LbjBnWTJocGJHUnlaVzRnUTJocGJHUnlaVzRnZEhKbFpTQmpiMjUwWVdsdVpYSXVYRzRnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1S0Nvc0lHbHVkQ2w5SUdadmNrVmhZMmhHZFc1akxseHVJQ29nUUhCaGNtRnRJSHNxZlNCbWIzSkZZV05vUTI5dWRHVjRkQ0JEYjI1MFpYaDBJR1p2Y2lCbWIzSkZZV05vUTI5dWRHVjRkQzVjYmlBcUwxeHVablZ1WTNScGIyNGdabTl5UldGamFFTm9hV3hrY21WdUtHTm9hV3hrY21WdUxDQm1iM0pGWVdOb1JuVnVZeXdnWm05eVJXRmphRU52Ym5SbGVIUXBJSHRjYmlBZ2FXWWdLR05vYVd4a2NtVnVJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQnlaWFIxY200Z1kyaHBiR1J5Wlc0N1hHNGdJSDFjYmx4dUlDQjJZWElnZEhKaGRtVnljMlZEYjI1MFpYaDBJRDFjYmlBZ0lDQkdiM0pGWVdOb1FtOXZhMHRsWlhCcGJtY3VaMlYwVUc5dmJHVmtLR1p2Y2tWaFkyaEdkVzVqTENCbWIzSkZZV05vUTI5dWRHVjRkQ2s3WEc0Z0lIUnlZWFpsY25ObFFXeHNRMmhwYkdSeVpXNG9ZMmhwYkdSeVpXNHNJR1p2Y2tWaFkyaFRhVzVuYkdWRGFHbHNaQ3dnZEhKaGRtVnljMlZEYjI1MFpYaDBLVHRjYmlBZ1JtOXlSV0ZqYUVKdmIydExaV1Z3YVc1bkxuSmxiR1ZoYzJVb2RISmhkbVZ5YzJWRGIyNTBaWGgwS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJRYjI5c1pXUkRiR0Z6Y3lCeVpYQnlaWE5sYm5ScGJtY2dkR2hsSUdKdmIydHJaV1Z3YVc1bklHRnpjMjlqYVdGMFpXUWdkMmwwYUNCd1pYSm1iM0p0YVc1bklHRWdZMmhwYkdSY2JpQXFJRzFoY0hCcGJtY3VJRUZzYkc5M2N5QmhkbTlwWkdsdVp5QmlhVzVrYVc1bklHTmhiR3hpWVdOcmN5NWNiaUFxWEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0lnVFdGd1FtOXZhMHRsWlhCcGJtZGNiaUFxSUVCd1lYSmhiU0I3SVNwOUlHMWhjRkpsYzNWc2RDQlBZbXBsWTNRZ1kyOXVkR0ZwYm1sdVp5QjBhR1VnYjNKa1pYSmxaQ0J0WVhBZ2IyWWdjbVZ6ZFd4MGN5NWNiaUFxSUVCd1lYSmhiU0I3SVdaMWJtTjBhVzl1ZlNCdFlYQkdkVzVqZEdsdmJpQkdkVzVqZEdsdmJpQjBieUJ3WlhKbWIzSnRJRzFoY0hCcGJtY2dkMmwwYUM1Y2JpQXFJRUJ3WVhKaGJTQjdQeXA5SUcxaGNFTnZiblJsZUhRZ1EyOXVkR1Y0ZENCMGJ5QndaWEptYjNKdElHMWhjSEJwYm1jZ2QybDBhQzVjYmlBcUwxeHVablZ1WTNScGIyNGdUV0Z3UW05dmEwdGxaWEJwYm1jb2JXRndVbVZ6ZFd4MExDQnRZWEJHZFc1amRHbHZiaXdnYldGd1EyOXVkR1Y0ZENrZ2UxeHVJQ0IwYUdsekxtMWhjRkpsYzNWc2RDQTlJRzFoY0ZKbGMzVnNkRHRjYmlBZ2RHaHBjeTV0WVhCR2RXNWpkR2x2YmlBOUlHMWhjRVoxYm1OMGFXOXVPMXh1SUNCMGFHbHpMbTFoY0VOdmJuUmxlSFFnUFNCdFlYQkRiMjUwWlhoME8xeHVmVnh1VUc5dmJHVmtRMnhoYzNNdVlXUmtVRzl2YkdsdVoxUnZLRTFoY0VKdmIydExaV1Z3YVc1bkxDQjBhSEpsWlVGeVozVnRaVzUwVUc5dmJHVnlLVHRjYmx4dVpuVnVZM1JwYjI0Z2JXRndVMmx1WjJ4bFEyaHBiR1JKYm5SdlEyOXVkR1Y0ZENoMGNtRjJaWEp6WlVOdmJuUmxlSFFzSUdOb2FXeGtMQ0J1WVcxbExDQnBLU0I3WEc0Z0lIWmhjaUJ0WVhCQ2IyOXJTMlZsY0dsdVp5QTlJSFJ5WVhabGNuTmxRMjl1ZEdWNGREdGNiaUFnZG1GeUlHMWhjRkpsYzNWc2RDQTlJRzFoY0VKdmIydExaV1Z3YVc1bkxtMWhjRkpsYzNWc2REdGNibHh1SUNCMllYSWdhMlY1Vlc1cGNYVmxJRDBnSVcxaGNGSmxjM1ZzZEM1b1lYTlBkMjVRY205d1pYSjBlU2h1WVcxbEtUdGNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ2EyVjVWVzVwY1hWbExGeHVJQ0FnSUNBZ0oxSmxZV04wUTJocGJHUnlaVzR1YldGd0tDNHVMaWs2SUVWdVkyOTFiblJsY21Wa0lIUjNieUJqYUdsc1pISmxiaUIzYVhSb0lIUm9aU0J6WVcxbElHdGxlU3dnSnlBclhHNGdJQ0FnSUNBbllDVnpZQzRnUTJocGJHUWdhMlY1Y3lCdGRYTjBJR0psSUhWdWFYRjFaVHNnZDJobGJpQjBkMjhnWTJocGJHUnlaVzRnYzJoaGNtVWdZU0JyWlhrc0lHOXViSGtnSnlBclhHNGdJQ0FnSUNBbmRHaGxJR1pwY25OMElHTm9hV3hrSUhkcGJHd2dZbVVnZFhObFpDNG5MRnh1SUNBZ0lDQWdibUZ0WlZ4dUlDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHJaWGxWYm1seGRXVXBJSHRjYmlBZ0lDQjJZWElnYldGd2NHVmtRMmhwYkdRZ1BWeHVJQ0FnSUNBZ2JXRndRbTl2YTB0bFpYQnBibWN1YldGd1JuVnVZM1JwYjI0dVkyRnNiQ2h0WVhCQ2IyOXJTMlZsY0dsdVp5NXRZWEJEYjI1MFpYaDBMQ0JqYUdsc1pDd2dhU2s3WEc0Z0lDQWdiV0Z3VW1WemRXeDBXMjVoYldWZElEMGdiV0Z3Y0dWa1EyaHBiR1E3WEc0Z0lIMWNibjFjYmx4dUx5b3FYRzRnS2lCTllYQnpJR05vYVd4a2NtVnVJSFJvWVhRZ1lYSmxJSFI1Y0dsallXeHNlU0J6Y0dWamFXWnBaV1FnWVhNZ1lIQnliM0J6TG1Ob2FXeGtjbVZ1WUM1Y2JpQXFYRzRnS2lCVWFHVWdjSEp2ZG1sa1pXUWdiV0Z3Um5WdVkzUnBiMjRvWTJocGJHUXNJR3RsZVN3Z2FXNWtaWGdwSUhkcGJHd2dZbVVnWTJGc2JHVmtJR1p2Y2lCbFlXTm9YRzRnS2lCc1pXRm1JR05vYVd4a0xseHVJQ3BjYmlBcUlGUlBSRTg2SUZSb2FYTWdiV0Y1SUd4cGEyVnNlU0JpY21WaGF5QmhibmtnWTJGc2JITWdkRzhnWUZKbFlXTjBRMmhwYkdSeVpXNHViV0Z3WUNCMGFHRjBJSGRsY21WY2JpQXFJSEJ5WlhacGIzVnpiSGtnY21Wc2VXbHVaeUJ2YmlCMGFHVWdabUZqZENCMGFHRjBJSGRsSUdkMVlYSmtaV1FnWVdkaGFXNXpkQ0J1ZFd4c0lHTm9hV3hrY21WdUxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1B5cDlJR05vYVd4a2NtVnVJRU5vYVd4a2NtVnVJSFJ5WldVZ1kyOXVkR0ZwYm1WeUxseHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZiaWdxTENCcGJuUXBmU0J0WVhCR2RXNWpkR2x2Ymk1Y2JpQXFJRUJ3WVhKaGJTQjdLbjBnYldGd1EyOXVkR1Y0ZENCRGIyNTBaWGgwSUdadmNpQnRZWEJHZFc1amRHbHZiaTVjYmlBcUlFQnlaWFIxY200Z2UyOWlhbVZqZEgwZ1QySnFaV04wSUdOdmJuUmhhVzVwYm1jZ2RHaGxJRzl5WkdWeVpXUWdiV0Z3SUc5bUlISmxjM1ZzZEhNdVhHNGdLaTljYm1aMWJtTjBhVzl1SUcxaGNFTm9hV3hrY21WdUtHTm9hV3hrY21WdUxDQm1kVzVqTENCamIyNTBaWGgwS1NCN1hHNGdJR2xtSUNoamFHbHNaSEpsYmlBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnY21WMGRYSnVJR05vYVd4a2NtVnVPMXh1SUNCOVhHNWNiaUFnZG1GeUlHMWhjRkpsYzNWc2RDQTlJSHQ5TzF4dUlDQjJZWElnZEhKaGRtVnljMlZEYjI1MFpYaDBJRDBnVFdGd1FtOXZhMHRsWlhCcGJtY3VaMlYwVUc5dmJHVmtLRzFoY0ZKbGMzVnNkQ3dnWm5WdVl5d2dZMjl1ZEdWNGRDazdYRzRnSUhSeVlYWmxjbk5sUVd4c1EyaHBiR1J5Wlc0b1kyaHBiR1J5Wlc0c0lHMWhjRk5wYm1kc1pVTm9hV3hrU1c1MGIwTnZiblJsZUhRc0lIUnlZWFpsY25ObFEyOXVkR1Y0ZENrN1hHNGdJRTFoY0VKdmIydExaV1Z3YVc1bkxuSmxiR1ZoYzJVb2RISmhkbVZ5YzJWRGIyNTBaWGgwS1R0Y2JpQWdjbVYwZFhKdUlGSmxZV04wUm5KaFoyMWxiblF1WTNKbFlYUmxLRzFoY0ZKbGMzVnNkQ2s3WEc1OVhHNWNibVoxYm1OMGFXOXVJR1p2Y2tWaFkyaFRhVzVuYkdWRGFHbHNaRVIxYlcxNUtIUnlZWFpsY25ObFEyOXVkR1Y0ZEN3Z1kyaHBiR1FzSUc1aGJXVXNJR2twSUh0Y2JpQWdjbVYwZFhKdUlHNTFiR3c3WEc1OVhHNWNiaThxS2x4dUlDb2dRMjkxYm5RZ2RHaGxJRzUxYldKbGNpQnZaaUJqYUdsc1pISmxiaUIwYUdGMElHRnlaU0IwZVhCcFkyRnNiSGtnYzNCbFkybG1hV1ZrSUdGelhHNGdLaUJnY0hKdmNITXVZMmhwYkdSeVpXNWdMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdQeXA5SUdOb2FXeGtjbVZ1SUVOb2FXeGtjbVZ1SUhSeVpXVWdZMjl1ZEdGcGJtVnlMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNCVWFHVWdiblZ0WW1WeUlHOW1JR05vYVd4a2NtVnVMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQmpiM1Z1ZEVOb2FXeGtjbVZ1S0dOb2FXeGtjbVZ1TENCamIyNTBaWGgwS1NCN1hHNGdJSEpsZEhWeWJpQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVLR05vYVd4a2NtVnVMQ0JtYjNKRllXTm9VMmx1WjJ4bFEyaHBiR1JFZFcxdGVTd2diblZzYkNrN1hHNTlYRzVjYm5aaGNpQlNaV0ZqZEVOb2FXeGtjbVZ1SUQwZ2UxeHVJQ0JtYjNKRllXTm9PaUJtYjNKRllXTm9RMmhwYkdSeVpXNHNYRzRnSUcxaGNEb2diV0Z3UTJocGJHUnlaVzRzWEc0Z0lHTnZkVzUwT2lCamIzVnVkRU5vYVd4a2NtVnVYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wUTJocGJHUnlaVzQ3WEc0aVhYMD0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q2xhc3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9uZW50XCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RXJyb3JVdGlscyA9IHJlcXVpcmUoXCIuL1JlYWN0RXJyb3JVdGlsc1wiKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZU1hcFwiKTtcbnZhciBSZWFjdExpZmVDeWNsZSA9IHJlcXVpcmUoXCIuL1JlYWN0TGlmZUN5Y2xlXCIpO1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMgPSByZXF1aXJlKFwiLi9SZWFjdFByb3BUeXBlTG9jYXRpb25zXCIpO1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNcIik7XG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlUXVldWVcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciBrZXlNaXJyb3IgPSByZXF1aXJlKFwiLi9rZXlNaXJyb3JcIik7XG52YXIga2V5T2YgPSByZXF1aXJlKFwiLi9rZXlPZlwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIE1JWElOU19LRVkgPSBrZXlPZih7bWl4aW5zOiBudWxsfSk7XG5cbi8qKlxuICogUG9saWNpZXMgdGhhdCBkZXNjcmliZSBtZXRob2RzIGluIGBSZWFjdENsYXNzSW50ZXJmYWNlYC5cbiAqL1xudmFyIFNwZWNQb2xpY3kgPSBrZXlNaXJyb3Ioe1xuICAvKipcbiAgICogVGhlc2UgbWV0aG9kcyBtYXkgYmUgZGVmaW5lZCBvbmx5IG9uY2UgYnkgdGhlIGNsYXNzIHNwZWNpZmljYXRpb24gb3IgbWl4aW4uXG4gICAqL1xuICBERUZJTkVfT05DRTogbnVsbCxcbiAgLyoqXG4gICAqIFRoZXNlIG1ldGhvZHMgbWF5IGJlIGRlZmluZWQgYnkgYm90aCB0aGUgY2xhc3Mgc3BlY2lmaWNhdGlvbiBhbmQgbWl4aW5zLlxuICAgKiBTdWJzZXF1ZW50IGRlZmluaXRpb25zIHdpbGwgYmUgY2hhaW5lZC4gVGhlc2UgbWV0aG9kcyBtdXN0IHJldHVybiB2b2lkLlxuICAgKi9cbiAgREVGSU5FX01BTlk6IG51bGwsXG4gIC8qKlxuICAgKiBUaGVzZSBtZXRob2RzIGFyZSBvdmVycmlkaW5nIHRoZSBiYXNlIGNsYXNzLlxuICAgKi9cbiAgT1ZFUlJJREVfQkFTRTogbnVsbCxcbiAgLyoqXG4gICAqIFRoZXNlIG1ldGhvZHMgYXJlIHNpbWlsYXIgdG8gREVGSU5FX01BTlksIGV4Y2VwdCB3ZSBhc3N1bWUgdGhleSByZXR1cm5cbiAgICogb2JqZWN0cy4gV2UgdHJ5IHRvIG1lcmdlIHRoZSBrZXlzIG9mIHRoZSByZXR1cm4gdmFsdWVzIG9mIGFsbCB0aGUgbWl4ZWQgaW5cbiAgICogZnVuY3Rpb25zLiBJZiB0aGVyZSBpcyBhIGtleSBjb25mbGljdCB3ZSB0aHJvdy5cbiAgICovXG4gIERFRklORV9NQU5ZX01FUkdFRDogbnVsbFxufSk7XG5cblxudmFyIGluamVjdGVkTWl4aW5zID0gW107XG5cbi8qKlxuICogQ29tcG9zaXRlIGNvbXBvbmVudHMgYXJlIGhpZ2hlci1sZXZlbCBjb21wb25lbnRzIHRoYXQgY29tcG9zZSBvdGhlciBjb21wb3NpdGVcbiAqIG9yIG5hdGl2ZSBjb21wb25lbnRzLlxuICpcbiAqIFRvIGNyZWF0ZSBhIG5ldyB0eXBlIG9mIGBSZWFjdENsYXNzYCwgcGFzcyBhIHNwZWNpZmljYXRpb24gb2ZcbiAqIHlvdXIgbmV3IGNsYXNzIHRvIGBSZWFjdC5jcmVhdGVDbGFzc2AuIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHlvdXIgY2xhc3NcbiAqIHNwZWNpZmljYXRpb24gaXMgdGhhdCB5b3UgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLlxuICpcbiAqICAgdmFyIE15Q29tcG9uZW50ID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gKiAgICAgICByZXR1cm4gPGRpdj5IZWxsbyBXb3JsZDwvZGl2PjtcbiAqICAgICB9XG4gKiAgIH0pO1xuICpcbiAqIFRoZSBjbGFzcyBzcGVjaWZpY2F0aW9uIHN1cHBvcnRzIGEgc3BlY2lmaWMgcHJvdG9jb2wgb2YgbWV0aG9kcyB0aGF0IGhhdmVcbiAqIHNwZWNpYWwgbWVhbmluZyAoZS5nLiBgcmVuZGVyYCkuIFNlZSBgUmVhY3RDbGFzc0ludGVyZmFjZWAgZm9yXG4gKiBtb3JlIHRoZSBjb21wcmVoZW5zaXZlIHByb3RvY29sLiBBbnkgb3RoZXIgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBpbiB0aGVcbiAqIGNsYXNzIHNwZWNpZmljYXRpb24gd2lsbCBhdmFpbGFibGUgb24gdGhlIHByb3RvdHlwZS5cbiAqXG4gKiBAaW50ZXJmYWNlIFJlYWN0Q2xhc3NJbnRlcmZhY2VcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RDbGFzc0ludGVyZmFjZSA9IHtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgTWl4aW4gb2JqZWN0cyB0byBpbmNsdWRlIHdoZW4gZGVmaW5pbmcgeW91ciBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHthcnJheX1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBtaXhpbnM6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIEFuIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBvblxuICAgKiB0aGUgY29tcG9uZW50J3MgY29uc3RydWN0b3IgaW5zdGVhZCBvZiBpdHMgcHJvdG90eXBlIChzdGF0aWMgbWV0aG9kcykuXG4gICAqXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgc3RhdGljczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogRGVmaW5pdGlvbiBvZiBwcm9wIHR5cGVzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBwcm9wVHlwZXM6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29udGV4dFR5cGVzOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBEZWZpbml0aW9uIG9mIGNvbnRleHQgdHlwZXMgdGhpcyBjb21wb25lbnQgc2V0cyBmb3IgaXRzIGNoaWxkcmVuLlxuICAgKlxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGNoaWxkQ29udGV4dFR5cGVzOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8vID09PT0gRGVmaW5pdGlvbiBtZXRob2RzID09PT1cblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVmFsdWVzIGluIHRoZSBtYXBwaW5nIHdpbGwgYmUgc2V0IG9uXG4gICAqIGB0aGlzLnByb3BzYCBpZiB0aGF0IHByb3AgaXMgbm90IHNwZWNpZmllZCAoaS5lLiB1c2luZyBhbiBgaW5gIGNoZWNrKS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgYGdldEluaXRpYWxTdGF0ZWAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgcmVseVxuICAgKiBvbiBgdGhpcy5zdGF0ZWAgb3IgdXNlIGB0aGlzLnNldFN0YXRlYC5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGdldERlZmF1bHRQcm9wczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQsXG5cbiAgLyoqXG4gICAqIEludm9rZWQgb25jZSBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZFxuICAgKiBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgdGhpcy5zdGF0ZWAuXG4gICAqXG4gICAqICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICogICAgIHJldHVybiB7XG4gICAqICAgICAgIGlzT246IGZhbHNlLFxuICAgKiAgICAgICBmb29CYXo6IG5ldyBCYXpGb28oKVxuICAgKiAgICAgfVxuICAgKiAgIH1cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGdldEluaXRpYWxTdGF0ZTogU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQsXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBnZXRDaGlsZENvbnRleHQ6IFNwZWNQb2xpY3kuREVGSU5FX01BTllfTUVSR0VELFxuXG4gIC8qKlxuICAgKiBVc2VzIHByb3BzIGZyb20gYHRoaXMucHJvcHNgIGFuZCBzdGF0ZSBmcm9tIGB0aGlzLnN0YXRlYCB0byByZW5kZXIgdGhlXG4gICAqIHN0cnVjdHVyZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGFib3V0IHdoZW4gb3IgaG93IG9mdGVuIHRoaXMgbWV0aG9kIGlzIGludm9rZWQsIHNvXG4gICAqIGl0IG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzLlxuICAgKlxuICAgKiAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAqICAgICB2YXIgbmFtZSA9IHRoaXMucHJvcHMubmFtZTtcbiAgICogICAgIHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9kaXY+O1xuICAgKiAgIH1cbiAgICpcbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9XG4gICAqIEBub3NpZGVlZmZlY3RzXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgcmVuZGVyOiBTcGVjUG9saWN5LkRFRklORV9PTkNFLFxuXG5cblxuICAvLyA9PT09IERlbGVnYXRlIG1ldGhvZHMgPT09PVxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsbHkgY3JlYXRlZCBhbmQgYWJvdXQgdG8gYmUgbW91bnRlZC5cbiAgICogVGhpcyBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMsIGJ1dCBhbnkgZXh0ZXJuYWwgc3Vic2NyaXB0aW9ucyBvciBkYXRhIGNyZWF0ZWRcbiAgICogYnkgdGhpcyBtZXRob2QgbXVzdCBiZSBjbGVhbmVkIHVwIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGAuXG4gICAqXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29tcG9uZW50V2lsbE1vdW50OiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBtb3VudGVkIGFuZCBoYXMgYSBET00gcmVwcmVzZW50YXRpb24uXG4gICAqIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBET00gbm9kZSBpcyBpbiB0aGUgZG9jdW1lbnQuXG4gICAqXG4gICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzXG4gICAqIGJlZW4gbW91bnRlZCAoaW5pdGlhbGl6ZWQgYW5kIHJlbmRlcmVkKSBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29tcG9uZW50RGlkTW91bnQ6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIEludm9rZWQgYmVmb3JlIHRoZSBjb21wb25lbnQgcmVjZWl2ZXMgbmV3IHByb3BzLlxuICAgKlxuICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byByZWFjdCB0byBhIHByb3AgdHJhbnNpdGlvbiBieSB1cGRhdGluZyB0aGVcbiAgICogc3RhdGUgdXNpbmcgYHRoaXMuc2V0U3RhdGVgLiBDdXJyZW50IHByb3BzIGFyZSBhY2Nlc3NlZCB2aWEgYHRoaXMucHJvcHNgLlxuICAgKlxuICAgKiAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dENvbnRleHQpIHtcbiAgICogICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgKiAgICAgICBsaWtlc0luY3JlYXNpbmc6IG5leHRQcm9wcy5saWtlQ291bnQgPiB0aGlzLnByb3BzLmxpa2VDb3VudFxuICAgKiAgICAgfSk7XG4gICAqICAgfVxuICAgKlxuICAgKiBOT1RFOiBUaGVyZSBpcyBubyBlcXVpdmFsZW50IGBjb21wb25lbnRXaWxsUmVjZWl2ZVN0YXRlYC4gQW4gaW5jb21pbmcgcHJvcFxuICAgKiB0cmFuc2l0aW9uIG1heSBjYXVzZSBhIHN0YXRlIGNoYW5nZSwgYnV0IHRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZS4gSWYgeW91XG4gICAqIG5lZWQgaXQsIHlvdSBhcmUgcHJvYmFibHkgbG9va2luZyBmb3IgYGNvbXBvbmVudFdpbGxVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGlsZSBkZWNpZGluZyBpZiB0aGUgY29tcG9uZW50IHNob3VsZCBiZSB1cGRhdGVkIGFzIGEgcmVzdWx0IG9mXG4gICAqIHJlY2VpdmluZyBuZXcgcHJvcHMsIHN0YXRlIGFuZC9vciBjb250ZXh0LlxuICAgKlxuICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBgcmV0dXJuIGZhbHNlYCB3aGVuIHlvdSdyZSBjZXJ0YWluIHRoYXQgdGhlXG4gICAqIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBwcm9wcy9zdGF0ZS9jb250ZXh0IHdpbGwgbm90IHJlcXVpcmUgYSBjb21wb25lbnRcbiAgICogdXBkYXRlLlxuICAgKlxuICAgKiAgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gICAqICAgICByZXR1cm4gIWVxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcykgfHxcbiAgICogICAgICAgIWVxdWFsKG5leHRTdGF0ZSwgdGhpcy5zdGF0ZSkgfHxcbiAgICogICAgICAgIWVxdWFsKG5leHRDb250ZXh0LCB0aGlzLmNvbnRleHQpO1xuICAgKiAgIH1cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZVxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRDb250ZXh0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlLlxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZTogU3BlY1BvbGljeS5ERUZJTkVfT05DRSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWJvdXQgdG8gdXBkYXRlIGR1ZSB0byBhIHRyYW5zaXRpb24gZnJvbVxuICAgKiBgdGhpcy5wcm9wc2AsIGB0aGlzLnN0YXRlYCBhbmQgYHRoaXMuY29udGV4dGAgdG8gYG5leHRQcm9wc2AsIGBuZXh0U3RhdGVgXG4gICAqIGFuZCBgbmV4dENvbnRleHRgLlxuICAgKlxuICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBwZXJmb3JtIHByZXBhcmF0aW9uIGJlZm9yZSBhbiB1cGRhdGUgb2NjdXJzLlxuICAgKlxuICAgKiBOT1RFOiBZb3UgKipjYW5ub3QqKiB1c2UgYHRoaXMuc2V0U3RhdGUoKWAgaW4gdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0U3RhdGVcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dFxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29tcG9uZW50V2lsbFVwZGF0ZTogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQncyBET00gcmVwcmVzZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZC5cbiAgICpcbiAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBoYXNcbiAgICogYmVlbiB1cGRhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJldlByb3BzXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcHJldlN0YXRlXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcHJldkNvbnRleHRcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSByb290Tm9kZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudC5cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBjb21wb25lbnREaWRVcGRhdGU6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50IGFuZCBoYXZlXG4gICAqIGl0cyBET00gcmVwcmVzZW50YXRpb24gZGVzdHJveWVkLlxuICAgKlxuICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBkZWFsbG9jYXRlIGFueSBleHRlcm5hbCByZXNvdXJjZXMuXG4gICAqXG4gICAqIE5PVEU6IFRoZXJlIGlzIG5vIGBjb21wb25lbnREaWRVbm1vdW50YCBzaW5jZSB5b3VyIGNvbXBvbmVudCB3aWxsIGhhdmUgYmVlblxuICAgKiBkZXN0cm95ZWQgYnkgdGhhdCBwb2ludC5cbiAgICpcbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBjb21wb25lbnRXaWxsVW5tb3VudDogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuXG5cbiAgLy8gPT09PSBBZHZhbmNlZCBtZXRob2RzID09PT1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29tcG9uZW50J3MgY3VycmVudGx5IG1vdW50ZWQgRE9NIHJlcHJlc2VudGF0aW9uLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIGltcGxlbWVudHMgUmVhY3QncyByZW5kZXJpbmcgYW5kIHJlY29uY2lsaWF0aW9uIGFsZ29yaXRobS5cbiAgICogU29waGlzdGljYXRlZCBjbGllbnRzIG1heSB3aXNoIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQGludGVybmFsXG4gICAqIEBvdmVycmlkYWJsZVxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50OiBTcGVjUG9saWN5Lk9WRVJSSURFX0JBU0VcblxufTtcblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gY2xhc3Mgc3BlY2lmaWNhdGlvbiBrZXlzIHRvIHNwZWNpYWwgcHJvY2Vzc2luZyBmdW5jdGlvbnMuXG4gKlxuICogQWx0aG91Z2ggdGhlc2UgYXJlIGRlY2xhcmVkIGxpa2UgaW5zdGFuY2UgcHJvcGVydGllcyBpbiB0aGUgc3BlY2lmaWNhdGlvblxuICogd2hlbiBkZWZpbmluZyBjbGFzc2VzIHVzaW5nIGBSZWFjdC5jcmVhdGVDbGFzc2AsIHRoZXkgYXJlIGFjdHVhbGx5IHN0YXRpY1xuICogYW5kIGFyZSBhY2Nlc3NpYmxlIG9uIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHRoZSBwcm90b3R5cGUuIERlc3BpdGVcbiAqIGJlaW5nIHN0YXRpYywgdGhleSBtdXN0IGJlIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgXCJzdGF0aWNzXCIga2V5IHVuZGVyXG4gKiB3aGljaCBhbGwgb3RoZXIgc3RhdGljIG1ldGhvZHMgYXJlIGRlZmluZWQuXG4gKi9cbnZhciBSRVNFUlZFRF9TUEVDX0tFWVMgPSB7XG4gIGRpc3BsYXlOYW1lOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgZGlzcGxheU5hbWUpIHtcbiAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICB9LFxuICBtaXhpbnM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBtaXhpbnMpIHtcbiAgICBpZiAobWl4aW5zKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1peGlucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3RvciwgbWl4aW5zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGNoaWxkQ29udGV4dFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YWxpZGF0ZVR5cGVEZWYoXG4gICAgICAgIENvbnN0cnVjdG9yLFxuICAgICAgICBjaGlsZENvbnRleHRUeXBlcyxcbiAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5jaGlsZENvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICAgIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzID0gYXNzaWduKFxuICAgICAge30sXG4gICAgICBDb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyxcbiAgICAgIGNoaWxkQ29udGV4dFR5cGVzXG4gICAgKTtcbiAgfSxcbiAgY29udGV4dFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgY29udGV4dFR5cGVzKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFsaWRhdGVUeXBlRGVmKFxuICAgICAgICBDb25zdHJ1Y3RvcixcbiAgICAgICAgY29udGV4dFR5cGVzLFxuICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLmNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICAgIENvbnN0cnVjdG9yLmNvbnRleHRUeXBlcyA9IGFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgQ29uc3RydWN0b3IuY29udGV4dFR5cGVzLFxuICAgICAgY29udGV4dFR5cGVzXG4gICAgKTtcbiAgfSxcbiAgLyoqXG4gICAqIFNwZWNpYWwgY2FzZSBnZXREZWZhdWx0UHJvcHMgd2hpY2ggc2hvdWxkIG1vdmUgaW50byBzdGF0aWNzIGJ1dCByZXF1aXJlc1xuICAgKiBhdXRvbWF0aWMgbWVyZ2luZy5cbiAgICovXG4gIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGdldERlZmF1bHRQcm9wcykge1xuICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKFxuICAgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMsXG4gICAgICAgIGdldERlZmF1bHRQcm9wc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gZ2V0RGVmYXVsdFByb3BzO1xuICAgIH1cbiAgfSxcbiAgcHJvcFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgcHJvcFR5cGVzKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFsaWRhdGVUeXBlRGVmKFxuICAgICAgICBDb25zdHJ1Y3RvcixcbiAgICAgICAgcHJvcFR5cGVzLFxuICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLnByb3BcbiAgICAgICk7XG4gICAgfVxuICAgIENvbnN0cnVjdG9yLnByb3BUeXBlcyA9IGFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgQ29uc3RydWN0b3IucHJvcFR5cGVzLFxuICAgICAgcHJvcFR5cGVzXG4gICAgKTtcbiAgfSxcbiAgc3RhdGljczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIHN0YXRpY3MpIHtcbiAgICBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVHlwZURlZihDb25zdHJ1Y3RvciwgdHlwZURlZiwgbG9jYXRpb24pIHtcbiAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdHlwZURlZikge1xuICAgIGlmICh0eXBlRGVmLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgLy8gdXNlIGEgd2FybmluZyBpbnN0ZWFkIG9mIGFuIGludmFyaWFudCBzbyBjb21wb25lbnRzXG4gICAgICAvLyBkb24ndCBzaG93IHVwIGluIHByb2QgYnV0IG5vdCBpbiBfX0RFVl9fXG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgdHlwZW9mIHR5cGVEZWZbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nLFxuICAgICAgICAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSAnICtcbiAgICAgICAgJ1JlYWN0LlByb3BUeXBlcy4nLFxuICAgICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDbGFzcycsXG4gICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSxcbiAgICAgICAgcHJvcE5hbWVcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVNZXRob2RPdmVycmlkZShwcm90bywgbmFtZSkge1xuICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkobmFtZSkgP1xuICAgIFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV0gOlxuICAgIG51bGw7XG5cbiAgLy8gRGlzYWxsb3cgb3ZlcnJpZGluZyBvZiBiYXNlIGNsYXNzIG1ldGhvZHMgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC5cbiAgaWYgKFJlYWN0Q2xhc3NNaXhpbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5Lk9WRVJSSURFX0JBU0UsXG4gICAgICAnUmVhY3RDbGFzc0ludGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIG92ZXJyaWRlICcgK1xuICAgICAgJ2Alc2AgZnJvbSB5b3VyIGNsYXNzIHNwZWNpZmljYXRpb24uIEVuc3VyZSB0aGF0IHlvdXIgbWV0aG9kIG5hbWVzICcgK1xuICAgICAgJ2RvIG5vdCBvdmVybGFwIHdpdGggUmVhY3QgbWV0aG9kcy4nLFxuICAgICAgbmFtZVxuICAgICkgOiBpbnZhcmlhbnQoc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5PVkVSUklERV9CQVNFKSk7XG4gIH1cblxuICAvLyBEaXNhbGxvdyBkZWZpbmluZyBtZXRob2RzIG1vcmUgdGhhbiBvbmNlIHVubGVzcyBleHBsaWNpdGx5IGFsbG93ZWQuXG4gIGlmIChwcm90by5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZIHx8XG4gICAgICBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCxcbiAgICAgICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lICcgK1xuICAgICAgJ2Alc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSAnICtcbiAgICAgICd0byBhIG1peGluLicsXG4gICAgICBuYW1lXG4gICAgKSA6IGludmFyaWFudChzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZIHx8XG4gICAgc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQpKTtcbiAgfVxufVxuXG4vKipcbiAqIE1peGluIGhlbHBlciB3aGljaCBoYW5kbGVzIHBvbGljeSB2YWxpZGF0aW9uIGFuZCByZXNlcnZlZFxuICogc3BlY2lmaWNhdGlvbiBrZXlzIHdoZW4gYnVpbGRpbmcgUmVhY3QgY2xhc3NzZXMuXG4gKi9cbmZ1bmN0aW9uIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzcGVjKSB7XG4gIGlmICghc3BlYykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgdHlwZW9mIHNwZWMgIT09ICdmdW5jdGlvbicsXG4gICAgJ1JlYWN0Q2xhc3M6IFlvdVxcJ3JlIGF0dGVtcHRpbmcgdG8gJyArXG4gICAgJ3VzZSBhIGNvbXBvbmVudCBjbGFzcyBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LidcbiAgKSA6IGludmFyaWFudCh0eXBlb2Ygc3BlYyAhPT0gJ2Z1bmN0aW9uJykpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoc3BlYyksXG4gICAgJ1JlYWN0Q2xhc3M6IFlvdVxcJ3JlIGF0dGVtcHRpbmcgdG8gJyArXG4gICAgJ3VzZSBhIGNvbXBvbmVudCBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LidcbiAgKSA6IGludmFyaWFudCghUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHNwZWMpKSk7XG5cbiAgdmFyIHByb3RvID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gIC8vIEJ5IGhhbmRsaW5nIG1peGlucyBiZWZvcmUgYW55IG90aGVyIHByb3BlcnRpZXMsIHdlIGVuc3VyZSB0aGUgc2FtZVxuICAvLyBjaGFpbmluZyBvcmRlciBpcyBhcHBsaWVkIHRvIG1ldGhvZHMgd2l0aCBERUZJTkVfTUFOWSBwb2xpY3ksIHdoZXRoZXJcbiAgLy8gbWl4aW5zIGFyZSBsaXN0ZWQgYmVmb3JlIG9yIGFmdGVyIHRoZXNlIG1ldGhvZHMgaW4gdGhlIHNwZWMuXG4gIGlmIChzcGVjLmhhc093blByb3BlcnR5KE1JWElOU19LRVkpKSB7XG4gICAgUkVTRVJWRURfU1BFQ19LRVlTLm1peGlucyhDb25zdHJ1Y3Rvciwgc3BlYy5taXhpbnMpO1xuICB9XG5cbiAgZm9yICh2YXIgbmFtZSBpbiBzcGVjKSB7XG4gICAgaWYgKCFzcGVjLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobmFtZSA9PT0gTUlYSU5TX0tFWSkge1xuICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgbWl4aW5zIGluIGEgc3BlY2lhbCBjYXNlIGFib3ZlXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcGVydHkgPSBzcGVjW25hbWVdO1xuICAgIHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUocHJvdG8sIG5hbWUpO1xuXG4gICAgaWYgKFJFU0VSVkVEX1NQRUNfS0VZUy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgUkVTRVJWRURfU1BFQ19LRVlTW25hbWVdKENvbnN0cnVjdG9yLCBwcm9wZXJ0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNldHVwIG1ldGhvZHMgb24gcHJvdG90eXBlOlxuICAgICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXIgbWV0aG9kcyBzaG91bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgYm91bmQ6XG4gICAgICAvLyAxLiBFeHBlY3RlZCBSZWFjdENsYXNzIG1ldGhvZHMgKGluIHRoZSBcImludGVyZmFjZVwiKS5cbiAgICAgIC8vIDIuIE92ZXJyaWRkZW4gbWV0aG9kcyAodGhhdCB3ZXJlIG1peGVkIGluKS5cbiAgICAgIHZhciBpc1JlYWN0Q2xhc3NNZXRob2QgPVxuICAgICAgICBSZWFjdENsYXNzSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpO1xuICAgICAgdmFyIGlzQWxyZWFkeURlZmluZWQgPSBwcm90by5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgICAgIHZhciBtYXJrZWREb250QmluZCA9IHByb3BlcnR5ICYmIHByb3BlcnR5Ll9fcmVhY3REb250QmluZDtcbiAgICAgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHByb3BlcnR5ID09PSAnZnVuY3Rpb24nO1xuICAgICAgdmFyIHNob3VsZEF1dG9CaW5kID1cbiAgICAgICAgaXNGdW5jdGlvbiAmJlxuICAgICAgICAhaXNSZWFjdENsYXNzTWV0aG9kICYmXG4gICAgICAgICFpc0FscmVhZHlEZWZpbmVkICYmXG4gICAgICAgICFtYXJrZWREb250QmluZDtcblxuICAgICAgaWYgKHNob3VsZEF1dG9CaW5kKSB7XG4gICAgICAgIGlmICghcHJvdG8uX19yZWFjdEF1dG9CaW5kTWFwKSB7XG4gICAgICAgICAgcHJvdG8uX19yZWFjdEF1dG9CaW5kTWFwID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcHJvdG8uX19yZWFjdEF1dG9CaW5kTWFwW25hbWVdID0gcHJvcGVydHk7XG4gICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNBbHJlYWR5RGVmaW5lZCkge1xuICAgICAgICAgIHZhciBzcGVjUG9saWN5ID0gUmVhY3RDbGFzc0ludGVyZmFjZVtuYW1lXTtcblxuICAgICAgICAgIC8vIFRoZXNlIGNhc2VzIHNob3VsZCBhbHJlYWR5IGJlIGNhdWdodCBieSB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlXG4gICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICAgIGlzUmVhY3RDbGFzc01ldGhvZCAmJiAoXG4gICAgICAgICAgICAgIChzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCB8fCBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICdSZWFjdENsYXNzOiBVbmV4cGVjdGVkIHNwZWMgcG9saWN5ICVzIGZvciBrZXkgJXMgJyArXG4gICAgICAgICAgICAnd2hlbiBtaXhpbmcgaW4gY29tcG9uZW50IHNwZWNzLicsXG4gICAgICAgICAgICBzcGVjUG9saWN5LFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICkgOiBpbnZhcmlhbnQoaXNSZWFjdENsYXNzTWV0aG9kICYmIChcbiAgICAgICAgICAgIChzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCB8fCBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZKVxuICAgICAgICAgICkpKTtcblxuICAgICAgICAgIC8vIEZvciBtZXRob2RzIHdoaWNoIGFyZSBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlLCBjYWxsIHRoZSBleGlzdGluZ1xuICAgICAgICAgIC8vIG1ldGhvZHMgYmVmb3JlIGNhbGxpbmcgdGhlIG5ldyBwcm9wZXJ0eSwgbWVyZ2luZyBpZiBhcHByb3ByaWF0ZS5cbiAgICAgICAgICBpZiAoc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQpIHtcbiAgICAgICAgICAgIHByb3RvW25hbWVdID0gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ocHJvdG9bbmFtZV0sIHByb3BlcnR5KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTlkpIHtcbiAgICAgICAgICAgIHByb3RvW25hbWVdID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKHByb3RvW25hbWVdLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7XG4gICAgICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAgICAgLy8gQWRkIHZlcmJvc2UgZGlzcGxheU5hbWUgdG8gdGhlIGZ1bmN0aW9uLCB3aGljaCBoZWxwcyB3aGVuIGxvb2tpbmdcbiAgICAgICAgICAgIC8vIGF0IHByb2ZpbGluZyB0b29scy5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgc3BlYy5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgICAgICBwcm90b1tuYW1lXS5kaXNwbGF5TmFtZSA9IHNwZWMuZGlzcGxheU5hbWUgKyAnXycgKyBuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcykge1xuICBpZiAoIXN0YXRpY3MpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIgbmFtZSBpbiBzdGF0aWNzKSB7XG4gICAgdmFyIHByb3BlcnR5ID0gc3RhdGljc1tuYW1lXTtcbiAgICBpZiAoIXN0YXRpY3MuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBpc1Jlc2VydmVkID0gbmFtZSBpbiBSRVNFUlZFRF9TUEVDX0tFWVM7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICFpc1Jlc2VydmVkLFxuICAgICAgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgYSByZXNlcnZlZCAnICtcbiAgICAgICdwcm9wZXJ0eSwgYCVzYCwgdGhhdCBzaG91bGRuXFwndCBiZSBvbiB0aGUgXCJzdGF0aWNzXCIga2V5LiBEZWZpbmUgaXQgJyArXG4gICAgICAnYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgaW5zdGVhZDsgaXQgd2lsbCBzdGlsbCBiZSBhY2Nlc3NpYmxlIG9uIHRoZSAnICtcbiAgICAgICdjb25zdHJ1Y3Rvci4nLFxuICAgICAgbmFtZVxuICAgICkgOiBpbnZhcmlhbnQoIWlzUmVzZXJ2ZWQpKTtcblxuICAgIHZhciBpc0luaGVyaXRlZCA9IG5hbWUgaW4gQ29uc3RydWN0b3I7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICFpc0luaGVyaXRlZCxcbiAgICAgICdSZWFjdENsYXNzOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lICcgK1xuICAgICAgJ2Alc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlICcgK1xuICAgICAgJ2R1ZSB0byBhIG1peGluLicsXG4gICAgICBuYW1lXG4gICAgKSA6IGludmFyaWFudCghaXNJbmhlcml0ZWQpKTtcbiAgICBDb25zdHJ1Y3RvcltuYW1lXSA9IHByb3BlcnR5O1xuICB9XG59XG5cbi8qKlxuICogTWVyZ2UgdHdvIG9iamVjdHMsIGJ1dCB0aHJvdyBpZiBib3RoIGNvbnRhaW4gdGhlIHNhbWUga2V5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvbmUgVGhlIGZpcnN0IG9iamVjdCwgd2hpY2ggaXMgbXV0YXRlZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSB0d28gVGhlIHNlY29uZCBvYmplY3RcbiAqIEByZXR1cm4ge29iamVjdH0gb25lIGFmdGVyIGl0IGhhcyBiZWVuIG11dGF0ZWQgdG8gY29udGFpbiBldmVyeXRoaW5nIGluIHR3by5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhvbmUsIHR3bykge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIG9uZSAmJiB0d28gJiYgdHlwZW9mIG9uZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHR3byA9PT0gJ29iamVjdCcsXG4gICAgJ21lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoKTogQ2Fubm90IG1lcmdlIG5vbi1vYmplY3RzLidcbiAgKSA6IGludmFyaWFudChvbmUgJiYgdHdvICYmIHR5cGVvZiBvbmUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0d28gPT09ICdvYmplY3QnKSk7XG5cbiAgZm9yICh2YXIga2V5IGluIHR3bykge1xuICAgIGlmICh0d28uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgb25lW2tleV0gPT09IHVuZGVmaW5lZCxcbiAgICAgICAgJ21lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoKTogJyArXG4gICAgICAgICdUcmllZCB0byBtZXJnZSB0d28gb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGtleTogYCVzYC4gVGhpcyBjb25mbGljdCAnICtcbiAgICAgICAgJ21heSBiZSBkdWUgdG8gYSBtaXhpbjsgaW4gcGFydGljdWxhciwgdGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHR3byAnICtcbiAgICAgICAgJ2dldEluaXRpYWxTdGF0ZSgpIG9yIGdldERlZmF1bHRQcm9wcygpIG1ldGhvZHMgcmV0dXJuaW5nIG9iamVjdHMgJyArXG4gICAgICAgICd3aXRoIGNsYXNoaW5nIGtleXMuJyxcbiAgICAgICAga2V5XG4gICAgICApIDogaW52YXJpYW50KG9uZVtrZXldID09PSB1bmRlZmluZWQpKTtcbiAgICAgIG9uZVtrZXldID0gdHdvW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvbmU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0d28gZnVuY3Rpb25zIGFuZCBtZXJnZXMgdGhlaXIgcmV0dXJuIHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbmUgRnVuY3Rpb24gdG8gaW52b2tlIGZpcnN0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gdHdvIEZ1bmN0aW9uIHRvIGludm9rZSBzZWNvbmQuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ob25lLCB0d28pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZFJlc3VsdCgpIHtcbiAgICB2YXIgYSA9IG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHZhciBiID0gdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGEgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGI7XG4gICAgfSBlbHNlIGlmIChiID09IG51bGwpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgICB2YXIgYyA9IHt9O1xuICAgIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoYywgYSk7XG4gICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhjLCBiKTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHR3byBmdW5jdGlvbnMgYW5kIGlnbm9yZXMgdGhlaXIgcmV0dXJuIHZhbGVzLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0d28gRnVuY3Rpb24gdG8gaW52b2tlIHNlY29uZC5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBGdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHR3byBhcmd1bWVudCBmdW5jdGlvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ob25lLCB0d28pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbigpIHtcbiAgICBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0d28uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBCaW5kcyBhIG1ldGhvZCB0byB0aGUgY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb21wb25lbnQgQ29tcG9uZW50IHdob3NlIG1ldGhvZCBpcyBnb2luZyB0byBiZSBib3VuZC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCBNZXRob2QgdG8gYmUgYm91bmQuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGJvdW5kIG1ldGhvZC5cbiAqL1xuZnVuY3Rpb24gYmluZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKSB7XG4gIHZhciBib3VuZE1ldGhvZCA9IG1ldGhvZC5iaW5kKGNvbXBvbmVudCk7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRDb250ZXh0ID0gY29tcG9uZW50O1xuICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDtcbiAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBudWxsO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gY29tcG9uZW50LmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lO1xuICAgIHZhciBfYmluZCA9IGJvdW5kTWV0aG9kLmJpbmQ7XG4gICAgLyogZXNsaW50LWRpc2FibGUgYmxvY2stc2NvcGVkLXZhciwgbm8tdW5kZWYgKi9cbiAgICBib3VuZE1ldGhvZC5iaW5kID0gZnVuY3Rpb24obmV3VGhpcyApIHtmb3IgKHZhciBhcmdzPVtdLCRfXzA9MSwkX18xPWFyZ3VtZW50cy5sZW5ndGg7JF9fMDwkX18xOyRfXzArKykgYXJncy5wdXNoKGFyZ3VtZW50c1skX18wXSk7XG4gICAgICAvLyBVc2VyIGlzIHRyeWluZyB0byBiaW5kKCkgYW4gYXV0b2JvdW5kIG1ldGhvZDsgd2UgZWZmZWN0aXZlbHkgd2lsbFxuICAgICAgLy8gaWdub3JlIHRoZSB2YWx1ZSBvZiBcInRoaXNcIiB0aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byB1c2UsIHNvXG4gICAgICAvLyBsZXQncyB3YXJuLlxuICAgICAgaWYgKG5ld1RoaXMgIT09IGNvbXBvbmVudCAmJiBuZXdUaGlzICE9PSBudWxsKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICdiaW5kKCk6IFJlYWN0IGNvbXBvbmVudCBtZXRob2RzIG1heSBvbmx5IGJlIGJvdW5kIHRvIHRoZSAnICtcbiAgICAgICAgICAnY29tcG9uZW50IGluc3RhbmNlLiBTZWUgJXMnLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgfSBlbHNlIGlmICghYXJncy5sZW5ndGgpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgJ2JpbmQoKTogWW91IGFyZSBiaW5kaW5nIGEgY29tcG9uZW50IG1ldGhvZCB0byB0aGUgY29tcG9uZW50LiAnICtcbiAgICAgICAgICAnUmVhY3QgZG9lcyB0aGlzIGZvciB5b3UgYXV0b21hdGljYWxseSBpbiBhIGhpZ2gtcGVyZm9ybWFuY2UgJyArXG4gICAgICAgICAgJ3dheSwgc28geW91IGNhbiBzYWZlbHkgcmVtb3ZlIHRoaXMgY2FsbC4gU2VlICVzJyxcbiAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgcmV0dXJuIGJvdW5kTWV0aG9kO1xuICAgICAgfVxuICAgICAgdmFyIHJlYm91bmRNZXRob2QgPSBfYmluZC5hcHBseShib3VuZE1ldGhvZCwgYXJndW1lbnRzKTtcbiAgICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDtcbiAgICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kTWV0aG9kID0gbWV0aG9kO1xuICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBhcmdzO1xuICAgICAgcmV0dXJuIHJlYm91bmRNZXRob2Q7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfTtcbiAgfVxuICByZXR1cm4gYm91bmRNZXRob2Q7XG59XG5cbi8qKlxuICogQmluZHMgYWxsIGF1dG8tYm91bmQgbWV0aG9kcyBpbiBhIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuXG4gKi9cbmZ1bmN0aW9uIGJpbmRBdXRvQmluZE1ldGhvZHMoY29tcG9uZW50KSB7XG4gIGZvciAodmFyIGF1dG9CaW5kS2V5IGluIGNvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRNYXApIHtcbiAgICBpZiAoY29tcG9uZW50Ll9fcmVhY3RBdXRvQmluZE1hcC5oYXNPd25Qcm9wZXJ0eShhdXRvQmluZEtleSkpIHtcbiAgICAgIHZhciBtZXRob2QgPSBjb21wb25lbnQuX19yZWFjdEF1dG9CaW5kTWFwW2F1dG9CaW5kS2V5XTtcbiAgICAgIGNvbXBvbmVudFthdXRvQmluZEtleV0gPSBiaW5kQXV0b0JpbmRNZXRob2QoXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgUmVhY3RFcnJvclV0aWxzLmd1YXJkKFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBjb21wb25lbnQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgKyAnLicgKyBhdXRvQmluZEtleVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdHlwZURlcHJlY2F0aW9uRGVzY3JpcHRvciA9IHtcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gdGhpcy5kaXNwbGF5TmFtZSB8fCB0aGlzLm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBmYWxzZSxcbiAgICAgICclcy50eXBlIGlzIGRlcHJlY2F0ZWQuIFVzZSAlcyBkaXJlY3RseSB0byBhY2Nlc3MgdGhlIGNsYXNzLicsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lXG4gICAgKSA6IG51bGwpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgIHZhbHVlOiB0aGlzXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5cbi8qKlxuICogQWRkIG1vcmUgdG8gdGhlIFJlYWN0Q2xhc3MgYmFzZSBjbGFzcy4gVGhlc2UgYXJlIGFsbCBsZWdhY3kgZmVhdHVyZXMgYW5kXG4gKiB0aGVyZWZvcmUgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgbW9kZXJuIFJlYWN0Q29tcG9uZW50LlxuICovXG52YXIgUmVhY3RDbGFzc01peGluID0ge1xuXG4gIC8qKlxuICAgKiBUT0RPOiBUaGlzIHdpbGwgYmUgZGVwcmVjYXRlZCBiZWNhdXNlIHN0YXRlIHNob3VsZCBhbHdheXMga2VlcCBhIGNvbnNpc3RlbnRcbiAgICogdHlwZSBzaWduYXR1cmUgYW5kIHRoZSBvbmx5IHVzZSBjYXNlIGZvciB0aGlzLCBpcyB0byBhdm9pZCB0aGF0LlxuICAgKi9cbiAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbihuZXdTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVSZXBsYWNlU3RhdGUodGhpcywgbmV3U3RhdGUpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2spO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICAgIGlmIChvd25lciAhPT0gbnVsbCkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIsXG4gICAgICAgICAgJyVzIGlzIGFjY2Vzc2luZyBpc01vdW50ZWQgaW5zaWRlIGl0cyByZW5kZXIoKSBmdW5jdGlvbi4gJyArXG4gICAgICAgICAgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArXG4gICAgICAgICAgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgK1xuICAgICAgICAgICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICtcbiAgICAgICAgICAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJyxcbiAgICAgICAgICBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50J1xuICAgICAgICApIDogbnVsbCk7XG4gICAgICAgIG93bmVyLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQodGhpcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIGludGVybmFsSW5zdGFuY2UgJiZcbiAgICAgIGludGVybmFsSW5zdGFuY2UgIT09IFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2VcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBwcm9wcy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxQcm9wcyBTdWJzZXQgb2YgdGhlIG5leHQgcHJvcHMuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgcHJvcHMgYXJlIHVwZGF0ZWQuXG4gICAqIEBmaW5hbFxuICAgKiBAcHVibGljXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzZXRQcm9wczogZnVuY3Rpb24ocGFydGlhbFByb3BzLCBjYWxsYmFjaykge1xuICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZVNldFByb3BzKHRoaXMsIHBhcnRpYWxQcm9wcyk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjayk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGFsbCB0aGUgcHJvcHMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdQcm9wcyBTdWJzZXQgb2YgdGhlIG5leHQgcHJvcHMuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgcHJvcHMgYXJlIHVwZGF0ZWQuXG4gICAqIEBmaW5hbFxuICAgKiBAcHVibGljXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICByZXBsYWNlUHJvcHM6IGZ1bmN0aW9uKG5ld1Byb3BzLCBjYWxsYmFjaykge1xuICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZVJlcGxhY2VQcm9wcyh0aGlzLCBuZXdQcm9wcyk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgUmVhY3RDbGFzc0NvbXBvbmVudCA9IGZ1bmN0aW9uKCkge307XG5hc3NpZ24oXG4gIFJlYWN0Q2xhc3NDb21wb25lbnQucHJvdG90eXBlLFxuICBSZWFjdENvbXBvbmVudC5wcm90b3R5cGUsXG4gIFJlYWN0Q2xhc3NNaXhpblxuKTtcblxuLyoqXG4gKiBNb2R1bGUgZm9yIGNyZWF0aW5nIGNvbXBvc2l0ZSBjb21wb25lbnRzLlxuICpcbiAqIEBjbGFzcyBSZWFjdENsYXNzXG4gKi9cbnZhciBSZWFjdENsYXNzID0ge1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY29tcG9zaXRlIGNvbXBvbmVudCBjbGFzcyBnaXZlbiBhIGNsYXNzIHNwZWNpZmljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzcGVjIENsYXNzIHNwZWNpZmljYXRpb24gKHdoaWNoIG11c3QgZGVmaW5lIGByZW5kZXJgKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IENvbXBvbmVudCBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgY3JlYXRlQ2xhc3M6IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSBmdW5jdGlvbihwcm9wcywgY29udGV4dCkge1xuICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvdmVycmlkZGVuIGJ5IG1vY2tzLiBUaGUgYXJndW1lbnQgaXMgdXNlZFxuICAgICAgLy8gYnkgbW9ja3MgdG8gYXNzZXJ0IG9uIHdoYXQgZ2V0cyBtb3VudGVkLlxuXG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIHRoaXMgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcixcbiAgICAgICAgICAnU29tZXRoaW5nIGlzIGNhbGxpbmcgYSBSZWFjdCBjb21wb25lbnQgZGlyZWN0bHkuIFVzZSBhIGZhY3Rvcnkgb3IgJyArXG4gICAgICAgICAgJ0pTWCBpbnN0ZWFkLiBTZWU6IGh0dHBzOi8vZmIubWUvcmVhY3QtbGVnYWN5ZmFjdG9yeSdcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgfVxuXG4gICAgICAvLyBXaXJlIHVwIGF1dG8tYmluZGluZ1xuICAgICAgaWYgKHRoaXMuX19yZWFjdEF1dG9CaW5kTWFwKSB7XG4gICAgICAgIGJpbmRBdXRvQmluZE1ldGhvZHModGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB0aGlzLnN0YXRlID0gbnVsbDtcblxuICAgICAgLy8gUmVhY3RDbGFzc2VzIGRvZXNuJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMuIEluc3RlYWQsIHRoZXkgdXNlIHRoZVxuICAgICAgLy8gZ2V0SW5pdGlhbFN0YXRlIGFuZCBjb21wb25lbnRXaWxsTW91bnQgbWV0aG9kcyBmb3IgaW5pdGlhbGl6YXRpb24uXG5cbiAgICAgIHZhciBpbml0aWFsU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiBudWxsO1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC5cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0aGlzLmdldEluaXRpYWxTdGF0ZS5faXNNb2NrRnVuY3Rpb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJhZCBwcmFjdGljZS4gQ29uc2lkZXIgd2FybmluZyBoZXJlIGFuZFxuICAgICAgICAgIC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVuY2UuXG4gICAgICAgICAgaW5pdGlhbFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgdHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSxcbiAgICAgICAgJyVzLmdldEluaXRpYWxTdGF0ZSgpOiBtdXN0IHJldHVybiBhbiBvYmplY3Qgb3IgbnVsbCcsXG4gICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdcbiAgICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSkpO1xuXG4gICAgICB0aGlzLnN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIH07XG4gICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IFJlYWN0Q2xhc3NDb21wb25lbnQoKTtcbiAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcblxuICAgIGluamVjdGVkTWl4aW5zLmZvckVhY2goXG4gICAgICBtaXhTcGVjSW50b0NvbXBvbmVudC5iaW5kKG51bGwsIENvbnN0cnVjdG9yKVxuICAgICk7XG5cbiAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYyk7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBkZWZhdWx0UHJvcHMgcHJvcGVydHkgYWZ0ZXIgYWxsIG1peGlucyBoYXZlIGJlZW4gbWVyZ2VkXG4gICAgaWYgKENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcykge1xuICAgICAgQ29uc3RydWN0b3IuZGVmYXVsdFByb3BzID0gQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKCk7XG4gICAgfVxuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgLy8gVGhpcyBpcyBhIHRhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSB1c2Ugb2YgdGhlc2UgbWV0aG9kIG5hbWVzIGlzIG9rLFxuICAgICAgLy8gc2luY2UgaXQncyB1c2VkIHdpdGggY3JlYXRlQ2xhc3MuIElmIGl0J3Mgbm90LCB0aGVuIGl0J3MgbGlrZWx5IGFcbiAgICAgIC8vIG1pc3Rha2Ugc28gd2UnbGwgd2FybiB5b3UgdG8gdXNlIHRoZSBzdGF0aWMgcHJvcGVydHksIHByb3BlcnR5XG4gICAgICAvLyBpbml0aWFsaXplciBvciBjb25zdHJ1Y3RvciByZXNwZWN0aXZlbHkuXG4gICAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yLnByb3RvdHlwZS5nZXRJbml0aWFsU3RhdGUpIHtcbiAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCA9IHt9O1xuICAgICAgfVxuICAgIH1cblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyLFxuICAgICAgJ2NyZWF0ZUNsYXNzKC4uLik6IENsYXNzIHNwZWNpZmljYXRpb24gbXVzdCBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2QuJ1xuICAgICkgOiBpbnZhcmlhbnQoQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbmRlcikpO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICFDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29tcG9uZW50U2hvdWxkVXBkYXRlLFxuICAgICAgICAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICtcbiAgICAgICAgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgK1xuICAgICAgICAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgK1xuICAgICAgICAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJyxcbiAgICAgICAgc3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBjb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuXG4gICAgLy8gUmVkdWNlIHRpbWUgc3BlbnQgZG9pbmcgbG9va3VwcyBieSBzZXR0aW5nIHRoZXNlIG9uIHRoZSBwcm90b3R5cGUuXG4gICAgZm9yICh2YXIgbWV0aG9kTmFtZSBpbiBSZWFjdENsYXNzSW50ZXJmYWNlKSB7XG4gICAgICBpZiAoIUNvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSkge1xuICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExlZ2FjeSBob29rXG4gICAgQ29uc3RydWN0b3IudHlwZSA9IENvbnN0cnVjdG9yO1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgJ3R5cGUnLCB0eXBlRGVwcmVjYXRpb25EZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgLy8gSUUgd2lsbCBmYWlsIG9uIGRlZmluZVByb3BlcnR5IChlczUtc2hpbS9zaGFtIHRvbylcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG5cbiAgaW5qZWN0aW9uOiB7XG4gICAgaW5qZWN0TWl4aW46IGZ1bmN0aW9uKG1peGluKSB7XG4gICAgICBpbmplY3RlZE1peGlucy5wdXNoKG1peGluKTtcbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENsYXNzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkRiR0Z6Y3k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRU5zWVhOelhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdVbVZoWTNSRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5WENJcE8xeHVkbUZ5SUZKbFlXTjBSV3hsYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSV3hsYldWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVWeWNtOXlWWFJwYkhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFVnljbTl5VlhScGJITmNJaWs3WEc1MllYSWdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBTVzV6ZEdGdVkyVk5ZWEJjSWlrN1hHNTJZWElnVW1WaFkzUk1hV1psUTNsamJHVWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRXhwWm1WRGVXTnNaVndpS1R0Y2JuWmhjaUJTWldGamRGQnliM0JVZVhCbFRHOWpZWFJwYjI1eklEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWMxd2lLVHRjYm5aaGNpQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJrNWhiV1Z6WENJcE8xeHVkbUZ5SUZKbFlXTjBWWEJrWVhSbFVYVmxkV1VnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZWd1pHRjBaVkYxWlhWbFhDSXBPMXh1WEc1MllYSWdZWE56YVdkdUlEMGdjbVZ4ZFdseVpTaGNJaTR2VDJKcVpXTjBMbUZ6YzJsbmJsd2lLVHRjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzUyWVhJZ2EyVjVUV2x5Y205eUlEMGdjbVZ4ZFdseVpTaGNJaTR2YTJWNVRXbHljbTl5WENJcE8xeHVkbUZ5SUd0bGVVOW1JRDBnY21WeGRXbHlaU2hjSWk0dmEyVjVUMlpjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQk5TVmhKVGxOZlMwVlpJRDBnYTJWNVQyWW9lMjFwZUdsdWN6b2diblZzYkgwcE8xeHVYRzR2S2lwY2JpQXFJRkJ2YkdsamFXVnpJSFJvWVhRZ1pHVnpZM0pwWW1VZ2JXVjBhRzlrY3lCcGJpQmdVbVZoWTNSRGJHRnpjMGx1ZEdWeVptRmpaV0F1WEc0Z0tpOWNiblpoY2lCVGNHVmpVRzlzYVdONUlEMGdhMlY1VFdseWNtOXlLSHRjYmlBZ0x5b3FYRzRnSUNBcUlGUm9aWE5sSUcxbGRHaHZaSE1nYldGNUlHSmxJR1JsWm1sdVpXUWdiMjVzZVNCdmJtTmxJR0o1SUhSb1pTQmpiR0Z6Y3lCemNHVmphV1pwWTJGMGFXOXVJRzl5SUcxcGVHbHVMbHh1SUNBZ0tpOWNiaUFnUkVWR1NVNUZYMDlPUTBVNklHNTFiR3dzWEc0Z0lDOHFLbHh1SUNBZ0tpQlVhR1Z6WlNCdFpYUm9iMlJ6SUcxaGVTQmlaU0JrWldacGJtVmtJR0o1SUdKdmRHZ2dkR2hsSUdOc1lYTnpJSE53WldOcFptbGpZWFJwYjI0Z1lXNWtJRzFwZUdsdWN5NWNiaUFnSUNvZ1UzVmljMlZ4ZFdWdWRDQmtaV1pwYm1sMGFXOXVjeUIzYVd4c0lHSmxJR05vWVdsdVpXUXVJRlJvWlhObElHMWxkR2h2WkhNZ2JYVnpkQ0J5WlhSMWNtNGdkbTlwWkM1Y2JpQWdJQ292WEc0Z0lFUkZSa2xPUlY5TlFVNVpPaUJ1ZFd4c0xGeHVJQ0F2S2lwY2JpQWdJQ29nVkdobGMyVWdiV1YwYUc5a2N5QmhjbVVnYjNabGNuSnBaR2x1WnlCMGFHVWdZbUZ6WlNCamJHRnpjeTVjYmlBZ0lDb3ZYRzRnSUU5V1JWSlNTVVJGWDBKQlUwVTZJRzUxYkd3c1hHNGdJQzhxS2x4dUlDQWdLaUJVYUdWelpTQnRaWFJvYjJSeklHRnlaU0J6YVcxcGJHRnlJSFJ2SUVSRlJrbE9SVjlOUVU1WkxDQmxlR05sY0hRZ2QyVWdZWE56ZFcxbElIUm9aWGtnY21WMGRYSnVYRzRnSUNBcUlHOWlhbVZqZEhNdUlGZGxJSFJ5ZVNCMGJ5QnRaWEpuWlNCMGFHVWdhMlY1Y3lCdlppQjBhR1VnY21WMGRYSnVJSFpoYkhWbGN5QnZaaUJoYkd3Z2RHaGxJRzFwZUdWa0lHbHVYRzRnSUNBcUlHWjFibU4wYVc5dWN5NGdTV1lnZEdobGNtVWdhWE1nWVNCclpYa2dZMjl1Wm14cFkzUWdkMlVnZEdoeWIzY3VYRzRnSUNBcUwxeHVJQ0JFUlVaSlRrVmZUVUZPV1Y5TlJWSkhSVVE2SUc1MWJHeGNibjBwTzF4dVhHNWNiblpoY2lCcGJtcGxZM1JsWkUxcGVHbHVjeUE5SUZ0ZE8xeHVYRzR2S2lwY2JpQXFJRU52YlhCdmMybDBaU0JqYjIxd2IyNWxiblJ6SUdGeVpTQm9hV2RvWlhJdGJHVjJaV3dnWTI5dGNHOXVaVzUwY3lCMGFHRjBJR052YlhCdmMyVWdiM1JvWlhJZ1kyOXRjRzl6YVhSbFhHNGdLaUJ2Y2lCdVlYUnBkbVVnWTI5dGNHOXVaVzUwY3k1Y2JpQXFYRzRnS2lCVWJ5QmpjbVZoZEdVZ1lTQnVaWGNnZEhsd1pTQnZaaUJnVW1WaFkzUkRiR0Z6YzJBc0lIQmhjM01nWVNCemNHVmphV1pwWTJGMGFXOXVJRzltWEc0Z0tpQjViM1Z5SUc1bGR5QmpiR0Z6Y3lCMGJ5QmdVbVZoWTNRdVkzSmxZWFJsUTJ4aGMzTmdMaUJVYUdVZ2IyNXNlU0J5WlhGMWFYSmxiV1Z1ZENCdlppQjViM1Z5SUdOc1lYTnpYRzRnS2lCemNHVmphV1pwWTJGMGFXOXVJR2x6SUhSb1lYUWdlVzkxSUdsdGNHeGxiV1Z1ZENCaElHQnlaVzVrWlhKZ0lHMWxkR2h2WkM1Y2JpQXFYRzRnS2lBZ0lIWmhjaUJOZVVOdmJYQnZibVZ1ZENBOUlGSmxZV04wTG1OeVpXRjBaVU5zWVhOektIdGNiaUFxSUNBZ0lDQnlaVzVrWlhJNklHWjFibU4wYVc5dUtDa2dlMXh1SUNvZ0lDQWdJQ0FnY21WMGRYSnVJRHhrYVhZK1NHVnNiRzhnVjI5eWJHUThMMlJwZGo0N1hHNGdLaUFnSUNBZ2ZWeHVJQ29nSUNCOUtUdGNiaUFxWEc0Z0tpQlVhR1VnWTJ4aGMzTWdjM0JsWTJsbWFXTmhkR2x2YmlCemRYQndiM0owY3lCaElITndaV05wWm1saklIQnliM1J2WTI5c0lHOW1JRzFsZEdodlpITWdkR2hoZENCb1lYWmxYRzRnS2lCemNHVmphV0ZzSUcxbFlXNXBibWNnS0dVdVp5NGdZSEpsYm1SbGNtQXBMaUJUWldVZ1lGSmxZV04wUTJ4aGMzTkpiblJsY21aaFkyVmdJR1p2Y2x4dUlDb2diVzl5WlNCMGFHVWdZMjl0Y0hKbGFHVnVjMmwyWlNCd2NtOTBiMk52YkM0Z1FXNTVJRzkwYUdWeUlIQnliM0JsY25ScFpYTWdZVzVrSUcxbGRHaHZaSE1nYVc0Z2RHaGxYRzRnS2lCamJHRnpjeUJ6Y0dWamFXWnBZMkYwYVc5dUlIZHBiR3dnWVhaaGFXeGhZbXhsSUc5dUlIUm9aU0J3Y205MGIzUjVjR1V1WEc0Z0tseHVJQ29nUUdsdWRHVnlabUZqWlNCU1pXRmpkRU5zWVhOelNXNTBaWEptWVdObFhHNGdLaUJBYVc1MFpYSnVZV3hjYmlBcUwxeHVkbUZ5SUZKbFlXTjBRMnhoYzNOSmJuUmxjbVpoWTJVZ1BTQjdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFRnVJR0Z5Y21GNUlHOW1JRTFwZUdsdUlHOWlhbVZqZEhNZ2RHOGdhVzVqYkhWa1pTQjNhR1Z1SUdSbFptbHVhVzVuSUhsdmRYSWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tseHVJQ0FnS2lCQWRIbHdaU0I3WVhKeVlYbDlYRzRnSUNBcUlFQnZjSFJwYjI1aGJGeHVJQ0FnS2k5Y2JpQWdiV2w0YVc1ek9pQlRjR1ZqVUc5c2FXTjVMa1JGUmtsT1JWOU5RVTVaTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJCYmlCdlltcGxZM1FnWTI5dWRHRnBibWx1WnlCd2NtOXdaWEowYVdWeklHRnVaQ0J0WlhSb2IyUnpJSFJvWVhRZ2MyaHZkV3hrSUdKbElHUmxabWx1WldRZ2IyNWNiaUFnSUNvZ2RHaGxJR052YlhCdmJtVnVkQ2R6SUdOdmJuTjBjblZqZEc5eUlHbHVjM1JsWVdRZ2IyWWdhWFJ6SUhCeWIzUnZkSGx3WlNBb2MzUmhkR2xqSUcxbGRHaHZaSE1wTGx4dUlDQWdLbHh1SUNBZ0tpQkFkSGx3WlNCN2IySnFaV04wZlZ4dUlDQWdLaUJBYjNCMGFXOXVZV3hjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZM002SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsa3NYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFUmxabWx1YVhScGIyNGdiMllnY0hKdmNDQjBlWEJsY3lCbWIzSWdkR2hwY3lCamIyMXdiMjVsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUIwZVhCbElIdHZZbXBsWTNSOVhHNGdJQ0FxSUVCdmNIUnBiMjVoYkZ4dUlDQWdLaTljYmlBZ2NISnZjRlI1Y0dWek9pQlRjR1ZqVUc5c2FXTjVMa1JGUmtsT1JWOU5RVTVaTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJFWldacGJtbDBhVzl1SUc5bUlHTnZiblJsZUhRZ2RIbHdaWE1nWm05eUlIUm9hWE1nWTI5dGNHOXVaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQkFkSGx3WlNCN2IySnFaV04wZlZ4dUlDQWdLaUJBYjNCMGFXOXVZV3hjYmlBZ0lDb3ZYRzRnSUdOdmJuUmxlSFJVZVhCbGN6b2dVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1N4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUkdWbWFXNXBkR2x2YmlCdlppQmpiMjUwWlhoMElIUjVjR1Z6SUhSb2FYTWdZMjl0Y0c5dVpXNTBJSE5sZEhNZ1ptOXlJR2wwY3lCamFHbHNaSEpsYmk1Y2JpQWdJQ3BjYmlBZ0lDb2dRSFI1Y0dVZ2UyOWlhbVZqZEgxY2JpQWdJQ29nUUc5d2RHbHZibUZzWEc0Z0lDQXFMMXh1SUNCamFHbHNaRU52Ym5SbGVIUlVlWEJsY3pvZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XU3hjYmx4dUlDQXZMeUE5UFQwOUlFUmxabWx1YVhScGIyNGdiV1YwYUc5a2N5QTlQVDA5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx1ZG05clpXUWdkMmhsYmlCMGFHVWdZMjl0Y0c5dVpXNTBJR2x6SUcxdmRXNTBaV1F1SUZaaGJIVmxjeUJwYmlCMGFHVWdiV0Z3Y0dsdVp5QjNhV3hzSUdKbElITmxkQ0J2Ymx4dUlDQWdLaUJnZEdocGN5NXdjbTl3YzJBZ2FXWWdkR2hoZENCd2NtOXdJR2x6SUc1dmRDQnpjR1ZqYVdacFpXUWdLR2t1WlM0Z2RYTnBibWNnWVc0Z1lHbHVZQ0JqYUdWamF5a3VYRzRnSUNBcVhHNGdJQ0FxSUZSb2FYTWdiV1YwYUc5a0lHbHpJR2x1ZG05clpXUWdZbVZtYjNKbElHQm5aWFJKYm1sMGFXRnNVM1JoZEdWZ0lHRnVaQ0IwYUdWeVpXWnZjbVVnWTJGdWJtOTBJSEpsYkhsY2JpQWdJQ29nYjI0Z1lIUm9hWE11YzNSaGRHVmdJRzl5SUhWelpTQmdkR2hwY3k1elpYUlRkR0YwWldBdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMjlpYW1WamRIMWNiaUFnSUNvZ1FHOXdkR2x2Ym1Gc1hHNGdJQ0FxTDF4dUlDQm5aWFJFWldaaGRXeDBVSEp2Y0hNNklGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGxmVFVWU1IwVkVMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkpiblp2YTJWa0lHOXVZMlVnWW1WbWIzSmxJSFJvWlNCamIyMXdiMjVsYm5RZ2FYTWdiVzkxYm5SbFpDNGdWR2hsSUhKbGRIVnliaUIyWVd4MVpTQjNhV3hzSUdKbElIVnpaV1JjYmlBZ0lDb2dZWE1nZEdobElHbHVhWFJwWVd3Z2RtRnNkV1VnYjJZZ1lIUm9hWE11YzNSaGRHVmdMbHh1SUNBZ0tseHVJQ0FnS2lBZ0lHZGxkRWx1YVhScFlXeFRkR0YwWlRvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBcUlDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0tpQWdJQ0FnSUNCcGMwOXVPaUJtWVd4elpTeGNiaUFnSUNvZ0lDQWdJQ0FnWm05dlFtRjZPaUJ1WlhjZ1FtRjZSbTl2S0NsY2JpQWdJQ29nSUNBZ0lIMWNiaUFnSUNvZ0lDQjlYRzRnSUNBcVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTI5aWFtVmpkSDFjYmlBZ0lDb2dRRzl3ZEdsdmJtRnNYRzRnSUNBcUwxeHVJQ0JuWlhSSmJtbDBhV0ZzVTNSaGRHVTZJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDFCVGxsZlRVVlNSMFZFTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBY21WMGRYSnVJSHR2WW1wbFkzUjlYRzRnSUNBcUlFQnZjSFJwYjI1aGJGeHVJQ0FnS2k5Y2JpQWdaMlYwUTJocGJHUkRiMjUwWlhoME9pQlRjR1ZqVUc5c2FXTjVMa1JGUmtsT1JWOU5RVTVaWDAxRlVrZEZSQ3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWWE5sY3lCd2NtOXdjeUJtY205dElHQjBhR2x6TG5CeWIzQnpZQ0JoYm1RZ2MzUmhkR1VnWm5KdmJTQmdkR2hwY3k1emRHRjBaV0FnZEc4Z2NtVnVaR1Z5SUhSb1pWeHVJQ0FnS2lCemRISjFZM1IxY21VZ2IyWWdkR2hsSUdOdmJYQnZibVZ1ZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dUbThnWjNWaGNtRnVkR1ZsY3lCaGNtVWdiV0ZrWlNCaFltOTFkQ0IzYUdWdUlHOXlJR2h2ZHlCdlpuUmxiaUIwYUdseklHMWxkR2h2WkNCcGN5QnBiblp2YTJWa0xDQnpiMXh1SUNBZ0tpQnBkQ0J0ZFhOMElHNXZkQ0JvWVhabElITnBaR1VnWldabVpXTjBjeTVjYmlBZ0lDcGNiaUFnSUNvZ0lDQnlaVzVrWlhJNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0tpQWdJQ0FnZG1GeUlHNWhiV1VnUFNCMGFHbHpMbkJ5YjNCekxtNWhiV1U3WEc0Z0lDQXFJQ0FnSUNCeVpYUjFjbTRnUEdScGRqNUlaV3hzYnl3Z2UyNWhiV1Y5SVR3dlpHbDJQanRjYmlBZ0lDb2dJQ0I5WEc0Z0lDQXFYRzRnSUNBcUlFQnlaWFIxY200Z2UxSmxZV04wUTI5dGNHOXVaVzUwZlZ4dUlDQWdLaUJBYm05emFXUmxaV1ptWldOMGMxeHVJQ0FnS2lCQWNtVnhkV2x5WldSY2JpQWdJQ292WEc0Z0lISmxibVJsY2pvZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlQwNURSU3hjYmx4dVhHNWNiaUFnTHk4Z1BUMDlQU0JFWld4bFoyRjBaU0J0WlhSb2IyUnpJRDA5UFQxY2JseHVJQ0F2S2lwY2JpQWdJQ29nU1c1MmIydGxaQ0IzYUdWdUlIUm9aU0JqYjIxd2IyNWxiblFnYVhNZ2FXNXBkR2xoYkd4NUlHTnlaV0YwWldRZ1lXNWtJR0ZpYjNWMElIUnZJR0psSUcxdmRXNTBaV1F1WEc0Z0lDQXFJRlJvYVhNZ2JXRjVJR2hoZG1VZ2MybGtaU0JsWm1abFkzUnpMQ0JpZFhRZ1lXNTVJR1Y0ZEdWeWJtRnNJSE4xWW5OamNtbHdkR2x2Ym5NZ2IzSWdaR0YwWVNCamNtVmhkR1ZrWEc0Z0lDQXFJR0o1SUhSb2FYTWdiV1YwYUc5a0lHMTFjM1FnWW1VZ1kyeGxZVzVsWkNCMWNDQnBiaUJnWTI5dGNHOXVaVzUwVjJsc2JGVnViVzkxYm5SZ0xseHVJQ0FnS2x4dUlDQWdLaUJBYjNCMGFXOXVZV3hjYmlBZ0lDb3ZYRzRnSUdOdmJYQnZibVZ1ZEZkcGJHeE5iM1Z1ZERvZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzUyYjJ0bFpDQjNhR1Z1SUhSb1pTQmpiMjF3YjI1bGJuUWdhR0Z6SUdKbFpXNGdiVzkxYm5SbFpDQmhibVFnYUdGeklHRWdSRTlOSUhKbGNISmxjMlZ1ZEdGMGFXOXVMbHh1SUNBZ0tpQkliM2RsZG1WeUxDQjBhR1Z5WlNCcGN5QnVieUJuZFdGeVlXNTBaV1VnZEdoaGRDQjBhR1VnUkU5TklHNXZaR1VnYVhNZ2FXNGdkR2hsSUdSdlkzVnRaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQlZjMlVnZEdocGN5QmhjeUJoYmlCdmNIQnZjblIxYm1sMGVTQjBieUJ2Y0dWeVlYUmxJRzl1SUhSb1pTQkVUMDBnZDJobGJpQjBhR1VnWTI5dGNHOXVaVzUwSUdoaGMxeHVJQ0FnS2lCaVpXVnVJRzF2ZFc1MFpXUWdLR2x1YVhScFlXeHBlbVZrSUdGdVpDQnlaVzVrWlhKbFpDa2dabTl5SUhSb1pTQm1hWEp6ZENCMGFXMWxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlISnZiM1JPYjJSbElFUlBUU0JsYkdWdFpXNTBJSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tpQkFiM0IwYVc5dVlXeGNiaUFnSUNvdlhHNGdJR052YlhCdmJtVnVkRVJwWkUxdmRXNTBPaUJUY0dWalVHOXNhV041TGtSRlJrbE9SVjlOUVU1WkxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCSmJuWnZhMlZrSUdKbFptOXlaU0IwYUdVZ1kyOXRjRzl1Wlc1MElISmxZMlZwZG1WeklHNWxkeUJ3Y205d2N5NWNiaUFnSUNwY2JpQWdJQ29nVlhObElIUm9hWE1nWVhNZ1lXNGdiM0J3YjNKMGRXNXBkSGtnZEc4Z2NtVmhZM1FnZEc4Z1lTQndjbTl3SUhSeVlXNXphWFJwYjI0Z1lua2dkWEJrWVhScGJtY2dkR2hsWEc0Z0lDQXFJSE4wWVhSbElIVnphVzVuSUdCMGFHbHpMbk5sZEZOMFlYUmxZQzRnUTNWeWNtVnVkQ0J3Y205d2N5QmhjbVVnWVdOalpYTnpaV1FnZG1saElHQjBhR2x6TG5CeWIzQnpZQzVjYmlBZ0lDcGNiaUFnSUNvZ0lDQmpiMjF3YjI1bGJuUlhhV3hzVW1WalpXbDJaVkJ5YjNCek9pQm1kVzVqZEdsdmJpaHVaWGgwVUhKdmNITXNJRzVsZUhSRGIyNTBaWGgwS1NCN1hHNGdJQ0FxSUNBZ0lDQjBhR2x6TG5ObGRGTjBZWFJsS0h0Y2JpQWdJQ29nSUNBZ0lDQWdiR2xyWlhOSmJtTnlaV0Z6YVc1bk9pQnVaWGgwVUhKdmNITXViR2xyWlVOdmRXNTBJRDRnZEdocGN5NXdjbTl3Y3k1c2FXdGxRMjkxYm5SY2JpQWdJQ29nSUNBZ0lIMHBPMXh1SUNBZ0tpQWdJSDFjYmlBZ0lDcGNiaUFnSUNvZ1RrOVVSVG9nVkdobGNtVWdhWE1nYm04Z1pYRjFhWFpoYkdWdWRDQmdZMjl0Y0c5dVpXNTBWMmxzYkZKbFkyVnBkbVZUZEdGMFpXQXVJRUZ1SUdsdVkyOXRhVzVuSUhCeWIzQmNiaUFnSUNvZ2RISmhibk5wZEdsdmJpQnRZWGtnWTJGMWMyVWdZU0J6ZEdGMFpTQmphR0Z1WjJVc0lHSjFkQ0IwYUdVZ2IzQndiM05wZEdVZ2FYTWdibTkwSUhSeWRXVXVJRWxtSUhsdmRWeHVJQ0FnS2lCdVpXVmtJR2wwTENCNWIzVWdZWEpsSUhCeWIySmhZbXg1SUd4dmIydHBibWNnWm05eUlHQmpiMjF3YjI1bGJuUlhhV3hzVlhCa1lYUmxZQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUc1bGVIUlFjbTl3YzF4dUlDQWdLaUJBYjNCMGFXOXVZV3hjYmlBZ0lDb3ZYRzRnSUdOdmJYQnZibVZ1ZEZkcGJHeFNaV05sYVhabFVISnZjSE02SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsa3NYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFbHVkbTlyWldRZ2QyaHBiR1VnWkdWamFXUnBibWNnYVdZZ2RHaGxJR052YlhCdmJtVnVkQ0J6YUc5MWJHUWdZbVVnZFhCa1lYUmxaQ0JoY3lCaElISmxjM1ZzZENCdlpseHVJQ0FnS2lCeVpXTmxhWFpwYm1jZ2JtVjNJSEJ5YjNCekxDQnpkR0YwWlNCaGJtUXZiM0lnWTI5dWRHVjRkQzVjYmlBZ0lDcGNiaUFnSUNvZ1ZYTmxJSFJvYVhNZ1lYTWdZVzRnYjNCd2IzSjBkVzVwZEhrZ2RHOGdZSEpsZEhWeWJpQm1ZV3h6WldBZ2QyaGxiaUI1YjNVbmNtVWdZMlZ5ZEdGcGJpQjBhR0YwSUhSb1pWeHVJQ0FnS2lCMGNtRnVjMmwwYVc5dUlIUnZJSFJvWlNCdVpYY2djSEp2Y0hNdmMzUmhkR1V2WTI5dWRHVjRkQ0IzYVd4c0lHNXZkQ0J5WlhGMWFYSmxJR0VnWTI5dGNHOXVaVzUwWEc0Z0lDQXFJSFZ3WkdGMFpTNWNiaUFnSUNwY2JpQWdJQ29nSUNCemFHOTFiR1JEYjIxd2IyNWxiblJWY0dSaGRHVTZJR1oxYm1OMGFXOXVLRzVsZUhSUWNtOXdjeXdnYm1WNGRGTjBZWFJsTENCdVpYaDBRMjl1ZEdWNGRDa2dlMXh1SUNBZ0tpQWdJQ0FnY21WMGRYSnVJQ0ZsY1hWaGJDaHVaWGgwVUhKdmNITXNJSFJvYVhNdWNISnZjSE1wSUh4OFhHNGdJQ0FxSUNBZ0lDQWdJQ0ZsY1hWaGJDaHVaWGgwVTNSaGRHVXNJSFJvYVhNdWMzUmhkR1VwSUh4OFhHNGdJQ0FxSUNBZ0lDQWdJQ0ZsY1hWaGJDaHVaWGgwUTI5dWRHVjRkQ3dnZEdocGN5NWpiMjUwWlhoMEtUdGNiaUFnSUNvZ0lDQjlYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J1WlhoMFVISnZjSE5jYmlBZ0lDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQnVaWGgwVTNSaGRHVmNiaUFnSUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCdVpYaDBRMjl1ZEdWNGRGeHVJQ0FnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlNCVWNuVmxJR2xtSUhSb1pTQmpiMjF3YjI1bGJuUWdjMmh2ZFd4a0lIVndaR0YwWlM1Y2JpQWdJQ29nUUc5d2RHbHZibUZzWEc0Z0lDQXFMMXh1SUNCemFHOTFiR1JEYjIxd2IyNWxiblJWY0dSaGRHVTZJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDlPUTBVc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdWRtOXJaV1FnZDJobGJpQjBhR1VnWTI5dGNHOXVaVzUwSUdseklHRmliM1YwSUhSdklIVndaR0YwWlNCa2RXVWdkRzhnWVNCMGNtRnVjMmwwYVc5dUlHWnliMjFjYmlBZ0lDb2dZSFJvYVhNdWNISnZjSE5nTENCZ2RHaHBjeTV6ZEdGMFpXQWdZVzVrSUdCMGFHbHpMbU52Ym5SbGVIUmdJSFJ2SUdCdVpYaDBVSEp2Y0hOZ0xDQmdibVY0ZEZOMFlYUmxZRnh1SUNBZ0tpQmhibVFnWUc1bGVIUkRiMjUwWlhoMFlDNWNiaUFnSUNwY2JpQWdJQ29nVlhObElIUm9hWE1nWVhNZ1lXNGdiM0J3YjNKMGRXNXBkSGtnZEc4Z2NHVnlabTl5YlNCd2NtVndZWEpoZEdsdmJpQmlaV1p2Y21VZ1lXNGdkWEJrWVhSbElHOWpZM1Z5Y3k1Y2JpQWdJQ3BjYmlBZ0lDb2dUazlVUlRvZ1dXOTFJQ29xWTJGdWJtOTBLaW9nZFhObElHQjBhR2x6TG5ObGRGTjBZWFJsS0NsZ0lHbHVJSFJvYVhNZ2JXVjBhRzlrTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2JtVjRkRkJ5YjNCelhHNGdJQ0FxSUVCd1lYSmhiU0I3UDI5aWFtVmpkSDBnYm1WNGRGTjBZWFJsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdQMjlpYW1WamRIMGdibVY0ZEVOdmJuUmxlSFJjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dWZTQjBjbUZ1YzJGamRHbHZibHh1SUNBZ0tpQkFiM0IwYVc5dVlXeGNiaUFnSUNvdlhHNGdJR052YlhCdmJtVnVkRmRwYkd4VmNHUmhkR1U2SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsa3NYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFbHVkbTlyWldRZ2QyaGxiaUIwYUdVZ1kyOXRjRzl1Wlc1MEozTWdSRTlOSUhKbGNISmxjMlZ1ZEdGMGFXOXVJR2hoY3lCaVpXVnVJSFZ3WkdGMFpXUXVYRzRnSUNBcVhHNGdJQ0FxSUZWelpTQjBhR2x6SUdGeklHRnVJRzl3Y0c5eWRIVnVhWFI1SUhSdklHOXdaWEpoZEdVZ2IyNGdkR2hsSUVSUFRTQjNhR1Z1SUhSb1pTQmpiMjF3YjI1bGJuUWdhR0Z6WEc0Z0lDQXFJR0psWlc0Z2RYQmtZWFJsWkM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlIQnlaWFpRY205d2MxeHVJQ0FnS2lCQWNHRnlZVzBnZXo5dlltcGxZM1I5SUhCeVpYWlRkR0YwWlZ4dUlDQWdLaUJBY0dGeVlXMGdlejl2WW1wbFkzUjlJSEJ5WlhaRGIyNTBaWGgwWEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnY205dmRFNXZaR1VnUkU5TklHVnNaVzFsYm5RZ2NtVndjbVZ6Wlc1MGFXNW5JSFJvWlNCamIyMXdiMjVsYm5RdVhHNGdJQ0FxSUVCdmNIUnBiMjVoYkZ4dUlDQWdLaTljYmlBZ1kyOXRjRzl1Wlc1MFJHbGtWWEJrWVhSbE9pQlRjR1ZqVUc5c2FXTjVMa1JGUmtsT1JWOU5RVTVaTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJKYm5admEyVmtJSGRvWlc0Z2RHaGxJR052YlhCdmJtVnVkQ0JwY3lCaFltOTFkQ0IwYnlCaVpTQnlaVzF2ZG1Wa0lHWnliMjBnYVhSeklIQmhjbVZ1ZENCaGJtUWdhR0YyWlZ4dUlDQWdLaUJwZEhNZ1JFOU5JSEpsY0hKbGMyVnVkR0YwYVc5dUlHUmxjM1J5YjNsbFpDNWNiaUFnSUNwY2JpQWdJQ29nVlhObElIUm9hWE1nWVhNZ1lXNGdiM0J3YjNKMGRXNXBkSGtnZEc4Z1pHVmhiR3h2WTJGMFpTQmhibmtnWlhoMFpYSnVZV3dnY21WemIzVnlZMlZ6TGx4dUlDQWdLbHh1SUNBZ0tpQk9UMVJGT2lCVWFHVnlaU0JwY3lCdWJ5QmdZMjl0Y0c5dVpXNTBSR2xrVlc1dGIzVnVkR0FnYzJsdVkyVWdlVzkxY2lCamIyMXdiMjVsYm5RZ2QybHNiQ0JvWVhabElHSmxaVzVjYmlBZ0lDb2daR1Z6ZEhKdmVXVmtJR0o1SUhSb1lYUWdjRzlwYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ2Y0hScGIyNWhiRnh1SUNBZ0tpOWNiaUFnWTI5dGNHOXVaVzUwVjJsc2JGVnViVzkxYm5RNklGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGtzWEc1Y2JseHVYRzRnSUM4dklEMDlQVDBnUVdSMllXNWpaV1FnYldWMGFHOWtjeUE5UFQwOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWd1pHRjBaWE1nZEdobElHTnZiWEJ2Ym1WdWRDZHpJR04xY25KbGJuUnNlU0J0YjNWdWRHVmtJRVJQVFNCeVpYQnlaWE5sYm5SaGRHbHZiaTVjYmlBZ0lDcGNiaUFnSUNvZ1Fua2daR1ZtWVhWc2RDd2dkR2hwY3lCcGJYQnNaVzFsYm5SeklGSmxZV04wSjNNZ2NtVnVaR1Z5YVc1bklHRnVaQ0J5WldOdmJtTnBiR2xoZEdsdmJpQmhiR2R2Y21sMGFHMHVYRzRnSUNBcUlGTnZjR2hwYzNScFkyRjBaV1FnWTJ4cFpXNTBjeUJ0WVhrZ2QybHphQ0IwYnlCdmRtVnljbWxrWlNCMGFHbHpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjU5SUhSeVlXNXpZV04wYVc5dVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaUJBYjNabGNuSnBaR0ZpYkdWY2JpQWdJQ292WEc0Z0lIVndaR0YwWlVOdmJYQnZibVZ1ZERvZ1UzQmxZMUJ2YkdsamVTNVBWa1ZTVWtsRVJWOUNRVk5GWEc1Y2JuMDdYRzVjYmk4cUtseHVJQ29nVFdGd2NHbHVaeUJtY205dElHTnNZWE56SUhOd1pXTnBabWxqWVhScGIyNGdhMlY1Y3lCMGJ5QnpjR1ZqYVdGc0lIQnliMk5sYzNOcGJtY2dablZ1WTNScGIyNXpMbHh1SUNwY2JpQXFJRUZzZEdodmRXZG9JSFJvWlhObElHRnlaU0JrWldOc1lYSmxaQ0JzYVd0bElHbHVjM1JoYm1ObElIQnliM0JsY25ScFpYTWdhVzRnZEdobElITndaV05wWm1sallYUnBiMjVjYmlBcUlIZG9aVzRnWkdWbWFXNXBibWNnWTJ4aGMzTmxjeUIxYzJsdVp5QmdVbVZoWTNRdVkzSmxZWFJsUTJ4aGMzTmdMQ0IwYUdWNUlHRnlaU0JoWTNSMVlXeHNlU0J6ZEdGMGFXTmNiaUFxSUdGdVpDQmhjbVVnWVdOalpYTnphV0pzWlNCdmJpQjBhR1VnWTI5dWMzUnlkV04wYjNJZ2FXNXpkR1ZoWkNCdlppQjBhR1VnY0hKdmRHOTBlWEJsTGlCRVpYTndhWFJsWEc0Z0tpQmlaV2x1WnlCemRHRjBhV01zSUhSb1pYa2diWFZ6ZENCaVpTQmtaV1pwYm1Wa0lHOTFkSE5wWkdVZ2IyWWdkR2hsSUZ3aWMzUmhkR2xqYzF3aUlHdGxlU0IxYm1SbGNseHVJQ29nZDJocFkyZ2dZV3hzSUc5MGFHVnlJSE4wWVhScFl5QnRaWFJvYjJSeklHRnlaU0JrWldacGJtVmtMbHh1SUNvdlhHNTJZWElnVWtWVFJWSldSVVJmVTFCRlExOUxSVmxUSUQwZ2UxeHVJQ0JrYVhOd2JHRjVUbUZ0WlRvZ1puVnVZM1JwYjI0b1EyOXVjM1J5ZFdOMGIzSXNJR1JwYzNCc1lYbE9ZVzFsS1NCN1hHNGdJQ0FnUTI5dWMzUnlkV04wYjNJdVpHbHpjR3hoZVU1aGJXVWdQU0JrYVhOd2JHRjVUbUZ0WlR0Y2JpQWdmU3hjYmlBZ2JXbDRhVzV6T2lCbWRXNWpkR2x2YmloRGIyNXpkSEoxWTNSdmNpd2diV2w0YVc1ektTQjdYRzRnSUNBZ2FXWWdLRzFwZUdsdWN5a2dlMXh1SUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0J0YVhocGJuTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2JXbDRVM0JsWTBsdWRHOURiMjF3YjI1bGJuUW9RMjl1YzNSeWRXTjBiM0lzSUcxcGVHbHVjMXRwWFNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlMRnh1SUNCamFHbHNaRU52Ym5SbGVIUlVlWEJsY3pvZ1puVnVZM1JwYjI0b1EyOXVjM1J5ZFdOMGIzSXNJR05vYVd4a1EyOXVkR1Y0ZEZSNWNHVnpLU0I3WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdkbUZzYVdSaGRHVlVlWEJsUkdWbUtGeHVJQ0FnSUNBZ0lDQkRiMjV6ZEhKMVkzUnZjaXhjYmlBZ0lDQWdJQ0FnWTJocGJHUkRiMjUwWlhoMFZIbHdaWE1zWEc0Z0lDQWdJQ0FnSUZKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJuTXVZMmhwYkdSRGIyNTBaWGgwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmlBZ0lDQkRiMjV6ZEhKMVkzUnZjaTVqYUdsc1pFTnZiblJsZUhSVWVYQmxjeUE5SUdGemMybG5iaWhjYmlBZ0lDQWdJSHQ5TEZ4dUlDQWdJQ0FnUTI5dWMzUnlkV04wYjNJdVkyaHBiR1JEYjI1MFpYaDBWSGx3WlhNc1hHNGdJQ0FnSUNCamFHbHNaRU52Ym5SbGVIUlVlWEJsYzF4dUlDQWdJQ2s3WEc0Z0lIMHNYRzRnSUdOdmJuUmxlSFJVZVhCbGN6b2dablZ1WTNScGIyNG9RMjl1YzNSeWRXTjBiM0lzSUdOdmJuUmxlSFJVZVhCbGN5a2dlMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIWmhiR2xrWVhSbFZIbHdaVVJsWmloY2JpQWdJQ0FnSUNBZ1EyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQWdJR052Ym5SbGVIUlVlWEJsY3l4Y2JpQWdJQ0FnSUNBZ1VtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVjeTVqYjI1MFpYaDBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNiaUFnSUNCRGIyNXpkSEoxWTNSdmNpNWpiMjUwWlhoMFZIbHdaWE1nUFNCaGMzTnBaMjRvWEc0Z0lDQWdJQ0I3ZlN4Y2JpQWdJQ0FnSUVOdmJuTjBjblZqZEc5eUxtTnZiblJsZUhSVWVYQmxjeXhjYmlBZ0lDQWdJR052Ym5SbGVIUlVlWEJsYzF4dUlDQWdJQ2s3WEc0Z0lIMHNYRzRnSUM4cUtseHVJQ0FnS2lCVGNHVmphV0ZzSUdOaGMyVWdaMlYwUkdWbVlYVnNkRkJ5YjNCeklIZG9hV05vSUhOb2IzVnNaQ0J0YjNabElHbHVkRzhnYzNSaGRHbGpjeUJpZFhRZ2NtVnhkV2x5WlhOY2JpQWdJQ29nWVhWMGIyMWhkR2xqSUcxbGNtZHBibWN1WEc0Z0lDQXFMMXh1SUNCblpYUkVaV1poZFd4MFVISnZjSE02SUdaMWJtTjBhVzl1S0VOdmJuTjBjblZqZEc5eUxDQm5aWFJFWldaaGRXeDBVSEp2Y0hNcElIdGNiaUFnSUNCcFppQW9RMjl1YzNSeWRXTjBiM0l1WjJWMFJHVm1ZWFZzZEZCeWIzQnpLU0I3WEc0Z0lDQWdJQ0JEYjI1emRISjFZM1J2Y2k1blpYUkVaV1poZFd4MFVISnZjSE1nUFNCamNtVmhkR1ZOWlhKblpXUlNaWE4xYkhSR2RXNWpkR2x2YmloY2JpQWdJQ0FnSUNBZ1EyOXVjM1J5ZFdOMGIzSXVaMlYwUkdWbVlYVnNkRkJ5YjNCekxGeHVJQ0FnSUNBZ0lDQm5aWFJFWldaaGRXeDBVSEp2Y0hOY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJRU52Ym5OMGNuVmpkRzl5TG1kbGRFUmxabUYxYkhSUWNtOXdjeUE5SUdkbGRFUmxabUYxYkhSUWNtOXdjenRjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSEJ5YjNCVWVYQmxjem9nWm5WdVkzUnBiMjRvUTI5dWMzUnlkV04wYjNJc0lIQnliM0JVZVhCbGN5a2dlMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIWmhiR2xrWVhSbFZIbHdaVVJsWmloY2JpQWdJQ0FnSUNBZ1EyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQWdJSEJ5YjNCVWVYQmxjeXhjYmlBZ0lDQWdJQ0FnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWN5NXdjbTl3WEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmlBZ0lDQkRiMjV6ZEhKMVkzUnZjaTV3Y205d1ZIbHdaWE1nUFNCaGMzTnBaMjRvWEc0Z0lDQWdJQ0I3ZlN4Y2JpQWdJQ0FnSUVOdmJuTjBjblZqZEc5eUxuQnliM0JVZVhCbGN5eGNiaUFnSUNBZ0lIQnliM0JVZVhCbGMxeHVJQ0FnSUNrN1hHNGdJSDBzWEc0Z0lITjBZWFJwWTNNNklHWjFibU4wYVc5dUtFTnZibk4wY25WamRHOXlMQ0J6ZEdGMGFXTnpLU0I3WEc0Z0lDQWdiV2w0VTNSaGRHbGpVM0JsWTBsdWRHOURiMjF3YjI1bGJuUW9RMjl1YzNSeWRXTjBiM0lzSUhOMFlYUnBZM01wTzF4dUlDQjlYRzU5TzF4dVhHNW1kVzVqZEdsdmJpQjJZV3hwWkdGMFpWUjVjR1ZFWldZb1EyOXVjM1J5ZFdOMGIzSXNJSFI1Y0dWRVpXWXNJR3h2WTJGMGFXOXVLU0I3WEc0Z0lHWnZjaUFvZG1GeUlIQnliM0JPWVcxbElHbHVJSFI1Y0dWRVpXWXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pVUmxaaTVvWVhOUGQyNVFjbTl3WlhKMGVTaHdjbTl3VG1GdFpTa3BJSHRjYmlBZ0lDQWdJQzh2SUhWelpTQmhJSGRoY201cGJtY2dhVzV6ZEdWaFpDQnZaaUJoYmlCcGJuWmhjbWxoYm5RZ2MyOGdZMjl0Y0c5dVpXNTBjMXh1SUNBZ0lDQWdMeThnWkc5dUozUWdjMmh2ZHlCMWNDQnBiaUJ3Y205a0lHSjFkQ0J1YjNRZ2FXNGdYMTlFUlZaZlgxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUhSNWNHVnZaaUIwZVhCbFJHVm1XM0J5YjNCT1lXMWxYU0E5UFQwZ0oyWjFibU4wYVc5dUp5eGNiaUFnSUNBZ0lDQWdKeVZ6T2lBbGN5QjBlWEJsSUdBbGMyQWdhWE1nYVc1MllXeHBaRHNnYVhRZ2JYVnpkQ0JpWlNCaElHWjFibU4wYVc5dUxDQjFjM1ZoYkd4NUlHWnliMjBnSnlBclhHNGdJQ0FnSUNBZ0lDZFNaV0ZqZEM1UWNtOXdWSGx3WlhNdUp5eGNiaUFnSUNBZ0lDQWdRMjl1YzNSeWRXTjBiM0l1WkdsemNHeGhlVTVoYldVZ2ZId2dKMUpsWVdOMFEyeGhjM01uTEZ4dUlDQWdJQ0FnSUNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsYzF0c2IyTmhkR2x2Ymwwc1hHNGdJQ0FnSUNBZ0lIQnliM0JPWVcxbFhHNGdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFRXVjBhRzlrVDNabGNuSnBaR1VvY0hKdmRHOHNJRzVoYldVcElIdGNiaUFnZG1GeUlITndaV05RYjJ4cFkza2dQU0JTWldGamRFTnNZWE56U1c1MFpYSm1ZV05sTG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcElEOWNiaUFnSUNCU1pXRmpkRU5zWVhOelNXNTBaWEptWVdObFcyNWhiV1ZkSURwY2JpQWdJQ0J1ZFd4c08xeHVYRzRnSUM4dklFUnBjMkZzYkc5M0lHOTJaWEp5YVdScGJtY2diMllnWW1GelpTQmpiR0Z6Y3lCdFpYUm9iMlJ6SUhWdWJHVnpjeUJsZUhCc2FXTnBkR3g1SUdGc2JHOTNaV1F1WEc0Z0lHbG1JQ2hTWldGamRFTnNZWE56VFdsNGFXNHVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2twSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdjM0JsWTFCdmJHbGplU0E5UFQwZ1UzQmxZMUJ2YkdsamVTNVBWa1ZTVWtsRVJWOUNRVk5GTEZ4dUlDQWdJQ0FnSjFKbFlXTjBRMnhoYzNOSmJuUmxjbVpoWTJVNklGbHZkU0JoY21VZ1lYUjBaVzF3ZEdsdVp5QjBieUJ2ZG1WeWNtbGtaU0FuSUN0Y2JpQWdJQ0FnSUNkZ0pYTmdJR1p5YjIwZ2VXOTFjaUJqYkdGemN5QnpjR1ZqYVdacFkyRjBhVzl1TGlCRmJuTjFjbVVnZEdoaGRDQjViM1Z5SUcxbGRHaHZaQ0J1WVcxbGN5QW5JQ3RjYmlBZ0lDQWdJQ2RrYnlCdWIzUWdiM1psY214aGNDQjNhWFJvSUZKbFlXTjBJRzFsZEdodlpITXVKeXhjYmlBZ0lDQWdJRzVoYldWY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtITndaV05RYjJ4cFkza2dQVDA5SUZOd1pXTlFiMnhwWTNrdVQxWkZVbEpKUkVWZlFrRlRSU2twTzF4dUlDQjlYRzVjYmlBZ0x5OGdSR2x6WVd4c2IzY2daR1ZtYVc1cGJtY2diV1YwYUc5a2N5QnRiM0psSUhSb1lXNGdiMjVqWlNCMWJteGxjM01nWlhod2JHbGphWFJzZVNCaGJHeHZkMlZrTGx4dUlDQnBaaUFvY0hKdmRHOHVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2twSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdjM0JsWTFCdmJHbGplU0E5UFQwZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XU0I4ZkZ4dUlDQWdJQ0FnYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1Y5TlJWSkhSVVFzWEc0Z0lDQWdJQ0FuVW1WaFkzUkRiR0Z6YzBsdWRHVnlabUZqWlRvZ1dXOTFJR0Z5WlNCaGRIUmxiWEIwYVc1bklIUnZJR1JsWm1sdVpTQW5JQ3RjYmlBZ0lDQWdJQ2RnSlhOZ0lHOXVJSGx2ZFhJZ1kyOXRjRzl1Wlc1MElHMXZjbVVnZEdoaGJpQnZibU5sTGlCVWFHbHpJR052Ym1ac2FXTjBJRzFoZVNCaVpTQmtkV1VnSnlBclhHNGdJQ0FnSUNBbmRHOGdZU0J0YVhocGJpNG5MRnh1SUNBZ0lDQWdibUZ0WlZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dTQjhmRnh1SUNBZ0lITndaV05RYjJ4cFkza2dQVDA5SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsbGZUVVZTUjBWRUtTazdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJOYVhocGJpQm9aV3h3WlhJZ2QyaHBZMmdnYUdGdVpHeGxjeUJ3YjJ4cFkza2dkbUZzYVdSaGRHbHZiaUJoYm1RZ2NtVnpaWEoyWldSY2JpQXFJSE53WldOcFptbGpZWFJwYjI0Z2EyVjVjeUIzYUdWdUlHSjFhV3hrYVc1bklGSmxZV04wSUdOc1lYTnpjMlZ6TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJ0YVhoVGNHVmpTVzUwYjBOdmJYQnZibVZ1ZENoRGIyNXpkSEoxWTNSdmNpd2djM0JsWXlrZ2UxeHVJQ0JwWmlBb0lYTndaV01wSUh0Y2JpQWdJQ0J5WlhSMWNtNDdYRzRnSUgxY2JseHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lIUjVjR1Z2WmlCemNHVmpJQ0U5UFNBblpuVnVZM1JwYjI0bkxGeHVJQ0FnSUNkU1pXRmpkRU5zWVhOek9pQlpiM1ZjWENkeVpTQmhkSFJsYlhCMGFXNW5JSFJ2SUNjZ0sxeHVJQ0FnSUNkMWMyVWdZU0JqYjIxd2IyNWxiblFnWTJ4aGMzTWdZWE1nWVNCdGFYaHBiaTRnU1c1emRHVmhaQ3dnYW5WemRDQjFjMlVnWVNCeVpXZDFiR0Z5SUc5aWFtVmpkQzRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvZEhsd1pXOW1JSE53WldNZ0lUMDlJQ2RtZFc1amRHbHZiaWNwS1R0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBaFVtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtITndaV01wTEZ4dUlDQWdJQ2RTWldGamRFTnNZWE56T2lCWmIzVmNYQ2R5WlNCaGRIUmxiWEIwYVc1bklIUnZJQ2NnSzF4dUlDQWdJQ2QxYzJVZ1lTQmpiMjF3YjI1bGJuUWdZWE1nWVNCdGFYaHBiaTRnU1c1emRHVmhaQ3dnYW5WemRDQjFjMlVnWVNCeVpXZDFiR0Z5SUc5aWFtVmpkQzRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvSVZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENoemNHVmpLU2twTzF4dVhHNGdJSFpoY2lCd2NtOTBieUE5SUVOdmJuTjBjblZqZEc5eUxuQnliM1J2ZEhsd1pUdGNibHh1SUNBdkx5QkNlU0JvWVc1a2JHbHVaeUJ0YVhocGJuTWdZbVZtYjNKbElHRnVlU0J2ZEdobGNpQndjbTl3WlhKMGFXVnpMQ0IzWlNCbGJuTjFjbVVnZEdobElITmhiV1ZjYmlBZ0x5OGdZMmhoYVc1cGJtY2diM0prWlhJZ2FYTWdZWEJ3YkdsbFpDQjBieUJ0WlhSb2IyUnpJSGRwZEdnZ1JFVkdTVTVGWDAxQlRsa2djRzlzYVdONUxDQjNhR1YwYUdWeVhHNGdJQzh2SUcxcGVHbHVjeUJoY21VZ2JHbHpkR1ZrSUdKbFptOXlaU0J2Y2lCaFpuUmxjaUIwYUdWelpTQnRaWFJvYjJSeklHbHVJSFJvWlNCemNHVmpMbHh1SUNCcFppQW9jM0JsWXk1b1lYTlBkMjVRY205d1pYSjBlU2hOU1ZoSlRsTmZTMFZaS1NrZ2UxeHVJQ0FnSUZKRlUwVlNWa1ZFWDFOUVJVTmZTMFZaVXk1dGFYaHBibk1vUTI5dWMzUnlkV04wYjNJc0lITndaV011YldsNGFXNXpLVHRjYmlBZ2ZWeHVYRzRnSUdadmNpQW9kbUZ5SUc1aGJXVWdhVzRnYzNCbFl5a2dlMXh1SUNBZ0lHbG1JQ2doYzNCbFl5NW9ZWE5QZDI1UWNtOXdaWEowZVNodVlXMWxLU2tnZTF4dUlDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c1aGJXVWdQVDA5SUUxSldFbE9VMTlMUlZrcElIdGNiaUFnSUNBZ0lDOHZJRmRsSUdoaGRtVWdZV3h5WldGa2VTQm9ZVzVrYkdWa0lHMXBlR2x1Y3lCcGJpQmhJSE53WldOcFlXd2dZMkZ6WlNCaFltOTJaVnh1SUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJSEJ5YjNCbGNuUjVJRDBnYzNCbFkxdHVZVzFsWFR0Y2JpQWdJQ0IyWVd4cFpHRjBaVTFsZEdodlpFOTJaWEp5YVdSbEtIQnliM1J2TENCdVlXMWxLVHRjYmx4dUlDQWdJR2xtSUNoU1JWTkZVbFpGUkY5VFVFVkRYMHRGV1ZNdWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa3BJSHRjYmlBZ0lDQWdJRkpGVTBWU1ZrVkVYMU5RUlVOZlMwVlpVMXR1WVcxbFhTaERiMjV6ZEhKMVkzUnZjaXdnY0hKdmNHVnlkSGtwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQXZMeUJUWlhSMWNDQnRaWFJvYjJSeklHOXVJSEJ5YjNSdmRIbHdaVHBjYmlBZ0lDQWdJQzh2SUZSb1pTQm1iMnhzYjNkcGJtY2diV1Z0WW1WeUlHMWxkR2h2WkhNZ2MyaHZkV3hrSUc1dmRDQmlaU0JoZFhSdmJXRjBhV05oYkd4NUlHSnZkVzVrT2x4dUlDQWdJQ0FnTHk4Z01TNGdSWGh3WldOMFpXUWdVbVZoWTNSRGJHRnpjeUJ0WlhSb2IyUnpJQ2hwYmlCMGFHVWdYQ0pwYm5SbGNtWmhZMlZjSWlrdVhHNGdJQ0FnSUNBdkx5QXlMaUJQZG1WeWNtbGtaR1Z1SUcxbGRHaHZaSE1nS0hSb1lYUWdkMlZ5WlNCdGFYaGxaQ0JwYmlrdVhHNGdJQ0FnSUNCMllYSWdhWE5TWldGamRFTnNZWE56VFdWMGFHOWtJRDFjYmlBZ0lDQWdJQ0FnVW1WaFkzUkRiR0Z6YzBsdWRHVnlabUZqWlM1b1lYTlBkMjVRY205d1pYSjBlU2h1WVcxbEtUdGNiaUFnSUNBZ0lIWmhjaUJwYzBGc2NtVmhaSGxFWldacGJtVmtJRDBnY0hKdmRHOHVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2s3WEc0Z0lDQWdJQ0IyWVhJZ2JXRnlhMlZrUkc5dWRFSnBibVFnUFNCd2NtOXdaWEowZVNBbUppQndjbTl3WlhKMGVTNWZYM0psWVdOMFJHOXVkRUpwYm1RN1hHNGdJQ0FnSUNCMllYSWdhWE5HZFc1amRHbHZiaUE5SUhSNWNHVnZaaUJ3Y205d1pYSjBlU0E5UFQwZ0oyWjFibU4wYVc5dUp6dGNiaUFnSUNBZ0lIWmhjaUJ6YUc5MWJHUkJkWFJ2UW1sdVpDQTlYRzRnSUNBZ0lDQWdJR2x6Um5WdVkzUnBiMjRnSmlaY2JpQWdJQ0FnSUNBZ0lXbHpVbVZoWTNSRGJHRnpjMDFsZEdodlpDQW1KbHh1SUNBZ0lDQWdJQ0FoYVhOQmJISmxZV1I1UkdWbWFXNWxaQ0FtSmx4dUlDQWdJQ0FnSUNBaGJXRnlhMlZrUkc5dWRFSnBibVE3WEc1Y2JpQWdJQ0FnSUdsbUlDaHphRzkxYkdSQmRYUnZRbWx1WkNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVhCeWIzUnZMbDlmY21WaFkzUkJkWFJ2UW1sdVpFMWhjQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lIQnliM1J2TGw5ZmNtVmhZM1JCZFhSdlFtbHVaRTFoY0NBOUlIdDlPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhCeWIzUnZMbDlmY21WaFkzUkJkWFJ2UW1sdVpFMWhjRnR1WVcxbFhTQTlJSEJ5YjNCbGNuUjVPMXh1SUNBZ0lDQWdJQ0J3Y205MGIxdHVZVzFsWFNBOUlIQnliM0JsY25SNU8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2x6UVd4eVpXRmtlVVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMllYSWdjM0JsWTFCdmJHbGplU0E5SUZKbFlXTjBRMnhoYzNOSmJuUmxjbVpoWTJWYmJtRnRaVjA3WEc1Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJVYUdWelpTQmpZWE5sY3lCemFHOTFiR1FnWVd4eVpXRmtlU0JpWlNCallYVm5hSFFnWW5rZ2RtRnNhV1JoZEdWTlpYUm9iMlJQZG1WeWNtbGtaVnh1SUNBZ0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBjMUpsWVdOMFEyeGhjM05OWlhSb2IyUWdKaVlnS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FvYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1Y5TlJWSkhSVVFnZkh3Z2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FuVW1WaFkzUkRiR0Z6Y3pvZ1ZXNWxlSEJsWTNSbFpDQnpjR1ZqSUhCdmJHbGplU0FsY3lCbWIzSWdhMlY1SUNWeklDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNBZ0ozZG9aVzRnYldsNGFXNW5JR2x1SUdOdmJYQnZibVZ1ZENCemNHVmpjeTRuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM0JsWTFCdmJHbGplU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHNWhiV1ZjYmlBZ0lDQWdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLR2x6VW1WaFkzUkRiR0Z6YzAxbGRHaHZaQ0FtSmlBb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1Y5TlJWSkhSVVFnZkh3Z2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dTbGNiaUFnSUNBZ0lDQWdJQ0FwS1NrN1hHNWNiaUFnSUNBZ0lDQWdJQ0F2THlCR2IzSWdiV1YwYUc5a2N5QjNhR2xqYUNCaGNtVWdaR1ZtYVc1bFpDQnRiM0psSUhSb1lXNGdiMjVqWlN3Z1kyRnNiQ0IwYUdVZ1pYaHBjM1JwYm1kY2JpQWdJQ0FnSUNBZ0lDQXZMeUJ0WlhSb2IyUnpJR0psWm05eVpTQmpZV3hzYVc1bklIUm9aU0J1WlhjZ2NISnZjR1Z5ZEhrc0lHMWxjbWRwYm1jZ2FXWWdZWEJ3Y205d2NtbGhkR1V1WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSE53WldOUWIyeHBZM2tnUFQwOUlGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGxmVFVWU1IwVkVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQndjbTkwYjF0dVlXMWxYU0E5SUdOeVpXRjBaVTFsY21kbFpGSmxjM1ZzZEVaMWJtTjBhVzl1S0hCeWIzUnZXMjVoYldWZExDQndjbTl3WlhKMGVTazdYRzRnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoemNHVmpVRzlzYVdONUlEMDlQU0JUY0dWalVHOXNhV041TGtSRlJrbE9SVjlOUVU1WktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCd2NtOTBiMXR1WVcxbFhTQTlJR055WldGMFpVTm9ZV2x1WldSR2RXNWpkR2x2Ymlod2NtOTBiMXR1WVcxbFhTd2djSEp2Y0dWeWRIa3BPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQndjbTkwYjF0dVlXMWxYU0E5SUhCeWIzQmxjblI1TzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklFRmtaQ0IyWlhKaWIzTmxJR1JwYzNCc1lYbE9ZVzFsSUhSdklIUm9aU0JtZFc1amRHbHZiaXdnZDJocFkyZ2dhR1ZzY0hNZ2QyaGxiaUJzYjI5cmFXNW5YRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QmhkQ0J3Y205bWFXeHBibWNnZEc5dmJITXVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlIQnliM0JsY25SNUlEMDlQU0FuWm5WdVkzUnBiMjRuSUNZbUlITndaV011WkdsemNHeGhlVTVoYldVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NISnZkRzliYm1GdFpWMHVaR2x6Y0d4aGVVNWhiV1VnUFNCemNHVmpMbVJwYzNCc1lYbE9ZVzFsSUNzZ0oxOG5JQ3NnYm1GdFpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnYldsNFUzUmhkR2xqVTNCbFkwbHVkRzlEYjIxd2IyNWxiblFvUTI5dWMzUnlkV04wYjNJc0lITjBZWFJwWTNNcElIdGNiaUFnYVdZZ0tDRnpkR0YwYVdOektTQjdYRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzRnSUdadmNpQW9kbUZ5SUc1aGJXVWdhVzRnYzNSaGRHbGpjeWtnZTF4dUlDQWdJSFpoY2lCd2NtOXdaWEowZVNBOUlITjBZWFJwWTNOYmJtRnRaVjA3WEc0Z0lDQWdhV1lnS0NGemRHRjBhV056TG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcEtTQjdYRzRnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdhWE5TWlhObGNuWmxaQ0E5SUc1aGJXVWdhVzRnVWtWVFJWSldSVVJmVTFCRlExOUxSVmxUTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWhhWE5TWlhObGNuWmxaQ3hjYmlBZ0lDQWdJQ2RTWldGamRFTnNZWE56T2lCWmIzVWdZWEpsSUdGMGRHVnRjSFJwYm1jZ2RHOGdaR1ZtYVc1bElHRWdjbVZ6WlhKMlpXUWdKeUFyWEc0Z0lDQWdJQ0FuY0hKdmNHVnlkSGtzSUdBbGMyQXNJSFJvWVhRZ2MyaHZkV3hrYmx4Y0ozUWdZbVVnYjI0Z2RHaGxJRndpYzNSaGRHbGpjMXdpSUd0bGVTNGdSR1ZtYVc1bElHbDBJQ2NnSzF4dUlDQWdJQ0FnSjJGeklHRnVJR2x1YzNSaGJtTmxJSEJ5YjNCbGNuUjVJR2x1YzNSbFlXUTdJR2wwSUhkcGJHd2djM1JwYkd3Z1ltVWdZV05qWlhOemFXSnNaU0J2YmlCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FuWTI5dWMzUnlkV04wYjNJdUp5eGNiaUFnSUNBZ0lHNWhiV1ZjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0NGcGMxSmxjMlZ5ZG1Wa0tTazdYRzVjYmlBZ0lDQjJZWElnYVhOSmJtaGxjbWwwWldRZ1BTQnVZVzFsSUdsdUlFTnZibk4wY25WamRHOXlPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBaGFYTkpibWhsY21sMFpXUXNYRzRnSUNBZ0lDQW5VbVZoWTNSRGJHRnpjem9nV1c5MUlHRnlaU0JoZEhSbGJYQjBhVzVuSUhSdklHUmxabWx1WlNBbklDdGNiaUFnSUNBZ0lDZGdKWE5nSUc5dUlIbHZkWElnWTI5dGNHOXVaVzUwSUcxdmNtVWdkR2hoYmlCdmJtTmxMaUJVYUdseklHTnZibVpzYVdOMElHMWhlU0JpWlNBbklDdGNiaUFnSUNBZ0lDZGtkV1VnZEc4Z1lTQnRhWGhwYmk0bkxGeHVJQ0FnSUNBZ2JtRnRaVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVdselNXNW9aWEpwZEdWa0tTazdYRzRnSUNBZ1EyOXVjM1J5ZFdOMGIzSmJibUZ0WlYwZ1BTQndjbTl3WlhKMGVUdGNiaUFnZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRTFsY21kbElIUjNieUJ2WW1wbFkzUnpMQ0JpZFhRZ2RHaHliM2NnYVdZZ1ltOTBhQ0JqYjI1MFlXbHVJSFJvWlNCellXMWxJR3RsZVM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYjI1bElGUm9aU0JtYVhKemRDQnZZbXBsWTNRc0lIZG9hV05vSUdseklHMTFkR0YwWldRdVhHNGdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdkSGR2SUZSb1pTQnpaV052Ym1RZ2IySnFaV04wWEc0Z0tpQkFjbVYwZFhKdUlIdHZZbXBsWTNSOUlHOXVaU0JoWm5SbGNpQnBkQ0JvWVhNZ1ltVmxiaUJ0ZFhSaGRHVmtJSFJ2SUdOdmJuUmhhVzRnWlhabGNubDBhR2x1WnlCcGJpQjBkMjh1WEc0Z0tpOWNibVoxYm1OMGFXOXVJRzFsY21kbFNXNTBiMWRwZEdoT2IwUjFjR3hwWTJGMFpVdGxlWE1vYjI1bExDQjBkMjhwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCdmJtVWdKaVlnZEhkdklDWW1JSFI1Y0dWdlppQnZibVVnUFQwOUlDZHZZbXBsWTNRbklDWW1JSFI1Y0dWdlppQjBkMjhnUFQwOUlDZHZZbXBsWTNRbkxGeHVJQ0FnSUNkdFpYSm5aVWx1ZEc5WGFYUm9UbTlFZFhCc2FXTmhkR1ZMWlhsektDazZJRU5oYm01dmRDQnRaWEpuWlNCdWIyNHRiMkpxWldOMGN5NG5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9iMjVsSUNZbUlIUjNieUFtSmlCMGVYQmxiMllnYjI1bElEMDlQU0FuYjJKcVpXTjBKeUFtSmlCMGVYQmxiMllnZEhkdklEMDlQU0FuYjJKcVpXTjBKeWtwTzF4dVhHNGdJR1p2Y2lBb2RtRnlJR3RsZVNCcGJpQjBkMjhwSUh0Y2JpQWdJQ0JwWmlBb2RIZHZMbWhoYzA5M2JsQnliM0JsY25SNUtHdGxlU2twSUh0Y2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUc5dVpWdHJaWGxkSUQwOVBTQjFibVJsWm1sdVpXUXNYRzRnSUNBZ0lDQWdJQ2R0WlhKblpVbHVkRzlYYVhSb1RtOUVkWEJzYVdOaGRHVkxaWGx6S0NrNklDY2dLMXh1SUNBZ0lDQWdJQ0FuVkhKcFpXUWdkRzhnYldWeVoyVWdkSGR2SUc5aWFtVmpkSE1nZDJsMGFDQjBhR1VnYzJGdFpTQnJaWGs2SUdBbGMyQXVJRlJvYVhNZ1kyOXVabXhwWTNRZ0p5QXJYRzRnSUNBZ0lDQWdJQ2R0WVhrZ1ltVWdaSFZsSUhSdklHRWdiV2w0YVc0N0lHbHVJSEJoY25ScFkzVnNZWElzSUhSb2FYTWdiV0Y1SUdKbElHTmhkWE5sWkNCaWVTQjBkMjhnSnlBclhHNGdJQ0FnSUNBZ0lDZG5aWFJKYm1sMGFXRnNVM1JoZEdVb0tTQnZjaUJuWlhSRVpXWmhkV3gwVUhKdmNITW9LU0J0WlhSb2IyUnpJSEpsZEhWeWJtbHVaeUJ2WW1wbFkzUnpJQ2NnSzF4dUlDQWdJQ0FnSUNBbmQybDBhQ0JqYkdGemFHbHVaeUJyWlhsekxpY3NYRzRnSUNBZ0lDQWdJR3RsZVZ4dUlDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHZibVZiYTJWNVhTQTlQVDBnZFc1a1pXWnBibVZrS1NrN1hHNGdJQ0FnSUNCdmJtVmJhMlY1WFNBOUlIUjNiMXRyWlhsZE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYjI1bE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCbWRXNWpkR2x2YmlCMGFHRjBJR2x1ZG05clpYTWdkSGR2SUdaMWJtTjBhVzl1Y3lCaGJtUWdiV1Z5WjJWeklIUm9aV2x5SUhKbGRIVnliaUIyWVd4MVpYTXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdiMjVsSUVaMWJtTjBhVzl1SUhSdklHbHVkbTlyWlNCbWFYSnpkQzVjYmlBcUlFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlIUjNieUJHZFc1amRHbHZiaUIwYnlCcGJuWnZhMlVnYzJWamIyNWtMbHh1SUNvZ1FISmxkSFZ5YmlCN1puVnVZM1JwYjI1OUlFWjFibU4wYVc5dUlIUm9ZWFFnYVc1MmIydGxjeUIwYUdVZ2RIZHZJR0Z5WjNWdFpXNTBJR1oxYm1OMGFXOXVjeTVjYmlBcUlFQndjbWwyWVhSbFhHNGdLaTljYm1aMWJtTjBhVzl1SUdOeVpXRjBaVTFsY21kbFpGSmxjM1ZzZEVaMWJtTjBhVzl1S0c5dVpTd2dkSGR2S1NCN1hHNGdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpQnRaWEpuWldSU1pYTjFiSFFvS1NCN1hHNGdJQ0FnZG1GeUlHRWdQU0J2Ym1VdVlYQndiSGtvZEdocGN5d2dZWEpuZFcxbGJuUnpLVHRjYmlBZ0lDQjJZWElnWWlBOUlIUjNieTVoY0hCc2VTaDBhR2x6TENCaGNtZDFiV1Z1ZEhNcE8xeHVJQ0FnSUdsbUlDaGhJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmlPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9ZaUE5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZVHRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR01nUFNCN2ZUdGNiaUFnSUNCdFpYSm5aVWx1ZEc5WGFYUm9UbTlFZFhCc2FXTmhkR1ZMWlhsektHTXNJR0VwTzF4dUlDQWdJRzFsY21kbFNXNTBiMWRwZEdoT2IwUjFjR3hwWTJGMFpVdGxlWE1vWXl3Z1lpazdYRzRnSUNBZ2NtVjBkWEp1SUdNN1hHNGdJSDA3WEc1OVhHNWNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhJR1oxYm1OMGFXOXVJSFJvWVhRZ2FXNTJiMnRsY3lCMGQyOGdablZ1WTNScGIyNXpJR0Z1WkNCcFoyNXZjbVZ6SUhSb1pXbHlJSEpsZEhWeWJpQjJZV3hsY3k1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCdmJtVWdSblZ1WTNScGIyNGdkRzhnYVc1MmIydGxJR1pwY25OMExseHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnZEhkdklFWjFibU4wYVc5dUlIUnZJR2x1ZG05clpTQnpaV052Ym1RdVhHNGdLaUJBY21WMGRYSnVJSHRtZFc1amRHbHZibjBnUm5WdVkzUnBiMjRnZEdoaGRDQnBiblp2YTJWeklIUm9aU0IwZDI4Z1lYSm5kVzFsYm5RZ1puVnVZM1JwYjI1ekxseHVJQ29nUUhCeWFYWmhkR1ZjYmlBcUwxeHVablZ1WTNScGIyNGdZM0psWVhSbFEyaGhhVzVsWkVaMWJtTjBhVzl1S0c5dVpTd2dkSGR2S1NCN1hHNGdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpQmphR0ZwYm1Wa1JuVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2IyNWxMbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lrN1hHNGdJQ0FnZEhkdkxtRndjR3g1S0hSb2FYTXNJR0Z5WjNWdFpXNTBjeWs3WEc0Z0lIMDdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FtbHVaSE1nWVNCdFpYUm9iMlFnZEc4Z2RHaGxJR052YlhCdmJtVnVkQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdZMjl0Y0c5dVpXNTBJRU52YlhCdmJtVnVkQ0IzYUc5elpTQnRaWFJvYjJRZ2FYTWdaMjlwYm1jZ2RHOGdZbVVnWW05MWJtUXVYRzRnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCdFpYUm9iMlFnVFdWMGFHOWtJSFJ2SUdKbElHSnZkVzVrTGx4dUlDb2dRSEpsZEhWeWJpQjdablZ1WTNScGIyNTlJRlJvWlNCaWIzVnVaQ0J0WlhSb2IyUXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHSnBibVJCZFhSdlFtbHVaRTFsZEdodlpDaGpiMjF3YjI1bGJuUXNJRzFsZEdodlpDa2dlMXh1SUNCMllYSWdZbTkxYm1STlpYUm9iMlFnUFNCdFpYUm9iMlF1WW1sdVpDaGpiMjF3YjI1bGJuUXBPMXh1SUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnWW05MWJtUk5aWFJvYjJRdVgxOXlaV0ZqZEVKdmRXNWtRMjl1ZEdWNGRDQTlJR052YlhCdmJtVnVkRHRjYmlBZ0lDQmliM1Z1WkUxbGRHaHZaQzVmWDNKbFlXTjBRbTkxYm1STlpYUm9iMlFnUFNCdFpYUm9iMlE3WEc0Z0lDQWdZbTkxYm1STlpYUm9iMlF1WDE5eVpXRmpkRUp2ZFc1a1FYSm5kVzFsYm5SeklEMGdiblZzYkR0Y2JpQWdJQ0IyWVhJZ1kyOXRjRzl1Wlc1MFRtRnRaU0E5SUdOdmJYQnZibVZ1ZEM1amIyNXpkSEoxWTNSdmNpNWthWE53YkdGNVRtRnRaVHRjYmlBZ0lDQjJZWElnWDJKcGJtUWdQU0JpYjNWdVpFMWxkR2h2WkM1aWFXNWtPMXh1SUNBZ0lDOHFJR1Z6YkdsdWRDMWthWE5oWW14bElHSnNiMk5yTFhOamIzQmxaQzEyWVhJc0lHNXZMWFZ1WkdWbUlDb3ZYRzRnSUNBZ1ltOTFibVJOWlhSb2IyUXVZbWx1WkNBOUlHWjFibU4wYVc5dUtHNWxkMVJvYVhNZ0tTQjdabTl5SUNoMllYSWdZWEpuY3oxYlhTd2tYMTh3UFRFc0pGOWZNVDFoY21kMWJXVnVkSE11YkdWdVozUm9PeVJmWHpBOEpGOWZNVHNrWDE4d0t5c3BJR0Z5WjNNdWNIVnphQ2hoY21kMWJXVnVkSE5iSkY5Zk1GMHBPMXh1SUNBZ0lDQWdMeThnVlhObGNpQnBjeUIwY25scGJtY2dkRzhnWW1sdVpDZ3BJR0Z1SUdGMWRHOWliM1Z1WkNCdFpYUm9iMlE3SUhkbElHVm1abVZqZEdsMlpXeDVJSGRwYkd4Y2JpQWdJQ0FnSUM4dklHbG5ibTl5WlNCMGFHVWdkbUZzZFdVZ2IyWWdYQ0owYUdselhDSWdkR2hoZENCMGFHVWdkWE5sY2lCcGN5QjBjbmxwYm1jZ2RHOGdkWE5sTENCemIxeHVJQ0FnSUNBZ0x5OGdiR1YwSjNNZ2QyRnliaTVjYmlBZ0lDQWdJR2xtSUNodVpYZFVhR2x6SUNFOVBTQmpiMjF3YjI1bGJuUWdKaVlnYm1WM1ZHaHBjeUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBblltbHVaQ2dwT2lCU1pXRmpkQ0JqYjIxd2IyNWxiblFnYldWMGFHOWtjeUJ0WVhrZ2IyNXNlU0JpWlNCaWIzVnVaQ0IwYnlCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oyTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTNGdVMlZsSUNWekp5eGNiaUFnSUNBZ0lDQWdJQ0JqYjIxd2IyNWxiblJPWVcxbFhHNGdJQ0FnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9JV0Z5WjNNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBZ0lDZGlhVzVrS0NrNklGbHZkU0JoY21VZ1ltbHVaR2x1WnlCaElHTnZiWEJ2Ym1WdWRDQnRaWFJvYjJRZ2RHOGdkR2hsSUdOdmJYQnZibVZ1ZEM0Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBJR1J2WlhNZ2RHaHBjeUJtYjNJZ2VXOTFJR0YxZEc5dFlYUnBZMkZzYkhrZ2FXNGdZU0JvYVdkb0xYQmxjbVp2Y20xaGJtTmxJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZDNZWGtzSUhOdklIbHZkU0JqWVc0Z2MyRm1aV3g1SUhKbGJXOTJaU0IwYUdseklHTmhiR3d1SUZObFpTQWxjeWNzWEc0Z0lDQWdJQ0FnSUNBZ1kyOXRjRzl1Wlc1MFRtRnRaVnh1SUNBZ0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJpYjNWdVpFMWxkR2h2WkR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhaaGNpQnlaV0p2ZFc1a1RXVjBhRzlrSUQwZ1gySnBibVF1WVhCd2JIa29ZbTkxYm1STlpYUm9iMlFzSUdGeVozVnRaVzUwY3lrN1hHNGdJQ0FnSUNCeVpXSnZkVzVrVFdWMGFHOWtMbDlmY21WaFkzUkNiM1Z1WkVOdmJuUmxlSFFnUFNCamIyMXdiMjVsYm5RN1hHNGdJQ0FnSUNCeVpXSnZkVzVrVFdWMGFHOWtMbDlmY21WaFkzUkNiM1Z1WkUxbGRHaHZaQ0E5SUcxbGRHaHZaRHRjYmlBZ0lDQWdJSEpsWW05MWJtUk5aWFJvYjJRdVgxOXlaV0ZqZEVKdmRXNWtRWEpuZFcxbGJuUnpJRDBnWVhKbmN6dGNiaUFnSUNBZ0lISmxkSFZ5YmlCeVpXSnZkVzVrVFdWMGFHOWtPMXh1SUNBZ0lDQWdMeW9nWlhOc2FXNTBMV1Z1WVdKc1pTQXFMMXh1SUNBZ0lIMDdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHSnZkVzVrVFdWMGFHOWtPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFSnBibVJ6SUdGc2JDQmhkWFJ2TFdKdmRXNWtJRzFsZEdodlpITWdhVzRnWVNCamIyMXdiMjVsYm5RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUdOdmJYQnZibVZ1ZENCRGIyMXdiMjVsYm5RZ2QyaHZjMlVnYldWMGFHOWtJR2x6SUdkdmFXNW5JSFJ2SUdKbElHSnZkVzVrTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJpYVc1a1FYVjBiMEpwYm1STlpYUm9iMlJ6S0dOdmJYQnZibVZ1ZENrZ2UxeHVJQ0JtYjNJZ0tIWmhjaUJoZFhSdlFtbHVaRXRsZVNCcGJpQmpiMjF3YjI1bGJuUXVYMTl5WldGamRFRjFkRzlDYVc1a1RXRndLU0I3WEc0Z0lDQWdhV1lnS0dOdmJYQnZibVZ1ZEM1ZlgzSmxZV04wUVhWMGIwSnBibVJOWVhBdWFHRnpUM2R1VUhKdmNHVnlkSGtvWVhWMGIwSnBibVJMWlhrcEtTQjdYRzRnSUNBZ0lDQjJZWElnYldWMGFHOWtJRDBnWTI5dGNHOXVaVzUwTGw5ZmNtVmhZM1JCZFhSdlFtbHVaRTFoY0Z0aGRYUnZRbWx1WkV0bGVWMDdYRzRnSUNBZ0lDQmpiMjF3YjI1bGJuUmJZWFYwYjBKcGJtUkxaWGxkSUQwZ1ltbHVaRUYxZEc5Q2FXNWtUV1YwYUc5a0tGeHVJQ0FnSUNBZ0lDQmpiMjF3YjI1bGJuUXNYRzRnSUNBZ0lDQWdJRkpsWVdOMFJYSnliM0pWZEdsc2N5NW5kV0Z5WkNoY2JpQWdJQ0FnSUNBZ0lDQnRaWFJvYjJRc1hHNGdJQ0FnSUNBZ0lDQWdZMjl0Y0c5dVpXNTBMbU52Ym5OMGNuVmpkRzl5TG1ScGMzQnNZWGxPWVcxbElDc2dKeTRuSUNzZ1lYVjBiMEpwYm1STFpYbGNiaUFnSUNBZ0lDQWdLVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzRnSUgxY2JuMWNibHh1ZG1GeUlIUjVjR1ZFWlhCeVpXTmhkR2x2YmtSbGMyTnlhWEIwYjNJZ1BTQjdYRzRnSUdWdWRXMWxjbUZpYkdVNklHWmhiSE5sTEZ4dUlDQm5aWFE2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUhaaGNpQmthWE53YkdGNVRtRnRaU0E5SUhSb2FYTXVaR2x6Y0d4aGVVNWhiV1VnZkh3Z2RHaHBjeTV1WVcxbElIeDhJQ2REYjIxd2IyNWxiblFuTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FuSlhNdWRIbHdaU0JwY3lCa1pYQnlaV05oZEdWa0xpQlZjMlVnSlhNZ1pHbHlaV04wYkhrZ2RHOGdZV05qWlhOeklIUm9aU0JqYkdGemN5NG5MRnh1SUNBZ0lDQWdaR2x6Y0d4aGVVNWhiV1VzWEc0Z0lDQWdJQ0JrYVhOd2JHRjVUbUZ0WlZ4dUlDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEdocGN5d2dKM1I1Y0dVbkxDQjdYRzRnSUNBZ0lDQjJZV3gxWlRvZ2RHaHBjMXh1SUNBZ0lIMHBPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNTlPMXh1WEc0dktpcGNiaUFxSUVGa1pDQnRiM0psSUhSdklIUm9aU0JTWldGamRFTnNZWE56SUdKaGMyVWdZMnhoYzNNdUlGUm9aWE5sSUdGeVpTQmhiR3dnYkdWbllXTjVJR1psWVhSMWNtVnpJR0Z1WkZ4dUlDb2dkR2hsY21WbWIzSmxJRzV2ZENCaGJISmxZV1I1SUhCaGNuUWdiMllnZEdobElHMXZaR1Z5YmlCU1pXRmpkRU52YlhCdmJtVnVkQzVjYmlBcUwxeHVkbUZ5SUZKbFlXTjBRMnhoYzNOTmFYaHBiaUE5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVkU5RVR6b2dWR2hwY3lCM2FXeHNJR0psSUdSbGNISmxZMkYwWldRZ1ltVmpZWFZ6WlNCemRHRjBaU0J6YUc5MWJHUWdZV3gzWVhseklHdGxaWEFnWVNCamIyNXphWE4wWlc1MFhHNGdJQ0FxSUhSNWNHVWdjMmxuYm1GMGRYSmxJR0Z1WkNCMGFHVWdiMjVzZVNCMWMyVWdZMkZ6WlNCbWIzSWdkR2hwY3l3Z2FYTWdkRzhnWVhadmFXUWdkR2hoZEM1Y2JpQWdJQ292WEc0Z0lISmxjR3hoWTJWVGRHRjBaVG9nWm5WdVkzUnBiMjRvYm1WM1UzUmhkR1VzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVsYm5GMVpYVmxVbVZ3YkdGalpWTjBZWFJsS0hSb2FYTXNJRzVsZDFOMFlYUmxLVHRjYmlBZ0lDQnBaaUFvWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0FnSUZKbFlXTjBWWEJrWVhSbFVYVmxkV1V1Wlc1eGRXVjFaVU5oYkd4aVlXTnJLSFJvYVhNc0lHTmhiR3hpWVdOcktUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU5vWldOcmN5QjNhR1YwYUdWeUlHOXlJRzV2ZENCMGFHbHpJR052YlhCdmMybDBaU0JqYjIxd2IyNWxiblFnYVhNZ2JXOTFiblJsWkM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjBnVkhKMVpTQnBaaUJ0YjNWdWRHVmtMQ0JtWVd4elpTQnZkR2hsY25kcGMyVXVYRzRnSUNBcUlFQndjbTkwWldOMFpXUmNiaUFnSUNvZ1FHWnBibUZzWEc0Z0lDQXFMMXh1SUNCcGMwMXZkVzUwWldRNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIWmhjaUJ2ZDI1bGNpQTlJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlMbU4xY25KbGJuUTdYRzRnSUNBZ0lDQnBaaUFvYjNkdVpYSWdJVDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJQ0FnYjNkdVpYSXVYM2RoY201bFpFRmliM1YwVW1WbWMwbHVVbVZ1WkdWeUxGeHVJQ0FnSUNBZ0lDQWdJQ2NsY3lCcGN5QmhZMk5sYzNOcGJtY2dhWE5OYjNWdWRHVmtJR2x1YzJsa1pTQnBkSE1nY21WdVpHVnlLQ2tnWm5WdVkzUnBiMjR1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2R5Wlc1a1pYSW9LU0J6YUc5MWJHUWdZbVVnWVNCd2RYSmxJR1oxYm1OMGFXOXVJRzltSUhCeWIzQnpJR0Z1WkNCemRHRjBaUzRnU1hRZ2MyaHZkV3hrSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2R1WlhabGNpQmhZMk5sYzNNZ2MyOXRaWFJvYVc1bklIUm9ZWFFnY21WeGRXbHlaWE1nYzNSaGJHVWdaR0YwWVNCbWNtOXRJSFJvWlNCd2NtVjJhVzkxY3lBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuY21WdVpHVnlMQ0J6ZFdOb0lHRnpJSEpsWm5NdUlFMXZkbVVnZEdocGN5QnNiMmRwWXlCMGJ5QmpiMjF3YjI1bGJuUkVhV1JOYjNWdWRDQmhibVFnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMk52YlhCdmJtVnVkRVJwWkZWd1pHRjBaU0JwYm5OMFpXRmtMaWNzWEc0Z0lDQWdJQ0FnSUNBZ2IzZHVaWEl1WjJWMFRtRnRaU2dwSUh4OElDZEJJR052YlhCdmJtVnVkQ2RjYmlBZ0lDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnSUNCdmQyNWxjaTVmZDJGeWJtVmtRV0p2ZFhSU1pXWnpTVzVTWlc1a1pYSWdQU0IwY25WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlNBOUlGSmxZV04wU1c1emRHRnVZMlZOWVhBdVoyVjBLSFJvYVhNcE8xeHVJQ0FnSUhKbGRIVnliaUFvWEc0Z0lDQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxJQ1ltWEc0Z0lDQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxJQ0U5UFNCU1pXRmpkRXhwWm1WRGVXTnNaUzVqZFhKeVpXNTBiSGxOYjNWdWRHbHVaMGx1YzNSaGJtTmxYRzRnSUNBZ0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVTJWMGN5QmhJSE4xWW5ObGRDQnZaaUIwYUdVZ2NISnZjSE11WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCd1lYSjBhV0ZzVUhKdmNITWdVM1ZpYzJWMElHOW1JSFJvWlNCdVpYaDBJSEJ5YjNCekxseHVJQ0FnS2lCQWNHRnlZVzBnZXo5bWRXNWpkR2x2Ym4wZ1kyRnNiR0poWTJzZ1EyRnNiR1ZrSUdGbWRHVnlJSEJ5YjNCeklHRnlaU0IxY0dSaGRHVmtMbHh1SUNBZ0tpQkFabWx1WVd4Y2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFaR1Z3Y21WallYUmxaRnh1SUNBZ0tpOWNiaUFnYzJWMFVISnZjSE02SUdaMWJtTjBhVzl1S0hCaGNuUnBZV3hRY205d2N5d2dZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQlNaV0ZqZEZWd1pHRjBaVkYxWlhWbExtVnVjWFZsZFdWVFpYUlFjbTl3Y3loMGFHbHpMQ0J3WVhKMGFXRnNVSEp2Y0hNcE8xeHVJQ0FnSUdsbUlDaGpZV3hzWW1GamF5a2dlMXh1SUNBZ0lDQWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNWxibkYxWlhWbFEyRnNiR0poWTJzb2RHaHBjeXdnWTJGc2JHSmhZMnNwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVndiR0ZqWlNCaGJHd2dkR2hsSUhCeWIzQnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYm1WM1VISnZjSE1nVTNWaWMyVjBJRzltSUhSb1pTQnVaWGgwSUhCeWIzQnpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2V6OW1kVzVqZEdsdmJuMGdZMkZzYkdKaFkyc2dRMkZzYkdWa0lHRm1kR1Z5SUhCeWIzQnpJR0Z5WlNCMWNHUmhkR1ZrTGx4dUlDQWdLaUJBWm1sdVlXeGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBWkdWd2NtVmpZWFJsWkZ4dUlDQWdLaTljYmlBZ2NtVndiR0ZqWlZCeWIzQnpPaUJtZFc1amRHbHZiaWh1WlhkUWNtOXdjeXdnWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0JTWldGamRGVndaR0YwWlZGMVpYVmxMbVZ1Y1hWbGRXVlNaWEJzWVdObFVISnZjSE1vZEdocGN5d2dibVYzVUhKdmNITXBPMXh1SUNBZ0lHbG1JQ2hqWVd4c1ltRmpheWtnZTF4dUlDQWdJQ0FnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVsYm5GMVpYVmxRMkZzYkdKaFkyc29kR2hwY3l3Z1kyRnNiR0poWTJzcE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlR0Y2JseHVkbUZ5SUZKbFlXTjBRMnhoYzNORGIyMXdiMjVsYm5RZ1BTQm1kVzVqZEdsdmJpZ3BJSHQ5TzF4dVlYTnphV2R1S0Z4dUlDQlNaV0ZqZEVOc1lYTnpRMjl0Y0c5dVpXNTBMbkJ5YjNSdmRIbHdaU3hjYmlBZ1VtVmhZM1JEYjIxd2IyNWxiblF1Y0hKdmRHOTBlWEJsTEZ4dUlDQlNaV0ZqZEVOc1lYTnpUV2w0YVc1Y2JpazdYRzVjYmk4cUtseHVJQ29nVFc5a2RXeGxJR1p2Y2lCamNtVmhkR2x1WnlCamIyMXdiM05wZEdVZ1kyOXRjRzl1Wlc1MGN5NWNiaUFxWEc0Z0tpQkFZMnhoYzNNZ1VtVmhZM1JEYkdGemMxeHVJQ292WEc1MllYSWdVbVZoWTNSRGJHRnpjeUE5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxjeUJoSUdOdmJYQnZjMmwwWlNCamIyMXdiMjVsYm5RZ1kyeGhjM01nWjJsMlpXNGdZU0JqYkdGemN5QnpjR1ZqYVdacFkyRjBhVzl1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2MzQmxZeUJEYkdGemN5QnpjR1ZqYVdacFkyRjBhVzl1SUNoM2FHbGphQ0J0ZFhOMElHUmxabWx1WlNCZ2NtVnVaR1Z5WUNrdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTJaMWJtTjBhVzl1ZlNCRGIyMXdiMjVsYm5RZ1kyOXVjM1J5ZFdOMGIzSWdablZ1WTNScGIyNHVYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ292WEc0Z0lHTnlaV0YwWlVOc1lYTnpPaUJtZFc1amRHbHZiaWh6Y0dWaktTQjdYRzRnSUNBZ2RtRnlJRU52Ym5OMGNuVmpkRzl5SUQwZ1puVnVZM1JwYjI0b2NISnZjSE1zSUdOdmJuUmxlSFFwSUh0Y2JpQWdJQ0FnSUM4dklGUm9hWE1nWTI5dWMzUnlkV04wYjNJZ2FYTWdiM1psY25KcFpHUmxiaUJpZVNCdGIyTnJjeTRnVkdobElHRnlaM1Z0Wlc1MElHbHpJSFZ6WldSY2JpQWdJQ0FnSUM4dklHSjVJRzF2WTJ0eklIUnZJR0Z6YzJWeWRDQnZiaUIzYUdGMElHZGxkSE1nYlc5MWJuUmxaQzVjYmx4dUlDQWdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpJR2x1YzNSaGJtTmxiMllnUTI5dWMzUnlkV04wYjNJc1hHNGdJQ0FnSUNBZ0lDQWdKMU52YldWMGFHbHVaeUJwY3lCallXeHNhVzVuSUdFZ1VtVmhZM1FnWTI5dGNHOXVaVzUwSUdScGNtVmpkR3g1TGlCVmMyVWdZU0JtWVdOMGIzSjVJRzl5SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2RLVTFnZ2FXNXpkR1ZoWkM0Z1UyVmxPaUJvZEhSd2N6b3ZMMlppTG0xbEwzSmxZV04wTFd4bFoyRmplV1poWTNSdmNua25YRzRnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnTHk4Z1YybHlaU0IxY0NCaGRYUnZMV0pwYm1ScGJtZGNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxsOWZjbVZoWTNSQmRYUnZRbWx1WkUxaGNDa2dlMXh1SUNBZ0lDQWdJQ0JpYVc1a1FYVjBiMEpwYm1STlpYUm9iMlJ6S0hSb2FYTXBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IwYUdsekxuQnliM0J6SUQwZ2NISnZjSE03WEc0Z0lDQWdJQ0IwYUdsekxtTnZiblJsZUhRZ1BTQmpiMjUwWlhoME8xeHVJQ0FnSUNBZ2RHaHBjeTV6ZEdGMFpTQTlJRzUxYkd3N1hHNWNiaUFnSUNBZ0lDOHZJRkpsWVdOMFEyeGhjM05sY3lCa2IyVnpiaWQwSUdoaGRtVWdZMjl1YzNSeWRXTjBiM0p6TGlCSmJuTjBaV0ZrTENCMGFHVjVJSFZ6WlNCMGFHVmNiaUFnSUNBZ0lDOHZJR2RsZEVsdWFYUnBZV3hUZEdGMFpTQmhibVFnWTI5dGNHOXVaVzUwVjJsc2JFMXZkVzUwSUcxbGRHaHZaSE1nWm05eUlHbHVhWFJwWVd4cGVtRjBhVzl1TGx4dVhHNGdJQ0FnSUNCMllYSWdhVzVwZEdsaGJGTjBZWFJsSUQwZ2RHaHBjeTVuWlhSSmJtbDBhV0ZzVTNSaGRHVWdQeUIwYUdsekxtZGxkRWx1YVhScFlXeFRkR0YwWlNncElEb2diblZzYkR0Y2JpQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdWMlVnWVd4c2IzY2dZWFYwYnkxdGIyTnJjeUIwYnlCd2NtOWpaV1ZrSUdGeklHbG1JSFJvWlhrbmNtVWdjbVYwZFhKdWFXNW5JRzUxYkd3dVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdhVzVwZEdsaGJGTjBZWFJsSUQwOVBTQW5kVzVrWldacGJtVmtKeUFtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1blpYUkpibWwwYVdGc1UzUmhkR1V1WDJselRXOWphMFoxYm1OMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdWR2hwY3lCcGN5QndjbTlpWVdKc2VTQmlZV1FnY0hKaFkzUnBZMlV1SUVOdmJuTnBaR1Z5SUhkaGNtNXBibWNnYUdWeVpTQmhibVJjYmlBZ0lDQWdJQ0FnSUNBdkx5QmtaWEJ5WldOaGRHbHVaeUIwYUdseklHTnZiblpsYm1sbGJtTmxMbHh1SUNBZ0lDQWdJQ0FnSUdsdWFYUnBZV3hUZEdGMFpTQTlJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lIUjVjR1Z2WmlCcGJtbDBhV0ZzVTNSaGRHVWdQVDA5SUNkdlltcGxZM1FuSUNZbUlDRkJjbkpoZVM1cGMwRnljbUY1S0dsdWFYUnBZV3hUZEdGMFpTa3NYRzRnSUNBZ0lDQWdJQ2NsY3k1blpYUkpibWwwYVdGc1UzUmhkR1VvS1RvZ2JYVnpkQ0J5WlhSMWNtNGdZVzRnYjJKcVpXTjBJRzl5SUc1MWJHd25MRnh1SUNBZ0lDQWdJQ0JEYjI1emRISjFZM1J2Y2k1a2FYTndiR0Y1VG1GdFpTQjhmQ0FuVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUW5YRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hSNWNHVnZaaUJwYm1sMGFXRnNVM1JoZEdVZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUNGQmNuSmhlUzVwYzBGeWNtRjVLR2x1YVhScFlXeFRkR0YwWlNrcEtUdGNibHh1SUNBZ0lDQWdkR2hwY3k1emRHRjBaU0E5SUdsdWFYUnBZV3hUZEdGMFpUdGNiaUFnSUNCOU8xeHVJQ0FnSUVOdmJuTjBjblZqZEc5eUxuQnliM1J2ZEhsd1pTQTlJRzVsZHlCU1pXRmpkRU5zWVhOelEyOXRjRzl1Wlc1MEtDazdYRzRnSUNBZ1EyOXVjM1J5ZFdOMGIzSXVjSEp2ZEc5MGVYQmxMbU52Ym5OMGNuVmpkRzl5SUQwZ1EyOXVjM1J5ZFdOMGIzSTdYRzVjYmlBZ0lDQnBibXBsWTNSbFpFMXBlR2x1Y3k1bWIzSkZZV05vS0Z4dUlDQWdJQ0FnYldsNFUzQmxZMGx1ZEc5RGIyMXdiMjVsYm5RdVltbHVaQ2h1ZFd4c0xDQkRiMjV6ZEhKMVkzUnZjaWxjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdiV2w0VTNCbFkwbHVkRzlEYjIxd2IyNWxiblFvUTI5dWMzUnlkV04wYjNJc0lITndaV01wTzF4dVhHNGdJQ0FnTHk4Z1NXNXBkR2xoYkdsNlpTQjBhR1VnWkdWbVlYVnNkRkJ5YjNCeklIQnliM0JsY25SNUlHRm1kR1Z5SUdGc2JDQnRhWGhwYm5NZ2FHRjJaU0JpWldWdUlHMWxjbWRsWkZ4dUlDQWdJR2xtSUNoRGIyNXpkSEoxWTNSdmNpNW5aWFJFWldaaGRXeDBVSEp2Y0hNcElIdGNiaUFnSUNBZ0lFTnZibk4wY25WamRHOXlMbVJsWm1GMWJIUlFjbTl3Y3lBOUlFTnZibk4wY25WamRHOXlMbWRsZEVSbFptRjFiSFJRY205d2N5Z3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDOHZJRlJvYVhNZ2FYTWdZU0IwWVdjZ2RHOGdhVzVrYVdOaGRHVWdkR2hoZENCMGFHVWdkWE5sSUc5bUlIUm9aWE5sSUcxbGRHaHZaQ0J1WVcxbGN5QnBjeUJ2YXl4Y2JpQWdJQ0FnSUM4dklITnBibU5sSUdsMEozTWdkWE5sWkNCM2FYUm9JR055WldGMFpVTnNZWE56TGlCSlppQnBkQ2R6SUc1dmRDd2dkR2hsYmlCcGRDZHpJR3hwYTJWc2VTQmhYRzRnSUNBZ0lDQXZMeUJ0YVhOMFlXdGxJSE52SUhkbEoyeHNJSGRoY200Z2VXOTFJSFJ2SUhWelpTQjBhR1VnYzNSaGRHbGpJSEJ5YjNCbGNuUjVMQ0J3Y205d1pYSjBlVnh1SUNBZ0lDQWdMeThnYVc1cGRHbGhiR2w2WlhJZ2IzSWdZMjl1YzNSeWRXTjBiM0lnY21WemNHVmpkR2wyWld4NUxseHVJQ0FnSUNBZ2FXWWdLRU52Ym5OMGNuVmpkRzl5TG1kbGRFUmxabUYxYkhSUWNtOXdjeWtnZTF4dUlDQWdJQ0FnSUNCRGIyNXpkSEoxWTNSdmNpNW5aWFJFWldaaGRXeDBVSEp2Y0hNdWFYTlNaV0ZqZEVOc1lYTnpRWEJ3Y205MlpXUWdQU0I3ZlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDaERiMjV6ZEhKMVkzUnZjaTV3Y205MGIzUjVjR1V1WjJWMFNXNXBkR2xoYkZOMFlYUmxLU0I3WEc0Z0lDQWdJQ0FnSUVOdmJuTjBjblZqZEc5eUxuQnliM1J2ZEhsd1pTNW5aWFJKYm1sMGFXRnNVM1JoZEdVdWFYTlNaV0ZqZEVOc1lYTnpRWEJ3Y205MlpXUWdQU0I3ZlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdRMjl1YzNSeWRXTjBiM0l1Y0hKdmRHOTBlWEJsTG5KbGJtUmxjaXhjYmlBZ0lDQWdJQ2RqY21WaGRHVkRiR0Z6Y3lndUxpNHBPaUJEYkdGemN5QnpjR1ZqYVdacFkyRjBhVzl1SUcxMWMzUWdhVzF3YkdWdFpXNTBJR0VnWUhKbGJtUmxjbUFnYldWMGFHOWtMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0VOdmJuTjBjblZqZEc5eUxuQnliM1J2ZEhsd1pTNXlaVzVrWlhJcEtUdGNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBaFEyOXVjM1J5ZFdOMGIzSXVjSEp2ZEc5MGVYQmxMbU52YlhCdmJtVnVkRk5vYjNWc1pGVndaR0YwWlN4Y2JpQWdJQ0FnSUNBZ0p5VnpJR2hoY3lCaElHMWxkR2h2WkNCallXeHNaV1FnSnlBclhHNGdJQ0FnSUNBZ0lDZGpiMjF3YjI1bGJuUlRhRzkxYkdSVmNHUmhkR1VvS1M0Z1JHbGtJSGx2ZFNCdFpXRnVJSE5vYjNWc1pFTnZiWEJ2Ym1WdWRGVndaR0YwWlNncFB5QW5JQ3RjYmlBZ0lDQWdJQ0FnSjFSb1pTQnVZVzFsSUdseklIQm9jbUZ6WldRZ1lYTWdZU0J4ZFdWemRHbHZiaUJpWldOaGRYTmxJSFJvWlNCbWRXNWpkR2x2YmlCcGN5QW5JQ3RjYmlBZ0lDQWdJQ0FnSjJWNGNHVmpkR1ZrSUhSdklISmxkSFZ5YmlCaElIWmhiSFZsTGljc1hHNGdJQ0FnSUNBZ0lITndaV011WkdsemNHeGhlVTVoYldVZ2ZId2dKMEVnWTI5dGNHOXVaVzUwSjF4dUlDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUZKbFpIVmpaU0IwYVcxbElITndaVzUwSUdSdmFXNW5JR3h2YjJ0MWNITWdZbmtnYzJWMGRHbHVaeUIwYUdWelpTQnZiaUIwYUdVZ2NISnZkRzkwZVhCbExseHVJQ0FnSUdadmNpQW9kbUZ5SUcxbGRHaHZaRTVoYldVZ2FXNGdVbVZoWTNSRGJHRnpjMGx1ZEdWeVptRmpaU2tnZTF4dUlDQWdJQ0FnYVdZZ0tDRkRiMjV6ZEhKMVkzUnZjaTV3Y205MGIzUjVjR1ZiYldWMGFHOWtUbUZ0WlYwcElIdGNiaUFnSUNBZ0lDQWdRMjl1YzNSeWRXTjBiM0l1Y0hKdmRHOTBlWEJsVzIxbGRHaHZaRTVoYldWZElEMGdiblZzYkR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCTVpXZGhZM2tnYUc5dmExeHVJQ0FnSUVOdmJuTjBjblZqZEc5eUxuUjVjR1VnUFNCRGIyNXpkSEoxWTNSdmNqdGNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb1EyOXVjM1J5ZFdOMGIzSXNJQ2QwZVhCbEp5d2dkSGx3WlVSbGNISmxZMkYwYVc5dVJHVnpZM0pwY0hSdmNpazdYRzRnSUNBZ0lDQjlJR05oZEdOb0lDaDRLU0I3WEc0Z0lDQWdJQ0FnSUM4dklFbEZJSGRwYkd3Z1ptRnBiQ0J2YmlCa1pXWnBibVZRY205d1pYSjBlU0FvWlhNMUxYTm9hVzB2YzJoaGJTQjBiMjhwWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlFTnZibk4wY25WamRHOXlPMXh1SUNCOUxGeHVYRzRnSUdsdWFtVmpkR2x2YmpvZ2UxeHVJQ0FnSUdsdWFtVmpkRTFwZUdsdU9pQm1kVzVqZEdsdmJpaHRhWGhwYmlrZ2UxeHVJQ0FnSUNBZ2FXNXFaV04wWldSTmFYaHBibk11Y0hWemFDaHRhWGhwYmlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRGJHRnpjenRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q29tcG9uZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlUXVldWVcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIFJlYWN0Q29tcG9uZW50KHByb3BzLCBjb250ZXh0KSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblxuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblJlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uKHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2spIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fFxuICAgIHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHxcbiAgICBwYXJ0aWFsU3RhdGUgPT0gbnVsbCxcbiAgICAnc2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSAnICtcbiAgICAnZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLidcbiAgKSA6IGludmFyaWFudCh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fFxuICB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8XG4gIHBhcnRpYWxTdGF0ZSA9PSBudWxsKSk7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIHBhcnRpYWxTdGF0ZSAhPSBudWxsLFxuICAgICAgJ3NldFN0YXRlKC4uLik6IFlvdSBwYXNzZWQgYW4gdW5kZWZpbmVkIG9yIG51bGwgc3RhdGUgb2JqZWN0OyAnICtcbiAgICAgICdpbnN0ZWFkLCB1c2UgZm9yY2VVcGRhdGUoKS4nXG4gICAgKSA6IG51bGwpO1xuICB9XG4gIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSk7XG4gIGlmIChjYWxsYmFjaykge1xuICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNrKTtcbiAgfVxufTtcblxuLyoqXG4gKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAqXG4gKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAqXG4gKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICpcbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgdXBkYXRlIGlzIGNvbXBsZXRlLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblJlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMpO1xuICBpZiAoY2FsbGJhY2spIHtcbiAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjayk7XG4gIH1cbn07XG5cbi8qKlxuICogRGVwcmVjYXRlZCBBUElzLiBUaGVzZSBBUElzIHVzZWQgdG8gZXhpc3Qgb24gY2xhc3NpYyBSZWFjdCBjbGFzc2VzIGJ1dCBzaW5jZVxuICogd2Ugd291bGQgbGlrZSB0byBkZXByZWNhdGUgdGhlbSwgd2UncmUgbm90IGdvaW5nIHRvIG1vdmUgdGhlbSBvdmVyIHRvIHRoaXNcbiAqIG1vZGVybiBiYXNlIGNsYXNzLiBJbnN0ZWFkLCB3ZSBkZWZpbmUgYSBnZXR0ZXIgdGhhdCB3YXJucyBpZiBpdCdzIGFjY2Vzc2VkLlxuICovXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIHZhciBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICBnZXRET01Ob2RlOiBbXG4gICAgICAnZ2V0RE9NTm9kZScsXG4gICAgICAnVXNlIFJlYWN0LmZpbmRET01Ob2RlKGNvbXBvbmVudCkgaW5zdGVhZC4nXG4gICAgXSxcbiAgICBpc01vdW50ZWQ6IFtcbiAgICAgICdpc01vdW50ZWQnLFxuICAgICAgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgK1xuICAgICAgJ2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLidcbiAgICBdLFxuICAgIHJlcGxhY2VQcm9wczogW1xuICAgICAgJ3JlcGxhY2VQcm9wcycsXG4gICAgICAnSW5zdGVhZCwgY2FsbCBSZWFjdC5yZW5kZXIgYWdhaW4gYXQgdGhlIHRvcCBsZXZlbC4nXG4gICAgXSxcbiAgICByZXBsYWNlU3RhdGU6IFtcbiAgICAgICdyZXBsYWNlU3RhdGUnLFxuICAgICAgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgK1xuICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuJ1xuICAgIF0sXG4gICAgc2V0UHJvcHM6IFtcbiAgICAgICdzZXRQcm9wcycsXG4gICAgICAnSW5zdGVhZCwgY2FsbCBSZWFjdC5yZW5kZXIgYWdhaW4gYXQgdGhlIHRvcCBsZXZlbC4nXG4gICAgXVxuICB9O1xuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5mbykge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhY3RDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICclcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlcycsXG4gICAgICAgICAgICBpbmZvWzBdLFxuICAgICAgICAgICAgaW5mb1sxXVxuICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh4KSB7XG4gICAgICAvLyBJRSB3aWxsIGZhaWwgb24gZGVmaW5lUHJvcGVydHkgKGVzNS1zaGltL3NoYW0gdG9vKVxuICAgIH1cbiAgfTtcbiAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7XG4gICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHtcbiAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkRiMjF3YjI1bGJuUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRGIyMXdiMjVsYm5SY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEZWd1pHRjBaVkYxWlhWbElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlZjR1JoZEdWUmRXVjFaVndpS1R0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUIzWVhKdWFXNW5JRDBnY21WeGRXbHlaU2hjSWk0dmQyRnlibWx1WjF3aUtUdGNibHh1THlvcVhHNGdLaUJDWVhObElHTnNZWE56SUdobGJIQmxjbk1nWm05eUlIUm9aU0IxY0dSaGRHbHVaeUJ6ZEdGMFpTQnZaaUJoSUdOdmJYQnZibVZ1ZEM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnVW1WaFkzUkRiMjF3YjI1bGJuUW9jSEp2Y0hNc0lHTnZiblJsZUhRcElIdGNiaUFnZEdocGN5NXdjbTl3Y3lBOUlIQnliM0J6TzF4dUlDQjBhR2x6TG1OdmJuUmxlSFFnUFNCamIyNTBaWGgwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRk5sZEhNZ1lTQnpkV0p6WlhRZ2IyWWdkR2hsSUhOMFlYUmxMaUJCYkhkaGVYTWdkWE5sSUhSb2FYTWdkRzhnYlhWMFlYUmxYRzRnS2lCemRHRjBaUzRnV1c5MUlITm9iM1ZzWkNCMGNtVmhkQ0JnZEdocGN5NXpkR0YwWldBZ1lYTWdhVzF0ZFhSaFlteGxMbHh1SUNwY2JpQXFJRlJvWlhKbElHbHpJRzV2SUdkMVlYSmhiblJsWlNCMGFHRjBJR0IwYUdsekxuTjBZWFJsWUNCM2FXeHNJR0psSUdsdGJXVmthV0YwWld4NUlIVndaR0YwWldRc0lITnZYRzRnS2lCaFkyTmxjM05wYm1jZ1lIUm9hWE11YzNSaGRHVmdJR0ZtZEdWeUlHTmhiR3hwYm1jZ2RHaHBjeUJ0WlhSb2IyUWdiV0Y1SUhKbGRIVnliaUIwYUdVZ2IyeGtJSFpoYkhWbExseHVJQ3BjYmlBcUlGUm9aWEpsSUdseklHNXZJR2QxWVhKaGJuUmxaU0IwYUdGMElHTmhiR3h6SUhSdklHQnpaWFJUZEdGMFpXQWdkMmxzYkNCeWRXNGdjM2x1WTJoeWIyNXZkWE5zZVN4Y2JpQXFJR0Z6SUhSb1pYa2diV0Y1SUdWMlpXNTBkV0ZzYkhrZ1ltVWdZbUYwWTJobFpDQjBiMmRsZEdobGNpNGdJRmx2ZFNCallXNGdjSEp2ZG1sa1pTQmhiaUJ2Y0hScGIyNWhiRnh1SUNvZ1kyRnNiR0poWTJzZ2RHaGhkQ0IzYVd4c0lHSmxJR1Y0WldOMWRHVmtJSGRvWlc0Z2RHaGxJR05oYkd3Z2RHOGdjMlYwVTNSaGRHVWdhWE1nWVdOMGRXRnNiSGxjYmlBcUlHTnZiWEJzWlhSbFpDNWNiaUFxWEc0Z0tpQlhhR1Z1SUdFZ1puVnVZM1JwYjI0Z2FYTWdjSEp2ZG1sa1pXUWdkRzhnYzJWMFUzUmhkR1VzSUdsMElIZHBiR3dnWW1VZ1kyRnNiR1ZrSUdGMElITnZiV1VnY0c5cGJuUWdhVzVjYmlBcUlIUm9aU0JtZFhSMWNtVWdLRzV2ZENCemVXNWphSEp2Ym05MWMyeDVLUzRnU1hRZ2QybHNiQ0JpWlNCallXeHNaV1FnZDJsMGFDQjBhR1VnZFhBZ2RHOGdaR0YwWlZ4dUlDb2dZMjl0Y0c5dVpXNTBJR0Z5WjNWdFpXNTBjeUFvYzNSaGRHVXNJSEJ5YjNCekxDQmpiMjUwWlhoMEtTNGdWR2hsYzJVZ2RtRnNkV1Z6SUdOaGJpQmlaU0JrYVdabVpYSmxiblJjYmlBcUlHWnliMjBnZEdocGN5NHFJR0psWTJGMWMyVWdlVzkxY2lCbWRXNWpkR2x2YmlCdFlYa2dZbVVnWTJGc2JHVmtJR0ZtZEdWeUlISmxZMlZwZG1WUWNtOXdjeUJpZFhRZ1ltVm1iM0psWEc0Z0tpQnphRzkxYkdSRGIyMXdiMjVsYm5SVmNHUmhkR1VzSUdGdVpDQjBhR2x6SUc1bGR5QnpkR0YwWlN3Z2NISnZjSE1zSUdGdVpDQmpiMjUwWlhoMElIZHBiR3dnYm05MElIbGxkQ0JpWlZ4dUlDb2dZWE56YVdkdVpXUWdkRzhnZEdocGN5NWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEh4bWRXNWpkR2x2Ym4wZ2NHRnlkR2xoYkZOMFlYUmxJRTVsZUhRZ2NHRnlkR2xoYkNCemRHRjBaU0J2Y2lCbWRXNWpkR2x2YmlCMGIxeHVJQ29nSUNBZ0lDQWdJSEJ5YjJSMVkyVWdibVY0ZENCd1lYSjBhV0ZzSUhOMFlYUmxJSFJ2SUdKbElHMWxjbWRsWkNCM2FYUm9JR04xY25KbGJuUWdjM1JoZEdVdVhHNGdLaUJBY0dGeVlXMGdlejltZFc1amRHbHZibjBnWTJGc2JHSmhZMnNnUTJGc2JHVmtJR0ZtZEdWeUlITjBZWFJsSUdseklIVndaR0YwWldRdVhHNGdLaUJBWm1sdVlXeGNiaUFxSUVCd2NtOTBaV04wWldSY2JpQXFMMXh1VW1WaFkzUkRiMjF3YjI1bGJuUXVjSEp2ZEc5MGVYQmxMbk5sZEZOMFlYUmxJRDBnWm5WdVkzUnBiMjRvY0dGeWRHbGhiRk4wWVhSbExDQmpZV3hzWW1GamF5a2dlMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJSFI1Y0dWdlppQndZWEowYVdGc1UzUmhkR1VnUFQwOUlDZHZZbXBsWTNRbklIeDhYRzRnSUNBZ2RIbHdaVzltSUhCaGNuUnBZV3hUZEdGMFpTQTlQVDBnSjJaMWJtTjBhVzl1SnlCOGZGeHVJQ0FnSUhCaGNuUnBZV3hUZEdGMFpTQTlQU0J1ZFd4c0xGeHVJQ0FnSUNkelpYUlRkR0YwWlNndUxpNHBPaUIwWVd0bGN5QmhiaUJ2WW1wbFkzUWdiMllnYzNSaGRHVWdkbUZ5YVdGaWJHVnpJSFJ2SUhWd1pHRjBaU0J2Y2lCaElDY2dLMXh1SUNBZ0lDZG1kVzVqZEdsdmJpQjNhR2xqYUNCeVpYUjFjbTV6SUdGdUlHOWlhbVZqZENCdlppQnpkR0YwWlNCMllYSnBZV0pzWlhNdUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIUjVjR1Z2WmlCd1lYSjBhV0ZzVTNSaGRHVWdQVDA5SUNkdlltcGxZM1FuSUh4OFhHNGdJSFI1Y0dWdlppQndZWEowYVdGc1UzUmhkR1VnUFQwOUlDZG1kVzVqZEdsdmJpY2dmSHhjYmlBZ2NHRnlkR2xoYkZOMFlYUmxJRDA5SUc1MWJHd3BLVHRjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdjR0Z5ZEdsaGJGTjBZWFJsSUNFOUlHNTFiR3dzWEc0Z0lDQWdJQ0FuYzJWMFUzUmhkR1VvTGk0dUtUb2dXVzkxSUhCaGMzTmxaQ0JoYmlCMWJtUmxabWx1WldRZ2IzSWdiblZzYkNCemRHRjBaU0J2WW1wbFkzUTdJQ2NnSzF4dUlDQWdJQ0FnSjJsdWMzUmxZV1FzSUhWelpTQm1iM0pqWlZWd1pHRjBaU2dwTGlkY2JpQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lIMWNiaUFnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVsYm5GMVpYVmxVMlYwVTNSaGRHVW9kR2hwY3l3Z2NHRnlkR2xoYkZOMFlYUmxLVHRjYmlBZ2FXWWdLR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNWxibkYxWlhWbFEyRnNiR0poWTJzb2RHaHBjeXdnWTJGc2JHSmhZMnNwTzF4dUlDQjlYRzU5TzF4dVhHNHZLaXBjYmlBcUlFWnZjbU5sY3lCaGJpQjFjR1JoZEdVdUlGUm9hWE1nYzJodmRXeGtJRzl1YkhrZ1ltVWdhVzUyYjJ0bFpDQjNhR1Z1SUdsMElHbHpJR3R1YjNkdUlIZHBkR2hjYmlBcUlHTmxjblJoYVc1MGVTQjBhR0YwSUhkbElHRnlaU0FxS201dmRDb3FJR2x1SUdFZ1JFOU5JSFJ5WVc1ellXTjBhVzl1TGx4dUlDcGNiaUFxSUZsdmRTQnRZWGtnZDJGdWRDQjBieUJqWVd4c0lIUm9hWE1nZDJobGJpQjViM1VnYTI1dmR5QjBhR0YwSUhOdmJXVWdaR1ZsY0dWeUlHRnpjR1ZqZENCdlppQjBhR1ZjYmlBcUlHTnZiWEJ2Ym1WdWRDZHpJSE4wWVhSbElHaGhjeUJqYUdGdVoyVmtJR0oxZENCZ2MyVjBVM1JoZEdWZ0lIZGhjeUJ1YjNRZ1kyRnNiR1ZrTGx4dUlDcGNiaUFxSUZSb2FYTWdkMmxzYkNCdWIzUWdhVzUyYjJ0bElHQnphRzkxYkdSRGIyMXdiMjVsYm5SVmNHUmhkR1ZnTENCaWRYUWdhWFFnZDJsc2JDQnBiblp2YTJWY2JpQXFJR0JqYjIxd2IyNWxiblJYYVd4c1ZYQmtZWFJsWUNCaGJtUWdZR052YlhCdmJtVnVkRVJwWkZWd1pHRjBaV0F1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHMvWm5WdVkzUnBiMjU5SUdOaGJHeGlZV05ySUVOaGJHeGxaQ0JoWm5SbGNpQjFjR1JoZEdVZ2FYTWdZMjl0Y0d4bGRHVXVYRzRnS2lCQVptbHVZV3hjYmlBcUlFQndjbTkwWldOMFpXUmNiaUFxTDF4dVVtVmhZM1JEYjIxd2IyNWxiblF1Y0hKdmRHOTBlWEJsTG1admNtTmxWWEJrWVhSbElEMGdablZ1WTNScGIyNG9ZMkZzYkdKaFkyc3BJSHRjYmlBZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlM1bGJuRjFaWFZsUm05eVkyVlZjR1JoZEdVb2RHaHBjeWs3WEc0Z0lHbG1JQ2hqWVd4c1ltRmpheWtnZTF4dUlDQWdJRkpsWVdOMFZYQmtZWFJsVVhWbGRXVXVaVzV4ZFdWMVpVTmhiR3hpWVdOcktIUm9hWE1zSUdOaGJHeGlZV05yS1R0Y2JpQWdmVnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkVaWEJ5WldOaGRHVmtJRUZRU1hNdUlGUm9aWE5sSUVGUVNYTWdkWE5sWkNCMGJ5QmxlR2x6ZENCdmJpQmpiR0Z6YzJsaklGSmxZV04wSUdOc1lYTnpaWE1nWW5WMElITnBibU5sWEc0Z0tpQjNaU0IzYjNWc1pDQnNhV3RsSUhSdklHUmxjSEpsWTJGMFpTQjBhR1Z0TENCM1pTZHlaU0J1YjNRZ1oyOXBibWNnZEc4Z2JXOTJaU0IwYUdWdElHOTJaWElnZEc4Z2RHaHBjMXh1SUNvZ2JXOWtaWEp1SUdKaGMyVWdZMnhoYzNNdUlFbHVjM1JsWVdRc0lIZGxJR1JsWm1sdVpTQmhJR2RsZEhSbGNpQjBhR0YwSUhkaGNtNXpJR2xtSUdsMEozTWdZV05qWlhOelpXUXVYRzRnS2k5Y2JtbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnZG1GeUlHUmxjSEpsWTJGMFpXUkJVRWx6SUQwZ2UxeHVJQ0FnSUdkbGRFUlBUVTV2WkdVNklGdGNiaUFnSUNBZ0lDZG5aWFJFVDAxT2IyUmxKeXhjYmlBZ0lDQWdJQ2RWYzJVZ1VtVmhZM1F1Wm1sdVpFUlBUVTV2WkdVb1kyOXRjRzl1Wlc1MEtTQnBibk4wWldGa0xpZGNiaUFnSUNCZExGeHVJQ0FnSUdselRXOTFiblJsWkRvZ1cxeHVJQ0FnSUNBZ0oybHpUVzkxYm5SbFpDY3NYRzRnSUNBZ0lDQW5TVzV6ZEdWaFpDd2diV0ZyWlNCemRYSmxJSFJ2SUdOc1pXRnVJSFZ3SUhOMVluTmpjbWx3ZEdsdmJuTWdZVzVrSUhCbGJtUnBibWNnY21WeGRXVnpkSE1nYVc0Z0p5QXJYRzRnSUNBZ0lDQW5ZMjl0Y0c5dVpXNTBWMmxzYkZWdWJXOTFiblFnZEc4Z2NISmxkbVZ1ZENCdFpXMXZjbmtnYkdWaGEzTXVKMXh1SUNBZ0lGMHNYRzRnSUNBZ2NtVndiR0ZqWlZCeWIzQnpPaUJiWEc0Z0lDQWdJQ0FuY21Wd2JHRmpaVkJ5YjNCekp5eGNiaUFnSUNBZ0lDZEpibk4wWldGa0xDQmpZV3hzSUZKbFlXTjBMbkpsYm1SbGNpQmhaMkZwYmlCaGRDQjBhR1VnZEc5d0lHeGxkbVZzTGlkY2JpQWdJQ0JkTEZ4dUlDQWdJSEpsY0d4aFkyVlRkR0YwWlRvZ1cxeHVJQ0FnSUNBZ0ozSmxjR3hoWTJWVGRHRjBaU2NzWEc0Z0lDQWdJQ0FuVW1WbVlXTjBiM0lnZVc5MWNpQmpiMlJsSUhSdklIVnpaU0J6WlhSVGRHRjBaU0JwYm5OMFpXRmtJQ2h6WldVZ0p5QXJYRzRnSUNBZ0lDQW5hSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMlpoWTJWaWIyOXJMM0psWVdOMEwybHpjM1ZsY3k4ek1qTTJLUzRuWEc0Z0lDQWdYU3hjYmlBZ0lDQnpaWFJRY205d2N6b2dXMXh1SUNBZ0lDQWdKM05sZEZCeWIzQnpKeXhjYmlBZ0lDQWdJQ2RKYm5OMFpXRmtMQ0JqWVd4c0lGSmxZV04wTG5KbGJtUmxjaUJoWjJGcGJpQmhkQ0IwYUdVZ2RHOXdJR3hsZG1Wc0xpZGNiaUFnSUNCZFhHNGdJSDA3WEc0Z0lIWmhjaUJrWldacGJtVkVaWEJ5WldOaGRHbHZibGRoY201cGJtY2dQU0JtZFc1amRHbHZiaWh0WlhSb2IyUk9ZVzFsTENCcGJtWnZLU0I3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaFNaV0ZqZEVOdmJYQnZibVZ1ZEM1d2NtOTBiM1I1Y0dVc0lHMWxkR2h2WkU1aGJXVXNJSHRjYmlBZ0lDQWdJQ0FnWjJWME9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNBZ0lHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKeVZ6S0M0dUxpa2dhWE1nWkdWd2NtVmpZWFJsWkNCcGJpQndiR0ZwYmlCS1lYWmhVMk55YVhCMElGSmxZV04wSUdOc1lYTnpaWE11SUNWekp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUdsdVptOWJNRjBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBibVp2V3pGZFhHNGdJQ0FnSUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0hncElIdGNiaUFnSUNBZ0lDOHZJRWxGSUhkcGJHd2dabUZwYkNCdmJpQmtaV1pwYm1WUWNtOXdaWEowZVNBb1pYTTFMWE5vYVcwdmMyaGhiU0IwYjI4cFhHNGdJQ0FnZlZ4dUlDQjlPMXh1SUNCbWIzSWdLSFpoY2lCbWJrNWhiV1VnYVc0Z1pHVndjbVZqWVhSbFpFRlFTWE1wSUh0Y2JpQWdJQ0JwWmlBb1pHVndjbVZqWVhSbFpFRlFTWE11YUdGelQzZHVVSEp2Y0dWeWRIa29abTVPWVcxbEtTa2dlMXh1SUNBZ0lDQWdaR1ZtYVc1bFJHVndjbVZqWVhScGIyNVhZWEp1YVc1bktHWnVUbUZ0WlN3Z1pHVndjbVZqWVhSbFpFRlFTWE5iWm01T1lXMWxYU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNTlYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkRiMjF3YjI1bGJuUTdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudFxuICovXG5cbi8qanNsaW50IGV2aWw6IHRydWUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RET01JRE9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9SZWFjdERPTUlET3BlcmF0aW9uc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcblxuLyoqXG4gKiBBYnN0cmFjdHMgYXdheSBhbGwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcmVjb25jaWxlciB0aGF0IHJlcXVpcmVzIGtub3dsZWRnZSBvZlxuICogdGhlIGJyb3dzZXIgY29udGV4dC4gVE9ETzogVGhlc2UgY2FsbGVycyBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byBhdm9pZCB0aGVcbiAqIG5lZWQgZm9yIHRoaXMgaW5qZWN0aW9uLlxuICovXG52YXIgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQgPSB7XG5cbiAgcHJvY2Vzc0NoaWxkcmVuVXBkYXRlczpcbiAgICBSZWFjdERPTUlET3BlcmF0aW9ucy5kYW5nZXJvdXNseVByb2Nlc3NDaGlsZHJlblVwZGF0ZXMsXG5cbiAgcmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDpcbiAgICBSZWFjdERPTUlET3BlcmF0aW9ucy5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQsXG5cbiAgLyoqXG4gICAqIElmIGEgcGFydGljdWxhciBlbnZpcm9ubWVudCByZXF1aXJlcyB0aGF0IHNvbWUgcmVzb3VyY2VzIGJlIGNsZWFuZWQgdXAsXG4gICAqIHNwZWNpZnkgdGhpcyBpbiB0aGUgaW5qZWN0ZWQgTWl4aW4uIEluIHRoZSBET00sIHdlIHdvdWxkIGxpa2VseSB3YW50IHRvXG4gICAqIHB1cmdlIGFueSBjYWNoZWQgbm9kZSBJRCBsb29rdXBzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdW5tb3VudElERnJvbUVudmlyb25tZW50OiBmdW5jdGlvbihyb290Tm9kZUlEKSB7XG4gICAgUmVhY3RNb3VudC5wdXJnZUlEKHJvb3ROb2RlSUQpO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQ7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBpbmplY3RlZCA9IGZhbHNlO1xuXG52YXIgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCA9IHtcblxuICAvKipcbiAgICogT3B0aW9uYWxseSBpbmplY3RhYmxlIGVudmlyb25tZW50IGRlcGVuZGVudCBjbGVhbnVwIGhvb2suIChzZXJ2ZXIgdnMuXG4gICAqIGJyb3dzZXIgZXRjKS4gRXhhbXBsZTogQSBicm93c2VyIHN5c3RlbSBjYWNoZXMgRE9NIG5vZGVzIGJhc2VkIG9uIGNvbXBvbmVudFxuICAgKiBJRCBhbmQgbXVzdCByZW1vdmUgdGhhdCBjYWNoZSBlbnRyeSB3aGVuIHRoaXMgaW5zdGFuY2UgaXMgdW5tb3VudGVkLlxuICAgKi9cbiAgdW5tb3VudElERnJvbUVudmlyb25tZW50OiBudWxsLFxuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGluamVjdGFibGUgaG9vayBmb3Igc3dhcHBpbmcgb3V0IG1vdW50IGltYWdlcyBpbiB0aGUgbWlkZGxlIG9mXG4gICAqIHRoZSB0cmVlLlxuICAgKi9cbiAgcmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDogbnVsbCxcblxuICAvKipcbiAgICogT3B0aW9uYWxseSBpbmplY3RhYmxlIGhvb2sgZm9yIHByb2Nlc3NpbmcgYSBxdWV1ZSBvZiBjaGlsZCB1cGRhdGVzLiBXaWxsXG4gICAqIGxhdGVyIG1vdmUgaW50byBNdWx0aUNoaWxkQ29tcG9uZW50cy5cbiAgICovXG4gIHByb2Nlc3NDaGlsZHJlblVwZGF0ZXM6IG51bGwsXG5cbiAgaW5qZWN0aW9uOiB7XG4gICAgaW5qZWN0RW52aXJvbm1lbnQ6IGZ1bmN0aW9uKGVudmlyb25tZW50KSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAhaW5qZWN0ZWQsXG4gICAgICAgICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudDogaW5qZWN0RW52aXJvbm1lbnQoKSBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4nXG4gICAgICApIDogaW52YXJpYW50KCFpbmplY3RlZCkpO1xuICAgICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC51bm1vdW50SURGcm9tRW52aXJvbm1lbnQgPVxuICAgICAgICBlbnZpcm9ubWVudC51bm1vdW50SURGcm9tRW52aXJvbm1lbnQ7XG4gICAgICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQgPVxuICAgICAgICBlbnZpcm9ubWVudC5yZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEO1xuICAgICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5wcm9jZXNzQ2hpbGRyZW5VcGRhdGVzID1cbiAgICAgICAgZW52aXJvbm1lbnQucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcztcbiAgICAgIGluamVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudEVudmlyb25tZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkRiMjF3YjI1bGJuUkZiblpwY205dWJXVnVkQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRRdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRU52YlhCdmJtVnVkRVZ1ZG1seWIyNXRaVzUwWEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzUyWVhJZ2FXNXFaV04wWldRZ1BTQm1ZV3h6WlR0Y2JseHVkbUZ5SUZKbFlXTjBRMjl0Y0c5dVpXNTBSVzUyYVhKdmJtMWxiblFnUFNCN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUU5d2RHbHZibUZzYkhrZ2FXNXFaV04wWVdKc1pTQmxiblpwY205dWJXVnVkQ0JrWlhCbGJtUmxiblFnWTJ4bFlXNTFjQ0JvYjI5ckxpQW9jMlZ5ZG1WeUlIWnpMbHh1SUNBZ0tpQmljbTkzYzJWeUlHVjBZeWt1SUVWNFlXMXdiR1U2SUVFZ1luSnZkM05sY2lCemVYTjBaVzBnWTJGamFHVnpJRVJQVFNCdWIyUmxjeUJpWVhObFpDQnZiaUJqYjIxd2IyNWxiblJjYmlBZ0lDb2dTVVFnWVc1a0lHMTFjM1FnY21WdGIzWmxJSFJvWVhRZ1kyRmphR1VnWlc1MGNua2dkMmhsYmlCMGFHbHpJR2x1YzNSaGJtTmxJR2x6SUhWdWJXOTFiblJsWkM1Y2JpQWdJQ292WEc0Z0lIVnViVzkxYm5SSlJFWnliMjFGYm5acGNtOXViV1Z1ZERvZ2JuVnNiQ3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUM0IwYVc5dVlXeHNlU0JwYm1wbFkzUmhZbXhsSUdodmIyc2dabTl5SUhOM1lYQndhVzVuSUc5MWRDQnRiM1Z1ZENCcGJXRm5aWE1nYVc0Z2RHaGxJRzFwWkdSc1pTQnZabHh1SUNBZ0tpQjBhR1VnZEhKbFpTNWNiaUFnSUNvdlhHNGdJSEpsY0d4aFkyVk9iMlJsVjJsMGFFMWhjbXQxY0VKNVNVUTZJRzUxYkd3c1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUU5d2RHbHZibUZzYkhrZ2FXNXFaV04wWVdKc1pTQm9iMjlySUdadmNpQndjbTlqWlhOemFXNW5JR0VnY1hWbGRXVWdiMllnWTJocGJHUWdkWEJrWVhSbGN5NGdWMmxzYkZ4dUlDQWdLaUJzWVhSbGNpQnRiM1psSUdsdWRHOGdUWFZzZEdsRGFHbHNaRU52YlhCdmJtVnVkSE11WEc0Z0lDQXFMMXh1SUNCd2NtOWpaWE56UTJocGJHUnlaVzVWY0dSaGRHVnpPaUJ1ZFd4c0xGeHVYRzRnSUdsdWFtVmpkR2x2YmpvZ2UxeHVJQ0FnSUdsdWFtVmpkRVZ1ZG1seWIyNXRaVzUwT2lCbWRXNWpkR2x2YmlobGJuWnBjbTl1YldWdWRDa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdJV2x1YW1WamRHVmtMRnh1SUNBZ0lDQWdJQ0FuVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUTZJR2x1YW1WamRFVnVkbWx5YjI1dFpXNTBLQ2tnWTJGdUlHOXViSGtnWW1VZ1kyRnNiR1ZrSUc5dVkyVXVKMXh1SUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENnaGFXNXFaV04wWldRcEtUdGNiaUFnSUNBZ0lGSmxZV04wUTI5dGNHOXVaVzUwUlc1MmFYSnZibTFsYm5RdWRXNXRiM1Z1ZEVsRVJuSnZiVVZ1ZG1seWIyNXRaVzUwSUQxY2JpQWdJQ0FnSUNBZ1pXNTJhWEp2Ym0xbGJuUXVkVzV0YjNWdWRFbEVSbkp2YlVWdWRtbHliMjV0Wlc1ME8xeHVJQ0FnSUNBZ1VtVmhZM1JEYjIxd2IyNWxiblJGYm5acGNtOXViV1Z1ZEM1eVpYQnNZV05sVG05a1pWZHBkR2hOWVhKcmRYQkNlVWxFSUQxY2JpQWdJQ0FnSUNBZ1pXNTJhWEp2Ym0xbGJuUXVjbVZ3YkdGalpVNXZaR1ZYYVhSb1RXRnlhM1Z3UW5sSlJEdGNiaUFnSUNBZ0lGSmxZV04wUTI5dGNHOXVaVzUwUlc1MmFYSnZibTFsYm5RdWNISnZZMlZ6YzBOb2FXeGtjbVZ1VlhCa1lYUmxjeUE5WEc0Z0lDQWdJQ0FnSUdWdWRtbHliMjV0Wlc1MExuQnliMk5sYzNORGFHbHNaSEpsYmxWd1pHRjBaWE03WEc0Z0lDQWdJQ0JwYm1wbFkzUmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkRiMjF3YjI1bGJuUkZiblpwY205dWJXVnVkRHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9uZW50RW52aXJvbm1lbnRcIik7XG52YXIgUmVhY3RDb250ZXh0ID0gcmVxdWlyZShcIi4vUmVhY3RDb250ZXh0XCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFZhbGlkYXRvclwiKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZU1hcFwiKTtcbnZhciBSZWFjdExpZmVDeWNsZSA9IHJlcXVpcmUoXCIuL1JlYWN0TGlmZUN5Y2xlXCIpO1xudmFyIFJlYWN0TmF0aXZlQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3ROYXRpdmVDb21wb25lbnRcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMgPSByZXF1aXJlKFwiLi9SZWFjdFByb3BUeXBlTG9jYXRpb25zXCIpO1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNcIik7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZShcIi4vUmVhY3RSZWNvbmNpbGVyXCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZW1wdHlPYmplY3QgPSByZXF1aXJlKFwiLi9lbXB0eU9iamVjdFwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9zaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKGNvbXBvbmVudCkge1xuICB2YXIgb3duZXIgPSBjb21wb25lbnQuX2N1cnJlbnRFbGVtZW50Ll9vd25lciB8fCBudWxsO1xuICBpZiAob3duZXIpIHtcbiAgICB2YXIgbmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLSBUaGUgTGlmZS1DeWNsZSBvZiBhIENvbXBvc2l0ZSBDb21wb25lbnQgLS0tLS0tLS0tLS0tLS0tLS0tXG4gKlxuICogLSBjb25zdHJ1Y3RvcjogSW5pdGlhbGl6YXRpb24gb2Ygc3RhdGUuIFRoZSBpbnN0YW5jZSBpcyBub3cgcmV0YWluZWQuXG4gKiAgIC0gY29tcG9uZW50V2lsbE1vdW50XG4gKiAgIC0gcmVuZGVyXG4gKiAgIC0gW2NoaWxkcmVuJ3MgY29uc3RydWN0b3JzXVxuICogICAgIC0gW2NoaWxkcmVuJ3MgY29tcG9uZW50V2lsbE1vdW50IGFuZCByZW5kZXJdXG4gKiAgICAgLSBbY2hpbGRyZW4ncyBjb21wb25lbnREaWRNb3VudF1cbiAqICAgICAtIGNvbXBvbmVudERpZE1vdW50XG4gKlxuICogICAgICAgVXBkYXRlIFBoYXNlczpcbiAqICAgICAgIC0gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAob25seSBjYWxsZWQgaWYgcGFyZW50IHVwZGF0ZWQpXG4gKiAgICAgICAtIHNob3VsZENvbXBvbmVudFVwZGF0ZVxuICogICAgICAgICAtIGNvbXBvbmVudFdpbGxVcGRhdGVcbiAqICAgICAgICAgICAtIHJlbmRlclxuICogICAgICAgICAgIC0gW2NoaWxkcmVuJ3MgY29uc3RydWN0b3JzIG9yIHJlY2VpdmUgcHJvcHMgcGhhc2VzXVxuICogICAgICAgICAtIGNvbXBvbmVudERpZFVwZGF0ZVxuICpcbiAqICAgICAtIGNvbXBvbmVudFdpbGxVbm1vdW50XG4gKiAgICAgLSBbY2hpbGRyZW4ncyBjb21wb25lbnRXaWxsVW5tb3VudF1cbiAqICAgLSBbY2hpbGRyZW4gZGVzdHJveWVkXVxuICogLSAoZGVzdHJveWVkKTogVGhlIGluc3RhbmNlIGlzIG5vdyBibGFuaywgcmVsZWFzZWQgYnkgUmVhY3QgYW5kIHJlYWR5IGZvciBHQy5cbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQW4gaW5jcmVtZW50aW5nIElEIGFzc2lnbmVkIHRvIGVhY2ggY29tcG9uZW50IHdoZW4gaXQgaXMgbW91bnRlZC4gVGhpcyBpc1xuICogdXNlZCB0byBlbmZvcmNlIHRoZSBvcmRlciBpbiB3aGljaCBgUmVhY3RVcGRhdGVzYCB1cGRhdGVzIGRpcnR5IGNvbXBvbmVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudmFyIG5leHRNb3VudElEID0gMTtcblxuLyoqXG4gKiBAbGVuZHMge1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50LnByb3RvdHlwZX1cbiAqL1xudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50TWl4aW4gPSB7XG5cbiAgLyoqXG4gICAqIEJhc2UgY29uc3RydWN0b3IgZm9yIGFsbCBjb21wb3NpdGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IG51bGw7XG4gICAgdGhpcy5faW5zdGFuY2UgPSBudWxsO1xuXG4gICAgLy8gU2VlIFJlYWN0VXBkYXRlUXVldWVcbiAgICB0aGlzLl9wZW5kaW5nRWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuX21vdW50T3JkZXIgPSAwO1xuICAgIHRoaXMuX2lzVG9wTGV2ZWwgPSBmYWxzZTtcblxuICAgIC8vIFNlZSBSZWFjdFVwZGF0ZXMgYW5kIFJlYWN0VXBkYXRlUXVldWUuXG4gICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrcyA9IG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIHJlbmRlcnMgbWFya3VwLCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IFJlbmRlcmVkIG1hcmt1cCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00uXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbihyb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5fbW91bnRPcmRlciA9IG5leHRNb3VudElEKys7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IHJvb3RJRDtcblxuICAgIHZhciBwdWJsaWNQcm9wcyA9IHRoaXMuX3Byb2Nlc3NQcm9wcyh0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyk7XG4gICAgdmFyIHB1YmxpY0NvbnRleHQgPSB0aGlzLl9wcm9jZXNzQ29udGV4dCh0aGlzLl9jdXJyZW50RWxlbWVudC5fY29udGV4dCk7XG5cbiAgICB2YXIgQ29tcG9uZW50ID0gUmVhY3ROYXRpdmVDb21wb25lbnQuZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50KFxuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnRcbiAgICApO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHVibGljIGNsYXNzXG4gICAgdmFyIGluc3QgPSBuZXcgQ29tcG9uZW50KHB1YmxpY1Byb3BzLCBwdWJsaWNDb250ZXh0KTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBsYXRlciBpbiBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50LCBidXQgYWRkIGFuIGVhcmx5XG4gICAgICAvLyB3YXJuaW5nIG5vdyB0byBoZWxwIGRlYnVnZ2luZ1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIGluc3QucmVuZGVyICE9IG51bGwsXG4gICAgICAgICclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICtcbiAgICAgICAgJ2luc3RhbmNlOiB5b3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGRlZmluZSBgcmVuZGVyYCBpbiB5b3VyICcgK1xuICAgICAgICAnY29tcG9uZW50IG9yIHlvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgdHJpZWQgdG8gcmVuZGVyIGFuIGVsZW1lbnQgJyArXG4gICAgICAgICd3aG9zZSB0eXBlIGlzIGEgZnVuY3Rpb24gdGhhdCBpc25cXCd0IGEgUmVhY3QgY29tcG9uZW50LicsXG4gICAgICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50J1xuICAgICAgKSA6IG51bGwpO1xuICAgIH1cblxuICAgIC8vIFRoZXNlIHNob3VsZCBiZSBzZXQgdXAgaW4gdGhlIGNvbnN0cnVjdG9yLCBidXQgYXMgYSBjb252ZW5pZW5jZSBmb3JcbiAgICAvLyBzaW1wbGVyIGNsYXNzIGFic3RyYWN0aW9ucywgd2Ugc2V0IHRoZW0gdXAgYWZ0ZXIgdGhlIGZhY3QuXG4gICAgaW5zdC5wcm9wcyA9IHB1YmxpY1Byb3BzO1xuICAgIGluc3QuY29udGV4dCA9IHB1YmxpY0NvbnRleHQ7XG4gICAgaW5zdC5yZWZzID0gZW1wdHlPYmplY3Q7XG5cbiAgICB0aGlzLl9pbnN0YW5jZSA9IGluc3Q7XG5cbiAgICAvLyBTdG9yZSBhIHJlZmVyZW5jZSBmcm9tIHRoZSBpbnN0YW5jZSBiYWNrIHRvIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvblxuICAgIFJlYWN0SW5zdGFuY2VNYXAuc2V0KGluc3QsIHRoaXMpO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdGhpcy5fd2FybklmQ29udGV4dHNEaWZmZXIodGhpcy5fY3VycmVudEVsZW1lbnQuX2NvbnRleHQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIC8vIFNpbmNlIHBsYWluIEpTIGNsYXNzZXMgYXJlIGRlZmluZWQgd2l0aG91dCBhbnkgc3BlY2lhbCBpbml0aWFsaXphdGlvblxuICAgICAgLy8gbG9naWMsIHdlIGNhbiBub3QgY2F0Y2ggY29tbW9uIGVycm9ycyBlYXJseS4gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvXG4gICAgICAvLyBjYXRjaCB0aGVtIGhlcmUsIGF0IGluaXRpYWxpemF0aW9uIHRpbWUsIGluc3RlYWQuXG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgIWluc3QuZ2V0SW5pdGlhbFN0YXRlIHx8XG4gICAgICAgIGluc3QuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkLFxuICAgICAgICAnZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgK1xuICAgICAgICAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICtcbiAgICAgICAgJ0RpZCB5b3UgbWVhbiB0byBkZWZpbmUgYSBzdGF0ZSBwcm9wZXJ0eSBpbnN0ZWFkPycsXG4gICAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAhaW5zdC5nZXREZWZhdWx0UHJvcHMgfHxcbiAgICAgICAgaW5zdC5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQsXG4gICAgICAgICdnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArXG4gICAgICAgICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgK1xuICAgICAgICAnVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC4nLFxuICAgICAgICB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgIWluc3QucHJvcFR5cGVzLFxuICAgICAgICAncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArXG4gICAgICAgICdwcm9wZXJ0eSB0byBkZWZpbmUgcHJvcFR5cGVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ2EgY29tcG9uZW50J1xuICAgICAgKSA6IG51bGwpO1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICFpbnN0LmNvbnRleHRUeXBlcyxcbiAgICAgICAgJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgJyArXG4gICAgICAgICdzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsXG4gICAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICB0eXBlb2YgaW5zdC5jb21wb25lbnRTaG91bGRVcGRhdGUgIT09ICdmdW5jdGlvbicsXG4gICAgICAgICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgK1xuICAgICAgICAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArXG4gICAgICAgICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArXG4gICAgICAgICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4nLFxuICAgICAgICAodGhpcy5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JylcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG5cbiAgICB2YXIgaW5pdGlhbFN0YXRlID0gaW5zdC5zdGF0ZTtcbiAgICBpZiAoaW5pdGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGluc3Quc3RhdGUgPSBpbml0aWFsU3RhdGUgPSBudWxsO1xuICAgIH1cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSxcbiAgICAgICclcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9yIG51bGwnLFxuICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50J1xuICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSkpO1xuXG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICAgIHZhciBjaGlsZENvbnRleHQ7XG4gICAgdmFyIHJlbmRlcmVkRWxlbWVudDtcblxuICAgIHZhciBwcmV2aW91c2x5TW91bnRpbmcgPSBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlNb3VudGluZ0luc3RhbmNlO1xuICAgIFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2UgPSB0aGlzO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaW5zdC5jb21wb25lbnRXaWxsTW91bnQpIHtcbiAgICAgICAgaW5zdC5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgICAgLy8gV2hlbiBtb3VudGluZywgY2FsbHMgdG8gYHNldFN0YXRlYCBieSBgY29tcG9uZW50V2lsbE1vdW50YCB3aWxsIHNldFxuICAgICAgICAvLyBgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWVgIHdpdGhvdXQgdHJpZ2dlcmluZyBhIHJlLXJlbmRlci5cbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlKSB7XG4gICAgICAgICAgaW5zdC5zdGF0ZSA9IHRoaXMuX3Byb2Nlc3NQZW5kaW5nU3RhdGUoaW5zdC5wcm9wcywgaW5zdC5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGlsZENvbnRleHQgPSB0aGlzLl9nZXRWYWxpZGF0ZWRDaGlsZENvbnRleHQoY29udGV4dCk7XG4gICAgICByZW5kZXJlZEVsZW1lbnQgPSB0aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoY2hpbGRDb250ZXh0KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5TW91bnRpbmdJbnN0YW5jZSA9IHByZXZpb3VzbHlNb3VudGluZztcbiAgICB9XG5cbiAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IHRoaXMuX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoXG4gICAgICByZW5kZXJlZEVsZW1lbnQsXG4gICAgICB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlIC8vIFRoZSB3cmFwcGluZyB0eXBlXG4gICAgKTtcblxuICAgIHZhciBtYXJrdXAgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21wb25lbnQoXG4gICAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCxcbiAgICAgIHJvb3RJRCxcbiAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgdGhpcy5fbWVyZ2VDaGlsZENvbnRleHQoY29udGV4dCwgY2hpbGRDb250ZXh0KVxuICAgICk7XG4gICAgaWYgKGluc3QuY29tcG9uZW50RGlkTW91bnQpIHtcbiAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoaW5zdC5jb21wb25lbnREaWRNb3VudCwgaW5zdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfSxcblxuICAvKipcbiAgICogUmVsZWFzZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgYG1vdW50Q29tcG9uZW50YC5cbiAgICpcbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIGlmIChpbnN0LmNvbXBvbmVudFdpbGxVbm1vdW50KSB7XG4gICAgICB2YXIgcHJldmlvdXNseVVubW91bnRpbmcgPSBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlVbm1vdW50aW5nSW5zdGFuY2U7XG4gICAgICBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlVbm1vdW50aW5nSW5zdGFuY2UgPSB0aGlzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5zdC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5VW5tb3VudGluZ0luc3RhbmNlID0gcHJldmlvdXNseVVubW91bnRpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQodGhpcy5fcmVuZGVyZWRDb21wb25lbnQpO1xuICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gbnVsbDtcblxuICAgIC8vIFJlc2V0IHBlbmRpbmcgZmllbGRzXG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgICAvLyBUaGVzZSBmaWVsZHMgZG8gbm90IHJlYWxseSBuZWVkIHRvIGJlIHJlc2V0IHNpbmNlIHRoaXMgb2JqZWN0IGlzIG5vXG4gICAgLy8gbG9uZ2VyIGFjY2Vzc2libGUuXG4gICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IG51bGw7XG5cbiAgICAvLyBEZWxldGUgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBpbnN0YW5jZSB0byB0aGlzIGludGVybmFsIHJlcHJlc2VudGF0aW9uXG4gICAgLy8gd2hpY2ggYWxsb3cgdGhlIGludGVybmFscyB0byBiZSBwcm9wZXJseSBjbGVhbmVkIHVwIGV2ZW4gaWYgdGhlIHVzZXJcbiAgICAvLyBsZWFrcyBhIHJlZmVyZW5jZSB0byB0aGUgcHVibGljIGluc3RhbmNlLlxuICAgIFJlYWN0SW5zdGFuY2VNYXAucmVtb3ZlKGluc3QpO1xuXG4gICAgLy8gU29tZSBleGlzdGluZyBjb21wb25lbnRzIHJlbHkgb24gaW5zdC5wcm9wcyBldmVuIGFmdGVyIHRoZXkndmUgYmVlblxuICAgIC8vIGRlc3Ryb3llZCAoaW4gZXZlbnQgaGFuZGxlcnMpLlxuICAgIC8vIFRPRE86IGluc3QucHJvcHMgPSBudWxsO1xuICAgIC8vIFRPRE86IGluc3Quc3RhdGUgPSBudWxsO1xuICAgIC8vIFRPRE86IGluc3QuY29udGV4dCA9IG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIGEgcGFydGlhbCB1cGRhdGUgdG8gdGhlIHByb3BzLiBPbmx5IHVzZWQgZm9yIGludGVybmFsIHRlc3RpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsUHJvcHMgU3Vic2V0IG9mIHRoZSBuZXh0IHByb3BzLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHByb3BzIGFyZSB1cGRhdGVkLlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfc2V0UHJvcHNJbnRlcm5hbDogZnVuY3Rpb24ocGFydGlhbFByb3BzLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgaXMgYSBkZW9wdGltaXplZCBwYXRoLiBXZSBvcHRpbWl6ZSBmb3IgYWx3YXlzIGhhdmluZyBhbiBlbGVtZW50LlxuICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBleHRyYSBpbnRlcm5hbCBlbGVtZW50LlxuICAgIHZhciBlbGVtZW50ID0gdGhpcy5fcGVuZGluZ0VsZW1lbnQgfHwgdGhpcy5fY3VycmVudEVsZW1lbnQ7XG4gICAgdGhpcy5fcGVuZGluZ0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlUHJvcHMoXG4gICAgICBlbGVtZW50LFxuICAgICAgYXNzaWduKHt9LCBlbGVtZW50LnByb3BzLCBwYXJ0aWFsUHJvcHMpXG4gICAgKTtcbiAgICBSZWFjdFVwZGF0ZXMuZW5xdWV1ZVVwZGF0ZSh0aGlzLCBjYWxsYmFjayk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgdGhlIGNvbnRleHQgb2JqZWN0IHRvIG9ubHkgY29udGFpbiBrZXlzIHNwZWNpZmllZCBpblxuICAgKiBgY29udGV4dFR5cGVzYFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21hc2tDb250ZXh0OiBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIG1hc2tlZENvbnRleHQgPSBudWxsO1xuICAgIC8vIFRoaXMgcmVhbGx5IHNob3VsZCBiZSBnZXR0aW5nIHRoZSBjb21wb25lbnQgY2xhc3MgZm9yIHRoZSBlbGVtZW50LFxuICAgIC8vIGJ1dCB3ZSBrbm93IHRoYXQgd2UncmUgbm90IGdvaW5nIHRvIG5lZWQgaXQgZm9yIGJ1aWx0LWlucy5cbiAgICBpZiAodHlwZW9mIHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZW1wdHlPYmplY3Q7XG4gICAgfVxuICAgIHZhciBjb250ZXh0VHlwZXMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLmNvbnRleHRUeXBlcztcbiAgICBpZiAoIWNvbnRleHRUeXBlcykge1xuICAgICAgcmV0dXJuIGVtcHR5T2JqZWN0O1xuICAgIH1cbiAgICBtYXNrZWRDb250ZXh0ID0ge307XG4gICAgZm9yICh2YXIgY29udGV4dE5hbWUgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBtYXNrZWRDb250ZXh0W2NvbnRleHROYW1lXSA9IGNvbnRleHRbY29udGV4dE5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gbWFza2VkQ29udGV4dDtcbiAgfSxcblxuICAvKipcbiAgICogRmlsdGVycyB0aGUgY29udGV4dCBvYmplY3QgdG8gb25seSBjb250YWluIGtleXMgc3BlY2lmaWVkIGluXG4gICAqIGBjb250ZXh0VHlwZXNgLCBhbmQgYXNzZXJ0cyB0aGF0IHRoZXkgYXJlIHZhbGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NDb250ZXh0OiBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIG1hc2tlZENvbnRleHQgPSB0aGlzLl9tYXNrQ29udGV4dChjb250ZXh0KTtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YXIgQ29tcG9uZW50ID0gUmVhY3ROYXRpdmVDb21wb25lbnQuZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50KFxuICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudFxuICAgICAgKTtcbiAgICAgIGlmIChDb21wb25lbnQuY29udGV4dFR5cGVzKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgIENvbXBvbmVudC5jb250ZXh0VHlwZXMsXG4gICAgICAgICAgbWFza2VkQ29udGV4dCxcbiAgICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLmNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hc2tlZENvbnRleHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjdXJyZW50Q29udGV4dFxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsaWRhdGVkQ2hpbGRDb250ZXh0OiBmdW5jdGlvbihjdXJyZW50Q29udGV4dCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgdmFyIGNoaWxkQ29udGV4dCA9IGluc3QuZ2V0Q2hpbGRDb250ZXh0ICYmIGluc3QuZ2V0Q2hpbGRDb250ZXh0KCk7XG4gICAgaWYgKGNoaWxkQ29udGV4dCkge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgdHlwZW9mIGluc3QuY29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMgPT09ICdvYmplY3QnLFxuICAgICAgICAnJXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGNoaWxkQ29udGV4dFR5cGVzIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byAnICtcbiAgICAgICAgJ3VzZSBnZXRDaGlsZENvbnRleHQoKS4nLFxuICAgICAgICB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnXG4gICAgICApIDogaW52YXJpYW50KHR5cGVvZiBpbnN0LmNvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzID09PSAnb2JqZWN0JykpO1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICB0aGlzLl9jaGVja1Byb3BUeXBlcyhcbiAgICAgICAgICBpbnN0LmNvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICAgIGNoaWxkQ29udGV4dCxcbiAgICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLmNoaWxkQ29udGV4dFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbmFtZSBpbiBjaGlsZENvbnRleHQpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICBuYW1lIGluIGluc3QuY29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMsXG4gICAgICAgICAgJyVzLmdldENoaWxkQ29udGV4dCgpOiBrZXkgXCIlc1wiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLicsXG4gICAgICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JyxcbiAgICAgICAgICBuYW1lXG4gICAgICAgICkgOiBpbnZhcmlhbnQobmFtZSBpbiBpbnN0LmNvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hpbGRDb250ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICBfbWVyZ2VDaGlsZENvbnRleHQ6IGZ1bmN0aW9uKGN1cnJlbnRDb250ZXh0LCBjaGlsZENvbnRleHQpIHtcbiAgICBpZiAoY2hpbGRDb250ZXh0KSB7XG4gICAgICByZXR1cm4gYXNzaWduKHt9LCBjdXJyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRDb250ZXh0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgcHJvcHMgYnkgc2V0dGluZyBkZWZhdWx0IHZhbHVlcyBmb3IgdW5zcGVjaWZpZWQgcHJvcHMgYW5kXG4gICAqIGFzc2VydGluZyB0aGF0IHRoZSBwcm9wcyBhcmUgdmFsaWQuIERvZXMgbm90IG11dGF0ZSBpdHMgYXJndW1lbnQ7IHJldHVybnNcbiAgICogYSBuZXcgcHJvcHMgb2JqZWN0IHdpdGggZGVmYXVsdHMgbWVyZ2VkIGluLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3UHJvcHNcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NQcm9wczogZnVuY3Rpb24obmV3UHJvcHMpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YXIgQ29tcG9uZW50ID0gUmVhY3ROYXRpdmVDb21wb25lbnQuZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50KFxuICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudFxuICAgICAgKTtcbiAgICAgIGlmIChDb21wb25lbnQucHJvcFR5cGVzKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgIENvbXBvbmVudC5wcm9wVHlwZXMsXG4gICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5wcm9wXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdQcm9wcztcbiAgfSxcblxuICAvKipcbiAgICogQXNzZXJ0IHRoYXQgdGhlIHByb3BzIGFyZSB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcFR5cGVzIE1hcCBvZiBwcm9wIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tQcm9wVHlwZXM6IGZ1bmN0aW9uKHByb3BUeXBlcywgcHJvcHMsIGxvY2F0aW9uKSB7XG4gICAgLy8gVE9ETzogU3RvcCB2YWxpZGF0aW5nIHByb3AgdHlwZXMgaGVyZSBhbmQgb25seSB1c2UgdGhlIGVsZW1lbnRcbiAgICAvLyB2YWxpZGF0aW9uLlxuICAgIHZhciBjb21wb25lbnROYW1lID0gdGhpcy5nZXROYW1lKCk7XG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gcHJvcFR5cGVzKSB7XG4gICAgICBpZiAocHJvcFR5cGVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgICB0eXBlb2YgcHJvcFR5cGVzW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSAnICtcbiAgICAgICAgICAgICdmcm9tIFJlYWN0LlByb3BUeXBlcy4nLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLFxuICAgICAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLFxuICAgICAgICAgICAgcHJvcE5hbWVcbiAgICAgICAgICApIDogaW52YXJpYW50KHR5cGVvZiBwcm9wVHlwZXNbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nKSk7XG4gICAgICAgICAgZXJyb3IgPSBwcm9wVHlwZXNbcHJvcE5hbWVdKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAvLyBXZSBtYXkgd2FudCB0byBleHRlbmQgdGhpcyBsb2dpYyBmb3Igc2ltaWxhciBlcnJvcnMgaW5cbiAgICAgICAgICAvLyBSZWFjdC5yZW5kZXIgY2FsbHMsIHNvIEknbSBhYnN0cmFjdGluZyBpdCBhd2F5IGludG9cbiAgICAgICAgICAvLyBhIGZ1bmN0aW9uIHRvIG1pbmltaXplIHJlZmFjdG9yaW5nIGluIHRoZSBmdXR1cmVcbiAgICAgICAgICB2YXIgYWRkZW5kdW0gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0odGhpcyk7XG5cbiAgICAgICAgICBpZiAobG9jYXRpb24gPT09IFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMucHJvcCkge1xuICAgICAgICAgICAgLy8gUHJlZmFjZSBnaXZlcyB1cyBzb21ldGhpbmcgdG8gYmxhY2tsaXN0IGluIHdhcm5pbmcgbW9kdWxlXG4gICAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICdGYWlsZWQgQ29tcG9zaXRlIHByb3BUeXBlOiAlcyVzJyxcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgYWRkZW5kdW1cbiAgICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnRmFpbGVkIENvbnRleHQgVHlwZXM6ICVzJXMnLFxuICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICBhZGRlbmR1bVxuICAgICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZWNlaXZlQ29tcG9uZW50OiBmdW5jdGlvbihuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIG5leHRDb250ZXh0KSB7XG4gICAgdmFyIHByZXZFbGVtZW50ID0gdGhpcy5fY3VycmVudEVsZW1lbnQ7XG4gICAgdmFyIHByZXZDb250ZXh0ID0gdGhpcy5fY29udGV4dDtcblxuICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50KFxuICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICBwcmV2RWxlbWVudCxcbiAgICAgIG5leHRFbGVtZW50LFxuICAgICAgcHJldkNvbnRleHQsXG4gICAgICBuZXh0Q29udGV4dFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIElmIGFueSBvZiBgX3BlbmRpbmdFbGVtZW50YCwgYF9wZW5kaW5nU3RhdGVRdWV1ZWAsIG9yIGBfcGVuZGluZ0ZvcmNlVXBkYXRlYFxuICAgKiBpcyBzZXQsIHVwZGF0ZSB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5jdGlvbih0cmFuc2FjdGlvbikge1xuICAgIGlmICh0aGlzLl9wZW5kaW5nRWxlbWVudCAhPSBudWxsKSB7XG4gICAgICBSZWFjdFJlY29uY2lsZXIucmVjZWl2ZUNvbXBvbmVudChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5fcGVuZGluZ0VsZW1lbnQgfHwgdGhpcy5fY3VycmVudEVsZW1lbnQsXG4gICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICB0aGlzLl9jb250ZXh0XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSAhPT0gbnVsbCB8fCB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNoZWNrQW5kV2FybkZvck11dGF0ZWRQcm9wcyhcbiAgICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudChcbiAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50LFxuICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudCxcbiAgICAgICAgdGhpcy5fY29udGV4dCxcbiAgICAgICAgdGhpcy5fY29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIGNvbnRleHRzLCB3YXJuaW5nIGlmIHRoZXkgYXJlIGRpZmZlcmVudFxuICAgKiBUT0RPOiBSZW1vdmUgdGhpcyBjaGVjayB3aGVuIG93bmVyLWNvbnRleHQgaXMgcmVtb3ZlZFxuICAgKi9cbiAgIF93YXJuSWZDb250ZXh0c0RpZmZlcjogZnVuY3Rpb24ob3duZXJCYXNlZENvbnRleHQsIHBhcmVudEJhc2VkQ29udGV4dCkge1xuICAgIG93bmVyQmFzZWRDb250ZXh0ID0gdGhpcy5fbWFza0NvbnRleHQob3duZXJCYXNlZENvbnRleHQpO1xuICAgIHBhcmVudEJhc2VkQ29udGV4dCA9IHRoaXMuX21hc2tDb250ZXh0KHBhcmVudEJhc2VkQ29udGV4dCk7XG4gICAgdmFyIHBhcmVudEtleXMgPSBPYmplY3Qua2V5cyhwYXJlbnRCYXNlZENvbnRleHQpLnNvcnQoKTtcbiAgICB2YXIgZGlzcGxheU5hbWUgPSB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50S2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhcmVudEtleXNbaV07XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgb3duZXJCYXNlZENvbnRleHRba2V5XSA9PT0gcGFyZW50QmFzZWRDb250ZXh0W2tleV0sXG4gICAgICAgICdvd25lci1iYXNlZCBhbmQgcGFyZW50LWJhc2VkIGNvbnRleHRzIGRpZmZlciAnICArXG4gICAgICAgICcodmFsdWVzOiBgJXNgIHZzIGAlc2ApIGZvciBrZXkgKCVzKSB3aGlsZSBtb3VudGluZyAlcyAnICtcbiAgICAgICAgJyhzZWU6IGh0dHA6Ly9mYi5tZS9yZWFjdC1jb250ZXh0LWJ5LXBhcmVudCknLFxuICAgICAgICBvd25lckJhc2VkQ29udGV4dFtrZXldLFxuICAgICAgICBwYXJlbnRCYXNlZENvbnRleHRba2V5XSxcbiAgICAgICAga2V5LFxuICAgICAgICBkaXNwbGF5TmFtZVxuICAgICAgKSA6IG51bGwpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogUGVyZm9ybSBhbiB1cGRhdGUgdG8gYSBtb3VudGVkIGNvbXBvbmVudC4gVGhlIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgYW5kXG4gICAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSBtZXRob2RzIGFyZSBjYWxsZWQsIHRoZW4gKGFzc3VtaW5nIHRoZSB1cGRhdGUgaXNuJ3RcbiAgICogc2tpcHBlZCkgdGhlIHJlbWFpbmluZyB1cGRhdGUgbGlmZWN5Y2xlIG1ldGhvZHMgYXJlIGNhbGxlZCBhbmQgdGhlIERPTVxuICAgKiByZXByZXNlbnRhdGlvbiBpcyB1cGRhdGVkLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIGltcGxlbWVudHMgUmVhY3QncyByZW5kZXJpbmcgYW5kIHJlY29uY2lsaWF0aW9uIGFsZ29yaXRobS5cbiAgICogU29waGlzdGljYXRlZCBjbGllbnRzIG1heSB3aXNoIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IHByZXZQYXJlbnRFbGVtZW50XG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0UGFyZW50RWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICogQG92ZXJyaWRhYmxlXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uKFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIHByZXZQYXJlbnRFbGVtZW50LFxuICAgIG5leHRQYXJlbnRFbGVtZW50LFxuICAgIHByZXZVbm1hc2tlZENvbnRleHQsXG4gICAgbmV4dFVubWFza2VkQ29udGV4dFxuICApIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuXG4gICAgdmFyIG5leHRDb250ZXh0ID0gaW5zdC5jb250ZXh0O1xuICAgIHZhciBuZXh0UHJvcHMgPSBpbnN0LnByb3BzO1xuXG4gICAgLy8gRGlzdGluZ3Vpc2ggYmV0d2VlbiBhIHByb3BzIHVwZGF0ZSB2ZXJzdXMgYSBzaW1wbGUgc3RhdGUgdXBkYXRlXG4gICAgaWYgKHByZXZQYXJlbnRFbGVtZW50ICE9PSBuZXh0UGFyZW50RWxlbWVudCkge1xuICAgICAgbmV4dENvbnRleHQgPSB0aGlzLl9wcm9jZXNzQ29udGV4dChuZXh0UGFyZW50RWxlbWVudC5fY29udGV4dCk7XG4gICAgICBuZXh0UHJvcHMgPSB0aGlzLl9wcm9jZXNzUHJvcHMobmV4dFBhcmVudEVsZW1lbnQucHJvcHMpO1xuXG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIGlmIChuZXh0VW5tYXNrZWRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl93YXJuSWZDb250ZXh0c0RpZmZlcihcbiAgICAgICAgICAgIG5leHRQYXJlbnRFbGVtZW50Ll9jb250ZXh0LFxuICAgICAgICAgICAgbmV4dFVubWFza2VkQ29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQW4gdXBkYXRlIGhlcmUgd2lsbCBzY2hlZHVsZSBhbiB1cGRhdGUgYnV0IGltbWVkaWF0ZWx5IHNldFxuICAgICAgLy8gX3BlbmRpbmdTdGF0ZVF1ZXVlIHdoaWNoIHdpbGwgZW5zdXJlIHRoYXQgYW55IHN0YXRlIHVwZGF0ZXMgZ2V0c1xuICAgICAgLy8gaW1tZWRpYXRlbHkgcmVjb25jaWxlZCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBuZXh0IGJhdGNoLlxuXG4gICAgICBpZiAoaW5zdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSB7XG4gICAgICAgIGluc3QuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV4dFN0YXRlID0gdGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShuZXh0UHJvcHMsIG5leHRDb250ZXh0KTtcblxuICAgIHZhciBzaG91bGRVcGRhdGUgPVxuICAgICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlIHx8XG4gICAgICAhaW5zdC5zaG91bGRDb21wb25lbnRVcGRhdGUgfHxcbiAgICAgIGluc3Quc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgdHlwZW9mIHNob3VsZFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgICAgICclcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSAnICtcbiAgICAgICAgJ2Jvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS4nLFxuICAgICAgICB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFsc2U7XG4gICAgICAvLyBXaWxsIHNldCBgdGhpcy5wcm9wc2AsIGB0aGlzLnN0YXRlYCBhbmQgYHRoaXMuY29udGV4dGAuXG4gICAgICB0aGlzLl9wZXJmb3JtQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICBuZXh0UGFyZW50RWxlbWVudCxcbiAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIG5leHRDb250ZXh0LFxuICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgbmV4dFVubWFza2VkQ29udGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgaXQncyBkZXRlcm1pbmVkIHRoYXQgYSBjb21wb25lbnQgc2hvdWxkIG5vdCB1cGRhdGUsIHdlIHN0aWxsIHdhbnRcbiAgICAgIC8vIHRvIHNldCBwcm9wcyBhbmQgc3RhdGUgYnV0IHdlIHNob3J0Y3V0IHRoZSByZXN0IG9mIHRoZSB1cGRhdGUuXG4gICAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IG5leHRQYXJlbnRFbGVtZW50O1xuICAgICAgdGhpcy5fY29udGV4dCA9IG5leHRVbm1hc2tlZENvbnRleHQ7XG4gICAgICBpbnN0LnByb3BzID0gbmV4dFByb3BzO1xuICAgICAgaW5zdC5zdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIGluc3QuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBfcHJvY2Vzc1BlbmRpbmdTdGF0ZTogZnVuY3Rpb24ocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciBxdWV1ZSA9IHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlO1xuICAgIHZhciByZXBsYWNlID0gdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZTtcbiAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuXG4gICAgaWYgKCFxdWV1ZSkge1xuICAgICAgcmV0dXJuIGluc3Quc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHJlcGxhY2UgJiYgcXVldWUubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gcXVldWVbMF07XG4gICAgfVxuXG4gICAgdmFyIG5leHRTdGF0ZSA9IGFzc2lnbih7fSwgcmVwbGFjZSA/IHF1ZXVlWzBdIDogaW5zdC5zdGF0ZSk7XG4gICAgZm9yICh2YXIgaSA9IHJlcGxhY2UgPyAxIDogMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFydGlhbCA9IHF1ZXVlW2ldO1xuICAgICAgYXNzaWduKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIHR5cGVvZiBwYXJ0aWFsID09PSAnZnVuY3Rpb24nID9cbiAgICAgICAgICBwYXJ0aWFsLmNhbGwoaW5zdCwgbmV4dFN0YXRlLCBwcm9wcywgY29udGV4dCkgOlxuICAgICAgICAgIHBhcnRpYWxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfSxcblxuICAvKipcbiAgICogTWVyZ2VzIG5ldyBwcm9wcyBhbmQgc3RhdGUsIG5vdGlmaWVzIGRlbGVnYXRlIG1ldGhvZHMgb2YgdXBkYXRlIGFuZFxuICAgKiBwZXJmb3JtcyB1cGRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBOZXh0IGVsZW1lbnRcbiAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcyBOZXh0IHB1YmxpYyBvYmplY3QgdG8gc2V0IGFzIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlIE5leHQgb2JqZWN0IHRvIHNldCBhcyBzdGF0ZS5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dCBOZXh0IHB1YmxpYyBvYmplY3QgdG8gc2V0IGFzIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHs/b2JqZWN0fSB1bm1hc2tlZENvbnRleHRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbihcbiAgICBuZXh0RWxlbWVudCxcbiAgICBuZXh0UHJvcHMsXG4gICAgbmV4dFN0YXRlLFxuICAgIG5leHRDb250ZXh0LFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIHVubWFza2VkQ29udGV4dFxuICApIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuXG4gICAgdmFyIHByZXZQcm9wcyA9IGluc3QucHJvcHM7XG4gICAgdmFyIHByZXZTdGF0ZSA9IGluc3Quc3RhdGU7XG4gICAgdmFyIHByZXZDb250ZXh0ID0gaW5zdC5jb250ZXh0O1xuXG4gICAgaWYgKGluc3QuY29tcG9uZW50V2lsbFVwZGF0ZSkge1xuICAgICAgaW5zdC5jb21wb25lbnRXaWxsVXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBuZXh0RWxlbWVudDtcbiAgICB0aGlzLl9jb250ZXh0ID0gdW5tYXNrZWRDb250ZXh0O1xuICAgIGluc3QucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgaW5zdC5zdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICBpbnN0LmNvbnRleHQgPSBuZXh0Q29udGV4dDtcblxuICAgIHRoaXMuX3VwZGF0ZVJlbmRlcmVkQ29tcG9uZW50KHRyYW5zYWN0aW9uLCB1bm1hc2tlZENvbnRleHQpO1xuXG4gICAgaWYgKGluc3QuY29tcG9uZW50RGlkVXBkYXRlKSB7XG4gICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKFxuICAgICAgICBpbnN0LmNvbXBvbmVudERpZFVwZGF0ZS5iaW5kKGluc3QsIHByZXZQcm9wcywgcHJldlN0YXRlLCBwcmV2Q29udGV4dCksXG4gICAgICAgIGluc3RcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBjb21wb25lbnQncyBgcmVuZGVyYCBtZXRob2QgYW5kIHVwZGF0ZSB0aGUgRE9NIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3VwZGF0ZVJlbmRlcmVkQ29tcG9uZW50OiBmdW5jdGlvbih0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBwcmV2Q29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLl9yZW5kZXJlZENvbXBvbmVudDtcbiAgICB2YXIgcHJldlJlbmRlcmVkRWxlbWVudCA9IHByZXZDb21wb25lbnRJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG4gICAgdmFyIGNoaWxkQ29udGV4dCA9IHRoaXMuX2dldFZhbGlkYXRlZENoaWxkQ29udGV4dCgpO1xuICAgIHZhciBuZXh0UmVuZGVyZWRFbGVtZW50ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KGNoaWxkQ29udGV4dCk7XG4gICAgaWYgKHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50KHByZXZSZW5kZXJlZEVsZW1lbnQsIG5leHRSZW5kZXJlZEVsZW1lbnQpKSB7XG4gICAgICBSZWFjdFJlY29uY2lsZXIucmVjZWl2ZUNvbXBvbmVudChcbiAgICAgICAgcHJldkNvbXBvbmVudEluc3RhbmNlLFxuICAgICAgICBuZXh0UmVuZGVyZWRFbGVtZW50LFxuICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgdGhpcy5fbWVyZ2VDaGlsZENvbnRleHQoY29udGV4dCwgY2hpbGRDb250ZXh0KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlc2UgdHdvIElEcyBhcmUgYWN0dWFsbHkgdGhlIHNhbWUhIEJ1dCBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoYXQuXG4gICAgICB2YXIgdGhpc0lEID0gdGhpcy5fcm9vdE5vZGVJRDtcbiAgICAgIHZhciBwcmV2Q29tcG9uZW50SUQgPSBwcmV2Q29tcG9uZW50SW5zdGFuY2UuX3Jvb3ROb2RlSUQ7XG4gICAgICBSZWFjdFJlY29uY2lsZXIudW5tb3VudENvbXBvbmVudChwcmV2Q29tcG9uZW50SW5zdGFuY2UpO1xuXG4gICAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IHRoaXMuX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoXG4gICAgICAgIG5leHRSZW5kZXJlZEVsZW1lbnQsXG4gICAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGVcbiAgICAgICk7XG4gICAgICB2YXIgbmV4dE1hcmt1cCA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChcbiAgICAgICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQsXG4gICAgICAgIHRoaXNJRCxcbiAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgIHRoaXMuX21lcmdlQ2hpbGRDb250ZXh0KGNvbnRleHQsIGNoaWxkQ29udGV4dClcbiAgICAgICk7XG4gICAgICB0aGlzLl9yZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEKHByZXZDb21wb25lbnRJRCwgbmV4dE1hcmt1cCk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBfcmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDogZnVuY3Rpb24ocHJldkNvbXBvbmVudElELCBuZXh0TWFya3VwKSB7XG4gICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5yZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEKFxuICAgICAgcHJldkNvbXBvbmVudElELFxuICAgICAgbmV4dE1hcmt1cFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgdmFyIHJlbmRlcmVkQ29tcG9uZW50ID0gaW5zdC5yZW5kZXIoKTtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC5cbiAgICAgIGlmICh0eXBlb2YgcmVuZGVyZWRDb21wb25lbnQgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgaW5zdC5yZW5kZXIuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmFkIHByYWN0aWNlLiBDb25zaWRlciB3YXJuaW5nIGhlcmUgYW5kXG4gICAgICAgIC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVuY2UuXG4gICAgICAgIHJlbmRlcmVkQ29tcG9uZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyZWRDb21wb25lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50OiBmdW5jdGlvbihjaGlsZENvbnRleHQpIHtcbiAgICB2YXIgcmVuZGVyZWRDb21wb25lbnQ7XG4gICAgdmFyIHByZXZpb3VzQ29udGV4dCA9IFJlYWN0Q29udGV4dC5jdXJyZW50O1xuICAgIFJlYWN0Q29udGV4dC5jdXJyZW50ID0gdGhpcy5fbWVyZ2VDaGlsZENvbnRleHQoXG4gICAgICB0aGlzLl9jdXJyZW50RWxlbWVudC5fY29udGV4dCxcbiAgICAgIGNoaWxkQ29udGV4dFxuICAgICk7XG4gICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IHRoaXM7XG4gICAgdHJ5IHtcbiAgICAgIHJlbmRlcmVkQ29tcG9uZW50ID1cbiAgICAgICAgdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0KCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q29udGV4dC5jdXJyZW50ID0gcHJldmlvdXNDb250ZXh0O1xuICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAvLyBUT0RPOiBBbiBgaXNWYWxpZE5vZGVgIGZ1bmN0aW9uIHdvdWxkIHByb2JhYmx5IGJlIG1vcmUgYXBwcm9wcmlhdGVcbiAgICAgIHJlbmRlcmVkQ29tcG9uZW50ID09PSBudWxsIHx8IHJlbmRlcmVkQ29tcG9uZW50ID09PSBmYWxzZSB8fFxuICAgICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHJlbmRlcmVkQ29tcG9uZW50KSxcbiAgICAgICclcy5yZW5kZXIoKTogQSB2YWxpZCBSZWFjdENvbXBvbmVudCBtdXN0IGJlIHJldHVybmVkLiBZb3UgbWF5IGhhdmUgJyArXG4gICAgICAgICdyZXR1cm5lZCB1bmRlZmluZWQsIGFuIGFycmF5IG9yIHNvbWUgb3RoZXIgaW52YWxpZCBvYmplY3QuJyxcbiAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdcbiAgICApIDogaW52YXJpYW50KC8vIFRPRE86IEFuIGBpc1ZhbGlkTm9kZWAgZnVuY3Rpb24gd291bGQgcHJvYmFibHkgYmUgbW9yZSBhcHByb3ByaWF0ZVxuICAgIHJlbmRlcmVkQ29tcG9uZW50ID09PSBudWxsIHx8IHJlbmRlcmVkQ29tcG9uZW50ID09PSBmYWxzZSB8fFxuICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChyZW5kZXJlZENvbXBvbmVudCkpKTtcbiAgICByZXR1cm4gcmVuZGVyZWRDb21wb25lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExhemlseSBhbGxvY2F0ZXMgdGhlIHJlZnMgb2JqZWN0IGFuZCBzdG9yZXMgYGNvbXBvbmVudGAgYXMgYHJlZmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWYgUmVmZXJlbmNlIG5hbWUuXG4gICAqIEBwYXJhbSB7Y29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRvIHN0b3JlIGFzIGByZWZgLlxuICAgKiBAZmluYWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGF0dGFjaFJlZjogZnVuY3Rpb24ocmVmLCBjb21wb25lbnQpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgICB2YXIgcmVmcyA9IGluc3QucmVmcyA9PT0gZW1wdHlPYmplY3QgPyAoaW5zdC5yZWZzID0ge30pIDogaW5zdC5yZWZzO1xuICAgIHJlZnNbcmVmXSA9IGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZXRhY2hlcyBhIHJlZmVyZW5jZSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgdG8gZGVyZWZlcmVuY2UuXG4gICAqIEBmaW5hbFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGV0YWNoUmVmOiBmdW5jdGlvbihyZWYpIHtcbiAgICB2YXIgcmVmcyA9IHRoaXMuZ2V0UHVibGljSW5zdGFuY2UoKS5yZWZzO1xuICAgIGRlbGV0ZSByZWZzW3JlZl07XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIHRleHQgZGVzY3JpcHRpb24gb2YgdGhlIGNvbXBvbmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGl0XG4gICAqIGluIGVycm9yIG1lc3NhZ2VzLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9yIG51bGwuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0TmFtZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHR5cGUgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHRoaXMuX2luc3RhbmNlICYmIHRoaXMuX2luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlLmRpc3BsYXlOYW1lIHx8IChjb25zdHJ1Y3RvciAmJiBjb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSkgfHxcbiAgICAgIHR5cGUubmFtZSB8fCAoY29uc3RydWN0b3IgJiYgY29uc3RydWN0b3IubmFtZSkgfHxcbiAgICAgIG51bGxcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBjb21wb25lbnQgLSBpLmUuIHdoYXRcbiAgICogaXMgZXhwb3NlZCBieSByZWZzIGFuZCByZXR1cm5lZCBieSBSZWFjdC5yZW5kZXIuIENhbiBiZSBudWxsIGZvciBzdGF0ZWxlc3NcbiAgICogY29tcG9uZW50cy5cbiAgICpcbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9IHRoZSBwdWJsaWMgY29tcG9uZW50IGluc3RhbmNlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFB1YmxpY0luc3RhbmNlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH0sXG5cbiAgLy8gU3R1YlxuICBfaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudDogbnVsbFxuXG59O1xuXG5SZWFjdFBlcmYubWVhc3VyZU1ldGhvZHMoXG4gIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50TWl4aW4sXG4gICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcsXG4gIHtcbiAgICBtb3VudENvbXBvbmVudDogJ21vdW50Q29tcG9uZW50JyxcbiAgICB1cGRhdGVDb21wb25lbnQ6ICd1cGRhdGVDb21wb25lbnQnLFxuICAgIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQ6ICdfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50J1xuICB9XG4pO1xuXG52YXIgUmVhY3RDb21wb3NpdGVDb21wb25lbnQgPSB7XG5cbiAgTWl4aW46IFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50TWl4aW5cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblF1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5SY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVOdmJYQnZibVZ1ZEVWdWRtbHliMjV0Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkRiMjF3YjI1bGJuUkZiblpwY205dWJXVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFTnZiblJsZUhRZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiblJsZUhSY0lpazdYRzUyWVhJZ1VtVmhZM1JEZFhKeVpXNTBUM2R1WlhJZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTjFjbkpsYm5SUGQyNWxjbHdpS1R0Y2JuWmhjaUJTWldGamRFVnNaVzFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFVnNaVzFsYm5SY0lpazdYRzUyWVhJZ1VtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlYQ0lwTzF4dWRtRnlJRkpsWVdOMFNXNXpkR0Z1WTJWTllYQWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRWx1YzNSaGJtTmxUV0Z3WENJcE8xeHVkbUZ5SUZKbFlXTjBUR2xtWlVONVkyeGxJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JNYVdabFEzbGpiR1ZjSWlrN1hHNTJZWElnVW1WaFkzUk9ZWFJwZG1WRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRkJsY21ZZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGQmxjbVpjSWlrN1hHNTJZWElnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJuTmNJaWs3WEc1MllYSWdVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1VG1GdFpYTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsYzF3aUtUdGNiblpoY2lCU1pXRmpkRkpsWTI5dVkybHNaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZKbFkyOXVZMmxzWlhKY0lpazdYRzUyWVhJZ1VtVmhZM1JWY0dSaGRHVnpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JWY0dSaGRHVnpYQ0lwTzF4dVhHNTJZWElnWVhOemFXZHVJRDBnY21WeGRXbHlaU2hjSWk0dlQySnFaV04wTG1GemMybG5ibHdpS1R0Y2JuWmhjaUJsYlhCMGVVOWlhbVZqZENBOUlISmxjWFZwY21Vb1hDSXVMMlZ0Y0hSNVQySnFaV04wWENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUJ6YUc5MWJHUlZjR1JoZEdWU1pXRmpkRU52YlhCdmJtVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwzTm9iM1ZzWkZWd1pHRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MFhDSXBPMXh1ZG1GeUlIZGhjbTVwYm1jZ1BTQnlaWEYxYVhKbEtGd2lMaTkzWVhKdWFXNW5YQ0lwTzF4dVhHNW1kVzVqZEdsdmJpQm5aWFJFWldOc1lYSmhkR2x2YmtWeWNtOXlRV1JrWlc1a2RXMG9ZMjl0Y0c5dVpXNTBLU0I3WEc0Z0lIWmhjaUJ2ZDI1bGNpQTlJR052YlhCdmJtVnVkQzVmWTNWeWNtVnVkRVZzWlcxbGJuUXVYMjkzYm1WeUlIeDhJRzUxYkd3N1hHNGdJR2xtSUNodmQyNWxjaWtnZTF4dUlDQWdJSFpoY2lCdVlXMWxJRDBnYjNkdVpYSXVaMlYwVG1GdFpTZ3BPMXh1SUNBZ0lHbG1JQ2h1WVcxbEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z0p5QkRhR1ZqYXlCMGFHVWdjbVZ1WkdWeUlHMWxkR2h2WkNCdlppQmdKeUFySUc1aGJXVWdLeUFuWUM0bk8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnSnljN1hHNTlYRzVjYmk4cUtseHVJQ29nTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0SUZSb1pTQk1hV1psTFVONVkyeGxJRzltSUdFZ1EyOXRjRzl6YVhSbElFTnZiWEJ2Ym1WdWRDQXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNiaUFxWEc0Z0tpQXRJR052Ym5OMGNuVmpkRzl5T2lCSmJtbDBhV0ZzYVhwaGRHbHZiaUJ2WmlCemRHRjBaUzRnVkdobElHbHVjM1JoYm1ObElHbHpJRzV2ZHlCeVpYUmhhVzVsWkM1Y2JpQXFJQ0FnTFNCamIyMXdiMjVsYm5SWGFXeHNUVzkxYm5SY2JpQXFJQ0FnTFNCeVpXNWtaWEpjYmlBcUlDQWdMU0JiWTJocGJHUnlaVzRuY3lCamIyNXpkSEoxWTNSdmNuTmRYRzRnS2lBZ0lDQWdMU0JiWTJocGJHUnlaVzRuY3lCamIyMXdiMjVsYm5SWGFXeHNUVzkxYm5RZ1lXNWtJSEpsYm1SbGNsMWNiaUFxSUNBZ0lDQXRJRnRqYUdsc1pISmxiaWR6SUdOdmJYQnZibVZ1ZEVScFpFMXZkVzUwWFZ4dUlDb2dJQ0FnSUMwZ1kyOXRjRzl1Wlc1MFJHbGtUVzkxYm5SY2JpQXFYRzRnS2lBZ0lDQWdJQ0JWY0dSaGRHVWdVR2hoYzJWek9seHVJQ29nSUNBZ0lDQWdMU0JqYjIxd2IyNWxiblJYYVd4c1VtVmpaV2wyWlZCeWIzQnpJQ2h2Ym14NUlHTmhiR3hsWkNCcFppQndZWEpsYm5RZ2RYQmtZWFJsWkNsY2JpQXFJQ0FnSUNBZ0lDMGdjMmh2ZFd4a1EyOXRjRzl1Wlc1MFZYQmtZWFJsWEc0Z0tpQWdJQ0FnSUNBZ0lDMGdZMjl0Y0c5dVpXNTBWMmxzYkZWd1pHRjBaVnh1SUNvZ0lDQWdJQ0FnSUNBZ0lDMGdjbVZ1WkdWeVhHNGdLaUFnSUNBZ0lDQWdJQ0FnTFNCYlkyaHBiR1J5Wlc0bmN5QmpiMjV6ZEhKMVkzUnZjbk1nYjNJZ2NtVmpaV2wyWlNCd2NtOXdjeUJ3YUdGelpYTmRYRzRnS2lBZ0lDQWdJQ0FnSUMwZ1kyOXRjRzl1Wlc1MFJHbGtWWEJrWVhSbFhHNGdLbHh1SUNvZ0lDQWdJQzBnWTI5dGNHOXVaVzUwVjJsc2JGVnViVzkxYm5SY2JpQXFJQ0FnSUNBdElGdGphR2xzWkhKbGJpZHpJR052YlhCdmJtVnVkRmRwYkd4VmJtMXZkVzUwWFZ4dUlDb2dJQ0F0SUZ0amFHbHNaSEpsYmlCa1pYTjBjbTk1WldSZFhHNGdLaUF0SUNoa1pYTjBjbTk1WldRcE9pQlVhR1VnYVc1emRHRnVZMlVnYVhNZ2JtOTNJR0pzWVc1ckxDQnlaV3hsWVhObFpDQmllU0JTWldGamRDQmhibVFnY21WaFpIa2dabTl5SUVkRExseHVJQ3BjYmlBcUlDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0WEc0Z0tpOWNibHh1THlvcVhHNGdLaUJCYmlCcGJtTnlaVzFsYm5ScGJtY2dTVVFnWVhOemFXZHVaV1FnZEc4Z1pXRmphQ0JqYjIxd2IyNWxiblFnZDJobGJpQnBkQ0JwY3lCdGIzVnVkR1ZrTGlCVWFHbHpJR2x6WEc0Z0tpQjFjMlZrSUhSdklHVnVabTl5WTJVZ2RHaGxJRzl5WkdWeUlHbHVJSGRvYVdOb0lHQlNaV0ZqZEZWd1pHRjBaWE5nSUhWd1pHRjBaWE1nWkdseWRIa2dZMjl0Y0c5dVpXNTBjeTVjYmlBcVhHNGdLaUJBY0hKcGRtRjBaVnh1SUNvdlhHNTJZWElnYm1WNGRFMXZkVzUwU1VRZ1BTQXhPMXh1WEc0dktpcGNiaUFxSUVCc1pXNWtjeUI3VW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUXVjSEp2ZEc5MGVYQmxmVnh1SUNvdlhHNTJZWElnVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUk5hWGhwYmlBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1FtRnpaU0JqYjI1emRISjFZM1J2Y2lCbWIzSWdZV3hzSUdOdmJYQnZjMmwwWlNCamIyMXdiMjVsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSRmJHVnRaVzUwZlNCbGJHVnRaVzUwWEc0Z0lDQXFJRUJtYVc1aGJGeHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHTnZibk4wY25WamREb2dablZ1WTNScGIyNG9aV3hsYldWdWRDa2dlMXh1SUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBJRDBnWld4bGJXVnVkRHRjYmlBZ0lDQjBhR2x6TGw5eWIyOTBUbTlrWlVsRUlEMGdiblZzYkR0Y2JpQWdJQ0IwYUdsekxsOXBibk4wWVc1alpTQTlJRzUxYkd3N1hHNWNiaUFnSUNBdkx5QlRaV1VnVW1WaFkzUlZjR1JoZEdWUmRXVjFaVnh1SUNBZ0lIUm9hWE11WDNCbGJtUnBibWRGYkdWdFpXNTBJRDBnYm5Wc2JEdGNiaUFnSUNCMGFHbHpMbDl3Wlc1a2FXNW5VM1JoZEdWUmRXVjFaU0E5SUc1MWJHdzdYRzRnSUNBZ2RHaHBjeTVmY0dWdVpHbHVaMUpsY0d4aFkyVlRkR0YwWlNBOUlHWmhiSE5sTzF4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kR2IzSmpaVlZ3WkdGMFpTQTlJR1poYkhObE8xeHVYRzRnSUNBZ2RHaHBjeTVmY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFNCdWRXeHNPMXh1WEc0Z0lDQWdkR2hwY3k1ZlkyOXVkR1Y0ZENBOUlHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1ZmJXOTFiblJQY21SbGNpQTlJREE3WEc0Z0lDQWdkR2hwY3k1ZmFYTlViM0JNWlhabGJDQTlJR1poYkhObE8xeHVYRzRnSUNBZ0x5OGdVMlZsSUZKbFlXTjBWWEJrWVhSbGN5QmhibVFnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVjYmlBZ0lDQjBhR2x6TGw5d1pXNWthVzVuUTJGc2JHSmhZMnR6SUQwZ2JuVnNiRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1NXNXBkR2xoYkdsNlpYTWdkR2hsSUdOdmJYQnZibVZ1ZEN3Z2NtVnVaR1Z5Y3lCdFlYSnJkWEFzSUdGdVpDQnlaV2RwYzNSbGNuTWdaWFpsYm5RZ2JHbHpkR1Z1WlhKekxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjbTl2ZEVsRUlFUlBUU0JKUkNCdlppQjBhR1VnY205dmRDQnViMlJsTGx4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNThVbVZoWTNSVFpYSjJaWEpTWlc1a1pYSnBibWRVY21GdWMyRmpkR2x2Ym4wZ2RISmhibk5oWTNScGIyNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1AzTjBjbWx1WjMwZ1VtVnVaR1Z5WldRZ2JXRnlhM1Z3SUhSdklHSmxJR2x1YzJWeWRHVmtJR2x1ZEc4Z2RHaGxJRVJQVFM1Y2JpQWdJQ29nUUdacGJtRnNYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdiVzkxYm5SRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtISnZiM1JKUkN3Z2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUXBJSHRjYmlBZ0lDQjBhR2x6TGw5amIyNTBaWGgwSUQwZ1kyOXVkR1Y0ZER0Y2JpQWdJQ0IwYUdsekxsOXRiM1Z1ZEU5eVpHVnlJRDBnYm1WNGRFMXZkVzUwU1VRckt6dGNiaUFnSUNCMGFHbHpMbDl5YjI5MFRtOWtaVWxFSUQwZ2NtOXZkRWxFTzF4dVhHNGdJQ0FnZG1GeUlIQjFZbXhwWTFCeWIzQnpJRDBnZEdocGN5NWZjSEp2WTJWemMxQnliM0J6S0hSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExuQnliM0J6S1R0Y2JpQWdJQ0IyWVhJZ2NIVmliR2xqUTI5dWRHVjRkQ0E5SUhSb2FYTXVYM0J5YjJObGMzTkRiMjUwWlhoMEtIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMbDlqYjI1MFpYaDBLVHRjYmx4dUlDQWdJSFpoY2lCRGIyMXdiMjVsYm5RZ1BTQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkQzVuWlhSRGIyMXdiMjVsYm5SRGJHRnpjMFp2Y2tWc1pXMWxiblFvWEc0Z0lDQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFJXeGxiV1Z1ZEZ4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0F2THlCSmJtbDBhV0ZzYVhwbElIUm9aU0J3ZFdKc2FXTWdZMnhoYzNOY2JpQWdJQ0IyWVhJZ2FXNXpkQ0E5SUc1bGR5QkRiMjF3YjI1bGJuUW9jSFZpYkdsalVISnZjSE1zSUhCMVlteHBZME52Ym5SbGVIUXBPMXh1WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdMeThnVkdocGN5QjNhV3hzSUhSb2NtOTNJR3hoZEdWeUlHbHVJRjl5Wlc1a1pYSldZV3hwWkdGMFpXUkRiMjF3YjI1bGJuUXNJR0oxZENCaFpHUWdZVzRnWldGeWJIbGNiaUFnSUNBZ0lDOHZJSGRoY201cGJtY2dibTkzSUhSdklHaGxiSEFnWkdWaWRXZG5hVzVuWEc0Z0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdhVzV6ZEM1eVpXNWtaWElnSVQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ0FnSnlWektDNHVMaWs2SUU1dklHQnlaVzVrWlhKZ0lHMWxkR2h2WkNCbWIzVnVaQ0J2YmlCMGFHVWdjbVYwZFhKdVpXUWdZMjl0Y0c5dVpXNTBJQ2NnSzF4dUlDQWdJQ0FnSUNBbmFXNXpkR0Z1WTJVNklIbHZkU0J0WVhrZ2FHRjJaU0JtYjNKbmIzUjBaVzRnZEc4Z1pHVm1hVzVsSUdCeVpXNWtaWEpnSUdsdUlIbHZkWElnSnlBclhHNGdJQ0FnSUNBZ0lDZGpiMjF3YjI1bGJuUWdiM0lnZVc5MUlHMWhlU0JvWVhabElHRmpZMmxrWlc1MFlXeHNlU0IwY21sbFpDQjBieUJ5Wlc1a1pYSWdZVzRnWld4bGJXVnVkQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0ozZG9iM05sSUhSNWNHVWdhWE1nWVNCbWRXNWpkR2x2YmlCMGFHRjBJR2x6Ymx4Y0ozUWdZU0JTWldGamRDQmpiMjF3YjI1bGJuUXVKeXhjYmlBZ0lDQWdJQ0FnUTI5dGNHOXVaVzUwTG1ScGMzQnNZWGxPWVcxbElIeDhJRU52YlhCdmJtVnVkQzV1WVcxbElIeDhJQ2REYjIxd2IyNWxiblFuWEc0Z0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnVkdobGMyVWdjMmh2ZFd4a0lHSmxJSE5sZENCMWNDQnBiaUIwYUdVZ1kyOXVjM1J5ZFdOMGIzSXNJR0oxZENCaGN5QmhJR052Ym5abGJtbGxibU5sSUdadmNseHVJQ0FnSUM4dklITnBiWEJzWlhJZ1kyeGhjM01nWVdKemRISmhZM1JwYjI1ekxDQjNaU0J6WlhRZ2RHaGxiU0IxY0NCaFpuUmxjaUIwYUdVZ1ptRmpkQzVjYmlBZ0lDQnBibk4wTG5CeWIzQnpJRDBnY0hWaWJHbGpVSEp2Y0hNN1hHNGdJQ0FnYVc1emRDNWpiMjUwWlhoMElEMGdjSFZpYkdsalEyOXVkR1Y0ZER0Y2JpQWdJQ0JwYm5OMExuSmxabk1nUFNCbGJYQjBlVTlpYW1WamREdGNibHh1SUNBZ0lIUm9hWE11WDJsdWMzUmhibU5sSUQwZ2FXNXpkRHRjYmx4dUlDQWdJQzh2SUZOMGIzSmxJR0VnY21WbVpYSmxibU5sSUdaeWIyMGdkR2hsSUdsdWMzUmhibU5sSUdKaFkyc2dkRzhnZEdobElHbHVkR1Z5Ym1Gc0lISmxjSEpsYzJWdWRHRjBhVzl1WEc0Z0lDQWdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDNXpaWFFvYVc1emRDd2dkR2hwY3lrN1hHNWNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbDkzWVhKdVNXWkRiMjUwWlhoMGMwUnBabVpsY2loMGFHbHpMbDlqZFhKeVpXNTBSV3hsYldWdWRDNWZZMjl1ZEdWNGRDd2dZMjl1ZEdWNGRDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0x5OGdVMmx1WTJVZ2NHeGhhVzRnU2xNZ1kyeGhjM05sY3lCaGNtVWdaR1ZtYVc1bFpDQjNhWFJvYjNWMElHRnVlU0J6Y0dWamFXRnNJR2x1YVhScFlXeHBlbUYwYVc5dVhHNGdJQ0FnSUNBdkx5QnNiMmRwWXl3Z2QyVWdZMkZ1SUc1dmRDQmpZWFJqYUNCamIyMXRiMjRnWlhKeWIzSnpJR1ZoY214NUxpQlVhR1Z5WldadmNtVXNJSGRsSUdoaGRtVWdkRzljYmlBZ0lDQWdJQzh2SUdOaGRHTm9JSFJvWlcwZ2FHVnlaU3dnWVhRZ2FXNXBkR2xoYkdsNllYUnBiMjRnZEdsdFpTd2dhVzV6ZEdWaFpDNWNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBaGFXNXpkQzVuWlhSSmJtbDBhV0ZzVTNSaGRHVWdmSHhjYmlBZ0lDQWdJQ0FnYVc1emRDNW5aWFJKYm1sMGFXRnNVM1JoZEdVdWFYTlNaV0ZqZEVOc1lYTnpRWEJ3Y205MlpXUXNYRzRnSUNBZ0lDQWdJQ2RuWlhSSmJtbDBhV0ZzVTNSaGRHVWdkMkZ6SUdSbFptbHVaV1FnYjI0Z0pYTXNJR0VnY0d4aGFXNGdTbUYyWVZOamNtbHdkQ0JqYkdGemN5NGdKeUFyWEc0Z0lDQWdJQ0FnSUNkVWFHbHpJR2x6SUc5dWJIa2djM1Z3Y0c5eWRHVmtJR1p2Y2lCamJHRnpjMlZ6SUdOeVpXRjBaV1FnZFhOcGJtY2dVbVZoWTNRdVkzSmxZWFJsUTJ4aGMzTXVJQ2NnSzF4dUlDQWdJQ0FnSUNBblJHbGtJSGx2ZFNCdFpXRnVJSFJ2SUdSbFptbHVaU0JoSUhOMFlYUmxJSEJ5YjNCbGNuUjVJR2x1YzNSbFlXUS9KeXhjYmlBZ0lDQWdJQ0FnZEdocGN5NW5aWFJPWVcxbEtDa2dmSHdnSjJFZ1kyOXRjRzl1Wlc1MEoxeHVJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUNGcGJuTjBMbWRsZEVSbFptRjFiSFJRY205d2N5QjhmRnh1SUNBZ0lDQWdJQ0JwYm5OMExtZGxkRVJsWm1GMWJIUlFjbTl3Y3k1cGMxSmxZV04wUTJ4aGMzTkJjSEJ5YjNabFpDeGNiaUFnSUNBZ0lDQWdKMmRsZEVSbFptRjFiSFJRY205d2N5QjNZWE1nWkdWbWFXNWxaQ0J2YmlBbGN5d2dZU0J3YkdGcGJpQktZWFpoVTJOeWFYQjBJR05zWVhOekxpQW5JQ3RjYmlBZ0lDQWdJQ0FnSjFSb2FYTWdhWE1nYjI1c2VTQnpkWEJ3YjNKMFpXUWdabTl5SUdOc1lYTnpaWE1nWTNKbFlYUmxaQ0IxYzJsdVp5QlNaV0ZqZEM1amNtVmhkR1ZEYkdGemN5NGdKeUFyWEc0Z0lDQWdJQ0FnSUNkVmMyVWdZU0J6ZEdGMGFXTWdjSEp2Y0dWeWRIa2dkRzhnWkdWbWFXNWxJR1JsWm1GMWJIUlFjbTl3Y3lCcGJuTjBaV0ZrTGljc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WjJWMFRtRnRaU2dwSUh4OElDZGhJR052YlhCdmJtVnVkQ2RjYmlBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWhhVzV6ZEM1d2NtOXdWSGx3WlhNc1hHNGdJQ0FnSUNBZ0lDZHdjbTl3Vkhsd1pYTWdkMkZ6SUdSbFptbHVaV1FnWVhNZ1lXNGdhVzV6ZEdGdVkyVWdjSEp2Y0dWeWRIa2diMjRnSlhNdUlGVnpaU0JoSUhOMFlYUnBZeUFuSUN0Y2JpQWdJQ0FnSUNBZ0ozQnliM0JsY25SNUlIUnZJR1JsWm1sdVpTQndjbTl3Vkhsd1pYTWdhVzV6ZEdWaFpDNG5MRnh1SUNBZ0lDQWdJQ0IwYUdsekxtZGxkRTVoYldVb0tTQjhmQ0FuWVNCamIyMXdiMjVsYm5RblhHNGdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSVdsdWMzUXVZMjl1ZEdWNGRGUjVjR1Z6TEZ4dUlDQWdJQ0FnSUNBblkyOXVkR1Y0ZEZSNWNHVnpJSGRoY3lCa1pXWnBibVZrSUdGeklHRnVJR2x1YzNSaGJtTmxJSEJ5YjNCbGNuUjVJRzl1SUNWekxpQlZjMlVnWVNBbklDdGNiaUFnSUNBZ0lDQWdKM04wWVhScFl5QndjbTl3WlhKMGVTQjBieUJrWldacGJtVWdZMjl1ZEdWNGRGUjVjR1Z6SUdsdWMzUmxZV1F1Snl4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVuWlhST1lXMWxLQ2tnZkh3Z0oyRWdZMjl0Y0c5dVpXNTBKMXh1SUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lIUjVjR1Z2WmlCcGJuTjBMbU52YlhCdmJtVnVkRk5vYjNWc1pGVndaR0YwWlNBaFBUMGdKMloxYm1OMGFXOXVKeXhjYmlBZ0lDQWdJQ0FnSnlWeklHaGhjeUJoSUcxbGRHaHZaQ0JqWVd4c1pXUWdKeUFyWEc0Z0lDQWdJQ0FnSUNkamIyMXdiMjVsYm5SVGFHOTFiR1JWY0dSaGRHVW9LUzRnUkdsa0lIbHZkU0J0WldGdUlITm9iM1ZzWkVOdmJYQnZibVZ1ZEZWd1pHRjBaU2dwUHlBbklDdGNiaUFnSUNBZ0lDQWdKMVJvWlNCdVlXMWxJR2x6SUhCb2NtRnpaV1FnWVhNZ1lTQnhkV1Z6ZEdsdmJpQmlaV05oZFhObElIUm9aU0JtZFc1amRHbHZiaUJwY3lBbklDdGNiaUFnSUNBZ0lDQWdKMlY0Y0dWamRHVmtJSFJ2SUhKbGRIVnliaUJoSUhaaGJIVmxMaWNzWEc0Z0lDQWdJQ0FnSUNoMGFHbHpMbWRsZEU1aGJXVW9LU0I4ZkNBblFTQmpiMjF3YjI1bGJuUW5LVnh1SUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJwYm1sMGFXRnNVM1JoZEdVZ1BTQnBibk4wTG5OMFlYUmxPMXh1SUNBZ0lHbG1JQ2hwYm1sMGFXRnNVM1JoZEdVZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnYVc1emRDNXpkR0YwWlNBOUlHbHVhWFJwWVd4VGRHRjBaU0E5SUc1MWJHdzdYRzRnSUNBZ2ZWeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0IwZVhCbGIyWWdhVzVwZEdsaGJGTjBZWFJsSUQwOVBTQW5iMkpxWldOMEp5QW1KaUFoUVhKeVlYa3VhWE5CY25KaGVTaHBibWwwYVdGc1UzUmhkR1VwTEZ4dUlDQWdJQ0FnSnlWekxuTjBZWFJsT2lCdGRYTjBJR0psSUhObGRDQjBieUJoYmlCdlltcGxZM1FnYjNJZ2JuVnNiQ2NzWEc0Z0lDQWdJQ0IwYUdsekxtZGxkRTVoYldVb0tTQjhmQ0FuVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUW5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2gwZVhCbGIyWWdhVzVwZEdsaGJGTjBZWFJsSUQwOVBTQW5iMkpxWldOMEp5QW1KaUFoUVhKeVlYa3VhWE5CY25KaGVTaHBibWwwYVdGc1UzUmhkR1VwS1NrN1hHNWNiaUFnSUNCMGFHbHpMbDl3Wlc1a2FXNW5VM1JoZEdWUmRXVjFaU0E5SUc1MWJHdzdYRzRnSUNBZ2RHaHBjeTVmY0dWdVpHbHVaMUpsY0d4aFkyVlRkR0YwWlNBOUlHWmhiSE5sTzF4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kR2IzSmpaVlZ3WkdGMFpTQTlJR1poYkhObE8xeHVYRzRnSUNBZ2RtRnlJR05vYVd4a1EyOXVkR1Y0ZER0Y2JpQWdJQ0IyWVhJZ2NtVnVaR1Z5WldSRmJHVnRaVzUwTzF4dVhHNGdJQ0FnZG1GeUlIQnlaWFpwYjNWemJIbE5iM1Z1ZEdsdVp5QTlJRkpsWVdOMFRHbG1aVU41WTJ4bExtTjFjbkpsYm5Sc2VVMXZkVzUwYVc1blNXNXpkR0Z1WTJVN1hHNGdJQ0FnVW1WaFkzUk1hV1psUTNsamJHVXVZM1Z5Y21WdWRHeDVUVzkxYm5ScGJtZEpibk4wWVc1alpTQTlJSFJvYVhNN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2hwYm5OMExtTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWRDa2dlMXh1SUNBZ0lDQWdJQ0JwYm5OMExtTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWRDZ3BPMXh1SUNBZ0lDQWdJQ0F2THlCWGFHVnVJRzF2ZFc1MGFXNW5MQ0JqWVd4c2N5QjBieUJnYzJWMFUzUmhkR1ZnSUdKNUlHQmpiMjF3YjI1bGJuUlhhV3hzVFc5MWJuUmdJSGRwYkd3Z2MyVjBYRzRnSUNBZ0lDQWdJQzh2SUdCMGFHbHpMbDl3Wlc1a2FXNW5VM1JoZEdWUmRXVjFaV0FnZDJsMGFHOTFkQ0IwY21sbloyVnlhVzVuSUdFZ2NtVXRjbVZ1WkdWeUxseHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NWZjR1Z1WkdsdVoxTjBZWFJsVVhWbGRXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCcGJuTjBMbk4wWVhSbElEMGdkR2hwY3k1ZmNISnZZMlZ6YzFCbGJtUnBibWRUZEdGMFpTaHBibk4wTG5CeWIzQnpMQ0JwYm5OMExtTnZiblJsZUhRcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR05vYVd4a1EyOXVkR1Y0ZENBOUlIUm9hWE11WDJkbGRGWmhiR2xrWVhSbFpFTm9hV3hrUTI5dWRHVjRkQ2hqYjI1MFpYaDBLVHRjYmlBZ0lDQWdJSEpsYm1SbGNtVmtSV3hsYldWdWRDQTlJSFJvYVhNdVgzSmxibVJsY2xaaGJHbGtZWFJsWkVOdmJYQnZibVZ1ZENoamFHbHNaRU52Ym5SbGVIUXBPMXh1SUNBZ0lIMGdabWx1WVd4c2VTQjdYRzRnSUNBZ0lDQlNaV0ZqZEV4cFptVkRlV05zWlM1amRYSnlaVzUwYkhsTmIzVnVkR2x1WjBsdWMzUmhibU5sSUQwZ2NISmxkbWx2ZFhOc2VVMXZkVzUwYVc1bk8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVYM0psYm1SbGNtVmtRMjl0Y0c5dVpXNTBJRDBnZEdocGN5NWZhVzV6ZEdGdWRHbGhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRDaGNiaUFnSUNBZ0lISmxibVJsY21Wa1JXeGxiV1Z1ZEN4Y2JpQWdJQ0FnSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExuUjVjR1VnTHk4Z1ZHaGxJSGR5WVhCd2FXNW5JSFI1Y0dWY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnZG1GeUlHMWhjbXQxY0NBOUlGSmxZV04wVW1WamIyNWphV3hsY2k1dGIzVnVkRU52YlhCdmJtVnVkQ2hjYmlBZ0lDQWdJSFJvYVhNdVgzSmxibVJsY21Wa1EyOXRjRzl1Wlc1MExGeHVJQ0FnSUNBZ2NtOXZkRWxFTEZ4dUlDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0c1hHNGdJQ0FnSUNCMGFHbHpMbDl0WlhKblpVTm9hV3hrUTI5dWRHVjRkQ2hqYjI1MFpYaDBMQ0JqYUdsc1pFTnZiblJsZUhRcFhHNGdJQ0FnS1R0Y2JpQWdJQ0JwWmlBb2FXNXpkQzVqYjIxd2IyNWxiblJFYVdSTmIzVnVkQ2tnZTF4dUlDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0dVoyVjBVbVZoWTNSTmIzVnVkRkpsWVdSNUtDa3VaVzV4ZFdWMVpTaHBibk4wTG1OdmJYQnZibVZ1ZEVScFpFMXZkVzUwTENCcGJuTjBLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2JXRnlhM1Z3TzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaV3hsWVhObGN5QmhibmtnY21WemIzVnlZMlZ6SUdGc2JHOWpZWFJsWkNCaWVTQmdiVzkxYm5SRGIyMXdiMjVsYm5SZ0xseHVJQ0FnS2x4dUlDQWdLaUJBWm1sdVlXeGNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQjFibTF2ZFc1MFEyOXRjRzl1Wlc1ME9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjJZWElnYVc1emRDQTlJSFJvYVhNdVgybHVjM1JoYm1ObE8xeHVYRzRnSUNBZ2FXWWdLR2x1YzNRdVkyOXRjRzl1Wlc1MFYybHNiRlZ1Ylc5MWJuUXBJSHRjYmlBZ0lDQWdJSFpoY2lCd2NtVjJhVzkxYzJ4NVZXNXRiM1Z1ZEdsdVp5QTlJRkpsWVdOMFRHbG1aVU41WTJ4bExtTjFjbkpsYm5Sc2VWVnViVzkxYm5ScGJtZEpibk4wWVc1alpUdGNiaUFnSUNBZ0lGSmxZV04wVEdsbVpVTjVZMnhsTG1OMWNuSmxiblJzZVZWdWJXOTFiblJwYm1kSmJuTjBZVzVqWlNBOUlIUm9hWE03WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnBibk4wTG1OdmJYQnZibVZ1ZEZkcGJHeFZibTF2ZFc1MEtDazdYRzRnSUNBZ0lDQjlJR1pwYm1Gc2JIa2dlMXh1SUNBZ0lDQWdJQ0JTWldGamRFeHBabVZEZVdOc1pTNWpkWEp5Wlc1MGJIbFZibTF2ZFc1MGFXNW5TVzV6ZEdGdVkyVWdQU0J3Y21WMmFXOTFjMng1Vlc1dGIzVnVkR2x1Wnp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JTWldGamRGSmxZMjl1WTJsc1pYSXVkVzV0YjNWdWRFTnZiWEJ2Ym1WdWRDaDBhR2x6TGw5eVpXNWtaWEpsWkVOdmJYQnZibVZ1ZENrN1hHNGdJQ0FnZEdocGN5NWZjbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUWdQU0J1ZFd4c08xeHVYRzRnSUNBZ0x5OGdVbVZ6WlhRZ2NHVnVaR2x1WnlCbWFXVnNaSE5jYmlBZ0lDQjBhR2x6TGw5d1pXNWthVzVuVTNSaGRHVlJkV1YxWlNBOUlHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1ZmNHVnVaR2x1WjFKbGNHeGhZMlZUZEdGMFpTQTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVYM0JsYm1ScGJtZEdiM0pqWlZWd1pHRjBaU0E5SUdaaGJITmxPMXh1SUNBZ0lIUm9hWE11WDNCbGJtUnBibWREWVd4c1ltRmphM01nUFNCdWRXeHNPMXh1SUNBZ0lIUm9hWE11WDNCbGJtUnBibWRGYkdWdFpXNTBJRDBnYm5Wc2JEdGNibHh1SUNBZ0lDOHZJRlJvWlhObElHWnBaV3hrY3lCa2J5QnViM1FnY21WaGJHeDVJRzVsWldRZ2RHOGdZbVVnY21WelpYUWdjMmx1WTJVZ2RHaHBjeUJ2WW1wbFkzUWdhWE1nYm05Y2JpQWdJQ0F2THlCc2IyNW5aWElnWVdOalpYTnphV0pzWlM1Y2JpQWdJQ0IwYUdsekxsOWpiMjUwWlhoMElEMGdiblZzYkR0Y2JpQWdJQ0IwYUdsekxsOXliMjkwVG05a1pVbEVJRDBnYm5Wc2JEdGNibHh1SUNBZ0lDOHZJRVJsYkdWMFpTQjBhR1VnY21WbVpYSmxibU5sSUdaeWIyMGdkR2hsSUdsdWMzUmhibU5sSUhSdklIUm9hWE1nYVc1MFpYSnVZV3dnY21Wd2NtVnpaVzUwWVhScGIyNWNiaUFnSUNBdkx5QjNhR2xqYUNCaGJHeHZkeUIwYUdVZ2FXNTBaWEp1WVd4eklIUnZJR0psSUhCeWIzQmxjbXg1SUdOc1pXRnVaV1FnZFhBZ1pYWmxiaUJwWmlCMGFHVWdkWE5sY2x4dUlDQWdJQzh2SUd4bFlXdHpJR0VnY21WbVpYSmxibU5sSUhSdklIUm9aU0J3ZFdKc2FXTWdhVzV6ZEdGdVkyVXVYRzRnSUNBZ1VtVmhZM1JKYm5OMFlXNWpaVTFoY0M1eVpXMXZkbVVvYVc1emRDazdYRzVjYmlBZ0lDQXZMeUJUYjIxbElHVjRhWE4wYVc1bklHTnZiWEJ2Ym1WdWRITWdjbVZzZVNCdmJpQnBibk4wTG5CeWIzQnpJR1YyWlc0Z1lXWjBaWElnZEdobGVTZDJaU0JpWldWdVhHNGdJQ0FnTHk4Z1pHVnpkSEp2ZVdWa0lDaHBiaUJsZG1WdWRDQm9ZVzVrYkdWeWN5a3VYRzRnSUNBZ0x5OGdWRTlFVHpvZ2FXNXpkQzV3Y205d2N5QTlJRzUxYkd3N1hHNGdJQ0FnTHk4Z1ZFOUVUem9nYVc1emRDNXpkR0YwWlNBOUlHNTFiR3c3WEc0Z0lDQWdMeThnVkU5RVR6b2dhVzV6ZEM1amIyNTBaWGgwSUQwZ2JuVnNiRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1UyTm9aV1IxYkdVZ1lTQndZWEowYVdGc0lIVndaR0YwWlNCMGJ5QjBhR1VnY0hKdmNITXVJRTl1YkhrZ2RYTmxaQ0JtYjNJZ2FXNTBaWEp1WVd3Z2RHVnpkR2x1Wnk1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlIQmhjblJwWVd4UWNtOXdjeUJUZFdKelpYUWdiMllnZEdobElHNWxlSFFnY0hKdmNITXVYRzRnSUNBcUlFQndZWEpoYlNCN1AyWjFibU4wYVc5dWZTQmpZV3hzWW1GamF5QkRZV3hzWldRZ1lXWjBaWElnY0hKdmNITWdZWEpsSUhWd1pHRjBaV1F1WEc0Z0lDQXFJRUJtYVc1aGJGeHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lGOXpaWFJRY205d2MwbHVkR1Z5Ym1Gc09pQm1kVzVqZEdsdmJpaHdZWEowYVdGc1VISnZjSE1zSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnTHk4Z1ZHaHBjeUJwY3lCaElHUmxiM0IwYVcxcGVtVmtJSEJoZEdndUlGZGxJRzl3ZEdsdGFYcGxJR1p2Y2lCaGJIZGhlWE1nYUdGMmFXNW5JR0Z1SUdWc1pXMWxiblF1WEc0Z0lDQWdMeThnVkdocGN5QmpjbVZoZEdWeklHRnVJR1Y0ZEhKaElHbHVkR1Z5Ym1Gc0lHVnNaVzFsYm5RdVhHNGdJQ0FnZG1GeUlHVnNaVzFsYm5RZ1BTQjBhR2x6TGw5d1pXNWthVzVuUld4bGJXVnVkQ0I4ZkNCMGFHbHpMbDlqZFhKeVpXNTBSV3hsYldWdWREdGNiaUFnSUNCMGFHbHpMbDl3Wlc1a2FXNW5SV3hsYldWdWRDQTlJRkpsWVdOMFJXeGxiV1Z1ZEM1amJHOXVaVUZ1WkZKbGNHeGhZMlZRY205d2N5aGNiaUFnSUNBZ0lHVnNaVzFsYm5Rc1hHNGdJQ0FnSUNCaGMzTnBaMjRvZTMwc0lHVnNaVzFsYm5RdWNISnZjSE1zSUhCaGNuUnBZV3hRY205d2N5bGNiaUFnSUNBcE8xeHVJQ0FnSUZKbFlXTjBWWEJrWVhSbGN5NWxibkYxWlhWbFZYQmtZWFJsS0hSb2FYTXNJR05oYkd4aVlXTnJLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1JtbHNkR1Z5Y3lCMGFHVWdZMjl1ZEdWNGRDQnZZbXBsWTNRZ2RHOGdiMjVzZVNCamIyNTBZV2x1SUd0bGVYTWdjM0JsWTJsbWFXVmtJR2x1WEc0Z0lDQXFJR0JqYjI1MFpYaDBWSGx3WlhOZ1hHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQmpiMjUwWlhoMFhHNGdJQ0FxSUVCeVpYUjFjbTRnZXo5dlltcGxZM1I5WEc0Z0lDQXFJRUJ3Y21sMllYUmxYRzRnSUNBcUwxeHVJQ0JmYldGemEwTnZiblJsZUhRNklHWjFibU4wYVc5dUtHTnZiblJsZUhRcElIdGNiaUFnSUNCMllYSWdiV0Z6YTJWa1EyOXVkR1Y0ZENBOUlHNTFiR3c3WEc0Z0lDQWdMeThnVkdocGN5QnlaV0ZzYkhrZ2MyaHZkV3hrSUdKbElHZGxkSFJwYm1jZ2RHaGxJR052YlhCdmJtVnVkQ0JqYkdGemN5Qm1iM0lnZEdobElHVnNaVzFsYm5Rc1hHNGdJQ0FnTHk4Z1luVjBJSGRsSUd0dWIzY2dkR2hoZENCM1pTZHlaU0J1YjNRZ1oyOXBibWNnZEc4Z2JtVmxaQ0JwZENCbWIzSWdZblZwYkhRdGFXNXpMbHh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdkR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1ZEhsd1pTQTlQVDBnSjNOMGNtbHVaeWNwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJsYlhCMGVVOWlhbVZqZER0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdOdmJuUmxlSFJVZVhCbGN5QTlJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTG5SNWNHVXVZMjl1ZEdWNGRGUjVjR1Z6TzF4dUlDQWdJR2xtSUNnaFkyOXVkR1Y0ZEZSNWNHVnpLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdaVzF3ZEhsUFltcGxZM1E3WEc0Z0lDQWdmVnh1SUNBZ0lHMWhjMnRsWkVOdmJuUmxlSFFnUFNCN2ZUdGNiaUFnSUNCbWIzSWdLSFpoY2lCamIyNTBaWGgwVG1GdFpTQnBiaUJqYjI1MFpYaDBWSGx3WlhNcElIdGNiaUFnSUNBZ0lHMWhjMnRsWkVOdmJuUmxlSFJiWTI5dWRHVjRkRTVoYldWZElEMGdZMjl1ZEdWNGRGdGpiMjUwWlhoMFRtRnRaVjA3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdFlYTnJaV1JEYjI1MFpYaDBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCR2FXeDBaWEp6SUhSb1pTQmpiMjUwWlhoMElHOWlhbVZqZENCMGJ5QnZibXg1SUdOdmJuUmhhVzRnYTJWNWN5QnpjR1ZqYVdacFpXUWdhVzVjYmlBZ0lDb2dZR052Ym5SbGVIUlVlWEJsYzJBc0lHRnVaQ0JoYzNObGNuUnpJSFJvWVhRZ2RHaGxlU0JoY21VZ2RtRnNhV1F1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCamIyNTBaWGgwWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlejl2WW1wbFkzUjlYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxTDF4dUlDQmZjSEp2WTJWemMwTnZiblJsZUhRNklHWjFibU4wYVc5dUtHTnZiblJsZUhRcElIdGNiaUFnSUNCMllYSWdiV0Z6YTJWa1EyOXVkR1Y0ZENBOUlIUm9hWE11WDIxaGMydERiMjUwWlhoMEtHTnZiblJsZUhRcE8xeHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUhaaGNpQkRiMjF3YjI1bGJuUWdQU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEM1blpYUkRiMjF3YjI1bGJuUkRiR0Z6YzBadmNrVnNaVzFsYm5Rb1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdhV1lnS0VOdmJYQnZibVZ1ZEM1amIyNTBaWGgwVkhsd1pYTXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWZZMmhsWTJ0UWNtOXdWSGx3WlhNb1hHNGdJQ0FnSUNBZ0lDQWdRMjl0Y0c5dVpXNTBMbU52Ym5SbGVIUlVlWEJsY3l4Y2JpQWdJQ0FnSUNBZ0lDQnRZWE5yWldSRGIyNTBaWGgwTEZ4dUlDQWdJQ0FnSUNBZ0lGSmxZV04wVUhKdmNGUjVjR1ZNYjJOaGRHbHZibk11WTI5dWRHVjRkRnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2JXRnphMlZrUTI5dWRHVjRkRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUdOMWNuSmxiblJEYjI1MFpYaDBYRzRnSUNBcUlFQnlaWFIxY200Z2UyOWlhbVZqZEgxY2JpQWdJQ29nUUhCeWFYWmhkR1ZjYmlBZ0lDb3ZYRzRnSUY5blpYUldZV3hwWkdGMFpXUkRhR2xzWkVOdmJuUmxlSFE2SUdaMWJtTjBhVzl1S0dOMWNuSmxiblJEYjI1MFpYaDBLU0I3WEc0Z0lDQWdkbUZ5SUdsdWMzUWdQU0IwYUdsekxsOXBibk4wWVc1alpUdGNiaUFnSUNCMllYSWdZMmhwYkdSRGIyNTBaWGgwSUQwZ2FXNXpkQzVuWlhSRGFHbHNaRU52Ym5SbGVIUWdKaVlnYVc1emRDNW5aWFJEYUdsc1pFTnZiblJsZUhRb0tUdGNiaUFnSUNCcFppQW9ZMmhwYkdSRGIyNTBaWGgwS1NCN1hHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSUNCMGVYQmxiMllnYVc1emRDNWpiMjV6ZEhKMVkzUnZjaTVqYUdsc1pFTnZiblJsZUhSVWVYQmxjeUE5UFQwZ0oyOWlhbVZqZENjc1hHNGdJQ0FnSUNBZ0lDY2xjeTVuWlhSRGFHbHNaRU52Ym5SbGVIUW9LVG9nWTJocGJHUkRiMjUwWlhoMFZIbHdaWE1nYlhWemRDQmlaU0JrWldacGJtVmtJR2x1SUc5eVpHVnlJSFJ2SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5kWE5sSUdkbGRFTm9hV3hrUTI5dWRHVjRkQ2dwTGljc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WjJWMFRtRnRaU2dwSUh4OElDZFNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZENkY2JpQWdJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9kSGx3Wlc5bUlHbHVjM1F1WTI5dWMzUnlkV04wYjNJdVkyaHBiR1JEYjI1MFpYaDBWSGx3WlhNZ1BUMDlJQ2R2WW1wbFkzUW5LU2s3WEc0Z0lDQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMk5vWldOclVISnZjRlI1Y0dWektGeHVJQ0FnSUNBZ0lDQWdJR2x1YzNRdVkyOXVjM1J5ZFdOMGIzSXVZMmhwYkdSRGIyNTBaWGgwVkhsd1pYTXNYRzRnSUNBZ0lDQWdJQ0FnWTJocGJHUkRiMjUwWlhoMExGeHVJQ0FnSUNBZ0lDQWdJRkpsWVdOMFVISnZjRlI1Y0dWTWIyTmhkR2x2Ym5NdVkyaHBiR1JEYjI1MFpYaDBYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJ1WVcxbElHbHVJR05vYVd4a1EyOXVkR1Y0ZENrZ2UxeHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQWdJRzVoYldVZ2FXNGdhVzV6ZEM1amIyNXpkSEoxWTNSdmNpNWphR2xzWkVOdmJuUmxlSFJVZVhCbGN5eGNiaUFnSUNBZ0lDQWdJQ0FuSlhNdVoyVjBRMmhwYkdSRGIyNTBaWGgwS0NrNklHdGxlU0JjSWlWelhDSWdhWE1nYm05MElHUmxabWx1WldRZ2FXNGdZMmhwYkdSRGIyNTBaWGgwVkhsd1pYTXVKeXhjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbWRsZEU1aGJXVW9LU0I4ZkNBblVtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblFuTEZ4dUlDQWdJQ0FnSUNBZ0lHNWhiV1ZjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHVZVzFsSUdsdUlHbHVjM1F1WTI5dWMzUnlkV04wYjNJdVkyaHBiR1JEYjI1MFpYaDBWSGx3WlhNcEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCamFHbHNaRU52Ym5SbGVIUTdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0I5TEZ4dVhHNGdJRjl0WlhKblpVTm9hV3hrUTI5dWRHVjRkRG9nWm5WdVkzUnBiMjRvWTNWeWNtVnVkRU52Ym5SbGVIUXNJR05vYVd4a1EyOXVkR1Y0ZENrZ2UxeHVJQ0FnSUdsbUlDaGphR2xzWkVOdmJuUmxlSFFwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJoYzNOcFoyNG9lMzBzSUdOMWNuSmxiblJEYjI1MFpYaDBMQ0JqYUdsc1pFTnZiblJsZUhRcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdZM1Z5Y21WdWRFTnZiblJsZUhRN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkJ5YjJObGMzTmxjeUJ3Y205d2N5QmllU0J6WlhSMGFXNW5JR1JsWm1GMWJIUWdkbUZzZFdWeklHWnZjaUIxYm5Od1pXTnBabWxsWkNCd2NtOXdjeUJoYm1SY2JpQWdJQ29nWVhOelpYSjBhVzVuSUhSb1lYUWdkR2hsSUhCeWIzQnpJR0Z5WlNCMllXeHBaQzRnUkc5bGN5QnViM1FnYlhWMFlYUmxJR2wwY3lCaGNtZDFiV1Z1ZERzZ2NtVjBkWEp1YzF4dUlDQWdLaUJoSUc1bGR5QndjbTl3Y3lCdlltcGxZM1FnZDJsMGFDQmtaV1poZFd4MGN5QnRaWEpuWldRZ2FXNHVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J1WlhkUWNtOXdjMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdHZZbXBsWTNSOVhHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFMMXh1SUNCZmNISnZZMlZ6YzFCeWIzQnpPaUJtZFc1amRHbHZiaWh1WlhkUWNtOXdjeWtnZTF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJSFpoY2lCRGIyMXdiMjVsYm5RZ1BTQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkQzVuWlhSRGIyMXdiMjVsYm5SRGJHRnpjMFp2Y2tWc1pXMWxiblFvWEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2FXWWdLRU52YlhCdmJtVnVkQzV3Y205d1ZIbHdaWE1wSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVmWTJobFkydFFjbTl3Vkhsd1pYTW9YRzRnSUNBZ0lDQWdJQ0FnUTI5dGNHOXVaVzUwTG5CeWIzQlVlWEJsY3l4Y2JpQWdJQ0FnSUNBZ0lDQnVaWGRRY205d2N5eGNiaUFnSUNBZ0lDQWdJQ0JTWldGamRGQnliM0JVZVhCbFRHOWpZWFJwYjI1ekxuQnliM0JjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHNWxkMUJ5YjNCek8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJCYzNObGNuUWdkR2hoZENCMGFHVWdjSEp2Y0hNZ1lYSmxJSFpoYkdsa1hHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQndjbTl3Vkhsd1pYTWdUV0Z3SUc5bUlIQnliM0FnYm1GdFpTQjBieUJoSUZKbFlXTjBVSEp2Y0ZSNWNHVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhCeWIzQnpYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCc2IyTmhkR2x2YmlCbExtY3VJRndpY0hKdmNGd2lMQ0JjSW1OdmJuUmxlSFJjSWl3Z1hDSmphR2xzWkNCamIyNTBaWGgwWENKY2JpQWdJQ29nUUhCeWFYWmhkR1ZjYmlBZ0lDb3ZYRzRnSUY5amFHVmphMUJ5YjNCVWVYQmxjem9nWm5WdVkzUnBiMjRvY0hKdmNGUjVjR1Z6TENCd2NtOXdjeXdnYkc5allYUnBiMjRwSUh0Y2JpQWdJQ0F2THlCVVQwUlBPaUJUZEc5d0lIWmhiR2xrWVhScGJtY2djSEp2Y0NCMGVYQmxjeUJvWlhKbElHRnVaQ0J2Ym14NUlIVnpaU0IwYUdVZ1pXeGxiV1Z1ZEZ4dUlDQWdJQzh2SUhaaGJHbGtZWFJwYjI0dVhHNGdJQ0FnZG1GeUlHTnZiWEJ2Ym1WdWRFNWhiV1VnUFNCMGFHbHpMbWRsZEU1aGJXVW9LVHRjYmlBZ0lDQm1iM0lnS0haaGNpQndjbTl3VG1GdFpTQnBiaUJ3Y205d1ZIbHdaWE1wSUh0Y2JpQWdJQ0FnSUdsbUlDaHdjbTl3Vkhsd1pYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRTVoYldVcEtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCbGNuSnZjanRjYmlBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCVWFHbHpJR2x6SUdsdWRHVnVkR2x2Ym1Gc2JIa2dZVzRnYVc1MllYSnBZVzUwSUhSb1lYUWdaMlYwY3lCallYVm5hSFF1SUVsMEozTWdkR2hsSUhOaGJXVmNiaUFnSUNBZ0lDQWdJQ0F2THlCaVpXaGhkbWx2Y2lCaGN5QjNhWFJvYjNWMElIUm9hWE1nYzNSaGRHVnRaVzUwSUdWNFkyVndkQ0IzYVhSb0lHRWdZbVYwZEdWeUlHMWxjM05oWjJVdVhHNGdJQ0FnSUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdJQ0FnSUhSNWNHVnZaaUJ3Y205d1ZIbHdaWE5iY0hKdmNFNWhiV1ZkSUQwOVBTQW5ablZ1WTNScGIyNG5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0p5VnpPaUFsY3lCMGVYQmxJR0FsYzJBZ2FYTWdhVzUyWVd4cFpEc2dhWFFnYlhWemRDQmlaU0JoSUdaMWJtTjBhVzl1TENCMWMzVmhiR3g1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSjJaeWIyMGdVbVZoWTNRdVVISnZjRlI1Y0dWekxpY3NYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiMjVsYm5ST1lXMWxJSHg4SUNkU1pXRmpkQ0JqYkdGemN5Y3NYRzRnSUNBZ0lDQWdJQ0FnSUNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsYzF0c2IyTmhkR2x2Ymwwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3Y205d1RtRnRaVnh1SUNBZ0lDQWdJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9kSGx3Wlc5bUlIQnliM0JVZVhCbGMxdHdjbTl3VG1GdFpWMGdQVDA5SUNkbWRXNWpkR2x2YmljcEtUdGNiaUFnSUNBZ0lDQWdJQ0JsY25KdmNpQTlJSEJ5YjNCVWVYQmxjMXR3Y205d1RtRnRaVjBvY0hKdmNITXNJSEJ5YjNCT1lXMWxMQ0JqYjIxd2IyNWxiblJPWVcxbExDQnNiMk5oZEdsdmJpazdYRzRnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1Y0S1NCN1hHNGdJQ0FnSUNBZ0lDQWdaWEp5YjNJZ1BTQmxlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCcFppQW9aWEp5YjNJZ2FXNXpkR0Z1WTJWdlppQkZjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUZkbElHMWhlU0IzWVc1MElIUnZJR1Y0ZEdWdVpDQjBhR2x6SUd4dloybGpJR1p2Y2lCemFXMXBiR0Z5SUdWeWNtOXljeUJwYmx4dUlDQWdJQ0FnSUNBZ0lDOHZJRkpsWVdOMExuSmxibVJsY2lCallXeHNjeXdnYzI4Z1NTZHRJR0ZpYzNSeVlXTjBhVzVuSUdsMElHRjNZWGtnYVc1MGIxeHVJQ0FnSUNBZ0lDQWdJQzh2SUdFZ1puVnVZM1JwYjI0Z2RHOGdiV2x1YVcxcGVtVWdjbVZtWVdOMGIzSnBibWNnYVc0Z2RHaGxJR1oxZEhWeVpWeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCaFpHUmxibVIxYlNBOUlHZGxkRVJsWTJ4aGNtRjBhVzl1UlhKeWIzSkJaR1JsYm1SMWJTaDBhR2x6S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJR2xtSUNoc2IyTmhkR2x2YmlBOVBUMGdVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1Y3k1d2NtOXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJRY21WbVlXTmxJR2RwZG1WeklIVnpJSE52YldWMGFHbHVaeUIwYnlCaWJHRmphMnhwYzNRZ2FXNGdkMkZ5Ym1sdVp5QnRiMlIxYkdWY2JpQWdJQ0FnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdKMFpoYVd4bFpDQkRiMjF3YjNOcGRHVWdjSEp2Y0ZSNWNHVTZJQ1Z6SlhNbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZjaTV0WlhOellXZGxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmhaR1JsYm1SMWJWeHVJQ0FnSUNBZ0lDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ2RHWVdsc1pXUWdRMjl1ZEdWNGRDQlVlWEJsY3pvZ0pYTWxjeWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR1Z5Y205eUxtMWxjM05oWjJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdGa1pHVnVaSFZ0WEc0Z0lDQWdJQ0FnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lISmxZMlZwZG1WRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtHNWxlSFJGYkdWdFpXNTBMQ0IwY21GdWMyRmpkR2x2Yml3Z2JtVjRkRU52Ym5SbGVIUXBJSHRjYmlBZ0lDQjJZWElnY0hKbGRrVnNaVzFsYm5RZ1BTQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQjJZWElnY0hKbGRrTnZiblJsZUhRZ1BTQjBhR2x6TGw5amIyNTBaWGgwTzF4dVhHNGdJQ0FnZEdocGN5NWZjR1Z1WkdsdVowVnNaVzFsYm5RZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnZEdocGN5NTFjR1JoZEdWRGIyMXdiMjVsYm5Rb1hHNGdJQ0FnSUNCMGNtRnVjMkZqZEdsdmJpeGNiaUFnSUNBZ0lIQnlaWFpGYkdWdFpXNTBMRnh1SUNBZ0lDQWdibVY0ZEVWc1pXMWxiblFzWEc0Z0lDQWdJQ0J3Y21WMlEyOXVkR1Y0ZEN4Y2JpQWdJQ0FnSUc1bGVIUkRiMjUwWlhoMFhHNGdJQ0FnS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTV1lnWVc1NUlHOW1JR0JmY0dWdVpHbHVaMFZzWlcxbGJuUmdMQ0JnWDNCbGJtUnBibWRUZEdGMFpWRjFaWFZsWUN3Z2IzSWdZRjl3Wlc1a2FXNW5SbTl5WTJWVmNHUmhkR1ZnWEc0Z0lDQXFJR2x6SUhObGRDd2dkWEJrWVhSbElIUm9aU0JqYjIxd2IyNWxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ym4wZ2RISmhibk5oWTNScGIyNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQndaWEptYjNKdFZYQmtZWFJsU1daT1pXTmxjM05oY25rNklHWjFibU4wYVc5dUtIUnlZVzV6WVdOMGFXOXVLU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYM0JsYm1ScGJtZEZiR1Z0Wlc1MElDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lGSmxZV04wVW1WamIyNWphV3hsY2k1eVpXTmxhWFpsUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnSUNCMGFHbHpMRnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXdaVzVrYVc1blJXeGxiV1Z1ZENCOGZDQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkQ3hjYmlBZ0lDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0c1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDJOdmJuUmxlSFJjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVYM0JsYm1ScGJtZFRkR0YwWlZGMVpYVmxJQ0U5UFNCdWRXeHNJSHg4SUhSb2FYTXVYM0JsYm1ScGJtZEdiM0pqWlZWd1pHRjBaU2tnZTF4dUlDQWdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnSUNCU1pXRmpkRVZzWlcxbGJuUldZV3hwWkdGMGIzSXVZMmhsWTJ0QmJtUlhZWEp1Um05eVRYVjBZWFJsWkZCeWIzQnpLRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJSFJvYVhNdWRYQmtZWFJsUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnSUNCMGNtRnVjMkZqZEdsdmJpeGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblFzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExGeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5amIyNTBaWGgwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbDlqYjI1MFpYaDBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTI5dGNHRnlaU0IwZDI4Z1kyOXVkR1Y0ZEhNc0lIZGhjbTVwYm1jZ2FXWWdkR2hsZVNCaGNtVWdaR2xtWm1WeVpXNTBYRzRnSUNBcUlGUlBSRTg2SUZKbGJXOTJaU0IwYUdseklHTm9aV05ySUhkb1pXNGdiM2R1WlhJdFkyOXVkR1Y0ZENCcGN5QnlaVzF2ZG1Wa1hHNGdJQ0FxTDF4dUlDQWdYM2RoY201SlprTnZiblJsZUhSelJHbG1abVZ5T2lCbWRXNWpkR2x2YmlodmQyNWxja0poYzJWa1EyOXVkR1Y0ZEN3Z2NHRnlaVzUwUW1GelpXUkRiMjUwWlhoMEtTQjdYRzRnSUNBZ2IzZHVaWEpDWVhObFpFTnZiblJsZUhRZ1BTQjBhR2x6TGw5dFlYTnJRMjl1ZEdWNGRDaHZkMjVsY2tKaGMyVmtRMjl1ZEdWNGRDazdYRzRnSUNBZ2NHRnlaVzUwUW1GelpXUkRiMjUwWlhoMElEMGdkR2hwY3k1ZmJXRnphME52Ym5SbGVIUW9jR0Z5Wlc1MFFtRnpaV1JEYjI1MFpYaDBLVHRjYmlBZ0lDQjJZWElnY0dGeVpXNTBTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSEJoY21WdWRFSmhjMlZrUTI5dWRHVjRkQ2t1YzI5eWRDZ3BPMXh1SUNBZ0lIWmhjaUJrYVhOd2JHRjVUbUZ0WlNBOUlIUm9hWE11WjJWMFRtRnRaU2dwSUh4OElDZFNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZENjN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCd1lYSmxiblJMWlhsekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2EyVjVJRDBnY0dGeVpXNTBTMlY1YzF0cFhUdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNCdmQyNWxja0poYzJWa1EyOXVkR1Y0ZEZ0clpYbGRJRDA5UFNCd1lYSmxiblJDWVhObFpFTnZiblJsZUhSYmEyVjVYU3hjYmlBZ0lDQWdJQ0FnSjI5M2JtVnlMV0poYzJWa0lHRnVaQ0J3WVhKbGJuUXRZbUZ6WldRZ1kyOXVkR1Y0ZEhNZ1pHbG1abVZ5SUNjZ0lDdGNiaUFnSUNBZ0lDQWdKeWgyWVd4MVpYTTZJR0FsYzJBZ2RuTWdZQ1Z6WUNrZ1ptOXlJR3RsZVNBb0pYTXBJSGRvYVd4bElHMXZkVzUwYVc1bklDVnpJQ2NnSzF4dUlDQWdJQ0FnSUNBbktITmxaVG9nYUhSMGNEb3ZMMlppTG0xbEwzSmxZV04wTFdOdmJuUmxlSFF0WW5rdGNHRnlaVzUwS1Njc1hHNGdJQ0FnSUNBZ0lHOTNibVZ5UW1GelpXUkRiMjUwWlhoMFcydGxlVjBzWEc0Z0lDQWdJQ0FnSUhCaGNtVnVkRUpoYzJWa1EyOXVkR1Y0ZEZ0clpYbGRMRnh1SUNBZ0lDQWdJQ0JyWlhrc1hHNGdJQ0FnSUNBZ0lHUnBjM0JzWVhsT1lXMWxYRzRnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJRWlhKbWIzSnRJR0Z1SUhWd1pHRjBaU0IwYnlCaElHMXZkVzUwWldRZ1kyOXRjRzl1Wlc1MExpQlVhR1VnWTI5dGNHOXVaVzUwVjJsc2JGSmxZMlZwZG1WUWNtOXdjeUJoYm1SY2JpQWdJQ29nYzJodmRXeGtRMjl0Y0c5dVpXNTBWWEJrWVhSbElHMWxkR2h2WkhNZ1lYSmxJR05oYkd4bFpDd2dkR2hsYmlBb1lYTnpkVzFwYm1jZ2RHaGxJSFZ3WkdGMFpTQnBjMjRuZEZ4dUlDQWdLaUJ6YTJsd2NHVmtLU0IwYUdVZ2NtVnRZV2x1YVc1bklIVndaR0YwWlNCc2FXWmxZM2xqYkdVZ2JXVjBhRzlrY3lCaGNtVWdZMkZzYkdWa0lHRnVaQ0IwYUdVZ1JFOU5YRzRnSUNBcUlISmxjSEpsYzJWdWRHRjBhVzl1SUdseklIVndaR0YwWldRdVhHNGdJQ0FxWEc0Z0lDQXFJRUo1SUdSbFptRjFiSFFzSUhSb2FYTWdhVzF3YkdWdFpXNTBjeUJTWldGamRDZHpJSEpsYm1SbGNtbHVaeUJoYm1RZ2NtVmpiMjVqYVd4cFlYUnBiMjRnWVd4bmIzSnBkR2h0TGx4dUlDQWdLaUJUYjNCb2FYTjBhV05oZEdWa0lHTnNhV1Z1ZEhNZ2JXRjVJSGRwYzJnZ2RHOGdiM1psY25KcFpHVWdkR2hwY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dWZTQjBjbUZ1YzJGamRHbHZibHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnY0hKbGRsQmhjbVZ1ZEVWc1pXMWxiblJjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUc1bGVIUlFZWEpsYm5SRmJHVnRaVzUwWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpQkFiM1psY25KcFpHRmliR1ZjYmlBZ0lDb3ZYRzRnSUhWd1pHRjBaVU52YlhCdmJtVnVkRG9nWm5WdVkzUnBiMjRvWEc0Z0lDQWdkSEpoYm5OaFkzUnBiMjRzWEc0Z0lDQWdjSEpsZGxCaGNtVnVkRVZzWlcxbGJuUXNYRzRnSUNBZ2JtVjRkRkJoY21WdWRFVnNaVzFsYm5Rc1hHNGdJQ0FnY0hKbGRsVnViV0Z6YTJWa1EyOXVkR1Y0ZEN4Y2JpQWdJQ0J1WlhoMFZXNXRZWE5yWldSRGIyNTBaWGgwWEc0Z0lDa2dlMXh1SUNBZ0lIWmhjaUJwYm5OMElEMGdkR2hwY3k1ZmFXNXpkR0Z1WTJVN1hHNWNiaUFnSUNCMllYSWdibVY0ZEVOdmJuUmxlSFFnUFNCcGJuTjBMbU52Ym5SbGVIUTdYRzRnSUNBZ2RtRnlJRzVsZUhSUWNtOXdjeUE5SUdsdWMzUXVjSEp2Y0hNN1hHNWNiaUFnSUNBdkx5QkVhWE4wYVc1bmRXbHphQ0JpWlhSM1pXVnVJR0VnY0hKdmNITWdkWEJrWVhSbElIWmxjbk4xY3lCaElITnBiWEJzWlNCemRHRjBaU0IxY0dSaGRHVmNiaUFnSUNCcFppQW9jSEpsZGxCaGNtVnVkRVZzWlcxbGJuUWdJVDA5SUc1bGVIUlFZWEpsYm5SRmJHVnRaVzUwS1NCN1hHNGdJQ0FnSUNCdVpYaDBRMjl1ZEdWNGRDQTlJSFJvYVhNdVgzQnliMk5sYzNORGIyNTBaWGgwS0c1bGVIUlFZWEpsYm5SRmJHVnRaVzUwTGw5amIyNTBaWGgwS1R0Y2JpQWdJQ0FnSUc1bGVIUlFjbTl3Y3lBOUlIUm9hWE11WDNCeWIyTmxjM05RY205d2N5aHVaWGgwVUdGeVpXNTBSV3hsYldWdWRDNXdjbTl3Y3lrN1hHNWNiaUFnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0c1bGVIUlZibTFoYzJ0bFpFTnZiblJsZUhRZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgzZGhjbTVKWmtOdmJuUmxlSFJ6UkdsbVptVnlLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRkJoY21WdWRFVnNaVzFsYm5RdVgyTnZiblJsZUhRc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMFZXNXRZWE5yWldSRGIyNTBaWGgwWEc0Z0lDQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0F2THlCQmJpQjFjR1JoZEdVZ2FHVnlaU0IzYVd4c0lITmphR1ZrZFd4bElHRnVJSFZ3WkdGMFpTQmlkWFFnYVcxdFpXUnBZWFJsYkhrZ2MyVjBYRzRnSUNBZ0lDQXZMeUJmY0dWdVpHbHVaMU4wWVhSbFVYVmxkV1VnZDJocFkyZ2dkMmxzYkNCbGJuTjFjbVVnZEdoaGRDQmhibmtnYzNSaGRHVWdkWEJrWVhSbGN5Qm5aWFJ6WEc0Z0lDQWdJQ0F2THlCcGJXMWxaR2xoZEdWc2VTQnlaV052Ym1OcGJHVmtJR2x1YzNSbFlXUWdiMllnZDJGcGRHbHVaeUJtYjNJZ2RHaGxJRzVsZUhRZ1ltRjBZMmd1WEc1Y2JpQWdJQ0FnSUdsbUlDaHBibk4wTG1OdmJYQnZibVZ1ZEZkcGJHeFNaV05sYVhabFVISnZjSE1wSUh0Y2JpQWdJQ0FnSUNBZ2FXNXpkQzVqYjIxd2IyNWxiblJYYVd4c1VtVmpaV2wyWlZCeWIzQnpLRzVsZUhSUWNtOXdjeXdnYm1WNGRFTnZiblJsZUhRcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUhaaGNpQnVaWGgwVTNSaGRHVWdQU0IwYUdsekxsOXdjbTlqWlhOelVHVnVaR2x1WjFOMFlYUmxLRzVsZUhSUWNtOXdjeXdnYm1WNGRFTnZiblJsZUhRcE8xeHVYRzRnSUNBZ2RtRnlJSE5vYjNWc1pGVndaR0YwWlNBOVhHNGdJQ0FnSUNCMGFHbHpMbDl3Wlc1a2FXNW5SbTl5WTJWVmNHUmhkR1VnZkh4Y2JpQWdJQ0FnSUNGcGJuTjBMbk5vYjNWc1pFTnZiWEJ2Ym1WdWRGVndaR0YwWlNCOGZGeHVJQ0FnSUNBZ2FXNXpkQzV6YUc5MWJHUkRiMjF3YjI1bGJuUlZjR1JoZEdVb2JtVjRkRkJ5YjNCekxDQnVaWGgwVTNSaGRHVXNJRzVsZUhSRGIyNTBaWGgwS1R0Y2JseHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0IwZVhCbGIyWWdjMmh2ZFd4a1ZYQmtZWFJsSUNFOVBTQW5kVzVrWldacGJtVmtKeXhjYmlBZ0lDQWdJQ0FnSnlWekxuTm9iM1ZzWkVOdmJYQnZibVZ1ZEZWd1pHRjBaU2dwT2lCU1pYUjFjbTVsWkNCMWJtUmxabWx1WldRZ2FXNXpkR1ZoWkNCdlppQmhJQ2NnSzF4dUlDQWdJQ0FnSUNBblltOXZiR1ZoYmlCMllXeDFaUzRnVFdGclpTQnpkWEpsSUhSdklISmxkSFZ5YmlCMGNuVmxJRzl5SUdaaGJITmxMaWNzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVaMlYwVG1GdFpTZ3BJSHg4SUNkU1pXRmpkRU52YlhCdmMybDBaVU52YlhCdmJtVnVkQ2RjYmlBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYzJodmRXeGtWWEJrWVhSbEtTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5d1pXNWthVzVuUm05eVkyVlZjR1JoZEdVZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUM4dklGZHBiR3dnYzJWMElHQjBhR2x6TG5CeWIzQnpZQ3dnWUhSb2FYTXVjM1JoZEdWZ0lHRnVaQ0JnZEdocGN5NWpiMjUwWlhoMFlDNWNiaUFnSUNBZ0lIUm9hWE11WDNCbGNtWnZjbTFEYjIxd2IyNWxiblJWY0dSaGRHVW9YRzRnSUNBZ0lDQWdJRzVsZUhSUVlYSmxiblJGYkdWdFpXNTBMRnh1SUNBZ0lDQWdJQ0J1WlhoMFVISnZjSE1zWEc0Z0lDQWdJQ0FnSUc1bGVIUlRkR0YwWlN4Y2JpQWdJQ0FnSUNBZ2JtVjRkRU52Ym5SbGVIUXNYRzRnSUNBZ0lDQWdJSFJ5WVc1ellXTjBhVzl1TEZ4dUlDQWdJQ0FnSUNCdVpYaDBWVzV0WVhOclpXUkRiMjUwWlhoMFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0F2THlCSlppQnBkQ2R6SUdSbGRHVnliV2x1WldRZ2RHaGhkQ0JoSUdOdmJYQnZibVZ1ZENCemFHOTFiR1FnYm05MElIVndaR0YwWlN3Z2QyVWdjM1JwYkd3Z2QyRnVkRnh1SUNBZ0lDQWdMeThnZEc4Z2MyVjBJSEJ5YjNCeklHRnVaQ0J6ZEdGMFpTQmlkWFFnZDJVZ2MyaHZjblJqZFhRZ2RHaGxJSEpsYzNRZ2IyWWdkR2hsSUhWd1pHRjBaUzVjYmlBZ0lDQWdJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwSUQwZ2JtVjRkRkJoY21WdWRFVnNaVzFsYm5RN1hHNGdJQ0FnSUNCMGFHbHpMbDlqYjI1MFpYaDBJRDBnYm1WNGRGVnViV0Z6YTJWa1EyOXVkR1Y0ZER0Y2JpQWdJQ0FnSUdsdWMzUXVjSEp2Y0hNZ1BTQnVaWGgwVUhKdmNITTdYRzRnSUNBZ0lDQnBibk4wTG5OMFlYUmxJRDBnYm1WNGRGTjBZWFJsTzF4dUlDQWdJQ0FnYVc1emRDNWpiMjUwWlhoMElEMGdibVY0ZEVOdmJuUmxlSFE3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUY5d2NtOWpaWE56VUdWdVpHbHVaMU4wWVhSbE9pQm1kVzVqZEdsdmJpaHdjbTl3Y3l3Z1kyOXVkR1Y0ZENrZ2UxeHVJQ0FnSUhaaGNpQnBibk4wSUQwZ2RHaHBjeTVmYVc1emRHRnVZMlU3WEc0Z0lDQWdkbUZ5SUhGMVpYVmxJRDBnZEdocGN5NWZjR1Z1WkdsdVoxTjBZWFJsVVhWbGRXVTdYRzRnSUNBZ2RtRnlJSEpsY0d4aFkyVWdQU0IwYUdsekxsOXdaVzVrYVc1blVtVndiR0ZqWlZOMFlYUmxPMXh1SUNBZ0lIUm9hWE11WDNCbGJtUnBibWRTWlhCc1lXTmxVM1JoZEdVZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0IwYUdsekxsOXdaVzVrYVc1blUzUmhkR1ZSZFdWMVpTQTlJRzUxYkd3N1hHNWNiaUFnSUNCcFppQW9JWEYxWlhWbEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2FXNXpkQzV6ZEdGMFpUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9jbVZ3YkdGalpTQW1KaUJ4ZFdWMVpTNXNaVzVuZEdnZ1BUMDlJREVwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ4ZFdWMVpWc3dYVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjJZWElnYm1WNGRGTjBZWFJsSUQwZ1lYTnphV2R1S0h0OUxDQnlaWEJzWVdObElEOGdjWFZsZFdWYk1GMGdPaUJwYm5OMExuTjBZWFJsS1R0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ2NtVndiR0ZqWlNBL0lERWdPaUF3T3lCcElEd2djWFZsZFdVdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJSFpoY2lCd1lYSjBhV0ZzSUQwZ2NYVmxkV1ZiYVYwN1hHNGdJQ0FnSUNCaGMzTnBaMjRvWEc0Z0lDQWdJQ0FnSUc1bGVIUlRkR0YwWlN4Y2JpQWdJQ0FnSUNBZ2RIbHdaVzltSUhCaGNuUnBZV3dnUFQwOUlDZG1kVzVqZEdsdmJpY2dQMXh1SUNBZ0lDQWdJQ0FnSUhCaGNuUnBZV3d1WTJGc2JDaHBibk4wTENCdVpYaDBVM1JoZEdVc0lIQnliM0J6TENCamIyNTBaWGgwS1NBNlhHNGdJQ0FnSUNBZ0lDQWdjR0Z5ZEdsaGJGeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnYm1WNGRGTjBZWFJsTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQk5aWEpuWlhNZ2JtVjNJSEJ5YjNCeklHRnVaQ0J6ZEdGMFpTd2dibTkwYVdacFpYTWdaR1ZzWldkaGRHVWdiV1YwYUc5a2N5QnZaaUIxY0dSaGRHVWdZVzVrWEc0Z0lDQXFJSEJsY21admNtMXpJSFZ3WkdGMFpTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHNWxlSFJGYkdWdFpXNTBJRTVsZUhRZ1pXeGxiV1Z1ZEZ4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdibVY0ZEZCeWIzQnpJRTVsZUhRZ2NIVmliR2xqSUc5aWFtVmpkQ0IwYnlCelpYUWdZWE1nY0hKdmNHVnlkR2xsY3k1Y2JpQWdJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0J1WlhoMFUzUmhkR1VnVG1WNGRDQnZZbXBsWTNRZ2RHOGdjMlYwSUdGeklITjBZWFJsTGx4dUlDQWdLaUJBY0dGeVlXMGdlejl2WW1wbFkzUjlJRzVsZUhSRGIyNTBaWGgwSUU1bGVIUWdjSFZpYkdsaklHOWlhbVZqZENCMGJ5QnpaWFFnWVhNZ1kyOXVkR1Y0ZEM1Y2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVmU0IwY21GdWMyRmpkR2x2Ymx4dUlDQWdLaUJBY0dGeVlXMGdlejl2WW1wbFkzUjlJSFZ1YldGemEyVmtRMjl1ZEdWNGRGeHVJQ0FnS2lCQWNISnBkbUYwWlZ4dUlDQWdLaTljYmlBZ1gzQmxjbVp2Y20xRGIyMXdiMjVsYm5SVmNHUmhkR1U2SUdaMWJtTjBhVzl1S0Z4dUlDQWdJRzVsZUhSRmJHVnRaVzUwTEZ4dUlDQWdJRzVsZUhSUWNtOXdjeXhjYmlBZ0lDQnVaWGgwVTNSaGRHVXNYRzRnSUNBZ2JtVjRkRU52Ym5SbGVIUXNYRzRnSUNBZ2RISmhibk5oWTNScGIyNHNYRzRnSUNBZ2RXNXRZWE5yWldSRGIyNTBaWGgwWEc0Z0lDa2dlMXh1SUNBZ0lIWmhjaUJwYm5OMElEMGdkR2hwY3k1ZmFXNXpkR0Z1WTJVN1hHNWNiaUFnSUNCMllYSWdjSEpsZGxCeWIzQnpJRDBnYVc1emRDNXdjbTl3Y3p0Y2JpQWdJQ0IyWVhJZ2NISmxkbE4wWVhSbElEMGdhVzV6ZEM1emRHRjBaVHRjYmlBZ0lDQjJZWElnY0hKbGRrTnZiblJsZUhRZ1BTQnBibk4wTG1OdmJuUmxlSFE3WEc1Y2JpQWdJQ0JwWmlBb2FXNXpkQzVqYjIxd2IyNWxiblJYYVd4c1ZYQmtZWFJsS1NCN1hHNGdJQ0FnSUNCcGJuTjBMbU52YlhCdmJtVnVkRmRwYkd4VmNHUmhkR1VvYm1WNGRGQnliM0J6TENCdVpYaDBVM1JoZEdVc0lHNWxlSFJEYjI1MFpYaDBLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkQ0E5SUc1bGVIUkZiR1Z0Wlc1ME8xeHVJQ0FnSUhSb2FYTXVYMk52Ym5SbGVIUWdQU0IxYm0xaGMydGxaRU52Ym5SbGVIUTdYRzRnSUNBZ2FXNXpkQzV3Y205d2N5QTlJRzVsZUhSUWNtOXdjenRjYmlBZ0lDQnBibk4wTG5OMFlYUmxJRDBnYm1WNGRGTjBZWFJsTzF4dUlDQWdJR2x1YzNRdVkyOXVkR1Y0ZENBOUlHNWxlSFJEYjI1MFpYaDBPMXh1WEc0Z0lDQWdkR2hwY3k1ZmRYQmtZWFJsVW1WdVpHVnlaV1JEYjIxd2IyNWxiblFvZEhKaGJuTmhZM1JwYjI0c0lIVnViV0Z6YTJWa1EyOXVkR1Y0ZENrN1hHNWNiaUFnSUNCcFppQW9hVzV6ZEM1amIyMXdiMjVsYm5SRWFXUlZjR1JoZEdVcElIdGNiaUFnSUNBZ0lIUnlZVzV6WVdOMGFXOXVMbWRsZEZKbFlXTjBUVzkxYm5SU1pXRmtlU2dwTG1WdWNYVmxkV1VvWEc0Z0lDQWdJQ0FnSUdsdWMzUXVZMjl0Y0c5dVpXNTBSR2xrVlhCa1lYUmxMbUpwYm1Rb2FXNXpkQ3dnY0hKbGRsQnliM0J6TENCd2NtVjJVM1JoZEdVc0lIQnlaWFpEYjI1MFpYaDBLU3hjYmlBZ0lDQWdJQ0FnYVc1emRGeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU5oYkd3Z2RHaGxJR052YlhCdmJtVnVkQ2R6SUdCeVpXNWtaWEpnSUcxbGRHaHZaQ0JoYm1RZ2RYQmtZWFJsSUhSb1pTQkVUMDBnWVdOamIzSmthVzVuYkhrdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JmZFhCa1lYUmxVbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLSFJ5WVc1ellXTjBhVzl1TENCamIyNTBaWGgwS1NCN1hHNGdJQ0FnZG1GeUlIQnlaWFpEYjIxd2IyNWxiblJKYm5OMFlXNWpaU0E5SUhSb2FYTXVYM0psYm1SbGNtVmtRMjl0Y0c5dVpXNTBPMXh1SUNBZ0lIWmhjaUJ3Y21WMlVtVnVaR1Z5WldSRmJHVnRaVzUwSUQwZ2NISmxka052YlhCdmJtVnVkRWx1YzNSaGJtTmxMbDlqZFhKeVpXNTBSV3hsYldWdWREdGNiaUFnSUNCMllYSWdZMmhwYkdSRGIyNTBaWGgwSUQwZ2RHaHBjeTVmWjJWMFZtRnNhV1JoZEdWa1EyaHBiR1JEYjI1MFpYaDBLQ2s3WEc0Z0lDQWdkbUZ5SUc1bGVIUlNaVzVrWlhKbFpFVnNaVzFsYm5RZ1BTQjBhR2x6TGw5eVpXNWtaWEpXWVd4cFpHRjBaV1JEYjIxd2IyNWxiblFvWTJocGJHUkRiMjUwWlhoMEtUdGNiaUFnSUNCcFppQW9jMmh2ZFd4a1ZYQmtZWFJsVW1WaFkzUkRiMjF3YjI1bGJuUW9jSEpsZGxKbGJtUmxjbVZrUld4bGJXVnVkQ3dnYm1WNGRGSmxibVJsY21Wa1JXeGxiV1Z1ZENrcElIdGNiaUFnSUNBZ0lGSmxZV04wVW1WamIyNWphV3hsY2k1eVpXTmxhWFpsUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnSUNCd2NtVjJRMjl0Y0c5dVpXNTBTVzV6ZEdGdVkyVXNYRzRnSUNBZ0lDQWdJRzVsZUhSU1pXNWtaWEpsWkVWc1pXMWxiblFzWEc0Z0lDQWdJQ0FnSUhSeVlXNXpZV04wYVc5dUxGeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5dFpYSm5aVU5vYVd4a1EyOXVkR1Y0ZENoamIyNTBaWGgwTENCamFHbHNaRU52Ym5SbGVIUXBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QlVhR1Z6WlNCMGQyOGdTVVJ6SUdGeVpTQmhZM1IxWVd4c2VTQjBhR1VnYzJGdFpTRWdRblYwSUc1dmRHaHBibWNnYzJodmRXeGtJSEpsYkhrZ2IyNGdkR2hoZEM1Y2JpQWdJQ0FnSUhaaGNpQjBhR2x6U1VRZ1BTQjBhR2x6TGw5eWIyOTBUbTlrWlVsRU8xeHVJQ0FnSUNBZ2RtRnlJSEJ5WlhaRGIyMXdiMjVsYm5SSlJDQTlJSEJ5WlhaRGIyMXdiMjVsYm5SSmJuTjBZVzVqWlM1ZmNtOXZkRTV2WkdWSlJEdGNiaUFnSUNBZ0lGSmxZV04wVW1WamIyNWphV3hsY2k1MWJtMXZkVzUwUTI5dGNHOXVaVzUwS0hCeVpYWkRiMjF3YjI1bGJuUkpibk4wWVc1alpTazdYRzVjYmlBZ0lDQWdJSFJvYVhNdVgzSmxibVJsY21Wa1EyOXRjRzl1Wlc1MElEMGdkR2hwY3k1ZmFXNXpkR0Z1ZEdsaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZENoY2JpQWdJQ0FnSUNBZ2JtVjRkRkpsYm1SbGNtVmtSV3hsYldWdWRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1ZEhsd1pWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIWmhjaUJ1WlhoMFRXRnlhM1Z3SUQwZ1VtVmhZM1JTWldOdmJtTnBiR1Z5TG0xdmRXNTBRMjl0Y0c5dVpXNTBLRnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXlaVzVrWlhKbFpFTnZiWEJ2Ym1WdWRDeGNiaUFnSUNBZ0lDQWdkR2hwYzBsRUxGeHVJQ0FnSUNBZ0lDQjBjbUZ1YzJGamRHbHZiaXhjYmlBZ0lDQWdJQ0FnZEdocGN5NWZiV1Z5WjJWRGFHbHNaRU52Ym5SbGVIUW9ZMjl1ZEdWNGRDd2dZMmhwYkdSRGIyNTBaWGgwS1Z4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUhSb2FYTXVYM0psY0d4aFkyVk9iMlJsVjJsMGFFMWhjbXQxY0VKNVNVUW9jSEpsZGtOdmJYQnZibVZ1ZEVsRUxDQnVaWGgwVFdGeWEzVndLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCd2NtOTBaV04wWldSY2JpQWdJQ292WEc0Z0lGOXlaWEJzWVdObFRtOWtaVmRwZEdoTllYSnJkWEJDZVVsRU9pQm1kVzVqZEdsdmJpaHdjbVYyUTI5dGNHOXVaVzUwU1VRc0lHNWxlSFJOWVhKcmRYQXBJSHRjYmlBZ0lDQlNaV0ZqZEVOdmJYQnZibVZ1ZEVWdWRtbHliMjV0Wlc1MExuSmxjR3hoWTJWT2IyUmxWMmwwYUUxaGNtdDFjRUo1U1VRb1hHNGdJQ0FnSUNCd2NtVjJRMjl0Y0c5dVpXNTBTVVFzWEc0Z0lDQWdJQ0J1WlhoMFRXRnlhM1Z3WEc0Z0lDQWdLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1FIQnliM1JsWTNSbFpGeHVJQ0FnS2k5Y2JpQWdYM0psYm1SbGNsWmhiR2xrWVhSbFpFTnZiWEJ2Ym1WdWRGZHBkR2h2ZFhSUGQyNWxjazl5UTI5dWRHVjRkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnZG1GeUlHbHVjM1FnUFNCMGFHbHpMbDlwYm5OMFlXNWpaVHRjYmlBZ0lDQjJZWElnY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFNCcGJuTjBMbkpsYm1SbGNpZ3BPMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDOHZJRmRsSUdGc2JHOTNJR0YxZEc4dGJXOWphM01nZEc4Z2NISnZZMlZsWkNCaGN5QnBaaUIwYUdWNUozSmxJSEpsZEhWeWJtbHVaeUJ1ZFd4c0xseHVJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnlaVzVrWlhKbFpFTnZiWEJ2Ym1WdWRDQTlQVDBnSjNWdVpHVm1hVzVsWkNjZ0ppWmNiaUFnSUNBZ0lDQWdJQ0JwYm5OMExuSmxibVJsY2k1ZmFYTk5iMk5yUm5WdVkzUnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdWR2hwY3lCcGN5QndjbTlpWVdKc2VTQmlZV1FnY0hKaFkzUnBZMlV1SUVOdmJuTnBaR1Z5SUhkaGNtNXBibWNnYUdWeVpTQmhibVJjYmlBZ0lDQWdJQ0FnTHk4Z1pHVndjbVZqWVhScGJtY2dkR2hwY3lCamIyNTJaVzVwWlc1alpTNWNiaUFnSUNBZ0lDQWdjbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJ5Wlc1a1pYSmxaRU52YlhCdmJtVnVkRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1FIQnlhWFpoZEdWY2JpQWdJQ292WEc0Z0lGOXlaVzVrWlhKV1lXeHBaR0YwWldSRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtHTm9hV3hrUTI5dWRHVjRkQ2tnZTF4dUlDQWdJSFpoY2lCeVpXNWtaWEpsWkVOdmJYQnZibVZ1ZER0Y2JpQWdJQ0IyWVhJZ2NISmxkbWx2ZFhORGIyNTBaWGgwSUQwZ1VtVmhZM1JEYjI1MFpYaDBMbU4xY25KbGJuUTdYRzRnSUNBZ1VtVmhZM1JEYjI1MFpYaDBMbU4xY25KbGJuUWdQU0IwYUdsekxsOXRaWEpuWlVOb2FXeGtRMjl1ZEdWNGRDaGNiaUFnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMbDlqYjI1MFpYaDBMRnh1SUNBZ0lDQWdZMmhwYkdSRGIyNTBaWGgwWEc0Z0lDQWdLVHRjYmlBZ0lDQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpNWpkWEp5Wlc1MElEMGdkR2hwY3p0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2NtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5eVpXNWtaWEpXWVd4cFpHRjBaV1JEYjIxd2IyNWxiblJYYVhSb2IzVjBUM2R1WlhKUGNrTnZiblJsZUhRb0tUdGNiaUFnSUNCOUlHWnBibUZzYkhrZ2UxeHVJQ0FnSUNBZ1VtVmhZM1JEYjI1MFpYaDBMbU4xY25KbGJuUWdQU0J3Y21WMmFXOTFjME52Ym5SbGVIUTdYRzRnSUNBZ0lDQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpNWpkWEp5Wlc1MElEMGdiblZzYkR0Y2JpQWdJQ0I5WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDOHZJRlJQUkU4NklFRnVJR0JwYzFaaGJHbGtUbTlrWldBZ1puVnVZM1JwYjI0Z2QyOTFiR1FnY0hKdlltRmliSGtnWW1VZ2JXOXlaU0JoY0hCeWIzQnlhV0YwWlZ4dUlDQWdJQ0FnY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFQwOUlHNTFiR3dnZkh3Z2NtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BUMDlJR1poYkhObElIeDhYRzRnSUNBZ0lDQlNaV0ZqZEVWc1pXMWxiblF1YVhOV1lXeHBaRVZzWlcxbGJuUW9jbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUXBMRnh1SUNBZ0lDQWdKeVZ6TG5KbGJtUmxjaWdwT2lCQklIWmhiR2xrSUZKbFlXTjBRMjl0Y0c5dVpXNTBJRzExYzNRZ1ltVWdjbVYwZFhKdVpXUXVJRmx2ZFNCdFlYa2dhR0YyWlNBbklDdGNiaUFnSUNBZ0lDQWdKM0psZEhWeWJtVmtJSFZ1WkdWbWFXNWxaQ3dnWVc0Z1lYSnlZWGtnYjNJZ2MyOXRaU0J2ZEdobGNpQnBiblpoYkdsa0lHOWlhbVZqZEM0bkxGeHVJQ0FnSUNBZ2RHaHBjeTVuWlhST1lXMWxLQ2tnZkh3Z0oxSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwSjF4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0x5OGdWRTlFVHpvZ1FXNGdZR2x6Vm1Gc2FXUk9iMlJsWUNCbWRXNWpkR2x2YmlCM2IzVnNaQ0J3Y205aVlXSnNlU0JpWlNCdGIzSmxJR0Z3Y0hKdmNISnBZWFJsWEc0Z0lDQWdjbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUWdQVDA5SUc1MWJHd2dmSHdnY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFQwOUlHWmhiSE5sSUh4OFhHNGdJQ0FnVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0hKbGJtUmxjbVZrUTI5dGNHOXVaVzUwS1NrcE8xeHVJQ0FnSUhKbGRIVnliaUJ5Wlc1a1pYSmxaRU52YlhCdmJtVnVkRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RHRjZhV3g1SUdGc2JHOWpZWFJsY3lCMGFHVWdjbVZtY3lCdlltcGxZM1FnWVc1a0lITjBiM0psY3lCZ1kyOXRjRzl1Wlc1MFlDQmhjeUJnY21WbVlDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSEpsWmlCU1pXWmxjbVZ1WTJVZ2JtRnRaUzVjYmlBZ0lDb2dRSEJoY21GdElIdGpiMjF3YjI1bGJuUjlJR052YlhCdmJtVnVkQ0JEYjIxd2IyNWxiblFnZEc4Z2MzUnZjbVVnWVhNZ1lISmxabUF1WEc0Z0lDQXFJRUJtYVc1aGJGeHVJQ0FnS2lCQWNISnBkbUYwWlZ4dUlDQWdLaTljYmlBZ1lYUjBZV05vVW1WbU9pQm1kVzVqZEdsdmJpaHlaV1lzSUdOdmJYQnZibVZ1ZENrZ2UxeHVJQ0FnSUhaaGNpQnBibk4wSUQwZ2RHaHBjeTVuWlhSUWRXSnNhV05KYm5OMFlXNWpaU2dwTzF4dUlDQWdJSFpoY2lCeVpXWnpJRDBnYVc1emRDNXlaV1p6SUQwOVBTQmxiWEIwZVU5aWFtVmpkQ0EvSUNocGJuTjBMbkpsWm5NZ1BTQjdmU2tnT2lCcGJuTjBMbkpsWm5NN1hHNGdJQ0FnY21WbWMxdHlaV1pkSUQwZ1kyOXRjRzl1Wlc1MExtZGxkRkIxWW14cFkwbHVjM1JoYm1ObEtDazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVSbGRHRmphR1Z6SUdFZ2NtVm1aWEpsYm1ObElHNWhiV1V1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCeVpXWWdUbUZ0WlNCMGJ5QmtaWEpsWm1WeVpXNWpaUzVjYmlBZ0lDb2dRR1pwYm1Gc1hHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFMMXh1SUNCa1pYUmhZMmhTWldZNklHWjFibU4wYVc5dUtISmxaaWtnZTF4dUlDQWdJSFpoY2lCeVpXWnpJRDBnZEdocGN5NW5aWFJRZFdKc2FXTkpibk4wWVc1alpTZ3BMbkpsWm5NN1hHNGdJQ0FnWkdWc1pYUmxJSEpsWm5OYmNtVm1YVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1IyVjBJR0VnZEdWNGRDQmtaWE5qY21sd2RHbHZiaUJ2WmlCMGFHVWdZMjl0Y0c5dVpXNTBJSFJvWVhRZ1kyRnVJR0psSUhWelpXUWdkRzhnYVdSbGJuUnBabmtnYVhSY2JpQWdJQ29nYVc0Z1pYSnliM0lnYldWemMyRm5aWE11WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMGdWR2hsSUc1aGJXVWdiM0lnYm5Wc2JDNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQm5aWFJPWVcxbE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjJZWElnZEhsd1pTQTlJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTG5SNWNHVTdYRzRnSUNBZ2RtRnlJR052Ym5OMGNuVmpkRzl5SUQwZ2RHaHBjeTVmYVc1emRHRnVZMlVnSmlZZ2RHaHBjeTVmYVc1emRHRnVZMlV1WTI5dWMzUnlkV04wYjNJN1hHNGdJQ0FnY21WMGRYSnVJQ2hjYmlBZ0lDQWdJSFI1Y0dVdVpHbHpjR3hoZVU1aGJXVWdmSHdnS0dOdmJuTjBjblZqZEc5eUlDWW1JR052Ym5OMGNuVmpkRzl5TG1ScGMzQnNZWGxPWVcxbEtTQjhmRnh1SUNBZ0lDQWdkSGx3WlM1dVlXMWxJSHg4SUNoamIyNXpkSEoxWTNSdmNpQW1KaUJqYjI1emRISjFZM1J2Y2k1dVlXMWxLU0I4ZkZ4dUlDQWdJQ0FnYm5Wc2JGeHVJQ0FnSUNrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdjSFZpYkdsamJIa2dZV05qWlhOemFXSnNaU0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklHTnZiWEJ2Ym1WdWRDQXRJR2t1WlM0Z2QyaGhkRnh1SUNBZ0tpQnBjeUJsZUhCdmMyVmtJR0o1SUhKbFpuTWdZVzVrSUhKbGRIVnlibVZrSUdKNUlGSmxZV04wTG5KbGJtUmxjaTRnUTJGdUlHSmxJRzUxYkd3Z1ptOXlJSE4wWVhSbGJHVnpjMXh1SUNBZ0tpQmpiMjF3YjI1bGJuUnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNtVjBkWEp1SUh0U1pXRmpkRU52YlhCdmJtVnVkSDBnZEdobElIQjFZbXhwWXlCamIyMXdiMjVsYm5RZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1oyVjBVSFZpYkdsalNXNXpkR0Z1WTJVNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDlwYm5OMFlXNWpaVHRjYmlBZ2ZTeGNibHh1SUNBdkx5QlRkSFZpWEc0Z0lGOXBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1ME9pQnVkV3hzWEc1Y2JuMDdYRzVjYmxKbFlXTjBVR1Z5Wmk1dFpXRnpkWEpsVFdWMGFHOWtjeWhjYmlBZ1VtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblJOYVhocGJpeGNiaUFnSjFKbFlXTjBRMjl0Y0c5emFYUmxRMjl0Y0c5dVpXNTBKeXhjYmlBZ2UxeHVJQ0FnSUcxdmRXNTBRMjl0Y0c5dVpXNTBPaUFuYlc5MWJuUkRiMjF3YjI1bGJuUW5MRnh1SUNBZ0lIVndaR0YwWlVOdmJYQnZibVZ1ZERvZ0ozVndaR0YwWlVOdmJYQnZibVZ1ZENjc1hHNGdJQ0FnWDNKbGJtUmxjbFpoYkdsa1lYUmxaRU52YlhCdmJtVnVkRG9nSjE5eVpXNWtaWEpXWVd4cFpHRjBaV1JEYjIxd2IyNWxiblFuWEc0Z0lIMWNiaWs3WEc1Y2JuWmhjaUJTWldGamRFTnZiWEJ2YzJsMFpVTnZiWEJ2Ym1WdWRDQTlJSHRjYmx4dUlDQk5hWGhwYmpvZ1VtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblJOYVhocGJseHVYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwTzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q29udGV4dFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZW1wdHlPYmplY3QgPSByZXF1aXJlKFwiLi9lbXB0eU9iamVjdFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIGRpZFdhcm4gPSBmYWxzZTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBjb250ZXh0LlxuICpcbiAqIFRoZSBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgcGFzc2VkIGRvd24gdGhlIGNvbXBvbmVudCBvd25lcnNoaXAgaGllcmFyY2h5XG4gKiBhbmQgaXMgYWNjZXNzaWJsZSB2aWEgYHRoaXMuY29udGV4dGAgb24gUmVhY3RDb21wb3NpdGVDb21wb25lbnRzLlxuICovXG52YXIgUmVhY3RDb250ZXh0ID0ge1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge29iamVjdH1cbiAgICovXG4gIGN1cnJlbnQ6IGVtcHR5T2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUZW1wb3JhcmlseSBleHRlbmRzIHRoZSBjdXJyZW50IGNvbnRleHQgd2hpbGUgZXhlY3V0aW5nIHNjb3BlZENhbGxiYWNrLlxuICAgKlxuICAgKiBBIHR5cGljYWwgdXNlIGNhc2UgbWlnaHQgbG9vayBsaWtlXG4gICAqXG4gICAqICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgKiAgICB2YXIgY2hpbGRyZW4gPSBSZWFjdENvbnRleHQud2l0aENvbnRleHQoe2ZvbzogJ2Zvbyd9LCAoKSA9PiAoXG4gICAqXG4gICAqICAgICkpO1xuICAgKiAgICByZXR1cm4gPGRpdj57Y2hpbGRyZW59PC9kaXY+O1xuICAgKiAgfVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3Q29udGV4dCBOZXcgY29udGV4dCB0byBtZXJnZSBpbnRvIHRoZSBleGlzdGluZyBjb250ZXh0XG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHNjb3BlZENhbGxiYWNrIENhbGxiYWNrIHRvIHJ1biB3aXRoIHRoZSBuZXcgY29udGV4dFxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudHxhcnJheTxSZWFjdENvbXBvbmVudD59XG4gICAqL1xuICB3aXRoQ29udGV4dDogZnVuY3Rpb24obmV3Q29udGV4dCwgc2NvcGVkQ2FsbGJhY2spIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgZGlkV2FybixcbiAgICAgICAgJ3dpdGhDb250ZXh0IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAnICtcbiAgICAgICAgJ1VzZSBhIHdyYXBwZXIgY29tcG9uZW50IHdpdGggZ2V0Q2hpbGRDb250ZXh0IGluc3RlYWQuJ1xuICAgICAgKSA6IG51bGwpO1xuXG4gICAgICBkaWRXYXJuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0O1xuICAgIHZhciBwcmV2aW91c0NvbnRleHQgPSBSZWFjdENvbnRleHQuY3VycmVudDtcbiAgICBSZWFjdENvbnRleHQuY3VycmVudCA9IGFzc2lnbih7fSwgcHJldmlvdXNDb250ZXh0LCBuZXdDb250ZXh0KTtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gc2NvcGVkQ2FsbGJhY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDb250ZXh0LmN1cnJlbnQgPSBwcmV2aW91c0NvbnRleHQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbnRleHQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRGIyNTBaWGgwTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFTnZiblJsZUhSY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQmhjM05wWjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlQWW1wbFkzUXVZWE56YVdkdVhDSXBPMXh1ZG1GeUlHVnRjSFI1VDJKcVpXTjBJRDBnY21WeGRXbHlaU2hjSWk0dlpXMXdkSGxQWW1wbFkzUmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNiblpoY2lCa2FXUlhZWEp1SUQwZ1ptRnNjMlU3WEc1Y2JpOHFLbHh1SUNvZ1MyVmxjSE1nZEhKaFkyc2diMllnZEdobElHTjFjbkpsYm5RZ1kyOXVkR1Y0ZEM1Y2JpQXFYRzRnS2lCVWFHVWdZMjl1ZEdWNGRDQnBjeUJoZFhSdmJXRjBhV05oYkd4NUlIQmhjM05sWkNCa2IzZHVJSFJvWlNCamIyMXdiMjVsYm5RZ2IzZHVaWEp6YUdsd0lHaHBaWEpoY21Ob2VWeHVJQ29nWVc1a0lHbHpJR0ZqWTJWemMybGliR1VnZG1saElHQjBhR2x6TG1OdmJuUmxlSFJnSUc5dUlGSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwY3k1Y2JpQXFMMXh1ZG1GeUlGSmxZV04wUTI5dWRHVjRkQ0E5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFJRUIwZVhCbElIdHZZbXBsWTNSOVhHNGdJQ0FxTDF4dUlDQmpkWEp5Wlc1ME9pQmxiWEIwZVU5aWFtVmpkQ3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWR1Z0Y0c5eVlYSnBiSGtnWlhoMFpXNWtjeUIwYUdVZ1kzVnljbVZ1ZENCamIyNTBaWGgwSUhkb2FXeGxJR1Y0WldOMWRHbHVaeUJ6WTI5d1pXUkRZV3hzWW1GamF5NWNiaUFnSUNwY2JpQWdJQ29nUVNCMGVYQnBZMkZzSUhWelpTQmpZWE5sSUcxcFoyaDBJR3h2YjJzZ2JHbHJaVnh1SUNBZ0tseHVJQ0FnS2lBZ2NtVnVaR1Z5T2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNvZ0lDQWdkbUZ5SUdOb2FXeGtjbVZ1SUQwZ1VtVmhZM1JEYjI1MFpYaDBMbmRwZEdoRGIyNTBaWGgwS0h0bWIyODZJQ2RtYjI4bmZTd2dLQ2tnUFQ0Z0tGeHVJQ0FnS2x4dUlDQWdLaUFnSUNBcEtUdGNiaUFnSUNvZ0lDQWdjbVYwZFhKdUlEeGthWFkrZTJOb2FXeGtjbVZ1ZlR3dlpHbDJQanRjYmlBZ0lDb2dJSDFjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUc1bGQwTnZiblJsZUhRZ1RtVjNJR052Ym5SbGVIUWdkRzhnYldWeVoyVWdhVzUwYnlCMGFHVWdaWGhwYzNScGJtY2dZMjl1ZEdWNGRGeHVJQ0FnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCelkyOXdaV1JEWVd4c1ltRmpheUJEWVd4c1ltRmpheUIwYnlCeWRXNGdkMmwwYUNCMGFHVWdibVYzSUdOdmJuUmxlSFJjYmlBZ0lDb2dRSEpsZEhWeWJpQjdVbVZoWTNSRGIyMXdiMjVsYm5SOFlYSnlZWGs4VW1WaFkzUkRiMjF3YjI1bGJuUStmVnh1SUNBZ0tpOWNiaUFnZDJsMGFFTnZiblJsZUhRNklHWjFibU4wYVc5dUtHNWxkME52Ym5SbGVIUXNJSE5qYjNCbFpFTmhiR3hpWVdOcktTQjdYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUdScFpGZGhjbTRzWEc0Z0lDQWdJQ0FnSUNkM2FYUm9RMjl1ZEdWNGRDQnBjeUJrWlhCeVpXTmhkR1ZrSUdGdVpDQjNhV3hzSUdKbElISmxiVzkyWldRZ2FXNGdZU0JtZFhSMWNtVWdkbVZ5YzJsdmJpNGdKeUFyWEc0Z0lDQWdJQ0FnSUNkVmMyVWdZU0IzY21Gd2NHVnlJR052YlhCdmJtVnVkQ0IzYVhSb0lHZGxkRU5vYVd4a1EyOXVkR1Y0ZENCcGJuTjBaV0ZrTGlkY2JpQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JseHVJQ0FnSUNBZ1pHbGtWMkZ5YmlBOUlIUnlkV1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkbUZ5SUhKbGMzVnNkRHRjYmlBZ0lDQjJZWElnY0hKbGRtbHZkWE5EYjI1MFpYaDBJRDBnVW1WaFkzUkRiMjUwWlhoMExtTjFjbkpsYm5RN1hHNGdJQ0FnVW1WaFkzUkRiMjUwWlhoMExtTjFjbkpsYm5RZ1BTQmhjM05wWjI0b2UzMHNJSEJ5WlhacGIzVnpRMjl1ZEdWNGRDd2dibVYzUTI5dWRHVjRkQ2s3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUhKbGMzVnNkQ0E5SUhOamIzQmxaRU5oYkd4aVlXTnJLQ2s3WEc0Z0lDQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQWdJRkpsWVdOMFEyOXVkR1Y0ZEM1amRYSnlaVzUwSUQwZ2NISmxkbWx2ZFhORGIyNTBaWGgwTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRGIyNTBaWGgwTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDdXJyZW50T3duZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgb3duZXIuXG4gKlxuICogVGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIGNvbXBvbmVudCB3aG8gc2hvdWxkIG93biBhbnkgY29tcG9uZW50cyB0aGF0IGFyZVxuICogY3VycmVudGx5IGJlaW5nIGNvbnN0cnVjdGVkLlxuICpcbiAqIFRoZSBkZXB0aCBpbmRpY2F0ZSBob3cgbWFueSBjb21wb3NpdGUgY29tcG9uZW50cyBhcmUgYWJvdmUgdGhpcyByZW5kZXIgbGV2ZWwuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEN1cnJlbnRPd25lcjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFZhbGlkYXRvclwiKTtcblxudmFyIG1hcE9iamVjdCA9IHJlcXVpcmUoXCIuL21hcE9iamVjdFwiKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBIVE1MIHRhZyBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRhZyBuYW1lIChlLmcuIGBkaXZgKS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURPTUZhY3RvcnkodGFnKSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUZhY3RvcnkodGFnKTtcbiAgfVxuICByZXR1cm4gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkodGFnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwcGluZyBmcm9tIHN1cHBvcnRlZCBIVE1MIHRhZ3MgdG8gYFJlYWN0RE9NQ29tcG9uZW50YCBjbGFzc2VzLlxuICogVGhpcyBpcyBhbHNvIGFjY2Vzc2libGUgdmlhIGBSZWFjdC5ET01gLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFJlYWN0RE9NID0gbWFwT2JqZWN0KHtcbiAgYTogJ2EnLFxuICBhYmJyOiAnYWJicicsXG4gIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgYXJlYTogJ2FyZWEnLFxuICBhcnRpY2xlOiAnYXJ0aWNsZScsXG4gIGFzaWRlOiAnYXNpZGUnLFxuICBhdWRpbzogJ2F1ZGlvJyxcbiAgYjogJ2InLFxuICBiYXNlOiAnYmFzZScsXG4gIGJkaTogJ2JkaScsXG4gIGJkbzogJ2JkbycsXG4gIGJpZzogJ2JpZycsXG4gIGJsb2NrcXVvdGU6ICdibG9ja3F1b3RlJyxcbiAgYm9keTogJ2JvZHknLFxuICBicjogJ2JyJyxcbiAgYnV0dG9uOiAnYnV0dG9uJyxcbiAgY2FudmFzOiAnY2FudmFzJyxcbiAgY2FwdGlvbjogJ2NhcHRpb24nLFxuICBjaXRlOiAnY2l0ZScsXG4gIGNvZGU6ICdjb2RlJyxcbiAgY29sOiAnY29sJyxcbiAgY29sZ3JvdXA6ICdjb2xncm91cCcsXG4gIGRhdGE6ICdkYXRhJyxcbiAgZGF0YWxpc3Q6ICdkYXRhbGlzdCcsXG4gIGRkOiAnZGQnLFxuICBkZWw6ICdkZWwnLFxuICBkZXRhaWxzOiAnZGV0YWlscycsXG4gIGRmbjogJ2RmbicsXG4gIGRpYWxvZzogJ2RpYWxvZycsXG4gIGRpdjogJ2RpdicsXG4gIGRsOiAnZGwnLFxuICBkdDogJ2R0JyxcbiAgZW06ICdlbScsXG4gIGVtYmVkOiAnZW1iZWQnLFxuICBmaWVsZHNldDogJ2ZpZWxkc2V0JyxcbiAgZmlnY2FwdGlvbjogJ2ZpZ2NhcHRpb24nLFxuICBmaWd1cmU6ICdmaWd1cmUnLFxuICBmb290ZXI6ICdmb290ZXInLFxuICBmb3JtOiAnZm9ybScsXG4gIGgxOiAnaDEnLFxuICBoMjogJ2gyJyxcbiAgaDM6ICdoMycsXG4gIGg0OiAnaDQnLFxuICBoNTogJ2g1JyxcbiAgaDY6ICdoNicsXG4gIGhlYWQ6ICdoZWFkJyxcbiAgaGVhZGVyOiAnaGVhZGVyJyxcbiAgaHI6ICdocicsXG4gIGh0bWw6ICdodG1sJyxcbiAgaTogJ2knLFxuICBpZnJhbWU6ICdpZnJhbWUnLFxuICBpbWc6ICdpbWcnLFxuICBpbnB1dDogJ2lucHV0JyxcbiAgaW5zOiAnaW5zJyxcbiAga2JkOiAna2JkJyxcbiAga2V5Z2VuOiAna2V5Z2VuJyxcbiAgbGFiZWw6ICdsYWJlbCcsXG4gIGxlZ2VuZDogJ2xlZ2VuZCcsXG4gIGxpOiAnbGknLFxuICBsaW5rOiAnbGluaycsXG4gIG1haW46ICdtYWluJyxcbiAgbWFwOiAnbWFwJyxcbiAgbWFyazogJ21hcmsnLFxuICBtZW51OiAnbWVudScsXG4gIG1lbnVpdGVtOiAnbWVudWl0ZW0nLFxuICBtZXRhOiAnbWV0YScsXG4gIG1ldGVyOiAnbWV0ZXInLFxuICBuYXY6ICduYXYnLFxuICBub3NjcmlwdDogJ25vc2NyaXB0JyxcbiAgb2JqZWN0OiAnb2JqZWN0JyxcbiAgb2w6ICdvbCcsXG4gIG9wdGdyb3VwOiAnb3B0Z3JvdXAnLFxuICBvcHRpb246ICdvcHRpb24nLFxuICBvdXRwdXQ6ICdvdXRwdXQnLFxuICBwOiAncCcsXG4gIHBhcmFtOiAncGFyYW0nLFxuICBwaWN0dXJlOiAncGljdHVyZScsXG4gIHByZTogJ3ByZScsXG4gIHByb2dyZXNzOiAncHJvZ3Jlc3MnLFxuICBxOiAncScsXG4gIHJwOiAncnAnLFxuICBydDogJ3J0JyxcbiAgcnVieTogJ3J1YnknLFxuICBzOiAncycsXG4gIHNhbXA6ICdzYW1wJyxcbiAgc2NyaXB0OiAnc2NyaXB0JyxcbiAgc2VjdGlvbjogJ3NlY3Rpb24nLFxuICBzZWxlY3Q6ICdzZWxlY3QnLFxuICBzbWFsbDogJ3NtYWxsJyxcbiAgc291cmNlOiAnc291cmNlJyxcbiAgc3BhbjogJ3NwYW4nLFxuICBzdHJvbmc6ICdzdHJvbmcnLFxuICBzdHlsZTogJ3N0eWxlJyxcbiAgc3ViOiAnc3ViJyxcbiAgc3VtbWFyeTogJ3N1bW1hcnknLFxuICBzdXA6ICdzdXAnLFxuICB0YWJsZTogJ3RhYmxlJyxcbiAgdGJvZHk6ICd0Ym9keScsXG4gIHRkOiAndGQnLFxuICB0ZXh0YXJlYTogJ3RleHRhcmVhJyxcbiAgdGZvb3Q6ICd0Zm9vdCcsXG4gIHRoOiAndGgnLFxuICB0aGVhZDogJ3RoZWFkJyxcbiAgdGltZTogJ3RpbWUnLFxuICB0aXRsZTogJ3RpdGxlJyxcbiAgdHI6ICd0cicsXG4gIHRyYWNrOiAndHJhY2snLFxuICB1OiAndScsXG4gIHVsOiAndWwnLFxuICAndmFyJzogJ3ZhcicsXG4gIHZpZGVvOiAndmlkZW8nLFxuICB3YnI6ICd3YnInLFxuXG4gIC8vIFNWR1xuICBjaXJjbGU6ICdjaXJjbGUnLFxuICBjbGlwUGF0aDogJ2NsaXBQYXRoJyxcbiAgZGVmczogJ2RlZnMnLFxuICBlbGxpcHNlOiAnZWxsaXBzZScsXG4gIGc6ICdnJyxcbiAgbGluZTogJ2xpbmUnLFxuICBsaW5lYXJHcmFkaWVudDogJ2xpbmVhckdyYWRpZW50JyxcbiAgbWFzazogJ21hc2snLFxuICBwYXRoOiAncGF0aCcsXG4gIHBhdHRlcm46ICdwYXR0ZXJuJyxcbiAgcG9seWdvbjogJ3BvbHlnb24nLFxuICBwb2x5bGluZTogJ3BvbHlsaW5lJyxcbiAgcmFkaWFsR3JhZGllbnQ6ICdyYWRpYWxHcmFkaWVudCcsXG4gIHJlY3Q6ICdyZWN0JyxcbiAgc3RvcDogJ3N0b3AnLFxuICBzdmc6ICdzdmcnLFxuICB0ZXh0OiAndGV4dCcsXG4gIHRzcGFuOiAndHNwYW4nXG5cbn0sIGNyZWF0ZURPTUZhY3RvcnkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVUMDB1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFUlBUVnh1SUNvZ1FIUjVjR1ZqYUdWamEzTWdjM1JoZEdsakxXOXViSGxjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZzWlcxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5WENJcE8xeHVYRzUyWVhJZ2JXRndUMkpxWldOMElEMGdjbVZ4ZFdseVpTaGNJaTR2YldGd1QySnFaV04wWENJcE8xeHVYRzR2S2lwY2JpQXFJRU55WldGMFpTQmhJR1poWTNSdmNua2dkR2hoZENCamNtVmhkR1Z6SUVoVVRVd2dkR0ZuSUdWc1pXMWxiblJ6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IwWVdjZ1ZHRm5JRzVoYldVZ0tHVXVaeTRnWUdScGRtQXBMbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWTNKbFlYUmxSRTlOUm1GamRHOXllU2gwWVdjcElIdGNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJSEpsZEhWeWJpQlNaV0ZqZEVWc1pXMWxiblJXWVd4cFpHRjBiM0l1WTNKbFlYUmxSbUZqZEc5eWVTaDBZV2NwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUm1GamRHOXllU2gwWVdjcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCdFlYQndhVzVuSUdaeWIyMGdjM1Z3Y0c5eWRHVmtJRWhVVFV3Z2RHRm5jeUIwYnlCZ1VtVmhZM1JFVDAxRGIyMXdiMjVsYm5SZ0lHTnNZWE56WlhNdVhHNGdLaUJVYUdseklHbHpJR0ZzYzI4Z1lXTmpaWE56YVdKc1pTQjJhV0VnWUZKbFlXTjBMa1JQVFdBdVhHNGdLbHh1SUNvZ1FIQjFZbXhwWTF4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JFVDAwZ1BTQnRZWEJQWW1wbFkzUW9lMXh1SUNCaE9pQW5ZU2NzWEc0Z0lHRmlZbkk2SUNkaFltSnlKeXhjYmlBZ1lXUmtjbVZ6Y3pvZ0oyRmtaSEpsYzNNbkxGeHVJQ0JoY21WaE9pQW5ZWEpsWVNjc1hHNGdJR0Z5ZEdsamJHVTZJQ2RoY25ScFkyeGxKeXhjYmlBZ1lYTnBaR1U2SUNkaGMybGtaU2NzWEc0Z0lHRjFaR2x2T2lBbllYVmthVzhuTEZ4dUlDQmlPaUFuWWljc1hHNGdJR0poYzJVNklDZGlZWE5sSnl4Y2JpQWdZbVJwT2lBblltUnBKeXhjYmlBZ1ltUnZPaUFuWW1Sdkp5eGNiaUFnWW1sbk9pQW5ZbWxuSnl4Y2JpQWdZbXh2WTJ0eGRXOTBaVG9nSjJKc2IyTnJjWFZ2ZEdVbkxGeHVJQ0JpYjJSNU9pQW5ZbTlrZVNjc1hHNGdJR0p5T2lBblluSW5MRnh1SUNCaWRYUjBiMjQ2SUNkaWRYUjBiMjRuTEZ4dUlDQmpZVzUyWVhNNklDZGpZVzUyWVhNbkxGeHVJQ0JqWVhCMGFXOXVPaUFuWTJGd2RHbHZiaWNzWEc0Z0lHTnBkR1U2SUNkamFYUmxKeXhjYmlBZ1kyOWtaVG9nSjJOdlpHVW5MRnh1SUNCamIydzZJQ2RqYjJ3bkxGeHVJQ0JqYjJ4bmNtOTFjRG9nSjJOdmJHZHliM1Z3Snl4Y2JpQWdaR0YwWVRvZ0oyUmhkR0VuTEZ4dUlDQmtZWFJoYkdsemREb2dKMlJoZEdGc2FYTjBKeXhjYmlBZ1pHUTZJQ2RrWkNjc1hHNGdJR1JsYkRvZ0oyUmxiQ2NzWEc0Z0lHUmxkR0ZwYkhNNklDZGtaWFJoYVd4ekp5eGNiaUFnWkdadU9pQW5aR1p1Snl4Y2JpQWdaR2xoYkc5bk9pQW5aR2xoYkc5bkp5eGNiaUFnWkdsMk9pQW5aR2wySnl4Y2JpQWdaR3c2SUNka2JDY3NYRzRnSUdSME9pQW5aSFFuTEZ4dUlDQmxiVG9nSjJWdEp5eGNiaUFnWlcxaVpXUTZJQ2RsYldKbFpDY3NYRzRnSUdacFpXeGtjMlYwT2lBblptbGxiR1J6WlhRbkxGeHVJQ0JtYVdkallYQjBhVzl1T2lBblptbG5ZMkZ3ZEdsdmJpY3NYRzRnSUdacFozVnlaVG9nSjJacFozVnlaU2NzWEc0Z0lHWnZiM1JsY2pvZ0oyWnZiM1JsY2ljc1hHNGdJR1p2Y20wNklDZG1iM0p0Snl4Y2JpQWdhREU2SUNkb01TY3NYRzRnSUdneU9pQW5hREluTEZ4dUlDQm9Nem9nSjJnekp5eGNiaUFnYURRNklDZG9OQ2NzWEc0Z0lHZzFPaUFuYURVbkxGeHVJQ0JvTmpvZ0oyZzJKeXhjYmlBZ2FHVmhaRG9nSjJobFlXUW5MRnh1SUNCb1pXRmtaWEk2SUNkb1pXRmtaWEluTEZ4dUlDQm9jam9nSjJoeUp5eGNiaUFnYUhSdGJEb2dKMmgwYld3bkxGeHVJQ0JwT2lBbmFTY3NYRzRnSUdsbWNtRnRaVG9nSjJsbWNtRnRaU2NzWEc0Z0lHbHRaem9nSjJsdFp5Y3NYRzRnSUdsdWNIVjBPaUFuYVc1d2RYUW5MRnh1SUNCcGJuTTZJQ2RwYm5NbkxGeHVJQ0JyWW1RNklDZHJZbVFuTEZ4dUlDQnJaWGxuWlc0NklDZHJaWGxuWlc0bkxGeHVJQ0JzWVdKbGJEb2dKMnhoWW1Wc0p5eGNiaUFnYkdWblpXNWtPaUFuYkdWblpXNWtKeXhjYmlBZ2JHazZJQ2RzYVNjc1hHNGdJR3hwYm1zNklDZHNhVzVySnl4Y2JpQWdiV0ZwYmpvZ0oyMWhhVzRuTEZ4dUlDQnRZWEE2SUNkdFlYQW5MRnh1SUNCdFlYSnJPaUFuYldGeWF5Y3NYRzRnSUcxbGJuVTZJQ2R0Wlc1MUp5eGNiaUFnYldWdWRXbDBaVzA2SUNkdFpXNTFhWFJsYlNjc1hHNGdJRzFsZEdFNklDZHRaWFJoSnl4Y2JpQWdiV1YwWlhJNklDZHRaWFJsY2ljc1hHNGdJRzVoZGpvZ0oyNWhkaWNzWEc0Z0lHNXZjMk55YVhCME9pQW5ibTl6WTNKcGNIUW5MRnh1SUNCdlltcGxZM1E2SUNkdlltcGxZM1FuTEZ4dUlDQnZiRG9nSjI5c0p5eGNiaUFnYjNCMFozSnZkWEE2SUNkdmNIUm5jbTkxY0Njc1hHNGdJRzl3ZEdsdmJqb2dKMjl3ZEdsdmJpY3NYRzRnSUc5MWRIQjFkRG9nSjI5MWRIQjFkQ2NzWEc0Z0lIQTZJQ2R3Snl4Y2JpQWdjR0Z5WVcwNklDZHdZWEpoYlNjc1hHNGdJSEJwWTNSMWNtVTZJQ2R3YVdOMGRYSmxKeXhjYmlBZ2NISmxPaUFuY0hKbEp5eGNiaUFnY0hKdlozSmxjM002SUNkd2NtOW5jbVZ6Y3ljc1hHNGdJSEU2SUNkeEp5eGNiaUFnY25BNklDZHljQ2NzWEc0Z0lISjBPaUFuY25RbkxGeHVJQ0J5ZFdKNU9pQW5jblZpZVNjc1hHNGdJSE02SUNkekp5eGNiaUFnYzJGdGNEb2dKM05oYlhBbkxGeHVJQ0J6WTNKcGNIUTZJQ2R6WTNKcGNIUW5MRnh1SUNCelpXTjBhVzl1T2lBbmMyVmpkR2x2Ymljc1hHNGdJSE5sYkdWamREb2dKM05sYkdWamRDY3NYRzRnSUhOdFlXeHNPaUFuYzIxaGJHd25MRnh1SUNCemIzVnlZMlU2SUNkemIzVnlZMlVuTEZ4dUlDQnpjR0Z1T2lBbmMzQmhiaWNzWEc0Z0lITjBjbTl1WnpvZ0ozTjBjbTl1Wnljc1hHNGdJSE4wZVd4bE9pQW5jM1I1YkdVbkxGeHVJQ0J6ZFdJNklDZHpkV0luTEZ4dUlDQnpkVzF0WVhKNU9pQW5jM1Z0YldGeWVTY3NYRzRnSUhOMWNEb2dKM04xY0Njc1hHNGdJSFJoWW14bE9pQW5kR0ZpYkdVbkxGeHVJQ0IwWW05a2VUb2dKM1JpYjJSNUp5eGNiaUFnZEdRNklDZDBaQ2NzWEc0Z0lIUmxlSFJoY21WaE9pQW5kR1Y0ZEdGeVpXRW5MRnh1SUNCMFptOXZkRG9nSjNSbWIyOTBKeXhjYmlBZ2RHZzZJQ2QwYUNjc1hHNGdJSFJvWldGa09pQW5kR2hsWVdRbkxGeHVJQ0IwYVcxbE9pQW5kR2x0WlNjc1hHNGdJSFJwZEd4bE9pQW5kR2wwYkdVbkxGeHVJQ0IwY2pvZ0ozUnlKeXhjYmlBZ2RISmhZMnM2SUNkMGNtRmpheWNzWEc0Z0lIVTZJQ2QxSnl4Y2JpQWdkV3c2SUNkMWJDY3NYRzRnSUNkMllYSW5PaUFuZG1GeUp5eGNiaUFnZG1sa1pXODZJQ2QyYVdSbGJ5Y3NYRzRnSUhkaWNqb2dKM2RpY2ljc1hHNWNiaUFnTHk4Z1UxWkhYRzRnSUdOcGNtTnNaVG9nSjJOcGNtTnNaU2NzWEc0Z0lHTnNhWEJRWVhSb09pQW5ZMnhwY0ZCaGRHZ25MRnh1SUNCa1pXWnpPaUFuWkdWbWN5Y3NYRzRnSUdWc2JHbHdjMlU2SUNkbGJHeHBjSE5sSnl4Y2JpQWdaem9nSjJjbkxGeHVJQ0JzYVc1bE9pQW5iR2x1WlNjc1hHNGdJR3hwYm1WaGNrZHlZV1JwWlc1ME9pQW5iR2x1WldGeVIzSmhaR2xsYm5RbkxGeHVJQ0J0WVhOck9pQW5iV0Z6YXljc1hHNGdJSEJoZEdnNklDZHdZWFJvSnl4Y2JpQWdjR0YwZEdWeWJqb2dKM0JoZEhSbGNtNG5MRnh1SUNCd2IyeDVaMjl1T2lBbmNHOXNlV2R2Ymljc1hHNGdJSEJ2Ykhsc2FXNWxPaUFuY0c5c2VXeHBibVVuTEZ4dUlDQnlZV1JwWVd4SGNtRmthV1Z1ZERvZ0ozSmhaR2xoYkVkeVlXUnBaVzUwSnl4Y2JpQWdjbVZqZERvZ0ozSmxZM1FuTEZ4dUlDQnpkRzl3T2lBbmMzUnZjQ2NzWEc0Z0lITjJaem9nSjNOMlp5Y3NYRzRnSUhSbGVIUTZJQ2QwWlhoMEp5eGNiaUFnZEhOd1lXNDZJQ2QwYzNCaGJpZGNibHh1ZlN3Z1kzSmxZWFJsUkU5TlJtRmpkRzl5ZVNrN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRVQwMDdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUJ1dHRvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEF1dG9Gb2N1c01peGluID0gcmVxdWlyZShcIi4vQXV0b0ZvY3VzTWl4aW5cIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciBrZXlNaXJyb3IgPSByZXF1aXJlKFwiLi9rZXlNaXJyb3JcIik7XG5cbnZhciBidXR0b24gPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSgnYnV0dG9uJyk7XG5cbnZhciBtb3VzZUxpc3RlbmVyTmFtZXMgPSBrZXlNaXJyb3Ioe1xuICBvbkNsaWNrOiB0cnVlLFxuICBvbkRvdWJsZUNsaWNrOiB0cnVlLFxuICBvbk1vdXNlRG93bjogdHJ1ZSxcbiAgb25Nb3VzZU1vdmU6IHRydWUsXG4gIG9uTW91c2VVcDogdHJ1ZSxcbiAgb25DbGlja0NhcHR1cmU6IHRydWUsXG4gIG9uRG91YmxlQ2xpY2tDYXB0dXJlOiB0cnVlLFxuICBvbk1vdXNlRG93bkNhcHR1cmU6IHRydWUsXG4gIG9uTW91c2VNb3ZlQ2FwdHVyZTogdHJ1ZSxcbiAgb25Nb3VzZVVwQ2FwdHVyZTogdHJ1ZVxufSk7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDxidXR0b24+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCBkb2VzIG5vdCByZWNlaXZlIG1vdXNlIGV2ZW50c1xuICogd2hlbiBgZGlzYWJsZWRgIGlzIHNldC5cbiAqL1xudmFyIFJlYWN0RE9NQnV0dG9uID0gUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiAnUmVhY3RET01CdXR0b24nLFxuICB0YWdOYW1lOiAnQlVUVE9OJyxcblxuICBtaXhpbnM6IFtBdXRvRm9jdXNNaXhpbiwgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5dLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHByb3BzID0ge307XG5cbiAgICAvLyBDb3B5IHRoZSBwcm9wczsgZXhjZXB0IHRoZSBtb3VzZSBsaXN0ZW5lcnMgaWYgd2UncmUgZGlzYWJsZWRcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wcykge1xuICAgICAgaWYgKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICghdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCAhbW91c2VMaXN0ZW5lck5hbWVzW2tleV0pKSB7XG4gICAgICAgIHByb3BzW2tleV0gPSB0aGlzLnByb3BzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1dHRvbihwcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH1cblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01CdXR0b247XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NQ29tcG9uZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbi8qIGdsb2JhbCBoYXNPd25Qcm9wZXJ0eTp0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIENTU1Byb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0NTU1Byb3BlcnR5T3BlcmF0aW9uc1wiKTtcbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5XCIpO1xudmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5T3BlcmF0aW9uc1wiKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJcIik7XG52YXIgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQgPVxuICByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdE11bHRpQ2hpbGQgPSByZXF1aXJlKFwiLi9SZWFjdE11bHRpQ2hpbGRcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSByZXF1aXJlKFwiLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXJcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJlKFwiLi9pc0V2ZW50U3VwcG9ydGVkXCIpO1xudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBkZWxldGVMaXN0ZW5lciA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5kZWxldGVMaXN0ZW5lcjtcbnZhciBsaXN0ZW5UbyA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5saXN0ZW5UbztcbnZhciByZWdpc3RyYXRpb25OYW1lTW9kdWxlcyA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcztcblxuLy8gRm9yIHF1aWNrbHkgbWF0Y2hpbmcgY2hpbGRyZW4gdHlwZSwgdG8gdGVzdCBpZiBjYW4gYmUgdHJlYXRlZCBhcyBjb250ZW50LlxudmFyIENPTlRFTlRfVFlQRVMgPSB7J3N0cmluZyc6IHRydWUsICdudW1iZXInOiB0cnVlfTtcblxudmFyIFNUWUxFID0ga2V5T2Yoe3N0eWxlOiBudWxsfSk7XG5cbnZhciBFTEVNRU5UX05PREVfVFlQRSA9IDE7XG5cbi8qKlxuICogT3B0aW9uYWxseSBpbmplY3RhYmxlIG9wZXJhdGlvbnMgZm9yIG11dGF0aW5nIHRoZSBET01cbiAqL1xudmFyIEJhY2tlbmRJRE9wZXJhdGlvbnMgPSBudWxsO1xuXG4vKipcbiAqIEBwYXJhbSB7P29iamVjdH0gcHJvcHNcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wcyhwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIE5vdGUgdGhlIHVzZSBvZiBgPT1gIHdoaWNoIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWQuXG4gIGlmIChwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPSBudWxsKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHByb3BzLmNoaWxkcmVuID09IG51bGwsXG4gICAgICAnQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuJ1xuICAgICkgOiBpbnZhcmlhbnQocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmXG4gICAgICAnX19odG1sJyBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCxcbiAgICAgICdgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiAnICtcbiAgICAgICdQbGVhc2UgdmlzaXQgaHR0cHM6Ly9mYi5tZS9yZWFjdC1pbnZhcmlhbnQtZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgJyArXG4gICAgICAnZm9yIG1vcmUgaW5mb3JtYXRpb24uJ1xuICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJlxuICAgICdfX2h0bWwnIGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSk7XG4gIH1cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgcHJvcHMuaW5uZXJIVE1MID09IG51bGwsXG4gICAgICAnRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBpcyBub3QgcGVybWl0dGVkLiAnICtcbiAgICAgICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nXG4gICAgKSA6IG51bGwpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgIXByb3BzLmNvbnRlbnRFZGl0YWJsZSB8fCBwcm9wcy5jaGlsZHJlbiA9PSBudWxsLFxuICAgICAgJ0EgY29tcG9uZW50IGlzIGBjb250ZW50RWRpdGFibGVgIGFuZCBjb250YWlucyBgY2hpbGRyZW5gIG1hbmFnZWQgYnkgJyArXG4gICAgICAnUmVhY3QuIEl0IGlzIG5vdyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IG5vbmUgb2YgJyArXG4gICAgICAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgK1xuICAgICAgJ3Byb2JhYmx5IG5vdCBpbnRlbnRpb25hbC4nXG4gICAgKSA6IG51bGwpO1xuICB9XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgcHJvcHMuc3R5bGUgPT0gbnVsbCB8fCB0eXBlb2YgcHJvcHMuc3R5bGUgPT09ICdvYmplY3QnLFxuICAgICdUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsICcgK1xuICAgICdub3QgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBzdHlsZT17e21hcmdpblJpZ2h0OiBzcGFjaW5nICsgXFwnZW1cXCd9fSB3aGVuICcgK1xuICAgICd1c2luZyBKU1guJ1xuICApIDogaW52YXJpYW50KHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JykpO1xufVxuXG5mdW5jdGlvbiBwdXRMaXN0ZW5lcihpZCwgcmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIsIHRyYW5zYWN0aW9uKSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAvLyBJRTggaGFzIG5vIEFQSSBmb3IgZXZlbnQgY2FwdHVyaW5nIGFuZCB0aGUgYG9uU2Nyb2xsYCBldmVudCBkb2Vzbid0XG4gICAgLy8gYnViYmxlLlxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgcmVnaXN0cmF0aW9uTmFtZSAhPT0gJ29uU2Nyb2xsJyB8fCBpc0V2ZW50U3VwcG9ydGVkKCdzY3JvbGwnLCB0cnVlKSxcbiAgICAgICdUaGlzIGJyb3dzZXIgZG9lc25cXCd0IHN1cHBvcnQgdGhlIGBvblNjcm9sbGAgZXZlbnQnXG4gICAgKSA6IG51bGwpO1xuICB9XG4gIHZhciBjb250YWluZXIgPSBSZWFjdE1vdW50LmZpbmRSZWFjdENvbnRhaW5lckZvcklEKGlkKTtcbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIHZhciBkb2MgPSBjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFID9cbiAgICAgIGNvbnRhaW5lci5vd25lckRvY3VtZW50IDpcbiAgICAgIGNvbnRhaW5lcjtcbiAgICBsaXN0ZW5UbyhyZWdpc3RyYXRpb25OYW1lLCBkb2MpO1xuICB9XG4gIHRyYW5zYWN0aW9uLmdldFB1dExpc3RlbmVyUXVldWUoKS5lbnF1ZXVlUHV0TGlzdGVuZXIoXG4gICAgaWQsXG4gICAgcmVnaXN0cmF0aW9uTmFtZSxcbiAgICBsaXN0ZW5lclxuICApO1xufVxuXG4vLyBGb3IgSFRNTCwgY2VydGFpbiB0YWdzIHNob3VsZCBvbWl0IHRoZWlyIGNsb3NlIHRhZy4gV2Uga2VlcCBhIHdoaXRlbGlzdCBmb3Jcbi8vIHRob3NlIHNwZWNpYWwgY2FzZWQgdGFncy5cblxudmFyIG9taXR0ZWRDbG9zZVRhZ3MgPSB7XG4gICdhcmVhJzogdHJ1ZSxcbiAgJ2Jhc2UnOiB0cnVlLFxuICAnYnInOiB0cnVlLFxuICAnY29sJzogdHJ1ZSxcbiAgJ2VtYmVkJzogdHJ1ZSxcbiAgJ2hyJzogdHJ1ZSxcbiAgJ2ltZyc6IHRydWUsXG4gICdpbnB1dCc6IHRydWUsXG4gICdrZXlnZW4nOiB0cnVlLFxuICAnbGluayc6IHRydWUsXG4gICdtZXRhJzogdHJ1ZSxcbiAgJ3BhcmFtJzogdHJ1ZSxcbiAgJ3NvdXJjZSc6IHRydWUsXG4gICd0cmFjayc6IHRydWUsXG4gICd3YnInOiB0cnVlXG4gIC8vIE5PVEU6IG1lbnVpdGVtJ3MgY2xvc2UgdGFnIHNob3VsZCBiZSBvbWl0dGVkLCBidXQgdGhhdCBjYXVzZXMgcHJvYmxlbXMuXG59O1xuXG4vLyBXZSBhY2NlcHQgYW55IHRhZyB0byBiZSByZW5kZXJlZCBidXQgc2luY2UgdGhpcyBnZXRzIGluamVjdGVkIGludG8gYWJpdHJhcnlcbi8vIEhUTUwsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgaXQncyBhIHNhZmUgdGFnLlxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC8jTlQtTmFtZVxuXG52YXIgVkFMSURfVEFHX1JFR0VYID0gL15bYS16QS1aXVthLXpBLVo6X1xcLlxcLVxcZF0qJC87IC8vIFNpbXBsaWZpZWQgc3Vic2V0XG52YXIgdmFsaWRhdGVkVGFnQ2FjaGUgPSB7fTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZURhbmdlcm91c1RhZyh0YWcpIHtcbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZFRhZ0NhY2hlLCB0YWcpKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChWQUxJRF9UQUdfUkVHRVgudGVzdCh0YWcpLCAnSW52YWxpZCB0YWc6ICVzJywgdGFnKSA6IGludmFyaWFudChWQUxJRF9UQUdfUkVHRVgudGVzdCh0YWcpKSk7XG4gICAgdmFsaWRhdGVkVGFnQ2FjaGVbdGFnXSA9IHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFJlYWN0IGNsYXNzIHRoYXQgaXMgaWRlbXBvdGVudCBhbmQgY2FwYWJsZSBvZiBjb250YWluaW5nIG90aGVyXG4gKiBSZWFjdCBjb21wb25lbnRzLiBJdCBhY2NlcHRzIGV2ZW50IGxpc3RlbmVycyBhbmQgRE9NIHByb3BlcnRpZXMgdGhhdCBhcmVcbiAqIHZhbGlkIGFjY29yZGluZyB0byBgRE9NUHJvcGVydHlgLlxuICpcbiAqICAtIEV2ZW50IGxpc3RlbmVyczogYG9uQ2xpY2tgLCBgb25Nb3VzZURvd25gLCBldGMuXG4gKiAgLSBET00gcHJvcGVydGllczogYGNsYXNzTmFtZWAsIGBuYW1lYCwgYHRpdGxlYCwgZXRjLlxuICpcbiAqIFRoZSBgc3R5bGVgIHByb3BlcnR5IGZ1bmN0aW9ucyBkaWZmZXJlbnRseSBmcm9tIHRoZSBET00gQVBJLiBJdCBhY2NlcHRzIGFuXG4gKiBvYmplY3QgbWFwcGluZyBvZiBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcy5cbiAqXG4gKiBAY29uc3RydWN0b3IgUmVhY3RET01Db21wb25lbnRcbiAqIEBleHRlbmRzIFJlYWN0TXVsdGlDaGlsZFxuICovXG5mdW5jdGlvbiBSZWFjdERPTUNvbXBvbmVudCh0YWcpIHtcbiAgdmFsaWRhdGVEYW5nZXJvdXNUYWcodGFnKTtcbiAgdGhpcy5fdGFnID0gdGFnO1xuICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5fcHJldmlvdXNTdHlsZUNvcHkgPSBudWxsO1xuICB0aGlzLl9yb290Tm9kZUlEID0gbnVsbDtcbn1cblxuUmVhY3RET01Db21wb25lbnQuZGlzcGxheU5hbWUgPSAnUmVhY3RET01Db21wb25lbnQnO1xuXG5SZWFjdERPTUNvbXBvbmVudC5NaXhpbiA9IHtcblxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyByb290IHRhZyBtYXJrdXAgdGhlbiByZWN1cnNlcy4gVGhpcyBtZXRob2QgaGFzIHNpZGUgZWZmZWN0cyBhbmRcbiAgICogaXMgbm90IGlkZW1wb3RlbnQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIFRoZSByb290IERPTSBJRCBmb3IgdGhpcyBub2RlLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgY29tcHV0ZWQgbWFya3VwLlxuICAgKi9cbiAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKHJvb3RJRCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB0aGlzLl9yb290Tm9kZUlEID0gcm9vdElEO1xuICAgIGFzc2VydFZhbGlkUHJvcHModGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMpO1xuICAgIHZhciBjbG9zZVRhZyA9IG9taXR0ZWRDbG9zZVRhZ3NbdGhpcy5fdGFnXSA/ICcnIDogJzwvJyArIHRoaXMuX3RhZyArICc+JztcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3RlbmVycyh0cmFuc2FjdGlvbikgK1xuICAgICAgdGhpcy5fY3JlYXRlQ29udGVudE1hcmt1cCh0cmFuc2FjdGlvbiwgY29udGV4dCkgK1xuICAgICAgY2xvc2VUYWdcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIG9wZW4gdGFnIGFuZCBhbGwgYXR0cmlidXRlcy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaGFzIHNpZGUgZWZmZWN0cyBiZWNhdXNlIGV2ZW50cyBnZXQgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogSXRlcmF0aW5nIG92ZXIgb2JqZWN0IHByb3BlcnRpZXMgaXMgZmFzdGVyIHRoYW4gaXRlcmF0aW5nIG92ZXIgYXJyYXlzLlxuICAgKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL29iai12cy1hcnItaXRlcmF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBvZiBvcGVuaW5nIHRhZy5cbiAgICovXG4gIF9jcmVhdGVPcGVuVGFnTWFya3VwQW5kUHV0TGlzdGVuZXJzOiBmdW5jdGlvbih0cmFuc2FjdGlvbikge1xuICAgIHZhciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICAgIHZhciByZXQgPSAnPCcgKyB0aGlzLl90YWc7XG5cbiAgICBmb3IgKHZhciBwcm9wS2V5IGluIHByb3BzKSB7XG4gICAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BLZXldO1xuICAgICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIHB1dExpc3RlbmVyKHRoaXMuX3Jvb3ROb2RlSUQsIHByb3BLZXksIHByb3BWYWx1ZSwgdHJhbnNhY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgICAgaWYgKHByb3BWYWx1ZSkge1xuICAgICAgICAgICAgcHJvcFZhbHVlID0gdGhpcy5fcHJldmlvdXNTdHlsZUNvcHkgPSBhc3NpZ24oe30sIHByb3BzLnN0eWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvcFZhbHVlID0gQ1NTUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvclN0eWxlcyhwcm9wVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtYXJrdXAgPVxuICAgICAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JQcm9wZXJ0eShwcm9wS2V5LCBwcm9wVmFsdWUpO1xuICAgICAgICBpZiAobWFya3VwKSB7XG4gICAgICAgICAgcmV0ICs9ICcgJyArIG1hcmt1cDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvciBzdGF0aWMgcGFnZXMsIG5vIG5lZWQgdG8gcHV0IFJlYWN0IElEIGFuZCBjaGVja3N1bS4gU2F2ZXMgbG90cyBvZlxuICAgIC8vIGJ5dGVzLlxuICAgIGlmICh0cmFuc2FjdGlvbi5yZW5kZXJUb1N0YXRpY01hcmt1cCkge1xuICAgICAgcmV0dXJuIHJldCArICc+JztcbiAgICB9XG5cbiAgICB2YXIgbWFya3VwRm9ySUQgPSBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuY3JlYXRlTWFya3VwRm9ySUQodGhpcy5fcm9vdE5vZGVJRCk7XG4gICAgcmV0dXJuIHJldCArICcgJyArIG1hcmt1cEZvcklEICsgJz4nO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIGNvbnRlbnQgYmV0d2VlbiB0aGUgdGFncy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4ge3N0cmluZ30gQ29udGVudCBtYXJrdXAuXG4gICAqL1xuICBfY3JlYXRlQ29udGVudE1hcmt1cDogZnVuY3Rpb24odHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgcHJlZml4ID0gJyc7XG4gICAgaWYgKHRoaXMuX3RhZyA9PT0gJ2xpc3RpbmcnIHx8XG4gICAgICAgIHRoaXMuX3RhZyA9PT0gJ3ByZScgfHxcbiAgICAgICAgdGhpcy5fdGFnID09PSAndGV4dGFyZWEnKSB7XG4gICAgICAvLyBBZGQgYW4gaW5pdGlhbCBuZXdsaW5lIGJlY2F1c2UgYnJvd3NlcnMgaWdub3JlIHRoZSBmaXJzdCBuZXdsaW5lIGluXG4gICAgICAvLyBhIDxsaXN0aW5nPiwgPHByZT4sIG9yIDx0ZXh0YXJlYT4gYXMgYW4gXCJhdXRob3JpbmcgY29udmVuaWVuY2VcIiAtLSBzZWVcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHkuXG4gICAgICBwcmVmaXggPSAnXFxuJztcbiAgICB9XG5cbiAgICB2YXIgcHJvcHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIC8vIEludGVudGlvbmFsIHVzZSBvZiAhPSB0byBhdm9pZCBjYXRjaGluZyB6ZXJvL2ZhbHNlLlxuICAgIHZhciBpbm5lckhUTUwgPSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTDtcbiAgICBpZiAoaW5uZXJIVE1MICE9IG51bGwpIHtcbiAgICAgIGlmIChpbm5lckhUTUwuX19odG1sICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGlubmVySFRNTC5fX2h0bWw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb250ZW50VG9Vc2UgPVxuICAgICAgICBDT05URU5UX1RZUEVTW3R5cGVvZiBwcm9wcy5jaGlsZHJlbl0gPyBwcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgICB2YXIgY2hpbGRyZW5Ub1VzZSA9IGNvbnRlbnRUb1VzZSAhPSBudWxsID8gbnVsbCA6IHByb3BzLmNoaWxkcmVuO1xuICAgICAgaWYgKGNvbnRlbnRUb1VzZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIoY29udGVudFRvVXNlKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRyZW5Ub1VzZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBtb3VudEltYWdlcyA9IHRoaXMubW91bnRDaGlsZHJlbihcbiAgICAgICAgICBjaGlsZHJlblRvVXNlLFxuICAgICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIG1vdW50SW1hZ2VzLmpvaW4oJycpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9LFxuXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uKG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50O1xuICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgdGhpcy51cGRhdGVDb21wb25lbnQodHJhbnNhY3Rpb24sIHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCwgY29udGV4dCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBuYXRpdmUgRE9NIGNvbXBvbmVudCBhZnRlciBpdCBoYXMgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCBhbmRcbiAgICogYXR0YWNoZWQgdG8gdGhlIERPTS4gUmVjb25jaWxlcyB0aGUgcm9vdCBET00gbm9kZSwgdGhlbiByZWN1cnNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gcHJldkVsZW1lbnRcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50XG4gICAqIEBpbnRlcm5hbFxuICAgKiBAb3ZlcnJpZGFibGVcbiAgICovXG4gIHVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24odHJhbnNhY3Rpb24sIHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCwgY29udGV4dCkge1xuICAgIGFzc2VydFZhbGlkUHJvcHModGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMpO1xuICAgIHRoaXMuX3VwZGF0ZURPTVByb3BlcnRpZXMocHJldkVsZW1lbnQucHJvcHMsIHRyYW5zYWN0aW9uKTtcbiAgICB0aGlzLl91cGRhdGVET01DaGlsZHJlbihwcmV2RWxlbWVudC5wcm9wcywgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGVzIHRoZSBwcm9wZXJ0aWVzIGJ5IGRldGVjdGluZyBkaWZmZXJlbmNlcyBpbiBwcm9wZXJ0eSB2YWx1ZXMgYW5kXG4gICAqIHVwZGF0aW5nIHRoZSBET00gYXMgbmVjZXNzYXJ5LiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBzaW5nbGUgbW9zdFxuICAgKiBjcml0aWNhbCBwYXRoIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gICAqXG4gICAqIFRPRE86IEJlbmNobWFyayB3aGV0aGVyIGNoZWNraW5nIGZvciBjaGFuZ2VkIHZhbHVlcyBpbiBtZW1vcnkgYWN0dWFsbHlcbiAgICogICAgICAgaW1wcm92ZXMgcGVyZm9ybWFuY2UgKGVzcGVjaWFsbHkgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnRzKS5cbiAgICogVE9ETzogQmVuY2htYXJrIHRoZSBlZmZlY3RzIG9mIHB1dHRpbmcgdGhpcyBhdCB0aGUgdG9wIHNpbmNlIDk5JSBvZiBwcm9wc1xuICAgKiAgICAgICBkbyBub3QgY2hhbmdlIGZvciBhIGdpdmVuIHJlY29uY2lsaWF0aW9uLlxuICAgKiBUT0RPOiBCZW5jaG1hcmsgYXJlYXMgdGhhdCBjYW4gYmUgaW1wcm92ZWQgd2l0aCBjYWNoaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbGFzdFByb3BzXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICovXG4gIF91cGRhdGVET01Qcm9wZXJ0aWVzOiBmdW5jdGlvbihsYXN0UHJvcHMsIHRyYW5zYWN0aW9uKSB7XG4gICAgdmFyIG5leHRQcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICAgIHZhciBwcm9wS2V5O1xuICAgIHZhciBzdHlsZU5hbWU7XG4gICAgdmFyIHN0eWxlVXBkYXRlcztcbiAgICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgICBpZiAobmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8XG4gICAgICAgICAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIHZhciBsYXN0U3R5bGUgPSB0aGlzLl9wcmV2aW91c1N0eWxlQ29weTtcbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFN0eWxlKSB7XG4gICAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIGRlbGV0ZUxpc3RlbmVyKHRoaXMuX3Jvb3ROb2RlSUQsIHByb3BLZXkpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtwcm9wS2V5XSB8fFxuICAgICAgICAgIERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKHByb3BLZXkpKSB7XG4gICAgICAgIEJhY2tlbmRJRE9wZXJhdGlvbnMuZGVsZXRlUHJvcGVydHlCeUlEKFxuICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsXG4gICAgICAgICAgcHJvcEtleVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG4gICAgICB2YXIgbGFzdFByb3AgPSBwcm9wS2V5ID09PSBTVFlMRSA/XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5IDpcbiAgICAgICAgbGFzdFByb3BzW3Byb3BLZXldO1xuICAgICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbmV4dFByb3AgPT09IGxhc3RQcm9wKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIG5leHRQcm9wID0gdGhpcy5fcHJldmlvdXNTdHlsZUNvcHkgPSBhc3NpZ24oe30sIG5leHRQcm9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgICAgLy8gVW5zZXQgc3R5bGVzIG9uIGBsYXN0UHJvcGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RQcm9wKSB7XG4gICAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICAgICghbmV4dFByb3AgfHwgIW5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHN0eWxlVXBkYXRlcyB8fCB7fTtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVXBkYXRlIHN0eWxlcyB0aGF0IGNoYW5nZWQgc2luY2UgYGxhc3RQcm9wYC5cbiAgICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBuZXh0UHJvcCkge1xuICAgICAgICAgICAgaWYgKG5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiZcbiAgICAgICAgICAgICAgICBsYXN0UHJvcFtzdHlsZU5hbWVdICE9PSBuZXh0UHJvcFtzdHlsZU5hbWVdKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHN0eWxlVXBkYXRlcyB8fCB7fTtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSBuZXh0UHJvcFtzdHlsZU5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cbiAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBuZXh0UHJvcDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBwdXRMaXN0ZW5lcih0aGlzLl9yb290Tm9kZUlELCBwcm9wS2V5LCBuZXh0UHJvcCwgdHJhbnNhY3Rpb24pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtwcm9wS2V5XSB8fFxuICAgICAgICAgIERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKHByb3BLZXkpKSB7XG4gICAgICAgIEJhY2tlbmRJRE9wZXJhdGlvbnMudXBkYXRlUHJvcGVydHlCeUlEKFxuICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsXG4gICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICBuZXh0UHJvcFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3R5bGVVcGRhdGVzKSB7XG4gICAgICBCYWNrZW5kSURPcGVyYXRpb25zLnVwZGF0ZVN0eWxlc0J5SUQoXG4gICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsXG4gICAgICAgIHN0eWxlVXBkYXRlc1xuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY29uY2lsZXMgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHZhcmlvdXMgcHJvcGVydGllcyB0aGF0IGFmZmVjdCB0aGVcbiAgICogY2hpbGRyZW4gY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGxhc3RQcm9wc1xuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqL1xuICBfdXBkYXRlRE9NQ2hpbGRyZW46IGZ1bmN0aW9uKGxhc3RQcm9wcywgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgbmV4dFByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG5cbiAgICB2YXIgbGFzdENvbnRlbnQgPVxuICAgICAgQ09OVEVOVF9UWVBFU1t0eXBlb2YgbGFzdFByb3BzLmNoaWxkcmVuXSA/IGxhc3RQcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgdmFyIG5leHRDb250ZW50ID1cbiAgICAgIENPTlRFTlRfVFlQRVNbdHlwZW9mIG5leHRQcm9wcy5jaGlsZHJlbl0gPyBuZXh0UHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuXG4gICAgdmFyIGxhc3RIdG1sID1cbiAgICAgIGxhc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAmJlxuICAgICAgbGFzdFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbDtcbiAgICB2YXIgbmV4dEh0bWwgPVxuICAgICAgbmV4dFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmXG4gICAgICBuZXh0UHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sO1xuXG4gICAgLy8gTm90ZSB0aGUgdXNlIG9mIGAhPWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC5cbiAgICB2YXIgbGFzdENoaWxkcmVuID0gbGFzdENvbnRlbnQgIT0gbnVsbCA/IG51bGwgOiBsYXN0UHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRDb250ZW50ICE9IG51bGwgPyBudWxsIDogbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgLy8gSWYgd2UncmUgc3dpdGNoaW5nIGZyb20gY2hpbGRyZW4gdG8gY29udGVudC9odG1sIG9yIHZpY2UgdmVyc2EsIHJlbW92ZVxuICAgIC8vIHRoZSBvbGQgY29udGVudFxuICAgIHZhciBsYXN0SGFzQ29udGVudE9ySHRtbCA9IGxhc3RDb250ZW50ICE9IG51bGwgfHwgbGFzdEh0bWwgIT0gbnVsbDtcbiAgICB2YXIgbmV4dEhhc0NvbnRlbnRPckh0bWwgPSBuZXh0Q29udGVudCAhPSBudWxsIHx8IG5leHRIdG1sICE9IG51bGw7XG4gICAgaWYgKGxhc3RDaGlsZHJlbiAhPSBudWxsICYmIG5leHRDaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKG51bGwsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKGxhc3RIYXNDb250ZW50T3JIdG1sICYmICFuZXh0SGFzQ29udGVudE9ySHRtbCkge1xuICAgICAgdGhpcy51cGRhdGVUZXh0Q29udGVudCgnJyk7XG4gICAgfVxuXG4gICAgaWYgKG5leHRDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIGlmIChsYXN0Q29udGVudCAhPT0gbmV4dENvbnRlbnQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0Q29udGVudCgnJyArIG5leHRDb250ZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgIGlmIChsYXN0SHRtbCAhPT0gbmV4dEh0bWwpIHtcbiAgICAgICAgQmFja2VuZElET3BlcmF0aW9ucy51cGRhdGVJbm5lckhUTUxCeUlEKFxuICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsXG4gICAgICAgICAgbmV4dEh0bWxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRDaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKG5leHRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRGVzdHJveXMgYWxsIGV2ZW50IHJlZ2lzdHJhdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2UuIERvZXMgbm90IHJlbW92ZSBmcm9tXG4gICAqIHRoZSBET00uIFRoYXQgbXVzdCBiZSBkb25lIGJ5IHRoZSBwYXJlbnQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy51bm1vdW50Q2hpbGRyZW4oKTtcbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuZGVsZXRlQWxsTGlzdGVuZXJzKHRoaXMuX3Jvb3ROb2RlSUQpO1xuICAgIFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50LnVubW91bnRJREZyb21FbnZpcm9ubWVudCh0aGlzLl9yb290Tm9kZUlEKTtcbiAgICB0aGlzLl9yb290Tm9kZUlEID0gbnVsbDtcbiAgfVxuXG59O1xuXG5SZWFjdFBlcmYubWVhc3VyZU1ldGhvZHMoUmVhY3RET01Db21wb25lbnQsICdSZWFjdERPTUNvbXBvbmVudCcsIHtcbiAgbW91bnRDb21wb25lbnQ6ICdtb3VudENvbXBvbmVudCcsXG4gIHVwZGF0ZUNvbXBvbmVudDogJ3VwZGF0ZUNvbXBvbmVudCdcbn0pO1xuXG5hc3NpZ24oXG4gIFJlYWN0RE9NQ29tcG9uZW50LnByb3RvdHlwZSxcbiAgUmVhY3RET01Db21wb25lbnQuTWl4aW4sXG4gIFJlYWN0TXVsdGlDaGlsZC5NaXhpblxuKTtcblxuUmVhY3RET01Db21wb25lbnQuaW5qZWN0aW9uID0ge1xuICBpbmplY3RJRE9wZXJhdGlvbnM6IGZ1bmN0aW9uKElET3BlcmF0aW9ucykge1xuICAgIFJlYWN0RE9NQ29tcG9uZW50LkJhY2tlbmRJRE9wZXJhdGlvbnMgPSBCYWNrZW5kSURPcGVyYXRpb25zID0gSURPcGVyYXRpb25zO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NQ29tcG9uZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVUMDFEYjIxd2IyNWxiblF1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFJFOU5RMjl0Y0c5dVpXNTBYRzRnS2lCQWRIbHdaV05vWldOcmN5QnpkR0YwYVdNdGIyNXNlVnh1SUNvdlhHNWNiaThxSUdkc2IySmhiQ0JvWVhOUGQyNVFjbTl3WlhKMGVUcDBjblZsSUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUVOVFUxQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBOVFUxQnliM0JsY25SNVQzQmxjbUYwYVc5dWMxd2lLVHRjYm5aaGNpQkVUMDFRY205d1pYSjBlU0E5SUhKbGNYVnBjbVVvWENJdUwwUlBUVkJ5YjNCbGNuUjVYQ0lwTzF4dWRtRnlJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3lBOUlISmxjWFZwY21Vb1hDSXVMMFJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1YzF3aUtUdGNiblpoY2lCU1pXRmpkRUp5YjNkelpYSkZkbVZ1ZEVWdGFYUjBaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVKeWIzZHpaWEpGZG1WdWRFVnRhWFIwWlhKY0lpazdYRzUyWVhJZ1VtVmhZM1JEYjIxd2IyNWxiblJDY205M2MyVnlSVzUyYVhKdmJtMWxiblFnUFZ4dUlDQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiWEJ2Ym1WdWRFSnliM2R6WlhKRmJuWnBjbTl1YldWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEUxdmRXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JOYjNWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEUxMWJIUnBRMmhwYkdRZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFMTFiSFJwUTJocGJHUmNJaWs3WEc1MllYSWdVbVZoWTNSUVpYSm1JRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JRWlhKbVhDSXBPMXh1WEc1MllYSWdZWE56YVdkdUlEMGdjbVZ4ZFdseVpTaGNJaTR2VDJKcVpXTjBMbUZ6YzJsbmJsd2lLVHRjYm5aaGNpQmxjMk5oY0dWVVpYaDBRMjl1ZEdWdWRFWnZja0p5YjNkelpYSWdQU0J5WlhGMWFYSmxLRndpTGk5bGMyTmhjR1ZVWlhoMFEyOXVkR1Z1ZEVadmNrSnliM2R6WlhKY0lpazdYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVkbUZ5SUdselJYWmxiblJUZFhCd2IzSjBaV1FnUFNCeVpYRjFhWEpsS0Z3aUxpOXBjMFYyWlc1MFUzVndjRzl5ZEdWa1hDSXBPMXh1ZG1GeUlHdGxlVTltSUQwZ2NtVnhkV2x5WlNoY0lpNHZhMlY1VDJaY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JuWmhjaUJrWld4bGRHVk1hWE4wWlc1bGNpQTlJRkpsWVdOMFFuSnZkM05sY2tWMlpXNTBSVzFwZEhSbGNpNWtaV3hsZEdWTWFYTjBaVzVsY2p0Y2JuWmhjaUJzYVhOMFpXNVVieUE5SUZKbFlXTjBRbkp2ZDNObGNrVjJaVzUwUlcxcGRIUmxjaTVzYVhOMFpXNVVienRjYm5aaGNpQnlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsY3lBOUlGSmxZV04wUW5KdmQzTmxja1YyWlc1MFJXMXBkSFJsY2k1eVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjenRjYmx4dUx5OGdSbTl5SUhGMWFXTnJiSGtnYldGMFkyaHBibWNnWTJocGJHUnlaVzRnZEhsd1pTd2dkRzhnZEdWemRDQnBaaUJqWVc0Z1ltVWdkSEpsWVhSbFpDQmhjeUJqYjI1MFpXNTBMbHh1ZG1GeUlFTlBUbFJGVGxSZlZGbFFSVk1nUFNCN0ozTjBjbWx1WnljNklIUnlkV1VzSUNkdWRXMWlaWEluT2lCMGNuVmxmVHRjYmx4dWRtRnlJRk5VV1V4RklEMGdhMlY1VDJZb2UzTjBlV3hsT2lCdWRXeHNmU2s3WEc1Y2JuWmhjaUJGVEVWTlJVNVVYMDVQUkVWZlZGbFFSU0E5SURFN1hHNWNiaThxS2x4dUlDb2dUM0IwYVc5dVlXeHNlU0JwYm1wbFkzUmhZbXhsSUc5d1pYSmhkR2x2Ym5NZ1ptOXlJRzExZEdGMGFXNW5JSFJvWlNCRVQwMWNiaUFxTDF4dWRtRnlJRUpoWTJ0bGJtUkpSRTl3WlhKaGRHbHZibk1nUFNCdWRXeHNPMXh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3UDI5aWFtVmpkSDBnY0hKdmNITmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1lYTnpaWEowVm1Gc2FXUlFjbTl3Y3lod2NtOXdjeWtnZTF4dUlDQnBaaUFvSVhCeWIzQnpLU0I3WEc0Z0lDQWdjbVYwZFhKdU8xeHVJQ0I5WEc0Z0lDOHZJRTV2ZEdVZ2RHaGxJSFZ6WlNCdlppQmdQVDFnSUhkb2FXTm9JR05vWldOcmN5Qm1iM0lnYm5Wc2JDQnZjaUIxYm1SbFptbHVaV1F1WEc0Z0lHbG1JQ2h3Y205d2N5NWtZVzVuWlhKdmRYTnNlVk5sZEVsdWJtVnlTRlJOVENBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJSEJ5YjNCekxtTm9hV3hrY21WdUlEMDlJRzUxYkd3c1hHNGdJQ0FnSUNBblEyRnVJRzl1YkhrZ2MyVjBJRzl1WlNCdlppQmdZMmhwYkdSeVpXNWdJRzl5SUdCd2NtOXdjeTVrWVc1blpYSnZkWE5zZVZObGRFbHVibVZ5U0ZSTlRHQXVKMXh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvY0hKdmNITXVZMmhwYkdSeVpXNGdQVDBnYm5Wc2JDa3BPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCMGVYQmxiMllnY0hKdmNITXVaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV3Z1BUMDlJQ2R2WW1wbFkzUW5JQ1ltWEc0Z0lDQWdJQ0FuWDE5b2RHMXNKeUJwYmlCd2NtOXdjeTVrWVc1blpYSnZkWE5zZVZObGRFbHVibVZ5U0ZSTlRDeGNiaUFnSUNBZ0lDZGdjSEp2Y0hNdVpHRnVaMlZ5YjNWemJIbFRaWFJKYm01bGNraFVUVXhnSUcxMWMzUWdZbVVnYVc0Z2RHaGxJR1p2Y20wZ1lIdGZYMmgwYld3NklDNHVMbjFnTGlBbklDdGNiaUFnSUNBZ0lDZFFiR1ZoYzJVZ2RtbHphWFFnYUhSMGNITTZMeTltWWk1dFpTOXlaV0ZqZEMxcGJuWmhjbWxoYm5RdFpHRnVaMlZ5YjNWemJIa3RjMlYwTFdsdWJtVnlMV2gwYld3Z0p5QXJYRzRnSUNBZ0lDQW5abTl5SUcxdmNtVWdhVzVtYjNKdFlYUnBiMjR1SjF4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2RIbHdaVzltSUhCeWIzQnpMbVJoYm1kbGNtOTFjMng1VTJWMFNXNXVaWEpJVkUxTUlEMDlQU0FuYjJKcVpXTjBKeUFtSmx4dUlDQWdJQ2RmWDJoMGJXd25JR2x1SUhCeWIzQnpMbVJoYm1kbGNtOTFjMng1VTJWMFNXNXVaWEpJVkUxTUtTazdYRzRnSUgxY2JpQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnY0hKdmNITXVhVzV1WlhKSVZFMU1JRDA5SUc1MWJHd3NYRzRnSUNBZ0lDQW5SR2x5WldOMGJIa2djMlYwZEdsdVp5QndjbTl3WlhKMGVTQmdhVzV1WlhKSVZFMU1ZQ0JwY3lCdWIzUWdjR1Z5YldsMGRHVmtMaUFuSUN0Y2JpQWdJQ0FnSUNkR2IzSWdiVzl5WlNCcGJtWnZjbTFoZEdsdmJpd2diRzl2YTNWd0lHUnZZM1Z0Wlc1MFlYUnBiMjRnYjI0Z1lHUmhibWRsY205MWMyeDVVMlYwU1c1dVpYSklWRTFNWUM0blhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lYQnliM0J6TG1OdmJuUmxiblJGWkdsMFlXSnNaU0I4ZkNCd2NtOXdjeTVqYUdsc1pISmxiaUE5UFNCdWRXeHNMRnh1SUNBZ0lDQWdKMEVnWTI5dGNHOXVaVzUwSUdseklHQmpiMjUwWlc1MFJXUnBkR0ZpYkdWZ0lHRnVaQ0JqYjI1MFlXbHVjeUJnWTJocGJHUnlaVzVnSUcxaGJtRm5aV1FnWW5rZ0p5QXJYRzRnSUNBZ0lDQW5VbVZoWTNRdUlFbDBJR2x6SUc1dmR5QjViM1Z5SUhKbGMzQnZibk5wWW1sc2FYUjVJSFJ2SUdkMVlYSmhiblJsWlNCMGFHRjBJRzV2Ym1VZ2IyWWdKeUFyWEc0Z0lDQWdJQ0FuZEdodmMyVWdibTlrWlhNZ1lYSmxJSFZ1Wlhod1pXTjBaV1JzZVNCdGIyUnBabWxsWkNCdmNpQmtkWEJzYVdOaGRHVmtMaUJVYUdseklHbHpJQ2NnSzF4dUlDQWdJQ0FnSjNCeWIySmhZbXg1SUc1dmRDQnBiblJsYm5ScGIyNWhiQzRuWEc0Z0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNCOVhHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ2NISnZjSE11YzNSNWJHVWdQVDBnYm5Wc2JDQjhmQ0IwZVhCbGIyWWdjSEp2Y0hNdWMzUjViR1VnUFQwOUlDZHZZbXBsWTNRbkxGeHVJQ0FnSUNkVWFHVWdZSE4wZVd4bFlDQndjbTl3SUdWNGNHVmpkSE1nWVNCdFlYQndhVzVuSUdaeWIyMGdjM1I1YkdVZ2NISnZjR1Z5ZEdsbGN5QjBieUIyWVd4MVpYTXNJQ2NnSzF4dUlDQWdJQ2R1YjNRZ1lTQnpkSEpwYm1jdUlFWnZjaUJsZUdGdGNHeGxMQ0J6ZEhsc1pUMTdlMjFoY21kcGJsSnBaMmgwT2lCemNHRmphVzVuSUNzZ1hGd25aVzFjWENkOWZTQjNhR1Z1SUNjZ0sxeHVJQ0FnSUNkMWMybHVaeUJLVTFndUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIQnliM0J6TG5OMGVXeGxJRDA5SUc1MWJHd2dmSHdnZEhsd1pXOW1JSEJ5YjNCekxuTjBlV3hsSUQwOVBTQW5iMkpxWldOMEp5a3BPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQndkWFJNYVhOMFpXNWxjaWhwWkN3Z2NtVm5hWE4wY21GMGFXOXVUbUZ0WlN3Z2JHbHpkR1Z1WlhJc0lIUnlZVzV6WVdOMGFXOXVLU0I3WEc0Z0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBdkx5QkpSVGdnYUdGeklHNXZJRUZRU1NCbWIzSWdaWFpsYm5RZ1kyRndkSFZ5YVc1bklHRnVaQ0IwYUdVZ1lHOXVVMk55YjJ4c1lDQmxkbVZ1ZENCa2IyVnpiaWQwWEc0Z0lDQWdMeThnWW5WaVlteGxMbHh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnY21WbmFYTjBjbUYwYVc5dVRtRnRaU0FoUFQwZ0oyOXVVMk55YjJ4c0p5QjhmQ0JwYzBWMlpXNTBVM1Z3Y0c5eWRHVmtLQ2R6WTNKdmJHd25MQ0IwY25WbEtTeGNiaUFnSUNBZ0lDZFVhR2x6SUdKeWIzZHpaWElnWkc5bGMyNWNYQ2QwSUhOMWNIQnZjblFnZEdobElHQnZibE5qY205c2JHQWdaWFpsYm5RblhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQjlYRzRnSUhaaGNpQmpiMjUwWVdsdVpYSWdQU0JTWldGamRFMXZkVzUwTG1acGJtUlNaV0ZqZEVOdmJuUmhhVzVsY2tadmNrbEVLR2xrS1R0Y2JpQWdhV1lnS0dOdmJuUmhhVzVsY2lrZ2UxeHVJQ0FnSUhaaGNpQmtiMk1nUFNCamIyNTBZV2x1WlhJdWJtOWtaVlI1Y0dVZ1BUMDlJRVZNUlUxRlRsUmZUazlFUlY5VVdWQkZJRDljYmlBZ0lDQWdJR052Ym5SaGFXNWxjaTV2ZDI1bGNrUnZZM1Z0Wlc1MElEcGNiaUFnSUNBZ0lHTnZiblJoYVc1bGNqdGNiaUFnSUNCc2FYTjBaVzVVYnloeVpXZHBjM1J5WVhScGIyNU9ZVzFsTENCa2IyTXBPMXh1SUNCOVhHNGdJSFJ5WVc1ellXTjBhVzl1TG1kbGRGQjFkRXhwYzNSbGJtVnlVWFZsZFdVb0tTNWxibkYxWlhWbFVIVjBUR2x6ZEdWdVpYSW9YRzRnSUNBZ2FXUXNYRzRnSUNBZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlN4Y2JpQWdJQ0JzYVhOMFpXNWxjbHh1SUNBcE8xeHVmVnh1WEc0dkx5QkdiM0lnU0ZSTlRDd2dZMlZ5ZEdGcGJpQjBZV2R6SUhOb2IzVnNaQ0J2YldsMElIUm9aV2x5SUdOc2IzTmxJSFJoWnk0Z1YyVWdhMlZsY0NCaElIZG9hWFJsYkdsemRDQm1iM0pjYmk4dklIUm9iM05sSUhOd1pXTnBZV3dnWTJGelpXUWdkR0ZuY3k1Y2JseHVkbUZ5SUc5dGFYUjBaV1JEYkc5elpWUmhaM01nUFNCN1hHNGdJQ2RoY21WaEp6b2dkSEoxWlN4Y2JpQWdKMkpoYzJVbk9pQjBjblZsTEZ4dUlDQW5ZbkluT2lCMGNuVmxMRnh1SUNBblkyOXNKem9nZEhKMVpTeGNiaUFnSjJWdFltVmtKem9nZEhKMVpTeGNiaUFnSjJoeUp6b2dkSEoxWlN4Y2JpQWdKMmx0WnljNklIUnlkV1VzWEc0Z0lDZHBibkIxZENjNklIUnlkV1VzWEc0Z0lDZHJaWGxuWlc0bk9pQjBjblZsTEZ4dUlDQW5iR2x1YXljNklIUnlkV1VzWEc0Z0lDZHRaWFJoSnpvZ2RISjFaU3hjYmlBZ0ozQmhjbUZ0SnpvZ2RISjFaU3hjYmlBZ0ozTnZkWEpqWlNjNklIUnlkV1VzWEc0Z0lDZDBjbUZqYXljNklIUnlkV1VzWEc0Z0lDZDNZbkluT2lCMGNuVmxYRzRnSUM4dklFNVBWRVU2SUcxbGJuVnBkR1Z0SjNNZ1kyeHZjMlVnZEdGbklITm9iM1ZzWkNCaVpTQnZiV2wwZEdWa0xDQmlkWFFnZEdoaGRDQmpZWFZ6WlhNZ2NISnZZbXhsYlhNdVhHNTlPMXh1WEc0dkx5QlhaU0JoWTJObGNIUWdZVzU1SUhSaFp5QjBieUJpWlNCeVpXNWtaWEpsWkNCaWRYUWdjMmx1WTJVZ2RHaHBjeUJuWlhSeklHbHVhbVZqZEdWa0lHbHVkRzhnWVdKcGRISmhjbmxjYmk4dklFaFVUVXdzSUhkbElIZGhiblFnZEc4Z2JXRnJaU0J6ZFhKbElIUm9ZWFFnYVhRbmN5QmhJSE5oWm1VZ2RHRm5MbHh1THk4Z2FIUjBjRG92TDNkM2R5NTNNeTV2Y21jdlZGSXZVa1ZETFhodGJDOGpUbFF0VG1GdFpWeHVYRzUyWVhJZ1ZrRk1TVVJmVkVGSFgxSkZSMFZZSUQwZ0wxNWJZUzE2UVMxYVhWdGhMWHBCTFZvNlgxeGNMbHhjTFZ4Y1pGMHFKQzg3SUM4dklGTnBiWEJzYVdacFpXUWdjM1ZpYzJWMFhHNTJZWElnZG1Gc2FXUmhkR1ZrVkdGblEyRmphR1VnUFNCN2ZUdGNiblpoY2lCb1lYTlBkMjVRY205d1pYSjBlU0E5SUh0OUxtaGhjMDkzYmxCeWIzQmxjblI1TzF4dVhHNW1kVzVqZEdsdmJpQjJZV3hwWkdGMFpVUmhibWRsY205MWMxUmhaeWgwWVdjcElIdGNiaUFnYVdZZ0tDRm9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLSFpoYkdsa1lYUmxaRlJoWjBOaFkyaGxMQ0IwWVdjcEtTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoV1FVeEpSRjlVUVVkZlVrVkhSVmd1ZEdWemRDaDBZV2NwTENBblNXNTJZV3hwWkNCMFlXYzZJQ1Z6Snl3Z2RHRm5LU0E2SUdsdWRtRnlhV0Z1ZENoV1FVeEpSRjlVUVVkZlVrVkhSVmd1ZEdWemRDaDBZV2NwS1NrN1hHNGdJQ0FnZG1Gc2FXUmhkR1ZrVkdGblEyRmphR1ZiZEdGblhTQTlJSFJ5ZFdVN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRWdibVYzSUZKbFlXTjBJR05zWVhOeklIUm9ZWFFnYVhNZ2FXUmxiWEJ2ZEdWdWRDQmhibVFnWTJGd1lXSnNaU0J2WmlCamIyNTBZV2x1YVc1bklHOTBhR1Z5WEc0Z0tpQlNaV0ZqZENCamIyMXdiMjVsYm5SekxpQkpkQ0JoWTJObGNIUnpJR1YyWlc1MElHeHBjM1JsYm1WeWN5QmhibVFnUkU5TklIQnliM0JsY25ScFpYTWdkR2hoZENCaGNtVmNiaUFxSUhaaGJHbGtJR0ZqWTI5eVpHbHVaeUIwYnlCZ1JFOU5VSEp2Y0dWeWRIbGdMbHh1SUNwY2JpQXFJQ0F0SUVWMlpXNTBJR3hwYzNSbGJtVnljem9nWUc5dVEyeHBZMnRnTENCZ2IyNU5iM1Z6WlVSdmQyNWdMQ0JsZEdNdVhHNGdLaUFnTFNCRVQwMGdjSEp2Y0dWeWRHbGxjem9nWUdOc1lYTnpUbUZ0WldBc0lHQnVZVzFsWUN3Z1lIUnBkR3hsWUN3Z1pYUmpMbHh1SUNwY2JpQXFJRlJvWlNCZ2MzUjViR1ZnSUhCeWIzQmxjblI1SUdaMWJtTjBhVzl1Y3lCa2FXWm1aWEpsYm5Sc2VTQm1jbTl0SUhSb1pTQkVUMDBnUVZCSkxpQkpkQ0JoWTJObGNIUnpJR0Z1WEc0Z0tpQnZZbXBsWTNRZ2JXRndjR2x1WnlCdlppQnpkSGxzWlNCd2NtOXdaWEowYVdWeklIUnZJSFpoYkhWbGN5NWNiaUFxWEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0lnVW1WaFkzUkVUMDFEYjIxd2IyNWxiblJjYmlBcUlFQmxlSFJsYm1SeklGSmxZV04wVFhWc2RHbERhR2xzWkZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJTWldGamRFUlBUVU52YlhCdmJtVnVkQ2gwWVdjcElIdGNiaUFnZG1Gc2FXUmhkR1ZFWVc1blpYSnZkWE5VWVdjb2RHRm5LVHRjYmlBZ2RHaHBjeTVmZEdGbklEMGdkR0ZuTzF4dUlDQjBhR2x6TGw5eVpXNWtaWEpsWkVOb2FXeGtjbVZ1SUQwZ2JuVnNiRHRjYmlBZ2RHaHBjeTVmY0hKbGRtbHZkWE5UZEhsc1pVTnZjSGtnUFNCdWRXeHNPMXh1SUNCMGFHbHpMbDl5YjI5MFRtOWtaVWxFSUQwZ2JuVnNiRHRjYm4xY2JseHVVbVZoWTNSRVQwMURiMjF3YjI1bGJuUXVaR2x6Y0d4aGVVNWhiV1VnUFNBblVtVmhZM1JFVDAxRGIyMXdiMjVsYm5Rbk8xeHVYRzVTWldGamRFUlBUVU52YlhCdmJtVnVkQzVOYVhocGJpQTlJSHRjYmx4dUlDQmpiMjV6ZEhKMVkzUTZJR1oxYm1OMGFXOXVLR1ZzWlcxbGJuUXBJSHRjYmlBZ0lDQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkQ0E5SUdWc1pXMWxiblE3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFZGxibVZ5WVhSbGN5QnliMjkwSUhSaFp5QnRZWEpyZFhBZ2RHaGxiaUJ5WldOMWNuTmxjeTRnVkdocGN5QnRaWFJvYjJRZ2FHRnpJSE5wWkdVZ1pXWm1aV04wY3lCaGJtUmNiaUFnSUNvZ2FYTWdibTkwSUdsa1pXMXdiM1JsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NtOXZkRWxFSUZSb1pTQnliMjkwSUVSUFRTQkpSQ0JtYjNJZ2RHaHBjeUJ1YjJSbExseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjU4VW1WaFkzUlRaWEoyWlhKU1pXNWtaWEpwYm1kVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZTQlVhR1VnWTI5dGNIVjBaV1FnYldGeWEzVndMbHh1SUNBZ0tpOWNiaUFnYlc5MWJuUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLSEp2YjNSSlJDd2dkSEpoYm5OaFkzUnBiMjRzSUdOdmJuUmxlSFFwSUh0Y2JpQWdJQ0IwYUdsekxsOXliMjkwVG05a1pVbEVJRDBnY205dmRFbEVPMXh1SUNBZ0lHRnpjMlZ5ZEZaaGJHbGtVSEp2Y0hNb2RHaHBjeTVmWTNWeWNtVnVkRVZzWlcxbGJuUXVjSEp2Y0hNcE8xeHVJQ0FnSUhaaGNpQmpiRzl6WlZSaFp5QTlJRzl0YVhSMFpXUkRiRzl6WlZSaFozTmJkR2hwY3k1ZmRHRm5YU0EvSUNjbklEb2dKend2SnlBcklIUm9hWE11WDNSaFp5QXJJQ2MrSnp0Y2JpQWdJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lDQWdkR2hwY3k1ZlkzSmxZWFJsVDNCbGJsUmhaMDFoY210MWNFRnVaRkIxZEV4cGMzUmxibVZ5Y3loMGNtRnVjMkZqZEdsdmJpa2dLMXh1SUNBZ0lDQWdkR2hwY3k1ZlkzSmxZWFJsUTI5dWRHVnVkRTFoY210MWNDaDBjbUZ1YzJGamRHbHZiaXdnWTI5dWRHVjRkQ2tnSzF4dUlDQWdJQ0FnWTJ4dmMyVlVZV2RjYmlBZ0lDQXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1Z6SUcxaGNtdDFjQ0JtYjNJZ2RHaGxJRzl3Wlc0Z2RHRm5JR0Z1WkNCaGJHd2dZWFIwY21saWRYUmxjeTVjYmlBZ0lDcGNiaUFnSUNvZ1ZHaHBjeUJ0WlhSb2IyUWdhR0Z6SUhOcFpHVWdaV1ptWldOMGN5QmlaV05oZFhObElHVjJaVzUwY3lCblpYUWdjbVZuYVhOMFpYSmxaQzVjYmlBZ0lDcGNiaUFnSUNvZ1NYUmxjbUYwYVc1bklHOTJaWElnYjJKcVpXTjBJSEJ5YjNCbGNuUnBaWE1nYVhNZ1ptRnpkR1Z5SUhSb1lXNGdhWFJsY21GMGFXNW5JRzkyWlhJZ1lYSnlZWGx6TGx4dUlDQWdLaUJBYzJWbElHaDBkSEE2THk5cWMzQmxjbVl1WTI5dEwyOWlhaTEyY3kxaGNuSXRhWFJsY21GMGFXOXVYRzRnSUNBcVhHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJueFNaV0ZqZEZObGNuWmxjbEpsYm1SbGNtbHVaMVJ5WVc1ellXTjBhVzl1ZlNCMGNtRnVjMkZqZEdsdmJseHVJQ0FnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5SUUxaGNtdDFjQ0J2WmlCdmNHVnVhVzVuSUhSaFp5NWNiaUFnSUNvdlhHNGdJRjlqY21WaGRHVlBjR1Z1VkdGblRXRnlhM1Z3UVc1a1VIVjBUR2x6ZEdWdVpYSnpPaUJtZFc1amRHbHZiaWgwY21GdWMyRmpkR2x2YmlrZ2UxeHVJQ0FnSUhaaGNpQndjbTl3Y3lBOUlIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMbkJ5YjNCek8xeHVJQ0FnSUhaaGNpQnlaWFFnUFNBblBDY2dLeUIwYUdsekxsOTBZV2M3WEc1Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJ3Y205d1MyVjVJR2x1SUhCeWIzQnpLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lYQnliM0J6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZG1GeUlIQnliM0JXWVd4MVpTQTlJSEJ5YjNCelczQnliM0JMWlhsZE8xeHVJQ0FnSUNBZ2FXWWdLSEJ5YjNCV1lXeDFaU0E5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tISmxaMmx6ZEhKaGRHbHZiazVoYldWTmIyUjFiR1Z6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUhCMWRFeHBjM1JsYm1WeUtIUm9hWE11WDNKdmIzUk9iMlJsU1VRc0lIQnliM0JMWlhrc0lIQnliM0JXWVd4MVpTd2dkSEpoYm5OaFkzUnBiMjRwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIQnliM0JMWlhrZ1BUMDlJRk5VV1V4RktTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tIQnliM0JXWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NISnZjRlpoYkhWbElEMGdkR2hwY3k1ZmNISmxkbWx2ZFhOVGRIbHNaVU52Y0hrZ1BTQmhjM05wWjI0b2UzMHNJSEJ5YjNCekxuTjBlV3hsS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnY0hKdmNGWmhiSFZsSUQwZ1ExTlRVSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpMbU55WldGMFpVMWhjbXQxY0VadmNsTjBlV3hsY3lod2NtOXdWbUZzZFdVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSFpoY2lCdFlYSnJkWEFnUFZ4dUlDQWdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVUM0JsY21GMGFXOXVjeTVqY21WaGRHVk5ZWEpyZFhCR2IzSlFjbTl3WlhKMGVTaHdjbTl3UzJWNUxDQndjbTl3Vm1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0JwWmlBb2JXRnlhM1Z3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwSUNzOUlDY2dKeUFySUcxaGNtdDFjRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUVadmNpQnpkR0YwYVdNZ2NHRm5aWE1zSUc1dklHNWxaV1FnZEc4Z2NIVjBJRkpsWVdOMElFbEVJR0Z1WkNCamFHVmphM04xYlM0Z1UyRjJaWE1nYkc5MGN5QnZabHh1SUNBZ0lDOHZJR0o1ZEdWekxseHVJQ0FnSUdsbUlDaDBjbUZ1YzJGamRHbHZiaTV5Wlc1a1pYSlViMU4wWVhScFkwMWhjbXQxY0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhKbGRDQXJJQ2MrSnp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ2JXRnlhM1Z3Um05eVNVUWdQU0JFVDAxUWNtOXdaWEowZVU5d1pYSmhkR2x2Ym5NdVkzSmxZWFJsVFdGeWEzVndSbTl5U1VRb2RHaHBjeTVmY205dmRFNXZaR1ZKUkNrN1hHNGdJQ0FnY21WMGRYSnVJSEpsZENBcklDY2dKeUFySUcxaGNtdDFjRVp2Y2tsRUlDc2dKejRuTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRjbVZoZEdWeklHMWhjbXQxY0NCbWIzSWdkR2hsSUdOdmJuUmxiblFnWW1WMGQyVmxiaUIwYUdVZ2RHRm5jeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQnlhWFpoZEdWY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVmRkpsWVdOMFUyVnlkbVZ5VW1WdVpHVnlhVzVuVkhKaGJuTmhZM1JwYjI1OUlIUnlZVzV6WVdOMGFXOXVYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCamIyNTBaWGgwWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMGdRMjl1ZEdWdWRDQnRZWEpyZFhBdVhHNGdJQ0FxTDF4dUlDQmZZM0psWVhSbFEyOXVkR1Z1ZEUxaGNtdDFjRG9nWm5WdVkzUnBiMjRvZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcElIdGNiaUFnSUNCMllYSWdjSEpsWm1sNElEMGdKeWM3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYM1JoWnlBOVBUMGdKMnhwYzNScGJtY25JSHg4WEc0Z0lDQWdJQ0FnSUhSb2FYTXVYM1JoWnlBOVBUMGdKM0J5WlNjZ2ZIeGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmRHRm5JRDA5UFNBbmRHVjRkR0Z5WldFbktTQjdYRzRnSUNBZ0lDQXZMeUJCWkdRZ1lXNGdhVzVwZEdsaGJDQnVaWGRzYVc1bElHSmxZMkYxYzJVZ1luSnZkM05sY25NZ2FXZHViM0psSUhSb1pTQm1hWEp6ZENCdVpYZHNhVzVsSUdsdVhHNGdJQ0FnSUNBdkx5QmhJRHhzYVhOMGFXNW5QaXdnUEhCeVpUNHNJRzl5SUR4MFpYaDBZWEpsWVQ0Z1lYTWdZVzRnWENKaGRYUm9iM0pwYm1jZ1kyOXVkbVZ1YVdWdVkyVmNJaUF0TFNCelpXVmNiaUFnSUNBZ0lDOHZJR2gwZEhCek9pOHZhSFJ0YkM1emNHVmpMbmRvWVhSM1p5NXZjbWN2YlhWc2RHbHdZV2RsTDNONWJuUmhlQzVvZEcxc0kzQmhjbk5wYm1jdGJXRnBiaTFwYm1KdlpIa3VYRzRnSUNBZ0lDQndjbVZtYVhnZ1BTQW5YRnh1Snp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ2NISnZjSE1nUFNCMGFHbHpMbDlqZFhKeVpXNTBSV3hsYldWdWRDNXdjbTl3Y3p0Y2JseHVJQ0FnSUM4dklFbHVkR1Z1ZEdsdmJtRnNJSFZ6WlNCdlppQWhQU0IwYnlCaGRtOXBaQ0JqWVhSamFHbHVaeUI2WlhKdkwyWmhiSE5sTGx4dUlDQWdJSFpoY2lCcGJtNWxja2hVVFV3Z1BTQndjbTl3Y3k1a1lXNW5aWEp2ZFhOc2VWTmxkRWx1Ym1WeVNGUk5URHRjYmlBZ0lDQnBaaUFvYVc1dVpYSklWRTFNSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUdsbUlDaHBibTVsY2toVVRVd3VYMTlvZEcxc0lDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIQnlaV1pwZUNBcklHbHVibVZ5U0ZSTlRDNWZYMmgwYld3N1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFpoY2lCamIyNTBaVzUwVkc5VmMyVWdQVnh1SUNBZ0lDQWdJQ0JEVDA1VVJVNVVYMVJaVUVWVFczUjVjR1Z2WmlCd2NtOXdjeTVqYUdsc1pISmxibDBnUHlCd2NtOXdjeTVqYUdsc1pISmxiaUE2SUc1MWJHdzdYRzRnSUNBZ0lDQjJZWElnWTJocGJHUnlaVzVVYjFWelpTQTlJR052Ym5SbGJuUlViMVZ6WlNBaFBTQnVkV3hzSUQ4Z2JuVnNiQ0E2SUhCeWIzQnpMbU5vYVd4a2NtVnVPMXh1SUNBZ0lDQWdhV1lnS0dOdmJuUmxiblJVYjFWelpTQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQndjbVZtYVhnZ0t5QmxjMk5oY0dWVVpYaDBRMjl1ZEdWdWRFWnZja0p5YjNkelpYSW9ZMjl1ZEdWdWRGUnZWWE5sS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1kyaHBiR1J5Wlc1VWIxVnpaU0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQnRiM1Z1ZEVsdFlXZGxjeUE5SUhSb2FYTXViVzkxYm5SRGFHbHNaSEpsYmloY2JpQWdJQ0FnSUNBZ0lDQmphR2xzWkhKbGJsUnZWWE5sTEZ4dUlDQWdJQ0FnSUNBZ0lIUnlZVzV6WVdOMGFXOXVMRnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmxlSFJjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhCeVpXWnBlQ0FySUcxdmRXNTBTVzFoWjJWekxtcHZhVzRvSnljcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjSEpsWm1sNE8xeHVJQ0I5TEZ4dVhHNGdJSEpsWTJWcGRtVkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLRzVsZUhSRmJHVnRaVzUwTENCMGNtRnVjMkZqZEdsdmJpd2dZMjl1ZEdWNGRDa2dlMXh1SUNBZ0lIWmhjaUJ3Y21WMlJXeGxiV1Z1ZENBOUlIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBPMXh1SUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBJRDBnYm1WNGRFVnNaVzFsYm5RN1hHNGdJQ0FnZEdocGN5NTFjR1JoZEdWRGIyMXdiMjVsYm5Rb2RISmhibk5oWTNScGIyNHNJSEJ5WlhaRmJHVnRaVzUwTENCdVpYaDBSV3hsYldWdWRDd2dZMjl1ZEdWNGRDazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWd1pHRjBaWE1nWVNCdVlYUnBkbVVnUkU5TklHTnZiWEJ2Ym1WdWRDQmhablJsY2lCcGRDQm9ZWE1nWVd4eVpXRmtlU0JpWldWdUlHRnNiRzlqWVhSbFpDQmhibVJjYmlBZ0lDb2dZWFIwWVdOb1pXUWdkRzhnZEdobElFUlBUUzRnVW1WamIyNWphV3hsY3lCMGFHVWdjbTl2ZENCRVQwMGdibTlrWlN3Z2RHaGxiaUJ5WldOMWNuTmxjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1ZlNCMGNtRnVjMkZqZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBSV3hsYldWdWRIMGdjSEpsZGtWc1pXMWxiblJjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUc1bGVIUkZiR1Z0Wlc1MFhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaUJBYjNabGNuSnBaR0ZpYkdWY2JpQWdJQ292WEc0Z0lIVndaR0YwWlVOdmJYQnZibVZ1ZERvZ1puVnVZM1JwYjI0b2RISmhibk5oWTNScGIyNHNJSEJ5WlhaRmJHVnRaVzUwTENCdVpYaDBSV3hsYldWdWRDd2dZMjl1ZEdWNGRDa2dlMXh1SUNBZ0lHRnpjMlZ5ZEZaaGJHbGtVSEp2Y0hNb2RHaHBjeTVmWTNWeWNtVnVkRVZzWlcxbGJuUXVjSEp2Y0hNcE8xeHVJQ0FnSUhSb2FYTXVYM1Z3WkdGMFpVUlBUVkJ5YjNCbGNuUnBaWE1vY0hKbGRrVnNaVzFsYm5RdWNISnZjSE1zSUhSeVlXNXpZV04wYVc5dUtUdGNiaUFnSUNCMGFHbHpMbDkxY0dSaGRHVkVUMDFEYUdsc1pISmxiaWh3Y21WMlJXeGxiV1Z1ZEM1d2NtOXdjeXdnZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWldOdmJtTnBiR1Z6SUhSb1pTQndjbTl3WlhKMGFXVnpJR0o1SUdSbGRHVmpkR2x1WnlCa2FXWm1aWEpsYm1ObGN5QnBiaUJ3Y205d1pYSjBlU0IyWVd4MVpYTWdZVzVrWEc0Z0lDQXFJSFZ3WkdGMGFXNW5JSFJvWlNCRVQwMGdZWE1nYm1WalpYTnpZWEo1TGlCVWFHbHpJR1oxYm1OMGFXOXVJR2x6SUhCeWIySmhZbXg1SUhSb1pTQnphVzVuYkdVZ2JXOXpkRnh1SUNBZ0tpQmpjbWwwYVdOaGJDQndZWFJvSUdadmNpQndaWEptYjNKdFlXNWpaU0J2Y0hScGJXbDZZWFJwYjI0dVhHNGdJQ0FxWEc0Z0lDQXFJRlJQUkU4NklFSmxibU5vYldGeWF5QjNhR1YwYUdWeUlHTm9aV05yYVc1bklHWnZjaUJqYUdGdVoyVmtJSFpoYkhWbGN5QnBiaUJ0WlcxdmNua2dZV04wZFdGc2JIbGNiaUFnSUNvZ0lDQWdJQ0FnYVcxd2NtOTJaWE1nY0dWeVptOXliV0Z1WTJVZ0tHVnpjR1ZqYVdGc2JIa2djM1JoZEdsallXeHNlU0J3YjNOcGRHbHZibVZrSUdWc1pXMWxiblJ6S1M1Y2JpQWdJQ29nVkU5RVR6b2dRbVZ1WTJodFlYSnJJSFJvWlNCbFptWmxZM1J6SUc5bUlIQjFkSFJwYm1jZ2RHaHBjeUJoZENCMGFHVWdkRzl3SUhOcGJtTmxJRGs1SlNCdlppQndjbTl3YzF4dUlDQWdLaUFnSUNBZ0lDQmtieUJ1YjNRZ1kyaGhibWRsSUdadmNpQmhJR2RwZG1WdUlISmxZMjl1WTJsc2FXRjBhVzl1TGx4dUlDQWdLaUJVVDBSUE9pQkNaVzVqYUcxaGNtc2dZWEpsWVhNZ2RHaGhkQ0JqWVc0Z1ltVWdhVzF3Y205MlpXUWdkMmwwYUNCallXTm9hVzVuTGx4dUlDQWdLbHh1SUNBZ0tpQkFjSEpwZG1GMFpWeHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYkdGemRGQnliM0J6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb3ZYRzRnSUY5MWNHUmhkR1ZFVDAxUWNtOXdaWEowYVdWek9pQm1kVzVqZEdsdmJpaHNZWE4wVUhKdmNITXNJSFJ5WVc1ellXTjBhVzl1S1NCN1hHNGdJQ0FnZG1GeUlHNWxlSFJRY205d2N5QTlJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTG5CeWIzQnpPMXh1SUNBZ0lIWmhjaUJ3Y205d1MyVjVPMXh1SUNBZ0lIWmhjaUJ6ZEhsc1pVNWhiV1U3WEc0Z0lDQWdkbUZ5SUhOMGVXeGxWWEJrWVhSbGN6dGNiaUFnSUNCbWIzSWdLSEJ5YjNCTFpYa2dhVzRnYkdGemRGQnliM0J6S1NCN1hHNGdJQ0FnSUNCcFppQW9ibVY0ZEZCeWIzQnpMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JMWlhrcElIeDhYRzRnSUNBZ0lDQWdJQ0FoYkdGemRGQnliM0J6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tIQnliM0JMWlhrZ1BUMDlJRk5VV1V4RktTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCc1lYTjBVM1I1YkdVZ1BTQjBhR2x6TGw5d2NtVjJhVzkxYzFOMGVXeGxRMjl3ZVR0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2h6ZEhsc1pVNWhiV1VnYVc0Z2JHRnpkRk4wZVd4bEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHeGhjM1JUZEhsc1pTNW9ZWE5QZDI1UWNtOXdaWEowZVNoemRIbHNaVTVoYldVcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCemRIbHNaVlZ3WkdGMFpYTWdQU0J6ZEhsc1pWVndaR0YwWlhNZ2ZId2dlMzA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkSGxzWlZWd1pHRjBaWE5iYzNSNWJHVk9ZVzFsWFNBOUlDY25PMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5d2NtVjJhVzkxYzFOMGVXeGxRMjl3ZVNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hKbFoybHpkSEpoZEdsdmJrNWhiV1ZOYjJSMWJHVnpMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JMWlhrcEtTQjdYRzRnSUNBZ0lDQWdJR1JsYkdWMFpVeHBjM1JsYm1WeUtIUm9hWE11WDNKdmIzUk9iMlJsU1VRc0lIQnliM0JMWlhrcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGNiaUFnSUNBZ0lDQWdJQ0JFVDAxUWNtOXdaWEowZVM1cGMxTjBZVzVrWVhKa1RtRnRaVnR3Y205d1MyVjVYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWx6UTNWemRHOXRRWFIwY21saWRYUmxLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUVKaFkydGxibVJKUkU5d1pYSmhkR2x2Ym5NdVpHVnNaWFJsVUhKdmNHVnlkSGxDZVVsRUtGeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXNYRzRnSUNBZ0lDQWdJQ0FnY0hKdmNFdGxlVnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQm1iM0lnS0hCeWIzQkxaWGtnYVc0Z2JtVjRkRkJ5YjNCektTQjdYRzRnSUNBZ0lDQjJZWElnYm1WNGRGQnliM0FnUFNCdVpYaDBVSEp2Y0hOYmNISnZjRXRsZVYwN1hHNGdJQ0FnSUNCMllYSWdiR0Z6ZEZCeWIzQWdQU0J3Y205d1MyVjVJRDA5UFNCVFZGbE1SU0EvWEc0Z0lDQWdJQ0FnSUhSb2FYTXVYM0J5WlhacGIzVnpVM1I1YkdWRGIzQjVJRHBjYmlBZ0lDQWdJQ0FnYkdGemRGQnliM0J6VzNCeWIzQkxaWGxkTzF4dUlDQWdJQ0FnYVdZZ0tDRnVaWGgwVUhKdmNITXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRXRsZVNrZ2ZId2dibVY0ZEZCeWIzQWdQVDA5SUd4aGMzUlFjbTl3S1NCN1hHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSEJ5YjNCTFpYa2dQVDA5SUZOVVdVeEZLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHVaWGgwVUhKdmNDa2dlMXh1SUNBZ0lDQWdJQ0FnSUc1bGVIUlFjbTl3SUQwZ2RHaHBjeTVmY0hKbGRtbHZkWE5UZEhsc1pVTnZjSGtnUFNCaGMzTnBaMjRvZTMwc0lHNWxlSFJRY205d0tUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxsOXdjbVYyYVc5MWMxTjBlV3hsUTI5d2VTQTlJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhV1lnS0d4aGMzUlFjbTl3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVlc1elpYUWdjM1I1YkdWeklHOXVJR0JzWVhOMFVISnZjR0FnWW5WMElHNXZkQ0J2YmlCZ2JtVjRkRkJ5YjNCZ0xseHVJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2MzUjViR1ZPWVcxbElHbHVJR3hoYzNSUWNtOXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYkdGemRGQnliM0F1YUdGelQzZHVVSEp2Y0dWeWRIa29jM1I1YkdWT1lXMWxLU0FtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNnaGJtVjRkRkJ5YjNBZ2ZId2dJVzVsZUhSUWNtOXdMbWhoYzA5M2JsQnliM0JsY25SNUtITjBlV3hsVG1GdFpTa3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE4wZVd4bFZYQmtZWFJsY3lBOUlITjBlV3hsVlhCa1lYUmxjeUI4ZkNCN2ZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2MzUjViR1ZWY0dSaGRHVnpXM04wZVd4bFRtRnRaVjBnUFNBbkp6dGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1ZYQmtZWFJsSUhOMGVXeGxjeUIwYUdGMElHTm9ZVzVuWldRZ2MybHVZMlVnWUd4aGMzUlFjbTl3WUM1Y2JpQWdJQ0FnSUNBZ0lDQm1iM0lnS0hOMGVXeGxUbUZ0WlNCcGJpQnVaWGgwVUhKdmNDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzVsZUhSUWNtOXdMbWhoYzA5M2JsQnliM0JsY25SNUtITjBlV3hsVG1GdFpTa2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWVhOMFVISnZjRnR6ZEhsc1pVNWhiV1ZkSUNFOVBTQnVaWGgwVUhKdmNGdHpkSGxzWlU1aGJXVmRLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE4wZVd4bFZYQmtZWFJsY3lBOUlITjBlV3hsVlhCa1lYUmxjeUI4ZkNCN2ZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2MzUjViR1ZWY0dSaGRHVnpXM04wZVd4bFRtRnRaVjBnUFNCdVpYaDBVSEp2Y0Z0emRIbHNaVTVoYldWZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCU1pXeHBaWE1nYjI0Z1lIVndaR0YwWlZOMGVXeGxjMEo1U1VSZ0lHNXZkQ0J0ZFhSaGRHbHVaeUJnYzNSNWJHVlZjR1JoZEdWellDNWNiaUFnSUNBZ0lDQWdJQ0J6ZEhsc1pWVndaR0YwWlhNZ1BTQnVaWGgwVUhKdmNEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGN5NW9ZWE5QZDI1UWNtOXdaWEowZVNod2NtOXdTMlY1S1NrZ2UxeHVJQ0FnSUNBZ0lDQndkWFJNYVhOMFpXNWxjaWgwYUdsekxsOXliMjkwVG05a1pVbEVMQ0J3Y205d1MyVjVMQ0J1WlhoMFVISnZjQ3dnZEhKaGJuTmhZM1JwYjI0cE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGNiaUFnSUNBZ0lDQWdJQ0JFVDAxUWNtOXdaWEowZVM1cGMxTjBZVzVrWVhKa1RtRnRaVnR3Y205d1MyVjVYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWx6UTNWemRHOXRRWFIwY21saWRYUmxLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUVKaFkydGxibVJKUkU5d1pYSmhkR2x2Ym5NdWRYQmtZWFJsVUhKdmNHVnlkSGxDZVVsRUtGeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXNYRzRnSUNBZ0lDQWdJQ0FnY0hKdmNFdGxlU3hjYmlBZ0lDQWdJQ0FnSUNCdVpYaDBVSEp2Y0Z4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2MzUjViR1ZWY0dSaGRHVnpLU0I3WEc0Z0lDQWdJQ0JDWVdOclpXNWtTVVJQY0dWeVlYUnBiMjV6TG5Wd1pHRjBaVk4wZVd4bGMwSjVTVVFvWEc0Z0lDQWdJQ0FnSUhSb2FYTXVYM0p2YjNST2IyUmxTVVFzWEc0Z0lDQWdJQ0FnSUhOMGVXeGxWWEJrWVhSbGMxeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsWTI5dVkybHNaWE1nZEdobElHTm9hV3hrY21WdUlIZHBkR2dnZEdobElIWmhjbWx2ZFhNZ2NISnZjR1Z5ZEdsbGN5QjBhR0YwSUdGbVptVmpkQ0IwYUdWY2JpQWdJQ29nWTJocGJHUnlaVzRnWTI5dWRHVnVkQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUd4aGMzUlFjbTl3YzF4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNTlJSFJ5WVc1ellXTjBhVzl1WEc0Z0lDQXFMMXh1SUNCZmRYQmtZWFJsUkU5TlEyaHBiR1J5Wlc0NklHWjFibU4wYVc5dUtHeGhjM1JRY205d2N5d2dkSEpoYm5OaFkzUnBiMjRzSUdOdmJuUmxlSFFwSUh0Y2JpQWdJQ0IyWVhJZ2JtVjRkRkJ5YjNCeklEMGdkR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1Y0hKdmNITTdYRzVjYmlBZ0lDQjJZWElnYkdGemRFTnZiblJsYm5RZ1BWeHVJQ0FnSUNBZ1EwOU9WRVZPVkY5VVdWQkZVMXQwZVhCbGIyWWdiR0Z6ZEZCeWIzQnpMbU5vYVd4a2NtVnVYU0EvSUd4aGMzUlFjbTl3Y3k1amFHbHNaSEpsYmlBNklHNTFiR3c3WEc0Z0lDQWdkbUZ5SUc1bGVIUkRiMjUwWlc1MElEMWNiaUFnSUNBZ0lFTlBUbFJGVGxSZlZGbFFSVk5iZEhsd1pXOW1JRzVsZUhSUWNtOXdjeTVqYUdsc1pISmxibDBnUHlCdVpYaDBVSEp2Y0hNdVkyaHBiR1J5Wlc0Z09pQnVkV3hzTzF4dVhHNGdJQ0FnZG1GeUlHeGhjM1JJZEcxc0lEMWNiaUFnSUNBZ0lHeGhjM1JRY205d2N5NWtZVzVuWlhKdmRYTnNlVk5sZEVsdWJtVnlTRlJOVENBbUpseHVJQ0FnSUNBZ2JHRnpkRkJ5YjNCekxtUmhibWRsY205MWMyeDVVMlYwU1c1dVpYSklWRTFNTGw5ZmFIUnRiRHRjYmlBZ0lDQjJZWElnYm1WNGRFaDBiV3dnUFZ4dUlDQWdJQ0FnYm1WNGRGQnliM0J6TG1SaGJtZGxjbTkxYzJ4NVUyVjBTVzV1WlhKSVZFMU1JQ1ltWEc0Z0lDQWdJQ0J1WlhoMFVISnZjSE11WkdGdVoyVnliM1Z6YkhsVFpYUkpibTVsY2toVVRVd3VYMTlvZEcxc08xeHVYRzRnSUNBZ0x5OGdUbTkwWlNCMGFHVWdkWE5sSUc5bUlHQWhQV0FnZDJocFkyZ2dZMmhsWTJ0eklHWnZjaUJ1ZFd4c0lHOXlJSFZ1WkdWbWFXNWxaQzVjYmlBZ0lDQjJZWElnYkdGemRFTm9hV3hrY21WdUlEMGdiR0Z6ZEVOdmJuUmxiblFnSVQwZ2JuVnNiQ0EvSUc1MWJHd2dPaUJzWVhOMFVISnZjSE11WTJocGJHUnlaVzQ3WEc0Z0lDQWdkbUZ5SUc1bGVIUkRhR2xzWkhKbGJpQTlJRzVsZUhSRGIyNTBaVzUwSUNFOUlHNTFiR3dnUHlCdWRXeHNJRG9nYm1WNGRGQnliM0J6TG1Ob2FXeGtjbVZ1TzF4dVhHNGdJQ0FnTHk4Z1NXWWdkMlVuY21VZ2MzZHBkR05vYVc1bklHWnliMjBnWTJocGJHUnlaVzRnZEc4Z1kyOXVkR1Z1ZEM5b2RHMXNJRzl5SUhacFkyVWdkbVZ5YzJFc0lISmxiVzkyWlZ4dUlDQWdJQzh2SUhSb1pTQnZiR1FnWTI5dWRHVnVkRnh1SUNBZ0lIWmhjaUJzWVhOMFNHRnpRMjl1ZEdWdWRFOXlTSFJ0YkNBOUlHeGhjM1JEYjI1MFpXNTBJQ0U5SUc1MWJHd2dmSHdnYkdGemRFaDBiV3dnSVQwZ2JuVnNiRHRjYmlBZ0lDQjJZWElnYm1WNGRFaGhjME52Ym5SbGJuUlBja2gwYld3Z1BTQnVaWGgwUTI5dWRHVnVkQ0FoUFNCdWRXeHNJSHg4SUc1bGVIUklkRzFzSUNFOUlHNTFiR3c3WEc0Z0lDQWdhV1lnS0d4aGMzUkRhR2xzWkhKbGJpQWhQU0J1ZFd4c0lDWW1JRzVsZUhSRGFHbHNaSEpsYmlBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCMGFHbHpMblZ3WkdGMFpVTm9hV3hrY21WdUtHNTFiR3dzSUhSeVlXNXpZV04wYVc5dUxDQmpiMjUwWlhoMEtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHeGhjM1JJWVhORGIyNTBaVzUwVDNKSWRHMXNJQ1ltSUNGdVpYaDBTR0Z6UTI5dWRHVnVkRTl5U0hSdGJDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1MWNHUmhkR1ZVWlhoMFEyOXVkR1Z1ZENnbkp5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzVsZUhSRGIyNTBaVzUwSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUdsbUlDaHNZWE4wUTI5dWRHVnVkQ0FoUFQwZ2JtVjRkRU52Ym5SbGJuUXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTFjR1JoZEdWVVpYaDBRMjl1ZEdWdWRDZ25KeUFySUc1bGVIUkRiMjUwWlc1MEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHNWxlSFJJZEcxc0lDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHbG1JQ2hzWVhOMFNIUnRiQ0FoUFQwZ2JtVjRkRWgwYld3cElIdGNiaUFnSUNBZ0lDQWdRbUZqYTJWdVpFbEVUM0JsY21GMGFXOXVjeTUxY0dSaGRHVkpibTVsY2toVVRVeENlVWxFS0Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11WDNKdmIzUk9iMlJsU1VRc1hHNGdJQ0FnSUNBZ0lDQWdibVY0ZEVoMGJXeGNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzVsZUhSRGFHbHNaSEpsYmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCMGFHbHpMblZ3WkdGMFpVTm9hV3hrY21WdUtHNWxlSFJEYUdsc1pISmxiaXdnZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSR1Z6ZEhKdmVYTWdZV3hzSUdWMlpXNTBJSEpsWjJsemRISmhkR2x2Ym5NZ1ptOXlJSFJvYVhNZ2FXNXpkR0Z1WTJVdUlFUnZaWE1nYm05MElISmxiVzkyWlNCbWNtOXRYRzRnSUNBcUlIUm9aU0JFVDAwdUlGUm9ZWFFnYlhWemRDQmlaU0JrYjI1bElHSjVJSFJvWlNCd1lYSmxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdkVzV0YjNWdWRFTnZiWEJ2Ym1WdWREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1MWJtMXZkVzUwUTJocGJHUnlaVzRvS1R0Y2JpQWdJQ0JTWldGamRFSnliM2R6WlhKRmRtVnVkRVZ0YVhSMFpYSXVaR1ZzWlhSbFFXeHNUR2x6ZEdWdVpYSnpLSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXBPMXh1SUNBZ0lGSmxZV04wUTI5dGNHOXVaVzUwUW5KdmQzTmxja1Z1ZG1seWIyNXRaVzUwTG5WdWJXOTFiblJKUkVaeWIyMUZiblpwY205dWJXVnVkQ2gwYUdsekxsOXliMjkwVG05a1pVbEVLVHRjYmlBZ0lDQjBhR2x6TGw5eWIyOTBUbTlrWlVsRUlEMGdiblZzYkR0Y2JpQWdmVnh1WEc1OU8xeHVYRzVTWldGamRGQmxjbVl1YldWaGMzVnlaVTFsZEdodlpITW9VbVZoWTNSRVQwMURiMjF3YjI1bGJuUXNJQ2RTWldGamRFUlBUVU52YlhCdmJtVnVkQ2NzSUh0Y2JpQWdiVzkxYm5SRGIyMXdiMjVsYm5RNklDZHRiM1Z1ZEVOdmJYQnZibVZ1ZENjc1hHNGdJSFZ3WkdGMFpVTnZiWEJ2Ym1WdWREb2dKM1Z3WkdGMFpVTnZiWEJ2Ym1WdWRDZGNibjBwTzF4dVhHNWhjM05wWjI0b1hHNGdJRkpsWVdOMFJFOU5RMjl0Y0c5dVpXNTBMbkJ5YjNSdmRIbHdaU3hjYmlBZ1VtVmhZM1JFVDAxRGIyMXdiMjVsYm5RdVRXbDRhVzRzWEc0Z0lGSmxZV04wVFhWc2RHbERhR2xzWkM1TmFYaHBibHh1S1R0Y2JseHVVbVZoWTNSRVQwMURiMjF3YjI1bGJuUXVhVzVxWldOMGFXOXVJRDBnZTF4dUlDQnBibXBsWTNSSlJFOXdaWEpoZEdsdmJuTTZJR1oxYm1OMGFXOXVLRWxFVDNCbGNtRjBhVzl1Y3lrZ2UxeHVJQ0FnSUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwTGtKaFkydGxibVJKUkU5d1pYSmhkR2x2Ym5NZ1BTQkNZV05yWlc1a1NVUlBjR1Z5WVhScGIyNXpJRDBnU1VSUGNHVnlZWFJwYjI1ek8xeHVJQ0I5WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOMFJFOU5RMjl0Y0c5dVpXNTBPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUZvcm1cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIExvY2FsRXZlbnRUcmFwTWl4aW4gPSByZXF1aXJlKFwiLi9Mb2NhbEV2ZW50VHJhcE1peGluXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIgZm9ybSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdmb3JtJyk7XG5cbi8qKlxuICogU2luY2Ugb25TdWJtaXQgZG9lc24ndCBidWJibGUgT1IgY2FwdHVyZSBvbiB0aGUgdG9wIGxldmVsIGluIElFOCwgd2UgbmVlZFxuICogdG8gY2FwdHVyZSBpdCBvbiB0aGUgPGZvcm0+IGVsZW1lbnQgaXRzZWxmLiBUaGVyZSBhcmUgbG90cyBvZiBoYWNrcyB3ZSBjb3VsZFxuICogZG8gdG8gYWNjb21wbGlzaCB0aGlzLCBidXQgdGhlIG1vc3QgcmVsaWFibGUgaXMgdG8gbWFrZSA8Zm9ybT4gYVxuICogY29tcG9zaXRlIGNvbXBvbmVudCBhbmQgdXNlIGBjb21wb25lbnREaWRNb3VudGAgdG8gYXR0YWNoIHRoZSBldmVudCBoYW5kbGVycy5cbiAqL1xudmFyIFJlYWN0RE9NRm9ybSA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NRm9ybScsXG4gIHRhZ05hbWU6ICdGT1JNJyxcblxuICBtaXhpbnM6IFtSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiwgTG9jYWxFdmVudFRyYXBNaXhpbl0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAvLyBUT0RPOiBJbnN0ZWFkIG9mIHVzaW5nIGBSZWFjdERPTWAgZGlyZWN0bHksIHdlIHNob3VsZCB1c2UgSlNYLiBIb3dldmVyLFxuICAgIC8vIGBqc2hpbnRgIGZhaWxzIHRvIHBhcnNlIEpTWCBzbyBpbiBvcmRlciBmb3IgbGludGluZyB0byB3b3JrIGluIHRoZSBvcGVuXG4gICAgLy8gc291cmNlIHJlcG8sIHdlIG5lZWQgdG8ganVzdCB1c2UgYFJlYWN0RE9NLmZvcm1gLlxuICAgIHJldHVybiBmb3JtKHRoaXMucHJvcHMpO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRyYXBCdWJibGVkRXZlbnQoRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcy50b3BSZXNldCwgJ3Jlc2V0Jyk7XG4gICAgdGhpcy50cmFwQnViYmxlZEV2ZW50KEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXMudG9wU3VibWl0LCAnc3VibWl0Jyk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NRm9ybTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01JRE9wZXJhdGlvbnNcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgRE9NQ2hpbGRyZW5PcGVyYXRpb25zID0gcmVxdWlyZShcIi4vRE9NQ2hpbGRyZW5PcGVyYXRpb25zXCIpO1xudmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5T3BlcmF0aW9uc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdFBlcmZcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgc2V0SW5uZXJIVE1MID0gcmVxdWlyZShcIi4vc2V0SW5uZXJIVE1MXCIpO1xuXG4vKipcbiAqIEVycm9ycyBmb3IgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3QgYmUgdXBkYXRlZCB3aXRoIGB1cGRhdGVQcm9wZXJ0eUJ5SWQoKWAuXG4gKlxuICogQHR5cGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBJTlZBTElEX1BST1BFUlRZX0VSUk9SUyA9IHtcbiAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6XG4gICAgJ2BkYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBzZXQgdXNpbmcgYHVwZGF0ZUlubmVySFRNTEJ5SUQoKWAuJyxcbiAgc3R5bGU6ICdgc3R5bGVgIG11c3QgYmUgc2V0IHVzaW5nIGB1cGRhdGVTdHlsZXNCeUlEKClgLidcbn07XG5cbi8qKlxuICogT3BlcmF0aW9ucyB1c2VkIHRvIHByb2Nlc3MgdXBkYXRlcyB0byBET00gbm9kZXMuIFRoaXMgaXMgbWFkZSBpbmplY3RhYmxlIHZpYVxuICogYFJlYWN0RE9NQ29tcG9uZW50LkJhY2tlbmRJRE9wZXJhdGlvbnNgLlxuICovXG52YXIgUmVhY3RET01JRE9wZXJhdGlvbnMgPSB7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBET00gbm9kZSB3aXRoIG5ldyBwcm9wZXJ0eSB2YWx1ZXMuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCB0b1xuICAgKiB1cGRhdGUgRE9NIHByb3BlcnRpZXMgaW4gYERPTVByb3BlcnR5YC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQSB2YWxpZCBwcm9wZXJ0eSBuYW1lLCBzZWUgYERPTVByb3BlcnR5YC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBOZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVwZGF0ZVByb3BlcnR5QnlJRDogZnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSksXG4gICAgICAndXBkYXRlUHJvcGVydHlCeUlEKC4uLik6ICVzJyxcbiAgICAgIElOVkFMSURfUFJPUEVSVFlfRVJST1JTW25hbWVdXG4gICAgKSA6IGludmFyaWFudCghSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSkpKTtcblxuICAgIC8vIElmIHdlJ3JlIHVwZGF0aW5nIHRvIG51bGwgb3IgdW5kZWZpbmVkLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBwcm9wZXJ0eVxuICAgIC8vIGZyb20gdGhlIERPTSBub2RlIGluc3RlYWQgb2YgaW5hZHZlcnRhbnRseSBzZXR0aW5nIHRvIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gYnJpbmdzIHVzIGluIGxpbmUgd2l0aCB0aGUgc2FtZSBiZWhhdmlvciB3ZSBoYXZlIG9uIGluaXRpYWwgcmVuZGVyLlxuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5kZWxldGVWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlcyBhIERPTSBub2RlIHRvIHJlbW92ZSBhIHByb3BlcnR5LiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gcmVtb3ZlXG4gICAqIERPTSBwcm9wZXJ0aWVzIGluIGBET01Qcm9wZXJ0eWAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgbm9kZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEEgcHJvcGVydHkgbmFtZSB0byByZW1vdmUsIHNlZSBgRE9NUHJvcGVydHlgLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRlbGV0ZVByb3BlcnR5QnlJRDogZnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSksXG4gICAgICAndXBkYXRlUHJvcGVydHlCeUlEKC4uLik6ICVzJyxcbiAgICAgIElOVkFMSURfUFJPUEVSVFlfRVJST1JTW25hbWVdXG4gICAgKSA6IGludmFyaWFudCghSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSkpKTtcbiAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBET00gbm9kZSB3aXRoIG5ldyBzdHlsZSB2YWx1ZXMuIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFzICcnLFxuICAgKiB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIG5vZGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzIE1hcHBpbmcgZnJvbSBzdHlsZXMgdG8gdmFsdWVzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVwZGF0ZVN0eWxlc0J5SUQ6IGZ1bmN0aW9uKGlkLCBzdHlsZXMpIHtcbiAgICB2YXIgbm9kZSA9IFJlYWN0TW91bnQuZ2V0Tm9kZShpZCk7XG4gICAgQ1NTUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBET00gbm9kZSdzIGlubmVySFRNTC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgQW4gSFRNTCBzdHJpbmcuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdXBkYXRlSW5uZXJIVE1MQnlJRDogZnVuY3Rpb24oaWQsIGh0bWwpIHtcbiAgICB2YXIgbm9kZSA9IFJlYWN0TW91bnQuZ2V0Tm9kZShpZCk7XG4gICAgc2V0SW5uZXJIVE1MKG5vZGUsIGh0bWwpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUncyB0ZXh0IGNvbnRlbnQgc2V0IGJ5IGBwcm9wcy5jb250ZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgVGV4dCBjb250ZW50LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVwZGF0ZVRleHRDb250ZW50QnlJRDogZnVuY3Rpb24oaWQsIGNvbnRlbnQpIHtcbiAgICB2YXIgbm9kZSA9IFJlYWN0TW91bnQuZ2V0Tm9kZShpZCk7XG4gICAgRE9NQ2hpbGRyZW5PcGVyYXRpb25zLnVwZGF0ZVRleHRDb250ZW50KG5vZGUsIGNvbnRlbnQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhIERPTSBub2RlIHRoYXQgZXhpc3RzIGluIHRoZSBkb2N1bWVudCB3aXRoIG1hcmt1cC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIGNoaWxkIHRvIGJlIHJlcGxhY2VkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIERhbmdlcm91cyBtYXJrdXAgdG8gaW5qZWN0IGluIHBsYWNlIG9mIGNoaWxkLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHNlZSB7RGFuZ2VyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwfVxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEOiBmdW5jdGlvbihpZCwgbWFya3VwKSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cChub2RlLCBtYXJrdXApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgY29tcG9uZW50J3MgY2hpbGRyZW4gYnkgcHJvY2Vzc2luZyBhIHNlcmllcyBvZiB1cGRhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5PG9iamVjdD59IHVwZGF0ZXMgTGlzdCBvZiB1cGRhdGUgY29uZmlndXJhdGlvbnMuXG4gICAqIEBwYXJhbSB7YXJyYXk8c3RyaW5nPn0gbWFya3VwIExpc3Qgb2YgbWFya3VwIHN0cmluZ3MuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOiBmdW5jdGlvbih1cGRhdGVzLCBtYXJrdXApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVwZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHVwZGF0ZXNbaV0ucGFyZW50Tm9kZSA9IFJlYWN0TW91bnQuZ2V0Tm9kZSh1cGRhdGVzW2ldLnBhcmVudElEKTtcbiAgICB9XG4gICAgRE9NQ2hpbGRyZW5PcGVyYXRpb25zLnByb2Nlc3NVcGRhdGVzKHVwZGF0ZXMsIG1hcmt1cCk7XG4gIH1cbn07XG5cblJlYWN0UGVyZi5tZWFzdXJlTWV0aG9kcyhSZWFjdERPTUlET3BlcmF0aW9ucywgJ1JlYWN0RE9NSURPcGVyYXRpb25zJywge1xuICB1cGRhdGVQcm9wZXJ0eUJ5SUQ6ICd1cGRhdGVQcm9wZXJ0eUJ5SUQnLFxuICBkZWxldGVQcm9wZXJ0eUJ5SUQ6ICdkZWxldGVQcm9wZXJ0eUJ5SUQnLFxuICB1cGRhdGVTdHlsZXNCeUlEOiAndXBkYXRlU3R5bGVzQnlJRCcsXG4gIHVwZGF0ZUlubmVySFRNTEJ5SUQ6ICd1cGRhdGVJbm5lckhUTUxCeUlEJyxcbiAgdXBkYXRlVGV4dENvbnRlbnRCeUlEOiAndXBkYXRlVGV4dENvbnRlbnRCeUlEJyxcbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEOiAnZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEJyxcbiAgZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOiAnZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzJ1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01JRE9wZXJhdGlvbnM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRVQwMUpSRTl3WlhKaGRHbHZibk11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFJFOU5TVVJQY0dWeVlYUnBiMjV6WEc0Z0tpQkFkSGx3WldOb1pXTnJjeUJ6ZEdGMGFXTXRiMjVzZVZ4dUlDb3ZYRzVjYmk4cWFuTnNhVzUwSUdWMmFXdzZJSFJ5ZFdVZ0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1ExTlRVSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpJRDBnY21WeGRXbHlaU2hjSWk0dlExTlRVSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpYQ0lwTzF4dWRtRnlJRVJQVFVOb2FXeGtjbVZ1VDNCbGNtRjBhVzl1Y3lBOUlISmxjWFZwY21Vb1hDSXVMMFJQVFVOb2FXeGtjbVZ1VDNCbGNtRjBhVzl1YzF3aUtUdGNiblpoY2lCRVQwMVFjbTl3WlhKMGVVOXdaWEpoZEdsdmJuTWdQU0J5WlhGMWFYSmxLRndpTGk5RVQwMVFjbTl3WlhKMGVVOXdaWEpoZEdsdmJuTmNJaWs3WEc1MllYSWdVbVZoWTNSTmIzVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVFc5MWJuUmNJaWs3WEc1MllYSWdVbVZoWTNSUVpYSm1JRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JRWlhKbVhDSXBPMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1ZG1GeUlITmxkRWx1Ym1WeVNGUk5UQ0E5SUhKbGNYVnBjbVVvWENJdUwzTmxkRWx1Ym1WeVNGUk5URndpS1R0Y2JseHVMeW9xWEc0Z0tpQkZjbkp2Y25NZ1ptOXlJSEJ5YjNCbGNuUnBaWE1nZEdoaGRDQnphRzkxYkdRZ2JtOTBJR0psSUhWd1pHRjBaV1FnZDJsMGFDQmdkWEJrWVhSbFVISnZjR1Z5ZEhsQ2VVbGtLQ2xnTGx4dUlDcGNiaUFxSUVCMGVYQmxJSHR2WW1wbFkzUjlYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzUyWVhJZ1NVNVdRVXhKUkY5UVVrOVFSVkpVV1Y5RlVsSlBVbE1nUFNCN1hHNGdJR1JoYm1kbGNtOTFjMng1VTJWMFNXNXVaWEpJVkUxTU9seHVJQ0FnSUNkZ1pHRnVaMlZ5YjNWemJIbFRaWFJKYm01bGNraFVUVXhnSUcxMWMzUWdZbVVnYzJWMElIVnphVzVuSUdCMWNHUmhkR1ZKYm01bGNraFVUVXhDZVVsRUtDbGdMaWNzWEc0Z0lITjBlV3hsT2lBbllITjBlV3hsWUNCdGRYTjBJR0psSUhObGRDQjFjMmx1WnlCZ2RYQmtZWFJsVTNSNWJHVnpRbmxKUkNncFlDNG5YRzU5TzF4dVhHNHZLaXBjYmlBcUlFOXdaWEpoZEdsdmJuTWdkWE5sWkNCMGJ5QndjbTlqWlhOeklIVndaR0YwWlhNZ2RHOGdSRTlOSUc1dlpHVnpMaUJVYUdseklHbHpJRzFoWkdVZ2FXNXFaV04wWVdKc1pTQjJhV0ZjYmlBcUlHQlNaV0ZqZEVSUFRVTnZiWEJ2Ym1WdWRDNUNZV05yWlc1a1NVUlBjR1Z5WVhScGIyNXpZQzVjYmlBcUwxeHVkbUZ5SUZKbFlXTjBSRTlOU1VSUGNHVnlZWFJwYjI1eklEMGdlMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlZjR1JoZEdWeklHRWdSRTlOSUc1dlpHVWdkMmwwYUNCdVpYY2djSEp2Y0dWeWRIa2dkbUZzZFdWekxpQlVhR2x6SUhOb2IzVnNaQ0J2Ym14NUlHSmxJSFZ6WldRZ2RHOWNiaUFnSUNvZ2RYQmtZWFJsSUVSUFRTQndjbTl3WlhKMGFXVnpJR2x1SUdCRVQwMVFjbTl3WlhKMGVXQXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCSlJDQnZaaUIwYUdVZ2JtOWtaU0IwYnlCMWNHUmhkR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnVZVzFsSUVFZ2RtRnNhV1FnY0hKdmNHVnlkSGtnYm1GdFpTd2djMlZsSUdCRVQwMVFjbTl3WlhKMGVXQXVYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdkbUZzZFdVZ1RtVjNJSFpoYkhWbElHOW1JSFJvWlNCd2NtOXdaWEowZVM1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCMWNHUmhkR1ZRY205d1pYSjBlVUo1U1VRNklHWjFibU4wYVc5dUtHbGtMQ0J1WVcxbExDQjJZV3gxWlNrZ2UxeHVJQ0FnSUhaaGNpQnViMlJsSUQwZ1VtVmhZM1JOYjNWdWRDNW5aWFJPYjJSbEtHbGtLVHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lVbE9Wa0ZNU1VSZlVGSlBVRVZTVkZsZlJWSlNUMUpUTG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcExGeHVJQ0FnSUNBZ0ozVndaR0YwWlZCeWIzQmxjblI1UW5sSlJDZ3VMaTRwT2lBbGN5Y3NYRzRnSUNBZ0lDQkpUbFpCVEVsRVgxQlNUMUJGVWxSWlgwVlNVazlTVTF0dVlXMWxYVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVVsT1ZrRk1TVVJmVUZKUFVFVlNWRmxmUlZKU1QxSlRMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwS1NrN1hHNWNiaUFnSUNBdkx5QkpaaUIzWlNkeVpTQjFjR1JoZEdsdVp5QjBieUJ1ZFd4c0lHOXlJSFZ1WkdWbWFXNWxaQ3dnZDJVZ2MyaHZkV3hrSUhKbGJXOTJaU0IwYUdVZ2NISnZjR1Z5ZEhsY2JpQWdJQ0F2THlCbWNtOXRJSFJvWlNCRVQwMGdibTlrWlNCcGJuTjBaV0ZrSUc5bUlHbHVZV1IyWlhKMFlXNTBiSGtnYzJWMGRHbHVaeUIwYnlCaElITjBjbWx1Wnk0Z1ZHaHBjMXh1SUNBZ0lDOHZJR0p5YVc1bmN5QjFjeUJwYmlCc2FXNWxJSGRwZEdnZ2RHaGxJSE5oYldVZ1ltVm9ZWFpwYjNJZ2QyVWdhR0YyWlNCdmJpQnBibWwwYVdGc0lISmxibVJsY2k1Y2JpQWdJQ0JwWmlBb2RtRnNkV1VnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1ekxuTmxkRlpoYkhWbFJtOXlVSEp2Y0dWeWRIa29ibTlrWlN3Z2JtRnRaU3dnZG1Gc2RXVXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVVOXdaWEpoZEdsdmJuTXVaR1ZzWlhSbFZtRnNkV1ZHYjNKUWNtOXdaWEowZVNodWIyUmxMQ0J1WVcxbEtUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlZ3WkdGMFpYTWdZU0JFVDAwZ2JtOWtaU0IwYnlCeVpXMXZkbVVnWVNCd2NtOXdaWEowZVM0Z1ZHaHBjeUJ6YUc5MWJHUWdiMjVzZVNCaVpTQjFjMlZrSUhSdklISmxiVzkyWlZ4dUlDQWdLaUJFVDAwZ2NISnZjR1Z5ZEdsbGN5QnBiaUJnUkU5TlVISnZjR1Z5ZEhsZ0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnU1VRZ2IyWWdkR2hsSUc1dlpHVWdkRzhnZFhCa1lYUmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2JtRnRaU0JCSUhCeWIzQmxjblI1SUc1aGJXVWdkRzhnY21WdGIzWmxMQ0J6WldVZ1lFUlBUVkJ5YjNCbGNuUjVZQzVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JrWld4bGRHVlFjbTl3WlhKMGVVSjVTVVE2SUdaMWJtTjBhVzl1S0dsa0xDQnVZVzFsTENCMllXeDFaU2tnZTF4dUlDQWdJSFpoY2lCdWIyUmxJRDBnVW1WaFkzUk5iM1Z1ZEM1blpYUk9iMlJsS0dsa0tUdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSVVsT1ZrRk1TVVJmVUZKUFVFVlNWRmxmUlZKU1QxSlRMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwTEZ4dUlDQWdJQ0FnSjNWd1pHRjBaVkJ5YjNCbGNuUjVRbmxKUkNndUxpNHBPaUFsY3ljc1hHNGdJQ0FnSUNCSlRsWkJURWxFWDFCU1QxQkZVbFJaWDBWU1VrOVNVMXR1WVcxbFhWeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9JVWxPVmtGTVNVUmZVRkpQVUVWU1ZGbGZSVkpTVDFKVExtaGhjMDkzYmxCeWIzQmxjblI1S0c1aGJXVXBLU2s3WEc0Z0lDQWdSRTlOVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6TG1SbGJHVjBaVlpoYkhWbFJtOXlVSEp2Y0dWeWRIa29ibTlrWlN3Z2JtRnRaU3dnZG1Gc2RXVXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVmNHUmhkR1Z6SUdFZ1JFOU5JRzV2WkdVZ2QybDBhQ0J1WlhjZ2MzUjViR1VnZG1Gc2RXVnpMaUJKWmlCaElIWmhiSFZsSUdseklITndaV05wWm1sbFpDQmhjeUFuSnl4Y2JpQWdJQ29nZEdobElHTnZjbkpsYzNCdmJtUnBibWNnYzNSNWJHVWdjSEp2Y0dWeWRIa2dkMmxzYkNCaVpTQjFibk5sZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRWxFSUc5bUlIUm9aU0J1YjJSbElIUnZJSFZ3WkdGMFpTNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhOMGVXeGxjeUJOWVhCd2FXNW5JR1p5YjIwZ2MzUjViR1Z6SUhSdklIWmhiSFZsY3k1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCMWNHUmhkR1ZUZEhsc1pYTkNlVWxFT2lCbWRXNWpkR2x2YmlocFpDd2djM1I1YkdWektTQjdYRzRnSUNBZ2RtRnlJRzV2WkdVZ1BTQlNaV0ZqZEUxdmRXNTBMbWRsZEU1dlpHVW9hV1FwTzF4dUlDQWdJRU5UVTFCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3k1elpYUldZV3gxWlVadmNsTjBlV3hsY3lodWIyUmxMQ0J6ZEhsc1pYTXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVmNHUmhkR1Z6SUdFZ1JFOU5JRzV2WkdVbmN5QnBibTVsY2toVVRVd3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCSlJDQnZaaUIwYUdVZ2JtOWtaU0IwYnlCMWNHUmhkR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQm9kRzFzSUVGdUlFaFVUVXdnYzNSeWFXNW5MbHh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJSFZ3WkdGMFpVbHVibVZ5U0ZSTlRFSjVTVVE2SUdaMWJtTjBhVzl1S0dsa0xDQm9kRzFzS1NCN1hHNGdJQ0FnZG1GeUlHNXZaR1VnUFNCU1pXRmpkRTF2ZFc1MExtZGxkRTV2WkdVb2FXUXBPMXh1SUNBZ0lITmxkRWx1Ym1WeVNGUk5UQ2h1YjJSbExDQm9kRzFzS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWWEJrWVhSbGN5QmhJRVJQVFNCdWIyUmxKM01nZEdWNGRDQmpiMjUwWlc1MElITmxkQ0JpZVNCZ2NISnZjSE11WTI5dWRHVnVkR0F1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkpSQ0J2WmlCMGFHVWdibTlrWlNCMGJ5QjFjR1JoZEdVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JqYjI1MFpXNTBJRlJsZUhRZ1kyOXVkR1Z1ZEM1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCMWNHUmhkR1ZVWlhoMFEyOXVkR1Z1ZEVKNVNVUTZJR1oxYm1OMGFXOXVLR2xrTENCamIyNTBaVzUwS1NCN1hHNGdJQ0FnZG1GeUlHNXZaR1VnUFNCU1pXRmpkRTF2ZFc1MExtZGxkRTV2WkdVb2FXUXBPMXh1SUNBZ0lFUlBUVU5vYVd4a2NtVnVUM0JsY21GMGFXOXVjeTUxY0dSaGRHVlVaWGgwUTI5dWRHVnVkQ2h1YjJSbExDQmpiMjUwWlc1MEtUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1Wd2JHRmpaWE1nWVNCRVQwMGdibTlrWlNCMGFHRjBJR1Y0YVhOMGN5QnBiaUIwYUdVZ1pHOWpkVzFsYm5RZ2QybDBhQ0J0WVhKcmRYQXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCSlJDQnZaaUJqYUdsc1pDQjBieUJpWlNCeVpYQnNZV05sWkM1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzFoY210MWNDQkVZVzVuWlhKdmRYTWdiV0Z5YTNWd0lIUnZJR2x1YW1WamRDQnBiaUJ3YkdGalpTQnZaaUJqYUdsc1pDNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxSUVCelpXVWdlMFJoYm1kbGNpNWtZVzVuWlhKdmRYTnNlVkpsY0d4aFkyVk9iMlJsVjJsMGFFMWhjbXQxY0gxY2JpQWdJQ292WEc0Z0lHUmhibWRsY205MWMyeDVVbVZ3YkdGalpVNXZaR1ZYYVhSb1RXRnlhM1Z3UW5sSlJEb2dablZ1WTNScGIyNG9hV1FzSUcxaGNtdDFjQ2tnZTF4dUlDQWdJSFpoY2lCdWIyUmxJRDBnVW1WaFkzUk5iM1Z1ZEM1blpYUk9iMlJsS0dsa0tUdGNiaUFnSUNCRVQwMURhR2xzWkhKbGJrOXdaWEpoZEdsdmJuTXVaR0Z1WjJWeWIzVnpiSGxTWlhCc1lXTmxUbTlrWlZkcGRHaE5ZWEpyZFhBb2JtOWtaU3dnYldGeWEzVndLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1ZYQmtZWFJsY3lCaElHTnZiWEJ2Ym1WdWRDZHpJR05vYVd4a2NtVnVJR0o1SUhCeWIyTmxjM05wYm1jZ1lTQnpaWEpwWlhNZ2IyWWdkWEJrWVhSbGN5NWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRoY25KaGVUeHZZbXBsWTNRK2ZTQjFjR1JoZEdWeklFeHBjM1FnYjJZZ2RYQmtZWFJsSUdOdmJtWnBaM1Z5WVhScGIyNXpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyRnljbUY1UEhOMGNtbHVaejU5SUcxaGNtdDFjQ0JNYVhOMElHOW1JRzFoY210MWNDQnpkSEpwYm1kekxseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHUmhibWRsY205MWMyeDVVSEp2WTJWemMwTm9hV3hrY21WdVZYQmtZWFJsY3pvZ1puVnVZM1JwYjI0b2RYQmtZWFJsY3l3Z2JXRnlhM1Z3S1NCN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCMWNHUmhkR1Z6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQjFjR1JoZEdWelcybGRMbkJoY21WdWRFNXZaR1VnUFNCU1pXRmpkRTF2ZFc1MExtZGxkRTV2WkdVb2RYQmtZWFJsYzF0cFhTNXdZWEpsYm5SSlJDazdYRzRnSUNBZ2ZWeHVJQ0FnSUVSUFRVTm9hV3hrY21WdVQzQmxjbUYwYVc5dWN5NXdjbTlqWlhOelZYQmtZWFJsY3loMWNHUmhkR1Z6TENCdFlYSnJkWEFwTzF4dUlDQjlYRzU5TzF4dVhHNVNaV0ZqZEZCbGNtWXViV1ZoYzNWeVpVMWxkR2h2WkhNb1VtVmhZM1JFVDAxSlJFOXdaWEpoZEdsdmJuTXNJQ2RTWldGamRFUlBUVWxFVDNCbGNtRjBhVzl1Y3ljc0lIdGNiaUFnZFhCa1lYUmxVSEp2Y0dWeWRIbENlVWxFT2lBbmRYQmtZWFJsVUhKdmNHVnlkSGxDZVVsRUp5eGNiaUFnWkdWc1pYUmxVSEp2Y0dWeWRIbENlVWxFT2lBblpHVnNaWFJsVUhKdmNHVnlkSGxDZVVsRUp5eGNiaUFnZFhCa1lYUmxVM1I1YkdWelFubEpSRG9nSjNWd1pHRjBaVk4wZVd4bGMwSjVTVVFuTEZ4dUlDQjFjR1JoZEdWSmJtNWxja2hVVFV4Q2VVbEVPaUFuZFhCa1lYUmxTVzV1WlhKSVZFMU1RbmxKUkNjc1hHNGdJSFZ3WkdGMFpWUmxlSFJEYjI1MFpXNTBRbmxKUkRvZ0ozVndaR0YwWlZSbGVIUkRiMjUwWlc1MFFubEpSQ2NzWEc0Z0lHUmhibWRsY205MWMyeDVVbVZ3YkdGalpVNXZaR1ZYYVhSb1RXRnlhM1Z3UW5sSlJEb2dKMlJoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd1FubEpSQ2NzWEc0Z0lHUmhibWRsY205MWMyeDVVSEp2WTJWemMwTm9hV3hrY21WdVZYQmtZWFJsY3pvZ0oyUmhibWRsY205MWMyeDVVSEp2WTJWemMwTm9hV3hrY21WdVZYQmtZWFJsY3lkY2JuMHBPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBSRTlOU1VSUGNHVnlZWFJwYjI1ek8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NSWZyYW1lXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBMb2NhbEV2ZW50VHJhcE1peGluID0gcmVxdWlyZShcIi4vTG9jYWxFdmVudFRyYXBNaXhpblwiKTtcbnZhciBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXCIpO1xudmFyIFJlYWN0Q2xhc3MgPSByZXF1aXJlKFwiLi9SZWFjdENsYXNzXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcblxudmFyIGlmcmFtZSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdpZnJhbWUnKTtcblxuLyoqXG4gKiBTaW5jZSBvbkxvYWQgZG9lc24ndCBidWJibGUgT1IgY2FwdHVyZSBvbiB0aGUgdG9wIGxldmVsIGluIElFOCwgd2UgbmVlZCB0b1xuICogY2FwdHVyZSBpdCBvbiB0aGUgPGlmcmFtZT4gZWxlbWVudCBpdHNlbGYuIFRoZXJlIGFyZSBsb3RzIG9mIGhhY2tzIHdlIGNvdWxkXG4gKiBkbyB0byBhY2NvbXBsaXNoIHRoaXMsIGJ1dCB0aGUgbW9zdCByZWxpYWJsZSBpcyB0byBtYWtlIDxpZnJhbWU+IGEgY29tcG9zaXRlXG4gKiBjb21wb25lbnQgYW5kIHVzZSBgY29tcG9uZW50RGlkTW91bnRgIHRvIGF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlcnMuXG4gKi9cbnZhciBSZWFjdERPTUlmcmFtZSA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NSWZyYW1lJyxcbiAgdGFnTmFtZTogJ0lGUkFNRScsXG5cbiAgbWl4aW5zOiBbUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4sIExvY2FsRXZlbnRUcmFwTWl4aW5dLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGlmcmFtZSh0aGlzLnByb3BzKTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50cmFwQnViYmxlZEV2ZW50KEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXMudG9wTG9hZCwgJ2xvYWQnKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01JZnJhbWU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01JbWdcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIExvY2FsRXZlbnRUcmFwTWl4aW4gPSByZXF1aXJlKFwiLi9Mb2NhbEV2ZW50VHJhcE1peGluXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIgaW1nID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkoJ2ltZycpO1xuXG4vKipcbiAqIFNpbmNlIG9uTG9hZCBkb2Vzbid0IGJ1YmJsZSBPUiBjYXB0dXJlIG9uIHRoZSB0b3AgbGV2ZWwgaW4gSUU4LCB3ZSBuZWVkIHRvXG4gKiBjYXB0dXJlIGl0IG9uIHRoZSA8aW1nPiBlbGVtZW50IGl0c2VsZi4gVGhlcmUgYXJlIGxvdHMgb2YgaGFja3Mgd2UgY291bGQgZG9cbiAqIHRvIGFjY29tcGxpc2ggdGhpcywgYnV0IHRoZSBtb3N0IHJlbGlhYmxlIGlzIHRvIG1ha2UgPGltZz4gYSBjb21wb3NpdGVcbiAqIGNvbXBvbmVudCBhbmQgdXNlIGBjb21wb25lbnREaWRNb3VudGAgdG8gYXR0YWNoIHRoZSBldmVudCBoYW5kbGVycy5cbiAqL1xudmFyIFJlYWN0RE9NSW1nID0gUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiAnUmVhY3RET01JbWcnLFxuICB0YWdOYW1lOiAnSU1HJyxcblxuICBtaXhpbnM6IFtSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiwgTG9jYWxFdmVudFRyYXBNaXhpbl0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaW1nKHRoaXMucHJvcHMpO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRyYXBCdWJibGVkRXZlbnQoRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcy50b3BMb2FkLCAnbG9hZCcpO1xuICAgIHRoaXMudHJhcEJ1YmJsZWRFdmVudChFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzLnRvcEVycm9yLCAnZXJyb3InKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01JbWc7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NSW5wdXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBBdXRvRm9jdXNNaXhpbiA9IHJlcXVpcmUoXCIuL0F1dG9Gb2N1c01peGluXCIpO1xudmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5T3BlcmF0aW9uc1wiKTtcbnZhciBMaW5rZWRWYWx1ZVV0aWxzID0gcmVxdWlyZShcIi4vTGlua2VkVmFsdWVVdGlsc1wiKTtcbnZhciBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXCIpO1xudmFyIFJlYWN0Q2xhc3MgPSByZXF1aXJlKFwiLi9SZWFjdENsYXNzXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxudmFyIGlucHV0ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkoJ2lucHV0Jyk7XG5cbnZhciBpbnN0YW5jZXNCeVJlYWN0SUQgPSB7fTtcblxuZnVuY3Rpb24gZm9yY2VVcGRhdGVJZk1vdW50ZWQoKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIGlmICh0aGlzLmlzTW91bnRlZCgpKSB7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8aW5wdXQ+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGVzZSBvcHRpb25hbFxuICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRDaGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqIElmIGBjaGVja2VkYCBvciBgdmFsdWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zXG4gKiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90XG4gKiB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5nZSBpbiBvcmRlciBmb3JcbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNrZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApXG4gKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVmYXVsdFZhbHVlYCkuXG4gKlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIxMDI1L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWxcbiAqL1xudmFyIFJlYWN0RE9NSW5wdXQgPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTUlucHV0JyxcbiAgdGFnTmFtZTogJ0lOUFVUJyxcblxuICBtaXhpbnM6IFtBdXRvRm9jdXNNaXhpbiwgTGlua2VkVmFsdWVVdGlscy5NaXhpbiwgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5dLFxuXG4gIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICBpbml0aWFsQ2hlY2tlZDogdGhpcy5wcm9wcy5kZWZhdWx0Q2hlY2tlZCB8fCBmYWxzZSxcbiAgICAgIGluaXRpYWxWYWx1ZTogZGVmYXVsdFZhbHVlICE9IG51bGwgPyBkZWZhdWx0VmFsdWUgOiBudWxsXG4gICAgfTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIC8vIENsb25lIGB0aGlzLnByb3BzYCBzbyB3ZSBkb24ndCBtdXRhdGUgdGhlIGlucHV0LlxuICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgdGhpcy5wcm9wcyk7XG5cbiAgICBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IG51bGw7XG4gICAgcHJvcHMuZGVmYXVsdFZhbHVlID0gbnVsbDtcblxuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgcHJvcHMudmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiB0aGlzLnN0YXRlLmluaXRpYWxWYWx1ZTtcblxuICAgIHZhciBjaGVja2VkID0gTGlua2VkVmFsdWVVdGlscy5nZXRDaGVja2VkKHRoaXMpO1xuICAgIHByb3BzLmNoZWNrZWQgPSBjaGVja2VkICE9IG51bGwgPyBjaGVja2VkIDogdGhpcy5zdGF0ZS5pbml0aWFsQ2hlY2tlZDtcblxuICAgIHByb3BzLm9uQ2hhbmdlID0gdGhpcy5faGFuZGxlQ2hhbmdlO1xuXG4gICAgcmV0dXJuIGlucHV0KHByb3BzLCB0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlkID0gUmVhY3RNb3VudC5nZXRJRCh0aGlzLmdldERPTU5vZGUoKSk7XG4gICAgaW5zdGFuY2VzQnlSZWFjdElEW2lkXSA9IHRoaXM7XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciByb290Tm9kZSA9IHRoaXMuZ2V0RE9NTm9kZSgpO1xuICAgIHZhciBpZCA9IFJlYWN0TW91bnQuZ2V0SUQocm9vdE5vZGUpO1xuICAgIGRlbGV0ZSBpbnN0YW5jZXNCeVJlYWN0SURbaWRdO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZTogZnVuY3Rpb24ocHJldlByb3BzLCBwcmV2U3RhdGUsIHByZXZDb250ZXh0KSB7XG4gICAgdmFyIHJvb3ROb2RlID0gdGhpcy5nZXRET01Ob2RlKCk7XG4gICAgaWYgKHRoaXMucHJvcHMuY2hlY2tlZCAhPSBudWxsKSB7XG4gICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eShcbiAgICAgICAgcm9vdE5vZGUsXG4gICAgICAgICdjaGVja2VkJyxcbiAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkIHx8IGZhbHNlXG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eShyb290Tm9kZSwgJ3ZhbHVlJywgJycgKyB2YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIF9oYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHZhciBvbkNoYW5nZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0T25DaGFuZ2UodGhpcyk7XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IG9uQ2hhbmdlLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgICAvLyBIZXJlIHdlIHVzZSBhc2FwIHRvIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkLCB3aGljaFxuICAgIC8vIGlzIGltcG9ydGFudCB3aGVuIHVzaW5nIGNvbnRyb2xsZWQgY29tcG9uZW50cyB3aXRoaW4gbGF5ZXJzOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICAgIFJlYWN0VXBkYXRlcy5hc2FwKGZvcmNlVXBkYXRlSWZNb3VudGVkLCB0aGlzKTtcblxuICAgIHZhciBuYW1lID0gdGhpcy5wcm9wcy5uYW1lO1xuICAgIGlmICh0aGlzLnByb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmFtZSAhPSBudWxsKSB7XG4gICAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLmdldERPTU5vZGUoKTtcbiAgICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgICAgd2hpbGUgKHF1ZXJ5Um9vdC5wYXJlbnROb2RlKSB7XG4gICAgICAgIHF1ZXJ5Um9vdCA9IHF1ZXJ5Um9vdC5wYXJlbnROb2RlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBgcm9vdE5vZGUuZm9ybWAgd2FzIG5vbi1udWxsLCB0aGVuIHdlIGNvdWxkIHRyeSBgZm9ybS5lbGVtZW50c2AsXG4gICAgICAvLyBidXQgdGhhdCBzb21ldGltZXMgYmVoYXZlcyBzdHJhbmdlbHkgaW4gSUU4LiBXZSBjb3VsZCBhbHNvIHRyeSB1c2luZ1xuICAgICAgLy8gYGZvcm0uZ2V0RWxlbWVudHNCeU5hbWVgLCBidXQgdGhhdCB3aWxsIG9ubHkgcmV0dXJuIGRpcmVjdCBjaGlsZHJlblxuICAgICAgLy8gYW5kIHdvbid0IGluY2x1ZGUgaW5wdXRzIHRoYXQgdXNlIHRoZSBIVE1MNSBgZm9ybT1gIGF0dHJpYnV0ZS4gU2luY2VcbiAgICAgIC8vIHRoZSBpbnB1dCBtaWdodCBub3QgZXZlbiBiZSBpbiBhIGZvcm0sIGxldCdzIGp1c3QgdXNlIHRoZSBnbG9iYWxcbiAgICAgIC8vIGBxdWVyeVNlbGVjdG9yQWxsYCB0byBlbnN1cmUgd2UgZG9uJ3QgbWlzcyBhbnl0aGluZy5cbiAgICAgIHZhciBncm91cCA9IHF1ZXJ5Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAnaW5wdXRbbmFtZT0nICsgSlNPTi5zdHJpbmdpZnkoJycgKyBuYW1lKSArICddW3R5cGU9XCJyYWRpb1wiXScpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgZ3JvdXBMZW4gPSBncm91cC5sZW5ndGg7IGkgPCBncm91cExlbjsgaSsrKSB7XG4gICAgICAgIHZhciBvdGhlck5vZGUgPSBncm91cFtpXTtcbiAgICAgICAgaWYgKG90aGVyTm9kZSA9PT0gcm9vdE5vZGUgfHxcbiAgICAgICAgICAgIG90aGVyTm9kZS5mb3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG90aGVySUQgPSBSZWFjdE1vdW50LmdldElEKG90aGVyTm9kZSk7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgb3RoZXJJRCxcbiAgICAgICAgICAnUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlICcgK1xuICAgICAgICAgICdzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLidcbiAgICAgICAgKSA6IGludmFyaWFudChvdGhlcklEKSk7XG4gICAgICAgIHZhciBvdGhlckluc3RhbmNlID0gaW5zdGFuY2VzQnlSZWFjdElEW290aGVySURdO1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIG90aGVySW5zdGFuY2UsXG4gICAgICAgICAgJ1JlYWN0RE9NSW5wdXQ6IFVua25vd24gcmFkaW8gYnV0dG9uIElEICVzLicsXG4gICAgICAgICAgb3RoZXJJRFxuICAgICAgICApIDogaW52YXJpYW50KG90aGVySW5zdGFuY2UpKTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAgIC8vIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQgdG8gdXBkYXRlIHdpbGwgY2F1c2UgaXQgdG8gYmUgY29tZSByZS1jaGVja2VkXG4gICAgICAgIC8vIGFzIGFwcHJvcHJpYXRlLlxuICAgICAgICBSZWFjdFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgb3RoZXJJbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSW5wdXQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRVQwMUpibkIxZEM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUkVUMDFKYm5CMWRGeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRUYxZEc5R2IyTjFjMDFwZUdsdUlEMGdjbVZ4ZFdseVpTaGNJaTR2UVhWMGIwWnZZM1Z6VFdsNGFXNWNJaWs3WEc1MllYSWdSRTlOVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6SUQwZ2NtVnhkV2x5WlNoY0lpNHZSRTlOVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6WENJcE8xeHVkbUZ5SUV4cGJtdGxaRlpoYkhWbFZYUnBiSE1nUFNCeVpYRjFhWEpsS0Z3aUxpOU1hVzVyWldSV1lXeDFaVlYwYVd4elhDSXBPMXh1ZG1GeUlGSmxZV04wUW5KdmQzTmxja052YlhCdmJtVnVkRTFwZUdsdUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkNjbTkzYzJWeVEyOXRjRzl1Wlc1MFRXbDRhVzVjSWlrN1hHNTJZWElnVW1WaFkzUkRiR0Z6Y3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFEyeGhjM05jSWlrN1hHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wVFc5MWJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTF2ZFc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wVlhCa1lYUmxjeUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVlhCa1lYUmxjMXdpS1R0Y2JseHVkbUZ5SUdGemMybG5iaUE5SUhKbGNYVnBjbVVvWENJdUwwOWlhbVZqZEM1aGMzTnBaMjVjSWlrN1hHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNTJZWElnYVc1d2RYUWdQU0JTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUm1GamRHOXllU2duYVc1d2RYUW5LVHRjYmx4dWRtRnlJR2x1YzNSaGJtTmxjMEo1VW1WaFkzUkpSQ0E5SUh0OU8xeHVYRzVtZFc1amRHbHZiaUJtYjNKalpWVndaR0YwWlVsbVRXOTFiblJsWkNncElIdGNiaUFnTHlwcWMyaHBiblFnZG1Gc2FXUjBhR2x6T25SeWRXVWdLaTljYmlBZ2FXWWdLSFJvYVhNdWFYTk5iM1Z1ZEdWa0tDa3BJSHRjYmlBZ0lDQjBhR2x6TG1admNtTmxWWEJrWVhSbEtDazdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJKYlhCc1pXMWxiblJ6SUdGdUlEeHBibkIxZEQ0Z2JtRjBhWFpsSUdOdmJYQnZibVZ1ZENCMGFHRjBJR0ZzYkc5M2N5QnpaWFIwYVc1bklIUm9aWE5sSUc5d2RHbHZibUZzWEc0Z0tpQndjbTl3Y3pvZ1lHTm9aV05yWldSZ0xDQmdkbUZzZFdWZ0xDQmdaR1ZtWVhWc2RFTm9aV05yWldSZ0xDQmhibVFnWUdSbFptRjFiSFJXWVd4MVpXQXVYRzRnS2x4dUlDb2dTV1lnWUdOb1pXTnJaV1JnSUc5eUlHQjJZV3gxWldBZ1lYSmxJRzV2ZENCemRYQndiR2xsWkNBb2IzSWdiblZzYkM5MWJtUmxabWx1WldRcExDQjFjMlZ5SUdGamRHbHZibk5jYmlBcUlIUm9ZWFFnWVdabVpXTjBJSFJvWlNCamFHVmphMlZrSUhOMFlYUmxJRzl5SUhaaGJIVmxJSGRwYkd3Z2RISnBaMmRsY2lCMWNHUmhkR1Z6SUhSdklIUm9aU0JsYkdWdFpXNTBMbHh1SUNwY2JpQXFJRWxtSUhSb1pYa2dZWEpsSUhOMWNIQnNhV1ZrSUNoaGJtUWdibTkwSUc1MWJHd3ZkVzVrWldacGJtVmtLU3dnZEdobElISmxibVJsY21Wa0lHVnNaVzFsYm5RZ2QybHNiQ0J1YjNSY2JpQXFJSFJ5YVdkblpYSWdkWEJrWVhSbGN5QjBieUIwYUdVZ1pXeGxiV1Z1ZEM0Z1NXNXpkR1ZoWkN3Z2RHaGxJSEJ5YjNCeklHMTFjM1FnWTJoaGJtZGxJR2x1SUc5eVpHVnlJR1p2Y2x4dUlDb2dkR2hsSUhKbGJtUmxjbVZrSUdWc1pXMWxiblFnZEc4Z1ltVWdkWEJrWVhSbFpDNWNiaUFxWEc0Z0tpQlVhR1VnY21WdVpHVnlaV1FnWld4bGJXVnVkQ0IzYVd4c0lHSmxJR2x1YVhScFlXeHBlbVZrSUdGeklIVnVZMmhsWTJ0bFpDQW9iM0lnWUdSbFptRjFiSFJEYUdWamEyVmtZQ2xjYmlBcUlIZHBkR2dnWVc0Z1pXMXdkSGtnZG1Gc2RXVWdLRzl5SUdCa1pXWmhkV3gwVm1Gc2RXVmdLUzVjYmlBcVhHNGdLaUJBYzJWbElHaDBkSEE2THk5M2QzY3Vkek11YjNKbkwxUlNMekl3TVRJdlYwUXRhSFJ0YkRVdE1qQXhNakV3TWpVdmRHaGxMV2x1Y0hWMExXVnNaVzFsYm5RdWFIUnRiRnh1SUNvdlhHNTJZWElnVW1WaFkzUkVUMDFKYm5CMWRDQTlJRkpsWVdOMFEyeGhjM011WTNKbFlYUmxRMnhoYzNNb2UxeHVJQ0JrYVhOd2JHRjVUbUZ0WlRvZ0oxSmxZV04wUkU5TlNXNXdkWFFuTEZ4dUlDQjBZV2RPWVcxbE9pQW5TVTVRVlZRbkxGeHVYRzRnSUcxcGVHbHVjem9nVzBGMWRHOUdiMk4xYzAxcGVHbHVMQ0JNYVc1clpXUldZV3gxWlZWMGFXeHpMazFwZUdsdUxDQlNaV0ZqZEVKeWIzZHpaWEpEYjIxd2IyNWxiblJOYVhocGJsMHNYRzVjYmlBZ1oyVjBTVzVwZEdsaGJGTjBZWFJsT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCMllYSWdaR1ZtWVhWc2RGWmhiSFZsSUQwZ2RHaHBjeTV3Y205d2N5NWtaV1poZFd4MFZtRnNkV1U3WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lHbHVhWFJwWVd4RGFHVmphMlZrT2lCMGFHbHpMbkJ5YjNCekxtUmxabUYxYkhSRGFHVmphMlZrSUh4OElHWmhiSE5sTEZ4dUlDQWdJQ0FnYVc1cGRHbGhiRlpoYkhWbE9pQmtaV1poZFd4MFZtRnNkV1VnSVQwZ2JuVnNiQ0EvSUdSbFptRjFiSFJXWVd4MVpTQTZJRzUxYkd4Y2JpQWdJQ0I5TzF4dUlDQjlMRnh1WEc0Z0lISmxibVJsY2pvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0x5OGdRMnh2Ym1VZ1lIUm9hWE11Y0hKdmNITmdJSE52SUhkbElHUnZiaWQwSUcxMWRHRjBaU0IwYUdVZ2FXNXdkWFF1WEc0Z0lDQWdkbUZ5SUhCeWIzQnpJRDBnWVhOemFXZHVLSHQ5TENCMGFHbHpMbkJ5YjNCektUdGNibHh1SUNBZ0lIQnliM0J6TG1SbFptRjFiSFJEYUdWamEyVmtJRDBnYm5Wc2JEdGNiaUFnSUNCd2NtOXdjeTVrWldaaGRXeDBWbUZzZFdVZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnZG1GeUlIWmhiSFZsSUQwZ1RHbHVhMlZrVm1Gc2RXVlZkR2xzY3k1blpYUldZV3gxWlNoMGFHbHpLVHRjYmlBZ0lDQndjbTl3Y3k1MllXeDFaU0E5SUhaaGJIVmxJQ0U5SUc1MWJHd2dQeUIyWVd4MVpTQTZJSFJvYVhNdWMzUmhkR1V1YVc1cGRHbGhiRlpoYkhWbE8xeHVYRzRnSUNBZ2RtRnlJR05vWldOclpXUWdQU0JNYVc1clpXUldZV3gxWlZWMGFXeHpMbWRsZEVOb1pXTnJaV1FvZEdocGN5azdYRzRnSUNBZ2NISnZjSE11WTJobFkydGxaQ0E5SUdOb1pXTnJaV1FnSVQwZ2JuVnNiQ0EvSUdOb1pXTnJaV1FnT2lCMGFHbHpMbk4wWVhSbExtbHVhWFJwWVd4RGFHVmphMlZrTzF4dVhHNGdJQ0FnY0hKdmNITXViMjVEYUdGdVoyVWdQU0IwYUdsekxsOW9ZVzVrYkdWRGFHRnVaMlU3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdhVzV3ZFhRb2NISnZjSE1zSUhSb2FYTXVjSEp2Y0hNdVkyaHBiR1J5Wlc0cE8xeHVJQ0I5TEZ4dVhHNGdJR052YlhCdmJtVnVkRVJwWkUxdmRXNTBPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0IyWVhJZ2FXUWdQU0JTWldGamRFMXZkVzUwTG1kbGRFbEVLSFJvYVhNdVoyVjBSRTlOVG05a1pTZ3BLVHRjYmlBZ0lDQnBibk4wWVc1alpYTkNlVkpsWVdOMFNVUmJhV1JkSUQwZ2RHaHBjenRjYmlBZ2ZTeGNibHh1SUNCamIyMXdiMjVsYm5SWGFXeHNWVzV0YjNWdWREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkbUZ5SUhKdmIzUk9iMlJsSUQwZ2RHaHBjeTVuWlhSRVQwMU9iMlJsS0NrN1hHNGdJQ0FnZG1GeUlHbGtJRDBnVW1WaFkzUk5iM1Z1ZEM1blpYUkpSQ2h5YjI5MFRtOWtaU2s3WEc0Z0lDQWdaR1ZzWlhSbElHbHVjM1JoYm1ObGMwSjVVbVZoWTNSSlJGdHBaRjA3WEc0Z0lIMHNYRzVjYmlBZ1kyOXRjRzl1Wlc1MFJHbGtWWEJrWVhSbE9pQm1kVzVqZEdsdmJpaHdjbVYyVUhKdmNITXNJSEJ5WlhaVGRHRjBaU3dnY0hKbGRrTnZiblJsZUhRcElIdGNiaUFnSUNCMllYSWdjbTl2ZEU1dlpHVWdQU0IwYUdsekxtZGxkRVJQVFU1dlpHVW9LVHRjYmlBZ0lDQnBaaUFvZEdocGN5NXdjbTl3Y3k1amFHVmphMlZrSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5NXpaWFJXWVd4MVpVWnZjbEJ5YjNCbGNuUjVLRnh1SUNBZ0lDQWdJQ0J5YjI5MFRtOWtaU3hjYmlBZ0lDQWdJQ0FnSjJOb1pXTnJaV1FuTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ5YjNCekxtTm9aV05yWldRZ2ZId2dabUZzYzJWY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZG1GeUlIWmhiSFZsSUQwZ1RHbHVhMlZrVm1Gc2RXVlZkR2xzY3k1blpYUldZV3gxWlNoMGFHbHpLVHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdMeThnUTJGemRDQmdkbUZzZFdWZ0lIUnZJR0VnYzNSeWFXNW5JSFJ2SUdWdWMzVnlaU0IwYUdVZ2RtRnNkV1VnYVhNZ2MyVjBJR052Y25KbFkzUnNlUzRnVjJocGJHVmNiaUFnSUNBZ0lDOHZJR0p5YjNkelpYSnpJSFI1Y0dsallXeHNlU0JrYnlCMGFHbHpJR0Z6SUc1bFkyVnpjMkZ5ZVN3Z2FuTmtiMjBnWkc5bGMyNG5kQzVjYmlBZ0lDQWdJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3k1elpYUldZV3gxWlVadmNsQnliM0JsY25SNUtISnZiM1JPYjJSbExDQW5kbUZzZFdVbkxDQW5KeUFySUhaaGJIVmxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnWDJoaGJtUnNaVU5vWVc1blpUb2dablZ1WTNScGIyNG9aWFpsYm5RcElIdGNiaUFnSUNCMllYSWdjbVYwZFhKdVZtRnNkV1U3WEc0Z0lDQWdkbUZ5SUc5dVEyaGhibWRsSUQwZ1RHbHVhMlZrVm1Gc2RXVlZkR2xzY3k1blpYUlBia05vWVc1blpTaDBhR2x6S1R0Y2JpQWdJQ0JwWmlBb2IyNURhR0Z1WjJVcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmxaaGJIVmxJRDBnYjI1RGFHRnVaMlV1WTJGc2JDaDBhR2x6TENCbGRtVnVkQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lDOHZJRWhsY21VZ2QyVWdkWE5sSUdGellYQWdkRzhnZDJGcGRDQjFiblJwYkNCaGJHd2dkWEJrWVhSbGN5Qm9ZWFpsSUhCeWIzQmhaMkYwWldRc0lIZG9hV05vWEc0Z0lDQWdMeThnYVhNZ2FXMXdiM0owWVc1MElIZG9aVzRnZFhOcGJtY2dZMjl1ZEhKdmJHeGxaQ0JqYjIxd2IyNWxiblJ6SUhkcGRHaHBiaUJzWVhsbGNuTTZYRzRnSUNBZ0x5OGdhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMlpoWTJWaWIyOXJMM0psWVdOMEwybHpjM1ZsY3k4eE5qazRYRzRnSUNBZ1VtVmhZM1JWY0dSaGRHVnpMbUZ6WVhBb1ptOXlZMlZWY0dSaGRHVkpaazF2ZFc1MFpXUXNJSFJvYVhNcE8xeHVYRzRnSUNBZ2RtRnlJRzVoYldVZ1BTQjBhR2x6TG5CeWIzQnpMbTVoYldVN1hHNGdJQ0FnYVdZZ0tIUm9hWE11Y0hKdmNITXVkSGx3WlNBOVBUMGdKM0poWkdsdkp5QW1KaUJ1WVcxbElDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lIWmhjaUJ5YjI5MFRtOWtaU0E5SUhSb2FYTXVaMlYwUkU5TlRtOWtaU2dwTzF4dUlDQWdJQ0FnZG1GeUlIRjFaWEo1VW05dmRDQTlJSEp2YjNST2IyUmxPMXh1WEc0Z0lDQWdJQ0IzYUdsc1pTQW9jWFZsY25sU2IyOTBMbkJoY21WdWRFNXZaR1VwSUh0Y2JpQWdJQ0FnSUNBZ2NYVmxjbmxTYjI5MElEMGdjWFZsY25sU2IyOTBMbkJoY21WdWRFNXZaR1U3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUM4dklFbG1JR0J5YjI5MFRtOWtaUzVtYjNKdFlDQjNZWE1nYm05dUxXNTFiR3dzSUhSb1pXNGdkMlVnWTI5MWJHUWdkSEo1SUdCbWIzSnRMbVZzWlcxbGJuUnpZQ3hjYmlBZ0lDQWdJQzh2SUdKMWRDQjBhR0YwSUhOdmJXVjBhVzFsY3lCaVpXaGhkbVZ6SUhOMGNtRnVaMlZzZVNCcGJpQkpSVGd1SUZkbElHTnZkV3hrSUdGc2MyOGdkSEo1SUhWemFXNW5YRzRnSUNBZ0lDQXZMeUJnWm05eWJTNW5aWFJGYkdWdFpXNTBjMEo1VG1GdFpXQXNJR0oxZENCMGFHRjBJSGRwYkd3Z2IyNXNlU0J5WlhSMWNtNGdaR2x5WldOMElHTm9hV3hrY21WdVhHNGdJQ0FnSUNBdkx5QmhibVFnZDI5dUozUWdhVzVqYkhWa1pTQnBibkIxZEhNZ2RHaGhkQ0IxYzJVZ2RHaGxJRWhVVFV3MUlHQm1iM0p0UFdBZ1lYUjBjbWxpZFhSbExpQlRhVzVqWlZ4dUlDQWdJQ0FnTHk4Z2RHaGxJR2x1Y0hWMElHMXBaMmgwSUc1dmRDQmxkbVZ1SUdKbElHbHVJR0VnWm05eWJTd2diR1YwSjNNZ2FuVnpkQ0IxYzJVZ2RHaGxJR2RzYjJKaGJGeHVJQ0FnSUNBZ0x5OGdZSEYxWlhKNVUyVnNaV04wYjNKQmJHeGdJSFJ2SUdWdWMzVnlaU0IzWlNCa2IyNG5kQ0J0YVhOeklHRnVlWFJvYVc1bkxseHVJQ0FnSUNBZ2RtRnlJR2R5YjNWd0lEMGdjWFZsY25sU2IyOTBMbkYxWlhKNVUyVnNaV04wYjNKQmJHd29YRzRnSUNBZ0lDQWdJQ2RwYm5CMWRGdHVZVzFsUFNjZ0t5QktVMDlPTG5OMGNtbHVaMmxtZVNnbkp5QXJJRzVoYldVcElDc2dKMTFiZEhsd1pUMWNJbkpoWkdsdlhDSmRKeWs3WEc1Y2JpQWdJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXdMQ0JuY205MWNFeGxiaUE5SUdkeWIzVndMbXhsYm1kMGFEc2dhU0E4SUdkeWIzVndUR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHOTBhR1Z5VG05a1pTQTlJR2R5YjNWd1cybGRPMXh1SUNBZ0lDQWdJQ0JwWmlBb2IzUm9aWEpPYjJSbElEMDlQU0J5YjI5MFRtOWtaU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdiM1JvWlhKT2IyUmxMbVp2Y20wZ0lUMDlJSEp2YjNST2IyUmxMbVp2Y20wcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCMllYSWdiM1JvWlhKSlJDQTlJRkpsWVdOMFRXOTFiblF1WjJWMFNVUW9iM1JvWlhKT2IyUmxLVHRjYmlBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSUNCdmRHaGxja2xFTEZ4dUlDQWdJQ0FnSUNBZ0lDZFNaV0ZqZEVSUFRVbHVjSFYwT2lCTmFYaHBibWNnVW1WaFkzUWdZVzVrSUc1dmJpMVNaV0ZqZENCeVlXUnBieUJwYm5CMWRITWdkMmwwYUNCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0ozTmhiV1VnWUc1aGJXVmdJR2x6SUc1dmRDQnpkWEJ3YjNKMFpXUXVKMXh1SUNBZ0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHOTBhR1Z5U1VRcEtUdGNiaUFnSUNBZ0lDQWdkbUZ5SUc5MGFHVnlTVzV6ZEdGdVkyVWdQU0JwYm5OMFlXNWpaWE5DZVZKbFlXTjBTVVJiYjNSb1pYSkpSRjA3WEc0Z0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUNBZ2IzUm9aWEpKYm5OMFlXNWpaU3hjYmlBZ0lDQWdJQ0FnSUNBblVtVmhZM1JFVDAxSmJuQjFkRG9nVlc1cmJtOTNiaUJ5WVdScGJ5QmlkWFIwYjI0Z1NVUWdKWE11Snl4Y2JpQWdJQ0FnSUNBZ0lDQnZkR2hsY2tsRVhHNGdJQ0FnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvYjNSb1pYSkpibk4wWVc1alpTa3BPMXh1SUNBZ0lDQWdJQ0F2THlCSlppQjBhR2x6SUdseklHRWdZMjl1ZEhKdmJHeGxaQ0J5WVdScGJ5QmlkWFIwYjI0Z1ozSnZkWEFzSUdadmNtTnBibWNnZEdobElHbHVjSFYwSUhSb1lYUmNiaUFnSUNBZ0lDQWdMeThnZDJGeklIQnlaWFpwYjNWemJIa2dZMmhsWTJ0bFpDQjBieUIxY0dSaGRHVWdkMmxzYkNCallYVnpaU0JwZENCMGJ5QmlaU0JqYjIxbElISmxMV05vWldOclpXUmNiaUFnSUNBZ0lDQWdMeThnWVhNZ1lYQndjbTl3Y21saGRHVXVYRzRnSUNBZ0lDQWdJRkpsWVdOMFZYQmtZWFJsY3k1aGMyRndLR1p2Y21ObFZYQmtZWFJsU1daTmIzVnVkR1ZrTENCdmRHaGxja2x1YzNSaGJtTmxLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVjBkWEp1Vm1Gc2RXVTdYRzRnSUgxY2JseHVmU2s3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JFVDAxSmJuQjFkRHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NT3B0aW9uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIG9wdGlvbiA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdvcHRpb24nKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3RlZGAgaXMgc2V0LlxuICovXG52YXIgUmVhY3RET01PcHRpb24gPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTU9wdGlvbicsXG4gIHRhZ05hbWU6ICdPUFRJT04nLFxuXG4gIG1peGluczogW1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXSxcblxuICBjb21wb25lbnRXaWxsTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIC8vIFRPRE8gKHl1bmdzdGVycyk6IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGVkID09IG51bGwsXG4gICAgICAgICdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiAnICtcbiAgICAgICAgJ3NldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi4nXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9wdGlvbih0aGlzLnByb3BzLCB0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgfVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTU9wdGlvbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JFVDAxUGNIUnBiMjR1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JFVDAxUGNIUnBiMjVjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRUp5YjNkelpYSkRiMjF3YjI1bGJuUk5hWGhwYmlBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFFuSnZkM05sY2tOdmJYQnZibVZ1ZEUxcGVHbHVYQ0lwTzF4dWRtRnlJRkpsWVdOMFEyeGhjM01nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOc1lYTnpYQ0lwTzF4dWRtRnlJRkpsWVdOMFJXeGxiV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJXeGxiV1Z1ZEZ3aUtUdGNibHh1ZG1GeUlIZGhjbTVwYm1jZ1BTQnlaWEYxYVhKbEtGd2lMaTkzWVhKdWFXNW5YQ0lwTzF4dVhHNTJZWElnYjNCMGFXOXVJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVaaFkzUnZjbmtvSjI5d2RHbHZiaWNwTzF4dVhHNHZLaXBjYmlBcUlFbHRjR3hsYldWdWRITWdZVzRnUEc5d2RHbHZiajRnYm1GMGFYWmxJR052YlhCdmJtVnVkQ0IwYUdGMElIZGhjbTV6SUhkb1pXNGdZSE5sYkdWamRHVmtZQ0JwY3lCelpYUXVYRzRnS2k5Y2JuWmhjaUJTWldGamRFUlBUVTl3ZEdsdmJpQTlJRkpsWVdOMFEyeGhjM011WTNKbFlYUmxRMnhoYzNNb2UxeHVJQ0JrYVhOd2JHRjVUbUZ0WlRvZ0oxSmxZV04wUkU5TlQzQjBhVzl1Snl4Y2JpQWdkR0ZuVG1GdFpUb2dKMDlRVkVsUFRpY3NYRzVjYmlBZ2JXbDRhVzV6T2lCYlVtVmhZM1JDY205M2MyVnlRMjl0Y0c5dVpXNTBUV2w0YVc1ZExGeHVYRzRnSUdOdmJYQnZibVZ1ZEZkcGJHeE5iM1Z1ZERvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0x5OGdWRTlFVHlBb2VYVnVaM04wWlhKektUb2dVbVZ0YjNabElITjFjSEJ2Y25RZ1ptOXlJR0J6Wld4bFkzUmxaR0FnYVc0Z1BHOXdkR2x2Ymo0dVhHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJSFJvYVhNdWNISnZjSE11YzJWc1pXTjBaV1FnUFQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ0FnSjFWelpTQjBhR1VnWUdSbFptRjFiSFJXWVd4MVpXQWdiM0lnWUhaaGJIVmxZQ0J3Y205d2N5QnZiaUE4YzJWc1pXTjBQaUJwYm5OMFpXRmtJRzltSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5jMlYwZEdsdVp5QmdjMlZzWldOMFpXUmdJRzl1SUR4dmNIUnBiMjQrTGlkY2JpQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ2NtVnVaR1Z5T2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCeVpYUjFjbTRnYjNCMGFXOXVLSFJvYVhNdWNISnZjSE1zSUhSb2FYTXVjSEp2Y0hNdVkyaHBiR1J5Wlc0cE8xeHVJQ0I5WEc1Y2JuMHBPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBSRTlOVDNCMGFXOXVPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTVNlbGVjdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEF1dG9Gb2N1c01peGluID0gcmVxdWlyZShcIi4vQXV0b0ZvY3VzTWl4aW5cIik7XG52YXIgTGlua2VkVmFsdWVVdGlscyA9IHJlcXVpcmUoXCIuL0xpbmtlZFZhbHVlVXRpbHNcIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcblxudmFyIHNlbGVjdCA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdzZWxlY3QnKTtcblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0lmUGVuZGluZ1VwZGF0ZUFuZE1vdW50ZWQoKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIGlmICh0aGlzLl9wZW5kaW5nVXBkYXRlKSB7XG4gICAgdGhpcy5fcGVuZGluZ1VwZGF0ZSA9IGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdGhpcy5pc01vdW50ZWQoKSkge1xuICAgICAgdXBkYXRlT3B0aW9ucyh0aGlzLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZWxlY3RWYWx1ZVR5cGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwcm9wcy5tdWx0aXBsZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJUaGUgYFwiICsgcHJvcE5hbWUgKyBcImAgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmIFwiKSArXG4gICAgICAgIChcImBtdWx0aXBsZWAgaXMgdHJ1ZS5cIilcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIlRoZSBgXCIgKyBwcm9wTmFtZSArIFwiYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYSBzY2FsYXIgXCIpICtcbiAgICAgICAgKFwidmFsdWUgaWYgYG11bHRpcGxlYCBpcyBmYWxzZS5cIilcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50IEluc3RhbmNlIG9mIFJlYWN0RE9NU2VsZWN0XG4gKiBAcGFyYW0geyp9IHByb3BWYWx1ZSBBIHN0cmluZ2FibGUgKHdpdGggYG11bHRpcGxlYCwgYSBsaXN0IG9mIHN0cmluZ2FibGVzKS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMoY29tcG9uZW50LCBwcm9wVmFsdWUpIHtcbiAgdmFyIHNlbGVjdGVkVmFsdWUsIGksIGw7XG4gIHZhciBvcHRpb25zID0gY29tcG9uZW50LmdldERPTU5vZGUoKS5vcHRpb25zO1xuXG4gIGlmIChjb21wb25lbnQucHJvcHMubXVsdGlwbGUpIHtcbiAgICBzZWxlY3RlZFZhbHVlID0ge307XG4gICAgZm9yIChpID0gMCwgbCA9IHByb3BWYWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHNlbGVjdGVkVmFsdWVbJycgKyBwcm9wVmFsdWVbaV1dID0gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChpID0gMCwgbCA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlLmhhc093blByb3BlcnR5KG9wdGlvbnNbaV0udmFsdWUpO1xuICAgICAgaWYgKG9wdGlvbnNbaV0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbaV0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHNldCBgc2VsZWN0LnZhbHVlYCBhcyBleGFjdCBiZWhhdmlvciBpc24ndCBjb25zaXN0ZW50IGFjcm9zcyBhbGxcbiAgICAvLyBicm93c2VycyBmb3IgYWxsIGNhc2VzLlxuICAgIHNlbGVjdGVkVmFsdWUgPSAnJyArIHByb3BWYWx1ZTtcbiAgICBmb3IgKGkgPSAwLCBsID0gb3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChvcHRpb25zW2ldLnZhbHVlID09PSBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgb3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCBhbGxvd3Mgb3B0aW9uYWxseSBzZXR0aW5nIHRoZVxuICogcHJvcHMgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuIElmIGBtdWx0aXBsZWAgaXMgZmFsc2UsIHRoZSBwcm9wIG11c3QgYmUgYVxuICogc3RyaW5nYWJsZS4gSWYgYG11bHRpcGxlYCBpcyB0cnVlLCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ2FibGVzLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGNoYW5nZSB0aGVcbiAqIHNlbGVjdGVkIG9wdGlvbiB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAqXG4gKiBJZiBpdCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBvcHRpb25zIHdpbGwgbm90XG4gKiB1cGRhdGUgaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb25zLiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIG9wdGlvbnMgdG8gdXBkYXRlLlxuICpcbiAqIElmIGBkZWZhdWx0VmFsdWVgIGlzIHByb3ZpZGVkLCBhbnkgb3B0aW9ucyB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZXMgd2lsbCBiZVxuICogc2VsZWN0ZWQuXG4gKi9cbnZhciBSZWFjdERPTVNlbGVjdCA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NU2VsZWN0JyxcbiAgdGFnTmFtZTogJ1NFTEVDVCcsXG5cbiAgbWl4aW5zOiBbQXV0b0ZvY3VzTWl4aW4sIExpbmtlZFZhbHVlVXRpbHMuTWl4aW4sIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXSxcblxuICBwcm9wVHlwZXM6IHtcbiAgICBkZWZhdWx0VmFsdWU6IHNlbGVjdFZhbHVlVHlwZSxcbiAgICB2YWx1ZTogc2VsZWN0VmFsdWVUeXBlXG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAvLyBDbG9uZSBgdGhpcy5wcm9wc2Agc28gd2UgZG9uJ3QgbXV0YXRlIHRoZSBpbnB1dC5cbiAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIHRoaXMucHJvcHMpO1xuXG4gICAgcHJvcHMub25DaGFuZ2UgPSB0aGlzLl9oYW5kbGVDaGFuZ2U7XG4gICAgcHJvcHMudmFsdWUgPSBudWxsO1xuXG4gICAgcmV0dXJuIHNlbGVjdChwcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wZW5kaW5nVXBkYXRlID0gZmFsc2U7XG4gIH0sXG5cbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlT3B0aW9ucyh0aGlzLCB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZTogZnVuY3Rpb24ocHJldlByb3BzKSB7XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZSh0aGlzKTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fcGVuZGluZ1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgdXBkYXRlT3B0aW9ucyh0aGlzLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICghcHJldlByb3BzLm11bHRpcGxlICE9PSAhdGhpcy5wcm9wcy5tdWx0aXBsZSkge1xuICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdXBkYXRlT3B0aW9ucyh0aGlzLCB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdGhpcy5wcm9wcy5tdWx0aXBsZSA/IFtdIDogJycpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBfaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciByZXR1cm5WYWx1ZTtcbiAgICB2YXIgb25DaGFuZ2UgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldE9uQ2hhbmdlKHRoaXMpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBvbkNoYW5nZS5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZW5kaW5nVXBkYXRlID0gdHJ1ZTtcbiAgICBSZWFjdFVwZGF0ZXMuYXNhcCh1cGRhdGVPcHRpb25zSWZQZW5kaW5nVXBkYXRlQW5kTW91bnRlZCwgdGhpcyk7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NU2VsZWN0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NU2VsZWN0aW9uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQgPSByZXF1aXJlKFwiLi9nZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0XCIpO1xudmFyIGdldFRleHRDb250ZW50QWNjZXNzb3IgPSByZXF1aXJlKFwiLi9nZXRUZXh0Q29udGVudEFjY2Vzc29yXCIpO1xuXG4vKipcbiAqIFdoaWxlIGBpc0NvbGxhcHNlZGAgaXMgYXZhaWxhYmxlIG9uIHRoZSBTZWxlY3Rpb24gb2JqZWN0IGFuZCBgY29sbGFwc2VkYFxuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBSYW5nZSBvYmplY3QsIElFMTEgc29tZXRpbWVzIGdldHMgdGhlbSB3cm9uZy5cbiAqIElmIHRoZSBhbmNob3IvZm9jdXMgbm9kZXMgYW5kIG9mZnNldHMgYXJlIHRoZSBzYW1lLCB0aGUgcmFuZ2UgaXMgY29sbGFwc2VkLlxuICovXG5mdW5jdGlvbiBpc0NvbGxhcHNlZChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgcmV0dXJuIGFuY2hvck5vZGUgPT09IGZvY3VzTm9kZSAmJiBhbmNob3JPZmZzZXQgPT09IGZvY3VzT2Zmc2V0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgYXBwcm9wcmlhdGUgYW5jaG9yIGFuZCBmb2N1cyBub2RlL29mZnNldCBwYWlycyBmb3IgSUUuXG4gKlxuICogVGhlIGNhdGNoIGhlcmUgaXMgdGhhdCBJRSdzIHNlbGVjdGlvbiBBUEkgZG9lc24ndCBwcm92aWRlIGluZm9ybWF0aW9uXG4gKiBhYm91dCB3aGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgZm9yd2FyZCBvciBiYWNrd2FyZCwgc28gd2UgaGF2ZSB0b1xuICogYmVoYXZlIGFzIHRob3VnaCBpdCdzIGFsd2F5cyBmb3J3YXJkLlxuICpcbiAqIElFIHRleHQgZGlmZmVycyBmcm9tIG1vZGVybiBzZWxlY3Rpb24gaW4gdGhhdCBpdCBiZWhhdmVzIGFzIHRob3VnaFxuICogYmxvY2sgZWxlbWVudHMgZW5kIHdpdGggYSBuZXcgbGluZS4gVGhpcyBtZWFucyBjaGFyYWN0ZXIgb2Zmc2V0cyB3aWxsXG4gKiBkaWZmZXIgYmV0d2VlbiB0aGUgdHdvIEFQSXMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldElFT2Zmc2V0cyhub2RlKSB7XG4gIHZhciBzZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb247XG4gIHZhciBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG4gIHZhciBzZWxlY3RlZExlbmd0aCA9IHNlbGVjdGVkUmFuZ2UudGV4dC5sZW5ndGg7XG5cbiAgLy8gRHVwbGljYXRlIHNlbGVjdGlvbiBzbyB3ZSBjYW4gbW92ZSByYW5nZSB3aXRob3V0IGJyZWFraW5nIHVzZXIgc2VsZWN0aW9uLlxuICB2YXIgZnJvbVN0YXJ0ID0gc2VsZWN0ZWRSYW5nZS5kdXBsaWNhdGUoKTtcbiAgZnJvbVN0YXJ0Lm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUpO1xuICBmcm9tU3RhcnQuc2V0RW5kUG9pbnQoJ0VuZFRvU3RhcnQnLCBzZWxlY3RlZFJhbmdlKTtcblxuICB2YXIgc3RhcnRPZmZzZXQgPSBmcm9tU3RhcnQudGV4dC5sZW5ndGg7XG4gIHZhciBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIHNlbGVjdGVkTGVuZ3RoO1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0T2Zmc2V0LFxuICAgIGVuZDogZW5kT2Zmc2V0XG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRNb2Rlcm5PZmZzZXRzKG5vZGUpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICB2YXIgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldDtcbiAgdmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7XG4gIHZhciBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDtcblxuICB2YXIgY3VycmVudFJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG5cbiAgLy8gSWYgdGhlIG5vZGUgYW5kIG9mZnNldCB2YWx1ZXMgYXJlIHRoZSBzYW1lLCB0aGUgc2VsZWN0aW9uIGlzIGNvbGxhcHNlZC5cbiAgLy8gYFNlbGVjdGlvbi5pc0NvbGxhcHNlZGAgaXMgYXZhaWxhYmxlIG5hdGl2ZWx5LCBidXQgSUUgc29tZXRpbWVzIGdldHNcbiAgLy8gdGhpcyB2YWx1ZSB3cm9uZy5cbiAgdmFyIGlzU2VsZWN0aW9uQ29sbGFwc2VkID0gaXNDb2xsYXBzZWQoXG4gICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICApO1xuXG4gIHZhciByYW5nZUxlbmd0aCA9IGlzU2VsZWN0aW9uQ29sbGFwc2VkID8gMCA6IGN1cnJlbnRSYW5nZS50b1N0cmluZygpLmxlbmd0aDtcblxuICB2YXIgdGVtcFJhbmdlID0gY3VycmVudFJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgdGVtcFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTtcbiAgdGVtcFJhbmdlLnNldEVuZChjdXJyZW50UmFuZ2Uuc3RhcnRDb250YWluZXIsIGN1cnJlbnRSYW5nZS5zdGFydE9mZnNldCk7XG5cbiAgdmFyIGlzVGVtcFJhbmdlQ29sbGFwc2VkID0gaXNDb2xsYXBzZWQoXG4gICAgdGVtcFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHRlbXBSYW5nZS5zdGFydE9mZnNldCxcbiAgICB0ZW1wUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgIHRlbXBSYW5nZS5lbmRPZmZzZXRcbiAgKTtcblxuICB2YXIgc3RhcnQgPSBpc1RlbXBSYW5nZUNvbGxhcHNlZCA/IDAgOiB0ZW1wUmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7XG4gIHZhciBlbmQgPSBzdGFydCArIHJhbmdlTGVuZ3RoO1xuXG4gIC8vIERldGVjdCB3aGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgYmFja3dhcmQuXG4gIHZhciBkZXRlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIGRldGVjdGlvblJhbmdlLnNldFN0YXJ0KGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCk7XG4gIGRldGVjdGlvblJhbmdlLnNldEVuZChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbiAgdmFyIGlzQmFja3dhcmQgPSBkZXRlY3Rpb25SYW5nZS5jb2xsYXBzZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogaXNCYWNrd2FyZCA/IGVuZCA6IHN0YXJ0LFxuICAgIGVuZDogaXNCYWNrd2FyZCA/IHN0YXJ0IDogZW5kXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5mdW5jdGlvbiBzZXRJRU9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS5kdXBsaWNhdGUoKTtcbiAgdmFyIHN0YXJ0LCBlbmQ7XG5cbiAgaWYgKHR5cGVvZiBvZmZzZXRzLmVuZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gICAgZW5kID0gc3RhcnQ7XG4gIH0gZWxzZSBpZiAob2Zmc2V0cy5zdGFydCA+IG9mZnNldHMuZW5kKSB7XG4gICAgc3RhcnQgPSBvZmZzZXRzLmVuZDtcbiAgICBlbmQgPSBvZmZzZXRzLnN0YXJ0O1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgICBlbmQgPSBvZmZzZXRzLmVuZDtcbiAgfVxuXG4gIHJhbmdlLm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUpO1xuICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KTtcbiAgcmFuZ2Uuc2V0RW5kUG9pbnQoJ0VuZFRvU3RhcnQnLCByYW5nZSk7XG4gIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZCAtIHN0YXJ0KTtcbiAgcmFuZ2Uuc2VsZWN0KCk7XG59XG5cbi8qKlxuICogSW4gbW9kZXJuIG5vbi1JRSBicm93c2Vycywgd2UgY2FuIHN1cHBvcnQgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZFxuICogc2VsZWN0aW9ucy5cbiAqXG4gKiBOb3RlOiBJRTEwKyBzdXBwb3J0cyB0aGUgU2VsZWN0aW9uIG9iamVjdCwgYnV0IGl0IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoZSBgZXh0ZW5kYCBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiBpbiBtb2Rlcm4gSUUsIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiB0byBwcm9ncmFtYXRpY2FsbHkgY3JlYXRlIGEgYmFja3dhcmQgc2VsZWN0aW9uLiBUaHVzLCBmb3IgYWxsIElFXG4gKiB2ZXJzaW9ucywgd2UgdXNlIHRoZSBvbGQgSUUgQVBJIHRvIGNyZWF0ZSBvdXIgc2VsZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cbmZ1bmN0aW9uIHNldE1vZGVybk9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZVtnZXRUZXh0Q29udGVudEFjY2Vzc29yKCldLmxlbmd0aDtcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4ob2Zmc2V0cy5zdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IHR5cGVvZiBvZmZzZXRzLmVuZCA9PT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgICAgICAgc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTtcblxuICAvLyBJRSAxMSB1c2VzIG1vZGVybiBzZWxlY3Rpb24sIGJ1dCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4dGVuZCBtZXRob2QuXG4gIC8vIEZsaXAgYmFja3dhcmQgc2VsZWN0aW9ucywgc28gd2UgY2FuIHNldCB3aXRoIGEgc2luZ2xlIHJhbmdlLlxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQgPiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7XG4gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbGVjdGlvbi5leHRlbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHVzZUlFT2Zmc2V0cyA9IChcbiAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmXG4gICdzZWxlY3Rpb24nIGluIGRvY3VtZW50ICYmXG4gICEoJ2dldFNlbGVjdGlvbicgaW4gd2luZG93KVxuKTtcblxudmFyIFJlYWN0RE9NU2VsZWN0aW9uID0ge1xuICAvKipcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqL1xuICBnZXRPZmZzZXRzOiB1c2VJRU9mZnNldHMgPyBnZXRJRU9mZnNldHMgOiBnZXRNb2Rlcm5PZmZzZXRzLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAgICovXG4gIHNldE9mZnNldHM6IHVzZUlFT2Zmc2V0cyA/IHNldElFT2Zmc2V0cyA6IHNldE1vZGVybk9mZnNldHNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01TZWxlY3Rpb247XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5T3BlcmF0aW9uc1wiKTtcbnZhciBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCA9XG4gIHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RET01Db21wb25lbnRcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlciA9IHJlcXVpcmUoXCIuL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlclwiKTtcblxuLyoqXG4gKiBUZXh0IG5vZGVzIHZpb2xhdGUgYSBjb3VwbGUgYXNzdW1wdGlvbnMgdGhhdCBSZWFjdCBtYWtlcyBhYm91dCBjb21wb25lbnRzOlxuICpcbiAqICAtIFdoZW4gbW91bnRpbmcgdGV4dCBpbnRvIHRoZSBET00sIGFkamFjZW50IHRleHQgbm9kZXMgYXJlIG1lcmdlZC5cbiAqICAtIFRleHQgbm9kZXMgY2Fubm90IGJlIGFzc2lnbmVkIGEgUmVhY3Qgcm9vdCBJRC5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIHRvIHdyYXAgc3RyaW5ncyBpbiBlbGVtZW50cyBzbyB0aGF0IHRoZXkgY2FuIHVuZGVyZ29cbiAqIHRoZSBzYW1lIHJlY29uY2lsaWF0aW9uIHRoYXQgaXMgYXBwbGllZCB0byBlbGVtZW50cy5cbiAqXG4gKiBUT0RPOiBJbnZlc3RpZ2F0ZSByZXByZXNlbnRpbmcgUmVhY3QgY29tcG9uZW50cyBpbiB0aGUgRE9NIHdpdGggdGV4dCBub2Rlcy5cbiAqXG4gKiBAY2xhc3MgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFjdENvbXBvbmVudFxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdERPTVRleHRDb21wb25lbnQgPSBmdW5jdGlvbihwcm9wcykge1xuICAvLyBUaGlzIGNvbnN0cnVjdG9yIGFuZCBpdHMgYXJndW1lbnQgaXMgY3VycmVudGx5IHVzZWQgYnkgbW9ja3MuXG59O1xuXG5hc3NpZ24oUmVhY3RET01UZXh0Q29tcG9uZW50LnByb3RvdHlwZSwge1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlYWN0VGV4dH0gdGV4dFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24odGV4dCkge1xuICAgIC8vIFRPRE86IFRoaXMgaXMgcmVhbGx5IGEgUmVhY3RUZXh0IChSZWFjdE5vZGUpLCBub3QgYSBSZWFjdEVsZW1lbnRcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IHRleHQ7XG4gICAgdGhpcy5fc3RyaW5nVGV4dCA9ICcnICsgdGV4dDtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICB0aGlzLl9yb290Tm9kZUlEID0gbnVsbDtcbiAgICB0aGlzLl9tb3VudEluZGV4ID0gMDtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgbWFya3VwIGZvciB0aGlzIHRleHQgbm9kZS4gVGhpcyBub2RlIGlzIG5vdCBpbnRlbmRlZCB0byBoYXZlXG4gICAqIGFueSBmZWF0dXJlcyBiZXNpZGVzIGNvbnRhaW5pbmcgdGV4dCBjb250ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIERPTSBJRCBvZiB0aGUgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7c3RyaW5nfSBNYXJrdXAgZm9yIHRoaXMgdGV4dCBub2RlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbihyb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IHJvb3RJRDtcbiAgICB2YXIgZXNjYXBlZFRleHQgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIodGhpcy5fc3RyaW5nVGV4dCk7XG5cbiAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgIC8vIE5vcm1hbGx5IHdlJ2Qgd3JhcCB0aGlzIGluIGEgYHNwYW5gIGZvciB0aGUgcmVhc29ucyBzdGF0ZWQgYWJvdmUsIGJ1dFxuICAgICAgLy8gc2luY2UgdGhpcyBpcyBhIHNpdHVhdGlvbiB3aGVyZSBSZWFjdCB3b24ndCB0YWtlIG92ZXIgKHN0YXRpYyBwYWdlcyksXG4gICAgICAvLyB3ZSBjYW4gc2ltcGx5IHJldHVybiB0aGUgdGV4dCBhcyBpdCBpcy5cbiAgICAgIHJldHVybiBlc2NhcGVkVGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgJzxzcGFuICcgKyBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuY3JlYXRlTWFya3VwRm9ySUQocm9vdElEKSArICc+JyArXG4gICAgICAgIGVzY2FwZWRUZXh0ICtcbiAgICAgICc8L3NwYW4+J1xuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhpcyBjb21wb25lbnQgYnkgdXBkYXRpbmcgdGhlIHRleHQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFRleHR9IG5leHRUZXh0IFRoZSBuZXh0IHRleHQgY29udGVudFxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24obmV4dFRleHQsIHRyYW5zYWN0aW9uKSB7XG4gICAgaWYgKG5leHRUZXh0ICE9PSB0aGlzLl9jdXJyZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBuZXh0VGV4dDtcbiAgICAgIHZhciBuZXh0U3RyaW5nVGV4dCA9ICcnICsgbmV4dFRleHQ7XG4gICAgICBpZiAobmV4dFN0cmluZ1RleHQgIT09IHRoaXMuX3N0cmluZ1RleHQpIHtcbiAgICAgICAgLy8gVE9ETzogU2F2ZSB0aGlzIGFzIHBlbmRpbmcgcHJvcHMgYW5kIHVzZSBwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnlcbiAgICAgICAgLy8gYW5kL29yIHVwZGF0ZUNvbXBvbmVudCB0byBkbyB0aGUgYWN0dWFsIHVwZGF0ZSBmb3IgY29uc2lzdGVuY3kgd2l0aFxuICAgICAgICAvLyBvdGhlciBjb21wb25lbnQgdHlwZXM/XG4gICAgICAgIHRoaXMuX3N0cmluZ1RleHQgPSBuZXh0U3RyaW5nVGV4dDtcbiAgICAgICAgUmVhY3RET01Db21wb25lbnQuQmFja2VuZElET3BlcmF0aW9ucy51cGRhdGVUZXh0Q29udGVudEJ5SUQoXG4gICAgICAgICAgdGhpcy5fcm9vdE5vZGVJRCxcbiAgICAgICAgICBuZXh0U3RyaW5nVGV4dFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbigpIHtcbiAgICBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudC51bm1vdW50SURGcm9tRW52aXJvbm1lbnQodGhpcy5fcm9vdE5vZGVJRCk7XG4gIH1cblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01UZXh0Q29tcG9uZW50O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTVRleHRhcmVhXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXV0b0ZvY3VzTWl4aW4gPSByZXF1aXJlKFwiLi9BdXRvRm9jdXNNaXhpblwiKTtcbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgTGlua2VkVmFsdWVVdGlscyA9IHJlcXVpcmUoXCIuL0xpbmtlZFZhbHVlVXRpbHNcIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIHRleHRhcmVhID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkoJ3RleHRhcmVhJyk7XG5cbmZ1bmN0aW9uIGZvcmNlVXBkYXRlSWZNb3VudGVkKCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICBpZiAodGhpcy5pc01vdW50ZWQoKSkge1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8dGV4dGFyZWE+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVgLCBhbmRcbiAqIGBkZWZhdWx0VmFsdWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgRE9NIEFQSSBiZWNhdXNlIHZhbHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hpbGRyZW4uXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5vdCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSB2YWx1ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNwZWNpZmllZCwgb3IgdGhlIGNoaWxkcmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG52YXIgUmVhY3RET01UZXh0YXJlYSA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NVGV4dGFyZWEnLFxuICB0YWdOYW1lOiAnVEVYVEFSRUEnLFxuXG4gIG1peGluczogW0F1dG9Gb2N1c01peGluLCBMaW5rZWRWYWx1ZVV0aWxzLk1peGluLCBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbl0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgLy8gVE9ETyAoeXVuZ3N0ZXJzKTogUmVtb3ZlIHN1cHBvcnQgZm9yIGNoaWxkcmVuIGNvbnRlbnQgaW4gPHRleHRhcmVhPi5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgaW5zdGVhZCBvZiBzZXR0aW5nICcgK1xuICAgICAgICAgICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LidcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgfVxuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgZGVmYXVsdFZhbHVlID09IG51bGwsXG4gICAgICAgICdJZiB5b3Ugc3VwcGx5IGBkZWZhdWx0VmFsdWVgIG9uIGEgPHRleHRhcmVhPiwgZG8gbm90IHBhc3MgY2hpbGRyZW4uJ1xuICAgICAgKSA6IGludmFyaWFudChkZWZhdWx0VmFsdWUgPT0gbnVsbCkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgY2hpbGRyZW4ubGVuZ3RoIDw9IDEsXG4gICAgICAgICAgJzx0ZXh0YXJlYT4gY2FuIG9ubHkgaGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC4nXG4gICAgICAgICkgOiBpbnZhcmlhbnQoY2hpbGRyZW4ubGVuZ3RoIDw9IDEpKTtcbiAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlblswXTtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdFZhbHVlID0gJycgKyBjaGlsZHJlbjtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICB9XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZSh0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gV2Ugc2F2ZSB0aGUgaW5pdGlhbCB2YWx1ZSBzbyB0aGF0IGBSZWFjdERPTUNvbXBvbmVudGAgZG9lc24ndCB1cGRhdGVcbiAgICAgIC8vIGB0ZXh0Q29udGVudGAgKHVubmVjZXNzYXJ5IHNpbmNlIHdlIHVwZGF0ZSB2YWx1ZSkuXG4gICAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBjYW4gYmUgYSBib29sZWFuIG9yIG9iamVjdCBzbyB0aGF0J3Mgd2h5IGl0J3NcbiAgICAgIC8vIGZvcmNlZCB0byBiZSBhIHN0cmluZy5cbiAgICAgIGluaXRpYWxWYWx1ZTogJycgKyAodmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogZGVmYXVsdFZhbHVlKVxuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAvLyBDbG9uZSBgdGhpcy5wcm9wc2Agc28gd2UgZG9uJ3QgbXV0YXRlIHRoZSBpbnB1dC5cbiAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIHRoaXMucHJvcHMpO1xuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwsXG4gICAgICAnYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uJ1xuICAgICkgOiBpbnZhcmlhbnQocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpO1xuXG4gICAgcHJvcHMuZGVmYXVsdFZhbHVlID0gbnVsbDtcbiAgICBwcm9wcy52YWx1ZSA9IG51bGw7XG4gICAgcHJvcHMub25DaGFuZ2UgPSB0aGlzLl9oYW5kbGVDaGFuZ2U7XG5cbiAgICAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAgIC8vIGdldCByZXNldCBpZiBgdGV4dENvbnRlbnRgIGlzIG11dGF0ZWQuXG4gICAgcmV0dXJuIHRleHRhcmVhKHByb3BzLCB0aGlzLnN0YXRlLmluaXRpYWxWYWx1ZSk7XG4gIH0sXG5cbiAgY29tcG9uZW50RGlkVXBkYXRlOiBmdW5jdGlvbihwcmV2UHJvcHMsIHByZXZTdGF0ZSwgcHJldkNvbnRleHQpIHtcbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLmdldERPTU5vZGUoKTtcbiAgICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eShyb290Tm9kZSwgJ3ZhbHVlJywgJycgKyB2YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIF9oYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHZhciBvbkNoYW5nZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0T25DaGFuZ2UodGhpcyk7XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IG9uQ2hhbmdlLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgICBSZWFjdFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgdGhpcyk7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NVGV4dGFyZWE7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRVQwMVVaWGgwWVhKbFlTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFJFOU5WR1Y0ZEdGeVpXRmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJCZFhSdlJtOWpkWE5OYVhocGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDBGMWRHOUdiMk4xYzAxcGVHbHVYQ0lwTzF4dWRtRnlJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3lBOUlISmxjWFZwY21Vb1hDSXVMMFJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1YzF3aUtUdGNiblpoY2lCTWFXNXJaV1JXWVd4MVpWVjBhV3h6SUQwZ2NtVnhkV2x5WlNoY0lpNHZUR2x1YTJWa1ZtRnNkV1ZWZEdsc2Mxd2lLVHRjYm5aaGNpQlNaV0ZqZEVKeWIzZHpaWEpEYjIxd2IyNWxiblJOYVhocGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRbkp2ZDNObGNrTnZiWEJ2Ym1WdWRFMXBlR2x1WENJcE8xeHVkbUZ5SUZKbFlXTjBRMnhoYzNNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnNZWE56WENJcE8xeHVkbUZ5SUZKbFlXTjBSV3hsYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSV3hsYldWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEZWd1pHRjBaWE1nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZWd1pHRjBaWE5jSWlrN1hHNWNiblpoY2lCaGMzTnBaMjRnUFNCeVpYRjFhWEpsS0Z3aUxpOVBZbXBsWTNRdVlYTnphV2R1WENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVkbUZ5SUhkaGNtNXBibWNnUFNCeVpYRjFhWEpsS0Z3aUxpOTNZWEp1YVc1blhDSXBPMXh1WEc1MllYSWdkR1Y0ZEdGeVpXRWdQU0JTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUm1GamRHOXllU2duZEdWNGRHRnlaV0VuS1R0Y2JseHVablZ1WTNScGIyNGdabTl5WTJWVmNHUmhkR1ZKWmsxdmRXNTBaV1FvS1NCN1hHNGdJQzhxYW5Ob2FXNTBJSFpoYkdsa2RHaHBjenAwY25WbElDb3ZYRzRnSUdsbUlDaDBhR2x6TG1selRXOTFiblJsWkNncEtTQjdYRzRnSUNBZ2RHaHBjeTVtYjNKalpWVndaR0YwWlNncE8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dTVzF3YkdWdFpXNTBjeUJoSUR4MFpYaDBZWEpsWVQ0Z2JtRjBhWFpsSUdOdmJYQnZibVZ1ZENCMGFHRjBJR0ZzYkc5M2N5QnpaWFIwYVc1bklHQjJZV3gxWldBc0lHRnVaRnh1SUNvZ1lHUmxabUYxYkhSV1lXeDFaV0F1SUZSb2FYTWdaR2xtWm1WeWN5Qm1jbTl0SUhSb1pTQjBjbUZrYVhScGIyNWhiQ0JFVDAwZ1FWQkpJR0psWTJGMWMyVWdkbUZzZFdVZ2FYTmNiaUFxSUhWemRXRnNiSGtnYzJWMElHRnpJRkJEUkVGVVFTQmphR2xzWkhKbGJpNWNiaUFxWEc0Z0tpQkpaaUJnZG1Gc2RXVmdJR2x6SUc1dmRDQnpkWEJ3YkdsbFpDQW9iM0lnYm5Wc2JDOTFibVJsWm1sdVpXUXBMQ0IxYzJWeUlHRmpkR2x2Ym5NZ2RHaGhkQ0JoWm1abFkzUWdkR2hsWEc0Z0tpQjJZV3gxWlNCM2FXeHNJSFJ5YVdkblpYSWdkWEJrWVhSbGN5QjBieUIwYUdVZ1pXeGxiV1Z1ZEM1Y2JpQXFYRzRnS2lCSlppQmdkbUZzZFdWZ0lHbHpJSE4xY0hCc2FXVmtJQ2hoYm1RZ2JtOTBJRzUxYkd3dmRXNWtaV1pwYm1Wa0tTd2dkR2hsSUhKbGJtUmxjbVZrSUdWc1pXMWxiblFnZDJsc2JGeHVJQ29nYm05MElIUnlhV2RuWlhJZ2RYQmtZWFJsY3lCMGJ5QjBhR1VnWld4bGJXVnVkQzRnU1c1emRHVmhaQ3dnZEdobElHQjJZV3gxWldBZ2NISnZjQ0J0ZFhOMElHTm9ZVzVuWlNCcGJseHVJQ29nYjNKa1pYSWdabTl5SUhSb1pTQnlaVzVrWlhKbFpDQmxiR1Z0Wlc1MElIUnZJR0psSUhWd1pHRjBaV1F1WEc0Z0tseHVJQ29nVkdobElISmxibVJsY21Wa0lHVnNaVzFsYm5RZ2QybHNiQ0JpWlNCcGJtbDBhV0ZzYVhwbFpDQjNhWFJvSUdGdUlHVnRjSFI1SUhaaGJIVmxMQ0IwYUdVZ2NISnZjRnh1SUNvZ1lHUmxabUYxYkhSV1lXeDFaV0FnYVdZZ2MzQmxZMmxtYVdWa0xDQnZjaUIwYUdVZ1kyaHBiR1J5Wlc0Z1kyOXVkR1Z1ZENBb1pHVndjbVZqWVhSbFpDa3VYRzRnS2k5Y2JuWmhjaUJTWldGamRFUlBUVlJsZUhSaGNtVmhJRDBnVW1WaFkzUkRiR0Z6Y3k1amNtVmhkR1ZEYkdGemN5aDdYRzRnSUdScGMzQnNZWGxPWVcxbE9pQW5VbVZoWTNSRVQwMVVaWGgwWVhKbFlTY3NYRzRnSUhSaFowNWhiV1U2SUNkVVJWaFVRVkpGUVNjc1hHNWNiaUFnYldsNGFXNXpPaUJiUVhWMGIwWnZZM1Z6VFdsNGFXNHNJRXhwYm10bFpGWmhiSFZsVlhScGJITXVUV2w0YVc0c0lGSmxZV04wUW5KdmQzTmxja052YlhCdmJtVnVkRTFwZUdsdVhTeGNibHh1SUNCblpYUkpibWwwYVdGc1UzUmhkR1U2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUhaaGNpQmtaV1poZFd4MFZtRnNkV1VnUFNCMGFHbHpMbkJ5YjNCekxtUmxabUYxYkhSV1lXeDFaVHRjYmlBZ0lDQXZMeUJVVDBSUElDaDVkVzVuYzNSbGNuTXBPaUJTWlcxdmRtVWdjM1Z3Y0c5eWRDQm1iM0lnWTJocGJHUnlaVzRnWTI5dWRHVnVkQ0JwYmlBOGRHVjRkR0Z5WldFK0xseHVJQ0FnSUhaaGNpQmphR2xzWkhKbGJpQTlJSFJvYVhNdWNISnZjSE11WTJocGJHUnlaVzQ3WEc0Z0lDQWdhV1lnS0dOb2FXeGtjbVZ1SUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ0oxVnpaU0IwYUdVZ1lHUmxabUYxYkhSV1lXeDFaV0FnYjNJZ1lIWmhiSFZsWUNCd2NtOXdjeUJwYm5OMFpXRmtJRzltSUhObGRIUnBibWNnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMk5vYVd4a2NtVnVJRzl1SUR4MFpYaDBZWEpsWVQ0dUoxeHVJQ0FnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQmtaV1poZFd4MFZtRnNkV1VnUFQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ0FnSjBsbUlIbHZkU0J6ZFhCd2JIa2dZR1JsWm1GMWJIUldZV3gxWldBZ2IyNGdZU0E4ZEdWNGRHRnlaV0UrTENCa2J5QnViM1FnY0dGemN5QmphR2xzWkhKbGJpNG5YRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0dSbFptRjFiSFJXWVd4MVpTQTlQU0J1ZFd4c0tTazdYRzRnSUNBZ0lDQnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaGphR2xzWkhKbGJpa3BJSHRjYmlBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSUNCamFHbHNaSEpsYmk1c1pXNW5kR2dnUEQwZ01TeGNiaUFnSUNBZ0lDQWdJQ0FuUEhSbGVIUmhjbVZoUGlCallXNGdiMjVzZVNCb1lYWmxJR0YwSUcxdmMzUWdiMjVsSUdOb2FXeGtMaWRjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaGphR2xzWkhKbGJpNXNaVzVuZEdnZ1BEMGdNU2twTzF4dUlDQWdJQ0FnSUNCamFHbHNaSEpsYmlBOUlHTm9hV3hrY21WdVd6QmRPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JrWldaaGRXeDBWbUZzZFdVZ1BTQW5KeUFySUdOb2FXeGtjbVZ1TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWkdWbVlYVnNkRlpoYkhWbElEMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHUmxabUYxYkhSV1lXeDFaU0E5SUNjbk8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCTWFXNXJaV1JXWVd4MVpWVjBhV3h6TG1kbGRGWmhiSFZsS0hSb2FYTXBPMXh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBdkx5QlhaU0J6WVhabElIUm9aU0JwYm1sMGFXRnNJSFpoYkhWbElITnZJSFJvWVhRZ1lGSmxZV04wUkU5TlEyOXRjRzl1Wlc1MFlDQmtiMlZ6YmlkMElIVndaR0YwWlZ4dUlDQWdJQ0FnTHk4Z1lIUmxlSFJEYjI1MFpXNTBZQ0FvZFc1dVpXTmxjM05oY25rZ2MybHVZMlVnZDJVZ2RYQmtZWFJsSUhaaGJIVmxLUzVjYmlBZ0lDQWdJQzh2SUZSb1pTQnBibWwwYVdGc0lIWmhiSFZsSUdOaGJpQmlaU0JoSUdKdmIyeGxZVzRnYjNJZ2IySnFaV04wSUhOdklIUm9ZWFFuY3lCM2FIa2dhWFFuYzF4dUlDQWdJQ0FnTHk4Z1ptOXlZMlZrSUhSdklHSmxJR0VnYzNSeWFXNW5MbHh1SUNBZ0lDQWdhVzVwZEdsaGJGWmhiSFZsT2lBbkp5QXJJQ2gyWVd4MVpTQWhQU0J1ZFd4c0lEOGdkbUZzZFdVZ09pQmtaV1poZFd4MFZtRnNkV1VwWEc0Z0lDQWdmVHRjYmlBZ2ZTeGNibHh1SUNCeVpXNWtaWEk2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUM4dklFTnNiMjVsSUdCMGFHbHpMbkJ5YjNCellDQnpieUIzWlNCa2IyNG5kQ0J0ZFhSaGRHVWdkR2hsSUdsdWNIVjBMbHh1SUNBZ0lIWmhjaUJ3Y205d2N5QTlJR0Z6YzJsbmJpaDdmU3dnZEdocGN5NXdjbTl3Y3lrN1hHNWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnY0hKdmNITXVaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV3Z1BUMGdiblZzYkN4Y2JpQWdJQ0FnSUNkZ1pHRnVaMlZ5YjNWemJIbFRaWFJKYm01bGNraFVUVXhnSUdSdlpYTWdibTkwSUcxaGEyVWdjMlZ1YzJVZ2IyNGdQSFJsZUhSaGNtVmhQaTRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENod2NtOXdjeTVrWVc1blpYSnZkWE5zZVZObGRFbHVibVZ5U0ZSTlRDQTlQU0J1ZFd4c0tTazdYRzVjYmlBZ0lDQndjbTl3Y3k1a1pXWmhkV3gwVm1Gc2RXVWdQU0J1ZFd4c08xeHVJQ0FnSUhCeWIzQnpMblpoYkhWbElEMGdiblZzYkR0Y2JpQWdJQ0J3Y205d2N5NXZia05vWVc1blpTQTlJSFJvYVhNdVgyaGhibVJzWlVOb1lXNW5aVHRjYmx4dUlDQWdJQzh2SUVGc2QyRjVjeUJ6WlhRZ1kyaHBiR1J5Wlc0Z2RHOGdkR2hsSUhOaGJXVWdkR2hwYm1jdUlFbHVJRWxGT1N3Z2RHaGxJSE5sYkdWamRHbHZiaUJ5WVc1blpTQjNhV3hzWEc0Z0lDQWdMeThnWjJWMElISmxjMlYwSUdsbUlHQjBaWGgwUTI5dWRHVnVkR0FnYVhNZ2JYVjBZWFJsWkM1Y2JpQWdJQ0J5WlhSMWNtNGdkR1Y0ZEdGeVpXRW9jSEp2Y0hNc0lIUm9hWE11YzNSaGRHVXVhVzVwZEdsaGJGWmhiSFZsS1R0Y2JpQWdmU3hjYmx4dUlDQmpiMjF3YjI1bGJuUkVhV1JWY0dSaGRHVTZJR1oxYm1OMGFXOXVLSEJ5WlhaUWNtOXdjeXdnY0hKbGRsTjBZWFJsTENCd2NtVjJRMjl1ZEdWNGRDa2dlMXh1SUNBZ0lIWmhjaUIyWVd4MVpTQTlJRXhwYm10bFpGWmhiSFZsVlhScGJITXVaMlYwVm1Gc2RXVW9kR2hwY3lrN1hHNGdJQ0FnYVdZZ0tIWmhiSFZsSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUhaaGNpQnliMjkwVG05a1pTQTlJSFJvYVhNdVoyVjBSRTlOVG05a1pTZ3BPMXh1SUNBZ0lDQWdMeThnUTJGemRDQmdkbUZzZFdWZ0lIUnZJR0VnYzNSeWFXNW5JSFJ2SUdWdWMzVnlaU0IwYUdVZ2RtRnNkV1VnYVhNZ2MyVjBJR052Y25KbFkzUnNlUzRnVjJocGJHVmNiaUFnSUNBZ0lDOHZJR0p5YjNkelpYSnpJSFI1Y0dsallXeHNlU0JrYnlCMGFHbHpJR0Z6SUc1bFkyVnpjMkZ5ZVN3Z2FuTmtiMjBnWkc5bGMyNG5kQzVjYmlBZ0lDQWdJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3k1elpYUldZV3gxWlVadmNsQnliM0JsY25SNUtISnZiM1JPYjJSbExDQW5kbUZzZFdVbkxDQW5KeUFySUhaaGJIVmxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnWDJoaGJtUnNaVU5vWVc1blpUb2dablZ1WTNScGIyNG9aWFpsYm5RcElIdGNiaUFnSUNCMllYSWdjbVYwZFhKdVZtRnNkV1U3WEc0Z0lDQWdkbUZ5SUc5dVEyaGhibWRsSUQwZ1RHbHVhMlZrVm1Gc2RXVlZkR2xzY3k1blpYUlBia05vWVc1blpTaDBhR2x6S1R0Y2JpQWdJQ0JwWmlBb2IyNURhR0Z1WjJVcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmxaaGJIVmxJRDBnYjI1RGFHRnVaMlV1WTJGc2JDaDBhR2x6TENCbGRtVnVkQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lGSmxZV04wVlhCa1lYUmxjeTVoYzJGd0tHWnZjbU5sVlhCa1lYUmxTV1pOYjNWdWRHVmtMQ0IwYUdsektUdGNiaUFnSUNCeVpYUjFjbTRnY21WMGRYSnVWbUZzZFdVN1hHNGdJSDFjYmx4dWZTazdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkVUMDFVWlhoMFlYSmxZVHRjYmlKZGZRPT0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcbnZhciBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoXCIuL1RyYW5zYWN0aW9uXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZW1wdHlGdW5jdGlvblwiKTtcblxudmFyIFJFU0VUX0JBVENIRURfVVBEQVRFUyA9IHtcbiAgaW5pdGlhbGl6ZTogZW1wdHlGdW5jdGlvbixcbiAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMgPSBmYWxzZTtcbiAgfVxufTtcblxudmFyIEZMVVNIX0JBVENIRURfVVBEQVRFUyA9IHtcbiAgaW5pdGlhbGl6ZTogZW1wdHlGdW5jdGlvbixcbiAgY2xvc2U6IFJlYWN0VXBkYXRlcy5mbHVzaEJhdGNoZWRVcGRhdGVzLmJpbmQoUmVhY3RVcGRhdGVzKVxufTtcblxudmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJTID0gW0ZMVVNIX0JBVENIRURfVVBEQVRFUywgUkVTRVRfQkFUQ0hFRF9VUERBVEVTXTtcblxuZnVuY3Rpb24gUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVRyYW5zYWN0aW9uKCkge1xuICB0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG59XG5cbmFzc2lnbihcbiAgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVRyYW5zYWN0aW9uLnByb3RvdHlwZSxcbiAgVHJhbnNhY3Rpb24uTWl4aW4sXG4gIHtcbiAgICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgICB9XG4gIH1cbik7XG5cbnZhciB0cmFuc2FjdGlvbiA9IG5ldyBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5VHJhbnNhY3Rpb24oKTtcblxudmFyIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kgPSB7XG4gIGlzQmF0Y2hpbmdVcGRhdGVzOiBmYWxzZSxcblxuICAvKipcbiAgICogQ2FsbCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gaW4gYSBjb250ZXh0IHdpdGhpbiB3aGljaCBjYWxscyB0byBgc2V0U3RhdGVgXG4gICAqIGFuZCBmcmllbmRzIGFyZSBiYXRjaGVkIHN1Y2ggdGhhdCBjb21wb25lbnRzIGFyZW4ndCB1cGRhdGVkIHVubmVjZXNzYXJpbHkuXG4gICAqL1xuICBiYXRjaGVkVXBkYXRlczogZnVuY3Rpb24oY2FsbGJhY2ssIGEsIGIsIGMsIGQpIHtcbiAgICB2YXIgYWxyZWFkeUJhdGNoaW5nVXBkYXRlcyA9IFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXM7XG5cbiAgICBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzID0gdHJ1ZTtcblxuICAgIC8vIFRoZSBjb2RlIGlzIHdyaXR0ZW4gdGhpcyB3YXkgdG8gYXZvaWQgZXh0cmEgYWxsb2NhdGlvbnNcbiAgICBpZiAoYWxyZWFkeUJhdGNoaW5nVXBkYXRlcykge1xuICAgICAgY2FsbGJhY2soYSwgYiwgYywgZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zYWN0aW9uLnBlcmZvcm0oY2FsbGJhY2ssIG51bGwsIGEsIGIsIGMsIGQpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERlZmF1bHRJbmplY3Rpb25cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luID0gcmVxdWlyZShcIi4vQmVmb3JlSW5wdXRFdmVudFBsdWdpblwiKTtcbnZhciBDaGFuZ2VFdmVudFBsdWdpbiA9IHJlcXVpcmUoXCIuL0NoYW5nZUV2ZW50UGx1Z2luXCIpO1xudmFyIENsaWVudFJlYWN0Um9vdEluZGV4ID0gcmVxdWlyZShcIi4vQ2xpZW50UmVhY3RSb290SW5kZXhcIik7XG52YXIgRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIgPSByZXF1aXJlKFwiLi9EZWZhdWx0RXZlbnRQbHVnaW5PcmRlclwiKTtcbnZhciBFbnRlckxlYXZlRXZlbnRQbHVnaW4gPSByZXF1aXJlKFwiLi9FbnRlckxlYXZlRXZlbnRQbHVnaW5cIik7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcbnZhciBIVE1MRE9NUHJvcGVydHlDb25maWcgPSByZXF1aXJlKFwiLi9IVE1MRE9NUHJvcGVydHlDb25maWdcIik7XG52YXIgTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbiA9IHJlcXVpcmUoXCIuL01vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW5cIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCA9XG4gIHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kgPSByZXF1aXJlKFwiLi9SZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5XCIpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RET01Db21wb25lbnRcIik7XG52YXIgUmVhY3RET01CdXR0b24gPSByZXF1aXJlKFwiLi9SZWFjdERPTUJ1dHRvblwiKTtcbnZhciBSZWFjdERPTUZvcm0gPSByZXF1aXJlKFwiLi9SZWFjdERPTUZvcm1cIik7XG52YXIgUmVhY3RET01JbWcgPSByZXF1aXJlKFwiLi9SZWFjdERPTUltZ1wiKTtcbnZhciBSZWFjdERPTUlET3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NSURPcGVyYXRpb25zXCIpO1xudmFyIFJlYWN0RE9NSWZyYW1lID0gcmVxdWlyZShcIi4vUmVhY3RET01JZnJhbWVcIik7XG52YXIgUmVhY3RET01JbnB1dCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NSW5wdXRcIik7XG52YXIgUmVhY3RET01PcHRpb24gPSByZXF1aXJlKFwiLi9SZWFjdERPTU9wdGlvblwiKTtcbnZhciBSZWFjdERPTVNlbGVjdCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NU2VsZWN0XCIpO1xudmFyIFJlYWN0RE9NVGV4dGFyZWEgPSByZXF1aXJlKFwiLi9SZWFjdERPTVRleHRhcmVhXCIpO1xudmFyIFJlYWN0RE9NVGV4dENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NVGV4dENvbXBvbmVudFwiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RFdmVudExpc3RlbmVyID0gcmVxdWlyZShcIi4vUmVhY3RFdmVudExpc3RlbmVyXCIpO1xudmFyIFJlYWN0SW5qZWN0aW9uID0gcmVxdWlyZShcIi4vUmVhY3RJbmplY3Rpb25cIik7XG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlSGFuZGxlc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uID0gcmVxdWlyZShcIi4vUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvblwiKTtcbnZhciBTZWxlY3RFdmVudFBsdWdpbiA9IHJlcXVpcmUoXCIuL1NlbGVjdEV2ZW50UGx1Z2luXCIpO1xudmFyIFNlcnZlclJlYWN0Um9vdEluZGV4ID0gcmVxdWlyZShcIi4vU2VydmVyUmVhY3RSb290SW5kZXhcIik7XG52YXIgU2ltcGxlRXZlbnRQbHVnaW4gPSByZXF1aXJlKFwiLi9TaW1wbGVFdmVudFBsdWdpblwiKTtcbnZhciBTVkdET01Qcm9wZXJ0eUNvbmZpZyA9IHJlcXVpcmUoXCIuL1NWR0RPTVByb3BlcnR5Q29uZmlnXCIpO1xuXG52YXIgY3JlYXRlRnVsbFBhZ2VDb21wb25lbnQgPSByZXF1aXJlKFwiLi9jcmVhdGVGdWxsUGFnZUNvbXBvbmVudFwiKTtcblxuZnVuY3Rpb24gYXV0b0dlbmVyYXRlV3JhcHBlckNsYXNzKHR5cGUpIHtcbiAgcmV0dXJuIFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICAgIHRhZ05hbWU6IHR5cGUudG9VcHBlckNhc2UoKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBSZWFjdEVsZW1lbnQoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMucHJvcHNcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW5qZWN0KCkge1xuICBSZWFjdEluamVjdGlvbi5FdmVudEVtaXR0ZXIuaW5qZWN0UmVhY3RFdmVudExpc3RlbmVyKFxuICAgIFJlYWN0RXZlbnRMaXN0ZW5lclxuICApO1xuXG4gIC8qKlxuICAgKiBJbmplY3QgbW9kdWxlcyBmb3IgcmVzb2x2aW5nIERPTSBoaWVyYXJjaHkgYW5kIHBsdWdpbiBvcmRlcmluZy5cbiAgICovXG4gIFJlYWN0SW5qZWN0aW9uLkV2ZW50UGx1Z2luSHViLmluamVjdEV2ZW50UGx1Z2luT3JkZXIoRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIpO1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmplY3RJbnN0YW5jZUhhbmRsZShSZWFjdEluc3RhbmNlSGFuZGxlcyk7XG4gIFJlYWN0SW5qZWN0aW9uLkV2ZW50UGx1Z2luSHViLmluamVjdE1vdW50KFJlYWN0TW91bnQpO1xuXG4gIC8qKlxuICAgKiBTb21lIGltcG9ydGFudCBldmVudCBwbHVnaW5zIGluY2x1ZGVkIGJ5IGRlZmF1bHQgKHdpdGhvdXQgaGF2aW5nIHRvIHJlcXVpcmVcbiAgICogdGhlbSkuXG4gICAqL1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWUoe1xuICAgIFNpbXBsZUV2ZW50UGx1Z2luOiBTaW1wbGVFdmVudFBsdWdpbixcbiAgICBFbnRlckxlYXZlRXZlbnRQbHVnaW46IEVudGVyTGVhdmVFdmVudFBsdWdpbixcbiAgICBDaGFuZ2VFdmVudFBsdWdpbjogQ2hhbmdlRXZlbnRQbHVnaW4sXG4gICAgTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbjogTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbixcbiAgICBTZWxlY3RFdmVudFBsdWdpbjogU2VsZWN0RXZlbnRQbHVnaW4sXG4gICAgQmVmb3JlSW5wdXRFdmVudFBsdWdpbjogQmVmb3JlSW5wdXRFdmVudFBsdWdpblxuICB9KTtcblxuICBSZWFjdEluamVjdGlvbi5OYXRpdmVDb21wb25lbnQuaW5qZWN0R2VuZXJpY0NvbXBvbmVudENsYXNzKFxuICAgIFJlYWN0RE9NQ29tcG9uZW50XG4gICk7XG5cbiAgUmVhY3RJbmplY3Rpb24uTmF0aXZlQ29tcG9uZW50LmluamVjdFRleHRDb21wb25lbnRDbGFzcyhcbiAgICBSZWFjdERPTVRleHRDb21wb25lbnRcbiAgKTtcblxuICBSZWFjdEluamVjdGlvbi5OYXRpdmVDb21wb25lbnQuaW5qZWN0QXV0b1dyYXBwZXIoXG4gICAgYXV0b0dlbmVyYXRlV3JhcHBlckNsYXNzXG4gICk7XG5cbiAgLy8gVGhpcyBuZWVkcyB0byBoYXBwZW4gYmVmb3JlIGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50KCkgb3RoZXJ3aXNlIHRoZSBtaXhpblxuICAvLyB3b24ndCBiZSBpbmNsdWRlZC5cbiAgUmVhY3RJbmplY3Rpb24uQ2xhc3MuaW5qZWN0TWl4aW4oUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4pO1xuXG4gIFJlYWN0SW5qZWN0aW9uLk5hdGl2ZUNvbXBvbmVudC5pbmplY3RDb21wb25lbnRDbGFzc2VzKHtcbiAgICAnYnV0dG9uJzogUmVhY3RET01CdXR0b24sXG4gICAgJ2Zvcm0nOiBSZWFjdERPTUZvcm0sXG4gICAgJ2lmcmFtZSc6IFJlYWN0RE9NSWZyYW1lLFxuICAgICdpbWcnOiBSZWFjdERPTUltZyxcbiAgICAnaW5wdXQnOiBSZWFjdERPTUlucHV0LFxuICAgICdvcHRpb24nOiBSZWFjdERPTU9wdGlvbixcbiAgICAnc2VsZWN0JzogUmVhY3RET01TZWxlY3QsXG4gICAgJ3RleHRhcmVhJzogUmVhY3RET01UZXh0YXJlYSxcblxuICAgICdodG1sJzogY3JlYXRlRnVsbFBhZ2VDb21wb25lbnQoJ2h0bWwnKSxcbiAgICAnaGVhZCc6IGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50KCdoZWFkJyksXG4gICAgJ2JvZHknOiBjcmVhdGVGdWxsUGFnZUNvbXBvbmVudCgnYm9keScpXG4gIH0pO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKEhUTUxET01Qcm9wZXJ0eUNvbmZpZyk7XG4gIFJlYWN0SW5qZWN0aW9uLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKFNWR0RPTVByb3BlcnR5Q29uZmlnKTtcblxuICBSZWFjdEluamVjdGlvbi5FbXB0eUNvbXBvbmVudC5pbmplY3RFbXB0eUNvbXBvbmVudCgnbm9zY3JpcHQnKTtcblxuICBSZWFjdEluamVjdGlvbi5VcGRhdGVzLmluamVjdFJlY29uY2lsZVRyYW5zYWN0aW9uKFxuICAgIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb25cbiAgKTtcbiAgUmVhY3RJbmplY3Rpb24uVXBkYXRlcy5pbmplY3RCYXRjaGluZ1N0cmF0ZWd5KFxuICAgIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3lcbiAgKTtcblxuICBSZWFjdEluamVjdGlvbi5Sb290SW5kZXguaW5qZWN0Q3JlYXRlUmVhY3RSb290SW5kZXgoXG4gICAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID9cbiAgICAgIENsaWVudFJlYWN0Um9vdEluZGV4LmNyZWF0ZVJlYWN0Um9vdEluZGV4IDpcbiAgICAgIFNlcnZlclJlYWN0Um9vdEluZGV4LmNyZWF0ZVJlYWN0Um9vdEluZGV4XG4gICk7XG5cbiAgUmVhY3RJbmplY3Rpb24uQ29tcG9uZW50LmluamVjdEVudmlyb25tZW50KFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50KTtcbiAgUmVhY3RJbmplY3Rpb24uRE9NQ29tcG9uZW50LmluamVjdElET3BlcmF0aW9ucyhSZWFjdERPTUlET3BlcmF0aW9ucyk7XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIHZhciB1cmwgPSAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmKSB8fCAnJztcbiAgICBpZiAoKC9bPyZdcmVhY3RfcGVyZlxcYi8pLnRlc3QodXJsKSkge1xuICAgICAgdmFyIFJlYWN0RGVmYXVsdFBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdERlZmF1bHRQZXJmXCIpO1xuICAgICAgUmVhY3REZWZhdWx0UGVyZi5zdGFydCgpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW5qZWN0OiBpbmplY3Rcbn07XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRVpXWmhkV3gwU1c1cVpXTjBhVzl1TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFUmxabUYxYkhSSmJtcGxZM1JwYjI1Y2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQkNaV1p2Y21WSmJuQjFkRVYyWlc1MFVHeDFaMmx1SUQwZ2NtVnhkV2x5WlNoY0lpNHZRbVZtYjNKbFNXNXdkWFJGZG1WdWRGQnNkV2RwYmx3aUtUdGNiblpoY2lCRGFHRnVaMlZGZG1WdWRGQnNkV2RwYmlBOUlISmxjWFZwY21Vb1hDSXVMME5vWVc1blpVVjJaVzUwVUd4MVoybHVYQ0lwTzF4dWRtRnlJRU5zYVdWdWRGSmxZV04wVW05dmRFbHVaR1Y0SUQwZ2NtVnhkV2x5WlNoY0lpNHZRMnhwWlc1MFVtVmhZM1JTYjI5MFNXNWtaWGhjSWlrN1hHNTJZWElnUkdWbVlYVnNkRVYyWlc1MFVHeDFaMmx1VDNKa1pYSWdQU0J5WlhGMWFYSmxLRndpTGk5RVpXWmhkV3gwUlhabGJuUlFiSFZuYVc1UGNtUmxjbHdpS1R0Y2JuWmhjaUJGYm5SbGNreGxZWFpsUlhabGJuUlFiSFZuYVc0Z1BTQnlaWEYxYVhKbEtGd2lMaTlGYm5SbGNreGxZWFpsUlhabGJuUlFiSFZuYVc1Y0lpazdYRzUyWVhJZ1JYaGxZM1YwYVc5dVJXNTJhWEp2Ym0xbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5RmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRGd2lLVHRjYm5aaGNpQklWRTFNUkU5TlVISnZjR1Z5ZEhsRGIyNW1hV2NnUFNCeVpYRjFhWEpsS0Z3aUxpOUlWRTFNUkU5TlVISnZjR1Z5ZEhsRGIyNW1hV2RjSWlrN1hHNTJZWElnVFc5aWFXeGxVMkZtWVhKcFEyeHBZMnRGZG1WdWRGQnNkV2RwYmlBOUlISmxjWFZwY21Vb1hDSXVMMDF2WW1sc1pWTmhabUZ5YVVOc2FXTnJSWFpsYm5SUWJIVm5hVzVjSWlrN1hHNTJZWElnVW1WaFkzUkNjbTkzYzJWeVEyOXRjRzl1Wlc1MFRXbDRhVzRnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVKeWIzZHpaWEpEYjIxd2IyNWxiblJOYVhocGJsd2lLVHRjYm5aaGNpQlNaV0ZqZEVOc1lYTnpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEYkdGemMxd2lLVHRjYm5aaGNpQlNaV0ZqZEVOdmJYQnZibVZ1ZEVKeWIzZHpaWEpGYm5acGNtOXViV1Z1ZENBOVhHNGdJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRMjl0Y0c5dVpXNTBRbkp2ZDNObGNrVnVkbWx5YjI1dFpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFJHVm1ZWFZzZEVKaGRHTm9hVzVuVTNSeVlYUmxaM2tnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSbFptRjFiSFJDWVhSamFHbHVaMU4wY21GMFpXZDVYQ0lwTzF4dWRtRnlJRkpsWVdOMFJFOU5RMjl0Y0c5dVpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JFVDAxRGIyMXdiMjVsYm5SY0lpazdYRzUyWVhJZ1VtVmhZM1JFVDAxQ2RYUjBiMjRnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSUFRVSjFkSFJ2Ymx3aUtUdGNiblpoY2lCU1pXRmpkRVJQVFVadmNtMGdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVJQVFVadmNtMWNJaWs3WEc1MllYSWdVbVZoWTNSRVQwMUpiV2NnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSUFRVbHRaMXdpS1R0Y2JuWmhjaUJTWldGamRFUlBUVWxFVDNCbGNtRjBhVzl1Y3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJFOU5TVVJQY0dWeVlYUnBiMjV6WENJcE8xeHVkbUZ5SUZKbFlXTjBSRTlOU1daeVlXMWxJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JFVDAxSlpuSmhiV1ZjSWlrN1hHNTJZWElnVW1WaFkzUkVUMDFKYm5CMWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSRTlOU1c1d2RYUmNJaWs3WEc1MllYSWdVbVZoWTNSRVQwMVBjSFJwYjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUlBUVTl3ZEdsdmJsd2lLVHRjYm5aaGNpQlNaV0ZqZEVSUFRWTmxiR1ZqZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJFOU5VMlZzWldOMFhDSXBPMXh1ZG1GeUlGSmxZV04wUkU5TlZHVjRkR0Z5WldFZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUlBUVlJsZUhSaGNtVmhYQ0lwTzF4dWRtRnlJRkpsWVdOMFJFOU5WR1Y0ZEVOdmJYQnZibVZ1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJFOU5WR1Y0ZEVOdmJYQnZibVZ1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZzWlcxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSRmRtVnVkRXhwYzNSbGJtVnlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGZG1WdWRFeHBjM1JsYm1WeVhDSXBPMXh1ZG1GeUlGSmxZV04wU1c1cVpXTjBhVzl1SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSSmJtcGxZM1JwYjI1Y0lpazdYRzUyWVhJZ1VtVmhZM1JKYm5OMFlXNWpaVWhoYm1Sc1pYTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGMxd2lLVHRjYm5aaGNpQlNaV0ZqZEUxdmRXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JOYjNWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibHdpS1R0Y2JuWmhjaUJUWld4bFkzUkZkbVZ1ZEZCc2RXZHBiaUE5SUhKbGNYVnBjbVVvWENJdUwxTmxiR1ZqZEVWMlpXNTBVR3gxWjJsdVhDSXBPMXh1ZG1GeUlGTmxjblpsY2xKbFlXTjBVbTl2ZEVsdVpHVjRJRDBnY21WeGRXbHlaU2hjSWk0dlUyVnlkbVZ5VW1WaFkzUlNiMjkwU1c1a1pYaGNJaWs3WEc1MllYSWdVMmx0Y0d4bFJYWmxiblJRYkhWbmFXNGdQU0J5WlhGMWFYSmxLRndpTGk5VGFXMXdiR1ZGZG1WdWRGQnNkV2RwYmx3aUtUdGNiblpoY2lCVFZrZEVUMDFRY205d1pYSjBlVU52Ym1acFp5QTlJSEpsY1hWcGNtVW9YQ0l1TDFOV1IwUlBUVkJ5YjNCbGNuUjVRMjl1Wm1sblhDSXBPMXh1WEc1MllYSWdZM0psWVhSbFJuVnNiRkJoWjJWRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlqY21WaGRHVkdkV3hzVUdGblpVTnZiWEJ2Ym1WdWRGd2lLVHRjYmx4dVpuVnVZM1JwYjI0Z1lYVjBiMGRsYm1WeVlYUmxWM0poY0hCbGNrTnNZWE56S0hSNWNHVXBJSHRjYmlBZ2NtVjBkWEp1SUZKbFlXTjBRMnhoYzNNdVkzSmxZWFJsUTJ4aGMzTW9lMXh1SUNBZ0lIUmhaMDVoYldVNklIUjVjR1V1ZEc5VmNIQmxja05oYzJVb0tTeGNiaUFnSUNCeVpXNWtaWEk2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QlNaV0ZqZEVWc1pXMWxiblFvWEc0Z0lDQWdJQ0FnSUhSNWNHVXNYRzRnSUNBZ0lDQWdJRzUxYkd3c1hHNGdJQ0FnSUNBZ0lHNTFiR3dzWEc0Z0lDQWdJQ0FnSUc1MWJHd3NYRzRnSUNBZ0lDQWdJRzUxYkd3c1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0hKdmNITmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZWeHVJQ0I5S1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYVc1cVpXTjBLQ2tnZTF4dUlDQlNaV0ZqZEVsdWFtVmpkR2x2Ymk1RmRtVnVkRVZ0YVhSMFpYSXVhVzVxWldOMFVtVmhZM1JGZG1WdWRFeHBjM1JsYm1WeUtGeHVJQ0FnSUZKbFlXTjBSWFpsYm5STWFYTjBaVzVsY2x4dUlDQXBPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkpibXBsWTNRZ2JXOWtkV3hsY3lCbWIzSWdjbVZ6YjJ4MmFXNW5JRVJQVFNCb2FXVnlZWEpqYUhrZ1lXNWtJSEJzZFdkcGJpQnZjbVJsY21sdVp5NWNiaUFnSUNvdlhHNGdJRkpsWVdOMFNXNXFaV04wYVc5dUxrVjJaVzUwVUd4MVoybHVTSFZpTG1sdWFtVmpkRVYyWlc1MFVHeDFaMmx1VDNKa1pYSW9SR1ZtWVhWc2RFVjJaVzUwVUd4MVoybHVUM0prWlhJcE8xeHVJQ0JTWldGamRFbHVhbVZqZEdsdmJpNUZkbVZ1ZEZCc2RXZHBia2gxWWk1cGJtcGxZM1JKYm5OMFlXNWpaVWhoYm1Sc1pTaFNaV0ZqZEVsdWMzUmhibU5sU0dGdVpHeGxjeWs3WEc0Z0lGSmxZV04wU1c1cVpXTjBhVzl1TGtWMlpXNTBVR3gxWjJsdVNIVmlMbWx1YW1WamRFMXZkVzUwS0ZKbFlXTjBUVzkxYm5RcE8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCVGIyMWxJR2x0Y0c5eWRHRnVkQ0JsZG1WdWRDQndiSFZuYVc1eklHbHVZMngxWkdWa0lHSjVJR1JsWm1GMWJIUWdLSGRwZEdodmRYUWdhR0YyYVc1bklIUnZJSEpsY1hWcGNtVmNiaUFnSUNvZ2RHaGxiU2t1WEc0Z0lDQXFMMXh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVGZG1WdWRGQnNkV2RwYmtoMVlpNXBibXBsWTNSRmRtVnVkRkJzZFdkcGJuTkNlVTVoYldVb2UxeHVJQ0FnSUZOcGJYQnNaVVYyWlc1MFVHeDFaMmx1T2lCVGFXMXdiR1ZGZG1WdWRGQnNkV2RwYml4Y2JpQWdJQ0JGYm5SbGNreGxZWFpsUlhabGJuUlFiSFZuYVc0NklFVnVkR1Z5VEdWaGRtVkZkbVZ1ZEZCc2RXZHBiaXhjYmlBZ0lDQkRhR0Z1WjJWRmRtVnVkRkJzZFdkcGJqb2dRMmhoYm1kbFJYWmxiblJRYkhWbmFXNHNYRzRnSUNBZ1RXOWlhV3hsVTJGbVlYSnBRMnhwWTJ0RmRtVnVkRkJzZFdkcGJqb2dUVzlpYVd4bFUyRm1ZWEpwUTJ4cFkydEZkbVZ1ZEZCc2RXZHBiaXhjYmlBZ0lDQlRaV3hsWTNSRmRtVnVkRkJzZFdkcGJqb2dVMlZzWldOMFJYWmxiblJRYkhWbmFXNHNYRzRnSUNBZ1FtVm1iM0psU1c1d2RYUkZkbVZ1ZEZCc2RXZHBiam9nUW1WbWIzSmxTVzV3ZFhSRmRtVnVkRkJzZFdkcGJseHVJQ0I5S1R0Y2JseHVJQ0JTWldGamRFbHVhbVZqZEdsdmJpNU9ZWFJwZG1WRGIyMXdiMjVsYm5RdWFXNXFaV04wUjJWdVpYSnBZME52YlhCdmJtVnVkRU5zWVhOektGeHVJQ0FnSUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwWEc0Z0lDazdYRzVjYmlBZ1VtVmhZM1JKYm1wbFkzUnBiMjR1VG1GMGFYWmxRMjl0Y0c5dVpXNTBMbWx1YW1WamRGUmxlSFJEYjIxd2IyNWxiblJEYkdGemN5aGNiaUFnSUNCU1pXRmpkRVJQVFZSbGVIUkRiMjF3YjI1bGJuUmNiaUFnS1R0Y2JseHVJQ0JTWldGamRFbHVhbVZqZEdsdmJpNU9ZWFJwZG1WRGIyMXdiMjVsYm5RdWFXNXFaV04wUVhWMGIxZHlZWEJ3WlhJb1hHNGdJQ0FnWVhWMGIwZGxibVZ5WVhSbFYzSmhjSEJsY2tOc1lYTnpYRzRnSUNrN1hHNWNiaUFnTHk4Z1ZHaHBjeUJ1WldWa2N5QjBieUJvWVhCd1pXNGdZbVZtYjNKbElHTnlaV0YwWlVaMWJHeFFZV2RsUTI5dGNHOXVaVzUwS0NrZ2IzUm9aWEozYVhObElIUm9aU0J0YVhocGJseHVJQ0F2THlCM2IyNG5kQ0JpWlNCcGJtTnNkV1JsWkM1Y2JpQWdVbVZoWTNSSmJtcGxZM1JwYjI0dVEyeGhjM011YVc1cVpXTjBUV2w0YVc0b1VtVmhZM1JDY205M2MyVnlRMjl0Y0c5dVpXNTBUV2w0YVc0cE8xeHVYRzRnSUZKbFlXTjBTVzVxWldOMGFXOXVMazVoZEdsMlpVTnZiWEJ2Ym1WdWRDNXBibXBsWTNSRGIyMXdiMjVsYm5SRGJHRnpjMlZ6S0h0Y2JpQWdJQ0FuWW5WMGRHOXVKem9nVW1WaFkzUkVUMDFDZFhSMGIyNHNYRzRnSUNBZ0oyWnZjbTBuT2lCU1pXRmpkRVJQVFVadmNtMHNYRzRnSUNBZ0oybG1jbUZ0WlNjNklGSmxZV04wUkU5TlNXWnlZVzFsTEZ4dUlDQWdJQ2RwYldjbk9pQlNaV0ZqZEVSUFRVbHRaeXhjYmlBZ0lDQW5hVzV3ZFhRbk9pQlNaV0ZqZEVSUFRVbHVjSFYwTEZ4dUlDQWdJQ2R2Y0hScGIyNG5PaUJTWldGamRFUlBUVTl3ZEdsdmJpeGNiaUFnSUNBbmMyVnNaV04wSnpvZ1VtVmhZM1JFVDAxVFpXeGxZM1FzWEc0Z0lDQWdKM1JsZUhSaGNtVmhKem9nVW1WaFkzUkVUMDFVWlhoMFlYSmxZU3hjYmx4dUlDQWdJQ2RvZEcxc0p6b2dZM0psWVhSbFJuVnNiRkJoWjJWRGIyMXdiMjVsYm5Rb0oyaDBiV3duS1N4Y2JpQWdJQ0FuYUdWaFpDYzZJR055WldGMFpVWjFiR3hRWVdkbFEyOXRjRzl1Wlc1MEtDZG9aV0ZrSnlrc1hHNGdJQ0FnSjJKdlpIa25PaUJqY21WaGRHVkdkV3hzVUdGblpVTnZiWEJ2Ym1WdWRDZ25ZbTlrZVNjcFhHNGdJSDBwTzF4dVhHNGdJRkpsWVdOMFNXNXFaV04wYVc5dUxrUlBUVkJ5YjNCbGNuUjVMbWx1YW1WamRFUlBUVkJ5YjNCbGNuUjVRMjl1Wm1sbktFaFVUVXhFVDAxUWNtOXdaWEowZVVOdmJtWnBaeWs3WEc0Z0lGSmxZV04wU1c1cVpXTjBhVzl1TGtSUFRWQnliM0JsY25SNUxtbHVhbVZqZEVSUFRWQnliM0JsY25SNVEyOXVabWxuS0ZOV1IwUlBUVkJ5YjNCbGNuUjVRMjl1Wm1sbktUdGNibHh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVGYlhCMGVVTnZiWEJ2Ym1WdWRDNXBibXBsWTNSRmJYQjBlVU52YlhCdmJtVnVkQ2duYm05elkzSnBjSFFuS1R0Y2JseHVJQ0JTWldGamRFbHVhbVZqZEdsdmJpNVZjR1JoZEdWekxtbHVhbVZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUtGeHVJQ0FnSUZKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjVjYmlBZ0tUdGNiaUFnVW1WaFkzUkpibXBsWTNScGIyNHVWWEJrWVhSbGN5NXBibXBsWTNSQ1lYUmphR2x1WjFOMGNtRjBaV2Q1S0Z4dUlDQWdJRkpsWVdOMFJHVm1ZWFZzZEVKaGRHTm9hVzVuVTNSeVlYUmxaM2xjYmlBZ0tUdGNibHh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVTYjI5MFNXNWtaWGd1YVc1cVpXTjBRM0psWVhSbFVtVmhZM1JTYjI5MFNXNWtaWGdvWEc0Z0lDQWdSWGhsWTNWMGFXOXVSVzUyYVhKdmJtMWxiblF1WTJGdVZYTmxSRTlOSUQ5Y2JpQWdJQ0FnSUVOc2FXVnVkRkpsWVdOMFVtOXZkRWx1WkdWNExtTnlaV0YwWlZKbFlXTjBVbTl2ZEVsdVpHVjRJRHBjYmlBZ0lDQWdJRk5sY25abGNsSmxZV04wVW05dmRFbHVaR1Y0TG1OeVpXRjBaVkpsWVdOMFVtOXZkRWx1WkdWNFhHNGdJQ2s3WEc1Y2JpQWdVbVZoWTNSSmJtcGxZM1JwYjI0dVEyOXRjRzl1Wlc1MExtbHVhbVZqZEVWdWRtbHliMjV0Wlc1MEtGSmxZV04wUTI5dGNHOXVaVzUwUW5KdmQzTmxja1Z1ZG1seWIyNXRaVzUwS1R0Y2JpQWdVbVZoWTNSSmJtcGxZM1JwYjI0dVJFOU5RMjl0Y0c5dVpXNTBMbWx1YW1WamRFbEVUM0JsY21GMGFXOXVjeWhTWldGamRFUlBUVWxFVDNCbGNtRjBhVzl1Y3lrN1hHNWNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJSFpoY2lCMWNtd2dQU0FvUlhobFkzVjBhVzl1Ulc1MmFYSnZibTFsYm5RdVkyRnVWWE5sUkU5TklDWW1JSGRwYm1SdmR5NXNiMk5oZEdsdmJpNW9jbVZtS1NCOGZDQW5KenRjYmlBZ0lDQnBaaUFvS0M5YlB5WmRjbVZoWTNSZmNHVnlabHhjWWk4cExuUmxjM1FvZFhKc0tTa2dlMXh1SUNBZ0lDQWdkbUZ5SUZKbFlXTjBSR1ZtWVhWc2RGQmxjbVlnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSbFptRjFiSFJRWlhKbVhDSXBPMXh1SUNBZ0lDQWdVbVZoWTNSRVpXWmhkV3gwVUdWeVppNXpkR0Z5ZENncE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlIdGNiaUFnYVc1cVpXTjBPaUJwYm1wbFkzUmNibjA3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3REZWZhdWx0UGVyZlxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5XCIpO1xudmFyIFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcyA9IHJlcXVpcmUoXCIuL1JlYWN0RGVmYXVsdFBlcmZBbmFseXNpc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdFBlcmZcIik7XG5cbnZhciBwZXJmb3JtYW5jZU5vdyA9IHJlcXVpcmUoXCIuL3BlcmZvcm1hbmNlTm93XCIpO1xuXG5mdW5jdGlvbiByb3VuZEZsb2F0KHZhbCkge1xuICByZXR1cm4gTWF0aC5mbG9vcih2YWwgKiAxMDApIC8gMTAwO1xufVxuXG5mdW5jdGlvbiBhZGRWYWx1ZShvYmosIGtleSwgdmFsKSB7XG4gIG9ialtrZXldID0gKG9ialtrZXldIHx8IDApICsgdmFsO1xufVxuXG52YXIgUmVhY3REZWZhdWx0UGVyZiA9IHtcbiAgX2FsbE1lYXN1cmVtZW50czogW10sIC8vIGxhc3QgaXRlbSBpbiB0aGUgbGlzdCBpcyB0aGUgY3VycmVudCBvbmVcbiAgX21vdW50U3RhY2s6IFswXSxcbiAgX2luamVjdGVkOiBmYWxzZSxcblxuICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFSZWFjdERlZmF1bHRQZXJmLl9pbmplY3RlZCkge1xuICAgICAgUmVhY3RQZXJmLmluamVjdGlvbi5pbmplY3RNZWFzdXJlKFJlYWN0RGVmYXVsdFBlcmYubWVhc3VyZSk7XG4gICAgfVxuXG4gICAgUmVhY3REZWZhdWx0UGVyZi5fYWxsTWVhc3VyZW1lbnRzLmxlbmd0aCA9IDA7XG4gICAgUmVhY3RQZXJmLmVuYWJsZU1lYXN1cmUgPSB0cnVlO1xuICB9LFxuXG4gIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgIFJlYWN0UGVyZi5lbmFibGVNZWFzdXJlID0gZmFsc2U7XG4gIH0sXG5cbiAgZ2V0TGFzdE1lYXN1cmVtZW50czogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cztcbiAgfSxcblxuICBwcmludEV4Y2x1c2l2ZTogZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7XG4gICAgbWVhc3VyZW1lbnRzID0gbWVhc3VyZW1lbnRzIHx8IFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cztcbiAgICB2YXIgc3VtbWFyeSA9IFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRFeGNsdXNpdmVTdW1tYXJ5KG1lYXN1cmVtZW50cyk7XG4gICAgY29uc29sZS50YWJsZShzdW1tYXJ5Lm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnQ29tcG9uZW50IGNsYXNzIG5hbWUnOiBpdGVtLmNvbXBvbmVudE5hbWUsXG4gICAgICAgICdUb3RhbCBpbmNsdXNpdmUgdGltZSAobXMpJzogcm91bmRGbG9hdChpdGVtLmluY2x1c2l2ZSksXG4gICAgICAgICdFeGNsdXNpdmUgbW91bnQgdGltZSAobXMpJzogcm91bmRGbG9hdChpdGVtLmV4Y2x1c2l2ZSksXG4gICAgICAgICdFeGNsdXNpdmUgcmVuZGVyIHRpbWUgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS5yZW5kZXIpLFxuICAgICAgICAnTW91bnQgdGltZSBwZXIgaW5zdGFuY2UgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS5leGNsdXNpdmUgLyBpdGVtLmNvdW50KSxcbiAgICAgICAgJ1JlbmRlciB0aW1lIHBlciBpbnN0YW5jZSAobXMpJzogcm91bmRGbG9hdChpdGVtLnJlbmRlciAvIGl0ZW0uY291bnQpLFxuICAgICAgICAnSW5zdGFuY2VzJzogaXRlbS5jb3VudFxuICAgICAgfTtcbiAgICB9KSk7XG4gICAgLy8gVE9ETzogUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmdldFRvdGFsVGltZSgpIGRvZXMgbm90IHJldHVybiB0aGUgY29ycmVjdFxuICAgIC8vIG51bWJlci5cbiAgfSxcblxuICBwcmludEluY2x1c2l2ZTogZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7XG4gICAgbWVhc3VyZW1lbnRzID0gbWVhc3VyZW1lbnRzIHx8IFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cztcbiAgICB2YXIgc3VtbWFyeSA9IFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRJbmNsdXNpdmVTdW1tYXJ5KG1lYXN1cmVtZW50cyk7XG4gICAgY29uc29sZS50YWJsZShzdW1tYXJ5Lm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnT3duZXIgPiBjb21wb25lbnQnOiBpdGVtLmNvbXBvbmVudE5hbWUsXG4gICAgICAgICdJbmNsdXNpdmUgdGltZSAobXMpJzogcm91bmRGbG9hdChpdGVtLnRpbWUpLFxuICAgICAgICAnSW5zdGFuY2VzJzogaXRlbS5jb3VudFxuICAgICAgfTtcbiAgICB9KSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnVG90YWwgdGltZTonLFxuICAgICAgUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmdldFRvdGFsVGltZShtZWFzdXJlbWVudHMpLnRvRml4ZWQoMikgKyAnIG1zJ1xuICAgICk7XG4gIH0sXG5cbiAgZ2V0TWVhc3VyZW1lbnRzU3VtbWFyeU1hcDogZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7XG4gICAgdmFyIHN1bW1hcnkgPSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuZ2V0SW5jbHVzaXZlU3VtbWFyeShcbiAgICAgIG1lYXN1cmVtZW50cyxcbiAgICAgIHRydWVcbiAgICApO1xuICAgIHJldHVybiBzdW1tYXJ5Lm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnT3duZXIgPiBjb21wb25lbnQnOiBpdGVtLmNvbXBvbmVudE5hbWUsXG4gICAgICAgICdXYXN0ZWQgdGltZSAobXMpJzogaXRlbS50aW1lLFxuICAgICAgICAnSW5zdGFuY2VzJzogaXRlbS5jb3VudFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSxcblxuICBwcmludFdhc3RlZDogZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7XG4gICAgbWVhc3VyZW1lbnRzID0gbWVhc3VyZW1lbnRzIHx8IFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cztcbiAgICBjb25zb2xlLnRhYmxlKFJlYWN0RGVmYXVsdFBlcmYuZ2V0TWVhc3VyZW1lbnRzU3VtbWFyeU1hcChtZWFzdXJlbWVudHMpKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdUb3RhbCB0aW1lOicsXG4gICAgICBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuZ2V0VG90YWxUaW1lKG1lYXN1cmVtZW50cykudG9GaXhlZCgyKSArICcgbXMnXG4gICAgKTtcbiAgfSxcblxuICBwcmludERPTTogZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7XG4gICAgbWVhc3VyZW1lbnRzID0gbWVhc3VyZW1lbnRzIHx8IFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cztcbiAgICB2YXIgc3VtbWFyeSA9IFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRET01TdW1tYXJ5KG1lYXN1cmVtZW50cyk7XG4gICAgY29uc29sZS50YWJsZShzdW1tYXJ5Lm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICByZXN1bHRbRE9NUHJvcGVydHkuSURfQVRUUklCVVRFX05BTUVdID0gaXRlbS5pZDtcbiAgICAgIHJlc3VsdFsndHlwZSddID0gaXRlbS50eXBlO1xuICAgICAgcmVzdWx0WydhcmdzJ10gPSBKU09OLnN0cmluZ2lmeShpdGVtLmFyZ3MpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnVG90YWwgdGltZTonLFxuICAgICAgUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmdldFRvdGFsVGltZShtZWFzdXJlbWVudHMpLnRvRml4ZWQoMikgKyAnIG1zJ1xuICAgICk7XG4gIH0sXG5cbiAgX3JlY29yZFdyaXRlOiBmdW5jdGlvbihpZCwgZm5OYW1lLCB0b3RhbFRpbWUsIGFyZ3MpIHtcbiAgICAvLyBUT0RPOiB0b3RhbFRpbWUgaXNuJ3QgdGhhdCB1c2VmdWwgc2luY2UgaXQgZG9lc24ndCBjb3VudCBwYWludHMvcmVmbG93c1xuICAgIHZhciB3cml0ZXMgPVxuICAgICAgUmVhY3REZWZhdWx0UGVyZlxuICAgICAgICAuX2FsbE1lYXN1cmVtZW50c1tSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgLndyaXRlcztcbiAgICB3cml0ZXNbaWRdID0gd3JpdGVzW2lkXSB8fCBbXTtcbiAgICB3cml0ZXNbaWRdLnB1c2goe1xuICAgICAgdHlwZTogZm5OYW1lLFxuICAgICAgdGltZTogdG90YWxUaW1lLFxuICAgICAgYXJnczogYXJnc1xuICAgIH0pO1xuICB9LFxuXG4gIG1lYXN1cmU6IGZ1bmN0aW9uKG1vZHVsZU5hbWUsIGZuTmFtZSwgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtmb3IgKHZhciBhcmdzPVtdLCRfXzA9MCwkX18xPWFyZ3VtZW50cy5sZW5ndGg7JF9fMDwkX18xOyRfXzArKykgYXJncy5wdXNoKGFyZ3VtZW50c1skX18wXSk7XG4gICAgICB2YXIgdG90YWxUaW1lO1xuICAgICAgdmFyIHJ2O1xuICAgICAgdmFyIHN0YXJ0O1xuXG4gICAgICBpZiAoZm5OYW1lID09PSAnX3JlbmRlck5ld1Jvb3RDb21wb25lbnQnIHx8XG4gICAgICAgICAgZm5OYW1lID09PSAnZmx1c2hCYXRjaGVkVXBkYXRlcycpIHtcbiAgICAgICAgLy8gQSBcIm1lYXN1cmVtZW50XCIgaXMgYSBzZXQgb2YgbWV0cmljcyByZWNvcmRlZCBmb3IgZWFjaCBmbHVzaC4gV2Ugd2FudFxuICAgICAgICAvLyB0byBncm91cCB0aGUgbWV0cmljcyBmb3IgYSBnaXZlbiBmbHVzaCB0b2dldGhlciBzbyB3ZSBjYW4gbG9vayBhdCB0aGVcbiAgICAgICAgLy8gY29tcG9uZW50cyB0aGF0IHJlbmRlcmVkIGFuZCB0aGUgRE9NIG9wZXJhdGlvbnMgdGhhdCBhY3R1YWxseVxuICAgICAgICAvLyBoYXBwZW5lZCB0byBkZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBcIndhc3RlZCB3b3JrXCIgcGVyZm9ybWVkLlxuICAgICAgICBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHMucHVzaCh7XG4gICAgICAgICAgZXhjbHVzaXZlOiB7fSxcbiAgICAgICAgICBpbmNsdXNpdmU6IHt9LFxuICAgICAgICAgIHJlbmRlcjoge30sXG4gICAgICAgICAgY291bnRzOiB7fSxcbiAgICAgICAgICB3cml0ZXM6IHt9LFxuICAgICAgICAgIGRpc3BsYXlOYW1lczoge30sXG4gICAgICAgICAgdG90YWxUaW1lOiAwXG4gICAgICAgIH0pO1xuICAgICAgICBzdGFydCA9IHBlcmZvcm1hbmNlTm93KCk7XG4gICAgICAgIHJ2ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgUmVhY3REZWZhdWx0UGVyZi5fYWxsTWVhc3VyZW1lbnRzW1xuICAgICAgICAgIFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cy5sZW5ndGggLSAxXG4gICAgICAgIF0udG90YWxUaW1lID0gcGVyZm9ybWFuY2VOb3coKSAtIHN0YXJ0O1xuICAgICAgICByZXR1cm4gcnY7XG4gICAgICB9IGVsc2UgaWYgKGZuTmFtZSA9PT0gJ19tb3VudEltYWdlSW50b05vZGUnIHx8XG4gICAgICAgICAgbW9kdWxlTmFtZSA9PT0gJ1JlYWN0RE9NSURPcGVyYXRpb25zJykge1xuICAgICAgICBzdGFydCA9IHBlcmZvcm1hbmNlTm93KCk7XG4gICAgICAgIHJ2ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgdG90YWxUaW1lID0gcGVyZm9ybWFuY2VOb3coKSAtIHN0YXJ0O1xuXG4gICAgICAgIGlmIChmbk5hbWUgPT09ICdfbW91bnRJbWFnZUludG9Ob2RlJykge1xuICAgICAgICAgIHZhciBtb3VudElEID0gUmVhY3RNb3VudC5nZXRJRChhcmdzWzFdKTtcbiAgICAgICAgICBSZWFjdERlZmF1bHRQZXJmLl9yZWNvcmRXcml0ZShtb3VudElELCBmbk5hbWUsIHRvdGFsVGltZSwgYXJnc1swXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm5OYW1lID09PSAnZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzJykge1xuICAgICAgICAgIC8vIHNwZWNpYWwgZm9ybWF0XG4gICAgICAgICAgYXJnc1swXS5mb3JFYWNoKGZ1bmN0aW9uKHVwZGF0ZSkge1xuICAgICAgICAgICAgdmFyIHdyaXRlQXJncyA9IHt9O1xuICAgICAgICAgICAgaWYgKHVwZGF0ZS5mcm9tSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd3JpdGVBcmdzLmZyb21JbmRleCA9IHVwZGF0ZS5mcm9tSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXBkYXRlLnRvSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd3JpdGVBcmdzLnRvSW5kZXggPSB1cGRhdGUudG9JbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1cGRhdGUudGV4dENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd3JpdGVBcmdzLnRleHRDb250ZW50ID0gdXBkYXRlLnRleHRDb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVwZGF0ZS5tYXJrdXBJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB3cml0ZUFyZ3MubWFya3VwID0gYXJnc1sxXVt1cGRhdGUubWFya3VwSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUmVhY3REZWZhdWx0UGVyZi5fcmVjb3JkV3JpdGUoXG4gICAgICAgICAgICAgIHVwZGF0ZS5wYXJlbnRJRCxcbiAgICAgICAgICAgICAgdXBkYXRlLnR5cGUsXG4gICAgICAgICAgICAgIHRvdGFsVGltZSxcbiAgICAgICAgICAgICAgd3JpdGVBcmdzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGJhc2ljIGZvcm1hdFxuICAgICAgICAgIFJlYWN0RGVmYXVsdFBlcmYuX3JlY29yZFdyaXRlKFxuICAgICAgICAgICAgYXJnc1swXSxcbiAgICAgICAgICAgIGZuTmFtZSxcbiAgICAgICAgICAgIHRvdGFsVGltZSxcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDEpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnY7XG4gICAgICB9IGVsc2UgaWYgKG1vZHVsZU5hbWUgPT09ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcgJiYgKFxuICAgICAgICAoLy8gVE9ETzogcmVjZWl2ZUNvbXBvbmVudCgpP1xuICAgICAgICAoZm5OYW1lID09PSAnbW91bnRDb21wb25lbnQnIHx8XG4gICAgICAgIGZuTmFtZSA9PT0gJ3VwZGF0ZUNvbXBvbmVudCcgfHwgZm5OYW1lID09PSAnX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCcpKSkpIHtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm9vdE5vZGVJRCA9IGZuTmFtZSA9PT0gJ21vdW50Q29tcG9uZW50JyA/XG4gICAgICAgICAgYXJnc1swXSA6XG4gICAgICAgICAgdGhpcy5fcm9vdE5vZGVJRDtcbiAgICAgICAgdmFyIGlzUmVuZGVyID0gZm5OYW1lID09PSAnX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCc7XG4gICAgICAgIHZhciBpc01vdW50ID0gZm5OYW1lID09PSAnbW91bnRDb21wb25lbnQnO1xuXG4gICAgICAgIHZhciBtb3VudFN0YWNrID0gUmVhY3REZWZhdWx0UGVyZi5fbW91bnRTdGFjaztcbiAgICAgICAgdmFyIGVudHJ5ID0gUmVhY3REZWZhdWx0UGVyZi5fYWxsTWVhc3VyZW1lbnRzW1xuICAgICAgICAgIFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cy5sZW5ndGggLSAxXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKGlzUmVuZGVyKSB7XG4gICAgICAgICAgYWRkVmFsdWUoZW50cnkuY291bnRzLCByb290Tm9kZUlELCAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vdW50KSB7XG4gICAgICAgICAgbW91bnRTdGFjay5wdXNoKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnQgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICBydiA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHRvdGFsVGltZSA9IHBlcmZvcm1hbmNlTm93KCkgLSBzdGFydDtcblxuICAgICAgICBpZiAoaXNSZW5kZXIpIHtcbiAgICAgICAgICBhZGRWYWx1ZShlbnRyeS5yZW5kZXIsIHJvb3ROb2RlSUQsIHRvdGFsVGltZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VudCkge1xuICAgICAgICAgIHZhciBzdWJNb3VudFRpbWUgPSBtb3VudFN0YWNrLnBvcCgpO1xuICAgICAgICAgIG1vdW50U3RhY2tbbW91bnRTdGFjay5sZW5ndGggLSAxXSArPSB0b3RhbFRpbWU7XG4gICAgICAgICAgYWRkVmFsdWUoZW50cnkuZXhjbHVzaXZlLCByb290Tm9kZUlELCB0b3RhbFRpbWUgLSBzdWJNb3VudFRpbWUpO1xuICAgICAgICAgIGFkZFZhbHVlKGVudHJ5LmluY2x1c2l2ZSwgcm9vdE5vZGVJRCwgdG90YWxUaW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRWYWx1ZShlbnRyeS5pbmNsdXNpdmUsIHJvb3ROb2RlSUQsIHRvdGFsVGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICBlbnRyeS5kaXNwbGF5TmFtZXNbcm9vdE5vZGVJRF0gPSB7XG4gICAgICAgICAgY3VycmVudDogdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgb3duZXI6IHRoaXMuX2N1cnJlbnRFbGVtZW50Ll9vd25lciA/XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudC5fb3duZXIuZ2V0TmFtZSgpIDpcbiAgICAgICAgICAgICc8cm9vdD4nXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERlZmF1bHRQZXJmO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpc1xuICovXG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xuXG4vLyBEb24ndCB0cnkgdG8gc2F2ZSB1c2VycyBsZXNzIHRoYW4gMS4ybXMgKGEgbnVtYmVyIEkgbWFkZSB1cClcbnZhciBET05UX0NBUkVfVEhSRVNIT0xEID0gMS4yO1xudmFyIERPTV9PUEVSQVRJT05fVFlQRVMgPSB7XG4gICdfbW91bnRJbWFnZUludG9Ob2RlJzogJ3NldCBpbm5lckhUTUwnLFxuICBJTlNFUlRfTUFSS1VQOiAnc2V0IGlubmVySFRNTCcsXG4gIE1PVkVfRVhJU1RJTkc6ICdtb3ZlJyxcbiAgUkVNT1ZFX05PREU6ICdyZW1vdmUnLFxuICBURVhUX0NPTlRFTlQ6ICdzZXQgdGV4dENvbnRlbnQnLFxuICAndXBkYXRlUHJvcGVydHlCeUlEJzogJ3VwZGF0ZSBhdHRyaWJ1dGUnLFxuICAnZGVsZXRlUHJvcGVydHlCeUlEJzogJ2RlbGV0ZSBhdHRyaWJ1dGUnLFxuICAndXBkYXRlU3R5bGVzQnlJRCc6ICd1cGRhdGUgc3R5bGVzJyxcbiAgJ3VwZGF0ZUlubmVySFRNTEJ5SUQnOiAnc2V0IGlubmVySFRNTCcsXG4gICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQnOiAncmVwbGFjZSdcbn07XG5cbmZ1bmN0aW9uIGdldFRvdGFsVGltZShtZWFzdXJlbWVudHMpIHtcbiAgLy8gVE9ETzogcmV0dXJuIG51bWJlciBvZiBET00gb3BzPyBjb3VsZCBiZSBtaXNsZWFkaW5nLlxuICAvLyBUT0RPOiBtZWFzdXJlIGRyb3BwZWQgZnJhbWVzIGFmdGVyIHJlY29uY2lsZT9cbiAgLy8gVE9ETzogbG9nIHRvdGFsIHRpbWUgb2YgZWFjaCByZWNvbmNpbGUgYW5kIHRoZSB0b3AtbGV2ZWwgY29tcG9uZW50XG4gIC8vIGNsYXNzIHRoYXQgdHJpZ2dlcmVkIGl0LlxuICB2YXIgdG90YWxUaW1lID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlbWVudHNbaV07XG4gICAgdG90YWxUaW1lICs9IG1lYXN1cmVtZW50LnRvdGFsVGltZTtcbiAgfVxuICByZXR1cm4gdG90YWxUaW1lO1xufVxuXG5mdW5jdGlvbiBnZXRET01TdW1tYXJ5KG1lYXN1cmVtZW50cykge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlbWVudHNbaV07XG4gICAgdmFyIGlkO1xuXG4gICAgZm9yIChpZCBpbiBtZWFzdXJlbWVudC53cml0ZXMpIHtcbiAgICAgIG1lYXN1cmVtZW50LndyaXRlc1tpZF0uZm9yRWFjaChmdW5jdGlvbih3cml0ZSkge1xuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgdHlwZTogRE9NX09QRVJBVElPTl9UWVBFU1t3cml0ZS50eXBlXSB8fCB3cml0ZS50eXBlLFxuICAgICAgICAgIGFyZ3M6IHdyaXRlLmFyZ3NcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGl0ZW1zO1xufVxuXG5mdW5jdGlvbiBnZXRFeGNsdXNpdmVTdW1tYXJ5KG1lYXN1cmVtZW50cykge1xuICB2YXIgY2FuZGlkYXRlcyA9IHt9O1xuICB2YXIgZGlzcGxheU5hbWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlbWVudHNbaV07XG4gICAgdmFyIGFsbElEcyA9IGFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgbWVhc3VyZW1lbnQuZXhjbHVzaXZlLFxuICAgICAgbWVhc3VyZW1lbnQuaW5jbHVzaXZlXG4gICAgKTtcblxuICAgIGZvciAodmFyIGlkIGluIGFsbElEcykge1xuICAgICAgZGlzcGxheU5hbWUgPSBtZWFzdXJlbWVudC5kaXNwbGF5TmFtZXNbaWRdLmN1cnJlbnQ7XG5cbiAgICAgIGNhbmRpZGF0ZXNbZGlzcGxheU5hbWVdID0gY2FuZGlkYXRlc1tkaXNwbGF5TmFtZV0gfHwge1xuICAgICAgICBjb21wb25lbnROYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgICAgaW5jbHVzaXZlOiAwLFxuICAgICAgICBleGNsdXNpdmU6IDAsXG4gICAgICAgIHJlbmRlcjogMCxcbiAgICAgICAgY291bnQ6IDBcbiAgICAgIH07XG4gICAgICBpZiAobWVhc3VyZW1lbnQucmVuZGVyW2lkXSkge1xuICAgICAgICBjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXS5yZW5kZXIgKz0gbWVhc3VyZW1lbnQucmVuZGVyW2lkXTtcbiAgICAgIH1cbiAgICAgIGlmIChtZWFzdXJlbWVudC5leGNsdXNpdmVbaWRdKSB7XG4gICAgICAgIGNhbmRpZGF0ZXNbZGlzcGxheU5hbWVdLmV4Y2x1c2l2ZSArPSBtZWFzdXJlbWVudC5leGNsdXNpdmVbaWRdO1xuICAgICAgfVxuICAgICAgaWYgKG1lYXN1cmVtZW50LmluY2x1c2l2ZVtpZF0pIHtcbiAgICAgICAgY2FuZGlkYXRlc1tkaXNwbGF5TmFtZV0uaW5jbHVzaXZlICs9IG1lYXN1cmVtZW50LmluY2x1c2l2ZVtpZF07XG4gICAgICB9XG4gICAgICBpZiAobWVhc3VyZW1lbnQuY291bnRzW2lkXSkge1xuICAgICAgICBjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXS5jb3VudCArPSBtZWFzdXJlbWVudC5jb3VudHNbaWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vdyBtYWtlIGEgc29ydGVkIGFycmF5IHdpdGggdGhlIHJlc3VsdHMuXG4gIHZhciBhcnIgPSBbXTtcbiAgZm9yIChkaXNwbGF5TmFtZSBpbiBjYW5kaWRhdGVzKSB7XG4gICAgaWYgKGNhbmRpZGF0ZXNbZGlzcGxheU5hbWVdLmV4Y2x1c2l2ZSA+PSBET05UX0NBUkVfVEhSRVNIT0xEKSB7XG4gICAgICBhcnIucHVzaChjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXSk7XG4gICAgfVxuICB9XG5cbiAgYXJyLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiLmV4Y2x1c2l2ZSAtIGEuZXhjbHVzaXZlO1xuICB9KTtcblxuICByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBnZXRJbmNsdXNpdmVTdW1tYXJ5KG1lYXN1cmVtZW50cywgb25seUNsZWFuKSB7XG4gIHZhciBjYW5kaWRhdGVzID0ge307XG4gIHZhciBpbmNsdXNpdmVLZXk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlbWVudHNbaV07XG4gICAgdmFyIGFsbElEcyA9IGFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgbWVhc3VyZW1lbnQuZXhjbHVzaXZlLFxuICAgICAgbWVhc3VyZW1lbnQuaW5jbHVzaXZlXG4gICAgKTtcbiAgICB2YXIgY2xlYW5Db21wb25lbnRzO1xuXG4gICAgaWYgKG9ubHlDbGVhbikge1xuICAgICAgY2xlYW5Db21wb25lbnRzID0gZ2V0VW5jaGFuZ2VkQ29tcG9uZW50cyhtZWFzdXJlbWVudCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaWQgaW4gYWxsSURzKSB7XG4gICAgICBpZiAob25seUNsZWFuICYmICFjbGVhbkNvbXBvbmVudHNbaWRdKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSBtZWFzdXJlbWVudC5kaXNwbGF5TmFtZXNbaWRdO1xuXG4gICAgICAvLyBJbmNsdXNpdmUgdGltZSBpcyBub3QgdXNlZnVsIGZvciBtYW55IGNvbXBvbmVudHMgd2l0aG91dCBrbm93aW5nIHdoZXJlXG4gICAgICAvLyB0aGV5IGFyZSBpbnN0YW50aWF0ZWQuIFNvIHdlIGFnZ3JlZ2F0ZSBpbmNsdXNpdmUgdGltZSB3aXRoIGJvdGggdGhlXG4gICAgICAvLyBvd25lciBhbmQgY3VycmVudCBkaXNwbGF5TmFtZSBhcyB0aGUga2V5LlxuICAgICAgaW5jbHVzaXZlS2V5ID0gZGlzcGxheU5hbWUub3duZXIgKyAnID4gJyArIGRpc3BsYXlOYW1lLmN1cnJlbnQ7XG5cbiAgICAgIGNhbmRpZGF0ZXNbaW5jbHVzaXZlS2V5XSA9IGNhbmRpZGF0ZXNbaW5jbHVzaXZlS2V5XSB8fCB7XG4gICAgICAgIGNvbXBvbmVudE5hbWU6IGluY2x1c2l2ZUtleSxcbiAgICAgICAgdGltZTogMCxcbiAgICAgICAgY291bnQ6IDBcbiAgICAgIH07XG5cbiAgICAgIGlmIChtZWFzdXJlbWVudC5pbmNsdXNpdmVbaWRdKSB7XG4gICAgICAgIGNhbmRpZGF0ZXNbaW5jbHVzaXZlS2V5XS50aW1lICs9IG1lYXN1cmVtZW50LmluY2x1c2l2ZVtpZF07XG4gICAgICB9XG4gICAgICBpZiAobWVhc3VyZW1lbnQuY291bnRzW2lkXSkge1xuICAgICAgICBjYW5kaWRhdGVzW2luY2x1c2l2ZUtleV0uY291bnQgKz0gbWVhc3VyZW1lbnQuY291bnRzW2lkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBOb3cgbWFrZSBhIHNvcnRlZCBhcnJheSB3aXRoIHRoZSByZXN1bHRzLlxuICB2YXIgYXJyID0gW107XG4gIGZvciAoaW5jbHVzaXZlS2V5IGluIGNhbmRpZGF0ZXMpIHtcbiAgICBpZiAoY2FuZGlkYXRlc1tpbmNsdXNpdmVLZXldLnRpbWUgPj0gRE9OVF9DQVJFX1RIUkVTSE9MRCkge1xuICAgICAgYXJyLnB1c2goY2FuZGlkYXRlc1tpbmNsdXNpdmVLZXldKTtcbiAgICB9XG4gIH1cblxuICBhcnIuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIudGltZSAtIGEudGltZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gZ2V0VW5jaGFuZ2VkQ29tcG9uZW50cyhtZWFzdXJlbWVudCkge1xuICAvLyBGb3IgYSBnaXZlbiByZWNvbmNpbGUsIGxvb2sgYXQgd2hpY2ggY29tcG9uZW50cyBkaWQgbm90IGFjdHVhbGx5XG4gIC8vIHJlbmRlciBhbnl0aGluZyB0byB0aGUgRE9NIGFuZCByZXR1cm4gYSBtYXBwaW5nIG9mIHRoZWlyIElEIHRvXG4gIC8vIHRoZSBhbW91bnQgb2YgdGltZSBpdCB0b29rIHRvIHJlbmRlciB0aGUgZW50aXJlIHN1YnRyZWUuXG4gIHZhciBjbGVhbkNvbXBvbmVudHMgPSB7fTtcbiAgdmFyIGRpcnR5TGVhZklEcyA9IE9iamVjdC5rZXlzKG1lYXN1cmVtZW50LndyaXRlcyk7XG4gIHZhciBhbGxJRHMgPSBhc3NpZ24oe30sIG1lYXN1cmVtZW50LmV4Y2x1c2l2ZSwgbWVhc3VyZW1lbnQuaW5jbHVzaXZlKTtcblxuICBmb3IgKHZhciBpZCBpbiBhbGxJRHMpIHtcbiAgICB2YXIgaXNEaXJ0eSA9IGZhbHNlO1xuICAgIC8vIEZvciBlYWNoIGNvbXBvbmVudCB0aGF0IHJlbmRlcmVkLCBzZWUgaWYgYSBjb21wb25lbnQgdGhhdCB0cmlnZ2VyZWRcbiAgICAvLyBhIERPTSBvcCBpcyBpbiBpdHMgc3VidHJlZS5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnR5TGVhZklEcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGRpcnR5TGVhZklEc1tpXS5pbmRleE9mKGlkKSA9PT0gMCkge1xuICAgICAgICBpc0RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaXNEaXJ0eSAmJiBtZWFzdXJlbWVudC5jb3VudHNbaWRdID4gMCkge1xuICAgICAgY2xlYW5Db21wb25lbnRzW2lkXSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjbGVhbkNvbXBvbmVudHM7XG59XG5cbnZhciBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMgPSB7XG4gIGdldEV4Y2x1c2l2ZVN1bW1hcnk6IGdldEV4Y2x1c2l2ZVN1bW1hcnksXG4gIGdldEluY2x1c2l2ZVN1bW1hcnk6IGdldEluY2x1c2l2ZVN1bW1hcnksXG4gIGdldERPTVN1bW1hcnk6IGdldERPTVN1bW1hcnksXG4gIGdldFRvdGFsVGltZTogZ2V0VG90YWxUaW1lXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcztcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFbGVtZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDb250ZXh0ID0gcmVxdWlyZShcIi4vUmVhY3RDb250ZXh0XCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlXG59O1xuXG4vKipcbiAqIFdhcm4gZm9yIG11dGF0aW9ucy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuZnVuY3Rpb24gZGVmaW5lV2FybmluZ1Byb3BlcnR5KG9iamVjdCwga2V5KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5fc3RvcmUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fc3RvcmVba2V5XTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIGZhbHNlLFxuICAgICAgICAnRG9uXFwndCBzZXQgdGhlICVzIHByb3BlcnR5IG9mIHRoZSBSZWFjdCBlbGVtZW50LiBJbnN0ZWFkLCAnICtcbiAgICAgICAgJ3NwZWNpZnkgdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpbml0aWFsbHkgY3JlYXRpbmcgdGhlIGVsZW1lbnQuJyxcbiAgICAgICAga2V5XG4gICAgICApIDogbnVsbCk7XG4gICAgICB0aGlzLl9zdG9yZVtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gIH0pO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgdXBkYXRlZCB0byB0cnVlIGlmIHRoZSBtZW1icmFuZSBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZC5cbiAqL1xudmFyIHVzZU11dGF0aW9uTWVtYnJhbmUgPSBmYWxzZTtcblxuLyoqXG4gKiBXYXJuIGZvciBtdXRhdGlvbnMuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBkZWZpbmVNdXRhdGlvbk1lbWJyYW5lKHByb3RvdHlwZSkge1xuICB0cnkge1xuICAgIHZhciBwc2V1ZG9Gcm96ZW5Qcm9wZXJ0aWVzID0ge1xuICAgICAgcHJvcHM6IHRydWVcbiAgICB9O1xuICAgIGZvciAodmFyIGtleSBpbiBwc2V1ZG9Gcm96ZW5Qcm9wZXJ0aWVzKSB7XG4gICAgICBkZWZpbmVXYXJuaW5nUHJvcGVydHkocHJvdG90eXBlLCBrZXkpO1xuICAgIH1cbiAgICB1c2VNdXRhdGlvbk1lbWJyYW5lID0gdHJ1ZTtcbiAgfSBjYXRjaCAoeCkge1xuICAgIC8vIElFIHdpbGwgZmFpbCBvbiBkZWZpbmVQcm9wZXJ0eVxuICB9XG59XG5cbi8qKlxuICogQmFzZSBjb25zdHJ1Y3RvciBmb3IgYWxsIFJlYWN0IGVsZW1lbnRzLiBUaGlzIGlzIG9ubHkgdXNlZCB0byBtYWtlIHRoaXNcbiAqIHdvcmsgd2l0aCBhIGR5bmFtaWMgaW5zdGFuY2VvZiBjaGVjay4gTm90aGluZyBzaG91bGQgbGl2ZSBvbiB0aGlzIHByb3RvdHlwZS5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbih0eXBlLCBrZXksIHJlZiwgb3duZXIsIGNvbnRleHQsIHByb3BzKSB7XG4gIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMucmVmID0gcmVmO1xuXG4gIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gIHRoaXMuX293bmVyID0gb3duZXI7XG5cbiAgLy8gVE9ETzogRGVwcmVjYXRlIHdpdGhDb250ZXh0LCBhbmQgdGhlbiB0aGUgY29udGV4dCBiZWNvbWVzIGFjY2Vzc2libGVcbiAgLy8gdGhyb3VnaCB0aGUgb3duZXIuXG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGFuZCBwcm9wcyBhcmUgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgdGhlbSBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIHRoaXMuX3N0b3JlID0ge3Byb3BzOiBwcm9wcywgb3JpZ2luYWxQcm9wczogYXNzaWduKHt9LCBwcm9wcyl9O1xuXG4gICAgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoeCkge1xuICAgIH1cbiAgICB0aGlzLl9zdG9yZS52YWxpZGF0ZWQgPSBmYWxzZTtcblxuICAgIC8vIFdlJ3JlIG5vdCBhbGxvd2VkIHRvIHNldCBwcm9wcyBkaXJlY3RseSBvbiB0aGUgb2JqZWN0IHNvIHdlIGVhcmx5XG4gICAgLy8gcmV0dXJuIGFuZCByZWx5IG9uIHRoZSBwcm90b3R5cGUgbWVtYnJhbmUgdG8gZm9yd2FyZCB0byB0aGUgYmFja2luZ1xuICAgIC8vIHN0b3JlLlxuICAgIGlmICh1c2VNdXRhdGlvbk1lbWJyYW5lKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbn07XG5cbi8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgZXhwb3NlIHRoZSBmdW5jdGlvbiBvbiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHkuXG4vLyBSZWFjdEVsZW1lbnQgc2hvdWxkIGJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBwbGFpbiBvYmplY3QuXG5SZWFjdEVsZW1lbnQucHJvdG90eXBlID0ge1xuICBfaXNSZWFjdEVsZW1lbnQ6IHRydWVcbn07XG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgZGVmaW5lTXV0YXRpb25NZW1icmFuZShSZWFjdEVsZW1lbnQucHJvdG90eXBlKTtcbn1cblxuUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbih0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZTtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG4gIHZhciBwcm9wcyA9IHt9O1xuXG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICByZWYgPSBjb25maWcucmVmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLnJlZjtcbiAgICBrZXkgPSBjb25maWcua2V5ID09PSB1bmRlZmluZWQgPyBudWxsIDogJycgKyBjb25maWcua2V5O1xuICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGNvbmZpZy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgJiZcbiAgICAgICAgICAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzW3Byb3BOYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFJlYWN0RWxlbWVudChcbiAgICB0eXBlLFxuICAgIGtleSxcbiAgICByZWYsXG4gICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCxcbiAgICBSZWFjdENvbnRleHQuY3VycmVudCxcbiAgICBwcm9wc1xuICApO1xufTtcblxuUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBmYWN0b3J5ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBlKTtcbiAgLy8gRXhwb3NlIHRoZSB0eXBlIG9uIHRoZSBmYWN0b3J5IGFuZCB0aGUgcHJvdG90eXBlIHNvIHRoYXQgaXQgY2FuIGJlXG4gIC8vIGVhc2lseSBhY2Nlc3NlZCBvbiBlbGVtZW50cy4gRS5nLiA8Rm9vIC8+LnR5cGUgPT09IEZvby50eXBlLlxuICAvLyBUaGlzIHNob3VsZCBub3QgYmUgbmFtZWQgYGNvbnN0cnVjdG9yYCBzaW5jZSB0aGlzIG1heSBub3QgYmUgdGhlIGZ1bmN0aW9uXG4gIC8vIHRoYXQgY3JlYXRlZCB0aGUgZWxlbWVudCwgYW5kIGl0IG1heSBub3QgZXZlbiBiZSBhIGNvbnN0cnVjdG9yLlxuICAvLyBMZWdhY3kgaG9vayBUT0RPOiBXYXJuIGlmIHRoaXMgaXMgYWNjZXNzZWRcbiAgZmFjdG9yeS50eXBlID0gdHlwZTtcbiAgcmV0dXJuIGZhY3Rvcnk7XG59O1xuXG5SZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlUHJvcHMgPSBmdW5jdGlvbihvbGRFbGVtZW50LCBuZXdQcm9wcykge1xuICB2YXIgbmV3RWxlbWVudCA9IG5ldyBSZWFjdEVsZW1lbnQoXG4gICAgb2xkRWxlbWVudC50eXBlLFxuICAgIG9sZEVsZW1lbnQua2V5LFxuICAgIG9sZEVsZW1lbnQucmVmLFxuICAgIG9sZEVsZW1lbnQuX293bmVyLFxuICAgIG9sZEVsZW1lbnQuX2NvbnRleHQsXG4gICAgbmV3UHJvcHNcbiAgKTtcblxuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgLy8gSWYgdGhlIGtleSBvbiB0aGUgb3JpZ2luYWwgaXMgdmFsaWQsIHRoZW4gdGhlIGNsb25lIGlzIHZhbGlkXG4gICAgbmV3RWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gb2xkRWxlbWVudC5fc3RvcmUudmFsaWRhdGVkO1xuICB9XG4gIHJldHVybiBuZXdFbGVtZW50O1xufTtcblxuUmVhY3RFbGVtZW50LmNsb25lRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgdmFyIHByb3BOYW1lO1xuXG4gIC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWRcbiAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuXG4gIC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIG92ZXJyaWRlIGV4aXN0aW5nIHByb3BzXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChjb25maWcuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmXG4gICAgICAgICAgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVhY3RFbGVtZW50KFxuICAgIGVsZW1lbnQudHlwZSxcbiAgICBrZXksXG4gICAgcmVmLFxuICAgIG93bmVyLFxuICAgIGVsZW1lbnQuX2NvbnRleHQsXG4gICAgcHJvcHNcbiAgKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSB2YWxpZCBjb21wb25lbnQuXG4gKiBAZmluYWxcbiAqL1xuUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gIC8vIFJlYWN0VGVzdFV0aWxzIGlzIG9mdGVuIHVzZWQgb3V0c2lkZSBvZiBiZWZvcmVFYWNoIHdoZXJlIGFzIFJlYWN0IGlzXG4gIC8vIHdpdGhpbiBpdC4gVGhpcyBsZWFkcyB0byB0d28gZGlmZmVyZW50IGluc3RhbmNlcyBvZiBSZWFjdCBvbiB0aGUgc2FtZVxuICAvLyBwYWdlLiBUbyBpZGVudGlmeSBhIGVsZW1lbnQgZnJvbSBhIGRpZmZlcmVudCBSZWFjdCBpbnN0YW5jZSB3ZSB1c2VcbiAgLy8gYSBmbGFnIGluc3RlYWQgb2YgYW4gaW5zdGFuY2VvZiBjaGVjay5cbiAgdmFyIGlzRWxlbWVudCA9ICEhKG9iamVjdCAmJiBvYmplY3QuX2lzUmVhY3RFbGVtZW50KTtcbiAgLy8gaWYgKGlzRWxlbWVudCAmJiAhKG9iamVjdCBpbnN0YW5jZW9mIFJlYWN0RWxlbWVudCkpIHtcbiAgLy8gVGhpcyBpcyBhbiBpbmRpY2F0b3IgdGhhdCB5b3UncmUgdXNpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgUmVhY3QgYXQgdGhlXG4gIC8vIHNhbWUgdGltZS4gVGhpcyB3aWxsIHNjcmV3IHdpdGggb3duZXJzaGlwIGFuZCBzdHVmZi4gRml4IGl0LCBwbGVhc2UuXG4gIC8vIFRPRE86IFdlIGNvdWxkIHBvc3NpYmx5IHdhcm4gaGVyZS5cbiAgLy8gfVxuICByZXR1cm4gaXNFbGVtZW50O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVsZW1lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRmJHVnRaVzUwTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERTBMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRmJHVnRaVzUwWEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1VtVmhZM1JEYjI1MFpYaDBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEYjI1MFpYaDBYQ0lwTzF4dWRtRnlJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEZFhKeVpXNTBUM2R1WlhKY0lpazdYRzVjYm5aaGNpQmhjM05wWjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlQWW1wbFkzUXVZWE56YVdkdVhDSXBPMXh1ZG1GeUlIZGhjbTVwYm1jZ1BTQnlaWEYxYVhKbEtGd2lMaTkzWVhKdWFXNW5YQ0lwTzF4dVhHNTJZWElnVWtWVFJWSldSVVJmVUZKUFVGTWdQU0I3WEc0Z0lHdGxlVG9nZEhKMVpTeGNiaUFnY21WbU9pQjBjblZsWEc1OU8xeHVYRzR2S2lwY2JpQXFJRmRoY200Z1ptOXlJRzExZEdGMGFXOXVjeTVjYmlBcVhHNGdLaUJBYVc1MFpYSnVZV3hjYmlBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCdlltcGxZM1JjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCclpYbGNiaUFxTDF4dVpuVnVZM1JwYjI0Z1pHVm1hVzVsVjJGeWJtbHVaMUJ5YjNCbGNuUjVLRzlpYW1WamRDd2dhMlY1S1NCN1hHNGdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNodlltcGxZM1FzSUd0bGVTd2dlMXh1WEc0Z0lDQWdZMjl1Wm1sbmRYSmhZbXhsT2lCbVlXeHpaU3hjYmlBZ0lDQmxiblZ0WlhKaFlteGxPaUIwY25WbExGeHVYRzRnSUNBZ1oyVjBPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1ZmMzUnZjbVVwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVmYzNSdmNtVmJhMlY1WFR0Y2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnYzJWME9pQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUdaaGJITmxMRnh1SUNBZ0lDQWdJQ0FuUkc5dVhGd25kQ0J6WlhRZ2RHaGxJQ1Z6SUhCeWIzQmxjblI1SUc5bUlIUm9aU0JTWldGamRDQmxiR1Z0Wlc1MExpQkpibk4wWldGa0xDQW5JQ3RjYmlBZ0lDQWdJQ0FnSjNOd1pXTnBabmtnZEdobElHTnZjbkpsWTNRZ2RtRnNkV1VnZDJobGJpQnBibWwwYVdGc2JIa2dZM0psWVhScGJtY2dkR2hsSUdWc1pXMWxiblF1Snl4Y2JpQWdJQ0FnSUNBZ2EyVjVYRzRnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQjBhR2x6TGw5emRHOXlaVnRyWlhsZElEMGdkbUZzZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJSDBwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRlJvYVhNZ2FYTWdkWEJrWVhSbFpDQjBieUIwY25WbElHbG1JSFJvWlNCdFpXMWljbUZ1WlNCcGN5QnpkV05qWlhOelpuVnNiSGtnWTNKbFlYUmxaQzVjYmlBcUwxeHVkbUZ5SUhWelpVMTFkR0YwYVc5dVRXVnRZbkpoYm1VZ1BTQm1ZV3h6WlR0Y2JseHVMeW9xWEc0Z0tpQlhZWEp1SUdadmNpQnRkWFJoZEdsdmJuTXVYRzRnS2x4dUlDb2dRR2x1ZEdWeWJtRnNYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnWld4bGJXVnVkRnh1SUNvdlhHNW1kVzVqZEdsdmJpQmtaV1pwYm1WTmRYUmhkR2x2YmsxbGJXSnlZVzVsS0hCeWIzUnZkSGx3WlNrZ2UxeHVJQ0IwY25rZ2UxeHVJQ0FnSUhaaGNpQndjMlYxWkc5R2NtOTZaVzVRY205d1pYSjBhV1Z6SUQwZ2UxeHVJQ0FnSUNBZ2NISnZjSE02SUhSeWRXVmNiaUFnSUNCOU8xeHVJQ0FnSUdadmNpQW9kbUZ5SUd0bGVTQnBiaUJ3YzJWMVpHOUdjbTk2Wlc1UWNtOXdaWEowYVdWektTQjdYRzRnSUNBZ0lDQmtaV1pwYm1WWFlYSnVhVzVuVUhKdmNHVnlkSGtvY0hKdmRHOTBlWEJsTENCclpYa3BPMXh1SUNBZ0lIMWNiaUFnSUNCMWMyVk5kWFJoZEdsdmJrMWxiV0p5WVc1bElEMGdkSEoxWlR0Y2JpQWdmU0JqWVhSamFDQW9lQ2tnZTF4dUlDQWdJQzh2SUVsRklIZHBiR3dnWm1GcGJDQnZiaUJrWldacGJtVlFjbTl3WlhKMGVWeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dRbUZ6WlNCamIyNXpkSEoxWTNSdmNpQm1iM0lnWVd4c0lGSmxZV04wSUdWc1pXMWxiblJ6TGlCVWFHbHpJR2x6SUc5dWJIa2dkWE5sWkNCMGJ5QnRZV3RsSUhSb2FYTmNiaUFxSUhkdmNtc2dkMmwwYUNCaElHUjVibUZ0YVdNZ2FXNXpkR0Z1WTJWdlppQmphR1ZqYXk0Z1RtOTBhR2x1WnlCemFHOTFiR1FnYkdsMlpTQnZiaUIwYUdseklIQnliM1J2ZEhsd1pTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJSFI1Y0dWY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZHOWlhbVZqZEgwZ2NtVm1YRzRnS2lCQWNHRnlZVzBnZXlwOUlHdGxlVnh1SUNvZ1FIQmhjbUZ0SUhzcWZTQndjbTl3YzF4dUlDb2dRR2x1ZEdWeWJtRnNYRzRnS2k5Y2JuWmhjaUJTWldGamRFVnNaVzFsYm5RZ1BTQm1kVzVqZEdsdmJpaDBlWEJsTENCclpYa3NJSEpsWml3Z2IzZHVaWElzSUdOdmJuUmxlSFFzSUhCeWIzQnpLU0I3WEc0Z0lDOHZJRUoxYVd4MExXbHVJSEJ5YjNCbGNuUnBaWE1nZEdoaGRDQmlaV3h2Ym1jZ2IyNGdkR2hsSUdWc1pXMWxiblJjYmlBZ2RHaHBjeTUwZVhCbElEMGdkSGx3WlR0Y2JpQWdkR2hwY3k1clpYa2dQU0JyWlhrN1hHNGdJSFJvYVhNdWNtVm1JRDBnY21WbU8xeHVYRzRnSUM4dklGSmxZMjl5WkNCMGFHVWdZMjl0Y0c5dVpXNTBJSEpsYzNCdmJuTnBZbXhsSUdadmNpQmpjbVZoZEdsdVp5QjBhR2x6SUdWc1pXMWxiblF1WEc0Z0lIUm9hWE11WDI5M2JtVnlJRDBnYjNkdVpYSTdYRzVjYmlBZ0x5OGdWRTlFVHpvZ1JHVndjbVZqWVhSbElIZHBkR2hEYjI1MFpYaDBMQ0JoYm1RZ2RHaGxiaUIwYUdVZ1kyOXVkR1Y0ZENCaVpXTnZiV1Z6SUdGalkyVnpjMmxpYkdWY2JpQWdMeThnZEdoeWIzVm5hQ0IwYUdVZ2IzZHVaWEl1WEc0Z0lIUm9hWE11WDJOdmJuUmxlSFFnUFNCamIyNTBaWGgwTzF4dVhHNGdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQXZMeUJVYUdVZ2RtRnNhV1JoZEdsdmJpQm1iR0ZuSUdGdVpDQndjbTl3Y3lCaGNtVWdZM1Z5Y21WdWRHeDVJRzExZEdGMGFYWmxMaUJYWlNCd2RYUWdkR2hsYlNCdmJseHVJQ0FnSUM4dklHRnVJR1Y0ZEdWeWJtRnNJR0poWTJ0cGJtY2djM1J2Y21VZ2MyOGdkR2hoZENCM1pTQmpZVzRnWm5KbFpYcGxJSFJvWlNCM2FHOXNaU0J2WW1wbFkzUXVYRzRnSUNBZ0x5OGdWR2hwY3lCallXNGdZbVVnY21Wd2JHRmpaV1FnZDJsMGFDQmhJRmRsWVd0TllYQWdiMjVqWlNCMGFHVjVJR0Z5WlNCcGJYQnNaVzFsYm5SbFpDQnBibHh1SUNBZ0lDOHZJR052YlcxdmJteDVJSFZ6WldRZ1pHVjJaV3h2Y0cxbGJuUWdaVzUyYVhKdmJtMWxiblJ6TGx4dUlDQWdJSFJvYVhNdVgzTjBiM0psSUQwZ2UzQnliM0J6T2lCd2NtOXdjeXdnYjNKcFoybHVZV3hRY205d2N6b2dZWE56YVdkdUtIdDlMQ0J3Y205d2N5bDlPMXh1WEc0Z0lDQWdMeThnVkc4Z2JXRnJaU0JqYjIxd1lYSnBibWNnVW1WaFkzUkZiR1Z0Wlc1MGN5QmxZWE5wWlhJZ1ptOXlJSFJsYzNScGJtY2djSFZ5Y0c5elpYTXNJSGRsSUcxaGEyVmNiaUFnSUNBdkx5QjBhR1VnZG1Gc2FXUmhkR2x2YmlCbWJHRm5JRzV2YmkxbGJuVnRaWEpoWW14bElDaDNhR1Z5WlNCd2IzTnphV0pzWlN3Z2QyaHBZMmdnYzJodmRXeGtYRzRnSUNBZ0x5OGdhVzVqYkhWa1pTQmxkbVZ5ZVNCbGJuWnBjbTl1YldWdWRDQjNaU0J5ZFc0Z2RHVnpkSE1nYVc0cExDQnpieUIwYUdVZ2RHVnpkQ0JtY21GdFpYZHZjbXRjYmlBZ0lDQXZMeUJwWjI1dmNtVnpJR2wwTGx4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kR2hwY3k1ZmMzUnZjbVVzSUNkMllXeHBaR0YwWldRbkxDQjdYRzRnSUNBZ0lDQWdJR052Ym1acFozVnlZV0pzWlRvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUdWdWRXMWxjbUZpYkdVNklHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNCM2NtbDBZV0pzWlRvZ2RISjFaVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmU0JqWVhSamFDQW9lQ2tnZTF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TGw5emRHOXlaUzUyWVd4cFpHRjBaV1FnUFNCbVlXeHpaVHRjYmx4dUlDQWdJQzh2SUZkbEozSmxJRzV2ZENCaGJHeHZkMlZrSUhSdklITmxkQ0J3Y205d2N5QmthWEpsWTNSc2VTQnZiaUIwYUdVZ2IySnFaV04wSUhOdklIZGxJR1ZoY214NVhHNGdJQ0FnTHk4Z2NtVjBkWEp1SUdGdVpDQnlaV3g1SUc5dUlIUm9aU0J3Y205MGIzUjVjR1VnYldWdFluSmhibVVnZEc4Z1ptOXlkMkZ5WkNCMGJ5QjBhR1VnWW1GamEybHVaMXh1SUNBZ0lDOHZJSE4wYjNKbExseHVJQ0FnSUdsbUlDaDFjMlZOZFhSaGRHbHZiazFsYldKeVlXNWxLU0I3WEc0Z0lDQWdJQ0JQWW1wbFkzUXVabkpsWlhwbEtIUm9hWE1wTzF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSFJvYVhNdWNISnZjSE1nUFNCd2NtOXdjenRjYm4wN1hHNWNiaTh2SUZkbElHbHVkR1Z1ZEdsdmJtRnNiSGtnWkc5dUozUWdaWGh3YjNObElIUm9aU0JtZFc1amRHbHZiaUJ2YmlCMGFHVWdZMjl1YzNSeWRXTjBiM0lnY0hKdmNHVnlkSGt1WEc0dkx5QlNaV0ZqZEVWc1pXMWxiblFnYzJodmRXeGtJR0psSUdsdVpHbHpkR2x1WjNWcGMyaGhZbXhsSUdaeWIyMGdZU0J3YkdGcGJpQnZZbXBsWTNRdVhHNVNaV0ZqZEVWc1pXMWxiblF1Y0hKdmRHOTBlWEJsSUQwZ2UxeHVJQ0JmYVhOU1pXRmpkRVZzWlcxbGJuUTZJSFJ5ZFdWY2JuMDdYRzVjYm1sbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdaR1ZtYVc1bFRYVjBZWFJwYjI1TlpXMWljbUZ1WlNoU1pXRmpkRVZzWlcxbGJuUXVjSEp2ZEc5MGVYQmxLVHRjYm4xY2JseHVVbVZoWTNSRmJHVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUWdQU0JtZFc1amRHbHZiaWgwZVhCbExDQmpiMjVtYVdjc0lHTm9hV3hrY21WdUtTQjdYRzRnSUhaaGNpQndjbTl3VG1GdFpUdGNibHh1SUNBdkx5QlNaWE5sY25abFpDQnVZVzFsY3lCaGNtVWdaWGgwY21GamRHVmtYRzRnSUhaaGNpQndjbTl3Y3lBOUlIdDlPMXh1WEc0Z0lIWmhjaUJyWlhrZ1BTQnVkV3hzTzF4dUlDQjJZWElnY21WbUlEMGdiblZzYkR0Y2JseHVJQ0JwWmlBb1kyOXVabWxuSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0J5WldZZ1BTQmpiMjVtYVdjdWNtVm1JRDA5UFNCMWJtUmxabWx1WldRZ1B5QnVkV3hzSURvZ1kyOXVabWxuTG5KbFpqdGNiaUFnSUNCclpYa2dQU0JqYjI1bWFXY3VhMlY1SUQwOVBTQjFibVJsWm1sdVpXUWdQeUJ1ZFd4c0lEb2dKeWNnS3lCamIyNW1hV2N1YTJWNU8xeHVJQ0FnSUM4dklGSmxiV0ZwYm1sdVp5QndjbTl3WlhKMGFXVnpJR0Z5WlNCaFpHUmxaQ0IwYnlCaElHNWxkeUJ3Y205d2N5QnZZbXBsWTNSY2JpQWdJQ0JtYjNJZ0tIQnliM0JPWVcxbElHbHVJR052Ym1acFp5a2dlMXh1SUNBZ0lDQWdhV1lnS0dOdmJtWnBaeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHdjbTl3VG1GdFpTa2dKaVpjYmlBZ0lDQWdJQ0FnSUNBaFVrVlRSVkpXUlVSZlVGSlBVRk11YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0U1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUhCeWIzQnpXM0J5YjNCT1lXMWxYU0E5SUdOdmJtWnBaMXR3Y205d1RtRnRaVjA3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHk4Z1EyaHBiR1J5Wlc0Z1kyRnVJR0psSUcxdmNtVWdkR2hoYmlCdmJtVWdZWEpuZFcxbGJuUXNJR0Z1WkNCMGFHOXpaU0JoY21VZ2RISmhibk5tWlhKeVpXUWdiMjUwYjF4dUlDQXZMeUIwYUdVZ2JtVjNiSGtnWVd4c2IyTmhkR1ZrSUhCeWIzQnpJRzlpYW1WamRDNWNiaUFnZG1GeUlHTm9hV3hrY21WdVRHVnVaM1JvSUQwZ1lYSm5kVzFsYm5SekxteGxibWQwYUNBdElESTdYRzRnSUdsbUlDaGphR2xzWkhKbGJreGxibWQwYUNBOVBUMGdNU2tnZTF4dUlDQWdJSEJ5YjNCekxtTm9hV3hrY21WdUlEMGdZMmhwYkdSeVpXNDdYRzRnSUgwZ1pXeHpaU0JwWmlBb1kyaHBiR1J5Wlc1TVpXNW5kR2dnUGlBeEtTQjdYRzRnSUNBZ2RtRnlJR05vYVd4a1FYSnlZWGtnUFNCQmNuSmhlU2hqYUdsc1pISmxia3hsYm1kMGFDazdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQmphR2xzWkhKbGJreGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JqYUdsc1pFRnljbUY1VzJsZElEMGdZWEpuZFcxbGJuUnpXMmtnS3lBeVhUdGNiaUFnSUNCOVhHNGdJQ0FnY0hKdmNITXVZMmhwYkdSeVpXNGdQU0JqYUdsc1pFRnljbUY1TzF4dUlDQjlYRzVjYmlBZ0x5OGdVbVZ6YjJ4MlpTQmtaV1poZFd4MElIQnliM0J6WEc0Z0lHbG1JQ2gwZVhCbElDWW1JSFI1Y0dVdVpHVm1ZWFZzZEZCeWIzQnpLU0I3WEc0Z0lDQWdkbUZ5SUdSbFptRjFiSFJRY205d2N5QTlJSFI1Y0dVdVpHVm1ZWFZzZEZCeWIzQnpPMXh1SUNBZ0lHWnZjaUFvY0hKdmNFNWhiV1VnYVc0Z1pHVm1ZWFZzZEZCeWIzQnpLU0I3WEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhCeWIzQnpXM0J5YjNCT1lXMWxYU0E5UFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJQ0FnY0hKdmNITmJjSEp2Y0U1aGJXVmRJRDBnWkdWbVlYVnNkRkJ5YjNCelczQnliM0JPWVcxbFhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2JtVjNJRkpsWVdOMFJXeGxiV1Z1ZENoY2JpQWdJQ0IwZVhCbExGeHVJQ0FnSUd0bGVTeGNiaUFnSUNCeVpXWXNYRzRnSUNBZ1VtVmhZM1JEZFhKeVpXNTBUM2R1WlhJdVkzVnljbVZ1ZEN4Y2JpQWdJQ0JTWldGamRFTnZiblJsZUhRdVkzVnljbVZ1ZEN4Y2JpQWdJQ0J3Y205d2MxeHVJQ0FwTzF4dWZUdGNibHh1VW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVaaFkzUnZjbmtnUFNCbWRXNWpkR2x2YmloMGVYQmxLU0I3WEc0Z0lIWmhjaUJtWVdOMGIzSjVJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblF1WW1sdVpDaHVkV3hzTENCMGVYQmxLVHRjYmlBZ0x5OGdSWGh3YjNObElIUm9aU0IwZVhCbElHOXVJSFJvWlNCbVlXTjBiM0o1SUdGdVpDQjBhR1VnY0hKdmRHOTBlWEJsSUhOdklIUm9ZWFFnYVhRZ1kyRnVJR0psWEc0Z0lDOHZJR1ZoYzJsc2VTQmhZMk5sYzNObFpDQnZiaUJsYkdWdFpXNTBjeTRnUlM1bkxpQThSbTl2SUM4K0xuUjVjR1VnUFQwOUlFWnZieTUwZVhCbExseHVJQ0F2THlCVWFHbHpJSE5vYjNWc1pDQnViM1FnWW1VZ2JtRnRaV1FnWUdOdmJuTjBjblZqZEc5eVlDQnphVzVqWlNCMGFHbHpJRzFoZVNCdWIzUWdZbVVnZEdobElHWjFibU4wYVc5dVhHNGdJQzh2SUhSb1lYUWdZM0psWVhSbFpDQjBhR1VnWld4bGJXVnVkQ3dnWVc1a0lHbDBJRzFoZVNCdWIzUWdaWFpsYmlCaVpTQmhJR052Ym5OMGNuVmpkRzl5TGx4dUlDQXZMeUJNWldkaFkza2dhRzl2YXlCVVQwUlBPaUJYWVhKdUlHbG1JSFJvYVhNZ2FYTWdZV05qWlhOelpXUmNiaUFnWm1GamRHOXllUzUwZVhCbElEMGdkSGx3WlR0Y2JpQWdjbVYwZFhKdUlHWmhZM1J2Y25rN1hHNTlPMXh1WEc1U1pXRmpkRVZzWlcxbGJuUXVZMnh2Ym1WQmJtUlNaWEJzWVdObFVISnZjSE1nUFNCbWRXNWpkR2x2YmlodmJHUkZiR1Z0Wlc1MExDQnVaWGRRY205d2N5a2dlMXh1SUNCMllYSWdibVYzUld4bGJXVnVkQ0E5SUc1bGR5QlNaV0ZqZEVWc1pXMWxiblFvWEc0Z0lDQWdiMnhrUld4bGJXVnVkQzUwZVhCbExGeHVJQ0FnSUc5c1pFVnNaVzFsYm5RdWEyVjVMRnh1SUNBZ0lHOXNaRVZzWlcxbGJuUXVjbVZtTEZ4dUlDQWdJRzlzWkVWc1pXMWxiblF1WDI5M2JtVnlMRnh1SUNBZ0lHOXNaRVZzWlcxbGJuUXVYMk52Ym5SbGVIUXNYRzRnSUNBZ2JtVjNVSEp2Y0hOY2JpQWdLVHRjYmx4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0x5OGdTV1lnZEdobElHdGxlU0J2YmlCMGFHVWdiM0pwWjJsdVlXd2dhWE1nZG1Gc2FXUXNJSFJvWlc0Z2RHaGxJR05zYjI1bElHbHpJSFpoYkdsa1hHNGdJQ0FnYm1WM1JXeGxiV1Z1ZEM1ZmMzUnZjbVV1ZG1Gc2FXUmhkR1ZrSUQwZ2IyeGtSV3hsYldWdWRDNWZjM1J2Y21VdWRtRnNhV1JoZEdWa08xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdVpYZEZiR1Z0Wlc1ME8xeHVmVHRjYmx4dVVtVmhZM1JGYkdWdFpXNTBMbU5zYjI1bFJXeGxiV1Z1ZENBOUlHWjFibU4wYVc5dUtHVnNaVzFsYm5Rc0lHTnZibVpwWnl3Z1kyaHBiR1J5Wlc0cElIdGNiaUFnZG1GeUlIQnliM0JPWVcxbE8xeHVYRzRnSUM4dklFOXlhV2RwYm1Gc0lIQnliM0J6SUdGeVpTQmpiM0JwWldSY2JpQWdkbUZ5SUhCeWIzQnpJRDBnWVhOemFXZHVLSHQ5TENCbGJHVnRaVzUwTG5CeWIzQnpLVHRjYmx4dUlDQXZMeUJTWlhObGNuWmxaQ0J1WVcxbGN5QmhjbVVnWlhoMGNtRmpkR1ZrWEc0Z0lIWmhjaUJyWlhrZ1BTQmxiR1Z0Wlc1MExtdGxlVHRjYmlBZ2RtRnlJSEpsWmlBOUlHVnNaVzFsYm5RdWNtVm1PMXh1WEc0Z0lDOHZJRTkzYm1WeUlIZHBiR3dnWW1VZ2NISmxjMlZ5ZG1Wa0xDQjFibXhsYzNNZ2NtVm1JR2x6SUc5MlpYSnlhV1JrWlc1Y2JpQWdkbUZ5SUc5M2JtVnlJRDBnWld4bGJXVnVkQzVmYjNkdVpYSTdYRzVjYmlBZ2FXWWdLR052Ym1acFp5QWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2FXWWdLR052Ym1acFp5NXlaV1lnSVQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdMeThnVTJsc1pXNTBiSGtnYzNSbFlXd2dkR2hsSUhKbFppQm1jbTl0SUhSb1pTQndZWEpsYm5RdVhHNGdJQ0FnSUNCeVpXWWdQU0JqYjI1bWFXY3VjbVZtTzF4dUlDQWdJQ0FnYjNkdVpYSWdQU0JTWldGamRFTjFjbkpsYm5SUGQyNWxjaTVqZFhKeVpXNTBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ZMjl1Wm1sbkxtdGxlU0FoUFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQnJaWGtnUFNBbkp5QXJJR052Ym1acFp5NXJaWGs3WEc0Z0lDQWdmVnh1SUNBZ0lDOHZJRkpsYldGcGJtbHVaeUJ3Y205d1pYSjBhV1Z6SUc5MlpYSnlhV1JsSUdWNGFYTjBhVzVuSUhCeWIzQnpYRzRnSUNBZ1ptOXlJQ2h3Y205d1RtRnRaU0JwYmlCamIyNW1hV2NwSUh0Y2JpQWdJQ0FnSUdsbUlDaGpiMjVtYVdjdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0hKdmNFNWhiV1VwSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJVkpGVTBWU1ZrVkVYMUJTVDFCVExtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQk9ZVzFsS1NrZ2UxeHVJQ0FnSUNBZ0lDQndjbTl3YzF0d2NtOXdUbUZ0WlYwZ1BTQmpiMjVtYVdkYmNISnZjRTVoYldWZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRU5vYVd4a2NtVnVJR05oYmlCaVpTQnRiM0psSUhSb1lXNGdiMjVsSUdGeVozVnRaVzUwTENCaGJtUWdkR2h2YzJVZ1lYSmxJSFJ5WVc1elptVnljbVZrSUc5dWRHOWNiaUFnTHk4Z2RHaGxJRzVsZDJ4NUlHRnNiRzlqWVhSbFpDQndjbTl3Y3lCdlltcGxZM1F1WEc0Z0lIWmhjaUJqYUdsc1pISmxia3hsYm1kMGFDQTlJR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZ2dMU0F5TzF4dUlDQnBaaUFvWTJocGJHUnlaVzVNWlc1bmRHZ2dQVDA5SURFcElIdGNiaUFnSUNCd2NtOXdjeTVqYUdsc1pISmxiaUE5SUdOb2FXeGtjbVZ1TzF4dUlDQjlJR1ZzYzJVZ2FXWWdLR05vYVd4a2NtVnVUR1Z1WjNSb0lENGdNU2tnZTF4dUlDQWdJSFpoY2lCamFHbHNaRUZ5Y21GNUlEMGdRWEp5WVhrb1kyaHBiR1J5Wlc1TVpXNW5kR2dwTzF4dUlDQWdJR1p2Y2lBb2RtRnlJR2tnUFNBd095QnBJRHdnWTJocGJHUnlaVzVNWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyaHBiR1JCY25KaGVWdHBYU0E5SUdGeVozVnRaVzUwYzF0cElDc2dNbDA3WEc0Z0lDQWdmVnh1SUNBZ0lIQnliM0J6TG1Ob2FXeGtjbVZ1SUQwZ1kyaHBiR1JCY25KaGVUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQnVaWGNnVW1WaFkzUkZiR1Z0Wlc1MEtGeHVJQ0FnSUdWc1pXMWxiblF1ZEhsd1pTeGNiaUFnSUNCclpYa3NYRzRnSUNBZ2NtVm1MRnh1SUNBZ0lHOTNibVZ5TEZ4dUlDQWdJR1ZzWlcxbGJuUXVYMk52Ym5SbGVIUXNYRzRnSUNBZ2NISnZjSE5jYmlBZ0tUdGNibjA3WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCdlltcGxZM1JjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OUlGUnlkV1VnYVdZZ1lHOWlhbVZqZEdBZ2FYTWdZU0IyWVd4cFpDQmpiMjF3YjI1bGJuUXVYRzRnS2lCQVptbHVZV3hjYmlBcUwxeHVVbVZoWTNSRmJHVnRaVzUwTG1selZtRnNhV1JGYkdWdFpXNTBJRDBnWm5WdVkzUnBiMjRvYjJKcVpXTjBLU0I3WEc0Z0lDOHZJRkpsWVdOMFZHVnpkRlYwYVd4eklHbHpJRzltZEdWdUlIVnpaV1FnYjNWMGMybGtaU0J2WmlCaVpXWnZjbVZGWVdOb0lIZG9aWEpsSUdGeklGSmxZV04wSUdselhHNGdJQzh2SUhkcGRHaHBiaUJwZEM0Z1ZHaHBjeUJzWldGa2N5QjBieUIwZDI4Z1pHbG1abVZ5Wlc1MElHbHVjM1JoYm1ObGN5QnZaaUJTWldGamRDQnZiaUIwYUdVZ2MyRnRaVnh1SUNBdkx5QndZV2RsTGlCVWJ5QnBaR1Z1ZEdsbWVTQmhJR1ZzWlcxbGJuUWdabkp2YlNCaElHUnBabVpsY21WdWRDQlNaV0ZqZENCcGJuTjBZVzVqWlNCM1pTQjFjMlZjYmlBZ0x5OGdZU0JtYkdGbklHbHVjM1JsWVdRZ2IyWWdZVzRnYVc1emRHRnVZMlZ2WmlCamFHVmpheTVjYmlBZ2RtRnlJR2x6Uld4bGJXVnVkQ0E5SUNFaEtHOWlhbVZqZENBbUppQnZZbXBsWTNRdVgybHpVbVZoWTNSRmJHVnRaVzUwS1R0Y2JpQWdMeThnYVdZZ0tHbHpSV3hsYldWdWRDQW1KaUFoS0c5aWFtVmpkQ0JwYm5OMFlXNWpaVzltSUZKbFlXTjBSV3hsYldWdWRDa3BJSHRjYmlBZ0x5OGdWR2hwY3lCcGN5QmhiaUJwYm1ScFkyRjBiM0lnZEdoaGRDQjViM1VuY21VZ2RYTnBibWNnYlhWc2RHbHdiR1VnZG1WeWMybHZibk1nYjJZZ1VtVmhZM1FnWVhRZ2RHaGxYRzRnSUM4dklITmhiV1VnZEdsdFpTNGdWR2hwY3lCM2FXeHNJSE5qY21WM0lIZHBkR2dnYjNkdVpYSnphR2x3SUdGdVpDQnpkSFZtWmk0Z1JtbDRJR2wwTENCd2JHVmhjMlV1WEc0Z0lDOHZJRlJQUkU4NklGZGxJR052ZFd4a0lIQnZjM05wWW14NUlIZGhjbTRnYUdWeVpTNWNiaUFnTHk4Z2ZWeHVJQ0J5WlhSMWNtNGdhWE5GYkdWdFpXNTBPMXh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQlNaV0ZqZEVWc1pXMWxiblE3WEc0aVhYMD0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RWxlbWVudFZhbGlkYXRvclxuICovXG5cbi8qKlxuICogUmVhY3RFbGVtZW50VmFsaWRhdG9yIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgYSBlbGVtZW50IGZhY3RvcnlcbiAqIHdoaWNoIHZhbGlkYXRlcyB0aGUgcHJvcHMgcGFzc2VkIHRvIHRoZSBlbGVtZW50LiBUaGlzIGlzIGludGVuZGVkIHRvIGJlXG4gKiB1c2VkIG9ubHkgaW4gREVWIGFuZCBjb3VsZCBiZSByZXBsYWNlZCBieSBhIHN0YXRpYyB0eXBlIGNoZWNrZXIgZm9yIGxhbmd1YWdlc1xuICogdGhhdCBzdXBwb3J0IGl0LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEZyYWdtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RGcmFnbWVudFwiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25zID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uc1wiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzXCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3ROYXRpdmVDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdE5hdGl2ZUNvbXBvbmVudFwiKTtcblxudmFyIGdldEl0ZXJhdG9yRm4gPSByZXF1aXJlKFwiLi9nZXRJdGVyYXRvckZuXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5nZXROYW1lKCk7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuXG52YXIgTlVNRVJJQ19QUk9QRVJUWV9SRUdFWCA9IC9eXFxkKyQvO1xuXG4vKipcbiAqIEdldHMgdGhlIGluc3RhbmNlJ3MgbmFtZSBmb3IgdXNlIGluIHdhcm5pbmdzLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHJldHVybiB7P3N0cmluZ30gRGlzcGxheSBuYW1lIG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBnZXROYW1lKGluc3RhbmNlKSB7XG4gIHZhciBwdWJsaWNJbnN0YW5jZSA9IGluc3RhbmNlICYmIGluc3RhbmNlLmdldFB1YmxpY0luc3RhbmNlKCk7XG4gIGlmICghcHVibGljSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHZhciBjb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICBpZiAoIWNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgY29uc3RydWN0b3IubmFtZSB8fCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudCBvd25lcidzIGRpc3BsYXlOYW1lIGZvciB1c2UgaW4gd2FybmluZ3MuXG4gKlxuICogQGludGVybmFsXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBEaXNwbGF5IG5hbWUgb3IgdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGdldEN1cnJlbnRPd25lckRpc3BsYXlOYW1lKCkge1xuICB2YXIgY3VycmVudCA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gIHJldHVybiAoXG4gICAgY3VycmVudCAmJiBnZXROYW1lKGN1cnJlbnQpIHx8IHVuZGVmaW5lZFxuICApO1xufVxuXG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIGlmIChlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuXG4gIHdhcm5BbmRNb25pdG9yRm9yS2V5VXNlKFxuICAgICdFYWNoIGNoaWxkIGluIGFuIGFycmF5IG9yIGl0ZXJhdG9yIHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nLFxuICAgIGVsZW1lbnQsXG4gICAgcGFyZW50VHlwZVxuICApO1xufVxuXG4vKipcbiAqIFdhcm4gaWYgdGhlIGtleSBpcyBiZWluZyBkZWZpbmVkIGFzIGFuIG9iamVjdCBwcm9wZXJ0eSBidXQgaGFzIGFuIGluY29ycmVjdFxuICogdmFsdWUuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBrZXkuXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBDb21wb25lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eUtleShuYW1lLCBlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIGlmICghTlVNRVJJQ19QUk9QRVJUWV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHdhcm5BbmRNb25pdG9yRm9yS2V5VXNlKFxuICAgICdDaGlsZCBvYmplY3RzIHNob3VsZCBoYXZlIG5vbi1udW1lcmljIGtleXMgc28gb3JkZXJpbmcgaXMgcHJlc2VydmVkLicsXG4gICAgZWxlbWVudCxcbiAgICBwYXJlbnRUeXBlXG4gICk7XG59XG5cbi8qKlxuICogU2hhcmVkIHdhcm5pbmcgYW5kIG1vbml0b3JpbmcgY29kZSBmb3IgdGhlIGtleSB3YXJuaW5ncy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBiYXNlIHdhcm5pbmcgdGhhdCBnZXRzIG91dHB1dC5cbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IENvbXBvbmVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5mdW5jdGlvbiB3YXJuQW5kTW9uaXRvckZvcktleVVzZShtZXNzYWdlLCBlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50T3duZXJEaXNwbGF5TmFtZSgpO1xuICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/XG4gICAgcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gIHZhciB1c2VOYW1lID0gb3duZXJOYW1lIHx8IHBhcmVudE5hbWU7XG4gIHZhciBtZW1vaXplciA9IG93bmVySGFzS2V5VXNlV2FybmluZ1ttZXNzYWdlXSB8fCAoXG4gICAgKG93bmVySGFzS2V5VXNlV2FybmluZ1ttZXNzYWdlXSA9IHt9KVxuICApO1xuICBpZiAobWVtb2l6ZXIuaGFzT3duUHJvcGVydHkodXNlTmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbWVtb2l6ZXJbdXNlTmFtZV0gPSB0cnVlO1xuXG4gIHZhciBwYXJlbnRPck93bmVyQWRkZW5kdW0gPVxuICAgIG93bmVyTmFtZSA/IChcIiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBcIiArIG93bmVyTmFtZSArIFwiLlwiKSA6XG4gICAgcGFyZW50TmFtZSA/IChcIiBDaGVjayB0aGUgUmVhY3QucmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIikgOlxuICAgICcnO1xuXG4gIC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuICB2YXIgY2hpbGRPd25lckFkZGVuZHVtID0gJyc7XG4gIGlmIChlbGVtZW50ICYmXG4gICAgICBlbGVtZW50Ll9vd25lciAmJlxuICAgICAgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAvLyBOYW1lIG9mIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICB2YXIgY2hpbGRPd25lck5hbWUgPSBnZXROYW1lKGVsZW1lbnQuX293bmVyKTtcblxuICAgIGNoaWxkT3duZXJBZGRlbmR1bSA9IChcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGNoaWxkT3duZXJOYW1lICsgXCIuXCIpO1xuICB9XG5cbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgZmFsc2UsXG4gICAgbWVzc2FnZSArICclcyVzIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLFxuICAgIHBhcmVudE9yT3duZXJBZGRlbmR1bSxcbiAgICBjaGlsZE93bmVyQWRkZW5kdW1cbiAgKSA6IG51bGwpO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcbiAgICAgIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gIH0gZWxzZSBpZiAobm9kZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcbiAgICAvLyBFbnRyeSBpdGVyYXRvcnMgcHJvdmlkZSBpbXBsaWNpdCBrZXlzLlxuICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgZnJhZ21lbnQgPSBSZWFjdEZyYWdtZW50LmV4dHJhY3RJZkZyYWdtZW50KG5vZGUpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGZyYWdtZW50KSB7XG4gICAgICAgIGlmIChmcmFnbWVudC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eUtleShrZXksIGZyYWdtZW50W2tleV0sIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHByb3BzIGFyZSB2YWxpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcFR5cGVzIE1hcCBvZiBwcm9wIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKGNvbXBvbmVudE5hbWUsIHByb3BUeXBlcywgcHJvcHMsIGxvY2F0aW9uKSB7XG4gIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BUeXBlcykge1xuICAgIGlmIChwcm9wVHlwZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICB2YXIgZXJyb3I7XG4gICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICB0eXBlb2YgcHJvcFR5cGVzW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSAnICtcbiAgICAgICAgICAnUmVhY3QuUHJvcFR5cGVzLicsXG4gICAgICAgICAgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLFxuICAgICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSxcbiAgICAgICAgICBwcm9wTmFtZVxuICAgICAgICApIDogaW52YXJpYW50KHR5cGVvZiBwcm9wVHlwZXNbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nKSk7XG4gICAgICAgIGVycm9yID0gcHJvcFR5cGVzW3Byb3BOYW1lXShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGVycm9yID0gZXg7XG4gICAgICB9XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICB2YXIgYWRkZW5kdW0gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0odGhpcyk7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkIHByb3BUeXBlOiAlcyVzJywgZXJyb3IubWVzc2FnZSwgYWRkZW5kdW0pIDogbnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB3YXJuZWRQcm9wc011dGF0aW9ucyA9IHt9O1xuXG4vKipcbiAqIFdhcm4gYWJvdXQgbXV0YXRpbmcgcHJvcHMgd2hlbiBzZXR0aW5nIGBwcm9wTmFtZWAgb24gYGVsZW1lbnRgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wTmFtZSBUaGUgc3RyaW5nIGtleSB3aXRoaW4gcHJvcHMgdGhhdCB3YXMgc2V0XG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiB3YXJuRm9yUHJvcHNNdXRhdGlvbihwcm9wTmFtZSwgZWxlbWVudCkge1xuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGVsZW1lbnROYW1lID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZSA6IHR5cGUuZGlzcGxheU5hbWU7XG4gIHZhciBvd25lck5hbWUgPSBlbGVtZW50Ll9vd25lciA/XG4gICAgZWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSA6IG51bGw7XG5cbiAgdmFyIHdhcm5pbmdLZXkgPSBwcm9wTmFtZSArICd8JyArIGVsZW1lbnROYW1lICsgJ3wnICsgb3duZXJOYW1lO1xuICBpZiAod2FybmVkUHJvcHNNdXRhdGlvbnMuaGFzT3duUHJvcGVydHkod2FybmluZ0tleSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgd2FybmVkUHJvcHNNdXRhdGlvbnNbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gIHZhciBlbGVtZW50SW5mbyA9ICcnO1xuICBpZiAoZWxlbWVudE5hbWUpIHtcbiAgICBlbGVtZW50SW5mbyA9ICcgPCcgKyBlbGVtZW50TmFtZSArICcgLz4nO1xuICB9XG4gIHZhciBvd25lckluZm8gPSAnJztcbiAgaWYgKG93bmVyTmFtZSkge1xuICAgIG93bmVySW5mbyA9ICcgVGhlIGVsZW1lbnQgd2FzIGNyZWF0ZWQgYnkgJyArIG93bmVyTmFtZSArICcuJztcbiAgfVxuXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgIGZhbHNlLFxuICAgICdEb25cXCd0IHNldCAucHJvcHMuJXMgb2YgdGhlIFJlYWN0IGNvbXBvbmVudCVzLiBJbnN0ZWFkLCBzcGVjaWZ5IHRoZSAnICtcbiAgICAnY29ycmVjdCB2YWx1ZSB3aGVuIGluaXRpYWxseSBjcmVhdGluZyB0aGUgZWxlbWVudCBvciB1c2UgJyArXG4gICAgJ1JlYWN0LmNsb25lRWxlbWVudCB0byBtYWtlIGEgbmV3IGVsZW1lbnQgd2l0aCB1cGRhdGVkIHByb3BzLiVzJyxcbiAgICBwcm9wTmFtZSxcbiAgICBlbGVtZW50SW5mbyxcbiAgICBvd25lckluZm9cbiAgKSA6IG51bGwpO1xufVxuXG4vLyBJbmxpbmUgT2JqZWN0LmlzIHBvbHlmaWxsXG5mdW5jdGlvbiBpcyhhLCBiKSB7XG4gIGlmIChhICE9PSBhKSB7XG4gICAgLy8gTmFOXG4gICAgcmV0dXJuIGIgIT09IGI7XG4gIH1cbiAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkge1xuICAgIC8vICstMFxuICAgIHJldHVybiAxIC8gYSA9PT0gMSAvIGI7XG4gIH1cbiAgcmV0dXJuIGEgPT09IGI7XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgY2hlY2sgaWYgaXRzIHByb3BzIGhhdmUgYmVlbiBtdXRhdGVkIHNpbmNlIGVsZW1lbnRcbiAqIGNyZWF0aW9uIChvciB0aGUgbGFzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24pLiBJbiBwYXJ0aWN1bGFyLCBjaGVjayBpZiBhbnlcbiAqIG5ldyBwcm9wcyBoYXZlIGJlZW4gYWRkZWQsIHdoaWNoIHdlIGNhbid0IGRpcmVjdGx5IGNhdGNoIGJ5IGRlZmluaW5nIHdhcm5pbmdcbiAqIHByb3BlcnRpZXMgb24gdGhlIHByb3BzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBjaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHMoZWxlbWVudCkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlKSB7XG4gICAgLy8gRWxlbWVudCB3YXMgY3JlYXRlZCB1c2luZyBgbmV3IFJlYWN0RWxlbWVudGAgZGlyZWN0bHkgb3Igd2l0aFxuICAgIC8vIGBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudGA7IHNraXAgbXV0YXRpb24gY2hlY2tpbmdcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgb3JpZ2luYWxQcm9wcyA9IGVsZW1lbnQuX3N0b3JlLm9yaWdpbmFsUHJvcHM7XG4gIHZhciBwcm9wcyA9IGVsZW1lbnQucHJvcHM7XG5cbiAgZm9yICh2YXIgcHJvcE5hbWUgaW4gcHJvcHMpIHtcbiAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICBpZiAoIW9yaWdpbmFsUHJvcHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpIHx8XG4gICAgICAgICAgIWlzKG9yaWdpbmFsUHJvcHNbcHJvcE5hbWVdLCBwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHdhcm5Gb3JQcm9wc011dGF0aW9uKHByb3BOYW1lLCBlbGVtZW50KTtcblxuICAgICAgICAvLyBDb3B5IG92ZXIgdGhlIG5ldyB2YWx1ZSBzbyB0aGF0IHRoZSB0d28gcHJvcHMgb2JqZWN0cyBtYXRjaCBhZ2FpblxuICAgICAgICBvcmlnaW5hbFByb3BzW3Byb3BOYW1lXSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09IG51bGwpIHtcbiAgICAvLyBUaGlzIGhhcyBhbHJlYWR5IHdhcm5lZC4gRG9uJ3QgdGhyb3cuXG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIEV4dHJhY3QgdGhlIGNvbXBvbmVudCBjbGFzcyBmcm9tIHRoZSBlbGVtZW50LiBDb252ZXJ0cyBzdHJpbmcgdHlwZXNcbiAgLy8gdG8gYSBjb21wb3NpdGUgY2xhc3Mgd2hpY2ggbWF5IGhhdmUgcHJvcFR5cGVzLlxuICAvLyBUT0RPOiBWYWxpZGF0aW5nIGEgc3RyaW5nJ3MgcHJvcFR5cGVzIGlzIG5vdCBkZWNvdXBsZWQgZnJvbSB0aGVcbiAgLy8gcmVuZGVyaW5nIHRhcmdldCB3aGljaCBpcyBwcm9ibGVtYXRpYy5cbiAgdmFyIGNvbXBvbmVudENsYXNzID0gUmVhY3ROYXRpdmVDb21wb25lbnQuZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50KFxuICAgIGVsZW1lbnRcbiAgKTtcbiAgdmFyIG5hbWUgPSBjb21wb25lbnRDbGFzcy5kaXNwbGF5TmFtZSB8fCBjb21wb25lbnRDbGFzcy5uYW1lO1xuICBpZiAoY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzKSB7XG4gICAgY2hlY2tQcm9wVHlwZXMoXG4gICAgICBuYW1lLFxuICAgICAgY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzLFxuICAgICAgZWxlbWVudC5wcm9wcyxcbiAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMucHJvcFxuICAgICk7XG4gIH1cbiAgaWYgKHR5cGVvZiBjb21wb25lbnRDbGFzcy5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIGNvbXBvbmVudENsYXNzLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCxcbiAgICAgICdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArXG4gICAgICAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLidcbiAgICApIDogbnVsbCk7XG4gIH1cbn1cblxudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHtcblxuICBjaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHM6IGNoZWNrQW5kV2FybkZvck11dGF0ZWRQcm9wcyxcblxuICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbih0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICB0eXBlICE9IG51bGwsXG4gICAgICAnUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBzaG91bGQgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiBJdCBzaG91bGQgJyArXG4gICAgICAgICdiZSBhIHN0cmluZyAoZm9yIERPTSBlbGVtZW50cykgb3IgYSBSZWFjdENsYXNzIChmb3IgY29tcG9zaXRlICcgK1xuICAgICAgICAnY29tcG9uZW50cykuJ1xuICAgICkgOiBudWxsKTtcblxuICAgIHZhciBlbGVtZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gICAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0sXG5cbiAgY3JlYXRlRmFjdG9yeTogZnVuY3Rpb24odHlwZSkge1xuICAgIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUVsZW1lbnQuYmluZChcbiAgICAgIG51bGwsXG4gICAgICB0eXBlXG4gICAgKTtcbiAgICAvLyBMZWdhY3kgaG9vayBUT0RPOiBXYXJuIGlmIHRoaXMgaXMgYWNjZXNzZWRcbiAgICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgIHZhbGlkYXRlZEZhY3RvcnksXG4gICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgK1xuICAgICAgICAgICAgICAgICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LidcbiAgICAgICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgLy8gSUUgd2lsbCBmYWlsIG9uIGRlZmluZVByb3BlcnR5IChlczUtc2hpbS9zaGFtIHRvbylcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIHJldHVybiB2YWxpZGF0ZWRGYWN0b3J5O1xuICB9LFxuXG4gIGNsb25lRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTtcbiAgICB9XG4gICAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3I7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVFF0TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFVnNaVzFsYm5SV1lXeHBaR0YwYjNKY2JpQXFMMXh1WEc0dktpcGNiaUFxSUZKbFlXTjBSV3hsYldWdWRGWmhiR2xrWVhSdmNpQndjbTkyYVdSbGN5QmhJSGR5WVhCd1pYSWdZWEp2ZFc1a0lHRWdaV3hsYldWdWRDQm1ZV04wYjNKNVhHNGdLaUIzYUdsamFDQjJZV3hwWkdGMFpYTWdkR2hsSUhCeWIzQnpJSEJoYzNObFpDQjBieUIwYUdVZ1pXeGxiV1Z1ZEM0Z1ZHaHBjeUJwY3lCcGJuUmxibVJsWkNCMGJ5QmlaVnh1SUNvZ2RYTmxaQ0J2Ym14NUlHbHVJRVJGVmlCaGJtUWdZMjkxYkdRZ1ltVWdjbVZ3YkdGalpXUWdZbmtnWVNCemRHRjBhV01nZEhsd1pTQmphR1ZqYTJWeUlHWnZjaUJzWVc1bmRXRm5aWE5jYmlBcUlIUm9ZWFFnYzNWd2NHOXlkQ0JwZEM1Y2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUkdjbUZuYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSbkpoWjIxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1Y3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFVISnZjRlI1Y0dWTWIyTmhkR2x2Ym5OY0lpazdYRzUyWVhJZ1VtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVUbUZ0WlhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGQnliM0JVZVhCbFRHOWpZWFJwYjI1T1lXMWxjMXdpS1R0Y2JuWmhjaUJTWldGamRFTjFjbkpsYm5SUGQyNWxjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUTNWeWNtVnVkRTkzYm1WeVhDSXBPMXh1ZG1GeUlGSmxZV04wVG1GMGFYWmxRMjl0Y0c5dVpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JPWVhScGRtVkRiMjF3YjI1bGJuUmNJaWs3WEc1Y2JuWmhjaUJuWlhSSmRHVnlZWFJ2Y2tadUlEMGdjbVZ4ZFdseVpTaGNJaTR2WjJWMFNYUmxjbUYwYjNKR2Jsd2lLVHRjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JtWjFibU4wYVc5dUlHZGxkRVJsWTJ4aGNtRjBhVzl1UlhKeWIzSkJaR1JsYm1SMWJTZ3BJSHRjYmlBZ2FXWWdLRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlMbU4xY25KbGJuUXBJSHRjYmlBZ0lDQjJZWElnYm1GdFpTQTlJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlMbU4xY25KbGJuUXVaMlYwVG1GdFpTZ3BPMXh1SUNBZ0lHbG1JQ2h1WVcxbEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z0p5QkRhR1ZqYXlCMGFHVWdjbVZ1WkdWeUlHMWxkR2h2WkNCdlppQmdKeUFySUc1aGJXVWdLeUFuWUM0bk8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnSnljN1hHNTlYRzVjYmk4cUtseHVJQ29nVjJGeWJpQnBaaUIwYUdWeVpTZHpJRzV2SUd0bGVTQmxlSEJzYVdOcGRHeDVJSE5sZENCdmJpQmtlVzVoYldsaklHRnljbUY1Y3lCdlppQmphR2xzWkhKbGJpQnZjbHh1SUNvZ2IySnFaV04wSUd0bGVYTWdZWEpsSUc1dmRDQjJZV3hwWkM0Z1ZHaHBjeUJoYkd4dmQzTWdkWE1nZEc4Z2EyVmxjQ0IwY21GamF5QnZaaUJqYUdsc1pISmxiaUJpWlhSM1pXVnVYRzRnS2lCMWNHUmhkR1Z6TGx4dUlDb3ZYRzUyWVhJZ2IzZHVaWEpJWVhOTFpYbFZjMlZYWVhKdWFXNW5JRDBnZTMwN1hHNWNiblpoY2lCc2IyZG5aV1JVZVhCbFJtRnBiSFZ5WlhNZ1BTQjdmVHRjYmx4dWRtRnlJRTVWVFVWU1NVTmZVRkpQVUVWU1ZGbGZVa1ZIUlZnZ1BTQXZYbHhjWkNza0x6dGNibHh1THlvcVhHNGdLaUJIWlhSeklIUm9aU0JwYm5OMFlXNWpaU2R6SUc1aGJXVWdabTl5SUhWelpTQnBiaUIzWVhKdWFXNW5jeTVjYmlBcVhHNGdLaUJBYVc1MFpYSnVZV3hjYmlBcUlFQnlaWFIxY200Z2V6OXpkSEpwYm1kOUlFUnBjM0JzWVhrZ2JtRnRaU0J2Y2lCMWJtUmxabWx1WldSY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWjJWMFRtRnRaU2hwYm5OMFlXNWpaU2tnZTF4dUlDQjJZWElnY0hWaWJHbGpTVzV6ZEdGdVkyVWdQU0JwYm5OMFlXNWpaU0FtSmlCcGJuTjBZVzVqWlM1blpYUlFkV0pzYVdOSmJuTjBZVzVqWlNncE8xeHVJQ0JwWmlBb0lYQjFZbXhwWTBsdWMzUmhibU5sS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRHRjYmlBZ2ZWeHVJQ0IyWVhJZ1kyOXVjM1J5ZFdOMGIzSWdQU0J3ZFdKc2FXTkpibk4wWVc1alpTNWpiMjV6ZEhKMVkzUnZjanRjYmlBZ2FXWWdLQ0ZqYjI1emRISjFZM1J2Y2lrZ2UxeHVJQ0FnSUhKbGRIVnliaUIxYm1SbFptbHVaV1E3WEc0Z0lIMWNiaUFnY21WMGRYSnVJR052Ym5OMGNuVmpkRzl5TG1ScGMzQnNZWGxPWVcxbElIeDhJR052Ym5OMGNuVmpkRzl5TG01aGJXVWdmSHdnZFc1a1pXWnBibVZrTzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRsZEhNZ2RHaGxJR04xY25KbGJuUWdiM2R1WlhJbmN5QmthWE53YkdGNVRtRnRaU0JtYjNJZ2RYTmxJR2x1SUhkaGNtNXBibWR6TGx4dUlDcGNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb2dRSEpsZEhWeWJpQjdQM04wY21sdVozMGdSR2x6Y0d4aGVTQnVZVzFsSUc5eUlIVnVaR1ZtYVc1bFpGeHVJQ292WEc1bWRXNWpkR2x2YmlCblpYUkRkWEp5Wlc1MFQzZHVaWEpFYVhOd2JHRjVUbUZ0WlNncElIdGNiaUFnZG1GeUlHTjFjbkpsYm5RZ1BTQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpNWpkWEp5Wlc1ME8xeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lHTjFjbkpsYm5RZ0ppWWdaMlYwVG1GdFpTaGpkWEp5Wlc1MEtTQjhmQ0IxYm1SbFptbHVaV1JjYmlBZ0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCWFlYSnVJR2xtSUhSb1pTQmxiR1Z0Wlc1MElHUnZaWE51SjNRZ2FHRjJaU0JoYmlCbGVIQnNhV05wZENCclpYa2dZWE56YVdkdVpXUWdkRzhnYVhRdVhHNGdLaUJVYUdseklHVnNaVzFsYm5RZ2FYTWdhVzRnWVc0Z1lYSnlZWGt1SUZSb1pTQmhjbkpoZVNCamIzVnNaQ0JuY205M0lHRnVaQ0J6YUhKcGJtc2diM0lnWW1WY2JpQXFJSEpsYjNKa1pYSmxaQzRnUVd4c0lHTm9hV3hrY21WdUlIUm9ZWFFnYUdGMlpXNG5kQ0JoYkhKbFlXUjVJR0psWlc0Z2RtRnNhV1JoZEdWa0lHRnlaU0J5WlhGMWFYSmxaQ0IwYjF4dUlDb2dhR0YyWlNCaElGd2lhMlY1WENJZ2NISnZjR1Z5ZEhrZ1lYTnphV2R1WldRZ2RHOGdhWFF1WEc0Z0tseHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnWld4bGJXVnVkQ0JGYkdWdFpXNTBJSFJvWVhRZ2NtVnhkV2x5WlhNZ1lTQnJaWGt1WEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJSEJoY21WdWRGUjVjR1VnWld4bGJXVnVkQ2R6SUhCaGNtVnVkQ2R6SUhSNWNHVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFJYaHdiR2xqYVhSTFpYa29aV3hsYldWdWRDd2djR0Z5Wlc1MFZIbHdaU2tnZTF4dUlDQnBaaUFvWld4bGJXVnVkQzVmYzNSdmNtVXVkbUZzYVdSaGRHVmtJSHg4SUdWc1pXMWxiblF1YTJWNUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCeVpYUjFjbTQ3WEc0Z0lIMWNiaUFnWld4bGJXVnVkQzVmYzNSdmNtVXVkbUZzYVdSaGRHVmtJRDBnZEhKMVpUdGNibHh1SUNCM1lYSnVRVzVrVFc5dWFYUnZja1p2Y2t0bGVWVnpaU2hjYmlBZ0lDQW5SV0ZqYUNCamFHbHNaQ0JwYmlCaGJpQmhjbkpoZVNCdmNpQnBkR1Z5WVhSdmNpQnphRzkxYkdRZ2FHRjJaU0JoSUhWdWFYRjFaU0JjSW10bGVWd2lJSEJ5YjNBdUp5eGNiaUFnSUNCbGJHVnRaVzUwTEZ4dUlDQWdJSEJoY21WdWRGUjVjR1ZjYmlBZ0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCWFlYSnVJR2xtSUhSb1pTQnJaWGtnYVhNZ1ltVnBibWNnWkdWbWFXNWxaQ0JoY3lCaGJpQnZZbXBsWTNRZ2NISnZjR1Z5ZEhrZ1luVjBJR2hoY3lCaGJpQnBibU52Y25KbFkzUmNiaUFxSUhaaGJIVmxMbHh1SUNwY2JpQXFJRUJwYm5SbGNtNWhiRnh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUc1aGJXVWdVSEp2Y0dWeWRIa2dibUZ0WlNCdlppQjBhR1VnYTJWNUxseHVJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHVnNaVzFsYm5RZ1EyOXRjRzl1Wlc1MElIUm9ZWFFnY21WeGRXbHlaWE1nWVNCclpYa3VYRzRnS2lCQWNHRnlZVzBnZXlwOUlIQmhjbVZ1ZEZSNWNHVWdaV3hsYldWdWRDZHpJSEJoY21WdWRDZHpJSFI1Y0dVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUhaaGJHbGtZWFJsVUhKdmNHVnlkSGxMWlhrb2JtRnRaU3dnWld4bGJXVnVkQ3dnY0dGeVpXNTBWSGx3WlNrZ2UxeHVJQ0JwWmlBb0lVNVZUVVZTU1VOZlVGSlBVRVZTVkZsZlVrVkhSVmd1ZEdWemRDaHVZVzFsS1NrZ2UxeHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0IzWVhKdVFXNWtUVzl1YVhSdmNrWnZja3RsZVZWelpTaGNiaUFnSUNBblEyaHBiR1FnYjJKcVpXTjBjeUJ6YUc5MWJHUWdhR0YyWlNCdWIyNHRiblZ0WlhKcFl5QnJaWGx6SUhOdklHOXlaR1Z5YVc1bklHbHpJSEJ5WlhObGNuWmxaQzRuTEZ4dUlDQWdJR1ZzWlcxbGJuUXNYRzRnSUNBZ2NHRnlaVzUwVkhsd1pWeHVJQ0FwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRk5vWVhKbFpDQjNZWEp1YVc1bklHRnVaQ0J0YjI1cGRHOXlhVzVuSUdOdlpHVWdabTl5SUhSb1pTQnJaWGtnZDJGeWJtbHVaM011WEc0Z0tseHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2JXVnpjMkZuWlNCVWFHVWdZbUZ6WlNCM1lYSnVhVzVuSUhSb1lYUWdaMlYwY3lCdmRYUndkWFF1WEc0Z0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnWld4bGJXVnVkQ0JEYjIxd2IyNWxiblFnZEdoaGRDQnlaWEYxYVhKbGN5QmhJR3RsZVM1Y2JpQXFJRUJ3WVhKaGJTQjdLbjBnY0dGeVpXNTBWSGx3WlNCbGJHVnRaVzUwSjNNZ2NHRnlaVzUwSjNNZ2RIbHdaUzVjYmlBcUwxeHVablZ1WTNScGIyNGdkMkZ5YmtGdVpFMXZibWwwYjNKR2IzSkxaWGxWYzJVb2JXVnpjMkZuWlN3Z1pXeGxiV1Z1ZEN3Z2NHRnlaVzUwVkhsd1pTa2dlMXh1SUNCMllYSWdiM2R1WlhKT1lXMWxJRDBnWjJWMFEzVnljbVZ1ZEU5M2JtVnlSR2x6Y0d4aGVVNWhiV1VvS1R0Y2JpQWdkbUZ5SUhCaGNtVnVkRTVoYldVZ1BTQjBlWEJsYjJZZ2NHRnlaVzUwVkhsd1pTQTlQVDBnSjNOMGNtbHVaeWNnUDF4dUlDQWdJSEJoY21WdWRGUjVjR1VnT2lCd1lYSmxiblJVZVhCbExtUnBjM0JzWVhsT1lXMWxJSHg4SUhCaGNtVnVkRlI1Y0dVdWJtRnRaVHRjYmx4dUlDQjJZWElnZFhObFRtRnRaU0E5SUc5M2JtVnlUbUZ0WlNCOGZDQndZWEpsYm5ST1lXMWxPMXh1SUNCMllYSWdiV1Z0YjJsNlpYSWdQU0J2ZDI1bGNraGhjMHRsZVZWelpWZGhjbTVwYm1kYmJXVnpjMkZuWlYwZ2ZId2dLRnh1SUNBZ0lDaHZkMjVsY2toaGMwdGxlVlZ6WlZkaGNtNXBibWRiYldWemMyRm5aVjBnUFNCN2ZTbGNiaUFnS1R0Y2JpQWdhV1lnS0cxbGJXOXBlbVZ5TG1oaGMwOTNibEJ5YjNCbGNuUjVLSFZ6WlU1aGJXVXBLU0I3WEc0Z0lDQWdjbVYwZFhKdU8xeHVJQ0I5WEc0Z0lHMWxiVzlwZW1WeVczVnpaVTVoYldWZElEMGdkSEoxWlR0Y2JseHVJQ0IyWVhJZ2NHRnlaVzUwVDNKUGQyNWxja0ZrWkdWdVpIVnRJRDFjYmlBZ0lDQnZkMjVsY2s1aGJXVWdQeUFvWENJZ1EyaGxZMnNnZEdobElISmxibVJsY2lCdFpYUm9iMlFnYjJZZ1hDSWdLeUJ2ZDI1bGNrNWhiV1VnS3lCY0lpNWNJaWtnT2x4dUlDQWdJSEJoY21WdWRFNWhiV1VnUHlBb1hDSWdRMmhsWTJzZ2RHaGxJRkpsWVdOMExuSmxibVJsY2lCallXeHNJSFZ6YVc1bklEeGNJaUFySUhCaGNtVnVkRTVoYldVZ0t5QmNJajR1WENJcElEcGNiaUFnSUNBbkp6dGNibHh1SUNBdkx5QlZjM1ZoYkd4NUlIUm9aU0JqZFhKeVpXNTBJRzkzYm1WeUlHbHpJSFJvWlNCdlptWmxibVJsY2l3Z1luVjBJR2xtSUdsMElHRmpZMlZ3ZEhNZ1kyaHBiR1J5Wlc0Z1lYTWdZVnh1SUNBdkx5QndjbTl3WlhKMGVTd2dhWFFnYldGNUlHSmxJSFJvWlNCamNtVmhkRzl5SUc5bUlIUm9aU0JqYUdsc1pDQjBhR0YwSjNNZ2NtVnpjRzl1YzJsaWJHVWdabTl5WEc0Z0lDOHZJR0Z6YzJsbmJtbHVaeUJwZENCaElHdGxlUzVjYmlBZ2RtRnlJR05vYVd4a1QzZHVaWEpCWkdSbGJtUjFiU0E5SUNjbk8xeHVJQ0JwWmlBb1pXeGxiV1Z1ZENBbUpseHVJQ0FnSUNBZ1pXeGxiV1Z1ZEM1ZmIzZHVaWElnSmlaY2JpQWdJQ0FnSUdWc1pXMWxiblF1WDI5M2JtVnlJQ0U5UFNCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2k1amRYSnlaVzUwS1NCN1hHNGdJQ0FnTHk4Z1RtRnRaU0J2WmlCMGFHVWdZMjl0Y0c5dVpXNTBJSFJvWVhRZ2IzSnBaMmx1WVd4c2VTQmpjbVZoZEdWa0lIUm9hWE1nWTJocGJHUXVYRzRnSUNBZ2RtRnlJR05vYVd4a1QzZHVaWEpPWVcxbElEMGdaMlYwVG1GdFpTaGxiR1Z0Wlc1MExsOXZkMjVsY2lrN1hHNWNiaUFnSUNCamFHbHNaRTkzYm1WeVFXUmtaVzVrZFcwZ1BTQW9YQ0lnU1hRZ2QyRnpJSEJoYzNObFpDQmhJR05vYVd4a0lHWnliMjBnWENJZ0t5QmphR2xzWkU5M2JtVnlUbUZ0WlNBcklGd2lMbHdpS1R0Y2JpQWdmVnh1WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJR1poYkhObExGeHVJQ0FnSUcxbGMzTmhaMlVnS3lBbkpYTWxjeUJUWldVZ2FIUjBjSE02THk5bVlpNXRaUzl5WldGamRDMTNZWEp1YVc1bkxXdGxlWE1nWm05eUlHMXZjbVVnYVc1bWIzSnRZWFJwYjI0dUp5eGNiaUFnSUNCd1lYSmxiblJQY2s5M2JtVnlRV1JrWlc1a2RXMHNYRzRnSUNBZ1kyaHBiR1JQZDI1bGNrRmtaR1Z1WkhWdFhHNGdJQ2tnT2lCdWRXeHNLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkZibk4xY21VZ2RHaGhkQ0JsZG1WeWVTQmxiR1Z0Wlc1MElHVnBkR2hsY2lCcGN5QndZWE56WldRZ2FXNGdZU0J6ZEdGMGFXTWdiRzlqWVhScGIyNHNJR2x1SUdGdVhHNGdLaUJoY25KaGVTQjNhWFJvSUdGdUlHVjRjR3hwWTJsMElHdGxlWE1nY0hKdmNHVnlkSGtnWkdWbWFXNWxaQ3dnYjNJZ2FXNGdZVzRnYjJKcVpXTjBJR3hwZEdWeVlXeGNiaUFxSUhkcGRHZ2dkbUZzYVdRZ2EyVjVJSEJ5YjNCbGNuUjVMbHh1SUNwY2JpQXFJRUJwYm5SbGNtNWhiRnh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRTV2WkdWOUlHNXZaR1VnVTNSaGRHbGpZV3hzZVNCd1lYTnpaV1FnWTJocGJHUWdiMllnWVc1NUlIUjVjR1V1WEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJSEJoY21WdWRGUjVjR1VnYm05a1pTZHpJSEJoY21WdWRDZHpJSFI1Y0dVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUhaaGJHbGtZWFJsUTJocGJHUkxaWGx6S0c1dlpHVXNJSEJoY21WdWRGUjVjR1VwSUh0Y2JpQWdhV1lnS0VGeWNtRjVMbWx6UVhKeVlYa29ibTlrWlNrcElIdGNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHNXZaR1V1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lIWmhjaUJqYUdsc1pDQTlJRzV2WkdWYmFWMDdYRzRnSUNBZ0lDQnBaaUFvVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0dOb2FXeGtLU2tnZTF4dUlDQWdJQ0FnSUNCMllXeHBaR0YwWlVWNGNHeHBZMmwwUzJWNUtHTm9hV3hrTENCd1lYSmxiblJVZVhCbEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDBnWld4elpTQnBaaUFvVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0c1dlpHVXBLU0I3WEc0Z0lDQWdMeThnVkdocGN5QmxiR1Z0Wlc1MElIZGhjeUJ3WVhOelpXUWdhVzRnWVNCMllXeHBaQ0JzYjJOaGRHbHZiaTVjYmlBZ0lDQnViMlJsTGw5emRHOXlaUzUyWVd4cFpHRjBaV1FnUFNCMGNuVmxPMXh1SUNCOUlHVnNjMlVnYVdZZ0tHNXZaR1VwSUh0Y2JpQWdJQ0IyWVhJZ2FYUmxjbUYwYjNKR2JpQTlJR2RsZEVsMFpYSmhkRzl5Um00b2JtOWtaU2s3WEc0Z0lDQWdMeThnUlc1MGNua2dhWFJsY21GMGIzSnpJSEJ5YjNacFpHVWdhVzF3YkdsamFYUWdhMlY1Y3k1Y2JpQWdJQ0JwWmlBb2FYUmxjbUYwYjNKR2Jpa2dlMXh1SUNBZ0lDQWdhV1lnS0dsMFpYSmhkRzl5Um00Z0lUMDlJRzV2WkdVdVpXNTBjbWxsY3lrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnYVhSbGNtRjBiM0lnUFNCcGRHVnlZWFJ2Y2tadUxtTmhiR3dvYm05a1pTazdYRzRnSUNBZ0lDQWdJSFpoY2lCemRHVndPMXh1SUNBZ0lDQWdJQ0IzYUdsc1pTQW9JU2h6ZEdWd0lEMGdhWFJsY21GMGIzSXVibVY0ZENncEtTNWtiMjVsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0ZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENoemRHVndMblpoYkhWbEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnNhV1JoZEdWRmVIQnNhV05wZEV0bGVTaHpkR1Z3TG5aaGJIVmxMQ0J3WVhKbGJuUlVlWEJsS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQnViMlJsSUQwOVBTQW5iMkpxWldOMEp5a2dlMXh1SUNBZ0lDQWdkbUZ5SUdaeVlXZHRaVzUwSUQwZ1VtVmhZM1JHY21GbmJXVnVkQzVsZUhSeVlXTjBTV1pHY21GbmJXVnVkQ2h1YjJSbEtUdGNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHdGxlU0JwYmlCbWNtRm5iV1Z1ZENrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWm5KaFoyMWxiblF1YUdGelQzZHVVSEp2Y0dWeWRIa29hMlY1S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFpoYkdsa1lYUmxVSEp2Y0dWeWRIbExaWGtvYTJWNUxDQm1jbUZuYldWdWRGdHJaWGxkTENCd1lYSmxiblJVZVhCbEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRUZ6YzJWeWRDQjBhR0YwSUhSb1pTQndjbTl3Y3lCaGNtVWdkbUZzYVdSY2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnWTI5dGNHOXVaVzUwVG1GdFpTQk9ZVzFsSUc5bUlIUm9aU0JqYjIxd2IyNWxiblFnWm05eUlHVnljbTl5SUcxbGMzTmhaMlZ6TGx4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlIQnliM0JVZVhCbGN5Qk5ZWEFnYjJZZ2NISnZjQ0J1WVcxbElIUnZJR0VnVW1WaFkzUlFjbTl3Vkhsd1pWeHVJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSEJ5YjNCelhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiRzlqWVhScGIyNGdaUzVuTGlCY0luQnliM0JjSWl3Z1hDSmpiMjUwWlhoMFhDSXNJRndpWTJocGJHUWdZMjl1ZEdWNGRGd2lYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJqYUdWamExQnliM0JVZVhCbGN5aGpiMjF3YjI1bGJuUk9ZVzFsTENCd2NtOXdWSGx3WlhNc0lIQnliM0J6TENCc2IyTmhkR2x2YmlrZ2UxeHVJQ0JtYjNJZ0tIWmhjaUJ3Y205d1RtRnRaU0JwYmlCd2NtOXdWSGx3WlhNcElIdGNiaUFnSUNCcFppQW9jSEp2Y0ZSNWNHVnpMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JPWVcxbEtTa2dlMXh1SUNBZ0lDQWdkbUZ5SUdWeWNtOXlPMXh1SUNBZ0lDQWdMeThnVUhKdmNDQjBlWEJsSUhaaGJHbGtZWFJwYjI0Z2JXRjVJSFJvY205M0xpQkpiaUJqWVhObElIUm9aWGtnWkc4c0lIZGxJR1J2YmlkMElIZGhiblFnZEc5Y2JpQWdJQ0FnSUM4dklHWmhhV3dnZEdobElISmxibVJsY2lCd2FHRnpaU0IzYUdWeVpTQnBkQ0JrYVdSdUozUWdabUZwYkNCaVpXWnZjbVV1SUZOdklIZGxJR3h2WnlCcGRDNWNiaUFnSUNBZ0lDOHZJRUZtZEdWeUlIUm9aWE5sSUdoaGRtVWdZbVZsYmlCamJHVmhibVZrSUhWd0xDQjNaU2RzYkNCc1pYUWdkR2hsYlNCMGFISnZkeTVjYmlBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDOHZJRlJvYVhNZ2FYTWdhVzUwWlc1MGFXOXVZV3hzZVNCaGJpQnBiblpoY21saGJuUWdkR2hoZENCblpYUnpJR05oZFdkb2RDNGdTWFFuY3lCMGFHVWdjMkZ0WlZ4dUlDQWdJQ0FnSUNBdkx5QmlaV2hoZG1sdmNpQmhjeUIzYVhSb2IzVjBJSFJvYVhNZ2MzUmhkR1Z0Wlc1MElHVjRZMlZ3ZENCM2FYUm9JR0VnWW1WMGRHVnlJRzFsYzNOaFoyVXVYRzRnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJQ0FnZEhsd1pXOW1JSEJ5YjNCVWVYQmxjMXR3Y205d1RtRnRaVjBnUFQwOUlDZG1kVzVqZEdsdmJpY3NYRzRnSUNBZ0lDQWdJQ0FnSnlWek9pQWxjeUIwZVhCbElHQWxjMkFnYVhNZ2FXNTJZV3hwWkRzZ2FYUWdiWFZ6ZENCaVpTQmhJR1oxYm1OMGFXOXVMQ0IxYzNWaGJHeDVJR1p5YjIwZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBMbEJ5YjNCVWVYQmxjeTRuTEZ4dUlDQWdJQ0FnSUNBZ0lHTnZiWEJ2Ym1WdWRFNWhiV1VnZkh3Z0oxSmxZV04wSUdOc1lYTnpKeXhjYmlBZ0lDQWdJQ0FnSUNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsYzF0c2IyTmhkR2x2Ymwwc1hHNGdJQ0FnSUNBZ0lDQWdjSEp2Y0U1aGJXVmNiaUFnSUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoMGVYQmxiMllnY0hKdmNGUjVjR1Z6VzNCeWIzQk9ZVzFsWFNBOVBUMGdKMloxYm1OMGFXOXVKeWtwTzF4dUlDQWdJQ0FnSUNCbGNuSnZjaUE5SUhCeWIzQlVlWEJsYzF0d2NtOXdUbUZ0WlYwb2NISnZjSE1zSUhCeWIzQk9ZVzFsTENCamIyMXdiMjVsYm5ST1lXMWxMQ0JzYjJOaGRHbHZiaWs3WEc0Z0lDQWdJQ0I5SUdOaGRHTm9JQ2hsZUNrZ2UxeHVJQ0FnSUNBZ0lDQmxjbkp2Y2lBOUlHVjRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0dWeWNtOXlJR2x1YzNSaGJtTmxiMllnUlhKeWIzSWdKaVlnSVNobGNuSnZjaTV0WlhOellXZGxJR2x1SUd4dloyZGxaRlI1Y0dWR1lXbHNkWEpsY3lrcElIdGNiaUFnSUNBZ0lDQWdMeThnVDI1c2VTQnRiMjVwZEc5eUlIUm9hWE1nWm1GcGJIVnlaU0J2Ym1ObElHSmxZMkYxYzJVZ2RHaGxjbVVnZEdWdVpITWdkRzhnWW1VZ1lTQnNiM1FnYjJZZ2RHaGxYRzRnSUNBZ0lDQWdJQzh2SUhOaGJXVWdaWEp5YjNJdVhHNGdJQ0FnSUNBZ0lHeHZaMmRsWkZSNWNHVkdZV2xzZFhKbGMxdGxjbkp2Y2k1dFpYTnpZV2RsWFNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUNBZ2RtRnlJR0ZrWkdWdVpIVnRJRDBnWjJWMFJHVmpiR0Z5WVhScGIyNUZjbkp2Y2tGa1pHVnVaSFZ0S0hSb2FYTXBPMXh1SUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aG1ZV3h6WlN3Z0owWmhhV3hsWkNCd2NtOXdWSGx3WlRvZ0pYTWxjeWNzSUdWeWNtOXlMbTFsYzNOaFoyVXNJR0ZrWkdWdVpIVnRLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dWZWeHVYRzUyWVhJZ2QyRnlibVZrVUhKdmNITk5kWFJoZEdsdmJuTWdQU0I3ZlR0Y2JseHVMeW9xWEc0Z0tpQlhZWEp1SUdGaWIzVjBJRzExZEdGMGFXNW5JSEJ5YjNCeklIZG9aVzRnYzJWMGRHbHVaeUJnY0hKdmNFNWhiV1ZnSUc5dUlHQmxiR1Z0Wlc1MFlDNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NISnZjRTVoYldVZ1ZHaGxJSE4wY21sdVp5QnJaWGtnZDJsMGFHbHVJSEJ5YjNCeklIUm9ZWFFnZDJGeklITmxkRnh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJR1ZzWlcxbGJuUmNiaUFxTDF4dVpuVnVZM1JwYjI0Z2QyRnlia1p2Y2xCeWIzQnpUWFYwWVhScGIyNG9jSEp2Y0U1aGJXVXNJR1ZzWlcxbGJuUXBJSHRjYmlBZ2RtRnlJSFI1Y0dVZ1BTQmxiR1Z0Wlc1MExuUjVjR1U3WEc0Z0lIWmhjaUJsYkdWdFpXNTBUbUZ0WlNBOUlIUjVjR1Z2WmlCMGVYQmxJRDA5UFNBbmMzUnlhVzVuSnlBL0lIUjVjR1VnT2lCMGVYQmxMbVJwYzNCc1lYbE9ZVzFsTzF4dUlDQjJZWElnYjNkdVpYSk9ZVzFsSUQwZ1pXeGxiV1Z1ZEM1ZmIzZHVaWElnUDF4dUlDQWdJR1ZzWlcxbGJuUXVYMjkzYm1WeUxtZGxkRkIxWW14cFkwbHVjM1JoYm1ObEtDa3VZMjl1YzNSeWRXTjBiM0l1WkdsemNHeGhlVTVoYldVZ09pQnVkV3hzTzF4dVhHNGdJSFpoY2lCM1lYSnVhVzVuUzJWNUlEMGdjSEp2Y0U1aGJXVWdLeUFuZkNjZ0t5QmxiR1Z0Wlc1MFRtRnRaU0FySUNkOEp5QXJJRzkzYm1WeVRtRnRaVHRjYmlBZ2FXWWdLSGRoY201bFpGQnliM0J6VFhWMFlYUnBiMjV6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSGRoY201cGJtZExaWGtwS1NCN1hHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNGdJSGRoY201bFpGQnliM0J6VFhWMFlYUnBiMjV6VzNkaGNtNXBibWRMWlhsZElEMGdkSEoxWlR0Y2JseHVJQ0IyWVhJZ1pXeGxiV1Z1ZEVsdVptOGdQU0FuSnp0Y2JpQWdhV1lnS0dWc1pXMWxiblJPWVcxbEtTQjdYRzRnSUNBZ1pXeGxiV1Z1ZEVsdVptOGdQU0FuSUR3bklDc2daV3hsYldWdWRFNWhiV1VnS3lBbklDOCtKenRjYmlBZ2ZWeHVJQ0IyWVhJZ2IzZHVaWEpKYm1adklEMGdKeWM3WEc0Z0lHbG1JQ2h2ZDI1bGNrNWhiV1VwSUh0Y2JpQWdJQ0J2ZDI1bGNrbHVabThnUFNBbklGUm9aU0JsYkdWdFpXNTBJSGRoY3lCamNtVmhkR1ZrSUdKNUlDY2dLeUJ2ZDI1bGNrNWhiV1VnS3lBbkxpYzdYRzRnSUgxY2JseHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNCbVlXeHpaU3hjYmlBZ0lDQW5SRzl1WEZ3bmRDQnpaWFFnTG5CeWIzQnpMaVZ6SUc5bUlIUm9aU0JTWldGamRDQmpiMjF3YjI1bGJuUWxjeTRnU1c1emRHVmhaQ3dnYzNCbFkybG1lU0IwYUdVZ0p5QXJYRzRnSUNBZ0oyTnZjbkpsWTNRZ2RtRnNkV1VnZDJobGJpQnBibWwwYVdGc2JIa2dZM0psWVhScGJtY2dkR2hsSUdWc1pXMWxiblFnYjNJZ2RYTmxJQ2NnSzF4dUlDQWdJQ2RTWldGamRDNWpiRzl1WlVWc1pXMWxiblFnZEc4Z2JXRnJaU0JoSUc1bGR5QmxiR1Z0Wlc1MElIZHBkR2dnZFhCa1lYUmxaQ0J3Y205d2N5NGxjeWNzWEc0Z0lDQWdjSEp2Y0U1aGJXVXNYRzRnSUNBZ1pXeGxiV1Z1ZEVsdVptOHNYRzRnSUNBZ2IzZHVaWEpKYm1adlhHNGdJQ2tnT2lCdWRXeHNLVHRjYm4xY2JseHVMeThnU1c1c2FXNWxJRTlpYW1WamRDNXBjeUJ3YjJ4NVptbHNiRnh1Wm5WdVkzUnBiMjRnYVhNb1lTd2dZaWtnZTF4dUlDQnBaaUFvWVNBaFBUMGdZU2tnZTF4dUlDQWdJQzh2SUU1aFRseHVJQ0FnSUhKbGRIVnliaUJpSUNFOVBTQmlPMXh1SUNCOVhHNGdJR2xtSUNoaElEMDlQU0F3SUNZbUlHSWdQVDA5SURBcElIdGNiaUFnSUNBdkx5QXJMVEJjYmlBZ0lDQnlaWFIxY200Z01TQXZJR0VnUFQwOUlERWdMeUJpTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJoSUQwOVBTQmlPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZHBkbVZ1SUdGdUlHVnNaVzFsYm5Rc0lHTm9aV05ySUdsbUlHbDBjeUJ3Y205d2N5Qm9ZWFpsSUdKbFpXNGdiWFYwWVhSbFpDQnphVzVqWlNCbGJHVnRaVzUwWEc0Z0tpQmpjbVZoZEdsdmJpQW9iM0lnZEdobElHeGhjM1FnWTJGc2JDQjBieUIwYUdseklHWjFibU4wYVc5dUtTNGdTVzRnY0dGeWRHbGpkV3hoY2l3Z1kyaGxZMnNnYVdZZ1lXNTVYRzRnS2lCdVpYY2djSEp2Y0hNZ2FHRjJaU0JpWldWdUlHRmtaR1ZrTENCM2FHbGphQ0IzWlNCallXNG5kQ0JrYVhKbFkzUnNlU0JqWVhSamFDQmllU0JrWldacGJtbHVaeUIzWVhKdWFXNW5YRzRnS2lCd2NtOXdaWEowYVdWeklHOXVJSFJvWlNCd2NtOXdjeUJ2WW1wbFkzUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUdWc1pXMWxiblJjYmlBcUwxeHVablZ1WTNScGIyNGdZMmhsWTJ0QmJtUlhZWEp1Um05eVRYVjBZWFJsWkZCeWIzQnpLR1ZzWlcxbGJuUXBJSHRjYmlBZ2FXWWdLQ0ZsYkdWdFpXNTBMbDl6ZEc5eVpTa2dlMXh1SUNBZ0lDOHZJRVZzWlcxbGJuUWdkMkZ6SUdOeVpXRjBaV1FnZFhOcGJtY2dZRzVsZHlCU1pXRmpkRVZzWlcxbGJuUmdJR1JwY21WamRHeDVJRzl5SUhkcGRHaGNiaUFnSUNBdkx5QmdVbVZoWTNSRmJHVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUmdPeUJ6YTJsd0lHMTFkR0YwYVc5dUlHTm9aV05yYVc1blhHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNWNiaUFnZG1GeUlHOXlhV2RwYm1Gc1VISnZjSE1nUFNCbGJHVnRaVzUwTGw5emRHOXlaUzV2Y21sbmFXNWhiRkJ5YjNCek8xeHVJQ0IyWVhJZ2NISnZjSE1nUFNCbGJHVnRaVzUwTG5CeWIzQnpPMXh1WEc0Z0lHWnZjaUFvZG1GeUlIQnliM0JPWVcxbElHbHVJSEJ5YjNCektTQjdYRzRnSUNBZ2FXWWdLSEJ5YjNCekxtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQk9ZVzFsS1NrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0Z2Y21sbmFXNWhiRkJ5YjNCekxtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQk9ZVzFsS1NCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0ZwY3lodmNtbG5hVzVoYkZCeWIzQnpXM0J5YjNCT1lXMWxYU3dnY0hKdmNITmJjSEp2Y0U1aGJXVmRLU2tnZTF4dUlDQWdJQ0FnSUNCM1lYSnVSbTl5VUhKdmNITk5kWFJoZEdsdmJpaHdjbTl3VG1GdFpTd2daV3hsYldWdWRDazdYRzVjYmlBZ0lDQWdJQ0FnTHk4Z1EyOXdlU0J2ZG1WeUlIUm9aU0J1WlhjZ2RtRnNkV1VnYzI4Z2RHaGhkQ0IwYUdVZ2RIZHZJSEJ5YjNCeklHOWlhbVZqZEhNZ2JXRjBZMmdnWVdkaGFXNWNiaUFnSUNBZ0lDQWdiM0pwWjJsdVlXeFFjbTl3YzF0d2NtOXdUbUZ0WlYwZ1BTQndjbTl3YzF0d2NtOXdUbUZ0WlYwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc1Y2JpOHFLbHh1SUNvZ1IybDJaVzRnWVc0Z1pXeGxiV1Z1ZEN3Z2RtRnNhV1JoZEdVZ2RHaGhkQ0JwZEhNZ2NISnZjSE1nWm05c2JHOTNJSFJvWlNCd2NtOXdWSGx3WlhNZ1pHVm1hVzVwZEdsdmJpeGNiaUFxSUhCeWIzWnBaR1ZrSUdKNUlIUm9aU0IwZVhCbExseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1VtVmhZM1JGYkdWdFpXNTBmU0JsYkdWdFpXNTBYRzRnS2k5Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFVISnZjRlI1Y0dWektHVnNaVzFsYm5RcElIdGNiaUFnYVdZZ0tHVnNaVzFsYm5RdWRIbHdaU0E5UFNCdWRXeHNLU0I3WEc0Z0lDQWdMeThnVkdocGN5Qm9ZWE1nWVd4eVpXRmtlU0IzWVhKdVpXUXVJRVJ2YmlkMElIUm9jbTkzTGx4dUlDQWdJSEpsZEhWeWJqdGNiaUFnZlZ4dUlDQXZMeUJGZUhSeVlXTjBJSFJvWlNCamIyMXdiMjVsYm5RZ1kyeGhjM01nWm5KdmJTQjBhR1VnWld4bGJXVnVkQzRnUTI5dWRtVnlkSE1nYzNSeWFXNW5JSFI1Y0dWelhHNGdJQzh2SUhSdklHRWdZMjl0Y0c5emFYUmxJR05zWVhOeklIZG9hV05vSUcxaGVTQm9ZWFpsSUhCeWIzQlVlWEJsY3k1Y2JpQWdMeThnVkU5RVR6b2dWbUZzYVdSaGRHbHVaeUJoSUhOMGNtbHVaeWR6SUhCeWIzQlVlWEJsY3lCcGN5QnViM1FnWkdWamIzVndiR1ZrSUdaeWIyMGdkR2hsWEc0Z0lDOHZJSEpsYm1SbGNtbHVaeUIwWVhKblpYUWdkMmhwWTJnZ2FYTWdjSEp2WW14bGJXRjBhV011WEc0Z0lIWmhjaUJqYjIxd2IyNWxiblJEYkdGemN5QTlJRkpsWVdOMFRtRjBhWFpsUTI5dGNHOXVaVzUwTG1kbGRFTnZiWEJ2Ym1WdWRFTnNZWE56Um05eVJXeGxiV1Z1ZENoY2JpQWdJQ0JsYkdWdFpXNTBYRzRnSUNrN1hHNGdJSFpoY2lCdVlXMWxJRDBnWTI5dGNHOXVaVzUwUTJ4aGMzTXVaR2x6Y0d4aGVVNWhiV1VnZkh3Z1kyOXRjRzl1Wlc1MFEyeGhjM011Ym1GdFpUdGNiaUFnYVdZZ0tHTnZiWEJ2Ym1WdWRFTnNZWE56TG5CeWIzQlVlWEJsY3lrZ2UxeHVJQ0FnSUdOb1pXTnJVSEp2Y0ZSNWNHVnpLRnh1SUNBZ0lDQWdibUZ0WlN4Y2JpQWdJQ0FnSUdOdmJYQnZibVZ1ZEVOc1lYTnpMbkJ5YjNCVWVYQmxjeXhjYmlBZ0lDQWdJR1ZzWlcxbGJuUXVjSEp2Y0hNc1hHNGdJQ0FnSUNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNXpMbkJ5YjNCY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdsbUlDaDBlWEJsYjJZZ1kyOXRjRzl1Wlc1MFEyeGhjM011WjJWMFJHVm1ZWFZzZEZCeWIzQnpJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0JqYjIxd2IyNWxiblJEYkdGemN5NW5aWFJFWldaaGRXeDBVSEp2Y0hNdWFYTlNaV0ZqZEVOc1lYTnpRWEJ3Y205MlpXUXNYRzRnSUNBZ0lDQW5aMlYwUkdWbVlYVnNkRkJ5YjNCeklHbHpJRzl1YkhrZ2RYTmxaQ0J2YmlCamJHRnpjMmxqSUZKbFlXTjBMbU55WldGMFpVTnNZWE56SUNjZ0sxeHVJQ0FnSUNBZ0oyUmxabWx1YVhScGIyNXpMaUJWYzJVZ1lTQnpkR0YwYVdNZ2NISnZjR1Z5ZEhrZ2JtRnRaV1FnWUdSbFptRjFiSFJRY205d2MyQWdhVzV6ZEdWaFpDNG5YRzRnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0I5WEc1OVhHNWNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUldZV3hwWkdGMGIzSWdQU0I3WEc1Y2JpQWdZMmhsWTJ0QmJtUlhZWEp1Um05eVRYVjBZWFJsWkZCeWIzQnpPaUJqYUdWamEwRnVaRmRoY201R2IzSk5kWFJoZEdWa1VISnZjSE1zWEc1Y2JpQWdZM0psWVhSbFJXeGxiV1Z1ZERvZ1puVnVZM1JwYjI0b2RIbHdaU3dnY0hKdmNITXNJR05vYVd4a2NtVnVLU0I3WEc0Z0lDQWdMeThnVjJVZ2QyRnliaUJwYmlCMGFHbHpJR05oYzJVZ1luVjBJR1J2YmlkMElIUm9jbTkzTGlCWFpTQmxlSEJsWTNRZ2RHaGxJR1ZzWlcxbGJuUWdZM0psWVhScGIyNGdkRzljYmlBZ0lDQXZMeUJ6ZFdOalpXVmtJR0Z1WkNCMGFHVnlaU0IzYVd4c0lHeHBhMlZzZVNCaVpTQmxjbkp2Y25NZ2FXNGdjbVZ1WkdWeUxseHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdkSGx3WlNBaFBTQnVkV3hzTEZ4dUlDQWdJQ0FnSjFKbFlXTjBMbU55WldGMFpVVnNaVzFsYm5RNklIUjVjR1VnYzJodmRXeGtJRzV2ZENCaVpTQnVkV3hzSUc5eUlIVnVaR1ZtYVc1bFpDNGdTWFFnYzJodmRXeGtJQ2NnSzF4dUlDQWdJQ0FnSUNBblltVWdZU0J6ZEhKcGJtY2dLR1p2Y2lCRVQwMGdaV3hsYldWdWRITXBJRzl5SUdFZ1VtVmhZM1JEYkdGemN5QW9abTl5SUdOdmJYQnZjMmwwWlNBbklDdGNiaUFnSUNBZ0lDQWdKMk52YlhCdmJtVnVkSE1wTGlkY2JpQWdJQ0FwSURvZ2JuVnNiQ2s3WEc1Y2JpQWdJQ0IyWVhJZ1pXeGxiV1Z1ZENBOUlGSmxZV04wUld4bGJXVnVkQzVqY21WaGRHVkZiR1Z0Wlc1MExtRndjR3g1S0hSb2FYTXNJR0Z5WjNWdFpXNTBjeWs3WEc1Y2JpQWdJQ0F2THlCVWFHVWdjbVZ6ZFd4MElHTmhiaUJpWlNCdWRXeHNhWE5vSUdsbUlHRWdiVzlqYXlCdmNpQmhJR04xYzNSdmJTQm1kVzVqZEdsdmJpQnBjeUIxYzJWa0xseHVJQ0FnSUM4dklGUlBSRTg2SUVSeWIzQWdkR2hwY3lCM2FHVnVJSFJvWlhObElHRnlaU0J1YnlCc2IyNW5aWElnWVd4c2IzZGxaQ0JoY3lCMGFHVWdkSGx3WlNCaGNtZDFiV1Z1ZEM1Y2JpQWdJQ0JwWmlBb1pXeGxiV1Z1ZENBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWld4bGJXVnVkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTWpzZ2FTQThJR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2RtRnNhV1JoZEdWRGFHbHNaRXRsZVhNb1lYSm5kVzFsYm5SelcybGRMQ0IwZVhCbEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMllXeHBaR0YwWlZCeWIzQlVlWEJsY3lobGJHVnRaVzUwS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJsYkdWdFpXNTBPMXh1SUNCOUxGeHVYRzRnSUdOeVpXRjBaVVpoWTNSdmNuazZJR1oxYm1OMGFXOXVLSFI1Y0dVcElIdGNiaUFnSUNCMllYSWdkbUZzYVdSaGRHVmtSbUZqZEc5eWVTQTlJRkpsWVdOMFJXeGxiV1Z1ZEZaaGJHbGtZWFJ2Y2k1amNtVmhkR1ZGYkdWdFpXNTBMbUpwYm1Rb1hHNGdJQ0FnSUNCdWRXeHNMRnh1SUNBZ0lDQWdkSGx3WlZ4dUlDQWdJQ2s3WEc0Z0lDQWdMeThnVEdWbllXTjVJR2h2YjJzZ1ZFOUVUem9nVjJGeWJpQnBaaUIwYUdseklHbHpJR0ZqWTJWemMyVmtYRzRnSUNBZ2RtRnNhV1JoZEdWa1JtRmpkRzl5ZVM1MGVYQmxJRDBnZEhsd1pUdGNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaGNiaUFnSUNBZ0lDQWdJQ0IyWVd4cFpHRjBaV1JHWVdOMGIzSjVMRnh1SUNBZ0lDQWdJQ0FnSUNkMGVYQmxKeXhjYmlBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JsYm5WdFpYSmhZbXhsT2lCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHZGxkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1poYkhObExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDZEdZV04wYjNKNUxuUjVjR1VnYVhNZ1pHVndjbVZqWVhSbFpDNGdRV05qWlhOeklIUm9aU0JqYkdGemN5QmthWEpsWTNSc2VTQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FuWW1WbWIzSmxJSEJoYzNOcGJtY2dhWFFnZEc4Z1kzSmxZWFJsUm1GamRHOXllUzRuWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0hSb2FYTXNJQ2QwZVhCbEp5d2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbE9pQjBlWEJsWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSGx3WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlJR05oZEdOb0lDaDRLU0I3WEc0Z0lDQWdJQ0FnSUM4dklFbEZJSGRwYkd3Z1ptRnBiQ0J2YmlCa1pXWnBibVZRY205d1pYSjBlU0FvWlhNMUxYTm9hVzB2YzJoaGJTQjBiMjhwWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkbUZzYVdSaGRHVmtSbUZqZEc5eWVUdGNiaUFnZlN4Y2JseHVJQ0JqYkc5dVpVVnNaVzFsYm5RNklHWjFibU4wYVc5dUtHVnNaVzFsYm5Rc0lIQnliM0J6TENCamFHbHNaSEpsYmlrZ2UxeHVJQ0FnSUhaaGNpQnVaWGRGYkdWdFpXNTBJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnNiMjVsUld4bGJXVnVkQzVoY0hCc2VTaDBhR2x6TENCaGNtZDFiV1Z1ZEhNcE8xeHVJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXlPeUJwSUR3Z1lYSm5kVzFsYm5SekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0IyWVd4cFpHRjBaVU5vYVd4a1MyVjVjeWhoY21kMWJXVnVkSE5iYVYwc0lHNWxkMFZzWlcxbGJuUXVkSGx3WlNrN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoYkdsa1lYUmxVSEp2Y0ZSNWNHVnpLRzVsZDBWc1pXMWxiblFwTzF4dUlDQWdJSEpsZEhWeWJpQnVaWGRGYkdWdFpXNTBPMXh1SUNCOVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFbXB0eUNvbXBvbmVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZU1hcFwiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxudmFyIGNvbXBvbmVudDtcbi8vIFRoaXMgcmVnaXN0cnkga2VlcHMgdHJhY2sgb2YgdGhlIFJlYWN0IElEcyBvZiB0aGUgY29tcG9uZW50cyB0aGF0IHJlbmRlcmVkIHRvXG4vLyBgbnVsbGAgKGluIHJlYWxpdHkgYSBwbGFjZWhvbGRlciBzdWNoIGFzIGBub3NjcmlwdGApXG52YXIgbnVsbENvbXBvbmVudElEc1JlZ2lzdHJ5ID0ge307XG5cbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50SW5qZWN0aW9uID0ge1xuICBpbmplY3RFbXB0eUNvbXBvbmVudDogZnVuY3Rpb24oZW1wdHlDb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeShlbXB0eUNvbXBvbmVudCk7XG4gIH1cbn07XG5cbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50VHlwZSA9IGZ1bmN0aW9uKCkge307XG5SZWFjdEVtcHR5Q29tcG9uZW50VHlwZS5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIHJ1biB0aGVzZSBtZXRob2RzIGluIHRoZSBjb3JyZWN0IG9yZGVyLCB3ZSBzaG91bGRuJ3RcbiAgLy8gbmVlZCB0aGlzIGNoZWNrLiBXZSdyZSBnb2luZyB0byBhc3N1bWUgaWYgd2UncmUgaGVyZSBpdCBtZWFucyB3ZSByYW5cbiAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgYWxyZWFkeSBzbyB0aGVyZSBpcyBubyBpbnRlcm5hbCBpbnN0YW5jZSAoaXQgZ2V0c1xuICAvLyByZW1vdmVkIGFzIHBhcnQgb2YgdGhlIHVubW91bnRpbmcgcHJvY2VzcykuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuICByZWdpc3Rlck51bGxDb21wb25lbnRJRChpbnRlcm5hbEluc3RhbmNlLl9yb290Tm9kZUlEKTtcbn07XG5SZWFjdEVtcHR5Q29tcG9uZW50VHlwZS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgLy8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNoZWNrLiBTZWUgVE9ETyBpbiBjb21wb25lbnREaWRNb3VudC5cbiAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRlcmVnaXN0ZXJOdWxsQ29tcG9uZW50SUQoaW50ZXJuYWxJbnN0YW5jZS5fcm9vdE5vZGVJRCk7XG59O1xuUmVhY3RFbXB0eUNvbXBvbmVudFR5cGUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGNvbXBvbmVudCxcbiAgICAnVHJ5aW5nIHRvIHJldHVybiBudWxsIGZyb20gYSByZW5kZXIsIGJ1dCBubyBudWxsIHBsYWNlaG9sZGVyIGNvbXBvbmVudCAnICtcbiAgICAnd2FzIGluamVjdGVkLidcbiAgKSA6IGludmFyaWFudChjb21wb25lbnQpKTtcbiAgcmV0dXJuIGNvbXBvbmVudCgpO1xufTtcblxudmFyIGVtcHR5RWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50KFJlYWN0RW1wdHlDb21wb25lbnRUeXBlKTtcblxuLyoqXG4gKiBNYXJrIHRoZSBjb21wb25lbnQgYXMgaGF2aW5nIHJlbmRlcmVkIHRvIG51bGwuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgQ29tcG9uZW50J3MgYF9yb290Tm9kZUlEYC5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJOdWxsQ29tcG9uZW50SUQoaWQpIHtcbiAgbnVsbENvbXBvbmVudElEc1JlZ2lzdHJ5W2lkXSA9IHRydWU7XG59XG5cbi8qKlxuICogVW5tYXJrIHRoZSBjb21wb25lbnQgYXMgaGF2aW5nIHJlbmRlcmVkIHRvIG51bGw6IGl0IHJlbmRlcnMgdG8gc29tZXRoaW5nIG5vdy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBDb21wb25lbnQncyBgX3Jvb3ROb2RlSURgLlxuICovXG5mdW5jdGlvbiBkZXJlZ2lzdGVyTnVsbENvbXBvbmVudElEKGlkKSB7XG4gIGRlbGV0ZSBudWxsQ29tcG9uZW50SURzUmVnaXN0cnlbaWRdO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBDb21wb25lbnQncyBgX3Jvb3ROb2RlSURgLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29tcG9uZW50IGlzIHJlbmRlcmVkIHRvIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGlzTnVsbENvbXBvbmVudElEKGlkKSB7XG4gIHJldHVybiAhIW51bGxDb21wb25lbnRJRHNSZWdpc3RyeVtpZF07XG59XG5cbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0ge1xuICBlbXB0eUVsZW1lbnQ6IGVtcHR5RWxlbWVudCxcbiAgaW5qZWN0aW9uOiBSZWFjdEVtcHR5Q29tcG9uZW50SW5qZWN0aW9uLFxuICBpc051bGxDb21wb25lbnRJRDogaXNOdWxsQ29tcG9uZW50SURcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFbXB0eUNvbXBvbmVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JGYlhCMGVVTnZiWEJ2Ym1WdWRDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhOQzB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblJjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZzWlcxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBTVzV6ZEdGdVkyVk5ZWEJjSWlrN1hHNWNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiblpoY2lCamIyMXdiMjVsYm5RN1hHNHZMeUJVYUdseklISmxaMmx6ZEhKNUlHdGxaWEJ6SUhSeVlXTnJJRzltSUhSb1pTQlNaV0ZqZENCSlJITWdiMllnZEdobElHTnZiWEJ2Ym1WdWRITWdkR2hoZENCeVpXNWtaWEpsWkNCMGIxeHVMeThnWUc1MWJHeGdJQ2hwYmlCeVpXRnNhWFI1SUdFZ2NHeGhZMlZvYjJ4a1pYSWdjM1ZqYUNCaGN5QmdibTl6WTNKcGNIUmdLVnh1ZG1GeUlHNTFiR3hEYjIxd2IyNWxiblJKUkhOU1pXZHBjM1J5ZVNBOUlIdDlPMXh1WEc1MllYSWdVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkRWx1YW1WamRHbHZiaUE5SUh0Y2JpQWdhVzVxWldOMFJXMXdkSGxEYjIxd2IyNWxiblE2SUdaMWJtTjBhVzl1S0dWdGNIUjVRMjl0Y0c5dVpXNTBLU0I3WEc0Z0lDQWdZMjl0Y0c5dVpXNTBJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVaaFkzUnZjbmtvWlcxd2RIbERiMjF3YjI1bGJuUXBPMXh1SUNCOVhHNTlPMXh1WEc1MllYSWdVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkRlI1Y0dVZ1BTQm1kVzVqZEdsdmJpZ3BJSHQ5TzF4dVVtVmhZM1JGYlhCMGVVTnZiWEJ2Ym1WdWRGUjVjR1V1Y0hKdmRHOTBlWEJsTG1OdmJYQnZibVZ1ZEVScFpFMXZkVzUwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQnBiblJsY201aGJFbHVjM1JoYm1ObElEMGdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDNW5aWFFvZEdocGN5azdYRzRnSUM4dklGUlBSRTg2SUUxaGEyVWdjM1Z5WlNCM1pTQnlkVzRnZEdobGMyVWdiV1YwYUc5a2N5QnBiaUIwYUdVZ1kyOXljbVZqZENCdmNtUmxjaXdnZDJVZ2MyaHZkV3hrYmlkMFhHNGdJQzh2SUc1bFpXUWdkR2hwY3lCamFHVmpheTRnVjJVbmNtVWdaMjlwYm1jZ2RHOGdZWE56ZFcxbElHbG1JSGRsSjNKbElHaGxjbVVnYVhRZ2JXVmhibk1nZDJVZ2NtRnVYRzRnSUM4dklHTnZiWEJ2Ym1WdWRGZHBiR3hWYm0xdmRXNTBJR0ZzY21WaFpIa2djMjhnZEdobGNtVWdhWE1nYm04Z2FXNTBaWEp1WVd3Z2FXNXpkR0Z1WTJVZ0tHbDBJR2RsZEhOY2JpQWdMeThnY21WdGIzWmxaQ0JoY3lCd1lYSjBJRzltSUhSb1pTQjFibTF2ZFc1MGFXNW5JSEJ5YjJObGMzTXBMbHh1SUNCcFppQW9JV2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnlaWFIxY200N1hHNGdJSDFjYmlBZ2NtVm5hWE4wWlhKT2RXeHNRMjl0Y0c5dVpXNTBTVVFvYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY205dmRFNXZaR1ZKUkNrN1hHNTlPMXh1VW1WaFkzUkZiWEIwZVVOdmJYQnZibVZ1ZEZSNWNHVXVjSEp2ZEc5MGVYQmxMbU52YlhCdmJtVnVkRmRwYkd4VmJtMXZkVzUwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQnBiblJsY201aGJFbHVjM1JoYm1ObElEMGdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDNW5aWFFvZEdocGN5azdYRzRnSUM4dklGUlBSRTg2SUVkbGRDQnlhV1FnYjJZZ2RHaHBjeUJqYUdWamF5NGdVMlZsSUZSUFJFOGdhVzRnWTI5dGNHOXVaVzUwUkdsa1RXOTFiblF1WEc0Z0lHbG1JQ2doYVc1MFpYSnVZV3hKYm5OMFlXNWpaU2tnZTF4dUlDQWdJSEpsZEhWeWJqdGNiaUFnZlZ4dUlDQmtaWEpsWjJsemRHVnlUblZzYkVOdmJYQnZibVZ1ZEVsRUtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVdVgzSnZiM1JPYjJSbFNVUXBPMXh1ZlR0Y2JsSmxZV04wUlcxd2RIbERiMjF3YjI1bGJuUlVlWEJsTG5CeWIzUnZkSGx3WlM1eVpXNWtaWElnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQmpiMjF3YjI1bGJuUXNYRzRnSUNBZ0oxUnllV2x1WnlCMGJ5QnlaWFIxY200Z2JuVnNiQ0JtY205dElHRWdjbVZ1WkdWeUxDQmlkWFFnYm04Z2JuVnNiQ0J3YkdGalpXaHZiR1JsY2lCamIyMXdiMjVsYm5RZ0p5QXJYRzRnSUNBZ0ozZGhjeUJwYm1wbFkzUmxaQzRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvWTI5dGNHOXVaVzUwS1NrN1hHNGdJSEpsZEhWeWJpQmpiMjF3YjI1bGJuUW9LVHRjYm4wN1hHNWNiblpoY2lCbGJYQjBlVVZzWlcxbGJuUWdQU0JTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2hTWldGamRFVnRjSFI1UTI5dGNHOXVaVzUwVkhsd1pTazdYRzVjYmk4cUtseHVJQ29nVFdGeWF5QjBhR1VnWTI5dGNHOXVaVzUwSUdGeklHaGhkbWx1WnlCeVpXNWtaWEpsWkNCMGJ5QnVkV3hzTGx4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRU52YlhCdmJtVnVkQ2R6SUdCZmNtOXZkRTV2WkdWSlJHQXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlISmxaMmx6ZEdWeVRuVnNiRU52YlhCdmJtVnVkRWxFS0dsa0tTQjdYRzRnSUc1MWJHeERiMjF3YjI1bGJuUkpSSE5TWldkcGMzUnllVnRwWkYwZ1BTQjBjblZsTzF4dWZWeHVYRzR2S2lwY2JpQXFJRlZ1YldGeWF5QjBhR1VnWTI5dGNHOXVaVzUwSUdGeklHaGhkbWx1WnlCeVpXNWtaWEpsWkNCMGJ5QnVkV3hzT2lCcGRDQnlaVzVrWlhKeklIUnZJSE52YldWMGFHbHVaeUJ1YjNjdVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnUTI5dGNHOXVaVzUwSjNNZ1lGOXliMjkwVG05a1pVbEVZQzVjYmlBcUwxeHVablZ1WTNScGIyNGdaR1Z5WldkcGMzUmxjazUxYkd4RGIyMXdiMjVsYm5SSlJDaHBaQ2tnZTF4dUlDQmtaV3hsZEdVZ2JuVnNiRU52YlhCdmJtVnVkRWxFYzFKbFoybHpkSEo1VzJsa1hUdGNibjFjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1EyOXRjRzl1Wlc1MEozTWdZRjl5YjI5MFRtOWtaVWxFWUM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlJRlJ5ZFdVZ2FXWWdkR2hsSUdOdmJYQnZibVZ1ZENCcGN5QnlaVzVrWlhKbFpDQjBieUJ1ZFd4c0xseHVJQ292WEc1bWRXNWpkR2x2YmlCcGMwNTFiR3hEYjIxd2IyNWxiblJKUkNocFpDa2dlMXh1SUNCeVpYUjFjbTRnSVNGdWRXeHNRMjl0Y0c5dVpXNTBTVVJ6VW1WbmFYTjBjbmxiYVdSZE8xeHVmVnh1WEc1MllYSWdVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkQ0E5SUh0Y2JpQWdaVzF3ZEhsRmJHVnRaVzUwT2lCbGJYQjBlVVZzWlcxbGJuUXNYRzRnSUdsdWFtVmpkR2x2YmpvZ1VtVmhZM1JGYlhCMGVVTnZiWEJ2Ym1WdWRFbHVhbVZqZEdsdmJpeGNiaUFnYVhOT2RXeHNRMjl0Y0c5dVpXNTBTVVE2SUdselRuVnNiRU52YlhCdmJtVnVkRWxFWEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblE3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFcnJvclV0aWxzXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgUmVhY3RFcnJvclV0aWxzID0ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGd1YXJkZWQgdmVyc2lvbiBvZiBhIGZ1bmN0aW9uLiBUaGlzIGlzIHN1cHBvc2VkIHRvIG1ha2UgZGVidWdnaW5nXG4gICAqIG9mIGV2ZW50IGhhbmRsZXJzIGVhc2llci4gVG8gYWlkIGRlYnVnZ2luZyB3aXRoIHRoZSBicm93c2VyJ3MgZGVidWdnZXIsXG4gICAqIHRoaXMgY3VycmVudGx5IHNpbXBseSByZXR1cm5zIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuYyBGdW5jdGlvbiB0byBiZSBleGVjdXRlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZ3VhcmRcbiAgICogQHJldHVybiB7ZnVuY3Rpb259XG4gICAqL1xuICBndWFyZDogZnVuY3Rpb24oZnVuYywgbmFtZSkge1xuICAgIHJldHVybiBmdW5jO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXJyb3JVdGlscztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEV2ZW50RW1pdHRlck1peGluXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpbkh1YlwiKTtcblxuZnVuY3Rpb24gcnVuRXZlbnRRdWV1ZUluQmF0Y2goZXZlbnRzKSB7XG4gIEV2ZW50UGx1Z2luSHViLmVucXVldWVFdmVudHMoZXZlbnRzKTtcbiAgRXZlbnRQbHVnaW5IdWIucHJvY2Vzc0V2ZW50UXVldWUoKTtcbn1cblxudmFyIFJlYWN0RXZlbnRFbWl0dGVyTWl4aW4gPSB7XG5cbiAgLyoqXG4gICAqIFN0cmVhbXMgYSBmaXJlZCB0b3AtbGV2ZWwgZXZlbnQgdG8gYEV2ZW50UGx1Z2luSHViYCB3aGVyZSBwbHVnaW5zIGhhdmUgdGhlXG4gICAqIG9wcG9ydHVuaXR5IHRvIGNyZWF0ZSBgUmVhY3RFdmVudGBzIHRvIGJlIGRpc3BhdGNoZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBlbnZpcm9ubWVudCBldmVudC5cbiAgICovXG4gIGhhbmRsZVRvcExldmVsOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIGV2ZW50cyA9IEV2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHMoXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICk7XG5cbiAgICBydW5FdmVudFF1ZXVlSW5CYXRjaChldmVudHMpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXZlbnRFbWl0dGVyTWl4aW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFdmVudExpc3RlbmVyXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50TGlzdGVuZXIgPSByZXF1aXJlKFwiLi9FdmVudExpc3RlbmVyXCIpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzXCIpO1xudmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKFwiLi9SZWFjdE1vdW50XCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZ2V0RXZlbnRUYXJnZXQgPSByZXF1aXJlKFwiLi9nZXRFdmVudFRhcmdldFwiKTtcbnZhciBnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbiA9IHJlcXVpcmUoXCIuL2dldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uXCIpO1xuXG4vKipcbiAqIEZpbmRzIHRoZSBwYXJlbnQgUmVhY3QgY29tcG9uZW50IG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0geyp9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FdmVudFRhcmdldH0gUGFyZW50IGNvbnRhaW5lciwgb3IgYG51bGxgIGlmIHRoZSBzcGVjaWZpZWQgbm9kZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgbmVzdGVkLlxuICovXG5mdW5jdGlvbiBmaW5kUGFyZW50KG5vZGUpIHtcbiAgLy8gVE9ETzogSXQgbWF5IGJlIGEgZ29vZCBpZGVhIHRvIGNhY2hlIHRoaXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBET01cbiAgLy8gdHJhdmVyc2FsLCBidXQgY2FjaGluZyBpcyBkaWZmaWN1bHQgdG8gZG8gY29ycmVjdGx5IHdpdGhvdXQgdXNpbmcgYVxuICAvLyBtdXRhdGlvbiBvYnNlcnZlciB0byBsaXN0ZW4gZm9yIGFsbCBET00gY2hhbmdlcy5cbiAgdmFyIG5vZGVJRCA9IFJlYWN0TW91bnQuZ2V0SUQobm9kZSk7XG4gIHZhciByb290SUQgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5nZXRSZWFjdFJvb3RJREZyb21Ob2RlSUQobm9kZUlEKTtcbiAgdmFyIGNvbnRhaW5lciA9IFJlYWN0TW91bnQuZmluZFJlYWN0Q29udGFpbmVyRm9ySUQocm9vdElEKTtcbiAgdmFyIHBhcmVudCA9IFJlYWN0TW91bnQuZ2V0Rmlyc3RSZWFjdERPTShjb250YWluZXIpO1xuICByZXR1cm4gcGFyZW50O1xufVxuXG4vLyBVc2VkIHRvIHN0b3JlIGFuY2VzdG9yIGhpZXJhcmNoeSBpbiB0b3AgbGV2ZWwgY2FsbGJhY2tcbmZ1bmN0aW9uIFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHRoaXMudG9wTGV2ZWxUeXBlID0gdG9wTGV2ZWxUeXBlO1xuICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gIHRoaXMuYW5jZXN0b3JzID0gW107XG59XG5hc3NpZ24oVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nLnByb3RvdHlwZSwge1xuICBkZXN0cnVjdG9yOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRvcExldmVsVHlwZSA9IG51bGw7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG51bGw7XG4gICAgdGhpcy5hbmNlc3RvcnMubGVuZ3RoID0gMDtcbiAgfVxufSk7XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oXG4gIFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZyxcbiAgUG9vbGVkQ2xhc3MudHdvQXJndW1lbnRQb29sZXJcbik7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvcExldmVsSW1wbChib29rS2VlcGluZykge1xuICB2YXIgdG9wTGV2ZWxUYXJnZXQgPSBSZWFjdE1vdW50LmdldEZpcnN0UmVhY3RET00oXG4gICAgZ2V0RXZlbnRUYXJnZXQoYm9va0tlZXBpbmcubmF0aXZlRXZlbnQpXG4gICkgfHwgd2luZG93O1xuXG4gIC8vIExvb3AgdGhyb3VnaCB0aGUgaGllcmFyY2h5LCBpbiBjYXNlIHRoZXJlJ3MgYW55IG5lc3RlZCBjb21wb25lbnRzLlxuICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHdlIGJ1aWxkIHRoZSBhcnJheSBvZiBhbmNlc3RvcnMgYmVmb3JlIGNhbGxpbmcgYW55XG4gIC8vIGV2ZW50IGhhbmRsZXJzLCBiZWNhdXNlIGV2ZW50IGhhbmRsZXJzIGNhbiBtb2RpZnkgdGhlIERPTSwgbGVhZGluZyB0b1xuICAvLyBpbmNvbnNpc3RlbmNpZXMgd2l0aCBSZWFjdE1vdW50J3Mgbm9kZSBjYWNoZS4gU2VlICMxMTA1LlxuICB2YXIgYW5jZXN0b3IgPSB0b3BMZXZlbFRhcmdldDtcbiAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgYm9va0tlZXBpbmcuYW5jZXN0b3JzLnB1c2goYW5jZXN0b3IpO1xuICAgIGFuY2VzdG9yID0gZmluZFBhcmVudChhbmNlc3Rvcik7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGJvb2tLZWVwaW5nLmFuY2VzdG9ycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB0b3BMZXZlbFRhcmdldCA9IGJvb2tLZWVwaW5nLmFuY2VzdG9yc1tpXTtcbiAgICB2YXIgdG9wTGV2ZWxUYXJnZXRJRCA9IFJlYWN0TW91bnQuZ2V0SUQodG9wTGV2ZWxUYXJnZXQpIHx8ICcnO1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5faGFuZGxlVG9wTGV2ZWwoXG4gICAgICBib29rS2VlcGluZy50b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBib29rS2VlcGluZy5uYXRpdmVFdmVudFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2Nyb2xsVmFsdWVNb25pdG9yKGNiKSB7XG4gIHZhciBzY3JvbGxQb3NpdGlvbiA9IGdldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uKHdpbmRvdyk7XG4gIGNiKHNjcm9sbFBvc2l0aW9uKTtcbn1cblxudmFyIFJlYWN0RXZlbnRMaXN0ZW5lciA9IHtcbiAgX2VuYWJsZWQ6IHRydWUsXG4gIF9oYW5kbGVUb3BMZXZlbDogbnVsbCxcblxuICBXSU5ET1dfSEFORExFOiBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gPyB3aW5kb3cgOiBudWxsLFxuXG4gIHNldEhhbmRsZVRvcExldmVsOiBmdW5jdGlvbihoYW5kbGVUb3BMZXZlbCkge1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5faGFuZGxlVG9wTGV2ZWwgPSBoYW5kbGVUb3BMZXZlbDtcbiAgfSxcblxuICBzZXRFbmFibGVkOiBmdW5jdGlvbihlbmFibGVkKSB7XG4gICAgUmVhY3RFdmVudExpc3RlbmVyLl9lbmFibGVkID0gISFlbmFibGVkO1xuICB9LFxuXG4gIGlzRW5hYmxlZDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJlYWN0RXZlbnRMaXN0ZW5lci5fZW5hYmxlZDtcbiAgfSxcblxuXG4gIC8qKlxuICAgKiBUcmFwcyB0b3AtbGV2ZWwgZXZlbnRzIGJ5IHVzaW5nIGV2ZW50IGJ1YmJsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoYW5kbGVyQmFzZU5hbWUgRXZlbnQgbmFtZSAoZS5nLiBcImNsaWNrXCIpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gaGFuZGxlIEVsZW1lbnQgb24gd2hpY2ggdG8gYXR0YWNoIGxpc3RlbmVyLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IEFuIG9iamVjdCB3aXRoIGEgcmVtb3ZlIGZ1bmN0aW9uIHdoaWNoIHdpbGwgZm9yY2VmdWxseVxuICAgKiAgICAgICAgICAgICAgICAgIHJlbW92ZSB0aGUgbGlzdGVuZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJhcEJ1YmJsZWRFdmVudDogZnVuY3Rpb24odG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHZhciBlbGVtZW50ID0gaGFuZGxlO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBFdmVudExpc3RlbmVyLmxpc3RlbihcbiAgICAgIGVsZW1lbnQsXG4gICAgICBoYW5kbGVyQmFzZU5hbWUsXG4gICAgICBSZWFjdEV2ZW50TGlzdGVuZXIuZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsIHRvcExldmVsVHlwZSlcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmFwcyBhIHRvcC1sZXZlbCBldmVudCBieSB1c2luZyBldmVudCBjYXB0dXJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGhhbmRsZXJCYXNlTmFtZSBFdmVudCBuYW1lIChlLmcuIFwiY2xpY2tcIikuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBoYW5kbGUgRWxlbWVudCBvbiB3aGljaCB0byBhdHRhY2ggbGlzdGVuZXIuXG4gICAqIEByZXR1cm4ge29iamVjdH0gQW4gb2JqZWN0IHdpdGggYSByZW1vdmUgZnVuY3Rpb24gd2hpY2ggd2lsbCBmb3JjZWZ1bGx5XG4gICAqICAgICAgICAgICAgICAgICAgcmVtb3ZlIHRoZSBsaXN0ZW5lci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB0cmFwQ2FwdHVyZWRFdmVudDogZnVuY3Rpb24odG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHZhciBlbGVtZW50ID0gaGFuZGxlO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBFdmVudExpc3RlbmVyLmNhcHR1cmUoXG4gICAgICBlbGVtZW50LFxuICAgICAgaGFuZGxlckJhc2VOYW1lLFxuICAgICAgUmVhY3RFdmVudExpc3RlbmVyLmRpc3BhdGNoRXZlbnQuYmluZChudWxsLCB0b3BMZXZlbFR5cGUpXG4gICAgKTtcbiAgfSxcblxuICBtb25pdG9yU2Nyb2xsVmFsdWU6IGZ1bmN0aW9uKHJlZnJlc2gpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBzY3JvbGxWYWx1ZU1vbml0b3IuYmluZChudWxsLCByZWZyZXNoKTtcbiAgICBFdmVudExpc3RlbmVyLmxpc3Rlbih3aW5kb3csICdzY3JvbGwnLCBjYWxsYmFjayk7XG4gIH0sXG5cbiAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24odG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICAgIGlmICghUmVhY3RFdmVudExpc3RlbmVyLl9lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJvb2tLZWVwaW5nID0gVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nLmdldFBvb2xlZChcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgLy8gRXZlbnQgcXVldWUgYmVpbmcgcHJvY2Vzc2VkIGluIHRoZSBzYW1lIGN5Y2xlIGFsbG93c1xuICAgICAgLy8gYHByZXZlbnREZWZhdWx0YC5cbiAgICAgIFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBkYXRlcyhoYW5kbGVUb3BMZXZlbEltcGwsIGJvb2tLZWVwaW5nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nLnJlbGVhc2UoYm9va0tlZXBpbmcpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEV2ZW50TGlzdGVuZXI7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RnJhZ21lbnRcbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vKipcbiAqIFdlIHVzZWQgdG8gYWxsb3cga2V5ZWQgb2JqZWN0cyB0byBzZXJ2ZSBhcyBhIGNvbGxlY3Rpb24gb2YgUmVhY3RFbGVtZW50cyxcbiAqIG9yIG5lc3RlZCBzZXRzLiBUaGlzIGFsbG93ZWQgdXMgYSB3YXkgdG8gZXhwbGljaXRseSBrZXkgYSBzZXQgYSBmcmFnbWVudCBvZlxuICogY29tcG9uZW50cy4gVGhpcyBpcyBub3cgYmVpbmcgcmVwbGFjZWQgd2l0aCBhbiBvcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuXG4gKiBUaGUgdXBncmFkZSBwYXRoIGlzIHRvIGNhbGwgUmVhY3QuYWRkb25zLmNyZWF0ZUZyYWdtZW50KHsga2V5OiB2YWx1ZSB9KSB0b1xuICogY3JlYXRlIGEga2V5ZWQgZnJhZ21lbnQuIFRoZSByZXN1bHRpbmcgZGF0YSBzdHJ1Y3R1cmUgaXMgb3BhcXVlLCBmb3Igbm93LlxuICovXG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgdmFyIGZyYWdtZW50S2V5ID0gJ19yZWFjdEZyYWdtZW50JztcbiAgdmFyIGRpZFdhcm5LZXkgPSAnX3JlYWN0RGlkV2Fybic7XG4gIHZhciBjYW5XYXJuRm9yUmVhY3RGcmFnbWVudCA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgLy8gRmVhdHVyZSB0ZXN0LiBEb24ndCBldmVuIHRyeSB0byBpc3N1ZSB0aGlzIHdhcm5pbmcgaWYgd2UgY2FuJ3QgdXNlXG4gICAgLy8gZW51bWVyYWJsZTogZmFsc2UuXG5cbiAgICB2YXIgZHVtbXkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICB7fSxcbiAgICAgIGZyYWdtZW50S2V5LFxuICAgICAge2VudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZX1cbiAgICApO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAge30sXG4gICAgICAna2V5JyxcbiAgICAgIHtlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGR1bW15fVxuICAgICk7XG5cbiAgICBjYW5XYXJuRm9yUmVhY3RGcmFnbWVudCA9IHRydWU7XG4gIH0gY2F0Y2ggKHgpIHsgfVxuXG4gIHZhciBwcm94eVByb3BlcnR5QWNjZXNzV2l0aFdhcm5pbmcgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIHRoaXNbZGlkV2FybktleV0sXG4gICAgICAgICAgJ0EgUmVhY3RGcmFnbWVudCBpcyBhbiBvcGFxdWUgdHlwZS4gQWNjZXNzaW5nIGFueSBvZiBpdHMgJyArXG4gICAgICAgICAgJ3Byb3BlcnRpZXMgaXMgZGVwcmVjYXRlZC4gUGFzcyBpdCB0byBvbmUgb2YgdGhlIFJlYWN0LkNoaWxkcmVuICcgK1xuICAgICAgICAgICdoZWxwZXJzLidcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICB0aGlzW2RpZFdhcm5LZXldID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXNbZnJhZ21lbnRLZXldW2tleV07XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICB0aGlzW2RpZFdhcm5LZXldLFxuICAgICAgICAgICdBIFJlYWN0RnJhZ21lbnQgaXMgYW4gaW1tdXRhYmxlIG9wYXF1ZSB0eXBlLiBNdXRhdGluZyBpdHMgJyArXG4gICAgICAgICAgJ3Byb3BlcnRpZXMgaXMgZGVwcmVjYXRlZC4nXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgdGhpc1tkaWRXYXJuS2V5XSA9IHRydWU7XG4gICAgICAgIHRoaXNbZnJhZ21lbnRLZXldW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICB2YXIgaXNzdWVkV2FybmluZ3MgPSB7fTtcblxuICB2YXIgZGlkV2FybkZvckZyYWdtZW50ID0gZnVuY3Rpb24oZnJhZ21lbnQpIHtcbiAgICAvLyBXZSB1c2UgdGhlIGtleXMgYW5kIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBhcyBhIGhldXJpc3RpYyB0byBkZWR1cGUgdGhlXG4gICAgLy8gd2FybmluZyB0byBhdm9pZCBzcGFtbWluZyB0b28gbXVjaC5cbiAgICB2YXIgZnJhZ21lbnRDYWNoZUtleSA9ICcnO1xuICAgIGZvciAodmFyIGtleSBpbiBmcmFnbWVudCkge1xuICAgICAgZnJhZ21lbnRDYWNoZUtleSArPSBrZXkgKyAnOicgKyAodHlwZW9mIGZyYWdtZW50W2tleV0pICsgJywnO1xuICAgIH1cbiAgICB2YXIgYWxyZWFkeVdhcm5lZE9uY2UgPSAhIWlzc3VlZFdhcm5pbmdzW2ZyYWdtZW50Q2FjaGVLZXldO1xuICAgIGlzc3VlZFdhcm5pbmdzW2ZyYWdtZW50Q2FjaGVLZXldID0gdHJ1ZTtcbiAgICByZXR1cm4gYWxyZWFkeVdhcm5lZE9uY2U7XG4gIH07XG59XG5cbnZhciBSZWFjdEZyYWdtZW50ID0ge1xuICAvLyBXcmFwIGEga2V5ZWQgb2JqZWN0IGluIGFuIG9wYXF1ZSBwcm94eSB0aGF0IHdhcm5zIHlvdSBpZiB5b3UgYWNjZXNzIGFueVxuICAvLyBvZiBpdHMgcHJvcGVydGllcy5cbiAgY3JlYXRlOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgIW9iamVjdCB8fCBBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgJ1JlYWN0LmFkZG9ucy5jcmVhdGVGcmFnbWVudCBvbmx5IGFjY2VwdHMgYSBzaW5nbGUgb2JqZWN0LicsXG4gICAgICAgICAgb2JqZWN0XG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICAgIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQob2JqZWN0KSkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnUmVhY3QuYWRkb25zLmNyZWF0ZUZyYWdtZW50IGRvZXMgbm90IGFjY2VwdCBhIFJlYWN0RWxlbWVudCAnICtcbiAgICAgICAgICAnd2l0aG91dCBhIHdyYXBwZXIgb2JqZWN0LidcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuICAgICAgaWYgKGNhbldhcm5Gb3JSZWFjdEZyYWdtZW50KSB7XG4gICAgICAgIHZhciBwcm94eSA9IHt9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIGZyYWdtZW50S2V5LCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IG9iamVjdFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBkaWRXYXJuS2V5LCB7XG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgcHJveHlQcm9wZXJ0eUFjY2Vzc1dpdGhXYXJuaW5nKHByb3h5LCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyhwcm94eSk7XG4gICAgICAgIHJldHVybiBwcm94eTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSxcbiAgLy8gRXh0cmFjdCB0aGUgb3JpZ2luYWwga2V5ZWQgb2JqZWN0IGZyb20gdGhlIGZyYWdtZW50IG9wYXF1ZSB0eXBlLiBXYXJuIGlmXG4gIC8vIGEgcGxhaW4gb2JqZWN0IGlzIHBhc3NlZCBoZXJlLlxuICBleHRyYWN0OiBmdW5jdGlvbihmcmFnbWVudCkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIGlmIChjYW5XYXJuRm9yUmVhY3RGcmFnbWVudCkge1xuICAgICAgICBpZiAoIWZyYWdtZW50W2ZyYWdtZW50S2V5XSkge1xuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgZGlkV2FybkZvckZyYWdtZW50KGZyYWdtZW50KSxcbiAgICAgICAgICAgICdBbnkgdXNlIG9mIGEga2V5ZWQgb2JqZWN0IHNob3VsZCBiZSB3cmFwcGVkIGluICcgK1xuICAgICAgICAgICAgJ1JlYWN0LmFkZG9ucy5jcmVhdGVGcmFnbWVudChvYmplY3QpIGJlZm9yZSBiZWluZyBwYXNzZWQgYXMgYSAnICtcbiAgICAgICAgICAgICdjaGlsZC4nXG4gICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgIHJldHVybiBmcmFnbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnJhZ21lbnRbZnJhZ21lbnRLZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH0sXG4gIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBmcmFnbWVudCBhbmQgaWYgc28sIGV4dHJhY3QgdGhlIGtleWVkIG9iamVjdC4gSWYgaXRcbiAgLy8gaXMgYSBmcmFnbWVudC1saWtlIG9iamVjdCwgd2FybiB0aGF0IGl0IHNob3VsZCBiZSB3cmFwcGVkLiBJZ25vcmUgaWYgd2VcbiAgLy8gY2FuJ3QgZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBvYmplY3QgdGhpcyBpcy5cbiAgZXh0cmFjdElmRnJhZ21lbnQ6IGZ1bmN0aW9uKGZyYWdtZW50KSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgaWYgKGNhbldhcm5Gb3JSZWFjdEZyYWdtZW50KSB7XG4gICAgICAgIC8vIElmIGl0IGlzIHRoZSBvcGFxdWUgdHlwZSwgcmV0dXJuIHRoZSBrZXllZCBvYmplY3QuXG4gICAgICAgIGlmIChmcmFnbWVudFtmcmFnbWVudEtleV0pIHtcbiAgICAgICAgICByZXR1cm4gZnJhZ21lbnRbZnJhZ21lbnRLZXldO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSwgY2hlY2sgZWFjaCBwcm9wZXJ0eSBpZiBpdCBoYXMgYW4gZWxlbWVudCwgaWYgaXQgZG9lc1xuICAgICAgICAvLyBpdCBpcyBwcm9iYWJseSBtZWFudCBhcyBhIGZyYWdtZW50LCBzbyB3ZSBjYW4gd2FybiBlYXJseS4gRGVmZXIsXG4gICAgICAgIC8vIHRoZSB3YXJuaW5nIHRvIGV4dHJhY3QuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBmcmFnbWVudCkge1xuICAgICAgICAgIGlmIChmcmFnbWVudC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICAgICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChmcmFnbWVudFtrZXldKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtlIGEgZnJhZ21lbnQgb2JqZWN0LCB3ZSBzaG91bGQgcHJvdmlkZSBhblxuICAgICAgICAgICAgLy8gZWFybHkgd2FybmluZy5cbiAgICAgICAgICAgIHJldHVybiBSZWFjdEZyYWdtZW50LmV4dHJhY3QoZnJhZ21lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RGcmFnbWVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JHY21GbmJXVnVkQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2Jpb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElGSmxZV04wUm5KaFoyMWxiblJjYmlvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUZKbFlXTjBSV3hsYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSV3hsYldWdWRGd2lLVHRjYmx4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzR2S2lwY2JpQXFJRmRsSUhWelpXUWdkRzhnWVd4c2IzY2dhMlY1WldRZ2IySnFaV04wY3lCMGJ5QnpaWEoyWlNCaGN5QmhJR052Ykd4bFkzUnBiMjRnYjJZZ1VtVmhZM1JGYkdWdFpXNTBjeXhjYmlBcUlHOXlJRzVsYzNSbFpDQnpaWFJ6TGlCVWFHbHpJR0ZzYkc5M1pXUWdkWE1nWVNCM1lYa2dkRzhnWlhod2JHbGphWFJzZVNCclpYa2dZU0J6WlhRZ1lTQm1jbUZuYldWdWRDQnZabHh1SUNvZ1kyOXRjRzl1Wlc1MGN5NGdWR2hwY3lCcGN5QnViM2NnWW1WcGJtY2djbVZ3YkdGalpXUWdkMmwwYUNCaGJpQnZjR0Z4ZFdVZ1pHRjBZU0J6ZEhKMVkzUjFjbVV1WEc0Z0tpQlVhR1VnZFhCbmNtRmtaU0J3WVhSb0lHbHpJSFJ2SUdOaGJHd2dVbVZoWTNRdVlXUmtiMjV6TG1OeVpXRjBaVVp5WVdkdFpXNTBLSHNnYTJWNU9pQjJZV3gxWlNCOUtTQjBiMXh1SUNvZ1kzSmxZWFJsSUdFZ2EyVjVaV1FnWm5KaFoyMWxiblF1SUZSb1pTQnlaWE4xYkhScGJtY2daR0YwWVNCemRISjFZM1IxY21VZ2FYTWdiM0JoY1hWbExDQm1iM0lnYm05M0xseHVJQ292WEc1Y2JtbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnZG1GeUlHWnlZV2R0Wlc1MFMyVjVJRDBnSjE5eVpXRmpkRVp5WVdkdFpXNTBKenRjYmlBZ2RtRnlJR1JwWkZkaGNtNUxaWGtnUFNBblgzSmxZV04wUkdsa1YyRnliaWM3WEc0Z0lIWmhjaUJqWVc1WFlYSnVSbTl5VW1WaFkzUkdjbUZuYldWdWRDQTlJR1poYkhObE8xeHVYRzRnSUhSeWVTQjdYRzRnSUNBZ0x5OGdSbVZoZEhWeVpTQjBaWE4wTGlCRWIyNG5kQ0JsZG1WdUlIUnllU0IwYnlCcGMzTjFaU0IwYUdseklIZGhjbTVwYm1jZ2FXWWdkMlVnWTJGdUozUWdkWE5sWEc0Z0lDQWdMeThnWlc1MWJXVnlZV0pzWlRvZ1ptRnNjMlV1WEc1Y2JpQWdJQ0IyWVhJZ1pIVnRiWGtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlBeE8xeHVJQ0FnSUgwN1hHNWNiaUFnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29YRzRnSUNBZ0lDQjdmU3hjYmlBZ0lDQWdJR1p5WVdkdFpXNTBTMlY1TEZ4dUlDQWdJQ0FnZTJWdWRXMWxjbUZpYkdVNklHWmhiSE5sTENCMllXeDFaVG9nZEhKMVpYMWNiaUFnSUNBcE8xeHVYRzRnSUNBZ1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLRnh1SUNBZ0lDQWdlMzBzWEc0Z0lDQWdJQ0FuYTJWNUp5eGNiaUFnSUNBZ0lIdGxiblZ0WlhKaFlteGxPaUIwY25WbExDQm5aWFE2SUdSMWJXMTVmVnh1SUNBZ0lDazdYRzVjYmlBZ0lDQmpZVzVYWVhKdVJtOXlVbVZoWTNSR2NtRm5iV1Z1ZENBOUlIUnlkV1U3WEc0Z0lIMGdZMkYwWTJnZ0tIZ3BJSHNnZlZ4dVhHNGdJSFpoY2lCd2NtOTRlVkJ5YjNCbGNuUjVRV05qWlhOelYybDBhRmRoY201cGJtY2dQU0JtZFc1amRHbHZiaWh2WW1vc0lHdGxlU2tnZTF4dUlDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNodlltb3NJR3RsZVN3Z2UxeHVJQ0FnSUNBZ1pXNTFiV1Z5WVdKc1pUb2dkSEoxWlN4Y2JpQWdJQ0FnSUdkbGREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTmJaR2xrVjJGeWJrdGxlVjBzWEc0Z0lDQWdJQ0FnSUNBZ0owRWdVbVZoWTNSR2NtRm5iV1Z1ZENCcGN5QmhiaUJ2Y0dGeGRXVWdkSGx3WlM0Z1FXTmpaWE56YVc1bklHRnVlU0J2WmlCcGRITWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0ozQnliM0JsY25ScFpYTWdhWE1nWkdWd2NtVmpZWFJsWkM0Z1VHRnpjeUJwZENCMGJ5QnZibVVnYjJZZ2RHaGxJRkpsWVdOMExrTm9hV3hrY21WdUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkb1pXeHdaWEp6TGlkY2JpQWdJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNBZ0lDQjBhR2x6VzJScFpGZGhjbTVMWlhsZElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTmJabkpoWjIxbGJuUkxaWGxkVzJ0bGVWMDdYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdjMlYwT2lCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpXMlJwWkZkaGNtNUxaWGxkTEZ4dUlDQWdJQ0FnSUNBZ0lDZEJJRkpsWVdOMFJuSmhaMjFsYm5RZ2FYTWdZVzRnYVcxdGRYUmhZbXhsSUc5d1lYRjFaU0IwZVhCbExpQk5kWFJoZEdsdVp5QnBkSE1nSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM0J5YjNCbGNuUnBaWE1nYVhNZ1pHVndjbVZqWVhSbFpDNG5YRzRnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnZEdocGMxdGthV1JYWVhKdVMyVjVYU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJSFJvYVhOYlpuSmhaMjFsYm5STFpYbGRXMnRsZVYwZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5S1R0Y2JpQWdmVHRjYmx4dUlDQjJZWElnYVhOemRXVmtWMkZ5Ym1sdVozTWdQU0I3ZlR0Y2JseHVJQ0IyWVhJZ1pHbGtWMkZ5YmtadmNrWnlZV2R0Wlc1MElEMGdablZ1WTNScGIyNG9abkpoWjIxbGJuUXBJSHRjYmlBZ0lDQXZMeUJYWlNCMWMyVWdkR2hsSUd0bGVYTWdZVzVrSUhSb1pTQjBlWEJsSUc5bUlIUm9aU0IyWVd4MVpTQmhjeUJoSUdobGRYSnBjM1JwWXlCMGJ5QmtaV1IxY0dVZ2RHaGxYRzRnSUNBZ0x5OGdkMkZ5Ym1sdVp5QjBieUJoZG05cFpDQnpjR0Z0YldsdVp5QjBiMjhnYlhWamFDNWNiaUFnSUNCMllYSWdabkpoWjIxbGJuUkRZV05vWlV0bGVTQTlJQ2NuTzF4dUlDQWdJR1p2Y2lBb2RtRnlJR3RsZVNCcGJpQm1jbUZuYldWdWRDa2dlMXh1SUNBZ0lDQWdabkpoWjIxbGJuUkRZV05vWlV0bGVTQXJQU0JyWlhrZ0t5QW5PaWNnS3lBb2RIbHdaVzltSUdaeVlXZHRaVzUwVzJ0bGVWMHBJQ3NnSnl3bk8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1lXeHlaV0ZrZVZkaGNtNWxaRTl1WTJVZ1BTQWhJV2x6YzNWbFpGZGhjbTVwYm1kelcyWnlZV2R0Wlc1MFEyRmphR1ZMWlhsZE8xeHVJQ0FnSUdsemMzVmxaRmRoY201cGJtZHpXMlp5WVdkdFpXNTBRMkZqYUdWTFpYbGRJRDBnZEhKMVpUdGNiaUFnSUNCeVpYUjFjbTRnWVd4eVpXRmtlVmRoY201bFpFOXVZMlU3WEc0Z0lIMDdYRzU5WEc1Y2JuWmhjaUJTWldGamRFWnlZV2R0Wlc1MElEMGdlMXh1SUNBdkx5QlhjbUZ3SUdFZ2EyVjVaV1FnYjJKcVpXTjBJR2x1SUdGdUlHOXdZWEYxWlNCd2NtOTRlU0IwYUdGMElIZGhjbTV6SUhsdmRTQnBaaUI1YjNVZ1lXTmpaWE56SUdGdWVWeHVJQ0F2THlCdlppQnBkSE1nY0hKdmNHVnlkR2xsY3k1Y2JpQWdZM0psWVhSbE9pQm1kVzVqZEdsdmJpaHZZbXBsWTNRcElIdGNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHOWlhbVZqZENBaFBUMGdKMjlpYW1WamRDY2dmSHdnSVc5aWFtVmpkQ0I4ZkNCQmNuSmhlUzVwYzBGeWNtRjVLRzlpYW1WamRDa3BJSHRjYmlBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBMbUZrWkc5dWN5NWpjbVZoZEdWR2NtRm5iV1Z1ZENCdmJteDVJR0ZqWTJWd2RITWdZU0J6YVc1bmJHVWdiMkpxWldOMExpY3NYRzRnSUNBZ0lDQWdJQ0FnYjJKcVpXTjBYRzRnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzlpYW1WamREdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2hTWldGamRFVnNaVzFsYm5RdWFYTldZV3hwWkVWc1pXMWxiblFvYjJKcVpXTjBLU2tnZTF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBblVtVmhZM1F1WVdSa2IyNXpMbU55WldGMFpVWnlZV2R0Wlc1MElHUnZaWE1nYm05MElHRmpZMlZ3ZENCaElGSmxZV04wUld4bGJXVnVkQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5kMmwwYUc5MWRDQmhJSGR5WVhCd1pYSWdiMkpxWldOMExpZGNiaUFnSUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiMkpxWldOME8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLR05oYmxkaGNtNUdiM0pTWldGamRFWnlZV2R0Wlc1MEtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCd2NtOTRlU0E5SUh0OU8xeHVJQ0FnSUNBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvY0hKdmVIa3NJR1p5WVdkdFpXNTBTMlY1TENCN1hHNGdJQ0FnSUNBZ0lDQWdaVzUxYldWeVlXSnNaVG9nWm1Gc2MyVXNYRzRnSUNBZ0lDQWdJQ0FnZG1Gc2RXVTZJRzlpYW1WamRGeHVJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtIQnliM2g1TENCa2FXUlhZWEp1UzJWNUxDQjdYRzRnSUNBZ0lDQWdJQ0FnZDNKcGRHRmliR1U2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ0FnWlc1MWJXVnlZV0pzWlRvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ2RtRnNkV1U2SUdaaGJITmxYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCclpYa2dhVzRnYjJKcVpXTjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NISnZlSGxRY205d1pYSjBlVUZqWTJWemMxZHBkR2hYWVhKdWFXNW5LSEJ5YjNoNUxDQnJaWGtwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lFOWlhbVZqZEM1d2NtVjJaVzUwUlhoMFpXNXphVzl1Y3lod2NtOTRlU2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ3Y205NGVUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRzlpYW1WamREdGNiaUFnZlN4Y2JpQWdMeThnUlhoMGNtRmpkQ0IwYUdVZ2IzSnBaMmx1WVd3Z2EyVjVaV1FnYjJKcVpXTjBJR1p5YjIwZ2RHaGxJR1p5WVdkdFpXNTBJRzl3WVhGMVpTQjBlWEJsTGlCWFlYSnVJR2xtWEc0Z0lDOHZJR0VnY0d4aGFXNGdiMkpxWldOMElHbHpJSEJoYzNObFpDQm9aWEpsTGx4dUlDQmxlSFJ5WVdOME9pQm1kVzVqZEdsdmJpaG1jbUZuYldWdWRDa2dlMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lHbG1JQ2hqWVc1WFlYSnVSbTl5VW1WaFkzUkdjbUZuYldWdWRDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lXWnlZV2R0Wlc1MFcyWnlZV2R0Wlc1MFMyVjVYU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdaR2xrVjJGeWJrWnZja1p5WVdkdFpXNTBLR1p5WVdkdFpXNTBLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDZEJibmtnZFhObElHOW1JR0VnYTJWNVpXUWdiMkpxWldOMElITm9iM1ZzWkNCaVpTQjNjbUZ3Y0dWa0lHbHVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdKMUpsWVdOMExtRmtaRzl1Y3k1amNtVmhkR1ZHY21GbmJXVnVkQ2h2WW1wbFkzUXBJR0psWm05eVpTQmlaV2x1WnlCd1lYTnpaV1FnWVhNZ1lTQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDZGphR2xzWkM0blhHNGdJQ0FnSUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJtY21GbmJXVnVkRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWm5KaFoyMWxiblJiWm5KaFoyMWxiblJMWlhsZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdabkpoWjIxbGJuUTdYRzRnSUgwc1hHNGdJQzh2SUVOb1pXTnJJR2xtSUhSb2FYTWdhWE1nWVNCbWNtRm5iV1Z1ZENCaGJtUWdhV1lnYzI4c0lHVjRkSEpoWTNRZ2RHaGxJR3RsZVdWa0lHOWlhbVZqZEM0Z1NXWWdhWFJjYmlBZ0x5OGdhWE1nWVNCbWNtRm5iV1Z1ZEMxc2FXdGxJRzlpYW1WamRDd2dkMkZ5YmlCMGFHRjBJR2wwSUhOb2IzVnNaQ0JpWlNCM2NtRndjR1ZrTGlCSloyNXZjbVVnYVdZZ2QyVmNiaUFnTHk4Z1kyRnVKM1FnWkdWMFpYSnRhVzVsSUhkb1lYUWdhMmx1WkNCdlppQnZZbXBsWTNRZ2RHaHBjeUJwY3k1Y2JpQWdaWGgwY21GamRFbG1SbkpoWjIxbGJuUTZJR1oxYm1OMGFXOXVLR1p5WVdkdFpXNTBLU0I3WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdhV1lnS0dOaGJsZGhjbTVHYjNKU1pXRmpkRVp5WVdkdFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUM4dklFbG1JR2wwSUdseklIUm9aU0J2Y0dGeGRXVWdkSGx3WlN3Z2NtVjBkWEp1SUhSb1pTQnJaWGxsWkNCdlltcGxZM1F1WEc0Z0lDQWdJQ0FnSUdsbUlDaG1jbUZuYldWdWRGdG1jbUZuYldWdWRFdGxlVjBwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1puSmhaMjFsYm5SYlpuSmhaMjFsYm5STFpYbGRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUM4dklFOTBhR1Z5ZDJselpTd2dZMmhsWTJzZ1pXRmphQ0J3Y205d1pYSjBlU0JwWmlCcGRDQm9ZWE1nWVc0Z1pXeGxiV1Z1ZEN3Z2FXWWdhWFFnWkc5bGMxeHVJQ0FnSUNBZ0lDQXZMeUJwZENCcGN5QndjbTlpWVdKc2VTQnRaV0Z1ZENCaGN5QmhJR1p5WVdkdFpXNTBMQ0J6YnlCM1pTQmpZVzRnZDJGeWJpQmxZWEpzZVM0Z1JHVm1aWElzWEc0Z0lDQWdJQ0FnSUM4dklIUm9aU0IzWVhKdWFXNW5JSFJ2SUdWNGRISmhZM1F1WEc0Z0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUd0bGVTQnBiaUJtY21GbmJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2htY21GbmJXVnVkQzVvWVhOUGQyNVFjbTl3WlhKMGVTaHJaWGtwSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENobWNtRm5iV1Z1ZEZ0clpYbGRLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnVkdocGN5QnNiMjlyY3lCc2FXdGxJR0VnWm5KaFoyMWxiblFnYjJKcVpXTjBMQ0IzWlNCemFHOTFiR1FnY0hKdmRtbGtaU0JoYmx4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnWldGeWJIa2dkMkZ5Ym1sdVp5NWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJTWldGamRFWnlZV2R0Wlc1MExtVjRkSEpoWTNRb1puSmhaMjFsYm5RcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1puSmhaMjFsYm5RN1hHNGdJSDFjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSR2NtRm5iV1Z1ZER0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0SW5qZWN0aW9uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luSHViXCIpO1xudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0Q2xhc3MgPSByZXF1aXJlKFwiLi9SZWFjdENsYXNzXCIpO1xudmFyIFJlYWN0RW1wdHlDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVtcHR5Q29tcG9uZW50XCIpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlclwiKTtcbnZhciBSZWFjdE5hdGl2ZUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0TmF0aXZlQ29tcG9uZW50XCIpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RET01Db21wb25lbnRcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xudmFyIFJlYWN0Um9vdEluZGV4ID0gcmVxdWlyZShcIi4vUmVhY3RSb290SW5kZXhcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgUmVhY3RJbmplY3Rpb24gPSB7XG4gIENvbXBvbmVudDogUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5pbmplY3Rpb24sXG4gIENsYXNzOiBSZWFjdENsYXNzLmluamVjdGlvbixcbiAgRE9NQ29tcG9uZW50OiBSZWFjdERPTUNvbXBvbmVudC5pbmplY3Rpb24sXG4gIERPTVByb3BlcnR5OiBET01Qcm9wZXJ0eS5pbmplY3Rpb24sXG4gIEVtcHR5Q29tcG9uZW50OiBSZWFjdEVtcHR5Q29tcG9uZW50LmluamVjdGlvbixcbiAgRXZlbnRQbHVnaW5IdWI6IEV2ZW50UGx1Z2luSHViLmluamVjdGlvbixcbiAgRXZlbnRFbWl0dGVyOiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuaW5qZWN0aW9uLFxuICBOYXRpdmVDb21wb25lbnQ6IFJlYWN0TmF0aXZlQ29tcG9uZW50LmluamVjdGlvbixcbiAgUGVyZjogUmVhY3RQZXJmLmluamVjdGlvbixcbiAgUm9vdEluZGV4OiBSZWFjdFJvb3RJbmRleC5pbmplY3Rpb24sXG4gIFVwZGF0ZXM6IFJlYWN0VXBkYXRlcy5pbmplY3Rpb25cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RJbmplY3Rpb247XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RJbnB1dFNlbGVjdGlvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NU2VsZWN0aW9uID0gcmVxdWlyZShcIi4vUmVhY3RET01TZWxlY3Rpb25cIik7XG5cbnZhciBjb250YWluc05vZGUgPSByZXF1aXJlKFwiLi9jb250YWluc05vZGVcIik7XG52YXIgZm9jdXNOb2RlID0gcmVxdWlyZShcIi4vZm9jdXNOb2RlXCIpO1xudmFyIGdldEFjdGl2ZUVsZW1lbnQgPSByZXF1aXJlKFwiLi9nZXRBY3RpdmVFbGVtZW50XCIpO1xuXG5mdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkge1xuICByZXR1cm4gY29udGFpbnNOb2RlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbm9kZSk7XG59XG5cbi8qKlxuICogQFJlYWN0SW5wdXRTZWxlY3Rpb246IFJlYWN0IGlucHV0IHNlbGVjdGlvbiBtb2R1bGUuIEJhc2VkIG9uIFNlbGVjdGlvbi5qcyxcbiAqIGJ1dCBtb2RpZmllZCB0byBiZSBzdWl0YWJsZSBmb3IgcmVhY3QgYW5kIGhhcyBhIGNvdXBsZSBvZiBidWcgZml4ZXMgKGRvZXNuJ3RcbiAqIGFzc3VtZSBidXR0b25zIGhhdmUgcmFuZ2Ugc2VsZWN0aW9ucyBhbGxvd2VkKS5cbiAqIElucHV0IHNlbGVjdGlvbiBtb2R1bGUgZm9yIFJlYWN0LlxuICovXG52YXIgUmVhY3RJbnB1dFNlbGVjdGlvbiA9IHtcblxuICBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IGZ1bmN0aW9uKGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbSAmJiAoXG4gICAgICAoKGVsZW0ubm9kZU5hbWUgPT09ICdJTlBVVCcgJiYgZWxlbS50eXBlID09PSAndGV4dCcpIHx8XG4gICAgICBlbGVtLm5vZGVOYW1lID09PSAnVEVYVEFSRUEnIHx8IGVsZW0uY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpXG4gICAgKTtcbiAgfSxcblxuICBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgICBzZWxlY3Rpb25SYW5nZTpcbiAgICAgICAgICBSZWFjdElucHV0U2VsZWN0aW9uLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgP1xuICAgICAgICAgIFJlYWN0SW5wdXRTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKGZvY3VzZWRFbGVtKSA6XG4gICAgICAgICAgbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LFxuICAgKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb21cbiAgICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuXG4gICAqL1xuICByZXN0b3JlU2VsZWN0aW9uOiBmdW5jdGlvbihwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSB7XG4gICAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHZhciBwcmlvckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5mb2N1c2VkRWxlbTtcbiAgICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG4gICAgaWYgKGN1ckZvY3VzZWRFbGVtICE9PSBwcmlvckZvY3VzZWRFbGVtICYmXG4gICAgICAgIGlzSW5Eb2N1bWVudChwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgaWYgKFJlYWN0SW5wdXRTZWxlY3Rpb24uaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgICAgIFJlYWN0SW5wdXRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFxuICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0sXG4gICAgICAgICAgcHJpb3JTZWxlY3Rpb25SYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZm9jdXNOb2RlKHByaW9yRm9jdXNlZEVsZW0pO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQGdldFNlbGVjdGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIGZvY3VzZWQgdGV4dGFyZWEsIGlucHV0IG9yXG4gICAqIGNvbnRlbnRFZGl0YWJsZSBub2RlLlxuICAgKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dFxuICAgKiAtQHJldHVybiB7c3RhcnQ6IHNlbGVjdGlvblN0YXJ0LCBlbmQ6IHNlbGVjdGlvbkVuZH1cbiAgICovXG4gIGdldFNlbGVjdGlvbjogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICB2YXIgc2VsZWN0aW9uO1xuXG4gICAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICAgIC8vIE1vZGVybiBicm93c2VyIHdpdGggaW5wdXQgb3IgdGV4dGFyZWEuXG4gICAgICBzZWxlY3Rpb24gPSB7XG4gICAgICAgIHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCxcbiAgICAgICAgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmRcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24gJiYgaW5wdXQubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgIC8vIElFOCBpbnB1dC5cbiAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO1xuICAgICAgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25lIHNlbGVjdGlvbiBwZXIgZG9jdW1lbnQgaW4gSUUsIHNvIGl0IG11c3RcbiAgICAgIC8vIGJlIGluIG91ciBlbGVtZW50LlxuICAgICAgaWYgKHJhbmdlLnBhcmVudEVsZW1lbnQoKSA9PT0gaW5wdXQpIHtcbiAgICAgICAgc2VsZWN0aW9uID0ge1xuICAgICAgICAgIHN0YXJ0OiAtcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCAtaW5wdXQudmFsdWUubGVuZ3RoKSxcbiAgICAgICAgICBlbmQ6IC1yYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCAtaW5wdXQudmFsdWUubGVuZ3RoKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb250ZW50IGVkaXRhYmxlIG9yIG9sZCBJRSB0ZXh0YXJlYS5cbiAgICAgIHNlbGVjdGlvbiA9IFJlYWN0RE9NU2VsZWN0aW9uLmdldE9mZnNldHMoaW5wdXQpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3Rpb24gfHwge3N0YXJ0OiAwLCBlbmQ6IDB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAc2V0U2VsZWN0aW9uOiBTZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgdGV4dGFyZWEgb3IgaW5wdXQgYW5kIGZvY3VzZXNcbiAgICogdGhlIGlucHV0LlxuICAgKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gICAqIC1Ab2Zmc2V0cyAgIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCpcbiAgICovXG4gIHNldFNlbGVjdGlvbjogZnVuY3Rpb24oaW5wdXQsIG9mZnNldHMpIHtcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICAgIHZhciBlbmQgPSBvZmZzZXRzLmVuZDtcbiAgICBpZiAodHlwZW9mIGVuZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVuZCA9IHN0YXJ0O1xuICAgIH1cblxuICAgIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgICBpbnB1dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0O1xuICAgICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oZW5kLCBpbnB1dC52YWx1ZS5sZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGlucHV0Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBpbnB1dC5jcmVhdGVUZXh0UmFuZ2UoKTtcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydCk7XG4gICAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQgLSBzdGFydCk7XG4gICAgICByYW5nZS5zZWxlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RET01TZWxlY3Rpb24uc2V0T2Zmc2V0cyhpbnB1dCwgb2Zmc2V0cyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5wdXRTZWxlY3Rpb247XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0SW5zdGFuY2VIYW5kbGVzXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Um9vdEluZGV4ID0gcmVxdWlyZShcIi4vUmVhY3RSb290SW5kZXhcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU0VQQVJBVE9SX0xFTkdUSCA9IFNFUEFSQVRPUi5sZW5ndGg7XG5cbi8qKlxuICogTWF4aW11bSBkZXB0aCBvZiB0cmF2ZXJzYWxzIGJlZm9yZSB3ZSBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgb2YgYSBiYWQgSUQuXG4gKi9cbnZhciBNQVhfVFJFRV9ERVBUSCA9IDEwMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgRE9NIElEIHByZWZpeCB0byB1c2Ugd2hlbiBtb3VudGluZyBSZWFjdCBjb21wb25lbnRzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBBIHVuaXF1ZSBpbnRlZ2VyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFJlYWN0IHJvb3QgSUQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0UmVhY3RSb290SURTdHJpbmcoaW5kZXgpIHtcbiAgcmV0dXJuIFNFUEFSQVRPUiArIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBjaGFyYWN0ZXIgaW4gdGhlIHN1cHBsaWVkIElEIGlzIGEgc2VwYXJhdG9yIG9yIHRoZSBlbmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIEEgUmVhY3QgRE9NIElELlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSBzZXBhcmF0b3Igb3IgZW5kIG9mIHRoZSBJRC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzQm91bmRhcnkoaWQsIGluZGV4KSB7XG4gIHJldHVybiBpZC5jaGFyQXQoaW5kZXgpID09PSBTRVBBUkFUT1IgfHwgaW5kZXggPT09IGlkLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHN1cHBsaWVkIHN0cmluZyBpcyBhIHZhbGlkIFJlYWN0IERPTSBJRC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgQSBSZWFjdCBET00gSUQsIG1heWJlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgUmVhY3QgRE9NIElELlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZElEKGlkKSB7XG4gIHJldHVybiBpZCA9PT0gJycgfHwgKFxuICAgIGlkLmNoYXJBdCgwKSA9PT0gU0VQQVJBVE9SICYmIGlkLmNoYXJBdChpZC5sZW5ndGggLSAxKSAhPT0gU0VQQVJBVE9SXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBmaXJzdCBJRCBpcyBhbiBhbmNlc3RvciBvZiBvciBlcXVhbCB0byB0aGUgc2Vjb25kIElELlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbmNlc3RvcklEXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY2VuZGFudElEXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBhbmNlc3RvcklEYCBpcyBhbiBhbmNlc3RvciBvZiBgZGVzY2VuZGFudElEYC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc0FuY2VzdG9ySURPZihhbmNlc3RvcklELCBkZXNjZW5kYW50SUQpIHtcbiAgcmV0dXJuIChcbiAgICBkZXNjZW5kYW50SUQuaW5kZXhPZihhbmNlc3RvcklEKSA9PT0gMCAmJlxuICAgIGlzQm91bmRhcnkoZGVzY2VuZGFudElELCBhbmNlc3RvcklELmxlbmd0aClcbiAgKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBwYXJlbnQgSUQgb2YgdGhlIHN1cHBsaWVkIFJlYWN0IERPTSBJRCwgYGlkYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgYSBjb21wb25lbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IElEIG9mIHRoZSBwYXJlbnQsIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldFBhcmVudElEKGlkKSB7XG4gIHJldHVybiBpZCA/IGlkLnN1YnN0cigwLCBpZC5sYXN0SW5kZXhPZihTRVBBUkFUT1IpKSA6ICcnO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgRE9NIElEIG9uIHRoZSB0cmVlIHBhdGggZnJvbSB0aGUgc3VwcGxpZWQgYGFuY2VzdG9ySURgIHRvIHRoZVxuICogc3VwcGxpZWQgYGRlc3RpbmF0aW9uSURgLiBJZiB0aGV5IGFyZSBlcXVhbCwgdGhlIElEIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbmNlc3RvcklEIElEIG9mIGFuIGFuY2VzdG9yIG5vZGUgb2YgYGRlc3RpbmF0aW9uSURgLlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3RpbmF0aW9uSUQgSUQgb2YgdGhlIGRlc3RpbmF0aW9uIG5vZGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5leHQgSUQgb24gdGhlIHBhdGggZnJvbSBgYW5jZXN0b3JJRGAgdG8gYGRlc3RpbmF0aW9uSURgLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0TmV4dERlc2NlbmRhbnRJRChhbmNlc3RvcklELCBkZXN0aW5hdGlvbklEKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgaXNWYWxpZElEKGFuY2VzdG9ySUQpICYmIGlzVmFsaWRJRChkZXN0aW5hdGlvbklEKSxcbiAgICAnZ2V0TmV4dERlc2NlbmRhbnRJRCglcywgJXMpOiBSZWNlaXZlZCBhbiBpbnZhbGlkIFJlYWN0IERPTSBJRC4nLFxuICAgIGFuY2VzdG9ySUQsXG4gICAgZGVzdGluYXRpb25JRFxuICApIDogaW52YXJpYW50KGlzVmFsaWRJRChhbmNlc3RvcklEKSAmJiBpc1ZhbGlkSUQoZGVzdGluYXRpb25JRCkpKTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBpc0FuY2VzdG9ySURPZihhbmNlc3RvcklELCBkZXN0aW5hdGlvbklEKSxcbiAgICAnZ2V0TmV4dERlc2NlbmRhbnRJRCguLi4pOiBSZWFjdCBoYXMgbWFkZSBhbiBpbnZhbGlkIGFzc3VtcHRpb24gYWJvdXQgJyArXG4gICAgJ3RoZSBET00gaGllcmFyY2h5LiBFeHBlY3RlZCBgJXNgIHRvIGJlIGFuIGFuY2VzdG9yIG9mIGAlc2AuJyxcbiAgICBhbmNlc3RvcklELFxuICAgIGRlc3RpbmF0aW9uSURcbiAgKSA6IGludmFyaWFudChpc0FuY2VzdG9ySURPZihhbmNlc3RvcklELCBkZXN0aW5hdGlvbklEKSkpO1xuICBpZiAoYW5jZXN0b3JJRCA9PT0gZGVzdGluYXRpb25JRCkge1xuICAgIHJldHVybiBhbmNlc3RvcklEO1xuICB9XG4gIC8vIFNraXAgb3ZlciB0aGUgYW5jZXN0b3IgYW5kIHRoZSBpbW1lZGlhdGUgc2VwYXJhdG9yLiBUcmF2ZXJzZSB1bnRpbCB3ZSBoaXRcbiAgLy8gYW5vdGhlciBzZXBhcmF0b3Igb3Igd2UgcmVhY2ggdGhlIGVuZCBvZiBgZGVzdGluYXRpb25JRGAuXG4gIHZhciBzdGFydCA9IGFuY2VzdG9ySUQubGVuZ3RoICsgU0VQQVJBVE9SX0xFTkdUSDtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IHN0YXJ0OyBpIDwgZGVzdGluYXRpb25JRC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpc0JvdW5kYXJ5KGRlc3RpbmF0aW9uSUQsIGkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlc3RpbmF0aW9uSUQuc3Vic3RyKDAsIGkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5lYXJlc3QgY29tbW9uIGFuY2VzdG9yIElEIG9mIHR3byBJRHMuXG4gKlxuICogVXNpbmcgdGhpcyBJRCBzY2hlbWUsIHRoZSBuZWFyZXN0IGNvbW1vbiBhbmNlc3RvciBJRCBpcyB0aGUgbG9uZ2VzdCBjb21tb25cbiAqIHByZWZpeCBvZiB0aGUgdHdvIElEcyB0aGF0IGltbWVkaWF0ZWx5IHByZWNlZGVkIGEgXCJtYXJrZXJcIiBpbiBib3RoIHN0cmluZ3MuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9uZUlEXG4gKiBAcGFyYW0ge3N0cmluZ30gdHdvSURcbiAqIEByZXR1cm4ge3N0cmluZ30gTmVhcmVzdCBjb21tb24gYW5jZXN0b3IgSUQsIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm9uZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEZpcnN0Q29tbW9uQW5jZXN0b3JJRChvbmVJRCwgdHdvSUQpIHtcbiAgdmFyIG1pbkxlbmd0aCA9IE1hdGgubWluKG9uZUlELmxlbmd0aCwgdHdvSUQubGVuZ3RoKTtcbiAgaWYgKG1pbkxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICB2YXIgbGFzdENvbW1vbk1hcmtlckluZGV4ID0gMDtcbiAgLy8gVXNlIGA8PWAgdG8gdHJhdmVyc2UgdW50aWwgdGhlIFwiRU9MXCIgb2YgdGhlIHNob3J0ZXIgc3RyaW5nLlxuICBmb3IgKHZhciBpID0gMDsgaSA8PSBtaW5MZW5ndGg7IGkrKykge1xuICAgIGlmIChpc0JvdW5kYXJ5KG9uZUlELCBpKSAmJiBpc0JvdW5kYXJ5KHR3b0lELCBpKSkge1xuICAgICAgbGFzdENvbW1vbk1hcmtlckluZGV4ID0gaTtcbiAgICB9IGVsc2UgaWYgKG9uZUlELmNoYXJBdChpKSAhPT0gdHdvSUQuY2hhckF0KGkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgdmFyIGxvbmdlc3RDb21tb25JRCA9IG9uZUlELnN1YnN0cigwLCBsYXN0Q29tbW9uTWFya2VySW5kZXgpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGlzVmFsaWRJRChsb25nZXN0Q29tbW9uSUQpLFxuICAgICdnZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQoJXMsICVzKTogRXhwZWN0ZWQgYSB2YWxpZCBSZWFjdCBET00gSUQ6ICVzJyxcbiAgICBvbmVJRCxcbiAgICB0d29JRCxcbiAgICBsb25nZXN0Q29tbW9uSURcbiAgKSA6IGludmFyaWFudChpc1ZhbGlkSUQobG9uZ2VzdENvbW1vbklEKSkpO1xuICByZXR1cm4gbG9uZ2VzdENvbW1vbklEO1xufVxuXG4vKipcbiAqIFRyYXZlcnNlcyB0aGUgcGFyZW50IHBhdGggYmV0d2VlbiB0d28gSURzIChlaXRoZXIgdXAgb3IgZG93bikuIFRoZSBJRHMgbXVzdFxuICogbm90IGJlIHRoZSBzYW1lLCBhbmQgdGhlcmUgbXVzdCBleGlzdCBhIHBhcmVudCBwYXRoIGJldHdlZW4gdGhlbS4gSWYgdGhlXG4gKiBjYWxsYmFjayByZXR1cm5zIGBmYWxzZWAsIHRyYXZlcnNhbCBpcyBzdG9wcGVkLlxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gc3RhcnQgSUQgYXQgd2hpY2ggdG8gc3RhcnQgdHJhdmVyc2FsLlxuICogQHBhcmFtIHs/c3RyaW5nfSBzdG9wIElEIGF0IHdoaWNoIHRvIGVuZCB0cmF2ZXJzYWwuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiBDYWxsYmFjayB0byBpbnZva2UgZWFjaCBJRCB3aXRoLlxuICogQHBhcmFtIHs/Ym9vbGVhbn0gc2tpcEZpcnN0IFdoZXRoZXIgb3Igbm90IHRvIHNraXAgdGhlIGZpcnN0IG5vZGUuXG4gKiBAcGFyYW0gez9ib29sZWFufSBza2lwTGFzdCBXaGV0aGVyIG9yIG5vdCB0byBza2lwIHRoZSBsYXN0IG5vZGUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZVBhcmVudFBhdGgoc3RhcnQsIHN0b3AsIGNiLCBhcmcsIHNraXBGaXJzdCwgc2tpcExhc3QpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAnJztcbiAgc3RvcCA9IHN0b3AgfHwgJyc7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgc3RhcnQgIT09IHN0b3AsXG4gICAgJ3RyYXZlcnNlUGFyZW50UGF0aCguLi4pOiBDYW5ub3QgdHJhdmVyc2UgZnJvbSBhbmQgdG8gdGhlIHNhbWUgSUQsIGAlc2AuJyxcbiAgICBzdGFydFxuICApIDogaW52YXJpYW50KHN0YXJ0ICE9PSBzdG9wKSk7XG4gIHZhciB0cmF2ZXJzZVVwID0gaXNBbmNlc3RvcklET2Yoc3RvcCwgc3RhcnQpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHRyYXZlcnNlVXAgfHwgaXNBbmNlc3RvcklET2Yoc3RhcnQsIHN0b3ApLFxuICAgICd0cmF2ZXJzZVBhcmVudFBhdGgoJXMsICVzLCAuLi4pOiBDYW5ub3QgdHJhdmVyc2UgZnJvbSB0d28gSURzIHRoYXQgZG8gJyArXG4gICAgJ25vdCBoYXZlIGEgcGFyZW50IHBhdGguJyxcbiAgICBzdGFydCxcbiAgICBzdG9wXG4gICkgOiBpbnZhcmlhbnQodHJhdmVyc2VVcCB8fCBpc0FuY2VzdG9ySURPZihzdGFydCwgc3RvcCkpKTtcbiAgLy8gVHJhdmVyc2UgZnJvbSBgc3RhcnRgIHRvIGBzdG9wYCBvbmUgZGVwdGggYXQgYSB0aW1lLlxuICB2YXIgZGVwdGggPSAwO1xuICB2YXIgdHJhdmVyc2UgPSB0cmF2ZXJzZVVwID8gZ2V0UGFyZW50SUQgOiBnZXROZXh0RGVzY2VuZGFudElEO1xuICBmb3IgKHZhciBpZCA9IHN0YXJ0OyAvKiB1bnRpbCBicmVhayAqLzsgaWQgPSB0cmF2ZXJzZShpZCwgc3RvcCkpIHtcbiAgICB2YXIgcmV0O1xuICAgIGlmICgoIXNraXBGaXJzdCB8fCBpZCAhPT0gc3RhcnQpICYmICghc2tpcExhc3QgfHwgaWQgIT09IHN0b3ApKSB7XG4gICAgICByZXQgPSBjYihpZCwgdHJhdmVyc2VVcCwgYXJnKTtcbiAgICB9XG4gICAgaWYgKHJldCA9PT0gZmFsc2UgfHwgaWQgPT09IHN0b3ApIHtcbiAgICAgIC8vIE9ubHkgYnJlYWsgLy9hZnRlci8vIHZpc2l0aW5nIGBzdG9wYC5cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgZGVwdGgrKyA8IE1BWF9UUkVFX0RFUFRILFxuICAgICAgJ3RyYXZlcnNlUGFyZW50UGF0aCglcywgJXMsIC4uLik6IERldGVjdGVkIGFuIGluZmluaXRlIGxvb3Agd2hpbGUgJyArXG4gICAgICAndHJhdmVyc2luZyB0aGUgUmVhY3QgRE9NIElEIHRyZWUuIFRoaXMgbWF5IGJlIGR1ZSB0byBtYWxmb3JtZWQgSURzOiAlcycsXG4gICAgICBzdGFydCwgc3RvcFxuICAgICkgOiBpbnZhcmlhbnQoZGVwdGgrKyA8IE1BWF9UUkVFX0RFUFRIKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBJRHMgYXNzaWduZWQgdG8gRE9NIHJlcHJlc2VudGF0aW9ucyBvZiBSZWFjdCBjb21wb25lbnRzLiBUaGlzXG4gKiB1c2VzIGEgc3BlY2lmaWMgc2NoZW1lIGluIG9yZGVyIHRvIHRyYXZlcnNlIHRoZSBET00gZWZmaWNpZW50bHkgKGUuZy4gaW5cbiAqIG9yZGVyIHRvIHNpbXVsYXRlIGV2ZW50cykuXG4gKlxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIFJlYWN0IHJvb3QgSURcbiAgICogQHJldHVybiB7c3RyaW5nfSBBIFJlYWN0IHJvb3QgSUQuXG4gICAqL1xuICBjcmVhdGVSZWFjdFJvb3RJRDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGdldFJlYWN0Um9vdElEU3RyaW5nKFJlYWN0Um9vdEluZGV4LmNyZWF0ZVJlYWN0Um9vdEluZGV4KCkpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgUmVhY3QgSUQgYnkgam9pbmluZyBhIHJvb3QgSUQgd2l0aCBhIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290SUQgUm9vdCBJRCBvZiBhIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEEgY29tcG9uZW50J3MgbmFtZSAoYXMgZmxhdHRlbmVkIGNoaWxkcmVuKS5cbiAgICogQHJldHVybiB7c3RyaW5nfSBBIFJlYWN0IElELlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNyZWF0ZVJlYWN0SUQ6IGZ1bmN0aW9uKHJvb3RJRCwgbmFtZSkge1xuICAgIHJldHVybiByb290SUQgKyBuYW1lO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBET00gSUQgb2YgdGhlIFJlYWN0IGNvbXBvbmVudCB0aGF0IGlzIHRoZSByb290IG9mIHRoZSB0cmVlIHRoYXRcbiAgICogY29udGFpbnMgdGhlIFJlYWN0IGNvbXBvbmVudCB3aXRoIHRoZSBzdXBwbGllZCBET00gSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBET00gSUQgb2YgYSBSZWFjdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IERPTSBJRCBvZiB0aGUgUmVhY3QgY29tcG9uZW50IHRoYXQgaXMgdGhlIHJvb3QuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0UmVhY3RSb290SURGcm9tTm9kZUlEOiBmdW5jdGlvbihpZCkge1xuICAgIGlmIChpZCAmJiBpZC5jaGFyQXQoMCkgPT09IFNFUEFSQVRPUiAmJiBpZC5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgaW5kZXggPSBpZC5pbmRleE9mKFNFUEFSQVRPUiwgMSk7XG4gICAgICByZXR1cm4gaW5kZXggPiAtMSA/IGlkLnN1YnN0cigwLCBpbmRleCkgOiBpZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0aGUgSUQgaGllcmFyY2h5IGFuZCBpbnZva2VzIHRoZSBzdXBwbGllZCBgY2JgIG9uIGFueSBJRHMgdGhhdFxuICAgKiBzaG91bGQgd291bGQgcmVjZWl2ZSBhIGBtb3VzZUVudGVyYCBvciBgbW91c2VMZWF2ZWAgZXZlbnQuXG4gICAqXG4gICAqIE5PVEU6IERvZXMgbm90IGludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhlIG5lYXJlc3QgY29tbW9uIGFuY2VzdG9yIGJlY2F1c2VcbiAgICogbm90aGluZyBcImVudGVyZWRcIiBvciBcImxlZnRcIiB0aGF0IGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsZWF2ZUlEIElEIGJlaW5nIGxlZnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbnRlcklEIElEIGJlaW5nIGVudGVyZWQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNiIENhbGxiYWNrIHRvIGludm9rZSBvbiBlYWNoIGVudGVyZWQvbGVmdCBJRC5cbiAgICogQHBhcmFtIHsqfSB1cEFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggb24gbGVmdCBJRHMuXG4gICAqIEBwYXJhbSB7Kn0gZG93bkFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggb24gZW50ZXJlZCBJRHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJhdmVyc2VFbnRlckxlYXZlOiBmdW5jdGlvbihsZWF2ZUlELCBlbnRlcklELCBjYiwgdXBBcmcsIGRvd25BcmcpIHtcbiAgICB2YXIgYW5jZXN0b3JJRCA9IGdldEZpcnN0Q29tbW9uQW5jZXN0b3JJRChsZWF2ZUlELCBlbnRlcklEKTtcbiAgICBpZiAoYW5jZXN0b3JJRCAhPT0gbGVhdmVJRCkge1xuICAgICAgdHJhdmVyc2VQYXJlbnRQYXRoKGxlYXZlSUQsIGFuY2VzdG9ySUQsIGNiLCB1cEFyZywgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYW5jZXN0b3JJRCAhPT0gZW50ZXJJRCkge1xuICAgICAgdHJhdmVyc2VQYXJlbnRQYXRoKGFuY2VzdG9ySUQsIGVudGVySUQsIGNiLCBkb3duQXJnLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBTaW11bGF0ZXMgdGhlIHRyYXZlcnNhbCBvZiBhIHR3by1waGFzZSwgY2FwdHVyZS9idWJibGUgZXZlbnQgZGlzcGF0Y2guXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgdHJhdmVyc2FsIGhhcHBlbnMgb24gSURzIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldElEIElEIG9mIHRoZSB0YXJnZXQgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgdG8gaW52b2tlLlxuICAgKiBAcGFyYW0geyp9IGFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGguXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJhdmVyc2VUd29QaGFzZTogZnVuY3Rpb24odGFyZ2V0SUQsIGNiLCBhcmcpIHtcbiAgICBpZiAodGFyZ2V0SUQpIHtcbiAgICAgIHRyYXZlcnNlUGFyZW50UGF0aCgnJywgdGFyZ2V0SUQsIGNiLCBhcmcsIHRydWUsIGZhbHNlKTtcbiAgICAgIHRyYXZlcnNlUGFyZW50UGF0aCh0YXJnZXRJRCwgJycsIGNiLCBhcmcsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlIGEgbm9kZSBJRCwgY2FsbGluZyB0aGUgc3VwcGxpZWQgYGNiYCBmb3IgZWFjaCBhbmNlc3RvciBJRC4gRm9yXG4gICAqIGV4YW1wbGUsIHBhc3NpbmcgYC4wLiRyb3ctMC4xYCB3b3VsZCByZXN1bHQgaW4gYGNiYCBnZXR0aW5nIGNhbGxlZFxuICAgKiB3aXRoIGAuMGAsIGAuMC4kcm93LTBgLCBhbmQgYC4wLiRyb3ctMC4xYC5cbiAgICpcbiAgICogTk9URTogVGhpcyB0cmF2ZXJzYWwgaGFwcGVucyBvbiBJRHMgd2l0aG91dCB0b3VjaGluZyB0aGUgRE9NLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0SUQgSUQgb2YgdGhlIHRhcmdldCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiBDYWxsYmFjayB0byBpbnZva2UuXG4gICAqIEBwYXJhbSB7Kn0gYXJnIEFyZ3VtZW50IHRvIGludm9rZSB0aGUgY2FsbGJhY2sgd2l0aC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB0cmF2ZXJzZUFuY2VzdG9yczogZnVuY3Rpb24odGFyZ2V0SUQsIGNiLCBhcmcpIHtcbiAgICB0cmF2ZXJzZVBhcmVudFBhdGgoJycsIHRhcmdldElELCBjYiwgYXJnLCB0cnVlLCBmYWxzZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIHVuaXQgdGVzdGluZy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQ6IGdldEZpcnN0Q29tbW9uQW5jZXN0b3JJRCxcblxuICAvKipcbiAgICogRXhwb3NlZCBmb3IgdW5pdCB0ZXN0aW5nLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldE5leHREZXNjZW5kYW50SUQ6IGdldE5leHREZXNjZW5kYW50SUQsXG5cbiAgaXNBbmNlc3RvcklET2Y6IGlzQW5jZXN0b3JJRE9mLFxuXG4gIFNFUEFSQVRPUjogU0VQQVJBVE9SXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RJbnN0YW5jZUhhbmRsZXM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSSmJuTjBZVzVqWlVoaGJtUnNaWE11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWelhHNGdLaUJBZEhsd1pXTm9aV05yY3lCemRHRjBhV010YjI1c2VWeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRkpsWVdOMFVtOXZkRWx1WkdWNElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlNiMjkwU1c1a1pYaGNJaWs3WEc1Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JuWmhjaUJUUlZCQlVrRlVUMUlnUFNBbkxpYzdYRzUyWVhJZ1UwVlFRVkpCVkU5U1gweEZUa2RVU0NBOUlGTkZVRUZTUVZSUFVpNXNaVzVuZEdnN1hHNWNiaThxS2x4dUlDb2dUV0Y0YVcxMWJTQmtaWEIwYUNCdlppQjBjbUYyWlhKellXeHpJR0psWm05eVpTQjNaU0JqYjI1emFXUmxjaUIwYUdVZ2NHOXpjMmxpYVd4cGRIa2diMllnWVNCaVlXUWdTVVF1WEc0Z0tpOWNiblpoY2lCTlFWaGZWRkpGUlY5RVJWQlVTQ0E5SURFd01EdGNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0VnUkU5TklFbEVJSEJ5WldacGVDQjBieUIxYzJVZ2QyaGxiaUJ0YjNWdWRHbHVaeUJTWldGamRDQmpiMjF3YjI1bGJuUnpMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnBibVJsZUNCQklIVnVhWEYxWlNCcGJuUmxaMlZ5WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlGSmxZV04wSUhKdmIzUWdTVVF1WEc0Z0tpQkFhVzUwWlhKdVlXeGNiaUFxTDF4dVpuVnVZM1JwYjI0Z1oyVjBVbVZoWTNSU2IyOTBTVVJUZEhKcGJtY29hVzVrWlhncElIdGNiaUFnY21WMGRYSnVJRk5GVUVGU1FWUlBVaUFySUdsdVpHVjRMblJ2VTNSeWFXNW5LRE0yS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJEYUdWamEzTWdhV1lnWVNCamFHRnlZV04wWlhJZ2FXNGdkR2hsSUhOMWNIQnNhV1ZrSUVsRUlHbHpJR0VnYzJWd1lYSmhkRzl5SUc5eUlIUm9aU0JsYm1RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdsa0lFRWdVbVZoWTNRZ1JFOU5JRWxFTGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHbHVaR1Y0SUVsdVpHVjRJRzltSUhSb1pTQmphR0Z5WVdOMFpYSWdkRzhnWTJobFkyc3VYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlNCVWNuVmxJR2xtSUhSb1pTQmphR0Z5WVdOMFpYSWdhWE1nWVNCelpYQmhjbUYwYjNJZ2IzSWdaVzVrSUc5bUlIUm9aU0JKUkM1Y2JpQXFJRUJ3Y21sMllYUmxYRzRnS2k5Y2JtWjFibU4wYVc5dUlHbHpRbTkxYm1SaGNua29hV1FzSUdsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcFpDNWphR0Z5UVhRb2FXNWtaWGdwSUQwOVBTQlRSVkJCVWtGVVQxSWdmSHdnYVc1a1pYZ2dQVDA5SUdsa0xteGxibWQwYUR0Y2JuMWNibHh1THlvcVhHNGdLaUJEYUdWamEzTWdhV1lnZEdobElITjFjSEJzYVdWa0lITjBjbWx1WnlCcGN5QmhJSFpoYkdsa0lGSmxZV04wSUVSUFRTQkpSQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnUVNCU1pXRmpkQ0JFVDAwZ1NVUXNJRzFoZVdKbExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjBnVkhKMVpTQnBaaUIwYUdVZ2MzUnlhVzVuSUdseklHRWdkbUZzYVdRZ1VtVmhZM1FnUkU5TklFbEVMbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnYVhOV1lXeHBaRWxFS0dsa0tTQjdYRzRnSUhKbGRIVnliaUJwWkNBOVBUMGdKeWNnZkh3Z0tGeHVJQ0FnSUdsa0xtTm9ZWEpCZENnd0tTQTlQVDBnVTBWUVFWSkJWRTlTSUNZbUlHbGtMbU5vWVhKQmRDaHBaQzVzWlc1bmRHZ2dMU0F4S1NBaFBUMGdVMFZRUVZKQlZFOVNYRzRnSUNrN1hHNTlYRzVjYmk4cUtseHVJQ29nUTJobFkydHpJR2xtSUhSb1pTQm1hWEp6ZENCSlJDQnBjeUJoYmlCaGJtTmxjM1J2Y2lCdlppQnZjaUJsY1hWaGJDQjBieUIwYUdVZ2MyVmpiMjVrSUVsRUxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCaGJtTmxjM1J2Y2tsRVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdaR1Z6WTJWdVpHRnVkRWxFWEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZTQlVjblZsSUdsbUlHQmhibU5sYzNSdmNrbEVZQ0JwY3lCaGJpQmhibU5sYzNSdmNpQnZaaUJnWkdWelkyVnVaR0Z1ZEVsRVlDNWNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJwYzBGdVkyVnpkRzl5U1VSUFppaGhibU5sYzNSdmNrbEVMQ0JrWlhOalpXNWtZVzUwU1VRcElIdGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQmtaWE5qWlc1a1lXNTBTVVF1YVc1a1pYaFBaaWhoYm1ObGMzUnZja2xFS1NBOVBUMGdNQ0FtSmx4dUlDQWdJR2x6UW05MWJtUmhjbmtvWkdWelkyVnVaR0Z1ZEVsRUxDQmhibU5sYzNSdmNrbEVMbXhsYm1kMGFDbGNiaUFnS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJIWlhSeklIUm9aU0J3WVhKbGJuUWdTVVFnYjJZZ2RHaGxJSE4xY0hCc2FXVmtJRkpsWVdOMElFUlBUU0JKUkN3Z1lHbGtZQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnU1VRZ2IyWWdZU0JqYjIxd2IyNWxiblF1WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlFbEVJRzltSUhSb1pTQndZWEpsYm5Rc0lHOXlJR0Z1SUdWdGNIUjVJSE4wY21sdVp5NWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibVoxYm1OMGFXOXVJR2RsZEZCaGNtVnVkRWxFS0dsa0tTQjdYRzRnSUhKbGRIVnliaUJwWkNBL0lHbGtMbk4xWW5OMGNpZ3dMQ0JwWkM1c1lYTjBTVzVrWlhoUFppaFRSVkJCVWtGVVQxSXBLU0E2SUNjbk8xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGRITWdkR2hsSUc1bGVIUWdSRTlOSUVsRUlHOXVJSFJvWlNCMGNtVmxJSEJoZEdnZ1puSnZiU0IwYUdVZ2MzVndjR3hwWldRZ1lHRnVZMlZ6ZEc5eVNVUmdJSFJ2SUhSb1pWeHVJQ29nYzNWd2NHeHBaV1FnWUdSbGMzUnBibUYwYVc5dVNVUmdMaUJKWmlCMGFHVjVJR0Z5WlNCbGNYVmhiQ3dnZEdobElFbEVJR2x6SUhKbGRIVnlibVZrTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JoYm1ObGMzUnZja2xFSUVsRUlHOW1JR0Z1SUdGdVkyVnpkRzl5SUc1dlpHVWdiMllnWUdSbGMzUnBibUYwYVc5dVNVUmdMbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdSbGMzUnBibUYwYVc5dVNVUWdTVVFnYjJZZ2RHaGxJR1JsYzNScGJtRjBhVzl1SUc1dlpHVXVYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5SUU1bGVIUWdTVVFnYjI0Z2RHaGxJSEJoZEdnZ1puSnZiU0JnWVc1alpYTjBiM0pKUkdBZ2RHOGdZR1JsYzNScGJtRjBhVzl1U1VSZ0xseHVJQ29nUUhCeWFYWmhkR1ZjYmlBcUwxeHVablZ1WTNScGIyNGdaMlYwVG1WNGRFUmxjMk5sYm1SaGJuUkpSQ2hoYm1ObGMzUnZja2xFTENCa1pYTjBhVzVoZEdsdmJrbEVLU0I3WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnYVhOV1lXeHBaRWxFS0dGdVkyVnpkRzl5U1VRcElDWW1JR2x6Vm1Gc2FXUkpSQ2hrWlhOMGFXNWhkR2x2YmtsRUtTeGNiaUFnSUNBbloyVjBUbVY0ZEVSbGMyTmxibVJoYm5SSlJDZ2xjeXdnSlhNcE9pQlNaV05sYVhabFpDQmhiaUJwYm5aaGJHbGtJRkpsWVdOMElFUlBUU0JKUkM0bkxGeHVJQ0FnSUdGdVkyVnpkRzl5U1VRc1hHNGdJQ0FnWkdWemRHbHVZWFJwYjI1SlJGeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHbHpWbUZzYVdSSlJDaGhibU5sYzNSdmNrbEVLU0FtSmlCcGMxWmhiR2xrU1VRb1pHVnpkR2x1WVhScGIyNUpSQ2twS1R0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCcGMwRnVZMlZ6ZEc5eVNVUlBaaWhoYm1ObGMzUnZja2xFTENCa1pYTjBhVzVoZEdsdmJrbEVLU3hjYmlBZ0lDQW5aMlYwVG1WNGRFUmxjMk5sYm1SaGJuUkpSQ2d1TGk0cE9pQlNaV0ZqZENCb1lYTWdiV0ZrWlNCaGJpQnBiblpoYkdsa0lHRnpjM1Z0Y0hScGIyNGdZV0p2ZFhRZ0p5QXJYRzRnSUNBZ0ozUm9aU0JFVDAwZ2FHbGxjbUZ5WTJoNUxpQkZlSEJsWTNSbFpDQmdKWE5nSUhSdklHSmxJR0Z1SUdGdVkyVnpkRzl5SUc5bUlHQWxjMkF1Snl4Y2JpQWdJQ0JoYm1ObGMzUnZja2xFTEZ4dUlDQWdJR1JsYzNScGJtRjBhVzl1U1VSY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENocGMwRnVZMlZ6ZEc5eVNVUlBaaWhoYm1ObGMzUnZja2xFTENCa1pYTjBhVzVoZEdsdmJrbEVLU2twTzF4dUlDQnBaaUFvWVc1alpYTjBiM0pKUkNBOVBUMGdaR1Z6ZEdsdVlYUnBiMjVKUkNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJoYm1ObGMzUnZja2xFTzF4dUlDQjlYRzRnSUM4dklGTnJhWEFnYjNabGNpQjBhR1VnWVc1alpYTjBiM0lnWVc1a0lIUm9aU0JwYlcxbFpHbGhkR1VnYzJWd1lYSmhkRzl5TGlCVWNtRjJaWEp6WlNCMWJuUnBiQ0IzWlNCb2FYUmNiaUFnTHk4Z1lXNXZkR2hsY2lCelpYQmhjbUYwYjNJZ2IzSWdkMlVnY21WaFkyZ2dkR2hsSUdWdVpDQnZaaUJnWkdWemRHbHVZWFJwYjI1SlJHQXVYRzRnSUhaaGNpQnpkR0Z5ZENBOUlHRnVZMlZ6ZEc5eVNVUXViR1Z1WjNSb0lDc2dVMFZRUVZKQlZFOVNYMHhGVGtkVVNEdGNiaUFnZG1GeUlHazdYRzRnSUdadmNpQW9hU0E5SUhOMFlYSjBPeUJwSUR3Z1pHVnpkR2x1WVhScGIyNUpSQzVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdsbUlDaHBjMEp2ZFc1a1lYSjVLR1JsYzNScGJtRjBhVzl1U1VRc0lHa3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUdSbGMzUnBibUYwYVc5dVNVUXVjM1ZpYzNSeUtEQXNJR2twTzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRsZEhNZ2RHaGxJRzVsWVhKbGMzUWdZMjl0Ylc5dUlHRnVZMlZ6ZEc5eUlFbEVJRzltSUhSM2J5QkpSSE11WEc0Z0tseHVJQ29nVlhOcGJtY2dkR2hwY3lCSlJDQnpZMmhsYldVc0lIUm9aU0J1WldGeVpYTjBJR052YlcxdmJpQmhibU5sYzNSdmNpQkpSQ0JwY3lCMGFHVWdiRzl1WjJWemRDQmpiMjF0YjI1Y2JpQXFJSEJ5WldacGVDQnZaaUIwYUdVZ2RIZHZJRWxFY3lCMGFHRjBJR2x0YldWa2FXRjBaV3g1SUhCeVpXTmxaR1ZrSUdFZ1hDSnRZWEpyWlhKY0lpQnBiaUJpYjNSb0lITjBjbWx1WjNNdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUc5dVpVbEVYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEhkdlNVUmNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnVG1WaGNtVnpkQ0JqYjIxdGIyNGdZVzVqWlhOMGIzSWdTVVFzSUc5eUlIUm9aU0JsYlhCMGVTQnpkSEpwYm1jZ2FXWWdibTl1WlM1Y2JpQXFJRUJ3Y21sMllYUmxYRzRnS2k5Y2JtWjFibU4wYVc5dUlHZGxkRVpwY25OMFEyOXRiVzl1UVc1alpYTjBiM0pKUkNodmJtVkpSQ3dnZEhkdlNVUXBJSHRjYmlBZ2RtRnlJRzFwYmt4bGJtZDBhQ0E5SUUxaGRHZ3ViV2x1S0c5dVpVbEVMbXhsYm1kMGFDd2dkSGR2U1VRdWJHVnVaM1JvS1R0Y2JpQWdhV1lnS0cxcGJreGxibWQwYUNBOVBUMGdNQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQW5KenRjYmlBZ2ZWeHVJQ0IyWVhJZ2JHRnpkRU52YlcxdmJrMWhjbXRsY2tsdVpHVjRJRDBnTUR0Y2JpQWdMeThnVlhObElHQThQV0FnZEc4Z2RISmhkbVZ5YzJVZ2RXNTBhV3dnZEdobElGd2lSVTlNWENJZ2IyWWdkR2hsSUhOb2IzSjBaWElnYzNSeWFXNW5MbHh1SUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOFBTQnRhVzVNWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdsbUlDaHBjMEp2ZFc1a1lYSjVLRzl1WlVsRUxDQnBLU0FtSmlCcGMwSnZkVzVrWVhKNUtIUjNiMGxFTENCcEtTa2dlMXh1SUNBZ0lDQWdiR0Z6ZEVOdmJXMXZiazFoY210bGNrbHVaR1Y0SUQwZ2FUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHOXVaVWxFTG1Ob1lYSkJkQ2hwS1NBaFBUMGdkSGR2U1VRdVkyaGhja0YwS0drcEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnZG1GeUlHeHZibWRsYzNSRGIyMXRiMjVKUkNBOUlHOXVaVWxFTG5OMVluTjBjaWd3TENCc1lYTjBRMjl0Ylc5dVRXRnlhMlZ5U1c1a1pYZ3BPMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJR2x6Vm1Gc2FXUkpSQ2hzYjI1blpYTjBRMjl0Ylc5dVNVUXBMRnh1SUNBZ0lDZG5aWFJHYVhKemRFTnZiVzF2YmtGdVkyVnpkRzl5U1VRb0pYTXNJQ1Z6S1RvZ1JYaHdaV04wWldRZ1lTQjJZV3hwWkNCU1pXRmpkQ0JFVDAwZ1NVUTZJQ1Z6Snl4Y2JpQWdJQ0J2Ym1WSlJDeGNiaUFnSUNCMGQyOUpSQ3hjYmlBZ0lDQnNiMjVuWlhOMFEyOXRiVzl1U1VSY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENocGMxWmhiR2xrU1VRb2JHOXVaMlZ6ZEVOdmJXMXZia2xFS1NrcE8xeHVJQ0J5WlhSMWNtNGdiRzl1WjJWemRFTnZiVzF2YmtsRU8xeHVmVnh1WEc0dktpcGNiaUFxSUZSeVlYWmxjbk5sY3lCMGFHVWdjR0Z5Wlc1MElIQmhkR2dnWW1WMGQyVmxiaUIwZDI4Z1NVUnpJQ2hsYVhSb1pYSWdkWEFnYjNJZ1pHOTNiaWt1SUZSb1pTQkpSSE1nYlhWemRGeHVJQ29nYm05MElHSmxJSFJvWlNCellXMWxMQ0JoYm1RZ2RHaGxjbVVnYlhWemRDQmxlR2x6ZENCaElIQmhjbVZ1ZENCd1lYUm9JR0psZEhkbFpXNGdkR2hsYlM0Z1NXWWdkR2hsWEc0Z0tpQmpZV3hzWW1GamF5QnlaWFIxY201eklHQm1ZV3h6WldBc0lIUnlZWFpsY25OaGJDQnBjeUJ6ZEc5d2NHVmtMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdQM04wY21sdVozMGdjM1JoY25RZ1NVUWdZWFFnZDJocFkyZ2dkRzhnYzNSaGNuUWdkSEpoZG1WeWMyRnNMbHh1SUNvZ1FIQmhjbUZ0SUhzL2MzUnlhVzVuZlNCemRHOXdJRWxFSUdGMElIZG9hV05vSUhSdklHVnVaQ0IwY21GMlpYSnpZV3d1WEc0Z0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQmpZaUJEWVd4c1ltRmpheUIwYnlCcGJuWnZhMlVnWldGamFDQkpSQ0IzYVhSb0xseHVJQ29nUUhCaGNtRnRJSHMvWW05dmJHVmhibjBnYzJ0cGNFWnBjbk4wSUZkb1pYUm9aWElnYjNJZ2JtOTBJSFJ2SUhOcmFYQWdkR2hsSUdacGNuTjBJRzV2WkdVdVhHNGdLaUJBY0dGeVlXMGdlejlpYjI5c1pXRnVmU0J6YTJsd1RHRnpkQ0JYYUdWMGFHVnlJRzl5SUc1dmRDQjBieUJ6YTJsd0lIUm9aU0JzWVhOMElHNXZaR1V1WEc0Z0tpQkFjSEpwZG1GMFpWeHVJQ292WEc1bWRXNWpkR2x2YmlCMGNtRjJaWEp6WlZCaGNtVnVkRkJoZEdnb2MzUmhjblFzSUhOMGIzQXNJR05pTENCaGNtY3NJSE5yYVhCR2FYSnpkQ3dnYzJ0cGNFeGhjM1FwSUh0Y2JpQWdjM1JoY25RZ1BTQnpkR0Z5ZENCOGZDQW5KenRjYmlBZ2MzUnZjQ0E5SUhOMGIzQWdmSHdnSnljN1hHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ2MzUmhjblFnSVQwOUlITjBiM0FzWEc0Z0lDQWdKM1J5WVhabGNuTmxVR0Z5Wlc1MFVHRjBhQ2d1TGk0cE9pQkRZVzV1YjNRZ2RISmhkbVZ5YzJVZ1puSnZiU0JoYm1RZ2RHOGdkR2hsSUhOaGJXVWdTVVFzSUdBbGMyQXVKeXhjYmlBZ0lDQnpkR0Z5ZEZ4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0hOMFlYSjBJQ0U5UFNCemRHOXdLU2s3WEc0Z0lIWmhjaUIwY21GMlpYSnpaVlZ3SUQwZ2FYTkJibU5sYzNSdmNrbEVUMllvYzNSdmNDd2djM1JoY25RcE8xeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lIUnlZWFpsY25ObFZYQWdmSHdnYVhOQmJtTmxjM1J2Y2tsRVQyWW9jM1JoY25Rc0lITjBiM0FwTEZ4dUlDQWdJQ2QwY21GMlpYSnpaVkJoY21WdWRGQmhkR2dvSlhNc0lDVnpMQ0F1TGk0cE9pQkRZVzV1YjNRZ2RISmhkbVZ5YzJVZ1puSnZiU0IwZDI4Z1NVUnpJSFJvWVhRZ1pHOGdKeUFyWEc0Z0lDQWdKMjV2ZENCb1lYWmxJR0VnY0dGeVpXNTBJSEJoZEdndUp5eGNiaUFnSUNCemRHRnlkQ3hjYmlBZ0lDQnpkRzl3WEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvZEhKaGRtVnljMlZWY0NCOGZDQnBjMEZ1WTJWemRHOXlTVVJQWmloemRHRnlkQ3dnYzNSdmNDa3BLVHRjYmlBZ0x5OGdWSEpoZG1WeWMyVWdabkp2YlNCZ2MzUmhjblJnSUhSdklHQnpkRzl3WUNCdmJtVWdaR1Z3ZEdnZ1lYUWdZU0IwYVcxbExseHVJQ0IyWVhJZ1pHVndkR2dnUFNBd08xeHVJQ0IyWVhJZ2RISmhkbVZ5YzJVZ1BTQjBjbUYyWlhKelpWVndJRDhnWjJWMFVHRnlaVzUwU1VRZ09pQm5aWFJPWlhoMFJHVnpZMlZ1WkdGdWRFbEVPMXh1SUNCbWIzSWdLSFpoY2lCcFpDQTlJSE4wWVhKME95QXZLaUIxYm5ScGJDQmljbVZoYXlBcUx6c2dhV1FnUFNCMGNtRjJaWEp6WlNocFpDd2djM1J2Y0NrcElIdGNiaUFnSUNCMllYSWdjbVYwTzF4dUlDQWdJR2xtSUNnb0lYTnJhWEJHYVhKemRDQjhmQ0JwWkNBaFBUMGdjM1JoY25RcElDWW1JQ2doYzJ0cGNFeGhjM1FnZkh3Z2FXUWdJVDA5SUhOMGIzQXBLU0I3WEc0Z0lDQWdJQ0J5WlhRZ1BTQmpZaWhwWkN3Z2RISmhkbVZ5YzJWVmNDd2dZWEpuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hKbGRDQTlQVDBnWm1Gc2MyVWdmSHdnYVdRZ1BUMDlJSE4wYjNBcElIdGNiaUFnSUNBZ0lDOHZJRTl1YkhrZ1luSmxZV3NnTHk5aFpuUmxjaTh2SUhacGMybDBhVzVuSUdCemRHOXdZQzVjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdaR1Z3ZEdnckt5QThJRTFCV0Y5VVVrVkZYMFJGVUZSSUxGeHVJQ0FnSUNBZ0ozUnlZWFpsY25ObFVHRnlaVzUwVUdGMGFDZ2xjeXdnSlhNc0lDNHVMaWs2SUVSbGRHVmpkR1ZrSUdGdUlHbHVabWx1YVhSbElHeHZiM0FnZDJocGJHVWdKeUFyWEc0Z0lDQWdJQ0FuZEhKaGRtVnljMmx1WnlCMGFHVWdVbVZoWTNRZ1JFOU5JRWxFSUhSeVpXVXVJRlJvYVhNZ2JXRjVJR0psSUdSMVpTQjBieUJ0WVd4bWIzSnRaV1FnU1VSek9pQWxjeWNzWEc0Z0lDQWdJQ0J6ZEdGeWRDd2djM1J2Y0Z4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1pHVndkR2dyS3lBOElFMUJXRjlVVWtWRlgwUkZVRlJJS1NrN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQk5ZVzVoWjJWeklIUm9aU0JKUkhNZ1lYTnphV2R1WldRZ2RHOGdSRTlOSUhKbGNISmxjMlZ1ZEdGMGFXOXVjeUJ2WmlCU1pXRmpkQ0JqYjIxd2IyNWxiblJ6TGlCVWFHbHpYRzRnS2lCMWMyVnpJR0VnYzNCbFkybG1hV01nYzJOb1pXMWxJR2x1SUc5eVpHVnlJSFJ2SUhSeVlYWmxjbk5sSUhSb1pTQkVUMDBnWldabWFXTnBaVzUwYkhrZ0tHVXVaeTRnYVc1Y2JpQXFJRzl5WkdWeUlIUnZJSE5wYlhWc1lYUmxJR1YyWlc1MGN5a3VYRzRnS2x4dUlDb2dRR2x1ZEdWeWJtRnNYRzRnS2k5Y2JuWmhjaUJTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3lBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1EyOXVjM1J5ZFdOMGN5QmhJRkpsWVdOMElISnZiM1FnU1VSY2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JCSUZKbFlXTjBJSEp2YjNRZ1NVUXVYRzRnSUNBcUwxeHVJQ0JqY21WaGRHVlNaV0ZqZEZKdmIzUkpSRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJR2RsZEZKbFlXTjBVbTl2ZEVsRVUzUnlhVzVuS0ZKbFlXTjBVbTl2ZEVsdVpHVjRMbU55WldGMFpWSmxZV04wVW05dmRFbHVaR1Y0S0NrcE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYjI1emRISjFZM1J6SUdFZ1VtVmhZM1FnU1VRZ1lua2dhbTlwYm1sdVp5QmhJSEp2YjNRZ1NVUWdkMmwwYUNCaElHNWhiV1V1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCeWIyOTBTVVFnVW05dmRDQkpSQ0J2WmlCaElIQmhjbVZ1ZENCamIyMXdiMjVsYm5RdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbElFRWdZMjl0Y0c5dVpXNTBKM01nYm1GdFpTQW9ZWE1nWm14aGRIUmxibVZrSUdOb2FXeGtjbVZ1S1M1Y2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JCSUZKbFlXTjBJRWxFTGx4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUdOeVpXRjBaVkpsWVdOMFNVUTZJR1oxYm1OMGFXOXVLSEp2YjNSSlJDd2dibUZ0WlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ5YjI5MFNVUWdLeUJ1WVcxbE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJIWlhSeklIUm9aU0JFVDAwZ1NVUWdiMllnZEdobElGSmxZV04wSUdOdmJYQnZibVZ1ZENCMGFHRjBJR2x6SUhSb1pTQnliMjkwSUc5bUlIUm9aU0IwY21WbElIUm9ZWFJjYmlBZ0lDb2dZMjl1ZEdGcGJuTWdkR2hsSUZKbFlXTjBJR052YlhCdmJtVnVkQ0IzYVhSb0lIUm9aU0J6ZFhCd2JHbGxaQ0JFVDAwZ1NVUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCRVQwMGdTVVFnYjJZZ1lTQlNaV0ZqZENCamIyMXdiMjVsYm5RdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZXo5emRISnBibWQ5SUVSUFRTQkpSQ0J2WmlCMGFHVWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MElIUm9ZWFFnYVhNZ2RHaGxJSEp2YjNRdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1oyVjBVbVZoWTNSU2IyOTBTVVJHY205dFRtOWtaVWxFT2lCbWRXNWpkR2x2YmlocFpDa2dlMXh1SUNBZ0lHbG1JQ2hwWkNBbUppQnBaQzVqYUdGeVFYUW9NQ2tnUFQwOUlGTkZVRUZTUVZSUFVpQW1KaUJwWkM1c1pXNW5kR2dnUGlBeEtTQjdYRzRnSUNBZ0lDQjJZWElnYVc1a1pYZ2dQU0JwWkM1cGJtUmxlRTltS0ZORlVFRlNRVlJQVWl3Z01TazdYRzRnSUNBZ0lDQnlaWFIxY200Z2FXNWtaWGdnUGlBdE1TQS9JR2xrTG5OMVluTjBjaWd3TENCcGJtUmxlQ2tnT2lCcFpEdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJ5WVhabGNuTmxjeUIwYUdVZ1NVUWdhR2xsY21GeVkyaDVJR0Z1WkNCcGJuWnZhMlZ6SUhSb1pTQnpkWEJ3YkdsbFpDQmdZMkpnSUc5dUlHRnVlU0JKUkhNZ2RHaGhkRnh1SUNBZ0tpQnphRzkxYkdRZ2QyOTFiR1FnY21WalpXbDJaU0JoSUdCdGIzVnpaVVZ1ZEdWeVlDQnZjaUJnYlc5MWMyVk1aV0YyWldBZ1pYWmxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFNVBWRVU2SUVSdlpYTWdibTkwSUdsdWRtOXJaU0IwYUdVZ1kyRnNiR0poWTJzZ2IyNGdkR2hsSUc1bFlYSmxjM1FnWTI5dGJXOXVJR0Z1WTJWemRHOXlJR0psWTJGMWMyVmNiaUFnSUNvZ2JtOTBhR2x1WnlCY0ltVnVkR1Z5WldSY0lpQnZjaUJjSW14bFpuUmNJaUIwYUdGMElHVnNaVzFsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnNaV0YyWlVsRUlFbEVJR0psYVc1bklHeGxablF1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmxiblJsY2tsRUlFbEVJR0psYVc1bklHVnVkR1Z5WldRdVhHNGdJQ0FxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjU5SUdOaUlFTmhiR3hpWVdOcklIUnZJR2x1ZG05clpTQnZiaUJsWVdOb0lHVnVkR1Z5WldRdmJHVm1kQ0JKUkM1Y2JpQWdJQ29nUUhCaGNtRnRJSHNxZlNCMWNFRnlaeUJCY21kMWJXVnVkQ0IwYnlCcGJuWnZhMlVnZEdobElHTmhiR3hpWVdOcklIZHBkR2dnYjI0Z2JHVm1kQ0JKUkhNdVhHNGdJQ0FxSUVCd1lYSmhiU0I3S24wZ1pHOTNia0Z5WnlCQmNtZDFiV1Z1ZENCMGJ5QnBiblp2YTJVZ2RHaGxJR05oYkd4aVlXTnJJSGRwZEdnZ2IyNGdaVzUwWlhKbFpDQkpSSE11WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnZEhKaGRtVnljMlZGYm5SbGNreGxZWFpsT2lCbWRXNWpkR2x2Ymloc1pXRjJaVWxFTENCbGJuUmxja2xFTENCallpd2dkWEJCY21jc0lHUnZkMjVCY21jcElIdGNiaUFnSUNCMllYSWdZVzVqWlhOMGIzSkpSQ0E5SUdkbGRFWnBjbk4wUTI5dGJXOXVRVzVqWlhOMGIzSkpSQ2hzWldGMlpVbEVMQ0JsYm5SbGNrbEVLVHRjYmlBZ0lDQnBaaUFvWVc1alpYTjBiM0pKUkNBaFBUMGdiR1ZoZG1WSlJDa2dlMXh1SUNBZ0lDQWdkSEpoZG1WeWMyVlFZWEpsYm5SUVlYUm9LR3hsWVhabFNVUXNJR0Z1WTJWemRHOXlTVVFzSUdOaUxDQjFjRUZ5Wnl3Z1ptRnNjMlVzSUhSeWRXVXBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ZVzVqWlhOMGIzSkpSQ0FoUFQwZ1pXNTBaWEpKUkNrZ2UxeHVJQ0FnSUNBZ2RISmhkbVZ5YzJWUVlYSmxiblJRWVhSb0tHRnVZMlZ6ZEc5eVNVUXNJR1Z1ZEdWeVNVUXNJR05pTENCa2IzZHVRWEpuTENCMGNuVmxMQ0JtWVd4elpTazdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJUYVcxMWJHRjBaWE1nZEdobElIUnlZWFpsY25OaGJDQnZaaUJoSUhSM2J5MXdhR0Z6WlN3Z1kyRndkSFZ5WlM5aWRXSmliR1VnWlhabGJuUWdaR2x6Y0dGMFkyZ3VYRzRnSUNBcVhHNGdJQ0FxSUU1UFZFVTZJRlJvYVhNZ2RISmhkbVZ5YzJGc0lHaGhjSEJsYm5NZ2IyNGdTVVJ6SUhkcGRHaHZkWFFnZEc5MVkyaHBibWNnZEdobElFUlBUUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhSaGNtZGxkRWxFSUVsRUlHOW1JSFJvWlNCMFlYSm5aWFFnYm05a1pTNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2Ym4wZ1kySWdRMkZzYkdKaFkyc2dkRzhnYVc1MmIydGxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2V5cDlJR0Z5WnlCQmNtZDFiV1Z1ZENCMGJ5QnBiblp2YTJVZ2RHaGxJR05oYkd4aVlXTnJJSGRwZEdndVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ2RISmhkbVZ5YzJWVWQyOVFhR0Z6WlRvZ1puVnVZM1JwYjI0b2RHRnlaMlYwU1VRc0lHTmlMQ0JoY21jcElIdGNiaUFnSUNCcFppQW9kR0Z5WjJWMFNVUXBJSHRjYmlBZ0lDQWdJSFJ5WVhabGNuTmxVR0Z5Wlc1MFVHRjBhQ2duSnl3Z2RHRnlaMlYwU1VRc0lHTmlMQ0JoY21jc0lIUnlkV1VzSUdaaGJITmxLVHRjYmlBZ0lDQWdJSFJ5WVhabGNuTmxVR0Z5Wlc1MFVHRjBhQ2gwWVhKblpYUkpSQ3dnSnljc0lHTmlMQ0JoY21jc0lHWmhiSE5sTENCMGNuVmxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZSeVlYWmxjbk5sSUdFZ2JtOWtaU0JKUkN3Z1kyRnNiR2x1WnlCMGFHVWdjM1Z3Y0d4cFpXUWdZR05pWUNCbWIzSWdaV0ZqYUNCaGJtTmxjM1J2Y2lCSlJDNGdSbTl5WEc0Z0lDQXFJR1Y0WVcxd2JHVXNJSEJoYzNOcGJtY2dZQzR3TGlSeWIzY3RNQzR4WUNCM2IzVnNaQ0J5WlhOMWJIUWdhVzRnWUdOaVlDQm5aWFIwYVc1bklHTmhiR3hsWkZ4dUlDQWdLaUIzYVhSb0lHQXVNR0FzSUdBdU1DNGtjbTkzTFRCZ0xDQmhibVFnWUM0d0xpUnliM2N0TUM0eFlDNWNiaUFnSUNwY2JpQWdJQ29nVGs5VVJUb2dWR2hwY3lCMGNtRjJaWEp6WVd3Z2FHRndjR1Z1Y3lCdmJpQkpSSE1nZDJsMGFHOTFkQ0IwYjNWamFHbHVaeUIwYUdVZ1JFOU5MbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEdGeVoyVjBTVVFnU1VRZ2IyWWdkR2hsSUhSaGNtZGxkQ0J1YjJSbExseHVJQ0FnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCallpQkRZV3hzWW1GamF5QjBieUJwYm5admEyVXVYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdZWEpuSUVGeVozVnRaVzUwSUhSdklHbHVkbTlyWlNCMGFHVWdZMkZzYkdKaFkyc2dkMmwwYUM1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCMGNtRjJaWEp6WlVGdVkyVnpkRzl5Y3pvZ1puVnVZM1JwYjI0b2RHRnlaMlYwU1VRc0lHTmlMQ0JoY21jcElIdGNiaUFnSUNCMGNtRjJaWEp6WlZCaGNtVnVkRkJoZEdnb0p5Y3NJSFJoY21kbGRFbEVMQ0JqWWl3Z1lYSm5MQ0IwY25WbExDQm1ZV3h6WlNrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVY0Y0c5elpXUWdabTl5SUhWdWFYUWdkR1Z6ZEdsdVp5NWNiaUFnSUNvZ1FIQnlhWFpoZEdWY2JpQWdJQ292WEc0Z0lGOW5aWFJHYVhKemRFTnZiVzF2YmtGdVkyVnpkRzl5U1VRNklHZGxkRVpwY25OMFEyOXRiVzl1UVc1alpYTjBiM0pKUkN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUlhod2IzTmxaQ0JtYjNJZ2RXNXBkQ0IwWlhOMGFXNW5MbHh1SUNBZ0tpQkFjSEpwZG1GMFpWeHVJQ0FnS2k5Y2JpQWdYMmRsZEU1bGVIUkVaWE5qWlc1a1lXNTBTVVE2SUdkbGRFNWxlSFJFWlhOalpXNWtZVzUwU1VRc1hHNWNiaUFnYVhOQmJtTmxjM1J2Y2tsRVQyWTZJR2x6UVc1alpYTjBiM0pKUkU5bUxGeHVYRzRnSUZORlVFRlNRVlJQVWpvZ1UwVlFRVkpCVkU5U1hHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JKYm5OMFlXNWpaVWhoYm1Sc1pYTTdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEluc3RhbmNlTWFwXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIGBSZWFjdEluc3RhbmNlTWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMgZmFjaW5nIHN0YXRlZnVsXG4gKiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICh2YWx1ZSkuIFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gKiB0byBpbnRlcm5hbCBtZXRob2RzLlxuICovXG5cbi8vIFRPRE86IFJlcGxhY2UgdGhpcyB3aXRoIEVTNjogdmFyIFJlYWN0SW5zdGFuY2VNYXAgPSBuZXcgTWFwKCk7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHtcblxuICAvKipcbiAgICogVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCBgZGVsZXRlYCBidXQgd2UnZCBoYXZlIHRvIG1ha2Ugc3VyZSB0byBhbHdheXNcbiAgICogdHJhbnNmb3JtIHRoZXNlIHRvIHN0cmluZ3MgZm9yIElFIHN1cHBvcnQuIFdoZW4gdGhpcyB0cmFuc2Zvcm0gaXMgZnVsbHlcbiAgICogc3VwcG9ydGVkIHdlIGNhbiByZW5hbWUgaXQuXG4gICAqL1xuICByZW1vdmU6IGZ1bmN0aW9uKGtleSkge1xuICAgIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICB9LFxuXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlO1xuICB9LFxuXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlICE9PSB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAga2V5Ll9yZWFjdEludGVybmFsSW5zdGFuY2UgPSB2YWx1ZTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5zdGFuY2VNYXA7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0TGlmZUN5Y2xlXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFRoaXMgbW9kdWxlIG1hbmFnZXMgdGhlIGJvb2trZWVwaW5nIHdoZW4gYSBjb21wb25lbnQgaXMgaW4gdGhlIHByb2Nlc3NcbiAqIG9mIGJlaW5nIG1vdW50ZWQgb3IgYmVpbmcgdW5tb3VudGVkLiBUaGlzIGlzIHVzZWQgYXMgYSB3YXkgdG8gZW5mb3JjZVxuICogaW52YXJpYW50cyAob3Igd2FybmluZ3MpIHdoZW4gaXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGNhbGxcbiAqIHNldFN0YXRlL2ZvcmNlVXBkYXRlLlxuICpcbiAqIGN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2U6IER1cmluZyB0aGUgY29uc3RydWN0aW9uIHBoYXNlLCBpdCBpcyBub3QgcG9zc2libGVcbiAqIHRvIHRyaWdnZXIgYW4gdXBkYXRlIHNpbmNlIHRoZSBpbnN0YW5jZSBpcyBub3QgZnVsbHkgbW91bnRlZCB5ZXQuIEhvd2V2ZXIsIHdlXG4gKiBjdXJyZW50bHkgYWxsb3cgdGhpcyBhcyBhIGNvbnZlbmllbmNlIGZvciBtdXRhdGluZyB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAqXG4gKiBjdXJyZW50bHlVbm1vdW50aW5nSW5zdGFuY2U6IER1cmluZyB0aGUgdW5tb3VudGluZyBwaGFzZSwgdGhlIGluc3RhbmNlIGlzXG4gKiBzdGlsbCBtb3VudGVkIGFuZCBjYW4gdGhlcmVmb3JlIHNjaGVkdWxlIGFuIHVwZGF0ZS4gSG93ZXZlciwgdGhpcyBpcyBub3RcbiAqIHJlY29tbWVuZGVkIGFuZCBwcm9iYWJseSBhbiBlcnJvciBzaW5jZSBpdCdzIGFib3V0IHRvIGJlIHVubW91bnRlZC5cbiAqIFRoZXJlZm9yZSB3ZSBzdGlsbCB3YW50IHRvIHRyaWdnZXIgaW4gYW4gZXJyb3IgZm9yIHRoYXQgY2FzZS5cbiAqL1xuXG52YXIgUmVhY3RMaWZlQ3ljbGUgPSB7XG4gIGN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2U6IG51bGwsXG4gIGN1cnJlbnRseVVubW91bnRpbmdJbnN0YW5jZTogbnVsbFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdExpZmVDeWNsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE1hcmt1cENoZWNrc3VtXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWRsZXIzMiA9IHJlcXVpcmUoXCIuL2FkbGVyMzJcIik7XG5cbnZhciBSZWFjdE1hcmt1cENoZWNrc3VtID0ge1xuICBDSEVDS1NVTV9BVFRSX05BTUU6ICdkYXRhLXJlYWN0LWNoZWNrc3VtJyxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgc3RyaW5nXG4gICAqIEByZXR1cm4ge3N0cmluZ30gTWFya3VwIHN0cmluZyB3aXRoIGNoZWNrc3VtIGF0dHJpYnV0ZSBhdHRhY2hlZFxuICAgKi9cbiAgYWRkQ2hlY2tzdW1Ub01hcmt1cDogZnVuY3Rpb24obWFya3VwKSB7XG4gICAgdmFyIGNoZWNrc3VtID0gYWRsZXIzMihtYXJrdXApO1xuICAgIHJldHVybiBtYXJrdXAucmVwbGFjZShcbiAgICAgICc+JyxcbiAgICAgICcgJyArIFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FICsgJz1cIicgKyBjaGVja3N1bSArICdcIj4nXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCB0byB1c2VcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHJvb3QgUmVhY3QgZWxlbWVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIG1hcmt1cCBpcyB0aGUgc2FtZVxuICAgKi9cbiAgY2FuUmV1c2VNYXJrdXA6IGZ1bmN0aW9uKG1hcmt1cCwgZWxlbWVudCkge1xuICAgIHZhciBleGlzdGluZ0NoZWNrc3VtID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXG4gICAgICBSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRVxuICAgICk7XG4gICAgZXhpc3RpbmdDaGVja3N1bSA9IGV4aXN0aW5nQ2hlY2tzdW0gJiYgcGFyc2VJbnQoZXhpc3RpbmdDaGVja3N1bSwgMTApO1xuICAgIHZhciBtYXJrdXBDaGVja3N1bSA9IGFkbGVyMzIobWFya3VwKTtcbiAgICByZXR1cm4gbWFya3VwQ2hlY2tzdW0gPT09IGV4aXN0aW5nQ2hlY2tzdW07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RNYXJrdXBDaGVja3N1bTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RNb3VudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZShcIi4vRE9NUHJvcGVydHlcIik7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFZhbGlkYXRvclwiKTtcbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbXB0eUNvbXBvbmVudFwiKTtcbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzXCIpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlTWFwXCIpO1xudmFyIFJlYWN0TWFya3VwQ2hlY2tzdW0gPSByZXF1aXJlKFwiLi9SZWFjdE1hcmt1cENoZWNrc3VtXCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdFJlY29uY2lsZXJcIik7XG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlUXVldWVcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgZW1wdHlPYmplY3QgPSByZXF1aXJlKFwiLi9lbXB0eU9iamVjdFwiKTtcbnZhciBjb250YWluc05vZGUgPSByZXF1aXJlKFwiLi9jb250YWluc05vZGVcIik7XG52YXIgZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyID0gcmVxdWlyZShcIi4vZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyXCIpO1xudmFyIGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50XCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciBzZXRJbm5lckhUTUwgPSByZXF1aXJlKFwiLi9zZXRJbm5lckhUTUxcIik7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9zaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIFNFUEFSQVRPUiA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLlNFUEFSQVRPUjtcblxudmFyIEFUVFJfTkFNRSA9IERPTVByb3BlcnR5LklEX0FUVFJJQlVURV9OQU1FO1xudmFyIG5vZGVDYWNoZSA9IHt9O1xuXG52YXIgRUxFTUVOVF9OT0RFX1RZUEUgPSAxO1xudmFyIERPQ19OT0RFX1RZUEUgPSA5O1xuXG4vKiogTWFwcGluZyBmcm9tIHJlYWN0Um9vdElEIHRvIFJlYWN0IGNvbXBvbmVudCBpbnN0YW5jZS4gKi9cbnZhciBpbnN0YW5jZXNCeVJlYWN0Um9vdElEID0ge307XG5cbi8qKiBNYXBwaW5nIGZyb20gcmVhY3RSb290SUQgdG8gYGNvbnRhaW5lcmAgbm9kZXMuICovXG52YXIgY29udGFpbmVyc0J5UmVhY3RSb290SUQgPSB7fTtcblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAvKiogX19ERVZfXy1vbmx5IG1hcHBpbmcgZnJvbSByZWFjdFJvb3RJRCB0byByb290IGVsZW1lbnRzLiAqL1xuICB2YXIgcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRCA9IHt9O1xufVxuXG4vLyBVc2VkIHRvIHN0b3JlIGJyZWFkdGgtZmlyc3Qgc2VhcmNoIHN0YXRlIGluIGZpbmRDb21wb25lbnRSb290LlxudmFyIGZpbmRDb21wb25lbnRSb290UmV1c2FibGVBcnJheSA9IFtdO1xuXG4vKipcbiAqIEZpbmRzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gKiB0aGF0J3Mgbm90IGNvbW1vbiBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gc3RyaW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIHdoZXJlIHRoZSBzdHJpbmdzIGRpdmVyZ2VcbiAqL1xuZnVuY3Rpb24gZmlyc3REaWZmZXJlbmNlSW5kZXgoc3RyaW5nMSwgc3RyaW5nMikge1xuICB2YXIgbWluTGVuID0gTWF0aC5taW4oc3RyaW5nMS5sZW5ndGgsIHN0cmluZzIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW5MZW47IGkrKykge1xuICAgIGlmIChzdHJpbmcxLmNoYXJBdChpKSAhPT0gc3RyaW5nMi5jaGFyQXQoaSkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nMS5sZW5ndGggPT09IHN0cmluZzIubGVuZ3RoID8gLTEgOiBtaW5MZW47XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdGhhdCBtYXkgY29udGFpbiBhIFJlYWN0IGNvbXBvbmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IEEgXCJyZWFjdFJvb3RcIiBJRCwgaWYgYSBSZWFjdCBjb21wb25lbnQgaXMgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdElEKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgcmV0dXJuIHJvb3RFbGVtZW50ICYmIFJlYWN0TW91bnQuZ2V0SUQocm9vdEVsZW1lbnQpO1xufVxuXG4vKipcbiAqIEFjY2Vzc2luZyBub2RlW0FUVFJfTkFNRV0gb3IgY2FsbGluZyBnZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKSBvbiBhIGZvcm1cbiAqIGVsZW1lbnQgY2FuIHJldHVybiBpdHMgY29udHJvbCB3aG9zZSBuYW1lIG9yIElEIGVxdWFscyBBVFRSX05BTUUuIEFsbFxuICogRE9NIG5vZGVzIHN1cHBvcnQgYGdldEF0dHJpYnV0ZU5vZGVgIGJ1dCB0aGlzIGNhbiBhbHNvIGdldCBjYWxsZWQgb25cbiAqIG90aGVyIG9iamVjdHMgc28ganVzdCByZXR1cm4gJycgaWYgd2UncmUgZ2l2ZW4gc29tZXRoaW5nIG90aGVyIHRoYW4gYVxuICogRE9NIG5vZGUgKHN1Y2ggYXMgd2luZG93KS5cbiAqXG4gKiBAcGFyYW0gez9ET01FbGVtZW50fERPTVdpbmRvd3xET01Eb2N1bWVudHxET01UZXh0Tm9kZX0gbm9kZSBET00gbm9kZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gSUQgb2YgdGhlIHN1cHBsaWVkIGBkb21Ob2RlYC5cbiAqL1xuZnVuY3Rpb24gZ2V0SUQobm9kZSkge1xuICB2YXIgaWQgPSBpbnRlcm5hbEdldElEKG5vZGUpO1xuICBpZiAoaWQpIHtcbiAgICBpZiAobm9kZUNhY2hlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgdmFyIGNhY2hlZCA9IG5vZGVDYWNoZVtpZF07XG4gICAgICBpZiAoY2FjaGVkICE9PSBub2RlKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgIWlzVmFsaWQoY2FjaGVkLCBpZCksXG4gICAgICAgICAgJ1JlYWN0TW91bnQ6IFR3byB2YWxpZCBidXQgdW5lcXVhbCBub2RlcyB3aXRoIHRoZSBzYW1lIGAlc2A6ICVzJyxcbiAgICAgICAgICBBVFRSX05BTUUsIGlkXG4gICAgICAgICkgOiBpbnZhcmlhbnQoIWlzVmFsaWQoY2FjaGVkLCBpZCkpKTtcblxuICAgICAgICBub2RlQ2FjaGVbaWRdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZUNhY2hlW2lkXSA9IG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBpbnRlcm5hbEdldElEKG5vZGUpIHtcbiAgLy8gSWYgbm9kZSBpcyBzb21ldGhpbmcgbGlrZSBhIHdpbmRvdywgZG9jdW1lbnQsIG9yIHRleHQgbm9kZSwgbm9uZSBvZlxuICAvLyB3aGljaCBzdXBwb3J0IGF0dHJpYnV0ZXMgb3IgYSAuZ2V0QXR0cmlidXRlIG1ldGhvZCwgZ3JhY2VmdWxseSByZXR1cm5cbiAgLy8gdGhlIGVtcHR5IHN0cmluZywgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIG1pc3NpbmcuXG4gIHJldHVybiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJfTkFNRSkgfHwgJyc7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgUmVhY3Qtc3BlY2lmaWMgSUQgb2YgdGhlIGdpdmVuIG5vZGUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIFRoZSBET00gbm9kZSB3aG9zZSBJRCB3aWxsIGJlIHNldC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgdmFsdWUgb2YgdGhlIElEIGF0dHJpYnV0ZS5cbiAqL1xuZnVuY3Rpb24gc2V0SUQobm9kZSwgaWQpIHtcbiAgdmFyIG9sZElEID0gaW50ZXJuYWxHZXRJRChub2RlKTtcbiAgaWYgKG9sZElEICE9PSBpZCkge1xuICAgIGRlbGV0ZSBub2RlQ2FjaGVbb2xkSURdO1xuICB9XG4gIG5vZGUuc2V0QXR0cmlidXRlKEFUVFJfTkFNRSwgaWQpO1xuICBub2RlQ2FjaGVbaWRdID0gbm9kZTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgbm9kZSB3aXRoIHRoZSBzdXBwbGllZCBSZWFjdC1nZW5lcmF0ZWQgRE9NIElELlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBBIFJlYWN0LWdlbmVyYXRlZCBET00gSUQuXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fSBET00gbm9kZSB3aXRoIHRoZSBzdXBwbGVkIGBpZGAuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZShpZCkge1xuICBpZiAoIW5vZGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpZCkgfHwgIWlzVmFsaWQobm9kZUNhY2hlW2lkXSwgaWQpKSB7XG4gICAgbm9kZUNhY2hlW2lkXSA9IFJlYWN0TW91bnQuZmluZFJlYWN0Tm9kZUJ5SUQoaWQpO1xuICB9XG4gIHJldHVybiBub2RlQ2FjaGVbaWRdO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBub2RlIHdpdGggdGhlIHN1cHBsaWVkIHB1YmxpYyBSZWFjdCBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0geyp9IGluc3RhbmNlIEEgcHVibGljIFJlYWN0IGluc3RhbmNlLlxuICogQHJldHVybiB7P0RPTUVsZW1lbnR9IERPTSBub2RlIHdpdGggdGhlIHN1cHBsZWQgYGlkYC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXROb2RlRnJvbUluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHZhciBpZCA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKS5fcm9vdE5vZGVJRDtcbiAgaWYgKFJlYWN0RW1wdHlDb21wb25lbnQuaXNOdWxsQ29tcG9uZW50SUQoaWQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFub2RlQ2FjaGUuaGFzT3duUHJvcGVydHkoaWQpIHx8ICFpc1ZhbGlkKG5vZGVDYWNoZVtpZF0sIGlkKSkge1xuICAgIG5vZGVDYWNoZVtpZF0gPSBSZWFjdE1vdW50LmZpbmRSZWFjdE5vZGVCeUlEKGlkKTtcbiAgfVxuICByZXR1cm4gbm9kZUNhY2hlW2lkXTtcbn1cblxuLyoqXG4gKiBBIG5vZGUgaXMgXCJ2YWxpZFwiIGlmIGl0IGlzIGNvbnRhaW5lZCBieSBhIGN1cnJlbnRseSBtb3VudGVkIGNvbnRhaW5lci5cbiAqXG4gKiBUaGlzIG1lYW5zIHRoYXQgdGhlIG5vZGUgZG9lcyBub3QgaGF2ZSB0byBiZSBjb250YWluZWQgYnkgYSBkb2N1bWVudCBpblxuICogb3JkZXIgdG8gYmUgY29uc2lkZXJlZCB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gez9ET01FbGVtZW50fSBub2RlIFRoZSBjYW5kaWRhdGUgRE9NIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIGV4cGVjdGVkIElEIG9mIHRoZSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBjb250YWluZWQgYnkgYSBtb3VudGVkIGNvbnRhaW5lci5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZChub2RlLCBpZCkge1xuICBpZiAobm9kZSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBpbnRlcm5hbEdldElEKG5vZGUpID09PSBpZCxcbiAgICAgICdSZWFjdE1vdW50OiBVbmV4cGVjdGVkIG1vZGlmaWNhdGlvbiBvZiBgJXNgJyxcbiAgICAgIEFUVFJfTkFNRVxuICAgICkgOiBpbnZhcmlhbnQoaW50ZXJuYWxHZXRJRChub2RlKSA9PT0gaWQpKTtcblxuICAgIHZhciBjb250YWluZXIgPSBSZWFjdE1vdW50LmZpbmRSZWFjdENvbnRhaW5lckZvcklEKGlkKTtcbiAgICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5zTm9kZShjb250YWluZXIsIG5vZGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2F1c2VzIHRoZSBjYWNoZSB0byBmb3JnZXQgYWJvdXQgb25lIFJlYWN0LXNwZWNpZmljIElELlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSUQgdG8gZm9yZ2V0LlxuICovXG5mdW5jdGlvbiBwdXJnZUlEKGlkKSB7XG4gIGRlbGV0ZSBub2RlQ2FjaGVbaWRdO1xufVxuXG52YXIgZGVlcGVzdE5vZGVTb0ZhciA9IG51bGw7XG5mdW5jdGlvbiBmaW5kRGVlcGVzdENhY2hlZEFuY2VzdG9ySW1wbChhbmNlc3RvcklEKSB7XG4gIHZhciBhbmNlc3RvciA9IG5vZGVDYWNoZVthbmNlc3RvcklEXTtcbiAgaWYgKGFuY2VzdG9yICYmIGlzVmFsaWQoYW5jZXN0b3IsIGFuY2VzdG9ySUQpKSB7XG4gICAgZGVlcGVzdE5vZGVTb0ZhciA9IGFuY2VzdG9yO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgbm9kZSBpc24ndCBwb3B1bGF0ZWQgaW4gdGhlIGNhY2hlLCBzbyBwcmVzdW1hYmx5IG5vbmUgb2YgaXRzXG4gICAgLy8gZGVzY2VuZGFudHMgYXJlLiBCcmVhayBvdXQgb2YgdGhlIGxvb3AuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBkZWVwZXN0IGNhY2hlZCBub2RlIHdob3NlIElEIGlzIGEgcHJlZml4IG9mIGB0YXJnZXRJRGAuXG4gKi9cbmZ1bmN0aW9uIGZpbmREZWVwZXN0Q2FjaGVkQW5jZXN0b3IodGFyZ2V0SUQpIHtcbiAgZGVlcGVzdE5vZGVTb0ZhciA9IG51bGw7XG4gIFJlYWN0SW5zdGFuY2VIYW5kbGVzLnRyYXZlcnNlQW5jZXN0b3JzKFxuICAgIHRhcmdldElELFxuICAgIGZpbmREZWVwZXN0Q2FjaGVkQW5jZXN0b3JJbXBsXG4gICk7XG5cbiAgdmFyIGZvdW5kTm9kZSA9IGRlZXBlc3ROb2RlU29GYXI7XG4gIGRlZXBlc3ROb2RlU29GYXIgPSBudWxsO1xuICByZXR1cm4gZm91bmROb2RlO1xufVxuXG4vKipcbiAqIE1vdW50cyB0aGlzIGNvbXBvbmVudCBhbmQgaW5zZXJ0cyBpdCBpbnRvIHRoZSBET00uXG4gKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50SW5zdGFuY2UgVGhlIGluc3RhbmNlIHRvIG1vdW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8uXG4gKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwXG4gKi9cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50SW50b05vZGUoXG4gICAgY29tcG9uZW50SW5zdGFuY2UsXG4gICAgcm9vdElELFxuICAgIGNvbnRhaW5lcixcbiAgICB0cmFuc2FjdGlvbixcbiAgICBzaG91bGRSZXVzZU1hcmt1cCkge1xuICB2YXIgbWFya3VwID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50KFxuICAgIGNvbXBvbmVudEluc3RhbmNlLCByb290SUQsIHRyYW5zYWN0aW9uLCBlbXB0eU9iamVjdFxuICApO1xuICBjb21wb25lbnRJbnN0YW5jZS5faXNUb3BMZXZlbCA9IHRydWU7XG4gIFJlYWN0TW91bnQuX21vdW50SW1hZ2VJbnRvTm9kZShtYXJrdXAsIGNvbnRhaW5lciwgc2hvdWxkUmV1c2VNYXJrdXApO1xufVxuXG4vKipcbiAqIEJhdGNoZWQgbW91bnQuXG4gKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50SW5zdGFuY2UgVGhlIGluc3RhbmNlIHRvIG1vdW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwXG4gKi9cbmZ1bmN0aW9uIGJhdGNoZWRNb3VudENvbXBvbmVudEludG9Ob2RlKFxuICAgIGNvbXBvbmVudEluc3RhbmNlLFxuICAgIHJvb3RJRCxcbiAgICBjb250YWluZXIsXG4gICAgc2hvdWxkUmV1c2VNYXJrdXApIHtcbiAgdmFyIHRyYW5zYWN0aW9uID0gUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCk7XG4gIHRyYW5zYWN0aW9uLnBlcmZvcm0oXG4gICAgbW91bnRDb21wb25lbnRJbnRvTm9kZSxcbiAgICBudWxsLFxuICAgIGNvbXBvbmVudEluc3RhbmNlLFxuICAgIHJvb3RJRCxcbiAgICBjb250YWluZXIsXG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2hvdWxkUmV1c2VNYXJrdXBcbiAgKTtcbiAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7XG59XG5cbi8qKlxuICogTW91bnRpbmcgaXMgdGhlIHByb2Nlc3Mgb2YgaW5pdGlhbGl6aW5nIGEgUmVhY3QgY29tcG9uZW50IGJ5IGNyZWF0aW5nIGl0c1xuICogcmVwcmVzZW50YXRpdmUgRE9NIGVsZW1lbnRzIGFuZCBpbnNlcnRpbmcgdGhlbSBpbnRvIGEgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gKiBBbnkgcHJpb3IgY29udGVudCBpbnNpZGUgYGNvbnRhaW5lcmAgaXMgZGVzdHJveWVkIGluIHRoZSBwcm9jZXNzLlxuICpcbiAqICAgUmVhY3RNb3VudC5yZW5kZXIoXG4gKiAgICAgY29tcG9uZW50LFxuICogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKVxuICogICApO1xuICpcbiAqICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPiAgICAgICAgICAgICAgICAgICA8LS0gU3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gKiAgICAgPGRpdiBkYXRhLXJlYWN0aWQ9XCIuM1wiPiAgICAgICAgICAgICAgPC0tIFJlbmRlcmVkIHJlYWN0Um9vdCBvZiBSZWFjdFxuICogICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LlxuICogICAgIDwvZGl2PlxuICogICA8L2Rpdj5cbiAqXG4gKiBJbnNpZGUgb2YgYGNvbnRhaW5lcmAsIHRoZSBmaXJzdCBlbGVtZW50IHJlbmRlcmVkIGlzIHRoZSBcInJlYWN0Um9vdFwiLlxuICovXG52YXIgUmVhY3RNb3VudCA9IHtcbiAgLyoqIEV4cG9zZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqKi9cbiAgX2luc3RhbmNlc0J5UmVhY3RSb290SUQ6IGluc3RhbmNlc0J5UmVhY3RSb290SUQsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBob29rIHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVuZGVyaW5nIFJlYWN0IGNvbXBvbmVudHMgd2hpbGVcbiAgICogZW5zdXJpbmcgdGhhdCB0aGUgYXBwYXJlbnQgc2Nyb2xsIHBvc2l0aW9uIG9mIGl0cyBgY29udGFpbmVyYCBkb2VzIG5vdFxuICAgKiBjaGFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIFRoZSBgY29udGFpbmVyYCBiZWluZyByZW5kZXJlZCBpbnRvLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSByZW5kZXJDYWxsYmFjayBUaGlzIG11c3QgYmUgY2FsbGVkIG9uY2UgdG8gZG8gdGhlIHJlbmRlci5cbiAgICovXG4gIHNjcm9sbE1vbml0b3I6IGZ1bmN0aW9uKGNvbnRhaW5lciwgcmVuZGVyQ2FsbGJhY2spIHtcbiAgICByZW5kZXJDYWxsYmFjaygpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUYWtlIGEgY29tcG9uZW50IHRoYXQncyBhbHJlYWR5IG1vdW50ZWQgaW50byB0aGUgRE9NIGFuZCByZXBsYWNlIGl0cyBwcm9wc1xuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBwcmV2Q29tcG9uZW50IGNvbXBvbmVudCBpbnN0YW5jZSBhbHJlYWR5IGluIHRoZSBET01cbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW5kZXJcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgY29udGFpbmVyIHRvIHJlbmRlciBpbnRvXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgb24gY29tcGxldGlvblxuICAgKi9cbiAgX3VwZGF0ZVJvb3RDb21wb25lbnQ6IGZ1bmN0aW9uKFxuICAgICAgcHJldkNvbXBvbmVudCxcbiAgICAgIG5leHRFbGVtZW50LFxuICAgICAgY29udGFpbmVyLFxuICAgICAgY2FsbGJhY2spIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFByb3BzKG5leHRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBSZWFjdE1vdW50LnNjcm9sbE1vbml0b3IoY29udGFpbmVyLCBmdW5jdGlvbigpIHtcbiAgICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUVsZW1lbnRJbnRlcm5hbChwcmV2Q29tcG9uZW50LCBuZXh0RWxlbWVudCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbChwcmV2Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIHJvb3QgZWxlbWVudCBpbiBjYXNlIGl0IGxhdGVyIGdldHMgdHJhbnNwbGFudGVkLlxuICAgICAgcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtnZXRSZWFjdFJvb3RJRChjb250YWluZXIpXSA9XG4gICAgICAgIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBwcmV2Q29tcG9uZW50O1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGNvbXBvbmVudCBpbnRvIHRoZSBpbnN0YW5jZSBtYXAgYW5kIHN0YXJ0cyBzY3JvbGwgdmFsdWVcbiAgICogbW9uaXRvcmluZ1xuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBuZXh0Q29tcG9uZW50IGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW5kZXJcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgY29udGFpbmVyIHRvIHJlbmRlciBpbnRvXG4gICAqIEByZXR1cm4ge3N0cmluZ30gcmVhY3RSb290IElEIHByZWZpeFxuICAgKi9cbiAgX3JlZ2lzdGVyQ29tcG9uZW50OiBmdW5jdGlvbihuZXh0Q29tcG9uZW50LCBjb250YWluZXIpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgY29udGFpbmVyICYmIChcbiAgICAgICAgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFX1RZUEUgfHwgY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKVxuICAgICAgKSxcbiAgICAgICdfcmVnaXN0ZXJDb21wb25lbnQoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC4nXG4gICAgKSA6IGludmFyaWFudChjb250YWluZXIgJiYgKFxuICAgICAgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFX1RZUEUgfHwgY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKVxuICAgICkpKTtcblxuICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5lbnN1cmVTY3JvbGxWYWx1ZU1vbml0b3JpbmcoKTtcblxuICAgIHZhciByZWFjdFJvb3RJRCA9IFJlYWN0TW91bnQucmVnaXN0ZXJDb250YWluZXIoY29udGFpbmVyKTtcbiAgICBpbnN0YW5jZXNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXSA9IG5leHRDb21wb25lbnQ7XG4gICAgcmV0dXJuIHJlYWN0Um9vdElEO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBuZXcgY29tcG9uZW50IGludG8gdGhlIERPTS5cbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IGVsZW1lbnQgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIGlmIHdlIHNob3VsZCBza2lwIHRoZSBtYXJrdXAgaW5zZXJ0aW9uXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBuZXh0Q29tcG9uZW50XG4gICAqL1xuICBfcmVuZGVyTmV3Um9vdENvbXBvbmVudDogZnVuY3Rpb24oXG4gICAgbmV4dEVsZW1lbnQsXG4gICAgY29udGFpbmVyLFxuICAgIHNob3VsZFJldXNlTWFya3VwXG4gICkge1xuICAgIC8vIFZhcmlvdXMgcGFydHMgb2Ygb3VyIGNvZGUgKHN1Y2ggYXMgUmVhY3RDb21wb3NpdGVDb21wb25lbnQnc1xuICAgIC8vIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQpIGFzc3VtZSB0aGF0IGNhbGxzIHRvIHJlbmRlciBhcmVuJ3QgbmVzdGVkO1xuICAgIC8vIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgY2FzZS5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCxcbiAgICAgICdfcmVuZGVyTmV3Um9vdENvbXBvbmVudCgpOiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uICcgK1xuICAgICAgJ29mIHByb3BzIGFuZCBzdGF0ZTsgdHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSAnICtcbiAgICAgICdyZW5kZXIgaXMgbm90IGFsbG93ZWQuIElmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiAnICtcbiAgICAgICdjb21wb25lbnREaWRVcGRhdGUuJ1xuICAgICkgOiBudWxsKTtcblxuICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQobmV4dEVsZW1lbnQsIG51bGwpO1xuICAgIHZhciByZWFjdFJvb3RJRCA9IFJlYWN0TW91bnQuX3JlZ2lzdGVyQ29tcG9uZW50KFxuICAgICAgY29tcG9uZW50SW5zdGFuY2UsXG4gICAgICBjb250YWluZXJcbiAgICApO1xuXG4gICAgLy8gVGhlIGluaXRpYWwgcmVuZGVyIGlzIHN5bmNocm9ub3VzIGJ1dCBhbnkgdXBkYXRlcyB0aGF0IGhhcHBlbiBkdXJpbmdcbiAgICAvLyByZW5kZXJpbmcsIGluIGNvbXBvbmVudFdpbGxNb3VudCBvciBjb21wb25lbnREaWRNb3VudCwgd2lsbCBiZSBiYXRjaGVkXG4gICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGJhdGNoaW5nIHN0cmF0ZWd5LlxuXG4gICAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKFxuICAgICAgYmF0Y2hlZE1vdW50Q29tcG9uZW50SW50b05vZGUsXG4gICAgICBjb21wb25lbnRJbnN0YW5jZSxcbiAgICAgIHJlYWN0Um9vdElELFxuICAgICAgY29udGFpbmVyLFxuICAgICAgc2hvdWxkUmV1c2VNYXJrdXBcbiAgICApO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgLy8gUmVjb3JkIHRoZSByb290IGVsZW1lbnQgaW4gY2FzZSBpdCBsYXRlciBnZXRzIHRyYW5zcGxhbnRlZC5cbiAgICAgIHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbcmVhY3RSb290SURdID1cbiAgICAgICAgZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudEluc3RhbmNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgUmVhY3QgY29tcG9uZW50IGludG8gdGhlIERPTSBpbiB0aGUgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gICAqXG4gICAqIElmIHRoZSBSZWFjdCBjb21wb25lbnQgd2FzIHByZXZpb3VzbHkgcmVuZGVyZWQgaW50byBgY29udGFpbmVyYCwgdGhpcyB3aWxsXG4gICAqIHBlcmZvcm0gYW4gdXBkYXRlIG9uIGl0IGFuZCBvbmx5IG11dGF0ZSB0aGUgRE9NIGFzIG5lY2Vzc2FyeSB0byByZWZsZWN0IHRoZVxuICAgKiBsYXRlc3QgUmVhY3QgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnQgQ29tcG9uZW50IGVsZW1lbnQgdG8gcmVuZGVyLlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byByZW5kZXIgaW50by5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRyaWdnZXJlZCBvbiBjb21wbGV0aW9uXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBDb21wb25lbnQgaW5zdGFuY2UgcmVuZGVyZWQgaW4gYGNvbnRhaW5lcmAuXG4gICAqL1xuICByZW5kZXI6IGZ1bmN0aW9uKG5leHRFbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChuZXh0RWxlbWVudCksXG4gICAgICAnUmVhY3QucmVuZGVyKCk6IEludmFsaWQgY29tcG9uZW50IGVsZW1lbnQuJXMnLFxuICAgICAgKFxuICAgICAgICB0eXBlb2YgbmV4dEVsZW1lbnQgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAnIEluc3RlYWQgb2YgcGFzc2luZyBhbiBlbGVtZW50IHN0cmluZywgbWFrZSBzdXJlIHRvIGluc3RhbnRpYXRlICcgK1xuICAgICAgICAgICdpdCBieSBwYXNzaW5nIGl0IHRvIFJlYWN0LmNyZWF0ZUVsZW1lbnQuJyA6XG4gICAgICAgIHR5cGVvZiBuZXh0RWxlbWVudCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgJyBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBjb21wb25lbnQgY2xhc3MsIG1ha2Ugc3VyZSB0byBpbnN0YW50aWF0ZSAnICtcbiAgICAgICAgICAnaXQgYnkgcGFzc2luZyBpdCB0byBSZWFjdC5jcmVhdGVFbGVtZW50LicgOlxuICAgICAgICAvLyBDaGVjayBpZiBpdCBxdWFja3MgbGlrZSBhbiBlbGVtZW50XG4gICAgICAgIG5leHRFbGVtZW50ICE9IG51bGwgJiYgbmV4dEVsZW1lbnQucHJvcHMgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgJyBUaGlzIG1heSBiZSBjYXVzZWQgYnkgdW5pbnRlbnRpb25hbGx5IGxvYWRpbmcgdHdvIGluZGVwZW5kZW50ICcgK1xuICAgICAgICAgICdjb3BpZXMgb2YgUmVhY3QuJyA6XG4gICAgICAgICAgJydcbiAgICAgIClcbiAgICApIDogaW52YXJpYW50KFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChuZXh0RWxlbWVudCkpKTtcblxuICAgIHZhciBwcmV2Q29tcG9uZW50ID0gaW5zdGFuY2VzQnlSZWFjdFJvb3RJRFtnZXRSZWFjdFJvb3RJRChjb250YWluZXIpXTtcblxuICAgIGlmIChwcmV2Q29tcG9uZW50KSB7XG4gICAgICB2YXIgcHJldkVsZW1lbnQgPSBwcmV2Q29tcG9uZW50Ll9jdXJyZW50RWxlbWVudDtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBSZWFjdE1vdW50Ll91cGRhdGVSb290Q29tcG9uZW50KFxuICAgICAgICAgIHByZXZDb21wb25lbnQsXG4gICAgICAgICAgbmV4dEVsZW1lbnQsXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICkuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFJlYWN0TW91bnQudW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWFjdFJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGNvbnRhaW5lckhhc1JlYWN0TWFya3VwID1cbiAgICAgIHJlYWN0Um9vdEVsZW1lbnQgJiYgUmVhY3RNb3VudC5pc1JlbmRlcmVkQnlSZWFjdChyZWFjdFJvb3RFbGVtZW50KTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIGlmICghY29udGFpbmVySGFzUmVhY3RNYXJrdXAgfHwgcmVhY3RSb290RWxlbWVudC5uZXh0U2libGluZykge1xuICAgICAgICB2YXIgcm9vdEVsZW1lbnRTaWJsaW5nID0gcmVhY3RSb290RWxlbWVudDtcbiAgICAgICAgd2hpbGUgKHJvb3RFbGVtZW50U2libGluZykge1xuICAgICAgICAgIGlmIChSZWFjdE1vdW50LmlzUmVuZGVyZWRCeVJlYWN0KHJvb3RFbGVtZW50U2libGluZykpIHtcbiAgICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArXG4gICAgICAgICAgICAgICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArXG4gICAgICAgICAgICAgICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nXG4gICAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb290RWxlbWVudFNpYmxpbmcgPSByb290RWxlbWVudFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkUmV1c2VNYXJrdXAgPSBjb250YWluZXJIYXNSZWFjdE1hcmt1cCAmJiAhcHJldkNvbXBvbmVudDtcblxuICAgIHZhciBjb21wb25lbnQgPSBSZWFjdE1vdW50Ll9yZW5kZXJOZXdSb290Q29tcG9uZW50KFxuICAgICAgbmV4dEVsZW1lbnQsXG4gICAgICBjb250YWluZXIsXG4gICAgICBzaG91bGRSZXVzZU1hcmt1cFxuICAgICkuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwoY29tcG9uZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfSxcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGNvbXBvbmVudCBpbnN0YW5jZSBvZiBgY29uc3RydWN0b3JgIHdpdGggYGluaXRpYWxQcm9wc2AgYW5kXG4gICAqIHJlbmRlcnMgaXQgaW50byB0aGUgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yIFJlYWN0IGNvbXBvbmVudCBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBwcm9wcyBJbml0aWFsIHByb3BzIG9mIHRoZSBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gQ29tcG9uZW50IGluc3RhbmNlIHJlbmRlcmVkIGluIGBjb250YWluZXJgLlxuICAgKi9cbiAgY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50OiBmdW5jdGlvbihjb25zdHJ1Y3RvciwgcHJvcHMsIGNvbnRhaW5lcikge1xuICAgIHZhciBlbGVtZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQoY29uc3RydWN0b3IsIHByb3BzKTtcbiAgICByZXR1cm4gUmVhY3RNb3VudC5yZW5kZXIoZWxlbWVudCwgY29udGFpbmVyKTtcbiAgfSxcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGNvbXBvbmVudCBpbnN0YW5jZSBvZiBgY29uc3RydWN0b3JgIHdpdGggYGluaXRpYWxQcm9wc2AgYW5kXG4gICAqIHJlbmRlcnMgaXQgaW50byBhIGNvbnRhaW5lciBub2RlIGlkZW50aWZpZWQgYnkgc3VwcGxpZWQgYGlkYC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcG9uZW50Q29uc3RydWN0b3IgUmVhY3QgY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcHJvcHMgSW5pdGlhbCBwcm9wcyBvZiB0aGUgY29tcG9uZW50IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gQ29tcG9uZW50IGluc3RhbmNlIHJlbmRlcmVkIGluIHRoZSBjb250YWluZXIgbm9kZS5cbiAgICovXG4gIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudEJ5SUQ6IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBwcm9wcywgaWQpIHtcbiAgICB2YXIgZG9tTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgZG9tTm9kZSxcbiAgICAgICdUcmllZCB0byBnZXQgZWxlbWVudCB3aXRoIGlkIG9mIFwiJXNcIiBidXQgaXQgaXMgbm90IHByZXNlbnQgb24gdGhlIHBhZ2UuJyxcbiAgICAgIGlkXG4gICAgKSA6IGludmFyaWFudChkb21Ob2RlKSk7XG4gICAgcmV0dXJuIFJlYWN0TW91bnQuY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50KGNvbnN0cnVjdG9yLCBwcm9wcywgZG9tTm9kZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNvbnRhaW5lciBub2RlIGludG8gd2hpY2ggUmVhY3QgY29tcG9uZW50cyB3aWxsIGJlIHJlbmRlcmVkLlxuICAgKiBUaGlzIGFsc28gY3JlYXRlcyB0aGUgXCJyZWFjdFJvb3RcIiBJRCB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnRcbiAgICogcmVuZGVyZWQgd2l0aGluLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byByZWdpc3RlciBhcyBhIGNvbnRhaW5lci5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgXCJyZWFjdFJvb3RcIiBJRCBvZiBlbGVtZW50cyByZW5kZXJlZCB3aXRoaW4uXG4gICAqL1xuICByZWdpc3RlckNvbnRhaW5lcjogZnVuY3Rpb24oY29udGFpbmVyKSB7XG4gICAgdmFyIHJlYWN0Um9vdElEID0gZ2V0UmVhY3RSb290SUQoY29udGFpbmVyKTtcbiAgICBpZiAocmVhY3RSb290SUQpIHtcbiAgICAgIC8vIElmIG9uZSBleGlzdHMsIG1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkIFwicmVhY3RSb290XCIgSUQuXG4gICAgICByZWFjdFJvb3RJRCA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLmdldFJlYWN0Um9vdElERnJvbU5vZGVJRChyZWFjdFJvb3RJRCk7XG4gICAgfVxuICAgIGlmICghcmVhY3RSb290SUQpIHtcbiAgICAgIC8vIE5vIHZhbGlkIFwicmVhY3RSb290XCIgSUQgZm91bmQsIGNyZWF0ZSBvbmUuXG4gICAgICByZWFjdFJvb3RJRCA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLmNyZWF0ZVJlYWN0Um9vdElEKCk7XG4gICAgfVxuICAgIGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXSA9IGNvbnRhaW5lcjtcbiAgICByZXR1cm4gcmVhY3RSb290SUQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVubW91bnRzIGFuZCBkZXN0cm95cyB0aGUgUmVhY3QgY29tcG9uZW50IHJlbmRlcmVkIGluIHRoZSBgY29udGFpbmVyYC5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgY29udGFpbmluZyBhIFJlYWN0IGNvbXBvbmVudC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhIGNvbXBvbmVudCB3YXMgZm91bmQgaW4gYW5kIHVubW91bnRlZCBmcm9tXG4gICAqICAgICAgICAgICAgICAgICAgIGBjb250YWluZXJgXG4gICAqL1xuICB1bm1vdW50Q29tcG9uZW50QXROb2RlOiBmdW5jdGlvbihjb250YWluZXIpIHtcbiAgICAvLyBWYXJpb3VzIHBhcnRzIG9mIG91ciBjb2RlIChzdWNoIGFzIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50J3NcbiAgICAvLyBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KSBhc3N1bWUgdGhhdCBjYWxscyB0byByZW5kZXIgYXJlbid0IG5lc3RlZDtcbiAgICAvLyB2ZXJpZnkgdGhhdCB0aGF0J3MgdGhlIGNhc2UuIChTdHJpY3RseSBzcGVha2luZywgdW5tb3VudGluZyB3b24ndCBjYXVzZSBhXG4gICAgLy8gcmVuZGVyIGJ1dCB3ZSBzdGlsbCBkb24ndCBleHBlY3QgdG8gYmUgaW4gYSByZW5kZXIgY2FsbCBoZXJlLilcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCxcbiAgICAgICd1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgJyArXG4gICAgICAncHJvcHMgYW5kIHN0YXRlOyB0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyAnICtcbiAgICAgICdub3QgYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluICcgK1xuICAgICAgJ2NvbXBvbmVudERpZFVwZGF0ZS4nXG4gICAgKSA6IG51bGwpO1xuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGNvbnRhaW5lciAmJiAoXG4gICAgICAgIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFIHx8IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQRSlcbiAgICAgICksXG4gICAgICAndW5tb3VudENvbXBvbmVudEF0Tm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LidcbiAgICApIDogaW52YXJpYW50KGNvbnRhaW5lciAmJiAoXG4gICAgICAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSB8fCBjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpXG4gICAgKSkpO1xuXG4gICAgdmFyIHJlYWN0Um9vdElEID0gZ2V0UmVhY3RSb290SUQoY29udGFpbmVyKTtcbiAgICB2YXIgY29tcG9uZW50ID0gaW5zdGFuY2VzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF07XG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgUmVhY3RNb3VudC51bm1vdW50Q29tcG9uZW50RnJvbU5vZGUoY29tcG9uZW50LCBjb250YWluZXIpO1xuICAgIGRlbGV0ZSBpbnN0YW5jZXNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTtcbiAgICBkZWxldGUgY29udGFpbmVyc0J5UmVhY3RSb290SURbcmVhY3RSb290SURdO1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIGRlbGV0ZSByb290RWxlbWVudHNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVubW91bnRzIGEgY29tcG9uZW50IGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW5zdGFuY2UgUmVhY3QgY29tcG9uZW50IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byB1bm1vdW50IGZyb20uXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICogQHNlZSB7UmVhY3RNb3VudC51bm1vdW50Q29tcG9uZW50QXROb2RlfVxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudEZyb21Ob2RlOiBmdW5jdGlvbihpbnN0YW5jZSwgY29udGFpbmVyKSB7XG4gICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQoaW5zdGFuY2UpO1xuXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQRSkge1xuICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBodHRwOi8vanNwZXJmLmNvbS9lbXB0eWluZy1hLW5vZGVcbiAgICB3aGlsZSAoY29udGFpbmVyLmxhc3RDaGlsZCkge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5sYXN0Q2hpbGQpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRmluZHMgdGhlIGNvbnRhaW5lciBET00gZWxlbWVudCB0aGF0IGNvbnRhaW5zIFJlYWN0IGNvbXBvbmVudCB0byB3aGljaCB0aGVcbiAgICogc3VwcGxpZWQgRE9NIGBpZGAgYmVsb25ncy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiBhbiBlbGVtZW50IHJlbmRlcmVkIGJ5IGEgUmVhY3QgY29tcG9uZW50LlxuICAgKiBAcmV0dXJuIHs/RE9NRWxlbWVudH0gRE9NIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgYGlkYC5cbiAgICovXG4gIGZpbmRSZWFjdENvbnRhaW5lckZvcklEOiBmdW5jdGlvbihpZCkge1xuICAgIHZhciByZWFjdFJvb3RJRCA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLmdldFJlYWN0Um9vdElERnJvbU5vZGVJRChpZCk7XG4gICAgdmFyIGNvbnRhaW5lciA9IGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHZhciByb290RWxlbWVudCA9IHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbcmVhY3RSb290SURdO1xuICAgICAgaWYgKHJvb3RFbGVtZW50ICYmIHJvb3RFbGVtZW50LnBhcmVudE5vZGUgIT09IGNvbnRhaW5lcikge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIC8vIENhbGwgaW50ZXJuYWxHZXRJRCBoZXJlIGJlY2F1c2UgZ2V0SUQgY2FsbHMgaXNWYWxpZCB3aGljaCBjYWxsc1xuICAgICAgICAgIC8vIGZpbmRSZWFjdENvbnRhaW5lckZvcklEICh0aGlzIGZ1bmN0aW9uKS5cbiAgICAgICAgICBpbnRlcm5hbEdldElEKHJvb3RFbGVtZW50KSA9PT0gcmVhY3RSb290SUQsXG4gICAgICAgICAgJ1JlYWN0TW91bnQ6IFJvb3QgZWxlbWVudCBJRCBkaWZmZXJlZCBmcm9tIHJlYWN0Um9vdElELidcbiAgICAgICAgKSA6IGludmFyaWFudCgvLyBDYWxsIGludGVybmFsR2V0SUQgaGVyZSBiZWNhdXNlIGdldElEIGNhbGxzIGlzVmFsaWQgd2hpY2ggY2FsbHNcbiAgICAgICAgLy8gZmluZFJlYWN0Q29udGFpbmVyRm9ySUQgKHRoaXMgZnVuY3Rpb24pLlxuICAgICAgICBpbnRlcm5hbEdldElEKHJvb3RFbGVtZW50KSA9PT0gcmVhY3RSb290SUQpKTtcblxuICAgICAgICB2YXIgY29udGFpbmVyQ2hpbGQgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKGNvbnRhaW5lckNoaWxkICYmXG4gICAgICAgICAgICByZWFjdFJvb3RJRCA9PT0gaW50ZXJuYWxHZXRJRChjb250YWluZXJDaGlsZCkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY29udGFpbmVyIGhhcyBhIG5ldyBjaGlsZCB3aXRoIHRoZSBzYW1lIElEIGFzIHRoZSBvbGRcbiAgICAgICAgICAvLyByb290IGVsZW1lbnQsIHRoZW4gcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gaXNcbiAgICAgICAgICAvLyBqdXN0IHN0YWxlIGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLiBUaGUgY2FzZSB0aGF0IGRlc2VydmVzIGFcbiAgICAgICAgICAvLyB3YXJuaW5nIGlzIHdoZW4gdGhlIGNvbnRhaW5lciBpcyBlbXB0eS5cbiAgICAgICAgICByb290RWxlbWVudHNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXSA9IGNvbnRhaW5lckNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAnUmVhY3RNb3VudDogUm9vdCBlbGVtZW50IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBpdHMgb3JpZ2luYWwgJyArXG4gICAgICAgICAgICAnY29udGFpbmVyLiBOZXcgY29udGFpbmVyOicsIHJvb3RFbGVtZW50LnBhcmVudE5vZGVcbiAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbiBlbGVtZW50IHJlbmRlcmVkIGJ5IFJlYWN0IHdpdGggdGhlIHN1cHBsaWVkIElELlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgYSBET00gbm9kZSBpbiB0aGUgUmVhY3QgY29tcG9uZW50LlxuICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSBSb290IERPTSBub2RlIG9mIHRoZSBSZWFjdCBjb21wb25lbnQuXG4gICAqL1xuICBmaW5kUmVhY3ROb2RlQnlJRDogZnVuY3Rpb24oaWQpIHtcbiAgICB2YXIgcmVhY3RSb290ID0gUmVhY3RNb3VudC5maW5kUmVhY3RDb250YWluZXJGb3JJRChpZCk7XG4gICAgcmV0dXJuIFJlYWN0TW91bnQuZmluZENvbXBvbmVudFJvb3QocmVhY3RSb290LCBpZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRydWUgaWYgdGhlIHN1cHBsaWVkIGBub2RlYCBpcyByZW5kZXJlZCBieSBSZWFjdC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBub2RlIERPTSBFbGVtZW50IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBET00gRWxlbWVudCBhcHBlYXJzIHRvIGJlIHJlbmRlcmVkIGJ5IFJlYWN0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGlzUmVuZGVyZWRCeVJlYWN0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IDEpIHtcbiAgICAgIC8vIE5vdCBhIERPTUVsZW1lbnQsIHRoZXJlZm9yZSBub3QgYSBSZWFjdCBjb21wb25lbnRcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGlkID0gUmVhY3RNb3VudC5nZXRJRChub2RlKTtcbiAgICByZXR1cm4gaWQgPyBpZC5jaGFyQXQoMCkgPT09IFNFUEFSQVRPUiA6IGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgdXAgdGhlIGFuY2VzdG9ycyBvZiB0aGUgc3VwcGxpZWQgbm9kZSB0byBmaW5kIGEgbm9kZSB0aGF0IGlzIGFcbiAgICogRE9NIHJlcHJlc2VudGF0aW9uIG9mIGEgUmVhY3QgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0geyp9IG5vZGVcbiAgICogQHJldHVybiB7P0RPTUV2ZW50VGFyZ2V0fVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldEZpcnN0UmVhY3RET006IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgY3VycmVudCA9IG5vZGU7XG4gICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudC5wYXJlbnROb2RlICE9PSBjdXJyZW50KSB7XG4gICAgICBpZiAoUmVhY3RNb3VudC5pc1JlbmRlcmVkQnlSZWFjdChjdXJyZW50KSkge1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGaW5kcyBhIG5vZGUgd2l0aCB0aGUgc3VwcGxpZWQgYHRhcmdldElEYCBpbnNpZGUgb2YgdGhlIHN1cHBsaWVkXG4gICAqIGBhbmNlc3Rvck5vZGVgLiAgRXhwbG9pdHMgdGhlIElEIG5hbWluZyBzY2hlbWUgdG8gcGVyZm9ybSB0aGUgc2VhcmNoXG4gICAqIHF1aWNrbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IGFuY2VzdG9yTm9kZSBTZWFyY2ggZnJvbSB0aGlzIHJvb3QuXG4gICAqIEBwYXJhcm0ge3N0cmluZ30gdGFyZ2V0SUQgSUQgb2YgdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJuIHtET01FdmVudFRhcmdldH0gRE9NIG5vZGUgd2l0aCB0aGUgc3VwcGxpZWQgYHRhcmdldElEYC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBmaW5kQ29tcG9uZW50Um9vdDogZnVuY3Rpb24oYW5jZXN0b3JOb2RlLCB0YXJnZXRJRCkge1xuICAgIHZhciBmaXJzdENoaWxkcmVuID0gZmluZENvbXBvbmVudFJvb3RSZXVzYWJsZUFycmF5O1xuICAgIHZhciBjaGlsZEluZGV4ID0gMDtcblxuICAgIHZhciBkZWVwZXN0QW5jZXN0b3IgPSBmaW5kRGVlcGVzdENhY2hlZEFuY2VzdG9yKHRhcmdldElEKSB8fCBhbmNlc3Rvck5vZGU7XG5cbiAgICBmaXJzdENoaWxkcmVuWzBdID0gZGVlcGVzdEFuY2VzdG9yLmZpcnN0Q2hpbGQ7XG4gICAgZmlyc3RDaGlsZHJlbi5sZW5ndGggPSAxO1xuXG4gICAgd2hpbGUgKGNoaWxkSW5kZXggPCBmaXJzdENoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgdmFyIGNoaWxkID0gZmlyc3RDaGlsZHJlbltjaGlsZEluZGV4KytdO1xuICAgICAgdmFyIHRhcmdldENoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgdmFyIGNoaWxkSUQgPSBSZWFjdE1vdW50LmdldElEKGNoaWxkKTtcbiAgICAgICAgaWYgKGNoaWxkSUQpIHtcbiAgICAgICAgICAvLyBFdmVuIGlmIHdlIGZpbmQgdGhlIG5vZGUgd2UncmUgbG9va2luZyBmb3IsIHdlIGZpbmlzaCBsb29waW5nXG4gICAgICAgICAgLy8gdGhyb3VnaCBpdHMgc2libGluZ3MgdG8gZW5zdXJlIHRoZXkncmUgY2FjaGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZVxuICAgICAgICAgIC8vIHRvIHJldmlzaXQgdGhpcyBub2RlIGFnYWluLiBPdGhlcndpc2UsIHdlIG1ha2Ugbl4yIGNhbGxzIHRvIGdldElEXG4gICAgICAgICAgLy8gd2hlbiB2aXNpdGluZyB0aGUgbWFueSBjaGlsZHJlbiBvZiBhIHNpbmdsZSBub2RlIGluIG9yZGVyLlxuXG4gICAgICAgICAgaWYgKHRhcmdldElEID09PSBjaGlsZElEKSB7XG4gICAgICAgICAgICB0YXJnZXRDaGlsZCA9IGNoaWxkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoUmVhY3RJbnN0YW5jZUhhbmRsZXMuaXNBbmNlc3RvcklET2YoY2hpbGRJRCwgdGFyZ2V0SUQpKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBmaW5kIGEgY2hpbGQgd2hvc2UgSUQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIElELFxuICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gYmUgc3VyZSB0aGF0IHdlIG9ubHkgd2FudCB0byBzZWFyY2ggdGhlIHN1YnRyZWVcbiAgICAgICAgICAgIC8vIHJvb3RlZCBhdCB0aGlzIGNoaWxkLCBzbyB3ZSBjYW4gdGhyb3cgb3V0IHRoZSByZXN0IG9mIHRoZVxuICAgICAgICAgICAgLy8gc2VhcmNoIHN0YXRlLlxuICAgICAgICAgICAgZmlyc3RDaGlsZHJlbi5sZW5ndGggPSBjaGlsZEluZGV4ID0gMDtcbiAgICAgICAgICAgIGZpcnN0Q2hpbGRyZW4ucHVzaChjaGlsZC5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGNoaWxkIGhhZCBubyBJRCwgdGhlbiB0aGVyZSdzIGEgY2hhbmNlIHRoYXQgaXQgd2FzXG4gICAgICAgICAgLy8gaW5qZWN0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgYnJvd3NlciwgYXMgd2hlbiBhIGA8dGFibGU+YFxuICAgICAgICAgIC8vIGVsZW1lbnQgc3Byb3V0cyBhbiBleHRyYSBgPHRib2R5PmAgY2hpbGQgYXMgYSBzaWRlIGVmZmVjdCBvZlxuICAgICAgICAgIC8vIGAuaW5uZXJIVE1MYCBwYXJzaW5nLiBPcHRpbWlzdGljYWxseSBjb250aW51ZSBkb3duIHRoaXNcbiAgICAgICAgICAvLyBicmFuY2gsIGJ1dCBub3QgYmVmb3JlIGV4YW1pbmluZyB0aGUgb3RoZXIgc2libGluZ3MuXG4gICAgICAgICAgZmlyc3RDaGlsZHJlbi5wdXNoKGNoaWxkLmZpcnN0Q2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKHRhcmdldENoaWxkKSB7XG4gICAgICAgIC8vIEVtcHR5aW5nIGZpcnN0Q2hpbGRyZW4vZmluZENvbXBvbmVudFJvb3RSZXVzYWJsZUFycmF5IGlzXG4gICAgICAgIC8vIG5vdCBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzLCBidXQgaXQgaGVscHMgdGhlIEdDIHJlY2xhaW1cbiAgICAgICAgLy8gYW55IG5vZGVzIHRoYXQgd2VyZSBsZWZ0IGF0IHRoZSBlbmQgb2YgdGhlIHNlYXJjaC5cbiAgICAgICAgZmlyc3RDaGlsZHJlbi5sZW5ndGggPSAwO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXRDaGlsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaXJzdENoaWxkcmVuLmxlbmd0aCA9IDA7XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnZmluZENvbXBvbmVudFJvb3QoLi4uLCAlcyk6IFVuYWJsZSB0byBmaW5kIGVsZW1lbnQuIFRoaXMgcHJvYmFibHkgJyArXG4gICAgICAnbWVhbnMgdGhlIERPTSB3YXMgdW5leHBlY3RlZGx5IG11dGF0ZWQgKGUuZy4sIGJ5IHRoZSBicm93c2VyKSwgJyArXG4gICAgICAndXN1YWxseSBkdWUgdG8gZm9yZ2V0dGluZyBhIDx0Ym9keT4gd2hlbiB1c2luZyB0YWJsZXMsIG5lc3RpbmcgdGFncyAnICtcbiAgICAgICdsaWtlIDxmb3JtPiwgPHA+LCBvciA8YT4sIG9yIHVzaW5nIG5vbi1TVkcgZWxlbWVudHMgaW4gYW4gPHN2Zz4gJyArXG4gICAgICAncGFyZW50LiAnICtcbiAgICAgICdUcnkgaW5zcGVjdGluZyB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIGVsZW1lbnQgd2l0aCBSZWFjdCBJRCBgJXNgLicsXG4gICAgICB0YXJnZXRJRCxcbiAgICAgIFJlYWN0TW91bnQuZ2V0SUQoYW5jZXN0b3JOb2RlKVxuICAgICkgOiBpbnZhcmlhbnQoZmFsc2UpKTtcbiAgfSxcblxuICBfbW91bnRJbWFnZUludG9Ob2RlOiBmdW5jdGlvbihtYXJrdXAsIGNvbnRhaW5lciwgc2hvdWxkUmV1c2VNYXJrdXApIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgY29udGFpbmVyICYmIChcbiAgICAgICAgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFX1RZUEUgfHwgY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKVxuICAgICAgKSxcbiAgICAgICdtb3VudENvbXBvbmVudEludG9Ob2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IHZhbGlkLidcbiAgICApIDogaW52YXJpYW50KGNvbnRhaW5lciAmJiAoXG4gICAgICAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSB8fCBjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpXG4gICAgKSkpO1xuXG4gICAgaWYgKHNob3VsZFJldXNlTWFya3VwKSB7XG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIGlmIChSZWFjdE1hcmt1cENoZWNrc3VtLmNhblJldXNlTWFya3VwKG1hcmt1cCwgcm9vdEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjaGVja3N1bSA9IHJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZShcbiAgICAgICAgICBSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRVxuICAgICAgICApO1xuICAgICAgICByb290RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoUmVhY3RNYXJrdXBDaGVja3N1bS5DSEVDS1NVTV9BVFRSX05BTUUpO1xuXG4gICAgICAgIHZhciByb290TWFya3VwID0gcm9vdEVsZW1lbnQub3V0ZXJIVE1MO1xuICAgICAgICByb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgUmVhY3RNYXJrdXBDaGVja3N1bS5DSEVDS1NVTV9BVFRSX05BTUUsXG4gICAgICAgICAgY2hlY2tzdW1cbiAgICAgICAgKTtcblxuICAgICAgICB2YXIgZGlmZkluZGV4ID0gZmlyc3REaWZmZXJlbmNlSW5kZXgobWFya3VwLCByb290TWFya3VwKTtcbiAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSAnIChjbGllbnQpICcgK1xuICAgICAgICAgIG1hcmt1cC5zdWJzdHJpbmcoZGlmZkluZGV4IC0gMjAsIGRpZmZJbmRleCArIDIwKSArXG4gICAgICAgICAgJ1xcbiAoc2VydmVyKSAnICsgcm9vdE1hcmt1cC5zdWJzdHJpbmcoZGlmZkluZGV4IC0gMjAsIGRpZmZJbmRleCArIDIwKTtcblxuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gRE9DX05PREVfVFlQRSxcbiAgICAgICAgICAnWW91XFwncmUgdHJ5aW5nIHRvIHJlbmRlciBhIGNvbXBvbmVudCB0byB0aGUgZG9jdW1lbnQgdXNpbmcgJyArXG4gICAgICAgICAgJ3NlcnZlciByZW5kZXJpbmcgYnV0IHRoZSBjaGVja3N1bSB3YXMgaW52YWxpZC4gVGhpcyB1c3VhbGx5ICcgK1xuICAgICAgICAgICdtZWFucyB5b3UgcmVuZGVyZWQgYSBkaWZmZXJlbnQgY29tcG9uZW50IHR5cGUgb3IgcHJvcHMgb24gJyArXG4gICAgICAgICAgJ3RoZSBjbGllbnQgZnJvbSB0aGUgb25lIG9uIHRoZSBzZXJ2ZXIsIG9yIHlvdXIgcmVuZGVyKCkgJyArXG4gICAgICAgICAgJ21ldGhvZHMgYXJlIGltcHVyZS4gUmVhY3QgY2Fubm90IGhhbmRsZSB0aGlzIGNhc2UgZHVlIHRvICcgK1xuICAgICAgICAgICdjcm9zcy1icm93c2VyIHF1aXJrcyBieSByZW5kZXJpbmcgYXQgdGhlIGRvY3VtZW50IHJvb3QuIFlvdSAnICtcbiAgICAgICAgICAnc2hvdWxkIGxvb2sgZm9yIGVudmlyb25tZW50IGRlcGVuZGVudCBjb2RlIGluIHlvdXIgY29tcG9uZW50cyAnICtcbiAgICAgICAgICAnYW5kIGVuc3VyZSB0aGUgcHJvcHMgYXJlIHRoZSBzYW1lIGNsaWVudCBhbmQgc2VydmVyIHNpZGU6XFxuJXMnLFxuICAgICAgICAgIGRpZmZlcmVuY2VcbiAgICAgICAgKSA6IGludmFyaWFudChjb250YWluZXIubm9kZVR5cGUgIT09IERPQ19OT0RFX1RZUEUpKTtcblxuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICdSZWFjdCBhdHRlbXB0ZWQgdG8gcmV1c2UgbWFya3VwIGluIGEgY29udGFpbmVyIGJ1dCB0aGUgJyArXG4gICAgICAgICAgICAnY2hlY2tzdW0gd2FzIGludmFsaWQuIFRoaXMgZ2VuZXJhbGx5IG1lYW5zIHRoYXQgeW91IGFyZSAnICtcbiAgICAgICAgICAgICd1c2luZyBzZXJ2ZXIgcmVuZGVyaW5nIGFuZCB0aGUgbWFya3VwIGdlbmVyYXRlZCBvbiB0aGUgJyArXG4gICAgICAgICAgICAnc2VydmVyIHdhcyBub3Qgd2hhdCB0aGUgY2xpZW50IHdhcyBleHBlY3RpbmcuIFJlYWN0IGluamVjdGVkICcgK1xuICAgICAgICAgICAgJ25ldyBtYXJrdXAgdG8gY29tcGVuc2F0ZSB3aGljaCB3b3JrcyBidXQgeW91IGhhdmUgbG9zdCBtYW55ICcgK1xuICAgICAgICAgICAgJ29mIHRoZSBiZW5lZml0cyBvZiBzZXJ2ZXIgcmVuZGVyaW5nLiBJbnN0ZWFkLCBmaWd1cmUgb3V0ICcgK1xuICAgICAgICAgICAgJ3doeSB0aGUgbWFya3VwIGJlaW5nIGdlbmVyYXRlZCBpcyBkaWZmZXJlbnQgb24gdGhlIGNsaWVudCAnICtcbiAgICAgICAgICAgICdvciBzZXJ2ZXI6XFxuJXMnLFxuICAgICAgICAgICAgZGlmZmVyZW5jZVxuICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBjb250YWluZXIubm9kZVR5cGUgIT09IERPQ19OT0RFX1RZUEUsXG4gICAgICAnWW91XFwncmUgdHJ5aW5nIHRvIHJlbmRlciBhIGNvbXBvbmVudCB0byB0aGUgZG9jdW1lbnQgYnV0ICcgK1xuICAgICAgICAneW91IGRpZG5cXCd0IHVzZSBzZXJ2ZXIgcmVuZGVyaW5nLiBXZSBjYW5cXCd0IGRvIHRoaXMgJyArXG4gICAgICAgICd3aXRob3V0IHVzaW5nIHNlcnZlciByZW5kZXJpbmcgZHVlIHRvIGNyb3NzLWJyb3dzZXIgcXVpcmtzLiAnICtcbiAgICAgICAgJ1NlZSBSZWFjdC5yZW5kZXJUb1N0cmluZygpIGZvciBzZXJ2ZXIgcmVuZGVyaW5nLidcbiAgICApIDogaW52YXJpYW50KGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gRE9DX05PREVfVFlQRSkpO1xuXG4gICAgc2V0SW5uZXJIVE1MKGNvbnRhaW5lciwgbWFya3VwKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVhY3QgSUQgdXRpbGl0aWVzLlxuICAgKi9cblxuICBnZXRSZWFjdFJvb3RJRDogZ2V0UmVhY3RSb290SUQsXG5cbiAgZ2V0SUQ6IGdldElELFxuXG4gIHNldElEOiBzZXRJRCxcblxuICBnZXROb2RlOiBnZXROb2RlLFxuXG4gIGdldE5vZGVGcm9tSW5zdGFuY2U6IGdldE5vZGVGcm9tSW5zdGFuY2UsXG5cbiAgcHVyZ2VJRDogcHVyZ2VJRFxufTtcblxuUmVhY3RQZXJmLm1lYXN1cmVNZXRob2RzKFJlYWN0TW91bnQsICdSZWFjdE1vdW50Jywge1xuICBfcmVuZGVyTmV3Um9vdENvbXBvbmVudDogJ19yZW5kZXJOZXdSb290Q29tcG9uZW50JyxcbiAgX21vdW50SW1hZ2VJbnRvTm9kZTogJ19tb3VudEltYWdlSW50b05vZGUnXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE1vdW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUk5iM1Z1ZEM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSTmIzVnVkRnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUVSUFRWQnliM0JsY25SNUlEMGdjbVZ4ZFdseVpTaGNJaTR2UkU5TlVISnZjR1Z5ZEhsY0lpazdYRzUyWVhJZ1VtVmhZM1JDY205M2MyVnlSWFpsYm5SRmJXbDBkR1Z5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSQ2NtOTNjMlZ5UlhabGJuUkZiV2wwZEdWeVhDSXBPMXh1ZG1GeUlGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkRkWEp5Wlc1MFQzZHVaWEpjSWlrN1hHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wUld4bGJXVnVkRlpoYkdsa1lYUnZjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRlpoYkdsa1lYUnZjbHdpS1R0Y2JuWmhjaUJTWldGamRFVnRjSFI1UTI5dGNHOXVaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6WENJcE8xeHVkbUZ5SUZKbFlXTjBTVzV6ZEdGdVkyVk5ZWEFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVsdWMzUmhibU5sVFdGd1hDSXBPMXh1ZG1GeUlGSmxZV04wVFdGeWEzVndRMmhsWTJ0emRXMGdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTFoY210MWNFTm9aV05yYzNWdFhDSXBPMXh1ZG1GeUlGSmxZV04wVUdWeVppQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVR1Z5Wmx3aUtUdGNiblpoY2lCU1pXRmpkRkpsWTI5dVkybHNaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZKbFkyOXVZMmxzWlhKY0lpazdYRzUyWVhJZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlNBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFZYQmtZWFJsVVhWbGRXVmNJaWs3WEc1MllYSWdVbVZoWTNSVmNHUmhkR1Z6SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSVmNHUmhkR1Z6WENJcE8xeHVYRzUyWVhJZ1pXMXdkSGxQWW1wbFkzUWdQU0J5WlhGMWFYSmxLRndpTGk5bGJYQjBlVTlpYW1WamRGd2lLVHRjYm5aaGNpQmpiMjUwWVdsdWMwNXZaR1VnUFNCeVpYRjFhWEpsS0Z3aUxpOWpiMjUwWVdsdWMwNXZaR1ZjSWlrN1hHNTJZWElnWjJWMFVtVmhZM1JTYjI5MFJXeGxiV1Z1ZEVsdVEyOXVkR0ZwYm1WeUlEMGdjbVZ4ZFdseVpTaGNJaTR2WjJWMFVtVmhZM1JTYjI5MFJXeGxiV1Z1ZEVsdVEyOXVkR0ZwYm1WeVhDSXBPMXh1ZG1GeUlHbHVjM1JoYm5ScFlYUmxVbVZoWTNSRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBYQ0lwTzF4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYm5aaGNpQnpaWFJKYm01bGNraFVUVXdnUFNCeVpYRjFhWEpsS0Z3aUxpOXpaWFJKYm01bGNraFVUVXhjSWlrN1hHNTJZWElnYzJodmRXeGtWWEJrWVhSbFVtVmhZM1JEYjIxd2IyNWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXphRzkxYkdSVmNHUmhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQjNZWEp1YVc1bklEMGdjbVZ4ZFdseVpTaGNJaTR2ZDJGeWJtbHVaMXdpS1R0Y2JseHVkbUZ5SUZORlVFRlNRVlJQVWlBOUlGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpMbE5GVUVGU1FWUlBVanRjYmx4dWRtRnlJRUZVVkZKZlRrRk5SU0E5SUVSUFRWQnliM0JsY25SNUxrbEVYMEZVVkZKSlFsVlVSVjlPUVUxRk8xeHVkbUZ5SUc1dlpHVkRZV05vWlNBOUlIdDlPMXh1WEc1MllYSWdSVXhGVFVWT1ZGOU9UMFJGWDFSWlVFVWdQU0F4TzF4dWRtRnlJRVJQUTE5T1QwUkZYMVJaVUVVZ1BTQTVPMXh1WEc0dktpb2dUV0Z3Y0dsdVp5Qm1jbTl0SUhKbFlXTjBVbTl2ZEVsRUlIUnZJRkpsWVdOMElHTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTNGdLaTljYm5aaGNpQnBibk4wWVc1alpYTkNlVkpsWVdOMFVtOXZkRWxFSUQwZ2UzMDdYRzVjYmk4cUtpQk5ZWEJ3YVc1bklHWnliMjBnY21WaFkzUlNiMjkwU1VRZ2RHOGdZR052Ym5SaGFXNWxjbUFnYm05a1pYTXVJQ292WEc1MllYSWdZMjl1ZEdGcGJtVnljMEo1VW1WaFkzUlNiMjkwU1VRZ1BTQjdmVHRjYmx4dWFXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0F2S2lvZ1gxOUVSVlpmWHkxdmJteDVJRzFoY0hCcGJtY2dabkp2YlNCeVpXRmpkRkp2YjNSSlJDQjBieUJ5YjI5MElHVnNaVzFsYm5SekxpQXFMMXh1SUNCMllYSWdjbTl2ZEVWc1pXMWxiblJ6UW5sU1pXRmpkRkp2YjNSSlJDQTlJSHQ5TzF4dWZWeHVYRzR2THlCVmMyVmtJSFJ2SUhOMGIzSmxJR0p5WldGa2RHZ3RabWx5YzNRZ2MyVmhjbU5vSUhOMFlYUmxJR2x1SUdacGJtUkRiMjF3YjI1bGJuUlNiMjkwTGx4dWRtRnlJR1pwYm1SRGIyMXdiMjVsYm5SU2IyOTBVbVYxYzJGaWJHVkJjbkpoZVNBOUlGdGRPMXh1WEc0dktpcGNiaUFxSUVacGJtUnpJSFJvWlNCcGJtUmxlQ0J2WmlCMGFHVWdabWx5YzNRZ1kyaGhjbUZqZEdWeVhHNGdLaUIwYUdGMEozTWdibTkwSUdOdmJXMXZiaUJpWlhSM1pXVnVJSFJvWlNCMGQyOGdaMmwyWlc0Z2MzUnlhVzVuY3k1Y2JpQXFYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUhSb1pTQnBibVJsZUNCdlppQjBhR1VnWTJoaGNtRmpkR1Z5SUhkb1pYSmxJSFJvWlNCemRISnBibWR6SUdScGRtVnlaMlZjYmlBcUwxeHVablZ1WTNScGIyNGdabWx5YzNSRWFXWm1aWEpsYm1ObFNXNWtaWGdvYzNSeWFXNW5NU3dnYzNSeWFXNW5NaWtnZTF4dUlDQjJZWElnYldsdVRHVnVJRDBnVFdGMGFDNXRhVzRvYzNSeWFXNW5NUzVzWlc1bmRHZ3NJSE4wY21sdVp6SXViR1Z1WjNSb0tUdGNiaUFnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCdGFXNU1aVzQ3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2h6ZEhKcGJtY3hMbU5vWVhKQmRDaHBLU0FoUFQwZ2MzUnlhVzVuTWk1amFHRnlRWFFvYVNrcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYzNSeWFXNW5NUzVzWlc1bmRHZ2dQVDA5SUhOMGNtbHVaekl1YkdWdVozUm9JRDhnTFRFZ09pQnRhVzVNWlc0N1hHNTlYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCamIyNTBZV2x1WlhJZ1JFOU5JR1ZzWlcxbGJuUWdkR2hoZENCdFlYa2dZMjl1ZEdGcGJpQmhJRkpsWVdOMElHTnZiWEJ2Ym1WdWRDNWNiaUFxSUVCeVpYUjFjbTRnZXo5emRISnBibWQ5SUVFZ1hDSnlaV0ZqZEZKdmIzUmNJaUJKUkN3Z2FXWWdZU0JTWldGamRDQmpiMjF3YjI1bGJuUWdhWE1nY21WdVpHVnlaV1F1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR2RsZEZKbFlXTjBVbTl2ZEVsRUtHTnZiblJoYVc1bGNpa2dlMXh1SUNCMllYSWdjbTl2ZEVWc1pXMWxiblFnUFNCblpYUlNaV0ZqZEZKdmIzUkZiR1Z0Wlc1MFNXNURiMjUwWVdsdVpYSW9ZMjl1ZEdGcGJtVnlLVHRjYmlBZ2NtVjBkWEp1SUhKdmIzUkZiR1Z0Wlc1MElDWW1JRkpsWVdOMFRXOTFiblF1WjJWMFNVUW9jbTl2ZEVWc1pXMWxiblFwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUZqWTJWemMybHVaeUJ1YjJSbFcwRlVWRkpmVGtGTlJWMGdiM0lnWTJGc2JHbHVaeUJuWlhSQmRIUnlhV0oxZEdVb1FWUlVVbDlPUVUxRktTQnZiaUJoSUdadmNtMWNiaUFxSUdWc1pXMWxiblFnWTJGdUlISmxkSFZ5YmlCcGRITWdZMjl1ZEhKdmJDQjNhRzl6WlNCdVlXMWxJRzl5SUVsRUlHVnhkV0ZzY3lCQlZGUlNYMDVCVFVVdUlFRnNiRnh1SUNvZ1JFOU5JRzV2WkdWeklITjFjSEJ2Y25RZ1lHZGxkRUYwZEhKcFluVjBaVTV2WkdWZ0lHSjFkQ0IwYUdseklHTmhiaUJoYkhOdklHZGxkQ0JqWVd4c1pXUWdiMjVjYmlBcUlHOTBhR1Z5SUc5aWFtVmpkSE1nYzI4Z2FuVnpkQ0J5WlhSMWNtNGdKeWNnYVdZZ2QyVW5jbVVnWjJsMlpXNGdjMjl0WlhSb2FXNW5JRzkwYUdWeUlIUm9ZVzRnWVZ4dUlDb2dSRTlOSUc1dlpHVWdLSE4xWTJnZ1lYTWdkMmx1Wkc5M0tTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2V6OUVUMDFGYkdWdFpXNTBmRVJQVFZkcGJtUnZkM3hFVDAxRWIyTjFiV1Z1ZEh4RVQwMVVaWGgwVG05a1pYMGdibTlrWlNCRVQwMGdibTlrWlM1Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMGdTVVFnYjJZZ2RHaGxJSE4xY0hCc2FXVmtJR0JrYjIxT2IyUmxZQzVjYmlBcUwxeHVablZ1WTNScGIyNGdaMlYwU1VRb2JtOWtaU2tnZTF4dUlDQjJZWElnYVdRZ1BTQnBiblJsY201aGJFZGxkRWxFS0c1dlpHVXBPMXh1SUNCcFppQW9hV1FwSUh0Y2JpQWdJQ0JwWmlBb2JtOWtaVU5oWTJobExtaGhjMDkzYmxCeWIzQmxjblI1S0dsa0tTa2dlMXh1SUNBZ0lDQWdkbUZ5SUdOaFkyaGxaQ0E5SUc1dlpHVkRZV05vWlZ0cFpGMDdYRzRnSUNBZ0lDQnBaaUFvWTJGamFHVmtJQ0U5UFNCdWIyUmxLU0I3WEc0Z0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUNBZ0lXbHpWbUZzYVdRb1kyRmphR1ZrTENCcFpDa3NYRzRnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBUVzkxYm5RNklGUjNieUIyWVd4cFpDQmlkWFFnZFc1bGNYVmhiQ0J1YjJSbGN5QjNhWFJvSUhSb1pTQnpZVzFsSUdBbGMyQTZJQ1Z6Snl4Y2JpQWdJQ0FnSUNBZ0lDQkJWRlJTWDA1QlRVVXNJR2xrWEc0Z0lDQWdJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9JV2x6Vm1Gc2FXUW9ZMkZqYUdWa0xDQnBaQ2twS1R0Y2JseHVJQ0FnSUNBZ0lDQnViMlJsUTJGamFHVmJhV1JkSUQwZ2JtOWtaVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2JtOWtaVU5oWTJobFcybGtYU0E5SUc1dlpHVTdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHbGtPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnBiblJsY201aGJFZGxkRWxFS0c1dlpHVXBJSHRjYmlBZ0x5OGdTV1lnYm05a1pTQnBjeUJ6YjIxbGRHaHBibWNnYkdsclpTQmhJSGRwYm1SdmR5d2daRzlqZFcxbGJuUXNJRzl5SUhSbGVIUWdibTlrWlN3Z2JtOXVaU0J2Wmx4dUlDQXZMeUIzYUdsamFDQnpkWEJ3YjNKMElHRjBkSEpwWW5WMFpYTWdiM0lnWVNBdVoyVjBRWFIwY21saWRYUmxJRzFsZEdodlpDd2daM0poWTJWbWRXeHNlU0J5WlhSMWNtNWNiaUFnTHk4Z2RHaGxJR1Z0Y0hSNUlITjBjbWx1Wnl3Z1lYTWdhV1lnZEdobElHRjBkSEpwWW5WMFpTQjNaWEpsSUcxcGMzTnBibWN1WEc0Z0lISmxkSFZ5YmlCdWIyUmxJQ1ltSUc1dlpHVXVaMlYwUVhSMGNtbGlkWFJsSUNZbUlHNXZaR1V1WjJWMFFYUjBjbWxpZFhSbEtFRlVWRkpmVGtGTlJTa2dmSHdnSnljN1hHNTlYRzVjYmk4cUtseHVJQ29nVTJWMGN5QjBhR1VnVW1WaFkzUXRjM0JsWTJsbWFXTWdTVVFnYjJZZ2RHaGxJR2RwZG1WdUlHNXZaR1V1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCdWIyUmxJRlJvWlNCRVQwMGdibTlrWlNCM2FHOXpaU0JKUkNCM2FXeHNJR0psSUhObGRDNWNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCVWFHVWdkbUZzZFdVZ2IyWWdkR2hsSUVsRUlHRjBkSEpwWW5WMFpTNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2MyVjBTVVFvYm05a1pTd2dhV1FwSUh0Y2JpQWdkbUZ5SUc5c1pFbEVJRDBnYVc1MFpYSnVZV3hIWlhSSlJDaHViMlJsS1R0Y2JpQWdhV1lnS0c5c1pFbEVJQ0U5UFNCcFpDa2dlMXh1SUNBZ0lHUmxiR1YwWlNCdWIyUmxRMkZqYUdWYmIyeGtTVVJkTzF4dUlDQjlYRzRnSUc1dlpHVXVjMlYwUVhSMGNtbGlkWFJsS0VGVVZGSmZUa0ZOUlN3Z2FXUXBPMXh1SUNCdWIyUmxRMkZqYUdWYmFXUmRJRDBnYm05a1pUdGNibjFjYmx4dUx5b3FYRzRnS2lCR2FXNWtjeUIwYUdVZ2JtOWtaU0IzYVhSb0lIUm9aU0J6ZFhCd2JHbGxaQ0JTWldGamRDMW5aVzVsY21GMFpXUWdSRTlOSUVsRUxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkJJRkpsWVdOMExXZGxibVZ5WVhSbFpDQkVUMDBnU1VRdVhHNGdLaUJBY21WMGRYSnVJSHRFVDAxRmJHVnRaVzUwZlNCRVQwMGdibTlrWlNCM2FYUm9JSFJvWlNCemRYQndiR1ZrSUdCcFpHQXVYRzRnS2lCQWFXNTBaWEp1WVd4Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWjJWMFRtOWtaU2hwWkNrZ2UxeHVJQ0JwWmlBb0lXNXZaR1ZEWVdOb1pTNW9ZWE5QZDI1UWNtOXdaWEowZVNocFpDa2dmSHdnSVdselZtRnNhV1FvYm05a1pVTmhZMmhsVzJsa1hTd2dhV1FwS1NCN1hHNGdJQ0FnYm05a1pVTmhZMmhsVzJsa1hTQTlJRkpsWVdOMFRXOTFiblF1Wm1sdVpGSmxZV04wVG05a1pVSjVTVVFvYVdRcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdWIyUmxRMkZqYUdWYmFXUmRPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFWnBibVJ6SUhSb1pTQnViMlJsSUhkcGRHZ2dkR2hsSUhOMWNIQnNhV1ZrSUhCMVlteHBZeUJTWldGamRDQnBibk4wWVc1alpTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJR2x1YzNSaGJtTmxJRUVnY0hWaWJHbGpJRkpsWVdOMElHbHVjM1JoYm1ObExseHVJQ29nUUhKbGRIVnliaUI3UDBSUFRVVnNaVzFsYm5SOUlFUlBUU0J1YjJSbElIZHBkR2dnZEdobElITjFjSEJzWldRZ1lHbGtZQzVjYmlBcUlFQnBiblJsY201aGJGeHVJQ292WEc1bWRXNWpkR2x2YmlCblpYUk9iMlJsUm5KdmJVbHVjM1JoYm1ObEtHbHVjM1JoYm1ObEtTQjdYRzRnSUhaaGNpQnBaQ0E5SUZKbFlXTjBTVzV6ZEdGdVkyVk5ZWEF1WjJWMEtHbHVjM1JoYm1ObEtTNWZjbTl2ZEU1dlpHVkpSRHRjYmlBZ2FXWWdLRkpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblF1YVhOT2RXeHNRMjl0Y0c5dVpXNTBTVVFvYVdRcEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUgxY2JpQWdhV1lnS0NGdWIyUmxRMkZqYUdVdWFHRnpUM2R1VUhKdmNHVnlkSGtvYVdRcElIeDhJQ0ZwYzFaaGJHbGtLRzV2WkdWRFlXTm9aVnRwWkYwc0lHbGtLU2tnZTF4dUlDQWdJRzV2WkdWRFlXTm9aVnRwWkYwZ1BTQlNaV0ZqZEUxdmRXNTBMbVpwYm1SU1pXRmpkRTV2WkdWQ2VVbEVLR2xrS1R0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYm05a1pVTmhZMmhsVzJsa1hUdGNibjFjYmx4dUx5b3FYRzRnS2lCQklHNXZaR1VnYVhNZ1hDSjJZV3hwWkZ3aUlHbG1JR2wwSUdseklHTnZiblJoYVc1bFpDQmllU0JoSUdOMWNuSmxiblJzZVNCdGIzVnVkR1ZrSUdOdmJuUmhhVzVsY2k1Y2JpQXFYRzRnS2lCVWFHbHpJRzFsWVc1eklIUm9ZWFFnZEdobElHNXZaR1VnWkc5bGN5QnViM1FnYUdGMlpTQjBieUJpWlNCamIyNTBZV2x1WldRZ1lua2dZU0JrYjJOMWJXVnVkQ0JwYmx4dUlDb2diM0prWlhJZ2RHOGdZbVVnWTI5dWMybGtaWEpsWkNCMllXeHBaQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlejlFVDAxRmJHVnRaVzUwZlNCdWIyUmxJRlJvWlNCallXNWthV1JoZEdVZ1JFOU5JRzV2WkdVdVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnVkdobElHVjRjR1ZqZEdWa0lFbEVJRzltSUhSb1pTQnViMlJsTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMGdWMmhsZEdobGNpQjBhR1VnYm05a1pTQnBjeUJqYjI1MFlXbHVaV1FnWW5rZ1lTQnRiM1Z1ZEdWa0lHTnZiblJoYVc1bGNpNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2FYTldZV3hwWkNodWIyUmxMQ0JwWkNrZ2UxeHVJQ0JwWmlBb2JtOWtaU2tnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQnBiblJsY201aGJFZGxkRWxFS0c1dlpHVXBJRDA5UFNCcFpDeGNiaUFnSUNBZ0lDZFNaV0ZqZEUxdmRXNTBPaUJWYm1WNGNHVmpkR1ZrSUcxdlpHbG1hV05oZEdsdmJpQnZaaUJnSlhOZ0p5eGNiaUFnSUNBZ0lFRlVWRkpmVGtGTlJWeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9hVzUwWlhKdVlXeEhaWFJKUkNodWIyUmxLU0E5UFQwZ2FXUXBLVHRjYmx4dUlDQWdJSFpoY2lCamIyNTBZV2x1WlhJZ1BTQlNaV0ZqZEUxdmRXNTBMbVpwYm1SU1pXRmpkRU52Ym5SaGFXNWxja1p2Y2tsRUtHbGtLVHRjYmlBZ0lDQnBaaUFvWTI5dWRHRnBibVZ5SUNZbUlHTnZiblJoYVc1elRtOWtaU2hqYjI1MFlXbHVaWElzSUc1dlpHVXBLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyRjFjMlZ6SUhSb1pTQmpZV05vWlNCMGJ5Qm1iM0puWlhRZ1lXSnZkWFFnYjI1bElGSmxZV04wTFhOd1pXTnBabWxqSUVsRUxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQlVhR1VnU1VRZ2RHOGdabTl5WjJWMExseHVJQ292WEc1bWRXNWpkR2x2YmlCd2RYSm5aVWxFS0dsa0tTQjdYRzRnSUdSbGJHVjBaU0J1YjJSbFEyRmphR1ZiYVdSZE8xeHVmVnh1WEc1MllYSWdaR1ZsY0dWemRFNXZaR1ZUYjBaaGNpQTlJRzUxYkd3N1hHNW1kVzVqZEdsdmJpQm1hVzVrUkdWbGNHVnpkRU5oWTJobFpFRnVZMlZ6ZEc5eVNXMXdiQ2hoYm1ObGMzUnZja2xFS1NCN1hHNGdJSFpoY2lCaGJtTmxjM1J2Y2lBOUlHNXZaR1ZEWVdOb1pWdGhibU5sYzNSdmNrbEVYVHRjYmlBZ2FXWWdLR0Z1WTJWemRHOXlJQ1ltSUdselZtRnNhV1FvWVc1alpYTjBiM0lzSUdGdVkyVnpkRzl5U1VRcEtTQjdYRzRnSUNBZ1pHVmxjR1Z6ZEU1dlpHVlRiMFpoY2lBOUlHRnVZMlZ6ZEc5eU8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDOHZJRlJvYVhNZ2JtOWtaU0JwYzI0bmRDQndiM0IxYkdGMFpXUWdhVzRnZEdobElHTmhZMmhsTENCemJ5QndjbVZ6ZFcxaFlteDVJRzV2Ym1VZ2IyWWdhWFJ6WEc0Z0lDQWdMeThnWkdWelkyVnVaR0Z1ZEhNZ1lYSmxMaUJDY21WaGF5QnZkWFFnYjJZZ2RHaGxJR3h2YjNBdVhHNGdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdUlIUm9aU0JrWldWd1pYTjBJR05oWTJobFpDQnViMlJsSUhkb2IzTmxJRWxFSUdseklHRWdjSEpsWm1sNElHOW1JR0IwWVhKblpYUkpSR0F1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1pwYm1SRVpXVndaWE4wUTJGamFHVmtRVzVqWlhOMGIzSW9kR0Z5WjJWMFNVUXBJSHRjYmlBZ1pHVmxjR1Z6ZEU1dlpHVlRiMFpoY2lBOUlHNTFiR3c3WEc0Z0lGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpMblJ5WVhabGNuTmxRVzVqWlhOMGIzSnpLRnh1SUNBZ0lIUmhjbWRsZEVsRUxGeHVJQ0FnSUdacGJtUkVaV1Z3WlhOMFEyRmphR1ZrUVc1alpYTjBiM0pKYlhCc1hHNGdJQ2s3WEc1Y2JpQWdkbUZ5SUdadmRXNWtUbTlrWlNBOUlHUmxaWEJsYzNST2IyUmxVMjlHWVhJN1hHNGdJR1JsWlhCbGMzUk9iMlJsVTI5R1lYSWdQU0J1ZFd4c08xeHVJQ0J5WlhSMWNtNGdabTkxYm1ST2IyUmxPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFMXZkVzUwY3lCMGFHbHpJR052YlhCdmJtVnVkQ0JoYm1RZ2FXNXpaWEowY3lCcGRDQnBiblJ2SUhSb1pTQkVUMDB1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdZMjl0Y0c5dVpXNTBTVzV6ZEdGdVkyVWdWR2hsSUdsdWMzUmhibU5sSUhSdklHMXZkVzUwTGx4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlISnZiM1JKUkNCRVQwMGdTVVFnYjJZZ2RHaGxJSEp2YjNRZ2JtOWtaUzVjYmlBcUlFQndZWEpoYlNCN1JFOU5SV3hsYldWdWRIMGdZMjl1ZEdGcGJtVnlJRVJQVFNCbGJHVnRaVzUwSUhSdklHMXZkVzUwSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZTFKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjU5SUhSeVlXNXpZV04wYVc5dVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSE5vYjNWc1pGSmxkWE5sVFdGeWEzVndJRWxtSUhSeWRXVXNJR1J2SUc1dmRDQnBibk5sY25RZ2JXRnlhM1Z3WEc0Z0tpOWNibVoxYm1OMGFXOXVJRzF2ZFc1MFEyOXRjRzl1Wlc1MFNXNTBiMDV2WkdVb1hHNGdJQ0FnWTI5dGNHOXVaVzUwU1c1emRHRnVZMlVzWEc0Z0lDQWdjbTl2ZEVsRUxGeHVJQ0FnSUdOdmJuUmhhVzVsY2l4Y2JpQWdJQ0IwY21GdWMyRmpkR2x2Yml4Y2JpQWdJQ0J6YUc5MWJHUlNaWFZ6WlUxaGNtdDFjQ2tnZTF4dUlDQjJZWElnYldGeWEzVndJRDBnVW1WaFkzUlNaV052Ym1OcGJHVnlMbTF2ZFc1MFEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUdOdmJYQnZibVZ1ZEVsdWMzUmhibU5sTENCeWIyOTBTVVFzSUhSeVlXNXpZV04wYVc5dUxDQmxiWEIwZVU5aWFtVmpkRnh1SUNBcE8xeHVJQ0JqYjIxd2IyNWxiblJKYm5OMFlXNWpaUzVmYVhOVWIzQk1aWFpsYkNBOUlIUnlkV1U3WEc0Z0lGSmxZV04wVFc5MWJuUXVYMjF2ZFc1MFNXMWhaMlZKYm5SdlRtOWtaU2h0WVhKcmRYQXNJR052Ym5SaGFXNWxjaXdnYzJodmRXeGtVbVYxYzJWTllYSnJkWEFwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUpoZEdOb1pXUWdiVzkxYm5RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRU52YlhCdmJtVnVkSDBnWTI5dGNHOXVaVzUwU1c1emRHRnVZMlVnVkdobElHbHVjM1JoYm1ObElIUnZJRzF2ZFc1MExseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSEp2YjNSSlJDQkVUMDBnU1VRZ2IyWWdkR2hsSUhKdmIzUWdibTlrWlM1Y2JpQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnWTI5dWRHRnBibVZ5SUVSUFRTQmxiR1Z0Wlc1MElIUnZJRzF2ZFc1MElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlITm9iM1ZzWkZKbGRYTmxUV0Z5YTNWd0lFbG1JSFJ5ZFdVc0lHUnZJRzV2ZENCcGJuTmxjblFnYldGeWEzVndYRzRnS2k5Y2JtWjFibU4wYVc5dUlHSmhkR05vWldSTmIzVnVkRU52YlhCdmJtVnVkRWx1ZEc5T2IyUmxLRnh1SUNBZ0lHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObExGeHVJQ0FnSUhKdmIzUkpSQ3hjYmlBZ0lDQmpiMjUwWVdsdVpYSXNYRzRnSUNBZ2MyaHZkV3hrVW1WMWMyVk5ZWEpyZFhBcElIdGNiaUFnZG1GeUlIUnlZVzV6WVdOMGFXOXVJRDBnVW1WaFkzUlZjR1JoZEdWekxsSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI0dVoyVjBVRzl2YkdWa0tDazdYRzRnSUhSeVlXNXpZV04wYVc5dUxuQmxjbVp2Y20wb1hHNGdJQ0FnYlc5MWJuUkRiMjF3YjI1bGJuUkpiblJ2VG05a1pTeGNiaUFnSUNCdWRXeHNMRnh1SUNBZ0lHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObExGeHVJQ0FnSUhKdmIzUkpSQ3hjYmlBZ0lDQmpiMjUwWVdsdVpYSXNYRzRnSUNBZ2RISmhibk5oWTNScGIyNHNYRzRnSUNBZ2MyaHZkV3hrVW1WMWMyVk5ZWEpyZFhCY2JpQWdLVHRjYmlBZ1VtVmhZM1JWY0dSaGRHVnpMbEpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNHVjbVZzWldGelpTaDBjbUZ1YzJGamRHbHZiaWs3WEc1OVhHNWNiaThxS2x4dUlDb2dUVzkxYm5ScGJtY2dhWE1nZEdobElIQnliMk5sYzNNZ2IyWWdhVzVwZEdsaGJHbDZhVzVuSUdFZ1VtVmhZM1FnWTI5dGNHOXVaVzUwSUdKNUlHTnlaV0YwYVc1bklHbDBjMXh1SUNvZ2NtVndjbVZ6Wlc1MFlYUnBkbVVnUkU5TklHVnNaVzFsYm5SeklHRnVaQ0JwYm5ObGNuUnBibWNnZEdobGJTQnBiblJ2SUdFZ2MzVndjR3hwWldRZ1lHTnZiblJoYVc1bGNtQXVYRzRnS2lCQmJua2djSEpwYjNJZ1kyOXVkR1Z1ZENCcGJuTnBaR1VnWUdOdmJuUmhhVzVsY21BZ2FYTWdaR1Z6ZEhKdmVXVmtJR2x1SUhSb1pTQndjbTlqWlhOekxseHVJQ3BjYmlBcUlDQWdVbVZoWTNSTmIzVnVkQzV5Wlc1a1pYSW9YRzRnS2lBZ0lDQWdZMjl0Y0c5dVpXNTBMRnh1SUNvZ0lDQWdJR1J2WTNWdFpXNTBMbWRsZEVWc1pXMWxiblJDZVVsa0tDZGpiMjUwWVdsdVpYSW5LVnh1SUNvZ0lDQXBPMXh1SUNwY2JpQXFJQ0FnUEdScGRpQnBaRDFjSW1OdmJuUmhhVzVsY2x3aVBpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThMUzBnVTNWd2NHeHBaV1FnWUdOdmJuUmhhVzVsY21BdVhHNGdLaUFnSUNBZ1BHUnBkaUJrWVhSaExYSmxZV04wYVdROVhDSXVNMXdpUGlBZ0lDQWdJQ0FnSUNBZ0lDQWdQQzB0SUZKbGJtUmxjbVZrSUhKbFlXTjBVbTl2ZENCdlppQlNaV0ZqZEZ4dUlDb2dJQ0FnSUNBZ0x5OGdMaTR1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl0Y0c5dVpXNTBMbHh1SUNvZ0lDQWdJRHd2WkdsMlBseHVJQ29nSUNBOEwyUnBkajVjYmlBcVhHNGdLaUJKYm5OcFpHVWdiMllnWUdOdmJuUmhhVzVsY21Bc0lIUm9aU0JtYVhKemRDQmxiR1Z0Wlc1MElISmxibVJsY21Wa0lHbHpJSFJvWlNCY0luSmxZV04wVW05dmRGd2lMbHh1SUNvdlhHNTJZWElnVW1WaFkzUk5iM1Z1ZENBOUlIdGNiaUFnTHlvcUlFVjRjRzl6WldRZ1ptOXlJR1JsWW5WbloybHVaeUJ3ZFhKd2IzTmxjeUFxS2k5Y2JpQWdYMmx1YzNSaGJtTmxjMEo1VW1WaFkzUlNiMjkwU1VRNklHbHVjM1JoYm1ObGMwSjVVbVZoWTNSU2IyOTBTVVFzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvYVhNZ2FYTWdZU0JvYjI5cklIQnliM1pwWkdWa0lIUnZJSE4xY0hCdmNuUWdjbVZ1WkdWeWFXNW5JRkpsWVdOMElHTnZiWEJ2Ym1WdWRITWdkMmhwYkdWY2JpQWdJQ29nWlc1emRYSnBibWNnZEdoaGRDQjBhR1VnWVhCd1lYSmxiblFnYzJOeWIyeHNJSEJ2YzJsMGFXOXVJRzltSUdsMGN5QmdZMjl1ZEdGcGJtVnlZQ0JrYjJWeklHNXZkRnh1SUNBZ0tpQmphR0Z1WjJVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnWTI5dWRHRnBibVZ5SUZSb1pTQmdZMjl1ZEdGcGJtVnlZQ0JpWldsdVp5QnlaVzVrWlhKbFpDQnBiblJ2TGx4dUlDQWdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVmU0J5Wlc1a1pYSkRZV3hzWW1GamF5QlVhR2x6SUcxMWMzUWdZbVVnWTJGc2JHVmtJRzl1WTJVZ2RHOGdaRzhnZEdobElISmxibVJsY2k1Y2JpQWdJQ292WEc0Z0lITmpjbTlzYkUxdmJtbDBiM0k2SUdaMWJtTjBhVzl1S0dOdmJuUmhhVzVsY2l3Z2NtVnVaR1Z5UTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0J5Wlc1a1pYSkRZV3hzWW1GamF5Z3BPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVVlXdGxJR0VnWTI5dGNHOXVaVzUwSUhSb1lYUW5jeUJoYkhKbFlXUjVJRzF2ZFc1MFpXUWdhVzUwYnlCMGFHVWdSRTlOSUdGdVpDQnlaWEJzWVdObElHbDBjeUJ3Y205d2MxeHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0J3Y21WMlEyOXRjRzl1Wlc1MElHTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTQmhiSEpsWVdSNUlHbHVJSFJvWlNCRVQwMWNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJRzVsZUhSRmJHVnRaVzUwSUdOdmJYQnZibVZ1ZENCcGJuTjBZVzVqWlNCMGJ5QnlaVzVrWlhKY2JpQWdJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCamIyNTBZV2x1WlhJZ1kyOXVkR0ZwYm1WeUlIUnZJSEpsYm1SbGNpQnBiblJ2WEc0Z0lDQXFJRUJ3WVhKaGJTQjdQMloxYm1OMGFXOXVmU0JqWVd4c1ltRmpheUJtZFc1amRHbHZiaUIwY21sbloyVnlaV1FnYjI0Z1kyOXRjR3hsZEdsdmJseHVJQ0FnS2k5Y2JpQWdYM1Z3WkdGMFpWSnZiM1JEYjIxd2IyNWxiblE2SUdaMWJtTjBhVzl1S0Z4dUlDQWdJQ0FnY0hKbGRrTnZiWEJ2Ym1WdWRDeGNiaUFnSUNBZ0lHNWxlSFJGYkdWdFpXNTBMRnh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlMRnh1SUNBZ0lDQWdZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQlNaV0ZqZEVWc1pXMWxiblJXWVd4cFpHRjBiM0l1WTJobFkydEJibVJYWVhKdVJtOXlUWFYwWVhSbFpGQnliM0J6S0c1bGVIUkZiR1Z0Wlc1MEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCU1pXRmpkRTF2ZFc1MExuTmpjbTlzYkUxdmJtbDBiM0lvWTI5dWRHRnBibVZ5TENCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lGSmxZV04wVlhCa1lYUmxVWFZsZFdVdVpXNXhkV1YxWlVWc1pXMWxiblJKYm5SbGNtNWhiQ2h3Y21WMlEyOXRjRzl1Wlc1MExDQnVaWGgwUld4bGJXVnVkQ2s3WEc0Z0lDQWdJQ0JwWmlBb1kyRnNiR0poWTJzcElIdGNiaUFnSUNBZ0lDQWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNWxibkYxWlhWbFEyRnNiR0poWTJ0SmJuUmxjbTVoYkNod2NtVjJRMjl0Y0c5dVpXNTBMQ0JqWVd4c1ltRmpheWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU2s3WEc1Y2JpQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0F2THlCU1pXTnZjbVFnZEdobElISnZiM1FnWld4bGJXVnVkQ0JwYmlCallYTmxJR2wwSUd4aGRHVnlJR2RsZEhNZ2RISmhibk53YkdGdWRHVmtMbHh1SUNBZ0lDQWdjbTl2ZEVWc1pXMWxiblJ6UW5sU1pXRmpkRkp2YjNSSlJGdG5aWFJTWldGamRGSnZiM1JKUkNoamIyNTBZV2x1WlhJcFhTQTlYRzRnSUNBZ0lDQWdJR2RsZEZKbFlXTjBVbTl2ZEVWc1pXMWxiblJKYmtOdmJuUmhhVzVsY2loamIyNTBZV2x1WlhJcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJ3Y21WMlEyOXRjRzl1Wlc1ME8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWldkcGMzUmxjaUJoSUdOdmJYQnZibVZ1ZENCcGJuUnZJSFJvWlNCcGJuTjBZVzVqWlNCdFlYQWdZVzVrSUhOMFlYSjBjeUJ6WTNKdmJHd2dkbUZzZFdWY2JpQWdJQ29nYlc5dWFYUnZjbWx1WjF4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQnVaWGgwUTI5dGNHOXVaVzUwSUdOdmJYQnZibVZ1ZENCcGJuTjBZVzVqWlNCMGJ5QnlaVzVrWlhKY2JpQWdJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCamIyNTBZV2x1WlhJZ1kyOXVkR0ZwYm1WeUlIUnZJSEpsYm1SbGNpQnBiblJ2WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMGdjbVZoWTNSU2IyOTBJRWxFSUhCeVpXWnBlRnh1SUNBZ0tpOWNiaUFnWDNKbFoybHpkR1Z5UTI5dGNHOXVaVzUwT2lCbWRXNWpkR2x2YmlodVpYaDBRMjl0Y0c5dVpXNTBMQ0JqYjI1MFlXbHVaWElwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlJQ1ltSUNoY2JpQWdJQ0FnSUNBZ0tHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQTlQVDBnUlV4RlRVVk9WRjlPVDBSRlgxUlpVRVVnZkh3Z1kyOXVkR0ZwYm1WeUxtNXZaR1ZVZVhCbElEMDlQU0JFVDBOZlRrOUVSVjlVV1ZCRktWeHVJQ0FnSUNBZ0tTeGNiaUFnSUNBZ0lDZGZjbVZuYVhOMFpYSkRiMjF3YjI1bGJuUW9MaTR1S1RvZ1ZHRnlaMlYwSUdOdmJuUmhhVzVsY2lCcGN5QnViM1FnWVNCRVQwMGdaV3hsYldWdWRDNG5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hqYjI1MFlXbHVaWElnSmlZZ0tGeHVJQ0FnSUNBZ0tHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQTlQVDBnUlV4RlRVVk9WRjlPVDBSRlgxUlpVRVVnZkh3Z1kyOXVkR0ZwYm1WeUxtNXZaR1ZVZVhCbElEMDlQU0JFVDBOZlRrOUVSVjlVV1ZCRktWeHVJQ0FnSUNrcEtUdGNibHh1SUNBZ0lGSmxZV04wUW5KdmQzTmxja1YyWlc1MFJXMXBkSFJsY2k1bGJuTjFjbVZUWTNKdmJHeFdZV3gxWlUxdmJtbDBiM0pwYm1jb0tUdGNibHh1SUNBZ0lIWmhjaUJ5WldGamRGSnZiM1JKUkNBOUlGSmxZV04wVFc5MWJuUXVjbVZuYVhOMFpYSkRiMjUwWVdsdVpYSW9ZMjl1ZEdGcGJtVnlLVHRjYmlBZ0lDQnBibk4wWVc1alpYTkNlVkpsWVdOMFVtOXZkRWxFVzNKbFlXTjBVbTl2ZEVsRVhTQTlJRzVsZUhSRGIyMXdiMjVsYm5RN1hHNGdJQ0FnY21WMGRYSnVJSEpsWVdOMFVtOXZkRWxFTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaVzVrWlhJZ1lTQnVaWGNnWTI5dGNHOXVaVzUwSUdsdWRHOGdkR2hsSUVSUFRTNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJRzVsZUhSRmJHVnRaVzUwSUdWc1pXMWxiblFnZEc4Z2NtVnVaR1Z5WEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnWTI5dWRHRnBibVZ5SUdOdmJuUmhhVzVsY2lCMGJ5QnlaVzVrWlhJZ2FXNTBiMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlITm9iM1ZzWkZKbGRYTmxUV0Z5YTNWd0lHbG1JSGRsSUhOb2IzVnNaQ0J6YTJsd0lIUm9aU0J0WVhKcmRYQWdhVzV6WlhKMGFXOXVYRzRnSUNBcUlFQnlaWFIxY200Z2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCdVpYaDBRMjl0Y0c5dVpXNTBYRzRnSUNBcUwxeHVJQ0JmY21WdVpHVnlUbVYzVW05dmRFTnZiWEJ2Ym1WdWREb2dablZ1WTNScGIyNG9YRzRnSUNBZ2JtVjRkRVZzWlcxbGJuUXNYRzRnSUNBZ1kyOXVkR0ZwYm1WeUxGeHVJQ0FnSUhOb2IzVnNaRkpsZFhObFRXRnlhM1Z3WEc0Z0lDa2dlMXh1SUNBZ0lDOHZJRlpoY21sdmRYTWdjR0Z5ZEhNZ2IyWWdiM1Z5SUdOdlpHVWdLSE4xWTJnZ1lYTWdVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5RbmMxeHVJQ0FnSUM4dklGOXlaVzVrWlhKV1lXeHBaR0YwWldSRGIyMXdiMjVsYm5RcElHRnpjM1Z0WlNCMGFHRjBJR05oYkd4eklIUnZJSEpsYm1SbGNpQmhjbVZ1SjNRZ2JtVnpkR1ZrTzF4dUlDQWdJQzh2SUhabGNtbG1lU0IwYUdGMElIUm9ZWFFuY3lCMGFHVWdZMkZ6WlM1Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUxtTjFjbkpsYm5RZ1BUMGdiblZzYkN4Y2JpQWdJQ0FnSUNkZmNtVnVaR1Z5VG1WM1VtOXZkRU52YlhCdmJtVnVkQ2dwT2lCU1pXNWtaWElnYldWMGFHOWtjeUJ6YUc5MWJHUWdZbVVnWVNCd2RYSmxJR1oxYm1OMGFXOXVJQ2NnSzF4dUlDQWdJQ0FnSjI5bUlIQnliM0J6SUdGdVpDQnpkR0YwWlRzZ2RISnBaMmRsY21sdVp5QnVaWE4wWldRZ1kyOXRjRzl1Wlc1MElIVndaR0YwWlhNZ1puSnZiU0FuSUN0Y2JpQWdJQ0FnSUNkeVpXNWtaWElnYVhNZ2JtOTBJR0ZzYkc5M1pXUXVJRWxtSUc1bFkyVnpjMkZ5ZVN3Z2RISnBaMmRsY2lCdVpYTjBaV1FnZFhCa1lYUmxjeUJwYmlBbklDdGNiaUFnSUNBZ0lDZGpiMjF3YjI1bGJuUkVhV1JWY0dSaGRHVXVKMXh1SUNBZ0lDa2dPaUJ1ZFd4c0tUdGNibHh1SUNBZ0lIWmhjaUJqYjIxd2IyNWxiblJKYm5OMFlXNWpaU0E5SUdsdWMzUmhiblJwWVhSbFVtVmhZM1JEYjIxd2IyNWxiblFvYm1WNGRFVnNaVzFsYm5Rc0lHNTFiR3dwTzF4dUlDQWdJSFpoY2lCeVpXRmpkRkp2YjNSSlJDQTlJRkpsWVdOMFRXOTFiblF1WDNKbFoybHpkR1Z5UTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnWTI5dGNHOXVaVzUwU1c1emRHRnVZMlVzWEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWEpjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdMeThnVkdobElHbHVhWFJwWVd3Z2NtVnVaR1Z5SUdseklITjVibU5vY205dWIzVnpJR0oxZENCaGJua2dkWEJrWVhSbGN5QjBhR0YwSUdoaGNIQmxiaUJrZFhKcGJtZGNiaUFnSUNBdkx5QnlaVzVrWlhKcGJtY3NJR2x1SUdOdmJYQnZibVZ1ZEZkcGJHeE5iM1Z1ZENCdmNpQmpiMjF3YjI1bGJuUkVhV1JOYjNWdWRDd2dkMmxzYkNCaVpTQmlZWFJqYUdWa1hHNGdJQ0FnTHk4Z1lXTmpiM0prYVc1bklIUnZJSFJvWlNCamRYSnlaVzUwSUdKaGRHTm9hVzVuSUhOMGNtRjBaV2Q1TGx4dVhHNGdJQ0FnVW1WaFkzUlZjR1JoZEdWekxtSmhkR05vWldSVmNHUmhkR1Z6S0Z4dUlDQWdJQ0FnWW1GMFkyaGxaRTF2ZFc1MFEyOXRjRzl1Wlc1MFNXNTBiMDV2WkdVc1hHNGdJQ0FnSUNCamIyMXdiMjVsYm5SSmJuTjBZVzVqWlN4Y2JpQWdJQ0FnSUhKbFlXTjBVbTl2ZEVsRUxGeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxGeHVJQ0FnSUNBZ2MyaHZkV3hrVW1WMWMyVk5ZWEpyZFhCY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnTHk4Z1VtVmpiM0prSUhSb1pTQnliMjkwSUdWc1pXMWxiblFnYVc0Z1kyRnpaU0JwZENCc1lYUmxjaUJuWlhSeklIUnlZVzV6Y0d4aGJuUmxaQzVjYmlBZ0lDQWdJSEp2YjNSRmJHVnRaVzUwYzBKNVVtVmhZM1JTYjI5MFNVUmJjbVZoWTNSU2IyOTBTVVJkSUQxY2JpQWdJQ0FnSUNBZ1oyVjBVbVZoWTNSU2IyOTBSV3hsYldWdWRFbHVRMjl1ZEdGcGJtVnlLR052Ym5SaGFXNWxjaWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlc1a1pYSnpJR0VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBJR2x1ZEc4Z2RHaGxJRVJQVFNCcGJpQjBhR1VnYzNWd2NHeHBaV1FnWUdOdmJuUmhhVzVsY21BdVhHNGdJQ0FxWEc0Z0lDQXFJRWxtSUhSb1pTQlNaV0ZqZENCamIyMXdiMjVsYm5RZ2QyRnpJSEJ5WlhacGIzVnpiSGtnY21WdVpHVnlaV1FnYVc1MGJ5QmdZMjl1ZEdGcGJtVnlZQ3dnZEdocGN5QjNhV3hzWEc0Z0lDQXFJSEJsY21admNtMGdZVzRnZFhCa1lYUmxJRzl1SUdsMElHRnVaQ0J2Ym14NUlHMTFkR0YwWlNCMGFHVWdSRTlOSUdGeklHNWxZMlZ6YzJGeWVTQjBieUJ5Wldac1pXTjBJSFJvWlZ4dUlDQWdLaUJzWVhSbGMzUWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFJXeGxiV1Z1ZEgwZ2JtVjRkRVZzWlcxbGJuUWdRMjl0Y0c5dVpXNTBJR1ZzWlcxbGJuUWdkRzhnY21WdVpHVnlMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJR052Ym5SaGFXNWxjaUJFVDAwZ1pXeGxiV1Z1ZENCMGJ5QnlaVzVrWlhJZ2FXNTBieTVjYmlBZ0lDb2dRSEJoY21GdElIcy9ablZ1WTNScGIyNTlJR05oYkd4aVlXTnJJR1oxYm1OMGFXOXVJSFJ5YVdkblpYSmxaQ0J2YmlCamIyMXdiR1YwYVc5dVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JEYjIxd2IyNWxiblFnYVc1emRHRnVZMlVnY21WdVpHVnlaV1FnYVc0Z1lHTnZiblJoYVc1bGNtQXVYRzRnSUNBcUwxeHVJQ0J5Wlc1a1pYSTZJR1oxYm1OMGFXOXVLRzVsZUhSRmJHVnRaVzUwTENCamIyNTBZV2x1WlhJc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENodVpYaDBSV3hsYldWdWRDa3NYRzRnSUNBZ0lDQW5VbVZoWTNRdWNtVnVaR1Z5S0NrNklFbHVkbUZzYVdRZ1kyOXRjRzl1Wlc1MElHVnNaVzFsYm5RdUpYTW5MRnh1SUNBZ0lDQWdLRnh1SUNBZ0lDQWdJQ0IwZVhCbGIyWWdibVY0ZEVWc1pXMWxiblFnUFQwOUlDZHpkSEpwYm1jbklEOWNiaUFnSUNBZ0lDQWdJQ0FuSUVsdWMzUmxZV1FnYjJZZ2NHRnpjMmx1WnlCaGJpQmxiR1Z0Wlc1MElITjBjbWx1Wnl3Z2JXRnJaU0J6ZFhKbElIUnZJR2x1YzNSaGJuUnBZWFJsSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2RwZENCaWVTQndZWE56YVc1bklHbDBJSFJ2SUZKbFlXTjBMbU55WldGMFpVVnNaVzFsYm5RdUp5QTZYRzRnSUNBZ0lDQWdJSFI1Y0dWdlppQnVaWGgwUld4bGJXVnVkQ0E5UFQwZ0oyWjFibU4wYVc5dUp5QS9YRzRnSUNBZ0lDQWdJQ0FnSnlCSmJuTjBaV0ZrSUc5bUlIQmhjM05wYm1jZ1lTQmpiMjF3YjI1bGJuUWdZMnhoYzNNc0lHMWhhMlVnYzNWeVpTQjBieUJwYm5OMFlXNTBhV0YwWlNBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuYVhRZ1lua2djR0Z6YzJsdVp5QnBkQ0IwYnlCU1pXRmpkQzVqY21WaGRHVkZiR1Z0Wlc1MExpY2dPbHh1SUNBZ0lDQWdJQ0F2THlCRGFHVmpheUJwWmlCcGRDQnhkV0ZqYTNNZ2JHbHJaU0JoYmlCbGJHVnRaVzUwWEc0Z0lDQWdJQ0FnSUc1bGVIUkZiR1Z0Wlc1MElDRTlJRzUxYkd3Z0ppWWdibVY0ZEVWc1pXMWxiblF1Y0hKdmNITWdJVDA5SUhWdVpHVm1hVzVsWkNBL1hHNGdJQ0FnSUNBZ0lDQWdKeUJVYUdseklHMWhlU0JpWlNCallYVnpaV1FnWW5rZ2RXNXBiblJsYm5ScGIyNWhiR3g1SUd4dllXUnBibWNnZEhkdklHbHVaR1Z3Wlc1a1pXNTBJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZGpiM0JwWlhNZ2IyWWdVbVZoWTNRdUp5QTZYRzRnSUNBZ0lDQWdJQ0FnSnlkY2JpQWdJQ0FnSUNsY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaHVaWGgwUld4bGJXVnVkQ2twS1R0Y2JseHVJQ0FnSUhaaGNpQndjbVYyUTI5dGNHOXVaVzUwSUQwZ2FXNXpkR0Z1WTJWelFubFNaV0ZqZEZKdmIzUkpSRnRuWlhSU1pXRmpkRkp2YjNSSlJDaGpiMjUwWVdsdVpYSXBYVHRjYmx4dUlDQWdJR2xtSUNod2NtVjJRMjl0Y0c5dVpXNTBLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2NISmxka1ZzWlcxbGJuUWdQU0J3Y21WMlEyOXRjRzl1Wlc1MExsOWpkWEp5Wlc1MFJXeGxiV1Z1ZER0Y2JpQWdJQ0FnSUdsbUlDaHphRzkxYkdSVmNHUmhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRDaHdjbVYyUld4bGJXVnVkQ3dnYm1WNGRFVnNaVzFsYm5RcEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQlNaV0ZqZEUxdmRXNTBMbDkxY0dSaGRHVlNiMjkwUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnSUNBZ0lIQnlaWFpEYjIxd2IyNWxiblFzWEc0Z0lDQWdJQ0FnSUNBZ2JtVjRkRVZzWlcxbGJuUXNYRzRnSUNBZ0lDQWdJQ0FnWTI5dWRHRnBibVZ5TEZ4dUlDQWdJQ0FnSUNBZ0lHTmhiR3hpWVdOclhHNGdJQ0FnSUNBZ0lDa3VaMlYwVUhWaWJHbGpTVzV6ZEdGdVkyVW9LVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJRkpsWVdOMFRXOTFiblF1ZFc1dGIzVnVkRU52YlhCdmJtVnVkRUYwVG05a1pTaGpiMjUwWVdsdVpYSXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJ5WldGamRGSnZiM1JGYkdWdFpXNTBJRDBnWjJWMFVtVmhZM1JTYjI5MFJXeGxiV1Z1ZEVsdVEyOXVkR0ZwYm1WeUtHTnZiblJoYVc1bGNpazdYRzRnSUNBZ2RtRnlJR052Ym5SaGFXNWxja2hoYzFKbFlXTjBUV0Z5YTNWd0lEMWNiaUFnSUNBZ0lISmxZV04wVW05dmRFVnNaVzFsYm5RZ0ppWWdVbVZoWTNSTmIzVnVkQzVwYzFKbGJtUmxjbVZrUW5sU1pXRmpkQ2h5WldGamRGSnZiM1JGYkdWdFpXNTBLVHRjYmx4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJR2xtSUNnaFkyOXVkR0ZwYm1WeVNHRnpVbVZoWTNSTllYSnJkWEFnZkh3Z2NtVmhZM1JTYjI5MFJXeGxiV1Z1ZEM1dVpYaDBVMmxpYkdsdVp5a2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2NtOXZkRVZzWlcxbGJuUlRhV0pzYVc1bklEMGdjbVZoWTNSU2IyOTBSV3hsYldWdWREdGNiaUFnSUNBZ0lDQWdkMmhwYkdVZ0tISnZiM1JGYkdWdFpXNTBVMmxpYkdsdVp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaFNaV0ZqZEUxdmRXNTBMbWx6VW1WdVpHVnlaV1JDZVZKbFlXTjBLSEp2YjNSRmJHVnRaVzUwVTJsaWJHbHVaeWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdKM0psYm1SbGNpZ3BPaUJVWVhKblpYUWdibTlrWlNCb1lYTWdiV0Z5YTNWd0lISmxibVJsY21Wa0lHSjVJRkpsWVdOMExDQmlkWFFnZEdobGNtVWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ2RoY21VZ2RXNXlaV3hoZEdWa0lHNXZaR1Z6SUdGeklIZGxiR3d1SUZSb2FYTWdhWE1nYlc5emRDQmpiMjF0YjI1c2VTQmpZWFZ6WldRZ1lua2dKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ2QzYUdsMFpTMXpjR0ZqWlNCcGJuTmxjblJsWkNCaGNtOTFibVFnYzJWeWRtVnlMWEpsYm1SbGNtVmtJRzFoY210MWNDNG5YRzRnSUNBZ0lDQWdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQnliMjkwUld4bGJXVnVkRk5wWW14cGJtY2dQU0J5YjI5MFJXeGxiV1Z1ZEZOcFlteHBibWN1Ym1WNGRGTnBZbXhwYm1jN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdjMmh2ZFd4a1VtVjFjMlZOWVhKcmRYQWdQU0JqYjI1MFlXbHVaWEpJWVhOU1pXRmpkRTFoY210MWNDQW1KaUFoY0hKbGRrTnZiWEJ2Ym1WdWREdGNibHh1SUNBZ0lIWmhjaUJqYjIxd2IyNWxiblFnUFNCU1pXRmpkRTF2ZFc1MExsOXlaVzVrWlhKT1pYZFNiMjkwUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnYm1WNGRFVnNaVzFsYm5Rc1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJc1hHNGdJQ0FnSUNCemFHOTFiR1JTWlhWelpVMWhjbXQxY0Z4dUlDQWdJQ2t1WjJWMFVIVmliR2xqU1c1emRHRnVZMlVvS1R0Y2JpQWdJQ0JwWmlBb1kyRnNiR0poWTJzcElIdGNiaUFnSUNBZ0lHTmhiR3hpWVdOckxtTmhiR3dvWTI5dGNHOXVaVzUwS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHTnZiWEJ2Ym1WdWREdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTI5dWMzUnlkV04wY3lCaElHTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTQnZaaUJnWTI5dWMzUnlkV04wYjNKZ0lIZHBkR2dnWUdsdWFYUnBZV3hRY205d2MyQWdZVzVrWEc0Z0lDQXFJSEpsYm1SbGNuTWdhWFFnYVc1MGJ5QjBhR1VnYzNWd2NHeHBaV1FnWUdOdmJuUmhhVzVsY21BdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNTlJR052Ym5OMGNuVmpkRzl5SUZKbFlXTjBJR052YlhCdmJtVnVkQ0JqYjI1emRISjFZM1J2Y2k1Y2JpQWdJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0J3Y205d2N5QkpibWwwYVdGc0lIQnliM0J6SUc5bUlIUm9aU0JqYjIxd2IyNWxiblFnYVc1emRHRnVZMlV1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnWTI5dWRHRnBibVZ5SUVSUFRTQmxiR1Z0Wlc1MElIUnZJSEpsYm1SbGNpQnBiblJ2TGx4dUlDQWdLaUJBY21WMGRYSnVJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdRMjl0Y0c5dVpXNTBJR2x1YzNSaGJtTmxJSEpsYm1SbGNtVmtJR2x1SUdCamIyNTBZV2x1WlhKZ0xseHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBRVzVrVW1WdVpHVnlRMjl0Y0c5dVpXNTBPaUJtZFc1amRHbHZiaWhqYjI1emRISjFZM1J2Y2l3Z2NISnZjSE1zSUdOdmJuUmhhVzVsY2lrZ2UxeHVJQ0FnSUhaaGNpQmxiR1Z0Wlc1MElEMGdVbVZoWTNSRmJHVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9ZMjl1YzNSeWRXTjBiM0lzSUhCeWIzQnpLVHRjYmlBZ0lDQnlaWFIxY200Z1VtVmhZM1JOYjNWdWRDNXlaVzVrWlhJb1pXeGxiV1Z1ZEN3Z1kyOXVkR0ZwYm1WeUtUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTI5dWMzUnlkV04wY3lCaElHTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTQnZaaUJnWTI5dWMzUnlkV04wYjNKZ0lIZHBkR2dnWUdsdWFYUnBZV3hRY205d2MyQWdZVzVrWEc0Z0lDQXFJSEpsYm1SbGNuTWdhWFFnYVc1MGJ5QmhJR052Ym5SaGFXNWxjaUJ1YjJSbElHbGtaVzUwYVdacFpXUWdZbmtnYzNWd2NHeHBaV1FnWUdsa1lDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnWTI5dGNHOXVaVzUwUTI5dWMzUnlkV04wYjNJZ1VtVmhZM1FnWTI5dGNHOXVaVzUwSUdOdmJuTjBjblZqZEc5eVhHNGdJQ0FxSUVCd1lYSmhiU0I3UDI5aWFtVmpkSDBnY0hKdmNITWdTVzVwZEdsaGJDQndjbTl3Y3lCdlppQjBhR1VnWTI5dGNHOXVaVzUwSUdsdWMzUmhibU5sTGx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnU1VRZ2IyWWdkR2hsSUVSUFRTQmxiR1Z0Wlc1MElIUnZJSEpsYm1SbGNpQnBiblJ2TGx4dUlDQWdLaUJBY21WMGRYSnVJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdRMjl0Y0c5dVpXNTBJR2x1YzNSaGJtTmxJSEpsYm1SbGNtVmtJR2x1SUhSb1pTQmpiMjUwWVdsdVpYSWdibTlrWlM1Y2JpQWdJQ292WEc0Z0lHTnZibk4wY25WamRFRnVaRkpsYm1SbGNrTnZiWEJ2Ym1WdWRFSjVTVVE2SUdaMWJtTjBhVzl1S0dOdmJuTjBjblZqZEc5eUxDQndjbTl3Y3l3Z2FXUXBJSHRjYmlBZ0lDQjJZWElnWkc5dFRtOWtaU0E5SUdSdlkzVnRaVzUwTG1kbGRFVnNaVzFsYm5SQ2VVbGtLR2xrS1R0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdaRzl0VG05a1pTeGNiaUFnSUNBZ0lDZFVjbWxsWkNCMGJ5Qm5aWFFnWld4bGJXVnVkQ0IzYVhSb0lHbGtJRzltSUZ3aUpYTmNJaUJpZFhRZ2FYUWdhWE1nYm05MElIQnlaWE5sYm5RZ2IyNGdkR2hsSUhCaFoyVXVKeXhjYmlBZ0lDQWdJR2xrWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoa2IyMU9iMlJsS1NrN1hHNGdJQ0FnY21WMGRYSnVJRkpsWVdOMFRXOTFiblF1WTI5dWMzUnlkV04wUVc1a1VtVnVaR1Z5UTI5dGNHOXVaVzUwS0dOdmJuTjBjblZqZEc5eUxDQndjbTl3Y3l3Z1pHOXRUbTlrWlNrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsWjJsemRHVnljeUJoSUdOdmJuUmhhVzVsY2lCdWIyUmxJR2x1ZEc4Z2QyaHBZMmdnVW1WaFkzUWdZMjl0Y0c5dVpXNTBjeUIzYVd4c0lHSmxJSEpsYm1SbGNtVmtMbHh1SUNBZ0tpQlVhR2x6SUdGc2MyOGdZM0psWVhSbGN5QjBhR1VnWENKeVpXRmpkRkp2YjNSY0lpQkpSQ0IwYUdGMElIZHBiR3dnWW1VZ1lYTnphV2R1WldRZ2RHOGdkR2hsSUdWc1pXMWxiblJjYmlBZ0lDb2djbVZ1WkdWeVpXUWdkMmwwYUdsdUxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUdOdmJuUmhhVzVsY2lCRVQwMGdaV3hsYldWdWRDQjBieUJ5WldkcGMzUmxjaUJoY3lCaElHTnZiblJoYVc1bGNpNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCVWFHVWdYQ0p5WldGamRGSnZiM1JjSWlCSlJDQnZaaUJsYkdWdFpXNTBjeUJ5Wlc1a1pYSmxaQ0IzYVhSb2FXNHVYRzRnSUNBcUwxeHVJQ0J5WldkcGMzUmxja052Ym5SaGFXNWxjam9nWm5WdVkzUnBiMjRvWTI5dWRHRnBibVZ5S1NCN1hHNGdJQ0FnZG1GeUlISmxZV04wVW05dmRFbEVJRDBnWjJWMFVtVmhZM1JTYjI5MFNVUW9ZMjl1ZEdGcGJtVnlLVHRjYmlBZ0lDQnBaaUFvY21WaFkzUlNiMjkwU1VRcElIdGNiaUFnSUNBZ0lDOHZJRWxtSUc5dVpTQmxlR2x6ZEhNc0lHMWhhMlVnYzNWeVpTQnBkQ0JwY3lCaElIWmhiR2xrSUZ3aWNtVmhZM1JTYjI5MFhDSWdTVVF1WEc0Z0lDQWdJQ0J5WldGamRGSnZiM1JKUkNBOUlGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpMbWRsZEZKbFlXTjBVbTl2ZEVsRVJuSnZiVTV2WkdWSlJDaHlaV0ZqZEZKdmIzUkpSQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2doY21WaFkzUlNiMjkwU1VRcElIdGNiaUFnSUNBZ0lDOHZJRTV2SUhaaGJHbGtJRndpY21WaFkzUlNiMjkwWENJZ1NVUWdabTkxYm1Rc0lHTnlaV0YwWlNCdmJtVXVYRzRnSUNBZ0lDQnlaV0ZqZEZKdmIzUkpSQ0E5SUZKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWekxtTnlaV0YwWlZKbFlXTjBVbTl2ZEVsRUtDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuUmhhVzVsY25OQ2VWSmxZV04wVW05dmRFbEVXM0psWVdOMFVtOXZkRWxFWFNBOUlHTnZiblJoYVc1bGNqdGNiaUFnSUNCeVpYUjFjbTRnY21WaFkzUlNiMjkwU1VRN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlZ1Ylc5MWJuUnpJR0Z1WkNCa1pYTjBjbTk1Y3lCMGFHVWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MElISmxibVJsY21Wa0lHbHVJSFJvWlNCZ1kyOXVkR0ZwYm1WeVlDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCamIyNTBZV2x1WlhJZ1JFOU5JR1ZzWlcxbGJuUWdZMjl1ZEdGcGJtbHVaeUJoSUZKbFlXTjBJR052YlhCdmJtVnVkQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMGdWSEoxWlNCcFppQmhJR052YlhCdmJtVnVkQ0IzWVhNZ1ptOTFibVFnYVc0Z1lXNWtJSFZ1Ylc5MWJuUmxaQ0JtY205dFhHNGdJQ0FxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdCamIyNTBZV2x1WlhKZ1hHNGdJQ0FxTDF4dUlDQjFibTF2ZFc1MFEyOXRjRzl1Wlc1MFFYUk9iMlJsT2lCbWRXNWpkR2x2YmloamIyNTBZV2x1WlhJcElIdGNiaUFnSUNBdkx5QldZWEpwYjNWeklIQmhjblJ6SUc5bUlHOTFjaUJqYjJSbElDaHpkV05vSUdGeklGSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwSjNOY2JpQWdJQ0F2THlCZmNtVnVaR1Z5Vm1Gc2FXUmhkR1ZrUTI5dGNHOXVaVzUwS1NCaGMzTjFiV1VnZEdoaGRDQmpZV3hzY3lCMGJ5QnlaVzVrWlhJZ1lYSmxiaWQwSUc1bGMzUmxaRHRjYmlBZ0lDQXZMeUIyWlhKcFpua2dkR2hoZENCMGFHRjBKM01nZEdobElHTmhjMlV1SUNoVGRISnBZM1JzZVNCemNHVmhhMmx1Wnl3Z2RXNXRiM1Z1ZEdsdVp5QjNiMjRuZENCallYVnpaU0JoWEc0Z0lDQWdMeThnY21WdVpHVnlJR0oxZENCM1pTQnpkR2xzYkNCa2IyNG5kQ0JsZUhCbFkzUWdkRzhnWW1VZ2FXNGdZU0J5Wlc1a1pYSWdZMkZzYkNCb1pYSmxMaWxjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5TG1OMWNuSmxiblFnUFQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ2QxYm0xdmRXNTBRMjl0Y0c5dVpXNTBRWFJPYjJSbEtDazZJRkpsYm1SbGNpQnRaWFJvYjJSeklITm9iM1ZzWkNCaVpTQmhJSEIxY21VZ1puVnVZM1JwYjI0Z2IyWWdKeUFyWEc0Z0lDQWdJQ0FuY0hKdmNITWdZVzVrSUhOMFlYUmxPeUIwY21sbloyVnlhVzVuSUc1bGMzUmxaQ0JqYjIxd2IyNWxiblFnZFhCa1lYUmxjeUJtY205dElISmxibVJsY2lCcGN5QW5JQ3RjYmlBZ0lDQWdJQ2R1YjNRZ1lXeHNiM2RsWkM0Z1NXWWdibVZqWlhOellYSjVMQ0IwY21sbloyVnlJRzVsYzNSbFpDQjFjR1JoZEdWeklHbHVJQ2NnSzF4dUlDQWdJQ0FnSjJOdmJYQnZibVZ1ZEVScFpGVndaR0YwWlM0blhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dVhHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaUFtSmlBb1hHNGdJQ0FnSUNBZ0lDaGpiMjUwWVdsdVpYSXVibTlrWlZSNWNHVWdQVDA5SUVWTVJVMUZUbFJmVGs5RVJWOVVXVkJGSUh4OElHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQTlQVDBnUkU5RFgwNVBSRVZmVkZsUVJTbGNiaUFnSUNBZ0lDa3NYRzRnSUNBZ0lDQW5kVzV0YjNWdWRFTnZiWEJ2Ym1WdWRFRjBUbTlrWlNndUxpNHBPaUJVWVhKblpYUWdZMjl1ZEdGcGJtVnlJR2x6SUc1dmRDQmhJRVJQVFNCbGJHVnRaVzUwTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHTnZiblJoYVc1bGNpQW1KaUFvWEc0Z0lDQWdJQ0FvWTI5dWRHRnBibVZ5TG01dlpHVlVlWEJsSUQwOVBTQkZURVZOUlU1VVgwNVBSRVZmVkZsUVJTQjhmQ0JqYjI1MFlXbHVaWEl1Ym05a1pWUjVjR1VnUFQwOUlFUlBRMTlPVDBSRlgxUlpVRVVwWEc0Z0lDQWdLU2twTzF4dVhHNGdJQ0FnZG1GeUlISmxZV04wVW05dmRFbEVJRDBnWjJWMFVtVmhZM1JTYjI5MFNVUW9ZMjl1ZEdGcGJtVnlLVHRjYmlBZ0lDQjJZWElnWTI5dGNHOXVaVzUwSUQwZ2FXNXpkR0Z1WTJWelFubFNaV0ZqZEZKdmIzUkpSRnR5WldGamRGSnZiM1JKUkYwN1hHNGdJQ0FnYVdZZ0tDRmpiMjF3YjI1bGJuUXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0I5WEc0Z0lDQWdVbVZoWTNSTmIzVnVkQzUxYm0xdmRXNTBRMjl0Y0c5dVpXNTBSbkp2YlU1dlpHVW9ZMjl0Y0c5dVpXNTBMQ0JqYjI1MFlXbHVaWElwTzF4dUlDQWdJR1JsYkdWMFpTQnBibk4wWVc1alpYTkNlVkpsWVdOMFVtOXZkRWxFVzNKbFlXTjBVbTl2ZEVsRVhUdGNiaUFnSUNCa1pXeGxkR1VnWTI5dWRHRnBibVZ5YzBKNVVtVmhZM1JTYjI5MFNVUmJjbVZoWTNSU2IyOTBTVVJkTzF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJR1JsYkdWMFpTQnliMjkwUld4bGJXVnVkSE5DZVZKbFlXTjBVbTl2ZEVsRVczSmxZV04wVW05dmRFbEVYVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWdWJXOTFiblJ6SUdFZ1kyOXRjRzl1Wlc1MElHRnVaQ0J5WlcxdmRtVnpJR2wwSUdaeWIyMGdkR2hsSUVSUFRTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdhVzV6ZEdGdVkyVWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MElHbHVjM1JoYm1ObExseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlHTnZiblJoYVc1bGNpQkVUMDBnWld4bGJXVnVkQ0IwYnlCMWJtMXZkVzUwSUdaeWIyMHVYRzRnSUNBcUlFQm1hVzVoYkZ4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb2dRSE5sWlNCN1VtVmhZM1JOYjNWdWRDNTFibTF2ZFc1MFEyOXRjRzl1Wlc1MFFYUk9iMlJsZlZ4dUlDQWdLaTljYmlBZ2RXNXRiM1Z1ZEVOdmJYQnZibVZ1ZEVaeWIyMU9iMlJsT2lCbWRXNWpkR2x2YmlocGJuTjBZVzVqWlN3Z1kyOXVkR0ZwYm1WeUtTQjdYRzRnSUNBZ1VtVmhZM1JTWldOdmJtTnBiR1Z5TG5WdWJXOTFiblJEYjIxd2IyNWxiblFvYVc1emRHRnVZMlVwTzF4dVhHNGdJQ0FnYVdZZ0tHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQTlQVDBnUkU5RFgwNVBSRVZmVkZsUVJTa2dlMXh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlJRDBnWTI5dWRHRnBibVZ5TG1SdlkzVnRaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJvZEhSd09pOHZhbk53WlhKbUxtTnZiUzlsYlhCMGVXbHVaeTFoTFc1dlpHVmNiaUFnSUNCM2FHbHNaU0FvWTI5dWRHRnBibVZ5TG14aGMzUkRhR2xzWkNrZ2UxeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxuSmxiVzkyWlVOb2FXeGtLR052Ym5SaGFXNWxjaTVzWVhOMFEyaHBiR1FwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1JtbHVaSE1nZEdobElHTnZiblJoYVc1bGNpQkVUMDBnWld4bGJXVnVkQ0IwYUdGMElHTnZiblJoYVc1eklGSmxZV04wSUdOdmJYQnZibVZ1ZENCMGJ5QjNhR2xqYUNCMGFHVmNiaUFnSUNvZ2MzVndjR3hwWldRZ1JFOU5JR0JwWkdBZ1ltVnNiMjVuY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRlJvWlNCSlJDQnZaaUJoYmlCbGJHVnRaVzUwSUhKbGJtUmxjbVZrSUdKNUlHRWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2lCQWNtVjBkWEp1SUhzL1JFOU5SV3hsYldWdWRIMGdSRTlOSUdWc1pXMWxiblFnZEdoaGRDQmpiMjUwWVdsdWN5QjBhR1VnWUdsa1lDNWNiaUFnSUNvdlhHNGdJR1pwYm1SU1pXRmpkRU52Ym5SaGFXNWxja1p2Y2tsRU9pQm1kVzVqZEdsdmJpaHBaQ2tnZTF4dUlDQWdJSFpoY2lCeVpXRmpkRkp2YjNSSlJDQTlJRkpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6TG1kbGRGSmxZV04wVW05dmRFbEVSbkp2YlU1dlpHVkpSQ2hwWkNrN1hHNGdJQ0FnZG1GeUlHTnZiblJoYVc1bGNpQTlJR052Ym5SaGFXNWxjbk5DZVZKbFlXTjBVbTl2ZEVsRVczSmxZV04wVW05dmRFbEVYVHRjYmx4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJSFpoY2lCeWIyOTBSV3hsYldWdWRDQTlJSEp2YjNSRmJHVnRaVzUwYzBKNVVtVmhZM1JTYjI5MFNVUmJjbVZoWTNSU2IyOTBTVVJkTzF4dUlDQWdJQ0FnYVdZZ0tISnZiM1JGYkdWdFpXNTBJQ1ltSUhKdmIzUkZiR1Z0Wlc1MExuQmhjbVZ1ZEU1dlpHVWdJVDA5SUdOdmJuUmhhVzVsY2lrZ2UxeHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQWdJQzh2SUVOaGJHd2dhVzUwWlhKdVlXeEhaWFJKUkNCb1pYSmxJR0psWTJGMWMyVWdaMlYwU1VRZ1kyRnNiSE1nYVhOV1lXeHBaQ0IzYUdsamFDQmpZV3hzYzF4dUlDQWdJQ0FnSUNBZ0lDOHZJR1pwYm1SU1pXRmpkRU52Ym5SaGFXNWxja1p2Y2tsRUlDaDBhR2x6SUdaMWJtTjBhVzl1S1M1Y2JpQWdJQ0FnSUNBZ0lDQnBiblJsY201aGJFZGxkRWxFS0hKdmIzUkZiR1Z0Wlc1MEtTQTlQVDBnY21WaFkzUlNiMjkwU1VRc1hHNGdJQ0FnSUNBZ0lDQWdKMUpsWVdOMFRXOTFiblE2SUZKdmIzUWdaV3hsYldWdWRDQkpSQ0JrYVdabVpYSmxaQ0JtY205dElISmxZV04wVW05dmRFbEVMaWRjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDZ3ZMeUJEWVd4c0lHbHVkR1Z5Ym1Gc1IyVjBTVVFnYUdWeVpTQmlaV05oZFhObElHZGxkRWxFSUdOaGJHeHpJR2x6Vm1Gc2FXUWdkMmhwWTJnZ1kyRnNiSE5jYmlBZ0lDQWdJQ0FnTHk4Z1ptbHVaRkpsWVdOMFEyOXVkR0ZwYm1WeVJtOXlTVVFnS0hSb2FYTWdablZ1WTNScGIyNHBMbHh1SUNBZ0lDQWdJQ0JwYm5SbGNtNWhiRWRsZEVsRUtISnZiM1JGYkdWdFpXNTBLU0E5UFQwZ2NtVmhZM1JTYjI5MFNVUXBLVHRjYmx4dUlDQWdJQ0FnSUNCMllYSWdZMjl1ZEdGcGJtVnlRMmhwYkdRZ1BTQmpiMjUwWVdsdVpYSXVabWx5YzNSRGFHbHNaRHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHTnZiblJoYVc1bGNrTm9hV3hrSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WldGamRGSnZiM1JKUkNBOVBUMGdhVzUwWlhKdVlXeEhaWFJKUkNoamIyNTBZV2x1WlhKRGFHbHNaQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJKWmlCMGFHVWdZMjl1ZEdGcGJtVnlJR2hoY3lCaElHNWxkeUJqYUdsc1pDQjNhWFJvSUhSb1pTQnpZVzFsSUVsRUlHRnpJSFJvWlNCdmJHUmNiaUFnSUNBZ0lDQWdJQ0F2THlCeWIyOTBJR1ZzWlcxbGJuUXNJSFJvWlc0Z2NtOXZkRVZzWlcxbGJuUnpRbmxTWldGamRGSnZiM1JKUkZ0eVpXRmpkRkp2YjNSSlJGMGdhWE5jYmlBZ0lDQWdJQ0FnSUNBdkx5QnFkWE4wSUhOMFlXeGxJR0Z1WkNCdVpXVmtjeUIwYnlCaVpTQjFjR1JoZEdWa0xpQlVhR1VnWTJGelpTQjBhR0YwSUdSbGMyVnlkbVZ6SUdGY2JpQWdJQ0FnSUNBZ0lDQXZMeUIzWVhKdWFXNW5JR2x6SUhkb1pXNGdkR2hsSUdOdmJuUmhhVzVsY2lCcGN5QmxiWEIwZVM1Y2JpQWdJQ0FnSUNBZ0lDQnliMjkwUld4bGJXVnVkSE5DZVZKbFlXTjBVbTl2ZEVsRVczSmxZV04wVW05dmRFbEVYU0E5SUdOdmJuUmhhVzVsY2tOb2FXeGtPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5VbVZoWTNSTmIzVnVkRG9nVW05dmRDQmxiR1Z0Wlc1MElHaGhjeUJpWldWdUlISmxiVzkyWldRZ1puSnZiU0JwZEhNZ2IzSnBaMmx1WVd3Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSUNBblkyOXVkR0ZwYm1WeUxpQk9aWGNnWTI5dWRHRnBibVZ5T2ljc0lISnZiM1JGYkdWdFpXNTBMbkJoY21WdWRFNXZaR1ZjYmlBZ0lDQWdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnWTI5dWRHRnBibVZ5TzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkdhVzVrY3lCaGJpQmxiR1Z0Wlc1MElISmxibVJsY21Wa0lHSjVJRkpsWVdOMElIZHBkR2dnZEdobElITjFjSEJzYVdWa0lFbEVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1NVUWdiMllnWVNCRVQwMGdibTlrWlNCcGJpQjBhR1VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdEVUMDFGYkdWdFpXNTBmU0JTYjI5MElFUlBUU0J1YjJSbElHOW1JSFJvWlNCU1pXRmpkQ0JqYjIxd2IyNWxiblF1WEc0Z0lDQXFMMXh1SUNCbWFXNWtVbVZoWTNST2IyUmxRbmxKUkRvZ1puVnVZM1JwYjI0b2FXUXBJSHRjYmlBZ0lDQjJZWElnY21WaFkzUlNiMjkwSUQwZ1VtVmhZM1JOYjNWdWRDNW1hVzVrVW1WaFkzUkRiMjUwWVdsdVpYSkdiM0pKUkNocFpDazdYRzRnSUNBZ2NtVjBkWEp1SUZKbFlXTjBUVzkxYm5RdVptbHVaRU52YlhCdmJtVnVkRkp2YjNRb2NtVmhZM1JTYjI5MExDQnBaQ2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGUnlkV1VnYVdZZ2RHaGxJSE4xY0hCc2FXVmtJR0J1YjJSbFlDQnBjeUJ5Wlc1a1pYSmxaQ0JpZVNCU1pXRmpkQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUhzcWZTQnViMlJsSUVSUFRTQkZiR1Z0Wlc1MElIUnZJR05vWldOckxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlNCVWNuVmxJR2xtSUhSb1pTQkVUMDBnUld4bGJXVnVkQ0JoY0hCbFlYSnpJSFJ2SUdKbElISmxibVJsY21Wa0lHSjVJRkpsWVdOMExseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHbHpVbVZ1WkdWeVpXUkNlVkpsWVdOME9pQm1kVzVqZEdsdmJpaHViMlJsS1NCN1hHNGdJQ0FnYVdZZ0tHNXZaR1V1Ym05a1pWUjVjR1VnSVQwOUlERXBJSHRjYmlBZ0lDQWdJQzh2SUU1dmRDQmhJRVJQVFVWc1pXMWxiblFzSUhSb1pYSmxabTl5WlNCdWIzUWdZU0JTWldGamRDQmpiMjF3YjI1bGJuUmNiaUFnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR2xrSUQwZ1VtVmhZM1JOYjNWdWRDNW5aWFJKUkNodWIyUmxLVHRjYmlBZ0lDQnlaWFIxY200Z2FXUWdQeUJwWkM1amFHRnlRWFFvTUNrZ1BUMDlJRk5GVUVGU1FWUlBVaUE2SUdaaGJITmxPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVWNtRjJaWEp6WlhNZ2RYQWdkR2hsSUdGdVkyVnpkRzl5Y3lCdlppQjBhR1VnYzNWd2NHeHBaV1FnYm05a1pTQjBieUJtYVc1a0lHRWdibTlrWlNCMGFHRjBJR2x6SUdGY2JpQWdJQ29nUkU5TklISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlHRWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdleXA5SUc1dlpHVmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1AwUlBUVVYyWlc1MFZHRnlaMlYwZlZ4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUdkbGRFWnBjbk4wVW1WaFkzUkVUMDA2SUdaMWJtTjBhVzl1S0c1dlpHVXBJSHRjYmlBZ0lDQjJZWElnWTNWeWNtVnVkQ0E5SUc1dlpHVTdYRzRnSUNBZ2QyaHBiR1VnS0dOMWNuSmxiblFnSmlZZ1kzVnljbVZ1ZEM1d1lYSmxiblJPYjJSbElDRTlQU0JqZFhKeVpXNTBLU0I3WEc0Z0lDQWdJQ0JwWmlBb1VtVmhZM1JOYjNWdWRDNXBjMUpsYm1SbGNtVmtRbmxTWldGamRDaGpkWEp5Wlc1MEtTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZM1Z5Y21WdWREdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTjFjbkpsYm5RZ1BTQmpkWEp5Wlc1MExuQmhjbVZ1ZEU1dlpHVTdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJHYVc1a2N5QmhJRzV2WkdVZ2QybDBhQ0IwYUdVZ2MzVndjR3hwWldRZ1lIUmhjbWRsZEVsRVlDQnBibk5wWkdVZ2IyWWdkR2hsSUhOMWNIQnNhV1ZrWEc0Z0lDQXFJR0JoYm1ObGMzUnZjazV2WkdWZ0xpQWdSWGh3Ykc5cGRITWdkR2hsSUVsRUlHNWhiV2x1WnlCelkyaGxiV1VnZEc4Z2NHVnlabTl5YlNCMGFHVWdjMlZoY21Ob1hHNGdJQ0FxSUhGMWFXTnJiSGt1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1JFOU5SWFpsYm5SVVlYSm5aWFI5SUdGdVkyVnpkRzl5VG05a1pTQlRaV0Z5WTJnZ1puSnZiU0IwYUdseklISnZiM1F1WEc0Z0lDQXFJRUJ3WVhKaGNtMGdlM04wY21sdVozMGdkR0Z5WjJWMFNVUWdTVVFnYjJZZ2RHaGxJRVJQVFNCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHVWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdEVUMDFGZG1WdWRGUmhjbWRsZEgwZ1JFOU5JRzV2WkdVZ2QybDBhQ0IwYUdVZ2MzVndjR3hwWldRZ1lIUmhjbWRsZEVsRVlDNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQm1hVzVrUTI5dGNHOXVaVzUwVW05dmREb2dablZ1WTNScGIyNG9ZVzVqWlhOMGIzSk9iMlJsTENCMFlYSm5aWFJKUkNrZ2UxeHVJQ0FnSUhaaGNpQm1hWEp6ZEVOb2FXeGtjbVZ1SUQwZ1ptbHVaRU52YlhCdmJtVnVkRkp2YjNSU1pYVnpZV0pzWlVGeWNtRjVPMXh1SUNBZ0lIWmhjaUJqYUdsc1pFbHVaR1Y0SUQwZ01EdGNibHh1SUNBZ0lIWmhjaUJrWldWd1pYTjBRVzVqWlhOMGIzSWdQU0JtYVc1a1JHVmxjR1Z6ZEVOaFkyaGxaRUZ1WTJWemRHOXlLSFJoY21kbGRFbEVLU0I4ZkNCaGJtTmxjM1J2Y2s1dlpHVTdYRzVjYmlBZ0lDQm1hWEp6ZEVOb2FXeGtjbVZ1V3pCZElEMGdaR1ZsY0dWemRFRnVZMlZ6ZEc5eUxtWnBjbk4wUTJocGJHUTdYRzRnSUNBZ1ptbHljM1JEYUdsc1pISmxiaTVzWlc1bmRHZ2dQU0F4TzF4dVhHNGdJQ0FnZDJocGJHVWdLR05vYVd4a1NXNWtaWGdnUENCbWFYSnpkRU5vYVd4a2NtVnVMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdkbUZ5SUdOb2FXeGtJRDBnWm1seWMzUkRhR2xzWkhKbGJsdGphR2xzWkVsdVpHVjRLeXRkTzF4dUlDQWdJQ0FnZG1GeUlIUmhjbWRsZEVOb2FXeGtPMXh1WEc0Z0lDQWdJQ0IzYUdsc1pTQW9ZMmhwYkdRcElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdOb2FXeGtTVVFnUFNCU1pXRmpkRTF2ZFc1MExtZGxkRWxFS0dOb2FXeGtLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHTm9hV3hrU1VRcElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCRmRtVnVJR2xtSUhkbElHWnBibVFnZEdobElHNXZaR1VnZDJVbmNtVWdiRzl2YTJsdVp5Qm1iM0lzSUhkbElHWnBibWx6YUNCc2IyOXdhVzVuWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkR2h5YjNWbmFDQnBkSE1nYzJsaWJHbHVaM01nZEc4Z1pXNXpkWEpsSUhSb1pYa25jbVVnWTJGamFHVmtJSE52SUhSb1lYUWdkMlVnWkc5dUozUWdhR0YyWlZ4dUlDQWdJQ0FnSUNBZ0lDOHZJSFJ2SUhKbGRtbHphWFFnZEdocGN5QnViMlJsSUdGbllXbHVMaUJQZEdobGNuZHBjMlVzSUhkbElHMWhhMlVnYmw0eUlHTmhiR3h6SUhSdklHZGxkRWxFWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkMmhsYmlCMmFYTnBkR2x1WnlCMGFHVWdiV0Z1ZVNCamFHbHNaSEpsYmlCdlppQmhJSE5wYm1kc1pTQnViMlJsSUdsdUlHOXlaR1Z5TGx4dVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSaGNtZGxkRWxFSUQwOVBTQmphR2xzWkVsRUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMFlYSm5aWFJEYUdsc1pDQTlJR05vYVd4a08xeHVJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvVW1WaFkzUkpibk4wWVc1alpVaGhibVJzWlhNdWFYTkJibU5sYzNSdmNrbEVUMllvWTJocGJHUkpSQ3dnZEdGeVoyVjBTVVFwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCSlppQjNaU0JtYVc1a0lHRWdZMmhwYkdRZ2QyaHZjMlVnU1VRZ2FYTWdZVzRnWVc1alpYTjBiM0lnYjJZZ2RHaGxJR2RwZG1WdUlFbEVMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdkR2hsYmlCM1pTQmpZVzRnWW1VZ2MzVnlaU0IwYUdGMElIZGxJRzl1YkhrZ2QyRnVkQ0IwYnlCelpXRnlZMmdnZEdobElITjFZblJ5WldWY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUhKdmIzUmxaQ0JoZENCMGFHbHpJR05vYVd4a0xDQnpieUIzWlNCallXNGdkR2h5YjNjZ2IzVjBJSFJvWlNCeVpYTjBJRzltSUhSb1pWeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2MyVmhjbU5vSUhOMFlYUmxMbHh1SUNBZ0lDQWdJQ0FnSUNBZ1ptbHljM1JEYUdsc1pISmxiaTVzWlc1bmRHZ2dQU0JqYUdsc1pFbHVaR1Y0SUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0FnSUdacGNuTjBRMmhwYkdSeVpXNHVjSFZ6YUNoamFHbHNaQzVtYVhKemRFTm9hV3hrS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QkpaaUIwYUdseklHTm9hV3hrSUdoaFpDQnVieUJKUkN3Z2RHaGxiaUIwYUdWeVpTZHpJR0VnWTJoaGJtTmxJSFJvWVhRZ2FYUWdkMkZ6WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdhVzVxWldOMFpXUWdZWFYwYjIxaGRHbGpZV3hzZVNCaWVTQjBhR1VnWW5KdmQzTmxjaXdnWVhNZ2QyaGxiaUJoSUdBOGRHRmliR1UrWUZ4dUlDQWdJQ0FnSUNBZ0lDOHZJR1ZzWlcxbGJuUWdjM0J5YjNWMGN5QmhiaUJsZUhSeVlTQmdQSFJpYjJSNVBtQWdZMmhwYkdRZ1lYTWdZU0J6YVdSbElHVm1abVZqZENCdlpseHVJQ0FnSUNBZ0lDQWdJQzh2SUdBdWFXNXVaWEpJVkUxTVlDQndZWEp6YVc1bkxpQlBjSFJwYldsemRHbGpZV3hzZVNCamIyNTBhVzUxWlNCa2IzZHVJSFJvYVhOY2JpQWdJQ0FnSUNBZ0lDQXZMeUJpY21GdVkyZ3NJR0oxZENCdWIzUWdZbVZtYjNKbElHVjRZVzFwYm1sdVp5QjBhR1VnYjNSb1pYSWdjMmxpYkdsdVozTXVYRzRnSUNBZ0lDQWdJQ0FnWm1seWMzUkRhR2xzWkhKbGJpNXdkWE5vS0dOb2FXeGtMbVpwY25OMFEyaHBiR1FwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdZMmhwYkdRZ1BTQmphR2xzWkM1dVpYaDBVMmxpYkdsdVp6dGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdhV1lnS0hSaGNtZGxkRU5vYVd4a0tTQjdYRzRnSUNBZ0lDQWdJQzh2SUVWdGNIUjVhVzVuSUdacGNuTjBRMmhwYkdSeVpXNHZabWx1WkVOdmJYQnZibVZ1ZEZKdmIzUlNaWFZ6WVdKc1pVRnljbUY1SUdselhHNGdJQ0FnSUNBZ0lDOHZJRzV2ZENCdVpXTmxjM05oY25rZ1ptOXlJR052Y25KbFkzUnVaWE56TENCaWRYUWdhWFFnYUdWc2NITWdkR2hsSUVkRElISmxZMnhoYVcxY2JpQWdJQ0FnSUNBZ0x5OGdZVzU1SUc1dlpHVnpJSFJvWVhRZ2QyVnlaU0JzWldaMElHRjBJSFJvWlNCbGJtUWdiMllnZEdobElITmxZWEpqYUM1Y2JpQWdJQ0FnSUNBZ1ptbHljM1JEYUdsc1pISmxiaTVzWlc1bmRHZ2dQU0F3TzF4dVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMFlYSm5aWFJEYUdsc1pEdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCbWFYSnpkRU5vYVd4a2NtVnVMbXhsYm1kMGFDQTlJREE3WEc1Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBblptbHVaRU52YlhCdmJtVnVkRkp2YjNRb0xpNHVMQ0FsY3lrNklGVnVZV0pzWlNCMGJ5Qm1hVzVrSUdWc1pXMWxiblF1SUZSb2FYTWdjSEp2WW1GaWJIa2dKeUFyWEc0Z0lDQWdJQ0FuYldWaGJuTWdkR2hsSUVSUFRTQjNZWE1nZFc1bGVIQmxZM1JsWkd4NUlHMTFkR0YwWldRZ0tHVXVaeTRzSUdKNUlIUm9aU0JpY205M2MyVnlLU3dnSnlBclhHNGdJQ0FnSUNBbmRYTjFZV3hzZVNCa2RXVWdkRzhnWm05eVoyVjBkR2x1WnlCaElEeDBZbTlrZVQ0Z2QyaGxiaUIxYzJsdVp5QjBZV0pzWlhNc0lHNWxjM1JwYm1jZ2RHRm5jeUFuSUN0Y2JpQWdJQ0FnSUNkc2FXdGxJRHhtYjNKdFBpd2dQSEErTENCdmNpQThZVDRzSUc5eUlIVnphVzVuSUc1dmJpMVRWa2NnWld4bGJXVnVkSE1nYVc0Z1lXNGdQSE4yWno0Z0p5QXJYRzRnSUNBZ0lDQW5jR0Z5Wlc1MExpQW5JQ3RjYmlBZ0lDQWdJQ2RVY25rZ2FXNXpjR1ZqZEdsdVp5QjBhR1VnWTJocGJHUWdibTlrWlhNZ2IyWWdkR2hsSUdWc1pXMWxiblFnZDJsMGFDQlNaV0ZqZENCSlJDQmdKWE5nTGljc1hHNGdJQ0FnSUNCMFlYSm5aWFJKUkN4Y2JpQWdJQ0FnSUZKbFlXTjBUVzkxYm5RdVoyVjBTVVFvWVc1alpYTjBiM0pPYjJSbEtWeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9abUZzYzJVcEtUdGNiaUFnZlN4Y2JseHVJQ0JmYlc5MWJuUkpiV0ZuWlVsdWRHOU9iMlJsT2lCbWRXNWpkR2x2YmlodFlYSnJkWEFzSUdOdmJuUmhhVzVsY2l3Z2MyaHZkV3hrVW1WMWMyVk5ZWEpyZFhBcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnWTI5dWRHRnBibVZ5SUNZbUlDaGNiaUFnSUNBZ0lDQWdLR052Ym5SaGFXNWxjaTV1YjJSbFZIbHdaU0E5UFQwZ1JVeEZUVVZPVkY5T1QwUkZYMVJaVUVVZ2ZId2dZMjl1ZEdGcGJtVnlMbTV2WkdWVWVYQmxJRDA5UFNCRVQwTmZUazlFUlY5VVdWQkZLVnh1SUNBZ0lDQWdLU3hjYmlBZ0lDQWdJQ2R0YjNWdWRFTnZiWEJ2Ym1WdWRFbHVkRzlPYjJSbEtDNHVMaWs2SUZSaGNtZGxkQ0JqYjI1MFlXbHVaWElnYVhNZ2JtOTBJSFpoYkdsa0xpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLR052Ym5SaGFXNWxjaUFtSmlBb1hHNGdJQ0FnSUNBb1kyOXVkR0ZwYm1WeUxtNXZaR1ZVZVhCbElEMDlQU0JGVEVWTlJVNVVYMDVQUkVWZlZGbFFSU0I4ZkNCamIyNTBZV2x1WlhJdWJtOWtaVlI1Y0dVZ1BUMDlJRVJQUTE5T1QwUkZYMVJaVUVVcFhHNGdJQ0FnS1NrcE8xeHVYRzRnSUNBZ2FXWWdLSE5vYjNWc1pGSmxkWE5sVFdGeWEzVndLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2NtOXZkRVZzWlcxbGJuUWdQU0JuWlhSU1pXRmpkRkp2YjNSRmJHVnRaVzUwU1c1RGIyNTBZV2x1WlhJb1kyOXVkR0ZwYm1WeUtUdGNiaUFnSUNBZ0lHbG1JQ2hTWldGamRFMWhjbXQxY0VOb1pXTnJjM1Z0TG1OaGJsSmxkWE5sVFdGeWEzVndLRzFoY210MWNDd2djbTl2ZEVWc1pXMWxiblFwS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQmphR1ZqYTNOMWJTQTlJSEp2YjNSRmJHVnRaVzUwTG1kbGRFRjBkSEpwWW5WMFpTaGNiaUFnSUNBZ0lDQWdJQ0JTWldGamRFMWhjbXQxY0VOb1pXTnJjM1Z0TGtOSVJVTkxVMVZOWDBGVVZGSmZUa0ZOUlZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQnliMjkwUld4bGJXVnVkQzV5WlcxdmRtVkJkSFJ5YVdKMWRHVW9VbVZoWTNSTllYSnJkWEJEYUdWamEzTjFiUzVEU0VWRFMxTlZUVjlCVkZSU1gwNUJUVVVwTzF4dVhHNGdJQ0FnSUNBZ0lIWmhjaUJ5YjI5MFRXRnlhM1Z3SUQwZ2NtOXZkRVZzWlcxbGJuUXViM1YwWlhKSVZFMU1PMXh1SUNBZ0lDQWdJQ0J5YjI5MFJXeGxiV1Z1ZEM1elpYUkJkSFJ5YVdKMWRHVW9YRzRnSUNBZ0lDQWdJQ0FnVW1WaFkzUk5ZWEpyZFhCRGFHVmphM04xYlM1RFNFVkRTMU5WVFY5QlZGUlNYMDVCVFVVc1hHNGdJQ0FnSUNBZ0lDQWdZMmhsWTJ0emRXMWNiaUFnSUNBZ0lDQWdLVHRjYmx4dUlDQWdJQ0FnSUNCMllYSWdaR2xtWmtsdVpHVjRJRDBnWm1seWMzUkVhV1ptWlhKbGJtTmxTVzVrWlhnb2JXRnlhM1Z3TENCeWIyOTBUV0Z5YTNWd0tUdGNiaUFnSUNBZ0lDQWdkbUZ5SUdScFptWmxjbVZ1WTJVZ1BTQW5JQ2hqYkdsbGJuUXBJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lHMWhjbXQxY0M1emRXSnpkSEpwYm1jb1pHbG1aa2x1WkdWNElDMGdNakFzSUdScFptWkpibVJsZUNBcklESXdLU0FyWEc0Z0lDQWdJQ0FnSUNBZ0oxeGNiaUFvYzJWeWRtVnlLU0FuSUNzZ2NtOXZkRTFoY210MWNDNXpkV0p6ZEhKcGJtY29aR2xtWmtsdVpHVjRJQzBnTWpBc0lHUnBabVpKYm1SbGVDQXJJREl3S1R0Y2JseHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQWdJR052Ym5SaGFXNWxjaTV1YjJSbFZIbHdaU0FoUFQwZ1JFOURYMDVQUkVWZlZGbFFSU3hjYmlBZ0lDQWdJQ0FnSUNBbldXOTFYRnduY21VZ2RISjVhVzVuSUhSdklISmxibVJsY2lCaElHTnZiWEJ2Ym1WdWRDQjBieUIwYUdVZ1pHOWpkVzFsYm5RZ2RYTnBibWNnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM05sY25abGNpQnlaVzVrWlhKcGJtY2dZblYwSUhSb1pTQmphR1ZqYTNOMWJTQjNZWE1nYVc1MllXeHBaQzRnVkdocGN5QjFjM1ZoYkd4NUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkdFpXRnVjeUI1YjNVZ2NtVnVaR1Z5WldRZ1lTQmthV1ptWlhKbGJuUWdZMjl0Y0c5dVpXNTBJSFI1Y0dVZ2IzSWdjSEp2Y0hNZ2IyNGdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0ozUm9aU0JqYkdsbGJuUWdabkp2YlNCMGFHVWdiMjVsSUc5dUlIUm9aU0J6WlhKMlpYSXNJRzl5SUhsdmRYSWdjbVZ1WkdWeUtDa2dKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oyMWxkR2h2WkhNZ1lYSmxJR2x0Y0hWeVpTNGdVbVZoWTNRZ1kyRnVibTkwSUdoaGJtUnNaU0IwYUdseklHTmhjMlVnWkhWbElIUnZJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZGpjbTl6Y3kxaWNtOTNjMlZ5SUhGMWFYSnJjeUJpZVNCeVpXNWtaWEpwYm1jZ1lYUWdkR2hsSUdSdlkzVnRaVzUwSUhKdmIzUXVJRmx2ZFNBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuYzJodmRXeGtJR3h2YjJzZ1ptOXlJR1Z1ZG1seWIyNXRaVzUwSUdSbGNHVnVaR1Z1ZENCamIyUmxJR2x1SUhsdmRYSWdZMjl0Y0c5dVpXNTBjeUFuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5ZVzVrSUdWdWMzVnlaU0IwYUdVZ2NISnZjSE1nWVhKbElIUm9aU0J6WVcxbElHTnNhV1Z1ZENCaGJtUWdjMlZ5ZG1WeUlITnBaR1U2WEZ4dUpYTW5MRnh1SUNBZ0lDQWdJQ0FnSUdScFptWmxjbVZ1WTJWY2JpQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hqYjI1MFlXbHVaWEl1Ym05a1pWUjVjR1VnSVQwOUlFUlBRMTlPVDBSRlgxUlpVRVVwS1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDZFNaV0ZqZENCaGRIUmxiWEIwWldRZ2RHOGdjbVYxYzJVZ2JXRnlhM1Z3SUdsdUlHRWdZMjl1ZEdGcGJtVnlJR0oxZENCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5ZMmhsWTJ0emRXMGdkMkZ6SUdsdWRtRnNhV1F1SUZSb2FYTWdaMlZ1WlhKaGJHeDVJRzFsWVc1eklIUm9ZWFFnZVc5MUlHRnlaU0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2QxYzJsdVp5QnpaWEoyWlhJZ2NtVnVaR1Z5YVc1bklHRnVaQ0IwYUdVZ2JXRnlhM1Z3SUdkbGJtVnlZWFJsWkNCdmJpQjBhR1VnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FuYzJWeWRtVnlJSGRoY3lCdWIzUWdkMmhoZENCMGFHVWdZMnhwWlc1MElIZGhjeUJsZUhCbFkzUnBibWN1SUZKbFlXTjBJR2x1YW1WamRHVmtJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdKMjVsZHlCdFlYSnJkWEFnZEc4Z1kyOXRjR1Z1YzJGMFpTQjNhR2xqYUNCM2IzSnJjeUJpZFhRZ2VXOTFJR2hoZG1VZ2JHOXpkQ0J0WVc1NUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNBZ0oyOW1JSFJvWlNCaVpXNWxabWwwY3lCdlppQnpaWEoyWlhJZ2NtVnVaR1Z5YVc1bkxpQkpibk4wWldGa0xDQm1hV2QxY21VZ2IzVjBJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdKM2RvZVNCMGFHVWdiV0Z5YTNWd0lHSmxhVzVuSUdkbGJtVnlZWFJsWkNCcGN5QmthV1ptWlhKbGJuUWdiMjRnZEdobElHTnNhV1Z1ZENBbklDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNkdmNpQnpaWEoyWlhJNlhGeHVKWE1uTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR2xtWm1WeVpXNWpaVnh1SUNBZ0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWEl1Ym05a1pWUjVjR1VnSVQwOUlFUlBRMTlPVDBSRlgxUlpVRVVzWEc0Z0lDQWdJQ0FuV1c5MVhGd25jbVVnZEhKNWFXNW5JSFJ2SUhKbGJtUmxjaUJoSUdOdmJYQnZibVZ1ZENCMGJ5QjBhR1VnWkc5amRXMWxiblFnWW5WMElDY2dLMXh1SUNBZ0lDQWdJQ0FuZVc5MUlHUnBaRzVjWENkMElIVnpaU0J6WlhKMlpYSWdjbVZ1WkdWeWFXNW5MaUJYWlNCallXNWNYQ2QwSUdSdklIUm9hWE1nSnlBclhHNGdJQ0FnSUNBZ0lDZDNhWFJvYjNWMElIVnphVzVuSUhObGNuWmxjaUJ5Wlc1a1pYSnBibWNnWkhWbElIUnZJR055YjNOekxXSnliM2R6WlhJZ2NYVnBjbXR6TGlBbklDdGNiaUFnSUNBZ0lDQWdKMU5sWlNCU1pXRmpkQzV5Wlc1a1pYSlViMU4wY21sdVp5Z3BJR1p2Y2lCelpYSjJaWElnY21WdVpHVnlhVzVuTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQWhQVDBnUkU5RFgwNVBSRVZmVkZsUVJTa3BPMXh1WEc0Z0lDQWdjMlYwU1c1dVpYSklWRTFNS0dOdmJuUmhhVzVsY2l3Z2JXRnlhM1Z3S1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVZoWTNRZ1NVUWdkWFJwYkdsMGFXVnpMbHh1SUNBZ0tpOWNibHh1SUNCblpYUlNaV0ZqZEZKdmIzUkpSRG9nWjJWMFVtVmhZM1JTYjI5MFNVUXNYRzVjYmlBZ1oyVjBTVVE2SUdkbGRFbEVMRnh1WEc0Z0lITmxkRWxFT2lCelpYUkpSQ3hjYmx4dUlDQm5aWFJPYjJSbE9pQm5aWFJPYjJSbExGeHVYRzRnSUdkbGRFNXZaR1ZHY205dFNXNXpkR0Z1WTJVNklHZGxkRTV2WkdWR2NtOXRTVzV6ZEdGdVkyVXNYRzVjYmlBZ2NIVnlaMlZKUkRvZ2NIVnlaMlZKUkZ4dWZUdGNibHh1VW1WaFkzUlFaWEptTG0xbFlYTjFjbVZOWlhSb2IyUnpLRkpsWVdOMFRXOTFiblFzSUNkU1pXRmpkRTF2ZFc1MEp5d2dlMXh1SUNCZmNtVnVaR1Z5VG1WM1VtOXZkRU52YlhCdmJtVnVkRG9nSjE5eVpXNWtaWEpPWlhkU2IyOTBRMjl0Y0c5dVpXNTBKeXhjYmlBZ1gyMXZkVzUwU1cxaFoyVkpiblJ2VG05a1pUb2dKMTl0YjNWdWRFbHRZV2RsU1c1MGIwNXZaR1VuWEc1OUtUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JTWldGamRFMXZkVzUwTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RNdWx0aUNoaWxkXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzID0gcmVxdWlyZShcIi4vUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXNcIik7XG5cbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdFJlY29uY2lsZXJcIik7XG52YXIgUmVhY3RDaGlsZFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdENoaWxkUmVjb25jaWxlclwiKTtcblxuLyoqXG4gKiBVcGRhdGluZyBjaGlsZHJlbiBvZiBhIGNvbXBvbmVudCBtYXkgdHJpZ2dlciByZWN1cnNpdmUgdXBkYXRlcy4gVGhlIGRlcHRoIGlzXG4gKiB1c2VkIHRvIGJhdGNoIHJlY3Vyc2l2ZSB1cGRhdGVzIHRvIHJlbmRlciBtYXJrdXAgbW9yZSBlZmZpY2llbnRseS5cbiAqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQHByaXZhdGVcbiAqL1xudmFyIHVwZGF0ZURlcHRoID0gMDtcblxuLyoqXG4gKiBRdWV1ZSBvZiB1cGRhdGUgY29uZmlndXJhdGlvbiBvYmplY3RzLlxuICpcbiAqIEVhY2ggb2JqZWN0IGhhcyBhIGB0eXBlYCBwcm9wZXJ0eSB0aGF0IGlzIGluIGBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlc2AuXG4gKlxuICogQHR5cGUge2FycmF5PG9iamVjdD59XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgdXBkYXRlUXVldWUgPSBbXTtcblxuLyoqXG4gKiBRdWV1ZSBvZiBtYXJrdXAgdG8gYmUgcmVuZGVyZWQuXG4gKlxuICogQHR5cGUge2FycmF5PHN0cmluZz59XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgbWFya3VwUXVldWUgPSBbXTtcblxuLyoqXG4gKiBFbnF1ZXVlcyBtYXJrdXAgdG8gYmUgcmVuZGVyZWQgYW5kIGluc2VydGVkIGF0IGEgc3VwcGxpZWQgaW5kZXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudElEIElEIG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgdGhhdCByZW5kZXJzIGludG8gYW4gZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4IERlc3RpbmF0aW9uIGluZGV4LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5xdWV1ZU1hcmt1cChwYXJlbnRJRCwgbWFya3VwLCB0b0luZGV4KSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgdXBkYXRlUXVldWUucHVzaCh7XG4gICAgcGFyZW50SUQ6IHBhcmVudElELFxuICAgIHBhcmVudE5vZGU6IG51bGwsXG4gICAgdHlwZTogUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuSU5TRVJUX01BUktVUCxcbiAgICBtYXJrdXBJbmRleDogbWFya3VwUXVldWUucHVzaChtYXJrdXApIC0gMSxcbiAgICB0ZXh0Q29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IG51bGwsXG4gICAgdG9JbmRleDogdG9JbmRleFxuICB9KTtcbn1cblxuLyoqXG4gKiBFbnF1ZXVlcyBtb3ZpbmcgYW4gZXhpc3RpbmcgZWxlbWVudCB0byBhbm90aGVyIGluZGV4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRJRCBJRCBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggU291cmNlIGluZGV4IG9mIHRoZSBleGlzdGluZyBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXggRGVzdGluYXRpb24gaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBlbnF1ZXVlTW92ZShwYXJlbnRJRCwgZnJvbUluZGV4LCB0b0luZGV4KSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgdXBkYXRlUXVldWUucHVzaCh7XG4gICAgcGFyZW50SUQ6IHBhcmVudElELFxuICAgIHBhcmVudE5vZGU6IG51bGwsXG4gICAgdHlwZTogUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuTU9WRV9FWElTVElORyxcbiAgICBtYXJrdXBJbmRleDogbnVsbCxcbiAgICB0ZXh0Q29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IGZyb21JbmRleCxcbiAgICB0b0luZGV4OiB0b0luZGV4XG4gIH0pO1xufVxuXG4vKipcbiAqIEVucXVldWVzIHJlbW92aW5nIGFuIGVsZW1lbnQgYXQgYW4gaW5kZXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudElEIElEIG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBJbmRleCBvZiB0aGUgZWxlbWVudCB0byByZW1vdmUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBlbnF1ZXVlUmVtb3ZlKHBhcmVudElELCBmcm9tSW5kZXgpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICB1cGRhdGVRdWV1ZS5wdXNoKHtcbiAgICBwYXJlbnRJRDogcGFyZW50SUQsXG4gICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgICB0eXBlOiBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5SRU1PVkVfTk9ERSxcbiAgICBtYXJrdXBJbmRleDogbnVsbCxcbiAgICB0ZXh0Q29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IGZyb21JbmRleCxcbiAgICB0b0luZGV4OiBudWxsXG4gIH0pO1xufVxuXG4vKipcbiAqIEVucXVldWVzIHNldHRpbmcgdGhlIHRleHQgY29udGVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50SUQgSUQgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dENvbnRlbnQgVGV4dCBjb250ZW50IHRvIHNldC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVucXVldWVUZXh0Q29udGVudChwYXJlbnRJRCwgdGV4dENvbnRlbnQpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICB1cGRhdGVRdWV1ZS5wdXNoKHtcbiAgICBwYXJlbnRJRDogcGFyZW50SUQsXG4gICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgICB0eXBlOiBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5URVhUX0NPTlRFTlQsXG4gICAgbWFya3VwSW5kZXg6IG51bGwsXG4gICAgdGV4dENvbnRlbnQ6IHRleHRDb250ZW50LFxuICAgIGZyb21JbmRleDogbnVsbCxcbiAgICB0b0luZGV4OiBudWxsXG4gIH0pO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhbnkgZW5xdWV1ZWQgdXBkYXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwcm9jZXNzUXVldWUoKSB7XG4gIGlmICh1cGRhdGVRdWV1ZS5sZW5ndGgpIHtcbiAgICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnByb2Nlc3NDaGlsZHJlblVwZGF0ZXMoXG4gICAgICB1cGRhdGVRdWV1ZSxcbiAgICAgIG1hcmt1cFF1ZXVlXG4gICAgKTtcbiAgICBjbGVhclF1ZXVlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGVhcnMgYW55IGVucXVldWVkIHVwZGF0ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJRdWV1ZSgpIHtcbiAgdXBkYXRlUXVldWUubGVuZ3RoID0gMDtcbiAgbWFya3VwUXVldWUubGVuZ3RoID0gMDtcbn1cblxuLyoqXG4gKiBSZWFjdE11bHRpQ2hpbGQgYXJlIGNhcGFibGUgb2YgcmVjb25jaWxpbmcgbXVsdGlwbGUgY2hpbGRyZW4uXG4gKlxuICogQGNsYXNzIFJlYWN0TXVsdGlDaGlsZFxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdE11bHRpQ2hpbGQgPSB7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBjb21wb25lbnRzIHRoYXQgbXVzdCByZWNvbmNpbGUgbXVsdGlwbGVcbiAgICogY2hpbGRyZW4uIFRoaXMgaXMgdXNlZCBieSBgUmVhY3RET01Db21wb25lbnRgIHRvIG1vdW50LCB1cGRhdGUsIGFuZFxuICAgKiB1bm1vdW50IGNoaWxkIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEBsZW5kcyB7UmVhY3RNdWx0aUNoaWxkLnByb3RvdHlwZX1cbiAgICovXG4gIE1peGluOiB7XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBcIm1vdW50IGltYWdlXCIgZm9yIGVhY2ggb2YgdGhlIHN1cHBsaWVkIGNoaWxkcmVuLiBJbiB0aGUgY2FzZVxuICAgICAqIG9mIGBSZWFjdERPTUNvbXBvbmVudGAsIGEgbW91bnQgaW1hZ2UgaXMgYSBzdHJpbmcgb2YgbWFya3VwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXN0ZWRDaGlsZHJlbiBOZXN0ZWQgY2hpbGQgbWFwcy5cbiAgICAgKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgb2YgbW91bnRlZCByZXByZXNlbnRhdGlvbnMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbW91bnRDaGlsZHJlbjogZnVuY3Rpb24obmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBSZWFjdENoaWxkUmVjb25jaWxlci5pbnN0YW50aWF0ZUNoaWxkcmVuKFxuICAgICAgICBuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHRcbiAgICAgICk7XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICB2YXIgbW91bnRJbWFnZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIGNoaWxkcmVuKSB7XG4gICAgICAgIGlmIChjaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW25hbWVdO1xuICAgICAgICAgIC8vIElubGluZWQgZm9yIHBlcmZvcm1hbmNlLCBzZWUgYFJlYWN0SW5zdGFuY2VIYW5kbGVzLmNyZWF0ZVJlYWN0SURgLlxuICAgICAgICAgIHZhciByb290SUQgPSB0aGlzLl9yb290Tm9kZUlEICsgbmFtZTtcbiAgICAgICAgICB2YXIgbW91bnRJbWFnZSA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChcbiAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgcm9vdElELFxuICAgICAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjaGlsZC5fbW91bnRJbmRleCA9IGluZGV4O1xuICAgICAgICAgIG1vdW50SW1hZ2VzLnB1c2gobW91bnRJbWFnZSk7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1vdW50SW1hZ2VzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyBhbnkgcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIHRleHQgY29udGVudCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV4dENvbnRlbnQgU3RyaW5nIG9mIGNvbnRlbnQuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdXBkYXRlVGV4dENvbnRlbnQ6IGZ1bmN0aW9uKG5leHRDb250ZW50KSB7XG4gICAgICB1cGRhdGVEZXB0aCsrO1xuICAgICAgdmFyIGVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuO1xuICAgICAgICAvLyBSZW1vdmUgYW55IHJlbmRlcmVkIGNoaWxkcmVuLlxuICAgICAgICBSZWFjdENoaWxkUmVjb25jaWxlci51bm1vdW50Q2hpbGRyZW4ocHJldkNoaWxkcmVuKTtcbiAgICAgICAgLy8gVE9ETzogVGhlIHNldFRleHRDb250ZW50IG9wZXJhdGlvbiBzaG91bGQgYmUgZW5vdWdoXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gcHJldkNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKHByZXZDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5fdW5tb3VudENoaWxkQnlOYW1lKHByZXZDaGlsZHJlbltuYW1lXSwgbmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNldCBuZXcgdGV4dCBjb250ZW50LlxuICAgICAgICB0aGlzLnNldFRleHRDb250ZW50KG5leHRDb250ZW50KTtcbiAgICAgICAgZXJyb3JUaHJvd24gPSBmYWxzZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHVwZGF0ZURlcHRoLS07XG4gICAgICAgIGlmICghdXBkYXRlRGVwdGgpIHtcbiAgICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIGNsZWFyUXVldWUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvY2Vzc1F1ZXVlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHJlbmRlcmVkIGNoaWxkcmVuIHdpdGggbmV3IGNoaWxkcmVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0TmVzdGVkQ2hpbGRyZW4gTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHVwZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihuZXh0TmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICB1cGRhdGVEZXB0aCsrO1xuICAgICAgdmFyIGVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNoaWxkcmVuKG5leHROZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgICAgICBlcnJvclRocm93biA9IGZhbHNlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdXBkYXRlRGVwdGgtLTtcbiAgICAgICAgaWYgKCF1cGRhdGVEZXB0aCkge1xuICAgICAgICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICAgICAgY2xlYXJRdWV1ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzUXVldWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IGlzb2xhdGluZyB0aGlzIGhvdCBjb2RlIHBhdGggZnJvbSB0aGUgdHJ5L2NhdGNoXG4gICAgICogYmxvY2sgaW4gYHVwZGF0ZUNoaWxkcmVuYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dE5lc3RlZENoaWxkcmVuIE5lc3RlZCBjaGlsZCBtYXBzLlxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAZmluYWxcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgX3VwZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihuZXh0TmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcHJldkNoaWxkcmVuID0gdGhpcy5fcmVuZGVyZWRDaGlsZHJlbjtcbiAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBSZWFjdENoaWxkUmVjb25jaWxlci51cGRhdGVDaGlsZHJlbihcbiAgICAgICAgcHJldkNoaWxkcmVuLCBuZXh0TmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0XG4gICAgICApO1xuICAgICAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG5leHRDaGlsZHJlbjtcbiAgICAgIGlmICghbmV4dENoaWxkcmVuICYmICFwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG5hbWU7XG4gICAgICAvLyBgbmV4dEluZGV4YCB3aWxsIGluY3JlbWVudCBmb3IgZWFjaCBjaGlsZCBpbiBgbmV4dENoaWxkcmVuYCwgYnV0XG4gICAgICAvLyBgbGFzdEluZGV4YCB3aWxsIGJlIHRoZSBsYXN0IGluZGV4IHZpc2l0ZWQgaW4gYHByZXZDaGlsZHJlbmAuXG4gICAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBuZXh0SW5kZXggPSAwO1xuICAgICAgZm9yIChuYW1lIGluIG5leHRDaGlsZHJlbikge1xuICAgICAgICBpZiAoIW5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRyZW4gJiYgcHJldkNoaWxkcmVuW25hbWVdO1xuICAgICAgICB2YXIgbmV4dENoaWxkID0gbmV4dENoaWxkcmVuW25hbWVdO1xuICAgICAgICBpZiAocHJldkNoaWxkID09PSBuZXh0Q2hpbGQpIHtcbiAgICAgICAgICB0aGlzLm1vdmVDaGlsZChwcmV2Q2hpbGQsIG5leHRJbmRleCwgbGFzdEluZGV4KTtcbiAgICAgICAgICBsYXN0SW5kZXggPSBNYXRoLm1heChwcmV2Q2hpbGQuX21vdW50SW5kZXgsIGxhc3RJbmRleCk7XG4gICAgICAgICAgcHJldkNoaWxkLl9tb3VudEluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcmV2Q2hpbGQpIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBgbGFzdEluZGV4YCBiZWZvcmUgYF9tb3VudEluZGV4YCBnZXRzIHVuc2V0IGJ5IHVubW91bnRpbmcuXG4gICAgICAgICAgICBsYXN0SW5kZXggPSBNYXRoLm1heChwcmV2Q2hpbGQuX21vdW50SW5kZXgsIGxhc3RJbmRleCk7XG4gICAgICAgICAgICB0aGlzLl91bm1vdW50Q2hpbGRCeU5hbWUocHJldkNoaWxkLCBuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVGhlIGNoaWxkIG11c3QgYmUgaW5zdGFudGlhdGVkIGJlZm9yZSBpdCdzIG1vdW50ZWQuXG4gICAgICAgICAgdGhpcy5fbW91bnRDaGlsZEJ5TmFtZUF0SW5kZXgoXG4gICAgICAgICAgICBuZXh0Q2hpbGQsIG5hbWUsIG5leHRJbmRleCwgdHJhbnNhY3Rpb24sIGNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIG5leHRJbmRleCsrO1xuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIGNoaWxkcmVuIHRoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50LlxuICAgICAgZm9yIChuYW1lIGluIHByZXZDaGlsZHJlbikge1xuICAgICAgICBpZiAocHJldkNoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgICAgICAhKG5leHRDaGlsZHJlbiAmJiBuZXh0Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpKSB7XG4gICAgICAgICAgdGhpcy5fdW5tb3VudENoaWxkQnlOYW1lKHByZXZDaGlsZHJlbltuYW1lXSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5tb3VudHMgYWxsIHJlbmRlcmVkIGNoaWxkcmVuLiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIGNsZWFuIHVwIGNoaWxkcmVuXG4gICAgICogd2hlbiB0aGlzIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB1bm1vdW50Q2hpbGRyZW46IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlbmRlcmVkQ2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuO1xuICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudW5tb3VudENoaWxkcmVuKHJlbmRlcmVkQ2hpbGRyZW4pO1xuICAgICAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG51bGw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1vdmVzIGEgY2hpbGQgY29tcG9uZW50IHRvIHRoZSBzdXBwbGllZCBpbmRleC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENvbXBvbmVudCB0byBtb3ZlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4IERlc3RpbmF0aW9uIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsYXN0SW5kZXggTGFzdCBpbmRleCB2aXNpdGVkIG9mIHRoZSBzaWJsaW5ncyBvZiBgY2hpbGRgLlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBtb3ZlQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkLCB0b0luZGV4LCBsYXN0SW5kZXgpIHtcbiAgICAgIC8vIElmIHRoZSBpbmRleCBvZiBgY2hpbGRgIGlzIGxlc3MgdGhhbiBgbGFzdEluZGV4YCwgdGhlbiBpdCBuZWVkcyB0b1xuICAgICAgLy8gYmUgbW92ZWQuIE90aGVyd2lzZSwgd2UgZG8gbm90IG5lZWQgdG8gbW92ZSBpdCBiZWNhdXNlIGEgY2hpbGQgd2lsbCBiZVxuICAgICAgLy8gaW5zZXJ0ZWQgb3IgbW92ZWQgYmVmb3JlIGBjaGlsZGAuXG4gICAgICBpZiAoY2hpbGQuX21vdW50SW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAgICAgZW5xdWV1ZU1vdmUodGhpcy5fcm9vdE5vZGVJRCwgY2hpbGQuX21vdW50SW5kZXgsIHRvSW5kZXgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ29tcG9uZW50IHRvIGNyZWF0ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW91bnRJbWFnZSBNYXJrdXAgdG8gaW5zZXJ0LlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBjcmVhdGVDaGlsZDogZnVuY3Rpb24oY2hpbGQsIG1vdW50SW1hZ2UpIHtcbiAgICAgIGVucXVldWVNYXJrdXAodGhpcy5fcm9vdE5vZGVJRCwgbW91bnRJbWFnZSwgY2hpbGQuX21vdW50SW5kZXgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ2hpbGQgdG8gcmVtb3ZlLlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICByZW1vdmVDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIGVucXVldWVSZW1vdmUodGhpcy5fcm9vdE5vZGVJRCwgY2hpbGQuX21vdW50SW5kZXgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoaXMgdGV4dCBjb250ZW50IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Q29udGVudCBUZXh0IGNvbnRlbnQgdG8gc2V0LlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBzZXRUZXh0Q29udGVudDogZnVuY3Rpb24odGV4dENvbnRlbnQpIHtcbiAgICAgIGVucXVldWVUZXh0Q29udGVudCh0aGlzLl9yb290Tm9kZUlELCB0ZXh0Q29udGVudCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1vdW50cyBhIGNoaWxkIHdpdGggdGhlIHN1cHBsaWVkIG5hbWUuXG4gICAgICpcbiAgICAgKiBOT1RFOiBUaGlzIGlzIHBhcnQgb2YgYHVwZGF0ZUNoaWxkcmVuYCBhbmQgaXMgaGVyZSBmb3IgcmVhZGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDb21wb25lbnQgdG8gbW91bnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgY2hpbGQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IGF0IHdoaWNoIHRvIGluc2VydCB0aGUgY2hpbGQuXG4gICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX21vdW50Q2hpbGRCeU5hbWVBdEluZGV4OiBmdW5jdGlvbihcbiAgICAgIGNoaWxkLFxuICAgICAgbmFtZSxcbiAgICAgIGluZGV4LFxuICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICBjb250ZXh0KSB7XG4gICAgICAvLyBJbmxpbmVkIGZvciBwZXJmb3JtYW5jZSwgc2VlIGBSZWFjdEluc3RhbmNlSGFuZGxlcy5jcmVhdGVSZWFjdElEYC5cbiAgICAgIHZhciByb290SUQgPSB0aGlzLl9yb290Tm9kZUlEICsgbmFtZTtcbiAgICAgIHZhciBtb3VudEltYWdlID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50KFxuICAgICAgICBjaGlsZCxcbiAgICAgICAgcm9vdElELFxuICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICAgIGNoaWxkLl9tb3VudEluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLmNyZWF0ZUNoaWxkKGNoaWxkLCBtb3VudEltYWdlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5tb3VudHMgYSByZW5kZXJlZCBjaGlsZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogTk9URTogVGhpcyBpcyBwYXJ0IG9mIGB1cGRhdGVDaGlsZHJlbmAgYW5kIGlzIGhlcmUgZm9yIHJlYWRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ29tcG9uZW50IHRvIHVubW91bnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgY2hpbGQgaW4gYHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW5gLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3VubW91bnRDaGlsZEJ5TmFtZTogZnVuY3Rpb24oY2hpbGQsIG5hbWUpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgY2hpbGQuX21vdW50SW5kZXggPSBudWxsO1xuICAgIH1cblxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RNdWx0aUNoaWxkO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIga2V5TWlycm9yID0gcmVxdWlyZShcIi4va2V5TWlycm9yXCIpO1xuXG4vKipcbiAqIFdoZW4gYSBjb21wb25lbnQncyBjaGlsZHJlbiBhcmUgdXBkYXRlZCwgYSBzZXJpZXMgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdHMgYXJlIGNyZWF0ZWQgaW4gb3JkZXIgdG8gYmF0Y2ggYW5kIHNlcmlhbGl6ZSB0aGUgcmVxdWlyZWQgY2hhbmdlcy5cbiAqXG4gKiBFbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgdHlwZXMgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMgPSBrZXlNaXJyb3Ioe1xuICBJTlNFUlRfTUFSS1VQOiBudWxsLFxuICBNT1ZFX0VYSVNUSU5HOiBudWxsLFxuICBSRU1PVkVfTk9ERTogbnVsbCxcbiAgVEVYVF9DT05URU5UOiBudWxsXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcztcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3ROYXRpdmVDb21wb25lbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxudmFyIGF1dG9HZW5lcmF0ZVdyYXBwZXJDbGFzcyA9IG51bGw7XG52YXIgZ2VuZXJpY0NvbXBvbmVudENsYXNzID0gbnVsbDtcbi8vIFRoaXMgcmVnaXN0cnkga2VlcHMgdHJhY2sgb2Ygd3JhcHBlciBjbGFzc2VzIGFyb3VuZCBuYXRpdmUgdGFnc1xudmFyIHRhZ1RvQ29tcG9uZW50Q2xhc3MgPSB7fTtcbnZhciB0ZXh0Q29tcG9uZW50Q2xhc3MgPSBudWxsO1xuXG52YXIgUmVhY3ROYXRpdmVDb21wb25lbnRJbmplY3Rpb24gPSB7XG4gIC8vIFRoaXMgYWNjZXB0cyBhIGNsYXNzIHRoYXQgcmVjZWl2ZXMgdGhlIHRhZyBzdHJpbmcuIFRoaXMgaXMgYSBjYXRjaCBhbGxcbiAgLy8gdGhhdCBjYW4gcmVuZGVyIGFueSBraW5kIG9mIHRhZy5cbiAgaW5qZWN0R2VuZXJpY0NvbXBvbmVudENsYXNzOiBmdW5jdGlvbihjb21wb25lbnRDbGFzcykge1xuICAgIGdlbmVyaWNDb21wb25lbnRDbGFzcyA9IGNvbXBvbmVudENsYXNzO1xuICB9LFxuICAvLyBUaGlzIGFjY2VwdHMgYSB0ZXh0IGNvbXBvbmVudCBjbGFzcyB0aGF0IHRha2VzIHRoZSB0ZXh0IHN0cmluZyB0byBiZVxuICAvLyByZW5kZXJlZCBhcyBwcm9wcy5cbiAgaW5qZWN0VGV4dENvbXBvbmVudENsYXNzOiBmdW5jdGlvbihjb21wb25lbnRDbGFzcykge1xuICAgIHRleHRDb21wb25lbnRDbGFzcyA9IGNvbXBvbmVudENsYXNzO1xuICB9LFxuICAvLyBUaGlzIGFjY2VwdHMgYSBrZXllZCBvYmplY3Qgd2l0aCBjbGFzc2VzIGFzIHZhbHVlcy4gRWFjaCBrZXkgcmVwcmVzZW50cyBhXG4gIC8vIHRhZy4gVGhhdCBwYXJ0aWN1bGFyIHRhZyB3aWxsIHVzZSB0aGlzIGNsYXNzIGluc3RlYWQgb2YgdGhlIGdlbmVyaWMgb25lLlxuICBpbmplY3RDb21wb25lbnRDbGFzc2VzOiBmdW5jdGlvbihjb21wb25lbnRDbGFzc2VzKSB7XG4gICAgYXNzaWduKHRhZ1RvQ29tcG9uZW50Q2xhc3MsIGNvbXBvbmVudENsYXNzZXMpO1xuICB9LFxuICAvLyBUZW1wb3JhcnkgaGFjayBzaW5jZSB3ZSBleHBlY3QgRE9NIHJlZnMgdG8gYmVoYXZlIGxpa2UgY29tcG9zaXRlcyxcbiAgLy8gZm9yIHRoaXMgcmVsZWFzZS5cbiAgaW5qZWN0QXV0b1dyYXBwZXI6IGZ1bmN0aW9uKHdyYXBwZXJGYWN0b3J5KSB7XG4gICAgYXV0b0dlbmVyYXRlV3JhcHBlckNsYXNzID0gd3JhcHBlckZhY3Rvcnk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IGEgY29tcG9zaXRlIGNvbXBvbmVudCB3cmFwcGVyIGNsYXNzIGZvciBhIHNwZWNpZmljIHRhZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBUaGUgdGFnIGZvciB3aGljaCB0byBnZXQgdGhlIGNsYXNzLlxuICogQHJldHVybiB7ZnVuY3Rpb259IFRoZSBSZWFjdCBjbGFzcyBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZWxlbWVudC50eXBlO1xuICB9XG4gIHZhciB0YWcgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBjb21wb25lbnRDbGFzcyA9IHRhZ1RvQ29tcG9uZW50Q2xhc3NbdGFnXTtcbiAgaWYgKGNvbXBvbmVudENsYXNzID09IG51bGwpIHtcbiAgICB0YWdUb0NvbXBvbmVudENsYXNzW3RhZ10gPSBjb21wb25lbnRDbGFzcyA9IGF1dG9HZW5lcmF0ZVdyYXBwZXJDbGFzcyh0YWcpO1xuICB9XG4gIHJldHVybiBjb21wb25lbnRDbGFzcztcbn1cblxuLyoqXG4gKiBHZXQgYSBuYXRpdmUgaW50ZXJuYWwgY29tcG9uZW50IGNsYXNzIGZvciBhIHNwZWNpZmljIHRhZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGludGVybmFsIGNsYXNzIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnRlcm5hbENvbXBvbmVudChlbGVtZW50KSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgZ2VuZXJpY0NvbXBvbmVudENsYXNzLFxuICAgICdUaGVyZSBpcyBubyByZWdpc3RlcmVkIGNvbXBvbmVudCBmb3IgdGhlIHRhZyAlcycsXG4gICAgZWxlbWVudC50eXBlXG4gICkgOiBpbnZhcmlhbnQoZ2VuZXJpY0NvbXBvbmVudENsYXNzKSk7XG4gIHJldHVybiBuZXcgZ2VuZXJpY0NvbXBvbmVudENsYXNzKGVsZW1lbnQudHlwZSwgZWxlbWVudC5wcm9wcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdFRleHR9IHRleHRcbiAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZUZvclRleHQodGV4dCkge1xuICByZXR1cm4gbmV3IHRleHRDb21wb25lbnRDbGFzcyh0ZXh0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVGV4dENvbXBvbmVudChjb21wb25lbnQpIHtcbiAgcmV0dXJuIGNvbXBvbmVudCBpbnN0YW5jZW9mIHRleHRDb21wb25lbnRDbGFzcztcbn1cblxudmFyIFJlYWN0TmF0aXZlQ29tcG9uZW50ID0ge1xuICBnZXRDb21wb25lbnRDbGFzc0ZvckVsZW1lbnQ6IGdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudCxcbiAgY3JlYXRlSW50ZXJuYWxDb21wb25lbnQ6IGNyZWF0ZUludGVybmFsQ29tcG9uZW50LFxuICBjcmVhdGVJbnN0YW5jZUZvclRleHQ6IGNyZWF0ZUluc3RhbmNlRm9yVGV4dCxcbiAgaXNUZXh0Q29tcG9uZW50OiBpc1RleHRDb21wb25lbnQsXG4gIGluamVjdGlvbjogUmVhY3ROYXRpdmVDb21wb25lbnRJbmplY3Rpb25cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3ROYXRpdmVDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNST1lYUnBkbVZEYjIxd2IyNWxiblF1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVFF0TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEZ4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlHRnpjMmxuYmlBOUlISmxjWFZwY21Vb1hDSXVMMDlpYW1WamRDNWhjM05wWjI1Y0lpazdYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzUyWVhJZ1lYVjBiMGRsYm1WeVlYUmxWM0poY0hCbGNrTnNZWE56SUQwZ2JuVnNiRHRjYm5aaGNpQm5aVzVsY21salEyOXRjRzl1Wlc1MFEyeGhjM01nUFNCdWRXeHNPMXh1THk4Z1ZHaHBjeUJ5WldkcGMzUnllU0JyWldWd2N5QjBjbUZqYXlCdlppQjNjbUZ3Y0dWeUlHTnNZWE56WlhNZ1lYSnZkVzVrSUc1aGRHbDJaU0IwWVdkelhHNTJZWElnZEdGblZHOURiMjF3YjI1bGJuUkRiR0Z6Y3lBOUlIdDlPMXh1ZG1GeUlIUmxlSFJEYjIxd2IyNWxiblJEYkdGemN5QTlJRzUxYkd3N1hHNWNiblpoY2lCU1pXRmpkRTVoZEdsMlpVTnZiWEJ2Ym1WdWRFbHVhbVZqZEdsdmJpQTlJSHRjYmlBZ0x5OGdWR2hwY3lCaFkyTmxjSFJ6SUdFZ1kyeGhjM01nZEdoaGRDQnlaV05sYVhabGN5QjBhR1VnZEdGbklITjBjbWx1Wnk0Z1ZHaHBjeUJwY3lCaElHTmhkR05vSUdGc2JGeHVJQ0F2THlCMGFHRjBJR05oYmlCeVpXNWtaWElnWVc1NUlHdHBibVFnYjJZZ2RHRm5MbHh1SUNCcGJtcGxZM1JIWlc1bGNtbGpRMjl0Y0c5dVpXNTBRMnhoYzNNNklHWjFibU4wYVc5dUtHTnZiWEJ2Ym1WdWRFTnNZWE56S1NCN1hHNGdJQ0FnWjJWdVpYSnBZME52YlhCdmJtVnVkRU5zWVhOeklEMGdZMjl0Y0c5dVpXNTBRMnhoYzNNN1hHNGdJSDBzWEc0Z0lDOHZJRlJvYVhNZ1lXTmpaWEIwY3lCaElIUmxlSFFnWTI5dGNHOXVaVzUwSUdOc1lYTnpJSFJvWVhRZ2RHRnJaWE1nZEdobElIUmxlSFFnYzNSeWFXNW5JSFJ2SUdKbFhHNGdJQzh2SUhKbGJtUmxjbVZrSUdGeklIQnliM0J6TGx4dUlDQnBibXBsWTNSVVpYaDBRMjl0Y0c5dVpXNTBRMnhoYzNNNklHWjFibU4wYVc5dUtHTnZiWEJ2Ym1WdWRFTnNZWE56S1NCN1hHNGdJQ0FnZEdWNGRFTnZiWEJ2Ym1WdWRFTnNZWE56SUQwZ1kyOXRjRzl1Wlc1MFEyeGhjM003WEc0Z0lIMHNYRzRnSUM4dklGUm9hWE1nWVdOalpYQjBjeUJoSUd0bGVXVmtJRzlpYW1WamRDQjNhWFJvSUdOc1lYTnpaWE1nWVhNZ2RtRnNkV1Z6TGlCRllXTm9JR3RsZVNCeVpYQnlaWE5sYm5SeklHRmNiaUFnTHk4Z2RHRm5MaUJVYUdGMElIQmhjblJwWTNWc1lYSWdkR0ZuSUhkcGJHd2dkWE5sSUhSb2FYTWdZMnhoYzNNZ2FXNXpkR1ZoWkNCdlppQjBhR1VnWjJWdVpYSnBZeUJ2Ym1VdVhHNGdJR2x1YW1WamRFTnZiWEJ2Ym1WdWRFTnNZWE56WlhNNklHWjFibU4wYVc5dUtHTnZiWEJ2Ym1WdWRFTnNZWE56WlhNcElIdGNiaUFnSUNCaGMzTnBaMjRvZEdGblZHOURiMjF3YjI1bGJuUkRiR0Z6Y3l3Z1kyOXRjRzl1Wlc1MFEyeGhjM05sY3lrN1hHNGdJSDBzWEc0Z0lDOHZJRlJsYlhCdmNtRnllU0JvWVdOcklITnBibU5sSUhkbElHVjRjR1ZqZENCRVQwMGdjbVZtY3lCMGJ5QmlaV2hoZG1VZ2JHbHJaU0JqYjIxd2IzTnBkR1Z6TEZ4dUlDQXZMeUJtYjNJZ2RHaHBjeUJ5Wld4bFlYTmxMbHh1SUNCcGJtcGxZM1JCZFhSdlYzSmhjSEJsY2pvZ1puVnVZM1JwYjI0b2QzSmhjSEJsY2taaFkzUnZjbmtwSUh0Y2JpQWdJQ0JoZFhSdlIyVnVaWEpoZEdWWGNtRndjR1Z5UTJ4aGMzTWdQU0IzY21Gd2NHVnlSbUZqZEc5eWVUdGNiaUFnZlZ4dWZUdGNibHh1THlvcVhHNGdLaUJIWlhRZ1lTQmpiMjF3YjNOcGRHVWdZMjl0Y0c5dVpXNTBJSGR5WVhCd1pYSWdZMnhoYzNNZ1ptOXlJR0VnYzNCbFkybG1hV01nZEdGbkxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1VtVmhZM1JGYkdWdFpXNTBmU0JsYkdWdFpXNTBJRlJvWlNCMFlXY2dabTl5SUhkb2FXTm9JSFJ2SUdkbGRDQjBhR1VnWTJ4aGMzTXVYRzRnS2lCQWNtVjBkWEp1SUh0bWRXNWpkR2x2Ym4wZ1ZHaGxJRkpsWVdOMElHTnNZWE56SUdOdmJuTjBjblZqZEc5eUlHWjFibU4wYVc5dUxseHVJQ292WEc1bWRXNWpkR2x2YmlCblpYUkRiMjF3YjI1bGJuUkRiR0Z6YzBadmNrVnNaVzFsYm5Rb1pXeGxiV1Z1ZENrZ2UxeHVJQ0JwWmlBb2RIbHdaVzltSUdWc1pXMWxiblF1ZEhsd1pTQTlQVDBnSjJaMWJtTjBhVzl1SnlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJsYkdWdFpXNTBMblI1Y0dVN1hHNGdJSDFjYmlBZ2RtRnlJSFJoWnlBOUlHVnNaVzFsYm5RdWRIbHdaVHRjYmlBZ2RtRnlJR052YlhCdmJtVnVkRU5zWVhOeklEMGdkR0ZuVkc5RGIyMXdiMjVsYm5SRGJHRnpjMXQwWVdkZE8xeHVJQ0JwWmlBb1kyOXRjRzl1Wlc1MFEyeGhjM01nUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJSFJoWjFSdlEyOXRjRzl1Wlc1MFEyeGhjM05iZEdGblhTQTlJR052YlhCdmJtVnVkRU5zWVhOeklEMGdZWFYwYjBkbGJtVnlZWFJsVjNKaGNIQmxja05zWVhOektIUmhaeWs3WEc0Z0lIMWNiaUFnY21WMGRYSnVJR052YlhCdmJtVnVkRU5zWVhOek8xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGRDQmhJRzVoZEdsMlpTQnBiblJsY201aGJDQmpiMjF3YjI1bGJuUWdZMnhoYzNNZ1ptOXlJR0VnYzNCbFkybG1hV01nZEdGbkxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1VtVmhZM1JGYkdWdFpXNTBmU0JsYkdWdFpXNTBJRlJvWlNCbGJHVnRaVzUwSUhSdklHTnlaV0YwWlM1Y2JpQXFJRUJ5WlhSMWNtNGdlMloxYm1OMGFXOXVmU0JVYUdVZ2FXNTBaWEp1WVd3Z1kyeGhjM01nWTI5dWMzUnlkV04wYjNJZ1puVnVZM1JwYjI0dVhHNGdLaTljYm1aMWJtTjBhVzl1SUdOeVpXRjBaVWx1ZEdWeWJtRnNRMjl0Y0c5dVpXNTBLR1ZzWlcxbGJuUXBJSHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0JuWlc1bGNtbGpRMjl0Y0c5dVpXNTBRMnhoYzNNc1hHNGdJQ0FnSjFSb1pYSmxJR2x6SUc1dklISmxaMmx6ZEdWeVpXUWdZMjl0Y0c5dVpXNTBJR1p2Y2lCMGFHVWdkR0ZuSUNWekp5eGNiaUFnSUNCbGJHVnRaVzUwTG5SNWNHVmNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaG5aVzVsY21salEyOXRjRzl1Wlc1MFEyeGhjM01wS1R0Y2JpQWdjbVYwZFhKdUlHNWxkeUJuWlc1bGNtbGpRMjl0Y0c5dVpXNTBRMnhoYzNNb1pXeGxiV1Z1ZEM1MGVYQmxMQ0JsYkdWdFpXNTBMbkJ5YjNCektUdGNibjFjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTFKbFlXTjBWR1Y0ZEgwZ2RHVjRkRnh1SUNvZ1FISmxkSFZ5YmlCN1VtVmhZM1JEYjIxd2IyNWxiblI5WEc0Z0tpOWNibVoxYm1OMGFXOXVJR055WldGMFpVbHVjM1JoYm1ObFJtOXlWR1Y0ZENoMFpYaDBLU0I3WEc0Z0lISmxkSFZ5YmlCdVpYY2dkR1Y0ZEVOdmJYQnZibVZ1ZEVOc1lYTnpLSFJsZUhRcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3VW1WaFkzUkRiMjF3YjI1bGJuUjlJR052YlhCdmJtVnVkRnh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Wm5WdVkzUnBiMjRnYVhOVVpYaDBRMjl0Y0c5dVpXNTBLR052YlhCdmJtVnVkQ2tnZTF4dUlDQnlaWFIxY200Z1kyOXRjRzl1Wlc1MElHbHVjM1JoYm1ObGIyWWdkR1Y0ZEVOdmJYQnZibVZ1ZEVOc1lYTnpPMXh1ZlZ4dVhHNTJZWElnVW1WaFkzUk9ZWFJwZG1WRGIyMXdiMjVsYm5RZ1BTQjdYRzRnSUdkbGRFTnZiWEJ2Ym1WdWRFTnNZWE56Um05eVJXeGxiV1Z1ZERvZ1oyVjBRMjl0Y0c5dVpXNTBRMnhoYzNOR2IzSkZiR1Z0Wlc1MExGeHVJQ0JqY21WaGRHVkpiblJsY201aGJFTnZiWEJ2Ym1WdWREb2dZM0psWVhSbFNXNTBaWEp1WVd4RGIyMXdiMjVsYm5Rc1hHNGdJR055WldGMFpVbHVjM1JoYm1ObFJtOXlWR1Y0ZERvZ1kzSmxZWFJsU1c1emRHRnVZMlZHYjNKVVpYaDBMRnh1SUNCcGMxUmxlSFJEYjIxd2IyNWxiblE2SUdselZHVjRkRU52YlhCdmJtVnVkQ3hjYmlBZ2FXNXFaV04wYVc5dU9pQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkRWx1YW1WamRHbHZibHh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkRHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0T3duZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogUmVhY3RPd25lcnMgYXJlIGNhcGFibGUgb2Ygc3RvcmluZyByZWZlcmVuY2VzIHRvIG93bmVkIGNvbXBvbmVudHMuXG4gKlxuICogQWxsIGNvbXBvbmVudHMgYXJlIGNhcGFibGUgb2YgLy9iZWluZy8vIHJlZmVyZW5jZWQgYnkgb3duZXIgY29tcG9uZW50cywgYnV0XG4gKiBvbmx5IFJlYWN0T3duZXIgY29tcG9uZW50cyBhcmUgY2FwYWJsZSBvZiAvL3JlZmVyZW5jaW5nLy8gb3duZWQgY29tcG9uZW50cy5cbiAqIFRoZSBuYW1lZCByZWZlcmVuY2UgaXMga25vd24gYXMgYSBcInJlZlwiLlxuICpcbiAqIFJlZnMgYXJlIGF2YWlsYWJsZSB3aGVuIG1vdW50ZWQgYW5kIHVwZGF0ZWQgZHVyaW5nIHJlY29uY2lsaWF0aW9uLlxuICpcbiAqICAgdmFyIE15Q29tcG9uZW50ID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gKiAgICAgICByZXR1cm4gKFxuICogICAgICAgICA8ZGl2IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9PlxuICogICAgICAgICAgIDxDdXN0b21Db21wb25lbnQgcmVmPVwiY3VzdG9tXCIgLz5cbiAqICAgICAgICAgPC9kaXY+XG4gKiAgICAgICApO1xuICogICAgIH0sXG4gKiAgICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uKCkge1xuICogICAgICAgdGhpcy5yZWZzLmN1c3RvbS5oYW5kbGVDbGljaygpO1xuICogICAgIH0sXG4gKiAgICAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICogICAgICAgdGhpcy5yZWZzLmN1c3RvbS5pbml0aWFsaXplKCk7XG4gKiAgICAgfVxuICogICB9KTtcbiAqXG4gKiBSZWZzIHNob3VsZCByYXJlbHkgYmUgdXNlZC4gV2hlbiByZWZzIGFyZSB1c2VkLCB0aGV5IHNob3VsZCBvbmx5IGJlIGRvbmUgdG9cbiAqIGNvbnRyb2wgZGF0YSB0aGF0IGlzIG5vdCBoYW5kbGVkIGJ5IFJlYWN0J3MgZGF0YSBmbG93LlxuICpcbiAqIEBjbGFzcyBSZWFjdE93bmVyXG4gKi9cbnZhciBSZWFjdE93bmVyID0ge1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgb3duZXIuXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNWYWxpZE93bmVyOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gISEoXG4gICAgICAob2JqZWN0ICYmXG4gICAgICB0eXBlb2Ygb2JqZWN0LmF0dGFjaFJlZiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqZWN0LmRldGFjaFJlZiA9PT0gJ2Z1bmN0aW9uJylcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcG9uZW50IGJ5IHJlZiB0byBhbiBvd25lciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgdG8gcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgYnkgd2hpY2ggdG8gcmVmZXIgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHtSZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24gd2hpY2ggdG8gcmVjb3JkIHRoZSByZWYuXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFkZENvbXBvbmVudEFzUmVmVG86IGZ1bmN0aW9uKGNvbXBvbmVudCwgcmVmLCBvd25lcikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBSZWFjdE93bmVyLmlzVmFsaWRPd25lcihvd25lciksXG4gICAgICAnYWRkQ29tcG9uZW50QXNSZWZUbyguLi4pOiBPbmx5IGEgUmVhY3RPd25lciBjYW4gaGF2ZSByZWZzLiBUaGlzICcgK1xuICAgICAgJ3VzdWFsbHkgbWVhbnMgdGhhdCB5b3VcXCdyZSB0cnlpbmcgdG8gYWRkIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgJyArXG4gICAgICAnZG9lc25cXCd0IGhhdmUgYW4gb3duZXIgKHRoYXQgaXMsIHdhcyBub3QgY3JlYXRlZCBpbnNpZGUgb2YgYW5vdGhlciAnICtcbiAgICAgICdjb21wb25lbnRcXCdzIGByZW5kZXJgIG1ldGhvZCkuIFRyeSByZW5kZXJpbmcgdGhpcyBjb21wb25lbnQgaW5zaWRlIG9mICcgK1xuICAgICAgJ2EgbmV3IHRvcC1sZXZlbCBjb21wb25lbnQgd2hpY2ggd2lsbCBob2xkIHRoZSByZWYuJ1xuICAgICkgOiBpbnZhcmlhbnQoUmVhY3RPd25lci5pc1ZhbGlkT3duZXIob3duZXIpKSk7XG4gICAgb3duZXIuYXR0YWNoUmVmKHJlZiwgY29tcG9uZW50KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNvbXBvbmVudCBieSByZWYgZnJvbSBhbiBvd25lciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgdG8gZGVyZWZlcmVuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWYgTmFtZSBvZiB0aGUgcmVmIHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIHtSZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24gd2hpY2ggdGhlIHJlZiBpcyByZWNvcmRlZC5cbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tOiBmdW5jdGlvbihjb21wb25lbnQsIHJlZiwgb3duZXIpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgUmVhY3RPd25lci5pc1ZhbGlkT3duZXIob3duZXIpLFxuICAgICAgJ3JlbW92ZUNvbXBvbmVudEFzUmVmRnJvbSguLi4pOiBPbmx5IGEgUmVhY3RPd25lciBjYW4gaGF2ZSByZWZzLiBUaGlzICcgK1xuICAgICAgJ3VzdWFsbHkgbWVhbnMgdGhhdCB5b3VcXCdyZSB0cnlpbmcgdG8gcmVtb3ZlIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgJyArXG4gICAgICAnZG9lc25cXCd0IGhhdmUgYW4gb3duZXIgKHRoYXQgaXMsIHdhcyBub3QgY3JlYXRlZCBpbnNpZGUgb2YgYW5vdGhlciAnICtcbiAgICAgICdjb21wb25lbnRcXCdzIGByZW5kZXJgIG1ldGhvZCkuIFRyeSByZW5kZXJpbmcgdGhpcyBjb21wb25lbnQgaW5zaWRlIG9mICcgK1xuICAgICAgJ2EgbmV3IHRvcC1sZXZlbCBjb21wb25lbnQgd2hpY2ggd2lsbCBob2xkIHRoZSByZWYuJ1xuICAgICkgOiBpbnZhcmlhbnQoUmVhY3RPd25lci5pc1ZhbGlkT3duZXIob3duZXIpKSk7XG4gICAgLy8gQ2hlY2sgdGhhdCBgY29tcG9uZW50YCBpcyBzdGlsbCB0aGUgY3VycmVudCByZWYgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0b1xuICAgIC8vIGRldGFjaCB0aGUgcmVmIGlmIGFub3RoZXIgY29tcG9uZW50IHN0b2xlIGl0LlxuICAgIGlmIChvd25lci5nZXRQdWJsaWNJbnN0YW5jZSgpLnJlZnNbcmVmXSA9PT0gY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCkpIHtcbiAgICAgIG93bmVyLmRldGFjaFJlZihyZWYpO1xuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0T3duZXI7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSUGQyNWxjaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlNaV0ZqZEU5M2JtVnlYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNHZLaXBjYmlBcUlGSmxZV04wVDNkdVpYSnpJR0Z5WlNCallYQmhZbXhsSUc5bUlITjBiM0pwYm1jZ2NtVm1aWEpsYm1ObGN5QjBieUJ2ZDI1bFpDQmpiMjF3YjI1bGJuUnpMbHh1SUNwY2JpQXFJRUZzYkNCamIyMXdiMjVsYm5SeklHRnlaU0JqWVhCaFlteGxJRzltSUM4dlltVnBibWN2THlCeVpXWmxjbVZ1WTJWa0lHSjVJRzkzYm1WeUlHTnZiWEJ2Ym1WdWRITXNJR0oxZEZ4dUlDb2diMjVzZVNCU1pXRmpkRTkzYm1WeUlHTnZiWEJ2Ym1WdWRITWdZWEpsSUdOaGNHRmliR1VnYjJZZ0x5OXlaV1psY21WdVkybHVaeTh2SUc5M2JtVmtJR052YlhCdmJtVnVkSE11WEc0Z0tpQlVhR1VnYm1GdFpXUWdjbVZtWlhKbGJtTmxJR2x6SUd0dWIzZHVJR0Z6SUdFZ1hDSnlaV1pjSWk1Y2JpQXFYRzRnS2lCU1pXWnpJR0Z5WlNCaGRtRnBiR0ZpYkdVZ2QyaGxiaUJ0YjNWdWRHVmtJR0Z1WkNCMWNHUmhkR1ZrSUdSMWNtbHVaeUJ5WldOdmJtTnBiR2xoZEdsdmJpNWNiaUFxWEc0Z0tpQWdJSFpoY2lCTmVVTnZiWEJ2Ym1WdWRDQTlJRkpsWVdOMExtTnlaV0YwWlVOc1lYTnpLSHRjYmlBcUlDQWdJQ0J5Wlc1a1pYSTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDb2dJQ0FnSUNBZ2NtVjBkWEp1SUNoY2JpQXFJQ0FnSUNBZ0lDQWdQR1JwZGlCdmJrTnNhV05yUFh0MGFHbHpMbWhoYm1Sc1pVTnNhV05yZlQ1Y2JpQXFJQ0FnSUNBZ0lDQWdJQ0E4UTNWemRHOXRRMjl0Y0c5dVpXNTBJSEpsWmoxY0ltTjFjM1J2YlZ3aUlDOCtYRzRnS2lBZ0lDQWdJQ0FnSUR3dlpHbDJQbHh1SUNvZ0lDQWdJQ0FnS1R0Y2JpQXFJQ0FnSUNCOUxGeHVJQ29nSUNBZ0lHaGhibVJzWlVOc2FXTnJPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQXFJQ0FnSUNBZ0lIUm9hWE11Y21WbWN5NWpkWE4wYjIwdWFHRnVaR3hsUTJ4cFkyc29LVHRjYmlBcUlDQWdJQ0I5TEZ4dUlDb2dJQ0FnSUdOdmJYQnZibVZ1ZEVScFpFMXZkVzUwT2lCbWRXNWpkR2x2YmlncElIdGNiaUFxSUNBZ0lDQWdJSFJvYVhNdWNtVm1jeTVqZFhOMGIyMHVhVzVwZEdsaGJHbDZaU2dwTzF4dUlDb2dJQ0FnSUgxY2JpQXFJQ0FnZlNrN1hHNGdLbHh1SUNvZ1VtVm1jeUJ6YUc5MWJHUWdjbUZ5Wld4NUlHSmxJSFZ6WldRdUlGZG9aVzRnY21WbWN5QmhjbVVnZFhObFpDd2dkR2hsZVNCemFHOTFiR1FnYjI1c2VTQmlaU0JrYjI1bElIUnZYRzRnS2lCamIyNTBjbTlzSUdSaGRHRWdkR2hoZENCcGN5QnViM1FnYUdGdVpHeGxaQ0JpZVNCU1pXRmpkQ2R6SUdSaGRHRWdabXh2ZHk1Y2JpQXFYRzRnS2lCQVkyeGhjM01nVW1WaFkzUlBkMjVsY2x4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JQZDI1bGNpQTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQnZZbXBsWTNSY2JpQWdJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjBnVkhKMVpTQnBaaUJnYjJKcVpXTjBZQ0JwY3lCaElIWmhiR2xrSUc5M2JtVnlMbHh1SUNBZ0tpQkFabWx1WVd4Y2JpQWdJQ292WEc0Z0lHbHpWbUZzYVdSUGQyNWxjam9nWm5WdVkzUnBiMjRvYjJKcVpXTjBLU0I3WEc0Z0lDQWdjbVYwZFhKdUlDRWhLRnh1SUNBZ0lDQWdLRzlpYW1WamRDQW1KbHh1SUNBZ0lDQWdkSGx3Wlc5bUlHOWlhbVZqZEM1aGRIUmhZMmhTWldZZ1BUMDlJQ2RtZFc1amRHbHZiaWNnSmlZZ2RIbHdaVzltSUc5aWFtVmpkQzVrWlhSaFkyaFNaV1lnUFQwOUlDZG1kVzVqZEdsdmJpY3BYRzRnSUNBZ0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUVdSa2N5QmhJR052YlhCdmJtVnVkQ0JpZVNCeVpXWWdkRzhnWVc0Z2IzZHVaWElnWTI5dGNHOXVaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCamIyMXdiMjVsYm5RZ1EyOXRjRzl1Wlc1MElIUnZJSEpsWm1WeVpXNWpaUzVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlISmxaaUJPWVcxbElHSjVJSGRvYVdOb0lIUnZJSEpsWm1WeUlIUnZJSFJvWlNCamIyMXdiMjVsYm5RdVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlBkMjVsY24wZ2IzZHVaWElnUTI5dGNHOXVaVzUwSUc5dUlIZG9hV05vSUhSdklISmxZMjl5WkNCMGFHVWdjbVZtTGx4dUlDQWdLaUJBWm1sdVlXeGNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQmhaR1JEYjIxd2IyNWxiblJCYzFKbFpsUnZPaUJtZFc1amRHbHZiaWhqYjIxd2IyNWxiblFzSUhKbFppd2diM2R1WlhJcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnVW1WaFkzUlBkMjVsY2k1cGMxWmhiR2xrVDNkdVpYSW9iM2R1WlhJcExGeHVJQ0FnSUNBZ0oyRmtaRU52YlhCdmJtVnVkRUZ6VW1WbVZHOG9MaTR1S1RvZ1QyNXNlU0JoSUZKbFlXTjBUM2R1WlhJZ1kyRnVJR2hoZG1VZ2NtVm1jeTRnVkdocGN5QW5JQ3RjYmlBZ0lDQWdJQ2QxYzNWaGJHeDVJRzFsWVc1eklIUm9ZWFFnZVc5MVhGd25jbVVnZEhKNWFXNW5JSFJ2SUdGa1pDQmhJSEpsWmlCMGJ5QmhJR052YlhCdmJtVnVkQ0IwYUdGMElDY2dLMXh1SUNBZ0lDQWdKMlJ2WlhOdVhGd25kQ0JvWVhabElHRnVJRzkzYm1WeUlDaDBhR0YwSUdsekxDQjNZWE1nYm05MElHTnlaV0YwWldRZ2FXNXphV1JsSUc5bUlHRnViM1JvWlhJZ0p5QXJYRzRnSUNBZ0lDQW5ZMjl0Y0c5dVpXNTBYRnduY3lCZ2NtVnVaR1Z5WUNCdFpYUm9iMlFwTGlCVWNua2djbVZ1WkdWeWFXNW5JSFJvYVhNZ1kyOXRjRzl1Wlc1MElHbHVjMmxrWlNCdlppQW5JQ3RjYmlBZ0lDQWdJQ2RoSUc1bGR5QjBiM0F0YkdWMlpXd2dZMjl0Y0c5dVpXNTBJSGRvYVdOb0lIZHBiR3dnYUc5c1pDQjBhR1VnY21WbUxpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRkpsWVdOMFQzZHVaWEl1YVhOV1lXeHBaRTkzYm1WeUtHOTNibVZ5S1NrcE8xeHVJQ0FnSUc5M2JtVnlMbUYwZEdGamFGSmxaaWh5WldZc0lHTnZiWEJ2Ym1WdWRDazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGJXOTJaWE1nWVNCamIyMXdiMjVsYm5RZ1lua2djbVZtSUdaeWIyMGdZVzRnYjNkdVpYSWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JqYjIxd2IyNWxiblFnUTI5dGNHOXVaVzUwSUhSdklHUmxjbVZtWlhKbGJtTmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NtVm1JRTVoYldVZ2IyWWdkR2hsSUhKbFppQjBieUJ5WlcxdmRtVXVYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JQZDI1bGNuMGdiM2R1WlhJZ1EyOXRjRzl1Wlc1MElHOXVJSGRvYVdOb0lIUm9aU0J5WldZZ2FYTWdjbVZqYjNKa1pXUXVYRzRnSUNBcUlFQm1hVzVoYkZ4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUhKbGJXOTJaVU52YlhCdmJtVnVkRUZ6VW1WbVJuSnZiVG9nWm5WdVkzUnBiMjRvWTI5dGNHOXVaVzUwTENCeVpXWXNJRzkzYm1WeUtTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUZKbFlXTjBUM2R1WlhJdWFYTldZV3hwWkU5M2JtVnlLRzkzYm1WeUtTeGNiaUFnSUNBZ0lDZHlaVzF2ZG1WRGIyMXdiMjVsYm5SQmMxSmxaa1p5YjIwb0xpNHVLVG9nVDI1c2VTQmhJRkpsWVdOMFQzZHVaWElnWTJGdUlHaGhkbVVnY21WbWN5NGdWR2hwY3lBbklDdGNiaUFnSUNBZ0lDZDFjM1ZoYkd4NUlHMWxZVzV6SUhSb1lYUWdlVzkxWEZ3bmNtVWdkSEo1YVc1bklIUnZJSEpsYlc5MlpTQmhJSEpsWmlCMGJ5QmhJR052YlhCdmJtVnVkQ0IwYUdGMElDY2dLMXh1SUNBZ0lDQWdKMlJ2WlhOdVhGd25kQ0JvWVhabElHRnVJRzkzYm1WeUlDaDBhR0YwSUdsekxDQjNZWE1nYm05MElHTnlaV0YwWldRZ2FXNXphV1JsSUc5bUlHRnViM1JvWlhJZ0p5QXJYRzRnSUNBZ0lDQW5ZMjl0Y0c5dVpXNTBYRnduY3lCZ2NtVnVaR1Z5WUNCdFpYUm9iMlFwTGlCVWNua2djbVZ1WkdWeWFXNW5JSFJvYVhNZ1kyOXRjRzl1Wlc1MElHbHVjMmxrWlNCdlppQW5JQ3RjYmlBZ0lDQWdJQ2RoSUc1bGR5QjBiM0F0YkdWMlpXd2dZMjl0Y0c5dVpXNTBJSGRvYVdOb0lIZHBiR3dnYUc5c1pDQjBhR1VnY21WbUxpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRkpsWVdOMFQzZHVaWEl1YVhOV1lXeHBaRTkzYm1WeUtHOTNibVZ5S1NrcE8xeHVJQ0FnSUM4dklFTm9aV05ySUhSb1lYUWdZR052YlhCdmJtVnVkR0FnYVhNZ2MzUnBiR3dnZEdobElHTjFjbkpsYm5RZ2NtVm1JR0psWTJGMWMyVWdkMlVnWkc4Z2JtOTBJSGRoYm5RZ2RHOWNiaUFnSUNBdkx5QmtaWFJoWTJnZ2RHaGxJSEpsWmlCcFppQmhibTkwYUdWeUlHTnZiWEJ2Ym1WdWRDQnpkRzlzWlNCcGRDNWNiaUFnSUNCcFppQW9iM2R1WlhJdVoyVjBVSFZpYkdsalNXNXpkR0Z1WTJVb0tTNXlaV1p6VzNKbFpsMGdQVDA5SUdOdmJYQnZibVZ1ZEM1blpYUlFkV0pzYVdOSmJuTjBZVzVqWlNncEtTQjdYRzRnSUNBZ0lDQnZkMjVsY2k1a1pYUmhZMmhTWldZb2NtVm1LVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCU1pXRmpkRTkzYm1WeU8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFBlcmZcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlYWN0UGVyZiBpcyBhIGdlbmVyYWwgQU9QIHN5c3RlbSBkZXNpZ25lZCB0byBtZWFzdXJlIHBlcmZvcm1hbmNlLiBUaGlzXG4gKiBtb2R1bGUgb25seSBoYXMgdGhlIGhvb2tzOiBzZWUgUmVhY3REZWZhdWx0UGVyZiBmb3IgdGhlIGFuYWx5c2lzIHRvb2wuXG4gKi9cbnZhciBSZWFjdFBlcmYgPSB7XG4gIC8qKlxuICAgKiBCb29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIG1lYXN1cmVtZW50LiBTZXQgdG8gZmFsc2UgYnkgZGVmYXVsdCB0byBwcmV2ZW50XG4gICAqIGFjY2lkZW50YWwgbG9nZ2luZyBhbmQgcGVyZiBsb3NzLlxuICAgKi9cbiAgZW5hYmxlTWVhc3VyZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEhvbGRzIG9udG8gdGhlIG1lYXN1cmUgZnVuY3Rpb24gaW4gdXNlLiBCeSBkZWZhdWx0LCBkb24ndCBtZWFzdXJlXG4gICAqIGFueXRoaW5nLCBidXQgd2UnbGwgb3ZlcnJpZGUgdGhpcyBpZiB3ZSBpbmplY3QgYSBtZWFzdXJlIGZ1bmN0aW9uLlxuICAgKi9cbiAgc3RvcmVkTWVhc3VyZTogX25vTWVhc3VyZSxcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TmFtZVxuICAgKiBAcGFyYW0ge29iamVjdDxzdHJpbmc+fSBtZXRob2ROYW1lc1xuICAgKi9cbiAgbWVhc3VyZU1ldGhvZHM6IGZ1bmN0aW9uKG9iamVjdCwgb2JqZWN0TmFtZSwgbWV0aG9kTmFtZXMpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kTmFtZXMpIHtcbiAgICAgICAgaWYgKCFtZXRob2ROYW1lcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0W2tleV0gPSBSZWFjdFBlcmYubWVhc3VyZShcbiAgICAgICAgICBvYmplY3ROYW1lLFxuICAgICAgICAgIG1ldGhvZE5hbWVzW2tleV0sXG4gICAgICAgICAgb2JqZWN0W2tleV1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHRvIHdyYXAgbWV0aG9kcyB5b3Ugd2FudCB0byBtZWFzdXJlLiBaZXJvIG92ZXJoZWFkIGluIHByb2R1Y3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmpOYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbk5hbWVcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuY1xuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAgICovXG4gIG1lYXN1cmU6IGZ1bmN0aW9uKG9iak5hbWUsIGZuTmFtZSwgZnVuYykge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHZhciBtZWFzdXJlZEZ1bmMgPSBudWxsO1xuICAgICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKFJlYWN0UGVyZi5lbmFibGVNZWFzdXJlKSB7XG4gICAgICAgICAgaWYgKCFtZWFzdXJlZEZ1bmMpIHtcbiAgICAgICAgICAgIG1lYXN1cmVkRnVuYyA9IFJlYWN0UGVyZi5zdG9yZWRNZWFzdXJlKG9iak5hbWUsIGZuTmFtZSwgZnVuYyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtZWFzdXJlZEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIHdyYXBwZXIuZGlzcGxheU5hbWUgPSBvYmpOYW1lICsgJ18nICsgZm5OYW1lO1xuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuICAgIHJldHVybiBmdW5jO1xuICB9LFxuXG4gIGluamVjdGlvbjoge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1lYXN1cmVcbiAgICAgKi9cbiAgICBpbmplY3RNZWFzdXJlOiBmdW5jdGlvbihtZWFzdXJlKSB7XG4gICAgICBSZWFjdFBlcmYuc3RvcmVkTWVhc3VyZSA9IG1lYXN1cmU7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFNpbXBseSBwYXNzZXMgdGhyb3VnaCB0aGUgbWVhc3VyZWQgZnVuY3Rpb24sIHdpdGhvdXQgbWVhc3VyaW5nIGl0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvYmpOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gZm5OYW1lXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gX25vTWVhc3VyZShvYmpOYW1lLCBmbk5hbWUsIGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQZXJmO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUlFaWEptTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JRWlhKbVhHNGdLaUJBZEhsd1pXTm9aV05yY3lCemRHRjBhV010YjI1c2VWeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dUx5b3FYRzRnS2lCU1pXRmpkRkJsY21ZZ2FYTWdZU0JuWlc1bGNtRnNJRUZQVUNCemVYTjBaVzBnWkdWemFXZHVaV1FnZEc4Z2JXVmhjM1Z5WlNCd1pYSm1iM0p0WVc1alpTNGdWR2hwYzF4dUlDb2diVzlrZFd4bElHOXViSGtnYUdGeklIUm9aU0JvYjI5cmN6b2djMlZsSUZKbFlXTjBSR1ZtWVhWc2RGQmxjbVlnWm05eUlIUm9aU0JoYm1Gc2VYTnBjeUIwYjI5c0xseHVJQ292WEc1MllYSWdVbVZoWTNSUVpYSm1JRDBnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRbTl2YkdWaGJpQjBieUJsYm1GaWJHVXZaR2x6WVdKc1pTQnRaV0Z6ZFhKbGJXVnVkQzRnVTJWMElIUnZJR1poYkhObElHSjVJR1JsWm1GMWJIUWdkRzhnY0hKbGRtVnVkRnh1SUNBZ0tpQmhZMk5wWkdWdWRHRnNJR3h2WjJkcGJtY2dZVzVrSUhCbGNtWWdiRzl6Y3k1Y2JpQWdJQ292WEc0Z0lHVnVZV0pzWlUxbFlYTjFjbVU2SUdaaGJITmxMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkliMnhrY3lCdmJuUnZJSFJvWlNCdFpXRnpkWEpsSUdaMWJtTjBhVzl1SUdsdUlIVnpaUzRnUW5rZ1pHVm1ZWFZzZEN3Z1pHOXVKM1FnYldWaGMzVnlaVnh1SUNBZ0tpQmhibmwwYUdsdVp5d2dZblYwSUhkbEoyeHNJRzkyWlhKeWFXUmxJSFJvYVhNZ2FXWWdkMlVnYVc1cVpXTjBJR0VnYldWaGMzVnlaU0JtZFc1amRHbHZiaTVjYmlBZ0lDb3ZYRzRnSUhOMGIzSmxaRTFsWVhOMWNtVTZJRjl1YjAxbFlYTjFjbVVzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQnZZbXBsWTNSY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzlpYW1WamRFNWhiV1ZjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNROGMzUnlhVzVuUG4wZ2JXVjBhRzlrVG1GdFpYTmNiaUFnSUNvdlhHNGdJRzFsWVhOMWNtVk5aWFJvYjJSek9pQm1kVzVqZEdsdmJpaHZZbXBsWTNRc0lHOWlhbVZqZEU1aGJXVXNJRzFsZEdodlpFNWhiV1Z6S1NCN1hHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYTJWNUlHbHVJRzFsZEdodlpFNWhiV1Z6S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doYldWMGFHOWtUbUZ0WlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvYTJWNUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHOWlhbVZqZEZ0clpYbGRJRDBnVW1WaFkzUlFaWEptTG0xbFlYTjFjbVVvWEc0Z0lDQWdJQ0FnSUNBZ2IySnFaV04wVG1GdFpTeGNiaUFnSUNBZ0lDQWdJQ0J0WlhSb2IyUk9ZVzFsYzF0clpYbGRMRnh1SUNBZ0lDQWdJQ0FnSUc5aWFtVmpkRnRyWlhsZFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJWYzJVZ2RHaHBjeUIwYnlCM2NtRndJRzFsZEdodlpITWdlVzkxSUhkaGJuUWdkRzhnYldWaGMzVnlaUzRnV21WeWJ5QnZkbVZ5YUdWaFpDQnBiaUJ3Y205a2RXTjBhVzl1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2IySnFUbUZ0WlZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdabTVPWVcxbFhHNGdJQ0FxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjU5SUdaMWJtTmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1puVnVZM1JwYjI1OVhHNGdJQ0FxTDF4dUlDQnRaV0Z6ZFhKbE9pQm1kVzVqZEdsdmJpaHZZbXBPWVcxbExDQm1iazVoYldVc0lHWjFibU1wSUh0Y2JpQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2JXVmhjM1Z5WldSR2RXNWpJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lIWmhjaUIzY21Gd2NHVnlJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hTWldGamRGQmxjbVl1Wlc1aFlteGxUV1ZoYzNWeVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDZ2hiV1ZoYzNWeVpXUkdkVzVqS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J0WldGemRYSmxaRVoxYm1NZ1BTQlNaV0ZqZEZCbGNtWXVjM1J2Y21Wa1RXVmhjM1Z5WlNodlltcE9ZVzFsTENCbWJrNWhiV1VzSUdaMWJtTXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2JXVmhjM1Z5WldSR2RXNWpMbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHWjFibU11WVhCd2JIa29kR2hwY3l3Z1lYSm5kVzFsYm5SektUdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ0lDQjNjbUZ3Y0dWeUxtUnBjM0JzWVhsT1lXMWxJRDBnYjJKcVRtRnRaU0FySUNkZkp5QXJJR1p1VG1GdFpUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCM2NtRndjR1Z5TzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1puVnVZenRjYmlBZ2ZTeGNibHh1SUNCcGJtcGxZM1JwYjI0NklIdGNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQnRaV0Z6ZFhKbFhHNGdJQ0FnSUNvdlhHNGdJQ0FnYVc1cVpXTjBUV1ZoYzNWeVpUb2dablZ1WTNScGIyNG9iV1ZoYzNWeVpTa2dlMXh1SUNBZ0lDQWdVbVZoWTNSUVpYSm1Mbk4wYjNKbFpFMWxZWE4xY21VZ1BTQnRaV0Z6ZFhKbE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQlRhVzF3YkhrZ2NHRnpjMlZ6SUhSb2NtOTFaMmdnZEdobElHMWxZWE4xY21Wa0lHWjFibU4wYVc5dUxDQjNhWFJvYjNWMElHMWxZWE4xY21sdVp5QnBkQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiMkpxVG1GdFpWeHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR1p1VG1GdFpWeHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnWm5WdVkxeHVJQ29nUUhKbGRIVnliaUI3Wm5WdVkzUnBiMjU5WEc0Z0tpOWNibVoxYm1OMGFXOXVJRjl1YjAxbFlYTjFjbVVvYjJKcVRtRnRaU3dnWm01T1lXMWxMQ0JtZFc1aktTQjdYRzRnSUhKbGRIVnliaUJtZFc1ak8xeHVmVnh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBVR1Z5Wmp0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge307XG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7XG4gICAgcHJvcDogJ3Byb3AnLFxuICAgIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0J1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dVRtRnRaWE11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dVRtRnRaWE5jYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsY3lBOUlIdDlPMXh1WEc1cFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJRkpsWVdOMFVISnZjRlI1Y0dWTWIyTmhkR2x2Yms1aGJXVnpJRDBnZTF4dUlDQWdJSEJ5YjNBNklDZHdjbTl3Snl4Y2JpQWdJQ0JqYjI1MFpYaDBPaUFuWTI5dWRHVjRkQ2NzWEc0Z0lDQWdZMmhwYkdSRGIyNTBaWGgwT2lBblkyaHBiR1FnWTI5dWRHVjRkQ2RjYmlBZ2ZUdGNibjFjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsY3p0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBrZXlNaXJyb3IgPSByZXF1aXJlKFwiLi9rZXlNaXJyb3JcIik7XG5cbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25zID0ga2V5TWlycm9yKHtcbiAgcHJvcDogbnVsbCxcbiAgY29udGV4dDogbnVsbCxcbiAgY2hpbGRDb250ZXh0OiBudWxsXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25zO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UHJvcFR5cGVzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RnJhZ21lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEZyYWdtZW50XCIpO1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNcIik7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZW1wdHlGdW5jdGlvblwiKTtcblxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAqXG4gKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gKiAgICAgcHJvcFR5cGVzOiB7XG4gKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICpcbiAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAqXG4gKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAqICAgICB9LFxuICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gKiAgIH0pO1xuICpcbiAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAqXG4gKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLilcbiAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICpcbiAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcbiAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAqICAgIHByb3BUeXBlczoge1xuICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xuICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICogICAgICAgICAgKTtcbiAqICAgICAgICB9XG4gKiAgICAgIH1cbiAqICAgIH0sXG4gKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAqICB9KTtcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG52YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG52YXIgZWxlbWVudFR5cGVDaGVja2VyID0gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCk7XG52YXIgbm9kZVR5cGVDaGVja2VyID0gY3JlYXRlTm9kZUNoZWNrZXIoKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICBhcnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksXG4gIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICBudW1iZXI6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdudW1iZXInKSxcbiAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuXG4gIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcbiAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICBlbGVtZW50OiBlbGVtZW50VHlwZUNoZWNrZXIsXG4gIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gIG5vZGU6IG5vZGVUeXBlQ2hlY2tlcixcbiAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXJcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICAgKFwiUmVxdWlyZWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCB3YXMgbm90IHNwZWNpZmllZCBpbiBcIikgK1xuICAgICAgICAgIChcImBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAuXCIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIG9mIHR5cGUgYFwiICsgcHJlY2lzZVR5cGUgKyBcImAgXCIpICtcbiAgICAgICAgKFwic3VwcGxpZWQgdG8gYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgYFwiICsgZXhwZWN0ZWRUeXBlICsgXCJgLlwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zKG51bGwpKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBvZiB0eXBlIFwiKSArXG4gICAgICAgIChcImBcIiArIHByb3BUeXBlICsgXCJgIHN1cHBsaWVkIHRvIGBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAsIGV4cGVjdGVkIGFuIGFycmF5LlwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pO1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICBpZiAoIVJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIHN1cHBsaWVkIHRvIFwiKSArXG4gICAgICAgIChcImBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAsIGV4cGVjdGVkIGEgUmVhY3RFbGVtZW50LlwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgc3VwcGxpZWQgdG8gXCIpICtcbiAgICAgICAgKFwiYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYFwiICsgZXhwZWN0ZWRDbGFzc05hbWUgKyBcImAuXCIpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gZXhwZWN0ZWRWYWx1ZXNbaV0pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMpO1xuICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgb2YgdmFsdWUgYFwiICsgcHJvcFZhbHVlICsgXCJgIFwiKSArXG4gICAgICAoXCJzdXBwbGllZCB0byBgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLCBleHBlY3RlZCBvbmUgb2YgXCIgKyB2YWx1ZXNTdHJpbmcgKyBcIi5cIilcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIG9mIHR5cGUgXCIpICtcbiAgICAgICAgKFwiYFwiICsgcHJvcFR5cGUgKyBcImAgc3VwcGxpZWQgdG8gYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LlwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgaWYgKHByb3BWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbik7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBzdXBwbGllZCB0byBcIikgK1xuICAgICAgKFwiYFwiICsgY29tcG9uZW50TmFtZSArIFwiYC5cIilcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBzdXBwbGllZCB0byBcIikgK1xuICAgICAgICAoXCJgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgb2YgdHlwZSBgXCIgKyBwcm9wVHlwZSArIFwiYCBcIikgK1xuICAgICAgICAoXCJzdXBwbGllZCB0byBgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLCBleHBlY3RlZCBgb2JqZWN0YC5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBwcm9wVmFsdWUgPSBSZWFjdEZyYWdtZW50LmV4dHJhY3RJZkZyYWdtZW50KHByb3BWYWx1ZSk7XG4gICAgICBmb3IgKHZhciBrIGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoIWlzTm9kZShwcm9wVmFsdWVba10pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbmZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuICdhcnJheSc7XG4gIH1cbiAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICByZXR1cm4gJ29iamVjdCc7XG4gIH1cbiAgcmV0dXJuIHByb3BUeXBlO1xufVxuXG4vLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4vLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbmZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByb3BUeXBlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UHV0TGlzdGVuZXJRdWV1ZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcblxuZnVuY3Rpb24gUmVhY3RQdXRMaXN0ZW5lclF1ZXVlKCkge1xuICB0aGlzLmxpc3RlbmVyc1RvUHV0ID0gW107XG59XG5cbmFzc2lnbihSZWFjdFB1dExpc3RlbmVyUXVldWUucHJvdG90eXBlLCB7XG4gIGVucXVldWVQdXRMaXN0ZW5lcjogZnVuY3Rpb24ocm9vdE5vZGVJRCwgcHJvcEtleSwgcHJvcFZhbHVlKSB7XG4gICAgdGhpcy5saXN0ZW5lcnNUb1B1dC5wdXNoKHtcbiAgICAgIHJvb3ROb2RlSUQ6IHJvb3ROb2RlSUQsXG4gICAgICBwcm9wS2V5OiBwcm9wS2V5LFxuICAgICAgcHJvcFZhbHVlOiBwcm9wVmFsdWVcbiAgICB9KTtcbiAgfSxcblxuICBwdXRMaXN0ZW5lcnM6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saXN0ZW5lcnNUb1B1dC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpc3RlbmVyVG9QdXQgPSB0aGlzLmxpc3RlbmVyc1RvUHV0W2ldO1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnB1dExpc3RlbmVyKFxuICAgICAgICBsaXN0ZW5lclRvUHV0LnJvb3ROb2RlSUQsXG4gICAgICAgIGxpc3RlbmVyVG9QdXQucHJvcEtleSxcbiAgICAgICAgbGlzdGVuZXJUb1B1dC5wcm9wVmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmxpc3RlbmVyc1RvUHV0Lmxlbmd0aCA9IDA7XG4gIH0sXG5cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG59KTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0UHV0TGlzdGVuZXJRdWV1ZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQdXRMaXN0ZW5lclF1ZXVlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb25cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FsbGJhY2tRdWV1ZSA9IHJlcXVpcmUoXCIuL0NhbGxiYWNrUXVldWVcIik7XG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJcIik7XG52YXIgUmVhY3RJbnB1dFNlbGVjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0SW5wdXRTZWxlY3Rpb25cIik7XG52YXIgUmVhY3RQdXRMaXN0ZW5lclF1ZXVlID0gcmVxdWlyZShcIi4vUmVhY3RQdXRMaXN0ZW5lclF1ZXVlXCIpO1xudmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZShcIi4vVHJhbnNhY3Rpb25cIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCwgd2hlbiBwb3NzaWJsZSwgdGhlIHNlbGVjdGlvbiByYW5nZSAoY3VycmVudGx5IHNlbGVjdGVkIHRleHRcbiAqIGlucHV0KSBpcyBub3QgZGlzdHVyYmVkIGJ5IHBlcmZvcm1pbmcgdGhlIHRyYW5zYWN0aW9uLlxuICovXG52YXIgU0VMRUNUSU9OX1JFU1RPUkFUSU9OID0ge1xuICAvKipcbiAgICogQHJldHVybiB7U2VsZWN0aW9ufSBTZWxlY3Rpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuICBpbml0aWFsaXplOiBSZWFjdElucHV0U2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm9ybWF0aW9uLFxuICAvKipcbiAgICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbCBTZWxlY3Rpb24gaW5mb3JtYXRpb24gcmV0dXJuZWQgZnJvbSBgaW5pdGlhbGl6ZWAuXG4gICAqL1xuICBjbG9zZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uXG59O1xuXG4vKipcbiAqIFN1cHByZXNzZXMgZXZlbnRzIChibHVyL2ZvY3VzKSB0aGF0IGNvdWxkIGJlIGluYWR2ZXJ0ZW50bHkgZGlzcGF0Y2hlZCBkdWUgdG9cbiAqIGhpZ2ggbGV2ZWwgRE9NIG1hbmlwdWxhdGlvbnMgKGxpa2UgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgYSB0ZXh0IGlucHV0IGZyb20gdGhlXG4gKiBET00pLlxuICovXG52YXIgRVZFTlRfU1VQUFJFU1NJT04gPSB7XG4gIC8qKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUaGUgZW5hYmxlZCBzdGF0dXMgb2YgYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgYmVmb3JlXG4gICAqIHRoZSByZWNvbmNpbGlhdGlvbi5cbiAgICovXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjdXJyZW50bHlFbmFibGVkID0gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmlzRW5hYmxlZCgpO1xuICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5zZXRFbmFibGVkKGZhbHNlKTtcbiAgICByZXR1cm4gY3VycmVudGx5RW5hYmxlZDtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBwcmV2aW91c2x5RW5hYmxlZCBFbmFibGVkIHN0YXR1cyBvZlxuICAgKiAgIGBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJgIGJlZm9yZSB0aGUgcmVjb25jaWxpYXRpb24gb2NjdXJlZC4gYGNsb3NlYFxuICAgKiAgIHJlc3RvcmVzIHRoZSBwcmV2aW91cyB2YWx1ZS5cbiAgICovXG4gIGNsb3NlOiBmdW5jdGlvbihwcmV2aW91c2x5RW5hYmxlZCkge1xuICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5zZXRFbmFibGVkKHByZXZpb3VzbHlFbmFibGVkKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQcm92aWRlcyBhIHF1ZXVlIGZvciBjb2xsZWN0aW5nIGBjb21wb25lbnREaWRNb3VudGAgYW5kXG4gKiBgY29tcG9uZW50RGlkVXBkYXRlYCBjYWxsYmFja3MgZHVyaW5nIHRoZSB0aGUgdHJhbnNhY3Rpb24uXG4gKi9cbnZhciBPTl9ET01fUkVBRFlfUVVFVUVJTkcgPSB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgYG9uRE9NUmVhZHlgIHF1ZXVlLlxuICAgKi9cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkucmVzZXQoKTtcbiAgfSxcblxuICAvKipcbiAgICogQWZ0ZXIgRE9NIGlzIGZsdXNoZWQsIGludm9rZSBhbGwgcmVnaXN0ZXJlZCBgb25ET01SZWFkeWAgY2FsbGJhY2tzLlxuICAgKi9cbiAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5Lm5vdGlmeUFsbCgpO1xuICB9XG59O1xuXG52YXIgUFVUX0xJU1RFTkVSX1FVRVVFSU5HID0ge1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1dExpc3RlbmVyUXVldWUucmVzZXQoKTtcbiAgfSxcblxuICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlLnB1dExpc3RlbmVycygpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4ZWN1dGVkIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGBUcmFuc2FjdGlvbmAgaW5zdGFuY2UuIENvbnNpZGVyIHRoZXNlIGFzXG4gKiBiZWluZyBtZW1iZXIgbWV0aG9kcywgYnV0IHdpdGggYW4gaW1wbGllZCBvcmRlcmluZyB3aGlsZSBiZWluZyBpc29sYXRlZCBmcm9tXG4gKiBlYWNoIG90aGVyLlxuICovXG52YXIgVFJBTlNBQ1RJT05fV1JBUFBFUlMgPSBbXG4gIFBVVF9MSVNURU5FUl9RVUVVRUlORyxcbiAgU0VMRUNUSU9OX1JFU1RPUkFUSU9OLFxuICBFVkVOVF9TVVBQUkVTU0lPTixcbiAgT05fRE9NX1JFQURZX1FVRVVFSU5HXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseTpcbiAqIC0gVGhlIG9yZGVyIHRoYXQgdGhlc2UgYXJlIGxpc3RlZCBpbiB0aGUgdHJhbnNhY3Rpb24gaXMgY3JpdGljYWw6XG4gKiAtIFN1cHByZXNzZXMgZXZlbnRzLlxuICogLSBSZXN0b3JlcyBzZWxlY3Rpb24gcmFuZ2UuXG4gKlxuICogRnV0dXJlOlxuICogLSBSZXN0b3JlIGRvY3VtZW50L292ZXJmbG93IHNjcm9sbCBwb3NpdGlvbnMgdGhhdCB3ZXJlIHVuaW50ZW50aW9uYWxseVxuICogICBtb2RpZmllZCB2aWEgRE9NIGluc2VydGlvbnMgYWJvdmUgdGhlIHRvcCB2aWV3cG9ydCBib3VuZGFyeS5cbiAqIC0gSW1wbGVtZW50L2ludGVncmF0ZSB3aXRoIGN1c3RvbWl6ZWQgY29uc3RyYWludCBiYXNlZCBsYXlvdXQgc3lzdGVtIGFuZCBrZWVwXG4gKiAgIHRyYWNrIG9mIHdoaWNoIGRpbWVuc2lvbnMgbXVzdCBiZSByZW1lYXN1cmVkLlxuICpcbiAqIEBjbGFzcyBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24oKSB7XG4gIHRoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbiAgLy8gT25seSBzZXJ2ZXItc2lkZSByZW5kZXJpbmcgcmVhbGx5IG5lZWRzIHRoaXMgb3B0aW9uIChzZWVcbiAgLy8gYFJlYWN0U2VydmVyUmVuZGVyaW5nYCksIGJ1dCBzZXJ2ZXItc2lkZSB1c2VzXG4gIC8vIGBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uYCBpbnN0ZWFkLiBUaGlzIG9wdGlvbiBpcyBoZXJlIHNvIHRoYXQgaXQnc1xuICAvLyBhY2Nlc3NpYmxlIGFuZCBkZWZhdWx0cyB0byBmYWxzZSB3aGVuIGBSZWFjdERPTUNvbXBvbmVudGAgYW5kXG4gIC8vIGBSZWFjdFRleHRDb21wb25lbnRgIGNoZWNrcyBpdCBpbiBgbW91bnRDb21wb25lbnRgLmBcbiAgdGhpcy5yZW5kZXJUb1N0YXRpY01hcmt1cCA9IGZhbHNlO1xuICB0aGlzLnJlYWN0TW91bnRSZWFkeSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKG51bGwpO1xuICB0aGlzLnB1dExpc3RlbmVyUXVldWUgPSBSZWFjdFB1dExpc3RlbmVyUXVldWUuZ2V0UG9vbGVkKCk7XG59XG5cbnZhciBNaXhpbiA9IHtcbiAgLyoqXG4gICAqIEBzZWUgVHJhbnNhY3Rpb25cbiAgICogQGFic3RyYWN0XG4gICAqIEBmaW5hbFxuICAgKiBAcmV0dXJuIHthcnJheTxvYmplY3Q+fSBMaXN0IG9mIG9wZXJhdGlvbiB3cmFwIHByb2NlZWR1cmVzLlxuICAgKiAgIFRPRE86IGNvbnZlcnQgdG8gYXJyYXk8VHJhbnNhY3Rpb25XcmFwcGVyPlxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFRSQU5TQUNUSU9OX1dSQVBQRVJTO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBxdWV1ZSB0byBjb2xsZWN0IGBvbkRPTVJlYWR5YCBjYWxsYmFja3Mgd2l0aC5cbiAgICovXG4gIGdldFJlYWN0TW91bnRSZWFkeTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhY3RNb3VudFJlYWR5O1xuICB9LFxuXG4gIGdldFB1dExpc3RlbmVyUXVldWU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnB1dExpc3RlbmVyUXVldWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIHRoaXMsIGFuZCB3aWxsIGludm9rZSB0aGlzIGJlZm9yZSBhbGxvd2luZyB0aGlzXG4gICAqIGluc3RhbmNlIHRvIGJlIHJlc3VzZWQuXG4gICAqL1xuICBkZXN0cnVjdG9yOiBmdW5jdGlvbigpIHtcbiAgICBDYWxsYmFja1F1ZXVlLnJlbGVhc2UodGhpcy5yZWFjdE1vdW50UmVhZHkpO1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5ID0gbnVsbDtcblxuICAgIFJlYWN0UHV0TGlzdGVuZXJRdWV1ZS5yZWxlYXNlKHRoaXMucHV0TGlzdGVuZXJRdWV1ZSk7XG4gICAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlID0gbnVsbDtcbiAgfVxufTtcblxuXG5hc3NpZ24oUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5wcm90b3R5cGUsIFRyYW5zYWN0aW9uLk1peGluLCBNaXhpbik7XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uKTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFJlY29uY2lsZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFJlZiA9IHJlcXVpcmUoXCIuL1JlYWN0UmVmXCIpO1xudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFZhbGlkYXRvclwiKTtcblxuLyoqXG4gKiBIZWxwZXIgdG8gY2FsbCBSZWFjdFJlZi5hdHRhY2hSZWZzIHdpdGggdGhpcyBjb21wb3NpdGUgY29tcG9uZW50LCBzcGxpdCBvdXRcbiAqIHRvIGF2b2lkIGFsbG9jYXRpb25zIGluIHRoZSB0cmFuc2FjdGlvbiBtb3VudC1yZWFkeSBxdWV1ZS5cbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVmcygpIHtcbiAgUmVhY3RSZWYuYXR0YWNoUmVmcyh0aGlzLCB0aGlzLl9jdXJyZW50RWxlbWVudCk7XG59XG5cbnZhciBSZWFjdFJlY29uY2lsZXIgPSB7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIHJlbmRlcnMgbWFya3VwLCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIERPTSBJRCBvZiB0aGUgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7P3N0cmluZ30gUmVuZGVyZWQgbWFya3VwIHRvIGJlIGluc2VydGVkIGludG8gdGhlIERPTS5cbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKGludGVybmFsSW5zdGFuY2UsIHJvb3RJRCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgbWFya3VwID0gaW50ZXJuYWxJbnN0YW5jZS5tb3VudENvbXBvbmVudChyb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFByb3BzKFxuICAgICAgICBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudFxuICAgICAgKTtcbiAgICB9XG4gICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShhdHRhY2hSZWZzLCBpbnRlcm5hbEluc3RhbmNlKTtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBgbW91bnRDb21wb25lbnRgLlxuICAgKlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbihpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgUmVhY3RSZWYuZGV0YWNoUmVmcyhpbnRlcm5hbEluc3RhbmNlLCBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudCk7XG4gICAgaW50ZXJuYWxJbnN0YW5jZS51bm1vdW50Q29tcG9uZW50KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIGNvbXBvbmVudCB1c2luZyBhIG5ldyBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBpbnRlcm5hbEluc3RhbmNlXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudFxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24oXG4gICAgaW50ZXJuYWxJbnN0YW5jZSwgbmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBjb250ZXh0XG4gICkge1xuICAgIHZhciBwcmV2RWxlbWVudCA9IGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50O1xuXG4gICAgaWYgKG5leHRFbGVtZW50ID09PSBwcmV2RWxlbWVudCAmJiBuZXh0RWxlbWVudC5fb3duZXIgIT0gbnVsbCkge1xuICAgICAgLy8gU2luY2UgZWxlbWVudHMgYXJlIGltbXV0YWJsZSBhZnRlciB0aGUgb3duZXIgaXMgcmVuZGVyZWQsXG4gICAgICAvLyB3ZSBjYW4gZG8gYSBjaGVhcCBpZGVudGl0eSBjb21wYXJlIGhlcmUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYVxuICAgICAgLy8gc3VwZXJmbHVvdXMgcmVjb25jaWxlLiBJdCdzIHBvc3NpYmxlIGZvciBzdGF0ZSB0byBiZSBtdXRhYmxlIGJ1dCBzdWNoXG4gICAgICAvLyBjaGFuZ2Ugc2hvdWxkIHRyaWdnZXIgYW4gdXBkYXRlIG9mIHRoZSBvd25lciB3aGljaCB3b3VsZCByZWNyZWF0ZVxuICAgICAgLy8gdGhlIGVsZW1lbnQuIFdlIGV4cGxpY2l0bHkgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW4gb3duZXIgc2luY2VcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgZm9yIGFuIGVsZW1lbnQgY3JlYXRlZCBvdXRzaWRlIGEgY29tcG9zaXRlIHRvIGJlXG4gICAgICAvLyBkZWVwbHkgbXV0YXRlZCBhbmQgcmV1c2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIFJlYWN0RWxlbWVudFZhbGlkYXRvci5jaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHMobmV4dEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHZhciByZWZzQ2hhbmdlZCA9IFJlYWN0UmVmLnNob3VsZFVwZGF0ZVJlZnMoXG4gICAgICBwcmV2RWxlbWVudCxcbiAgICAgIG5leHRFbGVtZW50XG4gICAgKTtcblxuICAgIGlmIChyZWZzQ2hhbmdlZCkge1xuICAgICAgUmVhY3RSZWYuZGV0YWNoUmVmcyhpbnRlcm5hbEluc3RhbmNlLCBwcmV2RWxlbWVudCk7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5yZWNlaXZlQ29tcG9uZW50KG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG5cbiAgICBpZiAocmVmc0NoYW5nZWQpIHtcbiAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYXR0YWNoUmVmcywgaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbnkgZGlydHkgY2hhbmdlcyBpbiBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5jdGlvbihcbiAgICBpbnRlcm5hbEluc3RhbmNlLFxuICAgIHRyYW5zYWN0aW9uXG4gICkge1xuICAgIGludGVybmFsSW5zdGFuY2UucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHRyYW5zYWN0aW9uKTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UmVjb25jaWxlcjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JTWldOdmJtTnBiR1Z5TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElGSmxZV04wVW1WamIyNWphV3hsY2x4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGSmxZV04wVW1WbUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlNaV1pjSWlrN1hHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eVhDSXBPMXh1WEc0dktpcGNiaUFxSUVobGJIQmxjaUIwYnlCallXeHNJRkpsWVdOMFVtVm1MbUYwZEdGamFGSmxabk1nZDJsMGFDQjBhR2x6SUdOdmJYQnZjMmwwWlNCamIyMXdiMjVsYm5Rc0lITndiR2wwSUc5MWRGeHVJQ29nZEc4Z1lYWnZhV1FnWVd4c2IyTmhkR2x2Ym5NZ2FXNGdkR2hsSUhSeVlXNXpZV04wYVc5dUlHMXZkVzUwTFhKbFlXUjVJSEYxWlhWbExseHVJQ292WEc1bWRXNWpkR2x2YmlCaGRIUmhZMmhTWldaektDa2dlMXh1SUNCU1pXRmpkRkpsWmk1aGRIUmhZMmhTWldaektIUm9hWE1zSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MEtUdGNibjFjYmx4dWRtRnlJRkpsWVdOMFVtVmpiMjVqYVd4bGNpQTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzVwZEdsaGJHbDZaWE1nZEdobElHTnZiWEJ2Ym1WdWRDd2djbVZ1WkdWeWN5QnRZWEpyZFhBc0lHRnVaQ0J5WldkcGMzUmxjbk1nWlhabGJuUWdiR2x6ZEdWdVpYSnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCeWIyOTBTVVFnUkU5TklFbEVJRzltSUhSb1pTQnliMjkwSUc1dlpHVXVYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ym54U1pXRmpkRk5sY25abGNsSmxibVJsY21sdVoxUnlZVzV6WVdOMGFXOXVmU0IwY21GdWMyRmpkR2x2Ymx4dUlDQWdLaUJBY21WMGRYSnVJSHMvYzNSeWFXNW5mU0JTWlc1a1pYSmxaQ0J0WVhKcmRYQWdkRzhnWW1VZ2FXNXpaWEowWldRZ2FXNTBieUIwYUdVZ1JFOU5MbHh1SUNBZ0tpQkFabWx1WVd4Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCdGIzVnVkRU52YlhCdmJtVnVkRG9nWm5WdVkzUnBiMjRvYVc1MFpYSnVZV3hKYm5OMFlXNWpaU3dnY205dmRFbEVMQ0IwY21GdWMyRmpkR2x2Yml3Z1kyOXVkR1Y0ZENrZ2UxeHVJQ0FnSUhaaGNpQnRZWEpyZFhBZ1BTQnBiblJsY201aGJFbHVjM1JoYm1ObExtMXZkVzUwUTI5dGNHOXVaVzUwS0hKdmIzUkpSQ3dnZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcE8xeHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUZKbFlXTjBSV3hsYldWdWRGWmhiR2xrWVhSdmNpNWphR1ZqYTBGdVpGZGhjbTVHYjNKTmRYUmhkR1ZrVUhKdmNITW9YRzRnSUNBZ0lDQWdJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYMk4xY25KbGJuUkZiR1Z0Wlc1MFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JpQWdJQ0IwY21GdWMyRmpkR2x2Ymk1blpYUlNaV0ZqZEUxdmRXNTBVbVZoWkhrb0tTNWxibkYxWlhWbEtHRjBkR0ZqYUZKbFpuTXNJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBPMXh1SUNBZ0lISmxkSFZ5YmlCdFlYSnJkWEE3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxiR1ZoYzJWeklHRnVlU0J5WlhOdmRYSmpaWE1nWVd4c2IyTmhkR1ZrSUdKNUlHQnRiM1Z1ZEVOdmJYQnZibVZ1ZEdBdVhHNGdJQ0FxWEc0Z0lDQXFJRUJtYVc1aGJGeHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lIVnViVzkxYm5SRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVcElIdGNiaUFnSUNCU1pXRmpkRkpsWmk1a1pYUmhZMmhTWldaektHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVc0lHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVdVgyTjFjbkpsYm5SRmJHVnRaVzUwS1R0Y2JpQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMblZ1Ylc5MWJuUkRiMjF3YjI1bGJuUW9LVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1ZYQmtZWFJsSUdFZ1kyOXRjRzl1Wlc1MElIVnphVzVuSUdFZ2JtVjNJR1ZzWlcxbGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUkRiMjF3YjI1bGJuUjlJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJRzVsZUhSRmJHVnRaVzUwWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHTnZiblJsZUhSY2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCeVpXTmxhWFpsUTI5dGNHOXVaVzUwT2lCbWRXNWpkR2x2YmloY2JpQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMQ0J1WlhoMFJXeGxiV1Z1ZEN3Z2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUmNiaUFnS1NCN1hHNGdJQ0FnZG1GeUlIQnlaWFpGYkdWdFpXNTBJRDBnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmWTNWeWNtVnVkRVZzWlcxbGJuUTdYRzVjYmlBZ0lDQnBaaUFvYm1WNGRFVnNaVzFsYm5RZ1BUMDlJSEJ5WlhaRmJHVnRaVzUwSUNZbUlHNWxlSFJGYkdWdFpXNTBMbDl2ZDI1bGNpQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQXZMeUJUYVc1alpTQmxiR1Z0Wlc1MGN5QmhjbVVnYVcxdGRYUmhZbXhsSUdGbWRHVnlJSFJvWlNCdmQyNWxjaUJwY3lCeVpXNWtaWEpsWkN4Y2JpQWdJQ0FnSUM4dklIZGxJR05oYmlCa2J5QmhJR05vWldGd0lHbGtaVzUwYVhSNUlHTnZiWEJoY21VZ2FHVnlaU0IwYnlCa1pYUmxjbTFwYm1VZ2FXWWdkR2hwY3lCcGN5QmhYRzRnSUNBZ0lDQXZMeUJ6ZFhCbGNtWnNkVzkxY3lCeVpXTnZibU5wYkdVdUlFbDBKM01nY0c5emMybGliR1VnWm05eUlITjBZWFJsSUhSdklHSmxJRzExZEdGaWJHVWdZblYwSUhOMVkyaGNiaUFnSUNBZ0lDOHZJR05vWVc1blpTQnphRzkxYkdRZ2RISnBaMmRsY2lCaGJpQjFjR1JoZEdVZ2IyWWdkR2hsSUc5M2JtVnlJSGRvYVdOb0lIZHZkV3hrSUhKbFkzSmxZWFJsWEc0Z0lDQWdJQ0F2THlCMGFHVWdaV3hsYldWdWRDNGdWMlVnWlhod2JHbGphWFJzZVNCamFHVmpheUJtYjNJZ2RHaGxJR1Y0YVhOMFpXNWpaU0J2WmlCaGJpQnZkMjVsY2lCemFXNWpaVnh1SUNBZ0lDQWdMeThnYVhRbmN5QndiM056YVdKc1pTQm1iM0lnWVc0Z1pXeGxiV1Z1ZENCamNtVmhkR1ZrSUc5MWRITnBaR1VnWVNCamIyMXdiM05wZEdVZ2RHOGdZbVZjYmlBZ0lDQWdJQzh2SUdSbFpYQnNlU0J0ZFhSaGRHVmtJR0Z1WkNCeVpYVnpaV1F1WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ1VtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlMbU5vWldOclFXNWtWMkZ5YmtadmNrMTFkR0YwWldSUWNtOXdjeWh1WlhoMFJXeGxiV1Z1ZENrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZG1GeUlISmxabk5EYUdGdVoyVmtJRDBnVW1WaFkzUlNaV1l1YzJodmRXeGtWWEJrWVhSbFVtVm1jeWhjYmlBZ0lDQWdJSEJ5WlhaRmJHVnRaVzUwTEZ4dUlDQWdJQ0FnYm1WNGRFVnNaVzFsYm5SY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnYVdZZ0tISmxabk5EYUdGdVoyVmtLU0I3WEc0Z0lDQWdJQ0JTWldGamRGSmxaaTVrWlhSaFkyaFNaV1p6S0dsdWRHVnlibUZzU1c1emRHRnVZMlVzSUhCeVpYWkZiR1Z0Wlc1MEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTG5KbFkyVnBkbVZEYjIxd2IyNWxiblFvYm1WNGRFVnNaVzFsYm5Rc0lIUnlZVzV6WVdOMGFXOXVMQ0JqYjI1MFpYaDBLVHRjYmx4dUlDQWdJR2xtSUNoeVpXWnpRMmhoYm1kbFpDa2dlMXh1SUNBZ0lDQWdkSEpoYm5OaFkzUnBiMjR1WjJWMFVtVmhZM1JOYjNWdWRGSmxZV1I1S0NrdVpXNXhkV1YxWlNoaGRIUmhZMmhTWldaekxDQnBiblJsY201aGJFbHVjM1JoYm1ObEtUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVpzZFhOb0lHRnVlU0JrYVhKMGVTQmphR0Z1WjJWeklHbHVJR0VnWTI5dGNHOXVaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCcGJuUmxjbTVoYkVsdWMzUmhibU5sWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0J3WlhKbWIzSnRWWEJrWVhSbFNXWk9aV05sYzNOaGNuazZJR1oxYm1OMGFXOXVLRnh1SUNBZ0lHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVc1hHNGdJQ0FnZEhKaGJuTmhZM1JwYjI1Y2JpQWdLU0I3WEc0Z0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNXdaWEptYjNKdFZYQmtZWFJsU1daT1pXTmxjM05oY25rb2RISmhibk5oWTNScGIyNHBPMXh1SUNCOVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JTWldOdmJtTnBiR1Z5TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RSZWZcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RPd25lclwiKTtcblxudmFyIFJlYWN0UmVmID0ge307XG5cbmZ1bmN0aW9uIGF0dGFjaFJlZihyZWYsIGNvbXBvbmVudCwgb3duZXIpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZWYoY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIExlZ2FjeSByZWZcbiAgICBSZWFjdE93bmVyLmFkZENvbXBvbmVudEFzUmVmVG8oY29tcG9uZW50LCByZWYsIG93bmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRhY2hSZWYocmVmLCBjb21wb25lbnQsIG93bmVyKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKG51bGwpO1xuICB9IGVsc2Uge1xuICAgIC8vIExlZ2FjeSByZWZcbiAgICBSZWFjdE93bmVyLnJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbShjb21wb25lbnQsIHJlZiwgb3duZXIpO1xuICB9XG59XG5cblJlYWN0UmVmLmF0dGFjaFJlZnMgPSBmdW5jdGlvbihpbnN0YW5jZSwgZWxlbWVudCkge1xuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7XG4gIGlmIChyZWYgIT0gbnVsbCkge1xuICAgIGF0dGFjaFJlZihyZWYsIGluc3RhbmNlLCBlbGVtZW50Ll9vd25lcik7XG4gIH1cbn07XG5cblJlYWN0UmVmLnNob3VsZFVwZGF0ZVJlZnMgPSBmdW5jdGlvbihwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpIHtcbiAgLy8gSWYgZWl0aGVyIHRoZSBvd25lciBvciBhIGByZWZgIGhhcyBjaGFuZ2VkLCBtYWtlIHN1cmUgdGhlIG5ld2VzdCBvd25lclxuICAvLyBoYXMgc3RvcmVkIGEgcmVmZXJlbmNlIHRvIGB0aGlzYCwgYW5kIHRoZSBwcmV2aW91cyBvd25lciAoaWYgZGlmZmVyZW50KVxuICAvLyBoYXMgZm9yZ290dGVuIHRoZSByZWZlcmVuY2UgdG8gYHRoaXNgLiBXZSB1c2UgdGhlIGVsZW1lbnQgaW5zdGVhZFxuICAvLyBvZiB0aGUgcHVibGljIHRoaXMucHJvcHMgYmVjYXVzZSB0aGUgcG9zdCBwcm9jZXNzaW5nIGNhbm5vdCBkZXRlcm1pbmVcbiAgLy8gYSByZWYuIFRoZSByZWYgY29uY2VwdHVhbGx5IGxpdmVzIG9uIHRoZSBlbGVtZW50LlxuXG4gIC8vIFRPRE86IFNob3VsZCB0aGlzIGV2ZW4gYmUgcG9zc2libGU/IFRoZSBvd25lciBjYW5ub3QgY2hhbmdlIGJlY2F1c2VcbiAgLy8gaXQncyBmb3JiaWRkZW4gYnkgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQuIFRoZSByZWYgY2FuIGNoYW5nZVxuICAvLyBpZiB5b3Ugc3dhcCB0aGUga2V5cyBvZiBidXQgbm90IHRoZSByZWZzLiBSZWNvbnNpZGVyIHdoZXJlIHRoaXMgY2hlY2tcbiAgLy8gaXMgbWFkZS4gSXQgcHJvYmFibHkgYmVsb25ncyB3aGVyZSB0aGUga2V5IGNoZWNraW5nIGFuZFxuICAvLyBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50IGlzIGRvbmUuXG5cbiAgcmV0dXJuIChcbiAgICBuZXh0RWxlbWVudC5fb3duZXIgIT09IHByZXZFbGVtZW50Ll9vd25lciB8fFxuICAgIG5leHRFbGVtZW50LnJlZiAhPT0gcHJldkVsZW1lbnQucmVmXG4gICk7XG59O1xuXG5SZWFjdFJlZi5kZXRhY2hSZWZzID0gZnVuY3Rpb24oaW5zdGFuY2UsIGVsZW1lbnQpIHtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuICBpZiAocmVmICE9IG51bGwpIHtcbiAgICBkZXRhY2hSZWYocmVmLCBpbnN0YW5jZSwgZWxlbWVudC5fb3duZXIpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UmVmO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Um9vdEluZGV4XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Um9vdEluZGV4SW5qZWN0aW9uID0ge1xuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gX2NyZWF0ZVJlYWN0Um9vdEluZGV4XG4gICAqL1xuICBpbmplY3RDcmVhdGVSZWFjdFJvb3RJbmRleDogZnVuY3Rpb24oX2NyZWF0ZVJlYWN0Um9vdEluZGV4KSB7XG4gICAgUmVhY3RSb290SW5kZXguY3JlYXRlUmVhY3RSb290SW5kZXggPSBfY3JlYXRlUmVhY3RSb290SW5kZXg7XG4gIH1cbn07XG5cbnZhciBSZWFjdFJvb3RJbmRleCA9IHtcbiAgY3JlYXRlUmVhY3RSb290SW5kZXg6IG51bGwsXG4gIGluamVjdGlvbjogUmVhY3RSb290SW5kZXhJbmplY3Rpb25cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSb290SW5kZXg7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFNlcnZlclJlbmRlcmluZ1xuICovXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlSGFuZGxlc1wiKTtcbnZhciBSZWFjdE1hcmt1cENoZWNrc3VtID0gcmVxdWlyZShcIi4vUmVhY3RNYXJrdXBDaGVja3N1bVwiKTtcbnZhciBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uID1cbiAgcmVxdWlyZShcIi4vUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvblwiKTtcblxudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZShcIi4vZW1wdHlPYmplY3RcIik7XG52YXIgaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnRcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBIVE1MIG1hcmt1cFxuICovXG5mdW5jdGlvbiByZW5kZXJUb1N0cmluZyhlbGVtZW50KSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpLFxuICAgICdyZW5kZXJUb1N0cmluZygpOiBZb3UgbXVzdCBwYXNzIGEgdmFsaWQgUmVhY3RFbGVtZW50LidcbiAgKSA6IGludmFyaWFudChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkpKTtcblxuICB2YXIgdHJhbnNhY3Rpb247XG4gIHRyeSB7XG4gICAgdmFyIGlkID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RSb290SUQoKTtcbiAgICB0cmFuc2FjdGlvbiA9IFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKGZhbHNlKTtcblxuICAgIHJldHVybiB0cmFuc2FjdGlvbi5wZXJmb3JtKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChlbGVtZW50LCBudWxsKTtcbiAgICAgIHZhciBtYXJrdXAgPVxuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5tb3VudENvbXBvbmVudChpZCwgdHJhbnNhY3Rpb24sIGVtcHR5T2JqZWN0KTtcbiAgICAgIHJldHVybiBSZWFjdE1hcmt1cENoZWNrc3VtLmFkZENoZWNrc3VtVG9NYXJrdXAobWFya3VwKTtcbiAgICB9LCBudWxsKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLnJlbGVhc2UodHJhbnNhY3Rpb24pO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIEhUTUwgbWFya3VwLCB3aXRob3V0IHRoZSBleHRyYSBSZWFjdCBJRCBhbmQgY2hlY2tzdW1cbiAqIChmb3IgZ2VuZXJhdGluZyBzdGF0aWMgcGFnZXMpXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclRvU3RhdGljTWFya3VwKGVsZW1lbnQpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCksXG4gICAgJ3JlbmRlclRvU3RhdGljTWFya3VwKCk6IFlvdSBtdXN0IHBhc3MgYSB2YWxpZCBSZWFjdEVsZW1lbnQuJ1xuICApIDogaW52YXJpYW50KFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSkpO1xuXG4gIHZhciB0cmFuc2FjdGlvbjtcbiAgdHJ5IHtcbiAgICB2YXIgaWQgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5jcmVhdGVSZWFjdFJvb3RJRCgpO1xuICAgIHRyYW5zYWN0aW9uID0gUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbi5nZXRQb29sZWQodHJ1ZSk7XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ucGVyZm9ybShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoZWxlbWVudCwgbnVsbCk7XG4gICAgICByZXR1cm4gY29tcG9uZW50SW5zdGFuY2UubW91bnRDb21wb25lbnQoaWQsIHRyYW5zYWN0aW9uLCBlbXB0eU9iamVjdCk7XG4gICAgfSwgbnVsbCk7XG4gIH0gZmluYWxseSB7XG4gICAgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVuZGVyVG9TdHJpbmc6IHJlbmRlclRvU3RyaW5nLFxuICByZW5kZXJUb1N0YXRpY01hcmt1cDogcmVuZGVyVG9TdGF0aWNNYXJrdXBcbn07XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSVFpYSjJaWEpTWlc1a1pYSnBibWN1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWRIbHdaV05vWldOcmN5QnpkR0YwYVdNdGIyNXNlVnh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBVMlZ5ZG1WeVVtVnVaR1Z5YVc1blhHNGdLaTljYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGSmxZV04wUld4bGJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6WENJcE8xeHVkbUZ5SUZKbFlXTjBUV0Z5YTNWd1EyaGxZMnR6ZFcwZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFMWhjbXQxY0VOb1pXTnJjM1Z0WENJcE8xeHVkbUZ5SUZKbFlXTjBVMlZ5ZG1WeVVtVnVaR1Z5YVc1blZISmhibk5oWTNScGIyNGdQVnh1SUNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZObGNuWmxjbEpsYm1SbGNtbHVaMVJ5WVc1ellXTjBhVzl1WENJcE8xeHVYRzUyWVhJZ1pXMXdkSGxQWW1wbFkzUWdQU0J5WlhGMWFYSmxLRndpTGk5bGJYQjBlVTlpYW1WamRGd2lLVHRjYm5aaGNpQnBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1emRHRnVkR2xoZEdWU1pXRmpkRU52YlhCdmJtVnVkRndpS1R0Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJR1ZzWlcxbGJuUmNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnZEdobElFaFVUVXdnYldGeWEzVndYRzRnS2k5Y2JtWjFibU4wYVc5dUlISmxibVJsY2xSdlUzUnlhVzVuS0dWc1pXMWxiblFwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCU1pXRmpkRVZzWlcxbGJuUXVhWE5XWVd4cFpFVnNaVzFsYm5Rb1pXeGxiV1Z1ZENrc1hHNGdJQ0FnSjNKbGJtUmxjbFJ2VTNSeWFXNW5LQ2s2SUZsdmRTQnRkWE4wSUhCaGMzTWdZU0IyWVd4cFpDQlNaV0ZqZEVWc1pXMWxiblF1SjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0ZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENobGJHVnRaVzUwS1NrcE8xeHVYRzRnSUhaaGNpQjBjbUZ1YzJGamRHbHZianRjYmlBZ2RISjVJSHRjYmlBZ0lDQjJZWElnYVdRZ1BTQlNaV0ZqZEVsdWMzUmhibU5sU0dGdVpHeGxjeTVqY21WaGRHVlNaV0ZqZEZKdmIzUkpSQ2dwTzF4dUlDQWdJSFJ5WVc1ellXTjBhVzl1SUQwZ1VtVmhZM1JUWlhKMlpYSlNaVzVrWlhKcGJtZFVjbUZ1YzJGamRHbHZiaTVuWlhSUWIyOXNaV1FvWm1Gc2MyVXBPMXh1WEc0Z0lDQWdjbVYwZFhKdUlIUnlZVzV6WVdOMGFXOXVMbkJsY21admNtMG9ablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0IyWVhJZ1kyOXRjRzl1Wlc1MFNXNXpkR0Z1WTJVZ1BTQnBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MEtHVnNaVzFsYm5Rc0lHNTFiR3dwTzF4dUlDQWdJQ0FnZG1GeUlHMWhjbXQxY0NBOVhHNGdJQ0FnSUNBZ0lHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObExtMXZkVzUwUTI5dGNHOXVaVzUwS0dsa0xDQjBjbUZ1YzJGamRHbHZiaXdnWlcxd2RIbFBZbXBsWTNRcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUZKbFlXTjBUV0Z5YTNWd1EyaGxZMnR6ZFcwdVlXUmtRMmhsWTJ0emRXMVViMDFoY210MWNDaHRZWEpyZFhBcE8xeHVJQ0FnSUgwc0lHNTFiR3dwTzF4dUlDQjlJR1pwYm1Gc2JIa2dlMXh1SUNBZ0lGSmxZV04wVTJWeWRtVnlVbVZ1WkdWeWFXNW5WSEpoYm5OaFkzUnBiMjR1Y21Wc1pXRnpaU2gwY21GdWMyRmpkR2x2YmlrN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnWld4bGJXVnVkRnh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCMGFHVWdTRlJOVENCdFlYSnJkWEFzSUhkcGRHaHZkWFFnZEdobElHVjRkSEpoSUZKbFlXTjBJRWxFSUdGdVpDQmphR1ZqYTNOMWJWeHVJQ29nS0dadmNpQm5aVzVsY21GMGFXNW5JSE4wWVhScFl5QndZV2RsY3lsY2JpQXFMMXh1Wm5WdVkzUnBiMjRnY21WdVpHVnlWRzlUZEdGMGFXTk5ZWEpyZFhBb1pXeGxiV1Z1ZENrZ2UxeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaGxiR1Z0Wlc1MEtTeGNiaUFnSUNBbmNtVnVaR1Z5Vkc5VGRHRjBhV05OWVhKcmRYQW9LVG9nV1c5MUlHMTFjM1FnY0dGemN5QmhJSFpoYkdsa0lGSmxZV04wUld4bGJXVnVkQzRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0dWc1pXMWxiblFwS1NrN1hHNWNiaUFnZG1GeUlIUnlZVzV6WVdOMGFXOXVPMXh1SUNCMGNua2dlMXh1SUNBZ0lIWmhjaUJwWkNBOUlGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpMbU55WldGMFpWSmxZV04wVW05dmRFbEVLQ2s3WEc0Z0lDQWdkSEpoYm5OaFkzUnBiMjRnUFNCU1pXRmpkRk5sY25abGNsSmxibVJsY21sdVoxUnlZVzV6WVdOMGFXOXVMbWRsZEZCdmIyeGxaQ2gwY25WbEtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCMGNtRnVjMkZqZEdsdmJpNXdaWEptYjNKdEtHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdkbUZ5SUdOdmJYQnZibVZ1ZEVsdWMzUmhibU5sSUQwZ2FXNXpkR0Z1ZEdsaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZENobGJHVnRaVzUwTENCdWRXeHNLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmpiMjF3YjI1bGJuUkpibk4wWVc1alpTNXRiM1Z1ZEVOdmJYQnZibVZ1ZENocFpDd2dkSEpoYm5OaFkzUnBiMjRzSUdWdGNIUjVUMkpxWldOMEtUdGNiaUFnSUNCOUxDQnVkV3hzS1R0Y2JpQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQlNaV0ZqZEZObGNuWmxjbEpsYm1SbGNtbHVaMVJ5WVc1ellXTjBhVzl1TG5KbGJHVmhjMlVvZEhKaGJuTmhZM1JwYjI0cE8xeHVJQ0I5WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdlMXh1SUNCeVpXNWtaWEpVYjFOMGNtbHVaem9nY21WdVpHVnlWRzlUZEhKcGJtY3NYRzRnSUhKbGJtUmxjbFJ2VTNSaGRHbGpUV0Z5YTNWd09pQnlaVzVrWlhKVWIxTjBZWFJwWTAxaGNtdDFjRnh1ZlR0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb25cbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcbnZhciBDYWxsYmFja1F1ZXVlID0gcmVxdWlyZShcIi4vQ2FsbGJhY2tRdWV1ZVwiKTtcbnZhciBSZWFjdFB1dExpc3RlbmVyUXVldWUgPSByZXF1aXJlKFwiLi9SZWFjdFB1dExpc3RlbmVyUXVldWVcIik7XG52YXIgVHJhbnNhY3Rpb24gPSByZXF1aXJlKFwiLi9UcmFuc2FjdGlvblwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBgQ2FsbGJhY2tRdWV1ZWAgcXVldWUgZm9yIGNvbGxlY3RpbmcgYG9uRE9NUmVhZHlgIGNhbGxiYWNrc1xuICogZHVyaW5nIHRoZSBwZXJmb3JtaW5nIG9mIHRoZSB0cmFuc2FjdGlvbi5cbiAqL1xudmFyIE9OX0RPTV9SRUFEWV9RVUVVRUlORyA9IHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBgb25ET01SZWFkeWAgcXVldWUuXG4gICAqL1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlYWN0TW91bnRSZWFkeS5yZXNldCgpO1xuICB9LFxuXG4gIGNsb3NlOiBlbXB0eUZ1bmN0aW9uXG59O1xuXG52YXIgUFVUX0xJU1RFTkVSX1FVRVVFSU5HID0ge1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1dExpc3RlbmVyUXVldWUucmVzZXQoKTtcbiAgfSxcblxuICBjbG9zZTogZW1wdHlGdW5jdGlvblxufTtcblxuLyoqXG4gKiBFeGVjdXRlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBgVHJhbnNhY3Rpb25gIGluc3RhbmNlLiBDb25zaWRlciB0aGVzZSBhc1xuICogYmVpbmcgbWVtYmVyIG1ldGhvZHMsIGJ1dCB3aXRoIGFuIGltcGxpZWQgb3JkZXJpbmcgd2hpbGUgYmVpbmcgaXNvbGF0ZWQgZnJvbVxuICogZWFjaCBvdGhlci5cbiAqL1xudmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJTID0gW1xuICBQVVRfTElTVEVORVJfUVVFVUVJTkcsXG4gIE9OX0RPTV9SRUFEWV9RVUVVRUlOR1xuXTtcblxuLyoqXG4gKiBAY2xhc3MgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvblxuICogQHBhcmFtIHtib29sZWFufSByZW5kZXJUb1N0YXRpY01hcmt1cFxuICovXG5mdW5jdGlvbiBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uKHJlbmRlclRvU3RhdGljTWFya3VwKSB7XG4gIHRoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbiAgdGhpcy5yZW5kZXJUb1N0YXRpY01hcmt1cCA9IHJlbmRlclRvU3RhdGljTWFya3VwO1xuICB0aGlzLnJlYWN0TW91bnRSZWFkeSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKG51bGwpO1xuICB0aGlzLnB1dExpc3RlbmVyUXVldWUgPSBSZWFjdFB1dExpc3RlbmVyUXVldWUuZ2V0UG9vbGVkKCk7XG59XG5cbnZhciBNaXhpbiA9IHtcbiAgLyoqXG4gICAqIEBzZWUgVHJhbnNhY3Rpb25cbiAgICogQGFic3RyYWN0XG4gICAqIEBmaW5hbFxuICAgKiBAcmV0dXJuIHthcnJheX0gRW1wdHkgbGlzdCBvZiBvcGVyYXRpb24gd3JhcCBwcm9jZWVkdXJlcy5cbiAgICovXG4gIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgfSxcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUgdG8gY29sbGVjdCBgb25ET01SZWFkeWAgY2FsbGJhY2tzIHdpdGguXG4gICAqL1xuICBnZXRSZWFjdE1vdW50UmVhZHk6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeTtcbiAgfSxcblxuICBnZXRQdXRMaXN0ZW5lclF1ZXVlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wdXRMaXN0ZW5lclF1ZXVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciB0aGlzLCBhbmQgd2lsbCBpbnZva2UgdGhpcyBiZWZvcmUgYWxsb3dpbmcgdGhpc1xuICAgKiBpbnN0YW5jZSB0byBiZSByZXN1c2VkLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgQ2FsbGJhY2tRdWV1ZS5yZWxlYXNlKHRoaXMucmVhY3RNb3VudFJlYWR5KTtcbiAgICB0aGlzLnJlYWN0TW91bnRSZWFkeSA9IG51bGw7XG5cbiAgICBSZWFjdFB1dExpc3RlbmVyUXVldWUucmVsZWFzZSh0aGlzLnB1dExpc3RlbmVyUXVldWUpO1xuICAgIHRoaXMucHV0TGlzdGVuZXJRdWV1ZSA9IG51bGw7XG4gIH1cbn07XG5cblxuYXNzaWduKFxuICBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLnByb3RvdHlwZSxcbiAgVHJhbnNhY3Rpb24uTWl4aW4sXG4gIE1peGluXG4pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbik7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0VXBkYXRlUXVldWVcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdExpZmVDeWNsZSA9IHJlcXVpcmUoXCIuL1JlYWN0TGlmZUN5Y2xlXCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlTWFwXCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpIHtcbiAgaWYgKGludGVybmFsSW5zdGFuY2UgIT09IFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2UpIHtcbiAgICAvLyBJZiB3ZSdyZSBpbiBhIGNvbXBvbmVudFdpbGxNb3VudCBoYW5kbGVyLCBkb24ndCBlbnF1ZXVlIGEgcmVyZW5kZXJcbiAgICAvLyBiZWNhdXNlIFJlYWN0VXBkYXRlcyBhc3N1bWVzIHdlJ3JlIGluIGEgYnJvd3NlciBjb250ZXh0ICh3aGljaCBpc1xuICAgIC8vIHdyb25nIGZvciBzZXJ2ZXIgcmVuZGVyaW5nKSBhbmQgd2UncmUgYWJvdXQgdG8gZG8gYSByZW5kZXIgYW55d2F5LlxuICAgIC8vIFNlZSBidWcgaW4gIzE3NDAuXG4gICAgUmVhY3RVcGRhdGVzLmVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9PSBudWxsLFxuICAgICclcyguLi4pOiBDYW5ub3QgdXBkYXRlIGR1cmluZyBhbiBleGlzdGluZyBzdGF0ZSB0cmFuc2l0aW9uICcgK1xuICAgICcoc3VjaCBhcyB3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uICcgK1xuICAgICdvZiBwcm9wcyBhbmQgc3RhdGUuJyxcbiAgICBjYWxsZXJOYW1lXG4gICkgOiBpbnZhcmlhbnQoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9PSBudWxsKSk7XG5cbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlTWFwLmdldChwdWJsaWNJbnN0YW5jZSk7XG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIC8vIE9ubHkgd2FybiB3aGVuIHdlIGhhdmUgYSBjYWxsZXJOYW1lLiBPdGhlcndpc2Ugd2Ugc2hvdWxkIGJlIHNpbGVudC5cbiAgICAgIC8vIFdlJ3JlIHByb2JhYmx5IGNhbGxpbmcgZnJvbSBlbnF1ZXVlQ2FsbGJhY2suIFdlIGRvbid0IHdhbnQgdG8gd2FyblxuICAgICAgLy8gdGhlcmUgYmVjYXVzZSB3ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbGlmZWN5Y2xlIG1ldGhvZC5cbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAhY2FsbGVyTmFtZSxcbiAgICAgICAgJyVzKC4uLik6IENhbiBvbmx5IHVwZGF0ZSBhIG1vdW50ZWQgb3IgbW91bnRpbmcgY29tcG9uZW50LiAnICtcbiAgICAgICAgJ1RoaXMgdXN1YWxseSBtZWFucyB5b3UgY2FsbGVkICVzKCkgb24gYW4gdW5tb3VudGVkICcgK1xuICAgICAgICAnY29tcG9uZW50LiBUaGlzIGlzIGEgbm8tb3AuJyxcbiAgICAgICAgY2FsbGVyTmFtZSxcbiAgICAgICAgY2FsbGVyTmFtZVxuICAgICAgKSA6IG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChpbnRlcm5hbEluc3RhbmNlID09PSBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlVbm1vdW50aW5nSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBpbnRlcm5hbEluc3RhbmNlO1xufVxuXG4vKipcbiAqIFJlYWN0VXBkYXRlUXVldWUgYWxsb3dzIGZvciBzdGF0ZSB1cGRhdGVzIHRvIGJlIHNjaGVkdWxlZCBpbnRvIGEgbGF0ZXJcbiAqIHJlY29uY2lsaWF0aW9uIHN0ZXAuXG4gKi9cbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0ge1xuXG4gIC8qKlxuICAgKiBFbnF1ZXVlIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgcGVuZGluZyB1cGRhdGVzXG4gICAqIGhhdmUgcHJvY2Vzc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0byB1c2UgYXMgYHRoaXNgIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlQ2FsbGJhY2s6IGZ1bmN0aW9uKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaykge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicsXG4gICAgICAnZW5xdWV1ZUNhbGxiYWNrKC4uLik6IFlvdSBjYWxsZWQgYHNldFByb3BzYCwgYHJlcGxhY2VQcm9wc2AsICcgK1xuICAgICAgJ2BzZXRTdGF0ZWAsIGByZXBsYWNlU3RhdGVgLCBvciBgZm9yY2VVcGRhdGVgIHdpdGggYSBjYWxsYmFjayB0aGF0ICcgK1xuICAgICAgJ2lzblxcJ3QgY2FsbGFibGUuJ1xuICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSk7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UpO1xuXG4gICAgLy8gUHJldmlvdXNseSB3ZSB3b3VsZCB0aHJvdyBhbiBlcnJvciBpZiB3ZSBkaWRuJ3QgaGF2ZSBhbiBpbnRlcm5hbFxuICAgIC8vIGluc3RhbmNlLiBTaW5jZSB3ZSB3YW50IHRvIG1ha2UgaXQgYSBuby1vcCBpbnN0ZWFkLCB3ZSBtaXJyb3IgdGhlIHNhbWVcbiAgICAvLyBiZWhhdmlvciB3ZSBoYXZlIGluIG90aGVyIGVucXVldWUqIG1ldGhvZHMuXG4gICAgLy8gV2UgYWxzbyBuZWVkIHRvIGlnbm9yZSBjYWxsYmFja3MgaW4gY29tcG9uZW50V2lsbE1vdW50LiBTZWVcbiAgICAvLyBlbnF1ZXVlVXBkYXRlcy5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2UgfHxcbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA9PT0gUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5TW91bnRpbmdJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MpIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MgPSBbY2FsbGJhY2tdO1xuICAgIH1cbiAgICAvLyBUT0RPOiBUaGUgY2FsbGJhY2sgaGVyZSBpcyBpZ25vcmVkIHdoZW4gc2V0U3RhdGUgaXMgY2FsbGVkIGZyb21cbiAgICAvLyBjb21wb25lbnRXaWxsTW91bnQuIEVpdGhlciBmaXggaXQgb3IgZGlzYWxsb3cgZG9pbmcgc28gY29tcGxldGVseSBpblxuICAgIC8vIGZhdm9yIG9mIGdldEluaXRpYWxTdGF0ZS4gQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGRpc2FsbG93XG4gICAgLy8gY29tcG9uZW50V2lsbE1vdW50IGR1cmluZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICBlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbDogZnVuY3Rpb24oaW50ZXJuYWxJbnN0YW5jZSwgY2FsbGJhY2spIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ2VucXVldWVDYWxsYmFjayguLi4pOiBZb3UgY2FsbGVkIGBzZXRQcm9wc2AsIGByZXBsYWNlUHJvcHNgLCAnICtcbiAgICAgICdgc2V0U3RhdGVgLCBgcmVwbGFjZVN0YXRlYCwgb3IgYGZvcmNlVXBkYXRlYCB3aXRoIGEgY2FsbGJhY2sgdGhhdCAnICtcbiAgICAgICdpc25cXCd0IGNhbGxhYmxlLidcbiAgICApIDogaW52YXJpYW50KHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykpO1xuICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzKSB7XG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzID0gW2NhbGxiYWNrXTtcbiAgICB9XG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZFVwZGF0ZUNvbXBvbmVudGAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUoXG4gICAgICBwdWJsaWNJbnN0YW5jZSxcbiAgICAgICdmb3JjZVVwZGF0ZSdcbiAgICApO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gdHJ1ZTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbihwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSkge1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKFxuICAgICAgcHVibGljSW5zdGFuY2UsXG4gICAgICAncmVwbGFjZVN0YXRlJ1xuICAgICk7XG5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nU3RhdGVRdWV1ZSA9IFtjb21wbGV0ZVN0YXRlXTtcbiAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gdHJ1ZTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICogcHJvcGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNlIGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShcbiAgICAgIHB1YmxpY0luc3RhbmNlLFxuICAgICAgJ3NldFN0YXRlJ1xuICAgICk7XG5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcXVldWUgPVxuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ1N0YXRlUXVldWUgfHxcbiAgICAgIChpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nU3RhdGVRdWV1ZSA9IFtdKTtcbiAgICBxdWV1ZS5wdXNoKHBhcnRpYWxTdGF0ZSk7XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBwcm9wcy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsUHJvcHMgU3Vic2V0IG9mIHRoZSBuZXh0IHByb3BzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRQcm9wczogZnVuY3Rpb24ocHVibGljSW5zdGFuY2UsIHBhcnRpYWxQcm9wcykge1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKFxuICAgICAgcHVibGljSW5zdGFuY2UsXG4gICAgICAnc2V0UHJvcHMnXG4gICAgKTtcblxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9pc1RvcExldmVsLFxuICAgICAgJ3NldFByb3BzKC4uLik6IFlvdSBjYWxsZWQgYHNldFByb3BzYCBvbiBhICcgK1xuICAgICAgJ2NvbXBvbmVudCB3aXRoIGEgcGFyZW50LiBUaGlzIGlzIGFuIGFudGktcGF0dGVybiBzaW5jZSBwcm9wcyB3aWxsICcgK1xuICAgICAgJ2dldCByZWFjdGl2ZWx5IHVwZGF0ZWQgd2hlbiByZW5kZXJlZC4gSW5zdGVhZCwgY2hhbmdlIHRoZSBvd25lclxcJ3MgJyArXG4gICAgICAnYHJlbmRlcmAgbWV0aG9kIHRvIHBhc3MgdGhlIGNvcnJlY3QgdmFsdWUgYXMgcHJvcHMgdG8gdGhlIGNvbXBvbmVudCAnICtcbiAgICAgICd3aGVyZSBpdCBpcyBjcmVhdGVkLidcbiAgICApIDogaW52YXJpYW50KGludGVybmFsSW5zdGFuY2UuX2lzVG9wTGV2ZWwpKTtcblxuICAgIC8vIE1lcmdlIHdpdGggdGhlIHBlbmRpbmcgZWxlbWVudCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB3aXRoIGV4aXN0aW5nXG4gICAgLy8gZWxlbWVudCBwcm9wcy5cbiAgICB2YXIgZWxlbWVudCA9IGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50IHx8XG4gICAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcbiAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIGVsZW1lbnQucHJvcHMsIHBhcnRpYWxQcm9wcyk7XG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlUHJvcHMoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHNcbiAgICApO1xuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBwcm9wcy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBOZXcgcHJvcHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVJlcGxhY2VQcm9wczogZnVuY3Rpb24ocHVibGljSW5zdGFuY2UsIHByb3BzKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUoXG4gICAgICBwdWJsaWNJbnN0YW5jZSxcbiAgICAgICdyZXBsYWNlUHJvcHMnXG4gICAgKTtcblxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9pc1RvcExldmVsLFxuICAgICAgJ3JlcGxhY2VQcm9wcyguLi4pOiBZb3UgY2FsbGVkIGByZXBsYWNlUHJvcHNgIG9uIGEgJyArXG4gICAgICAnY29tcG9uZW50IHdpdGggYSBwYXJlbnQuIFRoaXMgaXMgYW4gYW50aS1wYXR0ZXJuIHNpbmNlIHByb3BzIHdpbGwgJyArXG4gICAgICAnZ2V0IHJlYWN0aXZlbHkgdXBkYXRlZCB3aGVuIHJlbmRlcmVkLiBJbnN0ZWFkLCBjaGFuZ2UgdGhlIG93bmVyXFwncyAnICtcbiAgICAgICdgcmVuZGVyYCBtZXRob2QgdG8gcGFzcyB0aGUgY29ycmVjdCB2YWx1ZSBhcyBwcm9wcyB0byB0aGUgY29tcG9uZW50ICcgK1xuICAgICAgJ3doZXJlIGl0IGlzIGNyZWF0ZWQuJ1xuICAgICkgOiBpbnZhcmlhbnQoaW50ZXJuYWxJbnN0YW5jZS5faXNUb3BMZXZlbCkpO1xuXG4gICAgLy8gTWVyZ2Ugd2l0aCB0aGUgcGVuZGluZyBlbGVtZW50IGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHdpdGggZXhpc3RpbmdcbiAgICAvLyBlbGVtZW50IHByb3BzLlxuICAgIHZhciBlbGVtZW50ID0gaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0VsZW1lbnQgfHxcbiAgICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50O1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZVByb3BzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHByb3BzXG4gICAgKTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgZW5xdWV1ZUVsZW1lbnRJbnRlcm5hbDogZnVuY3Rpb24oaW50ZXJuYWxJbnN0YW5jZSwgbmV3RWxlbWVudCkge1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50ID0gbmV3RWxlbWVudDtcbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RVcGRhdGVRdWV1ZTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JWY0dSaGRHVlJkV1YxWlM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRlZ3WkdGMFpWRjFaWFZsWEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1VtVmhZM1JNYVdabFEzbGpiR1VnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEV4cFptVkRlV05zWlZ3aUtUdGNiblpoY2lCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlYQ0lwTzF4dWRtRnlJRkpsWVdOMFJXeGxiV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJXeGxiV1Z1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRWx1YzNSaGJtTmxUV0Z3SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSSmJuTjBZVzVqWlUxaGNGd2lLVHRjYm5aaGNpQlNaV0ZqZEZWd1pHRjBaWE1nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZWd1pHRjBaWE5jSWlrN1hHNWNiblpoY2lCaGMzTnBaMjRnUFNCeVpYRjFhWEpsS0Z3aUxpOVBZbXBsWTNRdVlYTnphV2R1WENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUIzWVhKdWFXNW5JRDBnY21WeGRXbHlaU2hjSWk0dmQyRnlibWx1WjF3aUtUdGNibHh1Wm5WdVkzUnBiMjRnWlc1eGRXVjFaVlZ3WkdGMFpTaHBiblJsY201aGJFbHVjM1JoYm1ObEtTQjdYRzRnSUdsbUlDaHBiblJsY201aGJFbHVjM1JoYm1ObElDRTlQU0JTWldGamRFeHBabVZEZVdOc1pTNWpkWEp5Wlc1MGJIbE5iM1Z1ZEdsdVowbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ0x5OGdTV1lnZDJVbmNtVWdhVzRnWVNCamIyMXdiMjVsYm5SWGFXeHNUVzkxYm5RZ2FHRnVaR3hsY2l3Z1pHOXVKM1FnWlc1eGRXVjFaU0JoSUhKbGNtVnVaR1Z5WEc0Z0lDQWdMeThnWW1WallYVnpaU0JTWldGamRGVndaR0YwWlhNZ1lYTnpkVzFsY3lCM1pTZHlaU0JwYmlCaElHSnliM2R6WlhJZ1kyOXVkR1Y0ZENBb2QyaHBZMmdnYVhOY2JpQWdJQ0F2THlCM2NtOXVaeUJtYjNJZ2MyVnlkbVZ5SUhKbGJtUmxjbWx1WnlrZ1lXNWtJSGRsSjNKbElHRmliM1YwSUhSdklHUnZJR0VnY21WdVpHVnlJR0Z1ZVhkaGVTNWNiaUFnSUNBdkx5QlRaV1VnWW5WbklHbHVJQ014TnpRd0xseHVJQ0FnSUZKbFlXTjBWWEJrWVhSbGN5NWxibkYxWlhWbFZYQmtZWFJsS0dsdWRHVnlibUZzU1c1emRHRnVZMlVwTzF4dUlDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlHZGxkRWx1ZEdWeWJtRnNTVzV6ZEdGdVkyVlNaV0ZrZVVadmNsVndaR0YwWlNod2RXSnNhV05KYm5OMFlXNWpaU3dnWTJGc2JHVnlUbUZ0WlNrZ2UxeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUxtTjFjbkpsYm5RZ1BUMGdiblZzYkN4Y2JpQWdJQ0FuSlhNb0xpNHVLVG9nUTJGdWJtOTBJSFZ3WkdGMFpTQmtkWEpwYm1jZ1lXNGdaWGhwYzNScGJtY2djM1JoZEdVZ2RISmhibk5wZEdsdmJpQW5JQ3RjYmlBZ0lDQW5LSE4xWTJnZ1lYTWdkMmwwYUdsdUlHQnlaVzVrWlhKZ0tTNGdVbVZ1WkdWeUlHMWxkR2h2WkhNZ2MyaHZkV3hrSUdKbElHRWdjSFZ5WlNCbWRXNWpkR2x2YmlBbklDdGNiaUFnSUNBbmIyWWdjSEp2Y0hNZ1lXNWtJSE4wWVhSbExpY3NYRzRnSUNBZ1kyRnNiR1Z5VG1GdFpWeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUxtTjFjbkpsYm5RZ1BUMGdiblZzYkNrcE8xeHVYRzRnSUhaaGNpQnBiblJsY201aGJFbHVjM1JoYm1ObElEMGdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDNW5aWFFvY0hWaWJHbGpTVzV6ZEdGdVkyVXBPMXh1SUNCcFppQW9JV2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQXZMeUJQYm14NUlIZGhjbTRnZDJobGJpQjNaU0JvWVhabElHRWdZMkZzYkdWeVRtRnRaUzRnVDNSb1pYSjNhWE5sSUhkbElITm9iM1ZzWkNCaVpTQnphV3hsYm5RdVhHNGdJQ0FnSUNBdkx5QlhaU2R5WlNCd2NtOWlZV0pzZVNCallXeHNhVzVuSUdaeWIyMGdaVzV4ZFdWMVpVTmhiR3hpWVdOckxpQlhaU0JrYjI0bmRDQjNZVzUwSUhSdklIZGhjbTVjYmlBZ0lDQWdJQzh2SUhSb1pYSmxJR0psWTJGMWMyVWdkMlVnWVd4eVpXRmtlU0IzWVhKdVpXUWdabTl5SUhSb1pTQmpiM0p5WlhOd2IyNWthVzVuSUd4cFptVmplV05zWlNCdFpYUm9iMlF1WEc0Z0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdJV05oYkd4bGNrNWhiV1VzWEc0Z0lDQWdJQ0FnSUNjbGN5Z3VMaTRwT2lCRFlXNGdiMjVzZVNCMWNHUmhkR1VnWVNCdGIzVnVkR1ZrSUc5eUlHMXZkVzUwYVc1bklHTnZiWEJ2Ym1WdWRDNGdKeUFyWEc0Z0lDQWdJQ0FnSUNkVWFHbHpJSFZ6ZFdGc2JIa2diV1ZoYm5NZ2VXOTFJR05oYkd4bFpDQWxjeWdwSUc5dUlHRnVJSFZ1Ylc5MWJuUmxaQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0oyTnZiWEJ2Ym1WdWRDNGdWR2hwY3lCcGN5QmhJRzV2TFc5d0xpY3NYRzRnSUNBZ0lDQWdJR05oYkd4bGNrNWhiV1VzWEc0Z0lDQWdJQ0FnSUdOaGJHeGxjazVoYldWY2JpQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lIMWNibHh1SUNCcFppQW9hVzUwWlhKdVlXeEpibk4wWVc1alpTQTlQVDBnVW1WaFkzUk1hV1psUTNsamJHVXVZM1Z5Y21WdWRHeDVWVzV0YjNWdWRHbHVaMGx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYVc1MFpYSnVZV3hKYm5OMFlXNWpaVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlNaV0ZqZEZWd1pHRjBaVkYxWlhWbElHRnNiRzkzY3lCbWIzSWdjM1JoZEdVZ2RYQmtZWFJsY3lCMGJ5QmlaU0J6WTJobFpIVnNaV1FnYVc1MGJ5QmhJR3hoZEdWeVhHNGdLaUJ5WldOdmJtTnBiR2xoZEdsdmJpQnpkR1Z3TGx4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlNBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1JXNXhkV1YxWlNCaElHTmhiR3hpWVdOcklIUm9ZWFFnZDJsc2JDQmlaU0JsZUdWamRYUmxaQ0JoWm5SbGNpQmhiR3dnZEdobElIQmxibVJwYm1jZ2RYQmtZWFJsYzF4dUlDQWdLaUJvWVhabElIQnliMk5sYzNObFpDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFTnNZWE56ZlNCd2RXSnNhV05KYm5OMFlXNWpaU0JVYUdVZ2FXNXpkR0Z1WTJVZ2RHOGdkWE5sSUdGeklHQjBhR2x6WUNCamIyNTBaWGgwTGx4dUlDQWdLaUJBY0dGeVlXMGdlejltZFc1amRHbHZibjBnWTJGc2JHSmhZMnNnUTJGc2JHVmtJR0ZtZEdWeUlITjBZWFJsSUdseklIVndaR0YwWldRdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1pXNXhkV1YxWlVOaGJHeGlZV05yT2lCbWRXNWpkR2x2Ymlod2RXSnNhV05KYm5OMFlXNWpaU3dnWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdkSGx3Wlc5bUlHTmhiR3hpWVdOcklEMDlQU0FuWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ0FnSjJWdWNYVmxkV1ZEWVd4c1ltRmpheWd1TGk0cE9pQlpiM1VnWTJGc2JHVmtJR0J6WlhSUWNtOXdjMkFzSUdCeVpYQnNZV05sVUhKdmNITmdMQ0FuSUN0Y2JpQWdJQ0FnSUNkZ2MyVjBVM1JoZEdWZ0xDQmdjbVZ3YkdGalpWTjBZWFJsWUN3Z2IzSWdZR1p2Y21ObFZYQmtZWFJsWUNCM2FYUm9JR0VnWTJGc2JHSmhZMnNnZEdoaGRDQW5JQ3RjYmlBZ0lDQWdJQ2RwYzI1Y1hDZDBJR05oYkd4aFlteGxMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hSNWNHVnZaaUJqWVd4c1ltRmpheUE5UFQwZ0oyWjFibU4wYVc5dUp5a3BPMXh1SUNBZ0lIWmhjaUJwYm5SbGNtNWhiRWx1YzNSaGJtTmxJRDBnWjJWMFNXNTBaWEp1WVd4SmJuTjBZVzVqWlZKbFlXUjVSbTl5VlhCa1lYUmxLSEIxWW14cFkwbHVjM1JoYm1ObEtUdGNibHh1SUNBZ0lDOHZJRkJ5WlhacGIzVnpiSGtnZDJVZ2QyOTFiR1FnZEdoeWIzY2dZVzRnWlhKeWIzSWdhV1lnZDJVZ1pHbGtiaWQwSUdoaGRtVWdZVzRnYVc1MFpYSnVZV3hjYmlBZ0lDQXZMeUJwYm5OMFlXNWpaUzRnVTJsdVkyVWdkMlVnZDJGdWRDQjBieUJ0WVd0bElHbDBJR0VnYm04dGIzQWdhVzV6ZEdWaFpDd2dkMlVnYldseWNtOXlJSFJvWlNCellXMWxYRzRnSUNBZ0x5OGdZbVZvWVhacGIzSWdkMlVnYUdGMlpTQnBiaUJ2ZEdobGNpQmxibkYxWlhWbEtpQnRaWFJvYjJSekxseHVJQ0FnSUM4dklGZGxJR0ZzYzI4Z2JtVmxaQ0IwYnlCcFoyNXZjbVVnWTJGc2JHSmhZMnR6SUdsdUlHTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWRDNGdVMlZsWEc0Z0lDQWdMeThnWlc1eGRXVjFaVlZ3WkdGMFpYTXVYRzRnSUNBZ2FXWWdLQ0ZwYm5SbGNtNWhiRWx1YzNSaGJtTmxJSHg4WEc0Z0lDQWdJQ0FnSUdsdWRHVnlibUZzU1c1emRHRnVZMlVnUFQwOUlGSmxZV04wVEdsbVpVTjVZMnhsTG1OMWNuSmxiblJzZVUxdmRXNTBhVzVuU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blEyRnNiR0poWTJ0ektTQjdYRzRnSUNBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blEyRnNiR0poWTJ0ekxuQjFjMmdvWTJGc2JHSmhZMnNwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blEyRnNiR0poWTJ0eklEMGdXMk5oYkd4aVlXTnJYVHRjYmlBZ0lDQjlYRzRnSUNBZ0x5OGdWRTlFVHpvZ1ZHaGxJR05oYkd4aVlXTnJJR2hsY21VZ2FYTWdhV2R1YjNKbFpDQjNhR1Z1SUhObGRGTjBZWFJsSUdseklHTmhiR3hsWkNCbWNtOXRYRzRnSUNBZ0x5OGdZMjl0Y0c5dVpXNTBWMmxzYkUxdmRXNTBMaUJGYVhSb1pYSWdabWw0SUdsMElHOXlJR1JwYzJGc2JHOTNJR1J2YVc1bklITnZJR052YlhCc1pYUmxiSGtnYVc1Y2JpQWdJQ0F2THlCbVlYWnZjaUJ2WmlCblpYUkpibWwwYVdGc1UzUmhkR1V1SUVGc2RHVnlibUYwYVhabGJIa3NJSGRsSUdOaGJpQmthWE5oYkd4dmQxeHVJQ0FnSUM4dklHTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWRDQmtkWEpwYm1jZ2MyVnlkbVZ5TFhOcFpHVWdjbVZ1WkdWeWFXNW5MbHh1SUNBZ0lHVnVjWFZsZFdWVmNHUmhkR1VvYVc1MFpYSnVZV3hKYm5OMFlXNWpaU2s3WEc0Z0lIMHNYRzVjYmlBZ1pXNXhkV1YxWlVOaGJHeGlZV05yU1c1MFpYSnVZV3c2SUdaMWJtTjBhVzl1S0dsdWRHVnlibUZzU1c1emRHRnVZMlVzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJSFI1Y0dWdlppQmpZV3hzWW1GamF5QTlQVDBnSjJaMWJtTjBhVzl1Snl4Y2JpQWdJQ0FnSUNkbGJuRjFaWFZsUTJGc2JHSmhZMnNvTGk0dUtUb2dXVzkxSUdOaGJHeGxaQ0JnYzJWMFVISnZjSE5nTENCZ2NtVndiR0ZqWlZCeWIzQnpZQ3dnSnlBclhHNGdJQ0FnSUNBbllITmxkRk4wWVhSbFlDd2dZSEpsY0d4aFkyVlRkR0YwWldBc0lHOXlJR0JtYjNKalpWVndaR0YwWldBZ2QybDBhQ0JoSUdOaGJHeGlZV05ySUhSb1lYUWdKeUFyWEc0Z0lDQWdJQ0FuYVhOdVhGd25kQ0JqWVd4c1lXSnNaUzRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoMGVYQmxiMllnWTJGc2JHSmhZMnNnUFQwOUlDZG1kVzVqZEdsdmJpY3BLVHRjYmlBZ0lDQnBaaUFvYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY0dWdVpHbHVaME5oYkd4aVlXTnJjeWtnZTF4dUlDQWdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY0dWdVpHbHVaME5oYkd4aVlXTnJjeTV3ZFhOb0tHTmhiR3hpWVdOcktUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY0dWdVpHbHVaME5oYkd4aVlXTnJjeUE5SUZ0allXeHNZbUZqYTEwN1hHNGdJQ0FnZlZ4dUlDQWdJR1Z1Y1hWbGRXVlZjR1JoZEdVb2FXNTBaWEp1WVd4SmJuTjBZVzVqWlNrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVp2Y21ObGN5QmhiaUIxY0dSaGRHVXVJRlJvYVhNZ2MyaHZkV3hrSUc5dWJIa2dZbVVnYVc1MmIydGxaQ0IzYUdWdUlHbDBJR2x6SUd0dWIzZHVJSGRwZEdoY2JpQWdJQ29nWTJWeWRHRnBiblI1SUhSb1lYUWdkMlVnWVhKbElDb3FibTkwS2lvZ2FXNGdZU0JFVDAwZ2RISmhibk5oWTNScGIyNHVYRzRnSUNBcVhHNGdJQ0FxSUZsdmRTQnRZWGtnZDJGdWRDQjBieUJqWVd4c0lIUm9hWE1nZDJobGJpQjViM1VnYTI1dmR5QjBhR0YwSUhOdmJXVWdaR1ZsY0dWeUlHRnpjR1ZqZENCdlppQjBhR1ZjYmlBZ0lDb2dZMjl0Y0c5dVpXNTBKM01nYzNSaGRHVWdhR0Z6SUdOb1lXNW5aV1FnWW5WMElHQnpaWFJUZEdGMFpXQWdkMkZ6SUc1dmRDQmpZV3hzWldRdVhHNGdJQ0FxWEc0Z0lDQXFJRlJvYVhNZ2QybHNiQ0J1YjNRZ2FXNTJiMnRsSUdCemFHOTFiR1JWY0dSaGRHVkRiMjF3YjI1bGJuUmdMQ0JpZFhRZ2FYUWdkMmxzYkNCcGJuWnZhMlZjYmlBZ0lDb2dZR052YlhCdmJtVnVkRmRwYkd4VmNHUmhkR1ZnSUdGdVpDQmdZMjl0Y0c5dVpXNTBSR2xrVlhCa1lYUmxZQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRU5zWVhOemZTQndkV0pzYVdOSmJuTjBZVzVqWlNCVWFHVWdhVzV6ZEdGdVkyVWdkR2hoZENCemFHOTFiR1FnY21WeVpXNWtaWEl1WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnWlc1eGRXVjFaVVp2Y21ObFZYQmtZWFJsT2lCbWRXNWpkR2x2Ymlod2RXSnNhV05KYm5OMFlXNWpaU2tnZTF4dUlDQWdJSFpoY2lCcGJuUmxjbTVoYkVsdWMzUmhibU5sSUQwZ1oyVjBTVzUwWlhKdVlXeEpibk4wWVc1alpWSmxZV1I1Um05eVZYQmtZWFJsS0Z4dUlDQWdJQ0FnY0hWaWJHbGpTVzV6ZEdGdVkyVXNYRzRnSUNBZ0lDQW5abTl5WTJWVmNHUmhkR1VuWEc0Z0lDQWdLVHRjYmx4dUlDQWdJR2xtSUNnaGFXNTBaWEp1WVd4SmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmx4dUlDQWdJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYM0JsYm1ScGJtZEdiM0pqWlZWd1pHRjBaU0E5SUhSeWRXVTdYRzVjYmlBZ0lDQmxibkYxWlhWbFZYQmtZWFJsS0dsdWRHVnlibUZzU1c1emRHRnVZMlVwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWEJzWVdObGN5QmhiR3dnYjJZZ2RHaGxJSE4wWVhSbExpQkJiSGRoZVhNZ2RYTmxJSFJvYVhNZ2IzSWdZSE5sZEZOMFlYUmxZQ0IwYnlCdGRYUmhkR1VnYzNSaGRHVXVYRzRnSUNBcUlGbHZkU0J6YUc5MWJHUWdkSEpsWVhRZ1lIUm9hWE11YzNSaGRHVmdJR0Z6SUdsdGJYVjBZV0pzWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dWR2hsY21VZ2FYTWdibThnWjNWaGNtRnVkR1ZsSUhSb1lYUWdZSFJvYVhNdWMzUmhkR1ZnSUhkcGJHd2dZbVVnYVcxdFpXUnBZWFJsYkhrZ2RYQmtZWFJsWkN3Z2MyOWNiaUFnSUNvZ1lXTmpaWE56YVc1bklHQjBhR2x6TG5OMFlYUmxZQ0JoWm5SbGNpQmpZV3hzYVc1bklIUm9hWE1nYldWMGFHOWtJRzFoZVNCeVpYUjFjbTRnZEdobElHOXNaQ0IyWVd4MVpTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFTnNZWE56ZlNCd2RXSnNhV05KYm5OMFlXNWpaU0JVYUdVZ2FXNXpkR0Z1WTJVZ2RHaGhkQ0J6YUc5MWJHUWdjbVZ5Wlc1a1pYSXVYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCamIyMXdiR1YwWlZOMFlYUmxJRTVsZUhRZ2MzUmhkR1V1WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnWlc1eGRXVjFaVkpsY0d4aFkyVlRkR0YwWlRvZ1puVnVZM1JwYjI0b2NIVmliR2xqU1c1emRHRnVZMlVzSUdOdmJYQnNaWFJsVTNSaGRHVXBJSHRjYmlBZ0lDQjJZWElnYVc1MFpYSnVZV3hKYm5OMFlXNWpaU0E5SUdkbGRFbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJWU1pXRmtlVVp2Y2xWd1pHRjBaU2hjYmlBZ0lDQWdJSEIxWW14cFkwbHVjM1JoYm1ObExGeHVJQ0FnSUNBZ0ozSmxjR3hoWTJWVGRHRjBaU2RjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdhV1lnS0NGcGJuUmxjbTVoYkVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNWZjR1Z1WkdsdVoxTjBZWFJsVVhWbGRXVWdQU0JiWTI5dGNHeGxkR1ZUZEdGMFpWMDdYRzRnSUNBZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmNHVnVaR2x1WjFKbGNHeGhZMlZUZEdGMFpTQTlJSFJ5ZFdVN1hHNWNiaUFnSUNCbGJuRjFaWFZsVlhCa1lYUmxLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVFpYUnpJR0VnYzNWaWMyVjBJRzltSUhSb1pTQnpkR0YwWlM0Z1ZHaHBjeUJ2Ym14NUlHVjRhWE4wY3lCaVpXTmhkWE5sSUY5d1pXNWthVzVuVTNSaGRHVWdhWE5jYmlBZ0lDb2dhVzUwWlhKdVlXd3VJRlJvYVhNZ2NISnZkbWxrWlhNZ1lTQnRaWEpuYVc1bklITjBjbUYwWldkNUlIUm9ZWFFnYVhNZ2JtOTBJR0YyWVdsc1lXSnNaU0IwYnlCa1pXVndYRzRnSUNBcUlIQnliM0JsY25ScFpYTWdkMmhwWTJnZ2FYTWdZMjl1Wm5WemFXNW5MaUJVVDBSUE9pQkZlSEJ2YzJVZ2NHVnVaR2x1WjFOMFlYUmxJRzl5SUdSdmJpZDBJSFZ6WlNCcGRGeHVJQ0FnS2lCa2RYSnBibWNnZEdobElHMWxjbWRsTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTJ4aGMzTjlJSEIxWW14cFkwbHVjM1JoYm1ObElGUm9aU0JwYm5OMFlXNWpaU0IwYUdGMElITm9iM1ZzWkNCeVpYSmxibVJsY2k1Y2JpQWdJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSEJoY25ScFlXeFRkR0YwWlNCT1pYaDBJSEJoY25ScFlXd2djM1JoZEdVZ2RHOGdZbVVnYldWeVoyVmtJSGRwZEdnZ2MzUmhkR1V1WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnWlc1eGRXVjFaVk5sZEZOMFlYUmxPaUJtZFc1amRHbHZiaWh3ZFdKc2FXTkpibk4wWVc1alpTd2djR0Z5ZEdsaGJGTjBZWFJsS1NCN1hHNGdJQ0FnZG1GeUlHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVZ1BTQm5aWFJKYm5SbGNtNWhiRWx1YzNSaGJtTmxVbVZoWkhsR2IzSlZjR1JoZEdVb1hHNGdJQ0FnSUNCd2RXSnNhV05KYm5OMFlXNWpaU3hjYmlBZ0lDQWdJQ2R6WlhSVGRHRjBaU2RjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdhV1lnS0NGcGJuUmxjbTVoYkVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkbUZ5SUhGMVpYVmxJRDFjYmlBZ0lDQWdJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYM0JsYm1ScGJtZFRkR0YwWlZGMVpYVmxJSHg4WEc0Z0lDQWdJQ0FvYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY0dWdVpHbHVaMU4wWVhSbFVYVmxkV1VnUFNCYlhTazdYRzRnSUNBZ2NYVmxkV1V1Y0hWemFDaHdZWEowYVdGc1UzUmhkR1VwTzF4dVhHNGdJQ0FnWlc1eGRXVjFaVlZ3WkdGMFpTaHBiblJsY201aGJFbHVjM1JoYm1ObEtUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVTJWMGN5QmhJSE4xWW5ObGRDQnZaaUIwYUdVZ2NISnZjSE11WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JEYkdGemMzMGdjSFZpYkdsalNXNXpkR0Z1WTJVZ1ZHaGxJR2x1YzNSaGJtTmxJSFJvWVhRZ2MyaHZkV3hrSUhKbGNtVnVaR1Z5TGx4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdjR0Z5ZEdsaGJGQnliM0J6SUZOMVluTmxkQ0J2WmlCMGFHVWdibVY0ZENCd2NtOXdjeTVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JsYm5GMVpYVmxVMlYwVUhKdmNITTZJR1oxYm1OMGFXOXVLSEIxWW14cFkwbHVjM1JoYm1ObExDQndZWEowYVdGc1VISnZjSE1wSUh0Y2JpQWdJQ0IyWVhJZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlNBOUlHZGxkRWx1ZEdWeWJtRnNTVzV6ZEdGdVkyVlNaV0ZrZVVadmNsVndaR0YwWlNoY2JpQWdJQ0FnSUhCMVlteHBZMGx1YzNSaGJtTmxMRnh1SUNBZ0lDQWdKM05sZEZCeWIzQnpKMXh1SUNBZ0lDazdYRzVjYmlBZ0lDQnBaaUFvSVdsdWRHVnlibUZzU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzVjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmFYTlViM0JNWlhabGJDeGNiaUFnSUNBZ0lDZHpaWFJRY205d2N5Z3VMaTRwT2lCWmIzVWdZMkZzYkdWa0lHQnpaWFJRY205d2MyQWdiMjRnWVNBbklDdGNiaUFnSUNBZ0lDZGpiMjF3YjI1bGJuUWdkMmwwYUNCaElIQmhjbVZ1ZEM0Z1ZHaHBjeUJwY3lCaGJpQmhiblJwTFhCaGRIUmxjbTRnYzJsdVkyVWdjSEp2Y0hNZ2QybHNiQ0FuSUN0Y2JpQWdJQ0FnSUNkblpYUWdjbVZoWTNScGRtVnNlU0IxY0dSaGRHVmtJSGRvWlc0Z2NtVnVaR1Z5WldRdUlFbHVjM1JsWVdRc0lHTm9ZVzVuWlNCMGFHVWdiM2R1WlhKY1hDZHpJQ2NnSzF4dUlDQWdJQ0FnSjJCeVpXNWtaWEpnSUcxbGRHaHZaQ0IwYnlCd1lYTnpJSFJvWlNCamIzSnlaV04wSUhaaGJIVmxJR0Z6SUhCeWIzQnpJSFJ2SUhSb1pTQmpiMjF3YjI1bGJuUWdKeUFyWEc0Z0lDQWdJQ0FuZDJobGNtVWdhWFFnYVhNZ1kzSmxZWFJsWkM0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHBiblJsY201aGJFbHVjM1JoYm1ObExsOXBjMVJ2Y0V4bGRtVnNLU2s3WEc1Y2JpQWdJQ0F2THlCTlpYSm5aU0IzYVhSb0lIUm9aU0J3Wlc1a2FXNW5JR1ZzWlcxbGJuUWdhV1lnYVhRZ1pYaHBjM1J6TENCdmRHaGxjbmRwYzJVZ2QybDBhQ0JsZUdsemRHbHVaMXh1SUNBZ0lDOHZJR1ZzWlcxbGJuUWdjSEp2Y0hNdVhHNGdJQ0FnZG1GeUlHVnNaVzFsYm5RZ1BTQnBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blJXeGxiV1Z1ZENCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNWZZM1Z5Y21WdWRFVnNaVzFsYm5RN1hHNGdJQ0FnZG1GeUlIQnliM0J6SUQwZ1lYTnphV2R1S0h0OUxDQmxiR1Z0Wlc1MExuQnliM0J6TENCd1lYSjBhV0ZzVUhKdmNITXBPMXh1SUNBZ0lHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVdVgzQmxibVJwYm1kRmJHVnRaVzUwSUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU5zYjI1bFFXNWtVbVZ3YkdGalpWQnliM0J6S0Z4dUlDQWdJQ0FnWld4bGJXVnVkQ3hjYmlBZ0lDQWdJSEJ5YjNCelhHNGdJQ0FnS1R0Y2JseHVJQ0FnSUdWdWNYVmxkV1ZWY0dSaGRHVW9hVzUwWlhKdVlXeEpibk4wWVc1alpTazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGNHeGhZMlZ6SUdGc2JDQnZaaUIwYUdVZ2NISnZjSE11WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JEYkdGemMzMGdjSFZpYkdsalNXNXpkR0Z1WTJVZ1ZHaGxJR2x1YzNSaGJtTmxJSFJvWVhRZ2MyaHZkV3hrSUhKbGNtVnVaR1Z5TGx4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdjSEp2Y0hNZ1RtVjNJSEJ5YjNCekxseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHVnVjWFZsZFdWU1pYQnNZV05sVUhKdmNITTZJR1oxYm1OMGFXOXVLSEIxWW14cFkwbHVjM1JoYm1ObExDQndjbTl3Y3lrZ2UxeHVJQ0FnSUhaaGNpQnBiblJsY201aGJFbHVjM1JoYm1ObElEMGdaMlYwU1c1MFpYSnVZV3hKYm5OMFlXNWpaVkpsWVdSNVJtOXlWWEJrWVhSbEtGeHVJQ0FnSUNBZ2NIVmliR2xqU1c1emRHRnVZMlVzWEc0Z0lDQWdJQ0FuY21Wd2JHRmpaVkJ5YjNCekoxeHVJQ0FnSUNrN1hHNWNiaUFnSUNCcFppQW9JV2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmYVhOVWIzQk1aWFpsYkN4Y2JpQWdJQ0FnSUNkeVpYQnNZV05sVUhKdmNITW9MaTR1S1RvZ1dXOTFJR05oYkd4bFpDQmdjbVZ3YkdGalpWQnliM0J6WUNCdmJpQmhJQ2NnSzF4dUlDQWdJQ0FnSjJOdmJYQnZibVZ1ZENCM2FYUm9JR0VnY0dGeVpXNTBMaUJVYUdseklHbHpJR0Z1SUdGdWRHa3RjR0YwZEdWeWJpQnphVzVqWlNCd2NtOXdjeUIzYVd4c0lDY2dLMXh1SUNBZ0lDQWdKMmRsZENCeVpXRmpkR2wyWld4NUlIVndaR0YwWldRZ2QyaGxiaUJ5Wlc1a1pYSmxaQzRnU1c1emRHVmhaQ3dnWTJoaGJtZGxJSFJvWlNCdmQyNWxjbHhjSjNNZ0p5QXJYRzRnSUNBZ0lDQW5ZSEpsYm1SbGNtQWdiV1YwYUc5a0lIUnZJSEJoYzNNZ2RHaGxJR052Y25KbFkzUWdkbUZzZFdVZ1lYTWdjSEp2Y0hNZ2RHOGdkR2hsSUdOdmJYQnZibVZ1ZENBbklDdGNiaUFnSUNBZ0lDZDNhR1Z5WlNCcGRDQnBjeUJqY21WaGRHVmtMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0dsdWRHVnlibUZzU1c1emRHRnVZMlV1WDJselZHOXdUR1YyWld3cEtUdGNibHh1SUNBZ0lDOHZJRTFsY21kbElIZHBkR2dnZEdobElIQmxibVJwYm1jZ1pXeGxiV1Z1ZENCcFppQnBkQ0JsZUdsemRITXNJRzkwYUdWeWQybHpaU0IzYVhSb0lHVjRhWE4wYVc1blhHNGdJQ0FnTHk4Z1pXeGxiV1Z1ZENCd2NtOXdjeTVjYmlBZ0lDQjJZWElnWld4bGJXVnVkQ0E5SUdsdWRHVnlibUZzU1c1emRHRnVZMlV1WDNCbGJtUnBibWRGYkdWdFpXNTBJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTGw5amRYSnlaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blJXeGxiV1Z1ZENBOUlGSmxZV04wUld4bGJXVnVkQzVqYkc5dVpVRnVaRkpsY0d4aFkyVlFjbTl3Y3loY2JpQWdJQ0FnSUdWc1pXMWxiblFzWEc0Z0lDQWdJQ0J3Y205d2MxeHVJQ0FnSUNrN1hHNWNiaUFnSUNCbGJuRjFaWFZsVlhCa1lYUmxLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBPMXh1SUNCOUxGeHVYRzRnSUdWdWNYVmxkV1ZGYkdWdFpXNTBTVzUwWlhKdVlXdzZJR1oxYm1OMGFXOXVLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXNJRzVsZDBWc1pXMWxiblFwSUh0Y2JpQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbDl3Wlc1a2FXNW5SV3hsYldWdWRDQTlJRzVsZDBWc1pXMWxiblE3WEc0Z0lDQWdaVzV4ZFdWMVpWVndaR0YwWlNocGJuUmxjbTVoYkVsdWMzUmhibU5sS1R0Y2JpQWdmVnh1WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOMFZYQmtZWFJsVVhWbGRXVTdYRzRpWFgwPSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RVcGRhdGVzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FsbGJhY2tRdWV1ZSA9IHJlcXVpcmUoXCIuL0NhbGxiYWNrUXVldWVcIik7XG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdFJlY29uY2lsZXJcIik7XG52YXIgVHJhbnNhY3Rpb24gPSByZXF1aXJlKFwiLi9UcmFuc2FjdGlvblwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgZGlydHlDb21wb25lbnRzID0gW107XG52YXIgYXNhcENhbGxiYWNrUXVldWUgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpO1xudmFyIGFzYXBFbnF1ZXVlZCA9IGZhbHNlO1xuXG52YXIgYmF0Y2hpbmdTdHJhdGVneSA9IG51bGw7XG5cbmZ1bmN0aW9uIGVuc3VyZUluamVjdGVkKCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uICYmIGJhdGNoaW5nU3RyYXRlZ3ksXG4gICAgJ1JlYWN0VXBkYXRlczogbXVzdCBpbmplY3QgYSByZWNvbmNpbGUgdHJhbnNhY3Rpb24gY2xhc3MgYW5kIGJhdGNoaW5nICcgK1xuICAgICdzdHJhdGVneSdcbiAgKSA6IGludmFyaWFudChSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiAmJiBiYXRjaGluZ1N0cmF0ZWd5KSk7XG59XG5cbnZhciBORVNURURfVVBEQVRFUyA9IHtcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggPSBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoO1xuICB9LFxuICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoICE9PSBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBBZGRpdGlvbmFsIHVwZGF0ZXMgd2VyZSBlbnF1ZXVlZCBieSBjb21wb25lbnREaWRVcGRhdGUgaGFuZGxlcnMgb3JcbiAgICAgIC8vIHNpbWlsYXI7IGJlZm9yZSBvdXIgb3duIFVQREFURV9RVUVVRUlORyB3cmFwcGVyIGNsb3Nlcywgd2Ugd2FudCB0byBydW5cbiAgICAgIC8vIHRoZXNlIG5ldyB1cGRhdGVzIHNvIHRoYXQgaWYgQSdzIGNvbXBvbmVudERpZFVwZGF0ZSBjYWxscyBzZXRTdGF0ZSBvblxuICAgICAgLy8gQiwgQiB3aWxsIHVwZGF0ZSBiZWZvcmUgdGhlIGNhbGxiYWNrIEEncyB1cGRhdGVyIHByb3ZpZGVkIHdoZW4gY2FsbGluZ1xuICAgICAgLy8gc2V0U3RhdGUuXG4gICAgICBkaXJ0eUNvbXBvbmVudHMuc3BsaWNlKDAsIHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoKTtcbiAgICAgIGZsdXNoQmF0Y2hlZFVwZGF0ZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlydHlDb21wb25lbnRzLmxlbmd0aCA9IDA7XG4gICAgfVxuICB9XG59O1xuXG52YXIgVVBEQVRFX1FVRVVFSU5HID0ge1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNhbGxiYWNrUXVldWUucmVzZXQoKTtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2FsbGJhY2tRdWV1ZS5ub3RpZnlBbGwoKTtcbiAgfVxufTtcblxudmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJTID0gW05FU1RFRF9VUERBVEVTLCBVUERBVEVfUVVFVUVJTkddO1xuXG5mdW5jdGlvbiBSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uKCkge1xuICB0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG4gIHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoID0gbnVsbDtcbiAgdGhpcy5jYWxsYmFja1F1ZXVlID0gQ2FsbGJhY2tRdWV1ZS5nZXRQb29sZWQoKTtcbiAgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbiA9XG4gICAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCk7XG59XG5cbmFzc2lnbihcbiAgUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbi5wcm90b3R5cGUsXG4gIFRyYW5zYWN0aW9uLk1peGluLCB7XG4gIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgfSxcblxuICBkZXN0cnVjdG9yOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCA9IG51bGw7XG4gICAgQ2FsbGJhY2tRdWV1ZS5yZWxlYXNlKHRoaXMuY2FsbGJhY2tRdWV1ZSk7XG4gICAgdGhpcy5jYWxsYmFja1F1ZXVlID0gbnVsbDtcbiAgICBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24pO1xuICAgIHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24gPSBudWxsO1xuICB9LFxuXG4gIHBlcmZvcm06IGZ1bmN0aW9uKG1ldGhvZCwgc2NvcGUsIGEpIHtcbiAgICAvLyBFc3NlbnRpYWxseSBjYWxscyBgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbi5wZXJmb3JtKG1ldGhvZCwgc2NvcGUsIGEpYFxuICAgIC8vIHdpdGggdGhpcyB0cmFuc2FjdGlvbidzIHdyYXBwZXJzIGFyb3VuZCBpdC5cbiAgICByZXR1cm4gVHJhbnNhY3Rpb24uTWl4aW4ucGVyZm9ybS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24ucGVyZm9ybSxcbiAgICAgIHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24sXG4gICAgICBtZXRob2QsXG4gICAgICBzY29wZSxcbiAgICAgIGFcbiAgICApO1xuICB9XG59KTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24pO1xuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyhjYWxsYmFjaywgYSwgYiwgYywgZCkge1xuICBlbnN1cmVJbmplY3RlZCgpO1xuICBiYXRjaGluZ1N0cmF0ZWd5LmJhdGNoZWRVcGRhdGVzKGNhbGxiYWNrLCBhLCBiLCBjLCBkKTtcbn1cblxuLyoqXG4gKiBBcnJheSBjb21wYXJhdG9yIGZvciBSZWFjdENvbXBvbmVudHMgYnkgbW91bnQgb3JkZXJpbmcuXG4gKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gYzEgZmlyc3QgY29tcG9uZW50IHlvdSdyZSBjb21wYXJpbmdcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGMyIHNlY29uZCBjb21wb25lbnQgeW91J3JlIGNvbXBhcmluZ1xuICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm4gdmFsdWUgdXNhYmxlIGJ5IEFycmF5LnByb3RvdHlwZS5zb3J0KCkuXG4gKi9cbmZ1bmN0aW9uIG1vdW50T3JkZXJDb21wYXJhdG9yKGMxLCBjMikge1xuICByZXR1cm4gYzEuX21vdW50T3JkZXIgLSBjMi5fbW91bnRPcmRlcjtcbn1cblxuZnVuY3Rpb24gcnVuQmF0Y2hlZFVwZGF0ZXModHJhbnNhY3Rpb24pIHtcbiAgdmFyIGxlbiA9IHRyYW5zYWN0aW9uLmRpcnR5Q29tcG9uZW50c0xlbmd0aDtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBsZW4gPT09IGRpcnR5Q29tcG9uZW50cy5sZW5ndGgsXG4gICAgJ0V4cGVjdGVkIGZsdXNoIHRyYW5zYWN0aW9uXFwncyBzdG9yZWQgZGlydHktY29tcG9uZW50cyBsZW5ndGggKCVzKSB0byAnICtcbiAgICAnbWF0Y2ggZGlydHktY29tcG9uZW50cyBhcnJheSBsZW5ndGggKCVzKS4nLFxuICAgIGxlbixcbiAgICBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoXG4gICkgOiBpbnZhcmlhbnQobGVuID09PSBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoKSk7XG5cbiAgLy8gU2luY2UgcmVjb25jaWxpbmcgYSBjb21wb25lbnQgaGlnaGVyIGluIHRoZSBvd25lciBoaWVyYXJjaHkgdXN1YWxseSAobm90XG4gIC8vIGFsd2F5cyAtLSBzZWUgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkpIHdpbGwgcmVjb25jaWxlIGNoaWxkcmVuLCByZWNvbmNpbGVcbiAgLy8gdGhlbSBiZWZvcmUgdGhlaXIgY2hpbGRyZW4gYnkgc29ydGluZyB0aGUgYXJyYXkuXG4gIGRpcnR5Q29tcG9uZW50cy5zb3J0KG1vdW50T3JkZXJDb21wYXJhdG9yKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgLy8gSWYgYSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGJlZm9yZSBwZW5kaW5nIGNoYW5nZXMgYXBwbHksIGl0IHdpbGwgc3RpbGxcbiAgICAvLyBiZSBoZXJlLCBidXQgd2UgYXNzdW1lIHRoYXQgaXQgaGFzIGNsZWFyZWQgaXRzIF9wZW5kaW5nQ2FsbGJhY2tzIGFuZFxuICAgIC8vIHRoYXQgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5IGlzIGEgbm9vcC5cbiAgICB2YXIgY29tcG9uZW50ID0gZGlydHlDb21wb25lbnRzW2ldO1xuXG4gICAgLy8gSWYgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5IGhhcHBlbnMgdG8gZW5xdWV1ZSBhbnkgbmV3IHVwZGF0ZXMsIHdlXG4gICAgLy8gc2hvdWxkbid0IGV4ZWN1dGUgdGhlIGNhbGxiYWNrcyB1bnRpbCB0aGUgbmV4dCByZW5kZXIgaGFwcGVucywgc29cbiAgICAvLyBzdGFzaCB0aGUgY2FsbGJhY2tzIGZpcnN0XG4gICAgdmFyIGNhbGxiYWNrcyA9IGNvbXBvbmVudC5fcGVuZGluZ0NhbGxiYWNrcztcbiAgICBjb21wb25lbnQuX3BlbmRpbmdDYWxsYmFja3MgPSBudWxsO1xuXG4gICAgUmVhY3RSZWNvbmNpbGVyLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeShcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIHRyYW5zYWN0aW9uLnJlY29uY2lsZVRyYW5zYWN0aW9uXG4gICAgKTtcblxuICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2FsbGJhY2tzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLmNhbGxiYWNrUXVldWUuZW5xdWV1ZShcbiAgICAgICAgICBjYWxsYmFja3Nbal0sXG4gICAgICAgICAgY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGZsdXNoQmF0Y2hlZFVwZGF0ZXMgPSBmdW5jdGlvbigpIHtcbiAgLy8gUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbidzIHdyYXBwZXJzIHdpbGwgY2xlYXIgdGhlIGRpcnR5Q29tcG9uZW50c1xuICAvLyBhcnJheSBhbmQgcGVyZm9ybSBhbnkgdXBkYXRlcyBlbnF1ZXVlZCBieSBtb3VudC1yZWFkeSBoYW5kbGVycyAoaS5lLixcbiAgLy8gY29tcG9uZW50RGlkVXBkYXRlKSBidXQgd2UgbmVlZCB0byBjaGVjayBoZXJlIHRvbyBpbiBvcmRlciB0byBjYXRjaFxuICAvLyB1cGRhdGVzIGVucXVldWVkIGJ5IHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgYXNhcCBjYWxscy5cbiAgd2hpbGUgKGRpcnR5Q29tcG9uZW50cy5sZW5ndGggfHwgYXNhcEVucXVldWVkKSB7XG4gICAgaWYgKGRpcnR5Q29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgIHZhciB0cmFuc2FjdGlvbiA9IFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCk7XG4gICAgICB0cmFuc2FjdGlvbi5wZXJmb3JtKHJ1bkJhdGNoZWRVcGRhdGVzLCBudWxsLCB0cmFuc2FjdGlvbik7XG4gICAgICBSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLnJlbGVhc2UodHJhbnNhY3Rpb24pO1xuICAgIH1cblxuICAgIGlmIChhc2FwRW5xdWV1ZWQpIHtcbiAgICAgIGFzYXBFbnF1ZXVlZCA9IGZhbHNlO1xuICAgICAgdmFyIHF1ZXVlID0gYXNhcENhbGxiYWNrUXVldWU7XG4gICAgICBhc2FwQ2FsbGJhY2tRdWV1ZSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKCk7XG4gICAgICBxdWV1ZS5ub3RpZnlBbGwoKTtcbiAgICAgIENhbGxiYWNrUXVldWUucmVsZWFzZShxdWV1ZSk7XG4gICAgfVxuICB9XG59O1xuZmx1c2hCYXRjaGVkVXBkYXRlcyA9IFJlYWN0UGVyZi5tZWFzdXJlKFxuICAnUmVhY3RVcGRhdGVzJyxcbiAgJ2ZsdXNoQmF0Y2hlZFVwZGF0ZXMnLFxuICBmbHVzaEJhdGNoZWRVcGRhdGVzXG4pO1xuXG4vKipcbiAqIE1hcmsgYSBjb21wb25lbnQgYXMgbmVlZGluZyBhIHJlcmVuZGVyLCBhZGRpbmcgYW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gYVxuICogbGlzdCBvZiBmdW5jdGlvbnMgd2hpY2ggd2lsbCBiZSBleGVjdXRlZCBvbmNlIHRoZSByZXJlbmRlciBvY2N1cnMuXG4gKi9cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUoY29tcG9uZW50KSB7XG4gIGVuc3VyZUluamVjdGVkKCk7XG5cbiAgLy8gVmFyaW91cyBwYXJ0cyBvZiBvdXIgY29kZSAoc3VjaCBhcyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdzXG4gIC8vIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQpIGFzc3VtZSB0aGF0IGNhbGxzIHRvIHJlbmRlciBhcmVuJ3QgbmVzdGVkO1xuICAvLyB2ZXJpZnkgdGhhdCB0aGF0J3MgdGhlIGNhc2UuIChUaGlzIGlzIGNhbGxlZCBieSBlYWNoIHRvcC1sZXZlbCB1cGRhdGVcbiAgLy8gZnVuY3Rpb24sIGxpa2Ugc2V0UHJvcHMsIHNldFN0YXRlLCBmb3JjZVVwZGF0ZSwgZXRjLjsgY3JlYXRpb24gYW5kXG4gIC8vIGRlc3RydWN0aW9uIG9mIHRvcC1sZXZlbCBjb21wb25lbnRzIGlzIGd1YXJkZWQgaW4gUmVhY3RNb3VudC4pXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCxcbiAgICAnZW5xdWV1ZVVwZGF0ZSgpOiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzICcgK1xuICAgICdhbmQgc3RhdGU7IHRyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzIG5vdCAnICtcbiAgICAnYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluICcgK1xuICAgICdjb21wb25lbnREaWRVcGRhdGUuJ1xuICApIDogbnVsbCk7XG5cbiAgaWYgKCFiYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzKSB7XG4gICAgYmF0Y2hpbmdTdHJhdGVneS5iYXRjaGVkVXBkYXRlcyhlbnF1ZXVlVXBkYXRlLCBjb21wb25lbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGRpcnR5Q29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG59XG5cbi8qKlxuICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRvIGJlIHJ1biBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJhdGNoaW5nIGN5Y2xlLiBUaHJvd3NcbiAqIGlmIG5vIHVwZGF0ZXMgYXJlIGN1cnJlbnRseSBiZWluZyBwZXJmb3JtZWQuXG4gKi9cbmZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBiYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzLFxuICAgICdSZWFjdFVwZGF0ZXMuYXNhcDogQ2FuXFwndCBlbnF1ZXVlIGFuIGFzYXAgY2FsbGJhY2sgaW4gYSBjb250ZXh0IHdoZXJlJyArXG4gICAgJ3VwZGF0ZXMgYXJlIG5vdCBiZWluZyBiYXRjaGVkLidcbiAgKSA6IGludmFyaWFudChiYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzKSk7XG4gIGFzYXBDYWxsYmFja1F1ZXVlLmVucXVldWUoY2FsbGJhY2ssIGNvbnRleHQpO1xuICBhc2FwRW5xdWV1ZWQgPSB0cnVlO1xufVxuXG52YXIgUmVhY3RVcGRhdGVzSW5qZWN0aW9uID0ge1xuICBpbmplY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjogZnVuY3Rpb24oUmVjb25jaWxlVHJhbnNhY3Rpb24pIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgUmVjb25jaWxlVHJhbnNhY3Rpb24sXG4gICAgICAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYSByZWNvbmNpbGUgdHJhbnNhY3Rpb24gY2xhc3MnXG4gICAgKSA6IGludmFyaWFudChSZWNvbmNpbGVUcmFuc2FjdGlvbikpO1xuICAgIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uID0gUmVjb25jaWxlVHJhbnNhY3Rpb247XG4gIH0sXG5cbiAgaW5qZWN0QmF0Y2hpbmdTdHJhdGVneTogZnVuY3Rpb24oX2JhdGNoaW5nU3RyYXRlZ3kpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgX2JhdGNoaW5nU3RyYXRlZ3ksXG4gICAgICAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYSBiYXRjaGluZyBzdHJhdGVneSdcbiAgICApIDogaW52YXJpYW50KF9iYXRjaGluZ1N0cmF0ZWd5KSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHR5cGVvZiBfYmF0Y2hpbmdTdHJhdGVneS5iYXRjaGVkVXBkYXRlcyA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdSZWFjdFVwZGF0ZXM6IG11c3QgcHJvdmlkZSBhIGJhdGNoZWRVcGRhdGVzKCkgZnVuY3Rpb24nXG4gICAgKSA6IGludmFyaWFudCh0eXBlb2YgX2JhdGNoaW5nU3RyYXRlZ3kuYmF0Y2hlZFVwZGF0ZXMgPT09ICdmdW5jdGlvbicpKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIF9iYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzID09PSAnYm9vbGVhbicsXG4gICAgICAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYW4gaXNCYXRjaGluZ1VwZGF0ZXMgYm9vbGVhbiBhdHRyaWJ1dGUnXG4gICAgKSA6IGludmFyaWFudCh0eXBlb2YgX2JhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMgPT09ICdib29sZWFuJykpO1xuICAgIGJhdGNoaW5nU3RyYXRlZ3kgPSBfYmF0Y2hpbmdTdHJhdGVneTtcbiAgfVxufTtcblxudmFyIFJlYWN0VXBkYXRlcyA9IHtcbiAgLyoqXG4gICAqIFJlYWN0IHJlZmVyZW5jZXMgYFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb25gIHVzaW5nIHRoaXMgcHJvcGVydHkgaW4gb3JkZXJcbiAgICogdG8gYWxsb3cgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjogbnVsbCxcblxuICBiYXRjaGVkVXBkYXRlczogYmF0Y2hlZFVwZGF0ZXMsXG4gIGVucXVldWVVcGRhdGU6IGVucXVldWVVcGRhdGUsXG4gIGZsdXNoQmF0Y2hlZFVwZGF0ZXM6IGZsdXNoQmF0Y2hlZFVwZGF0ZXMsXG4gIGluamVjdGlvbjogUmVhY3RVcGRhdGVzSW5qZWN0aW9uLFxuICBhc2FwOiBhc2FwXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0VXBkYXRlcztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JWY0dSaGRHVnpMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRGVndaR0YwWlhOY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQkRZV3hzWW1GamExRjFaWFZsSUQwZ2NtVnhkV2x5WlNoY0lpNHZRMkZzYkdKaFkydFJkV1YxWlZ3aUtUdGNiblpoY2lCUWIyOXNaV1JEYkdGemN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFCdmIyeGxaRU5zWVhOelhDSXBPMXh1ZG1GeUlGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkRkWEp5Wlc1MFQzZHVaWEpjSWlrN1hHNTJZWElnVW1WaFkzUlFaWEptSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSUVpYSm1YQ0lwTzF4dWRtRnlJRkpsWVdOMFVtVmpiMjVqYVd4bGNpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVbVZqYjI1amFXeGxjbHdpS1R0Y2JuWmhjaUJVY21GdWMyRmpkR2x2YmlBOUlISmxjWFZwY21Vb1hDSXVMMVJ5WVc1ellXTjBhVzl1WENJcE8xeHVYRzUyWVhJZ1lYTnphV2R1SUQwZ2NtVnhkV2x5WlNoY0lpNHZUMkpxWldOMExtRnpjMmxuYmx3aUtUdGNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQmthWEowZVVOdmJYQnZibVZ1ZEhNZ1BTQmJYVHRjYm5aaGNpQmhjMkZ3UTJGc2JHSmhZMnRSZFdWMVpTQTlJRU5oYkd4aVlXTnJVWFZsZFdVdVoyVjBVRzl2YkdWa0tDazdYRzUyWVhJZ1lYTmhjRVZ1Y1hWbGRXVmtJRDBnWm1Gc2MyVTdYRzVjYm5aaGNpQmlZWFJqYUdsdVoxTjBjbUYwWldkNUlEMGdiblZzYkR0Y2JseHVablZ1WTNScGIyNGdaVzV6ZFhKbFNXNXFaV04wWldRb0tTQjdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdVbVZoWTNSVmNHUmhkR1Z6TGxKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjRnSmlZZ1ltRjBZMmhwYm1kVGRISmhkR1ZuZVN4Y2JpQWdJQ0FuVW1WaFkzUlZjR1JoZEdWek9pQnRkWE4wSUdsdWFtVmpkQ0JoSUhKbFkyOXVZMmxzWlNCMGNtRnVjMkZqZEdsdmJpQmpiR0Z6Y3lCaGJtUWdZbUYwWTJocGJtY2dKeUFyWEc0Z0lDQWdKM04wY21GMFpXZDVKMXh1SUNBcElEb2dhVzUyWVhKcFlXNTBLRkpsWVdOMFZYQmtZWFJsY3k1U1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1SUNZbUlHSmhkR05vYVc1blUzUnlZWFJsWjNrcEtUdGNibjFjYmx4dWRtRnlJRTVGVTFSRlJGOVZVRVJCVkVWVElEMGdlMXh1SUNCcGJtbDBhV0ZzYVhwbE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjBhR2x6TG1ScGNuUjVRMjl0Y0c5dVpXNTBjMHhsYm1kMGFDQTlJR1JwY25SNVEyOXRjRzl1Wlc1MGN5NXNaVzVuZEdnN1hHNGdJSDBzWEc0Z0lHTnNiM05sT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCcFppQW9kR2hwY3k1a2FYSjBlVU52YlhCdmJtVnVkSE5NWlc1bmRHZ2dJVDA5SUdScGNuUjVRMjl0Y0c5dVpXNTBjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJQzh2SUVGa1pHbDBhVzl1WVd3Z2RYQmtZWFJsY3lCM1pYSmxJR1Z1Y1hWbGRXVmtJR0o1SUdOdmJYQnZibVZ1ZEVScFpGVndaR0YwWlNCb1lXNWtiR1Z5Y3lCdmNseHVJQ0FnSUNBZ0x5OGdjMmx0YVd4aGNqc2dZbVZtYjNKbElHOTFjaUJ2ZDI0Z1ZWQkVRVlJGWDFGVlJWVkZTVTVISUhkeVlYQndaWElnWTJ4dmMyVnpMQ0IzWlNCM1lXNTBJSFJ2SUhKMWJseHVJQ0FnSUNBZ0x5OGdkR2hsYzJVZ2JtVjNJSFZ3WkdGMFpYTWdjMjhnZEdoaGRDQnBaaUJCSjNNZ1kyOXRjRzl1Wlc1MFJHbGtWWEJrWVhSbElHTmhiR3h6SUhObGRGTjBZWFJsSUc5dVhHNGdJQ0FnSUNBdkx5QkNMQ0JDSUhkcGJHd2dkWEJrWVhSbElHSmxabTl5WlNCMGFHVWdZMkZzYkdKaFkyc2dRU2R6SUhWd1pHRjBaWElnY0hKdmRtbGtaV1FnZDJobGJpQmpZV3hzYVc1blhHNGdJQ0FnSUNBdkx5QnpaWFJUZEdGMFpTNWNiaUFnSUNBZ0lHUnBjblI1UTI5dGNHOXVaVzUwY3k1emNHeHBZMlVvTUN3Z2RHaHBjeTVrYVhKMGVVTnZiWEJ2Ym1WdWRITk1aVzVuZEdncE8xeHVJQ0FnSUNBZ1pteDFjMmhDWVhSamFHVmtWWEJrWVhSbGN5Z3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCa2FYSjBlVU52YlhCdmJtVnVkSE11YkdWdVozUm9JRDBnTUR0Y2JpQWdJQ0I5WEc0Z0lIMWNibjA3WEc1Y2JuWmhjaUJWVUVSQlZFVmZVVlZGVlVWSlRrY2dQU0I3WEc0Z0lHbHVhWFJwWVd4cGVtVTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSFJvYVhNdVkyRnNiR0poWTJ0UmRXVjFaUzV5WlhObGRDZ3BPMXh1SUNCOUxGeHVJQ0JqYkc5elpUb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1allXeHNZbUZqYTFGMVpYVmxMbTV2ZEdsbWVVRnNiQ2dwTzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnVkZKQlRsTkJRMVJKVDA1ZlYxSkJVRkJGVWxNZ1BTQmJUa1ZUVkVWRVgxVlFSRUZVUlZNc0lGVlFSRUZVUlY5UlZVVlZSVWxPUjEwN1hHNWNibVoxYm1OMGFXOXVJRkpsWVdOMFZYQmtZWFJsYzBac2RYTm9WSEpoYm5OaFkzUnBiMjRvS1NCN1hHNGdJSFJvYVhNdWNtVnBibWwwYVdGc2FYcGxWSEpoYm5OaFkzUnBiMjRvS1R0Y2JpQWdkR2hwY3k1a2FYSjBlVU52YlhCdmJtVnVkSE5NWlc1bmRHZ2dQU0J1ZFd4c08xeHVJQ0IwYUdsekxtTmhiR3hpWVdOclVYVmxkV1VnUFNCRFlXeHNZbUZqYTFGMVpYVmxMbWRsZEZCdmIyeGxaQ2dwTzF4dUlDQjBhR2x6TG5KbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUlEMWNiaUFnSUNCU1pXRmpkRlZ3WkdGMFpYTXVVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpNW5aWFJRYjI5c1pXUW9LVHRjYm4xY2JseHVZWE56YVdkdUtGeHVJQ0JTWldGamRGVndaR0YwWlhOR2JIVnphRlJ5WVc1ellXTjBhVzl1TG5CeWIzUnZkSGx3WlN4Y2JpQWdWSEpoYm5OaFkzUnBiMjR1VFdsNGFXNHNJSHRjYmlBZ1oyVjBWSEpoYm5OaFkzUnBiMjVYY21Gd2NHVnljem9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJRlJTUVU1VFFVTlVTVTlPWDFkU1FWQlFSVkpUTzF4dUlDQjlMRnh1WEc0Z0lHUmxjM1J5ZFdOMGIzSTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSFJvYVhNdVpHbHlkSGxEYjIxd2IyNWxiblJ6VEdWdVozUm9JRDBnYm5Wc2JEdGNiaUFnSUNCRFlXeHNZbUZqYTFGMVpYVmxMbkpsYkdWaGMyVW9kR2hwY3k1allXeHNZbUZqYTFGMVpYVmxLVHRjYmlBZ0lDQjBhR2x6TG1OaGJHeGlZV05yVVhWbGRXVWdQU0J1ZFd4c08xeHVJQ0FnSUZKbFlXTjBWWEJrWVhSbGN5NVNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUxuSmxiR1ZoYzJVb2RHaHBjeTV5WldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2YmlrN1hHNGdJQ0FnZEdocGN5NXlaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZiaUE5SUc1MWJHdzdYRzRnSUgwc1hHNWNiaUFnY0dWeVptOXliVG9nWm5WdVkzUnBiMjRvYldWMGFHOWtMQ0J6WTI5d1pTd2dZU2tnZTF4dUlDQWdJQzh2SUVWemMyVnVkR2xoYkd4NUlHTmhiR3h6SUdCMGFHbHpMbkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1TG5CbGNtWnZjbTBvYldWMGFHOWtMQ0J6WTI5d1pTd2dZU2xnWEc0Z0lDQWdMeThnZDJsMGFDQjBhR2x6SUhSeVlXNXpZV04wYVc5dUozTWdkM0poY0hCbGNuTWdZWEp2ZFc1a0lHbDBMbHh1SUNBZ0lISmxkSFZ5YmlCVWNtRnVjMkZqZEdsdmJpNU5hWGhwYmk1d1pYSm1iM0p0TG1OaGJHd29YRzRnSUNBZ0lDQjBhR2x6TEZ4dUlDQWdJQ0FnZEdocGN5NXlaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZiaTV3WlhKbWIzSnRMRnh1SUNBZ0lDQWdkR2hwY3k1eVpXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpeGNiaUFnSUNBZ0lHMWxkR2h2WkN4Y2JpQWdJQ0FnSUhOamIzQmxMRnh1SUNBZ0lDQWdZVnh1SUNBZ0lDazdYRzRnSUgxY2JuMHBPMXh1WEc1UWIyOXNaV1JEYkdGemN5NWhaR1JRYjI5c2FXNW5WRzhvVW1WaFkzUlZjR1JoZEdWelJteDFjMmhVY21GdWMyRmpkR2x2YmlrN1hHNWNibVoxYm1OMGFXOXVJR0poZEdOb1pXUlZjR1JoZEdWektHTmhiR3hpWVdOckxDQmhMQ0JpTENCakxDQmtLU0I3WEc0Z0lHVnVjM1Z5WlVsdWFtVmpkR1ZrS0NrN1hHNGdJR0poZEdOb2FXNW5VM1J5WVhSbFoza3VZbUYwWTJobFpGVndaR0YwWlhNb1kyRnNiR0poWTJzc0lHRXNJR0lzSUdNc0lHUXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFRnljbUY1SUdOdmJYQmhjbUYwYjNJZ1ptOXlJRkpsWVdOMFEyOXRjRzl1Wlc1MGN5QmllU0J0YjNWdWRDQnZjbVJsY21sdVp5NWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCak1TQm1hWEp6ZENCamIyMXdiMjVsYm5RZ2VXOTFKM0psSUdOdmJYQmhjbWx1WjF4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ1l6SWdjMlZqYjI1a0lHTnZiWEJ2Ym1WdWRDQjViM1VuY21VZ1kyOXRjR0Z5YVc1blhHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJRkpsZEhWeWJpQjJZV3gxWlNCMWMyRmliR1VnWW5rZ1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5OdmNuUW9LUzVjYmlBcUwxeHVablZ1WTNScGIyNGdiVzkxYm5SUGNtUmxja052YlhCaGNtRjBiM0lvWXpFc0lHTXlLU0I3WEc0Z0lISmxkSFZ5YmlCak1TNWZiVzkxYm5SUGNtUmxjaUF0SUdNeUxsOXRiM1Z1ZEU5eVpHVnlPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnlkVzVDWVhSamFHVmtWWEJrWVhSbGN5aDBjbUZ1YzJGamRHbHZiaWtnZTF4dUlDQjJZWElnYkdWdUlEMGdkSEpoYm5OaFkzUnBiMjR1WkdseWRIbERiMjF3YjI1bGJuUnpUR1Z1WjNSb08xeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lHeGxiaUE5UFQwZ1pHbHlkSGxEYjIxd2IyNWxiblJ6TG14bGJtZDBhQ3hjYmlBZ0lDQW5SWGh3WldOMFpXUWdabXgxYzJnZ2RISmhibk5oWTNScGIyNWNYQ2R6SUhOMGIzSmxaQ0JrYVhKMGVTMWpiMjF3YjI1bGJuUnpJR3hsYm1kMGFDQW9KWE1wSUhSdklDY2dLMXh1SUNBZ0lDZHRZWFJqYUNCa2FYSjBlUzFqYjIxd2IyNWxiblJ6SUdGeWNtRjVJR3hsYm1kMGFDQW9KWE1wTGljc1hHNGdJQ0FnYkdWdUxGeHVJQ0FnSUdScGNuUjVRMjl0Y0c5dVpXNTBjeTVzWlc1bmRHaGNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaHNaVzRnUFQwOUlHUnBjblI1UTI5dGNHOXVaVzUwY3k1c1pXNW5kR2dwS1R0Y2JseHVJQ0F2THlCVGFXNWpaU0J5WldOdmJtTnBiR2x1WnlCaElHTnZiWEJ2Ym1WdWRDQm9hV2RvWlhJZ2FXNGdkR2hsSUc5M2JtVnlJR2hwWlhKaGNtTm9lU0IxYzNWaGJHeDVJQ2h1YjNSY2JpQWdMeThnWVd4M1lYbHpJQzB0SUhObFpTQnphRzkxYkdSRGIyMXdiMjVsYm5SVmNHUmhkR1VvS1NrZ2QybHNiQ0J5WldOdmJtTnBiR1VnWTJocGJHUnlaVzRzSUhKbFkyOXVZMmxzWlZ4dUlDQXZMeUIwYUdWdElHSmxabTl5WlNCMGFHVnBjaUJqYUdsc1pISmxiaUJpZVNCemIzSjBhVzVuSUhSb1pTQmhjbkpoZVM1Y2JpQWdaR2x5ZEhsRGIyMXdiMjVsYm5SekxuTnZjblFvYlc5MWJuUlBjbVJsY2tOdmJYQmhjbUYwYjNJcE8xeHVYRzRnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z2JHVnVPeUJwS3lzcElIdGNiaUFnSUNBdkx5QkpaaUJoSUdOdmJYQnZibVZ1ZENCcGN5QjFibTF2ZFc1MFpXUWdZbVZtYjNKbElIQmxibVJwYm1jZ1kyaGhibWRsY3lCaGNIQnNlU3dnYVhRZ2QybHNiQ0J6ZEdsc2JGeHVJQ0FnSUM4dklHSmxJR2hsY21Vc0lHSjFkQ0IzWlNCaGMzTjFiV1VnZEdoaGRDQnBkQ0JvWVhNZ1kyeGxZWEpsWkNCcGRITWdYM0JsYm1ScGJtZERZV3hzWW1GamEzTWdZVzVrWEc0Z0lDQWdMeThnZEdoaGRDQndaWEptYjNKdFZYQmtZWFJsU1daT1pXTmxjM05oY25rZ2FYTWdZU0J1YjI5d0xseHVJQ0FnSUhaaGNpQmpiMjF3YjI1bGJuUWdQU0JrYVhKMGVVTnZiWEJ2Ym1WdWRITmJhVjA3WEc1Y2JpQWdJQ0F2THlCSlppQndaWEptYjNKdFZYQmtZWFJsU1daT1pXTmxjM05oY25rZ2FHRndjR1Z1Y3lCMGJ5QmxibkYxWlhWbElHRnVlU0J1WlhjZ2RYQmtZWFJsY3l3Z2QyVmNiaUFnSUNBdkx5QnphRzkxYkdSdUozUWdaWGhsWTNWMFpTQjBhR1VnWTJGc2JHSmhZMnR6SUhWdWRHbHNJSFJvWlNCdVpYaDBJSEpsYm1SbGNpQm9ZWEJ3Wlc1ekxDQnpiMXh1SUNBZ0lDOHZJSE4wWVhOb0lIUm9aU0JqWVd4c1ltRmphM01nWm1seWMzUmNiaUFnSUNCMllYSWdZMkZzYkdKaFkydHpJRDBnWTI5dGNHOXVaVzUwTGw5d1pXNWthVzVuUTJGc2JHSmhZMnR6TzF4dUlDQWdJR052YlhCdmJtVnVkQzVmY0dWdVpHbHVaME5oYkd4aVlXTnJjeUE5SUc1MWJHdzdYRzVjYmlBZ0lDQlNaV0ZqZEZKbFkyOXVZMmxzWlhJdWNHVnlabTl5YlZWd1pHRjBaVWxtVG1WalpYTnpZWEo1S0Z4dUlDQWdJQ0FnWTI5dGNHOXVaVzUwTEZ4dUlDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0dWNtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNWNiaUFnSUNBcE8xeHVYRzRnSUNBZ2FXWWdLR05oYkd4aVlXTnJjeWtnZTF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYWlBOUlEQTdJR29nUENCallXeHNZbUZqYTNNdWJHVnVaM1JvT3lCcUt5c3BJSHRjYmlBZ0lDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0dVkyRnNiR0poWTJ0UmRXVjFaUzVsYm5GMVpYVmxLRnh1SUNBZ0lDQWdJQ0FnSUdOaGJHeGlZV05yYzF0cVhTeGNiaUFnSUNBZ0lDQWdJQ0JqYjIxd2IyNWxiblF1WjJWMFVIVmliR2xqU1c1emRHRnVZMlVvS1Z4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dVhHNTJZWElnWm14MWMyaENZWFJqYUdWa1ZYQmtZWFJsY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNBdkx5QlNaV0ZqZEZWd1pHRjBaWE5HYkhWemFGUnlZVzV6WVdOMGFXOXVKM01nZDNKaGNIQmxjbk1nZDJsc2JDQmpiR1ZoY2lCMGFHVWdaR2x5ZEhsRGIyMXdiMjVsYm5SelhHNGdJQzh2SUdGeWNtRjVJR0Z1WkNCd1pYSm1iM0p0SUdGdWVTQjFjR1JoZEdWeklHVnVjWFZsZFdWa0lHSjVJRzF2ZFc1MExYSmxZV1I1SUdoaGJtUnNaWEp6SUNocExtVXVMRnh1SUNBdkx5QmpiMjF3YjI1bGJuUkVhV1JWY0dSaGRHVXBJR0oxZENCM1pTQnVaV1ZrSUhSdklHTm9aV05ySUdobGNtVWdkRzl2SUdsdUlHOXlaR1Z5SUhSdklHTmhkR05vWEc0Z0lDOHZJSFZ3WkdGMFpYTWdaVzV4ZFdWMVpXUWdZbmtnYzJWMFUzUmhkR1VnWTJGc2JHSmhZMnR6SUdGdVpDQmhjMkZ3SUdOaGJHeHpMbHh1SUNCM2FHbHNaU0FvWkdseWRIbERiMjF3YjI1bGJuUnpMbXhsYm1kMGFDQjhmQ0JoYzJGd1JXNXhkV1YxWldRcElIdGNiaUFnSUNCcFppQW9aR2x5ZEhsRGIyMXdiMjVsYm5SekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ2RtRnlJSFJ5WVc1ellXTjBhVzl1SUQwZ1VtVmhZM1JWY0dSaGRHVnpSbXgxYzJoVWNtRnVjMkZqZEdsdmJpNW5aWFJRYjI5c1pXUW9LVHRjYmlBZ0lDQWdJSFJ5WVc1ellXTjBhVzl1TG5CbGNtWnZjbTBvY25WdVFtRjBZMmhsWkZWd1pHRjBaWE1zSUc1MWJHd3NJSFJ5WVc1ellXTjBhVzl1S1R0Y2JpQWdJQ0FnSUZKbFlXTjBWWEJrWVhSbGMwWnNkWE5vVkhKaGJuTmhZM1JwYjI0dWNtVnNaV0Z6WlNoMGNtRnVjMkZqZEdsdmJpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLR0Z6WVhCRmJuRjFaWFZsWkNrZ2UxeHVJQ0FnSUNBZ1lYTmhjRVZ1Y1hWbGRXVmtJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQjJZWElnY1hWbGRXVWdQU0JoYzJGd1EyRnNiR0poWTJ0UmRXVjFaVHRjYmlBZ0lDQWdJR0Z6WVhCRFlXeHNZbUZqYTFGMVpYVmxJRDBnUTJGc2JHSmhZMnRSZFdWMVpTNW5aWFJRYjI5c1pXUW9LVHRjYmlBZ0lDQWdJSEYxWlhWbExtNXZkR2xtZVVGc2JDZ3BPMXh1SUNBZ0lDQWdRMkZzYkdKaFkydFJkV1YxWlM1eVpXeGxZWE5sS0hGMVpYVmxLVHRjYmlBZ0lDQjlYRzRnSUgxY2JuMDdYRzVtYkhWemFFSmhkR05vWldSVmNHUmhkR1Z6SUQwZ1VtVmhZM1JRWlhKbUxtMWxZWE4xY21Vb1hHNGdJQ2RTWldGamRGVndaR0YwWlhNbkxGeHVJQ0FuWm14MWMyaENZWFJqYUdWa1ZYQmtZWFJsY3ljc1hHNGdJR1pzZFhOb1FtRjBZMmhsWkZWd1pHRjBaWE5jYmlrN1hHNWNiaThxS2x4dUlDb2dUV0Z5YXlCaElHTnZiWEJ2Ym1WdWRDQmhjeUJ1WldWa2FXNW5JR0VnY21WeVpXNWtaWElzSUdGa1pHbHVaeUJoYmlCdmNIUnBiMjVoYkNCallXeHNZbUZqYXlCMGJ5QmhYRzRnS2lCc2FYTjBJRzltSUdaMWJtTjBhVzl1Y3lCM2FHbGphQ0IzYVd4c0lHSmxJR1Y0WldOMWRHVmtJRzl1WTJVZ2RHaGxJSEpsY21WdVpHVnlJRzlqWTNWeWN5NWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1pXNXhkV1YxWlZWd1pHRjBaU2hqYjIxd2IyNWxiblFwSUh0Y2JpQWdaVzV6ZFhKbFNXNXFaV04wWldRb0tUdGNibHh1SUNBdkx5QldZWEpwYjNWeklIQmhjblJ6SUc5bUlHOTFjaUJqYjJSbElDaHpkV05vSUdGeklGSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwSjNOY2JpQWdMeThnWDNKbGJtUmxjbFpoYkdsa1lYUmxaRU52YlhCdmJtVnVkQ2tnWVhOemRXMWxJSFJvWVhRZ1kyRnNiSE1nZEc4Z2NtVnVaR1Z5SUdGeVpXNG5kQ0J1WlhOMFpXUTdYRzRnSUM4dklIWmxjbWxtZVNCMGFHRjBJSFJvWVhRbmN5QjBhR1VnWTJGelpTNGdLRlJvYVhNZ2FYTWdZMkZzYkdWa0lHSjVJR1ZoWTJnZ2RHOXdMV3hsZG1Wc0lIVndaR0YwWlZ4dUlDQXZMeUJtZFc1amRHbHZiaXdnYkdsclpTQnpaWFJRY205d2N5d2djMlYwVTNSaGRHVXNJR1p2Y21ObFZYQmtZWFJsTENCbGRHTXVPeUJqY21WaGRHbHZiaUJoYm1SY2JpQWdMeThnWkdWemRISjFZM1JwYjI0Z2IyWWdkRzl3TFd4bGRtVnNJR052YlhCdmJtVnVkSE1nYVhNZ1ozVmhjbVJsWkNCcGJpQlNaV0ZqZEUxdmRXNTBMaWxjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSXVZM1Z5Y21WdWRDQTlQU0J1ZFd4c0xGeHVJQ0FnSUNkbGJuRjFaWFZsVlhCa1lYUmxLQ2s2SUZKbGJtUmxjaUJ0WlhSb2IyUnpJSE5vYjNWc1pDQmlaU0JoSUhCMWNtVWdablZ1WTNScGIyNGdiMllnY0hKdmNITWdKeUFyWEc0Z0lDQWdKMkZ1WkNCemRHRjBaVHNnZEhKcFoyZGxjbWx1WnlCdVpYTjBaV1FnWTI5dGNHOXVaVzUwSUhWd1pHRjBaWE1nWm5KdmJTQnlaVzVrWlhJZ2FYTWdibTkwSUNjZ0sxeHVJQ0FnSUNkaGJHeHZkMlZrTGlCSlppQnVaV05sYzNOaGNua3NJSFJ5YVdkblpYSWdibVZ6ZEdWa0lIVndaR0YwWlhNZ2FXNGdKeUFyWEc0Z0lDQWdKMk52YlhCdmJtVnVkRVJwWkZWd1pHRjBaUzRuWEc0Z0lDa2dPaUJ1ZFd4c0tUdGNibHh1SUNCcFppQW9JV0poZEdOb2FXNW5VM1J5WVhSbFoza3VhWE5DWVhSamFHbHVaMVZ3WkdGMFpYTXBJSHRjYmlBZ0lDQmlZWFJqYUdsdVoxTjBjbUYwWldkNUxtSmhkR05vWldSVmNHUmhkR1Z6S0dWdWNYVmxkV1ZWY0dSaGRHVXNJR052YlhCdmJtVnVkQ2s3WEc0Z0lDQWdjbVYwZFhKdU8xeHVJQ0I5WEc1Y2JpQWdaR2x5ZEhsRGIyMXdiMjVsYm5SekxuQjFjMmdvWTI5dGNHOXVaVzUwS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJGYm5GMVpYVmxJR0VnWTJGc2JHSmhZMnNnZEc4Z1ltVWdjblZ1SUdGMElIUm9aU0JsYm1RZ2IyWWdkR2hsSUdOMWNuSmxiblFnWW1GMFkyaHBibWNnWTNsamJHVXVJRlJvY205M2MxeHVJQ29nYVdZZ2JtOGdkWEJrWVhSbGN5QmhjbVVnWTNWeWNtVnVkR3g1SUdKbGFXNW5JSEJsY21admNtMWxaQzVjYmlBcUwxeHVablZ1WTNScGIyNGdZWE5oY0NoallXeHNZbUZqYXl3Z1kyOXVkR1Y0ZENrZ2UxeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lHSmhkR05vYVc1blUzUnlZWFJsWjNrdWFYTkNZWFJqYUdsdVoxVndaR0YwWlhNc1hHNGdJQ0FnSjFKbFlXTjBWWEJrWVhSbGN5NWhjMkZ3T2lCRFlXNWNYQ2QwSUdWdWNYVmxkV1VnWVc0Z1lYTmhjQ0JqWVd4c1ltRmpheUJwYmlCaElHTnZiblJsZUhRZ2QyaGxjbVVuSUN0Y2JpQWdJQ0FuZFhCa1lYUmxjeUJoY21VZ2JtOTBJR0psYVc1bklHSmhkR05vWldRdUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHSmhkR05vYVc1blUzUnlZWFJsWjNrdWFYTkNZWFJqYUdsdVoxVndaR0YwWlhNcEtUdGNiaUFnWVhOaGNFTmhiR3hpWVdOclVYVmxkV1V1Wlc1eGRXVjFaU2hqWVd4c1ltRmpheXdnWTI5dWRHVjRkQ2s3WEc0Z0lHRnpZWEJGYm5GMVpYVmxaQ0E5SUhSeWRXVTdYRzU5WEc1Y2JuWmhjaUJTWldGamRGVndaR0YwWlhOSmJtcGxZM1JwYjI0Z1BTQjdYRzRnSUdsdWFtVmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1T2lCbWRXNWpkR2x2YmloU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpeGNiaUFnSUNBZ0lDZFNaV0ZqZEZWd1pHRjBaWE02SUcxMWMzUWdjSEp2ZG1sa1pTQmhJSEpsWTI5dVkybHNaU0IwY21GdWMyRmpkR2x2YmlCamJHRnpjeWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0ZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUtTazdYRzRnSUNBZ1VtVmhZM1JWY0dSaGRHVnpMbEpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNGdQU0JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ymp0Y2JpQWdmU3hjYmx4dUlDQnBibXBsWTNSQ1lYUmphR2x1WjFOMGNtRjBaV2Q1T2lCbWRXNWpkR2x2YmloZlltRjBZMmhwYm1kVGRISmhkR1ZuZVNrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0JmWW1GMFkyaHBibWRUZEhKaGRHVm5lU3hjYmlBZ0lDQWdJQ2RTWldGamRGVndaR0YwWlhNNklHMTFjM1FnY0hKdmRtbGtaU0JoSUdKaGRHTm9hVzVuSUhOMGNtRjBaV2Q1SjF4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1gySmhkR05vYVc1blUzUnlZWFJsWjNrcEtUdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnZEhsd1pXOW1JRjlpWVhSamFHbHVaMU4wY21GMFpXZDVMbUpoZEdOb1pXUlZjR1JoZEdWeklEMDlQU0FuWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ0FnSjFKbFlXTjBWWEJrWVhSbGN6b2diWFZ6ZENCd2NtOTJhV1JsSUdFZ1ltRjBZMmhsWkZWd1pHRjBaWE1vS1NCbWRXNWpkR2x2YmlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIUjVjR1Z2WmlCZlltRjBZMmhwYm1kVGRISmhkR1ZuZVM1aVlYUmphR1ZrVlhCa1lYUmxjeUE5UFQwZ0oyWjFibU4wYVc5dUp5a3BPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCMGVYQmxiMllnWDJKaGRHTm9hVzVuVTNSeVlYUmxaM2t1YVhOQ1lYUmphR2x1WjFWd1pHRjBaWE1nUFQwOUlDZGliMjlzWldGdUp5eGNiaUFnSUNBZ0lDZFNaV0ZqZEZWd1pHRjBaWE02SUcxMWMzUWdjSEp2ZG1sa1pTQmhiaUJwYzBKaGRHTm9hVzVuVlhCa1lYUmxjeUJpYjI5c1pXRnVJR0YwZEhKcFluVjBaU2RjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hSNWNHVnZaaUJmWW1GMFkyaHBibWRUZEhKaGRHVm5lUzVwYzBKaGRHTm9hVzVuVlhCa1lYUmxjeUE5UFQwZ0oySnZiMnhsWVc0bktTazdYRzRnSUNBZ1ltRjBZMmhwYm1kVGRISmhkR1ZuZVNBOUlGOWlZWFJqYUdsdVoxTjBjbUYwWldkNU8xeHVJQ0I5WEc1OU8xeHVYRzUyWVhJZ1VtVmhZM1JWY0dSaGRHVnpJRDBnZTF4dUlDQXZLaXBjYmlBZ0lDb2dVbVZoWTNRZ2NtVm1aWEpsYm1ObGN5QmdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJtQWdkWE5wYm1jZ2RHaHBjeUJ3Y205d1pYSjBlU0JwYmlCdmNtUmxjbHh1SUNBZ0tpQjBieUJoYkd4dmR5QmtaWEJsYm1SbGJtTjVJR2x1YW1WamRHbHZiaTVjYmlBZ0lDcGNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQlNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dU9pQnVkV3hzTEZ4dVhHNGdJR0poZEdOb1pXUlZjR1JoZEdWek9pQmlZWFJqYUdWa1ZYQmtZWFJsY3l4Y2JpQWdaVzV4ZFdWMVpWVndaR0YwWlRvZ1pXNXhkV1YxWlZWd1pHRjBaU3hjYmlBZ1pteDFjMmhDWVhSamFHVmtWWEJrWVhSbGN6b2dabXgxYzJoQ1lYUmphR1ZrVlhCa1lYUmxjeXhjYmlBZ2FXNXFaV04wYVc5dU9pQlNaV0ZqZEZWd1pHRjBaWE5KYm1wbFkzUnBiMjRzWEc0Z0lHRnpZWEE2SUdGellYQmNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JWY0dSaGRHVnpPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTVkdET01Qcm9wZXJ0eUNvbmZpZ1xuICovXG5cbi8qanNsaW50IGJpdHdpc2U6IHRydWUqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5XCIpO1xuXG52YXIgTVVTVF9VU0VfQVRUUklCVVRFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLk1VU1RfVVNFX0FUVFJJQlVURTtcblxudmFyIFNWR0RPTVByb3BlcnR5Q29uZmlnID0ge1xuICBQcm9wZXJ0aWVzOiB7XG4gICAgY2xpcFBhdGg6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBjeDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGN5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGR4OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZHk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmaWxsOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZmlsbE9wYWNpdHk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmb250RmFtaWx5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZm9udFNpemU6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmeDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZ5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZ3JhZGllbnRUcmFuc2Zvcm06IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBncmFkaWVudFVuaXRzOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbWFya2VyRW5kOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbWFya2VyTWlkOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbWFya2VyU3RhcnQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBvZmZzZXQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBvcGFjaXR5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgcGF0dGVybkNvbnRlbnRVbml0czogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHBhdHRlcm5Vbml0czogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHBvaW50czogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICByOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgcng6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICByeTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHNwcmVhZE1ldGhvZDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0b3BDb2xvcjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0b3BPcGFjaXR5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3Ryb2tlOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3Ryb2tlRGFzaGFycmF5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3Ryb2tlTGluZWNhcDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0cm9rZU9wYWNpdHk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzdHJva2VXaWR0aDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHRleHRBbmNob3I6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB0cmFuc2Zvcm06IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB2ZXJzaW9uOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgdmlld0JveDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHgxOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgeDI6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB4OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgeTE6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB5MjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHk6IE1VU1RfVVNFX0FUVFJJQlVURVxuICB9LFxuICBET01BdHRyaWJ1dGVOYW1lczoge1xuICAgIGNsaXBQYXRoOiAnY2xpcC1wYXRoJyxcbiAgICBmaWxsT3BhY2l0eTogJ2ZpbGwtb3BhY2l0eScsXG4gICAgZm9udEZhbWlseTogJ2ZvbnQtZmFtaWx5JyxcbiAgICBmb250U2l6ZTogJ2ZvbnQtc2l6ZScsXG4gICAgZ3JhZGllbnRUcmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gICAgZ3JhZGllbnRVbml0czogJ2dyYWRpZW50VW5pdHMnLFxuICAgIG1hcmtlckVuZDogJ21hcmtlci1lbmQnLFxuICAgIG1hcmtlck1pZDogJ21hcmtlci1taWQnLFxuICAgIG1hcmtlclN0YXJ0OiAnbWFya2VyLXN0YXJ0JyxcbiAgICBwYXR0ZXJuQ29udGVudFVuaXRzOiAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gICAgcGF0dGVyblVuaXRzOiAncGF0dGVyblVuaXRzJyxcbiAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gICAgc3ByZWFkTWV0aG9kOiAnc3ByZWFkTWV0aG9kJyxcbiAgICBzdG9wQ29sb3I6ICdzdG9wLWNvbG9yJyxcbiAgICBzdG9wT3BhY2l0eTogJ3N0b3Atb3BhY2l0eScsXG4gICAgc3Ryb2tlRGFzaGFycmF5OiAnc3Ryb2tlLWRhc2hhcnJheScsXG4gICAgc3Ryb2tlTGluZWNhcDogJ3N0cm9rZS1saW5lY2FwJyxcbiAgICBzdHJva2VPcGFjaXR5OiAnc3Ryb2tlLW9wYWNpdHknLFxuICAgIHN0cm9rZVdpZHRoOiAnc3Ryb2tlLXdpZHRoJyxcbiAgICB0ZXh0QW5jaG9yOiAndGV4dC1hbmNob3InLFxuICAgIHZpZXdCb3g6ICd2aWV3Qm94J1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNWR0RPTVByb3BlcnR5Q29uZmlnO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFNlbGVjdEV2ZW50UGx1Z2luXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZShcIi4vRXZlbnRQcm9wYWdhdG9yc1wiKTtcbnZhciBSZWFjdElucHV0U2VsZWN0aW9uID0gcmVxdWlyZShcIi4vUmVhY3RJbnB1dFNlbGVjdGlvblwiKTtcbnZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0V2ZW50XCIpO1xuXG52YXIgZ2V0QWN0aXZlRWxlbWVudCA9IHJlcXVpcmUoXCIuL2dldEFjdGl2ZUVsZW1lbnRcIik7XG52YXIgaXNUZXh0SW5wdXRFbGVtZW50ID0gcmVxdWlyZShcIi4vaXNUZXh0SW5wdXRFbGVtZW50XCIpO1xudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG52YXIgc2hhbGxvd0VxdWFsID0gcmVxdWlyZShcIi4vc2hhbGxvd0VxdWFsXCIpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbnZhciBldmVudFR5cGVzID0ge1xuICBzZWxlY3Q6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uU2VsZWN0OiBudWxsfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uU2VsZWN0Q2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ29udGV4dE1lbnUsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEZvY3VzLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd24sXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlVXAsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcFNlbGVjdGlvbkNoYW5nZVxuICAgIF1cbiAgfVxufTtcblxudmFyIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJRCA9IG51bGw7XG52YXIgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG52YXIgbW91c2VEb3duID0gZmFsc2U7XG5cbi8qKlxuICogR2V0IGFuIG9iamVjdCB3aGljaCBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zcyBub2RlcyBvciBicm93c2VycywgYnV0XG4gKiB0d28gaWRlbnRpY2FsIHNlbGVjdGlvbnMgb24gdGhlIHNhbWUgbm9kZSB3aWxsIHJldHVybiBpZGVudGljYWwgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24obm9kZSkge1xuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBub2RlICYmXG4gICAgICBSZWFjdElucHV0U2VsZWN0aW9uLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhub2RlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2UgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBhbmNob3JOb2RlOiBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldDogc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZTogc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0OiBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICB9O1xuICB9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikge1xuICAgIHZhciByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnRFbGVtZW50OiByYW5nZS5wYXJlbnRFbGVtZW50KCksXG4gICAgICB0ZXh0OiByYW5nZS50ZXh0LFxuICAgICAgdG9wOiByYW5nZS5ib3VuZGluZ1RvcCxcbiAgICAgIGxlZnQ6IHJhbmdlLmJvdW5kaW5nTGVmdFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQb2xsIHNlbGVjdGlvbiB0byBzZWUgd2hldGhlciBpdCdzIGNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/U3ludGhldGljRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIGNvbnN0cnVjdFNlbGVjdEV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBlbGVtZW50LCBhbmQgdGhhdCB0aGUgdXNlciBpcyBub3QgZHJhZ2dpbmcgYVxuICAvLyBzZWxlY3Rpb24gKHRoaXMgbWF0Y2hlcyBuYXRpdmUgYHNlbGVjdGAgZXZlbnQgYmVoYXZpb3IpLiBJbiBIVE1MNSwgc2VsZWN0XG4gIC8vIGZpcmVzIG9ubHkgb24gaW5wdXQgYW5kIHRleHRhcmVhIHRodXMgaWYgdGhlcmUncyBubyBmb2N1c2VkIGVsZW1lbnQgd2VcbiAgLy8gd29uJ3QgZGlzcGF0Y2guXG4gIGlmIChtb3VzZURvd24gfHxcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPT0gbnVsbCB8fFxuICAgICAgYWN0aXZlRWxlbWVudCAhPT0gZ2V0QWN0aXZlRWxlbWVudCgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBPbmx5IGZpcmUgd2hlbiBzZWxlY3Rpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG4gIHZhciBjdXJyZW50U2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGFjdGl2ZUVsZW1lbnQpO1xuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwgIXNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxhc3RTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uO1xuXG4gICAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgZXZlbnRUeXBlcy5zZWxlY3QsXG4gICAgICBhY3RpdmVFbGVtZW50SUQsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICk7XG5cbiAgICBzeW50aGV0aWNFdmVudC50eXBlID0gJ3NlbGVjdCc7XG4gICAgc3ludGhldGljRXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudDtcblxuICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhzeW50aGV0aWNFdmVudCk7XG5cbiAgICByZXR1cm4gc3ludGhldGljRXZlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG52YXIgU2VsZWN0RXZlbnRQbHVnaW4gPSB7XG5cbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9XG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG5cbiAgICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRm9jdXM6XG4gICAgICAgIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodG9wTGV2ZWxUYXJnZXQpIHx8XG4gICAgICAgICAgICB0b3BMZXZlbFRhcmdldC5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJykge1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgPSB0b3BMZXZlbFRhcmdldDtcbiAgICAgICAgICBhY3RpdmVFbGVtZW50SUQgPSB0b3BMZXZlbFRhcmdldElEO1xuICAgICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEJsdXI6XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICBhY3RpdmVFbGVtZW50SUQgPSBudWxsO1xuICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIERvbid0IGZpcmUgdGhlIGV2ZW50IHdoaWxlIHRoZSB1c2VyIGlzIGRyYWdnaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gICAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIG5hdGl2ZSBzZWxlY3QgZXZlbnQuXG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duOlxuICAgICAgICBtb3VzZURvd24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb250ZXh0TWVudTpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZVVwOlxuICAgICAgICBtb3VzZURvd24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFNlbGVjdEV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgICAgLy8gQ2hyb21lIGFuZCBJRSBmaXJlIG5vbi1zdGFuZGFyZCBldmVudCB3aGVuIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIChhbmRcbiAgICAgIC8vIHNvbWV0aW1lcyB3aGVuIGl0IGhhc24ndCkuXG4gICAgICAvLyBGaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBzZWxlY3Rpb25jaGFuZ2UsIHNvIGNoZWNrIHNlbGVjdGlvbiBzdGF0dXNcbiAgICAgIC8vIGFmdGVyIGVhY2gga2V5IGVudHJ5LiBUaGUgc2VsZWN0aW9uIGNoYW5nZXMgYWZ0ZXIga2V5ZG93biBhbmQgYmVmb3JlXG4gICAgICAvLyBrZXl1cCwgYnV0IHdlIGNoZWNrIG9uIGtleWRvd24gYXMgd2VsbCBpbiB0aGUgY2FzZSBvZiBob2xkaW5nIGRvd24gYVxuICAgICAgLy8ga2V5LCB3aGVuIG11bHRpcGxlIGtleWRvd24gZXZlbnRzIGFyZSBmaXJlZCBidXQgb25seSBvbmUga2V5dXAgaXMuXG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wU2VsZWN0aW9uQ2hhbmdlOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleURvd246XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5VXA6XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdEV2ZW50UGx1Z2luO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFNlcnZlclJlYWN0Um9vdEluZGV4XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTaXplIG9mIHRoZSByZWFjdFJvb3QgSUQgc3BhY2UuIFdlIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzIGZvciBSZWFjdCByb290XG4gKiBJRHMgYW5kIGlmIHRoZXJlJ3MgYSBjb2xsaXNpb24gdGhlIGV2ZW50cyBhbmQgRE9NIHVwZGF0ZSBzeXN0ZW0gd2lsbFxuICogZ2V0IGNvbmZ1c2VkLiBJbiB0aGUgZnV0dXJlIHdlIG5lZWQgYSB3YXkgdG8gZ2VuZXJhdGUgR1VJRHMgYnV0IGZvclxuICogbm93IHRoaXMgd2lsbCB3b3JrIG9uIGEgc21hbGxlciBzY2FsZS5cbiAqL1xudmFyIEdMT0JBTF9NT1VOVF9QT0lOVF9NQVggPSBNYXRoLnBvdygyLCA1Myk7XG5cbnZhciBTZXJ2ZXJSZWFjdFJvb3RJbmRleCA9IHtcbiAgY3JlYXRlUmVhY3RSb290SW5kZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIEdMT0JBTF9NT1VOVF9QT0lOVF9NQVgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlcnZlclJlYWN0Um9vdEluZGV4O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTaW1wbGVFdmVudFBsdWdpblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQbHVnaW5VdGlscyA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luVXRpbHNcIik7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoXCIuL0V2ZW50UHJvcGFnYXRvcnNcIik7XG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNDbGlwYm9hcmRFdmVudFwiKTtcbnZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0V2ZW50XCIpO1xudmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNGb2N1c0V2ZW50XCIpO1xudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNLZXlib2FyZEV2ZW50XCIpO1xudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNNb3VzZUV2ZW50XCIpO1xudmFyIFN5bnRoZXRpY0RyYWdFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0RyYWdFdmVudFwiKTtcbnZhciBTeW50aGV0aWNUb3VjaEV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljVG91Y2hFdmVudFwiKTtcbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljVUlFdmVudFwiKTtcbnZhciBTeW50aGV0aWNXaGVlbEV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljV2hlZWxFdmVudFwiKTtcblxudmFyIGdldEV2ZW50Q2hhckNvZGUgPSByZXF1aXJlKFwiLi9nZXRFdmVudENoYXJDb2RlXCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIGJsdXI6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQmx1cjogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkJsdXJDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGNsaWNrOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNsaWNrOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ2xpY2tDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGNvbnRleHRNZW51OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNvbnRleHRNZW51OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ29udGV4dE1lbnVDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGNvcHk6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQ29weTogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNvcHlDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGN1dDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25DdXQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25DdXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRvdWJsZUNsaWNrOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRvdWJsZUNsaWNrOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRG91YmxlQ2xpY2tDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWc6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZzogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdFbmQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZ0VuZDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdFbmRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdFbnRlcjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnRW50ZXI6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnRW50ZXJDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdFeGl0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdFeGl0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ0V4aXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdMZWF2ZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnTGVhdmU6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnTGVhdmVDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdPdmVyOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdPdmVyOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ092ZXJDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdTdGFydDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnU3RhcnQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnU3RhcnRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyb3A6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJvcDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyb3BDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGZvY3VzOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkZvY3VzOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRm9jdXNDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGlucHV0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbklucHV0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uSW5wdXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGtleURvd246IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uS2V5RG93bjogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbktleURvd25DYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGtleVByZXNzOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbktleVByZXNzOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uS2V5UHJlc3NDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGtleVVwOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbktleVVwOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uS2V5VXBDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGxvYWQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uTG9hZDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkxvYWRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGVycm9yOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkVycm9yOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRXJyb3JDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIC8vIE5vdGU6IFdlIGRvIG5vdCBhbGxvdyBsaXN0ZW5pbmcgdG8gbW91c2VPdmVyIGV2ZW50cy4gSW5zdGVhZCwgdXNlIHRoZVxuICAvLyBvbk1vdXNlRW50ZXIvb25Nb3VzZUxlYXZlIGNyZWF0ZWQgYnkgYEVudGVyTGVhdmVFdmVudFBsdWdpbmAuXG4gIG1vdXNlRG93bjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Nb3VzZURvd246IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZURvd25DYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIG1vdXNlTW92ZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Nb3VzZU1vdmU6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZU1vdmVDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIG1vdXNlT3V0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbk1vdXNlT3V0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uTW91c2VPdXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIG1vdXNlT3Zlcjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Nb3VzZU92ZXI6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZU92ZXJDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIG1vdXNlVXA6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uTW91c2VVcDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbk1vdXNlVXBDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHBhc3RlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblBhc3RlOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uUGFzdGVDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHJlc2V0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblJlc2V0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uUmVzZXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHNjcm9sbDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25TY3JvbGw6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25TY3JvbGxDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHN1Ym1pdDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25TdWJtaXQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25TdWJtaXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHRvdWNoQ2FuY2VsOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblRvdWNoQ2FuY2VsOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uVG91Y2hDYW5jZWxDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHRvdWNoRW5kOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblRvdWNoRW5kOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uVG91Y2hFbmRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHRvdWNoTW92ZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Ub3VjaE1vdmU6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Ub3VjaE1vdmVDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHRvdWNoU3RhcnQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uVG91Y2hTdGFydDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblRvdWNoU3RhcnRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHdoZWVsOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbldoZWVsOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uV2hlZWxDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH1cbn07XG5cbnZhciB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWcgPSB7XG4gIHRvcEJsdXI6ICAgICAgICBldmVudFR5cGVzLmJsdXIsXG4gIHRvcENsaWNrOiAgICAgICBldmVudFR5cGVzLmNsaWNrLFxuICB0b3BDb250ZXh0TWVudTogZXZlbnRUeXBlcy5jb250ZXh0TWVudSxcbiAgdG9wQ29weTogICAgICAgIGV2ZW50VHlwZXMuY29weSxcbiAgdG9wQ3V0OiAgICAgICAgIGV2ZW50VHlwZXMuY3V0LFxuICB0b3BEb3VibGVDbGljazogZXZlbnRUeXBlcy5kb3VibGVDbGljayxcbiAgdG9wRHJhZzogICAgICAgIGV2ZW50VHlwZXMuZHJhZyxcbiAgdG9wRHJhZ0VuZDogICAgIGV2ZW50VHlwZXMuZHJhZ0VuZCxcbiAgdG9wRHJhZ0VudGVyOiAgIGV2ZW50VHlwZXMuZHJhZ0VudGVyLFxuICB0b3BEcmFnRXhpdDogICAgZXZlbnRUeXBlcy5kcmFnRXhpdCxcbiAgdG9wRHJhZ0xlYXZlOiAgIGV2ZW50VHlwZXMuZHJhZ0xlYXZlLFxuICB0b3BEcmFnT3ZlcjogICAgZXZlbnRUeXBlcy5kcmFnT3ZlcixcbiAgdG9wRHJhZ1N0YXJ0OiAgIGV2ZW50VHlwZXMuZHJhZ1N0YXJ0LFxuICB0b3BEcm9wOiAgICAgICAgZXZlbnRUeXBlcy5kcm9wLFxuICB0b3BFcnJvcjogICAgICAgZXZlbnRUeXBlcy5lcnJvcixcbiAgdG9wRm9jdXM6ICAgICAgIGV2ZW50VHlwZXMuZm9jdXMsXG4gIHRvcElucHV0OiAgICAgICBldmVudFR5cGVzLmlucHV0LFxuICB0b3BLZXlEb3duOiAgICAgZXZlbnRUeXBlcy5rZXlEb3duLFxuICB0b3BLZXlQcmVzczogICAgZXZlbnRUeXBlcy5rZXlQcmVzcyxcbiAgdG9wS2V5VXA6ICAgICAgIGV2ZW50VHlwZXMua2V5VXAsXG4gIHRvcExvYWQ6ICAgICAgICBldmVudFR5cGVzLmxvYWQsXG4gIHRvcE1vdXNlRG93bjogICBldmVudFR5cGVzLm1vdXNlRG93bixcbiAgdG9wTW91c2VNb3ZlOiAgIGV2ZW50VHlwZXMubW91c2VNb3ZlLFxuICB0b3BNb3VzZU91dDogICAgZXZlbnRUeXBlcy5tb3VzZU91dCxcbiAgdG9wTW91c2VPdmVyOiAgIGV2ZW50VHlwZXMubW91c2VPdmVyLFxuICB0b3BNb3VzZVVwOiAgICAgZXZlbnRUeXBlcy5tb3VzZVVwLFxuICB0b3BQYXN0ZTogICAgICAgZXZlbnRUeXBlcy5wYXN0ZSxcbiAgdG9wUmVzZXQ6ICAgICAgIGV2ZW50VHlwZXMucmVzZXQsXG4gIHRvcFNjcm9sbDogICAgICBldmVudFR5cGVzLnNjcm9sbCxcbiAgdG9wU3VibWl0OiAgICAgIGV2ZW50VHlwZXMuc3VibWl0LFxuICB0b3BUb3VjaENhbmNlbDogZXZlbnRUeXBlcy50b3VjaENhbmNlbCxcbiAgdG9wVG91Y2hFbmQ6ICAgIGV2ZW50VHlwZXMudG91Y2hFbmQsXG4gIHRvcFRvdWNoTW92ZTogICBldmVudFR5cGVzLnRvdWNoTW92ZSxcbiAgdG9wVG91Y2hTdGFydDogIGV2ZW50VHlwZXMudG91Y2hTdGFydCxcbiAgdG9wV2hlZWw6ICAgICAgIGV2ZW50VHlwZXMud2hlZWxcbn07XG5cbmZvciAodmFyIHR5cGUgaW4gdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnKSB7XG4gIHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZ1t0eXBlXS5kZXBlbmRlbmNpZXMgPSBbdHlwZV07XG59XG5cbnZhciBTaW1wbGVFdmVudFBsdWdpbiA9IHtcblxuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIC8qKlxuICAgKiBTYW1lIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCBleGNlcHQgY2FuY2VscyB0aGUgZXZlbnQgd2hlbiByZXR1cm5cbiAgICogdmFsdWUgaXMgZmFsc2UuIFRoaXMgYmVoYXZpb3Igd2lsbCBiZSBkaXNhYmxlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gRXZlbnQgdG8gYmUgZGlzcGF0Y2hlZC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gQXBwbGljYXRpb24tbGV2ZWwgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkb21JRCBET00gSUQgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBleGVjdXRlRGlzcGF0Y2g6IGZ1bmN0aW9uKGV2ZW50LCBsaXN0ZW5lciwgZG9tSUQpIHtcbiAgICB2YXIgcmV0dXJuVmFsdWUgPSBFdmVudFBsdWdpblV0aWxzLmV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGRvbUlEKTtcblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgdHlwZW9mIHJldHVyblZhbHVlICE9PSAnYm9vbGVhbicsXG4gICAgICAnUmV0dXJuaW5nIGBmYWxzZWAgZnJvbSBhbiBldmVudCBoYW5kbGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgJyArXG4gICAgICAnaWdub3JlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiBJbnN0ZWFkLCBtYW51YWxseSBjYWxsICcgK1xuICAgICAgJ2Uuc3RvcFByb3BhZ2F0aW9uKCkgb3IgZS5wcmV2ZW50RGVmYXVsdCgpLCBhcyBhcHByb3ByaWF0ZS4nXG4gICAgKSA6IG51bGwpO1xuXG4gICAgaWYgKHJldHVyblZhbHVlID09PSBmYWxzZSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9XG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIGRpc3BhdGNoQ29uZmlnID0gdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnW3RvcExldmVsVHlwZV07XG4gICAgaWYgKCFkaXNwYXRjaENvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBFdmVudENvbnN0cnVjdG9yO1xuICAgIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wSW5wdXQ6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTG9hZDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BFcnJvcjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BSZXNldDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BTdWJtaXQ6XG4gICAgICAgIC8vIEhUTUwgRXZlbnRzXG4gICAgICAgIC8vIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvaW5kZXguaHRtbCNldmVudHMtMFxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzOlxuICAgICAgICAvLyBGaXJlRm94IGNyZWF0ZXMgYSBrZXlwcmVzcyBldmVudCBmb3IgZnVuY3Rpb24ga2V5cyB0b28uIFRoaXMgcmVtb3Zlc1xuICAgICAgICAvLyB0aGUgdW53YW50ZWQga2V5cHJlc3MgZXZlbnRzLiBFbnRlciBpcyBob3dldmVyIGJvdGggcHJpbnRhYmxlIGFuZFxuICAgICAgICAvLyBub24tcHJpbnRhYmxlLiBPbmUgd291bGQgZXhwZWN0IFRhYiB0byBiZSBhcyB3ZWxsIChidXQgaXQgaXNuJ3QpLlxuICAgICAgICBpZiAoZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5RG93bjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlVcDpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEJsdXI6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRm9jdXM6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDbGljazpcbiAgICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAgIC8vIHVud2FudGVkIGNsaWNrIGV2ZW50cy5cbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb250ZXh0TWVudTpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEb3VibGVDbGljazpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd246XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VNb3ZlOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3ZlcjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZVVwOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZzpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnRW5kOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyYWdFbnRlcjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnRXhpdDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnTGVhdmU6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ092ZXI6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ1N0YXJ0OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyb3A6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoQ2FuY2VsOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoRW5kOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoTW92ZTpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BUb3VjaFN0YXJ0OlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVG91Y2hFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wU2Nyb2xsOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wV2hlZWw6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb3B5OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEN1dDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BQYXN0ZTpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIEV2ZW50Q29uc3RydWN0b3IsXG4gICAgICAnU2ltcGxlRXZlbnRQbHVnaW46IFVuaGFuZGxlZCBldmVudCB0eXBlLCBgJXNgLicsXG4gICAgICB0b3BMZXZlbFR5cGVcbiAgICApIDogaW52YXJpYW50KEV2ZW50Q29uc3RydWN0b3IpKTtcbiAgICB2YXIgZXZlbnQgPSBFdmVudENvbnN0cnVjdG9yLmdldFBvb2xlZChcbiAgICAgIGRpc3BhdGNoQ29uZmlnLFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKTtcbiAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNpbXBsZUV2ZW50UGx1Z2luO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VTJsdGNHeGxSWFpsYm5SUWJIVm5hVzR1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCVGFXMXdiR1ZGZG1WdWRGQnNkV2RwYmx4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlFVjJaVzUwUTI5dWMzUmhiblJ6SUQwZ2NtVnhkV2x5WlNoY0lpNHZSWFpsYm5SRGIyNXpkR0Z1ZEhOY0lpazdYRzUyWVhJZ1JYWmxiblJRYkhWbmFXNVZkR2xzY3lBOUlISmxjWFZwY21Vb1hDSXVMMFYyWlc1MFVHeDFaMmx1VlhScGJITmNJaWs3WEc1MllYSWdSWFpsYm5SUWNtOXdZV2RoZEc5eWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBWMlpXNTBVSEp2Y0dGbllYUnZjbk5jSWlrN1hHNTJZWElnVTNsdWRHaGxkR2xqUTJ4cGNHSnZZWEprUlhabGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5VGVXNTBhR1YwYVdORGJHbHdZbTloY21SRmRtVnVkRndpS1R0Y2JuWmhjaUJUZVc1MGFHVjBhV05GZG1WdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFONWJuUm9aWFJwWTBWMlpXNTBYQ0lwTzF4dWRtRnlJRk41Ym5Sb1pYUnBZMFp2WTNWelJYWmxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVRlVzUwYUdWMGFXTkdiMk4xYzBWMlpXNTBYQ0lwTzF4dWRtRnlJRk41Ym5Sb1pYUnBZMHRsZVdKdllYSmtSWFpsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlUZVc1MGFHVjBhV05MWlhsaWIyRnlaRVYyWlc1MFhDSXBPMXh1ZG1GeUlGTjViblJvWlhScFkwMXZkWE5sUlhabGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5VGVXNTBhR1YwYVdOTmIzVnpaVVYyWlc1MFhDSXBPMXh1ZG1GeUlGTjViblJvWlhScFkwUnlZV2RGZG1WdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFONWJuUm9aWFJwWTBSeVlXZEZkbVZ1ZEZ3aUtUdGNiblpoY2lCVGVXNTBhR1YwYVdOVWIzVmphRVYyWlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VTNsdWRHaGxkR2xqVkc5MVkyaEZkbVZ1ZEZ3aUtUdGNiblpoY2lCVGVXNTBhR1YwYVdOVlNVVjJaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVM2x1ZEdobGRHbGpWVWxGZG1WdWRGd2lLVHRjYm5aaGNpQlRlVzUwYUdWMGFXTlhhR1ZsYkVWMlpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlUzbHVkR2hsZEdsalYyaGxaV3hGZG1WdWRGd2lLVHRjYmx4dWRtRnlJR2RsZEVWMlpXNTBRMmhoY2tOdlpHVWdQU0J5WlhGMWFYSmxLRndpTGk5blpYUkZkbVZ1ZEVOb1lYSkRiMlJsWENJcE8xeHVYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVkbUZ5SUd0bGVVOW1JRDBnY21WeGRXbHlaU2hjSWk0dmEyVjVUMlpjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQjBiM0JNWlhabGJGUjVjR1Z6SUQwZ1JYWmxiblJEYjI1emRHRnVkSE11ZEc5d1RHVjJaV3hVZVhCbGN6dGNibHh1ZG1GeUlHVjJaVzUwVkhsd1pYTWdQU0I3WEc0Z0lHSnNkWEk2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVRbXgxY2pvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmtKc2RYSkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdOc2FXTnJPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrTnNhV05yT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1UTJ4cFkydERZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdOdmJuUmxlSFJOWlc1MU9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmtOdmJuUmxlSFJOWlc1MU9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVEyOXVkR1Y0ZEUxbGJuVkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdOdmNIazZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVEyOXdlVG9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZia052Y0hsRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR04xZERvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVEZFhRNklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1RGRYUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSdmRXSnNaVU5zYVdOck9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmtSdmRXSnNaVU5zYVdOck9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVJHOTFZbXhsUTJ4cFkydERZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeVlXYzZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVJISmhaem9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZia1J5WVdkRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5WVdkRmJtUTZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVJISmhaMFZ1WkRvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmtSeVlXZEZibVJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnlZV2RGYm5SbGNqb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1RWNtRm5SVzUwWlhJNklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1RWNtRm5SVzUwWlhKRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5WVdkRmVHbDBPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrUnlZV2RGZUdsME9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVJISmhaMFY0YVhSRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5WVdkTVpXRjJaVG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNUVjbUZuVEdWaGRtVTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNUVjbUZuVEdWaGRtVkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeVlXZFBkbVZ5T2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia1J5WVdkUGRtVnlPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVSSEpoWjA5MlpYSkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeVlXZFRkR0Z5ZERvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVFY21GblUzUmhjblE2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVFY21GblUzUmhjblJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnliM0E2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVSSEp2Y0RvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmtSeWIzQkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdadlkzVnpPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrWnZZM1Z6T2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1Um05amRYTkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdsdWNIVjBPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrbHVjSFYwT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1U1c1d2RYUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUd0bGVVUnZkMjQ2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVTMlY1Ukc5M2Jqb2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJrdGxlVVJ2ZDI1RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR3RsZVZCeVpYTnpPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrdGxlVkJ5WlhOek9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVMyVjVVSEpsYzNORFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR3RsZVZWd09pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2Ymt0bGVWVndPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVTMlY1VlhCRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR3h2WVdRNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1VEc5aFpEb2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJreHZZV1JEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHVnljbTl5T2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia1Z5Y205eU9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVJYSnliM0pEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lDOHZJRTV2ZEdVNklGZGxJR1J2SUc1dmRDQmhiR3h2ZHlCc2FYTjBaVzVwYm1jZ2RHOGdiVzkxYzJWUGRtVnlJR1YyWlc1MGN5NGdTVzV6ZEdWaFpDd2dkWE5sSUhSb1pWeHVJQ0F2THlCdmJrMXZkWE5sUlc1MFpYSXZiMjVOYjNWelpVeGxZWFpsSUdOeVpXRjBaV1FnWW5rZ1lFVnVkR1Z5VEdWaGRtVkZkbVZ1ZEZCc2RXZHBibUF1WEc0Z0lHMXZkWE5sUkc5M2Jqb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1TmIzVnpaVVJ2ZDI0NklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1TmIzVnpaVVJ2ZDI1RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJRzF2ZFhObFRXOTJaVG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNU5iM1Z6WlUxdmRtVTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNU5iM1Z6WlUxdmRtVkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUcxdmRYTmxUM1YwT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZiazF2ZFhObFQzVjBPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVUVzkxYzJWUGRYUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUcxdmRYTmxUM1psY2pvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVOYjNWelpVOTJaWEk2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVOYjNWelpVOTJaWEpEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHMXZkWE5sVlhBNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1VFc5MWMyVlZjRG9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZiazF2ZFhObFZYQkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhCaGMzUmxPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJsQmhjM1JsT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1VUdGemRHVkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhKbGMyVjBPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJsSmxjMlYwT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1VW1WelpYUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhOamNtOXNiRG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNVRZM0p2Ykd3NklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1VFkzSnZiR3hEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lITjFZbTFwZERvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVUZFdKdGFYUTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNVRkV0p0YVhSRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSFJ2ZFdOb1EyRnVZMlZzT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZibFJ2ZFdOb1EyRnVZMlZzT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1Vkc5MVkyaERZVzVqWld4RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSFJ2ZFdOb1JXNWtPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJsUnZkV05vUlc1a09pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVZHOTFZMmhGYm1SRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSFJ2ZFdOb1RXOTJaVG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNVViM1ZqYUUxdmRtVTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNVViM1ZqYUUxdmRtVkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhSdmRXTm9VM1JoY25RNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1Vkc5MVkyaFRkR0Z5ZERvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmxSdmRXTm9VM1JoY25SRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSGRvWldWc09pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2Ymxkb1pXVnNPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVWMmhsWld4RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgxY2JuMDdYRzVjYm5aaGNpQjBiM0JNWlhabGJFVjJaVzUwYzFSdlJHbHpjR0YwWTJoRGIyNW1hV2NnUFNCN1hHNGdJSFJ2Y0VKc2RYSTZJQ0FnSUNBZ0lDQmxkbVZ1ZEZSNWNHVnpMbUpzZFhJc1hHNGdJSFJ2Y0VOc2FXTnJPaUFnSUNBZ0lDQmxkbVZ1ZEZSNWNHVnpMbU5zYVdOckxGeHVJQ0IwYjNCRGIyNTBaWGgwVFdWdWRUb2daWFpsYm5SVWVYQmxjeTVqYjI1MFpYaDBUV1Z1ZFN4Y2JpQWdkRzl3UTI5d2VUb2dJQ0FnSUNBZ0lHVjJaVzUwVkhsd1pYTXVZMjl3ZVN4Y2JpQWdkRzl3UTNWME9pQWdJQ0FnSUNBZ0lHVjJaVzUwVkhsd1pYTXVZM1YwTEZ4dUlDQjBiM0JFYjNWaWJHVkRiR2xqYXpvZ1pYWmxiblJVZVhCbGN5NWtiM1ZpYkdWRGJHbGpheXhjYmlBZ2RHOXdSSEpoWnpvZ0lDQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdVpISmhaeXhjYmlBZ2RHOXdSSEpoWjBWdVpEb2dJQ0FnSUdWMlpXNTBWSGx3WlhNdVpISmhaMFZ1WkN4Y2JpQWdkRzl3UkhKaFowVnVkR1Z5T2lBZ0lHVjJaVzUwVkhsd1pYTXVaSEpoWjBWdWRHVnlMRnh1SUNCMGIzQkVjbUZuUlhocGREb2dJQ0FnWlhabGJuUlVlWEJsY3k1a2NtRm5SWGhwZEN4Y2JpQWdkRzl3UkhKaFoweGxZWFpsT2lBZ0lHVjJaVzUwVkhsd1pYTXVaSEpoWjB4bFlYWmxMRnh1SUNCMGIzQkVjbUZuVDNabGNqb2dJQ0FnWlhabGJuUlVlWEJsY3k1a2NtRm5UM1psY2l4Y2JpQWdkRzl3UkhKaFoxTjBZWEowT2lBZ0lHVjJaVzUwVkhsd1pYTXVaSEpoWjFOMFlYSjBMRnh1SUNCMGIzQkVjbTl3T2lBZ0lDQWdJQ0FnWlhabGJuUlVlWEJsY3k1a2NtOXdMRnh1SUNCMGIzQkZjbkp2Y2pvZ0lDQWdJQ0FnWlhabGJuUlVlWEJsY3k1bGNuSnZjaXhjYmlBZ2RHOXdSbTlqZFhNNklDQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdVptOWpkWE1zWEc0Z0lIUnZjRWx1Y0hWME9pQWdJQ0FnSUNCbGRtVnVkRlI1Y0dWekxtbHVjSFYwTEZ4dUlDQjBiM0JMWlhsRWIzZHVPaUFnSUNBZ1pYWmxiblJVZVhCbGN5NXJaWGxFYjNkdUxGeHVJQ0IwYjNCTFpYbFFjbVZ6Y3pvZ0lDQWdaWFpsYm5SVWVYQmxjeTVyWlhsUWNtVnpjeXhjYmlBZ2RHOXdTMlY1VlhBNklDQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdWEyVjVWWEFzWEc0Z0lIUnZjRXh2WVdRNklDQWdJQ0FnSUNCbGRtVnVkRlI1Y0dWekxteHZZV1FzWEc0Z0lIUnZjRTF2ZFhObFJHOTNiam9nSUNCbGRtVnVkRlI1Y0dWekxtMXZkWE5sUkc5M2JpeGNiaUFnZEc5d1RXOTFjMlZOYjNabE9pQWdJR1YyWlc1MFZIbHdaWE11Ylc5MWMyVk5iM1psTEZ4dUlDQjBiM0JOYjNWelpVOTFkRG9nSUNBZ1pYWmxiblJVZVhCbGN5NXRiM1Z6WlU5MWRDeGNiaUFnZEc5d1RXOTFjMlZQZG1WeU9pQWdJR1YyWlc1MFZIbHdaWE11Ylc5MWMyVlBkbVZ5TEZ4dUlDQjBiM0JOYjNWelpWVndPaUFnSUNBZ1pYWmxiblJVZVhCbGN5NXRiM1Z6WlZWd0xGeHVJQ0IwYjNCUVlYTjBaVG9nSUNBZ0lDQWdaWFpsYm5SVWVYQmxjeTV3WVhOMFpTeGNiaUFnZEc5d1VtVnpaWFE2SUNBZ0lDQWdJR1YyWlc1MFZIbHdaWE11Y21WelpYUXNYRzRnSUhSdmNGTmpjbTlzYkRvZ0lDQWdJQ0JsZG1WdWRGUjVjR1Z6TG5OamNtOXNiQ3hjYmlBZ2RHOXdVM1ZpYldsME9pQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdWMzVmliV2wwTEZ4dUlDQjBiM0JVYjNWamFFTmhibU5sYkRvZ1pYWmxiblJVZVhCbGN5NTBiM1ZqYUVOaGJtTmxiQ3hjYmlBZ2RHOXdWRzkxWTJoRmJtUTZJQ0FnSUdWMlpXNTBWSGx3WlhNdWRHOTFZMmhGYm1Rc1hHNGdJSFJ2Y0ZSdmRXTm9UVzkyWlRvZ0lDQmxkbVZ1ZEZSNWNHVnpMblJ2ZFdOb1RXOTJaU3hjYmlBZ2RHOXdWRzkxWTJoVGRHRnlkRG9nSUdWMlpXNTBWSGx3WlhNdWRHOTFZMmhUZEdGeWRDeGNiaUFnZEc5d1YyaGxaV3c2SUNBZ0lDQWdJR1YyWlc1MFZIbHdaWE11ZDJobFpXeGNibjA3WEc1Y2JtWnZjaUFvZG1GeUlIUjVjR1VnYVc0Z2RHOXdUR1YyWld4RmRtVnVkSE5VYjBScGMzQmhkR05vUTI5dVptbG5LU0I3WEc0Z0lIUnZjRXhsZG1Wc1JYWmxiblJ6Vkc5RWFYTndZWFJqYUVOdmJtWnBaMXQwZVhCbFhTNWtaWEJsYm1SbGJtTnBaWE1nUFNCYmRIbHdaVjA3WEc1OVhHNWNiblpoY2lCVGFXMXdiR1ZGZG1WdWRGQnNkV2RwYmlBOUlIdGNibHh1SUNCbGRtVnVkRlI1Y0dWek9pQmxkbVZ1ZEZSNWNHVnpMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRZVzFsSUdGeklIUm9aU0JrWldaaGRXeDBJR2x0Y0d4bGJXVnVkR0YwYVc5dUxDQmxlR05sY0hRZ1kyRnVZMlZzY3lCMGFHVWdaWFpsYm5RZ2QyaGxiaUJ5WlhSMWNtNWNiaUFnSUNvZ2RtRnNkV1VnYVhNZ1ptRnNjMlV1SUZSb2FYTWdZbVZvWVhacGIzSWdkMmxzYkNCaVpTQmthWE5oWW14bFpDQnBiaUJoSUdaMWRIVnlaU0J5Wld4bFlYTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnUlhabGJuUWdkRzhnWW1VZ1pHbHpjR0YwWTJobFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2Ym4wZ1FYQndiR2xqWVhScGIyNHRiR1YyWld3Z1kyRnNiR0poWTJzdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JrYjIxSlJDQkVUMDBnU1VRZ2RHOGdjR0Z6Y3lCMGJ5QjBhR1VnWTJGc2JHSmhZMnN1WEc0Z0lDQXFMMXh1SUNCbGVHVmpkWFJsUkdsemNHRjBZMmc2SUdaMWJtTjBhVzl1S0dWMlpXNTBMQ0JzYVhOMFpXNWxjaXdnWkc5dFNVUXBJSHRjYmlBZ0lDQjJZWElnY21WMGRYSnVWbUZzZFdVZ1BTQkZkbVZ1ZEZCc2RXZHBibFYwYVd4ekxtVjRaV04xZEdWRWFYTndZWFJqYUNobGRtVnVkQ3dnYkdsemRHVnVaWElzSUdSdmJVbEVLVHRjYmx4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ2RIbHdaVzltSUhKbGRIVnlibFpoYkhWbElDRTlQU0FuWW05dmJHVmhiaWNzWEc0Z0lDQWdJQ0FuVW1WMGRYSnVhVzVuSUdCbVlXeHpaV0FnWm5KdmJTQmhiaUJsZG1WdWRDQm9ZVzVrYkdWeUlHbHpJR1JsY0hKbFkyRjBaV1FnWVc1a0lIZHBiR3dnWW1VZ0p5QXJYRzRnSUNBZ0lDQW5hV2R1YjNKbFpDQnBiaUJoSUdaMWRIVnlaU0J5Wld4bFlYTmxMaUJKYm5OMFpXRmtMQ0J0WVc1MVlXeHNlU0JqWVd4c0lDY2dLMXh1SUNBZ0lDQWdKMlV1YzNSdmNGQnliM0JoWjJGMGFXOXVLQ2tnYjNJZ1pTNXdjbVYyWlc1MFJHVm1ZWFZzZENncExDQmhjeUJoY0hCeWIzQnlhV0YwWlM0blhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dVhHNGdJQ0FnYVdZZ0tISmxkSFZ5YmxaaGJIVmxJRDA5UFNCbVlXeHpaU2tnZTF4dUlDQWdJQ0FnWlhabGJuUXVjM1J2Y0ZCeWIzQmhaMkYwYVc5dUtDazdYRzRnSUNBZ0lDQmxkbVZ1ZEM1d2NtVjJaVzUwUkdWbVlYVnNkQ2dwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhSdmNFeGxkbVZzVkhsd1pTQlNaV052Y21RZ1puSnZiU0JnUlhabGJuUkRiMjV6ZEdGdWRITmdMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVYyWlc1MFZHRnlaMlYwZlNCMGIzQk1aWFpsYkZSaGNtZGxkQ0JVYUdVZ2JHbHpkR1Z1YVc1bklHTnZiWEJ2Ym1WdWRDQnliMjkwSUc1dlpHVXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMGIzQk1aWFpsYkZSaGNtZGxkRWxFSUVsRUlHOW1JR0IwYjNCTVpYWmxiRlJoY21kbGRHQXVYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCdVlYUnBkbVZGZG1WdWRDQk9ZWFJwZG1VZ1luSnZkM05sY2lCbGRtVnVkQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdLbjBnUVc0Z1lXTmpkVzExYkdGMGFXOXVJRzltSUhONWJuUm9aWFJwWXlCbGRtVnVkSE11WEc0Z0lDQXFJRUJ6WldVZ2UwVjJaVzUwVUd4MVoybHVTSFZpTG1WNGRISmhZM1JGZG1WdWRITjlYRzRnSUNBcUwxeHVJQ0JsZUhSeVlXTjBSWFpsYm5Sek9pQm1kVzVqZEdsdmJpaGNiaUFnSUNBZ0lIUnZjRXhsZG1Wc1ZIbHdaU3hjYmlBZ0lDQWdJSFJ2Y0V4bGRtVnNWR0Z5WjJWMExGeHVJQ0FnSUNBZ2RHOXdUR1YyWld4VVlYSm5aWFJKUkN4Y2JpQWdJQ0FnSUc1aGRHbDJaVVYyWlc1MEtTQjdYRzRnSUNBZ2RtRnlJR1JwYzNCaGRHTm9RMjl1Wm1sbklEMGdkRzl3VEdWMlpXeEZkbVZ1ZEhOVWIwUnBjM0JoZEdOb1EyOXVabWxuVzNSdmNFeGxkbVZzVkhsd1pWMDdYRzRnSUNBZ2FXWWdLQ0ZrYVhOd1lYUmphRU52Ym1acFp5a2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJGZG1WdWRFTnZibk4wY25WamRHOXlPMXh1SUNBZ0lITjNhWFJqYUNBb2RHOXdUR1YyWld4VWVYQmxLU0I3WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1NXNXdkWFE2WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1RHOWhaRHBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRmNuSnZjanBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCU1pYTmxkRHBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCVGRXSnRhWFE2WEc0Z0lDQWdJQ0FnSUM4dklFaFVUVXdnUlhabGJuUnpYRzRnSUNBZ0lDQWdJQzh2SUVCelpXVWdhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZWRkl2YUhSdGJEVXZhVzVrWlhndWFIUnRiQ05sZG1WdWRITXRNRnh1SUNBZ0lDQWdJQ0JGZG1WdWRFTnZibk4wY25WamRHOXlJRDBnVTNsdWRHaGxkR2xqUlhabGJuUTdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRXRsZVZCeVpYTnpPbHh1SUNBZ0lDQWdJQ0F2THlCR2FYSmxSbTk0SUdOeVpXRjBaWE1nWVNCclpYbHdjbVZ6Y3lCbGRtVnVkQ0JtYjNJZ1puVnVZM1JwYjI0Z2EyVjVjeUIwYjI4dUlGUm9hWE1nY21WdGIzWmxjMXh1SUNBZ0lDQWdJQ0F2THlCMGFHVWdkVzUzWVc1MFpXUWdhMlY1Y0hKbGMzTWdaWFpsYm5SekxpQkZiblJsY2lCcGN5Qm9iM2RsZG1WeUlHSnZkR2dnY0hKcGJuUmhZbXhsSUdGdVpGeHVJQ0FnSUNBZ0lDQXZMeUJ1YjI0dGNISnBiblJoWW14bExpQlBibVVnZDI5MWJHUWdaWGh3WldOMElGUmhZaUIwYnlCaVpTQmhjeUIzWld4c0lDaGlkWFFnYVhRZ2FYTnVKM1FwTGx4dUlDQWdJQ0FnSUNCcFppQW9aMlYwUlhabGJuUkRhR0Z5UTI5a1pTaHVZWFJwZG1WRmRtVnVkQ2tnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0F2S2lCbVlXeHNjeUIwYUhKdmRXZG9JQ292WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1MyVjVSRzkzYmpwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkxaWGxWY0RwY2JpQWdJQ0FnSUNBZ1JYWmxiblJEYjI1emRISjFZM1J2Y2lBOUlGTjViblJvWlhScFkwdGxlV0p2WVhKa1JYWmxiblE3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0VKc2RYSTZYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3Um05amRYTTZYRzRnSUNBZ0lDQWdJRVYyWlc1MFEyOXVjM1J5ZFdOMGIzSWdQU0JUZVc1MGFHVjBhV05HYjJOMWMwVjJaVzUwTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRGJHbGphenBjYmlBZ0lDQWdJQ0FnTHk4Z1JtbHlaV1p2ZUNCamNtVmhkR1Z6SUdFZ1kyeHBZMnNnWlhabGJuUWdiMjRnY21sbmFIUWdiVzkxYzJVZ1kyeHBZMnR6TGlCVWFHbHpJSEpsYlc5MlpYTWdkR2hsWEc0Z0lDQWdJQ0FnSUM4dklIVnVkMkZ1ZEdWa0lHTnNhV05ySUdWMlpXNTBjeTVjYmlBZ0lDQWdJQ0FnYVdZZ0tHNWhkR2wyWlVWMlpXNTBMbUoxZEhSdmJpQTlQVDBnTWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHFJR1poYkd4eklIUm9jbTkxWjJnZ0tpOWNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JEYjI1MFpYaDBUV1Z1ZFRwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkViM1ZpYkdWRGJHbGphenBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCTmIzVnpaVVJ2ZDI0NlhHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdUVzkxYzJWTmIzWmxPbHh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0UxdmRYTmxUM1YwT2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFMXZkWE5sVDNabGNqcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JOYjNWelpWVndPbHh1SUNBZ0lDQWdJQ0JGZG1WdWRFTnZibk4wY25WamRHOXlJRDBnVTNsdWRHaGxkR2xqVFc5MWMyVkZkbVZ1ZER0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1JISmhaenBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRWNtRm5SVzVrT2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFUnlZV2RGYm5SbGNqcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JFY21GblJYaHBkRHBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRWNtRm5UR1ZoZG1VNlhHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdSSEpoWjA5MlpYSTZYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3UkhKaFoxTjBZWEowT2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFUnliM0E2WEc0Z0lDQWdJQ0FnSUVWMlpXNTBRMjl1YzNSeWRXTjBiM0lnUFNCVGVXNTBhR1YwYVdORWNtRm5SWFpsYm5RN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNGUnZkV05vUTJGdVkyVnNPbHh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0ZSdmRXTm9SVzVrT2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNGUnZkV05vVFc5MlpUcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JVYjNWamFGTjBZWEowT2x4dUlDQWdJQ0FnSUNCRmRtVnVkRU52Ym5OMGNuVmpkRzl5SUQwZ1UzbHVkR2hsZEdsalZHOTFZMmhGZG1WdWREdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdVMk55YjJ4c09seHVJQ0FnSUNBZ0lDQkZkbVZ1ZEVOdmJuTjBjblZqZEc5eUlEMGdVM2x1ZEdobGRHbGpWVWxGZG1WdWREdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdWMmhsWld3NlhHNGdJQ0FnSUNBZ0lFVjJaVzUwUTI5dWMzUnlkV04wYjNJZ1BTQlRlVzUwYUdWMGFXTlhhR1ZsYkVWMlpXNTBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JEYjNCNU9seHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRU4xZERwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQlFZWE4wWlRwY2JpQWdJQ0FnSUNBZ1JYWmxiblJEYjI1emRISjFZM1J2Y2lBOUlGTjViblJvWlhScFkwTnNhWEJpYjJGeVpFVjJaVzUwTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUVWMlpXNTBRMjl1YzNSeWRXTjBiM0lzWEc0Z0lDQWdJQ0FuVTJsdGNHeGxSWFpsYm5SUWJIVm5hVzQ2SUZWdWFHRnVaR3hsWkNCbGRtVnVkQ0IwZVhCbExDQmdKWE5nTGljc1hHNGdJQ0FnSUNCMGIzQk1aWFpsYkZSNWNHVmNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRVYyWlc1MFEyOXVjM1J5ZFdOMGIzSXBLVHRjYmlBZ0lDQjJZWElnWlhabGJuUWdQU0JGZG1WdWRFTnZibk4wY25WamRHOXlMbWRsZEZCdmIyeGxaQ2hjYmlBZ0lDQWdJR1JwYzNCaGRHTm9RMjl1Wm1sbkxGeHVJQ0FnSUNBZ2RHOXdUR1YyWld4VVlYSm5aWFJKUkN4Y2JpQWdJQ0FnSUc1aGRHbDJaVVYyWlc1MFhHNGdJQ0FnS1R0Y2JpQWdJQ0JGZG1WdWRGQnliM0JoWjJGMGIzSnpMbUZqWTNWdGRXeGhkR1ZVZDI5UWFHRnpaVVJwYzNCaGRHTm9aWE1vWlhabGJuUXBPMXh1SUNBZ0lISmxkSFZ5YmlCbGRtVnVkRHRjYmlBZ2ZWeHVYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGTnBiWEJzWlVWMlpXNTBVR3gxWjJsdU8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRXZlbnRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9hcmQtYXBpcy9cbiAqL1xudmFyIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlID0ge1xuICBjbGlwYm9hcmREYXRhOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiAoXG4gICAgICAnY2xpcGJvYXJkRGF0YScgaW4gZXZlbnQgP1xuICAgICAgICBldmVudC5jbGlwYm9hcmREYXRhIDpcbiAgICAgICAgd2luZG93LmNsaXBib2FyZERhdGFcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNDbGlwYm9hcmRFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNDbGlwYm9hcmRFdmVudCwgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNFdmVudFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWNvbXBvc2l0aW9uZXZlbnRzXG4gKi9cbnZhciBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlID0ge1xuICBkYXRhOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50KFxuICBkaXNwYXRjaENvbmZpZyxcbiAgZGlzcGF0Y2hNYXJrZXIsXG4gIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhcbiAgU3ludGhldGljQ29tcG9zaXRpb25FdmVudCxcbiAgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZVxuKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0RyYWdFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljTW91c2VFdmVudFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIERyYWdFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGRhdGFUcmFuc2ZlcjogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRHJhZ0V2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljTW91c2VFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNEcmFnRXZlbnQsIERyYWdFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRHJhZ0V2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0V2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xudmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRUYXJnZXRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBFdmVudEludGVyZmFjZSA9IHtcbiAgdHlwZTogbnVsbCxcbiAgdGFyZ2V0OiBnZXRFdmVudFRhcmdldCxcbiAgLy8gY3VycmVudFRhcmdldCBpcyBzZXQgd2hlbiBkaXNwYXRjaGluZzsgbm8gdXNlIGluIGNvcHlpbmcgaXQgaGVyZVxuICBjdXJyZW50VGFyZ2V0OiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCxcbiAgZXZlbnRQaGFzZTogbnVsbCxcbiAgYnViYmxlczogbnVsbCxcbiAgY2FuY2VsYWJsZTogbnVsbCxcbiAgdGltZVN0YW1wOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVmYXVsdFByZXZlbnRlZDogbnVsbCxcbiAgaXNUcnVzdGVkOiBudWxsXG59O1xuXG4vKipcbiAqIFN5bnRoZXRpYyBldmVudHMgYXJlIGRpc3BhdGNoZWQgYnkgZXZlbnQgcGx1Z2lucywgdHlwaWNhbGx5IGluIHJlc3BvbnNlIHRvIGFcbiAqIHRvcC1sZXZlbCBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXIuXG4gKlxuICogVGhlc2Ugc3lzdGVtcyBzaG91bGQgZ2VuZXJhbGx5IHVzZSBwb29saW5nIHRvIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIGdhcmJhZ2VcbiAqIGNvbGxlY3Rpb24uIFRoZSBzeXN0ZW0gc2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuICogZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGludG8gdGhlIHBvb2wgYWZ0ZXIgYmVpbmcgZGlzcGF0Y2hlZC4gVXNlcnMgdGhhdFxuICogbmVlZCBhIHBlcnNpc3RlZCBldmVudCBzaG91bGQgaW52b2tlIGBwZXJzaXN0YC5cbiAqXG4gKiBTeW50aGV0aWMgZXZlbnRzIChhbmQgc3ViY2xhc3NlcykgaW1wbGVtZW50IHRoZSBET00gTGV2ZWwgMyBFdmVudHMgQVBJIGJ5XG4gKiBub3JtYWxpemluZyBicm93c2VyIHF1aXJrcy4gU3ViY2xhc3NlcyBkbyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBpbXBsZW1lbnQgYVxuICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0aW9uLXNwZWNpZmljIGV2ZW50cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkge1xuICB0aGlzLmRpc3BhdGNoQ29uZmlnID0gZGlzcGF0Y2hDb25maWc7XG4gIHRoaXMuZGlzcGF0Y2hNYXJrZXIgPSBkaXNwYXRjaE1hcmtlcjtcbiAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuXG4gIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtcbiAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtwcm9wTmFtZV07XG4gICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgdGhpc1twcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW3Byb3BOYW1lXSA9IG5hdGl2ZUV2ZW50W3Byb3BOYW1lXTtcbiAgICB9XG4gIH1cblxuICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/XG4gICAgbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCA6XG4gICAgbmF0aXZlRXZlbnQucmV0dXJuVmFsdWUgPT09IGZhbHNlO1xuICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWU7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2U7XG4gIH1cbiAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZTtcbn1cblxuYXNzaWduKFN5bnRoZXRpY0V2ZW50LnByb3RvdHlwZSwge1xuXG4gIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAqIHRoZW0gYmFjayBpbnRvIHRoZSBwb29sLiBUaGlzIGFsbG93cyBhIHdheSB0byBob2xkIG9udG8gYSByZWZlcmVuY2UgdGhhdFxuICAgKiB3b24ndCBiZSBhZGRlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAqL1xuICBwZXJzaXN0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzUGVyc2lzdGVudCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNQZXJzaXN0ZW50OiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UsXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIGBkZXN0cnVjdG9yYCBvbiBlYWNoIGluc3RhbmNlIGl0IHJlbGVhc2VzLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIEludGVyZmFjZSA9IHRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO1xuICAgIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgICAgdGhpc1twcm9wTmFtZV0gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoQ29uZmlnID0gbnVsbDtcbiAgICB0aGlzLmRpc3BhdGNoTWFya2VyID0gbnVsbDtcbiAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbnVsbDtcbiAgfVxuXG59KTtcblxuU3ludGhldGljRXZlbnQuSW50ZXJmYWNlID0gRXZlbnRJbnRlcmZhY2U7XG5cbi8qKlxuICogSGVscGVyIHRvIHJlZHVjZSBib2lsZXJwbGF0ZSB3aGVuIGNyZWF0aW5nIHN1YmNsYXNzZXMuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gQ2xhc3NcbiAqIEBwYXJhbSB7P29iamVjdH0gSW50ZXJmYWNlXG4gKi9cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyA9IGZ1bmN0aW9uKENsYXNzLCBJbnRlcmZhY2UpIHtcbiAgdmFyIFN1cGVyID0gdGhpcztcblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICBhc3NpZ24ocHJvdG90eXBlLCBDbGFzcy5wcm90b3R5cGUpO1xuICBDbGFzcy5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIENsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENsYXNzO1xuXG4gIENsYXNzLkludGVyZmFjZSA9IGFzc2lnbih7fSwgU3VwZXIuSW50ZXJmYWNlLCBJbnRlcmZhY2UpO1xuICBDbGFzcy5hdWdtZW50Q2xhc3MgPSBTdXBlci5hdWdtZW50Q2xhc3M7XG5cbiAgUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKENsYXNzLCBQb29sZWRDbGFzcy50aHJlZUFyZ3VtZW50UG9vbGVyKTtcbn07XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhTeW50aGV0aWNFdmVudCwgUG9vbGVkQ2xhc3MudGhyZWVBcmd1bWVudFBvb2xlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljRm9jdXNFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljVUlFdmVudFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEZvY3VzRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgRm9jdXNFdmVudEludGVyZmFjZSA9IHtcbiAgcmVsYXRlZFRhcmdldDogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRm9jdXNFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljVUlFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljRm9jdXNFdmVudCwgRm9jdXNFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRm9jdXNFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNJbnB1dEV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRXZlbnRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG52YXIgSW5wdXRFdmVudEludGVyZmFjZSA9IHtcbiAgZGF0YTogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljSW5wdXRFdmVudChcbiAgZGlzcGF0Y2hDb25maWcsXG4gIGRpc3BhdGNoTWFya2VyLFxuICBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoXG4gIFN5bnRoZXRpY0lucHV0RXZlbnQsXG4gIElucHV0RXZlbnRJbnRlcmZhY2Vcbik7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljSW5wdXRFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNLZXlib2FyZEV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNVSUV2ZW50XCIpO1xuXG52YXIgZ2V0RXZlbnRDaGFyQ29kZSA9IHJlcXVpcmUoXCIuL2dldEV2ZW50Q2hhckNvZGVcIik7XG52YXIgZ2V0RXZlbnRLZXkgPSByZXF1aXJlKFwiLi9nZXRFdmVudEtleVwiKTtcbnZhciBnZXRFdmVudE1vZGlmaWVyU3RhdGUgPSByZXF1aXJlKFwiLi9nZXRFdmVudE1vZGlmaWVyU3RhdGVcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGtleTogZ2V0RXZlbnRLZXksXG4gIGxvY2F0aW9uOiBudWxsLFxuICBjdHJsS2V5OiBudWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5OiBudWxsLFxuICByZXBlYXQ6IG51bGwsXG4gIGxvY2FsZTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAvLyBMZWdhY3kgSW50ZXJmYWNlXG4gIGNoYXJDb2RlOiBmdW5jdGlvbihldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cblxuICAgIC8vIEtleVByZXNzIGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdHMgcmVwbGFjZW1lbnQgaXMgbm90IHlldCBmaW5hbCBhbmQgbm90XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gYW55IG1ham9yIGJyb3dzZXIuIE9ubHkgS2V5UHJlc3MgaGFzIGNoYXJDb2RlLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbihldmVudCkge1xuICAgIC8vIGBrZXlDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5RG93bi9VcCBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyBwaHlzaWNhbCBrZXlib2FyZCBrZXkuXG5cbiAgICAvLyBUaGUgYWN0dWFsIG1lYW5pbmcgb2YgdGhlIHZhbHVlIGRlcGVuZHMgb24gdGhlIHVzZXJzJyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyB3aGljaCBjYW5ub3QgYmUgZGV0ZWN0ZWQuIEFzc3VtaW5nIHRoYXQgaXQgaXMgYSBVUyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyBwcm92aWRlcyBhIHN1cnByaXNpbmdseSBhY2N1cmF0ZSBtYXBwaW5nIGZvciBVUyBhbmQgRXVyb3BlYW4gdXNlcnMuXG4gICAgLy8gRHVlIHRvIHRoaXMsIGl0IGlzIGxlZnQgdG8gdGhlIHVzZXIgdG8gaW1wbGVtZW50IGF0IHRoaXMgdGltZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgd2hpY2g6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgLy8gYHdoaWNoYCBpcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBrZXlDb2RlYCBvciBgY2hhckNvZGVgIGRlcGVuZGluZyBvbiB0aGVcbiAgICAvLyB0eXBlIG9mIHRoZSBldmVudC5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljS2V5Ym9hcmRFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljVUlFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljS2V5Ym9hcmRFdmVudCwgS2V5Ym9hcmRFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljS2V5Ym9hcmRFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNNb3VzZUV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNVSUV2ZW50XCIpO1xudmFyIFZpZXdwb3J0TWV0cmljcyA9IHJlcXVpcmUoXCIuL1ZpZXdwb3J0TWV0cmljc1wiKTtcblxudmFyIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSA9IHJlcXVpcmUoXCIuL2dldEV2ZW50TW9kaWZpZXJTdGF0ZVwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIE1vdXNlRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgTW91c2VFdmVudEludGVyZmFjZSA9IHtcbiAgc2NyZWVuWDogbnVsbCxcbiAgc2NyZWVuWTogbnVsbCxcbiAgY2xpZW50WDogbnVsbCxcbiAgY2xpZW50WTogbnVsbCxcbiAgY3RybEtleTogbnVsbCxcbiAgc2hpZnRLZXk6IG51bGwsXG4gIGFsdEtleTogbnVsbCxcbiAgbWV0YUtleTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICBidXR0b246IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgLy8gV2Via2l0LCBGaXJlZm94LCBJRTkrXG4gICAgLy8gd2hpY2g6ICAxIDIgM1xuICAgIC8vIGJ1dHRvbjogMCAxIDIgKHN0YW5kYXJkKVxuICAgIHZhciBidXR0b24gPSBldmVudC5idXR0b247XG4gICAgaWYgKCd3aGljaCcgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBidXR0b247XG4gICAgfVxuICAgIC8vIElFPDlcbiAgICAvLyB3aGljaDogIHVuZGVmaW5lZFxuICAgIC8vIGJ1dHRvbjogMCAwIDBcbiAgICAvLyBidXR0b246IDEgNCAyIChvbm1vdXNldXApXG4gICAgcmV0dXJuIGJ1dHRvbiA9PT0gMiA/IDIgOiBidXR0b24gPT09IDQgPyAxIDogMDtcbiAgfSxcbiAgYnV0dG9uczogbnVsbCxcbiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoXG4gICAgICAoKGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQpKVxuICAgICk7XG4gIH0sXG4gIC8vIFwiUHJvcHJpZXRhcnlcIiBJbnRlcmZhY2UuXG4gIHBhZ2VYOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiAncGFnZVgnIGluIGV2ZW50ID9cbiAgICAgIGV2ZW50LnBhZ2VYIDpcbiAgICAgIGV2ZW50LmNsaWVudFggKyBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbExlZnQ7XG4gIH0sXG4gIHBhZ2VZOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiAncGFnZVknIGluIGV2ZW50ID9cbiAgICAgIGV2ZW50LnBhZ2VZIDpcbiAgICAgIGV2ZW50LmNsaWVudFkgKyBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbFRvcDtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljTW91c2VFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljVUlFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljTW91c2VFdmVudCwgTW91c2VFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljTW91c2VFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNUb3VjaEV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNVSUV2ZW50XCIpO1xuXG52YXIgZ2V0RXZlbnRNb2RpZmllclN0YXRlID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRNb2RpZmllclN0YXRlXCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cbnZhciBUb3VjaEV2ZW50SW50ZXJmYWNlID0ge1xuICB0b3VjaGVzOiBudWxsLFxuICB0YXJnZXRUb3VjaGVzOiBudWxsLFxuICBjaGFuZ2VkVG91Y2hlczogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5OiBudWxsLFxuICBjdHJsS2V5OiBudWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNUb3VjaEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljVUlFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNUb3VjaEV2ZW50LCBUb3VjaEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY1VJRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNFdmVudFwiKTtcblxudmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRUYXJnZXRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBVSUV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIFVJRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHZpZXc6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnZpZXcpIHtcbiAgICAgIHJldHVybiBldmVudC52aWV3O1xuICAgIH1cblxuICAgIHZhciB0YXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgaWYgKHRhcmdldCAhPSBudWxsICYmIHRhcmdldC53aW5kb3cgPT09IHRhcmdldCkge1xuICAgICAgLy8gdGFyZ2V0IGlzIGEgd2luZG93IG9iamVjdFxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICB2YXIgZG9jID0gdGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1lbnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgIGlmIChkb2MpIHtcbiAgICAgIHJldHVybiBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gIH0sXG4gIGRldGFpbDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQuZGV0YWlsIHx8IDA7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY0V2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNVSUV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY1VJRXZlbnQsIFVJRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljV2hlZWxFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljTW91c2VFdmVudFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgV2hlZWxFdmVudEludGVyZmFjZSA9IHtcbiAgZGVsdGFYOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiAoXG4gICAgICAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6XG4gICAgICAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICAgJ3doZWVsRGVsdGFYJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWCA6IDBcbiAgICApO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDpcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAgICd3aGVlbERlbHRhWScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVkgOlxuICAgICAgLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGEgOiAwXG4gICAgKTtcbiAgfSxcbiAgZGVsdGFaOiBudWxsLFxuXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNNb3VzZUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNXaGVlbEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljTW91c2VFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNXaGVlbEV2ZW50LCBXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBUcmFuc2FjdGlvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBgVHJhbnNhY3Rpb25gIGNyZWF0ZXMgYSBibGFjayBib3ggdGhhdCBpcyBhYmxlIHRvIHdyYXAgYW55IG1ldGhvZCBzdWNoIHRoYXRcbiAqIGNlcnRhaW4gaW52YXJpYW50cyBhcmUgbWFpbnRhaW5lZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBtZXRob2QgaXMgaW52b2tlZFxuICogKEV2ZW4gaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGlsZSBpbnZva2luZyB0aGUgd3JhcHBlZCBtZXRob2QpLiBXaG9ldmVyXG4gKiBpbnN0YW50aWF0ZXMgYSB0cmFuc2FjdGlvbiBjYW4gcHJvdmlkZSBlbmZvcmNlcnMgb2YgdGhlIGludmFyaWFudHMgYXRcbiAqIGNyZWF0aW9uIHRpbWUuIFRoZSBgVHJhbnNhY3Rpb25gIGNsYXNzIGl0c2VsZiB3aWxsIHN1cHBseSBvbmUgYWRkaXRpb25hbFxuICogYXV0b21hdGljIGludmFyaWFudCBmb3IgeW91IC0gdGhlIGludmFyaWFudCB0aGF0IGFueSB0cmFuc2FjdGlvbiBpbnN0YW5jZVxuICogc2hvdWxkIG5vdCBiZSBydW4gd2hpbGUgaXQgaXMgYWxyZWFkeSBiZWluZyBydW4uIFlvdSB3b3VsZCB0eXBpY2FsbHkgY3JlYXRlIGFcbiAqIHNpbmdsZSBpbnN0YW5jZSBvZiBhIGBUcmFuc2FjdGlvbmAgZm9yIHJldXNlIG11bHRpcGxlIHRpbWVzLCB0aGF0IHBvdGVudGlhbGx5XG4gKiBpcyB1c2VkIHRvIHdyYXAgc2V2ZXJhbCBkaWZmZXJlbnQgbWV0aG9kcy4gV3JhcHBlcnMgYXJlIGV4dHJlbWVseSBzaW1wbGUgLVxuICogdGhleSBvbmx5IHJlcXVpcmUgaW1wbGVtZW50aW5nIHR3byBtZXRob2RzLlxuICpcbiAqIDxwcmU+XG4gKiAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlcnMgKGluamVjdGVkIGF0IGNyZWF0aW9uIHRpbWUpXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAgICAgICAgK1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgdiAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgIHwgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgKy0tfCAgICB3cmFwcGVyMSAgIHwtLS18LS0tLSsgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICstLS0tLS0tLS0tLS0tLS0rICAgdiAgICB8ICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgICstLS0tLS0tLS0tLS0tKyAgfCAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgKy0tLS18ICAgd3JhcHBlcjIgIHwtLS0tLS0tLSsgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgIHwgICAgKy0tLS0tLS0tLS0tLS0rICB8ICAgICB8ICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgdiAgICAgdiAgICAgICAgICAgICAgICAgICAgIHYgICAgIHYgICB8IHdyYXBwZXJcbiAqICAgICAgICAgICAgICAgICAgICB8ICstLS0rICstLS0rICAgKy0tLS0tLS0tLSsgICArLS0tKyArLS0tKyB8IGludmFyaWFudHNcbiAqIHBlcmZvcm0oYW55TWV0aG9kKSB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8IG1haW50YWluZWRcbiAqICstLS0tLS0tLS0tLS0tLS0tLT58LXwtLS18LXwtLS18LS0+fGFueU1ldGhvZHwtLS18LS0tfC18LS0tfC18LS0tLS0tLS0+XG4gKiAgICAgICAgICAgICAgICAgICAgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfFxuICogICAgICAgICAgICAgICAgICAgIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8IHwgICB8IHxcbiAqICAgICAgICAgICAgICAgICAgICB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCArLS0tKyArLS0tKyAgICstLS0tLS0tLS0rICAgKy0tLSsgKy0tLSsgfFxuICogICAgICAgICAgICAgICAgICAgIHwgIGluaXRpYWxpemUgICAgICAgICAgICAgICAgICAgIGNsb3NlICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gKiA8L3ByZT5cbiAqXG4gKiBVc2UgY2FzZXM6XG4gKiAtIFByZXNlcnZpbmcgdGhlIGlucHV0IHNlbGVjdGlvbiByYW5nZXMgYmVmb3JlL2FmdGVyIHJlY29uY2lsaWF0aW9uLlxuICogICBSZXN0b3Jpbmcgc2VsZWN0aW9uIGV2ZW4gaW4gdGhlIGV2ZW50IG9mIGFuIHVuZXhwZWN0ZWQgZXJyb3IuXG4gKiAtIERlYWN0aXZhdGluZyBldmVudHMgd2hpbGUgcmVhcnJhbmdpbmcgdGhlIERPTSwgcHJldmVudGluZyBibHVycy9mb2N1c2VzLFxuICogICB3aGlsZSBndWFyYW50ZWVpbmcgdGhhdCBhZnRlcndhcmRzLCB0aGUgZXZlbnQgc3lzdGVtIGlzIHJlYWN0aXZhdGVkLlxuICogLSBGbHVzaGluZyBhIHF1ZXVlIG9mIGNvbGxlY3RlZCBET00gbXV0YXRpb25zIHRvIHRoZSBtYWluIFVJIHRocmVhZCBhZnRlciBhXG4gKiAgIHJlY29uY2lsaWF0aW9uIHRha2VzIHBsYWNlIGluIGEgd29ya2VyIHRocmVhZC5cbiAqIC0gSW52b2tpbmcgYW55IGNvbGxlY3RlZCBgY29tcG9uZW50RGlkVXBkYXRlYCBjYWxsYmFja3MgYWZ0ZXIgcmVuZGVyaW5nIG5ld1xuICogICBjb250ZW50LlxuICogLSAoRnV0dXJlIHVzZSBjYXNlKTogV3JhcHBpbmcgcGFydGljdWxhciBmbHVzaGVzIG9mIHRoZSBgUmVhY3RXb3JrZXJgIHF1ZXVlXG4gKiAgIHRvIHByZXNlcnZlIHRoZSBgc2Nyb2xsVG9wYCAoYW4gYXV0b21hdGljIHNjcm9sbCBhd2FyZSBET00pLlxuICogLSAoRnV0dXJlIHVzZSBjYXNlKTogTGF5b3V0IGNhbGN1bGF0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIERPTSB1cGRhdGVzLlxuICpcbiAqIFRyYW5zYWN0aW9uYWwgcGx1Z2luIEFQSTpcbiAqIC0gQSBtb2R1bGUgdGhhdCBoYXMgYW4gYGluaXRpYWxpemVgIG1ldGhvZCB0aGF0IHJldHVybnMgYW55IHByZWNvbXB1dGF0aW9uLlxuICogLSBhbmQgYSBgY2xvc2VgIG1ldGhvZCB0aGF0IGFjY2VwdHMgdGhlIHByZWNvbXB1dGF0aW9uLiBgY2xvc2VgIGlzIGludm9rZWRcbiAqICAgd2hlbiB0aGUgd3JhcHBlZCBwcm9jZXNzIGlzIGNvbXBsZXRlZCwgb3IgaGFzIGZhaWxlZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFRyYW5zYWN0aW9uYWxXcmFwcGVyPn0gdHJhbnNhY3Rpb25XcmFwcGVyIFdyYXBwZXIgbW9kdWxlc1xuICogdGhhdCBpbXBsZW1lbnQgYGluaXRpYWxpemVgIGFuZCBgY2xvc2VgLlxuICogQHJldHVybiB7VHJhbnNhY3Rpb259IFNpbmdsZSB0cmFuc2FjdGlvbiBmb3IgcmV1c2UgaW4gdGhyZWFkLlxuICpcbiAqIEBjbGFzcyBUcmFuc2FjdGlvblxuICovXG52YXIgTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoaXMgaW5zdGFuY2Ugc28gdGhhdCBpdCBpcyBwcmVwYXJlZCBmb3IgY29sbGVjdGluZyBtZXRyaWNzLiBEb2VzXG4gICAqIHNvIHN1Y2ggdGhhdCB0aGlzIHNldHVwIG1ldGhvZCBtYXkgYmUgdXNlZCBvbiBhbiBpbnN0YW5jZSB0aGF0IGlzIGFscmVhZHlcbiAgICogaW5pdGlhbGl6ZWQsIGluIGEgd2F5IHRoYXQgZG9lcyBub3QgY29uc3VtZSBhZGRpdGlvbmFsIG1lbW9yeSB1cG9uIHJldXNlLlxuICAgKiBUaGF0IGNhbiBiZSB1c2VmdWwgaWYgeW91IGRlY2lkZSB0byBtYWtlIHlvdXIgc3ViY2xhc3Mgb2YgdGhpcyBtaXhpbiBhXG4gICAqIFwiUG9vbGVkQ2xhc3NcIi5cbiAgICovXG4gIHJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMgPSB0aGlzLmdldFRyYW5zYWN0aW9uV3JhcHBlcnMoKTtcbiAgICBpZiAoIXRoaXMud3JhcHBlckluaXREYXRhKSB7XG4gICAgICB0aGlzLndyYXBwZXJJbml0RGF0YSA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGggPSAwO1xuICAgIH1cbiAgICB0aGlzLl9pc0luVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgfSxcblxuICBfaXNJblRyYW5zYWN0aW9uOiBmYWxzZSxcblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm4ge0FycmF5PFRyYW5zYWN0aW9uV3JhcHBlcj59IEFycmF5IG9mIHRyYW5zYWN0aW9uIHdyYXBwZXJzLlxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogbnVsbCxcblxuICBpc0luVHJhbnNhY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2lzSW5UcmFuc2FjdGlvbjtcbiAgfSxcblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGZ1bmN0aW9uIHdpdGhpbiBhIHNhZmV0eSB3aW5kb3cuIFVzZSB0aGlzIGZvciB0aGUgdG9wIGxldmVsXG4gICAqIG1ldGhvZHMgdGhhdCByZXN1bHQgaW4gbGFyZ2UgYW1vdW50cyBvZiBjb21wdXRhdGlvbi9tdXRhdGlvbnMgdGhhdCB3b3VsZFxuICAgKiBuZWVkIHRvIGJlIHNhZmV0eSBjaGVja2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2QgTWVtYmVyIG9mIHNjb3BlIHRvIGNhbGwuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSBTY29wZSB0byBpbnZva2UgZnJvbS5cbiAgICogQHBhcmFtIHtPYmplY3Q/PX0gYXJncy4uLiBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgbWV0aG9kIChvcHRpb25hbCkuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVscHMgcHJldmVudCBuZWVkIHRvIGJpbmQgaW4gbWFueSBjYXNlcy5cbiAgICogQHJldHVybiBSZXR1cm4gdmFsdWUgZnJvbSBgbWV0aG9kYC5cbiAgICovXG4gIHBlcmZvcm06IGZ1bmN0aW9uKG1ldGhvZCwgc2NvcGUsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIXRoaXMuaXNJblRyYW5zYWN0aW9uKCksXG4gICAgICAnVHJhbnNhY3Rpb24ucGVyZm9ybSguLi4pOiBDYW5ub3QgaW5pdGlhbGl6ZSBhIHRyYW5zYWN0aW9uIHdoZW4gdGhlcmUgJyArXG4gICAgICAnaXMgYWxyZWFkeSBhbiBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbi4nXG4gICAgKSA6IGludmFyaWFudCghdGhpcy5pc0luVHJhbnNhY3Rpb24oKSkpO1xuICAgIHZhciBlcnJvclRocm93bjtcbiAgICB2YXIgcmV0O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9pc0luVHJhbnNhY3Rpb24gPSB0cnVlO1xuICAgICAgLy8gQ2F0Y2hpbmcgZXJyb3JzIG1ha2VzIGRlYnVnZ2luZyBtb3JlIGRpZmZpY3VsdCwgc28gd2Ugc3RhcnQgd2l0aFxuICAgICAgLy8gZXJyb3JUaHJvd24gc2V0IHRvIHRydWUgYmVmb3JlIHNldHRpbmcgaXQgdG8gZmFsc2UgYWZ0ZXIgY2FsbGluZ1xuICAgICAgLy8gY2xvc2UgLS0gaWYgaXQncyBzdGlsbCBzZXQgdG8gdHJ1ZSBpbiB0aGUgZmluYWxseSBibG9jaywgaXQgbWVhbnNcbiAgICAgIC8vIG9uZSBvZiB0aGVzZSBjYWxscyB0aHJldy5cbiAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUFsbCgwKTtcbiAgICAgIHJldCA9IG1ldGhvZC5jYWxsKHNjb3BlLCBhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgIGVycm9yVGhyb3duID0gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICAgIC8vIElmIGBtZXRob2RgIHRocm93cywgcHJlZmVyIHRvIHNob3cgdGhhdCBzdGFjayB0cmFjZSBvdmVyIGFueSB0aHJvd25cbiAgICAgICAgICAvLyBieSBpbnZva2luZyBgY2xvc2VBbGxgLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQWxsKDApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaW5jZSBgbWV0aG9kYCBkaWRuJ3QgdGhyb3csIHdlIGRvbid0IHdhbnQgdG8gc2lsZW5jZSB0aGUgZXhjZXB0aW9uXG4gICAgICAgICAgLy8gaGVyZS5cbiAgICAgICAgICB0aGlzLmNsb3NlQWxsKDApO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9pc0luVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBpbml0aWFsaXplQWxsOiBmdW5jdGlvbihzdGFydEluZGV4KSB7XG4gICAgdmFyIHRyYW5zYWN0aW9uV3JhcHBlcnMgPSB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnM7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0cmFuc2FjdGlvbldyYXBwZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgd3JhcHBlciA9IHRyYW5zYWN0aW9uV3JhcHBlcnNbaV07XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDYXRjaGluZyBlcnJvcnMgbWFrZXMgZGVidWdnaW5nIG1vcmUgZGlmZmljdWx0LCBzbyB3ZSBzdGFydCB3aXRoIHRoZVxuICAgICAgICAvLyBPQlNFUlZFRF9FUlJPUiBzdGF0ZSBiZWZvcmUgb3ZlcndyaXRpbmcgaXQgd2l0aCB0aGUgcmVhbCByZXR1cm4gdmFsdWVcbiAgICAgICAgLy8gb2YgaW5pdGlhbGl6ZSAtLSBpZiBpdCdzIHN0aWxsIHNldCB0byBPQlNFUlZFRF9FUlJPUiBpbiB0aGUgZmluYWxseVxuICAgICAgICAvLyBibG9jaywgaXQgbWVhbnMgd3JhcHBlci5pbml0aWFsaXplIHRocmV3LlxuICAgICAgICB0aGlzLndyYXBwZXJJbml0RGF0YVtpXSA9IFRyYW5zYWN0aW9uLk9CU0VSVkVEX0VSUk9SO1xuICAgICAgICB0aGlzLndyYXBwZXJJbml0RGF0YVtpXSA9IHdyYXBwZXIuaW5pdGlhbGl6ZSA/XG4gICAgICAgICAgd3JhcHBlci5pbml0aWFsaXplLmNhbGwodGhpcykgOlxuICAgICAgICAgIG51bGw7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGhpcy53cmFwcGVySW5pdERhdGFbaV0gPT09IFRyYW5zYWN0aW9uLk9CU0VSVkVEX0VSUk9SKSB7XG4gICAgICAgICAgLy8gVGhlIGluaXRpYWxpemVyIGZvciB3cmFwcGVyIGkgdGhyZXcgYW4gZXJyb3I7IGluaXRpYWxpemUgdGhlXG4gICAgICAgICAgLy8gcmVtYWluaW5nIHdyYXBwZXJzIGJ1dCBzaWxlbmNlIGFueSBleGNlcHRpb25zIGZyb20gdGhlbSB0byBlbnN1cmVcbiAgICAgICAgICAvLyB0aGF0IHRoZSBmaXJzdCBlcnJvciBpcyB0aGUgb25lIHRvIGJ1YmJsZSB1cC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQWxsKGkgKyAxKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEludm9rZXMgZWFjaCBvZiBgdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzLmNsb3NlW2ldYCBmdW5jdGlvbnMsIHBhc3NpbmcgaW50b1xuICAgKiB0aGVtIHRoZSByZXNwZWN0aXZlIHJldHVybiB2YWx1ZXMgb2YgYHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycy5pbml0W2ldYFxuICAgKiAoYGNsb3NlYHJzIHRoYXQgY29ycmVzcG9uZCB0byBpbml0aWFsaXplcnMgdGhhdCBmYWlsZWQgd2lsbCBub3QgYmVcbiAgICogaW52b2tlZCkuXG4gICAqL1xuICBjbG9zZUFsbDogZnVuY3Rpb24oc3RhcnRJbmRleCkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICB0aGlzLmlzSW5UcmFuc2FjdGlvbigpLFxuICAgICAgJ1RyYW5zYWN0aW9uLmNsb3NlQWxsKCk6IENhbm5vdCBjbG9zZSB0cmFuc2FjdGlvbiB3aGVuIG5vbmUgYXJlIG9wZW4uJ1xuICAgICkgOiBpbnZhcmlhbnQodGhpcy5pc0luVHJhbnNhY3Rpb24oKSkpO1xuICAgIHZhciB0cmFuc2FjdGlvbldyYXBwZXJzID0gdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdHJhbnNhY3Rpb25XcmFwcGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHdyYXBwZXIgPSB0cmFuc2FjdGlvbldyYXBwZXJzW2ldO1xuICAgICAgdmFyIGluaXREYXRhID0gdGhpcy53cmFwcGVySW5pdERhdGFbaV07XG4gICAgICB2YXIgZXJyb3JUaHJvd247XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDYXRjaGluZyBlcnJvcnMgbWFrZXMgZGVidWdnaW5nIG1vcmUgZGlmZmljdWx0LCBzbyB3ZSBzdGFydCB3aXRoXG4gICAgICAgIC8vIGVycm9yVGhyb3duIHNldCB0byB0cnVlIGJlZm9yZSBzZXR0aW5nIGl0IHRvIGZhbHNlIGFmdGVyIGNhbGxpbmdcbiAgICAgICAgLy8gY2xvc2UgLS0gaWYgaXQncyBzdGlsbCBzZXQgdG8gdHJ1ZSBpbiB0aGUgZmluYWxseSBibG9jaywgaXQgbWVhbnNcbiAgICAgICAgLy8gd3JhcHBlci5jbG9zZSB0aHJldy5cbiAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgICBpZiAoaW5pdERhdGEgIT09IFRyYW5zYWN0aW9uLk9CU0VSVkVEX0VSUk9SICYmIHdyYXBwZXIuY2xvc2UpIHtcbiAgICAgICAgICB3cmFwcGVyLmNsb3NlLmNhbGwodGhpcywgaW5pdERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yVGhyb3duID0gZmFsc2U7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAvLyBUaGUgY2xvc2VyIGZvciB3cmFwcGVyIGkgdGhyZXcgYW4gZXJyb3I7IGNsb3NlIHRoZSByZW1haW5pbmdcbiAgICAgICAgICAvLyB3cmFwcGVycyBidXQgc2lsZW5jZSBhbnkgZXhjZXB0aW9ucyBmcm9tIHRoZW0gdG8gZW5zdXJlIHRoYXQgdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZXJyb3IgaXMgdGhlIG9uZSB0byBidWJibGUgdXAuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBbGwoaSArIDEpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy53cmFwcGVySW5pdERhdGEubGVuZ3RoID0gMDtcbiAgfVxufTtcblxudmFyIFRyYW5zYWN0aW9uID0ge1xuXG4gIE1peGluOiBNaXhpbixcblxuICAvKipcbiAgICogVG9rZW4gdG8gbG9vayBmb3IgdG8gZGV0ZXJtaW5lIGlmIGFuIGVycm9yIG9jY3VyZWQuXG4gICAqL1xuICBPQlNFUlZFRF9FUlJPUjoge31cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2FjdGlvbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlZISmhibk5oWTNScGIyNHVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVkhKaGJuTmhZM1JwYjI1Y2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYmk4cUtseHVJQ29nWUZSeVlXNXpZV04wYVc5dVlDQmpjbVZoZEdWeklHRWdZbXhoWTJzZ1ltOTRJSFJvWVhRZ2FYTWdZV0pzWlNCMGJ5QjNjbUZ3SUdGdWVTQnRaWFJvYjJRZ2MzVmphQ0IwYUdGMFhHNGdLaUJqWlhKMFlXbHVJR2x1ZG1GeWFXRnVkSE1nWVhKbElHMWhhVzUwWVdsdVpXUWdZbVZtYjNKbElHRnVaQ0JoWm5SbGNpQjBhR1VnYldWMGFHOWtJR2x6SUdsdWRtOXJaV1JjYmlBcUlDaEZkbVZ1SUdsbUlHRnVJR1Y0WTJWd2RHbHZiaUJwY3lCMGFISnZkMjRnZDJocGJHVWdhVzUyYjJ0cGJtY2dkR2hsSUhkeVlYQndaV1FnYldWMGFHOWtLUzRnVjJodlpYWmxjbHh1SUNvZ2FXNXpkR0Z1ZEdsaGRHVnpJR0VnZEhKaGJuTmhZM1JwYjI0Z1kyRnVJSEJ5YjNacFpHVWdaVzVtYjNKalpYSnpJRzltSUhSb1pTQnBiblpoY21saGJuUnpJR0YwWEc0Z0tpQmpjbVZoZEdsdmJpQjBhVzFsTGlCVWFHVWdZRlJ5WVc1ellXTjBhVzl1WUNCamJHRnpjeUJwZEhObGJHWWdkMmxzYkNCemRYQndiSGtnYjI1bElHRmtaR2wwYVc5dVlXeGNiaUFxSUdGMWRHOXRZWFJwWXlCcGJuWmhjbWxoYm5RZ1ptOXlJSGx2ZFNBdElIUm9aU0JwYm5aaGNtbGhiblFnZEdoaGRDQmhibmtnZEhKaGJuTmhZM1JwYjI0Z2FXNXpkR0Z1WTJWY2JpQXFJSE5vYjNWc1pDQnViM1FnWW1VZ2NuVnVJSGRvYVd4bElHbDBJR2x6SUdGc2NtVmhaSGtnWW1WcGJtY2djblZ1TGlCWmIzVWdkMjkxYkdRZ2RIbHdhV05oYkd4NUlHTnlaV0YwWlNCaFhHNGdLaUJ6YVc1bmJHVWdhVzV6ZEdGdVkyVWdiMllnWVNCZ1ZISmhibk5oWTNScGIyNWdJR1p2Y2lCeVpYVnpaU0J0ZFd4MGFYQnNaU0IwYVcxbGN5d2dkR2hoZENCd2IzUmxiblJwWVd4c2VWeHVJQ29nYVhNZ2RYTmxaQ0IwYnlCM2NtRndJSE5sZG1WeVlXd2daR2xtWm1WeVpXNTBJRzFsZEdodlpITXVJRmR5WVhCd1pYSnpJR0Z5WlNCbGVIUnlaVzFsYkhrZ2MybHRjR3hsSUMxY2JpQXFJSFJvWlhrZ2IyNXNlU0J5WlhGMWFYSmxJR2x0Y0d4bGJXVnVkR2x1WnlCMGQyOGdiV1YwYUc5a2N5NWNiaUFxWEc0Z0tpQThjSEpsUGx4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhkeVlYQndaWEp6SUNocGJtcGxZM1JsWkNCaGRDQmpjbVZoZEdsdmJpQjBhVzFsS1Z4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ3NnSUNBZ0lDQWdJQ3RjYmlBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjhJQ0FnSUNBZ0lDQjhYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0t5MHRMUzB0TFMwdExTMHRMUzB0TFMwdGZDMHRMUzB0TFMwdGZDMHRMUzB0TFMwdExTMHRMUzB0SzF4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHdnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFlnSUNBZ0lDQWdJSHdnSUNBZ0lDQWdJQ0FnSUNBZ0lIeGNiaUFxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOElDQWdJQ0FnS3kwdExTMHRMUzB0TFMwdExTMHRMU3NnSUNCOElDQWdJQ0FnSUNBZ0lDQWdJQ0I4WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmQ0FnSUNzdExYd2dJQ0FnZDNKaGNIQmxjakVnSUNCOExTMHRmQzB0TFMwcklDQWdJQ0FnSUNBZ2ZGeHVJQ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh3Z0lDQjhJQ0FyTFMwdExTMHRMUzB0TFMwdExTMHRLeUFnSUhZZ0lDQWdmQ0FnSUNBZ0lDQWdJSHhjYmlBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjhJQ0FnZkNBZ0lDQWdJQ0FnSUNBckxTMHRMUzB0TFMwdExTMHRMU3NnSUh3Z0lDQWdJQ0FnSUNCOFhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZkNBZ0lId2dJQ0FnSUNzdExTMHRmQ0FnSUhkeVlYQndaWEl5SUNCOExTMHRMUzB0TFMwcklDQWdmRnh1SUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lId2dJQ0I4SUNBZ0lDQjhJQ0FnSUNzdExTMHRMUzB0TFMwdExTMHRLeUFnZkNBZ0lDQWdmQ0FnSUh4Y2JpQXFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I4SUNBZ2ZDQWdJQ0FnZkNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lId2dJQ0FnSUh3Z0lDQjhYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZDQWdJSFlnSUNBZ0lIWWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IySUNBZ0lDQjJJQ0FnZkNCM2NtRndjR1Z5WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmQ0FyTFMwdEt5QXJMUzB0S3lBZ0lDc3RMUzB0TFMwdExTMHJJQ0FnS3kwdExTc2dLeTB0TFNzZ2ZDQnBiblpoY21saGJuUnpYRzRnS2lCd1pYSm1iM0p0S0dGdWVVMWxkR2h2WkNrZ2ZDQjhJQ0FnZkNCOElDQWdmQ0FnSUh3Z0lDQWdJQ0FnSUNCOElDQWdmQ0FnSUh3Z2ZDQWdJSHdnZkNCdFlXbHVkR0ZwYm1Wa1hHNGdLaUFyTFMwdExTMHRMUzB0TFMwdExTMHRMUzArZkMxOExTMHRmQzE4TFMwdGZDMHRQbnhoYm5sTlpYUm9iMlI4TFMwdGZDMHRMWHd0ZkMwdExYd3RmQzB0TFMwdExTMHRQbHh1SUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lId2dmQ0FnSUh3Z2ZDQWdJSHdnSUNCOElDQWdJQ0FnSUNBZ2ZDQWdJSHdnSUNCOElId2dJQ0I4SUh4Y2JpQXFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I4SUh3Z0lDQjhJSHdnSUNCOElDQWdmQ0FnSUNBZ0lDQWdJSHdnSUNCOElDQWdmQ0I4SUNBZ2ZDQjhYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZDQjhJQ0FnZkNCOElDQWdmQ0FnSUh3Z0lDQWdJQ0FnSUNCOElDQWdmQ0FnSUh3Z2ZDQWdJSHdnZkZ4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHdnS3kwdExTc2dLeTB0TFNzZ0lDQXJMUzB0TFMwdExTMHRLeUFnSUNzdExTMHJJQ3N0TFMwcklIeGNiaUFxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOElDQnBibWwwYVdGc2FYcGxJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYkc5elpTQWdJQ0I4WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdLeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdEsxeHVJQ29nUEM5d2NtVStYRzRnS2x4dUlDb2dWWE5sSUdOaGMyVnpPbHh1SUNvZ0xTQlFjbVZ6WlhKMmFXNW5JSFJvWlNCcGJuQjFkQ0J6Wld4bFkzUnBiMjRnY21GdVoyVnpJR0psWm05eVpTOWhablJsY2lCeVpXTnZibU5wYkdsaGRHbHZiaTVjYmlBcUlDQWdVbVZ6ZEc5eWFXNW5JSE5sYkdWamRHbHZiaUJsZG1WdUlHbHVJSFJvWlNCbGRtVnVkQ0J2WmlCaGJpQjFibVY0Y0dWamRHVmtJR1Z5Y205eUxseHVJQ29nTFNCRVpXRmpkR2wyWVhScGJtY2daWFpsYm5SeklIZG9hV3hsSUhKbFlYSnlZVzVuYVc1bklIUm9aU0JFVDAwc0lIQnlaWFpsYm5ScGJtY2dZbXgxY25NdlptOWpkWE5sY3l4Y2JpQXFJQ0FnZDJocGJHVWdaM1ZoY21GdWRHVmxhVzVuSUhSb1lYUWdZV1owWlhKM1lYSmtjeXdnZEdobElHVjJaVzUwSUhONWMzUmxiU0JwY3lCeVpXRmpkR2wyWVhSbFpDNWNiaUFxSUMwZ1JteDFjMmhwYm1jZ1lTQnhkV1YxWlNCdlppQmpiMnhzWldOMFpXUWdSRTlOSUcxMWRHRjBhVzl1Y3lCMGJ5QjBhR1VnYldGcGJpQlZTU0IwYUhKbFlXUWdZV1owWlhJZ1lWeHVJQ29nSUNCeVpXTnZibU5wYkdsaGRHbHZiaUIwWVd0bGN5QndiR0ZqWlNCcGJpQmhJSGR2Y210bGNpQjBhSEpsWVdRdVhHNGdLaUF0SUVsdWRtOXJhVzVuSUdGdWVTQmpiMnhzWldOMFpXUWdZR052YlhCdmJtVnVkRVJwWkZWd1pHRjBaV0FnWTJGc2JHSmhZMnR6SUdGbWRHVnlJSEpsYm1SbGNtbHVaeUJ1WlhkY2JpQXFJQ0FnWTI5dWRHVnVkQzVjYmlBcUlDMGdLRVoxZEhWeVpTQjFjMlVnWTJGelpTazZJRmR5WVhCd2FXNW5JSEJoY25ScFkzVnNZWElnWm14MWMyaGxjeUJ2WmlCMGFHVWdZRkpsWVdOMFYyOXlhMlZ5WUNCeGRXVjFaVnh1SUNvZ0lDQjBieUJ3Y21WelpYSjJaU0IwYUdVZ1lITmpjbTlzYkZSdmNHQWdLR0Z1SUdGMWRHOXRZWFJwWXlCelkzSnZiR3dnWVhkaGNtVWdSRTlOS1M1Y2JpQXFJQzBnS0VaMWRIVnlaU0IxYzJVZ1kyRnpaU2s2SUV4aGVXOTFkQ0JqWVd4amRXeGhkR2x2Ym5NZ1ltVm1iM0psSUdGdVpDQmhablJsY2lCRVQwMGdkWEJrWVhSbGN5NWNiaUFxWEc0Z0tpQlVjbUZ1YzJGamRHbHZibUZzSUhCc2RXZHBiaUJCVUVrNlhHNGdLaUF0SUVFZ2JXOWtkV3hsSUhSb1lYUWdhR0Z6SUdGdUlHQnBibWwwYVdGc2FYcGxZQ0J0WlhSb2IyUWdkR2hoZENCeVpYUjFjbTV6SUdGdWVTQndjbVZqYjIxd2RYUmhkR2x2Ymk1Y2JpQXFJQzBnWVc1a0lHRWdZR05zYjNObFlDQnRaWFJvYjJRZ2RHaGhkQ0JoWTJObGNIUnpJSFJvWlNCd2NtVmpiMjF3ZFhSaGRHbHZiaTRnWUdOc2IzTmxZQ0JwY3lCcGJuWnZhMlZrWEc0Z0tpQWdJSGRvWlc0Z2RHaGxJSGR5WVhCd1pXUWdjSEp2WTJWemN5QnBjeUJqYjIxd2JHVjBaV1FzSUc5eUlHaGhjeUJtWVdsc1pXUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdEJjbkpoZVR4VWNtRnVjMkZqZEdsdmJtRnNWM0poY0hCbGNqNTlJSFJ5WVc1ellXTjBhVzl1VjNKaGNIQmxjaUJYY21Gd2NHVnlJRzF2WkhWc1pYTmNiaUFxSUhSb1lYUWdhVzF3YkdWdFpXNTBJR0JwYm1sMGFXRnNhWHBsWUNCaGJtUWdZR05zYjNObFlDNWNiaUFxSUVCeVpYUjFjbTRnZTFSeVlXNXpZV04wYVc5dWZTQlRhVzVuYkdVZ2RISmhibk5oWTNScGIyNGdabTl5SUhKbGRYTmxJR2x1SUhSb2NtVmhaQzVjYmlBcVhHNGdLaUJBWTJ4aGMzTWdWSEpoYm5OaFkzUnBiMjVjYmlBcUwxeHVkbUZ5SUUxcGVHbHVJRDBnZTF4dUlDQXZLaXBjYmlBZ0lDb2dVMlYwY3lCMWNDQjBhR2x6SUdsdWMzUmhibU5sSUhOdklIUm9ZWFFnYVhRZ2FYTWdjSEpsY0dGeVpXUWdabTl5SUdOdmJHeGxZM1JwYm1jZ2JXVjBjbWxqY3k0Z1JHOWxjMXh1SUNBZ0tpQnpieUJ6ZFdOb0lIUm9ZWFFnZEdocGN5QnpaWFIxY0NCdFpYUm9iMlFnYldGNUlHSmxJSFZ6WldRZ2IyNGdZVzRnYVc1emRHRnVZMlVnZEdoaGRDQnBjeUJoYkhKbFlXUjVYRzRnSUNBcUlHbHVhWFJwWVd4cGVtVmtMQ0JwYmlCaElIZGhlU0IwYUdGMElHUnZaWE1nYm05MElHTnZibk4xYldVZ1lXUmthWFJwYjI1aGJDQnRaVzF2Y25rZ2RYQnZiaUJ5WlhWelpTNWNiaUFnSUNvZ1ZHaGhkQ0JqWVc0Z1ltVWdkWE5sWm5Wc0lHbG1JSGx2ZFNCa1pXTnBaR1VnZEc4Z2JXRnJaU0I1YjNWeUlITjFZbU5zWVhOeklHOW1JSFJvYVhNZ2JXbDRhVzRnWVZ4dUlDQWdLaUJjSWxCdmIyeGxaRU5zWVhOelhDSXVYRzRnSUNBcUwxeHVJQ0J5WldsdWFYUnBZV3hwZW1WVWNtRnVjMkZqZEdsdmJqb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1MGNtRnVjMkZqZEdsdmJsZHlZWEJ3WlhKeklEMGdkR2hwY3k1blpYUlVjbUZ1YzJGamRHbHZibGR5WVhCd1pYSnpLQ2s3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbmR5WVhCd1pYSkpibWwwUkdGMFlTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1M2NtRndjR1Z5U1c1cGRFUmhkR0VnUFNCYlhUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NTNjbUZ3Y0dWeVNXNXBkRVJoZEdFdWJHVnVaM1JvSUQwZ01EdGNiaUFnSUNCOVhHNGdJQ0FnZEdocGN5NWZhWE5KYmxSeVlXNXpZV04wYVc5dUlEMGdabUZzYzJVN1hHNGdJSDBzWEc1Y2JpQWdYMmx6U1c1VWNtRnVjMkZqZEdsdmJqb2dabUZzYzJVc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCaFluTjBjbUZqZEZ4dUlDQWdLaUJBY21WMGRYSnVJSHRCY25KaGVUeFVjbUZ1YzJGamRHbHZibGR5WVhCd1pYSStmU0JCY25KaGVTQnZaaUIwY21GdWMyRmpkR2x2YmlCM2NtRndjR1Z5Y3k1Y2JpQWdJQ292WEc0Z0lHZGxkRlJ5WVc1ellXTjBhVzl1VjNKaGNIQmxjbk02SUc1MWJHd3NYRzVjYmlBZ2FYTkpibFJ5WVc1ellXTjBhVzl1T2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCeVpYUjFjbTRnSVNGMGFHbHpMbDlwYzBsdVZISmhibk5oWTNScGIyNDdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVWNFpXTjFkR1Z6SUhSb1pTQm1kVzVqZEdsdmJpQjNhWFJvYVc0Z1lTQnpZV1psZEhrZ2QybHVaRzkzTGlCVmMyVWdkR2hwY3lCbWIzSWdkR2hsSUhSdmNDQnNaWFpsYkZ4dUlDQWdLaUJ0WlhSb2IyUnpJSFJvWVhRZ2NtVnpkV3gwSUdsdUlHeGhjbWRsSUdGdGIzVnVkSE1nYjJZZ1kyOXRjSFYwWVhScGIyNHZiWFYwWVhScGIyNXpJSFJvWVhRZ2QyOTFiR1JjYmlBZ0lDb2dibVZsWkNCMGJ5QmlaU0J6WVdabGRIa2dZMmhsWTJ0bFpDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnYldWMGFHOWtJRTFsYldKbGNpQnZaaUJ6WTI5d1pTQjBieUJqWVd4c0xseHVJQ0FnS2lCQWNHRnlZVzBnZTA5aWFtVmpkSDBnYzJOdmNHVWdVMk52Y0dVZ2RHOGdhVzUyYjJ0bElHWnliMjB1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdUMkpxWldOMFB6MTlJR0Z5WjNNdUxpNGdRWEpuZFcxbGJuUnpJSFJ2SUhCaGMzTWdkRzhnZEdobElHMWxkR2h2WkNBb2IzQjBhVzl1WVd3cExseHVJQ0FnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUVobGJIQnpJSEJ5WlhabGJuUWdibVZsWkNCMGJ5QmlhVzVrSUdsdUlHMWhibmtnWTJGelpYTXVYRzRnSUNBcUlFQnlaWFIxY200Z1VtVjBkWEp1SUhaaGJIVmxJR1p5YjIwZ1lHMWxkR2h2WkdBdVhHNGdJQ0FxTDF4dUlDQndaWEptYjNKdE9pQm1kVzVqZEdsdmJpaHRaWFJvYjJRc0lITmpiM0JsTENCaExDQmlMQ0JqTENCa0xDQmxMQ0JtS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0YwYUdsekxtbHpTVzVVY21GdWMyRmpkR2x2YmlncExGeHVJQ0FnSUNBZ0oxUnlZVzV6WVdOMGFXOXVMbkJsY21admNtMG9MaTR1S1RvZ1EyRnVibTkwSUdsdWFYUnBZV3hwZW1VZ1lTQjBjbUZ1YzJGamRHbHZiaUIzYUdWdUlIUm9aWEpsSUNjZ0sxeHVJQ0FnSUNBZ0oybHpJR0ZzY21WaFpIa2dZVzRnYjNWMGMzUmhibVJwYm1jZ2RISmhibk5oWTNScGIyNHVKMXh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVhSb2FYTXVhWE5KYmxSeVlXNXpZV04wYVc5dUtDa3BLVHRjYmlBZ0lDQjJZWElnWlhKeWIzSlVhSEp2ZDI0N1hHNGdJQ0FnZG1GeUlISmxkRHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnZEdocGN5NWZhWE5KYmxSeVlXNXpZV04wYVc5dUlEMGdkSEoxWlR0Y2JpQWdJQ0FnSUM4dklFTmhkR05vYVc1bklHVnljbTl5Y3lCdFlXdGxjeUJrWldKMVoyZHBibWNnYlc5eVpTQmthV1ptYVdOMWJIUXNJSE52SUhkbElITjBZWEowSUhkcGRHaGNiaUFnSUNBZ0lDOHZJR1Z5Y205eVZHaHliM2R1SUhObGRDQjBieUIwY25WbElHSmxabTl5WlNCelpYUjBhVzVuSUdsMElIUnZJR1poYkhObElHRm1kR1Z5SUdOaGJHeHBibWRjYmlBZ0lDQWdJQzh2SUdOc2IzTmxJQzB0SUdsbUlHbDBKM01nYzNScGJHd2djMlYwSUhSdklIUnlkV1VnYVc0Z2RHaGxJR1pwYm1Gc2JIa2dZbXh2WTJzc0lHbDBJRzFsWVc1elhHNGdJQ0FnSUNBdkx5QnZibVVnYjJZZ2RHaGxjMlVnWTJGc2JITWdkR2h5WlhjdVhHNGdJQ0FnSUNCbGNuSnZjbFJvY205M2JpQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCMGFHbHpMbWx1YVhScFlXeHBlbVZCYkd3b01DazdYRzRnSUNBZ0lDQnlaWFFnUFNCdFpYUm9iMlF1WTJGc2JDaHpZMjl3WlN3Z1lTd2dZaXdnWXl3Z1pDd2daU3dnWmlrN1hHNGdJQ0FnSUNCbGNuSnZjbFJvY205M2JpQTlJR1poYkhObE8xeHVJQ0FnSUgwZ1ptbHVZV3hzZVNCN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pYSnliM0pVYUhKdmQyNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QkpaaUJnYldWMGFHOWtZQ0IwYUhKdmQzTXNJSEJ5WldabGNpQjBieUJ6YUc5M0lIUm9ZWFFnYzNSaFkyc2dkSEpoWTJVZ2IzWmxjaUJoYm5rZ2RHaHliM2R1WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdZbmtnYVc1MmIydHBibWNnWUdOc2IzTmxRV3hzWUM1Y2JpQWdJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1amJHOXpaVUZzYkNnd0tUdGNiaUFnSUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsY25JcElIdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdVMmx1WTJVZ1lHMWxkR2h2WkdBZ1pHbGtiaWQwSUhSb2NtOTNMQ0IzWlNCa2IyNG5kQ0IzWVc1MElIUnZJSE5wYkdWdVkyVWdkR2hsSUdWNFkyVndkR2x2Ymx4dUlDQWdJQ0FnSUNBZ0lDOHZJR2hsY21VdVhHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1amJHOXpaVUZzYkNnd0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWZhWE5KYmxSeVlXNXpZV04wYVc5dUlEMGdabUZzYzJVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnlaWFE3WEc0Z0lIMHNYRzVjYmlBZ2FXNXBkR2xoYkdsNlpVRnNiRG9nWm5WdVkzUnBiMjRvYzNSaGNuUkpibVJsZUNrZ2UxeHVJQ0FnSUhaaGNpQjBjbUZ1YzJGamRHbHZibGR5WVhCd1pYSnpJRDBnZEdocGN5NTBjbUZ1YzJGamRHbHZibGR5WVhCd1pYSnpPMXh1SUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0J6ZEdGeWRFbHVaR1Y0T3lCcElEd2dkSEpoYm5OaFkzUnBiMjVYY21Gd2NHVnljeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2RtRnlJSGR5WVhCd1pYSWdQU0IwY21GdWMyRmpkR2x2YmxkeVlYQndaWEp6VzJsZE8xeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1EyRjBZMmhwYm1jZ1pYSnliM0p6SUcxaGEyVnpJR1JsWW5WbloybHVaeUJ0YjNKbElHUnBabVpwWTNWc2RDd2djMjhnZDJVZ2MzUmhjblFnZDJsMGFDQjBhR1ZjYmlBZ0lDQWdJQ0FnTHk4Z1QwSlRSVkpXUlVSZlJWSlNUMUlnYzNSaGRHVWdZbVZtYjNKbElHOTJaWEozY21sMGFXNW5JR2wwSUhkcGRHZ2dkR2hsSUhKbFlXd2djbVYwZFhKdUlIWmhiSFZsWEc0Z0lDQWdJQ0FnSUM4dklHOW1JR2x1YVhScFlXeHBlbVVnTFMwZ2FXWWdhWFFuY3lCemRHbHNiQ0J6WlhRZ2RHOGdUMEpUUlZKV1JVUmZSVkpTVDFJZ2FXNGdkR2hsSUdacGJtRnNiSGxjYmlBZ0lDQWdJQ0FnTHk4Z1lteHZZMnNzSUdsMElHMWxZVzV6SUhkeVlYQndaWEl1YVc1cGRHbGhiR2w2WlNCMGFISmxkeTVjYmlBZ0lDQWdJQ0FnZEdocGN5NTNjbUZ3Y0dWeVNXNXBkRVJoZEdGYmFWMGdQU0JVY21GdWMyRmpkR2x2Ymk1UFFsTkZVbFpGUkY5RlVsSlBVanRjYmlBZ0lDQWdJQ0FnZEdocGN5NTNjbUZ3Y0dWeVNXNXBkRVJoZEdGYmFWMGdQU0IzY21Gd2NHVnlMbWx1YVhScFlXeHBlbVVnUDF4dUlDQWdJQ0FnSUNBZ0lIZHlZWEJ3WlhJdWFXNXBkR2xoYkdsNlpTNWpZV3hzS0hSb2FYTXBJRHBjYmlBZ0lDQWdJQ0FnSUNCdWRXeHNPMXh1SUNBZ0lDQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11ZDNKaGNIQmxja2x1YVhSRVlYUmhXMmxkSUQwOVBTQlVjbUZ1YzJGamRHbHZiaTVQUWxORlVsWkZSRjlGVWxKUFVpa2dlMXh1SUNBZ0lDQWdJQ0FnSUM4dklGUm9aU0JwYm1sMGFXRnNhWHBsY2lCbWIzSWdkM0poY0hCbGNpQnBJSFJvY21WM0lHRnVJR1Z5Y205eU95QnBibWwwYVdGc2FYcGxJSFJvWlZ4dUlDQWdJQ0FnSUNBZ0lDOHZJSEpsYldGcGJtbHVaeUIzY21Gd2NHVnljeUJpZFhRZ2MybHNaVzVqWlNCaGJua2daWGhqWlhCMGFXOXVjeUJtY205dElIUm9aVzBnZEc4Z1pXNXpkWEpsWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkR2hoZENCMGFHVWdabWx5YzNRZ1pYSnliM0lnYVhNZ2RHaGxJRzl1WlNCMGJ5QmlkV0ppYkdVZ2RYQXVYRzRnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVhVzVwZEdsaGJHbDZaVUZzYkNocElDc2dNU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pYSnlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJKYm5admEyVnpJR1ZoWTJnZ2IyWWdZSFJvYVhNdWRISmhibk5oWTNScGIyNVhjbUZ3Y0dWeWN5NWpiRzl6WlZ0cFhXQWdablZ1WTNScGIyNXpMQ0J3WVhOemFXNW5JR2x1ZEc5Y2JpQWdJQ29nZEdobGJTQjBhR1VnY21WemNHVmpkR2wyWlNCeVpYUjFjbTRnZG1Gc2RXVnpJRzltSUdCMGFHbHpMblJ5WVc1ellXTjBhVzl1VjNKaGNIQmxjbk11YVc1cGRGdHBYV0JjYmlBZ0lDb2dLR0JqYkc5elpXQnljeUIwYUdGMElHTnZjbkpsYzNCdmJtUWdkRzhnYVc1cGRHbGhiR2w2WlhKeklIUm9ZWFFnWm1GcGJHVmtJSGRwYkd3Z2JtOTBJR0psWEc0Z0lDQXFJR2x1ZG05clpXUXBMbHh1SUNBZ0tpOWNiaUFnWTJ4dmMyVkJiR3c2SUdaMWJtTjBhVzl1S0hOMFlYSjBTVzVrWlhncElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnZEdocGN5NXBjMGx1VkhKaGJuTmhZM1JwYjI0b0tTeGNiaUFnSUNBZ0lDZFVjbUZ1YzJGamRHbHZiaTVqYkc5elpVRnNiQ2dwT2lCRFlXNXViM1FnWTJ4dmMyVWdkSEpoYm5OaFkzUnBiMjRnZDJobGJpQnViMjVsSUdGeVpTQnZjR1Z1TGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIUm9hWE11YVhOSmJsUnlZVzV6WVdOMGFXOXVLQ2twS1R0Y2JpQWdJQ0IyWVhJZ2RISmhibk5oWTNScGIyNVhjbUZ3Y0dWeWN5QTlJSFJvYVhNdWRISmhibk5oWTNScGIyNVhjbUZ3Y0dWeWN6dGNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdjM1JoY25SSmJtUmxlRHNnYVNBOElIUnlZVzV6WVdOMGFXOXVWM0poY0hCbGNuTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUhaaGNpQjNjbUZ3Y0dWeUlEMGdkSEpoYm5OaFkzUnBiMjVYY21Gd2NHVnljMXRwWFR0Y2JpQWdJQ0FnSUhaaGNpQnBibWwwUkdGMFlTQTlJSFJvYVhNdWQzSmhjSEJsY2tsdWFYUkVZWFJoVzJsZE8xeHVJQ0FnSUNBZ2RtRnlJR1Z5Y205eVZHaHliM2R1TzF4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdMeThnUTJGMFkyaHBibWNnWlhKeWIzSnpJRzFoYTJWeklHUmxZblZuWjJsdVp5QnRiM0psSUdScFptWnBZM1ZzZEN3Z2MyOGdkMlVnYzNSaGNuUWdkMmwwYUZ4dUlDQWdJQ0FnSUNBdkx5Qmxjbkp2Y2xSb2NtOTNiaUJ6WlhRZ2RHOGdkSEoxWlNCaVpXWnZjbVVnYzJWMGRHbHVaeUJwZENCMGJ5Qm1ZV3h6WlNCaFpuUmxjaUJqWVd4c2FXNW5YRzRnSUNBZ0lDQWdJQzh2SUdOc2IzTmxJQzB0SUdsbUlHbDBKM01nYzNScGJHd2djMlYwSUhSdklIUnlkV1VnYVc0Z2RHaGxJR1pwYm1Gc2JIa2dZbXh2WTJzc0lHbDBJRzFsWVc1elhHNGdJQ0FnSUNBZ0lDOHZJSGR5WVhCd1pYSXVZMnh2YzJVZ2RHaHlaWGN1WEc0Z0lDQWdJQ0FnSUdWeWNtOXlWR2h5YjNkdUlEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2x1YVhSRVlYUmhJQ0U5UFNCVWNtRnVjMkZqZEdsdmJpNVBRbE5GVWxaRlJGOUZVbEpQVWlBbUppQjNjbUZ3Y0dWeUxtTnNiM05sS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkM0poY0hCbGNpNWpiRzl6WlM1allXeHNLSFJvYVhNc0lHbHVhWFJFWVhSaEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JsY25KdmNsUm9jbTkzYmlBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnZlNCbWFXNWhiR3g1SUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1Z5Y205eVZHaHliM2R1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVkdobElHTnNiM05sY2lCbWIzSWdkM0poY0hCbGNpQnBJSFJvY21WM0lHRnVJR1Z5Y205eU95QmpiRzl6WlNCMGFHVWdjbVZ0WVdsdWFXNW5YRzRnSUNBZ0lDQWdJQ0FnTHk4Z2QzSmhjSEJsY25NZ1luVjBJSE5wYkdWdVkyVWdZVzU1SUdWNFkyVndkR2x2Ym5NZ1puSnZiU0IwYUdWdElIUnZJR1Z1YzNWeVpTQjBhR0YwSUhSb1pWeHVJQ0FnSUNBZ0lDQWdJQzh2SUdacGNuTjBJR1Z5Y205eUlHbHpJSFJvWlNCdmJtVWdkRzhnWW5WaVlteGxJSFZ3TGx4dUlDQWdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1Oc2IzTmxRV3hzS0drZ0t5QXhLVHRjYmlBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWQzSmhjSEJsY2tsdWFYUkVZWFJoTG14bGJtZDBhQ0E5SURBN1hHNGdJSDFjYm4wN1hHNWNiblpoY2lCVWNtRnVjMkZqZEdsdmJpQTlJSHRjYmx4dUlDQk5hWGhwYmpvZ1RXbDRhVzRzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJ2YTJWdUlIUnZJR3h2YjJzZ1ptOXlJSFJ2SUdSbGRHVnliV2x1WlNCcFppQmhiaUJsY25KdmNpQnZZMk4xY21Wa0xseHVJQ0FnS2k5Y2JpQWdUMEpUUlZKV1JVUmZSVkpTVDFJNklIdDlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdWSEpoYm5OaFkzUnBiMjQ3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgVmlld3BvcnRNZXRyaWNzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgVmlld3BvcnRNZXRyaWNzID0ge1xuXG4gIGN1cnJlbnRTY3JvbGxMZWZ0OiAwLFxuXG4gIGN1cnJlbnRTY3JvbGxUb3A6IDAsXG5cbiAgcmVmcmVzaFNjcm9sbFZhbHVlczogZnVuY3Rpb24oc2Nyb2xsUG9zaXRpb24pIHtcbiAgICBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbExlZnQgPSBzY3JvbGxQb3NpdGlvbi54O1xuICAgIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsVG9wID0gc2Nyb2xsUG9zaXRpb24ueTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXdwb3J0TWV0cmljcztcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgYWNjdW11bGF0ZUludG9cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICpcbiAqIEFjY3VtdWxhdGVzIGl0ZW1zIHRoYXQgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQgaW50byB0aGUgZmlyc3Qgb25lLiBUaGlzXG4gKiBpcyB1c2VkIHRvIGNvbnNlcnZlIG1lbW9yeSBieSBhdm9pZGluZyBhcnJheSBhbGxvY2F0aW9ucywgYW5kIHRodXMgc2FjcmlmaWNlc1xuICogQVBJIGNsZWFubmVzcy4gU2luY2UgYGN1cnJlbnRgIGNhbiBiZSBudWxsIGJlZm9yZSBiZWluZyBwYXNzZWQgaW4gYW5kIG5vdFxuICogbnVsbCBhZnRlciB0aGlzIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gYXNzaWduIGl0IGJhY2sgdG8gYGN1cnJlbnRgOlxuICpcbiAqIGBhID0gYWNjdW11bGF0ZUludG8oYSwgYik7YFxuICpcbiAqIFRoaXMgQVBJIHNob3VsZCBiZSBzcGFyaW5nbHkgdXNlZC4gVHJ5IGBhY2N1bXVsYXRlYCBmb3Igc29tZXRoaW5nIGNsZWFuZXIuXG4gKlxuICogQHJldHVybiB7KnxhcnJheTwqPn0gQW4gYWNjdW11bGF0aW9uIG9mIGl0ZW1zLlxuICovXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVJbnRvKGN1cnJlbnQsIG5leHQpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBuZXh0ICE9IG51bGwsXG4gICAgJ2FjY3VtdWxhdGVJbnRvKC4uLik6IEFjY3VtdWxhdGVkIGl0ZW1zIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLidcbiAgKSA6IGludmFyaWFudChuZXh0ICE9IG51bGwpKTtcbiAgaWYgKGN1cnJlbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgLy8gQm90aCBhcmUgbm90IGVtcHR5LiBXYXJuaW5nOiBOZXZlciBjYWxsIHguY29uY2F0KHkpIHdoZW4geW91IGFyZSBub3RcbiAgLy8gY2VydGFpbiB0aGF0IHggaXMgYW4gQXJyYXkgKHggY291bGQgYmUgYSBzdHJpbmcgd2l0aCBjb25jYXQgbWV0aG9kKS5cbiAgdmFyIGN1cnJlbnRJc0FycmF5ID0gQXJyYXkuaXNBcnJheShjdXJyZW50KTtcbiAgdmFyIG5leHRJc0FycmF5ID0gQXJyYXkuaXNBcnJheShuZXh0KTtcblxuICBpZiAoY3VycmVudElzQXJyYXkgJiYgbmV4dElzQXJyYXkpIHtcbiAgICBjdXJyZW50LnB1c2guYXBwbHkoY3VycmVudCwgbmV4dCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBpZiAoY3VycmVudElzQXJyYXkpIHtcbiAgICBjdXJyZW50LnB1c2gobmV4dCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBpZiAobmV4dElzQXJyYXkpIHtcbiAgICAvLyBBIGJpdCB0b28gZGFuZ2Vyb3VzIHRvIG11dGF0ZSBgbmV4dGAuXG4gICAgcmV0dXJuIFtjdXJyZW50XS5jb25jYXQobmV4dCk7XG4gIH1cblxuICByZXR1cm4gW2N1cnJlbnQsIG5leHRdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY3VtdWxhdGVJbnRvO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2WVdOamRXMTFiR0YwWlVsdWRHOHVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhOQzB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJR0ZqWTNWdGRXeGhkR1ZKYm5SdlhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc0dktpcGNiaUFxWEc0Z0tpQkJZMk4xYlhWc1lYUmxjeUJwZEdWdGN5QjBhR0YwSUcxMWMzUWdibTkwSUdKbElHNTFiR3dnYjNJZ2RXNWtaV1pwYm1Wa0lHbHVkRzhnZEdobElHWnBjbk4wSUc5dVpTNGdWR2hwYzF4dUlDb2dhWE1nZFhObFpDQjBieUJqYjI1elpYSjJaU0J0WlcxdmNua2dZbmtnWVhadmFXUnBibWNnWVhKeVlYa2dZV3hzYjJOaGRHbHZibk1zSUdGdVpDQjBhSFZ6SUhOaFkzSnBabWxqWlhOY2JpQXFJRUZRU1NCamJHVmhibTVsYzNNdUlGTnBibU5sSUdCamRYSnlaVzUwWUNCallXNGdZbVVnYm5Wc2JDQmlaV1p2Y21VZ1ltVnBibWNnY0dGemMyVmtJR2x1SUdGdVpDQnViM1JjYmlBcUlHNTFiR3dnWVdaMFpYSWdkR2hwY3lCbWRXNWpkR2x2Yml3Z2JXRnJaU0J6ZFhKbElIUnZJR0Z6YzJsbmJpQnBkQ0JpWVdOcklIUnZJR0JqZFhKeVpXNTBZRHBjYmlBcVhHNGdLaUJnWVNBOUlHRmpZM1Z0ZFd4aGRHVkpiblJ2S0dFc0lHSXBPMkJjYmlBcVhHNGdLaUJVYUdseklFRlFTU0J6YUc5MWJHUWdZbVVnYzNCaGNtbHVaMng1SUhWelpXUXVJRlJ5ZVNCZ1lXTmpkVzExYkdGMFpXQWdabTl5SUhOdmJXVjBhR2x1WnlCamJHVmhibVZ5TGx4dUlDcGNiaUFxSUVCeVpYUjFjbTRnZXlwOFlYSnlZWGs4S2o1OUlFRnVJR0ZqWTNWdGRXeGhkR2x2YmlCdlppQnBkR1Z0Y3k1Y2JpQXFMMXh1WEc1bWRXNWpkR2x2YmlCaFkyTjFiWFZzWVhSbFNXNTBieWhqZFhKeVpXNTBMQ0J1WlhoMEtTQjdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdibVY0ZENBaFBTQnVkV3hzTEZ4dUlDQWdJQ2RoWTJOMWJYVnNZWFJsU1c1MGJ5Z3VMaTRwT2lCQlkyTjFiWFZzWVhSbFpDQnBkR1Z0Y3lCdGRYTjBJRzV2ZENCaVpTQnVkV3hzSUc5eUlIVnVaR1ZtYVc1bFpDNG5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9ibVY0ZENBaFBTQnVkV3hzS1NrN1hHNGdJR2xtSUNoamRYSnlaVzUwSUQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdibVY0ZER0Y2JpQWdmVnh1WEc0Z0lDOHZJRUp2ZEdnZ1lYSmxJRzV2ZENCbGJYQjBlUzRnVjJGeWJtbHVaem9nVG1WMlpYSWdZMkZzYkNCNExtTnZibU5oZENoNUtTQjNhR1Z1SUhsdmRTQmhjbVVnYm05MFhHNGdJQzh2SUdObGNuUmhhVzRnZEdoaGRDQjRJR2x6SUdGdUlFRnljbUY1SUNoNElHTnZkV3hrSUdKbElHRWdjM1J5YVc1bklIZHBkR2dnWTI5dVkyRjBJRzFsZEdodlpDa3VYRzRnSUhaaGNpQmpkWEp5Wlc1MFNYTkJjbkpoZVNBOUlFRnljbUY1TG1selFYSnlZWGtvWTNWeWNtVnVkQ2s3WEc0Z0lIWmhjaUJ1WlhoMFNYTkJjbkpoZVNBOUlFRnljbUY1TG1selFYSnlZWGtvYm1WNGRDazdYRzVjYmlBZ2FXWWdLR04xY25KbGJuUkpjMEZ5Y21GNUlDWW1JRzVsZUhSSmMwRnljbUY1S1NCN1hHNGdJQ0FnWTNWeWNtVnVkQzV3ZFhOb0xtRndjR3g1S0dOMWNuSmxiblFzSUc1bGVIUXBPMXh1SUNBZ0lISmxkSFZ5YmlCamRYSnlaVzUwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR04xY25KbGJuUkpjMEZ5Y21GNUtTQjdYRzRnSUNBZ1kzVnljbVZ1ZEM1d2RYTm9LRzVsZUhRcE8xeHVJQ0FnSUhKbGRIVnliaUJqZFhKeVpXNTBPMXh1SUNCOVhHNWNiaUFnYVdZZ0tHNWxlSFJKYzBGeWNtRjVLU0I3WEc0Z0lDQWdMeThnUVNCaWFYUWdkRzl2SUdSaGJtZGxjbTkxY3lCMGJ5QnRkWFJoZEdVZ1lHNWxlSFJnTGx4dUlDQWdJSEpsZEhWeWJpQmJZM1Z5Y21WdWRGMHVZMjl1WTJGMEtHNWxlSFFwTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUZ0amRYSnlaVzUwTENCdVpYaDBYVHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQmhZMk4xYlhWc1lYUmxTVzUwYnp0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGFkbGVyMzJcbiAqL1xuXG4vKiBqc2xpbnQgYml0d2lzZTp0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIE1PRCA9IDY1NTIxO1xuXG4vLyBUaGlzIGlzIGEgY2xlYW4tcm9vbSBpbXBsZW1lbnRhdGlvbiBvZiBhZGxlcjMyIGRlc2lnbmVkIGZvciBkZXRlY3Rpbmdcbi8vIGlmIG1hcmt1cCBpcyBub3Qgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmUuIEl0IGRvZXMgbm90IG5lZWQgdG8gYmVcbi8vIGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZywgb25seSByZWFzb25hYmx5IGdvb2QgYXQgZGV0ZWN0aW5nIGlmIG1hcmt1cFxuLy8gZ2VuZXJhdGVkIG9uIHRoZSBzZXJ2ZXIgaXMgZGlmZmVyZW50IHRoYW4gdGhhdCBvbiB0aGUgY2xpZW50LlxuZnVuY3Rpb24gYWRsZXIzMihkYXRhKSB7XG4gIHZhciBhID0gMTtcbiAgdmFyIGIgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBhID0gKGEgKyBkYXRhLmNoYXJDb2RlQXQoaSkpICUgTU9EO1xuICAgIGIgPSAoYiArIGEpICUgTU9EO1xuICB9XG4gIHJldHVybiBhIHwgKGIgPDwgMTYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFkbGVyMzI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgY2FtZWxpemVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIF9oeXBoZW5QYXR0ZXJuID0gLy0oLikvZztcblxuLyoqXG4gKiBDYW1lbGNhc2VzIGEgaHlwaGVuYXRlZCBzdHJpbmcsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBjYW1lbGl6ZSgnYmFja2dyb3VuZC1jb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY2FtZWxpemUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShfaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24oXywgY2hhcmFjdGVyKSB7XG4gICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYW1lbGl6ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBjYW1lbGl6ZVN0eWxlTmFtZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGNhbWVsaXplID0gcmVxdWlyZShcIi4vY2FtZWxpemVcIik7XG5cbnZhciBtc1BhdHRlcm4gPSAvXi1tcy0vO1xuXG4vKipcbiAqIENhbWVsY2FzZXMgYSBoeXBoZW5hdGVkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gY2FtZWxpemVTdHlsZU5hbWUoJ2JhY2tncm91bmQtY29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAqICAgPiBjYW1lbGl6ZVN0eWxlTmFtZSgnLW1vei10cmFuc2l0aW9uJylcbiAqICAgPCBcIk1velRyYW5zaXRpb25cIlxuICogICA+IGNhbWVsaXplU3R5bGVOYW1lKCctbXMtdHJhbnNpdGlvbicpXG4gKiAgIDwgXCJtc1RyYW5zaXRpb25cIlxuICpcbiAqIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAqIChodHRwOi8vd3d3LmFuZGlzbWl0aC5jb20vYmxvZy8yMDEyLzAyL21vZGVybml6ci1wcmVmaXhlZC8pLCBhbiBgLW1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNhbWVsaXplU3R5bGVOYW1lKHN0cmluZykge1xuICByZXR1cm4gY2FtZWxpemUoc3RyaW5nLnJlcGxhY2UobXNQYXR0ZXJuLCAnbXMtJykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbWVsaXplU3R5bGVOYW1lO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGNvbnRhaW5zTm9kZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgaXNUZXh0Tm9kZSA9IHJlcXVpcmUoXCIuL2lzVGV4dE5vZGVcIik7XG5cbi8qanNsaW50IGJpdHdpc2U6dHJ1ZSAqL1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIERPTSBub2RlIGNvbnRhaW5zIG9yIGlzIGFub3RoZXIgRE9NIG5vZGUuXG4gKlxuICogQHBhcmFtIHs/RE9NTm9kZX0gb3V0ZXJOb2RlIE91dGVyIERPTSBub2RlLlxuICogQHBhcmFtIHs/RE9NTm9kZX0gaW5uZXJOb2RlIElubmVyIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb3V0ZXJOb2RlYCBjb250YWlucyBvciBpcyBgaW5uZXJOb2RlYC5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gIGlmICghb3V0ZXJOb2RlIHx8ICFpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlID09PSBpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG91dGVyTm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShpbm5lck5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUuY29udGFpbnMpIHtcbiAgICByZXR1cm4gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSk7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuICEhKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpbm5lck5vZGUpICYgMTYpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnRhaW5zTm9kZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBjcmVhdGVBcnJheUZyb21NaXhlZFxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgdG9BcnJheSA9IHJlcXVpcmUoXCIuL3RvQXJyYXlcIik7XG5cbi8qKlxuICogUGVyZm9ybSBhIGhldXJpc3RpYyB0ZXN0IHRvIGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgXCJhcnJheS1saWtlXCIuXG4gKlxuICogICBBIG1vbmsgYXNrZWQgSm9zaHUsIGEgWmVuIG1hc3RlciwgXCJIYXMgYSBkb2cgQnVkZGhhIG5hdHVyZT9cIlxuICogICBKb3NodSByZXBsaWVkOiBcIk11LlwiXG4gKlxuICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGl0cyBhcmd1bWVudCBoYXMgXCJhcnJheSBuYXR1cmVcIjogaXQgcmV0dXJuc1xuICogdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYWN0dWFsIGFycmF5LCBhbiBgYXJndW1lbnRzJyBvYmplY3QsIG9yIGFuXG4gKiBIVE1MQ29sbGVjdGlvbiAoZS5nLiBub2RlLmNoaWxkTm9kZXMgb3Igbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgpKS5cbiAqXG4gKiBJdCB3aWxsIHJldHVybiBmYWxzZSBmb3Igb3RoZXIgYXJyYXktbGlrZSBvYmplY3RzIGxpa2UgRmlsZWxpc3QuXG4gKlxuICogQHBhcmFtIHsqfSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0FycmF5TmF0dXJlKG9iaikge1xuICByZXR1cm4gKFxuICAgIC8vIG5vdCBudWxsL2ZhbHNlXG4gICAgISFvYmogJiZcbiAgICAvLyBhcnJheXMgYXJlIG9iamVjdHMsIE5vZGVMaXN0cyBhcmUgZnVuY3Rpb25zIGluIFNhZmFyaVxuICAgICh0eXBlb2Ygb2JqID09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAvLyBxdWFja3MgbGlrZSBhbiBhcnJheVxuICAgICgnbGVuZ3RoJyBpbiBvYmopICYmXG4gICAgLy8gbm90IHdpbmRvd1xuICAgICEoJ3NldEludGVydmFsJyBpbiBvYmopICYmXG4gICAgLy8gbm8gRE9NIG5vZGUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gYXJyYXktbGlrZVxuICAgIC8vIGEgJ3NlbGVjdCcgZWxlbWVudCBoYXMgJ2xlbmd0aCcgYW5kICdpdGVtJyBwcm9wZXJ0aWVzIG9uIElFOFxuICAgICh0eXBlb2Ygb2JqLm5vZGVUeXBlICE9ICdudW1iZXInKSAmJlxuICAgIChcbiAgICAgIC8vIGEgcmVhbCBhcnJheVxuICAgICAgKC8vIEhUTUxDb2xsZWN0aW9uL05vZGVMaXN0XG4gICAgICAoQXJyYXkuaXNBcnJheShvYmopIHx8XG4gICAgICAvLyBhcmd1bWVudHNcbiAgICAgICgnY2FsbGVlJyBpbiBvYmopIHx8ICdpdGVtJyBpbiBvYmopKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXkgYnkgd3JhcHBpbmcgaXQgaW4gYW4gYXJyYXkgaWYgaXQgaXMgbm90LlxuICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIGFyZ3VtZW50IGlmIGl0IGlzIGFscmVhZHkgYW4gYXJyYXkuXG4gKlxuICogVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlkaW9tYXRpY2FsbHk6XG4gKlxuICogICB2YXIgY3JlYXRlQXJyYXlGcm9tTWl4ZWQgPSByZXF1aXJlKCdjcmVhdGVBcnJheUZyb21NaXhlZCcpO1xuICpcbiAqICAgZnVuY3Rpb24gdGFrZXNPbmVPck1vcmVUaGluZ3ModGhpbmdzKSB7XG4gKiAgICAgdGhpbmdzID0gY3JlYXRlQXJyYXlGcm9tTWl4ZWQodGhpbmdzKTtcbiAqICAgICAuLi5cbiAqICAgfVxuICpcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byB0cmVhdCBgdGhpbmdzJyBhcyBhbiBhcnJheSwgYnV0IGFjY2VwdCBzY2FsYXJzIGluIHRoZSBBUEkuXG4gKlxuICogSWYgeW91IG5lZWQgdG8gY29udmVydCBhbiBhcnJheS1saWtlIG9iamVjdCwgbGlrZSBgYXJndW1lbnRzYCwgaW50byBhbiBhcnJheVxuICogdXNlIHRvQXJyYXkgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybiB7YXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFycmF5RnJvbU1peGVkKG9iaikge1xuICBpZiAoIWhhc0FycmF5TmF0dXJlKG9iaikpIHtcbiAgICByZXR1cm4gW29ial07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5zbGljZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0b0FycmF5KG9iaik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBcnJheUZyb21NaXhlZDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgY3JlYXRlRnVsbFBhZ2VDb21wb25lbnRcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBEZWZlYXQgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSByZXF1aXJpbmcgdGhpcyBkaXJlY3RseS5cbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogQ3JlYXRlIGEgY29tcG9uZW50IHRoYXQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiB1bm1vdW50ZWQuXG4gKlxuICogQ29tcG9uZW50cyBsaWtlIDxodG1sPiA8aGVhZD4gYW5kIDxib2R5PiBjYW4ndCBiZSByZW1vdmVkIG9yIGFkZGVkXG4gKiBlYXNpbHkgaW4gYSBjcm9zcy1icm93c2VyIHdheSwgaG93ZXZlciBpdCdzIHZhbHVhYmxlIHRvIGJlIGFibGUgdG9cbiAqIHRha2UgYWR2YW50YWdlIG9mIFJlYWN0J3MgcmVjb25jaWxpYXRpb24gZm9yIHN0eWxpbmcgYW5kIDx0aXRsZT5cbiAqIG1hbmFnZW1lbnQuIFNvIHdlIGp1c3QgZG9jdW1lbnQgaXQgYW5kIHRocm93IGluIGRhbmdlcm91cyBjYXNlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSB0YWcgdG8gd3JhcFxuICogQHJldHVybiB7ZnVuY3Rpb259IGNvbnZlbmllbmNlIGNvbnN0cnVjdG9yIG9mIG5ldyBjb21wb25lbnRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRnVsbFBhZ2VDb21wb25lbnQodGFnKSB7XG4gIHZhciBlbGVtZW50RmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KHRhZyk7XG5cbiAgdmFyIEZ1bGxQYWdlQ29tcG9uZW50ID0gUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyh7XG4gICAgdGFnTmFtZTogdGFnLnRvVXBwZXJDYXNlKCksXG4gICAgZGlzcGxheU5hbWU6ICdSZWFjdEZ1bGxQYWdlQ29tcG9uZW50JyArIHRhZyxcblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbigpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIGZhbHNlLFxuICAgICAgICAnJXMgdHJpZWQgdG8gdW5tb3VudC4gQmVjYXVzZSBvZiBjcm9zcy1icm93c2VyIHF1aXJrcyBpdCBpcyAnICtcbiAgICAgICAgJ2ltcG9zc2libGUgdG8gdW5tb3VudCBzb21lIHRvcC1sZXZlbCBjb21wb25lbnRzIChlZyA8aHRtbD4sIDxoZWFkPiwgJyArXG4gICAgICAgICdhbmQgPGJvZHk+KSByZWxpYWJseSBhbmQgZWZmaWNpZW50bHkuIFRvIGZpeCB0aGlzLCBoYXZlIGEgc2luZ2xlICcgK1xuICAgICAgICAndG9wLWxldmVsIGNvbXBvbmVudCB0aGF0IG5ldmVyIHVubW91bnRzIHJlbmRlciB0aGVzZSBlbGVtZW50cy4nLFxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lXG4gICAgICApIDogaW52YXJpYW50KGZhbHNlKSk7XG4gICAgfSxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZWxlbWVudEZhY3RvcnkodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gRnVsbFBhZ2VDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlRnVsbFBhZ2VDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZZM0psWVhSbFJuVnNiRkJoWjJWRGIyMXdiMjVsYm5RdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCamNtVmhkR1ZHZFd4c1VHRm5aVU52YlhCdmJtVnVkRnh1SUNvZ1FIUjVjR1ZqYUdWamEzTmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JpOHZJRVJsWm1WaGRDQmphWEpqZFd4aGNpQnlaV1psY21WdVkyVnpJR0o1SUhKbGNYVnBjbWx1WnlCMGFHbHpJR1JwY21WamRHeDVMbHh1ZG1GeUlGSmxZV04wUTJ4aGMzTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU5zWVhOelhDSXBPMXh1ZG1GeUlGSmxZV04wUld4bGJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRndpS1R0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdVZ1lTQmpiMjF3YjI1bGJuUWdkR2hoZENCM2FXeHNJSFJvY205M0lHRnVJR1Y0WTJWd2RHbHZiaUIzYUdWdUlIVnViVzkxYm5SbFpDNWNiaUFxWEc0Z0tpQkRiMjF3YjI1bGJuUnpJR3hwYTJVZ1BHaDBiV3crSUR4b1pXRmtQaUJoYm1RZ1BHSnZaSGsrSUdOaGJpZDBJR0psSUhKbGJXOTJaV1FnYjNJZ1lXUmtaV1JjYmlBcUlHVmhjMmxzZVNCcGJpQmhJR055YjNOekxXSnliM2R6WlhJZ2QyRjVMQ0JvYjNkbGRtVnlJR2wwSjNNZ2RtRnNkV0ZpYkdVZ2RHOGdZbVVnWVdKc1pTQjBiMXh1SUNvZ2RHRnJaU0JoWkhaaGJuUmhaMlVnYjJZZ1VtVmhZM1FuY3lCeVpXTnZibU5wYkdsaGRHbHZiaUJtYjNJZ2MzUjViR2x1WnlCaGJtUWdQSFJwZEd4bFBseHVJQ29nYldGdVlXZGxiV1Z1ZEM0Z1UyOGdkMlVnYW5WemRDQmtiMk4xYldWdWRDQnBkQ0JoYm1RZ2RHaHliM2NnYVc0Z1pHRnVaMlZ5YjNWeklHTmhjMlZ6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IwWVdjZ1ZHaGxJSFJoWnlCMGJ5QjNjbUZ3WEc0Z0tpQkFjbVYwZFhKdUlIdG1kVzVqZEdsdmJuMGdZMjl1ZG1WdWFXVnVZMlVnWTI5dWMzUnlkV04wYjNJZ2IyWWdibVYzSUdOdmJYQnZibVZ1ZEZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJqY21WaGRHVkdkV3hzVUdGblpVTnZiWEJ2Ym1WdWRDaDBZV2NwSUh0Y2JpQWdkbUZ5SUdWc1pXMWxiblJHWVdOMGIzSjVJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVaaFkzUnZjbmtvZEdGbktUdGNibHh1SUNCMllYSWdSblZzYkZCaFoyVkRiMjF3YjI1bGJuUWdQU0JTWldGamRFTnNZWE56TG1OeVpXRjBaVU5zWVhOektIdGNiaUFnSUNCMFlXZE9ZVzFsT2lCMFlXY3VkRzlWY0hCbGNrTmhjMlVvS1N4Y2JpQWdJQ0JrYVhOd2JHRjVUbUZ0WlRvZ0oxSmxZV04wUm5Wc2JGQmhaMlZEYjIxd2IyNWxiblFuSUNzZ2RHRm5MRnh1WEc0Z0lDQWdZMjl0Y0c5dVpXNTBWMmxzYkZWdWJXOTFiblE2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNjbGN5QjBjbWxsWkNCMGJ5QjFibTF2ZFc1MExpQkNaV05oZFhObElHOW1JR055YjNOekxXSnliM2R6WlhJZ2NYVnBjbXR6SUdsMElHbHpJQ2NnSzF4dUlDQWdJQ0FnSUNBbmFXMXdiM056YVdKc1pTQjBieUIxYm0xdmRXNTBJSE52YldVZ2RHOXdMV3hsZG1Wc0lHTnZiWEJ2Ym1WdWRITWdLR1ZuSUR4b2RHMXNQaXdnUEdobFlXUStMQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0oyRnVaQ0E4WW05a2VUNHBJSEpsYkdsaFlteDVJR0Z1WkNCbFptWnBZMmxsYm5Sc2VTNGdWRzhnWm1sNElIUm9hWE1zSUdoaGRtVWdZU0J6YVc1bmJHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNkMGIzQXRiR1YyWld3Z1kyOXRjRzl1Wlc1MElIUm9ZWFFnYm1WMlpYSWdkVzV0YjNWdWRITWdjbVZ1WkdWeUlIUm9aWE5sSUdWc1pXMWxiblJ6TGljc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5dWMzUnlkV04wYjNJdVpHbHpjR3hoZVU1aGJXVmNiaUFnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvWm1Gc2MyVXBLVHRjYmlBZ0lDQjlMRnh1WEc0Z0lDQWdjbVZ1WkdWeU9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmxiR1Z0Wlc1MFJtRmpkRzl5ZVNoMGFHbHpMbkJ5YjNCektUdGNiaUFnSUNCOVhHNGdJSDBwTzF4dVhHNGdJSEpsZEhWeWJpQkdkV3hzVUdGblpVTnZiWEJ2Ym1WdWREdGNibjFjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCamNtVmhkR1ZHZFd4c1VHRm5aVU52YlhCdmJtVnVkRHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGNyZWF0ZU5vZGVzRnJvbU1hcmt1cFxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4vKmpzbGludCBldmlsOiB0cnVlLCBzdWI6IHRydWUgKi9cblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBjcmVhdGVBcnJheUZyb21NaXhlZCA9IHJlcXVpcmUoXCIuL2NyZWF0ZUFycmF5RnJvbU1peGVkXCIpO1xudmFyIGdldE1hcmt1cFdyYXAgPSByZXF1aXJlKFwiLi9nZXRNYXJrdXBXcmFwXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBEdW1teSBjb250YWluZXIgdXNlZCB0byByZW5kZXIgYWxsIG1hcmt1cC5cbiAqL1xudmFyIGR1bW15Tm9kZSA9XG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpIDogbnVsbDtcblxuLyoqXG4gKiBQYXR0ZXJuIHVzZWQgYnkgYGdldE5vZGVOYW1lYC5cbiAqL1xudmFyIG5vZGVOYW1lUGF0dGVybiA9IC9eXFxzKjwoXFx3KykvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBgbm9kZU5hbWVgIG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIGEgc3RyaW5nIG9mIG1hcmt1cC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIFN0cmluZyBvZiBtYXJrdXAuXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBOb2RlIG5hbWUgb2YgdGhlIHN1cHBsaWVkIG1hcmt1cC5cbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZU5hbWUobWFya3VwKSB7XG4gIHZhciBub2RlTmFtZU1hdGNoID0gbWFya3VwLm1hdGNoKG5vZGVOYW1lUGF0dGVybik7XG4gIHJldHVybiBub2RlTmFtZU1hdGNoICYmIG5vZGVOYW1lTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5vZGVzIHJlbmRlcmVkIGZyb20gdGhlIHN1cHBsaWVkIG1hcmt1cC4gVGhlXG4gKiBvcHRpb25hbGx5IHN1cHBsaWVkIGBoYW5kbGVTY3JpcHRgIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGZvciBlYWNoXG4gKiA8c2NyaXB0PiBlbGVtZW50IHRoYXQgaXMgcmVuZGVyZWQuIElmIG5vIGBoYW5kbGVTY3JpcHRgIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLFxuICogYW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiBhbnkgPHNjcmlwdD4gZWxlbWVudHMgYXJlIHJlbmRlcmVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgQSBzdHJpbmcgb2YgdmFsaWQgSFRNTCBtYXJrdXAuXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gaGFuZGxlU2NyaXB0IEludm9rZWQgb25jZSBmb3IgZWFjaCByZW5kZXJlZCA8c2NyaXB0Pi5cbiAqIEByZXR1cm4ge2FycmF5PERPTUVsZW1lbnR8RE9NVGV4dE5vZGU+fSBBbiBhcnJheSBvZiByZW5kZXJlZCBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTm9kZXNGcm9tTWFya3VwKG1hcmt1cCwgaGFuZGxlU2NyaXB0KSB7XG4gIHZhciBub2RlID0gZHVtbXlOb2RlO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KCEhZHVtbXlOb2RlLCAnY3JlYXRlTm9kZXNGcm9tTWFya3VwIGR1bW15IG5vdCBpbml0aWFsaXplZCcpIDogaW52YXJpYW50KCEhZHVtbXlOb2RlKSk7XG4gIHZhciBub2RlTmFtZSA9IGdldE5vZGVOYW1lKG1hcmt1cCk7XG5cbiAgdmFyIHdyYXAgPSBub2RlTmFtZSAmJiBnZXRNYXJrdXBXcmFwKG5vZGVOYW1lKTtcbiAgaWYgKHdyYXApIHtcbiAgICBub2RlLmlubmVySFRNTCA9IHdyYXBbMV0gKyBtYXJrdXAgKyB3cmFwWzJdO1xuXG4gICAgdmFyIHdyYXBEZXB0aCA9IHdyYXBbMF07XG4gICAgd2hpbGUgKHdyYXBEZXB0aC0tKSB7XG4gICAgICBub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5vZGUuaW5uZXJIVE1MID0gbWFya3VwO1xuICB9XG5cbiAgdmFyIHNjcmlwdHMgPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcbiAgaWYgKHNjcmlwdHMubGVuZ3RoKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGhhbmRsZVNjcmlwdCxcbiAgICAgICdjcmVhdGVOb2Rlc0Zyb21NYXJrdXAoLi4uKTogVW5leHBlY3RlZCA8c2NyaXB0PiBlbGVtZW50IHJlbmRlcmVkLidcbiAgICApIDogaW52YXJpYW50KGhhbmRsZVNjcmlwdCkpO1xuICAgIGNyZWF0ZUFycmF5RnJvbU1peGVkKHNjcmlwdHMpLmZvckVhY2goaGFuZGxlU2NyaXB0KTtcbiAgfVxuXG4gIHZhciBub2RlcyA9IGNyZWF0ZUFycmF5RnJvbU1peGVkKG5vZGUuY2hpbGROb2Rlcyk7XG4gIHdoaWxlIChub2RlLmxhc3RDaGlsZCkge1xuICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5sYXN0Q2hpbGQpO1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXA7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZZM0psWVhSbFRtOWtaWE5HY205dFRXRnlhM1Z3TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQmpjbVZoZEdWT2IyUmxjMFp5YjIxTllYSnJkWEJjYmlBcUlFQjBlWEJsWTJobFkydHpYRzRnS2k5Y2JseHVMeXBxYzJ4cGJuUWdaWFpwYkRvZ2RISjFaU3dnYzNWaU9pQjBjblZsSUNvdlhHNWNiblpoY2lCRmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDBWNFpXTjFkR2x2YmtWdWRtbHliMjV0Wlc1MFhDSXBPMXh1WEc1MllYSWdZM0psWVhSbFFYSnlZWGxHY205dFRXbDRaV1FnUFNCeVpYRjFhWEpsS0Z3aUxpOWpjbVZoZEdWQmNuSmhlVVp5YjIxTmFYaGxaRndpS1R0Y2JuWmhjaUJuWlhSTllYSnJkWEJYY21Gd0lEMGdjbVZ4ZFdseVpTaGNJaTR2WjJWMFRXRnlhM1Z3VjNKaGNGd2lLVHRjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYmk4cUtseHVJQ29nUkhWdGJYa2dZMjl1ZEdGcGJtVnlJSFZ6WldRZ2RHOGdjbVZ1WkdWeUlHRnNiQ0J0WVhKcmRYQXVYRzRnS2k5Y2JuWmhjaUJrZFcxdGVVNXZaR1VnUFZ4dUlDQkZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkQzVqWVc1VmMyVkVUMDBnUHlCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZGYkdWdFpXNTBLQ2RrYVhZbktTQTZJRzUxYkd3N1hHNWNiaThxS2x4dUlDb2dVR0YwZEdWeWJpQjFjMlZrSUdKNUlHQm5aWFJPYjJSbFRtRnRaV0F1WEc0Z0tpOWNiblpoY2lCdWIyUmxUbUZ0WlZCaGRIUmxjbTRnUFNBdlhseGNjeW84S0Z4Y2R5c3BMenRjYmx4dUx5b3FYRzRnS2lCRmVIUnlZV04wY3lCMGFHVWdZRzV2WkdWT1lXMWxZQ0J2WmlCMGFHVWdabWx5YzNRZ1pXeGxiV1Z1ZENCcGJpQmhJSE4wY21sdVp5QnZaaUJ0WVhKcmRYQXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHMWhjbXQxY0NCVGRISnBibWNnYjJZZ2JXRnlhM1Z3TGx4dUlDb2dRSEpsZEhWeWJpQjdQM04wY21sdVozMGdUbTlrWlNCdVlXMWxJRzltSUhSb1pTQnpkWEJ3YkdsbFpDQnRZWEpyZFhBdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdkbGRFNXZaR1ZPWVcxbEtHMWhjbXQxY0NrZ2UxeHVJQ0IyWVhJZ2JtOWtaVTVoYldWTllYUmphQ0E5SUcxaGNtdDFjQzV0WVhSamFDaHViMlJsVG1GdFpWQmhkSFJsY200cE8xeHVJQ0J5WlhSMWNtNGdibTlrWlU1aGJXVk5ZWFJqYUNBbUppQnViMlJsVG1GdFpVMWhkR05vV3pGZExuUnZURzkzWlhKRFlYTmxLQ2s3WEc1OVhHNWNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJoY25KaGVTQmpiMjUwWVdsdWFXNW5JSFJvWlNCdWIyUmxjeUJ5Wlc1a1pYSmxaQ0JtY205dElIUm9aU0J6ZFhCd2JHbGxaQ0J0WVhKcmRYQXVJRlJvWlZ4dUlDb2diM0IwYVc5dVlXeHNlU0J6ZFhCd2JHbGxaQ0JnYUdGdVpHeGxVMk55YVhCMFlDQm1kVzVqZEdsdmJpQjNhV3hzSUdKbElHbHVkbTlyWldRZ2IyNWpaU0JtYjNJZ1pXRmphRnh1SUNvZ1BITmpjbWx3ZEQ0Z1pXeGxiV1Z1ZENCMGFHRjBJR2x6SUhKbGJtUmxjbVZrTGlCSlppQnVieUJnYUdGdVpHeGxVMk55YVhCMFlDQm1kVzVqZEdsdmJpQnBjeUJ6ZFhCd2JHbGxaQ3hjYmlBcUlHRnVJR1Y0WTJWd2RHbHZiaUJwY3lCMGFISnZkMjRnYVdZZ1lXNTVJRHh6WTNKcGNIUStJR1ZzWlcxbGJuUnpJR0Z5WlNCeVpXNWtaWEpsWkM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYldGeWEzVndJRUVnYzNSeWFXNW5JRzltSUhaaGJHbGtJRWhVVFV3Z2JXRnlhM1Z3TGx4dUlDb2dRSEJoY21GdElIcy9ablZ1WTNScGIyNTlJR2hoYm1Sc1pWTmpjbWx3ZENCSmJuWnZhMlZrSUc5dVkyVWdabTl5SUdWaFkyZ2djbVZ1WkdWeVpXUWdQSE5qY21sd2RENHVYRzRnS2lCQWNtVjBkWEp1SUh0aGNuSmhlVHhFVDAxRmJHVnRaVzUwZkVSUFRWUmxlSFJPYjJSbFBuMGdRVzRnWVhKeVlYa2diMllnY21WdVpHVnlaV1FnYm05a1pYTXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHTnlaV0YwWlU1dlpHVnpSbkp2YlUxaGNtdDFjQ2h0WVhKcmRYQXNJR2hoYm1Sc1pWTmpjbWx3ZENrZ2UxeHVJQ0IyWVhJZ2JtOWtaU0E5SUdSMWJXMTVUbTlrWlR0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDZ2hJV1IxYlcxNVRtOWtaU3dnSjJOeVpXRjBaVTV2WkdWelJuSnZiVTFoY210MWNDQmtkVzF0ZVNCdWIzUWdhVzVwZEdsaGJHbDZaV1FuS1NBNklHbHVkbUZ5YVdGdWRDZ2hJV1IxYlcxNVRtOWtaU2twTzF4dUlDQjJZWElnYm05a1pVNWhiV1VnUFNCblpYUk9iMlJsVG1GdFpTaHRZWEpyZFhBcE8xeHVYRzRnSUhaaGNpQjNjbUZ3SUQwZ2JtOWtaVTVoYldVZ0ppWWdaMlYwVFdGeWEzVndWM0poY0NodWIyUmxUbUZ0WlNrN1hHNGdJR2xtSUNoM2NtRndLU0I3WEc0Z0lDQWdibTlrWlM1cGJtNWxja2hVVFV3Z1BTQjNjbUZ3V3pGZElDc2diV0Z5YTNWd0lDc2dkM0poY0ZzeVhUdGNibHh1SUNBZ0lIWmhjaUIzY21Gd1JHVndkR2dnUFNCM2NtRndXekJkTzF4dUlDQWdJSGRvYVd4bElDaDNjbUZ3UkdWd2RHZ3RMU2tnZTF4dUlDQWdJQ0FnYm05a1pTQTlJRzV2WkdVdWJHRnpkRU5vYVd4a08xeHVJQ0FnSUgxY2JpQWdmU0JsYkhObElIdGNiaUFnSUNCdWIyUmxMbWx1Ym1WeVNGUk5UQ0E5SUcxaGNtdDFjRHRjYmlBZ2ZWeHVYRzRnSUhaaGNpQnpZM0pwY0hSeklEMGdibTlrWlM1blpYUkZiR1Z0Wlc1MGMwSjVWR0ZuVG1GdFpTZ25jMk55YVhCMEp5azdYRzRnSUdsbUlDaHpZM0pwY0hSekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0JvWVc1a2JHVlRZM0pwY0hRc1hHNGdJQ0FnSUNBblkzSmxZWFJsVG05a1pYTkdjbTl0VFdGeWEzVndLQzR1TGlrNklGVnVaWGh3WldOMFpXUWdQSE5qY21sd2RENGdaV3hsYldWdWRDQnlaVzVrWlhKbFpDNG5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hvWVc1a2JHVlRZM0pwY0hRcEtUdGNiaUFnSUNCamNtVmhkR1ZCY25KaGVVWnliMjFOYVhobFpDaHpZM0pwY0hSektTNW1iM0pGWVdOb0tHaGhibVJzWlZOamNtbHdkQ2s3WEc0Z0lIMWNibHh1SUNCMllYSWdibTlrWlhNZ1BTQmpjbVZoZEdWQmNuSmhlVVp5YjIxTmFYaGxaQ2h1YjJSbExtTm9hV3hrVG05a1pYTXBPMXh1SUNCM2FHbHNaU0FvYm05a1pTNXNZWE4wUTJocGJHUXBJSHRjYmlBZ0lDQnViMlJsTG5KbGJXOTJaVU5vYVd4a0tHNXZaR1V1YkdGemRFTm9hV3hrS1R0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYm05a1pYTTdYRzU5WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1kzSmxZWFJsVG05a1pYTkdjbTl0VFdGeWEzVndPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBkYW5nZXJvdXNTdHlsZVZhbHVlXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIENTU1Byb3BlcnR5ID0gcmVxdWlyZShcIi4vQ1NTUHJvcGVydHlcIik7XG5cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0gQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcjtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgaW50byB0aGUgcHJvcGVyIGNzcyB3cml0YWJsZSB2YWx1ZS4gVGhlIHN0eWxlIG5hbWUgYG5hbWVgXG4gKiBzaG91bGQgYmUgbG9naWNhbCAobm8gaHlwaGVucyksIGFzIHNwZWNpZmllZFxuICogaW4gYENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENTUyBwcm9wZXJ0eSBuYW1lIHN1Y2ggYXMgYHRvcE1hcmdpbmAuXG4gKiBAcGFyYW0geyp9IHZhbHVlIENTUyBwcm9wZXJ0eSB2YWx1ZSBzdWNoIGFzIGAxMHB4YC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBzdHlsZSB2YWx1ZSB3aXRoIGRpbWVuc2lvbnMgYXBwbGllZC5cbiAqL1xuZnVuY3Rpb24gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShuYW1lLCB2YWx1ZSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIGlzTm9uTnVtZXJpYyA9IGlzTmFOKHZhbHVlKTtcbiAgaWYgKGlzTm9uTnVtZXJpYyB8fCB2YWx1ZSA9PT0gMCB8fFxuICAgICAgaXNVbml0bGVzc051bWJlci5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBpc1VuaXRsZXNzTnVtYmVyW25hbWVdKSB7XG4gICAgcmV0dXJuICcnICsgdmFsdWU7IC8vIGNhc3QgdG8gc3RyaW5nXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICB9XG4gIHJldHVybiB2YWx1ZSArICdweCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBlbXB0eUZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJnO1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhbmQgZGlzY2FyZHMgaW5wdXRzOyBpdCBoYXMgbm8gc2lkZSBlZmZlY3RzLiBUaGlzIGlzXG4gKiBwcmltYXJpbHkgdXNlZnVsIGlkaW9tYXRpY2FsbHkgZm9yIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIGVuZHBvaW50cyB3aGljaFxuICogYWx3YXlzIG5lZWQgdG8gYmUgY2FsbGFibGUsIHNpbmNlIEpTIGxhY2tzIGEgbnVsbC1jYWxsIGlkaW9tIGFsYSBDb2NvYS5cbiAqL1xuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5cbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnMgPSBtYWtlRW1wdHlGdW5jdGlvbjtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlID0gbWFrZUVtcHR5RnVuY3Rpb24odHJ1ZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCA9IG1ha2VFbXB0eUZ1bmN0aW9uKG51bGwpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RoaXMgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH07XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQgPSBmdW5jdGlvbihhcmcpIHsgcmV0dXJuIGFyZzsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbXB0eUZ1bmN0aW9uO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBlbXB0eU9iamVjdFxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZW1wdHlPYmplY3QgPSB7fTtcblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICBPYmplY3QuZnJlZXplKGVtcHR5T2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlbXB0eU9iamVjdDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlpXMXdkSGxQWW1wbFkzUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElHVnRjSFI1VDJKcVpXTjBYRzRnS2k5Y2JseHVYQ0oxYzJVZ2MzUnlhV04wWENJN1hHNWNiblpoY2lCbGJYQjBlVTlpYW1WamRDQTlJSHQ5TzF4dVhHNXBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUU5aWFtVmpkQzVtY21WbGVtVW9aVzF3ZEhsUFltcGxZM1FwTzF4dWZWeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJR1Z0Y0hSNVQySnFaV04wTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRVNDQVBFX0xPT0tVUCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJzwnOiAnJmx0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICAnXFwnJzogJyYjeDI3Oydcbn07XG5cbnZhciBFU0NBUEVfUkVHRVggPSAvWyY+PFwiJ10vZztcblxuZnVuY3Rpb24gZXNjYXBlcihtYXRjaCkge1xuICByZXR1cm4gRVNDQVBFX0xPT0tVUFttYXRjaF07XG59XG5cbi8qKlxuICogRXNjYXBlcyB0ZXh0IHRvIHByZXZlbnQgc2NyaXB0aW5nIGF0dGFja3MuXG4gKlxuICogQHBhcmFtIHsqfSB0ZXh0IFRleHQgdmFsdWUgdG8gZXNjYXBlLlxuICogQHJldHVybiB7c3RyaW5nfSBBbiBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHRleHQpIHtcbiAgcmV0dXJuICgnJyArIHRleHQpLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCBlc2NhcGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXI7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGZpbmRET01Ob2RlXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VNYXBcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgaXNOb2RlID0gcmVxdWlyZShcIi4vaXNOb2RlXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIERPTSBub2RlIHJlbmRlcmVkIGJ5IHRoaXMgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fERPTUVsZW1lbnR9IGNvbXBvbmVudE9yRWxlbWVudFxuICogQHJldHVybiB7RE9NRWxlbWVudH0gVGhlIHJvb3Qgbm9kZSBvZiB0aGlzIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICBpZiAob3duZXIgIT09IG51bGwpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIsXG4gICAgICAgICclcyBpcyBhY2Nlc3NpbmcgZ2V0RE9NTm9kZSBvciBmaW5kRE9NTm9kZSBpbnNpZGUgaXRzIHJlbmRlcigpLiAnICtcbiAgICAgICAgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArXG4gICAgICAgICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICtcbiAgICAgICAgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgK1xuICAgICAgICAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJyxcbiAgICAgICAgb3duZXIuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICAgIG93bmVyLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChpc05vZGUoY29tcG9uZW50T3JFbGVtZW50KSkge1xuICAgIHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gIH1cbiAgaWYgKFJlYWN0SW5zdGFuY2VNYXAuaGFzKGNvbXBvbmVudE9yRWxlbWVudCkpIHtcbiAgICByZXR1cm4gUmVhY3RNb3VudC5nZXROb2RlRnJvbUluc3RhbmNlKGNvbXBvbmVudE9yRWxlbWVudCk7XG4gIH1cbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBjb21wb25lbnRPckVsZW1lbnQucmVuZGVyID09IG51bGwgfHxcbiAgICB0eXBlb2YgY29tcG9uZW50T3JFbGVtZW50LnJlbmRlciAhPT0gJ2Z1bmN0aW9uJyxcbiAgICAnQ29tcG9uZW50ICh3aXRoIGtleXM6ICVzKSBjb250YWlucyBgcmVuZGVyYCBtZXRob2QgJyArXG4gICAgJ2J1dCBpcyBub3QgbW91bnRlZCBpbiB0aGUgRE9NJyxcbiAgICBPYmplY3Qua2V5cyhjb21wb25lbnRPckVsZW1lbnQpXG4gICkgOiBpbnZhcmlhbnQoY29tcG9uZW50T3JFbGVtZW50LnJlbmRlciA9PSBudWxsIHx8XG4gIHR5cGVvZiBjb21wb25lbnRPckVsZW1lbnQucmVuZGVyICE9PSAnZnVuY3Rpb24nKSk7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgZmFsc2UsXG4gICAgJ0VsZW1lbnQgYXBwZWFycyB0byBiZSBuZWl0aGVyIFJlYWN0Q29tcG9uZW50IG5vciBET01Ob2RlIChrZXlzOiAlcyknLFxuICAgIE9iamVjdC5rZXlzKGNvbXBvbmVudE9yRWxlbWVudClcbiAgKSA6IGludmFyaWFudChmYWxzZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRET01Ob2RlO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2Wm1sdVpFUlBUVTV2WkdVdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1ptbHVaRVJQVFU1dlpHVmNiaUFxSUVCMGVYQmxZMmhsWTJ0eklITjBZWFJwWXkxdmJteDVYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnVW1WaFkzUkRkWEp5Wlc1MFQzZHVaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOMWNuSmxiblJQZDI1bGNsd2lLVHRjYm5aaGNpQlNaV0ZqZEVsdWMzUmhibU5sVFdGd0lEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkpibk4wWVc1alpVMWhjRndpS1R0Y2JuWmhjaUJTWldGamRFMXZkVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSTmIzVnVkRndpS1R0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUJwYzA1dlpHVWdQU0J5WlhGMWFYSmxLRndpTGk5cGMwNXZaR1ZjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIwYUdVZ1JFOU5JRzV2WkdVZ2NtVnVaR1Z5WldRZ1lua2dkR2hwY3lCbGJHVnRaVzUwTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3VW1WaFkzUkRiMjF3YjI1bGJuUjhSRTlOUld4bGJXVnVkSDBnWTI5dGNHOXVaVzUwVDNKRmJHVnRaVzUwWEc0Z0tpQkFjbVYwZFhKdUlIdEVUMDFGYkdWdFpXNTBmU0JVYUdVZ2NtOXZkQ0J1YjJSbElHOW1JSFJvYVhNZ1pXeGxiV1Z1ZEM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWm1sdVpFUlBUVTV2WkdVb1kyOXRjRzl1Wlc1MFQzSkZiR1Z0Wlc1MEtTQjdYRzRnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0IyWVhJZ2IzZHVaWElnUFNCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2k1amRYSnlaVzUwTzF4dUlDQWdJR2xtSUNodmQyNWxjaUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJRzkzYm1WeUxsOTNZWEp1WldSQlltOTFkRkpsWm5OSmJsSmxibVJsY2l4Y2JpQWdJQ0FnSUNBZ0p5VnpJR2x6SUdGalkyVnpjMmx1WnlCblpYUkVUMDFPYjJSbElHOXlJR1pwYm1SRVQwMU9iMlJsSUdsdWMybGtaU0JwZEhNZ2NtVnVaR1Z5S0NrdUlDY2dLMXh1SUNBZ0lDQWdJQ0FuY21WdVpHVnlLQ2tnYzJodmRXeGtJR0psSUdFZ2NIVnlaU0JtZFc1amRHbHZiaUJ2WmlCd2NtOXdjeUJoYm1RZ2MzUmhkR1V1SUVsMElITm9iM1ZzWkNBbklDdGNiaUFnSUNBZ0lDQWdKMjVsZG1WeUlHRmpZMlZ6Y3lCemIyMWxkR2hwYm1jZ2RHaGhkQ0J5WlhGMWFYSmxjeUJ6ZEdGc1pTQmtZWFJoSUdaeWIyMGdkR2hsSUhCeVpYWnBiM1Z6SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5jbVZ1WkdWeUxDQnpkV05vSUdGeklISmxabk11SUUxdmRtVWdkR2hwY3lCc2IyZHBZeUIwYnlCamIyMXdiMjVsYm5SRWFXUk5iM1Z1ZENCaGJtUWdKeUFyWEc0Z0lDQWdJQ0FnSUNkamIyMXdiMjVsYm5SRWFXUlZjR1JoZEdVZ2FXNXpkR1ZoWkM0bkxGeHVJQ0FnSUNBZ0lDQnZkMjVsY2k1blpYUk9ZVzFsS0NrZ2ZId2dKMEVnWTI5dGNHOXVaVzUwSjF4dUlDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnYjNkdVpYSXVYM2RoY201bFpFRmliM1YwVW1WbWMwbHVVbVZ1WkdWeUlEMGdkSEoxWlR0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnYVdZZ0tHTnZiWEJ2Ym1WdWRFOXlSV3hsYldWdWRDQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUgxY2JpQWdhV1lnS0dselRtOWtaU2hqYjIxd2IyNWxiblJQY2tWc1pXMWxiblFwS1NCN1hHNGdJQ0FnY21WMGRYSnVJR052YlhCdmJtVnVkRTl5Uld4bGJXVnVkRHRjYmlBZ2ZWeHVJQ0JwWmlBb1VtVmhZM1JKYm5OMFlXNWpaVTFoY0M1b1lYTW9ZMjl0Y0c5dVpXNTBUM0pGYkdWdFpXNTBLU2tnZTF4dUlDQWdJSEpsZEhWeWJpQlNaV0ZqZEUxdmRXNTBMbWRsZEU1dlpHVkdjbTl0U1c1emRHRnVZMlVvWTI5dGNHOXVaVzUwVDNKRmJHVnRaVzUwS1R0Y2JpQWdmVnh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJR052YlhCdmJtVnVkRTl5Uld4bGJXVnVkQzV5Wlc1a1pYSWdQVDBnYm5Wc2JDQjhmRnh1SUNBZ0lIUjVjR1Z2WmlCamIyMXdiMjVsYm5SUGNrVnNaVzFsYm5RdWNtVnVaR1Z5SUNFOVBTQW5ablZ1WTNScGIyNG5MRnh1SUNBZ0lDZERiMjF3YjI1bGJuUWdLSGRwZEdnZ2EyVjVjem9nSlhNcElHTnZiblJoYVc1eklHQnlaVzVrWlhKZ0lHMWxkR2h2WkNBbklDdGNiaUFnSUNBblluVjBJR2x6SUc1dmRDQnRiM1Z1ZEdWa0lHbHVJSFJvWlNCRVQwMG5MRnh1SUNBZ0lFOWlhbVZqZEM1clpYbHpLR052YlhCdmJtVnVkRTl5Uld4bGJXVnVkQ2xjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hqYjIxd2IyNWxiblJQY2tWc1pXMWxiblF1Y21WdVpHVnlJRDA5SUc1MWJHd2dmSHhjYmlBZ2RIbHdaVzltSUdOdmJYQnZibVZ1ZEU5eVJXeGxiV1Z1ZEM1eVpXNWtaWElnSVQwOUlDZG1kVzVqZEdsdmJpY3BLVHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0JtWVd4elpTeGNiaUFnSUNBblJXeGxiV1Z1ZENCaGNIQmxZWEp6SUhSdklHSmxJRzVsYVhSb1pYSWdVbVZoWTNSRGIyMXdiMjVsYm5RZ2JtOXlJRVJQVFU1dlpHVWdLR3RsZVhNNklDVnpLU2NzWEc0Z0lDQWdUMkpxWldOMExtdGxlWE1vWTI5dGNHOXVaVzUwVDNKRmJHVnRaVzUwS1Z4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0daaGJITmxLU2s3WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdabWx1WkVSUFRVNXZaR1U3WEc0aVhYMD0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGZsYXR0ZW5DaGlsZHJlblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHRyYXZlcnNlQWxsQ2hpbGRyZW4gPSByZXF1aXJlKFwiLi90cmF2ZXJzZUFsbENoaWxkcmVuXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IHBhc3NlZCB0aHJvdWdoIHRyYXZlcnNhbC5cbiAqIEBwYXJhbSB7P1JlYWN0Q29tcG9uZW50fSBjaGlsZCBSZWFjdCBjaGlsZCBjb21wb25lbnQuXG4gKiBAcGFyYW0geyFzdHJpbmd9IG5hbWUgU3RyaW5nIG5hbWUgb2Yga2V5IHBhdGggdG8gY2hpbGQuXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5TaW5nbGVDaGlsZEludG9Db250ZXh0KHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUpIHtcbiAgLy8gV2UgZm91bmQgYSBjb21wb25lbnQgaW5zdGFuY2UuXG4gIHZhciByZXN1bHQgPSB0cmF2ZXJzZUNvbnRleHQ7XG4gIHZhciBrZXlVbmlxdWUgPSAhcmVzdWx0Lmhhc093blByb3BlcnR5KG5hbWUpO1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBrZXlVbmlxdWUsXG4gICAgICAnZmxhdHRlbkNoaWxkcmVuKC4uLik6IEVuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgJyArXG4gICAgICAnYCVzYC4gQ2hpbGQga2V5cyBtdXN0IGJlIHVuaXF1ZTsgd2hlbiB0d28gY2hpbGRyZW4gc2hhcmUgYSBrZXksIG9ubHkgJyArXG4gICAgICAndGhlIGZpcnN0IGNoaWxkIHdpbGwgYmUgdXNlZC4nLFxuICAgICAgbmFtZVxuICAgICkgOiBudWxsKTtcbiAgfVxuICBpZiAoa2V5VW5pcXVlICYmIGNoaWxkICE9IG51bGwpIHtcbiAgICByZXN1bHRbbmFtZV0gPSBjaGlsZDtcbiAgfVxufVxuXG4vKipcbiAqIEZsYXR0ZW5zIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC4gQW55IG51bGxcbiAqIGNoaWxkcmVuIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgb2JqZWN0LlxuICogQHJldHVybiB7IW9iamVjdH0gZmxhdHRlbmVkIGNoaWxkcmVuIGtleWVkIGJ5IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlbikge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuICB2YXIgcmVzdWx0ID0ge307XG4gIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZsYXR0ZW5TaW5nbGVDaGlsZEludG9Db250ZXh0LCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5DaGlsZHJlbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlpteGhkSFJsYmtOb2FXeGtjbVZ1TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJR1pzWVhSMFpXNURhR2xzWkhKbGJseHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJSFJ5WVhabGNuTmxRV3hzUTJocGJHUnlaVzRnUFNCeVpYRjFhWEpsS0Z3aUxpOTBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVYQ0lwTzF4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNTlJSFJ5WVhabGNuTmxRMjl1ZEdWNGRDQkRiMjUwWlhoMElIQmhjM05sWkNCMGFISnZkV2RvSUhSeVlYWmxjbk5oYkM1Y2JpQXFJRUJ3WVhKaGJTQjdQMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQmphR2xzWkNCU1pXRmpkQ0JqYUdsc1pDQmpiMjF3YjI1bGJuUXVYRzRnS2lCQWNHRnlZVzBnZXlGemRISnBibWQ5SUc1aGJXVWdVM1J5YVc1bklHNWhiV1VnYjJZZ2EyVjVJSEJoZEdnZ2RHOGdZMmhwYkdRdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdac1lYUjBaVzVUYVc1bmJHVkRhR2xzWkVsdWRHOURiMjUwWlhoMEtIUnlZWFpsY25ObFEyOXVkR1Y0ZEN3Z1kyaHBiR1FzSUc1aGJXVXBJSHRjYmlBZ0x5OGdWMlVnWm05MWJtUWdZU0JqYjIxd2IyNWxiblFnYVc1emRHRnVZMlV1WEc0Z0lIWmhjaUJ5WlhOMWJIUWdQU0IwY21GMlpYSnpaVU52Ym5SbGVIUTdYRzRnSUhaaGNpQnJaWGxWYm1seGRXVWdQU0FoY21WemRXeDBMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwTzF4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0JyWlhsVmJtbHhkV1VzWEc0Z0lDQWdJQ0FuWm14aGRIUmxia05vYVd4a2NtVnVLQzR1TGlrNklFVnVZMjkxYm5SbGNtVmtJSFIzYnlCamFHbHNaSEpsYmlCM2FYUm9JSFJvWlNCellXMWxJR3RsZVN3Z0p5QXJYRzRnSUNBZ0lDQW5ZQ1Z6WUM0Z1EyaHBiR1FnYTJWNWN5QnRkWE4wSUdKbElIVnVhWEYxWlRzZ2QyaGxiaUIwZDI4Z1kyaHBiR1J5Wlc0Z2MyaGhjbVVnWVNCclpYa3NJRzl1YkhrZ0p5QXJYRzRnSUNBZ0lDQW5kR2hsSUdacGNuTjBJR05vYVd4a0lIZHBiR3dnWW1VZ2RYTmxaQzRuTEZ4dUlDQWdJQ0FnYm1GdFpWeHVJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdmVnh1SUNCcFppQW9hMlY1Vlc1cGNYVmxJQ1ltSUdOb2FXeGtJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQnlaWE4xYkhSYmJtRnRaVjBnUFNCamFHbHNaRHRjYmlBZ2ZWeHVmVnh1WEc0dktpcGNiaUFxSUVac1lYUjBaVzV6SUdOb2FXeGtjbVZ1SUhSb1lYUWdZWEpsSUhSNWNHbGpZV3hzZVNCemNHVmphV1pwWldRZ1lYTWdZSEJ5YjNCekxtTm9hV3hrY21WdVlDNGdRVzU1SUc1MWJHeGNiaUFxSUdOb2FXeGtjbVZ1SUhkcGJHd2dibTkwSUdKbElHbHVZMngxWkdWa0lHbHVJSFJvWlNCeVpYTjFiSFJwYm1jZ2IySnFaV04wTGx4dUlDb2dRSEpsZEhWeWJpQjdJVzlpYW1WamRIMGdabXhoZEhSbGJtVmtJR05vYVd4a2NtVnVJR3RsZVdWa0lHSjVJRzVoYldVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdac1lYUjBaVzVEYUdsc1pISmxiaWhqYUdsc1pISmxiaWtnZTF4dUlDQnBaaUFvWTJocGJHUnlaVzRnUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQmphR2xzWkhKbGJqdGNiaUFnZlZ4dUlDQjJZWElnY21WemRXeDBJRDBnZTMwN1hHNGdJSFJ5WVhabGNuTmxRV3hzUTJocGJHUnlaVzRvWTJocGJHUnlaVzRzSUdac1lYUjBaVzVUYVc1bmJHVkRhR2xzWkVsdWRHOURiMjUwWlhoMExDQnlaWE4xYkhRcE8xeHVJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVmVnh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUdac1lYUjBaVzVEYUdsc1pISmxianRjYmlKZGZRPT0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZm9jdXNOb2RlXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIGlucHV0L3RleHRhcmVhIHRvIGZvY3VzXG4gKi9cbmZ1bmN0aW9uIGZvY3VzTm9kZShub2RlKSB7XG4gIC8vIElFOCBjYW4gdGhyb3cgXCJDYW4ndCBtb3ZlIGZvY3VzIHRvIHRoZSBjb250cm9sIGJlY2F1c2UgaXQgaXMgaW52aXNpYmxlLFxuICAvLyBub3QgZW5hYmxlZCwgb3Igb2YgYSB0eXBlIHRoYXQgZG9lcyBub3QgYWNjZXB0IHRoZSBmb2N1cy5cIiBmb3IgYWxsIGtpbmRzIG9mXG4gIC8vIHJlYXNvbnMgdGhhdCBhcmUgdG9vIGV4cGVuc2l2ZSBhbmQgZnJhZ2lsZSB0byB0ZXN0LlxuICB0cnkge1xuICAgIG5vZGUuZm9jdXMoKTtcbiAgfSBjYXRjaChlKSB7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb2N1c05vZGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZm9yRWFjaEFjY3VtdWxhdGVkXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBwYXJhbSB7YXJyYXl9IGFuIFwiYWNjdW11bGF0aW9uXCIgb2YgaXRlbXMgd2hpY2ggaXMgZWl0aGVyIGFuIEFycmF5IG9yXG4gKiBhIHNpbmdsZSBpdGVtLiBVc2VmdWwgd2hlbiBwYWlyZWQgd2l0aCB0aGUgYGFjY3VtdWxhdGVgIG1vZHVsZS4gVGhpcyBpcyBhXG4gKiBzaW1wbGUgdXRpbGl0eSB0aGF0IGFsbG93cyB1cyB0byByZWFzb24gYWJvdXQgYSBjb2xsZWN0aW9uIG9mIGl0ZW1zLCBidXRcbiAqIGhhbmRsaW5nIHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgZXhhY3RseSBvbmUgaXRlbSAoYW5kIHdlIGRvIG5vdCBuZWVkIHRvXG4gKiBhbGxvY2F0ZSBhbiBhcnJheSkuXG4gKi9cbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSBmdW5jdGlvbihhcnIsIGNiLCBzY29wZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgYXJyLmZvckVhY2goY2IsIHNjb3BlKTtcbiAgfSBlbHNlIGlmIChhcnIpIHtcbiAgICBjYi5jYWxsKHNjb3BlLCBhcnIpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2hBY2N1bXVsYXRlZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRBY3RpdmVFbGVtZW50XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbi8qKlxuICogU2FtZSBhcyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGJ1dCB3cmFwcyBpbiBhIHRyeS1jYXRjaCBibG9jay4gSW4gSUUgaXQgaXNcbiAqIG5vdCBzYWZlIHRvIGNhbGwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpZiB0aGVyZSBpcyBub3RoaW5nIGZvY3VzZWQuXG4gKlxuICogVGhlIGFjdGl2ZUVsZW1lbnQgd2lsbCBiZSBudWxsIG9ubHkgaWYgdGhlIGRvY3VtZW50IGJvZHkgaXMgbm90IHlldCBkZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KCkgLyo/RE9NRWxlbWVudCovIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB8fCBkb2N1bWVudC5ib2R5O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBY3RpdmVFbGVtZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldEV2ZW50Q2hhckNvZGVcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIGBjaGFyQ29kZWAgcmVwcmVzZW50cyB0aGUgYWN0dWFsIFwiY2hhcmFjdGVyIGNvZGVcIiBhbmQgaXMgc2FmZSB0byB1c2Ugd2l0aFxuICogYFN0cmluZy5mcm9tQ2hhckNvZGVgLiBBcyBzdWNoLCBvbmx5IGtleXMgdGhhdCBjb3JyZXNwb25kIHRvIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBwcm9kdWNlIGEgdmFsaWQgYGNoYXJDb2RlYCwgdGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgaXMgRW50ZXIuXG4gKiBUaGUgVGFiLWtleSBpcyBjb25zaWRlcmVkIG5vbi1wcmludGFibGUgYW5kIGRvZXMgbm90IGhhdmUgYSBgY2hhckNvZGVgLFxuICogcHJlc3VtYWJseSBiZWNhdXNlIGl0IGRvZXMgbm90IHByb2R1Y2UgYSB0YWItY2hhcmFjdGVyIGluIGJyb3dzZXJzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBgY2hhckNvZGVgIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBjaGFyQ29kZTtcbiAgdmFyIGtleUNvZGUgPSBuYXRpdmVFdmVudC5rZXlDb2RlO1xuXG4gIGlmICgnY2hhckNvZGUnIGluIG5hdGl2ZUV2ZW50KSB7XG4gICAgY2hhckNvZGUgPSBuYXRpdmVFdmVudC5jaGFyQ29kZTtcblxuICAgIC8vIEZGIGRvZXMgbm90IHNldCBgY2hhckNvZGVgIGZvciB0aGUgRW50ZXIta2V5LCBjaGVjayBhZ2FpbnN0IGBrZXlDb2RlYC5cbiAgICBpZiAoY2hhckNvZGUgPT09IDAgJiYga2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIGNoYXJDb2RlID0gMTM7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElFOCBkb2VzIG5vdCBpbXBsZW1lbnQgYGNoYXJDb2RlYCwgYnV0IGBrZXlDb2RlYCBoYXMgdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAgY2hhckNvZGUgPSBrZXlDb2RlO1xuICB9XG5cbiAgLy8gU29tZSBub24tcHJpbnRhYmxlIGtleXMgYXJlIHJlcG9ydGVkIGluIGBjaGFyQ29kZWAvYGtleUNvZGVgLCBkaXNjYXJkIHRoZW0uXG4gIC8vIE11c3Qgbm90IGRpc2NhcmQgdGhlIChub24tKXByaW50YWJsZSBFbnRlci1rZXkuXG4gIGlmIChjaGFyQ29kZSA+PSAzMiB8fCBjaGFyQ29kZSA9PT0gMTMpIHtcbiAgICByZXR1cm4gY2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRFdmVudENoYXJDb2RlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldEV2ZW50S2V5XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGdldEV2ZW50Q2hhckNvZGUgPSByZXF1aXJlKFwiLi9nZXRFdmVudENoYXJDb2RlXCIpO1xuXG4vKipcbiAqIE5vcm1hbGl6YXRpb24gb2YgZGVwcmVjYXRlZCBIVE1MNSBga2V5YCB2YWx1ZXNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cbnZhciBub3JtYWxpemVLZXkgPSB7XG4gICdFc2MnOiAnRXNjYXBlJyxcbiAgJ1NwYWNlYmFyJzogJyAnLFxuICAnTGVmdCc6ICdBcnJvd0xlZnQnLFxuICAnVXAnOiAnQXJyb3dVcCcsXG4gICdSaWdodCc6ICdBcnJvd1JpZ2h0JyxcbiAgJ0Rvd24nOiAnQXJyb3dEb3duJyxcbiAgJ0RlbCc6ICdEZWxldGUnLFxuICAnV2luJzogJ09TJyxcbiAgJ01lbnUnOiAnQ29udGV4dE1lbnUnLFxuICAnQXBwcyc6ICdDb250ZXh0TWVudScsXG4gICdTY3JvbGwnOiAnU2Nyb2xsTG9jaycsXG4gICdNb3pQcmludGFibGVLZXknOiAnVW5pZGVudGlmaWVkJ1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIGxlZ2FjeSBga2V5Q29kZWAgdG8gSFRNTDUgYGtleWBcbiAqIE9ubHkgc3BlY2lhbCBrZXlzIHN1cHBvcnRlZCwgYWxsIG90aGVycyBkZXBlbmQgb24ga2V5Ym9hcmQgbGF5b3V0IG9yIGJyb3dzZXJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cbnZhciB0cmFuc2xhdGVUb0tleSA9IHtcbiAgODogJ0JhY2tzcGFjZScsXG4gIDk6ICdUYWInLFxuICAxMjogJ0NsZWFyJyxcbiAgMTM6ICdFbnRlcicsXG4gIDE2OiAnU2hpZnQnLFxuICAxNzogJ0NvbnRyb2wnLFxuICAxODogJ0FsdCcsXG4gIDE5OiAnUGF1c2UnLFxuICAyMDogJ0NhcHNMb2NrJyxcbiAgMjc6ICdFc2NhcGUnLFxuICAzMjogJyAnLFxuICAzMzogJ1BhZ2VVcCcsXG4gIDM0OiAnUGFnZURvd24nLFxuICAzNTogJ0VuZCcsXG4gIDM2OiAnSG9tZScsXG4gIDM3OiAnQXJyb3dMZWZ0JyxcbiAgMzg6ICdBcnJvd1VwJyxcbiAgMzk6ICdBcnJvd1JpZ2h0JyxcbiAgNDA6ICdBcnJvd0Rvd24nLFxuICA0NTogJ0luc2VydCcsXG4gIDQ2OiAnRGVsZXRlJyxcbiAgMTEyOiAnRjEnLCAxMTM6ICdGMicsIDExNDogJ0YzJywgMTE1OiAnRjQnLCAxMTY6ICdGNScsIDExNzogJ0Y2JyxcbiAgMTE4OiAnRjcnLCAxMTk6ICdGOCcsIDEyMDogJ0Y5JywgMTIxOiAnRjEwJywgMTIyOiAnRjExJywgMTIzOiAnRjEyJyxcbiAgMTQ0OiAnTnVtTG9jaycsXG4gIDE0NTogJ1Njcm9sbExvY2snLFxuICAyMjQ6ICdNZXRhJ1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgYGtleWAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50S2V5KG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAvLyBOb3JtYWxpemUgaW5jb25zaXN0ZW50IHZhbHVlcyByZXBvcnRlZCBieSBicm93c2VycyBkdWUgdG9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYSB3b3JraW5nIGRyYWZ0IHNwZWNpZmljYXRpb24uXG5cbiAgICAvLyBGaXJlRm94IGltcGxlbWVudHMgYGtleWAgYnV0IHJldHVybnMgYE1velByaW50YWJsZUtleWAgZm9yIGFsbFxuICAgIC8vIHByaW50YWJsZSBjaGFyYWN0ZXJzIChub3JtYWxpemVkIHRvIGBVbmlkZW50aWZpZWRgKSwgaWdub3JlIGl0LlxuICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXlbbmF0aXZlRXZlbnQua2V5XSB8fCBuYXRpdmVFdmVudC5rZXk7XG4gICAgaWYgKGtleSAhPT0gJ1VuaWRlbnRpZmllZCcpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG5cbiAgLy8gQnJvd3NlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGtleWAsIHBvbHlmaWxsIGFzIG11Y2ggb2YgaXQgYXMgd2UgY2FuLlxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgIHZhciBjaGFyQ29kZSA9IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpO1xuXG4gICAgLy8gVGhlIGVudGVyLWtleSBpcyB0ZWNobmljYWxseSBib3RoIHByaW50YWJsZSBhbmQgbm9uLXByaW50YWJsZSBhbmQgY2FuXG4gICAgLy8gdGh1cyBiZSBjYXB0dXJlZCBieSBga2V5cHJlc3NgLCBubyBvdGhlciBub24tcHJpbnRhYmxlIGtleSBzaG91bGQuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAxMyA/ICdFbnRlcicgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgfVxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAvLyBXaGlsZSB1c2VyIGtleWJvYXJkIGxheW91dCBkZXRlcm1pbmVzIHRoZSBhY3R1YWwgbWVhbmluZyBvZiBlYWNoXG4gICAgLy8gYGtleUNvZGVgIHZhbHVlLCBhbG1vc3QgYWxsIGZ1bmN0aW9uIGtleXMgaGF2ZSBhIHVuaXZlcnNhbCB2YWx1ZS5cbiAgICByZXR1cm4gdHJhbnNsYXRlVG9LZXlbbmF0aXZlRXZlbnQua2V5Q29kZV0gfHwgJ1VuaWRlbnRpZmllZCc7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEV2ZW50S2V5O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldEV2ZW50TW9kaWZpZXJTdGF0ZVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxudmFyIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICAnQWx0JzogJ2FsdEtleScsXG4gICdDb250cm9sJzogJ2N0cmxLZXknLFxuICAnTWV0YSc6ICdtZXRhS2V5JyxcbiAgJ1NoaWZ0JzogJ3NoaWZ0S2V5J1xufTtcblxuLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBnZXRNb2RpZmllclN0YXRlIHNvIHdlIHNpbXBseSBtYXAgaXQgdG8gdGhlIG9ubHlcbi8vIG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQgaXRzZWxmLCBkb2VzIG5vdCBzdXBwb3J0IExvY2sta2V5cy5cbi8vIEN1cnJlbnRseSwgYWxsIG1ham9yIGJyb3dzZXJzIGV4Y2VwdCBDaHJvbWUgc2VlbXMgdG8gc3VwcG9ydCBMb2NrLWtleXMuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0aXZlRXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcbiAgaWYgKG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUpIHtcbiAgICByZXR1cm4gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpO1xuICB9XG4gIHZhciBrZXlQcm9wID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5QXJnXTtcbiAgcmV0dXJuIGtleVByb3AgPyAhIW5hdGl2ZUV2ZW50W2tleVByb3BdIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRFdmVudE1vZGlmaWVyU3RhdGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0RXZlbnRUYXJnZXRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgfHwgd2luZG93O1xuICAvLyBTYWZhcmkgbWF5IGZpcmUgZXZlbnRzIG9uIHRleHQgbm9kZXMgKE5vZGUuVEVYVF9OT0RFIGlzIDMpLlxuICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxuICByZXR1cm4gdGFyZ2V0Lm5vZGVUeXBlID09PSAzID8gdGFyZ2V0LnBhcmVudE5vZGUgOiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRUYXJnZXQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0SXRlcmF0b3JGblxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbnZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAqXG4gKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAqXG4gKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gKiAgICAgICAuLi5cbiAqICAgICB9XG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKFxuICAgIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKVxuICApO1xuICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yRm47XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldE1hcmt1cFdyYXBcbiAqL1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBEdW1teSBjb250YWluZXIgdXNlZCB0byBkZXRlY3Qgd2hpY2ggd3JhcHMgYXJlIG5lY2Vzc2FyeS5cbiAqL1xudmFyIGR1bW15Tm9kZSA9XG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpIDogbnVsbDtcblxuLyoqXG4gKiBTb21lIGJyb3dzZXJzIGNhbm5vdCB1c2UgYGlubmVySFRNTGAgdG8gcmVuZGVyIGNlcnRhaW4gZWxlbWVudHMgc3RhbmRhbG9uZSxcbiAqIHNvIHdlIHdyYXAgdGhlbSwgcmVuZGVyIHRoZSB3cmFwcGVkIG5vZGVzLCB0aGVuIGV4dHJhY3QgdGhlIGRlc2lyZWQgbm9kZS5cbiAqXG4gKiBJbiBJRTgsIGNlcnRhaW4gZWxlbWVudHMgY2Fubm90IHJlbmRlciBhbG9uZSwgc28gd3JhcCBhbGwgZWxlbWVudHMgKCcqJykuXG4gKi9cbnZhciBzaG91bGRXcmFwID0ge1xuICAvLyBGb3JjZSB3cmFwcGluZyBmb3IgU1ZHIGVsZW1lbnRzIGJlY2F1c2UgaWYgdGhleSBnZXQgY3JlYXRlZCBpbnNpZGUgYSA8ZGl2PixcbiAgLy8gdGhleSB3aWxsIGJlIGluaXRpYWxpemVkIGluIHRoZSB3cm9uZyBuYW1lc3BhY2UgKGFuZCB3aWxsIG5vdCBkaXNwbGF5KS5cbiAgJ2NpcmNsZSc6IHRydWUsXG4gICdjbGlwUGF0aCc6IHRydWUsXG4gICdkZWZzJzogdHJ1ZSxcbiAgJ2VsbGlwc2UnOiB0cnVlLFxuICAnZyc6IHRydWUsXG4gICdsaW5lJzogdHJ1ZSxcbiAgJ2xpbmVhckdyYWRpZW50JzogdHJ1ZSxcbiAgJ3BhdGgnOiB0cnVlLFxuICAncG9seWdvbic6IHRydWUsXG4gICdwb2x5bGluZSc6IHRydWUsXG4gICdyYWRpYWxHcmFkaWVudCc6IHRydWUsXG4gICdyZWN0JzogdHJ1ZSxcbiAgJ3N0b3AnOiB0cnVlLFxuICAndGV4dCc6IHRydWVcbn07XG5cbnZhciBzZWxlY3RXcmFwID0gWzEsICc8c2VsZWN0IG11bHRpcGxlPVwidHJ1ZVwiPicsICc8L3NlbGVjdD4nXTtcbnZhciB0YWJsZVdyYXAgPSBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXTtcbnZhciB0cldyYXAgPSBbMywgJzx0YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXTtcblxudmFyIHN2Z1dyYXAgPSBbMSwgJzxzdmc+JywgJzwvc3ZnPiddO1xuXG52YXIgbWFya3VwV3JhcCA9IHtcbiAgJyonOiBbMSwgJz88ZGl2PicsICc8L2Rpdj4nXSxcblxuICAnYXJlYSc6IFsxLCAnPG1hcD4nLCAnPC9tYXA+J10sXG4gICdjb2wnOiBbMiwgJzx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+JywgJzwvY29sZ3JvdXA+PC90YWJsZT4nXSxcbiAgJ2xlZ2VuZCc6IFsxLCAnPGZpZWxkc2V0PicsICc8L2ZpZWxkc2V0PiddLFxuICAncGFyYW0nOiBbMSwgJzxvYmplY3Q+JywgJzwvb2JqZWN0PiddLFxuICAndHInOiBbMiwgJzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblxuICAnb3B0Z3JvdXAnOiBzZWxlY3RXcmFwLFxuICAnb3B0aW9uJzogc2VsZWN0V3JhcCxcblxuICAnY2FwdGlvbic6IHRhYmxlV3JhcCxcbiAgJ2NvbGdyb3VwJzogdGFibGVXcmFwLFxuICAndGJvZHknOiB0YWJsZVdyYXAsXG4gICd0Zm9vdCc6IHRhYmxlV3JhcCxcbiAgJ3RoZWFkJzogdGFibGVXcmFwLFxuXG4gICd0ZCc6IHRyV3JhcCxcbiAgJ3RoJzogdHJXcmFwLFxuXG4gICdjaXJjbGUnOiBzdmdXcmFwLFxuICAnY2xpcFBhdGgnOiBzdmdXcmFwLFxuICAnZGVmcyc6IHN2Z1dyYXAsXG4gICdlbGxpcHNlJzogc3ZnV3JhcCxcbiAgJ2cnOiBzdmdXcmFwLFxuICAnbGluZSc6IHN2Z1dyYXAsXG4gICdsaW5lYXJHcmFkaWVudCc6IHN2Z1dyYXAsXG4gICdwYXRoJzogc3ZnV3JhcCxcbiAgJ3BvbHlnb24nOiBzdmdXcmFwLFxuICAncG9seWxpbmUnOiBzdmdXcmFwLFxuICAncmFkaWFsR3JhZGllbnQnOiBzdmdXcmFwLFxuICAncmVjdCc6IHN2Z1dyYXAsXG4gICdzdG9wJzogc3ZnV3JhcCxcbiAgJ3RleHQnOiBzdmdXcmFwXG59O1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcmt1cCB3cmFwIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzdXBwbGllZCBgbm9kZU5hbWVgLlxuICpcbiAqIE5PVEU6IFRoaXMgbGF6aWx5IGRldGVjdHMgd2hpY2ggd3JhcHMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGN1cnJlbnQgYnJvd3Nlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9kZU5hbWUgTG93ZXJjYXNlIGBub2RlTmFtZWAuXG4gKiBAcmV0dXJuIHs/YXJyYXl9IE1hcmt1cCB3cmFwIGNvbmZpZ3VyYXRpb24sIGlmIGFwcGxpY2FibGUuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcmt1cFdyYXAobm9kZU5hbWUpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudCghIWR1bW15Tm9kZSwgJ01hcmt1cCB3cmFwcGluZyBub2RlIG5vdCBpbml0aWFsaXplZCcpIDogaW52YXJpYW50KCEhZHVtbXlOb2RlKSk7XG4gIGlmICghbWFya3VwV3JhcC5oYXNPd25Qcm9wZXJ0eShub2RlTmFtZSkpIHtcbiAgICBub2RlTmFtZSA9ICcqJztcbiAgfVxuICBpZiAoIXNob3VsZFdyYXAuaGFzT3duUHJvcGVydHkobm9kZU5hbWUpKSB7XG4gICAgaWYgKG5vZGVOYW1lID09PSAnKicpIHtcbiAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSAnPGxpbmsgLz4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdW1teU5vZGUuaW5uZXJIVE1MID0gJzwnICsgbm9kZU5hbWUgKyAnPjwvJyArIG5vZGVOYW1lICsgJz4nO1xuICAgIH1cbiAgICBzaG91bGRXcmFwW25vZGVOYW1lXSA9ICFkdW1teU5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuICByZXR1cm4gc2hvdWxkV3JhcFtub2RlTmFtZV0gPyBtYXJrdXBXcmFwW25vZGVOYW1lXSA6IG51bGw7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXJrdXBXcmFwO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2WjJWMFRXRnlhM1Z3VjNKaGNDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUdkbGRFMWhjbXQxY0ZkeVlYQmNiaUFxTDF4dVhHNTJZWElnUlhobFkzVjBhVzl1Ulc1MmFYSnZibTFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZEZ3aUtUdGNibHh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1THlvcVhHNGdLaUJFZFcxdGVTQmpiMjUwWVdsdVpYSWdkWE5sWkNCMGJ5QmtaWFJsWTNRZ2QyaHBZMmdnZDNKaGNITWdZWEpsSUc1bFkyVnpjMkZ5ZVM1Y2JpQXFMMXh1ZG1GeUlHUjFiVzE1VG05a1pTQTlYRzRnSUVWNFpXTjFkR2x2YmtWdWRtbHliMjV0Wlc1MExtTmhibFZ6WlVSUFRTQS9JR1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb0oyUnBkaWNwSURvZ2JuVnNiRHRjYmx4dUx5b3FYRzRnS2lCVGIyMWxJR0p5YjNkelpYSnpJR05oYm01dmRDQjFjMlVnWUdsdWJtVnlTRlJOVEdBZ2RHOGdjbVZ1WkdWeUlHTmxjblJoYVc0Z1pXeGxiV1Z1ZEhNZ2MzUmhibVJoYkc5dVpTeGNiaUFxSUhOdklIZGxJSGR5WVhBZ2RHaGxiU3dnY21WdVpHVnlJSFJvWlNCM2NtRndjR1ZrSUc1dlpHVnpMQ0IwYUdWdUlHVjRkSEpoWTNRZ2RHaGxJR1JsYzJseVpXUWdibTlrWlM1Y2JpQXFYRzRnS2lCSmJpQkpSVGdzSUdObGNuUmhhVzRnWld4bGJXVnVkSE1nWTJGdWJtOTBJSEpsYm1SbGNpQmhiRzl1WlN3Z2MyOGdkM0poY0NCaGJHd2daV3hsYldWdWRITWdLQ2NxSnlrdVhHNGdLaTljYm5aaGNpQnphRzkxYkdSWGNtRndJRDBnZTF4dUlDQXZMeUJHYjNKalpTQjNjbUZ3Y0dsdVp5Qm1iM0lnVTFaSElHVnNaVzFsYm5SeklHSmxZMkYxYzJVZ2FXWWdkR2hsZVNCblpYUWdZM0psWVhSbFpDQnBibk5wWkdVZ1lTQThaR2wyUGl4Y2JpQWdMeThnZEdobGVTQjNhV3hzSUdKbElHbHVhWFJwWVd4cGVtVmtJR2x1SUhSb1pTQjNjbTl1WnlCdVlXMWxjM0JoWTJVZ0tHRnVaQ0IzYVd4c0lHNXZkQ0JrYVhOd2JHRjVLUzVjYmlBZ0oyTnBjbU5zWlNjNklIUnlkV1VzWEc0Z0lDZGpiR2x3VUdGMGFDYzZJSFJ5ZFdVc1hHNGdJQ2RrWldaekp6b2dkSEoxWlN4Y2JpQWdKMlZzYkdsd2MyVW5PaUIwY25WbExGeHVJQ0FuWnljNklIUnlkV1VzWEc0Z0lDZHNhVzVsSnpvZ2RISjFaU3hjYmlBZ0oyeHBibVZoY2tkeVlXUnBaVzUwSnpvZ2RISjFaU3hjYmlBZ0ozQmhkR2duT2lCMGNuVmxMRnh1SUNBbmNHOXNlV2R2YmljNklIUnlkV1VzWEc0Z0lDZHdiMng1YkdsdVpTYzZJSFJ5ZFdVc1hHNGdJQ2R5WVdScFlXeEhjbUZrYVdWdWRDYzZJSFJ5ZFdVc1hHNGdJQ2R5WldOMEp6b2dkSEoxWlN4Y2JpQWdKM04wYjNBbk9pQjBjblZsTEZ4dUlDQW5kR1Y0ZENjNklIUnlkV1ZjYm4wN1hHNWNiblpoY2lCelpXeGxZM1JYY21Gd0lEMGdXekVzSUNjOGMyVnNaV04wSUcxMWJIUnBjR3hsUFZ3aWRISjFaVndpUGljc0lDYzhMM05sYkdWamRENG5YVHRjYm5aaGNpQjBZV0pzWlZkeVlYQWdQU0JiTVN3Z0p6eDBZV0pzWlQ0bkxDQW5QQzkwWVdKc1pUNG5YVHRjYm5aaGNpQjBjbGR5WVhBZ1BTQmJNeXdnSnp4MFlXSnNaVDQ4ZEdKdlpIaytQSFJ5UGljc0lDYzhMM1J5UGp3dmRHSnZaSGsrUEM5MFlXSnNaVDRuWFR0Y2JseHVkbUZ5SUhOMloxZHlZWEFnUFNCYk1Td2dKenh6ZG1jK0p5d2dKend2YzNablBpZGRPMXh1WEc1MllYSWdiV0Z5YTNWd1YzSmhjQ0E5SUh0Y2JpQWdKeW9uT2lCYk1Td2dKejg4WkdsMlBpY3NJQ2M4TDJScGRqNG5YU3hjYmx4dUlDQW5ZWEpsWVNjNklGc3hMQ0FuUEcxaGNENG5MQ0FuUEM5dFlYQStKMTBzWEc0Z0lDZGpiMnduT2lCYk1pd2dKengwWVdKc1pUNDhkR0p2WkhrK1BDOTBZbTlrZVQ0OFkyOXNaM0p2ZFhBK0p5d2dKend2WTI5c1ozSnZkWEErUEM5MFlXSnNaVDRuWFN4Y2JpQWdKMnhsWjJWdVpDYzZJRnN4TENBblBHWnBaV3hrYzJWMFBpY3NJQ2M4TDJacFpXeGtjMlYwUGlkZExGeHVJQ0FuY0dGeVlXMG5PaUJiTVN3Z0p6eHZZbXBsWTNRK0p5d2dKend2YjJKcVpXTjBQaWRkTEZ4dUlDQW5kSEluT2lCYk1pd2dKengwWVdKc1pUNDhkR0p2WkhrK0p5d2dKend2ZEdKdlpIaytQQzkwWVdKc1pUNG5YU3hjYmx4dUlDQW5iM0IwWjNKdmRYQW5PaUJ6Wld4bFkzUlhjbUZ3TEZ4dUlDQW5iM0IwYVc5dUp6b2djMlZzWldOMFYzSmhjQ3hjYmx4dUlDQW5ZMkZ3ZEdsdmJpYzZJSFJoWW14bFYzSmhjQ3hjYmlBZ0oyTnZiR2R5YjNWd0p6b2dkR0ZpYkdWWGNtRndMRnh1SUNBbmRHSnZaSGtuT2lCMFlXSnNaVmR5WVhBc1hHNGdJQ2QwWm05dmRDYzZJSFJoWW14bFYzSmhjQ3hjYmlBZ0ozUm9aV0ZrSnpvZ2RHRmliR1ZYY21Gd0xGeHVYRzRnSUNkMFpDYzZJSFJ5VjNKaGNDeGNiaUFnSjNSb0p6b2dkSEpYY21Gd0xGeHVYRzRnSUNkamFYSmpiR1VuT2lCemRtZFhjbUZ3TEZ4dUlDQW5ZMnhwY0ZCaGRHZ25PaUJ6ZG1kWGNtRndMRnh1SUNBblpHVm1jeWM2SUhOMloxZHlZWEFzWEc0Z0lDZGxiR3hwY0hObEp6b2djM1puVjNKaGNDeGNiaUFnSjJjbk9pQnpkbWRYY21Gd0xGeHVJQ0FuYkdsdVpTYzZJSE4yWjFkeVlYQXNYRzRnSUNkc2FXNWxZWEpIY21Ga2FXVnVkQ2M2SUhOMloxZHlZWEFzWEc0Z0lDZHdZWFJvSnpvZ2MzWm5WM0poY0N4Y2JpQWdKM0J2YkhsbmIyNG5PaUJ6ZG1kWGNtRndMRnh1SUNBbmNHOXNlV3hwYm1Vbk9pQnpkbWRYY21Gd0xGeHVJQ0FuY21Ga2FXRnNSM0poWkdsbGJuUW5PaUJ6ZG1kWGNtRndMRnh1SUNBbmNtVmpkQ2M2SUhOMloxZHlZWEFzWEc0Z0lDZHpkRzl3SnpvZ2MzWm5WM0poY0N4Y2JpQWdKM1JsZUhRbk9pQnpkbWRYY21Gd1hHNTlPMXh1WEc0dktpcGNiaUFxSUVkbGRITWdkR2hsSUcxaGNtdDFjQ0IzY21Gd0lHTnZibVpwWjNWeVlYUnBiMjRnWm05eUlIUm9aU0J6ZFhCd2JHbGxaQ0JnYm05a1pVNWhiV1ZnTGx4dUlDcGNiaUFxSUU1UFZFVTZJRlJvYVhNZ2JHRjZhV3g1SUdSbGRHVmpkSE1nZDJocFkyZ2dkM0poY0hNZ1lYSmxJRzVsWTJWemMyRnllU0JtYjNJZ2RHaGxJR04xY25KbGJuUWdZbkp2ZDNObGNpNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2JtOWtaVTVoYldVZ1RHOTNaWEpqWVhObElHQnViMlJsVG1GdFpXQXVYRzRnS2lCQWNtVjBkWEp1SUhzL1lYSnlZWGw5SUUxaGNtdDFjQ0IzY21Gd0lHTnZibVpwWjNWeVlYUnBiMjRzSUdsbUlHRndjR3hwWTJGaWJHVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHZGxkRTFoY210MWNGZHlZWEFvYm05a1pVNWhiV1VwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDZ2hJV1IxYlcxNVRtOWtaU3dnSjAxaGNtdDFjQ0IzY21Gd2NHbHVaeUJ1YjJSbElHNXZkQ0JwYm1sMGFXRnNhWHBsWkNjcElEb2dhVzUyWVhKcFlXNTBLQ0VoWkhWdGJYbE9iMlJsS1NrN1hHNGdJR2xtSUNnaGJXRnlhM1Z3VjNKaGNDNW9ZWE5QZDI1UWNtOXdaWEowZVNodWIyUmxUbUZ0WlNrcElIdGNiaUFnSUNCdWIyUmxUbUZ0WlNBOUlDY3FKenRjYmlBZ2ZWeHVJQ0JwWmlBb0lYTm9iM1ZzWkZkeVlYQXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtOWtaVTVoYldVcEtTQjdYRzRnSUNBZ2FXWWdLRzV2WkdWT1lXMWxJRDA5UFNBbktpY3BJSHRjYmlBZ0lDQWdJR1IxYlcxNVRtOWtaUzVwYm01bGNraFVUVXdnUFNBblBHeHBibXNnTHo0bk8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JrZFcxdGVVNXZaR1V1YVc1dVpYSklWRTFNSUQwZ0p6d25JQ3NnYm05a1pVNWhiV1VnS3lBblBqd3ZKeUFySUc1dlpHVk9ZVzFsSUNzZ0p6NG5PMXh1SUNBZ0lIMWNiaUFnSUNCemFHOTFiR1JYY21Gd1cyNXZaR1ZPWVcxbFhTQTlJQ0ZrZFcxdGVVNXZaR1V1Wm1seWMzUkRhR2xzWkR0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYzJodmRXeGtWM0poY0Z0dWIyUmxUbUZ0WlYwZ1B5QnRZWEpyZFhCWGNtRndXMjV2WkdWT1lXMWxYU0E2SUc1MWJHdzdYRzU5WEc1Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQm5aWFJOWVhKcmRYQlhjbUZ3TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBHaXZlbiBhbnkgbm9kZSByZXR1cm4gdGhlIGZpcnN0IGxlYWYgbm9kZSB3aXRob3V0IGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICBub2RlID0gbm9kZS5maXJzdENoaWxkO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbmV4dCBzaWJsaW5nIHdpdGhpbiBhIGNvbnRhaW5lci4gVGhpcyB3aWxsIHdhbGsgdXAgdGhlXG4gKiBET00gaWYgYSBub2RlJ3Mgc2libGluZ3MgaGF2ZSBiZWVuIGV4aGF1c3RlZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5mdW5jdGlvbiBnZXRTaWJsaW5nTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG59XG5cbi8qKlxuICogR2V0IG9iamVjdCBkZXNjcmliaW5nIHRoZSBub2RlcyB3aGljaCBjb250YWluIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gcm9vdFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgdmFyIG5vZGVTdGFydCA9IDA7XG4gIHZhciBub2RlRW5kID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICBub2RlRW5kID0gbm9kZVN0YXJ0ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChub2RlU3RhcnQgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCAtIG5vZGVTdGFydFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBub2RlU3RhcnQgPSBub2RlRW5kO1xuICAgIH1cblxuICAgIG5vZGUgPSBnZXRMZWFmTm9kZShnZXRTaWJsaW5nTm9kZShub2RlKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lclxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPQ19OT0RFX1RZUEUgPSA5O1xuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01Eb2N1bWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRoYXQgbWF5IGNvbnRhaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgUmVhY3QgY29tcG9uZW50XG4gKiBAcmV0dXJuIHs/Kn0gRE9NIGVsZW1lbnQgdGhhdCBtYXkgaGF2ZSB0aGUgcmVhY3RSb290IElELCBvciBudWxsLlxuICovXG5mdW5jdGlvbiBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKSB7XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5kb2N1bWVudEVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5maXJzdENoaWxkO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldFRleHRDb250ZW50QWNjZXNzb3JcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgY29udGVudEtleSA9IG51bGw7XG5cbi8qKlxuICogR2V0cyB0aGUga2V5IHVzZWQgdG8gYWNjZXNzIHRleHQgY29udGVudCBvbiBhIERPTSBub2RlLlxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IEtleSB1c2VkIHRvIGFjY2VzcyB0ZXh0IGNvbnRlbnQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcigpIHtcbiAgaWYgKCFjb250ZW50S2V5ICYmIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAgIC8vIFByZWZlciB0ZXh0Q29udGVudCB0byBpbm5lclRleHQgYmVjYXVzZSBtYW55IGJyb3dzZXJzIHN1cHBvcnQgYm90aCBidXRcbiAgICAvLyBTVkcgPHRleHQ+IGVsZW1lbnRzIGRvbid0IHN1cHBvcnQgaW5uZXJUZXh0IGV2ZW4gd2hlbiA8ZGl2PiBkb2VzLlxuICAgIGNvbnRlbnRLZXkgPSAndGV4dENvbnRlbnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/XG4gICAgICAndGV4dENvbnRlbnQnIDpcbiAgICAgICdpbm5lclRleHQnO1xuICB9XG4gIHJldHVybiBjb250ZW50S2V5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRleHRDb250ZW50QWNjZXNzb3I7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb25cbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogR2V0cyB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBzdXBwbGllZCBlbGVtZW50IG9yIHdpbmRvdy5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlcyBhcmUgdW5ib3VuZGVkLCB1bmxpa2UgYGdldFNjcm9sbFBvc2l0aW9uYC4gVGhpcyBtZWFucyB0aGV5XG4gKiBtYXkgYmUgbmVnYXRpdmUgb3IgZXhjZWVkIHRoZSBlbGVtZW50IGJvdW5kYXJpZXMgKHdoaWNoIGlzIHBvc3NpYmxlIHVzaW5nXG4gKiBpbmVydGlhbCBzY3JvbGxpbmcpLlxuICpcbiAqIEBwYXJhbSB7RE9NV2luZG93fERPTUVsZW1lbnR9IHNjcm9sbGFibGVcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwIHdpdGggYHhgIGFuZCBgeWAga2V5cy5cbiAqL1xuZnVuY3Rpb24gZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xsYWJsZSkge1xuICBpZiAoc2Nyb2xsYWJsZSA9PT0gd2luZG93KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHk6IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHNjcm9sbGFibGUuc2Nyb2xsTGVmdCxcbiAgICB5OiBzY3JvbGxhYmxlLnNjcm9sbFRvcFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGh5cGhlbmF0ZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgX3VwcGVyY2FzZVBhdHRlcm4gPSAvKFtBLVpdKS9nO1xuXG4vKipcbiAqIEh5cGhlbmF0ZXMgYSBjYW1lbGNhc2VkIHN0cmluZywgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICpcbiAqIEZvciBDU1Mgc3R5bGUgbmFtZXMsIHVzZSBgaHlwaGVuYXRlU3R5bGVOYW1lYCBpbnN0ZWFkIHdoaWNoIHdvcmtzIHByb3Blcmx5XG4gKiB3aXRoIGFsbCB2ZW5kb3IgcHJlZml4ZXMsIGluY2x1ZGluZyBgbXNgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaHlwaGVuYXRlKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoX3VwcGVyY2FzZVBhdHRlcm4sICctJDEnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGh5cGhlbmF0ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBoeXBoZW5hdGVTdHlsZU5hbWVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBoeXBoZW5hdGUgPSByZXF1aXJlKFwiLi9oeXBoZW5hdGVcIik7XG5cbnZhciBtc1BhdHRlcm4gPSAvXm1zLS87XG5cbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ01velRyYW5zaXRpb24nKVxuICogICA8IFwiLW1vei10cmFuc2l0aW9uXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ21zVHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbXMtdHJhbnNpdGlvblwiXG4gKlxuICogQXMgTW9kZXJuaXpyIHN1Z2dlc3RzIChodHRwOi8vbW9kZXJuaXpyLmNvbS9kb2NzLyNwcmVmaXhlZCksIGFuIGBtc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8gYC1tcy1gLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKHN0cmluZykge1xuICByZXR1cm4gaHlwaGVuYXRlKHN0cmluZykucmVwbGFjZShtc1BhdHRlcm4sICctbXMtJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaHlwaGVuYXRlU3R5bGVOYW1lO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnRcIik7XG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RW1wdHlDb21wb25lbnRcIik7XG52YXIgUmVhY3ROYXRpdmVDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdE5hdGl2ZUNvbXBvbmVudFwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vLyBUbyBhdm9pZCBhIGN5Y2xpYyBkZXBlbmRlbmN5LCB3ZSBjcmVhdGUgdGhlIGZpbmFsIGNsYXNzIGluIHRoaXMgbW9kdWxlXG52YXIgUmVhY3RDb21wb3NpdGVDb21wb25lbnRXcmFwcGVyID0gZnVuY3Rpb24oKSB7IH07XG5hc3NpZ24oXG4gIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlci5wcm90b3R5cGUsXG4gIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50Lk1peGluLFxuICB7XG4gICAgX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnRcbiAgfVxuKTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgYSBrbm93biBpbnRlcm5hbCB0eXBlLiBJLmUuIG5vdCBhIHVzZXJcbiAqIHByb3ZpZGVkIGNvbXBvc2l0ZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgdmFsaWQgaW50ZXJuYWwgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNJbnRlcm5hbENvbXBvbmVudFR5cGUodHlwZSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHR5cGUucHJvdG90eXBlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB0eXBlLnByb3RvdHlwZS5tb3VudENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB0eXBlLnByb3RvdHlwZS5yZWNlaXZlQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBSZWFjdE5vZGUsIGNyZWF0ZSBhbiBpbnN0YW5jZSB0aGF0IHdpbGwgYWN0dWFsbHkgYmUgbW91bnRlZC5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZVxuICogQHBhcmFtIHsqfSBwYXJlbnRDb21wb3NpdGVUeXBlIFRoZSBjb21wb3NpdGUgdHlwZSB0aGF0IHJlc29sdmVkIHRoaXMuXG4gKiBAcmV0dXJuIHtvYmplY3R9IEEgbmV3IGluc3RhbmNlIG9mIHRoZSBlbGVtZW50J3MgY29uc3RydWN0b3IuXG4gKiBAcHJvdGVjdGVkXG4gKi9cbmZ1bmN0aW9uIGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQobm9kZSwgcGFyZW50Q29tcG9zaXRlVHlwZSkge1xuICB2YXIgaW5zdGFuY2U7XG5cbiAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gZmFsc2UpIHtcbiAgICBub2RlID0gUmVhY3RFbXB0eUNvbXBvbmVudC5lbXB0eUVsZW1lbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG5vZGUgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBub2RlO1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICBlbGVtZW50ICYmICh0eXBlb2YgZWxlbWVudC50eXBlID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSxcbiAgICAgICAgJ09ubHkgZnVuY3Rpb25zIG9yIHN0cmluZ3MgY2FuIGJlIG1vdW50ZWQgYXMgUmVhY3QgY29tcG9uZW50cy4nXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHN0cmluZyB2YWx1ZXNcbiAgICBpZiAocGFyZW50Q29tcG9zaXRlVHlwZSA9PT0gZWxlbWVudC50eXBlICYmXG4gICAgICAgIHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBBdm9pZCByZWN1cnNpb24gaWYgdGhlIHdyYXBwZXIgcmVuZGVycyBpdHNlbGYuXG4gICAgICBpbnN0YW5jZSA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmNyZWF0ZUludGVybmFsQ29tcG9uZW50KGVsZW1lbnQpO1xuICAgICAgLy8gQWxsIG5hdGl2ZSBjb21wb25lbnRzIGFyZSBjdXJyZW50bHkgd3JhcHBlZCBpbiBhIGNvbXBvc2l0ZSBzbyB3ZSdyZVxuICAgICAgLy8gc2FmZSB0byBhc3N1bWUgdGhhdCB0aGlzIGlzIHdoYXQgd2Ugc2hvdWxkIGluc3RhbnRpYXRlLlxuICAgIH0gZWxzZSBpZiAoaXNJbnRlcm5hbENvbXBvbmVudFR5cGUoZWxlbWVudC50eXBlKSkge1xuICAgICAgLy8gVGhpcyBpcyB0ZW1wb3JhcmlseSBhdmFpbGFibGUgZm9yIGN1c3RvbSBjb21wb25lbnRzIHRoYXQgYXJlIG5vdCBzdHJpbmdcbiAgICAgIC8vIHJlcHJlc2VuYXRpb25zLiBJLmUuIEFSVC4gT25jZSB0aG9zZSBhcmUgdXBkYXRlZCB0byB1c2UgdGhlIHN0cmluZ1xuICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHdlIGNhbiBkcm9wIHRoaXMgY29kZSBwYXRoLlxuICAgICAgaW5zdGFuY2UgPSBuZXcgZWxlbWVudC50eXBlKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZSA9IG5ldyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudFdyYXBwZXIoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBub2RlID09PSAnbnVtYmVyJykge1xuICAgIGluc3RhbmNlID0gUmVhY3ROYXRpdmVDb21wb25lbnQuY3JlYXRlSW5zdGFuY2VGb3JUZXh0KG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBmYWxzZSxcbiAgICAgICdFbmNvdW50ZXJlZCBpbnZhbGlkIFJlYWN0IG5vZGUgb2YgdHlwZSAlcycsXG4gICAgICB0eXBlb2Ygbm9kZVxuICAgICkgOiBpbnZhcmlhbnQoZmFsc2UpKTtcbiAgfVxuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIHR5cGVvZiBpbnN0YW5jZS5jb25zdHJ1Y3QgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBpbnN0YW5jZS5tb3VudENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIGluc3RhbmNlLnJlY2VpdmVDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBpbnN0YW5jZS51bm1vdW50Q29tcG9uZW50ID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ09ubHkgUmVhY3QgQ29tcG9uZW50cyBjYW4gYmUgbW91bnRlZC4nXG4gICAgKSA6IG51bGwpO1xuICB9XG5cbiAgLy8gU2V0cyB1cCB0aGUgaW5zdGFuY2UuIFRoaXMgY2FuIHByb2JhYmx5IGp1c3QgbW92ZSBpbnRvIHRoZSBjb25zdHJ1Y3RvciBub3cuXG4gIGluc3RhbmNlLmNvbnN0cnVjdChub2RlKTtcblxuICAvLyBUaGVzZSB0d28gZmllbGRzIGFyZSB1c2VkIGJ5IHRoZSBET00gYW5kIEFSVCBkaWZmaW5nIGFsZ29yaXRobXNcbiAgLy8gcmVzcGVjdGl2ZWx5LiBJbnN0ZWFkIG9mIHVzaW5nIGV4cGFuZG9zIG9uIGNvbXBvbmVudHMsIHdlIHNob3VsZCBiZVxuICAvLyBzdG9yaW5nIHRoZSBzdGF0ZSBuZWVkZWQgYnkgdGhlIGRpZmZpbmcgYWxnb3JpdGhtcyBlbHNld2hlcmUuXG4gIGluc3RhbmNlLl9tb3VudEluZGV4ID0gMDtcbiAgaW5zdGFuY2UuX21vdW50SW1hZ2UgPSBudWxsO1xuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICBpbnN0YW5jZS5faXNPd25lck5lY2Vzc2FyeSA9IGZhbHNlO1xuICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IGZhbHNlO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgaW5zdGFuY2VzIHNob3VsZCBmdWxseSBjb25zdHJ1Y3RlZCBhdCB0aGlzIHBvaW50LCBzbyB0aGV5IHNob3VsZFxuICAvLyBub3QgZ2V0IGFueSBuZXcgZmllbGRzIGFkZGVkIHRvIHRoZW0gYXQgdGhpcyBwb2ludC5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIGlmIChPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHtcbiAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyhpbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZhVzV6ZEdGdWRHbGhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdhVzV6ZEdGdWRHbGhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRGeHVJQ29nUUhSNWNHVmphR1ZqYTNNZ2MzUmhkR2xqTFc5dWJIbGNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJTWldGamRFTnZiWEJ2YzJsMFpVTnZiWEJ2Ym1WdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRMjl0Y0c5emFYUmxRMjl0Y0c5dVpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWdGNIUjVRMjl0Y0c5dVpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFRtRjBhWFpsUTI5dGNHOXVaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNST1lYUnBkbVZEYjIxd2IyNWxiblJjSWlrN1hHNWNiblpoY2lCaGMzTnBaMjRnUFNCeVpYRjFhWEpsS0Z3aUxpOVBZbXBsWTNRdVlYTnphV2R1WENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUIzWVhKdWFXNW5JRDBnY21WeGRXbHlaU2hjSWk0dmQyRnlibWx1WjF3aUtUdGNibHh1THk4Z1ZHOGdZWFp2YVdRZ1lTQmplV05zYVdNZ1pHVndaVzVrWlc1amVTd2dkMlVnWTNKbFlYUmxJSFJvWlNCbWFXNWhiQ0JqYkdGemN5QnBiaUIwYUdseklHMXZaSFZzWlZ4dWRtRnlJRkpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1MFYzSmhjSEJsY2lBOUlHWjFibU4wYVc5dUtDa2dleUI5TzF4dVlYTnphV2R1S0Z4dUlDQlNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZEZkeVlYQndaWEl1Y0hKdmRHOTBlWEJsTEZ4dUlDQlNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZEM1TmFYaHBiaXhjYmlBZ2UxeHVJQ0FnSUY5cGJuTjBZVzUwYVdGMFpWSmxZV04wUTI5dGNHOXVaVzUwT2lCcGJuTjBZVzUwYVdGMFpWSmxZV04wUTI5dGNHOXVaVzUwWEc0Z0lIMWNiaWs3WEc1Y2JpOHFLbHh1SUNvZ1EyaGxZMnNnYVdZZ2RHaGxJSFI1Y0dVZ2NtVm1aWEpsYm1ObElHbHpJR0VnYTI1dmQyNGdhVzUwWlhKdVlXd2dkSGx3WlM0Z1NTNWxMaUJ1YjNRZ1lTQjFjMlZ5WEc0Z0tpQndjbTkyYVdSbFpDQmpiMjF3YjNOcGRHVWdkSGx3WlM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCMGVYQmxYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlNCU1pYUjFjbTV6SUhSeWRXVWdhV1lnZEdocGN5QnBjeUJoSUhaaGJHbGtJR2x1ZEdWeWJtRnNJSFI1Y0dVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdselNXNTBaWEp1WVd4RGIyMXdiMjVsYm5SVWVYQmxLSFI1Y0dVcElIdGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQjBlWEJsYjJZZ2RIbHdaU0E5UFQwZ0oyWjFibU4wYVc5dUp5QW1KbHh1SUNBZ0lIUjVjR1Z2WmlCMGVYQmxMbkJ5YjNSdmRIbHdaU0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY2dKaVpjYmlBZ0lDQjBlWEJsYjJZZ2RIbHdaUzV3Y205MGIzUjVjR1V1Ylc5MWJuUkRiMjF3YjI1bGJuUWdQVDA5SUNkbWRXNWpkR2x2YmljZ0ppWmNiaUFnSUNCMGVYQmxiMllnZEhsd1pTNXdjbTkwYjNSNWNHVXVjbVZqWldsMlpVTnZiWEJ2Ym1WdWRDQTlQVDBnSjJaMWJtTjBhVzl1SjF4dUlDQXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZHBkbVZ1SUdFZ1VtVmhZM1JPYjJSbExDQmpjbVZoZEdVZ1lXNGdhVzV6ZEdGdVkyVWdkR2hoZENCM2FXeHNJR0ZqZEhWaGJHeDVJR0psSUcxdmRXNTBaV1F1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRTWldGamRFNXZaR1Y5SUc1dlpHVmNiaUFxSUVCd1lYSmhiU0I3S24wZ2NHRnlaVzUwUTI5dGNHOXphWFJsVkhsd1pTQlVhR1VnWTI5dGNHOXphWFJsSUhSNWNHVWdkR2hoZENCeVpYTnZiSFpsWkNCMGFHbHpMbHh1SUNvZ1FISmxkSFZ5YmlCN2IySnFaV04wZlNCQklHNWxkeUJwYm5OMFlXNWpaU0J2WmlCMGFHVWdaV3hsYldWdWRDZHpJR052Ym5OMGNuVmpkRzl5TGx4dUlDb2dRSEJ5YjNSbFkzUmxaRnh1SUNvdlhHNW1kVzVqZEdsdmJpQnBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MEtHNXZaR1VzSUhCaGNtVnVkRU52YlhCdmMybDBaVlI1Y0dVcElIdGNiaUFnZG1GeUlHbHVjM1JoYm1ObE8xeHVYRzRnSUdsbUlDaHViMlJsSUQwOVBTQnVkV3hzSUh4OElHNXZaR1VnUFQwOUlHWmhiSE5sS1NCN1hHNGdJQ0FnYm05a1pTQTlJRkpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblF1Wlcxd2RIbEZiR1Z0Wlc1ME8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0hSNWNHVnZaaUJ1YjJSbElEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJSFpoY2lCbGJHVnRaVzUwSUQwZ2JtOWtaVHRjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ1pXeGxiV1Z1ZENBbUppQW9kSGx3Wlc5bUlHVnNaVzFsYm5RdWRIbHdaU0E5UFQwZ0oyWjFibU4wYVc5dUp5QjhmRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGVYQmxiMllnWld4bGJXVnVkQzUwZVhCbElEMDlQU0FuYzNSeWFXNW5KeWtzWEc0Z0lDQWdJQ0FnSUNkUGJteDVJR1oxYm1OMGFXOXVjeUJ2Y2lCemRISnBibWR6SUdOaGJpQmlaU0J0YjNWdWRHVmtJR0Z6SUZKbFlXTjBJR052YlhCdmJtVnVkSE11SjF4dUlDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUZOd1pXTnBZV3dnWTJGelpTQnpkSEpwYm1jZ2RtRnNkV1Z6WEc0Z0lDQWdhV1lnS0hCaGNtVnVkRU52YlhCdmMybDBaVlI1Y0dVZ1BUMDlJR1ZzWlcxbGJuUXVkSGx3WlNBbUpseHVJQ0FnSUNBZ0lDQjBlWEJsYjJZZ1pXeGxiV1Z1ZEM1MGVYQmxJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ0x5OGdRWFp2YVdRZ2NtVmpkWEp6YVc5dUlHbG1JSFJvWlNCM2NtRndjR1Z5SUhKbGJtUmxjbk1nYVhSelpXeG1MbHh1SUNBZ0lDQWdhVzV6ZEdGdVkyVWdQU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEM1amNtVmhkR1ZKYm5SbGNtNWhiRU52YlhCdmJtVnVkQ2hsYkdWdFpXNTBLVHRjYmlBZ0lDQWdJQzh2SUVGc2JDQnVZWFJwZG1VZ1kyOXRjRzl1Wlc1MGN5QmhjbVVnWTNWeWNtVnVkR3g1SUhkeVlYQndaV1FnYVc0Z1lTQmpiMjF3YjNOcGRHVWdjMjhnZDJVbmNtVmNiaUFnSUNBZ0lDOHZJSE5oWm1VZ2RHOGdZWE56ZFcxbElIUm9ZWFFnZEdocGN5QnBjeUIzYUdGMElIZGxJSE5vYjNWc1pDQnBibk4wWVc1MGFXRjBaUzVjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR2x6U1c1MFpYSnVZV3hEYjIxd2IyNWxiblJVZVhCbEtHVnNaVzFsYm5RdWRIbHdaU2twSUh0Y2JpQWdJQ0FnSUM4dklGUm9hWE1nYVhNZ2RHVnRjRzl5WVhKcGJIa2dZWFpoYVd4aFlteGxJR1p2Y2lCamRYTjBiMjBnWTI5dGNHOXVaVzUwY3lCMGFHRjBJR0Z5WlNCdWIzUWdjM1J5YVc1blhHNGdJQ0FnSUNBdkx5QnlaWEJ5WlhObGJtRjBhVzl1Y3k0Z1NTNWxMaUJCVWxRdUlFOXVZMlVnZEdodmMyVWdZWEpsSUhWd1pHRjBaV1FnZEc4Z2RYTmxJSFJvWlNCemRISnBibWRjYmlBZ0lDQWdJQzh2SUhKbGNISmxjMlZ1ZEdGMGFXOXVMQ0IzWlNCallXNGdaSEp2Y0NCMGFHbHpJR052WkdVZ2NHRjBhQzVjYmlBZ0lDQWdJR2x1YzNSaGJtTmxJRDBnYm1WM0lHVnNaVzFsYm5RdWRIbHdaU2hsYkdWdFpXNTBLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2FXNXpkR0Z1WTJVZ1BTQnVaWGNnVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUlhjbUZ3Y0dWeUtDazdYRzRnSUNBZ2ZWeHVJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJ1YjJSbElEMDlQU0FuYzNSeWFXNW5KeUI4ZkNCMGVYQmxiMllnYm05a1pTQTlQVDBnSjI1MWJXSmxjaWNwSUh0Y2JpQWdJQ0JwYm5OMFlXNWpaU0E5SUZKbFlXTjBUbUYwYVhabFEyOXRjRzl1Wlc1MExtTnlaV0YwWlVsdWMzUmhibU5sUm05eVZHVjRkQ2h1YjJSbEtUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FuUlc1amIzVnVkR1Z5WldRZ2FXNTJZV3hwWkNCU1pXRmpkQ0J1YjJSbElHOW1JSFI1Y0dVZ0pYTW5MRnh1SUNBZ0lDQWdkSGx3Wlc5bUlHNXZaR1ZjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0daaGJITmxLU2s3WEc0Z0lIMWNibHh1SUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQjBlWEJsYjJZZ2FXNXpkR0Z1WTJVdVkyOXVjM1J5ZFdOMElEMDlQU0FuWm5WdVkzUnBiMjRuSUNZbVhHNGdJQ0FnSUNCMGVYQmxiMllnYVc1emRHRnVZMlV1Ylc5MWJuUkRiMjF3YjI1bGJuUWdQVDA5SUNkbWRXNWpkR2x2YmljZ0ppWmNiaUFnSUNBZ0lIUjVjR1Z2WmlCcGJuTjBZVzVqWlM1eVpXTmxhWFpsUTI5dGNHOXVaVzUwSUQwOVBTQW5ablZ1WTNScGIyNG5JQ1ltWEc0Z0lDQWdJQ0IwZVhCbGIyWWdhVzV6ZEdGdVkyVXVkVzV0YjNWdWRFTnZiWEJ2Ym1WdWRDQTlQVDBnSjJaMWJtTjBhVzl1Snl4Y2JpQWdJQ0FnSUNkUGJteDVJRkpsWVdOMElFTnZiWEJ2Ym1WdWRITWdZMkZ1SUdKbElHMXZkVzUwWldRdUoxeHVJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdmVnh1WEc0Z0lDOHZJRk5sZEhNZ2RYQWdkR2hsSUdsdWMzUmhibU5sTGlCVWFHbHpJR05oYmlCd2NtOWlZV0pzZVNCcWRYTjBJRzF2ZG1VZ2FXNTBieUIwYUdVZ1kyOXVjM1J5ZFdOMGIzSWdibTkzTGx4dUlDQnBibk4wWVc1alpTNWpiMjV6ZEhKMVkzUW9ibTlrWlNrN1hHNWNiaUFnTHk4Z1ZHaGxjMlVnZEhkdklHWnBaV3hrY3lCaGNtVWdkWE5sWkNCaWVTQjBhR1VnUkU5TklHRnVaQ0JCVWxRZ1pHbG1abWx1WnlCaGJHZHZjbWwwYUcxelhHNGdJQzh2SUhKbGMzQmxZM1JwZG1Wc2VTNGdTVzV6ZEdWaFpDQnZaaUIxYzJsdVp5QmxlSEJoYm1SdmN5QnZiaUJqYjIxd2IyNWxiblJ6TENCM1pTQnphRzkxYkdRZ1ltVmNiaUFnTHk4Z2MzUnZjbWx1WnlCMGFHVWdjM1JoZEdVZ2JtVmxaR1ZrSUdKNUlIUm9aU0JrYVdabWFXNW5JR0ZzWjI5eWFYUm9iWE1nWld4elpYZG9aWEpsTGx4dUlDQnBibk4wWVc1alpTNWZiVzkxYm5SSmJtUmxlQ0E5SURBN1hHNGdJR2x1YzNSaGJtTmxMbDl0YjNWdWRFbHRZV2RsSUQwZ2JuVnNiRHRjYmx4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ2FXNXpkR0Z1WTJVdVgybHpUM2R1WlhKT1pXTmxjM05oY25rZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0JwYm5OMFlXNWpaUzVmZDJGeWJtVmtRV0p2ZFhSU1pXWnpTVzVTWlc1a1pYSWdQU0JtWVd4elpUdGNiaUFnZlZ4dVhHNGdJQzh2SUVsdWRHVnlibUZzSUdsdWMzUmhibU5sY3lCemFHOTFiR1FnWm5Wc2JIa2dZMjl1YzNSeWRXTjBaV1FnWVhRZ2RHaHBjeUJ3YjJsdWRDd2djMjhnZEdobGVTQnphRzkxYkdSY2JpQWdMeThnYm05MElHZGxkQ0JoYm5rZ2JtVjNJR1pwWld4a2N5QmhaR1JsWkNCMGJ5QjBhR1Z0SUdGMElIUm9hWE1nY0c5cGJuUXVYRzRnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0JwWmlBb1QySnFaV04wTG5CeVpYWmxiblJGZUhSbGJuTnBiMjV6S1NCN1hHNGdJQ0FnSUNCUFltcGxZM1F1Y0hKbGRtVnVkRVY0ZEdWdWMybHZibk1vYVc1emRHRnVZMlVwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJwYm5OMFlXNWpaVHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQnBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1ME8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpbnZhcmlhbnRcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvcjtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXG4gICAgICAgICdmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLidcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAnSW52YXJpYW50IFZpb2xhdGlvbjogJyArXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZhVzUyWVhKcFlXNTBMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JwYm5aaGNtbGhiblJjYmlBcUwxeHVYRzVjSW5WelpTQnpkSEpwWTNSY0lqdGNibHh1THlvcVhHNGdLaUJWYzJVZ2FXNTJZWEpwWVc1MEtDa2dkRzhnWVhOelpYSjBJSE4wWVhSbElIZG9hV05vSUhsdmRYSWdjSEp2WjNKaGJTQmhjM04xYldWeklIUnZJR0psSUhSeWRXVXVYRzRnS2x4dUlDb2dVSEp2ZG1sa1pTQnpjSEpwYm5SbUxYTjBlV3hsSUdadmNtMWhkQ0FvYjI1c2VTQWxjeUJwY3lCemRYQndiM0owWldRcElHRnVaQ0JoY21kMWJXVnVkSE5jYmlBcUlIUnZJSEJ5YjNacFpHVWdhVzVtYjNKdFlYUnBiMjRnWVdKdmRYUWdkMmhoZENCaWNtOXJaU0JoYm1RZ2QyaGhkQ0I1YjNVZ2QyVnlaVnh1SUNvZ1pYaHdaV04wYVc1bkxseHVJQ3BjYmlBcUlGUm9aU0JwYm5aaGNtbGhiblFnYldWemMyRm5aU0IzYVd4c0lHSmxJSE4wY21sd2NHVmtJR2x1SUhCeWIyUjFZM1JwYjI0c0lHSjFkQ0IwYUdVZ2FXNTJZWEpwWVc1MFhHNGdLaUIzYVd4c0lISmxiV0ZwYmlCMGJ5Qmxibk4xY21VZ2JHOW5hV01nWkc5bGN5QnViM1FnWkdsbVptVnlJR2x1SUhCeWIyUjFZM1JwYjI0dVhHNGdLaTljYmx4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUdaMWJtTjBhVzl1S0dOdmJtUnBkR2x2Yml3Z1ptOXliV0YwTENCaExDQmlMQ0JqTENCa0xDQmxMQ0JtS1NCN1hHNGdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQnBaaUFvWm05eWJXRjBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmFXNTJZWEpwWVc1MElISmxjWFZwY21WeklHRnVJR1Z5Y205eUlHMWxjM05oWjJVZ1lYSm5kVzFsYm5RbktUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnBaaUFvSVdOdmJtUnBkR2x2YmlrZ2UxeHVJQ0FnSUhaaGNpQmxjbkp2Y2p0Y2JpQWdJQ0JwWmlBb1ptOXliV0YwSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJR1Z5Y205eUlEMGdibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0FuVFdsdWFXWnBaV1FnWlhoalpYQjBhVzl1SUc5alkzVnljbVZrT3lCMWMyVWdkR2hsSUc1dmJpMXRhVzVwWm1sbFpDQmtaWFlnWlc1MmFYSnZibTFsYm5RZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RtYjNJZ2RHaGxJR1oxYkd3Z1pYSnliM0lnYldWemMyRm5aU0JoYm1RZ1lXUmthWFJwYjI1aGJDQm9aV3h3Wm5Wc0lIZGhjbTVwYm1kekxpZGNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhaaGNpQmhjbWR6SUQwZ1cyRXNJR0lzSUdNc0lHUXNJR1VzSUdaZE8xeHVJQ0FnSUNBZ2RtRnlJR0Z5WjBsdVpHVjRJRDBnTUR0Y2JpQWdJQ0FnSUdWeWNtOXlJRDBnYm1WM0lFVnljbTl5S0Z4dUlDQWdJQ0FnSUNBblNXNTJZWEpwWVc1MElGWnBiMnhoZEdsdmJqb2dKeUFyWEc0Z0lDQWdJQ0FnSUdadmNtMWhkQzV5WlhCc1lXTmxLQzhsY3k5bkxDQm1kVzVqZEdsdmJpZ3BJSHNnY21WMGRYSnVJR0Z5WjNOYllYSm5TVzVrWlhncksxMDdJSDBwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1Z5Y205eUxtWnlZVzFsYzFSdlVHOXdJRDBnTVRzZ0x5OGdkMlVnWkc5dUozUWdZMkZ5WlNCaFltOTFkQ0JwYm5aaGNtbGhiblFuY3lCdmQyNGdabkpoYldWY2JpQWdJQ0IwYUhKdmR5Qmxjbkp2Y2p0Y2JpQWdmVnh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQnBiblpoY21saGJuUTdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpc0V2ZW50U3VwcG9ydGVkXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIHVzZUhhc0ZlYXR1cmU7XG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIHVzZUhhc0ZlYXR1cmUgPVxuICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uICYmXG4gICAgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSAmJlxuICAgIC8vIGFsd2F5cyByZXR1cm5zIHRydWUgaW4gbmV3ZXIgYnJvd3NlcnMgYXMgcGVyIHRoZSBzdGFuZGFyZC5cbiAgICAvLyBAc2VlIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZG9taW1wbGVtZW50YXRpb24taGFzZmVhdHVyZVxuICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJycsICcnKSAhPT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCxcbiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLlxuICpcbiAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuIFwiY2xpY2tcIi5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGNhcHR1cmUgQ2hlY2sgaWYgdGhlIGNhcHR1cmUgcGhhc2UgaXMgc3VwcG9ydGVkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgsIGNhcHR1cmUpIHtcbiAgaWYgKCFFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gfHxcbiAgICAgIGNhcHR1cmUgJiYgISgnYWRkRXZlbnRMaXN0ZW5lcicgaW4gZG9jdW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVTdWZmaXg7XG4gIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFtZSBpbiBkb2N1bWVudDtcblxuICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCAmJiB1c2VIYXNGZWF0dXJlICYmIGV2ZW50TmFtZVN1ZmZpeCA9PT0gJ3doZWVsJykge1xuICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIHRlc3Qgc3VwcG9ydCBmb3IgdGhlIGB3aGVlbGAgZXZlbnQgaW4gSUU5Ky5cbiAgICBpc1N1cHBvcnRlZCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJ0V2ZW50cy53aGVlbCcsICczLjAnKTtcbiAgfVxuXG4gIHJldHVybiBpc1N1cHBvcnRlZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0V2ZW50U3VwcG9ydGVkO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGlzTm9kZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGlzIGEgRE9NIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGlzTm9kZShvYmplY3QpIHtcbiAgcmV0dXJuICEhKG9iamVjdCAmJiAoXG4gICAgKCh0eXBlb2YgTm9kZSA9PT0gJ2Z1bmN0aW9uJyA/IG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgOiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3Qubm9kZVR5cGUgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIG9iamVjdC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpKVxuICApKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc05vZGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgaXNUZXh0SW5wdXRFbGVtZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWlucHV0LWVsZW1lbnQuaHRtbCNpbnB1dC10eXBlLWF0dHItc3VtbWFyeVxuICovXG52YXIgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgJ2NvbG9yJzogdHJ1ZSxcbiAgJ2RhdGUnOiB0cnVlLFxuICAnZGF0ZXRpbWUnOiB0cnVlLFxuICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlLFxuICAnZW1haWwnOiB0cnVlLFxuICAnbW9udGgnOiB0cnVlLFxuICAnbnVtYmVyJzogdHJ1ZSxcbiAgJ3Bhc3N3b3JkJzogdHJ1ZSxcbiAgJ3JhbmdlJzogdHJ1ZSxcbiAgJ3NlYXJjaCc6IHRydWUsXG4gICd0ZWwnOiB0cnVlLFxuICAndGV4dCc6IHRydWUsXG4gICd0aW1lJzogdHJ1ZSxcbiAgJ3VybCc6IHRydWUsXG4gICd3ZWVrJzogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNUZXh0SW5wdXRFbGVtZW50KGVsZW0pIHtcbiAgcmV0dXJuIGVsZW0gJiYgKFxuICAgIChlbGVtLm5vZGVOYW1lID09PSAnSU5QVVQnICYmIHN1cHBvcnRlZElucHV0VHlwZXNbZWxlbS50eXBlXSB8fCBlbGVtLm5vZGVOYW1lID09PSAnVEVYVEFSRUEnKVxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVGV4dElucHV0RWxlbWVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpc1RleHROb2RlXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBpc05vZGUgPSByZXF1aXJlKFwiLi9pc05vZGVcIik7XG5cbi8qKlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIG9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaXMgYSBET00gdGV4dCBub2RlLlxuICovXG5mdW5jdGlvbiBpc1RleHROb2RlKG9iamVjdCkge1xuICByZXR1cm4gaXNOb2RlKG9iamVjdCkgJiYgb2JqZWN0Lm5vZGVUeXBlID09IDM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUZXh0Tm9kZTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUga2V5TWlycm9yXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGFuIGVudW1lcmF0aW9uIHdpdGgga2V5cyBlcXVhbCB0byB0aGVpciB2YWx1ZS5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgIHZhciBDT0xPUlMgPSBrZXlNaXJyb3Ioe2JsdWU6IG51bGwsIHJlZDogbnVsbH0pO1xuICogICB2YXIgbXlDb2xvciA9IENPTE9SUy5ibHVlO1xuICogICB2YXIgaXNDb2xvclZhbGlkID0gISFDT0xPUlNbbXlDb2xvcl07XG4gKlxuICogVGhlIGxhc3QgbGluZSBjb3VsZCBub3QgYmUgcGVyZm9ybWVkIGlmIHRoZSB2YWx1ZXMgb2YgdGhlIGdlbmVyYXRlZCBlbnVtIHdlcmVcbiAqIG5vdCBlcXVhbCB0byB0aGVpciBrZXlzLlxuICpcbiAqICAgSW5wdXQ6ICB7a2V5MTogdmFsMSwga2V5MjogdmFsMn1cbiAqICAgT3V0cHV0OiB7a2V5MToga2V5MSwga2V5Mjoga2V5Mn1cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbnZhciBrZXlNaXJyb3IgPSBmdW5jdGlvbihvYmopIHtcbiAgdmFyIHJldCA9IHt9O1xuICB2YXIga2V5O1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIG9iaiBpbnN0YW5jZW9mIE9iamVjdCAmJiAhQXJyYXkuaXNBcnJheShvYmopLFxuICAgICdrZXlNaXJyb3IoLi4uKTogQXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QuJ1xuICApIDogaW52YXJpYW50KG9iaiBpbnN0YW5jZW9mIE9iamVjdCAmJiAhQXJyYXkuaXNBcnJheShvYmopKSk7XG4gIGZvciAoa2V5IGluIG9iaikge1xuICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXRba2V5XSA9IGtleTtcbiAgfVxuICByZXR1cm4gcmV0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlNaXJyb3I7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZhMlY1VFdseWNtOXlMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJR3RsZVUxcGNuSnZjbHh1SUNvZ1FIUjVjR1ZqYUdWamEzTWdjM1JoZEdsakxXOXViSGxjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiaThxS2x4dUlDb2dRMjl1YzNSeWRXTjBjeUJoYmlCbGJuVnRaWEpoZEdsdmJpQjNhWFJvSUd0bGVYTWdaWEYxWVd3Z2RHOGdkR2hsYVhJZ2RtRnNkV1V1WEc0Z0tseHVJQ29nUm05eUlHVjRZVzF3YkdVNlhHNGdLbHh1SUNvZ0lDQjJZWElnUTA5TVQxSlRJRDBnYTJWNVRXbHljbTl5S0h0aWJIVmxPaUJ1ZFd4c0xDQnlaV1E2SUc1MWJHeDlLVHRjYmlBcUlDQWdkbUZ5SUcxNVEyOXNiM0lnUFNCRFQweFBVbE11WW14MVpUdGNiaUFxSUNBZ2RtRnlJR2x6UTI5c2IzSldZV3hwWkNBOUlDRWhRMDlNVDFKVFcyMTVRMjlzYjNKZE8xeHVJQ3BjYmlBcUlGUm9aU0JzWVhOMElHeHBibVVnWTI5MWJHUWdibTkwSUdKbElIQmxjbVp2Y20xbFpDQnBaaUIwYUdVZ2RtRnNkV1Z6SUc5bUlIUm9aU0JuWlc1bGNtRjBaV1FnWlc1MWJTQjNaWEpsWEc0Z0tpQnViM1FnWlhGMVlXd2dkRzhnZEdobGFYSWdhMlY1Y3k1Y2JpQXFYRzRnS2lBZ0lFbHVjSFYwT2lBZ2UydGxlVEU2SUhaaGJERXNJR3RsZVRJNklIWmhiREo5WEc0Z0tpQWdJRTkxZEhCMWREb2dlMnRsZVRFNklHdGxlVEVzSUd0bGVUSTZJR3RsZVRKOVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUc5aWFseHVJQ29nUUhKbGRIVnliaUI3YjJKcVpXTjBmVnh1SUNvdlhHNTJZWElnYTJWNVRXbHljbTl5SUQwZ1puVnVZM1JwYjI0b2IySnFLU0I3WEc0Z0lIWmhjaUJ5WlhRZ1BTQjdmVHRjYmlBZ2RtRnlJR3RsZVR0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCdlltb2dhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUWdKaVlnSVVGeWNtRjVMbWx6UVhKeVlYa29iMkpxS1N4Y2JpQWdJQ0FuYTJWNVRXbHljbTl5S0M0dUxpazZJRUZ5WjNWdFpXNTBJRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBMaWRjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2h2WW1vZ2FXNXpkR0Z1WTJWdlppQlBZbXBsWTNRZ0ppWWdJVUZ5Y21GNUxtbHpRWEp5WVhrb2IySnFLU2twTzF4dUlDQm1iM0lnS0d0bGVTQnBiaUJ2WW1vcElIdGNiaUFnSUNCcFppQW9JVzlpYWk1b1lYTlBkMjVRY205d1pYSjBlU2hyWlhrcEtTQjdYRzRnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMFcydGxlVjBnUFNCclpYazdYRzRnSUgxY2JpQWdjbVYwZFhKdUlISmxkRHRjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdhMlY1VFdseWNtOXlPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBrZXlPZlxuICovXG5cbi8qKlxuICogQWxsb3dzIGV4dHJhY3Rpb24gb2YgYSBtaW5pZmllZCBrZXkuIExldCdzIHRoZSBidWlsZCBzeXN0ZW0gbWluaWZ5IGtleXNcbiAqIHdpdGhvdXQgbG9vc2luZyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSB1c2Uga2V5IHN0cmluZ3MgYXMgdmFsdWVzXG4gKiB0aGVtc2VsdmVzLiBQYXNzIGluIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIGtleS92YWwgcGFpciBhbmQgaXQgd2lsbCByZXR1cm5cbiAqIHlvdSB0aGUgc3RyaW5nIGtleSBvZiB0aGF0IHNpbmdsZSByZWNvcmQuIFN1cHBvc2UgeW91IHdhbnQgdG8gZ3JhYiB0aGVcbiAqIHZhbHVlIGZvciBhIGtleSAnY2xhc3NOYW1lJyBpbnNpZGUgb2YgYW4gb2JqZWN0LiBLZXkvdmFsIG1pbmlmaWNhdGlvbiBtYXlcbiAqIGhhdmUgYWxpYXNlZCB0aGF0IGtleSB0byBiZSAneGExMicuIGtleU9mKHtjbGFzc05hbWU6IG51bGx9KSB3aWxsIHJldHVyblxuICogJ3hhMTInIGluIHRoYXQgY2FzZS4gUmVzb2x2ZSBrZXlzIHlvdSB3YW50IHRvIHVzZSBvbmNlIGF0IHN0YXJ0dXAgdGltZSwgdGhlblxuICogcmV1c2UgdGhvc2UgcmVzb2x1dGlvbnMuXG4gKi9cbnZhciBrZXlPZiA9IGZ1bmN0aW9uKG9uZUtleU9iaikge1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBvbmVLZXlPYmopIHtcbiAgICBpZiAoIW9uZUtleU9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlPZjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBtYXBPYmplY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGBjYWxsYmFja2Agb25jZSBmb3IgZWFjaCBlbnVtZXJhYmxlIG93biBwcm9wZXJ0eSBpbiB0aGVcbiAqIG9iamVjdCBhbmQgY29uc3RydWN0cyBhIG5ldyBvYmplY3QgZnJvbSB0aGUgcmVzdWx0cy4gVGhlIGBjYWxsYmFja2AgaXNcbiAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gKlxuICogIC0gdGhlIHByb3BlcnR5IHZhbHVlXG4gKiAgLSB0aGUgcHJvcGVydHkgbmFtZVxuICogIC0gdGhlIG9iamVjdCBiZWluZyB0cmF2ZXJzZWRcbiAqXG4gKiBQcm9wZXJ0aWVzIHRoYXQgYXJlIGFkZGVkIGFmdGVyIHRoZSBjYWxsIHRvIGBtYXBPYmplY3RgIHdpbGwgbm90IGJlIHZpc2l0ZWRcbiAqIGJ5IGBjYWxsYmFja2AuIElmIHRoZSB2YWx1ZXMgb2YgZXhpc3RpbmcgcHJvcGVydGllcyBhcmUgY2hhbmdlZCwgdGhlIHZhbHVlXG4gKiBwYXNzZWQgdG8gYGNhbGxiYWNrYCB3aWxsIGJlIHRoZSB2YWx1ZSBhdCB0aGUgdGltZSBgbWFwT2JqZWN0YCB2aXNpdHMgdGhlbS5cbiAqIFByb3BlcnRpZXMgdGhhdCBhcmUgZGVsZXRlZCBiZWZvcmUgYmVpbmcgdmlzaXRlZCBhcmUgbm90IHZpc2l0ZWQuXG4gKlxuICogQGdyZXAgZnVuY3Rpb24gb2JqZWN0TWFwKClcbiAqIEBncmVwIGZ1bmN0aW9uIG9iak1hcCgpXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IGNvbnRleHRcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cbmZ1bmN0aW9uIG1hcE9iamVjdChvYmplY3QsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgbmFtZSkpIHtcbiAgICAgIHJlc3VsdFtuYW1lXSA9IGNhbGxiYWNrLmNhbGwoY29udGV4dCwgb2JqZWN0W25hbWVdLCBuYW1lLCBvYmplY3QpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcE9iamVjdDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBtZW1vaXplU3RyaW5nT25seVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTWVtb2l6ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBvbmUgc3RyaW5nIGFyZ3VtZW50LlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZVN0cmluZ09ubHkoY2FsbGJhY2spIHtcbiAgdmFyIGNhY2hlID0ge307XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBpZiAoIWNhY2hlLmhhc093blByb3BlcnR5KHN0cmluZykpIHtcbiAgICAgIGNhY2hlW3N0cmluZ10gPSBjYWxsYmFjay5jYWxsKHRoaXMsIHN0cmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZVtzdHJpbmddO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVTdHJpbmdPbmx5O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBvbmx5Q2hpbGRcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXNcbiAqIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZVxuICogcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0byBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZVxuICogb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0Q29tcG9uZW50YCBjb250YWluZWQgaW4gdGhlXG4gKiBzdHJ1Y3R1cmUuXG4gKi9cbmZ1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbiksXG4gICAgJ29ubHlDaGlsZCBtdXN0IGJlIHBhc3NlZCBhIGNoaWxkcmVuIHdpdGggZXhhY3RseSBvbmUgY2hpbGQuJ1xuICApIDogaW52YXJpYW50KFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpKTtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9ubHlDaGlsZDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdmIyNXNlVU5vYVd4a0xtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUc5dWJIbERhR2xzWkZ4dUlDb3ZYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZzWlcxbGJuUmNJaWs3WEc1Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCMGFHVWdabWx5YzNRZ1kyaHBiR1FnYVc0Z1lTQmpiMnhzWldOMGFXOXVJRzltSUdOb2FXeGtjbVZ1SUdGdVpDQjJaWEpwWm1sbGN5QjBhR0YwSUhSb1pYSmxYRzRnS2lCcGN5QnZibXg1SUc5dVpTQmphR2xzWkNCcGJpQjBhR1VnWTI5c2JHVmpkR2x2Ymk0Z1ZHaGxJR04xY25KbGJuUWdhVzF3YkdWdFpXNTBZWFJwYjI0Z2IyWWdkR2hwYzF4dUlDb2dablZ1WTNScGIyNGdZWE56ZFcxbGN5QjBhR0YwSUdFZ2MybHVaMnhsSUdOb2FXeGtJR2RsZEhNZ2NHRnpjMlZrSUhkcGRHaHZkWFFnWVNCM2NtRndjR1Z5TENCaWRYUWdkR2hsWEc0Z0tpQndkWEp3YjNObElHOW1JSFJvYVhNZ2FHVnNjR1Z5SUdaMWJtTjBhVzl1SUdseklIUnZJR0ZpYzNSeVlXTjBJR0YzWVhrZ2RHaGxJSEJoY25ScFkzVnNZWElnYzNSeWRXTjBkWEpsWEc0Z0tpQnZaaUJqYUdsc1pISmxiaTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlejl2WW1wbFkzUjlJR05vYVd4a2NtVnVJRU5vYVd4a0lHTnZiR3hsWTNScGIyNGdjM1J5ZFdOMGRYSmxMbHh1SUNvZ1FISmxkSFZ5YmlCN1VtVmhZM1JEYjIxd2IyNWxiblI5SUZSb1pTQm1hWEp6ZENCaGJtUWdiMjVzZVNCZ1VtVmhZM1JEYjIxd2IyNWxiblJnSUdOdmJuUmhhVzVsWkNCcGJpQjBhR1ZjYmlBcUlITjBjblZqZEhWeVpTNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2IyNXNlVU5vYVd4a0tHTm9hV3hrY21WdUtTQjdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdVbVZoWTNSRmJHVnRaVzUwTG1selZtRnNhV1JGYkdWdFpXNTBLR05vYVd4a2NtVnVLU3hjYmlBZ0lDQW5iMjVzZVVOb2FXeGtJRzExYzNRZ1ltVWdjR0Z6YzJWa0lHRWdZMmhwYkdSeVpXNGdkMmwwYUNCbGVHRmpkR3g1SUc5dVpTQmphR2xzWkM0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1VtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtHTm9hV3hrY21WdUtTa3BPMXh1SUNCeVpYUjFjbTRnWTJocGJHUnlaVzQ3WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdiMjVzZVVOb2FXeGtPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBwZXJmb3JtYW5jZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBwZXJmb3JtYW5jZTtcblxuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICBwZXJmb3JtYW5jZSA9XG4gICAgd2luZG93LnBlcmZvcm1hbmNlIHx8XG4gICAgd2luZG93Lm1zUGVyZm9ybWFuY2UgfHxcbiAgICB3aW5kb3cud2Via2l0UGVyZm9ybWFuY2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGVyZm9ybWFuY2UgfHwge307XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgcGVyZm9ybWFuY2VOb3dcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIHBlcmZvcm1hbmNlID0gcmVxdWlyZShcIi4vcGVyZm9ybWFuY2VcIik7XG5cbi8qKlxuICogRGV0ZWN0IGlmIHdlIGNhbiB1c2UgYHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKWAgYW5kIGdyYWNlZnVsbHkgZmFsbGJhY2sgdG9cbiAqIGBEYXRlLm5vdygpYCBpZiBpdCBkb2Vzbid0IGV4aXN0LiBXZSBuZWVkIHRvIHN1cHBvcnQgRmlyZWZveCA8IDE1IGZvciBub3dcbiAqIGJlY2F1c2Ugb2YgRmFjZWJvb2sncyB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLlxuICovXG5pZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJmb3JtYW5jZS5ub3cpIHtcbiAgcGVyZm9ybWFuY2UgPSBEYXRlO1xufVxuXG52YXIgcGVyZm9ybWFuY2VOb3cgPSBwZXJmb3JtYW5jZS5ub3cuYmluZChwZXJmb3JtYW5jZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGVyZm9ybWFuY2VOb3c7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSByZXF1aXJlKFwiLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXJcIik7XG5cbi8qKlxuICogRXNjYXBlcyBhdHRyaWJ1dGUgdmFsdWUgdG8gcHJldmVudCBzY3JpcHRpbmcgYXR0YWNrcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIGVzY2FwZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gQW4gZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKSB7XG4gIHJldHVybiAnXCInICsgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHZhbHVlKSArICdcIic7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgc2V0SW5uZXJIVE1MXG4gKi9cblxuLyogZ2xvYmFscyBNU0FwcCAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgV0hJVEVTUEFDRV9URVNUID0gL15bIFxcclxcblxcdFxcZl0vO1xudmFyIE5PTlZJU0lCTEVfVEVTVCA9IC88KCEtLXxsaW5rfG5vc2NyaXB0fG1ldGF8c2NyaXB0fHN0eWxlKVsgXFxyXFxuXFx0XFxmXFwvPl0vO1xuXG4vKipcbiAqIFNldCB0aGUgaW5uZXJIVE1MIHByb3BlcnR5IG9mIGEgbm9kZSwgZW5zdXJpbmcgdGhhdCB3aGl0ZXNwYWNlIGlzIHByZXNlcnZlZFxuICogZXZlbiBpbiBJRTguXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQGludGVybmFsXG4gKi9cbnZhciBzZXRJbm5lckhUTUwgPSBmdW5jdGlvbihub2RlLCBodG1sKSB7XG4gIG5vZGUuaW5uZXJIVE1MID0gaHRtbDtcbn07XG5cbi8vIFdpbjggYXBwczogQWxsb3cgYWxsIGh0bWwgdG8gYmUgaW5zZXJ0ZWRcbmlmICh0eXBlb2YgTVNBcHAgIT09ICd1bmRlZmluZWQnICYmIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKSB7XG4gIHNldElubmVySFRNTCA9IGZ1bmN0aW9uKG5vZGUsIGh0bWwpIHtcbiAgICBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbigpIHtcbiAgICAgIG5vZGUuaW5uZXJIVE1MID0gaHRtbDtcbiAgICB9KTtcbiAgfTtcbn1cblxuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAvLyBJRTg6IFdoZW4gdXBkYXRpbmcgYSBqdXN0IGNyZWF0ZWQgbm9kZSB3aXRoIGlubmVySFRNTCBvbmx5IGxlYWRpbmdcbiAgLy8gd2hpdGVzcGFjZSBpcyByZW1vdmVkLiBXaGVuIHVwZGF0aW5nIGFuIGV4aXN0aW5nIG5vZGUgd2l0aCBpbm5lckhUTUxcbiAgLy8gd2hpdGVzcGFjZSBpbiByb290IFRleHROb2RlcyBpcyBhbHNvIGNvbGxhcHNlZC5cbiAgLy8gQHNlZSBxdWlya3Ntb2RlLm9yZy9idWdyZXBvcnRzL2FyY2hpdmVzLzIwMDQvMTEvaW5uZXJodG1sX2FuZF90Lmh0bWxcblxuICAvLyBGZWF0dXJlIGRldGVjdGlvbjsgb25seSBJRTggaXMga25vd24gdG8gYmVoYXZlIGltcHJvcGVybHkgbGlrZSB0aGlzLlxuICB2YXIgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gJyAnO1xuICBpZiAodGVzdEVsZW1lbnQuaW5uZXJIVE1MID09PSAnJykge1xuICAgIHNldElubmVySFRNTCA9IGZ1bmN0aW9uKG5vZGUsIGh0bWwpIHtcbiAgICAgIC8vIE1hZ2ljIHRoZW9yeTogSUU4IHN1cHBvc2VkbHkgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBhZGRlZCBhbmQgdXBkYXRlZFxuICAgICAgLy8gbm9kZXMgd2hlbiBwcm9jZXNzaW5nIGlubmVySFRNTCwgaW5uZXJIVE1MIG9uIHVwZGF0ZWQgbm9kZXMgc3VmZmVyc1xuICAgICAgLy8gZnJvbSB3b3JzZSB3aGl0ZXNwYWNlIGJlaGF2aW9yLiBSZS1hZGRpbmcgYSBub2RlIGxpa2UgdGhpcyB0cmlnZ2Vyc1xuICAgICAgLy8gdGhlIGluaXRpYWwgYW5kIG1vcmUgZmF2b3JhYmxlIHdoaXRlc3BhY2UgYmVoYXZpb3IuXG4gICAgICAvLyBUT0RPOiBXaGF0IHRvIGRvIG9uIGEgZGV0YWNoZWQgbm9kZT9cbiAgICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChub2RlLCBub2RlKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgYWxzbyBpbXBsZW1lbnQgYSB3b3JrYXJvdW5kIGZvciBub24tdmlzaWJsZSB0YWdzIGRpc2FwcGVhcmluZyBpbnRvXG4gICAgICAvLyB0aGluIGFpciBvbiBJRTgsIHRoaXMgb25seSBoYXBwZW5zIGlmIHRoZXJlIGlzIG5vIHZpc2libGUgdGV4dFxuICAgICAgLy8gaW4tZnJvbnQgb2YgdGhlIG5vbi12aXNpYmxlIHRhZ3MuIFBpZ2d5YmFjayBvbiB0aGUgd2hpdGVzcGFjZSBmaXhcbiAgICAgIC8vIGFuZCBzaW1wbHkgY2hlY2sgaWYgYW55IG5vbi12aXNpYmxlIHRhZ3MgYXBwZWFyIGluIHRoZSBzb3VyY2UuXG4gICAgICBpZiAoV0hJVEVTUEFDRV9URVNULnRlc3QoaHRtbCkgfHxcbiAgICAgICAgICBodG1sWzBdID09PSAnPCcgJiYgTk9OVklTSUJMRV9URVNULnRlc3QoaHRtbCkpIHtcbiAgICAgICAgLy8gUmVjb3ZlciBsZWFkaW5nIHdoaXRlc3BhY2UgYnkgdGVtcG9yYXJpbHkgcHJlcGVuZGluZyBhbnkgY2hhcmFjdGVyLlxuICAgICAgICAvLyBcXHVGRUZGIGhhcyB0aGUgcG90ZW50aWFsIGFkdmFudGFnZSBvZiBiZWluZyB6ZXJvLXdpZHRoL2ludmlzaWJsZS5cbiAgICAgICAgbm9kZS5pbm5lckhUTUwgPSAnXFx1RkVGRicgKyBodG1sO1xuXG4gICAgICAgIC8vIGRlbGV0ZURhdGEgbGVhdmVzIGFuIGVtcHR5IGBUZXh0Tm9kZWAgd2hpY2ggb2Zmc2V0cyB0aGUgaW5kZXggb2YgYWxsXG4gICAgICAgIC8vIGNoaWxkcmVuLiBEZWZpbml0ZWx5IHdhbnQgdG8gYXZvaWQgdGhpcy5cbiAgICAgICAgdmFyIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICBpZiAodGV4dE5vZGUuZGF0YS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKHRleHROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0Tm9kZS5kZWxldGVEYXRhKDAsIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldElubmVySFRNTDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBzZXRUZXh0Q29udGVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyID0gcmVxdWlyZShcIi4vZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyXCIpO1xudmFyIHNldElubmVySFRNTCA9IHJlcXVpcmUoXCIuL3NldElubmVySFRNTFwiKTtcblxuLyoqXG4gKiBTZXQgdGhlIHRleHRDb250ZW50IHByb3BlcnR5IG9mIGEgbm9kZSwgZW5zdXJpbmcgdGhhdCB3aGl0ZXNwYWNlIGlzIHByZXNlcnZlZFxuICogZXZlbiBpbiBJRTguIGlubmVyVGV4dCBpcyBhIHBvb3Igc3Vic3RpdHV0ZSBmb3IgdGV4dENvbnRlbnQgYW5kLCBhbW9uZyBtYW55XG4gKiBpc3N1ZXMsIGluc2VydHMgPGJyPiBpbnN0ZWFkIG9mIHRoZSBsaXRlcmFsIG5ld2xpbmUgY2hhcnMuIGlubmVySFRNTCBiZWhhdmVzXG4gKiBhcyBpdCBzaG91bGQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQGludGVybmFsXG4gKi9cbnZhciBzZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uKG5vZGUsIHRleHQpIHtcbiAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59O1xuXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIGlmICghKCd0ZXh0Q29udGVudCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSkge1xuICAgIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24obm9kZSwgdGV4dCkge1xuICAgICAgc2V0SW5uZXJIVE1MKG5vZGUsIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3Nlcih0ZXh0KSk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRleHRDb250ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHNoYWxsb3dFcXVhbFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBQZXJmb3JtcyBlcXVhbGl0eSBieSBpdGVyYXRpbmcgdGhyb3VnaCBrZXlzIG9uIGFuIG9iamVjdCBhbmQgcmV0dXJuaW5nXG4gKiBmYWxzZSB3aGVuIGFueSBrZXkgaGFzIHZhbHVlcyB3aGljaCBhcmUgbm90IHN0cmljdGx5IGVxdWFsIGJldHdlZW5cbiAqIG9iakEgYW5kIG9iakIuIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxsIGtleXMgYXJlIHN0cmljdGx5IGVxdWFsLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChvYmpBID09PSBvYmpCKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGtleTtcbiAgLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cbiAgZm9yIChrZXkgaW4gb2JqQSkge1xuICAgIGlmIChvYmpBLmhhc093blByb3BlcnR5KGtleSkgJiZcbiAgICAgICAgKCFvYmpCLmhhc093blByb3BlcnR5KGtleSkgfHwgb2JqQVtrZXldICE9PSBvYmpCW2tleV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIFRlc3QgZm9yIEIncyBrZXlzIG1pc3NpbmcgZnJvbSBBLlxuICBmb3IgKGtleSBpbiBvYmpCKSB7XG4gICAgaWYgKG9iakIuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhb2JqQS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNoYWxsb3dFcXVhbDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbi8qKlxuICogR2l2ZW4gYSBgcHJldkVsZW1lbnRgIGFuZCBgbmV4dEVsZW1lbnRgLCBkZXRlcm1pbmVzIGlmIHRoZSBleGlzdGluZ1xuICogaW5zdGFuY2Ugc2hvdWxkIGJlIHVwZGF0ZWQgYXMgb3Bwb3NlZCB0byBiZWluZyBkZXN0cm95ZWQgb3IgcmVwbGFjZWQgYnkgYSBuZXdcbiAqIGluc3RhbmNlLiBCb3RoIGFyZ3VtZW50cyBhcmUgZWxlbWVudHMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoaXMgbG9naWMgY2FuXG4gKiBvcGVyYXRlIG9uIHN0YXRlbGVzcyB0cmVlcyB3aXRob3V0IGFueSBiYWNraW5nIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gcHJldkVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gbmV4dEVsZW1lbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV4aXN0aW5nIGluc3RhbmNlIHNob3VsZCBiZSB1cGRhdGVkLlxuICogQHByb3RlY3RlZFxuICovXG5mdW5jdGlvbiBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpIHtcbiAgaWYgKHByZXZFbGVtZW50ICE9IG51bGwgJiYgbmV4dEVsZW1lbnQgIT0gbnVsbCkge1xuICAgIHZhciBwcmV2VHlwZSA9IHR5cGVvZiBwcmV2RWxlbWVudDtcbiAgICB2YXIgbmV4dFR5cGUgPSB0eXBlb2YgbmV4dEVsZW1lbnQ7XG4gICAgaWYgKHByZXZUeXBlID09PSAnc3RyaW5nJyB8fCBwcmV2VHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiAobmV4dFR5cGUgPT09ICdzdHJpbmcnIHx8IG5leHRUeXBlID09PSAnbnVtYmVyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXh0VHlwZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBwcmV2RWxlbWVudC50eXBlID09PSBuZXh0RWxlbWVudC50eXBlICYmXG4gICAgICAgICAgcHJldkVsZW1lbnQua2V5ID09PSBuZXh0RWxlbWVudC5rZXkpIHtcbiAgICAgICAgdmFyIG93bmVyc01hdGNoID0gcHJldkVsZW1lbnQuX293bmVyID09PSBuZXh0RWxlbWVudC5fb3duZXI7XG4gICAgICAgIHZhciBwcmV2TmFtZSA9IG51bGw7XG4gICAgICAgIHZhciBuZXh0TmFtZSA9IG51bGw7XG4gICAgICAgIHZhciBuZXh0RGlzcGxheU5hbWUgPSBudWxsO1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgICAgaWYgKCFvd25lcnNNYXRjaCkge1xuICAgICAgICAgICAgaWYgKHByZXZFbGVtZW50Ll9vd25lciAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgcHJldkVsZW1lbnQuX293bmVyLmdldFB1YmxpY0luc3RhbmNlKCkgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHByZXZFbGVtZW50Ll9vd25lci5nZXRQdWJsaWNJbnN0YW5jZSgpLmNvbnN0cnVjdG9yICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgcHJldk5hbWUgPVxuICAgICAgICAgICAgICAgIHByZXZFbGVtZW50Ll9vd25lci5nZXRQdWJsaWNJbnN0YW5jZSgpLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50Ll9vd25lciAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuX293bmVyLmdldFB1YmxpY0luc3RhbmNlKCkgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIG5leHRFbGVtZW50Ll9vd25lci5nZXRQdWJsaWNJbnN0YW5jZSgpLmNvbnN0cnVjdG9yICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgbmV4dE5hbWUgPVxuICAgICAgICAgICAgICAgIG5leHRFbGVtZW50Ll9vd25lci5nZXRQdWJsaWNJbnN0YW5jZSgpLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50LnR5cGUgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIG5leHRFbGVtZW50LnR5cGUuZGlzcGxheU5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBuZXh0RGlzcGxheU5hbWUgPSBuZXh0RWxlbWVudC50eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50LnR5cGUgIT0gbnVsbCAmJiB0eXBlb2YgbmV4dEVsZW1lbnQudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgbmV4dERpc3BsYXlOYW1lID0gbmV4dEVsZW1lbnQudHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV4dEVsZW1lbnQudHlwZSAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC50eXBlID09PSAnaW5wdXQnIHx8XG4gICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQudHlwZSA9PT0gJ3RleHRhcmVhJykge1xuICAgICAgICAgICAgICBpZiAoKHByZXZFbGVtZW50Ll9vd25lciAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgICBwcmV2RWxlbWVudC5fb3duZXIuX2lzT3duZXJOZWNlc3NhcnkgPT09IGZhbHNlKSB8fFxuICAgICAgICAgICAgICAgICAgKG5leHRFbGVtZW50Ll9vd25lciAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5fb3duZXIuX2lzT3duZXJOZWNlc3NhcnkgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2RWxlbWVudC5fb3duZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgcHJldkVsZW1lbnQuX293bmVyLl9pc093bmVyTmVjZXNzYXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50Ll9vd25lciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5fb3duZXIuX2lzT3duZXJOZWNlc3NhcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgJzwlcyAvPiBpcyBiZWluZyByZW5kZXJlZCBieSBib3RoICVzIGFuZCAlcyB1c2luZyB0aGUgc2FtZSAnICtcbiAgICAgICAgICAgICAgICAgICdrZXkgKCVzKSBpbiB0aGUgc2FtZSBwbGFjZS4gQ3VycmVudGx5LCB0aGlzIG1lYW5zIHRoYXQgJyArXG4gICAgICAgICAgICAgICAgICAndGhleSBkb25cXCd0IHByZXNlcnZlIHN0YXRlLiBUaGlzIGJlaGF2aW9yIHNob3VsZCBiZSB2ZXJ5ICcgK1xuICAgICAgICAgICAgICAgICAgJ3JhcmUgc28gd2VcXCdyZSBjb25zaWRlcmluZyBkZXByZWNhdGluZyBpdC4gUGxlYXNlIGNvbnRhY3QgJyArXG4gICAgICAgICAgICAgICAgICAndGhlIFJlYWN0IHRlYW0gYW5kIGV4cGxhaW4geW91ciB1c2UgY2FzZSBzbyB0aGF0IHdlIGNhbiAnICtcbiAgICAgICAgICAgICAgICAgICd0YWtlIHRoYXQgaW50byBjb25zaWRlcmF0aW9uLicsXG4gICAgICAgICAgICAgICAgICBuZXh0RGlzcGxheU5hbWUgfHwgJ1Vua25vd24gQ29tcG9uZW50JyxcbiAgICAgICAgICAgICAgICAgIHByZXZOYW1lIHx8ICdbVW5rbm93bl0nLFxuICAgICAgICAgICAgICAgICAgbmV4dE5hbWUgfHwgJ1tVbmtub3duXScsXG4gICAgICAgICAgICAgICAgICBwcmV2RWxlbWVudC5rZXlcbiAgICAgICAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG93bmVyc01hdGNoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZjMmh2ZFd4a1ZYQmtZWFJsVW1WaFkzUkRiMjF3YjI1bGJuUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0J6YUc5MWJHUlZjR1JoZEdWU1pXRmpkRU52YlhCdmJtVnVkRnh1SUNvZ1FIUjVjR1ZqYUdWamEzTWdjM1JoZEdsakxXOXViSGxjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCM1lYSnVhVzVuSUQwZ2NtVnhkV2x5WlNoY0lpNHZkMkZ5Ym1sdVoxd2lLVHRjYmx4dUx5b3FYRzRnS2lCSGFYWmxiaUJoSUdCd2NtVjJSV3hsYldWdWRHQWdZVzVrSUdCdVpYaDBSV3hsYldWdWRHQXNJR1JsZEdWeWJXbHVaWE1nYVdZZ2RHaGxJR1Y0YVhOMGFXNW5YRzRnS2lCcGJuTjBZVzVqWlNCemFHOTFiR1FnWW1VZ2RYQmtZWFJsWkNCaGN5QnZjSEJ2YzJWa0lIUnZJR0psYVc1bklHUmxjM1J5YjNsbFpDQnZjaUJ5WlhCc1lXTmxaQ0JpZVNCaElHNWxkMXh1SUNvZ2FXNXpkR0Z1WTJVdUlFSnZkR2dnWVhKbmRXMWxiblJ6SUdGeVpTQmxiR1Z0Wlc1MGN5NGdWR2hwY3lCbGJuTjFjbVZ6SUhSb1lYUWdkR2hwY3lCc2IyZHBZeUJqWVc1Y2JpQXFJRzl3WlhKaGRHVWdiMjRnYzNSaGRHVnNaWE56SUhSeVpXVnpJSGRwZEdodmRYUWdZVzU1SUdKaFkydHBibWNnYVc1emRHRnVZMlV1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0J3Y21WMlJXeGxiV1Z1ZEZ4dUlDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQnVaWGgwUld4bGJXVnVkRnh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4wZ1ZISjFaU0JwWmlCMGFHVWdaWGhwYzNScGJtY2dhVzV6ZEdGdVkyVWdjMmh2ZFd4a0lHSmxJSFZ3WkdGMFpXUXVYRzRnS2lCQWNISnZkR1ZqZEdWa1hHNGdLaTljYm1aMWJtTjBhVzl1SUhOb2IzVnNaRlZ3WkdGMFpWSmxZV04wUTI5dGNHOXVaVzUwS0hCeVpYWkZiR1Z0Wlc1MExDQnVaWGgwUld4bGJXVnVkQ2tnZTF4dUlDQnBaaUFvY0hKbGRrVnNaVzFsYm5RZ0lUMGdiblZzYkNBbUppQnVaWGgwUld4bGJXVnVkQ0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdkbUZ5SUhCeVpYWlVlWEJsSUQwZ2RIbHdaVzltSUhCeVpYWkZiR1Z0Wlc1ME8xeHVJQ0FnSUhaaGNpQnVaWGgwVkhsd1pTQTlJSFI1Y0dWdlppQnVaWGgwUld4bGJXVnVkRHRjYmlBZ0lDQnBaaUFvY0hKbGRsUjVjR1VnUFQwOUlDZHpkSEpwYm1jbklIeDhJSEJ5WlhaVWVYQmxJRDA5UFNBbmJuVnRZbVZ5SnlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUNodVpYaDBWSGx3WlNBOVBUMGdKM04wY21sdVp5Y2dmSHdnYm1WNGRGUjVjR1VnUFQwOUlDZHVkVzFpWlhJbktUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnYVdZZ0tHNWxlSFJVZVhCbElEMDlQU0FuYjJKcVpXTjBKeUFtSmx4dUlDQWdJQ0FnSUNBZ0lIQnlaWFpGYkdWdFpXNTBMblI1Y0dVZ1BUMDlJRzVsZUhSRmJHVnRaVzUwTG5SNWNHVWdKaVpjYmlBZ0lDQWdJQ0FnSUNCd2NtVjJSV3hsYldWdWRDNXJaWGtnUFQwOUlHNWxlSFJGYkdWdFpXNTBMbXRsZVNrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnYjNkdVpYSnpUV0YwWTJnZ1BTQndjbVYyUld4bGJXVnVkQzVmYjNkdVpYSWdQVDA5SUc1bGVIUkZiR1Z0Wlc1MExsOXZkMjVsY2p0Y2JpQWdJQ0FnSUNBZ2RtRnlJSEJ5WlhaT1lXMWxJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdkbUZ5SUc1bGVIUk9ZVzFsSUQwZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnZG1GeUlHNWxlSFJFYVhOd2JHRjVUbUZ0WlNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvSVc5M2JtVnljMDFoZEdOb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jSEpsZGtWc1pXMWxiblF1WDI5M2JtVnlJQ0U5SUc1MWJHd2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J3Y21WMlJXeGxiV1Z1ZEM1ZmIzZHVaWEl1WjJWMFVIVmliR2xqU1c1emRHRnVZMlVvS1NBaFBTQnVkV3hzSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NISmxka1ZzWlcxbGJuUXVYMjkzYm1WeUxtZGxkRkIxWW14cFkwbHVjM1JoYm1ObEtDa3VZMjl1YzNSeWRXTjBiM0lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J3Y21WMlRtRnRaU0E5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0hKbGRrVnNaVzFsYm5RdVgyOTNibVZ5TG1kbGRGQjFZbXhwWTBsdWMzUmhibU5sS0NrdVkyOXVjM1J5ZFdOMGIzSXVaR2x6Y0d4aGVVNWhiV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ibVY0ZEVWc1pXMWxiblF1WDI5M2JtVnlJQ0U5SUc1MWJHd2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMFJXeGxiV1Z1ZEM1ZmIzZHVaWEl1WjJWMFVIVmliR2xqU1c1emRHRnVZMlVvS1NBaFBTQnVkV3hzSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRVZzWlcxbGJuUXVYMjkzYm1WeUxtZGxkRkIxWW14cFkwbHVjM1JoYm1ObEtDa3VZMjl1YzNSeWRXTjBiM0lnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMFRtRnRaU0E5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYm1WNGRFVnNaVzFsYm5RdVgyOTNibVZ5TG1kbGRGQjFZbXhwWTBsdWMzUmhibU5sS0NrdVkyOXVjM1J5ZFdOMGIzSXVaR2x6Y0d4aGVVNWhiV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ibVY0ZEVWc1pXMWxiblF1ZEhsd1pTQWhQU0J1ZFd4c0lDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdibVY0ZEVWc1pXMWxiblF1ZEhsd1pTNWthWE53YkdGNVRtRnRaU0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZUhSRWFYTndiR0Y1VG1GdFpTQTlJRzVsZUhSRmJHVnRaVzUwTG5SNWNHVXVaR2x6Y0d4aGVVNWhiV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ibVY0ZEVWc1pXMWxiblF1ZEhsd1pTQWhQU0J1ZFd4c0lDWW1JSFI1Y0dWdlppQnVaWGgwUld4bGJXVnVkQzUwZVhCbElEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMFJHbHpjR3hoZVU1aGJXVWdQU0J1WlhoMFJXeGxiV1Z1ZEM1MGVYQmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdVpYaDBSV3hsYldWdWRDNTBlWEJsSUNFOVBTQW5jM1J5YVc1bkp5QjhmRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZUhSRmJHVnRaVzUwTG5SNWNHVWdQVDA5SUNkcGJuQjFkQ2NnZkh4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBSV3hsYldWdWRDNTBlWEJsSUQwOVBTQW5kR1Y0ZEdGeVpXRW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnb2NISmxka1ZzWlcxbGJuUXVYMjkzYm1WeUlDRTlJRzUxYkd3Z0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJ5WlhaRmJHVnRaVzUwTGw5dmQyNWxjaTVmYVhOUGQyNWxjazVsWTJWemMyRnllU0E5UFQwZ1ptRnNjMlVwSUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW9ibVY0ZEVWc1pXMWxiblF1WDI5M2JtVnlJQ0U5SUc1MWJHd2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc1bGVIUkZiR1Z0Wlc1MExsOXZkMjVsY2k1ZmFYTlBkMjVsY2s1bFkyVnpjMkZ5ZVNBOVBUMGdabUZzYzJVcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hCeVpYWkZiR1Z0Wlc1MExsOXZkMjVsY2lBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbVYyUld4bGJXVnVkQzVmYjNkdVpYSXVYMmx6VDNkdVpYSk9aV05sYzNOaGNua2dQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYm1WNGRFVnNaVzFsYm5RdVgyOTNibVZ5SUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFJGYkdWdFpXNTBMbDl2ZDI1bGNpNWZhWE5QZDI1bGNrNWxZMlZ6YzJGeWVTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBblBDVnpJQzgrSUdseklHSmxhVzVuSUhKbGJtUmxjbVZrSUdKNUlHSnZkR2dnSlhNZ1lXNWtJQ1Z6SUhWemFXNW5JSFJvWlNCellXMWxJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0oydGxlU0FvSlhNcElHbHVJSFJvWlNCellXMWxJSEJzWVdObExpQkRkWEp5Wlc1MGJIa3NJSFJvYVhNZ2JXVmhibk1nZEdoaGRDQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNkMGFHVjVJR1J2Ymx4Y0ozUWdjSEpsYzJWeWRtVWdjM1JoZEdVdUlGUm9hWE1nWW1Wb1lYWnBiM0lnYzJodmRXeGtJR0psSUhabGNua2dKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBbmNtRnlaU0J6YnlCM1pWeGNKM0psSUdOdmJuTnBaR1Z5YVc1bklHUmxjSEpsWTJGMGFXNW5JR2wwTGlCUWJHVmhjMlVnWTI5dWRHRmpkQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDZDBhR1VnVW1WaFkzUWdkR1ZoYlNCaGJtUWdaWGh3YkdGcGJpQjViM1Z5SUhWelpTQmpZWE5sSUhOdklIUm9ZWFFnZDJVZ1kyRnVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0ozUmhhMlVnZEdoaGRDQnBiblJ2SUdOdmJuTnBaR1Z5WVhScGIyNHVKeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc1bGVIUkVhWE53YkdGNVRtRnRaU0I4ZkNBblZXNXJibTkzYmlCRGIyMXdiMjVsYm5RbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjSEpsZGs1aGJXVWdmSHdnSjF0VmJtdHViM2R1WFNjc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwVG1GdFpTQjhmQ0FuVzFWdWEyNXZkMjVkSnl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIQnlaWFpGYkdWdFpXNTBMbXRsZVZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2IzZHVaWEp6VFdGMFkyZzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCbVlXeHpaVHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQnphRzkxYkdSVmNHUmhkR1ZTWldGamRFTnZiWEJ2Ym1WdWREdGNiaUpkZlE9PSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgdG9BcnJheVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIENvbnZlcnQgYXJyYXktbGlrZSBvYmplY3RzIHRvIGFycmF5cy5cbiAqXG4gKiBUaGlzIEFQSSBhc3N1bWVzIHRoZSBjYWxsZXIga25vd3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBkYXRhIHR5cGUuIEZvciBsZXNzXG4gKiB3ZWxsIGRlZmluZWQgaW5wdXRzIHVzZSBjcmVhdGVBcnJheUZyb21NaXhlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbnxmaWxlbGlzdH0gb2JqXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgdmFyIGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cbiAgLy8gU29tZSBicm93c2UgYnVpbHRpbiBvYmplY3RzIGNhbiByZXBvcnQgdHlwZW9mICdmdW5jdGlvbicgKGUuZy4gTm9kZUxpc3QgaW5cbiAgLy8gb2xkIHZlcnNpb25zIG9mIFNhZmFyaSkuXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgIUFycmF5LmlzQXJyYXkob2JqKSAmJlxuICAgICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSxcbiAgICAndG9BcnJheTogQXJyYXktbGlrZSBvYmplY3QgZXhwZWN0ZWQnXG4gICkgOiBpbnZhcmlhbnQoIUFycmF5LmlzQXJyYXkob2JqKSAmJlxuICAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykpKTtcblxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInLFxuICAgICd0b0FycmF5OiBPYmplY3QgbmVlZHMgYSBsZW5ndGggcHJvcGVydHknXG4gICkgOiBpbnZhcmlhbnQodHlwZW9mIGxlbmd0aCA9PT0gJ251bWJlcicpKTtcblxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGxlbmd0aCA9PT0gMCB8fFxuICAgIChsZW5ndGggLSAxKSBpbiBvYmosXG4gICAgJ3RvQXJyYXk6IE9iamVjdCBzaG91bGQgaGF2ZSBrZXlzIGZvciBpbmRpY2VzJ1xuICApIDogaW52YXJpYW50KGxlbmd0aCA9PT0gMCB8fFxuICAobGVuZ3RoIC0gMSkgaW4gb2JqKSk7XG5cbiAgLy8gT2xkIElFIGRvZXNuJ3QgZ2l2ZSBjb2xsZWN0aW9ucyBhY2Nlc3MgdG8gaGFzT3duUHJvcGVydHkuIEFzc3VtZSBpbnB1dHNcbiAgLy8gd2l0aG91dCBtZXRob2Qgd2lsbCB0aHJvdyBkdXJpbmcgdGhlIHNsaWNlIGNhbGwgYW5kIHNraXAgc3RyYWlnaHQgdG8gdGhlXG4gIC8vIGZhbGxiYWNrLlxuICBpZiAob2JqLmhhc093blByb3BlcnR5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElFIDwgOSBkb2VzIG5vdCBzdXBwb3J0IEFycmF5I3NsaWNlIG9uIGNvbGxlY3Rpb25zIG9iamVjdHNcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gY29weWluZyBrZXkgYnkga2V5LiBUaGlzIGFzc3VtZXMgYWxsIGtleXMgaGF2ZSBhIHZhbHVlLFxuICAvLyBzbyB3aWxsIG5vdCBwcmVzZXJ2ZSBzcGFyc2VseSBwb3B1bGF0ZWQgaW5wdXRzLlxuICB2YXIgcmV0ID0gQXJyYXkobGVuZ3RoKTtcbiAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxlbmd0aDsgaWkrKykge1xuICAgIHJldFtpaV0gPSBvYmpbaWldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9BcnJheTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdmRHOUJjbkpoZVM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERTBMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdkRzlCY25KaGVWeHVJQ29nUUhSNWNHVmphR1ZqYTNOY2JpQXFMMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc0dktpcGNiaUFxSUVOdmJuWmxjblFnWVhKeVlYa3RiR2xyWlNCdlltcGxZM1J6SUhSdklHRnljbUY1Y3k1Y2JpQXFYRzRnS2lCVWFHbHpJRUZRU1NCaGMzTjFiV1Z6SUhSb1pTQmpZV3hzWlhJZ2EyNXZkM01nZEdobElHTnZiblJsYm5SeklHOW1JSFJvWlNCa1lYUmhJSFI1Y0dVdUlFWnZjaUJzWlhOelhHNGdLaUIzWld4c0lHUmxabWx1WldRZ2FXNXdkWFJ6SUhWelpTQmpjbVZoZEdWQmNuSmhlVVp5YjIxTmFYaGxaQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMjlpYW1WamRIeG1kVzVqZEdsdmJueG1hV3hsYkdsemRIMGdiMkpxWEc0Z0tpQkFjbVYwZFhKdUlIdGhjbkpoZVgxY2JpQXFMMXh1Wm5WdVkzUnBiMjRnZEc5QmNuSmhlU2h2WW1vcElIdGNiaUFnZG1GeUlHeGxibWQwYUNBOUlHOWlhaTVzWlc1bmRHZzdYRzVjYmlBZ0x5OGdVMjl0WlNCaWNtOTNjMlVnWW5WcGJIUnBiaUJ2WW1wbFkzUnpJR05oYmlCeVpYQnZjblFnZEhsd1pXOW1JQ2RtZFc1amRHbHZiaWNnS0dVdVp5NGdUbTlrWlV4cGMzUWdhVzVjYmlBZ0x5OGdiMnhrSUhabGNuTnBiMjV6SUc5bUlGTmhabUZ5YVNrdVhHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lVRnljbUY1TG1selFYSnlZWGtvYjJKcUtTQW1KbHh1SUNBZ0lDaDBlWEJsYjJZZ2IySnFJRDA5UFNBbmIySnFaV04wSnlCOGZDQjBlWEJsYjJZZ2IySnFJRDA5UFNBblpuVnVZM1JwYjI0bktTeGNiaUFnSUNBbmRHOUJjbkpoZVRvZ1FYSnlZWGt0YkdsclpTQnZZbXBsWTNRZ1pYaHdaV04wWldRblhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lVRnljbUY1TG1selFYSnlZWGtvYjJKcUtTQW1KbHh1SUNBb2RIbHdaVzltSUc5aWFpQTlQVDBnSjI5aWFtVmpkQ2NnZkh3Z2RIbHdaVzltSUc5aWFpQTlQVDBnSjJaMWJtTjBhVzl1SnlrcEtUdGNibHh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJSFI1Y0dWdlppQnNaVzVuZEdnZ1BUMDlJQ2R1ZFcxaVpYSW5MRnh1SUNBZ0lDZDBiMEZ5Y21GNU9pQlBZbXBsWTNRZ2JtVmxaSE1nWVNCc1pXNW5kR2dnY0hKdmNHVnlkSGtuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvZEhsd1pXOW1JR3hsYm1kMGFDQTlQVDBnSjI1MWJXSmxjaWNwS1R0Y2JseHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lHeGxibWQwYUNBOVBUMGdNQ0I4ZkZ4dUlDQWdJQ2hzWlc1bmRHZ2dMU0F4S1NCcGJpQnZZbW9zWEc0Z0lDQWdKM1J2UVhKeVlYazZJRTlpYW1WamRDQnphRzkxYkdRZ2FHRjJaU0JyWlhseklHWnZjaUJwYm1ScFkyVnpKMXh1SUNBcElEb2dhVzUyWVhKcFlXNTBLR3hsYm1kMGFDQTlQVDBnTUNCOGZGeHVJQ0FvYkdWdVozUm9JQzBnTVNrZ2FXNGdiMkpxS1NrN1hHNWNiaUFnTHk4Z1QyeGtJRWxGSUdSdlpYTnVKM1FnWjJsMlpTQmpiMnhzWldOMGFXOXVjeUJoWTJObGMzTWdkRzhnYUdGelQzZHVVSEp2Y0dWeWRIa3VJRUZ6YzNWdFpTQnBibkIxZEhOY2JpQWdMeThnZDJsMGFHOTFkQ0J0WlhSb2IyUWdkMmxzYkNCMGFISnZkeUJrZFhKcGJtY2dkR2hsSUhOc2FXTmxJR05oYkd3Z1lXNWtJSE5yYVhBZ2MzUnlZV2xuYUhRZ2RHOGdkR2hsWEc0Z0lDOHZJR1poYkd4aVlXTnJMbHh1SUNCcFppQW9iMkpxTG1oaGMwOTNibEJ5YjNCbGNuUjVLU0I3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2h2WW1vcE8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDOHZJRWxGSUR3Z09TQmtiMlZ6SUc1dmRDQnpkWEJ3YjNKMElFRnljbUY1STNOc2FXTmxJRzl1SUdOdmJHeGxZM1JwYjI1eklHOWlhbVZqZEhOY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdkx5QkdZV3hzSUdKaFkyc2dkRzhnWTI5d2VXbHVaeUJyWlhrZ1lua2dhMlY1TGlCVWFHbHpJR0Z6YzNWdFpYTWdZV3hzSUd0bGVYTWdhR0YyWlNCaElIWmhiSFZsTEZ4dUlDQXZMeUJ6YnlCM2FXeHNJRzV2ZENCd2NtVnpaWEoyWlNCemNHRnljMlZzZVNCd2IzQjFiR0YwWldRZ2FXNXdkWFJ6TGx4dUlDQjJZWElnY21WMElEMGdRWEp5WVhrb2JHVnVaM1JvS1R0Y2JpQWdabTl5SUNoMllYSWdhV2tnUFNBd095QnBhU0E4SUd4bGJtZDBhRHNnYVdrckt5a2dlMXh1SUNBZ0lISmxkRnRwYVYwZ1BTQnZZbXBiYVdsZE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCeVpYUTdYRzU5WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ2RHOUJjbkpoZVR0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSB0cmF2ZXJzZUFsbENoaWxkcmVuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RnJhZ21lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEZyYWdtZW50XCIpO1xudmFyIFJlYWN0SW5zdGFuY2VIYW5kbGVzID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXNcIik7XG5cbnZhciBnZXRJdGVyYXRvckZuID0gcmVxdWlyZShcIi4vZ2V0SXRlcmF0b3JGblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBTRVBBUkFUT1IgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5TRVBBUkFUT1I7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuXG4vKipcbiAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmdsZSBjaGlsZCBhbmQgYW4gYXJyYXkgd2l0aCBvbmUgaXRlbSBoYXZlIHRoZSBzYW1lIGtleVxuICogcGF0dGVybi5cbiAqL1xuXG52YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlckxvb2t1cCA9IHtcbiAgJz0nOiAnPTAnLFxuICAnLic6ICc9MScsXG4gICc6JzogJz0yJ1xufTtcblxudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1s9LjpdL2c7XG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHVzZXJQcm92aWRlZEtleUVzY2FwZXIobWF0Y2gpIHtcbiAgcmV0dXJuIHVzZXJQcm92aWRlZEtleUVzY2FwZXJMb29rdXBbbWF0Y2hdO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEga2V5IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgYSBjb21wb25lbnQgd2l0aGluIGEgc2V0LlxuICpcbiAqIEBwYXJhbSB7Kn0gY29tcG9uZW50IEEgY29tcG9uZW50IHRoYXQgY291bGQgY29udGFpbiBhIG1hbnVhbCBrZXkuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggdGhhdCBpcyB1c2VkIGlmIGEgbWFudWFsIGtleSBpcyBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldENvbXBvbmVudEtleShjb21wb25lbnQsIGluZGV4KSB7XG4gIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LmtleSAhPSBudWxsKSB7XG4gICAgLy8gRXhwbGljaXQga2V5XG4gICAgcmV0dXJuIHdyYXBVc2VyUHJvdmlkZWRLZXkoY29tcG9uZW50LmtleSk7XG4gIH1cbiAgLy8gSW1wbGljaXQga2V5IGRldGVybWluZWQgYnkgdGhlIGluZGV4IGluIHRoZSBzZXRcbiAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYSBjb21wb25lbnQga2V5IHNvIHRoYXQgaXQgaXMgc2FmZSB0byB1c2UgaW4gYSByZWFjdGlkLlxuICpcbiAqIEBwYXJhbSB7Kn0ga2V5IENvbXBvbmVudCBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gQW4gZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVVzZXJQcm92aWRlZEtleSh0ZXh0KSB7XG4gIHJldHVybiAoJycgKyB0ZXh0KS5yZXBsYWNlKFxuICAgIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4LFxuICAgIHVzZXJQcm92aWRlZEtleUVzY2FwZXJcbiAgKTtcbn1cblxuLyoqXG4gKiBXcmFwIGEgYGtleWAgdmFsdWUgZXhwbGljaXRseSBwcm92aWRlZCBieSB0aGUgdXNlciB0byBkaXN0aW5ndWlzaCBpdCBmcm9tXG4gKiBpbXBsaWNpdGx5LWdlbmVyYXRlZCBrZXlzIGdlbmVyYXRlZCBieSBhIGNvbXBvbmVudCdzIGluZGV4IGluIGl0cyBwYXJlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBWYWx1ZSBvZiBhIHVzZXItcHJvdmlkZWQgYGtleWAgYXR0cmlidXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHdyYXBVc2VyUHJvdmlkZWRLZXkoa2V5KSB7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoa2V5KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7IXN0cmluZ30gbmFtZVNvRmFyIE5hbWUgb2YgdGhlIGtleSBwYXRoIHNvIGZhci5cbiAqIEBwYXJhbSB7IW51bWJlcn0gaW5kZXhTb0ZhciBOdW1iZXIgb2YgY2hpbGRyZW4gZW5jb3VudGVyZWQgdW50aWwgdGhpcyBwb2ludC5cbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayB0byBpbnZva2Ugd2l0aCBlYWNoIGNoaWxkIGZvdW5kLlxuICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IFVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0aHJvdWdob3V0IHRoZSB0cmF2ZXJzYWxcbiAqIHByb2Nlc3MuXG4gKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgc3VidHJlZS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoXG4gIGNoaWxkcmVuLFxuICBuYW1lU29GYXIsXG4gIGluZGV4U29GYXIsXG4gIGNhbGxiYWNrLFxuICB0cmF2ZXJzZUNvbnRleHRcbikge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjtcblxuICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuXG4gICAgY2hpbGRyZW4gPSBudWxsO1xuICB9XG5cbiAgaWYgKGNoaWxkcmVuID09PSBudWxsIHx8XG4gICAgICB0eXBlID09PSAnc3RyaW5nJyB8fFxuICAgICAgdHlwZSA9PT0gJ251bWJlcicgfHxcbiAgICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICBjYWxsYmFjayhcbiAgICAgIHRyYXZlcnNlQ29udGV4dCxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3MuXG4gICAgICBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkcmVuLCAwKSA6IG5hbWVTb0ZhcixcbiAgICAgIGluZGV4U29GYXJcbiAgICApO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdmFyIGNoaWxkLCBuZXh0TmFtZSwgbmV4dEluZGV4O1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSAoXG4gICAgICAgIChuYW1lU29GYXIgIT09ICcnID8gbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SIDogU0VQQVJBVE9SKSArXG4gICAgICAgIGdldENvbXBvbmVudEtleShjaGlsZCwgaSlcbiAgICAgICk7XG4gICAgICBuZXh0SW5kZXggPSBpbmRleFNvRmFyICsgc3VidHJlZUNvdW50O1xuICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKFxuICAgICAgICBjaGlsZCxcbiAgICAgICAgbmV4dE5hbWUsXG4gICAgICAgIG5leHRJbmRleCxcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIHRyYXZlcnNlQ29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcbiAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IGNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGlpID0gMDtcbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBuZXh0TmFtZSA9IChcbiAgICAgICAgICAgIChuYW1lU29GYXIgIT09ICcnID8gbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SIDogU0VQQVJBVE9SKSArXG4gICAgICAgICAgICBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGlpKyspXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleFNvRmFyICsgc3VidHJlZUNvdW50O1xuICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChcbiAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgbmV4dE5hbWUsXG4gICAgICAgICAgICBuZXh0SW5kZXgsXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIHRyYXZlcnNlQ29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMsXG4gICAgICAgICAgICAnVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4gSXQgaXMgYW4gJyArXG4gICAgICAgICAgICAnZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBtaWdodCBiZSByZW1vdmVkLiBDb252ZXJ0IGl0IHRvIGEgJyArXG4gICAgICAgICAgICAnc2VxdWVuY2UgLyBpdGVyYWJsZSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJ1xuICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICBjaGlsZCA9IGVudHJ5WzFdO1xuICAgICAgICAgICAgbmV4dE5hbWUgPSAoXG4gICAgICAgICAgICAgIChuYW1lU29GYXIgIT09ICcnID8gbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SIDogU0VQQVJBVE9SKSArXG4gICAgICAgICAgICAgIHdyYXBVc2VyUHJvdmlkZWRLZXkoZW50cnlbMF0pICsgU1VCU0VQQVJBVE9SICtcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCAwKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4U29GYXIgKyBzdWJ0cmVlQ291bnQ7XG4gICAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoXG4gICAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgICBuZXh0TmFtZSxcbiAgICAgICAgICAgICAgbmV4dEluZGV4LFxuICAgICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgICAgdHJhdmVyc2VDb250ZXh0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIGNoaWxkcmVuLm5vZGVUeXBlICE9PSAxLFxuICAgICAgICAndHJhdmVyc2VBbGxDaGlsZHJlbiguLi4pOiBFbmNvdW50ZXJlZCBhbiBpbnZhbGlkIGNoaWxkOyBET00gJyArXG4gICAgICAgICdlbGVtZW50cyBhcmUgbm90IHZhbGlkIGNoaWxkcmVuIG9mIFJlYWN0IGNvbXBvbmVudHMuJ1xuICAgICAgKSA6IGludmFyaWFudChjaGlsZHJlbi5ub2RlVHlwZSAhPT0gMSkpO1xuICAgICAgdmFyIGZyYWdtZW50ID0gUmVhY3RGcmFnbWVudC5leHRyYWN0KGNoaWxkcmVuKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBmcmFnbWVudCkge1xuICAgICAgICBpZiAoZnJhZ21lbnQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGNoaWxkID0gZnJhZ21lbnRba2V5XTtcbiAgICAgICAgICBuZXh0TmFtZSA9IChcbiAgICAgICAgICAgIChuYW1lU29GYXIgIT09ICcnID8gbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SIDogU0VQQVJBVE9SKSArXG4gICAgICAgICAgICB3cmFwVXNlclByb3ZpZGVkS2V5KGtleSkgKyBTVUJTRVBBUkFUT1IgK1xuICAgICAgICAgICAgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCAwKVxuICAgICAgICAgICk7XG4gICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXhTb0ZhciArIHN1YnRyZWVDb3VudDtcbiAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoXG4gICAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICAgIG5leHROYW1lLFxuICAgICAgICAgICAgbmV4dEluZGV4LFxuICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICB0cmF2ZXJzZUNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLCBidXRcbiAqIG1pZ2h0IGFsc28gYmUgc3BlY2lmaWVkIHRocm91Z2ggYXR0cmlidXRlczpcbiAqXG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMuY2hpbGRyZW4sIC4uLilgXG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMubGVmdFBhbmVsQ2hpbGRyZW4sIC4uLilgXG4gKlxuICogVGhlIGB0cmF2ZXJzZUNvbnRleHRgIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgaXMgcGFzc2VkIHRocm91Z2ggdGhlXG4gKiBlbnRpcmUgdHJhdmVyc2FsLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhY2N1bXVsYXRpb25zIG9yIGFueXRoaW5nIGVsc2UgdGhhdFxuICogdGhlIGNhbGxiYWNrIG1pZ2h0IGZpbmQgcmVsZXZhbnQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBvYmplY3QuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgVG8gaW52b2tlIHVwb24gdHJhdmVyc2luZyBlYWNoIGNoaWxkLlxuICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgZm9yIHRyYXZlcnNhbC5cbiAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhpcyBzdWJ0cmVlLlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGRyZW4sICcnLCAwLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxkcmVuO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2ZEhKaGRtVnljMlZCYkd4RGFHbHNaSEpsYmk1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCMGNtRjJaWEp6WlVGc2JFTm9hV3hrY21WdVhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdVbVZoWTNSRmJHVnRaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRmJHVnRaVzUwWENJcE8xeHVkbUZ5SUZKbFlXTjBSbkpoWjIxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVp5WVdkdFpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSSmJuTjBZVzVqWlVoaGJtUnNaWE5jSWlrN1hHNWNiblpoY2lCblpYUkpkR1Z5WVhSdmNrWnVJRDBnY21WeGRXbHlaU2hjSWk0dloyVjBTWFJsY21GMGIzSkdibHdpS1R0Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNiblpoY2lCVFJWQkJVa0ZVVDFJZ1BTQlNaV0ZqZEVsdWMzUmhibU5sU0dGdVpHeGxjeTVUUlZCQlVrRlVUMUk3WEc1MllYSWdVMVZDVTBWUVFWSkJWRTlTSUQwZ0p6b25PMXh1WEc0dktpcGNiaUFxSUZSUFJFODZJRlJsYzNRZ2RHaGhkQ0JoSUhOcGJtZHNaU0JqYUdsc1pDQmhibVFnWVc0Z1lYSnlZWGtnZDJsMGFDQnZibVVnYVhSbGJTQm9ZWFpsSUhSb1pTQnpZVzFsSUd0bGVWeHVJQ29nY0dGMGRHVnliaTVjYmlBcUwxeHVYRzUyWVhJZ2RYTmxjbEJ5YjNacFpHVmtTMlY1UlhOallYQmxja3h2YjJ0MWNDQTlJSHRjYmlBZ0p6MG5PaUFuUFRBbkxGeHVJQ0FuTGljNklDYzlNU2NzWEc0Z0lDYzZKem9nSnoweUoxeHVmVHRjYmx4dWRtRnlJSFZ6WlhKUWNtOTJhV1JsWkV0bGVVVnpZMkZ3WlZKbFoyVjRJRDBnTDFzOUxqcGRMMmM3WEc1Y2JuWmhjaUJrYVdSWFlYSnVRV0p2ZFhSTllYQnpJRDBnWm1Gc2MyVTdYRzVjYm1aMWJtTjBhVzl1SUhWelpYSlFjbTkyYVdSbFpFdGxlVVZ6WTJGd1pYSW9iV0YwWTJncElIdGNiaUFnY21WMGRYSnVJSFZ6WlhKUWNtOTJhV1JsWkV0bGVVVnpZMkZ3WlhKTWIyOXJkWEJiYldGMFkyaGRPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZGxibVZ5WVhSbElHRWdhMlY1SUhOMGNtbHVaeUIwYUdGMElHbGtaVzUwYVdacFpYTWdZU0JqYjIxd2IyNWxiblFnZDJsMGFHbHVJR0VnYzJWMExseHVJQ3BjYmlBcUlFQndZWEpoYlNCN0tuMGdZMjl0Y0c5dVpXNTBJRUVnWTI5dGNHOXVaVzUwSUhSb1lYUWdZMjkxYkdRZ1kyOXVkR0ZwYmlCaElHMWhiblZoYkNCclpYa3VYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnYVc1a1pYZ2dTVzVrWlhnZ2RHaGhkQ0JwY3lCMWMyVmtJR2xtSUdFZ2JXRnVkV0ZzSUd0bGVTQnBjeUJ1YjNRZ2NISnZkbWxrWldRdVhHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JtWjFibU4wYVc5dUlHZGxkRU52YlhCdmJtVnVkRXRsZVNoamIyMXdiMjVsYm5Rc0lHbHVaR1Y0S1NCN1hHNGdJR2xtSUNoamIyMXdiMjVsYm5RZ0ppWWdZMjl0Y0c5dVpXNTBMbXRsZVNBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnTHk4Z1JYaHdiR2xqYVhRZ2EyVjVYRzRnSUNBZ2NtVjBkWEp1SUhkeVlYQlZjMlZ5VUhKdmRtbGtaV1JMWlhrb1kyOXRjRzl1Wlc1MExtdGxlU2s3WEc0Z0lIMWNiaUFnTHk4Z1NXMXdiR2xqYVhRZ2EyVjVJR1JsZEdWeWJXbHVaV1FnWW5rZ2RHaGxJR2x1WkdWNElHbHVJSFJvWlNCelpYUmNiaUFnY21WMGRYSnVJR2x1WkdWNExuUnZVM1J5YVc1bktETTJLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkZjMk5oY0dVZ1lTQmpiMjF3YjI1bGJuUWdhMlY1SUhOdklIUm9ZWFFnYVhRZ2FYTWdjMkZtWlNCMGJ5QjFjMlVnYVc0Z1lTQnlaV0ZqZEdsa0xseHVJQ3BjYmlBcUlFQndZWEpoYlNCN0tuMGdhMlY1SUVOdmJYQnZibVZ1ZENCclpYa2dkRzhnWW1VZ1pYTmpZWEJsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMGdRVzRnWlhOallYQmxaQ0J6ZEhKcGJtY3VYRzRnS2k5Y2JtWjFibU4wYVc5dUlHVnpZMkZ3WlZWelpYSlFjbTkyYVdSbFpFdGxlU2gwWlhoMEtTQjdYRzRnSUhKbGRIVnliaUFvSnljZ0t5QjBaWGgwS1M1eVpYQnNZV05sS0Z4dUlDQWdJSFZ6WlhKUWNtOTJhV1JsWkV0bGVVVnpZMkZ3WlZKbFoyVjRMRnh1SUNBZ0lIVnpaWEpRY205MmFXUmxaRXRsZVVWelkyRndaWEpjYmlBZ0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCWGNtRndJR0VnWUd0bGVXQWdkbUZzZFdVZ1pYaHdiR2xqYVhSc2VTQndjbTkyYVdSbFpDQmllU0IwYUdVZ2RYTmxjaUIwYnlCa2FYTjBhVzVuZFdsemFDQnBkQ0JtY205dFhHNGdLaUJwYlhCc2FXTnBkR3g1TFdkbGJtVnlZWFJsWkNCclpYbHpJR2RsYm1WeVlYUmxaQ0JpZVNCaElHTnZiWEJ2Ym1WdWRDZHpJR2x1WkdWNElHbHVJR2wwY3lCd1lYSmxiblF1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR3RsZVNCV1lXeDFaU0J2WmlCaElIVnpaWEl0Y0hKdmRtbGtaV1FnWUd0bGVXQWdZWFIwY21saWRYUmxYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibVoxYm1OMGFXOXVJSGR5WVhCVmMyVnlVSEp2ZG1sa1pXUkxaWGtvYTJWNUtTQjdYRzRnSUhKbGRIVnliaUFuSkNjZ0t5QmxjMk5oY0dWVmMyVnlVSEp2ZG1sa1pXUkxaWGtvYTJWNUtUdGNibjFjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZXo4cWZTQmphR2xzWkhKbGJpQkRhR2xzWkhKbGJpQjBjbVZsSUdOdmJuUmhhVzVsY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJWE4wY21sdVozMGdibUZ0WlZOdlJtRnlJRTVoYldVZ2IyWWdkR2hsSUd0bGVTQndZWFJvSUhOdklHWmhjaTVjYmlBcUlFQndZWEpoYlNCN0lXNTFiV0psY24wZ2FXNWtaWGhUYjBaaGNpQk9kVzFpWlhJZ2IyWWdZMmhwYkdSeVpXNGdaVzVqYjNWdWRHVnlaV1FnZFc1MGFXd2dkR2hwY3lCd2IybHVkQzVjYmlBcUlFQndZWEpoYlNCN0lXWjFibU4wYVc5dWZTQmpZV3hzWW1GamF5QkRZV3hzWW1GamF5QjBieUJwYm5admEyVWdkMmwwYUNCbFlXTm9JR05vYVd4a0lHWnZkVzVrTGx4dUlDb2dRSEJoY21GdElIcy9LbjBnZEhKaGRtVnljMlZEYjI1MFpYaDBJRlZ6WldRZ2RHOGdjR0Z6Y3lCcGJtWnZjbTFoZEdsdmJpQjBhSEp2ZFdkb2IzVjBJSFJvWlNCMGNtRjJaWEp6WVd4Y2JpQXFJSEJ5YjJObGMzTXVYRzRnS2lCQWNtVjBkWEp1SUhzaGJuVnRZbVZ5ZlNCVWFHVWdiblZ0WW1WeUlHOW1JR05vYVd4a2NtVnVJR2x1SUhSb2FYTWdjM1ZpZEhKbFpTNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2RISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJrbHRjR3dvWEc0Z0lHTm9hV3hrY21WdUxGeHVJQ0J1WVcxbFUyOUdZWElzWEc0Z0lHbHVaR1Y0VTI5R1lYSXNYRzRnSUdOaGJHeGlZV05yTEZ4dUlDQjBjbUYyWlhKelpVTnZiblJsZUhSY2Jpa2dlMXh1SUNCMllYSWdkSGx3WlNBOUlIUjVjR1Z2WmlCamFHbHNaSEpsYmp0Y2JseHVJQ0JwWmlBb2RIbHdaU0E5UFQwZ0ozVnVaR1ZtYVc1bFpDY2dmSHdnZEhsd1pTQTlQVDBnSjJKdmIyeGxZVzRuS1NCN1hHNGdJQ0FnTHk4Z1FXeHNJRzltSUhSb1pTQmhZbTkyWlNCaGNtVWdjR1Z5WTJWcGRtVmtJR0Z6SUc1MWJHd3VYRzRnSUNBZ1kyaHBiR1J5Wlc0Z1BTQnVkV3hzTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR05vYVd4a2NtVnVJRDA5UFNCdWRXeHNJSHg4WEc0Z0lDQWdJQ0IwZVhCbElEMDlQU0FuYzNSeWFXNW5KeUI4ZkZ4dUlDQWdJQ0FnZEhsd1pTQTlQVDBnSjI1MWJXSmxjaWNnZkh4Y2JpQWdJQ0FnSUZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENoamFHbHNaSEpsYmlrcElIdGNiaUFnSUNCallXeHNZbUZqYXloY2JpQWdJQ0FnSUhSeVlYWmxjbk5sUTI5dWRHVjRkQ3hjYmlBZ0lDQWdJR05vYVd4a2NtVnVMRnh1SUNBZ0lDQWdMeThnU1dZZ2FYUW5jeUIwYUdVZ2IyNXNlU0JqYUdsc1pDd2dkSEpsWVhRZ2RHaGxJRzVoYldVZ1lYTWdhV1lnYVhRZ2QyRnpJSGR5WVhCd1pXUWdhVzRnWVc0Z1lYSnlZWGxjYmlBZ0lDQWdJQzh2SUhOdklIUm9ZWFFnYVhRbmN5QmpiMjV6YVhOMFpXNTBJR2xtSUhSb1pTQnVkVzFpWlhJZ2IyWWdZMmhwYkdSeVpXNGdaM0p2ZDNNdVhHNGdJQ0FnSUNCdVlXMWxVMjlHWVhJZ1BUMDlJQ2NuSUQ4Z1UwVlFRVkpCVkU5U0lDc2daMlYwUTI5dGNHOXVaVzUwUzJWNUtHTm9hV3hrY21WdUxDQXdLU0E2SUc1aGJXVlRiMFpoY2l4Y2JpQWdJQ0FnSUdsdVpHVjRVMjlHWVhKY2JpQWdJQ0FwTzF4dUlDQWdJSEpsZEhWeWJpQXhPMXh1SUNCOVhHNWNiaUFnZG1GeUlHTm9hV3hrTENCdVpYaDBUbUZ0WlN3Z2JtVjRkRWx1WkdWNE8xeHVJQ0IyWVhJZ2MzVmlkSEpsWlVOdmRXNTBJRDBnTURzZ0x5OGdRMjkxYm5RZ2IyWWdZMmhwYkdSeVpXNGdabTkxYm1RZ2FXNGdkR2hsSUdOMWNuSmxiblFnYzNWaWRISmxaUzVjYmx4dUlDQnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaGphR2xzWkhKbGJpa3BJSHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJR05vYVd4a2NtVnVMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamFHbHNaQ0E5SUdOb2FXeGtjbVZ1VzJsZE8xeHVJQ0FnSUNBZ2JtVjRkRTVoYldVZ1BTQW9YRzRnSUNBZ0lDQWdJQ2h1WVcxbFUyOUdZWElnSVQwOUlDY25JRDhnYm1GdFpWTnZSbUZ5SUNzZ1UxVkNVMFZRUVZKQlZFOVNJRG9nVTBWUVFWSkJWRTlTS1NBclhHNGdJQ0FnSUNBZ0lHZGxkRU52YlhCdmJtVnVkRXRsZVNoamFHbHNaQ3dnYVNsY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCdVpYaDBTVzVrWlhnZ1BTQnBibVJsZUZOdlJtRnlJQ3NnYzNWaWRISmxaVU52ZFc1ME8xeHVJQ0FnSUNBZ2MzVmlkSEpsWlVOdmRXNTBJQ3M5SUhSeVlYWmxjbk5sUVd4c1EyaHBiR1J5Wlc1SmJYQnNLRnh1SUNBZ0lDQWdJQ0JqYUdsc1pDeGNiaUFnSUNBZ0lDQWdibVY0ZEU1aGJXVXNYRzRnSUNBZ0lDQWdJRzVsZUhSSmJtUmxlQ3hjYmlBZ0lDQWdJQ0FnWTJGc2JHSmhZMnNzWEc0Z0lDQWdJQ0FnSUhSeVlYWmxjbk5sUTI5dWRHVjRkRnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdkbUZ5SUdsMFpYSmhkRzl5Um00Z1BTQm5aWFJKZEdWeVlYUnZja1p1S0dOb2FXeGtjbVZ1S1R0Y2JpQWdJQ0JwWmlBb2FYUmxjbUYwYjNKR2Jpa2dlMXh1SUNBZ0lDQWdkbUZ5SUdsMFpYSmhkRzl5SUQwZ2FYUmxjbUYwYjNKR2JpNWpZV3hzS0dOb2FXeGtjbVZ1S1R0Y2JpQWdJQ0FnSUhaaGNpQnpkR1Z3TzF4dUlDQWdJQ0FnYVdZZ0tHbDBaWEpoZEc5eVJtNGdJVDA5SUdOb2FXeGtjbVZ1TG1WdWRISnBaWE1wSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJR2xwSUQwZ01EdGNiaUFnSUNBZ0lDQWdkMmhwYkdVZ0tDRW9jM1JsY0NBOUlHbDBaWEpoZEc5eUxtNWxlSFFvS1NrdVpHOXVaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTm9hV3hrSUQwZ2MzUmxjQzUyWVd4MVpUdGNiaUFnSUNBZ0lDQWdJQ0J1WlhoMFRtRnRaU0E5SUNoY2JpQWdJQ0FnSUNBZ0lDQWdJQ2h1WVcxbFUyOUdZWElnSVQwOUlDY25JRDhnYm1GdFpWTnZSbUZ5SUNzZ1UxVkNVMFZRUVZKQlZFOVNJRG9nVTBWUVFWSkJWRTlTS1NBclhHNGdJQ0FnSUNBZ0lDQWdJQ0JuWlhSRGIyMXdiMjVsYm5STFpYa29ZMmhwYkdRc0lHbHBLeXNwWEc0Z0lDQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lDQWdJQ0J1WlhoMFNXNWtaWGdnUFNCcGJtUmxlRk52Um1GeUlDc2djM1ZpZEhKbFpVTnZkVzUwTzF4dUlDQWdJQ0FnSUNBZ0lITjFZblJ5WldWRGIzVnVkQ0FyUFNCMGNtRjJaWEp6WlVGc2JFTm9hV3hrY21WdVNXMXdiQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lHTm9hV3hrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdibVY0ZEU1aGJXVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBTVzVrWlhnc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVd4c1ltRmpheXhjYmlBZ0lDQWdJQ0FnSUNBZ0lIUnlZWFpsY25ObFEyOXVkR1Y0ZEZ4dUlDQWdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNBZ0lHUnBaRmRoY201QlltOTFkRTFoY0hNc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FuVlhOcGJtY2dUV0Z3Y3lCaGN5QmphR2xzWkhKbGJpQnBjeUJ1YjNRZ2VXVjBJR1oxYkd4NUlITjFjSEJ2Y25SbFpDNGdTWFFnYVhNZ1lXNGdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5aWGh3WlhKcGJXVnVkR0ZzSUdabFlYUjFjbVVnZEdoaGRDQnRhV2RvZENCaVpTQnlaVzF2ZG1Wa0xpQkRiMjUyWlhKMElHbDBJSFJ2SUdFZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSUNBbmMyVnhkV1Z1WTJVZ0x5QnBkR1Z5WVdKc1pTQnZaaUJyWlhsbFpDQlNaV0ZqZEVWc1pXMWxiblJ6SUdsdWMzUmxZV1F1SjF4dUlDQWdJQ0FnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNBZ0lDQWdJQ0JrYVdSWFlYSnVRV0p2ZFhSTllYQnpJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0F2THlCSmRHVnlZWFJ2Y2lCM2FXeHNJSEJ5YjNacFpHVWdaVzUwY25rZ1cyc3NkbDBnZEhWd2JHVnpJSEpoZEdobGNpQjBhR0Z1SUhaaGJIVmxjeTVjYmlBZ0lDQWdJQ0FnZDJocGJHVWdLQ0VvYzNSbGNDQTlJR2wwWlhKaGRHOXlMbTVsZUhRb0tTa3VaRzl1WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCbGJuUnllU0E5SUhOMFpYQXVkbUZzZFdVN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dWdWRISjVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmphR2xzWkNBOUlHVnVkSEo1V3pGZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1WNGRFNWhiV1VnUFNBb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNodVlXMWxVMjlHWVhJZ0lUMDlJQ2NuSUQ4Z2JtRnRaVk52Um1GeUlDc2dVMVZDVTBWUVFWSkJWRTlTSURvZ1UwVlFRVkpCVkU5U0tTQXJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIZHlZWEJWYzJWeVVISnZkbWxrWldSTFpYa29aVzUwY25sYk1GMHBJQ3NnVTFWQ1UwVlFRVkpCVkU5U0lDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1oyVjBRMjl0Y0c5dVpXNTBTMlY1S0dOb2FXeGtMQ0F3S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFJKYm1SbGVDQTlJR2x1WkdWNFUyOUdZWElnS3lCemRXSjBjbVZsUTI5MWJuUTdYRzRnSUNBZ0lDQWdJQ0FnSUNCemRXSjBjbVZsUTI5MWJuUWdLejBnZEhKaGRtVnljMlZCYkd4RGFHbHNaSEpsYmtsdGNHd29YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHTm9hV3hrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMFRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdibVY0ZEVsdVpHVjRMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hzWW1GamF5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RISmhkbVZ5YzJWRGIyNTBaWGgwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaU0E5UFQwZ0oyOWlhbVZqZENjcElIdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lHTm9hV3hrY21WdUxtNXZaR1ZVZVhCbElDRTlQU0F4TEZ4dUlDQWdJQ0FnSUNBbmRISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJpZ3VMaTRwT2lCRmJtTnZkVzUwWlhKbFpDQmhiaUJwYm5aaGJHbGtJR05vYVd4a095QkVUMDBnSnlBclhHNGdJQ0FnSUNBZ0lDZGxiR1Z0Wlc1MGN5QmhjbVVnYm05MElIWmhiR2xrSUdOb2FXeGtjbVZ1SUc5bUlGSmxZV04wSUdOdmJYQnZibVZ1ZEhNdUoxeHVJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hqYUdsc1pISmxiaTV1YjJSbFZIbHdaU0FoUFQwZ01Ta3BPMXh1SUNBZ0lDQWdkbUZ5SUdaeVlXZHRaVzUwSUQwZ1VtVmhZM1JHY21GbmJXVnVkQzVsZUhSeVlXTjBLR05vYVd4a2NtVnVLVHRjYmlBZ0lDQWdJR1p2Y2lBb2RtRnlJR3RsZVNCcGJpQm1jbUZuYldWdWRDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1puSmhaMjFsYm5RdWFHRnpUM2R1VUhKdmNHVnlkSGtvYTJWNUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOb2FXeGtJRDBnWm5KaFoyMWxiblJiYTJWNVhUdGNiaUFnSUNBZ0lDQWdJQ0J1WlhoMFRtRnRaU0E5SUNoY2JpQWdJQ0FnSUNBZ0lDQWdJQ2h1WVcxbFUyOUdZWElnSVQwOUlDY25JRDhnYm1GdFpWTnZSbUZ5SUNzZ1UxVkNVMFZRUVZKQlZFOVNJRG9nVTBWUVFWSkJWRTlTS1NBclhHNGdJQ0FnSUNBZ0lDQWdJQ0IzY21Gd1ZYTmxjbEJ5YjNacFpHVmtTMlY1S0d0bGVTa2dLeUJUVlVKVFJWQkJVa0ZVVDFJZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnWjJWMFEyOXRjRzl1Wlc1MFMyVjVLR05vYVd4a0xDQXdLVnh1SUNBZ0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNBZ0lDQWdibVY0ZEVsdVpHVjRJRDBnYVc1a1pYaFRiMFpoY2lBcklITjFZblJ5WldWRGIzVnVkRHRjYmlBZ0lDQWdJQ0FnSUNCemRXSjBjbVZsUTI5MWJuUWdLejBnZEhKaGRtVnljMlZCYkd4RGFHbHNaSEpsYmtsdGNHd29YRzRnSUNBZ0lDQWdJQ0FnSUNCamFHbHNaQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFJPWVcxbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1WNGRFbHVaR1Y0TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZzYkdKaFkyc3NYRzRnSUNBZ0lDQWdJQ0FnSUNCMGNtRjJaWEp6WlVOdmJuUmxlSFJjYmlBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlITjFZblJ5WldWRGIzVnVkRHRjYm4xY2JseHVMeW9xWEc0Z0tpQlVjbUYyWlhKelpYTWdZMmhwYkdSeVpXNGdkR2hoZENCaGNtVWdkSGx3YVdOaGJHeDVJSE53WldOcFptbGxaQ0JoY3lCZ2NISnZjSE11WTJocGJHUnlaVzVnTENCaWRYUmNiaUFxSUcxcFoyaDBJR0ZzYzI4Z1ltVWdjM0JsWTJsbWFXVmtJSFJvY205MVoyZ2dZWFIwY21saWRYUmxjenBjYmlBcVhHNGdLaUF0SUdCMGNtRjJaWEp6WlVGc2JFTm9hV3hrY21WdUtIUm9hWE11Y0hKdmNITXVZMmhwYkdSeVpXNHNJQzR1TGlsZ1hHNGdLaUF0SUdCMGNtRjJaWEp6WlVGc2JFTm9hV3hrY21WdUtIUm9hWE11Y0hKdmNITXViR1ZtZEZCaGJtVnNRMmhwYkdSeVpXNHNJQzR1TGlsZ1hHNGdLbHh1SUNvZ1ZHaGxJR0IwY21GMlpYSnpaVU52Ym5SbGVIUmdJR2x6SUdGdUlHOXdkR2x2Ym1Gc0lHRnlaM1Z0Wlc1MElIUm9ZWFFnYVhNZ2NHRnpjMlZrSUhSb2NtOTFaMmdnZEdobFhHNGdLaUJsYm5ScGNtVWdkSEpoZG1WeWMyRnNMaUJKZENCallXNGdZbVVnZFhObFpDQjBieUJ6ZEc5eVpTQmhZMk4xYlhWc1lYUnBiMjV6SUc5eUlHRnVlWFJvYVc1bklHVnNjMlVnZEdoaGRGeHVJQ29nZEdobElHTmhiR3hpWVdOcklHMXBaMmgwSUdacGJtUWdjbVZzWlhaaGJuUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIcy9LbjBnWTJocGJHUnlaVzRnUTJocGJHUnlaVzRnZEhKbFpTQnZZbXBsWTNRdVhHNGdLaUJBY0dGeVlXMGdleUZtZFc1amRHbHZibjBnWTJGc2JHSmhZMnNnVkc4Z2FXNTJiMnRsSUhWd2IyNGdkSEpoZG1WeWMybHVaeUJsWVdOb0lHTm9hV3hrTGx4dUlDb2dRSEJoY21GdElIcy9LbjBnZEhKaGRtVnljMlZEYjI1MFpYaDBJRU52Ym5SbGVIUWdabTl5SUhSeVlYWmxjbk5oYkM1Y2JpQXFJRUJ5WlhSMWNtNGdleUZ1ZFcxaVpYSjlJRlJvWlNCdWRXMWlaWElnYjJZZ1kyaHBiR1J5Wlc0Z2FXNGdkR2hwY3lCemRXSjBjbVZsTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUIwY21GMlpYSnpaVUZzYkVOb2FXeGtjbVZ1S0dOb2FXeGtjbVZ1TENCallXeHNZbUZqYXl3Z2RISmhkbVZ5YzJWRGIyNTBaWGgwS1NCN1hHNGdJR2xtSUNoamFHbHNaSEpsYmlBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnY21WMGRYSnVJREE3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnZEhKaGRtVnljMlZCYkd4RGFHbHNaSEpsYmtsdGNHd29ZMmhwYkdSeVpXNHNJQ2NuTENBd0xDQmpZV3hzWW1GamF5d2dkSEpoZG1WeWMyVkRiMjUwWlhoMEtUdGNibjFjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCMGNtRjJaWEp6WlVGc2JFTm9hV3hrY21WdU8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSB3YXJuaW5nXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZW1wdHlGdW5jdGlvblwiKTtcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIHdhcm5pbmcgPSBlbXB0eUZ1bmN0aW9uO1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCApIHtmb3IgKHZhciBhcmdzPVtdLCRfXzA9MiwkX18xPWFyZ3VtZW50cy5sZW5ndGg7JF9fMDwkX18xOyRfXzArKykgYXJncy5wdXNoKGFyZ3VtZW50c1skX18wXSk7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgJ21lc3NhZ2UgYXJndW1lbnQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQubGVuZ3RoIDwgMTAgfHwgL15bc1xcV10qJC8udGVzdChmb3JtYXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUaGUgd2FybmluZyBmb3JtYXQgc2hvdWxkIGJlIGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyAnICtcbiAgICAgICAgJ3dhcm5pbmcuIFBsZWFzZSwgdXNlIGEgbW9yZSBkZXNjcmlwdGl2ZSBmb3JtYXQgdGhhbjogJyArIGZvcm1hdFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ0ZhaWxlZCBDb21wb3NpdGUgcHJvcFR5cGU6ICcpID09PSAwKSB7XG4gICAgICByZXR1cm47IC8vIElnbm9yZSBDb21wb3NpdGVDb21wb25lbnQgcHJvcHR5cGUgY2hlY2suXG4gICAgfVxuXG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgIHtyZXR1cm4gYXJnc1thcmdJbmRleCsrXTt9KTtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGNhdGNoKHgpIHt9XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZkMkZ5Ym1sdVp5NXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREUwTFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnZDJGeWJtbHVaMXh1SUNvdlhHNWNibHdpZFhObElITjBjbWxqZEZ3aU8xeHVYRzUyWVhJZ1pXMXdkSGxHZFc1amRHbHZiaUE5SUhKbGNYVnBjbVVvWENJdUwyVnRjSFI1Um5WdVkzUnBiMjVjSWlrN1hHNWNiaThxS2x4dUlDb2dVMmx0YVd4aGNpQjBieUJwYm5aaGNtbGhiblFnWW5WMElHOXViSGtnYkc5bmN5QmhJSGRoY201cGJtY2dhV1lnZEdobElHTnZibVJwZEdsdmJpQnBjeUJ1YjNRZ2JXVjBMbHh1SUNvZ1ZHaHBjeUJqWVc0Z1ltVWdkWE5sWkNCMGJ5QnNiMmNnYVhOemRXVnpJR2x1SUdSbGRtVnNiM0J0Wlc1MElHVnVkbWx5YjI1dFpXNTBjeUJwYmlCamNtbDBhV05oYkZ4dUlDb2djR0YwYUhNdUlGSmxiVzkyYVc1bklIUm9aU0JzYjJkbmFXNW5JR052WkdVZ1ptOXlJSEJ5YjJSMVkzUnBiMjRnWlc1MmFYSnZibTFsYm5SeklIZHBiR3dnYTJWbGNDQjBhR1ZjYmlBcUlITmhiV1VnYkc5bmFXTWdZVzVrSUdadmJHeHZkeUIwYUdVZ2MyRnRaU0JqYjJSbElIQmhkR2h6TGx4dUlDb3ZYRzVjYm5aaGNpQjNZWEp1YVc1bklEMGdaVzF3ZEhsR2RXNWpkR2x2Ymp0Y2JseHVhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNCM1lYSnVhVzVuSUQwZ1puVnVZM1JwYjI0b1kyOXVaR2wwYVc5dUxDQm1iM0p0WVhRZ0tTQjdabTl5SUNoMllYSWdZWEpuY3oxYlhTd2tYMTh3UFRJc0pGOWZNVDFoY21kMWJXVnVkSE11YkdWdVozUm9PeVJmWHpBOEpGOWZNVHNrWDE4d0t5c3BJR0Z5WjNNdWNIVnphQ2hoY21kMWJXVnVkSE5iSkY5Zk1GMHBPMXh1SUNBZ0lHbG1JQ2htYjNKdFlYUWdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Z4dUlDQWdJQ0FnSUNBbllIZGhjbTVwYm1jb1kyOXVaR2wwYVc5dUxDQm1iM0p0WVhRc0lDNHVMbUZ5WjNNcFlDQnlaWEYxYVhKbGN5QmhJSGRoY201cGJtY2dKeUFyWEc0Z0lDQWdJQ0FnSUNkdFpYTnpZV2RsSUdGeVozVnRaVzUwSjF4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb1ptOXliV0YwTG14bGJtZDBhQ0E4SURFd0lIeDhJQzllVzNOY1hGZGRLaVF2TG5SbGMzUW9abTl5YldGMEtTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQW5WR2hsSUhkaGNtNXBibWNnWm05eWJXRjBJSE5vYjNWc1pDQmlaU0JoWW14bElIUnZJSFZ1YVhGMVpXeDVJR2xrWlc1MGFXWjVJSFJvYVhNZ0p5QXJYRzRnSUNBZ0lDQWdJQ2QzWVhKdWFXNW5MaUJRYkdWaGMyVXNJSFZ6WlNCaElHMXZjbVVnWkdWelkzSnBjSFJwZG1VZ1ptOXliV0YwSUhSb1lXNDZJQ2NnS3lCbWIzSnRZWFJjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0dadmNtMWhkQzVwYm1SbGVFOW1LQ2RHWVdsc1pXUWdRMjl0Y0c5emFYUmxJSEJ5YjNCVWVYQmxPaUFuS1NBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVPeUF2THlCSloyNXZjbVVnUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwSUhCeWIzQjBlWEJsSUdOb1pXTnJMbHh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doWTI5dVpHbDBhVzl1S1NCN1hHNGdJQ0FnSUNCMllYSWdZWEpuU1c1a1pYZ2dQU0F3TzF4dUlDQWdJQ0FnZG1GeUlHMWxjM05oWjJVZ1BTQW5WMkZ5Ym1sdVp6b2dKeUFySUdadmNtMWhkQzV5WlhCc1lXTmxLQzhsY3k5bkxDQm1kVzVqZEdsdmJpZ3BJQ0I3Y21WMGRYSnVJR0Z5WjNOYllYSm5TVzVrWlhncksxMDdmU2s3WEc0Z0lDQWdJQ0JqYjI1emIyeGxMbmRoY200b2JXVnpjMkZuWlNrN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0F2THlBdExTMGdWMlZzWTI5dFpTQjBieUJrWldKMVoyZHBibWNnVW1WaFkzUWdMUzB0WEc0Z0lDQWdJQ0FnSUM4dklGUm9hWE1nWlhKeWIzSWdkMkZ6SUhSb2NtOTNiaUJoY3lCaElHTnZiblpsYm1sbGJtTmxJSE52SUhSb1lYUWdlVzkxSUdOaGJpQjFjMlVnZEdocGN5QnpkR0ZqYTF4dUlDQWdJQ0FnSUNBdkx5QjBieUJtYVc1a0lIUm9aU0JqWVd4c2MybDBaU0IwYUdGMElHTmhkWE5sWkNCMGFHbHpJSGRoY201cGJtY2dkRzhnWm1seVpTNWNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHMWxjM05oWjJVcE8xeHVJQ0FnSUNBZ2ZTQmpZWFJqYUNoNEtTQjdmVnh1SUNBZ0lIMWNiaUFnZlR0Y2JuMWNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0IzWVhKdWFXNW5PMXh1SWwxOSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvUmVhY3QnKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgVGFibGVIZWFkZXIgZnJvbSAnLi9UYWJsZUhlYWRlcic7XG5pbXBvcnQgVGFibGVCb2R5IGZyb20gJy4vVGFibGVCb2R5JztcbmltcG9ydCBQYWdpbmF0aW9uTGlzdCBmcm9tICcuL3BhZ2luYXRpb24vUGFnaW5hdGlvbkxpc3QnO1xuaW1wb3J0IFRvb2xCYXIgZnJvbSAnLi90b29sYmFyL1Rvb2xCYXInO1xuaW1wb3J0IFRhYmxlRmlsdGVyIGZyb20gJy4vVGFibGVGaWx0ZXInO1xuaW1wb3J0IHtUYWJsZURhdGFTdG9yZX0gZnJvbSAnLi9zdG9yZS9UYWJsZURhdGFTdG9yZSc7XG5cbmNsYXNzIEJvb3RzdHJhcFRhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5fYXR0YWNoQ2VsbEVkaXRGdW5jKCk7XG4gICAgbGV0IGtleUZpZWxkID0gbnVsbDtcbiAgICBsZXQgY3VzdG9tU29ydEZ1bmNNYXAgPSB7fTtcblxuICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2godGhpcy5wcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24oY29sdW1uKXtcbiAgICAgIGlmKGNvbHVtbi5wcm9wcy5pc0tleSl7XG4gICAgICAgIGlmKGtleUZpZWxkICE9IG51bGwpIHRocm93IFwiRXJyb3IuIE11bHRpcGxlIGtleSBjb2x1bW4gYmUgZGV0ZWN0ZWQgaW4gVGFibGVIZWFkZXJDb2x1bW4uXCI7XG4gICAgICAgIGtleUZpZWxkID0gY29sdW1uLnByb3BzLmRhdGFGaWVsZDtcbiAgICAgIH1cbiAgICAgIGlmKGNvbHVtbi5wcm9wcy5zb3J0RnVuYyl7XG4gICAgICAgIGN1c3RvbVNvcnRGdW5jTWFwW2NvbHVtbi5wcm9wcy5kYXRhRmllbGRdID0gY29sdW1uLnByb3BzLnNvcnRGdW5jO1xuICAgICAgfVxuICAgIH0sIHRoaXMpO1xuXG4gICAgaWYoa2V5RmllbGQgPT0gbnVsbClcbiAgICAgIHRocm93IFwiRXJyb3IuIE5vIGFueSBrZXkgY29sdW1uIGRlZmluZWQgaW4gVGFibGVIZWFkZXJDb2x1bW4uIFVzZSAnaXNLZXk9e3RydWV9JyB0byBzcGVjaWZ5IGFuIHVuaXF1ZSBjb2x1bW4gYWZ0ZXIgdmVyc2lvbiAwLjUuNC5cIjtcblxuICAgIGlmKCFBcnJheS5pc0FycmF5KHRoaXMucHJvcHMuZGF0YSkpe1xuICAgICAgdGhpcy5zdG9yZSA9IG5ldyBUYWJsZURhdGFTdG9yZSh0aGlzLnByb3BzLmRhdGEuZ2V0RGF0YSgpKTtcbiAgICAgIHRoaXMucHJvcHMuZGF0YS5jbGVhcigpO1xuICAgICAgdGhpcy5wcm9wcy5kYXRhLm9uKCdjaGFuZ2UnLCAoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLnNldERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGRhdGE6IHRoaXMuZ2V0VGFibGVEYXRhKClcbiAgICAgICAgfSlcbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfSBlbHNle1xuICAgICAgdGhpcy5zdG9yZSA9IG5ldyBUYWJsZURhdGFTdG9yZSh0aGlzLnByb3BzLmRhdGEpO1xuICAgIH1cbiAgICB0aGlzLnN0b3JlLnNldFByb3BzKHRoaXMucHJvcHMucGFnaW5hdGlvbiwga2V5RmllbGQsIGN1c3RvbVNvcnRGdW5jTWFwKTtcblxuICAgIGlmKHRoaXMucHJvcHMuc2VsZWN0Um93ICYmIHRoaXMucHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkKXtcbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkodGhpcy5wcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkYXRhOiB0aGlzLmdldFRhYmxlRGF0YSgpLFxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpXG4gICAgfTtcbiAgfVxuXG4gIGdldFRhYmxlRGF0YSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgaWYodGhpcy5wcm9wcy5wYWdpbmF0aW9uKXtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZSgxLCBDb25zdC5TSVpFX1BFUl9QQUdFKS5nZXQoKTtcbiAgICB9IGVsc2V7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpe1xuICAgIGlmKEFycmF5LmlzQXJyYXkobmV4dFByb3BzLmRhdGEpKXtcbiAgICAgIHRoaXMuc3RvcmUuc2V0RGF0YShuZXh0UHJvcHMuZGF0YSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogdGhpcy5nZXRUYWJsZURhdGEoKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmKG5leHRQcm9wcy5zZWxlY3RSb3cgJiYgbmV4dFByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCl7XG4gICAgICAvL3NldCBkZWZhdWx0IHNlbGVjdCByb3dzIHRvIHN0b3JlLlxuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShuZXh0UHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWxlY3RlZFJvd0tleXM6IG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpe1xuICAgIHRoaXMuX2F0dGFjaENlbGxFZGl0RnVuYygpO1xuICAgIGlmKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlclRhYmxlQ29tcGxldGUpXG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJUYWJsZUNvbXBsZXRlKCk7XG4gIH1cblxuICBfYXR0YWNoQ2VsbEVkaXRGdW5jKCl7XG4gICAgaWYodGhpcy5wcm9wcy5jZWxsRWRpdCl7XG4gICAgICB0aGlzLnByb3BzLmNlbGxFZGl0Ll9fb25Db21wbGV0ZUVkaXRfXyA9IHRoaXMuaGFuZGxlRWRpdENlbGwuYmluZCh0aGlzKTtcbiAgICAgIGlmKHRoaXMucHJvcHMuY2VsbEVkaXQubW9kZSAhPT0gQ29uc3QuQ0VMTF9FRElUX05PTkUpXG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgdGFibGVDbGFzcyA9IGNsYXNzU2V0KFwicmVhY3QtYnMtdGFibGVcIik7XG4gICAgdmFyIGNoaWxkcmVucyA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIHN0eWxlID0ge1xuICAgICAgaGVpZ2h0OiB0aGlzLnByb3BzLmhlaWdodFxuICAgIH07XG4gICAgaWYoIUFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikpe1xuICAgICAgY2hpbGRyZW5zID0gW3RoaXMucHJvcHMuY2hpbGRyZW5dO1xuICAgIH1cbiAgICB2YXIgY29sdW1ucyA9IGNoaWxkcmVucy5tYXAoZnVuY3Rpb24oY29sdW1uLCBpKXtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGNvbHVtbi5wcm9wcy5kYXRhRmllbGQsXG4gICAgICAgIGFsaWduOiBjb2x1bW4ucHJvcHMuZGF0YUFsaWduLFxuICAgICAgICBzb3J0OiBjb2x1bW4ucHJvcHMuZGF0YVNvcnQsXG4gICAgICAgIGZvcm1hdDogY29sdW1uLnByb3BzLmRhdGFGb3JtYXQsXG4gICAgICAgIGVkaXRhYmxlOiBjb2x1bW4ucHJvcHMuZWRpdGFibGUsXG4gICAgICAgIGhpZGRlbjogY29sdW1uLnByb3BzLmhpZGRlbixcbiAgICAgICAgY2xhc3NOYW1lOmNvbHVtbi5wcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIHdpZHRoOiBjb2x1bW4ucHJvcHMud2lkdGgsXG4gICAgICAgIGluZGV4OiBpXG4gICAgICB9O1xuICAgIH0sIHRoaXMpO1xuXG4gICAgdmFyIHBhZ2luYXRpb24gPSB0aGlzLnJlbmRlclBhZ2luYXRpb24oKTtcbiAgICB2YXIgdG9vbEJhciA9IHRoaXMucmVuZGVyVG9vbEJhcigpO1xuICAgIHZhciB0YWJsZUZpbHRlciA9IHRoaXMucmVuZGVyVGFibGVGaWx0ZXIoY29sdW1ucyk7XG4gICAgcmV0dXJuKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWFjdC1icy1jb250YWluZXJcIj5cbiAgICAgICAge3Rvb2xCYXJ9XG4gICAgICAgIDxkaXYgcmVmPVwidGFibGVcIiBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT17dGFibGVDbGFzc30+XG4gICAgICAgICAgPFRhYmxlSGVhZGVyIHJvd1NlbGVjdFR5cGU9e3RoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgIHNvcnROYW1lPXt0aGlzLnByb3BzLm9wdGlvbnMuc29ydE5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgIHNvcnRPcmRlcj17dGhpcy5wcm9wcy5vcHRpb25zLnNvcnRPcmRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgb25Tb3J0PXt0aGlzLmhhbmRsZVNvcnQuYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RBbGxSb3c9e3RoaXMuaGFuZGxlU2VsZWN0QWxsUm93LmJpbmQodGhpcyl9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgPC9UYWJsZUhlYWRlcj5cbiAgICAgICAgICA8VGFibGVCb2R5IHJlZj1cImJvZHlcIiBkYXRhPXt0aGlzLnN0YXRlLmRhdGF9IGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBzdHJpcGVkPXt0aGlzLnByb3BzLnN0cmlwZWR9XG4gICAgICAgICAgICBob3Zlcj17dGhpcy5wcm9wcy5ob3Zlcn1cbiAgICAgICAgICAgIGtleUZpZWxkPXt0aGlzLnN0b3JlLmdldEtleUZpZWxkKCl9XG4gICAgICAgICAgICBjb25kZW5zZWQ9e3RoaXMucHJvcHMuY29uZGVuc2VkfVxuICAgICAgICAgICAgc2VsZWN0Um93PXt0aGlzLnByb3BzLnNlbGVjdFJvd31cbiAgICAgICAgICAgIGNlbGxFZGl0PXt0aGlzLnByb3BzLmNlbGxFZGl0fVxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dLZXlzPXt0aGlzLnN0YXRlLnNlbGVjdGVkUm93S2V5c31cbiAgICAgICAgICAgIG9uU2VsZWN0Um93PXt0aGlzLmhhbmRsZVNlbGVjdFJvdy5iaW5kKHRoaXMpfS8+XG4gICAgICAgICAge3RhYmxlRmlsdGVyfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3BhZ2luYXRpb259XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICBoYW5kbGVTb3J0KG9yZGVyLCBzb3J0RmllbGQpe1xuICAgIGxldCByZXN1bHQgPSB0aGlzLnN0b3JlLnNvcnQob3JkZXIsIHNvcnRGaWVsZCkuZ2V0KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVBhZ2luYXRpb25EYXRhKHBhZ2UsIHNpemVQZXJQYWdlKXtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKHBhZ2UsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0QWxsUm93KGUpe1xuICAgIHZhciBpc1NlbGVjdGVkID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgbGV0IHNlbGVjdGVkUm93S2V5cyA9IFtdO1xuICAgIGlmKGlzU2VsZWN0ZWQpe1xuICAgICAgc2VsZWN0ZWRSb3dLZXlzID0gdGhpcy5zdG9yZS5nZXRBbGxSb3drZXkoKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KHNlbGVjdGVkUm93S2V5cyk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzZWxlY3RlZFJvd0tleXM6IHNlbGVjdGVkUm93S2V5c1xuICAgIH0pO1xuICAgIGlmKHRoaXMucHJvcHMuc2VsZWN0Um93Lm9uU2VsZWN0QWxsKXtcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93Lm9uU2VsZWN0QWxsKGlzU2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNlbGVjdFJvdyhyb3csIGlzU2VsZWN0ZWQpe1xuICAgIGxldCBjdXJyU2VsZWN0ZWQgPSB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpO1xuICAgIGxldCByb3dLZXkgPSByb3dbdGhpcy5zdG9yZS5nZXRLZXlGaWVsZCgpXTtcbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlID09PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSl7XG4gICAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KGlzU2VsZWN0ZWQ/W3Jvd0tleV06W10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZihpc1NlbGVjdGVkKSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZC5wdXNoKHJvd0tleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQuZmlsdGVyKGZ1bmN0aW9uKGtleSl7XG4gICAgICAgICAgcmV0dXJuIHJvd0tleSAhPT0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KGN1cnJTZWxlY3RlZCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzZWxlY3RlZFJvd0tleXM6IGN1cnJTZWxlY3RlZFxuICAgIH0pO1xuXG4gICAgaWYodGhpcy5wcm9wcy5zZWxlY3RSb3cub25TZWxlY3Qpe1xuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RSb3cub25TZWxlY3Qocm93LCBpc1NlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVFZGl0Q2VsbChuZXdWYWwsIHJvd0luZGV4LCBjb2xJbmRleCl7XG4gICAgbGV0IGZpZWxkTmFtZTtcbiAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHRoaXMucHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uKGNvbHVtbiwgaSl7XG4gICAgICBpZihpID09IGNvbEluZGV4KXtcbiAgICAgICAgZmllbGROYW1lID0gY29sdW1uLnByb3BzLmRhdGFGaWVsZDtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuc3RvcmUuZWRpdChuZXdWYWwsIHJvd0luZGV4LCBmaWVsZE5hbWUpLmdldCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfSk7XG5cbiAgICBpZih0aGlzLnByb3BzLmNlbGxFZGl0LmFmdGVyU2F2ZUNlbGwpe1xuICAgICAgdGhpcy5wcm9wcy5jZWxsRWRpdC5hZnRlclNhdmVDZWxsKHRoaXMuc3RhdGUuZGF0YVtyb3dJbmRleF0sIGZpZWxkTmFtZSwgbmV3VmFsKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVBZGRSb3cobmV3T2JqKXtcbiAgICBsZXQgbXNnID0gbnVsbCwgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnN0b3JlLmFkZChuZXdPYmopO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnByb3BzLnBhZ2luYXRpb24pe1xuICAgICAgLy9pZiBwYWdpbmF0aW9uIGlzIGVuYWJsZWQgYW5kIGluc2VydCByb3cgYmUgdHJpZ2dlciwgY2hhbmdlIHRvIGxhc3QgcGFnZVxuICAgICAgbGV0IHNpemVQZXJQYWdlID0gdGhpcy5yZWZzLnBhZ2luYXRpb24uZ2V0U2l6ZVBlclBhZ2UoKTtcbiAgICAgIGxldCBjdXJyTGFzdFBhZ2UgPSBNYXRoLmNlaWwodGhpcy5zdG9yZS5nZXREYXRhTnVtKCkvc2l6ZVBlclBhZ2UpO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKGN1cnJMYXN0UGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlZnMucGFnaW5hdGlvbi5jaGFuZ2VQYWdlKGN1cnJMYXN0UGFnZSk7XG4gICAgfSBlbHNle1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckluc2VydFJvdyl7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJJbnNlcnRSb3cobmV3T2JqKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVEcm9wUm93KCl7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgZHJvcFJvd0tleXMgPSB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpO1xuXG4gICAgdGhpcy5zdG9yZS5yZW1vdmUoZHJvcFJvd0tleXMpOyAgLy9yZW1vdmUgc2VsZWN0ZWQgUm93XG4gICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShbXSk7ICAvL2NsZWFyIHNlbGVjdGVkIHJvdyBrZXlcblxuICAgIGlmKHRoaXMucHJvcHMucGFnaW5hdGlvbil7XG4gICAgICBsZXQgc2l6ZVBlclBhZ2UgPSB0aGlzLnJlZnMucGFnaW5hdGlvbi5nZXRTaXplUGVyUGFnZSgpO1xuICAgICAgbGV0IGN1cnJMYXN0UGFnZSA9IE1hdGguY2VpbCh0aGlzLnN0b3JlLmdldERhdGFOdW0oKS9zaXplUGVyUGFnZSk7XG4gICAgICBsZXQgY3VycmVudFBhZ2UgPSB0aGlzLnJlZnMucGFnaW5hdGlvbi5nZXRDdXJyZW50UGFnZSgpO1xuICAgICAgaWYoY3VycmVudFBhZ2UgPiBjdXJyTGFzdFBhZ2UpXG4gICAgICAgIGN1cnJlbnRQYWdlID0gY3Vyckxhc3RQYWdlO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKGN1cnJlbnRQYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKClcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWZzLnBhZ2luYXRpb24uY2hhbmdlUGFnZShjdXJyZW50UGFnZSk7XG4gICAgfWVsc2V7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYodGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyRGVsZXRlUm93KXtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckRlbGV0ZVJvdyhkcm9wUm93S2V5cyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRmlsdGVyRGF0YShmaWx0ZXJPYmope1xuICAgIHRoaXMuc3RvcmUuZmlsdGVyKGZpbHRlck9iaik7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZih0aGlzLnByb3BzLnBhZ2luYXRpb24pe1xuICAgICAgbGV0IHNpemVQZXJQYWdlID0gdGhpcy5yZWZzLnBhZ2luYXRpb24uZ2V0U2l6ZVBlclBhZ2UoKTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZSgxLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgICB0aGlzLnJlZnMucGFnaW5hdGlvbi5jaGFuZ2VQYWdlKDEpO1xuICAgIH1lbHNle1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaChzZWFyY2hUZXh0KXtcbiAgICB0aGlzLnN0b3JlLnNlYXJjaChzZWFyY2hUZXh0KTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmKHRoaXMucHJvcHMucGFnaW5hdGlvbil7XG4gICAgICBsZXQgc2l6ZVBlclBhZ2UgPSB0aGlzLnJlZnMucGFnaW5hdGlvbi5nZXRTaXplUGVyUGFnZSgpO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKDEsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICAgIHRoaXMucmVmcy5wYWdpbmF0aW9uLmNoYW5nZVBhZ2UoMSk7XG4gICAgfWVsc2V7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyUGFnaW5hdGlvbigpe1xuICAgIGlmKHRoaXMucHJvcHMucGFnaW5hdGlvbil7XG4gICAgICByZXR1cm4oXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPFBhZ2luYXRpb25MaXN0IHJlZj1cInBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VQYWdlPXt0aGlzLmhhbmRsZVBhZ2luYXRpb25EYXRhLmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVQZXJQYWdlPXtDb25zdC5TSVpFX1BFUl9QQUdFfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZT17dGhpcy5zdG9yZS5nZXREYXRhTnVtKCl9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKVxuICAgIH1lbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclRvb2xCYXIoKXtcbiAgICBsZXQgY29sdW1ucztcbiAgICBpZihBcnJheS5pc0FycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pKXtcbiAgICAgIGNvbHVtbnMgPSB0aGlzLnByb3BzLmNoaWxkcmVuLm1hcChmdW5jdGlvbihjb2x1bW4pe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbHVtbi5wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBmaWVsZDogY29sdW1uLnByb3BzLmRhdGFGaWVsZFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbnMgPSBbe1xuICAgICAgICBuYW1lOiB0aGlzLnByb3BzLmNoaWxkcmVuLnByb3BzLmNoaWxkcmVuLFxuICAgICAgICBmaWVsZDogdGhpcy5wcm9wcy5jaGlsZHJlbi5wcm9wcy5kYXRhRmllbGRcbiAgICAgIH1dO1xuICAgIH1cbiAgICBpZih0aGlzLnByb3BzLmluc2VydFJvdyB8fCB0aGlzLnByb3BzLmRlbGV0ZVJvdyB8fCB0aGlzLnByb3BzLnNlYXJjaCl7XG4gICAgICByZXR1cm4oXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidG9vbC1iYXJcIj5cbiAgICAgICAgICA8VG9vbEJhciBlbmFibGVJbnNlcnQ9e3RoaXMucHJvcHMuaW5zZXJ0Um93fVxuICAgICAgICAgICAgICAgICAgIGVuYWJsZURlbGV0ZT17dGhpcy5wcm9wcy5kZWxldGVSb3d9XG4gICAgICAgICAgICAgICAgICAgZW5hYmxlU2VhcmNoPXt0aGlzLnByb3BzLnNlYXJjaH1cbiAgICAgICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgIG9uQWRkUm93PXt0aGlzLmhhbmRsZUFkZFJvdy5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgIG9uRHJvcFJvdz17dGhpcy5oYW5kbGVEcm9wUm93LmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgb25TZWFyY2g9e3RoaXMuaGFuZGxlU2VhcmNoLmJpbmQodGhpcyl9Lz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApXG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXJUYWJsZUZpbHRlcihjb2x1bW5zKXtcbiAgICBpZih0aGlzLnByb3BzLmNvbHVtbkZpbHRlcil7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGFibGVGaWx0ZXIgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgICAgICAgIHJvd1NlbGVjdFR5cGU9e3RoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGV9XG4gICAgICAgICAgICAgICAgICAgICBvbkZpbHRlcj17dGhpcy5oYW5kbGVGaWx0ZXJEYXRhLmJpbmQodGhpcyl9Lz5cbiAgICAgICk7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbkJvb3RzdHJhcFRhYmxlLnByb3BUeXBlcyA9IHtcbiAgaGVpZ2h0OiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBkYXRhOiBSZWFjdC5Qcm9wVHlwZXMuYXJyYXksXG4gIHN0cmlwZWQ6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBob3ZlcjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNvbmRlbnNlZDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIHBhZ2luYXRpb246IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hQbGFjZWhvbGRlcjogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0Um93OiBSZWFjdC5Qcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1vZGU6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgYmdDb2xvcjogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZDogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICAgIG9uU2VsZWN0OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgICBvblNlbGVjdEFsbDogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xpY2tUb1NlbGVjdDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbFxuICB9KSxcbiAgY2VsbEVkaXQ6IFJlYWN0LlByb3BUeXBlcy5zaGFwZSh7XG4gICAgbW9kZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgICBibHVyVG9TYXZlOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgICBhZnRlclNhdmVDZWxsOiBSZWFjdC5Qcm9wVHlwZXMuZnVuY1xuICB9KSxcbiAgaW5zZXJ0Um93OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgZGVsZXRlUm93OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgY29sdW1uRmlsdGVyOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgb3B0aW9uczogUmVhY3QuUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzb3J0TmFtZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3J0T3JkZXI6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWZ0ZXJUYWJsZUNvbXBsZXRlOiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgICBhZnRlckRlbGV0ZVJvdzogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWZ0ZXJJbnNlcnRSb3c6IFJlYWN0LlByb3BUeXBlcy5mdW5jXG4gIH0pXG59O1xuQm9vdHN0cmFwVGFibGUuZGVmYXVsdFByb3BzID0ge1xuICBoZWlnaHQ6IFwiMTAwJVwiLFxuICBzdHJpcGVkOiBmYWxzZSxcbiAgaG92ZXI6IGZhbHNlLFxuICBjb25kZW5zZWQ6IGZhbHNlLFxuICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgc2VsZWN0Um93OiB7XG4gICAgbW9kZTogQ29uc3QuUk9XX1NFTEVDVF9OT05FLFxuICAgIGJnQ29sb3I6IENvbnN0LlJPV19TRUxFQ1RfQkdfQ09MT1IsXG4gICAgc2VsZWN0ZWQ6IFtdLFxuICAgIG9uU2VsZWN0OiB1bmRlZmluZWQsXG4gICAgb25TZWxlY3RBbGw6IHVuZGVmaW5lZCxcbiAgICBjbGlja1RvU2VsZWN0OiBmYWxzZSxcbiAgICBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGw6IGZhbHNlXG4gIH0sXG4gIGNlbGxFZGl0OntcbiAgICBtb2RlOiBDb25zdC5DRUxMX0VESVRfTk9ORSxcbiAgICBibHVyVG9TYXZlOiBmYWxzZSxcbiAgICBhZnRlclRhYmxlQ29tcGxldGU6IHVuZGVmaW5lZFxuICB9LFxuICBpbnNlcnRSb3c6IGZhbHNlLFxuICBkZWxldGVSb3c6IGZhbHNlLFxuICBzZWFyY2g6IGZhbHNlLFxuICBjb2x1bW5GaWx0ZXI6IGZhbHNlLFxuICBvcHRpb25zOiB7XG4gICAgc29ydE5hbWU6IG51bGwsXG4gICAgc29ydE9yZGVyOiBDb25zdC5TT1JUX0RFU0NcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQm9vdHN0cmFwVGFibGU7XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIFNPUlRfREVTQzogXCJkZXNjXCIsXG4gIFNPUlRfQVNDOiBcImFzY1wiLFxuICBTSVpFX1BFUl9QQUdFOiAxMCxcbiAgU0laRV9QRVJfTElTVDogNSxcbiAgTkVYVF9QQUdFOiBcIj5cIixcbiAgTEFTVF9QQUdFOiBcIj4+XCIsXG4gIFBSRV9QQUdFOiBcIjxcIixcbiAgRklSU1RfUEFHRTogXCI8PFwiLFxuICBST1dfU0VMRUNUX0JHX0NPTE9SOiBcIlwiLFxuICBST1dfU0VMRUNUX05PTkU6IFwibm9uZVwiLFxuICBST1dfU0VMRUNUX1NJTkdMRTogXCJyYWRpb1wiLFxuICBST1dfU0VMRUNUX01VTFRJOiBcImNoZWNrYm94XCIsXG4gIENFTExfRURJVF9OT05FOiBcIm5vbmVcIixcbiAgQ0VMTF9FRElUX0NMSUNLOiBcImNsaWNrXCIsXG4gIENFTExfRURJVF9EQkNMSUNLOiBcImRiY2xpY2tcIlxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcblxuY2xhc3MgU2VsZWN0Um93SGVhZGVyQ29sdW1uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIHJlbmRlcigpe1xuICAgIHZhciB0aFN0eWxlID0ge1xuICAgICAgd2lkdGg6IDM1XG4gICAgfTtcblxuICAgIHJldHVybihcbiAgICAgIDx0aCBzdHlsZT17dGhTdHlsZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGgtaW5uZXIgdGFibGUtaGVhZGVyLWNvbHVtblwiPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGg+XG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdFJvd0hlYWRlckNvbHVtbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgVGFibGVSb3cgZnJvbSAnLi9UYWJsZVJvdyc7XG5pbXBvcnQgVGFibGVDb2x1bW4gZnJvbSAnLi9UYWJsZUNvbHVtbic7XG5pbXBvcnQgVGFibGVFZGl0Q29sdW1uIGZyb20gJy4vVGFibGVFZGl0Q29sdW1uJztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgVGFibGVCb2R5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjdXJyRWRpdENlbGw6IG51bGxcbiAgICB9O1xuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIGNvbnRhaW5lckNsYXNzZXMgPSBjbGFzc1NldChcInRhYmxlLWNvbnRhaW5lclwiKTtcblxuICAgIHZhciB0YWJsZUNsYXNzZXMgPSBjbGFzc1NldChcInRhYmxlXCIsIFwidGFibGUtYm9yZGVyZWRcIiwge1xuICAgICAgJ3RhYmxlLXN0cmlwZWQnOiB0aGlzLnByb3BzLnN0cmlwZWQsXG4gICAgICAndGFibGUtaG92ZXInOiB0aGlzLnByb3BzLmhvdmVyLFxuICAgICAgJ3RhYmxlLWNvbmRlbnNlZCc6IHRoaXMucHJvcHMuY29uZGVuc2VkXG4gICAgfSk7XG5cbiAgICB2YXIgaXNTZWxlY3RSb3dEZWZpbmVkID0gdGhpcy5faXNTZWxlY3RSb3dEZWZpbmVkKCk7XG4gICAgdmFyIHRhYmxlSGVhZGVyID0gdGhpcy5yZW5kZXJUYWJsZUhlYWRlcihpc1NlbGVjdFJvd0RlZmluZWQpO1xuXG4gICAgdmFyIHRhYmxlUm93cyA9IHRoaXMucHJvcHMuZGF0YS5tYXAoZnVuY3Rpb24oZGF0YSwgcil7XG4gICAgICB2YXIgdGFibGVDb2x1bW5zID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4sIGkpe1xuICAgICAgICB2YXIgZmllbGRWYWx1ZSA9IGRhdGFbY29sdW1uLm5hbWVdO1xuICAgICAgICBpZih0aGlzLmVkaXRpbmcgJiZcbiAgICAgICAgICBjb2x1bW4ubmFtZSAhPT0gdGhpcy5wcm9wcy5rZXlGaWVsZCAmJiAvLyBLZXkgZmllbGQgY2FuJ3QgYmUgZWRpdFxuICAgICAgICAgIGNvbHVtbi5lZGl0YWJsZSAmJiAvLyBjb2x1bW4gaXMgZWRpdGFibGU/IGRlZmF1bHQgaXMgdHJ1ZSwgdXNlciBjYW4gc2V0IGl0IGZhbHNlXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyRWRpdENlbGwgIT0gbnVsbCAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyckVkaXRDZWxsLnJpZCA9PSByICYmXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyRWRpdENlbGwuY2lkID09IGkpe1xuICAgICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICA8VGFibGVFZGl0Q29sdW1uIGNvbXBsZXRlRWRpdD17dGhpcy5oYW5kbGVDb21wbGV0ZUVkaXRDZWxsLmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdXJUb1NhdmU9e3RoaXMucHJvcHMuY2VsbEVkaXQuYmx1clRvU2F2ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleD17cn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleD17aX0+XG4gICAgICAgICAgICAgICAge2ZpZWxkVmFsdWV9XG4gICAgICAgICAgICAgIDwvVGFibGVFZGl0Q29sdW1uPlxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgaWYodHlwZW9mIGNvbHVtbi5mb3JtYXQgIT09IFwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgdmFyIGZvcm1hdHRlZFZhbHVlID0gY29sdW1uLmZvcm1hdChmaWVsZFZhbHVlLCBkYXRhKTtcbiAgICAgICAgICAgIGlmICghUmVhY3QuaXNWYWxpZEVsZW1lbnQoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogZm9ybWF0dGVkVmFsdWV9fT48L2Rpdj47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICAgIDxUYWJsZUNvbHVtbiBkYXRhQWxpZ249e2NvbHVtbi5hbGlnbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y29sdW1uLmNsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxFZGl0PXt0aGlzLnByb3BzLmNlbGxFZGl0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb25FZGl0PXt0aGlzLmhhbmRsZUVkaXRDZWxsLmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Y29sdW1uLndpZHRofT5cbiAgICAgICAgICAgICAgICB7Zm9ybWF0dGVkVmFsdWV9XG4gICAgICAgICAgICAgIDwvVGFibGVDb2x1bW4+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICA8VGFibGVDb2x1bW4gZGF0YUFsaWduPXtjb2x1bW4uYWxpZ259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NvbHVtbi5jbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsRWRpdD17dGhpcy5wcm9wcy5jZWxsRWRpdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj17Y29sdW1uLmhpZGRlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRWRpdD17dGhpcy5oYW5kbGVFZGl0Q2VsbC5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9e2NvbHVtbi53aWR0aH0+XG4gICAgICAgICAgICAgICAge2ZpZWxkVmFsdWV9XG4gICAgICAgICAgICAgIDwvVGFibGVDb2x1bW4+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMucHJvcHMuc2VsZWN0ZWRSb3dLZXlzLmluZGV4T2YoZGF0YVt0aGlzLnByb3BzLmtleUZpZWxkXSkgIT0gLTE7XG4gICAgICB2YXIgc2VsZWN0Um93Q29sdW1uID0gaXNTZWxlY3RSb3dEZWZpbmVkP3RoaXMucmVuZGVyU2VsZWN0Um93Q29sdW1uKHNlbGVjdGVkKTpudWxsO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlUm93IGlzU2VsZWN0ZWQ9e3NlbGVjdGVkfSBrZXk9e3J9XG4gICAgICAgICAgc2VsZWN0Um93PXtpc1NlbGVjdFJvd0RlZmluZWQ/dGhpcy5wcm9wcy5zZWxlY3RSb3c6dW5kZWZpbmVkfVxuICAgICAgICAgIGVuYWJsZUNlbGxFZGl0PXt0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgIT09IENvbnN0LkNFTExfRURJVF9OT05FfVxuICAgICAgICAgIG9uU2VsZWN0Um93PXt0aGlzLmhhbmRsZVNlbGVjdFJvdy5iaW5kKHRoaXMpfT5cbiAgICAgICAgICB7c2VsZWN0Um93Q29sdW1ufXt0YWJsZUNvbHVtbnN9XG4gICAgICAgIDwvVGFibGVSb3c+XG4gICAgICApXG4gICAgfSwgdGhpcyk7XG5cbiAgICBpZih0YWJsZVJvd3MubGVuZ3RoID09PSAwKXtcbiAgICAgIHRhYmxlUm93cy5wdXNoKFxuICAgICAgPFRhYmxlUm93IGtleT1cIiMjdGFibGUtZW1wdHkjI1wiPlxuICAgICAgICA8dGQgY29sU3Bhbj17dGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCsoaXNTZWxlY3RSb3dEZWZpbmVkPzE6MCl9XG4gICAgICAgICAgICBzdHlsZT17eyB0ZXh0QWxpZ246IFwiY2VudGVyXCIgfX0+XG4gICAgICAgICAgICBUaGVyZSBpcyBubyBkYXRhIHRvIGRpc3BsYXlcbiAgICAgICAgPC90ZD5cbiAgICAgIDwvVGFibGVSb3c+KTtcbiAgICB9XG5cbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICByZXR1cm4oXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y29udGFpbmVyQ2xhc3Nlc30+XG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RhYmxlQ2xhc3Nlc30+XG4gICAgICAgICAge3RhYmxlSGVhZGVyfVxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIHt0YWJsZVJvd3N9XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJlbmRlclRhYmxlSGVhZGVyKGlzU2VsZWN0Um93RGVmaW5lZCl7XG4gICAgdmFyIHNlbGVjdFJvd0hlYWRlciA9IG51bGw7XG5cbiAgICBpZihpc1NlbGVjdFJvd0RlZmluZWQpe1xuICAgICAgbGV0IHN0eWxlID0ge1xuICAgICAgICB3aWR0aDozNVxuICAgICAgfVxuICAgICAgc2VsZWN0Um93SGVhZGVyID0gKDx0aCBzdHlsZT17c3R5bGV9IGtleT17LTF9PjwvdGg+KTtcbiAgICB9XG4gICAgdmFyIHRoZWFkZXIgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbiwgaSl7XG4gICAgICBsZXQgc3R5bGU9e1xuICAgICAgICBkaXNwbGF5OiBjb2x1bW4uaGlkZGVuP1wibm9uZVwiOm51bGwsXG4gICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGhcbiAgICAgIH07XG4gICAgICByZXR1cm4gKDx0aCBzdHlsZT17c3R5bGV9IGtleT17aX0gY2xhc3NOYW1lPXtjb2x1bW4uY2xhc3NOYW1lfT48L3RoPik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4oXG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj57c2VsZWN0Um93SGVhZGVyfXt0aGVhZGVyfTwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgIClcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdFJvdyhyb3dJbmRleCwgaXNTZWxlY3RlZCl7XG4gICAgdmFyIGtleSwgc2VsZWN0ZWRSb3c7XG4gICAgdGhpcy5wcm9wcy5kYXRhLmZvckVhY2goZnVuY3Rpb24ocm93LCBpKXtcbiAgICAgIGlmKGkgPT0gcm93SW5kZXgtMSl7XG4gICAgICAgIGtleSA9IHJvd1t0aGlzLnByb3BzLmtleUZpZWxkXTtcbiAgICAgICAgc2VsZWN0ZWRSb3cgPSByb3c7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5wcm9wcy5vblNlbGVjdFJvdyhzZWxlY3RlZFJvdywgaXNTZWxlY3RlZCk7XG4gIH1cblxuICBoYW5kbGVTZWxlY3RSb3dDb2x1bUNoYW5nZShlKXtcbiAgICBpZighdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCB8fCAhdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKXtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Um93KFxuICAgICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnJvd0luZGV4LCBlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRWRpdENlbGwocm93SW5kZXgsIGNvbHVtbkluZGV4KXtcbiAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xuICAgIGlmKHRoaXMuX2lzU2VsZWN0Um93RGVmaW5lZCgpKXtcbiAgICAgIGNvbHVtbkluZGV4LS07XG4gICAgfVxuICAgIHJvd0luZGV4LS07XG4gICAgdmFyIHN0YXRlT2JqID0ge1xuICAgICAgY3VyckVkaXRDZWxsOiB7XG4gICAgICAgIHJpZDogcm93SW5kZXgsXG4gICAgICAgIGNpZDogY29sdW1uSW5kZXhcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYodGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKXtcbiAgICAgIC8vaWYgZWRpdCBjZWxsLCB0cmlnZ2VyIHJvdyBzZWxlY3Rpb25zIGFsc29cbiAgICAgIGxldCBzZWxlY3RlZCA9IHRoaXMucHJvcHMuc2VsZWN0ZWRSb3dLZXlzLmluZGV4T2YodGhpcy5wcm9wcy5kYXRhW3Jvd0luZGV4XVt0aGlzLnByb3BzLmtleUZpZWxkXSkgIT0gLTE7XG4gICAgICB0aGlzLmhhbmRsZVNlbGVjdFJvdyhyb3dJbmRleCsxLCAhc2VsZWN0ZWQpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlT2JqKTtcbiAgfVxuXG4gIGhhbmRsZUNvbXBsZXRlRWRpdENlbGwobmV3VmFsLCByb3dJbmRleCwgY29sdW1uSW5kZXgpe1xuICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJFZGl0Q2VsbDogbnVsbH0pO1xuICAgIGlmKG51bGwgIT0gbmV3VmFsKVxuICAgICAgdGhpcy5wcm9wcy5jZWxsRWRpdC5fX29uQ29tcGxldGVFZGl0X18obmV3VmFsLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICB9XG5cbiAgcmVuZGVyU2VsZWN0Um93Q29sdW1uKHNlbGVjdGVkKXtcbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlID09IENvbnN0LlJPV19TRUxFQ1RfU0lOR0xFKSB7XG4gICAgICByZXR1cm4gKDxUYWJsZUNvbHVtbj48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNlbGVjdGlvblwiIGNoZWNrZWQ9e3NlbGVjdGVkfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3RSb3dDb2x1bUNoYW5nZS5iaW5kKHRoaXMpfS8+PC9UYWJsZUNvbHVtbj4pO1xuICAgIH1lbHNlIHtcbiAgICAgIHJldHVybiAoPFRhYmxlQ29sdW1uPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjaGVja2VkPXtzZWxlY3RlZH0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlU2VsZWN0Um93Q29sdW1DaGFuZ2UuYmluZCh0aGlzKX0vPjwvVGFibGVDb2x1bW4+KTtcbiAgICB9XG4gIH1cblxuICBfaXNTZWxlY3RSb3dEZWZpbmVkKCl7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgPT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUgfHxcbiAgICAgICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlID09IENvbnN0LlJPV19TRUxFQ1RfTVVMVEk7XG4gIH1cbn1cblRhYmxlQm9keS5wcm9wVHlwZXMgPSB7XG4gIGRhdGE6IFJlYWN0LlByb3BUeXBlcy5hcnJheSxcbiAgY29sdW1uczogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICBzdHJpcGVkOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgaG92ZXI6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBjb25kZW5zZWQ6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBrZXlGaWVsZDogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0ZWRSb3dLZXlzOiBSZWFjdC5Qcm9wVHlwZXMuYXJyYXksXG4gIG9uU2VsZWN0Um93OiBSZWFjdC5Qcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCBkZWZhdWx0IFRhYmxlQm9keTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5cbmNsYXNzIFRhYmxlQ29sdW1uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuICB9XG5cbiAgaGFuZGxlQ2VsbEVkaXQoZSl7XG4gICAgaWYodGhpcy5wcm9wcy5jZWxsRWRpdC5tb2RlID09IENvbnN0LkNFTExfRURJVF9EQkNMSUNLKXtcbiAgICAgIGlmKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkpIHtcbiAgICAgICAgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7XG4gICAgICB9IGVsc2UgaWYod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uRWRpdChcbiAgICAgIGUuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50LnJvd0luZGV4LFxuICAgICAgZS5jdXJyZW50VGFyZ2V0LmNlbGxJbmRleCk7XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgdGRTdHlsZSA9IHtcbiAgICAgIHRleHRBbGlnbjogdGhpcy5wcm9wcy5kYXRhQWxpZ24sXG4gICAgICBkaXNwbGF5OiB0aGlzLnByb3BzLmhpZGRlbj9cIm5vbmVcIjpudWxsXG4gICAgfTtcblxuICAgIHZhciBvcHRzID0ge307XG4gICAgaWYodGhpcy5wcm9wcy5jZWxsRWRpdCl7XG4gICAgICBpZih0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT0gQ29uc3QuQ0VMTF9FRElUX0NMSUNLKXtcbiAgICAgICAgb3B0cy5vbkNsaWNrID0gdGhpcy5oYW5kbGVDZWxsRWRpdC5iaW5kKHRoaXMpO1xuICAgICAgfWVsc2UgaWYodGhpcy5wcm9wcy5jZWxsRWRpdC5tb2RlID09IENvbnN0LkNFTExfRURJVF9EQkNMSUNLKXtcbiAgICAgICAgb3B0cy5vbkRvdWJsZUNsaWNrID0gdGhpcy5oYW5kbGVDZWxsRWRpdC5iaW5kKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRkIHN0eWxlPXt0ZFN0eWxlfSBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lfSB7Li4ub3B0c30+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC90ZD5cbiAgICApXG4gIH1cbn1cblRhYmxlQ29sdW1uLnByb3BUeXBlcyA9IHtcbiAgZGF0YUFsaWduOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBoaWRkZW46IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6UmVhY3QuUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuVGFibGVDb2x1bW4uZGVmYXVsdFByb3BzID0ge1xuICBkYXRhQWxpZ246IFwibGVmdFwiLFxuICBoaWRkZW46IGZhbHNlLFxuICBjbGFzc05hbWU6XCJcIlxufVxuZXhwb3J0IGRlZmF1bHQgVGFibGVDb2x1bW47XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuXG5jbGFzcyBUYWJsZUVkaXRDb2x1bW4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgaGFuZGxlS2V5UHJlc3MoZSl7XG4gICAgaWYgKGUua2V5Q29kZSA9PSAxMykgeyAvL1ByZXNzZWQgRU5URVJcbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICBlLmN1cnJlbnRUYXJnZXQudmFsdWUsIHRoaXMucHJvcHMucm93SW5kZXgsIHRoaXMucHJvcHMuY29sSW5kZXgpO1xuICAgIH1lbHNlIGlmKGUua2V5Q29kZSA9PSAyNyl7XG4gICAgICB0aGlzLnByb3BzLmNvbXBsZXRlRWRpdChcbiAgICAgICAgbnVsbCwgdGhpcy5wcm9wcy5yb3dJbmRleCwgdGhpcy5wcm9wcy5jb2xJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQmx1cihlKXtcbiAgICBpZih0aGlzLnByb3BzLmJsdXJUb1NhdmUpe1xuICAgICAgdGhpcy5wcm9wcy5jb21wbGV0ZUVkaXQoXG4gICAgICAgIGUuY3VycmVudFRhcmdldC52YWx1ZSwgdGhpcy5wcm9wcy5yb3dJbmRleCwgdGhpcy5wcm9wcy5jb2xJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKXtcbiAgICB2YXIgaW5wdXQgPSB0aGlzLnJlZnMuaW5wdXRSZWYuZ2V0RE9NTm9kZSgpO1xuICAgIGlucHV0LnZhbHVlID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICBpbnB1dC5mb2N1cygpO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZD5cbiAgICAgICAgPGlucHV0IHJlZj1cImlucHV0UmVmXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlQcmVzcy5iaW5kKHRoaXMpfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVCbHVyLmJpbmQodGhpcyl9Lz5cbiAgICAgIDwvdGQ+XG4gICAgKVxuICB9XG59XG5UYWJsZUVkaXRDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBjb21wbGV0ZUVkaXQ6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICByb3dJbmRleDogUmVhY3QuUHJvcFR5cGVzLm51bWJlcixcbiAgY29sSW5kZXg6IFJlYWN0LlByb3BUeXBlcy5udW1iZXIsXG4gIGJsdXJUb1NhdmU6IFJlYWN0LlByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUVkaXRDb2x1bW47XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5jbGFzcyBUYWJsZUZpbHRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlck9iaiA9IHt9O1xuICB9XG5cbiAgaGFuZGxlS2V5VXAoZSl7XG4gICAgaWYoZS5jdXJyZW50VGFyZ2V0LnZhbHVlLnRyaW0oKSA9PT0gXCJcIilcbiAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlck9ialtlLmN1cnJlbnRUYXJnZXQubmFtZV07XG4gICAgZWxzZVxuICAgICAgdGhpcy5maWx0ZXJPYmpbZS5jdXJyZW50VGFyZ2V0Lm5hbWVdID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLmZpbHRlck9iaik7XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgdGFibGVDbGFzc2VzID0gY2xhc3NTZXQoXCJ0YWJsZVwiLCB7XG4gICAgICAndGFibGUtc3RyaXBlZCc6IHRoaXMucHJvcHMuc3RyaXBlZCxcbiAgICAgICd0YWJsZS1jb25kZW5zZWQnOiB0aGlzLnByb3BzLmNvbmRlbnNlZFxuICAgIH0pO1xuICAgIHZhciBzZWxlY3RSb3dIZWFkZXIgPSBudWxsO1xuXG4gICAgaWYodGhpcy5wcm9wcy5yb3dTZWxlY3RUeXBlID09IENvbnN0LlJPV19TRUxFQ1RfU0lOR0xFIHx8XG4gICAgICAgIHRoaXMucHJvcHMucm93U2VsZWN0VHlwZSA9PSBDb25zdC5ST1dfU0VMRUNUX01VTFRJKXtcbiAgICAgIGxldCBzdHlsZSA9IHtcbiAgICAgICAgd2lkdGg6MzUsXG4gICAgICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgICAgICBwYWRkaW5nUmlnaHQ6IDBcbiAgICAgIH1cbiAgICAgIHNlbGVjdFJvd0hlYWRlciA9ICg8dGggc3R5bGU9e3N0eWxlfSBrZXk9ey0xfT5GaWx0ZXI8L3RoPik7XG4gICAgfVxuICAgIHZhciBmaWx0ZXJGaWVsZCA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uKXtcbiAgICAgIHZhciB0aFN0eWxlID0ge1xuICAgICAgICBkaXNwbGF5OiBjb2x1bW4uaGlkZGVuP1wibm9uZVwiOm51bGwsXG4gICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGhcbiAgICAgIH07XG4gICAgICByZXR1cm4oXG4gICAgICAgIDx0aCBrZXk9e2NvbHVtbi5uYW1lfSBzdHlsZT17dGhTdHlsZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aC1pbm5lciB0YWJsZS1oZWFkZXItY29sdW1uXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj17Y29sdW1uLm5hbWV9IG5hbWU9e2NvbHVtbi5uYW1lfSBvbktleVVwPXt0aGlzLmhhbmRsZUtleVVwLmJpbmQodGhpcyl9Lz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgIClcbiAgICB9LCB0aGlzKTtcbiAgICByZXR1cm4oXG4gICAgICA8dGFibGUgY2xhc3NOYW1lPXt0YWJsZUNsYXNzZXN9IHN0eWxlPXt7bWFyZ2luVG9wOjV9fT5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0ciBzdHlsZT17e2JvcmRlckJvdHRvbVN0eWxlOiAnaGlkZGVuJ319PlxuICAgICAgICAgICAge3NlbGVjdFJvd0hlYWRlcn17ZmlsdGVyRmllbGR9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgIDwvdGFibGU+XG4gICAgKVxuICB9XG59XG5UYWJsZUZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbHVtbnM6IFJlYWN0LlByb3BUeXBlcy5hcnJheSxcbiAgcm93U2VsZWN0VHlwZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgb25GaWx0ZXI6IFJlYWN0LlByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVGaWx0ZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFV0aWwgZnJvbSAnLi91dGlsJztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBTZWxlY3RSb3dIZWFkZXJDb2x1bW4gZnJvbSAnLi9TZWxlY3RSb3dIZWFkZXJDb2x1bW4nO1xuXG5jbGFzcyBUYWJsZUhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIGNsZWFyU29ydENhcmV0KG9yZGVyLCBzb3J0RmllbGQpe1xuICAgIHZhciByb3cgPSB0aGlzLnJlZnMuaGVhZGVyLmdldERPTU5vZGUoKTtcbiAgICBmb3IodmFyIGk9MDtpPHJvdy5jaGlsZEVsZW1lbnRDb3VudDtpKyspe1xuICAgICAgdmFyIGNvbHVtbiA9IHJvdy5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXNbMF07XG4gICAgICBpZihjb2x1bW4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm9yZGVyXCIpLmxlbmd0aCA+IDApe1xuICAgICAgICBjb2x1bW4ucmVtb3ZlQ2hpbGQoY29sdW1uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJvcmRlclwiKVswXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJvcHMub25Tb3J0KG9yZGVyLCBzb3J0RmllbGQpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKXtcbiAgICAvL2RlZmF1bHQgc29ydGluZ1xuICAgIGlmKHRoaXMucHJvcHMuc29ydE5hbWUgIT09IG51bGwpe1xuICAgICAgdGhpcy5jbGVhclNvcnRDYXJldCh0aGlzLnByb3BzLnNvcnRPcmRlciwgdGhpcy5wcm9wcy5zb3J0TmFtZSk7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yZWZzLmhlYWRlci5nZXRET01Ob2RlKCk7XG4gICAgICBmb3IodmFyIGk9MDtpPHJvdy5jaGlsZEVsZW1lbnRDb3VudDtpKyspe1xuICAgICAgICB2YXIgY29sdW1uID0gcm93LmNoaWxkTm9kZXNbaV0uY2hpbGROb2Rlc1swXTtcbiAgICAgICAgaWYoY29sdW1uLmdldEF0dHJpYnV0ZSgnZGF0YS1maWVsZCcpID09PSB0aGlzLnByb3BzLnNvcnROYW1lKXtcbiAgICAgICAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoVXRpbC5yZW5kZXJTb3J0Q2FyZXQodGhpcy5wcm9wcy5zb3J0T3JkZXIpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciBjb250YWluZXJDbGFzc2VzID0gY2xhc3NTZXQoXCJ0YWJsZS1oZWFkZXJcIik7XG4gICAgdmFyIHNlbGVjdFJvd0hlYWRlckNvbCA9IHRoaXMucmVuZGVyU2VsZWN0Um93SGVhZGVyKCk7XG4gICAgdGhpcy5fYXR0YWNoQ2xlYXJTb3J0Q2FyZXRGdW5jKCk7XG5cbiAgICByZXR1cm4oXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y29udGFpbmVyQ2xhc3Nlc30+XG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJ0YWJsZSB0YWJsZS1ob3ZlciB0YWJsZS1ib3JkZXJlZFwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0ciByZWY9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAge3NlbGVjdFJvd0hlYWRlckNvbH1cbiAgICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZW5kZXJTZWxlY3RSb3dIZWFkZXIoKXtcbiAgICBpZih0aGlzLnByb3BzLnJvd1NlbGVjdFR5cGUgPT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUpIHtcbiAgICAgIHJldHVybiAoPFNlbGVjdFJvd0hlYWRlckNvbHVtbj48L1NlbGVjdFJvd0hlYWRlckNvbHVtbj4pO1xuICAgIH1lbHNlIGlmKHRoaXMucHJvcHMucm93U2VsZWN0VHlwZSA9PSBDb25zdC5ST1dfU0VMRUNUX01VTFRJKXtcbiAgICAgIHJldHVybiAoPFNlbGVjdFJvd0hlYWRlckNvbHVtbj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgb25DaGFuZ2U9e3RoaXMucHJvcHMub25TZWxlY3RBbGxSb3d9Lz48L1NlbGVjdFJvd0hlYWRlckNvbHVtbj4pO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgX2F0dGFjaENsZWFyU29ydENhcmV0RnVuYygpe1xuICAgIGlmKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikpe1xuICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLnByb3BzLmNoaWxkcmVuLmxlbmd0aDtpKyspe1xuICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuW2ldID1cbiAgICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQodGhpcy5wcm9wcy5jaGlsZHJlbltpXSwge2tleTogaSwgY2xlYXJTb3J0Q2FyZXQ6IHRoaXMuY2xlYXJTb3J0Q2FyZXQuYmluZCh0aGlzKX0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb3BzLmNoaWxkcmVuID1cbiAgICAgICAgUmVhY3QuY2xvbmVFbGVtZW50KHRoaXMucHJvcHMuY2hpbGRyZW4sIHtrZXk6IDAsIGNsZWFyU29ydENhcmV0OiB0aGlzLmNsZWFyU29ydENhcmV0LmJpbmQodGhpcyl9KTtcbiAgICB9XG4gIH1cbn1cblRhYmxlSGVhZGVyLnByb3BUeXBlcyA9IHtcbiAgcm93U2VsZWN0VHlwZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgb25Tb3J0OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgb25TZWxlY3RBbGxSb3c6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICBzb3J0TmFtZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgc29ydE9yZGVyOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5UYWJsZUhlYWRlci5kZWZhdWx0UHJvcHMgPSB7XG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFV0aWwgZnJvbSAnLi91dGlsJztcblxuY2xhc3MgVGFibGVIZWFkZXJDb2x1bW4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgb3JkZXI6IENvbnN0LlNPUlRfREVTQ1xuXG4gIGhhbmRsZUNvbHVtbkNsaWNrKGUpe1xuICAgIGlmKCF0aGlzLnByb3BzLmRhdGFTb3J0KXJldHVybjtcbiAgICB2YXIgZG9tID0gdGhpcy5yZWZzLmlubmVyRGl2LmdldERPTU5vZGUoKTtcbiAgICB0aGlzLm9yZGVyID0gdGhpcy5vcmRlciA9PSBDb25zdC5TT1JUX0RFU0M/Q29uc3QuU09SVF9BU0M6Q29uc3QuU09SVF9ERVNDO1xuICAgIHRoaXMucHJvcHMuY2xlYXJTb3J0Q2FyZXQodGhpcy5vcmRlciwgdGhpcy5wcm9wcy5kYXRhRmllbGQpO1xuICAgIGRvbS5hcHBlbmRDaGlsZChVdGlsLnJlbmRlclNvcnRDYXJldCh0aGlzLm9yZGVyKSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpe1xuICAgIHRoaXMucmVmcy5pbm5lckRpdi5nZXRET01Ob2RlKCkuc2V0QXR0cmlidXRlKFwiZGF0YS1maWVsZFwiLCB0aGlzLnByb3BzLmRhdGFGaWVsZCk7XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgdGhTdHlsZSA9IHtcbiAgICAgIHRleHRBbGlnbjogdGhpcy5wcm9wcy5kYXRhQWxpZ24sXG4gICAgICBkaXNwbGF5OiB0aGlzLnByb3BzLmhpZGRlbj9cIm5vbmVcIjpudWxsLFxuICAgICAgd2lkdGg6IHRoaXMucHJvcHMud2lkdGhcbiAgICB9O1xuXG4gICAgdmFyIGNsYXNzZXMgPSB0aGlzLnByb3BzLmNsYXNzTmFtZStcIiBcIisodGhpcy5wcm9wcy5kYXRhU29ydD9cInNvcnQtY29sdW1uXCI6XCJcIik7XG4gICAgcmV0dXJuKFxuICAgICAgPHRoIGNsYXNzTmFtZT17Y2xhc3Nlc30gc3R5bGU9e3RoU3R5bGV9PlxuICAgICAgICA8ZGl2IHJlZj1cImlubmVyRGl2XCIgY2xhc3NOYW1lPVwidGgtaW5uZXIgdGFibGUtaGVhZGVyLWNvbHVtblwiXG4gICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDb2x1bW5DbGljay5iaW5kKHRoaXMpfT57dGhpcy5wcm9wcy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgIDwvdGg+XG4gICAgKVxuICB9XG59XG5UYWJsZUhlYWRlckNvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGRhdGFGaWVsZDogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YUFsaWduOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBkYXRhU29ydDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNsZWFyU29ydENhcmV0OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgZGF0YUZvcm1hdDogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIGlzS2V5OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgZWRpdGFibGU6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBoaWRkZW46IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6UmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgd2lkdGg6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIHNvcnRGdW5jOiBSZWFjdC5Qcm9wVHlwZXMuZnVuY1xufTtcblxuVGFibGVIZWFkZXJDb2x1bW4uZGVmYXVsdFByb3BzID0ge1xuICBkYXRhQWxpZ246IFwibGVmdFwiLFxuICBkYXRhU29ydDogZmFsc2UsXG4gIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCxcbiAgaXNLZXk6IGZhbHNlLFxuICBlZGl0YWJsZTogdHJ1ZSxcbiAgY2xlYXJTb3J0Q2FyZXQ6IHVuZGVmaW5lZCxcbiAgaGlkZGVuOiBmYWxzZSxcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICB3aWR0aDogbnVsbCxcbiAgc29ydEZ1bmM6IHVuZGVmaW5lZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXJDb2x1bW47XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuXG5jbGFzcyBUYWJsZVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICByb3dDbGljayhlKXtcbiAgICBpZihlLnRhcmdldC50YWdOYW1lICE9PSBcIklOUFVUXCIpXG4gICAgICB0aGlzLnByb3BzLm9uU2VsZWN0Um93KGUuY3VycmVudFRhcmdldC5yb3dJbmRleCwgIXRoaXMucHJvcHMuaXNTZWxlY3RlZCk7XG4gIH1cblxuICByZW5kZXIoKXtcblxuICAgIHZhciByb3dTdHlsZSA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5wcm9wcy5pc1NlbGVjdGVkP3RoaXMucHJvcHMuc2VsZWN0Um93LmJnQ29sb3I6bnVsbFxuICAgIH07XG5cbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdyAmJiAhdGhpcy5wcm9wcy5lbmFibGVDZWxsRWRpdCAmJlxuICAgICAgKHRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgfHwgdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKSl7XG4gICAgICByZXR1cm4oXG4gICAgICAgIDx0ciBzdHlsZT17cm93U3R5bGV9IG9uQ2xpY2s9e3RoaXMucm93Q2xpY2suYmluZCh0aGlzKX0+e3RoaXMucHJvcHMuY2hpbGRyZW59PC90cj5cbiAgICAgIClcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybihcbiAgICAgICAgPHRyIHN0eWxlPXtyb3dTdHlsZX0+e3RoaXMucHJvcHMuY2hpbGRyZW59PC90cj5cbiAgICAgIClcbiAgICB9XG4gIH1cbn1cblRhYmxlUm93LnByb3BUeXBlcyA9IHtcbiAgaXNTZWxlY3RlZDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZUNlbGxFZGl0OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgb25TZWxlY3RSb3c6IFJlYWN0LlByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3c7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5jbGFzcyBQYWdlQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHR9XG5cbiAgcGFnZUJ0bkNsaWNrKGUpe1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnByb3BzLmNoYW5nZVBhZ2UoZS5jdXJyZW50VGFyZ2V0LnRleHQpO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIGNsYXNzZXMgPSB0aGlzLnByb3BzLmFjdGl2ZT9jbGFzc1NldChcImFjdGl2ZVwiKTpudWxsO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzZXN9PjxhIGhyZWY9XCIjXCIgb25DbGljaz17dGhpcy5wYWdlQnRuQ2xpY2suYmluZCh0aGlzKX0+e3RoaXMucHJvcHMuY2hpbGRyZW59PC9hPjwvbGk+XG4gICAgKVxuICB9XG59XG5QYWdlQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2hhbmdlUGFnZTogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIGFjdGl2ZTogUmVhY3QuUHJvcFR5cGVzLmJvb2xcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2VCdXR0b247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBhZ2VCdXR0b24gZnJvbSAnLi9QYWdlQnV0dG9uLmpzJ1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY2xhc3MgUGFnaW5hdGlvbkxpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zaXplUGVyTGlzdCA9IENvbnN0LlNJWkVfUEVSX0xJU1Q7XG5cdFx0dGhpcy5zdGF0ZSA9IHtcbiAgICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgICAgc2l6ZVBlclBhZ2U6IHRoaXMucHJvcHMuc2l6ZVBlclBhZ2VcbiAgICB9O1xuXHR9XG5cbiAgY2hhbmdlUGFnZShwYWdlKXtcbiAgICBpZihwYWdlID09IENvbnN0LlBSRV9QQUdFKXtcbiAgICAgIHBhZ2UgPSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlLTEgPCAxPzE6dGhpcy5zdGF0ZS5jdXJyZW50UGFnZS0xO1xuICAgIH1lbHNlIGlmKHBhZ2UgPT0gQ29uc3QuTkVYVF9QQUdFKXtcbiAgICAgIHBhZ2UgPSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlKzEgPiB0aGlzLnRvdGFsUGFnZXM/dGhpcy50b3RhbFBhZ2VzOnRoaXMuc3RhdGUuY3VycmVudFBhZ2UrMTtcbiAgICB9ZWxzZSBpZihwYWdlID09IENvbnN0LkxBU1RfUEFHRSl7XG4gICAgICBwYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xuICAgIH1lbHNlIGlmKHBhZ2UgPT0gQ29uc3QuRklSU1RfUEFHRSl7XG4gICAgICBwYWdlID0gMTtcbiAgICB9ZWxzZXtcbiAgICAgIHBhZ2UgPSBwYXJzZUludChwYWdlKTtcbiAgICB9XG5cbiAgICBpZihwYWdlICE9IHRoaXMuc3RhdGUuY3VycmVudFBhZ2Upe1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFBhZ2U6IHBhZ2V9KTtcbiAgICAgIHRoaXMucHJvcHMuY2hhbmdlUGFnZShwYWdlLCB0aGlzLnN0YXRlLnNpemVQZXJQYWdlKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTaXplUGVyUGFnZShlKXtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdmFyIHNlbGVjdFNpemUgPSBwYXJzZUludChlLmN1cnJlbnRUYXJnZXQudGV4dCk7XG4gICAgaWYoc2VsZWN0U2l6ZSAhPSB0aGlzLnN0YXRlLnNpemVQZXJQYWdlKXtcbiAgICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnByb3BzLmRhdGFTaXplL3NlbGVjdFNpemUpO1xuICAgICAgaWYodGhpcy5zdGF0ZS5jdXJyZW50UGFnZSA+IHRoaXMudG90YWxQYWdlcylcbiAgICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50UGFnZSA9IHRoaXMudG90YWxQYWdlcztcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzaXplUGVyUGFnZTogc2VsZWN0U2l6ZSxcbiAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuc3RhdGUuY3VycmVudFBhZ2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UsIHNlbGVjdFNpemUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnByb3BzLmRhdGFTaXplL3RoaXMuc3RhdGUuc2l6ZVBlclBhZ2UpO1xuICAgIHZhciBwYWdlQnRucyA9IHRoaXMubWFrZVBhZ2UoKTtcbiAgICB2YXIgcGFnZUxpc3RTdHlsZSA9IHtcbiAgICAgIG1hcmdpblRvcDogXCIwcHhcIiAgLy9vdmVycmlkZSB0aGUgbWFyZ2luLXRvcCBkZWZpbmVkIGluIC5wYWdpbmF0aW9uIGNsYXNzIGluIGJvb3RzdHJhcC5cbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJwYWdlRHJvcERvd25cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1leHBhbmRlZD1cInRydWVcIj5cbiAgICAgICAgICAgICAge3RoaXMuc3RhdGUuc2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwiZHJvcGRvd24tbWVudVwiIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwicGFnZURyb3BEb3duXCI+XG4gICAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCI+PGEgcm9sZT1cIm1lbnVpdGVtXCIgdGFiSW5kZXg9XCItMVwiIGhyZWY9XCIjXCIgb25DbGljaz17dGhpcy5jaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpfT4xMDwvYT48L2xpPlxuICAgICAgICAgICAgICA8bGkgcm9sZT1cInByZXNlbnRhdGlvblwiPjxhIHJvbGU9XCJtZW51aXRlbVwiIHRhYkluZGV4PVwiLTFcIiBocmVmPVwiI1wiIG9uQ2xpY2s9e3RoaXMuY2hhbmdlU2l6ZVBlclBhZ2UuYmluZCh0aGlzKX0+MjU8L2E+PC9saT5cbiAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIj48YSByb2xlPVwibWVudWl0ZW1cIiB0YWJJbmRleD1cIi0xXCIgaHJlZj1cIiNcIiBvbkNsaWNrPXt0aGlzLmNoYW5nZVNpemVQZXJQYWdlLmJpbmQodGhpcyl9PjMwPC9hPjwvbGk+XG4gICAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCI+PGEgcm9sZT1cIm1lbnVpdGVtXCIgdGFiSW5kZXg9XCItMVwiIGhyZWY9XCIjXCIgb25DbGljaz17dGhpcy5jaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpfT41MDwvYT48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwicGFnaW5hdGlvblwiIHN0eWxlPXtwYWdlTGlzdFN0eWxlfT5cbiAgICAgICAgICAgIHtwYWdlQnRuc31cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIG1ha2VQYWdlKCl7XG4gICAgdmFyIHBhZ2VzID0gdGhpcy5nZXRQYWdlcygpO1xuICAgIHJldHVybiBwYWdlcy5tYXAoZnVuY3Rpb24ocGFnZSl7XG4gICAgICB2YXIgaXNBY3RpdmUgPSBwYWdlID09IHRoaXMuc3RhdGUuY3VycmVudFBhZ2U/dHJ1ZTpmYWxzZTtcbiAgICAgIHJldHVybihcbiAgICAgICAgPFBhZ2VCdXR0b24gY2hhbmdlUGFnZT17dGhpcy5jaGFuZ2VQYWdlLmJpbmQodGhpcyl9IGFjdGl2ZT17aXNBY3RpdmV9IGtleT17cGFnZX0+e3BhZ2V9PC9QYWdlQnV0dG9uPlxuICAgICAgKVxuICAgIH0sIHRoaXMpO1xuICB9XG5cbiAgZ2V0UGFnZXMoKXtcbiAgICB2YXIgc3RhcnRQYWdlID0gMSwgZW5kUGFnZSA9IHRoaXMudG90YWxQYWdlcztcblxuICAgIHN0YXJ0UGFnZSA9IE1hdGgubWF4KHRoaXMuc3RhdGUuY3VycmVudFBhZ2UgLSBNYXRoLmZsb29yKHRoaXMuc2l6ZVBlckxpc3QvMiksIDEpO1xuICAgIGVuZFBhZ2UgICA9IHN0YXJ0UGFnZSArIHRoaXMuc2l6ZVBlckxpc3QgLSAxO1xuXG4gICAgaWYgKGVuZFBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgIGVuZFBhZ2UgICA9IHRoaXMudG90YWxQYWdlcztcbiAgICAgIHN0YXJ0UGFnZSA9IGVuZFBhZ2UgLSB0aGlzLnNpemVQZXJMaXN0ICsgMTtcbiAgICB9XG4gICAgdmFyIHBhZ2VzID0gW0NvbnN0LkZJUlNUX1BBR0UsIENvbnN0LlBSRV9QQUdFXTtcbiAgICBmb3IodmFyIGk9c3RhcnRQYWdlO2k8PWVuZFBhZ2U7aSsrKXtcbiAgICAgIGlmKGk+MClwYWdlcy5wdXNoKGkpO1xuICAgIH1cbiAgICBwYWdlcy5wdXNoKENvbnN0Lk5FWFRfUEFHRSk7XG4gICAgcGFnZXMucHVzaChDb25zdC5MQVNUX1BBR0UpO1xuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG4gIGdldEN1cnJlbnRQYWdlKCl7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuY3VycmVudFBhZ2U7XG4gIH1cblxuICBnZXRTaXplUGVyUGFnZSgpe1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnNpemVQZXJQYWdlO1xuICB9XG59XG5QYWdpbmF0aW9uTGlzdC5wcm9wVHlwZXMgPSB7XG4gIHNpemVQZXJQYWdlOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICBkYXRhU2l6ZTogUmVhY3QuUHJvcFR5cGVzLm51bWJlcixcbiAgY2hhbmdlUGFnZTogUmVhY3QuUHJvcFR5cGVzLmZ1bmNcbn07XG5cblBhZ2luYXRpb25MaXN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgc2l6ZVBlclBhZ2U6IENvbnN0LlNJWkVfUEVSX1BBR0Vcbn1cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRpb25MaXN0O1xuIiwiaW1wb3J0IENvbnN0IGZyb20gXCIuLi9Db25zdFwiO1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxuZnVuY3Rpb24gX3NvcnQoYXJyLCBzb3J0RmllbGQsIG9yZGVyLCBzb3J0RnVuYyl7XG4gIG9yZGVyID0gb3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgYXJyLnNvcnQoKGEsYikgPT4ge1xuICAgIGlmKHNvcnRGdW5jKXtcbiAgICAgIHJldHVybiBzb3J0RnVuYyhhLCBiLCBvcmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKG9yZGVyID09IENvbnN0LlNPUlRfREVTQyl7XG4gICAgICAgIHJldHVybiBhW3NvcnRGaWVsZF0gPiBiW3NvcnRGaWVsZF0/LTE6ICgoYVtzb3J0RmllbGRdIDwgYltzb3J0RmllbGRdKSA/IDEgOiAwKTtcbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4gYVtzb3J0RmllbGRdIDwgYltzb3J0RmllbGRdPy0xOiAoKGFbc29ydEZpZWxkXSA+IGJbc29ydEZpZWxkXSkgPyAxIDogMCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhU2V0IGV4dGVuZHMgRXZlbnRFbWl0dGVye1xuICBjb25zdHJ1Y3RvcihkYXRhKXtcbiAgICBzdXBlcihkYXRhKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgc2V0RGF0YShkYXRhKSB7XG4gICAgdGhpcy5lbWl0KCdjaGFuZ2UnLCBkYXRhKTtcbiAgfVxuXG4gIGNsZWFyKCl7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgfVxuXG4gIGdldERhdGEoKXtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFTdG9yZXtcblxuICBjb25zdHJ1Y3RvcihkYXRhKXtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuY3VzdG9tU29ydEZ1bmNNYXAgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICB0aGlzLmlzT25GaWx0ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmZpbHRlck9iaiA9IG51bGw7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICB0aGlzLnNvcnRPYmogPSBudWxsO1xuICAgIHRoaXMucGFnZU9iaiA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgfVxuXG4gIHNldFByb3BzKGlzUGFnaW5hdGlvbiwga2V5RmllbGQsIGN1c3RvbVNvcnRGdW5jTWFwKXtcbiAgICB0aGlzLmtleUZpZWxkID0ga2V5RmllbGQ7XG4gICAgdGhpcy5lbmFibGVQYWdpbmF0aW9uID0gaXNQYWdpbmF0aW9uO1xuICAgIHRoaXMuY3VzdG9tU29ydEZ1bmNNYXAgPSBjdXN0b21Tb3J0RnVuY01hcDtcbiAgfVxuXG4gIHNldERhdGEoZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgaWYodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICBpZihudWxsICE9PSB0aGlzLmZpbHRlck9iaikgdGhpcy5maWx0ZXIodGhpcy5maWx0ZXJPYmopO1xuICAgICAgaWYobnVsbCAhPT0gdGhpcy5zZWFyY2hUZXh0KSB0aGlzLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIH1cbiAgICBpZih0aGlzLnNvcnRPYmope1xuICAgICAgdGhpcy5zb3J0KHRoaXMuc29ydE9iai5vcmRlciwgdGhpcy5zb3J0T2JqLnNvcnRGaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRSb3dLZXkoc2VsZWN0ZWRSb3dLZXlzKXtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWRSb3dLZXlzO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCl7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXRDdXJyZW50RGlzcGxheURhdGEoKXtcbiAgICBpZih0aGlzLmlzT25GaWx0ZXIpIHJldHVybiB0aGlzLmZpbHRlcmVkRGF0YTtcbiAgICBlbHNlIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBzb3J0KG9yZGVyLCBzb3J0RmllbGQpe1xuICAgIHRoaXMuc29ydE9iaiA9IHtcbiAgICAgIG9yZGVyOiBvcmRlcixcbiAgICAgIHNvcnRGaWVsZDogc29ydEZpZWxkXG4gICAgfTtcblxuICAgIGxldCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGxldCBzb3J0RnVuYyA9IHRoaXMuY3VzdG9tU29ydEZ1bmNNYXBbc29ydEZpZWxkXTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEgPSBfc29ydChjdXJyZW50RGlzcGxheURhdGEsIHNvcnRGaWVsZCwgb3JkZXIsIHNvcnRGdW5jKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGFnZShwYWdlLCBzaXplUGVyUGFnZSl7XG4gICAgdGhpcy5wYWdlT2JqLmVuZCA9IHBhZ2Uqc2l6ZVBlclBhZ2UtMTtcbiAgICB0aGlzLnBhZ2VPYmouc3RhcnQgPSB0aGlzLnBhZ2VPYmouZW5kIC0gKHNpemVQZXJQYWdlIC0gMSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBlZGl0KG5ld1ZhbCwgcm93SW5kZXgsIGZpZWxkTmFtZSl7XG4gICAgbGV0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgbGV0IHJvd0tleUNhY2hlO1xuICAgIGlmKCF0aGlzLmVuYWJsZVBhZ2luYXRpb24pe1xuICAgICAgY3VycmVudERpc3BsYXlEYXRhW3Jvd0luZGV4XVtmaWVsZE5hbWVdID0gbmV3VmFsO1xuICAgICAgcm93S2V5Q2FjaGUgPSBjdXJyZW50RGlzcGxheURhdGFbcm93SW5kZXhdW3RoaXMua2V5RmllbGRdO1xuICAgIH1lbHNle1xuICAgICAgY3VycmVudERpc3BsYXlEYXRhW3RoaXMucGFnZU9iai5zdGFydCtyb3dJbmRleF1bZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgIHJvd0tleUNhY2hlID0gY3VycmVudERpc3BsYXlEYXRhW3RoaXMucGFnZU9iai5zdGFydCtyb3dJbmRleF1bdGhpcy5rZXlGaWVsZF07XG4gICAgfVxuICAgIGlmKHRoaXMuaXNPbkZpbHRlcil7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpe1xuICAgICAgICBpZihyb3dbdGhpcy5rZXlGaWVsZF0gPT09IHJvd0tleUNhY2hlKXtcbiAgICAgICAgICByb3dbdGhpcy5rZXlGaWVsZF1bZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkKG5ld09iail7XG4gICAgaWYobmV3T2JqW3RoaXMua2V5RmllbGRdLnRyaW0oKSA9PT0gXCJcIil7XG4gICAgICB0aHJvdyB0aGlzLmtleUZpZWxkICsgXCIgY2FuJ3QgYmUgZW1wdHkgdmFsdWUuXCI7XG4gICAgfVxuICAgIGxldCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGN1cnJlbnREaXNwbGF5RGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7XG4gICAgICBpZihyb3dbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gbmV3T2JqW3RoaXMua2V5RmllbGRdKXtcbiAgICAgICAgdGhyb3cgdGhpcy5rZXlGaWVsZCArIFwiIFwiICsgbmV3T2JqW3RoaXMua2V5RmllbGRdICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcblxuICAgIGN1cnJlbnREaXNwbGF5RGF0YS5wdXNoKG5ld09iaik7XG4gICAgaWYodGhpcy5pc09uRmlsdGVyKXtcbiAgICAgIHRoaXMuZGF0YS5wdXNoKG5ld09iaik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKHJvd0tleSl7XG4gICAgbGV0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgbGV0IHJlc3VsdCA9IGN1cnJlbnREaXNwbGF5RGF0YS5maWx0ZXIoZnVuY3Rpb24ocm93KXtcbiAgICAgIHJldHVybiByb3dLZXkuaW5kZXhPZihyb3dbdGhpcy5rZXlGaWVsZF0pID09IC0xO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgaWYodGhpcy5pc09uRmlsdGVyKXtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24ocm93KXtcbiAgICAgICAgcmV0dXJuIHJvd0tleS5pbmRleE9mKHJvd1t0aGlzLmtleUZpZWxkXSkgPT0gLTE7XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gcmVzdWx0O1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5kYXRhID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlcihmaWx0ZXJPYmope1xuICAgIGlmKE9iamVjdC5rZXlzKGZpbHRlck9iaikubGVuZ3RoID09IDApe1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlck9iaiA9IG51bGw7XG4gICAgfSBlbHNle1xuICAgICAgdGhpcy5maWx0ZXJPYmogPSBmaWx0ZXJPYmo7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24ocm93KXtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgZm9yKHZhciBrZXkgaW4gZmlsdGVyT2JqKXtcbiAgICAgICAgICBpZihyb3dba2V5XS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJPYmpba2V5XS50b0xvd2VyQ2FzZSgpKSA9PSAtMSl7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZWFyY2goc2VhcmNoVGV4dCl7XG4gICAgaWYoc2VhcmNoVGV4dC50cmltKCkgPT09IFwiXCIpe1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbihyb3cpe1xuICAgICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgZm9yKHZhciBrZXkgaW4gcm93KXtcbiAgICAgICAgICBpZihyb3dba2V5XSAmJlxuICAgICAgICAgICAgIHJvd1trZXldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgIT09IC0xKXtcbiAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0KCl7XG4gICAgbGV0IF9kYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcblxuICAgIGlmKF9kYXRhLmxlbmd0aCA9PSAwKSByZXR1cm4gX2RhdGE7XG5cbiAgICBpZighdGhpcy5lbmFibGVQYWdpbmF0aW9uKXtcbiAgICAgIHJldHVybiBfZGF0YTtcbiAgICB9ZWxzZXtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvcih2YXIgaT10aGlzLnBhZ2VPYmouc3RhcnQ7aTw9dGhpcy5wYWdlT2JqLmVuZDtpKyspe1xuICAgICAgICByZXN1bHQucHVzaChfZGF0YVtpXSk7XG4gICAgICAgIGlmKGkrMSA9PSBfZGF0YS5sZW5ndGgpYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGdldEtleUZpZWxkKCl7XG4gICAgcmV0dXJuIHRoaXMua2V5RmllbGQ7XG4gIH1cblxuICBnZXREYXRhTnVtKCl7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0QWxsUm93a2V5KCl7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAoZnVuY3Rpb24ocm93KXtcbiAgICAgIHJldHVybiByb3dbdGhpcy5rZXlGaWVsZF07XG4gICAgfSwgdGhpcyk7XG4gIH1cblxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBUb29sQmFyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0luc2VydFJvd1RyaWdnZXI6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgaGFuZGxlU2F2ZUJ0bkNsaWNrKGUpe1xuICAgIHZhciBuZXdPYmogPSB7fTtcbiAgICB0aGlzLnByb3BzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbihjb2x1bW4sIGkpe1xuICAgICAgbmV3T2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLnJlZnNbY29sdW1uLmZpZWxkK2ldLmdldERPTU5vZGUoKS52YWx1ZTtcbiAgICB9LCB0aGlzKTtcbiAgICB2YXIgbXNnID0gdGhpcy5wcm9wcy5vbkFkZFJvdyhuZXdPYmopO1xuICAgIGlmKG1zZykge1xuICAgICAgdGhpcy5yZWZzLndhcm5pbmcuZ2V0RE9NTm9kZSgpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLnJlZnMud2FybmluZ1RleHQuZ2V0RE9NTm9kZSgpLnRleHRDb250ZW50ID0gbXNnO1xuICAgIH0gZWxzZXtcbiAgICAgIHRoaXMucmVmcy53YXJuaW5nLmdldERPTU5vZGUoKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRHJvcFJvd0J0bkNsaWNrKGUpe1xuICAgIHRoaXMucHJvcHMub25Ecm9wUm93KCk7XG4gIH1cblxuICBoYW5kbGVDbG9zZUJ0bihlKXtcbiAgICB0aGlzLnJlZnMud2FybmluZy5nZXRET01Ob2RlKCkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB9XG5cbiAgaGFuZGxlS2V5VXAoZSl7XG4gICAgdGhpcy5wcm9wcy5vblNlYXJjaChlLmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIG1vZGFsQ2xhc3NOYW1lID0gXCJicy10YWJsZS1tb2RhbC1zbVwiK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHZhciBpbnNlcnRCdG4gPSB0aGlzLnByb3BzLmVuYWJsZUluc2VydD9cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9eycuJyttb2RhbENsYXNzTmFtZX0+XG4gICAgICAgICAgICBOZXc8L2J1dHRvbj46bnVsbDtcblxuICAgIHZhciBkZWxldGVCdG4gPSB0aGlzLnByb3BzLmVuYWJsZURlbGV0ZT9cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJEcm9wIHNlbGVjdGVkIHJvd1wiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZURyb3BSb3dCdG5DbGljay5iaW5kKHRoaXMpfT5cbiAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgIDwvYnV0dG9uPjpudWxsO1xuICAgIHZhciBzZWFyY2hUZXh0SW5wdXQgPSB0aGlzLnByb3BzLmVuYWJsZVNlYXJjaD9cbiAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5zZWFyY2hQbGFjZWhvbGRlcj90aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyOidTZWFyY2gnfSBvbktleVVwPXt0aGlzLmhhbmRsZUtleVVwLmJpbmQodGhpcyl9Lz46bnVsbDtcbiAgICB2YXIgbW9kYWwgPSB0aGlzLnByb3BzLmVuYWJsZUluc2VydD90aGlzLnJlbmRlckluc2VydFJvd01vZGFsKG1vZGFsQ2xhc3NOYW1lKTpudWxsO1xuICAgIHZhciB3YXJuaW5nU3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiBcIm5vbmVcIixcbiAgICAgIG1hcmdpbkJvdHRvbTogMFxuICAgIH07XG4gICAgcmV0dXJuKFxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIi4uLlwiPlxuICAgICAgICAgIHtpbnNlcnRCdG59e2RlbGV0ZUJ0bn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzZWFyY2hUZXh0SW5wdXR9XG4gICAgICAgIDxkaXYgcmVmPVwid2FybmluZ1wiIGNsYXNzTmFtZT1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiBzdHlsZT17d2FybmluZ1N0eWxlfT5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJjbG9zZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xvc2VCdG4uYmluZCh0aGlzKX0+PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgICA8c3Ryb25nPldhcm5pbmchIDwvc3Ryb25nPjxmb250IHJlZj1cIndhcm5pbmdUZXh0XCI+PC9mb250PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge21vZGFsfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmVuZGVySW5zZXJ0Um93TW9kYWwobW9kYWxDbGFzc05hbWUpe1xuXG4gICAgdmFyIGlucHV0RmllbGQgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbiwgaSl7XG4gICAgICByZXR1cm4oXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiIGtleT17Y29sdW1uLmZpZWxkfT5cbiAgICAgICAgICA8bGFiZWw+e2NvbHVtbi5uYW1lfTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHJlZj17Y29sdW1uLmZpZWxkK2l9IHR5cGU9XCJ0ZXh0XCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9e2NvbHVtbi5uYW1lfT48L2lucHV0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gICAgdmFyIG1vZGFsQ2xhc3MgPSBjbGFzc1NldChcIm1vZGFsXCIsIFwiZmFkZVwiLCBtb2RhbENsYXNzTmFtZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXttb2RhbENsYXNzfSB0YWJJbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWRpYWxvZyBtb2RhbC1zbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+PC9idXR0b24+XG4gICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJtb2RhbC10aXRsZVwiPk5ldyBSZWNvcmQ8L2g0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAge2lucHV0RmllbGR9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZVNhdmVCdG5DbGljay5iaW5kKHRoaXMpfT5TYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbn1cblRvb2xCYXIucHJvcFR5cGVzID0ge1xuICBvbkFkZFJvdzogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRHJvcFJvdzogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIGVuYWJsZUluc2VydDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZURlbGV0ZTogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZVNlYXJjaDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNvbHVtbnM6IFJlYWN0LlByb3BUeXBlcy5hcnJheSxcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmdcbn07XG5cblRvb2xCYXIuZGVmYXVsdFByb3BzID0ge1xuICBlbmFibGVJbnNlcnQ6IGZhbHNlLFxuICBlbmFibGVEZWxldGU6IGZhbHNlLFxuICBlbmFibGVTZWFyY2g6IGZhbHNlXG59XG5leHBvcnQgZGVmYXVsdCBUb29sQmFyO1xuIiwiaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuZXhwb3J0IGRlZmF1bHQge1xuXG4gIHJlbmRlclNvcnRDYXJldChvcmRlcikge1xuICAgIHZhciB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgd3JhcC5jbGFzc05hbWUgPSBcIm9yZGVyXCI7XG4gICAgaWYob3JkZXIgPT0gQ29uc3QuU09SVF9BU0MpIHdyYXAuY2xhc3NOYW1lICs9IFwiIGRyb3B1cFwiO1xuICAgIHZhciBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIGlubmVyLmNsYXNzTmFtZSA9IFwiY2FyZXRcIjtcbiAgICBpbm5lci5zdHlsZS5tYXJnaW4gPSBcIjEwcHggNXB4XCI7XG4gICAgd3JhcC5hcHBlbmRDaGlsZChpbm5lcik7XG4gICAgcmV0dXJuIHdyYXA7XG4gIH1cblxufTtcbiIsImltcG9ydCBCb290c3RyYXBUYWJsZSBmcm9tICcuL0Jvb3RzdHJhcFRhYmxlJztcbmltcG9ydCBUYWJsZUhlYWRlckNvbHVtbiBmcm9tICcuL1RhYmxlSGVhZGVyQ29sdW1uJztcbmltcG9ydCB7VGFibGVEYXRhU2V0fSBmcm9tICcuL3N0b3JlL1RhYmxlRGF0YVN0b3JlJztcblxuaWYod2luZG93KXtcbiAgd2luZG93LkJvb3RzdHJhcFRhYmxlID0gQm9vdHN0cmFwVGFibGU7XG4gIHdpbmRvdy5UYWJsZUhlYWRlckNvbHVtbiA9IFRhYmxlSGVhZGVyQ29sdW1uO1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICBCb290c3RyYXBUYWJsZSxcbiAgVGFibGVIZWFkZXJDb2x1bW4sXG4gIFRhYmxlRGF0YVNldFxufTtcbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvZXhhbXBsZS9qcy9kZW1vLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0F1dG9Gb2N1c01peGluLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9CZWZvcmVJbnB1dEV2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9DU1NQcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvQ1NTUHJvcGVydHlPcGVyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9DYWxsYmFja1F1ZXVlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9DaGFuZ2VFdmVudFBsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvQ2xpZW50UmVhY3RSb290SW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0RPTUNoaWxkcmVuT3BlcmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRE9NUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0RPTVByb3BlcnR5T3BlcmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRGFuZ2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9EZWZhdWx0RXZlbnRQbHVnaW5PcmRlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRW50ZXJMZWF2ZUV2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9FdmVudENvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXZlbnRMaXN0ZW5lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXZlbnRQbHVnaW5IdWIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0V2ZW50UGx1Z2luUmVnaXN0cnkuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0V2ZW50UGx1Z2luVXRpbHMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0V2ZW50UHJvcGFnYXRvcnMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9GYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0hUTUxET01Qcm9wZXJ0eUNvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvTGlua2VkVmFsdWVVdGlscy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvTG9jYWxFdmVudFRyYXBNaXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvT2JqZWN0LmFzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUG9vbGVkQ2xhc3MuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENoaWxkUmVjb25jaWxlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDaGlsZHJlbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDb21wb25lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDb250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEN1cnJlbnRPd25lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET00uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NQnV0dG9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTUNvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01Gb3JtLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTUlET3BlcmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01JZnJhbWUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NSW1nLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTUlucHV0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTU9wdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01TZWxlY3QuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NU2VsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTVRleHRDb21wb25lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NVGV4dGFyZWEuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RGVmYXVsdEluamVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3REZWZhdWx0UGVyZi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RWxlbWVudFZhbGlkYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbXB0eUNvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFcnJvclV0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEV2ZW50RW1pdHRlck1peGluLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEV2ZW50TGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RnJhZ21lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0SW5qZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdElucHV0U2VsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEluc3RhbmNlSGFuZGxlcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RJbnN0YW5jZU1hcC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RMaWZlQ3ljbGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0TWFya3VwQ2hlY2tzdW0uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0TW91bnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0TXVsdGlDaGlsZC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0TmF0aXZlQ29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE93bmVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFBlcmYuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFByb3BUeXBlTG9jYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFByb3BUeXBlcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RQdXRMaXN0ZW5lclF1ZXVlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFJlY29uY2lsZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0UmVmLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFJvb3RJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RTZXJ2ZXJSZW5kZXJpbmcuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0VXBkYXRlUXVldWUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0VXBkYXRlcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU1ZHRE9NUHJvcGVydHlDb25maWcuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1NlbGVjdEV2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TZXJ2ZXJSZWFjdFJvb3RJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU2ltcGxlRXZlbnRQbHVnaW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1N5bnRoZXRpY0NsaXBib2FyZEV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNEcmFnRXZlbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1N5bnRoZXRpY0V2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNGb2N1c0V2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNJbnB1dEV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNLZXlib2FyZEV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNNb3VzZUV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNUb3VjaEV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNVSUV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNXaGVlbEV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9UcmFuc2FjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvVmlld3BvcnRNZXRyaWNzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9hY2N1bXVsYXRlSW50by5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvYWRsZXIzMi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvY2FtZWxpemUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2NhbWVsaXplU3R5bGVOYW1lLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jb250YWluc05vZGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2NyZWF0ZUFycmF5RnJvbU1peGVkLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jcmVhdGVGdWxsUGFnZUNvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvY3JlYXRlTm9kZXNGcm9tTWFya3VwLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9kYW5nZXJvdXNTdHlsZVZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9lbXB0eU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9maW5kRE9NTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZmxhdHRlbkNoaWxkcmVuLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9mb2N1c05vZGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2ZvckVhY2hBY2N1bXVsYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0QWN0aXZlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRDaGFyQ29kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRLZXkuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldEV2ZW50TW9kaWZpZXJTdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRUYXJnZXQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldEl0ZXJhdG9yRm4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldE1hcmt1cFdyYXAuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0VGV4dENvbnRlbnRBY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2h5cGhlbmF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvaHlwaGVuYXRlU3R5bGVOYW1lLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pbnZhcmlhbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2lzRXZlbnRTdXBwb3J0ZWQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2lzTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvaXNUZXh0SW5wdXRFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pc1RleHROb2RlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9rZXlNaXJyb3IuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2tleU9mLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9tYXBPYmplY3QuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL21lbW9pemVTdHJpbmdPbmx5LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9vbmx5Q2hpbGQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3BlcmZvcm1hbmNlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9wZXJmb3JtYW5jZU5vdy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3NldElubmVySFRNTC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvc2V0VGV4dENvbnRlbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3NoYWxsb3dFcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3RvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3RyYXZlcnNlQWxsQ2hpbGRyZW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3dhcm5pbmcuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvcmVhY3QuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL0Jvb3RzdHJhcFRhYmxlLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9Db25zdC5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvU2VsZWN0Um93SGVhZGVyQ29sdW1uLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZUJvZHkuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL1RhYmxlQ29sdW1uLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZUVkaXRDb2x1bW4uanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL1RhYmxlRmlsdGVyLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZUhlYWRlci5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvVGFibGVIZWFkZXJDb2x1bW4uanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL1RhYmxlUm93LmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9wYWdpbmF0aW9uL1BhZ2VCdXR0b24uanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL3BhZ2luYXRpb24vUGFnaW5hdGlvbkxpc3QuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL3N0b3JlL1RhYmxlRGF0YVN0b3JlLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy90b29sYmFyL1Rvb2xCYXIuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL3V0aWwuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztJQ0FPLEtBQUssMkJBQU0sT0FBTzs7bUNBQ3VCLHVCQUF1Qjs7SUFBL0QsY0FBYyx3QkFBZCxjQUFjO0lBQUUsaUJBQWlCLHdCQUFqQixpQkFBaUI7O0FBRXpDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQzs7QUFFbEIsU0FBUyxXQUFXLENBQUMsUUFBUSxFQUFFO0FBQzdCLE1BQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDOUIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyxRQUFJLEVBQUUsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFlBQVEsQ0FBQyxJQUFJLENBQUM7QUFDWixRQUFFLEVBQUUsRUFBRTtBQUNOLFVBQUksRUFBRSxZQUFZLEdBQUcsRUFBRTtBQUN2QixXQUFLLEVBQUUsR0FBRyxHQUFHLENBQUM7S0FDZixDQUFDLENBQUM7R0FDSjtDQUNGOztBQUVELFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7QUFFaEIsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBQztBQUNuQyxTQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLFNBQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFBO0NBQ3ZDOztBQUVELFNBQVMsV0FBVyxDQUFDLFVBQVUsRUFBQztBQUM5QixTQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxDQUFDO0NBQzdDOztBQUVELFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDO0FBQ2hELFNBQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFDLFFBQVEsR0FBQyxnQkFBZ0IsR0FBQyxTQUFTLEdBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkUsU0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQy9CLFNBQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbEI7O0FBRUQsU0FBUyxvQkFBb0IsR0FBRTtBQUM3QixTQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7Q0FDdkM7O0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUM7QUFDaEMsU0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2hDLFNBQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Q0FDdEI7O0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUM7QUFDNUIsU0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2hDLFNBQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbEI7O0FBRUQsSUFBSSxhQUFhLEdBQUc7QUFDbEIsTUFBSSxFQUFFLFVBQVU7QUFDaEIsZUFBYSxFQUFFLElBQUk7O0FBRW5CLFVBQVEsRUFBRSxFQUFFO0FBQ1osU0FBTyxFQUFFLG9CQUFvQjtBQUM3QixVQUFRLEVBQUUsV0FBVztBQUNyQixhQUFXLEVBQUUsV0FBVztDQUN6QixDQUFDOztBQUVGLElBQUksWUFBWSxHQUFHO0FBQ2pCLE1BQUksRUFBRSxPQUFPO0FBQ2IsWUFBVSxFQUFFLElBQUk7QUFDaEIsZUFBYSxFQUFFLGVBQWU7Q0FDL0IsQ0FBQzs7QUFFRixJQUFJLE9BQU8sR0FBRztBQUNaLFVBQVEsRUFBRSxNQUFNO0FBQ2hCLFdBQVMsRUFBRSxNQUFNO0FBQ2pCLG9CQUFrQixFQUFFLG9CQUFvQjtBQUN4QyxnQkFBYyxFQUFFLGdCQUFnQjtBQUNoQyxnQkFBYyxFQUFFLGdCQUFnQjtBQUFBLENBQ2pDLENBQUM7O0FBR0YsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBQztBQUNoQyxTQUFPLDRDQUEwQyxHQUFHLElBQUksQ0FBQztDQUMxRDs7QUFFRCxLQUFLLENBQUMsTUFBTSxDQUNWO0FBQUMsZ0JBQWM7SUFBQyxJQUFJLEVBQUUsUUFBUSxBQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksQUFBQyxFQUFDLEtBQUssRUFBRSxJQUFJLEFBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxBQUFDLEVBQUMsU0FBUyxFQUFFLGFBQWEsQUFBQyxFQUFDLFFBQVEsRUFBRSxZQUFZLEFBQUM7QUFDL0csYUFBUyxFQUFFLElBQUksQUFBQyxFQUFDLFNBQVMsRUFBRSxJQUFJLEFBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxBQUFDLEVBQUMsWUFBWSxFQUFFLElBQUksQUFBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEFBQUM7RUFDakc7QUFBQyxxQkFBaUI7TUFBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFFLElBQUksQUFBQyxFQUFDLEtBQUssRUFBRSxJQUFJLEFBQUM7O0dBQStCO0VBQ2hIO0FBQUMscUJBQWlCO01BQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUUsSUFBSSxBQUFDOztHQUFpQztFQUNwRjtBQUFDLHFCQUFpQjtNQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFFLGNBQWMsQUFBQyxFQUFDLFFBQVEsRUFBRSxLQUFLLEFBQUM7O0dBQWtDO0NBQ3RHLEVBQ2xCLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQ2hDLENBQUM7OztBQ3JGRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1WEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2g1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM2FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0lDRE8sS0FBSywyQkFBTSxPQUFPOztJQUNsQixRQUFRLDJCQUFNLFlBQVk7O0lBQzFCLEtBQUssMkJBQU0sU0FBUzs7SUFDcEIsV0FBVywyQkFBTSxlQUFlOztJQUNoQyxTQUFTLDJCQUFNLGFBQWE7O0lBQzVCLGNBQWMsMkJBQU0sNkJBQTZCOztJQUNqRCxPQUFPLDJCQUFNLG1CQUFtQjs7SUFDaEMsV0FBVywyQkFBTSxlQUFlOztJQUMvQixjQUFjLFdBQU8sd0JBQXdCLEVBQTdDLGNBQWM7O0lBRWhCLGNBQWM7QUFFUCxXQUZQLGNBQWMsQ0FFTixLQUFLLEVBQUU7OzswQkFGZixjQUFjOztBQUdsQiwrQkFISSxjQUFjLDZDQUdaLEtBQUssRUFBRTs7QUFFWCxRQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUMzQixRQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEIsUUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7O0FBRTNCLFNBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVMsTUFBTSxFQUFDO0FBQzFELFVBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUM7QUFDcEIsWUFBRyxRQUFRLElBQUksSUFBSSxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDMUYsZ0JBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztPQUNuQztBQUNELFVBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUM7QUFDdkIseUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztPQUNuRTtLQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRVQsUUFBRyxRQUFRLElBQUksSUFBSSxFQUNqQixNQUFNLDRIQUE0SCxDQUFDOztBQUVySSxRQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDO0FBQ2pDLFVBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMzRCxVQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4QixVQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUEsVUFBQyxJQUFJLEVBQUs7QUFDckMsY0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLGNBQUssUUFBUSxDQUFDO0FBQ1osY0FBSSxFQUFFLE1BQUssWUFBWSxFQUFFO1NBQzFCLENBQUMsQ0FBQTtPQUNILENBQUEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNmLE1BQUs7QUFDSixVQUFJLENBQUMsS0FBSyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbEQ7QUFDRCxRQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzs7QUFFeEUsUUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUM7QUFDdkQsVUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM3RDs7QUFFRCxRQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsVUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDekIscUJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO0tBQ2pELENBQUM7R0FDSDs7WUE1Q0csY0FBYzs7ZUFBZCxjQUFjO0FBOENsQixnQkFBWTthQUFBLHdCQUFHO0FBQ2IsWUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7QUFDdkIsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3hELE1BQUs7QUFDSixnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDM0I7QUFDRCxlQUFPLE1BQU0sQ0FBQztPQUNmOztBQUVELDZCQUF5QjthQUFBLG1DQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFDO0FBQy9CLGNBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxjQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osZ0JBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1dBQzFCLENBQUMsQ0FBQztTQUNKO0FBQ0QsWUFBRyxTQUFTLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFDOztBQUVyRCxjQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0QsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLDJCQUFlLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRO1dBQzlDLENBQUMsQ0FBQztTQUNKO09BQ0Y7O0FBRUQsc0JBQWtCO2FBQUEsOEJBQUU7QUFDbEIsWUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDM0IsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztPQUMzQzs7QUFFRCx1QkFBbUI7YUFBQSwrQkFBRTtBQUNuQixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFDO0FBQ3JCLGNBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hFLGNBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxjQUFjLEVBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7U0FDOUM7T0FDRjs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM1QyxZQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUNwQyxZQUFJLEtBQUssR0FBRztBQUNWLGdCQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1NBQzFCLENBQUM7QUFDRixZQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFDO0FBQ3JDLG1CQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25DO0FBQ0QsWUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBRSxDQUFDLEVBQUM7QUFDN0MsaUJBQU87QUFDTCxnQkFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUztBQUM1QixpQkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUztBQUM3QixnQkFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUMzQixrQkFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVTtBQUMvQixvQkFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUMvQixrQkFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUMzQixxQkFBUyxFQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUztBQUNoQyxpQkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSztBQUN6QixpQkFBSyxFQUFFLENBQUM7V0FDVCxDQUFDO1NBQ0gsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCxZQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUN6QyxZQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDbkMsWUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELGVBQ0U7O1lBQUssU0FBUyxFQUFDLG9CQUFvQjtVQUNoQyxPQUFPO1VBQ1I7O2NBQUssR0FBRyxFQUFDLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxBQUFDLEVBQUMsU0FBUyxFQUFFLFVBQVUsQUFBQztZQUNuRDtBQUFDLHlCQUFXO2dCQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEFBQUM7QUFDekMsZ0NBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEFBQUM7QUFDeEQsd0JBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEFBQUM7QUFDdEMseUJBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEFBQUM7QUFDeEMsc0JBQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUNuQyw4QkFBYyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7Y0FDN0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO2FBQ1I7WUFDZCxvQkFBQyxTQUFTLElBQUMsR0FBRyxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEFBQUMsRUFBQyxPQUFPLEVBQUUsT0FBTyxBQUFDO0FBQzVELHFCQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEFBQUM7QUFDNUIsbUJBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQUFBQztBQUN4QixzQkFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEFBQUM7QUFDbkMsdUJBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQUFBQztBQUNoQyx1QkFBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxBQUFDO0FBQ2hDLHNCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEFBQUM7QUFDOUIsNkJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQUFBQztBQUM1Qyx5QkFBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUU7WUFDaEQsV0FBVztXQUNSO1VBQ0wsVUFBVTtTQUNQLENBQ1A7T0FDRjs7QUFFRCxjQUFVO2FBQUEsb0JBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQztBQUMxQixZQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckQsWUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGNBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQyxDQUFDO09BQ0o7O0FBRUQsd0JBQW9CO2FBQUEsOEJBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQztBQUNyQyxZQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdEQsWUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGNBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQyxDQUFDO09BQ0o7O0FBRUQsc0JBQWtCO2FBQUEsNEJBQUMsQ0FBQyxFQUFDO0FBQ25CLFlBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO0FBQ3pDLFlBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUN6QixZQUFHLFVBQVUsRUFBQztBQUNaLHlCQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM3Qzs7QUFFRCxZQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzlDLFlBQUksQ0FBQyxRQUFRLENBQUM7QUFDWix5QkFBZSxFQUFFLGVBQWU7U0FDakMsQ0FBQyxDQUFDO0FBQ0gsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUM7QUFDbEMsY0FBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzlDO09BQ0Y7O0FBRUQsbUJBQWU7YUFBQSx5QkFBQyxHQUFHLEVBQUUsVUFBVSxFQUFDO0FBQzlCLFlBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNuRCxZQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsRUFBQztBQUN2RCxjQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsR0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3RELE1BQU07QUFDTCxjQUFHLFVBQVUsRUFBRTtBQUNiLHdCQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1dBQzNCLE1BQU07QUFDTCx3QkFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBUyxHQUFHLEVBQUM7QUFDOUMscUJBQU8sTUFBTSxLQUFLLEdBQUcsQ0FBQzthQUN2QixDQUFDLENBQUM7V0FDSjtTQUNGOztBQUVELFlBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0MsWUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLHlCQUFlLEVBQUUsWUFBWTtTQUM5QixDQUFDLENBQUM7O0FBRUgsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUM7QUFDL0IsY0FBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNoRDtPQUNGOztBQUVELGtCQUFjO2FBQUEsd0JBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUM7QUFDeEMsWUFBSSxTQUFTLFlBQUEsQ0FBQztBQUNkLGFBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUM3RCxjQUFHLENBQUMsSUFBSSxRQUFRLEVBQUM7QUFDZixxQkFBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ25DLG1CQUFPLEtBQUssQ0FBQztXQUNkO1NBQ0YsQ0FBQyxDQUFDOztBQUVILFlBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEUsWUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGNBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQyxDQUFDOztBQUVILFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFDO0FBQ25DLGNBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDakY7T0FDRjs7QUFFRCxnQkFBWTthQUFBLHNCQUFDLE1BQU0sRUFBQztBQUNsQixZQUFJLEdBQUcsR0FBRyxJQUFJO1lBQUUsTUFBTSxZQUFBLENBQUM7QUFDdkIsWUFBSTtBQUNGLGNBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hCLENBQUMsT0FBTSxDQUFDLEVBQUM7QUFDUixpQkFBTyxDQUFDLENBQUM7U0FDVjs7QUFFRCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFDOztBQUV2QixjQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN4RCxjQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEUsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUQsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGdCQUFJLEVBQUUsTUFBTTtXQUNiLENBQUMsQ0FBQztBQUNILGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMvQyxNQUFLO0FBQ0osZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLGNBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixnQkFBSSxFQUFFLE1BQU07V0FDYixDQUFDLENBQUM7U0FDSjs7QUFFRCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBQztBQUNuQyxjQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0M7T0FDRjs7QUFFRCxpQkFBYTthQUFBLHlCQUFFO0FBQ2IsWUFBSSxNQUFNLFlBQUEsQ0FBQztBQUNYLFlBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzs7QUFFbEQsWUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDL0IsWUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7QUFFakMsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBQztBQUN2QixjQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN4RCxjQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEUsY0FBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDeEQsY0FBRyxXQUFXLEdBQUcsWUFBWSxFQUMzQixXQUFXLEdBQUcsWUFBWSxDQUFDO0FBQzdCLGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pELGNBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixnQkFBSSxFQUFFLE1BQU07QUFDWiwyQkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUU7V0FDakQsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzlDLE1BQUk7QUFDSCxnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGdCQUFJLEVBQUUsTUFBTTtBQUNaLDJCQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtXQUNqRCxDQUFDLENBQUM7U0FDSjtBQUNELFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFDO0FBQ25DLGNBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNoRDtPQUNGOztBQUVELG9CQUFnQjthQUFBLDBCQUFDLFNBQVMsRUFBQztBQUN6QixZQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QixZQUFJLE1BQU0sWUFBQSxDQUFDO0FBQ1gsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBQztBQUN2QixjQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN4RCxnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEMsTUFBSTtBQUNILGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMzQjtBQUNELFlBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixjQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztPQUNKOztBQUVELGdCQUFZO2FBQUEsc0JBQUMsVUFBVSxFQUFDO0FBQ3RCLFlBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlCLFlBQUksTUFBTSxZQUFBLENBQUM7QUFDWCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFDO0FBQ3ZCLGNBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hELGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DLGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQyxNQUFJO0FBQ0gsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzNCO0FBQ0QsWUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGNBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQyxDQUFDO09BQ0o7O0FBRUQsb0JBQWdCO2FBQUEsNEJBQUU7QUFDaEIsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBQztBQUN2QixpQkFDRTs7O1lBQ0Usb0JBQUMsY0FBYyxJQUFDLEdBQUcsRUFBQyxZQUFZO0FBQ2hCLHdCQUFVLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUNqRCx5QkFBVyxFQUFFLEtBQUssQ0FBQyxhQUFhLEFBQUM7QUFDakMsc0JBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxBQUFDLEdBQUc7V0FDakQsQ0FDUDtTQUNGLE1BQUs7QUFDSixpQkFBTyxJQUFJLENBQUM7U0FDYjtPQUNGOztBQUVELGlCQUFhO2FBQUEseUJBQUU7QUFDYixZQUFJLE9BQU8sWUFBQSxDQUFDO0FBQ1osWUFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUM7QUFDcEMsaUJBQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBUyxNQUFNLEVBQUM7QUFDaEQsbUJBQU87QUFDTCxrQkFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUMzQixtQkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUzthQUM5QixDQUFDO1dBQ0gsQ0FBQyxDQUFDO1NBQ0osTUFBTTtBQUNMLGlCQUFPLEdBQUcsQ0FBQztBQUNULGdCQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVE7QUFDeEMsaUJBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUztXQUMzQyxDQUFDLENBQUM7U0FDSjtBQUNELFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUM7QUFDbkUsaUJBQ0U7O2NBQUssU0FBUyxFQUFDLFVBQVU7WUFDdkIsb0JBQUMsT0FBTyxJQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQUFBQztBQUNuQywwQkFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxBQUFDO0FBQ25DLDBCQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEFBQUM7QUFDaEMscUJBQU8sRUFBRSxPQUFPLEFBQUM7QUFDakIsK0JBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQUFBQztBQUNoRCxzQkFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO0FBQ3ZDLHVCQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7QUFDekMsc0JBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQyxHQUFFO1dBQzlDLENBQ1A7U0FDRixNQUFJO0FBQ0gsaUJBQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjs7QUFFRCxxQkFBaUI7YUFBQSwyQkFBQyxPQUFPLEVBQUM7QUFDeEIsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBQztBQUN6QixpQkFDRSxvQkFBQyxXQUFXLElBQUMsT0FBTyxFQUFFLE9BQU8sQUFBQztBQUNqQix5QkFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQUFBQztBQUN6QyxvQkFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUMsR0FBRSxDQUMxRDtTQUNILE1BQUk7QUFDSCxpQkFBTyxJQUFJLENBQUM7U0FDYjtPQUNGOzs7O1NBMVdHLGNBQWM7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUE0VzVDLGNBQWMsQ0FBQyxTQUFTLEdBQUc7QUFDekIsUUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUM5QixNQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQzNCLFNBQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDN0IsT0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMzQixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQy9CLFlBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDaEMsbUJBQWlCLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ3pDLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUMvQixRQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQzVCLFdBQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDL0IsWUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztBQUMvQixZQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzlCLGVBQVcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDakMsaUJBQWEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDbkMsb0JBQWdCLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ3RDLDRCQUF3QixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtHQUMvQyxDQUFDO0FBQ0YsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQzlCLFFBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDNUIsY0FBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNoQyxpQkFBYSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtHQUNwQyxDQUFDO0FBQ0YsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMvQixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQy9CLFFBQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDNUIsY0FBWSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNsQyxTQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDN0IsWUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNoQyxhQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2pDLHNCQUFrQixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUN4QyxrQkFBYyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNwQyxrQkFBYyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtHQUNyQyxDQUFDO0NBQ0gsQ0FBQztBQUNGLGNBQWMsQ0FBQyxZQUFZLEdBQUc7QUFDNUIsUUFBTSxFQUFFLE1BQU07QUFDZCxTQUFPLEVBQUUsS0FBSztBQUNkLE9BQUssRUFBRSxLQUFLO0FBQ1osV0FBUyxFQUFFLEtBQUs7QUFDaEIsWUFBVSxFQUFFLEtBQUs7QUFDakIsbUJBQWlCLEVBQUUsU0FBUztBQUM1QixXQUFTLEVBQUU7QUFDVCxRQUFJLEVBQUUsS0FBSyxDQUFDLGVBQWU7QUFDM0IsV0FBTyxFQUFFLEtBQUssQ0FBQyxtQkFBbUI7QUFDbEMsWUFBUSxFQUFFLEVBQUU7QUFDWixZQUFRLEVBQUUsU0FBUztBQUNuQixlQUFXLEVBQUUsU0FBUztBQUN0QixpQkFBYSxFQUFFLEtBQUs7QUFDcEIsb0JBQWdCLEVBQUUsS0FBSztBQUN2Qiw0QkFBd0IsRUFBRSxLQUFLO0dBQ2hDO0FBQ0QsVUFBUSxFQUFDO0FBQ1AsUUFBSSxFQUFFLEtBQUssQ0FBQyxjQUFjO0FBQzFCLGNBQVUsRUFBRSxLQUFLO0FBQ2pCLHNCQUFrQixFQUFFLFNBQVM7R0FDOUI7QUFDRCxXQUFTLEVBQUUsS0FBSztBQUNoQixXQUFTLEVBQUUsS0FBSztBQUNoQixRQUFNLEVBQUUsS0FBSztBQUNiLGNBQVksRUFBRSxLQUFLO0FBQ25CLFNBQU8sRUFBRTtBQUNQLFlBQVEsRUFBRSxJQUFJO0FBQ2QsYUFBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0dBQzNCO0NBQ0YsQ0FBQzs7aUJBRWEsY0FBYzs7Ozs7aUJDemJkO0FBQ2IsV0FBUyxFQUFFLE1BQU07QUFDakIsVUFBUSxFQUFFLEtBQUs7QUFDZixlQUFhLEVBQUUsRUFBRTtBQUNqQixlQUFhLEVBQUUsQ0FBQztBQUNoQixXQUFTLEVBQUUsR0FBRztBQUNkLFdBQVMsRUFBRSxJQUFJO0FBQ2YsVUFBUSxFQUFFLEdBQUc7QUFDYixZQUFVLEVBQUUsSUFBSTtBQUNoQixxQkFBbUIsRUFBRSxFQUFFO0FBQ3ZCLGlCQUFlLEVBQUUsTUFBTTtBQUN2QixtQkFBaUIsRUFBRSxPQUFPO0FBQzFCLGtCQUFnQixFQUFFLFVBQVU7QUFDNUIsZ0JBQWMsRUFBRSxNQUFNO0FBQ3RCLGlCQUFlLEVBQUUsT0FBTztBQUN4QixtQkFBaUIsRUFBRSxTQUFTO0NBQzdCOzs7Ozs7Ozs7Ozs7O0lDaEJNLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsUUFBUSwyQkFBTSxZQUFZOztJQUMxQixLQUFLLDJCQUFNLFNBQVM7O0lBRXJCLHFCQUFxQjtXQUFyQixxQkFBcUI7MEJBQXJCLHFCQUFxQjs7Ozs7OztZQUFyQixxQkFBcUI7O2VBQXJCLHFCQUFxQjtBQUV6QixVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLE9BQU8sR0FBRztBQUNaLGVBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQzs7QUFFRixlQUNFOztZQUFJLEtBQUssRUFBRSxPQUFPLEFBQUM7VUFDakI7O2NBQUssU0FBUyxFQUFDLDhCQUE4QjtZQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7V0FDaEI7U0FDSCxDQUNOO09BQ0Y7Ozs7U0FkRyxxQkFBcUI7R0FBUyxLQUFLLENBQUMsU0FBUzs7aUJBaUJwQyxxQkFBcUI7Ozs7Ozs7Ozs7Ozs7OztJQ3JCN0IsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBQ3BCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsV0FBVywyQkFBTSxlQUFlOztJQUNoQyxlQUFlLDJCQUFNLG1CQUFtQjs7SUFDeEMsUUFBUSwyQkFBTSxZQUFZOztJQUUzQixTQUFTO0FBRUYsV0FGUCxTQUFTLENBRUQsS0FBSyxFQUFFOzBCQUZmLFNBQVM7O0FBR2IsK0JBSEksU0FBUyw2Q0FHUCxLQUFLLEVBQUU7QUFDWCxRQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsa0JBQVksRUFBRSxJQUFJO0tBQ25CLENBQUM7QUFDRixRQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztHQUN0Qjs7WUFSRyxTQUFTOztlQUFULFNBQVM7QUFVYixVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDOztBQUVuRCxZQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFO0FBQ3JELHlCQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO0FBQ25DLHVCQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO0FBQy9CLDJCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztTQUN4QyxDQUFDLENBQUM7O0FBRUgsWUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUNwRCxZQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7QUFFN0QsWUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUNuRCxjQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBUyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzNELGdCQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLGdCQUFHLElBQUksQ0FBQyxPQUFPLElBQ2IsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7QUFDbkMsa0JBQU0sQ0FBQyxRQUFRO0FBQ2YsZ0JBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksSUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUMvQixxQkFDRTtBQUFDLCtCQUFlO2tCQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO0FBQ3JELHFCQUFHLEVBQUUsQ0FBQyxBQUFDO0FBQ1AsNEJBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEFBQUM7QUFDM0MsMEJBQVEsRUFBRSxDQUFDLEFBQUM7QUFDWiwwQkFBUSxFQUFFLENBQUMsQUFBQztnQkFDMUIsVUFBVTtlQUNLLENBQ25CO2FBQ0osTUFBSztBQUNKLGtCQUFHLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUM7QUFDdEMsb0JBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JELG9CQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUN6QyxnQ0FBYyxHQUFHLDZCQUFLLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLGNBQWMsRUFBQyxBQUFDLEdBQU8sQ0FBQztpQkFDakY7QUFDRCx1QkFDRTtBQUFDLDZCQUFXO29CQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxBQUFDO0FBQ3hCLHVCQUFHLEVBQUUsQ0FBQyxBQUFDO0FBQ1AsNkJBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxBQUFDO0FBQzVCLDRCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEFBQUM7QUFDOUIsMEJBQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUN2Qyx5QkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEFBQUM7a0JBQzlCLGNBQWM7aUJBQ0gsQ0FDZjtlQUNGLE1BQUs7QUFDSix1QkFDRTtBQUFDLDZCQUFXO29CQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxBQUFDO0FBQ3hCLHVCQUFHLEVBQUUsQ0FBQyxBQUFDO0FBQ1AsNkJBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxBQUFDO0FBQzVCLDRCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEFBQUM7QUFDOUIsMEJBQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxBQUFDO0FBQ3RCLDBCQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7QUFDdkMseUJBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxBQUFDO2tCQUM5QixVQUFVO2lCQUNDLENBQ2Y7ZUFDRjthQUNGO1dBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULGNBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25GLGNBQUksZUFBZSxHQUFHLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQzFELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsR0FBQyxJQUFJLENBQUM7QUFDbEUsaUJBQ0U7QUFBQyxvQkFBUTtjQUFDLFVBQVUsRUFBRSxRQUFRLEFBQUMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxBQUFDO0FBQ3JDLHVCQUFTLEVBQUUsa0JBQWtCLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUMsU0FBUyxBQUFDO0FBQzdELDRCQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxjQUFjLEFBQUM7QUFDbEUseUJBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztZQUM1QyxlQUFlO1lBQUUsWUFBWTtXQUNyQixDQUNaO1NBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCxZQUFHLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFDO0FBQ3hCLG1CQUFTLENBQUMsSUFBSSxDQUNkO0FBQUMsb0JBQVE7Y0FBQyxHQUFHLEVBQUMsaUJBQWlCO1lBQzdCOztnQkFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFFLGtCQUFrQixHQUFDLENBQUMsR0FBQyxDQUFDLENBQUEsQUFBQyxBQUFDO0FBQzVELHFCQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEFBQUM7O2FBRTlCO1dBQ0ksQ0FBQyxDQUFDO1NBQ2Q7O0FBRUQsWUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDckIsZUFDRTs7WUFBSyxTQUFTLEVBQUUsZ0JBQWdCLEFBQUM7VUFDL0I7O2NBQU8sU0FBUyxFQUFFLFlBQVksQUFBQztZQUM1QixXQUFXO1lBQ1o7OztjQUNHLFNBQVM7YUFDSjtXQUNGO1NBQ0osQ0FDUDtPQUNGOztBQUVELHFCQUFpQjthQUFBLDJCQUFDLGtCQUFrQixFQUFDO0FBQ25DLFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQzs7QUFFM0IsWUFBRyxrQkFBa0IsRUFBQztBQUNwQixjQUFJLEtBQUssR0FBRztBQUNWLGlCQUFLLEVBQUMsRUFBRTtXQUNULENBQUE7QUFDRCx5QkFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFDLElBQUksR0FBRSw0QkFBSSxLQUFLLEVBQUUsS0FBSyxBQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxBQUFDLEdBQU0sQUFBQyxDQUFDO1NBQ2pHO0FBQ0QsWUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUN0RCxjQUFJLEtBQUssR0FBQztBQUNSLG1CQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBQyxNQUFNLEdBQUMsSUFBSTtBQUNsQyxpQkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1dBQ3BCLENBQUM7QUFDRixpQkFBUSw0QkFBSSxLQUFLLEVBQUUsS0FBSyxBQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsQUFBQyxFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxBQUFDLEdBQU0sQ0FBRTtTQUN2RSxDQUFDLENBQUM7O0FBRUgsZUFDRTs7O1VBQ0U7OztZQUFLLGVBQWU7WUFBRSxPQUFPO1dBQU07U0FDN0IsQ0FDVDtPQUNGOztBQUVELG1CQUFlO2FBQUEseUJBQUMsUUFBUSxFQUFFLFVBQVUsRUFBQztBQUNuQyxZQUFJLEdBQUcsRUFBRSxXQUFXLENBQUM7QUFDckIsWUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVMsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QyxjQUFHLENBQUMsSUFBSSxRQUFRLEdBQUMsQ0FBQyxFQUFDO0FBQ2pCLGVBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQix1QkFBVyxHQUFHLEdBQUcsQ0FBQztXQUNuQjtTQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDVCxZQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7T0FDakQ7O0FBRUQsOEJBQTBCO2FBQUEsb0NBQUMsQ0FBQyxFQUFDO0FBQzNCLFlBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBQztBQUN2RixjQUFJLENBQUMsZUFBZSxDQUNsQixDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEY7T0FDRjs7QUFFRCxrQkFBYzthQUFBLHdCQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUM7QUFDbkMsWUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsWUFBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBQztBQUM1QixxQkFBVyxFQUFFLENBQUM7QUFDZCxjQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUN0QyxXQUFXLEVBQUUsQ0FBQztTQUNqQjtBQUNELGdCQUFRLEVBQUUsQ0FBQztBQUNYLFlBQUksUUFBUSxHQUFHO0FBQ2Isc0JBQVksRUFBRTtBQUNaLGVBQUcsRUFBRSxRQUFRO0FBQ2IsZUFBRyxFQUFFLFdBQVc7V0FDakI7U0FDRixDQUFDOztBQUVGLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUM7O0FBRS9DLGNBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEcsY0FBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDN0M7QUFDRCxZQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ3pCOztBQUVELDBCQUFzQjthQUFBLGdDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFDO0FBQ25ELFlBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztBQUNwQyxZQUFHLElBQUksSUFBSSxNQUFNLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztPQUN6RTs7QUFFRCx5QkFBcUI7YUFBQSwrQkFBQyxRQUFRLEVBQUM7QUFDN0IsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQ3ZELGlCQUFRO0FBQUMsdUJBQVc7O1lBQUMsK0JBQU8sSUFBSSxFQUFDLE9BQU8sRUFBQyxJQUFJLEVBQUMsV0FBVyxFQUFDLE9BQU8sRUFBRSxRQUFRLEFBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQyxHQUFFO1dBQWMsQ0FBRTtTQUNySixNQUFLO0FBQ0osaUJBQVE7QUFBQyx1QkFBVzs7WUFBQywrQkFBTyxJQUFJLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBRSxRQUFRLEFBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQyxHQUFFO1dBQWMsQ0FBRTtTQUN2STtPQUNGOztBQUVELHVCQUFtQjthQUFBLCtCQUFFO0FBQ25CLGVBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsSUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztPQUMzRDs7OztTQTdMRyxTQUFTO0dBQVMsS0FBSyxDQUFDLFNBQVM7O0FBK0x2QyxTQUFTLENBQUMsU0FBUyxHQUFHO0FBQ3BCLE1BQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDM0IsU0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztBQUM5QixTQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzdCLE9BQUssRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDM0IsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMvQixVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2hDLGlCQUFlLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQ3RDLGFBQVcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDbEMsQ0FBQztpQkFDYSxTQUFTOzs7Ozs7Ozs7Ozs7Ozs7OztJQ2hOakIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBRXJCLFdBQVc7QUFFSixXQUZQLFdBQVcsQ0FFSCxLQUFLLEVBQUU7MEJBRmYsV0FBVzs7QUFHZiwrQkFISSxXQUFXLDZDQUdULEtBQUssRUFBRTtHQUNaOztZQUpHLFdBQVc7O2VBQVgsV0FBVztBQU1mLGtCQUFjO2FBQUEsd0JBQUMsQ0FBQyxFQUFDO0FBQ2YsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFDO0FBQ3JELGNBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtBQUNqRCxvQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztXQUM1QixNQUFNLElBQUcsTUFBTSxDQUFDLFlBQVksRUFBRTtBQUMzQixnQkFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ2hDLGVBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztXQUN6QjtTQUNGO0FBQ0QsWUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ2YsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUN0QyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQzlCOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksT0FBTyxHQUFHO0FBQ1osbUJBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7QUFDL0IsaUJBQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxNQUFNLEdBQUMsSUFBSTtTQUN2QyxDQUFDOztBQUVGLFlBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNkLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUM7QUFDckIsY0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBQztBQUNuRCxnQkFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUMvQyxNQUFLLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBQztBQUMzRCxnQkFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUNyRDtTQUNGO0FBQ0QsZUFDRTs7cUJBQUksS0FBSyxFQUFFLE9BQU8sQUFBQyxFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQUFBQyxJQUFLLElBQUk7VUFDMUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1NBQ2pCLENBQ047T0FDRjs7OztTQXZDRyxXQUFXO0dBQVMsS0FBSyxDQUFDLFNBQVM7O0FBeUN6QyxXQUFXLENBQUMsU0FBUyxHQUFHO0FBQ3RCLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDakMsUUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUM1QixXQUFTLEVBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0NBQ2pDLENBQUM7O0FBRUYsV0FBVyxDQUFDLFlBQVksR0FBRztBQUN6QixXQUFTLEVBQUUsTUFBTTtBQUNqQixRQUFNLEVBQUUsS0FBSztBQUNiLFdBQVMsRUFBQyxFQUFFO0NBQ2IsQ0FBQTtpQkFDYyxXQUFXOzs7Ozs7Ozs7Ozs7O0lDdkRuQixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLEtBQUssMkJBQU0sU0FBUzs7SUFFckIsZUFBZTtXQUFmLGVBQWU7MEJBQWYsZUFBZTs7Ozs7OztZQUFmLGVBQWU7O2VBQWYsZUFBZTtBQUVuQixrQkFBYzthQUFBLHdCQUFDLENBQUMsRUFBQztBQUNmLFlBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUU7O0FBQ25CLGNBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUNyQixDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3BFLE1BQUssSUFBRyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBQztBQUN2QixjQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkQ7T0FDRjs7QUFFRCxjQUFVO2FBQUEsb0JBQUMsQ0FBQyxFQUFDO0FBQ1gsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBQztBQUN2QixjQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FDckIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNwRTtPQUNGOztBQUVELHFCQUFpQjthQUFBLDZCQUFFO0FBQ2pCLFlBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzVDLGFBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDbEMsYUFBSyxDQUFDLEtBQUssRUFBRSxDQUFDO09BQ2Y7O0FBRUQsVUFBTTthQUFBLGtCQUFFO0FBQ04sZUFDRTs7O1VBQ0UsK0JBQU8sR0FBRyxFQUFDLFVBQVUsRUFBQyxJQUFJLEVBQUMsTUFBTTtBQUMvQixxQkFBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO0FBQzFDLGtCQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUMsR0FBRTtTQUNwQyxDQUNOO09BQ0Y7Ozs7U0FqQ0csZUFBZTtHQUFTLEtBQUssQ0FBQyxTQUFTOztBQW1DN0MsZUFBZSxDQUFDLFNBQVMsR0FBRztBQUMxQixjQUFZLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2xDLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNoQyxZQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0NBQ2pDLENBQUM7O2lCQUVhLGVBQWU7Ozs7Ozs7Ozs7Ozs7OztJQzdDdkIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBQ3BCLFFBQVEsMkJBQU0sWUFBWTs7SUFFM0IsV0FBVztBQUVKLFdBRlAsV0FBVyxDQUVILEtBQUssRUFBRTswQkFGZixXQUFXOztBQUdiLCtCQUhFLFdBQVcsNkNBR1AsS0FBSyxFQUFFO0FBQ2IsUUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7R0FDckI7O1lBTEcsV0FBVzs7ZUFBWCxXQUFXO0FBT2YsZUFBVzthQUFBLHFCQUFDLENBQUMsRUFBQztBQUNaLFlBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUNwQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUU1QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7O0FBRS9ELFlBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztPQUNyQzs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFO0FBQ25DLHlCQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO0FBQ25DLDJCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztTQUN4QyxDQUFDLENBQUM7QUFDSCxZQUFJLGVBQWUsR0FBRyxJQUFJLENBQUM7O0FBRTNCLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGlCQUFpQixJQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUM7QUFDckQsY0FBSSxLQUFLLEdBQUc7QUFDVixpQkFBSyxFQUFDLEVBQUU7QUFDUix1QkFBVyxFQUFFLENBQUM7QUFDZCx3QkFBWSxFQUFFLENBQUM7V0FDaEIsQ0FBQTtBQUNELHlCQUFlLEdBQUk7O2NBQUksS0FBSyxFQUFFLEtBQUssQUFBQyxFQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQUFBQzs7V0FBWSxBQUFDLENBQUM7U0FDNUQ7QUFDRCxZQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBUyxNQUFNLEVBQUM7QUFDdkQsY0FBSSxPQUFPLEdBQUc7QUFDWixtQkFBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUMsTUFBTSxHQUFDLElBQUk7QUFDbEMsaUJBQUssRUFBRSxNQUFNLENBQUMsS0FBSztXQUNwQixDQUFDO0FBQ0YsaUJBQ0U7O2NBQUksR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEFBQUMsRUFBQyxLQUFLLEVBQUUsT0FBTyxBQUFDO1lBQ25DOztnQkFBSyxTQUFTLEVBQUMsOEJBQThCO2NBQzNDLCtCQUFPLElBQUksRUFBQyxNQUFNLEVBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEFBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQUFBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQyxHQUFFO2FBQ25HO1dBQ0gsQ0FDTjtTQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDVCxlQUNFOztZQUFPLFNBQVMsRUFBRSxZQUFZLEFBQUMsRUFBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEFBQUM7VUFDbkQ7OztZQUNFOztnQkFBSSxLQUFLLEVBQUUsRUFBQyxpQkFBaUIsRUFBRSxRQUFRLEVBQUMsQUFBQztjQUN0QyxlQUFlO2NBQUUsV0FBVzthQUMxQjtXQUNDO1NBQ0YsQ0FDVDtPQUNGOzs7O1NBdERHLFdBQVc7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUF3RHpDLFdBQVcsQ0FBQyxTQUFTLEdBQUc7QUFDdEIsU0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztBQUM5QixlQUFhLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ3JDLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDL0IsQ0FBQztpQkFDYSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7SUNqRW5CLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsS0FBSywyQkFBTSxTQUFTOztJQUNwQixJQUFJLDJCQUFNLFFBQVE7O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIscUJBQXFCLDJCQUFNLHlCQUF5Qjs7SUFFckQsV0FBVztBQUVKLFdBRlAsV0FBVyxDQUVILEtBQUssRUFBRTswQkFGZixXQUFXOztBQUdiLCtCQUhFLFdBQVcsNkNBR1AsS0FBSyxFQUFFO0dBQ2Q7O1lBSkcsV0FBVzs7ZUFBWCxXQUFXO0FBTWYsa0JBQWM7YUFBQSx3QkFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDO0FBQzlCLFlBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3hDLGFBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDdEMsY0FBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsY0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztBQUNuRCxrQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUMvRDtTQUNGO0FBQ0QsWUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO09BQ3JDOztBQUVELHFCQUFpQjthQUFBLDZCQUFFOztBQUVqQixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksRUFBQztBQUM5QixjQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0QsY0FBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDeEMsZUFBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLEVBQUUsRUFBQztBQUN0QyxnQkFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBQztBQUMzRCxvQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMvRCxvQkFBTTthQUNQO1dBQ0Y7U0FDRjtPQUNGOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2hELFlBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDdkYsWUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7O0FBRWpDLGVBQ0U7O1lBQUssU0FBUyxFQUFFLGdCQUFnQixBQUFDO1VBQy9COztjQUFPLFNBQVMsRUFBQyxrQ0FBa0M7WUFDakQ7OztjQUNFOztrQkFBSSxHQUFHLEVBQUMsUUFBUTtnQkFDYixrQkFBa0I7Z0JBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtlQUNqQjthQUNDO1dBQ0Y7U0FDSixDQUNQO09BQ0Y7O0FBRUQseUJBQXFCO2FBQUEsaUNBQUU7QUFDckIsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7QUFDdEQsaUJBQVEsb0JBQUMscUJBQXFCLE9BQXlCLENBQUU7U0FDMUQsTUFBSyxJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBQztBQUMxRCxpQkFBUTtBQUFDLGlDQUFxQjs7WUFBQywrQkFBTyxJQUFJLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQUFBQyxHQUFFO1dBQXdCLENBQUU7U0FDdkgsTUFBSTtBQUNILGlCQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7O0FBRUQsNkJBQXlCO2FBQUEscUNBQUU7QUFDekIsWUFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUM7QUFDcEMsZUFBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBQztBQUMzQyxnQkFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQ3BCLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUM7V0FDeEc7U0FDRixNQUFNO0FBQ0wsY0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQ2pCLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUM7U0FDckc7T0FDRjs7OztTQXZFRyxXQUFXO0dBQVMsS0FBSyxDQUFDLFNBQVM7O0FBeUV6QyxXQUFXLENBQUMsU0FBUyxHQUFHO0FBQ3RCLGVBQWEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDckMsUUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUM1QixnQkFBYyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNwQyxVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2hDLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDakMsa0JBQWdCLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0NBQ3ZDLENBQUM7O0FBRUYsV0FBVyxDQUFDLFlBQVksR0FBRyxFQUMxQixDQUFDO2lCQUNhLFdBQVc7Ozs7Ozs7Ozs7Ozs7SUMxRm5CLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsUUFBUSwyQkFBTSxZQUFZOztJQUMxQixLQUFLLDJCQUFNLFNBQVM7O0lBQ3BCLElBQUksMkJBQU0sUUFBUTs7SUFFbkIsaUJBQWlCO1dBQWpCLGlCQUFpQjswQkFBakIsaUJBQWlCOzs7Ozs7O1lBQWpCLGlCQUFpQjs7ZUFBakIsaUJBQWlCO0FBSXJCLHFCQUFpQjthQUFBLDJCQUFDLENBQUMsRUFBQztBQUNsQixZQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQUMsaUJBQU87U0FBQSxBQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMxQyxZQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsR0FBQyxLQUFLLENBQUMsUUFBUSxHQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDMUUsWUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVELFdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUNuRDs7QUFFRCxxQkFBaUI7YUFBQSw2QkFBRTtBQUNqQixZQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDbEY7O0FBRUQsVUFBTTthQUFBLGtCQUFFO0FBQ04sWUFBSSxPQUFPLEdBQUc7QUFDWixtQkFBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztBQUMvQixpQkFBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLE1BQU0sR0FBQyxJQUFJO0FBQ3RDLGVBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7U0FDeEIsQ0FBQzs7QUFFRixZQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBQyxHQUFHLElBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUMsYUFBYSxHQUFDLEVBQUUsQ0FBQSxBQUFDLENBQUM7QUFDOUUsZUFDRTs7WUFBSSxTQUFTLEVBQUUsT0FBTyxBQUFDLEVBQUMsS0FBSyxFQUFFLE9BQU8sQUFBQztVQUNyQzs7Y0FBSyxHQUFHLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyw4QkFBOEI7QUFDMUQscUJBQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1dBQU87U0FDdEUsQ0FDTjtPQUNGOzs7O1NBOUJHLGlCQUFpQjtHQUFTLEtBQUssQ0FBQyxTQUFTOztBQWdDL0MsaUJBQWlCLENBQUMsU0FBUyxHQUFHO0FBQzVCLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDakMsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNqQyxVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzlCLGdCQUFjLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ3BDLFlBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDaEMsT0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMzQixVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzlCLFFBQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDNUIsV0FBUyxFQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNoQyxPQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQzdCLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDL0IsQ0FBQzs7QUFFRixpQkFBaUIsQ0FBQyxZQUFZLEdBQUc7QUFDL0IsV0FBUyxFQUFFLE1BQU07QUFDakIsVUFBUSxFQUFFLEtBQUs7QUFDZixZQUFVLEVBQUUsU0FBUztBQUNyQixPQUFLLEVBQUUsS0FBSztBQUNaLFVBQVEsRUFBRSxJQUFJO0FBQ2QsZ0JBQWMsRUFBRSxTQUFTO0FBQ3pCLFFBQU0sRUFBRSxLQUFLO0FBQ2IsV0FBUyxFQUFFLEVBQUU7QUFDYixPQUFLLEVBQUUsSUFBSTtBQUNYLFVBQVEsRUFBRSxTQUFTO0NBQ3BCLENBQUM7O2lCQUVhLGlCQUFpQjs7Ozs7Ozs7Ozs7OztJQ2hFekIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBRXJCLFFBQVE7V0FBUixRQUFROzBCQUFSLFFBQVE7Ozs7Ozs7WUFBUixRQUFROztlQUFSLFFBQVE7QUFFWixZQUFRO2FBQUEsa0JBQUMsQ0FBQyxFQUFDO0FBQ1QsWUFBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztPQUM1RTs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7O0FBRU4sWUFBSSxRQUFRLEdBQUc7QUFDYix5QkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBQyxJQUFJO1NBQ3pFLENBQUM7O0FBRUYsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUEsQUFBQyxFQUFDO0FBQ3RGLGlCQUNFOztjQUFJLEtBQUssRUFBRSxRQUFRLEFBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7V0FBTSxDQUNuRjtTQUNGLE1BQUk7QUFDSCxpQkFDRTs7Y0FBSSxLQUFLLEVBQUUsUUFBUSxBQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1dBQU0sQ0FDaEQ7U0FDRjtPQUNGOzs7O1NBdkJHLFFBQVE7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUF5QnRDLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsWUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNoQyxnQkFBYyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNwQyxhQUFXLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0NBQ2xDLENBQUM7aUJBQ2EsUUFBUTs7Ozs7Ozs7Ozs7Ozs7O0lDakNoQixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFFM0IsVUFBVTtBQUVILFdBRlAsVUFBVSxDQUVGLEtBQUssRUFBRTswQkFGZixVQUFVOztBQUdkLCtCQUhJLFVBQVUsNkNBR1IsS0FBSyxFQUFFO0dBQ2I7O1lBSkksVUFBVTs7ZUFBVixVQUFVO0FBTWQsZ0JBQVk7YUFBQSxzQkFBQyxDQUFDLEVBQUM7QUFDYixTQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM3Qzs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUMsSUFBSSxDQUFDO0FBQ3hELGVBQ0k7O1lBQUksU0FBUyxFQUFFLE9BQU8sQUFBQztVQUFDOztjQUFHLElBQUksRUFBQyxHQUFHLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1dBQUs7U0FBSyxDQUM1RztPQUNGOzs7O1NBaEJHLFVBQVU7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUFrQnhDLFVBQVUsQ0FBQyxTQUFTLEdBQUc7QUFDckIsWUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNoQyxRQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0NBQzdCLENBQUM7O2lCQUVhLFVBQVU7Ozs7Ozs7Ozs7Ozs7OztJQzFCbEIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixVQUFVLDJCQUFNLGlCQUFpQjs7SUFDakMsS0FBSywyQkFBTSxVQUFVOztJQUV0QixjQUFjO0FBRVAsV0FGUCxjQUFjLENBRU4sS0FBSyxFQUFFOzBCQUZmLGNBQWM7O0FBR2xCLCtCQUhJLGNBQWMsNkNBR1osS0FBSyxFQUFFO0FBQ1gsUUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO0FBQ3pDLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDVCxpQkFBVyxFQUFFLENBQUM7QUFDZCxpQkFBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztLQUNwQyxDQUFDO0dBQ0o7O1lBVEksY0FBYzs7ZUFBZCxjQUFjO0FBV2xCLGNBQVU7YUFBQSxvQkFBQyxJQUFJLEVBQUM7QUFDZCxZQUFHLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFDO0FBQ3hCLGNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUM7U0FDaEUsTUFBSyxJQUFHLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFDO0FBQy9CLGNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQztTQUM1RixNQUFLLElBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUM7QUFDL0IsY0FBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDeEIsTUFBSyxJQUFHLElBQUksSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFDO0FBQ2hDLGNBQUksR0FBRyxDQUFDLENBQUM7U0FDVixNQUFJO0FBQ0gsY0FBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2Qjs7QUFFRCxZQUFHLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBQztBQUNoQyxjQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFDbkMsY0FBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDckQ7T0FDRjs7QUFFRCxxQkFBaUI7YUFBQSwyQkFBQyxDQUFDLEVBQUM7QUFDbEIsU0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ25CLFlBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELFlBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFDO0FBQ3RDLGNBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1RCxjQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDM0MsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLHVCQUFXLEVBQUUsVUFBVTtBQUN2Qix1QkFBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztXQUNwQyxDQUFDLENBQUM7QUFDSCxjQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUMzRDtPQUNGOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hFLFlBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMvQixZQUFJLGFBQWEsR0FBRztBQUNsQixtQkFBUyxFQUFFLEtBQUs7QUFBQSxTQUNqQixDQUFBO0FBQ0QsZUFDRTs7WUFBSyxTQUFTLEVBQUMsS0FBSztVQUNsQjs7Y0FBSyxTQUFTLEVBQUMsVUFBVTtZQUN2Qjs7Z0JBQUssU0FBUyxFQUFDLFVBQVU7Y0FDdkI7O2tCQUFRLFNBQVMsRUFBQyxpQ0FBaUMsRUFBQyxJQUFJLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsZUFBWSxVQUFVLEVBQUMsaUJBQWMsTUFBTTtnQkFDNUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO2dCQUN2Qiw4QkFBTSxTQUFTLEVBQUMsT0FBTyxHQUFRO2VBQ3hCO2NBQ1Q7O2tCQUFJLFNBQVMsRUFBQyxlQUFlLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxtQkFBZ0IsY0FBYztnQkFDdEU7O29CQUFJLElBQUksRUFBQyxjQUFjO2tCQUFDOztzQkFBRyxJQUFJLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQzs7bUJBQU87aUJBQUs7Z0JBQ3pIOztvQkFBSSxJQUFJLEVBQUMsY0FBYztrQkFBQzs7c0JBQUcsSUFBSSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxHQUFHLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7O21CQUFPO2lCQUFLO2dCQUN6SDs7b0JBQUksSUFBSSxFQUFDLGNBQWM7a0JBQUM7O3NCQUFHLElBQUksRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsR0FBRyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDOzttQkFBTztpQkFBSztnQkFDekg7O29CQUFJLElBQUksRUFBQyxjQUFjO2tCQUFDOztzQkFBRyxJQUFJLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQzs7bUJBQU87aUJBQUs7ZUFDdEg7YUFDRDtXQUNGO1VBQ047O2NBQUssU0FBUyxFQUFDLFVBQVU7WUFDdkI7O2dCQUFJLFNBQVMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFFLGFBQWEsQUFBQztjQUM3QyxRQUFRO2FBQ047V0FDRDtTQUNGLENBQ1A7T0FDRjs7QUFFRCxZQUFRO2FBQUEsb0JBQUU7QUFDUixZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDNUIsZUFBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVMsSUFBSSxFQUFDO0FBQzdCLGNBQUksUUFBUSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBQyxJQUFJLEdBQUMsS0FBSyxDQUFDO0FBQ3pELGlCQUNFO0FBQUMsc0JBQVU7Y0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUMsRUFBQyxNQUFNLEVBQUUsUUFBUSxBQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksQUFBQztZQUFFLElBQUk7V0FBYyxDQUNyRztTQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDVjs7QUFFRCxZQUFRO2FBQUEsb0JBQUU7QUFDUixZQUFJLFNBQVMsR0FBRyxDQUFDO1lBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O0FBRTdDLGlCQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakYsZUFBTyxHQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQzs7QUFFN0MsWUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUM3QixpQkFBTyxHQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDNUIsbUJBQVMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7U0FDNUM7QUFDRCxZQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLGFBQUksSUFBSSxDQUFDLEdBQUMsU0FBUyxFQUFDLENBQUMsSUFBRSxPQUFPLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDakMsY0FBRyxDQUFDLEdBQUMsQ0FBQyxFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEI7QUFDRCxhQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QixhQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QixlQUFPLEtBQUssQ0FBQztPQUNkOztBQUVELGtCQUFjO2FBQUEsMEJBQUU7QUFDZCxlQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO09BQy9COztBQUVELGtCQUFjO2FBQUEsMEJBQUU7QUFDZCxlQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO09BQy9COzs7O1NBL0dHLGNBQWM7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUFpSDVDLGNBQWMsQ0FBQyxTQUFTLEdBQUc7QUFDekIsYUFBVyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNuQyxVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2hDLFlBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDakMsQ0FBQzs7QUFFRixjQUFjLENBQUMsWUFBWSxHQUFHO0FBQzVCLGFBQVcsRUFBRSxLQUFLLENBQUMsYUFBYTtDQUNqQyxDQUFBO2lCQUNjLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUM5SHRCLEtBQUssMkJBQU0sVUFBVTs7QUFDNUIsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQzs7QUFFbEQsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDO0FBQzdDLE9BQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUIsS0FBRyxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsRUFBQyxDQUFDLEVBQUs7QUFDaEIsUUFBRyxRQUFRLEVBQUM7QUFDVixhQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxVQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFDO0FBQzFCLGVBQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxBQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUksQ0FBQyxHQUFHLENBQUMsQUFBQyxDQUFDO09BQ2hGLE1BQUk7QUFDSCxlQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsQUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFJLENBQUMsR0FBRyxDQUFDLEFBQUMsQ0FBQztPQUNoRjtLQUNGO0dBQ0YsQ0FBQyxDQUFDOztBQUVILFNBQU8sR0FBRyxDQUFDO0NBQ1o7O0lBRVksWUFBWSxXQUFaLFlBQVk7QUFDWixXQURBLFlBQVksQ0FDWCxJQUFJLEVBQUM7MEJBRE4sWUFBWTs7QUFFckIsK0JBRlMsWUFBWSw2Q0FFZixJQUFJLEVBQUU7QUFDWixRQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztHQUNsQjs7WUFKVSxZQUFZOztlQUFaLFlBQVk7QUFNdkIsV0FBTzthQUFBLGlCQUFDLElBQUksRUFBRTtBQUNaLFlBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzNCOztBQUVELFNBQUs7YUFBQSxpQkFBRTtBQUNMLFlBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO09BQ2xCOztBQUVELFdBQU87YUFBQSxtQkFBRTtBQUNQLGVBQU8sSUFBSSxDQUFDLElBQUksQ0FBQztPQUNsQjs7OztTQWhCVSxZQUFZO0dBQVMsWUFBWTs7SUFtQmpDLGNBQWMsV0FBZCxjQUFjO0FBRWQsV0FGQSxjQUFjLENBRWIsSUFBSSxFQUFDOzBCQUZOLGNBQWM7O0FBR3ZCLFFBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFFBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDOUIsUUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdEIsUUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsUUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbEIsUUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7R0FDcEI7O2VBWlUsY0FBYztBQWN6QixZQUFRO2FBQUEsa0JBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBQztBQUNqRCxZQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QixZQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLFlBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztPQUM1Qzs7QUFFRCxXQUFPO2FBQUEsaUJBQUMsSUFBSSxFQUFFO0FBQ1osWUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2xCLGNBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEQsY0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzRDtBQUNELFlBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztBQUNkLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN2RDtPQUNGOztBQUVELHFCQUFpQjthQUFBLDJCQUFDLGVBQWUsRUFBQztBQUNoQyxZQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztPQUNqQzs7QUFFRCxzQkFBa0I7YUFBQSw4QkFBRTtBQUNsQixlQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7T0FDdEI7O0FBRUQseUJBQXFCO2FBQUEsaUNBQUU7QUFDckIsWUFBRyxJQUFJLENBQUMsVUFBVTtBQUFFLGlCQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7O0FBQ3hDLGlCQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7U0FBQTtPQUN2Qjs7QUFFRCxRQUFJO2FBQUEsY0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFDO0FBQ3BCLFlBQUksQ0FBQyxPQUFPLEdBQUc7QUFDYixlQUFLLEVBQUUsS0FBSztBQUNaLG1CQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDOztBQUVGLFlBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDdEQsWUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELDBCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztBQUUzRSxlQUFPLElBQUksQ0FBQztPQUNiOztBQUVELFFBQUk7Ozs7Ozs7Ozs7O1NBQUEsVUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDO0FBQ3JCLFlBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksR0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDO0FBQ3RDLFlBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUEsQUFBQyxDQUFDO0FBQzFELGVBQU8sSUFBSSxDQUFDO09BQ2I7O0FBRUQsUUFBSTthQUFBLGNBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUM7QUFDL0IsWUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztBQUN0RCxZQUFJLFdBQVcsWUFBQSxDQUFDO0FBQ2hCLFlBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUM7QUFDeEIsNEJBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELHFCQUFXLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNELE1BQUk7QUFDSCw0QkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEUscUJBQVcsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUU7QUFDRCxZQUFHLElBQUksQ0FBQyxVQUFVLEVBQUM7QUFDakIsY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBUyxHQUFHLEVBQUM7QUFDN0IsZ0JBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxXQUFXLEVBQUM7QUFDcEMsaUJBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO2FBQ3hDO1dBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNWO0FBQ0QsZUFBTyxJQUFJLENBQUM7T0FDYjs7QUFFRCxPQUFHO2FBQUEsYUFBQyxNQUFNLEVBQUM7QUFDVCxZQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFDO0FBQ3JDLGdCQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsd0JBQXdCLENBQUM7U0FDaEQ7QUFDRCxZQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3RELDBCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUN0QyxjQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQztBQUN6RCxrQkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1dBQ3ZFO1NBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCwwQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hCO09BQ0Y7O0FBRUQsVUFBTTthQUFBLGdCQUFDLE1BQU0sRUFBQztBQUNaLFlBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDdEQsWUFBSSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBRyxFQUFDO0FBQ2xELGlCQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2pELEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRVQsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGNBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBUyxHQUFHLEVBQUM7QUFDeEMsbUJBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7V0FDakQsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULGNBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1NBQzVCLE1BQUk7QUFDSCxjQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUNwQjtPQUNGOztBQUVELFVBQU07YUFBQSxnQkFBQyxTQUFTLEVBQUM7QUFDZixZQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBQztBQUNwQyxjQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixjQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN4QixjQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN2QixNQUFLO0FBQ0osY0FBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0IsY0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoRCxnQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGlCQUFJLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBQztBQUN2QixrQkFBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQy9FLHFCQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2Qsc0JBQU07ZUFDUDthQUNGO0FBQ0QsbUJBQU8sS0FBSyxDQUFDO1dBQ2QsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7T0FDRjs7QUFFRCxVQUFNO2FBQUEsZ0JBQUMsVUFBVSxFQUFDO0FBQ2hCLFlBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBQztBQUMxQixjQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixjQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN4QixjQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QixNQUFJO0FBQ0gsY0FBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDN0IsY0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoRCxnQkFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLGlCQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBQztBQUNqQixrQkFBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQ1IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztBQUM1RSxxQkFBSyxHQUFHLElBQUksQ0FBQztBQUNiLHNCQUFNO2VBQ1A7YUFDRjtBQUNELG1CQUFPLEtBQUssQ0FBQztXQUNkLENBQUMsQ0FBQztBQUNILGNBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO09BQ0Y7O0FBRUQsT0FBRzthQUFBLGVBQUU7QUFDSCxZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs7QUFFekMsWUFBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7QUFBRSxpQkFBTyxLQUFLLENBQUM7U0FBQSxBQUVuQyxJQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFDO0FBQ3hCLGlCQUFPLEtBQUssQ0FBQztTQUNkLE1BQUk7QUFDSCxjQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsZUFBSSxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxDQUFDLElBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDbkQsa0JBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsZ0JBQUcsQ0FBQyxHQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFDLE1BQU07V0FDOUI7QUFDRCxpQkFBTyxNQUFNLENBQUM7U0FDZjtPQUNGOztBQUVELGVBQVc7YUFBQSx1QkFBRTtBQUNYLGVBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztPQUN0Qjs7QUFFRCxjQUFVO2FBQUEsc0JBQUU7QUFDVixlQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztPQUM1Qzs7QUFFRCxnQkFBWTthQUFBLHdCQUFFO0FBQ1osZUFBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoQyxpQkFBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNCLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDVjs7OztTQTVMVSxjQUFjOzs7QUE4TDFCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ3JPSyxLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsS0FBSywyQkFBTSxVQUFVOztJQUV0QixPQUFPO0FBRUEsV0FGUCxPQUFPLENBRUMsS0FBSyxFQUFFOzBCQUZmLE9BQU87O0FBR1gsK0JBSEksT0FBTyw2Q0FHTCxLQUFLLEVBQUU7QUFDWCxRQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsd0JBQWtCLEVBQUUsSUFBSTtLQUN6QixDQUFDO0dBQ0g7O1lBUEcsT0FBTzs7ZUFBUCxPQUFPO0FBU1gsc0JBQWtCO2FBQUEsNEJBQUMsQ0FBQyxFQUFDO0FBQ25CLFlBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQixZQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBUyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzVDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDckUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULFlBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLFlBQUcsR0FBRyxFQUFFO0FBQ04sY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkQsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztTQUN0RCxNQUFLO0FBQ0osY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7U0FDdkQ7T0FDRjs7QUFFRCx5QkFBcUI7YUFBQSwrQkFBQyxDQUFDLEVBQUM7QUFDdEIsWUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztPQUN4Qjs7QUFFRCxrQkFBYzthQUFBLHdCQUFDLENBQUMsRUFBQztBQUNmLFlBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO09BQ3ZEOztBQUVELGVBQVc7YUFBQSxxQkFBQyxDQUFDLEVBQUM7QUFDWixZQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQzVDOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksY0FBYyxHQUFHLG1CQUFtQixHQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUQsWUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQ2pDOztZQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLGlCQUFpQixFQUFDLGVBQVksT0FBTyxFQUFDLGVBQWEsR0FBRyxHQUFDLGNBQWMsQUFBQzs7U0FDeEYsR0FBQyxJQUFJLENBQUM7O0FBRTFCLFlBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUNqQzs7WUFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxpQkFBaUIsRUFBQyxlQUFZLFNBQVMsRUFBQyxrQkFBZSxPQUFPLEVBQUMsS0FBSyxFQUFDLG1CQUFtQjtBQUN0SCxtQkFBTyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7O1NBRXhDLEdBQUMsSUFBSSxDQUFDO0FBQ3JCLFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUMzQywrQkFBTyxJQUFJLEVBQUMsTUFBTSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUMsUUFBUSxBQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUUsR0FBQyxJQUFJLENBQUM7QUFDbkosWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxHQUFDLElBQUksQ0FBQztBQUNuRixZQUFJLFlBQVksR0FBRztBQUNqQixpQkFBTyxFQUFFLE1BQU07QUFDZixzQkFBWSxFQUFFLENBQUM7U0FDaEIsQ0FBQztBQUNGLGVBQ0U7OztVQUNFOztjQUFLLFNBQVMsRUFBQyx3QkFBd0IsRUFBQyxJQUFJLEVBQUMsT0FBTyxFQUFDLGNBQVcsS0FBSztZQUNsRSxTQUFTO1lBQUUsU0FBUztXQUNqQjtVQUNMLGVBQWU7VUFDaEI7O2NBQUssR0FBRyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMscUJBQXFCLEVBQUMsS0FBSyxFQUFFLFlBQVksQUFBQztZQUNyRTs7Z0JBQVEsSUFBSSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsT0FBTyxFQUFDLGNBQVcsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztjQUFDOztrQkFBTSxlQUFZLE1BQU07O2VBQWU7YUFBUztZQUNwSjs7OzthQUEwQjtZQUFBLDhCQUFNLEdBQUcsRUFBQyxhQUFhLEdBQVE7V0FDckQ7VUFDTCxLQUFLO1NBQ0YsQ0FDUDtPQUNGOztBQUVELHdCQUFvQjthQUFBLDhCQUFDLGNBQWMsRUFBQzs7QUFFbEMsWUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUN6RCxpQkFDRTs7Y0FBSyxTQUFTLEVBQUMsWUFBWSxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxBQUFDO1lBQzVDOzs7Y0FBUSxNQUFNLENBQUMsSUFBSTthQUFTO1lBQzVCLCtCQUFPLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxHQUFDLENBQUMsQUFBQyxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLGNBQWMsRUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQUFBQyxHQUFTO1dBQy9GLENBQ047U0FDSCxDQUFDLENBQUM7QUFDSCxZQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUMzRCxlQUNFOztZQUFLLFNBQVMsRUFBRSxVQUFVLEFBQUMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxRQUFRLEVBQUMsZUFBWSxNQUFNO1VBQ3hFOztjQUFLLFNBQVMsRUFBQyx1QkFBdUI7WUFDcEM7O2dCQUFLLFNBQVMsRUFBQyxlQUFlO2NBQzVCOztrQkFBSyxTQUFTLEVBQUMsY0FBYztnQkFDM0I7O29CQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxnQkFBYSxPQUFPLEVBQUMsY0FBVyxPQUFPO2tCQUFDOztzQkFBTSxlQUFZLE1BQU07O21CQUFlO2lCQUFTO2dCQUNoSTs7b0JBQUksU0FBUyxFQUFDLGFBQWE7O2lCQUFnQjtlQUN2QztjQUNOOztrQkFBSyxTQUFTLEVBQUMsWUFBWTtnQkFDeEIsVUFBVTtlQUNQO2NBQ047O2tCQUFLLFNBQVMsRUFBQyxjQUFjO2dCQUMzQjs7b0JBQVEsSUFBSSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsaUJBQWlCLEVBQUMsZ0JBQWEsT0FBTzs7aUJBQWU7Z0JBQ3JGOztvQkFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxpQkFBaUIsRUFBQyxnQkFBYSxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7O2lCQUFjO2VBQzdIO2FBQ0Y7V0FDRjtTQUNGLENBQ1A7T0FDRjs7OztTQWxHRyxPQUFPO0dBQVMsS0FBSyxDQUFDLFNBQVM7O0FBb0dyQyxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDOUIsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMvQixjQUFZLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2xDLGNBQVksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDbEMsY0FBWSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNsQyxTQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQzlCLG1CQUFpQixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtDQUMxQyxDQUFDOztBQUVGLE9BQU8sQ0FBQyxZQUFZLEdBQUc7QUFDckIsY0FBWSxFQUFFLEtBQUs7QUFDbkIsY0FBWSxFQUFFLEtBQUs7QUFDbkIsY0FBWSxFQUFFLEtBQUs7Q0FDcEIsQ0FBQTtpQkFDYyxPQUFPOzs7Ozs7O0lDdkhmLEtBQUssMkJBQU0sU0FBUzs7aUJBQ1o7O0FBRWIsaUJBQWUsRUFBQSx5QkFBQyxLQUFLLEVBQUU7QUFDckIsUUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxRQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUN6QixRQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDO0FBQ3hELFFBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0MsU0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFDMUIsU0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQ2hDLFFBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsV0FBTyxJQUFJLENBQUM7R0FDYjs7Q0FFRjs7Ozs7OztJQ2RNLGNBQWMsMkJBQU0sa0JBQWtCOztJQUN0QyxpQkFBaUIsMkJBQU0scUJBQXFCOztJQUMzQyxZQUFZLFdBQU8sd0JBQXdCLEVBQTNDLFlBQVk7O0FBRXBCLElBQUcsTUFBTSxFQUFDO0FBQ1IsUUFBTSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDdkMsUUFBTSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0NBQzlDO2lCQUNjO0FBQ2IsZ0JBQWMsRUFBZCxjQUFjO0FBQ2QsbUJBQWlCLEVBQWpCLGlCQUFpQjtBQUNqQixjQUFZLEVBQVosWUFBWTtDQUNiIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Jvb3RzdHJhcFRhYmxlLCBUYWJsZUhlYWRlckNvbHVtbn0gZnJvbSAncmVhY3QtYm9vdHN0cmFwLXRhYmxlJztcblxudmFyIHByb2R1Y3RzID0gW107XG5cbmZ1bmN0aW9uIGFkZFByb2R1Y3RzKHF1YW50aXR5KSB7XG4gIHZhciBzdGFydElkID0gcHJvZHVjdHMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHF1YW50aXR5OyBpKyspIHtcbiAgICB2YXIgaWQgPSBzdGFydElkICsgaTtcbiAgICBwcm9kdWN0cy5wdXNoKHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIG5hbWU6IFwiSXRlbSBuYW1lIFwiICsgaWQsXG4gICAgICBwcmljZTogMTAwICsgaVxuICAgIH0pO1xuICB9XG59XG5cbmFkZFByb2R1Y3RzKDcwKTtcblxuZnVuY3Rpb24gb25Sb3dTZWxlY3Qocm93LCBpc1NlbGVjdGVkKXtcbiAgY29uc29sZS5sb2cocm93KTtcbiAgY29uc29sZS5sb2coXCJzZWxlY3RlZDogXCIgKyBpc1NlbGVjdGVkKVxufVxuXG5mdW5jdGlvbiBvblNlbGVjdEFsbChpc1NlbGVjdGVkKXtcbiAgY29uc29sZS5sb2coXCJpcyBzZWxlY3QgYWxsOiBcIiArIGlzU2VsZWN0ZWQpO1xufVxuXG5mdW5jdGlvbiBvbkFmdGVyU2F2ZUNlbGwocm93LCBjZWxsTmFtZSwgY2VsbFZhbHVlKXtcbiAgY29uc29sZS5sb2coXCJTYXZlIGNlbGwgJ1wiK2NlbGxOYW1lK1wiJyB3aXRoIHZhbHVlICdcIitjZWxsVmFsdWUrXCInXCIpO1xuICBjb25zb2xlLmxvZyhcIlRodyB3aG9sZSByb3cgOlwiKTtcbiAgY29uc29sZS5sb2cocm93KTtcbn1cblxuZnVuY3Rpb24gb25BZnRlclRhYmxlQ29tcGxldGUoKXtcbiAgY29uc29sZS5sb2coJ1RhYmxlIHJlbmRlciBjb21wbGV0ZS4nKTtcbn1cblxuZnVuY3Rpb24gb25BZnRlckRlbGV0ZVJvdyhyb3dLZXlzKXtcbiAgY29uc29sZS5sb2coXCJvbkFmdGVyRGVsZXRlUm93XCIpO1xuICBjb25zb2xlLmxvZyhyb3dLZXlzKTtcbn1cblxuZnVuY3Rpb24gb25BZnRlckluc2VydFJvdyhyb3cpe1xuICBjb25zb2xlLmxvZyhcIm9uQWZ0ZXJJbnNlcnRSb3dcIik7XG4gIGNvbnNvbGUubG9nKHJvdyk7XG59XG5cbnZhciBzZWxlY3RSb3dQcm9wID0ge1xuICBtb2RlOiBcImNoZWNrYm94XCIsXG4gIGNsaWNrVG9TZWxlY3Q6IHRydWUsXG4gIC8vIGhpZGVTZWxlY3RDb2x1bW46IHRydWUsIC8veW91IGNhbiBoaWRlIHNlbGVjdCBjb2x1bW4sIGlmIHlvdSBlbmFibGUgY2xpY2tUb1NlbGVjdFxuICBzZWxlY3RlZDogW10sIC8vZGVmYXVsdCBzZWxlY3Qgb24gdGFibGVcbiAgYmdDb2xvcjogXCJyZ2IoMjM4LCAxOTMsIDIxMylcIixcbiAgb25TZWxlY3Q6IG9uUm93U2VsZWN0LFxuICBvblNlbGVjdEFsbDogb25TZWxlY3RBbGxcbn07XG5cbnZhciBjZWxsRWRpdFByb3AgPSB7XG4gIG1vZGU6IFwiY2xpY2tcIixcbiAgYmx1clRvU2F2ZTogdHJ1ZSxcbiAgYWZ0ZXJTYXZlQ2VsbDogb25BZnRlclNhdmVDZWxsXG59O1xuXG52YXIgb3B0aW9ucyA9IHtcbiAgc29ydE5hbWU6IFwibmFtZVwiLCAgLy9kZWZhdWx0IHNvcnQgY29sdW1uIG5hbWVcbiAgc29ydE9yZGVyOiBcImRlc2NcIiwgIC8vZGVmYXVsdCBzb3J0IG9yZGVyXG4gIGFmdGVyVGFibGVDb21wbGV0ZTogb25BZnRlclRhYmxlQ29tcGxldGUsIC8vIEEgaG9vayBmb3IgYWZ0ZXIgdGFibGUgcmVuZGVyIGNvbXBsZXRlLlxuICBhZnRlckRlbGV0ZVJvdzogb25BZnRlckRlbGV0ZVJvdywgIC8vIEEgaG9vayBmb3IgYWZ0ZXIgZHJvcGluZyByb3dzLlxuICBhZnRlckluc2VydFJvdzogb25BZnRlckluc2VydFJvdyAgIC8vIEEgaG9vayBmb3IgYWZ0ZXIgaW5zZXJ0IHJvd3Ncbn07XG5cblxuZnVuY3Rpb24gcHJpY2VGb3JtYXR0ZXIoY2VsbCwgcm93KXtcbiAgcmV0dXJuICc8aSBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tdXNkXCI+PC9pPiAnICsgY2VsbDtcbn1cblxuUmVhY3QucmVuZGVyKFxuICA8Qm9vdHN0cmFwVGFibGUgZGF0YT17cHJvZHVjdHN9IHN0cmlwZWQ9e3RydWV9IGhvdmVyPXt0cnVlfSBwYWdpbmF0aW9uPXt0cnVlfSBzZWxlY3RSb3c9e3NlbGVjdFJvd1Byb3B9IGNlbGxFZGl0PXtjZWxsRWRpdFByb3B9XG4gICAgICAgICAgICAgICAgICBpbnNlcnRSb3c9e3RydWV9IGRlbGV0ZVJvdz17dHJ1ZX0gc2VhcmNoPXt0cnVlfSBjb2x1bW5GaWx0ZXI9e3RydWV9IG9wdGlvbnM9e29wdGlvbnN9PlxuICAgICAgPFRhYmxlSGVhZGVyQ29sdW1uIGRhdGFGaWVsZD1cImlkXCIgZGF0YUFsaWduPVwiY2VudGVyXCIgZGF0YVNvcnQ9e3RydWV9IGlzS2V5PXt0cnVlfT5Qcm9kdWN0IElEPC9UYWJsZUhlYWRlckNvbHVtbj5cbiAgICAgIDxUYWJsZUhlYWRlckNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgZGF0YVNvcnQ9e3RydWV9PlByb2R1Y3QgTmFtZTwvVGFibGVIZWFkZXJDb2x1bW4+XG4gICAgICA8VGFibGVIZWFkZXJDb2x1bW4gZGF0YUZpZWxkPVwicHJpY2VcIiBkYXRhRm9ybWF0PXtwcmljZUZvcm1hdHRlcn0gZWRpdGFibGU9e2ZhbHNlfT5Qcm9kdWN0IFByaWNlPC9UYWJsZUhlYWRlckNvbHVtbj5cbiAgPC9Cb290c3RyYXBUYWJsZT4sXG5cdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmFzaWNcIilcbik7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbkV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHMuZXJyb3IgfHxcbiAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7XG4gICAgICBlciA9IGFyZ3VtZW50c1sxXTtcbiAgICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgICAgfVxuICAgICAgdGhyb3cgVHlwZUVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LicpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgLy8gZmFzdCBjYXNlc1xuICAgICAgY2FzZSAxOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gc2xvd2VyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKylcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuXG4gICAgbGlzdGVuZXJzID0gaGFuZGxlci5zbGljZSgpO1xuICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG07XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgaWYgKHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lcilcbiAgICB0aGlzLmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgaXNGdW5jdGlvbihsaXN0ZW5lci5saXN0ZW5lcikgP1xuICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgZWxzZSBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlXG4gICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gW3RoaXMuX2V2ZW50c1t0eXBlXSwgbGlzdGVuZXJdO1xuXG4gIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pICYmICF0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkKSB7XG4gICAgdmFyIG07XG4gICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9tYXhMaXN0ZW5lcnMpKSB7XG4gICAgICBtID0gdGhpcy5fbWF4TGlzdGVuZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gICAgfVxuXG4gICAgaWYgKG0gJiYgbSA+IDAgJiYgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCA+IG0pIHtcbiAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcignKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgJyArXG4gICAgICAgICAgICAgICAgICAgICdsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAnVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCk7XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUudHJhY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gbm90IHN1cHBvcnRlZCBpbiBJRSAxMFxuICAgICAgICBjb25zb2xlLnRyYWNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIHZhciBmaXJlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGcoKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBnKTtcblxuICAgIGlmICghZmlyZWQpIHtcbiAgICAgIGZpcmVkID0gdHJ1ZTtcbiAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgZy5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICB0aGlzLm9uKHR5cGUsIGcpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWRcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbGlzdCwgcG9zaXRpb24sIGxlbmd0aCwgaTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICByZXR1cm4gdGhpcztcblxuICBsaXN0ID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuICBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgcG9zaXRpb24gPSAtMTtcblxuICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHxcbiAgICAgIChpc0Z1bmN0aW9uKGxpc3QubGlzdGVuZXIpICYmIGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG5cbiAgfSBlbHNlIGlmIChpc09iamVjdChsaXN0KSkge1xuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tID4gMDspIHtcbiAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fFxuICAgICAgICAgIChsaXN0W2ldLmxpc3RlbmVyICYmIGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICByZXR1cm4gdGhpcztcblxuICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgbGlzdC5sZW5ndGggPSAwO1xuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGlzdC5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGtleSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgaWYgKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIGVsc2UgaWYgKHRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBmb3IgKGtleSBpbiB0aGlzLl9ldmVudHMpIHtcbiAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzRnVuY3Rpb24obGlzdGVuZXJzKSkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMSUZPIG9yZGVyXG4gICAgd2hpbGUgKGxpc3RlbmVycy5sZW5ndGgpXG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tsaXN0ZW5lcnMubGVuZ3RoIC0gMV0pO1xuICB9XG4gIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIHJldDtcbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICByZXQgPSBbXTtcbiAgZWxzZSBpZiAoaXNGdW5jdGlvbih0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIHJldCA9IFt0aGlzLl9ldmVudHNbdHlwZV1dO1xuICBlbHNlXG4gICAgcmV0ID0gdGhpcy5fZXZlbnRzW3R5cGVdLnNsaWNlKCk7XG4gIHJldHVybiByZXQ7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgdmFyIHJldDtcbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1t0eXBlXSlcbiAgICByZXQgPSAwO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKGVtaXR0ZXIuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gMTtcbiAgZWxzZVxuICAgIHJldCA9IGVtaXR0ZXIuX2V2ZW50c1t0eXBlXS5sZW5ndGg7XG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRRdWV1ZTtcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgICAgICAgICAgY3VycmVudFF1ZXVlW2ldKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xufVxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICBxdWV1ZS5wdXNoKGZ1bik7XG4gICAgaWYgKCFkcmFpbmluZykge1xuICAgICAgICBzZXRUaW1lb3V0KGRyYWluUXVldWUsIDApO1xuICAgIH1cbn07XG5cbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG4vLyBUT0RPKHNodHlsbWFuKVxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyohXG4gIENvcHlyaWdodCAoYykgMjAxNSBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuXG5mdW5jdGlvbiBjbGFzc05hbWVzKCkge1xuXHR2YXIgY2xhc3NlcyA9ICcnO1xuXHR2YXIgYXJnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0YXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdGlmICghYXJnKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBhcmcgfHwgJ251bWJlcicgPT09IHR5cGVvZiBhcmcpIHtcblx0XHRcdGNsYXNzZXMgKz0gJyAnICsgYXJnO1xuXHRcdH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblx0XHRcdGNsYXNzZXMgKz0gJyAnICsgY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH0gZWxzZSBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiBhcmcpIHtcblx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0aWYgKCFhcmcuaGFzT3duUHJvcGVydHkoa2V5KSB8fCAhYXJnW2tleV0pIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjbGFzc2VzICs9ICcgJyArIGtleTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGNsYXNzZXMuc3Vic3RyKDEpO1xufVxuXG4vLyBzYWZlbHkgZXhwb3J0IGNsYXNzTmFtZXMgZm9yIG5vZGUgLyBicm93c2VyaWZ5XG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xufVxuXG4vLyBzYWZlbHkgZXhwb3J0IGNsYXNzTmFtZXMgZm9yIFJlcXVpcmVKU1xuaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnICYmIGRlZmluZS5hbWQpIHtcblx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHR9KTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBBdXRvRm9jdXNNaXhpblxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBmb2N1c05vZGUgPSByZXF1aXJlKFwiLi9mb2N1c05vZGVcIik7XG5cbnZhciBBdXRvRm9jdXNNaXhpbiA9IHtcbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmF1dG9Gb2N1cykge1xuICAgICAgZm9jdXNOb2RlKHRoaXMuZ2V0RE9NTm9kZSgpKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXV0b0ZvY3VzTWl4aW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoXCIuL0V2ZW50UHJvcGFnYXRvcnNcIik7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcbnZhciBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUgPSByZXF1aXJlKFwiLi9GYWxsYmFja0NvbXBvc2l0aW9uU3RhdGVcIik7XG52YXIgU3ludGhldGljQ29tcG9zaXRpb25FdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnRcIik7XG52YXIgU3ludGhldGljSW5wdXRFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0lucHV0RXZlbnRcIik7XG5cbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xuXG52YXIgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJdOyAvLyBUYWIsIFJldHVybiwgRXNjLCBTcGFjZVxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG5cbnZhciBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gKFxuICBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiZcbiAgJ0NvbXBvc2l0aW9uRXZlbnQnIGluIHdpbmRvd1xuKTtcblxudmFyIGRvY3VtZW50TW9kZSA9IG51bGw7XG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB7XG4gIGRvY3VtZW50TW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn1cblxuLy8gV2Via2l0IG9mZmVycyBhIHZlcnkgdXNlZnVsIGB0ZXh0SW5wdXRgIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgdG9cbi8vIGRpcmVjdGx5IHJlcHJlc2VudCBgYmVmb3JlSW5wdXRgLiBUaGUgSUUgYHRleHRpbnB1dGAgZXZlbnQgaXMgbm90IGFzXG4vLyB1c2VmdWwsIHNvIHdlIGRvbid0IHVzZSBpdC5cbnZhciBjYW5Vc2VUZXh0SW5wdXRFdmVudCA9IChcbiAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmXG4gICdUZXh0RXZlbnQnIGluIHdpbmRvdyAmJlxuICAhZG9jdW1lbnRNb2RlICYmXG4gICFpc1ByZXN0bygpXG4pO1xuXG4vLyBJbiBJRTkrLCB3ZSBoYXZlIGFjY2VzcyB0byBjb21wb3NpdGlvbiBldmVudHMsIGJ1dCB0aGUgZGF0YSBzdXBwbGllZFxuLy8gYnkgdGhlIG5hdGl2ZSBjb21wb3NpdGlvbmVuZCBldmVudCBtYXkgYmUgaW5jb3JyZWN0LiBKYXBhbmVzZSBpZGVvZ3JhcGhpY1xuLy8gc3BhY2VzLCBmb3IgaW5zdGFuY2UgKFxcdTMwMDApIGFyZSBub3QgcmVjb3JkZWQgY29ycmVjdGx5LlxudmFyIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhID0gKFxuICBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiZcbiAgKFxuICAgICghY2FuVXNlQ29tcG9zaXRpb25FdmVudCB8fCBkb2N1bWVudE1vZGUgJiYgZG9jdW1lbnRNb2RlID4gOCAmJiBkb2N1bWVudE1vZGUgPD0gMTEpXG4gIClcbik7XG5cbi8qKlxuICogT3BlcmEgPD0gMTIgaW5jbHVkZXMgVGV4dEV2ZW50IGluIHdpbmRvdywgYnV0IGRvZXMgbm90IGZpcmVcbiAqIHRleHQgaW5wdXQgZXZlbnRzLiBSZWx5IG9uIGtleXByZXNzIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIGlzUHJlc3RvKCkge1xuICB2YXIgb3BlcmEgPSB3aW5kb3cub3BlcmE7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9wZXJhID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvcGVyYS52ZXJzaW9uID09PSAnZnVuY3Rpb24nICYmXG4gICAgcGFyc2VJbnQob3BlcmEudmVyc2lvbigpLCAxMCkgPD0gMTJcbiAgKTtcbn1cblxudmFyIFNQQUNFQkFSX0NPREUgPSAzMjtcbnZhciBTUEFDRUJBUl9DSEFSID0gU3RyaW5nLmZyb21DaGFyQ29kZShTUEFDRUJBUl9DT0RFKTtcblxudmFyIHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzO1xuXG4vLyBFdmVudHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgbmFtZXMuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgYmVmb3JlSW5wdXQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQmVmb3JlSW5wdXQ6IG51bGx9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25CZWZvcmVJbnB1dENhcHR1cmU6IG51bGx9KVxuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uRW5kLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlQcmVzcyxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wVGV4dElucHV0LFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BQYXN0ZVxuICAgIF1cbiAgfSxcbiAgY29tcG9zaXRpb25FbmQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQ29tcG9zaXRpb25FbmQ6IG51bGx9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Db21wb3NpdGlvbkVuZENhcHR1cmU6IG51bGx9KVxuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEJsdXIsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uRW5kLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlQcmVzcyxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5VXAsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlRG93blxuICAgIF1cbiAgfSxcbiAgY29tcG9zaXRpb25TdGFydDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Db21wb3NpdGlvblN0YXJ0OiBudWxsfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ29tcG9zaXRpb25TdGFydENhcHR1cmU6IG51bGx9KVxuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEJsdXIsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uU3RhcnQsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleURvd24sXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlVcCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duXG4gICAgXVxuICB9LFxuICBjb21wb3NpdGlvblVwZGF0ZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Db21wb3NpdGlvblVwZGF0ZTogbnVsbH0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNvbXBvc2l0aW9uVXBkYXRlQ2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25VcGRhdGUsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleURvd24sXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlVcCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duXG4gICAgXVxuICB9XG59O1xuXG4vLyBUcmFjayB3aGV0aGVyIHdlJ3ZlIGV2ZXIgaGFuZGxlZCBhIGtleXByZXNzIG9uIHRoZSBzcGFjZSBrZXkuXG52YXIgaGFzU3BhY2VLZXlwcmVzcyA9IGZhbHNlO1xuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGEgbmF0aXZlIGtleXByZXNzIGV2ZW50IGlzIGFzc3VtZWQgdG8gYmUgYSBjb21tYW5kLlxuICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIEZpcmVmb3ggZmlyZXMgYGtleXByZXNzYCBldmVudHMgZm9yIGtleSBjb21tYW5kc1xuICogKGN1dCwgY29weSwgc2VsZWN0LWFsbCwgZXRjLikgZXZlbiB0aG91Z2ggbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLlxuICovXG5mdW5jdGlvbiBpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkge1xuICByZXR1cm4gKFxuICAgIChuYXRpdmVFdmVudC5jdHJsS2V5IHx8IG5hdGl2ZUV2ZW50LmFsdEtleSB8fCBuYXRpdmVFdmVudC5tZXRhS2V5KSAmJlxuICAgIC8vIGN0cmxLZXkgJiYgYWx0S2V5IGlzIGVxdWl2YWxlbnQgdG8gQWx0R3IsIGFuZCBpcyBub3QgYSBjb21tYW5kLlxuICAgICEobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpXG4gICk7XG59XG5cblxuLyoqXG4gKiBUcmFuc2xhdGUgbmF0aXZlIHRvcCBsZXZlbCBldmVudHMgaW50byBldmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKHRvcExldmVsVHlwZSkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvblN0YXJ0OlxuICAgICAgcmV0dXJuIGV2ZW50VHlwZXMuY29tcG9zaXRpb25TdGFydDtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25FbmQ6XG4gICAgICByZXR1cm4gZXZlbnRUeXBlcy5jb21wb3NpdGlvbkVuZDtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25VcGRhdGU6XG4gICAgICByZXR1cm4gZXZlbnRUeXBlcy5jb21wb3NpdGlvblVwZGF0ZTtcbiAgfVxufVxuXG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIGJlc3QtZ3Vlc3MgbW9kZWwgdGhpbmsgdGhpcyBldmVudCBzaWduaWZpZXMgdGhhdFxuICogY29tcG9zaXRpb24gaGFzIGJlZ3VuP1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4gKFxuICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duICYmXG4gICAgbmF0aXZlRXZlbnQua2V5Q29kZSA9PT0gU1RBUlRfS0VZQ09ERVxuICApO1xufVxuXG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIG1vZGUgdGhpbmsgdGhhdCB0aGlzIGV2ZW50IGlzIHRoZSBlbmQgb2YgY29tcG9zaXRpb24/XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlVcDpcbiAgICAgIC8vIENvbW1hbmQga2V5cyBpbnNlcnQgb3IgY2xlYXIgSU1FIGlucHV0LlxuICAgICAgcmV0dXJuIChFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKSAhPT0gLTEpO1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duOlxuICAgICAgLy8gRXhwZWN0IElNRSBrZXlDb2RlIG9uIGVhY2gga2V5ZG93bi4gSWYgd2UgZ2V0IGFueSBvdGhlclxuICAgICAgLy8gY29kZSB3ZSBtdXN0IGhhdmUgZXhpdGVkIGVhcmxpZXIuXG4gICAgICByZXR1cm4gKG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREUpO1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlQcmVzczpcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duOlxuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BCbHVyOlxuICAgICAgLy8gRXZlbnRzIGFyZSBub3QgcG9zc2libGUgd2l0aG91dCBjYW5jZWxsaW5nIElNRS5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBHb29nbGUgSW5wdXQgVG9vbHMgcHJvdmlkZXMgY29tcG9zaXRpb24gZGF0YSB2aWEgYSBDdXN0b21FdmVudCxcbiAqIHdpdGggdGhlIGBkYXRhYCBwcm9wZXJ0eSBwb3B1bGF0ZWQgaW4gdGhlIGBkZXRhaWxgIG9iamVjdC4gSWYgdGhpc1xuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBldmVudCBvYmplY3QsIHVzZSBpdC4gSWYgbm90LCB0aGlzIGlzIGEgcGxhaW5cbiAqIGNvbXBvc2l0aW9uIGV2ZW50IGFuZCB3ZSBoYXZlIG5vdGhpbmcgc3BlY2lhbCB0byBleHRyYWN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGV0YWlsID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuICBpZiAodHlwZW9mIGRldGFpbCA9PT0gJ29iamVjdCcgJiYgJ2RhdGEnIGluIGRldGFpbCkge1xuICAgIHJldHVybiBkZXRhaWwuZGF0YTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gVHJhY2sgdGhlIGN1cnJlbnQgSU1FIGNvbXBvc2l0aW9uIGZhbGxiYWNrIG9iamVjdCwgaWYgYW55LlxudmFyIGN1cnJlbnRDb21wb3NpdGlvbiA9IG51bGw7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoXG4gIHRvcExldmVsVHlwZSxcbiAgdG9wTGV2ZWxUYXJnZXQsXG4gIHRvcExldmVsVGFyZ2V0SUQsXG4gIG5hdGl2ZUV2ZW50XG4pIHtcbiAgdmFyIGV2ZW50VHlwZTtcbiAgdmFyIGZhbGxiYWNrRGF0YTtcblxuICBpZiAoY2FuVXNlQ29tcG9zaXRpb25FdmVudCkge1xuICAgIGV2ZW50VHlwZSA9IGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKHRvcExldmVsVHlwZSk7XG4gIH0gZWxzZSBpZiAoIWN1cnJlbnRDb21wb3NpdGlvbikge1xuICAgIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgZXZlbnRUeXBlID0gZXZlbnRUeXBlcy5jb21wb3NpdGlvblN0YXJ0O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtcbiAgICBldmVudFR5cGUgPSBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kO1xuICB9XG5cbiAgaWYgKCFldmVudFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSkge1xuICAgIC8vIFRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGlzIHN0b3JlZCBzdGF0aWNhbGx5IGFuZCBtdXN0IG5vdCBiZVxuICAgIC8vIG92ZXJ3cml0dGVuIHdoaWxlIGNvbXBvc2l0aW9uIGNvbnRpbnVlcy5cbiAgICBpZiAoIWN1cnJlbnRDb21wb3NpdGlvbiAmJiBldmVudFR5cGUgPT09IGV2ZW50VHlwZXMuY29tcG9zaXRpb25TdGFydCkge1xuICAgICAgY3VycmVudENvbXBvc2l0aW9uID0gRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlLmdldFBvb2xlZCh0b3BMZXZlbFRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IGV2ZW50VHlwZXMuY29tcG9zaXRpb25FbmQpIHtcbiAgICAgIGlmIChjdXJyZW50Q29tcG9zaXRpb24pIHtcbiAgICAgICAgZmFsbGJhY2tEYXRhID0gY3VycmVudENvbXBvc2l0aW9uLmdldERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LmdldFBvb2xlZChcbiAgICBldmVudFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICBuYXRpdmVFdmVudFxuICApO1xuXG4gIGlmIChmYWxsYmFja0RhdGEpIHtcbiAgICAvLyBJbmplY3QgZGF0YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5cbiAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHByb3BlcnR5IG9mIG5hdGl2ZSBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlLlxuICAgIGV2ZW50LmRhdGEgPSBmYWxsYmFja0RhdGE7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1c3RvbURhdGEgPSBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgZXZlbnQuZGF0YSA9IGN1c3RvbURhdGE7XG4gICAgfVxuICB9XG5cbiAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGlzIGBiZWZvcmVJbnB1dGAgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvbkVuZDpcbiAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3M6XG4gICAgICAvKipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwgb3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAgICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFyIGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAgICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZvaWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hpY2ggPSBuYXRpdmVFdmVudC53aGljaDtcbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09ERSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BUZXh0SW5wdXQ6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7XG5cbiAgICAgIC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwgaW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5Y29kZXMsIHNvIHdlIG5lZWQgdG8gYmxhY2tsaXN0IGl0LlxuICAgICAgaWYgKGNoYXJzID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBGb3Igb3RoZXIgbmF0aXZlIGV2ZW50IHR5cGVzLCBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJpbmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBmYWxsYmFjayBzdHJpbmcgZm9yIHRoaXMgYGJlZm9yZUlucHV0YCBldmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBjb21wb3NpbmcgKElNRSkgYW5kIHVzaW5nIGEgZmFsbGJhY2sgdG8gZG8gc28sXG4gIC8vIHRyeSB0byBleHRyYWN0IHRoZSBjb21wb3NlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZhbGxiYWNrIG9iamVjdC5cbiAgaWYgKGN1cnJlbnRDb21wb3NpdGlvbikge1xuICAgIGlmIChcbiAgICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvbkVuZCB8fFxuICAgICAgaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpXG4gICAgKSB7XG4gICAgICB2YXIgY2hhcnMgPSBjdXJyZW50Q29tcG9zaXRpb24uZ2V0RGF0YSgpO1xuICAgICAgRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlLnJlbGVhc2UoY3VycmVudENvbXBvc2l0aW9uKTtcbiAgICAgIGN1cnJlbnRDb21wb3NpdGlvbiA9IG51bGw7XG4gICAgICByZXR1cm4gY2hhcnM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wUGFzdGU6XG4gICAgICAvLyBJZiBhIHBhc3RlIGV2ZW50IG9jY3VycyBhZnRlciBhIGtleXByZXNzLCB0aHJvdyBvdXQgdGhlIGlucHV0XG4gICAgICAvLyBjaGFycy4gUGFzdGUgZXZlbnRzIHNob3VsZCBub3QgbGVhZCB0byBCZWZvcmVJbnB1dCBldmVudHMuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3M6XG4gICAgICAvKipcbiAgICAgICAqIEFzIG9mIHYyNywgRmlyZWZveCBtYXkgZmlyZSBrZXlwcmVzcyBldmVudHMgZXZlbiB3aGVuIG5vIGNoYXJhY3RlclxuICAgICAgICogd2lsbCBiZSBpbnNlcnRlZC4gQSBmZXcgcG9zc2liaWxpdGllczpcbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgYDBgLiBBcnJvdyBrZXlzLCBFc2Mga2V5LCBldGMuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgbm8gY2hhciBpcyBhdmFpbGFibGUuXG4gICAgICAgKiAgIEV4OiAnQWx0R3IgKyBkYCBpbiBQb2xpc2guIFRoZXJlIGlzIG5vIG1vZGlmaWVkIGNoYXJhY3RlciBmb3JcbiAgICAgICAqICAgdGhpcyBrZXkgY29tYmluYXRpb24gYW5kIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuICAgICAgICogICBkb2N1bWVudCwgYnV0IEZGIGZpcmVzIHRoZSBrZXlwcmVzcyBmb3IgY2hhciBjb2RlIGAxMDBgIGFueXdheS5cbiAgICAgICAqICAgTm8gYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IGEgY29tbWFuZCBjb21iaW5hdGlvbiBpc1xuICAgICAgICogICBiZWluZyB1c2VkLiBFeDogYENtZCtDYC4gTm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLCBhbmQgbm9cbiAgICAgICAqICAgYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICovXG4gICAgICBpZiAobmF0aXZlRXZlbnQud2hpY2ggJiYgIWlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudC53aGljaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25FbmQ6XG4gICAgICByZXR1cm4gdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPyBudWxsIDogbmF0aXZlRXZlbnQuZGF0YTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0IGEgU3ludGhldGljSW5wdXRFdmVudCBmb3IgYGJlZm9yZUlucHV0YCwgYmFzZWQgb24gZWl0aGVyIG5hdGl2ZVxuICogYHRleHRJbnB1dGAgb3IgZmFsbGJhY2sgYmVoYXZpb3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoXG4gIHRvcExldmVsVHlwZSxcbiAgdG9wTGV2ZWxUYXJnZXQsXG4gIHRvcExldmVsVGFyZ2V0SUQsXG4gIG5hdGl2ZUV2ZW50XG4pIHtcbiAgdmFyIGNoYXJzO1xuXG4gIGlmIChjYW5Vc2VUZXh0SW5wdXRFdmVudCkge1xuICAgIGNoYXJzID0gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBjaGFycyA9IGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgfVxuXG4gIC8vIElmIG5vIGNoYXJhY3RlcnMgYXJlIGJlaW5nIGluc2VydGVkLCBubyBCZWZvcmVJbnB1dCBldmVudCBzaG91bGRcbiAgLy8gYmUgZmlyZWQuXG4gIGlmICghY2hhcnMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBldmVudCA9IFN5bnRoZXRpY0lucHV0RXZlbnQuZ2V0UG9vbGVkKFxuICAgIGV2ZW50VHlwZXMuYmVmb3JlSW5wdXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICBuYXRpdmVFdmVudFxuICApO1xuXG4gIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBgb25CZWZvcmVJbnB1dGAgZXZlbnQgdG8gbWF0Y2hcbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1LyNldmVudHMtaW5wdXRldmVudHMuXG4gKlxuICogVGhpcyBldmVudCBwbHVnaW4gaXMgYmFzZWQgb24gdGhlIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudFxuICogYXZhaWxhYmxlIGluIENocm9tZSwgU2FmYXJpLCBPcGVyYSwgYW5kIElFLiBUaGlzIGV2ZW50IGZpcmVzIGFmdGVyXG4gKiBgb25LZXlQcmVzc2AgYW5kIGBvbkNvbXBvc2l0aW9uRW5kYCwgYnV0IGJlZm9yZSBgb25JbnB1dGAuXG4gKlxuICogYGJlZm9yZUlucHV0YCBpcyBzcGVjJ2QgYnV0IG5vdCBpbXBsZW1lbnRlZCBpbiBhbnkgYnJvd3NlcnMsIGFuZFxuICogdGhlIGBpbnB1dGAgZXZlbnQgZG9lcyBub3QgcHJvdmlkZSBhbnkgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaGFzXG4gKiBhY3R1YWxseSBiZWVuIGFkZGVkLCBjb250cmFyeSB0byB0aGUgc3BlYy4gVGh1cywgYHRleHRJbnB1dGAgaXMgdGhlIGJlc3RcbiAqIGF2YWlsYWJsZSBldmVudCB0byBpZGVudGlmeSB0aGUgY2hhcmFjdGVycyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBpbnNlcnRlZFxuICogaW50byB0aGUgdGFyZ2V0IG5vZGUuXG4gKlxuICogVGhpcyBwbHVnaW4gaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgYGNvbXBvc2l0aW9uYCBldmVudHMsIHRodXNcbiAqIGFsbG93aW5nIHVzIHRvIHNoYXJlIGNvbXBvc2l0aW9uIGZhbGxiYWNrIGNvZGUgZm9yIGJvdGggYGJlZm9yZUlucHV0YCBhbmRcbiAqIGBjb21wb3NpdGlvbmAgZXZlbnQgdHlwZXMuXG4gKi9cbnZhciBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luID0ge1xuXG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzfVxuICAgKi9cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24oXG4gICAgdG9wTGV2ZWxUeXBlLFxuICAgIHRvcExldmVsVGFyZ2V0LFxuICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgbmF0aXZlRXZlbnRcbiAgKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KFxuICAgICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgKSxcbiAgICAgIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KFxuICAgICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgKVxuICAgIF07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQmVmb3JlSW5wdXRFdmVudFBsdWdpbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBDU1NQcm9wZXJ0eVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuXG4gKi9cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBib3hGbGV4OiB0cnVlLFxuICBib3hGbGV4R3JvdXA6IHRydWUsXG4gIGNvbHVtbkNvdW50OiB0cnVlLFxuICBmbGV4OiB0cnVlLFxuICBmbGV4R3JvdzogdHJ1ZSxcbiAgZmxleFBvc2l0aXZlOiB0cnVlLFxuICBmbGV4U2hyaW5rOiB0cnVlLFxuICBmbGV4TmVnYXRpdmU6IHRydWUsXG4gIGZvbnRXZWlnaHQ6IHRydWUsXG4gIGxpbmVDbGFtcDogdHJ1ZSxcbiAgbGluZUhlaWdodDogdHJ1ZSxcbiAgb3BhY2l0eTogdHJ1ZSxcbiAgb3JkZXI6IHRydWUsXG4gIG9ycGhhbnM6IHRydWUsXG4gIHdpZG93czogdHJ1ZSxcbiAgekluZGV4OiB0cnVlLFxuICB6b29tOiB0cnVlLFxuXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IHRydWUsXG4gIHN0cm9rZU9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZVdpZHRoOiB0cnVlXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggdmVuZG9yLXNwZWNpZmljIHByZWZpeCwgZWc6IFdlYmtpdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBzdHlsZSBuYW1lLCBlZzogdHJhbnNpdGlvbkR1cmF0aW9uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0eWxlIG5hbWUgcHJlZml4ZWQgd2l0aCBgcHJlZml4YCwgcHJvcGVybHkgY2FtZWxDYXNlZCwgZWc6XG4gKiBXZWJraXRUcmFuc2l0aW9uRHVyYXRpb25cbiAqL1xuZnVuY3Rpb24gcHJlZml4S2V5KHByZWZpeCwga2V5KSB7XG4gIHJldHVybiBwcmVmaXggKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc3Vic3RyaW5nKDEpO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgc3R5bGUgbmFtZXMgdGhhdCBtYXkgY29tZSBwYXNzZWQgaW4gcHJlZml4ZWQgYnkgYWRkaW5nIHBlcm11dGF0aW9uc1xuICogb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG52YXIgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdtcycsICdNb3onLCAnTyddO1xuXG4vLyBVc2luZyBPYmplY3Qua2V5cyBoZXJlLCBvciBlbHNlIHRoZSB2YW5pbGxhIGZvci1pbiBsb29wIG1ha2VzIElFOCBnbyBpbnRvIGFuXG4vLyBpbmZpbml0ZSBsb29wLCBiZWNhdXNlIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIG5ld2x5IGFkZGVkIHByb3BzIHRvby5cbk9iamVjdC5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICBwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIGlzVW5pdGxlc3NOdW1iZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gaXNVbml0bGVzc051bWJlcltwcm9wXTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBNb3N0IHN0eWxlIHByb3BlcnRpZXMgY2FuIGJlIHVuc2V0IGJ5IGRvaW5nIC5zdHlsZVtwcm9wXSA9ICcnIGJ1dCBJRThcbiAqIGRvZXNuJ3QgbGlrZSBkb2luZyB0aGF0IHdpdGggc2hvcnRoYW5kIHByb3BlcnRpZXMgc28gZm9yIHRoZSBwcm9wZXJ0aWVzIHRoYXRcbiAqIElFOCBicmVha3Mgb24sIHdoaWNoIGFyZSBsaXN0ZWQgaGVyZSwgd2UgaW5zdGVhZCB1bnNldCBlYWNoIG9mIHRoZVxuICogaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLiBTZWUgaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzODUuXG4gKiBUaGUgNC12YWx1ZSAnY2xvY2snIHByb3BlcnRpZXMgbGlrZSBtYXJnaW4sIHBhZGRpbmcsIGJvcmRlci13aWR0aCBzZWVtIHRvXG4gKiBiZWhhdmUgd2l0aG91dCBhbnkgcHJvYmxlbXMuIEN1cmlvdXNseSwgbGlzdC1zdHlsZSB3b3JrcyB0b28gd2l0aG91dCBhbnlcbiAqIHNwZWNpYWwgcHJvZGRpbmcuXG4gKi9cbnZhciBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnMgPSB7XG4gIGJhY2tncm91bmQ6IHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IHRydWUsXG4gICAgYmFja2dyb3VuZFBvc2l0aW9uOiB0cnVlLFxuICAgIGJhY2tncm91bmRSZXBlYXQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlcjoge1xuICAgIGJvcmRlcldpZHRoOiB0cnVlLFxuICAgIGJvcmRlclN0eWxlOiB0cnVlLFxuICAgIGJvcmRlckNvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlckJvdHRvbToge1xuICAgIGJvcmRlckJvdHRvbVdpZHRoOiB0cnVlLFxuICAgIGJvcmRlckJvdHRvbVN0eWxlOiB0cnVlLFxuICAgIGJvcmRlckJvdHRvbUNvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlckxlZnQ6IHtcbiAgICBib3JkZXJMZWZ0V2lkdGg6IHRydWUsXG4gICAgYm9yZGVyTGVmdFN0eWxlOiB0cnVlLFxuICAgIGJvcmRlckxlZnRDb2xvcjogdHJ1ZVxuICB9LFxuICBib3JkZXJSaWdodDoge1xuICAgIGJvcmRlclJpZ2h0V2lkdGg6IHRydWUsXG4gICAgYm9yZGVyUmlnaHRTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJSaWdodENvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlclRvcDoge1xuICAgIGJvcmRlclRvcFdpZHRoOiB0cnVlLFxuICAgIGJvcmRlclRvcFN0eWxlOiB0cnVlLFxuICAgIGJvcmRlclRvcENvbG9yOiB0cnVlXG4gIH0sXG4gIGZvbnQ6IHtcbiAgICBmb250U3R5bGU6IHRydWUsXG4gICAgZm9udFZhcmlhbnQ6IHRydWUsXG4gICAgZm9udFdlaWdodDogdHJ1ZSxcbiAgICBmb250U2l6ZTogdHJ1ZSxcbiAgICBsaW5lSGVpZ2h0OiB0cnVlLFxuICAgIGZvbnRGYW1pbHk6IHRydWVcbiAgfVxufTtcblxudmFyIENTU1Byb3BlcnR5ID0ge1xuICBpc1VuaXRsZXNzTnVtYmVyOiBpc1VuaXRsZXNzTnVtYmVyLFxuICBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnM6IHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDU1NQcm9wZXJ0eTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgQ1NTUHJvcGVydHlPcGVyYXRpb25zXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIENTU1Byb3BlcnR5ID0gcmVxdWlyZShcIi4vQ1NTUHJvcGVydHlcIik7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIGNhbWVsaXplU3R5bGVOYW1lID0gcmVxdWlyZShcIi4vY2FtZWxpemVTdHlsZU5hbWVcIik7XG52YXIgZGFuZ2Vyb3VzU3R5bGVWYWx1ZSA9IHJlcXVpcmUoXCIuL2Rhbmdlcm91c1N0eWxlVmFsdWVcIik7XG52YXIgaHlwaGVuYXRlU3R5bGVOYW1lID0gcmVxdWlyZShcIi4vaHlwaGVuYXRlU3R5bGVOYW1lXCIpO1xudmFyIG1lbW9pemVTdHJpbmdPbmx5ID0gcmVxdWlyZShcIi4vbWVtb2l6ZVN0cmluZ09ubHlcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gbWVtb2l6ZVN0cmluZ09ubHkoZnVuY3Rpb24oc3R5bGVOYW1lKSB7XG4gIHJldHVybiBoeXBoZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKTtcbn0pO1xuXG52YXIgc3R5bGVGbG9hdEFjY2Vzc29yID0gJ2Nzc0Zsb2F0JztcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgLy8gSUU4IG9ubHkgc3VwcG9ydHMgYWNjZXNzaW5nIGNzc0Zsb2F0IChzdGFuZGFyZCkgYXMgc3R5bGVGbG9hdFxuICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmNzc0Zsb2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHlsZUZsb2F0QWNjZXNzb3IgPSAnc3R5bGVGbG9hdCc7XG4gIH1cbn1cblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAvLyAnbXNUcmFuc2Zvcm0nIGlzIGNvcnJlY3QsIGJ1dCB0aGUgb3RoZXIgcHJlZml4ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkXG4gIHZhciBiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4gPSAvXig/OndlYmtpdHxtb3p8bylbQS1aXS87XG5cbiAgLy8gc3R5bGUgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uXG4gIHZhciBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLztcblxuICB2YXIgd2FybmVkU3R5bGVOYW1lcyA9IHt9O1xuICB2YXIgd2FybmVkU3R5bGVWYWx1ZXMgPSB7fTtcblxuICB2YXIgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgZmFsc2UsXG4gICAgICAnVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLFxuICAgICAgbmFtZSxcbiAgICAgIGNhbWVsaXplU3R5bGVOYW1lKG5hbWUpXG4gICAgKSA6IG51bGwpO1xuICB9O1xuXG4gIHZhciB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgZmFsc2UsXG4gICAgICAnVW5zdXBwb3J0ZWQgdmVuZG9yLXByZWZpeGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JyxcbiAgICAgIG5hbWUsXG4gICAgICBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKVxuICAgICkgOiBudWxsKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVWYWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSA9IHRydWU7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBmYWxzZSxcbiAgICAgICdTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkblxcJ3QgY29udGFpbiBhIHNlbWljb2xvbi4gJyArXG4gICAgICAnVHJ5IFwiJXM6ICVzXCIgaW5zdGVhZC4nLFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCAnJylcbiAgICApIDogbnVsbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICovXG4gIHZhciB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIENTUyBwcm9wZXJ0aWVzLlxuICovXG52YXIgQ1NTUHJvcGVydHlPcGVyYXRpb25zID0ge1xuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWFwcGluZyBvZiBzdHlsZSBwcm9wZXJ0aWVzIGZvciB1c2UgYXMgaW5saW5lIHN0eWxlczpcbiAgICpcbiAgICogICA+IGNyZWF0ZU1hcmt1cEZvclN0eWxlcyh7d2lkdGg6ICcyMDBweCcsIGhlaWdodDogMH0pXG4gICAqICAgXCJ3aWR0aDoyMDBweDtoZWlnaHQ6MDtcIlxuICAgKlxuICAgKiBVbmRlZmluZWQgdmFsdWVzIGFyZSBpZ25vcmVkIHNvIHRoYXQgZGVjbGFyYXRpdmUgcHJvZ3JhbW1pbmcgaXMgZWFzaWVyLlxuICAgKiBUaGUgcmVzdWx0IHNob3VsZCBiZSBIVE1MLWVzY2FwZWQgYmVmb3JlIGluc2VydGlvbiBpbnRvIHRoZSBET00uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAgICogQHJldHVybiB7P3N0cmluZ31cbiAgICovXG4gIGNyZWF0ZU1hcmt1cEZvclN0eWxlczogZnVuY3Rpb24oc3R5bGVzKSB7XG4gICAgdmFyIHNlcmlhbGl6ZWQgPSAnJztcbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgd2FyblZhbGlkU3R5bGUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZVZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgc2VyaWFsaXplZCArPSBwcm9jZXNzU3R5bGVOYW1lKHN0eWxlTmFtZSkgKyAnOic7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpICsgJzsnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VyaWFsaXplZCB8fCBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgbXVsdGlwbGUgc3R5bGVzIG9uIGEgbm9kZS4gIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFzXG4gICAqICcnIChlbXB0eSBzdHJpbmcpLCB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICAgKi9cbiAgc2V0VmFsdWVGb3JTdHlsZXM6IGZ1bmN0aW9uKG5vZGUsIHN0eWxlcykge1xuICAgIHZhciBzdHlsZSA9IG5vZGUuc3R5bGU7XG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgd2FyblZhbGlkU3R5bGUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7XG4gICAgICB9XG4gICAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7XG4gICAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICAgIHN0eWxlTmFtZSA9IHN0eWxlRmxvYXRBY2Nlc3NvcjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZVZhbHVlKSB7XG4gICAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGV4cGFuc2lvbiA9IENTU1Byb3BlcnR5LnNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1tzdHlsZU5hbWVdO1xuICAgICAgICBpZiAoZXhwYW5zaW9uKSB7XG4gICAgICAgICAgLy8gU2hvcnRoYW5kIHByb3BlcnR5IHRoYXQgSUU4IHdvbid0IGxpa2UgdW5zZXR0aW5nLCBzbyB1bnNldCBlYWNoXG4gICAgICAgICAgLy8gY29tcG9uZW50IHRvIHBsYWNhdGUgaXRcbiAgICAgICAgICBmb3IgKHZhciBpbmRpdmlkdWFsU3R5bGVOYW1lIGluIGV4cGFuc2lvbikge1xuICAgICAgICAgICAgc3R5bGVbaW5kaXZpZHVhbFN0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ1NTUHJvcGVydHlPcGVyYXRpb25zO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UTFOVFVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1ekxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnUTFOVFVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1elhHNGdLaUJBZEhsd1pXTm9aV05yY3lCemRHRjBhV010YjI1c2VWeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRU5UVTFCeWIzQmxjblI1SUQwZ2NtVnhkV2x5WlNoY0lpNHZRMU5UVUhKdmNHVnlkSGxjSWlrN1hHNTJZWElnUlhobFkzVjBhVzl1Ulc1MmFYSnZibTFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZEZ3aUtUdGNibHh1ZG1GeUlHTmhiV1ZzYVhwbFUzUjViR1ZPWVcxbElEMGdjbVZ4ZFdseVpTaGNJaTR2WTJGdFpXeHBlbVZUZEhsc1pVNWhiV1ZjSWlrN1hHNTJZWElnWkdGdVoyVnliM1Z6VTNSNWJHVldZV3gxWlNBOUlISmxjWFZwY21Vb1hDSXVMMlJoYm1kbGNtOTFjMU4wZVd4bFZtRnNkV1ZjSWlrN1hHNTJZWElnYUhsd2FHVnVZWFJsVTNSNWJHVk9ZVzFsSUQwZ2NtVnhkV2x5WlNoY0lpNHZhSGx3YUdWdVlYUmxVM1I1YkdWT1lXMWxYQ0lwTzF4dWRtRnlJRzFsYlc5cGVtVlRkSEpwYm1kUGJteDVJRDBnY21WeGRXbHlaU2hjSWk0dmJXVnRiMmw2WlZOMGNtbHVaMDl1YkhsY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JuWmhjaUJ3Y205alpYTnpVM1I1YkdWT1lXMWxJRDBnYldWdGIybDZaVk4wY21sdVowOXViSGtvWm5WdVkzUnBiMjRvYzNSNWJHVk9ZVzFsS1NCN1hHNGdJSEpsZEhWeWJpQm9lWEJvWlc1aGRHVlRkSGxzWlU1aGJXVW9jM1I1YkdWT1lXMWxLVHRjYm4wcE8xeHVYRzUyWVhJZ2MzUjViR1ZHYkc5aGRFRmpZMlZ6YzI5eUlEMGdKMk56YzBac2IyRjBKenRjYm1sbUlDaEZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkQzVqWVc1VmMyVkVUMDBwSUh0Y2JpQWdMeThnU1VVNElHOXViSGtnYzNWd2NHOXlkSE1nWVdOalpYTnphVzVuSUdOemMwWnNiMkYwSUNoemRHRnVaR0Z5WkNrZ1lYTWdjM1I1YkdWR2JHOWhkRnh1SUNCcFppQW9aRzlqZFcxbGJuUXVaRzlqZFcxbGJuUkZiR1Z0Wlc1MExuTjBlV3hsTG1OemMwWnNiMkYwSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQnpkSGxzWlVac2IyRjBRV05qWlhOemIzSWdQU0FuYzNSNWJHVkdiRzloZENjN1hHNGdJSDFjYm4xY2JseHVhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBdkx5QW5iWE5VY21GdWMyWnZjbTBuSUdseklHTnZjbkpsWTNRc0lHSjFkQ0IwYUdVZ2IzUm9aWElnY0hKbFptbDRaWE1nYzJodmRXeGtJR0psSUdOaGNHbDBZV3hwZW1Wa1hHNGdJSFpoY2lCaVlXUldaVzVrYjNKbFpGTjBlV3hsVG1GdFpWQmhkSFJsY200Z1BTQXZYaWcvT25kbFltdHBkSHh0YjNwOGJ5bGJRUzFhWFM4N1hHNWNiaUFnTHk4Z2MzUjViR1VnZG1Gc2RXVnpJSE5vYjNWc1pHNG5kQ0JqYjI1MFlXbHVJR0VnYzJWdGFXTnZiRzl1WEc0Z0lIWmhjaUJpWVdSVGRIbHNaVlpoYkhWbFYybDBhRk5sYldsamIyeHZibEJoZEhSbGNtNGdQU0F2TzF4Y2N5b2tMenRjYmx4dUlDQjJZWElnZDJGeWJtVmtVM1I1YkdWT1lXMWxjeUE5SUh0OU8xeHVJQ0IyWVhJZ2QyRnlibVZrVTNSNWJHVldZV3gxWlhNZ1BTQjdmVHRjYmx4dUlDQjJZWElnZDJGeWJraDVjR2hsYm1GMFpXUlRkSGxzWlU1aGJXVWdQU0JtZFc1amRHbHZiaWh1WVcxbEtTQjdYRzRnSUNBZ2FXWWdLSGRoY201bFpGTjBlV3hsVG1GdFpYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2tnSmlZZ2QyRnlibVZrVTNSNWJHVk9ZVzFsYzF0dVlXMWxYU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIZGhjbTVsWkZOMGVXeGxUbUZ0WlhOYmJtRnRaVjBnUFNCMGNuVmxPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQW5WVzV6ZFhCd2IzSjBaV1FnYzNSNWJHVWdjSEp2Y0dWeWRIa2dKWE11SUVScFpDQjViM1VnYldWaGJpQWxjejhuTEZ4dUlDQWdJQ0FnYm1GdFpTeGNiaUFnSUNBZ0lHTmhiV1ZzYVhwbFUzUjViR1ZPWVcxbEtHNWhiV1VwWEc0Z0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNCOU8xeHVYRzRnSUhaaGNpQjNZWEp1UW1Ga1ZtVnVaRzl5WldSVGRIbHNaVTVoYldVZ1BTQm1kVzVqZEdsdmJpaHVZVzFsS1NCN1hHNGdJQ0FnYVdZZ0tIZGhjbTVsWkZOMGVXeGxUbUZ0WlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa2dKaVlnZDJGeWJtVmtVM1I1YkdWT1lXMWxjMXR1WVcxbFhTa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhkaGNtNWxaRk4wZVd4bFRtRnRaWE5iYm1GdFpWMGdQU0IwY25WbE8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBblZXNXpkWEJ3YjNKMFpXUWdkbVZ1Wkc5eUxYQnlaV1pwZUdWa0lITjBlV3hsSUhCeWIzQmxjblI1SUNWekxpQkVhV1FnZVc5MUlHMWxZVzRnSlhNL0p5eGNiaUFnSUNBZ0lHNWhiV1VzWEc0Z0lDQWdJQ0J1WVcxbExtTm9ZWEpCZENnd0tTNTBiMVZ3Y0dWeVEyRnpaU2dwSUNzZ2JtRnRaUzV6YkdsalpTZ3hLVnh1SUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnZlR0Y2JseHVJQ0IyWVhJZ2QyRnlibE4wZVd4bFZtRnNkV1ZYYVhSb1UyVnRhV052Ykc5dUlEMGdablZ1WTNScGIyNG9ibUZ0WlN3Z2RtRnNkV1VwSUh0Y2JpQWdJQ0JwWmlBb2QyRnlibVZrVTNSNWJHVldZV3gxWlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvZG1Gc2RXVXBJQ1ltSUhkaGNtNWxaRk4wZVd4bFZtRnNkV1Z6VzNaaGJIVmxYU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIZGhjbTVsWkZOMGVXeGxWbUZzZFdWelczWmhiSFZsWFNBOUlIUnlkV1U3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ2RUZEhsc1pTQndjbTl3WlhKMGVTQjJZV3gxWlhNZ2MyaHZkV3hrYmx4Y0ozUWdZMjl1ZEdGcGJpQmhJSE5sYldsamIyeHZiaTRnSnlBclhHNGdJQ0FnSUNBblZISjVJRndpSlhNNklDVnpYQ0lnYVc1emRHVmhaQzRuTEZ4dUlDQWdJQ0FnYm1GdFpTeGNiaUFnSUNBZ0lIWmhiSFZsTG5KbGNHeGhZMlVvWW1Ga1UzUjViR1ZXWVd4MVpWZHBkR2hUWlcxcFkyOXNiMjVRWVhSMFpYSnVMQ0FuSnlsY2JpQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lIMDdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdVlXMWxYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdkbUZzZFdWY2JpQWdJQ292WEc0Z0lIWmhjaUIzWVhKdVZtRnNhV1JUZEhsc1pTQTlJR1oxYm1OMGFXOXVLRzVoYldVc0lIWmhiSFZsS1NCN1hHNGdJQ0FnYVdZZ0tHNWhiV1V1YVc1a1pYaFBaaWduTFNjcElENGdMVEVwSUh0Y2JpQWdJQ0FnSUhkaGNtNUllWEJvWlc1aGRHVmtVM1I1YkdWT1lXMWxLRzVoYldVcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1ltRmtWbVZ1Wkc5eVpXUlRkSGxzWlU1aGJXVlFZWFIwWlhKdUxuUmxjM1FvYm1GdFpTa3BJSHRjYmlBZ0lDQWdJSGRoY201Q1lXUldaVzVrYjNKbFpGTjBlV3hsVG1GdFpTaHVZVzFsS1R0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0dKaFpGTjBlV3hsVm1Gc2RXVlhhWFJvVTJWdGFXTnZiRzl1VUdGMGRHVnliaTUwWlhOMEtIWmhiSFZsS1NrZ2UxeHVJQ0FnSUNBZ2QyRnlibE4wZVd4bFZtRnNkV1ZYYVhSb1UyVnRhV052Ykc5dUtHNWhiV1VzSUhaaGJIVmxLVHRjYmlBZ0lDQjlYRzRnSUgwN1hHNTlYRzVjYmk4cUtseHVJQ29nVDNCbGNtRjBhVzl1Y3lCbWIzSWdaR1ZoYkdsdVp5QjNhWFJvSUVOVFV5QndjbTl3WlhKMGFXVnpMbHh1SUNvdlhHNTJZWElnUTFOVFVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1eklEMGdlMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRaWEpwWVd4cGVtVnpJR0VnYldGd2NHbHVaeUJ2WmlCemRIbHNaU0J3Y205d1pYSjBhV1Z6SUdadmNpQjFjMlVnWVhNZ2FXNXNhVzVsSUhOMGVXeGxjenBjYmlBZ0lDcGNiaUFnSUNvZ0lDQStJR055WldGMFpVMWhjbXQxY0VadmNsTjBlV3hsY3loN2QybGtkR2c2SUNjeU1EQndlQ2NzSUdobGFXZG9kRG9nTUgwcFhHNGdJQ0FxSUNBZ1hDSjNhV1IwYURveU1EQndlRHRvWldsbmFIUTZNRHRjSWx4dUlDQWdLbHh1SUNBZ0tpQlZibVJsWm1sdVpXUWdkbUZzZFdWeklHRnlaU0JwWjI1dmNtVmtJSE52SUhSb1lYUWdaR1ZqYkdGeVlYUnBkbVVnY0hKdlozSmhiVzFwYm1jZ2FYTWdaV0Z6YVdWeUxseHVJQ0FnS2lCVWFHVWdjbVZ6ZFd4MElITm9iM1ZzWkNCaVpTQklWRTFNTFdWelkyRndaV1FnWW1WbWIzSmxJR2x1YzJWeWRHbHZiaUJwYm5SdklIUm9aU0JFVDAwdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQnpkSGxzWlhOY2JpQWdJQ29nUUhKbGRIVnliaUI3UDNOMGNtbHVaMzFjYmlBZ0lDb3ZYRzRnSUdOeVpXRjBaVTFoY210MWNFWnZjbE4wZVd4bGN6b2dablZ1WTNScGIyNG9jM1I1YkdWektTQjdYRzRnSUNBZ2RtRnlJSE5sY21saGJHbDZaV1FnUFNBbkp6dGNiaUFnSUNCbWIzSWdLSFpoY2lCemRIbHNaVTVoYldVZ2FXNGdjM1I1YkdWektTQjdYRzRnSUNBZ0lDQnBaaUFvSVhOMGVXeGxjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHpkSGxzWlU1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZG1GeUlITjBlV3hsVm1Gc2RXVWdQU0J6ZEhsc1pYTmJjM1I1YkdWT1lXMWxYVHRjYmlBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnZDJGeWJsWmhiR2xrVTNSNWJHVW9jM1I1YkdWT1lXMWxMQ0J6ZEhsc1pWWmhiSFZsS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDaHpkSGxzWlZaaGJIVmxJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnYzJWeWFXRnNhWHBsWkNBclBTQndjbTlqWlhOelUzUjViR1ZPWVcxbEtITjBlV3hsVG1GdFpTa2dLeUFuT2ljN1hHNGdJQ0FnSUNBZ0lITmxjbWxoYkdsNlpXUWdLejBnWkdGdVoyVnliM1Z6VTNSNWJHVldZV3gxWlNoemRIbHNaVTVoYldVc0lITjBlV3hsVm1Gc2RXVXBJQ3NnSnpzbk8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjMlZ5YVdGc2FYcGxaQ0I4ZkNCdWRXeHNPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVFpYUnpJSFJvWlNCMllXeDFaU0JtYjNJZ2JYVnNkR2x3YkdVZ2MzUjViR1Z6SUc5dUlHRWdibTlrWlM0Z0lFbG1JR0VnZG1Gc2RXVWdhWE1nYzNCbFkybG1hV1ZrSUdGelhHNGdJQ0FxSUNjbklDaGxiWEIwZVNCemRISnBibWNwTENCMGFHVWdZMjl5Y21WemNHOXVaR2x1WnlCemRIbHNaU0J3Y205d1pYSjBlU0IzYVd4c0lHSmxJSFZ1YzJWMExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUc1dlpHVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhOMGVXeGxjMXh1SUNBZ0tpOWNiaUFnYzJWMFZtRnNkV1ZHYjNKVGRIbHNaWE02SUdaMWJtTjBhVzl1S0c1dlpHVXNJSE4wZVd4bGN5a2dlMXh1SUNBZ0lIWmhjaUJ6ZEhsc1pTQTlJRzV2WkdVdWMzUjViR1U3WEc0Z0lDQWdabTl5SUNoMllYSWdjM1I1YkdWT1lXMWxJR2x1SUhOMGVXeGxjeWtnZTF4dUlDQWdJQ0FnYVdZZ0tDRnpkSGxzWlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvYzNSNWJHVk9ZVzFsS1NrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdkMkZ5YmxaaGJHbGtVM1I1YkdVb2MzUjViR1ZPWVcxbExDQnpkSGxzWlhOYmMzUjViR1ZPWVcxbFhTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQjJZWElnYzNSNWJHVldZV3gxWlNBOUlHUmhibWRsY205MWMxTjBlV3hsVm1Gc2RXVW9jM1I1YkdWT1lXMWxMQ0J6ZEhsc1pYTmJjM1I1YkdWT1lXMWxYU2s3WEc0Z0lDQWdJQ0JwWmlBb2MzUjViR1ZPWVcxbElEMDlQU0FuWm14dllYUW5LU0I3WEc0Z0lDQWdJQ0FnSUhOMGVXeGxUbUZ0WlNBOUlITjBlV3hsUm14dllYUkJZMk5sYzNOdmNqdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2h6ZEhsc1pWWmhiSFZsS1NCN1hHNGdJQ0FnSUNBZ0lITjBlV3hsVzNOMGVXeGxUbUZ0WlYwZ1BTQnpkSGxzWlZaaGJIVmxPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdWNGNHRnVjMmx2YmlBOUlFTlRVMUJ5YjNCbGNuUjVMbk5vYjNKMGFHRnVaRkJ5YjNCbGNuUjVSWGh3WVc1emFXOXVjMXR6ZEhsc1pVNWhiV1ZkTzF4dUlDQWdJQ0FnSUNCcFppQW9aWGh3WVc1emFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdVMmh2Y25Sb1lXNWtJSEJ5YjNCbGNuUjVJSFJvWVhRZ1NVVTRJSGR2YmlkMElHeHBhMlVnZFc1elpYUjBhVzVuTENCemJ5QjFibk5sZENCbFlXTm9YRzRnSUNBZ0lDQWdJQ0FnTHk4Z1kyOXRjRzl1Wlc1MElIUnZJSEJzWVdOaGRHVWdhWFJjYmlBZ0lDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCcGJtUnBkbWxrZFdGc1UzUjViR1ZPWVcxbElHbHVJR1Y0Y0dGdWMybHZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjM1I1YkdWYmFXNWthWFpwWkhWaGJGTjBlV3hsVG1GdFpWMGdQU0FuSnp0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnYzNSNWJHVmJjM1I1YkdWT1lXMWxYU0E5SUNjbk8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnUTFOVFVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1ek8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBDYWxsYmFja1F1ZXVlXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgcHNldWRvLWV2ZW50IG1vZHVsZSB0byBoZWxwIGtlZXAgdHJhY2sgb2YgY29tcG9uZW50cyB3YWl0aW5nIHRvXG4gKiBiZSBub3RpZmllZCB3aGVuIHRoZWlyIERPTSByZXByZXNlbnRhdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgdXNlLlxuICpcbiAqIFRoaXMgaW1wbGVtZW50cyBgUG9vbGVkQ2xhc3NgLCBzbyB5b3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy5cbiAqIEluc3RlYWQsIHVzZSBgQ2FsbGJhY2tRdWV1ZS5nZXRQb29sZWQoKWAuXG4gKlxuICogQGNsYXNzIFJlYWN0TW91bnRSZWFkeVxuICogQGltcGxlbWVudHMgUG9vbGVkQ2xhc3NcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBDYWxsYmFja1F1ZXVlKCkge1xuICB0aGlzLl9jYWxsYmFja3MgPSBudWxsO1xuICB0aGlzLl9jb250ZXh0cyA9IG51bGw7XG59XG5cbmFzc2lnbihDYWxsYmFja1F1ZXVlLnByb3RvdHlwZSwge1xuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBgbm90aWZ5QWxsYCBpcyBpbnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBJbnZva2VkIHdoZW4gYG5vdGlmeUFsbGAgaXMgaW52b2tlZC5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBjb250ZXh0IENvbnRleHQgdG8gY2FsbCBgY2FsbGJhY2tgIHdpdGguXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZTogZnVuY3Rpb24oY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwgW107XG4gICAgdGhpcy5fY29udGV4dHMgPSB0aGlzLl9jb250ZXh0cyB8fCBbXTtcbiAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgdGhpcy5fY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgfSxcblxuICAvKipcbiAgICogSW52b2tlcyBhbGwgZW5xdWV1ZWQgY2FsbGJhY2tzIGFuZCBjbGVhcnMgdGhlIHF1ZXVlLiBUaGlzIGlzIGludm9rZWQgYWZ0ZXJcbiAgICogdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbXBvbmVudCBoYXMgYmVlbiBjcmVhdGVkIG9yIHVwZGF0ZWQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbm90aWZ5QWxsOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzO1xuICAgIHZhciBjb250ZXh0cyA9IHRoaXMuX2NvbnRleHRzO1xuICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIGNhbGxiYWNrcy5sZW5ndGggPT09IGNvbnRleHRzLmxlbmd0aCxcbiAgICAgICAgJ01pc21hdGNoZWQgbGlzdCBvZiBjb250ZXh0cyBpbiBjYWxsYmFjayBxdWV1ZSdcbiAgICAgICkgOiBpbnZhcmlhbnQoY2FsbGJhY2tzLmxlbmd0aCA9PT0gY29udGV4dHMubGVuZ3RoKSk7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBudWxsO1xuICAgICAgdGhpcy5fY29udGV4dHMgPSBudWxsO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKGNvbnRleHRzW2ldKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrcy5sZW5ndGggPSAwO1xuICAgICAgY29udGV4dHMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgaW50ZXJuYWwgcXVldWUuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IG51bGw7XG4gICAgdGhpcy5fY29udGV4dHMgPSBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciB0aGlzLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbn0pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oQ2FsbGJhY2tRdWV1ZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FsbGJhY2tRdWV1ZTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlEyRnNiR0poWTJ0UmRXVjFaUzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JEWVd4c1ltRmphMUYxWlhWbFhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdVRzl2YkdWa1EyeGhjM01nUFNCeVpYRjFhWEpsS0Z3aUxpOVFiMjlzWldSRGJHRnpjMXdpS1R0Y2JseHVkbUZ5SUdGemMybG5iaUE5SUhKbGNYVnBjbVVvWENJdUwwOWlhbVZqZEM1aGMzTnBaMjVjSWlrN1hHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNHZLaXBjYmlBcUlFRWdjM0JsWTJsaGJHbDZaV1FnY0hObGRXUnZMV1YyWlc1MElHMXZaSFZzWlNCMGJ5Qm9aV3h3SUd0bFpYQWdkSEpoWTJzZ2IyWWdZMjl0Y0c5dVpXNTBjeUIzWVdsMGFXNW5JSFJ2WEc0Z0tpQmlaU0J1YjNScFptbGxaQ0IzYUdWdUlIUm9aV2x5SUVSUFRTQnlaWEJ5WlhObGJuUmhkR2x2Ym5NZ1lYSmxJR0YyWVdsc1lXSnNaU0JtYjNJZ2RYTmxMbHh1SUNwY2JpQXFJRlJvYVhNZ2FXMXdiR1Z0Wlc1MGN5QmdVRzl2YkdWa1EyeGhjM05nTENCemJ5QjViM1VnYzJodmRXeGtJRzVsZG1WeUlHNWxaV1FnZEc4Z2FXNXpkR0Z1ZEdsaGRHVWdkR2hwY3k1Y2JpQXFJRWx1YzNSbFlXUXNJSFZ6WlNCZ1EyRnNiR0poWTJ0UmRXVjFaUzVuWlhSUWIyOXNaV1FvS1dBdVhHNGdLbHh1SUNvZ1FHTnNZWE56SUZKbFlXTjBUVzkxYm5SU1pXRmtlVnh1SUNvZ1FHbHRjR3hsYldWdWRITWdVRzl2YkdWa1EyeGhjM05jYmlBcUlFQnBiblJsY201aGJGeHVJQ292WEc1bWRXNWpkR2x2YmlCRFlXeHNZbUZqYTFGMVpYVmxLQ2tnZTF4dUlDQjBhR2x6TGw5allXeHNZbUZqYTNNZ1BTQnVkV3hzTzF4dUlDQjBhR2x6TGw5amIyNTBaWGgwY3lBOUlHNTFiR3c3WEc1OVhHNWNibUZ6YzJsbmJpaERZV3hzWW1GamExRjFaWFZsTG5CeWIzUnZkSGx3WlN3Z2UxeHVYRzRnSUM4cUtseHVJQ0FnS2lCRmJuRjFaWFZsY3lCaElHTmhiR3hpWVdOcklIUnZJR0psSUdsdWRtOXJaV1FnZDJobGJpQmdibTkwYVdaNVFXeHNZQ0JwY3lCcGJuWnZhMlZrTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQmpZV3hzWW1GamF5Qkpiblp2YTJWa0lIZG9aVzRnWUc1dmRHbG1lVUZzYkdBZ2FYTWdhVzUyYjJ0bFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCamIyNTBaWGgwSUVOdmJuUmxlSFFnZEc4Z1kyRnNiQ0JnWTJGc2JHSmhZMnRnSUhkcGRHZ3VYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaVzV4ZFdWMVpUb2dablZ1WTNScGIyNG9ZMkZzYkdKaFkyc3NJR052Ym5SbGVIUXBJSHRjYmlBZ0lDQjBhR2x6TGw5allXeHNZbUZqYTNNZ1BTQjBhR2x6TGw5allXeHNZbUZqYTNNZ2ZId2dXMTA3WEc0Z0lDQWdkR2hwY3k1ZlkyOXVkR1Y0ZEhNZ1BTQjBhR2x6TGw5amIyNTBaWGgwY3lCOGZDQmJYVHRjYmlBZ0lDQjBhR2x6TGw5allXeHNZbUZqYTNNdWNIVnphQ2hqWVd4c1ltRmpheWs3WEc0Z0lDQWdkR2hwY3k1ZlkyOXVkR1Y0ZEhNdWNIVnphQ2hqYjI1MFpYaDBLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1NXNTJiMnRsY3lCaGJHd2daVzV4ZFdWMVpXUWdZMkZzYkdKaFkydHpJR0Z1WkNCamJHVmhjbk1nZEdobElIRjFaWFZsTGlCVWFHbHpJR2x6SUdsdWRtOXJaV1FnWVdaMFpYSmNiaUFnSUNvZ2RHaGxJRVJQVFNCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCaElHTnZiWEJ2Ym1WdWRDQm9ZWE1nWW1WbGJpQmpjbVZoZEdWa0lHOXlJSFZ3WkdGMFpXUXVYRzRnSUNBcVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ2JtOTBhV1o1UVd4c09pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjJZWElnWTJGc2JHSmhZMnR6SUQwZ2RHaHBjeTVmWTJGc2JHSmhZMnR6TzF4dUlDQWdJSFpoY2lCamIyNTBaWGgwY3lBOUlIUm9hWE11WDJOdmJuUmxlSFJ6TzF4dUlDQWdJR2xtSUNoallXeHNZbUZqYTNNcElIdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lHTmhiR3hpWVdOcmN5NXNaVzVuZEdnZ1BUMDlJR052Ym5SbGVIUnpMbXhsYm1kMGFDeGNiaUFnSUNBZ0lDQWdKMDFwYzIxaGRHTm9aV1FnYkdsemRDQnZaaUJqYjI1MFpYaDBjeUJwYmlCallXeHNZbUZqYXlCeGRXVjFaU2RjYmlBZ0lDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1kyRnNiR0poWTJ0ekxteGxibWQwYUNBOVBUMGdZMjl1ZEdWNGRITXViR1Z1WjNSb0tTazdYRzRnSUNBZ0lDQjBhR2x6TGw5allXeHNZbUZqYTNNZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnZEdocGN5NWZZMjl1ZEdWNGRITWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREFzSUd3Z1BTQmpZV3hzWW1GamEzTXViR1Z1WjNSb095QnBJRHdnYkRzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUdOaGJHeGlZV05yYzF0cFhTNWpZV3hzS0dOdmJuUmxlSFJ6VzJsZEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTmhiR3hpWVdOcmN5NXNaVzVuZEdnZ1BTQXdPMXh1SUNBZ0lDQWdZMjl1ZEdWNGRITXViR1Z1WjNSb0lEMGdNRHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGMyVjBjeUIwYUdVZ2FXNTBaWEp1WVd3Z2NYVmxkV1V1WEc0Z0lDQXFYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdjbVZ6WlhRNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lIUm9hWE11WDJOaGJHeGlZV05yY3lBOUlHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1ZlkyOXVkR1Y0ZEhNZ1BTQnVkV3hzTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQmdVRzl2YkdWa1EyeGhjM05nSUd4dmIydHpJR1p2Y2lCMGFHbHpMbHh1SUNBZ0tpOWNiaUFnWkdWemRISjFZM1J2Y2pvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2RHaHBjeTV5WlhObGRDZ3BPMXh1SUNCOVhHNWNibjBwTzF4dVhHNVFiMjlzWldSRGJHRnpjeTVoWkdSUWIyOXNhVzVuVkc4b1EyRnNiR0poWTJ0UmRXVjFaU2s3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1EyRnNiR0poWTJ0UmRXVjFaVHRjYmlKZGZRPT0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgQ2hhbmdlRXZlbnRQbHVnaW5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZShcIi4vRXZlbnRQbHVnaW5IdWJcIik7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoXCIuL0V2ZW50UHJvcGFnYXRvcnNcIik7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNFdmVudFwiKTtcblxudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJlKFwiLi9pc0V2ZW50U3VwcG9ydGVkXCIpO1xudmFyIGlzVGV4dElucHV0RWxlbWVudCA9IHJlcXVpcmUoXCIuL2lzVGV4dElucHV0RWxlbWVudFwiKTtcbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbnZhciBldmVudFR5cGVzID0ge1xuICBjaGFuZ2U6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQ2hhbmdlOiBudWxsfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ2hhbmdlQ2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ2hhbmdlLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BDbGljayxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wRm9jdXMsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcElucHV0LFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlVcCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wU2VsZWN0aW9uQ2hhbmdlXG4gICAgXVxuICB9XG59O1xuXG4vKipcbiAqIEZvciBJRSBzaGltc1xuICovXG52YXIgYWN0aXZlRWxlbWVudCA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudElEID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50VmFsdWUgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRWYWx1ZVByb3AgPSBudWxsO1xuXG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudFxuICovXG5mdW5jdGlvbiBzaG91bGRVc2VDaGFuZ2VFdmVudChlbGVtKSB7XG4gIHJldHVybiAoXG4gICAgZWxlbS5ub2RlTmFtZSA9PT0gJ1NFTEVDVCcgfHxcbiAgICAoZWxlbS5ub2RlTmFtZSA9PT0gJ0lOUFVUJyAmJiBlbGVtLnR5cGUgPT09ICdmaWxlJylcbiAgKTtcbn1cblxudmFyIGRvZXNDaGFuZ2VFdmVudEJ1YmJsZSA9IGZhbHNlO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAvLyBTZWUgYGhhbmRsZUNoYW5nZWAgY29tbWVudCBiZWxvd1xuICBkb2VzQ2hhbmdlRXZlbnRCdWJibGUgPSBpc0V2ZW50U3VwcG9ydGVkKCdjaGFuZ2UnKSAmJiAoXG4gICAgKCEoJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDgpXG4gICk7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGV2ZW50ID0gU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgIGV2ZW50VHlwZXMuY2hhbmdlLFxuICAgIGFjdGl2ZUVsZW1lbnRJRCxcbiAgICBuYXRpdmVFdmVudFxuICApO1xuICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuXG4gIC8vIElmIGNoYW5nZSBhbmQgcHJvcGVydHljaGFuZ2UgYnViYmxlZCwgd2UnZCBqdXN0IGJpbmQgdG8gaXQgbGlrZSBhbGwgdGhlXG4gIC8vIG90aGVyIGV2ZW50cyBhbmQgaGF2ZSBpdCBnbyB0aHJvdWdoIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci4gU2luY2UgaXRcbiAgLy8gZG9lc24ndCwgd2UgbWFudWFsbHkgbGlzdGVuIGZvciB0aGUgZXZlbnRzIGFuZCBzbyB3ZSBoYXZlIHRvIGVucXVldWUgYW5kXG4gIC8vIHByb2Nlc3MgdGhlIGFic3RyYWN0IGV2ZW50IG1hbnVhbGx5LlxuICAvL1xuICAvLyBCYXRjaGluZyBpcyBuZWNlc3NhcnkgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBhbGwgZXZlbnQgaGFuZGxlcnMgcnVuXG4gIC8vIGJlZm9yZSB0aGUgbmV4dCByZXJlbmRlciAoaW5jbHVkaW5nIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkIHRvIGFuY2VzdG9yXG4gIC8vIGVsZW1lbnRzIGluc3RlYWQgb2YgZGlyZWN0bHkgb24gdGhlIGlucHV0KS4gV2l0aG91dCB0aGlzLCBjb250cm9sbGVkXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBjb25qdW5jdGlvbiB3aXRoIGV2ZW50IGJ1YmJsaW5nIGJlY2F1c2VcbiAgLy8gdGhlIGNvbXBvbmVudCBpcyByZXJlbmRlcmVkIGFuZCB0aGUgdmFsdWUgcmV2ZXJ0ZWQgYmVmb3JlIGFsbCB0aGUgZXZlbnRcbiAgLy8gaGFuZGxlcnMgY2FuIHJ1bi4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzA4LlxuICBSZWFjdFVwZGF0ZXMuYmF0Y2hlZFVwZGF0ZXMocnVuRXZlbnRJbkJhdGNoLCBldmVudCk7XG59XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChldmVudCkge1xuICBFdmVudFBsdWdpbkh1Yi5lbnF1ZXVlRXZlbnRzKGV2ZW50KTtcbiAgRXZlbnRQbHVnaW5IdWIucHJvY2Vzc0V2ZW50UXVldWUoKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KHRhcmdldCwgdGFyZ2V0SUQpIHtcbiAgYWN0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudElEID0gdGFyZ2V0SUQ7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29uY2hhbmdlJywgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudCk7XG59XG5cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25jaGFuZ2UnLCBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJRCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldElERm9yQ2hhbmdlRXZlbnQoXG4gICAgdG9wTGV2ZWxUeXBlLFxuICAgIHRvcExldmVsVGFyZ2V0LFxuICAgIHRvcExldmVsVGFyZ2V0SUQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BDaGFuZ2UpIHtcbiAgICByZXR1cm4gdG9wTGV2ZWxUYXJnZXRJRDtcbiAgfVxufVxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9yQ2hhbmdlRXZlbnRJRTgoXG4gICAgdG9wTGV2ZWxUeXBlLFxuICAgIHRvcExldmVsVGFyZ2V0LFxuICAgIHRvcExldmVsVGFyZ2V0SUQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BGb2N1cykge1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgodG9wTGV2ZWxUYXJnZXQsIHRvcExldmVsVGFyZ2V0SUQpO1xuICB9IGVsc2UgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BCbHVyKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgoKTtcbiAgfVxufVxuXG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBpbnB1dGAgZXZlbnRcbiAqL1xudmFyIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGZhbHNlO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAvLyBJRTkgY2xhaW1zIHRvIHN1cHBvcnQgdGhlIGlucHV0IGV2ZW50IGJ1dCBmYWlscyB0byB0cmlnZ2VyIGl0IHdoZW5cbiAgLy8gZGVsZXRpbmcgdGV4dCwgc28gd2UgaWdub3JlIGl0cyBpbnB1dCBldmVudHNcbiAgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gaXNFdmVudFN1cHBvcnRlZCgnaW5wdXQnKSAmJiAoXG4gICAgKCEoJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDkpXG4gICk7XG59XG5cbi8qKlxuICogKEZvciBvbGQgSUUuKSBSZXBsYWNlbWVudCBnZXR0ZXIvc2V0dGVyIGZvciB0aGUgYHZhbHVlYCBwcm9wZXJ0eSB0aGF0IGdldHNcbiAqIHNldCBvbiB0aGUgYWN0aXZlIGVsZW1lbnQuXG4gKi9cbnZhciBuZXdWYWx1ZVByb3AgPSAge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhY3RpdmVFbGVtZW50VmFsdWVQcm9wLmdldC5jYWxsKHRoaXMpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgIC8vIENhc3QgdG8gYSBzdHJpbmcgc28gd2UgY2FuIGRvIGVxdWFsaXR5IGNoZWNrcy5cbiAgICBhY3RpdmVFbGVtZW50VmFsdWUgPSAnJyArIHZhbDtcbiAgICBhY3RpdmVFbGVtZW50VmFsdWVQcm9wLnNldC5jYWxsKHRoaXMsIHZhbCk7XG4gIH1cbn07XG5cbi8qKlxuICogKEZvciBvbGQgSUUuKSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudFxuICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tXG4gKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLlxuICovXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJRCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SUQgPSB0YXJnZXRJRDtcbiAgYWN0aXZlRWxlbWVudFZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuICBhY3RpdmVFbGVtZW50VmFsdWVQcm9wID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICB0YXJnZXQuY29uc3RydWN0b3IucHJvdG90eXBlLFxuICAgICd2YWx1ZSdcbiAgKTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWN0aXZlRWxlbWVudCwgJ3ZhbHVlJywgbmV3VmFsdWVQcm9wKTtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbn1cblxuLyoqXG4gKiAoRm9yIG9sZCBJRS4pIFJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50bHktdHJhY2tlZCBlbGVtZW50LFxuICogaWYgYW55IGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSB7XG4gIGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGRlbGV0ZSByZXN0b3JlcyB0aGUgb3JpZ2luYWwgcHJvcGVydHkgZGVmaW5pdGlvblxuICBkZWxldGUgYWN0aXZlRWxlbWVudC52YWx1ZTtcbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcblxuICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudElEID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudFZhbHVlID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudFZhbHVlUHJvcCA9IG51bGw7XG59XG5cbi8qKlxuICogKEZvciBvbGQgSUUuKSBIYW5kbGVzIGEgcHJvcGVydHljaGFuZ2UgZXZlbnQsIHNlbmRpbmcgYSBgY2hhbmdlYCBldmVudCBpZlxuICogdGhlIHZhbHVlIG9mIHRoZSBhY3RpdmUgZWxlbWVudCBoYXMgY2hhbmdlZC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlDaGFuZ2UobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3ZhbHVlJykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgdmFsdWUgPSBuYXRpdmVFdmVudC5zcmNFbGVtZW50LnZhbHVlO1xuICBpZiAodmFsdWUgPT09IGFjdGl2ZUVsZW1lbnRWYWx1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhY3RpdmVFbGVtZW50VmFsdWUgPSB2YWx1ZTtcblxuICBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTtcbn1cblxuLyoqXG4gKiBJZiBhIGBjaGFuZ2VgIGV2ZW50IHNob3VsZCBiZSBmaXJlZCwgcmV0dXJucyB0aGUgdGFyZ2V0J3MgSUQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhcmdldElERm9ySW5wdXRFdmVudChcbiAgICB0b3BMZXZlbFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcElucHV0KSB7XG4gICAgLy8gSW4gbW9kZXJuIGJyb3dzZXJzIChpLmUuLCBub3QgSUU4IG9yIElFOSksIHRoZSBpbnB1dCBldmVudCBpcyBleGFjdGx5XG4gICAgLy8gd2hhdCB3ZSB3YW50IHNvIGZhbGwgdGhyb3VnaCBoZXJlIGFuZCB0cmlnZ2VyIGFuIGFic3RyYWN0IGV2ZW50XG4gICAgcmV0dXJuIHRvcExldmVsVGFyZ2V0SUQ7XG4gIH1cbn1cblxuLy8gRm9yIElFOCBhbmQgSUU5LlxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudElFKFxuICAgIHRvcExldmVsVHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldCxcbiAgICB0b3BMZXZlbFRhcmdldElEKSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wRm9jdXMpIHtcbiAgICAvLyBJbiBJRTgsIHdlIGNhbiBjYXB0dXJlIGFsbW9zdCBhbGwgLnZhbHVlIGNoYW5nZXMgYnkgYWRkaW5nIGFcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVyIGFuZCBsb29raW5nIGZvciBldmVudHMgd2l0aCBwcm9wZXJ0eU5hbWVcbiAgICAvLyBlcXVhbCB0byAndmFsdWUnXG4gICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZFxuICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlXG4gICAgLy8gYXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZFxuICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlXG4gICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXNcbiAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlc1xuICAgIC8vXG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0b3BMZXZlbFRhcmdldCwgdG9wTGV2ZWxUYXJnZXRJRCk7XG4gIH0gZWxzZSBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEJsdXIpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59XG5cbi8vIEZvciBJRTggYW5kIElFOS5cbmZ1bmN0aW9uIGdldFRhcmdldElERm9ySW5wdXRFdmVudElFKFxuICAgIHRvcExldmVsVHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldCxcbiAgICB0b3BMZXZlbFRhcmdldElEKSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wU2VsZWN0aW9uQ2hhbmdlIHx8XG4gICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wS2V5VXAgfHxcbiAgICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duKSB7XG4gICAgLy8gT24gdGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50IHdoaWNoIGlzbid0XG4gICAgLy8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVFbGVtZW50IGluc3RlYWQuXG4gICAgLy9cbiAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24gYW5kIGtleXVwIGFyZW4ndCBuZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlXG4gICAgLy8gcHJvcGVydHljaGFuZ2Ugb24gdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVlYCBmcm9tIGFcbiAgICAvLyBzY3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLiBDYXRjaGluZyBrZXl1cCB1c3VhbGx5XG4gICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hpbmcga2V5ZG93biBsZXRzIHVzIGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdFxuICAgIC8vIGtleXN0cm9rZSBpZiB1c2VyIGRvZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxheWVkOiByaWdodFxuICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlucHV0IG1ldGhvZHMgKGUuZy4sIHBhc3RlKSBzZWVtIHRvXG4gICAgLy8gZmlyZSBzZWxlY3Rpb25jaGFuZ2Ugbm9ybWFsbHkuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgYWN0aXZlRWxlbWVudC52YWx1ZSAhPT0gYWN0aXZlRWxlbWVudFZhbHVlKSB7XG4gICAgICBhY3RpdmVFbGVtZW50VmFsdWUgPSBhY3RpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnRJRDtcbiAgICB9XG4gIH1cbn1cblxuXG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2xpY2tgIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFVzZUNsaWNrRXZlbnQoZWxlbSkge1xuICAvLyBVc2UgdGhlIGBjbGlja2AgZXZlbnQgdG8gZGV0ZWN0IGNoYW5nZXMgdG8gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0cy5cbiAgLy8gVGhpcyBhcHByb2FjaCB3b3JrcyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3aGVyZWFzIGBjaGFuZ2VgIGRvZXMgbm90IGZpcmVcbiAgLy8gdW50aWwgYGJsdXJgIGluIElFOC5cbiAgcmV0dXJuIChcbiAgICBlbGVtLm5vZGVOYW1lID09PSAnSU5QVVQnICYmXG4gICAgKGVsZW0udHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBlbGVtLnR5cGUgPT09ICdyYWRpbycpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldElERm9yQ2xpY2tFdmVudChcbiAgICB0b3BMZXZlbFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcENsaWNrKSB7XG4gICAgcmV0dXJuIHRvcExldmVsVGFyZ2V0SUQ7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG9cbiAqIGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBzZWxlY3RcbiAqL1xudmFyIENoYW5nZUV2ZW50UGx1Z2luID0ge1xuXG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzfVxuICAgKi9cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24oXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudCkge1xuXG4gICAgdmFyIGdldFRhcmdldElERnVuYywgaGFuZGxlRXZlbnRGdW5jO1xuICAgIGlmIChzaG91bGRVc2VDaGFuZ2VFdmVudCh0b3BMZXZlbFRhcmdldCkpIHtcbiAgICAgIGlmIChkb2VzQ2hhbmdlRXZlbnRCdWJibGUpIHtcbiAgICAgICAgZ2V0VGFyZ2V0SURGdW5jID0gZ2V0VGFyZ2V0SURGb3JDaGFuZ2VFdmVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvckNoYW5nZUV2ZW50SUU4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRvcExldmVsVGFyZ2V0KSkge1xuICAgICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgICBnZXRUYXJnZXRJREZ1bmMgPSBnZXRUYXJnZXRJREZvcklucHV0RXZlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRUYXJnZXRJREZ1bmMgPSBnZXRUYXJnZXRJREZvcklucHV0RXZlbnRJRTtcbiAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudElFO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2hvdWxkVXNlQ2xpY2tFdmVudCh0b3BMZXZlbFRhcmdldCkpIHtcbiAgICAgIGdldFRhcmdldElERnVuYyA9IGdldFRhcmdldElERm9yQ2xpY2tFdmVudDtcbiAgICB9XG5cbiAgICBpZiAoZ2V0VGFyZ2V0SURGdW5jKSB7XG4gICAgICB2YXIgdGFyZ2V0SUQgPSBnZXRUYXJnZXRJREZ1bmMoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0SURcbiAgICAgICk7XG4gICAgICBpZiAodGFyZ2V0SUQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICAgIGV2ZW50VHlwZXMuY2hhbmdlLFxuICAgICAgICAgIHRhcmdldElELFxuICAgICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICAgICk7XG4gICAgICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgICBoYW5kbGVFdmVudEZ1bmMoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0SURcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2hhbmdlRXZlbnRQbHVnaW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgQ2xpZW50UmVhY3RSb290SW5kZXhcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgbmV4dFJlYWN0Um9vdEluZGV4ID0gMDtcblxudmFyIENsaWVudFJlYWN0Um9vdEluZGV4ID0ge1xuICBjcmVhdGVSZWFjdFJvb3RJbmRleDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5leHRSZWFjdFJvb3RJbmRleCsrO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFJlYWN0Um9vdEluZGV4O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBET01DaGlsZHJlbk9wZXJhdGlvbnNcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRGFuZ2VyID0gcmVxdWlyZShcIi4vRGFuZ2VyXCIpO1xudmFyIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzID0gcmVxdWlyZShcIi4vUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXNcIik7XG5cbnZhciBzZXRUZXh0Q29udGVudCA9IHJlcXVpcmUoXCIuL3NldFRleHRDb250ZW50XCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBJbnNlcnRzIGBjaGlsZE5vZGVgIGFzIGEgY2hpbGQgb2YgYHBhcmVudE5vZGVgIGF0IHRoZSBgaW5kZXhgLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcGFyZW50Tm9kZSBQYXJlbnQgbm9kZSBpbiB3aGljaCB0byBpbnNlcnQuXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNoaWxkTm9kZSBDaGlsZCBub2RlIHRvIGluc2VydC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIGNoaWxkLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGluc2VydENoaWxkQXQocGFyZW50Tm9kZSwgY2hpbGROb2RlLCBpbmRleCkge1xuICAvLyBCeSBleHBsb2l0aW5nIGFycmF5cyByZXR1cm5pbmcgYHVuZGVmaW5lZGAgZm9yIGFuIHVuZGVmaW5lZCBpbmRleCwgd2UgY2FuXG4gIC8vIHJlbHkgZXhjbHVzaXZlbHkgb24gYGluc2VydEJlZm9yZShub2RlLCBudWxsKWAgaW5zdGVhZCBvZiBhbHNvIHVzaW5nXG4gIC8vIGBhcHBlbmRDaGlsZChub2RlKWAuIEhvd2V2ZXIsIHVzaW5nIGB1bmRlZmluZWRgIGlzIG5vdCBhbGxvd2VkIGJ5IGFsbFxuICAvLyBicm93c2VycyBzbyB3ZSBtdXN0IHJlcGxhY2UgaXQgd2l0aCBgbnVsbGAuXG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFxuICAgIGNoaWxkTm9kZSxcbiAgICBwYXJlbnROb2RlLmNoaWxkTm9kZXNbaW5kZXhdIHx8IG51bGxcbiAgKTtcbn1cblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciB1cGRhdGluZyB3aXRoIERPTSBjaGlsZHJlbi5cbiAqL1xudmFyIERPTUNoaWxkcmVuT3BlcmF0aW9ucyA9IHtcblxuICBkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cDogRGFuZ2VyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwLFxuXG4gIHVwZGF0ZVRleHRDb250ZW50OiBzZXRUZXh0Q29udGVudCxcblxuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbXBvbmVudCdzIGNoaWxkcmVuIGJ5IHByb2Nlc3NpbmcgYSBzZXJpZXMgb2YgdXBkYXRlcy4gVGhlXG4gICAqIHVwZGF0ZSBjb25maWd1cmF0aW9ucyBhcmUgZWFjaCBleHBlY3RlZCB0byBoYXZlIGEgYHBhcmVudE5vZGVgIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5PG9iamVjdD59IHVwZGF0ZXMgTGlzdCBvZiB1cGRhdGUgY29uZmlndXJhdGlvbnMuXG4gICAqIEBwYXJhbSB7YXJyYXk8c3RyaW5nPn0gbWFya3VwTGlzdCBMaXN0IG9mIG1hcmt1cCBzdHJpbmdzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb2Nlc3NVcGRhdGVzOiBmdW5jdGlvbih1cGRhdGVzLCBtYXJrdXBMaXN0KSB7XG4gICAgdmFyIHVwZGF0ZTtcbiAgICAvLyBNYXBwaW5nIGZyb20gcGFyZW50IElEcyB0byBpbml0aWFsIGNoaWxkIG9yZGVyaW5ncy5cbiAgICB2YXIgaW5pdGlhbENoaWxkcmVuID0gbnVsbDtcbiAgICAvLyBMaXN0IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBiZSBtb3ZlZCBvciByZW1vdmVkLlxuICAgIHZhciB1cGRhdGVkQ2hpbGRyZW4gPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB1cGRhdGUgPSB1cGRhdGVzW2ldO1xuICAgICAgaWYgKHVwZGF0ZS50eXBlID09PSBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5NT1ZFX0VYSVNUSU5HIHx8XG4gICAgICAgICAgdXBkYXRlLnR5cGUgPT09IFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLlJFTU9WRV9OT0RFKSB7XG4gICAgICAgIHZhciB1cGRhdGVkSW5kZXggPSB1cGRhdGUuZnJvbUluZGV4O1xuICAgICAgICB2YXIgdXBkYXRlZENoaWxkID0gdXBkYXRlLnBhcmVudE5vZGUuY2hpbGROb2Rlc1t1cGRhdGVkSW5kZXhdO1xuICAgICAgICB2YXIgcGFyZW50SUQgPSB1cGRhdGUucGFyZW50SUQ7XG5cbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICB1cGRhdGVkQ2hpbGQsXG4gICAgICAgICAgJ3Byb2Nlc3NVcGRhdGVzKCk6IFVuYWJsZSB0byBmaW5kIGNoaWxkICVzIG9mIGVsZW1lbnQuIFRoaXMgJyArXG4gICAgICAgICAgJ3Byb2JhYmx5IG1lYW5zIHRoZSBET00gd2FzIHVuZXhwZWN0ZWRseSBtdXRhdGVkIChlLmcuLCBieSB0aGUgJyArXG4gICAgICAgICAgJ2Jyb3dzZXIpLCB1c3VhbGx5IGR1ZSB0byBmb3JnZXR0aW5nIGEgPHRib2R5PiB3aGVuIHVzaW5nIHRhYmxlcywgJyArXG4gICAgICAgICAgJ25lc3RpbmcgdGFncyBsaWtlIDxmb3JtPiwgPHA+LCBvciA8YT4sIG9yIHVzaW5nIG5vbi1TVkcgZWxlbWVudHMgJyArXG4gICAgICAgICAgJ2luIGFuIDxzdmc+IHBhcmVudC4gVHJ5IGluc3BlY3RpbmcgdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBlbGVtZW50ICcgK1xuICAgICAgICAgICd3aXRoIFJlYWN0IElEIGAlc2AuJyxcbiAgICAgICAgICB1cGRhdGVkSW5kZXgsXG4gICAgICAgICAgcGFyZW50SURcbiAgICAgICAgKSA6IGludmFyaWFudCh1cGRhdGVkQ2hpbGQpKTtcblxuICAgICAgICBpbml0aWFsQ2hpbGRyZW4gPSBpbml0aWFsQ2hpbGRyZW4gfHwge307XG4gICAgICAgIGluaXRpYWxDaGlsZHJlbltwYXJlbnRJRF0gPSBpbml0aWFsQ2hpbGRyZW5bcGFyZW50SURdIHx8IFtdO1xuICAgICAgICBpbml0aWFsQ2hpbGRyZW5bcGFyZW50SURdW3VwZGF0ZWRJbmRleF0gPSB1cGRhdGVkQ2hpbGQ7XG5cbiAgICAgICAgdXBkYXRlZENoaWxkcmVuID0gdXBkYXRlZENoaWxkcmVuIHx8IFtdO1xuICAgICAgICB1cGRhdGVkQ2hpbGRyZW4ucHVzaCh1cGRhdGVkQ2hpbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZW5kZXJlZE1hcmt1cCA9IERhbmdlci5kYW5nZXJvdXNseVJlbmRlck1hcmt1cChtYXJrdXBMaXN0KTtcblxuICAgIC8vIFJlbW92ZSB1cGRhdGVkIGNoaWxkcmVuIGZpcnN0IHNvIHRoYXQgYHRvSW5kZXhgIGlzIGNvbnNpc3RlbnQuXG4gICAgaWYgKHVwZGF0ZWRDaGlsZHJlbikge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB1cGRhdGVkQ2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdXBkYXRlZENoaWxkcmVuW2pdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodXBkYXRlZENoaWxkcmVuW2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHVwZGF0ZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZXNba107XG4gICAgICBzd2l0Y2ggKHVwZGF0ZS50eXBlKSB7XG4gICAgICAgIGNhc2UgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuSU5TRVJUX01BUktVUDpcbiAgICAgICAgICBpbnNlcnRDaGlsZEF0KFxuICAgICAgICAgICAgdXBkYXRlLnBhcmVudE5vZGUsXG4gICAgICAgICAgICByZW5kZXJlZE1hcmt1cFt1cGRhdGUubWFya3VwSW5kZXhdLFxuICAgICAgICAgICAgdXBkYXRlLnRvSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLk1PVkVfRVhJU1RJTkc6XG4gICAgICAgICAgaW5zZXJ0Q2hpbGRBdChcbiAgICAgICAgICAgIHVwZGF0ZS5wYXJlbnROb2RlLFxuICAgICAgICAgICAgaW5pdGlhbENoaWxkcmVuW3VwZGF0ZS5wYXJlbnRJRF1bdXBkYXRlLmZyb21JbmRleF0sXG4gICAgICAgICAgICB1cGRhdGUudG9JbmRleFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuVEVYVF9DT05URU5UOlxuICAgICAgICAgIHNldFRleHRDb250ZW50KFxuICAgICAgICAgICAgdXBkYXRlLnBhcmVudE5vZGUsXG4gICAgICAgICAgICB1cGRhdGUudGV4dENvbnRlbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLlJFTU9WRV9OT0RFOlxuICAgICAgICAgIC8vIEFscmVhZHkgcmVtb3ZlZCBieSB0aGUgZm9yLWxvb3AgYWJvdmUuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRE9NQ2hpbGRyZW5PcGVyYXRpb25zO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UkU5TlEyaHBiR1J5Wlc1UGNHVnlZWFJwYjI1ekxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQkVUMDFEYUdsc1pISmxiazl3WlhKaGRHbHZibk5jYmlBcUlFQjBlWEJsWTJobFkydHpJSE4wWVhScFl5MXZibXg1WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1JHRnVaMlZ5SUQwZ2NtVnhkV2x5WlNoY0lpNHZSR0Z1WjJWeVhDSXBPMXh1ZG1GeUlGSmxZV04wVFhWc2RHbERhR2xzWkZWd1pHRjBaVlI1Y0dWeklEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUk5kV3gwYVVOb2FXeGtWWEJrWVhSbFZIbHdaWE5jSWlrN1hHNWNiblpoY2lCelpYUlVaWGgwUTI5dWRHVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwzTmxkRlJsZUhSRGIyNTBaVzUwWENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVMeW9xWEc0Z0tpQkpibk5sY25SeklHQmphR2xzWkU1dlpHVmdJR0Z6SUdFZ1kyaHBiR1FnYjJZZ1lIQmhjbVZ1ZEU1dlpHVmdJR0YwSUhSb1pTQmdhVzVrWlhoZ0xseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1JFOU5SV3hsYldWdWRIMGdjR0Z5Wlc1MFRtOWtaU0JRWVhKbGJuUWdibTlrWlNCcGJpQjNhR2xqYUNCMGJ5QnBibk5sY25RdVhHNGdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUdOb2FXeGtUbTlrWlNCRGFHbHNaQ0J1YjJSbElIUnZJR2x1YzJWeWRDNWNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JwYm1SbGVDQkpibVJsZUNCaGRDQjNhR2xqYUNCMGJ5QnBibk5sY25RZ2RHaGxJR05vYVd4a0xseHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpOWNibVoxYm1OMGFXOXVJR2x1YzJWeWRFTm9hV3hrUVhRb2NHRnlaVzUwVG05a1pTd2dZMmhwYkdST2IyUmxMQ0JwYm1SbGVDa2dlMXh1SUNBdkx5QkNlU0JsZUhCc2IybDBhVzVuSUdGeWNtRjVjeUJ5WlhSMWNtNXBibWNnWUhWdVpHVm1hVzVsWkdBZ1ptOXlJR0Z1SUhWdVpHVm1hVzVsWkNCcGJtUmxlQ3dnZDJVZ1kyRnVYRzRnSUM4dklISmxiSGtnWlhoamJIVnphWFpsYkhrZ2IyNGdZR2x1YzJWeWRFSmxabTl5WlNodWIyUmxMQ0J1ZFd4c0tXQWdhVzV6ZEdWaFpDQnZaaUJoYkhOdklIVnphVzVuWEc0Z0lDOHZJR0JoY0hCbGJtUkRhR2xzWkNodWIyUmxLV0F1SUVodmQyVjJaWElzSUhWemFXNW5JR0IxYm1SbFptbHVaV1JnSUdseklHNXZkQ0JoYkd4dmQyVmtJR0o1SUdGc2JGeHVJQ0F2THlCaWNtOTNjMlZ5Y3lCemJ5QjNaU0J0ZFhOMElISmxjR3hoWTJVZ2FYUWdkMmwwYUNCZ2JuVnNiR0F1WEc0Z0lIQmhjbVZ1ZEU1dlpHVXVhVzV6WlhKMFFtVm1iM0psS0Z4dUlDQWdJR05vYVd4a1RtOWtaU3hjYmlBZ0lDQndZWEpsYm5ST2IyUmxMbU5vYVd4a1RtOWtaWE5iYVc1a1pYaGRJSHg4SUc1MWJHeGNiaUFnS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJQY0dWeVlYUnBiMjV6SUdadmNpQjFjR1JoZEdsdVp5QjNhWFJvSUVSUFRTQmphR2xzWkhKbGJpNWNiaUFxTDF4dWRtRnlJRVJQVFVOb2FXeGtjbVZ1VDNCbGNtRjBhVzl1Y3lBOUlIdGNibHh1SUNCa1lXNW5aWEp2ZFhOc2VWSmxjR3hoWTJWT2IyUmxWMmwwYUUxaGNtdDFjRG9nUkdGdVoyVnlMbVJoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd0xGeHVYRzRnSUhWd1pHRjBaVlJsZUhSRGIyNTBaVzUwT2lCelpYUlVaWGgwUTI5dWRHVnVkQ3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWWEJrWVhSbGN5QmhJR052YlhCdmJtVnVkQ2R6SUdOb2FXeGtjbVZ1SUdKNUlIQnliMk5sYzNOcGJtY2dZU0J6WlhKcFpYTWdiMllnZFhCa1lYUmxjeTRnVkdobFhHNGdJQ0FxSUhWd1pHRjBaU0JqYjI1bWFXZDFjbUYwYVc5dWN5QmhjbVVnWldGamFDQmxlSEJsWTNSbFpDQjBieUJvWVhabElHRWdZSEJoY21WdWRFNXZaR1ZnSUhCeWIzQmxjblI1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyRnljbUY1UEc5aWFtVmpkRDU5SUhWd1pHRjBaWE1nVEdsemRDQnZaaUIxY0dSaGRHVWdZMjl1Wm1sbmRYSmhkR2x2Ym5NdVhHNGdJQ0FxSUVCd1lYSmhiU0I3WVhKeVlYazhjM1J5YVc1blBuMGdiV0Z5YTNWd1RHbHpkQ0JNYVhOMElHOW1JRzFoY210MWNDQnpkSEpwYm1kekxseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lIQnliMk5sYzNOVmNHUmhkR1Z6T2lCbWRXNWpkR2x2YmloMWNHUmhkR1Z6TENCdFlYSnJkWEJNYVhOMEtTQjdYRzRnSUNBZ2RtRnlJSFZ3WkdGMFpUdGNiaUFnSUNBdkx5Qk5ZWEJ3YVc1bklHWnliMjBnY0dGeVpXNTBJRWxFY3lCMGJ5QnBibWwwYVdGc0lHTm9hV3hrSUc5eVpHVnlhVzVuY3k1Y2JpQWdJQ0IyWVhJZ2FXNXBkR2xoYkVOb2FXeGtjbVZ1SUQwZ2JuVnNiRHRjYmlBZ0lDQXZMeUJNYVhOMElHOW1JR05vYVd4a2NtVnVJSFJvWVhRZ2QybHNiQ0JpWlNCdGIzWmxaQ0J2Y2lCeVpXMXZkbVZrTGx4dUlDQWdJSFpoY2lCMWNHUmhkR1ZrUTJocGJHUnlaVzRnUFNCdWRXeHNPMXh1WEc0Z0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0IxY0dSaGRHVnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCMWNHUmhkR1VnUFNCMWNHUmhkR1Z6VzJsZE8xeHVJQ0FnSUNBZ2FXWWdLSFZ3WkdGMFpTNTBlWEJsSUQwOVBTQlNaV0ZqZEUxMWJIUnBRMmhwYkdSVmNHUmhkR1ZVZVhCbGN5NU5UMVpGWDBWWVNWTlVTVTVISUh4OFhHNGdJQ0FnSUNBZ0lDQWdkWEJrWVhSbExuUjVjR1VnUFQwOUlGSmxZV04wVFhWc2RHbERhR2xzWkZWd1pHRjBaVlI1Y0dWekxsSkZUVTlXUlY5T1QwUkZLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQjFjR1JoZEdWa1NXNWtaWGdnUFNCMWNHUmhkR1V1Wm5KdmJVbHVaR1Y0TzF4dUlDQWdJQ0FnSUNCMllYSWdkWEJrWVhSbFpFTm9hV3hrSUQwZ2RYQmtZWFJsTG5CaGNtVnVkRTV2WkdVdVkyaHBiR1JPYjJSbGMxdDFjR1JoZEdWa1NXNWtaWGhkTzF4dUlDQWdJQ0FnSUNCMllYSWdjR0Z5Wlc1MFNVUWdQU0IxY0dSaGRHVXVjR0Z5Wlc1MFNVUTdYRzVjYmlBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSUNCMWNHUmhkR1ZrUTJocGJHUXNYRzRnSUNBZ0lDQWdJQ0FnSjNCeWIyTmxjM05WY0dSaGRHVnpLQ2s2SUZWdVlXSnNaU0IwYnlCbWFXNWtJR05vYVd4a0lDVnpJRzltSUdWc1pXMWxiblF1SUZSb2FYTWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0ozQnliMkpoWW14NUlHMWxZVzV6SUhSb1pTQkVUMDBnZDJGeklIVnVaWGh3WldOMFpXUnNlU0J0ZFhSaGRHVmtJQ2hsTG1jdUxDQmllU0IwYUdVZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjJKeWIzZHpaWElwTENCMWMzVmhiR3g1SUdSMVpTQjBieUJtYjNKblpYUjBhVzVuSUdFZ1BIUmliMlI1UGlCM2FHVnVJSFZ6YVc1bklIUmhZbXhsY3l3Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjI1bGMzUnBibWNnZEdGbmN5QnNhV3RsSUR4bWIzSnRQaXdnUEhBK0xDQnZjaUE4WVQ0c0lHOXlJSFZ6YVc1bklHNXZiaTFUVmtjZ1pXeGxiV1Z1ZEhNZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjJsdUlHRnVJRHh6ZG1jK0lIQmhjbVZ1ZEM0Z1ZISjVJR2x1YzNCbFkzUnBibWNnZEdobElHTm9hV3hrSUc1dlpHVnpJRzltSUhSb1pTQmxiR1Z0Wlc1MElDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkM2FYUm9JRkpsWVdOMElFbEVJR0FsYzJBdUp5eGNiaUFnSUNBZ0lDQWdJQ0IxY0dSaGRHVmtTVzVrWlhnc1hHNGdJQ0FnSUNBZ0lDQWdjR0Z5Wlc1MFNVUmNiaUFnSUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoMWNHUmhkR1ZrUTJocGJHUXBLVHRjYmx4dUlDQWdJQ0FnSUNCcGJtbDBhV0ZzUTJocGJHUnlaVzRnUFNCcGJtbDBhV0ZzUTJocGJHUnlaVzRnZkh3Z2UzMDdYRzRnSUNBZ0lDQWdJR2x1YVhScFlXeERhR2xzWkhKbGJsdHdZWEpsYm5SSlJGMGdQU0JwYm1sMGFXRnNRMmhwYkdSeVpXNWJjR0Z5Wlc1MFNVUmRJSHg4SUZ0ZE8xeHVJQ0FnSUNBZ0lDQnBibWwwYVdGc1EyaHBiR1J5Wlc1YmNHRnlaVzUwU1VSZFczVndaR0YwWldSSmJtUmxlRjBnUFNCMWNHUmhkR1ZrUTJocGJHUTdYRzVjYmlBZ0lDQWdJQ0FnZFhCa1lYUmxaRU5vYVd4a2NtVnVJRDBnZFhCa1lYUmxaRU5vYVd4a2NtVnVJSHg4SUZ0ZE8xeHVJQ0FnSUNBZ0lDQjFjR1JoZEdWa1EyaHBiR1J5Wlc0dWNIVnphQ2gxY0dSaGRHVmtRMmhwYkdRcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUhaaGNpQnlaVzVrWlhKbFpFMWhjbXQxY0NBOUlFUmhibWRsY2k1a1lXNW5aWEp2ZFhOc2VWSmxibVJsY2sxaGNtdDFjQ2h0WVhKcmRYQk1hWE4wS1R0Y2JseHVJQ0FnSUM4dklGSmxiVzkyWlNCMWNHUmhkR1ZrSUdOb2FXeGtjbVZ1SUdacGNuTjBJSE52SUhSb1lYUWdZSFJ2U1c1a1pYaGdJR2x6SUdOdmJuTnBjM1JsYm5RdVhHNGdJQ0FnYVdZZ0tIVndaR0YwWldSRGFHbHNaSEpsYmlrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FpQTlJREE3SUdvZ1BDQjFjR1JoZEdWa1EyaHBiR1J5Wlc0dWJHVnVaM1JvT3lCcUt5c3BJSHRjYmlBZ0lDQWdJQ0FnZFhCa1lYUmxaRU5vYVd4a2NtVnVXMnBkTG5CaGNtVnVkRTV2WkdVdWNtVnRiM1psUTJocGJHUW9kWEJrWVhSbFpFTm9hV3hrY21WdVcycGRLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1iM0lnS0haaGNpQnJJRDBnTURzZ2F5QThJSFZ3WkdGMFpYTXViR1Z1WjNSb095QnJLeXNwSUh0Y2JpQWdJQ0FnSUhWd1pHRjBaU0E5SUhWd1pHRjBaWE5iYTEwN1hHNGdJQ0FnSUNCemQybDBZMmdnS0hWd1pHRjBaUzUwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJR05oYzJVZ1VtVmhZM1JOZFd4MGFVTm9hV3hrVlhCa1lYUmxWSGx3WlhNdVNVNVRSVkpVWDAxQlVrdFZVRHBjYmlBZ0lDQWdJQ0FnSUNCcGJuTmxjblJEYUdsc1pFRjBLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RYQmtZWFJsTG5CaGNtVnVkRTV2WkdVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5Wlc1a1pYSmxaRTFoY210MWNGdDFjR1JoZEdVdWJXRnlhM1Z3U1c1a1pYaGRMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RYQmtZWFJsTG5SdlNXNWtaWGhjYmlBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUZKbFlXTjBUWFZzZEdsRGFHbHNaRlZ3WkdGMFpWUjVjR1Z6TGsxUFZrVmZSVmhKVTFSSlRrYzZYRzRnSUNBZ0lDQWdJQ0FnYVc1elpYSjBRMmhwYkdSQmRDaGNiaUFnSUNBZ0lDQWdJQ0FnSUhWd1pHRjBaUzV3WVhKbGJuUk9iMlJsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdhVzVwZEdsaGJFTm9hV3hrY21WdVczVndaR0YwWlM1d1lYSmxiblJKUkYxYmRYQmtZWFJsTG1aeWIyMUpibVJsZUYwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IxY0dSaGRHVXVkRzlKYm1SbGVGeHVJQ0FnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdVbVZoWTNSTmRXeDBhVU5vYVd4a1ZYQmtZWFJsVkhsd1pYTXVWRVZZVkY5RFQwNVVSVTVVT2x4dUlDQWdJQ0FnSUNBZ0lITmxkRlJsZUhSRGIyNTBaVzUwS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdkWEJrWVhSbExuQmhjbVZ1ZEU1dlpHVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCMWNHUmhkR1V1ZEdWNGRFTnZiblJsYm5SY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0JqWVhObElGSmxZV04wVFhWc2RHbERhR2xzWkZWd1pHRjBaVlI1Y0dWekxsSkZUVTlXUlY5T1QwUkZPbHh1SUNBZ0lDQWdJQ0FnSUM4dklFRnNjbVZoWkhrZ2NtVnRiM1psWkNCaWVTQjBhR1VnWm05eUxXeHZiM0FnWVdKdmRtVXVYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnUkU5TlEyaHBiR1J5Wlc1UGNHVnlZWFJwYjI1ek8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBET01Qcm9wZXJ0eVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4vKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuZnVuY3Rpb24gY2hlY2tNYXNrKHZhbHVlLCBiaXRtYXNrKSB7XG4gIHJldHVybiAodmFsdWUgJiBiaXRtYXNrKSA9PT0gYml0bWFzaztcbn1cblxudmFyIERPTVByb3BlcnR5SW5qZWN0aW9uID0ge1xuICAvKipcbiAgICogTWFwcGluZyBmcm9tIG5vcm1hbGl6ZWQsIGNhbWVsY2FzZWQgcHJvcGVydHkgbmFtZXMgdG8gYSBjb25maWd1cmF0aW9uIHRoYXRcbiAgICogc3BlY2lmaWVzIGhvdyB0aGUgYXNzb2NpYXRlZCBET00gcHJvcGVydHkgc2hvdWxkIGJlIGFjY2Vzc2VkIG9yIHJlbmRlcmVkLlxuICAgKi9cbiAgTVVTVF9VU0VfQVRUUklCVVRFOiAweDEsXG4gIE1VU1RfVVNFX1BST1BFUlRZOiAweDIsXG4gIEhBU19TSURFX0VGRkVDVFM6IDB4NCxcbiAgSEFTX0JPT0xFQU5fVkFMVUU6IDB4OCxcbiAgSEFTX05VTUVSSUNfVkFMVUU6IDB4MTAsXG4gIEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFOiAweDIwIHwgMHgxMCxcbiAgSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRTogMHg0MCxcblxuICAvKipcbiAgICogSW5qZWN0IHNvbWUgc3BlY2lhbGl6ZWQga25vd2xlZGdlIGFib3V0IHRoZSBET00uIFRoaXMgdGFrZXMgYSBjb25maWcgb2JqZWN0XG4gICAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiBpc0N1c3RvbUF0dHJpYnV0ZTogZnVuY3Rpb24gdGhhdCBnaXZlbiBhbiBhdHRyaWJ1dGUgbmFtZSB3aWxsIHJldHVybiB0cnVlXG4gICAqIGlmIGl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00gdmVyYmF0aW0uIFVzZWZ1bCBmb3IgZGF0YS0qIG9yIGFyaWEtKlxuICAgKiBhdHRyaWJ1dGVzIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byBlbnVtZXJhdGUgYWxsIG9mIHRoZSBwb3NzaWJsZVxuICAgKiBhdHRyaWJ1dGUgbmFtZXMsXG4gICAqXG4gICAqIFByb3BlcnRpZXM6IG9iamVjdCBtYXBwaW5nIERPTSBwcm9wZXJ0eSBuYW1lIHRvIG9uZSBvZiB0aGVcbiAgICogRE9NUHJvcGVydHlJbmplY3Rpb24gY29uc3RhbnRzIG9yIG51bGwuIElmIHlvdXIgYXR0cmlidXRlIGlzbid0IGluIGhlcmUsXG4gICAqIGl0IHdvbid0IGdldCB3cml0dGVuIHRvIHRoZSBET00uXG4gICAqXG4gICAqIERPTUF0dHJpYnV0ZU5hbWVzOiBvYmplY3QgbWFwcGluZyBSZWFjdCBhdHRyaWJ1dGUgbmFtZSB0byB0aGUgRE9NXG4gICAqIGF0dHJpYnV0ZSBuYW1lLiBBdHRyaWJ1dGUgbmFtZXMgbm90IHNwZWNpZmllZCB1c2UgdGhlICoqbG93ZXJjYXNlKipcbiAgICogbm9ybWFsaXplZCBuYW1lLlxuICAgKlxuICAgKiBET01Qcm9wZXJ0eU5hbWVzOiBzaW1pbGFyIHRvIERPTUF0dHJpYnV0ZU5hbWVzIGJ1dCBmb3IgRE9NIHByb3BlcnRpZXMuXG4gICAqIFByb3BlcnR5IG5hbWVzIG5vdCBzcGVjaWZpZWQgdXNlIHRoZSBub3JtYWxpemVkIG5hbWUuXG4gICAqXG4gICAqIERPTU11dGF0aW9uTWV0aG9kczogUHJvcGVydGllcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBtdXRhdGlvbiBtZXRob2RzLiBJZlxuICAgKiBgdmFsdWVgIGlzIHVuZGVmaW5lZCwgdGhlIG11dGF0aW9uIG1ldGhvZCBzaG91bGQgdW5zZXQgdGhlIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZG9tUHJvcGVydHlDb25maWcgdGhlIGNvbmZpZyBhcyBkZXNjcmliZWQgYWJvdmUuXG4gICAqL1xuICBpbmplY3RET01Qcm9wZXJ0eUNvbmZpZzogZnVuY3Rpb24oZG9tUHJvcGVydHlDb25maWcpIHtcbiAgICB2YXIgUHJvcGVydGllcyA9IGRvbVByb3BlcnR5Q29uZmlnLlByb3BlcnRpZXMgfHwge307XG4gICAgdmFyIERPTUF0dHJpYnV0ZU5hbWVzID0gZG9tUHJvcGVydHlDb25maWcuRE9NQXR0cmlidXRlTmFtZXMgfHwge307XG4gICAgdmFyIERPTVByb3BlcnR5TmFtZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5ET01Qcm9wZXJ0eU5hbWVzIHx8IHt9O1xuICAgIHZhciBET01NdXRhdGlvbk1ldGhvZHMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5ET01NdXRhdGlvbk1ldGhvZHMgfHwge307XG5cbiAgICBpZiAoZG9tUHJvcGVydHlDb25maWcuaXNDdXN0b21BdHRyaWJ1dGUpIHtcbiAgICAgIERPTVByb3BlcnR5Ll9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICBkb21Qcm9wZXJ0eUNvbmZpZy5pc0N1c3RvbUF0dHJpYnV0ZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBQcm9wZXJ0aWVzKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAhRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpLFxuICAgICAgICAnaW5qZWN0RE9NUHJvcGVydHlDb25maWcoLi4uKTogWW91XFwncmUgdHJ5aW5nIHRvIGluamVjdCBET00gcHJvcGVydHkgJyArXG4gICAgICAgICdcXCclc1xcJyB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIGluamVjdGVkLiBZb3UgbWF5IGJlIGFjY2lkZW50YWxseSAnICtcbiAgICAgICAgJ2luamVjdGluZyB0aGUgc2FtZSBET00gcHJvcGVydHkgY29uZmlnIHR3aWNlLCBvciB5b3UgbWF5IGJlICcgK1xuICAgICAgICAnaW5qZWN0aW5nIHR3byBjb25maWdzIHRoYXQgaGF2ZSBjb25mbGljdGluZyBwcm9wZXJ0eSBuYW1lcy4nLFxuICAgICAgICBwcm9wTmFtZVxuICAgICAgKSA6IGludmFyaWFudCghRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSk7XG5cbiAgICAgIERPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1lW3Byb3BOYW1lXSA9IHRydWU7XG5cbiAgICAgIHZhciBsb3dlckNhc2VkID0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2xvd2VyQ2FzZWRdID0gcHJvcE5hbWU7XG5cbiAgICAgIGlmIChET01BdHRyaWJ1dGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBET01BdHRyaWJ1dGVOYW1lc1twcm9wTmFtZV07XG4gICAgICAgIERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2F0dHJpYnV0ZU5hbWVdID0gcHJvcE5hbWU7XG4gICAgICAgIERPTVByb3BlcnR5LmdldEF0dHJpYnV0ZU5hbWVbcHJvcE5hbWVdID0gYXR0cmlidXRlTmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIERPTVByb3BlcnR5LmdldEF0dHJpYnV0ZU5hbWVbcHJvcE5hbWVdID0gbG93ZXJDYXNlZDtcbiAgICAgIH1cblxuICAgICAgRE9NUHJvcGVydHkuZ2V0UHJvcGVydHlOYW1lW3Byb3BOYW1lXSA9XG4gICAgICAgIERPTVByb3BlcnR5TmFtZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpID9cbiAgICAgICAgICBET01Qcm9wZXJ0eU5hbWVzW3Byb3BOYW1lXSA6XG4gICAgICAgICAgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChET01NdXRhdGlvbk1ldGhvZHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIERPTVByb3BlcnR5LmdldE11dGF0aW9uTWV0aG9kW3Byb3BOYW1lXSA9IERPTU11dGF0aW9uTWV0aG9kc1twcm9wTmFtZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBET01Qcm9wZXJ0eS5nZXRNdXRhdGlvbk1ldGhvZFtwcm9wTmFtZV0gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcENvbmZpZyA9IFByb3BlcnRpZXNbcHJvcE5hbWVdO1xuICAgICAgRE9NUHJvcGVydHkubXVzdFVzZUF0dHJpYnV0ZVtwcm9wTmFtZV0gPVxuICAgICAgICBjaGVja01hc2socHJvcENvbmZpZywgRE9NUHJvcGVydHlJbmplY3Rpb24uTVVTVF9VU0VfQVRUUklCVVRFKTtcbiAgICAgIERPTVByb3BlcnR5Lm11c3RVc2VQcm9wZXJ0eVtwcm9wTmFtZV0gPVxuICAgICAgICBjaGVja01hc2socHJvcENvbmZpZywgRE9NUHJvcGVydHlJbmplY3Rpb24uTVVTVF9VU0VfUFJPUEVSVFkpO1xuICAgICAgRE9NUHJvcGVydHkuaGFzU2lkZUVmZmVjdHNbcHJvcE5hbWVdID1cbiAgICAgICAgY2hlY2tNYXNrKHByb3BDb25maWcsIERPTVByb3BlcnR5SW5qZWN0aW9uLkhBU19TSURFX0VGRkVDVFMpO1xuICAgICAgRE9NUHJvcGVydHkuaGFzQm9vbGVhblZhbHVlW3Byb3BOYW1lXSA9XG4gICAgICAgIGNoZWNrTWFzayhwcm9wQ29uZmlnLCBET01Qcm9wZXJ0eUluamVjdGlvbi5IQVNfQk9PTEVBTl9WQUxVRSk7XG4gICAgICBET01Qcm9wZXJ0eS5oYXNOdW1lcmljVmFsdWVbcHJvcE5hbWVdID1cbiAgICAgICAgY2hlY2tNYXNrKHByb3BDb25maWcsIERPTVByb3BlcnR5SW5qZWN0aW9uLkhBU19OVU1FUklDX1ZBTFVFKTtcbiAgICAgIERPTVByb3BlcnR5Lmhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlW3Byb3BOYW1lXSA9XG4gICAgICAgIGNoZWNrTWFzayhwcm9wQ29uZmlnLCBET01Qcm9wZXJ0eUluamVjdGlvbi5IQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSk7XG4gICAgICBET01Qcm9wZXJ0eS5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlW3Byb3BOYW1lXSA9XG4gICAgICAgIGNoZWNrTWFzayhwcm9wQ29uZmlnLCBET01Qcm9wZXJ0eUluamVjdGlvbi5IQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFKTtcblxuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgIURPTVByb3BlcnR5Lm11c3RVc2VBdHRyaWJ1dGVbcHJvcE5hbWVdIHx8XG4gICAgICAgICAgIURPTVByb3BlcnR5Lm11c3RVc2VQcm9wZXJ0eVtwcm9wTmFtZV0sXG4gICAgICAgICdET01Qcm9wZXJ0eTogQ2Fubm90IHJlcXVpcmUgdXNpbmcgYm90aCBhdHRyaWJ1dGUgYW5kIHByb3BlcnR5OiAlcycsXG4gICAgICAgIHByb3BOYW1lXG4gICAgICApIDogaW52YXJpYW50KCFET01Qcm9wZXJ0eS5tdXN0VXNlQXR0cmlidXRlW3Byb3BOYW1lXSB8fFxuICAgICAgICAhRE9NUHJvcGVydHkubXVzdFVzZVByb3BlcnR5W3Byb3BOYW1lXSkpO1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgRE9NUHJvcGVydHkubXVzdFVzZVByb3BlcnR5W3Byb3BOYW1lXSB8fFxuICAgICAgICAgICFET01Qcm9wZXJ0eS5oYXNTaWRlRWZmZWN0c1twcm9wTmFtZV0sXG4gICAgICAgICdET01Qcm9wZXJ0eTogUHJvcGVydGllcyB0aGF0IGhhdmUgc2lkZSBlZmZlY3RzIG11c3QgdXNlIHByb3BlcnR5OiAlcycsXG4gICAgICAgIHByb3BOYW1lXG4gICAgICApIDogaW52YXJpYW50KERPTVByb3BlcnR5Lm11c3RVc2VQcm9wZXJ0eVtwcm9wTmFtZV0gfHxcbiAgICAgICAgIURPTVByb3BlcnR5Lmhhc1NpZGVFZmZlY3RzW3Byb3BOYW1lXSkpO1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgISFET01Qcm9wZXJ0eS5oYXNCb29sZWFuVmFsdWVbcHJvcE5hbWVdICtcbiAgICAgICAgICAhIURPTVByb3BlcnR5Lmhhc051bWVyaWNWYWx1ZVtwcm9wTmFtZV0gK1xuICAgICAgICAgICEhRE9NUHJvcGVydHkuaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZVtwcm9wTmFtZV0gPD0gMSxcbiAgICAgICAgJ0RPTVByb3BlcnR5OiBWYWx1ZSBjYW4gYmUgb25lIG9mIGJvb2xlYW4sIG92ZXJsb2FkZWQgYm9vbGVhbiwgb3IgJyArXG4gICAgICAgICdudW1lcmljIHZhbHVlLCBidXQgbm90IGEgY29tYmluYXRpb246ICVzJyxcbiAgICAgICAgcHJvcE5hbWVcbiAgICAgICkgOiBpbnZhcmlhbnQoISFET01Qcm9wZXJ0eS5oYXNCb29sZWFuVmFsdWVbcHJvcE5hbWVdICtcbiAgICAgICAgISFET01Qcm9wZXJ0eS5oYXNOdW1lcmljVmFsdWVbcHJvcE5hbWVdICtcbiAgICAgICAgISFET01Qcm9wZXJ0eS5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlW3Byb3BOYW1lXSA8PSAxKSk7XG4gICAgfVxuICB9XG59O1xudmFyIGRlZmF1bHRWYWx1ZUNhY2hlID0ge307XG5cbi8qKlxuICogRE9NUHJvcGVydHkgZXhwb3J0cyBsb29rdXAgb2JqZWN0cyB0aGF0IGNhbiBiZSB1c2VkIGxpa2UgZnVuY3Rpb25zOlxuICpcbiAqICAgPiBET01Qcm9wZXJ0eS5pc1ZhbGlkWydpZCddXG4gKiAgIHRydWVcbiAqICAgPiBET01Qcm9wZXJ0eS5pc1ZhbGlkWydmb29iYXInXVxuICogICB1bmRlZmluZWRcbiAqXG4gKiBBbHRob3VnaCB0aGlzIG1heSBiZSBjb25mdXNpbmcsIGl0IHBlcmZvcm1zIGJldHRlciBpbiBnZW5lcmFsLlxuICpcbiAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20va2V5LWV4aXN0c1xuICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9rZXktbWlzc2luZ1xuICovXG52YXIgRE9NUHJvcGVydHkgPSB7XG5cbiAgSURfQVRUUklCVVRFX05BTUU6ICdkYXRhLXJlYWN0aWQnLFxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIHByb3BlcnR5IG5hbWUgaXMgYSBzdGFuZGFyZCBwcm9wZXJ0eS5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGlzU3RhbmRhcmROYW1lOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIGxvd2VyY2FzZSBwcm9wZXJ0eSBuYW1lcyB0byB0aGUgcHJvcGVybHkgY2FzZWQgdmVyc2lvbiwgdXNlZFxuICAgKiB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgcHJvcGVydGllcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGdldFBvc3NpYmxlU3RhbmRhcmROYW1lOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIG5vcm1hbGl6ZWQgbmFtZXMgdG8gYXR0cmlidXRlIG5hbWVzIHRoYXQgZGlmZmVyLiBBdHRyaWJ1dGVcbiAgICogbmFtZXMgYXJlIHVzZWQgd2hlbiByZW5kZXJpbmcgbWFya3VwIG9yIHdpdGggYCpBdHRyaWJ1dGUoKWAuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBnZXRBdHRyaWJ1dGVOYW1lOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIG5vcm1hbGl6ZWQgbmFtZXMgdG8gcHJvcGVydGllcyBvbiBET00gbm9kZSBpbnN0YW5jZXMuXG4gICAqIChUaGlzIGluY2x1ZGVzIHByb3BlcnRpZXMgdGhhdCBtdXRhdGUgZHVlIHRvIGV4dGVybmFsIGZhY3RvcnMuKVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgZ2V0UHJvcGVydHlOYW1lOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIG5vcm1hbGl6ZWQgbmFtZXMgdG8gbXV0YXRpb24gbWV0aG9kcy4gVGhpcyB3aWxsIG9ubHkgZXhpc3QgaWZcbiAgICogbXV0YXRpb24gY2Fubm90IGJlIHNldCBzaW1wbHkgYnkgdGhlIHByb3BlcnR5IG9yIGBzZXRBdHRyaWJ1dGUoKWAuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBnZXRNdXRhdGlvbk1ldGhvZDoge30sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgYWNjZXNzZWQgYW5kIG11dGF0ZWQgYXMgYW4gb2JqZWN0IHByb3BlcnR5LlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgbXVzdFVzZUF0dHJpYnV0ZToge30sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgYWNjZXNzZWQgYW5kIG11dGF0ZWQgdXNpbmcgYCpBdHRyaWJ1dGUoKWAuXG4gICAqIChUaGlzIGluY2x1ZGVzIGFueXRoaW5nIHRoYXQgZmFpbHMgYDxwcm9wTmFtZT4gaW4gPGVsZW1lbnQ+YC4pXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBtdXN0VXNlUHJvcGVydHk6IHt9LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCBzZXR0aW5nIGEgdmFsdWUgY2F1c2VzIHNpZGUgZWZmZWN0cyBzdWNoIGFzIHRyaWdnZXJpbmdcbiAgICogcmVzb3VyY2VzIHRvIGJlIGxvYWRlZCBvciB0ZXh0IHNlbGVjdGlvbiBjaGFuZ2VzLiBXZSBtdXN0IGVuc3VyZSB0aGF0XG4gICAqIHRoZSB2YWx1ZSBpcyBvbmx5IHNldCBpZiBpdCBoYXMgY2hhbmdlZC5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGhhc1NpZGVFZmZlY3RzOiB7fSxcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBoYXNCb29sZWFuVmFsdWU6IHt9LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIG51bWVyaWMgb3IgcGFyc2UgYXMgYVxuICAgKiBudW1lcmljIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHNldCB0byBhIGZhbHNleSB2YWx1ZS5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGhhc051bWVyaWNWYWx1ZToge30sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlXG4gICAqIG51bWVyaWMgYW5kIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gc2V0IHRvIGEgZmFsc2V5IHZhbHVlLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgaGFzUG9zaXRpdmVOdW1lcmljVmFsdWU6IHt9LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBjYW4gYmUgdXNlZCBhcyBhIGZsYWcgYXMgd2VsbCBhcyB3aXRoIGEgdmFsdWUuIFJlbW92ZWRcbiAgICogd2hlbiBzdHJpY3RseSBlcXVhbCB0byBmYWxzZTsgcHJlc2VudCB3aXRob3V0IGEgdmFsdWUgd2hlbiBzdHJpY3RseSBlcXVhbFxuICAgKiB0byB0cnVlOyBwcmVzZW50IHdpdGggYSB2YWx1ZSBvdGhlcndpc2UuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBoYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlOiB7fSxcblxuICAvKipcbiAgICogQWxsIG9mIHRoZSBpc0N1c3RvbUF0dHJpYnV0ZSgpIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBpbmplY3RlZC5cbiAgICovXG4gIF9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uczogW10sXG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgcHJvcGVydHkgbmFtZSBpcyBhIGN1c3RvbSBhdHRyaWJ1dGUuXG4gICAqIEBtZXRob2RcbiAgICovXG4gIGlzQ3VzdG9tQXR0cmlidXRlOiBmdW5jdGlvbihhdHRyaWJ1dGVOYW1lKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBET01Qcm9wZXJ0eS5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpc0N1c3RvbUF0dHJpYnV0ZUZuID0gRE9NUHJvcGVydHkuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zW2ldO1xuICAgICAgaWYgKGlzQ3VzdG9tQXR0cmlidXRlRm4oYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBET00gcHJvcGVydHkgKGkuZS4sIG5vdCBhblxuICAgKiBhdHRyaWJ1dGUpLiBNb3N0IGRlZmF1bHQgdmFsdWVzIGFyZSAnJyBvciBmYWxzZSwgYnV0IG5vdCBhbGwuIFdvcnNlIHlldCxcbiAgICogc29tZSAoaW4gcGFydGljdWxhciwgYHR5cGVgKSB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBlbGVtZW50LlxuICAgKlxuICAgKiBUT0RPOiBJcyBpdCBiZXR0ZXIgdG8gZ3JhYiBhbGwgdGhlIHBvc3NpYmxlIHByb3BlcnRpZXMgd2hlbiBjcmVhdGluZyBhblxuICAgKiBlbGVtZW50IHRvIGF2b2lkIGhhdmluZyB0byBjcmVhdGUgdGhlIHNhbWUgZWxlbWVudCB0d2ljZT9cbiAgICovXG4gIGdldERlZmF1bHRWYWx1ZUZvclByb3BlcnR5OiBmdW5jdGlvbihub2RlTmFtZSwgcHJvcCkge1xuICAgIHZhciBub2RlRGVmYXVsdHMgPSBkZWZhdWx0VmFsdWVDYWNoZVtub2RlTmFtZV07XG4gICAgdmFyIHRlc3RFbGVtZW50O1xuICAgIGlmICghbm9kZURlZmF1bHRzKSB7XG4gICAgICBkZWZhdWx0VmFsdWVDYWNoZVtub2RlTmFtZV0gPSBub2RlRGVmYXVsdHMgPSB7fTtcbiAgICB9XG4gICAgaWYgKCEocHJvcCBpbiBub2RlRGVmYXVsdHMpKSB7XG4gICAgICB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpO1xuICAgICAgbm9kZURlZmF1bHRzW3Byb3BdID0gdGVzdEVsZW1lbnRbcHJvcF07XG4gICAgfVxuICAgIHJldHVybiBub2RlRGVmYXVsdHNbcHJvcF07XG4gIH0sXG5cbiAgaW5qZWN0aW9uOiBET01Qcm9wZXJ0eUluamVjdGlvblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Qcm9wZXJ0eTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJFOU5VSEp2Y0dWeWRIa3Vhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRVQwMVFjbTl3WlhKMGVWeHVJQ29nUUhSNWNHVmphR1ZqYTNNZ2MzUmhkR2xqTFc5dWJIbGNiaUFxTDF4dVhHNHZLbXB6YkdsdWRDQmlhWFIzYVhObE9pQjBjblZsSUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVablZ1WTNScGIyNGdZMmhsWTJ0TllYTnJLSFpoYkhWbExDQmlhWFJ0WVhOcktTQjdYRzRnSUhKbGRIVnliaUFvZG1Gc2RXVWdKaUJpYVhSdFlYTnJLU0E5UFQwZ1ltbDBiV0Z6YXp0Y2JuMWNibHh1ZG1GeUlFUlBUVkJ5YjNCbGNuUjVTVzVxWldOMGFXOXVJRDBnZTF4dUlDQXZLaXBjYmlBZ0lDb2dUV0Z3Y0dsdVp5Qm1jbTl0SUc1dmNtMWhiR2w2WldRc0lHTmhiV1ZzWTJGelpXUWdjSEp2Y0dWeWRIa2dibUZ0WlhNZ2RHOGdZU0JqYjI1bWFXZDFjbUYwYVc5dUlIUm9ZWFJjYmlBZ0lDb2djM0JsWTJsbWFXVnpJR2h2ZHlCMGFHVWdZWE56YjJOcFlYUmxaQ0JFVDAwZ2NISnZjR1Z5ZEhrZ2MyaHZkV3hrSUdKbElHRmpZMlZ6YzJWa0lHOXlJSEpsYm1SbGNtVmtMbHh1SUNBZ0tpOWNiaUFnVFZWVFZGOVZVMFZmUVZSVVVrbENWVlJGT2lBd2VERXNYRzRnSUUxVlUxUmZWVk5GWDFCU1QxQkZVbFJaT2lBd2VESXNYRzRnSUVoQlUxOVRTVVJGWDBWR1JrVkRWRk02SURCNE5DeGNiaUFnU0VGVFgwSlBUMHhGUVU1ZlZrRk1WVVU2SURCNE9DeGNiaUFnU0VGVFgwNVZUVVZTU1VOZlZrRk1WVVU2SURCNE1UQXNYRzRnSUVoQlUxOVFUMU5KVkVsV1JWOU9WVTFGVWtsRFgxWkJURlZGT2lBd2VESXdJSHdnTUhneE1DeGNiaUFnU0VGVFgwOVdSVkpNVDBGRVJVUmZRazlQVEVWQlRsOVdRVXhWUlRvZ01IZzBNQ3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzVxWldOMElITnZiV1VnYzNCbFkybGhiR2w2WldRZ2EyNXZkMnhsWkdkbElHRmliM1YwSUhSb1pTQkVUMDB1SUZSb2FYTWdkR0ZyWlhNZ1lTQmpiMjVtYVdjZ2IySnFaV04wWEc0Z0lDQXFJSGRwZEdnZ2RHaGxJR1p2Ykd4dmQybHVaeUJ3Y205d1pYSjBhV1Z6T2x4dUlDQWdLbHh1SUNBZ0tpQnBjME4xYzNSdmJVRjBkSEpwWW5WMFpUb2dablZ1WTNScGIyNGdkR2hoZENCbmFYWmxiaUJoYmlCaGRIUnlhV0oxZEdVZ2JtRnRaU0IzYVd4c0lISmxkSFZ5YmlCMGNuVmxYRzRnSUNBcUlHbG1JR2wwSUdOaGJpQmlaU0JwYm5ObGNuUmxaQ0JwYm5SdklIUm9aU0JFVDAwZ2RtVnlZbUYwYVcwdUlGVnpaV1oxYkNCbWIzSWdaR0YwWVMwcUlHOXlJR0Z5YVdFdEtseHVJQ0FnS2lCaGRIUnlhV0oxZEdWeklIZG9aWEpsSUdsMEozTWdhVzF3YjNOemFXSnNaU0IwYnlCbGJuVnRaWEpoZEdVZ1lXeHNJRzltSUhSb1pTQndiM056YVdKc1pWeHVJQ0FnS2lCaGRIUnlhV0oxZEdVZ2JtRnRaWE1zWEc0Z0lDQXFYRzRnSUNBcUlGQnliM0JsY25ScFpYTTZJRzlpYW1WamRDQnRZWEJ3YVc1bklFUlBUU0J3Y205d1pYSjBlU0J1WVcxbElIUnZJRzl1WlNCdlppQjBhR1ZjYmlBZ0lDb2dSRTlOVUhKdmNHVnlkSGxKYm1wbFkzUnBiMjRnWTI5dWMzUmhiblJ6SUc5eUlHNTFiR3d1SUVsbUlIbHZkWElnWVhSMGNtbGlkWFJsSUdsemJpZDBJR2x1SUdobGNtVXNYRzRnSUNBcUlHbDBJSGR2YmlkMElHZGxkQ0IzY21sMGRHVnVJSFJ2SUhSb1pTQkVUMDB1WEc0Z0lDQXFYRzRnSUNBcUlFUlBUVUYwZEhKcFluVjBaVTVoYldWek9pQnZZbXBsWTNRZ2JXRndjR2x1WnlCU1pXRmpkQ0JoZEhSeWFXSjFkR1VnYm1GdFpTQjBieUIwYUdVZ1JFOU5YRzRnSUNBcUlHRjBkSEpwWW5WMFpTQnVZVzFsTGlCQmRIUnlhV0oxZEdVZ2JtRnRaWE1nYm05MElITndaV05wWm1sbFpDQjFjMlVnZEdobElDb3FiRzkzWlhKallYTmxLaXBjYmlBZ0lDb2dibTl5YldGc2FYcGxaQ0J1WVcxbExseHVJQ0FnS2x4dUlDQWdLaUJFVDAxUWNtOXdaWEowZVU1aGJXVnpPaUJ6YVcxcGJHRnlJSFJ2SUVSUFRVRjBkSEpwWW5WMFpVNWhiV1Z6SUdKMWRDQm1iM0lnUkU5TklIQnliM0JsY25ScFpYTXVYRzRnSUNBcUlGQnliM0JsY25SNUlHNWhiV1Z6SUc1dmRDQnpjR1ZqYVdacFpXUWdkWE5sSUhSb1pTQnViM0p0WVd4cGVtVmtJRzVoYldVdVhHNGdJQ0FxWEc0Z0lDQXFJRVJQVFUxMWRHRjBhVzl1VFdWMGFHOWtjem9nVUhKdmNHVnlkR2xsY3lCMGFHRjBJSEpsY1hWcGNtVWdjM0JsWTJsaGJDQnRkWFJoZEdsdmJpQnRaWFJvYjJSekxpQkpabHh1SUNBZ0tpQmdkbUZzZFdWZ0lHbHpJSFZ1WkdWbWFXNWxaQ3dnZEdobElHMTFkR0YwYVc5dUlHMWxkR2h2WkNCemFHOTFiR1FnZFc1elpYUWdkR2hsSUhCeWIzQmxjblI1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ1pHOXRVSEp2Y0dWeWRIbERiMjVtYVdjZ2RHaGxJR052Ym1acFp5QmhjeUJrWlhOamNtbGlaV1FnWVdKdmRtVXVYRzRnSUNBcUwxeHVJQ0JwYm1wbFkzUkVUMDFRY205d1pYSjBlVU52Ym1acFp6b2dablZ1WTNScGIyNG9aRzl0VUhKdmNHVnlkSGxEYjI1bWFXY3BJSHRjYmlBZ0lDQjJZWElnVUhKdmNHVnlkR2xsY3lBOUlHUnZiVkJ5YjNCbGNuUjVRMjl1Wm1sbkxsQnliM0JsY25ScFpYTWdmSHdnZTMwN1hHNGdJQ0FnZG1GeUlFUlBUVUYwZEhKcFluVjBaVTVoYldWeklEMGdaRzl0VUhKdmNHVnlkSGxEYjI1bWFXY3VSRTlOUVhSMGNtbGlkWFJsVG1GdFpYTWdmSHdnZTMwN1hHNGdJQ0FnZG1GeUlFUlBUVkJ5YjNCbGNuUjVUbUZ0WlhNZ1BTQmtiMjFRY205d1pYSjBlVU52Ym1acFp5NUVUMDFRY205d1pYSjBlVTVoYldWeklIeDhJSHQ5TzF4dUlDQWdJSFpoY2lCRVQwMU5kWFJoZEdsdmJrMWxkR2h2WkhNZ1BTQmtiMjFRY205d1pYSjBlVU52Ym1acFp5NUVUMDFOZFhSaGRHbHZiazFsZEdodlpITWdmSHdnZTMwN1hHNWNiaUFnSUNCcFppQW9aRzl0VUhKdmNHVnlkSGxEYjI1bWFXY3VhWE5EZFhOMGIyMUJkSFJ5YVdKMWRHVXBJSHRjYmlBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TGw5cGMwTjFjM1J2YlVGMGRISnBZblYwWlVaMWJtTjBhVzl1Y3k1d2RYTm9LRnh1SUNBZ0lDQWdJQ0JrYjIxUWNtOXdaWEowZVVOdmJtWnBaeTVwYzBOMWMzUnZiVUYwZEhKcFluVjBaVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1iM0lnS0haaGNpQndjbTl3VG1GdFpTQnBiaUJRY205d1pYSjBhV1Z6S1NCN1hHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSUNBaFJFOU5VSEp2Y0dWeWRIa3VhWE5UZEdGdVpHRnlaRTVoYldVdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0hKdmNFNWhiV1VwTEZ4dUlDQWdJQ0FnSUNBbmFXNXFaV04wUkU5TlVISnZjR1Z5ZEhsRGIyNW1hV2NvTGk0dUtUb2dXVzkxWEZ3bmNtVWdkSEo1YVc1bklIUnZJR2x1YW1WamRDQkVUMDBnY0hKdmNHVnlkSGtnSnlBclhHNGdJQ0FnSUNBZ0lDZGNYQ2NsYzF4Y0p5QjNhR2xqYUNCb1lYTWdZV3h5WldGa2VTQmlaV1Z1SUdsdWFtVmpkR1ZrTGlCWmIzVWdiV0Y1SUdKbElHRmpZMmxrWlc1MFlXeHNlU0FuSUN0Y2JpQWdJQ0FnSUNBZ0oybHVhbVZqZEdsdVp5QjBhR1VnYzJGdFpTQkVUMDBnY0hKdmNHVnlkSGtnWTI5dVptbG5JSFIzYVdObExDQnZjaUI1YjNVZ2JXRjVJR0psSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5hVzVxWldOMGFXNW5JSFIzYnlCamIyNW1hV2R6SUhSb1lYUWdhR0YyWlNCamIyNW1iR2xqZEdsdVp5QndjbTl3WlhKMGVTQnVZVzFsY3k0bkxGeHVJQ0FnSUNBZ0lDQndjbTl3VG1GdFpWeHVJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2doUkU5TlVISnZjR1Z5ZEhrdWFYTlRkR0Z1WkdGeVpFNWhiV1V1YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0U1aGJXVXBLU2s3WEc1Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtbHpVM1JoYm1SaGNtUk9ZVzFsVzNCeWIzQk9ZVzFsWFNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUhaaGNpQnNiM2RsY2tOaGMyVmtJRDBnY0hKdmNFNWhiV1V1ZEc5TWIzZGxja05oYzJVb0tUdGNiaUFnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWRsZEZCdmMzTnBZbXhsVTNSaGJtUmhjbVJPWVcxbFcyeHZkMlZ5UTJGelpXUmRJRDBnY0hKdmNFNWhiV1U3WEc1Y2JpQWdJQ0FnSUdsbUlDaEVUMDFCZEhSeWFXSjFkR1ZPWVcxbGN5NW9ZWE5QZDI1UWNtOXdaWEowZVNod2NtOXdUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdGMGRISnBZblYwWlU1aGJXVWdQU0JFVDAxQmRIUnlhV0oxZEdWT1lXMWxjMXR3Y205d1RtRnRaVjA3WEc0Z0lDQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtZGxkRkJ2YzNOcFlteGxVM1JoYm1SaGNtUk9ZVzFsVzJGMGRISnBZblYwWlU1aGJXVmRJRDBnY0hKdmNFNWhiV1U3WEc0Z0lDQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtZGxkRUYwZEhKcFluVjBaVTVoYldWYmNISnZjRTVoYldWZElEMGdZWFIwY21saWRYUmxUbUZ0WlR0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtZGxkRUYwZEhKcFluVjBaVTVoYldWYmNISnZjRTVoYldWZElEMGdiRzkzWlhKRFlYTmxaRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdVoyVjBVSEp2Y0dWeWRIbE9ZVzFsVzNCeWIzQk9ZVzFsWFNBOVhHNGdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVUbUZ0WlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0hKdmNFNWhiV1VwSUQ5Y2JpQWdJQ0FnSUNBZ0lDQkVUMDFRY205d1pYSjBlVTVoYldWelczQnliM0JPWVcxbFhTQTZYRzRnSUNBZ0lDQWdJQ0FnY0hKdmNFNWhiV1U3WEc1Y2JpQWdJQ0FnSUdsbUlDaEVUMDFOZFhSaGRHbHZiazFsZEdodlpITXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRTVoYldVcEtTQjdYRzRnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1kbGRFMTFkR0YwYVc5dVRXVjBhRzlrVzNCeWIzQk9ZVzFsWFNBOUlFUlBUVTExZEdGMGFXOXVUV1YwYUc5a2MxdHdjbTl3VG1GdFpWMDdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQkVUMDFRY205d1pYSjBlUzVuWlhSTmRYUmhkR2x2YmsxbGRHaHZaRnR3Y205d1RtRnRaVjBnUFNCdWRXeHNPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ2NISnZjRU52Ym1acFp5QTlJRkJ5YjNCbGNuUnBaWE5iY0hKdmNFNWhiV1ZkTzF4dUlDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdWJYVnpkRlZ6WlVGMGRISnBZblYwWlZ0d2NtOXdUbUZ0WlYwZ1BWeHVJQ0FnSUNBZ0lDQmphR1ZqYTAxaGMyc29jSEp2Y0VOdmJtWnBaeXdnUkU5TlVISnZjR1Z5ZEhsSmJtcGxZM1JwYjI0dVRWVlRWRjlWVTBWZlFWUlVVa2xDVlZSRktUdGNiaUFnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbTExYzNSVmMyVlFjbTl3WlhKMGVWdHdjbTl3VG1GdFpWMGdQVnh1SUNBZ0lDQWdJQ0JqYUdWamEwMWhjMnNvY0hKdmNFTnZibVpwWnl3Z1JFOU5VSEp2Y0dWeWRIbEpibXBsWTNScGIyNHVUVlZUVkY5VlUwVmZVRkpQVUVWU1ZGa3BPMXh1SUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YUdGelUybGtaVVZtWm1WamRITmJjSEp2Y0U1aGJXVmRJRDFjYmlBZ0lDQWdJQ0FnWTJobFkydE5ZWE5yS0hCeWIzQkRiMjVtYVdjc0lFUlBUVkJ5YjNCbGNuUjVTVzVxWldOMGFXOXVMa2hCVTE5VFNVUkZYMFZHUmtWRFZGTXBPMXh1SUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YUdGelFtOXZiR1ZoYmxaaGJIVmxXM0J5YjNCT1lXMWxYU0E5WEc0Z0lDQWdJQ0FnSUdOb1pXTnJUV0Z6YXlod2NtOXdRMjl1Wm1sbkxDQkVUMDFRY205d1pYSjBlVWx1YW1WamRHbHZiaTVJUVZOZlFrOVBURVZCVGw5V1FVeFZSU2s3WEc0Z0lDQWdJQ0JFVDAxUWNtOXdaWEowZVM1b1lYTk9kVzFsY21salZtRnNkV1ZiY0hKdmNFNWhiV1ZkSUQxY2JpQWdJQ0FnSUNBZ1kyaGxZMnROWVhOcktIQnliM0JEYjI1bWFXY3NJRVJQVFZCeWIzQmxjblI1U1c1cVpXTjBhVzl1TGtoQlUxOU9WVTFGVWtsRFgxWkJURlZGS1R0Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtaGhjMUJ2YzJsMGFYWmxUblZ0WlhKcFkxWmhiSFZsVzNCeWIzQk9ZVzFsWFNBOVhHNGdJQ0FnSUNBZ0lHTm9aV05yVFdGemF5aHdjbTl3UTI5dVptbG5MQ0JFVDAxUWNtOXdaWEowZVVsdWFtVmpkR2x2Ymk1SVFWTmZVRTlUU1ZSSlZrVmZUbFZOUlZKSlExOVdRVXhWUlNrN1hHNGdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVTNW9ZWE5QZG1WeWJHOWhaR1ZrUW05dmJHVmhibFpoYkhWbFczQnliM0JPWVcxbFhTQTlYRzRnSUNBZ0lDQWdJR05vWldOclRXRnpheWh3Y205d1EyOXVabWxuTENCRVQwMVFjbTl3WlhKMGVVbHVhbVZqZEdsdmJpNUlRVk5mVDFaRlVreFBRVVJGUkY5Q1QwOU1SVUZPWDFaQlRGVkZLVHRjYmx4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSVVSUFRWQnliM0JsY25SNUxtMTFjM1JWYzJWQmRIUnlhV0oxZEdWYmNISnZjRTVoYldWZElIeDhYRzRnSUNBZ0lDQWdJQ0FnSVVSUFRWQnliM0JsY25SNUxtMTFjM1JWYzJWUWNtOXdaWEowZVZ0d2NtOXdUbUZ0WlYwc1hHNGdJQ0FnSUNBZ0lDZEVUMDFRY205d1pYSjBlVG9nUTJGdWJtOTBJSEpsY1hWcGNtVWdkWE5wYm1jZ1ltOTBhQ0JoZEhSeWFXSjFkR1VnWVc1a0lIQnliM0JsY25SNU9pQWxjeWNzWEc0Z0lDQWdJQ0FnSUhCeWIzQk9ZVzFsWEc0Z0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtDRkVUMDFRY205d1pYSjBlUzV0ZFhOMFZYTmxRWFIwY21saWRYUmxXM0J5YjNCT1lXMWxYU0I4ZkZ4dUlDQWdJQ0FnSUNBaFJFOU5VSEp2Y0dWeWRIa3ViWFZ6ZEZWelpWQnliM0JsY25SNVczQnliM0JPWVcxbFhTa3BPMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YlhWemRGVnpaVkJ5YjNCbGNuUjVXM0J5YjNCT1lXMWxYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDRkVUMDFRY205d1pYSjBlUzVvWVhOVGFXUmxSV1ptWldOMGMxdHdjbTl3VG1GdFpWMHNYRzRnSUNBZ0lDQWdJQ2RFVDAxUWNtOXdaWEowZVRvZ1VISnZjR1Z5ZEdsbGN5QjBhR0YwSUdoaGRtVWdjMmxrWlNCbFptWmxZM1J6SUcxMWMzUWdkWE5sSUhCeWIzQmxjblI1T2lBbGN5Y3NYRzRnSUNBZ0lDQWdJSEJ5YjNCT1lXMWxYRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0VSUFRWQnliM0JsY25SNUxtMTFjM1JWYzJWUWNtOXdaWEowZVZ0d2NtOXdUbUZ0WlYwZ2ZIeGNiaUFnSUNBZ0lDQWdJVVJQVFZCeWIzQmxjblI1TG1oaGMxTnBaR1ZGWm1abFkzUnpXM0J5YjNCT1lXMWxYU2twTzF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSVNGRVQwMVFjbTl3WlhKMGVTNW9ZWE5DYjI5c1pXRnVWbUZzZFdWYmNISnZjRTVoYldWZElDdGNiaUFnSUNBZ0lDQWdJQ0FoSVVSUFRWQnliM0JsY25SNUxtaGhjMDUxYldWeWFXTldZV3gxWlZ0d2NtOXdUbUZ0WlYwZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0VoUkU5TlVISnZjR1Z5ZEhrdWFHRnpUM1psY214dllXUmxaRUp2YjJ4bFlXNVdZV3gxWlZ0d2NtOXdUbUZ0WlYwZ1BEMGdNU3hjYmlBZ0lDQWdJQ0FnSjBSUFRWQnliM0JsY25SNU9pQldZV3gxWlNCallXNGdZbVVnYjI1bElHOW1JR0p2YjJ4bFlXNHNJRzkyWlhKc2IyRmtaV1FnWW05dmJHVmhiaXdnYjNJZ0p5QXJYRzRnSUNBZ0lDQWdJQ2R1ZFcxbGNtbGpJSFpoYkhWbExDQmlkWFFnYm05MElHRWdZMjl0WW1sdVlYUnBiMjQ2SUNWekp5eGNiaUFnSUNBZ0lDQWdjSEp2Y0U1aGJXVmNiaUFnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVNGRVQwMVFjbTl3WlhKMGVTNW9ZWE5DYjI5c1pXRnVWbUZzZFdWYmNISnZjRTVoYldWZElDdGNiaUFnSUNBZ0lDQWdJU0ZFVDAxUWNtOXdaWEowZVM1b1lYTk9kVzFsY21salZtRnNkV1ZiY0hKdmNFNWhiV1ZkSUN0Y2JpQWdJQ0FnSUNBZ0lTRkVUMDFRY205d1pYSjBlUzVvWVhOUGRtVnliRzloWkdWa1FtOXZiR1ZoYmxaaGJIVmxXM0J5YjNCT1lXMWxYU0E4UFNBeEtTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OU8xeHVkbUZ5SUdSbFptRjFiSFJXWVd4MVpVTmhZMmhsSUQwZ2UzMDdYRzVjYmk4cUtseHVJQ29nUkU5TlVISnZjR1Z5ZEhrZ1pYaHdiM0owY3lCc2IyOXJkWEFnYjJKcVpXTjBjeUIwYUdGMElHTmhiaUJpWlNCMWMyVmtJR3hwYTJVZ1puVnVZM1JwYjI1ek9seHVJQ3BjYmlBcUlDQWdQaUJFVDAxUWNtOXdaWEowZVM1cGMxWmhiR2xrV3lkcFpDZGRYRzRnS2lBZ0lIUnlkV1ZjYmlBcUlDQWdQaUJFVDAxUWNtOXdaWEowZVM1cGMxWmhiR2xrV3lkbWIyOWlZWEluWFZ4dUlDb2dJQ0IxYm1SbFptbHVaV1JjYmlBcVhHNGdLaUJCYkhSb2IzVm5hQ0IwYUdseklHMWhlU0JpWlNCamIyNW1kWE5wYm1jc0lHbDBJSEJsY21admNtMXpJR0psZEhSbGNpQnBiaUJuWlc1bGNtRnNMbHh1SUNwY2JpQXFJRUJ6WldVZ2FIUjBjRG92TDJwemNHVnlaaTVqYjIwdmEyVjVMV1Y0YVhOMGMxeHVJQ29nUUhObFpTQm9kSFJ3T2k4dmFuTndaWEptTG1OdmJTOXJaWGt0YldsemMybHVaMXh1SUNvdlhHNTJZWElnUkU5TlVISnZjR1Z5ZEhrZ1BTQjdYRzVjYmlBZ1NVUmZRVlJVVWtsQ1ZWUkZYMDVCVFVVNklDZGtZWFJoTFhKbFlXTjBhV1FuTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYUdWamEzTWdkMmhsZEdobGNpQmhJSEJ5YjNCbGNuUjVJRzVoYldVZ2FYTWdZU0J6ZEdGdVpHRnlaQ0J3Y205d1pYSjBlUzVjYmlBZ0lDb2dRSFI1Y0dVZ2UwOWlhbVZqZEgxY2JpQWdJQ292WEc0Z0lHbHpVM1JoYm1SaGNtUk9ZVzFsT2lCN2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RXRndjR2x1WnlCbWNtOXRJR3h2ZDJWeVkyRnpaU0J3Y205d1pYSjBlU0J1WVcxbGN5QjBieUIwYUdVZ2NISnZjR1Z5YkhrZ1kyRnpaV1FnZG1WeWMybHZiaXdnZFhObFpGeHVJQ0FnS2lCMGJ5QjNZWEp1SUdsdUlIUm9aU0JqWVhObElHOW1JRzFwYzNOcGJtY2djSEp2Y0dWeWRHbGxjeTVjYmlBZ0lDb2dRSFI1Y0dVZ2UwOWlhbVZqZEgxY2JpQWdJQ292WEc0Z0lHZGxkRkJ2YzNOcFlteGxVM1JoYm1SaGNtUk9ZVzFsT2lCN2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RXRndjR2x1WnlCbWNtOXRJRzV2Y20xaGJHbDZaV1FnYm1GdFpYTWdkRzhnWVhSMGNtbGlkWFJsSUc1aGJXVnpJSFJvWVhRZ1pHbG1abVZ5TGlCQmRIUnlhV0oxZEdWY2JpQWdJQ29nYm1GdFpYTWdZWEpsSUhWelpXUWdkMmhsYmlCeVpXNWtaWEpwYm1jZ2JXRnlhM1Z3SUc5eUlIZHBkR2dnWUNwQmRIUnlhV0oxZEdVb0tXQXVYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCblpYUkJkSFJ5YVdKMWRHVk9ZVzFsT2lCN2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RXRndjR2x1WnlCbWNtOXRJRzV2Y20xaGJHbDZaV1FnYm1GdFpYTWdkRzhnY0hKdmNHVnlkR2xsY3lCdmJpQkVUMDBnYm05a1pTQnBibk4wWVc1alpYTXVYRzRnSUNBcUlDaFVhR2x6SUdsdVkyeDFaR1Z6SUhCeWIzQmxjblJwWlhNZ2RHaGhkQ0J0ZFhSaGRHVWdaSFZsSUhSdklHVjRkR1Z5Ym1Gc0lHWmhZM1J2Y25NdUtWeHVJQ0FnS2lCQWRIbHdaU0I3VDJKcVpXTjBmVnh1SUNBZ0tpOWNiaUFnWjJWMFVISnZjR1Z5ZEhsT1lXMWxPaUI3ZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVFdGd2NHbHVaeUJtY205dElHNXZjbTFoYkdsNlpXUWdibUZ0WlhNZ2RHOGdiWFYwWVhScGIyNGdiV1YwYUc5a2N5NGdWR2hwY3lCM2FXeHNJRzl1YkhrZ1pYaHBjM1FnYVdaY2JpQWdJQ29nYlhWMFlYUnBiMjRnWTJGdWJtOTBJR0psSUhObGRDQnphVzF3YkhrZ1lua2dkR2hsSUhCeWIzQmxjblI1SUc5eUlHQnpaWFJCZEhSeWFXSjFkR1VvS1dBdVhHNGdJQ0FxSUVCMGVYQmxJSHRQWW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0JuWlhSTmRYUmhkR2x2YmsxbGRHaHZaRG9nZTMwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZkb1pYUm9aWElnZEdobElIQnliM0JsY25SNUlHMTFjM1FnWW1VZ1lXTmpaWE56WldRZ1lXNWtJRzExZEdGMFpXUWdZWE1nWVc0Z2IySnFaV04wSUhCeWIzQmxjblI1TGx4dUlDQWdLaUJBZEhsd1pTQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdiWFZ6ZEZWelpVRjBkSEpwWW5WMFpUb2dlMzBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRmRvWlhSb1pYSWdkR2hsSUhCeWIzQmxjblI1SUcxMWMzUWdZbVVnWVdOalpYTnpaV1FnWVc1a0lHMTFkR0YwWldRZ2RYTnBibWNnWUNwQmRIUnlhV0oxZEdVb0tXQXVYRzRnSUNBcUlDaFVhR2x6SUdsdVkyeDFaR1Z6SUdGdWVYUm9hVzVuSUhSb1lYUWdabUZwYkhNZ1lEeHdjbTl3VG1GdFpUNGdhVzRnUEdWc1pXMWxiblErWUM0cFhHNGdJQ0FxSUVCMGVYQmxJSHRQWW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0J0ZFhOMFZYTmxVSEp2Y0dWeWRIazZJSHQ5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJYYUdWMGFHVnlJRzl5SUc1dmRDQnpaWFIwYVc1bklHRWdkbUZzZFdVZ1kyRjFjMlZ6SUhOcFpHVWdaV1ptWldOMGN5QnpkV05vSUdGeklIUnlhV2RuWlhKcGJtZGNiaUFnSUNvZ2NtVnpiM1Z5WTJWeklIUnZJR0psSUd4dllXUmxaQ0J2Y2lCMFpYaDBJSE5sYkdWamRHbHZiaUJqYUdGdVoyVnpMaUJYWlNCdGRYTjBJR1Z1YzNWeVpTQjBhR0YwWEc0Z0lDQXFJSFJvWlNCMllXeDFaU0JwY3lCdmJteDVJSE5sZENCcFppQnBkQ0JvWVhNZ1kyaGhibWRsWkM1Y2JpQWdJQ29nUUhSNWNHVWdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJR2hoYzFOcFpHVkZabVpsWTNSek9pQjdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWMmhsZEdobGNpQjBhR1VnY0hKdmNHVnlkSGtnYzJodmRXeGtJR0psSUhKbGJXOTJaV1FnZDJobGJpQnpaWFFnZEc4Z1lTQm1ZV3h6WlhrZ2RtRnNkV1V1WEc0Z0lDQXFJRUIwZVhCbElIdFBZbXBsWTNSOVhHNGdJQ0FxTDF4dUlDQm9ZWE5DYjI5c1pXRnVWbUZzZFdVNklIdDlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlhhR1YwYUdWeUlIUm9aU0J3Y205d1pYSjBlU0J0ZFhOMElHSmxJRzUxYldWeWFXTWdiM0lnY0dGeWMyVWdZWE1nWVZ4dUlDQWdLaUJ1ZFcxbGNtbGpJR0Z1WkNCemFHOTFiR1FnWW1VZ2NtVnRiM1psWkNCM2FHVnVJSE5sZENCMGJ5QmhJR1poYkhObGVTQjJZV3gxWlM1Y2JpQWdJQ29nUUhSNWNHVWdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJR2hoYzA1MWJXVnlhV05XWVd4MVpUb2dlMzBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRmRvWlhSb1pYSWdkR2hsSUhCeWIzQmxjblI1SUcxMWMzUWdZbVVnY0c5emFYUnBkbVVnYm5WdFpYSnBZeUJ2Y2lCd1lYSnpaU0JoY3lCaElIQnZjMmwwYVhabFhHNGdJQ0FxSUc1MWJXVnlhV01nWVc1a0lITm9iM1ZzWkNCaVpTQnlaVzF2ZG1Wa0lIZG9aVzRnYzJWMElIUnZJR0VnWm1Gc2MyVjVJSFpoYkhWbExseHVJQ0FnS2lCQWRIbHdaU0I3VDJKcVpXTjBmVnh1SUNBZ0tpOWNiaUFnYUdGelVHOXphWFJwZG1WT2RXMWxjbWxqVm1Gc2RXVTZJSHQ5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJYYUdWMGFHVnlJSFJvWlNCd2NtOXdaWEowZVNCallXNGdZbVVnZFhObFpDQmhjeUJoSUdac1lXY2dZWE1nZDJWc2JDQmhjeUIzYVhSb0lHRWdkbUZzZFdVdUlGSmxiVzkyWldSY2JpQWdJQ29nZDJobGJpQnpkSEpwWTNSc2VTQmxjWFZoYkNCMGJ5Qm1ZV3h6WlRzZ2NISmxjMlZ1ZENCM2FYUm9iM1YwSUdFZ2RtRnNkV1VnZDJobGJpQnpkSEpwWTNSc2VTQmxjWFZoYkZ4dUlDQWdLaUIwYnlCMGNuVmxPeUJ3Y21WelpXNTBJSGRwZEdnZ1lTQjJZV3gxWlNCdmRHaGxjbmRwYzJVdVhHNGdJQ0FxSUVCMGVYQmxJSHRQWW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0JvWVhOUGRtVnliRzloWkdWa1FtOXZiR1ZoYmxaaGJIVmxPaUI3ZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUVd4c0lHOW1JSFJvWlNCcGMwTjFjM1J2YlVGMGRISnBZblYwWlNncElHWjFibU4wYVc5dWN5QjBhR0YwSUdoaGRtVWdZbVZsYmlCcGJtcGxZM1JsWkM1Y2JpQWdJQ292WEc0Z0lGOXBjME4xYzNSdmJVRjBkSEpwWW5WMFpVWjFibU4wYVc5dWN6b2dXMTBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU5vWldOcmN5QjNhR1YwYUdWeUlHRWdjSEp2Y0dWeWRIa2dibUZ0WlNCcGN5QmhJR04xYzNSdmJTQmhkSFJ5YVdKMWRHVXVYRzRnSUNBcUlFQnRaWFJvYjJSY2JpQWdJQ292WEc0Z0lHbHpRM1Z6ZEc5dFFYUjBjbWxpZFhSbE9pQm1kVzVqZEdsdmJpaGhkSFJ5YVdKMWRHVk9ZVzFsS1NCN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCRVQwMVFjbTl3WlhKMGVTNWZhWE5EZFhOMGIyMUJkSFJ5YVdKMWRHVkdkVzVqZEdsdmJuTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUhaaGNpQnBjME4xYzNSdmJVRjBkSEpwWW5WMFpVWnVJRDBnUkU5TlVISnZjR1Z5ZEhrdVgybHpRM1Z6ZEc5dFFYUjBjbWxpZFhSbFJuVnVZM1JwYjI1elcybGRPMXh1SUNBZ0lDQWdhV1lnS0dselEzVnpkRzl0UVhSMGNtbGlkWFJsUm00b1lYUjBjbWxpZFhSbFRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGRYSnVjeUIwYUdVZ1pHVm1ZWFZzZENCd2NtOXdaWEowZVNCMllXeDFaU0JtYjNJZ1lTQkVUMDBnY0hKdmNHVnlkSGtnS0drdVpTNHNJRzV2ZENCaGJseHVJQ0FnS2lCaGRIUnlhV0oxZEdVcExpQk5iM04wSUdSbFptRjFiSFFnZG1Gc2RXVnpJR0Z5WlNBbkp5QnZjaUJtWVd4elpTd2dZblYwSUc1dmRDQmhiR3d1SUZkdmNuTmxJSGxsZEN4Y2JpQWdJQ29nYzI5dFpTQW9hVzRnY0dGeWRHbGpkV3hoY2l3Z1lIUjVjR1ZnS1NCMllYSjVJR1JsY0dWdVpHbHVaeUJ2YmlCMGFHVWdkSGx3WlNCdlppQmxiR1Z0Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJVVDBSUE9pQkpjeUJwZENCaVpYUjBaWElnZEc4Z1ozSmhZaUJoYkd3Z2RHaGxJSEJ2YzNOcFlteGxJSEJ5YjNCbGNuUnBaWE1nZDJobGJpQmpjbVZoZEdsdVp5QmhibHh1SUNBZ0tpQmxiR1Z0Wlc1MElIUnZJR0YyYjJsa0lHaGhkbWx1WnlCMGJ5QmpjbVZoZEdVZ2RHaGxJSE5oYldVZ1pXeGxiV1Z1ZENCMGQybGpaVDljYmlBZ0lDb3ZYRzRnSUdkbGRFUmxabUYxYkhSV1lXeDFaVVp2Y2xCeWIzQmxjblI1T2lCbWRXNWpkR2x2YmlodWIyUmxUbUZ0WlN3Z2NISnZjQ2tnZTF4dUlDQWdJSFpoY2lCdWIyUmxSR1ZtWVhWc2RITWdQU0JrWldaaGRXeDBWbUZzZFdWRFlXTm9aVnR1YjJSbFRtRnRaVjA3WEc0Z0lDQWdkbUZ5SUhSbGMzUkZiR1Z0Wlc1ME8xeHVJQ0FnSUdsbUlDZ2hibTlrWlVSbFptRjFiSFJ6S1NCN1hHNGdJQ0FnSUNCa1pXWmhkV3gwVm1Gc2RXVkRZV05vWlZ0dWIyUmxUbUZ0WlYwZ1BTQnViMlJsUkdWbVlYVnNkSE1nUFNCN2ZUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tDRW9jSEp2Y0NCcGJpQnViMlJsUkdWbVlYVnNkSE1wS1NCN1hHNGdJQ0FnSUNCMFpYTjBSV3hsYldWdWRDQTlJR1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb2JtOWtaVTVoYldVcE8xeHVJQ0FnSUNBZ2JtOWtaVVJsWm1GMWJIUnpXM0J5YjNCZElEMGdkR1Z6ZEVWc1pXMWxiblJiY0hKdmNGMDdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ1YjJSbFJHVm1ZWFZzZEhOYmNISnZjRjA3WEc0Z0lIMHNYRzVjYmlBZ2FXNXFaV04wYVc5dU9pQkVUMDFRY205d1pYSjBlVWx1YW1WamRHbHZibHh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQkVUMDFRY205d1pYSjBlVHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIERPTVByb3BlcnR5T3BlcmF0aW9uc1xuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5XCIpO1xuXG52YXIgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIgPSByZXF1aXJlKFwiLi9xdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlclwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuZnVuY3Rpb24gc2hvdWxkSWdub3JlVmFsdWUobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgfHxcbiAgICAoRE9NUHJvcGVydHkuaGFzQm9vbGVhblZhbHVlW25hbWVdICYmICF2YWx1ZSkgfHxcbiAgICAoRE9NUHJvcGVydHkuaGFzTnVtZXJpY1ZhbHVlW25hbWVdICYmIGlzTmFOKHZhbHVlKSkgfHxcbiAgICAoRE9NUHJvcGVydHkuaGFzUG9zaXRpdmVOdW1lcmljVmFsdWVbbmFtZV0gJiYgKHZhbHVlIDwgMSkpIHx8XG4gICAgKERPTVByb3BlcnR5Lmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWVbbmFtZV0gJiYgdmFsdWUgPT09IGZhbHNlKTtcbn1cblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICB2YXIgcmVhY3RQcm9wcyA9IHtcbiAgICBjaGlsZHJlbjogdHJ1ZSxcbiAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDogdHJ1ZSxcbiAgICBrZXk6IHRydWUsXG4gICAgcmVmOiB0cnVlXG4gIH07XG4gIHZhciB3YXJuZWRQcm9wZXJ0aWVzID0ge307XG5cbiAgdmFyIHdhcm5Vbmtub3duUHJvcGVydHkgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKHJlYWN0UHJvcHMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgcmVhY3RQcm9wc1tuYW1lXSB8fFxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBkYXRhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuICAgIHZhciBzdGFuZGFyZE5hbWUgPSAoXG4gICAgICBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShsb3dlckNhc2VkTmFtZSkgP1xuICAgICAgICBsb3dlckNhc2VkTmFtZSA6XG4gICAgICBET01Qcm9wZXJ0eS5nZXRQb3NzaWJsZVN0YW5kYXJkTmFtZS5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgP1xuICAgICAgICBET01Qcm9wZXJ0eS5nZXRQb3NzaWJsZVN0YW5kYXJkTmFtZVtsb3dlckNhc2VkTmFtZV0gOlxuICAgICAgICBudWxsXG4gICAgKTtcblxuICAgIC8vIEZvciBub3csIG9ubHkgd2FybiB3aGVuIHdlIGhhdmUgYSBzdWdnZXN0ZWQgY29ycmVjdGlvbi4gVGhpcyBwcmV2ZW50c1xuICAgIC8vIGxvZ2dpbmcgdG9vIG11Y2ggd2hlbiB1c2luZyB0cmFuc2ZlclByb3BzVG8uXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBzdGFuZGFyZE5hbWUgPT0gbnVsbCxcbiAgICAgICdVbmtub3duIERPTSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsXG4gICAgICBuYW1lLFxuICAgICAgc3RhbmRhcmROYW1lXG4gICAgKSA6IG51bGwpO1xuXG4gIH07XG59XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIERPTSBwcm9wZXJ0aWVzLlxuICovXG52YXIgRE9NUHJvcGVydHlPcGVyYXRpb25zID0ge1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIElEIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVW5lc2NhcGVkIElELlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcuXG4gICAqL1xuICBjcmVhdGVNYXJrdXBGb3JJRDogZnVuY3Rpb24oaWQpIHtcbiAgICByZXR1cm4gRE9NUHJvcGVydHkuSURfQVRUUklCVVRFX05BTUUgKyAnPScgK1xuICAgICAgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIoaWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBNYXJrdXAgc3RyaW5nLCBvciBudWxsIGlmIHRoZSBwcm9wZXJ0eSB3YXMgaW52YWxpZC5cbiAgICovXG4gIGNyZWF0ZU1hcmt1cEZvclByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICBET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtuYW1lXSkge1xuICAgICAgaWYgKHNob3VsZElnbm9yZVZhbHVlKG5hbWUsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IERPTVByb3BlcnR5LmdldEF0dHJpYnV0ZU5hbWVbbmFtZV07XG4gICAgICBpZiAoRE9NUHJvcGVydHkuaGFzQm9vbGVhblZhbHVlW25hbWVdIHx8XG4gICAgICAgICAgKERPTVByb3BlcnR5Lmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWVbbmFtZV0gJiYgdmFsdWUgPT09IHRydWUpKSB7XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWUgKyAnPScgKyBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3Nlcih2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5hbWUgKyAnPScgKyBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3Nlcih2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHdhcm5Vbmtub3duUHJvcGVydHkobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqL1xuICBzZXRWYWx1ZUZvclByb3BlcnR5OiBmdW5jdGlvbihub2RlLCBuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICBET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtuYW1lXSkge1xuICAgICAgdmFyIG11dGF0aW9uTWV0aG9kID0gRE9NUHJvcGVydHkuZ2V0TXV0YXRpb25NZXRob2RbbmFtZV07XG4gICAgICBpZiAobXV0YXRpb25NZXRob2QpIHtcbiAgICAgICAgbXV0YXRpb25NZXRob2Qobm9kZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzaG91bGRJZ25vcmVWYWx1ZShuYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kZWxldGVWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUpO1xuICAgICAgfSBlbHNlIGlmIChET01Qcm9wZXJ0eS5tdXN0VXNlQXR0cmlidXRlW25hbWVdKSB7XG4gICAgICAgIC8vIGBzZXRBdHRyaWJ1dGVgIHdpdGggb2JqZWN0cyBiZWNvbWVzIG9ubHkgYFtvYmplY3RdYCBpbiBJRTgvOSxcbiAgICAgICAgLy8gKCcnICsgdmFsdWUpIG1ha2VzIGl0IG91dHB1dCB0aGUgY29ycmVjdCB0b1N0cmluZygpLXZhbHVlLlxuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShET01Qcm9wZXJ0eS5nZXRBdHRyaWJ1dGVOYW1lW25hbWVdLCAnJyArIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSA9IERPTVByb3BlcnR5LmdldFByb3BlcnR5TmFtZVtuYW1lXTtcbiAgICAgICAgLy8gTXVzdCBleHBsaWNpdGx5IGNhc3QgdmFsdWVzIGZvciBIQVNfU0lERV9FRkZFQ1RTLXByb3BlcnRpZXMgdG8gdGhlXG4gICAgICAgIC8vIHByb3BlcnR5IHR5cGUgYmVmb3JlIGNvbXBhcmluZzsgb25seSBgdmFsdWVgIGRvZXMgYW5kIGlzIHN0cmluZy5cbiAgICAgICAgaWYgKCFET01Qcm9wZXJ0eS5oYXNTaWRlRWZmZWN0c1tuYW1lXSB8fFxuICAgICAgICAgICAgKCcnICsgbm9kZVtwcm9wTmFtZV0pICE9PSAoJycgKyB2YWx1ZSkpIHtcbiAgICAgICAgICAvLyBDb250cmFyeSB0byBgc2V0QXR0cmlidXRlYCwgb2JqZWN0IHByb3BlcnRpZXMgYXJlIHByb3Blcmx5XG4gICAgICAgICAgLy8gYHRvU3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgICAgIG5vZGVbcHJvcE5hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB3YXJuVW5rbm93blByb3BlcnR5KG5hbWUpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIGRlbGV0ZVZhbHVlRm9yUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgICBpZiAoRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbbmFtZV0pIHtcbiAgICAgIHZhciBtdXRhdGlvbk1ldGhvZCA9IERPTVByb3BlcnR5LmdldE11dGF0aW9uTWV0aG9kW25hbWVdO1xuICAgICAgaWYgKG11dGF0aW9uTWV0aG9kKSB7XG4gICAgICAgIG11dGF0aW9uTWV0aG9kKG5vZGUsIHVuZGVmaW5lZCk7XG4gICAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5Lm11c3RVc2VBdHRyaWJ1dGVbbmFtZV0pIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoRE9NUHJvcGVydHkuZ2V0QXR0cmlidXRlTmFtZVtuYW1lXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBET01Qcm9wZXJ0eS5nZXRQcm9wZXJ0eU5hbWVbbmFtZV07XG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBET01Qcm9wZXJ0eS5nZXREZWZhdWx0VmFsdWVGb3JQcm9wZXJ0eShcbiAgICAgICAgICBub2RlLm5vZGVOYW1lLFxuICAgICAgICAgIHByb3BOYW1lXG4gICAgICAgICk7XG4gICAgICAgIGlmICghRE9NUHJvcGVydHkuaGFzU2lkZUVmZmVjdHNbbmFtZV0gfHxcbiAgICAgICAgICAgICgnJyArIG5vZGVbcHJvcE5hbWVdKSAhPT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgbm9kZVtwcm9wTmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgd2FyblVua25vd25Qcm9wZXJ0eShuYW1lKTtcbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Qcm9wZXJ0eU9wZXJhdGlvbnM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZSRTlOVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRVQwMVFjbTl3WlhKMGVVOXdaWEpoZEdsdmJuTmNiaUFxSUVCMGVYQmxZMmhsWTJ0eklITjBZWFJwWXkxdmJteDVYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnUkU5TlVISnZjR1Z5ZEhrZ1BTQnlaWEYxYVhKbEtGd2lMaTlFVDAxUWNtOXdaWEowZVZ3aUtUdGNibHh1ZG1GeUlIRjFiM1JsUVhSMGNtbGlkWFJsVm1Gc2RXVkdiM0pDY205M2MyVnlJRDBnY21WeGRXbHlaU2hjSWk0dmNYVnZkR1ZCZEhSeWFXSjFkR1ZXWVd4MVpVWnZja0p5YjNkelpYSmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNibVoxYm1OMGFXOXVJSE5vYjNWc1pFbG5ibTl5WlZaaGJIVmxLRzVoYldVc0lIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQjJZV3gxWlNBOVBTQnVkV3hzSUh4OFhHNGdJQ0FnS0VSUFRWQnliM0JsY25SNUxtaGhjMEp2YjJ4bFlXNVdZV3gxWlZ0dVlXMWxYU0FtSmlBaGRtRnNkV1VwSUh4OFhHNGdJQ0FnS0VSUFRWQnliM0JsY25SNUxtaGhjMDUxYldWeWFXTldZV3gxWlZ0dVlXMWxYU0FtSmlCcGMwNWhUaWgyWVd4MVpTa3BJSHg4WEc0Z0lDQWdLRVJQVFZCeWIzQmxjblI1TG1oaGMxQnZjMmwwYVhabFRuVnRaWEpwWTFaaGJIVmxXMjVoYldWZElDWW1JQ2gyWVd4MVpTQThJREVwS1NCOGZGeHVJQ0FnSUNoRVQwMVFjbTl3WlhKMGVTNW9ZWE5QZG1WeWJHOWhaR1ZrUW05dmJHVmhibFpoYkhWbFcyNWhiV1ZkSUNZbUlIWmhiSFZsSUQwOVBTQm1ZV3h6WlNrN1hHNTlYRzVjYm1sbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdkbUZ5SUhKbFlXTjBVSEp2Y0hNZ1BTQjdYRzRnSUNBZ1kyaHBiR1J5Wlc0NklIUnlkV1VzWEc0Z0lDQWdaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV3NklIUnlkV1VzWEc0Z0lDQWdhMlY1T2lCMGNuVmxMRnh1SUNBZ0lISmxaam9nZEhKMVpWeHVJQ0I5TzF4dUlDQjJZWElnZDJGeWJtVmtVSEp2Y0dWeWRHbGxjeUE5SUh0OU8xeHVYRzRnSUhaaGNpQjNZWEp1Vlc1cmJtOTNibEJ5YjNCbGNuUjVJRDBnWm5WdVkzUnBiMjRvYm1GdFpTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGamRGQnliM0J6TG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcElDWW1JSEpsWVdOMFVISnZjSE5iYm1GdFpWMGdmSHhjYmlBZ0lDQWdJQ0FnZDJGeWJtVmtVSEp2Y0dWeWRHbGxjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHVZVzFsS1NBbUppQjNZWEp1WldSUWNtOXdaWEowYVdWelcyNWhiV1ZkS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkMkZ5Ym1Wa1VISnZjR1Z5ZEdsbGMxdHVZVzFsWFNBOUlIUnlkV1U3WEc0Z0lDQWdkbUZ5SUd4dmQyVnlRMkZ6WldST1lXMWxJRDBnYm1GdFpTNTBiMHh2ZDJWeVEyRnpaU2dwTzF4dVhHNGdJQ0FnTHk4Z1pHRjBZUzBxSUdGMGRISnBZblYwWlhNZ2MyaHZkV3hrSUdKbElHeHZkMlZ5WTJGelpUc2djM1ZuWjJWemRDQjBhR1VnYkc5M1pYSmpZWE5sSUhabGNuTnBiMjVjYmlBZ0lDQjJZWElnYzNSaGJtUmhjbVJPWVcxbElEMGdLRnh1SUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YVhORGRYTjBiMjFCZEhSeWFXSjFkR1VvYkc5M1pYSkRZWE5sWkU1aGJXVXBJRDljYmlBZ0lDQWdJQ0FnYkc5M1pYSkRZWE5sWkU1aGJXVWdPbHh1SUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1WjJWMFVHOXpjMmxpYkdWVGRHRnVaR0Z5WkU1aGJXVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JHOTNaWEpEWVhObFpFNWhiV1VwSUQ5Y2JpQWdJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3VaMlYwVUc5emMybGliR1ZUZEdGdVpHRnlaRTVoYldWYmJHOTNaWEpEWVhObFpFNWhiV1ZkSURwY2JpQWdJQ0FnSUNBZ2JuVnNiRnh1SUNBZ0lDazdYRzVjYmlBZ0lDQXZMeUJHYjNJZ2JtOTNMQ0J2Ym14NUlIZGhjbTRnZDJobGJpQjNaU0JvWVhabElHRWdjM1ZuWjJWemRHVmtJR052Y25KbFkzUnBiMjR1SUZSb2FYTWdjSEpsZG1WdWRITmNiaUFnSUNBdkx5QnNiMmRuYVc1bklIUnZieUJ0ZFdOb0lIZG9aVzRnZFhOcGJtY2dkSEpoYm5ObVpYSlFjbTl3YzFSdkxseHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdjM1JoYm1SaGNtUk9ZVzFsSUQwOUlHNTFiR3dzWEc0Z0lDQWdJQ0FuVlc1cmJtOTNiaUJFVDAwZ2NISnZjR1Z5ZEhrZ0pYTXVJRVJwWkNCNWIzVWdiV1ZoYmlBbGN6OG5MRnh1SUNBZ0lDQWdibUZ0WlN4Y2JpQWdJQ0FnSUhOMFlXNWtZWEprVG1GdFpWeHVJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JseHVJQ0I5TzF4dWZWeHVYRzR2S2lwY2JpQXFJRTl3WlhKaGRHbHZibk1nWm05eUlHUmxZV3hwYm1jZ2QybDBhQ0JFVDAwZ2NISnZjR1Z5ZEdsbGN5NWNiaUFxTDF4dWRtRnlJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3lBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsY3lCdFlYSnJkWEFnWm05eUlIUm9aU0JKUkNCd2NtOXdaWEowZVM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRlZ1WlhOallYQmxaQ0JKUkM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JOWVhKcmRYQWdjM1J5YVc1bkxseHVJQ0FnS2k5Y2JpQWdZM0psWVhSbFRXRnlhM1Z3Um05eVNVUTZJR1oxYm1OMGFXOXVLR2xrS1NCN1hHNGdJQ0FnY21WMGRYSnVJRVJQVFZCeWIzQmxjblI1TGtsRVgwRlVWRkpKUWxWVVJWOU9RVTFGSUNzZ0p6MG5JQ3RjYmlBZ0lDQWdJSEYxYjNSbFFYUjBjbWxpZFhSbFZtRnNkV1ZHYjNKQ2NtOTNjMlZ5S0dsa0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxjeUJ0WVhKcmRYQWdabTl5SUdFZ2NISnZjR1Z5ZEhrdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnVZVzFsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdLbjBnZG1Gc2RXVmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1AzTjBjbWx1WjMwZ1RXRnlhM1Z3SUhOMGNtbHVaeXdnYjNJZ2JuVnNiQ0JwWmlCMGFHVWdjSEp2Y0dWeWRIa2dkMkZ6SUdsdWRtRnNhV1F1WEc0Z0lDQXFMMXh1SUNCamNtVmhkR1ZOWVhKcmRYQkdiM0pRY205d1pYSjBlVG9nWm5WdVkzUnBiMjRvYm1GdFpTd2dkbUZzZFdVcElIdGNiaUFnSUNCcFppQW9SRTlOVUhKdmNHVnlkSGt1YVhOVGRHRnVaR0Z5WkU1aGJXVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2tnSmlaY2JpQWdJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3VhWE5UZEdGdVpHRnlaRTVoYldWYmJtRnRaVjBwSUh0Y2JpQWdJQ0FnSUdsbUlDaHphRzkxYkdSSloyNXZjbVZXWVd4MVpTaHVZVzFsTENCMllXeDFaU2twSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUNjbk8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RtRnlJR0YwZEhKcFluVjBaVTVoYldVZ1BTQkVUMDFRY205d1pYSjBlUzVuWlhSQmRIUnlhV0oxZEdWT1lXMWxXMjVoYldWZE8xeHVJQ0FnSUNBZ2FXWWdLRVJQVFZCeWIzQmxjblI1TG1oaGMwSnZiMnhsWVc1V1lXeDFaVnR1WVcxbFhTQjhmRnh1SUNBZ0lDQWdJQ0FnSUNoRVQwMVFjbTl3WlhKMGVTNW9ZWE5QZG1WeWJHOWhaR1ZrUW05dmJHVmhibFpoYkhWbFcyNWhiV1ZkSUNZbUlIWmhiSFZsSUQwOVBTQjBjblZsS1NrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lYUjBjbWxpZFhSbFRtRnRaVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQmhkSFJ5YVdKMWRHVk9ZVzFsSUNzZ0p6MG5JQ3NnY1hWdmRHVkJkSFJ5YVdKMWRHVldZV3gxWlVadmNrSnliM2R6WlhJb2RtRnNkV1VwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvUkU5TlVISnZjR1Z5ZEhrdWFYTkRkWE4wYjIxQmRIUnlhV0oxZEdVb2JtRnRaU2twSUh0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlNBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlBbkp6dGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCdVlXMWxJQ3NnSnowbklDc2djWFZ2ZEdWQmRIUnlhV0oxZEdWV1lXeDFaVVp2Y2tKeWIzZHpaWElvZG1Gc2RXVXBPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNCM1lYSnVWVzVyYm05M2JsQnliM0JsY25SNUtHNWhiV1VwTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2JuVnNiRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1UyVjBjeUIwYUdVZ2RtRnNkV1VnWm05eUlHRWdjSEp2Y0dWeWRIa2diMjRnWVNCdWIyUmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlHNXZaR1ZjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHNWhiV1ZjYmlBZ0lDb2dRSEJoY21GdElIc3FmU0IyWVd4MVpWeHVJQ0FnS2k5Y2JpQWdjMlYwVm1Gc2RXVkdiM0pRY205d1pYSjBlVG9nWm5WdVkzUnBiMjRvYm05a1pTd2dibUZ0WlN3Z2RtRnNkV1VwSUh0Y2JpQWdJQ0JwWmlBb1JFOU5VSEp2Y0dWeWRIa3VhWE5UZEdGdVpHRnlaRTVoYldVdWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa2dKaVpjYmlBZ0lDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdWFYTlRkR0Z1WkdGeVpFNWhiV1ZiYm1GdFpWMHBJSHRjYmlBZ0lDQWdJSFpoY2lCdGRYUmhkR2x2YmsxbGRHaHZaQ0E5SUVSUFRWQnliM0JsY25SNUxtZGxkRTExZEdGMGFXOXVUV1YwYUc5a1cyNWhiV1ZkTzF4dUlDQWdJQ0FnYVdZZ0tHMTFkR0YwYVc5dVRXVjBhRzlrS1NCN1hHNGdJQ0FnSUNBZ0lHMTFkR0YwYVc5dVRXVjBhRzlrS0c1dlpHVXNJSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9jMmh2ZFd4a1NXZHViM0psVm1Gc2RXVW9ibUZ0WlN3Z2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WkdWc1pYUmxWbUZzZFdWR2IzSlFjbTl3WlhKMGVTaHViMlJsTENCdVlXMWxLVHRjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvUkU5TlVISnZjR1Z5ZEhrdWJYVnpkRlZ6WlVGMGRISnBZblYwWlZ0dVlXMWxYU2tnZTF4dUlDQWdJQ0FnSUNBdkx5QmdjMlYwUVhSMGNtbGlkWFJsWUNCM2FYUm9JRzlpYW1WamRITWdZbVZqYjIxbGN5QnZibXg1SUdCYmIySnFaV04wWFdBZ2FXNGdTVVU0THprc1hHNGdJQ0FnSUNBZ0lDOHZJQ2duSnlBcklIWmhiSFZsS1NCdFlXdGxjeUJwZENCdmRYUndkWFFnZEdobElHTnZjbkpsWTNRZ2RHOVRkSEpwYm1jb0tTMTJZV3gxWlM1Y2JpQWdJQ0FnSUNBZ2JtOWtaUzV6WlhSQmRIUnlhV0oxZEdVb1JFOU5VSEp2Y0dWeWRIa3VaMlYwUVhSMGNtbGlkWFJsVG1GdFpWdHVZVzFsWFN3Z0p5Y2dLeUIyWVd4MVpTazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnY0hKdmNFNWhiV1VnUFNCRVQwMVFjbTl3WlhKMGVTNW5aWFJRY205d1pYSjBlVTVoYldWYmJtRnRaVjA3WEc0Z0lDQWdJQ0FnSUM4dklFMTFjM1FnWlhod2JHbGphWFJzZVNCallYTjBJSFpoYkhWbGN5Qm1iM0lnU0VGVFgxTkpSRVZmUlVaR1JVTlVVeTF3Y205d1pYSjBhV1Z6SUhSdklIUm9aVnh1SUNBZ0lDQWdJQ0F2THlCd2NtOXdaWEowZVNCMGVYQmxJR0psWm05eVpTQmpiMjF3WVhKcGJtYzdJRzl1YkhrZ1lIWmhiSFZsWUNCa2IyVnpJR0Z1WkNCcGN5QnpkSEpwYm1jdVhHNGdJQ0FnSUNBZ0lHbG1JQ2doUkU5TlVISnZjR1Z5ZEhrdWFHRnpVMmxrWlVWbVptVmpkSE5iYm1GdFpWMGdmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lDZ25KeUFySUc1dlpHVmJjSEp2Y0U1aGJXVmRLU0FoUFQwZ0tDY25JQ3NnZG1Gc2RXVXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdRMjl1ZEhKaGNua2dkRzhnWUhObGRFRjBkSEpwWW5WMFpXQXNJRzlpYW1WamRDQndjbTl3WlhKMGFXVnpJR0Z5WlNCd2NtOXdaWEpzZVZ4dUlDQWdJQ0FnSUNBZ0lDOHZJR0IwYjFOMGNtbHVaMkJsWkNCaWVTQkpSVGd2T1M1Y2JpQWdJQ0FnSUNBZ0lDQnViMlJsVzNCeWIzQk9ZVzFsWFNBOUlIWmhiSFZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoRVQwMVFjbTl3WlhKMGVTNXBjME4xYzNSdmJVRjBkSEpwWW5WMFpTaHVZVzFsS1NrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbElEMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdibTlrWlM1eVpXMXZkbVZCZEhSeWFXSjFkR1VvYm1GdFpTazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnViMlJsTG5ObGRFRjBkSEpwWW5WMFpTaHVZVzFsTENBbkp5QXJJSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnZDJGeWJsVnVhMjV2ZDI1UWNtOXdaWEowZVNodVlXMWxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVSbGJHVjBaWE1nZEdobElIWmhiSFZsSUdadmNpQmhJSEJ5YjNCbGNuUjVJRzl1SUdFZ2JtOWtaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0RVQwMUZiR1Z0Wlc1MGZTQnViMlJsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnVZVzFsWEc0Z0lDQXFMMXh1SUNCa1pXeGxkR1ZXWVd4MVpVWnZjbEJ5YjNCbGNuUjVPaUJtZFc1amRHbHZiaWh1YjJSbExDQnVZVzFsS1NCN1hHNGdJQ0FnYVdZZ0tFUlBUVkJ5YjNCbGNuUjVMbWx6VTNSaGJtUmhjbVJPWVcxbExtaGhjMDkzYmxCeWIzQmxjblI1S0c1aGJXVXBJQ1ltWEc0Z0lDQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtbHpVM1JoYm1SaGNtUk9ZVzFsVzI1aGJXVmRLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2JYVjBZWFJwYjI1TlpYUm9iMlFnUFNCRVQwMVFjbTl3WlhKMGVTNW5aWFJOZFhSaGRHbHZiazFsZEdodlpGdHVZVzFsWFR0Y2JpQWdJQ0FnSUdsbUlDaHRkWFJoZEdsdmJrMWxkR2h2WkNrZ2UxeHVJQ0FnSUNBZ0lDQnRkWFJoZEdsdmJrMWxkR2h2WkNodWIyUmxMQ0IxYm1SbFptbHVaV1FwTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoRVQwMVFjbTl3WlhKMGVTNXRkWE4wVlhObFFYUjBjbWxpZFhSbFcyNWhiV1ZkS1NCN1hHNGdJQ0FnSUNBZ0lHNXZaR1V1Y21WdGIzWmxRWFIwY21saWRYUmxLRVJQVFZCeWIzQmxjblI1TG1kbGRFRjBkSEpwWW5WMFpVNWhiV1ZiYm1GdFpWMHBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUhCeWIzQk9ZVzFsSUQwZ1JFOU5VSEp2Y0dWeWRIa3VaMlYwVUhKdmNHVnlkSGxPWVcxbFcyNWhiV1ZkTzF4dUlDQWdJQ0FnSUNCMllYSWdaR1ZtWVhWc2RGWmhiSFZsSUQwZ1JFOU5VSEp2Y0dWeWRIa3VaMlYwUkdWbVlYVnNkRlpoYkhWbFJtOXlVSEp2Y0dWeWRIa29YRzRnSUNBZ0lDQWdJQ0FnYm05a1pTNXViMlJsVG1GdFpTeGNiaUFnSUNBZ0lDQWdJQ0J3Y205d1RtRnRaVnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNCcFppQW9JVVJQVFZCeWIzQmxjblI1TG1oaGMxTnBaR1ZGWm1abFkzUnpXMjVoYldWZElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNBb0p5Y2dLeUJ1YjJSbFczQnliM0JPWVcxbFhTa2dJVDA5SUdSbFptRjFiSFJXWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUc1dlpHVmJjSEp2Y0U1aGJXVmRJRDBnWkdWbVlYVnNkRlpoYkhWbE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaEVUMDFRY205d1pYSjBlUzVwYzBOMWMzUnZiVUYwZEhKcFluVjBaU2h1WVcxbEtTa2dlMXh1SUNBZ0lDQWdibTlrWlM1eVpXMXZkbVZCZEhSeWFXSjFkR1VvYm1GdFpTazdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUhkaGNtNVZibXR1YjNkdVVISnZjR1Z5ZEhrb2JtRnRaU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1JFOU5VSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRGFuZ2VyXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbi8qanNsaW50IGV2aWw6IHRydWUsIHN1YjogdHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgY3JlYXRlTm9kZXNGcm9tTWFya3VwID0gcmVxdWlyZShcIi4vY3JlYXRlTm9kZXNGcm9tTWFya3VwXCIpO1xudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xudmFyIGdldE1hcmt1cFdyYXAgPSByZXF1aXJlKFwiLi9nZXRNYXJrdXBXcmFwXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxudmFyIE9QRU5fVEFHX05BTUVfRVhQID0gL14oPFteIFxcLz5dKykvO1xudmFyIFJFU1VMVF9JTkRFWF9BVFRSID0gJ2RhdGEtZGFuZ2VyLWluZGV4JztcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYG5vZGVOYW1lYCBmcm9tIGEgc3RyaW5nIG9mIG1hcmt1cC5cbiAqXG4gKiBOT1RFOiBFeHRyYWN0aW5nIHRoZSBgbm9kZU5hbWVgIGRvZXMgbm90IHJlcXVpcmUgYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hcbiAqIGJlY2F1c2Ugd2UgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBSZWFjdC1nZW5lcmF0ZWQgbWFya3VwIChpLmUuIHRoZXJlIGFyZSBub1xuICogc3BhY2VzIHN1cnJvdW5kaW5nIHRoZSBvcGVuaW5nIHRhZyBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBTdHJpbmcgb2YgbWFya3VwLlxuICogQHJldHVybiB7c3RyaW5nfSBOb2RlIG5hbWUgb2YgdGhlIHN1cHBsaWVkIG1hcmt1cC5cbiAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20vZXh0cmFjdC1ub2RlbmFtZVxuICovXG5mdW5jdGlvbiBnZXROb2RlTmFtZShtYXJrdXApIHtcbiAgcmV0dXJuIG1hcmt1cC5zdWJzdHJpbmcoMSwgbWFya3VwLmluZGV4T2YoJyAnKSk7XG59XG5cbnZhciBEYW5nZXIgPSB7XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgbWFya3VwIGludG8gYW4gYXJyYXkgb2Ygbm9kZXMuIFRoZSBtYXJrdXAgaXMgZXhwZWN0ZWQgdG8gcmVuZGVyXG4gICAqIGludG8gYSBsaXN0IG9mIHJvb3Qgbm9kZXMuIEFsc28sIHRoZSBsZW5ndGggb2YgYHJlc3VsdExpc3RgIGFuZFxuICAgKiBgbWFya3VwTGlzdGAgc2hvdWxkIGJlIHRoZSBzYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5PHN0cmluZz59IG1hcmt1cExpc3QgTGlzdCBvZiBtYXJrdXAgc3RyaW5ncyB0byByZW5kZXIuXG4gICAqIEByZXR1cm4ge2FycmF5PERPTUVsZW1lbnQ+fSBMaXN0IG9mIHJlbmRlcmVkIG5vZGVzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhbmdlcm91c2x5UmVuZGVyTWFya3VwOiBmdW5jdGlvbihtYXJrdXBMaXN0KSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSxcbiAgICAgICdkYW5nZXJvdXNseVJlbmRlck1hcmt1cCguLi4pOiBDYW5ub3QgcmVuZGVyIG1hcmt1cCBpbiBhIHdvcmtlciAnICtcbiAgICAgICd0aHJlYWQuIE1ha2Ugc3VyZSBgd2luZG93YCBhbmQgYGRvY3VtZW50YCBhcmUgYXZhaWxhYmxlIGdsb2JhbGx5ICcgK1xuICAgICAgJ2JlZm9yZSByZXF1aXJpbmcgUmVhY3Qgd2hlbiB1bml0IHRlc3Rpbmcgb3IgdXNlICcgK1xuICAgICAgJ1JlYWN0LnJlbmRlclRvU3RyaW5nIGZvciBzZXJ2ZXIgcmVuZGVyaW5nLidcbiAgICApIDogaW52YXJpYW50KEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkpO1xuICAgIHZhciBub2RlTmFtZTtcbiAgICB2YXIgbWFya3VwQnlOb2RlTmFtZSA9IHt9O1xuICAgIC8vIEdyb3VwIG1hcmt1cCBieSBgbm9kZU5hbWVgIGlmIGEgd3JhcCBpcyBuZWNlc3NhcnksIGVsc2UgYnkgJyonLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya3VwTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgbWFya3VwTGlzdFtpXSxcbiAgICAgICAgJ2Rhbmdlcm91c2x5UmVuZGVyTWFya3VwKC4uLik6IE1pc3NpbmcgbWFya3VwLidcbiAgICAgICkgOiBpbnZhcmlhbnQobWFya3VwTGlzdFtpXSkpO1xuICAgICAgbm9kZU5hbWUgPSBnZXROb2RlTmFtZShtYXJrdXBMaXN0W2ldKTtcbiAgICAgIG5vZGVOYW1lID0gZ2V0TWFya3VwV3JhcChub2RlTmFtZSkgPyBub2RlTmFtZSA6ICcqJztcbiAgICAgIG1hcmt1cEJ5Tm9kZU5hbWVbbm9kZU5hbWVdID0gbWFya3VwQnlOb2RlTmFtZVtub2RlTmFtZV0gfHwgW107XG4gICAgICBtYXJrdXBCeU5vZGVOYW1lW25vZGVOYW1lXVtpXSA9IG1hcmt1cExpc3RbaV07XG4gICAgfVxuICAgIHZhciByZXN1bHRMaXN0ID0gW107XG4gICAgdmFyIHJlc3VsdExpc3RBc3NpZ25tZW50Q291bnQgPSAwO1xuICAgIGZvciAobm9kZU5hbWUgaW4gbWFya3VwQnlOb2RlTmFtZSkge1xuICAgICAgaWYgKCFtYXJrdXBCeU5vZGVOYW1lLmhhc093blByb3BlcnR5KG5vZGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBtYXJrdXBMaXN0QnlOb2RlTmFtZSA9IG1hcmt1cEJ5Tm9kZU5hbWVbbm9kZU5hbWVdO1xuXG4gICAgICAvLyBUaGlzIGZvci1pbiBsb29wIHNraXBzIHRoZSBob2xlcyBvZiB0aGUgc3BhcnNlIGFycmF5LiBUaGUgb3JkZXIgb2ZcbiAgICAgIC8vIGl0ZXJhdGlvbiBzaG91bGQgZm9sbG93IHRoZSBvcmRlciBvZiBhc3NpZ25tZW50LCB3aGljaCBoYXBwZW5zIHRvIG1hdGNoXG4gICAgICAvLyBudW1lcmljYWwgaW5kZXggb3JkZXIsIGJ1dCB3ZSBkb24ndCByZWx5IG9uIHRoYXQuXG4gICAgICB2YXIgcmVzdWx0SW5kZXg7XG4gICAgICBmb3IgKHJlc3VsdEluZGV4IGluIG1hcmt1cExpc3RCeU5vZGVOYW1lKSB7XG4gICAgICAgIGlmIChtYXJrdXBMaXN0QnlOb2RlTmFtZS5oYXNPd25Qcm9wZXJ0eShyZXN1bHRJbmRleCkpIHtcbiAgICAgICAgICB2YXIgbWFya3VwID0gbWFya3VwTGlzdEJ5Tm9kZU5hbWVbcmVzdWx0SW5kZXhdO1xuXG4gICAgICAgICAgLy8gUHVzaCB0aGUgcmVxdWVzdGVkIG1hcmt1cCB3aXRoIGFuIGFkZGl0aW9uYWwgUkVTVUxUX0lOREVYX0FUVFJcbiAgICAgICAgICAvLyBhdHRyaWJ1dGUuICBJZiB0aGUgbWFya3VwIGRvZXMgbm90IHN0YXJ0IHdpdGggYSA8IGNoYXJhY3RlciwgaXRcbiAgICAgICAgICAvLyB3aWxsIGJlIGRpc2NhcmRlZCBiZWxvdyAod2l0aCBhbiBhcHByb3ByaWF0ZSBjb25zb2xlLmVycm9yKS5cbiAgICAgICAgICBtYXJrdXBMaXN0QnlOb2RlTmFtZVtyZXN1bHRJbmRleF0gPSBtYXJrdXAucmVwbGFjZShcbiAgICAgICAgICAgIE9QRU5fVEFHX05BTUVfRVhQLFxuICAgICAgICAgICAgLy8gVGhpcyBpbmRleCB3aWxsIGJlIHBhcnNlZCBiYWNrIG91dCBiZWxvdy5cbiAgICAgICAgICAgICckMSAnICsgUkVTVUxUX0lOREVYX0FUVFIgKyAnPVwiJyArIHJlc3VsdEluZGV4ICsgJ1wiICdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbmRlciBlYWNoIGdyb3VwIG9mIG1hcmt1cCB3aXRoIHNpbWlsYXIgd3JhcHBpbmcgYG5vZGVOYW1lYC5cbiAgICAgIHZhciByZW5kZXJOb2RlcyA9IGNyZWF0ZU5vZGVzRnJvbU1hcmt1cChcbiAgICAgICAgbWFya3VwTGlzdEJ5Tm9kZU5hbWUuam9pbignJyksXG4gICAgICAgIGVtcHR5RnVuY3Rpb24gLy8gRG8gbm90aGluZyBzcGVjaWFsIHdpdGggPHNjcmlwdD4gdGFncy5cbiAgICAgICk7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVuZGVyTm9kZXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgdmFyIHJlbmRlck5vZGUgPSByZW5kZXJOb2Rlc1tqXTtcbiAgICAgICAgaWYgKHJlbmRlck5vZGUuaGFzQXR0cmlidXRlICYmXG4gICAgICAgICAgICByZW5kZXJOb2RlLmhhc0F0dHJpYnV0ZShSRVNVTFRfSU5ERVhfQVRUUikpIHtcblxuICAgICAgICAgIHJlc3VsdEluZGV4ID0gK3JlbmRlck5vZGUuZ2V0QXR0cmlidXRlKFJFU1VMVF9JTkRFWF9BVFRSKTtcbiAgICAgICAgICByZW5kZXJOb2RlLnJlbW92ZUF0dHJpYnV0ZShSRVNVTFRfSU5ERVhfQVRUUik7XG5cbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgICAgIXJlc3VsdExpc3QuaGFzT3duUHJvcGVydHkocmVzdWx0SW5kZXgpLFxuICAgICAgICAgICAgJ0RhbmdlcjogQXNzaWduaW5nIHRvIGFuIGFscmVhZHktb2NjdXBpZWQgcmVzdWx0IGluZGV4LidcbiAgICAgICAgICApIDogaW52YXJpYW50KCFyZXN1bHRMaXN0Lmhhc093blByb3BlcnR5KHJlc3VsdEluZGV4KSkpO1xuXG4gICAgICAgICAgcmVzdWx0TGlzdFtyZXN1bHRJbmRleF0gPSByZW5kZXJOb2RlO1xuXG4gICAgICAgICAgLy8gVGhpcyBzaG91bGQgbWF0Y2ggcmVzdWx0TGlzdC5sZW5ndGggYW5kIG1hcmt1cExpc3QubGVuZ3RoIHdoZW5cbiAgICAgICAgICAvLyB3ZSdyZSBkb25lLlxuICAgICAgICAgIHJlc3VsdExpc3RBc3NpZ25tZW50Q291bnQgKz0gMTtcblxuICAgICAgICB9IGVsc2UgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnRGFuZ2VyOiBEaXNjYXJkaW5nIHVuZXhwZWN0ZWQgbm9kZTonLFxuICAgICAgICAgICAgcmVuZGVyTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbHRob3VnaCByZXN1bHRMaXN0IHdhcyBwb3B1bGF0ZWQgb3V0IG9mIG9yZGVyLCBpdCBzaG91bGQgbm93IGJlIGEgZGVuc2VcbiAgICAvLyBhcnJheS5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgcmVzdWx0TGlzdEFzc2lnbm1lbnRDb3VudCA9PT0gcmVzdWx0TGlzdC5sZW5ndGgsXG4gICAgICAnRGFuZ2VyOiBEaWQgbm90IGFzc2lnbiB0byBldmVyeSBpbmRleCBvZiByZXN1bHRMaXN0LidcbiAgICApIDogaW52YXJpYW50KHJlc3VsdExpc3RBc3NpZ25tZW50Q291bnQgPT09IHJlc3VsdExpc3QubGVuZ3RoKSk7XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgcmVzdWx0TGlzdC5sZW5ndGggPT09IG1hcmt1cExpc3QubGVuZ3RoLFxuICAgICAgJ0RhbmdlcjogRXhwZWN0ZWQgbWFya3VwIHRvIHJlbmRlciAlcyBub2RlcywgYnV0IHJlbmRlcmVkICVzLicsXG4gICAgICBtYXJrdXBMaXN0Lmxlbmd0aCxcbiAgICAgIHJlc3VsdExpc3QubGVuZ3RoXG4gICAgKSA6IGludmFyaWFudChyZXN1bHRMaXN0Lmxlbmd0aCA9PT0gbWFya3VwTGlzdC5sZW5ndGgpKTtcblxuICAgIHJldHVybiByZXN1bHRMaXN0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhIG5vZGUgd2l0aCBhIHN0cmluZyBvZiBtYXJrdXAgYXQgaXRzIGN1cnJlbnQgcG9zaXRpb24gd2l0aGluIGl0c1xuICAgKiBwYXJlbnQuIFRoZSBtYXJrdXAgbXVzdCByZW5kZXIgaW50byBhIHNpbmdsZSByb290IG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb2xkQ2hpbGQgQ2hpbGQgbm9kZSB0byByZXBsYWNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIE1hcmt1cCB0byByZW5kZXIgaW4gcGxhY2Ugb2YgdGhlIGNoaWxkIG5vZGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6IGZ1bmN0aW9uKG9sZENoaWxkLCBtYXJrdXApIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NLFxuICAgICAgJ2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKC4uLik6IENhbm5vdCByZW5kZXIgbWFya3VwIGluIGEgJyArXG4gICAgICAnd29ya2VyIHRocmVhZC4gTWFrZSBzdXJlIGB3aW5kb3dgIGFuZCBgZG9jdW1lbnRgIGFyZSBhdmFpbGFibGUgJyArXG4gICAgICAnZ2xvYmFsbHkgYmVmb3JlIHJlcXVpcmluZyBSZWFjdCB3aGVuIHVuaXQgdGVzdGluZyBvciB1c2UgJyArXG4gICAgICAnUmVhY3QucmVuZGVyVG9TdHJpbmcgZm9yIHNlcnZlciByZW5kZXJpbmcuJ1xuICAgICkgOiBpbnZhcmlhbnQoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChtYXJrdXAsICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCguLi4pOiBNaXNzaW5nIG1hcmt1cC4nKSA6IGludmFyaWFudChtYXJrdXApKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgb2xkQ2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnaHRtbCcsXG4gICAgICAnZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAoLi4uKTogQ2Fubm90IHJlcGxhY2UgbWFya3VwIG9mIHRoZSAnICtcbiAgICAgICc8aHRtbD4gbm9kZS4gVGhpcyBpcyBiZWNhdXNlIGJyb3dzZXIgcXVpcmtzIG1ha2UgdGhpcyB1bnJlbGlhYmxlICcgK1xuICAgICAgJ2FuZC9vciBzbG93LiBJZiB5b3Ugd2FudCB0byByZW5kZXIgdG8gdGhlIHJvb3QgeW91IG11c3QgdXNlICcgK1xuICAgICAgJ3NlcnZlciByZW5kZXJpbmcuIFNlZSBSZWFjdC5yZW5kZXJUb1N0cmluZygpLidcbiAgICApIDogaW52YXJpYW50KG9sZENoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2h0bWwnKSk7XG5cbiAgICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXAobWFya3VwLCBlbXB0eUZ1bmN0aW9uKVswXTtcbiAgICBvbGRDaGlsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQpO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRGFuZ2VyO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UkdGdVoyVnlMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUVSaGJtZGxjbHh1SUNvZ1FIUjVjR1ZqYUdWamEzTWdjM1JoZEdsakxXOXViSGxjYmlBcUwxeHVYRzR2S21wemJHbHVkQ0JsZG1sc09pQjBjblZsTENCemRXSTZJSFJ5ZFdVZ0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1JYaGxZM1YwYVc5dVJXNTJhWEp2Ym0xbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5RmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRGd2lLVHRjYmx4dWRtRnlJR055WldGMFpVNXZaR1Z6Um5KdmJVMWhjbXQxY0NBOUlISmxjWFZwY21Vb1hDSXVMMk55WldGMFpVNXZaR1Z6Um5KdmJVMWhjbXQxY0Z3aUtUdGNiblpoY2lCbGJYQjBlVVoxYm1OMGFXOXVJRDBnY21WeGRXbHlaU2hjSWk0dlpXMXdkSGxHZFc1amRHbHZibHdpS1R0Y2JuWmhjaUJuWlhSTllYSnJkWEJYY21Gd0lEMGdjbVZ4ZFdseVpTaGNJaTR2WjJWMFRXRnlhM1Z3VjNKaGNGd2lLVHRjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYm5aaGNpQlBVRVZPWDFSQlIxOU9RVTFGWDBWWVVDQTlJQzllS0R4YlhpQmNYQzgrWFNzcEx6dGNiblpoY2lCU1JWTlZURlJmU1U1RVJWaGZRVlJVVWlBOUlDZGtZWFJoTFdSaGJtZGxjaTFwYm1SbGVDYzdYRzVjYmk4cUtseHVJQ29nUlhoMGNtRmpkSE1nZEdobElHQnViMlJsVG1GdFpXQWdabkp2YlNCaElITjBjbWx1WnlCdlppQnRZWEpyZFhBdVhHNGdLbHh1SUNvZ1RrOVVSVG9nUlhoMGNtRmpkR2x1WnlCMGFHVWdZRzV2WkdWT1lXMWxZQ0JrYjJWeklHNXZkQ0J5WlhGMWFYSmxJR0VnY21WbmRXeGhjaUJsZUhCeVpYTnphVzl1SUcxaGRHTm9YRzRnS2lCaVpXTmhkWE5sSUhkbElHMWhhMlVnWVhOemRXMXdkR2x2Ym5NZ1lXSnZkWFFnVW1WaFkzUXRaMlZ1WlhKaGRHVmtJRzFoY210MWNDQW9hUzVsTGlCMGFHVnlaU0JoY21VZ2JtOWNiaUFxSUhOd1lXTmxjeUJ6ZFhKeWIzVnVaR2x1WnlCMGFHVWdiM0JsYm1sdVp5QjBZV2NnWVc1a0lIUm9aWEpsSUdseklHRjBJR3hsWVhOMElHOXVaU0JoZEhSeWFXSjFkR1VwTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J0WVhKcmRYQWdVM1J5YVc1bklHOW1JRzFoY210MWNDNWNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnVG05a1pTQnVZVzFsSUc5bUlIUm9aU0J6ZFhCd2JHbGxaQ0J0WVhKcmRYQXVYRzRnS2lCQWMyVmxJR2gwZEhBNkx5OXFjM0JsY21ZdVkyOXRMMlY0ZEhKaFkzUXRibTlrWlc1aGJXVmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1oyVjBUbTlrWlU1aGJXVW9iV0Z5YTNWd0tTQjdYRzRnSUhKbGRIVnliaUJ0WVhKcmRYQXVjM1ZpYzNSeWFXNW5LREVzSUcxaGNtdDFjQzVwYm1SbGVFOW1LQ2NnSnlrcE8xeHVmVnh1WEc1MllYSWdSR0Z1WjJWeUlEMGdlMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaVzVrWlhKeklHMWhjbXQxY0NCcGJuUnZJR0Z1SUdGeWNtRjVJRzltSUc1dlpHVnpMaUJVYUdVZ2JXRnlhM1Z3SUdseklHVjRjR1ZqZEdWa0lIUnZJSEpsYm1SbGNseHVJQ0FnS2lCcGJuUnZJR0VnYkdsemRDQnZaaUJ5YjI5MElHNXZaR1Z6TGlCQmJITnZMQ0IwYUdVZ2JHVnVaM1JvSUc5bUlHQnlaWE4xYkhSTWFYTjBZQ0JoYm1SY2JpQWdJQ29nWUcxaGNtdDFjRXhwYzNSZ0lITm9iM1ZzWkNCaVpTQjBhR1VnYzJGdFpTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRoY25KaGVUeHpkSEpwYm1jK2ZTQnRZWEpyZFhCTWFYTjBJRXhwYzNRZ2IyWWdiV0Z5YTNWd0lITjBjbWx1WjNNZ2RHOGdjbVZ1WkdWeUxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0aGNuSmhlVHhFVDAxRmJHVnRaVzUwUG4wZ1RHbHpkQ0J2WmlCeVpXNWtaWEpsWkNCdWIyUmxjeTVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JrWVc1blpYSnZkWE5zZVZKbGJtUmxjazFoY210MWNEb2dablZ1WTNScGIyNG9iV0Z5YTNWd1RHbHpkQ2tnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQkZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkQzVqWVc1VmMyVkVUMDBzWEc0Z0lDQWdJQ0FuWkdGdVoyVnliM1Z6YkhsU1pXNWtaWEpOWVhKcmRYQW9MaTR1S1RvZ1EyRnVibTkwSUhKbGJtUmxjaUJ0WVhKcmRYQWdhVzRnWVNCM2IzSnJaWElnSnlBclhHNGdJQ0FnSUNBbmRHaHlaV0ZrTGlCTllXdGxJSE4xY21VZ1lIZHBibVJ2ZDJBZ1lXNWtJR0JrYjJOMWJXVnVkR0FnWVhKbElHRjJZV2xzWVdKc1pTQm5iRzlpWVd4c2VTQW5JQ3RjYmlBZ0lDQWdJQ2RpWldadmNtVWdjbVZ4ZFdseWFXNW5JRkpsWVdOMElIZG9aVzRnZFc1cGRDQjBaWE4wYVc1bklHOXlJSFZ6WlNBbklDdGNiaUFnSUNBZ0lDZFNaV0ZqZEM1eVpXNWtaWEpVYjFOMGNtbHVaeUJtYjNJZ2MyVnlkbVZ5SUhKbGJtUmxjbWx1Wnk0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaEZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkQzVqWVc1VmMyVkVUMDBwS1R0Y2JpQWdJQ0IyWVhJZ2JtOWtaVTVoYldVN1hHNGdJQ0FnZG1GeUlHMWhjbXQxY0VKNVRtOWtaVTVoYldVZ1BTQjdmVHRjYmlBZ0lDQXZMeUJIY205MWNDQnRZWEpyZFhBZ1lua2dZRzV2WkdWT1lXMWxZQ0JwWmlCaElIZHlZWEFnYVhNZ2JtVmpaWE56WVhKNUxDQmxiSE5sSUdKNUlDY3FKeTVjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJRzFoY210MWNFeHBjM1F1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lHMWhjbXQxY0V4cGMzUmJhVjBzWEc0Z0lDQWdJQ0FnSUNka1lXNW5aWEp2ZFhOc2VWSmxibVJsY2sxaGNtdDFjQ2d1TGk0cE9pQk5hWE56YVc1bklHMWhjbXQxY0M0blhHNGdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLRzFoY210MWNFeHBjM1JiYVYwcEtUdGNiaUFnSUNBZ0lHNXZaR1ZPWVcxbElEMGdaMlYwVG05a1pVNWhiV1VvYldGeWEzVndUR2x6ZEZ0cFhTazdYRzRnSUNBZ0lDQnViMlJsVG1GdFpTQTlJR2RsZEUxaGNtdDFjRmR5WVhBb2JtOWtaVTVoYldVcElEOGdibTlrWlU1aGJXVWdPaUFuS2ljN1hHNGdJQ0FnSUNCdFlYSnJkWEJDZVU1dlpHVk9ZVzFsVzI1dlpHVk9ZVzFsWFNBOUlHMWhjbXQxY0VKNVRtOWtaVTVoYldWYmJtOWtaVTVoYldWZElIeDhJRnRkTzF4dUlDQWdJQ0FnYldGeWEzVndRbmxPYjJSbFRtRnRaVnR1YjJSbFRtRnRaVjFiYVYwZ1BTQnRZWEpyZFhCTWFYTjBXMmxkTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnY21WemRXeDBUR2x6ZENBOUlGdGRPMXh1SUNBZ0lIWmhjaUJ5WlhOMWJIUk1hWE4wUVhOemFXZHViV1Z1ZEVOdmRXNTBJRDBnTUR0Y2JpQWdJQ0JtYjNJZ0tHNXZaR1ZPWVcxbElHbHVJRzFoY210MWNFSjVUbTlrWlU1aGJXVXBJSHRjYmlBZ0lDQWdJR2xtSUNnaGJXRnlhM1Z3UW5sT2IyUmxUbUZ0WlM1b1lYTlBkMjVRY205d1pYSjBlU2h1YjJSbFRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCMllYSWdiV0Z5YTNWd1RHbHpkRUo1VG05a1pVNWhiV1VnUFNCdFlYSnJkWEJDZVU1dlpHVk9ZVzFsVzI1dlpHVk9ZVzFsWFR0Y2JseHVJQ0FnSUNBZ0x5OGdWR2hwY3lCbWIzSXRhVzRnYkc5dmNDQnphMmx3Y3lCMGFHVWdhRzlzWlhNZ2IyWWdkR2hsSUhOd1lYSnpaU0JoY25KaGVTNGdWR2hsSUc5eVpHVnlJRzltWEc0Z0lDQWdJQ0F2THlCcGRHVnlZWFJwYjI0Z2MyaHZkV3hrSUdadmJHeHZkeUIwYUdVZ2IzSmtaWElnYjJZZ1lYTnphV2R1YldWdWRDd2dkMmhwWTJnZ2FHRndjR1Z1Y3lCMGJ5QnRZWFJqYUZ4dUlDQWdJQ0FnTHk4Z2JuVnRaWEpwWTJGc0lHbHVaR1Y0SUc5eVpHVnlMQ0JpZFhRZ2QyVWdaRzl1SjNRZ2NtVnNlU0J2YmlCMGFHRjBMbHh1SUNBZ0lDQWdkbUZ5SUhKbGMzVnNkRWx1WkdWNE8xeHVJQ0FnSUNBZ1ptOXlJQ2h5WlhOMWJIUkpibVJsZUNCcGJpQnRZWEpyZFhCTWFYTjBRbmxPYjJSbFRtRnRaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9iV0Z5YTNWd1RHbHpkRUo1VG05a1pVNWhiV1V1YUdGelQzZHVVSEp2Y0dWeWRIa29jbVZ6ZFd4MFNXNWtaWGdwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkbUZ5SUcxaGNtdDFjQ0E5SUcxaGNtdDFjRXhwYzNSQ2VVNXZaR1ZPWVcxbFczSmxjM1ZzZEVsdVpHVjRYVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDOHZJRkIxYzJnZ2RHaGxJSEpsY1hWbGMzUmxaQ0J0WVhKcmRYQWdkMmwwYUNCaGJpQmhaR1JwZEdsdmJtRnNJRkpGVTFWTVZGOUpUa1JGV0Y5QlZGUlNYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1lYUjBjbWxpZFhSbExpQWdTV1lnZEdobElHMWhjbXQxY0NCa2IyVnpJRzV2ZENCemRHRnlkQ0IzYVhSb0lHRWdQQ0JqYUdGeVlXTjBaWElzSUdsMFhHNGdJQ0FnSUNBZ0lDQWdMeThnZDJsc2JDQmlaU0JrYVhOallYSmtaV1FnWW1Wc2IzY2dLSGRwZEdnZ1lXNGdZWEJ3Y205d2NtbGhkR1VnWTI5dWMyOXNaUzVsY25KdmNpa3VYRzRnSUNBZ0lDQWdJQ0FnYldGeWEzVndUR2x6ZEVKNVRtOWtaVTVoYldWYmNtVnpkV3gwU1c1a1pYaGRJRDBnYldGeWEzVndMbkpsY0d4aFkyVW9YRzRnSUNBZ0lDQWdJQ0FnSUNCUFVFVk9YMVJCUjE5T1FVMUZYMFZZVUN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUZSb2FYTWdhVzVrWlhnZ2QybHNiQ0JpWlNCd1lYSnpaV1FnWW1GamF5QnZkWFFnWW1Wc2IzY3VYRzRnSUNBZ0lDQWdJQ0FnSUNBbkpERWdKeUFySUZKRlUxVk1WRjlKVGtSRldGOUJWRlJTSUNzZ0p6MWNJaWNnS3lCeVpYTjFiSFJKYm1SbGVDQXJJQ2RjSWlBblhHNGdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QlNaVzVrWlhJZ1pXRmphQ0JuY205MWNDQnZaaUJ0WVhKcmRYQWdkMmwwYUNCemFXMXBiR0Z5SUhkeVlYQndhVzVuSUdCdWIyUmxUbUZ0WldBdVhHNGdJQ0FnSUNCMllYSWdjbVZ1WkdWeVRtOWtaWE1nUFNCamNtVmhkR1ZPYjJSbGMwWnliMjFOWVhKcmRYQW9YRzRnSUNBZ0lDQWdJRzFoY210MWNFeHBjM1JDZVU1dlpHVk9ZVzFsTG1wdmFXNG9KeWNwTEZ4dUlDQWdJQ0FnSUNCbGJYQjBlVVoxYm1OMGFXOXVJQzh2SUVSdklHNXZkR2hwYm1jZ2MzQmxZMmxoYkNCM2FYUm9JRHh6WTNKcGNIUStJSFJoWjNNdVhHNGdJQ0FnSUNBcE8xeHVYRzRnSUNBZ0lDQm1iM0lnS0haaGNpQnFJRDBnTURzZ2FpQThJSEpsYm1SbGNrNXZaR1Z6TG14bGJtZDBhRHNnS3l0cUtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCeVpXNWtaWEpPYjJSbElEMGdjbVZ1WkdWeVRtOWtaWE5iYWwwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5Wlc1a1pYSk9iMlJsTG1oaGMwRjBkSEpwWW5WMFpTQW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVnVaR1Z5VG05a1pTNW9ZWE5CZEhSeWFXSjFkR1VvVWtWVFZVeFVYMGxPUkVWWVgwRlVWRklwS1NCN1hHNWNiaUFnSUNBZ0lDQWdJQ0J5WlhOMWJIUkpibVJsZUNBOUlDdHlaVzVrWlhKT2IyUmxMbWRsZEVGMGRISnBZblYwWlNoU1JWTlZURlJmU1U1RVJWaGZRVlJVVWlrN1hHNGdJQ0FnSUNBZ0lDQWdjbVZ1WkdWeVRtOWtaUzV5WlcxdmRtVkJkSFJ5YVdKMWRHVW9Va1ZUVlV4VVgwbE9SRVZZWDBGVVZGSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0Z5WlhOMWJIUk1hWE4wTG1oaGMwOTNibEJ5YjNCbGNuUjVLSEpsYzNWc2RFbHVaR1Y0S1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2RFWVc1blpYSTZJRUZ6YzJsbmJtbHVaeUIwYnlCaGJpQmhiSEpsWVdSNUxXOWpZM1Z3YVdWa0lISmxjM1ZzZENCcGJtUmxlQzRuWEc0Z0lDQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2doY21WemRXeDBUR2x6ZEM1b1lYTlBkMjVRY205d1pYSjBlU2h5WlhOMWJIUkpibVJsZUNrcEtUdGNibHh1SUNBZ0lDQWdJQ0FnSUhKbGMzVnNkRXhwYzNSYmNtVnpkV3gwU1c1a1pYaGRJRDBnY21WdVpHVnlUbTlrWlR0Y2JseHVJQ0FnSUNBZ0lDQWdJQzh2SUZSb2FYTWdjMmh2ZFd4a0lHMWhkR05vSUhKbGMzVnNkRXhwYzNRdWJHVnVaM1JvSUdGdVpDQnRZWEpyZFhCTWFYTjBMbXhsYm1kMGFDQjNhR1Z1WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkMlVuY21VZ1pHOXVaUzVjYmlBZ0lDQWdJQ0FnSUNCeVpYTjFiSFJNYVhOMFFYTnphV2R1YldWdWRFTnZkVzUwSUNzOUlERTdYRzVjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLRnh1SUNBZ0lDQWdJQ0FnSUNBZ0owUmhibWRsY2pvZ1JHbHpZMkZ5WkdsdVp5QjFibVY0Y0dWamRHVmtJRzV2WkdVNkp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGJtUmxjazV2WkdWY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnUVd4MGFHOTFaMmdnY21WemRXeDBUR2x6ZENCM1lYTWdjRzl3ZFd4aGRHVmtJRzkxZENCdlppQnZjbVJsY2l3Z2FYUWdjMmh2ZFd4a0lHNXZkeUJpWlNCaElHUmxibk5sWEc0Z0lDQWdMeThnWVhKeVlYa3VYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUhKbGMzVnNkRXhwYzNSQmMzTnBaMjV0Wlc1MFEyOTFiblFnUFQwOUlISmxjM1ZzZEV4cGMzUXViR1Z1WjNSb0xGeHVJQ0FnSUNBZ0owUmhibWRsY2pvZ1JHbGtJRzV2ZENCaGMzTnBaMjRnZEc4Z1pYWmxjbmtnYVc1a1pYZ2diMllnY21WemRXeDBUR2x6ZEM0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHlaWE4xYkhSTWFYTjBRWE56YVdkdWJXVnVkRU52ZFc1MElEMDlQU0J5WlhOMWJIUk1hWE4wTG14bGJtZDBhQ2twTzF4dVhHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJSEpsYzNWc2RFeHBjM1F1YkdWdVozUm9JRDA5UFNCdFlYSnJkWEJNYVhOMExteGxibWQwYUN4Y2JpQWdJQ0FnSUNkRVlXNW5aWEk2SUVWNGNHVmpkR1ZrSUcxaGNtdDFjQ0IwYnlCeVpXNWtaWElnSlhNZ2JtOWtaWE1zSUdKMWRDQnlaVzVrWlhKbFpDQWxjeTRuTEZ4dUlDQWdJQ0FnYldGeWEzVndUR2x6ZEM1c1pXNW5kR2dzWEc0Z0lDQWdJQ0J5WlhOMWJIUk1hWE4wTG14bGJtZDBhRnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvY21WemRXeDBUR2x6ZEM1c1pXNW5kR2dnUFQwOUlHMWhjbXQxY0V4cGMzUXViR1Z1WjNSb0tTazdYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVnpkV3gwVEdsemREdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1Wd2JHRmpaWE1nWVNCdWIyUmxJSGRwZEdnZ1lTQnpkSEpwYm1jZ2IyWWdiV0Z5YTNWd0lHRjBJR2wwY3lCamRYSnlaVzUwSUhCdmMybDBhVzl1SUhkcGRHaHBiaUJwZEhOY2JpQWdJQ29nY0dGeVpXNTBMaUJVYUdVZ2JXRnlhM1Z3SUcxMWMzUWdjbVZ1WkdWeUlHbHVkRzhnWVNCemFXNW5iR1VnY205dmRDQnViMlJsTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJRzlzWkVOb2FXeGtJRU5vYVd4a0lHNXZaR1VnZEc4Z2NtVndiR0ZqWlM1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzFoY210MWNDQk5ZWEpyZFhBZ2RHOGdjbVZ1WkdWeUlHbHVJSEJzWVdObElHOW1JSFJvWlNCamFHbHNaQ0J1YjJSbExseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHUmhibWRsY205MWMyeDVVbVZ3YkdGalpVNXZaR1ZYYVhSb1RXRnlhM1Z3T2lCbWRXNWpkR2x2YmlodmJHUkRhR2xzWkN3Z2JXRnlhM1Z3S1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJRVY0WldOMWRHbHZia1Z1ZG1seWIyNXRaVzUwTG1OaGJsVnpaVVJQVFN4Y2JpQWdJQ0FnSUNka1lXNW5aWEp2ZFhOc2VWSmxjR3hoWTJWT2IyUmxWMmwwYUUxaGNtdDFjQ2d1TGk0cE9pQkRZVzV1YjNRZ2NtVnVaR1Z5SUcxaGNtdDFjQ0JwYmlCaElDY2dLMXh1SUNBZ0lDQWdKM2R2Y210bGNpQjBhSEpsWVdRdUlFMWhhMlVnYzNWeVpTQmdkMmx1Wkc5M1lDQmhibVFnWUdSdlkzVnRaVzUwWUNCaGNtVWdZWFpoYVd4aFlteGxJQ2NnSzF4dUlDQWdJQ0FnSjJkc2IySmhiR3g1SUdKbFptOXlaU0J5WlhGMWFYSnBibWNnVW1WaFkzUWdkMmhsYmlCMWJtbDBJSFJsYzNScGJtY2diM0lnZFhObElDY2dLMXh1SUNBZ0lDQWdKMUpsWVdOMExuSmxibVJsY2xSdlUzUnlhVzVuSUdadmNpQnpaWEoyWlhJZ2NtVnVaR1Z5YVc1bkxpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRVY0WldOMWRHbHZia1Z1ZG1seWIyNXRaVzUwTG1OaGJsVnpaVVJQVFNrcE8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvYldGeWEzVndMQ0FuWkdGdVoyVnliM1Z6YkhsU1pYQnNZV05sVG05a1pWZHBkR2hOWVhKcmRYQW9MaTR1S1RvZ1RXbHpjMmx1WnlCdFlYSnJkWEF1SnlrZ09pQnBiblpoY21saGJuUW9iV0Z5YTNWd0tTazdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUc5c1pFTm9hV3hrTG5SaFowNWhiV1V1ZEc5TWIzZGxja05oYzJVb0tTQWhQVDBnSjJoMGJXd25MRnh1SUNBZ0lDQWdKMlJoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd0tDNHVMaWs2SUVOaGJtNXZkQ0J5WlhCc1lXTmxJRzFoY210MWNDQnZaaUIwYUdVZ0p5QXJYRzRnSUNBZ0lDQW5QR2gwYld3K0lHNXZaR1V1SUZSb2FYTWdhWE1nWW1WallYVnpaU0JpY205M2MyVnlJSEYxYVhKcmN5QnRZV3RsSUhSb2FYTWdkVzV5Wld4cFlXSnNaU0FuSUN0Y2JpQWdJQ0FnSUNkaGJtUXZiM0lnYzJ4dmR5NGdTV1lnZVc5MUlIZGhiblFnZEc4Z2NtVnVaR1Z5SUhSdklIUm9aU0J5YjI5MElIbHZkU0J0ZFhOMElIVnpaU0FuSUN0Y2JpQWdJQ0FnSUNkelpYSjJaWElnY21WdVpHVnlhVzVuTGlCVFpXVWdVbVZoWTNRdWNtVnVaR1Z5Vkc5VGRISnBibWNvS1M0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHZiR1JEYUdsc1pDNTBZV2RPWVcxbExuUnZURzkzWlhKRFlYTmxLQ2tnSVQwOUlDZG9kRzFzSnlrcE8xeHVYRzRnSUNBZ2RtRnlJRzVsZDBOb2FXeGtJRDBnWTNKbFlYUmxUbTlrWlhOR2NtOXRUV0Z5YTNWd0tHMWhjbXQxY0N3Z1pXMXdkSGxHZFc1amRHbHZiaWxiTUYwN1hHNGdJQ0FnYjJ4a1EyaHBiR1F1Y0dGeVpXNTBUbTlrWlM1eVpYQnNZV05sUTJocGJHUW9ibVYzUTJocGJHUXNJRzlzWkVOb2FXeGtLVHRjYmlBZ2ZWeHVYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlFUmhibWRsY2p0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIERlZmF1bHRFdmVudFBsdWdpbk9yZGVyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIga2V5T2YgPSByZXF1aXJlKFwiLi9rZXlPZlwiKTtcblxuLyoqXG4gKiBNb2R1bGUgdGhhdCBpcyBpbmplY3RhYmxlIGludG8gYEV2ZW50UGx1Z2luSHViYCwgdGhhdCBzcGVjaWZpZXMgYVxuICogZGV0ZXJtaW5pc3RpYyBvcmRlcmluZyBvZiBgRXZlbnRQbHVnaW5gcy4gQSBjb252ZW5pZW50IHdheSB0byByZWFzb24gYWJvdXRcbiAqIHBsdWdpbnMsIHdpdGhvdXQgaGF2aW5nIHRvIHBhY2thZ2UgZXZlcnkgb25lIG9mIHRoZW0uIFRoaXMgaXMgYmV0dGVyIHRoYW5cbiAqIGhhdmluZyBwbHVnaW5zIGJlIG9yZGVyZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGV5IGFyZSBpbmplY3RlZCBiZWNhdXNlXG4gKiB0aGF0IG9yZGVyaW5nIHdvdWxkIGJlIGluZmx1ZW5jZWQgYnkgdGhlIHBhY2thZ2luZyBvcmRlci5cbiAqIGBSZXNwb25kZXJFdmVudFBsdWdpbmAgbXVzdCBvY2N1ciBiZWZvcmUgYFNpbXBsZUV2ZW50UGx1Z2luYCBzbyB0aGF0XG4gKiBwcmV2ZW50aW5nIGRlZmF1bHQgb24gZXZlbnRzIGlzIGNvbnZlbmllbnQgaW4gYFNpbXBsZUV2ZW50UGx1Z2luYCBoYW5kbGVycy5cbiAqL1xudmFyIERlZmF1bHRFdmVudFBsdWdpbk9yZGVyID0gW1xuICBrZXlPZih7UmVzcG9uZGVyRXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe1NpbXBsZUV2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtUYXBFdmVudFBsdWdpbjogbnVsbH0pLFxuICBrZXlPZih7RW50ZXJMZWF2ZUV2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtDaGFuZ2VFdmVudFBsdWdpbjogbnVsbH0pLFxuICBrZXlPZih7U2VsZWN0RXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe0JlZm9yZUlucHV0RXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe0FuYWx5dGljc0V2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtNb2JpbGVTYWZhcmlDbGlja0V2ZW50UGx1Z2luOiBudWxsfSlcbl07XG5cbm1vZHVsZS5leHBvcnRzID0gRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoXCIuL0V2ZW50UHJvcGFnYXRvcnNcIik7XG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY01vdXNlRXZlbnRcIik7XG5cbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG52YXIgZ2V0Rmlyc3RSZWFjdERPTSA9IFJlYWN0TW91bnQuZ2V0Rmlyc3RSZWFjdERPTTtcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIG1vdXNlRW50ZXI6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiBrZXlPZih7b25Nb3VzZUVudGVyOiBudWxsfSksXG4gICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0LFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU92ZXJcbiAgICBdXG4gIH0sXG4gIG1vdXNlTGVhdmU6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiBrZXlPZih7b25Nb3VzZUxlYXZlOiBudWxsfSksXG4gICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0LFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU92ZXJcbiAgICBdXG4gIH1cbn07XG5cbnZhciBleHRyYWN0ZWRFdmVudHMgPSBbbnVsbCwgbnVsbF07XG5cbnZhciBFbnRlckxlYXZlRXZlbnRQbHVnaW4gPSB7XG5cbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICAvKipcbiAgICogRm9yIGFsbW9zdCBldmVyeSBpbnRlcmFjdGlvbiB3ZSBjYXJlIGFib3V0LCB0aGVyZSB3aWxsIGJlIGJvdGggYSB0b3AtbGV2ZWxcbiAgICogYG1vdXNlb3ZlcmAgYW5kIGBtb3VzZW91dGAgZXZlbnQgdGhhdCBvY2N1cnMuIE9ubHkgdXNlIGBtb3VzZW91dGAgc28gdGhhdFxuICAgKiB3ZSBkbyBub3QgZXh0cmFjdCBkdXBsaWNhdGUgZXZlbnRzLiBIb3dldmVyLCBtb3ZpbmcgdGhlIG1vdXNlIGludG8gdGhlXG4gICAqIGJyb3dzZXIgZnJvbSBvdXRzaWRlIHdpbGwgbm90IGZpcmUgYSBgbW91c2VvdXRgIGV2ZW50LiBJbiB0aGlzIGNhc2UsIHdlIHVzZVxuICAgKiB0aGUgYG1vdXNlb3ZlcmAgdG9wLWxldmVsIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuZXh0cmFjdEV2ZW50c31cbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnQpIHtcbiAgICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3ZlciAmJlxuICAgICAgICAobmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodG9wTGV2ZWxUeXBlICE9PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0ICYmXG4gICAgICAgIHRvcExldmVsVHlwZSAhPT0gdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU92ZXIpIHtcbiAgICAgIC8vIE11c3Qgbm90IGJlIGEgbW91c2UgaW4gb3IgbW91c2Ugb3V0IC0gaWdub3JpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgd2luO1xuICAgIGlmICh0b3BMZXZlbFRhcmdldC53aW5kb3cgPT09IHRvcExldmVsVGFyZ2V0KSB7XG4gICAgICAvLyBgdG9wTGV2ZWxUYXJnZXRgIGlzIHByb2JhYmx5IGEgd2luZG93IG9iamVjdC5cbiAgICAgIHdpbiA9IHRvcExldmVsVGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgICB2YXIgZG9jID0gdG9wTGV2ZWxUYXJnZXQub3duZXJEb2N1bWVudDtcbiAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgd2luID0gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW4gPSB3aW5kb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb20sIHRvO1xuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wTW91c2VPdXQpIHtcbiAgICAgIGZyb20gPSB0b3BMZXZlbFRhcmdldDtcbiAgICAgIHRvID1cbiAgICAgICAgZ2V0Rmlyc3RSZWFjdERPTShuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudCkgfHxcbiAgICAgICAgd2luO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcm9tID0gd2luO1xuICAgICAgdG8gPSB0b3BMZXZlbFRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAgIC8vIE5vdGhpbmcgcGVydGFpbnMgdG8gb3VyIG1hbmFnZWQgY29tcG9uZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBmcm9tSUQgPSBmcm9tID8gUmVhY3RNb3VudC5nZXRJRChmcm9tKSA6ICcnO1xuICAgIHZhciB0b0lEID0gdG8gPyBSZWFjdE1vdW50LmdldElEKHRvKSA6ICcnO1xuXG4gICAgdmFyIGxlYXZlID0gU3ludGhldGljTW91c2VFdmVudC5nZXRQb29sZWQoXG4gICAgICBldmVudFR5cGVzLm1vdXNlTGVhdmUsXG4gICAgICBmcm9tSUQsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICk7XG4gICAgbGVhdmUudHlwZSA9ICdtb3VzZWxlYXZlJztcbiAgICBsZWF2ZS50YXJnZXQgPSBmcm9tO1xuICAgIGxlYXZlLnJlbGF0ZWRUYXJnZXQgPSB0bztcblxuICAgIHZhciBlbnRlciA9IFN5bnRoZXRpY01vdXNlRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgZXZlbnRUeXBlcy5tb3VzZUVudGVyLFxuICAgICAgdG9JRCxcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKTtcbiAgICBlbnRlci50eXBlID0gJ21vdXNlZW50ZXInO1xuICAgIGVudGVyLnRhcmdldCA9IHRvO1xuICAgIGVudGVyLnJlbGF0ZWRUYXJnZXQgPSBmcm9tO1xuXG4gICAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXMobGVhdmUsIGVudGVyLCBmcm9tSUQsIHRvSUQpO1xuXG4gICAgZXh0cmFjdGVkRXZlbnRzWzBdID0gbGVhdmU7XG4gICAgZXh0cmFjdGVkRXZlbnRzWzFdID0gZW50ZXI7XG5cbiAgICByZXR1cm4gZXh0cmFjdGVkRXZlbnRzO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRW50ZXJMZWF2ZUV2ZW50UGx1Z2luO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV2ZW50Q29uc3RhbnRzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIga2V5TWlycm9yID0gcmVxdWlyZShcIi4va2V5TWlycm9yXCIpO1xuXG52YXIgUHJvcGFnYXRpb25QaGFzZXMgPSBrZXlNaXJyb3Ioe2J1YmJsZWQ6IG51bGwsIGNhcHR1cmVkOiBudWxsfSk7XG5cbi8qKlxuICogVHlwZXMgb2YgcmF3IHNpZ25hbHMgZnJvbSB0aGUgYnJvd3NlciBjYXVnaHQgYXQgdGhlIHRvcCBsZXZlbC5cbiAqL1xudmFyIHRvcExldmVsVHlwZXMgPSBrZXlNaXJyb3Ioe1xuICB0b3BCbHVyOiBudWxsLFxuICB0b3BDaGFuZ2U6IG51bGwsXG4gIHRvcENsaWNrOiBudWxsLFxuICB0b3BDb21wb3NpdGlvbkVuZDogbnVsbCxcbiAgdG9wQ29tcG9zaXRpb25TdGFydDogbnVsbCxcbiAgdG9wQ29tcG9zaXRpb25VcGRhdGU6IG51bGwsXG4gIHRvcENvbnRleHRNZW51OiBudWxsLFxuICB0b3BDb3B5OiBudWxsLFxuICB0b3BDdXQ6IG51bGwsXG4gIHRvcERvdWJsZUNsaWNrOiBudWxsLFxuICB0b3BEcmFnOiBudWxsLFxuICB0b3BEcmFnRW5kOiBudWxsLFxuICB0b3BEcmFnRW50ZXI6IG51bGwsXG4gIHRvcERyYWdFeGl0OiBudWxsLFxuICB0b3BEcmFnTGVhdmU6IG51bGwsXG4gIHRvcERyYWdPdmVyOiBudWxsLFxuICB0b3BEcmFnU3RhcnQ6IG51bGwsXG4gIHRvcERyb3A6IG51bGwsXG4gIHRvcEVycm9yOiBudWxsLFxuICB0b3BGb2N1czogbnVsbCxcbiAgdG9wSW5wdXQ6IG51bGwsXG4gIHRvcEtleURvd246IG51bGwsXG4gIHRvcEtleVByZXNzOiBudWxsLFxuICB0b3BLZXlVcDogbnVsbCxcbiAgdG9wTG9hZDogbnVsbCxcbiAgdG9wTW91c2VEb3duOiBudWxsLFxuICB0b3BNb3VzZU1vdmU6IG51bGwsXG4gIHRvcE1vdXNlT3V0OiBudWxsLFxuICB0b3BNb3VzZU92ZXI6IG51bGwsXG4gIHRvcE1vdXNlVXA6IG51bGwsXG4gIHRvcFBhc3RlOiBudWxsLFxuICB0b3BSZXNldDogbnVsbCxcbiAgdG9wU2Nyb2xsOiBudWxsLFxuICB0b3BTZWxlY3Rpb25DaGFuZ2U6IG51bGwsXG4gIHRvcFN1Ym1pdDogbnVsbCxcbiAgdG9wVGV4dElucHV0OiBudWxsLFxuICB0b3BUb3VjaENhbmNlbDogbnVsbCxcbiAgdG9wVG91Y2hFbmQ6IG51bGwsXG4gIHRvcFRvdWNoTW92ZTogbnVsbCxcbiAgdG9wVG91Y2hTdGFydDogbnVsbCxcbiAgdG9wV2hlZWw6IG51bGxcbn0pO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSB7XG4gIHRvcExldmVsVHlwZXM6IHRvcExldmVsVHlwZXMsXG4gIFByb3BhZ2F0aW9uUGhhc2VzOiBQcm9wYWdhdGlvblBoYXNlc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudENvbnN0YW50cztcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV2ZW50TGlzdGVuZXJcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xuXG4vKipcbiAqIFVwc3RyZWFtIHZlcnNpb24gb2YgZXZlbnQgbGlzdGVuZXIuIERvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHNwZWNpZmljXG4gKiBuYXR1cmUgb2YgcGxhdGZvcm0uXG4gKi9cbnZhciBFdmVudExpc3RlbmVyID0ge1xuICAvKipcbiAgICogTGlzdGVuIHRvIERPTSBldmVudHMgZHVyaW5nIHRoZSBidWJibGUgcGhhc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRhcmdldCBET00gZWxlbWVudCB0byByZWdpc3RlciBsaXN0ZW5lciBvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlwZSBFdmVudCB0eXBlLCBlLmcuICdjbGljaycgb3IgJ21vdXNlb3ZlcicuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCB3aXRoIGEgYHJlbW92ZWAgbWV0aG9kLlxuICAgKi9cbiAgbGlzdGVuOiBmdW5jdGlvbih0YXJnZXQsIGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIGZhbHNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodGFyZ2V0LmF0dGFjaEV2ZW50KSB7XG4gICAgICB0YXJnZXQuYXR0YWNoRXZlbnQoJ29uJyArIGV2ZW50VHlwZSwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0YXJnZXQuZGV0YWNoRXZlbnQoJ29uJyArIGV2ZW50VHlwZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogTGlzdGVuIHRvIERPTSBldmVudHMgZHVyaW5nIHRoZSBjYXB0dXJlIHBoYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0YXJnZXQgRE9NIGVsZW1lbnQgdG8gcmVnaXN0ZXIgbGlzdGVuZXIgb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgRXZlbnQgdHlwZSwgZS5nLiAnY2xpY2snIG9yICdtb3VzZW92ZXInLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybiB7b2JqZWN0fSBPYmplY3Qgd2l0aCBhIGByZW1vdmVgIG1ldGhvZC5cbiAgICovXG4gIGNhcHR1cmU6IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnRUeXBlLCBjYWxsYmFjaykge1xuICAgIGlmICghdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnQXR0ZW1wdGVkIHRvIGxpc3RlbiB0byBldmVudHMgZHVyaW5nIHRoZSBjYXB0dXJlIHBoYXNlIG9uIGEgJyArXG4gICAgICAgICAgJ2Jyb3dzZXIgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjYXB0dXJlIHBoYXNlLiBZb3VyIGFwcGxpY2F0aW9uICcgK1xuICAgICAgICAgICd3aWxsIG5vdCByZWNlaXZlIHNvbWUgZXZlbnRzLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZW1wdHlGdW5jdGlvblxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSxcblxuICByZWdpc3RlckRlZmF1bHQ6IGZ1bmN0aW9uKCkge31cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRMaXN0ZW5lcjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJYWmxiblJNYVhOMFpXNWxjaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2x4dUlDb2dUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUZ3WVdOb1pTQk1hV05sYm5ObExDQldaWEp6YVc5dUlESXVNQ0FvZEdobElGd2lUR2xqWlc1elpWd2lLVHRjYmlBcUlIbHZkU0J0WVhrZ2JtOTBJSFZ6WlNCMGFHbHpJR1pwYkdVZ1pYaGpaWEIwSUdsdUlHTnZiWEJzYVdGdVkyVWdkMmwwYUNCMGFHVWdUR2xqWlc1elpTNWNiaUFxSUZsdmRTQnRZWGtnYjJKMFlXbHVJR0VnWTI5d2VTQnZaaUIwYUdVZ1RHbGpaVzV6WlNCaGRGeHVJQ3BjYmlBcUlHaDBkSEE2THk5M2QzY3VZWEJoWTJobExtOXlaeTlzYVdObGJuTmxjeTlNU1VORlRsTkZMVEl1TUZ4dUlDcGNiaUFxSUZWdWJHVnpjeUJ5WlhGMWFYSmxaQ0JpZVNCaGNIQnNhV05oWW14bElHeGhkeUJ2Y2lCaFozSmxaV1FnZEc4Z2FXNGdkM0pwZEdsdVp5d2djMjltZEhkaGNtVmNiaUFxSUdScGMzUnlhV0oxZEdWa0lIVnVaR1Z5SUhSb1pTQk1hV05sYm5ObElHbHpJR1JwYzNSeWFXSjFkR1ZrSUc5dUlHRnVJRndpUVZNZ1NWTmNJaUJDUVZOSlV5eGNiaUFxSUZkSlZFaFBWVlFnVjBGU1VrRk9WRWxGVXlCUFVpQkRUMDVFU1ZSSlQwNVRJRTlHSUVGT1dTQkxTVTVFTENCbGFYUm9aWElnWlhod2NtVnpjeUJ2Y2lCcGJYQnNhV1ZrTGx4dUlDb2dVMlZsSUhSb1pTQk1hV05sYm5ObElHWnZjaUIwYUdVZ2MzQmxZMmxtYVdNZ2JHRnVaM1ZoWjJVZ1oyOTJaWEp1YVc1bklIQmxjbTFwYzNOcGIyNXpJR0Z1WkZ4dUlDb2diR2x0YVhSaGRHbHZibk1nZFc1a1pYSWdkR2hsSUV4cFkyVnVjMlV1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRVYyWlc1MFRHbHpkR1Z1WlhKY2JpQXFJRUIwZVhCbFkyaGxZMnR6WEc0Z0tpOWNibHh1ZG1GeUlHVnRjSFI1Um5WdVkzUnBiMjRnUFNCeVpYRjFhWEpsS0Z3aUxpOWxiWEIwZVVaMWJtTjBhVzl1WENJcE8xeHVYRzR2S2lwY2JpQXFJRlZ3YzNSeVpXRnRJSFpsY25OcGIyNGdiMllnWlhabGJuUWdiR2x6ZEdWdVpYSXVJRVJ2WlhNZ2JtOTBJSFJoYTJVZ2FXNTBieUJoWTJOdmRXNTBJSE53WldOcFptbGpYRzRnS2lCdVlYUjFjbVVnYjJZZ2NHeGhkR1p2Y20wdVhHNGdLaTljYm5aaGNpQkZkbVZ1ZEV4cGMzUmxibVZ5SUQwZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nVEdsemRHVnVJSFJ2SUVSUFRTQmxkbVZ1ZEhNZ1pIVnlhVzVuSUhSb1pTQmlkV0ppYkdVZ2NHaGhjMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1JFOU5SWFpsYm5SVVlYSm5aWFI5SUhSaGNtZGxkQ0JFVDAwZ1pXeGxiV1Z1ZENCMGJ5QnlaV2RwYzNSbGNpQnNhWE4wWlc1bGNpQnZiaTVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHVjJaVzUwVkhsd1pTQkZkbVZ1ZENCMGVYQmxMQ0JsTG1jdUlDZGpiR2xqYXljZ2IzSWdKMjF2ZFhObGIzWmxjaWN1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNTlJR05oYkd4aVlXTnJJRU5oYkd4aVlXTnJJR1oxYm1OMGFXOXVMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdHZZbXBsWTNSOUlFOWlhbVZqZENCM2FYUm9JR0VnWUhKbGJXOTJaV0FnYldWMGFHOWtMbHh1SUNBZ0tpOWNiaUFnYkdsemRHVnVPaUJtZFc1amRHbHZiaWgwWVhKblpYUXNJR1YyWlc1MFZIbHdaU3dnWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0JwWmlBb2RHRnlaMlYwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElwSUh0Y2JpQWdJQ0FnSUhSaGNtZGxkQzVoWkdSRmRtVnVkRXhwYzNSbGJtVnlLR1YyWlc1MFZIbHdaU3dnWTJGc2JHSmhZMnNzSUdaaGJITmxLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJSEpsYlc5MlpUb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHRnlaMlYwTG5KbGJXOTJaVVYyWlc1MFRHbHpkR1Z1WlhJb1pYWmxiblJVZVhCbExDQmpZV3hzWW1GamF5d2dabUZzYzJVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kR0Z5WjJWMExtRjBkR0ZqYUVWMlpXNTBLU0I3WEc0Z0lDQWdJQ0IwWVhKblpYUXVZWFIwWVdOb1JYWmxiblFvSjI5dUp5QXJJR1YyWlc1MFZIbHdaU3dnWTJGc2JHSmhZMnNwTzF4dUlDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnY21WdGIzWmxPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBZWEpuWlhRdVpHVjBZV05vUlhabGJuUW9KMjl1SnlBcklHVjJaVzUwVkhsd1pTd2dZMkZzYkdKaFkyc3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RHbHpkR1Z1SUhSdklFUlBUU0JsZG1WdWRITWdaSFZ5YVc1bklIUm9aU0JqWVhCMGRYSmxJSEJvWVhObExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWMlpXNTBWR0Z5WjJWMGZTQjBZWEpuWlhRZ1JFOU5JR1ZzWlcxbGJuUWdkRzhnY21WbmFYTjBaWElnYkdsemRHVnVaWElnYjI0dVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JsZG1WdWRGUjVjR1VnUlhabGJuUWdkSGx3WlN3Z1pTNW5MaUFuWTJ4cFkyc25JRzl5SUNkdGIzVnpaVzkyWlhJbkxseHVJQ0FnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCallXeHNZbUZqYXlCRFlXeHNZbUZqYXlCbWRXNWpkR2x2Ymk1Y2JpQWdJQ29nUUhKbGRIVnliaUI3YjJKcVpXTjBmU0JQWW1wbFkzUWdkMmwwYUNCaElHQnlaVzF2ZG1WZ0lHMWxkR2h2WkM1Y2JpQWdJQ292WEc0Z0lHTmhjSFIxY21VNklHWjFibU4wYVc5dUtIUmhjbWRsZEN3Z1pYWmxiblJVZVhCbExDQmpZV3hzWW1GamF5a2dlMXh1SUNBZ0lHbG1JQ2doZEdGeVoyVjBMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSXBJSHRjYmlBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpaGNiaUFnSUNBZ0lDQWdJQ0FuUVhSMFpXMXdkR1ZrSUhSdklHeHBjM1JsYmlCMGJ5QmxkbVZ1ZEhNZ1pIVnlhVzVuSUhSb1pTQmpZWEIwZFhKbElIQm9ZWE5sSUc5dUlHRWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oySnliM2R6WlhJZ2RHaGhkQ0JrYjJWeklHNXZkQ0J6ZFhCd2IzSjBJSFJvWlNCallYQjBkWEpsSUhCb1lYTmxMaUJaYjNWeUlHRndjR3hwWTJGMGFXOXVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZDNhV3hzSUc1dmRDQnlaV05sYVhabElITnZiV1VnWlhabGJuUnpMaWRjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUhKbGJXOTJaVG9nWlcxd2RIbEdkVzVqZEdsdmJseHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdGeVoyVjBMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9aWFpsYm5SVWVYQmxMQ0JqWVd4c1ltRmpheXdnZEhKMVpTazdYRzRnSUNBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ0lDQnlaVzF2ZG1VNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSaGNtZGxkQzV5WlcxdmRtVkZkbVZ1ZEV4cGMzUmxibVZ5S0dWMlpXNTBWSGx3WlN3Z1kyRnNiR0poWTJzc0lIUnlkV1VwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOU8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQnlaV2RwYzNSbGNrUmxabUYxYkhRNklHWjFibU4wYVc5dUtDa2dlMzFjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdSWFpsYm5STWFYTjBaVzVsY2p0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFdmVudFBsdWdpbkh1YlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UGx1Z2luUmVnaXN0cnkgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpblJlZ2lzdHJ5XCIpO1xudmFyIEV2ZW50UGx1Z2luVXRpbHMgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpblV0aWxzXCIpO1xuXG52YXIgYWNjdW11bGF0ZUludG8gPSByZXF1aXJlKFwiLi9hY2N1bXVsYXRlSW50b1wiKTtcbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSByZXF1aXJlKFwiLi9mb3JFYWNoQWNjdW11bGF0ZWRcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIEludGVybmFsIHN0b3JlIGZvciBldmVudCBsaXN0ZW5lcnNcbiAqL1xudmFyIGxpc3RlbmVyQmFuayA9IHt9O1xuXG4vKipcbiAqIEludGVybmFsIHF1ZXVlIG9mIGV2ZW50cyB0aGF0IGhhdmUgYWNjdW11bGF0ZWQgdGhlaXIgZGlzcGF0Y2hlcyBhbmQgYXJlXG4gKiB3YWl0aW5nIHRvIGhhdmUgdGhlaXIgZGlzcGF0Y2hlcyBleGVjdXRlZC5cbiAqL1xudmFyIGV2ZW50UXVldWUgPSBudWxsO1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgYW5kIHJlbGVhc2VzIGl0IGJhY2sgaW50byB0aGUgcG9vbCwgdW5sZXNzIHBlcnNpc3RlbnQuXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBldmVudCBTeW50aGV0aWMgZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZC5cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2UgPSBmdW5jdGlvbihldmVudCkge1xuICBpZiAoZXZlbnQpIHtcbiAgICB2YXIgZXhlY3V0ZURpc3BhdGNoID0gRXZlbnRQbHVnaW5VdGlscy5leGVjdXRlRGlzcGF0Y2g7XG4gICAgLy8gUGx1Z2lucyBjYW4gcHJvdmlkZSBjdXN0b20gYmVoYXZpb3Igd2hlbiBkaXNwYXRjaGluZyBldmVudHMuXG4gICAgdmFyIFBsdWdpbk1vZHVsZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkuZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQoZXZlbnQpO1xuICAgIGlmIChQbHVnaW5Nb2R1bGUgJiYgUGx1Z2luTW9kdWxlLmV4ZWN1dGVEaXNwYXRjaCkge1xuICAgICAgZXhlY3V0ZURpc3BhdGNoID0gUGx1Z2luTW9kdWxlLmV4ZWN1dGVEaXNwYXRjaDtcbiAgICB9XG4gICAgRXZlbnRQbHVnaW5VdGlscy5leGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQsIGV4ZWN1dGVEaXNwYXRjaCk7XG5cbiAgICBpZiAoIWV2ZW50LmlzUGVyc2lzdGVudCgpKSB7XG4gICAgICBldmVudC5jb25zdHJ1Y3Rvci5yZWxlYXNlKGV2ZW50KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogLSBgSW5zdGFuY2VIYW5kbGVgOiBbcmVxdWlyZWRdIE1vZHVsZSB0aGF0IHBlcmZvcm1zIGxvZ2ljYWwgdHJhdmVyc2FscyBvZiBET01cbiAqICAgaGllcmFyY2h5IGdpdmVuIGlkcyBvZiB0aGUgbG9naWNhbCBET00gZWxlbWVudHMgaW52b2x2ZWQuXG4gKi9cbnZhciBJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5zdGFuY2VIYW5kbGUoKSB7XG4gIHZhciB2YWxpZCA9XG4gICAgSW5zdGFuY2VIYW5kbGUgJiZcbiAgICBJbnN0YW5jZUhhbmRsZS50cmF2ZXJzZVR3b1BoYXNlICYmXG4gICAgSW5zdGFuY2VIYW5kbGUudHJhdmVyc2VFbnRlckxlYXZlO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHZhbGlkLFxuICAgICdJbnN0YW5jZUhhbmRsZSBub3QgaW5qZWN0ZWQgYmVmb3JlIHVzZSEnXG4gICkgOiBpbnZhcmlhbnQodmFsaWQpKTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGV2ZW50IHBsdWdpbnMgdG8gYmUgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkLlxuICpcbiAqIEV2ZW50IHBsdWdpbnMgY2FuIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICBgZXh0cmFjdEV2ZW50c2Age2Z1bmN0aW9uKHN0cmluZywgRE9NRXZlbnRUYXJnZXQsIHN0cmluZywgb2JqZWN0KTogKn1cbiAqICAgICBSZXF1aXJlZC4gV2hlbiBhIHRvcC1sZXZlbCBldmVudCBpcyBmaXJlZCwgdGhpcyBtZXRob2QgaXMgZXhwZWN0ZWQgdG9cbiAqICAgICBleHRyYWN0IHN5bnRoZXRpYyBldmVudHMgdGhhdCB3aWxsIGluIHR1cm4gYmUgcXVldWVkIGFuZCBkaXNwYXRjaGVkLlxuICpcbiAqICAgYGV2ZW50VHlwZXNgIHtvYmplY3R9XG4gKiAgICAgT3B0aW9uYWwsIHBsdWdpbnMgdGhhdCBmaXJlIGV2ZW50cyBtdXN0IHB1Ymxpc2ggYSBtYXBwaW5nIG9mIHJlZ2lzdHJhdGlvblxuICogICAgIG5hbWVzIHRoYXQgYXJlIHVzZWQgdG8gcmVnaXN0ZXIgbGlzdGVuZXJzLiBWYWx1ZXMgb2YgdGhpcyBtYXBwaW5nIG11c3RcbiAqICAgICBiZSBvYmplY3RzIHRoYXQgY29udGFpbiBgcmVnaXN0cmF0aW9uTmFtZWAgb3IgYHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzYC5cbiAqXG4gKiAgIGBleGVjdXRlRGlzcGF0Y2hgIHtmdW5jdGlvbihvYmplY3QsIGZ1bmN0aW9uLCBzdHJpbmcpfVxuICogICAgIE9wdGlvbmFsLCBhbGxvd3MgcGx1Z2lucyB0byBvdmVycmlkZSBob3cgYW4gZXZlbnQgZ2V0cyBkaXNwYXRjaGVkLiBCeVxuICogICAgIGRlZmF1bHQsIHRoZSBsaXN0ZW5lciBpcyBzaW1wbHkgaW52b2tlZC5cbiAqXG4gKiBFYWNoIHBsdWdpbiB0aGF0IGlzIGluamVjdGVkIGludG8gYEV2ZW50c1BsdWdpbkh1YmAgaXMgaW1tZWRpYXRlbHkgb3BlcmFibGUuXG4gKlxuICogQHB1YmxpY1xuICovXG52YXIgRXZlbnRQbHVnaW5IdWIgPSB7XG5cbiAgLyoqXG4gICAqIE1ldGhvZHMgZm9yIGluamVjdGluZyBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBpbmplY3Rpb246IHtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBJbmplY3RlZE1vdW50XG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGluamVjdE1vdW50OiBFdmVudFBsdWdpblV0aWxzLmluamVjdGlvbi5pbmplY3RNb3VudCxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBJbmplY3RlZEluc3RhbmNlSGFuZGxlXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGluamVjdEluc3RhbmNlSGFuZGxlOiBmdW5jdGlvbihJbmplY3RlZEluc3RhbmNlSGFuZGxlKSB7XG4gICAgICBJbnN0YW5jZUhhbmRsZSA9IEluamVjdGVkSW5zdGFuY2VIYW5kbGU7XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIHZhbGlkYXRlSW5zdGFuY2VIYW5kbGUoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SW5zdGFuY2VIYW5kbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICB2YWxpZGF0ZUluc3RhbmNlSGFuZGxlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gSW5zdGFuY2VIYW5kbGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IEluamVjdGVkRXZlbnRQbHVnaW5PcmRlclxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBpbmplY3RFdmVudFBsdWdpbk9yZGVyOiBFdmVudFBsdWdpblJlZ2lzdHJ5LmluamVjdEV2ZW50UGx1Z2luT3JkZXIsXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0byBwbHVnaW4gbW9kdWxlcy5cbiAgICAgKi9cbiAgICBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6IEV2ZW50UGx1Z2luUmVnaXN0cnkuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lXG5cbiAgfSxcblxuICBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3M6IEV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLFxuXG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzOiBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLFxuXG4gIC8qKlxuICAgKiBTdG9yZXMgYGxpc3RlbmVyYCBhdCBgbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdW2lkXWAuIElzIGlkZW1wb3RlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGxpc3RlbmVyIFRoZSBjYWxsYmFjayB0byBzdG9yZS5cbiAgICovXG4gIHB1dExpc3RlbmVyOiBmdW5jdGlvbihpZCwgcmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIWxpc3RlbmVyIHx8IHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdFeHBlY3RlZCAlcyBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCB0eXBlICVzJyxcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWUsIHR5cGVvZiBsaXN0ZW5lclxuICAgICkgOiBpbnZhcmlhbnQoIWxpc3RlbmVyIHx8IHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykpO1xuXG4gICAgdmFyIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lID1cbiAgICAgIGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXSB8fCAobGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdID0ge30pO1xuICAgIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lW2lkXSA9IGxpc3RlbmVyO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIERPTSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn0gVGhlIHN0b3JlZCBjYWxsYmFjay5cbiAgICovXG4gIGdldExpc3RlbmVyOiBmdW5jdGlvbihpZCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHZhciBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSA9IGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICByZXR1cm4gYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgJiYgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWVbaWRdO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgbGlzdGVuZXIgZnJvbSB0aGUgcmVnaXN0cmF0aW9uIGJhbmsuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICovXG4gIGRlbGV0ZUxpc3RlbmVyOiBmdW5jdGlvbihpZCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHZhciBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSA9IGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICBpZiAoYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgIGRlbGV0ZSBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtpZF07XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFsbCBsaXN0ZW5lcnMgZm9yIHRoZSBET00gZWxlbWVudCB3aXRoIHRoZSBzdXBwbGllZCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBET00gZWxlbWVudC5cbiAgICovXG4gIGRlbGV0ZUFsbExpc3RlbmVyczogZnVuY3Rpb24oaWQpIHtcbiAgICBmb3IgKHZhciByZWdpc3RyYXRpb25OYW1lIGluIGxpc3RlbmVyQmFuaykge1xuICAgICAgZGVsZXRlIGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXVtpZF07XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBBbGxvd3MgcmVnaXN0ZXJlZCBwbHVnaW5zIGFuIG9wcG9ydHVuaXR5IHRvIGV4dHJhY3QgZXZlbnRzIGZyb20gdG9wLWxldmVsXG4gICAqIG5hdGl2ZSBicm93c2VyIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24oXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudCkge1xuICAgIHZhciBldmVudHM7XG4gICAgdmFyIHBsdWdpbnMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnM7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwbHVnaW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgLy8gTm90IGV2ZXJ5IHBsdWdpbiBpbiB0aGUgb3JkZXJpbmcgbWF5IGJlIGxvYWRlZCBhdCBydW50aW1lLlxuICAgICAgdmFyIHBvc3NpYmxlUGx1Z2luID0gcGx1Z2luc1tpXTtcbiAgICAgIGlmIChwb3NzaWJsZVBsdWdpbikge1xuICAgICAgICB2YXIgZXh0cmFjdGVkRXZlbnRzID0gcG9zc2libGVQbHVnaW4uZXh0cmFjdEV2ZW50cyhcbiAgICAgICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICApO1xuICAgICAgICBpZiAoZXh0cmFjdGVkRXZlbnRzKSB7XG4gICAgICAgICAgZXZlbnRzID0gYWNjdW11bGF0ZUludG8oZXZlbnRzLCBleHRyYWN0ZWRFdmVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBldmVudHM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEVucXVldWVzIGEgc3ludGhldGljIGV2ZW50IHRoYXQgc2hvdWxkIGJlIGRpc3BhdGNoZWQgd2hlblxuICAgKiBgcHJvY2Vzc0V2ZW50UXVldWVgIGlzIGludm9rZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gZXZlbnRzIEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cykge1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIGV2ZW50UXVldWUgPSBhY2N1bXVsYXRlSW50byhldmVudFF1ZXVlLCBldmVudHMpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbGwgc3ludGhldGljIGV2ZW50cyBvbiB0aGUgZXZlbnQgcXVldWUuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvY2Vzc0V2ZW50UXVldWU6IGZ1bmN0aW9uKCkge1xuICAgIC8vIFNldCBgZXZlbnRRdWV1ZWAgdG8gbnVsbCBiZWZvcmUgcHJvY2Vzc2luZyBpdCBzbyB0aGF0IHdlIGNhbiB0ZWxsIGlmIG1vcmVcbiAgICAvLyBldmVudHMgZ2V0IGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcuXG4gICAgdmFyIHByb2Nlc3NpbmdFdmVudFF1ZXVlID0gZXZlbnRRdWV1ZTtcbiAgICBldmVudFF1ZXVlID0gbnVsbDtcbiAgICBmb3JFYWNoQWNjdW11bGF0ZWQocHJvY2Vzc2luZ0V2ZW50UXVldWUsIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICFldmVudFF1ZXVlLFxuICAgICAgJ3Byb2Nlc3NFdmVudFF1ZXVlKCk6IEFkZGl0aW9uYWwgZXZlbnRzIHdlcmUgZW5xdWV1ZWQgd2hpbGUgcHJvY2Vzc2luZyAnICtcbiAgICAgICdhbiBldmVudCBxdWV1ZS4gU3VwcG9ydCBmb3IgdGhpcyBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkLidcbiAgICApIDogaW52YXJpYW50KCFldmVudFF1ZXVlKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRlc3RzIG9ubHkuIERvIG5vdCB1c2UhXG4gICAqL1xuICBfX3B1cmdlOiBmdW5jdGlvbigpIHtcbiAgICBsaXN0ZW5lckJhbmsgPSB7fTtcbiAgfSxcblxuICBfX2dldExpc3RlbmVyQmFuazogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQmFuaztcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2luSHViO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UlhabGJuUlFiSFZuYVc1SWRXSXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQkZkbVZ1ZEZCc2RXZHBia2gxWWx4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlFVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNua2dQU0J5WlhGMWFYSmxLRndpTGk5RmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNVhDSXBPMXh1ZG1GeUlFVjJaVzUwVUd4MVoybHVWWFJwYkhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlGZG1WdWRGQnNkV2RwYmxWMGFXeHpYQ0lwTzF4dVhHNTJZWElnWVdOamRXMTFiR0YwWlVsdWRHOGdQU0J5WlhGMWFYSmxLRndpTGk5aFkyTjFiWFZzWVhSbFNXNTBiMXdpS1R0Y2JuWmhjaUJtYjNKRllXTm9RV05qZFcxMWJHRjBaV1FnUFNCeVpYRjFhWEpsS0Z3aUxpOW1iM0pGWVdOb1FXTmpkVzExYkdGMFpXUmNJaWs3WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc0dktpcGNiaUFxSUVsdWRHVnlibUZzSUhOMGIzSmxJR1p2Y2lCbGRtVnVkQ0JzYVhOMFpXNWxjbk5jYmlBcUwxeHVkbUZ5SUd4cGMzUmxibVZ5UW1GdWF5QTlJSHQ5TzF4dVhHNHZLaXBjYmlBcUlFbHVkR1Z5Ym1Gc0lIRjFaWFZsSUc5bUlHVjJaVzUwY3lCMGFHRjBJR2hoZG1VZ1lXTmpkVzExYkdGMFpXUWdkR2hsYVhJZ1pHbHpjR0YwWTJobGN5QmhibVFnWVhKbFhHNGdLaUIzWVdsMGFXNW5JSFJ2SUdoaGRtVWdkR2hsYVhJZ1pHbHpjR0YwWTJobGN5QmxlR1ZqZFhSbFpDNWNiaUFxTDF4dWRtRnlJR1YyWlc1MFVYVmxkV1VnUFNCdWRXeHNPMXh1WEc0dktpcGNiaUFxSUVScGMzQmhkR05vWlhNZ1lXNGdaWFpsYm5RZ1lXNWtJSEpsYkdWaGMyVnpJR2wwSUdKaFkyc2dhVzUwYnlCMGFHVWdjRzl2YkN3Z2RXNXNaWE56SUhCbGNuTnBjM1JsYm5RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCbGRtVnVkQ0JUZVc1MGFHVjBhV01nWlhabGJuUWdkRzhnWW1VZ1pHbHpjR0YwWTJobFpDNWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNiblpoY2lCbGVHVmpkWFJsUkdsemNHRjBZMmhsYzBGdVpGSmxiR1ZoYzJVZ1BTQm1kVzVqZEdsdmJpaGxkbVZ1ZENrZ2UxeHVJQ0JwWmlBb1pYWmxiblFwSUh0Y2JpQWdJQ0IyWVhJZ1pYaGxZM1YwWlVScGMzQmhkR05vSUQwZ1JYWmxiblJRYkhWbmFXNVZkR2xzY3k1bGVHVmpkWFJsUkdsemNHRjBZMmc3WEc0Z0lDQWdMeThnVUd4MVoybHVjeUJqWVc0Z2NISnZkbWxrWlNCamRYTjBiMjBnWW1Wb1lYWnBiM0lnZDJobGJpQmthWE53WVhSamFHbHVaeUJsZG1WdWRITXVYRzRnSUNBZ2RtRnlJRkJzZFdkcGJrMXZaSFZzWlNBOUlFVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNua3VaMlYwVUd4MVoybHVUVzlrZFd4bFJtOXlSWFpsYm5Rb1pYWmxiblFwTzF4dUlDQWdJR2xtSUNoUWJIVm5hVzVOYjJSMWJHVWdKaVlnVUd4MVoybHVUVzlrZFd4bExtVjRaV04xZEdWRWFYTndZWFJqYUNrZ2UxeHVJQ0FnSUNBZ1pYaGxZM1YwWlVScGMzQmhkR05vSUQwZ1VHeDFaMmx1VFc5a2RXeGxMbVY0WldOMWRHVkVhWE53WVhSamFEdGNiaUFnSUNCOVhHNGdJQ0FnUlhabGJuUlFiSFZuYVc1VmRHbHNjeTVsZUdWamRYUmxSR2x6Y0dGMFkyaGxjMGx1VDNKa1pYSW9aWFpsYm5Rc0lHVjRaV04xZEdWRWFYTndZWFJqYUNrN1hHNWNiaUFnSUNCcFppQW9JV1YyWlc1MExtbHpVR1Z5YzJsemRHVnVkQ2dwS1NCN1hHNGdJQ0FnSUNCbGRtVnVkQzVqYjI1emRISjFZM1J2Y2k1eVpXeGxZWE5sS0dWMlpXNTBLVHRjYmlBZ0lDQjlYRzRnSUgxY2JuMDdYRzVjYmk4cUtseHVJQ29nTFNCZ1NXNXpkR0Z1WTJWSVlXNWtiR1ZnT2lCYmNtVnhkV2x5WldSZElFMXZaSFZzWlNCMGFHRjBJSEJsY21admNtMXpJR3h2WjJsallXd2dkSEpoZG1WeWMyRnNjeUJ2WmlCRVQwMWNiaUFxSUNBZ2FHbGxjbUZ5WTJoNUlHZHBkbVZ1SUdsa2N5QnZaaUIwYUdVZ2JHOW5hV05oYkNCRVQwMGdaV3hsYldWdWRITWdhVzUyYjJ4MlpXUXVYRzRnS2k5Y2JuWmhjaUJKYm5OMFlXNWpaVWhoYm1Sc1pTQTlJRzUxYkd3N1hHNWNibVoxYm1OMGFXOXVJSFpoYkdsa1lYUmxTVzV6ZEdGdVkyVklZVzVrYkdVb0tTQjdYRzRnSUhaaGNpQjJZV3hwWkNBOVhHNGdJQ0FnU1c1emRHRnVZMlZJWVc1a2JHVWdKaVpjYmlBZ0lDQkpibk4wWVc1alpVaGhibVJzWlM1MGNtRjJaWEp6WlZSM2IxQm9ZWE5sSUNZbVhHNGdJQ0FnU1c1emRHRnVZMlZJWVc1a2JHVXVkSEpoZG1WeWMyVkZiblJsY2t4bFlYWmxPMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJSFpoYkdsa0xGeHVJQ0FnSUNkSmJuTjBZVzVqWlVoaGJtUnNaU0J1YjNRZ2FXNXFaV04wWldRZ1ltVm1iM0psSUhWelpTRW5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9kbUZzYVdRcEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCVWFHbHpJR2x6SUdFZ2RXNXBabWxsWkNCcGJuUmxjbVpoWTJVZ1ptOXlJR1YyWlc1MElIQnNkV2RwYm5NZ2RHOGdZbVVnYVc1emRHRnNiR1ZrSUdGdVpDQmpiMjVtYVdkMWNtVmtMbHh1SUNwY2JpQXFJRVYyWlc1MElIQnNkV2RwYm5NZ1kyRnVJR2x0Y0d4bGJXVnVkQ0IwYUdVZ1ptOXNiRzkzYVc1bklIQnliM0JsY25ScFpYTTZYRzRnS2x4dUlDb2dJQ0JnWlhoMGNtRmpkRVYyWlc1MGMyQWdlMloxYm1OMGFXOXVLSE4wY21sdVp5d2dSRTlOUlhabGJuUlVZWEpuWlhRc0lITjBjbWx1Wnl3Z2IySnFaV04wS1RvZ0tuMWNiaUFxSUNBZ0lDQlNaWEYxYVhKbFpDNGdWMmhsYmlCaElIUnZjQzFzWlhabGJDQmxkbVZ1ZENCcGN5Qm1hWEpsWkN3Z2RHaHBjeUJ0WlhSb2IyUWdhWE1nWlhod1pXTjBaV1FnZEc5Y2JpQXFJQ0FnSUNCbGVIUnlZV04wSUhONWJuUm9aWFJwWXlCbGRtVnVkSE1nZEdoaGRDQjNhV3hzSUdsdUlIUjFjbTRnWW1VZ2NYVmxkV1ZrSUdGdVpDQmthWE53WVhSamFHVmtMbHh1SUNwY2JpQXFJQ0FnWUdWMlpXNTBWSGx3WlhOZ0lIdHZZbXBsWTNSOVhHNGdLaUFnSUNBZ1QzQjBhVzl1WVd3c0lIQnNkV2RwYm5NZ2RHaGhkQ0JtYVhKbElHVjJaVzUwY3lCdGRYTjBJSEIxWW14cGMyZ2dZU0J0WVhCd2FXNW5JRzltSUhKbFoybHpkSEpoZEdsdmJseHVJQ29nSUNBZ0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhWelpXUWdkRzhnY21WbmFYTjBaWElnYkdsemRHVnVaWEp6TGlCV1lXeDFaWE1nYjJZZ2RHaHBjeUJ0WVhCd2FXNW5JRzExYzNSY2JpQXFJQ0FnSUNCaVpTQnZZbXBsWTNSeklIUm9ZWFFnWTI5dWRHRnBiaUJnY21WbmFYTjBjbUYwYVc5dVRtRnRaV0FnYjNJZ1lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6WUM1Y2JpQXFYRzRnS2lBZ0lHQmxlR1ZqZFhSbFJHbHpjR0YwWTJoZ0lIdG1kVzVqZEdsdmJpaHZZbXBsWTNRc0lHWjFibU4wYVc5dUxDQnpkSEpwYm1jcGZWeHVJQ29nSUNBZ0lFOXdkR2x2Ym1Gc0xDQmhiR3h2ZDNNZ2NHeDFaMmx1Y3lCMGJ5QnZkbVZ5Y21sa1pTQm9iM2NnWVc0Z1pYWmxiblFnWjJWMGN5QmthWE53WVhSamFHVmtMaUJDZVZ4dUlDb2dJQ0FnSUdSbFptRjFiSFFzSUhSb1pTQnNhWE4wWlc1bGNpQnBjeUJ6YVcxd2JIa2dhVzUyYjJ0bFpDNWNiaUFxWEc0Z0tpQkZZV05vSUhCc2RXZHBiaUIwYUdGMElHbHpJR2x1YW1WamRHVmtJR2x1ZEc4Z1lFVjJaVzUwYzFCc2RXZHBia2gxWW1BZ2FYTWdhVzF0WldScFlYUmxiSGtnYjNCbGNtRmliR1V1WEc0Z0tseHVJQ29nUUhCMVlteHBZMXh1SUNvdlhHNTJZWElnUlhabGJuUlFiSFZuYVc1SWRXSWdQU0I3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRTFsZEdodlpITWdabTl5SUdsdWFtVmpkR2x1WnlCa1pYQmxibVJsYm1OcFpYTXVYRzRnSUNBcUwxeHVJQ0JwYm1wbFkzUnBiMjQ2SUh0Y2JseHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCSmJtcGxZM1JsWkUxdmRXNTBYRzRnSUNBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnSUNBcUwxeHVJQ0FnSUdsdWFtVmpkRTF2ZFc1ME9pQkZkbVZ1ZEZCc2RXZHBibFYwYVd4ekxtbHVhbVZqZEdsdmJpNXBibXBsWTNSTmIzVnVkQ3hjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JKYm1wbFkzUmxaRWx1YzNSaGJtTmxTR0Z1Wkd4bFhHNGdJQ0FnSUNvZ1FIQjFZbXhwWTF4dUlDQWdJQ0FxTDF4dUlDQWdJR2x1YW1WamRFbHVjM1JoYm1ObFNHRnVaR3hsT2lCbWRXNWpkR2x2YmloSmJtcGxZM1JsWkVsdWMzUmhibU5sU0dGdVpHeGxLU0I3WEc0Z0lDQWdJQ0JKYm5OMFlXNWpaVWhoYm1Sc1pTQTlJRWx1YW1WamRHVmtTVzV6ZEdGdVkyVklZVzVrYkdVN1hHNGdJQ0FnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNBZ0lIWmhiR2xrWVhSbFNXNXpkR0Z1WTJWSVlXNWtiR1VvS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnWjJWMFNXNXpkR0Z1WTJWSVlXNWtiR1U2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0lDQjJZV3hwWkdGMFpVbHVjM1JoYm1ObFNHRnVaR3hsS0NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCeVpYUjFjbTRnU1c1emRHRnVZMlZJWVc1a2JHVTdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQjdZWEp5WVhsOUlFbHVhbVZqZEdWa1JYWmxiblJRYkhWbmFXNVBjbVJsY2x4dUlDQWdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDQWdLaTljYmlBZ0lDQnBibXBsWTNSRmRtVnVkRkJzZFdkcGJrOXlaR1Z5T2lCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxtbHVhbVZqZEVWMlpXNTBVR3gxWjJsdVQzSmtaWElzWEc1Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYVc1cVpXTjBaV1JPWVcxbGMxUnZVR3gxWjJsdWN5Qk5ZWEFnWm5KdmJTQnVZVzFsY3lCMGJ5QndiSFZuYVc0Z2JXOWtkV3hsY3k1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0JwYm1wbFkzUkZkbVZ1ZEZCc2RXZHBibk5DZVU1aGJXVTZJRVYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbmt1YVc1cVpXTjBSWFpsYm5SUWJIVm5hVzV6UW5sT1lXMWxYRzVjYmlBZ2ZTeGNibHh1SUNCbGRtVnVkRTVoYldWRWFYTndZWFJqYUVOdmJtWnBaM002SUVWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rdVpYWmxiblJPWVcxbFJHbHpjR0YwWTJoRGIyNW1hV2R6TEZ4dVhHNGdJSEpsWjJsemRISmhkR2x2Yms1aGJXVk5iMlIxYkdWek9pQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbkpsWjJsemRISmhkR2x2Yms1aGJXVk5iMlIxYkdWekxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVGRHOXlaWE1nWUd4cGMzUmxibVZ5WUNCaGRDQmdiR2x6ZEdWdVpYSkNZVzVyVzNKbFoybHpkSEpoZEdsdmJrNWhiV1ZkVzJsa1hXQXVJRWx6SUdsa1pXMXdiM1JsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnBaQ0JKUkNCdlppQjBhR1VnUkU5TklHVnNaVzFsYm5RdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J5WldkcGMzUnlZWFJwYjI1T1lXMWxJRTVoYldVZ2IyWWdiR2x6ZEdWdVpYSWdLR1V1Wnk0Z1lHOXVRMnhwWTJ0Z0tTNWNiaUFnSUNvZ1FIQmhjbUZ0SUhzL1puVnVZM1JwYjI1OUlHeHBjM1JsYm1WeUlGUm9aU0JqWVd4c1ltRmpheUIwYnlCemRHOXlaUzVjYmlBZ0lDb3ZYRzRnSUhCMWRFeHBjM1JsYm1WeU9pQm1kVzVqZEdsdmJpaHBaQ3dnY21WbmFYTjBjbUYwYVc5dVRtRnRaU3dnYkdsemRHVnVaWElwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJV3hwYzNSbGJtVnlJSHg4SUhSNWNHVnZaaUJzYVhOMFpXNWxjaUE5UFQwZ0oyWjFibU4wYVc5dUp5eGNiaUFnSUNBZ0lDZEZlSEJsWTNSbFpDQWxjeUJzYVhOMFpXNWxjaUIwYnlCaVpTQmhJR1oxYm1OMGFXOXVMQ0JwYm5OMFpXRmtJR2R2ZENCMGVYQmxJQ1Z6Snl4Y2JpQWdJQ0FnSUhKbFoybHpkSEpoZEdsdmJrNWhiV1VzSUhSNWNHVnZaaUJzYVhOMFpXNWxjbHh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVd4cGMzUmxibVZ5SUh4OElIUjVjR1Z2WmlCc2FYTjBaVzVsY2lBOVBUMGdKMloxYm1OMGFXOXVKeWtwTzF4dVhHNGdJQ0FnZG1GeUlHSmhibXRHYjNKU1pXZHBjM1J5WVhScGIyNU9ZVzFsSUQxY2JpQWdJQ0FnSUd4cGMzUmxibVZ5UW1GdWExdHlaV2RwYzNSeVlYUnBiMjVPWVcxbFhTQjhmQ0FvYkdsemRHVnVaWEpDWVc1clczSmxaMmx6ZEhKaGRHbHZiazVoYldWZElEMGdlMzBwTzF4dUlDQWdJR0poYm10R2IzSlNaV2RwYzNSeVlYUnBiMjVPWVcxbFcybGtYU0E5SUd4cGMzUmxibVZ5TzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2FXUWdTVVFnYjJZZ2RHaGxJRVJQVFNCbGJHVnRaVzUwTGx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjbVZuYVhOMGNtRjBhVzl1VG1GdFpTQk9ZVzFsSUc5bUlHeHBjM1JsYm1WeUlDaGxMbWN1SUdCdmJrTnNhV05yWUNrdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZXo5bWRXNWpkR2x2Ym4wZ1ZHaGxJSE4wYjNKbFpDQmpZV3hzWW1GamF5NWNiaUFnSUNvdlhHNGdJR2RsZEV4cGMzUmxibVZ5T2lCbWRXNWpkR2x2YmlocFpDd2djbVZuYVhOMGNtRjBhVzl1VG1GdFpTa2dlMXh1SUNBZ0lIWmhjaUJpWVc1clJtOXlVbVZuYVhOMGNtRjBhVzl1VG1GdFpTQTlJR3hwYzNSbGJtVnlRbUZ1YTF0eVpXZHBjM1J5WVhScGIyNU9ZVzFsWFR0Y2JpQWdJQ0J5WlhSMWNtNGdZbUZ1YTBadmNsSmxaMmx6ZEhKaGRHbHZiazVoYldVZ0ppWWdZbUZ1YTBadmNsSmxaMmx6ZEhKaGRHbHZiazVoYldWYmFXUmRPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCRVpXeGxkR1Z6SUdFZ2JHbHpkR1Z1WlhJZ1puSnZiU0IwYUdVZ2NtVm5hWE4wY21GMGFXOXVJR0poYm1zdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnBaQ0JKUkNCdlppQjBhR1VnUkU5TklHVnNaVzFsYm5RdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J5WldkcGMzUnlZWFJwYjI1T1lXMWxJRTVoYldVZ2IyWWdiR2x6ZEdWdVpYSWdLR1V1Wnk0Z1lHOXVRMnhwWTJ0Z0tTNWNiaUFnSUNvdlhHNGdJR1JsYkdWMFpVeHBjM1JsYm1WeU9pQm1kVzVqZEdsdmJpaHBaQ3dnY21WbmFYTjBjbUYwYVc5dVRtRnRaU2tnZTF4dUlDQWdJSFpoY2lCaVlXNXJSbTl5VW1WbmFYTjBjbUYwYVc5dVRtRnRaU0E5SUd4cGMzUmxibVZ5UW1GdWExdHlaV2RwYzNSeVlYUnBiMjVPWVcxbFhUdGNiaUFnSUNCcFppQW9ZbUZ1YTBadmNsSmxaMmx6ZEhKaGRHbHZiazVoYldVcElIdGNiaUFnSUNBZ0lHUmxiR1YwWlNCaVlXNXJSbTl5VW1WbmFYTjBjbUYwYVc5dVRtRnRaVnRwWkYwN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkVaV3hsZEdWeklHRnNiQ0JzYVhOMFpXNWxjbk1nWm05eUlIUm9aU0JFVDAwZ1pXeGxiV1Z1ZENCM2FYUm9JSFJvWlNCemRYQndiR2xsWkNCSlJDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR2xrSUVsRUlHOW1JSFJvWlNCRVQwMGdaV3hsYldWdWRDNWNiaUFnSUNvdlhHNGdJR1JsYkdWMFpVRnNiRXhwYzNSbGJtVnljem9nWm5WdVkzUnBiMjRvYVdRcElIdGNiaUFnSUNCbWIzSWdLSFpoY2lCeVpXZHBjM1J5WVhScGIyNU9ZVzFsSUdsdUlHeHBjM1JsYm1WeVFtRnVheWtnZTF4dUlDQWdJQ0FnWkdWc1pYUmxJR3hwYzNSbGJtVnlRbUZ1YTF0eVpXZHBjM1J5WVhScGIyNU9ZVzFsWFZ0cFpGMDdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJCYkd4dmQzTWdjbVZuYVhOMFpYSmxaQ0J3YkhWbmFXNXpJR0Z1SUc5d2NHOXlkSFZ1YVhSNUlIUnZJR1Y0ZEhKaFkzUWdaWFpsYm5SeklHWnliMjBnZEc5d0xXeGxkbVZzWEc0Z0lDQXFJRzVoZEdsMlpTQmljbTkzYzJWeUlHVjJaVzUwY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIUnZjRXhsZG1Wc1ZIbHdaU0JTWldOdmNtUWdabkp2YlNCZ1JYWmxiblJEYjI1emRHRnVkSE5nTGx4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWMlpXNTBWR0Z5WjJWMGZTQjBiM0JNWlhabGJGUmhjbWRsZENCVWFHVWdiR2x6ZEdWdWFXNW5JR052YlhCdmJtVnVkQ0J5YjI5MElHNXZaR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjBiM0JNWlhabGJGUmhjbWRsZEVsRUlFbEVJRzltSUdCMGIzQk1aWFpsYkZSaGNtZGxkR0F1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQnVZWFJwZG1WRmRtVnVkQ0JPWVhScGRtVWdZbkp2ZDNObGNpQmxkbVZ1ZEM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3S24wZ1FXNGdZV05qZFcxMWJHRjBhVzl1SUc5bUlITjViblJvWlhScFl5QmxkbVZ1ZEhNdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1pYaDBjbUZqZEVWMlpXNTBjem9nWm5WdVkzUnBiMjRvWEc0Z0lDQWdJQ0IwYjNCTVpYWmxiRlI1Y0dVc1hHNGdJQ0FnSUNCMGIzQk1aWFpsYkZSaGNtZGxkQ3hjYmlBZ0lDQWdJSFJ2Y0V4bGRtVnNWR0Z5WjJWMFNVUXNYRzRnSUNBZ0lDQnVZWFJwZG1WRmRtVnVkQ2tnZTF4dUlDQWdJSFpoY2lCbGRtVnVkSE03WEc0Z0lDQWdkbUZ5SUhCc2RXZHBibk1nUFNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxuQnNkV2RwYm5NN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQXNJR3dnUFNCd2JIVm5hVzV6TG14bGJtZDBhRHNnYVNBOElHdzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0x5OGdUbTkwSUdWMlpYSjVJSEJzZFdkcGJpQnBiaUIwYUdVZ2IzSmtaWEpwYm1jZ2JXRjVJR0psSUd4dllXUmxaQ0JoZENCeWRXNTBhVzFsTGx4dUlDQWdJQ0FnZG1GeUlIQnZjM05wWW14bFVHeDFaMmx1SUQwZ2NHeDFaMmx1YzF0cFhUdGNiaUFnSUNBZ0lHbG1JQ2h3YjNOemFXSnNaVkJzZFdkcGJpa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ1pYaDBjbUZqZEdWa1JYWmxiblJ6SUQwZ2NHOXpjMmxpYkdWUWJIVm5hVzR1WlhoMGNtRmpkRVYyWlc1MGN5aGNiaUFnSUNBZ0lDQWdJQ0IwYjNCTVpYWmxiRlI1Y0dVc1hHNGdJQ0FnSUNBZ0lDQWdkRzl3VEdWMlpXeFVZWEpuWlhRc1hHNGdJQ0FnSUNBZ0lDQWdkRzl3VEdWMlpXeFVZWEpuWlhSSlJDeGNiaUFnSUNBZ0lDQWdJQ0J1WVhScGRtVkZkbVZ1ZEZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvWlhoMGNtRmpkR1ZrUlhabGJuUnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1pYWmxiblJ6SUQwZ1lXTmpkVzExYkdGMFpVbHVkRzhvWlhabGJuUnpMQ0JsZUhSeVlXTjBaV1JGZG1WdWRITXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCbGRtVnVkSE03WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFVnVjWFZsZFdWeklHRWdjM2x1ZEdobGRHbGpJR1YyWlc1MElIUm9ZWFFnYzJodmRXeGtJR0psSUdScGMzQmhkR05vWldRZ2QyaGxibHh1SUNBZ0tpQmdjSEp2WTJWemMwVjJaVzUwVVhWbGRXVmdJR2x6SUdsdWRtOXJaV1F1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdaWFpsYm5SeklFRnVJR0ZqWTNWdGRXeGhkR2x2YmlCdlppQnplVzUwYUdWMGFXTWdaWFpsYm5SekxseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHVnVjWFZsZFdWRmRtVnVkSE02SUdaMWJtTjBhVzl1S0dWMlpXNTBjeWtnZTF4dUlDQWdJR2xtSUNobGRtVnVkSE1wSUh0Y2JpQWdJQ0FnSUdWMlpXNTBVWFZsZFdVZ1BTQmhZMk4xYlhWc1lYUmxTVzUwYnlobGRtVnVkRkYxWlhWbExDQmxkbVZ1ZEhNcE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSR2x6Y0dGMFkyaGxjeUJoYkd3Z2MzbHVkR2hsZEdsaklHVjJaVzUwY3lCdmJpQjBhR1VnWlhabGJuUWdjWFZsZFdVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnY0hKdlkyVnpjMFYyWlc1MFVYVmxkV1U2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUM4dklGTmxkQ0JnWlhabGJuUlJkV1YxWldBZ2RHOGdiblZzYkNCaVpXWnZjbVVnY0hKdlkyVnpjMmx1WnlCcGRDQnpieUIwYUdGMElIZGxJR05oYmlCMFpXeHNJR2xtSUcxdmNtVmNiaUFnSUNBdkx5QmxkbVZ1ZEhNZ1oyVjBJR1Z1Y1hWbGRXVmtJSGRvYVd4bElIQnliMk5sYzNOcGJtY3VYRzRnSUNBZ2RtRnlJSEJ5YjJObGMzTnBibWRGZG1WdWRGRjFaWFZsSUQwZ1pYWmxiblJSZFdWMVpUdGNiaUFnSUNCbGRtVnVkRkYxWlhWbElEMGdiblZzYkR0Y2JpQWdJQ0JtYjNKRllXTm9RV05qZFcxMWJHRjBaV1FvY0hKdlkyVnpjMmx1WjBWMlpXNTBVWFZsZFdVc0lHVjRaV04xZEdWRWFYTndZWFJqYUdWelFXNWtVbVZzWldGelpTazdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNGbGRtVnVkRkYxWlhWbExGeHVJQ0FnSUNBZ0ozQnliMk5sYzNORmRtVnVkRkYxWlhWbEtDazZJRUZrWkdsMGFXOXVZV3dnWlhabGJuUnpJSGRsY21VZ1pXNXhkV1YxWldRZ2QyaHBiR1VnY0hKdlkyVnpjMmx1WnlBbklDdGNiaUFnSUNBZ0lDZGhiaUJsZG1WdWRDQnhkV1YxWlM0Z1UzVndjRzl5ZENCbWIzSWdkR2hwY3lCb1lYTWdibTkwSUhsbGRDQmlaV1Z1SUdsdGNHeGxiV1Z1ZEdWa0xpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLQ0ZsZG1WdWRGRjFaWFZsS1NrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlhObElHRnlaU0J1WldWa1pXUWdabTl5SUhSbGMzUnpJRzl1YkhrdUlFUnZJRzV2ZENCMWMyVWhYRzRnSUNBcUwxeHVJQ0JmWDNCMWNtZGxPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0JzYVhOMFpXNWxja0poYm1zZ1BTQjdmVHRjYmlBZ2ZTeGNibHh1SUNCZlgyZGxkRXhwYzNSbGJtVnlRbUZ1YXpvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUd4cGMzUmxibVZ5UW1GdWF6dGNiaUFnZlZ4dVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUVWMlpXNTBVR3gxWjJsdVNIVmlPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRQbHVnaW5SZWdpc3RyeVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogSW5qZWN0YWJsZSBvcmRlcmluZyBvZiBldmVudCBwbHVnaW5zLlxuICovXG52YXIgRXZlbnRQbHVnaW5PcmRlciA9IG51bGw7XG5cbi8qKlxuICogSW5qZWN0YWJsZSBtYXBwaW5nIGZyb20gbmFtZXMgdG8gZXZlbnQgcGx1Z2luIG1vZHVsZXMuXG4gKi9cbnZhciBuYW1lc1RvUGx1Z2lucyA9IHt9O1xuXG4vKipcbiAqIFJlY29tcHV0ZXMgdGhlIHBsdWdpbiBsaXN0IHVzaW5nIHRoZSBpbmplY3RlZCBwbHVnaW5zIGFuZCBwbHVnaW4gb3JkZXJpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKSB7XG4gIGlmICghRXZlbnRQbHVnaW5PcmRlcikge1xuICAgIC8vIFdhaXQgdW50aWwgYW4gYEV2ZW50UGx1Z2luT3JkZXJgIGlzIGluamVjdGVkLlxuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIG5hbWVzVG9QbHVnaW5zKSB7XG4gICAgdmFyIFBsdWdpbk1vZHVsZSA9IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdO1xuICAgIHZhciBwbHVnaW5JbmRleCA9IEV2ZW50UGx1Z2luT3JkZXIuaW5kZXhPZihwbHVnaW5OYW1lKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgcGx1Z2luSW5kZXggPiAtMSxcbiAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbnMgdGhhdCBkbyBub3QgZXhpc3QgaW4gJyArXG4gICAgICAndGhlIHBsdWdpbiBvcmRlcmluZywgYCVzYC4nLFxuICAgICAgcGx1Z2luTmFtZVxuICAgICkgOiBpbnZhcmlhbnQocGx1Z2luSW5kZXggPiAtMSkpO1xuICAgIGlmIChFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnNbcGx1Z2luSW5kZXhdKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIFBsdWdpbk1vZHVsZS5leHRyYWN0RXZlbnRzLFxuICAgICAgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IEV2ZW50IHBsdWdpbnMgbXVzdCBpbXBsZW1lbnQgYW4gYGV4dHJhY3RFdmVudHNgICcgK1xuICAgICAgJ21ldGhvZCwgYnV0IGAlc2AgZG9lcyBub3QuJyxcbiAgICAgIHBsdWdpbk5hbWVcbiAgICApIDogaW52YXJpYW50KFBsdWdpbk1vZHVsZS5leHRyYWN0RXZlbnRzKSk7XG4gICAgRXZlbnRQbHVnaW5SZWdpc3RyeS5wbHVnaW5zW3BsdWdpbkluZGV4XSA9IFBsdWdpbk1vZHVsZTtcbiAgICB2YXIgcHVibGlzaGVkRXZlbnRzID0gUGx1Z2luTW9kdWxlLmV2ZW50VHlwZXM7XG4gICAgZm9yICh2YXIgZXZlbnROYW1lIGluIHB1Ymxpc2hlZEV2ZW50cykge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgcHVibGlzaEV2ZW50Rm9yUGx1Z2luKFxuICAgICAgICAgIHB1Ymxpc2hlZEV2ZW50c1tldmVudE5hbWVdLFxuICAgICAgICAgIFBsdWdpbk1vZHVsZSxcbiAgICAgICAgICBldmVudE5hbWVcbiAgICAgICAgKSxcbiAgICAgICAgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IEZhaWxlZCB0byBwdWJsaXNoIGV2ZW50IGAlc2AgZm9yIHBsdWdpbiBgJXNgLicsXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgcGx1Z2luTmFtZVxuICAgICAgKSA6IGludmFyaWFudChwdWJsaXNoRXZlbnRGb3JQbHVnaW4oXG4gICAgICAgIHB1Ymxpc2hlZEV2ZW50c1tldmVudE5hbWVdLFxuICAgICAgICBQbHVnaW5Nb2R1bGUsXG4gICAgICAgIGV2ZW50TmFtZVxuICAgICAgKSkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFB1Ymxpc2hlcyBhbiBldmVudCBzbyB0aGF0IGl0IGNhbiBiZSBkaXNwYXRjaGVkIGJ5IHRoZSBzdXBwbGllZCBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIERpc3BhdGNoIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBldmVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBQbHVnaW5Nb2R1bGUgUGx1Z2luIHB1Ymxpc2hpbmcgdGhlIGV2ZW50LlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIHN1Y2Nlc3NmdWxseSBwdWJsaXNoZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwdWJsaXNoRXZlbnRGb3JQbHVnaW4oZGlzcGF0Y2hDb25maWcsIFBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgIUV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSksXG4gICAgJ0V2ZW50UGx1Z2luSHViOiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICtcbiAgICAnZXZlbnQgbmFtZSwgYCVzYC4nLFxuICAgIGV2ZW50TmFtZVxuICApIDogaW52YXJpYW50KCFFdmVudFBsdWdpblJlZ2lzdHJ5LmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSk7XG4gIEV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW2V2ZW50TmFtZV0gPSBkaXNwYXRjaENvbmZpZztcblxuICB2YXIgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMgPSBkaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcztcbiAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgZm9yICh2YXIgcGhhc2VOYW1lIGluIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICBpZiAocGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkocGhhc2VOYW1lKSkge1xuICAgICAgICB2YXIgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZSA9IHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlTmFtZV07XG4gICAgICAgIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKFxuICAgICAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICAgICAgUGx1Z2luTW9kdWxlLFxuICAgICAgICAgIGV2ZW50TmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUoXG4gICAgICBkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lLFxuICAgICAgUGx1Z2luTW9kdWxlLFxuICAgICAgZXZlbnROYW1lXG4gICAgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUHVibGlzaGVzIGEgcmVnaXN0cmF0aW9uIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGRpc3BhdGNoZWQgZXZlbnRzIGFuZFxuICogY2FuIGJlIHVzZWQgd2l0aCBgRXZlbnRQbHVnaW5IdWIucHV0TGlzdGVuZXJgIHRvIHJlZ2lzdGVyIGxpc3RlbmVycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBSZWdpc3RyYXRpb24gbmFtZSB0byBhZGQuXG4gKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHJlZ2lzdHJhdGlvbk5hbWUsIFBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgIUV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0sXG4gICAgJ0V2ZW50UGx1Z2luSHViOiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICtcbiAgICAncmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJyxcbiAgICByZWdpc3RyYXRpb25OYW1lXG4gICkgOiBpbnZhcmlhbnQoIUV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0pKTtcbiAgRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSA9IFBsdWdpbk1vZHVsZTtcbiAgRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdID1cbiAgICBQbHVnaW5Nb2R1bGUuZXZlbnRUeXBlc1tldmVudE5hbWVdLmRlcGVuZGVuY2llcztcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgcGx1Z2lucyBzbyB0aGF0IHRoZXkgY2FuIGV4dHJhY3QgYW5kIGRpc3BhdGNoIGV2ZW50cy5cbiAqXG4gKiBAc2VlIHtFdmVudFBsdWdpbkh1Yn1cbiAqL1xudmFyIEV2ZW50UGx1Z2luUmVnaXN0cnkgPSB7XG5cbiAgLyoqXG4gICAqIE9yZGVyZWQgbGlzdCBvZiBpbmplY3RlZCBwbHVnaW5zLlxuICAgKi9cbiAgcGx1Z2luczogW10sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBldmVudCBuYW1lIHRvIGRpc3BhdGNoIGNvbmZpZ1xuICAgKi9cbiAgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIHBsdWdpbiBtb2R1bGVcbiAgICovXG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIGV2ZW50IG5hbWVcbiAgICovXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6IHt9LFxuXG4gIC8qKlxuICAgKiBJbmplY3RzIGFuIG9yZGVyaW5nIG9mIHBsdWdpbnMgKGJ5IHBsdWdpbiBuYW1lKS4gVGhpcyBhbGxvd3MgdGhlIG9yZGVyaW5nXG4gICAqIHRvIGJlIGRlY291cGxlZCBmcm9tIGluamVjdGlvbiBvZiB0aGUgYWN0dWFsIHBsdWdpbnMgc28gdGhhdCBvcmRlcmluZyBpc1xuICAgKiBhbHdheXMgZGV0ZXJtaW5pc3RpYyByZWdhcmRsZXNzIG9mIHBhY2thZ2luZywgb24tdGhlLWZseSBpbmplY3Rpb24sIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheX0gSW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5PcmRlcn1cbiAgICovXG4gIGluamVjdEV2ZW50UGx1Z2luT3JkZXI6IGZ1bmN0aW9uKEluamVjdGVkRXZlbnRQbHVnaW5PcmRlcikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhRXZlbnRQbHVnaW5PcmRlcixcbiAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbiBvcmRlcmluZyBtb3JlIHRoYW4gJyArXG4gICAgICAnb25jZS4gWW91IGFyZSBsaWtlbHkgdHJ5aW5nIHRvIGxvYWQgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0LidcbiAgICApIDogaW52YXJpYW50KCFFdmVudFBsdWdpbk9yZGVyKSk7XG4gICAgLy8gQ2xvbmUgdGhlIG9yZGVyaW5nIHNvIGl0IGNhbm5vdCBiZSBkeW5hbWljYWxseSBtdXRhdGVkLlxuICAgIEV2ZW50UGx1Z2luT3JkZXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIpO1xuICAgIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEluamVjdHMgcGx1Z2lucyB0byBiZSB1c2VkIGJ5IGBFdmVudFBsdWdpbkh1YmAuIFRoZSBwbHVnaW4gbmFtZXMgbXVzdCBiZVxuICAgKiBpbiB0aGUgb3JkZXJpbmcgaW5qZWN0ZWQgYnkgYGluamVjdEV2ZW50UGx1Z2luT3JkZXJgLlxuICAgKlxuICAgKiBQbHVnaW5zIGNhbiBiZSBpbmplY3RlZCBhcyBwYXJ0IG9mIHBhZ2UgaW5pdGlhbGl6YXRpb24gb3Igb24tdGhlLWZseS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGluamVjdGVkTmFtZXNUb1BsdWdpbnMgTWFwIGZyb20gbmFtZXMgdG8gcGx1Z2luIG1vZHVsZXMuXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lfVxuICAgKi9cbiAgaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOiBmdW5jdGlvbihpbmplY3RlZE5hbWVzVG9QbHVnaW5zKSB7XG4gICAgdmFyIGlzT3JkZXJpbmdEaXJ0eSA9IGZhbHNlO1xuICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICAgICAgaWYgKCFpbmplY3RlZE5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIFBsdWdpbk1vZHVsZSA9IGluamVjdGVkTmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV07XG4gICAgICBpZiAoIW5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpIHx8XG4gICAgICAgICAgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0gIT09IFBsdWdpbk1vZHVsZSkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgICFuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSxcbiAgICAgICAgICAnRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCB0d28gZGlmZmVyZW50IGV2ZW50IHBsdWdpbnMgJyArXG4gICAgICAgICAgJ3VzaW5nIHRoZSBzYW1lIG5hbWUsIGAlc2AuJyxcbiAgICAgICAgICBwbHVnaW5OYW1lXG4gICAgICAgICkgOiBpbnZhcmlhbnQoIW5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdKSk7XG4gICAgICAgIG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdID0gUGx1Z2luTW9kdWxlO1xuICAgICAgICBpc09yZGVyaW5nRGlydHkgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNPcmRlcmluZ0RpcnR5KSB7XG4gICAgICByZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogTG9va3MgdXAgdGhlIHBsdWdpbiBmb3IgdGhlIHN1cHBsaWVkIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgQSBzeW50aGV0aWMgZXZlbnQuXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFRoZSBwbHVnaW4gdGhhdCBjcmVhdGVkIHRoZSBzdXBwbGllZCBldmVudC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRQbHVnaW5Nb2R1bGVGb3JFdmVudDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZGlzcGF0Y2hDb25maWcgPSBldmVudC5kaXNwYXRjaENvbmZpZztcbiAgICBpZiAoZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbXG4gICAgICAgIGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWVcbiAgICAgIF0gfHwgbnVsbDtcbiAgICB9XG4gICAgZm9yICh2YXIgcGhhc2UgaW4gZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICAgIGlmICghZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkocGhhc2UpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIFBsdWdpbk1vZHVsZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbXG4gICAgICAgIGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlXVxuICAgICAgXTtcbiAgICAgIGlmIChQbHVnaW5Nb2R1bGUpIHtcbiAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIHVuaXQgdGVzdGluZy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXNldEV2ZW50UGx1Z2luczogZnVuY3Rpb24oKSB7XG4gICAgRXZlbnRQbHVnaW5PcmRlciA9IG51bGw7XG4gICAgZm9yICh2YXIgcGx1Z2luTmFtZSBpbiBuYW1lc1RvUGx1Z2lucykge1xuICAgICAgaWYgKG5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgRXZlbnRQbHVnaW5SZWdpc3RyeS5wbHVnaW5zLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3M7XG4gICAgZm9yICh2YXIgZXZlbnROYW1lIGluIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncykge1xuICAgICAgaWYgKGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3NbZXZlbnROYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzO1xuICAgIGZvciAodmFyIHJlZ2lzdHJhdGlvbk5hbWUgaW4gcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMpIHtcbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShyZWdpc3RyYXRpb25OYW1lKSkge1xuICAgICAgICBkZWxldGUgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRQbHVnaW5SZWdpc3RyeTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVYRzRnS2lCQWRIbHdaV05vWldOcmN5QnpkR0YwYVdNdGIyNXNlVnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVMeW9xWEc0Z0tpQkpibXBsWTNSaFlteGxJRzl5WkdWeWFXNW5JRzltSUdWMlpXNTBJSEJzZFdkcGJuTXVYRzRnS2k5Y2JuWmhjaUJGZG1WdWRGQnNkV2RwYms5eVpHVnlJRDBnYm5Wc2JEdGNibHh1THlvcVhHNGdLaUJKYm1wbFkzUmhZbXhsSUcxaGNIQnBibWNnWm5KdmJTQnVZVzFsY3lCMGJ5QmxkbVZ1ZENCd2JIVm5hVzRnYlc5a2RXeGxjeTVjYmlBcUwxeHVkbUZ5SUc1aGJXVnpWRzlRYkhWbmFXNXpJRDBnZTMwN1hHNWNiaThxS2x4dUlDb2dVbVZqYjIxd2RYUmxjeUIwYUdVZ2NHeDFaMmx1SUd4cGMzUWdkWE5wYm1jZ2RHaGxJR2x1YW1WamRHVmtJSEJzZFdkcGJuTWdZVzVrSUhCc2RXZHBiaUJ2Y21SbGNtbHVaeTVjYmlBcVhHNGdLaUJBY0hKcGRtRjBaVnh1SUNvdlhHNW1kVzVqZEdsdmJpQnlaV052YlhCMWRHVlFiSFZuYVc1UGNtUmxjbWx1WnlncElIdGNiaUFnYVdZZ0tDRkZkbVZ1ZEZCc2RXZHBiazl5WkdWeUtTQjdYRzRnSUNBZ0x5OGdWMkZwZENCMWJuUnBiQ0JoYmlCZ1JYWmxiblJRYkhWbmFXNVBjbVJsY21BZ2FYTWdhVzVxWldOMFpXUXVYRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzRnSUdadmNpQW9kbUZ5SUhCc2RXZHBiazVoYldVZ2FXNGdibUZ0WlhOVWIxQnNkV2RwYm5NcElIdGNiaUFnSUNCMllYSWdVR3gxWjJsdVRXOWtkV3hsSUQwZ2JtRnRaWE5VYjFCc2RXZHBibk5iY0d4MVoybHVUbUZ0WlYwN1hHNGdJQ0FnZG1GeUlIQnNkV2RwYmtsdVpHVjRJRDBnUlhabGJuUlFiSFZuYVc1UGNtUmxjaTVwYm1SbGVFOW1LSEJzZFdkcGJrNWhiV1VwTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQndiSFZuYVc1SmJtUmxlQ0ErSUMweExGeHVJQ0FnSUNBZ0owVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNuazZJRU5oYm01dmRDQnBibXBsWTNRZ1pYWmxiblFnY0d4MVoybHVjeUIwYUdGMElHUnZJRzV2ZENCbGVHbHpkQ0JwYmlBbklDdGNiaUFnSUNBZ0lDZDBhR1VnY0d4MVoybHVJRzl5WkdWeWFXNW5MQ0JnSlhOZ0xpY3NYRzRnSUNBZ0lDQndiSFZuYVc1T1lXMWxYRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2h3YkhWbmFXNUpibVJsZUNBK0lDMHhLU2s3WEc0Z0lDQWdhV1lnS0VWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rdWNHeDFaMmx1YzF0d2JIVm5hVzVKYm1SbGVGMHBJSHRjYmlBZ0lDQWdJR052Ym5ScGJuVmxPMXh1SUNBZ0lIMWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnVUd4MVoybHVUVzlrZFd4bExtVjRkSEpoWTNSRmRtVnVkSE1zWEc0Z0lDQWdJQ0FuUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVRvZ1JYWmxiblFnY0d4MVoybHVjeUJ0ZFhOMElHbHRjR3hsYldWdWRDQmhiaUJnWlhoMGNtRmpkRVYyWlc1MGMyQWdKeUFyWEc0Z0lDQWdJQ0FuYldWMGFHOWtMQ0JpZFhRZ1lDVnpZQ0JrYjJWeklHNXZkQzRuTEZ4dUlDQWdJQ0FnY0d4MVoybHVUbUZ0WlZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1VHeDFaMmx1VFc5a2RXeGxMbVY0ZEhKaFkzUkZkbVZ1ZEhNcEtUdGNiaUFnSUNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxuQnNkV2RwYm5OYmNHeDFaMmx1U1c1a1pYaGRJRDBnVUd4MVoybHVUVzlrZFd4bE8xeHVJQ0FnSUhaaGNpQndkV0pzYVhOb1pXUkZkbVZ1ZEhNZ1BTQlFiSFZuYVc1TmIyUjFiR1V1WlhabGJuUlVlWEJsY3p0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJsZG1WdWRFNWhiV1VnYVc0Z2NIVmliR2x6YUdWa1JYWmxiblJ6S1NCN1hHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSUNCd2RXSnNhWE5vUlhabGJuUkdiM0pRYkhWbmFXNG9YRzRnSUNBZ0lDQWdJQ0FnY0hWaWJHbHphR1ZrUlhabGJuUnpXMlYyWlc1MFRtRnRaVjBzWEc0Z0lDQWdJQ0FnSUNBZ1VHeDFaMmx1VFc5a2RXeGxMRnh1SUNBZ0lDQWdJQ0FnSUdWMlpXNTBUbUZ0WlZ4dUlDQWdJQ0FnSUNBcExGeHVJQ0FnSUNBZ0lDQW5SWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllVG9nUm1GcGJHVmtJSFJ2SUhCMVlteHBjMmdnWlhabGJuUWdZQ1Z6WUNCbWIzSWdjR3gxWjJsdUlHQWxjMkF1Snl4Y2JpQWdJQ0FnSUNBZ1pYWmxiblJPWVcxbExGeHVJQ0FnSUNBZ0lDQndiSFZuYVc1T1lXMWxYRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hCMVlteHBjMmhGZG1WdWRFWnZjbEJzZFdkcGJpaGNiaUFnSUNBZ0lDQWdjSFZpYkdsemFHVmtSWFpsYm5SelcyVjJaVzUwVG1GdFpWMHNYRzRnSUNBZ0lDQWdJRkJzZFdkcGJrMXZaSFZzWlN4Y2JpQWdJQ0FnSUNBZ1pYWmxiblJPWVcxbFhHNGdJQ0FnSUNBcEtTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dVSFZpYkdsemFHVnpJR0Z1SUdWMlpXNTBJSE52SUhSb1lYUWdhWFFnWTJGdUlHSmxJR1JwYzNCaGRHTm9aV1FnWW5rZ2RHaGxJSE4xY0hCc2FXVmtJSEJzZFdkcGJpNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ1pHbHpjR0YwWTJoRGIyNW1hV2NnUkdsemNHRjBZMmdnWTI5dVptbG5kWEpoZEdsdmJpQm1iM0lnZEdobElHVjJaVzUwTGx4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlGQnNkV2RwYmsxdlpIVnNaU0JRYkhWbmFXNGdjSFZpYkdsemFHbHVaeUIwYUdVZ1pYWmxiblF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZTQlVjblZsSUdsbUlIUm9aU0JsZG1WdWRDQjNZWE1nYzNWalkyVnpjMloxYkd4NUlIQjFZbXhwYzJobFpDNWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibVoxYm1OMGFXOXVJSEIxWW14cGMyaEZkbVZ1ZEVadmNsQnNkV2RwYmloa2FYTndZWFJqYUVOdmJtWnBaeXdnVUd4MVoybHVUVzlrZFd4bExDQmxkbVZ1ZEU1aGJXVXBJSHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FoUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1bGRtVnVkRTVoYldWRWFYTndZWFJqYUVOdmJtWnBaM011YUdGelQzZHVVSEp2Y0dWeWRIa29aWFpsYm5ST1lXMWxLU3hjYmlBZ0lDQW5SWFpsYm5SUWJIVm5hVzVJZFdJNklFMXZjbVVnZEdoaGJpQnZibVVnY0d4MVoybHVJR0YwZEdWdGNIUmxaQ0IwYnlCd2RXSnNhWE5vSUhSb1pTQnpZVzFsSUNjZ0sxeHVJQ0FnSUNkbGRtVnVkQ0J1WVcxbExDQmdKWE5nTGljc1hHNGdJQ0FnWlhabGJuUk9ZVzFsWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvSVVWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rdVpYWmxiblJPWVcxbFJHbHpjR0YwWTJoRGIyNW1hV2R6TG1oaGMwOTNibEJ5YjNCbGNuUjVLR1YyWlc1MFRtRnRaU2twS1R0Y2JpQWdSWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllUzVsZG1WdWRFNWhiV1ZFYVhOd1lYUmphRU52Ym1acFozTmJaWFpsYm5ST1lXMWxYU0E5SUdScGMzQmhkR05vUTI5dVptbG5PMXh1WEc0Z0lIWmhjaUJ3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN5QTlJR1JwYzNCaGRHTm9RMjl1Wm1sbkxuQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6TzF4dUlDQnBaaUFvY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTXBJSHRjYmlBZ0lDQm1iM0lnS0haaGNpQndhR0Z6WlU1aGJXVWdhVzRnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTXBJSHRjYmlBZ0lDQWdJR2xtSUNod2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHdhR0Z6WlU1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsSUQwZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE5iY0doaGMyVk9ZVzFsWFR0Y2JpQWdJQ0FnSUNBZ2NIVmliR2x6YUZKbFoybHpkSEpoZEdsdmJrNWhiV1VvWEc0Z0lDQWdJQ0FnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNCUWJIVm5hVzVOYjJSMWJHVXNYRzRnSUNBZ0lDQWdJQ0FnWlhabGJuUk9ZVzFsWEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQjlJR1ZzYzJVZ2FXWWdLR1JwYzNCaGRHTm9RMjl1Wm1sbkxuSmxaMmx6ZEhKaGRHbHZiazVoYldVcElIdGNiaUFnSUNCd2RXSnNhWE5vVW1WbmFYTjBjbUYwYVc5dVRtRnRaU2hjYmlBZ0lDQWdJR1JwYzNCaGRHTm9RMjl1Wm1sbkxuSmxaMmx6ZEhKaGRHbHZiazVoYldVc1hHNGdJQ0FnSUNCUWJIVm5hVzVOYjJSMWJHVXNYRzRnSUNBZ0lDQmxkbVZ1ZEU1aGJXVmNiaUFnSUNBcE8xeHVJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCbVlXeHpaVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlFkV0pzYVhOb1pYTWdZU0J5WldkcGMzUnlZWFJwYjI0Z2JtRnRaU0IwYUdGMElHbHpJSFZ6WldRZ2RHOGdhV1JsYm5ScFpua2daR2x6Y0dGMFkyaGxaQ0JsZG1WdWRITWdZVzVrWEc0Z0tpQmpZVzRnWW1VZ2RYTmxaQ0IzYVhSb0lHQkZkbVZ1ZEZCc2RXZHBia2gxWWk1d2RYUk1hWE4wWlc1bGNtQWdkRzhnY21WbmFYTjBaWElnYkdsemRHVnVaWEp6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J5WldkcGMzUnlZWFJwYjI1T1lXMWxJRkpsWjJsemRISmhkR2x2YmlCdVlXMWxJSFJ2SUdGa1pDNWNiaUFxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JRYkhWbmFXNU5iMlIxYkdVZ1VHeDFaMmx1SUhCMVlteHBjMmhwYm1jZ2RHaGxJR1YyWlc1MExseHVJQ29nUUhCeWFYWmhkR1ZjYmlBcUwxeHVablZ1WTNScGIyNGdjSFZpYkdsemFGSmxaMmx6ZEhKaGRHbHZiazVoYldVb2NtVm5hWE4wY21GMGFXOXVUbUZ0WlN3Z1VHeDFaMmx1VFc5a2RXeGxMQ0JsZG1WdWRFNWhiV1VwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBaFJYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTNXlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsYzF0eVpXZHBjM1J5WVhScGIyNU9ZVzFsWFN4Y2JpQWdJQ0FuUlhabGJuUlFiSFZuYVc1SWRXSTZJRTF2Y21VZ2RHaGhiaUJ2Ym1VZ2NHeDFaMmx1SUdGMGRHVnRjSFJsWkNCMGJ5QndkV0pzYVhOb0lIUm9aU0J6WVcxbElDY2dLMXh1SUNBZ0lDZHlaV2RwYzNSeVlYUnBiMjRnYm1GdFpTd2dZQ1Z6WUM0bkxGeHVJQ0FnSUhKbFoybHpkSEpoZEdsdmJrNWhiV1ZjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2doUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1eVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjMXR5WldkcGMzUnlZWFJwYjI1T1lXMWxYU2twTzF4dUlDQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbkpsWjJsemRISmhkR2x2Yms1aGJXVk5iMlIxYkdWelczSmxaMmx6ZEhKaGRHbHZiazVoYldWZElEMGdVR3gxWjJsdVRXOWtkV3hsTzF4dUlDQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbkpsWjJsemRISmhkR2x2Yms1aGJXVkVaWEJsYm1SbGJtTnBaWE5iY21WbmFYTjBjbUYwYVc5dVRtRnRaVjBnUFZ4dUlDQWdJRkJzZFdkcGJrMXZaSFZzWlM1bGRtVnVkRlI1Y0dWelcyVjJaVzUwVG1GdFpWMHVaR1Z3Wlc1a1pXNWphV1Z6TzF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsWjJsemRHVnljeUJ3YkhWbmFXNXpJSE52SUhSb1lYUWdkR2hsZVNCallXNGdaWGgwY21GamRDQmhibVFnWkdsemNHRjBZMmdnWlhabGJuUnpMbHh1SUNwY2JpQXFJRUJ6WldVZ2UwVjJaVzUwVUd4MVoybHVTSFZpZlZ4dUlDb3ZYRzUyWVhJZ1JYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTQTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUM0prWlhKbFpDQnNhWE4wSUc5bUlHbHVhbVZqZEdWa0lIQnNkV2RwYm5NdVhHNGdJQ0FxTDF4dUlDQndiSFZuYVc1ek9pQmJYU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUV0Z3Y0dsdVp5Qm1jbTl0SUdWMlpXNTBJRzVoYldVZ2RHOGdaR2x6Y0dGMFkyZ2dZMjl1Wm1sblhHNGdJQ0FxTDF4dUlDQmxkbVZ1ZEU1aGJXVkVhWE53WVhSamFFTnZibVpwWjNNNklIdDlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQk5ZWEJ3YVc1bklHWnliMjBnY21WbmFYTjBjbUYwYVc5dUlHNWhiV1VnZEc4Z2NHeDFaMmx1SUcxdlpIVnNaVnh1SUNBZ0tpOWNiaUFnY21WbmFYTjBjbUYwYVc5dVRtRnRaVTF2WkhWc1pYTTZJSHQ5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJOWVhCd2FXNW5JR1p5YjIwZ2NtVm5hWE4wY21GMGFXOXVJRzVoYldVZ2RHOGdaWFpsYm5RZ2JtRnRaVnh1SUNBZ0tpOWNiaUFnY21WbmFYTjBjbUYwYVc5dVRtRnRaVVJsY0dWdVpHVnVZMmxsY3pvZ2UzMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFbHVhbVZqZEhNZ1lXNGdiM0prWlhKcGJtY2diMllnY0d4MVoybHVjeUFvWW5rZ2NHeDFaMmx1SUc1aGJXVXBMaUJVYUdseklHRnNiRzkzY3lCMGFHVWdiM0prWlhKcGJtZGNiaUFnSUNvZ2RHOGdZbVVnWkdWamIzVndiR1ZrSUdaeWIyMGdhVzVxWldOMGFXOXVJRzltSUhSb1pTQmhZM1IxWVd3Z2NHeDFaMmx1Y3lCemJ5QjBhR0YwSUc5eVpHVnlhVzVuSUdselhHNGdJQ0FxSUdGc2QyRjVjeUJrWlhSbGNtMXBibWx6ZEdsaklISmxaMkZ5Wkd4bGMzTWdiMllnY0dGamEyRm5hVzVuTENCdmJpMTBhR1V0Wm14NUlHbHVhbVZqZEdsdmJpd2daWFJqTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyRnljbUY1ZlNCSmJtcGxZM1JsWkVWMlpXNTBVR3gxWjJsdVQzSmtaWEpjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUlFQnpaV1VnZTBWMlpXNTBVR3gxWjJsdVNIVmlMbWx1YW1WamRHbHZiaTVwYm1wbFkzUkZkbVZ1ZEZCc2RXZHBiazl5WkdWeWZWeHVJQ0FnS2k5Y2JpQWdhVzVxWldOMFJYWmxiblJRYkhWbmFXNVBjbVJsY2pvZ1puVnVZM1JwYjI0b1NXNXFaV04wWldSRmRtVnVkRkJzZFdkcGJrOXlaR1Z5S1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0ZGZG1WdWRGQnNkV2RwYms5eVpHVnlMRnh1SUNBZ0lDQWdKMFYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbms2SUVOaGJtNXZkQ0JwYm1wbFkzUWdaWFpsYm5RZ2NHeDFaMmx1SUc5eVpHVnlhVzVuSUcxdmNtVWdkR2hoYmlBbklDdGNiaUFnSUNBZ0lDZHZibU5sTGlCWmIzVWdZWEpsSUd4cGEyVnNlU0IwY25scGJtY2dkRzhnYkc5aFpDQnRiM0psSUhSb1lXNGdiMjVsSUdOdmNIa2diMllnVW1WaFkzUXVKMXh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVVWMlpXNTBVR3gxWjJsdVQzSmtaWElwS1R0Y2JpQWdJQ0F2THlCRGJHOXVaU0IwYUdVZ2IzSmtaWEpwYm1jZ2MyOGdhWFFnWTJGdWJtOTBJR0psSUdSNWJtRnRhV05oYkd4NUlHMTFkR0YwWldRdVhHNGdJQ0FnUlhabGJuUlFiSFZuYVc1UGNtUmxjaUE5SUVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV6YkdsalpTNWpZV3hzS0VsdWFtVmpkR1ZrUlhabGJuUlFiSFZuYVc1UGNtUmxjaWs3WEc0Z0lDQWdjbVZqYjIxd2RYUmxVR3gxWjJsdVQzSmtaWEpwYm1jb0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nU1c1cVpXTjBjeUJ3YkhWbmFXNXpJSFJ2SUdKbElIVnpaV1FnWW5rZ1lFVjJaVzUwVUd4MVoybHVTSFZpWUM0Z1ZHaGxJSEJzZFdkcGJpQnVZVzFsY3lCdGRYTjBJR0psWEc0Z0lDQXFJR2x1SUhSb1pTQnZjbVJsY21sdVp5QnBibXBsWTNSbFpDQmllU0JnYVc1cVpXTjBSWFpsYm5SUWJIVm5hVzVQY21SbGNtQXVYRzRnSUNBcVhHNGdJQ0FxSUZCc2RXZHBibk1nWTJGdUlHSmxJR2x1YW1WamRHVmtJR0Z6SUhCaGNuUWdiMllnY0dGblpTQnBibWwwYVdGc2FYcGhkR2x2YmlCdmNpQnZiaTEwYUdVdFpteDVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYVc1cVpXTjBaV1JPWVcxbGMxUnZVR3gxWjJsdWN5Qk5ZWEFnWm5KdmJTQnVZVzFsY3lCMGJ5QndiSFZuYVc0Z2JXOWtkV3hsY3k1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFJRUJ6WldVZ2UwVjJaVzUwVUd4MVoybHVTSFZpTG1sdWFtVmpkR2x2Ymk1cGJtcGxZM1JGZG1WdWRGQnNkV2RwYm5OQ2VVNWhiV1Y5WEc0Z0lDQXFMMXh1SUNCcGJtcGxZM1JGZG1WdWRGQnNkV2RwYm5OQ2VVNWhiV1U2SUdaMWJtTjBhVzl1S0dsdWFtVmpkR1ZrVG1GdFpYTlViMUJzZFdkcGJuTXBJSHRjYmlBZ0lDQjJZWElnYVhOUGNtUmxjbWx1WjBScGNuUjVJRDBnWm1Gc2MyVTdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2NHeDFaMmx1VG1GdFpTQnBiaUJwYm1wbFkzUmxaRTVoYldWelZHOVFiSFZuYVc1ektTQjdYRzRnSUNBZ0lDQnBaaUFvSVdsdWFtVmpkR1ZrVG1GdFpYTlViMUJzZFdkcGJuTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NHeDFaMmx1VG1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IyWVhJZ1VHeDFaMmx1VFc5a2RXeGxJRDBnYVc1cVpXTjBaV1JPWVcxbGMxUnZVR3gxWjJsdWMxdHdiSFZuYVc1T1lXMWxYVHRjYmlBZ0lDQWdJR2xtSUNnaGJtRnRaWE5VYjFCc2RXZHBibk11YUdGelQzZHVVSEp2Y0dWeWRIa29jR3gxWjJsdVRtRnRaU2tnZkh4Y2JpQWdJQ0FnSUNBZ0lDQnVZVzFsYzFSdlVHeDFaMmx1YzF0d2JIVm5hVzVPWVcxbFhTQWhQVDBnVUd4MVoybHVUVzlrZFd4bEtTQjdYRzRnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJQ0FnSVc1aGJXVnpWRzlRYkhWbmFXNXpXM0JzZFdkcGJrNWhiV1ZkTEZ4dUlDQWdJQ0FnSUNBZ0lDZEZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVPaUJEWVc1dWIzUWdhVzVxWldOMElIUjNieUJrYVdabVpYSmxiblFnWlhabGJuUWdjR3gxWjJsdWN5QW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBbmRYTnBibWNnZEdobElITmhiV1VnYm1GdFpTd2dZQ1Z6WUM0bkxGeHVJQ0FnSUNBZ0lDQWdJSEJzZFdkcGJrNWhiV1ZjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDZ2hibUZ0WlhOVWIxQnNkV2RwYm5OYmNHeDFaMmx1VG1GdFpWMHBLVHRjYmlBZ0lDQWdJQ0FnYm1GdFpYTlViMUJzZFdkcGJuTmJjR3gxWjJsdVRtRnRaVjBnUFNCUWJIVm5hVzVOYjJSMWJHVTdYRzRnSUNBZ0lDQWdJR2x6VDNKa1pYSnBibWRFYVhKMGVTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNocGMwOXlaR1Z5YVc1blJHbHlkSGtwSUh0Y2JpQWdJQ0FnSUhKbFkyOXRjSFYwWlZCc2RXZHBiazl5WkdWeWFXNW5LQ2s3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCTWIyOXJjeUIxY0NCMGFHVWdjR3gxWjJsdUlHWnZjaUIwYUdVZ2MzVndjR3hwWldRZ1pYWmxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCbGRtVnVkQ0JCSUhONWJuUm9aWFJwWXlCbGRtVnVkQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdQMjlpYW1WamRIMGdWR2hsSUhCc2RXZHBiaUIwYUdGMElHTnlaV0YwWldRZ2RHaGxJSE4xY0hCc2FXVmtJR1YyWlc1MExseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHZGxkRkJzZFdkcGJrMXZaSFZzWlVadmNrVjJaVzUwT2lCbWRXNWpkR2x2YmlobGRtVnVkQ2tnZTF4dUlDQWdJSFpoY2lCa2FYTndZWFJqYUVOdmJtWnBaeUE5SUdWMlpXNTBMbVJwYzNCaGRHTm9RMjl1Wm1sbk8xeHVJQ0FnSUdsbUlDaGthWE53WVhSamFFTnZibVpwWnk1eVpXZHBjM1J5WVhScGIyNU9ZVzFsS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1eVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjMXRjYmlBZ0lDQWdJQ0FnWkdsemNHRjBZMmhEYjI1bWFXY3VjbVZuYVhOMGNtRjBhVzl1VG1GdFpWeHVJQ0FnSUNBZ1hTQjhmQ0J1ZFd4c08xeHVJQ0FnSUgxY2JpQWdJQ0JtYjNJZ0tIWmhjaUJ3YUdGelpTQnBiaUJrYVhOd1lYUmphRU52Ym1acFp5NXdhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZrYVhOd1lYUmphRU52Ym1acFp5NXdhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3k1b1lYTlBkMjVRY205d1pYSjBlU2h3YUdGelpTa3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IyWVhJZ1VHeDFaMmx1VFc5a2RXeGxJRDBnUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1eVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjMXRjYmlBZ0lDQWdJQ0FnWkdsemNHRjBZMmhEYjI1bWFXY3VjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhOYmNHaGhjMlZkWEc0Z0lDQWdJQ0JkTzF4dUlDQWdJQ0FnYVdZZ0tGQnNkV2RwYmsxdlpIVnNaU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVUd4MVoybHVUVzlrZFd4bE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSWGh3YjNObFpDQm1iM0lnZFc1cGRDQjBaWE4wYVc1bkxseHVJQ0FnS2lCQWNISnBkbUYwWlZ4dUlDQWdLaTljYmlBZ1gzSmxjMlYwUlhabGJuUlFiSFZuYVc1ek9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQkZkbVZ1ZEZCc2RXZHBiazl5WkdWeUlEMGdiblZzYkR0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJ3YkhWbmFXNU9ZVzFsSUdsdUlHNWhiV1Z6Vkc5UWJIVm5hVzV6S1NCN1hHNGdJQ0FnSUNCcFppQW9ibUZ0WlhOVWIxQnNkV2RwYm5NdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0d4MVoybHVUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdaR1ZzWlhSbElHNWhiV1Z6Vkc5UWJIVm5hVzV6VzNCc2RXZHBiazVoYldWZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1TG5Cc2RXZHBibk11YkdWdVozUm9JRDBnTUR0Y2JseHVJQ0FnSUhaaGNpQmxkbVZ1ZEU1aGJXVkVhWE53WVhSamFFTnZibVpwWjNNZ1BTQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbVYyWlc1MFRtRnRaVVJwYzNCaGRHTm9RMjl1Wm1sbmN6dGNiaUFnSUNCbWIzSWdLSFpoY2lCbGRtVnVkRTVoYldVZ2FXNGdaWFpsYm5ST1lXMWxSR2x6Y0dGMFkyaERiMjVtYVdkektTQjdYRzRnSUNBZ0lDQnBaaUFvWlhabGJuUk9ZVzFsUkdsemNHRjBZMmhEYjI1bWFXZHpMbWhoYzA5M2JsQnliM0JsY25SNUtHVjJaVzUwVG1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnWkdWc1pYUmxJR1YyWlc1MFRtRnRaVVJwYzNCaGRHTm9RMjl1Wm1sbmMxdGxkbVZ1ZEU1aGJXVmRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJ5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGN5QTlJRVYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbmt1Y21WbmFYTjBjbUYwYVc5dVRtRnRaVTF2WkhWc1pYTTdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNCcGJpQnlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsY3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSEpsWjJsemRISmhkR2x2Yms1aGJXVk5iMlIxYkdWekxtaGhjMDkzYmxCeWIzQmxjblI1S0hKbFoybHpkSEpoZEdsdmJrNWhiV1VwS1NCN1hHNGdJQ0FnSUNBZ0lHUmxiR1YwWlNCeVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjMXR5WldkcGMzUnlZWFJwYjI1T1lXMWxYVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNU8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFdmVudFBsdWdpblV0aWxzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBJbmplY3RlZCBkZXBlbmRlbmNpZXM6XG4gKi9cblxuLyoqXG4gKiAtIGBNb3VudGA6IFtyZXF1aXJlZF0gTW9kdWxlIHRoYXQgY2FuIGNvbnZlcnQgYmV0d2VlbiBSZWFjdCBkb20gSURzIGFuZFxuICogICBhY3R1YWwgbm9kZSByZWZlcmVuY2VzLlxuICovXG52YXIgaW5qZWN0aW9uID0ge1xuICBNb3VudDogbnVsbCxcbiAgaW5qZWN0TW91bnQ6IGZ1bmN0aW9uKEluamVjdGVkTW91bnQpIHtcbiAgICBpbmplY3Rpb24uTW91bnQgPSBJbmplY3RlZE1vdW50O1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIEluamVjdGVkTW91bnQgJiYgSW5qZWN0ZWRNb3VudC5nZXROb2RlLFxuICAgICAgICAnRXZlbnRQbHVnaW5VdGlscy5pbmplY3Rpb24uaW5qZWN0TW91bnQoLi4uKTogSW5qZWN0ZWQgTW91bnQgbW9kdWxlICcgK1xuICAgICAgICAnaXMgbWlzc2luZyBnZXROb2RlLidcbiAgICAgICkgOiBpbnZhcmlhbnQoSW5qZWN0ZWRNb3VudCAmJiBJbmplY3RlZE1vdW50LmdldE5vZGUpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcblxuZnVuY3Rpb24gaXNFbmRpc2godG9wTGV2ZWxUeXBlKSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wTW91c2VVcCB8fFxuICAgICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoRW5kIHx8XG4gICAgICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wVG91Y2hDYW5jZWw7XG59XG5cbmZ1bmN0aW9uIGlzTW92ZWlzaCh0b3BMZXZlbFR5cGUpIHtcbiAgcmV0dXJuIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU1vdmUgfHxcbiAgICAgICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BUb3VjaE1vdmU7XG59XG5mdW5jdGlvbiBpc1N0YXJ0aXNoKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlRG93biB8fFxuICAgICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoU3RhcnQ7XG59XG5cblxudmFyIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzO1xuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGRpc3BhdGNoTGlzdGVuZXJzID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICAgIHZhciBkaXNwYXRjaElEcyA9IGV2ZW50Ll9kaXNwYXRjaElEcztcblxuICAgIHZhciBsaXN0ZW5lcnNJc0FyciA9IEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpO1xuICAgIHZhciBpZHNJc0FyciA9IEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hJRHMpO1xuICAgIHZhciBJRHNMZW4gPSBpZHNJc0FyciA/IGRpc3BhdGNoSURzLmxlbmd0aCA6IGRpc3BhdGNoSURzID8gMSA6IDA7XG4gICAgdmFyIGxpc3RlbmVyc0xlbiA9IGxpc3RlbmVyc0lzQXJyID9cbiAgICAgIGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aCA6XG4gICAgICBkaXNwYXRjaExpc3RlbmVycyA/IDEgOiAwO1xuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGlkc0lzQXJyID09PSBsaXN0ZW5lcnNJc0FyciAmJiBJRHNMZW4gPT09IGxpc3RlbmVyc0xlbixcbiAgICAgICdFdmVudFBsdWdpblV0aWxzOiBJbnZhbGlkIGBldmVudGAuJ1xuICAgICkgOiBpbnZhcmlhbnQoaWRzSXNBcnIgPT09IGxpc3RlbmVyc0lzQXJyICYmIElEc0xlbiA9PT0gbGlzdGVuZXJzTGVuKSk7XG4gIH07XG59XG5cbi8qKlxuICogSW52b2tlcyBgY2IoZXZlbnQsIGxpc3RlbmVyLCBpZClgLiBBdm9pZHMgdXNpbmcgY2FsbCBpZiBubyBzY29wZSBpc1xuICogcHJvdmlkZWQuIFRoZSBgKGxpc3RlbmVyLGlkKWAgcGFpciBlZmZlY3RpdmVseSBmb3JtcyB0aGUgXCJkaXNwYXRjaFwiIGJ1dCBhcmVcbiAqIGtlcHQgc2VwYXJhdGUgdG8gY29uc2VydmUgbWVtb3J5LlxuICovXG5mdW5jdGlvbiBmb3JFYWNoRXZlbnREaXNwYXRjaChldmVudCwgY2IpIHtcbiAgdmFyIGRpc3BhdGNoTGlzdGVuZXJzID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICB2YXIgZGlzcGF0Y2hJRHMgPSBldmVudC5fZGlzcGF0Y2hJRHM7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBMaXN0ZW5lcnMgYW5kIElEcyBhcmUgdHdvIHBhcmFsbGVsIGFycmF5cyB0aGF0IGFyZSBhbHdheXMgaW4gc3luYy5cbiAgICAgIGNiKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVyc1tpXSwgZGlzcGF0Y2hJRHNbaV0pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChkaXNwYXRjaExpc3RlbmVycykge1xuICAgIGNiKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVycywgZGlzcGF0Y2hJRHMpO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBQbHVnaW5Nb2R1bGUuZXhlY3V0ZURpc3BhdGNoKCkuXG4gKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBTeW50aGV0aWNFdmVudCB0byBoYW5kbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IEFwcGxpY2F0aW9uLWxldmVsIGNhbGxiYWNrXG4gKiBAcGFyYW0ge3N0cmluZ30gZG9tSUQgRE9NIGlkIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBkb21JRCkge1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gaW5qZWN0aW9uLk1vdW50LmdldE5vZGUoZG9tSUQpO1xuICB2YXIgcmV0dXJuVmFsdWUgPSBsaXN0ZW5lcihldmVudCwgZG9tSUQpO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkL3NpbXBsZSBpdGVyYXRpb24gdGhyb3VnaCBhbiBldmVudCdzIGNvbGxlY3RlZCBkaXNwYXRjaGVzLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQsIGNiKSB7XG4gIGZvckVhY2hFdmVudERpc3BhdGNoKGV2ZW50LCBjYik7XG4gIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaElEcyA9IG51bGw7XG59XG5cbi8qKlxuICogU3RhbmRhcmQvc2ltcGxlIGl0ZXJhdGlvbiB0aHJvdWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMsIGJ1dCBzdG9wc1xuICogYXQgdGhlIGZpcnN0IGRpc3BhdGNoIGV4ZWN1dGlvbiByZXR1cm5pbmcgdHJ1ZSwgYW5kIHJldHVybnMgdGhhdCBpZC5cbiAqXG4gKiBAcmV0dXJuIGlkIG9mIHRoZSBmaXJzdCBkaXNwYXRjaCBleGVjdXRpb24gd2hvJ3MgbGlzdGVuZXIgcmV0dXJucyB0cnVlLCBvclxuICogbnVsbCBpZiBubyBsaXN0ZW5lciByZXR1cm5lZCB0cnVlLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbChldmVudCkge1xuICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaElEcyA9IGV2ZW50Ll9kaXNwYXRjaElEcztcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycykpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIExpc3RlbmVycyBhbmQgSURzIGFyZSB0d28gcGFyYWxsZWwgYXJyYXlzIHRoYXQgYXJlIGFsd2F5cyBpbiBzeW5jLlxuICAgICAgaWYgKGRpc3BhdGNoTGlzdGVuZXJzW2ldKGV2ZW50LCBkaXNwYXRjaElEc1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoSURzW2ldO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChkaXNwYXRjaExpc3RlbmVycykge1xuICAgIGlmIChkaXNwYXRjaExpc3RlbmVycyhldmVudCwgZGlzcGF0Y2hJRHMpKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hJRHM7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEBzZWUgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGxcbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZShldmVudCkge1xuICB2YXIgcmV0ID0gZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGwoZXZlbnQpO1xuICBldmVudC5fZGlzcGF0Y2hJRHMgPSBudWxsO1xuICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEV4ZWN1dGlvbiBvZiBhIFwiZGlyZWN0XCIgZGlzcGF0Y2ggLSB0aGVyZSBtdXN0IGJlIGF0IG1vc3Qgb25lIGRpc3BhdGNoXG4gKiBhY2N1bXVsYXRlZCBvbiB0aGUgZXZlbnQgb3IgaXQgaXMgY29uc2lkZXJlZCBhbiBlcnJvci4gSXQgZG9lc24ndCByZWFsbHkgbWFrZVxuICogc2Vuc2UgZm9yIGFuIGV2ZW50IHdpdGggbXVsdGlwbGUgZGlzcGF0Y2hlcyAoYnViYmxlZCkgdG8ga2VlcCB0cmFjayBvZiB0aGVcbiAqIHJldHVybiB2YWx1ZXMgYXQgZWFjaCBkaXNwYXRjaCBleGVjdXRpb24sIGJ1dCBpdCBkb2VzIHRlbmQgdG8gbWFrZSBzZW5zZSB3aGVuXG4gKiBkZWFsaW5nIHdpdGggXCJkaXJlY3RcIiBkaXNwYXRjaGVzLlxuICpcbiAqIEByZXR1cm4gVGhlIHJldHVybiB2YWx1ZSBvZiBleGVjdXRpbmcgdGhlIHNpbmdsZSBkaXNwYXRjaC5cbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpcmVjdERpc3BhdGNoKGV2ZW50KSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gIH1cbiAgdmFyIGRpc3BhdGNoTGlzdGVuZXIgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaElEID0gZXZlbnQuX2Rpc3BhdGNoSURzO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICFBcnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXIpLFxuICAgICdleGVjdXRlRGlyZWN0RGlzcGF0Y2goLi4uKTogSW52YWxpZCBgZXZlbnRgLidcbiAgKSA6IGludmFyaWFudCghQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVyKSkpO1xuICB2YXIgcmVzID0gZGlzcGF0Y2hMaXN0ZW5lciA/XG4gICAgZGlzcGF0Y2hMaXN0ZW5lcihldmVudCwgZGlzcGF0Y2hJRCkgOlxuICAgIG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaElEcyA9IG51bGw7XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnRcbiAqIEByZXR1cm4ge2Jvb2x9IFRydWUgaWZmIG51bWJlciBvZiBkaXNwYXRjaGVzIGFjY3VtdWxhdGVkIGlzIGdyZWF0ZXIgdGhhbiAwLlxuICovXG5mdW5jdGlvbiBoYXNEaXNwYXRjaGVzKGV2ZW50KSB7XG4gIHJldHVybiAhIWV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbn1cblxuLyoqXG4gKiBHZW5lcmFsIHV0aWxpdGllcyB0aGF0IGFyZSB1c2VmdWwgaW4gY3JlYXRpbmcgY3VzdG9tIEV2ZW50IFBsdWdpbnMuXG4gKi9cbnZhciBFdmVudFBsdWdpblV0aWxzID0ge1xuICBpc0VuZGlzaDogaXNFbmRpc2gsXG4gIGlzTW92ZWlzaDogaXNNb3ZlaXNoLFxuICBpc1N0YXJ0aXNoOiBpc1N0YXJ0aXNoLFxuXG4gIGV4ZWN1dGVEaXJlY3REaXNwYXRjaDogZXhlY3V0ZURpcmVjdERpc3BhdGNoLFxuICBleGVjdXRlRGlzcGF0Y2g6IGV4ZWN1dGVEaXNwYXRjaCxcbiAgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyOiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIsXG4gIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWU6IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWUsXG4gIGhhc0Rpc3BhdGNoZXM6IGhhc0Rpc3BhdGNoZXMsXG4gIGluamVjdGlvbjogaW5qZWN0aW9uLFxuICB1c2VUb3VjaEV2ZW50czogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRQbHVnaW5VdGlscztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJYWmxiblJRYkhWbmFXNVZkR2xzY3k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElFVjJaVzUwVUd4MVoybHVWWFJwYkhOY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQkZkbVZ1ZEVOdmJuTjBZVzUwY3lBOUlISmxjWFZwY21Vb1hDSXVMMFYyWlc1MFEyOXVjM1JoYm5SelhDSXBPMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc0dktpcGNiaUFxSUVsdWFtVmpkR1ZrSUdSbGNHVnVaR1Z1WTJsbGN6cGNiaUFxTDF4dVhHNHZLaXBjYmlBcUlDMGdZRTF2ZFc1MFlEb2dXM0psY1hWcGNtVmtYU0JOYjJSMWJHVWdkR2hoZENCallXNGdZMjl1ZG1WeWRDQmlaWFIzWldWdUlGSmxZV04wSUdSdmJTQkpSSE1nWVc1a1hHNGdLaUFnSUdGamRIVmhiQ0J1YjJSbElISmxabVZ5Wlc1alpYTXVYRzRnS2k5Y2JuWmhjaUJwYm1wbFkzUnBiMjRnUFNCN1hHNGdJRTF2ZFc1ME9pQnVkV3hzTEZ4dUlDQnBibXBsWTNSTmIzVnVkRG9nWm5WdVkzUnBiMjRvU1c1cVpXTjBaV1JOYjNWdWRDa2dlMXh1SUNBZ0lHbHVhbVZqZEdsdmJpNU5iM1Z1ZENBOUlFbHVhbVZqZEdWa1RXOTFiblE3WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdTVzVxWldOMFpXUk5iM1Z1ZENBbUppQkpibXBsWTNSbFpFMXZkVzUwTG1kbGRFNXZaR1VzWEc0Z0lDQWdJQ0FnSUNkRmRtVnVkRkJzZFdkcGJsVjBhV3h6TG1sdWFtVmpkR2x2Ymk1cGJtcGxZM1JOYjNWdWRDZ3VMaTRwT2lCSmJtcGxZM1JsWkNCTmIzVnVkQ0J0YjJSMWJHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNkcGN5QnRhWE56YVc1bklHZGxkRTV2WkdVdUoxeHVJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hKYm1wbFkzUmxaRTF2ZFc1MElDWW1JRWx1YW1WamRHVmtUVzkxYm5RdVoyVjBUbTlrWlNrcE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlR0Y2JseHVkbUZ5SUhSdmNFeGxkbVZzVkhsd1pYTWdQU0JGZG1WdWRFTnZibk4wWVc1MGN5NTBiM0JNWlhabGJGUjVjR1Z6TzF4dVhHNW1kVzVqZEdsdmJpQnBjMFZ1WkdsemFDaDBiM0JNWlhabGJGUjVjR1VwSUh0Y2JpQWdjbVYwZFhKdUlIUnZjRXhsZG1Wc1ZIbHdaU0E5UFQwZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCTmIzVnpaVlZ3SUh4OFhHNGdJQ0FnSUNBZ0lDQjBiM0JNWlhabGJGUjVjR1VnUFQwOUlIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1ZHOTFZMmhGYm1RZ2ZIeGNiaUFnSUNBZ0lDQWdJSFJ2Y0V4bGRtVnNWSGx3WlNBOVBUMGdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQlViM1ZqYUVOaGJtTmxiRHRjYm4xY2JseHVablZ1WTNScGIyNGdhWE5OYjNabGFYTm9LSFJ2Y0V4bGRtVnNWSGx3WlNrZ2UxeHVJQ0J5WlhSMWNtNGdkRzl3VEdWMlpXeFVlWEJsSUQwOVBTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFMXZkWE5sVFc5MlpTQjhmRnh1SUNBZ0lDQWdJQ0FnZEc5d1RHVjJaV3hVZVhCbElEMDlQU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRlJ2ZFdOb1RXOTJaVHRjYm4xY2JtWjFibU4wYVc5dUlHbHpVM1JoY25ScGMyZ29kRzl3VEdWMlpXeFVlWEJsS1NCN1hHNGdJSEpsZEhWeWJpQjBiM0JNWlhabGJGUjVjR1VnUFQwOUlIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1RXOTFjMlZFYjNkdUlIeDhYRzRnSUNBZ0lDQWdJQ0IwYjNCTVpYWmxiRlI1Y0dVZ1BUMDlJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdWRzkxWTJoVGRHRnlkRHRjYm4xY2JseHVYRzUyWVhJZ2RtRnNhV1JoZEdWRmRtVnVkRVJwYzNCaGRHTm9aWE03WEc1cFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJSFpoYkdsa1lYUmxSWFpsYm5SRWFYTndZWFJqYUdWeklEMGdablZ1WTNScGIyNG9aWFpsYm5RcElIdGNiaUFnSUNCMllYSWdaR2x6Y0dGMFkyaE1hWE4wWlc1bGNuTWdQU0JsZG1WdWRDNWZaR2x6Y0dGMFkyaE1hWE4wWlc1bGNuTTdYRzRnSUNBZ2RtRnlJR1JwYzNCaGRHTm9TVVJ6SUQwZ1pYWmxiblF1WDJScGMzQmhkR05vU1VSek8xeHVYRzRnSUNBZ2RtRnlJR3hwYzNSbGJtVnljMGx6UVhKeUlEMGdRWEp5WVhrdWFYTkJjbkpoZVNoa2FYTndZWFJqYUV4cGMzUmxibVZ5Y3lrN1hHNGdJQ0FnZG1GeUlHbGtjMGx6UVhKeUlEMGdRWEp5WVhrdWFYTkJjbkpoZVNoa2FYTndZWFJqYUVsRWN5azdYRzRnSUNBZ2RtRnlJRWxFYzB4bGJpQTlJR2xrYzBselFYSnlJRDhnWkdsemNHRjBZMmhKUkhNdWJHVnVaM1JvSURvZ1pHbHpjR0YwWTJoSlJITWdQeUF4SURvZ01EdGNiaUFnSUNCMllYSWdiR2x6ZEdWdVpYSnpUR1Z1SUQwZ2JHbHpkR1Z1WlhKelNYTkJjbklnUDF4dUlDQWdJQ0FnWkdsemNHRjBZMmhNYVhOMFpXNWxjbk11YkdWdVozUm9JRHBjYmlBZ0lDQWdJR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpJRDhnTVNBNklEQTdYRzVjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2FXUnpTWE5CY25JZ1BUMDlJR3hwYzNSbGJtVnljMGx6UVhKeUlDWW1JRWxFYzB4bGJpQTlQVDBnYkdsemRHVnVaWEp6VEdWdUxGeHVJQ0FnSUNBZ0owVjJaVzUwVUd4MVoybHVWWFJwYkhNNklFbHVkbUZzYVdRZ1lHVjJaVzUwWUM0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHBaSE5KYzBGeWNpQTlQVDBnYkdsemRHVnVaWEp6U1hOQmNuSWdKaVlnU1VSelRHVnVJRDA5UFNCc2FYTjBaVzVsY25OTVpXNHBLVHRjYmlBZ2ZUdGNibjFjYmx4dUx5b3FYRzRnS2lCSmJuWnZhMlZ6SUdCallpaGxkbVZ1ZEN3Z2JHbHpkR1Z1WlhJc0lHbGtLV0F1SUVGMmIybGtjeUIxYzJsdVp5QmpZV3hzSUdsbUlHNXZJSE5qYjNCbElHbHpYRzRnS2lCd2NtOTJhV1JsWkM0Z1ZHaGxJR0FvYkdsemRHVnVaWElzYVdRcFlDQndZV2x5SUdWbVptVmpkR2wyWld4NUlHWnZjbTF6SUhSb1pTQmNJbVJwYzNCaGRHTm9YQ0lnWW5WMElHRnlaVnh1SUNvZ2EyVndkQ0J6WlhCaGNtRjBaU0IwYnlCamIyNXpaWEoyWlNCdFpXMXZjbmt1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1p2Y2tWaFkyaEZkbVZ1ZEVScGMzQmhkR05vS0dWMlpXNTBMQ0JqWWlrZ2UxeHVJQ0IyWVhJZ1pHbHpjR0YwWTJoTWFYTjBaVzVsY25NZ1BTQmxkbVZ1ZEM1ZlpHbHpjR0YwWTJoTWFYTjBaVzVsY25NN1hHNGdJSFpoY2lCa2FYTndZWFJqYUVsRWN5QTlJR1YyWlc1MExsOWthWE53WVhSamFFbEVjenRjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUhaaGJHbGtZWFJsUlhabGJuUkVhWE53WVhSamFHVnpLR1YyWlc1MEtUdGNiaUFnZlZ4dUlDQnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaGthWE53WVhSamFFeHBjM1JsYm1WeWN5a3BJSHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9aWFpsYm5RdWFYTlFjbTl3WVdkaGRHbHZibE4wYjNCd1pXUW9LU2tnZTF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJQzh2SUV4cGMzUmxibVZ5Y3lCaGJtUWdTVVJ6SUdGeVpTQjBkMjhnY0dGeVlXeHNaV3dnWVhKeVlYbHpJSFJvWVhRZ1lYSmxJR0ZzZDJGNWN5QnBiaUJ6ZVc1akxseHVJQ0FnSUNBZ1kySW9aWFpsYm5Rc0lHUnBjM0JoZEdOb1RHbHpkR1Z1WlhKelcybGRMQ0JrYVhOd1lYUmphRWxFYzF0cFhTazdYRzRnSUNBZ2ZWeHVJQ0I5SUdWc2MyVWdhV1lnS0dScGMzQmhkR05vVEdsemRHVnVaWEp6S1NCN1hHNGdJQ0FnWTJJb1pYWmxiblFzSUdScGMzQmhkR05vVEdsemRHVnVaWEp6TENCa2FYTndZWFJqYUVsRWN5azdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJFWldaaGRXeDBJR2x0Y0d4bGJXVnVkR0YwYVc5dUlHOW1JRkJzZFdkcGJrMXZaSFZzWlM1bGVHVmpkWFJsUkdsemNHRjBZMmdvS1M1Y2JpQXFJRUJ3WVhKaGJTQjdVM2x1ZEdobGRHbGpSWFpsYm5SOUlGTjViblJvWlhScFkwVjJaVzUwSUhSdklHaGhibVJzWlZ4dUlDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdRWEJ3YkdsallYUnBiMjR0YkdWMlpXd2dZMkZzYkdKaFkydGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JrYjIxSlJDQkVUMDBnYVdRZ2RHOGdjR0Z6Y3lCMGJ5QjBhR1VnWTJGc2JHSmhZMnN1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1Y0WldOMWRHVkVhWE53WVhSamFDaGxkbVZ1ZEN3Z2JHbHpkR1Z1WlhJc0lHUnZiVWxFS1NCN1hHNGdJR1YyWlc1MExtTjFjbkpsYm5SVVlYSm5aWFFnUFNCcGJtcGxZM1JwYjI0dVRXOTFiblF1WjJWMFRtOWtaU2hrYjIxSlJDazdYRzRnSUhaaGNpQnlaWFIxY201V1lXeDFaU0E5SUd4cGMzUmxibVZ5S0dWMlpXNTBMQ0JrYjIxSlJDazdYRzRnSUdWMlpXNTBMbU4xY25KbGJuUlVZWEpuWlhRZ1BTQnVkV3hzTzF4dUlDQnlaWFIxY200Z2NtVjBkWEp1Vm1Gc2RXVTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1UzUmhibVJoY21RdmMybHRjR3hsSUdsMFpYSmhkR2x2YmlCMGFISnZkV2RvSUdGdUlHVjJaVzUwSjNNZ1kyOXNiR1ZqZEdWa0lHUnBjM0JoZEdOb1pYTXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHVjRaV04xZEdWRWFYTndZWFJqYUdWelNXNVBjbVJsY2lobGRtVnVkQ3dnWTJJcElIdGNiaUFnWm05eVJXRmphRVYyWlc1MFJHbHpjR0YwWTJnb1pYWmxiblFzSUdOaUtUdGNiaUFnWlhabGJuUXVYMlJwYzNCaGRHTm9UR2x6ZEdWdVpYSnpJRDBnYm5Wc2JEdGNiaUFnWlhabGJuUXVYMlJwYzNCaGRHTm9TVVJ6SUQwZ2JuVnNiRHRjYm4xY2JseHVMeW9xWEc0Z0tpQlRkR0Z1WkdGeVpDOXphVzF3YkdVZ2FYUmxjbUYwYVc5dUlIUm9jbTkxWjJnZ1lXNGdaWFpsYm5RbmN5QmpiMnhzWldOMFpXUWdaR2x6Y0dGMFkyaGxjeXdnWW5WMElITjBiM0J6WEc0Z0tpQmhkQ0IwYUdVZ1ptbHljM1FnWkdsemNHRjBZMmdnWlhobFkzVjBhVzl1SUhKbGRIVnlibWx1WnlCMGNuVmxMQ0JoYm1RZ2NtVjBkWEp1Y3lCMGFHRjBJR2xrTGx4dUlDcGNiaUFxSUVCeVpYUjFjbTRnYVdRZ2IyWWdkR2hsSUdacGNuTjBJR1JwYzNCaGRHTm9JR1Y0WldOMWRHbHZiaUIzYUc4bmN5QnNhWE4wWlc1bGNpQnlaWFIxY201eklIUnlkV1VzSUc5eVhHNGdLaUJ1ZFd4c0lHbG1JRzV2SUd4cGMzUmxibVZ5SUhKbGRIVnlibVZrSUhSeWRXVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHVjRaV04xZEdWRWFYTndZWFJqYUdWelNXNVBjbVJsY2xOMGIzQkJkRlJ5ZFdWSmJYQnNLR1YyWlc1MEtTQjdYRzRnSUhaaGNpQmthWE53WVhSamFFeHBjM1JsYm1WeWN5QTlJR1YyWlc1MExsOWthWE53WVhSamFFeHBjM1JsYm1WeWN6dGNiaUFnZG1GeUlHUnBjM0JoZEdOb1NVUnpJRDBnWlhabGJuUXVYMlJwYzNCaGRHTm9TVVJ6TzF4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ2RtRnNhV1JoZEdWRmRtVnVkRVJwYzNCaGRHTm9aWE1vWlhabGJuUXBPMXh1SUNCOVhHNGdJR2xtSUNoQmNuSmhlUzVwYzBGeWNtRjVLR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpLU2tnZTF4dUlDQWdJR1p2Y2lBb2RtRnlJR2tnUFNBd095QnBJRHdnWkdsemNHRjBZMmhNYVhOMFpXNWxjbk11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lHbG1JQ2hsZG1WdWRDNXBjMUJ5YjNCaFoyRjBhVzl1VTNSdmNIQmxaQ2dwS1NCN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnTHk4Z1RHbHpkR1Z1WlhKeklHRnVaQ0JKUkhNZ1lYSmxJSFIzYnlCd1lYSmhiR3hsYkNCaGNuSmhlWE1nZEdoaGRDQmhjbVVnWVd4M1lYbHpJR2x1SUhONWJtTXVYRzRnSUNBZ0lDQnBaaUFvWkdsemNHRjBZMmhNYVhOMFpXNWxjbk5iYVYwb1pYWmxiblFzSUdScGMzQmhkR05vU1VSelcybGRLU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWkdsemNHRjBZMmhKUkhOYmFWMDdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5SUdWc2MyVWdhV1lnS0dScGMzQmhkR05vVEdsemRHVnVaWEp6S1NCN1hHNGdJQ0FnYVdZZ0tHUnBjM0JoZEdOb1RHbHpkR1Z1WlhKektHVjJaVzUwTENCa2FYTndZWFJqYUVsRWN5a3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmthWE53WVhSamFFbEVjenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHNTFiR3c3WEc1OVhHNWNiaThxS2x4dUlDb2dRSE5sWlNCbGVHVmpkWFJsUkdsemNHRjBZMmhsYzBsdVQzSmtaWEpUZEc5d1FYUlVjblZsU1cxd2JGeHVJQ292WEc1bWRXNWpkR2x2YmlCbGVHVmpkWFJsUkdsemNHRjBZMmhsYzBsdVQzSmtaWEpUZEc5d1FYUlVjblZsS0dWMlpXNTBLU0I3WEc0Z0lIWmhjaUJ5WlhRZ1BTQmxlR1ZqZFhSbFJHbHpjR0YwWTJobGMwbHVUM0prWlhKVGRHOXdRWFJVY25WbFNXMXdiQ2hsZG1WdWRDazdYRzRnSUdWMlpXNTBMbDlrYVhOd1lYUmphRWxFY3lBOUlHNTFiR3c3WEc0Z0lHVjJaVzUwTGw5a2FYTndZWFJqYUV4cGMzUmxibVZ5Y3lBOUlHNTFiR3c3WEc0Z0lISmxkSFZ5YmlCeVpYUTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1JYaGxZM1YwYVc5dUlHOW1JR0VnWENKa2FYSmxZM1JjSWlCa2FYTndZWFJqYUNBdElIUm9aWEpsSUcxMWMzUWdZbVVnWVhRZ2JXOXpkQ0J2Ym1VZ1pHbHpjR0YwWTJoY2JpQXFJR0ZqWTNWdGRXeGhkR1ZrSUc5dUlIUm9aU0JsZG1WdWRDQnZjaUJwZENCcGN5QmpiMjV6YVdSbGNtVmtJR0Z1SUdWeWNtOXlMaUJKZENCa2IyVnpiaWQwSUhKbFlXeHNlU0J0WVd0bFhHNGdLaUJ6Wlc1elpTQm1iM0lnWVc0Z1pYWmxiblFnZDJsMGFDQnRkV3gwYVhCc1pTQmthWE53WVhSamFHVnpJQ2hpZFdKaWJHVmtLU0IwYnlCclpXVndJSFJ5WVdOcklHOW1JSFJvWlZ4dUlDb2djbVYwZFhKdUlIWmhiSFZsY3lCaGRDQmxZV05vSUdScGMzQmhkR05vSUdWNFpXTjFkR2x2Yml3Z1luVjBJR2wwSUdSdlpYTWdkR1Z1WkNCMGJ5QnRZV3RsSUhObGJuTmxJSGRvWlc1Y2JpQXFJR1JsWVd4cGJtY2dkMmwwYUNCY0ltUnBjbVZqZEZ3aUlHUnBjM0JoZEdOb1pYTXVYRzRnS2x4dUlDb2dRSEpsZEhWeWJpQlVhR1VnY21WMGRYSnVJSFpoYkhWbElHOW1JR1Y0WldOMWRHbHVaeUIwYUdVZ2MybHVaMnhsSUdScGMzQmhkR05vTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJsZUdWamRYUmxSR2x5WldOMFJHbHpjR0YwWTJnb1pYWmxiblFwSUh0Y2JpQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lIWmhiR2xrWVhSbFJYWmxiblJFYVhOd1lYUmphR1Z6S0dWMlpXNTBLVHRjYmlBZ2ZWeHVJQ0IyWVhJZ1pHbHpjR0YwWTJoTWFYTjBaVzVsY2lBOUlHVjJaVzUwTGw5a2FYTndZWFJqYUV4cGMzUmxibVZ5Y3p0Y2JpQWdkbUZ5SUdScGMzQmhkR05vU1VRZ1BTQmxkbVZ1ZEM1ZlpHbHpjR0YwWTJoSlJITTdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJVUZ5Y21GNUxtbHpRWEp5WVhrb1pHbHpjR0YwWTJoTWFYTjBaVzVsY2lrc1hHNGdJQ0FnSjJWNFpXTjFkR1ZFYVhKbFkzUkVhWE53WVhSamFDZ3VMaTRwT2lCSmJuWmhiR2xrSUdCbGRtVnVkR0F1SjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0NGQmNuSmhlUzVwYzBGeWNtRjVLR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSXBLU2s3WEc0Z0lIWmhjaUJ5WlhNZ1BTQmthWE53WVhSamFFeHBjM1JsYm1WeUlEOWNiaUFnSUNCa2FYTndZWFJqYUV4cGMzUmxibVZ5S0dWMlpXNTBMQ0JrYVhOd1lYUmphRWxFS1NBNlhHNGdJQ0FnYm5Wc2JEdGNiaUFnWlhabGJuUXVYMlJwYzNCaGRHTm9UR2x6ZEdWdVpYSnpJRDBnYm5Wc2JEdGNiaUFnWlhabGJuUXVYMlJwYzNCaGRHTm9TVVJ6SUQwZ2JuVnNiRHRjYmlBZ2NtVjBkWEp1SUhKbGN6dGNibjFjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTFONWJuUm9aWFJwWTBWMlpXNTBmU0JsZG1WdWRGeHVJQ29nUUhKbGRIVnliaUI3WW05dmJIMGdWSEoxWlNCcFptWWdiblZ0WW1WeUlHOW1JR1JwYzNCaGRHTm9aWE1nWVdOamRXMTFiR0YwWldRZ2FYTWdaM0psWVhSbGNpQjBhR0Z1SURBdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdoaGMwUnBjM0JoZEdOb1pYTW9aWFpsYm5RcElIdGNiaUFnY21WMGRYSnVJQ0VoWlhabGJuUXVYMlJwYzNCaGRHTm9UR2x6ZEdWdVpYSnpPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZGxibVZ5WVd3Z2RYUnBiR2wwYVdWeklIUm9ZWFFnWVhKbElIVnpaV1oxYkNCcGJpQmpjbVZoZEdsdVp5QmpkWE4wYjIwZ1JYWmxiblFnVUd4MVoybHVjeTVjYmlBcUwxeHVkbUZ5SUVWMlpXNTBVR3gxWjJsdVZYUnBiSE1nUFNCN1hHNGdJR2x6Ulc1a2FYTm9PaUJwYzBWdVpHbHphQ3hjYmlBZ2FYTk5iM1psYVhOb09pQnBjMDF2ZG1WcGMyZ3NYRzRnSUdselUzUmhjblJwYzJnNklHbHpVM1JoY25ScGMyZ3NYRzVjYmlBZ1pYaGxZM1YwWlVScGNtVmpkRVJwYzNCaGRHTm9PaUJsZUdWamRYUmxSR2x5WldOMFJHbHpjR0YwWTJnc1hHNGdJR1Y0WldOMWRHVkVhWE53WVhSamFEb2daWGhsWTNWMFpVUnBjM0JoZEdOb0xGeHVJQ0JsZUdWamRYUmxSR2x6Y0dGMFkyaGxjMGx1VDNKa1pYSTZJR1Y0WldOMWRHVkVhWE53WVhSamFHVnpTVzVQY21SbGNpeGNiaUFnWlhobFkzVjBaVVJwYzNCaGRHTm9aWE5KYms5eVpHVnlVM1J2Y0VGMFZISjFaVG9nWlhobFkzVjBaVVJwYzNCaGRHTm9aWE5KYms5eVpHVnlVM1J2Y0VGMFZISjFaU3hjYmlBZ2FHRnpSR2x6Y0dGMFkyaGxjem9nYUdGelJHbHpjR0YwWTJobGN5eGNiaUFnYVc1cVpXTjBhVzl1T2lCcGJtcGxZM1JwYjI0c1hHNGdJSFZ6WlZSdmRXTm9SWFpsYm5Sek9pQm1ZV3h6WlZ4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JGZG1WdWRGQnNkV2RwYmxWMGFXeHpPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRQcm9wYWdhdG9yc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpbkh1YlwiKTtcblxudmFyIGFjY3VtdWxhdGVJbnRvID0gcmVxdWlyZShcIi4vYWNjdW11bGF0ZUludG9cIik7XG52YXIgZm9yRWFjaEFjY3VtdWxhdGVkID0gcmVxdWlyZShcIi4vZm9yRWFjaEFjY3VtdWxhdGVkXCIpO1xuXG52YXIgUHJvcGFnYXRpb25QaGFzZXMgPSBFdmVudENvbnN0YW50cy5Qcm9wYWdhdGlvblBoYXNlcztcbnZhciBnZXRMaXN0ZW5lciA9IEV2ZW50UGx1Z2luSHViLmdldExpc3RlbmVyO1xuXG4vKipcbiAqIFNvbWUgZXZlbnQgdHlwZXMgaGF2ZSBhIG5vdGlvbiBvZiBkaWZmZXJlbnQgcmVnaXN0cmF0aW9uIG5hbWVzIGZvciBkaWZmZXJlbnRcbiAqIFwicGhhc2VzXCIgb2YgcHJvcGFnYXRpb24uIFRoaXMgZmluZHMgbGlzdGVuZXJzIGJ5IGEgZ2l2ZW4gcGhhc2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RlbmVyQXRQaGFzZShpZCwgZXZlbnQsIHByb3BhZ2F0aW9uUGhhc2UpIHtcbiAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPVxuICAgIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3Byb3BhZ2F0aW9uUGhhc2VdO1xuICByZXR1cm4gZ2V0TGlzdGVuZXIoaWQsIHJlZ2lzdHJhdGlvbk5hbWUpO1xufVxuXG4vKipcbiAqIFRhZ3MgYSBgU3ludGhldGljRXZlbnRgIHdpdGggZGlzcGF0Y2hlZCBsaXN0ZW5lcnMuIENyZWF0aW5nIHRoaXMgZnVuY3Rpb25cbiAqIGhlcmUsIGFsbG93cyB1cyB0byBub3QgaGF2ZSB0byBiaW5kIG9yIGNyZWF0ZSBmdW5jdGlvbnMgZm9yIGVhY2ggZXZlbnQuXG4gKiBNdXRhdGluZyB0aGUgZXZlbnQncyBtZW1iZXJzIGFsbG93cyB1cyB0byBub3QgaGF2ZSB0byBjcmVhdGUgYSB3cmFwcGluZ1xuICogXCJkaXNwYXRjaFwiIG9iamVjdCB0aGF0IHBhaXJzIHRoZSBldmVudCB3aXRoIHRoZSBsaXN0ZW5lci5cbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyhkb21JRCwgdXB3YXJkcywgZXZlbnQpIHtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIGlmICghZG9tSUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzcGF0Y2hpbmcgaWQgbXVzdCBub3QgYmUgbnVsbCcpO1xuICAgIH1cbiAgfVxuICB2YXIgcGhhc2UgPSB1cHdhcmRzID8gUHJvcGFnYXRpb25QaGFzZXMuYnViYmxlZCA6IFByb3BhZ2F0aW9uUGhhc2VzLmNhcHR1cmVkO1xuICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lckF0UGhhc2UoZG9tSUQsIGV2ZW50LCBwaGFzZSk7XG4gIGlmIChsaXN0ZW5lcikge1xuICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9XG4gICAgICBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgICBldmVudC5fZGlzcGF0Y2hJRHMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hJRHMsIGRvbUlEKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgZGlzcGF0Y2hlcyAobXVzdCBiZSBlbnRpcmVseSBjb2xsZWN0ZWQgYmVmb3JlIGRpc3BhdGNoaW5nIC0gc2VlIHVuaXRcbiAqIHRlc3RzKS4gTGF6aWx5IGFsbG9jYXRlIHRoZSBhcnJheSB0byBjb25zZXJ2ZSBtZW1vcnkuICBXZSBtdXN0IGxvb3AgdGhyb3VnaFxuICogZWFjaCBldmVudCBhbmQgcGVyZm9ybSB0aGUgdHJhdmVyc2FsIGZvciBlYWNoIG9uZS4gV2UgY2FuIG5vdCBwZXJmb3JtIGFcbiAqIHNpbmdsZSB0cmF2ZXJzYWwgZm9yIHRoZSBlbnRpcmUgY29sbGVjdGlvbiBvZiBldmVudHMgYmVjYXVzZSBlYWNoIGV2ZW50IG1heVxuICogaGF2ZSBhIGRpZmZlcmVudCB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgRXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmdldEluc3RhbmNlSGFuZGxlKCkudHJhdmVyc2VUd29QaGFzZShcbiAgICAgIGV2ZW50LmRpc3BhdGNoTWFya2VyLFxuICAgICAgYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyxcbiAgICAgIGV2ZW50XG4gICAgKTtcbiAgfVxufVxuXG5cbi8qKlxuICogQWNjdW11bGF0ZXMgd2l0aG91dCByZWdhcmQgdG8gZGlyZWN0aW9uLCBkb2VzIG5vdCBsb29rIGZvciBwaGFzZWRcbiAqIHJlZ2lzdHJhdGlvbiBuYW1lcy4gU2FtZSBhcyBgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGVgIGJ1dCB3aXRob3V0XG4gKiByZXF1aXJpbmcgdGhhdCB0aGUgYGRpc3BhdGNoTWFya2VyYCBiZSB0aGUgc2FtZSBhcyB0aGUgZGlzcGF0Y2hlZCBJRC5cbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZURpc3BhdGNoZXMoaWQsIGlnbm9yZWREaXJlY3Rpb24sIGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lO1xuICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGlkLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICBpZiAobGlzdGVuZXIpIHtcbiAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9XG4gICAgICAgIGFjY3VtdWxhdGVJbnRvKGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycywgbGlzdGVuZXIpO1xuICAgICAgZXZlbnQuX2Rpc3BhdGNoSURzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoSURzLCBpZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjdW11bGF0ZXMgZGlzcGF0Y2hlcyBvbiBhbiBgU3ludGhldGljRXZlbnRgLCBidXQgb25seSBmb3IgdGhlXG4gKiBgZGlzcGF0Y2hNYXJrZXJgLlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICBhY2N1bXVsYXRlRGlzcGF0Y2hlcyhldmVudC5kaXNwYXRjaE1hcmtlciwgbnVsbCwgZXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnRzKSB7XG4gIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUpO1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXMobGVhdmUsIGVudGVyLCBmcm9tSUQsIHRvSUQpIHtcbiAgRXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmdldEluc3RhbmNlSGFuZGxlKCkudHJhdmVyc2VFbnRlckxlYXZlKFxuICAgIGZyb21JRCxcbiAgICB0b0lELFxuICAgIGFjY3VtdWxhdGVEaXNwYXRjaGVzLFxuICAgIGxlYXZlLFxuICAgIGVudGVyXG4gICk7XG59XG5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMoZXZlbnRzKSB7XG4gIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlKTtcbn1cblxuXG5cbi8qKlxuICogQSBzbWFsbCBzZXQgb2YgcHJvcGFnYXRpb24gcGF0dGVybnMsIGVhY2ggb2Ygd2hpY2ggd2lsbCBhY2NlcHQgYSBzbWFsbCBhbW91bnRcbiAqIG9mIGluZm9ybWF0aW9uLCBhbmQgZ2VuZXJhdGUgYSBzZXQgb2YgXCJkaXNwYXRjaCByZWFkeSBldmVudCBvYmplY3RzXCIgLSB3aGljaFxuICogYXJlIHNldHMgb2YgZXZlbnRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYW5ub3RhdGVkIHdpdGggYSBzZXQgb2YgZGlzcGF0Y2hlZFxuICogbGlzdGVuZXIgZnVuY3Rpb25zL2lkcy4gVGhlIEFQSSBpcyBkZXNpZ25lZCB0aGlzIHdheSB0byBkaXNjb3VyYWdlIHRoZXNlXG4gKiBwcm9wYWdhdGlvbiBzdHJhdGVnaWVzIGZyb20gYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBkaXNwYXRjaGVzLCBzaW5jZSB3ZVxuICogYWx3YXlzIHdhbnQgdG8gY29sbGVjdCB0aGUgZW50aXJlIHNldCBvZiBkaXNwYXRjaGVzIGJlZm9yZSBleGVjdXRpbmcgZXZlbnQgYVxuICogc2luZ2xlIG9uZS5cbiAqXG4gKiBAY29uc3RydWN0b3IgRXZlbnRQcm9wYWdhdG9yc1xuICovXG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHtcbiAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlczogYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyxcbiAgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXM6IGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzLFxuICBhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXM6IGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFByb3BhZ2F0b3JzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UlhabGJuUlFjbTl3WVdkaGRHOXljeTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRmRtVnVkRkJ5YjNCaFoyRjBiM0p6WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1JYWmxiblJEYjI1emRHRnVkSE1nUFNCeVpYRjFhWEpsS0Z3aUxpOUZkbVZ1ZEVOdmJuTjBZVzUwYzF3aUtUdGNiblpoY2lCRmRtVnVkRkJzZFdkcGJraDFZaUE5SUhKbGNYVnBjbVVvWENJdUwwVjJaVzUwVUd4MVoybHVTSFZpWENJcE8xeHVYRzUyWVhJZ1lXTmpkVzExYkdGMFpVbHVkRzhnUFNCeVpYRjFhWEpsS0Z3aUxpOWhZMk4xYlhWc1lYUmxTVzUwYjF3aUtUdGNiblpoY2lCbWIzSkZZV05vUVdOamRXMTFiR0YwWldRZ1BTQnlaWEYxYVhKbEtGd2lMaTltYjNKRllXTm9RV05qZFcxMWJHRjBaV1JjSWlrN1hHNWNiblpoY2lCUWNtOXdZV2RoZEdsdmJsQm9ZWE5sY3lBOUlFVjJaVzUwUTI5dWMzUmhiblJ6TGxCeWIzQmhaMkYwYVc5dVVHaGhjMlZ6TzF4dWRtRnlJR2RsZEV4cGMzUmxibVZ5SUQwZ1JYWmxiblJRYkhWbmFXNUlkV0l1WjJWMFRHbHpkR1Z1WlhJN1hHNWNiaThxS2x4dUlDb2dVMjl0WlNCbGRtVnVkQ0IwZVhCbGN5Qm9ZWFpsSUdFZ2JtOTBhVzl1SUc5bUlHUnBabVpsY21WdWRDQnlaV2RwYzNSeVlYUnBiMjRnYm1GdFpYTWdabTl5SUdScFptWmxjbVZ1ZEZ4dUlDb2dYQ0p3YUdGelpYTmNJaUJ2WmlCd2NtOXdZV2RoZEdsdmJpNGdWR2hwY3lCbWFXNWtjeUJzYVhOMFpXNWxjbk1nWW5rZ1lTQm5hWFpsYmlCd2FHRnpaUzVjYmlBcUwxeHVablZ1WTNScGIyNGdiR2x6ZEdWdVpYSkJkRkJvWVhObEtHbGtMQ0JsZG1WdWRDd2djSEp2Y0dGbllYUnBiMjVRYUdGelpTa2dlMXh1SUNCMllYSWdjbVZuYVhOMGNtRjBhVzl1VG1GdFpTQTlYRzRnSUNBZ1pYWmxiblF1WkdsemNHRjBZMmhEYjI1bWFXY3VjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhOYmNISnZjR0ZuWVhScGIyNVFhR0Z6WlYwN1hHNGdJSEpsZEhWeWJpQm5aWFJNYVhOMFpXNWxjaWhwWkN3Z2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNrN1hHNTlYRzVjYmk4cUtseHVJQ29nVkdGbmN5QmhJR0JUZVc1MGFHVjBhV05GZG1WdWRHQWdkMmwwYUNCa2FYTndZWFJqYUdWa0lHeHBjM1JsYm1WeWN5NGdRM0psWVhScGJtY2dkR2hwY3lCbWRXNWpkR2x2Ymx4dUlDb2dhR1Z5WlN3Z1lXeHNiM2R6SUhWeklIUnZJRzV2ZENCb1lYWmxJSFJ2SUdKcGJtUWdiM0lnWTNKbFlYUmxJR1oxYm1OMGFXOXVjeUJtYjNJZ1pXRmphQ0JsZG1WdWRDNWNiaUFxSUUxMWRHRjBhVzVuSUhSb1pTQmxkbVZ1ZENkeklHMWxiV0psY25NZ1lXeHNiM2R6SUhWeklIUnZJRzV2ZENCb1lYWmxJSFJ2SUdOeVpXRjBaU0JoSUhkeVlYQndhVzVuWEc0Z0tpQmNJbVJwYzNCaGRHTm9YQ0lnYjJKcVpXTjBJSFJvWVhRZ2NHRnBjbk1nZEdobElHVjJaVzUwSUhkcGRHZ2dkR2hsSUd4cGMzUmxibVZ5TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJoWTJOMWJYVnNZWFJsUkdseVpXTjBhVzl1WVd4RWFYTndZWFJqYUdWektHUnZiVWxFTENCMWNIZGhjbVJ6TENCbGRtVnVkQ2tnZTF4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ2FXWWdLQ0ZrYjIxSlJDa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEVhWE53WVhSamFHbHVaeUJwWkNCdGRYTjBJRzV2ZENCaVpTQnVkV3hzSnlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhaaGNpQndhR0Z6WlNBOUlIVndkMkZ5WkhNZ1B5QlFjbTl3WVdkaGRHbHZibEJvWVhObGN5NWlkV0ppYkdWa0lEb2dVSEp2Y0dGbllYUnBiMjVRYUdGelpYTXVZMkZ3ZEhWeVpXUTdYRzRnSUhaaGNpQnNhWE4wWlc1bGNpQTlJR3hwYzNSbGJtVnlRWFJRYUdGelpTaGtiMjFKUkN3Z1pYWmxiblFzSUhCb1lYTmxLVHRjYmlBZ2FXWWdLR3hwYzNSbGJtVnlLU0I3WEc0Z0lDQWdaWFpsYm5RdVgyUnBjM0JoZEdOb1RHbHpkR1Z1WlhKeklEMWNiaUFnSUNBZ0lHRmpZM1Z0ZFd4aGRHVkpiblJ2S0dWMlpXNTBMbDlrYVhOd1lYUmphRXhwYzNSbGJtVnljeXdnYkdsemRHVnVaWElwTzF4dUlDQWdJR1YyWlc1MExsOWthWE53WVhSamFFbEVjeUE5SUdGalkzVnRkV3hoZEdWSmJuUnZLR1YyWlc1MExsOWthWE53WVhSamFFbEVjeXdnWkc5dFNVUXBPMXh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nUTI5c2JHVmpkQ0JrYVhOd1lYUmphR1Z6SUNodGRYTjBJR0psSUdWdWRHbHlaV3g1SUdOdmJHeGxZM1JsWkNCaVpXWnZjbVVnWkdsemNHRjBZMmhwYm1jZ0xTQnpaV1VnZFc1cGRGeHVJQ29nZEdWemRITXBMaUJNWVhwcGJIa2dZV3hzYjJOaGRHVWdkR2hsSUdGeWNtRjVJSFJ2SUdOdmJuTmxjblpsSUcxbGJXOXllUzRnSUZkbElHMTFjM1FnYkc5dmNDQjBhSEp2ZFdkb1hHNGdLaUJsWVdOb0lHVjJaVzUwSUdGdVpDQndaWEptYjNKdElIUm9aU0IwY21GMlpYSnpZV3dnWm05eUlHVmhZMmdnYjI1bExpQlhaU0JqWVc0Z2JtOTBJSEJsY21admNtMGdZVnh1SUNvZ2MybHVaMnhsSUhSeVlYWmxjbk5oYkNCbWIzSWdkR2hsSUdWdWRHbHlaU0JqYjJ4c1pXTjBhVzl1SUc5bUlHVjJaVzUwY3lCaVpXTmhkWE5sSUdWaFkyZ2daWFpsYm5RZ2JXRjVYRzRnS2lCb1lYWmxJR0VnWkdsbVptVnlaVzUwSUhSaGNtZGxkQzVjYmlBcUwxeHVablZ1WTNScGIyNGdZV05qZFcxMWJHRjBaVlIzYjFCb1lYTmxSR2x6Y0dGMFkyaGxjMU5wYm1kc1pTaGxkbVZ1ZENrZ2UxeHVJQ0JwWmlBb1pYWmxiblFnSmlZZ1pYWmxiblF1WkdsemNHRjBZMmhEYjI1bWFXY3VjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNcElIdGNiaUFnSUNCRmRtVnVkRkJzZFdkcGJraDFZaTVwYm1wbFkzUnBiMjR1WjJWMFNXNXpkR0Z1WTJWSVlXNWtiR1VvS1M1MGNtRjJaWEp6WlZSM2IxQm9ZWE5sS0Z4dUlDQWdJQ0FnWlhabGJuUXVaR2x6Y0dGMFkyaE5ZWEpyWlhJc1hHNGdJQ0FnSUNCaFkyTjFiWFZzWVhSbFJHbHlaV04wYVc5dVlXeEVhWE53WVhSamFHVnpMRnh1SUNBZ0lDQWdaWFpsYm5SY2JpQWdJQ0FwTzF4dUlDQjlYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkJZMk4xYlhWc1lYUmxjeUIzYVhSb2IzVjBJSEpsWjJGeVpDQjBieUJrYVhKbFkzUnBiMjRzSUdSdlpYTWdibTkwSUd4dmIyc2dabTl5SUhCb1lYTmxaRnh1SUNvZ2NtVm5hWE4wY21GMGFXOXVJRzVoYldWekxpQlRZVzFsSUdGeklHQmhZMk4xYlhWc1lYUmxSR2x5WldOMFJHbHpjR0YwWTJobGMxTnBibWRzWldBZ1luVjBJSGRwZEdodmRYUmNiaUFxSUhKbGNYVnBjbWx1WnlCMGFHRjBJSFJvWlNCZ1pHbHpjR0YwWTJoTllYSnJaWEpnSUdKbElIUm9aU0J6WVcxbElHRnpJSFJvWlNCa2FYTndZWFJqYUdWa0lFbEVMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQmhZMk4xYlhWc1lYUmxSR2x6Y0dGMFkyaGxjeWhwWkN3Z2FXZHViM0psWkVScGNtVmpkR2x2Yml3Z1pYWmxiblFwSUh0Y2JpQWdhV1lnS0dWMlpXNTBJQ1ltSUdWMlpXNTBMbVJwYzNCaGRHTm9RMjl1Wm1sbkxuSmxaMmx6ZEhKaGRHbHZiazVoYldVcElIdGNiaUFnSUNCMllYSWdjbVZuYVhOMGNtRjBhVzl1VG1GdFpTQTlJR1YyWlc1MExtUnBjM0JoZEdOb1EyOXVabWxuTG5KbFoybHpkSEpoZEdsdmJrNWhiV1U3WEc0Z0lDQWdkbUZ5SUd4cGMzUmxibVZ5SUQwZ1oyVjBUR2x6ZEdWdVpYSW9hV1FzSUhKbFoybHpkSEpoZEdsdmJrNWhiV1VwTzF4dUlDQWdJR2xtSUNoc2FYTjBaVzVsY2lrZ2UxeHVJQ0FnSUNBZ1pYWmxiblF1WDJScGMzQmhkR05vVEdsemRHVnVaWEp6SUQxY2JpQWdJQ0FnSUNBZ1lXTmpkVzExYkdGMFpVbHVkRzhvWlhabGJuUXVYMlJwYzNCaGRHTm9UR2x6ZEdWdVpYSnpMQ0JzYVhOMFpXNWxjaWs3WEc0Z0lDQWdJQ0JsZG1WdWRDNWZaR2x6Y0dGMFkyaEpSSE1nUFNCaFkyTjFiWFZzWVhSbFNXNTBieWhsZG1WdWRDNWZaR2x6Y0dGMFkyaEpSSE1zSUdsa0tUdGNiaUFnSUNCOVhHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkJZMk4xYlhWc1lYUmxjeUJrYVhOd1lYUmphR1Z6SUc5dUlHRnVJR0JUZVc1MGFHVjBhV05GZG1WdWRHQXNJR0oxZENCdmJteDVJR1p2Y2lCMGFHVmNiaUFxSUdCa2FYTndZWFJqYUUxaGNtdGxjbUF1WEc0Z0tpQkFjR0Z5WVcwZ2UxTjViblJvWlhScFkwVjJaVzUwZlNCbGRtVnVkRnh1SUNvdlhHNW1kVzVqZEdsdmJpQmhZMk4xYlhWc1lYUmxSR2x5WldOMFJHbHpjR0YwWTJobGMxTnBibWRzWlNobGRtVnVkQ2tnZTF4dUlDQnBaaUFvWlhabGJuUWdKaVlnWlhabGJuUXVaR2x6Y0dGMFkyaERiMjVtYVdjdWNtVm5hWE4wY21GMGFXOXVUbUZ0WlNrZ2UxeHVJQ0FnSUdGalkzVnRkV3hoZEdWRWFYTndZWFJqYUdWektHVjJaVzUwTG1ScGMzQmhkR05vVFdGeWEyVnlMQ0J1ZFd4c0xDQmxkbVZ1ZENrN1hHNGdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdZV05qZFcxMWJHRjBaVlIzYjFCb1lYTmxSR2x6Y0dGMFkyaGxjeWhsZG1WdWRITXBJSHRjYmlBZ1ptOXlSV0ZqYUVGalkzVnRkV3hoZEdWa0tHVjJaVzUwY3l3Z1lXTmpkVzExYkdGMFpWUjNiMUJvWVhObFJHbHpjR0YwWTJobGMxTnBibWRzWlNrN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdGalkzVnRkV3hoZEdWRmJuUmxja3hsWVhabFJHbHpjR0YwWTJobGN5aHNaV0YyWlN3Z1pXNTBaWElzSUdaeWIyMUpSQ3dnZEc5SlJDa2dlMXh1SUNCRmRtVnVkRkJzZFdkcGJraDFZaTVwYm1wbFkzUnBiMjR1WjJWMFNXNXpkR0Z1WTJWSVlXNWtiR1VvS1M1MGNtRjJaWEp6WlVWdWRHVnlUR1ZoZG1Vb1hHNGdJQ0FnWm5KdmJVbEVMRnh1SUNBZ0lIUnZTVVFzWEc0Z0lDQWdZV05qZFcxMWJHRjBaVVJwYzNCaGRHTm9aWE1zWEc0Z0lDQWdiR1ZoZG1Vc1hHNGdJQ0FnWlc1MFpYSmNiaUFnS1R0Y2JuMWNibHh1WEc1bWRXNWpkR2x2YmlCaFkyTjFiWFZzWVhSbFJHbHlaV04wUkdsemNHRjBZMmhsY3lobGRtVnVkSE1wSUh0Y2JpQWdabTl5UldGamFFRmpZM1Z0ZFd4aGRHVmtLR1YyWlc1MGN5d2dZV05qZFcxMWJHRjBaVVJwY21WamRFUnBjM0JoZEdOb1pYTlRhVzVuYkdVcE8xeHVmVnh1WEc1Y2JseHVMeW9xWEc0Z0tpQkJJSE50WVd4c0lITmxkQ0J2WmlCd2NtOXdZV2RoZEdsdmJpQndZWFIwWlhKdWN5d2daV0ZqYUNCdlppQjNhR2xqYUNCM2FXeHNJR0ZqWTJWd2RDQmhJSE50WVd4c0lHRnRiM1Z1ZEZ4dUlDb2diMllnYVc1bWIzSnRZWFJwYjI0c0lHRnVaQ0JuWlc1bGNtRjBaU0JoSUhObGRDQnZaaUJjSW1ScGMzQmhkR05vSUhKbFlXUjVJR1YyWlc1MElHOWlhbVZqZEhOY0lpQXRJSGRvYVdOb1hHNGdLaUJoY21VZ2MyVjBjeUJ2WmlCbGRtVnVkSE1nZEdoaGRDQm9ZWFpsSUdGc2NtVmhaSGtnWW1WbGJpQmhibTV2ZEdGMFpXUWdkMmwwYUNCaElITmxkQ0J2WmlCa2FYTndZWFJqYUdWa1hHNGdLaUJzYVhOMFpXNWxjaUJtZFc1amRHbHZibk12YVdSekxpQlVhR1VnUVZCSklHbHpJR1JsYzJsbmJtVmtJSFJvYVhNZ2QyRjVJSFJ2SUdScGMyTnZkWEpoWjJVZ2RHaGxjMlZjYmlBcUlIQnliM0JoWjJGMGFXOXVJSE4wY21GMFpXZHBaWE1nWm5KdmJTQmhZM1IxWVd4c2VTQmxlR1ZqZFhScGJtY2dkR2hsSUdScGMzQmhkR05vWlhNc0lITnBibU5sSUhkbFhHNGdLaUJoYkhkaGVYTWdkMkZ1ZENCMGJ5QmpiMnhzWldOMElIUm9aU0JsYm5ScGNtVWdjMlYwSUc5bUlHUnBjM0JoZEdOb1pYTWdZbVZtYjNKbElHVjRaV04xZEdsdVp5QmxkbVZ1ZENCaFhHNGdLaUJ6YVc1bmJHVWdiMjVsTGx4dUlDcGNiaUFxSUVCamIyNXpkSEoxWTNSdmNpQkZkbVZ1ZEZCeWIzQmhaMkYwYjNKelhHNGdLaTljYm5aaGNpQkZkbVZ1ZEZCeWIzQmhaMkYwYjNKeklEMGdlMXh1SUNCaFkyTjFiWFZzWVhSbFZIZHZVR2hoYzJWRWFYTndZWFJqYUdWek9pQmhZMk4xYlhWc1lYUmxWSGR2VUdoaGMyVkVhWE53WVhSamFHVnpMRnh1SUNCaFkyTjFiWFZzWVhSbFJHbHlaV04wUkdsemNHRjBZMmhsY3pvZ1lXTmpkVzExYkdGMFpVUnBjbVZqZEVScGMzQmhkR05vWlhNc1hHNGdJR0ZqWTNWdGRXeGhkR1ZGYm5SbGNreGxZWFpsUkdsemNHRjBZMmhsY3pvZ1lXTmpkVzExYkdGMFpVVnVkR1Z5VEdWaGRtVkVhWE53WVhSamFHVnpYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlFVjJaVzUwVUhKdmNHRm5ZWFJ2Y25NN1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV4ZWN1dGlvbkVudmlyb25tZW50XG4gKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGNhblVzZURPTSA9ICEhKFxuICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KVxuKTtcblxuLyoqXG4gKiBTaW1wbGUsIGxpZ2h0d2VpZ2h0IG1vZHVsZSBhc3Npc3Rpbmcgd2l0aCB0aGUgZGV0ZWN0aW9uIGFuZCBjb250ZXh0IG9mXG4gKiBXb3JrZXIuIEhlbHBzIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgYWxsb3dzIGNvZGUgdG8gcmVhc29uIGFib3V0XG4gKiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBpbiBhIFdvcmtlciwgZXZlbiBpZiB0aGV5IG5ldmVyIGluY2x1ZGUgdGhlIG1haW5cbiAqIGBSZWFjdFdvcmtlcmAgZGVwZW5kZW5jeS5cbiAqL1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0ge1xuXG4gIGNhblVzZURPTTogY2FuVXNlRE9NLFxuXG4gIGNhblVzZVdvcmtlcnM6IHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnLFxuXG4gIGNhblVzZUV2ZW50TGlzdGVuZXJzOlxuICAgIGNhblVzZURPTSAmJiAhISh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciB8fCB3aW5kb3cuYXR0YWNoRXZlbnQpLFxuXG4gIGNhblVzZVZpZXdwb3J0OiBjYW5Vc2VET00gJiYgISF3aW5kb3cuc2NyZWVuLFxuXG4gIGlzSW5Xb3JrZXI6ICFjYW5Vc2VET00gLy8gRm9yIG5vdywgdGhpcyBpcyB0cnVlIC0gbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXhlY3V0aW9uRW52aXJvbm1lbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGdldFRleHRDb250ZW50QWNjZXNzb3IgPSByZXF1aXJlKFwiLi9nZXRUZXh0Q29udGVudEFjY2Vzc29yXCIpO1xuXG4vKipcbiAqIFRoaXMgaGVscGVyIGNsYXNzIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQgb2YgYSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hlcmUgc2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMgdGV4dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0aGVcbiAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmluZyBjb21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJlcGxhY2VtZW50LlxuICpcbiAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHJvb3RcbiAqL1xuZnVuY3Rpb24gRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlKHJvb3QpIHtcbiAgdGhpcy5fcm9vdCA9IHJvb3Q7XG4gIHRoaXMuX3N0YXJ0VGV4dCA9IHRoaXMuZ2V0VGV4dCgpO1xuICB0aGlzLl9mYWxsYmFja1RleHQgPSBudWxsO1xufVxuXG5hc3NpZ24oRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlLnByb3RvdHlwZSwge1xuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdGV4dCBvZiBpbnB1dC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0VGV4dDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCd2YWx1ZScgaW4gdGhpcy5fcm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yb290W2dldFRleHRDb250ZW50QWNjZXNzb3IoKV07XG4gIH0sXG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgZGlmZmVyaW5nIHN1YnN0cmluZyBiZXR3ZWVuIHRoZSBpbml0aWFsbHkgc3RvcmVkXG4gICAqIHRleHQgY29udGVudCBhbmQgdGhlIGN1cnJlbnQgY29udGVudC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0RGF0YTogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2ZhbGxiYWNrVGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZhbGxiYWNrVGV4dDtcbiAgICB9XG5cbiAgICB2YXIgc3RhcnQ7XG4gICAgdmFyIHN0YXJ0VmFsdWUgPSB0aGlzLl9zdGFydFRleHQ7XG4gICAgdmFyIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGg7XG4gICAgdmFyIGVuZDtcbiAgICB2YXIgZW5kVmFsdWUgPSB0aGlzLmdldFRleHQoKTtcbiAgICB2YXIgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuXG4gICAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgc3RhcnRMZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0XSAhPT0gZW5kVmFsdWVbc3RhcnRdKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtaW5FbmQgPSBzdGFydExlbmd0aCAtIHN0YXJ0O1xuICAgIGZvciAoZW5kID0gMTsgZW5kIDw9IG1pbkVuZDsgZW5kKyspIHtcbiAgICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0TGVuZ3RoIC0gZW5kXSAhPT0gZW5kVmFsdWVbZW5kTGVuZ3RoIC0gZW5kXSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2xpY2VUYWlsID0gZW5kID4gMSA/IDEgLSBlbmQgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZmFsbGJhY2tUZXh0ID0gZW5kVmFsdWUuc2xpY2Uoc3RhcnQsIHNsaWNlVGFpbCk7XG4gICAgcmV0dXJuIHRoaXMuX2ZhbGxiYWNrVGV4dDtcbiAgfVxufSk7XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBIVE1MRE9NUHJvcGVydHlDb25maWdcbiAqL1xuXG4vKmpzbGludCBiaXR3aXNlOiB0cnVlKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgTVVTVF9VU0VfQVRUUklCVVRFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLk1VU1RfVVNFX0FUVFJJQlVURTtcbnZhciBNVVNUX1VTRV9QUk9QRVJUWSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWTtcbnZhciBIQVNfQk9PTEVBTl9WQUxVRSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfQk9PTEVBTl9WQUxVRTtcbnZhciBIQVNfU0lERV9FRkZFQ1RTID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19TSURFX0VGRkVDVFM7XG52YXIgSEFTX05VTUVSSUNfVkFMVUUgPSBET01Qcm9wZXJ0eS5pbmplY3Rpb24uSEFTX05VTUVSSUNfVkFMVUU7XG52YXIgSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUgPVxuICBET01Qcm9wZXJ0eS5pbmplY3Rpb24uSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUU7XG52YXIgSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSA9XG4gIERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFO1xuXG52YXIgaGFzU1ZHO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICB2YXIgaW1wbGVtZW50YXRpb24gPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbjtcbiAgaGFzU1ZHID0gKFxuICAgIGltcGxlbWVudGF0aW9uICYmXG4gICAgaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSAmJlxuICAgIGltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoXG4gICAgICAnaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZScsXG4gICAgICAnMS4xJ1xuICAgIClcbiAgKTtcbn1cblxuXG52YXIgSFRNTERPTVByb3BlcnR5Q29uZmlnID0ge1xuICBpc0N1c3RvbUF0dHJpYnV0ZTogUmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQoXG4gICAgL14oZGF0YXxhcmlhKS1bYS16X11bYS16XFxkXy5cXC1dKiQvXG4gICksXG4gIFByb3BlcnRpZXM6IHtcbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBQcm9wZXJ0aWVzXG4gICAgICovXG4gICAgYWNjZXB0OiBudWxsLFxuICAgIGFjY2VwdENoYXJzZXQ6IG51bGwsXG4gICAgYWNjZXNzS2V5OiBudWxsLFxuICAgIGFjdGlvbjogbnVsbCxcbiAgICBhbGxvd0Z1bGxTY3JlZW46IE1VU1RfVVNFX0FUVFJJQlVURSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGFsbG93VHJhbnNwYXJlbmN5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgYWx0OiBudWxsLFxuICAgIGFzeW5jOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBhdXRvQ29tcGxldGU6IG51bGwsXG4gICAgLy8gYXV0b0ZvY3VzIGlzIHBvbHlmaWxsZWQvbm9ybWFsaXplZCBieSBBdXRvRm9jdXNNaXhpblxuICAgIC8vIGF1dG9Gb2N1czogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgYXV0b1BsYXk6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGNlbGxQYWRkaW5nOiBudWxsLFxuICAgIGNlbGxTcGFjaW5nOiBudWxsLFxuICAgIGNoYXJTZXQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBjaGVja2VkOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGNsYXNzSUQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICAvLyBUbyBzZXQgY2xhc3NOYW1lIG9uIFNWRyBlbGVtZW50cywgaXQncyBuZWNlc3NhcnkgdG8gdXNlIC5zZXRBdHRyaWJ1dGU7XG4gICAgLy8gdGhpcyB3b3JrcyBvbiBIVE1MIGVsZW1lbnRzIHRvbyBpbiBhbGwgYnJvd3NlcnMgZXhjZXB0IElFOC4gQ29udmVuaWVudGx5LFxuICAgIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgU1ZHIGFuZCBzbyB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUgYXR0cmlidXRlIGluXG4gICAgLy8gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IFNWRyBhbmQgdGhlIHByb3BlcnR5IGluIGJyb3dzZXJzIHRoYXQgZG9uJ3QsXG4gICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIEhUTUwgb3IgU1ZHLlxuICAgIGNsYXNzTmFtZTogaGFzU1ZHID8gTVVTVF9VU0VfQVRUUklCVVRFIDogTVVTVF9VU0VfUFJPUEVSVFksXG4gICAgY29sczogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgY29sU3BhbjogbnVsbCxcbiAgICBjb250ZW50OiBudWxsLFxuICAgIGNvbnRlbnRFZGl0YWJsZTogbnVsbCxcbiAgICBjb250ZXh0TWVudTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGNvbnRyb2xzOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGNvb3JkczogbnVsbCxcbiAgICBjcm9zc09yaWdpbjogbnVsbCxcbiAgICBkYXRhOiBudWxsLCAvLyBGb3IgYDxvYmplY3QgLz5gIGFjdHMgYXMgYHNyY2AuXG4gICAgZGF0ZVRpbWU6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBkZWZlcjogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgZGlyOiBudWxsLFxuICAgIGRpc2FibGVkOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBkb3dubG9hZDogSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSxcbiAgICBkcmFnZ2FibGU6IG51bGwsXG4gICAgZW5jVHlwZTogbnVsbCxcbiAgICBmb3JtOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZm9ybUFjdGlvbjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZvcm1FbmNUeXBlOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZm9ybU1ldGhvZDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZvcm1Ob1ZhbGlkYXRlOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBmb3JtVGFyZ2V0OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZnJhbWVCb3JkZXI6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBoZWFkZXJzOiBudWxsLFxuICAgIGhlaWdodDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGhpZGRlbjogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgaGlnaDogbnVsbCxcbiAgICBocmVmOiBudWxsLFxuICAgIGhyZWZMYW5nOiBudWxsLFxuICAgIGh0bWxGb3I6IG51bGwsXG4gICAgaHR0cEVxdWl2OiBudWxsLFxuICAgIGljb246IG51bGwsXG4gICAgaWQ6IE1VU1RfVVNFX1BST1BFUlRZLFxuICAgIGxhYmVsOiBudWxsLFxuICAgIGxhbmc6IG51bGwsXG4gICAgbGlzdDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGxvb3A6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgbG93OiBudWxsLFxuICAgIG1hbmlmZXN0OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbWFyZ2luSGVpZ2h0OiBudWxsLFxuICAgIG1hcmdpbldpZHRoOiBudWxsLFxuICAgIG1heDogbnVsbCxcbiAgICBtYXhMZW5ndGg6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBtZWRpYTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIG1lZGlhR3JvdXA6IG51bGwsXG4gICAgbWV0aG9kOiBudWxsLFxuICAgIG1pbjogbnVsbCxcbiAgICBtdWx0aXBsZTogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBtdXRlZDogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBuYW1lOiBudWxsLFxuICAgIG5vVmFsaWRhdGU6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG9wZW46IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG9wdGltdW06IG51bGwsXG4gICAgcGF0dGVybjogbnVsbCxcbiAgICBwbGFjZWhvbGRlcjogbnVsbCxcbiAgICBwb3N0ZXI6IG51bGwsXG4gICAgcHJlbG9hZDogbnVsbCxcbiAgICByYWRpb0dyb3VwOiBudWxsLFxuICAgIHJlYWRPbmx5OiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHJlbDogbnVsbCxcbiAgICByZXF1aXJlZDogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgcm9sZTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHJvd3M6IE1VU1RfVVNFX0FUVFJJQlVURSB8IEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICAgIHJvd1NwYW46IG51bGwsXG4gICAgc2FuZGJveDogbnVsbCxcbiAgICBzY29wZTogbnVsbCxcbiAgICBzY29wZWQ6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHNjcm9sbGluZzogbnVsbCxcbiAgICBzZWFtbGVzczogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgc2VsZWN0ZWQ6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgc2hhcGU6IG51bGwsXG4gICAgc2l6ZTogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgc2l6ZXM6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzcGFuOiBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgICBzcGVsbENoZWNrOiBudWxsLFxuICAgIHNyYzogbnVsbCxcbiAgICBzcmNEb2M6IE1VU1RfVVNFX1BST1BFUlRZLFxuICAgIHNyY1NldDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0YXJ0OiBIQVNfTlVNRVJJQ19WQUxVRSxcbiAgICBzdGVwOiBudWxsLFxuICAgIHN0eWxlOiBudWxsLFxuICAgIHRhYkluZGV4OiBudWxsLFxuICAgIHRhcmdldDogbnVsbCxcbiAgICB0aXRsZTogbnVsbCxcbiAgICB0eXBlOiBudWxsLFxuICAgIHVzZU1hcDogbnVsbCxcbiAgICB2YWx1ZTogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfU0lERV9FRkZFQ1RTLFxuICAgIHdpZHRoOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgd21vZGU6IE1VU1RfVVNFX0FUVFJJQlVURSxcblxuICAgIC8qKlxuICAgICAqIE5vbi1zdGFuZGFyZCBQcm9wZXJ0aWVzXG4gICAgICovXG4gICAgLy8gYXV0b0NhcGl0YWxpemUgYW5kIGF1dG9Db3JyZWN0IGFyZSBzdXBwb3J0ZWQgaW4gTW9iaWxlIFNhZmFyaSBmb3JcbiAgICAvLyBrZXlib2FyZCBoaW50cy5cbiAgICBhdXRvQ2FwaXRhbGl6ZTogbnVsbCxcbiAgICBhdXRvQ29ycmVjdDogbnVsbCxcbiAgICAvLyBpdGVtUHJvcCwgaXRlbVNjb3BlLCBpdGVtVHlwZSBhcmUgZm9yXG4gICAgLy8gTWljcm9kYXRhIHN1cHBvcnQuIFNlZSBodHRwOi8vc2NoZW1hLm9yZy9kb2NzL2dzLmh0bWxcbiAgICBpdGVtUHJvcDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGl0ZW1TY29wZTogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgaXRlbVR5cGU6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICAvLyBpdGVtSUQgYW5kIGl0ZW1SZWYgYXJlIGZvciBNaWNyb2RhdGEgc3VwcG9ydCBhcyB3ZWxsIGJ1dFxuICAgIC8vIG9ubHkgc3BlY2lmaWVkIGluIHRoZSB0aGUgV0hBVFdHIHNwZWMgZG9jdW1lbnQuIFNlZVxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL21pY3JvZGF0YS5odG1sI21pY3JvZGF0YS1kb20tYXBpXG4gICAgaXRlbUlEOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgaXRlbVJlZjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIC8vIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBmb3IgT3BlbkdyYXBoIGluIG1ldGEgdGFncy5cbiAgICBwcm9wZXJ0eTogbnVsbCxcbiAgICAvLyBJRS1vbmx5IGF0dHJpYnV0ZSB0aGF0IGNvbnRyb2xzIGZvY3VzIGJlaGF2aW9yXG4gICAgdW5zZWxlY3RhYmxlOiBNVVNUX1VTRV9BVFRSSUJVVEVcbiAgfSxcbiAgRE9NQXR0cmlidXRlTmFtZXM6IHtcbiAgICBhY2NlcHRDaGFyc2V0OiAnYWNjZXB0LWNoYXJzZXQnLFxuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBodG1sRm9yOiAnZm9yJyxcbiAgICBodHRwRXF1aXY6ICdodHRwLWVxdWl2J1xuICB9LFxuICBET01Qcm9wZXJ0eU5hbWVzOiB7XG4gICAgYXV0b0NhcGl0YWxpemU6ICdhdXRvY2FwaXRhbGl6ZScsXG4gICAgYXV0b0NvbXBsZXRlOiAnYXV0b2NvbXBsZXRlJyxcbiAgICBhdXRvQ29ycmVjdDogJ2F1dG9jb3JyZWN0JyxcbiAgICBhdXRvRm9jdXM6ICdhdXRvZm9jdXMnLFxuICAgIGF1dG9QbGF5OiAnYXV0b3BsYXknLFxuICAgIC8vIGBlbmNvZGluZ2AgaXMgZXF1aXZhbGVudCB0byBgZW5jdHlwZWAsIElFOCBsYWNrcyBhbiBgZW5jdHlwZWAgc2V0dGVyLlxuICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2Zvcm1zLmh0bWwjZG9tLWZzLWVuY29kaW5nXG4gICAgZW5jVHlwZTogJ2VuY29kaW5nJyxcbiAgICBocmVmTGFuZzogJ2hyZWZsYW5nJyxcbiAgICByYWRpb0dyb3VwOiAncmFkaW9ncm91cCcsXG4gICAgc3BlbGxDaGVjazogJ3NwZWxsY2hlY2snLFxuICAgIHNyY0RvYzogJ3NyY2RvYycsXG4gICAgc3JjU2V0OiAnc3Jjc2V0J1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhUTUxET01Qcm9wZXJ0eUNvbmZpZztcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgTGlua2VkVmFsdWVVdGlsc1xuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVzXCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG52YXIgaGFzUmVhZE9ubHlWYWx1ZSA9IHtcbiAgJ2J1dHRvbic6IHRydWUsXG4gICdjaGVja2JveCc6IHRydWUsXG4gICdpbWFnZSc6IHRydWUsXG4gICdoaWRkZW4nOiB0cnVlLFxuICAncmFkaW8nOiB0cnVlLFxuICAncmVzZXQnOiB0cnVlLFxuICAnc3VibWl0JzogdHJ1ZVxufTtcblxuZnVuY3Rpb24gX2Fzc2VydFNpbmdsZUxpbmsoaW5wdXQpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBpbnB1dC5wcm9wcy5jaGVja2VkTGluayA9PSBudWxsIHx8IGlucHV0LnByb3BzLnZhbHVlTGluayA9PSBudWxsLFxuICAgICdDYW5ub3QgcHJvdmlkZSBhIGNoZWNrZWRMaW5rIGFuZCBhIHZhbHVlTGluay4gSWYgeW91IHdhbnQgdG8gdXNlICcgK1xuICAgICdjaGVja2VkTGluaywgeW91IHByb2JhYmx5IGRvblxcJ3Qgd2FudCB0byB1c2UgdmFsdWVMaW5rIGFuZCB2aWNlIHZlcnNhLidcbiAgKSA6IGludmFyaWFudChpbnB1dC5wcm9wcy5jaGVja2VkTGluayA9PSBudWxsIHx8IGlucHV0LnByb3BzLnZhbHVlTGluayA9PSBudWxsKSk7XG59XG5mdW5jdGlvbiBfYXNzZXJ0VmFsdWVMaW5rKGlucHV0KSB7XG4gIF9hc3NlcnRTaW5nbGVMaW5rKGlucHV0KTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBpbnB1dC5wcm9wcy52YWx1ZSA9PSBudWxsICYmIGlucHV0LnByb3BzLm9uQ2hhbmdlID09IG51bGwsXG4gICAgJ0Nhbm5vdCBwcm92aWRlIGEgdmFsdWVMaW5rIGFuZCBhIHZhbHVlIG9yIG9uQ2hhbmdlIGV2ZW50LiBJZiB5b3Ugd2FudCAnICtcbiAgICAndG8gdXNlIHZhbHVlIG9yIG9uQ2hhbmdlLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVzZSB2YWx1ZUxpbmsuJ1xuICApIDogaW52YXJpYW50KGlucHV0LnByb3BzLnZhbHVlID09IG51bGwgJiYgaW5wdXQucHJvcHMub25DaGFuZ2UgPT0gbnVsbCkpO1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0Q2hlY2tlZExpbmsoaW5wdXQpIHtcbiAgX2Fzc2VydFNpbmdsZUxpbmsoaW5wdXQpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGlucHV0LnByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBpbnB1dC5wcm9wcy5vbkNoYW5nZSA9PSBudWxsLFxuICAgICdDYW5ub3QgcHJvdmlkZSBhIGNoZWNrZWRMaW5rIGFuZCBhIGNoZWNrZWQgcHJvcGVydHkgb3Igb25DaGFuZ2UgZXZlbnQuICcgK1xuICAgICdJZiB5b3Ugd2FudCB0byB1c2UgY2hlY2tlZCBvciBvbkNoYW5nZSwgeW91IHByb2JhYmx5IGRvblxcJ3Qgd2FudCB0byAnICtcbiAgICAndXNlIGNoZWNrZWRMaW5rJ1xuICApIDogaW52YXJpYW50KGlucHV0LnByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBpbnB1dC5wcm9wcy5vbkNoYW5nZSA9PSBudWxsKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZSBjaGFuZ2UgZXZlbnQgdG8gaGFuZGxlXG4gKi9cbmZ1bmN0aW9uIF9oYW5kbGVMaW5rZWRWYWx1ZUNoYW5nZShlKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHRoaXMucHJvcHMudmFsdWVMaW5rLnJlcXVlc3RDaGFuZ2UoZS50YXJnZXQudmFsdWUpO1xufVxuXG4vKipcbiAgKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBlIGNoYW5nZSBldmVudCB0byBoYW5kbGVcbiAgKi9cbmZ1bmN0aW9uIF9oYW5kbGVMaW5rZWRDaGVja0NoYW5nZShlKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHRoaXMucHJvcHMuY2hlY2tlZExpbmsucmVxdWVzdENoYW5nZShlLnRhcmdldC5jaGVja2VkKTtcbn1cblxuLyoqXG4gKiBQcm92aWRlIGEgbGlua2VkIGB2YWx1ZWAgYXR0cmlidXRlIGZvciBjb250cm9sbGVkIGZvcm1zLiBZb3Ugc2hvdWxkIG5vdCB1c2VcbiAqIHRoaXMgb3V0c2lkZSBvZiB0aGUgUmVhY3RET00gY29udHJvbGxlZCBmb3JtIGNvbXBvbmVudHMuXG4gKi9cbnZhciBMaW5rZWRWYWx1ZVV0aWxzID0ge1xuICBNaXhpbjoge1xuICAgIHByb3BUeXBlczoge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgICAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSB8fFxuICAgICAgICAgICAgaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fFxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgfHxcbiAgICAgICAgICAgIHByb3BzLnJlYWRPbmx5IHx8XG4gICAgICAgICAgICBwcm9wcy5kaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICtcbiAgICAgICAgICAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICtcbiAgICAgICAgICAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCAnICtcbiAgICAgICAgICAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJ1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGNoZWNrZWQ6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgICAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSB8fFxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgfHxcbiAgICAgICAgICAgIHByb3BzLnJlYWRPbmx5IHx8XG4gICAgICAgICAgICBwcm9wcy5kaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1lvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgK1xuICAgICAgICAgICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgK1xuICAgICAgICAgICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgJyArXG4gICAgICAgICAgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLidcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZTogUmVhY3RQcm9wVHlwZXMuZnVuY1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW5wdXQgRm9ybSBjb21wb25lbnRcbiAgICogQHJldHVybiB7Kn0gY3VycmVudCB2YWx1ZSBvZiB0aGUgaW5wdXQgZWl0aGVyIGZyb20gdmFsdWUgcHJvcCBvciBsaW5rLlxuICAgKi9cbiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnByb3BzLnZhbHVlTGluaykge1xuICAgICAgX2Fzc2VydFZhbHVlTGluayhpbnB1dCk7XG4gICAgICByZXR1cm4gaW5wdXQucHJvcHMudmFsdWVMaW5rLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQucHJvcHMudmFsdWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGlucHV0IEZvcm0gY29tcG9uZW50XG4gICAqIEByZXR1cm4geyp9IGN1cnJlbnQgY2hlY2tlZCBzdGF0dXMgb2YgdGhlIGlucHV0IGVpdGhlciBmcm9tIGNoZWNrZWQgcHJvcFxuICAgKiAgICAgICAgICAgICBvciBsaW5rLlxuICAgKi9cbiAgZ2V0Q2hlY2tlZDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQucHJvcHMuY2hlY2tlZExpbmspIHtcbiAgICAgIF9hc3NlcnRDaGVja2VkTGluayhpbnB1dCk7XG4gICAgICByZXR1cm4gaW5wdXQucHJvcHMuY2hlY2tlZExpbmsudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC5wcm9wcy5jaGVja2VkO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBpbnB1dCBGb3JtIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gY2hhbmdlIGNhbGxiYWNrIGVpdGhlciBmcm9tIG9uQ2hhbmdlIHByb3Agb3IgbGluay5cbiAgICovXG4gIGdldE9uQ2hhbmdlOiBmdW5jdGlvbihpbnB1dCkge1xuICAgIGlmIChpbnB1dC5wcm9wcy52YWx1ZUxpbmspIHtcbiAgICAgIF9hc3NlcnRWYWx1ZUxpbmsoaW5wdXQpO1xuICAgICAgcmV0dXJuIF9oYW5kbGVMaW5rZWRWYWx1ZUNoYW5nZTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LnByb3BzLmNoZWNrZWRMaW5rKSB7XG4gICAgICBfYXNzZXJ0Q2hlY2tlZExpbmsoaW5wdXQpO1xuICAgICAgcmV0dXJuIF9oYW5kbGVMaW5rZWRDaGVja0NoYW5nZTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0LnByb3BzLm9uQ2hhbmdlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpbmtlZFZhbHVlVXRpbHM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZUR2x1YTJWa1ZtRnNkV1ZWZEdsc2N5NXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdUR2x1YTJWa1ZtRnNkV1ZWZEdsc2MxeHVJQ29nUUhSNWNHVmphR1ZqYTNNZ2MzUmhkR2xqTFc5dWJIbGNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJTWldGamRGQnliM0JVZVhCbGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVSEp2Y0ZSNWNHVnpYQ0lwTzF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNTJZWElnYUdGelVtVmhaRTl1YkhsV1lXeDFaU0E5SUh0Y2JpQWdKMkoxZEhSdmJpYzZJSFJ5ZFdVc1hHNGdJQ2RqYUdWamEySnZlQ2M2SUhSeWRXVXNYRzRnSUNkcGJXRm5aU2M2SUhSeWRXVXNYRzRnSUNkb2FXUmtaVzRuT2lCMGNuVmxMRnh1SUNBbmNtRmthVzhuT2lCMGNuVmxMRnh1SUNBbmNtVnpaWFFuT2lCMGNuVmxMRnh1SUNBbmMzVmliV2wwSnpvZ2RISjFaVnh1ZlR0Y2JseHVablZ1WTNScGIyNGdYMkZ6YzJWeWRGTnBibWRzWlV4cGJtc29hVzV3ZFhRcElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQnBibkIxZEM1d2NtOXdjeTVqYUdWamEyVmtUR2x1YXlBOVBTQnVkV3hzSUh4OElHbHVjSFYwTG5CeWIzQnpMblpoYkhWbFRHbHVheUE5UFNCdWRXeHNMRnh1SUNBZ0lDZERZVzV1YjNRZ2NISnZkbWxrWlNCaElHTm9aV05yWldSTWFXNXJJR0Z1WkNCaElIWmhiSFZsVEdsdWF5NGdTV1lnZVc5MUlIZGhiblFnZEc4Z2RYTmxJQ2NnSzF4dUlDQWdJQ2RqYUdWamEyVmtUR2x1YXl3Z2VXOTFJSEJ5YjJKaFlteDVJR1J2Ymx4Y0ozUWdkMkZ1ZENCMGJ5QjFjMlVnZG1Gc2RXVk1hVzVySUdGdVpDQjJhV05sSUhabGNuTmhMaWRjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hwYm5CMWRDNXdjbTl3Y3k1amFHVmphMlZrVEdsdWF5QTlQU0J1ZFd4c0lIeDhJR2x1Y0hWMExuQnliM0J6TG5aaGJIVmxUR2x1YXlBOVBTQnVkV3hzS1NrN1hHNTlYRzVtZFc1amRHbHZiaUJmWVhOelpYSjBWbUZzZFdWTWFXNXJLR2x1Y0hWMEtTQjdYRzRnSUY5aGMzTmxjblJUYVc1bmJHVk1hVzVyS0dsdWNIVjBLVHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0JwYm5CMWRDNXdjbTl3Y3k1MllXeDFaU0E5UFNCdWRXeHNJQ1ltSUdsdWNIVjBMbkJ5YjNCekxtOXVRMmhoYm1kbElEMDlJRzUxYkd3c1hHNGdJQ0FnSjBOaGJtNXZkQ0J3Y205MmFXUmxJR0VnZG1Gc2RXVk1hVzVySUdGdVpDQmhJSFpoYkhWbElHOXlJRzl1UTJoaGJtZGxJR1YyWlc1MExpQkpaaUI1YjNVZ2QyRnVkQ0FuSUN0Y2JpQWdJQ0FuZEc4Z2RYTmxJSFpoYkhWbElHOXlJRzl1UTJoaGJtZGxMQ0I1YjNVZ2NISnZZbUZpYkhrZ1pHOXVYRnduZENCM1lXNTBJSFJ2SUhWelpTQjJZV3gxWlV4cGJtc3VKMXh1SUNBcElEb2dhVzUyWVhKcFlXNTBLR2x1Y0hWMExuQnliM0J6TG5aaGJIVmxJRDA5SUc1MWJHd2dKaVlnYVc1d2RYUXVjSEp2Y0hNdWIyNURhR0Z1WjJVZ1BUMGdiblZzYkNrcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCZllYTnpaWEowUTJobFkydGxaRXhwYm1zb2FXNXdkWFFwSUh0Y2JpQWdYMkZ6YzJWeWRGTnBibWRzWlV4cGJtc29hVzV3ZFhRcE8xeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lHbHVjSFYwTG5CeWIzQnpMbU5vWldOclpXUWdQVDBnYm5Wc2JDQW1KaUJwYm5CMWRDNXdjbTl3Y3k1dmJrTm9ZVzVuWlNBOVBTQnVkV3hzTEZ4dUlDQWdJQ2REWVc1dWIzUWdjSEp2ZG1sa1pTQmhJR05vWldOclpXUk1hVzVySUdGdVpDQmhJR05vWldOclpXUWdjSEp2Y0dWeWRIa2diM0lnYjI1RGFHRnVaMlVnWlhabGJuUXVJQ2NnSzF4dUlDQWdJQ2RKWmlCNWIzVWdkMkZ1ZENCMGJ5QjFjMlVnWTJobFkydGxaQ0J2Y2lCdmJrTm9ZVzVuWlN3Z2VXOTFJSEJ5YjJKaFlteDVJR1J2Ymx4Y0ozUWdkMkZ1ZENCMGJ5QW5JQ3RjYmlBZ0lDQW5kWE5sSUdOb1pXTnJaV1JNYVc1ckoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHbHVjSFYwTG5CeWIzQnpMbU5vWldOclpXUWdQVDBnYm5Wc2JDQW1KaUJwYm5CMWRDNXdjbTl3Y3k1dmJrTm9ZVzVuWlNBOVBTQnVkV3hzS1NrN1hHNTlYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRUZVc1MGFHVjBhV05GZG1WdWRIMGdaU0JqYUdGdVoyVWdaWFpsYm5RZ2RHOGdhR0Z1Wkd4bFhHNGdLaTljYm1aMWJtTjBhVzl1SUY5b1lXNWtiR1ZNYVc1clpXUldZV3gxWlVOb1lXNW5aU2hsS1NCN1hHNGdJQzhxYW5Ob2FXNTBJSFpoYkdsa2RHaHBjenAwY25WbElDb3ZYRzRnSUhSb2FYTXVjSEp2Y0hNdWRtRnNkV1ZNYVc1ckxuSmxjWFZsYzNSRGFHRnVaMlVvWlM1MFlYSm5aWFF1ZG1Gc2RXVXBPMXh1ZlZ4dVhHNHZLaXBjYmlBZ0tpQkFjR0Z5WVcwZ2UxTjViblJvWlhScFkwVjJaVzUwZlNCbElHTm9ZVzVuWlNCbGRtVnVkQ0IwYnlCb1lXNWtiR1ZjYmlBZ0tpOWNibVoxYm1OMGFXOXVJRjlvWVc1a2JHVk1hVzVyWldSRGFHVmphME5vWVc1blpTaGxLU0I3WEc0Z0lDOHFhbk5vYVc1MElIWmhiR2xrZEdocGN6cDBjblZsSUNvdlhHNGdJSFJvYVhNdWNISnZjSE11WTJobFkydGxaRXhwYm1zdWNtVnhkV1Z6ZEVOb1lXNW5aU2hsTG5SaGNtZGxkQzVqYUdWamEyVmtLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlFjbTkyYVdSbElHRWdiR2x1YTJWa0lHQjJZV3gxWldBZ1lYUjBjbWxpZFhSbElHWnZjaUJqYjI1MGNtOXNiR1ZrSUdadmNtMXpMaUJaYjNVZ2MyaHZkV3hrSUc1dmRDQjFjMlZjYmlBcUlIUm9hWE1nYjNWMGMybGtaU0J2WmlCMGFHVWdVbVZoWTNSRVQwMGdZMjl1ZEhKdmJHeGxaQ0JtYjNKdElHTnZiWEJ2Ym1WdWRITXVYRzRnS2k5Y2JuWmhjaUJNYVc1clpXUldZV3gxWlZWMGFXeHpJRDBnZTF4dUlDQk5hWGhwYmpvZ2UxeHVJQ0FnSUhCeWIzQlVlWEJsY3pvZ2UxeHVJQ0FnSUNBZ2RtRnNkV1U2SUdaMWJtTjBhVzl1S0hCeWIzQnpMQ0J3Y205d1RtRnRaU3dnWTI5dGNHOXVaVzUwVG1GdFpTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lYQnliM0J6VzNCeWIzQk9ZVzFsWFNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnYUdGelVtVmhaRTl1YkhsV1lXeDFaVnR3Y205d2N5NTBlWEJsWFNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnY0hKdmNITXViMjVEYUdGdVoyVWdmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lIQnliM0J6TG5KbFlXUlBibXg1SUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0J3Y205d2N5NWthWE5oWW14bFpDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnUlhKeWIzSW9YRzRnSUNBZ0lDQWdJQ0FnSjFsdmRTQndjbTkyYVdSbFpDQmhJR0IyWVd4MVpXQWdjSEp2Y0NCMGJ5QmhJR1p2Y20wZ1ptbGxiR1FnZDJsMGFHOTFkQ0JoYmlBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuWUc5dVEyaGhibWRsWUNCb1lXNWtiR1Z5TGlCVWFHbHpJSGRwYkd3Z2NtVnVaR1Z5SUdFZ2NtVmhaQzF2Ym14NUlHWnBaV3hrTGlCSlppQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBbmRHaGxJR1pwWld4a0lITm9iM1ZzWkNCaVpTQnRkWFJoWW14bElIVnpaU0JnWkdWbVlYVnNkRlpoYkhWbFlDNGdUM1JvWlhKM2FYTmxMQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5jMlYwSUdWcGRHaGxjaUJnYjI1RGFHRnVaMlZnSUc5eUlHQnlaV0ZrVDI1c2VXQXVKMXh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUdOb1pXTnJaV1E2SUdaMWJtTjBhVzl1S0hCeWIzQnpMQ0J3Y205d1RtRnRaU3dnWTI5dGNHOXVaVzUwVG1GdFpTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lYQnliM0J6VzNCeWIzQk9ZVzFsWFNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnY0hKdmNITXViMjVEYUdGdVoyVWdmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lIQnliM0J6TG5KbFlXUlBibXg1SUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0J3Y205d2N5NWthWE5oWW14bFpDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnUlhKeWIzSW9YRzRnSUNBZ0lDQWdJQ0FnSjFsdmRTQndjbTkyYVdSbFpDQmhJR0JqYUdWamEyVmtZQ0J3Y205d0lIUnZJR0VnWm05eWJTQm1hV1ZzWkNCM2FYUm9iM1YwSUdGdUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkZ2IyNURhR0Z1WjJWZ0lHaGhibVJzWlhJdUlGUm9hWE1nZDJsc2JDQnlaVzVrWlhJZ1lTQnlaV0ZrTFc5dWJIa2dabWxsYkdRdUlFbG1JQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZDBhR1VnWm1sbGJHUWdjMmh2ZFd4a0lHSmxJRzExZEdGaWJHVWdkWE5sSUdCa1pXWmhkV3gwUTJobFkydGxaR0F1SUU5MGFHVnlkMmx6WlN3Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjNObGRDQmxhWFJvWlhJZ1lHOXVRMmhoYm1kbFlDQnZjaUJnY21WaFpFOXViSGxnTGlkY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ0lDQnZia05vWVc1blpUb2dVbVZoWTNSUWNtOXdWSGx3WlhNdVpuVnVZMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdhVzV3ZFhRZ1JtOXliU0JqYjIxd2IyNWxiblJjYmlBZ0lDb2dRSEpsZEhWeWJpQjdLbjBnWTNWeWNtVnVkQ0IyWVd4MVpTQnZaaUIwYUdVZ2FXNXdkWFFnWldsMGFHVnlJR1p5YjIwZ2RtRnNkV1VnY0hKdmNDQnZjaUJzYVc1ckxseHVJQ0FnS2k5Y2JpQWdaMlYwVm1Gc2RXVTZJR1oxYm1OMGFXOXVLR2x1Y0hWMEtTQjdYRzRnSUNBZ2FXWWdLR2x1Y0hWMExuQnliM0J6TG5aaGJIVmxUR2x1YXlrZ2UxeHVJQ0FnSUNBZ1gyRnpjMlZ5ZEZaaGJIVmxUR2x1YXlocGJuQjFkQ2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhVzV3ZFhRdWNISnZjSE11ZG1Gc2RXVk1hVzVyTG5aaGJIVmxPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYVc1d2RYUXVjSEp2Y0hNdWRtRnNkV1U3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JEYjIxd2IyNWxiblI5SUdsdWNIVjBJRVp2Y20wZ1kyOXRjRzl1Wlc1MFhHNGdJQ0FxSUVCeVpYUjFjbTRnZXlwOUlHTjFjbkpsYm5RZ1kyaGxZMnRsWkNCemRHRjBkWE1nYjJZZ2RHaGxJR2x1Y0hWMElHVnBkR2hsY2lCbWNtOXRJR05vWldOclpXUWdjSEp2Y0Z4dUlDQWdLaUFnSUNBZ0lDQWdJQ0FnSUNCdmNpQnNhVzVyTGx4dUlDQWdLaTljYmlBZ1oyVjBRMmhsWTJ0bFpEb2dablZ1WTNScGIyNG9hVzV3ZFhRcElIdGNiaUFnSUNCcFppQW9hVzV3ZFhRdWNISnZjSE11WTJobFkydGxaRXhwYm1zcElIdGNiaUFnSUNBZ0lGOWhjM05sY25SRGFHVmphMlZrVEdsdWF5aHBibkIxZENrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYVc1d2RYUXVjSEp2Y0hNdVkyaGxZMnRsWkV4cGJtc3VkbUZzZFdVN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnBibkIxZEM1d2NtOXdjeTVqYUdWamEyVmtPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JwYm5CMWRDQkdiM0p0SUdOdmJYQnZibVZ1ZEZ4dUlDQWdLaUJBY21WMGRYSnVJSHRtZFc1amRHbHZibjBnWTJoaGJtZGxJR05oYkd4aVlXTnJJR1ZwZEdobGNpQm1jbTl0SUc5dVEyaGhibWRsSUhCeWIzQWdiM0lnYkdsdWF5NWNiaUFnSUNvdlhHNGdJR2RsZEU5dVEyaGhibWRsT2lCbWRXNWpkR2x2YmlocGJuQjFkQ2tnZTF4dUlDQWdJR2xtSUNocGJuQjFkQzV3Y205d2N5NTJZV3gxWlV4cGJtc3BJSHRjYmlBZ0lDQWdJRjloYzNObGNuUldZV3gxWlV4cGJtc29hVzV3ZFhRcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUY5b1lXNWtiR1ZNYVc1clpXUldZV3gxWlVOb1lXNW5aVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR2x1Y0hWMExuQnliM0J6TG1Ob1pXTnJaV1JNYVc1cktTQjdYRzRnSUNBZ0lDQmZZWE56WlhKMFEyaGxZMnRsWkV4cGJtc29hVzV3ZFhRcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUY5b1lXNWtiR1ZNYVc1clpXUkRhR1ZqYTBOb1lXNW5aVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdsdWNIVjBMbkJ5YjNCekxtOXVRMmhoYm1kbE8xeHVJQ0I5WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRXhwYm10bFpGWmhiSFZsVlhScGJITTdYRzRpWFgwPSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgTG9jYWxFdmVudFRyYXBNaXhpblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlclwiKTtcblxudmFyIGFjY3VtdWxhdGVJbnRvID0gcmVxdWlyZShcIi4vYWNjdW11bGF0ZUludG9cIik7XG52YXIgZm9yRWFjaEFjY3VtdWxhdGVkID0gcmVxdWlyZShcIi4vZm9yRWFjaEFjY3VtdWxhdGVkXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuZnVuY3Rpb24gcmVtb3ZlKGV2ZW50KSB7XG4gIGV2ZW50LnJlbW92ZSgpO1xufVxuXG52YXIgTG9jYWxFdmVudFRyYXBNaXhpbiA9IHtcbiAgdHJhcEJ1YmJsZWRFdmVudDpmdW5jdGlvbih0b3BMZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQodGhpcy5pc01vdW50ZWQoKSwgJ011c3QgYmUgbW91bnRlZCB0byB0cmFwIGV2ZW50cycpIDogaW52YXJpYW50KHRoaXMuaXNNb3VudGVkKCkpKTtcbiAgICAvLyBJZiBhIGNvbXBvbmVudCByZW5kZXJzIHRvIG51bGwgb3IgaWYgYW5vdGhlciBjb21wb25lbnQgZmF0YWxzIGFuZCBjYXVzZXNcbiAgICAvLyB0aGUgc3RhdGUgb2YgdGhlIHRyZWUgdG8gYmUgY29ycnVwdGVkLCBgbm9kZWAgaGVyZSBjYW4gYmUgbnVsbC5cbiAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0RE9NTm9kZSgpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBub2RlLFxuICAgICAgJ0xvY2FsRXZlbnRUcmFwTWl4aW4udHJhcEJ1YmJsZWRFdmVudCguLi4pOiBSZXF1aXJlcyBub2RlIHRvIGJlIHJlbmRlcmVkLidcbiAgICApIDogaW52YXJpYW50KG5vZGUpKTtcbiAgICB2YXIgbGlzdGVuZXIgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIGhhbmRsZXJCYXNlTmFtZSxcbiAgICAgIG5vZGVcbiAgICApO1xuICAgIHRoaXMuX2xvY2FsRXZlbnRMaXN0ZW5lcnMgPVxuICAgICAgYWNjdW11bGF0ZUludG8odGhpcy5fbG9jYWxFdmVudExpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9LFxuXG4gIC8vIHRyYXBDYXB0dXJlZEV2ZW50IHdvdWxkIGxvb2sgbmVhcmx5IGlkZW50aWNhbC4gV2UgZG9uJ3QgaW1wbGVtZW50IHRoYXRcbiAgLy8gbWV0aG9kIGJlY2F1c2UgaXQgaXNuJ3QgY3VycmVudGx5IG5lZWRlZC5cblxuICBjb21wb25lbnRXaWxsVW5tb3VudDpmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbG9jYWxFdmVudExpc3RlbmVycykge1xuICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKHRoaXMuX2xvY2FsRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvY2FsRXZlbnRUcmFwTWl4aW47XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZURzlqWVd4RmRtVnVkRlJ5WVhCTmFYaHBiaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREUwTFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVEc5allXeEZkbVZ1ZEZSeVlYQk5hWGhwYmx4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGSmxZV04wUW5KdmQzTmxja1YyWlc1MFJXMXBkSFJsY2lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFFuSnZkM05sY2tWMlpXNTBSVzFwZEhSbGNsd2lLVHRjYmx4dWRtRnlJR0ZqWTNWdGRXeGhkR1ZKYm5SdklEMGdjbVZ4ZFdseVpTaGNJaTR2WVdOamRXMTFiR0YwWlVsdWRHOWNJaWs3WEc1MllYSWdabTl5UldGamFFRmpZM1Z0ZFd4aGRHVmtJRDBnY21WeGRXbHlaU2hjSWk0dlptOXlSV0ZqYUVGalkzVnRkV3hoZEdWa1hDSXBPMXh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1Wm5WdVkzUnBiMjRnY21WdGIzWmxLR1YyWlc1MEtTQjdYRzRnSUdWMlpXNTBMbkpsYlc5MlpTZ3BPMXh1ZlZ4dVhHNTJZWElnVEc5allXeEZkbVZ1ZEZSeVlYQk5hWGhwYmlBOUlIdGNiaUFnZEhKaGNFSjFZbUpzWldSRmRtVnVkRHBtZFc1amRHbHZiaWgwYjNCTVpYWmxiRlI1Y0dVc0lHaGhibVJzWlhKQ1lYTmxUbUZ0WlNrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvZEdocGN5NXBjMDF2ZFc1MFpXUW9LU3dnSjAxMWMzUWdZbVVnYlc5MWJuUmxaQ0IwYnlCMGNtRndJR1YyWlc1MGN5Y3BJRG9nYVc1MllYSnBZVzUwS0hSb2FYTXVhWE5OYjNWdWRHVmtLQ2twS1R0Y2JpQWdJQ0F2THlCSlppQmhJR052YlhCdmJtVnVkQ0J5Wlc1a1pYSnpJSFJ2SUc1MWJHd2diM0lnYVdZZ1lXNXZkR2hsY2lCamIyMXdiMjVsYm5RZ1ptRjBZV3h6SUdGdVpDQmpZWFZ6WlhOY2JpQWdJQ0F2THlCMGFHVWdjM1JoZEdVZ2IyWWdkR2hsSUhSeVpXVWdkRzhnWW1VZ1kyOXljblZ3ZEdWa0xDQmdibTlrWldBZ2FHVnlaU0JqWVc0Z1ltVWdiblZzYkM1Y2JpQWdJQ0IyWVhJZ2JtOWtaU0E5SUhSb2FYTXVaMlYwUkU5TlRtOWtaU2dwTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQnViMlJsTEZ4dUlDQWdJQ0FnSjB4dlkyRnNSWFpsYm5SVWNtRndUV2w0YVc0dWRISmhjRUoxWW1Kc1pXUkZkbVZ1ZENndUxpNHBPaUJTWlhGMWFYSmxjeUJ1YjJSbElIUnZJR0psSUhKbGJtUmxjbVZrTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHNXZaR1VwS1R0Y2JpQWdJQ0IyWVhJZ2JHbHpkR1Z1WlhJZ1BTQlNaV0ZqZEVKeWIzZHpaWEpGZG1WdWRFVnRhWFIwWlhJdWRISmhjRUoxWW1Kc1pXUkZkbVZ1ZENoY2JpQWdJQ0FnSUhSdmNFeGxkbVZzVkhsd1pTeGNiaUFnSUNBZ0lHaGhibVJzWlhKQ1lYTmxUbUZ0WlN4Y2JpQWdJQ0FnSUc1dlpHVmNiaUFnSUNBcE8xeHVJQ0FnSUhSb2FYTXVYMnh2WTJGc1JYWmxiblJNYVhOMFpXNWxjbk1nUFZ4dUlDQWdJQ0FnWVdOamRXMTFiR0YwWlVsdWRHOG9kR2hwY3k1ZmJHOWpZV3hGZG1WdWRFeHBjM1JsYm1WeWN5d2diR2x6ZEdWdVpYSXBPMXh1SUNCOUxGeHVYRzRnSUM4dklIUnlZWEJEWVhCMGRYSmxaRVYyWlc1MElIZHZkV3hrSUd4dmIyc2dibVZoY214NUlHbGtaVzUwYVdOaGJDNGdWMlVnWkc5dUozUWdhVzF3YkdWdFpXNTBJSFJvWVhSY2JpQWdMeThnYldWMGFHOWtJR0psWTJGMWMyVWdhWFFnYVhOdUozUWdZM1Z5Y21WdWRHeDVJRzVsWldSbFpDNWNibHh1SUNCamIyMXdiMjVsYm5SWGFXeHNWVzV0YjNWdWREcG1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWZiRzlqWVd4RmRtVnVkRXhwYzNSbGJtVnljeWtnZTF4dUlDQWdJQ0FnWm05eVJXRmphRUZqWTNWdGRXeGhkR1ZrS0hSb2FYTXVYMnh2WTJGc1JYWmxiblJNYVhOMFpXNWxjbk1zSUhKbGJXOTJaU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUV4dlkyRnNSWFpsYm5SVWNtRndUV2w0YVc0N1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW5cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbi8qKlxuICogTW9iaWxlIFNhZmFyaSBkb2VzIG5vdCBmaXJlIHByb3Blcmx5IGJ1YmJsZSBjbGljayBldmVudHMgb24gbm9uLWludGVyYWN0aXZlXG4gKiBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3QgZmlyZS4gVGhlIHdvcmthcm91bmRcbiAqIGZvciB0aGlzIGJ1ZyBpbnZvbHZlcyBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2sgbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICpcbiAqIFRoaXMgcGFydGljdWxhciBwbHVnaW4gd29ya3MgYXJvdW5kIHRoZSBidWcgYnkgYXR0YWNoaW5nIGFuIGVtcHR5IGNsaWNrXG4gKiBsaXN0ZW5lciBvbiBgdG91Y2hzdGFydGAgKHdoaWNoIGRvZXMgZmlyZSBvbiBldmVyeSBlbGVtZW50KS5cbiAqL1xudmFyIE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW4gPSB7XG5cbiAgZXZlbnRUeXBlczogbnVsbCxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9XG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG4gICAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BUb3VjaFN0YXJ0KSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKHRhcmdldCAmJiAhdGFyZ2V0Lm9uY2xpY2spIHtcbiAgICAgICAgdGFyZ2V0Lm9uY2xpY2sgPSBlbXB0eUZ1bmN0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgT2JqZWN0LmFzc2lnblxuICovXG5cbi8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1vYmplY3QuYXNzaWduXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlcykge1xuICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIHRhcmdldCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgfVxuXG4gIHZhciB0byA9IE9iamVjdCh0YXJnZXQpO1xuICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4gIGZvciAodmFyIG5leHRJbmRleCA9IDE7IG5leHRJbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IG5leHRJbmRleCsrKSB7XG4gICAgdmFyIG5leHRTb3VyY2UgPSBhcmd1bWVudHNbbmV4dEluZGV4XTtcbiAgICBpZiAobmV4dFNvdXJjZSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbSA9IE9iamVjdChuZXh0U291cmNlKTtcblxuICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGFjY2Vzc29ycyBub3IgcHJveGllcy4gVGhlcmVmb3JlIHRoaXNcbiAgICAvLyBjb3B5IGNhbm5vdCB0aHJvdy4gSWYgd2UgZXZlciBzdXBwb3J0ZWQgdGhpcyB0aGVuIHdlIG11c3QgaGFuZGxlXG4gICAgLy8gZXhjZXB0aW9ucyBhbmQgc2lkZS1lZmZlY3RzLiBXZSBkb24ndCBzdXBwb3J0IHN5bWJvbHMgc28gdGhleSB3b24ndFxuICAgIC8vIGJlIHRyYW5zZmVycmVkLlxuXG4gICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcbiAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBQb29sZWRDbGFzc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBTdGF0aWMgcG9vbGVycy4gU2V2ZXJhbCBjdXN0b20gdmVyc2lvbnMgZm9yIGVhY2ggcG90ZW50aWFsIG51bWJlciBvZlxuICogYXJndW1lbnRzLiBBIGNvbXBsZXRlbHkgZ2VuZXJpYyBwb29sZXIgaXMgZWFzeSB0byBpbXBsZW1lbnQsIGJ1dCB3b3VsZFxuICogcmVxdWlyZSBhY2Nlc3NpbmcgdGhlIGBhcmd1bWVudHNgIG9iamVjdC4gSW4gZWFjaCBvZiB0aGVzZSwgYHRoaXNgIHJlZmVycyB0b1xuICogdGhlIENsYXNzIGl0c2VsZiwgbm90IGFuIGluc3RhbmNlLiBJZiBhbnkgb3RoZXJzIGFyZSBuZWVkZWQsIHNpbXBseSBhZGQgdGhlbVxuICogaGVyZSwgb3IgaW4gdGhlaXIgb3duIGZpbGVzLlxuICovXG52YXIgb25lQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbihjb3B5RmllbGRzRnJvbSkge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBjb3B5RmllbGRzRnJvbSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgS2xhc3MoY29weUZpZWxkc0Zyb20pO1xuICB9XG59O1xuXG52YXIgdHdvQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbihhMSwgYTIpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIpO1xuICB9XG59O1xuXG52YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uKGExLCBhMiwgYTMpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMyk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEyLCBhMyk7XG4gIH1cbn07XG5cbnZhciBmaXZlQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbihhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMywgYTQsIGE1KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzLCBhNCwgYTUpO1xuICB9XG59O1xuXG52YXIgc3RhbmRhcmRSZWxlYXNlciA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgaW5zdGFuY2UgaW5zdGFuY2VvZiBLbGFzcyxcbiAgICAnVHJ5aW5nIHRvIHJlbGVhc2UgYW4gaW5zdGFuY2UgaW50byBhIHBvb2wgb2YgYSBkaWZmZXJlbnQgdHlwZS4nXG4gICkgOiBpbnZhcmlhbnQoaW5zdGFuY2UgaW5zdGFuY2VvZiBLbGFzcykpO1xuICBpZiAoaW5zdGFuY2UuZGVzdHJ1Y3Rvcikge1xuICAgIGluc3RhbmNlLmRlc3RydWN0b3IoKTtcbiAgfVxuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCA8IEtsYXNzLnBvb2xTaXplKSB7XG4gICAgS2xhc3MuaW5zdGFuY2VQb29sLnB1c2goaW5zdGFuY2UpO1xuICB9XG59O1xuXG52YXIgREVGQVVMVF9QT09MX1NJWkUgPSAxMDtcbnZhciBERUZBVUxUX1BPT0xFUiA9IG9uZUFyZ3VtZW50UG9vbGVyO1xuXG4vKipcbiAqIEF1Z21lbnRzIGBDb3B5Q29uc3RydWN0b3JgIHRvIGJlIGEgcG9vbGFibGUgY2xhc3MsIGF1Z21lbnRpbmcgb25seSB0aGUgY2xhc3NcbiAqIGl0c2VsZiAoc3RhdGljYWxseSkgbm90IGFkZGluZyBhbnkgcHJvdG90eXBpY2FsIGZpZWxkcy4gQW55IENvcHlDb25zdHJ1Y3RvclxuICogeW91IGdpdmUgdGhpcyBtYXkgaGF2ZSBhIGBwb29sU2l6ZWAgcHJvcGVydHksIGFuZCB3aWxsIGxvb2sgZm9yIGFcbiAqIHByb3RvdHlwaWNhbCBgZGVzdHJ1Y3RvcmAgb24gaW5zdGFuY2VzIChvcHRpb25hbCkuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ29weUNvbnN0cnVjdG9yIENvbnN0cnVjdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVzZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb29sZXIgQ3VzdG9taXphYmxlIHBvb2xlci5cbiAqL1xudmFyIGFkZFBvb2xpbmdUbyA9IGZ1bmN0aW9uKENvcHlDb25zdHJ1Y3RvciwgcG9vbGVyKSB7XG4gIHZhciBOZXdLbGFzcyA9IENvcHlDb25zdHJ1Y3RvcjtcbiAgTmV3S2xhc3MuaW5zdGFuY2VQb29sID0gW107XG4gIE5ld0tsYXNzLmdldFBvb2xlZCA9IHBvb2xlciB8fCBERUZBVUxUX1BPT0xFUjtcbiAgaWYgKCFOZXdLbGFzcy5wb29sU2l6ZSkge1xuICAgIE5ld0tsYXNzLnBvb2xTaXplID0gREVGQVVMVF9QT09MX1NJWkU7XG4gIH1cbiAgTmV3S2xhc3MucmVsZWFzZSA9IHN0YW5kYXJkUmVsZWFzZXI7XG4gIHJldHVybiBOZXdLbGFzcztcbn07XG5cbnZhciBQb29sZWRDbGFzcyA9IHtcbiAgYWRkUG9vbGluZ1RvOiBhZGRQb29saW5nVG8sXG4gIG9uZUFyZ3VtZW50UG9vbGVyOiBvbmVBcmd1bWVudFBvb2xlcixcbiAgdHdvQXJndW1lbnRQb29sZXI6IHR3b0FyZ3VtZW50UG9vbGVyLFxuICB0aHJlZUFyZ3VtZW50UG9vbGVyOiB0aHJlZUFyZ3VtZW50UG9vbGVyLFxuICBmaXZlQXJndW1lbnRQb29sZXI6IGZpdmVBcmd1bWVudFBvb2xlclxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb29sZWRDbGFzcztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVHOXZiR1ZrUTJ4aGMzTXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlFiMjlzWldSRGJHRnpjMXh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2NHOXZiR1Z5Y3k0Z1UyVjJaWEpoYkNCamRYTjBiMjBnZG1WeWMybHZibk1nWm05eUlHVmhZMmdnY0c5MFpXNTBhV0ZzSUc1MWJXSmxjaUJ2Wmx4dUlDb2dZWEpuZFcxbGJuUnpMaUJCSUdOdmJYQnNaWFJsYkhrZ1oyVnVaWEpwWXlCd2IyOXNaWElnYVhNZ1pXRnplU0IwYnlCcGJYQnNaVzFsYm5Rc0lHSjFkQ0IzYjNWc1pGeHVJQ29nY21WeGRXbHlaU0JoWTJObGMzTnBibWNnZEdobElHQmhjbWQxYldWdWRITmdJRzlpYW1WamRDNGdTVzRnWldGamFDQnZaaUIwYUdWelpTd2dZSFJvYVhOZ0lISmxabVZ5Y3lCMGIxeHVJQ29nZEdobElFTnNZWE56SUdsMGMyVnNaaXdnYm05MElHRnVJR2x1YzNSaGJtTmxMaUJKWmlCaGJua2diM1JvWlhKeklHRnlaU0J1WldWa1pXUXNJSE5wYlhCc2VTQmhaR1FnZEdobGJWeHVJQ29nYUdWeVpTd2diM0lnYVc0Z2RHaGxhWElnYjNkdUlHWnBiR1Z6TGx4dUlDb3ZYRzUyWVhJZ2IyNWxRWEpuZFcxbGJuUlFiMjlzWlhJZ1BTQm1kVzVqZEdsdmJpaGpiM0I1Um1sbGJHUnpSbkp2YlNrZ2UxeHVJQ0IyWVhJZ1MyeGhjM01nUFNCMGFHbHpPMXh1SUNCcFppQW9TMnhoYzNNdWFXNXpkR0Z1WTJWUWIyOXNMbXhsYm1kMGFDa2dlMXh1SUNBZ0lIWmhjaUJwYm5OMFlXNWpaU0E5SUV0c1lYTnpMbWx1YzNSaGJtTmxVRzl2YkM1d2IzQW9LVHRjYmlBZ0lDQkxiR0Z6Y3k1allXeHNLR2x1YzNSaGJtTmxMQ0JqYjNCNVJtbGxiR1J6Um5KdmJTazdYRzRnSUNBZ2NtVjBkWEp1SUdsdWMzUmhibU5sTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1MyeGhjM01vWTI5d2VVWnBaV3hrYzBaeWIyMHBPMXh1SUNCOVhHNTlPMXh1WEc1MllYSWdkSGR2UVhKbmRXMWxiblJRYjI5c1pYSWdQU0JtZFc1amRHbHZiaWhoTVN3Z1lUSXBJSHRjYmlBZ2RtRnlJRXRzWVhOeklEMGdkR2hwY3p0Y2JpQWdhV1lnS0V0c1lYTnpMbWx1YzNSaGJtTmxVRzl2YkM1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IyWVhJZ2FXNXpkR0Z1WTJVZ1BTQkxiR0Z6Y3k1cGJuTjBZVzVqWlZCdmIyd3VjRzl3S0NrN1hHNGdJQ0FnUzJ4aGMzTXVZMkZzYkNocGJuTjBZVzVqWlN3Z1lURXNJR0V5S1R0Y2JpQWdJQ0J5WlhSMWNtNGdhVzV6ZEdGdVkyVTdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJMYkdGemN5aGhNU3dnWVRJcE8xeHVJQ0I5WEc1OU8xeHVYRzUyWVhJZ2RHaHlaV1ZCY21kMWJXVnVkRkJ2YjJ4bGNpQTlJR1oxYm1OMGFXOXVLR0V4TENCaE1pd2dZVE1wSUh0Y2JpQWdkbUZ5SUV0c1lYTnpJRDBnZEdocGN6dGNiaUFnYVdZZ0tFdHNZWE56TG1sdWMzUmhibU5sVUc5dmJDNXNaVzVuZEdncElIdGNiaUFnSUNCMllYSWdhVzV6ZEdGdVkyVWdQU0JMYkdGemN5NXBibk4wWVc1alpWQnZiMnd1Y0c5d0tDazdYRzRnSUNBZ1MyeGhjM011WTJGc2JDaHBibk4wWVc1alpTd2dZVEVzSUdFeUxDQmhNeWs3WEc0Z0lDQWdjbVYwZFhKdUlHbHVjM1JoYm1ObE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dTMnhoYzNNb1lURXNJR0V5TENCaE15azdYRzRnSUgxY2JuMDdYRzVjYm5aaGNpQm1hWFpsUVhKbmRXMWxiblJRYjI5c1pYSWdQU0JtZFc1amRHbHZiaWhoTVN3Z1lUSXNJR0V6TENCaE5Dd2dZVFVwSUh0Y2JpQWdkbUZ5SUV0c1lYTnpJRDBnZEdocGN6dGNiaUFnYVdZZ0tFdHNZWE56TG1sdWMzUmhibU5sVUc5dmJDNXNaVzVuZEdncElIdGNiaUFnSUNCMllYSWdhVzV6ZEdGdVkyVWdQU0JMYkdGemN5NXBibk4wWVc1alpWQnZiMnd1Y0c5d0tDazdYRzRnSUNBZ1MyeGhjM011WTJGc2JDaHBibk4wWVc1alpTd2dZVEVzSUdFeUxDQmhNeXdnWVRRc0lHRTFLVHRjYmlBZ0lDQnlaWFIxY200Z2FXNXpkR0Z1WTJVN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QkxiR0Z6Y3loaE1Td2dZVElzSUdFekxDQmhOQ3dnWVRVcE8xeHVJQ0I5WEc1OU8xeHVYRzUyWVhJZ2MzUmhibVJoY21SU1pXeGxZWE5sY2lBOUlHWjFibU4wYVc5dUtHbHVjM1JoYm1ObEtTQjdYRzRnSUhaaGNpQkxiR0Z6Y3lBOUlIUm9hWE03WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnYVc1emRHRnVZMlVnYVc1emRHRnVZMlZ2WmlCTGJHRnpjeXhjYmlBZ0lDQW5WSEo1YVc1bklIUnZJSEpsYkdWaGMyVWdZVzRnYVc1emRHRnVZMlVnYVc1MGJ5QmhJSEJ2YjJ3Z2IyWWdZU0JrYVdabVpYSmxiblFnZEhsd1pTNG5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9hVzV6ZEdGdVkyVWdhVzV6ZEdGdVkyVnZaaUJMYkdGemN5a3BPMXh1SUNCcFppQW9hVzV6ZEdGdVkyVXVaR1Z6ZEhKMVkzUnZjaWtnZTF4dUlDQWdJR2x1YzNSaGJtTmxMbVJsYzNSeWRXTjBiM0lvS1R0Y2JpQWdmVnh1SUNCcFppQW9TMnhoYzNNdWFXNXpkR0Z1WTJWUWIyOXNMbXhsYm1kMGFDQThJRXRzWVhOekxuQnZiMnhUYVhwbEtTQjdYRzRnSUNBZ1MyeGhjM011YVc1emRHRnVZMlZRYjI5c0xuQjFjMmdvYVc1emRHRnVZMlVwTzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnUkVWR1FWVk1WRjlRVDA5TVgxTkpXa1VnUFNBeE1EdGNiblpoY2lCRVJVWkJWVXhVWDFCUFQweEZVaUE5SUc5dVpVRnlaM1Z0Wlc1MFVHOXZiR1Z5TzF4dVhHNHZLaXBjYmlBcUlFRjFaMjFsYm5SeklHQkRiM0I1UTI5dWMzUnlkV04wYjNKZ0lIUnZJR0psSUdFZ2NHOXZiR0ZpYkdVZ1kyeGhjM01zSUdGMVoyMWxiblJwYm1jZ2IyNXNlU0IwYUdVZ1kyeGhjM05jYmlBcUlHbDBjMlZzWmlBb2MzUmhkR2xqWVd4c2VTa2dibTkwSUdGa1pHbHVaeUJoYm5rZ2NISnZkRzkwZVhCcFkyRnNJR1pwWld4a2N5NGdRVzU1SUVOdmNIbERiMjV6ZEhKMVkzUnZjbHh1SUNvZ2VXOTFJR2RwZG1VZ2RHaHBjeUJ0WVhrZ2FHRjJaU0JoSUdCd2IyOXNVMmw2WldBZ2NISnZjR1Z5ZEhrc0lHRnVaQ0IzYVd4c0lHeHZiMnNnWm05eUlHRmNiaUFxSUhCeWIzUnZkSGx3YVdOaGJDQmdaR1Z6ZEhKMVkzUnZjbUFnYjI0Z2FXNXpkR0Z1WTJWeklDaHZjSFJwYjI1aGJDa3VYRzRnS2x4dUlDb2dRSEJoY21GdElIdEdkVzVqZEdsdmJuMGdRMjl3ZVVOdmJuTjBjblZqZEc5eUlFTnZibk4wY25WamRHOXlJSFJvWVhRZ1kyRnVJR0psSUhWelpXUWdkRzhnY21WelpYUXVYRzRnS2lCQWNHRnlZVzBnZTBaMWJtTjBhVzl1ZlNCd2IyOXNaWElnUTNWemRHOXRhWHBoWW14bElIQnZiMnhsY2k1Y2JpQXFMMXh1ZG1GeUlHRmtaRkJ2YjJ4cGJtZFVieUE5SUdaMWJtTjBhVzl1S0VOdmNIbERiMjV6ZEhKMVkzUnZjaXdnY0c5dmJHVnlLU0I3WEc0Z0lIWmhjaUJPWlhkTGJHRnpjeUE5SUVOdmNIbERiMjV6ZEhKMVkzUnZjanRjYmlBZ1RtVjNTMnhoYzNNdWFXNXpkR0Z1WTJWUWIyOXNJRDBnVzEwN1hHNGdJRTVsZDB0c1lYTnpMbWRsZEZCdmIyeGxaQ0E5SUhCdmIyeGxjaUI4ZkNCRVJVWkJWVXhVWDFCUFQweEZVanRjYmlBZ2FXWWdLQ0ZPWlhkTGJHRnpjeTV3YjI5c1UybDZaU2tnZTF4dUlDQWdJRTVsZDB0c1lYTnpMbkJ2YjJ4VGFYcGxJRDBnUkVWR1FWVk1WRjlRVDA5TVgxTkpXa1U3WEc0Z0lIMWNiaUFnVG1WM1MyeGhjM011Y21Wc1pXRnpaU0E5SUhOMFlXNWtZWEprVW1Wc1pXRnpaWEk3WEc0Z0lISmxkSFZ5YmlCT1pYZExiR0Z6Y3p0Y2JuMDdYRzVjYm5aaGNpQlFiMjlzWldSRGJHRnpjeUE5SUh0Y2JpQWdZV1JrVUc5dmJHbHVaMVJ2T2lCaFpHUlFiMjlzYVc1blZHOHNYRzRnSUc5dVpVRnlaM1Z0Wlc1MFVHOXZiR1Z5T2lCdmJtVkJjbWQxYldWdWRGQnZiMnhsY2l4Y2JpQWdkSGR2UVhKbmRXMWxiblJRYjI5c1pYSTZJSFIzYjBGeVozVnRaVzUwVUc5dmJHVnlMRnh1SUNCMGFISmxaVUZ5WjNWdFpXNTBVRzl2YkdWeU9pQjBhSEpsWlVGeVozVnRaVzUwVUc5dmJHVnlMRnh1SUNCbWFYWmxRWEpuZFcxbGJuUlFiMjlzWlhJNklHWnBkbVZCY21kMWJXVnVkRkJ2YjJ4bGNseHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCUWIyOXNaV1JEYkdGemN6dGNiaUpkZlE9PSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RcbiAqL1xuXG4vKiBnbG9iYWxzIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UGx1Z2luVXRpbHMgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpblV0aWxzXCIpO1xudmFyIFJlYWN0Q2hpbGRyZW4gPSByZXF1aXJlKFwiLi9SZWFjdENoaWxkcmVuXCIpO1xudmFyIFJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RDb21wb25lbnRcIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RDb250ZXh0ID0gcmVxdWlyZShcIi4vUmVhY3RDb250ZXh0XCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFZhbGlkYXRvclwiKTtcbnZhciBSZWFjdERPTSA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NXCIpO1xudmFyIFJlYWN0RE9NVGV4dENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NVGV4dENvbXBvbmVudFwiKTtcbnZhciBSZWFjdERlZmF1bHRJbmplY3Rpb24gPSByZXF1aXJlKFwiLi9SZWFjdERlZmF1bHRJbmplY3Rpb25cIik7XG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlSGFuZGxlc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdFBlcmZcIik7XG52YXIgUmVhY3RQcm9wVHlwZXMgPSByZXF1aXJlKFwiLi9SZWFjdFByb3BUeXBlc1wiKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdFJlY29uY2lsZXJcIik7XG52YXIgUmVhY3RTZXJ2ZXJSZW5kZXJpbmcgPSByZXF1aXJlKFwiLi9SZWFjdFNlcnZlclJlbmRlcmluZ1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZmluZERPTU5vZGUgPSByZXF1aXJlKFwiLi9maW5kRE9NTm9kZVwiKTtcbnZhciBvbmx5Q2hpbGQgPSByZXF1aXJlKFwiLi9vbmx5Q2hpbGRcIik7XG5cblJlYWN0RGVmYXVsdEluamVjdGlvbi5pbmplY3QoKTtcblxudmFyIGNyZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudDtcbnZhciBjcmVhdGVGYWN0b3J5ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3Rvcnk7XG52YXIgY2xvbmVFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lRWxlbWVudDtcblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICBjcmVhdGVFbGVtZW50ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUVsZW1lbnQ7XG4gIGNyZWF0ZUZhY3RvcnkgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRmFjdG9yeTtcbiAgY2xvbmVFbGVtZW50ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNsb25lRWxlbWVudDtcbn1cblxudmFyIHJlbmRlciA9IFJlYWN0UGVyZi5tZWFzdXJlKCdSZWFjdCcsICdyZW5kZXInLCBSZWFjdE1vdW50LnJlbmRlcik7XG5cbnZhciBSZWFjdCA9IHtcbiAgQ2hpbGRyZW46IHtcbiAgICBtYXA6IFJlYWN0Q2hpbGRyZW4ubWFwLFxuICAgIGZvckVhY2g6IFJlYWN0Q2hpbGRyZW4uZm9yRWFjaCxcbiAgICBjb3VudDogUmVhY3RDaGlsZHJlbi5jb3VudCxcbiAgICBvbmx5OiBvbmx5Q2hpbGRcbiAgfSxcbiAgQ29tcG9uZW50OiBSZWFjdENvbXBvbmVudCxcbiAgRE9NOiBSZWFjdERPTSxcbiAgUHJvcFR5cGVzOiBSZWFjdFByb3BUeXBlcyxcbiAgaW5pdGlhbGl6ZVRvdWNoRXZlbnRzOiBmdW5jdGlvbihzaG91bGRVc2VUb3VjaCkge1xuICAgIEV2ZW50UGx1Z2luVXRpbHMudXNlVG91Y2hFdmVudHMgPSBzaG91bGRVc2VUb3VjaDtcbiAgfSxcbiAgY3JlYXRlQ2xhc3M6IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3MsXG4gIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsXG4gIGNsb25lRWxlbWVudDogY2xvbmVFbGVtZW50LFxuICBjcmVhdGVGYWN0b3J5OiBjcmVhdGVGYWN0b3J5LFxuICBjcmVhdGVNaXhpbjogZnVuY3Rpb24obWl4aW4pIHtcbiAgICAvLyBDdXJyZW50bHkgYSBub29wLiBXaWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgYW5kIHRyYWNlIG1peGlucy5cbiAgICByZXR1cm4gbWl4aW47XG4gIH0sXG4gIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudDogUmVhY3RNb3VudC5jb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25lbnQsXG4gIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudEJ5SUQ6IFJlYWN0TW91bnQuY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50QnlJRCxcbiAgZmluZERPTU5vZGU6IGZpbmRET01Ob2RlLFxuICByZW5kZXI6IHJlbmRlcixcbiAgcmVuZGVyVG9TdHJpbmc6IFJlYWN0U2VydmVyUmVuZGVyaW5nLnJlbmRlclRvU3RyaW5nLFxuICByZW5kZXJUb1N0YXRpY01hcmt1cDogUmVhY3RTZXJ2ZXJSZW5kZXJpbmcucmVuZGVyVG9TdGF0aWNNYXJrdXAsXG4gIHVubW91bnRDb21wb25lbnRBdE5vZGU6IFJlYWN0TW91bnQudW5tb3VudENvbXBvbmVudEF0Tm9kZSxcbiAgaXNWYWxpZEVsZW1lbnQ6IFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCxcbiAgd2l0aENvbnRleHQ6IFJlYWN0Q29udGV4dC53aXRoQ29udGV4dCxcblxuICAvLyBIb29rIGZvciBKU1ggc3ByZWFkLCBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcgZWxzZS5cbiAgX19zcHJlYWQ6IGFzc2lnblxufTtcblxuLy8gSW5qZWN0IHRoZSBydW50aW1lIGludG8gYSBkZXZ0b29scyBnbG9iYWwgaG9vayByZWdhcmRsZXNzIG9mIGJyb3dzZXIuXG4vLyBBbGxvd3MgZm9yIGRlYnVnZ2luZyB3aGVuIHRoZSBob29rIGlzIGluamVjdGVkIG9uIHRoZSBwYWdlLlxuaWYgKFxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJyAmJlxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmluamVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uaW5qZWN0KHtcbiAgICBDdXJyZW50T3duZXI6IFJlYWN0Q3VycmVudE93bmVyLFxuICAgIEluc3RhbmNlSGFuZGxlczogUmVhY3RJbnN0YW5jZUhhbmRsZXMsXG4gICAgTW91bnQ6IFJlYWN0TW91bnQsXG4gICAgUmVjb25jaWxlcjogUmVhY3RSZWNvbmNpbGVyLFxuICAgIFRleHRDb21wb25lbnQ6IFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICB9KTtcbn1cblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICB2YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcbiAgaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiB3aW5kb3cudG9wID09PSB3aW5kb3cuc2VsZikge1xuXG4gICAgLy8gSWYgd2UncmUgaW4gQ2hyb21lLCBsb29rIGZvciB0aGUgZGV2dG9vbHMgbWFya2VyIGFuZCBwcm92aWRlIGEgZG93bmxvYWRcbiAgICAvLyBsaW5rIGlmIG5vdCBpbnN0YWxsZWQuXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSkge1xuICAgICAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoXG4gICAgICAgICAgJ0Rvd25sb2FkIHRoZSBSZWFjdCBEZXZUb29scyBmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTogJyArXG4gICAgICAgICAgJ2h0dHBzOi8vZmIubWUvcmVhY3QtZGV2dG9vbHMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGV4cGVjdGVkRmVhdHVyZXMgPSBbXG4gICAgICAvLyBzaGltc1xuICAgICAgQXJyYXkuaXNBcnJheSxcbiAgICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeSxcbiAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLFxuICAgICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YsXG4gICAgICBBcnJheS5wcm90b3R5cGUubWFwLFxuICAgICAgRGF0ZS5ub3csXG4gICAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCxcbiAgICAgIE9iamVjdC5rZXlzLFxuICAgICAgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCxcbiAgICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSxcblxuICAgICAgLy8gc2hhbXNcbiAgICAgIE9iamVjdC5jcmVhdGUsXG4gICAgICBPYmplY3QuZnJlZXplXG4gICAgXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRGZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFleHBlY3RlZEZlYXR1cmVzW2ldKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ09uZSBvciBtb3JlIEVTNSBzaGltL3NoYW1zIGV4cGVjdGVkIGJ5IFJlYWN0IGFyZSBub3QgYXZhaWxhYmxlOiAnICtcbiAgICAgICAgICAnaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLXBvbHlmaWxscydcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlYWN0LnZlcnNpb24gPSAnMC4xMy4zJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1F1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRGeHVJQ292WEc1Y2JpOHFJR2RzYjJKaGJITWdYMTlTUlVGRFZGOUVSVlpVVDA5TVUxOUhURTlDUVV4ZlNFOVBTMTlmS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnUlhabGJuUlFiSFZuYVc1VmRHbHNjeUE5SUhKbGNYVnBjbVVvWENJdUwwVjJaVzUwVUd4MVoybHVWWFJwYkhOY0lpazdYRzUyWVhJZ1VtVmhZM1JEYUdsc1pISmxiaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUTJocGJHUnlaVzVjSWlrN1hHNTJZWElnVW1WaFkzUkRiMjF3YjI1bGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU52YlhCdmJtVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFTnNZWE56SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRGJHRnpjMXdpS1R0Y2JuWmhjaUJTWldGamRFTnZiblJsZUhRZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiblJsZUhSY0lpazdYRzUyWVhJZ1VtVmhZM1JEZFhKeVpXNTBUM2R1WlhJZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTjFjbkpsYm5SUGQyNWxjbHdpS1R0Y2JuWmhjaUJTWldGamRFVnNaVzFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFVnNaVzFsYm5SY0lpazdYRzUyWVhJZ1VtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlYQ0lwTzF4dWRtRnlJRkpsWVdOMFJFOU5JRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JFVDAxY0lpazdYRzUyWVhJZ1VtVmhZM1JFVDAxVVpYaDBRMjl0Y0c5dVpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JFVDAxVVpYaDBRMjl0Y0c5dVpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFJHVm1ZWFZzZEVsdWFtVmpkR2x2YmlBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJHVm1ZWFZzZEVsdWFtVmpkR2x2Ymx3aUtUdGNiblpoY2lCU1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWelhDSXBPMXh1ZG1GeUlGSmxZV04wVFc5MWJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTF2ZFc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wVUdWeVppQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVR1Z5Wmx3aUtUdGNiblpoY2lCU1pXRmpkRkJ5YjNCVWVYQmxjeUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVUhKdmNGUjVjR1Z6WENJcE8xeHVkbUZ5SUZKbFlXTjBVbVZqYjI1amFXeGxjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVW1WamIyNWphV3hsY2x3aUtUdGNiblpoY2lCU1pXRmpkRk5sY25abGNsSmxibVJsY21sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVMlZ5ZG1WeVVtVnVaR1Z5YVc1blhDSXBPMXh1WEc1MllYSWdZWE56YVdkdUlEMGdjbVZ4ZFdseVpTaGNJaTR2VDJKcVpXTjBMbUZ6YzJsbmJsd2lLVHRjYm5aaGNpQm1hVzVrUkU5TlRtOWtaU0E5SUhKbGNYVnBjbVVvWENJdUwyWnBibVJFVDAxT2IyUmxYQ0lwTzF4dWRtRnlJRzl1YkhsRGFHbHNaQ0E5SUhKbGNYVnBjbVVvWENJdUwyOXViSGxEYUdsc1pGd2lLVHRjYmx4dVVtVmhZM1JFWldaaGRXeDBTVzVxWldOMGFXOXVMbWx1YW1WamRDZ3BPMXh1WEc1MllYSWdZM0psWVhSbFJXeGxiV1Z1ZENBOUlGSmxZV04wUld4bGJXVnVkQzVqY21WaGRHVkZiR1Z0Wlc1ME8xeHVkbUZ5SUdOeVpXRjBaVVpoWTNSdmNua2dQU0JTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUm1GamRHOXllVHRjYm5aaGNpQmpiRzl1WlVWc1pXMWxiblFnUFNCU1pXRmpkRVZzWlcxbGJuUXVZMnh2Ym1WRmJHVnRaVzUwTzF4dVhHNXBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUdOeVpXRjBaVVZzWlcxbGJuUWdQU0JTWldGamRFVnNaVzFsYm5SV1lXeHBaR0YwYjNJdVkzSmxZWFJsUld4bGJXVnVkRHRjYmlBZ1kzSmxZWFJsUm1GamRHOXllU0E5SUZKbFlXTjBSV3hsYldWdWRGWmhiR2xrWVhSdmNpNWpjbVZoZEdWR1lXTjBiM0o1TzF4dUlDQmpiRzl1WlVWc1pXMWxiblFnUFNCU1pXRmpkRVZzWlcxbGJuUldZV3hwWkdGMGIzSXVZMnh2Ym1WRmJHVnRaVzUwTzF4dWZWeHVYRzUyWVhJZ2NtVnVaR1Z5SUQwZ1VtVmhZM1JRWlhKbUxtMWxZWE4xY21Vb0oxSmxZV04wSnl3Z0ozSmxibVJsY2ljc0lGSmxZV04wVFc5MWJuUXVjbVZ1WkdWeUtUdGNibHh1ZG1GeUlGSmxZV04wSUQwZ2UxeHVJQ0JEYUdsc1pISmxiam9nZTF4dUlDQWdJRzFoY0RvZ1VtVmhZM1JEYUdsc1pISmxiaTV0WVhBc1hHNGdJQ0FnWm05eVJXRmphRG9nVW1WaFkzUkRhR2xzWkhKbGJpNW1iM0pGWVdOb0xGeHVJQ0FnSUdOdmRXNTBPaUJTWldGamRFTm9hV3hrY21WdUxtTnZkVzUwTEZ4dUlDQWdJRzl1YkhrNklHOXViSGxEYUdsc1pGeHVJQ0I5TEZ4dUlDQkRiMjF3YjI1bGJuUTZJRkpsWVdOMFEyOXRjRzl1Wlc1MExGeHVJQ0JFVDAwNklGSmxZV04wUkU5TkxGeHVJQ0JRY205d1ZIbHdaWE02SUZKbFlXTjBVSEp2Y0ZSNWNHVnpMRnh1SUNCcGJtbDBhV0ZzYVhwbFZHOTFZMmhGZG1WdWRITTZJR1oxYm1OMGFXOXVLSE5vYjNWc1pGVnpaVlJ2ZFdOb0tTQjdYRzRnSUNBZ1JYWmxiblJRYkhWbmFXNVZkR2xzY3k1MWMyVlViM1ZqYUVWMlpXNTBjeUE5SUhOb2IzVnNaRlZ6WlZSdmRXTm9PMXh1SUNCOUxGeHVJQ0JqY21WaGRHVkRiR0Z6Y3pvZ1VtVmhZM1JEYkdGemN5NWpjbVZoZEdWRGJHRnpjeXhjYmlBZ1kzSmxZWFJsUld4bGJXVnVkRG9nWTNKbFlYUmxSV3hsYldWdWRDeGNiaUFnWTJ4dmJtVkZiR1Z0Wlc1ME9pQmpiRzl1WlVWc1pXMWxiblFzWEc0Z0lHTnlaV0YwWlVaaFkzUnZjbms2SUdOeVpXRjBaVVpoWTNSdmNua3NYRzRnSUdOeVpXRjBaVTFwZUdsdU9pQm1kVzVqZEdsdmJpaHRhWGhwYmlrZ2UxeHVJQ0FnSUM4dklFTjFjbkpsYm5Sc2VTQmhJRzV2YjNBdUlGZHBiR3dnWW1VZ2RYTmxaQ0IwYnlCMllXeHBaR0YwWlNCaGJtUWdkSEpoWTJVZ2JXbDRhVzV6TGx4dUlDQWdJSEpsZEhWeWJpQnRhWGhwYmp0Y2JpQWdmU3hjYmlBZ1kyOXVjM1J5ZFdOMFFXNWtVbVZ1WkdWeVEyOXRjRzl1Wlc1ME9pQlNaV0ZqZEUxdmRXNTBMbU52Ym5OMGNuVmpkRUZ1WkZKbGJtUmxja052YlhCdmJtVnVkQ3hjYmlBZ1kyOXVjM1J5ZFdOMFFXNWtVbVZ1WkdWeVEyOXRjRzl1Wlc1MFFubEpSRG9nVW1WaFkzUk5iM1Z1ZEM1amIyNXpkSEoxWTNSQmJtUlNaVzVrWlhKRGIyMXdiMjVsYm5SQ2VVbEVMRnh1SUNCbWFXNWtSRTlOVG05a1pUb2dabWx1WkVSUFRVNXZaR1VzWEc0Z0lISmxibVJsY2pvZ2NtVnVaR1Z5TEZ4dUlDQnlaVzVrWlhKVWIxTjBjbWx1WnpvZ1VtVmhZM1JUWlhKMlpYSlNaVzVrWlhKcGJtY3VjbVZ1WkdWeVZHOVRkSEpwYm1jc1hHNGdJSEpsYm1SbGNsUnZVM1JoZEdsalRXRnlhM1Z3T2lCU1pXRmpkRk5sY25abGNsSmxibVJsY21sdVp5NXlaVzVrWlhKVWIxTjBZWFJwWTAxaGNtdDFjQ3hjYmlBZ2RXNXRiM1Z1ZEVOdmJYQnZibVZ1ZEVGMFRtOWtaVG9nVW1WaFkzUk5iM1Z1ZEM1MWJtMXZkVzUwUTI5dGNHOXVaVzUwUVhST2IyUmxMRnh1SUNCcGMxWmhiR2xrUld4bGJXVnVkRG9nVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwTEZ4dUlDQjNhWFJvUTI5dWRHVjRkRG9nVW1WaFkzUkRiMjUwWlhoMExuZHBkR2hEYjI1MFpYaDBMRnh1WEc0Z0lDOHZJRWh2YjJzZ1ptOXlJRXBUV0NCemNISmxZV1FzSUdSdmJpZDBJSFZ6WlNCMGFHbHpJR1p2Y2lCaGJubDBhR2x1WnlCbGJITmxMbHh1SUNCZlgzTndjbVZoWkRvZ1lYTnphV2R1WEc1OU8xeHVYRzR2THlCSmJtcGxZM1FnZEdobElISjFiblJwYldVZ2FXNTBieUJoSUdSbGRuUnZiMnh6SUdkc2IySmhiQ0JvYjI5cklISmxaMkZ5Wkd4bGMzTWdiMllnWW5KdmQzTmxjaTVjYmk4dklFRnNiRzkzY3lCbWIzSWdaR1ZpZFdkbmFXNW5JSGRvWlc0Z2RHaGxJR2h2YjJzZ2FYTWdhVzVxWldOMFpXUWdiMjRnZEdobElIQmhaMlV1WEc1cFppQW9YRzRnSUhSNWNHVnZaaUJmWDFKRlFVTlVYMFJGVmxSUFQweFRYMGRNVDBKQlRGOUlUMDlMWDE4Z0lUMDlJQ2QxYm1SbFptbHVaV1FuSUNZbVhHNGdJSFI1Y0dWdlppQmZYMUpGUVVOVVgwUkZWbFJQVDB4VFgwZE1UMEpCVEY5SVQwOUxYMTh1YVc1cVpXTjBJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUY5ZlVrVkJRMVJmUkVWV1ZFOVBURk5mUjB4UFFrRk1YMGhQVDB0Zlh5NXBibXBsWTNRb2UxeHVJQ0FnSUVOMWNuSmxiblJQZDI1bGNqb2dVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSXNYRzRnSUNBZ1NXNXpkR0Z1WTJWSVlXNWtiR1Z6T2lCU1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGN5eGNiaUFnSUNCTmIzVnVkRG9nVW1WaFkzUk5iM1Z1ZEN4Y2JpQWdJQ0JTWldOdmJtTnBiR1Z5T2lCU1pXRmpkRkpsWTI5dVkybHNaWElzWEc0Z0lDQWdWR1Y0ZEVOdmJYQnZibVZ1ZERvZ1VtVmhZM1JFVDAxVVpYaDBRMjl0Y0c5dVpXNTBYRzRnSUgwcE8xeHVmVnh1WEc1cFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJSFpoY2lCRmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDBWNFpXTjFkR2x2YmtWdWRtbHliMjV0Wlc1MFhDSXBPMXh1SUNCcFppQW9SWGhsWTNWMGFXOXVSVzUyYVhKdmJtMWxiblF1WTJGdVZYTmxSRTlOSUNZbUlIZHBibVJ2ZHk1MGIzQWdQVDA5SUhkcGJtUnZkeTV6Wld4bUtTQjdYRzVjYmlBZ0lDQXZMeUJKWmlCM1pTZHlaU0JwYmlCRGFISnZiV1VzSUd4dmIyc2dabTl5SUhSb1pTQmtaWFowYjI5c2N5QnRZWEpyWlhJZ1lXNWtJSEJ5YjNacFpHVWdZU0JrYjNkdWJHOWhaRnh1SUNBZ0lDOHZJR3hwYm1zZ2FXWWdibTkwSUdsdWMzUmhiR3hsWkM1Y2JpQWdJQ0JwWmlBb2JtRjJhV2RoZEc5eUxuVnpaWEpCWjJWdWRDNXBibVJsZUU5bUtDZERhSEp2YldVbktTQStJQzB4S1NCN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlGOWZVa1ZCUTFSZlJFVldWRTlQVEZOZlIweFBRa0ZNWDBoUFQwdGZYeUE5UFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVrWldKMVp5aGNiaUFnSUNBZ0lDQWdJQ0FuUkc5M2JteHZZV1FnZEdobElGSmxZV04wSUVSbGRsUnZiMnh6SUdadmNpQmhJR0psZEhSbGNpQmtaWFpsYkc5d2JXVnVkQ0JsZUhCbGNtbGxibU5sT2lBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuYUhSMGNITTZMeTltWWk1dFpTOXlaV0ZqZEMxa1pYWjBiMjlzY3lkY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdaWGh3WldOMFpXUkdaV0YwZFhKbGN5QTlJRnRjYmlBZ0lDQWdJQzh2SUhOb2FXMXpYRzRnSUNBZ0lDQkJjbkpoZVM1cGMwRnljbUY1TEZ4dUlDQWdJQ0FnUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbVYyWlhKNUxGeHVJQ0FnSUNBZ1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG1admNrVmhZMmdzWEc0Z0lDQWdJQ0JCY25KaGVTNXdjbTkwYjNSNWNHVXVhVzVrWlhoUFppeGNiaUFnSUNBZ0lFRnljbUY1TG5CeWIzUnZkSGx3WlM1dFlYQXNYRzRnSUNBZ0lDQkVZWFJsTG01dmR5eGNiaUFnSUNBZ0lFWjFibU4wYVc5dUxuQnliM1J2ZEhsd1pTNWlhVzVrTEZ4dUlDQWdJQ0FnVDJKcVpXTjBMbXRsZVhNc1hHNGdJQ0FnSUNCVGRISnBibWN1Y0hKdmRHOTBlWEJsTG5Od2JHbDBMRnh1SUNBZ0lDQWdVM1J5YVc1bkxuQnliM1J2ZEhsd1pTNTBjbWx0TEZ4dVhHNGdJQ0FnSUNBdkx5QnphR0Z0YzF4dUlDQWdJQ0FnVDJKcVpXTjBMbU55WldGMFpTeGNiaUFnSUNBZ0lFOWlhbVZqZEM1bWNtVmxlbVZjYmlBZ0lDQmRPMXh1WEc0Z0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0JsZUhCbFkzUmxaRVpsWVhSMWNtVnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9JV1Y0Y0dWamRHVmtSbVZoZEhWeVpYTmJhVjBwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhjYmlBZ0lDQWdJQ0FnSUNBblQyNWxJRzl5SUcxdmNtVWdSVk0xSUhOb2FXMHZjMmhoYlhNZ1pYaHdaV04wWldRZ1lua2dVbVZoWTNRZ1lYSmxJRzV2ZENCaGRtRnBiR0ZpYkdVNklDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkb2RIUndjem92TDJaaUxtMWxMM0psWVdOMExYZGhjbTVwYm1jdGNHOXNlV1pwYkd4ekoxeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYm4xY2JseHVVbVZoWTNRdWRtVnljMmx2YmlBOUlDY3dMakV6TGpNbk8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOME8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZmluZERPTU5vZGUgPSByZXF1aXJlKFwiLi9maW5kRE9NTm9kZVwiKTtcblxudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0ge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgRE9NIG5vZGUgcmVuZGVyZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRoZSByb290IG5vZGUgb2YgdGhpcyBjb21wb25lbnQuXG4gICAqIEBmaW5hbFxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBnZXRET01Ob2RlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmluZERPTU5vZGUodGhpcyk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpbkh1YlwiKTtcbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0gcmVxdWlyZShcIi4vRXZlbnRQbHVnaW5SZWdpc3RyeVwiKTtcbnZhciBSZWFjdEV2ZW50RW1pdHRlck1peGluID0gcmVxdWlyZShcIi4vUmVhY3RFdmVudEVtaXR0ZXJNaXhpblwiKTtcbnZhciBWaWV3cG9ydE1ldHJpY3MgPSByZXF1aXJlKFwiLi9WaWV3cG9ydE1ldHJpY3NcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJlKFwiLi9pc0V2ZW50U3VwcG9ydGVkXCIpO1xuXG4vKipcbiAqIFN1bW1hcnkgb2YgYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgZXZlbnQgaGFuZGxpbmc6XG4gKlxuICogIC0gVG9wLWxldmVsIGRlbGVnYXRpb24gaXMgdXNlZCB0byB0cmFwIG1vc3QgbmF0aXZlIGJyb3dzZXIgZXZlbnRzLiBUaGlzXG4gKiAgICBtYXkgb25seSBvY2N1ciBpbiB0aGUgbWFpbiB0aHJlYWQgYW5kIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZlxuICogICAgUmVhY3RFdmVudExpc3RlbmVyLCB3aGljaCBpcyBpbmplY3RlZCBhbmQgY2FuIHRoZXJlZm9yZSBzdXBwb3J0IHBsdWdnYWJsZVxuICogICAgZXZlbnQgc291cmNlcy4gVGhpcyBpcyB0aGUgb25seSB3b3JrIHRoYXQgb2NjdXJzIGluIHRoZSBtYWluIHRocmVhZC5cbiAqXG4gKiAgLSBXZSBub3JtYWxpemUgYW5kIGRlLWR1cGxpY2F0ZSBldmVudHMgdG8gYWNjb3VudCBmb3IgYnJvd3NlciBxdWlya3MuIFRoaXNcbiAqICAgIG1heSBiZSBkb25lIGluIHRoZSB3b3JrZXIgdGhyZWFkLlxuICpcbiAqICAtIEZvcndhcmQgdGhlc2UgbmF0aXZlIGV2ZW50cyAod2l0aCB0aGUgYXNzb2NpYXRlZCB0b3AtbGV2ZWwgdHlwZSB1c2VkIHRvXG4gKiAgICB0cmFwIGl0KSB0byBgRXZlbnRQbHVnaW5IdWJgLCB3aGljaCBpbiB0dXJuIHdpbGwgYXNrIHBsdWdpbnMgaWYgdGhleSB3YW50XG4gKiAgICB0byBleHRyYWN0IGFueSBzeW50aGV0aWMgZXZlbnRzLlxuICpcbiAqICAtIFRoZSBgRXZlbnRQbHVnaW5IdWJgIHdpbGwgdGhlbiBwcm9jZXNzIGVhY2ggZXZlbnQgYnkgYW5ub3RhdGluZyB0aGVtIHdpdGhcbiAqICAgIFwiZGlzcGF0Y2hlc1wiLCBhIHNlcXVlbmNlIG9mIGxpc3RlbmVycyBhbmQgSURzIHRoYXQgY2FyZSBhYm91dCB0aGF0IGV2ZW50LlxuICpcbiAqICAtIFRoZSBgRXZlbnRQbHVnaW5IdWJgIHRoZW4gZGlzcGF0Y2hlcyB0aGUgZXZlbnRzLlxuICpcbiAqIE92ZXJ2aWV3IG9mIFJlYWN0IGFuZCB0aGUgZXZlbnQgc3lzdGVtOlxuICpcbiAqICstLS0tLS0tLS0tLS0rICAgIC5cbiAqIHwgICAgRE9NICAgICB8ICAgIC5cbiAqICstLS0tLS0tLS0tLS0rICAgIC5cbiAqICAgICAgIHwgICAgICAgICAgIC5cbiAqICAgICAgIHYgICAgICAgICAgIC5cbiAqICstLS0tLS0tLS0tLS0rICAgIC5cbiAqIHwgUmVhY3RFdmVudCB8ICAgIC5cbiAqIHwgIExpc3RlbmVyICB8ICAgIC5cbiAqICstLS0tLS0tLS0tLS0rICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgICstLS0tLS0tLSt8U2ltcGxlRXZlbnR8XG4gKiAgICAgICB8ICAgICAgICAgICAuICAgICAgICAgICAgICAgfCAgICAgICAgIHxQbHVnaW4gICAgIHxcbiAqICstLS0tLXwtLS0tLS0rICAgIC4gICAgICAgICAgICAgICB2ICAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogfCAgICAgfCAgICAgIHwgICAgLiAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tK1xuICogfCAgICAgKy0tLS0tLS0tLS0tLi0tLT58RXZlbnRQbHVnaW5IdWJ8ICAgICAgICAgICAgICAgICAgICB8ICAgIEV2ZW50ICAgfFxuICogfCAgICAgICAgICAgIHwgICAgLiAgICB8ICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0rICB8IFByb3BhZ2F0b3JzfFxuICogfCBSZWFjdEV2ZW50IHwgICAgLiAgICB8ICAgICAgICAgICAgICB8ICAgICB8VGFwRXZlbnQgICB8ICB8LS0tLS0tLS0tLS0tfFxuICogfCAgRW1pdHRlciAgIHwgICAgLiAgICB8ICAgICAgICAgICAgICB8PC0tLSt8UGx1Z2luICAgICB8ICB8b3RoZXIgcGx1Z2lufFxuICogfCAgICAgICAgICAgIHwgICAgLiAgICB8ICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0rICB8ICB1dGlsaXRpZXMgfFxuICogfCAgICAgKy0tLS0tLS0tLS0tLi0tLT58ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tK1xuICogfCAgICAgfCAgICAgIHwgICAgLiAgICArLS0tLS0tLS0tLS0tLS0rXG4gKiArLS0tLS18LS0tLS0tKyAgICAuICAgICAgICAgICAgICAgIF4gICAgICAgICstLS0tLS0tLS0tLStcbiAqICAgICAgIHwgICAgICAgICAgIC4gICAgICAgICAgICAgICAgfCAgICAgICAgfEVudGVyL0xlYXZlfFxuICogICAgICAgKyAgICAgICAgICAgLiAgICAgICAgICAgICAgICArLS0tLS0tLSt8UGx1Z2luICAgICB8XG4gKiArLS0tLS0tLS0tLS0tLSsgICAuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbiAqIHwgYXBwbGljYXRpb24gfCAgIC5cbiAqIHwtLS0tLS0tLS0tLS0tfCAgIC5cbiAqIHwgICAgICAgICAgICAgfCAgIC5cbiAqIHwgICAgICAgICAgICAgfCAgIC5cbiAqICstLS0tLS0tLS0tLS0tKyAgIC5cbiAqICAgICAgICAgICAgICAgICAgIC5cbiAqICAgIFJlYWN0IENvcmUgICAgIC4gIEdlbmVyYWwgUHVycG9zZSBFdmVudCBQbHVnaW4gU3lzdGVtXG4gKi9cblxudmFyIGFscmVhZHlMaXN0ZW5pbmdUbyA9IHt9O1xudmFyIGlzTW9uaXRvcmluZ1Njcm9sbFZhbHVlID0gZmFsc2U7XG52YXIgcmVhY3RUb3BMaXN0ZW5lcnNDb3VudGVyID0gMDtcblxuLy8gRm9yIGV2ZW50cyBsaWtlICdzdWJtaXQnIHdoaWNoIGRvbid0IGNvbnNpc3RlbnRseSBidWJibGUgKHdoaWNoIHdlIHRyYXAgYXQgYVxuLy8gbG93ZXIgbm9kZSB0aGFuIGBkb2N1bWVudGApLCBiaW5kaW5nIGF0IGBkb2N1bWVudGAgd291bGQgY2F1c2UgZHVwbGljYXRlXG4vLyBldmVudHMgc28gd2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGhlcmVcbnZhciB0b3BFdmVudE1hcHBpbmcgPSB7XG4gIHRvcEJsdXI6ICdibHVyJyxcbiAgdG9wQ2hhbmdlOiAnY2hhbmdlJyxcbiAgdG9wQ2xpY2s6ICdjbGljaycsXG4gIHRvcENvbXBvc2l0aW9uRW5kOiAnY29tcG9zaXRpb25lbmQnLFxuICB0b3BDb21wb3NpdGlvblN0YXJ0OiAnY29tcG9zaXRpb25zdGFydCcsXG4gIHRvcENvbXBvc2l0aW9uVXBkYXRlOiAnY29tcG9zaXRpb251cGRhdGUnLFxuICB0b3BDb250ZXh0TWVudTogJ2NvbnRleHRtZW51JyxcbiAgdG9wQ29weTogJ2NvcHknLFxuICB0b3BDdXQ6ICdjdXQnLFxuICB0b3BEb3VibGVDbGljazogJ2RibGNsaWNrJyxcbiAgdG9wRHJhZzogJ2RyYWcnLFxuICB0b3BEcmFnRW5kOiAnZHJhZ2VuZCcsXG4gIHRvcERyYWdFbnRlcjogJ2RyYWdlbnRlcicsXG4gIHRvcERyYWdFeGl0OiAnZHJhZ2V4aXQnLFxuICB0b3BEcmFnTGVhdmU6ICdkcmFnbGVhdmUnLFxuICB0b3BEcmFnT3ZlcjogJ2RyYWdvdmVyJyxcbiAgdG9wRHJhZ1N0YXJ0OiAnZHJhZ3N0YXJ0JyxcbiAgdG9wRHJvcDogJ2Ryb3AnLFxuICB0b3BGb2N1czogJ2ZvY3VzJyxcbiAgdG9wSW5wdXQ6ICdpbnB1dCcsXG4gIHRvcEtleURvd246ICdrZXlkb3duJyxcbiAgdG9wS2V5UHJlc3M6ICdrZXlwcmVzcycsXG4gIHRvcEtleVVwOiAna2V5dXAnLFxuICB0b3BNb3VzZURvd246ICdtb3VzZWRvd24nLFxuICB0b3BNb3VzZU1vdmU6ICdtb3VzZW1vdmUnLFxuICB0b3BNb3VzZU91dDogJ21vdXNlb3V0JyxcbiAgdG9wTW91c2VPdmVyOiAnbW91c2VvdmVyJyxcbiAgdG9wTW91c2VVcDogJ21vdXNldXAnLFxuICB0b3BQYXN0ZTogJ3Bhc3RlJyxcbiAgdG9wU2Nyb2xsOiAnc2Nyb2xsJyxcbiAgdG9wU2VsZWN0aW9uQ2hhbmdlOiAnc2VsZWN0aW9uY2hhbmdlJyxcbiAgdG9wVGV4dElucHV0OiAndGV4dElucHV0JyxcbiAgdG9wVG91Y2hDYW5jZWw6ICd0b3VjaGNhbmNlbCcsXG4gIHRvcFRvdWNoRW5kOiAndG91Y2hlbmQnLFxuICB0b3BUb3VjaE1vdmU6ICd0b3VjaG1vdmUnLFxuICB0b3BUb3VjaFN0YXJ0OiAndG91Y2hzdGFydCcsXG4gIHRvcFdoZWVsOiAnd2hlZWwnXG59O1xuXG4vKipcbiAqIFRvIGVuc3VyZSBubyBjb25mbGljdHMgd2l0aCBvdGhlciBwb3RlbnRpYWwgUmVhY3QgaW5zdGFuY2VzIG9uIHRoZSBwYWdlXG4gKi9cbnZhciB0b3BMaXN0ZW5lcnNJREtleSA9ICdfcmVhY3RMaXN0ZW5lcnNJRCcgKyBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMik7XG5cbmZ1bmN0aW9uIGdldExpc3RlbmluZ0ZvckRvY3VtZW50KG1vdW50QXQpIHtcbiAgLy8gSW4gSUU4LCBgbW91bnRBdGAgaXMgYSBob3N0IG9iamVjdCBhbmQgZG9lc24ndCBoYXZlIGBoYXNPd25Qcm9wZXJ0eWBcbiAgLy8gZGlyZWN0bHkuXG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vdW50QXQsIHRvcExpc3RlbmVyc0lES2V5KSkge1xuICAgIG1vdW50QXRbdG9wTGlzdGVuZXJzSURLZXldID0gcmVhY3RUb3BMaXN0ZW5lcnNDb3VudGVyKys7XG4gICAgYWxyZWFkeUxpc3RlbmluZ1RvW21vdW50QXRbdG9wTGlzdGVuZXJzSURLZXldXSA9IHt9O1xuICB9XG4gIHJldHVybiBhbHJlYWR5TGlzdGVuaW5nVG9bbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV1dO1xufVxuXG4vKipcbiAqIGBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJgIGlzIHVzZWQgdG8gYXR0YWNoIHRvcC1sZXZlbCBldmVudCBsaXN0ZW5lcnMuIEZvclxuICogZXhhbXBsZTpcbiAqXG4gKiAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5wdXRMaXN0ZW5lcignbXlJRCcsICdvbkNsaWNrJywgbXlGdW5jdGlvbik7XG4gKlxuICogVGhpcyB3b3VsZCBhbGxvY2F0ZSBhIFwicmVnaXN0cmF0aW9uXCIgb2YgYCgnb25DbGljaycsIG15RnVuY3Rpb24pYCBvbiAnbXlJRCcuXG4gKlxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSBhc3NpZ24oe30sIFJlYWN0RXZlbnRFbWl0dGVyTWl4aW4sIHtcblxuICAvKipcbiAgICogSW5qZWN0YWJsZSBldmVudCBiYWNrZW5kXG4gICAqL1xuICBSZWFjdEV2ZW50TGlzdGVuZXI6IG51bGwsXG5cbiAgaW5qZWN0aW9uOiB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFJlYWN0RXZlbnRMaXN0ZW5lclxuICAgICAqL1xuICAgIGluamVjdFJlYWN0RXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24oUmVhY3RFdmVudExpc3RlbmVyKSB7XG4gICAgICBSZWFjdEV2ZW50TGlzdGVuZXIuc2V0SGFuZGxlVG9wTGV2ZWwoXG4gICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5oYW5kbGVUb3BMZXZlbFxuICAgICAgKTtcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIgPSBSZWFjdEV2ZW50TGlzdGVuZXI7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIHdoZXRoZXIgb3Igbm90IGFueSBjcmVhdGVkIGNhbGxiYWNrcyBzaG91bGQgYmUgZW5hYmxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIFRydWUgaWYgY2FsbGJhY2tzIHNob3VsZCBiZSBlbmFibGVkLlxuICAgKi9cbiAgc2V0RW5hYmxlZDogZnVuY3Rpb24oZW5hYmxlZCkge1xuICAgIGlmIChSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyKSB7XG4gICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGNhbGxiYWNrcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIGlzRW5hYmxlZDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICEhKFxuICAgICAgKFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIgJiYgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci5pc0VuYWJsZWQoKSlcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBXZSBsaXN0ZW4gZm9yIGJ1YmJsZWQgdG91Y2ggZXZlbnRzIG9uIHRoZSBkb2N1bWVudCBvYmplY3QuXG4gICAqXG4gICAqIEZpcmVmb3ggdjguMDEgKGFuZCBwb3NzaWJseSBvdGhlcnMpIGV4aGliaXRlZCBzdHJhbmdlIGJlaGF2aW9yIHdoZW5cbiAgICogbW91bnRpbmcgYG9ubW91c2Vtb3ZlYCBldmVudHMgYXQgc29tZSBub2RlIHRoYXQgd2FzIG5vdCB0aGUgZG9jdW1lbnRcbiAgICogZWxlbWVudC4gVGhlIHN5bXB0b21zIHdlcmUgdGhhdCBpZiB5b3VyIG1vdXNlIGlzIG5vdCBtb3Zpbmcgb3ZlciBzb21ldGhpbmdcbiAgICogY29udGFpbmVkIHdpdGhpbiB0aGF0IG1vdW50IHBvaW50IChmb3IgZXhhbXBsZSBvbiB0aGUgYmFja2dyb3VuZCkgdGhlXG4gICAqIHRvcC1sZXZlbCBsaXN0ZW5lcnMgZm9yIGBvbm1vdXNlbW92ZWAgd29uJ3QgYmUgY2FsbGVkLiBIb3dldmVyLCBpZiB5b3VcbiAgICogcmVnaXN0ZXIgdGhlIGBtb3VzZW1vdmVgIG9uIHRoZSBkb2N1bWVudCBvYmplY3QsIHRoZW4gaXQgd2lsbCBvZiBjb3Vyc2VcbiAgICogY2F0Y2ggYWxsIGBtb3VzZW1vdmVgcy4gVGhpcyBhbG9uZyB3aXRoIGlPUyBxdWlya3MsIGp1c3RpZmllcyByZXN0cmljdGluZ1xuICAgKiB0b3AtbGV2ZWwgbGlzdGVuZXJzIHRvIHRoZSBkb2N1bWVudCBvYmplY3Qgb25seSwgYXQgbGVhc3QgZm9yIHRoZXNlXG4gICAqIG1vdmVtZW50IHR5cGVzIG9mIGV2ZW50cyBhbmQgcG9zc2libHkgYWxsIGV2ZW50cy5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICAgKlxuICAgKiBBbHNvLCBga2V5dXBgL2BrZXlwcmVzc2AvYGtleWRvd25gIGRvIG5vdCBidWJibGUgdG8gdGhlIHdpbmRvdyBvbiBJRSwgYnV0XG4gICAqIHRoZXkgYnViYmxlIHRvIGRvY3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZW50RG9jdW1lbnRIYW5kbGUgRG9jdW1lbnQgd2hpY2ggb3ducyB0aGUgY29udGFpbmVyXG4gICAqL1xuICBsaXN0ZW5UbzogZnVuY3Rpb24ocmVnaXN0cmF0aW9uTmFtZSwgY29udGVudERvY3VtZW50SGFuZGxlKSB7XG4gICAgdmFyIG1vdW50QXQgPSBjb250ZW50RG9jdW1lbnRIYW5kbGU7XG4gICAgdmFyIGlzTGlzdGVuaW5nID0gZ2V0TGlzdGVuaW5nRm9yRG9jdW1lbnQobW91bnRBdCk7XG4gICAgdmFyIGRlcGVuZGVuY2llcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkuXG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuXG4gICAgdmFyIHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXNbaV07XG4gICAgICBpZiAoIShcbiAgICAgICAgICAgIChpc0xpc3RlbmluZy5oYXNPd25Qcm9wZXJ0eShkZXBlbmRlbmN5KSAmJiBpc0xpc3RlbmluZ1tkZXBlbmRlbmN5XSlcbiAgICAgICAgICApKSB7XG4gICAgICAgIGlmIChkZXBlbmRlbmN5ID09PSB0b3BMZXZlbFR5cGVzLnRvcFdoZWVsKSB7XG4gICAgICAgICAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ3doZWVsJykpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlcy50b3BXaGVlbCxcbiAgICAgICAgICAgICAgJ3doZWVsJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ21vdXNld2hlZWwnKSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcFdoZWVsLFxuICAgICAgICAgICAgICAnbW91c2V3aGVlbCcsXG4gICAgICAgICAgICAgIG1vdW50QXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpcmVmb3ggbmVlZHMgdG8gY2FwdHVyZSBhIGRpZmZlcmVudCBtb3VzZSBzY3JvbGwgZXZlbnQuXG4gICAgICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9tL2V2ZW50cy90ZXN0cy9zY3JvbGwuaHRtbFxuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcFdoZWVsLFxuICAgICAgICAgICAgICAnRE9NTW91c2VTY3JvbGwnLFxuICAgICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkZXBlbmRlbmN5ID09PSB0b3BMZXZlbFR5cGVzLnRvcFNjcm9sbCkge1xuXG4gICAgICAgICAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ3Njcm9sbCcsIHRydWUpKSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcFNjcm9sbCxcbiAgICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICAgIG1vdW50QXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlcy50b3BTY3JvbGwsXG4gICAgICAgICAgICAgICdzY3JvbGwnLFxuICAgICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLldJTkRPV19IQU5ETEVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09IHRvcExldmVsVHlwZXMudG9wRm9jdXMgfHxcbiAgICAgICAgICAgIGRlcGVuZGVuY3kgPT09IHRvcExldmVsVHlwZXMudG9wQmx1cikge1xuXG4gICAgICAgICAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2ZvY3VzJywgdHJ1ZSkpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wRm9jdXMsXG4gICAgICAgICAgICAgICdmb2N1cycsXG4gICAgICAgICAgICAgIG1vdW50QXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcEJsdXIsXG4gICAgICAgICAgICAgICdibHVyJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2ZvY3VzaW4nKSkge1xuICAgICAgICAgICAgLy8gSUUgaGFzIGBmb2N1c2luYCBhbmQgYGZvY3Vzb3V0YCBldmVudHMgd2hpY2ggYnViYmxlLlxuICAgICAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAwOC8wNC9kZWxlZ2F0aW5nX3RoZS5odG1sXG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wRm9jdXMsXG4gICAgICAgICAgICAgICdmb2N1c2luJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlcy50b3BCbHVyLFxuICAgICAgICAgICAgICAnZm9jdXNvdXQnLFxuICAgICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBibHVyIGFuZCBmb2N1cyBldmVudCBsaXN0ZW5lcnMgYXJlIG9ubHkgYXR0YWNoZWQgb25jZVxuICAgICAgICAgIGlzTGlzdGVuaW5nW3RvcExldmVsVHlwZXMudG9wQmx1cl0gPSB0cnVlO1xuICAgICAgICAgIGlzTGlzdGVuaW5nW3RvcExldmVsVHlwZXMudG9wRm9jdXNdID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0b3BFdmVudE1hcHBpbmcuaGFzT3duUHJvcGVydHkoZGVwZW5kZW5jeSkpIHtcbiAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoXG4gICAgICAgICAgICBkZXBlbmRlbmN5LFxuICAgICAgICAgICAgdG9wRXZlbnRNYXBwaW5nW2RlcGVuZGVuY3ldLFxuICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpc0xpc3RlbmluZ1tkZXBlbmRlbmN5XSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHRyYXBCdWJibGVkRXZlbnQ6IGZ1bmN0aW9uKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpIHtcbiAgICByZXR1cm4gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgaGFuZGxlckJhc2VOYW1lLFxuICAgICAgaGFuZGxlXG4gICAgKTtcbiAgfSxcblxuICB0cmFwQ2FwdHVyZWRFdmVudDogZnVuY3Rpb24odG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHJldHVybiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgaGFuZGxlckJhc2VOYW1lLFxuICAgICAgaGFuZGxlXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogTGlzdGVucyB0byB3aW5kb3cgc2Nyb2xsIGFuZCByZXNpemUgZXZlbnRzLiBXZSBjYWNoZSBzY3JvbGwgdmFsdWVzIHNvIHRoYXRcbiAgICogYXBwbGljYXRpb24gY29kZSBjYW4gYWNjZXNzIHRoZW0gd2l0aG91dCB0cmlnZ2VyaW5nIHJlZmxvd3MuXG4gICAqXG4gICAqIE5PVEU6IFNjcm9sbCBldmVudHMgZG8gbm90IGJ1YmJsZS5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2RvbS9ldmVudHMvc2Nyb2xsLmh0bWxcbiAgICovXG4gIGVuc3VyZVNjcm9sbFZhbHVlTW9uaXRvcmluZzogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFpc01vbml0b3JpbmdTY3JvbGxWYWx1ZSkge1xuICAgICAgdmFyIHJlZnJlc2ggPSBWaWV3cG9ydE1ldHJpY3MucmVmcmVzaFNjcm9sbFZhbHVlcztcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIubW9uaXRvclNjcm9sbFZhbHVlKHJlZnJlc2gpO1xuICAgICAgaXNNb25pdG9yaW5nU2Nyb2xsVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfSxcblxuICBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3M6IEV2ZW50UGx1Z2luSHViLmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncyxcblxuICByZWdpc3RyYXRpb25OYW1lTW9kdWxlczogRXZlbnRQbHVnaW5IdWIucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMsXG5cbiAgcHV0TGlzdGVuZXI6IEV2ZW50UGx1Z2luSHViLnB1dExpc3RlbmVyLFxuXG4gIGdldExpc3RlbmVyOiBFdmVudFBsdWdpbkh1Yi5nZXRMaXN0ZW5lcixcblxuICBkZWxldGVMaXN0ZW5lcjogRXZlbnRQbHVnaW5IdWIuZGVsZXRlTGlzdGVuZXIsXG5cbiAgZGVsZXRlQWxsTGlzdGVuZXJzOiBFdmVudFBsdWdpbkh1Yi5kZWxldGVBbGxMaXN0ZW5lcnNcblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q2hpbGRSZWNvbmNpbGVyXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoXCIuL1JlYWN0UmVjb25jaWxlclwiKTtcblxudmFyIGZsYXR0ZW5DaGlsZHJlbiA9IHJlcXVpcmUoXCIuL2ZsYXR0ZW5DaGlsZHJlblwiKTtcbnZhciBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudFwiKTtcbnZhciBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50XCIpO1xuXG4vKipcbiAqIFJlYWN0Q2hpbGRSZWNvbmNpbGVyIHByb3ZpZGVzIGhlbHBlcnMgZm9yIGluaXRpYWxpemluZyBvciB1cGRhdGluZyBhIHNldCBvZlxuICogY2hpbGRyZW4uIEl0cyBvdXRwdXQgaXMgc3VpdGFibGUgZm9yIHBhc3NpbmcgaXQgb250byBSZWFjdE11bHRpQ2hpbGQgd2hpY2hcbiAqIGRvZXMgZGlmZmVkIHJlb3JkZXJpbmcgYW5kIGluc2VydGlvbi5cbiAqL1xudmFyIFJlYWN0Q2hpbGRSZWNvbmNpbGVyID0ge1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBcIm1vdW50IGltYWdlXCIgZm9yIGVhY2ggb2YgdGhlIHN1cHBsaWVkIGNoaWxkcmVuLiBJbiB0aGUgY2FzZVxuICAgKiBvZiBgUmVhY3RET01Db21wb25lbnRgLCBhIG1vdW50IGltYWdlIGlzIGEgc3RyaW5nIG9mIG1hcmt1cC5cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXN0ZWRDaGlsZE5vZGVzIE5lc3RlZCBjaGlsZCBtYXBzLlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBBIHNldCBvZiBjaGlsZCBpbnN0YW5jZXMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgaW5zdGFudGlhdGVDaGlsZHJlbjogZnVuY3Rpb24obmVzdGVkQ2hpbGROb2RlcywgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBmbGF0dGVuQ2hpbGRyZW4obmVzdGVkQ2hpbGROb2Rlcyk7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBjaGlsZHJlbikge1xuICAgICAgaWYgKGNoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW25hbWVdO1xuICAgICAgICAvLyBUaGUgcmVuZGVyZWQgY2hpbGRyZW4gbXVzdCBiZSB0dXJuZWQgaW50byBpbnN0YW5jZXMgYXMgdGhleSdyZVxuICAgICAgICAvLyBtb3VudGVkLlxuICAgICAgICB2YXIgY2hpbGRJbnN0YW5jZSA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoY2hpbGQsIG51bGwpO1xuICAgICAgICBjaGlsZHJlbltuYW1lXSA9IGNoaWxkSW5zdGFuY2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcmVuZGVyZWQgY2hpbGRyZW4gYW5kIHJldHVybnMgYSBuZXcgc2V0IG9mIGNoaWxkcmVuLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IHByZXZDaGlsZHJlbiBQcmV2aW91c2x5IGluaXRpYWxpemVkIHNldCBvZiBjaGlsZHJlbi5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0TmVzdGVkQ2hpbGROb2RlcyBOZXN0ZWQgY2hpbGQgbWFwcy5cbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBBIG5ldyBzZXQgb2YgY2hpbGQgaW5zdGFuY2VzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVwZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihcbiAgICBwcmV2Q2hpbGRyZW4sXG4gICAgbmV4dE5lc3RlZENoaWxkTm9kZXMsXG4gICAgdHJhbnNhY3Rpb24sXG4gICAgY29udGV4dCkge1xuICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIGEgd2F5IHRvIHRyYWNrIG1vdmVzIGhlcmUgYnV0IGlmIHdlIHVzZSBpdGVyYXRvcnNcbiAgICAvLyBpbnN0ZWFkIG9mIGZvci4uaW4gd2UgY2FuIHppcCB0aGUgaXRlcmF0b3JzIGFuZCBjaGVjayBpZiBhbiBpdGVtIGhhc1xuICAgIC8vIG1vdmVkLlxuICAgIC8vIFRPRE86IElmIG5vdGhpbmcgaGFzIGNoYW5nZWQsIHJldHVybiB0aGUgcHJldkNoaWxkcmVuIG9iamVjdCBzbyB0aGF0IHdlXG4gICAgLy8gY2FuIHF1aWNrbHkgYmFpbG91dCBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkLlxuICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBmbGF0dGVuQ2hpbGRyZW4obmV4dE5lc3RlZENoaWxkTm9kZXMpO1xuICAgIGlmICghbmV4dENoaWxkcmVuICYmICFwcmV2Q2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbmFtZTtcbiAgICBmb3IgKG5hbWUgaW4gbmV4dENoaWxkcmVuKSB7XG4gICAgICBpZiAoIW5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRyZW4gJiYgcHJldkNoaWxkcmVuW25hbWVdO1xuICAgICAgdmFyIHByZXZFbGVtZW50ID0gcHJldkNoaWxkICYmIHByZXZDaGlsZC5fY3VycmVudEVsZW1lbnQ7XG4gICAgICB2YXIgbmV4dEVsZW1lbnQgPSBuZXh0Q2hpbGRyZW5bbmFtZV07XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KSkge1xuICAgICAgICBSZWFjdFJlY29uY2lsZXIucmVjZWl2ZUNvbXBvbmVudChcbiAgICAgICAgICBwcmV2Q2hpbGQsIG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dFxuICAgICAgICApO1xuICAgICAgICBuZXh0Q2hpbGRyZW5bbmFtZV0gPSBwcmV2Q2hpbGQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJldkNoaWxkKSB7XG4gICAgICAgICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQocHJldkNoaWxkLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgY2hpbGQgbXVzdCBiZSBpbnN0YW50aWF0ZWQgYmVmb3JlIGl0J3MgbW91bnRlZC5cbiAgICAgICAgdmFyIG5leHRDaGlsZEluc3RhbmNlID0gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChcbiAgICAgICAgICBuZXh0RWxlbWVudCxcbiAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICAgIG5leHRDaGlsZHJlbltuYW1lXSA9IG5leHRDaGlsZEluc3RhbmNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBVbm1vdW50IGNoaWxkcmVuIHRoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50LlxuICAgIGZvciAobmFtZSBpbiBwcmV2Q2hpbGRyZW4pIHtcbiAgICAgIGlmIChwcmV2Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICAhKG5leHRDaGlsZHJlbiAmJiBuZXh0Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpKSB7XG4gICAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHByZXZDaGlsZHJlbltuYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0Q2hpbGRyZW47XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVubW91bnRzIGFsbCByZW5kZXJlZCBjaGlsZHJlbi4gVGhpcyBzaG91bGQgYmUgdXNlZCB0byBjbGVhbiB1cCBjaGlsZHJlblxuICAgKiB3aGVuIHRoaXMgY29tcG9uZW50IGlzIHVubW91bnRlZC5cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSByZW5kZXJlZENoaWxkcmVuIFByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgc2V0IG9mIGNoaWxkcmVuLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVubW91bnRDaGlsZHJlbjogZnVuY3Rpb24ocmVuZGVyZWRDaGlsZHJlbikge1xuICAgIGZvciAodmFyIG5hbWUgaW4gcmVuZGVyZWRDaGlsZHJlbikge1xuICAgICAgdmFyIHJlbmRlcmVkQ2hpbGQgPSByZW5kZXJlZENoaWxkcmVuW25hbWVdO1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQocmVuZGVyZWRDaGlsZCk7XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDaGlsZFJlY29uY2lsZXI7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q2hpbGRyZW5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoXCIuL1Bvb2xlZENsYXNzXCIpO1xudmFyIFJlYWN0RnJhZ21lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEZyYWdtZW50XCIpO1xuXG52YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IHJlcXVpcmUoXCIuL3RyYXZlcnNlQWxsQ2hpbGRyZW5cIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciB0d29Bcmd1bWVudFBvb2xlciA9IFBvb2xlZENsYXNzLnR3b0FyZ3VtZW50UG9vbGVyO1xudmFyIHRocmVlQXJndW1lbnRQb29sZXIgPSBQb29sZWRDbGFzcy50aHJlZUFyZ3VtZW50UG9vbGVyO1xuXG4vKipcbiAqIFBvb2xlZENsYXNzIHJlcHJlc2VudGluZyB0aGUgYm9va2tlZXBpbmcgYXNzb2NpYXRlZCB3aXRoIHBlcmZvcm1pbmcgYSBjaGlsZFxuICogdHJhdmVyc2FsLiBBbGxvd3MgYXZvaWRpbmcgYmluZGluZyBjYWxsYmFja3MuXG4gKlxuICogQGNvbnN0cnVjdG9yIEZvckVhY2hCb29rS2VlcGluZ1xuICogQHBhcmFtIHshZnVuY3Rpb259IGZvckVhY2hGdW5jdGlvbiBGdW5jdGlvbiB0byBwZXJmb3JtIHRyYXZlcnNhbCB3aXRoLlxuICogQHBhcmFtIHs/Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCB0byBwZXJmb3JtIGNvbnRleHQgd2l0aC5cbiAqL1xuZnVuY3Rpb24gRm9yRWFjaEJvb2tLZWVwaW5nKGZvckVhY2hGdW5jdGlvbiwgZm9yRWFjaENvbnRleHQpIHtcbiAgdGhpcy5mb3JFYWNoRnVuY3Rpb24gPSBmb3JFYWNoRnVuY3Rpb247XG4gIHRoaXMuZm9yRWFjaENvbnRleHQgPSBmb3JFYWNoQ29udGV4dDtcbn1cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhGb3JFYWNoQm9va0tlZXBpbmcsIHR3b0FyZ3VtZW50UG9vbGVyKTtcblxuZnVuY3Rpb24gZm9yRWFjaFNpbmdsZUNoaWxkKHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUsIGkpIHtcbiAgdmFyIGZvckVhY2hCb29rS2VlcGluZyA9IHRyYXZlcnNlQ29udGV4dDtcbiAgZm9yRWFjaEJvb2tLZWVwaW5nLmZvckVhY2hGdW5jdGlvbi5jYWxsKFxuICAgIGZvckVhY2hCb29rS2VlcGluZy5mb3JFYWNoQ29udGV4dCwgY2hpbGQsIGkpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIHRocm91Z2ggY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuYy5cbiAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHRyYXZlcnNlQ29udGV4dCA9XG4gICAgRm9yRWFjaEJvb2tLZWVwaW5nLmdldFBvb2xlZChmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoU2luZ2xlQ2hpbGQsIHRyYXZlcnNlQ29udGV4dCk7XG4gIEZvckVhY2hCb29rS2VlcGluZy5yZWxlYXNlKHRyYXZlcnNlQ29udGV4dCk7XG59XG5cbi8qKlxuICogUG9vbGVkQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBib29ra2VlcGluZyBhc3NvY2lhdGVkIHdpdGggcGVyZm9ybWluZyBhIGNoaWxkXG4gKiBtYXBwaW5nLiBBbGxvd3MgYXZvaWRpbmcgYmluZGluZyBjYWxsYmFja3MuXG4gKlxuICogQGNvbnN0cnVjdG9yIE1hcEJvb2tLZWVwaW5nXG4gKiBAcGFyYW0geyEqfSBtYXBSZXN1bHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gbWFwRnVuY3Rpb24gRnVuY3Rpb24gdG8gcGVyZm9ybSBtYXBwaW5nIHdpdGguXG4gKiBAcGFyYW0gez8qfSBtYXBDb250ZXh0IENvbnRleHQgdG8gcGVyZm9ybSBtYXBwaW5nIHdpdGguXG4gKi9cbmZ1bmN0aW9uIE1hcEJvb2tLZWVwaW5nKG1hcFJlc3VsdCwgbWFwRnVuY3Rpb24sIG1hcENvbnRleHQpIHtcbiAgdGhpcy5tYXBSZXN1bHQgPSBtYXBSZXN1bHQ7XG4gIHRoaXMubWFwRnVuY3Rpb24gPSBtYXBGdW5jdGlvbjtcbiAgdGhpcy5tYXBDb250ZXh0ID0gbWFwQ29udGV4dDtcbn1cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhNYXBCb29rS2VlcGluZywgdGhyZWVBcmd1bWVudFBvb2xlcik7XG5cbmZ1bmN0aW9uIG1hcFNpbmdsZUNoaWxkSW50b0NvbnRleHQodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSwgaSkge1xuICB2YXIgbWFwQm9va0tlZXBpbmcgPSB0cmF2ZXJzZUNvbnRleHQ7XG4gIHZhciBtYXBSZXN1bHQgPSBtYXBCb29rS2VlcGluZy5tYXBSZXN1bHQ7XG5cbiAgdmFyIGtleVVuaXF1ZSA9ICFtYXBSZXN1bHQuaGFzT3duUHJvcGVydHkobmFtZSk7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIGtleVVuaXF1ZSxcbiAgICAgICdSZWFjdENoaWxkcmVuLm1hcCguLi4pOiBFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksICcgK1xuICAgICAgJ2Alc2AuIENoaWxkIGtleXMgbXVzdCBiZSB1bmlxdWU7IHdoZW4gdHdvIGNoaWxkcmVuIHNoYXJlIGEga2V5LCBvbmx5ICcgK1xuICAgICAgJ3RoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIHVzZWQuJyxcbiAgICAgIG5hbWVcbiAgICApIDogbnVsbCk7XG4gIH1cblxuICBpZiAoa2V5VW5pcXVlKSB7XG4gICAgdmFyIG1hcHBlZENoaWxkID1cbiAgICAgIG1hcEJvb2tLZWVwaW5nLm1hcEZ1bmN0aW9uLmNhbGwobWFwQm9va0tlZXBpbmcubWFwQ29udGV4dCwgY2hpbGQsIGkpO1xuICAgIG1hcFJlc3VsdFtuYW1lXSA9IG1hcHBlZENoaWxkO1xuICB9XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBrZXksIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBUT0RPOiBUaGlzIG1heSBsaWtlbHkgYnJlYWsgYW55IGNhbGxzIHRvIGBSZWFjdENoaWxkcmVuLm1hcGAgdGhhdCB3ZXJlXG4gKiBwcmV2aW91c2x5IHJlbHlpbmcgb24gdGhlIGZhY3QgdGhhdCB3ZSBndWFyZGVkIGFnYWluc3QgbnVsbCBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gbWFwRnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IG1hcENvbnRleHQgQ29udGV4dCBmb3IgbWFwRnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciBtYXBSZXN1bHQgPSB7fTtcbiAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IE1hcEJvb2tLZWVwaW5nLmdldFBvb2xlZChtYXBSZXN1bHQsIGZ1bmMsIGNvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0LCB0cmF2ZXJzZUNvbnRleHQpO1xuICBNYXBCb29rS2VlcGluZy5yZWxlYXNlKHRyYXZlcnNlQ29udGV4dCk7XG4gIHJldHVybiBSZWFjdEZyYWdtZW50LmNyZWF0ZShtYXBSZXN1bHQpO1xufVxuXG5mdW5jdGlvbiBmb3JFYWNoU2luZ2xlQ2hpbGREdW1teSh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lLCBpKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhc1xuICogYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbi5cbiAqL1xuZnVuY3Rpb24gY291bnRDaGlsZHJlbihjaGlsZHJlbiwgY29udGV4dCkge1xuICByZXR1cm4gdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaFNpbmdsZUNoaWxkRHVtbXksIG51bGwpO1xufVxuXG52YXIgUmVhY3RDaGlsZHJlbiA9IHtcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBtYXA6IG1hcENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENoaWxkcmVuO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkRhR2xzWkhKbGJpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUkRhR2xzWkhKbGJseHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRkJ2YjJ4bFpFTnNZWE56SUQwZ2NtVnhkV2x5WlNoY0lpNHZVRzl2YkdWa1EyeGhjM05jSWlrN1hHNTJZWElnVW1WaFkzUkdjbUZuYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSbkpoWjIxbGJuUmNJaWs3WEc1Y2JuWmhjaUIwY21GMlpYSnpaVUZzYkVOb2FXeGtjbVZ1SUQwZ2NtVnhkV2x5WlNoY0lpNHZkSEpoZG1WeWMyVkJiR3hEYUdsc1pISmxibHdpS1R0Y2JuWmhjaUIzWVhKdWFXNW5JRDBnY21WeGRXbHlaU2hjSWk0dmQyRnlibWx1WjF3aUtUdGNibHh1ZG1GeUlIUjNiMEZ5WjNWdFpXNTBVRzl2YkdWeUlEMGdVRzl2YkdWa1EyeGhjM011ZEhkdlFYSm5kVzFsYm5SUWIyOXNaWEk3WEc1MllYSWdkR2h5WldWQmNtZDFiV1Z1ZEZCdmIyeGxjaUE5SUZCdmIyeGxaRU5zWVhOekxuUm9jbVZsUVhKbmRXMWxiblJRYjI5c1pYSTdYRzVjYmk4cUtseHVJQ29nVUc5dmJHVmtRMnhoYzNNZ2NtVndjbVZ6Wlc1MGFXNW5JSFJvWlNCaWIyOXJhMlZsY0dsdVp5QmhjM052WTJsaGRHVmtJSGRwZEdnZ2NHVnlabTl5YldsdVp5QmhJR05vYVd4a1hHNGdLaUIwY21GMlpYSnpZV3d1SUVGc2JHOTNjeUJoZG05cFpHbHVaeUJpYVc1a2FXNW5JR05oYkd4aVlXTnJjeTVjYmlBcVhHNGdLaUJBWTI5dWMzUnlkV04wYjNJZ1JtOXlSV0ZqYUVKdmIydExaV1Z3YVc1blhHNGdLaUJBY0dGeVlXMGdleUZtZFc1amRHbHZibjBnWm05eVJXRmphRVoxYm1OMGFXOXVJRVoxYm1OMGFXOXVJSFJ2SUhCbGNtWnZjbTBnZEhKaGRtVnljMkZzSUhkcGRHZ3VYRzRnS2lCQWNHRnlZVzBnZXo4cWZTQm1iM0pGWVdOb1EyOXVkR1Y0ZENCRGIyNTBaWGgwSUhSdklIQmxjbVp2Y20wZ1kyOXVkR1Y0ZENCM2FYUm9MbHh1SUNvdlhHNW1kVzVqZEdsdmJpQkdiM0pGWVdOb1FtOXZhMHRsWlhCcGJtY29abTl5UldGamFFWjFibU4wYVc5dUxDQm1iM0pGWVdOb1EyOXVkR1Y0ZENrZ2UxeHVJQ0IwYUdsekxtWnZja1ZoWTJoR2RXNWpkR2x2YmlBOUlHWnZja1ZoWTJoR2RXNWpkR2x2Ymp0Y2JpQWdkR2hwY3k1bWIzSkZZV05vUTI5dWRHVjRkQ0E5SUdadmNrVmhZMmhEYjI1MFpYaDBPMXh1ZlZ4dVVHOXZiR1ZrUTJ4aGMzTXVZV1JrVUc5dmJHbHVaMVJ2S0VadmNrVmhZMmhDYjI5clMyVmxjR2x1Wnl3Z2RIZHZRWEpuZFcxbGJuUlFiMjlzWlhJcE8xeHVYRzVtZFc1amRHbHZiaUJtYjNKRllXTm9VMmx1WjJ4bFEyaHBiR1FvZEhKaGRtVnljMlZEYjI1MFpYaDBMQ0JqYUdsc1pDd2dibUZ0WlN3Z2FTa2dlMXh1SUNCMllYSWdabTl5UldGamFFSnZiMnRMWldWd2FXNW5JRDBnZEhKaGRtVnljMlZEYjI1MFpYaDBPMXh1SUNCbWIzSkZZV05vUW05dmEwdGxaWEJwYm1jdVptOXlSV0ZqYUVaMWJtTjBhVzl1TG1OaGJHd29YRzRnSUNBZ1ptOXlSV0ZqYUVKdmIydExaV1Z3YVc1bkxtWnZja1ZoWTJoRGIyNTBaWGgwTENCamFHbHNaQ3dnYVNrN1hHNTlYRzVjYmk4cUtseHVJQ29nU1hSbGNtRjBaWE1nZEdoeWIzVm5hQ0JqYUdsc1pISmxiaUIwYUdGMElHRnlaU0IwZVhCcFkyRnNiSGtnYzNCbFkybG1hV1ZrSUdGeklHQndjbTl3Y3k1amFHbHNaSEpsYm1BdVhHNGdLbHh1SUNvZ1ZHaGxJSEJ5YjNacFpHVmtJR1p2Y2tWaFkyaEdkVzVqS0dOb2FXeGtMQ0JwYm1SbGVDa2dkMmxzYkNCaVpTQmpZV3hzWldRZ1ptOXlJR1ZoWTJoY2JpQXFJR3hsWVdZZ1kyaHBiR1F1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHMvS24wZ1kyaHBiR1J5Wlc0Z1EyaHBiR1J5Wlc0Z2RISmxaU0JqYjI1MFlXbHVaWEl1WEc0Z0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dUtDb3NJR2x1ZENsOUlHWnZja1ZoWTJoR2RXNWpMbHh1SUNvZ1FIQmhjbUZ0SUhzcWZTQm1iM0pGWVdOb1EyOXVkR1Y0ZENCRGIyNTBaWGgwSUdadmNpQm1iM0pGWVdOb1EyOXVkR1Y0ZEM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWm05eVJXRmphRU5vYVd4a2NtVnVLR05vYVd4a2NtVnVMQ0JtYjNKRllXTm9SblZ1WXl3Z1ptOXlSV0ZqYUVOdmJuUmxlSFFwSUh0Y2JpQWdhV1lnS0dOb2FXeGtjbVZ1SUQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZMmhwYkdSeVpXNDdYRzRnSUgxY2JseHVJQ0IyWVhJZ2RISmhkbVZ5YzJWRGIyNTBaWGgwSUQxY2JpQWdJQ0JHYjNKRllXTm9RbTl2YTB0bFpYQnBibWN1WjJWMFVHOXZiR1ZrS0dadmNrVmhZMmhHZFc1akxDQm1iM0pGWVdOb1EyOXVkR1Y0ZENrN1hHNGdJSFJ5WVhabGNuTmxRV3hzUTJocGJHUnlaVzRvWTJocGJHUnlaVzRzSUdadmNrVmhZMmhUYVc1bmJHVkRhR2xzWkN3Z2RISmhkbVZ5YzJWRGIyNTBaWGgwS1R0Y2JpQWdSbTl5UldGamFFSnZiMnRMWldWd2FXNW5MbkpsYkdWaGMyVW9kSEpoZG1WeWMyVkRiMjUwWlhoMEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCUWIyOXNaV1JEYkdGemN5QnlaWEJ5WlhObGJuUnBibWNnZEdobElHSnZiMnRyWldWd2FXNW5JR0Z6YzI5amFXRjBaV1FnZDJsMGFDQndaWEptYjNKdGFXNW5JR0VnWTJocGJHUmNiaUFxSUcxaGNIQnBibWN1SUVGc2JHOTNjeUJoZG05cFpHbHVaeUJpYVc1a2FXNW5JR05oYkd4aVlXTnJjeTVjYmlBcVhHNGdLaUJBWTI5dWMzUnlkV04wYjNJZ1RXRndRbTl2YTB0bFpYQnBibWRjYmlBcUlFQndZWEpoYlNCN0lTcDlJRzFoY0ZKbGMzVnNkQ0JQWW1wbFkzUWdZMjl1ZEdGcGJtbHVaeUIwYUdVZ2IzSmtaWEpsWkNCdFlYQWdiMllnY21WemRXeDBjeTVjYmlBcUlFQndZWEpoYlNCN0lXWjFibU4wYVc5dWZTQnRZWEJHZFc1amRHbHZiaUJHZFc1amRHbHZiaUIwYnlCd1pYSm1iM0p0SUcxaGNIQnBibWNnZDJsMGFDNWNiaUFxSUVCd1lYSmhiU0I3UHlwOUlHMWhjRU52Ym5SbGVIUWdRMjl1ZEdWNGRDQjBieUJ3WlhKbWIzSnRJRzFoY0hCcGJtY2dkMmwwYUM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnVFdGd1FtOXZhMHRsWlhCcGJtY29iV0Z3VW1WemRXeDBMQ0J0WVhCR2RXNWpkR2x2Yml3Z2JXRndRMjl1ZEdWNGRDa2dlMXh1SUNCMGFHbHpMbTFoY0ZKbGMzVnNkQ0E5SUcxaGNGSmxjM1ZzZER0Y2JpQWdkR2hwY3k1dFlYQkdkVzVqZEdsdmJpQTlJRzFoY0VaMWJtTjBhVzl1TzF4dUlDQjBhR2x6TG0xaGNFTnZiblJsZUhRZ1BTQnRZWEJEYjI1MFpYaDBPMXh1ZlZ4dVVHOXZiR1ZrUTJ4aGMzTXVZV1JrVUc5dmJHbHVaMVJ2S0UxaGNFSnZiMnRMWldWd2FXNW5MQ0IwYUhKbFpVRnlaM1Z0Wlc1MFVHOXZiR1Z5S1R0Y2JseHVablZ1WTNScGIyNGdiV0Z3VTJsdVoyeGxRMmhwYkdSSmJuUnZRMjl1ZEdWNGRDaDBjbUYyWlhKelpVTnZiblJsZUhRc0lHTm9hV3hrTENCdVlXMWxMQ0JwS1NCN1hHNGdJSFpoY2lCdFlYQkNiMjlyUzJWbGNHbHVaeUE5SUhSeVlYWmxjbk5sUTI5dWRHVjRkRHRjYmlBZ2RtRnlJRzFoY0ZKbGMzVnNkQ0E5SUcxaGNFSnZiMnRMWldWd2FXNW5MbTFoY0ZKbGMzVnNkRHRjYmx4dUlDQjJZWElnYTJWNVZXNXBjWFZsSUQwZ0lXMWhjRkpsYzNWc2RDNW9ZWE5QZDI1UWNtOXdaWEowZVNodVlXMWxLVHRjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdhMlY1Vlc1cGNYVmxMRnh1SUNBZ0lDQWdKMUpsWVdOMFEyaHBiR1J5Wlc0dWJXRndLQzR1TGlrNklFVnVZMjkxYm5SbGNtVmtJSFIzYnlCamFHbHNaSEpsYmlCM2FYUm9JSFJvWlNCellXMWxJR3RsZVN3Z0p5QXJYRzRnSUNBZ0lDQW5ZQ1Z6WUM0Z1EyaHBiR1FnYTJWNWN5QnRkWE4wSUdKbElIVnVhWEYxWlRzZ2QyaGxiaUIwZDI4Z1kyaHBiR1J5Wlc0Z2MyaGhjbVVnWVNCclpYa3NJRzl1YkhrZ0p5QXJYRzRnSUNBZ0lDQW5kR2hsSUdacGNuTjBJR05vYVd4a0lIZHBiR3dnWW1VZ2RYTmxaQzRuTEZ4dUlDQWdJQ0FnYm1GdFpWeHVJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2hyWlhsVmJtbHhkV1VwSUh0Y2JpQWdJQ0IyWVhJZ2JXRndjR1ZrUTJocGJHUWdQVnh1SUNBZ0lDQWdiV0Z3UW05dmEwdGxaWEJwYm1jdWJXRndSblZ1WTNScGIyNHVZMkZzYkNodFlYQkNiMjlyUzJWbGNHbHVaeTV0WVhCRGIyNTBaWGgwTENCamFHbHNaQ3dnYVNrN1hHNGdJQ0FnYldGd1VtVnpkV3gwVzI1aGJXVmRJRDBnYldGd2NHVmtRMmhwYkdRN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQk5ZWEJ6SUdOb2FXeGtjbVZ1SUhSb1lYUWdZWEpsSUhSNWNHbGpZV3hzZVNCemNHVmphV1pwWldRZ1lYTWdZSEJ5YjNCekxtTm9hV3hrY21WdVlDNWNiaUFxWEc0Z0tpQlVhR1VnY0hKdmRtbGtaV1FnYldGd1JuVnVZM1JwYjI0b1kyaHBiR1FzSUd0bGVTd2dhVzVrWlhncElIZHBiR3dnWW1VZ1kyRnNiR1ZrSUdadmNpQmxZV05vWEc0Z0tpQnNaV0ZtSUdOb2FXeGtMbHh1SUNwY2JpQXFJRlJQUkU4NklGUm9hWE1nYldGNUlHeHBhMlZzZVNCaWNtVmhheUJoYm5rZ1kyRnNiSE1nZEc4Z1lGSmxZV04wUTJocGJHUnlaVzR1YldGd1lDQjBhR0YwSUhkbGNtVmNiaUFxSUhCeVpYWnBiM1Z6YkhrZ2NtVnNlV2x1WnlCdmJpQjBhR1VnWm1GamRDQjBhR0YwSUhkbElHZDFZWEprWldRZ1lXZGhhVzV6ZENCdWRXeHNJR05vYVd4a2NtVnVMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdQeXA5SUdOb2FXeGtjbVZ1SUVOb2FXeGtjbVZ1SUhSeVpXVWdZMjl1ZEdGcGJtVnlMbHh1SUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2YmlncUxDQnBiblFwZlNCdFlYQkdkVzVqZEdsdmJpNWNiaUFxSUVCd1lYSmhiU0I3S24wZ2JXRndRMjl1ZEdWNGRDQkRiMjUwWlhoMElHWnZjaUJ0WVhCR2RXNWpkR2x2Ymk1Y2JpQXFJRUJ5WlhSMWNtNGdlMjlpYW1WamRIMGdUMkpxWldOMElHTnZiblJoYVc1cGJtY2dkR2hsSUc5eVpHVnlaV1FnYldGd0lHOW1JSEpsYzNWc2RITXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHMWhjRU5vYVd4a2NtVnVLR05vYVd4a2NtVnVMQ0JtZFc1akxDQmpiMjUwWlhoMEtTQjdYRzRnSUdsbUlDaGphR2xzWkhKbGJpQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUdOb2FXeGtjbVZ1TzF4dUlDQjlYRzVjYmlBZ2RtRnlJRzFoY0ZKbGMzVnNkQ0E5SUh0OU8xeHVJQ0IyWVhJZ2RISmhkbVZ5YzJWRGIyNTBaWGgwSUQwZ1RXRndRbTl2YTB0bFpYQnBibWN1WjJWMFVHOXZiR1ZrS0cxaGNGSmxjM1ZzZEN3Z1puVnVZeXdnWTI5dWRHVjRkQ2s3WEc0Z0lIUnlZWFpsY25ObFFXeHNRMmhwYkdSeVpXNG9ZMmhwYkdSeVpXNHNJRzFoY0ZOcGJtZHNaVU5vYVd4a1NXNTBiME52Ym5SbGVIUXNJSFJ5WVhabGNuTmxRMjl1ZEdWNGRDazdYRzRnSUUxaGNFSnZiMnRMWldWd2FXNW5MbkpsYkdWaGMyVW9kSEpoZG1WeWMyVkRiMjUwWlhoMEtUdGNiaUFnY21WMGRYSnVJRkpsWVdOMFJuSmhaMjFsYm5RdVkzSmxZWFJsS0cxaGNGSmxjM1ZzZENrN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdadmNrVmhZMmhUYVc1bmJHVkRhR2xzWkVSMWJXMTVLSFJ5WVhabGNuTmxRMjl1ZEdWNGRDd2dZMmhwYkdRc0lHNWhiV1VzSUdrcElIdGNiaUFnY21WMGRYSnVJRzUxYkd3N1hHNTlYRzVjYmk4cUtseHVJQ29nUTI5MWJuUWdkR2hsSUc1MWJXSmxjaUJ2WmlCamFHbHNaSEpsYmlCMGFHRjBJR0Z5WlNCMGVYQnBZMkZzYkhrZ2MzQmxZMmxtYVdWa0lHRnpYRzRnS2lCZ2NISnZjSE11WTJocGJHUnlaVzVnTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3UHlwOUlHTm9hV3hrY21WdUlFTm9hV3hrY21WdUlIUnlaV1VnWTI5dWRHRnBibVZ5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQlVhR1VnYm5WdFltVnlJRzltSUdOb2FXeGtjbVZ1TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJqYjNWdWRFTm9hV3hrY21WdUtHTm9hV3hrY21WdUxDQmpiMjUwWlhoMEtTQjdYRzRnSUhKbGRIVnliaUIwY21GMlpYSnpaVUZzYkVOb2FXeGtjbVZ1S0dOb2FXeGtjbVZ1TENCbWIzSkZZV05vVTJsdVoyeGxRMmhwYkdSRWRXMXRlU3dnYm5Wc2JDazdYRzU5WEc1Y2JuWmhjaUJTWldGamRFTm9hV3hrY21WdUlEMGdlMXh1SUNCbWIzSkZZV05vT2lCbWIzSkZZV05vUTJocGJHUnlaVzRzWEc0Z0lHMWhjRG9nYldGd1EyaHBiR1J5Wlc0c1hHNGdJR052ZFc1ME9pQmpiM1Z1ZEVOb2FXeGtjbVZ1WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOMFEyaHBiR1J5Wlc0N1hHNGlYWDA9IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENsYXNzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudFwiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEVycm9yVXRpbHMgPSByZXF1aXJlKFwiLi9SZWFjdEVycm9yVXRpbHNcIik7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VNYXBcIik7XG52YXIgUmVhY3RMaWZlQ3ljbGUgPSByZXF1aXJlKFwiLi9SZWFjdExpZmVDeWNsZVwiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25zID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uc1wiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzXCIpO1xudmFyIFJlYWN0VXBkYXRlUXVldWUgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZVF1ZXVlXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIga2V5TWlycm9yID0gcmVxdWlyZShcIi4va2V5TWlycm9yXCIpO1xudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBNSVhJTlNfS0VZID0ga2V5T2Yoe21peGluczogbnVsbH0pO1xuXG4vKipcbiAqIFBvbGljaWVzIHRoYXQgZGVzY3JpYmUgbWV0aG9kcyBpbiBgUmVhY3RDbGFzc0ludGVyZmFjZWAuXG4gKi9cbnZhciBTcGVjUG9saWN5ID0ga2V5TWlycm9yKHtcbiAgLyoqXG4gICAqIFRoZXNlIG1ldGhvZHMgbWF5IGJlIGRlZmluZWQgb25seSBvbmNlIGJ5IHRoZSBjbGFzcyBzcGVjaWZpY2F0aW9uIG9yIG1peGluLlxuICAgKi9cbiAgREVGSU5FX09OQ0U6IG51bGwsXG4gIC8qKlxuICAgKiBUaGVzZSBtZXRob2RzIG1heSBiZSBkZWZpbmVkIGJ5IGJvdGggdGhlIGNsYXNzIHNwZWNpZmljYXRpb24gYW5kIG1peGlucy5cbiAgICogU3Vic2VxdWVudCBkZWZpbml0aW9ucyB3aWxsIGJlIGNoYWluZWQuIFRoZXNlIG1ldGhvZHMgbXVzdCByZXR1cm4gdm9pZC5cbiAgICovXG4gIERFRklORV9NQU5ZOiBudWxsLFxuICAvKipcbiAgICogVGhlc2UgbWV0aG9kcyBhcmUgb3ZlcnJpZGluZyB0aGUgYmFzZSBjbGFzcy5cbiAgICovXG4gIE9WRVJSSURFX0JBU0U6IG51bGwsXG4gIC8qKlxuICAgKiBUaGVzZSBtZXRob2RzIGFyZSBzaW1pbGFyIHRvIERFRklORV9NQU5ZLCBleGNlcHQgd2UgYXNzdW1lIHRoZXkgcmV0dXJuXG4gICAqIG9iamVjdHMuIFdlIHRyeSB0byBtZXJnZSB0aGUga2V5cyBvZiB0aGUgcmV0dXJuIHZhbHVlcyBvZiBhbGwgdGhlIG1peGVkIGluXG4gICAqIGZ1bmN0aW9ucy4gSWYgdGhlcmUgaXMgYSBrZXkgY29uZmxpY3Qgd2UgdGhyb3cuXG4gICAqL1xuICBERUZJTkVfTUFOWV9NRVJHRUQ6IG51bGxcbn0pO1xuXG5cbnZhciBpbmplY3RlZE1peGlucyA9IFtdO1xuXG4vKipcbiAqIENvbXBvc2l0ZSBjb21wb25lbnRzIGFyZSBoaWdoZXItbGV2ZWwgY29tcG9uZW50cyB0aGF0IGNvbXBvc2Ugb3RoZXIgY29tcG9zaXRlXG4gKiBvciBuYXRpdmUgY29tcG9uZW50cy5cbiAqXG4gKiBUbyBjcmVhdGUgYSBuZXcgdHlwZSBvZiBgUmVhY3RDbGFzc2AsIHBhc3MgYSBzcGVjaWZpY2F0aW9uIG9mXG4gKiB5b3VyIG5ldyBjbGFzcyB0byBgUmVhY3QuY3JlYXRlQ2xhc3NgLiBUaGUgb25seSByZXF1aXJlbWVudCBvZiB5b3VyIGNsYXNzXG4gKiBzcGVjaWZpY2F0aW9uIGlzIHRoYXQgeW91IGltcGxlbWVudCBhIGByZW5kZXJgIG1ldGhvZC5cbiAqXG4gKiAgIHZhciBNeUNvbXBvbmVudCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICogICAgICAgcmV0dXJuIDxkaXY+SGVsbG8gV29ybGQ8L2Rpdj47XG4gKiAgICAgfVxuICogICB9KTtcbiAqXG4gKiBUaGUgY2xhc3Mgc3BlY2lmaWNhdGlvbiBzdXBwb3J0cyBhIHNwZWNpZmljIHByb3RvY29sIG9mIG1ldGhvZHMgdGhhdCBoYXZlXG4gKiBzcGVjaWFsIG1lYW5pbmcgKGUuZy4gYHJlbmRlcmApLiBTZWUgYFJlYWN0Q2xhc3NJbnRlcmZhY2VgIGZvclxuICogbW9yZSB0aGUgY29tcHJlaGVuc2l2ZSBwcm90b2NvbC4gQW55IG90aGVyIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgaW4gdGhlXG4gKiBjbGFzcyBzcGVjaWZpY2F0aW9uIHdpbGwgYXZhaWxhYmxlIG9uIHRoZSBwcm90b3R5cGUuXG4gKlxuICogQGludGVyZmFjZSBSZWFjdENsYXNzSW50ZXJmYWNlXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFJlYWN0Q2xhc3NJbnRlcmZhY2UgPSB7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIE1peGluIG9iamVjdHMgdG8gaW5jbHVkZSB3aGVuIGRlZmluaW5nIHlvdXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZSB7YXJyYXl9XG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgbWl4aW5zOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgb25cbiAgICogdGhlIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgaXRzIHByb3RvdHlwZSAoc3RhdGljIG1ldGhvZHMpLlxuICAgKlxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIHN0YXRpY3M6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIERlZmluaXRpb24gb2YgcHJvcCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgcHJvcFR5cGVzOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBEZWZpbml0aW9uIG9mIGNvbnRleHQgdHlwZXMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGNvbnRleHRUeXBlczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogRGVmaW5pdGlvbiBvZiBjb250ZXh0IHR5cGVzIHRoaXMgY29tcG9uZW50IHNldHMgZm9yIGl0cyBjaGlsZHJlbi5cbiAgICpcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBjaGlsZENvbnRleHRUeXBlczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvLyA9PT09IERlZmluaXRpb24gbWV0aG9kcyA9PT09XG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuIFZhbHVlcyBpbiB0aGUgbWFwcGluZyB3aWxsIGJlIHNldCBvblxuICAgKiBgdGhpcy5wcm9wc2AgaWYgdGhhdCBwcm9wIGlzIG5vdCBzcGVjaWZpZWQgKGkuZS4gdXNpbmcgYW4gYGluYCBjaGVjaykuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYmVmb3JlIGBnZXRJbml0aWFsU3RhdGVgIGFuZCB0aGVyZWZvcmUgY2Fubm90IHJlbHlcbiAgICogb24gYHRoaXMuc3RhdGVgIG9yIHVzZSBgdGhpcy5zZXRTdGF0ZWAuXG4gICAqXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBnZXREZWZhdWx0UHJvcHM6IFNwZWNQb2xpY3kuREVGSU5FX01BTllfTUVSR0VELFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIG9uY2UgYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWRcbiAgICogYXMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYHRoaXMuc3RhdGVgLlxuICAgKlxuICAgKiAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAqICAgICByZXR1cm4ge1xuICAgKiAgICAgICBpc09uOiBmYWxzZSxcbiAgICogICAgICAgZm9vQmF6OiBuZXcgQmF6Rm9vKClcbiAgICogICAgIH1cbiAgICogICB9XG4gICAqXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBnZXRJbml0aWFsU3RhdGU6IFNwZWNQb2xpY3kuREVGSU5FX01BTllfTUVSR0VELFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgZ2V0Q2hpbGRDb250ZXh0OiBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCxcblxuICAvKipcbiAgICogVXNlcyBwcm9wcyBmcm9tIGB0aGlzLnByb3BzYCBhbmQgc3RhdGUgZnJvbSBgdGhpcy5zdGF0ZWAgdG8gcmVuZGVyIHRoZVxuICAgKiBzdHJ1Y3R1cmUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogTm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91dCB3aGVuIG9yIGhvdyBvZnRlbiB0aGlzIG1ldGhvZCBpcyBpbnZva2VkLCBzb1xuICAgKiBpdCBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICpcbiAgICogICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgKiAgICAgdmFyIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XG4gICAqICAgICByZXR1cm4gPGRpdj5IZWxsbywge25hbWV9ITwvZGl2PjtcbiAgICogICB9XG4gICAqXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fVxuICAgKiBAbm9zaWRlZWZmZWN0c1xuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIHJlbmRlcjogU3BlY1BvbGljeS5ERUZJTkVfT05DRSxcblxuXG5cbiAgLy8gPT09PSBEZWxlZ2F0ZSBtZXRob2RzID09PT1cblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGx5IGNyZWF0ZWQgYW5kIGFib3V0IHRvIGJlIG1vdW50ZWQuXG4gICAqIFRoaXMgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLCBidXQgYW55IGV4dGVybmFsIHN1YnNjcmlwdGlvbnMgb3IgZGF0YSBjcmVhdGVkXG4gICAqIGJ5IHRoaXMgbWV0aG9kIG11c3QgYmUgY2xlYW5lZCB1cCBpbiBgY29tcG9uZW50V2lsbFVubW91bnRgLlxuICAgKlxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGNvbXBvbmVudFdpbGxNb3VudDogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gbW91bnRlZCBhbmQgaGFzIGEgRE9NIHJlcHJlc2VudGF0aW9uLlxuICAgKiBIb3dldmVyLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgRE9NIG5vZGUgaXMgaW4gdGhlIGRvY3VtZW50LlxuICAgKlxuICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBvcGVyYXRlIG9uIHRoZSBET00gd2hlbiB0aGUgY29tcG9uZW50IGhhc1xuICAgKiBiZWVuIG1vdW50ZWQgKGluaXRpYWxpemVkIGFuZCByZW5kZXJlZCkgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50LlxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGNvbXBvbmVudERpZE1vdW50OiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIGJlZm9yZSB0aGUgY29tcG9uZW50IHJlY2VpdmVzIG5ldyBwcm9wcy5cbiAgICpcbiAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gcmVhY3QgdG8gYSBwcm9wIHRyYW5zaXRpb24gYnkgdXBkYXRpbmcgdGhlXG4gICAqIHN0YXRlIHVzaW5nIGB0aGlzLnNldFN0YXRlYC4gQ3VycmVudCBwcm9wcyBhcmUgYWNjZXNzZWQgdmlhIGB0aGlzLnByb3BzYC5cbiAgICpcbiAgICogICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiBmdW5jdGlvbihuZXh0UHJvcHMsIG5leHRDb250ZXh0KSB7XG4gICAqICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICogICAgICAgbGlrZXNJbmNyZWFzaW5nOiBuZXh0UHJvcHMubGlrZUNvdW50ID4gdGhpcy5wcm9wcy5saWtlQ291bnRcbiAgICogICAgIH0pO1xuICAgKiAgIH1cbiAgICpcbiAgICogTk9URTogVGhlcmUgaXMgbm8gZXF1aXZhbGVudCBgY29tcG9uZW50V2lsbFJlY2VpdmVTdGF0ZWAuIEFuIGluY29taW5nIHByb3BcbiAgICogdHJhbnNpdGlvbiBtYXkgY2F1c2UgYSBzdGF0ZSBjaGFuZ2UsIGJ1dCB0aGUgb3Bwb3NpdGUgaXMgbm90IHRydWUuIElmIHlvdVxuICAgKiBuZWVkIGl0LCB5b3UgYXJlIHByb2JhYmx5IGxvb2tpbmcgZm9yIGBjb21wb25lbnRXaWxsVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hpbGUgZGVjaWRpbmcgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgdXBkYXRlZCBhcyBhIHJlc3VsdCBvZlxuICAgKiByZWNlaXZpbmcgbmV3IHByb3BzLCBzdGF0ZSBhbmQvb3IgY29udGV4dC5cbiAgICpcbiAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gYHJldHVybiBmYWxzZWAgd2hlbiB5b3UncmUgY2VydGFpbiB0aGF0IHRoZVxuICAgKiB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgcHJvcHMvc3RhdGUvY29udGV4dCB3aWxsIG5vdCByZXF1aXJlIGEgY29tcG9uZW50XG4gICAqIHVwZGF0ZS5cbiAgICpcbiAgICogICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCkge1xuICAgKiAgICAgcmV0dXJuICFlcXVhbChuZXh0UHJvcHMsIHRoaXMucHJvcHMpIHx8XG4gICAqICAgICAgICFlcXVhbChuZXh0U3RhdGUsIHRoaXMuc3RhdGUpIHx8XG4gICAqICAgICAgICFlcXVhbChuZXh0Q29udGV4dCwgdGhpcy5jb250ZXh0KTtcbiAgICogICB9XG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0U3RhdGVcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZS5cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGU6IFNwZWNQb2xpY3kuREVGSU5FX09OQ0UsXG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFib3V0IHRvIHVwZGF0ZSBkdWUgdG8gYSB0cmFuc2l0aW9uIGZyb21cbiAgICogYHRoaXMucHJvcHNgLCBgdGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgIHRvIGBuZXh0UHJvcHNgLCBgbmV4dFN0YXRlYFxuICAgKiBhbmQgYG5leHRDb250ZXh0YC5cbiAgICpcbiAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gcGVyZm9ybSBwcmVwYXJhdGlvbiBiZWZvcmUgYW4gdXBkYXRlIG9jY3Vycy5cbiAgICpcbiAgICogTk9URTogWW91ICoqY2Fubm90KiogdXNlIGB0aGlzLnNldFN0YXRlKClgIGluIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHRcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGNvbXBvbmVudFdpbGxVcGRhdGU6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50J3MgRE9NIHJlcHJlc2VudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQuXG4gICAqXG4gICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzXG4gICAqIGJlZW4gdXBkYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHByZXZQcm9wc1xuICAgKiBAcGFyYW0gez9vYmplY3R9IHByZXZTdGF0ZVxuICAgKiBAcGFyYW0gez9vYmplY3R9IHByZXZDb250ZXh0XG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29tcG9uZW50RGlkVXBkYXRlOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0byBiZSByZW1vdmVkIGZyb20gaXRzIHBhcmVudCBhbmQgaGF2ZVxuICAgKiBpdHMgRE9NIHJlcHJlc2VudGF0aW9uIGRlc3Ryb3llZC5cbiAgICpcbiAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gZGVhbGxvY2F0ZSBhbnkgZXh0ZXJuYWwgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBOT1RFOiBUaGVyZSBpcyBubyBgY29tcG9uZW50RGlkVW5tb3VudGAgc2luY2UgeW91ciBjb21wb25lbnQgd2lsbCBoYXZlIGJlZW5cbiAgICogZGVzdHJveWVkIGJ5IHRoYXQgcG9pbnQuXG4gICAqXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29tcG9uZW50V2lsbFVubW91bnQ6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cblxuXG4gIC8vID09PT0gQWR2YW5jZWQgbWV0aG9kcyA9PT09XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbXBvbmVudCdzIGN1cnJlbnRseSBtb3VudGVkIERPTSByZXByZXNlbnRhdGlvbi5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1lbnRzIFJlYWN0J3MgcmVuZGVyaW5nIGFuZCByZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uXG4gICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAb3ZlcnJpZGFibGVcbiAgICovXG4gIHVwZGF0ZUNvbXBvbmVudDogU3BlY1BvbGljeS5PVkVSUklERV9CQVNFXG5cbn07XG5cbi8qKlxuICogTWFwcGluZyBmcm9tIGNsYXNzIHNwZWNpZmljYXRpb24ga2V5cyB0byBzcGVjaWFsIHByb2Nlc3NpbmcgZnVuY3Rpb25zLlxuICpcbiAqIEFsdGhvdWdoIHRoZXNlIGFyZSBkZWNsYXJlZCBsaWtlIGluc3RhbmNlIHByb3BlcnRpZXMgaW4gdGhlIHNwZWNpZmljYXRpb25cbiAqIHdoZW4gZGVmaW5pbmcgY2xhc3NlcyB1c2luZyBgUmVhY3QuY3JlYXRlQ2xhc3NgLCB0aGV5IGFyZSBhY3R1YWxseSBzdGF0aWNcbiAqIGFuZCBhcmUgYWNjZXNzaWJsZSBvbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZCBvZiB0aGUgcHJvdG90eXBlLiBEZXNwaXRlXG4gKiBiZWluZyBzdGF0aWMsIHRoZXkgbXVzdCBiZSBkZWZpbmVkIG91dHNpZGUgb2YgdGhlIFwic3RhdGljc1wiIGtleSB1bmRlclxuICogd2hpY2ggYWxsIG90aGVyIHN0YXRpYyBtZXRob2RzIGFyZSBkZWZpbmVkLlxuICovXG52YXIgUkVTRVJWRURfU1BFQ19LRVlTID0ge1xuICBkaXNwbGF5TmFtZTogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGRpc3BsYXlOYW1lKSB7XG4gICAgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgfSxcbiAgbWl4aW5zOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgbWl4aW5zKSB7XG4gICAgaWYgKG1peGlucykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXhpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIG1peGluc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjaGlsZENvbnRleHRUeXBlczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGNoaWxkQ29udGV4dFR5cGVzKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFsaWRhdGVUeXBlRGVmKFxuICAgICAgICBDb25zdHJ1Y3RvcixcbiAgICAgICAgY2hpbGRDb250ZXh0VHlwZXMsXG4gICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMuY2hpbGRDb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgICBDb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyA9IGFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgQ29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMsXG4gICAgICBjaGlsZENvbnRleHRUeXBlc1xuICAgICk7XG4gIH0sXG4gIGNvbnRleHRUeXBlczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGNvbnRleHRUeXBlcykge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHZhbGlkYXRlVHlwZURlZihcbiAgICAgICAgQ29uc3RydWN0b3IsXG4gICAgICAgIGNvbnRleHRUeXBlcyxcbiAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5jb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgICBDb25zdHJ1Y3Rvci5jb250ZXh0VHlwZXMgPSBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIENvbnN0cnVjdG9yLmNvbnRleHRUeXBlcyxcbiAgICAgIGNvbnRleHRUeXBlc1xuICAgICk7XG4gIH0sXG4gIC8qKlxuICAgKiBTcGVjaWFsIGNhc2UgZ2V0RGVmYXVsdFByb3BzIHdoaWNoIHNob3VsZCBtb3ZlIGludG8gc3RhdGljcyBidXQgcmVxdWlyZXNcbiAgICogYXV0b21hdGljIG1lcmdpbmcuXG4gICAqL1xuICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBnZXREZWZhdWx0UHJvcHMpIHtcbiAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMgPSBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihcbiAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLFxuICAgICAgICBnZXREZWZhdWx0UHJvcHNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyA9IGdldERlZmF1bHRQcm9wcztcbiAgICB9XG4gIH0sXG4gIHByb3BUeXBlczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIHByb3BUeXBlcykge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHZhbGlkYXRlVHlwZURlZihcbiAgICAgICAgQ29uc3RydWN0b3IsXG4gICAgICAgIHByb3BUeXBlcyxcbiAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5wcm9wXG4gICAgICApO1xuICAgIH1cbiAgICBDb25zdHJ1Y3Rvci5wcm9wVHlwZXMgPSBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIENvbnN0cnVjdG9yLnByb3BUeXBlcyxcbiAgICAgIHByb3BUeXBlc1xuICAgICk7XG4gIH0sXG4gIHN0YXRpY3M6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7XG4gICAgbWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHN0YXRpY3MpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIHR5cGVEZWYsIGxvY2F0aW9uKSB7XG4gIGZvciAodmFyIHByb3BOYW1lIGluIHR5cGVEZWYpIHtcbiAgICBpZiAodHlwZURlZi5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgIC8vIHVzZSBhIHdhcm5pbmcgaW5zdGVhZCBvZiBhbiBpbnZhcmlhbnQgc28gY29tcG9uZW50c1xuICAgICAgLy8gZG9uJ3Qgc2hvdyB1cCBpbiBwcm9kIGJ1dCBub3QgaW4gX19ERVZfX1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIHR5cGVvZiB0eXBlRGVmW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArXG4gICAgICAgICdSZWFjdC5Qcm9wVHlwZXMuJyxcbiAgICAgICAgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q2xhc3MnLFxuICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0sXG4gICAgICAgIHByb3BOYW1lXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUocHJvdG8sIG5hbWUpIHtcbiAgdmFyIHNwZWNQb2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpID9cbiAgICBSZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdIDpcbiAgICBudWxsO1xuXG4gIC8vIERpc2FsbG93IG92ZXJyaWRpbmcgb2YgYmFzZSBjbGFzcyBtZXRob2RzIHVubGVzcyBleHBsaWNpdGx5IGFsbG93ZWQuXG4gIGlmIChSZWFjdENsYXNzTWl4aW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5PVkVSUklERV9CQVNFLFxuICAgICAgJ1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBvdmVycmlkZSAnICtcbiAgICAgICdgJXNgIGZyb20geW91ciBjbGFzcyBzcGVjaWZpY2F0aW9uLiBFbnN1cmUgdGhhdCB5b3VyIG1ldGhvZCBuYW1lcyAnICtcbiAgICAgICdkbyBub3Qgb3ZlcmxhcCB3aXRoIFJlYWN0IG1ldGhvZHMuJyxcbiAgICAgIG5hbWVcbiAgICApIDogaW52YXJpYW50KHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuT1ZFUlJJREVfQkFTRSkpO1xuICB9XG5cbiAgLy8gRGlzYWxsb3cgZGVmaW5pbmcgbWV0aG9kcyBtb3JlIHRoYW4gb25jZSB1bmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLlxuICBpZiAocHJvdG8uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWSB8fFxuICAgICAgc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQsXG4gICAgICAnUmVhY3RDbGFzc0ludGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSAnICtcbiAgICAgICdgJXNgIG9uIHlvdXIgY29tcG9uZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgJyArXG4gICAgICAndG8gYSBtaXhpbi4nLFxuICAgICAgbmFtZVxuICAgICkgOiBpbnZhcmlhbnQoc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWSB8fFxuICAgIHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTllfTUVSR0VEKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNaXhpbiBoZWxwZXIgd2hpY2ggaGFuZGxlcyBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgcmVzZXJ2ZWRcbiAqIHNwZWNpZmljYXRpb24ga2V5cyB3aGVuIGJ1aWxkaW5nIFJlYWN0IGNsYXNzc2VzLlxuICovXG5mdW5jdGlvbiBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYykge1xuICBpZiAoIXNwZWMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHR5cGVvZiBzcGVjICE9PSAnZnVuY3Rpb24nLFxuICAgICdSZWFjdENsYXNzOiBZb3VcXCdyZSBhdHRlbXB0aW5nIHRvICcgK1xuICAgICd1c2UgYSBjb21wb25lbnQgY2xhc3MgYXMgYSBtaXhpbi4gSW5zdGVhZCwganVzdCB1c2UgYSByZWd1bGFyIG9iamVjdC4nXG4gICkgOiBpbnZhcmlhbnQodHlwZW9mIHNwZWMgIT09ICdmdW5jdGlvbicpKTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAhUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHNwZWMpLFxuICAgICdSZWFjdENsYXNzOiBZb3VcXCdyZSBhdHRlbXB0aW5nIHRvICcgK1xuICAgICd1c2UgYSBjb21wb25lbnQgYXMgYSBtaXhpbi4gSW5zdGVhZCwganVzdCB1c2UgYSByZWd1bGFyIG9iamVjdC4nXG4gICkgOiBpbnZhcmlhbnQoIVJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChzcGVjKSkpO1xuXG4gIHZhciBwcm90byA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBCeSBoYW5kbGluZyBtaXhpbnMgYmVmb3JlIGFueSBvdGhlciBwcm9wZXJ0aWVzLCB3ZSBlbnN1cmUgdGhlIHNhbWVcbiAgLy8gY2hhaW5pbmcgb3JkZXIgaXMgYXBwbGllZCB0byBtZXRob2RzIHdpdGggREVGSU5FX01BTlkgcG9saWN5LCB3aGV0aGVyXG4gIC8vIG1peGlucyBhcmUgbGlzdGVkIGJlZm9yZSBvciBhZnRlciB0aGVzZSBtZXRob2RzIGluIHRoZSBzcGVjLlxuICBpZiAoc3BlYy5oYXNPd25Qcm9wZXJ0eShNSVhJTlNfS0VZKSkge1xuICAgIFJFU0VSVkVEX1NQRUNfS0VZUy5taXhpbnMoQ29uc3RydWN0b3IsIHNwZWMubWl4aW5zKTtcbiAgfVxuXG4gIGZvciAodmFyIG5hbWUgaW4gc3BlYykge1xuICAgIGlmICghc3BlYy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgPT09IE1JWElOU19LRVkpIHtcbiAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIG1peGlucyBpbiBhIHNwZWNpYWwgY2FzZSBhYm92ZVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIHByb3BlcnR5ID0gc3BlY1tuYW1lXTtcbiAgICB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKHByb3RvLCBuYW1lKTtcblxuICAgIGlmIChSRVNFUlZFRF9TUEVDX0tFWVMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIFJFU0VSVkVEX1NQRUNfS0VZU1tuYW1lXShDb25zdHJ1Y3RvciwgcHJvcGVydHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZXR1cCBtZXRob2RzIG9uIHByb3RvdHlwZTpcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIG1ldGhvZHMgc2hvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGJvdW5kOlxuICAgICAgLy8gMS4gRXhwZWN0ZWQgUmVhY3RDbGFzcyBtZXRob2RzIChpbiB0aGUgXCJpbnRlcmZhY2VcIikuXG4gICAgICAvLyAyLiBPdmVycmlkZGVuIG1ldGhvZHMgKHRoYXQgd2VyZSBtaXhlZCBpbikuXG4gICAgICB2YXIgaXNSZWFjdENsYXNzTWV0aG9kID1cbiAgICAgICAgUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgICAgIHZhciBpc0FscmVhZHlEZWZpbmVkID0gcHJvdG8uaGFzT3duUHJvcGVydHkobmFtZSk7XG4gICAgICB2YXIgbWFya2VkRG9udEJpbmQgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5fX3JlYWN0RG9udEJpbmQ7XG4gICAgICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIHZhciBzaG91bGRBdXRvQmluZCA9XG4gICAgICAgIGlzRnVuY3Rpb24gJiZcbiAgICAgICAgIWlzUmVhY3RDbGFzc01ldGhvZCAmJlxuICAgICAgICAhaXNBbHJlYWR5RGVmaW5lZCAmJlxuICAgICAgICAhbWFya2VkRG9udEJpbmQ7XG5cbiAgICAgIGlmIChzaG91bGRBdXRvQmluZCkge1xuICAgICAgICBpZiAoIXByb3RvLl9fcmVhY3RBdXRvQmluZE1hcCkge1xuICAgICAgICAgIHByb3RvLl9fcmVhY3RBdXRvQmluZE1hcCA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHByb3RvLl9fcmVhY3RBdXRvQmluZE1hcFtuYW1lXSA9IHByb3BlcnR5O1xuICAgICAgICBwcm90b1tuYW1lXSA9IHByb3BlcnR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzQWxyZWFkeURlZmluZWQpIHtcbiAgICAgICAgICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV07XG5cbiAgICAgICAgICAvLyBUaGVzZSBjYXNlcyBzaG91bGQgYWxyZWFkeSBiZSBjYXVnaHQgYnkgdmFsaWRhdGVNZXRob2RPdmVycmlkZVxuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgICBpc1JlYWN0Q2xhc3NNZXRob2QgJiYgKFxuICAgICAgICAgICAgICAoc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQgfHwgc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAnUmVhY3RDbGFzczogVW5leHBlY3RlZCBzcGVjIHBvbGljeSAlcyBmb3Iga2V5ICVzICcgK1xuICAgICAgICAgICAgJ3doZW4gbWl4aW5nIGluIGNvbXBvbmVudCBzcGVjcy4nLFxuICAgICAgICAgICAgc3BlY1BvbGljeSxcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApIDogaW52YXJpYW50KGlzUmVhY3RDbGFzc01ldGhvZCAmJiAoXG4gICAgICAgICAgICAoc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQgfHwgc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWSlcbiAgICAgICAgICApKSk7XG5cbiAgICAgICAgICAvLyBGb3IgbWV0aG9kcyB3aGljaCBhcmUgZGVmaW5lZCBtb3JlIHRoYW4gb25jZSwgY2FsbCB0aGUgZXhpc3RpbmdcbiAgICAgICAgICAvLyBtZXRob2RzIGJlZm9yZSBjYWxsaW5nIHRoZSBuZXcgcHJvcGVydHksIG1lcmdpbmcgaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgICAgaWYgKHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTllfTUVSR0VEKSB7XG4gICAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKHByb3RvW25hbWVdLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZKSB7XG4gICAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZUNoYWluZWRGdW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm90b1tuYW1lXSA9IHByb3BlcnR5O1xuICAgICAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgICAgIC8vIEFkZCB2ZXJib3NlIGRpc3BsYXlOYW1lIHRvIHRoZSBmdW5jdGlvbiwgd2hpY2ggaGVscHMgd2hlbiBsb29raW5nXG4gICAgICAgICAgICAvLyBhdCBwcm9maWxpbmcgdG9vbHMuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnZnVuY3Rpb24nICYmIHNwZWMuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICAgICAgcHJvdG9bbmFtZV0uZGlzcGxheU5hbWUgPSBzcGVjLmRpc3BsYXlOYW1lICsgJ18nICsgbmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHN0YXRpY3MpIHtcbiAgaWYgKCFzdGF0aWNzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAodmFyIG5hbWUgaW4gc3RhdGljcykge1xuICAgIHZhciBwcm9wZXJ0eSA9IHN0YXRpY3NbbmFtZV07XG4gICAgaWYgKCFzdGF0aWNzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgaXNSZXNlcnZlZCA9IG5hbWUgaW4gUkVTRVJWRURfU1BFQ19LRVlTO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhaXNSZXNlcnZlZCxcbiAgICAgICdSZWFjdENsYXNzOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lIGEgcmVzZXJ2ZWQgJyArXG4gICAgICAncHJvcGVydHksIGAlc2AsIHRoYXQgc2hvdWxkblxcJ3QgYmUgb24gdGhlIFwic3RhdGljc1wiIGtleS4gRGVmaW5lIGl0ICcgK1xuICAgICAgJ2FzIGFuIGluc3RhbmNlIHByb3BlcnR5IGluc3RlYWQ7IGl0IHdpbGwgc3RpbGwgYmUgYWNjZXNzaWJsZSBvbiB0aGUgJyArXG4gICAgICAnY29uc3RydWN0b3IuJyxcbiAgICAgIG5hbWVcbiAgICApIDogaW52YXJpYW50KCFpc1Jlc2VydmVkKSk7XG5cbiAgICB2YXIgaXNJbmhlcml0ZWQgPSBuYW1lIGluIENvbnN0cnVjdG9yO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhaXNJbmhlcml0ZWQsXG4gICAgICAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSAnICtcbiAgICAgICdgJXNgIG9uIHlvdXIgY29tcG9uZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSAnICtcbiAgICAgICdkdWUgdG8gYSBtaXhpbi4nLFxuICAgICAgbmFtZVxuICAgICkgOiBpbnZhcmlhbnQoIWlzSW5oZXJpdGVkKSk7XG4gICAgQ29uc3RydWN0b3JbbmFtZV0gPSBwcm9wZXJ0eTtcbiAgfVxufVxuXG4vKipcbiAqIE1lcmdlIHR3byBvYmplY3RzLCBidXQgdGhyb3cgaWYgYm90aCBjb250YWluIHRoZSBzYW1lIGtleS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb25lIFRoZSBmaXJzdCBvYmplY3QsIHdoaWNoIGlzIG11dGF0ZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gdHdvIFRoZSBzZWNvbmQgb2JqZWN0XG4gKiBAcmV0dXJuIHtvYmplY3R9IG9uZSBhZnRlciBpdCBoYXMgYmVlbiBtdXRhdGVkIHRvIGNvbnRhaW4gZXZlcnl0aGluZyBpbiB0d28uXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMob25lLCB0d28pIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBvbmUgJiYgdHdvICYmIHR5cGVvZiBvbmUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0d28gPT09ICdvYmplY3QnLFxuICAgICdtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKCk6IENhbm5vdCBtZXJnZSBub24tb2JqZWN0cy4nXG4gICkgOiBpbnZhcmlhbnQob25lICYmIHR3byAmJiB0eXBlb2Ygb25lID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdHdvID09PSAnb2JqZWN0JykpO1xuXG4gIGZvciAodmFyIGtleSBpbiB0d28pIHtcbiAgICBpZiAodHdvLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIG9uZVtrZXldID09PSB1bmRlZmluZWQsXG4gICAgICAgICdtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKCk6ICcgK1xuICAgICAgICAnVHJpZWQgdG8gbWVyZ2UgdHdvIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBrZXk6IGAlc2AuIFRoaXMgY29uZmxpY3QgJyArXG4gICAgICAgICdtYXkgYmUgZHVlIHRvIGEgbWl4aW47IGluIHBhcnRpY3VsYXIsIHRoaXMgbWF5IGJlIGNhdXNlZCBieSB0d28gJyArXG4gICAgICAgICdnZXRJbml0aWFsU3RhdGUoKSBvciBnZXREZWZhdWx0UHJvcHMoKSBtZXRob2RzIHJldHVybmluZyBvYmplY3RzICcgK1xuICAgICAgICAnd2l0aCBjbGFzaGluZyBrZXlzLicsXG4gICAgICAgIGtleVxuICAgICAgKSA6IGludmFyaWFudChvbmVba2V5XSA9PT0gdW5kZWZpbmVkKSk7XG4gICAgICBvbmVba2V5XSA9IHR3b1trZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb25lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgbWVyZ2VzIHRoZWlyIHJldHVybiB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gb25lIEZ1bmN0aW9uIHRvIGludm9rZSBmaXJzdC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLlxuICogQHJldHVybiB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgdHdvIGFyZ3VtZW50IGZ1bmN0aW9ucy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKG9uZSwgdHdvKSB7XG4gIHJldHVybiBmdW5jdGlvbiBtZXJnZWRSZXN1bHQoKSB7XG4gICAgdmFyIGEgPSBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB2YXIgYiA9IHR3by5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChhID09IG51bGwpIHtcbiAgICAgIHJldHVybiBiO1xuICAgIH0gZWxzZSBpZiAoYiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gYTtcbiAgICB9XG4gICAgdmFyIGMgPSB7fTtcbiAgICBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKGMsIGEpO1xuICAgIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoYywgYik7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0d28gZnVuY3Rpb25zIGFuZCBpZ25vcmVzIHRoZWlyIHJldHVybiB2YWxlcy5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbmUgRnVuY3Rpb24gdG8gaW52b2tlIGZpcnN0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gdHdvIEZ1bmN0aW9uIHRvIGludm9rZSBzZWNvbmQuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKG9uZSwgdHdvKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oKSB7XG4gICAgb25lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8qKlxuICogQmluZHMgYSBtZXRob2QgdG8gdGhlIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2QgTWV0aG9kIHRvIGJlIGJvdW5kLlxuICogQHJldHVybiB7ZnVuY3Rpb259IFRoZSBib3VuZCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIGJpbmRBdXRvQmluZE1ldGhvZChjb21wb25lbnQsIG1ldGhvZCkge1xuICB2YXIgYm91bmRNZXRob2QgPSBtZXRob2QuYmluZChjb21wb25lbnQpO1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDtcbiAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRNZXRob2QgPSBtZXRob2Q7XG4gICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQXJndW1lbnRzID0gbnVsbDtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTtcbiAgICB2YXIgX2JpbmQgPSBib3VuZE1ldGhvZC5iaW5kO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIGJsb2NrLXNjb3BlZC12YXIsIG5vLXVuZGVmICovXG4gICAgYm91bmRNZXRob2QuYmluZCA9IGZ1bmN0aW9uKG5ld1RoaXMgKSB7Zm9yICh2YXIgYXJncz1bXSwkX18wPTEsJF9fMT1hcmd1bWVudHMubGVuZ3RoOyRfXzA8JF9fMTskX18wKyspIGFyZ3MucHVzaChhcmd1bWVudHNbJF9fMF0pO1xuICAgICAgLy8gVXNlciBpcyB0cnlpbmcgdG8gYmluZCgpIGFuIGF1dG9ib3VuZCBtZXRob2Q7IHdlIGVmZmVjdGl2ZWx5IHdpbGxcbiAgICAgIC8vIGlnbm9yZSB0aGUgdmFsdWUgb2YgXCJ0aGlzXCIgdGhhdCB0aGUgdXNlciBpcyB0cnlpbmcgdG8gdXNlLCBzb1xuICAgICAgLy8gbGV0J3Mgd2Fybi5cbiAgICAgIGlmIChuZXdUaGlzICE9PSBjb21wb25lbnQgJiYgbmV3VGhpcyAhPT0gbnVsbCkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnYmluZCgpOiBSZWFjdCBjb21wb25lbnQgbWV0aG9kcyBtYXkgb25seSBiZSBib3VuZCB0byB0aGUgJyArXG4gICAgICAgICAgJ2NvbXBvbmVudCBpbnN0YW5jZS4gU2VlICVzJyxcbiAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgIH0gZWxzZSBpZiAoIWFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICdiaW5kKCk6IFlvdSBhcmUgYmluZGluZyBhIGNvbXBvbmVudCBtZXRob2QgdG8gdGhlIGNvbXBvbmVudC4gJyArXG4gICAgICAgICAgJ1JlYWN0IGRvZXMgdGhpcyBmb3IgeW91IGF1dG9tYXRpY2FsbHkgaW4gYSBoaWdoLXBlcmZvcm1hbmNlICcgK1xuICAgICAgICAgICd3YXksIHNvIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSB0aGlzIGNhbGwuIFNlZSAlcycsXG4gICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICApIDogbnVsbCk7XG4gICAgICAgIHJldHVybiBib3VuZE1ldGhvZDtcbiAgICAgIH1cbiAgICAgIHZhciByZWJvdW5kTWV0aG9kID0gX2JpbmQuYXBwbHkoYm91bmRNZXRob2QsIGFyZ3VtZW50cyk7XG4gICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZENvbnRleHQgPSBjb21wb25lbnQ7XG4gICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQXJndW1lbnRzID0gYXJncztcbiAgICAgIHJldHVybiByZWJvdW5kTWV0aG9kO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGJvdW5kTWV0aG9kO1xufVxuXG4vKipcbiAqIEJpbmRzIGFsbCBhdXRvLWJvdW5kIG1ldGhvZHMgaW4gYSBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudCBDb21wb25lbnQgd2hvc2UgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGJvdW5kLlxuICovXG5mdW5jdGlvbiBiaW5kQXV0b0JpbmRNZXRob2RzKGNvbXBvbmVudCkge1xuICBmb3IgKHZhciBhdXRvQmluZEtleSBpbiBjb21wb25lbnQuX19yZWFjdEF1dG9CaW5kTWFwKSB7XG4gICAgaWYgKGNvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRNYXAuaGFzT3duUHJvcGVydHkoYXV0b0JpbmRLZXkpKSB7XG4gICAgICB2YXIgbWV0aG9kID0gY29tcG9uZW50Ll9fcmVhY3RBdXRvQmluZE1hcFthdXRvQmluZEtleV07XG4gICAgICBjb21wb25lbnRbYXV0b0JpbmRLZXldID0gYmluZEF1dG9CaW5kTWV0aG9kKFxuICAgICAgICBjb21wb25lbnQsXG4gICAgICAgIFJlYWN0RXJyb3JVdGlscy5ndWFyZChcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgY29tcG9uZW50LmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lICsgJy4nICsgYXV0b0JpbmRLZXlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHR5cGVEZXByZWNhdGlvbkRlc2NyaXB0b3IgPSB7XG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkaXNwbGF5TmFtZSA9IHRoaXMuZGlzcGxheU5hbWUgfHwgdGhpcy5uYW1lIHx8ICdDb21wb25lbnQnO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgZmFsc2UsXG4gICAgICAnJXMudHlwZSBpcyBkZXByZWNhdGVkLiBVc2UgJXMgZGlyZWN0bHkgdG8gYWNjZXNzIHRoZSBjbGFzcy4nLFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgICBkaXNwbGF5TmFtZVxuICAgICkgOiBudWxsKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICB2YWx1ZTogdGhpc1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59O1xuXG4vKipcbiAqIEFkZCBtb3JlIHRvIHRoZSBSZWFjdENsYXNzIGJhc2UgY2xhc3MuIFRoZXNlIGFyZSBhbGwgbGVnYWN5IGZlYXR1cmVzIGFuZFxuICogdGhlcmVmb3JlIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIG1vZGVybiBSZWFjdENvbXBvbmVudC5cbiAqL1xudmFyIFJlYWN0Q2xhc3NNaXhpbiA9IHtcblxuICAvKipcbiAgICogVE9ETzogVGhpcyB3aWxsIGJlIGRlcHJlY2F0ZWQgYmVjYXVzZSBzdGF0ZSBzaG91bGQgYWx3YXlzIGtlZXAgYSBjb25zaXN0ZW50XG4gICAqIHR5cGUgc2lnbmF0dXJlIGFuZCB0aGUgb25seSB1c2UgY2FzZSBmb3IgdGhpcywgaXMgdG8gYXZvaWQgdGhhdC5cbiAgICovXG4gIHJlcGxhY2VTdGF0ZTogZnVuY3Rpb24obmV3U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlUmVwbGFjZVN0YXRlKHRoaXMsIG5ld1N0YXRlKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gICAgICBpZiAob3duZXIgIT09IG51bGwpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgb3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyLFxuICAgICAgICAgICclcyBpcyBhY2Nlc3NpbmcgaXNNb3VudGVkIGluc2lkZSBpdHMgcmVuZGVyKCkgZnVuY3Rpb24uICcgK1xuICAgICAgICAgICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgK1xuICAgICAgICAgICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICtcbiAgICAgICAgICAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArXG4gICAgICAgICAgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgICAgb3duZXIuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCdcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgIHJldHVybiAoXG4gICAgICBpbnRlcm5hbEluc3RhbmNlICYmXG4gICAgICBpbnRlcm5hbEluc3RhbmNlICE9PSBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlNb3VudGluZ0luc3RhbmNlXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgcHJvcHMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsUHJvcHMgU3Vic2V0IG9mIHRoZSBuZXh0IHByb3BzLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHByb3BzIGFyZSB1cGRhdGVkLlxuICAgKiBAZmluYWxcbiAgICogQHB1YmxpY1xuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgc2V0UHJvcHM6IGZ1bmN0aW9uKHBhcnRpYWxQcm9wcywgY2FsbGJhY2spIHtcbiAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVTZXRQcm9wcyh0aGlzLCBwYXJ0aWFsUHJvcHMpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2spO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZSBhbGwgdGhlIHByb3BzLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3UHJvcHMgU3Vic2V0IG9mIHRoZSBuZXh0IHByb3BzLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHByb3BzIGFyZSB1cGRhdGVkLlxuICAgKiBAZmluYWxcbiAgICogQHB1YmxpY1xuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgcmVwbGFjZVByb3BzOiBmdW5jdGlvbihuZXdQcm9wcywgY2FsbGJhY2spIHtcbiAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVSZXBsYWNlUHJvcHModGhpcywgbmV3UHJvcHMpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxufTtcblxudmFyIFJlYWN0Q2xhc3NDb21wb25lbnQgPSBmdW5jdGlvbigpIHt9O1xuYXNzaWduKFxuICBSZWFjdENsYXNzQ29tcG9uZW50LnByb3RvdHlwZSxcbiAgUmVhY3RDb21wb25lbnQucHJvdG90eXBlLFxuICBSZWFjdENsYXNzTWl4aW5cbik7XG5cbi8qKlxuICogTW9kdWxlIGZvciBjcmVhdGluZyBjb21wb3NpdGUgY29tcG9uZW50cy5cbiAqXG4gKiBAY2xhc3MgUmVhY3RDbGFzc1xuICovXG52YXIgUmVhY3RDbGFzcyA9IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNvbXBvc2l0ZSBjb21wb25lbnQgY2xhc3MgZ2l2ZW4gYSBjbGFzcyBzcGVjaWZpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3BlYyBDbGFzcyBzcGVjaWZpY2F0aW9uICh3aGljaCBtdXN0IGRlZmluZSBgcmVuZGVyYCkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBDb21wb25lbnQgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGNyZWF0ZUNsYXNzOiBmdW5jdGlvbihzcGVjKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gZnVuY3Rpb24ocHJvcHMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgb3ZlcnJpZGRlbiBieSBtb2Nrcy4gVGhlIGFyZ3VtZW50IGlzIHVzZWRcbiAgICAgIC8vIGJ5IG1vY2tzIHRvIGFzc2VydCBvbiB3aGF0IGdldHMgbW91bnRlZC5cblxuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICB0aGlzIGluc3RhbmNlb2YgQ29uc3RydWN0b3IsXG4gICAgICAgICAgJ1NvbWV0aGluZyBpcyBjYWxsaW5nIGEgUmVhY3QgY29tcG9uZW50IGRpcmVjdGx5LiBVc2UgYSBmYWN0b3J5IG9yICcgK1xuICAgICAgICAgICdKU1ggaW5zdGVhZC4gU2VlOiBodHRwczovL2ZiLm1lL3JlYWN0LWxlZ2FjeWZhY3RvcnknXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2lyZSB1cCBhdXRvLWJpbmRpbmdcbiAgICAgIGlmICh0aGlzLl9fcmVhY3RBdXRvQmluZE1hcCkge1xuICAgICAgICBiaW5kQXV0b0JpbmRNZXRob2RzKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7XG5cbiAgICAgIC8vIFJlYWN0Q2xhc3NlcyBkb2Vzbid0IGhhdmUgY29uc3RydWN0b3JzLiBJbnN0ZWFkLCB0aGV5IHVzZSB0aGVcbiAgICAgIC8vIGdldEluaXRpYWxTdGF0ZSBhbmQgY29tcG9uZW50V2lsbE1vdW50IG1ldGhvZHMgZm9yIGluaXRpYWxpemF0aW9uLlxuXG4gICAgICB2YXIgaW5pdGlhbFN0YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGUgPyB0aGlzLmdldEluaXRpYWxTdGF0ZSgpIDogbnVsbDtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdGhpcy5nZXRJbml0aWFsU3RhdGUuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBiYWQgcHJhY3RpY2UuIENvbnNpZGVyIHdhcm5pbmcgaGVyZSBhbmRcbiAgICAgICAgICAvLyBkZXByZWNhdGluZyB0aGlzIGNvbnZlbmllbmNlLlxuICAgICAgICAgIGluaXRpYWxTdGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGluaXRpYWxTdGF0ZSksXG4gICAgICAgICclcy5nZXRJbml0aWFsU3RhdGUoKTogbXVzdCByZXR1cm4gYW4gb2JqZWN0IG9yIG51bGwnLFxuICAgICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnXG4gICAgICApIDogaW52YXJpYW50KHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGluaXRpYWxTdGF0ZSkpKTtcblxuICAgICAgdGhpcy5zdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICB9O1xuICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBSZWFjdENsYXNzQ29tcG9uZW50KCk7XG4gICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG5cbiAgICBpbmplY3RlZE1peGlucy5mb3JFYWNoKFxuICAgICAgbWl4U3BlY0ludG9Db21wb25lbnQuYmluZChudWxsLCBDb25zdHJ1Y3RvcilcbiAgICApO1xuXG4gICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHNwZWMpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdFByb3BzIHByb3BlcnR5IGFmdGVyIGFsbCBtaXhpbnMgaGF2ZSBiZWVuIG1lcmdlZFxuICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgIENvbnN0cnVjdG9yLmRlZmF1bHRQcm9wcyA9IENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcygpO1xuICAgIH1cblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB0YWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdXNlIG9mIHRoZXNlIG1ldGhvZCBuYW1lcyBpcyBvayxcbiAgICAgIC8vIHNpbmNlIGl0J3MgdXNlZCB3aXRoIGNyZWF0ZUNsYXNzLiBJZiBpdCdzIG5vdCwgdGhlbiBpdCdzIGxpa2VseSBhXG4gICAgICAvLyBtaXN0YWtlIHNvIHdlJ2xsIHdhcm4geW91IHRvIHVzZSB0aGUgc3RhdGljIHByb3BlcnR5LCBwcm9wZXJ0eVxuICAgICAgLy8gaW5pdGlhbGl6ZXIgb3IgY29uc3RydWN0b3IgcmVzcGVjdGl2ZWx5LlxuICAgICAgaWYgKENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcykge1xuICAgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3Rvci5wcm90b3R5cGUuZ2V0SW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgPSB7fTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbmRlcixcbiAgICAgICdjcmVhdGVDbGFzcyguLi4pOiBDbGFzcyBzcGVjaWZpY2F0aW9uIG11c3QgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLidcbiAgICApIDogaW52YXJpYW50KENvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXIpKTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAhQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSxcbiAgICAgICAgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArXG4gICAgICAgICdjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyAnICtcbiAgICAgICAgJ1RoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyAnICtcbiAgICAgICAgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsXG4gICAgICAgIHNwZWMuZGlzcGxheU5hbWUgfHwgJ0EgY29tcG9uZW50J1xuICAgICAgKSA6IG51bGwpO1xuICAgIH1cblxuICAgIC8vIFJlZHVjZSB0aW1lIHNwZW50IGRvaW5nIGxvb2t1cHMgYnkgc2V0dGluZyB0aGVzZSBvbiB0aGUgcHJvdG90eXBlLlxuICAgIGZvciAodmFyIG1ldGhvZE5hbWUgaW4gUmVhY3RDbGFzc0ludGVyZmFjZSkge1xuICAgICAgaWYgKCFDb25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgaG9va1xuICAgIENvbnN0cnVjdG9yLnR5cGUgPSBDb25zdHJ1Y3RvcjtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB0cnkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsICd0eXBlJywgdHlwZURlcHJlY2F0aW9uRGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIC8vIElFIHdpbGwgZmFpbCBvbiBkZWZpbmVQcm9wZXJ0eSAoZXM1LXNoaW0vc2hhbSB0b28pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuXG4gIGluamVjdGlvbjoge1xuICAgIGluamVjdE1peGluOiBmdW5jdGlvbihtaXhpbikge1xuICAgICAgaW5qZWN0ZWRNaXhpbnMucHVzaChtaXhpbik7XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDbGFzcztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JEYkdGemN5NXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlNaV0ZqZEVOc1lYTnpYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnVW1WaFkzUkRiMjF3YjI1bGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU52YlhCdmJtVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFTjFjbkpsYm5SUGQyNWxjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUTNWeWNtVnVkRTkzYm1WeVhDSXBPMXh1ZG1GeUlGSmxZV04wUld4bGJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFVnljbTl5VlhScGJITWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZ5Y205eVZYUnBiSE5jSWlrN1hHNTJZWElnVW1WaFkzUkpibk4wWVc1alpVMWhjQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wU1c1emRHRnVZMlZOWVhCY0lpazdYRzUyWVhJZ1VtVmhZM1JNYVdabFEzbGpiR1VnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEV4cFptVkRlV05zWlZ3aUtUdGNiblpoY2lCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNXpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVjMXdpS1R0Y2JuWmhjaUJTWldGamRGQnliM0JVZVhCbFRHOWpZWFJwYjI1T1lXMWxjeUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVUhKdmNGUjVjR1ZNYjJOaGRHbHZiazVoYldWelhDSXBPMXh1ZG1GeUlGSmxZV04wVlhCa1lYUmxVWFZsZFdVZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGVndaR0YwWlZGMVpYVmxYQ0lwTzF4dVhHNTJZWElnWVhOemFXZHVJRDBnY21WeGRXbHlaU2hjSWk0dlQySnFaV04wTG1GemMybG5ibHdpS1R0Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1MllYSWdhMlY1VFdseWNtOXlJRDBnY21WeGRXbHlaU2hjSWk0dmEyVjVUV2x5Y205eVhDSXBPMXh1ZG1GeUlHdGxlVTltSUQwZ2NtVnhkV2x5WlNoY0lpNHZhMlY1VDJaY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JuWmhjaUJOU1ZoSlRsTmZTMFZaSUQwZ2EyVjVUMllvZTIxcGVHbHVjem9nYm5Wc2JIMHBPMXh1WEc0dktpcGNiaUFxSUZCdmJHbGphV1Z6SUhSb1lYUWdaR1Z6WTNKcFltVWdiV1YwYUc5a2N5QnBiaUJnVW1WaFkzUkRiR0Z6YzBsdWRHVnlabUZqWldBdVhHNGdLaTljYm5aaGNpQlRjR1ZqVUc5c2FXTjVJRDBnYTJWNVRXbHljbTl5S0h0Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlhObElHMWxkR2h2WkhNZ2JXRjVJR0psSUdSbFptbHVaV1FnYjI1c2VTQnZibU5sSUdKNUlIUm9aU0JqYkdGemN5QnpjR1ZqYVdacFkyRjBhVzl1SUc5eUlHMXBlR2x1TGx4dUlDQWdLaTljYmlBZ1JFVkdTVTVGWDA5T1EwVTZJRzUxYkd3c1hHNGdJQzhxS2x4dUlDQWdLaUJVYUdWelpTQnRaWFJvYjJSeklHMWhlU0JpWlNCa1pXWnBibVZrSUdKNUlHSnZkR2dnZEdobElHTnNZWE56SUhOd1pXTnBabWxqWVhScGIyNGdZVzVrSUcxcGVHbHVjeTVjYmlBZ0lDb2dVM1ZpYzJWeGRXVnVkQ0JrWldacGJtbDBhVzl1Y3lCM2FXeHNJR0psSUdOb1lXbHVaV1F1SUZSb1pYTmxJRzFsZEdodlpITWdiWFZ6ZENCeVpYUjFjbTRnZG05cFpDNWNiaUFnSUNvdlhHNGdJRVJGUmtsT1JWOU5RVTVaT2lCdWRXeHNMRnh1SUNBdktpcGNiaUFnSUNvZ1ZHaGxjMlVnYldWMGFHOWtjeUJoY21VZ2IzWmxjbkpwWkdsdVp5QjBhR1VnWW1GelpTQmpiR0Z6Y3k1Y2JpQWdJQ292WEc0Z0lFOVdSVkpTU1VSRlgwSkJVMFU2SUc1MWJHd3NYRzRnSUM4cUtseHVJQ0FnS2lCVWFHVnpaU0J0WlhSb2IyUnpJR0Z5WlNCemFXMXBiR0Z5SUhSdklFUkZSa2xPUlY5TlFVNVpMQ0JsZUdObGNIUWdkMlVnWVhOemRXMWxJSFJvWlhrZ2NtVjBkWEp1WEc0Z0lDQXFJRzlpYW1WamRITXVJRmRsSUhSeWVTQjBieUJ0WlhKblpTQjBhR1VnYTJWNWN5QnZaaUIwYUdVZ2NtVjBkWEp1SUhaaGJIVmxjeUJ2WmlCaGJHd2dkR2hsSUcxcGVHVmtJR2x1WEc0Z0lDQXFJR1oxYm1OMGFXOXVjeTRnU1dZZ2RHaGxjbVVnYVhNZ1lTQnJaWGtnWTI5dVpteHBZM1FnZDJVZ2RHaHliM2N1WEc0Z0lDQXFMMXh1SUNCRVJVWkpUa1ZmVFVGT1dWOU5SVkpIUlVRNklHNTFiR3hjYm4wcE8xeHVYRzVjYm5aaGNpQnBibXBsWTNSbFpFMXBlR2x1Y3lBOUlGdGRPMXh1WEc0dktpcGNiaUFxSUVOdmJYQnZjMmwwWlNCamIyMXdiMjVsYm5SeklHRnlaU0JvYVdkb1pYSXRiR1YyWld3Z1kyOXRjRzl1Wlc1MGN5QjBhR0YwSUdOdmJYQnZjMlVnYjNSb1pYSWdZMjl0Y0c5emFYUmxYRzRnS2lCdmNpQnVZWFJwZG1VZ1kyOXRjRzl1Wlc1MGN5NWNiaUFxWEc0Z0tpQlVieUJqY21WaGRHVWdZU0J1WlhjZ2RIbHdaU0J2WmlCZ1VtVmhZM1JEYkdGemMyQXNJSEJoYzNNZ1lTQnpjR1ZqYVdacFkyRjBhVzl1SUc5bVhHNGdLaUI1YjNWeUlHNWxkeUJqYkdGemN5QjBieUJnVW1WaFkzUXVZM0psWVhSbFEyeGhjM05nTGlCVWFHVWdiMjVzZVNCeVpYRjFhWEpsYldWdWRDQnZaaUI1YjNWeUlHTnNZWE56WEc0Z0tpQnpjR1ZqYVdacFkyRjBhVzl1SUdseklIUm9ZWFFnZVc5MUlHbHRjR3hsYldWdWRDQmhJR0J5Wlc1a1pYSmdJRzFsZEdodlpDNWNiaUFxWEc0Z0tpQWdJSFpoY2lCTmVVTnZiWEJ2Ym1WdWRDQTlJRkpsWVdOMExtTnlaV0YwWlVOc1lYTnpLSHRjYmlBcUlDQWdJQ0J5Wlc1a1pYSTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDb2dJQ0FnSUNBZ2NtVjBkWEp1SUR4a2FYWStTR1ZzYkc4Z1YyOXliR1E4TDJScGRqNDdYRzRnS2lBZ0lDQWdmVnh1SUNvZ0lDQjlLVHRjYmlBcVhHNGdLaUJVYUdVZ1kyeGhjM01nYzNCbFkybG1hV05oZEdsdmJpQnpkWEJ3YjNKMGN5QmhJSE53WldOcFptbGpJSEJ5YjNSdlkyOXNJRzltSUcxbGRHaHZaSE1nZEdoaGRDQm9ZWFpsWEc0Z0tpQnpjR1ZqYVdGc0lHMWxZVzVwYm1jZ0tHVXVaeTRnWUhKbGJtUmxjbUFwTGlCVFpXVWdZRkpsWVdOMFEyeGhjM05KYm5SbGNtWmhZMlZnSUdadmNseHVJQ29nYlc5eVpTQjBhR1VnWTI5dGNISmxhR1Z1YzJsMlpTQndjbTkwYjJOdmJDNGdRVzU1SUc5MGFHVnlJSEJ5YjNCbGNuUnBaWE1nWVc1a0lHMWxkR2h2WkhNZ2FXNGdkR2hsWEc0Z0tpQmpiR0Z6Y3lCemNHVmphV1pwWTJGMGFXOXVJSGRwYkd3Z1lYWmhhV3hoWW14bElHOXVJSFJvWlNCd2NtOTBiM1I1Y0dVdVhHNGdLbHh1SUNvZ1FHbHVkR1Z5Wm1GalpTQlNaV0ZqZEVOc1lYTnpTVzUwWlhKbVlXTmxYRzRnS2lCQWFXNTBaWEp1WVd4Y2JpQXFMMXh1ZG1GeUlGSmxZV04wUTJ4aGMzTkpiblJsY21aaFkyVWdQU0I3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUZ1SUdGeWNtRjVJRzltSUUxcGVHbHVJRzlpYW1WamRITWdkRzhnYVc1amJIVmtaU0IzYUdWdUlHUmxabWx1YVc1bklIbHZkWElnWTI5dGNHOXVaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQkFkSGx3WlNCN1lYSnlZWGw5WEc0Z0lDQXFJRUJ2Y0hScGIyNWhiRnh1SUNBZ0tpOWNiaUFnYldsNGFXNXpPaUJUY0dWalVHOXNhV041TGtSRlJrbE9SVjlOUVU1WkxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCQmJpQnZZbXBsWTNRZ1kyOXVkR0ZwYm1sdVp5QndjbTl3WlhKMGFXVnpJR0Z1WkNCdFpYUm9iMlJ6SUhSb1lYUWdjMmh2ZFd4a0lHSmxJR1JsWm1sdVpXUWdiMjVjYmlBZ0lDb2dkR2hsSUdOdmJYQnZibVZ1ZENkeklHTnZibk4wY25WamRHOXlJR2x1YzNSbFlXUWdiMllnYVhSeklIQnliM1J2ZEhsd1pTQW9jM1JoZEdsaklHMWxkR2h2WkhNcExseHVJQ0FnS2x4dUlDQWdLaUJBZEhsd1pTQjdiMkpxWldOMGZWeHVJQ0FnS2lCQWIzQjBhVzl1WVd4Y2JpQWdJQ292WEc0Z0lITjBZWFJwWTNNNklGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGtzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVJsWm1sdWFYUnBiMjRnYjJZZ2NISnZjQ0IwZVhCbGN5Qm1iM0lnZEdocGN5QmpiMjF3YjI1bGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCMGVYQmxJSHR2WW1wbFkzUjlYRzRnSUNBcUlFQnZjSFJwYjI1aGJGeHVJQ0FnS2k5Y2JpQWdjSEp2Y0ZSNWNHVnpPaUJUY0dWalVHOXNhV041TGtSRlJrbE9SVjlOUVU1WkxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCRVpXWnBibWwwYVc5dUlHOW1JR052Ym5SbGVIUWdkSGx3WlhNZ1ptOXlJSFJvYVhNZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJBZEhsd1pTQjdiMkpxWldOMGZWeHVJQ0FnS2lCQWIzQjBhVzl1WVd4Y2JpQWdJQ292WEc0Z0lHTnZiblJsZUhSVWVYQmxjem9nVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1JHVm1hVzVwZEdsdmJpQnZaaUJqYjI1MFpYaDBJSFI1Y0dWeklIUm9hWE1nWTI5dGNHOXVaVzUwSUhObGRITWdabTl5SUdsMGN5QmphR2xzWkhKbGJpNWNiaUFnSUNwY2JpQWdJQ29nUUhSNWNHVWdlMjlpYW1WamRIMWNiaUFnSUNvZ1FHOXdkR2x2Ym1Gc1hHNGdJQ0FxTDF4dUlDQmphR2xzWkVOdmJuUmxlSFJVZVhCbGN6b2dVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1N4Y2JseHVJQ0F2THlBOVBUMDlJRVJsWm1sdWFYUnBiMjRnYldWMGFHOWtjeUE5UFQwOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdWRtOXJaV1FnZDJobGJpQjBhR1VnWTI5dGNHOXVaVzUwSUdseklHMXZkVzUwWldRdUlGWmhiSFZsY3lCcGJpQjBhR1VnYldGd2NHbHVaeUIzYVd4c0lHSmxJSE5sZENCdmJseHVJQ0FnS2lCZ2RHaHBjeTV3Y205d2MyQWdhV1lnZEdoaGRDQndjbTl3SUdseklHNXZkQ0J6Y0dWamFXWnBaV1FnS0drdVpTNGdkWE5wYm1jZ1lXNGdZR2x1WUNCamFHVmpheWt1WEc0Z0lDQXFYRzRnSUNBcUlGUm9hWE1nYldWMGFHOWtJR2x6SUdsdWRtOXJaV1FnWW1WbWIzSmxJR0JuWlhSSmJtbDBhV0ZzVTNSaGRHVmdJR0Z1WkNCMGFHVnlaV1p2Y21VZ1kyRnVibTkwSUhKbGJIbGNiaUFnSUNvZ2IyNGdZSFJvYVhNdWMzUmhkR1ZnSUc5eUlIVnpaU0JnZEdocGN5NXpaWFJUZEdGMFpXQXVYRzRnSUNBcVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTI5aWFtVmpkSDFjYmlBZ0lDb2dRRzl3ZEdsdmJtRnNYRzRnSUNBcUwxeHVJQ0JuWlhSRVpXWmhkV3gwVUhKdmNITTZJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDFCVGxsZlRVVlNSMFZFTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJKYm5admEyVmtJRzl1WTJVZ1ltVm1iM0psSUhSb1pTQmpiMjF3YjI1bGJuUWdhWE1nYlc5MWJuUmxaQzRnVkdobElISmxkSFZ5YmlCMllXeDFaU0IzYVd4c0lHSmxJSFZ6WldSY2JpQWdJQ29nWVhNZ2RHaGxJR2x1YVhScFlXd2dkbUZzZFdVZ2IyWWdZSFJvYVhNdWMzUmhkR1ZnTGx4dUlDQWdLbHh1SUNBZ0tpQWdJR2RsZEVsdWFYUnBZV3hUZEdGMFpUb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQXFJQ0FnSUNCeVpYUjFjbTRnZTF4dUlDQWdLaUFnSUNBZ0lDQnBjMDl1T2lCbVlXeHpaU3hjYmlBZ0lDb2dJQ0FnSUNBZ1ptOXZRbUY2T2lCdVpYY2dRbUY2Um05dktDbGNiaUFnSUNvZ0lDQWdJSDFjYmlBZ0lDb2dJQ0I5WEc0Z0lDQXFYRzRnSUNBcUlFQnlaWFIxY200Z2UyOWlhbVZqZEgxY2JpQWdJQ29nUUc5d2RHbHZibUZzWEc0Z0lDQXFMMXh1SUNCblpYUkpibWwwYVdGc1UzUmhkR1U2SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsbGZUVVZTUjBWRUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCQWNtVjBkWEp1SUh0dlltcGxZM1I5WEc0Z0lDQXFJRUJ2Y0hScGIyNWhiRnh1SUNBZ0tpOWNiaUFnWjJWMFEyaHBiR1JEYjI1MFpYaDBPaUJUY0dWalVHOXNhV041TGtSRlJrbE9SVjlOUVU1WlgwMUZVa2RGUkN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVlhObGN5QndjbTl3Y3lCbWNtOXRJR0IwYUdsekxuQnliM0J6WUNCaGJtUWdjM1JoZEdVZ1puSnZiU0JnZEdocGN5NXpkR0YwWldBZ2RHOGdjbVZ1WkdWeUlIUm9aVnh1SUNBZ0tpQnpkSEoxWTNSMWNtVWdiMllnZEdobElHTnZiWEJ2Ym1WdWRDNWNiaUFnSUNwY2JpQWdJQ29nVG04Z1ozVmhjbUZ1ZEdWbGN5QmhjbVVnYldGa1pTQmhZbTkxZENCM2FHVnVJRzl5SUdodmR5QnZablJsYmlCMGFHbHpJRzFsZEdodlpDQnBjeUJwYm5admEyVmtMQ0J6YjF4dUlDQWdLaUJwZENCdGRYTjBJRzV2ZENCb1lYWmxJSE5wWkdVZ1pXWm1aV04wY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dJQ0J5Wlc1a1pYSTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdLaUFnSUNBZ2RtRnlJRzVoYldVZ1BTQjBhR2x6TG5CeWIzQnpMbTVoYldVN1hHNGdJQ0FxSUNBZ0lDQnlaWFIxY200Z1BHUnBkajVJWld4c2J5d2dlMjVoYldWOUlUd3ZaR2wyUGp0Y2JpQWdJQ29nSUNCOVhHNGdJQ0FxWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZWeHVJQ0FnS2lCQWJtOXphV1JsWldabVpXTjBjMXh1SUNBZ0tpQkFjbVZ4ZFdseVpXUmNiaUFnSUNvdlhHNGdJSEpsYm1SbGNqb2dVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUMDVEUlN4Y2JseHVYRzVjYmlBZ0x5OGdQVDA5UFNCRVpXeGxaMkYwWlNCdFpYUm9iMlJ6SUQwOVBUMWNibHh1SUNBdktpcGNiaUFnSUNvZ1NXNTJiMnRsWkNCM2FHVnVJSFJvWlNCamIyMXdiMjVsYm5RZ2FYTWdhVzVwZEdsaGJHeDVJR055WldGMFpXUWdZVzVrSUdGaWIzVjBJSFJ2SUdKbElHMXZkVzUwWldRdVhHNGdJQ0FxSUZSb2FYTWdiV0Y1SUdoaGRtVWdjMmxrWlNCbFptWmxZM1J6TENCaWRYUWdZVzU1SUdWNGRHVnlibUZzSUhOMVluTmpjbWx3ZEdsdmJuTWdiM0lnWkdGMFlTQmpjbVZoZEdWa1hHNGdJQ0FxSUdKNUlIUm9hWE1nYldWMGFHOWtJRzExYzNRZ1ltVWdZMnhsWVc1bFpDQjFjQ0JwYmlCZ1kyOXRjRzl1Wlc1MFYybHNiRlZ1Ylc5MWJuUmdMbHh1SUNBZ0tseHVJQ0FnS2lCQWIzQjBhVzl1WVd4Y2JpQWdJQ292WEc0Z0lHTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWREb2dVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1N4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nU1c1MmIydGxaQ0IzYUdWdUlIUm9aU0JqYjIxd2IyNWxiblFnYUdGeklHSmxaVzRnYlc5MWJuUmxaQ0JoYm1RZ2FHRnpJR0VnUkU5TklISmxjSEpsYzJWdWRHRjBhVzl1TGx4dUlDQWdLaUJJYjNkbGRtVnlMQ0IwYUdWeVpTQnBjeUJ1YnlCbmRXRnlZVzUwWldVZ2RHaGhkQ0IwYUdVZ1JFOU5JRzV2WkdVZ2FYTWdhVzRnZEdobElHUnZZM1Z0Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJWYzJVZ2RHaHBjeUJoY3lCaGJpQnZjSEJ2Y25SMWJtbDBlU0IwYnlCdmNHVnlZWFJsSUc5dUlIUm9aU0JFVDAwZ2QyaGxiaUIwYUdVZ1kyOXRjRzl1Wlc1MElHaGhjMXh1SUNBZ0tpQmlaV1Z1SUcxdmRXNTBaV1FnS0dsdWFYUnBZV3hwZW1Wa0lHRnVaQ0J5Wlc1a1pYSmxaQ2tnWm05eUlIUm9aU0JtYVhKemRDQjBhVzFsTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJSEp2YjNST2IyUmxJRVJQVFNCbGJHVnRaVzUwSUhKbGNISmxjMlZ1ZEdsdVp5QjBhR1VnWTI5dGNHOXVaVzUwTGx4dUlDQWdLaUJBYjNCMGFXOXVZV3hjYmlBZ0lDb3ZYRzRnSUdOdmJYQnZibVZ1ZEVScFpFMXZkVzUwT2lCVGNHVmpVRzlzYVdONUxrUkZSa2xPUlY5TlFVNVpMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkpiblp2YTJWa0lHSmxabTl5WlNCMGFHVWdZMjl0Y0c5dVpXNTBJSEpsWTJWcGRtVnpJRzVsZHlCd2NtOXdjeTVjYmlBZ0lDcGNiaUFnSUNvZ1ZYTmxJSFJvYVhNZ1lYTWdZVzRnYjNCd2IzSjBkVzVwZEhrZ2RHOGdjbVZoWTNRZ2RHOGdZU0J3Y205d0lIUnlZVzV6YVhScGIyNGdZbmtnZFhCa1lYUnBibWNnZEdobFhHNGdJQ0FxSUhOMFlYUmxJSFZ6YVc1bklHQjBhR2x6TG5ObGRGTjBZWFJsWUM0Z1EzVnljbVZ1ZENCd2NtOXdjeUJoY21VZ1lXTmpaWE56WldRZ2RtbGhJR0IwYUdsekxuQnliM0J6WUM1Y2JpQWdJQ3BjYmlBZ0lDb2dJQ0JqYjIxd2IyNWxiblJYYVd4c1VtVmpaV2wyWlZCeWIzQnpPaUJtZFc1amRHbHZiaWh1WlhoMFVISnZjSE1zSUc1bGVIUkRiMjUwWlhoMEtTQjdYRzRnSUNBcUlDQWdJQ0IwYUdsekxuTmxkRk4wWVhSbEtIdGNiaUFnSUNvZ0lDQWdJQ0FnYkdsclpYTkpibU55WldGemFXNW5PaUJ1WlhoMFVISnZjSE11YkdsclpVTnZkVzUwSUQ0Z2RHaHBjeTV3Y205d2N5NXNhV3RsUTI5MWJuUmNiaUFnSUNvZ0lDQWdJSDBwTzF4dUlDQWdLaUFnSUgxY2JpQWdJQ3BjYmlBZ0lDb2dUazlVUlRvZ1ZHaGxjbVVnYVhNZ2JtOGdaWEYxYVhaaGJHVnVkQ0JnWTI5dGNHOXVaVzUwVjJsc2JGSmxZMlZwZG1WVGRHRjBaV0F1SUVGdUlHbHVZMjl0YVc1bklIQnliM0JjYmlBZ0lDb2dkSEpoYm5OcGRHbHZiaUJ0WVhrZ1kyRjFjMlVnWVNCemRHRjBaU0JqYUdGdVoyVXNJR0oxZENCMGFHVWdiM0J3YjNOcGRHVWdhWE1nYm05MElIUnlkV1V1SUVsbUlIbHZkVnh1SUNBZ0tpQnVaV1ZrSUdsMExDQjViM1VnWVhKbElIQnliMkpoWW14NUlHeHZiMnRwYm1jZ1ptOXlJR0JqYjIxd2IyNWxiblJYYVd4c1ZYQmtZWFJsWUM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHNWxlSFJRY205d2MxeHVJQ0FnS2lCQWIzQjBhVzl1WVd4Y2JpQWdJQ292WEc0Z0lHTnZiWEJ2Ym1WdWRGZHBiR3hTWldObGFYWmxVSEp2Y0hNNklGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGtzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx1ZG05clpXUWdkMmhwYkdVZ1pHVmphV1JwYm1jZ2FXWWdkR2hsSUdOdmJYQnZibVZ1ZENCemFHOTFiR1FnWW1VZ2RYQmtZWFJsWkNCaGN5QmhJSEpsYzNWc2RDQnZabHh1SUNBZ0tpQnlaV05sYVhacGJtY2dibVYzSUhCeWIzQnpMQ0J6ZEdGMFpTQmhibVF2YjNJZ1kyOXVkR1Y0ZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dWWE5sSUhSb2FYTWdZWE1nWVc0Z2IzQndiM0owZFc1cGRIa2dkRzhnWUhKbGRIVnliaUJtWVd4elpXQWdkMmhsYmlCNWIzVW5jbVVnWTJWeWRHRnBiaUIwYUdGMElIUm9aVnh1SUNBZ0tpQjBjbUZ1YzJsMGFXOXVJSFJ2SUhSb1pTQnVaWGNnY0hKdmNITXZjM1JoZEdVdlkyOXVkR1Y0ZENCM2FXeHNJRzV2ZENCeVpYRjFhWEpsSUdFZ1kyOXRjRzl1Wlc1MFhHNGdJQ0FxSUhWd1pHRjBaUzVjYmlBZ0lDcGNiaUFnSUNvZ0lDQnphRzkxYkdSRGIyMXdiMjVsYm5SVmNHUmhkR1U2SUdaMWJtTjBhVzl1S0c1bGVIUlFjbTl3Y3l3Z2JtVjRkRk4wWVhSbExDQnVaWGgwUTI5dWRHVjRkQ2tnZTF4dUlDQWdLaUFnSUNBZ2NtVjBkWEp1SUNGbGNYVmhiQ2h1WlhoMFVISnZjSE1zSUhSb2FYTXVjSEp2Y0hNcElIeDhYRzRnSUNBcUlDQWdJQ0FnSUNGbGNYVmhiQ2h1WlhoMFUzUmhkR1VzSUhSb2FYTXVjM1JoZEdVcElIeDhYRzRnSUNBcUlDQWdJQ0FnSUNGbGNYVmhiQ2h1WlhoMFEyOXVkR1Y0ZEN3Z2RHaHBjeTVqYjI1MFpYaDBLVHRjYmlBZ0lDb2dJQ0I5WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCdVpYaDBVSEp2Y0hOY2JpQWdJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0J1WlhoMFUzUmhkR1ZjYmlBZ0lDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQnVaWGgwUTI5dWRHVjRkRnh1SUNBZ0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZTQlVjblZsSUdsbUlIUm9aU0JqYjIxd2IyNWxiblFnYzJodmRXeGtJSFZ3WkdGMFpTNWNiaUFnSUNvZ1FHOXdkR2x2Ym1Gc1hHNGdJQ0FxTDF4dUlDQnphRzkxYkdSRGIyMXdiMjVsYm5SVmNHUmhkR1U2SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDA5T1EwVXNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFbHVkbTlyWldRZ2QyaGxiaUIwYUdVZ1kyOXRjRzl1Wlc1MElHbHpJR0ZpYjNWMElIUnZJSFZ3WkdGMFpTQmtkV1VnZEc4Z1lTQjBjbUZ1YzJsMGFXOXVJR1p5YjIxY2JpQWdJQ29nWUhSb2FYTXVjSEp2Y0hOZ0xDQmdkR2hwY3k1emRHRjBaV0FnWVc1a0lHQjBhR2x6TG1OdmJuUmxlSFJnSUhSdklHQnVaWGgwVUhKdmNITmdMQ0JnYm1WNGRGTjBZWFJsWUZ4dUlDQWdLaUJoYm1RZ1lHNWxlSFJEYjI1MFpYaDBZQzVjYmlBZ0lDcGNiaUFnSUNvZ1ZYTmxJSFJvYVhNZ1lYTWdZVzRnYjNCd2IzSjBkVzVwZEhrZ2RHOGdjR1Z5Wm05eWJTQndjbVZ3WVhKaGRHbHZiaUJpWldadmNtVWdZVzRnZFhCa1lYUmxJRzlqWTNWeWN5NWNiaUFnSUNwY2JpQWdJQ29nVGs5VVJUb2dXVzkxSUNvcVkyRnVibTkwS2lvZ2RYTmxJR0IwYUdsekxuTmxkRk4wWVhSbEtDbGdJR2x1SUhSb2FYTWdiV1YwYUc5a0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdibVY0ZEZCeWIzQnpYRzRnSUNBcUlFQndZWEpoYlNCN1AyOWlhbVZqZEgwZ2JtVjRkRk4wWVhSbFhHNGdJQ0FxSUVCd1lYSmhiU0I3UDI5aWFtVmpkSDBnYm1WNGRFTnZiblJsZUhSY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVmU0IwY21GdWMyRmpkR2x2Ymx4dUlDQWdLaUJBYjNCMGFXOXVZV3hjYmlBZ0lDb3ZYRzRnSUdOdmJYQnZibVZ1ZEZkcGJHeFZjR1JoZEdVNklGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGtzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx1ZG05clpXUWdkMmhsYmlCMGFHVWdZMjl0Y0c5dVpXNTBKM01nUkU5TklISmxjSEpsYzJWdWRHRjBhVzl1SUdoaGN5QmlaV1Z1SUhWd1pHRjBaV1F1WEc0Z0lDQXFYRzRnSUNBcUlGVnpaU0IwYUdseklHRnpJR0Z1SUc5d2NHOXlkSFZ1YVhSNUlIUnZJRzl3WlhKaGRHVWdiMjRnZEdobElFUlBUU0IzYUdWdUlIUm9aU0JqYjIxd2IyNWxiblFnYUdGelhHNGdJQ0FxSUdKbFpXNGdkWEJrWVhSbFpDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSEJ5WlhaUWNtOXdjMXh1SUNBZ0tpQkFjR0Z5WVcwZ2V6OXZZbXBsWTNSOUlIQnlaWFpUZEdGMFpWeHVJQ0FnS2lCQWNHRnlZVzBnZXo5dlltcGxZM1I5SUhCeVpYWkRiMjUwWlhoMFhHNGdJQ0FxSUVCd1lYSmhiU0I3UkU5TlJXeGxiV1Z1ZEgwZ2NtOXZkRTV2WkdVZ1JFOU5JR1ZzWlcxbGJuUWdjbVZ3Y21WelpXNTBhVzVuSUhSb1pTQmpiMjF3YjI1bGJuUXVYRzRnSUNBcUlFQnZjSFJwYjI1aGJGeHVJQ0FnS2k5Y2JpQWdZMjl0Y0c5dVpXNTBSR2xrVlhCa1lYUmxPaUJUY0dWalVHOXNhV041TGtSRlJrbE9SVjlOUVU1WkxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCSmJuWnZhMlZrSUhkb1pXNGdkR2hsSUdOdmJYQnZibVZ1ZENCcGN5QmhZbTkxZENCMGJ5QmlaU0J5WlcxdmRtVmtJR1p5YjIwZ2FYUnpJSEJoY21WdWRDQmhibVFnYUdGMlpWeHVJQ0FnS2lCcGRITWdSRTlOSUhKbGNISmxjMlZ1ZEdGMGFXOXVJR1JsYzNSeWIzbGxaQzVjYmlBZ0lDcGNiaUFnSUNvZ1ZYTmxJSFJvYVhNZ1lYTWdZVzRnYjNCd2IzSjBkVzVwZEhrZ2RHOGdaR1ZoYkd4dlkyRjBaU0JoYm5rZ1pYaDBaWEp1WVd3Z2NtVnpiM1Z5WTJWekxseHVJQ0FnS2x4dUlDQWdLaUJPVDFSRk9pQlVhR1Z5WlNCcGN5QnVieUJnWTI5dGNHOXVaVzUwUkdsa1ZXNXRiM1Z1ZEdBZ2MybHVZMlVnZVc5MWNpQmpiMjF3YjI1bGJuUWdkMmxzYkNCb1lYWmxJR0psWlc1Y2JpQWdJQ29nWkdWemRISnZlV1ZrSUdKNUlIUm9ZWFFnY0c5cGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCdmNIUnBiMjVoYkZ4dUlDQWdLaTljYmlBZ1kyOXRjRzl1Wlc1MFYybHNiRlZ1Ylc5MWJuUTZJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDFCVGxrc1hHNWNibHh1WEc0Z0lDOHZJRDA5UFQwZ1FXUjJZVzVqWldRZ2JXVjBhRzlrY3lBOVBUMDlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGVndaR0YwWlhNZ2RHaGxJR052YlhCdmJtVnVkQ2R6SUdOMWNuSmxiblJzZVNCdGIzVnVkR1ZrSUVSUFRTQnlaWEJ5WlhObGJuUmhkR2x2Ymk1Y2JpQWdJQ3BjYmlBZ0lDb2dRbmtnWkdWbVlYVnNkQ3dnZEdocGN5QnBiWEJzWlcxbGJuUnpJRkpsWVdOMEozTWdjbVZ1WkdWeWFXNW5JR0Z1WkNCeVpXTnZibU5wYkdsaGRHbHZiaUJoYkdkdmNtbDBhRzB1WEc0Z0lDQXFJRk52Y0docGMzUnBZMkYwWldRZ1kyeHBaVzUwY3lCdFlYa2dkMmx6YUNCMGJ5QnZkbVZ5Y21sa1pTQjBhR2x6TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI1OUlIUnlZVzV6WVdOMGFXOXVYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2lCQWIzWmxjbkpwWkdGaWJHVmNiaUFnSUNvdlhHNGdJSFZ3WkdGMFpVTnZiWEJ2Ym1WdWREb2dVM0JsWTFCdmJHbGplUzVQVmtWU1VrbEVSVjlDUVZORlhHNWNibjA3WEc1Y2JpOHFLbHh1SUNvZ1RXRndjR2x1WnlCbWNtOXRJR05zWVhOeklITndaV05wWm1sallYUnBiMjRnYTJWNWN5QjBieUJ6Y0dWamFXRnNJSEJ5YjJObGMzTnBibWNnWm5WdVkzUnBiMjV6TGx4dUlDcGNiaUFxSUVGc2RHaHZkV2RvSUhSb1pYTmxJR0Z5WlNCa1pXTnNZWEpsWkNCc2FXdGxJR2x1YzNSaGJtTmxJSEJ5YjNCbGNuUnBaWE1nYVc0Z2RHaGxJSE53WldOcFptbGpZWFJwYjI1Y2JpQXFJSGRvWlc0Z1pHVm1hVzVwYm1jZ1kyeGhjM05sY3lCMWMybHVaeUJnVW1WaFkzUXVZM0psWVhSbFEyeGhjM05nTENCMGFHVjVJR0Z5WlNCaFkzUjFZV3hzZVNCemRHRjBhV05jYmlBcUlHRnVaQ0JoY21VZ1lXTmpaWE56YVdKc1pTQnZiaUIwYUdVZ1kyOXVjM1J5ZFdOMGIzSWdhVzV6ZEdWaFpDQnZaaUIwYUdVZ2NISnZkRzkwZVhCbExpQkVaWE53YVhSbFhHNGdLaUJpWldsdVp5QnpkR0YwYVdNc0lIUm9aWGtnYlhWemRDQmlaU0JrWldacGJtVmtJRzkxZEhOcFpHVWdiMllnZEdobElGd2ljM1JoZEdsamMxd2lJR3RsZVNCMWJtUmxjbHh1SUNvZ2QyaHBZMmdnWVd4c0lHOTBhR1Z5SUhOMFlYUnBZeUJ0WlhSb2IyUnpJR0Z5WlNCa1pXWnBibVZrTGx4dUlDb3ZYRzUyWVhJZ1VrVlRSVkpXUlVSZlUxQkZRMTlMUlZsVElEMGdlMXh1SUNCa2FYTndiR0Y1VG1GdFpUb2dablZ1WTNScGIyNG9RMjl1YzNSeWRXTjBiM0lzSUdScGMzQnNZWGxPWVcxbEtTQjdYRzRnSUNBZ1EyOXVjM1J5ZFdOMGIzSXVaR2x6Y0d4aGVVNWhiV1VnUFNCa2FYTndiR0Y1VG1GdFpUdGNiaUFnZlN4Y2JpQWdiV2w0YVc1ek9pQm1kVzVqZEdsdmJpaERiMjV6ZEhKMVkzUnZjaXdnYldsNGFXNXpLU0I3WEc0Z0lDQWdhV1lnS0cxcGVHbHVjeWtnZTF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCdGFYaHBibk11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdiV2w0VTNCbFkwbHVkRzlEYjIxd2IyNWxiblFvUTI5dWMzUnlkV04wYjNJc0lHMXBlR2x1YzF0cFhTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dUlDQmphR2xzWkVOdmJuUmxlSFJVZVhCbGN6b2dablZ1WTNScGIyNG9RMjl1YzNSeWRXTjBiM0lzSUdOb2FXeGtRMjl1ZEdWNGRGUjVjR1Z6S1NCN1hHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnZG1Gc2FXUmhkR1ZVZVhCbFJHVm1LRnh1SUNBZ0lDQWdJQ0JEYjI1emRISjFZM1J2Y2l4Y2JpQWdJQ0FnSUNBZ1kyaHBiR1JEYjI1MFpYaDBWSGx3WlhNc1hHNGdJQ0FnSUNBZ0lGSmxZV04wVUhKdmNGUjVjR1ZNYjJOaGRHbHZibk11WTJocGJHUkRiMjUwWlhoMFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JpQWdJQ0JEYjI1emRISjFZM1J2Y2k1amFHbHNaRU52Ym5SbGVIUlVlWEJsY3lBOUlHRnpjMmxuYmloY2JpQWdJQ0FnSUh0OUxGeHVJQ0FnSUNBZ1EyOXVjM1J5ZFdOMGIzSXVZMmhwYkdSRGIyNTBaWGgwVkhsd1pYTXNYRzRnSUNBZ0lDQmphR2xzWkVOdmJuUmxlSFJVZVhCbGMxeHVJQ0FnSUNrN1hHNGdJSDBzWEc0Z0lHTnZiblJsZUhSVWVYQmxjem9nWm5WdVkzUnBiMjRvUTI5dWMzUnlkV04wYjNJc0lHTnZiblJsZUhSVWVYQmxjeWtnZTF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJSFpoYkdsa1lYUmxWSGx3WlVSbFppaGNiaUFnSUNBZ0lDQWdRMjl1YzNSeWRXTjBiM0lzWEc0Z0lDQWdJQ0FnSUdOdmJuUmxlSFJVZVhCbGN5eGNiaUFnSUNBZ0lDQWdVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1Y3k1amIyNTBaWGgwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmlBZ0lDQkRiMjV6ZEhKMVkzUnZjaTVqYjI1MFpYaDBWSGx3WlhNZ1BTQmhjM05wWjI0b1hHNGdJQ0FnSUNCN2ZTeGNiaUFnSUNBZ0lFTnZibk4wY25WamRHOXlMbU52Ym5SbGVIUlVlWEJsY3l4Y2JpQWdJQ0FnSUdOdmJuUmxlSFJVZVhCbGMxeHVJQ0FnSUNrN1hHNGdJSDBzWEc0Z0lDOHFLbHh1SUNBZ0tpQlRjR1ZqYVdGc0lHTmhjMlVnWjJWMFJHVm1ZWFZzZEZCeWIzQnpJSGRvYVdOb0lITm9iM1ZzWkNCdGIzWmxJR2x1ZEc4Z2MzUmhkR2xqY3lCaWRYUWdjbVZ4ZFdseVpYTmNiaUFnSUNvZ1lYVjBiMjFoZEdsaklHMWxjbWRwYm1jdVhHNGdJQ0FxTDF4dUlDQm5aWFJFWldaaGRXeDBVSEp2Y0hNNklHWjFibU4wYVc5dUtFTnZibk4wY25WamRHOXlMQ0JuWlhSRVpXWmhkV3gwVUhKdmNITXBJSHRjYmlBZ0lDQnBaaUFvUTI5dWMzUnlkV04wYjNJdVoyVjBSR1ZtWVhWc2RGQnliM0J6S1NCN1hHNGdJQ0FnSUNCRGIyNXpkSEoxWTNSdmNpNW5aWFJFWldaaGRXeDBVSEp2Y0hNZ1BTQmpjbVZoZEdWTlpYSm5aV1JTWlhOMWJIUkdkVzVqZEdsdmJpaGNiaUFnSUNBZ0lDQWdRMjl1YzNSeWRXTjBiM0l1WjJWMFJHVm1ZWFZzZEZCeWIzQnpMRnh1SUNBZ0lDQWdJQ0JuWlhSRVpXWmhkV3gwVUhKdmNITmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUVOdmJuTjBjblZqZEc5eUxtZGxkRVJsWm1GMWJIUlFjbTl3Y3lBOUlHZGxkRVJsWm1GMWJIUlFjbTl3Y3p0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhCeWIzQlVlWEJsY3pvZ1puVnVZM1JwYjI0b1EyOXVjM1J5ZFdOMGIzSXNJSEJ5YjNCVWVYQmxjeWtnZTF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJSFpoYkdsa1lYUmxWSGx3WlVSbFppaGNiaUFnSUNBZ0lDQWdRMjl1YzNSeWRXTjBiM0lzWEc0Z0lDQWdJQ0FnSUhCeWIzQlVlWEJsY3l4Y2JpQWdJQ0FnSUNBZ1VtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVjeTV3Y205d1hHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JpQWdJQ0JEYjI1emRISjFZM1J2Y2k1d2NtOXdWSGx3WlhNZ1BTQmhjM05wWjI0b1hHNGdJQ0FnSUNCN2ZTeGNiaUFnSUNBZ0lFTnZibk4wY25WamRHOXlMbkJ5YjNCVWVYQmxjeXhjYmlBZ0lDQWdJSEJ5YjNCVWVYQmxjMXh1SUNBZ0lDazdYRzRnSUgwc1hHNGdJSE4wWVhScFkzTTZJR1oxYm1OMGFXOXVLRU52Ym5OMGNuVmpkRzl5TENCemRHRjBhV056S1NCN1hHNGdJQ0FnYldsNFUzUmhkR2xqVTNCbFkwbHVkRzlEYjIxd2IyNWxiblFvUTI5dWMzUnlkV04wYjNJc0lITjBZWFJwWTNNcE8xeHVJQ0I5WEc1OU8xeHVYRzVtZFc1amRHbHZiaUIyWVd4cFpHRjBaVlI1Y0dWRVpXWW9RMjl1YzNSeWRXTjBiM0lzSUhSNWNHVkVaV1lzSUd4dlkyRjBhVzl1S1NCN1hHNGdJR1p2Y2lBb2RtRnlJSEJ5YjNCT1lXMWxJR2x1SUhSNWNHVkVaV1lwSUh0Y2JpQWdJQ0JwWmlBb2RIbHdaVVJsWmk1b1lYTlBkMjVRY205d1pYSjBlU2h3Y205d1RtRnRaU2twSUh0Y2JpQWdJQ0FnSUM4dklIVnpaU0JoSUhkaGNtNXBibWNnYVc1emRHVmhaQ0J2WmlCaGJpQnBiblpoY21saGJuUWdjMjhnWTI5dGNHOXVaVzUwYzF4dUlDQWdJQ0FnTHk4Z1pHOXVKM1FnYzJodmR5QjFjQ0JwYmlCd2NtOWtJR0oxZENCdWIzUWdhVzRnWDE5RVJWWmZYMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lIUjVjR1Z2WmlCMGVYQmxSR1ZtVzNCeWIzQk9ZVzFsWFNBOVBUMGdKMloxYm1OMGFXOXVKeXhjYmlBZ0lDQWdJQ0FnSnlWek9pQWxjeUIwZVhCbElHQWxjMkFnYVhNZ2FXNTJZV3hwWkRzZ2FYUWdiWFZ6ZENCaVpTQmhJR1oxYm1OMGFXOXVMQ0IxYzNWaGJHeDVJR1p5YjIwZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RTWldGamRDNVFjbTl3Vkhsd1pYTXVKeXhjYmlBZ0lDQWdJQ0FnUTI5dWMzUnlkV04wYjNJdVpHbHpjR3hoZVU1aGJXVWdmSHdnSjFKbFlXTjBRMnhoYzNNbkxGeHVJQ0FnSUNBZ0lDQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGMxdHNiMk5oZEdsdmJsMHNYRzRnSUNBZ0lDQWdJSEJ5YjNCT1lXMWxYRzRnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJSFpoYkdsa1lYUmxUV1YwYUc5a1QzWmxjbkpwWkdVb2NISnZkRzhzSUc1aGJXVXBJSHRjYmlBZ2RtRnlJSE53WldOUWIyeHBZM2tnUFNCU1pXRmpkRU5zWVhOelNXNTBaWEptWVdObExtaGhjMDkzYmxCeWIzQmxjblI1S0c1aGJXVXBJRDljYmlBZ0lDQlNaV0ZqZEVOc1lYTnpTVzUwWlhKbVlXTmxXMjVoYldWZElEcGNiaUFnSUNCdWRXeHNPMXh1WEc0Z0lDOHZJRVJwYzJGc2JHOTNJRzkyWlhKeWFXUnBibWNnYjJZZ1ltRnpaU0JqYkdGemN5QnRaWFJvYjJSeklIVnViR1Z6Y3lCbGVIQnNhV05wZEd4NUlHRnNiRzkzWldRdVhHNGdJR2xtSUNoU1pXRmpkRU5zWVhOelRXbDRhVzR1YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVQVmtWU1VrbEVSVjlDUVZORkxGeHVJQ0FnSUNBZ0oxSmxZV04wUTJ4aGMzTkpiblJsY21aaFkyVTZJRmx2ZFNCaGNtVWdZWFIwWlcxd2RHbHVaeUIwYnlCdmRtVnljbWxrWlNBbklDdGNiaUFnSUNBZ0lDZGdKWE5nSUdaeWIyMGdlVzkxY2lCamJHRnpjeUJ6Y0dWamFXWnBZMkYwYVc5dUxpQkZibk4xY21VZ2RHaGhkQ0I1YjNWeUlHMWxkR2h2WkNCdVlXMWxjeUFuSUN0Y2JpQWdJQ0FnSUNka2J5QnViM1FnYjNabGNteGhjQ0IzYVhSb0lGSmxZV04wSUcxbGRHaHZaSE11Snl4Y2JpQWdJQ0FnSUc1aGJXVmNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLSE53WldOUWIyeHBZM2tnUFQwOUlGTndaV05RYjJ4cFkza3VUMVpGVWxKSlJFVmZRa0ZUUlNrcE8xeHVJQ0I5WEc1Y2JpQWdMeThnUkdsellXeHNiM2NnWkdWbWFXNXBibWNnYldWMGFHOWtjeUJ0YjNKbElIUm9ZVzRnYjI1alpTQjFibXhsYzNNZ1pYaHdiR2xqYVhSc2VTQmhiR3h2ZDJWa0xseHVJQ0JwWmlBb2NISnZkRzh1YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1NCOGZGeHVJQ0FnSUNBZ2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dWOU5SVkpIUlVRc1hHNGdJQ0FnSUNBblVtVmhZM1JEYkdGemMwbHVkR1Z5Wm1GalpUb2dXVzkxSUdGeVpTQmhkSFJsYlhCMGFXNW5JSFJ2SUdSbFptbHVaU0FuSUN0Y2JpQWdJQ0FnSUNkZ0pYTmdJRzl1SUhsdmRYSWdZMjl0Y0c5dVpXNTBJRzF2Y21VZ2RHaGhiaUJ2Ym1ObExpQlVhR2x6SUdOdmJtWnNhV04wSUcxaGVTQmlaU0JrZFdVZ0p5QXJYRzRnSUNBZ0lDQW5kRzhnWVNCdGFYaHBiaTRuTEZ4dUlDQWdJQ0FnYm1GdFpWeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9jM0JsWTFCdmJHbGplU0E5UFQwZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XU0I4ZkZ4dUlDQWdJSE53WldOUWIyeHBZM2tnUFQwOUlGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGxmVFVWU1IwVkVLU2s3WEc0Z0lIMWNibjFjYmx4dUx5b3FYRzRnS2lCTmFYaHBiaUJvWld4d1pYSWdkMmhwWTJnZ2FHRnVaR3hsY3lCd2IyeHBZM2tnZG1Gc2FXUmhkR2x2YmlCaGJtUWdjbVZ6WlhKMlpXUmNiaUFxSUhOd1pXTnBabWxqWVhScGIyNGdhMlY1Y3lCM2FHVnVJR0oxYVd4a2FXNW5JRkpsWVdOMElHTnNZWE56YzJWekxseHVJQ292WEc1bWRXNWpkR2x2YmlCdGFYaFRjR1ZqU1c1MGIwTnZiWEJ2Ym1WdWRDaERiMjV6ZEhKMVkzUnZjaXdnYzNCbFl5a2dlMXh1SUNCcFppQW9JWE53WldNcElIdGNiaUFnSUNCeVpYUjFjbTQ3WEc0Z0lIMWNibHh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJSFI1Y0dWdlppQnpjR1ZqSUNFOVBTQW5ablZ1WTNScGIyNG5MRnh1SUNBZ0lDZFNaV0ZqZEVOc1lYTnpPaUJaYjNWY1hDZHlaU0JoZEhSbGJYQjBhVzVuSUhSdklDY2dLMXh1SUNBZ0lDZDFjMlVnWVNCamIyMXdiMjVsYm5RZ1kyeGhjM01nWVhNZ1lTQnRhWGhwYmk0Z1NXNXpkR1ZoWkN3Z2FuVnpkQ0IxYzJVZ1lTQnlaV2QxYkdGeUlHOWlhbVZqZEM0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2RIbHdaVzltSUhOd1pXTWdJVDA5SUNkbWRXNWpkR2x2YmljcEtUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWhVbVZoWTNSRmJHVnRaVzUwTG1selZtRnNhV1JGYkdWdFpXNTBLSE53WldNcExGeHVJQ0FnSUNkU1pXRmpkRU5zWVhOek9pQlpiM1ZjWENkeVpTQmhkSFJsYlhCMGFXNW5JSFJ2SUNjZ0sxeHVJQ0FnSUNkMWMyVWdZU0JqYjIxd2IyNWxiblFnWVhNZ1lTQnRhWGhwYmk0Z1NXNXpkR1ZoWkN3Z2FuVnpkQ0IxYzJVZ1lTQnlaV2QxYkdGeUlHOWlhbVZqZEM0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lWSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaHpjR1ZqS1NrcE8xeHVYRzRnSUhaaGNpQndjbTkwYnlBOUlFTnZibk4wY25WamRHOXlMbkJ5YjNSdmRIbHdaVHRjYmx4dUlDQXZMeUJDZVNCb1lXNWtiR2x1WnlCdGFYaHBibk1nWW1WbWIzSmxJR0Z1ZVNCdmRHaGxjaUJ3Y205d1pYSjBhV1Z6TENCM1pTQmxibk4xY21VZ2RHaGxJSE5oYldWY2JpQWdMeThnWTJoaGFXNXBibWNnYjNKa1pYSWdhWE1nWVhCd2JHbGxaQ0IwYnlCdFpYUm9iMlJ6SUhkcGRHZ2dSRVZHU1U1RlgwMUJUbGtnY0c5c2FXTjVMQ0IzYUdWMGFHVnlYRzRnSUM4dklHMXBlR2x1Y3lCaGNtVWdiR2x6ZEdWa0lHSmxabTl5WlNCdmNpQmhablJsY2lCMGFHVnpaU0J0WlhSb2IyUnpJR2x1SUhSb1pTQnpjR1ZqTGx4dUlDQnBaaUFvYzNCbFl5NW9ZWE5QZDI1UWNtOXdaWEowZVNoTlNWaEpUbE5mUzBWWktTa2dlMXh1SUNBZ0lGSkZVMFZTVmtWRVgxTlFSVU5mUzBWWlV5NXRhWGhwYm5Nb1EyOXVjM1J5ZFdOMGIzSXNJSE53WldNdWJXbDRhVzV6S1R0Y2JpQWdmVnh1WEc0Z0lHWnZjaUFvZG1GeUlHNWhiV1VnYVc0Z2MzQmxZeWtnZTF4dUlDQWdJR2xtSUNnaGMzQmxZeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHVZVzFsS1NrZ2UxeHVJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHNWhiV1VnUFQwOUlFMUpXRWxPVTE5TFJWa3BJSHRjYmlBZ0lDQWdJQzh2SUZkbElHaGhkbVVnWVd4eVpXRmtlU0JvWVc1a2JHVmtJRzFwZUdsdWN5QnBiaUJoSUhOd1pXTnBZV3dnWTJGelpTQmhZbTkyWlZ4dUlDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkbUZ5SUhCeWIzQmxjblI1SUQwZ2MzQmxZMXR1WVcxbFhUdGNiaUFnSUNCMllXeHBaR0YwWlUxbGRHaHZaRTkyWlhKeWFXUmxLSEJ5YjNSdkxDQnVZVzFsS1R0Y2JseHVJQ0FnSUdsbUlDaFNSVk5GVWxaRlJGOVRVRVZEWDB0RldWTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2twSUh0Y2JpQWdJQ0FnSUZKRlUwVlNWa1ZFWDFOUVJVTmZTMFZaVTF0dVlXMWxYU2hEYjI1emRISjFZM1J2Y2l3Z2NISnZjR1Z5ZEhrcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0F2THlCVFpYUjFjQ0J0WlhSb2IyUnpJRzl1SUhCeWIzUnZkSGx3WlRwY2JpQWdJQ0FnSUM4dklGUm9aU0JtYjJ4c2IzZHBibWNnYldWdFltVnlJRzFsZEdodlpITWdjMmh2ZFd4a0lHNXZkQ0JpWlNCaGRYUnZiV0YwYVdOaGJHeDVJR0p2ZFc1a09seHVJQ0FnSUNBZ0x5OGdNUzRnUlhod1pXTjBaV1FnVW1WaFkzUkRiR0Z6Y3lCdFpYUm9iMlJ6SUNocGJpQjBhR1VnWENKcGJuUmxjbVpoWTJWY0lpa3VYRzRnSUNBZ0lDQXZMeUF5TGlCUGRtVnljbWxrWkdWdUlHMWxkR2h2WkhNZ0tIUm9ZWFFnZDJWeVpTQnRhWGhsWkNCcGJpa3VYRzRnSUNBZ0lDQjJZWElnYVhOU1pXRmpkRU5zWVhOelRXVjBhRzlrSUQxY2JpQWdJQ0FnSUNBZ1VtVmhZM1JEYkdGemMwbHVkR1Z5Wm1GalpTNW9ZWE5QZDI1UWNtOXdaWEowZVNodVlXMWxLVHRjYmlBZ0lDQWdJSFpoY2lCcGMwRnNjbVZoWkhsRVpXWnBibVZrSUQwZ2NISnZkRzh1YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrN1hHNGdJQ0FnSUNCMllYSWdiV0Z5YTJWa1JHOXVkRUpwYm1RZ1BTQndjbTl3WlhKMGVTQW1KaUJ3Y205d1pYSjBlUzVmWDNKbFlXTjBSRzl1ZEVKcGJtUTdYRzRnSUNBZ0lDQjJZWElnYVhOR2RXNWpkR2x2YmlBOUlIUjVjR1Z2WmlCd2NtOXdaWEowZVNBOVBUMGdKMloxYm1OMGFXOXVKenRjYmlBZ0lDQWdJSFpoY2lCemFHOTFiR1JCZFhSdlFtbHVaQ0E5WEc0Z0lDQWdJQ0FnSUdselJuVnVZM1JwYjI0Z0ppWmNiaUFnSUNBZ0lDQWdJV2x6VW1WaFkzUkRiR0Z6YzAxbGRHaHZaQ0FtSmx4dUlDQWdJQ0FnSUNBaGFYTkJiSEpsWVdSNVJHVm1hVzVsWkNBbUpseHVJQ0FnSUNBZ0lDQWhiV0Z5YTJWa1JHOXVkRUpwYm1RN1hHNWNiaUFnSUNBZ0lHbG1JQ2h6YUc5MWJHUkJkWFJ2UW1sdVpDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lYQnliM1J2TGw5ZmNtVmhZM1JCZFhSdlFtbHVaRTFoY0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEJ5YjNSdkxsOWZjbVZoWTNSQmRYUnZRbWx1WkUxaGNDQTlJSHQ5TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIQnliM1J2TGw5ZmNtVmhZM1JCZFhSdlFtbHVaRTFoY0Z0dVlXMWxYU0E5SUhCeWIzQmxjblI1TzF4dUlDQWdJQ0FnSUNCd2NtOTBiMXR1WVcxbFhTQTlJSEJ5YjNCbGNuUjVPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdhV1lnS0dselFXeHlaV0ZrZVVSbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjJZWElnYzNCbFkxQnZiR2xqZVNBOUlGSmxZV04wUTJ4aGMzTkpiblJsY21aaFkyVmJibUZ0WlYwN1hHNWNiaUFnSUNBZ0lDQWdJQ0F2THlCVWFHVnpaU0JqWVhObGN5QnphRzkxYkdRZ1lXeHlaV0ZrZVNCaVpTQmpZWFZuYUhRZ1lua2dkbUZzYVdSaGRHVk5aWFJvYjJSUGRtVnljbWxrWlZ4dUlDQWdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwYzFKbFlXTjBRMnhoYzNOTlpYUm9iMlFnSmlZZ0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBb2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dWOU5SVkpIUlVRZ2ZId2djM0JsWTFCdmJHbGplU0E5UFQwZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBblVtVmhZM1JEYkdGemN6b2dWVzVsZUhCbFkzUmxaQ0J6Y0dWaklIQnZiR2xqZVNBbGN5Qm1iM0lnYTJWNUlDVnpJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdKM2RvWlc0Z2JXbDRhVzVuSUdsdUlHTnZiWEJ2Ym1WdWRDQnpjR1ZqY3k0bkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNCbFkxQnZiR2xqZVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVoYldWY2JpQWdJQ0FnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0dselVtVmhZM1JEYkdGemMwMWxkR2h2WkNBbUppQW9YRzRnSUNBZ0lDQWdJQ0FnSUNBb2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dWOU5SVkpIUlVRZ2ZId2djM0JsWTFCdmJHbGplU0E5UFQwZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XU2xjYmlBZ0lDQWdJQ0FnSUNBcEtTazdYRzVjYmlBZ0lDQWdJQ0FnSUNBdkx5QkdiM0lnYldWMGFHOWtjeUIzYUdsamFDQmhjbVVnWkdWbWFXNWxaQ0J0YjNKbElIUm9ZVzRnYjI1alpTd2dZMkZzYkNCMGFHVWdaWGhwYzNScGJtZGNiaUFnSUNBZ0lDQWdJQ0F2THlCdFpYUm9iMlJ6SUdKbFptOXlaU0JqWVd4c2FXNW5JSFJvWlNCdVpYY2djSEp2Y0dWeWRIa3NJRzFsY21kcGJtY2dhV1lnWVhCd2NtOXdjbWxoZEdVdVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hOd1pXTlFiMnhwWTNrZ1BUMDlJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDFCVGxsZlRVVlNSMFZFS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3Y205MGIxdHVZVzFsWFNBOUlHTnlaV0YwWlUxbGNtZGxaRkpsYzNWc2RFWjFibU4wYVc5dUtIQnliM1J2VzI1aGJXVmRMQ0J3Y205d1pYSjBlU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaHpjR1ZqVUc5c2FXTjVJRDA5UFNCVGNHVmpVRzlzYVdONUxrUkZSa2xPUlY5TlFVNVpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQndjbTkwYjF0dVlXMWxYU0E5SUdOeVpXRjBaVU5vWVdsdVpXUkdkVzVqZEdsdmJpaHdjbTkwYjF0dVlXMWxYU3dnY0hKdmNHVnlkSGtwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0J3Y205MGIxdHVZVzFsWFNBOUlIQnliM0JsY25SNU8xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRUZrWkNCMlpYSmliM05sSUdScGMzQnNZWGxPWVcxbElIUnZJSFJvWlNCbWRXNWpkR2x2Yml3Z2QyaHBZMmdnYUdWc2NITWdkMmhsYmlCc2IyOXJhVzVuWEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJoZENCd2NtOW1hV3hwYm1jZ2RHOXZiSE11WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JSEJ5YjNCbGNuUjVJRDA5UFNBblpuVnVZM1JwYjI0bklDWW1JSE53WldNdVpHbHpjR3hoZVU1aGJXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjSEp2ZEc5YmJtRnRaVjB1WkdsemNHeGhlVTVoYldVZ1BTQnpjR1ZqTG1ScGMzQnNZWGxPWVcxbElDc2dKMThuSUNzZ2JtRnRaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z2JXbDRVM1JoZEdsalUzQmxZMGx1ZEc5RGIyMXdiMjVsYm5Rb1EyOXVjM1J5ZFdOMGIzSXNJSE4wWVhScFkzTXBJSHRjYmlBZ2FXWWdLQ0Z6ZEdGMGFXTnpLU0I3WEc0Z0lDQWdjbVYwZFhKdU8xeHVJQ0I5WEc0Z0lHWnZjaUFvZG1GeUlHNWhiV1VnYVc0Z2MzUmhkR2xqY3lrZ2UxeHVJQ0FnSUhaaGNpQndjbTl3WlhKMGVTQTlJSE4wWVhScFkzTmJibUZ0WlYwN1hHNGdJQ0FnYVdZZ0tDRnpkR0YwYVdOekxtaGhjMDkzYmxCeWIzQmxjblI1S0c1aGJXVXBLU0I3WEc0Z0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjJZWElnYVhOU1pYTmxjblpsWkNBOUlHNWhiV1VnYVc0Z1VrVlRSVkpXUlVSZlUxQkZRMTlMUlZsVE8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FoYVhOU1pYTmxjblpsWkN4Y2JpQWdJQ0FnSUNkU1pXRmpkRU5zWVhOek9pQlpiM1VnWVhKbElHRjBkR1Z0Y0hScGJtY2dkRzhnWkdWbWFXNWxJR0VnY21WelpYSjJaV1FnSnlBclhHNGdJQ0FnSUNBbmNISnZjR1Z5ZEhrc0lHQWxjMkFzSUhSb1lYUWdjMmh2ZFd4a2JseGNKM1FnWW1VZ2IyNGdkR2hsSUZ3aWMzUmhkR2xqYzF3aUlHdGxlUzRnUkdWbWFXNWxJR2wwSUNjZ0sxeHVJQ0FnSUNBZ0oyRnpJR0Z1SUdsdWMzUmhibU5sSUhCeWIzQmxjblI1SUdsdWMzUmxZV1E3SUdsMElIZHBiR3dnYzNScGJHd2dZbVVnWVdOalpYTnphV0pzWlNCdmJpQjBhR1VnSnlBclhHNGdJQ0FnSUNBblkyOXVjM1J5ZFdOMGIzSXVKeXhjYmlBZ0lDQWdJRzVoYldWY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtDRnBjMUpsYzJWeWRtVmtLU2s3WEc1Y2JpQWdJQ0IyWVhJZ2FYTkpibWhsY21sMFpXUWdQU0J1WVcxbElHbHVJRU52Ym5OMGNuVmpkRzl5TzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWhhWE5KYm1obGNtbDBaV1FzWEc0Z0lDQWdJQ0FuVW1WaFkzUkRiR0Z6Y3pvZ1dXOTFJR0Z5WlNCaGRIUmxiWEIwYVc1bklIUnZJR1JsWm1sdVpTQW5JQ3RjYmlBZ0lDQWdJQ2RnSlhOZ0lHOXVJSGx2ZFhJZ1kyOXRjRzl1Wlc1MElHMXZjbVVnZEdoaGJpQnZibU5sTGlCVWFHbHpJR052Ym1ac2FXTjBJRzFoZVNCaVpTQW5JQ3RjYmlBZ0lDQWdJQ2RrZFdVZ2RHOGdZU0J0YVhocGJpNG5MRnh1SUNBZ0lDQWdibUZ0WlZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lXbHpTVzVvWlhKcGRHVmtLU2s3WEc0Z0lDQWdRMjl1YzNSeWRXTjBiM0piYm1GdFpWMGdQU0J3Y205d1pYSjBlVHRjYmlBZ2ZWeHVmVnh1WEc0dktpcGNiaUFxSUUxbGNtZGxJSFIzYnlCdlltcGxZM1J6TENCaWRYUWdkR2h5YjNjZ2FXWWdZbTkwYUNCamIyNTBZV2x1SUhSb1pTQnpZVzFsSUd0bGVTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2IyNWxJRlJvWlNCbWFYSnpkQ0J2WW1wbFkzUXNJSGRvYVdOb0lHbHpJRzExZEdGMFpXUXVYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnZEhkdklGUm9aU0J6WldOdmJtUWdiMkpxWldOMFhHNGdLaUJBY21WMGRYSnVJSHR2WW1wbFkzUjlJRzl1WlNCaFpuUmxjaUJwZENCb1lYTWdZbVZsYmlCdGRYUmhkR1ZrSUhSdklHTnZiblJoYVc0Z1pYWmxjbmwwYUdsdVp5QnBiaUIwZDI4dVhHNGdLaTljYm1aMWJtTjBhVzl1SUcxbGNtZGxTVzUwYjFkcGRHaE9iMFIxY0d4cFkyRjBaVXRsZVhNb2IyNWxMQ0IwZDI4cElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQnZibVVnSmlZZ2RIZHZJQ1ltSUhSNWNHVnZaaUJ2Ym1VZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUhSNWNHVnZaaUIwZDI4Z1BUMDlJQ2R2WW1wbFkzUW5MRnh1SUNBZ0lDZHRaWEpuWlVsdWRHOVhhWFJvVG05RWRYQnNhV05oZEdWTFpYbHpLQ2s2SUVOaGJtNXZkQ0J0WlhKblpTQnViMjR0YjJKcVpXTjBjeTRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvYjI1bElDWW1JSFIzYnlBbUppQjBlWEJsYjJZZ2IyNWxJRDA5UFNBbmIySnFaV04wSnlBbUppQjBlWEJsYjJZZ2RIZHZJRDA5UFNBbmIySnFaV04wSnlrcE8xeHVYRzRnSUdadmNpQW9kbUZ5SUd0bGVTQnBiaUIwZDI4cElIdGNiaUFnSUNCcFppQW9kSGR2TG1oaGMwOTNibEJ5YjNCbGNuUjVLR3RsZVNrcElIdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lHOXVaVnRyWlhsZElEMDlQU0IxYm1SbFptbHVaV1FzWEc0Z0lDQWdJQ0FnSUNkdFpYSm5aVWx1ZEc5WGFYUm9UbTlFZFhCc2FXTmhkR1ZMWlhsektDazZJQ2NnSzF4dUlDQWdJQ0FnSUNBblZISnBaV1FnZEc4Z2JXVnlaMlVnZEhkdklHOWlhbVZqZEhNZ2QybDBhQ0IwYUdVZ2MyRnRaU0JyWlhrNklHQWxjMkF1SUZSb2FYTWdZMjl1Wm14cFkzUWdKeUFyWEc0Z0lDQWdJQ0FnSUNkdFlYa2dZbVVnWkhWbElIUnZJR0VnYldsNGFXNDdJR2x1SUhCaGNuUnBZM1ZzWVhJc0lIUm9hWE1nYldGNUlHSmxJR05oZFhObFpDQmllU0IwZDI4Z0p5QXJYRzRnSUNBZ0lDQWdJQ2RuWlhSSmJtbDBhV0ZzVTNSaGRHVW9LU0J2Y2lCblpYUkVaV1poZFd4MFVISnZjSE1vS1NCdFpYUm9iMlJ6SUhKbGRIVnlibWx1WnlCdlltcGxZM1J6SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5kMmwwYUNCamJHRnphR2x1WnlCclpYbHpMaWNzWEc0Z0lDQWdJQ0FnSUd0bGVWeHVJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2h2Ym1WYmEyVjVYU0E5UFQwZ2RXNWtaV1pwYm1Wa0tTazdYRzRnSUNBZ0lDQnZibVZiYTJWNVhTQTlJSFIzYjF0clpYbGRPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2IyNWxPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQm1kVzVqZEdsdmJpQjBhR0YwSUdsdWRtOXJaWE1nZEhkdklHWjFibU4wYVc5dWN5QmhibVFnYldWeVoyVnpJSFJvWldseUlISmxkSFZ5YmlCMllXeDFaWE11WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnYjI1bElFWjFibU4wYVc5dUlIUnZJR2x1ZG05clpTQm1hWEp6ZEM1Y2JpQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNTlJSFIzYnlCR2RXNWpkR2x2YmlCMGJ5QnBiblp2YTJVZ2MyVmpiMjVrTGx4dUlDb2dRSEpsZEhWeWJpQjdablZ1WTNScGIyNTlJRVoxYm1OMGFXOXVJSFJvWVhRZ2FXNTJiMnRsY3lCMGFHVWdkSGR2SUdGeVozVnRaVzUwSUdaMWJtTjBhVzl1Y3k1Y2JpQXFJRUJ3Y21sMllYUmxYRzRnS2k5Y2JtWjFibU4wYVc5dUlHTnlaV0YwWlUxbGNtZGxaRkpsYzNWc2RFWjFibU4wYVc5dUtHOXVaU3dnZEhkdktTQjdYRzRnSUhKbGRIVnliaUJtZFc1amRHbHZiaUJ0WlhKblpXUlNaWE4xYkhRb0tTQjdYRzRnSUNBZ2RtRnlJR0VnUFNCdmJtVXVZWEJ3Ykhrb2RHaHBjeXdnWVhKbmRXMWxiblJ6S1R0Y2JpQWdJQ0IyWVhJZ1lpQTlJSFIzYnk1aGNIQnNlU2gwYUdsekxDQmhjbWQxYldWdWRITXBPMXh1SUNBZ0lHbG1JQ2hoSUQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJpTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvWWlBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWVR0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdNZ1BTQjdmVHRjYmlBZ0lDQnRaWEpuWlVsdWRHOVhhWFJvVG05RWRYQnNhV05oZEdWTFpYbHpLR01zSUdFcE8xeHVJQ0FnSUcxbGNtZGxTVzUwYjFkcGRHaE9iMFIxY0d4cFkyRjBaVXRsZVhNb1l5d2dZaWs3WEc0Z0lDQWdjbVYwZFhKdUlHTTdYRzRnSUgwN1hHNTlYRzVjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoSUdaMWJtTjBhVzl1SUhSb1lYUWdhVzUyYjJ0bGN5QjBkMjhnWm5WdVkzUnBiMjV6SUdGdVpDQnBaMjV2Y21WeklIUm9aV2x5SUhKbGRIVnliaUIyWVd4bGN5NWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQnZibVVnUm5WdVkzUnBiMjRnZEc4Z2FXNTJiMnRsSUdacGNuTjBMbHh1SUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2Ym4wZ2RIZHZJRVoxYm1OMGFXOXVJSFJ2SUdsdWRtOXJaU0J6WldOdmJtUXVYRzRnS2lCQWNtVjBkWEp1SUh0bWRXNWpkR2x2Ym4wZ1JuVnVZM1JwYjI0Z2RHaGhkQ0JwYm5admEyVnpJSFJvWlNCMGQyOGdZWEpuZFcxbGJuUWdablZ1WTNScGIyNXpMbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWTNKbFlYUmxRMmhoYVc1bFpFWjFibU4wYVc5dUtHOXVaU3dnZEhkdktTQjdYRzRnSUhKbGRIVnliaUJtZFc1amRHbHZiaUJqYUdGcGJtVmtSblZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdiMjVsTG1Gd2NHeDVLSFJvYVhNc0lHRnlaM1Z0Wlc1MGN5azdYRzRnSUNBZ2RIZHZMbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lrN1hHNGdJSDA3WEc1OVhHNWNiaThxS2x4dUlDb2dRbWx1WkhNZ1lTQnRaWFJvYjJRZ2RHOGdkR2hsSUdOdmJYQnZibVZ1ZEM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnWTI5dGNHOXVaVzUwSUVOdmJYQnZibVZ1ZENCM2FHOXpaU0J0WlhSb2IyUWdhWE1nWjI5cGJtY2dkRzhnWW1VZ1ltOTFibVF1WEc0Z0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQnRaWFJvYjJRZ1RXVjBhRzlrSUhSdklHSmxJR0p2ZFc1a0xseHVJQ29nUUhKbGRIVnliaUI3Wm5WdVkzUnBiMjU5SUZSb1pTQmliM1Z1WkNCdFpYUm9iMlF1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR0pwYm1SQmRYUnZRbWx1WkUxbGRHaHZaQ2hqYjIxd2IyNWxiblFzSUcxbGRHaHZaQ2tnZTF4dUlDQjJZWElnWW05MWJtUk5aWFJvYjJRZ1BTQnRaWFJvYjJRdVltbHVaQ2hqYjIxd2IyNWxiblFwTzF4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ1ltOTFibVJOWlhSb2IyUXVYMTl5WldGamRFSnZkVzVrUTI5dWRHVjRkQ0E5SUdOdmJYQnZibVZ1ZER0Y2JpQWdJQ0JpYjNWdVpFMWxkR2h2WkM1ZlgzSmxZV04wUW05MWJtUk5aWFJvYjJRZ1BTQnRaWFJvYjJRN1hHNGdJQ0FnWW05MWJtUk5aWFJvYjJRdVgxOXlaV0ZqZEVKdmRXNWtRWEpuZFcxbGJuUnpJRDBnYm5Wc2JEdGNiaUFnSUNCMllYSWdZMjl0Y0c5dVpXNTBUbUZ0WlNBOUlHTnZiWEJ2Ym1WdWRDNWpiMjV6ZEhKMVkzUnZjaTVrYVhOd2JHRjVUbUZ0WlR0Y2JpQWdJQ0IyWVhJZ1gySnBibVFnUFNCaWIzVnVaRTFsZEdodlpDNWlhVzVrTzF4dUlDQWdJQzhxSUdWemJHbHVkQzFrYVhOaFlteGxJR0pzYjJOckxYTmpiM0JsWkMxMllYSXNJRzV2TFhWdVpHVm1JQ292WEc0Z0lDQWdZbTkxYm1STlpYUm9iMlF1WW1sdVpDQTlJR1oxYm1OMGFXOXVLRzVsZDFSb2FYTWdLU0I3Wm05eUlDaDJZWElnWVhKbmN6MWJYU3drWDE4d1BURXNKRjlmTVQxaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvT3lSZlh6QThKRjlmTVRza1gxOHdLeXNwSUdGeVozTXVjSFZ6YUNoaGNtZDFiV1Z1ZEhOYkpGOWZNRjBwTzF4dUlDQWdJQ0FnTHk4Z1ZYTmxjaUJwY3lCMGNubHBibWNnZEc4Z1ltbHVaQ2dwSUdGdUlHRjFkRzlpYjNWdVpDQnRaWFJvYjJRN0lIZGxJR1ZtWm1WamRHbDJaV3g1SUhkcGJHeGNiaUFnSUNBZ0lDOHZJR2xuYm05eVpTQjBhR1VnZG1Gc2RXVWdiMllnWENKMGFHbHpYQ0lnZEdoaGRDQjBhR1VnZFhObGNpQnBjeUIwY25scGJtY2dkRzhnZFhObExDQnpiMXh1SUNBZ0lDQWdMeThnYkdWMEozTWdkMkZ5Ymk1Y2JpQWdJQ0FnSUdsbUlDaHVaWGRVYUdseklDRTlQU0JqYjIxd2IyNWxiblFnSmlZZ2JtVjNWR2hwY3lBaFBUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQW5ZbWx1WkNncE9pQlNaV0ZqZENCamIyMXdiMjVsYm5RZ2JXVjBhRzlrY3lCdFlYa2diMjVzZVNCaVpTQmliM1Z1WkNCMGJ5QjBhR1VnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMk52YlhCdmJtVnVkQ0JwYm5OMFlXNWpaUzRnVTJWbElDVnpKeXhjYmlBZ0lDQWdJQ0FnSUNCamIyMXdiMjVsYm5ST1lXMWxYRzRnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvSVdGeVozTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWdJR1poYkhObExGeHVJQ0FnSUNBZ0lDQWdJQ2RpYVc1a0tDazZJRmx2ZFNCaGNtVWdZbWx1WkdsdVp5QmhJR052YlhCdmJtVnVkQ0J0WlhSb2IyUWdkRzhnZEdobElHTnZiWEJ2Ym1WdWRDNGdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oxSmxZV04wSUdSdlpYTWdkR2hwY3lCbWIzSWdlVzkxSUdGMWRHOXRZWFJwWTJGc2JIa2dhVzRnWVNCb2FXZG9MWEJsY21admNtMWhibU5sSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2QzWVhrc0lITnZJSGx2ZFNCallXNGdjMkZtWld4NUlISmxiVzkyWlNCMGFHbHpJR05oYkd3dUlGTmxaU0FsY3ljc1hHNGdJQ0FnSUNBZ0lDQWdZMjl0Y0c5dVpXNTBUbUZ0WlZ4dUlDQWdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCaWIzVnVaRTFsZEdodlpEdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIWmhjaUJ5WldKdmRXNWtUV1YwYUc5a0lEMGdYMkpwYm1RdVlYQndiSGtvWW05MWJtUk5aWFJvYjJRc0lHRnlaM1Z0Wlc1MGN5azdYRzRnSUNBZ0lDQnlaV0p2ZFc1a1RXVjBhRzlrTGw5ZmNtVmhZM1JDYjNWdVpFTnZiblJsZUhRZ1BTQmpiMjF3YjI1bGJuUTdYRzRnSUNBZ0lDQnlaV0p2ZFc1a1RXVjBhRzlrTGw5ZmNtVmhZM1JDYjNWdVpFMWxkR2h2WkNBOUlHMWxkR2h2WkR0Y2JpQWdJQ0FnSUhKbFltOTFibVJOWlhSb2IyUXVYMTl5WldGamRFSnZkVzVrUVhKbmRXMWxiblJ6SUQwZ1lYSm5jenRjYmlBZ0lDQWdJSEpsZEhWeWJpQnlaV0p2ZFc1a1RXVjBhRzlrTzF4dUlDQWdJQ0FnTHlvZ1pYTnNhVzUwTFdWdVlXSnNaU0FxTDF4dUlDQWdJSDA3WEc0Z0lIMWNiaUFnY21WMGRYSnVJR0p2ZFc1a1RXVjBhRzlrTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUpwYm1SeklHRnNiQ0JoZFhSdkxXSnZkVzVrSUcxbGRHaHZaSE1nYVc0Z1lTQmpiMjF3YjI1bGJuUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHTnZiWEJ2Ym1WdWRDQkRiMjF3YjI1bGJuUWdkMmh2YzJVZ2JXVjBhRzlrSUdseklHZHZhVzVuSUhSdklHSmxJR0p2ZFc1a0xseHVJQ292WEc1bWRXNWpkR2x2YmlCaWFXNWtRWFYwYjBKcGJtUk5aWFJvYjJSektHTnZiWEJ2Ym1WdWRDa2dlMXh1SUNCbWIzSWdLSFpoY2lCaGRYUnZRbWx1WkV0bGVTQnBiaUJqYjIxd2IyNWxiblF1WDE5eVpXRmpkRUYxZEc5Q2FXNWtUV0Z3S1NCN1hHNGdJQ0FnYVdZZ0tHTnZiWEJ2Ym1WdWRDNWZYM0psWVdOMFFYVjBiMEpwYm1STllYQXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb1lYVjBiMEpwYm1STFpYa3BLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2JXVjBhRzlrSUQwZ1kyOXRjRzl1Wlc1MExsOWZjbVZoWTNSQmRYUnZRbWx1WkUxaGNGdGhkWFJ2UW1sdVpFdGxlVjA3WEc0Z0lDQWdJQ0JqYjIxd2IyNWxiblJiWVhWMGIwSnBibVJMWlhsZElEMGdZbWx1WkVGMWRHOUNhVzVrVFdWMGFHOWtLRnh1SUNBZ0lDQWdJQ0JqYjIxd2IyNWxiblFzWEc0Z0lDQWdJQ0FnSUZKbFlXTjBSWEp5YjNKVmRHbHNjeTVuZFdGeVpDaGNiaUFnSUNBZ0lDQWdJQ0J0WlhSb2IyUXNYRzRnSUNBZ0lDQWdJQ0FnWTI5dGNHOXVaVzUwTG1OdmJuTjBjblZqZEc5eUxtUnBjM0JzWVhsT1lXMWxJQ3NnSnk0bklDc2dZWFYwYjBKcGJtUkxaWGxjYmlBZ0lDQWdJQ0FnS1Z4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibjFjYmx4dWRtRnlJSFI1Y0dWRVpYQnlaV05oZEdsdmJrUmxjMk55YVhCMGIzSWdQU0I3WEc0Z0lHVnVkVzFsY21GaWJHVTZJR1poYkhObExGeHVJQ0JuWlhRNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lIWmhjaUJrYVhOd2JHRjVUbUZ0WlNBOUlIUm9hWE11WkdsemNHeGhlVTVoYldVZ2ZId2dkR2hwY3k1dVlXMWxJSHg4SUNkRGIyMXdiMjVsYm5Rbk8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBbkpYTXVkSGx3WlNCcGN5QmtaWEJ5WldOaGRHVmtMaUJWYzJVZ0pYTWdaR2x5WldOMGJIa2dkRzhnWVdOalpYTnpJSFJvWlNCamJHRnpjeTRuTEZ4dUlDQWdJQ0FnWkdsemNHeGhlVTVoYldVc1hHNGdJQ0FnSUNCa2FYTndiR0Y1VG1GdFpWeHVJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0JQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb2RHaHBjeXdnSjNSNWNHVW5MQ0I3WEc0Z0lDQWdJQ0IyWVd4MVpUb2dkR2hwYzF4dUlDQWdJSDBwTzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TzF4dUlDQjlYRzU5TzF4dVhHNHZLaXBjYmlBcUlFRmtaQ0J0YjNKbElIUnZJSFJvWlNCU1pXRmpkRU5zWVhOeklHSmhjMlVnWTJ4aGMzTXVJRlJvWlhObElHRnlaU0JoYkd3Z2JHVm5ZV041SUdabFlYUjFjbVZ6SUdGdVpGeHVJQ29nZEdobGNtVm1iM0psSUc1dmRDQmhiSEpsWVdSNUlIQmhjblFnYjJZZ2RHaGxJRzF2WkdWeWJpQlNaV0ZqZEVOdmJYQnZibVZ1ZEM1Y2JpQXFMMXh1ZG1GeUlGSmxZV04wUTJ4aGMzTk5hWGhwYmlBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1ZFOUVUem9nVkdocGN5QjNhV3hzSUdKbElHUmxjSEpsWTJGMFpXUWdZbVZqWVhWelpTQnpkR0YwWlNCemFHOTFiR1FnWVd4M1lYbHpJR3RsWlhBZ1lTQmpiMjV6YVhOMFpXNTBYRzRnSUNBcUlIUjVjR1VnYzJsbmJtRjBkWEpsSUdGdVpDQjBhR1VnYjI1c2VTQjFjMlVnWTJGelpTQm1iM0lnZEdocGN5d2dhWE1nZEc4Z1lYWnZhV1FnZEdoaGRDNWNiaUFnSUNvdlhHNGdJSEpsY0d4aFkyVlRkR0YwWlRvZ1puVnVZM1JwYjI0b2JtVjNVM1JoZEdVc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlM1bGJuRjFaWFZsVW1Wd2JHRmpaVk4wWVhSbEtIUm9hWE1zSUc1bGQxTjBZWFJsS1R0Y2JpQWdJQ0JwWmlBb1kyRnNiR0poWTJzcElIdGNiaUFnSUNBZ0lGSmxZV04wVlhCa1lYUmxVWFZsZFdVdVpXNXhkV1YxWlVOaGJHeGlZV05yS0hSb2FYTXNJR05oYkd4aVlXTnJLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOb1pXTnJjeUIzYUdWMGFHVnlJRzl5SUc1dmRDQjBhR2x6SUdOdmJYQnZjMmwwWlNCamIyMXdiMjVsYm5RZ2FYTWdiVzkxYm5SbFpDNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4wZ1ZISjFaU0JwWmlCdGIzVnVkR1ZrTENCbVlXeHpaU0J2ZEdobGNuZHBjMlV1WEc0Z0lDQXFJRUJ3Y205MFpXTjBaV1JjYmlBZ0lDb2dRR1pwYm1Gc1hHNGdJQ0FxTDF4dUlDQnBjMDF2ZFc1MFpXUTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJSFpoY2lCdmQyNWxjaUE5SUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5TG1OMWNuSmxiblE3WEc0Z0lDQWdJQ0JwWmlBb2IzZHVaWElnSVQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUNBZ2IzZHVaWEl1WDNkaGNtNWxaRUZpYjNWMFVtVm1jMGx1VW1WdVpHVnlMRnh1SUNBZ0lDQWdJQ0FnSUNjbGN5QnBjeUJoWTJObGMzTnBibWNnYVhOTmIzVnVkR1ZrSUdsdWMybGtaU0JwZEhNZ2NtVnVaR1Z5S0NrZ1puVnVZM1JwYjI0dUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkeVpXNWtaWElvS1NCemFHOTFiR1FnWW1VZ1lTQndkWEpsSUdaMWJtTjBhVzl1SUc5bUlIQnliM0J6SUdGdVpDQnpkR0YwWlM0Z1NYUWdjMmh2ZFd4a0lDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkdVpYWmxjaUJoWTJObGMzTWdjMjl0WlhSb2FXNW5JSFJvWVhRZ2NtVnhkV2x5WlhNZ2MzUmhiR1VnWkdGMFlTQm1jbTl0SUhSb1pTQndjbVYyYVc5MWN5QW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBbmNtVnVaR1Z5TENCemRXTm9JR0Z6SUhKbFpuTXVJRTF2ZG1VZ2RHaHBjeUJzYjJkcFl5QjBieUJqYjIxd2IyNWxiblJFYVdSTmIzVnVkQ0JoYm1RZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjJOdmJYQnZibVZ1ZEVScFpGVndaR0YwWlNCcGJuTjBaV0ZrTGljc1hHNGdJQ0FnSUNBZ0lDQWdiM2R1WlhJdVoyVjBUbUZ0WlNncElIeDhJQ2RCSUdOdmJYQnZibVZ1ZENkY2JpQWdJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNBZ0lDQnZkMjVsY2k1ZmQyRnlibVZrUVdKdmRYUlNaV1p6U1c1U1pXNWtaWElnUFNCMGNuVmxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCMllYSWdhVzUwWlhKdVlXeEpibk4wWVc1alpTQTlJRkpsWVdOMFNXNXpkR0Z1WTJWTllYQXVaMlYwS0hSb2FYTXBPMXh1SUNBZ0lISmxkSFZ5YmlBb1hHNGdJQ0FnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sSUNZbVhHNGdJQ0FnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sSUNFOVBTQlNaV0ZqZEV4cFptVkRlV05zWlM1amRYSnlaVzUwYkhsTmIzVnVkR2x1WjBsdWMzUmhibU5sWEc0Z0lDQWdLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1UyVjBjeUJoSUhOMVluTmxkQ0J2WmlCMGFHVWdjSEp2Y0hNdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQndZWEowYVdGc1VISnZjSE1nVTNWaWMyVjBJRzltSUhSb1pTQnVaWGgwSUhCeWIzQnpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2V6OW1kVzVqZEdsdmJuMGdZMkZzYkdKaFkyc2dRMkZzYkdWa0lHRm1kR1Z5SUhCeWIzQnpJR0Z5WlNCMWNHUmhkR1ZrTGx4dUlDQWdLaUJBWm1sdVlXeGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBWkdWd2NtVmpZWFJsWkZ4dUlDQWdLaTljYmlBZ2MyVjBVSEp2Y0hNNklHWjFibU4wYVc5dUtIQmhjblJwWVd4UWNtOXdjeXdnWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0JTWldGamRGVndaR0YwWlZGMVpYVmxMbVZ1Y1hWbGRXVlRaWFJRY205d2N5aDBhR2x6TENCd1lYSjBhV0ZzVUhKdmNITXBPMXh1SUNBZ0lHbG1JQ2hqWVd4c1ltRmpheWtnZTF4dUlDQWdJQ0FnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVsYm5GMVpYVmxRMkZzYkdKaFkyc29kR2hwY3l3Z1kyRnNiR0poWTJzcE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVZ3YkdGalpTQmhiR3dnZEdobElIQnliM0J6TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2JtVjNVSEp2Y0hNZ1UzVmljMlYwSUc5bUlIUm9aU0J1WlhoMElIQnliM0J6TGx4dUlDQWdLaUJBY0dGeVlXMGdlejltZFc1amRHbHZibjBnWTJGc2JHSmhZMnNnUTJGc2JHVmtJR0ZtZEdWeUlIQnliM0J6SUdGeVpTQjFjR1JoZEdWa0xseHVJQ0FnS2lCQVptbHVZV3hjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQVpHVndjbVZqWVhSbFpGeHVJQ0FnS2k5Y2JpQWdjbVZ3YkdGalpWQnliM0J6T2lCbWRXNWpkR2x2YmlodVpYZFFjbTl3Y3l3Z1kyRnNiR0poWTJzcElIdGNiaUFnSUNCU1pXRmpkRlZ3WkdGMFpWRjFaWFZsTG1WdWNYVmxkV1ZTWlhCc1lXTmxVSEp2Y0hNb2RHaHBjeXdnYm1WM1VISnZjSE1wTzF4dUlDQWdJR2xtSUNoallXeHNZbUZqYXlrZ2UxeHVJQ0FnSUNBZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlM1bGJuRjFaWFZsUTJGc2JHSmhZMnNvZEdocGN5d2dZMkZzYkdKaFkyc3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dWZUdGNibHh1ZG1GeUlGSmxZV04wUTJ4aGMzTkRiMjF3YjI1bGJuUWdQU0JtZFc1amRHbHZiaWdwSUh0OU8xeHVZWE56YVdkdUtGeHVJQ0JTWldGamRFTnNZWE56UTI5dGNHOXVaVzUwTG5CeWIzUnZkSGx3WlN4Y2JpQWdVbVZoWTNSRGIyMXdiMjVsYm5RdWNISnZkRzkwZVhCbExGeHVJQ0JTWldGamRFTnNZWE56VFdsNGFXNWNiaWs3WEc1Y2JpOHFLbHh1SUNvZ1RXOWtkV3hsSUdadmNpQmpjbVZoZEdsdVp5QmpiMjF3YjNOcGRHVWdZMjl0Y0c5dVpXNTBjeTVjYmlBcVhHNGdLaUJBWTJ4aGMzTWdVbVZoWTNSRGJHRnpjMXh1SUNvdlhHNTJZWElnVW1WaFkzUkRiR0Z6Y3lBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsY3lCaElHTnZiWEJ2YzJsMFpTQmpiMjF3YjI1bGJuUWdZMnhoYzNNZ1oybDJaVzRnWVNCamJHRnpjeUJ6Y0dWamFXWnBZMkYwYVc5dUxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdjM0JsWXlCRGJHRnpjeUJ6Y0dWamFXWnBZMkYwYVc5dUlDaDNhR2xqYUNCdGRYTjBJR1JsWm1sdVpTQmdjbVZ1WkdWeVlDa3VYRzRnSUNBcUlFQnlaWFIxY200Z2UyWjFibU4wYVc5dWZTQkRiMjF3YjI1bGJuUWdZMjl1YzNSeWRXTjBiM0lnWm5WdVkzUnBiMjR1WEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvdlhHNGdJR055WldGMFpVTnNZWE56T2lCbWRXNWpkR2x2YmloemNHVmpLU0I3WEc0Z0lDQWdkbUZ5SUVOdmJuTjBjblZqZEc5eUlEMGdablZ1WTNScGIyNG9jSEp2Y0hNc0lHTnZiblJsZUhRcElIdGNiaUFnSUNBZ0lDOHZJRlJvYVhNZ1kyOXVjM1J5ZFdOMGIzSWdhWE1nYjNabGNuSnBaR1JsYmlCaWVTQnRiMk5yY3k0Z1ZHaGxJR0Z5WjNWdFpXNTBJR2x6SUhWelpXUmNiaUFnSUNBZ0lDOHZJR0o1SUcxdlkydHpJSFJ2SUdGemMyVnlkQ0J2YmlCM2FHRjBJR2RsZEhNZ2JXOTFiblJsWkM1Y2JseHVJQ0FnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lDQjBhR2x6SUdsdWMzUmhibU5sYjJZZ1EyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQWdJQ0FnSjFOdmJXVjBhR2x1WnlCcGN5QmpZV3hzYVc1bklHRWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MElHUnBjbVZqZEd4NUxpQlZjMlVnWVNCbVlXTjBiM0o1SUc5eUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkS1UxZ2dhVzV6ZEdWaFpDNGdVMlZsT2lCb2RIUndjem92TDJaaUxtMWxMM0psWVdOMExXeGxaMkZqZVdaaFkzUnZjbmtuWEc0Z0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0x5OGdWMmx5WlNCMWNDQmhkWFJ2TFdKcGJtUnBibWRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbDlmY21WaFkzUkJkWFJ2UW1sdVpFMWhjQ2tnZTF4dUlDQWdJQ0FnSUNCaWFXNWtRWFYwYjBKcGJtUk5aWFJvYjJSektIUm9hWE1wTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCMGFHbHpMbkJ5YjNCeklEMGdjSEp2Y0hNN1hHNGdJQ0FnSUNCMGFHbHpMbU52Ym5SbGVIUWdQU0JqYjI1MFpYaDBPMXh1SUNBZ0lDQWdkR2hwY3k1emRHRjBaU0E5SUc1MWJHdzdYRzVjYmlBZ0lDQWdJQzh2SUZKbFlXTjBRMnhoYzNObGN5QmtiMlZ6YmlkMElHaGhkbVVnWTI5dWMzUnlkV04wYjNKekxpQkpibk4wWldGa0xDQjBhR1Y1SUhWelpTQjBhR1ZjYmlBZ0lDQWdJQzh2SUdkbGRFbHVhWFJwWVd4VGRHRjBaU0JoYm1RZ1kyOXRjRzl1Wlc1MFYybHNiRTF2ZFc1MElHMWxkR2h2WkhNZ1ptOXlJR2x1YVhScFlXeHBlbUYwYVc5dUxseHVYRzRnSUNBZ0lDQjJZWElnYVc1cGRHbGhiRk4wWVhSbElEMGdkR2hwY3k1blpYUkpibWwwYVdGc1UzUmhkR1VnUHlCMGFHbHpMbWRsZEVsdWFYUnBZV3hUZEdGMFpTZ3BJRG9nYm5Wc2JEdGNiaUFnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdMeThnVjJVZ1lXeHNiM2NnWVhWMGJ5MXRiMk5yY3lCMGJ5QndjbTlqWldWa0lHRnpJR2xtSUhSb1pYa25jbVVnY21WMGRYSnVhVzVuSUc1MWJHd3VYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYVc1cGRHbGhiRk4wWVhSbElEMDlQU0FuZFc1a1pXWnBibVZrSnlBbUpseHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NW5aWFJKYm1sMGFXRnNVM1JoZEdVdVgybHpUVzlqYTBaMWJtTjBhVzl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVkdocGN5QnBjeUJ3Y205aVlXSnNlU0JpWVdRZ2NISmhZM1JwWTJVdUlFTnZibk5wWkdWeUlIZGhjbTVwYm1jZ2FHVnlaU0JoYm1SY2JpQWdJQ0FnSUNBZ0lDQXZMeUJrWlhCeVpXTmhkR2x1WnlCMGFHbHpJR052Ym5abGJtbGxibU5sTGx4dUlDQWdJQ0FnSUNBZ0lHbHVhWFJwWVd4VGRHRjBaU0E5SUc1MWJHdzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJSFI1Y0dWdlppQnBibWwwYVdGc1UzUmhkR1VnUFQwOUlDZHZZbXBsWTNRbklDWW1JQ0ZCY25KaGVTNXBjMEZ5Y21GNUtHbHVhWFJwWVd4VGRHRjBaU2tzWEc0Z0lDQWdJQ0FnSUNjbGN5NW5aWFJKYm1sMGFXRnNVM1JoZEdVb0tUb2diWFZ6ZENCeVpYUjFjbTRnWVc0Z2IySnFaV04wSUc5eUlHNTFiR3duTEZ4dUlDQWdJQ0FnSUNCRGIyNXpkSEoxWTNSdmNpNWthWE53YkdGNVRtRnRaU0I4ZkNBblVtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblFuWEc0Z0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIUjVjR1Z2WmlCcGJtbDBhV0ZzVTNSaGRHVWdQVDA5SUNkdlltcGxZM1FuSUNZbUlDRkJjbkpoZVM1cGMwRnljbUY1S0dsdWFYUnBZV3hUZEdGMFpTa3BLVHRjYmx4dUlDQWdJQ0FnZEdocGN5NXpkR0YwWlNBOUlHbHVhWFJwWVd4VGRHRjBaVHRjYmlBZ0lDQjlPMXh1SUNBZ0lFTnZibk4wY25WamRHOXlMbkJ5YjNSdmRIbHdaU0E5SUc1bGR5QlNaV0ZqZEVOc1lYTnpRMjl0Y0c5dVpXNTBLQ2s3WEc0Z0lDQWdRMjl1YzNSeWRXTjBiM0l1Y0hKdmRHOTBlWEJsTG1OdmJuTjBjblZqZEc5eUlEMGdRMjl1YzNSeWRXTjBiM0k3WEc1Y2JpQWdJQ0JwYm1wbFkzUmxaRTFwZUdsdWN5NW1iM0pGWVdOb0tGeHVJQ0FnSUNBZ2JXbDRVM0JsWTBsdWRHOURiMjF3YjI1bGJuUXVZbWx1WkNodWRXeHNMQ0JEYjI1emRISjFZM1J2Y2lsY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnYldsNFUzQmxZMGx1ZEc5RGIyMXdiMjVsYm5Rb1EyOXVjM1J5ZFdOMGIzSXNJSE53WldNcE8xeHVYRzRnSUNBZ0x5OGdTVzVwZEdsaGJHbDZaU0IwYUdVZ1pHVm1ZWFZzZEZCeWIzQnpJSEJ5YjNCbGNuUjVJR0ZtZEdWeUlHRnNiQ0J0YVhocGJuTWdhR0YyWlNCaVpXVnVJRzFsY21kbFpGeHVJQ0FnSUdsbUlDaERiMjV6ZEhKMVkzUnZjaTVuWlhSRVpXWmhkV3gwVUhKdmNITXBJSHRjYmlBZ0lDQWdJRU52Ym5OMGNuVmpkRzl5TG1SbFptRjFiSFJRY205d2N5QTlJRU52Ym5OMGNuVmpkRzl5TG1kbGRFUmxabUYxYkhSUWNtOXdjeWdwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQzh2SUZSb2FYTWdhWE1nWVNCMFlXY2dkRzhnYVc1a2FXTmhkR1VnZEdoaGRDQjBhR1VnZFhObElHOW1JSFJvWlhObElHMWxkR2h2WkNCdVlXMWxjeUJwY3lCdmF5eGNiaUFnSUNBZ0lDOHZJSE5wYm1ObElHbDBKM01nZFhObFpDQjNhWFJvSUdOeVpXRjBaVU5zWVhOekxpQkpaaUJwZENkeklHNXZkQ3dnZEdobGJpQnBkQ2R6SUd4cGEyVnNlU0JoWEc0Z0lDQWdJQ0F2THlCdGFYTjBZV3RsSUhOdklIZGxKMnhzSUhkaGNtNGdlVzkxSUhSdklIVnpaU0IwYUdVZ2MzUmhkR2xqSUhCeWIzQmxjblI1TENCd2NtOXdaWEowZVZ4dUlDQWdJQ0FnTHk4Z2FXNXBkR2xoYkdsNlpYSWdiM0lnWTI5dWMzUnlkV04wYjNJZ2NtVnpjR1ZqZEdsMlpXeDVMbHh1SUNBZ0lDQWdhV1lnS0VOdmJuTjBjblZqZEc5eUxtZGxkRVJsWm1GMWJIUlFjbTl3Y3lrZ2UxeHVJQ0FnSUNBZ0lDQkRiMjV6ZEhKMVkzUnZjaTVuWlhSRVpXWmhkV3gwVUhKdmNITXVhWE5TWldGamRFTnNZWE56UVhCd2NtOTJaV1FnUFNCN2ZUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2hEYjI1emRISjFZM1J2Y2k1d2NtOTBiM1I1Y0dVdVoyVjBTVzVwZEdsaGJGTjBZWFJsS1NCN1hHNGdJQ0FnSUNBZ0lFTnZibk4wY25WamRHOXlMbkJ5YjNSdmRIbHdaUzVuWlhSSmJtbDBhV0ZzVTNSaGRHVXVhWE5TWldGamRFTnNZWE56UVhCd2NtOTJaV1FnUFNCN2ZUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnUTI5dWMzUnlkV04wYjNJdWNISnZkRzkwZVhCbExuSmxibVJsY2l4Y2JpQWdJQ0FnSUNkamNtVmhkR1ZEYkdGemN5Z3VMaTRwT2lCRGJHRnpjeUJ6Y0dWamFXWnBZMkYwYVc5dUlHMTFjM1FnYVcxd2JHVnRaVzUwSUdFZ1lISmxibVJsY21BZ2JXVjBhRzlrTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtFTnZibk4wY25WamRHOXlMbkJ5YjNSdmRIbHdaUzV5Wlc1a1pYSXBLVHRjYmx4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWhRMjl1YzNSeWRXTjBiM0l1Y0hKdmRHOTBlWEJsTG1OdmJYQnZibVZ1ZEZOb2IzVnNaRlZ3WkdGMFpTeGNiaUFnSUNBZ0lDQWdKeVZ6SUdoaGN5QmhJRzFsZEdodlpDQmpZV3hzWldRZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RqYjIxd2IyNWxiblJUYUc5MWJHUlZjR1JoZEdVb0tTNGdSR2xrSUhsdmRTQnRaV0Z1SUhOb2IzVnNaRU52YlhCdmJtVnVkRlZ3WkdGMFpTZ3BQeUFuSUN0Y2JpQWdJQ0FnSUNBZ0oxUm9aU0J1WVcxbElHbHpJSEJvY21GelpXUWdZWE1nWVNCeGRXVnpkR2x2YmlCaVpXTmhkWE5sSUhSb1pTQm1kVzVqZEdsdmJpQnBjeUFuSUN0Y2JpQWdJQ0FnSUNBZ0oyVjRjR1ZqZEdWa0lIUnZJSEpsZEhWeWJpQmhJSFpoYkhWbExpY3NYRzRnSUNBZ0lDQWdJSE53WldNdVpHbHpjR3hoZVU1aGJXVWdmSHdnSjBFZ1kyOXRjRzl1Wlc1MEoxeHVJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklGSmxaSFZqWlNCMGFXMWxJSE53Wlc1MElHUnZhVzVuSUd4dmIydDFjSE1nWW5rZ2MyVjBkR2x1WnlCMGFHVnpaU0J2YmlCMGFHVWdjSEp2ZEc5MGVYQmxMbHh1SUNBZ0lHWnZjaUFvZG1GeUlHMWxkR2h2WkU1aGJXVWdhVzRnVW1WaFkzUkRiR0Z6YzBsdWRHVnlabUZqWlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZEYjI1emRISjFZM1J2Y2k1d2NtOTBiM1I1Y0dWYmJXVjBhRzlrVG1GdFpWMHBJSHRjYmlBZ0lDQWdJQ0FnUTI5dWMzUnlkV04wYjNJdWNISnZkRzkwZVhCbFcyMWxkR2h2WkU1aGJXVmRJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5Qk1aV2RoWTNrZ2FHOXZhMXh1SUNBZ0lFTnZibk4wY25WamRHOXlMblI1Y0dVZ1BTQkRiMjV6ZEhKMVkzUnZjanRjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29RMjl1YzNSeWRXTjBiM0lzSUNkMGVYQmxKeXdnZEhsd1pVUmxjSEpsWTJGMGFXOXVSR1Z6WTNKcGNIUnZjaWs3WEc0Z0lDQWdJQ0I5SUdOaGRHTm9JQ2g0S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRWxGSUhkcGJHd2dabUZwYkNCdmJpQmtaV1pwYm1WUWNtOXdaWEowZVNBb1pYTTFMWE5vYVcwdmMyaGhiU0IwYjI4cFhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJRU52Ym5OMGNuVmpkRzl5TzF4dUlDQjlMRnh1WEc0Z0lHbHVhbVZqZEdsdmJqb2dlMXh1SUNBZ0lHbHVhbVZqZEUxcGVHbHVPaUJtZFc1amRHbHZiaWh0YVhocGJpa2dlMXh1SUNBZ0lDQWdhVzVxWldOMFpXUk5hWGhwYm5NdWNIVnphQ2h0YVhocGJpazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkRiR0Z6Y3p0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbXBvbmVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0VXBkYXRlUXVldWUgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZVF1ZXVlXCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBSZWFjdENvbXBvbmVudChwcm9wcywgY29udGV4dCkge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbi8qKlxuICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGVcbiAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LFxuICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsXG4gKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseVxuICogY29tcGxldGVkLlxuICpcbiAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpblxuICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlXG4gKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudFxuICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmVcbiAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlXG4gKiBhc3NpZ25lZCB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvXG4gKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5SZWFjdENvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbihwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgdHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgfHxcbiAgICB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8XG4gICAgcGFydGlhbFN0YXRlID09IG51bGwsXG4gICAgJ3NldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgJyArXG4gICAgJ2Z1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4nXG4gICkgOiBpbnZhcmlhbnQodHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgfHxcbiAgdHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICBwYXJ0aWFsU3RhdGUgPT0gbnVsbCkpO1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBwYXJ0aWFsU3RhdGUgIT0gbnVsbCxcbiAgICAgICdzZXRTdGF0ZSguLi4pOiBZb3UgcGFzc2VkIGFuIHVuZGVmaW5lZCBvciBudWxsIHN0YXRlIG9iamVjdDsgJyArXG4gICAgICAnaW5zdGVhZCwgdXNlIGZvcmNlVXBkYXRlKCkuJ1xuICAgICkgOiBudWxsKTtcbiAgfVxuICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUpO1xuICBpZiAoY2FsbGJhY2spIHtcbiAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjayk7XG4gIH1cbn07XG5cbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5SZWFjdENvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzKTtcbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2spO1xuICB9XG59O1xuXG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgZ2V0RE9NTm9kZTogW1xuICAgICAgJ2dldERPTU5vZGUnLFxuICAgICAgJ1VzZSBSZWFjdC5maW5kRE9NTm9kZShjb21wb25lbnQpIGluc3RlYWQuJ1xuICAgIF0sXG4gICAgaXNNb3VudGVkOiBbXG4gICAgICAnaXNNb3VudGVkJyxcbiAgICAgICdJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiAnICtcbiAgICAgICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXG4gICAgXSxcbiAgICByZXBsYWNlUHJvcHM6IFtcbiAgICAgICdyZXBsYWNlUHJvcHMnLFxuICAgICAgJ0luc3RlYWQsIGNhbGwgUmVhY3QucmVuZGVyIGFnYWluIGF0IHRoZSB0b3AgbGV2ZWwuJ1xuICAgIF0sXG4gICAgcmVwbGFjZVN0YXRlOiBbXG4gICAgICAncmVwbGFjZVN0YXRlJyxcbiAgICAgICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRlIGluc3RlYWQgKHNlZSAnICtcbiAgICAgICdodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzYpLidcbiAgICBdLFxuICAgIHNldFByb3BzOiBbXG4gICAgICAnc2V0UHJvcHMnLFxuICAgICAgJ0luc3RlYWQsIGNhbGwgUmVhY3QucmVuZGVyIGFnYWluIGF0IHRoZSB0b3AgbGV2ZWwuJ1xuICAgIF1cbiAgfTtcbiAgdmFyIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyA9IGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAnJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLFxuICAgICAgICAgICAgaW5mb1swXSxcbiAgICAgICAgICAgIGluZm9bMV1cbiAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoeCkge1xuICAgICAgLy8gSUUgd2lsbCBmYWlsIG9uIGRlZmluZVByb3BlcnR5IChlczUtc2hpbS9zaGFtIHRvbylcbiAgICB9XG4gIH07XG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JEYjIxd2IyNWxiblF1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUkRiMjF3YjI1bGJuUmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJTWldGamRGVndaR0YwWlZGMVpYVmxJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JWY0dSaGRHVlJkV1YxWlZ3aUtUdGNibHh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNiblpoY2lCM1lYSnVhVzVuSUQwZ2NtVnhkV2x5WlNoY0lpNHZkMkZ5Ym1sdVoxd2lLVHRjYmx4dUx5b3FYRzRnS2lCQ1lYTmxJR05zWVhOeklHaGxiSEJsY25NZ1ptOXlJSFJvWlNCMWNHUmhkR2x1WnlCemRHRjBaU0J2WmlCaElHTnZiWEJ2Ym1WdWRDNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1VtVmhZM1JEYjIxd2IyNWxiblFvY0hKdmNITXNJR052Ym5SbGVIUXBJSHRjYmlBZ2RHaHBjeTV3Y205d2N5QTlJSEJ5YjNCek8xeHVJQ0IwYUdsekxtTnZiblJsZUhRZ1BTQmpiMjUwWlhoME8xeHVmVnh1WEc0dktpcGNiaUFxSUZObGRITWdZU0J6ZFdKelpYUWdiMllnZEdobElITjBZWFJsTGlCQmJIZGhlWE1nZFhObElIUm9hWE1nZEc4Z2JYVjBZWFJsWEc0Z0tpQnpkR0YwWlM0Z1dXOTFJSE5vYjNWc1pDQjBjbVZoZENCZ2RHaHBjeTV6ZEdGMFpXQWdZWE1nYVcxdGRYUmhZbXhsTGx4dUlDcGNiaUFxSUZSb1pYSmxJR2x6SUc1dklHZDFZWEpoYm5SbFpTQjBhR0YwSUdCMGFHbHpMbk4wWVhSbFlDQjNhV3hzSUdKbElHbHRiV1ZrYVdGMFpXeDVJSFZ3WkdGMFpXUXNJSE52WEc0Z0tpQmhZMk5sYzNOcGJtY2dZSFJvYVhNdWMzUmhkR1ZnSUdGbWRHVnlJR05oYkd4cGJtY2dkR2hwY3lCdFpYUm9iMlFnYldGNUlISmxkSFZ5YmlCMGFHVWdiMnhrSUhaaGJIVmxMbHh1SUNwY2JpQXFJRlJvWlhKbElHbHpJRzV2SUdkMVlYSmhiblJsWlNCMGFHRjBJR05oYkd4eklIUnZJR0J6WlhSVGRHRjBaV0FnZDJsc2JDQnlkVzRnYzNsdVkyaHliMjV2ZFhOc2VTeGNiaUFxSUdGeklIUm9aWGtnYldGNUlHVjJaVzUwZFdGc2JIa2dZbVVnWW1GMFkyaGxaQ0IwYjJkbGRHaGxjaTRnSUZsdmRTQmpZVzRnY0hKdmRtbGtaU0JoYmlCdmNIUnBiMjVoYkZ4dUlDb2dZMkZzYkdKaFkyc2dkR2hoZENCM2FXeHNJR0psSUdWNFpXTjFkR1ZrSUhkb1pXNGdkR2hsSUdOaGJHd2dkRzhnYzJWMFUzUmhkR1VnYVhNZ1lXTjBkV0ZzYkhsY2JpQXFJR052YlhCc1pYUmxaQzVjYmlBcVhHNGdLaUJYYUdWdUlHRWdablZ1WTNScGIyNGdhWE1nY0hKdmRtbGtaV1FnZEc4Z2MyVjBVM1JoZEdVc0lHbDBJSGRwYkd3Z1ltVWdZMkZzYkdWa0lHRjBJSE52YldVZ2NHOXBiblFnYVc1Y2JpQXFJSFJvWlNCbWRYUjFjbVVnS0c1dmRDQnplVzVqYUhKdmJtOTFjMng1S1M0Z1NYUWdkMmxzYkNCaVpTQmpZV3hzWldRZ2QybDBhQ0IwYUdVZ2RYQWdkRzhnWkdGMFpWeHVJQ29nWTI5dGNHOXVaVzUwSUdGeVozVnRaVzUwY3lBb2MzUmhkR1VzSUhCeWIzQnpMQ0JqYjI1MFpYaDBLUzRnVkdobGMyVWdkbUZzZFdWeklHTmhiaUJpWlNCa2FXWm1aWEpsYm5SY2JpQXFJR1p5YjIwZ2RHaHBjeTRxSUdKbFkyRjFjMlVnZVc5MWNpQm1kVzVqZEdsdmJpQnRZWGtnWW1VZ1kyRnNiR1ZrSUdGbWRHVnlJSEpsWTJWcGRtVlFjbTl3Y3lCaWRYUWdZbVZtYjNKbFhHNGdLaUJ6YUc5MWJHUkRiMjF3YjI1bGJuUlZjR1JoZEdVc0lHRnVaQ0IwYUdseklHNWxkeUJ6ZEdGMFpTd2djSEp2Y0hNc0lHRnVaQ0JqYjI1MFpYaDBJSGRwYkd3Z2JtOTBJSGxsZENCaVpWeHVJQ29nWVhOemFXZHVaV1FnZEc4Z2RHaHBjeTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMjlpYW1WamRIeG1kVzVqZEdsdmJuMGdjR0Z5ZEdsaGJGTjBZWFJsSUU1bGVIUWdjR0Z5ZEdsaGJDQnpkR0YwWlNCdmNpQm1kVzVqZEdsdmJpQjBiMXh1SUNvZ0lDQWdJQ0FnSUhCeWIyUjFZMlVnYm1WNGRDQndZWEowYVdGc0lITjBZWFJsSUhSdklHSmxJRzFsY21kbFpDQjNhWFJvSUdOMWNuSmxiblFnYzNSaGRHVXVYRzRnS2lCQWNHRnlZVzBnZXo5bWRXNWpkR2x2Ym4wZ1kyRnNiR0poWTJzZ1EyRnNiR1ZrSUdGbWRHVnlJSE4wWVhSbElHbHpJSFZ3WkdGMFpXUXVYRzRnS2lCQVptbHVZV3hjYmlBcUlFQndjbTkwWldOMFpXUmNiaUFxTDF4dVVtVmhZM1JEYjIxd2IyNWxiblF1Y0hKdmRHOTBlWEJsTG5ObGRGTjBZWFJsSUQwZ1puVnVZM1JwYjI0b2NHRnlkR2xoYkZOMFlYUmxMQ0JqWVd4c1ltRmpheWtnZTF4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUhSNWNHVnZaaUJ3WVhKMGFXRnNVM1JoZEdVZ1BUMDlJQ2R2WW1wbFkzUW5JSHg4WEc0Z0lDQWdkSGx3Wlc5bUlIQmhjblJwWVd4VGRHRjBaU0E5UFQwZ0oyWjFibU4wYVc5dUp5QjhmRnh1SUNBZ0lIQmhjblJwWVd4VGRHRjBaU0E5UFNCdWRXeHNMRnh1SUNBZ0lDZHpaWFJUZEdGMFpTZ3VMaTRwT2lCMFlXdGxjeUJoYmlCdlltcGxZM1FnYjJZZ2MzUmhkR1VnZG1GeWFXRmliR1Z6SUhSdklIVndaR0YwWlNCdmNpQmhJQ2NnSzF4dUlDQWdJQ2RtZFc1amRHbHZiaUIzYUdsamFDQnlaWFIxY201eklHRnVJRzlpYW1WamRDQnZaaUJ6ZEdGMFpTQjJZWEpwWVdKc1pYTXVKMXh1SUNBcElEb2dhVzUyWVhKcFlXNTBLSFI1Y0dWdlppQndZWEowYVdGc1UzUmhkR1VnUFQwOUlDZHZZbXBsWTNRbklIeDhYRzRnSUhSNWNHVnZaaUJ3WVhKMGFXRnNVM1JoZEdVZ1BUMDlJQ2RtZFc1amRHbHZiaWNnZkh4Y2JpQWdjR0Z5ZEdsaGJGTjBZWFJsSUQwOUlHNTFiR3dwS1R0Y2JpQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnY0dGeWRHbGhiRk4wWVhSbElDRTlJRzUxYkd3c1hHNGdJQ0FnSUNBbmMyVjBVM1JoZEdVb0xpNHVLVG9nV1c5MUlIQmhjM05sWkNCaGJpQjFibVJsWm1sdVpXUWdiM0lnYm5Wc2JDQnpkR0YwWlNCdlltcGxZM1E3SUNjZ0sxeHVJQ0FnSUNBZ0oybHVjM1JsWVdRc0lIVnpaU0JtYjNKalpWVndaR0YwWlNncExpZGNiaUFnSUNBcElEb2diblZzYkNrN1hHNGdJSDFjYmlBZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlM1bGJuRjFaWFZsVTJWMFUzUmhkR1VvZEdocGN5d2djR0Z5ZEdsaGJGTjBZWFJsS1R0Y2JpQWdhV1lnS0dOaGJHeGlZV05yS1NCN1hHNGdJQ0FnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVsYm5GMVpYVmxRMkZzYkdKaFkyc29kR2hwY3l3Z1kyRnNiR0poWTJzcE8xeHVJQ0I5WEc1OU8xeHVYRzR2S2lwY2JpQXFJRVp2Y21ObGN5QmhiaUIxY0dSaGRHVXVJRlJvYVhNZ2MyaHZkV3hrSUc5dWJIa2dZbVVnYVc1MmIydGxaQ0IzYUdWdUlHbDBJR2x6SUd0dWIzZHVJSGRwZEdoY2JpQXFJR05sY25SaGFXNTBlU0IwYUdGMElIZGxJR0Z5WlNBcUttNXZkQ29xSUdsdUlHRWdSRTlOSUhSeVlXNXpZV04wYVc5dUxseHVJQ3BjYmlBcUlGbHZkU0J0WVhrZ2QyRnVkQ0IwYnlCallXeHNJSFJvYVhNZ2QyaGxiaUI1YjNVZ2EyNXZkeUIwYUdGMElITnZiV1VnWkdWbGNHVnlJR0Z6Y0dWamRDQnZaaUIwYUdWY2JpQXFJR052YlhCdmJtVnVkQ2R6SUhOMFlYUmxJR2hoY3lCamFHRnVaMlZrSUdKMWRDQmdjMlYwVTNSaGRHVmdJSGRoY3lCdWIzUWdZMkZzYkdWa0xseHVJQ3BjYmlBcUlGUm9hWE1nZDJsc2JDQnViM1FnYVc1MmIydGxJR0J6YUc5MWJHUkRiMjF3YjI1bGJuUlZjR1JoZEdWZ0xDQmlkWFFnYVhRZ2QybHNiQ0JwYm5admEyVmNiaUFxSUdCamIyMXdiMjVsYm5SWGFXeHNWWEJrWVhSbFlDQmhibVFnWUdOdmJYQnZibVZ1ZEVScFpGVndaR0YwWldBdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUhzL1puVnVZM1JwYjI1OUlHTmhiR3hpWVdOcklFTmhiR3hsWkNCaFpuUmxjaUIxY0dSaGRHVWdhWE1nWTI5dGNHeGxkR1V1WEc0Z0tpQkFabWx1WVd4Y2JpQXFJRUJ3Y205MFpXTjBaV1JjYmlBcUwxeHVVbVZoWTNSRGIyMXdiMjVsYm5RdWNISnZkRzkwZVhCbExtWnZjbU5sVlhCa1lYUmxJRDBnWm5WdVkzUnBiMjRvWTJGc2JHSmhZMnNwSUh0Y2JpQWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNWxibkYxWlhWbFJtOXlZMlZWY0dSaGRHVW9kR2hwY3lrN1hHNGdJR2xtSUNoallXeHNZbUZqYXlrZ2UxeHVJQ0FnSUZKbFlXTjBWWEJrWVhSbFVYVmxkV1V1Wlc1eGRXVjFaVU5oYkd4aVlXTnJLSFJvYVhNc0lHTmhiR3hpWVdOcktUdGNiaUFnZlZ4dWZUdGNibHh1THlvcVhHNGdLaUJFWlhCeVpXTmhkR1ZrSUVGUVNYTXVJRlJvWlhObElFRlFTWE1nZFhObFpDQjBieUJsZUdsemRDQnZiaUJqYkdGemMybGpJRkpsWVdOMElHTnNZWE56WlhNZ1luVjBJSE5wYm1ObFhHNGdLaUIzWlNCM2IzVnNaQ0JzYVd0bElIUnZJR1JsY0hKbFkyRjBaU0IwYUdWdExDQjNaU2R5WlNCdWIzUWdaMjlwYm1jZ2RHOGdiVzkyWlNCMGFHVnRJRzkyWlhJZ2RHOGdkR2hwYzF4dUlDb2diVzlrWlhKdUlHSmhjMlVnWTJ4aGMzTXVJRWx1YzNSbFlXUXNJSGRsSUdSbFptbHVaU0JoSUdkbGRIUmxjaUIwYUdGMElIZGhjbTV6SUdsbUlHbDBKM01nWVdOalpYTnpaV1F1WEc0Z0tpOWNibWxtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ2RtRnlJR1JsY0hKbFkyRjBaV1JCVUVseklEMGdlMXh1SUNBZ0lHZGxkRVJQVFU1dlpHVTZJRnRjYmlBZ0lDQWdJQ2RuWlhSRVQwMU9iMlJsSnl4Y2JpQWdJQ0FnSUNkVmMyVWdVbVZoWTNRdVptbHVaRVJQVFU1dlpHVW9ZMjl0Y0c5dVpXNTBLU0JwYm5OMFpXRmtMaWRjYmlBZ0lDQmRMRnh1SUNBZ0lHbHpUVzkxYm5SbFpEb2dXMXh1SUNBZ0lDQWdKMmx6VFc5MWJuUmxaQ2NzWEc0Z0lDQWdJQ0FuU1c1emRHVmhaQ3dnYldGclpTQnpkWEpsSUhSdklHTnNaV0Z1SUhWd0lITjFZbk5qY21sd2RHbHZibk1nWVc1a0lIQmxibVJwYm1jZ2NtVnhkV1Z6ZEhNZ2FXNGdKeUFyWEc0Z0lDQWdJQ0FuWTI5dGNHOXVaVzUwVjJsc2JGVnViVzkxYm5RZ2RHOGdjSEpsZG1WdWRDQnRaVzF2Y25rZ2JHVmhhM011SjF4dUlDQWdJRjBzWEc0Z0lDQWdjbVZ3YkdGalpWQnliM0J6T2lCYlhHNGdJQ0FnSUNBbmNtVndiR0ZqWlZCeWIzQnpKeXhjYmlBZ0lDQWdJQ2RKYm5OMFpXRmtMQ0JqWVd4c0lGSmxZV04wTG5KbGJtUmxjaUJoWjJGcGJpQmhkQ0IwYUdVZ2RHOXdJR3hsZG1Wc0xpZGNiaUFnSUNCZExGeHVJQ0FnSUhKbGNHeGhZMlZUZEdGMFpUb2dXMXh1SUNBZ0lDQWdKM0psY0d4aFkyVlRkR0YwWlNjc1hHNGdJQ0FnSUNBblVtVm1ZV04wYjNJZ2VXOTFjaUJqYjJSbElIUnZJSFZ6WlNCelpYUlRkR0YwWlNCcGJuTjBaV0ZrSUNoelpXVWdKeUFyWEc0Z0lDQWdJQ0FuYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDJaaFkyVmliMjlyTDNKbFlXTjBMMmx6YzNWbGN5OHpNak0yS1M0blhHNGdJQ0FnWFN4Y2JpQWdJQ0J6WlhSUWNtOXdjem9nVzF4dUlDQWdJQ0FnSjNObGRGQnliM0J6Snl4Y2JpQWdJQ0FnSUNkSmJuTjBaV0ZrTENCallXeHNJRkpsWVdOMExuSmxibVJsY2lCaFoyRnBiaUJoZENCMGFHVWdkRzl3SUd4bGRtVnNMaWRjYmlBZ0lDQmRYRzRnSUgwN1hHNGdJSFpoY2lCa1pXWnBibVZFWlhCeVpXTmhkR2x2YmxkaGNtNXBibWNnUFNCbWRXNWpkR2x2YmlodFpYUm9iMlJPWVcxbExDQnBibVp2S1NCN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lFOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2hTWldGamRFTnZiWEJ2Ym1WdWRDNXdjbTkwYjNSNWNHVXNJRzFsZEdodlpFNWhiV1VzSUh0Y2JpQWdJQ0FnSUNBZ1oyVjBPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lDQWdJR1poYkhObExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSnlWektDNHVMaWtnYVhNZ1pHVndjbVZqWVhSbFpDQnBiaUJ3YkdGcGJpQktZWFpoVTJOeWFYQjBJRkpsWVdOMElHTnNZWE56WlhNdUlDVnpKeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lHbHVabTliTUYwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwYm1adld6RmRYRzRnSUNBZ0lDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMWJtUmxabWx1WldRN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMGdZMkYwWTJnZ0tIZ3BJSHRjYmlBZ0lDQWdJQzh2SUVsRklIZHBiR3dnWm1GcGJDQnZiaUJrWldacGJtVlFjbTl3WlhKMGVTQW9aWE0xTFhOb2FXMHZjMmhoYlNCMGIyOHBYRzRnSUNBZ2ZWeHVJQ0I5TzF4dUlDQm1iM0lnS0haaGNpQm1iazVoYldVZ2FXNGdaR1Z3Y21WallYUmxaRUZRU1hNcElIdGNiaUFnSUNCcFppQW9aR1Z3Y21WallYUmxaRUZRU1hNdWFHRnpUM2R1VUhKdmNHVnlkSGtvWm01T1lXMWxLU2tnZTF4dUlDQWdJQ0FnWkdWbWFXNWxSR1Z3Y21WallYUnBiMjVYWVhKdWFXNW5LR1p1VG1GdFpTd2daR1Z3Y21WallYUmxaRUZRU1hOYlptNU9ZVzFsWFNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JEYjIxd2IyNWxiblE3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnRcbiAqL1xuXG4vKmpzbGludCBldmlsOiB0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0gcmVxdWlyZShcIi4vUmVhY3RET01JRE9wZXJhdGlvbnNcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG5cbi8qKlxuICogQWJzdHJhY3RzIGF3YXkgYWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHJlY29uY2lsZXIgdGhhdCByZXF1aXJlcyBrbm93bGVkZ2Ugb2ZcbiAqIHRoZSBicm93c2VyIGNvbnRleHQuIFRPRE86IFRoZXNlIGNhbGxlcnMgc2hvdWxkIGJlIHJlZmFjdG9yZWQgdG8gYXZvaWQgdGhlXG4gKiBuZWVkIGZvciB0aGlzIGluamVjdGlvbi5cbiAqL1xudmFyIFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50ID0ge1xuXG4gIHByb2Nlc3NDaGlsZHJlblVwZGF0ZXM6XG4gICAgUmVhY3RET01JRE9wZXJhdGlvbnMuZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzLFxuXG4gIHJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQ6XG4gICAgUmVhY3RET01JRE9wZXJhdGlvbnMuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlELFxuXG4gIC8qKlxuICAgKiBJZiBhIHBhcnRpY3VsYXIgZW52aXJvbm1lbnQgcmVxdWlyZXMgdGhhdCBzb21lIHJlc291cmNlcyBiZSBjbGVhbmVkIHVwLFxuICAgKiBzcGVjaWZ5IHRoaXMgaW4gdGhlIGluamVjdGVkIE1peGluLiBJbiB0aGUgRE9NLCB3ZSB3b3VsZCBsaWtlbHkgd2FudCB0b1xuICAgKiBwdXJnZSBhbnkgY2FjaGVkIG5vZGUgSUQgbG9va3Vwcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVubW91bnRJREZyb21FbnZpcm9ubWVudDogZnVuY3Rpb24ocm9vdE5vZGVJRCkge1xuICAgIFJlYWN0TW91bnQucHVyZ2VJRChyb290Tm9kZUlEKTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbXBvbmVudEVudmlyb25tZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG52YXIgaW5qZWN0ZWQgPSBmYWxzZTtcblxudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSB7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgaW5qZWN0YWJsZSBlbnZpcm9ubWVudCBkZXBlbmRlbnQgY2xlYW51cCBob29rLiAoc2VydmVyIHZzLlxuICAgKiBicm93c2VyIGV0YykuIEV4YW1wbGU6IEEgYnJvd3NlciBzeXN0ZW0gY2FjaGVzIERPTSBub2RlcyBiYXNlZCBvbiBjb21wb25lbnRcbiAgICogSUQgYW5kIG11c3QgcmVtb3ZlIHRoYXQgY2FjaGUgZW50cnkgd2hlbiB0aGlzIGluc3RhbmNlIGlzIHVubW91bnRlZC5cbiAgICovXG4gIHVubW91bnRJREZyb21FbnZpcm9ubWVudDogbnVsbCxcblxuICAvKipcbiAgICogT3B0aW9uYWxseSBpbmplY3RhYmxlIGhvb2sgZm9yIHN3YXBwaW5nIG91dCBtb3VudCBpbWFnZXMgaW4gdGhlIG1pZGRsZSBvZlxuICAgKiB0aGUgdHJlZS5cbiAgICovXG4gIHJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQ6IG51bGwsXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgaW5qZWN0YWJsZSBob29rIGZvciBwcm9jZXNzaW5nIGEgcXVldWUgb2YgY2hpbGQgdXBkYXRlcy4gV2lsbFxuICAgKiBsYXRlciBtb3ZlIGludG8gTXVsdGlDaGlsZENvbXBvbmVudHMuXG4gICAqL1xuICBwcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOiBudWxsLFxuXG4gIGluamVjdGlvbjoge1xuICAgIGluamVjdEVudmlyb25tZW50OiBmdW5jdGlvbihlbnZpcm9ubWVudCkge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgIWluamVjdGVkLFxuICAgICAgICAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQ6IGluamVjdEVudmlyb25tZW50KCkgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuJ1xuICAgICAgKSA6IGludmFyaWFudCghaW5qZWN0ZWQpKTtcbiAgICAgIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQudW5tb3VudElERnJvbUVudmlyb25tZW50ID1cbiAgICAgICAgZW52aXJvbm1lbnQudW5tb3VudElERnJvbUVudmlyb25tZW50O1xuICAgICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5yZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEID1cbiAgICAgICAgZW52aXJvbm1lbnQucmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDtcbiAgICAgIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyA9XG4gICAgICAgIGVudmlyb25tZW50LnByb2Nlc3NDaGlsZHJlblVwZGF0ZXM7XG4gICAgICBpbmplY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JEYjIxd2IyNWxiblJGYm5acGNtOXViV1Z1ZEM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UUXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlNaV0ZqZEVOdmJYQnZibVZ1ZEVWdWRtbHliMjV0Wlc1MFhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc1MllYSWdhVzVxWldOMFpXUWdQU0JtWVd4elpUdGNibHh1ZG1GeUlGSmxZV04wUTI5dGNHOXVaVzUwUlc1MmFYSnZibTFsYm5RZ1BTQjdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFOXdkR2x2Ym1Gc2JIa2dhVzVxWldOMFlXSnNaU0JsYm5acGNtOXViV1Z1ZENCa1pYQmxibVJsYm5RZ1kyeGxZVzUxY0NCb2IyOXJMaUFvYzJWeWRtVnlJSFp6TGx4dUlDQWdLaUJpY205M2MyVnlJR1YwWXlrdUlFVjRZVzF3YkdVNklFRWdZbkp2ZDNObGNpQnplWE4wWlcwZ1kyRmphR1Z6SUVSUFRTQnViMlJsY3lCaVlYTmxaQ0J2YmlCamIyMXdiMjVsYm5SY2JpQWdJQ29nU1VRZ1lXNWtJRzExYzNRZ2NtVnRiM1psSUhSb1lYUWdZMkZqYUdVZ1pXNTBjbmtnZDJobGJpQjBhR2x6SUdsdWMzUmhibU5sSUdseklIVnViVzkxYm5SbFpDNWNiaUFnSUNvdlhHNGdJSFZ1Ylc5MWJuUkpSRVp5YjIxRmJuWnBjbTl1YldWdWREb2diblZzYkN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVDNCMGFXOXVZV3hzZVNCcGJtcGxZM1JoWW14bElHaHZiMnNnWm05eUlITjNZWEJ3YVc1bklHOTFkQ0J0YjNWdWRDQnBiV0ZuWlhNZ2FXNGdkR2hsSUcxcFpHUnNaU0J2Wmx4dUlDQWdLaUIwYUdVZ2RISmxaUzVjYmlBZ0lDb3ZYRzRnSUhKbGNHeGhZMlZPYjJSbFYybDBhRTFoY210MWNFSjVTVVE2SUc1MWJHd3NYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFOXdkR2x2Ym1Gc2JIa2dhVzVxWldOMFlXSnNaU0JvYjI5cklHWnZjaUJ3Y205alpYTnphVzVuSUdFZ2NYVmxkV1VnYjJZZ1kyaHBiR1FnZFhCa1lYUmxjeTRnVjJsc2JGeHVJQ0FnS2lCc1lYUmxjaUJ0YjNabElHbHVkRzhnVFhWc2RHbERhR2xzWkVOdmJYQnZibVZ1ZEhNdVhHNGdJQ0FxTDF4dUlDQndjbTlqWlhOelEyaHBiR1J5Wlc1VmNHUmhkR1Z6T2lCdWRXeHNMRnh1WEc0Z0lHbHVhbVZqZEdsdmJqb2dlMXh1SUNBZ0lHbHVhbVZqZEVWdWRtbHliMjV0Wlc1ME9pQm1kVzVqZEdsdmJpaGxiblpwY205dWJXVnVkQ2tnZTF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSVdsdWFtVmpkR1ZrTEZ4dUlDQWdJQ0FnSUNBblVtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblE2SUdsdWFtVmpkRVZ1ZG1seWIyNXRaVzUwS0NrZ1kyRnVJRzl1YkhrZ1ltVWdZMkZzYkdWa0lHOXVZMlV1SjF4dUlDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDZ2hhVzVxWldOMFpXUXBLVHRjYmlBZ0lDQWdJRkpsWVdOMFEyOXRjRzl1Wlc1MFJXNTJhWEp2Ym0xbGJuUXVkVzV0YjNWdWRFbEVSbkp2YlVWdWRtbHliMjV0Wlc1MElEMWNiaUFnSUNBZ0lDQWdaVzUyYVhKdmJtMWxiblF1ZFc1dGIzVnVkRWxFUm5KdmJVVnVkbWx5YjI1dFpXNTBPMXh1SUNBZ0lDQWdVbVZoWTNSRGIyMXdiMjVsYm5SRmJuWnBjbTl1YldWdWRDNXlaWEJzWVdObFRtOWtaVmRwZEdoTllYSnJkWEJDZVVsRUlEMWNiaUFnSUNBZ0lDQWdaVzUyYVhKdmJtMWxiblF1Y21Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd1FubEpSRHRjYmlBZ0lDQWdJRkpsWVdOMFEyOXRjRzl1Wlc1MFJXNTJhWEp2Ym0xbGJuUXVjSEp2WTJWemMwTm9hV3hrY21WdVZYQmtZWFJsY3lBOVhHNGdJQ0FnSUNBZ0lHVnVkbWx5YjI1dFpXNTBMbkJ5YjJObGMzTkRhR2xzWkhKbGJsVndaR0YwWlhNN1hHNGdJQ0FnSUNCcGJtcGxZM1JsWkNBOUlIUnlkV1U3WEc0Z0lDQWdmVnh1SUNCOVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JEYjIxd2IyNWxiblJGYm5acGNtOXViV1Z1ZER0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0Q29udGV4dCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29udGV4dFwiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3JcIik7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VNYXBcIik7XG52YXIgUmVhY3RMaWZlQ3ljbGUgPSByZXF1aXJlKFwiLi9SZWFjdExpZmVDeWNsZVwiKTtcbnZhciBSZWFjdE5hdGl2ZUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0TmF0aXZlQ29tcG9uZW50XCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25zID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uc1wiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzXCIpO1xudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoXCIuL1JlYWN0UmVjb25jaWxlclwiKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZShcIi4vZW1wdHlPYmplY3RcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bShjb21wb25lbnQpIHtcbiAgdmFyIG93bmVyID0gY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXIgfHwgbnVsbDtcbiAgaWYgKG93bmVyKSB7XG4gICAgdmFyIG5hbWUgPSBvd25lci5nZXROYW1lKCk7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0gVGhlIExpZmUtQ3ljbGUgb2YgYSBDb21wb3NpdGUgQ29tcG9uZW50IC0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqIC0gY29uc3RydWN0b3I6IEluaXRpYWxpemF0aW9uIG9mIHN0YXRlLiBUaGUgaW5zdGFuY2UgaXMgbm93IHJldGFpbmVkLlxuICogICAtIGNvbXBvbmVudFdpbGxNb3VudFxuICogICAtIHJlbmRlclxuICogICAtIFtjaGlsZHJlbidzIGNvbnN0cnVjdG9yc11cbiAqICAgICAtIFtjaGlsZHJlbidzIGNvbXBvbmVudFdpbGxNb3VudCBhbmQgcmVuZGVyXVxuICogICAgIC0gW2NoaWxkcmVuJ3MgY29tcG9uZW50RGlkTW91bnRdXG4gKiAgICAgLSBjb21wb25lbnREaWRNb3VudFxuICpcbiAqICAgICAgIFVwZGF0ZSBQaGFzZXM6XG4gKiAgICAgICAtIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG9ubHkgY2FsbGVkIGlmIHBhcmVudCB1cGRhdGVkKVxuICogICAgICAgLSBzaG91bGRDb21wb25lbnRVcGRhdGVcbiAqICAgICAgICAgLSBjb21wb25lbnRXaWxsVXBkYXRlXG4gKiAgICAgICAgICAgLSByZW5kZXJcbiAqICAgICAgICAgICAtIFtjaGlsZHJlbidzIGNvbnN0cnVjdG9ycyBvciByZWNlaXZlIHByb3BzIHBoYXNlc11cbiAqICAgICAgICAgLSBjb21wb25lbnREaWRVcGRhdGVcbiAqXG4gKiAgICAgLSBjb21wb25lbnRXaWxsVW5tb3VudFxuICogICAgIC0gW2NoaWxkcmVuJ3MgY29tcG9uZW50V2lsbFVubW91bnRdXG4gKiAgIC0gW2NoaWxkcmVuIGRlc3Ryb3llZF1cbiAqIC0gKGRlc3Ryb3llZCk6IFRoZSBpbnN0YW5jZSBpcyBub3cgYmxhbmssIHJlbGVhc2VkIGJ5IFJlYWN0IGFuZCByZWFkeSBmb3IgR0MuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIEFuIGluY3JlbWVudGluZyBJRCBhc3NpZ25lZCB0byBlYWNoIGNvbXBvbmVudCB3aGVuIGl0IGlzIG1vdW50ZWQuIFRoaXMgaXNcbiAqIHVzZWQgdG8gZW5mb3JjZSB0aGUgb3JkZXIgaW4gd2hpY2ggYFJlYWN0VXBkYXRlc2AgdXBkYXRlcyBkaXJ0eSBjb21wb25lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBuZXh0TW91bnRJRCA9IDE7XG5cbi8qKlxuICogQGxlbmRzIHtSZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5wcm90b3R5cGV9XG4gKi9cbnZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudE1peGluID0ge1xuXG4gIC8qKlxuICAgKiBCYXNlIGNvbnN0cnVjdG9yIGZvciBhbGwgY29tcG9zaXRlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSBudWxsO1xuICAgIHRoaXMuX2luc3RhbmNlID0gbnVsbDtcblxuICAgIC8vIFNlZSBSZWFjdFVwZGF0ZVF1ZXVlXG4gICAgdGhpcy5fcGVuZGluZ0VsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9tb3VudE9yZGVyID0gMDtcbiAgICB0aGlzLl9pc1RvcExldmVsID0gZmFsc2U7XG5cbiAgICAvLyBTZWUgUmVhY3RVcGRhdGVzIGFuZCBSZWFjdFVwZGF0ZVF1ZXVlLlxuICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFja3MgPSBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LCByZW5kZXJzIG1hcmt1cCwgYW5kIHJlZ2lzdGVycyBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290SUQgRE9NIElEIG9mIHRoZSByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBSZW5kZXJlZCBtYXJrdXAgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24ocm9vdElELCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuX21vdW50T3JkZXIgPSBuZXh0TW91bnRJRCsrO1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSByb290SUQ7XG5cbiAgICB2YXIgcHVibGljUHJvcHMgPSB0aGlzLl9wcm9jZXNzUHJvcHModGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMpO1xuICAgIHZhciBwdWJsaWNDb250ZXh0ID0gdGhpcy5fcHJvY2Vzc0NvbnRleHQodGhpcy5fY3VycmVudEVsZW1lbnQuX2NvbnRleHQpO1xuXG4gICAgdmFyIENvbXBvbmVudCA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudChcbiAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50XG4gICAgKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHB1YmxpYyBjbGFzc1xuICAgIHZhciBpbnN0ID0gbmV3IENvbXBvbmVudChwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCk7XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgbGF0ZXIgaW4gX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCwgYnV0IGFkZCBhbiBlYXJseVxuICAgICAgLy8gd2FybmluZyBub3cgdG8gaGVscCBkZWJ1Z2dpbmdcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICBpbnN0LnJlbmRlciAhPSBudWxsLFxuICAgICAgICAnJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArXG4gICAgICAgICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAgaW4geW91ciAnICtcbiAgICAgICAgJ2NvbXBvbmVudCBvciB5b3UgbWF5IGhhdmUgYWNjaWRlbnRhbGx5IHRyaWVkIHRvIHJlbmRlciBhbiBlbGVtZW50ICcgK1xuICAgICAgICAnd2hvc2UgdHlwZSBpcyBhIGZ1bmN0aW9uIHRoYXQgaXNuXFwndCBhIFJlYWN0IGNvbXBvbmVudC4nLFxuICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG5cbiAgICAvLyBUaGVzZSBzaG91bGQgYmUgc2V0IHVwIGluIHRoZSBjb25zdHJ1Y3RvciwgYnV0IGFzIGEgY29udmVuaWVuY2UgZm9yXG4gICAgLy8gc2ltcGxlciBjbGFzcyBhYnN0cmFjdGlvbnMsIHdlIHNldCB0aGVtIHVwIGFmdGVyIHRoZSBmYWN0LlxuICAgIGluc3QucHJvcHMgPSBwdWJsaWNQcm9wcztcbiAgICBpbnN0LmNvbnRleHQgPSBwdWJsaWNDb250ZXh0O1xuICAgIGluc3QucmVmcyA9IGVtcHR5T2JqZWN0O1xuXG4gICAgdGhpcy5faW5zdGFuY2UgPSBpbnN0O1xuXG4gICAgLy8gU3RvcmUgYSByZWZlcmVuY2UgZnJvbSB0aGUgaW5zdGFuY2UgYmFjayB0byB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb25cbiAgICBSZWFjdEluc3RhbmNlTWFwLnNldChpbnN0LCB0aGlzKTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHRoaXMuX3dhcm5JZkNvbnRleHRzRGlmZmVyKHRoaXMuX2N1cnJlbnRFbGVtZW50Ll9jb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBTaW5jZSBwbGFpbiBKUyBjbGFzc2VzIGFyZSBkZWZpbmVkIHdpdGhvdXQgYW55IHNwZWNpYWwgaW5pdGlhbGl6YXRpb25cbiAgICAgIC8vIGxvZ2ljLCB3ZSBjYW4gbm90IGNhdGNoIGNvbW1vbiBlcnJvcnMgZWFybHkuIFRoZXJlZm9yZSwgd2UgaGF2ZSB0b1xuICAgICAgLy8gY2F0Y2ggdGhlbSBoZXJlLCBhdCBpbml0aWFsaXphdGlvbiB0aW1lLCBpbnN0ZWFkLlxuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICFpbnN0LmdldEluaXRpYWxTdGF0ZSB8fFxuICAgICAgICBpbnN0LmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCxcbiAgICAgICAgJ2dldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICtcbiAgICAgICAgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArXG4gICAgICAgICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD8nLFxuICAgICAgICB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgIWluc3QuZ2V0RGVmYXVsdFByb3BzIHx8XG4gICAgICAgIGluc3QuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkLFxuICAgICAgICAnZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgK1xuICAgICAgICAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICtcbiAgICAgICAgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ2EgY29tcG9uZW50J1xuICAgICAgKSA6IG51bGwpO1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICFpbnN0LnByb3BUeXBlcyxcbiAgICAgICAgJ3Byb3BUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgK1xuICAgICAgICAncHJvcGVydHkgdG8gZGVmaW5lIHByb3BUeXBlcyBpbnN0ZWFkLicsXG4gICAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAhaW5zdC5jb250ZXh0VHlwZXMsXG4gICAgICAgICdjb250ZXh0VHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhICcgK1xuICAgICAgICAnc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZXMgaW5zdGVhZC4nLFxuICAgICAgICB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgdHlwZW9mIGluc3QuY29tcG9uZW50U2hvdWxkVXBkYXRlICE9PSAnZnVuY3Rpb24nLFxuICAgICAgICAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICtcbiAgICAgICAgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgK1xuICAgICAgICAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgK1xuICAgICAgICAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJyxcbiAgICAgICAgKHRoaXMuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcpXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IGluc3Quc3RhdGU7XG4gICAgaWYgKGluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbnN0LnN0YXRlID0gaW5pdGlhbFN0YXRlID0gbnVsbDtcbiAgICB9XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGluaXRpYWxTdGF0ZSksXG4gICAgICAnJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsJyxcbiAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdcbiAgICApIDogaW52YXJpYW50KHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGluaXRpYWxTdGF0ZSkpKTtcblxuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAgICB2YXIgY2hpbGRDb250ZXh0O1xuICAgIHZhciByZW5kZXJlZEVsZW1lbnQ7XG5cbiAgICB2YXIgcHJldmlvdXNseU1vdW50aW5nID0gUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5TW91bnRpbmdJbnN0YW5jZTtcbiAgICBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlNb3VudGluZ0luc3RhbmNlID0gdGhpcztcbiAgICB0cnkge1xuICAgICAgaWYgKGluc3QuY29tcG9uZW50V2lsbE1vdW50KSB7XG4gICAgICAgIGluc3QuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICAgIC8vIFdoZW4gbW91bnRpbmcsIGNhbGxzIHRvIGBzZXRTdGF0ZWAgYnkgYGNvbXBvbmVudFdpbGxNb3VudGAgd2lsbCBzZXRcbiAgICAgICAgLy8gYHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlYCB3aXRob3V0IHRyaWdnZXJpbmcgYSByZS1yZW5kZXIuXG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSkge1xuICAgICAgICAgIGluc3Quc3RhdGUgPSB0aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKGluc3QucHJvcHMsIGluc3QuY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2hpbGRDb250ZXh0ID0gdGhpcy5fZ2V0VmFsaWRhdGVkQ2hpbGRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgcmVuZGVyZWRFbGVtZW50ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KGNoaWxkQ29udGV4dCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2UgPSBwcmV2aW91c2x5TW91bnRpbmc7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSB0aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KFxuICAgICAgcmVuZGVyZWRFbGVtZW50LFxuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSAvLyBUaGUgd3JhcHBpbmcgdHlwZVxuICAgICk7XG5cbiAgICB2YXIgbWFya3VwID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50KFxuICAgICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQsXG4gICAgICByb290SUQsXG4gICAgICB0cmFuc2FjdGlvbixcbiAgICAgIHRoaXMuX21lcmdlQ2hpbGRDb250ZXh0KGNvbnRleHQsIGNoaWxkQ29udGV4dClcbiAgICApO1xuICAgIGlmIChpbnN0LmNvbXBvbmVudERpZE1vdW50KSB7XG4gICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGluc3QuY29tcG9uZW50RGlkTW91bnQsIGluc3QpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrdXA7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IGBtb3VudENvbXBvbmVudGAuXG4gICAqXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG5cbiAgICBpZiAoaW5zdC5jb21wb25lbnRXaWxsVW5tb3VudCkge1xuICAgICAgdmFyIHByZXZpb3VzbHlVbm1vdW50aW5nID0gUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5VW5tb3VudGluZ0luc3RhbmNlO1xuICAgICAgUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5VW5tb3VudGluZ0luc3RhbmNlID0gdGhpcztcbiAgICAgIHRyeSB7XG4gICAgICAgIGluc3QuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseVVubW91bnRpbmdJbnN0YW5jZSA9IHByZXZpb3VzbHlVbm1vdW50aW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50KTtcbiAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IG51bGw7XG5cbiAgICAvLyBSZXNldCBwZW5kaW5nIGZpZWxkc1xuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrcyA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ0VsZW1lbnQgPSBudWxsO1xuXG4gICAgLy8gVGhlc2UgZmllbGRzIGRvIG5vdCByZWFsbHkgbmVlZCB0byBiZSByZXNldCBzaW5jZSB0aGlzIG9iamVjdCBpcyBub1xuICAgIC8vIGxvbmdlciBhY2Nlc3NpYmxlLlxuICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSBudWxsO1xuXG4gICAgLy8gRGVsZXRlIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgaW5zdGFuY2UgdG8gdGhpcyBpbnRlcm5hbCByZXByZXNlbnRhdGlvblxuICAgIC8vIHdoaWNoIGFsbG93IHRoZSBpbnRlcm5hbHMgdG8gYmUgcHJvcGVybHkgY2xlYW5lZCB1cCBldmVuIGlmIHRoZSB1c2VyXG4gICAgLy8gbGVha3MgYSByZWZlcmVuY2UgdG8gdGhlIHB1YmxpYyBpbnN0YW5jZS5cbiAgICBSZWFjdEluc3RhbmNlTWFwLnJlbW92ZShpbnN0KTtcblxuICAgIC8vIFNvbWUgZXhpc3RpbmcgY29tcG9uZW50cyByZWx5IG9uIGluc3QucHJvcHMgZXZlbiBhZnRlciB0aGV5J3ZlIGJlZW5cbiAgICAvLyBkZXN0cm95ZWQgKGluIGV2ZW50IGhhbmRsZXJzKS5cbiAgICAvLyBUT0RPOiBpbnN0LnByb3BzID0gbnVsbDtcbiAgICAvLyBUT0RPOiBpbnN0LnN0YXRlID0gbnVsbDtcbiAgICAvLyBUT0RPOiBpbnN0LmNvbnRleHQgPSBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTY2hlZHVsZSBhIHBhcnRpYWwgdXBkYXRlIHRvIHRoZSBwcm9wcy4gT25seSB1c2VkIGZvciBpbnRlcm5hbCB0ZXN0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFByb3BzIFN1YnNldCBvZiB0aGUgbmV4dCBwcm9wcy5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBwcm9wcyBhcmUgdXBkYXRlZC5cbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3NldFByb3BzSW50ZXJuYWw6IGZ1bmN0aW9uKHBhcnRpYWxQcm9wcywgY2FsbGJhY2spIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVvcHRpbWl6ZWQgcGF0aC4gV2Ugb3B0aW1pemUgZm9yIGFsd2F5cyBoYXZpbmcgYW4gZWxlbWVudC5cbiAgICAvLyBUaGlzIGNyZWF0ZXMgYW4gZXh0cmEgaW50ZXJuYWwgZWxlbWVudC5cbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuX3BlbmRpbmdFbGVtZW50IHx8IHRoaXMuX2N1cnJlbnRFbGVtZW50O1xuICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZVByb3BzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcywgcGFydGlhbFByb3BzKVxuICAgICk7XG4gICAgUmVhY3RVcGRhdGVzLmVucXVldWVVcGRhdGUodGhpcywgY2FsbGJhY2spO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRoZSBjb250ZXh0IG9iamVjdCB0byBvbmx5IGNvbnRhaW4ga2V5cyBzcGVjaWZpZWQgaW5cbiAgICogYGNvbnRleHRUeXBlc2BcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICogQHJldHVybiB7P29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYXNrQ29udGV4dDogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBtYXNrZWRDb250ZXh0ID0gbnVsbDtcbiAgICAvLyBUaGlzIHJlYWxseSBzaG91bGQgYmUgZ2V0dGluZyB0aGUgY29tcG9uZW50IGNsYXNzIGZvciB0aGUgZWxlbWVudCxcbiAgICAvLyBidXQgd2Uga25vdyB0aGF0IHdlJ3JlIG5vdCBnb2luZyB0byBuZWVkIGl0IGZvciBidWlsdC1pbnMuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVtcHR5T2JqZWN0O1xuICAgIH1cbiAgICB2YXIgY29udGV4dFR5cGVzID0gdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZS5jb250ZXh0VHlwZXM7XG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eU9iamVjdDtcbiAgICB9XG4gICAgbWFza2VkQ29udGV4dCA9IHt9O1xuICAgIGZvciAodmFyIGNvbnRleHROYW1lIGluIGNvbnRleHRUeXBlcykge1xuICAgICAgbWFza2VkQ29udGV4dFtjb250ZXh0TmFtZV0gPSBjb250ZXh0W2NvbnRleHROYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIG1hc2tlZENvbnRleHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgdGhlIGNvbnRleHQgb2JqZWN0IHRvIG9ubHkgY29udGFpbiBrZXlzIHNwZWNpZmllZCBpblxuICAgKiBgY29udGV4dFR5cGVzYCwgYW5kIGFzc2VydHMgdGhhdCB0aGV5IGFyZSB2YWxpZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICogQHJldHVybiB7P29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcm9jZXNzQ29udGV4dDogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBtYXNrZWRDb250ZXh0ID0gdGhpcy5fbWFza0NvbnRleHQoY29udGV4dCk7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFyIENvbXBvbmVudCA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudChcbiAgICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnRcbiAgICAgICk7XG4gICAgICBpZiAoQ29tcG9uZW50LmNvbnRleHRUeXBlcykge1xuICAgICAgICB0aGlzLl9jaGVja1Byb3BUeXBlcyhcbiAgICAgICAgICBDb21wb25lbnQuY29udGV4dFR5cGVzLFxuICAgICAgICAgIG1hc2tlZENvbnRleHQsXG4gICAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5jb250ZXh0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXNrZWRDb250ZXh0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY3VycmVudENvbnRleHRcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFZhbGlkYXRlZENoaWxkQ29udGV4dDogZnVuY3Rpb24oY3VycmVudENvbnRleHQpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciBjaGlsZENvbnRleHQgPSBpbnN0LmdldENoaWxkQ29udGV4dCAmJiBpbnN0LmdldENoaWxkQ29udGV4dCgpO1xuICAgIGlmIChjaGlsZENvbnRleHQpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIHR5cGVvZiBpbnN0LmNvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzID09PSAnb2JqZWN0JyxcbiAgICAgICAgJyVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gJyArXG4gICAgICAgICd1c2UgZ2V0Q2hpbGRDb250ZXh0KCkuJyxcbiAgICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50J1xuICAgICAgKSA6IGludmFyaWFudCh0eXBlb2YgaW5zdC5jb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyA9PT0gJ29iamVjdCcpKTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgaW5zdC5jb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyxcbiAgICAgICAgICBjaGlsZENvbnRleHQsXG4gICAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5jaGlsZENvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG5hbWUgaW4gY2hpbGRDb250ZXh0KSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgbmFtZSBpbiBpbnN0LmNvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICAgICclcy5nZXRDaGlsZENvbnRleHQoKToga2V5IFwiJXNcIiBpcyBub3QgZGVmaW5lZCBpbiBjaGlsZENvbnRleHRUeXBlcy4nLFxuICAgICAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcsXG4gICAgICAgICAgbmFtZVxuICAgICAgICApIDogaW52YXJpYW50KG5hbWUgaW4gaW5zdC5jb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNoaWxkQ29udGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgX21lcmdlQ2hpbGRDb250ZXh0OiBmdW5jdGlvbihjdXJyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KSB7XG4gICAgaWYgKGNoaWxkQ29udGV4dCkge1xuICAgICAgcmV0dXJuIGFzc2lnbih7fSwgY3VycmVudENvbnRleHQsIGNoaWxkQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50Q29udGV4dDtcbiAgfSxcblxuICAvKipcbiAgICogUHJvY2Vzc2VzIHByb3BzIGJ5IHNldHRpbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIHVuc3BlY2lmaWVkIHByb3BzIGFuZFxuICAgKiBhc3NlcnRpbmcgdGhhdCB0aGUgcHJvcHMgYXJlIHZhbGlkLiBEb2VzIG5vdCBtdXRhdGUgaXRzIGFyZ3VtZW50OyByZXR1cm5zXG4gICAqIGEgbmV3IHByb3BzIG9iamVjdCB3aXRoIGRlZmF1bHRzIG1lcmdlZCBpbi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1Byb3BzXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcm9jZXNzUHJvcHM6IGZ1bmN0aW9uKG5ld1Byb3BzKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFyIENvbXBvbmVudCA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudChcbiAgICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnRcbiAgICAgICk7XG4gICAgICBpZiAoQ29tcG9uZW50LnByb3BUeXBlcykge1xuICAgICAgICB0aGlzLl9jaGVja1Byb3BUeXBlcyhcbiAgICAgICAgICBDb21wb25lbnQucHJvcFR5cGVzLFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMucHJvcFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3UHJvcHM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFzc2VydCB0aGF0IHRoZSBwcm9wcyBhcmUgdmFsaWRcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHByb3BUeXBlcyBNYXAgb2YgcHJvcCBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrUHJvcFR5cGVzOiBmdW5jdGlvbihwcm9wVHlwZXMsIHByb3BzLCBsb2NhdGlvbikge1xuICAgIC8vIFRPRE86IFN0b3AgdmFsaWRhdGluZyBwcm9wIHR5cGVzIGhlcmUgYW5kIG9ubHkgdXNlIHRoZSBlbGVtZW50XG4gICAgLy8gdmFsaWRhdGlvbi5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IHRoaXMuZ2V0TmFtZSgpO1xuICAgIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BUeXBlcykge1xuICAgICAgaWYgKHByb3BUeXBlcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgICAgdHlwZW9mIHByb3BUeXBlc1twcm9wTmFtZV0gPT09ICdmdW5jdGlvbicsXG4gICAgICAgICAgICAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgJyArXG4gICAgICAgICAgICAnZnJvbSBSZWFjdC5Qcm9wVHlwZXMuJyxcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJyxcbiAgICAgICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSxcbiAgICAgICAgICAgIHByb3BOYW1lXG4gICAgICAgICAgKSA6IGludmFyaWFudCh0eXBlb2YgcHJvcFR5cGVzW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJykpO1xuICAgICAgICAgIGVycm9yID0gcHJvcFR5cGVzW3Byb3BOYW1lXShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgLy8gV2UgbWF5IHdhbnQgdG8gZXh0ZW5kIHRoaXMgbG9naWMgZm9yIHNpbWlsYXIgZXJyb3JzIGluXG4gICAgICAgICAgLy8gUmVhY3QucmVuZGVyIGNhbGxzLCBzbyBJJ20gYWJzdHJhY3RpbmcgaXQgYXdheSBpbnRvXG4gICAgICAgICAgLy8gYSBmdW5jdGlvbiB0byBtaW5pbWl6ZSByZWZhY3RvcmluZyBpbiB0aGUgZnV0dXJlXG4gICAgICAgICAgdmFyIGFkZGVuZHVtID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKHRoaXMpO1xuXG4gICAgICAgICAgaWYgKGxvY2F0aW9uID09PSBSZWFjdFByb3BUeXBlTG9jYXRpb25zLnByb3ApIHtcbiAgICAgICAgICAgIC8vIFByZWZhY2UgZ2l2ZXMgdXMgc29tZXRoaW5nIHRvIGJsYWNrbGlzdCBpbiB3YXJuaW5nIG1vZHVsZVxuICAgICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnRmFpbGVkIENvbXBvc2l0ZSBwcm9wVHlwZTogJXMlcycsXG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIGFkZGVuZHVtXG4gICAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgJ0ZhaWxlZCBDb250ZXh0IFR5cGVzOiAlcyVzJyxcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgYWRkZW5kdW1cbiAgICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24obmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBuZXh0Q29udGV4dCkge1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50O1xuICAgIHZhciBwcmV2Q29udGV4dCA9IHRoaXMuX2NvbnRleHQ7XG5cbiAgICB0aGlzLl9wZW5kaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudChcbiAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgcHJldkVsZW1lbnQsXG4gICAgICBuZXh0RWxlbWVudCxcbiAgICAgIHByZXZDb250ZXh0LFxuICAgICAgbmV4dENvbnRleHRcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJZiBhbnkgb2YgYF9wZW5kaW5nRWxlbWVudGAsIGBfcGVuZGluZ1N0YXRlUXVldWVgLCBvciBgX3BlbmRpbmdGb3JjZVVwZGF0ZWBcbiAgICogaXMgc2V0LCB1cGRhdGUgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTogZnVuY3Rpb24odHJhbnNhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ0VsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnJlY2VpdmVDb21wb25lbnQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50IHx8IHRoaXMuX2N1cnJlbnRFbGVtZW50LFxuICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgdGhpcy5fY29udGV4dFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgIT09IG51bGwgfHwgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIFJlYWN0RWxlbWVudFZhbGlkYXRvci5jaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHMoXG4gICAgICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVDb21wb25lbnQoXG4gICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudCxcbiAgICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQsXG4gICAgICAgIHRoaXMuX2NvbnRleHQsXG4gICAgICAgIHRoaXMuX2NvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBjb250ZXh0cywgd2FybmluZyBpZiB0aGV5IGFyZSBkaWZmZXJlbnRcbiAgICogVE9ETzogUmVtb3ZlIHRoaXMgY2hlY2sgd2hlbiBvd25lci1jb250ZXh0IGlzIHJlbW92ZWRcbiAgICovXG4gICBfd2FybklmQ29udGV4dHNEaWZmZXI6IGZ1bmN0aW9uKG93bmVyQmFzZWRDb250ZXh0LCBwYXJlbnRCYXNlZENvbnRleHQpIHtcbiAgICBvd25lckJhc2VkQ29udGV4dCA9IHRoaXMuX21hc2tDb250ZXh0KG93bmVyQmFzZWRDb250ZXh0KTtcbiAgICBwYXJlbnRCYXNlZENvbnRleHQgPSB0aGlzLl9tYXNrQ29udGV4dChwYXJlbnRCYXNlZENvbnRleHQpO1xuICAgIHZhciBwYXJlbnRLZXlzID0gT2JqZWN0LmtleXMocGFyZW50QmFzZWRDb250ZXh0KS5zb3J0KCk7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBwYXJlbnRLZXlzW2ldO1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIG93bmVyQmFzZWRDb250ZXh0W2tleV0gPT09IHBhcmVudEJhc2VkQ29udGV4dFtrZXldLFxuICAgICAgICAnb3duZXItYmFzZWQgYW5kIHBhcmVudC1iYXNlZCBjb250ZXh0cyBkaWZmZXIgJyAgK1xuICAgICAgICAnKHZhbHVlczogYCVzYCB2cyBgJXNgKSBmb3Iga2V5ICglcykgd2hpbGUgbW91bnRpbmcgJXMgJyArXG4gICAgICAgICcoc2VlOiBodHRwOi8vZmIubWUvcmVhY3QtY29udGV4dC1ieS1wYXJlbnQpJyxcbiAgICAgICAgb3duZXJCYXNlZENvbnRleHRba2V5XSxcbiAgICAgICAgcGFyZW50QmFzZWRDb250ZXh0W2tleV0sXG4gICAgICAgIGtleSxcbiAgICAgICAgZGlzcGxheU5hbWVcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYW4gdXBkYXRlIHRvIGEgbW91bnRlZCBjb21wb25lbnQuIFRoZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGFuZFxuICAgKiBzaG91bGRDb21wb25lbnRVcGRhdGUgbWV0aG9kcyBhcmUgY2FsbGVkLCB0aGVuIChhc3N1bWluZyB0aGUgdXBkYXRlIGlzbid0XG4gICAqIHNraXBwZWQpIHRoZSByZW1haW5pbmcgdXBkYXRlIGxpZmVjeWNsZSBtZXRob2RzIGFyZSBjYWxsZWQgYW5kIHRoZSBET01cbiAgICogcmVwcmVzZW50YXRpb24gaXMgdXBkYXRlZC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1lbnRzIFJlYWN0J3MgcmVuZGVyaW5nIGFuZCByZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uXG4gICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBwcmV2UGFyZW50RWxlbWVudFxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dFBhcmVudEVsZW1lbnRcbiAgICogQGludGVybmFsXG4gICAqIEBvdmVycmlkYWJsZVxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbihcbiAgICB0cmFuc2FjdGlvbixcbiAgICBwcmV2UGFyZW50RWxlbWVudCxcbiAgICBuZXh0UGFyZW50RWxlbWVudCxcbiAgICBwcmV2VW5tYXNrZWRDb250ZXh0LFxuICAgIG5leHRVbm1hc2tlZENvbnRleHRcbiAgKSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIHZhciBuZXh0Q29udGV4dCA9IGluc3QuY29udGV4dDtcbiAgICB2YXIgbmV4dFByb3BzID0gaW5zdC5wcm9wcztcblxuICAgIC8vIERpc3Rpbmd1aXNoIGJldHdlZW4gYSBwcm9wcyB1cGRhdGUgdmVyc3VzIGEgc2ltcGxlIHN0YXRlIHVwZGF0ZVxuICAgIGlmIChwcmV2UGFyZW50RWxlbWVudCAhPT0gbmV4dFBhcmVudEVsZW1lbnQpIHtcbiAgICAgIG5leHRDb250ZXh0ID0gdGhpcy5fcHJvY2Vzc0NvbnRleHQobmV4dFBhcmVudEVsZW1lbnQuX2NvbnRleHQpO1xuICAgICAgbmV4dFByb3BzID0gdGhpcy5fcHJvY2Vzc1Byb3BzKG5leHRQYXJlbnRFbGVtZW50LnByb3BzKTtcblxuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICBpZiAobmV4dFVubWFza2VkQ29udGV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5fd2FybklmQ29udGV4dHNEaWZmZXIoXG4gICAgICAgICAgICBuZXh0UGFyZW50RWxlbWVudC5fY29udGV4dCxcbiAgICAgICAgICAgIG5leHRVbm1hc2tlZENvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFuIHVwZGF0ZSBoZXJlIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIGJ1dCBpbW1lZGlhdGVseSBzZXRcbiAgICAgIC8vIF9wZW5kaW5nU3RhdGVRdWV1ZSB3aGljaCB3aWxsIGVuc3VyZSB0aGF0IGFueSBzdGF0ZSB1cGRhdGVzIGdldHNcbiAgICAgIC8vIGltbWVkaWF0ZWx5IHJlY29uY2lsZWQgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgbmV4dCBiYXRjaC5cblxuICAgICAgaWYgKGluc3QuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcykge1xuICAgICAgICBpbnN0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5leHRTdGF0ZSA9IHRoaXMuX3Byb2Nlc3NQZW5kaW5nU3RhdGUobmV4dFByb3BzLCBuZXh0Q29udGV4dCk7XG5cbiAgICB2YXIgc2hvdWxkVXBkYXRlID1cbiAgICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSB8fFxuICAgICAgIWluc3Quc2hvdWxkQ29tcG9uZW50VXBkYXRlIHx8XG4gICAgICBpbnN0LnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIHR5cGVvZiBzaG91bGRVcGRhdGUgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICAnJXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IFJldHVybmVkIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGEgJyArXG4gICAgICAgICdib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuJyxcbiAgICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50J1xuICAgICAgKSA6IG51bGwpO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgLy8gV2lsbCBzZXQgYHRoaXMucHJvcHNgLCBgdGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgLlxuICAgICAgdGhpcy5fcGVyZm9ybUNvbXBvbmVudFVwZGF0ZShcbiAgICAgICAgbmV4dFBhcmVudEVsZW1lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBuZXh0Q29udGV4dCxcbiAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgIG5leHRVbm1hc2tlZENvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGl0J3MgZGV0ZXJtaW5lZCB0aGF0IGEgY29tcG9uZW50IHNob3VsZCBub3QgdXBkYXRlLCB3ZSBzdGlsbCB3YW50XG4gICAgICAvLyB0byBzZXQgcHJvcHMgYW5kIHN0YXRlIGJ1dCB3ZSBzaG9ydGN1dCB0aGUgcmVzdCBvZiB0aGUgdXBkYXRlLlxuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBuZXh0UGFyZW50RWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbnRleHQgPSBuZXh0VW5tYXNrZWRDb250ZXh0O1xuICAgICAgaW5zdC5wcm9wcyA9IG5leHRQcm9wcztcbiAgICAgIGluc3Quc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICBpbnN0LmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgICB9XG4gIH0sXG5cbiAgX3Byb2Nlc3NQZW5kaW5nU3RhdGU6IGZ1bmN0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcbiAgICB2YXIgcXVldWUgPSB0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZTtcbiAgICB2YXIgcmVwbGFjZSA9IHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU7XG4gICAgdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgIGlmICghcXVldWUpIHtcbiAgICAgIHJldHVybiBpbnN0LnN0YXRlO1xuICAgIH1cblxuICAgIGlmIChyZXBsYWNlICYmIHF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHF1ZXVlWzBdO1xuICAgIH1cblxuICAgIHZhciBuZXh0U3RhdGUgPSBhc3NpZ24oe30sIHJlcGxhY2UgPyBxdWV1ZVswXSA6IGluc3Quc3RhdGUpO1xuICAgIGZvciAodmFyIGkgPSByZXBsYWNlID8gMSA6IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhcnRpYWwgPSBxdWV1ZVtpXTtcbiAgICAgIGFzc2lnbihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICB0eXBlb2YgcGFydGlhbCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgcGFydGlhbC5jYWxsKGluc3QsIG5leHRTdGF0ZSwgcHJvcHMsIGNvbnRleHQpIDpcbiAgICAgICAgICBwYXJ0aWFsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIE1lcmdlcyBuZXcgcHJvcHMgYW5kIHN0YXRlLCBub3RpZmllcyBkZWxlZ2F0ZSBtZXRob2RzIG9mIHVwZGF0ZSBhbmRcbiAgICogcGVyZm9ybXMgdXBkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnQgTmV4dCBlbGVtZW50XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMgTmV4dCBwdWJsaWMgb2JqZWN0IHRvIHNldCBhcyBwcm9wZXJ0aWVzLlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZSBOZXh0IG9iamVjdCB0byBzZXQgYXMgc3RhdGUuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHQgTmV4dCBwdWJsaWMgb2JqZWN0IHRvIHNldCBhcyBjb250ZXh0LlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7P29iamVjdH0gdW5tYXNrZWRDb250ZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGVyZm9ybUNvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24oXG4gICAgbmV4dEVsZW1lbnQsXG4gICAgbmV4dFByb3BzLFxuICAgIG5leHRTdGF0ZSxcbiAgICBuZXh0Q29udGV4dCxcbiAgICB0cmFuc2FjdGlvbixcbiAgICB1bm1hc2tlZENvbnRleHRcbiAgKSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIHZhciBwcmV2UHJvcHMgPSBpbnN0LnByb3BzO1xuICAgIHZhciBwcmV2U3RhdGUgPSBpbnN0LnN0YXRlO1xuICAgIHZhciBwcmV2Q29udGV4dCA9IGluc3QuY29udGV4dDtcblxuICAgIGlmIChpbnN0LmNvbXBvbmVudFdpbGxVcGRhdGUpIHtcbiAgICAgIGluc3QuY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgdGhpcy5fY29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0LnByb3BzID0gbmV4dFByb3BzO1xuICAgIGluc3Quc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgaW5zdC5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG5cbiAgICB0aGlzLl91cGRhdGVSZW5kZXJlZENvbXBvbmVudCh0cmFuc2FjdGlvbiwgdW5tYXNrZWRDb250ZXh0KTtcblxuICAgIGlmIChpbnN0LmNvbXBvbmVudERpZFVwZGF0ZSkge1xuICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShcbiAgICAgICAgaW5zdC5jb21wb25lbnREaWRVcGRhdGUuYmluZChpbnN0LCBwcmV2UHJvcHMsIHByZXZTdGF0ZSwgcHJldkNvbnRleHQpLFxuICAgICAgICBpbnN0XG4gICAgICApO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQ2FsbCB0aGUgY29tcG9uZW50J3MgYHJlbmRlcmAgbWV0aG9kIGFuZCB1cGRhdGUgdGhlIERPTSBhY2NvcmRpbmdseS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF91cGRhdGVSZW5kZXJlZENvbXBvbmVudDogZnVuY3Rpb24odHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgcHJldkNvbXBvbmVudEluc3RhbmNlID0gdGhpcy5fcmVuZGVyZWRDb21wb25lbnQ7XG4gICAgdmFyIHByZXZSZW5kZXJlZEVsZW1lbnQgPSBwcmV2Q29tcG9uZW50SW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50O1xuICAgIHZhciBjaGlsZENvbnRleHQgPSB0aGlzLl9nZXRWYWxpZGF0ZWRDaGlsZENvbnRleHQoKTtcbiAgICB2YXIgbmV4dFJlbmRlcmVkRWxlbWVudCA9IHRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudChjaGlsZENvbnRleHQpO1xuICAgIGlmIChzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2UmVuZGVyZWRFbGVtZW50LCBuZXh0UmVuZGVyZWRFbGVtZW50KSkge1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnJlY2VpdmVDb21wb25lbnQoXG4gICAgICAgIHByZXZDb21wb25lbnRJbnN0YW5jZSxcbiAgICAgICAgbmV4dFJlbmRlcmVkRWxlbWVudCxcbiAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgIHRoaXMuX21lcmdlQ2hpbGRDb250ZXh0KGNvbnRleHQsIGNoaWxkQ29udGV4dClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZXNlIHR3byBJRHMgYXJlIGFjdHVhbGx5IHRoZSBzYW1lISBCdXQgbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGF0LlxuICAgICAgdmFyIHRoaXNJRCA9IHRoaXMuX3Jvb3ROb2RlSUQ7XG4gICAgICB2YXIgcHJldkNvbXBvbmVudElEID0gcHJldkNvbXBvbmVudEluc3RhbmNlLl9yb290Tm9kZUlEO1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQocHJldkNvbXBvbmVudEluc3RhbmNlKTtcblxuICAgICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSB0aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KFxuICAgICAgICBuZXh0UmVuZGVyZWRFbGVtZW50LFxuICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlXG4gICAgICApO1xuICAgICAgdmFyIG5leHRNYXJrdXAgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21wb25lbnQoXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50LFxuICAgICAgICB0aGlzSUQsXG4gICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICB0aGlzLl9tZXJnZUNoaWxkQ29udGV4dChjb250ZXh0LCBjaGlsZENvbnRleHQpXG4gICAgICApO1xuICAgICAgdGhpcy5fcmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRChwcmV2Q29tcG9uZW50SUQsIG5leHRNYXJrdXApO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgX3JlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQ6IGZ1bmN0aW9uKHByZXZDb21wb25lbnRJRCwgbmV4dE1hcmt1cCkge1xuICAgIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQucmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRChcbiAgICAgIHByZXZDb21wb25lbnRJRCxcbiAgICAgIG5leHRNYXJrdXBcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciByZW5kZXJlZENvbXBvbmVudCA9IGluc3QucmVuZGVyKCk7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICBpZiAodHlwZW9mIHJlbmRlcmVkQ29tcG9uZW50ID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIGluc3QucmVuZGVyLl9pc01vY2tGdW5jdGlvbikge1xuICAgICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJhZCBwcmFjdGljZS4gQ29uc2lkZXIgd2FybmluZyBoZXJlIGFuZFxuICAgICAgICAvLyBkZXByZWNhdGluZyB0aGlzIGNvbnZlbmllbmNlLlxuICAgICAgICByZW5kZXJlZENvbXBvbmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlcmVkQ29tcG9uZW50O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudDogZnVuY3Rpb24oY2hpbGRDb250ZXh0KSB7XG4gICAgdmFyIHJlbmRlcmVkQ29tcG9uZW50O1xuICAgIHZhciBwcmV2aW91c0NvbnRleHQgPSBSZWFjdENvbnRleHQuY3VycmVudDtcbiAgICBSZWFjdENvbnRleHQuY3VycmVudCA9IHRoaXMuX21lcmdlQ2hpbGRDb250ZXh0KFxuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQuX2NvbnRleHQsXG4gICAgICBjaGlsZENvbnRleHRcbiAgICApO1xuICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSB0aGlzO1xuICAgIHRyeSB7XG4gICAgICByZW5kZXJlZENvbXBvbmVudCA9XG4gICAgICAgIHRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRPd25lck9yQ29udGV4dCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdENvbnRleHQuY3VycmVudCA9IHByZXZpb3VzQ29udGV4dDtcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgLy8gVE9ETzogQW4gYGlzVmFsaWROb2RlYCBmdW5jdGlvbiB3b3VsZCBwcm9iYWJseSBiZSBtb3JlIGFwcHJvcHJpYXRlXG4gICAgICByZW5kZXJlZENvbXBvbmVudCA9PT0gbnVsbCB8fCByZW5kZXJlZENvbXBvbmVudCA9PT0gZmFsc2UgfHxcbiAgICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChyZW5kZXJlZENvbXBvbmVudCksXG4gICAgICAnJXMucmVuZGVyKCk6IEEgdmFsaWQgUmVhY3RDb21wb25lbnQgbXVzdCBiZSByZXR1cm5lZC4gWW91IG1heSBoYXZlICcgK1xuICAgICAgICAncmV0dXJuZWQgdW5kZWZpbmVkLCBhbiBhcnJheSBvciBzb21lIG90aGVyIGludmFsaWQgb2JqZWN0LicsXG4gICAgICB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnXG4gICAgKSA6IGludmFyaWFudCgvLyBUT0RPOiBBbiBgaXNWYWxpZE5vZGVgIGZ1bmN0aW9uIHdvdWxkIHByb2JhYmx5IGJlIG1vcmUgYXBwcm9wcmlhdGVcbiAgICByZW5kZXJlZENvbXBvbmVudCA9PT0gbnVsbCB8fCByZW5kZXJlZENvbXBvbmVudCA9PT0gZmFsc2UgfHxcbiAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQocmVuZGVyZWRDb21wb25lbnQpKSk7XG4gICAgcmV0dXJuIHJlbmRlcmVkQ29tcG9uZW50O1xuICB9LFxuXG4gIC8qKlxuICAgKiBMYXppbHkgYWxsb2NhdGVzIHRoZSByZWZzIG9iamVjdCBhbmQgc3RvcmVzIGBjb21wb25lbnRgIGFzIGByZWZgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIFJlZmVyZW5jZSBuYW1lLlxuICAgKiBAcGFyYW0ge2NvbXBvbmVudH0gY29tcG9uZW50IENvbXBvbmVudCB0byBzdG9yZSBhcyBgcmVmYC5cbiAgICogQGZpbmFsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhdHRhY2hSZWY6IGZ1bmN0aW9uKHJlZiwgY29tcG9uZW50KSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAgdmFyIHJlZnMgPSBpbnN0LnJlZnMgPT09IGVtcHR5T2JqZWN0ID8gKGluc3QucmVmcyA9IHt9KSA6IGluc3QucmVmcztcbiAgICByZWZzW3JlZl0gPSBjb21wb25lbnQuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgfSxcblxuICAvKipcbiAgICogRGV0YWNoZXMgYSByZWZlcmVuY2UgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZiBOYW1lIHRvIGRlcmVmZXJlbmNlLlxuICAgKiBAZmluYWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRldGFjaFJlZjogZnVuY3Rpb24ocmVmKSB7XG4gICAgdmFyIHJlZnMgPSB0aGlzLmdldFB1YmxpY0luc3RhbmNlKCkucmVmcztcbiAgICBkZWxldGUgcmVmc1tyZWZdO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSB0ZXh0IGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSBpdFxuICAgKiBpbiBlcnJvciBtZXNzYWdlcy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgbmFtZSBvciBudWxsLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldE5hbWU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0eXBlID0gdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSB0aGlzLl9pbnN0YW5jZSAmJiB0aGlzLl9pbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZS5kaXNwbGF5TmFtZSB8fCAoY29uc3RydWN0b3IgJiYgY29uc3RydWN0b3IuZGlzcGxheU5hbWUpIHx8XG4gICAgICB0eXBlLm5hbWUgfHwgKGNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLm5hbWUpIHx8XG4gICAgICBudWxsXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgY29tcG9uZW50IC0gaS5lLiB3aGF0XG4gICAqIGlzIGV4cG9zZWQgYnkgcmVmcyBhbmQgcmV0dXJuZWQgYnkgUmVhY3QucmVuZGVyLiBDYW4gYmUgbnVsbCBmb3Igc3RhdGVsZXNzXG4gICAqIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSB0aGUgcHVibGljIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRQdWJsaWNJbnN0YW5jZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICB9LFxuXG4gIC8vIFN0dWJcbiAgX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6IG51bGxcblxufTtcblxuUmVhY3RQZXJmLm1lYXN1cmVNZXRob2RzKFxuICBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudE1peGluLFxuICAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnLFxuICB7XG4gICAgbW91bnRDb21wb25lbnQ6ICdtb3VudENvbXBvbmVudCcsXG4gICAgdXBkYXRlQ29tcG9uZW50OiAndXBkYXRlQ29tcG9uZW50JyxcbiAgICBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50OiAnX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCdcbiAgfVxuKTtcblxudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50ID0ge1xuXG4gIE1peGluOiBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudE1peGluXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb3NpdGVDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5RdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJTWldGamRFTnZiWEJ2Ym1WdWRFVnVkbWx5YjI1dFpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEYjIxd2IyNWxiblJGYm5acGNtOXViV1Z1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRU52Ym5SbGVIUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU52Ym5SbGVIUmNJaWs3WEc1MllYSWdVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU4xY25KbGJuUlBkMjVsY2x3aUtUdGNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZzWlcxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5WENJcE8xeHVkbUZ5SUZKbFlXTjBTVzV6ZEdGdVkyVk5ZWEFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVsdWMzUmhibU5sVFdGd1hDSXBPMXh1ZG1GeUlGSmxZV04wVEdsbVpVTjVZMnhsSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSTWFXWmxRM2xqYkdWY0lpazdYRzUyWVhJZ1VtVmhZM1JPWVhScGRtVkRiMjF3YjI1bGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTVoZEdsMlpVTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEZCbGNtWWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRkJsY21aY0lpazdYRzUyWVhJZ1VtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVjeUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVUhKdmNGUjVjR1ZNYjJOaGRHbHZibk5jSWlrN1hHNTJZWElnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dVRtRnRaWE1nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGMxd2lLVHRjYm5aaGNpQlNaV0ZqZEZKbFkyOXVZMmxzWlhJZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGSmxZMjl1WTJsc1pYSmNJaWs3WEc1MllYSWdVbVZoWTNSVmNHUmhkR1Z6SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSVmNHUmhkR1Z6WENJcE8xeHVYRzUyWVhJZ1lYTnphV2R1SUQwZ2NtVnhkV2x5WlNoY0lpNHZUMkpxWldOMExtRnpjMmxuYmx3aUtUdGNiblpoY2lCbGJYQjBlVTlpYW1WamRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJWdGNIUjVUMkpxWldOMFhDSXBPMXh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNiblpoY2lCemFHOTFiR1JWY0dSaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZENBOUlISmxjWFZwY21Vb1hDSXVMM05vYjNWc1pGVndaR0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBYQ0lwTzF4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzVtZFc1amRHbHZiaUJuWlhSRVpXTnNZWEpoZEdsdmJrVnljbTl5UVdSa1pXNWtkVzBvWTI5dGNHOXVaVzUwS1NCN1hHNGdJSFpoY2lCdmQyNWxjaUE5SUdOdmJYQnZibVZ1ZEM1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1WDI5M2JtVnlJSHg4SUc1MWJHdzdYRzRnSUdsbUlDaHZkMjVsY2lrZ2UxeHVJQ0FnSUhaaGNpQnVZVzFsSUQwZ2IzZHVaWEl1WjJWMFRtRnRaU2dwTzF4dUlDQWdJR2xtSUNodVlXMWxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdKeUJEYUdWamF5QjBhR1VnY21WdVpHVnlJRzFsZEdodlpDQnZaaUJnSnlBcklHNWhiV1VnS3lBbllDNG5PMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z0p5YzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwdElGUm9aU0JNYVdabExVTjVZMnhsSUc5bUlHRWdRMjl0Y0c5emFYUmxJRU52YlhCdmJtVnVkQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzFjYmlBcVhHNGdLaUF0SUdOdmJuTjBjblZqZEc5eU9pQkpibWwwYVdGc2FYcGhkR2x2YmlCdlppQnpkR0YwWlM0Z1ZHaGxJR2x1YzNSaGJtTmxJR2x6SUc1dmR5QnlaWFJoYVc1bFpDNWNiaUFxSUNBZ0xTQmpiMjF3YjI1bGJuUlhhV3hzVFc5MWJuUmNiaUFxSUNBZ0xTQnlaVzVrWlhKY2JpQXFJQ0FnTFNCYlkyaHBiR1J5Wlc0bmN5QmpiMjV6ZEhKMVkzUnZjbk5kWEc0Z0tpQWdJQ0FnTFNCYlkyaHBiR1J5Wlc0bmN5QmpiMjF3YjI1bGJuUlhhV3hzVFc5MWJuUWdZVzVrSUhKbGJtUmxjbDFjYmlBcUlDQWdJQ0F0SUZ0amFHbHNaSEpsYmlkeklHTnZiWEJ2Ym1WdWRFUnBaRTF2ZFc1MFhWeHVJQ29nSUNBZ0lDMGdZMjl0Y0c5dVpXNTBSR2xrVFc5MWJuUmNiaUFxWEc0Z0tpQWdJQ0FnSUNCVmNHUmhkR1VnVUdoaGMyVnpPbHh1SUNvZ0lDQWdJQ0FnTFNCamIyMXdiMjVsYm5SWGFXeHNVbVZqWldsMlpWQnliM0J6SUNodmJteDVJR05oYkd4bFpDQnBaaUJ3WVhKbGJuUWdkWEJrWVhSbFpDbGNiaUFxSUNBZ0lDQWdJQzBnYzJodmRXeGtRMjl0Y0c5dVpXNTBWWEJrWVhSbFhHNGdLaUFnSUNBZ0lDQWdJQzBnWTI5dGNHOXVaVzUwVjJsc2JGVndaR0YwWlZ4dUlDb2dJQ0FnSUNBZ0lDQWdJQzBnY21WdVpHVnlYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0xTQmJZMmhwYkdSeVpXNG5jeUJqYjI1emRISjFZM1J2Y25NZ2IzSWdjbVZqWldsMlpTQndjbTl3Y3lCd2FHRnpaWE5kWEc0Z0tpQWdJQ0FnSUNBZ0lDMGdZMjl0Y0c5dVpXNTBSR2xrVlhCa1lYUmxYRzRnS2x4dUlDb2dJQ0FnSUMwZ1kyOXRjRzl1Wlc1MFYybHNiRlZ1Ylc5MWJuUmNiaUFxSUNBZ0lDQXRJRnRqYUdsc1pISmxiaWR6SUdOdmJYQnZibVZ1ZEZkcGJHeFZibTF2ZFc1MFhWeHVJQ29nSUNBdElGdGphR2xzWkhKbGJpQmtaWE4wY205NVpXUmRYRzRnS2lBdElDaGtaWE4wY205NVpXUXBPaUJVYUdVZ2FXNXpkR0Z1WTJVZ2FYTWdibTkzSUdKc1lXNXJMQ0J5Wld4bFlYTmxaQ0JpZVNCU1pXRmpkQ0JoYm1RZ2NtVmhaSGtnWm05eUlFZERMbHh1SUNwY2JpQXFJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdFhHNGdLaTljYmx4dUx5b3FYRzRnS2lCQmJpQnBibU55WlcxbGJuUnBibWNnU1VRZ1lYTnphV2R1WldRZ2RHOGdaV0ZqYUNCamIyMXdiMjVsYm5RZ2QyaGxiaUJwZENCcGN5QnRiM1Z1ZEdWa0xpQlVhR2x6SUdselhHNGdLaUIxYzJWa0lIUnZJR1Z1Wm05eVkyVWdkR2hsSUc5eVpHVnlJR2x1SUhkb2FXTm9JR0JTWldGamRGVndaR0YwWlhOZ0lIVndaR0YwWlhNZ1pHbHlkSGtnWTI5dGNHOXVaVzUwY3k1Y2JpQXFYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzUyWVhJZ2JtVjRkRTF2ZFc1MFNVUWdQU0F4TzF4dVhHNHZLaXBjYmlBcUlFQnNaVzVrY3lCN1VtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblF1Y0hKdmRHOTBlWEJsZlZ4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblJOYVhocGJpQTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRbUZ6WlNCamIyNXpkSEoxWTNSdmNpQm1iM0lnWVd4c0lHTnZiWEJ2YzJsMFpTQmpiMjF3YjI1bGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUkZiR1Z0Wlc1MGZTQmxiR1Z0Wlc1MFhHNGdJQ0FxSUVCbWFXNWhiRnh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJR052Ym5OMGNuVmpkRG9nWm5WdVkzUnBiMjRvWld4bGJXVnVkQ2tnZTF4dUlDQWdJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwSUQwZ1pXeGxiV1Z1ZER0Y2JpQWdJQ0IwYUdsekxsOXliMjkwVG05a1pVbEVJRDBnYm5Wc2JEdGNiaUFnSUNCMGFHbHpMbDlwYm5OMFlXNWpaU0E5SUc1MWJHdzdYRzVjYmlBZ0lDQXZMeUJUWldVZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlZ4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kRmJHVnRaVzUwSUQwZ2JuVnNiRHRjYmlBZ0lDQjBhR2x6TGw5d1pXNWthVzVuVTNSaGRHVlJkV1YxWlNBOUlHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1ZmNHVnVaR2x1WjFKbGNHeGhZMlZUZEdGMFpTQTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVYM0JsYm1ScGJtZEdiM0pqWlZWd1pHRjBaU0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdkR2hwY3k1ZmNtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnZEdocGN5NWZZMjl1ZEdWNGRDQTlJRzUxYkd3N1hHNGdJQ0FnZEdocGN5NWZiVzkxYm5SUGNtUmxjaUE5SURBN1hHNGdJQ0FnZEdocGN5NWZhWE5VYjNCTVpYWmxiQ0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdMeThnVTJWbElGSmxZV04wVlhCa1lYUmxjeUJoYm1RZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlM1Y2JpQWdJQ0IwYUdsekxsOXdaVzVrYVc1blEyRnNiR0poWTJ0eklEMGdiblZzYkR0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzVwZEdsaGJHbDZaWE1nZEdobElHTnZiWEJ2Ym1WdWRDd2djbVZ1WkdWeWN5QnRZWEpyZFhBc0lHRnVaQ0J5WldkcGMzUmxjbk1nWlhabGJuUWdiR2x6ZEdWdVpYSnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnY205dmRFbEVJRVJQVFNCSlJDQnZaaUIwYUdVZ2NtOXZkQ0J1YjJSbExseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjU4VW1WaFkzUlRaWEoyWlhKU1pXNWtaWEpwYm1kVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdQM04wY21sdVozMGdVbVZ1WkdWeVpXUWdiV0Z5YTNWd0lIUnZJR0psSUdsdWMyVnlkR1ZrSUdsdWRHOGdkR2hsSUVSUFRTNWNiaUFnSUNvZ1FHWnBibUZzWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnYlc5MWJuUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLSEp2YjNSSlJDd2dkSEpoYm5OaFkzUnBiMjRzSUdOdmJuUmxlSFFwSUh0Y2JpQWdJQ0IwYUdsekxsOWpiMjUwWlhoMElEMGdZMjl1ZEdWNGREdGNiaUFnSUNCMGFHbHpMbDl0YjNWdWRFOXlaR1Z5SUQwZ2JtVjRkRTF2ZFc1MFNVUXJLenRjYmlBZ0lDQjBhR2x6TGw5eWIyOTBUbTlrWlVsRUlEMGdjbTl2ZEVsRU8xeHVYRzRnSUNBZ2RtRnlJSEIxWW14cFkxQnliM0J6SUQwZ2RHaHBjeTVmY0hKdlkyVnpjMUJ5YjNCektIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMbkJ5YjNCektUdGNiaUFnSUNCMllYSWdjSFZpYkdsalEyOXVkR1Y0ZENBOUlIUm9hWE11WDNCeWIyTmxjM05EYjI1MFpYaDBLSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTGw5amIyNTBaWGgwS1R0Y2JseHVJQ0FnSUhaaGNpQkRiMjF3YjI1bGJuUWdQU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEM1blpYUkRiMjF3YjI1bGJuUkRiR0Z6YzBadmNrVnNaVzFsYm5Rb1hHNGdJQ0FnSUNCMGFHbHpMbDlqZFhKeVpXNTBSV3hsYldWdWRGeHVJQ0FnSUNrN1hHNWNiaUFnSUNBdkx5QkpibWwwYVdGc2FYcGxJSFJvWlNCd2RXSnNhV01nWTJ4aGMzTmNiaUFnSUNCMllYSWdhVzV6ZENBOUlHNWxkeUJEYjIxd2IyNWxiblFvY0hWaWJHbGpVSEp2Y0hNc0lIQjFZbXhwWTBOdmJuUmxlSFFwTzF4dVhHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnTHk4Z1ZHaHBjeUIzYVd4c0lIUm9jbTkzSUd4aGRHVnlJR2x1SUY5eVpXNWtaWEpXWVd4cFpHRjBaV1JEYjIxd2IyNWxiblFzSUdKMWRDQmhaR1FnWVc0Z1pXRnliSGxjYmlBZ0lDQWdJQzh2SUhkaGNtNXBibWNnYm05M0lIUnZJR2hsYkhBZ1pHVmlkV2RuYVc1blhHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnYVc1emRDNXlaVzVrWlhJZ0lUMGdiblZzYkN4Y2JpQWdJQ0FnSUNBZ0p5VnpLQzR1TGlrNklFNXZJR0J5Wlc1a1pYSmdJRzFsZEdodlpDQm1iM1Z1WkNCdmJpQjBhR1VnY21WMGRYSnVaV1FnWTI5dGNHOXVaVzUwSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5hVzV6ZEdGdVkyVTZJSGx2ZFNCdFlYa2dhR0YyWlNCbWIzSm5iM1IwWlc0Z2RHOGdaR1ZtYVc1bElHQnlaVzVrWlhKZ0lHbHVJSGx2ZFhJZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RqYjIxd2IyNWxiblFnYjNJZ2VXOTFJRzFoZVNCb1lYWmxJR0ZqWTJsa1pXNTBZV3hzZVNCMGNtbGxaQ0IwYnlCeVpXNWtaWElnWVc0Z1pXeGxiV1Z1ZENBbklDdGNiaUFnSUNBZ0lDQWdKM2RvYjNObElIUjVjR1VnYVhNZ1lTQm1kVzVqZEdsdmJpQjBhR0YwSUdsemJseGNKM1FnWVNCU1pXRmpkQ0JqYjIxd2IyNWxiblF1Snl4Y2JpQWdJQ0FnSUNBZ1EyOXRjRzl1Wlc1MExtUnBjM0JzWVhsT1lXMWxJSHg4SUVOdmJYQnZibVZ1ZEM1dVlXMWxJSHg4SUNkRGIyMXdiMjVsYm5RblhHNGdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1ZHaGxjMlVnYzJodmRXeGtJR0psSUhObGRDQjFjQ0JwYmlCMGFHVWdZMjl1YzNSeWRXTjBiM0lzSUdKMWRDQmhjeUJoSUdOdmJuWmxibWxsYm1ObElHWnZjbHh1SUNBZ0lDOHZJSE5wYlhCc1pYSWdZMnhoYzNNZ1lXSnpkSEpoWTNScGIyNXpMQ0IzWlNCelpYUWdkR2hsYlNCMWNDQmhablJsY2lCMGFHVWdabUZqZEM1Y2JpQWdJQ0JwYm5OMExuQnliM0J6SUQwZ2NIVmliR2xqVUhKdmNITTdYRzRnSUNBZ2FXNXpkQzVqYjI1MFpYaDBJRDBnY0hWaWJHbGpRMjl1ZEdWNGREdGNiaUFnSUNCcGJuTjBMbkpsWm5NZ1BTQmxiWEIwZVU5aWFtVmpkRHRjYmx4dUlDQWdJSFJvYVhNdVgybHVjM1JoYm1ObElEMGdhVzV6ZER0Y2JseHVJQ0FnSUM4dklGTjBiM0psSUdFZ2NtVm1aWEpsYm1ObElHWnliMjBnZEdobElHbHVjM1JoYm1ObElHSmhZMnNnZEc4Z2RHaGxJR2x1ZEdWeWJtRnNJSEpsY0hKbGMyVnVkR0YwYVc5dVhHNGdJQ0FnVW1WaFkzUkpibk4wWVc1alpVMWhjQzV6WlhRb2FXNXpkQ3dnZEdocGN5azdYRzVjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5M1lYSnVTV1pEYjI1MFpYaDBjMFJwWm1abGNpaDBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkQzVmWTI5dWRHVjRkQ3dnWTI5dWRHVjRkQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdMeThnVTJsdVkyVWdjR3hoYVc0Z1NsTWdZMnhoYzNObGN5QmhjbVVnWkdWbWFXNWxaQ0IzYVhSb2IzVjBJR0Z1ZVNCemNHVmphV0ZzSUdsdWFYUnBZV3hwZW1GMGFXOXVYRzRnSUNBZ0lDQXZMeUJzYjJkcFl5d2dkMlVnWTJGdUlHNXZkQ0JqWVhSamFDQmpiMjF0YjI0Z1pYSnliM0p6SUdWaGNteDVMaUJVYUdWeVpXWnZjbVVzSUhkbElHaGhkbVVnZEc5Y2JpQWdJQ0FnSUM4dklHTmhkR05vSUhSb1pXMGdhR1Z5WlN3Z1lYUWdhVzVwZEdsaGJHbDZZWFJwYjI0Z2RHbHRaU3dnYVc1emRHVmhaQzVjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWhhVzV6ZEM1blpYUkpibWwwYVdGc1UzUmhkR1VnZkh4Y2JpQWdJQ0FnSUNBZ2FXNXpkQzVuWlhSSmJtbDBhV0ZzVTNSaGRHVXVhWE5TWldGamRFTnNZWE56UVhCd2NtOTJaV1FzWEc0Z0lDQWdJQ0FnSUNkblpYUkpibWwwYVdGc1UzUmhkR1VnZDJGeklHUmxabWx1WldRZ2IyNGdKWE1zSUdFZ2NHeGhhVzRnU21GMllWTmpjbWx3ZENCamJHRnpjeTRnSnlBclhHNGdJQ0FnSUNBZ0lDZFVhR2x6SUdseklHOXViSGtnYzNWd2NHOXlkR1ZrSUdadmNpQmpiR0Z6YzJWeklHTnlaV0YwWldRZ2RYTnBibWNnVW1WaFkzUXVZM0psWVhSbFEyeGhjM011SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5SR2xrSUhsdmRTQnRaV0Z1SUhSdklHUmxabWx1WlNCaElITjBZWFJsSUhCeWIzQmxjblI1SUdsdWMzUmxZV1EvSnl4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVuWlhST1lXMWxLQ2tnZkh3Z0oyRWdZMjl0Y0c5dVpXNTBKMXh1SUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lDRnBibk4wTG1kbGRFUmxabUYxYkhSUWNtOXdjeUI4ZkZ4dUlDQWdJQ0FnSUNCcGJuTjBMbWRsZEVSbFptRjFiSFJRY205d2N5NXBjMUpsWVdOMFEyeGhjM05CY0hCeWIzWmxaQ3hjYmlBZ0lDQWdJQ0FnSjJkbGRFUmxabUYxYkhSUWNtOXdjeUIzWVhNZ1pHVm1hVzVsWkNCdmJpQWxjeXdnWVNCd2JHRnBiaUJLWVhaaFUyTnlhWEIwSUdOc1lYTnpMaUFuSUN0Y2JpQWdJQ0FnSUNBZ0oxUm9hWE1nYVhNZ2IyNXNlU0J6ZFhCd2IzSjBaV1FnWm05eUlHTnNZWE56WlhNZ1kzSmxZWFJsWkNCMWMybHVaeUJTWldGamRDNWpjbVZoZEdWRGJHRnpjeTRnSnlBclhHNGdJQ0FnSUNBZ0lDZFZjMlVnWVNCemRHRjBhV01nY0hKdmNHVnlkSGtnZEc4Z1pHVm1hVzVsSUdSbFptRjFiSFJRY205d2N5QnBibk4wWldGa0xpY3NYRzRnSUNBZ0lDQWdJSFJvYVhNdVoyVjBUbUZ0WlNncElIeDhJQ2RoSUdOdmJYQnZibVZ1ZENkY2JpQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FoYVc1emRDNXdjbTl3Vkhsd1pYTXNYRzRnSUNBZ0lDQWdJQ2R3Y205d1ZIbHdaWE1nZDJGeklHUmxabWx1WldRZ1lYTWdZVzRnYVc1emRHRnVZMlVnY0hKdmNHVnlkSGtnYjI0Z0pYTXVJRlZ6WlNCaElITjBZWFJwWXlBbklDdGNiaUFnSUNBZ0lDQWdKM0J5YjNCbGNuUjVJSFJ2SUdSbFptbHVaU0J3Y205d1ZIbHdaWE1nYVc1emRHVmhaQzRuTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbWRsZEU1aGJXVW9LU0I4ZkNBbllTQmpiMjF3YjI1bGJuUW5YRzRnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lXbHVjM1F1WTI5dWRHVjRkRlI1Y0dWekxGeHVJQ0FnSUNBZ0lDQW5ZMjl1ZEdWNGRGUjVjR1Z6SUhkaGN5QmtaV1pwYm1Wa0lHRnpJR0Z1SUdsdWMzUmhibU5sSUhCeWIzQmxjblI1SUc5dUlDVnpMaUJWYzJVZ1lTQW5JQ3RjYmlBZ0lDQWdJQ0FnSjNOMFlYUnBZeUJ3Y205d1pYSjBlU0IwYnlCa1pXWnBibVVnWTI5dWRHVjRkRlI1Y0dWeklHbHVjM1JsWVdRdUp5eGNiaUFnSUNBZ0lDQWdkR2hwY3k1blpYUk9ZVzFsS0NrZ2ZId2dKMkVnWTI5dGNHOXVaVzUwSjF4dUlDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJSFI1Y0dWdlppQnBibk4wTG1OdmJYQnZibVZ1ZEZOb2IzVnNaRlZ3WkdGMFpTQWhQVDBnSjJaMWJtTjBhVzl1Snl4Y2JpQWdJQ0FnSUNBZ0p5VnpJR2hoY3lCaElHMWxkR2h2WkNCallXeHNaV1FnSnlBclhHNGdJQ0FnSUNBZ0lDZGpiMjF3YjI1bGJuUlRhRzkxYkdSVmNHUmhkR1VvS1M0Z1JHbGtJSGx2ZFNCdFpXRnVJSE5vYjNWc1pFTnZiWEJ2Ym1WdWRGVndaR0YwWlNncFB5QW5JQ3RjYmlBZ0lDQWdJQ0FnSjFSb1pTQnVZVzFsSUdseklIQm9jbUZ6WldRZ1lYTWdZU0J4ZFdWemRHbHZiaUJpWldOaGRYTmxJSFJvWlNCbWRXNWpkR2x2YmlCcGN5QW5JQ3RjYmlBZ0lDQWdJQ0FnSjJWNGNHVmpkR1ZrSUhSdklISmxkSFZ5YmlCaElIWmhiSFZsTGljc1hHNGdJQ0FnSUNBZ0lDaDBhR2x6TG1kbGRFNWhiV1VvS1NCOGZDQW5RU0JqYjIxd2IyNWxiblFuS1Z4dUlDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCcGJtbDBhV0ZzVTNSaGRHVWdQU0JwYm5OMExuTjBZWFJsTzF4dUlDQWdJR2xtSUNocGJtbDBhV0ZzVTNSaGRHVWdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2FXNXpkQzV6ZEdGMFpTQTlJR2x1YVhScFlXeFRkR0YwWlNBOUlHNTFiR3c3WEc0Z0lDQWdmVnh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCMGVYQmxiMllnYVc1cGRHbGhiRk4wWVhSbElEMDlQU0FuYjJKcVpXTjBKeUFtSmlBaFFYSnlZWGt1YVhOQmNuSmhlU2hwYm1sMGFXRnNVM1JoZEdVcExGeHVJQ0FnSUNBZ0p5VnpMbk4wWVhSbE9pQnRkWE4wSUdKbElITmxkQ0IwYnlCaGJpQnZZbXBsWTNRZ2IzSWdiblZzYkNjc1hHNGdJQ0FnSUNCMGFHbHpMbWRsZEU1aGJXVW9LU0I4ZkNBblVtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblFuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoMGVYQmxiMllnYVc1cGRHbGhiRk4wWVhSbElEMDlQU0FuYjJKcVpXTjBKeUFtSmlBaFFYSnlZWGt1YVhOQmNuSmhlU2hwYm1sMGFXRnNVM1JoZEdVcEtTazdYRzVjYmlBZ0lDQjBhR2x6TGw5d1pXNWthVzVuVTNSaGRHVlJkV1YxWlNBOUlHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1ZmNHVnVaR2x1WjFKbGNHeGhZMlZUZEdGMFpTQTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVYM0JsYm1ScGJtZEdiM0pqWlZWd1pHRjBaU0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdkbUZ5SUdOb2FXeGtRMjl1ZEdWNGREdGNiaUFnSUNCMllYSWdjbVZ1WkdWeVpXUkZiR1Z0Wlc1ME8xeHVYRzRnSUNBZ2RtRnlJSEJ5WlhacGIzVnpiSGxOYjNWdWRHbHVaeUE5SUZKbFlXTjBUR2xtWlVONVkyeGxMbU4xY25KbGJuUnNlVTF2ZFc1MGFXNW5TVzV6ZEdGdVkyVTdYRzRnSUNBZ1VtVmhZM1JNYVdabFEzbGpiR1V1WTNWeWNtVnVkR3g1VFc5MWJuUnBibWRKYm5OMFlXNWpaU0E5SUhSb2FYTTdYRzRnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJR2xtSUNocGJuTjBMbU52YlhCdmJtVnVkRmRwYkd4TmIzVnVkQ2tnZTF4dUlDQWdJQ0FnSUNCcGJuTjBMbU52YlhCdmJtVnVkRmRwYkd4TmIzVnVkQ2dwTzF4dUlDQWdJQ0FnSUNBdkx5QlhhR1Z1SUcxdmRXNTBhVzVuTENCallXeHNjeUIwYnlCZ2MyVjBVM1JoZEdWZ0lHSjVJR0JqYjIxd2IyNWxiblJYYVd4c1RXOTFiblJnSUhkcGJHd2djMlYwWEc0Z0lDQWdJQ0FnSUM4dklHQjBhR2x6TGw5d1pXNWthVzVuVTNSaGRHVlJkV1YxWldBZ2QybDBhRzkxZENCMGNtbG5aMlZ5YVc1bklHRWdjbVV0Y21WdVpHVnlMbHh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTVmY0dWdVpHbHVaMU4wWVhSbFVYVmxkV1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBibk4wTG5OMFlYUmxJRDBnZEdocGN5NWZjSEp2WTJWemMxQmxibVJwYm1kVGRHRjBaU2hwYm5OMExuQnliM0J6TENCcGJuTjBMbU52Ym5SbGVIUXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdOb2FXeGtRMjl1ZEdWNGRDQTlJSFJvYVhNdVgyZGxkRlpoYkdsa1lYUmxaRU5vYVd4a1EyOXVkR1Y0ZENoamIyNTBaWGgwS1R0Y2JpQWdJQ0FnSUhKbGJtUmxjbVZrUld4bGJXVnVkQ0E5SUhSb2FYTXVYM0psYm1SbGNsWmhiR2xrWVhSbFpFTnZiWEJ2Ym1WdWRDaGphR2xzWkVOdmJuUmxlSFFwTzF4dUlDQWdJSDBnWm1sdVlXeHNlU0I3WEc0Z0lDQWdJQ0JTWldGamRFeHBabVZEZVdOc1pTNWpkWEp5Wlc1MGJIbE5iM1Z1ZEdsdVowbHVjM1JoYm1ObElEMGdjSEpsZG1sdmRYTnNlVTF2ZFc1MGFXNW5PMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11WDNKbGJtUmxjbVZrUTI5dGNHOXVaVzUwSUQwZ2RHaHBjeTVmYVc1emRHRnVkR2xoZEdWU1pXRmpkRU52YlhCdmJtVnVkQ2hjYmlBZ0lDQWdJSEpsYm1SbGNtVmtSV3hsYldWdWRDeGNiaUFnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMblI1Y0dVZ0x5OGdWR2hsSUhkeVlYQndhVzVuSUhSNWNHVmNiaUFnSUNBcE8xeHVYRzRnSUNBZ2RtRnlJRzFoY210MWNDQTlJRkpsWVdOMFVtVmpiMjVqYVd4bGNpNXRiM1Z1ZEVOdmJYQnZibVZ1ZENoY2JpQWdJQ0FnSUhSb2FYTXVYM0psYm1SbGNtVmtRMjl0Y0c5dVpXNTBMRnh1SUNBZ0lDQWdjbTl2ZEVsRUxGeHVJQ0FnSUNBZ2RISmhibk5oWTNScGIyNHNYRzRnSUNBZ0lDQjBhR2x6TGw5dFpYSm5aVU5vYVd4a1EyOXVkR1Y0ZENoamIyNTBaWGgwTENCamFHbHNaRU52Ym5SbGVIUXBYRzRnSUNBZ0tUdGNiaUFnSUNCcFppQW9hVzV6ZEM1amIyMXdiMjVsYm5SRWFXUk5iM1Z1ZENrZ2UxeHVJQ0FnSUNBZ2RISmhibk5oWTNScGIyNHVaMlYwVW1WaFkzUk5iM1Z1ZEZKbFlXUjVLQ2t1Wlc1eGRXVjFaU2hwYm5OMExtTnZiWEJ2Ym1WdWRFUnBaRTF2ZFc1MExDQnBibk4wS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdiV0Z5YTNWd08xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWld4bFlYTmxjeUJoYm5rZ2NtVnpiM1Z5WTJWeklHRnNiRzlqWVhSbFpDQmllU0JnYlc5MWJuUkRiMjF3YjI1bGJuUmdMbHh1SUNBZ0tseHVJQ0FnS2lCQVptbHVZV3hjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0IxYm0xdmRXNTBRMjl0Y0c5dVpXNTBPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0IyWVhJZ2FXNXpkQ0E5SUhSb2FYTXVYMmx1YzNSaGJtTmxPMXh1WEc0Z0lDQWdhV1lnS0dsdWMzUXVZMjl0Y0c5dVpXNTBWMmxzYkZWdWJXOTFiblFwSUh0Y2JpQWdJQ0FnSUhaaGNpQndjbVYyYVc5MWMyeDVWVzV0YjNWdWRHbHVaeUE5SUZKbFlXTjBUR2xtWlVONVkyeGxMbU4xY25KbGJuUnNlVlZ1Ylc5MWJuUnBibWRKYm5OMFlXNWpaVHRjYmlBZ0lDQWdJRkpsWVdOMFRHbG1aVU41WTJ4bExtTjFjbkpsYm5Sc2VWVnViVzkxYm5ScGJtZEpibk4wWVc1alpTQTlJSFJvYVhNN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JwYm5OMExtTnZiWEJ2Ym1WdWRGZHBiR3hWYm0xdmRXNTBLQ2s3WEc0Z0lDQWdJQ0I5SUdacGJtRnNiSGtnZTF4dUlDQWdJQ0FnSUNCU1pXRmpkRXhwWm1WRGVXTnNaUzVqZFhKeVpXNTBiSGxWYm0xdmRXNTBhVzVuU1c1emRHRnVZMlVnUFNCd2NtVjJhVzkxYzJ4NVZXNXRiM1Z1ZEdsdVp6dGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCU1pXRmpkRkpsWTI5dVkybHNaWEl1ZFc1dGIzVnVkRU52YlhCdmJtVnVkQ2gwYUdsekxsOXlaVzVrWlhKbFpFTnZiWEJ2Ym1WdWRDazdYRzRnSUNBZ2RHaHBjeTVmY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFNCdWRXeHNPMXh1WEc0Z0lDQWdMeThnVW1WelpYUWdjR1Z1WkdsdVp5Qm1hV1ZzWkhOY2JpQWdJQ0IwYUdsekxsOXdaVzVrYVc1blUzUmhkR1ZSZFdWMVpTQTlJRzUxYkd3N1hHNGdJQ0FnZEdocGN5NWZjR1Z1WkdsdVoxSmxjR3hoWTJWVGRHRjBaU0E5SUdaaGJITmxPMXh1SUNBZ0lIUm9hWE11WDNCbGJtUnBibWRHYjNKalpWVndaR0YwWlNBOUlHWmhiSE5sTzF4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kRFlXeHNZbUZqYTNNZ1BTQnVkV3hzTzF4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kRmJHVnRaVzUwSUQwZ2JuVnNiRHRjYmx4dUlDQWdJQzh2SUZSb1pYTmxJR1pwWld4a2N5QmtieUJ1YjNRZ2NtVmhiR3g1SUc1bFpXUWdkRzhnWW1VZ2NtVnpaWFFnYzJsdVkyVWdkR2hwY3lCdlltcGxZM1FnYVhNZ2JtOWNiaUFnSUNBdkx5QnNiMjVuWlhJZ1lXTmpaWE56YVdKc1pTNWNiaUFnSUNCMGFHbHpMbDlqYjI1MFpYaDBJRDBnYm5Wc2JEdGNiaUFnSUNCMGFHbHpMbDl5YjI5MFRtOWtaVWxFSUQwZ2JuVnNiRHRjYmx4dUlDQWdJQzh2SUVSbGJHVjBaU0IwYUdVZ2NtVm1aWEpsYm1ObElHWnliMjBnZEdobElHbHVjM1JoYm1ObElIUnZJSFJvYVhNZ2FXNTBaWEp1WVd3Z2NtVndjbVZ6Wlc1MFlYUnBiMjVjYmlBZ0lDQXZMeUIzYUdsamFDQmhiR3h2ZHlCMGFHVWdhVzUwWlhKdVlXeHpJSFJ2SUdKbElIQnliM0JsY214NUlHTnNaV0Z1WldRZ2RYQWdaWFpsYmlCcFppQjBhR1VnZFhObGNseHVJQ0FnSUM4dklHeGxZV3R6SUdFZ2NtVm1aWEpsYm1ObElIUnZJSFJvWlNCd2RXSnNhV01nYVc1emRHRnVZMlV1WEc0Z0lDQWdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDNXlaVzF2ZG1Vb2FXNXpkQ2s3WEc1Y2JpQWdJQ0F2THlCVGIyMWxJR1Y0YVhOMGFXNW5JR052YlhCdmJtVnVkSE1nY21Wc2VTQnZiaUJwYm5OMExuQnliM0J6SUdWMlpXNGdZV1owWlhJZ2RHaGxlU2QyWlNCaVpXVnVYRzRnSUNBZ0x5OGdaR1Z6ZEhKdmVXVmtJQ2hwYmlCbGRtVnVkQ0JvWVc1a2JHVnljeWt1WEc0Z0lDQWdMeThnVkU5RVR6b2dhVzV6ZEM1d2NtOXdjeUE5SUc1MWJHdzdYRzRnSUNBZ0x5OGdWRTlFVHpvZ2FXNXpkQzV6ZEdGMFpTQTlJRzUxYkd3N1hHNGdJQ0FnTHk4Z1ZFOUVUem9nYVc1emRDNWpiMjUwWlhoMElEMGdiblZzYkR0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVMk5vWldSMWJHVWdZU0J3WVhKMGFXRnNJSFZ3WkdGMFpTQjBieUIwYUdVZ2NISnZjSE11SUU5dWJIa2dkWE5sWkNCbWIzSWdhVzUwWlhKdVlXd2dkR1Z6ZEdsdVp5NWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSEJoY25ScFlXeFFjbTl3Y3lCVGRXSnpaWFFnYjJZZ2RHaGxJRzVsZUhRZ2NISnZjSE11WEc0Z0lDQXFJRUJ3WVhKaGJTQjdQMloxYm1OMGFXOXVmU0JqWVd4c1ltRmpheUJEWVd4c1pXUWdZV1owWlhJZ2NISnZjSE1nWVhKbElIVndaR0YwWldRdVhHNGdJQ0FxSUVCbWFXNWhiRnh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJRjl6WlhSUWNtOXdjMGx1ZEdWeWJtRnNPaUJtZFc1amRHbHZiaWh3WVhKMGFXRnNVSEp2Y0hNc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ0x5OGdWR2hwY3lCcGN5QmhJR1JsYjNCMGFXMXBlbVZrSUhCaGRHZ3VJRmRsSUc5d2RHbHRhWHBsSUdadmNpQmhiSGRoZVhNZ2FHRjJhVzVuSUdGdUlHVnNaVzFsYm5RdVhHNGdJQ0FnTHk4Z1ZHaHBjeUJqY21WaGRHVnpJR0Z1SUdWNGRISmhJR2x1ZEdWeWJtRnNJR1ZzWlcxbGJuUXVYRzRnSUNBZ2RtRnlJR1ZzWlcxbGJuUWdQU0IwYUdsekxsOXdaVzVrYVc1blJXeGxiV1Z1ZENCOGZDQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQjBhR2x6TGw5d1pXNWthVzVuUld4bGJXVnVkQ0E5SUZKbFlXTjBSV3hsYldWdWRDNWpiRzl1WlVGdVpGSmxjR3hoWTJWUWNtOXdjeWhjYmlBZ0lDQWdJR1ZzWlcxbGJuUXNYRzRnSUNBZ0lDQmhjM05wWjI0b2UzMHNJR1ZzWlcxbGJuUXVjSEp2Y0hNc0lIQmhjblJwWVd4UWNtOXdjeWxjYmlBZ0lDQXBPMXh1SUNBZ0lGSmxZV04wVlhCa1lYUmxjeTVsYm5GMVpYVmxWWEJrWVhSbEtIUm9hWE1zSUdOaGJHeGlZV05yS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSbWxzZEdWeWN5QjBhR1VnWTI5dWRHVjRkQ0J2WW1wbFkzUWdkRzhnYjI1c2VTQmpiMjUwWVdsdUlHdGxlWE1nYzNCbFkybG1hV1ZrSUdsdVhHNGdJQ0FxSUdCamIyNTBaWGgwVkhsd1pYTmdYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JqYjI1MFpYaDBYRzRnSUNBcUlFQnlaWFIxY200Z2V6OXZZbXBsWTNSOVhHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFMMXh1SUNCZmJXRnphME52Ym5SbGVIUTZJR1oxYm1OMGFXOXVLR052Ym5SbGVIUXBJSHRjYmlBZ0lDQjJZWElnYldGemEyVmtRMjl1ZEdWNGRDQTlJRzUxYkd3N1hHNGdJQ0FnTHk4Z1ZHaHBjeUJ5WldGc2JIa2djMmh2ZFd4a0lHSmxJR2RsZEhScGJtY2dkR2hsSUdOdmJYQnZibVZ1ZENCamJHRnpjeUJtYjNJZ2RHaGxJR1ZzWlcxbGJuUXNYRzRnSUNBZ0x5OGdZblYwSUhkbElHdHViM2NnZEdoaGRDQjNaU2R5WlNCdWIzUWdaMjlwYm1jZ2RHOGdibVZsWkNCcGRDQm1iM0lnWW5WcGJIUXRhVzV6TGx4dUlDQWdJR2xtSUNoMGVYQmxiMllnZEdocGN5NWZZM1Z5Y21WdWRFVnNaVzFsYm5RdWRIbHdaU0E5UFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCbGJYQjBlVTlpYW1WamREdGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHTnZiblJsZUhSVWVYQmxjeUE5SUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExuUjVjR1V1WTI5dWRHVjRkRlI1Y0dWek8xeHVJQ0FnSUdsbUlDZ2hZMjl1ZEdWNGRGUjVjR1Z6S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWlcxd2RIbFBZbXBsWTNRN1hHNGdJQ0FnZlZ4dUlDQWdJRzFoYzJ0bFpFTnZiblJsZUhRZ1BTQjdmVHRjYmlBZ0lDQm1iM0lnS0haaGNpQmpiMjUwWlhoMFRtRnRaU0JwYmlCamIyNTBaWGgwVkhsd1pYTXBJSHRjYmlBZ0lDQWdJRzFoYzJ0bFpFTnZiblJsZUhSYlkyOXVkR1Y0ZEU1aGJXVmRJRDBnWTI5dWRHVjRkRnRqYjI1MFpYaDBUbUZ0WlYwN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnRZWE5yWldSRGIyNTBaWGgwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkdhV3gwWlhKeklIUm9aU0JqYjI1MFpYaDBJRzlpYW1WamRDQjBieUJ2Ym14NUlHTnZiblJoYVc0Z2EyVjVjeUJ6Y0dWamFXWnBaV1FnYVc1Y2JpQWdJQ29nWUdOdmJuUmxlSFJVZVhCbGMyQXNJR0Z1WkNCaGMzTmxjblJ6SUhSb1lYUWdkR2hsZVNCaGNtVWdkbUZzYVdRdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQmpiMjUwWlhoMFhHNGdJQ0FxSUVCeVpYUjFjbTRnZXo5dlltcGxZM1I5WEc0Z0lDQXFJRUJ3Y21sMllYUmxYRzRnSUNBcUwxeHVJQ0JmY0hKdlkyVnpjME52Ym5SbGVIUTZJR1oxYm1OMGFXOXVLR052Ym5SbGVIUXBJSHRjYmlBZ0lDQjJZWElnYldGemEyVmtRMjl1ZEdWNGRDQTlJSFJvYVhNdVgyMWhjMnREYjI1MFpYaDBLR052Ym5SbGVIUXBPMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIWmhjaUJEYjIxd2IyNWxiblFnUFNCU1pXRmpkRTVoZEdsMlpVTnZiWEJ2Ym1WdWRDNW5aWFJEYjIxd2IyNWxiblJEYkdGemMwWnZja1ZzWlcxbGJuUW9YRzRnSUNBZ0lDQWdJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJQ0FnYVdZZ0tFTnZiWEJ2Ym1WdWRDNWpiMjUwWlhoMFZIbHdaWE1wSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVmWTJobFkydFFjbTl3Vkhsd1pYTW9YRzRnSUNBZ0lDQWdJQ0FnUTI5dGNHOXVaVzUwTG1OdmJuUmxlSFJVZVhCbGN5eGNiaUFnSUNBZ0lDQWdJQ0J0WVhOclpXUkRiMjUwWlhoMExGeHVJQ0FnSUNBZ0lDQWdJRkpsWVdOMFVISnZjRlI1Y0dWTWIyTmhkR2x2Ym5NdVkyOXVkR1Y0ZEZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdiV0Z6YTJWa1EyOXVkR1Y0ZER0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHTjFjbkpsYm5SRGIyNTBaWGgwWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMjlpYW1WamRIMWNiaUFnSUNvZ1FIQnlhWFpoZEdWY2JpQWdJQ292WEc0Z0lGOW5aWFJXWVd4cFpHRjBaV1JEYUdsc1pFTnZiblJsZUhRNklHWjFibU4wYVc5dUtHTjFjbkpsYm5SRGIyNTBaWGgwS1NCN1hHNGdJQ0FnZG1GeUlHbHVjM1FnUFNCMGFHbHpMbDlwYm5OMFlXNWpaVHRjYmlBZ0lDQjJZWElnWTJocGJHUkRiMjUwWlhoMElEMGdhVzV6ZEM1blpYUkRhR2xzWkVOdmJuUmxlSFFnSmlZZ2FXNXpkQzVuWlhSRGFHbHNaRU52Ym5SbGVIUW9LVHRjYmlBZ0lDQnBaaUFvWTJocGJHUkRiMjUwWlhoMEtTQjdYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQjBlWEJsYjJZZ2FXNXpkQzVqYjI1emRISjFZM1J2Y2k1amFHbHNaRU52Ym5SbGVIUlVlWEJsY3lBOVBUMGdKMjlpYW1WamRDY3NYRzRnSUNBZ0lDQWdJQ2NsY3k1blpYUkRhR2xzWkVOdmJuUmxlSFFvS1RvZ1kyaHBiR1JEYjI1MFpYaDBWSGx3WlhNZ2JYVnpkQ0JpWlNCa1pXWnBibVZrSUdsdUlHOXlaR1Z5SUhSdklDY2dLMXh1SUNBZ0lDQWdJQ0FuZFhObElHZGxkRU5vYVd4a1EyOXVkR1Y0ZENncExpY3NYRzRnSUNBZ0lDQWdJSFJvYVhNdVoyVjBUbUZ0WlNncElIeDhJQ2RTWldGamRFTnZiWEJ2YzJsMFpVTnZiWEJ2Ym1WdWRDZGNiaUFnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvZEhsd1pXOW1JR2x1YzNRdVkyOXVjM1J5ZFdOMGIzSXVZMmhwYkdSRGIyNTBaWGgwVkhsd1pYTWdQVDA5SUNkdlltcGxZM1FuS1NrN1hHNGdJQ0FnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDJOb1pXTnJVSEp2Y0ZSNWNHVnpLRnh1SUNBZ0lDQWdJQ0FnSUdsdWMzUXVZMjl1YzNSeWRXTjBiM0l1WTJocGJHUkRiMjUwWlhoMFZIbHdaWE1zWEc0Z0lDQWdJQ0FnSUNBZ1kyaHBiR1JEYjI1MFpYaDBMRnh1SUNBZ0lDQWdJQ0FnSUZKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJuTXVZMmhwYkdSRGIyNTBaWGgwWEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCbWIzSWdLSFpoY2lCdVlXMWxJR2x1SUdOb2FXeGtRMjl1ZEdWNGRDa2dlMXh1SUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJQ0FnSUc1aGJXVWdhVzRnYVc1emRDNWpiMjV6ZEhKMVkzUnZjaTVqYUdsc1pFTnZiblJsZUhSVWVYQmxjeXhjYmlBZ0lDQWdJQ0FnSUNBbkpYTXVaMlYwUTJocGJHUkRiMjUwWlhoMEtDazZJR3RsZVNCY0lpVnpYQ0lnYVhNZ2JtOTBJR1JsWm1sdVpXUWdhVzRnWTJocGJHUkRiMjUwWlhoMFZIbHdaWE11Snl4Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG1kbGRFNWhiV1VvS1NCOGZDQW5VbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5RbkxGeHVJQ0FnSUNBZ0lDQWdJRzVoYldWY2JpQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2h1WVcxbElHbHVJR2x1YzNRdVkyOXVjM1J5ZFdOMGIzSXVZMmhwYkdSRGIyNTBaWGgwVkhsd1pYTXBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQmphR2xzWkVOdmJuUmxlSFE3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNCOUxGeHVYRzRnSUY5dFpYSm5aVU5vYVd4a1EyOXVkR1Y0ZERvZ1puVnVZM1JwYjI0b1kzVnljbVZ1ZEVOdmJuUmxlSFFzSUdOb2FXeGtRMjl1ZEdWNGRDa2dlMXh1SUNBZ0lHbG1JQ2hqYUdsc1pFTnZiblJsZUhRcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCaGMzTnBaMjRvZTMwc0lHTjFjbkpsYm5SRGIyNTBaWGgwTENCamFHbHNaRU52Ym5SbGVIUXBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWTNWeWNtVnVkRU52Ym5SbGVIUTdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZCeWIyTmxjM05sY3lCd2NtOXdjeUJpZVNCelpYUjBhVzVuSUdSbFptRjFiSFFnZG1Gc2RXVnpJR1p2Y2lCMWJuTndaV05wWm1sbFpDQndjbTl3Y3lCaGJtUmNiaUFnSUNvZ1lYTnpaWEowYVc1bklIUm9ZWFFnZEdobElIQnliM0J6SUdGeVpTQjJZV3hwWkM0Z1JHOWxjeUJ1YjNRZ2JYVjBZWFJsSUdsMGN5QmhjbWQxYldWdWREc2djbVYwZFhKdWMxeHVJQ0FnS2lCaElHNWxkeUJ3Y205d2N5QnZZbXBsWTNRZ2QybDBhQ0JrWldaaGRXeDBjeUJ0WlhKblpXUWdhVzR1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCdVpYZFFjbTl3YzF4dUlDQWdLaUJBY21WMGRYSnVJSHR2WW1wbFkzUjlYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxTDF4dUlDQmZjSEp2WTJWemMxQnliM0J6T2lCbWRXNWpkR2x2YmlodVpYZFFjbTl3Y3lrZ2UxeHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUhaaGNpQkRiMjF3YjI1bGJuUWdQU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEM1blpYUkRiMjF3YjI1bGJuUkRiR0Z6YzBadmNrVnNaVzFsYm5Rb1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdhV1lnS0VOdmJYQnZibVZ1ZEM1d2NtOXdWSGx3WlhNcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZlkyaGxZMnRRY205d1ZIbHdaWE1vWEc0Z0lDQWdJQ0FnSUNBZ1EyOXRjRzl1Wlc1MExuQnliM0JVZVhCbGN5eGNiaUFnSUNBZ0lDQWdJQ0J1WlhkUWNtOXdjeXhjYmlBZ0lDQWdJQ0FnSUNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNXpMbkJ5YjNCY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRzVsZDFCeWIzQnpPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCQmMzTmxjblFnZEdoaGRDQjBhR1VnY0hKdmNITWdZWEpsSUhaaGJHbGtYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J3Y205d1ZIbHdaWE1nVFdGd0lHOW1JSEJ5YjNBZ2JtRnRaU0IwYnlCaElGSmxZV04wVUhKdmNGUjVjR1ZjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlIQnliM0J6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnNiMk5oZEdsdmJpQmxMbWN1SUZ3aWNISnZjRndpTENCY0ltTnZiblJsZUhSY0lpd2dYQ0pqYUdsc1pDQmpiMjUwWlhoMFhDSmNiaUFnSUNvZ1FIQnlhWFpoZEdWY2JpQWdJQ292WEc0Z0lGOWphR1ZqYTFCeWIzQlVlWEJsY3pvZ1puVnVZM1JwYjI0b2NISnZjRlI1Y0dWekxDQndjbTl3Y3l3Z2JHOWpZWFJwYjI0cElIdGNiaUFnSUNBdkx5QlVUMFJQT2lCVGRHOXdJSFpoYkdsa1lYUnBibWNnY0hKdmNDQjBlWEJsY3lCb1pYSmxJR0Z1WkNCdmJteDVJSFZ6WlNCMGFHVWdaV3hsYldWdWRGeHVJQ0FnSUM4dklIWmhiR2xrWVhScGIyNHVYRzRnSUNBZ2RtRnlJR052YlhCdmJtVnVkRTVoYldVZ1BTQjBhR2x6TG1kbGRFNWhiV1VvS1R0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJ3Y205d1RtRnRaU0JwYmlCd2NtOXdWSGx3WlhNcElIdGNiaUFnSUNBZ0lHbG1JQ2h3Y205d1ZIbHdaWE11YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0U1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQmxjbkp2Y2p0Y2JpQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QlVhR2x6SUdseklHbHVkR1Z1ZEdsdmJtRnNiSGtnWVc0Z2FXNTJZWEpwWVc1MElIUm9ZWFFnWjJWMGN5QmpZWFZuYUhRdUlFbDBKM01nZEdobElITmhiV1ZjYmlBZ0lDQWdJQ0FnSUNBdkx5QmlaV2hoZG1sdmNpQmhjeUIzYVhSb2IzVjBJSFJvYVhNZ2MzUmhkR1Z0Wlc1MElHVjRZMlZ3ZENCM2FYUm9JR0VnWW1WMGRHVnlJRzFsYzNOaFoyVXVYRzRnSUNBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1Z2WmlCd2NtOXdWSGx3WlhOYmNISnZjRTVoYldWZElEMDlQU0FuWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKeVZ6T2lBbGN5QjBlWEJsSUdBbGMyQWdhWE1nYVc1MllXeHBaRHNnYVhRZ2JYVnpkQ0JpWlNCaElHWjFibU4wYVc5dUxDQjFjM1ZoYkd4NUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNBZ0oyWnliMjBnVW1WaFkzUXVVSEp2Y0ZSNWNHVnpMaWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjF3YjI1bGJuUk9ZVzFsSUh4OElDZFNaV0ZqZENCamJHRnpjeWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGMxdHNiMk5oZEdsdmJsMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCd2NtOXdUbUZ0WlZ4dUlDQWdJQ0FnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvZEhsd1pXOW1JSEJ5YjNCVWVYQmxjMXR3Y205d1RtRnRaVjBnUFQwOUlDZG1kVzVqZEdsdmJpY3BLVHRjYmlBZ0lDQWdJQ0FnSUNCbGNuSnZjaUE5SUhCeWIzQlVlWEJsYzF0d2NtOXdUbUZ0WlYwb2NISnZjSE1zSUhCeWIzQk9ZVzFsTENCamIyMXdiMjVsYm5ST1lXMWxMQ0JzYjJOaGRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dWNEtTQjdYRzRnSUNBZ0lDQWdJQ0FnWlhKeWIzSWdQU0JsZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnBaaUFvWlhKeWIzSWdhVzV6ZEdGdVkyVnZaaUJGY25KdmNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUM4dklGZGxJRzFoZVNCM1lXNTBJSFJ2SUdWNGRHVnVaQ0IwYUdseklHeHZaMmxqSUdadmNpQnphVzFwYkdGeUlHVnljbTl5Y3lCcGJseHVJQ0FnSUNBZ0lDQWdJQzh2SUZKbFlXTjBMbkpsYm1SbGNpQmpZV3hzY3l3Z2MyOGdTU2R0SUdGaWMzUnlZV04wYVc1bklHbDBJR0YzWVhrZ2FXNTBiMXh1SUNBZ0lDQWdJQ0FnSUM4dklHRWdablZ1WTNScGIyNGdkRzhnYldsdWFXMXBlbVVnY21WbVlXTjBiM0pwYm1jZ2FXNGdkR2hsSUdaMWRIVnlaVnh1SUNBZ0lDQWdJQ0FnSUhaaGNpQmhaR1JsYm1SMWJTQTlJR2RsZEVSbFkyeGhjbUYwYVc5dVJYSnliM0pCWkdSbGJtUjFiU2gwYUdsektUdGNibHh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHNiMk5oZEdsdmJpQTlQVDBnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWN5NXdjbTl3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCUWNtVm1ZV05sSUdkcGRtVnpJSFZ6SUhOdmJXVjBhR2x1WnlCMGJ5QmliR0ZqYTJ4cGMzUWdhVzRnZDJGeWJtbHVaeUJ0YjJSMWJHVmNiaUFnSUNBZ0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSjBaaGFXeGxaQ0JEYjIxd2IzTnBkR1VnY0hKdmNGUjVjR1U2SUNWekpYTW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmxjbkp2Y2k1dFpYTnpZV2RsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JoWkdSbGJtUjFiVnh1SUNBZ0lDQWdJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNkR1lXbHNaV1FnUTI5dWRHVjRkQ0JVZVhCbGN6b2dKWE1sY3ljc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdWeWNtOXlMbTFsYzNOaFoyVXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHRmtaR1Z1WkhWdFhHNGdJQ0FnSUNBZ0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJSEpsWTJWcGRtVkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLRzVsZUhSRmJHVnRaVzUwTENCMGNtRnVjMkZqZEdsdmJpd2dibVY0ZEVOdmJuUmxlSFFwSUh0Y2JpQWdJQ0IyWVhJZ2NISmxka1ZzWlcxbGJuUWdQU0IwYUdsekxsOWpkWEp5Wlc1MFJXeGxiV1Z1ZER0Y2JpQWdJQ0IyWVhJZ2NISmxka052Ym5SbGVIUWdQU0IwYUdsekxsOWpiMjUwWlhoME8xeHVYRzRnSUNBZ2RHaHBjeTVmY0dWdVpHbHVaMFZzWlcxbGJuUWdQU0J1ZFd4c08xeHVYRzRnSUNBZ2RHaHBjeTUxY0dSaGRHVkRiMjF3YjI1bGJuUW9YRzRnSUNBZ0lDQjBjbUZ1YzJGamRHbHZiaXhjYmlBZ0lDQWdJSEJ5WlhaRmJHVnRaVzUwTEZ4dUlDQWdJQ0FnYm1WNGRFVnNaVzFsYm5Rc1hHNGdJQ0FnSUNCd2NtVjJRMjl1ZEdWNGRDeGNiaUFnSUNBZ0lHNWxlSFJEYjI1MFpYaDBYRzRnSUNBZ0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nU1dZZ1lXNTVJRzltSUdCZmNHVnVaR2x1WjBWc1pXMWxiblJnTENCZ1gzQmxibVJwYm1kVGRHRjBaVkYxWlhWbFlDd2diM0lnWUY5d1pXNWthVzVuUm05eVkyVlZjR1JoZEdWZ1hHNGdJQ0FxSUdseklITmxkQ3dnZFhCa1lYUmxJSFJvWlNCamIyMXdiMjVsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0J3WlhKbWIzSnRWWEJrWVhSbFNXWk9aV05sYzNOaGNuazZJR1oxYm1OMGFXOXVLSFJ5WVc1ellXTjBhVzl1S1NCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WDNCbGJtUnBibWRGYkdWdFpXNTBJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJRkpsWVdOMFVtVmpiMjVqYVd4bGNpNXlaV05sYVhabFEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUNBZ0lDQjBhR2x6TEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbDl3Wlc1a2FXNW5SV3hsYldWdWRDQjhmQ0IwYUdsekxsOWpkWEp5Wlc1MFJXeGxiV1Z1ZEN4Y2JpQWdJQ0FnSUNBZ2RISmhibk5oWTNScGIyNHNYRzRnSUNBZ0lDQWdJSFJvYVhNdVgyTnZiblJsZUhSY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tIUm9hWE11WDNCbGJtUnBibWRUZEdGMFpWRjFaWFZsSUNFOVBTQnVkV3hzSUh4OElIUm9hWE11WDNCbGJtUnBibWRHYjNKalpWVndaR0YwWlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0lDQlNaV0ZqZEVWc1pXMWxiblJXWVd4cFpHRjBiM0l1WTJobFkydEJibVJYWVhKdVJtOXlUWFYwWVhSbFpGQnliM0J6S0Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUhSb2FYTXVkWEJrWVhSbFEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUNBZ0lDQjBjbUZ1YzJGamRHbHZiaXhjYmlBZ0lDQWdJQ0FnZEdocGN5NWZZM1Z5Y21WdWRFVnNaVzFsYm5Rc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxsOWpiMjUwWlhoMExGeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5amIyNTBaWGgwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1EyOXRjR0Z5WlNCMGQyOGdZMjl1ZEdWNGRITXNJSGRoY201cGJtY2dhV1lnZEdobGVTQmhjbVVnWkdsbVptVnlaVzUwWEc0Z0lDQXFJRlJQUkU4NklGSmxiVzkyWlNCMGFHbHpJR05vWldOcklIZG9aVzRnYjNkdVpYSXRZMjl1ZEdWNGRDQnBjeUJ5WlcxdmRtVmtYRzRnSUNBcUwxeHVJQ0FnWDNkaGNtNUpaa052Ym5SbGVIUnpSR2xtWm1WeU9pQm1kVzVqZEdsdmJpaHZkMjVsY2tKaGMyVmtRMjl1ZEdWNGRDd2djR0Z5Wlc1MFFtRnpaV1JEYjI1MFpYaDBLU0I3WEc0Z0lDQWdiM2R1WlhKQ1lYTmxaRU52Ym5SbGVIUWdQU0IwYUdsekxsOXRZWE5yUTI5dWRHVjRkQ2h2ZDI1bGNrSmhjMlZrUTI5dWRHVjRkQ2s3WEc0Z0lDQWdjR0Z5Wlc1MFFtRnpaV1JEYjI1MFpYaDBJRDBnZEdocGN5NWZiV0Z6YTBOdmJuUmxlSFFvY0dGeVpXNTBRbUZ6WldSRGIyNTBaWGgwS1R0Y2JpQWdJQ0IyWVhJZ2NHRnlaVzUwUzJWNWN5QTlJRTlpYW1WamRDNXJaWGx6S0hCaGNtVnVkRUpoYzJWa1EyOXVkR1Y0ZENrdWMyOXlkQ2dwTzF4dUlDQWdJSFpoY2lCa2FYTndiR0Y1VG1GdFpTQTlJSFJvYVhNdVoyVjBUbUZ0WlNncElIeDhJQ2RTWldGamRFTnZiWEJ2YzJsMFpVTnZiWEJ2Ym1WdWRDYzdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQndZWEpsYm5STFpYbHpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCMllYSWdhMlY1SUQwZ2NHRnlaVzUwUzJWNWMxdHBYVHRjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQnZkMjVsY2tKaGMyVmtRMjl1ZEdWNGRGdHJaWGxkSUQwOVBTQndZWEpsYm5SQ1lYTmxaRU52Ym5SbGVIUmJhMlY1WFN4Y2JpQWdJQ0FnSUNBZ0oyOTNibVZ5TFdKaGMyVmtJR0Z1WkNCd1lYSmxiblF0WW1GelpXUWdZMjl1ZEdWNGRITWdaR2xtWm1WeUlDY2dJQ3RjYmlBZ0lDQWdJQ0FnSnloMllXeDFaWE02SUdBbGMyQWdkbk1nWUNWellDa2dabTl5SUd0bGVTQW9KWE1wSUhkb2FXeGxJRzF2ZFc1MGFXNW5JQ1Z6SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5LSE5sWlRvZ2FIUjBjRG92TDJaaUxtMWxMM0psWVdOMExXTnZiblJsZUhRdFlua3RjR0Z5Wlc1MEtTY3NYRzRnSUNBZ0lDQWdJRzkzYm1WeVFtRnpaV1JEYjI1MFpYaDBXMnRsZVYwc1hHNGdJQ0FnSUNBZ0lIQmhjbVZ1ZEVKaGMyVmtRMjl1ZEdWNGRGdHJaWGxkTEZ4dUlDQWdJQ0FnSUNCclpYa3NYRzRnSUNBZ0lDQWdJR1JwYzNCc1lYbE9ZVzFsWEc0Z0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCUVpYSm1iM0p0SUdGdUlIVndaR0YwWlNCMGJ5QmhJRzF2ZFc1MFpXUWdZMjl0Y0c5dVpXNTBMaUJVYUdVZ1kyOXRjRzl1Wlc1MFYybHNiRkpsWTJWcGRtVlFjbTl3Y3lCaGJtUmNiaUFnSUNvZ2MyaHZkV3hrUTI5dGNHOXVaVzUwVlhCa1lYUmxJRzFsZEdodlpITWdZWEpsSUdOaGJHeGxaQ3dnZEdobGJpQW9ZWE56ZFcxcGJtY2dkR2hsSUhWd1pHRjBaU0JwYzI0bmRGeHVJQ0FnS2lCemEybHdjR1ZrS1NCMGFHVWdjbVZ0WVdsdWFXNW5JSFZ3WkdGMFpTQnNhV1psWTNsamJHVWdiV1YwYUc5a2N5QmhjbVVnWTJGc2JHVmtJR0Z1WkNCMGFHVWdSRTlOWEc0Z0lDQXFJSEpsY0hKbGMyVnVkR0YwYVc5dUlHbHpJSFZ3WkdGMFpXUXVYRzRnSUNBcVhHNGdJQ0FxSUVKNUlHUmxabUYxYkhRc0lIUm9hWE1nYVcxd2JHVnRaVzUwY3lCU1pXRmpkQ2R6SUhKbGJtUmxjbWx1WnlCaGJtUWdjbVZqYjI1amFXeHBZWFJwYjI0Z1lXeG5iM0pwZEdodExseHVJQ0FnS2lCVGIzQm9hWE4wYVdOaGRHVmtJR05zYVdWdWRITWdiV0Y1SUhkcGMyZ2dkRzhnYjNabGNuSnBaR1VnZEdocGN5NWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVmU0IwY21GdWMyRmpkR2x2Ymx4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFJXeGxiV1Z1ZEgwZ2NISmxkbEJoY21WdWRFVnNaVzFsYm5SY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHNWxlSFJRWVhKbGJuUkZiR1Z0Wlc1MFhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaUJBYjNabGNuSnBaR0ZpYkdWY2JpQWdJQ292WEc0Z0lIVndaR0YwWlVOdmJYQnZibVZ1ZERvZ1puVnVZM1JwYjI0b1hHNGdJQ0FnZEhKaGJuTmhZM1JwYjI0c1hHNGdJQ0FnY0hKbGRsQmhjbVZ1ZEVWc1pXMWxiblFzWEc0Z0lDQWdibVY0ZEZCaGNtVnVkRVZzWlcxbGJuUXNYRzRnSUNBZ2NISmxkbFZ1YldGemEyVmtRMjl1ZEdWNGRDeGNiaUFnSUNCdVpYaDBWVzV0WVhOclpXUkRiMjUwWlhoMFhHNGdJQ2tnZTF4dUlDQWdJSFpoY2lCcGJuTjBJRDBnZEdocGN5NWZhVzV6ZEdGdVkyVTdYRzVjYmlBZ0lDQjJZWElnYm1WNGRFTnZiblJsZUhRZ1BTQnBibk4wTG1OdmJuUmxlSFE3WEc0Z0lDQWdkbUZ5SUc1bGVIUlFjbTl3Y3lBOUlHbHVjM1F1Y0hKdmNITTdYRzVjYmlBZ0lDQXZMeUJFYVhOMGFXNW5kV2x6YUNCaVpYUjNaV1Z1SUdFZ2NISnZjSE1nZFhCa1lYUmxJSFpsY25OMWN5QmhJSE5wYlhCc1pTQnpkR0YwWlNCMWNHUmhkR1ZjYmlBZ0lDQnBaaUFvY0hKbGRsQmhjbVZ1ZEVWc1pXMWxiblFnSVQwOUlHNWxlSFJRWVhKbGJuUkZiR1Z0Wlc1MEtTQjdYRzRnSUNBZ0lDQnVaWGgwUTI5dWRHVjRkQ0E5SUhSb2FYTXVYM0J5YjJObGMzTkRiMjUwWlhoMEtHNWxlSFJRWVhKbGJuUkZiR1Z0Wlc1MExsOWpiMjUwWlhoMEtUdGNiaUFnSUNBZ0lHNWxlSFJRY205d2N5QTlJSFJvYVhNdVgzQnliMk5sYzNOUWNtOXdjeWh1WlhoMFVHRnlaVzUwUld4bGJXVnVkQzV3Y205d2N5azdYRzVjYmlBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHNWxlSFJWYm0xaGMydGxaRU52Ym5SbGVIUWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVYM2RoY201SlprTnZiblJsZUhSelJHbG1abVZ5S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdibVY0ZEZCaGNtVnVkRVZzWlcxbGJuUXVYMk52Ym5SbGVIUXNYRzRnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBWVzV0WVhOclpXUkRiMjUwWlhoMFhHNGdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QkJiaUIxY0dSaGRHVWdhR1Z5WlNCM2FXeHNJSE5qYUdWa2RXeGxJR0Z1SUhWd1pHRjBaU0JpZFhRZ2FXMXRaV1JwWVhSbGJIa2djMlYwWEc0Z0lDQWdJQ0F2THlCZmNHVnVaR2x1WjFOMFlYUmxVWFZsZFdVZ2QyaHBZMmdnZDJsc2JDQmxibk4xY21VZ2RHaGhkQ0JoYm5rZ2MzUmhkR1VnZFhCa1lYUmxjeUJuWlhSelhHNGdJQ0FnSUNBdkx5QnBiVzFsWkdsaGRHVnNlU0J5WldOdmJtTnBiR1ZrSUdsdWMzUmxZV1FnYjJZZ2QyRnBkR2x1WnlCbWIzSWdkR2hsSUc1bGVIUWdZbUYwWTJndVhHNWNiaUFnSUNBZ0lHbG1JQ2hwYm5OMExtTnZiWEJ2Ym1WdWRGZHBiR3hTWldObGFYWmxVSEp2Y0hNcElIdGNiaUFnSUNBZ0lDQWdhVzV6ZEM1amIyMXdiMjVsYm5SWGFXeHNVbVZqWldsMlpWQnliM0J6S0c1bGVIUlFjbTl3Y3l3Z2JtVjRkRU52Ym5SbGVIUXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJ1WlhoMFUzUmhkR1VnUFNCMGFHbHpMbDl3Y205alpYTnpVR1Z1WkdsdVoxTjBZWFJsS0c1bGVIUlFjbTl3Y3l3Z2JtVjRkRU52Ym5SbGVIUXBPMXh1WEc0Z0lDQWdkbUZ5SUhOb2IzVnNaRlZ3WkdGMFpTQTlYRzRnSUNBZ0lDQjBhR2x6TGw5d1pXNWthVzVuUm05eVkyVlZjR1JoZEdVZ2ZIeGNiaUFnSUNBZ0lDRnBibk4wTG5Ob2IzVnNaRU52YlhCdmJtVnVkRlZ3WkdGMFpTQjhmRnh1SUNBZ0lDQWdhVzV6ZEM1emFHOTFiR1JEYjIxd2IyNWxiblJWY0dSaGRHVW9ibVY0ZEZCeWIzQnpMQ0J1WlhoMFUzUmhkR1VzSUc1bGVIUkRiMjUwWlhoMEtUdGNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNCMGVYQmxiMllnYzJodmRXeGtWWEJrWVhSbElDRTlQU0FuZFc1a1pXWnBibVZrSnl4Y2JpQWdJQ0FnSUNBZ0p5VnpMbk5vYjNWc1pFTnZiWEJ2Ym1WdWRGVndaR0YwWlNncE9pQlNaWFIxY201bFpDQjFibVJsWm1sdVpXUWdhVzV6ZEdWaFpDQnZaaUJoSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5ZbTl2YkdWaGJpQjJZV3gxWlM0Z1RXRnJaU0J6ZFhKbElIUnZJSEpsZEhWeWJpQjBjblZsSUc5eUlHWmhiSE5sTGljc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WjJWMFRtRnRaU2dwSUh4OElDZFNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZENkY2JpQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2MyaHZkV3hrVlhCa1lYUmxLU0I3WEc0Z0lDQWdJQ0IwYUdsekxsOXdaVzVrYVc1blJtOXlZMlZWY0dSaGRHVWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDOHZJRmRwYkd3Z2MyVjBJR0IwYUdsekxuQnliM0J6WUN3Z1lIUm9hWE11YzNSaGRHVmdJR0Z1WkNCZ2RHaHBjeTVqYjI1MFpYaDBZQzVjYmlBZ0lDQWdJSFJvYVhNdVgzQmxjbVp2Y20xRGIyMXdiMjVsYm5SVmNHUmhkR1VvWEc0Z0lDQWdJQ0FnSUc1bGVIUlFZWEpsYm5SRmJHVnRaVzUwTEZ4dUlDQWdJQ0FnSUNCdVpYaDBVSEp2Y0hNc1hHNGdJQ0FnSUNBZ0lHNWxlSFJUZEdGMFpTeGNiaUFnSUNBZ0lDQWdibVY0ZEVOdmJuUmxlSFFzWEc0Z0lDQWdJQ0FnSUhSeVlXNXpZV04wYVc5dUxGeHVJQ0FnSUNBZ0lDQnVaWGgwVlc1dFlYTnJaV1JEYjI1MFpYaDBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QkpaaUJwZENkeklHUmxkR1Z5YldsdVpXUWdkR2hoZENCaElHTnZiWEJ2Ym1WdWRDQnphRzkxYkdRZ2JtOTBJSFZ3WkdGMFpTd2dkMlVnYzNScGJHd2dkMkZ1ZEZ4dUlDQWdJQ0FnTHk4Z2RHOGdjMlYwSUhCeWIzQnpJR0Z1WkNCemRHRjBaU0JpZFhRZ2QyVWdjMmh2Y25SamRYUWdkR2hsSUhKbGMzUWdiMllnZEdobElIVndaR0YwWlM1Y2JpQWdJQ0FnSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MElEMGdibVY0ZEZCaGNtVnVkRVZzWlcxbGJuUTdYRzRnSUNBZ0lDQjBhR2x6TGw5amIyNTBaWGgwSUQwZ2JtVjRkRlZ1YldGemEyVmtRMjl1ZEdWNGREdGNiaUFnSUNBZ0lHbHVjM1F1Y0hKdmNITWdQU0J1WlhoMFVISnZjSE03WEc0Z0lDQWdJQ0JwYm5OMExuTjBZWFJsSUQwZ2JtVjRkRk4wWVhSbE8xeHVJQ0FnSUNBZ2FXNXpkQzVqYjI1MFpYaDBJRDBnYm1WNGRFTnZiblJsZUhRN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lGOXdjbTlqWlhOelVHVnVaR2x1WjFOMFlYUmxPaUJtZFc1amRHbHZiaWh3Y205d2N5d2dZMjl1ZEdWNGRDa2dlMXh1SUNBZ0lIWmhjaUJwYm5OMElEMGdkR2hwY3k1ZmFXNXpkR0Z1WTJVN1hHNGdJQ0FnZG1GeUlIRjFaWFZsSUQwZ2RHaHBjeTVmY0dWdVpHbHVaMU4wWVhSbFVYVmxkV1U3WEc0Z0lDQWdkbUZ5SUhKbGNHeGhZMlVnUFNCMGFHbHpMbDl3Wlc1a2FXNW5VbVZ3YkdGalpWTjBZWFJsTzF4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kU1pYQnNZV05sVTNSaGRHVWdQU0JtWVd4elpUdGNiaUFnSUNCMGFHbHpMbDl3Wlc1a2FXNW5VM1JoZEdWUmRXVjFaU0E5SUc1MWJHdzdYRzVjYmlBZ0lDQnBaaUFvSVhGMVpYVmxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhVzV6ZEM1emRHRjBaVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvY21Wd2JHRmpaU0FtSmlCeGRXVjFaUzVzWlc1bmRHZ2dQVDA5SURFcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCeGRXVjFaVnN3WFR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ2JtVjRkRk4wWVhSbElEMGdZWE56YVdkdUtIdDlMQ0J5WlhCc1lXTmxJRDhnY1hWbGRXVmJNRjBnT2lCcGJuTjBMbk4wWVhSbEtUdGNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdjbVZ3YkdGalpTQS9JREVnT2lBd095QnBJRHdnY1hWbGRXVXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUhaaGNpQndZWEowYVdGc0lEMGdjWFZsZFdWYmFWMDdYRzRnSUNBZ0lDQmhjM05wWjI0b1hHNGdJQ0FnSUNBZ0lHNWxlSFJUZEdGMFpTeGNiaUFnSUNBZ0lDQWdkSGx3Wlc5bUlIQmhjblJwWVd3Z1BUMDlJQ2RtZFc1amRHbHZiaWNnUDF4dUlDQWdJQ0FnSUNBZ0lIQmhjblJwWVd3dVkyRnNiQ2hwYm5OMExDQnVaWGgwVTNSaGRHVXNJSEJ5YjNCekxDQmpiMjUwWlhoMEtTQTZYRzRnSUNBZ0lDQWdJQ0FnY0dGeWRHbGhiRnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2JtVjRkRk4wWVhSbE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJOWlhKblpYTWdibVYzSUhCeWIzQnpJR0Z1WkNCemRHRjBaU3dnYm05MGFXWnBaWE1nWkdWc1pXZGhkR1VnYldWMGFHOWtjeUJ2WmlCMWNHUmhkR1VnWVc1a1hHNGdJQ0FxSUhCbGNtWnZjbTF6SUhWd1pHRjBaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJRzVsZUhSRmJHVnRaVzUwSUU1bGVIUWdaV3hsYldWdWRGeHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYm1WNGRGQnliM0J6SUU1bGVIUWdjSFZpYkdsaklHOWlhbVZqZENCMGJ5QnpaWFFnWVhNZ2NISnZjR1Z5ZEdsbGN5NWNiaUFnSUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCdVpYaDBVM1JoZEdVZ1RtVjRkQ0J2WW1wbFkzUWdkRzhnYzJWMElHRnpJSE4wWVhSbExseHVJQ0FnS2lCQWNHRnlZVzBnZXo5dlltcGxZM1I5SUc1bGVIUkRiMjUwWlhoMElFNWxlSFFnY0hWaWJHbGpJRzlpYW1WamRDQjBieUJ6WlhRZ1lYTWdZMjl1ZEdWNGRDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1ZlNCMGNtRnVjMkZqZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnZXo5dlltcGxZM1I5SUhWdWJXRnphMlZrUTI5dWRHVjRkRnh1SUNBZ0tpQkFjSEpwZG1GMFpWeHVJQ0FnS2k5Y2JpQWdYM0JsY21admNtMURiMjF3YjI1bGJuUlZjR1JoZEdVNklHWjFibU4wYVc5dUtGeHVJQ0FnSUc1bGVIUkZiR1Z0Wlc1MExGeHVJQ0FnSUc1bGVIUlFjbTl3Y3l4Y2JpQWdJQ0J1WlhoMFUzUmhkR1VzWEc0Z0lDQWdibVY0ZEVOdmJuUmxlSFFzWEc0Z0lDQWdkSEpoYm5OaFkzUnBiMjRzWEc0Z0lDQWdkVzV0WVhOclpXUkRiMjUwWlhoMFhHNGdJQ2tnZTF4dUlDQWdJSFpoY2lCcGJuTjBJRDBnZEdocGN5NWZhVzV6ZEdGdVkyVTdYRzVjYmlBZ0lDQjJZWElnY0hKbGRsQnliM0J6SUQwZ2FXNXpkQzV3Y205d2N6dGNiaUFnSUNCMllYSWdjSEpsZGxOMFlYUmxJRDBnYVc1emRDNXpkR0YwWlR0Y2JpQWdJQ0IyWVhJZ2NISmxka052Ym5SbGVIUWdQU0JwYm5OMExtTnZiblJsZUhRN1hHNWNiaUFnSUNCcFppQW9hVzV6ZEM1amIyMXdiMjVsYm5SWGFXeHNWWEJrWVhSbEtTQjdYRzRnSUNBZ0lDQnBibk4wTG1OdmJYQnZibVZ1ZEZkcGJHeFZjR1JoZEdVb2JtVjRkRkJ5YjNCekxDQnVaWGgwVTNSaGRHVXNJRzVsZUhSRGIyNTBaWGgwS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFJXeGxiV1Z1ZENBOUlHNWxlSFJGYkdWdFpXNTBPMXh1SUNBZ0lIUm9hWE11WDJOdmJuUmxlSFFnUFNCMWJtMWhjMnRsWkVOdmJuUmxlSFE3WEc0Z0lDQWdhVzV6ZEM1d2NtOXdjeUE5SUc1bGVIUlFjbTl3Y3p0Y2JpQWdJQ0JwYm5OMExuTjBZWFJsSUQwZ2JtVjRkRk4wWVhSbE8xeHVJQ0FnSUdsdWMzUXVZMjl1ZEdWNGRDQTlJRzVsZUhSRGIyNTBaWGgwTzF4dVhHNGdJQ0FnZEdocGN5NWZkWEJrWVhSbFVtVnVaR1Z5WldSRGIyMXdiMjVsYm5Rb2RISmhibk5oWTNScGIyNHNJSFZ1YldGemEyVmtRMjl1ZEdWNGRDazdYRzVjYmlBZ0lDQnBaaUFvYVc1emRDNWpiMjF3YjI1bGJuUkVhV1JWY0dSaGRHVXBJSHRjYmlBZ0lDQWdJSFJ5WVc1ellXTjBhVzl1TG1kbGRGSmxZV04wVFc5MWJuUlNaV0ZrZVNncExtVnVjWFZsZFdVb1hHNGdJQ0FnSUNBZ0lHbHVjM1F1WTI5dGNHOXVaVzUwUkdsa1ZYQmtZWFJsTG1KcGJtUW9hVzV6ZEN3Z2NISmxkbEJ5YjNCekxDQndjbVYyVTNSaGRHVXNJSEJ5WlhaRGIyNTBaWGgwS1N4Y2JpQWdJQ0FnSUNBZ2FXNXpkRnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOaGJHd2dkR2hsSUdOdmJYQnZibVZ1ZENkeklHQnlaVzVrWlhKZ0lHMWxkR2h2WkNCaGJtUWdkWEJrWVhSbElIUm9aU0JFVDAwZ1lXTmpiM0prYVc1bmJIa3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibjBnZEhKaGJuTmhZM1JwYjI1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCZmRYQmtZWFJsVW1WdVpHVnlaV1JEYjIxd2IyNWxiblE2SUdaMWJtTjBhVzl1S0hSeVlXNXpZV04wYVc5dUxDQmpiMjUwWlhoMEtTQjdYRzRnSUNBZ2RtRnlJSEJ5WlhaRGIyMXdiMjVsYm5SSmJuTjBZVzVqWlNBOUlIUm9hWE11WDNKbGJtUmxjbVZrUTI5dGNHOXVaVzUwTzF4dUlDQWdJSFpoY2lCd2NtVjJVbVZ1WkdWeVpXUkZiR1Z0Wlc1MElEMGdjSEpsZGtOdmJYQnZibVZ1ZEVsdWMzUmhibU5sTGw5amRYSnlaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQjJZWElnWTJocGJHUkRiMjUwWlhoMElEMGdkR2hwY3k1ZloyVjBWbUZzYVdSaGRHVmtRMmhwYkdSRGIyNTBaWGgwS0NrN1hHNGdJQ0FnZG1GeUlHNWxlSFJTWlc1a1pYSmxaRVZzWlcxbGJuUWdQU0IwYUdsekxsOXlaVzVrWlhKV1lXeHBaR0YwWldSRGIyMXdiMjVsYm5Rb1kyaHBiR1JEYjI1MFpYaDBLVHRjYmlBZ0lDQnBaaUFvYzJodmRXeGtWWEJrWVhSbFVtVmhZM1JEYjIxd2IyNWxiblFvY0hKbGRsSmxibVJsY21Wa1JXeGxiV1Z1ZEN3Z2JtVjRkRkpsYm1SbGNtVmtSV3hsYldWdWRDa3BJSHRjYmlBZ0lDQWdJRkpsWVdOMFVtVmpiMjVqYVd4bGNpNXlaV05sYVhabFEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUNBZ0lDQndjbVYyUTI5dGNHOXVaVzUwU1c1emRHRnVZMlVzWEc0Z0lDQWdJQ0FnSUc1bGVIUlNaVzVrWlhKbFpFVnNaVzFsYm5Rc1hHNGdJQ0FnSUNBZ0lIUnlZVzV6WVdOMGFXOXVMRnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXRaWEpuWlVOb2FXeGtRMjl1ZEdWNGRDaGpiMjUwWlhoMExDQmphR2xzWkVOdmJuUmxlSFFwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQXZMeUJVYUdWelpTQjBkMjhnU1VSeklHRnlaU0JoWTNSMVlXeHNlU0IwYUdVZ2MyRnRaU0VnUW5WMElHNXZkR2hwYm1jZ2MyaHZkV3hrSUhKbGJIa2diMjRnZEdoaGRDNWNiaUFnSUNBZ0lIWmhjaUIwYUdselNVUWdQU0IwYUdsekxsOXliMjkwVG05a1pVbEVPMXh1SUNBZ0lDQWdkbUZ5SUhCeVpYWkRiMjF3YjI1bGJuUkpSQ0E5SUhCeVpYWkRiMjF3YjI1bGJuUkpibk4wWVc1alpTNWZjbTl2ZEU1dlpHVkpSRHRjYmlBZ0lDQWdJRkpsWVdOMFVtVmpiMjVqYVd4bGNpNTFibTF2ZFc1MFEyOXRjRzl1Wlc1MEtIQnlaWFpEYjIxd2IyNWxiblJKYm5OMFlXNWpaU2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVYM0psYm1SbGNtVmtRMjl0Y0c5dVpXNTBJRDBnZEdocGN5NWZhVzV6ZEdGdWRHbGhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRDaGNiaUFnSUNBZ0lDQWdibVY0ZEZKbGJtUmxjbVZrUld4bGJXVnVkQ3hjYmlBZ0lDQWdJQ0FnZEdocGN5NWZZM1Z5Y21WdWRFVnNaVzFsYm5RdWRIbHdaVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSFpoY2lCdVpYaDBUV0Z5YTNWd0lEMGdVbVZoWTNSU1pXTnZibU5wYkdWeUxtMXZkVzUwUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnSUNCMGFHbHpMbDl5Wlc1a1pYSmxaRU52YlhCdmJtVnVkQ3hjYmlBZ0lDQWdJQ0FnZEdocGMwbEVMRnh1SUNBZ0lDQWdJQ0IwY21GdWMyRmpkR2x2Yml4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVmYldWeVoyVkRhR2xzWkVOdmJuUmxlSFFvWTI5dWRHVjRkQ3dnWTJocGJHUkRiMjUwWlhoMEtWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIUm9hWE11WDNKbGNHeGhZMlZPYjJSbFYybDBhRTFoY210MWNFSjVTVVFvY0hKbGRrTnZiWEJ2Ym1WdWRFbEVMQ0J1WlhoMFRXRnlhM1Z3S1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQndjbTkwWldOMFpXUmNiaUFnSUNvdlhHNGdJRjl5WlhCc1lXTmxUbTlrWlZkcGRHaE5ZWEpyZFhCQ2VVbEVPaUJtZFc1amRHbHZiaWh3Y21WMlEyOXRjRzl1Wlc1MFNVUXNJRzVsZUhSTllYSnJkWEFwSUh0Y2JpQWdJQ0JTWldGamRFTnZiWEJ2Ym1WdWRFVnVkbWx5YjI1dFpXNTBMbkpsY0d4aFkyVk9iMlJsVjJsMGFFMWhjbXQxY0VKNVNVUW9YRzRnSUNBZ0lDQndjbVYyUTI5dGNHOXVaVzUwU1VRc1hHNGdJQ0FnSUNCdVpYaDBUV0Z5YTNWd1hHNGdJQ0FnS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJ5YjNSbFkzUmxaRnh1SUNBZ0tpOWNiaUFnWDNKbGJtUmxjbFpoYkdsa1lYUmxaRU52YlhCdmJtVnVkRmRwZEdodmRYUlBkMjVsY2s5eVEyOXVkR1Y0ZERvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2RtRnlJR2x1YzNRZ1BTQjBhR2x6TGw5cGJuTjBZVzVqWlR0Y2JpQWdJQ0IyWVhJZ2NtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BTQnBibk4wTG5KbGJtUmxjaWdwTzF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQzh2SUZkbElHRnNiRzkzSUdGMWRHOHRiVzlqYTNNZ2RHOGdjSEp2WTJWbFpDQmhjeUJwWmlCMGFHVjVKM0psSUhKbGRIVnlibWx1WnlCdWRXeHNMbHh1SUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ5Wlc1a1pYSmxaRU52YlhCdmJtVnVkQ0E5UFQwZ0ozVnVaR1ZtYVc1bFpDY2dKaVpjYmlBZ0lDQWdJQ0FnSUNCcGJuTjBMbkpsYm1SbGNpNWZhWE5OYjJOclJuVnVZM1JwYjI0cElIdGNiaUFnSUNBZ0lDQWdMeThnVkdocGN5QnBjeUJ3Y205aVlXSnNlU0JpWVdRZ2NISmhZM1JwWTJVdUlFTnZibk5wWkdWeUlIZGhjbTVwYm1jZ2FHVnlaU0JoYm1SY2JpQWdJQ0FnSUNBZ0x5OGdaR1Z3Y21WallYUnBibWNnZEdocGN5QmpiMjUyWlc1cFpXNWpaUzVjYmlBZ0lDQWdJQ0FnY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFNCdWRXeHNPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCeVpXNWtaWEpsWkVOdmJYQnZibVZ1ZER0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJ5YVhaaGRHVmNiaUFnSUNvdlhHNGdJRjl5Wlc1a1pYSldZV3hwWkdGMFpXUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLR05vYVd4a1EyOXVkR1Y0ZENrZ2UxeHVJQ0FnSUhaaGNpQnlaVzVrWlhKbFpFTnZiWEJ2Ym1WdWREdGNiaUFnSUNCMllYSWdjSEpsZG1sdmRYTkRiMjUwWlhoMElEMGdVbVZoWTNSRGIyNTBaWGgwTG1OMWNuSmxiblE3WEc0Z0lDQWdVbVZoWTNSRGIyNTBaWGgwTG1OMWNuSmxiblFnUFNCMGFHbHpMbDl0WlhKblpVTm9hV3hrUTI5dWRHVjRkQ2hjYmlBZ0lDQWdJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTGw5amIyNTBaWGgwTEZ4dUlDQWdJQ0FnWTJocGJHUkRiMjUwWlhoMFhHNGdJQ0FnS1R0Y2JpQWdJQ0JTWldGamRFTjFjbkpsYm5SUGQyNWxjaTVqZFhKeVpXNTBJRDBnZEdocGN6dGNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdjbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUWdQVnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXlaVzVrWlhKV1lXeHBaR0YwWldSRGIyMXdiMjVsYm5SWGFYUm9iM1YwVDNkdVpYSlBja052Ym5SbGVIUW9LVHRjYmlBZ0lDQjlJR1pwYm1Gc2JIa2dlMXh1SUNBZ0lDQWdVbVZoWTNSRGIyNTBaWGgwTG1OMWNuSmxiblFnUFNCd2NtVjJhVzkxYzBOdmJuUmxlSFE3WEc0Z0lDQWdJQ0JTWldGamRFTjFjbkpsYm5SUGQyNWxjaTVqZFhKeVpXNTBJRDBnYm5Wc2JEdGNiaUFnSUNCOVhHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQzh2SUZSUFJFODZJRUZ1SUdCcGMxWmhiR2xrVG05a1pXQWdablZ1WTNScGIyNGdkMjkxYkdRZ2NISnZZbUZpYkhrZ1ltVWdiVzl5WlNCaGNIQnliM0J5YVdGMFpWeHVJQ0FnSUNBZ2NtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BUMDlJRzUxYkd3Z2ZId2djbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUWdQVDA5SUdaaGJITmxJSHg4WEc0Z0lDQWdJQ0JTWldGamRFVnNaVzFsYm5RdWFYTldZV3hwWkVWc1pXMWxiblFvY21WdVpHVnlaV1JEYjIxd2IyNWxiblFwTEZ4dUlDQWdJQ0FnSnlWekxuSmxibVJsY2lncE9pQkJJSFpoYkdsa0lGSmxZV04wUTI5dGNHOXVaVzUwSUcxMWMzUWdZbVVnY21WMGRYSnVaV1F1SUZsdmRTQnRZWGtnYUdGMlpTQW5JQ3RjYmlBZ0lDQWdJQ0FnSjNKbGRIVnlibVZrSUhWdVpHVm1hVzVsWkN3Z1lXNGdZWEp5WVhrZ2IzSWdjMjl0WlNCdmRHaGxjaUJwYm5aaGJHbGtJRzlpYW1WamRDNG5MRnh1SUNBZ0lDQWdkR2hwY3k1blpYUk9ZVzFsS0NrZ2ZId2dKMUpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1MEoxeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9MeThnVkU5RVR6b2dRVzRnWUdselZtRnNhV1JPYjJSbFlDQm1kVzVqZEdsdmJpQjNiM1ZzWkNCd2NtOWlZV0pzZVNCaVpTQnRiM0psSUdGd2NISnZjSEpwWVhSbFhHNGdJQ0FnY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFQwOUlHNTFiR3dnZkh3Z2NtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BUMDlJR1poYkhObElIeDhYRzRnSUNBZ1VtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtISmxibVJsY21Wa1EyOXRjRzl1Wlc1MEtTa3BPMXh1SUNBZ0lISmxkSFZ5YmlCeVpXNWtaWEpsWkVOdmJYQnZibVZ1ZER0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUR0Y2YVd4NUlHRnNiRzlqWVhSbGN5QjBhR1VnY21WbWN5QnZZbXBsWTNRZ1lXNWtJSE4wYjNKbGN5QmdZMjl0Y0c5dVpXNTBZQ0JoY3lCZ2NtVm1ZQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhKbFppQlNaV1psY21WdVkyVWdibUZ0WlM1Y2JpQWdJQ29nUUhCaGNtRnRJSHRqYjIxd2IyNWxiblI5SUdOdmJYQnZibVZ1ZENCRGIyMXdiMjVsYm5RZ2RHOGdjM1J2Y21VZ1lYTWdZSEpsWm1BdVhHNGdJQ0FxSUVCbWFXNWhiRnh1SUNBZ0tpQkFjSEpwZG1GMFpWeHVJQ0FnS2k5Y2JpQWdZWFIwWVdOb1VtVm1PaUJtZFc1amRHbHZiaWh5WldZc0lHTnZiWEJ2Ym1WdWRDa2dlMXh1SUNBZ0lIWmhjaUJwYm5OMElEMGdkR2hwY3k1blpYUlFkV0pzYVdOSmJuTjBZVzVqWlNncE8xeHVJQ0FnSUhaaGNpQnlaV1p6SUQwZ2FXNXpkQzV5WldaeklEMDlQU0JsYlhCMGVVOWlhbVZqZENBL0lDaHBibk4wTG5KbFpuTWdQU0I3ZlNrZ09pQnBibk4wTG5KbFpuTTdYRzRnSUNBZ2NtVm1jMXR5WldaZElEMGdZMjl0Y0c5dVpXNTBMbWRsZEZCMVlteHBZMGx1YzNSaGJtTmxLQ2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFUmxkR0ZqYUdWeklHRWdjbVZtWlhKbGJtTmxJRzVoYldVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnlaV1lnVG1GdFpTQjBieUJrWlhKbFptVnlaVzVqWlM1Y2JpQWdJQ29nUUdacGJtRnNYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxTDF4dUlDQmtaWFJoWTJoU1pXWTZJR1oxYm1OMGFXOXVLSEpsWmlrZ2UxeHVJQ0FnSUhaaGNpQnlaV1p6SUQwZ2RHaHBjeTVuWlhSUWRXSnNhV05KYm5OMFlXNWpaU2dwTG5KbFpuTTdYRzRnSUNBZ1pHVnNaWFJsSUhKbFpuTmJjbVZtWFR0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSMlYwSUdFZ2RHVjRkQ0JrWlhOamNtbHdkR2x2YmlCdlppQjBhR1VnWTI5dGNHOXVaVzUwSUhSb1lYUWdZMkZ1SUdKbElIVnpaV1FnZEc4Z2FXUmxiblJwWm5rZ2FYUmNiaUFnSUNvZ2FXNGdaWEp5YjNJZ2JXVnpjMkZuWlhNdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnVkdobElHNWhiV1VnYjNJZ2JuVnNiQzVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JuWlhST1lXMWxPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0IyWVhJZ2RIbHdaU0E5SUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExuUjVjR1U3WEc0Z0lDQWdkbUZ5SUdOdmJuTjBjblZqZEc5eUlEMGdkR2hwY3k1ZmFXNXpkR0Z1WTJVZ0ppWWdkR2hwY3k1ZmFXNXpkR0Z1WTJVdVkyOXVjM1J5ZFdOMGIzSTdYRzRnSUNBZ2NtVjBkWEp1SUNoY2JpQWdJQ0FnSUhSNWNHVXVaR2x6Y0d4aGVVNWhiV1VnZkh3Z0tHTnZibk4wY25WamRHOXlJQ1ltSUdOdmJuTjBjblZqZEc5eUxtUnBjM0JzWVhsT1lXMWxLU0I4ZkZ4dUlDQWdJQ0FnZEhsd1pTNXVZVzFsSUh4OElDaGpiMjV6ZEhKMVkzUnZjaUFtSmlCamIyNXpkSEoxWTNSdmNpNXVZVzFsS1NCOGZGeHVJQ0FnSUNBZ2JuVnNiRnh1SUNBZ0lDazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVkbGRDQjBhR1VnY0hWaWJHbGpiSGtnWVdOalpYTnphV0pzWlNCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJR052YlhCdmJtVnVkQ0F0SUdrdVpTNGdkMmhoZEZ4dUlDQWdLaUJwY3lCbGVIQnZjMlZrSUdKNUlISmxabk1nWVc1a0lISmxkSFZ5Ym1Wa0lHSjVJRkpsWVdOMExuSmxibVJsY2k0Z1EyRnVJR0psSUc1MWJHd2dabTl5SUhOMFlYUmxiR1Z6YzF4dUlDQWdLaUJqYjIxd2IyNWxiblJ6TGx4dUlDQWdLbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ2RHaGxJSEIxWW14cFl5QmpiMjF3YjI1bGJuUWdhVzV6ZEdGdVkyVXVYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaMlYwVUhWaWJHbGpTVzV6ZEdGdVkyVTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5cGJuTjBZVzVqWlR0Y2JpQWdmU3hjYmx4dUlDQXZMeUJUZEhWaVhHNGdJRjlwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBPaUJ1ZFd4c1hHNWNibjA3WEc1Y2JsSmxZV04wVUdWeVppNXRaV0Z6ZFhKbFRXVjBhRzlrY3loY2JpQWdVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5STmFYaHBiaXhjYmlBZ0oxSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwSnl4Y2JpQWdlMXh1SUNBZ0lHMXZkVzUwUTI5dGNHOXVaVzUwT2lBbmJXOTFiblJEYjIxd2IyNWxiblFuTEZ4dUlDQWdJSFZ3WkdGMFpVTnZiWEJ2Ym1WdWREb2dKM1Z3WkdGMFpVTnZiWEJ2Ym1WdWRDY3NYRzRnSUNBZ1gzSmxibVJsY2xaaGJHbGtZWFJsWkVOdmJYQnZibVZ1ZERvZ0oxOXlaVzVrWlhKV1lXeHBaR0YwWldSRGIyMXdiMjVsYm5RblhHNGdJSDFjYmlrN1hHNWNiblpoY2lCU1pXRmpkRU52YlhCdmMybDBaVU52YlhCdmJtVnVkQ0E5SUh0Y2JseHVJQ0JOYVhocGJqb2dVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5STmFYaHBibHh1WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1ME8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbnRleHRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZShcIi4vZW1wdHlPYmplY3RcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBkaWRXYXJuID0gZmFsc2U7XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgY29udGV4dC5cbiAqXG4gKiBUaGUgY29udGV4dCBpcyBhdXRvbWF0aWNhbGx5IHBhc3NlZCBkb3duIHRoZSBjb21wb25lbnQgb3duZXJzaGlwIGhpZXJhcmNoeVxuICogYW5kIGlzIGFjY2Vzc2libGUgdmlhIGB0aGlzLmNvbnRleHRgIG9uIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50cy5cbiAqL1xudmFyIFJlYWN0Q29udGV4dCA9IHtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqL1xuICBjdXJyZW50OiBlbXB0eU9iamVjdCxcblxuICAvKipcbiAgICogVGVtcG9yYXJpbHkgZXh0ZW5kcyB0aGUgY3VycmVudCBjb250ZXh0IHdoaWxlIGV4ZWN1dGluZyBzY29wZWRDYWxsYmFjay5cbiAgICpcbiAgICogQSB0eXBpY2FsIHVzZSBjYXNlIG1pZ2h0IGxvb2sgbGlrZVxuICAgKlxuICAgKiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICogICAgdmFyIGNoaWxkcmVuID0gUmVhY3RDb250ZXh0LndpdGhDb250ZXh0KHtmb286ICdmb28nfSwgKCkgPT4gKFxuICAgKlxuICAgKiAgICApKTtcbiAgICogICAgcmV0dXJuIDxkaXY+e2NoaWxkcmVufTwvZGl2PjtcbiAgICogIH1cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0NvbnRleHQgTmV3IGNvbnRleHQgdG8gbWVyZ2UgaW50byB0aGUgZXhpc3RpbmcgY29udGV4dFxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBzY29wZWRDYWxsYmFjayBDYWxsYmFjayB0byBydW4gd2l0aCB0aGUgbmV3IGNvbnRleHRcbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR8YXJyYXk8UmVhY3RDb21wb25lbnQ+fVxuICAgKi9cbiAgd2l0aENvbnRleHQ6IGZ1bmN0aW9uKG5ld0NvbnRleHQsIHNjb3BlZENhbGxiYWNrKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIGRpZFdhcm4sXG4gICAgICAgICd3aXRoQ29udGV4dCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gJyArXG4gICAgICAgICdVc2UgYSB3cmFwcGVyIGNvbXBvbmVudCB3aXRoIGdldENoaWxkQ29udGV4dCBpbnN0ZWFkLidcbiAgICAgICkgOiBudWxsKTtcblxuICAgICAgZGlkV2FybiA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdDtcbiAgICB2YXIgcHJldmlvdXNDb250ZXh0ID0gUmVhY3RDb250ZXh0LmN1cnJlbnQ7XG4gICAgUmVhY3RDb250ZXh0LmN1cnJlbnQgPSBhc3NpZ24oe30sIHByZXZpb3VzQ29udGV4dCwgbmV3Q29udGV4dCk7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IHNjb3BlZENhbGxiYWNrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q29udGV4dC5jdXJyZW50ID0gcHJldmlvdXNDb250ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb250ZXh0O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkRiMjUwWlhoMExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRU52Ym5SbGVIUmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJoYzNOcFoyNGdQU0J5WlhGMWFYSmxLRndpTGk5UFltcGxZM1F1WVhOemFXZHVYQ0lwTzF4dWRtRnlJR1Z0Y0hSNVQySnFaV04wSUQwZ2NtVnhkV2x5WlNoY0lpNHZaVzF3ZEhsUFltcGxZM1JjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQmthV1JYWVhKdUlEMGdabUZzYzJVN1hHNWNiaThxS2x4dUlDb2dTMlZsY0hNZ2RISmhZMnNnYjJZZ2RHaGxJR04xY25KbGJuUWdZMjl1ZEdWNGRDNWNiaUFxWEc0Z0tpQlVhR1VnWTI5dWRHVjRkQ0JwY3lCaGRYUnZiV0YwYVdOaGJHeDVJSEJoYzNObFpDQmtiM2R1SUhSb1pTQmpiMjF3YjI1bGJuUWdiM2R1WlhKemFHbHdJR2hwWlhKaGNtTm9lVnh1SUNvZ1lXNWtJR2x6SUdGalkyVnpjMmxpYkdVZ2RtbGhJR0IwYUdsekxtTnZiblJsZUhSZ0lHOXVJRkpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1MGN5NWNiaUFxTDF4dWRtRnlJRkpsWVdOMFEyOXVkR1Y0ZENBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxSUVCMGVYQmxJSHR2WW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0JqZFhKeVpXNTBPaUJsYlhCMGVVOWlhbVZqZEN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVkdWdGNHOXlZWEpwYkhrZ1pYaDBaVzVrY3lCMGFHVWdZM1Z5Y21WdWRDQmpiMjUwWlhoMElIZG9hV3hsSUdWNFpXTjFkR2x1WnlCelkyOXdaV1JEWVd4c1ltRmpheTVjYmlBZ0lDcGNiaUFnSUNvZ1FTQjBlWEJwWTJGc0lIVnpaU0JqWVhObElHMXBaMmgwSUd4dmIyc2diR2xyWlZ4dUlDQWdLbHh1SUNBZ0tpQWdjbVZ1WkdWeU9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDb2dJQ0FnZG1GeUlHTm9hV3hrY21WdUlEMGdVbVZoWTNSRGIyNTBaWGgwTG5kcGRHaERiMjUwWlhoMEtIdG1iMjg2SUNkbWIyOG5mU3dnS0NrZ1BUNGdLRnh1SUNBZ0tseHVJQ0FnS2lBZ0lDQXBLVHRjYmlBZ0lDb2dJQ0FnY21WMGRYSnVJRHhrYVhZK2UyTm9hV3hrY21WdWZUd3ZaR2wyUGp0Y2JpQWdJQ29nSUgxY2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHNWxkME52Ym5SbGVIUWdUbVYzSUdOdmJuUmxlSFFnZEc4Z2JXVnlaMlVnYVc1MGJ5QjBhR1VnWlhocGMzUnBibWNnWTI5dWRHVjRkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQnpZMjl3WldSRFlXeHNZbUZqYXlCRFlXeHNZbUZqYXlCMGJ5QnlkVzRnZDJsMGFDQjBhR1VnYm1WM0lHTnZiblJsZUhSY2JpQWdJQ29nUUhKbGRIVnliaUI3VW1WaFkzUkRiMjF3YjI1bGJuUjhZWEp5WVhrOFVtVmhZM1JEYjIxd2IyNWxiblErZlZ4dUlDQWdLaTljYmlBZ2QybDBhRU52Ym5SbGVIUTZJR1oxYm1OMGFXOXVLRzVsZDBOdmJuUmxlSFFzSUhOamIzQmxaRU5oYkd4aVlXTnJLU0I3WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lHUnBaRmRoY200c1hHNGdJQ0FnSUNBZ0lDZDNhWFJvUTI5dWRHVjRkQ0JwY3lCa1pYQnlaV05oZEdWa0lHRnVaQ0IzYVd4c0lHSmxJSEpsYlc5MlpXUWdhVzRnWVNCbWRYUjFjbVVnZG1WeWMybHZiaTRnSnlBclhHNGdJQ0FnSUNBZ0lDZFZjMlVnWVNCM2NtRndjR1Z5SUdOdmJYQnZibVZ1ZENCM2FYUm9JR2RsZEVOb2FXeGtRMjl1ZEdWNGRDQnBibk4wWldGa0xpZGNiaUFnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNibHh1SUNBZ0lDQWdaR2xrVjJGeWJpQTlJSFJ5ZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZG1GeUlISmxjM1ZzZER0Y2JpQWdJQ0IyWVhJZ2NISmxkbWx2ZFhORGIyNTBaWGgwSUQwZ1VtVmhZM1JEYjI1MFpYaDBMbU4xY25KbGJuUTdYRzRnSUNBZ1VtVmhZM1JEYjI1MFpYaDBMbU4xY25KbGJuUWdQU0JoYzNOcFoyNG9lMzBzSUhCeVpYWnBiM1Z6UTI5dWRHVjRkQ3dnYm1WM1EyOXVkR1Y0ZENrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lISmxjM1ZzZENBOUlITmpiM0JsWkVOaGJHeGlZV05yS0NrN1hHNGdJQ0FnZlNCbWFXNWhiR3g1SUh0Y2JpQWdJQ0FnSUZKbFlXTjBRMjl1ZEdWNGRDNWpkWEp5Wlc1MElEMGdjSEpsZG1sdmRYTkRiMjUwWlhoME8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVJQ0I5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkRiMjUwWlhoME8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q3VycmVudE93bmVyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqXG4gKiBUaGUgZGVwdGggaW5kaWNhdGUgaG93IG1hbnkgY29tcG9zaXRlIGNvbXBvbmVudHMgYXJlIGFib3ZlIHRoaXMgcmVuZGVyIGxldmVsLlxuICovXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSB7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDdXJyZW50T3duZXI7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3JcIik7XG5cbnZhciBtYXBPYmplY3QgPSByZXF1aXJlKFwiLi9tYXBPYmplY3RcIik7XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgSFRNTCB0YWcgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUYWcgbmFtZSAoZS5nLiBgZGl2YCkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVET01GYWN0b3J5KHRhZykge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5KHRhZyk7XG4gIH1cbiAgcmV0dXJuIFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KHRhZyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcHBpbmcgZnJvbSBzdXBwb3J0ZWQgSFRNTCB0YWdzIHRvIGBSZWFjdERPTUNvbXBvbmVudGAgY2xhc3Nlcy5cbiAqIFRoaXMgaXMgYWxzbyBhY2Nlc3NpYmxlIHZpYSBgUmVhY3QuRE9NYC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbnZhciBSZWFjdERPTSA9IG1hcE9iamVjdCh7XG4gIGE6ICdhJyxcbiAgYWJicjogJ2FiYnInLFxuICBhZGRyZXNzOiAnYWRkcmVzcycsXG4gIGFyZWE6ICdhcmVhJyxcbiAgYXJ0aWNsZTogJ2FydGljbGUnLFxuICBhc2lkZTogJ2FzaWRlJyxcbiAgYXVkaW86ICdhdWRpbycsXG4gIGI6ICdiJyxcbiAgYmFzZTogJ2Jhc2UnLFxuICBiZGk6ICdiZGknLFxuICBiZG86ICdiZG8nLFxuICBiaWc6ICdiaWcnLFxuICBibG9ja3F1b3RlOiAnYmxvY2txdW90ZScsXG4gIGJvZHk6ICdib2R5JyxcbiAgYnI6ICdicicsXG4gIGJ1dHRvbjogJ2J1dHRvbicsXG4gIGNhbnZhczogJ2NhbnZhcycsXG4gIGNhcHRpb246ICdjYXB0aW9uJyxcbiAgY2l0ZTogJ2NpdGUnLFxuICBjb2RlOiAnY29kZScsXG4gIGNvbDogJ2NvbCcsXG4gIGNvbGdyb3VwOiAnY29sZ3JvdXAnLFxuICBkYXRhOiAnZGF0YScsXG4gIGRhdGFsaXN0OiAnZGF0YWxpc3QnLFxuICBkZDogJ2RkJyxcbiAgZGVsOiAnZGVsJyxcbiAgZGV0YWlsczogJ2RldGFpbHMnLFxuICBkZm46ICdkZm4nLFxuICBkaWFsb2c6ICdkaWFsb2cnLFxuICBkaXY6ICdkaXYnLFxuICBkbDogJ2RsJyxcbiAgZHQ6ICdkdCcsXG4gIGVtOiAnZW0nLFxuICBlbWJlZDogJ2VtYmVkJyxcbiAgZmllbGRzZXQ6ICdmaWVsZHNldCcsXG4gIGZpZ2NhcHRpb246ICdmaWdjYXB0aW9uJyxcbiAgZmlndXJlOiAnZmlndXJlJyxcbiAgZm9vdGVyOiAnZm9vdGVyJyxcbiAgZm9ybTogJ2Zvcm0nLFxuICBoMTogJ2gxJyxcbiAgaDI6ICdoMicsXG4gIGgzOiAnaDMnLFxuICBoNDogJ2g0JyxcbiAgaDU6ICdoNScsXG4gIGg2OiAnaDYnLFxuICBoZWFkOiAnaGVhZCcsXG4gIGhlYWRlcjogJ2hlYWRlcicsXG4gIGhyOiAnaHInLFxuICBodG1sOiAnaHRtbCcsXG4gIGk6ICdpJyxcbiAgaWZyYW1lOiAnaWZyYW1lJyxcbiAgaW1nOiAnaW1nJyxcbiAgaW5wdXQ6ICdpbnB1dCcsXG4gIGluczogJ2lucycsXG4gIGtiZDogJ2tiZCcsXG4gIGtleWdlbjogJ2tleWdlbicsXG4gIGxhYmVsOiAnbGFiZWwnLFxuICBsZWdlbmQ6ICdsZWdlbmQnLFxuICBsaTogJ2xpJyxcbiAgbGluazogJ2xpbmsnLFxuICBtYWluOiAnbWFpbicsXG4gIG1hcDogJ21hcCcsXG4gIG1hcms6ICdtYXJrJyxcbiAgbWVudTogJ21lbnUnLFxuICBtZW51aXRlbTogJ21lbnVpdGVtJyxcbiAgbWV0YTogJ21ldGEnLFxuICBtZXRlcjogJ21ldGVyJyxcbiAgbmF2OiAnbmF2JyxcbiAgbm9zY3JpcHQ6ICdub3NjcmlwdCcsXG4gIG9iamVjdDogJ29iamVjdCcsXG4gIG9sOiAnb2wnLFxuICBvcHRncm91cDogJ29wdGdyb3VwJyxcbiAgb3B0aW9uOiAnb3B0aW9uJyxcbiAgb3V0cHV0OiAnb3V0cHV0JyxcbiAgcDogJ3AnLFxuICBwYXJhbTogJ3BhcmFtJyxcbiAgcGljdHVyZTogJ3BpY3R1cmUnLFxuICBwcmU6ICdwcmUnLFxuICBwcm9ncmVzczogJ3Byb2dyZXNzJyxcbiAgcTogJ3EnLFxuICBycDogJ3JwJyxcbiAgcnQ6ICdydCcsXG4gIHJ1Ynk6ICdydWJ5JyxcbiAgczogJ3MnLFxuICBzYW1wOiAnc2FtcCcsXG4gIHNjcmlwdDogJ3NjcmlwdCcsXG4gIHNlY3Rpb246ICdzZWN0aW9uJyxcbiAgc2VsZWN0OiAnc2VsZWN0JyxcbiAgc21hbGw6ICdzbWFsbCcsXG4gIHNvdXJjZTogJ3NvdXJjZScsXG4gIHNwYW46ICdzcGFuJyxcbiAgc3Ryb25nOiAnc3Ryb25nJyxcbiAgc3R5bGU6ICdzdHlsZScsXG4gIHN1YjogJ3N1YicsXG4gIHN1bW1hcnk6ICdzdW1tYXJ5JyxcbiAgc3VwOiAnc3VwJyxcbiAgdGFibGU6ICd0YWJsZScsXG4gIHRib2R5OiAndGJvZHknLFxuICB0ZDogJ3RkJyxcbiAgdGV4dGFyZWE6ICd0ZXh0YXJlYScsXG4gIHRmb290OiAndGZvb3QnLFxuICB0aDogJ3RoJyxcbiAgdGhlYWQ6ICd0aGVhZCcsXG4gIHRpbWU6ICd0aW1lJyxcbiAgdGl0bGU6ICd0aXRsZScsXG4gIHRyOiAndHInLFxuICB0cmFjazogJ3RyYWNrJyxcbiAgdTogJ3UnLFxuICB1bDogJ3VsJyxcbiAgJ3Zhcic6ICd2YXInLFxuICB2aWRlbzogJ3ZpZGVvJyxcbiAgd2JyOiAnd2JyJyxcblxuICAvLyBTVkdcbiAgY2lyY2xlOiAnY2lyY2xlJyxcbiAgY2xpcFBhdGg6ICdjbGlwUGF0aCcsXG4gIGRlZnM6ICdkZWZzJyxcbiAgZWxsaXBzZTogJ2VsbGlwc2UnLFxuICBnOiAnZycsXG4gIGxpbmU6ICdsaW5lJyxcbiAgbGluZWFyR3JhZGllbnQ6ICdsaW5lYXJHcmFkaWVudCcsXG4gIG1hc2s6ICdtYXNrJyxcbiAgcGF0aDogJ3BhdGgnLFxuICBwYXR0ZXJuOiAncGF0dGVybicsXG4gIHBvbHlnb246ICdwb2x5Z29uJyxcbiAgcG9seWxpbmU6ICdwb2x5bGluZScsXG4gIHJhZGlhbEdyYWRpZW50OiAncmFkaWFsR3JhZGllbnQnLFxuICByZWN0OiAncmVjdCcsXG4gIHN0b3A6ICdzdG9wJyxcbiAgc3ZnOiAnc3ZnJyxcbiAgdGV4dDogJ3RleHQnLFxuICB0c3BhbjogJ3RzcGFuJ1xuXG59LCBjcmVhdGVET01GYWN0b3J5KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JFVDAwdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRVJQVFZ4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eVhDSXBPMXh1WEc1MllYSWdiV0Z3VDJKcVpXTjBJRDBnY21WeGRXbHlaU2hjSWk0dmJXRndUMkpxWldOMFhDSXBPMXh1WEc0dktpcGNiaUFxSUVOeVpXRjBaU0JoSUdaaFkzUnZjbmtnZEdoaGRDQmpjbVZoZEdWeklFaFVUVXdnZEdGbklHVnNaVzFsYm5SekxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMFlXY2dWR0ZuSUc1aGJXVWdLR1V1Wnk0Z1lHUnBkbUFwTGx4dUlDb2dRSEJ5YVhaaGRHVmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1kzSmxZWFJsUkU5TlJtRmpkRzl5ZVNoMFlXY3BJSHRjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJTWldGamRFVnNaVzFsYm5SV1lXeHBaR0YwYjNJdVkzSmxZWFJsUm1GamRHOXllU2gwWVdjcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCU1pXRmpkRVZzWlcxbGJuUXVZM0psWVhSbFJtRmpkRzl5ZVNoMFlXY3BPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQnRZWEJ3YVc1bklHWnliMjBnYzNWd2NHOXlkR1ZrSUVoVVRVd2dkR0ZuY3lCMGJ5QmdVbVZoWTNSRVQwMURiMjF3YjI1bGJuUmdJR05zWVhOelpYTXVYRzRnS2lCVWFHbHpJR2x6SUdGc2MyOGdZV05qWlhOemFXSnNaU0IyYVdFZ1lGSmxZV04wTGtSUFRXQXVYRzRnS2x4dUlDb2dRSEIxWW14cFkxeHVJQ292WEc1MllYSWdVbVZoWTNSRVQwMGdQU0J0WVhCUFltcGxZM1FvZTF4dUlDQmhPaUFuWVNjc1hHNGdJR0ZpWW5JNklDZGhZbUp5Snl4Y2JpQWdZV1JrY21WemN6b2dKMkZrWkhKbGMzTW5MRnh1SUNCaGNtVmhPaUFuWVhKbFlTY3NYRzRnSUdGeWRHbGpiR1U2SUNkaGNuUnBZMnhsSnl4Y2JpQWdZWE5wWkdVNklDZGhjMmxrWlNjc1hHNGdJR0YxWkdsdk9pQW5ZWFZrYVc4bkxGeHVJQ0JpT2lBbllpY3NYRzRnSUdKaGMyVTZJQ2RpWVhObEp5eGNiaUFnWW1ScE9pQW5ZbVJwSnl4Y2JpQWdZbVJ2T2lBblltUnZKeXhjYmlBZ1ltbG5PaUFuWW1sbkp5eGNiaUFnWW14dlkydHhkVzkwWlRvZ0oySnNiMk5yY1hWdmRHVW5MRnh1SUNCaWIyUjVPaUFuWW05a2VTY3NYRzRnSUdKeU9pQW5ZbkluTEZ4dUlDQmlkWFIwYjI0NklDZGlkWFIwYjI0bkxGeHVJQ0JqWVc1MllYTTZJQ2RqWVc1MllYTW5MRnh1SUNCallYQjBhVzl1T2lBblkyRndkR2x2Ymljc1hHNGdJR05wZEdVNklDZGphWFJsSnl4Y2JpQWdZMjlrWlRvZ0oyTnZaR1VuTEZ4dUlDQmpiMnc2SUNkamIyd25MRnh1SUNCamIyeG5jbTkxY0RvZ0oyTnZiR2R5YjNWd0p5eGNiaUFnWkdGMFlUb2dKMlJoZEdFbkxGeHVJQ0JrWVhSaGJHbHpkRG9nSjJSaGRHRnNhWE4wSnl4Y2JpQWdaR1E2SUNka1pDY3NYRzRnSUdSbGJEb2dKMlJsYkNjc1hHNGdJR1JsZEdGcGJITTZJQ2RrWlhSaGFXeHpKeXhjYmlBZ1pHWnVPaUFuWkdadUp5eGNiaUFnWkdsaGJHOW5PaUFuWkdsaGJHOW5KeXhjYmlBZ1pHbDJPaUFuWkdsMkp5eGNiaUFnWkd3NklDZGtiQ2NzWEc0Z0lHUjBPaUFuWkhRbkxGeHVJQ0JsYlRvZ0oyVnRKeXhjYmlBZ1pXMWlaV1E2SUNkbGJXSmxaQ2NzWEc0Z0lHWnBaV3hrYzJWME9pQW5abWxsYkdSelpYUW5MRnh1SUNCbWFXZGpZWEIwYVc5dU9pQW5abWxuWTJGd2RHbHZiaWNzWEc0Z0lHWnBaM1Z5WlRvZ0oyWnBaM1Z5WlNjc1hHNGdJR1p2YjNSbGNqb2dKMlp2YjNSbGNpY3NYRzRnSUdadmNtMDZJQ2RtYjNKdEp5eGNiaUFnYURFNklDZG9NU2NzWEc0Z0lHZ3lPaUFuYURJbkxGeHVJQ0JvTXpvZ0oyZ3pKeXhjYmlBZ2FEUTZJQ2RvTkNjc1hHNGdJR2cxT2lBbmFEVW5MRnh1SUNCb05qb2dKMmcySnl4Y2JpQWdhR1ZoWkRvZ0oyaGxZV1FuTEZ4dUlDQm9aV0ZrWlhJNklDZG9aV0ZrWlhJbkxGeHVJQ0JvY2pvZ0oyaHlKeXhjYmlBZ2FIUnRiRG9nSjJoMGJXd25MRnh1SUNCcE9pQW5hU2NzWEc0Z0lHbG1jbUZ0WlRvZ0oybG1jbUZ0WlNjc1hHNGdJR2x0WnpvZ0oybHRaeWNzWEc0Z0lHbHVjSFYwT2lBbmFXNXdkWFFuTEZ4dUlDQnBibk02SUNkcGJuTW5MRnh1SUNCclltUTZJQ2RyWW1RbkxGeHVJQ0JyWlhsblpXNDZJQ2RyWlhsblpXNG5MRnh1SUNCc1lXSmxiRG9nSjJ4aFltVnNKeXhjYmlBZ2JHVm5aVzVrT2lBbmJHVm5aVzVrSnl4Y2JpQWdiR2s2SUNkc2FTY3NYRzRnSUd4cGJtczZJQ2RzYVc1ckp5eGNiaUFnYldGcGJqb2dKMjFoYVc0bkxGeHVJQ0J0WVhBNklDZHRZWEFuTEZ4dUlDQnRZWEpyT2lBbmJXRnlheWNzWEc0Z0lHMWxiblU2SUNkdFpXNTFKeXhjYmlBZ2JXVnVkV2wwWlcwNklDZHRaVzUxYVhSbGJTY3NYRzRnSUcxbGRHRTZJQ2R0WlhSaEp5eGNiaUFnYldWMFpYSTZJQ2R0WlhSbGNpY3NYRzRnSUc1aGRqb2dKMjVoZGljc1hHNGdJRzV2YzJOeWFYQjBPaUFuYm05elkzSnBjSFFuTEZ4dUlDQnZZbXBsWTNRNklDZHZZbXBsWTNRbkxGeHVJQ0J2YkRvZ0oyOXNKeXhjYmlBZ2IzQjBaM0p2ZFhBNklDZHZjSFJuY205MWNDY3NYRzRnSUc5d2RHbHZiam9nSjI5d2RHbHZiaWNzWEc0Z0lHOTFkSEIxZERvZ0oyOTFkSEIxZENjc1hHNGdJSEE2SUNkd0p5eGNiaUFnY0dGeVlXMDZJQ2R3WVhKaGJTY3NYRzRnSUhCcFkzUjFjbVU2SUNkd2FXTjBkWEpsSnl4Y2JpQWdjSEpsT2lBbmNISmxKeXhjYmlBZ2NISnZaM0psYzNNNklDZHdjbTluY21WemN5Y3NYRzRnSUhFNklDZHhKeXhjYmlBZ2NuQTZJQ2R5Y0Njc1hHNGdJSEowT2lBbmNuUW5MRnh1SUNCeWRXSjVPaUFuY25WaWVTY3NYRzRnSUhNNklDZHpKeXhjYmlBZ2MyRnRjRG9nSjNOaGJYQW5MRnh1SUNCelkzSnBjSFE2SUNkelkzSnBjSFFuTEZ4dUlDQnpaV04wYVc5dU9pQW5jMlZqZEdsdmJpY3NYRzRnSUhObGJHVmpkRG9nSjNObGJHVmpkQ2NzWEc0Z0lITnRZV3hzT2lBbmMyMWhiR3duTEZ4dUlDQnpiM1Z5WTJVNklDZHpiM1Z5WTJVbkxGeHVJQ0J6Y0dGdU9pQW5jM0JoYmljc1hHNGdJSE4wY205dVp6b2dKM04wY205dVp5Y3NYRzRnSUhOMGVXeGxPaUFuYzNSNWJHVW5MRnh1SUNCemRXSTZJQ2R6ZFdJbkxGeHVJQ0J6ZFcxdFlYSjVPaUFuYzNWdGJXRnllU2NzWEc0Z0lITjFjRG9nSjNOMWNDY3NYRzRnSUhSaFlteGxPaUFuZEdGaWJHVW5MRnh1SUNCMFltOWtlVG9nSjNSaWIyUjVKeXhjYmlBZ2RHUTZJQ2QwWkNjc1hHNGdJSFJsZUhSaGNtVmhPaUFuZEdWNGRHRnlaV0VuTEZ4dUlDQjBabTl2ZERvZ0ozUm1iMjkwSnl4Y2JpQWdkR2c2SUNkMGFDY3NYRzRnSUhSb1pXRmtPaUFuZEdobFlXUW5MRnh1SUNCMGFXMWxPaUFuZEdsdFpTY3NYRzRnSUhScGRHeGxPaUFuZEdsMGJHVW5MRnh1SUNCMGNqb2dKM1J5Snl4Y2JpQWdkSEpoWTJzNklDZDBjbUZqYXljc1hHNGdJSFU2SUNkMUp5eGNiaUFnZFd3NklDZDFiQ2NzWEc0Z0lDZDJZWEluT2lBbmRtRnlKeXhjYmlBZ2RtbGtaVzg2SUNkMmFXUmxieWNzWEc0Z0lIZGljam9nSjNkaWNpY3NYRzVjYmlBZ0x5OGdVMVpIWEc0Z0lHTnBjbU5zWlRvZ0oyTnBjbU5zWlNjc1hHNGdJR05zYVhCUVlYUm9PaUFuWTJ4cGNGQmhkR2duTEZ4dUlDQmtaV1p6T2lBblpHVm1jeWNzWEc0Z0lHVnNiR2x3YzJVNklDZGxiR3hwY0hObEp5eGNiaUFnWnpvZ0oyY25MRnh1SUNCc2FXNWxPaUFuYkdsdVpTY3NYRzRnSUd4cGJtVmhja2R5WVdScFpXNTBPaUFuYkdsdVpXRnlSM0poWkdsbGJuUW5MRnh1SUNCdFlYTnJPaUFuYldGemF5Y3NYRzRnSUhCaGRHZzZJQ2R3WVhSb0p5eGNiaUFnY0dGMGRHVnliam9nSjNCaGRIUmxjbTRuTEZ4dUlDQndiMng1WjI5dU9pQW5jRzlzZVdkdmJpY3NYRzRnSUhCdmJIbHNhVzVsT2lBbmNHOXNlV3hwYm1VbkxGeHVJQ0J5WVdScFlXeEhjbUZrYVdWdWREb2dKM0poWkdsaGJFZHlZV1JwWlc1MEp5eGNiaUFnY21WamREb2dKM0psWTNRbkxGeHVJQ0J6ZEc5d09pQW5jM1J2Y0Njc1hHNGdJSE4yWnpvZ0ozTjJaeWNzWEc0Z0lIUmxlSFE2SUNkMFpYaDBKeXhjYmlBZ2RITndZVzQ2SUNkMGMzQmhiaWRjYmx4dWZTd2dZM0psWVhSbFJFOU5SbUZqZEc5eWVTazdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkVUMDA3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01CdXR0b25cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBBdXRvRm9jdXNNaXhpbiA9IHJlcXVpcmUoXCIuL0F1dG9Gb2N1c01peGluXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIga2V5TWlycm9yID0gcmVxdWlyZShcIi4va2V5TWlycm9yXCIpO1xuXG52YXIgYnV0dG9uID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkoJ2J1dHRvbicpO1xuXG52YXIgbW91c2VMaXN0ZW5lck5hbWVzID0ga2V5TWlycm9yKHtcbiAgb25DbGljazogdHJ1ZSxcbiAgb25Eb3VibGVDbGljazogdHJ1ZSxcbiAgb25Nb3VzZURvd246IHRydWUsXG4gIG9uTW91c2VNb3ZlOiB0cnVlLFxuICBvbk1vdXNlVXA6IHRydWUsXG4gIG9uQ2xpY2tDYXB0dXJlOiB0cnVlLFxuICBvbkRvdWJsZUNsaWNrQ2FwdHVyZTogdHJ1ZSxcbiAgb25Nb3VzZURvd25DYXB0dXJlOiB0cnVlLFxuICBvbk1vdXNlTW92ZUNhcHR1cmU6IHRydWUsXG4gIG9uTW91c2VVcENhcHR1cmU6IHRydWVcbn0pO1xuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8YnV0dG9uPiBuYXRpdmUgY29tcG9uZW50IHRoYXQgZG9lcyBub3QgcmVjZWl2ZSBtb3VzZSBldmVudHNcbiAqIHdoZW4gYGRpc2FibGVkYCBpcyBzZXQuXG4gKi9cbnZhciBSZWFjdERPTUJ1dHRvbiA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NQnV0dG9uJyxcbiAgdGFnTmFtZTogJ0JVVFRPTicsXG5cbiAgbWl4aW5zOiBbQXV0b0ZvY3VzTWl4aW4sIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwcm9wcyA9IHt9O1xuXG4gICAgLy8gQ29weSB0aGUgcHJvcHM7IGV4Y2VwdCB0aGUgbW91c2UgbGlzdGVuZXJzIGlmIHdlJ3JlIGRpc2FibGVkXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KGtleSkgJiZcbiAgICAgICAgICAoIXRoaXMucHJvcHMuZGlzYWJsZWQgfHwgIW1vdXNlTGlzdGVuZXJOYW1lc1trZXldKSkge1xuICAgICAgICBwcm9wc1trZXldID0gdGhpcy5wcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBidXR0b24ocHJvcHMsIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICB9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NQnV0dG9uO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUNvbXBvbmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4vKiBnbG9iYWwgaGFzT3duUHJvcGVydHk6dHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXCIpO1xudmFyIFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50ID1cbiAgcmVxdWlyZShcIi4vUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnRcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RNdWx0aUNoaWxkID0gcmVxdWlyZShcIi4vUmVhY3RNdWx0aUNoaWxkXCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyID0gcmVxdWlyZShcIi4vZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciBpc0V2ZW50U3VwcG9ydGVkID0gcmVxdWlyZShcIi4vaXNFdmVudFN1cHBvcnRlZFwiKTtcbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgZGVsZXRlTGlzdGVuZXIgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuZGVsZXRlTGlzdGVuZXI7XG52YXIgbGlzdGVuVG8gPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIubGlzdGVuVG87XG52YXIgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM7XG5cbi8vIEZvciBxdWlja2x5IG1hdGNoaW5nIGNoaWxkcmVuIHR5cGUsIHRvIHRlc3QgaWYgY2FuIGJlIHRyZWF0ZWQgYXMgY29udGVudC5cbnZhciBDT05URU5UX1RZUEVTID0geydzdHJpbmcnOiB0cnVlLCAnbnVtYmVyJzogdHJ1ZX07XG5cbnZhciBTVFlMRSA9IGtleU9mKHtzdHlsZTogbnVsbH0pO1xuXG52YXIgRUxFTUVOVF9OT0RFX1RZUEUgPSAxO1xuXG4vKipcbiAqIE9wdGlvbmFsbHkgaW5qZWN0YWJsZSBvcGVyYXRpb25zIGZvciBtdXRhdGluZyB0aGUgRE9NXG4gKi9cbnZhciBCYWNrZW5kSURPcGVyYXRpb25zID0gbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0gez9vYmplY3R9IHByb3BzXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUHJvcHMocHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBOb3RlIHRoZSB1c2Ugb2YgYD09YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBwcm9wcy5jaGlsZHJlbiA9PSBudWxsLFxuICAgICAgJ0NhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLidcbiAgICApIDogaW52YXJpYW50KHByb3BzLmNoaWxkcmVuID09IG51bGwpKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ19faHRtbCcgaW4gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsXG4gICAgICAnYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gJyArXG4gICAgICAnUGxlYXNlIHZpc2l0IGh0dHBzOi8vZmIubWUvcmVhY3QtaW52YXJpYW50LWRhbmdlcm91c2x5LXNldC1pbm5lci1odG1sICcgK1xuICAgICAgJ2ZvciBtb3JlIGluZm9ybWF0aW9uLidcbiAgICApIDogaW52YXJpYW50KHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiZcbiAgICAnX19odG1sJyBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCkpO1xuICB9XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIHByb3BzLmlubmVySFRNTCA9PSBudWxsLFxuICAgICAgJ0RpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyArXG4gICAgICAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIGxvb2t1cCBkb2N1bWVudGF0aW9uIG9uIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuJ1xuICAgICkgOiBudWxsKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICFwcm9wcy5jb250ZW50RWRpdGFibGUgfHwgcHJvcHMuY2hpbGRyZW4gPT0gbnVsbCxcbiAgICAgICdBIGNvbXBvbmVudCBpcyBgY29udGVudEVkaXRhYmxlYCBhbmQgY29udGFpbnMgYGNoaWxkcmVuYCBtYW5hZ2VkIGJ5ICcgK1xuICAgICAgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgK1xuICAgICAgJ3Rob3NlIG5vZGVzIGFyZSB1bmV4cGVjdGVkbHkgbW9kaWZpZWQgb3IgZHVwbGljYXRlZC4gVGhpcyBpcyAnICtcbiAgICAgICdwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuJ1xuICAgICkgOiBudWxsKTtcbiAgfVxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JyxcbiAgICAnVGhlIGBzdHlsZWAgcHJvcCBleHBlY3RzIGEgbWFwcGluZyBmcm9tIHN0eWxlIHByb3BlcnRpZXMgdG8gdmFsdWVzLCAnICtcbiAgICAnbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArIFxcJ2VtXFwnfX0gd2hlbiAnICtcbiAgICAndXNpbmcgSlNYLidcbiAgKSA6IGludmFyaWFudChwcm9wcy5zdHlsZSA9PSBudWxsIHx8IHR5cGVvZiBwcm9wcy5zdHlsZSA9PT0gJ29iamVjdCcpKTtcbn1cblxuZnVuY3Rpb24gcHV0TGlzdGVuZXIoaWQsIHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyLCB0cmFuc2FjdGlvbikge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgLy8gSUU4IGhhcyBubyBBUEkgZm9yIGV2ZW50IGNhcHR1cmluZyBhbmQgdGhlIGBvblNjcm9sbGAgZXZlbnQgZG9lc24ndFxuICAgIC8vIGJ1YmJsZS5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgIT09ICdvblNjcm9sbCcgfHwgaXNFdmVudFN1cHBvcnRlZCgnc2Nyb2xsJywgdHJ1ZSksXG4gICAgICAnVGhpcyBicm93c2VyIGRvZXNuXFwndCBzdXBwb3J0IHRoZSBgb25TY3JvbGxgIGV2ZW50J1xuICAgICkgOiBudWxsKTtcbiAgfVxuICB2YXIgY29udGFpbmVyID0gUmVhY3RNb3VudC5maW5kUmVhY3RDb250YWluZXJGb3JJRChpZCk7XG4gIGlmIChjb250YWluZXIpIHtcbiAgICB2YXIgZG9jID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSA/XG4gICAgICBjb250YWluZXIub3duZXJEb2N1bWVudCA6XG4gICAgICBjb250YWluZXI7XG4gICAgbGlzdGVuVG8ocmVnaXN0cmF0aW9uTmFtZSwgZG9jKTtcbiAgfVxuICB0cmFuc2FjdGlvbi5nZXRQdXRMaXN0ZW5lclF1ZXVlKCkuZW5xdWV1ZVB1dExpc3RlbmVyKFxuICAgIGlkLFxuICAgIHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgbGlzdGVuZXJcbiAgKTtcbn1cblxuLy8gRm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtlZXAgYSB3aGl0ZWxpc3QgZm9yXG4vLyB0aG9zZSBzcGVjaWFsIGNhc2VkIHRhZ3MuXG5cbnZhciBvbWl0dGVkQ2xvc2VUYWdzID0ge1xuICAnYXJlYSc6IHRydWUsXG4gICdiYXNlJzogdHJ1ZSxcbiAgJ2JyJzogdHJ1ZSxcbiAgJ2NvbCc6IHRydWUsXG4gICdlbWJlZCc6IHRydWUsXG4gICdocic6IHRydWUsXG4gICdpbWcnOiB0cnVlLFxuICAnaW5wdXQnOiB0cnVlLFxuICAna2V5Z2VuJzogdHJ1ZSxcbiAgJ2xpbmsnOiB0cnVlLFxuICAnbWV0YSc6IHRydWUsXG4gICdwYXJhbSc6IHRydWUsXG4gICdzb3VyY2UnOiB0cnVlLFxuICAndHJhY2snOiB0cnVlLFxuICAnd2JyJzogdHJ1ZVxuICAvLyBOT1RFOiBtZW51aXRlbSdzIGNsb3NlIHRhZyBzaG91bGQgYmUgb21pdHRlZCwgYnV0IHRoYXQgY2F1c2VzIHByb2JsZW1zLlxufTtcblxuLy8gV2UgYWNjZXB0IGFueSB0YWcgdG8gYmUgcmVuZGVyZWQgYnV0IHNpbmNlIHRoaXMgZ2V0cyBpbmplY3RlZCBpbnRvIGFiaXRyYXJ5XG4vLyBIVE1MLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGl0J3MgYSBzYWZlIHRhZy5cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVcblxudmFyIFZBTElEX1RBR19SRUdFWCA9IC9eW2EtekEtWl1bYS16QS1aOl9cXC5cXC1cXGRdKiQvOyAvLyBTaW1wbGlmaWVkIHN1YnNldFxudmFyIHZhbGlkYXRlZFRhZ0NhY2hlID0ge307XG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gdmFsaWRhdGVEYW5nZXJvdXNUYWcodGFnKSB7XG4gIGlmICghaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0ZWRUYWdDYWNoZSwgdGFnKSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoVkFMSURfVEFHX1JFR0VYLnRlc3QodGFnKSwgJ0ludmFsaWQgdGFnOiAlcycsIHRhZykgOiBpbnZhcmlhbnQoVkFMSURfVEFHX1JFR0VYLnRlc3QodGFnKSkpO1xuICAgIHZhbGlkYXRlZFRhZ0NhY2hlW3RhZ10gPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBSZWFjdCBjbGFzcyB0aGF0IGlzIGlkZW1wb3RlbnQgYW5kIGNhcGFibGUgb2YgY29udGFpbmluZyBvdGhlclxuICogUmVhY3QgY29tcG9uZW50cy4gSXQgYWNjZXB0cyBldmVudCBsaXN0ZW5lcnMgYW5kIERPTSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiB2YWxpZCBhY2NvcmRpbmcgdG8gYERPTVByb3BlcnR5YC5cbiAqXG4gKiAgLSBFdmVudCBsaXN0ZW5lcnM6IGBvbkNsaWNrYCwgYG9uTW91c2VEb3duYCwgZXRjLlxuICogIC0gRE9NIHByb3BlcnRpZXM6IGBjbGFzc05hbWVgLCBgbmFtZWAsIGB0aXRsZWAsIGV0Yy5cbiAqXG4gKiBUaGUgYHN0eWxlYCBwcm9wZXJ0eSBmdW5jdGlvbnMgZGlmZmVyZW50bHkgZnJvbSB0aGUgRE9NIEFQSS4gSXQgYWNjZXB0cyBhblxuICogb2JqZWN0IG1hcHBpbmcgb2Ygc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yIFJlYWN0RE9NQ29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFjdE11bHRpQ2hpbGRcbiAqL1xuZnVuY3Rpb24gUmVhY3RET01Db21wb25lbnQodGFnKSB7XG4gIHZhbGlkYXRlRGFuZ2Vyb3VzVGFnKHRhZyk7XG4gIHRoaXMuX3RhZyA9IHRhZztcbiAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG51bGw7XG4gIHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gbnVsbDtcbiAgdGhpcy5fcm9vdE5vZGVJRCA9IG51bGw7XG59XG5cblJlYWN0RE9NQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gJ1JlYWN0RE9NQ29tcG9uZW50JztcblxuUmVhY3RET01Db21wb25lbnQuTWl4aW4gPSB7XG5cbiAgY29uc3RydWN0OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgcm9vdCB0YWcgbWFya3VwIHRoZW4gcmVjdXJzZXMuIFRoaXMgbWV0aG9kIGhhcyBzaWRlIGVmZmVjdHMgYW5kXG4gICAqIGlzIG5vdCBpZGVtcG90ZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBUaGUgcm9vdCBET00gSUQgZm9yIHRoaXMgbm9kZS5cbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbXB1dGVkIG1hcmt1cC5cbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbihyb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IHJvb3RJRDtcbiAgICBhc3NlcnRWYWxpZFByb3BzKHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzKTtcbiAgICB2YXIgY2xvc2VUYWcgPSBvbWl0dGVkQ2xvc2VUYWdzW3RoaXMuX3RhZ10gPyAnJyA6ICc8LycgKyB0aGlzLl90YWcgKyAnPic7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2NyZWF0ZU9wZW5UYWdNYXJrdXBBbmRQdXRMaXN0ZW5lcnModHJhbnNhY3Rpb24pICtcbiAgICAgIHRoaXMuX2NyZWF0ZUNvbnRlbnRNYXJrdXAodHJhbnNhY3Rpb24sIGNvbnRleHQpICtcbiAgICAgIGNsb3NlVGFnXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIHRoZSBvcGVuIHRhZyBhbmQgYWxsIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGhhcyBzaWRlIGVmZmVjdHMgYmVjYXVzZSBldmVudHMgZ2V0IHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEl0ZXJhdGluZyBvdmVyIG9iamVjdCBwcm9wZXJ0aWVzIGlzIGZhc3RlciB0aGFuIGl0ZXJhdGluZyBvdmVyIGFycmF5cy5cbiAgICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9vYmotdnMtYXJyLWl0ZXJhdGlvblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7c3RyaW5nfSBNYXJrdXAgb2Ygb3BlbmluZyB0YWcuXG4gICAqL1xuICBfY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3RlbmVyczogZnVuY3Rpb24odHJhbnNhY3Rpb24pIHtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztcbiAgICB2YXIgcmV0ID0gJzwnICsgdGhpcy5fdGFnO1xuXG4gICAgZm9yICh2YXIgcHJvcEtleSBpbiBwcm9wcykge1xuICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcbiAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBwdXRMaXN0ZW5lcih0aGlzLl9yb290Tm9kZUlELCBwcm9wS2V5LCBwcm9wVmFsdWUsIHRyYW5zYWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICAgIGlmIChwcm9wVmFsdWUpIHtcbiAgICAgICAgICAgIHByb3BWYWx1ZSA9IHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gYXNzaWduKHt9LCBwcm9wcy5zdHlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb3BWYWx1ZSA9IENTU1Byb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JTdHlsZXMocHJvcFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWFya3VwID1cbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuY3JlYXRlTWFya3VwRm9yUHJvcGVydHkocHJvcEtleSwgcHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKG1hcmt1cCkge1xuICAgICAgICAgIHJldCArPSAnICcgKyBtYXJrdXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Igc3RhdGljIHBhZ2VzLCBubyBuZWVkIHRvIHB1dCBSZWFjdCBJRCBhbmQgY2hlY2tzdW0uIFNhdmVzIGxvdHMgb2ZcbiAgICAvLyBieXRlcy5cbiAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgIHJldHVybiByZXQgKyAnPic7XG4gICAgfVxuXG4gICAgdmFyIG1hcmt1cEZvcklEID0gRE9NUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvcklEKHRoaXMuX3Jvb3ROb2RlSUQpO1xuICAgIHJldHVybiByZXQgKyAnICcgKyBtYXJrdXBGb3JJRCArICc+JztcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIHRoZSBjb250ZW50IGJldHdlZW4gdGhlIHRhZ3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbnRlbnQgbWFya3VwLlxuICAgKi9cbiAgX2NyZWF0ZUNvbnRlbnRNYXJrdXA6IGZ1bmN0aW9uKHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIHByZWZpeCA9ICcnO1xuICAgIGlmICh0aGlzLl90YWcgPT09ICdsaXN0aW5nJyB8fFxuICAgICAgICB0aGlzLl90YWcgPT09ICdwcmUnIHx8XG4gICAgICAgIHRoaXMuX3RhZyA9PT0gJ3RleHRhcmVhJykge1xuICAgICAgLy8gQWRkIGFuIGluaXRpYWwgbmV3bGluZSBiZWNhdXNlIGJyb3dzZXJzIGlnbm9yZSB0aGUgZmlyc3QgbmV3bGluZSBpblxuICAgICAgLy8gYSA8bGlzdGluZz4sIDxwcmU+LCBvciA8dGV4dGFyZWE+IGFzIGFuIFwiYXV0aG9yaW5nIGNvbnZlbmllbmNlXCIgLS0gc2VlXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5LlxuICAgICAgcHJlZml4ID0gJ1xcbic7XG4gICAgfVxuXG4gICAgdmFyIHByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG5cbiAgICAvLyBJbnRlbnRpb25hbCB1c2Ugb2YgIT0gdG8gYXZvaWQgY2F0Y2hpbmcgemVyby9mYWxzZS5cbiAgICB2YXIgaW5uZXJIVE1MID0gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw7XG4gICAgaWYgKGlubmVySFRNTCAhPSBudWxsKSB7XG4gICAgICBpZiAoaW5uZXJIVE1MLl9faHRtbCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBpbm5lckhUTUwuX19odG1sO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY29udGVudFRvVXNlID1cbiAgICAgICAgQ09OVEVOVF9UWVBFU1t0eXBlb2YgcHJvcHMuY2hpbGRyZW5dID8gcHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgICAgdmFyIGNoaWxkcmVuVG9Vc2UgPSBjb250ZW50VG9Vc2UgIT0gbnVsbCA/IG51bGwgOiBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIGlmIChjb250ZW50VG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKGNvbnRlbnRUb1VzZSk7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkcmVuVG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICB2YXIgbW91bnRJbWFnZXMgPSB0aGlzLm1vdW50Q2hpbGRyZW4oXG4gICAgICAgICAgY2hpbGRyZW5Ub1VzZSxcbiAgICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgICBjb250ZXh0XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBtb3VudEltYWdlcy5qb2luKCcnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfSxcblxuICByZWNlaXZlQ29tcG9uZW50OiBmdW5jdGlvbihuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgcHJldkVsZW1lbnQgPSB0aGlzLl9jdXJyZW50RWxlbWVudDtcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IG5leHRFbGVtZW50O1xuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50KHRyYW5zYWN0aW9uLCBwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQsIGNvbnRleHQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgbmF0aXZlIERPTSBjb21wb25lbnQgYWZ0ZXIgaXQgaGFzIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQgYW5kXG4gICAqIGF0dGFjaGVkIHRvIHRoZSBET00uIFJlY29uY2lsZXMgdGhlIHJvb3QgRE9NIG5vZGUsIHRoZW4gcmVjdXJzZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IHByZXZFbGVtZW50XG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICogQG92ZXJyaWRhYmxlXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uKHRyYW5zYWN0aW9uLCBwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQsIGNvbnRleHQpIHtcbiAgICBhc3NlcnRWYWxpZFByb3BzKHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzKTtcbiAgICB0aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKHByZXZFbGVtZW50LnByb3BzLCB0cmFuc2FjdGlvbik7XG4gICAgdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4ocHJldkVsZW1lbnQucHJvcHMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjb25jaWxlcyB0aGUgcHJvcGVydGllcyBieSBkZXRlY3RpbmcgZGlmZmVyZW5jZXMgaW4gcHJvcGVydHkgdmFsdWVzIGFuZFxuICAgKiB1cGRhdGluZyB0aGUgRE9NIGFzIG5lY2Vzc2FyeS4gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUgc2luZ2xlIG1vc3RcbiAgICogY3JpdGljYWwgcGF0aCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuICAgKlxuICAgKiBUT0RPOiBCZW5jaG1hcmsgd2hldGhlciBjaGVja2luZyBmb3IgY2hhbmdlZCB2YWx1ZXMgaW4gbWVtb3J5IGFjdHVhbGx5XG4gICAqICAgICAgIGltcHJvdmVzIHBlcmZvcm1hbmNlIChlc3BlY2lhbGx5IHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50cykuXG4gICAqIFRPRE86IEJlbmNobWFyayB0aGUgZWZmZWN0cyBvZiBwdXR0aW5nIHRoaXMgYXQgdGhlIHRvcCBzaW5jZSA5OSUgb2YgcHJvcHNcbiAgICogICAgICAgZG8gbm90IGNoYW5nZSBmb3IgYSBnaXZlbiByZWNvbmNpbGlhdGlvbi5cbiAgICogVE9ETzogQmVuY2htYXJrIGFyZWFzIHRoYXQgY2FuIGJlIGltcHJvdmVkIHdpdGggY2FjaGluZy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGxhc3RQcm9wc1xuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqL1xuICBfdXBkYXRlRE9NUHJvcGVydGllczogZnVuY3Rpb24obGFzdFByb3BzLCB0cmFuc2FjdGlvbikge1xuICAgIHZhciBuZXh0UHJvcHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztcbiAgICB2YXIgcHJvcEtleTtcbiAgICB2YXIgc3R5bGVOYW1lO1xuICAgIHZhciBzdHlsZVVwZGF0ZXM7XG4gICAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fFxuICAgICAgICAgIWxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICB2YXIgbGFzdFN0eWxlID0gdGhpcy5fcHJldmlvdXNTdHlsZUNvcHk7XG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RTdHlsZSkge1xuICAgICAgICAgIGlmIChsYXN0U3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0gc3R5bGVVcGRhdGVzIHx8IHt9O1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcHJldmlvdXNTdHlsZUNvcHkgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBkZWxldGVMaXN0ZW5lcih0aGlzLl9yb290Tm9kZUlELCBwcm9wS2V5KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbcHJvcEtleV0gfHxcbiAgICAgICAgICBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShwcm9wS2V5KSkge1xuICAgICAgICBCYWNrZW5kSURPcGVyYXRpb25zLmRlbGV0ZVByb3BlcnR5QnlJRChcbiAgICAgICAgICB0aGlzLl9yb290Tm9kZUlELFxuICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuICAgICAgdmFyIGxhc3RQcm9wID0gcHJvcEtleSA9PT0gU1RZTEUgP1xuICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA6XG4gICAgICAgIGxhc3RQcm9wc1twcm9wS2V5XTtcbiAgICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICBuZXh0UHJvcCA9IHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gYXNzaWduKHt9LCBuZXh0UHJvcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNTdHlsZUNvcHkgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0UHJvcCkge1xuICAgICAgICAgIC8vIFVuc2V0IHN0eWxlcyBvbiBgbGFzdFByb3BgIGJ1dCBub3Qgb24gYG5leHRQcm9wYC5cbiAgICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0UHJvcCkge1xuICAgICAgICAgICAgaWYgKGxhc3RQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiZcbiAgICAgICAgICAgICAgICAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG4gICAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbmV4dFByb3ApIHtcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmXG4gICAgICAgICAgICAgICAgbGFzdFByb3Bbc3R5bGVOYW1lXSAhPT0gbmV4dFByb3Bbc3R5bGVOYW1lXSkge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gbmV4dFByb3Bbc3R5bGVOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG4gICAgICAgICAgc3R5bGVVcGRhdGVzID0gbmV4dFByb3A7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgcHV0TGlzdGVuZXIodGhpcy5fcm9vdE5vZGVJRCwgcHJvcEtleSwgbmV4dFByb3AsIHRyYW5zYWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbcHJvcEtleV0gfHxcbiAgICAgICAgICBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShwcm9wS2V5KSkge1xuICAgICAgICBCYWNrZW5kSURPcGVyYXRpb25zLnVwZGF0ZVByb3BlcnR5QnlJRChcbiAgICAgICAgICB0aGlzLl9yb290Tm9kZUlELFxuICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgbmV4dFByb3BcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0eWxlVXBkYXRlcykge1xuICAgICAgQmFja2VuZElET3BlcmF0aW9ucy51cGRhdGVTdHlsZXNCeUlEKFxuICAgICAgICB0aGlzLl9yb290Tm9kZUlELFxuICAgICAgICBzdHlsZVVwZGF0ZXNcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGVzIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSB2YXJpb3VzIHByb3BlcnRpZXMgdGhhdCBhZmZlY3QgdGhlXG4gICAqIGNoaWxkcmVuIGNvbnRlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXN0UHJvcHNcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKi9cbiAgX3VwZGF0ZURPTUNoaWxkcmVuOiBmdW5jdGlvbihsYXN0UHJvcHMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIG5leHRQcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuXG4gICAgdmFyIGxhc3RDb250ZW50ID1cbiAgICAgIENPTlRFTlRfVFlQRVNbdHlwZW9mIGxhc3RQcm9wcy5jaGlsZHJlbl0gPyBsYXN0UHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgIHZhciBuZXh0Q29udGVudCA9XG4gICAgICBDT05URU5UX1RZUEVTW3R5cGVvZiBuZXh0UHJvcHMuY2hpbGRyZW5dID8gbmV4dFByb3BzLmNoaWxkcmVuIDogbnVsbDtcblxuICAgIHZhciBsYXN0SHRtbCA9XG4gICAgICBsYXN0UHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgJiZcbiAgICAgIGxhc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWw7XG4gICAgdmFyIG5leHRIdG1sID1cbiAgICAgIG5leHRQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAmJlxuICAgICAgbmV4dFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbDtcblxuICAgIC8vIE5vdGUgdGhlIHVzZSBvZiBgIT1gIHdoaWNoIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWQuXG4gICAgdmFyIGxhc3RDaGlsZHJlbiA9IGxhc3RDb250ZW50ICE9IG51bGwgPyBudWxsIDogbGFzdFByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0Q29udGVudCAhPSBudWxsID8gbnVsbCA6IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGNoaWxkcmVuIHRvIGNvbnRlbnQvaHRtbCBvciB2aWNlIHZlcnNhLCByZW1vdmVcbiAgICAvLyB0aGUgb2xkIGNvbnRlbnRcbiAgICB2YXIgbGFzdEhhc0NvbnRlbnRPckh0bWwgPSBsYXN0Q29udGVudCAhPSBudWxsIHx8IGxhc3RIdG1sICE9IG51bGw7XG4gICAgdmFyIG5leHRIYXNDb250ZW50T3JIdG1sID0gbmV4dENvbnRlbnQgIT0gbnVsbCB8fCBuZXh0SHRtbCAhPSBudWxsO1xuICAgIGlmIChsYXN0Q2hpbGRyZW4gIT0gbnVsbCAmJiBuZXh0Q2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbihudWxsLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgfSBlbHNlIGlmIChsYXN0SGFzQ29udGVudE9ySHRtbCAmJiAhbmV4dEhhc0NvbnRlbnRPckh0bWwpIHtcbiAgICAgIHRoaXMudXBkYXRlVGV4dENvbnRlbnQoJycpO1xuICAgIH1cblxuICAgIGlmIChuZXh0Q29udGVudCAhPSBudWxsKSB7XG4gICAgICBpZiAobGFzdENvbnRlbnQgIT09IG5leHRDb250ZW50KSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dENvbnRlbnQoJycgKyBuZXh0Q29udGVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7XG4gICAgICAgIEJhY2tlbmRJRE9wZXJhdGlvbnMudXBkYXRlSW5uZXJIVE1MQnlJRChcbiAgICAgICAgICB0aGlzLl9yb290Tm9kZUlELFxuICAgICAgICAgIG5leHRIdG1sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0Q2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbihuZXh0Q2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFsbCBldmVudCByZWdpc3RyYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLiBEb2VzIG5vdCByZW1vdmUgZnJvbVxuICAgKiB0aGUgRE9NLiBUaGF0IG11c3QgYmUgZG9uZSBieSB0aGUgcGFyZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudW5tb3VudENoaWxkcmVuKCk7XG4gICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmRlbGV0ZUFsbExpc3RlbmVycyh0aGlzLl9yb290Tm9kZUlEKTtcbiAgICBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudC51bm1vdW50SURGcm9tRW52aXJvbm1lbnQodGhpcy5fcm9vdE5vZGVJRCk7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IG51bGw7XG4gIH1cblxufTtcblxuUmVhY3RQZXJmLm1lYXN1cmVNZXRob2RzKFJlYWN0RE9NQ29tcG9uZW50LCAnUmVhY3RET01Db21wb25lbnQnLCB7XG4gIG1vdW50Q29tcG9uZW50OiAnbW91bnRDb21wb25lbnQnLFxuICB1cGRhdGVDb21wb25lbnQ6ICd1cGRhdGVDb21wb25lbnQnXG59KTtcblxuYXNzaWduKFxuICBSZWFjdERPTUNvbXBvbmVudC5wcm90b3R5cGUsXG4gIFJlYWN0RE9NQ29tcG9uZW50Lk1peGluLFxuICBSZWFjdE11bHRpQ2hpbGQuTWl4aW5cbik7XG5cblJlYWN0RE9NQ29tcG9uZW50LmluamVjdGlvbiA9IHtcbiAgaW5qZWN0SURPcGVyYXRpb25zOiBmdW5jdGlvbihJRE9wZXJhdGlvbnMpIHtcbiAgICBSZWFjdERPTUNvbXBvbmVudC5CYWNrZW5kSURPcGVyYXRpb25zID0gQmFja2VuZElET3BlcmF0aW9ucyA9IElET3BlcmF0aW9ucztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUNvbXBvbmVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JFVDAxRGIyMXdiMjVsYm5RdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwWEc0Z0tpQkFkSGx3WldOb1pXTnJjeUJ6ZEdGMGFXTXRiMjVzZVZ4dUlDb3ZYRzVjYmk4cUlHZHNiMkpoYkNCb1lYTlBkMjVRY205d1pYSjBlVHAwY25WbElDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlFTlRVMUJ5YjNCbGNuUjVUM0JsY21GMGFXOXVjeUE5SUhKbGNYVnBjbVVvWENJdUwwTlRVMUJ5YjNCbGNuUjVUM0JsY21GMGFXOXVjMXdpS1R0Y2JuWmhjaUJFVDAxUWNtOXdaWEowZVNBOUlISmxjWFZwY21Vb1hDSXVMMFJQVFZCeWIzQmxjblI1WENJcE8xeHVkbUZ5SUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWMxd2lLVHRjYm5aaGNpQlNaV0ZqZEVKeWIzZHpaWEpGZG1WdWRFVnRhWFIwWlhJZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFSnliM2R6WlhKRmRtVnVkRVZ0YVhSMFpYSmNJaWs3WEc1MllYSWdVbVZoWTNSRGIyMXdiMjVsYm5SQ2NtOTNjMlZ5Ulc1MmFYSnZibTFsYm5RZ1BWeHVJQ0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU52YlhCdmJtVnVkRUp5YjNkelpYSkZiblpwY205dWJXVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFMXZkVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSTmIzVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFMTFiSFJwUTJocGJHUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTExYkhScFEyaHBiR1JjSWlrN1hHNTJZWElnVW1WaFkzUlFaWEptSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSUVpYSm1YQ0lwTzF4dVhHNTJZWElnWVhOemFXZHVJRDBnY21WeGRXbHlaU2hjSWk0dlQySnFaV04wTG1GemMybG5ibHdpS1R0Y2JuWmhjaUJsYzJOaGNHVlVaWGgwUTI5dWRHVnVkRVp2Y2tKeWIzZHpaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOWxjMk5oY0dWVVpYaDBRMjl1ZEdWdWRFWnZja0p5YjNkelpYSmNJaWs3WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1ZG1GeUlHbHpSWFpsYm5SVGRYQndiM0owWldRZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYzBWMlpXNTBVM1Z3Y0c5eWRHVmtYQ0lwTzF4dWRtRnlJR3RsZVU5bUlEMGdjbVZ4ZFdseVpTaGNJaTR2YTJWNVQyWmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNiblpoY2lCa1pXeGxkR1ZNYVhOMFpXNWxjaUE5SUZKbFlXTjBRbkp2ZDNObGNrVjJaVzUwUlcxcGRIUmxjaTVrWld4bGRHVk1hWE4wWlc1bGNqdGNiblpoY2lCc2FYTjBaVzVVYnlBOUlGSmxZV04wUW5KdmQzTmxja1YyWlc1MFJXMXBkSFJsY2k1c2FYTjBaVzVVYnp0Y2JuWmhjaUJ5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGN5QTlJRkpsWVdOMFFuSnZkM05sY2tWMlpXNTBSVzFwZEhSbGNpNXlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsY3p0Y2JseHVMeThnUm05eUlIRjFhV05yYkhrZ2JXRjBZMmhwYm1jZ1kyaHBiR1J5Wlc0Z2RIbHdaU3dnZEc4Z2RHVnpkQ0JwWmlCallXNGdZbVVnZEhKbFlYUmxaQ0JoY3lCamIyNTBaVzUwTGx4dWRtRnlJRU5QVGxSRlRsUmZWRmxRUlZNZ1BTQjdKM04wY21sdVp5YzZJSFJ5ZFdVc0lDZHVkVzFpWlhJbk9pQjBjblZsZlR0Y2JseHVkbUZ5SUZOVVdVeEZJRDBnYTJWNVQyWW9lM04wZVd4bE9pQnVkV3hzZlNrN1hHNWNiblpoY2lCRlRFVk5SVTVVWDA1UFJFVmZWRmxRUlNBOUlERTdYRzVjYmk4cUtseHVJQ29nVDNCMGFXOXVZV3hzZVNCcGJtcGxZM1JoWW14bElHOXdaWEpoZEdsdmJuTWdabTl5SUcxMWRHRjBhVzVuSUhSb1pTQkVUMDFjYmlBcUwxeHVkbUZ5SUVKaFkydGxibVJKUkU5d1pYSmhkR2x2Ym5NZ1BTQnVkV3hzTzF4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1AyOWlhbVZqZEgwZ2NISnZjSE5jYmlBcUwxeHVablZ1WTNScGIyNGdZWE56WlhKMFZtRnNhV1JRY205d2N5aHdjbTl3Y3lrZ2UxeHVJQ0JwWmlBb0lYQnliM0J6S1NCN1hHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNGdJQzh2SUU1dmRHVWdkR2hsSUhWelpTQnZaaUJnUFQxZ0lIZG9hV05vSUdOb1pXTnJjeUJtYjNJZ2JuVnNiQ0J2Y2lCMWJtUmxabWx1WldRdVhHNGdJR2xtSUNod2NtOXdjeTVrWVc1blpYSnZkWE5zZVZObGRFbHVibVZ5U0ZSTlRDQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUhCeWIzQnpMbU5vYVd4a2NtVnVJRDA5SUc1MWJHd3NYRzRnSUNBZ0lDQW5RMkZ1SUc5dWJIa2djMlYwSUc5dVpTQnZaaUJnWTJocGJHUnlaVzVnSUc5eUlHQndjbTl3Y3k1a1lXNW5aWEp2ZFhOc2VWTmxkRWx1Ym1WeVNGUk5UR0F1SjF4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2NISnZjSE11WTJocGJHUnlaVzRnUFQwZ2JuVnNiQ2twTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQjBlWEJsYjJZZ2NISnZjSE11WkdGdVoyVnliM1Z6YkhsVFpYUkpibTVsY2toVVRVd2dQVDA5SUNkdlltcGxZM1FuSUNZbVhHNGdJQ0FnSUNBblgxOW9kRzFzSnlCcGJpQndjbTl3Y3k1a1lXNW5aWEp2ZFhOc2VWTmxkRWx1Ym1WeVNGUk5UQ3hjYmlBZ0lDQWdJQ2RnY0hKdmNITXVaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV4Z0lHMTFjM1FnWW1VZ2FXNGdkR2hsSUdadmNtMGdZSHRmWDJoMGJXdzZJQzR1TG4xZ0xpQW5JQ3RjYmlBZ0lDQWdJQ2RRYkdWaGMyVWdkbWx6YVhRZ2FIUjBjSE02THk5bVlpNXRaUzl5WldGamRDMXBiblpoY21saGJuUXRaR0Z1WjJWeWIzVnpiSGt0YzJWMExXbHVibVZ5TFdoMGJXd2dKeUFyWEc0Z0lDQWdJQ0FuWm05eUlHMXZjbVVnYVc1bWIzSnRZWFJwYjI0dUoxeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9kSGx3Wlc5bUlIQnliM0J6TG1SaGJtZGxjbTkxYzJ4NVUyVjBTVzV1WlhKSVZFMU1JRDA5UFNBbmIySnFaV04wSnlBbUpseHVJQ0FnSUNkZlgyaDBiV3duSUdsdUlIQnliM0J6TG1SaGJtZGxjbTkxYzJ4NVUyVjBTVzV1WlhKSVZFMU1LU2s3WEc0Z0lIMWNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ2NISnZjSE11YVc1dVpYSklWRTFNSUQwOUlHNTFiR3dzWEc0Z0lDQWdJQ0FuUkdseVpXTjBiSGtnYzJWMGRHbHVaeUJ3Y205d1pYSjBlU0JnYVc1dVpYSklWRTFNWUNCcGN5QnViM1FnY0dWeWJXbDBkR1ZrTGlBbklDdGNiaUFnSUNBZ0lDZEdiM0lnYlc5eVpTQnBibVp2Y20xaGRHbHZiaXdnYkc5dmEzVndJR1J2WTNWdFpXNTBZWFJwYjI0Z2IyNGdZR1JoYm1kbGNtOTFjMng1VTJWMFNXNXVaWEpJVkUxTVlDNG5YRzRnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJWEJ5YjNCekxtTnZiblJsYm5SRlpHbDBZV0pzWlNCOGZDQndjbTl3Y3k1amFHbHNaSEpsYmlBOVBTQnVkV3hzTEZ4dUlDQWdJQ0FnSjBFZ1kyOXRjRzl1Wlc1MElHbHpJR0JqYjI1MFpXNTBSV1JwZEdGaWJHVmdJR0Z1WkNCamIyNTBZV2x1Y3lCZ1kyaHBiR1J5Wlc1Z0lHMWhibUZuWldRZ1lua2dKeUFyWEc0Z0lDQWdJQ0FuVW1WaFkzUXVJRWwwSUdseklHNXZkeUI1YjNWeUlISmxjM0J2Ym5OcFltbHNhWFI1SUhSdklHZDFZWEpoYm5SbFpTQjBhR0YwSUc1dmJtVWdiMllnSnlBclhHNGdJQ0FnSUNBbmRHaHZjMlVnYm05a1pYTWdZWEpsSUhWdVpYaHdaV04wWldSc2VTQnRiMlJwWm1sbFpDQnZjaUJrZFhCc2FXTmhkR1ZrTGlCVWFHbHpJR2x6SUNjZ0sxeHVJQ0FnSUNBZ0ozQnliMkpoWW14NUlHNXZkQ0JwYm5SbGJuUnBiMjVoYkM0blhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQjlYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdjSEp2Y0hNdWMzUjViR1VnUFQwZ2JuVnNiQ0I4ZkNCMGVYQmxiMllnY0hKdmNITXVjM1I1YkdVZ1BUMDlJQ2R2WW1wbFkzUW5MRnh1SUNBZ0lDZFVhR1VnWUhOMGVXeGxZQ0J3Y205d0lHVjRjR1ZqZEhNZ1lTQnRZWEJ3YVc1bklHWnliMjBnYzNSNWJHVWdjSEp2Y0dWeWRHbGxjeUIwYnlCMllXeDFaWE1zSUNjZ0sxeHVJQ0FnSUNkdWIzUWdZU0J6ZEhKcGJtY3VJRVp2Y2lCbGVHRnRjR3hsTENCemRIbHNaVDE3ZTIxaGNtZHBibEpwWjJoME9pQnpjR0ZqYVc1bklDc2dYRnduWlcxY1hDZDlmU0IzYUdWdUlDY2dLMXh1SUNBZ0lDZDFjMmx1WnlCS1UxZ3VKMXh1SUNBcElEb2dhVzUyWVhKcFlXNTBLSEJ5YjNCekxuTjBlV3hsSUQwOUlHNTFiR3dnZkh3Z2RIbHdaVzltSUhCeWIzQnpMbk4wZVd4bElEMDlQU0FuYjJKcVpXTjBKeWtwTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJ3ZFhSTWFYTjBaVzVsY2locFpDd2djbVZuYVhOMGNtRjBhVzl1VG1GdFpTd2diR2x6ZEdWdVpYSXNJSFJ5WVc1ellXTjBhVzl1S1NCN1hHNGdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQXZMeUJKUlRnZ2FHRnpJRzV2SUVGUVNTQm1iM0lnWlhabGJuUWdZMkZ3ZEhWeWFXNW5JR0Z1WkNCMGFHVWdZRzl1VTJOeWIyeHNZQ0JsZG1WdWRDQmtiMlZ6YmlkMFhHNGdJQ0FnTHk4Z1luVmlZbXhsTGx4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNBaFBUMGdKMjl1VTJOeWIyeHNKeUI4ZkNCcGMwVjJaVzUwVTNWd2NHOXlkR1ZrS0NkelkzSnZiR3duTENCMGNuVmxLU3hjYmlBZ0lDQWdJQ2RVYUdseklHSnliM2R6WlhJZ1pHOWxjMjVjWENkMElITjFjSEJ2Y25RZ2RHaGxJR0J2YmxOamNtOXNiR0FnWlhabGJuUW5YRzRnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0I5WEc0Z0lIWmhjaUJqYjI1MFlXbHVaWElnUFNCU1pXRmpkRTF2ZFc1MExtWnBibVJTWldGamRFTnZiblJoYVc1bGNrWnZja2xFS0dsa0tUdGNiaUFnYVdZZ0tHTnZiblJoYVc1bGNpa2dlMXh1SUNBZ0lIWmhjaUJrYjJNZ1BTQmpiMjUwWVdsdVpYSXVibTlrWlZSNWNHVWdQVDA5SUVWTVJVMUZUbFJmVGs5RVJWOVVXVkJGSUQ5Y2JpQWdJQ0FnSUdOdmJuUmhhVzVsY2k1dmQyNWxja1J2WTNWdFpXNTBJRHBjYmlBZ0lDQWdJR052Ym5SaGFXNWxjanRjYmlBZ0lDQnNhWE4wWlc1VWJ5aHlaV2RwYzNSeVlYUnBiMjVPWVcxbExDQmtiMk1wTzF4dUlDQjlYRzRnSUhSeVlXNXpZV04wYVc5dUxtZGxkRkIxZEV4cGMzUmxibVZ5VVhWbGRXVW9LUzVsYm5GMVpYVmxVSFYwVEdsemRHVnVaWElvWEc0Z0lDQWdhV1FzWEc0Z0lDQWdjbVZuYVhOMGNtRjBhVzl1VG1GdFpTeGNiaUFnSUNCc2FYTjBaVzVsY2x4dUlDQXBPMXh1ZlZ4dVhHNHZMeUJHYjNJZ1NGUk5UQ3dnWTJWeWRHRnBiaUIwWVdkeklITm9iM1ZzWkNCdmJXbDBJSFJvWldseUlHTnNiM05sSUhSaFp5NGdWMlVnYTJWbGNDQmhJSGRvYVhSbGJHbHpkQ0JtYjNKY2JpOHZJSFJvYjNObElITndaV05wWVd3Z1kyRnpaV1FnZEdGbmN5NWNibHh1ZG1GeUlHOXRhWFIwWldSRGJHOXpaVlJoWjNNZ1BTQjdYRzRnSUNkaGNtVmhKem9nZEhKMVpTeGNiaUFnSjJKaGMyVW5PaUIwY25WbExGeHVJQ0FuWW5Jbk9pQjBjblZsTEZ4dUlDQW5ZMjlzSnpvZ2RISjFaU3hjYmlBZ0oyVnRZbVZrSnpvZ2RISjFaU3hjYmlBZ0oyaHlKem9nZEhKMVpTeGNiaUFnSjJsdFp5YzZJSFJ5ZFdVc1hHNGdJQ2RwYm5CMWRDYzZJSFJ5ZFdVc1hHNGdJQ2RyWlhsblpXNG5PaUIwY25WbExGeHVJQ0FuYkdsdWF5YzZJSFJ5ZFdVc1hHNGdJQ2R0WlhSaEp6b2dkSEoxWlN4Y2JpQWdKM0JoY21GdEp6b2dkSEoxWlN4Y2JpQWdKM052ZFhKalpTYzZJSFJ5ZFdVc1hHNGdJQ2QwY21GamF5YzZJSFJ5ZFdVc1hHNGdJQ2QzWW5Jbk9pQjBjblZsWEc0Z0lDOHZJRTVQVkVVNklHMWxiblZwZEdWdEozTWdZMnh2YzJVZ2RHRm5JSE5vYjNWc1pDQmlaU0J2YldsMGRHVmtMQ0JpZFhRZ2RHaGhkQ0JqWVhWelpYTWdjSEp2WW14bGJYTXVYRzU5TzF4dVhHNHZMeUJYWlNCaFkyTmxjSFFnWVc1NUlIUmhaeUIwYnlCaVpTQnlaVzVrWlhKbFpDQmlkWFFnYzJsdVkyVWdkR2hwY3lCblpYUnpJR2x1YW1WamRHVmtJR2x1ZEc4Z1lXSnBkSEpoY25sY2JpOHZJRWhVVFV3c0lIZGxJSGRoYm5RZ2RHOGdiV0ZyWlNCemRYSmxJSFJvWVhRZ2FYUW5jeUJoSUhOaFptVWdkR0ZuTGx4dUx5OGdhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZWRkl2VWtWRExYaHRiQzhqVGxRdFRtRnRaVnh1WEc1MllYSWdWa0ZNU1VSZlZFRkhYMUpGUjBWWUlEMGdMMTViWVMxNlFTMWFYVnRoTFhwQkxWbzZYMXhjTGx4Y0xWeGNaRjBxSkM4N0lDOHZJRk5wYlhCc2FXWnBaV1FnYzNWaWMyVjBYRzUyWVhJZ2RtRnNhV1JoZEdWa1ZHRm5RMkZqYUdVZ1BTQjdmVHRjYm5aaGNpQm9ZWE5QZDI1UWNtOXdaWEowZVNBOUlIdDlMbWhoYzA5M2JsQnliM0JsY25SNU8xeHVYRzVtZFc1amRHbHZiaUIyWVd4cFpHRjBaVVJoYm1kbGNtOTFjMVJoWnloMFlXY3BJSHRjYmlBZ2FXWWdLQ0ZvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0haaGJHbGtZWFJsWkZSaFowTmhZMmhsTENCMFlXY3BLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaFdRVXhKUkY5VVFVZGZVa1ZIUlZndWRHVnpkQ2gwWVdjcExDQW5TVzUyWVd4cFpDQjBZV2M2SUNWekp5d2dkR0ZuS1NBNklHbHVkbUZ5YVdGdWRDaFdRVXhKUkY5VVFVZGZVa1ZIUlZndWRHVnpkQ2gwWVdjcEtTazdYRzRnSUNBZ2RtRnNhV1JoZEdWa1ZHRm5RMkZqYUdWYmRHRm5YU0E5SUhSeWRXVTdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0VnYm1WM0lGSmxZV04wSUdOc1lYTnpJSFJvWVhRZ2FYTWdhV1JsYlhCdmRHVnVkQ0JoYm1RZ1kyRndZV0pzWlNCdlppQmpiMjUwWVdsdWFXNW5JRzkwYUdWeVhHNGdLaUJTWldGamRDQmpiMjF3YjI1bGJuUnpMaUJKZENCaFkyTmxjSFJ6SUdWMlpXNTBJR3hwYzNSbGJtVnljeUJoYm1RZ1JFOU5JSEJ5YjNCbGNuUnBaWE1nZEdoaGRDQmhjbVZjYmlBcUlIWmhiR2xrSUdGalkyOXlaR2x1WnlCMGJ5QmdSRTlOVUhKdmNHVnlkSGxnTGx4dUlDcGNiaUFxSUNBdElFVjJaVzUwSUd4cGMzUmxibVZ5Y3pvZ1lHOXVRMnhwWTJ0Z0xDQmdiMjVOYjNWelpVUnZkMjVnTENCbGRHTXVYRzRnS2lBZ0xTQkVUMDBnY0hKdmNHVnlkR2xsY3pvZ1lHTnNZWE56VG1GdFpXQXNJR0J1WVcxbFlDd2dZSFJwZEd4bFlDd2daWFJqTGx4dUlDcGNiaUFxSUZSb1pTQmdjM1I1YkdWZ0lIQnliM0JsY25SNUlHWjFibU4wYVc5dWN5QmthV1ptWlhKbGJuUnNlU0JtY205dElIUm9aU0JFVDAwZ1FWQkpMaUJKZENCaFkyTmxjSFJ6SUdGdVhHNGdLaUJ2WW1wbFkzUWdiV0Z3Y0dsdVp5QnZaaUJ6ZEhsc1pTQndjbTl3WlhKMGFXVnpJSFJ2SUhaaGJIVmxjeTVjYmlBcVhHNGdLaUJBWTI5dWMzUnlkV04wYjNJZ1VtVmhZM1JFVDAxRGIyMXdiMjVsYm5SY2JpQXFJRUJsZUhSbGJtUnpJRkpsWVdOMFRYVnNkR2xEYUdsc1pGeHVJQ292WEc1bWRXNWpkR2x2YmlCU1pXRmpkRVJQVFVOdmJYQnZibVZ1ZENoMFlXY3BJSHRjYmlBZ2RtRnNhV1JoZEdWRVlXNW5aWEp2ZFhOVVlXY29kR0ZuS1R0Y2JpQWdkR2hwY3k1ZmRHRm5JRDBnZEdGbk8xeHVJQ0IwYUdsekxsOXlaVzVrWlhKbFpFTm9hV3hrY21WdUlEMGdiblZzYkR0Y2JpQWdkR2hwY3k1ZmNISmxkbWx2ZFhOVGRIbHNaVU52Y0hrZ1BTQnVkV3hzTzF4dUlDQjBhR2x6TGw5eWIyOTBUbTlrWlVsRUlEMGdiblZzYkR0Y2JuMWNibHh1VW1WaFkzUkVUMDFEYjIxd2IyNWxiblF1WkdsemNHeGhlVTVoYldVZ1BTQW5VbVZoWTNSRVQwMURiMjF3YjI1bGJuUW5PMXh1WEc1U1pXRmpkRVJQVFVOdmJYQnZibVZ1ZEM1TmFYaHBiaUE5SUh0Y2JseHVJQ0JqYjI1emRISjFZM1E2SUdaMWJtTjBhVzl1S0dWc1pXMWxiblFwSUh0Y2JpQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFJXeGxiV1Z1ZENBOUlHVnNaVzFsYm5RN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsYm1WeVlYUmxjeUJ5YjI5MElIUmhaeUJ0WVhKcmRYQWdkR2hsYmlCeVpXTjFjbk5sY3k0Z1ZHaHBjeUJ0WlhSb2IyUWdhR0Z6SUhOcFpHVWdaV1ptWldOMGN5QmhibVJjYmlBZ0lDb2dhWE1nYm05MElHbGtaVzF3YjNSbGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjbTl2ZEVsRUlGUm9aU0J5YjI5MElFUlBUU0JKUkNCbWIzSWdkR2hwY3lCdWIyUmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI1OFVtVmhZM1JUWlhKMlpYSlNaVzVrWlhKcGJtZFVjbUZ1YzJGamRHbHZibjBnZEhKaGJuTmhZM1JwYjI1Y2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JVYUdVZ1kyOXRjSFYwWldRZ2JXRnlhM1Z3TGx4dUlDQWdLaTljYmlBZ2JXOTFiblJEYjIxd2IyNWxiblE2SUdaMWJtTjBhVzl1S0hKdmIzUkpSQ3dnZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcElIdGNiaUFnSUNCMGFHbHpMbDl5YjI5MFRtOWtaVWxFSUQwZ2NtOXZkRWxFTzF4dUlDQWdJR0Z6YzJWeWRGWmhiR2xrVUhKdmNITW9kR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1Y0hKdmNITXBPMXh1SUNBZ0lIWmhjaUJqYkc5elpWUmhaeUE5SUc5dGFYUjBaV1JEYkc5elpWUmhaM05iZEdocGN5NWZkR0ZuWFNBL0lDY25JRG9nSnp3dkp5QXJJSFJvYVhNdVgzUmhaeUFySUNjK0p6dGNiaUFnSUNCeVpYUjFjbTRnS0Z4dUlDQWdJQ0FnZEdocGN5NWZZM0psWVhSbFQzQmxibFJoWjAxaGNtdDFjRUZ1WkZCMWRFeHBjM1JsYm1WeWN5aDBjbUZ1YzJGamRHbHZiaWtnSzF4dUlDQWdJQ0FnZEdocGN5NWZZM0psWVhSbFEyOXVkR1Z1ZEUxaGNtdDFjQ2gwY21GdWMyRmpkR2x2Yml3Z1kyOXVkR1Y0ZENrZ0sxeHVJQ0FnSUNBZ1kyeHZjMlZVWVdkY2JpQWdJQ0FwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRjbVZoZEdWeklHMWhjbXQxY0NCbWIzSWdkR2hsSUc5d1pXNGdkR0ZuSUdGdVpDQmhiR3dnWVhSMGNtbGlkWFJsY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dWR2hwY3lCdFpYUm9iMlFnYUdGeklITnBaR1VnWldabVpXTjBjeUJpWldOaGRYTmxJR1YyWlc1MGN5Qm5aWFFnY21WbmFYTjBaWEpsWkM1Y2JpQWdJQ3BjYmlBZ0lDb2dTWFJsY21GMGFXNW5JRzkyWlhJZ2IySnFaV04wSUhCeWIzQmxjblJwWlhNZ2FYTWdabUZ6ZEdWeUlIUm9ZVzRnYVhSbGNtRjBhVzVuSUc5MlpYSWdZWEp5WVhsekxseHVJQ0FnS2lCQWMyVmxJR2gwZEhBNkx5OXFjM0JsY21ZdVkyOXRMMjlpYWkxMmN5MWhjbkl0YVhSbGNtRjBhVzl1WEc0Z0lDQXFYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibnhTWldGamRGTmxjblpsY2xKbGJtUmxjbWx1WjFSeVlXNXpZV04wYVc5dWZTQjBjbUZ1YzJGamRHbHZibHh1SUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlFMWhjbXQxY0NCdlppQnZjR1Z1YVc1bklIUmhaeTVjYmlBZ0lDb3ZYRzRnSUY5amNtVmhkR1ZQY0dWdVZHRm5UV0Z5YTNWd1FXNWtVSFYwVEdsemRHVnVaWEp6T2lCbWRXNWpkR2x2YmloMGNtRnVjMkZqZEdsdmJpa2dlMXh1SUNBZ0lIWmhjaUJ3Y205d2N5QTlJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTG5CeWIzQnpPMXh1SUNBZ0lIWmhjaUJ5WlhRZ1BTQW5QQ2NnS3lCMGFHbHpMbDkwWVdjN1hHNWNiaUFnSUNCbWIzSWdLSFpoY2lCd2NtOXdTMlY1SUdsdUlIQnliM0J6S1NCN1hHNGdJQ0FnSUNCcFppQW9JWEJ5YjNCekxtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQkxaWGtwS1NCN1hHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RtRnlJSEJ5YjNCV1lXeDFaU0E5SUhCeWIzQnpXM0J5YjNCTFpYbGRPMXh1SUNBZ0lDQWdhV1lnS0hCeWIzQldZV3gxWlNBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSEpsWjJsemRISmhkR2x2Yms1aGJXVk5iMlIxYkdWekxtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQkxaWGtwS1NCN1hHNGdJQ0FnSUNBZ0lIQjFkRXhwYzNSbGJtVnlLSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXNJSEJ5YjNCTFpYa3NJSEJ5YjNCV1lXeDFaU3dnZEhKaGJuTmhZM1JwYjI0cE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEJ5YjNCTFpYa2dQVDA5SUZOVVdVeEZLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSEJ5YjNCV1lXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjSEp2Y0ZaaGJIVmxJRDBnZEdocGN5NWZjSEpsZG1sdmRYTlRkSGxzWlVOdmNIa2dQU0JoYzNOcFoyNG9lMzBzSUhCeWIzQnpMbk4wZVd4bEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2NISnZjRlpoYkhWbElEMGdRMU5UVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6TG1OeVpXRjBaVTFoY210MWNFWnZjbE4wZVd4bGN5aHdjbTl3Vm1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhaaGNpQnRZWEpyZFhBZ1BWeHVJQ0FnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3k1amNtVmhkR1ZOWVhKcmRYQkdiM0pRY205d1pYSjBlU2h3Y205d1MyVjVMQ0J3Y205d1ZtRnNkV1VwTzF4dUlDQWdJQ0FnSUNCcFppQW9iV0Z5YTNWd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMElDczlJQ2NnSnlBcklHMWhjbXQxY0R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFWnZjaUJ6ZEdGMGFXTWdjR0ZuWlhNc0lHNXZJRzVsWldRZ2RHOGdjSFYwSUZKbFlXTjBJRWxFSUdGdVpDQmphR1ZqYTNOMWJTNGdVMkYyWlhNZ2JHOTBjeUJ2Wmx4dUlDQWdJQzh2SUdKNWRHVnpMbHh1SUNBZ0lHbG1JQ2gwY21GdWMyRmpkR2x2Ymk1eVpXNWtaWEpVYjFOMFlYUnBZMDFoY210MWNDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlISmxkQ0FySUNjK0p6dGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdiV0Z5YTNWd1JtOXlTVVFnUFNCRVQwMVFjbTl3WlhKMGVVOXdaWEpoZEdsdmJuTXVZM0psWVhSbFRXRnlhM1Z3Um05eVNVUW9kR2hwY3k1ZmNtOXZkRTV2WkdWSlJDazdYRzRnSUNBZ2NtVjBkWEp1SUhKbGRDQXJJQ2NnSnlBcklHMWhjbXQxY0VadmNrbEVJQ3NnSno0bk8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEY21WaGRHVnpJRzFoY210MWNDQm1iM0lnZEdobElHTnZiblJsYm5RZ1ltVjBkMlZsYmlCMGFHVWdkR0ZuY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJ5YVhaaGRHVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1ZkZKbFlXTjBVMlZ5ZG1WeVVtVnVaR1Z5YVc1blZISmhibk5oWTNScGIyNTlJSFJ5WVc1ellXTjBhVzl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQmpiMjUwWlhoMFhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnUTI5dWRHVnVkQ0J0WVhKcmRYQXVYRzRnSUNBcUwxeHVJQ0JmWTNKbFlYUmxRMjl1ZEdWdWRFMWhjbXQxY0RvZ1puVnVZM1JwYjI0b2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUXBJSHRjYmlBZ0lDQjJZWElnY0hKbFptbDRJRDBnSnljN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WDNSaFp5QTlQVDBnSjJ4cGMzUnBibWNuSUh4OFhHNGdJQ0FnSUNBZ0lIUm9hWE11WDNSaFp5QTlQVDBnSjNCeVpTY2dmSHhjYmlBZ0lDQWdJQ0FnZEdocGN5NWZkR0ZuSUQwOVBTQW5kR1Y0ZEdGeVpXRW5LU0I3WEc0Z0lDQWdJQ0F2THlCQlpHUWdZVzRnYVc1cGRHbGhiQ0J1Wlhkc2FXNWxJR0psWTJGMWMyVWdZbkp2ZDNObGNuTWdhV2R1YjNKbElIUm9aU0JtYVhKemRDQnVaWGRzYVc1bElHbHVYRzRnSUNBZ0lDQXZMeUJoSUR4c2FYTjBhVzVuUGl3Z1BIQnlaVDRzSUc5eUlEeDBaWGgwWVhKbFlUNGdZWE1nWVc0Z1hDSmhkWFJvYjNKcGJtY2dZMjl1ZG1WdWFXVnVZMlZjSWlBdExTQnpaV1ZjYmlBZ0lDQWdJQzh2SUdoMGRIQnpPaTh2YUhSdGJDNXpjR1ZqTG5kb1lYUjNaeTV2Y21jdmJYVnNkR2x3WVdkbEwzTjViblJoZUM1b2RHMXNJM0JoY25OcGJtY3RiV0ZwYmkxcGJtSnZaSGt1WEc0Z0lDQWdJQ0J3Y21WbWFYZ2dQU0FuWEZ4dUp6dGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdjSEp2Y0hNZ1BTQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkQzV3Y205d2N6dGNibHh1SUNBZ0lDOHZJRWx1ZEdWdWRHbHZibUZzSUhWelpTQnZaaUFoUFNCMGJ5QmhkbTlwWkNCallYUmphR2x1WnlCNlpYSnZMMlpoYkhObExseHVJQ0FnSUhaaGNpQnBibTVsY2toVVRVd2dQU0J3Y205d2N5NWtZVzVuWlhKdmRYTnNlVk5sZEVsdWJtVnlTRlJOVER0Y2JpQWdJQ0JwWmlBb2FXNXVaWEpJVkUxTUlDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHbG1JQ2hwYm01bGNraFVUVXd1WDE5b2RHMXNJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSEJ5WldacGVDQXJJR2x1Ym1WeVNGUk5UQzVmWDJoMGJXdzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhaaGNpQmpiMjUwWlc1MFZHOVZjMlVnUFZ4dUlDQWdJQ0FnSUNCRFQwNVVSVTVVWDFSWlVFVlRXM1I1Y0dWdlppQndjbTl3Y3k1amFHbHNaSEpsYmwwZ1B5QndjbTl3Y3k1amFHbHNaSEpsYmlBNklHNTFiR3c3WEc0Z0lDQWdJQ0IyWVhJZ1kyaHBiR1J5Wlc1VWIxVnpaU0E5SUdOdmJuUmxiblJVYjFWelpTQWhQU0J1ZFd4c0lEOGdiblZzYkNBNklIQnliM0J6TG1Ob2FXeGtjbVZ1TzF4dUlDQWdJQ0FnYVdZZ0tHTnZiblJsYm5SVWIxVnpaU0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ3Y21WbWFYZ2dLeUJsYzJOaGNHVlVaWGgwUTI5dWRHVnVkRVp2Y2tKeWIzZHpaWElvWTI5dWRHVnVkRlJ2VlhObEtUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZMmhwYkdSeVpXNVViMVZ6WlNBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ0YjNWdWRFbHRZV2RsY3lBOUlIUm9hWE11Ylc5MWJuUkRhR2xzWkhKbGJpaGNiaUFnSUNBZ0lDQWdJQ0JqYUdsc1pISmxibFJ2VlhObExGeHVJQ0FnSUNBZ0lDQWdJSFJ5WVc1ellXTjBhVzl1TEZ4dUlDQWdJQ0FnSUNBZ0lHTnZiblJsZUhSY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIQnlaV1pwZUNBcklHMXZkVzUwU1cxaFoyVnpMbXB2YVc0b0p5Y3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnY0hKbFptbDRPMXh1SUNCOUxGeHVYRzRnSUhKbFkyVnBkbVZEYjIxd2IyNWxiblE2SUdaMWJtTjBhVzl1S0c1bGVIUkZiR1Z0Wlc1MExDQjBjbUZ1YzJGamRHbHZiaXdnWTI5dWRHVjRkQ2tnZTF4dUlDQWdJSFpoY2lCd2NtVjJSV3hsYldWdWRDQTlJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTzF4dUlDQWdJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwSUQwZ2JtVjRkRVZzWlcxbGJuUTdYRzRnSUNBZ2RHaHBjeTUxY0dSaGRHVkRiMjF3YjI1bGJuUW9kSEpoYm5OaFkzUnBiMjRzSUhCeVpYWkZiR1Z0Wlc1MExDQnVaWGgwUld4bGJXVnVkQ3dnWTI5dWRHVjRkQ2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGVndaR0YwWlhNZ1lTQnVZWFJwZG1VZ1JFOU5JR052YlhCdmJtVnVkQ0JoWm5SbGNpQnBkQ0JvWVhNZ1lXeHlaV0ZrZVNCaVpXVnVJR0ZzYkc5allYUmxaQ0JoYm1SY2JpQWdJQ29nWVhSMFlXTm9aV1FnZEc4Z2RHaGxJRVJQVFM0Z1VtVmpiMjVqYVd4bGN5QjBhR1VnY205dmRDQkVUMDBnYm05a1pTd2dkR2hsYmlCeVpXTjFjbk5sY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dWZTQjBjbUZ1YzJGamRHbHZibHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnY0hKbGRrVnNaVzFsYm5SY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHNWxlSFJGYkdWdFpXNTBYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2lCQWIzWmxjbkpwWkdGaWJHVmNiaUFnSUNvdlhHNGdJSFZ3WkdGMFpVTnZiWEJ2Ym1WdWREb2dablZ1WTNScGIyNG9kSEpoYm5OaFkzUnBiMjRzSUhCeVpYWkZiR1Z0Wlc1MExDQnVaWGgwUld4bGJXVnVkQ3dnWTI5dWRHVjRkQ2tnZTF4dUlDQWdJR0Z6YzJWeWRGWmhiR2xrVUhKdmNITW9kR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1Y0hKdmNITXBPMXh1SUNBZ0lIUm9hWE11WDNWd1pHRjBaVVJQVFZCeWIzQmxjblJwWlhNb2NISmxka1ZzWlcxbGJuUXVjSEp2Y0hNc0lIUnlZVzV6WVdOMGFXOXVLVHRjYmlBZ0lDQjBhR2x6TGw5MWNHUmhkR1ZFVDAxRGFHbHNaSEpsYmlod2NtVjJSV3hsYldWdWRDNXdjbTl3Y3l3Z2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pXTnZibU5wYkdWeklIUm9aU0J3Y205d1pYSjBhV1Z6SUdKNUlHUmxkR1ZqZEdsdVp5QmthV1ptWlhKbGJtTmxjeUJwYmlCd2NtOXdaWEowZVNCMllXeDFaWE1nWVc1a1hHNGdJQ0FxSUhWd1pHRjBhVzVuSUhSb1pTQkVUMDBnWVhNZ2JtVmpaWE56WVhKNUxpQlVhR2x6SUdaMWJtTjBhVzl1SUdseklIQnliMkpoWW14NUlIUm9aU0J6YVc1bmJHVWdiVzl6ZEZ4dUlDQWdLaUJqY21sMGFXTmhiQ0J3WVhSb0lHWnZjaUJ3WlhKbWIzSnRZVzVqWlNCdmNIUnBiV2w2WVhScGIyNHVYRzRnSUNBcVhHNGdJQ0FxSUZSUFJFODZJRUpsYm1Ob2JXRnlheUIzYUdWMGFHVnlJR05vWldOcmFXNW5JR1p2Y2lCamFHRnVaMlZrSUhaaGJIVmxjeUJwYmlCdFpXMXZjbmtnWVdOMGRXRnNiSGxjYmlBZ0lDb2dJQ0FnSUNBZ2FXMXdjbTkyWlhNZ2NHVnlabTl5YldGdVkyVWdLR1Z6Y0dWamFXRnNiSGtnYzNSaGRHbGpZV3hzZVNCd2IzTnBkR2x2Ym1Wa0lHVnNaVzFsYm5SektTNWNiaUFnSUNvZ1ZFOUVUem9nUW1WdVkyaHRZWEpySUhSb1pTQmxabVpsWTNSeklHOW1JSEIxZEhScGJtY2dkR2hwY3lCaGRDQjBhR1VnZEc5d0lITnBibU5sSURrNUpTQnZaaUJ3Y205d2MxeHVJQ0FnS2lBZ0lDQWdJQ0JrYnlCdWIzUWdZMmhoYm1kbElHWnZjaUJoSUdkcGRtVnVJSEpsWTI5dVkybHNhV0YwYVc5dUxseHVJQ0FnS2lCVVQwUlBPaUJDWlc1amFHMWhjbXNnWVhKbFlYTWdkR2hoZENCallXNGdZbVVnYVcxd2NtOTJaV1FnZDJsMGFDQmpZV05vYVc1bkxseHVJQ0FnS2x4dUlDQWdLaUJBY0hKcGRtRjBaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2JHRnpkRkJ5YjNCelhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibjBnZEhKaGJuTmhZM1JwYjI1Y2JpQWdJQ292WEc0Z0lGOTFjR1JoZEdWRVQwMVFjbTl3WlhKMGFXVnpPaUJtZFc1amRHbHZiaWhzWVhOMFVISnZjSE1zSUhSeVlXNXpZV04wYVc5dUtTQjdYRzRnSUNBZ2RtRnlJRzVsZUhSUWNtOXdjeUE5SUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExuQnliM0J6TzF4dUlDQWdJSFpoY2lCd2NtOXdTMlY1TzF4dUlDQWdJSFpoY2lCemRIbHNaVTVoYldVN1hHNGdJQ0FnZG1GeUlITjBlV3hsVlhCa1lYUmxjenRjYmlBZ0lDQm1iM0lnS0hCeWIzQkxaWGtnYVc0Z2JHRnpkRkJ5YjNCektTQjdYRzRnSUNBZ0lDQnBaaUFvYm1WNGRGQnliM0J6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCTFpYa3BJSHg4WEc0Z0lDQWdJQ0FnSUNBaGJHRnpkRkJ5YjNCekxtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQkxaWGtwS1NCN1hHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSEJ5YjNCTFpYa2dQVDA5SUZOVVdVeEZLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQnNZWE4wVTNSNWJHVWdQU0IwYUdsekxsOXdjbVYyYVc5MWMxTjBlV3hsUTI5d2VUdGNiaUFnSUNBZ0lDQWdabTl5SUNoemRIbHNaVTVoYldVZ2FXNGdiR0Z6ZEZOMGVXeGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR3hoYzNSVGRIbHNaUzVvWVhOUGQyNVFjbTl3WlhKMGVTaHpkSGxzWlU1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkSGxzWlZWd1pHRjBaWE1nUFNCemRIbHNaVlZ3WkdGMFpYTWdmSHdnZTMwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZEhsc1pWVndaR0YwWlhOYmMzUjViR1ZPWVcxbFhTQTlJQ2NuTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXdjbVYyYVc5MWMxTjBlV3hsUTI5d2VTQTlJRzUxYkd3N1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tISmxaMmx6ZEhKaGRHbHZiazVoYldWTmIyUjFiR1Z6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUdSbGJHVjBaVXhwYzNSbGJtVnlLSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXNJSEJ5YjNCTFpYa3BPMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hjYmlBZ0lDQWdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVTNXBjMU4wWVc1a1lYSmtUbUZ0WlZ0d2NtOXdTMlY1WFNCOGZGeHVJQ0FnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1selEzVnpkRzl0UVhSMGNtbGlkWFJsS0hCeWIzQkxaWGtwS1NCN1hHNGdJQ0FnSUNBZ0lFSmhZMnRsYm1SSlJFOXdaWEpoZEdsdmJuTXVaR1ZzWlhSbFVISnZjR1Z5ZEhsQ2VVbEVLRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVYM0p2YjNST2IyUmxTVVFzWEc0Z0lDQWdJQ0FnSUNBZ2NISnZjRXRsZVZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JtYjNJZ0tIQnliM0JMWlhrZ2FXNGdibVY0ZEZCeWIzQnpLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2JtVjRkRkJ5YjNBZ1BTQnVaWGgwVUhKdmNITmJjSEp2Y0V0bGVWMDdYRzRnSUNBZ0lDQjJZWElnYkdGemRGQnliM0FnUFNCd2NtOXdTMlY1SUQwOVBTQlRWRmxNUlNBL1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDNCeVpYWnBiM1Z6VTNSNWJHVkRiM0I1SURwY2JpQWdJQ0FnSUNBZ2JHRnpkRkJ5YjNCelczQnliM0JMWlhsZE8xeHVJQ0FnSUNBZ2FXWWdLQ0Z1WlhoMFVISnZjSE11YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0V0bGVTa2dmSHdnYm1WNGRGQnliM0FnUFQwOUlHeGhjM1JRY205d0tTQjdYRzRnSUNBZ0lDQWdJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0hCeWIzQkxaWGtnUFQwOUlGTlVXVXhGS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h1WlhoMFVISnZjQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHNWxlSFJRY205d0lEMGdkR2hwY3k1ZmNISmxkbWx2ZFhOVGRIbHNaVU52Y0hrZ1BTQmhjM05wWjI0b2UzMHNJRzVsZUhSUWNtOXdLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbDl3Y21WMmFXOTFjMU4wZVd4bFEyOXdlU0E5SUc1MWJHdzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tHeGhjM1JRY205d0tTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1ZXNXpaWFFnYzNSNWJHVnpJRzl1SUdCc1lYTjBVSEp2Y0dBZ1luVjBJRzV2ZENCdmJpQmdibVY0ZEZCeWIzQmdMbHh1SUNBZ0lDQWdJQ0FnSUdadmNpQW9jM1I1YkdWT1lXMWxJR2x1SUd4aGMzUlFjbTl3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2JHRnpkRkJ5YjNBdWFHRnpUM2R1VUhKdmNHVnlkSGtvYzNSNWJHVk9ZVzFsS1NBbUpseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDZ2hibVY0ZEZCeWIzQWdmSHdnSVc1bGVIUlFjbTl3TG1oaGMwOTNibEJ5YjNCbGNuUjVLSE4wZVd4bFRtRnRaU2twS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMGVXeGxWWEJrWVhSbGN5QTlJSE4wZVd4bFZYQmtZWFJsY3lCOGZDQjdmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1I1YkdWVmNHUmhkR1Z6VzNOMGVXeGxUbUZ0WlYwZ1BTQW5KenRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdWWEJrWVhSbElITjBlV3hsY3lCMGFHRjBJR05vWVc1blpXUWdjMmx1WTJVZ1lHeGhjM1JRY205d1lDNWNiaUFnSUNBZ0lDQWdJQ0JtYjNJZ0tITjBlV3hsVG1GdFpTQnBiaUJ1WlhoMFVISnZjQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0c1bGVIUlFjbTl3TG1oaGMwOTNibEJ5YjNCbGNuUjVLSE4wZVd4bFRtRnRaU2tnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1lYTjBVSEp2Y0Z0emRIbHNaVTVoYldWZElDRTlQU0J1WlhoMFVISnZjRnR6ZEhsc1pVNWhiV1ZkS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMGVXeGxWWEJrWVhSbGN5QTlJSE4wZVd4bFZYQmtZWFJsY3lCOGZDQjdmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1I1YkdWVmNHUmhkR1Z6VzNOMGVXeGxUbUZ0WlYwZ1BTQnVaWGgwVUhKdmNGdHpkSGxzWlU1aGJXVmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QlNaV3hwWlhNZ2IyNGdZSFZ3WkdGMFpWTjBlV3hsYzBKNVNVUmdJRzV2ZENCdGRYUmhkR2x1WnlCZ2MzUjViR1ZWY0dSaGRHVnpZQzVjYmlBZ0lDQWdJQ0FnSUNCemRIbHNaVlZ3WkdGMFpYTWdQU0J1WlhoMFVISnZjRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoeVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHdjbTl3UzJWNUtTa2dlMXh1SUNBZ0lDQWdJQ0J3ZFhSTWFYTjBaVzVsY2loMGFHbHpMbDl5YjI5MFRtOWtaVWxFTENCd2NtOXdTMlY1TENCdVpYaDBVSEp2Y0N3Z2RISmhibk5oWTNScGIyNHBPMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hjYmlBZ0lDQWdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVTNXBjMU4wWVc1a1lYSmtUbUZ0WlZ0d2NtOXdTMlY1WFNCOGZGeHVJQ0FnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1selEzVnpkRzl0UVhSMGNtbGlkWFJsS0hCeWIzQkxaWGtwS1NCN1hHNGdJQ0FnSUNBZ0lFSmhZMnRsYm1SSlJFOXdaWEpoZEdsdmJuTXVkWEJrWVhSbFVISnZjR1Z5ZEhsQ2VVbEVLRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVYM0p2YjNST2IyUmxTVVFzWEc0Z0lDQWdJQ0FnSUNBZ2NISnZjRXRsZVN4Y2JpQWdJQ0FnSUNBZ0lDQnVaWGgwVUhKdmNGeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCcFppQW9jM1I1YkdWVmNHUmhkR1Z6S1NCN1hHNGdJQ0FnSUNCQ1lXTnJaVzVrU1VSUGNHVnlZWFJwYjI1ekxuVndaR0YwWlZOMGVXeGxjMEo1U1VRb1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDNKdmIzUk9iMlJsU1VRc1hHNGdJQ0FnSUNBZ0lITjBlV3hsVlhCa1lYUmxjMXh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbFkyOXVZMmxzWlhNZ2RHaGxJR05vYVd4a2NtVnVJSGRwZEdnZ2RHaGxJSFpoY21sdmRYTWdjSEp2Y0dWeWRHbGxjeUIwYUdGMElHRm1abVZqZENCMGFHVmNiaUFnSUNvZ1kyaHBiR1J5Wlc0Z1kyOXVkR1Z1ZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHeGhjM1JRY205d2MxeHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjU5SUhSeVlXNXpZV04wYVc5dVhHNGdJQ0FxTDF4dUlDQmZkWEJrWVhSbFJFOU5RMmhwYkdSeVpXNDZJR1oxYm1OMGFXOXVLR3hoYzNSUWNtOXdjeXdnZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcElIdGNiaUFnSUNCMllYSWdibVY0ZEZCeWIzQnpJRDBnZEdocGN5NWZZM1Z5Y21WdWRFVnNaVzFsYm5RdWNISnZjSE03WEc1Y2JpQWdJQ0IyWVhJZ2JHRnpkRU52Ym5SbGJuUWdQVnh1SUNBZ0lDQWdRMDlPVkVWT1ZGOVVXVkJGVTF0MGVYQmxiMllnYkdGemRGQnliM0J6TG1Ob2FXeGtjbVZ1WFNBL0lHeGhjM1JRY205d2N5NWphR2xzWkhKbGJpQTZJRzUxYkd3N1hHNGdJQ0FnZG1GeUlHNWxlSFJEYjI1MFpXNTBJRDFjYmlBZ0lDQWdJRU5QVGxSRlRsUmZWRmxRUlZOYmRIbHdaVzltSUc1bGVIUlFjbTl3Y3k1amFHbHNaSEpsYmwwZ1B5QnVaWGgwVUhKdmNITXVZMmhwYkdSeVpXNGdPaUJ1ZFd4c08xeHVYRzRnSUNBZ2RtRnlJR3hoYzNSSWRHMXNJRDFjYmlBZ0lDQWdJR3hoYzNSUWNtOXdjeTVrWVc1blpYSnZkWE5zZVZObGRFbHVibVZ5U0ZSTlRDQW1KbHh1SUNBZ0lDQWdiR0Z6ZEZCeWIzQnpMbVJoYm1kbGNtOTFjMng1VTJWMFNXNXVaWEpJVkUxTUxsOWZhSFJ0YkR0Y2JpQWdJQ0IyWVhJZ2JtVjRkRWgwYld3Z1BWeHVJQ0FnSUNBZ2JtVjRkRkJ5YjNCekxtUmhibWRsY205MWMyeDVVMlYwU1c1dVpYSklWRTFNSUNZbVhHNGdJQ0FnSUNCdVpYaDBVSEp2Y0hNdVpHRnVaMlZ5YjNWemJIbFRaWFJKYm01bGNraFVUVXd1WDE5b2RHMXNPMXh1WEc0Z0lDQWdMeThnVG05MFpTQjBhR1VnZFhObElHOW1JR0FoUFdBZ2QyaHBZMmdnWTJobFkydHpJR1p2Y2lCdWRXeHNJRzl5SUhWdVpHVm1hVzVsWkM1Y2JpQWdJQ0IyWVhJZ2JHRnpkRU5vYVd4a2NtVnVJRDBnYkdGemRFTnZiblJsYm5RZ0lUMGdiblZzYkNBL0lHNTFiR3dnT2lCc1lYTjBVSEp2Y0hNdVkyaHBiR1J5Wlc0N1hHNGdJQ0FnZG1GeUlHNWxlSFJEYUdsc1pISmxiaUE5SUc1bGVIUkRiMjUwWlc1MElDRTlJRzUxYkd3Z1B5QnVkV3hzSURvZ2JtVjRkRkJ5YjNCekxtTm9hV3hrY21WdU8xeHVYRzRnSUNBZ0x5OGdTV1lnZDJVbmNtVWdjM2RwZEdOb2FXNW5JR1p5YjIwZ1kyaHBiR1J5Wlc0Z2RHOGdZMjl1ZEdWdWRDOW9kRzFzSUc5eUlIWnBZMlVnZG1WeWMyRXNJSEpsYlc5MlpWeHVJQ0FnSUM4dklIUm9aU0J2YkdRZ1kyOXVkR1Z1ZEZ4dUlDQWdJSFpoY2lCc1lYTjBTR0Z6UTI5dWRHVnVkRTl5U0hSdGJDQTlJR3hoYzNSRGIyNTBaVzUwSUNFOUlHNTFiR3dnZkh3Z2JHRnpkRWgwYld3Z0lUMGdiblZzYkR0Y2JpQWdJQ0IyWVhJZ2JtVjRkRWhoYzBOdmJuUmxiblJQY2toMGJXd2dQU0J1WlhoMFEyOXVkR1Z1ZENBaFBTQnVkV3hzSUh4OElHNWxlSFJJZEcxc0lDRTlJRzUxYkd3N1hHNGdJQ0FnYVdZZ0tHeGhjM1JEYUdsc1pISmxiaUFoUFNCdWRXeHNJQ1ltSUc1bGVIUkRhR2xzWkhKbGJpQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQjBhR2x6TG5Wd1pHRjBaVU5vYVd4a2NtVnVLRzUxYkd3c0lIUnlZVzV6WVdOMGFXOXVMQ0JqYjI1MFpYaDBLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR3hoYzNSSVlYTkRiMjUwWlc1MFQzSklkRzFzSUNZbUlDRnVaWGgwU0dGelEyOXVkR1Z1ZEU5eVNIUnRiQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NTFjR1JoZEdWVVpYaDBRMjl1ZEdWdWRDZ25KeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c1bGVIUkRiMjUwWlc1MElDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHbG1JQ2hzWVhOMFEyOXVkR1Z1ZENBaFBUMGdibVY0ZEVOdmJuUmxiblFwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUxY0dSaGRHVlVaWGgwUTI5dWRHVnVkQ2duSnlBcklHNWxlSFJEYjI1MFpXNTBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzVsZUhSSWRHMXNJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJR2xtSUNoc1lYTjBTSFJ0YkNBaFBUMGdibVY0ZEVoMGJXd3BJSHRjYmlBZ0lDQWdJQ0FnUW1GamEyVnVaRWxFVDNCbGNtRjBhVzl1Y3k1MWNHUmhkR1ZKYm01bGNraFVUVXhDZVVsRUtGeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXNYRzRnSUNBZ0lDQWdJQ0FnYm1WNGRFaDBiV3hjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0c1bGVIUkRhR2xzWkhKbGJpQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQjBhR2x6TG5Wd1pHRjBaVU5vYVd4a2NtVnVLRzVsZUhSRGFHbHNaSEpsYml3Z2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUXBPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUkdWemRISnZlWE1nWVd4c0lHVjJaVzUwSUhKbFoybHpkSEpoZEdsdmJuTWdabTl5SUhSb2FYTWdhVzV6ZEdGdVkyVXVJRVJ2WlhNZ2JtOTBJSEpsYlc5MlpTQm1jbTl0WEc0Z0lDQXFJSFJvWlNCRVQwMHVJRlJvWVhRZ2JYVnpkQ0JpWlNCa2IyNWxJR0o1SUhSb1pTQndZWEpsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnZFc1dGIzVnVkRU52YlhCdmJtVnVkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnZEdocGN5NTFibTF2ZFc1MFEyaHBiR1J5Wlc0b0tUdGNiaUFnSUNCU1pXRmpkRUp5YjNkelpYSkZkbVZ1ZEVWdGFYUjBaWEl1WkdWc1pYUmxRV3hzVEdsemRHVnVaWEp6S0hSb2FYTXVYM0p2YjNST2IyUmxTVVFwTzF4dUlDQWdJRkpsWVdOMFEyOXRjRzl1Wlc1MFFuSnZkM05sY2tWdWRtbHliMjV0Wlc1MExuVnViVzkxYm5SSlJFWnliMjFGYm5acGNtOXViV1Z1ZENoMGFHbHpMbDl5YjI5MFRtOWtaVWxFS1R0Y2JpQWdJQ0IwYUdsekxsOXliMjkwVG05a1pVbEVJRDBnYm5Wc2JEdGNiaUFnZlZ4dVhHNTlPMXh1WEc1U1pXRmpkRkJsY21ZdWJXVmhjM1Z5WlUxbGRHaHZaSE1vVW1WaFkzUkVUMDFEYjIxd2IyNWxiblFzSUNkU1pXRmpkRVJQVFVOdmJYQnZibVZ1ZENjc0lIdGNiaUFnYlc5MWJuUkRiMjF3YjI1bGJuUTZJQ2R0YjNWdWRFTnZiWEJ2Ym1WdWRDY3NYRzRnSUhWd1pHRjBaVU52YlhCdmJtVnVkRG9nSjNWd1pHRjBaVU52YlhCdmJtVnVkQ2RjYm4wcE8xeHVYRzVoYzNOcFoyNG9YRzRnSUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwTG5CeWIzUnZkSGx3WlN4Y2JpQWdVbVZoWTNSRVQwMURiMjF3YjI1bGJuUXVUV2w0YVc0c1hHNGdJRkpsWVdOMFRYVnNkR2xEYUdsc1pDNU5hWGhwYmx4dUtUdGNibHh1VW1WaFkzUkVUMDFEYjIxd2IyNWxiblF1YVc1cVpXTjBhVzl1SUQwZ2UxeHVJQ0JwYm1wbFkzUkpSRTl3WlhKaGRHbHZibk02SUdaMWJtTjBhVzl1S0VsRVQzQmxjbUYwYVc5dWN5a2dlMXh1SUNBZ0lGSmxZV04wUkU5TlEyOXRjRzl1Wlc1MExrSmhZMnRsYm1SSlJFOXdaWEpoZEdsdmJuTWdQU0JDWVdOclpXNWtTVVJQY0dWeVlYUnBiMjV6SUQwZ1NVUlBjR1Z5WVhScGIyNXpPMXh1SUNCOVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01Gb3JtXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBMb2NhbEV2ZW50VHJhcE1peGluID0gcmVxdWlyZShcIi4vTG9jYWxFdmVudFRyYXBNaXhpblwiKTtcbnZhciBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXCIpO1xudmFyIFJlYWN0Q2xhc3MgPSByZXF1aXJlKFwiLi9SZWFjdENsYXNzXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcblxudmFyIGZvcm0gPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSgnZm9ybScpO1xuXG4vKipcbiAqIFNpbmNlIG9uU3VibWl0IGRvZXNuJ3QgYnViYmxlIE9SIGNhcHR1cmUgb24gdGhlIHRvcCBsZXZlbCBpbiBJRTgsIHdlIG5lZWRcbiAqIHRvIGNhcHR1cmUgaXQgb24gdGhlIDxmb3JtPiBlbGVtZW50IGl0c2VsZi4gVGhlcmUgYXJlIGxvdHMgb2YgaGFja3Mgd2UgY291bGRcbiAqIGRvIHRvIGFjY29tcGxpc2ggdGhpcywgYnV0IHRoZSBtb3N0IHJlbGlhYmxlIGlzIHRvIG1ha2UgPGZvcm0+IGFcbiAqIGNvbXBvc2l0ZSBjb21wb25lbnQgYW5kIHVzZSBgY29tcG9uZW50RGlkTW91bnRgIHRvIGF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlcnMuXG4gKi9cbnZhciBSZWFjdERPTUZvcm0gPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTUZvcm0nLFxuICB0YWdOYW1lOiAnRk9STScsXG5cbiAgbWl4aW5zOiBbUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4sIExvY2FsRXZlbnRUcmFwTWl4aW5dLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgLy8gVE9ETzogSW5zdGVhZCBvZiB1c2luZyBgUmVhY3RET01gIGRpcmVjdGx5LCB3ZSBzaG91bGQgdXNlIEpTWC4gSG93ZXZlcixcbiAgICAvLyBganNoaW50YCBmYWlscyB0byBwYXJzZSBKU1ggc28gaW4gb3JkZXIgZm9yIGxpbnRpbmcgdG8gd29yayBpbiB0aGUgb3BlblxuICAgIC8vIHNvdXJjZSByZXBvLCB3ZSBuZWVkIHRvIGp1c3QgdXNlIGBSZWFjdERPTS5mb3JtYC5cbiAgICByZXR1cm4gZm9ybSh0aGlzLnByb3BzKTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50cmFwQnViYmxlZEV2ZW50KEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXMudG9wUmVzZXQsICdyZXNldCcpO1xuICAgIHRoaXMudHJhcEJ1YmJsZWRFdmVudChFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzLnRvcFN1Ym1pdCwgJ3N1Ym1pdCcpO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUZvcm07XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NSURPcGVyYXRpb25zXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbi8qanNsaW50IGV2aWw6IHRydWUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ1NTUHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZShcIi4vQ1NTUHJvcGVydHlPcGVyYXRpb25zXCIpO1xudmFyIERPTUNoaWxkcmVuT3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0RPTUNoaWxkcmVuT3BlcmF0aW9uc1wiKTtcbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHNldElubmVySFRNTCA9IHJlcXVpcmUoXCIuL3NldElubmVySFRNTFwiKTtcblxuLyoqXG4gKiBFcnJvcnMgZm9yIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGJlIHVwZGF0ZWQgd2l0aCBgdXBkYXRlUHJvcGVydHlCeUlkKClgLlxuICpcbiAqIEB0eXBlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMgPSB7XG4gIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOlxuICAgICdgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgc2V0IHVzaW5nIGB1cGRhdGVJbm5lckhUTUxCeUlEKClgLicsXG4gIHN0eWxlOiAnYHN0eWxlYCBtdXN0IGJlIHNldCB1c2luZyBgdXBkYXRlU3R5bGVzQnlJRCgpYC4nXG59O1xuXG4vKipcbiAqIE9wZXJhdGlvbnMgdXNlZCB0byBwcm9jZXNzIHVwZGF0ZXMgdG8gRE9NIG5vZGVzLiBUaGlzIGlzIG1hZGUgaW5qZWN0YWJsZSB2aWFcbiAqIGBSZWFjdERPTUNvbXBvbmVudC5CYWNrZW5kSURPcGVyYXRpb25zYC5cbiAqL1xudmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0ge1xuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUgd2l0aCBuZXcgcHJvcGVydHkgdmFsdWVzLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgdG9cbiAgICogdXBkYXRlIERPTSBwcm9wZXJ0aWVzIGluIGBET01Qcm9wZXJ0eWAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgbm9kZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEEgdmFsaWQgcHJvcGVydHkgbmFtZSwgc2VlIGBET01Qcm9wZXJ0eWAuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgTmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1cGRhdGVQcm9wZXJ0eUJ5SUQ6IGZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBub2RlID0gUmVhY3RNb3VudC5nZXROb2RlKGlkKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIUlOVkFMSURfUFJPUEVSVFlfRVJST1JTLmhhc093blByb3BlcnR5KG5hbWUpLFxuICAgICAgJ3VwZGF0ZVByb3BlcnR5QnlJRCguLi4pOiAlcycsXG4gICAgICBJTlZBTElEX1BST1BFUlRZX0VSUk9SU1tuYW1lXVxuICAgICkgOiBpbnZhcmlhbnQoIUlOVkFMSURfUFJPUEVSVFlfRVJST1JTLmhhc093blByb3BlcnR5KG5hbWUpKSk7XG5cbiAgICAvLyBJZiB3ZSdyZSB1cGRhdGluZyB0byBudWxsIG9yIHVuZGVmaW5lZCwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgcHJvcGVydHlcbiAgICAvLyBmcm9tIHRoZSBET00gbm9kZSBpbnN0ZWFkIG9mIGluYWR2ZXJ0YW50bHkgc2V0dGluZyB0byBhIHN0cmluZy4gVGhpc1xuICAgIC8vIGJyaW5ncyB1cyBpbiBsaW5lIHdpdGggdGhlIHNhbWUgYmVoYXZpb3Igd2UgaGF2ZSBvbiBpbml0aWFsIHJlbmRlci5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBET00gbm9kZSB0byByZW1vdmUgYSBwcm9wZXJ0eS4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIHJlbW92ZVxuICAgKiBET00gcHJvcGVydGllcyBpbiBgRE9NUHJvcGVydHlgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIG5vZGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBIHByb3BlcnR5IG5hbWUgdG8gcmVtb3ZlLCBzZWUgYERPTVByb3BlcnR5YC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBkZWxldGVQcm9wZXJ0eUJ5SUQ6IGZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBub2RlID0gUmVhY3RNb3VudC5nZXROb2RlKGlkKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIUlOVkFMSURfUFJPUEVSVFlfRVJST1JTLmhhc093blByb3BlcnR5KG5hbWUpLFxuICAgICAgJ3VwZGF0ZVByb3BlcnR5QnlJRCguLi4pOiAlcycsXG4gICAgICBJTlZBTElEX1BST1BFUlRZX0VSUk9SU1tuYW1lXVxuICAgICkgOiBpbnZhcmlhbnQoIUlOVkFMSURfUFJPUEVSVFlfRVJST1JTLmhhc093blByb3BlcnR5KG5hbWUpKSk7XG4gICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUgd2l0aCBuZXcgc3R5bGUgdmFsdWVzLiBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhcyAnJyxcbiAgICogdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IHN0eWxlcyBNYXBwaW5nIGZyb20gc3R5bGVzIHRvIHZhbHVlcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1cGRhdGVTdHlsZXNCeUlEOiBmdW5jdGlvbihpZCwgc3R5bGVzKSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIENTU1Byb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvclN0eWxlcyhub2RlLCBzdHlsZXMpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUncyBpbm5lckhUTUwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgbm9kZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIEFuIEhUTUwgc3RyaW5nLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVwZGF0ZUlubmVySFRNTEJ5SUQ6IGZ1bmN0aW9uKGlkLCBodG1sKSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIHNldElubmVySFRNTChub2RlLCBodG1sKTtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlcyBhIERPTSBub2RlJ3MgdGV4dCBjb250ZW50IHNldCBieSBgcHJvcHMuY29udGVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgbm9kZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRleHQgY29udGVudC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1cGRhdGVUZXh0Q29udGVudEJ5SUQ6IGZ1bmN0aW9uKGlkLCBjb250ZW50KSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy51cGRhdGVUZXh0Q29udGVudChub2RlLCBjb250ZW50KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYSBET00gbm9kZSB0aGF0IGV4aXN0cyBpbiB0aGUgZG9jdW1lbnQgd2l0aCBtYXJrdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiBjaGlsZCB0byBiZSByZXBsYWNlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBEYW5nZXJvdXMgbWFya3VwIHRvIGluamVjdCBpbiBwbGFjZSBvZiBjaGlsZC5cbiAgICogQGludGVybmFsXG4gICAqIEBzZWUge0Rhbmdlci5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cH1cbiAgICovXG4gIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDogZnVuY3Rpb24oaWQsIG1hcmt1cCkge1xuICAgIHZhciBub2RlID0gUmVhY3RNb3VudC5nZXROb2RlKGlkKTtcbiAgICBET01DaGlsZHJlbk9wZXJhdGlvbnMuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAobm9kZSwgbWFya3VwKTtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbXBvbmVudCdzIGNoaWxkcmVuIGJ5IHByb2Nlc3NpbmcgYSBzZXJpZXMgb2YgdXBkYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheTxvYmplY3Q+fSB1cGRhdGVzIExpc3Qgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAcGFyYW0ge2FycmF5PHN0cmluZz59IG1hcmt1cCBMaXN0IG9mIG1hcmt1cCBzdHJpbmdzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlczogZnVuY3Rpb24odXBkYXRlcywgbWFya3VwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB1cGRhdGVzW2ldLnBhcmVudE5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUodXBkYXRlc1tpXS5wYXJlbnRJRCk7XG4gICAgfVxuICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy5wcm9jZXNzVXBkYXRlcyh1cGRhdGVzLCBtYXJrdXApO1xuICB9XG59O1xuXG5SZWFjdFBlcmYubWVhc3VyZU1ldGhvZHMoUmVhY3RET01JRE9wZXJhdGlvbnMsICdSZWFjdERPTUlET3BlcmF0aW9ucycsIHtcbiAgdXBkYXRlUHJvcGVydHlCeUlEOiAndXBkYXRlUHJvcGVydHlCeUlEJyxcbiAgZGVsZXRlUHJvcGVydHlCeUlEOiAnZGVsZXRlUHJvcGVydHlCeUlEJyxcbiAgdXBkYXRlU3R5bGVzQnlJRDogJ3VwZGF0ZVN0eWxlc0J5SUQnLFxuICB1cGRhdGVJbm5lckhUTUxCeUlEOiAndXBkYXRlSW5uZXJIVE1MQnlJRCcsXG4gIHVwZGF0ZVRleHRDb250ZW50QnlJRDogJ3VwZGF0ZVRleHRDb250ZW50QnlJRCcsXG4gIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDogJ2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRCcsXG4gIGRhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlczogJ2Rhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlcydcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSURPcGVyYXRpb25zO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVUMDFKUkU5d1pYSmhkR2x2Ym5NdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBSRTlOU1VSUGNHVnlZWFJwYjI1elhHNGdLaUJBZEhsd1pXTm9aV05yY3lCemRHRjBhV010YjI1c2VWeHVJQ292WEc1Y2JpOHFhbk5zYVc1MElHVjJhV3c2SUhSeWRXVWdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdRMU5UVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6SUQwZ2NtVnhkV2x5WlNoY0lpNHZRMU5UVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6WENJcE8xeHVkbUZ5SUVSUFRVTm9hV3hrY21WdVQzQmxjbUYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBSUFRVTm9hV3hrY21WdVQzQmxjbUYwYVc5dWMxd2lLVHRjYm5aaGNpQkVUMDFRY205d1pYSjBlVTl3WlhKaGRHbHZibk1nUFNCeVpYRjFhWEpsS0Z3aUxpOUVUMDFRY205d1pYSjBlVTl3WlhKaGRHbHZibk5jSWlrN1hHNTJZWElnVW1WaFkzUk5iM1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFRXOTFiblJjSWlrN1hHNTJZWElnVW1WaFkzUlFaWEptSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSUVpYSm1YQ0lwTzF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dWRtRnlJSE5sZEVsdWJtVnlTRlJOVENBOUlISmxjWFZwY21Vb1hDSXVMM05sZEVsdWJtVnlTRlJOVEZ3aUtUdGNibHh1THlvcVhHNGdLaUJGY25KdmNuTWdabTl5SUhCeWIzQmxjblJwWlhNZ2RHaGhkQ0J6YUc5MWJHUWdibTkwSUdKbElIVndaR0YwWldRZ2QybDBhQ0JnZFhCa1lYUmxVSEp2Y0dWeWRIbENlVWxrS0NsZ0xseHVJQ3BjYmlBcUlFQjBlWEJsSUh0dlltcGxZM1I5WEc0Z0tpQkFjSEpwZG1GMFpWeHVJQ292WEc1MllYSWdTVTVXUVV4SlJGOVFVazlRUlZKVVdWOUZVbEpQVWxNZ1BTQjdYRzRnSUdSaGJtZGxjbTkxYzJ4NVUyVjBTVzV1WlhKSVZFMU1PbHh1SUNBZ0lDZGdaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV4Z0lHMTFjM1FnWW1VZ2MyVjBJSFZ6YVc1bklHQjFjR1JoZEdWSmJtNWxja2hVVFV4Q2VVbEVLQ2xnTGljc1hHNGdJSE4wZVd4bE9pQW5ZSE4wZVd4bFlDQnRkWE4wSUdKbElITmxkQ0IxYzJsdVp5QmdkWEJrWVhSbFUzUjViR1Z6UW5sSlJDZ3BZQzRuWEc1OU8xeHVYRzR2S2lwY2JpQXFJRTl3WlhKaGRHbHZibk1nZFhObFpDQjBieUJ3Y205alpYTnpJSFZ3WkdGMFpYTWdkRzhnUkU5TklHNXZaR1Z6TGlCVWFHbHpJR2x6SUcxaFpHVWdhVzVxWldOMFlXSnNaU0IyYVdGY2JpQXFJR0JTWldGamRFUlBUVU52YlhCdmJtVnVkQzVDWVdOclpXNWtTVVJQY0dWeVlYUnBiMjV6WUM1Y2JpQXFMMXh1ZG1GeUlGSmxZV04wUkU5TlNVUlBjR1Z5WVhScGIyNXpJRDBnZTF4dVhHNGdJQzhxS2x4dUlDQWdLaUJWY0dSaGRHVnpJR0VnUkU5TklHNXZaR1VnZDJsMGFDQnVaWGNnY0hKdmNHVnlkSGtnZG1Gc2RXVnpMaUJVYUdseklITm9iM1ZzWkNCdmJteDVJR0psSUhWelpXUWdkRzljYmlBZ0lDb2dkWEJrWVhSbElFUlBUU0J3Y205d1pYSjBhV1Z6SUdsdUlHQkVUMDFRY205d1pYSjBlV0F1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkpSQ0J2WmlCMGFHVWdibTlrWlNCMGJ5QjFjR1JoZEdVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbElFRWdkbUZzYVdRZ2NISnZjR1Z5ZEhrZ2JtRnRaU3dnYzJWbElHQkVUMDFRY205d1pYSjBlV0F1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdLbjBnZG1Gc2RXVWdUbVYzSUhaaGJIVmxJRzltSUhSb1pTQndjbTl3WlhKMGVTNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQjFjR1JoZEdWUWNtOXdaWEowZVVKNVNVUTZJR1oxYm1OMGFXOXVLR2xrTENCdVlXMWxMQ0IyWVd4MVpTa2dlMXh1SUNBZ0lIWmhjaUJ1YjJSbElEMGdVbVZoWTNSTmIzVnVkQzVuWlhST2IyUmxLR2xrS1R0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJVWxPVmtGTVNVUmZVRkpQVUVWU1ZGbGZSVkpTVDFKVExtaGhjMDkzYmxCeWIzQmxjblI1S0c1aGJXVXBMRnh1SUNBZ0lDQWdKM1Z3WkdGMFpWQnliM0JsY25SNVFubEpSQ2d1TGk0cE9pQWxjeWNzWEc0Z0lDQWdJQ0JKVGxaQlRFbEVYMUJTVDFCRlVsUlpYMFZTVWs5U1UxdHVZVzFsWFZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lVbE9Wa0ZNU1VSZlVGSlBVRVZTVkZsZlJWSlNUMUpUTG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcEtTazdYRzVjYmlBZ0lDQXZMeUJKWmlCM1pTZHlaU0IxY0dSaGRHbHVaeUIwYnlCdWRXeHNJRzl5SUhWdVpHVm1hVzVsWkN3Z2QyVWdjMmh2ZFd4a0lISmxiVzkyWlNCMGFHVWdjSEp2Y0dWeWRIbGNiaUFnSUNBdkx5Qm1jbTl0SUhSb1pTQkVUMDBnYm05a1pTQnBibk4wWldGa0lHOW1JR2x1WVdSMlpYSjBZVzUwYkhrZ2MyVjBkR2x1WnlCMGJ5QmhJSE4wY21sdVp5NGdWR2hwYzF4dUlDQWdJQzh2SUdKeWFXNW5jeUIxY3lCcGJpQnNhVzVsSUhkcGRHZ2dkR2hsSUhOaGJXVWdZbVZvWVhacGIzSWdkMlVnYUdGMlpTQnZiaUJwYm1sMGFXRnNJSEpsYm1SbGNpNWNiaUFnSUNCcFppQW9kbUZzZFdVZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpMbk5sZEZaaGJIVmxSbTl5VUhKdmNHVnlkSGtvYm05a1pTd2dibUZ0WlN3Z2RtRnNkV1VwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQkVUMDFRY205d1pYSjBlVTl3WlhKaGRHbHZibk11WkdWc1pYUmxWbUZzZFdWR2IzSlFjbTl3WlhKMGVTaHViMlJsTENCdVlXMWxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWd1pHRjBaWE1nWVNCRVQwMGdibTlrWlNCMGJ5QnlaVzF2ZG1VZ1lTQndjbTl3WlhKMGVTNGdWR2hwY3lCemFHOTFiR1FnYjI1c2VTQmlaU0IxYzJWa0lIUnZJSEpsYlc5MlpWeHVJQ0FnS2lCRVQwMGdjSEp2Y0dWeWRHbGxjeUJwYmlCZ1JFOU5VSEp2Y0dWeWRIbGdMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1NVUWdiMllnZEdobElHNXZaR1VnZEc4Z2RYQmtZWFJsTGx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdibUZ0WlNCQklIQnliM0JsY25SNUlHNWhiV1VnZEc4Z2NtVnRiM1psTENCelpXVWdZRVJQVFZCeWIzQmxjblI1WUM1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCa1pXeGxkR1ZRY205d1pYSjBlVUo1U1VRNklHWjFibU4wYVc5dUtHbGtMQ0J1WVcxbExDQjJZV3gxWlNrZ2UxeHVJQ0FnSUhaaGNpQnViMlJsSUQwZ1VtVmhZM1JOYjNWdWRDNW5aWFJPYjJSbEtHbGtLVHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lVbE9Wa0ZNU1VSZlVGSlBVRVZTVkZsZlJWSlNUMUpUTG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcExGeHVJQ0FnSUNBZ0ozVndaR0YwWlZCeWIzQmxjblI1UW5sSlJDZ3VMaTRwT2lBbGN5Y3NYRzRnSUNBZ0lDQkpUbFpCVEVsRVgxQlNUMUJGVWxSWlgwVlNVazlTVTF0dVlXMWxYVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVVsT1ZrRk1TVVJmVUZKUFVFVlNWRmxmUlZKU1QxSlRMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwS1NrN1hHNGdJQ0FnUkU5TlVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1ekxtUmxiR1YwWlZaaGJIVmxSbTl5VUhKdmNHVnlkSGtvYm05a1pTd2dibUZ0WlN3Z2RtRnNkV1VwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlZjR1JoZEdWeklHRWdSRTlOSUc1dlpHVWdkMmwwYUNCdVpYY2djM1I1YkdVZ2RtRnNkV1Z6TGlCSlppQmhJSFpoYkhWbElHbHpJSE53WldOcFptbGxaQ0JoY3lBbkp5eGNiaUFnSUNvZ2RHaGxJR052Y25KbGMzQnZibVJwYm1jZ2MzUjViR1VnY0hKdmNHVnlkSGtnZDJsc2JDQmlaU0IxYm5ObGRDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR2xrSUVsRUlHOW1JSFJvWlNCdWIyUmxJSFJ2SUhWd1pHRjBaUzVjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlITjBlV3hsY3lCTllYQndhVzVuSUdaeWIyMGdjM1I1YkdWeklIUnZJSFpoYkhWbGN5NWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQjFjR1JoZEdWVGRIbHNaWE5DZVVsRU9pQm1kVzVqZEdsdmJpaHBaQ3dnYzNSNWJHVnpLU0I3WEc0Z0lDQWdkbUZ5SUc1dlpHVWdQU0JTWldGamRFMXZkVzUwTG1kbGRFNXZaR1VvYVdRcE8xeHVJQ0FnSUVOVFUxQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5NXpaWFJXWVd4MVpVWnZjbE4wZVd4bGN5aHViMlJsTENCemRIbHNaWE1wTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlZjR1JoZEdWeklHRWdSRTlOSUc1dlpHVW5jeUJwYm01bGNraFVUVXd1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkpSQ0J2WmlCMGFHVWdibTlrWlNCMGJ5QjFjR1JoZEdVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JvZEcxc0lFRnVJRWhVVFV3Z2MzUnlhVzVuTGx4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUhWd1pHRjBaVWx1Ym1WeVNGUk5URUo1U1VRNklHWjFibU4wYVc5dUtHbGtMQ0JvZEcxc0tTQjdYRzRnSUNBZ2RtRnlJRzV2WkdVZ1BTQlNaV0ZqZEUxdmRXNTBMbWRsZEU1dlpHVW9hV1FwTzF4dUlDQWdJSE5sZEVsdWJtVnlTRlJOVENodWIyUmxMQ0JvZEcxc0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVlhCa1lYUmxjeUJoSUVSUFRTQnViMlJsSjNNZ2RHVjRkQ0JqYjI1MFpXNTBJSE5sZENCaWVTQmdjSEp2Y0hNdVkyOXVkR1Z1ZEdBdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnBaQ0JKUkNCdlppQjBhR1VnYm05a1pTQjBieUIxY0dSaGRHVXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCamIyNTBaVzUwSUZSbGVIUWdZMjl1ZEdWdWRDNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQjFjR1JoZEdWVVpYaDBRMjl1ZEdWdWRFSjVTVVE2SUdaMWJtTjBhVzl1S0dsa0xDQmpiMjUwWlc1MEtTQjdYRzRnSUNBZ2RtRnlJRzV2WkdVZ1BTQlNaV0ZqZEUxdmRXNTBMbWRsZEU1dlpHVW9hV1FwTzF4dUlDQWdJRVJQVFVOb2FXeGtjbVZ1VDNCbGNtRjBhVzl1Y3k1MWNHUmhkR1ZVWlhoMFEyOXVkR1Z1ZENodWIyUmxMQ0JqYjI1MFpXNTBLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVndiR0ZqWlhNZ1lTQkVUMDBnYm05a1pTQjBhR0YwSUdWNGFYTjBjeUJwYmlCMGFHVWdaRzlqZFcxbGJuUWdkMmwwYUNCdFlYSnJkWEF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkpSQ0J2WmlCamFHbHNaQ0IwYnlCaVpTQnlaWEJzWVdObFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUcxaGNtdDFjQ0JFWVc1blpYSnZkWE1nYldGeWEzVndJSFJ2SUdsdWFtVmpkQ0JwYmlCd2JHRmpaU0J2WmlCamFHbHNaQzVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUlFQnpaV1VnZTBSaGJtZGxjaTVrWVc1blpYSnZkWE5zZVZKbGNHeGhZMlZPYjJSbFYybDBhRTFoY210MWNIMWNiaUFnSUNvdlhHNGdJR1JoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd1FubEpSRG9nWm5WdVkzUnBiMjRvYVdRc0lHMWhjbXQxY0NrZ2UxeHVJQ0FnSUhaaGNpQnViMlJsSUQwZ1VtVmhZM1JOYjNWdWRDNW5aWFJPYjJSbEtHbGtLVHRjYmlBZ0lDQkVUMDFEYUdsc1pISmxiazl3WlhKaGRHbHZibk11WkdGdVoyVnliM1Z6YkhsU1pYQnNZV05sVG05a1pWZHBkR2hOWVhKcmRYQW9ibTlrWlN3Z2JXRnlhM1Z3S1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWWEJrWVhSbGN5QmhJR052YlhCdmJtVnVkQ2R6SUdOb2FXeGtjbVZ1SUdKNUlIQnliMk5sYzNOcGJtY2dZU0J6WlhKcFpYTWdiMllnZFhCa1lYUmxjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0aGNuSmhlVHh2WW1wbFkzUStmU0IxY0dSaGRHVnpJRXhwYzNRZ2IyWWdkWEJrWVhSbElHTnZibVpwWjNWeVlYUnBiMjV6TGx4dUlDQWdLaUJBY0dGeVlXMGdlMkZ5Y21GNVBITjBjbWx1Wno1OUlHMWhjbXQxY0NCTWFYTjBJRzltSUcxaGNtdDFjQ0J6ZEhKcGJtZHpMbHh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJR1JoYm1kbGNtOTFjMng1VUhKdlkyVnpjME5vYVd4a2NtVnVWWEJrWVhSbGN6b2dablZ1WTNScGIyNG9kWEJrWVhSbGN5d2diV0Z5YTNWd0tTQjdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQjFjR1JoZEdWekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0IxY0dSaGRHVnpXMmxkTG5CaGNtVnVkRTV2WkdVZ1BTQlNaV0ZqZEUxdmRXNTBMbWRsZEU1dlpHVW9kWEJrWVhSbGMxdHBYUzV3WVhKbGJuUkpSQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lFUlBUVU5vYVd4a2NtVnVUM0JsY21GMGFXOXVjeTV3Y205alpYTnpWWEJrWVhSbGN5aDFjR1JoZEdWekxDQnRZWEpyZFhBcE8xeHVJQ0I5WEc1OU8xeHVYRzVTWldGamRGQmxjbVl1YldWaGMzVnlaVTFsZEdodlpITW9VbVZoWTNSRVQwMUpSRTl3WlhKaGRHbHZibk1zSUNkU1pXRmpkRVJQVFVsRVQzQmxjbUYwYVc5dWN5Y3NJSHRjYmlBZ2RYQmtZWFJsVUhKdmNHVnlkSGxDZVVsRU9pQW5kWEJrWVhSbFVISnZjR1Z5ZEhsQ2VVbEVKeXhjYmlBZ1pHVnNaWFJsVUhKdmNHVnlkSGxDZVVsRU9pQW5aR1ZzWlhSbFVISnZjR1Z5ZEhsQ2VVbEVKeXhjYmlBZ2RYQmtZWFJsVTNSNWJHVnpRbmxKUkRvZ0ozVndaR0YwWlZOMGVXeGxjMEo1U1VRbkxGeHVJQ0IxY0dSaGRHVkpibTVsY2toVVRVeENlVWxFT2lBbmRYQmtZWFJsU1c1dVpYSklWRTFNUW5sSlJDY3NYRzRnSUhWd1pHRjBaVlJsZUhSRGIyNTBaVzUwUW5sSlJEb2dKM1Z3WkdGMFpWUmxlSFJEYjI1MFpXNTBRbmxKUkNjc1hHNGdJR1JoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd1FubEpSRG9nSjJSaGJtZGxjbTkxYzJ4NVVtVndiR0ZqWlU1dlpHVlhhWFJvVFdGeWEzVndRbmxKUkNjc1hHNGdJR1JoYm1kbGNtOTFjMng1VUhKdlkyVnpjME5vYVd4a2NtVnVWWEJrWVhSbGN6b2dKMlJoYm1kbGNtOTFjMng1VUhKdlkyVnpjME5vYVd4a2NtVnVWWEJrWVhSbGN5ZGNibjBwTzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wUkU5TlNVUlBjR1Z5WVhScGIyNXpPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUlmcmFtZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgTG9jYWxFdmVudFRyYXBNaXhpbiA9IHJlcXVpcmUoXCIuL0xvY2FsRXZlbnRUcmFwTWl4aW5cIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciBpZnJhbWUgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSgnaWZyYW1lJyk7XG5cbi8qKlxuICogU2luY2Ugb25Mb2FkIGRvZXNuJ3QgYnViYmxlIE9SIGNhcHR1cmUgb24gdGhlIHRvcCBsZXZlbCBpbiBJRTgsIHdlIG5lZWQgdG9cbiAqIGNhcHR1cmUgaXQgb24gdGhlIDxpZnJhbWU+IGVsZW1lbnQgaXRzZWxmLiBUaGVyZSBhcmUgbG90cyBvZiBoYWNrcyB3ZSBjb3VsZFxuICogZG8gdG8gYWNjb21wbGlzaCB0aGlzLCBidXQgdGhlIG1vc3QgcmVsaWFibGUgaXMgdG8gbWFrZSA8aWZyYW1lPiBhIGNvbXBvc2l0ZVxuICogY29tcG9uZW50IGFuZCB1c2UgYGNvbXBvbmVudERpZE1vdW50YCB0byBhdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXJzLlxuICovXG52YXIgUmVhY3RET01JZnJhbWUgPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTUlmcmFtZScsXG4gIHRhZ05hbWU6ICdJRlJBTUUnLFxuXG4gIG1peGluczogW1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluLCBMb2NhbEV2ZW50VHJhcE1peGluXSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBpZnJhbWUodGhpcy5wcm9wcyk7XG4gIH0sXG5cbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudHJhcEJ1YmJsZWRFdmVudChFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzLnRvcExvYWQsICdsb2FkJyk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSWZyYW1lO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NSW1nXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBMb2NhbEV2ZW50VHJhcE1peGluID0gcmVxdWlyZShcIi4vTG9jYWxFdmVudFRyYXBNaXhpblwiKTtcbnZhciBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXCIpO1xudmFyIFJlYWN0Q2xhc3MgPSByZXF1aXJlKFwiLi9SZWFjdENsYXNzXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcblxudmFyIGltZyA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdpbWcnKTtcblxuLyoqXG4gKiBTaW5jZSBvbkxvYWQgZG9lc24ndCBidWJibGUgT1IgY2FwdHVyZSBvbiB0aGUgdG9wIGxldmVsIGluIElFOCwgd2UgbmVlZCB0b1xuICogY2FwdHVyZSBpdCBvbiB0aGUgPGltZz4gZWxlbWVudCBpdHNlbGYuIFRoZXJlIGFyZSBsb3RzIG9mIGhhY2tzIHdlIGNvdWxkIGRvXG4gKiB0byBhY2NvbXBsaXNoIHRoaXMsIGJ1dCB0aGUgbW9zdCByZWxpYWJsZSBpcyB0byBtYWtlIDxpbWc+IGEgY29tcG9zaXRlXG4gKiBjb21wb25lbnQgYW5kIHVzZSBgY29tcG9uZW50RGlkTW91bnRgIHRvIGF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlcnMuXG4gKi9cbnZhciBSZWFjdERPTUltZyA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NSW1nJyxcbiAgdGFnTmFtZTogJ0lNRycsXG5cbiAgbWl4aW5zOiBbUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4sIExvY2FsRXZlbnRUcmFwTWl4aW5dLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGltZyh0aGlzLnByb3BzKTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50cmFwQnViYmxlZEV2ZW50KEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXMudG9wTG9hZCwgJ2xvYWQnKTtcbiAgICB0aGlzLnRyYXBCdWJibGVkRXZlbnQoRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcy50b3BFcnJvciwgJ2Vycm9yJyk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSW1nO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUlucHV0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXV0b0ZvY3VzTWl4aW4gPSByZXF1aXJlKFwiLi9BdXRvRm9jdXNNaXhpblwiKTtcbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgTGlua2VkVmFsdWVVdGlscyA9IHJlcXVpcmUoXCIuL0xpbmtlZFZhbHVlVXRpbHNcIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBpbnB1dCA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdpbnB1dCcpO1xuXG52YXIgaW5zdGFuY2VzQnlSZWFjdElEID0ge307XG5cbmZ1bmN0aW9uIGZvcmNlVXBkYXRlSWZNb3VudGVkKCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICBpZiAodGhpcy5pc01vdW50ZWQoKSkge1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYW4gPGlucHV0PiBuYXRpdmUgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgdGhlc2Ugb3B0aW9uYWxcbiAqIHByb3BzOiBgY2hlY2tlZGAsIGB2YWx1ZWAsIGBkZWZhdWx0Q2hlY2tlZGAsIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBJZiBgY2hlY2tlZGAgb3IgYHZhbHVlYCBhcmUgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9uc1xuICogdGhhdCBhZmZlY3QgdGhlIGNoZWNrZWQgc3RhdGUgb3IgdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgdGhleSBhcmUgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIG5vdFxuICogdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgcHJvcHMgbXVzdCBjaGFuZ2UgaW4gb3JkZXIgZm9yXG4gKiB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgdW5jaGVja2VkIChvciBgZGVmYXVsdENoZWNrZWRgKVxuICogd2l0aCBhbiBlbXB0eSB2YWx1ZSAob3IgYGRlZmF1bHRWYWx1ZWApLlxuICpcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMTAyNS90aGUtaW5wdXQtZWxlbWVudC5odG1sXG4gKi9cbnZhciBSZWFjdERPTUlucHV0ID0gUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiAnUmVhY3RET01JbnB1dCcsXG4gIHRhZ05hbWU6ICdJTlBVVCcsXG5cbiAgbWl4aW5zOiBbQXV0b0ZvY3VzTWl4aW4sIExpbmtlZFZhbHVlVXRpbHMuTWl4aW4sIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXSxcblxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5pdGlhbENoZWNrZWQ6IHRoaXMucHJvcHMuZGVmYXVsdENoZWNrZWQgfHwgZmFsc2UsXG4gICAgICBpbml0aWFsVmFsdWU6IGRlZmF1bHRWYWx1ZSAhPSBudWxsID8gZGVmYXVsdFZhbHVlIDogbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAvLyBDbG9uZSBgdGhpcy5wcm9wc2Agc28gd2UgZG9uJ3QgbXV0YXRlIHRoZSBpbnB1dC5cbiAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIHRoaXMucHJvcHMpO1xuXG4gICAgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBudWxsO1xuICAgIHByb3BzLmRlZmF1bHRWYWx1ZSA9IG51bGw7XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHRoaXMpO1xuICAgIHByb3BzLnZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogdGhpcy5zdGF0ZS5pbml0aWFsVmFsdWU7XG5cbiAgICB2YXIgY2hlY2tlZCA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0Q2hlY2tlZCh0aGlzKTtcbiAgICBwcm9wcy5jaGVja2VkID0gY2hlY2tlZCAhPSBudWxsID8gY2hlY2tlZCA6IHRoaXMuc3RhdGUuaW5pdGlhbENoZWNrZWQ7XG5cbiAgICBwcm9wcy5vbkNoYW5nZSA9IHRoaXMuX2hhbmRsZUNoYW5nZTtcblxuICAgIHJldHVybiBpbnB1dChwcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH0sXG5cbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpZCA9IFJlYWN0TW91bnQuZ2V0SUQodGhpcy5nZXRET01Ob2RlKCkpO1xuICAgIGluc3RhbmNlc0J5UmVhY3RJRFtpZF0gPSB0aGlzO1xuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLmdldERPTU5vZGUoKTtcbiAgICB2YXIgaWQgPSBSZWFjdE1vdW50LmdldElEKHJvb3ROb2RlKTtcbiAgICBkZWxldGUgaW5zdGFuY2VzQnlSZWFjdElEW2lkXTtcbiAgfSxcblxuICBjb21wb25lbnREaWRVcGRhdGU6IGZ1bmN0aW9uKHByZXZQcm9wcywgcHJldlN0YXRlLCBwcmV2Q29udGV4dCkge1xuICAgIHZhciByb290Tm9kZSA9IHRoaXMuZ2V0RE9NTm9kZSgpO1xuICAgIGlmICh0aGlzLnByb3BzLmNoZWNrZWQgIT0gbnVsbCkge1xuICAgICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yUHJvcGVydHkoXG4gICAgICAgIHJvb3ROb2RlLFxuICAgICAgICAnY2hlY2tlZCcsXG4gICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCB8fCBmYWxzZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yUHJvcGVydHkocm9vdE5vZGUsICd2YWx1ZScsICcnICsgdmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBfaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciByZXR1cm5WYWx1ZTtcbiAgICB2YXIgb25DaGFuZ2UgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldE9uQ2hhbmdlKHRoaXMpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBvbkNoYW5nZS5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSB1c2UgYXNhcCB0byB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2hcbiAgICAvLyBpcyBpbXBvcnRhbnQgd2hlbiB1c2luZyBjb250cm9sbGVkIGNvbXBvbmVudHMgd2l0aGluIGxheWVyczpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2OThcbiAgICBSZWFjdFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgdGhpcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMucHJvcHMubmFtZTtcbiAgICBpZiAodGhpcy5wcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgICAgdmFyIHJvb3ROb2RlID0gdGhpcy5nZXRET01Ob2RlKCk7XG4gICAgICB2YXIgcXVlcnlSb290ID0gcm9vdE5vZGU7XG5cbiAgICAgIHdoaWxlIChxdWVyeVJvb3QucGFyZW50Tm9kZSkge1xuICAgICAgICBxdWVyeVJvb3QgPSBxdWVyeVJvb3QucGFyZW50Tm9kZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYHJvb3ROb2RlLmZvcm1gIHdhcyBub24tbnVsbCwgdGhlbiB3ZSBjb3VsZCB0cnkgYGZvcm0uZWxlbWVudHNgLFxuICAgICAgLy8gYnV0IHRoYXQgc29tZXRpbWVzIGJlaGF2ZXMgc3RyYW5nZWx5IGluIElFOC4gV2UgY291bGQgYWxzbyB0cnkgdXNpbmdcbiAgICAgIC8vIGBmb3JtLmdldEVsZW1lbnRzQnlOYW1lYCwgYnV0IHRoYXQgd2lsbCBvbmx5IHJldHVybiBkaXJlY3QgY2hpbGRyZW5cbiAgICAgIC8vIGFuZCB3b24ndCBpbmNsdWRlIGlucHV0cyB0aGF0IHVzZSB0aGUgSFRNTDUgYGZvcm09YCBhdHRyaWJ1dGUuIFNpbmNlXG4gICAgICAvLyB0aGUgaW5wdXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gYSBmb3JtLCBsZXQncyBqdXN0IHVzZSB0aGUgZ2xvYmFsXG4gICAgICAvLyBgcXVlcnlTZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0IG1pc3MgYW55dGhpbmcuXG4gICAgICB2YXIgZ3JvdXAgPSBxdWVyeVJvb3QucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgJ2lucHV0W25hbWU9JyArIEpTT04uc3RyaW5naWZ5KCcnICsgbmFtZSkgKyAnXVt0eXBlPVwicmFkaW9cIl0nKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGdyb3VwTGVuID0gZ3JvdXAubGVuZ3RoOyBpIDwgZ3JvdXBMZW47IGkrKykge1xuICAgICAgICB2YXIgb3RoZXJOb2RlID0gZ3JvdXBbaV07XG4gICAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8XG4gICAgICAgICAgICBvdGhlck5vZGUuZm9ybSAhPT0gcm9vdE5vZGUuZm9ybSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdGhlcklEID0gUmVhY3RNb3VudC5nZXRJRChvdGhlck5vZGUpO1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIG90aGVySUQsXG4gICAgICAgICAgJ1JlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSAnICtcbiAgICAgICAgICAnc2FtZSBgbmFtZWAgaXMgbm90IHN1cHBvcnRlZC4nXG4gICAgICAgICkgOiBpbnZhcmlhbnQob3RoZXJJRCkpO1xuICAgICAgICB2YXIgb3RoZXJJbnN0YW5jZSA9IGluc3RhbmNlc0J5UmVhY3RJRFtvdGhlcklEXTtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICBvdGhlckluc3RhbmNlLFxuICAgICAgICAgICdSZWFjdERPTUlucHV0OiBVbmtub3duIHJhZGlvIGJ1dHRvbiBJRCAlcy4nLFxuICAgICAgICAgIG90aGVySURcbiAgICAgICAgKSA6IGludmFyaWFudChvdGhlckluc3RhbmNlKSk7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb250cm9sbGVkIHJhZGlvIGJ1dHRvbiBncm91cCwgZm9yY2luZyB0aGUgaW5wdXQgdGhhdFxuICAgICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgICAvLyBhcyBhcHByb3ByaWF0ZS5cbiAgICAgICAgUmVhY3RVcGRhdGVzLmFzYXAoZm9yY2VVcGRhdGVJZk1vdW50ZWQsIG90aGVySW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUlucHV0O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVUMDFKYm5CMWRDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JFVDAxSmJuQjFkRnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUVGMWRHOUdiMk4xYzAxcGVHbHVJRDBnY21WeGRXbHlaU2hjSWk0dlFYVjBiMFp2WTNWelRXbDRhVzVjSWlrN1hHNTJZWElnUkU5TlVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1eklEMGdjbVZ4ZFdseVpTaGNJaTR2UkU5TlVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1elhDSXBPMXh1ZG1GeUlFeHBibXRsWkZaaGJIVmxWWFJwYkhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlNYVc1clpXUldZV3gxWlZWMGFXeHpYQ0lwTzF4dWRtRnlJRkpsWVdOMFFuSnZkM05sY2tOdmJYQnZibVZ1ZEUxcGVHbHVJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JDY205M2MyVnlRMjl0Y0c5dVpXNTBUV2w0YVc1Y0lpazdYRzUyWVhJZ1VtVmhZM1JEYkdGemN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRMnhoYzNOY0lpazdYRzUyWVhJZ1VtVmhZM1JGYkdWdFpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYkdWdFpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFRXOTFiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEUxdmRXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFZYQmtZWFJsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFZYQmtZWFJsYzF3aUtUdGNibHh1ZG1GeUlHRnpjMmxuYmlBOUlISmxjWFZwY21Vb1hDSXVMMDlpYW1WamRDNWhjM05wWjI1Y0lpazdYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzUyWVhJZ2FXNXdkWFFnUFNCU1pXRmpkRVZzWlcxbGJuUXVZM0psWVhSbFJtRmpkRzl5ZVNnbmFXNXdkWFFuS1R0Y2JseHVkbUZ5SUdsdWMzUmhibU5sYzBKNVVtVmhZM1JKUkNBOUlIdDlPMXh1WEc1bWRXNWpkR2x2YmlCbWIzSmpaVlZ3WkdGMFpVbG1UVzkxYm5SbFpDZ3BJSHRjYmlBZ0x5cHFjMmhwYm5RZ2RtRnNhV1IwYUdsek9uUnlkV1VnS2k5Y2JpQWdhV1lnS0hSb2FYTXVhWE5OYjNWdWRHVmtLQ2twSUh0Y2JpQWdJQ0IwYUdsekxtWnZjbU5sVlhCa1lYUmxLQ2s3WEc0Z0lIMWNibjFjYmx4dUx5b3FYRzRnS2lCSmJYQnNaVzFsYm5SeklHRnVJRHhwYm5CMWRENGdibUYwYVhabElHTnZiWEJ2Ym1WdWRDQjBhR0YwSUdGc2JHOTNjeUJ6WlhSMGFXNW5JSFJvWlhObElHOXdkR2x2Ym1Gc1hHNGdLaUJ3Y205d2N6b2dZR05vWldOclpXUmdMQ0JnZG1Gc2RXVmdMQ0JnWkdWbVlYVnNkRU5vWldOclpXUmdMQ0JoYm1RZ1lHUmxabUYxYkhSV1lXeDFaV0F1WEc0Z0tseHVJQ29nU1dZZ1lHTm9aV05yWldSZ0lHOXlJR0IyWVd4MVpXQWdZWEpsSUc1dmRDQnpkWEJ3YkdsbFpDQW9iM0lnYm5Wc2JDOTFibVJsWm1sdVpXUXBMQ0IxYzJWeUlHRmpkR2x2Ym5OY2JpQXFJSFJvWVhRZ1lXWm1aV04wSUhSb1pTQmphR1ZqYTJWa0lITjBZWFJsSUc5eUlIWmhiSFZsSUhkcGJHd2dkSEpwWjJkbGNpQjFjR1JoZEdWeklIUnZJSFJvWlNCbGJHVnRaVzUwTGx4dUlDcGNiaUFxSUVsbUlIUm9aWGtnWVhKbElITjFjSEJzYVdWa0lDaGhibVFnYm05MElHNTFiR3d2ZFc1a1pXWnBibVZrS1N3Z2RHaGxJSEpsYm1SbGNtVmtJR1ZzWlcxbGJuUWdkMmxzYkNCdWIzUmNiaUFxSUhSeWFXZG5aWElnZFhCa1lYUmxjeUIwYnlCMGFHVWdaV3hsYldWdWRDNGdTVzV6ZEdWaFpDd2dkR2hsSUhCeWIzQnpJRzExYzNRZ1kyaGhibWRsSUdsdUlHOXlaR1Z5SUdadmNseHVJQ29nZEdobElISmxibVJsY21Wa0lHVnNaVzFsYm5RZ2RHOGdZbVVnZFhCa1lYUmxaQzVjYmlBcVhHNGdLaUJVYUdVZ2NtVnVaR1Z5WldRZ1pXeGxiV1Z1ZENCM2FXeHNJR0psSUdsdWFYUnBZV3hwZW1Wa0lHRnpJSFZ1WTJobFkydGxaQ0FvYjNJZ1lHUmxabUYxYkhSRGFHVmphMlZrWUNsY2JpQXFJSGRwZEdnZ1lXNGdaVzF3ZEhrZ2RtRnNkV1VnS0c5eUlHQmtaV1poZFd4MFZtRnNkV1ZnS1M1Y2JpQXFYRzRnS2lCQWMyVmxJR2gwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MMVJTTHpJd01USXZWMFF0YUhSdGJEVXRNakF4TWpFd01qVXZkR2hsTFdsdWNIVjBMV1ZzWlcxbGJuUXVhSFJ0YkZ4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JFVDAxSmJuQjFkQ0E5SUZKbFlXTjBRMnhoYzNNdVkzSmxZWFJsUTJ4aGMzTW9lMXh1SUNCa2FYTndiR0Y1VG1GdFpUb2dKMUpsWVdOMFJFOU5TVzV3ZFhRbkxGeHVJQ0IwWVdkT1lXMWxPaUFuU1U1UVZWUW5MRnh1WEc0Z0lHMXBlR2x1Y3pvZ1cwRjFkRzlHYjJOMWMwMXBlR2x1TENCTWFXNXJaV1JXWVd4MVpWVjBhV3h6TGsxcGVHbHVMQ0JTWldGamRFSnliM2R6WlhKRGIyMXdiMjVsYm5STmFYaHBibDBzWEc1Y2JpQWdaMlYwU1c1cGRHbGhiRk4wWVhSbE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjJZWElnWkdWbVlYVnNkRlpoYkhWbElEMGdkR2hwY3k1d2NtOXdjeTVrWldaaGRXeDBWbUZzZFdVN1hHNGdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJR2x1YVhScFlXeERhR1ZqYTJWa09pQjBhR2x6TG5CeWIzQnpMbVJsWm1GMWJIUkRhR1ZqYTJWa0lIeDhJR1poYkhObExGeHVJQ0FnSUNBZ2FXNXBkR2xoYkZaaGJIVmxPaUJrWldaaGRXeDBWbUZzZFdVZ0lUMGdiblZzYkNBL0lHUmxabUYxYkhSV1lXeDFaU0E2SUc1MWJHeGNiaUFnSUNCOU8xeHVJQ0I5TEZ4dVhHNGdJSEpsYm1SbGNqb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdMeThnUTJ4dmJtVWdZSFJvYVhNdWNISnZjSE5nSUhOdklIZGxJR1J2YmlkMElHMTFkR0YwWlNCMGFHVWdhVzV3ZFhRdVhHNGdJQ0FnZG1GeUlIQnliM0J6SUQwZ1lYTnphV2R1S0h0OUxDQjBhR2x6TG5CeWIzQnpLVHRjYmx4dUlDQWdJSEJ5YjNCekxtUmxabUYxYkhSRGFHVmphMlZrSUQwZ2JuVnNiRHRjYmlBZ0lDQndjbTl3Y3k1a1pXWmhkV3gwVm1Gc2RXVWdQU0J1ZFd4c08xeHVYRzRnSUNBZ2RtRnlJSFpoYkhWbElEMGdUR2x1YTJWa1ZtRnNkV1ZWZEdsc2N5NW5aWFJXWVd4MVpTaDBhR2x6S1R0Y2JpQWdJQ0J3Y205d2N5NTJZV3gxWlNBOUlIWmhiSFZsSUNFOUlHNTFiR3dnUHlCMllXeDFaU0E2SUhSb2FYTXVjM1JoZEdVdWFXNXBkR2xoYkZaaGJIVmxPMXh1WEc0Z0lDQWdkbUZ5SUdOb1pXTnJaV1FnUFNCTWFXNXJaV1JXWVd4MVpWVjBhV3h6TG1kbGRFTm9aV05yWldRb2RHaHBjeWs3WEc0Z0lDQWdjSEp2Y0hNdVkyaGxZMnRsWkNBOUlHTm9aV05yWldRZ0lUMGdiblZzYkNBL0lHTm9aV05yWldRZ09pQjBhR2x6TG5OMFlYUmxMbWx1YVhScFlXeERhR1ZqYTJWa08xeHVYRzRnSUNBZ2NISnZjSE11YjI1RGFHRnVaMlVnUFNCMGFHbHpMbDlvWVc1a2JHVkRhR0Z1WjJVN1hHNWNiaUFnSUNCeVpYUjFjbTRnYVc1d2RYUW9jSEp2Y0hNc0lIUm9hWE11Y0hKdmNITXVZMmhwYkdSeVpXNHBPMXh1SUNCOUxGeHVYRzRnSUdOdmJYQnZibVZ1ZEVScFpFMXZkVzUwT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCMllYSWdhV1FnUFNCU1pXRmpkRTF2ZFc1MExtZGxkRWxFS0hSb2FYTXVaMlYwUkU5TlRtOWtaU2dwS1R0Y2JpQWdJQ0JwYm5OMFlXNWpaWE5DZVZKbFlXTjBTVVJiYVdSZElEMGdkR2hwY3p0Y2JpQWdmU3hjYmx4dUlDQmpiMjF3YjI1bGJuUlhhV3hzVlc1dGIzVnVkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnZG1GeUlISnZiM1JPYjJSbElEMGdkR2hwY3k1blpYUkVUMDFPYjJSbEtDazdYRzRnSUNBZ2RtRnlJR2xrSUQwZ1VtVmhZM1JOYjNWdWRDNW5aWFJKUkNoeWIyOTBUbTlrWlNrN1hHNGdJQ0FnWkdWc1pYUmxJR2x1YzNSaGJtTmxjMEo1VW1WaFkzUkpSRnRwWkYwN1hHNGdJSDBzWEc1Y2JpQWdZMjl0Y0c5dVpXNTBSR2xrVlhCa1lYUmxPaUJtZFc1amRHbHZiaWh3Y21WMlVISnZjSE1zSUhCeVpYWlRkR0YwWlN3Z2NISmxka052Ym5SbGVIUXBJSHRjYmlBZ0lDQjJZWElnY205dmRFNXZaR1VnUFNCMGFHbHpMbWRsZEVSUFRVNXZaR1VvS1R0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV3Y205d2N5NWphR1ZqYTJWa0lDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVUM0JsY21GMGFXOXVjeTV6WlhSV1lXeDFaVVp2Y2xCeWIzQmxjblI1S0Z4dUlDQWdJQ0FnSUNCeWIyOTBUbTlrWlN4Y2JpQWdJQ0FnSUNBZ0oyTm9aV05yWldRbkxGeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CeWIzQnpMbU5vWldOclpXUWdmSHdnWm1Gc2MyVmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJSFpoYkhWbElEMGdUR2x1YTJWa1ZtRnNkV1ZWZEdsc2N5NW5aWFJXWVd4MVpTaDBhR2x6S1R0Y2JpQWdJQ0JwWmlBb2RtRnNkV1VnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnTHk4Z1EyRnpkQ0JnZG1Gc2RXVmdJSFJ2SUdFZ2MzUnlhVzVuSUhSdklHVnVjM1Z5WlNCMGFHVWdkbUZzZFdVZ2FYTWdjMlYwSUdOdmNuSmxZM1JzZVM0Z1YyaHBiR1ZjYmlBZ0lDQWdJQzh2SUdKeWIzZHpaWEp6SUhSNWNHbGpZV3hzZVNCa2J5QjBhR2x6SUdGeklHNWxZMlZ6YzJGeWVTd2dhbk5rYjIwZ1pHOWxjMjRuZEM1Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5NXpaWFJXWVd4MVpVWnZjbEJ5YjNCbGNuUjVLSEp2YjNST2IyUmxMQ0FuZG1Gc2RXVW5MQ0FuSnlBcklIWmhiSFZsS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ1gyaGhibVJzWlVOb1lXNW5aVG9nWm5WdVkzUnBiMjRvWlhabGJuUXBJSHRjYmlBZ0lDQjJZWElnY21WMGRYSnVWbUZzZFdVN1hHNGdJQ0FnZG1GeUlHOXVRMmhoYm1kbElEMGdUR2x1YTJWa1ZtRnNkV1ZWZEdsc2N5NW5aWFJQYmtOb1lXNW5aU2gwYUdsektUdGNiaUFnSUNCcFppQW9iMjVEYUdGdVoyVXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJsWmhiSFZsSUQwZ2IyNURhR0Z1WjJVdVkyRnNiQ2gwYUdsekxDQmxkbVZ1ZENrN1hHNGdJQ0FnZlZ4dUlDQWdJQzh2SUVobGNtVWdkMlVnZFhObElHRnpZWEFnZEc4Z2QyRnBkQ0IxYm5ScGJDQmhiR3dnZFhCa1lYUmxjeUJvWVhabElIQnliM0JoWjJGMFpXUXNJSGRvYVdOb1hHNGdJQ0FnTHk4Z2FYTWdhVzF3YjNKMFlXNTBJSGRvWlc0Z2RYTnBibWNnWTI5dWRISnZiR3hsWkNCamIyMXdiMjVsYm5SeklIZHBkR2hwYmlCc1lYbGxjbk02WEc0Z0lDQWdMeThnYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDJaaFkyVmliMjlyTDNKbFlXTjBMMmx6YzNWbGN5OHhOams0WEc0Z0lDQWdVbVZoWTNSVmNHUmhkR1Z6TG1GellYQW9abTl5WTJWVmNHUmhkR1ZKWmsxdmRXNTBaV1FzSUhSb2FYTXBPMXh1WEc0Z0lDQWdkbUZ5SUc1aGJXVWdQU0IwYUdsekxuQnliM0J6TG01aGJXVTdYRzRnSUNBZ2FXWWdLSFJvYVhNdWNISnZjSE11ZEhsd1pTQTlQVDBnSjNKaFpHbHZKeUFtSmlCdVlXMWxJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJSFpoY2lCeWIyOTBUbTlrWlNBOUlIUm9hWE11WjJWMFJFOU5UbTlrWlNncE8xeHVJQ0FnSUNBZ2RtRnlJSEYxWlhKNVVtOXZkQ0E5SUhKdmIzUk9iMlJsTzF4dVhHNGdJQ0FnSUNCM2FHbHNaU0FvY1hWbGNubFNiMjkwTG5CaGNtVnVkRTV2WkdVcElIdGNiaUFnSUNBZ0lDQWdjWFZsY25sU2IyOTBJRDBnY1hWbGNubFNiMjkwTG5CaGNtVnVkRTV2WkdVN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJRWxtSUdCeWIyOTBUbTlrWlM1bWIzSnRZQ0IzWVhNZ2JtOXVMVzUxYkd3c0lIUm9aVzRnZDJVZ1kyOTFiR1FnZEhKNUlHQm1iM0p0TG1Wc1pXMWxiblJ6WUN4Y2JpQWdJQ0FnSUM4dklHSjFkQ0IwYUdGMElITnZiV1YwYVcxbGN5QmlaV2hoZG1WeklITjBjbUZ1WjJWc2VTQnBiaUJKUlRndUlGZGxJR052ZFd4a0lHRnNjMjhnZEhKNUlIVnphVzVuWEc0Z0lDQWdJQ0F2THlCZ1ptOXliUzVuWlhSRmJHVnRaVzUwYzBKNVRtRnRaV0FzSUdKMWRDQjBhR0YwSUhkcGJHd2diMjVzZVNCeVpYUjFjbTRnWkdseVpXTjBJR05vYVd4a2NtVnVYRzRnSUNBZ0lDQXZMeUJoYm1RZ2QyOXVKM1FnYVc1amJIVmtaU0JwYm5CMWRITWdkR2hoZENCMWMyVWdkR2hsSUVoVVRVdzFJR0JtYjNKdFBXQWdZWFIwY21saWRYUmxMaUJUYVc1alpWeHVJQ0FnSUNBZ0x5OGdkR2hsSUdsdWNIVjBJRzFwWjJoMElHNXZkQ0JsZG1WdUlHSmxJR2x1SUdFZ1ptOXliU3dnYkdWMEozTWdhblZ6ZENCMWMyVWdkR2hsSUdkc2IySmhiRnh1SUNBZ0lDQWdMeThnWUhGMVpYSjVVMlZzWldOMGIzSkJiR3hnSUhSdklHVnVjM1Z5WlNCM1pTQmtiMjRuZENCdGFYTnpJR0Z1ZVhSb2FXNW5MbHh1SUNBZ0lDQWdkbUZ5SUdkeWIzVndJRDBnY1hWbGNubFNiMjkwTG5GMVpYSjVVMlZzWldOMGIzSkJiR3dvWEc0Z0lDQWdJQ0FnSUNkcGJuQjFkRnR1WVcxbFBTY2dLeUJLVTA5T0xuTjBjbWx1WjJsbWVTZ25KeUFySUc1aGJXVXBJQ3NnSjExYmRIbHdaVDFjSW5KaFpHbHZYQ0pkSnlrN1hHNWNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0F3TENCbmNtOTFjRXhsYmlBOUlHZHliM1Z3TG14bGJtZDBhRHNnYVNBOElHZHliM1Z3VEdWdU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJRzkwYUdWeVRtOWtaU0E5SUdkeWIzVndXMmxkTzF4dUlDQWdJQ0FnSUNCcFppQW9iM1JvWlhKT2IyUmxJRDA5UFNCeWIyOTBUbTlrWlNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnYjNSb1pYSk9iMlJsTG1admNtMGdJVDA5SUhKdmIzUk9iMlJsTG1admNtMHBJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjJZWElnYjNSb1pYSkpSQ0E5SUZKbFlXTjBUVzkxYm5RdVoyVjBTVVFvYjNSb1pYSk9iMlJsS1R0Y2JpQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ0lDQnZkR2hsY2tsRUxGeHVJQ0FnSUNBZ0lDQWdJQ2RTWldGamRFUlBUVWx1Y0hWME9pQk5hWGhwYm1jZ1VtVmhZM1FnWVc1a0lHNXZiaTFTWldGamRDQnlZV1JwYnlCcGJuQjFkSE1nZDJsMGFDQjBhR1VnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM05oYldVZ1lHNWhiV1ZnSUdseklHNXZkQ0J6ZFhCd2IzSjBaV1F1SjF4dUlDQWdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLRzkwYUdWeVNVUXBLVHRjYmlBZ0lDQWdJQ0FnZG1GeUlHOTBhR1Z5U1c1emRHRnVZMlVnUFNCcGJuTjBZVzVqWlhOQ2VWSmxZV04wU1VSYmIzUm9aWEpKUkYwN1hHNGdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lDQWdiM1JvWlhKSmJuTjBZVzVqWlN4Y2JpQWdJQ0FnSUNBZ0lDQW5VbVZoWTNSRVQwMUpibkIxZERvZ1ZXNXJibTkzYmlCeVlXUnBieUJpZFhSMGIyNGdTVVFnSlhNdUp5eGNiaUFnSUNBZ0lDQWdJQ0J2ZEdobGNrbEVYRzRnSUNBZ0lDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2IzUm9aWEpKYm5OMFlXNWpaU2twTzF4dUlDQWdJQ0FnSUNBdkx5QkpaaUIwYUdseklHbHpJR0VnWTI5dWRISnZiR3hsWkNCeVlXUnBieUJpZFhSMGIyNGdaM0p2ZFhBc0lHWnZjbU5wYm1jZ2RHaGxJR2x1Y0hWMElIUm9ZWFJjYmlBZ0lDQWdJQ0FnTHk4Z2QyRnpJSEJ5WlhacGIzVnpiSGtnWTJobFkydGxaQ0IwYnlCMWNHUmhkR1VnZDJsc2JDQmpZWFZ6WlNCcGRDQjBieUJpWlNCamIyMWxJSEpsTFdOb1pXTnJaV1JjYmlBZ0lDQWdJQ0FnTHk4Z1lYTWdZWEJ3Y205d2NtbGhkR1V1WEc0Z0lDQWdJQ0FnSUZKbFlXTjBWWEJrWVhSbGN5NWhjMkZ3S0dadmNtTmxWWEJrWVhSbFNXWk5iM1Z1ZEdWa0xDQnZkR2hsY2tsdWMzUmhibU5sS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjbVYwZFhKdVZtRnNkV1U3WEc0Z0lIMWNibHh1ZlNrN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRVQwMUpibkIxZER0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTU9wdGlvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBvcHRpb24gPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSgnb3B0aW9uJyk7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8b3B0aW9uPiBuYXRpdmUgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xudmFyIFJlYWN0RE9NT3B0aW9uID0gUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiAnUmVhY3RET01PcHRpb24nLFxuICB0YWdOYW1lOiAnT1BUSU9OJyxcblxuICBtaXhpbnM6IFtSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbl0sXG5cbiAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICAvLyBUT0RPICh5dW5nc3RlcnMpOiBSZW1vdmUgc3VwcG9ydCBmb3IgYHNlbGVjdGVkYCBpbiA8b3B0aW9uPi5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3RlZCA9PSBudWxsLFxuICAgICAgICAnVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxlY3Q+IGluc3RlYWQgb2YgJyArXG4gICAgICAgICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJ1xuICAgICAgKSA6IG51bGwpO1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvcHRpb24odGhpcy5wcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH1cblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01PcHRpb247XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRVQwMVBjSFJwYjI0dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRVQwMVBjSFJwYjI1Y2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVKeWIzZHpaWEpEYjIxd2IyNWxiblJOYVhocGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRbkp2ZDNObGNrTnZiWEJ2Ym1WdWRFMXBlR2x1WENJcE8xeHVkbUZ5SUZKbFlXTjBRMnhoYzNNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnNZWE56WENJcE8xeHVkbUZ5SUZKbFlXTjBSV3hsYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSV3hsYldWdWRGd2lLVHRjYmx4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzUyWVhJZ2IzQjBhVzl1SUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVWmhZM1J2Y25rb0oyOXdkR2x2YmljcE8xeHVYRzR2S2lwY2JpQXFJRWx0Y0d4bGJXVnVkSE1nWVc0Z1BHOXdkR2x2Ymo0Z2JtRjBhWFpsSUdOdmJYQnZibVZ1ZENCMGFHRjBJSGRoY201eklIZG9aVzRnWUhObGJHVmpkR1ZrWUNCcGN5QnpaWFF1WEc0Z0tpOWNiblpoY2lCU1pXRmpkRVJQVFU5d2RHbHZiaUE5SUZKbFlXTjBRMnhoYzNNdVkzSmxZWFJsUTJ4aGMzTW9lMXh1SUNCa2FYTndiR0Y1VG1GdFpUb2dKMUpsWVdOMFJFOU5UM0IwYVc5dUp5eGNiaUFnZEdGblRtRnRaVG9nSjA5UVZFbFBUaWNzWEc1Y2JpQWdiV2w0YVc1ek9pQmJVbVZoWTNSQ2NtOTNjMlZ5UTI5dGNHOXVaVzUwVFdsNGFXNWRMRnh1WEc0Z0lHTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdMeThnVkU5RVR5QW9lWFZ1WjNOMFpYSnpLVG9nVW1WdGIzWmxJSE4xY0hCdmNuUWdabTl5SUdCelpXeGxZM1JsWkdBZ2FXNGdQRzl3ZEdsdmJqNHVYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjSEp2Y0hNdWMyVnNaV04wWldRZ1BUMGdiblZzYkN4Y2JpQWdJQ0FnSUNBZ0oxVnpaU0IwYUdVZ1lHUmxabUYxYkhSV1lXeDFaV0FnYjNJZ1lIWmhiSFZsWUNCd2NtOXdjeUJ2YmlBOGMyVnNaV04wUGlCcGJuTjBaV0ZrSUc5bUlDY2dLMXh1SUNBZ0lDQWdJQ0FuYzJWMGRHbHVaeUJnYzJWc1pXTjBaV1JnSUc5dUlEeHZjSFJwYjI0K0xpZGNiaUFnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdjbVZ1WkdWeU9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2IzQjBhVzl1S0hSb2FYTXVjSEp2Y0hNc0lIUm9hWE11Y0hKdmNITXVZMmhwYkdSeVpXNHBPMXh1SUNCOVhHNWNibjBwTzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wUkU5TlQzQjBhVzl1TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01TZWxlY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBBdXRvRm9jdXNNaXhpbiA9IHJlcXVpcmUoXCIuL0F1dG9Gb2N1c01peGluXCIpO1xudmFyIExpbmtlZFZhbHVlVXRpbHMgPSByZXF1aXJlKFwiLi9MaW5rZWRWYWx1ZVV0aWxzXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG5cbnZhciBzZWxlY3QgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSgnc2VsZWN0Jyk7XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnNJZlBlbmRpbmdVcGRhdGVBbmRNb3VudGVkKCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICBpZiAodGhpcy5fcGVuZGluZ1VwZGF0ZSkge1xuICAgIHRoaXMuX3BlbmRpbmdVcGRhdGUgPSBmYWxzZTtcbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHRoaXMuaXNNb3VudGVkKCkpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2VsZWN0VmFsdWVUeXBlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocHJvcHMubXVsdGlwbGUpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiVGhlIGBcIiArIHByb3BOYW1lICsgXCJgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiBcIikgK1xuICAgICAgICAoXCJgbXVsdGlwbGVgIGlzIHRydWUuXCIpXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJUaGUgYFwiICsgcHJvcE5hbWUgKyBcImAgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyIFwiKSArXG4gICAgICAgIChcInZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuXCIpXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBJbnN0YW5jZSBvZiBSZWFjdERPTVNlbGVjdFxuICogQHBhcmFtIHsqfSBwcm9wVmFsdWUgQSBzdHJpbmdhYmxlICh3aXRoIGBtdWx0aXBsZWAsIGEgbGlzdCBvZiBzdHJpbmdhYmxlcykuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKGNvbXBvbmVudCwgcHJvcFZhbHVlKSB7XG4gIHZhciBzZWxlY3RlZFZhbHVlLCBpLCBsO1xuICB2YXIgb3B0aW9ucyA9IGNvbXBvbmVudC5nZXRET01Ob2RlKCkub3B0aW9ucztcblxuICBpZiAoY29tcG9uZW50LnByb3BzLm11bHRpcGxlKSB7XG4gICAgc2VsZWN0ZWRWYWx1ZSA9IHt9O1xuICAgIGZvciAoaSA9IDAsIGwgPSBwcm9wVmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBzZWxlY3RlZFZhbHVlWycnICsgcHJvcFZhbHVlW2ldXSA9IHRydWU7XG4gICAgfVxuICAgIGZvciAoaSA9IDAsIGwgPSBvcHRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eShvcHRpb25zW2ldLnZhbHVlKTtcbiAgICAgIGlmIChvcHRpb25zW2ldLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3QgY29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAgICBzZWxlY3RlZFZhbHVlID0gJycgKyBwcm9wVmFsdWU7XG4gICAgZm9yIChpID0gMCwgbCA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAob3B0aW9uc1tpXS52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBvcHRpb25zW2ldLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIG9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8c2VsZWN0PiBuYXRpdmUgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG52YXIgUmVhY3RET01TZWxlY3QgPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTVNlbGVjdCcsXG4gIHRhZ05hbWU6ICdTRUxFQ1QnLFxuXG4gIG1peGluczogW0F1dG9Gb2N1c01peGluLCBMaW5rZWRWYWx1ZVV0aWxzLk1peGluLCBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbl0sXG5cbiAgcHJvcFR5cGVzOiB7XG4gICAgZGVmYXVsdFZhbHVlOiBzZWxlY3RWYWx1ZVR5cGUsXG4gICAgdmFsdWU6IHNlbGVjdFZhbHVlVHlwZVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgLy8gQ2xvbmUgYHRoaXMucHJvcHNgIHNvIHdlIGRvbid0IG11dGF0ZSB0aGUgaW5wdXQuXG4gICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCB0aGlzLnByb3BzKTtcblxuICAgIHByb3BzLm9uQ2hhbmdlID0gdGhpcy5faGFuZGxlQ2hhbmdlO1xuICAgIHByb3BzLnZhbHVlID0gbnVsbDtcblxuICAgIHJldHVybiBzZWxlY3QocHJvcHMsIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcGVuZGluZ1VwZGF0ZSA9IGZhbHNlO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICB1cGRhdGVPcHRpb25zKHRoaXMsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnREaWRVcGRhdGU6IGZ1bmN0aW9uKHByZXZQcm9wcykge1xuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdVcGRhdGUgPSBmYWxzZTtcbiAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoIXByZXZQcm9wcy5tdWx0aXBsZSAhPT0gIXRoaXMucHJvcHMubXVsdGlwbGUpIHtcbiAgICAgIC8vIEZvciBzaW1wbGljaXR5LCByZWFwcGx5IGBkZWZhdWx0VmFsdWVgIGlmIGBtdWx0aXBsZWAgaXMgdG9nZ2xlZC5cbiAgICAgIGlmICh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV2ZXJ0IHRoZSBzZWxlY3QgYmFjayB0byBpdHMgZGVmYXVsdCB1bnNlbGVjdGVkIHN0YXRlLlxuICAgICAgICB1cGRhdGVPcHRpb25zKHRoaXMsIHRoaXMucHJvcHMubXVsdGlwbGUgPyBbXSA6ICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgX2hhbmRsZUNoYW5nZTogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgcmV0dXJuVmFsdWU7XG4gICAgdmFyIG9uQ2hhbmdlID0gTGlua2VkVmFsdWVVdGlscy5nZXRPbkNoYW5nZSh0aGlzKTtcbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIHJldHVyblZhbHVlID0gb25DaGFuZ2UuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVuZGluZ1VwZGF0ZSA9IHRydWU7XG4gICAgUmVhY3RVcGRhdGVzLmFzYXAodXBkYXRlT3B0aW9uc0lmUGVuZGluZ1VwZGF0ZUFuZE1vdW50ZWQsIHRoaXMpO1xuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTVNlbGVjdDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTVNlbGVjdGlvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0ID0gcmVxdWlyZShcIi4vZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldFwiKTtcbnZhciBnZXRUZXh0Q29udGVudEFjY2Vzc29yID0gcmVxdWlyZShcIi4vZ2V0VGV4dENvbnRlbnRBY2Nlc3NvclwiKTtcblxuLyoqXG4gKiBXaGlsZSBgaXNDb2xsYXBzZWRgIGlzIGF2YWlsYWJsZSBvbiB0aGUgU2VsZWN0aW9uIG9iamVjdCBhbmQgYGNvbGxhcHNlZGBcbiAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgUmFuZ2Ugb2JqZWN0LCBJRTExIHNvbWV0aW1lcyBnZXRzIHRoZW0gd3JvbmcuXG4gKiBJZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFuZCBvZmZzZXRzIGFyZSB0aGUgc2FtZSwgdGhlIHJhbmdlIGlzIGNvbGxhcHNlZC5cbiAqL1xuZnVuY3Rpb24gaXNDb2xsYXBzZWQoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KSB7XG4gIHJldHVybiBhbmNob3JOb2RlID09PSBmb2N1c05vZGUgJiYgYW5jaG9yT2Zmc2V0ID09PSBmb2N1c09mZnNldDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGFwcHJvcHJpYXRlIGFuY2hvciBhbmQgZm9jdXMgbm9kZS9vZmZzZXQgcGFpcnMgZm9yIElFLlxuICpcbiAqIFRoZSBjYXRjaCBoZXJlIGlzIHRoYXQgSUUncyBzZWxlY3Rpb24gQVBJIGRvZXNuJ3QgcHJvdmlkZSBpbmZvcm1hdGlvblxuICogYWJvdXQgd2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGZvcndhcmQgb3IgYmFja3dhcmQsIHNvIHdlIGhhdmUgdG9cbiAqIGJlaGF2ZSBhcyB0aG91Z2ggaXQncyBhbHdheXMgZm9yd2FyZC5cbiAqXG4gKiBJRSB0ZXh0IGRpZmZlcnMgZnJvbSBtb2Rlcm4gc2VsZWN0aW9uIGluIHRoYXQgaXQgYmVoYXZlcyBhcyB0aG91Z2hcbiAqIGJsb2NrIGVsZW1lbnRzIGVuZCB3aXRoIGEgbmV3IGxpbmUuIFRoaXMgbWVhbnMgY2hhcmFjdGVyIG9mZnNldHMgd2lsbFxuICogZGlmZmVyIGJldHdlZW4gdGhlIHR3byBBUElzLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRJRU9mZnNldHMobm9kZSkge1xuICB2YXIgc2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uO1xuICB2YXIgc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO1xuICB2YXIgc2VsZWN0ZWRMZW5ndGggPSBzZWxlY3RlZFJhbmdlLnRleHQubGVuZ3RoO1xuXG4gIC8vIER1cGxpY2F0ZSBzZWxlY3Rpb24gc28gd2UgY2FuIG1vdmUgcmFuZ2Ugd2l0aG91dCBicmVha2luZyB1c2VyIHNlbGVjdGlvbi5cbiAgdmFyIGZyb21TdGFydCA9IHNlbGVjdGVkUmFuZ2UuZHVwbGljYXRlKCk7XG4gIGZyb21TdGFydC5tb3ZlVG9FbGVtZW50VGV4dChub2RlKTtcbiAgZnJvbVN0YXJ0LnNldEVuZFBvaW50KCdFbmRUb1N0YXJ0Jywgc2VsZWN0ZWRSYW5nZSk7XG5cbiAgdmFyIHN0YXJ0T2Zmc2V0ID0gZnJvbVN0YXJ0LnRleHQubGVuZ3RoO1xuICB2YXIgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBzZWxlY3RlZExlbmd0aDtcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydE9mZnNldCxcbiAgICBlbmQ6IGVuZE9mZnNldFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0TW9kZXJuT2Zmc2V0cyhub2RlKSB7XG4gIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGFuY2hvck5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgdmFyIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQ7XG4gIHZhciBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlO1xuICB2YXIgZm9jdXNPZmZzZXQgPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XG5cbiAgdmFyIGN1cnJlbnRSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuXG4gIC8vIElmIHRoZSBub2RlIGFuZCBvZmZzZXQgdmFsdWVzIGFyZSB0aGUgc2FtZSwgdGhlIHNlbGVjdGlvbiBpcyBjb2xsYXBzZWQuXG4gIC8vIGBTZWxlY3Rpb24uaXNDb2xsYXBzZWRgIGlzIGF2YWlsYWJsZSBuYXRpdmVseSwgYnV0IElFIHNvbWV0aW1lcyBnZXRzXG4gIC8vIHRoaXMgdmFsdWUgd3JvbmcuXG4gIHZhciBpc1NlbGVjdGlvbkNvbGxhcHNlZCA9IGlzQ29sbGFwc2VkKFxuICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgKTtcblxuICB2YXIgcmFuZ2VMZW5ndGggPSBpc1NlbGVjdGlvbkNvbGxhcHNlZCA/IDAgOiBjdXJyZW50UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7XG5cbiAgdmFyIHRlbXBSYW5nZSA9IGN1cnJlbnRSYW5nZS5jbG9uZVJhbmdlKCk7XG4gIHRlbXBSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7XG4gIHRlbXBSYW5nZS5zZXRFbmQoY3VycmVudFJhbmdlLnN0YXJ0Q29udGFpbmVyLCBjdXJyZW50UmFuZ2Uuc3RhcnRPZmZzZXQpO1xuXG4gIHZhciBpc1RlbXBSYW5nZUNvbGxhcHNlZCA9IGlzQ29sbGFwc2VkKFxuICAgIHRlbXBSYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICB0ZW1wUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgdGVtcFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICB0ZW1wUmFuZ2UuZW5kT2Zmc2V0XG4gICk7XG5cbiAgdmFyIHN0YXJ0ID0gaXNUZW1wUmFuZ2VDb2xsYXBzZWQgPyAwIDogdGVtcFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoO1xuICB2YXIgZW5kID0gc3RhcnQgKyByYW5nZUxlbmd0aDtcblxuICAvLyBEZXRlY3Qgd2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGJhY2t3YXJkLlxuICB2YXIgZGV0ZWN0aW9uUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICBkZXRlY3Rpb25SYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpO1xuICBkZXRlY3Rpb25SYW5nZS5zZXRFbmQoZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG4gIHZhciBpc0JhY2t3YXJkID0gZGV0ZWN0aW9uUmFuZ2UuY29sbGFwc2VkO1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGlzQmFja3dhcmQgPyBlbmQgOiBzdGFydCxcbiAgICBlbmQ6IGlzQmFja3dhcmQgPyBzdGFydCA6IGVuZFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAqL1xuZnVuY3Rpb24gc2V0SUVPZmZzZXRzKG5vZGUsIG9mZnNldHMpIHtcbiAgdmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkuZHVwbGljYXRlKCk7XG4gIHZhciBzdGFydCwgZW5kO1xuXG4gIGlmICh0eXBlb2Ygb2Zmc2V0cy5lbmQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICAgIGVuZCA9IHN0YXJ0O1xuICB9IGVsc2UgaWYgKG9mZnNldHMuc3RhcnQgPiBvZmZzZXRzLmVuZCkge1xuICAgIHN0YXJ0ID0gb2Zmc2V0cy5lbmQ7XG4gICAgZW5kID0gb2Zmc2V0cy5zdGFydDtcbiAgfSBlbHNlIHtcbiAgICBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gICAgZW5kID0gb2Zmc2V0cy5lbmQ7XG4gIH1cblxuICByYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChub2RlKTtcbiAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydCk7XG4gIHJhbmdlLnNldEVuZFBvaW50KCdFbmRUb1N0YXJ0JywgcmFuZ2UpO1xuICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQgLSBzdGFydCk7XG4gIHJhbmdlLnNlbGVjdCgpO1xufVxuXG4vKipcbiAqIEluIG1vZGVybiBub24tSUUgYnJvd3NlcnMsIHdlIGNhbiBzdXBwb3J0IGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmRcbiAqIHNlbGVjdGlvbnMuXG4gKlxuICogTm90ZTogSUUxMCsgc3VwcG9ydHMgdGhlIFNlbGVjdGlvbiBvYmplY3QsIGJ1dCBpdCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGUgYGV4dGVuZGAgbWV0aG9kLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gaW4gbW9kZXJuIElFLCBpdCdzIG5vdCBwb3NzaWJsZVxuICogdG8gcHJvZ3JhbWF0aWNhbGx5IGNyZWF0ZSBhIGJhY2t3YXJkIHNlbGVjdGlvbi4gVGh1cywgZm9yIGFsbCBJRVxuICogdmVyc2lvbnMsIHdlIHVzZSB0aGUgb2xkIElFIEFQSSB0byBjcmVhdGUgb3VyIHNlbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5mdW5jdGlvbiBzZXRNb2Rlcm5PZmZzZXRzKG5vZGUsIG9mZnNldHMpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgdmFyIGxlbmd0aCA9IG5vZGVbZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcigpXS5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgubWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSB0eXBlb2Ygb2Zmc2V0cy5lbmQgPT09ICd1bmRlZmluZWQnID9cbiAgICAgICAgICAgIHN0YXJ0IDogTWF0aC5taW4ob2Zmc2V0cy5lbmQsIGxlbmd0aCk7XG5cbiAgLy8gSUUgMTEgdXNlcyBtb2Rlcm4gc2VsZWN0aW9uLCBidXQgZG9lc24ndCBzdXBwb3J0IHRoZSBleHRlbmQgbWV0aG9kLlxuICAvLyBGbGlwIGJhY2t3YXJkIHNlbGVjdGlvbnMsIHNvIHdlIGNhbiBzZXQgd2l0aCBhIHNpbmdsZSByYW5nZS5cbiAgaWYgKCFzZWxlY3Rpb24uZXh0ZW5kICYmIHN0YXJ0ID4gZW5kKSB7XG4gICAgdmFyIHRlbXAgPSBlbmQ7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSB0ZW1wO1xuICB9XG5cbiAgdmFyIHN0YXJ0TWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBzdGFydCk7XG4gIHZhciBlbmRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIGVuZCk7XG5cbiAgaWYgKHN0YXJ0TWFya2VyICYmIGVuZE1hcmtlcikge1xuICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRNYXJrZXIubm9kZSwgc3RhcnRNYXJrZXIub2Zmc2V0KTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2Uuc2V0RW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciB1c2VJRU9mZnNldHMgPSAoXG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJlxuICAnc2VsZWN0aW9uJyBpbiBkb2N1bWVudCAmJlxuICAhKCdnZXRTZWxlY3Rpb24nIGluIHdpbmRvdylcbik7XG5cbnZhciBSZWFjdERPTVNlbGVjdGlvbiA9IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAgKi9cbiAgZ2V0T2Zmc2V0czogdXNlSUVPZmZzZXRzID8gZ2V0SUVPZmZzZXRzIDogZ2V0TW9kZXJuT2Zmc2V0cyxcblxuICAvKipcbiAgICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gICAqL1xuICBzZXRPZmZzZXRzOiB1c2VJRU9mZnNldHMgPyBzZXRJRU9mZnNldHMgOiBzZXRNb2Rlcm5PZmZzZXRzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NU2VsZWN0aW9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQgPVxuICByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NQ29tcG9uZW50XCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSByZXF1aXJlKFwiLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXJcIik7XG5cbi8qKlxuICogVGV4dCBub2RlcyB2aW9sYXRlIGEgY291cGxlIGFzc3VtcHRpb25zIHRoYXQgUmVhY3QgbWFrZXMgYWJvdXQgY29tcG9uZW50czpcbiAqXG4gKiAgLSBXaGVuIG1vdW50aW5nIHRleHQgaW50byB0aGUgRE9NLCBhZGphY2VudCB0ZXh0IG5vZGVzIGFyZSBtZXJnZWQuXG4gKiAgLSBUZXh0IG5vZGVzIGNhbm5vdCBiZSBhc3NpZ25lZCBhIFJlYWN0IHJvb3QgSUQuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgdXNlZCB0byB3cmFwIHN0cmluZ3MgaW4gZWxlbWVudHMgc28gdGhhdCB0aGV5IGNhbiB1bmRlcmdvXG4gKiB0aGUgc2FtZSByZWNvbmNpbGlhdGlvbiB0aGF0IGlzIGFwcGxpZWQgdG8gZWxlbWVudHMuXG4gKlxuICogVE9ETzogSW52ZXN0aWdhdGUgcmVwcmVzZW50aW5nIFJlYWN0IGNvbXBvbmVudHMgaW4gdGhlIERPTSB3aXRoIHRleHQgbm9kZXMuXG4gKlxuICogQGNsYXNzIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogQGV4dGVuZHMgUmVhY3RDb21wb25lbnRcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RET01UZXh0Q29tcG9uZW50ID0gZnVuY3Rpb24ocHJvcHMpIHtcbiAgLy8gVGhpcyBjb25zdHJ1Y3RvciBhbmQgaXRzIGFyZ3VtZW50IGlzIGN1cnJlbnRseSB1c2VkIGJ5IG1vY2tzLlxufTtcblxuYXNzaWduKFJlYWN0RE9NVGV4dENvbXBvbmVudC5wcm90b3R5cGUsIHtcblxuICAvKipcbiAgICogQHBhcmFtIHtSZWFjdFRleHR9IHRleHRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGlzIHJlYWxseSBhIFJlYWN0VGV4dCAoUmVhY3ROb2RlKSwgbm90IGEgUmVhY3RFbGVtZW50XG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSB0ZXh0O1xuICAgIHRoaXMuX3N0cmluZ1RleHQgPSAnJyArIHRleHQ7XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IG51bGw7XG4gICAgdGhpcy5fbW91bnRJbmRleCA9IDA7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG1hcmt1cCBmb3IgdGhpcyB0ZXh0IG5vZGUuIFRoaXMgbm9kZSBpcyBub3QgaW50ZW5kZWQgdG8gaGF2ZVxuICAgKiBhbnkgZmVhdHVyZXMgYmVzaWRlcyBjb250YWluaW5nIHRleHQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ30gTWFya3VwIGZvciB0aGlzIHRleHQgbm9kZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24ocm9vdElELCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSByb290SUQ7XG4gICAgdmFyIGVzY2FwZWRUZXh0ID0gZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHRoaXMuX3N0cmluZ1RleHQpO1xuXG4gICAgaWYgKHRyYW5zYWN0aW9uLnJlbmRlclRvU3RhdGljTWFya3VwKSB7XG4gICAgICAvLyBOb3JtYWxseSB3ZSdkIHdyYXAgdGhpcyBpbiBhIGBzcGFuYCBmb3IgdGhlIHJlYXNvbnMgc3RhdGVkIGFib3ZlLCBidXRcbiAgICAgIC8vIHNpbmNlIHRoaXMgaXMgYSBzaXR1YXRpb24gd2hlcmUgUmVhY3Qgd29uJ3QgdGFrZSBvdmVyIChzdGF0aWMgcGFnZXMpLFxuICAgICAgLy8gd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHRleHQgYXMgaXQgaXMuXG4gICAgICByZXR1cm4gZXNjYXBlZFRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICc8c3BhbiAnICsgRE9NUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvcklEKHJvb3RJRCkgKyAnPicgK1xuICAgICAgICBlc2NhcGVkVGV4dCArXG4gICAgICAnPC9zcGFuPidcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoaXMgY29tcG9uZW50IGJ5IHVwZGF0aW5nIHRoZSB0ZXh0IGNvbnRlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RUZXh0fSBuZXh0VGV4dCBUaGUgbmV4dCB0ZXh0IGNvbnRlbnRcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uKG5leHRUZXh0LCB0cmFuc2FjdGlvbikge1xuICAgIGlmIChuZXh0VGV4dCAhPT0gdGhpcy5fY3VycmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dFRleHQ7XG4gICAgICB2YXIgbmV4dFN0cmluZ1RleHQgPSAnJyArIG5leHRUZXh0O1xuICAgICAgaWYgKG5leHRTdHJpbmdUZXh0ICE9PSB0aGlzLl9zdHJpbmdUZXh0KSB7XG4gICAgICAgIC8vIFRPRE86IFNhdmUgdGhpcyBhcyBwZW5kaW5nIHByb3BzIGFuZCB1c2UgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5XG4gICAgICAgIC8vIGFuZC9vciB1cGRhdGVDb21wb25lbnQgdG8gZG8gdGhlIGFjdHVhbCB1cGRhdGUgZm9yIGNvbnNpc3RlbmN5IHdpdGhcbiAgICAgICAgLy8gb3RoZXIgY29tcG9uZW50IHR5cGVzP1xuICAgICAgICB0aGlzLl9zdHJpbmdUZXh0ID0gbmV4dFN0cmluZ1RleHQ7XG4gICAgICAgIFJlYWN0RE9NQ29tcG9uZW50LkJhY2tlbmRJRE9wZXJhdGlvbnMudXBkYXRlVGV4dENvbnRlbnRCeUlEKFxuICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsXG4gICAgICAgICAgbmV4dFN0cmluZ1RleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24oKSB7XG4gICAgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQudW5tb3VudElERnJvbUVudmlyb25tZW50KHRoaXMuX3Jvb3ROb2RlSUQpO1xuICB9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NVGV4dENvbXBvbmVudDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01UZXh0YXJlYVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEF1dG9Gb2N1c01peGluID0gcmVxdWlyZShcIi4vQXV0b0ZvY3VzTWl4aW5cIik7XG52YXIgRE9NUHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZShcIi4vRE9NUHJvcGVydHlPcGVyYXRpb25zXCIpO1xudmFyIExpbmtlZFZhbHVlVXRpbHMgPSByZXF1aXJlKFwiLi9MaW5rZWRWYWx1ZVV0aWxzXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciB0ZXh0YXJlYSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCd0ZXh0YXJlYScpO1xuXG5mdW5jdGlvbiBmb3JjZVVwZGF0ZUlmTW91bnRlZCgpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgaWYgKHRoaXMuaXNNb3VudGVkKCkpIHtcbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHRleHRhcmVhPiBuYXRpdmUgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgYHZhbHVlYCwgYW5kXG4gKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHRyYWRpdGlvbmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpc1xuICogdXN1YWxseSBzZXQgYXMgUENEQVRBIGNoaWxkcmVuLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGVcbiAqIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsXG4gKiBub3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wXG4gKiBgZGVmYXVsdFZhbHVlYCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXByZWNhdGVkKS5cbiAqL1xudmFyIFJlYWN0RE9NVGV4dGFyZWEgPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTVRleHRhcmVhJyxcbiAgdGFnTmFtZTogJ1RFWFRBUkVBJyxcblxuICBtaXhpbnM6IFtBdXRvRm9jdXNNaXhpbiwgTGlua2VkVmFsdWVVdGlscy5NaXhpbiwgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5dLFxuXG4gIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIC8vIFRPRE8gKHl1bmdzdGVycyk6IFJlbW92ZSBzdXBwb3J0IGZvciBjaGlsZHJlbiBjb250ZW50IGluIDx0ZXh0YXJlYT4uXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIGluc3RlYWQgb2Ygc2V0dGluZyAnICtcbiAgICAgICAgICAnY2hpbGRyZW4gb24gPHRleHRhcmVhPi4nXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgIH1cbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9PSBudWxsLFxuICAgICAgICAnSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLidcbiAgICAgICkgOiBpbnZhcmlhbnQoZGVmYXVsdFZhbHVlID09IG51bGwpKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIGNoaWxkcmVuLmxlbmd0aCA8PSAxLFxuICAgICAgICAgICc8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuJ1xuICAgICAgICApIDogaW52YXJpYW50KGNoaWxkcmVuLmxlbmd0aCA8PSAxKSk7XG4gICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHRWYWx1ZSA9ICcnICsgY2hpbGRyZW47XG4gICAgfVxuICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gJyc7XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFdlIHNhdmUgdGhlIGluaXRpYWwgdmFsdWUgc28gdGhhdCBgUmVhY3RET01Db21wb25lbnRgIGRvZXNuJ3QgdXBkYXRlXG4gICAgICAvLyBgdGV4dENvbnRlbnRgICh1bm5lY2Vzc2FyeSBzaW5jZSB3ZSB1cGRhdGUgdmFsdWUpLlxuICAgICAgLy8gVGhlIGluaXRpYWwgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzXG4gICAgICAvLyBmb3JjZWQgdG8gYmUgYSBzdHJpbmcuXG4gICAgICBpbml0aWFsVmFsdWU6ICcnICsgKHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZSlcbiAgICB9O1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgLy8gQ2xvbmUgYHRoaXMucHJvcHNgIHNvIHdlIGRvbid0IG11dGF0ZSB0aGUgaW5wdXQuXG4gICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCB0aGlzLnByb3BzKTtcblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsLFxuICAgICAgJ2BkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LidcbiAgICApIDogaW52YXJpYW50KHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpKTtcblxuICAgIHByb3BzLmRlZmF1bHRWYWx1ZSA9IG51bGw7XG4gICAgcHJvcHMudmFsdWUgPSBudWxsO1xuICAgIHByb3BzLm9uQ2hhbmdlID0gdGhpcy5faGFuZGxlQ2hhbmdlO1xuXG4gICAgLy8gQWx3YXlzIHNldCBjaGlsZHJlbiB0byB0aGUgc2FtZSB0aGluZy4gSW4gSUU5LCB0aGUgc2VsZWN0aW9uIHJhbmdlIHdpbGxcbiAgICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLlxuICAgIHJldHVybiB0ZXh0YXJlYShwcm9wcywgdGhpcy5zdGF0ZS5pbml0aWFsVmFsdWUpO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZTogZnVuY3Rpb24ocHJldlByb3BzLCBwcmV2U3RhdGUsIHByZXZDb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZSh0aGlzKTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgdmFyIHJvb3ROb2RlID0gdGhpcy5nZXRET01Ob2RlKCk7XG4gICAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yUHJvcGVydHkocm9vdE5vZGUsICd2YWx1ZScsICcnICsgdmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBfaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciByZXR1cm5WYWx1ZTtcbiAgICB2YXIgb25DaGFuZ2UgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldE9uQ2hhbmdlKHRoaXMpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBvbkNoYW5nZS5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gICAgUmVhY3RVcGRhdGVzLmFzYXAoZm9yY2VVcGRhdGVJZk1vdW50ZWQsIHRoaXMpO1xuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTVRleHRhcmVhO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVUMDFVWlhoMFlYSmxZUzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBSRTlOVkdWNGRHRnlaV0ZjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCQmRYUnZSbTlqZFhOTmFYaHBiaUE5SUhKbGNYVnBjbVVvWENJdUwwRjFkRzlHYjJOMWMwMXBlR2x1WENJcE8xeHVkbUZ5SUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWMxd2lLVHRjYm5aaGNpQk1hVzVyWldSV1lXeDFaVlYwYVd4eklEMGdjbVZ4ZFdseVpTaGNJaTR2VEdsdWEyVmtWbUZzZFdWVmRHbHNjMXdpS1R0Y2JuWmhjaUJTWldGamRFSnliM2R6WlhKRGIyMXdiMjVsYm5STmFYaHBiaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUW5KdmQzTmxja052YlhCdmJtVnVkRTFwZUdsdVhDSXBPMXh1ZG1GeUlGSmxZV04wUTJ4aGMzTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU5zWVhOelhDSXBPMXh1ZG1GeUlGSmxZV04wUld4bGJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRndpS1R0Y2JuWmhjaUJTWldGamRGVndaR0YwWlhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGVndaR0YwWlhOY0lpazdYRzVjYm5aaGNpQmhjM05wWjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlQWW1wbFkzUXVZWE56YVdkdVhDSXBPMXh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1ZG1GeUlIZGhjbTVwYm1jZ1BTQnlaWEYxYVhKbEtGd2lMaTkzWVhKdWFXNW5YQ0lwTzF4dVhHNTJZWElnZEdWNGRHRnlaV0VnUFNCU1pXRmpkRVZzWlcxbGJuUXVZM0psWVhSbFJtRmpkRzl5ZVNnbmRHVjRkR0Z5WldFbktUdGNibHh1Wm5WdVkzUnBiMjRnWm05eVkyVlZjR1JoZEdWSlprMXZkVzUwWldRb0tTQjdYRzRnSUM4cWFuTm9hVzUwSUhaaGJHbGtkR2hwY3pwMGNuVmxJQ292WEc0Z0lHbG1JQ2gwYUdsekxtbHpUVzkxYm5SbFpDZ3BLU0I3WEc0Z0lDQWdkR2hwY3k1bWIzSmpaVlZ3WkdGMFpTZ3BPMXh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nU1cxd2JHVnRaVzUwY3lCaElEeDBaWGgwWVhKbFlUNGdibUYwYVhabElHTnZiWEJ2Ym1WdWRDQjBhR0YwSUdGc2JHOTNjeUJ6WlhSMGFXNW5JR0IyWVd4MVpXQXNJR0Z1WkZ4dUlDb2dZR1JsWm1GMWJIUldZV3gxWldBdUlGUm9hWE1nWkdsbVptVnljeUJtY205dElIUm9aU0IwY21Ga2FYUnBiMjVoYkNCRVQwMGdRVkJKSUdKbFkyRjFjMlVnZG1Gc2RXVWdhWE5jYmlBcUlIVnpkV0ZzYkhrZ2MyVjBJR0Z6SUZCRFJFRlVRU0JqYUdsc1pISmxiaTVjYmlBcVhHNGdLaUJKWmlCZ2RtRnNkV1ZnSUdseklHNXZkQ0J6ZFhCd2JHbGxaQ0FvYjNJZ2JuVnNiQzkxYm1SbFptbHVaV1FwTENCMWMyVnlJR0ZqZEdsdmJuTWdkR2hoZENCaFptWmxZM1FnZEdobFhHNGdLaUIyWVd4MVpTQjNhV3hzSUhSeWFXZG5aWElnZFhCa1lYUmxjeUIwYnlCMGFHVWdaV3hsYldWdWRDNWNiaUFxWEc0Z0tpQkpaaUJnZG1Gc2RXVmdJR2x6SUhOMWNIQnNhV1ZrSUNoaGJtUWdibTkwSUc1MWJHd3ZkVzVrWldacGJtVmtLU3dnZEdobElISmxibVJsY21Wa0lHVnNaVzFsYm5RZ2QybHNiRnh1SUNvZ2JtOTBJSFJ5YVdkblpYSWdkWEJrWVhSbGN5QjBieUIwYUdVZ1pXeGxiV1Z1ZEM0Z1NXNXpkR1ZoWkN3Z2RHaGxJR0IyWVd4MVpXQWdjSEp2Y0NCdGRYTjBJR05vWVc1blpTQnBibHh1SUNvZ2IzSmtaWElnWm05eUlIUm9aU0J5Wlc1a1pYSmxaQ0JsYkdWdFpXNTBJSFJ2SUdKbElIVndaR0YwWldRdVhHNGdLbHh1SUNvZ1ZHaGxJSEpsYm1SbGNtVmtJR1ZzWlcxbGJuUWdkMmxzYkNCaVpTQnBibWwwYVdGc2FYcGxaQ0IzYVhSb0lHRnVJR1Z0Y0hSNUlIWmhiSFZsTENCMGFHVWdjSEp2Y0Z4dUlDb2dZR1JsWm1GMWJIUldZV3gxWldBZ2FXWWdjM0JsWTJsbWFXVmtMQ0J2Y2lCMGFHVWdZMmhwYkdSeVpXNGdZMjl1ZEdWdWRDQW9aR1Z3Y21WallYUmxaQ2t1WEc0Z0tpOWNiblpoY2lCU1pXRmpkRVJQVFZSbGVIUmhjbVZoSUQwZ1VtVmhZM1JEYkdGemN5NWpjbVZoZEdWRGJHRnpjeWg3WEc0Z0lHUnBjM0JzWVhsT1lXMWxPaUFuVW1WaFkzUkVUMDFVWlhoMFlYSmxZU2NzWEc0Z0lIUmhaMDVoYldVNklDZFVSVmhVUVZKRlFTY3NYRzVjYmlBZ2JXbDRhVzV6T2lCYlFYVjBiMFp2WTNWelRXbDRhVzRzSUV4cGJtdGxaRlpoYkhWbFZYUnBiSE11VFdsNGFXNHNJRkpsWVdOMFFuSnZkM05sY2tOdmJYQnZibVZ1ZEUxcGVHbHVYU3hjYmx4dUlDQm5aWFJKYm1sMGFXRnNVM1JoZEdVNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lIWmhjaUJrWldaaGRXeDBWbUZzZFdVZ1BTQjBhR2x6TG5CeWIzQnpMbVJsWm1GMWJIUldZV3gxWlR0Y2JpQWdJQ0F2THlCVVQwUlBJQ2g1ZFc1bmMzUmxjbk1wT2lCU1pXMXZkbVVnYzNWd2NHOXlkQ0JtYjNJZ1kyaHBiR1J5Wlc0Z1kyOXVkR1Z1ZENCcGJpQThkR1Y0ZEdGeVpXRStMbHh1SUNBZ0lIWmhjaUJqYUdsc1pISmxiaUE5SUhSb2FYTXVjSEp2Y0hNdVkyaHBiR1J5Wlc0N1hHNGdJQ0FnYVdZZ0tHTm9hV3hrY21WdUlDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDQWdKMVZ6WlNCMGFHVWdZR1JsWm1GMWJIUldZV3gxWldBZ2IzSWdZSFpoYkhWbFlDQndjbTl3Y3lCcGJuTjBaV0ZrSUc5bUlITmxkSFJwYm1jZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjJOb2FXeGtjbVZ1SUc5dUlEeDBaWGgwWVhKbFlUNHVKMXh1SUNBZ0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBWbUZzZFdVZ1BUMGdiblZzYkN4Y2JpQWdJQ0FnSUNBZ0owbG1JSGx2ZFNCemRYQndiSGtnWUdSbFptRjFiSFJXWVd4MVpXQWdiMjRnWVNBOGRHVjRkR0Z5WldFK0xDQmtieUJ1YjNRZ2NHRnpjeUJqYUdsc1pISmxiaTRuWEc0Z0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHUmxabUYxYkhSV1lXeDFaU0E5UFNCdWRXeHNLU2s3WEc0Z0lDQWdJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2hqYUdsc1pISmxiaWtwSUh0Y2JpQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ0lDQmphR2xzWkhKbGJpNXNaVzVuZEdnZ1BEMGdNU3hjYmlBZ0lDQWdJQ0FnSUNBblBIUmxlSFJoY21WaFBpQmpZVzRnYjI1c2VTQm9ZWFpsSUdGMElHMXZjM1FnYjI1bElHTm9hV3hrTGlkY2JpQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hqYUdsc1pISmxiaTVzWlc1bmRHZ2dQRDBnTVNrcE8xeHVJQ0FnSUNBZ0lDQmphR2xzWkhKbGJpQTlJR05vYVd4a2NtVnVXekJkTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCa1pXWmhkV3gwVm1Gc2RXVWdQU0FuSnlBcklHTm9hV3hrY21WdU8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb1pHVm1ZWFZzZEZaaGJIVmxJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJR1JsWm1GMWJIUldZV3gxWlNBOUlDY25PMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdkbUZzZFdVZ1BTQk1hVzVyWldSV1lXeDFaVlYwYVd4ekxtZGxkRlpoYkhWbEtIUm9hWE1wTzF4dUlDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQXZMeUJYWlNCellYWmxJSFJvWlNCcGJtbDBhV0ZzSUhaaGJIVmxJSE52SUhSb1lYUWdZRkpsWVdOMFJFOU5RMjl0Y0c5dVpXNTBZQ0JrYjJWemJpZDBJSFZ3WkdGMFpWeHVJQ0FnSUNBZ0x5OGdZSFJsZUhSRGIyNTBaVzUwWUNBb2RXNXVaV05sYzNOaGNua2djMmx1WTJVZ2QyVWdkWEJrWVhSbElIWmhiSFZsS1M1Y2JpQWdJQ0FnSUM4dklGUm9aU0JwYm1sMGFXRnNJSFpoYkhWbElHTmhiaUJpWlNCaElHSnZiMnhsWVc0Z2IzSWdiMkpxWldOMElITnZJSFJvWVhRbmN5QjNhSGtnYVhRbmMxeHVJQ0FnSUNBZ0x5OGdabTl5WTJWa0lIUnZJR0psSUdFZ2MzUnlhVzVuTGx4dUlDQWdJQ0FnYVc1cGRHbGhiRlpoYkhWbE9pQW5KeUFySUNoMllXeDFaU0FoUFNCdWRXeHNJRDhnZG1Gc2RXVWdPaUJrWldaaGRXeDBWbUZzZFdVcFhHNGdJQ0FnZlR0Y2JpQWdmU3hjYmx4dUlDQnlaVzVrWlhJNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDOHZJRU5zYjI1bElHQjBhR2x6TG5CeWIzQnpZQ0J6YnlCM1pTQmtiMjRuZENCdGRYUmhkR1VnZEdobElHbHVjSFYwTGx4dUlDQWdJSFpoY2lCd2NtOXdjeUE5SUdGemMybG5iaWg3ZlN3Z2RHaHBjeTV3Y205d2N5azdYRzVjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2NISnZjSE11WkdGdVoyVnliM1Z6YkhsVFpYUkpibTVsY2toVVRVd2dQVDBnYm5Wc2JDeGNiaUFnSUNBZ0lDZGdaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV4Z0lHUnZaWE1nYm05MElHMWhhMlVnYzJWdWMyVWdiMjRnUEhSbGVIUmhjbVZoUGk0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHdjbTl3Y3k1a1lXNW5aWEp2ZFhOc2VWTmxkRWx1Ym1WeVNGUk5UQ0E5UFNCdWRXeHNLU2s3WEc1Y2JpQWdJQ0J3Y205d2N5NWtaV1poZFd4MFZtRnNkV1VnUFNCdWRXeHNPMXh1SUNBZ0lIQnliM0J6TG5aaGJIVmxJRDBnYm5Wc2JEdGNiaUFnSUNCd2NtOXdjeTV2YmtOb1lXNW5aU0E5SUhSb2FYTXVYMmhoYm1Sc1pVTm9ZVzVuWlR0Y2JseHVJQ0FnSUM4dklFRnNkMkY1Y3lCelpYUWdZMmhwYkdSeVpXNGdkRzhnZEdobElITmhiV1VnZEdocGJtY3VJRWx1SUVsRk9Td2dkR2hsSUhObGJHVmpkR2x2YmlCeVlXNW5aU0IzYVd4c1hHNGdJQ0FnTHk4Z1oyVjBJSEpsYzJWMElHbG1JR0IwWlhoMFEyOXVkR1Z1ZEdBZ2FYTWdiWFYwWVhSbFpDNWNiaUFnSUNCeVpYUjFjbTRnZEdWNGRHRnlaV0VvY0hKdmNITXNJSFJvYVhNdWMzUmhkR1V1YVc1cGRHbGhiRlpoYkhWbEtUdGNiaUFnZlN4Y2JseHVJQ0JqYjIxd2IyNWxiblJFYVdSVmNHUmhkR1U2SUdaMWJtTjBhVzl1S0hCeVpYWlFjbTl3Y3l3Z2NISmxkbE4wWVhSbExDQndjbVYyUTI5dWRHVjRkQ2tnZTF4dUlDQWdJSFpoY2lCMllXeDFaU0E5SUV4cGJtdGxaRlpoYkhWbFZYUnBiSE11WjJWMFZtRnNkV1VvZEdocGN5azdYRzRnSUNBZ2FXWWdLSFpoYkhWbElDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lIWmhjaUJ5YjI5MFRtOWtaU0E5SUhSb2FYTXVaMlYwUkU5TlRtOWtaU2dwTzF4dUlDQWdJQ0FnTHk4Z1EyRnpkQ0JnZG1Gc2RXVmdJSFJ2SUdFZ2MzUnlhVzVuSUhSdklHVnVjM1Z5WlNCMGFHVWdkbUZzZFdVZ2FYTWdjMlYwSUdOdmNuSmxZM1JzZVM0Z1YyaHBiR1ZjYmlBZ0lDQWdJQzh2SUdKeWIzZHpaWEp6SUhSNWNHbGpZV3hzZVNCa2J5QjBhR2x6SUdGeklHNWxZMlZ6YzJGeWVTd2dhbk5rYjIwZ1pHOWxjMjRuZEM1Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5NXpaWFJXWVd4MVpVWnZjbEJ5YjNCbGNuUjVLSEp2YjNST2IyUmxMQ0FuZG1Gc2RXVW5MQ0FuSnlBcklIWmhiSFZsS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ1gyaGhibVJzWlVOb1lXNW5aVG9nWm5WdVkzUnBiMjRvWlhabGJuUXBJSHRjYmlBZ0lDQjJZWElnY21WMGRYSnVWbUZzZFdVN1hHNGdJQ0FnZG1GeUlHOXVRMmhoYm1kbElEMGdUR2x1YTJWa1ZtRnNkV1ZWZEdsc2N5NW5aWFJQYmtOb1lXNW5aU2gwYUdsektUdGNiaUFnSUNCcFppQW9iMjVEYUdGdVoyVXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJsWmhiSFZsSUQwZ2IyNURhR0Z1WjJVdVkyRnNiQ2gwYUdsekxDQmxkbVZ1ZENrN1hHNGdJQ0FnZlZ4dUlDQWdJRkpsWVdOMFZYQmtZWFJsY3k1aGMyRndLR1p2Y21ObFZYQmtZWFJsU1daTmIzVnVkR1ZrTENCMGFHbHpLVHRjYmlBZ0lDQnlaWFIxY200Z2NtVjBkWEp1Vm1Gc2RXVTdYRzRnSUgxY2JseHVmU2s3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JFVDAxVVpYaDBZWEpsWVR0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3lcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG52YXIgVHJhbnNhY3Rpb24gPSByZXF1aXJlKFwiLi9UcmFuc2FjdGlvblwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbnZhciBSRVNFVF9CQVRDSEVEX1VQREFURVMgPSB7XG4gIGluaXRpYWxpemU6IGVtcHR5RnVuY3Rpb24sXG4gIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzID0gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBGTFVTSF9CQVRDSEVEX1VQREFURVMgPSB7XG4gIGluaXRpYWxpemU6IGVtcHR5RnVuY3Rpb24sXG4gIGNsb3NlOiBSZWFjdFVwZGF0ZXMuZmx1c2hCYXRjaGVkVXBkYXRlcy5iaW5kKFJlYWN0VXBkYXRlcylcbn07XG5cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtGTFVTSF9CQVRDSEVEX1VQREFURVMsIFJFU0VUX0JBVENIRURfVVBEQVRFU107XG5cbmZ1bmN0aW9uIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3lUcmFuc2FjdGlvbigpIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpO1xufVxuXG5hc3NpZ24oXG4gIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3lUcmFuc2FjdGlvbi5wcm90b3R5cGUsXG4gIFRyYW5zYWN0aW9uLk1peGluLFxuICB7XG4gICAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gVFJBTlNBQ1RJT05fV1JBUFBFUlM7XG4gICAgfVxuICB9XG4pO1xuXG52YXIgdHJhbnNhY3Rpb24gPSBuZXcgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVRyYW5zYWN0aW9uKCk7XG5cbnZhciBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5ID0ge1xuICBpc0JhdGNoaW5nVXBkYXRlczogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENhbGwgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIGluIGEgY29udGV4dCB3aXRoaW4gd2hpY2ggY2FsbHMgdG8gYHNldFN0YXRlYFxuICAgKiBhbmQgZnJpZW5kcyBhcmUgYmF0Y2hlZCBzdWNoIHRoYXQgY29tcG9uZW50cyBhcmVuJ3QgdXBkYXRlZCB1bm5lY2Vzc2FyaWx5LlxuICAgKi9cbiAgYmF0Y2hlZFVwZGF0ZXM6IGZ1bmN0aW9uKGNhbGxiYWNrLCBhLCBiLCBjLCBkKSB7XG4gICAgdmFyIGFscmVhZHlCYXRjaGluZ1VwZGF0ZXMgPSBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzO1xuXG4gICAgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcyA9IHRydWU7XG5cbiAgICAvLyBUaGUgY29kZSBpcyB3cml0dGVuIHRoaXMgd2F5IHRvIGF2b2lkIGV4dHJhIGFsbG9jYXRpb25zXG4gICAgaWYgKGFscmVhZHlCYXRjaGluZ1VwZGF0ZXMpIHtcbiAgICAgIGNhbGxiYWNrKGEsIGIsIGMsIGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2FjdGlvbi5wZXJmb3JtKGNhbGxiYWNrLCBudWxsLCBhLCBiLCBjLCBkKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3REZWZhdWx0SW5qZWN0aW9uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQmVmb3JlSW5wdXRFdmVudFBsdWdpbiA9IHJlcXVpcmUoXCIuL0JlZm9yZUlucHV0RXZlbnRQbHVnaW5cIik7XG52YXIgQ2hhbmdlRXZlbnRQbHVnaW4gPSByZXF1aXJlKFwiLi9DaGFuZ2VFdmVudFBsdWdpblwiKTtcbnZhciBDbGllbnRSZWFjdFJvb3RJbmRleCA9IHJlcXVpcmUoXCIuL0NsaWVudFJlYWN0Um9vdEluZGV4XCIpO1xudmFyIERlZmF1bHRFdmVudFBsdWdpbk9yZGVyID0gcmVxdWlyZShcIi4vRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXJcIik7XG52YXIgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luID0gcmVxdWlyZShcIi4vRW50ZXJMZWF2ZUV2ZW50UGx1Z2luXCIpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG52YXIgSFRNTERPTVByb3BlcnR5Q29uZmlnID0gcmVxdWlyZShcIi4vSFRNTERPTVByb3BlcnR5Q29uZmlnXCIpO1xudmFyIE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW4gPSByZXF1aXJlKFwiLi9Nb2JpbGVTYWZhcmlDbGlja0V2ZW50UGx1Z2luXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQgPVxuICByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5ID0gcmVxdWlyZShcIi4vUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVwiKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NQ29tcG9uZW50XCIpO1xudmFyIFJlYWN0RE9NQnV0dG9uID0gcmVxdWlyZShcIi4vUmVhY3RET01CdXR0b25cIik7XG52YXIgUmVhY3RET01Gb3JtID0gcmVxdWlyZShcIi4vUmVhY3RET01Gb3JtXCIpO1xudmFyIFJlYWN0RE9NSW1nID0gcmVxdWlyZShcIi4vUmVhY3RET01JbWdcIik7XG52YXIgUmVhY3RET01JRE9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9SZWFjdERPTUlET3BlcmF0aW9uc1wiKTtcbnZhciBSZWFjdERPTUlmcmFtZSA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NSWZyYW1lXCIpO1xudmFyIFJlYWN0RE9NSW5wdXQgPSByZXF1aXJlKFwiLi9SZWFjdERPTUlucHV0XCIpO1xudmFyIFJlYWN0RE9NT3B0aW9uID0gcmVxdWlyZShcIi4vUmVhY3RET01PcHRpb25cIik7XG52YXIgUmVhY3RET01TZWxlY3QgPSByZXF1aXJlKFwiLi9SZWFjdERPTVNlbGVjdFwiKTtcbnZhciBSZWFjdERPTVRleHRhcmVhID0gcmVxdWlyZShcIi4vUmVhY3RET01UZXh0YXJlYVwiKTtcbnZhciBSZWFjdERPTVRleHRDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdERPTVRleHRDb21wb25lbnRcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RXZlbnRMaXN0ZW5lciA9IHJlcXVpcmUoXCIuL1JlYWN0RXZlbnRMaXN0ZW5lclwiKTtcbnZhciBSZWFjdEluamVjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0SW5qZWN0aW9uXCIpO1xudmFyIFJlYWN0SW5zdGFuY2VIYW5kbGVzID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXNcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb25cIik7XG52YXIgU2VsZWN0RXZlbnRQbHVnaW4gPSByZXF1aXJlKFwiLi9TZWxlY3RFdmVudFBsdWdpblwiKTtcbnZhciBTZXJ2ZXJSZWFjdFJvb3RJbmRleCA9IHJlcXVpcmUoXCIuL1NlcnZlclJlYWN0Um9vdEluZGV4XCIpO1xudmFyIFNpbXBsZUV2ZW50UGx1Z2luID0gcmVxdWlyZShcIi4vU2ltcGxlRXZlbnRQbHVnaW5cIik7XG52YXIgU1ZHRE9NUHJvcGVydHlDb25maWcgPSByZXF1aXJlKFwiLi9TVkdET01Qcm9wZXJ0eUNvbmZpZ1wiKTtcblxudmFyIGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vY3JlYXRlRnVsbFBhZ2VDb21wb25lbnRcIik7XG5cbmZ1bmN0aW9uIGF1dG9HZW5lcmF0ZVdyYXBwZXJDbGFzcyh0eXBlKSB7XG4gIHJldHVybiBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgICB0YWdOYW1lOiB0eXBlLnRvVXBwZXJDYXNlKCksXG4gICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuZXcgUmVhY3RFbGVtZW50KFxuICAgICAgICB0eXBlLFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnByb3BzXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluamVjdCgpIHtcbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRFbWl0dGVyLmluamVjdFJlYWN0RXZlbnRMaXN0ZW5lcihcbiAgICBSZWFjdEV2ZW50TGlzdGVuZXJcbiAgKTtcblxuICAvKipcbiAgICogSW5qZWN0IG1vZHVsZXMgZm9yIHJlc29sdmluZyBET00gaGllcmFyY2h5IGFuZCBwbHVnaW4gb3JkZXJpbmcuXG4gICAqL1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVudFBsdWdpbk9yZGVyKERlZmF1bHRFdmVudFBsdWdpbk9yZGVyKTtcbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRQbHVnaW5IdWIuaW5qZWN0SW5zdGFuY2VIYW5kbGUoUmVhY3RJbnN0YW5jZUhhbmRsZXMpO1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmplY3RNb3VudChSZWFjdE1vdW50KTtcblxuICAvKipcbiAgICogU29tZSBpbXBvcnRhbnQgZXZlbnQgcGx1Z2lucyBpbmNsdWRlZCBieSBkZWZhdWx0ICh3aXRob3V0IGhhdmluZyB0byByZXF1aXJlXG4gICAqIHRoZW0pLlxuICAgKi9cbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRQbHVnaW5IdWIuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtcbiAgICBTaW1wbGVFdmVudFBsdWdpbjogU2ltcGxlRXZlbnRQbHVnaW4sXG4gICAgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luOiBFbnRlckxlYXZlRXZlbnRQbHVnaW4sXG4gICAgQ2hhbmdlRXZlbnRQbHVnaW46IENoYW5nZUV2ZW50UGx1Z2luLFxuICAgIE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW46IE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW4sXG4gICAgU2VsZWN0RXZlbnRQbHVnaW46IFNlbGVjdEV2ZW50UGx1Z2luLFxuICAgIEJlZm9yZUlucHV0RXZlbnRQbHVnaW46IEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbiAgfSk7XG5cbiAgUmVhY3RJbmplY3Rpb24uTmF0aXZlQ29tcG9uZW50LmluamVjdEdlbmVyaWNDb21wb25lbnRDbGFzcyhcbiAgICBSZWFjdERPTUNvbXBvbmVudFxuICApO1xuXG4gIFJlYWN0SW5qZWN0aW9uLk5hdGl2ZUNvbXBvbmVudC5pbmplY3RUZXh0Q29tcG9uZW50Q2xhc3MoXG4gICAgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gICk7XG5cbiAgUmVhY3RJbmplY3Rpb24uTmF0aXZlQ29tcG9uZW50LmluamVjdEF1dG9XcmFwcGVyKFxuICAgIGF1dG9HZW5lcmF0ZVdyYXBwZXJDbGFzc1xuICApO1xuXG4gIC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSBjcmVhdGVGdWxsUGFnZUNvbXBvbmVudCgpIG90aGVyd2lzZSB0aGUgbWl4aW5cbiAgLy8gd29uJ3QgYmUgaW5jbHVkZWQuXG4gIFJlYWN0SW5qZWN0aW9uLkNsYXNzLmluamVjdE1peGluKFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluKTtcblxuICBSZWFjdEluamVjdGlvbi5OYXRpdmVDb21wb25lbnQuaW5qZWN0Q29tcG9uZW50Q2xhc3Nlcyh7XG4gICAgJ2J1dHRvbic6IFJlYWN0RE9NQnV0dG9uLFxuICAgICdmb3JtJzogUmVhY3RET01Gb3JtLFxuICAgICdpZnJhbWUnOiBSZWFjdERPTUlmcmFtZSxcbiAgICAnaW1nJzogUmVhY3RET01JbWcsXG4gICAgJ2lucHV0JzogUmVhY3RET01JbnB1dCxcbiAgICAnb3B0aW9uJzogUmVhY3RET01PcHRpb24sXG4gICAgJ3NlbGVjdCc6IFJlYWN0RE9NU2VsZWN0LFxuICAgICd0ZXh0YXJlYSc6IFJlYWN0RE9NVGV4dGFyZWEsXG5cbiAgICAnaHRtbCc6IGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50KCdodG1sJyksXG4gICAgJ2hlYWQnOiBjcmVhdGVGdWxsUGFnZUNvbXBvbmVudCgnaGVhZCcpLFxuICAgICdib2R5JzogY3JlYXRlRnVsbFBhZ2VDb21wb25lbnQoJ2JvZHknKVxuICB9KTtcblxuICBSZWFjdEluamVjdGlvbi5ET01Qcm9wZXJ0eS5pbmplY3RET01Qcm9wZXJ0eUNvbmZpZyhIVE1MRE9NUHJvcGVydHlDb25maWcpO1xuICBSZWFjdEluamVjdGlvbi5ET01Qcm9wZXJ0eS5pbmplY3RET01Qcm9wZXJ0eUNvbmZpZyhTVkdET01Qcm9wZXJ0eUNvbmZpZyk7XG5cbiAgUmVhY3RJbmplY3Rpb24uRW1wdHlDb21wb25lbnQuaW5qZWN0RW1wdHlDb21wb25lbnQoJ25vc2NyaXB0Jyk7XG5cbiAgUmVhY3RJbmplY3Rpb24uVXBkYXRlcy5pbmplY3RSZWNvbmNpbGVUcmFuc2FjdGlvbihcbiAgICBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uXG4gICk7XG4gIFJlYWN0SW5qZWN0aW9uLlVwZGF0ZXMuaW5qZWN0QmF0Y2hpbmdTdHJhdGVneShcbiAgICBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5XG4gICk7XG5cbiAgUmVhY3RJbmplY3Rpb24uUm9vdEluZGV4LmluamVjdENyZWF0ZVJlYWN0Um9vdEluZGV4KFxuICAgIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/XG4gICAgICBDbGllbnRSZWFjdFJvb3RJbmRleC5jcmVhdGVSZWFjdFJvb3RJbmRleCA6XG4gICAgICBTZXJ2ZXJSZWFjdFJvb3RJbmRleC5jcmVhdGVSZWFjdFJvb3RJbmRleFxuICApO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkNvbXBvbmVudC5pbmplY3RFbnZpcm9ubWVudChSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCk7XG4gIFJlYWN0SW5qZWN0aW9uLkRPTUNvbXBvbmVudC5pbmplY3RJRE9wZXJhdGlvbnMoUmVhY3RET01JRE9wZXJhdGlvbnMpO1xuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICB2YXIgdXJsID0gKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiB3aW5kb3cubG9jYXRpb24uaHJlZikgfHwgJyc7XG4gICAgaWYgKCgvWz8mXXJlYWN0X3BlcmZcXGIvKS50ZXN0KHVybCkpIHtcbiAgICAgIHZhciBSZWFjdERlZmF1bHRQZXJmID0gcmVxdWlyZShcIi4vUmVhY3REZWZhdWx0UGVyZlwiKTtcbiAgICAgIFJlYWN0RGVmYXVsdFBlcmYuc3RhcnQoKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluamVjdDogaW5qZWN0XG59O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVaV1poZFd4MFNXNXFaV04wYVc5dUxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRVJsWm1GMWJIUkpibXBsWTNScGIyNWNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJDWldadmNtVkpibkIxZEVWMlpXNTBVR3gxWjJsdUlEMGdjbVZ4ZFdseVpTaGNJaTR2UW1WbWIzSmxTVzV3ZFhSRmRtVnVkRkJzZFdkcGJsd2lLVHRjYm5aaGNpQkRhR0Z1WjJWRmRtVnVkRkJzZFdkcGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDBOb1lXNW5aVVYyWlc1MFVHeDFaMmx1WENJcE8xeHVkbUZ5SUVOc2FXVnVkRkpsWVdOMFVtOXZkRWx1WkdWNElEMGdjbVZ4ZFdseVpTaGNJaTR2UTJ4cFpXNTBVbVZoWTNSU2IyOTBTVzVrWlhoY0lpazdYRzUyWVhJZ1JHVm1ZWFZzZEVWMlpXNTBVR3gxWjJsdVQzSmtaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOUVaV1poZFd4MFJYWmxiblJRYkhWbmFXNVBjbVJsY2x3aUtUdGNiblpoY2lCRmJuUmxja3hsWVhabFJYWmxiblJRYkhWbmFXNGdQU0J5WlhGMWFYSmxLRndpTGk5RmJuUmxja3hsWVhabFJYWmxiblJRYkhWbmFXNWNJaWs3WEc1MllYSWdSWGhsWTNWMGFXOXVSVzUyYVhKdmJtMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOUZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkRndpS1R0Y2JuWmhjaUJJVkUxTVJFOU5VSEp2Y0dWeWRIbERiMjVtYVdjZ1BTQnlaWEYxYVhKbEtGd2lMaTlJVkUxTVJFOU5VSEp2Y0dWeWRIbERiMjVtYVdkY0lpazdYRzUyWVhJZ1RXOWlhV3hsVTJGbVlYSnBRMnhwWTJ0RmRtVnVkRkJzZFdkcGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDAxdlltbHNaVk5oWm1GeWFVTnNhV05yUlhabGJuUlFiSFZuYVc1Y0lpazdYRzUyWVhJZ1VtVmhZM1JDY205M2MyVnlRMjl0Y0c5dVpXNTBUV2w0YVc0Z1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFSnliM2R6WlhKRGIyMXdiMjVsYm5STmFYaHBibHdpS1R0Y2JuWmhjaUJTWldGamRFTnNZWE56SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRGJHRnpjMXdpS1R0Y2JuWmhjaUJTWldGamRFTnZiWEJ2Ym1WdWRFSnliM2R6WlhKRmJuWnBjbTl1YldWdWRDQTlYRzRnSUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUTI5dGNHOXVaVzUwUW5KdmQzTmxja1Z1ZG1seWIyNXRaVzUwWENJcE8xeHVkbUZ5SUZKbFlXTjBSR1ZtWVhWc2RFSmhkR05vYVc1blUzUnlZWFJsWjNrZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUmxabUYxYkhSQ1lYUmphR2x1WjFOMGNtRjBaV2Q1WENJcE8xeHVkbUZ5SUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRVQwMURiMjF3YjI1bGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSRVQwMUNkWFIwYjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUlBUVUoxZEhSdmJsd2lLVHRjYm5aaGNpQlNaV0ZqZEVSUFRVWnZjbTBnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSUFRVWnZjbTFjSWlrN1hHNTJZWElnVW1WaFkzUkVUMDFKYldjZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUlBUVWx0WjF3aUtUdGNiblpoY2lCU1pXRmpkRVJQVFVsRVQzQmxjbUYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSRTlOU1VSUGNHVnlZWFJwYjI1elhDSXBPMXh1ZG1GeUlGSmxZV04wUkU5TlNXWnlZVzFsSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRVQwMUpabkpoYldWY0lpazdYRzUyWVhJZ1VtVmhZM1JFVDAxSmJuQjFkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUkU5TlNXNXdkWFJjSWlrN1hHNTJZWElnVW1WaFkzUkVUMDFQY0hScGIyNGdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVJQVFU5d2RHbHZibHdpS1R0Y2JuWmhjaUJTWldGamRFUlBUVk5sYkdWamRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSRTlOVTJWc1pXTjBYQ0lwTzF4dWRtRnlJRkpsWVdOMFJFOU5WR1Y0ZEdGeVpXRWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVJQVFZSbGVIUmhjbVZoWENJcE8xeHVkbUZ5SUZKbFlXTjBSRTlOVkdWNGRFTnZiWEJ2Ym1WdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSRTlOVkdWNGRFTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUkZkbVZ1ZEV4cGMzUmxibVZ5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRmRtVnVkRXhwYzNSbGJtVnlYQ0lwTzF4dWRtRnlJRkpsWVdOMFNXNXFaV04wYVc5dUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkpibXBsWTNScGIyNWNJaWs3WEc1MllYSWdVbVZoWTNSSmJuTjBZVzVqWlVoaGJtUnNaWE1nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVsdWMzUmhibU5sU0dGdVpHeGxjMXdpS1R0Y2JuWmhjaUJTWldGamRFMXZkVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSTmIzVnVkRndpS1R0Y2JuWmhjaUJTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ymx3aUtUdGNiblpoY2lCVFpXeGxZM1JGZG1WdWRGQnNkV2RwYmlBOUlISmxjWFZwY21Vb1hDSXVMMU5sYkdWamRFVjJaVzUwVUd4MVoybHVYQ0lwTzF4dWRtRnlJRk5sY25abGNsSmxZV04wVW05dmRFbHVaR1Y0SUQwZ2NtVnhkV2x5WlNoY0lpNHZVMlZ5ZG1WeVVtVmhZM1JTYjI5MFNXNWtaWGhjSWlrN1hHNTJZWElnVTJsdGNHeGxSWFpsYm5SUWJIVm5hVzRnUFNCeVpYRjFhWEpsS0Z3aUxpOVRhVzF3YkdWRmRtVnVkRkJzZFdkcGJsd2lLVHRjYm5aaGNpQlRWa2RFVDAxUWNtOXdaWEowZVVOdmJtWnBaeUE5SUhKbGNYVnBjbVVvWENJdUwxTldSMFJQVFZCeWIzQmxjblI1UTI5dVptbG5YQ0lwTzF4dVhHNTJZWElnWTNKbFlYUmxSblZzYkZCaFoyVkRiMjF3YjI1bGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5amNtVmhkR1ZHZFd4c1VHRm5aVU52YlhCdmJtVnVkRndpS1R0Y2JseHVablZ1WTNScGIyNGdZWFYwYjBkbGJtVnlZWFJsVjNKaGNIQmxja05zWVhOektIUjVjR1VwSUh0Y2JpQWdjbVYwZFhKdUlGSmxZV04wUTJ4aGMzTXVZM0psWVhSbFEyeGhjM01vZTF4dUlDQWdJSFJoWjA1aGJXVTZJSFI1Y0dVdWRHOVZjSEJsY2tOaGMyVW9LU3hjYmlBZ0lDQnlaVzVrWlhJNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJTWldGamRFVnNaVzFsYm5Rb1hHNGdJQ0FnSUNBZ0lIUjVjR1VzWEc0Z0lDQWdJQ0FnSUc1MWJHd3NYRzRnSUNBZ0lDQWdJRzUxYkd3c1hHNGdJQ0FnSUNBZ0lHNTFiR3dzWEc0Z0lDQWdJQ0FnSUc1MWJHd3NYRzRnSUNBZ0lDQWdJSFJvYVhNdWNISnZjSE5jYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1SUNCOUtUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2FXNXFaV04wS0NrZ2UxeHVJQ0JTWldGamRFbHVhbVZqZEdsdmJpNUZkbVZ1ZEVWdGFYUjBaWEl1YVc1cVpXTjBVbVZoWTNSRmRtVnVkRXhwYzNSbGJtVnlLRnh1SUNBZ0lGSmxZV04wUlhabGJuUk1hWE4wWlc1bGNseHVJQ0FwTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJKYm1wbFkzUWdiVzlrZFd4bGN5Qm1iM0lnY21WemIyeDJhVzVuSUVSUFRTQm9hV1Z5WVhKamFIa2dZVzVrSUhCc2RXZHBiaUJ2Y21SbGNtbHVaeTVjYmlBZ0lDb3ZYRzRnSUZKbFlXTjBTVzVxWldOMGFXOXVMa1YyWlc1MFVHeDFaMmx1U0hWaUxtbHVhbVZqZEVWMlpXNTBVR3gxWjJsdVQzSmtaWElvUkdWbVlYVnNkRVYyWlc1MFVHeDFaMmx1VDNKa1pYSXBPMXh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVGZG1WdWRGQnNkV2RwYmtoMVlpNXBibXBsWTNSSmJuTjBZVzVqWlVoaGJtUnNaU2hTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3lrN1hHNGdJRkpsWVdOMFNXNXFaV04wYVc5dUxrVjJaVzUwVUd4MVoybHVTSFZpTG1sdWFtVmpkRTF2ZFc1MEtGSmxZV04wVFc5MWJuUXBPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRiMjFsSUdsdGNHOXlkR0Z1ZENCbGRtVnVkQ0J3YkhWbmFXNXpJR2x1WTJ4MVpHVmtJR0o1SUdSbFptRjFiSFFnS0hkcGRHaHZkWFFnYUdGMmFXNW5JSFJ2SUhKbGNYVnBjbVZjYmlBZ0lDb2dkR2hsYlNrdVhHNGdJQ0FxTDF4dUlDQlNaV0ZqZEVsdWFtVmpkR2x2Ymk1RmRtVnVkRkJzZFdkcGJraDFZaTVwYm1wbFkzUkZkbVZ1ZEZCc2RXZHBibk5DZVU1aGJXVW9lMXh1SUNBZ0lGTnBiWEJzWlVWMlpXNTBVR3gxWjJsdU9pQlRhVzF3YkdWRmRtVnVkRkJzZFdkcGJpeGNiaUFnSUNCRmJuUmxja3hsWVhabFJYWmxiblJRYkhWbmFXNDZJRVZ1ZEdWeVRHVmhkbVZGZG1WdWRGQnNkV2RwYml4Y2JpQWdJQ0JEYUdGdVoyVkZkbVZ1ZEZCc2RXZHBiam9nUTJoaGJtZGxSWFpsYm5SUWJIVm5hVzRzWEc0Z0lDQWdUVzlpYVd4bFUyRm1ZWEpwUTJ4cFkydEZkbVZ1ZEZCc2RXZHBiam9nVFc5aWFXeGxVMkZtWVhKcFEyeHBZMnRGZG1WdWRGQnNkV2RwYml4Y2JpQWdJQ0JUWld4bFkzUkZkbVZ1ZEZCc2RXZHBiam9nVTJWc1pXTjBSWFpsYm5SUWJIVm5hVzRzWEc0Z0lDQWdRbVZtYjNKbFNXNXdkWFJGZG1WdWRGQnNkV2RwYmpvZ1FtVm1iM0psU1c1d2RYUkZkbVZ1ZEZCc2RXZHBibHh1SUNCOUtUdGNibHh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVPWVhScGRtVkRiMjF3YjI1bGJuUXVhVzVxWldOMFIyVnVaWEpwWTBOdmJYQnZibVZ1ZEVOc1lYTnpLRnh1SUNBZ0lGSmxZV04wUkU5TlEyOXRjRzl1Wlc1MFhHNGdJQ2s3WEc1Y2JpQWdVbVZoWTNSSmJtcGxZM1JwYjI0dVRtRjBhWFpsUTI5dGNHOXVaVzUwTG1sdWFtVmpkRlJsZUhSRGIyMXdiMjVsYm5SRGJHRnpjeWhjYmlBZ0lDQlNaV0ZqZEVSUFRWUmxlSFJEYjIxd2IyNWxiblJjYmlBZ0tUdGNibHh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVPWVhScGRtVkRiMjF3YjI1bGJuUXVhVzVxWldOMFFYVjBiMWR5WVhCd1pYSW9YRzRnSUNBZ1lYVjBiMGRsYm1WeVlYUmxWM0poY0hCbGNrTnNZWE56WEc0Z0lDazdYRzVjYmlBZ0x5OGdWR2hwY3lCdVpXVmtjeUIwYnlCb1lYQndaVzRnWW1WbWIzSmxJR055WldGMFpVWjFiR3hRWVdkbFEyOXRjRzl1Wlc1MEtDa2diM1JvWlhKM2FYTmxJSFJvWlNCdGFYaHBibHh1SUNBdkx5QjNiMjRuZENCaVpTQnBibU5zZFdSbFpDNWNiaUFnVW1WaFkzUkpibXBsWTNScGIyNHVRMnhoYzNNdWFXNXFaV04wVFdsNGFXNG9VbVZoWTNSQ2NtOTNjMlZ5UTI5dGNHOXVaVzUwVFdsNGFXNHBPMXh1WEc0Z0lGSmxZV04wU1c1cVpXTjBhVzl1TGs1aGRHbDJaVU52YlhCdmJtVnVkQzVwYm1wbFkzUkRiMjF3YjI1bGJuUkRiR0Z6YzJWektIdGNiaUFnSUNBblluVjBkRzl1SnpvZ1VtVmhZM1JFVDAxQ2RYUjBiMjRzWEc0Z0lDQWdKMlp2Y20wbk9pQlNaV0ZqZEVSUFRVWnZjbTBzWEc0Z0lDQWdKMmxtY21GdFpTYzZJRkpsWVdOMFJFOU5TV1p5WVcxbExGeHVJQ0FnSUNkcGJXY25PaUJTWldGamRFUlBUVWx0Wnl4Y2JpQWdJQ0FuYVc1d2RYUW5PaUJTWldGamRFUlBUVWx1Y0hWMExGeHVJQ0FnSUNkdmNIUnBiMjRuT2lCU1pXRmpkRVJQVFU5d2RHbHZiaXhjYmlBZ0lDQW5jMlZzWldOMEp6b2dVbVZoWTNSRVQwMVRaV3hsWTNRc1hHNGdJQ0FnSjNSbGVIUmhjbVZoSnpvZ1VtVmhZM1JFVDAxVVpYaDBZWEpsWVN4Y2JseHVJQ0FnSUNkb2RHMXNKem9nWTNKbFlYUmxSblZzYkZCaFoyVkRiMjF3YjI1bGJuUW9KMmgwYld3bktTeGNiaUFnSUNBbmFHVmhaQ2M2SUdOeVpXRjBaVVoxYkd4UVlXZGxRMjl0Y0c5dVpXNTBLQ2RvWldGa0p5a3NYRzRnSUNBZ0oySnZaSGtuT2lCamNtVmhkR1ZHZFd4c1VHRm5aVU52YlhCdmJtVnVkQ2duWW05a2VTY3BYRzRnSUgwcE8xeHVYRzRnSUZKbFlXTjBTVzVxWldOMGFXOXVMa1JQVFZCeWIzQmxjblI1TG1sdWFtVmpkRVJQVFZCeWIzQmxjblI1UTI5dVptbG5LRWhVVFV4RVQwMVFjbTl3WlhKMGVVTnZibVpwWnlrN1hHNGdJRkpsWVdOMFNXNXFaV04wYVc5dUxrUlBUVkJ5YjNCbGNuUjVMbWx1YW1WamRFUlBUVkJ5YjNCbGNuUjVRMjl1Wm1sbktGTldSMFJQVFZCeWIzQmxjblI1UTI5dVptbG5LVHRjYmx4dUlDQlNaV0ZqZEVsdWFtVmpkR2x2Ymk1RmJYQjBlVU52YlhCdmJtVnVkQzVwYm1wbFkzUkZiWEIwZVVOdmJYQnZibVZ1ZENnbmJtOXpZM0pwY0hRbktUdGNibHh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVWY0dSaGRHVnpMbWx1YW1WamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVLRnh1SUNBZ0lGSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI1Y2JpQWdLVHRjYmlBZ1VtVmhZM1JKYm1wbFkzUnBiMjR1VlhCa1lYUmxjeTVwYm1wbFkzUkNZWFJqYUdsdVoxTjBjbUYwWldkNUtGeHVJQ0FnSUZKbFlXTjBSR1ZtWVhWc2RFSmhkR05vYVc1blUzUnlZWFJsWjNsY2JpQWdLVHRjYmx4dUlDQlNaV0ZqZEVsdWFtVmpkR2x2Ymk1U2IyOTBTVzVrWlhndWFXNXFaV04wUTNKbFlYUmxVbVZoWTNSU2IyOTBTVzVrWlhnb1hHNGdJQ0FnUlhobFkzVjBhVzl1Ulc1MmFYSnZibTFsYm5RdVkyRnVWWE5sUkU5TklEOWNiaUFnSUNBZ0lFTnNhV1Z1ZEZKbFlXTjBVbTl2ZEVsdVpHVjRMbU55WldGMFpWSmxZV04wVW05dmRFbHVaR1Y0SURwY2JpQWdJQ0FnSUZObGNuWmxjbEpsWVdOMFVtOXZkRWx1WkdWNExtTnlaV0YwWlZKbFlXTjBVbTl2ZEVsdVpHVjRYRzRnSUNrN1hHNWNiaUFnVW1WaFkzUkpibXBsWTNScGIyNHVRMjl0Y0c5dVpXNTBMbWx1YW1WamRFVnVkbWx5YjI1dFpXNTBLRkpsWVdOMFEyOXRjRzl1Wlc1MFFuSnZkM05sY2tWdWRtbHliMjV0Wlc1MEtUdGNiaUFnVW1WaFkzUkpibXBsWTNScGIyNHVSRTlOUTI5dGNHOXVaVzUwTG1sdWFtVmpkRWxFVDNCbGNtRjBhVzl1Y3loU1pXRmpkRVJQVFVsRVQzQmxjbUYwYVc5dWN5azdYRzVjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUhaaGNpQjFjbXdnUFNBb1JYaGxZM1YwYVc5dVJXNTJhWEp2Ym0xbGJuUXVZMkZ1VlhObFJFOU5JQ1ltSUhkcGJtUnZkeTVzYjJOaGRHbHZiaTVvY21WbUtTQjhmQ0FuSnp0Y2JpQWdJQ0JwWmlBb0tDOWJQeVpkY21WaFkzUmZjR1Z5Wmx4Y1lpOHBMblJsYzNRb2RYSnNLU2tnZTF4dUlDQWdJQ0FnZG1GeUlGSmxZV04wUkdWbVlYVnNkRkJsY21ZZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUmxabUYxYkhSUVpYSm1YQ0lwTzF4dUlDQWdJQ0FnVW1WaFkzUkVaV1poZFd4MFVHVnlaaTV6ZEdGeWRDZ3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dWZWeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJSHRjYmlBZ2FXNXFaV04wT2lCcGJtcGxZM1JjYm4wN1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RGVmYXVsdFBlcmZcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcbnZhciBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMgPSByZXF1aXJlKFwiLi9SZWFjdERlZmF1bHRQZXJmQW5hbHlzaXNcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xuXG52YXIgcGVyZm9ybWFuY2VOb3cgPSByZXF1aXJlKFwiLi9wZXJmb3JtYW5jZU5vd1wiKTtcblxuZnVuY3Rpb24gcm91bmRGbG9hdCh2YWwpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IodmFsICogMTAwKSAvIDEwMDtcbn1cblxuZnVuY3Rpb24gYWRkVmFsdWUob2JqLCBrZXksIHZhbCkge1xuICBvYmpba2V5XSA9IChvYmpba2V5XSB8fCAwKSArIHZhbDtcbn1cblxudmFyIFJlYWN0RGVmYXVsdFBlcmYgPSB7XG4gIF9hbGxNZWFzdXJlbWVudHM6IFtdLCAvLyBsYXN0IGl0ZW0gaW4gdGhlIGxpc3QgaXMgdGhlIGN1cnJlbnQgb25lXG4gIF9tb3VudFN0YWNrOiBbMF0sXG4gIF9pbmplY3RlZDogZmFsc2UsXG5cbiAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICghUmVhY3REZWZhdWx0UGVyZi5faW5qZWN0ZWQpIHtcbiAgICAgIFJlYWN0UGVyZi5pbmplY3Rpb24uaW5qZWN0TWVhc3VyZShSZWFjdERlZmF1bHRQZXJmLm1lYXN1cmUpO1xuICAgIH1cblxuICAgIFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cy5sZW5ndGggPSAwO1xuICAgIFJlYWN0UGVyZi5lbmFibGVNZWFzdXJlID0gdHJ1ZTtcbiAgfSxcblxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBSZWFjdFBlcmYuZW5hYmxlTWVhc3VyZSA9IGZhbHNlO1xuICB9LFxuXG4gIGdldExhc3RNZWFzdXJlbWVudHM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHM7XG4gIH0sXG5cbiAgcHJpbnRFeGNsdXNpdmU6IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykge1xuICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cyB8fCBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHM7XG4gICAgdmFyIHN1bW1hcnkgPSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuZ2V0RXhjbHVzaXZlU3VtbWFyeShtZWFzdXJlbWVudHMpO1xuICAgIGNvbnNvbGUudGFibGUoc3VtbWFyeS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ0NvbXBvbmVudCBjbGFzcyBuYW1lJzogaXRlbS5jb21wb25lbnROYW1lLFxuICAgICAgICAnVG90YWwgaW5jbHVzaXZlIHRpbWUgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS5pbmNsdXNpdmUpLFxuICAgICAgICAnRXhjbHVzaXZlIG1vdW50IHRpbWUgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS5leGNsdXNpdmUpLFxuICAgICAgICAnRXhjbHVzaXZlIHJlbmRlciB0aW1lIChtcyknOiByb3VuZEZsb2F0KGl0ZW0ucmVuZGVyKSxcbiAgICAgICAgJ01vdW50IHRpbWUgcGVyIGluc3RhbmNlIChtcyknOiByb3VuZEZsb2F0KGl0ZW0uZXhjbHVzaXZlIC8gaXRlbS5jb3VudCksXG4gICAgICAgICdSZW5kZXIgdGltZSBwZXIgaW5zdGFuY2UgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS5yZW5kZXIgLyBpdGVtLmNvdW50KSxcbiAgICAgICAgJ0luc3RhbmNlcyc6IGl0ZW0uY291bnRcbiAgICAgIH07XG4gICAgfSkpO1xuICAgIC8vIFRPRE86IFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRUb3RhbFRpbWUoKSBkb2VzIG5vdCByZXR1cm4gdGhlIGNvcnJlY3RcbiAgICAvLyBudW1iZXIuXG4gIH0sXG5cbiAgcHJpbnRJbmNsdXNpdmU6IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykge1xuICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cyB8fCBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHM7XG4gICAgdmFyIHN1bW1hcnkgPSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuZ2V0SW5jbHVzaXZlU3VtbWFyeShtZWFzdXJlbWVudHMpO1xuICAgIGNvbnNvbGUudGFibGUoc3VtbWFyeS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ093bmVyID4gY29tcG9uZW50JzogaXRlbS5jb21wb25lbnROYW1lLFxuICAgICAgICAnSW5jbHVzaXZlIHRpbWUgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS50aW1lKSxcbiAgICAgICAgJ0luc3RhbmNlcyc6IGl0ZW0uY291bnRcbiAgICAgIH07XG4gICAgfSkpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1RvdGFsIHRpbWU6JyxcbiAgICAgIFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRUb3RhbFRpbWUobWVhc3VyZW1lbnRzKS50b0ZpeGVkKDIpICsgJyBtcydcbiAgICApO1xuICB9LFxuXG4gIGdldE1lYXN1cmVtZW50c1N1bW1hcnlNYXA6IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykge1xuICAgIHZhciBzdW1tYXJ5ID0gUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmdldEluY2x1c2l2ZVN1bW1hcnkoXG4gICAgICBtZWFzdXJlbWVudHMsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICByZXR1cm4gc3VtbWFyeS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ093bmVyID4gY29tcG9uZW50JzogaXRlbS5jb21wb25lbnROYW1lLFxuICAgICAgICAnV2FzdGVkIHRpbWUgKG1zKSc6IGl0ZW0udGltZSxcbiAgICAgICAgJ0luc3RhbmNlcyc6IGl0ZW0uY291bnRcbiAgICAgIH07XG4gICAgfSk7XG4gIH0sXG5cbiAgcHJpbnRXYXN0ZWQ6IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykge1xuICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cyB8fCBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHM7XG4gICAgY29uc29sZS50YWJsZShSZWFjdERlZmF1bHRQZXJmLmdldE1lYXN1cmVtZW50c1N1bW1hcnlNYXAobWVhc3VyZW1lbnRzKSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnVG90YWwgdGltZTonLFxuICAgICAgUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmdldFRvdGFsVGltZShtZWFzdXJlbWVudHMpLnRvRml4ZWQoMikgKyAnIG1zJ1xuICAgICk7XG4gIH0sXG5cbiAgcHJpbnRET006IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykge1xuICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cyB8fCBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHM7XG4gICAgdmFyIHN1bW1hcnkgPSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuZ2V0RE9NU3VtbWFyeShtZWFzdXJlbWVudHMpO1xuICAgIGNvbnNvbGUudGFibGUoc3VtbWFyeS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgcmVzdWx0W0RPTVByb3BlcnR5LklEX0FUVFJJQlVURV9OQU1FXSA9IGl0ZW0uaWQ7XG4gICAgICByZXN1bHRbJ3R5cGUnXSA9IGl0ZW0udHlwZTtcbiAgICAgIHJlc3VsdFsnYXJncyddID0gSlNPTi5zdHJpbmdpZnkoaXRlbS5hcmdzKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1RvdGFsIHRpbWU6JyxcbiAgICAgIFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRUb3RhbFRpbWUobWVhc3VyZW1lbnRzKS50b0ZpeGVkKDIpICsgJyBtcydcbiAgICApO1xuICB9LFxuXG4gIF9yZWNvcmRXcml0ZTogZnVuY3Rpb24oaWQsIGZuTmFtZSwgdG90YWxUaW1lLCBhcmdzKSB7XG4gICAgLy8gVE9ETzogdG90YWxUaW1lIGlzbid0IHRoYXQgdXNlZnVsIHNpbmNlIGl0IGRvZXNuJ3QgY291bnQgcGFpbnRzL3JlZmxvd3NcbiAgICB2YXIgd3JpdGVzID1cbiAgICAgIFJlYWN0RGVmYXVsdFBlcmZcbiAgICAgICAgLl9hbGxNZWFzdXJlbWVudHNbUmVhY3REZWZhdWx0UGVyZi5fYWxsTWVhc3VyZW1lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIC53cml0ZXM7XG4gICAgd3JpdGVzW2lkXSA9IHdyaXRlc1tpZF0gfHwgW107XG4gICAgd3JpdGVzW2lkXS5wdXNoKHtcbiAgICAgIHR5cGU6IGZuTmFtZSxcbiAgICAgIHRpbWU6IHRvdGFsVGltZSxcbiAgICAgIGFyZ3M6IGFyZ3NcbiAgICB9KTtcbiAgfSxcblxuICBtZWFzdXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBmbk5hbWUsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7Zm9yICh2YXIgYXJncz1bXSwkX18wPTAsJF9fMT1hcmd1bWVudHMubGVuZ3RoOyRfXzA8JF9fMTskX18wKyspIGFyZ3MucHVzaChhcmd1bWVudHNbJF9fMF0pO1xuICAgICAgdmFyIHRvdGFsVGltZTtcbiAgICAgIHZhciBydjtcbiAgICAgIHZhciBzdGFydDtcblxuICAgICAgaWYgKGZuTmFtZSA9PT0gJ19yZW5kZXJOZXdSb290Q29tcG9uZW50JyB8fFxuICAgICAgICAgIGZuTmFtZSA9PT0gJ2ZsdXNoQmF0Y2hlZFVwZGF0ZXMnKSB7XG4gICAgICAgIC8vIEEgXCJtZWFzdXJlbWVudFwiIGlzIGEgc2V0IG9mIG1ldHJpY3MgcmVjb3JkZWQgZm9yIGVhY2ggZmx1c2guIFdlIHdhbnRcbiAgICAgICAgLy8gdG8gZ3JvdXAgdGhlIG1ldHJpY3MgZm9yIGEgZ2l2ZW4gZmx1c2ggdG9nZXRoZXIgc28gd2UgY2FuIGxvb2sgYXQgdGhlXG4gICAgICAgIC8vIGNvbXBvbmVudHMgdGhhdCByZW5kZXJlZCBhbmQgdGhlIERPTSBvcGVyYXRpb25zIHRoYXQgYWN0dWFsbHlcbiAgICAgICAgLy8gaGFwcGVuZWQgdG8gZGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgXCJ3YXN0ZWQgd29ya1wiIHBlcmZvcm1lZC5cbiAgICAgICAgUmVhY3REZWZhdWx0UGVyZi5fYWxsTWVhc3VyZW1lbnRzLnB1c2goe1xuICAgICAgICAgIGV4Y2x1c2l2ZToge30sXG4gICAgICAgICAgaW5jbHVzaXZlOiB7fSxcbiAgICAgICAgICByZW5kZXI6IHt9LFxuICAgICAgICAgIGNvdW50czoge30sXG4gICAgICAgICAgd3JpdGVzOiB7fSxcbiAgICAgICAgICBkaXNwbGF5TmFtZXM6IHt9LFxuICAgICAgICAgIHRvdGFsVGltZTogMFxuICAgICAgICB9KTtcbiAgICAgICAgc3RhcnQgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICBydiA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50c1tcbiAgICAgICAgICBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHMubGVuZ3RoIC0gMVxuICAgICAgICBdLnRvdGFsVGltZSA9IHBlcmZvcm1hbmNlTm93KCkgLSBzdGFydDtcbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgfSBlbHNlIGlmIChmbk5hbWUgPT09ICdfbW91bnRJbWFnZUludG9Ob2RlJyB8fFxuICAgICAgICAgIG1vZHVsZU5hbWUgPT09ICdSZWFjdERPTUlET3BlcmF0aW9ucycpIHtcbiAgICAgICAgc3RhcnQgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICBydiA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHRvdGFsVGltZSA9IHBlcmZvcm1hbmNlTm93KCkgLSBzdGFydDtcblxuICAgICAgICBpZiAoZm5OYW1lID09PSAnX21vdW50SW1hZ2VJbnRvTm9kZScpIHtcbiAgICAgICAgICB2YXIgbW91bnRJRCA9IFJlYWN0TW91bnQuZ2V0SUQoYXJnc1sxXSk7XG4gICAgICAgICAgUmVhY3REZWZhdWx0UGVyZi5fcmVjb3JkV3JpdGUobW91bnRJRCwgZm5OYW1lLCB0b3RhbFRpbWUsIGFyZ3NbMF0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZuTmFtZSA9PT0gJ2Rhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlcycpIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGZvcm1hdFxuICAgICAgICAgIGFyZ3NbMF0uZm9yRWFjaChmdW5jdGlvbih1cGRhdGUpIHtcbiAgICAgICAgICAgIHZhciB3cml0ZUFyZ3MgPSB7fTtcbiAgICAgICAgICAgIGlmICh1cGRhdGUuZnJvbUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdyaXRlQXJncy5mcm9tSW5kZXggPSB1cGRhdGUuZnJvbUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVwZGF0ZS50b0luZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdyaXRlQXJncy50b0luZGV4ID0gdXBkYXRlLnRvSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXBkYXRlLnRleHRDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdyaXRlQXJncy50ZXh0Q29udGVudCA9IHVwZGF0ZS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1cGRhdGUubWFya3VwSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd3JpdGVBcmdzLm1hcmt1cCA9IGFyZ3NbMV1bdXBkYXRlLm1hcmt1cEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFJlYWN0RGVmYXVsdFBlcmYuX3JlY29yZFdyaXRlKFxuICAgICAgICAgICAgICB1cGRhdGUucGFyZW50SUQsXG4gICAgICAgICAgICAgIHVwZGF0ZS50eXBlLFxuICAgICAgICAgICAgICB0b3RhbFRpbWUsXG4gICAgICAgICAgICAgIHdyaXRlQXJnc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBiYXNpYyBmb3JtYXRcbiAgICAgICAgICBSZWFjdERlZmF1bHRQZXJmLl9yZWNvcmRXcml0ZShcbiAgICAgICAgICAgIGFyZ3NbMF0sXG4gICAgICAgICAgICBmbk5hbWUsXG4gICAgICAgICAgICB0b3RhbFRpbWUsXG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgfSBlbHNlIGlmIChtb2R1bGVOYW1lID09PSAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnICYmIChcbiAgICAgICAgKC8vIFRPRE86IHJlY2VpdmVDb21wb25lbnQoKT9cbiAgICAgICAgKGZuTmFtZSA9PT0gJ21vdW50Q29tcG9uZW50JyB8fFxuICAgICAgICBmbk5hbWUgPT09ICd1cGRhdGVDb21wb25lbnQnIHx8IGZuTmFtZSA9PT0gJ19yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQnKSkpKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJvb3ROb2RlSUQgPSBmbk5hbWUgPT09ICdtb3VudENvbXBvbmVudCcgP1xuICAgICAgICAgIGFyZ3NbMF0gOlxuICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQ7XG4gICAgICAgIHZhciBpc1JlbmRlciA9IGZuTmFtZSA9PT0gJ19yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQnO1xuICAgICAgICB2YXIgaXNNb3VudCA9IGZuTmFtZSA9PT0gJ21vdW50Q29tcG9uZW50JztcblxuICAgICAgICB2YXIgbW91bnRTdGFjayA9IFJlYWN0RGVmYXVsdFBlcmYuX21vdW50U3RhY2s7XG4gICAgICAgIHZhciBlbnRyeSA9IFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50c1tcbiAgICAgICAgICBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHMubGVuZ3RoIC0gMVxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChpc1JlbmRlcikge1xuICAgICAgICAgIGFkZFZhbHVlKGVudHJ5LmNvdW50cywgcm9vdE5vZGVJRCwgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VudCkge1xuICAgICAgICAgIG1vdW50U3RhY2sucHVzaCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0ID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgICAgcnYgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB0b3RhbFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpIC0gc3RhcnQ7XG5cbiAgICAgICAgaWYgKGlzUmVuZGVyKSB7XG4gICAgICAgICAgYWRkVmFsdWUoZW50cnkucmVuZGVyLCByb290Tm9kZUlELCB0b3RhbFRpbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTW91bnQpIHtcbiAgICAgICAgICB2YXIgc3ViTW91bnRUaW1lID0gbW91bnRTdGFjay5wb3AoKTtcbiAgICAgICAgICBtb3VudFN0YWNrW21vdW50U3RhY2subGVuZ3RoIC0gMV0gKz0gdG90YWxUaW1lO1xuICAgICAgICAgIGFkZFZhbHVlKGVudHJ5LmV4Y2x1c2l2ZSwgcm9vdE5vZGVJRCwgdG90YWxUaW1lIC0gc3ViTW91bnRUaW1lKTtcbiAgICAgICAgICBhZGRWYWx1ZShlbnRyeS5pbmNsdXNpdmUsIHJvb3ROb2RlSUQsIHRvdGFsVGltZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkVmFsdWUoZW50cnkuaW5jbHVzaXZlLCByb290Tm9kZUlELCB0b3RhbFRpbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW50cnkuZGlzcGxheU5hbWVzW3Jvb3ROb2RlSURdID0ge1xuICAgICAgICAgIGN1cnJlbnQ6IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIG93bmVyOiB0aGlzLl9jdXJyZW50RWxlbWVudC5fb3duZXIgP1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQuX293bmVyLmdldE5hbWUoKSA6XG4gICAgICAgICAgICAnPHJvb3Q+J1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBydjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3REZWZhdWx0UGVyZjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXNcbiAqL1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcblxuLy8gRG9uJ3QgdHJ5IHRvIHNhdmUgdXNlcnMgbGVzcyB0aGFuIDEuMm1zIChhIG51bWJlciBJIG1hZGUgdXApXG52YXIgRE9OVF9DQVJFX1RIUkVTSE9MRCA9IDEuMjtcbnZhciBET01fT1BFUkFUSU9OX1RZUEVTID0ge1xuICAnX21vdW50SW1hZ2VJbnRvTm9kZSc6ICdzZXQgaW5uZXJIVE1MJyxcbiAgSU5TRVJUX01BUktVUDogJ3NldCBpbm5lckhUTUwnLFxuICBNT1ZFX0VYSVNUSU5HOiAnbW92ZScsXG4gIFJFTU9WRV9OT0RFOiAncmVtb3ZlJyxcbiAgVEVYVF9DT05URU5UOiAnc2V0IHRleHRDb250ZW50JyxcbiAgJ3VwZGF0ZVByb3BlcnR5QnlJRCc6ICd1cGRhdGUgYXR0cmlidXRlJyxcbiAgJ2RlbGV0ZVByb3BlcnR5QnlJRCc6ICdkZWxldGUgYXR0cmlidXRlJyxcbiAgJ3VwZGF0ZVN0eWxlc0J5SUQnOiAndXBkYXRlIHN0eWxlcycsXG4gICd1cGRhdGVJbm5lckhUTUxCeUlEJzogJ3NldCBpbm5lckhUTUwnLFxuICAnZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEJzogJ3JlcGxhY2UnXG59O1xuXG5mdW5jdGlvbiBnZXRUb3RhbFRpbWUobWVhc3VyZW1lbnRzKSB7XG4gIC8vIFRPRE86IHJldHVybiBudW1iZXIgb2YgRE9NIG9wcz8gY291bGQgYmUgbWlzbGVhZGluZy5cbiAgLy8gVE9ETzogbWVhc3VyZSBkcm9wcGVkIGZyYW1lcyBhZnRlciByZWNvbmNpbGU/XG4gIC8vIFRPRE86IGxvZyB0b3RhbCB0aW1lIG9mIGVhY2ggcmVjb25jaWxlIGFuZCB0aGUgdG9wLWxldmVsIGNvbXBvbmVudFxuICAvLyBjbGFzcyB0aGF0IHRyaWdnZXJlZCBpdC5cbiAgdmFyIHRvdGFsVGltZSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRzW2ldO1xuICAgIHRvdGFsVGltZSArPSBtZWFzdXJlbWVudC50b3RhbFRpbWU7XG4gIH1cbiAgcmV0dXJuIHRvdGFsVGltZTtcbn1cblxuZnVuY3Rpb24gZ2V0RE9NU3VtbWFyeShtZWFzdXJlbWVudHMpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRzW2ldO1xuICAgIHZhciBpZDtcblxuICAgIGZvciAoaWQgaW4gbWVhc3VyZW1lbnQud3JpdGVzKSB7XG4gICAgICBtZWFzdXJlbWVudC53cml0ZXNbaWRdLmZvckVhY2goZnVuY3Rpb24od3JpdGUpIHtcbiAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIHR5cGU6IERPTV9PUEVSQVRJT05fVFlQRVNbd3JpdGUudHlwZV0gfHwgd3JpdGUudHlwZSxcbiAgICAgICAgICBhcmdzOiB3cml0ZS5hcmdzXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpdGVtcztcbn1cblxuZnVuY3Rpb24gZ2V0RXhjbHVzaXZlU3VtbWFyeShtZWFzdXJlbWVudHMpIHtcbiAgdmFyIGNhbmRpZGF0ZXMgPSB7fTtcbiAgdmFyIGRpc3BsYXlOYW1lO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRzW2ldO1xuICAgIHZhciBhbGxJRHMgPSBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIG1lYXN1cmVtZW50LmV4Y2x1c2l2ZSxcbiAgICAgIG1lYXN1cmVtZW50LmluY2x1c2l2ZVxuICAgICk7XG5cbiAgICBmb3IgKHZhciBpZCBpbiBhbGxJRHMpIHtcbiAgICAgIGRpc3BsYXlOYW1lID0gbWVhc3VyZW1lbnQuZGlzcGxheU5hbWVzW2lkXS5jdXJyZW50O1xuXG4gICAgICBjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXSA9IGNhbmRpZGF0ZXNbZGlzcGxheU5hbWVdIHx8IHtcbiAgICAgICAgY29tcG9uZW50TmFtZTogZGlzcGxheU5hbWUsXG4gICAgICAgIGluY2x1c2l2ZTogMCxcbiAgICAgICAgZXhjbHVzaXZlOiAwLFxuICAgICAgICByZW5kZXI6IDAsXG4gICAgICAgIGNvdW50OiAwXG4gICAgICB9O1xuICAgICAgaWYgKG1lYXN1cmVtZW50LnJlbmRlcltpZF0pIHtcbiAgICAgICAgY2FuZGlkYXRlc1tkaXNwbGF5TmFtZV0ucmVuZGVyICs9IG1lYXN1cmVtZW50LnJlbmRlcltpZF07XG4gICAgICB9XG4gICAgICBpZiAobWVhc3VyZW1lbnQuZXhjbHVzaXZlW2lkXSkge1xuICAgICAgICBjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXS5leGNsdXNpdmUgKz0gbWVhc3VyZW1lbnQuZXhjbHVzaXZlW2lkXTtcbiAgICAgIH1cbiAgICAgIGlmIChtZWFzdXJlbWVudC5pbmNsdXNpdmVbaWRdKSB7XG4gICAgICAgIGNhbmRpZGF0ZXNbZGlzcGxheU5hbWVdLmluY2x1c2l2ZSArPSBtZWFzdXJlbWVudC5pbmNsdXNpdmVbaWRdO1xuICAgICAgfVxuICAgICAgaWYgKG1lYXN1cmVtZW50LmNvdW50c1tpZF0pIHtcbiAgICAgICAgY2FuZGlkYXRlc1tkaXNwbGF5TmFtZV0uY291bnQgKz0gbWVhc3VyZW1lbnQuY291bnRzW2lkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBOb3cgbWFrZSBhIHNvcnRlZCBhcnJheSB3aXRoIHRoZSByZXN1bHRzLlxuICB2YXIgYXJyID0gW107XG4gIGZvciAoZGlzcGxheU5hbWUgaW4gY2FuZGlkYXRlcykge1xuICAgIGlmIChjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXS5leGNsdXNpdmUgPj0gRE9OVF9DQVJFX1RIUkVTSE9MRCkge1xuICAgICAgYXJyLnB1c2goY2FuZGlkYXRlc1tkaXNwbGF5TmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIGFyci5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYi5leGNsdXNpdmUgLSBhLmV4Y2x1c2l2ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gZ2V0SW5jbHVzaXZlU3VtbWFyeShtZWFzdXJlbWVudHMsIG9ubHlDbGVhbikge1xuICB2YXIgY2FuZGlkYXRlcyA9IHt9O1xuICB2YXIgaW5jbHVzaXZlS2V5O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRzW2ldO1xuICAgIHZhciBhbGxJRHMgPSBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIG1lYXN1cmVtZW50LmV4Y2x1c2l2ZSxcbiAgICAgIG1lYXN1cmVtZW50LmluY2x1c2l2ZVxuICAgICk7XG4gICAgdmFyIGNsZWFuQ29tcG9uZW50cztcblxuICAgIGlmIChvbmx5Q2xlYW4pIHtcbiAgICAgIGNsZWFuQ29tcG9uZW50cyA9IGdldFVuY2hhbmdlZENvbXBvbmVudHMobWVhc3VyZW1lbnQpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGlkIGluIGFsbElEcykge1xuICAgICAgaWYgKG9ubHlDbGVhbiAmJiAhY2xlYW5Db21wb25lbnRzW2lkXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gbWVhc3VyZW1lbnQuZGlzcGxheU5hbWVzW2lkXTtcblxuICAgICAgLy8gSW5jbHVzaXZlIHRpbWUgaXMgbm90IHVzZWZ1bCBmb3IgbWFueSBjb21wb25lbnRzIHdpdGhvdXQga25vd2luZyB3aGVyZVxuICAgICAgLy8gdGhleSBhcmUgaW5zdGFudGlhdGVkLiBTbyB3ZSBhZ2dyZWdhdGUgaW5jbHVzaXZlIHRpbWUgd2l0aCBib3RoIHRoZVxuICAgICAgLy8gb3duZXIgYW5kIGN1cnJlbnQgZGlzcGxheU5hbWUgYXMgdGhlIGtleS5cbiAgICAgIGluY2x1c2l2ZUtleSA9IGRpc3BsYXlOYW1lLm93bmVyICsgJyA+ICcgKyBkaXNwbGF5TmFtZS5jdXJyZW50O1xuXG4gICAgICBjYW5kaWRhdGVzW2luY2x1c2l2ZUtleV0gPSBjYW5kaWRhdGVzW2luY2x1c2l2ZUtleV0gfHwge1xuICAgICAgICBjb21wb25lbnROYW1lOiBpbmNsdXNpdmVLZXksXG4gICAgICAgIHRpbWU6IDAsXG4gICAgICAgIGNvdW50OiAwXG4gICAgICB9O1xuXG4gICAgICBpZiAobWVhc3VyZW1lbnQuaW5jbHVzaXZlW2lkXSkge1xuICAgICAgICBjYW5kaWRhdGVzW2luY2x1c2l2ZUtleV0udGltZSArPSBtZWFzdXJlbWVudC5pbmNsdXNpdmVbaWRdO1xuICAgICAgfVxuICAgICAgaWYgKG1lYXN1cmVtZW50LmNvdW50c1tpZF0pIHtcbiAgICAgICAgY2FuZGlkYXRlc1tpbmNsdXNpdmVLZXldLmNvdW50ICs9IG1lYXN1cmVtZW50LmNvdW50c1tpZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTm93IG1ha2UgYSBzb3J0ZWQgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cy5cbiAgdmFyIGFyciA9IFtdO1xuICBmb3IgKGluY2x1c2l2ZUtleSBpbiBjYW5kaWRhdGVzKSB7XG4gICAgaWYgKGNhbmRpZGF0ZXNbaW5jbHVzaXZlS2V5XS50aW1lID49IERPTlRfQ0FSRV9USFJFU0hPTEQpIHtcbiAgICAgIGFyci5wdXNoKGNhbmRpZGF0ZXNbaW5jbHVzaXZlS2V5XSk7XG4gICAgfVxuICB9XG5cbiAgYXJyLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiLnRpbWUgLSBhLnRpbWU7XG4gIH0pO1xuXG4gIHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIGdldFVuY2hhbmdlZENvbXBvbmVudHMobWVhc3VyZW1lbnQpIHtcbiAgLy8gRm9yIGEgZ2l2ZW4gcmVjb25jaWxlLCBsb29rIGF0IHdoaWNoIGNvbXBvbmVudHMgZGlkIG5vdCBhY3R1YWxseVxuICAvLyByZW5kZXIgYW55dGhpbmcgdG8gdGhlIERPTSBhbmQgcmV0dXJuIGEgbWFwcGluZyBvZiB0aGVpciBJRCB0b1xuICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgaXQgdG9vayB0byByZW5kZXIgdGhlIGVudGlyZSBzdWJ0cmVlLlxuICB2YXIgY2xlYW5Db21wb25lbnRzID0ge307XG4gIHZhciBkaXJ0eUxlYWZJRHMgPSBPYmplY3Qua2V5cyhtZWFzdXJlbWVudC53cml0ZXMpO1xuICB2YXIgYWxsSURzID0gYXNzaWduKHt9LCBtZWFzdXJlbWVudC5leGNsdXNpdmUsIG1lYXN1cmVtZW50LmluY2x1c2l2ZSk7XG5cbiAgZm9yICh2YXIgaWQgaW4gYWxsSURzKSB7XG4gICAgdmFyIGlzRGlydHkgPSBmYWxzZTtcbiAgICAvLyBGb3IgZWFjaCBjb21wb25lbnQgdGhhdCByZW5kZXJlZCwgc2VlIGlmIGEgY29tcG9uZW50IHRoYXQgdHJpZ2dlcmVkXG4gICAgLy8gYSBET00gb3AgaXMgaW4gaXRzIHN1YnRyZWUuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJ0eUxlYWZJRHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChkaXJ0eUxlYWZJRHNbaV0uaW5kZXhPZihpZCkgPT09IDApIHtcbiAgICAgICAgaXNEaXJ0eSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzRGlydHkgJiYgbWVhc3VyZW1lbnQuY291bnRzW2lkXSA+IDApIHtcbiAgICAgIGNsZWFuQ29tcG9uZW50c1tpZF0gPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2xlYW5Db21wb25lbnRzO1xufVxuXG52YXIgUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzID0ge1xuICBnZXRFeGNsdXNpdmVTdW1tYXJ5OiBnZXRFeGNsdXNpdmVTdW1tYXJ5LFxuICBnZXRJbmNsdXNpdmVTdW1tYXJ5OiBnZXRJbmNsdXNpdmVTdW1tYXJ5LFxuICBnZXRET01TdW1tYXJ5OiBnZXRET01TdW1tYXJ5LFxuICBnZXRUb3RhbFRpbWU6IGdldFRvdGFsVGltZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXM7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RWxlbWVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q29udGV4dCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29udGV4dFwiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZVxufTtcblxuLyoqXG4gKiBXYXJuIGZvciBtdXRhdGlvbnMuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGRlZmluZVdhcm5pbmdQcm9wZXJ0eShvYmplY3QsIGtleSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcblxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcblxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXRoaXMuX3N0b3JlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlW2tleV07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ0RvblxcJ3Qgc2V0IHRoZSAlcyBwcm9wZXJ0eSBvZiB0aGUgUmVhY3QgZWxlbWVudC4gSW5zdGVhZCwgJyArXG4gICAgICAgICdzcGVjaWZ5IHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4gaW5pdGlhbGx5IGNyZWF0aW5nIHRoZSBlbGVtZW50LicsXG4gICAgICAgIGtleVxuICAgICAgKSA6IG51bGwpO1xuICAgICAgdGhpcy5fc3RvcmVba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICB9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIHVwZGF0ZWQgdG8gdHJ1ZSBpZiB0aGUgbWVtYnJhbmUgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuXG4gKi9cbnZhciB1c2VNdXRhdGlvbk1lbWJyYW5lID0gZmFsc2U7XG5cbi8qKlxuICogV2FybiBmb3IgbXV0YXRpb25zLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZGVmaW5lTXV0YXRpb25NZW1icmFuZShwcm90b3R5cGUpIHtcbiAgdHJ5IHtcbiAgICB2YXIgcHNldWRvRnJvemVuUHJvcGVydGllcyA9IHtcbiAgICAgIHByb3BzOiB0cnVlXG4gICAgfTtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHNldWRvRnJvemVuUHJvcGVydGllcykge1xuICAgICAgZGVmaW5lV2FybmluZ1Byb3BlcnR5KHByb3RvdHlwZSwga2V5KTtcbiAgICB9XG4gICAgdXNlTXV0YXRpb25NZW1icmFuZSA9IHRydWU7XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICAvLyBJRSB3aWxsIGZhaWwgb24gZGVmaW5lUHJvcGVydHlcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY29uc3RydWN0b3IgZm9yIGFsbCBSZWFjdCBlbGVtZW50cy4gVGhpcyBpcyBvbmx5IHVzZWQgdG8gbWFrZSB0aGlzXG4gKiB3b3JrIHdpdGggYSBkeW5hbWljIGluc3RhbmNlb2YgY2hlY2suIE5vdGhpbmcgc2hvdWxkIGxpdmUgb24gdGhpcyBwcm90b3R5cGUuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24odHlwZSwga2V5LCByZWYsIG93bmVyLCBjb250ZXh0LCBwcm9wcykge1xuICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMua2V5ID0ga2V5O1xuICB0aGlzLnJlZiA9IHJlZjtcblxuICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICB0aGlzLl9vd25lciA9IG93bmVyO1xuXG4gIC8vIFRPRE86IERlcHJlY2F0ZSB3aXRoQ29udGV4dCwgYW5kIHRoZW4gdGhlIGNvbnRleHQgYmVjb21lcyBhY2Nlc3NpYmxlXG4gIC8vIHRocm91Z2ggdGhlIG93bmVyLlxuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcblxuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBhbmQgcHJvcHMgYXJlIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IHRoZW0gb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICB0aGlzLl9zdG9yZSA9IHtwcm9wczogcHJvcHMsIG9yaWdpbmFsUHJvcHM6IGFzc2lnbih7fSwgcHJvcHMpfTtcblxuICAgIC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKHgpIHtcbiAgICB9XG4gICAgdGhpcy5fc3RvcmUudmFsaWRhdGVkID0gZmFsc2U7XG5cbiAgICAvLyBXZSdyZSBub3QgYWxsb3dlZCB0byBzZXQgcHJvcHMgZGlyZWN0bHkgb24gdGhlIG9iamVjdCBzbyB3ZSBlYXJseVxuICAgIC8vIHJldHVybiBhbmQgcmVseSBvbiB0aGUgcHJvdG90eXBlIG1lbWJyYW5lIHRvIGZvcndhcmQgdG8gdGhlIGJhY2tpbmdcbiAgICAvLyBzdG9yZS5cbiAgICBpZiAodXNlTXV0YXRpb25NZW1icmFuZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICB0aGlzLnByb3BzID0gcHJvcHM7XG59O1xuXG4vLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IGV4cG9zZSB0aGUgZnVuY3Rpb24gb24gdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LlxuLy8gUmVhY3RFbGVtZW50IHNob3VsZCBiZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcGxhaW4gb2JqZWN0LlxuUmVhY3RFbGVtZW50LnByb3RvdHlwZSA9IHtcbiAgX2lzUmVhY3RFbGVtZW50OiB0cnVlXG59O1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIGRlZmluZU11dGF0aW9uTWVtYnJhbmUoUmVhY3RFbGVtZW50LnByb3RvdHlwZSk7XG59XG5cblJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24odHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7XG5cbiAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuICB2YXIgcHJvcHMgPSB7fTtcblxuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgcmVmID0gY29uZmlnLnJlZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5yZWY7XG4gICAga2V5ID0gY29uZmlnLmtleSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6ICcnICsgY29uZmlnLmtleTtcbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChjb25maWcuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmXG4gICAgICAgICAgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc1twcm9wTmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZWFjdEVsZW1lbnQoXG4gICAgdHlwZSxcbiAgICBrZXksXG4gICAgcmVmLFxuICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsXG4gICAgUmVhY3RDb250ZXh0LmN1cnJlbnQsXG4gICAgcHJvcHNcbiAgKTtcbn07XG5cblJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG4gIC8vIEV4cG9zZSB0aGUgdHlwZSBvbiB0aGUgZmFjdG9yeSBhbmQgdGhlIHByb3RvdHlwZSBzbyB0aGF0IGl0IGNhbiBiZVxuICAvLyBlYXNpbHkgYWNjZXNzZWQgb24gZWxlbWVudHMuIEUuZy4gPEZvbyAvPi50eXBlID09PSBGb28udHlwZS5cbiAgLy8gVGhpcyBzaG91bGQgbm90IGJlIG5hbWVkIGBjb25zdHJ1Y3RvcmAgc2luY2UgdGhpcyBtYXkgbm90IGJlIHRoZSBmdW5jdGlvblxuICAvLyB0aGF0IGNyZWF0ZWQgdGhlIGVsZW1lbnQsIGFuZCBpdCBtYXkgbm90IGV2ZW4gYmUgYSBjb25zdHJ1Y3Rvci5cbiAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBpZiB0aGlzIGlzIGFjY2Vzc2VkXG4gIGZhY3RvcnkudHlwZSA9IHR5cGU7XG4gIHJldHVybiBmYWN0b3J5O1xufTtcblxuUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZVByb3BzID0gZnVuY3Rpb24ob2xkRWxlbWVudCwgbmV3UHJvcHMpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBuZXcgUmVhY3RFbGVtZW50KFxuICAgIG9sZEVsZW1lbnQudHlwZSxcbiAgICBvbGRFbGVtZW50LmtleSxcbiAgICBvbGRFbGVtZW50LnJlZixcbiAgICBvbGRFbGVtZW50Ll9vd25lcixcbiAgICBvbGRFbGVtZW50Ll9jb250ZXh0LFxuICAgIG5ld1Byb3BzXG4gICk7XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIC8vIElmIHRoZSBrZXkgb24gdGhlIG9yaWdpbmFsIGlzIHZhbGlkLCB0aGVuIHRoZSBjbG9uZSBpcyB2YWxpZFxuICAgIG5ld0VsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IG9sZEVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZDtcbiAgfVxuICByZXR1cm4gbmV3RWxlbWVudDtcbn07XG5cblJlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZTtcblxuICAvLyBPcmlnaW5hbCBwcm9wcyBhcmUgY29waWVkXG4gIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcyk7XG5cbiAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjtcblxuICAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuXG4gIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChjb25maWcucmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnLmhhc093blByb3BlcnR5KHByb3BOYW1lKSAmJlxuICAgICAgICAgICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH1cblxuICByZXR1cm4gbmV3IFJlYWN0RWxlbWVudChcbiAgICBlbGVtZW50LnR5cGUsXG4gICAga2V5LFxuICAgIHJlZixcbiAgICBvd25lcixcbiAgICBlbGVtZW50Ll9jb250ZXh0LFxuICAgIHByb3BzXG4gICk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgY29tcG9uZW50LlxuICogQGZpbmFsXG4gKi9cblJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAvLyBSZWFjdFRlc3RVdGlscyBpcyBvZnRlbiB1c2VkIG91dHNpZGUgb2YgYmVmb3JlRWFjaCB3aGVyZSBhcyBSZWFjdCBpc1xuICAvLyB3aXRoaW4gaXQuIFRoaXMgbGVhZHMgdG8gdHdvIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgUmVhY3Qgb24gdGhlIHNhbWVcbiAgLy8gcGFnZS4gVG8gaWRlbnRpZnkgYSBlbGVtZW50IGZyb20gYSBkaWZmZXJlbnQgUmVhY3QgaW5zdGFuY2Ugd2UgdXNlXG4gIC8vIGEgZmxhZyBpbnN0ZWFkIG9mIGFuIGluc3RhbmNlb2YgY2hlY2suXG4gIHZhciBpc0VsZW1lbnQgPSAhIShvYmplY3QgJiYgb2JqZWN0Ll9pc1JlYWN0RWxlbWVudCk7XG4gIC8vIGlmIChpc0VsZW1lbnQgJiYgIShvYmplY3QgaW5zdGFuY2VvZiBSZWFjdEVsZW1lbnQpKSB7XG4gIC8vIFRoaXMgaXMgYW4gaW5kaWNhdG9yIHRoYXQgeW91J3JlIHVzaW5nIG11bHRpcGxlIHZlcnNpb25zIG9mIFJlYWN0IGF0IHRoZVxuICAvLyBzYW1lIHRpbWUuIFRoaXMgd2lsbCBzY3JldyB3aXRoIG93bmVyc2hpcCBhbmQgc3R1ZmYuIEZpeCBpdCwgcGxlYXNlLlxuICAvLyBUT0RPOiBXZSBjb3VsZCBwb3NzaWJseSB3YXJuIGhlcmUuXG4gIC8vIH1cbiAgcmV0dXJuIGlzRWxlbWVudDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkZiR1Z0Wlc1MExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREUwTFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUkZiR1Z0Wlc1MFhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdVbVZoWTNSRGIyNTBaWGgwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRGIyNTBaWGgwWENJcE8xeHVkbUZ5SUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSmNJaWs3WEc1Y2JuWmhjaUJoYzNOcFoyNGdQU0J5WlhGMWFYSmxLRndpTGk5UFltcGxZM1F1WVhOemFXZHVYQ0lwTzF4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzUyWVhJZ1VrVlRSVkpXUlVSZlVGSlBVRk1nUFNCN1hHNGdJR3RsZVRvZ2RISjFaU3hjYmlBZ2NtVm1PaUIwY25WbFhHNTlPMXh1WEc0dktpcGNiaUFxSUZkaGNtNGdabTl5SUcxMWRHRjBhVzl1Y3k1Y2JpQXFYRzRnS2lCQWFXNTBaWEp1WVd4Y2JpQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQnZZbXBsWTNSY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnJaWGxjYmlBcUwxeHVablZ1WTNScGIyNGdaR1ZtYVc1bFYyRnlibWx1WjFCeWIzQmxjblI1S0c5aWFtVmpkQ3dnYTJWNUtTQjdYRzRnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaHZZbXBsWTNRc0lHdGxlU3dnZTF4dVhHNGdJQ0FnWTI5dVptbG5kWEpoWW14bE9pQm1ZV3h6WlN4Y2JpQWdJQ0JsYm5WdFpYSmhZbXhsT2lCMGNuVmxMRnh1WEc0Z0lDQWdaMlYwT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lHbG1JQ2doZEdocGN5NWZjM1J2Y21VcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmMzUnZjbVZiYTJWNVhUdGNiaUFnSUNCOUxGeHVYRzRnSUNBZ2MyVjBPaUJtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBblJHOXVYRnduZENCelpYUWdkR2hsSUNWeklIQnliM0JsY25SNUlHOW1JSFJvWlNCU1pXRmpkQ0JsYkdWdFpXNTBMaUJKYm5OMFpXRmtMQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0ozTndaV05wWm5rZ2RHaGxJR052Y25KbFkzUWdkbUZzZFdVZ2QyaGxiaUJwYm1sMGFXRnNiSGtnWTNKbFlYUnBibWNnZEdobElHVnNaVzFsYm5RdUp5eGNiaUFnSUNBZ0lDQWdhMlY1WEc0Z0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdJQ0IwYUdsekxsOXpkRzl5WlZ0clpYbGRJRDBnZG1Gc2RXVTdYRzRnSUNBZ2ZWeHVYRzRnSUgwcE8xeHVmVnh1WEc0dktpcGNiaUFxSUZSb2FYTWdhWE1nZFhCa1lYUmxaQ0IwYnlCMGNuVmxJR2xtSUhSb1pTQnRaVzFpY21GdVpTQnBjeUJ6ZFdOalpYTnpablZzYkhrZ1kzSmxZWFJsWkM1Y2JpQXFMMXh1ZG1GeUlIVnpaVTExZEdGMGFXOXVUV1Z0WW5KaGJtVWdQU0JtWVd4elpUdGNibHh1THlvcVhHNGdLaUJYWVhKdUlHWnZjaUJ0ZFhSaGRHbHZibk11WEc0Z0tseHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ1pXeGxiV1Z1ZEZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJrWldacGJtVk5kWFJoZEdsdmJrMWxiV0p5WVc1bEtIQnliM1J2ZEhsd1pTa2dlMXh1SUNCMGNua2dlMXh1SUNBZ0lIWmhjaUJ3YzJWMVpHOUdjbTk2Wlc1UWNtOXdaWEowYVdWeklEMGdlMXh1SUNBZ0lDQWdjSEp2Y0hNNklIUnlkV1ZjYmlBZ0lDQjlPMXh1SUNBZ0lHWnZjaUFvZG1GeUlHdGxlU0JwYmlCd2MyVjFaRzlHY205NlpXNVFjbTl3WlhKMGFXVnpLU0I3WEc0Z0lDQWdJQ0JrWldacGJtVlhZWEp1YVc1blVISnZjR1Z5ZEhrb2NISnZkRzkwZVhCbExDQnJaWGtwTzF4dUlDQWdJSDFjYmlBZ0lDQjFjMlZOZFhSaGRHbHZiazFsYldKeVlXNWxJRDBnZEhKMVpUdGNiaUFnZlNCallYUmphQ0FvZUNrZ2UxeHVJQ0FnSUM4dklFbEZJSGRwYkd3Z1ptRnBiQ0J2YmlCa1pXWnBibVZRY205d1pYSjBlVnh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nUW1GelpTQmpiMjV6ZEhKMVkzUnZjaUJtYjNJZ1lXeHNJRkpsWVdOMElHVnNaVzFsYm5SekxpQlVhR2x6SUdseklHOXViSGtnZFhObFpDQjBieUJ0WVd0bElIUm9hWE5jYmlBcUlIZHZjbXNnZDJsMGFDQmhJR1I1Ym1GdGFXTWdhVzV6ZEdGdVkyVnZaaUJqYUdWamF5NGdUbTkwYUdsdVp5QnphRzkxYkdRZ2JHbDJaU0J2YmlCMGFHbHpJSEJ5YjNSdmRIbHdaUzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdleXA5SUhSNWNHVmNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mRzlpYW1WamRIMGdjbVZtWEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJR3RsZVZ4dUlDb2dRSEJoY21GdElIc3FmU0J3Y205d2MxeHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpOWNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0JtZFc1amRHbHZiaWgwZVhCbExDQnJaWGtzSUhKbFppd2diM2R1WlhJc0lHTnZiblJsZUhRc0lIQnliM0J6S1NCN1hHNGdJQzh2SUVKMWFXeDBMV2x1SUhCeWIzQmxjblJwWlhNZ2RHaGhkQ0JpWld4dmJtY2diMjRnZEdobElHVnNaVzFsYm5SY2JpQWdkR2hwY3k1MGVYQmxJRDBnZEhsd1pUdGNiaUFnZEdocGN5NXJaWGtnUFNCclpYazdYRzRnSUhSb2FYTXVjbVZtSUQwZ2NtVm1PMXh1WEc0Z0lDOHZJRkpsWTI5eVpDQjBhR1VnWTI5dGNHOXVaVzUwSUhKbGMzQnZibk5wWW14bElHWnZjaUJqY21WaGRHbHVaeUIwYUdseklHVnNaVzFsYm5RdVhHNGdJSFJvYVhNdVgyOTNibVZ5SUQwZ2IzZHVaWEk3WEc1Y2JpQWdMeThnVkU5RVR6b2dSR1Z3Y21WallYUmxJSGRwZEdoRGIyNTBaWGgwTENCaGJtUWdkR2hsYmlCMGFHVWdZMjl1ZEdWNGRDQmlaV052YldWeklHRmpZMlZ6YzJsaWJHVmNiaUFnTHk4Z2RHaHliM1ZuYUNCMGFHVWdiM2R1WlhJdVhHNGdJSFJvYVhNdVgyTnZiblJsZUhRZ1BTQmpiMjUwWlhoME8xeHVYRzRnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0F2THlCVWFHVWdkbUZzYVdSaGRHbHZiaUJtYkdGbklHRnVaQ0J3Y205d2N5QmhjbVVnWTNWeWNtVnVkR3g1SUcxMWRHRjBhWFpsTGlCWFpTQndkWFFnZEdobGJTQnZibHh1SUNBZ0lDOHZJR0Z1SUdWNGRHVnlibUZzSUdKaFkydHBibWNnYzNSdmNtVWdjMjhnZEdoaGRDQjNaU0JqWVc0Z1puSmxaWHBsSUhSb1pTQjNhRzlzWlNCdlltcGxZM1F1WEc0Z0lDQWdMeThnVkdocGN5QmpZVzRnWW1VZ2NtVndiR0ZqWldRZ2QybDBhQ0JoSUZkbFlXdE5ZWEFnYjI1alpTQjBhR1Y1SUdGeVpTQnBiWEJzWlcxbGJuUmxaQ0JwYmx4dUlDQWdJQzh2SUdOdmJXMXZibXg1SUhWelpXUWdaR1YyWld4dmNHMWxiblFnWlc1MmFYSnZibTFsYm5SekxseHVJQ0FnSUhSb2FYTXVYM04wYjNKbElEMGdlM0J5YjNCek9pQndjbTl3Y3l3Z2IzSnBaMmx1WVd4UWNtOXdjem9nWVhOemFXZHVLSHQ5TENCd2NtOXdjeWw5TzF4dVhHNGdJQ0FnTHk4Z1ZHOGdiV0ZyWlNCamIyMXdZWEpwYm1jZ1VtVmhZM1JGYkdWdFpXNTBjeUJsWVhOcFpYSWdabTl5SUhSbGMzUnBibWNnY0hWeWNHOXpaWE1zSUhkbElHMWhhMlZjYmlBZ0lDQXZMeUIwYUdVZ2RtRnNhV1JoZEdsdmJpQm1iR0ZuSUc1dmJpMWxiblZ0WlhKaFlteGxJQ2gzYUdWeVpTQndiM056YVdKc1pTd2dkMmhwWTJnZ2MyaHZkV3hrWEc0Z0lDQWdMeThnYVc1amJIVmtaU0JsZG1WeWVTQmxiblpwY205dWJXVnVkQ0IzWlNCeWRXNGdkR1Z6ZEhNZ2FXNHBMQ0J6YnlCMGFHVWdkR1Z6ZENCbWNtRnRaWGR2Y210Y2JpQWdJQ0F2THlCcFoyNXZjbVZ6SUdsMExseHVJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEdocGN5NWZjM1J2Y21Vc0lDZDJZV3hwWkdGMFpXUW5MQ0I3WEc0Z0lDQWdJQ0FnSUdOdmJtWnBaM1Z5WVdKc1pUb2dabUZzYzJVc1hHNGdJQ0FnSUNBZ0lHVnVkVzFsY21GaWJHVTZJR1poYkhObExGeHVJQ0FnSUNBZ0lDQjNjbWwwWVdKc1pUb2dkSEoxWlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNCallYUmphQ0FvZUNrZ2UxeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxsOXpkRzl5WlM1MllXeHBaR0YwWldRZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUM4dklGZGxKM0psSUc1dmRDQmhiR3h2ZDJWa0lIUnZJSE5sZENCd2NtOXdjeUJrYVhKbFkzUnNlU0J2YmlCMGFHVWdiMkpxWldOMElITnZJSGRsSUdWaGNteDVYRzRnSUNBZ0x5OGdjbVYwZFhKdUlHRnVaQ0J5Wld4NUlHOXVJSFJvWlNCd2NtOTBiM1I1Y0dVZ2JXVnRZbkpoYm1VZ2RHOGdabTl5ZDJGeVpDQjBieUIwYUdVZ1ltRmphMmx1WjF4dUlDQWdJQzh2SUhOMGIzSmxMbHh1SUNBZ0lHbG1JQ2gxYzJWTmRYUmhkR2x2YmsxbGJXSnlZVzVsS1NCN1hHNGdJQ0FnSUNCUFltcGxZM1F1Wm5KbFpYcGxLSFJvYVhNcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhSb2FYTXVjSEp2Y0hNZ1BTQndjbTl3Y3p0Y2JuMDdYRzVjYmk4dklGZGxJR2x1ZEdWdWRHbHZibUZzYkhrZ1pHOXVKM1FnWlhod2IzTmxJSFJvWlNCbWRXNWpkR2x2YmlCdmJpQjBhR1VnWTI5dWMzUnlkV04wYjNJZ2NISnZjR1Z5ZEhrdVhHNHZMeUJTWldGamRFVnNaVzFsYm5RZ2MyaHZkV3hrSUdKbElHbHVaR2x6ZEdsdVozVnBjMmhoWW14bElHWnliMjBnWVNCd2JHRnBiaUJ2WW1wbFkzUXVYRzVTWldGamRFVnNaVzFsYm5RdWNISnZkRzkwZVhCbElEMGdlMXh1SUNCZmFYTlNaV0ZqZEVWc1pXMWxiblE2SUhSeWRXVmNibjA3WEc1Y2JtbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnWkdWbWFXNWxUWFYwWVhScGIyNU5aVzFpY21GdVpTaFNaV0ZqZEVWc1pXMWxiblF1Y0hKdmRHOTBlWEJsS1R0Y2JuMWNibHh1VW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblFnUFNCbWRXNWpkR2x2YmloMGVYQmxMQ0JqYjI1bWFXY3NJR05vYVd4a2NtVnVLU0I3WEc0Z0lIWmhjaUJ3Y205d1RtRnRaVHRjYmx4dUlDQXZMeUJTWlhObGNuWmxaQ0J1WVcxbGN5QmhjbVVnWlhoMGNtRmpkR1ZrWEc0Z0lIWmhjaUJ3Y205d2N5QTlJSHQ5TzF4dVhHNGdJSFpoY2lCclpYa2dQU0J1ZFd4c08xeHVJQ0IyWVhJZ2NtVm1JRDBnYm5Wc2JEdGNibHh1SUNCcFppQW9ZMjl1Wm1sbklDRTlJRzUxYkd3cElIdGNiaUFnSUNCeVpXWWdQU0JqYjI1bWFXY3VjbVZtSUQwOVBTQjFibVJsWm1sdVpXUWdQeUJ1ZFd4c0lEb2dZMjl1Wm1sbkxuSmxaanRjYmlBZ0lDQnJaWGtnUFNCamIyNW1hV2N1YTJWNUlEMDlQU0IxYm1SbFptbHVaV1FnUHlCdWRXeHNJRG9nSnljZ0t5QmpiMjVtYVdjdWEyVjVPMXh1SUNBZ0lDOHZJRkpsYldGcGJtbHVaeUJ3Y205d1pYSjBhV1Z6SUdGeVpTQmhaR1JsWkNCMGJ5QmhJRzVsZHlCd2NtOXdjeUJ2WW1wbFkzUmNiaUFnSUNCbWIzSWdLSEJ5YjNCT1lXMWxJR2x1SUdOdmJtWnBaeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1b1lYTlBkMjVRY205d1pYSjBlU2h3Y205d1RtRnRaU2tnSmlaY2JpQWdJQ0FnSUNBZ0lDQWhVa1ZUUlZKV1JVUmZVRkpQVUZNdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0hKdmNFNWhiV1VwS1NCN1hHNGdJQ0FnSUNBZ0lIQnliM0J6VzNCeWIzQk9ZVzFsWFNBOUlHTnZibVpwWjF0d2NtOXdUbUZ0WlYwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5OGdRMmhwYkdSeVpXNGdZMkZ1SUdKbElHMXZjbVVnZEdoaGJpQnZibVVnWVhKbmRXMWxiblFzSUdGdVpDQjBhRzl6WlNCaGNtVWdkSEpoYm5ObVpYSnlaV1FnYjI1MGIxeHVJQ0F2THlCMGFHVWdibVYzYkhrZ1lXeHNiMk5oZEdWa0lIQnliM0J6SUc5aWFtVmpkQzVjYmlBZ2RtRnlJR05vYVd4a2NtVnVUR1Z1WjNSb0lEMGdZWEpuZFcxbGJuUnpMbXhsYm1kMGFDQXRJREk3WEc0Z0lHbG1JQ2hqYUdsc1pISmxia3hsYm1kMGFDQTlQVDBnTVNrZ2UxeHVJQ0FnSUhCeWIzQnpMbU5vYVd4a2NtVnVJRDBnWTJocGJHUnlaVzQ3WEc0Z0lIMGdaV3h6WlNCcFppQW9ZMmhwYkdSeVpXNU1aVzVuZEdnZ1BpQXhLU0I3WEc0Z0lDQWdkbUZ5SUdOb2FXeGtRWEp5WVhrZ1BTQkJjbkpoZVNoamFHbHNaSEpsYmt4bGJtZDBhQ2s3WEc0Z0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0JqYUdsc1pISmxia3hsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamFHbHNaRUZ5Y21GNVcybGRJRDBnWVhKbmRXMWxiblJ6VzJrZ0t5QXlYVHRjYmlBZ0lDQjlYRzRnSUNBZ2NISnZjSE11WTJocGJHUnlaVzRnUFNCamFHbHNaRUZ5Y21GNU8xeHVJQ0I5WEc1Y2JpQWdMeThnVW1WemIyeDJaU0JrWldaaGRXeDBJSEJ5YjNCelhHNGdJR2xtSUNoMGVYQmxJQ1ltSUhSNWNHVXVaR1ZtWVhWc2RGQnliM0J6S1NCN1hHNGdJQ0FnZG1GeUlHUmxabUYxYkhSUWNtOXdjeUE5SUhSNWNHVXVaR1ZtWVhWc2RGQnliM0J6TzF4dUlDQWdJR1p2Y2lBb2NISnZjRTVoYldVZ2FXNGdaR1ZtWVhWc2RGQnliM0J6S1NCN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlIQnliM0J6VzNCeWIzQk9ZVzFsWFNBOVBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUh0Y2JpQWdJQ0FnSUNBZ2NISnZjSE5iY0hKdmNFNWhiV1ZkSUQwZ1pHVm1ZWFZzZEZCeWIzQnpXM0J5YjNCT1lXMWxYVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdibVYzSUZKbFlXTjBSV3hsYldWdWRDaGNiaUFnSUNCMGVYQmxMRnh1SUNBZ0lHdGxlU3hjYmlBZ0lDQnlaV1lzWEc0Z0lDQWdVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSXVZM1Z5Y21WdWRDeGNiaUFnSUNCU1pXRmpkRU52Ym5SbGVIUXVZM1Z5Y21WdWRDeGNiaUFnSUNCd2NtOXdjMXh1SUNBcE8xeHVmVHRjYmx4dVVtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVWmhZM1J2Y25rZ1BTQm1kVzVqZEdsdmJpaDBlWEJsS1NCN1hHNGdJSFpoY2lCbVlXTjBiM0o1SUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5RdVltbHVaQ2h1ZFd4c0xDQjBlWEJsS1R0Y2JpQWdMeThnUlhod2IzTmxJSFJvWlNCMGVYQmxJRzl1SUhSb1pTQm1ZV04wYjNKNUlHRnVaQ0IwYUdVZ2NISnZkRzkwZVhCbElITnZJSFJvWVhRZ2FYUWdZMkZ1SUdKbFhHNGdJQzh2SUdWaGMybHNlU0JoWTJObGMzTmxaQ0J2YmlCbGJHVnRaVzUwY3k0Z1JTNW5MaUE4Um05dklDOCtMblI1Y0dVZ1BUMDlJRVp2Ynk1MGVYQmxMbHh1SUNBdkx5QlVhR2x6SUhOb2IzVnNaQ0J1YjNRZ1ltVWdibUZ0WldRZ1lHTnZibk4wY25WamRHOXlZQ0J6YVc1alpTQjBhR2x6SUcxaGVTQnViM1FnWW1VZ2RHaGxJR1oxYm1OMGFXOXVYRzRnSUM4dklIUm9ZWFFnWTNKbFlYUmxaQ0IwYUdVZ1pXeGxiV1Z1ZEN3Z1lXNWtJR2wwSUcxaGVTQnViM1FnWlhabGJpQmlaU0JoSUdOdmJuTjBjblZqZEc5eUxseHVJQ0F2THlCTVpXZGhZM2tnYUc5dmF5QlVUMFJQT2lCWFlYSnVJR2xtSUhSb2FYTWdhWE1nWVdOalpYTnpaV1JjYmlBZ1ptRmpkRzl5ZVM1MGVYQmxJRDBnZEhsd1pUdGNiaUFnY21WMGRYSnVJR1poWTNSdmNuazdYRzU5TzF4dVhHNVNaV0ZqZEVWc1pXMWxiblF1WTJ4dmJtVkJibVJTWlhCc1lXTmxVSEp2Y0hNZ1BTQm1kVzVqZEdsdmJpaHZiR1JGYkdWdFpXNTBMQ0J1WlhkUWNtOXdjeWtnZTF4dUlDQjJZWElnYm1WM1JXeGxiV1Z1ZENBOUlHNWxkeUJTWldGamRFVnNaVzFsYm5Rb1hHNGdJQ0FnYjJ4a1JXeGxiV1Z1ZEM1MGVYQmxMRnh1SUNBZ0lHOXNaRVZzWlcxbGJuUXVhMlY1TEZ4dUlDQWdJRzlzWkVWc1pXMWxiblF1Y21WbUxGeHVJQ0FnSUc5c1pFVnNaVzFsYm5RdVgyOTNibVZ5TEZ4dUlDQWdJRzlzWkVWc1pXMWxiblF1WDJOdmJuUmxlSFFzWEc0Z0lDQWdibVYzVUhKdmNITmNiaUFnS1R0Y2JseHVJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdMeThnU1dZZ2RHaGxJR3RsZVNCdmJpQjBhR1VnYjNKcFoybHVZV3dnYVhNZ2RtRnNhV1FzSUhSb1pXNGdkR2hsSUdOc2IyNWxJR2x6SUhaaGJHbGtYRzRnSUNBZ2JtVjNSV3hsYldWdWRDNWZjM1J2Y21VdWRtRnNhV1JoZEdWa0lEMGdiMnhrUld4bGJXVnVkQzVmYzNSdmNtVXVkbUZzYVdSaGRHVmtPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnVaWGRGYkdWdFpXNTBPMXh1ZlR0Y2JseHVVbVZoWTNSRmJHVnRaVzUwTG1Oc2IyNWxSV3hsYldWdWRDQTlJR1oxYm1OMGFXOXVLR1ZzWlcxbGJuUXNJR052Ym1acFp5d2dZMmhwYkdSeVpXNHBJSHRjYmlBZ2RtRnlJSEJ5YjNCT1lXMWxPMXh1WEc0Z0lDOHZJRTl5YVdkcGJtRnNJSEJ5YjNCeklHRnlaU0JqYjNCcFpXUmNiaUFnZG1GeUlIQnliM0J6SUQwZ1lYTnphV2R1S0h0OUxDQmxiR1Z0Wlc1MExuQnliM0J6S1R0Y2JseHVJQ0F2THlCU1pYTmxjblpsWkNCdVlXMWxjeUJoY21VZ1pYaDBjbUZqZEdWa1hHNGdJSFpoY2lCclpYa2dQU0JsYkdWdFpXNTBMbXRsZVR0Y2JpQWdkbUZ5SUhKbFppQTlJR1ZzWlcxbGJuUXVjbVZtTzF4dVhHNGdJQzh2SUU5M2JtVnlJSGRwYkd3Z1ltVWdjSEpsYzJWeWRtVmtMQ0IxYm14bGMzTWdjbVZtSUdseklHOTJaWEp5YVdSa1pXNWNiaUFnZG1GeUlHOTNibVZ5SUQwZ1pXeGxiV1Z1ZEM1ZmIzZHVaWEk3WEc1Y2JpQWdhV1lnS0dOdmJtWnBaeUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdhV1lnS0dOdmJtWnBaeTV5WldZZ0lUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnTHk4Z1UybHNaVzUwYkhrZ2MzUmxZV3dnZEdobElISmxaaUJtY205dElIUm9aU0J3WVhKbGJuUXVYRzRnSUNBZ0lDQnlaV1lnUFNCamIyNW1hV2N1Y21WbU8xeHVJQ0FnSUNBZ2IzZHVaWElnUFNCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2k1amRYSnlaVzUwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWTI5dVptbG5MbXRsZVNBaFBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0JyWlhrZ1BTQW5KeUFySUdOdmJtWnBaeTVyWlhrN1hHNGdJQ0FnZlZ4dUlDQWdJQzh2SUZKbGJXRnBibWx1WnlCd2NtOXdaWEowYVdWeklHOTJaWEp5YVdSbElHVjRhWE4wYVc1bklIQnliM0J6WEc0Z0lDQWdabTl5SUNod2NtOXdUbUZ0WlNCcGJpQmpiMjVtYVdjcElIdGNiaUFnSUNBZ0lHbG1JQ2hqYjI1bWFXY3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRTVoYldVcElDWW1YRzRnSUNBZ0lDQWdJQ0FnSVZKRlUwVlNWa1ZFWDFCU1QxQlRMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JPWVcxbEtTa2dlMXh1SUNBZ0lDQWdJQ0J3Y205d2MxdHdjbTl3VG1GdFpWMGdQU0JqYjI1bWFXZGJjSEp2Y0U1aGJXVmRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQzh2SUVOb2FXeGtjbVZ1SUdOaGJpQmlaU0J0YjNKbElIUm9ZVzRnYjI1bElHRnlaM1Z0Wlc1MExDQmhibVFnZEdodmMyVWdZWEpsSUhSeVlXNXpabVZ5Y21Wa0lHOXVkRzljYmlBZ0x5OGdkR2hsSUc1bGQyeDVJR0ZzYkc5allYUmxaQ0J3Y205d2N5QnZZbXBsWTNRdVhHNGdJSFpoY2lCamFHbHNaSEpsYmt4bGJtZDBhQ0E5SUdGeVozVnRaVzUwY3k1c1pXNW5kR2dnTFNBeU8xeHVJQ0JwWmlBb1kyaHBiR1J5Wlc1TVpXNW5kR2dnUFQwOUlERXBJSHRjYmlBZ0lDQndjbTl3Y3k1amFHbHNaSEpsYmlBOUlHTm9hV3hrY21WdU8xeHVJQ0I5SUdWc2MyVWdhV1lnS0dOb2FXeGtjbVZ1VEdWdVozUm9JRDRnTVNrZ2UxeHVJQ0FnSUhaaGNpQmphR2xzWkVGeWNtRjVJRDBnUVhKeVlYa29ZMmhwYkdSeVpXNU1aVzVuZEdncE8xeHVJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z1kyaHBiR1J5Wlc1TVpXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdZMmhwYkdSQmNuSmhlVnRwWFNBOUlHRnlaM1Z0Wlc1MGMxdHBJQ3NnTWwwN1hHNGdJQ0FnZlZ4dUlDQWdJSEJ5YjNCekxtTm9hV3hrY21WdUlEMGdZMmhwYkdSQmNuSmhlVHRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJ1WlhjZ1VtVmhZM1JGYkdWdFpXNTBLRnh1SUNBZ0lHVnNaVzFsYm5RdWRIbHdaU3hjYmlBZ0lDQnJaWGtzWEc0Z0lDQWdjbVZtTEZ4dUlDQWdJRzkzYm1WeUxGeHVJQ0FnSUdWc1pXMWxiblF1WDJOdmJuUmxlSFFzWEc0Z0lDQWdjSEp2Y0hOY2JpQWdLVHRjYm4wN1hHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQnZZbXBsWTNSY2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlJRlJ5ZFdVZ2FXWWdZRzlpYW1WamRHQWdhWE1nWVNCMllXeHBaQ0JqYjIxd2IyNWxiblF1WEc0Z0tpQkFabWx1WVd4Y2JpQXFMMXh1VW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwSUQwZ1puVnVZM1JwYjI0b2IySnFaV04wS1NCN1hHNGdJQzh2SUZKbFlXTjBWR1Z6ZEZWMGFXeHpJR2x6SUc5bWRHVnVJSFZ6WldRZ2IzVjBjMmxrWlNCdlppQmlaV1p2Y21WRllXTm9JSGRvWlhKbElHRnpJRkpsWVdOMElHbHpYRzRnSUM4dklIZHBkR2hwYmlCcGRDNGdWR2hwY3lCc1pXRmtjeUIwYnlCMGQyOGdaR2xtWm1WeVpXNTBJR2x1YzNSaGJtTmxjeUJ2WmlCU1pXRmpkQ0J2YmlCMGFHVWdjMkZ0WlZ4dUlDQXZMeUJ3WVdkbExpQlVieUJwWkdWdWRHbG1lU0JoSUdWc1pXMWxiblFnWm5KdmJTQmhJR1JwWm1abGNtVnVkQ0JTWldGamRDQnBibk4wWVc1alpTQjNaU0IxYzJWY2JpQWdMeThnWVNCbWJHRm5JR2x1YzNSbFlXUWdiMllnWVc0Z2FXNXpkR0Z1WTJWdlppQmphR1ZqYXk1Y2JpQWdkbUZ5SUdselJXeGxiV1Z1ZENBOUlDRWhLRzlpYW1WamRDQW1KaUJ2WW1wbFkzUXVYMmx6VW1WaFkzUkZiR1Z0Wlc1MEtUdGNiaUFnTHk4Z2FXWWdLR2x6Uld4bGJXVnVkQ0FtSmlBaEtHOWlhbVZqZENCcGJuTjBZVzVqWlc5bUlGSmxZV04wUld4bGJXVnVkQ2twSUh0Y2JpQWdMeThnVkdocGN5QnBjeUJoYmlCcGJtUnBZMkYwYjNJZ2RHaGhkQ0I1YjNVbmNtVWdkWE5wYm1jZ2JYVnNkR2x3YkdVZ2RtVnljMmx2Ym5NZ2IyWWdVbVZoWTNRZ1lYUWdkR2hsWEc0Z0lDOHZJSE5oYldVZ2RHbHRaUzRnVkdocGN5QjNhV3hzSUhOamNtVjNJSGRwZEdnZ2IzZHVaWEp6YUdsd0lHRnVaQ0J6ZEhWbVppNGdSbWw0SUdsMExDQndiR1ZoYzJVdVhHNGdJQzh2SUZSUFJFODZJRmRsSUdOdmRXeGtJSEJ2YzNOcFlteDVJSGRoY200Z2FHVnlaUzVjYmlBZ0x5OGdmVnh1SUNCeVpYUjFjbTRnYVhORmJHVnRaVzUwTzF4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JTWldGamRFVnNaVzFsYm5RN1hHNGlYWDA9IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEVsZW1lbnRWYWxpZGF0b3JcbiAqL1xuXG4vKipcbiAqIFJlYWN0RWxlbWVudFZhbGlkYXRvciBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIGEgZWxlbWVudCBmYWN0b3J5XG4gKiB3aGljaCB2YWxpZGF0ZXMgdGhlIHByb3BzIHBhc3NlZCB0byB0aGUgZWxlbWVudC4gVGhpcyBpcyBpbnRlbmRlZCB0byBiZVxuICogdXNlZCBvbmx5IGluIERFViBhbmQgY291bGQgYmUgcmVwbGFjZWQgYnkgYSBzdGF0aWMgdHlwZSBjaGVja2VyIGZvciBsYW5ndWFnZXNcbiAqIHRoYXQgc3VwcG9ydCBpdC5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RGcmFnbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RnJhZ21lbnRcIik7XG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbnNcIik7XG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSByZXF1aXJlKFwiLi9SZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1wiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xudmFyIFJlYWN0TmF0aXZlQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3ROYXRpdmVDb21wb25lbnRcIik7XG5cbnZhciBnZXRJdGVyYXRvckZuID0gcmVxdWlyZShcIi4vZ2V0SXRlcmF0b3JGblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICB2YXIgbmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcblxudmFyIE5VTUVSSUNfUFJPUEVSVFlfUkVHRVggPSAvXlxcZCskLztcblxuLyoqXG4gKiBHZXRzIHRoZSBpbnN0YW5jZSdzIG5hbWUgZm9yIHVzZSBpbiB3YXJuaW5ncy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEByZXR1cm4gez9zdHJpbmd9IERpc3BsYXkgbmFtZSBvciB1bmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gZ2V0TmFtZShpbnN0YW5jZSkge1xuICB2YXIgcHVibGljSW5zdGFuY2UgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICBpZiAoIXB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICB2YXIgY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgaWYgKCFjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IGNvbnN0cnVjdG9yLm5hbWUgfHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGN1cnJlbnQgb3duZXIncyBkaXNwbGF5TmFtZSBmb3IgdXNlIGluIHdhcm5pbmdzLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHJldHVybiB7P3N0cmluZ30gRGlzcGxheSBuYW1lIG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50T3duZXJEaXNwbGF5TmFtZSgpIHtcbiAgdmFyIGN1cnJlbnQgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICByZXR1cm4gKFxuICAgIGN1cnJlbnQgJiYgZ2V0TmFtZShjdXJyZW50KSB8fCB1bmRlZmluZWRcbiAgKTtcbn1cblxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcblxuICB3YXJuQW5kTW9uaXRvckZvcktleVVzZShcbiAgICAnRWFjaCBjaGlsZCBpbiBhbiBhcnJheSBvciBpdGVyYXRvciBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyxcbiAgICBlbGVtZW50LFxuICAgIHBhcmVudFR5cGVcbiAgKTtcbn1cblxuLyoqXG4gKiBXYXJuIGlmIHRoZSBrZXkgaXMgYmVpbmcgZGVmaW5lZCBhcyBhbiBvYmplY3QgcHJvcGVydHkgYnV0IGhhcyBhbiBpbmNvcnJlY3RcbiAqIHZhbHVlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUga2V5LlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgQ29tcG9uZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHlLZXkobmFtZSwgZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIU5VTUVSSUNfUFJPUEVSVFlfUkVHRVgudGVzdChuYW1lKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB3YXJuQW5kTW9uaXRvckZvcktleVVzZShcbiAgICAnQ2hpbGQgb2JqZWN0cyBzaG91bGQgaGF2ZSBub24tbnVtZXJpYyBrZXlzIHNvIG9yZGVyaW5nIGlzIHByZXNlcnZlZC4nLFxuICAgIGVsZW1lbnQsXG4gICAgcGFyZW50VHlwZVxuICApO1xufVxuXG4vKipcbiAqIFNoYXJlZCB3YXJuaW5nIGFuZCBtb25pdG9yaW5nIGNvZGUgZm9yIHRoZSBrZXkgd2FybmluZ3MuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgYmFzZSB3YXJuaW5nIHRoYXQgZ2V0cyBvdXRwdXQuXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBDb21wb25lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuZnVuY3Rpb24gd2FybkFuZE1vbml0b3JGb3JLZXlVc2UobWVzc2FnZSwgZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudE93bmVyRGlzcGxheU5hbWUoKTtcbiAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgP1xuICAgIHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcblxuICB2YXIgdXNlTmFtZSA9IG93bmVyTmFtZSB8fCBwYXJlbnROYW1lO1xuICB2YXIgbWVtb2l6ZXIgPSBvd25lckhhc0tleVVzZVdhcm5pbmdbbWVzc2FnZV0gfHwgKFxuICAgIChvd25lckhhc0tleVVzZVdhcm5pbmdbbWVzc2FnZV0gPSB7fSlcbiAgKTtcbiAgaWYgKG1lbW9pemVyLmhhc093blByb3BlcnR5KHVzZU5hbWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG1lbW9pemVyW3VzZU5hbWVdID0gdHJ1ZTtcblxuICB2YXIgcGFyZW50T3JPd25lckFkZGVuZHVtID1cbiAgICBvd25lck5hbWUgPyAoXCIgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgXCIgKyBvd25lck5hbWUgKyBcIi5cIikgOlxuICAgIHBhcmVudE5hbWUgPyAoXCIgQ2hlY2sgdGhlIFJlYWN0LnJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCIpIDpcbiAgICAnJztcblxuICAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cbiAgdmFyIGNoaWxkT3duZXJBZGRlbmR1bSA9ICcnO1xuICBpZiAoZWxlbWVudCAmJlxuICAgICAgZWxlbWVudC5fb3duZXIgJiZcbiAgICAgIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gTmFtZSBvZiB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgdmFyIGNoaWxkT3duZXJOYW1lID0gZ2V0TmFtZShlbGVtZW50Ll9vd25lcik7XG5cbiAgICBjaGlsZE93bmVyQWRkZW5kdW0gPSAoXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBjaGlsZE93bmVyTmFtZSArIFwiLlwiKTtcbiAgfVxuXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgIGZhbHNlLFxuICAgIG1lc3NhZ2UgKyAnJXMlcyBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyxcbiAgICBwYXJlbnRPck93bmVyQWRkZW5kdW0sXG4gICAgY2hpbGRPd25lckFkZGVuZHVtXG4gICkgOiBudWxsKTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG4gICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG4gICAgLy8gRW50cnkgaXRlcmF0b3JzIHByb3ZpZGUgaW1wbGljaXQga2V5cy5cbiAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGZyYWdtZW50ID0gUmVhY3RGcmFnbWVudC5leHRyYWN0SWZGcmFnbWVudChub2RlKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBmcmFnbWVudCkge1xuICAgICAgICBpZiAoZnJhZ21lbnQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHZhbGlkYXRlUHJvcGVydHlLZXkoa2V5LCBmcmFnbWVudFtrZXldLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSBwcm9wcyBhcmUgdmFsaWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtvYmplY3R9IHByb3BUeXBlcyBNYXAgb2YgcHJvcCBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyhjb21wb25lbnROYW1lLCBwcm9wVHlwZXMsIHByb3BzLCBsb2NhdGlvbikge1xuICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wVHlwZXMpIHtcbiAgICBpZiAocHJvcFR5cGVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgdmFyIGVycm9yO1xuICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgdHlwZW9mIHByb3BUeXBlc1twcm9wTmFtZV0gPT09ICdmdW5jdGlvbicsXG4gICAgICAgICAgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArXG4gICAgICAgICAgJ1JlYWN0LlByb3BUeXBlcy4nLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJyxcbiAgICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0sXG4gICAgICAgICAgcHJvcE5hbWVcbiAgICAgICAgKSA6IGludmFyaWFudCh0eXBlb2YgcHJvcFR5cGVzW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJykpO1xuICAgICAgICBlcnJvciA9IHByb3BUeXBlc1twcm9wTmFtZV0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbik7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgfVxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgdmFyIGFkZGVuZHVtID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKHRoaXMpO1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhmYWxzZSwgJ0ZhaWxlZCBwcm9wVHlwZTogJXMlcycsIGVycm9yLm1lc3NhZ2UsIGFkZGVuZHVtKSA6IG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgd2FybmVkUHJvcHNNdXRhdGlvbnMgPSB7fTtcblxuLyoqXG4gKiBXYXJuIGFib3V0IG11dGF0aW5nIHByb3BzIHdoZW4gc2V0dGluZyBgcHJvcE5hbWVgIG9uIGBlbGVtZW50YC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcE5hbWUgVGhlIHN0cmluZyBrZXkgd2l0aGluIHByb3BzIHRoYXQgd2FzIHNldFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gd2FybkZvclByb3BzTXV0YXRpb24ocHJvcE5hbWUsIGVsZW1lbnQpIHtcbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBlbGVtZW50TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyA/IHR5cGUgOiB0eXBlLmRpc3BsYXlOYW1lO1xuICB2YXIgb3duZXJOYW1lID0gZWxlbWVudC5fb3duZXIgP1xuICAgIGVsZW1lbnQuX293bmVyLmdldFB1YmxpY0luc3RhbmNlKCkuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgOiBudWxsO1xuXG4gIHZhciB3YXJuaW5nS2V5ID0gcHJvcE5hbWUgKyAnfCcgKyBlbGVtZW50TmFtZSArICd8JyArIG93bmVyTmFtZTtcbiAgaWYgKHdhcm5lZFByb3BzTXV0YXRpb25zLmhhc093blByb3BlcnR5KHdhcm5pbmdLZXkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHdhcm5lZFByb3BzTXV0YXRpb25zW3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICB2YXIgZWxlbWVudEluZm8gPSAnJztcbiAgaWYgKGVsZW1lbnROYW1lKSB7XG4gICAgZWxlbWVudEluZm8gPSAnIDwnICsgZWxlbWVudE5hbWUgKyAnIC8+JztcbiAgfVxuICB2YXIgb3duZXJJbmZvID0gJyc7XG4gIGlmIChvd25lck5hbWUpIHtcbiAgICBvd25lckluZm8gPSAnIFRoZSBlbGVtZW50IHdhcyBjcmVhdGVkIGJ5ICcgKyBvd25lck5hbWUgKyAnLic7XG4gIH1cblxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICBmYWxzZSxcbiAgICAnRG9uXFwndCBzZXQgLnByb3BzLiVzIG9mIHRoZSBSZWFjdCBjb21wb25lbnQlcy4gSW5zdGVhZCwgc3BlY2lmeSB0aGUgJyArXG4gICAgJ2NvcnJlY3QgdmFsdWUgd2hlbiBpbml0aWFsbHkgY3JlYXRpbmcgdGhlIGVsZW1lbnQgb3IgdXNlICcgK1xuICAgICdSZWFjdC5jbG9uZUVsZW1lbnQgdG8gbWFrZSBhIG5ldyBlbGVtZW50IHdpdGggdXBkYXRlZCBwcm9wcy4lcycsXG4gICAgcHJvcE5hbWUsXG4gICAgZWxlbWVudEluZm8sXG4gICAgb3duZXJJbmZvXG4gICkgOiBudWxsKTtcbn1cblxuLy8gSW5saW5lIE9iamVjdC5pcyBwb2x5ZmlsbFxuZnVuY3Rpb24gaXMoYSwgYikge1xuICBpZiAoYSAhPT0gYSkge1xuICAgIC8vIE5hTlxuICAgIHJldHVybiBiICE9PSBiO1xuICB9XG4gIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAvLyArLTBcbiAgICByZXR1cm4gMSAvIGEgPT09IDEgLyBiO1xuICB9XG4gIHJldHVybiBhID09PSBiO1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIGNoZWNrIGlmIGl0cyBwcm9wcyBoYXZlIGJlZW4gbXV0YXRlZCBzaW5jZSBlbGVtZW50XG4gKiBjcmVhdGlvbiAob3IgdGhlIGxhc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uKS4gSW4gcGFydGljdWxhciwgY2hlY2sgaWYgYW55XG4gKiBuZXcgcHJvcHMgaGF2ZSBiZWVuIGFkZGVkLCB3aGljaCB3ZSBjYW4ndCBkaXJlY3RseSBjYXRjaCBieSBkZWZpbmluZyB3YXJuaW5nXG4gKiBwcm9wZXJ0aWVzIG9uIHRoZSBwcm9wcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFByb3BzKGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50Ll9zdG9yZSkge1xuICAgIC8vIEVsZW1lbnQgd2FzIGNyZWF0ZWQgdXNpbmcgYG5ldyBSZWFjdEVsZW1lbnRgIGRpcmVjdGx5IG9yIHdpdGhcbiAgICAvLyBgUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnRgOyBza2lwIG11dGF0aW9uIGNoZWNraW5nXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG9yaWdpbmFsUHJvcHMgPSBlbGVtZW50Ll9zdG9yZS5vcmlnaW5hbFByb3BzO1xuICB2YXIgcHJvcHMgPSBlbGVtZW50LnByb3BzO1xuXG4gIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BzKSB7XG4gICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgaWYgKCFvcmlnaW5hbFByb3BzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSB8fFxuICAgICAgICAgICFpcyhvcmlnaW5hbFByb3BzW3Byb3BOYW1lXSwgcHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICB3YXJuRm9yUHJvcHNNdXRhdGlvbihwcm9wTmFtZSwgZWxlbWVudCk7XG5cbiAgICAgICAgLy8gQ29weSBvdmVyIHRoZSBuZXcgdmFsdWUgc28gdGhhdCB0aGUgdHdvIHByb3BzIG9iamVjdHMgbWF0Y2ggYWdhaW5cbiAgICAgICAgb3JpZ2luYWxQcm9wc1twcm9wTmFtZV0gPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PSBudWxsKSB7XG4gICAgLy8gVGhpcyBoYXMgYWxyZWFkeSB3YXJuZWQuIERvbid0IHRocm93LlxuICAgIHJldHVybjtcbiAgfVxuICAvLyBFeHRyYWN0IHRoZSBjb21wb25lbnQgY2xhc3MgZnJvbSB0aGUgZWxlbWVudC4gQ29udmVydHMgc3RyaW5nIHR5cGVzXG4gIC8vIHRvIGEgY29tcG9zaXRlIGNsYXNzIHdoaWNoIG1heSBoYXZlIHByb3BUeXBlcy5cbiAgLy8gVE9ETzogVmFsaWRhdGluZyBhIHN0cmluZydzIHByb3BUeXBlcyBpcyBub3QgZGVjb3VwbGVkIGZyb20gdGhlXG4gIC8vIHJlbmRlcmluZyB0YXJnZXQgd2hpY2ggaXMgcHJvYmxlbWF0aWMuXG4gIHZhciBjb21wb25lbnRDbGFzcyA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudChcbiAgICBlbGVtZW50XG4gICk7XG4gIHZhciBuYW1lID0gY29tcG9uZW50Q2xhc3MuZGlzcGxheU5hbWUgfHwgY29tcG9uZW50Q2xhc3MubmFtZTtcbiAgaWYgKGNvbXBvbmVudENsYXNzLnByb3BUeXBlcykge1xuICAgIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgbmFtZSxcbiAgICAgIGNvbXBvbmVudENsYXNzLnByb3BUeXBlcyxcbiAgICAgIGVsZW1lbnQucHJvcHMsXG4gICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLnByb3BcbiAgICApO1xuICB9XG4gIGlmICh0eXBlb2YgY29tcG9uZW50Q2xhc3MuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBjb21wb25lbnRDbGFzcy5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQsXG4gICAgICAnZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgK1xuICAgICAgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nXG4gICAgKSA6IG51bGwpO1xuICB9XG59XG5cbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSB7XG5cbiAgY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFByb3BzOiBjaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHMsXG5cbiAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24odHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gICAgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgdHlwZSAhPSBudWxsLFxuICAgICAgJ1JlYWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgc2hvdWxkIG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4gSXQgc2hvdWxkICcgK1xuICAgICAgICAnYmUgYSBzdHJpbmcgKGZvciBET00gZWxlbWVudHMpIG9yIGEgUmVhY3RDbGFzcyAoZm9yIGNvbXBvc2l0ZSAnICtcbiAgICAgICAgJ2NvbXBvbmVudHMpLidcbiAgICApIDogbnVsbCk7XG5cbiAgICB2YXIgZWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9LFxuXG4gIGNyZWF0ZUZhY3Rvcnk6IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICB2YXIgdmFsaWRhdGVkRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVFbGVtZW50LmJpbmQoXG4gICAgICBudWxsLFxuICAgICAgdHlwZVxuICAgICk7XG4gICAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBpZiB0aGlzIGlzIGFjY2Vzc2VkXG4gICAgdmFsaWRhdGVkRmFjdG9yeS50eXBlID0gdHlwZTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICB2YWxpZGF0ZWRGYWN0b3J5LFxuICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICdGYWN0b3J5LnR5cGUgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHRoZSBjbGFzcyBkaXJlY3RseSAnICtcbiAgICAgICAgICAgICAgICAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nXG4gICAgICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0eXBlJywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0eXBlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIC8vIElFIHdpbGwgZmFpbCBvbiBkZWZpbmVQcm9wZXJ0eSAoZXM1LXNoaW0vc2hhbSB0b28pXG4gICAgICB9XG4gICAgfVxuXG5cbiAgICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbiAgfSxcblxuICBjbG9uZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICAgIHZhciBuZXdFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIG5ld0VsZW1lbnQudHlwZSk7XG4gICAgfVxuICAgIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICAgIHJldHVybiBuZXdFbGVtZW50O1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eUxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRRdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRVZzWlcxbGJuUldZV3hwWkdGMGIzSmNiaUFxTDF4dVhHNHZLaXBjYmlBcUlGSmxZV04wUld4bGJXVnVkRlpoYkdsa1lYUnZjaUJ3Y205MmFXUmxjeUJoSUhkeVlYQndaWElnWVhKdmRXNWtJR0VnWld4bGJXVnVkQ0JtWVdOMGIzSjVYRzRnS2lCM2FHbGphQ0IyWVd4cFpHRjBaWE1nZEdobElIQnliM0J6SUhCaGMzTmxaQ0IwYnlCMGFHVWdaV3hsYldWdWRDNGdWR2hwY3lCcGN5QnBiblJsYm1SbFpDQjBieUJpWlZ4dUlDb2dkWE5sWkNCdmJteDVJR2x1SUVSRlZpQmhibVFnWTI5MWJHUWdZbVVnY21Wd2JHRmpaV1FnWW5rZ1lTQnpkR0YwYVdNZ2RIbHdaU0JqYUdWamEyVnlJR1p2Y2lCc1lXNW5kV0ZuWlhOY2JpQXFJSFJvWVhRZ2MzVndjRzl5ZENCcGRDNWNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJTWldGamRFVnNaVzFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFVnNaVzFsYm5SY0lpazdYRzUyWVhJZ1VtVmhZM1JHY21GbmJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUm5KaFoyMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJuTmNJaWs3WEc1MllYSWdVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1VG1GdFpYTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsYzF3aUtUdGNiblpoY2lCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlYQ0lwTzF4dWRtRnlJRkpsWVdOMFRtRjBhWFpsUTI5dGNHOXVaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNST1lYUnBkbVZEYjIxd2IyNWxiblJjSWlrN1hHNWNiblpoY2lCblpYUkpkR1Z5WVhSdmNrWnVJRDBnY21WeGRXbHlaU2hjSWk0dloyVjBTWFJsY21GMGIzSkdibHdpS1R0Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNibVoxYm1OMGFXOXVJR2RsZEVSbFkyeGhjbUYwYVc5dVJYSnliM0pCWkdSbGJtUjFiU2dwSUh0Y2JpQWdhV1lnS0ZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5TG1OMWNuSmxiblFwSUh0Y2JpQWdJQ0IyWVhJZ2JtRnRaU0E5SUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5TG1OMWNuSmxiblF1WjJWMFRtRnRaU2dwTzF4dUlDQWdJR2xtSUNodVlXMWxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdKeUJEYUdWamF5QjBhR1VnY21WdVpHVnlJRzFsZEdodlpDQnZaaUJnSnlBcklHNWhiV1VnS3lBbllDNG5PMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z0p5YzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1YyRnliaUJwWmlCMGFHVnlaU2R6SUc1dklHdGxlU0JsZUhCc2FXTnBkR3g1SUhObGRDQnZiaUJrZVc1aGJXbGpJR0Z5Y21GNWN5QnZaaUJqYUdsc1pISmxiaUJ2Y2x4dUlDb2diMkpxWldOMElHdGxlWE1nWVhKbElHNXZkQ0IyWVd4cFpDNGdWR2hwY3lCaGJHeHZkM01nZFhNZ2RHOGdhMlZsY0NCMGNtRmpheUJ2WmlCamFHbHNaSEpsYmlCaVpYUjNaV1Z1WEc0Z0tpQjFjR1JoZEdWekxseHVJQ292WEc1MllYSWdiM2R1WlhKSVlYTkxaWGxWYzJWWFlYSnVhVzVuSUQwZ2UzMDdYRzVjYm5aaGNpQnNiMmRuWldSVWVYQmxSbUZwYkhWeVpYTWdQU0I3ZlR0Y2JseHVkbUZ5SUU1VlRVVlNTVU5mVUZKUFVFVlNWRmxmVWtWSFJWZ2dQU0F2WGx4Y1pDc2tMenRjYmx4dUx5b3FYRzRnS2lCSFpYUnpJSFJvWlNCcGJuTjBZVzVqWlNkeklHNWhiV1VnWm05eUlIVnpaU0JwYmlCM1lYSnVhVzVuY3k1Y2JpQXFYRzRnS2lCQWFXNTBaWEp1WVd4Y2JpQXFJRUJ5WlhSMWNtNGdlejl6ZEhKcGJtZDlJRVJwYzNCc1lYa2dibUZ0WlNCdmNpQjFibVJsWm1sdVpXUmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1oyVjBUbUZ0WlNocGJuTjBZVzVqWlNrZ2UxeHVJQ0IyWVhJZ2NIVmliR2xqU1c1emRHRnVZMlVnUFNCcGJuTjBZVzVqWlNBbUppQnBibk4wWVc1alpTNW5aWFJRZFdKc2FXTkpibk4wWVc1alpTZ3BPMXh1SUNCcFppQW9JWEIxWW14cFkwbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhWdVpHVm1hVzVsWkR0Y2JpQWdmVnh1SUNCMllYSWdZMjl1YzNSeWRXTjBiM0lnUFNCd2RXSnNhV05KYm5OMFlXNWpaUzVqYjI1emRISjFZM1J2Y2p0Y2JpQWdhV1lnS0NGamIyNXpkSEoxWTNSdmNpa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMWJtUmxabWx1WldRN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUdOdmJuTjBjblZqZEc5eUxtUnBjM0JzWVhsT1lXMWxJSHg4SUdOdmJuTjBjblZqZEc5eUxtNWhiV1VnZkh3Z2RXNWtaV1pwYm1Wa08xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGRITWdkR2hsSUdOMWNuSmxiblFnYjNkdVpYSW5jeUJrYVhOd2JHRjVUbUZ0WlNCbWIzSWdkWE5sSUdsdUlIZGhjbTVwYm1kekxseHVJQ3BjYmlBcUlFQnBiblJsY201aGJGeHVJQ29nUUhKbGRIVnliaUI3UDNOMGNtbHVaMzBnUkdsemNHeGhlU0J1WVcxbElHOXlJSFZ1WkdWbWFXNWxaRnh1SUNvdlhHNW1kVzVqZEdsdmJpQm5aWFJEZFhKeVpXNTBUM2R1WlhKRWFYTndiR0Y1VG1GdFpTZ3BJSHRjYmlBZ2RtRnlJR04xY25KbGJuUWdQU0JTWldGamRFTjFjbkpsYm5SUGQyNWxjaTVqZFhKeVpXNTBPMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJR04xY25KbGJuUWdKaVlnWjJWMFRtRnRaU2hqZFhKeVpXNTBLU0I4ZkNCMWJtUmxabWx1WldSY2JpQWdLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlhZWEp1SUdsbUlIUm9aU0JsYkdWdFpXNTBJR1J2WlhOdUozUWdhR0YyWlNCaGJpQmxlSEJzYVdOcGRDQnJaWGtnWVhOemFXZHVaV1FnZEc4Z2FYUXVYRzRnS2lCVWFHbHpJR1ZzWlcxbGJuUWdhWE1nYVc0Z1lXNGdZWEp5WVhrdUlGUm9aU0JoY25KaGVTQmpiM1ZzWkNCbmNtOTNJR0Z1WkNCemFISnBibXNnYjNJZ1ltVmNiaUFxSUhKbGIzSmtaWEpsWkM0Z1FXeHNJR05vYVd4a2NtVnVJSFJvWVhRZ2FHRjJaVzRuZENCaGJISmxZV1I1SUdKbFpXNGdkbUZzYVdSaGRHVmtJR0Z5WlNCeVpYRjFhWEpsWkNCMGIxeHVJQ29nYUdGMlpTQmhJRndpYTJWNVhDSWdjSEp2Y0dWeWRIa2dZWE56YVdkdVpXUWdkRzhnYVhRdVhHNGdLbHh1SUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdLaUJBY0dGeVlXMGdlMUpsWVdOMFJXeGxiV1Z1ZEgwZ1pXeGxiV1Z1ZENCRmJHVnRaVzUwSUhSb1lYUWdjbVZ4ZFdseVpYTWdZU0JyWlhrdVhHNGdLaUJBY0dGeVlXMGdleXA5SUhCaGNtVnVkRlI1Y0dVZ1pXeGxiV1Z1ZENkeklIQmhjbVZ1ZENkeklIUjVjR1V1WEc0Z0tpOWNibVoxYm1OMGFXOXVJSFpoYkdsa1lYUmxSWGh3YkdsamFYUkxaWGtvWld4bGJXVnVkQ3dnY0dGeVpXNTBWSGx3WlNrZ2UxeHVJQ0JwWmlBb1pXeGxiV1Z1ZEM1ZmMzUnZjbVV1ZG1Gc2FXUmhkR1ZrSUh4OElHVnNaVzFsYm5RdWEyVjVJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQnlaWFIxY200N1hHNGdJSDFjYmlBZ1pXeGxiV1Z1ZEM1ZmMzUnZjbVV1ZG1Gc2FXUmhkR1ZrSUQwZ2RISjFaVHRjYmx4dUlDQjNZWEp1UVc1a1RXOXVhWFJ2Y2tadmNrdGxlVlZ6WlNoY2JpQWdJQ0FuUldGamFDQmphR2xzWkNCcGJpQmhiaUJoY25KaGVTQnZjaUJwZEdWeVlYUnZjaUJ6YUc5MWJHUWdhR0YyWlNCaElIVnVhWEYxWlNCY0ltdGxlVndpSUhCeWIzQXVKeXhjYmlBZ0lDQmxiR1Z0Wlc1MExGeHVJQ0FnSUhCaGNtVnVkRlI1Y0dWY2JpQWdLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlhZWEp1SUdsbUlIUm9aU0JyWlhrZ2FYTWdZbVZwYm1jZ1pHVm1hVzVsWkNCaGN5QmhiaUJ2WW1wbFkzUWdjSEp2Y0dWeWRIa2dZblYwSUdoaGN5QmhiaUJwYm1OdmNuSmxZM1JjYmlBcUlIWmhiSFZsTGx4dUlDcGNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHNWhiV1VnVUhKdmNHVnlkSGtnYm1GdFpTQnZaaUIwYUdVZ2EyVjVMbHh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJR1ZzWlcxbGJuUWdRMjl0Y0c5dVpXNTBJSFJvWVhRZ2NtVnhkV2x5WlhNZ1lTQnJaWGt1WEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJSEJoY21WdWRGUjVjR1VnWld4bGJXVnVkQ2R6SUhCaGNtVnVkQ2R6SUhSNWNHVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFVISnZjR1Z5ZEhsTFpYa29ibUZ0WlN3Z1pXeGxiV1Z1ZEN3Z2NHRnlaVzUwVkhsd1pTa2dlMXh1SUNCcFppQW9JVTVWVFVWU1NVTmZVRkpQVUVWU1ZGbGZVa1ZIUlZndWRHVnpkQ2h1WVcxbEtTa2dlMXh1SUNBZ0lISmxkSFZ5Ymp0Y2JpQWdmVnh1SUNCM1lYSnVRVzVrVFc5dWFYUnZja1p2Y2t0bGVWVnpaU2hjYmlBZ0lDQW5RMmhwYkdRZ2IySnFaV04wY3lCemFHOTFiR1FnYUdGMlpTQnViMjR0Ym5WdFpYSnBZeUJyWlhseklITnZJRzl5WkdWeWFXNW5JR2x6SUhCeVpYTmxjblpsWkM0bkxGeHVJQ0FnSUdWc1pXMWxiblFzWEc0Z0lDQWdjR0Z5Wlc1MFZIbHdaVnh1SUNBcE8xeHVmVnh1WEc0dktpcGNiaUFxSUZOb1lYSmxaQ0IzWVhKdWFXNW5JR0Z1WkNCdGIyNXBkRzl5YVc1bklHTnZaR1VnWm05eUlIUm9aU0JyWlhrZ2QyRnlibWx1WjNNdVhHNGdLbHh1SUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiV1Z6YzJGblpTQlVhR1VnWW1GelpTQjNZWEp1YVc1bklIUm9ZWFFnWjJWMGN5QnZkWFJ3ZFhRdVhHNGdLaUJBY0dGeVlXMGdlMUpsWVdOMFJXeGxiV1Z1ZEgwZ1pXeGxiV1Z1ZENCRGIyMXdiMjVsYm5RZ2RHaGhkQ0J5WlhGMWFYSmxjeUJoSUd0bGVTNWNiaUFxSUVCd1lYSmhiU0I3S24wZ2NHRnlaVzUwVkhsd1pTQmxiR1Z0Wlc1MEozTWdjR0Z5Wlc1MEozTWdkSGx3WlM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnZDJGeWJrRnVaRTF2Ym1sMGIzSkdiM0pMWlhsVmMyVW9iV1Z6YzJGblpTd2daV3hsYldWdWRDd2djR0Z5Wlc1MFZIbHdaU2tnZTF4dUlDQjJZWElnYjNkdVpYSk9ZVzFsSUQwZ1oyVjBRM1Z5Y21WdWRFOTNibVZ5UkdsemNHeGhlVTVoYldVb0tUdGNiaUFnZG1GeUlIQmhjbVZ1ZEU1aGJXVWdQU0IwZVhCbGIyWWdjR0Z5Wlc1MFZIbHdaU0E5UFQwZ0ozTjBjbWx1WnljZ1AxeHVJQ0FnSUhCaGNtVnVkRlI1Y0dVZ09pQndZWEpsYm5SVWVYQmxMbVJwYzNCc1lYbE9ZVzFsSUh4OElIQmhjbVZ1ZEZSNWNHVXVibUZ0WlR0Y2JseHVJQ0IyWVhJZ2RYTmxUbUZ0WlNBOUlHOTNibVZ5VG1GdFpTQjhmQ0J3WVhKbGJuUk9ZVzFsTzF4dUlDQjJZWElnYldWdGIybDZaWElnUFNCdmQyNWxja2hoYzB0bGVWVnpaVmRoY201cGJtZGJiV1Z6YzJGblpWMGdmSHdnS0Z4dUlDQWdJQ2h2ZDI1bGNraGhjMHRsZVZWelpWZGhjbTVwYm1kYmJXVnpjMkZuWlYwZ1BTQjdmU2xjYmlBZ0tUdGNiaUFnYVdZZ0tHMWxiVzlwZW1WeUxtaGhjMDkzYmxCeWIzQmxjblI1S0hWelpVNWhiV1VwS1NCN1hHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNGdJRzFsYlc5cGVtVnlXM1Z6WlU1aGJXVmRJRDBnZEhKMVpUdGNibHh1SUNCMllYSWdjR0Z5Wlc1MFQzSlBkMjVsY2tGa1pHVnVaSFZ0SUQxY2JpQWdJQ0J2ZDI1bGNrNWhiV1VnUHlBb1hDSWdRMmhsWTJzZ2RHaGxJSEpsYm1SbGNpQnRaWFJvYjJRZ2IyWWdYQ0lnS3lCdmQyNWxjazVoYldVZ0t5QmNJaTVjSWlrZ09seHVJQ0FnSUhCaGNtVnVkRTVoYldVZ1B5QW9YQ0lnUTJobFkyc2dkR2hsSUZKbFlXTjBMbkpsYm1SbGNpQmpZV3hzSUhWemFXNW5JRHhjSWlBcklIQmhjbVZ1ZEU1aGJXVWdLeUJjSWo0dVhDSXBJRHBjYmlBZ0lDQW5KenRjYmx4dUlDQXZMeUJWYzNWaGJHeDVJSFJvWlNCamRYSnlaVzUwSUc5M2JtVnlJR2x6SUhSb1pTQnZabVpsYm1SbGNpd2dZblYwSUdsbUlHbDBJR0ZqWTJWd2RITWdZMmhwYkdSeVpXNGdZWE1nWVZ4dUlDQXZMeUJ3Y205d1pYSjBlU3dnYVhRZ2JXRjVJR0psSUhSb1pTQmpjbVZoZEc5eUlHOW1JSFJvWlNCamFHbHNaQ0IwYUdGMEozTWdjbVZ6Y0c5dWMybGliR1VnWm05eVhHNGdJQzh2SUdGemMybG5ibWx1WnlCcGRDQmhJR3RsZVM1Y2JpQWdkbUZ5SUdOb2FXeGtUM2R1WlhKQlpHUmxibVIxYlNBOUlDY25PMXh1SUNCcFppQW9aV3hsYldWdWRDQW1KbHh1SUNBZ0lDQWdaV3hsYldWdWRDNWZiM2R1WlhJZ0ppWmNiaUFnSUNBZ0lHVnNaVzFsYm5RdVgyOTNibVZ5SUNFOVBTQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpNWpkWEp5Wlc1MEtTQjdYRzRnSUNBZ0x5OGdUbUZ0WlNCdlppQjBhR1VnWTI5dGNHOXVaVzUwSUhSb1lYUWdiM0pwWjJsdVlXeHNlU0JqY21WaGRHVmtJSFJvYVhNZ1kyaHBiR1F1WEc0Z0lDQWdkbUZ5SUdOb2FXeGtUM2R1WlhKT1lXMWxJRDBnWjJWMFRtRnRaU2hsYkdWdFpXNTBMbDl2ZDI1bGNpazdYRzVjYmlBZ0lDQmphR2xzWkU5M2JtVnlRV1JrWlc1a2RXMGdQU0FvWENJZ1NYUWdkMkZ6SUhCaGMzTmxaQ0JoSUdOb2FXeGtJR1p5YjIwZ1hDSWdLeUJqYUdsc1pFOTNibVZ5VG1GdFpTQXJJRndpTGx3aUtUdGNiaUFnZlZ4dVhHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUdaaGJITmxMRnh1SUNBZ0lHMWxjM05oWjJVZ0t5QW5KWE1sY3lCVFpXVWdhSFIwY0hNNkx5OW1ZaTV0WlM5eVpXRmpkQzEzWVhKdWFXNW5MV3RsZVhNZ1ptOXlJRzF2Y21VZ2FXNW1iM0p0WVhScGIyNHVKeXhjYmlBZ0lDQndZWEpsYm5SUGNrOTNibVZ5UVdSa1pXNWtkVzBzWEc0Z0lDQWdZMmhwYkdSUGQyNWxja0ZrWkdWdVpIVnRYRzRnSUNrZ09pQnVkV3hzS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJGYm5OMWNtVWdkR2hoZENCbGRtVnllU0JsYkdWdFpXNTBJR1ZwZEdobGNpQnBjeUJ3WVhOelpXUWdhVzRnWVNCemRHRjBhV01nYkc5allYUnBiMjRzSUdsdUlHRnVYRzRnS2lCaGNuSmhlU0IzYVhSb0lHRnVJR1Y0Y0d4cFkybDBJR3RsZVhNZ2NISnZjR1Z5ZEhrZ1pHVm1hVzVsWkN3Z2IzSWdhVzRnWVc0Z2IySnFaV04wSUd4cGRHVnlZV3hjYmlBcUlIZHBkR2dnZG1Gc2FXUWdhMlY1SUhCeWIzQmxjblI1TGx4dUlDcGNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEU1dlpHVjlJRzV2WkdVZ1UzUmhkR2xqWVd4c2VTQndZWE56WldRZ1kyaHBiR1FnYjJZZ1lXNTVJSFI1Y0dVdVhHNGdLaUJBY0dGeVlXMGdleXA5SUhCaGNtVnVkRlI1Y0dVZ2JtOWtaU2R6SUhCaGNtVnVkQ2R6SUhSNWNHVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFEyaHBiR1JMWlhsektHNXZaR1VzSUhCaGNtVnVkRlI1Y0dVcElIdGNiaUFnYVdZZ0tFRnljbUY1TG1selFYSnlZWGtvYm05a1pTa3BJSHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJRzV2WkdVdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJSFpoY2lCamFHbHNaQ0E5SUc1dlpHVmJhVjA3WEc0Z0lDQWdJQ0JwWmlBb1VtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtHTm9hV3hrS1NrZ2UxeHVJQ0FnSUNBZ0lDQjJZV3hwWkdGMFpVVjRjR3hwWTJsMFMyVjVLR05vYVd4a0xDQndZWEpsYm5SVWVYQmxLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgwZ1pXeHpaU0JwWmlBb1VtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtHNXZaR1VwS1NCN1hHNGdJQ0FnTHk4Z1ZHaHBjeUJsYkdWdFpXNTBJSGRoY3lCd1lYTnpaV1FnYVc0Z1lTQjJZV3hwWkNCc2IyTmhkR2x2Ymk1Y2JpQWdJQ0J1YjJSbExsOXpkRzl5WlM1MllXeHBaR0YwWldRZ1BTQjBjblZsTzF4dUlDQjlJR1ZzYzJVZ2FXWWdLRzV2WkdVcElIdGNiaUFnSUNCMllYSWdhWFJsY21GMGIzSkdiaUE5SUdkbGRFbDBaWEpoZEc5eVJtNG9ibTlrWlNrN1hHNGdJQ0FnTHk4Z1JXNTBjbmtnYVhSbGNtRjBiM0p6SUhCeWIzWnBaR1VnYVcxd2JHbGphWFFnYTJWNWN5NWNiaUFnSUNCcFppQW9hWFJsY21GMGIzSkdiaWtnZTF4dUlDQWdJQ0FnYVdZZ0tHbDBaWEpoZEc5eVJtNGdJVDA5SUc1dlpHVXVaVzUwY21sbGN5a2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2FYUmxjbUYwYjNJZ1BTQnBkR1Z5WVhSdmNrWnVMbU5oYkd3b2JtOWtaU2s3WEc0Z0lDQWdJQ0FnSUhaaGNpQnpkR1Z3TzF4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvSVNoemRHVndJRDBnYVhSbGNtRjBiM0l1Ym1WNGRDZ3BLUzVrYjI1bEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaHpkR1Z3TG5aaGJIVmxLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZzYVdSaGRHVkZlSEJzYVdOcGRFdGxlU2h6ZEdWd0xuWmhiSFZsTENCd1lYSmxiblJVZVhCbEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJ1YjJSbElEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJQ0FnZG1GeUlHWnlZV2R0Wlc1MElEMGdVbVZoWTNSR2NtRm5iV1Z1ZEM1bGVIUnlZV04wU1daR2NtRm5iV1Z1ZENodWIyUmxLVHRjYmlBZ0lDQWdJR1p2Y2lBb2RtRnlJR3RsZVNCcGJpQm1jbUZuYldWdWRDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1puSmhaMjFsYm5RdWFHRnpUM2R1VUhKdmNHVnlkSGtvYTJWNUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhaaGJHbGtZWFJsVUhKdmNHVnlkSGxMWlhrb2EyVjVMQ0JtY21GbmJXVnVkRnRyWlhsZExDQndZWEpsYm5SVWVYQmxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVmVnh1WEc0dktpcGNiaUFxSUVGemMyVnlkQ0IwYUdGMElIUm9aU0J3Y205d2N5QmhjbVVnZG1Gc2FXUmNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1kyOXRjRzl1Wlc1MFRtRnRaU0JPWVcxbElHOW1JSFJvWlNCamIyMXdiMjVsYm5RZ1ptOXlJR1Z5Y205eUlHMWxjM05oWjJWekxseHVJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSEJ5YjNCVWVYQmxjeUJOWVhBZ2IyWWdjSEp2Y0NCdVlXMWxJSFJ2SUdFZ1VtVmhZM1JRY205d1ZIbHdaVnh1SUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhCeWIzQnpYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYkc5allYUnBiMjRnWlM1bkxpQmNJbkJ5YjNCY0lpd2dYQ0pqYjI1MFpYaDBYQ0lzSUZ3aVkyaHBiR1FnWTI5dWRHVjRkRndpWEc0Z0tpQkFjSEpwZG1GMFpWeHVJQ292WEc1bWRXNWpkR2x2YmlCamFHVmphMUJ5YjNCVWVYQmxjeWhqYjIxd2IyNWxiblJPWVcxbExDQndjbTl3Vkhsd1pYTXNJSEJ5YjNCekxDQnNiMk5oZEdsdmJpa2dlMXh1SUNCbWIzSWdLSFpoY2lCd2NtOXdUbUZ0WlNCcGJpQndjbTl3Vkhsd1pYTXBJSHRjYmlBZ0lDQnBaaUFvY0hKdmNGUjVjR1Z6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCT1lXMWxLU2tnZTF4dUlDQWdJQ0FnZG1GeUlHVnljbTl5TzF4dUlDQWdJQ0FnTHk4Z1VISnZjQ0IwZVhCbElIWmhiR2xrWVhScGIyNGdiV0Y1SUhSb2NtOTNMaUJKYmlCallYTmxJSFJvWlhrZ1pHOHNJSGRsSUdSdmJpZDBJSGRoYm5RZ2RHOWNiaUFnSUNBZ0lDOHZJR1poYVd3Z2RHaGxJSEpsYm1SbGNpQndhR0Z6WlNCM2FHVnlaU0JwZENCa2FXUnVKM1FnWm1GcGJDQmlaV1p2Y21VdUlGTnZJSGRsSUd4dlp5QnBkQzVjYmlBZ0lDQWdJQzh2SUVGbWRHVnlJSFJvWlhObElHaGhkbVVnWW1WbGJpQmpiR1ZoYm1Wa0lIVndMQ0IzWlNkc2JDQnNaWFFnZEdobGJTQjBhSEp2ZHk1Y2JpQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQzh2SUZSb2FYTWdhWE1nYVc1MFpXNTBhVzl1WVd4c2VTQmhiaUJwYm5aaGNtbGhiblFnZEdoaGRDQm5aWFJ6SUdOaGRXZG9kQzRnU1hRbmN5QjBhR1VnYzJGdFpWeHVJQ0FnSUNBZ0lDQXZMeUJpWldoaGRtbHZjaUJoY3lCM2FYUm9iM1YwSUhSb2FYTWdjM1JoZEdWdFpXNTBJR1Y0WTJWd2RDQjNhWFJvSUdFZ1ltVjBkR1Z5SUcxbGMzTmhaMlV1WEc0Z0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUNBZ2RIbHdaVzltSUhCeWIzQlVlWEJsYzF0d2NtOXdUbUZ0WlYwZ1BUMDlJQ2RtZFc1amRHbHZiaWNzWEc0Z0lDQWdJQ0FnSUNBZ0p5VnpPaUFsY3lCMGVYQmxJR0FsYzJBZ2FYTWdhVzUyWVd4cFpEc2dhWFFnYlhWemRDQmlaU0JoSUdaMWJtTjBhVzl1TENCMWMzVmhiR3g1SUdaeWIyMGdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oxSmxZV04wTGxCeWIzQlVlWEJsY3k0bkxGeHVJQ0FnSUNBZ0lDQWdJR052YlhCdmJtVnVkRTVoYldVZ2ZId2dKMUpsWVdOMElHTnNZWE56Snl4Y2JpQWdJQ0FnSUNBZ0lDQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGMxdHNiMk5oZEdsdmJsMHNYRzRnSUNBZ0lDQWdJQ0FnY0hKdmNFNWhiV1ZjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaDBlWEJsYjJZZ2NISnZjRlI1Y0dWelczQnliM0JPWVcxbFhTQTlQVDBnSjJaMWJtTjBhVzl1SnlrcE8xeHVJQ0FnSUNBZ0lDQmxjbkp2Y2lBOUlIQnliM0JVZVhCbGMxdHdjbTl3VG1GdFpWMG9jSEp2Y0hNc0lIQnliM0JPWVcxbExDQmpiMjF3YjI1bGJuUk9ZVzFsTENCc2IyTmhkR2x2YmlrN1hHNGdJQ0FnSUNCOUlHTmhkR05vSUNobGVDa2dlMXh1SUNBZ0lDQWdJQ0JsY25KdmNpQTlJR1Y0TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tHVnljbTl5SUdsdWMzUmhibU5sYjJZZ1JYSnliM0lnSmlZZ0lTaGxjbkp2Y2k1dFpYTnpZV2RsSUdsdUlHeHZaMmRsWkZSNWNHVkdZV2xzZFhKbGN5a3BJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1QyNXNlU0J0YjI1cGRHOXlJSFJvYVhNZ1ptRnBiSFZ5WlNCdmJtTmxJR0psWTJGMWMyVWdkR2hsY21VZ2RHVnVaSE1nZEc4Z1ltVWdZU0JzYjNRZ2IyWWdkR2hsWEc0Z0lDQWdJQ0FnSUM4dklITmhiV1VnWlhKeWIzSXVYRzRnSUNBZ0lDQWdJR3h2WjJkbFpGUjVjR1ZHWVdsc2RYSmxjMXRsY25KdmNpNXRaWE56WVdkbFhTQTlJSFJ5ZFdVN1hHNWNiaUFnSUNBZ0lDQWdkbUZ5SUdGa1pHVnVaSFZ0SUQwZ1oyVjBSR1ZqYkdGeVlYUnBiMjVGY25KdmNrRmtaR1Z1WkhWdEtIUm9hWE1wTzF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhtWVd4elpTd2dKMFpoYVd4bFpDQndjbTl3Vkhsd1pUb2dKWE1sY3ljc0lHVnljbTl5TG0xbGMzTmhaMlVzSUdGa1pHVnVaSFZ0S1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVmVnh1WEc1MllYSWdkMkZ5Ym1Wa1VISnZjSE5OZFhSaGRHbHZibk1nUFNCN2ZUdGNibHh1THlvcVhHNGdLaUJYWVhKdUlHRmliM1YwSUcxMWRHRjBhVzVuSUhCeWIzQnpJSGRvWlc0Z2MyVjBkR2x1WnlCZ2NISnZjRTVoYldWZ0lHOXVJR0JsYkdWdFpXNTBZQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjSEp2Y0U1aGJXVWdWR2hsSUhOMGNtbHVaeUJyWlhrZ2QybDBhR2x1SUhCeWIzQnpJSFJvWVhRZ2QyRnpJSE5sZEZ4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUdWc1pXMWxiblJjYmlBcUwxeHVablZ1WTNScGIyNGdkMkZ5YmtadmNsQnliM0J6VFhWMFlYUnBiMjRvY0hKdmNFNWhiV1VzSUdWc1pXMWxiblFwSUh0Y2JpQWdkbUZ5SUhSNWNHVWdQU0JsYkdWdFpXNTBMblI1Y0dVN1hHNGdJSFpoY2lCbGJHVnRaVzUwVG1GdFpTQTlJSFI1Y0dWdlppQjBlWEJsSUQwOVBTQW5jM1J5YVc1bkp5QS9JSFI1Y0dVZ09pQjBlWEJsTG1ScGMzQnNZWGxPWVcxbE8xeHVJQ0IyWVhJZ2IzZHVaWEpPWVcxbElEMGdaV3hsYldWdWRDNWZiM2R1WlhJZ1AxeHVJQ0FnSUdWc1pXMWxiblF1WDI5M2JtVnlMbWRsZEZCMVlteHBZMGx1YzNSaGJtTmxLQ2t1WTI5dWMzUnlkV04wYjNJdVpHbHpjR3hoZVU1aGJXVWdPaUJ1ZFd4c08xeHVYRzRnSUhaaGNpQjNZWEp1YVc1blMyVjVJRDBnY0hKdmNFNWhiV1VnS3lBbmZDY2dLeUJsYkdWdFpXNTBUbUZ0WlNBcklDZDhKeUFySUc5M2JtVnlUbUZ0WlR0Y2JpQWdhV1lnS0hkaGNtNWxaRkJ5YjNCelRYVjBZWFJwYjI1ekxtaGhjMDkzYmxCeWIzQmxjblI1S0hkaGNtNXBibWRMWlhrcEtTQjdYRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzRnSUhkaGNtNWxaRkJ5YjNCelRYVjBZWFJwYjI1elczZGhjbTVwYm1kTFpYbGRJRDBnZEhKMVpUdGNibHh1SUNCMllYSWdaV3hsYldWdWRFbHVabThnUFNBbkp6dGNiaUFnYVdZZ0tHVnNaVzFsYm5ST1lXMWxLU0I3WEc0Z0lDQWdaV3hsYldWdWRFbHVabThnUFNBbklEd25JQ3NnWld4bGJXVnVkRTVoYldVZ0t5QW5JQzgrSnp0Y2JpQWdmVnh1SUNCMllYSWdiM2R1WlhKSmJtWnZJRDBnSnljN1hHNGdJR2xtSUNodmQyNWxjazVoYldVcElIdGNiaUFnSUNCdmQyNWxja2x1Wm04Z1BTQW5JRlJvWlNCbGJHVnRaVzUwSUhkaGN5QmpjbVZoZEdWa0lHSjVJQ2NnS3lCdmQyNWxjazVoYldVZ0t5QW5MaWM3WEc0Z0lIMWNibHh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FuUkc5dVhGd25kQ0J6WlhRZ0xuQnliM0J6TGlWeklHOW1JSFJvWlNCU1pXRmpkQ0JqYjIxd2IyNWxiblFsY3k0Z1NXNXpkR1ZoWkN3Z2MzQmxZMmxtZVNCMGFHVWdKeUFyWEc0Z0lDQWdKMk52Y25KbFkzUWdkbUZzZFdVZ2QyaGxiaUJwYm1sMGFXRnNiSGtnWTNKbFlYUnBibWNnZEdobElHVnNaVzFsYm5RZ2IzSWdkWE5sSUNjZ0sxeHVJQ0FnSUNkU1pXRmpkQzVqYkc5dVpVVnNaVzFsYm5RZ2RHOGdiV0ZyWlNCaElHNWxkeUJsYkdWdFpXNTBJSGRwZEdnZ2RYQmtZWFJsWkNCd2NtOXdjeTRsY3ljc1hHNGdJQ0FnY0hKdmNFNWhiV1VzWEc0Z0lDQWdaV3hsYldWdWRFbHVabThzWEc0Z0lDQWdiM2R1WlhKSmJtWnZYRzRnSUNrZ09pQnVkV3hzS1R0Y2JuMWNibHh1THk4Z1NXNXNhVzVsSUU5aWFtVmpkQzVwY3lCd2IyeDVabWxzYkZ4dVpuVnVZM1JwYjI0Z2FYTW9ZU3dnWWlrZ2UxeHVJQ0JwWmlBb1lTQWhQVDBnWVNrZ2UxeHVJQ0FnSUM4dklFNWhUbHh1SUNBZ0lISmxkSFZ5YmlCaUlDRTlQU0JpTzF4dUlDQjlYRzRnSUdsbUlDaGhJRDA5UFNBd0lDWW1JR0lnUFQwOUlEQXBJSHRjYmlBZ0lDQXZMeUFyTFRCY2JpQWdJQ0J5WlhSMWNtNGdNU0F2SUdFZ1BUMDlJREVnTHlCaU8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCaElEMDlQU0JpTzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRwZG1WdUlHRnVJR1ZzWlcxbGJuUXNJR05vWldOcklHbG1JR2wwY3lCd2NtOXdjeUJvWVhabElHSmxaVzRnYlhWMFlYUmxaQ0J6YVc1alpTQmxiR1Z0Wlc1MFhHNGdLaUJqY21WaGRHbHZiaUFvYjNJZ2RHaGxJR3hoYzNRZ1kyRnNiQ0IwYnlCMGFHbHpJR1oxYm1OMGFXOXVLUzRnU1c0Z2NHRnlkR2xqZFd4aGNpd2dZMmhsWTJzZ2FXWWdZVzU1WEc0Z0tpQnVaWGNnY0hKdmNITWdhR0YyWlNCaVpXVnVJR0ZrWkdWa0xDQjNhR2xqYUNCM1pTQmpZVzRuZENCa2FYSmxZM1JzZVNCallYUmphQ0JpZVNCa1pXWnBibWx1WnlCM1lYSnVhVzVuWEc0Z0tpQndjbTl3WlhKMGFXVnpJRzl1SUhSb1pTQndjbTl3Y3lCdlltcGxZM1F1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHVnNaVzFsYm5SY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWTJobFkydEJibVJYWVhKdVJtOXlUWFYwWVhSbFpGQnliM0J6S0dWc1pXMWxiblFwSUh0Y2JpQWdhV1lnS0NGbGJHVnRaVzUwTGw5emRHOXlaU2tnZTF4dUlDQWdJQzh2SUVWc1pXMWxiblFnZDJGeklHTnlaV0YwWldRZ2RYTnBibWNnWUc1bGR5QlNaV0ZqZEVWc1pXMWxiblJnSUdScGNtVmpkR3g1SUc5eUlIZHBkR2hjYmlBZ0lDQXZMeUJnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblJnT3lCemEybHdJRzExZEdGMGFXOXVJR05vWldOcmFXNW5YRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzVjYmlBZ2RtRnlJRzl5YVdkcGJtRnNVSEp2Y0hNZ1BTQmxiR1Z0Wlc1MExsOXpkRzl5WlM1dmNtbG5hVzVoYkZCeWIzQnpPMXh1SUNCMllYSWdjSEp2Y0hNZ1BTQmxiR1Z0Wlc1MExuQnliM0J6TzF4dVhHNGdJR1p2Y2lBb2RtRnlJSEJ5YjNCT1lXMWxJR2x1SUhCeWIzQnpLU0I3WEc0Z0lDQWdhV1lnS0hCeWIzQnpMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JPWVcxbEtTa2dlMXh1SUNBZ0lDQWdhV1lnS0NGdmNtbG5hVzVoYkZCeWIzQnpMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JPWVcxbEtTQjhmRnh1SUNBZ0lDQWdJQ0FnSUNGcGN5aHZjbWxuYVc1aGJGQnliM0J6VzNCeWIzQk9ZVzFsWFN3Z2NISnZjSE5iY0hKdmNFNWhiV1ZkS1NrZ2UxeHVJQ0FnSUNBZ0lDQjNZWEp1Um05eVVISnZjSE5OZFhSaGRHbHZiaWh3Y205d1RtRnRaU3dnWld4bGJXVnVkQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0x5OGdRMjl3ZVNCdmRtVnlJSFJvWlNCdVpYY2dkbUZzZFdVZ2MyOGdkR2hoZENCMGFHVWdkSGR2SUhCeWIzQnpJRzlpYW1WamRITWdiV0YwWTJnZ1lXZGhhVzVjYmlBZ0lDQWdJQ0FnYjNKcFoybHVZV3hRY205d2MxdHdjbTl3VG1GdFpWMGdQU0J3Y205d2MxdHdjbTl3VG1GdFpWMDdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dSMmwyWlc0Z1lXNGdaV3hsYldWdWRDd2dkbUZzYVdSaGRHVWdkR2hoZENCcGRITWdjSEp2Y0hNZ1ptOXNiRzkzSUhSb1pTQndjbTl3Vkhsd1pYTWdaR1ZtYVc1cGRHbHZiaXhjYmlBcUlIQnliM1pwWkdWa0lHSjVJSFJvWlNCMGVYQmxMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdVbVZoWTNSRmJHVnRaVzUwZlNCbGJHVnRaVzUwWEc0Z0tpOWNibVoxYm1OMGFXOXVJSFpoYkdsa1lYUmxVSEp2Y0ZSNWNHVnpLR1ZzWlcxbGJuUXBJSHRjYmlBZ2FXWWdLR1ZzWlcxbGJuUXVkSGx3WlNBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnTHk4Z1ZHaHBjeUJvWVhNZ1lXeHlaV0ZrZVNCM1lYSnVaV1F1SUVSdmJpZDBJSFJvY205M0xseHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0F2THlCRmVIUnlZV04wSUhSb1pTQmpiMjF3YjI1bGJuUWdZMnhoYzNNZ1puSnZiU0IwYUdVZ1pXeGxiV1Z1ZEM0Z1EyOXVkbVZ5ZEhNZ2MzUnlhVzVuSUhSNWNHVnpYRzRnSUM4dklIUnZJR0VnWTI5dGNHOXphWFJsSUdOc1lYTnpJSGRvYVdOb0lHMWhlU0JvWVhabElIQnliM0JVZVhCbGN5NWNiaUFnTHk4Z1ZFOUVUem9nVm1Gc2FXUmhkR2x1WnlCaElITjBjbWx1WnlkeklIQnliM0JVZVhCbGN5QnBjeUJ1YjNRZ1pHVmpiM1Z3YkdWa0lHWnliMjBnZEdobFhHNGdJQzh2SUhKbGJtUmxjbWx1WnlCMFlYSm5aWFFnZDJocFkyZ2dhWE1nY0hKdllteGxiV0YwYVdNdVhHNGdJSFpoY2lCamIyMXdiMjVsYm5SRGJHRnpjeUE5SUZKbFlXTjBUbUYwYVhabFEyOXRjRzl1Wlc1MExtZGxkRU52YlhCdmJtVnVkRU5zWVhOelJtOXlSV3hsYldWdWRDaGNiaUFnSUNCbGJHVnRaVzUwWEc0Z0lDazdYRzRnSUhaaGNpQnVZVzFsSUQwZ1kyOXRjRzl1Wlc1MFEyeGhjM011WkdsemNHeGhlVTVoYldVZ2ZId2dZMjl0Y0c5dVpXNTBRMnhoYzNNdWJtRnRaVHRjYmlBZ2FXWWdLR052YlhCdmJtVnVkRU5zWVhOekxuQnliM0JVZVhCbGN5a2dlMXh1SUNBZ0lHTm9aV05yVUhKdmNGUjVjR1Z6S0Z4dUlDQWdJQ0FnYm1GdFpTeGNiaUFnSUNBZ0lHTnZiWEJ2Ym1WdWRFTnNZWE56TG5CeWIzQlVlWEJsY3l4Y2JpQWdJQ0FnSUdWc1pXMWxiblF1Y0hKdmNITXNYRzRnSUNBZ0lDQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjV6TG5CeWIzQmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHbG1JQ2gwZVhCbGIyWWdZMjl0Y0c5dVpXNTBRMnhoYzNNdVoyVjBSR1ZtWVhWc2RGQnliM0J6SUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNCamIyMXdiMjVsYm5SRGJHRnpjeTVuWlhSRVpXWmhkV3gwVUhKdmNITXVhWE5TWldGamRFTnNZWE56UVhCd2NtOTJaV1FzWEc0Z0lDQWdJQ0FuWjJWMFJHVm1ZWFZzZEZCeWIzQnpJR2x6SUc5dWJIa2dkWE5sWkNCdmJpQmpiR0Z6YzJsaklGSmxZV04wTG1OeVpXRjBaVU5zWVhOeklDY2dLMXh1SUNBZ0lDQWdKMlJsWm1sdWFYUnBiMjV6TGlCVmMyVWdZU0J6ZEdGMGFXTWdjSEp2Y0dWeWRIa2dibUZ0WldRZ1lHUmxabUYxYkhSUWNtOXdjMkFnYVc1emRHVmhaQzRuWEc0Z0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNCOVhHNTlYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblJXWVd4cFpHRjBiM0lnUFNCN1hHNWNiaUFnWTJobFkydEJibVJYWVhKdVJtOXlUWFYwWVhSbFpGQnliM0J6T2lCamFHVmphMEZ1WkZkaGNtNUdiM0pOZFhSaGRHVmtVSEp2Y0hNc1hHNWNiaUFnWTNKbFlYUmxSV3hsYldWdWREb2dablZ1WTNScGIyNG9kSGx3WlN3Z2NISnZjSE1zSUdOb2FXeGtjbVZ1S1NCN1hHNGdJQ0FnTHk4Z1YyVWdkMkZ5YmlCcGJpQjBhR2x6SUdOaGMyVWdZblYwSUdSdmJpZDBJSFJvY205M0xpQlhaU0JsZUhCbFkzUWdkR2hsSUdWc1pXMWxiblFnWTNKbFlYUnBiMjRnZEc5Y2JpQWdJQ0F2THlCemRXTmpaV1ZrSUdGdVpDQjBhR1Z5WlNCM2FXeHNJR3hwYTJWc2VTQmlaU0JsY25KdmNuTWdhVzRnY21WdVpHVnlMbHh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnZEhsd1pTQWhQU0J1ZFd4c0xGeHVJQ0FnSUNBZ0oxSmxZV04wTG1OeVpXRjBaVVZzWlcxbGJuUTZJSFI1Y0dVZ2MyaHZkV3hrSUc1dmRDQmlaU0J1ZFd4c0lHOXlJSFZ1WkdWbWFXNWxaQzRnU1hRZ2MyaHZkV3hrSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5ZbVVnWVNCemRISnBibWNnS0dadmNpQkVUMDBnWld4bGJXVnVkSE1wSUc5eUlHRWdVbVZoWTNSRGJHRnpjeUFvWm05eUlHTnZiWEJ2YzJsMFpTQW5JQ3RjYmlBZ0lDQWdJQ0FnSjJOdmJYQnZibVZ1ZEhNcExpZGNiaUFnSUNBcElEb2diblZzYkNrN1hHNWNiaUFnSUNCMllYSWdaV3hsYldWdWRDQTlJRkpsWVdOMFJXeGxiV1Z1ZEM1amNtVmhkR1ZGYkdWdFpXNTBMbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lrN1hHNWNiaUFnSUNBdkx5QlVhR1VnY21WemRXeDBJR05oYmlCaVpTQnVkV3hzYVhOb0lHbG1JR0VnYlc5amF5QnZjaUJoSUdOMWMzUnZiU0JtZFc1amRHbHZiaUJwY3lCMWMyVmtMbHh1SUNBZ0lDOHZJRlJQUkU4NklFUnliM0FnZEdocGN5QjNhR1Z1SUhSb1pYTmxJR0Z5WlNCdWJ5QnNiMjVuWlhJZ1lXeHNiM2RsWkNCaGN5QjBhR1VnZEhsd1pTQmhjbWQxYldWdWRDNWNiaUFnSUNCcFppQW9aV3hsYldWdWRDQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1pXeGxiV1Z1ZER0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01qc2dhU0E4SUdGeVozVnRaVzUwY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdkbUZzYVdSaGRHVkRhR2xzWkV0bGVYTW9ZWEpuZFcxbGJuUnpXMmxkTENCMGVYQmxLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjJZV3hwWkdGMFpWQnliM0JVZVhCbGN5aGxiR1Z0Wlc1MEtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCbGJHVnRaVzUwTzF4dUlDQjlMRnh1WEc0Z0lHTnlaV0YwWlVaaFkzUnZjbms2SUdaMWJtTjBhVzl1S0hSNWNHVXBJSHRjYmlBZ0lDQjJZWElnZG1Gc2FXUmhkR1ZrUm1GamRHOXllU0E5SUZKbFlXTjBSV3hsYldWdWRGWmhiR2xrWVhSdmNpNWpjbVZoZEdWRmJHVnRaVzUwTG1KcGJtUW9YRzRnSUNBZ0lDQnVkV3hzTEZ4dUlDQWdJQ0FnZEhsd1pWeHVJQ0FnSUNrN1hHNGdJQ0FnTHk4Z1RHVm5ZV041SUdodmIyc2dWRTlFVHpvZ1YyRnliaUJwWmlCMGFHbHpJR2x6SUdGalkyVnpjMlZrWEc0Z0lDQWdkbUZzYVdSaGRHVmtSbUZqZEc5eWVTNTBlWEJsSUQwZ2RIbHdaVHRjYmx4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lFOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2hjYmlBZ0lDQWdJQ0FnSUNCMllXeHBaR0YwWldSR1lXTjBiM0o1TEZ4dUlDQWdJQ0FnSUNBZ0lDZDBlWEJsSnl4Y2JpQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR2RsZERvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdaaGJITmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2RHWVdOMGIzSjVMblI1Y0dVZ2FYTWdaR1Z3Y21WallYUmxaQzRnUVdOalpYTnpJSFJvWlNCamJHRnpjeUJrYVhKbFkzUnNlU0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBblltVm1iM0psSUhCaGMzTnBibWNnYVhRZ2RHOGdZM0psWVhSbFJtRmpkRzl5ZVM0blhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtIUm9hWE1zSUNkMGVYQmxKeXdnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGJIVmxPaUIwZVhCbFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEhsd1pUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5SUdOaGRHTm9JQ2g0S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRWxGSUhkcGJHd2dabUZwYkNCdmJpQmtaV1pwYm1WUWNtOXdaWEowZVNBb1pYTTFMWE5vYVcwdmMyaGhiU0IwYjI4cFhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNWNiaUFnSUNCeVpYUjFjbTRnZG1Gc2FXUmhkR1ZrUm1GamRHOXllVHRjYmlBZ2ZTeGNibHh1SUNCamJHOXVaVVZzWlcxbGJuUTZJR1oxYm1OMGFXOXVLR1ZzWlcxbGJuUXNJSEJ5YjNCekxDQmphR2xzWkhKbGJpa2dlMXh1SUNBZ0lIWmhjaUJ1WlhkRmJHVnRaVzUwSUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU5zYjI1bFJXeGxiV1Z1ZEM1aGNIQnNlU2gwYUdsekxDQmhjbWQxYldWdWRITXBPMXh1SUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0F5T3lCcElEd2dZWEpuZFcxbGJuUnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCMllXeHBaR0YwWlVOb2FXeGtTMlY1Y3loaGNtZDFiV1Z1ZEhOYmFWMHNJRzVsZDBWc1pXMWxiblF1ZEhsd1pTazdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGJHbGtZWFJsVUhKdmNGUjVjR1Z6S0c1bGQwVnNaVzFsYm5RcE8xeHVJQ0FnSUhKbGRIVnliaUJ1WlhkRmJHVnRaVzUwTzF4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5TzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RW1wdHlDb21wb25lbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VNYXBcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBjb21wb25lbnQ7XG4vLyBUaGlzIHJlZ2lzdHJ5IGtlZXBzIHRyYWNrIG9mIHRoZSBSZWFjdCBJRHMgb2YgdGhlIGNvbXBvbmVudHMgdGhhdCByZW5kZXJlZCB0b1xuLy8gYG51bGxgIChpbiByZWFsaXR5IGEgcGxhY2Vob2xkZXIgc3VjaCBhcyBgbm9zY3JpcHRgKVxudmFyIG51bGxDb21wb25lbnRJRHNSZWdpc3RyeSA9IHt9O1xuXG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudEluamVjdGlvbiA9IHtcbiAgaW5qZWN0RW1wdHlDb21wb25lbnQ6IGZ1bmN0aW9uKGVtcHR5Q29tcG9uZW50KSB7XG4gICAgY29tcG9uZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkoZW1wdHlDb21wb25lbnQpO1xuICB9XG59O1xuXG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudFR5cGUgPSBmdW5jdGlvbigpIHt9O1xuUmVhY3RFbXB0eUNvbXBvbmVudFR5cGUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQodGhpcyk7XG4gIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBydW4gdGhlc2UgbWV0aG9kcyBpbiB0aGUgY29ycmVjdCBvcmRlciwgd2Ugc2hvdWxkbid0XG4gIC8vIG5lZWQgdGhpcyBjaGVjay4gV2UncmUgZ29pbmcgdG8gYXNzdW1lIGlmIHdlJ3JlIGhlcmUgaXQgbWVhbnMgd2UgcmFuXG4gIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGFscmVhZHkgc28gdGhlcmUgaXMgbm8gaW50ZXJuYWwgaW5zdGFuY2UgKGl0IGdldHNcbiAgLy8gcmVtb3ZlZCBhcyBwYXJ0IG9mIHRoZSB1bm1vdW50aW5nIHByb2Nlc3MpLlxuICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVnaXN0ZXJOdWxsQ29tcG9uZW50SUQoaW50ZXJuYWxJbnN0YW5jZS5fcm9vdE5vZGVJRCk7XG59O1xuUmVhY3RFbXB0eUNvbXBvbmVudFR5cGUucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQodGhpcyk7XG4gIC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjaGVjay4gU2VlIFRPRE8gaW4gY29tcG9uZW50RGlkTW91bnQuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBkZXJlZ2lzdGVyTnVsbENvbXBvbmVudElEKGludGVybmFsSW5zdGFuY2UuX3Jvb3ROb2RlSUQpO1xufTtcblJlYWN0RW1wdHlDb21wb25lbnRUeXBlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBjb21wb25lbnQsXG4gICAgJ1RyeWluZyB0byByZXR1cm4gbnVsbCBmcm9tIGEgcmVuZGVyLCBidXQgbm8gbnVsbCBwbGFjZWhvbGRlciBjb21wb25lbnQgJyArXG4gICAgJ3dhcyBpbmplY3RlZC4nXG4gICkgOiBpbnZhcmlhbnQoY29tcG9uZW50KSk7XG4gIHJldHVybiBjb21wb25lbnQoKTtcbn07XG5cbnZhciBlbXB0eUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudChSZWFjdEVtcHR5Q29tcG9uZW50VHlwZSk7XG5cbi8qKlxuICogTWFyayB0aGUgY29tcG9uZW50IGFzIGhhdmluZyByZW5kZXJlZCB0byBudWxsLlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIENvbXBvbmVudCdzIGBfcm9vdE5vZGVJRGAuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyTnVsbENvbXBvbmVudElEKGlkKSB7XG4gIG51bGxDb21wb25lbnRJRHNSZWdpc3RyeVtpZF0gPSB0cnVlO1xufVxuXG4vKipcbiAqIFVubWFyayB0aGUgY29tcG9uZW50IGFzIGhhdmluZyByZW5kZXJlZCB0byBudWxsOiBpdCByZW5kZXJzIHRvIHNvbWV0aGluZyBub3cuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgQ29tcG9uZW50J3MgYF9yb290Tm9kZUlEYC5cbiAqL1xuZnVuY3Rpb24gZGVyZWdpc3Rlck51bGxDb21wb25lbnRJRChpZCkge1xuICBkZWxldGUgbnVsbENvbXBvbmVudElEc1JlZ2lzdHJ5W2lkXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgQ29tcG9uZW50J3MgYF9yb290Tm9kZUlEYC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbXBvbmVudCBpcyByZW5kZXJlZCB0byBudWxsLlxuICovXG5mdW5jdGlvbiBpc051bGxDb21wb25lbnRJRChpZCkge1xuICByZXR1cm4gISFudWxsQ29tcG9uZW50SURzUmVnaXN0cnlbaWRdO1xufVxuXG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudCA9IHtcbiAgZW1wdHlFbGVtZW50OiBlbXB0eUVsZW1lbnQsXG4gIGluamVjdGlvbjogUmVhY3RFbXB0eUNvbXBvbmVudEluamVjdGlvbixcbiAgaXNOdWxsQ29tcG9uZW50SUQ6IGlzTnVsbENvbXBvbmVudElEXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RW1wdHlDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TkMweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBSVzF3ZEhsRGIyMXdiMjVsYm5SY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUkpibk4wWVc1alpVMWhjQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wU1c1emRHRnVZMlZOWVhCY0lpazdYRzVjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYm5aaGNpQmpiMjF3YjI1bGJuUTdYRzR2THlCVWFHbHpJSEpsWjJsemRISjVJR3RsWlhCeklIUnlZV05ySUc5bUlIUm9aU0JTWldGamRDQkpSSE1nYjJZZ2RHaGxJR052YlhCdmJtVnVkSE1nZEdoaGRDQnlaVzVrWlhKbFpDQjBiMXh1THk4Z1lHNTFiR3hnSUNocGJpQnlaV0ZzYVhSNUlHRWdjR3hoWTJWb2IyeGtaWElnYzNWamFDQmhjeUJnYm05elkzSnBjSFJnS1Z4dWRtRnlJRzUxYkd4RGIyMXdiMjVsYm5SSlJITlNaV2RwYzNSeWVTQTlJSHQ5TzF4dVhHNTJZWElnVW1WaFkzUkZiWEIwZVVOdmJYQnZibVZ1ZEVsdWFtVmpkR2x2YmlBOUlIdGNiaUFnYVc1cVpXTjBSVzF3ZEhsRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtHVnRjSFI1UTI5dGNHOXVaVzUwS1NCN1hHNGdJQ0FnWTI5dGNHOXVaVzUwSUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVWmhZM1J2Y25rb1pXMXdkSGxEYjIxd2IyNWxiblFwTzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnVW1WaFkzUkZiWEIwZVVOdmJYQnZibVZ1ZEZSNWNHVWdQU0JtZFc1amRHbHZiaWdwSUh0OU8xeHVVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkRlI1Y0dVdWNISnZkRzkwZVhCbExtTnZiWEJ2Ym1WdWRFUnBaRTF2ZFc1MElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUJwYm5SbGNtNWhiRWx1YzNSaGJtTmxJRDBnVW1WaFkzUkpibk4wWVc1alpVMWhjQzVuWlhRb2RHaHBjeWs3WEc0Z0lDOHZJRlJQUkU4NklFMWhhMlVnYzNWeVpTQjNaU0J5ZFc0Z2RHaGxjMlVnYldWMGFHOWtjeUJwYmlCMGFHVWdZMjl5Y21WamRDQnZjbVJsY2l3Z2QyVWdjMmh2ZFd4a2JpZDBYRzRnSUM4dklHNWxaV1FnZEdocGN5QmphR1ZqYXk0Z1YyVW5jbVVnWjI5cGJtY2dkRzhnWVhOemRXMWxJR2xtSUhkbEozSmxJR2hsY21VZ2FYUWdiV1ZoYm5NZ2QyVWdjbUZ1WEc0Z0lDOHZJR052YlhCdmJtVnVkRmRwYkd4VmJtMXZkVzUwSUdGc2NtVmhaSGtnYzI4Z2RHaGxjbVVnYVhNZ2JtOGdhVzUwWlhKdVlXd2dhVzV6ZEdGdVkyVWdLR2wwSUdkbGRITmNiaUFnTHk4Z2NtVnRiM1psWkNCaGN5QndZWEowSUc5bUlIUm9aU0IxYm0xdmRXNTBhVzVuSUhCeWIyTmxjM01wTGx4dUlDQnBaaUFvSVdsdWRHVnlibUZzU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J5WlhSMWNtNDdYRzRnSUgxY2JpQWdjbVZuYVhOMFpYSk9kV3hzUTI5dGNHOXVaVzUwU1VRb2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmNtOXZkRTV2WkdWSlJDazdYRzU5TzF4dVVtVmhZM1JGYlhCMGVVTnZiWEJ2Ym1WdWRGUjVjR1V1Y0hKdmRHOTBlWEJsTG1OdmJYQnZibVZ1ZEZkcGJHeFZibTF2ZFc1MElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUJwYm5SbGNtNWhiRWx1YzNSaGJtTmxJRDBnVW1WaFkzUkpibk4wWVc1alpVMWhjQzVuWlhRb2RHaHBjeWs3WEc0Z0lDOHZJRlJQUkU4NklFZGxkQ0J5YVdRZ2IyWWdkR2hwY3lCamFHVmpheTRnVTJWbElGUlBSRThnYVc0Z1kyOXRjRzl1Wlc1MFJHbGtUVzkxYm5RdVhHNGdJR2xtSUNnaGFXNTBaWEp1WVd4SmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0JrWlhKbFoybHpkR1Z5VG5Wc2JFTnZiWEJ2Ym1WdWRFbEVLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYM0p2YjNST2IyUmxTVVFwTzF4dWZUdGNibEpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblJVZVhCbExuQnliM1J2ZEhsd1pTNXlaVzVrWlhJZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0JqYjIxd2IyNWxiblFzWEc0Z0lDQWdKMVJ5ZVdsdVp5QjBieUJ5WlhSMWNtNGdiblZzYkNCbWNtOXRJR0VnY21WdVpHVnlMQ0JpZFhRZ2JtOGdiblZzYkNCd2JHRmpaV2h2YkdSbGNpQmpiMjF3YjI1bGJuUWdKeUFyWEc0Z0lDQWdKM2RoY3lCcGJtcGxZM1JsWkM0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1kyOXRjRzl1Wlc1MEtTazdYRzRnSUhKbGRIVnliaUJqYjIxd2IyNWxiblFvS1R0Y2JuMDdYRzVjYm5aaGNpQmxiWEIwZVVWc1pXMWxiblFnUFNCU1pXRmpkRVZzWlcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZENoU1pXRmpkRVZ0Y0hSNVEyOXRjRzl1Wlc1MFZIbHdaU2s3WEc1Y2JpOHFLbHh1SUNvZ1RXRnlheUIwYUdVZ1kyOXRjRzl1Wlc1MElHRnpJR2hoZG1sdVp5QnlaVzVrWlhKbFpDQjBieUJ1ZFd4c0xseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR2xrSUVOdmJYQnZibVZ1ZENkeklHQmZjbTl2ZEU1dlpHVkpSR0F1WEc0Z0tpOWNibVoxYm1OMGFXOXVJSEpsWjJsemRHVnlUblZzYkVOdmJYQnZibVZ1ZEVsRUtHbGtLU0I3WEc0Z0lHNTFiR3hEYjIxd2IyNWxiblJKUkhOU1pXZHBjM1J5ZVZ0cFpGMGdQU0IwY25WbE8xeHVmVnh1WEc0dktpcGNiaUFxSUZWdWJXRnlheUIwYUdVZ1kyOXRjRzl1Wlc1MElHRnpJR2hoZG1sdVp5QnlaVzVrWlhKbFpDQjBieUJ1ZFd4c09pQnBkQ0J5Wlc1a1pYSnpJSFJ2SUhOdmJXVjBhR2x1WnlCdWIzY3VYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1EyOXRjRzl1Wlc1MEozTWdZRjl5YjI5MFRtOWtaVWxFWUM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWkdWeVpXZHBjM1JsY2s1MWJHeERiMjF3YjI1bGJuUkpSQ2hwWkNrZ2UxeHVJQ0JrWld4bGRHVWdiblZzYkVOdmJYQnZibVZ1ZEVsRWMxSmxaMmx6ZEhKNVcybGtYVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2FXUWdRMjl0Y0c5dVpXNTBKM01nWUY5eWIyOTBUbTlrWlVsRVlDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5SUZSeWRXVWdhV1lnZEdobElHTnZiWEJ2Ym1WdWRDQnBjeUJ5Wlc1a1pYSmxaQ0IwYnlCdWRXeHNMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQnBjMDUxYkd4RGIyMXdiMjVsYm5SSlJDaHBaQ2tnZTF4dUlDQnlaWFIxY200Z0lTRnVkV3hzUTI5dGNHOXVaVzUwU1VSelVtVm5hWE4wY25sYmFXUmRPMXh1ZlZ4dVhHNTJZWElnVW1WaFkzUkZiWEIwZVVOdmJYQnZibVZ1ZENBOUlIdGNiaUFnWlcxd2RIbEZiR1Z0Wlc1ME9pQmxiWEIwZVVWc1pXMWxiblFzWEc0Z0lHbHVhbVZqZEdsdmJqb2dVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkRWx1YW1WamRHbHZiaXhjYmlBZ2FYTk9kV3hzUTI5dGNHOXVaVzUwU1VRNklHbHpUblZzYkVOdmJYQnZibVZ1ZEVsRVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBSVzF3ZEhsRGIyMXdiMjVsYm5RN1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RXJyb3JVdGlsc1xuICogQHR5cGVjaGVja3NcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFJlYWN0RXJyb3JVdGlscyA9IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBndWFyZGVkIHZlcnNpb24gb2YgYSBmdW5jdGlvbi4gVGhpcyBpcyBzdXBwb3NlZCB0byBtYWtlIGRlYnVnZ2luZ1xuICAgKiBvZiBldmVudCBoYW5kbGVycyBlYXNpZXIuIFRvIGFpZCBkZWJ1Z2dpbmcgd2l0aCB0aGUgYnJvd3NlcidzIGRlYnVnZ2VyLFxuICAgKiB0aGlzIGN1cnJlbnRseSBzaW1wbHkgcmV0dXJucyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgRnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGd1YXJkXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICAgKi9cbiAgZ3VhcmQ6IGZ1bmN0aW9uKGZ1bmMsIG5hbWUpIHtcbiAgICByZXR1cm4gZnVuYztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVycm9yVXRpbHM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFdmVudEVtaXR0ZXJNaXhpblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZShcIi4vRXZlbnRQbHVnaW5IdWJcIik7XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50UXVldWVJbkJhdGNoKGV2ZW50cykge1xuICBFdmVudFBsdWdpbkh1Yi5lbnF1ZXVlRXZlbnRzKGV2ZW50cyk7XG4gIEV2ZW50UGx1Z2luSHViLnByb2Nlc3NFdmVudFF1ZXVlKCk7XG59XG5cbnZhciBSZWFjdEV2ZW50RW1pdHRlck1peGluID0ge1xuXG4gIC8qKlxuICAgKiBTdHJlYW1zIGEgZmlyZWQgdG9wLWxldmVsIGV2ZW50IHRvIGBFdmVudFBsdWdpbkh1YmAgd2hlcmUgcGx1Z2lucyBoYXZlIHRoZVxuICAgKiBvcHBvcnR1bml0eSB0byBjcmVhdGUgYFJlYWN0RXZlbnRgcyB0byBiZSBkaXNwYXRjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgZW52aXJvbm1lbnQgZXZlbnQuXG4gICAqL1xuICBoYW5kbGVUb3BMZXZlbDogZnVuY3Rpb24oXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudCkge1xuICAgIHZhciBldmVudHMgPSBFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApO1xuXG4gICAgcnVuRXZlbnRRdWV1ZUluQmF0Y2goZXZlbnRzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEV2ZW50RW1pdHRlck1peGluO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RXZlbnRMaXN0ZW5lclxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudExpc3RlbmVyID0gcmVxdWlyZShcIi4vRXZlbnRMaXN0ZW5lclwiKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlSGFuZGxlc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRUYXJnZXRcIik7XG52YXIgZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24gPSByZXF1aXJlKFwiLi9nZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvblwiKTtcblxuLyoqXG4gKiBGaW5kcyB0aGUgcGFyZW50IFJlYWN0IGNvbXBvbmVudCBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHsqfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRXZlbnRUYXJnZXR9IFBhcmVudCBjb250YWluZXIsIG9yIGBudWxsYCBpZiB0aGUgc3BlY2lmaWVkIG5vZGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IG5lc3RlZC5cbiAqL1xuZnVuY3Rpb24gZmluZFBhcmVudChub2RlKSB7XG4gIC8vIFRPRE86IEl0IG1heSBiZSBhIGdvb2QgaWRlYSB0byBjYWNoZSB0aGlzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgRE9NXG4gIC8vIHRyYXZlcnNhbCwgYnV0IGNhY2hpbmcgaXMgZGlmZmljdWx0IHRvIGRvIGNvcnJlY3RseSB3aXRob3V0IHVzaW5nIGFcbiAgLy8gbXV0YXRpb24gb2JzZXJ2ZXIgdG8gbGlzdGVuIGZvciBhbGwgRE9NIGNoYW5nZXMuXG4gIHZhciBub2RlSUQgPSBSZWFjdE1vdW50LmdldElEKG5vZGUpO1xuICB2YXIgcm9vdElEID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuZ2V0UmVhY3RSb290SURGcm9tTm9kZUlEKG5vZGVJRCk7XG4gIHZhciBjb250YWluZXIgPSBSZWFjdE1vdW50LmZpbmRSZWFjdENvbnRhaW5lckZvcklEKHJvb3RJRCk7XG4gIHZhciBwYXJlbnQgPSBSZWFjdE1vdW50LmdldEZpcnN0UmVhY3RET00oY29udGFpbmVyKTtcbiAgcmV0dXJuIHBhcmVudDtcbn1cblxuLy8gVXNlZCB0byBzdG9yZSBhbmNlc3RvciBoaWVyYXJjaHkgaW4gdG9wIGxldmVsIGNhbGxiYWNrXG5mdW5jdGlvbiBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICB0aGlzLnRvcExldmVsVHlwZSA9IHRvcExldmVsVHlwZTtcbiAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICB0aGlzLmFuY2VzdG9ycyA9IFtdO1xufVxuYXNzaWduKFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZy5wcm90b3R5cGUsIHtcbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50b3BMZXZlbFR5cGUgPSBudWxsO1xuICAgIHRoaXMubmF0aXZlRXZlbnQgPSBudWxsO1xuICAgIHRoaXMuYW5jZXN0b3JzLmxlbmd0aCA9IDA7XG4gIH1cbn0pO1xuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFxuICBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcsXG4gIFBvb2xlZENsYXNzLnR3b0FyZ3VtZW50UG9vbGVyXG4pO1xuXG5mdW5jdGlvbiBoYW5kbGVUb3BMZXZlbEltcGwoYm9va0tlZXBpbmcpIHtcbiAgdmFyIHRvcExldmVsVGFyZ2V0ID0gUmVhY3RNb3VudC5nZXRGaXJzdFJlYWN0RE9NKFxuICAgIGdldEV2ZW50VGFyZ2V0KGJvb2tLZWVwaW5nLm5hdGl2ZUV2ZW50KVxuICApIHx8IHdpbmRvdztcblxuICAvLyBMb29wIHRocm91Z2ggdGhlIGhpZXJhcmNoeSwgaW4gY2FzZSB0aGVyZSdzIGFueSBuZXN0ZWQgY29tcG9uZW50cy5cbiAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBidWlsZCB0aGUgYXJyYXkgb2YgYW5jZXN0b3JzIGJlZm9yZSBjYWxsaW5nIGFueVxuICAvLyBldmVudCBoYW5kbGVycywgYmVjYXVzZSBldmVudCBoYW5kbGVycyBjYW4gbW9kaWZ5IHRoZSBET00sIGxlYWRpbmcgdG9cbiAgLy8gaW5jb25zaXN0ZW5jaWVzIHdpdGggUmVhY3RNb3VudCdzIG5vZGUgY2FjaGUuIFNlZSAjMTEwNS5cbiAgdmFyIGFuY2VzdG9yID0gdG9wTGV2ZWxUYXJnZXQ7XG4gIHdoaWxlIChhbmNlc3Rvcikge1xuICAgIGJvb2tLZWVwaW5nLmFuY2VzdG9ycy5wdXNoKGFuY2VzdG9yKTtcbiAgICBhbmNlc3RvciA9IGZpbmRQYXJlbnQoYW5jZXN0b3IpO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBib29rS2VlcGluZy5hbmNlc3RvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdG9wTGV2ZWxUYXJnZXQgPSBib29rS2VlcGluZy5hbmNlc3RvcnNbaV07XG4gICAgdmFyIHRvcExldmVsVGFyZ2V0SUQgPSBSZWFjdE1vdW50LmdldElEKHRvcExldmVsVGFyZ2V0KSB8fCAnJztcbiAgICBSZWFjdEV2ZW50TGlzdGVuZXIuX2hhbmRsZVRvcExldmVsKFxuICAgICAgYm9va0tlZXBpbmcudG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgYm9va0tlZXBpbmcubmF0aXZlRXZlbnRcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFZhbHVlTW9uaXRvcihjYikge1xuICB2YXIgc2Nyb2xsUG9zaXRpb24gPSBnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbih3aW5kb3cpO1xuICBjYihzY3JvbGxQb3NpdGlvbik7XG59XG5cbnZhciBSZWFjdEV2ZW50TGlzdGVuZXIgPSB7XG4gIF9lbmFibGVkOiB0cnVlLFxuICBfaGFuZGxlVG9wTGV2ZWw6IG51bGwsXG5cbiAgV0lORE9XX0hBTkRMRTogRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8gd2luZG93IDogbnVsbCxcblxuICBzZXRIYW5kbGVUb3BMZXZlbDogZnVuY3Rpb24oaGFuZGxlVG9wTGV2ZWwpIHtcbiAgICBSZWFjdEV2ZW50TGlzdGVuZXIuX2hhbmRsZVRvcExldmVsID0gaGFuZGxlVG9wTGV2ZWw7XG4gIH0sXG5cbiAgc2V0RW5hYmxlZDogZnVuY3Rpb24oZW5hYmxlZCkge1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5fZW5hYmxlZCA9ICEhZW5hYmxlZDtcbiAgfSxcblxuICBpc0VuYWJsZWQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBSZWFjdEV2ZW50TGlzdGVuZXIuX2VuYWJsZWQ7XG4gIH0sXG5cblxuICAvKipcbiAgICogVHJhcHMgdG9wLWxldmVsIGV2ZW50cyBieSB1c2luZyBldmVudCBidWJibGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGFuZGxlckJhc2VOYW1lIEV2ZW50IG5hbWUgKGUuZy4gXCJjbGlja1wiKS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGhhbmRsZSBFbGVtZW50IG9uIHdoaWNoIHRvIGF0dGFjaCBsaXN0ZW5lci5cbiAgICogQHJldHVybiB7b2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBhIHJlbW92ZSBmdW5jdGlvbiB3aGljaCB3aWxsIGZvcmNlZnVsbHlcbiAgICogICAgICAgICAgICAgICAgICByZW1vdmUgdGhlIGxpc3RlbmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHRyYXBCdWJibGVkRXZlbnQ6IGZ1bmN0aW9uKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpIHtcbiAgICB2YXIgZWxlbWVudCA9IGhhbmRsZTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gRXZlbnRMaXN0ZW5lci5saXN0ZW4oXG4gICAgICBlbGVtZW50LFxuICAgICAgaGFuZGxlckJhc2VOYW1lLFxuICAgICAgUmVhY3RFdmVudExpc3RlbmVyLmRpc3BhdGNoRXZlbnQuYmluZChudWxsLCB0b3BMZXZlbFR5cGUpXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogVHJhcHMgYSB0b3AtbGV2ZWwgZXZlbnQgYnkgdXNpbmcgZXZlbnQgY2FwdHVyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoYW5kbGVyQmFzZU5hbWUgRXZlbnQgbmFtZSAoZS5nLiBcImNsaWNrXCIpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gaGFuZGxlIEVsZW1lbnQgb24gd2hpY2ggdG8gYXR0YWNoIGxpc3RlbmVyLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IEFuIG9iamVjdCB3aXRoIGEgcmVtb3ZlIGZ1bmN0aW9uIHdoaWNoIHdpbGwgZm9yY2VmdWxseVxuICAgKiAgICAgICAgICAgICAgICAgIHJlbW92ZSB0aGUgbGlzdGVuZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJhcENhcHR1cmVkRXZlbnQ6IGZ1bmN0aW9uKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpIHtcbiAgICB2YXIgZWxlbWVudCA9IGhhbmRsZTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gRXZlbnRMaXN0ZW5lci5jYXB0dXJlKFxuICAgICAgZWxlbWVudCxcbiAgICAgIGhhbmRsZXJCYXNlTmFtZSxcbiAgICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5kaXNwYXRjaEV2ZW50LmJpbmQobnVsbCwgdG9wTGV2ZWxUeXBlKVxuICAgICk7XG4gIH0sXG5cbiAgbW9uaXRvclNjcm9sbFZhbHVlOiBmdW5jdGlvbihyZWZyZXNoKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gc2Nyb2xsVmFsdWVNb25pdG9yLmJpbmQobnVsbCwgcmVmcmVzaCk7XG4gICAgRXZlbnRMaXN0ZW5lci5saXN0ZW4od2luZG93LCAnc2Nyb2xsJywgY2FsbGJhY2spO1xuICB9LFxuXG4gIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgICBpZiAoIVJlYWN0RXZlbnRMaXN0ZW5lci5fZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBib29rS2VlcGluZyA9IFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZy5nZXRQb29sZWQoXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEV2ZW50IHF1ZXVlIGJlaW5nIHByb2Nlc3NlZCBpbiB0aGUgc2FtZSBjeWNsZSBhbGxvd3NcbiAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdGAuXG4gICAgICBSZWFjdFVwZGF0ZXMuYmF0Y2hlZFVwZGF0ZXMoaGFuZGxlVG9wTGV2ZWxJbXBsLCBib29rS2VlcGluZyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZy5yZWxlYXNlKGJvb2tLZWVwaW5nKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFdmVudExpc3RlbmVyO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4qIEBwcm92aWRlc01vZHVsZSBSZWFjdEZyYWdtZW50XG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuLyoqXG4gKiBXZSB1c2VkIHRvIGFsbG93IGtleWVkIG9iamVjdHMgdG8gc2VydmUgYXMgYSBjb2xsZWN0aW9uIG9mIFJlYWN0RWxlbWVudHMsXG4gKiBvciBuZXN0ZWQgc2V0cy4gVGhpcyBhbGxvd2VkIHVzIGEgd2F5IHRvIGV4cGxpY2l0bHkga2V5IGEgc2V0IGEgZnJhZ21lbnQgb2ZcbiAqIGNvbXBvbmVudHMuIFRoaXMgaXMgbm93IGJlaW5nIHJlcGxhY2VkIHdpdGggYW4gb3BhcXVlIGRhdGEgc3RydWN0dXJlLlxuICogVGhlIHVwZ3JhZGUgcGF0aCBpcyB0byBjYWxsIFJlYWN0LmFkZG9ucy5jcmVhdGVGcmFnbWVudCh7IGtleTogdmFsdWUgfSkgdG9cbiAqIGNyZWF0ZSBhIGtleWVkIGZyYWdtZW50LiBUaGUgcmVzdWx0aW5nIGRhdGEgc3RydWN0dXJlIGlzIG9wYXF1ZSwgZm9yIG5vdy5cbiAqL1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIHZhciBmcmFnbWVudEtleSA9ICdfcmVhY3RGcmFnbWVudCc7XG4gIHZhciBkaWRXYXJuS2V5ID0gJ19yZWFjdERpZFdhcm4nO1xuICB2YXIgY2FuV2FybkZvclJlYWN0RnJhZ21lbnQgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIC8vIEZlYXR1cmUgdGVzdC4gRG9uJ3QgZXZlbiB0cnkgdG8gaXNzdWUgdGhpcyB3YXJuaW5nIGlmIHdlIGNhbid0IHVzZVxuICAgIC8vIGVudW1lcmFibGU6IGZhbHNlLlxuXG4gICAgdmFyIGR1bW15ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAge30sXG4gICAgICBmcmFnbWVudEtleSxcbiAgICAgIHtlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWV9XG4gICAgKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgIHt9LFxuICAgICAgJ2tleScsXG4gICAgICB7ZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkdW1teX1cbiAgICApO1xuXG4gICAgY2FuV2FybkZvclJlYWN0RnJhZ21lbnQgPSB0cnVlO1xuICB9IGNhdGNoICh4KSB7IH1cblxuICB2YXIgcHJveHlQcm9wZXJ0eUFjY2Vzc1dpdGhXYXJuaW5nID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICB0aGlzW2RpZFdhcm5LZXldLFxuICAgICAgICAgICdBIFJlYWN0RnJhZ21lbnQgaXMgYW4gb3BhcXVlIHR5cGUuIEFjY2Vzc2luZyBhbnkgb2YgaXRzICcgK1xuICAgICAgICAgICdwcm9wZXJ0aWVzIGlzIGRlcHJlY2F0ZWQuIFBhc3MgaXQgdG8gb25lIG9mIHRoZSBSZWFjdC5DaGlsZHJlbiAnICtcbiAgICAgICAgICAnaGVscGVycy4nXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgdGhpc1tkaWRXYXJuS2V5XSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzW2ZyYWdtZW50S2V5XVtrZXldO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgdGhpc1tkaWRXYXJuS2V5XSxcbiAgICAgICAgICAnQSBSZWFjdEZyYWdtZW50IGlzIGFuIGltbXV0YWJsZSBvcGFxdWUgdHlwZS4gTXV0YXRpbmcgaXRzICcgK1xuICAgICAgICAgICdwcm9wZXJ0aWVzIGlzIGRlcHJlY2F0ZWQuJ1xuICAgICAgICApIDogbnVsbCk7XG4gICAgICAgIHRoaXNbZGlkV2FybktleV0gPSB0cnVlO1xuICAgICAgICB0aGlzW2ZyYWdtZW50S2V5XVtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIGlzc3VlZFdhcm5pbmdzID0ge307XG5cbiAgdmFyIGRpZFdhcm5Gb3JGcmFnbWVudCA9IGZ1bmN0aW9uKGZyYWdtZW50KSB7XG4gICAgLy8gV2UgdXNlIHRoZSBrZXlzIGFuZCB0aGUgdHlwZSBvZiB0aGUgdmFsdWUgYXMgYSBoZXVyaXN0aWMgdG8gZGVkdXBlIHRoZVxuICAgIC8vIHdhcm5pbmcgdG8gYXZvaWQgc3BhbW1pbmcgdG9vIG11Y2guXG4gICAgdmFyIGZyYWdtZW50Q2FjaGVLZXkgPSAnJztcbiAgICBmb3IgKHZhciBrZXkgaW4gZnJhZ21lbnQpIHtcbiAgICAgIGZyYWdtZW50Q2FjaGVLZXkgKz0ga2V5ICsgJzonICsgKHR5cGVvZiBmcmFnbWVudFtrZXldKSArICcsJztcbiAgICB9XG4gICAgdmFyIGFscmVhZHlXYXJuZWRPbmNlID0gISFpc3N1ZWRXYXJuaW5nc1tmcmFnbWVudENhY2hlS2V5XTtcbiAgICBpc3N1ZWRXYXJuaW5nc1tmcmFnbWVudENhY2hlS2V5XSA9IHRydWU7XG4gICAgcmV0dXJuIGFscmVhZHlXYXJuZWRPbmNlO1xuICB9O1xufVxuXG52YXIgUmVhY3RGcmFnbWVudCA9IHtcbiAgLy8gV3JhcCBhIGtleWVkIG9iamVjdCBpbiBhbiBvcGFxdWUgcHJveHkgdGhhdCB3YXJucyB5b3UgaWYgeW91IGFjY2VzcyBhbnlcbiAgLy8gb2YgaXRzIHByb3BlcnRpZXMuXG4gIGNyZWF0ZTogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgaWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnIHx8ICFvYmplY3QgfHwgQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICdSZWFjdC5hZGRvbnMuY3JlYXRlRnJhZ21lbnQgb25seSBhY2NlcHRzIGEgc2luZ2xlIG9iamVjdC4nLFxuICAgICAgICAgIG9iamVjdFxuICAgICAgICApIDogbnVsbCk7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9XG4gICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KG9iamVjdCkpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgJ1JlYWN0LmFkZG9ucy5jcmVhdGVGcmFnbWVudCBkb2VzIG5vdCBhY2NlcHQgYSBSZWFjdEVsZW1lbnQgJyArXG4gICAgICAgICAgJ3dpdGhvdXQgYSB3cmFwcGVyIG9iamVjdC4nXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICAgIGlmIChjYW5XYXJuRm9yUmVhY3RGcmFnbWVudCkge1xuICAgICAgICB2YXIgcHJveHkgPSB7fTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBmcmFnbWVudEtleSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiBvYmplY3RcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgZGlkV2FybktleSwge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIHByb3h5UHJvcGVydHlBY2Nlc3NXaXRoV2FybmluZyhwcm94eSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMocHJveHkpO1xuICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0sXG4gIC8vIEV4dHJhY3QgdGhlIG9yaWdpbmFsIGtleWVkIG9iamVjdCBmcm9tIHRoZSBmcmFnbWVudCBvcGFxdWUgdHlwZS4gV2FybiBpZlxuICAvLyBhIHBsYWluIG9iamVjdCBpcyBwYXNzZWQgaGVyZS5cbiAgZXh0cmFjdDogZnVuY3Rpb24oZnJhZ21lbnQpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBpZiAoY2FuV2FybkZvclJlYWN0RnJhZ21lbnQpIHtcbiAgICAgICAgaWYgKCFmcmFnbWVudFtmcmFnbWVudEtleV0pIHtcbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICAgIGRpZFdhcm5Gb3JGcmFnbWVudChmcmFnbWVudCksXG4gICAgICAgICAgICAnQW55IHVzZSBvZiBhIGtleWVkIG9iamVjdCBzaG91bGQgYmUgd3JhcHBlZCBpbiAnICtcbiAgICAgICAgICAgICdSZWFjdC5hZGRvbnMuY3JlYXRlRnJhZ21lbnQob2JqZWN0KSBiZWZvcmUgYmVpbmcgcGFzc2VkIGFzIGEgJyArXG4gICAgICAgICAgICAnY2hpbGQuJ1xuICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZyYWdtZW50W2ZyYWdtZW50S2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9LFxuICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZnJhZ21lbnQgYW5kIGlmIHNvLCBleHRyYWN0IHRoZSBrZXllZCBvYmplY3QuIElmIGl0XG4gIC8vIGlzIGEgZnJhZ21lbnQtbGlrZSBvYmplY3QsIHdhcm4gdGhhdCBpdCBzaG91bGQgYmUgd3JhcHBlZC4gSWdub3JlIGlmIHdlXG4gIC8vIGNhbid0IGRldGVybWluZSB3aGF0IGtpbmQgb2Ygb2JqZWN0IHRoaXMgaXMuXG4gIGV4dHJhY3RJZkZyYWdtZW50OiBmdW5jdGlvbihmcmFnbWVudCkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIGlmIChjYW5XYXJuRm9yUmVhY3RGcmFnbWVudCkge1xuICAgICAgICAvLyBJZiBpdCBpcyB0aGUgb3BhcXVlIHR5cGUsIHJldHVybiB0aGUga2V5ZWQgb2JqZWN0LlxuICAgICAgICBpZiAoZnJhZ21lbnRbZnJhZ21lbnRLZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGZyYWdtZW50W2ZyYWdtZW50S2V5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlcndpc2UsIGNoZWNrIGVhY2ggcHJvcGVydHkgaWYgaXQgaGFzIGFuIGVsZW1lbnQsIGlmIGl0IGRvZXNcbiAgICAgICAgLy8gaXQgaXMgcHJvYmFibHkgbWVhbnQgYXMgYSBmcmFnbWVudCwgc28gd2UgY2FuIHdhcm4gZWFybHkuIERlZmVyLFxuICAgICAgICAvLyB0aGUgd2FybmluZyB0byBleHRyYWN0LlxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZnJhZ21lbnQpIHtcbiAgICAgICAgICBpZiAoZnJhZ21lbnQuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoZnJhZ21lbnRba2V5XSkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIGZyYWdtZW50IG9iamVjdCwgd2Ugc2hvdWxkIHByb3ZpZGUgYW5cbiAgICAgICAgICAgIC8vIGVhcmx5IHdhcm5pbmcuXG4gICAgICAgICAgICByZXR1cm4gUmVhY3RGcmFnbWVudC5leHRyYWN0KGZyYWdtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RnJhZ21lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSR2NtRm5iV1Z1ZEM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaW9nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFJuSmhaMjFsYm5SY2Jpb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGSmxZV04wUld4bGJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRndpS1R0Y2JseHVkbUZ5SUhkaGNtNXBibWNnUFNCeVpYRjFhWEpsS0Z3aUxpOTNZWEp1YVc1blhDSXBPMXh1WEc0dktpcGNiaUFxSUZkbElIVnpaV1FnZEc4Z1lXeHNiM2NnYTJWNVpXUWdiMkpxWldOMGN5QjBieUJ6WlhKMlpTQmhjeUJoSUdOdmJHeGxZM1JwYjI0Z2IyWWdVbVZoWTNSRmJHVnRaVzUwY3l4Y2JpQXFJRzl5SUc1bGMzUmxaQ0J6WlhSekxpQlVhR2x6SUdGc2JHOTNaV1FnZFhNZ1lTQjNZWGtnZEc4Z1pYaHdiR2xqYVhSc2VTQnJaWGtnWVNCelpYUWdZU0JtY21GbmJXVnVkQ0J2Wmx4dUlDb2dZMjl0Y0c5dVpXNTBjeTRnVkdocGN5QnBjeUJ1YjNjZ1ltVnBibWNnY21Wd2JHRmpaV1FnZDJsMGFDQmhiaUJ2Y0dGeGRXVWdaR0YwWVNCemRISjFZM1IxY21VdVhHNGdLaUJVYUdVZ2RYQm5jbUZrWlNCd1lYUm9JR2x6SUhSdklHTmhiR3dnVW1WaFkzUXVZV1JrYjI1ekxtTnlaV0YwWlVaeVlXZHRaVzUwS0hzZ2EyVjVPaUIyWVd4MVpTQjlLU0IwYjF4dUlDb2dZM0psWVhSbElHRWdhMlY1WldRZ1puSmhaMjFsYm5RdUlGUm9aU0J5WlhOMWJIUnBibWNnWkdGMFlTQnpkSEoxWTNSMWNtVWdhWE1nYjNCaGNYVmxMQ0JtYjNJZ2JtOTNMbHh1SUNvdlhHNWNibWxtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ2RtRnlJR1p5WVdkdFpXNTBTMlY1SUQwZ0oxOXlaV0ZqZEVaeVlXZHRaVzUwSnp0Y2JpQWdkbUZ5SUdScFpGZGhjbTVMWlhrZ1BTQW5YM0psWVdOMFJHbGtWMkZ5YmljN1hHNGdJSFpoY2lCallXNVhZWEp1Um05eVVtVmhZM1JHY21GbmJXVnVkQ0E5SUdaaGJITmxPMXh1WEc0Z0lIUnllU0I3WEc0Z0lDQWdMeThnUm1WaGRIVnlaU0IwWlhOMExpQkViMjRuZENCbGRtVnVJSFJ5ZVNCMGJ5QnBjM04xWlNCMGFHbHpJSGRoY201cGJtY2dhV1lnZDJVZ1kyRnVKM1FnZFhObFhHNGdJQ0FnTHk4Z1pXNTFiV1Z5WVdKc1pUb2dabUZzYzJVdVhHNWNiaUFnSUNCMllYSWdaSFZ0YlhrZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQXhPMXh1SUNBZ0lIMDdYRzVjYmlBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvWEc0Z0lDQWdJQ0I3ZlN4Y2JpQWdJQ0FnSUdaeVlXZHRaVzUwUzJWNUxGeHVJQ0FnSUNBZ2UyVnVkVzFsY21GaWJHVTZJR1poYkhObExDQjJZV3gxWlRvZ2RISjFaWDFjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0Z4dUlDQWdJQ0FnZTMwc1hHNGdJQ0FnSUNBbmEyVjVKeXhjYmlBZ0lDQWdJSHRsYm5WdFpYSmhZbXhsT2lCMGNuVmxMQ0JuWlhRNklHUjFiVzE1ZlZ4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0JqWVc1WFlYSnVSbTl5VW1WaFkzUkdjbUZuYldWdWRDQTlJSFJ5ZFdVN1hHNGdJSDBnWTJGMFkyZ2dLSGdwSUhzZ2ZWeHVYRzRnSUhaaGNpQndjbTk0ZVZCeWIzQmxjblI1UVdOalpYTnpWMmwwYUZkaGNtNXBibWNnUFNCbWRXNWpkR2x2Ymlodlltb3NJR3RsZVNrZ2UxeHVJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaHZZbW9zSUd0bGVTd2dlMXh1SUNBZ0lDQWdaVzUxYldWeVlXSnNaVG9nZEhKMVpTeGNiaUFnSUNBZ0lHZGxkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE5iWkdsa1YyRnlia3RsZVYwc1hHNGdJQ0FnSUNBZ0lDQWdKMEVnVW1WaFkzUkdjbUZuYldWdWRDQnBjeUJoYmlCdmNHRnhkV1VnZEhsd1pTNGdRV05qWlhOemFXNW5JR0Z1ZVNCdlppQnBkSE1nSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM0J5YjNCbGNuUnBaWE1nYVhNZ1pHVndjbVZqWVhSbFpDNGdVR0Z6Y3lCcGRDQjBieUJ2Ym1VZ2IyWWdkR2hsSUZKbFlXTjBMa05vYVd4a2NtVnVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZG9aV3h3WlhKekxpZGNiaUFnSUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdJQ0IwYUdselcyUnBaRmRoY201TFpYbGRJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE5iWm5KaFoyMWxiblJMWlhsZFcydGxlVjA3WEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnYzJWME9pQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lDQjBhR2x6VzJScFpGZGhjbTVMWlhsZExGeHVJQ0FnSUNBZ0lDQWdJQ2RCSUZKbFlXTjBSbkpoWjIxbGJuUWdhWE1nWVc0Z2FXMXRkWFJoWW14bElHOXdZWEYxWlNCMGVYQmxMaUJOZFhSaGRHbHVaeUJwZEhNZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjNCeWIzQmxjblJwWlhNZ2FYTWdaR1Z3Y21WallYUmxaQzRuWEc0Z0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjMXRrYVdSWFlYSnVTMlY1WFNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUhSb2FYTmJabkpoWjIxbGJuUkxaWGxkVzJ0bGVWMGdQU0IyWVd4MVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUtUdGNiaUFnZlR0Y2JseHVJQ0IyWVhJZ2FYTnpkV1ZrVjJGeWJtbHVaM01nUFNCN2ZUdGNibHh1SUNCMllYSWdaR2xrVjJGeWJrWnZja1p5WVdkdFpXNTBJRDBnWm5WdVkzUnBiMjRvWm5KaFoyMWxiblFwSUh0Y2JpQWdJQ0F2THlCWFpTQjFjMlVnZEdobElHdGxlWE1nWVc1a0lIUm9aU0IwZVhCbElHOW1JSFJvWlNCMllXeDFaU0JoY3lCaElHaGxkWEpwYzNScFl5QjBieUJrWldSMWNHVWdkR2hsWEc0Z0lDQWdMeThnZDJGeWJtbHVaeUIwYnlCaGRtOXBaQ0J6Y0dGdGJXbHVaeUIwYjI4Z2JYVmphQzVjYmlBZ0lDQjJZWElnWm5KaFoyMWxiblJEWVdOb1pVdGxlU0E5SUNjbk8xeHVJQ0FnSUdadmNpQW9kbUZ5SUd0bGVTQnBiaUJtY21GbmJXVnVkQ2tnZTF4dUlDQWdJQ0FnWm5KaFoyMWxiblJEWVdOb1pVdGxlU0FyUFNCclpYa2dLeUFuT2ljZ0t5QW9kSGx3Wlc5bUlHWnlZV2R0Wlc1MFcydGxlVjBwSUNzZ0p5d25PMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdZV3h5WldGa2VWZGhjbTVsWkU5dVkyVWdQU0FoSVdsemMzVmxaRmRoY201cGJtZHpXMlp5WVdkdFpXNTBRMkZqYUdWTFpYbGRPMXh1SUNBZ0lHbHpjM1ZsWkZkaGNtNXBibWR6VzJaeVlXZHRaVzUwUTJGamFHVkxaWGxkSUQwZ2RISjFaVHRjYmlBZ0lDQnlaWFIxY200Z1lXeHlaV0ZrZVZkaGNtNWxaRTl1WTJVN1hHNGdJSDA3WEc1OVhHNWNiblpoY2lCU1pXRmpkRVp5WVdkdFpXNTBJRDBnZTF4dUlDQXZMeUJYY21Gd0lHRWdhMlY1WldRZ2IySnFaV04wSUdsdUlHRnVJRzl3WVhGMVpTQndjbTk0ZVNCMGFHRjBJSGRoY201eklIbHZkU0JwWmlCNWIzVWdZV05qWlhOeklHRnVlVnh1SUNBdkx5QnZaaUJwZEhNZ2NISnZjR1Z5ZEdsbGN5NWNiaUFnWTNKbFlYUmxPaUJtZFc1amRHbHZiaWh2WW1wbFkzUXBJSHRjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYW1WamRDQWhQVDBnSjI5aWFtVmpkQ2NnZkh3Z0lXOWlhbVZqZENCOGZDQkJjbkpoZVM1cGMwRnljbUY1S0c5aWFtVmpkQ2twSUh0Y2JpQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ0oxSmxZV04wTG1Ga1pHOXVjeTVqY21WaGRHVkdjbUZuYldWdWRDQnZibXg1SUdGalkyVndkSE1nWVNCemFXNW5iR1VnYjJKcVpXTjBMaWNzWEc0Z0lDQWdJQ0FnSUNBZ2IySnFaV04wWEc0Z0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUc5aWFtVmpkRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoU1pXRmpkRVZzWlcxbGJuUXVhWE5XWVd4cFpFVnNaVzFsYm5Rb2IySnFaV04wS1NrZ2UxeHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQW5VbVZoWTNRdVlXUmtiMjV6TG1OeVpXRjBaVVp5WVdkdFpXNTBJR1J2WlhNZ2JtOTBJR0ZqWTJWd2RDQmhJRkpsWVdOMFJXeGxiV1Z1ZENBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuZDJsMGFHOTFkQ0JoSUhkeVlYQndaWElnYjJKcVpXTjBMaWRjYmlBZ0lDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYjJKcVpXTjBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0dOaGJsZGhjbTVHYjNKU1pXRmpkRVp5WVdkdFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQndjbTk0ZVNBOUlIdDlPMXh1SUNBZ0lDQWdJQ0JQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb2NISnZlSGtzSUdaeVlXZHRaVzUwUzJWNUxDQjdYRzRnSUNBZ0lDQWdJQ0FnWlc1MWJXVnlZV0pzWlRvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ2RtRnNkV1U2SUc5aWFtVmpkRnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLSEJ5YjNoNUxDQmthV1JYWVhKdVMyVjVMQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2QzSnBkR0ZpYkdVNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNBZ1pXNTFiV1Z5WVdKc1pUb2dabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDQWdkbUZzZFdVNklHWmhiSE5sWEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnJaWGtnYVc0Z2IySnFaV04wS1NCN1hHNGdJQ0FnSUNBZ0lDQWdjSEp2ZUhsUWNtOXdaWEowZVVGalkyVnpjMWRwZEdoWFlYSnVhVzVuS0hCeWIzaDVMQ0JyWlhrcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJRTlpYW1WamRDNXdjbVYyWlc1MFJYaDBaVzV6YVc5dWN5aHdjbTk0ZVNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCd2NtOTRlVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUc5aWFtVmpkRHRjYmlBZ2ZTeGNiaUFnTHk4Z1JYaDBjbUZqZENCMGFHVWdiM0pwWjJsdVlXd2dhMlY1WldRZ2IySnFaV04wSUdaeWIyMGdkR2hsSUdaeVlXZHRaVzUwSUc5d1lYRjFaU0IwZVhCbExpQlhZWEp1SUdsbVhHNGdJQzh2SUdFZ2NHeGhhVzRnYjJKcVpXTjBJR2x6SUhCaGMzTmxaQ0JvWlhKbExseHVJQ0JsZUhSeVlXTjBPaUJtZFc1amRHbHZiaWhtY21GbmJXVnVkQ2tnZTF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJR2xtSUNoallXNVhZWEp1Um05eVVtVmhZM1JHY21GbmJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9JV1p5WVdkdFpXNTBXMlp5WVdkdFpXNTBTMlY1WFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdsa1YyRnlia1p2Y2taeVlXZHRaVzUwS0daeVlXZHRaVzUwS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2RCYm5rZ2RYTmxJRzltSUdFZ2EyVjVaV1FnYjJKcVpXTjBJSE5vYjNWc1pDQmlaU0IzY21Gd2NHVmtJR2x1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBMbUZrWkc5dWN5NWpjbVZoZEdWR2NtRm5iV1Z1ZENodlltcGxZM1FwSUdKbFptOXlaU0JpWldsdVp5QndZWE56WldRZ1lYTWdZU0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2RqYUdsc1pDNG5YRzRnSUNBZ0lDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbWNtRm5iV1Z1ZER0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1puSmhaMjFsYm5SYlpuSmhaMjFsYm5STFpYbGRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWm5KaFoyMWxiblE3WEc0Z0lIMHNYRzRnSUM4dklFTm9aV05ySUdsbUlIUm9hWE1nYVhNZ1lTQm1jbUZuYldWdWRDQmhibVFnYVdZZ2MyOHNJR1Y0ZEhKaFkzUWdkR2hsSUd0bGVXVmtJRzlpYW1WamRDNGdTV1lnYVhSY2JpQWdMeThnYVhNZ1lTQm1jbUZuYldWdWRDMXNhV3RsSUc5aWFtVmpkQ3dnZDJGeWJpQjBhR0YwSUdsMElITm9iM1ZzWkNCaVpTQjNjbUZ3Y0dWa0xpQkpaMjV2Y21VZ2FXWWdkMlZjYmlBZ0x5OGdZMkZ1SjNRZ1pHVjBaWEp0YVc1bElIZG9ZWFFnYTJsdVpDQnZaaUJ2WW1wbFkzUWdkR2hwY3lCcGN5NWNiaUFnWlhoMGNtRmpkRWxtUm5KaFoyMWxiblE2SUdaMWJtTjBhVzl1S0daeVlXZHRaVzUwS1NCN1hHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnYVdZZ0tHTmhibGRoY201R2IzSlNaV0ZqZEVaeVlXZHRaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRWxtSUdsMElHbHpJSFJvWlNCdmNHRnhkV1VnZEhsd1pTd2djbVYwZFhKdUlIUm9aU0JyWlhsbFpDQnZZbXBsWTNRdVhHNGdJQ0FnSUNBZ0lHbG1JQ2htY21GbmJXVnVkRnRtY21GbmJXVnVkRXRsZVYwcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdabkpoWjIxbGJuUmJabkpoWjIxbGJuUkxaWGxkTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHZJRTkwYUdWeWQybHpaU3dnWTJobFkyc2daV0ZqYUNCd2NtOXdaWEowZVNCcFppQnBkQ0JvWVhNZ1lXNGdaV3hsYldWdWRDd2dhV1lnYVhRZ1pHOWxjMXh1SUNBZ0lDQWdJQ0F2THlCcGRDQnBjeUJ3Y205aVlXSnNlU0J0WldGdWRDQmhjeUJoSUdaeVlXZHRaVzUwTENCemJ5QjNaU0JqWVc0Z2QyRnliaUJsWVhKc2VTNGdSR1ZtWlhJc1hHNGdJQ0FnSUNBZ0lDOHZJSFJvWlNCM1lYSnVhVzVuSUhSdklHVjRkSEpoWTNRdVhHNGdJQ0FnSUNBZ0lHWnZjaUFvZG1GeUlHdGxlU0JwYmlCbWNtRm5iV1Z1ZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNobWNtRm5iV1Z1ZEM1b1lYTlBkMjVRY205d1pYSjBlU2hyWlhrcElDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaG1jbUZuYldWdWRGdHJaWGxkS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1ZHaHBjeUJzYjI5cmN5QnNhV3RsSUdFZ1puSmhaMjFsYm5RZ2IySnFaV04wTENCM1pTQnphRzkxYkdRZ2NISnZkbWxrWlNCaGJseHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1pXRnliSGtnZDJGeWJtbHVaeTVjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCU1pXRmpkRVp5WVdkdFpXNTBMbVY0ZEhKaFkzUW9abkpoWjIxbGJuUXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdabkpoWjIxbGJuUTdYRzRnSUgxY2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkdjbUZuYldWdWREdGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEluamVjdGlvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZShcIi4vRE9NUHJvcGVydHlcIik7XG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpbkh1YlwiKTtcbnZhciBSZWFjdENvbXBvbmVudEVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbXB0eUNvbXBvbmVudFwiKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJcIik7XG52YXIgUmVhY3ROYXRpdmVDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdE5hdGl2ZUNvbXBvbmVudFwiKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NQ29tcG9uZW50XCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcbnZhciBSZWFjdFJvb3RJbmRleCA9IHJlcXVpcmUoXCIuL1JlYWN0Um9vdEluZGV4XCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIFJlYWN0SW5qZWN0aW9uID0ge1xuICBDb21wb25lbnQ6IFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQuaW5qZWN0aW9uLFxuICBDbGFzczogUmVhY3RDbGFzcy5pbmplY3Rpb24sXG4gIERPTUNvbXBvbmVudDogUmVhY3RET01Db21wb25lbnQuaW5qZWN0aW9uLFxuICBET01Qcm9wZXJ0eTogRE9NUHJvcGVydHkuaW5qZWN0aW9uLFxuICBFbXB0eUNvbXBvbmVudDogUmVhY3RFbXB0eUNvbXBvbmVudC5pbmplY3Rpb24sXG4gIEV2ZW50UGx1Z2luSHViOiBFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24sXG4gIEV2ZW50RW1pdHRlcjogUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmluamVjdGlvbixcbiAgTmF0aXZlQ29tcG9uZW50OiBSZWFjdE5hdGl2ZUNvbXBvbmVudC5pbmplY3Rpb24sXG4gIFBlcmY6IFJlYWN0UGVyZi5pbmplY3Rpb24sXG4gIFJvb3RJbmRleDogUmVhY3RSb290SW5kZXguaW5qZWN0aW9uLFxuICBVcGRhdGVzOiBSZWFjdFVwZGF0ZXMuaW5qZWN0aW9uXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5qZWN0aW9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0SW5wdXRTZWxlY3Rpb25cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdERPTVNlbGVjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NU2VsZWN0aW9uXCIpO1xuXG52YXIgY29udGFpbnNOb2RlID0gcmVxdWlyZShcIi4vY29udGFpbnNOb2RlXCIpO1xudmFyIGZvY3VzTm9kZSA9IHJlcXVpcmUoXCIuL2ZvY3VzTm9kZVwiKTtcbnZhciBnZXRBY3RpdmVFbGVtZW50ID0gcmVxdWlyZShcIi4vZ2V0QWN0aXZlRWxlbWVudFwiKTtcblxuZnVuY3Rpb24gaXNJbkRvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIGNvbnRhaW5zTm9kZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG5vZGUpO1xufVxuXG4vKipcbiAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsXG4gKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0XG4gKiBhc3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuXG4gKiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC5cbiAqL1xudmFyIFJlYWN0SW5wdXRTZWxlY3Rpb24gPSB7XG5cbiAgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOiBmdW5jdGlvbihlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0gJiYgKFxuICAgICAgKChlbGVtLm5vZGVOYW1lID09PSAnSU5QVVQnICYmIGVsZW0udHlwZSA9PT0gJ3RleHQnKSB8fFxuICAgICAgZWxlbS5ub2RlTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCBlbGVtLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKVxuICAgICk7XG4gIH0sXG5cbiAgZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb246IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZm9jdXNlZEVsZW06IGZvY3VzZWRFbGVtLFxuICAgICAgc2VsZWN0aW9uUmFuZ2U6XG4gICAgICAgICAgUmVhY3RJbnB1dFNlbGVjdGlvbi5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZm9jdXNlZEVsZW0pID9cbiAgICAgICAgICBSZWFjdElucHV0U2VsZWN0aW9uLmdldFNlbGVjdGlvbihmb2N1c2VkRWxlbSkgOlxuICAgICAgICAgIG51bGxcbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcmVzdG9yZVNlbGVjdGlvbjogSWYgYW55IHNlbGVjdGlvbiBpbmZvcm1hdGlvbiB3YXMgcG90ZW50aWFsbHkgbG9zdCxcbiAgICogcmVzdG9yZSBpdC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCByZW1vdmUgZG9tXG4gICAqIG5vZGVzIGFuZCBwbGFjZSB0aGVtIGJhY2sgaW4sIHJlc3VsdGluZyBpbiBmb2N1cyBiZWluZyBsb3N0LlxuICAgKi9cbiAgcmVzdG9yZVNlbGVjdGlvbjogZnVuY3Rpb24ocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikge1xuICAgIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB2YXIgcHJpb3JGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uZm9jdXNlZEVsZW07XG4gICAgdmFyIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJhbmdlO1xuICAgIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJlxuICAgICAgICBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIGlmIChSZWFjdElucHV0U2VsZWN0aW9uLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgICBSZWFjdElucHV0U2VsZWN0aW9uLnNldFNlbGVjdGlvbihcbiAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLFxuICAgICAgICAgIHByaW9yU2VsZWN0aW9uUmFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZvY3VzTm9kZShwcmlvckZvY3VzZWRFbGVtKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICAgKiBjb250ZW50RWRpdGFibGUgbm9kZS5cbiAgICogLUBpbnB1dDogTG9vayB1cCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXRcbiAgICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gICAqL1xuICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgdmFyIHNlbGVjdGlvbjtcblxuICAgIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgICAvLyBNb2Rlcm4gYnJvd3NlciB3aXRoIGlucHV0IG9yIHRleHRhcmVhLlxuICAgICAgc2VsZWN0aW9uID0ge1xuICAgICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGlucHV0Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAvLyBJRTggaW5wdXQuXG4gICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcbiAgICAgIC8vIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBzZWxlY3Rpb24gcGVyIGRvY3VtZW50IGluIElFLCBzbyBpdCBtdXN0XG4gICAgICAvLyBiZSBpbiBvdXIgZWxlbWVudC5cbiAgICAgIGlmIChyYW5nZS5wYXJlbnRFbGVtZW50KCkgPT09IGlucHV0KSB7XG4gICAgICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgICAgICBzdGFydDogLXJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgLWlucHV0LnZhbHVlLmxlbmd0aCksXG4gICAgICAgICAgZW5kOiAtcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgLWlucHV0LnZhbHVlLmxlbmd0aClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udGVudCBlZGl0YWJsZSBvciBvbGQgSUUgdGV4dGFyZWEuXG4gICAgICBzZWxlY3Rpb24gPSBSZWFjdERPTVNlbGVjdGlvbi5nZXRPZmZzZXRzKGlucHV0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uIHx8IHtzdGFydDogMCwgZW5kOiAwfTtcbiAgfSxcblxuICAvKipcbiAgICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9yIGlucHV0IGFuZCBmb2N1c2VzXG4gICAqIHRoZSBpbnB1dC5cbiAgICogLUBpbnB1dCAgICAgU2V0IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0YXJlYVxuICAgKiAtQG9mZnNldHMgICBPYmplY3Qgb2Ygc2FtZSBmb3JtIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBnZXQqXG4gICAqL1xuICBzZXRTZWxlY3Rpb246IGZ1bmN0aW9uKGlucHV0LCBvZmZzZXRzKSB7XG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQ7XG4gICAgaWYgKHR5cGVvZiBlbmQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICB9XG5cbiAgICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKGVuZCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBpbnB1dC5ub2RlTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgdmFyIHJhbmdlID0gaW5wdXQuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpO1xuICAgICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kIC0gc3RhcnQpO1xuICAgICAgcmFuZ2Uuc2VsZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RE9NU2VsZWN0aW9uLnNldE9mZnNldHMoaW5wdXQsIG9mZnNldHMpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdElucHV0U2VsZWN0aW9uO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEluc3RhbmNlSGFuZGxlc1xuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFJvb3RJbmRleCA9IHJlcXVpcmUoXCIuL1JlYWN0Um9vdEluZGV4XCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG52YXIgU0VQQVJBVE9SID0gJy4nO1xudmFyIFNFUEFSQVRPUl9MRU5HVEggPSBTRVBBUkFUT1IubGVuZ3RoO1xuXG4vKipcbiAqIE1heGltdW0gZGVwdGggb2YgdHJhdmVyc2FscyBiZWZvcmUgd2UgY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIGEgYmFkIElELlxuICovXG52YXIgTUFYX1RSRUVfREVQVEggPSAxMDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIERPTSBJRCBwcmVmaXggdG8gdXNlIHdoZW4gbW91bnRpbmcgUmVhY3QgY29tcG9uZW50cy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggQSB1bmlxdWUgaW50ZWdlclxuICogQHJldHVybiB7c3RyaW5nfSBSZWFjdCByb290IElELlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdElEU3RyaW5nKGluZGV4KSB7XG4gIHJldHVybiBTRVBBUkFUT1IgKyBpbmRleC50b1N0cmluZygzNik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgY2hhcmFjdGVyIGluIHRoZSBzdXBwbGllZCBJRCBpcyBhIHNlcGFyYXRvciBvciB0aGUgZW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBBIFJlYWN0IERPTSBJRC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBvZiB0aGUgY2hhcmFjdGVyIHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGlzIGEgc2VwYXJhdG9yIG9yIGVuZCBvZiB0aGUgSUQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc0JvdW5kYXJ5KGlkLCBpbmRleCkge1xuICByZXR1cm4gaWQuY2hhckF0KGluZGV4KSA9PT0gU0VQQVJBVE9SIHx8IGluZGV4ID09PSBpZC5sZW5ndGg7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBzdXBwbGllZCBzdHJpbmcgaXMgYSB2YWxpZCBSZWFjdCBET00gSUQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIEEgUmVhY3QgRE9NIElELCBtYXliZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIFJlYWN0IERPTSBJRC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRJRChpZCkge1xuICByZXR1cm4gaWQgPT09ICcnIHx8IChcbiAgICBpZC5jaGFyQXQoMCkgPT09IFNFUEFSQVRPUiAmJiBpZC5jaGFyQXQoaWQubGVuZ3RoIC0gMSkgIT09IFNFUEFSQVRPUlxuICApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZmlyc3QgSUQgaXMgYW4gYW5jZXN0b3Igb2Ygb3IgZXF1YWwgdG8gdGhlIHNlY29uZCBJRC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYW5jZXN0b3JJRFxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NlbmRhbnRJRFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgYW5jZXN0b3JJRGAgaXMgYW4gYW5jZXN0b3Igb2YgYGRlc2NlbmRhbnRJRGAuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNBbmNlc3RvcklET2YoYW5jZXN0b3JJRCwgZGVzY2VuZGFudElEKSB7XG4gIHJldHVybiAoXG4gICAgZGVzY2VuZGFudElELmluZGV4T2YoYW5jZXN0b3JJRCkgPT09IDAgJiZcbiAgICBpc0JvdW5kYXJ5KGRlc2NlbmRhbnRJRCwgYW5jZXN0b3JJRC5sZW5ndGgpXG4gICk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcGFyZW50IElEIG9mIHRoZSBzdXBwbGllZCBSZWFjdCBET00gSUQsIGBpZGAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIGEgY29tcG9uZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBJRCBvZiB0aGUgcGFyZW50LCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnRJRChpZCkge1xuICByZXR1cm4gaWQgPyBpZC5zdWJzdHIoMCwgaWQubGFzdEluZGV4T2YoU0VQQVJBVE9SKSkgOiAnJztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IERPTSBJRCBvbiB0aGUgdHJlZSBwYXRoIGZyb20gdGhlIHN1cHBsaWVkIGBhbmNlc3RvcklEYCB0byB0aGVcbiAqIHN1cHBsaWVkIGBkZXN0aW5hdGlvbklEYC4gSWYgdGhleSBhcmUgZXF1YWwsIHRoZSBJRCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYW5jZXN0b3JJRCBJRCBvZiBhbiBhbmNlc3RvciBub2RlIG9mIGBkZXN0aW5hdGlvbklEYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbklEIElEIG9mIHRoZSBkZXN0aW5hdGlvbiBub2RlLlxuICogQHJldHVybiB7c3RyaW5nfSBOZXh0IElEIG9uIHRoZSBwYXRoIGZyb20gYGFuY2VzdG9ySURgIHRvIGBkZXN0aW5hdGlvbklEYC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldE5leHREZXNjZW5kYW50SUQoYW5jZXN0b3JJRCwgZGVzdGluYXRpb25JRCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGlzVmFsaWRJRChhbmNlc3RvcklEKSAmJiBpc1ZhbGlkSUQoZGVzdGluYXRpb25JRCksXG4gICAgJ2dldE5leHREZXNjZW5kYW50SUQoJXMsICVzKTogUmVjZWl2ZWQgYW4gaW52YWxpZCBSZWFjdCBET00gSUQuJyxcbiAgICBhbmNlc3RvcklELFxuICAgIGRlc3RpbmF0aW9uSURcbiAgKSA6IGludmFyaWFudChpc1ZhbGlkSUQoYW5jZXN0b3JJRCkgJiYgaXNWYWxpZElEKGRlc3RpbmF0aW9uSUQpKSk7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgaXNBbmNlc3RvcklET2YoYW5jZXN0b3JJRCwgZGVzdGluYXRpb25JRCksXG4gICAgJ2dldE5leHREZXNjZW5kYW50SUQoLi4uKTogUmVhY3QgaGFzIG1hZGUgYW4gaW52YWxpZCBhc3N1bXB0aW9uIGFib3V0ICcgK1xuICAgICd0aGUgRE9NIGhpZXJhcmNoeS4gRXhwZWN0ZWQgYCVzYCB0byBiZSBhbiBhbmNlc3RvciBvZiBgJXNgLicsXG4gICAgYW5jZXN0b3JJRCxcbiAgICBkZXN0aW5hdGlvbklEXG4gICkgOiBpbnZhcmlhbnQoaXNBbmNlc3RvcklET2YoYW5jZXN0b3JJRCwgZGVzdGluYXRpb25JRCkpKTtcbiAgaWYgKGFuY2VzdG9ySUQgPT09IGRlc3RpbmF0aW9uSUQpIHtcbiAgICByZXR1cm4gYW5jZXN0b3JJRDtcbiAgfVxuICAvLyBTa2lwIG92ZXIgdGhlIGFuY2VzdG9yIGFuZCB0aGUgaW1tZWRpYXRlIHNlcGFyYXRvci4gVHJhdmVyc2UgdW50aWwgd2UgaGl0XG4gIC8vIGFub3RoZXIgc2VwYXJhdG9yIG9yIHdlIHJlYWNoIHRoZSBlbmQgb2YgYGRlc3RpbmF0aW9uSURgLlxuICB2YXIgc3RhcnQgPSBhbmNlc3RvcklELmxlbmd0aCArIFNFUEFSQVRPUl9MRU5HVEg7XG4gIHZhciBpO1xuICBmb3IgKGkgPSBzdGFydDsgaSA8IGRlc3RpbmF0aW9uSUQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaXNCb3VuZGFyeShkZXN0aW5hdGlvbklELCBpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZXN0aW5hdGlvbklELnN1YnN0cigwLCBpKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZWFyZXN0IGNvbW1vbiBhbmNlc3RvciBJRCBvZiB0d28gSURzLlxuICpcbiAqIFVzaW5nIHRoaXMgSUQgc2NoZW1lLCB0aGUgbmVhcmVzdCBjb21tb24gYW5jZXN0b3IgSUQgaXMgdGhlIGxvbmdlc3QgY29tbW9uXG4gKiBwcmVmaXggb2YgdGhlIHR3byBJRHMgdGhhdCBpbW1lZGlhdGVseSBwcmVjZWRlZCBhIFwibWFya2VyXCIgaW4gYm90aCBzdHJpbmdzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvbmVJRFxuICogQHBhcmFtIHtzdHJpbmd9IHR3b0lEXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5lYXJlc3QgY29tbW9uIGFuY2VzdG9yIElELCBvciB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vbmUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQob25lSUQsIHR3b0lEKSB7XG4gIHZhciBtaW5MZW5ndGggPSBNYXRoLm1pbihvbmVJRC5sZW5ndGgsIHR3b0lELmxlbmd0aCk7XG4gIGlmIChtaW5MZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgdmFyIGxhc3RDb21tb25NYXJrZXJJbmRleCA9IDA7XG4gIC8vIFVzZSBgPD1gIHRvIHRyYXZlcnNlIHVudGlsIHRoZSBcIkVPTFwiIG9mIHRoZSBzaG9ydGVyIHN0cmluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbWluTGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaXNCb3VuZGFyeShvbmVJRCwgaSkgJiYgaXNCb3VuZGFyeSh0d29JRCwgaSkpIHtcbiAgICAgIGxhc3RDb21tb25NYXJrZXJJbmRleCA9IGk7XG4gICAgfSBlbHNlIGlmIChvbmVJRC5jaGFyQXQoaSkgIT09IHR3b0lELmNoYXJBdChpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHZhciBsb25nZXN0Q29tbW9uSUQgPSBvbmVJRC5zdWJzdHIoMCwgbGFzdENvbW1vbk1hcmtlckluZGV4KTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBpc1ZhbGlkSUQobG9uZ2VzdENvbW1vbklEKSxcbiAgICAnZ2V0Rmlyc3RDb21tb25BbmNlc3RvcklEKCVzLCAlcyk6IEV4cGVjdGVkIGEgdmFsaWQgUmVhY3QgRE9NIElEOiAlcycsXG4gICAgb25lSUQsXG4gICAgdHdvSUQsXG4gICAgbG9uZ2VzdENvbW1vbklEXG4gICkgOiBpbnZhcmlhbnQoaXNWYWxpZElEKGxvbmdlc3RDb21tb25JRCkpKTtcbiAgcmV0dXJuIGxvbmdlc3RDb21tb25JRDtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgdGhlIHBhcmVudCBwYXRoIGJldHdlZW4gdHdvIElEcyAoZWl0aGVyIHVwIG9yIGRvd24pLiBUaGUgSURzIG11c3RcbiAqIG5vdCBiZSB0aGUgc2FtZSwgYW5kIHRoZXJlIG11c3QgZXhpc3QgYSBwYXJlbnQgcGF0aCBiZXR3ZWVuIHRoZW0uIElmIHRoZVxuICogY2FsbGJhY2sgcmV0dXJucyBgZmFsc2VgLCB0cmF2ZXJzYWwgaXMgc3RvcHBlZC5cbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IHN0YXJ0IElEIGF0IHdoaWNoIHRvIHN0YXJ0IHRyYXZlcnNhbC5cbiAqIEBwYXJhbSB7P3N0cmluZ30gc3RvcCBJRCBhdCB3aGljaCB0byBlbmQgdHJhdmVyc2FsLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgdG8gaW52b2tlIGVhY2ggSUQgd2l0aC5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IHNraXBGaXJzdCBXaGV0aGVyIG9yIG5vdCB0byBza2lwIHRoZSBmaXJzdCBub2RlLlxuICogQHBhcmFtIHs/Ym9vbGVhbn0gc2tpcExhc3QgV2hldGhlciBvciBub3QgdG8gc2tpcCB0aGUgbGFzdCBub2RlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VQYXJlbnRQYXRoKHN0YXJ0LCBzdG9wLCBjYiwgYXJnLCBza2lwRmlyc3QsIHNraXBMYXN0KSB7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgJyc7XG4gIHN0b3AgPSBzdG9wIHx8ICcnO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHN0YXJ0ICE9PSBzdG9wLFxuICAgICd0cmF2ZXJzZVBhcmVudFBhdGgoLi4uKTogQ2Fubm90IHRyYXZlcnNlIGZyb20gYW5kIHRvIHRoZSBzYW1lIElELCBgJXNgLicsXG4gICAgc3RhcnRcbiAgKSA6IGludmFyaWFudChzdGFydCAhPT0gc3RvcCkpO1xuICB2YXIgdHJhdmVyc2VVcCA9IGlzQW5jZXN0b3JJRE9mKHN0b3AsIHN0YXJ0KTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICB0cmF2ZXJzZVVwIHx8IGlzQW5jZXN0b3JJRE9mKHN0YXJ0LCBzdG9wKSxcbiAgICAndHJhdmVyc2VQYXJlbnRQYXRoKCVzLCAlcywgLi4uKTogQ2Fubm90IHRyYXZlcnNlIGZyb20gdHdvIElEcyB0aGF0IGRvICcgK1xuICAgICdub3QgaGF2ZSBhIHBhcmVudCBwYXRoLicsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICApIDogaW52YXJpYW50KHRyYXZlcnNlVXAgfHwgaXNBbmNlc3RvcklET2Yoc3RhcnQsIHN0b3ApKSk7XG4gIC8vIFRyYXZlcnNlIGZyb20gYHN0YXJ0YCB0byBgc3RvcGAgb25lIGRlcHRoIGF0IGEgdGltZS5cbiAgdmFyIGRlcHRoID0gMDtcbiAgdmFyIHRyYXZlcnNlID0gdHJhdmVyc2VVcCA/IGdldFBhcmVudElEIDogZ2V0TmV4dERlc2NlbmRhbnRJRDtcbiAgZm9yICh2YXIgaWQgPSBzdGFydDsgLyogdW50aWwgYnJlYWsgKi87IGlkID0gdHJhdmVyc2UoaWQsIHN0b3ApKSB7XG4gICAgdmFyIHJldDtcbiAgICBpZiAoKCFza2lwRmlyc3QgfHwgaWQgIT09IHN0YXJ0KSAmJiAoIXNraXBMYXN0IHx8IGlkICE9PSBzdG9wKSkge1xuICAgICAgcmV0ID0gY2IoaWQsIHRyYXZlcnNlVXAsIGFyZyk7XG4gICAgfVxuICAgIGlmIChyZXQgPT09IGZhbHNlIHx8IGlkID09PSBzdG9wKSB7XG4gICAgICAvLyBPbmx5IGJyZWFrIC8vYWZ0ZXIvLyB2aXNpdGluZyBgc3RvcGAuXG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGRlcHRoKysgPCBNQVhfVFJFRV9ERVBUSCxcbiAgICAgICd0cmF2ZXJzZVBhcmVudFBhdGgoJXMsICVzLCAuLi4pOiBEZXRlY3RlZCBhbiBpbmZpbml0ZSBsb29wIHdoaWxlICcgK1xuICAgICAgJ3RyYXZlcnNpbmcgdGhlIFJlYWN0IERPTSBJRCB0cmVlLiBUaGlzIG1heSBiZSBkdWUgdG8gbWFsZm9ybWVkIElEczogJXMnLFxuICAgICAgc3RhcnQsIHN0b3BcbiAgICApIDogaW52YXJpYW50KGRlcHRoKysgPCBNQVhfVFJFRV9ERVBUSCkpO1xuICB9XG59XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgSURzIGFzc2lnbmVkIHRvIERPTSByZXByZXNlbnRhdGlvbnMgb2YgUmVhY3QgY29tcG9uZW50cy4gVGhpc1xuICogdXNlcyBhIHNwZWNpZmljIHNjaGVtZSBpbiBvcmRlciB0byB0cmF2ZXJzZSB0aGUgRE9NIGVmZmljaWVudGx5IChlLmcuIGluXG4gKiBvcmRlciB0byBzaW11bGF0ZSBldmVudHMpLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSB7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBSZWFjdCByb290IElEXG4gICAqIEByZXR1cm4ge3N0cmluZ30gQSBSZWFjdCByb290IElELlxuICAgKi9cbiAgY3JlYXRlUmVhY3RSb290SUQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBnZXRSZWFjdFJvb3RJRFN0cmluZyhSZWFjdFJvb3RJbmRleC5jcmVhdGVSZWFjdFJvb3RJbmRleCgpKTtcbiAgfSxcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIFJlYWN0IElEIGJ5IGpvaW5pbmcgYSByb290IElEIHdpdGggYSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIFJvb3QgSUQgb2YgYSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBIGNvbXBvbmVudCdzIG5hbWUgKGFzIGZsYXR0ZW5lZCBjaGlsZHJlbikuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gQSBSZWFjdCBJRC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjcmVhdGVSZWFjdElEOiBmdW5jdGlvbihyb290SUQsIG5hbWUpIHtcbiAgICByZXR1cm4gcm9vdElEICsgbmFtZTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0cyB0aGUgRE9NIElEIG9mIHRoZSBSZWFjdCBjb21wb25lbnQgdGhhdCBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZSB0aGF0XG4gICAqIGNvbnRhaW5zIHRoZSBSZWFjdCBjb21wb25lbnQgd2l0aCB0aGUgc3VwcGxpZWQgRE9NIElELlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgRE9NIElEIG9mIGEgUmVhY3QgY29tcG9uZW50LlxuICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBET00gSUQgb2YgdGhlIFJlYWN0IGNvbXBvbmVudCB0aGF0IGlzIHRoZSByb290LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFJlYWN0Um9vdElERnJvbU5vZGVJRDogZnVuY3Rpb24oaWQpIHtcbiAgICBpZiAoaWQgJiYgaWQuY2hhckF0KDApID09PSBTRVBBUkFUT1IgJiYgaWQubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGluZGV4ID0gaWQuaW5kZXhPZihTRVBBUkFUT1IsIDEpO1xuICAgICAgcmV0dXJuIGluZGV4ID4gLTEgPyBpZC5zdWJzdHIoMCwgaW5kZXgpIDogaWQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgdGhlIElEIGhpZXJhcmNoeSBhbmQgaW52b2tlcyB0aGUgc3VwcGxpZWQgYGNiYCBvbiBhbnkgSURzIHRoYXRcbiAgICogc2hvdWxkIHdvdWxkIHJlY2VpdmUgYSBgbW91c2VFbnRlcmAgb3IgYG1vdXNlTGVhdmVgIGV2ZW50LlxuICAgKlxuICAgKiBOT1RFOiBEb2VzIG5vdCBpbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBuZWFyZXN0IGNvbW1vbiBhbmNlc3RvciBiZWNhdXNlXG4gICAqIG5vdGhpbmcgXCJlbnRlcmVkXCIgb3IgXCJsZWZ0XCIgdGhhdCBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGVhdmVJRCBJRCBiZWluZyBsZWZ0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW50ZXJJRCBJRCBiZWluZyBlbnRlcmVkLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiBDYWxsYmFjayB0byBpbnZva2Ugb24gZWFjaCBlbnRlcmVkL2xlZnQgSUQuXG4gICAqIEBwYXJhbSB7Kn0gdXBBcmcgQXJndW1lbnQgdG8gaW52b2tlIHRoZSBjYWxsYmFjayB3aXRoIG9uIGxlZnQgSURzLlxuICAgKiBAcGFyYW0geyp9IGRvd25BcmcgQXJndW1lbnQgdG8gaW52b2tlIHRoZSBjYWxsYmFjayB3aXRoIG9uIGVudGVyZWQgSURzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHRyYXZlcnNlRW50ZXJMZWF2ZTogZnVuY3Rpb24obGVhdmVJRCwgZW50ZXJJRCwgY2IsIHVwQXJnLCBkb3duQXJnKSB7XG4gICAgdmFyIGFuY2VzdG9ySUQgPSBnZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQobGVhdmVJRCwgZW50ZXJJRCk7XG4gICAgaWYgKGFuY2VzdG9ySUQgIT09IGxlYXZlSUQpIHtcbiAgICAgIHRyYXZlcnNlUGFyZW50UGF0aChsZWF2ZUlELCBhbmNlc3RvcklELCBjYiwgdXBBcmcsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKGFuY2VzdG9ySUQgIT09IGVudGVySUQpIHtcbiAgICAgIHRyYXZlcnNlUGFyZW50UGF0aChhbmNlc3RvcklELCBlbnRlcklELCBjYiwgZG93bkFyZywgdHJ1ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogU2ltdWxhdGVzIHRoZSB0cmF2ZXJzYWwgb2YgYSB0d28tcGhhc2UsIGNhcHR1cmUvYnViYmxlIGV2ZW50IGRpc3BhdGNoLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIHRyYXZlcnNhbCBoYXBwZW5zIG9uIElEcyB3aXRob3V0IHRvdWNoaW5nIHRoZSBET00uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRJRCBJRCBvZiB0aGUgdGFyZ2V0IG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNiIENhbGxiYWNrIHRvIGludm9rZS5cbiAgICogQHBhcmFtIHsqfSBhcmcgQXJndW1lbnQgdG8gaW52b2tlIHRoZSBjYWxsYmFjayB3aXRoLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHRyYXZlcnNlVHdvUGhhc2U6IGZ1bmN0aW9uKHRhcmdldElELCBjYiwgYXJnKSB7XG4gICAgaWYgKHRhcmdldElEKSB7XG4gICAgICB0cmF2ZXJzZVBhcmVudFBhdGgoJycsIHRhcmdldElELCBjYiwgYXJnLCB0cnVlLCBmYWxzZSk7XG4gICAgICB0cmF2ZXJzZVBhcmVudFBhdGgodGFyZ2V0SUQsICcnLCBjYiwgYXJnLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZSBhIG5vZGUgSUQsIGNhbGxpbmcgdGhlIHN1cHBsaWVkIGBjYmAgZm9yIGVhY2ggYW5jZXN0b3IgSUQuIEZvclxuICAgKiBleGFtcGxlLCBwYXNzaW5nIGAuMC4kcm93LTAuMWAgd291bGQgcmVzdWx0IGluIGBjYmAgZ2V0dGluZyBjYWxsZWRcbiAgICogd2l0aCBgLjBgLCBgLjAuJHJvdy0wYCwgYW5kIGAuMC4kcm93LTAuMWAuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgdHJhdmVyc2FsIGhhcHBlbnMgb24gSURzIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldElEIElEIG9mIHRoZSB0YXJnZXQgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgdG8gaW52b2tlLlxuICAgKiBAcGFyYW0geyp9IGFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGguXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJhdmVyc2VBbmNlc3RvcnM6IGZ1bmN0aW9uKHRhcmdldElELCBjYiwgYXJnKSB7XG4gICAgdHJhdmVyc2VQYXJlbnRQYXRoKCcnLCB0YXJnZXRJRCwgY2IsIGFyZywgdHJ1ZSwgZmFsc2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFeHBvc2VkIGZvciB1bml0IHRlc3RpbmcuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Rmlyc3RDb21tb25BbmNlc3RvcklEOiBnZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQsXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIHVuaXQgdGVzdGluZy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXROZXh0RGVzY2VuZGFudElEOiBnZXROZXh0RGVzY2VuZGFudElELFxuXG4gIGlzQW5jZXN0b3JJRE9mOiBpc0FuY2VzdG9ySURPZixcblxuICBTRVBBUkFUT1I6IFNFUEFSQVRPUlxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkpibk4wWVc1alpVaGhibVJzWlhNdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpYRzRnS2lCQWRIbHdaV05vWldOcmN5QnpkR0YwYVdNdGIyNXNlVnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUZKbFlXTjBVbTl2ZEVsdVpHVjRJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JTYjI5MFNXNWtaWGhjSWlrN1hHNWNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiblpoY2lCVFJWQkJVa0ZVVDFJZ1BTQW5MaWM3WEc1MllYSWdVMFZRUVZKQlZFOVNYMHhGVGtkVVNDQTlJRk5GVUVGU1FWUlBVaTVzWlc1bmRHZzdYRzVjYmk4cUtseHVJQ29nVFdGNGFXMTFiU0JrWlhCMGFDQnZaaUIwY21GMlpYSnpZV3h6SUdKbFptOXlaU0IzWlNCamIyNXphV1JsY2lCMGFHVWdjRzl6YzJsaWFXeHBkSGtnYjJZZ1lTQmlZV1FnU1VRdVhHNGdLaTljYm5aaGNpQk5RVmhmVkZKRlJWOUVSVkJVU0NBOUlERXdNRHRjYmx4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdFZ1JFOU5JRWxFSUhCeVpXWnBlQ0IwYnlCMWMyVWdkMmhsYmlCdGIzVnVkR2x1WnlCU1pXRmpkQ0JqYjIxd2IyNWxiblJ6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JwYm1SbGVDQkJJSFZ1YVhGMVpTQnBiblJsWjJWeVhHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlJRkpsWVdOMElISnZiM1FnU1VRdVhHNGdLaUJBYVc1MFpYSnVZV3hjYmlBcUwxeHVablZ1WTNScGIyNGdaMlYwVW1WaFkzUlNiMjkwU1VSVGRISnBibWNvYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUZORlVFRlNRVlJQVWlBcklHbHVaR1Y0TG5SdlUzUnlhVzVuS0RNMktUdGNibjFjYmx4dUx5b3FYRzRnS2lCRGFHVmphM01nYVdZZ1lTQmphR0Z5WVdOMFpYSWdhVzRnZEdobElITjFjSEJzYVdWa0lFbEVJR2x6SUdFZ2MyVndZWEpoZEc5eUlHOXlJSFJvWlNCbGJtUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRUVnVW1WaFkzUWdSRTlOSUVsRUxseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR2x1WkdWNElFbHVaR1Y0SUc5bUlIUm9aU0JqYUdGeVlXTjBaWElnZEc4Z1kyaGxZMnN1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZTQlVjblZsSUdsbUlIUm9aU0JqYUdGeVlXTjBaWElnYVhNZ1lTQnpaWEJoY21GMGIzSWdiM0lnWlc1a0lHOW1JSFJvWlNCSlJDNWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibVoxYm1OMGFXOXVJR2x6UW05MWJtUmhjbmtvYVdRc0lHbHVaR1Y0S1NCN1hHNGdJSEpsZEhWeWJpQnBaQzVqYUdGeVFYUW9hVzVrWlhncElEMDlQU0JUUlZCQlVrRlVUMUlnZkh3Z2FXNWtaWGdnUFQwOUlHbGtMbXhsYm1kMGFEdGNibjFjYmx4dUx5b3FYRzRnS2lCRGFHVmphM01nYVdZZ2RHaGxJSE4xY0hCc2FXVmtJSE4wY21sdVp5QnBjeUJoSUhaaGJHbGtJRkpsWVdOMElFUlBUU0JKUkM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1FTQlNaV0ZqZENCRVQwMGdTVVFzSUcxaGVXSmxMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4wZ1ZISjFaU0JwWmlCMGFHVWdjM1J5YVc1bklHbHpJR0VnZG1Gc2FXUWdVbVZoWTNRZ1JFOU5JRWxFTGx4dUlDb2dRSEJ5YVhaaGRHVmNiaUFxTDF4dVpuVnVZM1JwYjI0Z2FYTldZV3hwWkVsRUtHbGtLU0I3WEc0Z0lISmxkSFZ5YmlCcFpDQTlQVDBnSnljZ2ZId2dLRnh1SUNBZ0lHbGtMbU5vWVhKQmRDZ3dLU0E5UFQwZ1UwVlFRVkpCVkU5U0lDWW1JR2xrTG1Ob1lYSkJkQ2hwWkM1c1pXNW5kR2dnTFNBeEtTQWhQVDBnVTBWUVFWSkJWRTlTWEc0Z0lDazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyaGxZMnR6SUdsbUlIUm9aU0JtYVhKemRDQkpSQ0JwY3lCaGJpQmhibU5sYzNSdmNpQnZaaUJ2Y2lCbGNYVmhiQ0IwYnlCMGFHVWdjMlZqYjI1a0lFbEVMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmhibU5sYzNSdmNrbEVYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnWkdWelkyVnVaR0Z1ZEVsRVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmU0JVY25WbElHbG1JR0JoYm1ObGMzUnZja2xFWUNCcGN5QmhiaUJoYm1ObGMzUnZjaUJ2WmlCZ1pHVnpZMlZ1WkdGdWRFbEVZQzVjYmlBcUlFQnBiblJsY201aGJGeHVJQ292WEc1bWRXNWpkR2x2YmlCcGMwRnVZMlZ6ZEc5eVNVUlBaaWhoYm1ObGMzUnZja2xFTENCa1pYTmpaVzVrWVc1MFNVUXBJSHRjYmlBZ2NtVjBkWEp1SUNoY2JpQWdJQ0JrWlhOalpXNWtZVzUwU1VRdWFXNWtaWGhQWmloaGJtTmxjM1J2Y2tsRUtTQTlQVDBnTUNBbUpseHVJQ0FnSUdselFtOTFibVJoY25rb1pHVnpZMlZ1WkdGdWRFbEVMQ0JoYm1ObGMzUnZja2xFTG14bGJtZDBhQ2xjYmlBZ0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCSFpYUnpJSFJvWlNCd1lYSmxiblFnU1VRZ2IyWWdkR2hsSUhOMWNIQnNhV1ZrSUZKbFlXTjBJRVJQVFNCSlJDd2dZR2xrWUM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1NVUWdiMllnWVNCamIyMXdiMjVsYm5RdVhHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlJRWxFSUc5bUlIUm9aU0J3WVhKbGJuUXNJRzl5SUdGdUlHVnRjSFI1SUhOMGNtbHVaeTVjYmlBcUlFQndjbWwyWVhSbFhHNGdLaTljYm1aMWJtTjBhVzl1SUdkbGRGQmhjbVZ1ZEVsRUtHbGtLU0I3WEc0Z0lISmxkSFZ5YmlCcFpDQS9JR2xrTG5OMVluTjBjaWd3TENCcFpDNXNZWE4wU1c1a1pYaFBaaWhUUlZCQlVrRlVUMUlwS1NBNklDY25PMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZGxkSE1nZEdobElHNWxlSFFnUkU5TklFbEVJRzl1SUhSb1pTQjBjbVZsSUhCaGRHZ2dabkp2YlNCMGFHVWdjM1Z3Y0d4cFpXUWdZR0Z1WTJWemRHOXlTVVJnSUhSdklIUm9aVnh1SUNvZ2MzVndjR3hwWldRZ1lHUmxjM1JwYm1GMGFXOXVTVVJnTGlCSlppQjBhR1Y1SUdGeVpTQmxjWFZoYkN3Z2RHaGxJRWxFSUdseklISmxkSFZ5Ym1Wa0xseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCaGJtTmxjM1J2Y2tsRUlFbEVJRzltSUdGdUlHRnVZMlZ6ZEc5eUlHNXZaR1VnYjJZZ1lHUmxjM1JwYm1GMGFXOXVTVVJnTGx4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHUmxjM1JwYm1GMGFXOXVTVVFnU1VRZ2IyWWdkR2hsSUdSbGMzUnBibUYwYVc5dUlHNXZaR1V1WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlFNWxlSFFnU1VRZ2IyNGdkR2hsSUhCaGRHZ2dabkp2YlNCZ1lXNWpaWE4wYjNKSlJHQWdkRzhnWUdSbGMzUnBibUYwYVc5dVNVUmdMbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWjJWMFRtVjRkRVJsYzJObGJtUmhiblJKUkNoaGJtTmxjM1J2Y2tsRUxDQmtaWE4wYVc1aGRHbHZia2xFS1NCN1hHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ2FYTldZV3hwWkVsRUtHRnVZMlZ6ZEc5eVNVUXBJQ1ltSUdselZtRnNhV1JKUkNoa1pYTjBhVzVoZEdsdmJrbEVLU3hjYmlBZ0lDQW5aMlYwVG1WNGRFUmxjMk5sYm1SaGJuUkpSQ2dsY3l3Z0pYTXBPaUJTWldObGFYWmxaQ0JoYmlCcGJuWmhiR2xrSUZKbFlXTjBJRVJQVFNCSlJDNG5MRnh1SUNBZ0lHRnVZMlZ6ZEc5eVNVUXNYRzRnSUNBZ1pHVnpkR2x1WVhScGIyNUpSRnh1SUNBcElEb2dhVzUyWVhKcFlXNTBLR2x6Vm1Gc2FXUkpSQ2hoYm1ObGMzUnZja2xFS1NBbUppQnBjMVpoYkdsa1NVUW9aR1Z6ZEdsdVlYUnBiMjVKUkNrcEtUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQnBjMEZ1WTJWemRHOXlTVVJQWmloaGJtTmxjM1J2Y2tsRUxDQmtaWE4wYVc1aGRHbHZia2xFS1N4Y2JpQWdJQ0FuWjJWMFRtVjRkRVJsYzJObGJtUmhiblJKUkNndUxpNHBPaUJTWldGamRDQm9ZWE1nYldGa1pTQmhiaUJwYm5aaGJHbGtJR0Z6YzNWdGNIUnBiMjRnWVdKdmRYUWdKeUFyWEc0Z0lDQWdKM1JvWlNCRVQwMGdhR2xsY21GeVkyaDVMaUJGZUhCbFkzUmxaQ0JnSlhOZ0lIUnZJR0psSUdGdUlHRnVZMlZ6ZEc5eUlHOW1JR0FsYzJBdUp5eGNiaUFnSUNCaGJtTmxjM1J2Y2tsRUxGeHVJQ0FnSUdSbGMzUnBibUYwYVc5dVNVUmNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaHBjMEZ1WTJWemRHOXlTVVJQWmloaGJtTmxjM1J2Y2tsRUxDQmtaWE4wYVc1aGRHbHZia2xFS1NrcE8xeHVJQ0JwWmlBb1lXNWpaWE4wYjNKSlJDQTlQVDBnWkdWemRHbHVZWFJwYjI1SlJDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCaGJtTmxjM1J2Y2tsRU8xeHVJQ0I5WEc0Z0lDOHZJRk5yYVhBZ2IzWmxjaUIwYUdVZ1lXNWpaWE4wYjNJZ1lXNWtJSFJvWlNCcGJXMWxaR2xoZEdVZ2MyVndZWEpoZEc5eUxpQlVjbUYyWlhKelpTQjFiblJwYkNCM1pTQm9hWFJjYmlBZ0x5OGdZVzV2ZEdobGNpQnpaWEJoY21GMGIzSWdiM0lnZDJVZ2NtVmhZMmdnZEdobElHVnVaQ0J2WmlCZ1pHVnpkR2x1WVhScGIyNUpSR0F1WEc0Z0lIWmhjaUJ6ZEdGeWRDQTlJR0Z1WTJWemRHOXlTVVF1YkdWdVozUm9JQ3NnVTBWUVFWSkJWRTlTWDB4RlRrZFVTRHRjYmlBZ2RtRnlJR2s3WEc0Z0lHWnZjaUFvYVNBOUlITjBZWEowT3lCcElEd2daR1Z6ZEdsdVlYUnBiMjVKUkM1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2hwYzBKdmRXNWtZWEo1S0dSbGMzUnBibUYwYVc5dVNVUXNJR2twS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHUmxjM1JwYm1GMGFXOXVTVVF1YzNWaWMzUnlLREFzSUdrcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGRITWdkR2hsSUc1bFlYSmxjM1FnWTI5dGJXOXVJR0Z1WTJWemRHOXlJRWxFSUc5bUlIUjNieUJKUkhNdVhHNGdLbHh1SUNvZ1ZYTnBibWNnZEdocGN5QkpSQ0J6WTJobGJXVXNJSFJvWlNCdVpXRnlaWE4wSUdOdmJXMXZiaUJoYm1ObGMzUnZjaUJKUkNCcGN5QjBhR1VnYkc5dVoyVnpkQ0JqYjIxdGIyNWNiaUFxSUhCeVpXWnBlQ0J2WmlCMGFHVWdkSGR2SUVsRWN5QjBhR0YwSUdsdGJXVmthV0YwWld4NUlIQnlaV05sWkdWa0lHRWdYQ0p0WVhKclpYSmNJaUJwYmlCaWIzUm9JSE4wY21sdVozTXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHOXVaVWxFWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RIZHZTVVJjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMwZ1RtVmhjbVZ6ZENCamIyMXRiMjRnWVc1alpYTjBiM0lnU1VRc0lHOXlJSFJvWlNCbGJYQjBlU0J6ZEhKcGJtY2dhV1lnYm05dVpTNWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibVoxYm1OMGFXOXVJR2RsZEVacGNuTjBRMjl0Ylc5dVFXNWpaWE4wYjNKSlJDaHZibVZKUkN3Z2RIZHZTVVFwSUh0Y2JpQWdkbUZ5SUcxcGJreGxibWQwYUNBOUlFMWhkR2d1YldsdUtHOXVaVWxFTG14bGJtZDBhQ3dnZEhkdlNVUXViR1Z1WjNSb0tUdGNiaUFnYVdZZ0tHMXBia3hsYm1kMGFDQTlQVDBnTUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUFuSnp0Y2JpQWdmVnh1SUNCMllYSWdiR0Z6ZEVOdmJXMXZiazFoY210bGNrbHVaR1Y0SUQwZ01EdGNiaUFnTHk4Z1ZYTmxJR0E4UFdBZ2RHOGdkSEpoZG1WeWMyVWdkVzUwYVd3Z2RHaGxJRndpUlU5TVhDSWdiMllnZEdobElITm9iM0owWlhJZ2MzUnlhVzVuTGx4dUlDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThQU0J0YVc1TVpXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2hwYzBKdmRXNWtZWEo1S0c5dVpVbEVMQ0JwS1NBbUppQnBjMEp2ZFc1a1lYSjVLSFIzYjBsRUxDQnBLU2tnZTF4dUlDQWdJQ0FnYkdGemRFTnZiVzF2YmsxaGNtdGxja2x1WkdWNElEMGdhVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzl1WlVsRUxtTm9ZWEpCZENocEtTQWhQVDBnZEhkdlNVUXVZMmhoY2tGMEtHa3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2RtRnlJR3h2Ym1kbGMzUkRiMjF0YjI1SlJDQTlJRzl1WlVsRUxuTjFZbk4wY2lnd0xDQnNZWE4wUTI5dGJXOXVUV0Z5YTJWeVNXNWtaWGdwTzF4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUdselZtRnNhV1JKUkNoc2IyNW5aWE4wUTI5dGJXOXVTVVFwTEZ4dUlDQWdJQ2RuWlhSR2FYSnpkRU52YlcxdmJrRnVZMlZ6ZEc5eVNVUW9KWE1zSUNWektUb2dSWGh3WldOMFpXUWdZU0IyWVd4cFpDQlNaV0ZqZENCRVQwMGdTVVE2SUNWekp5eGNiaUFnSUNCdmJtVkpSQ3hjYmlBZ0lDQjBkMjlKUkN4Y2JpQWdJQ0JzYjI1blpYTjBRMjl0Ylc5dVNVUmNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaHBjMVpoYkdsa1NVUW9iRzl1WjJWemRFTnZiVzF2YmtsRUtTa3BPMXh1SUNCeVpYUjFjbTRnYkc5dVoyVnpkRU52YlcxdmJrbEVPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGUnlZWFpsY25ObGN5QjBhR1VnY0dGeVpXNTBJSEJoZEdnZ1ltVjBkMlZsYmlCMGQyOGdTVVJ6SUNobGFYUm9aWElnZFhBZ2IzSWdaRzkzYmlrdUlGUm9aU0JKUkhNZ2JYVnpkRnh1SUNvZ2JtOTBJR0psSUhSb1pTQnpZVzFsTENCaGJtUWdkR2hsY21VZ2JYVnpkQ0JsZUdsemRDQmhJSEJoY21WdWRDQndZWFJvSUdKbGRIZGxaVzRnZEdobGJTNGdTV1lnZEdobFhHNGdLaUJqWVd4c1ltRmpheUJ5WlhSMWNtNXpJR0JtWVd4elpXQXNJSFJ5WVhabGNuTmhiQ0JwY3lCemRHOXdjR1ZrTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3UDNOMGNtbHVaMzBnYzNSaGNuUWdTVVFnWVhRZ2QyaHBZMmdnZEc4Z2MzUmhjblFnZEhKaGRtVnljMkZzTGx4dUlDb2dRSEJoY21GdElIcy9jM1J5YVc1bmZTQnpkRzl3SUVsRUlHRjBJSGRvYVdOb0lIUnZJR1Z1WkNCMGNtRjJaWEp6WVd3dVhHNGdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVmU0JqWWlCRFlXeHNZbUZqYXlCMGJ5QnBiblp2YTJVZ1pXRmphQ0JKUkNCM2FYUm9MbHh1SUNvZ1FIQmhjbUZ0SUhzL1ltOXZiR1ZoYm4wZ2MydHBjRVpwY25OMElGZG9aWFJvWlhJZ2IzSWdibTkwSUhSdklITnJhWEFnZEdobElHWnBjbk4wSUc1dlpHVXVYRzRnS2lCQWNHRnlZVzBnZXo5aWIyOXNaV0Z1ZlNCemEybHdUR0Z6ZENCWGFHVjBhR1Z5SUc5eUlHNXZkQ0IwYnlCemEybHdJSFJvWlNCc1lYTjBJRzV2WkdVdVhHNGdLaUJBY0hKcGRtRjBaVnh1SUNvdlhHNW1kVzVqZEdsdmJpQjBjbUYyWlhKelpWQmhjbVZ1ZEZCaGRHZ29jM1JoY25Rc0lITjBiM0FzSUdOaUxDQmhjbWNzSUhOcmFYQkdhWEp6ZEN3Z2MydHBjRXhoYzNRcElIdGNiaUFnYzNSaGNuUWdQU0J6ZEdGeWRDQjhmQ0FuSnp0Y2JpQWdjM1J2Y0NBOUlITjBiM0FnZkh3Z0p5YzdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdjM1JoY25RZ0lUMDlJSE4wYjNBc1hHNGdJQ0FnSjNSeVlYWmxjbk5sVUdGeVpXNTBVR0YwYUNndUxpNHBPaUJEWVc1dWIzUWdkSEpoZG1WeWMyVWdabkp2YlNCaGJtUWdkRzhnZEdobElITmhiV1VnU1VRc0lHQWxjMkF1Snl4Y2JpQWdJQ0J6ZEdGeWRGeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtITjBZWEowSUNFOVBTQnpkRzl3S1NrN1hHNGdJSFpoY2lCMGNtRjJaWEp6WlZWd0lEMGdhWE5CYm1ObGMzUnZja2xFVDJZb2MzUnZjQ3dnYzNSaGNuUXBPMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJSFJ5WVhabGNuTmxWWEFnZkh3Z2FYTkJibU5sYzNSdmNrbEVUMllvYzNSaGNuUXNJSE4wYjNBcExGeHVJQ0FnSUNkMGNtRjJaWEp6WlZCaGNtVnVkRkJoZEdnb0pYTXNJQ1Z6TENBdUxpNHBPaUJEWVc1dWIzUWdkSEpoZG1WeWMyVWdabkp2YlNCMGQyOGdTVVJ6SUhSb1lYUWdaRzhnSnlBclhHNGdJQ0FnSjI1dmRDQm9ZWFpsSUdFZ2NHRnlaVzUwSUhCaGRHZ3VKeXhjYmlBZ0lDQnpkR0Z5ZEN4Y2JpQWdJQ0J6ZEc5d1hHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2RISmhkbVZ5YzJWVmNDQjhmQ0JwYzBGdVkyVnpkRzl5U1VSUFppaHpkR0Z5ZEN3Z2MzUnZjQ2twS1R0Y2JpQWdMeThnVkhKaGRtVnljMlVnWm5KdmJTQmdjM1JoY25SZ0lIUnZJR0J6ZEc5d1lDQnZibVVnWkdWd2RHZ2dZWFFnWVNCMGFXMWxMbHh1SUNCMllYSWdaR1Z3ZEdnZ1BTQXdPMXh1SUNCMllYSWdkSEpoZG1WeWMyVWdQU0IwY21GMlpYSnpaVlZ3SUQ4Z1oyVjBVR0Z5Wlc1MFNVUWdPaUJuWlhST1pYaDBSR1Z6WTJWdVpHRnVkRWxFTzF4dUlDQm1iM0lnS0haaGNpQnBaQ0E5SUhOMFlYSjBPeUF2S2lCMWJuUnBiQ0JpY21WaGF5QXFMenNnYVdRZ1BTQjBjbUYyWlhKelpTaHBaQ3dnYzNSdmNDa3BJSHRjYmlBZ0lDQjJZWElnY21WME8xeHVJQ0FnSUdsbUlDZ29JWE5yYVhCR2FYSnpkQ0I4ZkNCcFpDQWhQVDBnYzNSaGNuUXBJQ1ltSUNnaGMydHBjRXhoYzNRZ2ZId2dhV1FnSVQwOUlITjBiM0FwS1NCN1hHNGdJQ0FnSUNCeVpYUWdQU0JqWWlocFpDd2dkSEpoZG1WeWMyVlZjQ3dnWVhKbktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tISmxkQ0E5UFQwZ1ptRnNjMlVnZkh3Z2FXUWdQVDA5SUhOMGIzQXBJSHRjYmlBZ0lDQWdJQzh2SUU5dWJIa2dZbkpsWVdzZ0x5OWhablJsY2k4dklIWnBjMmwwYVc1bklHQnpkRzl3WUM1Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnWkdWd2RHZ3JLeUE4SUUxQldGOVVVa1ZGWDBSRlVGUklMRnh1SUNBZ0lDQWdKM1J5WVhabGNuTmxVR0Z5Wlc1MFVHRjBhQ2dsY3l3Z0pYTXNJQzR1TGlrNklFUmxkR1ZqZEdWa0lHRnVJR2x1Wm1sdWFYUmxJR3h2YjNBZ2QyaHBiR1VnSnlBclhHNGdJQ0FnSUNBbmRISmhkbVZ5YzJsdVp5QjBhR1VnVW1WaFkzUWdSRTlOSUVsRUlIUnlaV1V1SUZSb2FYTWdiV0Y1SUdKbElHUjFaU0IwYnlCdFlXeG1iM0p0WldRZ1NVUnpPaUFsY3ljc1hHNGdJQ0FnSUNCemRHRnlkQ3dnYzNSdmNGeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9aR1Z3ZEdnckt5QThJRTFCV0Y5VVVrVkZYMFJGVUZSSUtTazdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJOWVc1aFoyVnpJSFJvWlNCSlJITWdZWE56YVdkdVpXUWdkRzhnUkU5TklISmxjSEpsYzJWdWRHRjBhVzl1Y3lCdlppQlNaV0ZqZENCamIyMXdiMjVsYm5SekxpQlVhR2x6WEc0Z0tpQjFjMlZ6SUdFZ2MzQmxZMmxtYVdNZ2MyTm9aVzFsSUdsdUlHOXlaR1Z5SUhSdklIUnlZWFpsY25ObElIUm9aU0JFVDAwZ1pXWm1hV05wWlc1MGJIa2dLR1V1Wnk0Z2FXNWNiaUFxSUc5eVpHVnlJSFJ2SUhOcGJYVnNZWFJsSUdWMlpXNTBjeWt1WEc0Z0tseHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpOWNiblpoY2lCU1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGN5QTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1YzNSeWRXTjBjeUJoSUZKbFlXTjBJSEp2YjNRZ1NVUmNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCQklGSmxZV04wSUhKdmIzUWdTVVF1WEc0Z0lDQXFMMXh1SUNCamNtVmhkR1ZTWldGamRGSnZiM1JKUkRvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUdkbGRGSmxZV04wVW05dmRFbEVVM1J5YVc1bktGSmxZV04wVW05dmRFbHVaR1Y0TG1OeVpXRjBaVkpsWVdOMFVtOXZkRWx1WkdWNEtDa3BPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGIyNXpkSEoxWTNSeklHRWdVbVZoWTNRZ1NVUWdZbmtnYW05cGJtbHVaeUJoSUhKdmIzUWdTVVFnZDJsMGFDQmhJRzVoYldVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnliMjkwU1VRZ1VtOXZkQ0JKUkNCdlppQmhJSEJoY21WdWRDQmpiMjF3YjI1bGJuUXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdVlXMWxJRUVnWTI5dGNHOXVaVzUwSjNNZ2JtRnRaU0FvWVhNZ1pteGhkSFJsYm1Wa0lHTm9hV3hrY21WdUtTNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCQklGSmxZV04wSUVsRUxseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHTnlaV0YwWlZKbFlXTjBTVVE2SUdaMWJtTjBhVzl1S0hKdmIzUkpSQ3dnYm1GdFpTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCeWIyOTBTVVFnS3lCdVlXMWxPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUnpJSFJvWlNCRVQwMGdTVVFnYjJZZ2RHaGxJRkpsWVdOMElHTnZiWEJ2Ym1WdWRDQjBhR0YwSUdseklIUm9aU0J5YjI5MElHOW1JSFJvWlNCMGNtVmxJSFJvWVhSY2JpQWdJQ29nWTI5dWRHRnBibk1nZEdobElGSmxZV04wSUdOdmJYQnZibVZ1ZENCM2FYUm9JSFJvWlNCemRYQndiR2xsWkNCRVQwMGdTVVF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkVUMDBnU1VRZ2IyWWdZU0JTWldGamRDQmpiMjF3YjI1bGJuUXVYRzRnSUNBcUlFQnlaWFIxY200Z2V6OXpkSEpwYm1kOUlFUlBUU0JKUkNCdlppQjBhR1VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBJSFJvWVhRZ2FYTWdkR2hsSUhKdmIzUXVYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaMlYwVW1WaFkzUlNiMjkwU1VSR2NtOXRUbTlrWlVsRU9pQm1kVzVqZEdsdmJpaHBaQ2tnZTF4dUlDQWdJR2xtSUNocFpDQW1KaUJwWkM1amFHRnlRWFFvTUNrZ1BUMDlJRk5GVUVGU1FWUlBVaUFtSmlCcFpDNXNaVzVuZEdnZ1BpQXhLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2FXNWtaWGdnUFNCcFpDNXBibVJsZUU5bUtGTkZVRUZTUVZSUFVpd2dNU2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhVzVrWlhnZ1BpQXRNU0EvSUdsa0xuTjFZbk4wY2lnd0xDQnBibVJsZUNrZ09pQnBaRHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZSeVlYWmxjbk5sY3lCMGFHVWdTVVFnYUdsbGNtRnlZMmg1SUdGdVpDQnBiblp2YTJWeklIUm9aU0J6ZFhCd2JHbGxaQ0JnWTJKZ0lHOXVJR0Z1ZVNCSlJITWdkR2hoZEZ4dUlDQWdLaUJ6YUc5MWJHUWdkMjkxYkdRZ2NtVmpaV2wyWlNCaElHQnRiM1Z6WlVWdWRHVnlZQ0J2Y2lCZ2JXOTFjMlZNWldGMlpXQWdaWFpsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRTVQVkVVNklFUnZaWE1nYm05MElHbHVkbTlyWlNCMGFHVWdZMkZzYkdKaFkyc2diMjRnZEdobElHNWxZWEpsYzNRZ1kyOXRiVzl1SUdGdVkyVnpkRzl5SUdKbFkyRjFjMlZjYmlBZ0lDb2dibTkwYUdsdVp5QmNJbVZ1ZEdWeVpXUmNJaUJ2Y2lCY0lteGxablJjSWlCMGFHRjBJR1ZzWlcxbGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JzWldGMlpVbEVJRWxFSUdKbGFXNW5JR3hsWm5RdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JsYm5SbGNrbEVJRWxFSUdKbGFXNW5JR1Z1ZEdWeVpXUXVYRzRnSUNBcUlFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlHTmlJRU5oYkd4aVlXTnJJSFJ2SUdsdWRtOXJaU0J2YmlCbFlXTm9JR1Z1ZEdWeVpXUXZiR1ZtZENCSlJDNWNiaUFnSUNvZ1FIQmhjbUZ0SUhzcWZTQjFjRUZ5WnlCQmNtZDFiV1Z1ZENCMGJ5QnBiblp2YTJVZ2RHaGxJR05oYkd4aVlXTnJJSGRwZEdnZ2IyNGdiR1ZtZENCSlJITXVYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdaRzkzYmtGeVp5QkJjbWQxYldWdWRDQjBieUJwYm5admEyVWdkR2hsSUdOaGJHeGlZV05ySUhkcGRHZ2diMjRnWlc1MFpYSmxaQ0JKUkhNdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ2RISmhkbVZ5YzJWRmJuUmxja3hsWVhabE9pQm1kVzVqZEdsdmJpaHNaV0YyWlVsRUxDQmxiblJsY2tsRUxDQmpZaXdnZFhCQmNtY3NJR1J2ZDI1QmNtY3BJSHRjYmlBZ0lDQjJZWElnWVc1alpYTjBiM0pKUkNBOUlHZGxkRVpwY25OMFEyOXRiVzl1UVc1alpYTjBiM0pKUkNoc1pXRjJaVWxFTENCbGJuUmxja2xFS1R0Y2JpQWdJQ0JwWmlBb1lXNWpaWE4wYjNKSlJDQWhQVDBnYkdWaGRtVkpSQ2tnZTF4dUlDQWdJQ0FnZEhKaGRtVnljMlZRWVhKbGJuUlFZWFJvS0d4bFlYWmxTVVFzSUdGdVkyVnpkRzl5U1VRc0lHTmlMQ0IxY0VGeVp5d2dabUZzYzJVc0lIUnlkV1VwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWVc1alpYTjBiM0pKUkNBaFBUMGdaVzUwWlhKSlJDa2dlMXh1SUNBZ0lDQWdkSEpoZG1WeWMyVlFZWEpsYm5SUVlYUm9LR0Z1WTJWemRHOXlTVVFzSUdWdWRHVnlTVVFzSUdOaUxDQmtiM2R1UVhKbkxDQjBjblZsTENCbVlXeHpaU2s3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVGFXMTFiR0YwWlhNZ2RHaGxJSFJ5WVhabGNuTmhiQ0J2WmlCaElIUjNieTF3YUdGelpTd2dZMkZ3ZEhWeVpTOWlkV0ppYkdVZ1pYWmxiblFnWkdsemNHRjBZMmd1WEc0Z0lDQXFYRzRnSUNBcUlFNVBWRVU2SUZSb2FYTWdkSEpoZG1WeWMyRnNJR2hoY0hCbGJuTWdiMjRnU1VSeklIZHBkR2h2ZFhRZ2RHOTFZMmhwYm1jZ2RHaGxJRVJQVFM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIUmhjbWRsZEVsRUlFbEVJRzltSUhSb1pTQjBZWEpuWlhRZ2JtOWtaUzVjYmlBZ0lDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdZMklnUTJGc2JHSmhZMnNnZEc4Z2FXNTJiMnRsTGx4dUlDQWdLaUJBY0dGeVlXMGdleXA5SUdGeVp5QkJjbWQxYldWdWRDQjBieUJwYm5admEyVWdkR2hsSUdOaGJHeGlZV05ySUhkcGRHZ3VYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdkSEpoZG1WeWMyVlVkMjlRYUdGelpUb2dablZ1WTNScGIyNG9kR0Z5WjJWMFNVUXNJR05pTENCaGNtY3BJSHRjYmlBZ0lDQnBaaUFvZEdGeVoyVjBTVVFwSUh0Y2JpQWdJQ0FnSUhSeVlYWmxjbk5sVUdGeVpXNTBVR0YwYUNnbkp5d2dkR0Z5WjJWMFNVUXNJR05pTENCaGNtY3NJSFJ5ZFdVc0lHWmhiSE5sS1R0Y2JpQWdJQ0FnSUhSeVlYWmxjbk5sVUdGeVpXNTBVR0YwYUNoMFlYSm5aWFJKUkN3Z0p5Y3NJR05pTENCaGNtY3NJR1poYkhObExDQjBjblZsS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGUnlZWFpsY25ObElHRWdibTlrWlNCSlJDd2dZMkZzYkdsdVp5QjBhR1VnYzNWd2NHeHBaV1FnWUdOaVlDQm1iM0lnWldGamFDQmhibU5sYzNSdmNpQkpSQzRnUm05eVhHNGdJQ0FxSUdWNFlXMXdiR1VzSUhCaGMzTnBibWNnWUM0d0xpUnliM2N0TUM0eFlDQjNiM1ZzWkNCeVpYTjFiSFFnYVc0Z1lHTmlZQ0JuWlhSMGFXNW5JR05oYkd4bFpGeHVJQ0FnS2lCM2FYUm9JR0F1TUdBc0lHQXVNQzRrY205M0xUQmdMQ0JoYm1RZ1lDNHdMaVJ5YjNjdE1DNHhZQzVjYmlBZ0lDcGNiaUFnSUNvZ1RrOVVSVG9nVkdocGN5QjBjbUYyWlhKellXd2dhR0Z3Y0dWdWN5QnZiaUJKUkhNZ2QybDBhRzkxZENCMGIzVmphR2x1WnlCMGFHVWdSRTlOTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RHRnlaMlYwU1VRZ1NVUWdiMllnZEdobElIUmhjbWRsZENCdWIyUmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQmpZaUJEWVd4c1ltRmpheUIwYnlCcGJuWnZhMlV1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdLbjBnWVhKbklFRnlaM1Z0Wlc1MElIUnZJR2x1ZG05clpTQjBhR1VnWTJGc2JHSmhZMnNnZDJsMGFDNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQjBjbUYyWlhKelpVRnVZMlZ6ZEc5eWN6b2dablZ1WTNScGIyNG9kR0Z5WjJWMFNVUXNJR05pTENCaGNtY3BJSHRjYmlBZ0lDQjBjbUYyWlhKelpWQmhjbVZ1ZEZCaGRHZ29KeWNzSUhSaGNtZGxkRWxFTENCallpd2dZWEpuTENCMGNuVmxMQ0JtWVd4elpTazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVWNGNHOXpaV1FnWm05eUlIVnVhWFFnZEdWemRHbHVaeTVjYmlBZ0lDb2dRSEJ5YVhaaGRHVmNiaUFnSUNvdlhHNGdJRjluWlhSR2FYSnpkRU52YlcxdmJrRnVZMlZ6ZEc5eVNVUTZJR2RsZEVacGNuTjBRMjl0Ylc5dVFXNWpaWE4wYjNKSlJDeGNibHh1SUNBdktpcGNiaUFnSUNvZ1JYaHdiM05sWkNCbWIzSWdkVzVwZENCMFpYTjBhVzVuTGx4dUlDQWdLaUJBY0hKcGRtRjBaVnh1SUNBZ0tpOWNiaUFnWDJkbGRFNWxlSFJFWlhOalpXNWtZVzUwU1VRNklHZGxkRTVsZUhSRVpYTmpaVzVrWVc1MFNVUXNYRzVjYmlBZ2FYTkJibU5sYzNSdmNrbEVUMlk2SUdselFXNWpaWE4wYjNKSlJFOW1MRnh1WEc0Z0lGTkZVRUZTUVZSUFVqb2dVMFZRUVZKQlZFOVNYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSSmJuTjBZVzVqWlVoaGJtUnNaWE03WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RJbnN0YW5jZU1hcFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICogaW5zdGFuY2UgKGtleSkgYW5kIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAodmFsdWUpLiBUaGlzIGFsbG93cyBwdWJsaWNcbiAqIG1ldGhvZHMgdG8gYWNjZXB0IHRoZSB1c2VyIGZhY2luZyBpbnN0YW5jZSBhcyBhbiBhcmd1bWVudCBhbmQgbWFwIHRoZW0gYmFja1xuICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAqL1xuXG4vLyBUT0RPOiBSZXBsYWNlIHRoaXMgd2l0aCBFUzY6IHZhciBSZWFjdEluc3RhbmNlTWFwID0gbmV3IE1hcCgpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSB7XG5cbiAgLyoqXG4gICAqIFRoaXMgQVBJIHNob3VsZCBiZSBjYWxsZWQgYGRlbGV0ZWAgYnV0IHdlJ2QgaGF2ZSB0byBtYWtlIHN1cmUgdG8gYWx3YXlzXG4gICAqIHRyYW5zZm9ybSB0aGVzZSB0byBzdHJpbmdzIGZvciBJRSBzdXBwb3J0LiBXaGVuIHRoaXMgdHJhbnNmb3JtIGlzIGZ1bGx5XG4gICAqIHN1cHBvcnRlZCB3ZSBjYW4gcmVuYW1lIGl0LlxuICAgKi9cbiAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHtcbiAgICBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgfSxcblxuICBnZXQ6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZTtcbiAgfSxcblxuICBoYXM6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSAhPT0gdW5kZWZpbmVkO1xuICB9LFxuXG4gIHNldDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gdmFsdWU7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEluc3RhbmNlTWFwO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdExpZmVDeWNsZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBtYW5hZ2VzIHRoZSBib29ra2VlcGluZyB3aGVuIGEgY29tcG9uZW50IGlzIGluIHRoZSBwcm9jZXNzXG4gKiBvZiBiZWluZyBtb3VudGVkIG9yIGJlaW5nIHVubW91bnRlZC4gVGhpcyBpcyB1c2VkIGFzIGEgd2F5IHRvIGVuZm9yY2VcbiAqIGludmFyaWFudHMgKG9yIHdhcm5pbmdzKSB3aGVuIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBjYWxsXG4gKiBzZXRTdGF0ZS9mb3JjZVVwZGF0ZS5cbiAqXG4gKiBjdXJyZW50bHlNb3VudGluZ0luc3RhbmNlOiBEdXJpbmcgdGhlIGNvbnN0cnVjdGlvbiBwaGFzZSwgaXQgaXMgbm90IHBvc3NpYmxlXG4gKiB0byB0cmlnZ2VyIGFuIHVwZGF0ZSBzaW5jZSB0aGUgaW5zdGFuY2UgaXMgbm90IGZ1bGx5IG1vdW50ZWQgeWV0LiBIb3dldmVyLCB3ZVxuICogY3VycmVudGx5IGFsbG93IHRoaXMgYXMgYSBjb252ZW5pZW5jZSBmb3IgbXV0YXRpbmcgdGhlIGluaXRpYWwgc3RhdGUuXG4gKlxuICogY3VycmVudGx5VW5tb3VudGluZ0luc3RhbmNlOiBEdXJpbmcgdGhlIHVubW91bnRpbmcgcGhhc2UsIHRoZSBpbnN0YW5jZSBpc1xuICogc3RpbGwgbW91bnRlZCBhbmQgY2FuIHRoZXJlZm9yZSBzY2hlZHVsZSBhbiB1cGRhdGUuIEhvd2V2ZXIsIHRoaXMgaXMgbm90XG4gKiByZWNvbW1lbmRlZCBhbmQgcHJvYmFibHkgYW4gZXJyb3Igc2luY2UgaXQncyBhYm91dCB0byBiZSB1bm1vdW50ZWQuXG4gKiBUaGVyZWZvcmUgd2Ugc3RpbGwgd2FudCB0byB0cmlnZ2VyIGluIGFuIGVycm9yIGZvciB0aGF0IGNhc2UuXG4gKi9cblxudmFyIFJlYWN0TGlmZUN5Y2xlID0ge1xuICBjdXJyZW50bHlNb3VudGluZ0luc3RhbmNlOiBudWxsLFxuICBjdXJyZW50bHlVbm1vdW50aW5nSW5zdGFuY2U6IG51bGxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RMaWZlQ3ljbGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RNYXJrdXBDaGVja3N1bVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGFkbGVyMzIgPSByZXF1aXJlKFwiLi9hZGxlcjMyXCIpO1xuXG52YXIgUmVhY3RNYXJrdXBDaGVja3N1bSA9IHtcbiAgQ0hFQ0tTVU1fQVRUUl9OQU1FOiAnZGF0YS1yZWFjdC1jaGVja3N1bScsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgTWFya3VwIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcgd2l0aCBjaGVja3N1bSBhdHRyaWJ1dGUgYXR0YWNoZWRcbiAgICovXG4gIGFkZENoZWNrc3VtVG9NYXJrdXA6IGZ1bmN0aW9uKG1hcmt1cCkge1xuICAgIHZhciBjaGVja3N1bSA9IGFkbGVyMzIobWFya3VwKTtcbiAgICByZXR1cm4gbWFya3VwLnJlcGxhY2UoXG4gICAgICAnPicsXG4gICAgICAnICcgKyBSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRSArICc9XCInICsgY2hlY2tzdW0gKyAnXCI+J1xuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgdG8gdXNlXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCByb290IFJlYWN0IGVsZW1lbnRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBtYXJrdXAgaXMgdGhlIHNhbWVcbiAgICovXG4gIGNhblJldXNlTWFya3VwOiBmdW5jdGlvbihtYXJrdXAsIGVsZW1lbnQpIHtcbiAgICB2YXIgZXhpc3RpbmdDaGVja3N1bSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFxuICAgICAgUmVhY3RNYXJrdXBDaGVja3N1bS5DSEVDS1NVTV9BVFRSX05BTUVcbiAgICApO1xuICAgIGV4aXN0aW5nQ2hlY2tzdW0gPSBleGlzdGluZ0NoZWNrc3VtICYmIHBhcnNlSW50KGV4aXN0aW5nQ2hlY2tzdW0sIDEwKTtcbiAgICB2YXIgbWFya3VwQ2hlY2tzdW0gPSBhZGxlcjMyKG1hcmt1cCk7XG4gICAgcmV0dXJuIG1hcmt1cENoZWNrc3VtID09PSBleGlzdGluZ0NoZWNrc3VtO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0TWFya3VwQ2hlY2tzdW07XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0TW91bnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5XCIpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlclwiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3JcIik7XG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RW1wdHlDb21wb25lbnRcIik7XG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlSGFuZGxlc1wiKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZU1hcFwiKTtcbnZhciBSZWFjdE1hcmt1cENoZWNrc3VtID0gcmVxdWlyZShcIi4vUmVhY3RNYXJrdXBDaGVja3N1bVwiKTtcbnZhciBSZWFjdFBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdFBlcmZcIik7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZShcIi4vUmVhY3RSZWNvbmNpbGVyXCIpO1xudmFyIFJlYWN0VXBkYXRlUXVldWUgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZVF1ZXVlXCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZShcIi4vZW1wdHlPYmplY3RcIik7XG52YXIgY29udGFpbnNOb2RlID0gcmVxdWlyZShcIi4vY29udGFpbnNOb2RlXCIpO1xudmFyIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lciA9IHJlcXVpcmUoXCIuL2dldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lclwiKTtcbnZhciBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudFwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgc2V0SW5uZXJIVE1MID0gcmVxdWlyZShcIi4vc2V0SW5uZXJIVE1MXCIpO1xudmFyIHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBTRVBBUkFUT1IgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5TRVBBUkFUT1I7XG5cbnZhciBBVFRSX05BTUUgPSBET01Qcm9wZXJ0eS5JRF9BVFRSSUJVVEVfTkFNRTtcbnZhciBub2RlQ2FjaGUgPSB7fTtcblxudmFyIEVMRU1FTlRfTk9ERV9UWVBFID0gMTtcbnZhciBET0NfTk9ERV9UWVBFID0gOTtcblxuLyoqIE1hcHBpbmcgZnJvbSByZWFjdFJvb3RJRCB0byBSZWFjdCBjb21wb25lbnQgaW5zdGFuY2UuICovXG52YXIgaW5zdGFuY2VzQnlSZWFjdFJvb3RJRCA9IHt9O1xuXG4vKiogTWFwcGluZyBmcm9tIHJlYWN0Um9vdElEIHRvIGBjb250YWluZXJgIG5vZGVzLiAqL1xudmFyIGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEID0ge307XG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgLyoqIF9fREVWX18tb25seSBtYXBwaW5nIGZyb20gcmVhY3RSb290SUQgdG8gcm9vdCBlbGVtZW50cy4gKi9cbiAgdmFyIHJvb3RFbGVtZW50c0J5UmVhY3RSb290SUQgPSB7fTtcbn1cblxuLy8gVXNlZCB0byBzdG9yZSBicmVhZHRoLWZpcnN0IHNlYXJjaCBzdGF0ZSBpbiBmaW5kQ29tcG9uZW50Um9vdC5cbnZhciBmaW5kQ29tcG9uZW50Um9vdFJldXNhYmxlQXJyYXkgPSBbXTtcblxuLyoqXG4gKiBGaW5kcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlclxuICogdGhhdCdzIG5vdCBjb21tb24gYmV0d2VlbiB0aGUgdHdvIGdpdmVuIHN0cmluZ3MuXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciB3aGVyZSB0aGUgc3RyaW5ncyBkaXZlcmdlXG4gKi9cbmZ1bmN0aW9uIGZpcnN0RGlmZmVyZW5jZUluZGV4KHN0cmluZzEsIHN0cmluZzIpIHtcbiAgdmFyIG1pbkxlbiA9IE1hdGgubWluKHN0cmluZzEubGVuZ3RoLCBzdHJpbmcyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWluTGVuOyBpKyspIHtcbiAgICBpZiAoc3RyaW5nMS5jaGFyQXQoaSkgIT09IHN0cmluZzIuY2hhckF0KGkpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cmluZzEubGVuZ3RoID09PSBzdHJpbmcyLmxlbmd0aCA/IC0xIDogbWluTGVuO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRoYXQgbWF5IGNvbnRhaW4gYSBSZWFjdCBjb21wb25lbnQuXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBBIFwicmVhY3RSb290XCIgSUQsIGlmIGEgUmVhY3QgY29tcG9uZW50IGlzIHJlbmRlcmVkLlxuICovXG5mdW5jdGlvbiBnZXRSZWFjdFJvb3RJRChjb250YWluZXIpIHtcbiAgdmFyIHJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHJldHVybiByb290RWxlbWVudCAmJiBSZWFjdE1vdW50LmdldElEKHJvb3RFbGVtZW50KTtcbn1cblxuLyoqXG4gKiBBY2Nlc3Npbmcgbm9kZVtBVFRSX05BTUVdIG9yIGNhbGxpbmcgZ2V0QXR0cmlidXRlKEFUVFJfTkFNRSkgb24gYSBmb3JtXG4gKiBlbGVtZW50IGNhbiByZXR1cm4gaXRzIGNvbnRyb2wgd2hvc2UgbmFtZSBvciBJRCBlcXVhbHMgQVRUUl9OQU1FLiBBbGxcbiAqIERPTSBub2RlcyBzdXBwb3J0IGBnZXRBdHRyaWJ1dGVOb2RlYCBidXQgdGhpcyBjYW4gYWxzbyBnZXQgY2FsbGVkIG9uXG4gKiBvdGhlciBvYmplY3RzIHNvIGp1c3QgcmV0dXJuICcnIGlmIHdlJ3JlIGdpdmVuIHNvbWV0aGluZyBvdGhlciB0aGFuIGFcbiAqIERPTSBub2RlIChzdWNoIGFzIHdpbmRvdykuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudHxET01XaW5kb3d8RE9NRG9jdW1lbnR8RE9NVGV4dE5vZGV9IG5vZGUgRE9NIG5vZGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IElEIG9mIHRoZSBzdXBwbGllZCBgZG9tTm9kZWAuXG4gKi9cbmZ1bmN0aW9uIGdldElEKG5vZGUpIHtcbiAgdmFyIGlkID0gaW50ZXJuYWxHZXRJRChub2RlKTtcbiAgaWYgKGlkKSB7XG4gICAgaWYgKG5vZGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgIHZhciBjYWNoZWQgPSBub2RlQ2FjaGVbaWRdO1xuICAgICAgaWYgKGNhY2hlZCAhPT0gbm9kZSkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgICFpc1ZhbGlkKGNhY2hlZCwgaWQpLFxuICAgICAgICAgICdSZWFjdE1vdW50OiBUd28gdmFsaWQgYnV0IHVuZXF1YWwgbm9kZXMgd2l0aCB0aGUgc2FtZSBgJXNgOiAlcycsXG4gICAgICAgICAgQVRUUl9OQU1FLCBpZFxuICAgICAgICApIDogaW52YXJpYW50KCFpc1ZhbGlkKGNhY2hlZCwgaWQpKSk7XG5cbiAgICAgICAgbm9kZUNhY2hlW2lkXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVDYWNoZVtpZF0gPSBub2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gaW50ZXJuYWxHZXRJRChub2RlKSB7XG4gIC8vIElmIG5vZGUgaXMgc29tZXRoaW5nIGxpa2UgYSB3aW5kb3csIGRvY3VtZW50LCBvciB0ZXh0IG5vZGUsIG5vbmUgb2ZcbiAgLy8gd2hpY2ggc3VwcG9ydCBhdHRyaWJ1dGVzIG9yIGEgLmdldEF0dHJpYnV0ZSBtZXRob2QsIGdyYWNlZnVsbHkgcmV0dXJuXG4gIC8vIHRoZSBlbXB0eSBzdHJpbmcsIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBtaXNzaW5nLlxuICByZXR1cm4gbm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZShBVFRSX05BTUUpIHx8ICcnO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIFJlYWN0LXNwZWNpZmljIElEIG9mIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZSBUaGUgRE9NIG5vZGUgd2hvc2UgSUQgd2lsbCBiZSBzZXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIHZhbHVlIG9mIHRoZSBJRCBhdHRyaWJ1dGUuXG4gKi9cbmZ1bmN0aW9uIHNldElEKG5vZGUsIGlkKSB7XG4gIHZhciBvbGRJRCA9IGludGVybmFsR2V0SUQobm9kZSk7XG4gIGlmIChvbGRJRCAhPT0gaWQpIHtcbiAgICBkZWxldGUgbm9kZUNhY2hlW29sZElEXTtcbiAgfVxuICBub2RlLnNldEF0dHJpYnV0ZShBVFRSX05BTUUsIGlkKTtcbiAgbm9kZUNhY2hlW2lkXSA9IG5vZGU7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG5vZGUgd2l0aCB0aGUgc3VwcGxpZWQgUmVhY3QtZ2VuZXJhdGVkIERPTSBJRC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgQSBSZWFjdC1nZW5lcmF0ZWQgRE9NIElELlxuICogQHJldHVybiB7RE9NRWxlbWVudH0gRE9NIG5vZGUgd2l0aCB0aGUgc3VwcGxlZCBgaWRgLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGUoaWQpIHtcbiAgaWYgKCFub2RlQ2FjaGUuaGFzT3duUHJvcGVydHkoaWQpIHx8ICFpc1ZhbGlkKG5vZGVDYWNoZVtpZF0sIGlkKSkge1xuICAgIG5vZGVDYWNoZVtpZF0gPSBSZWFjdE1vdW50LmZpbmRSZWFjdE5vZGVCeUlEKGlkKTtcbiAgfVxuICByZXR1cm4gbm9kZUNhY2hlW2lkXTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgbm9kZSB3aXRoIHRoZSBzdXBwbGllZCBwdWJsaWMgUmVhY3QgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHsqfSBpbnN0YW5jZSBBIHB1YmxpYyBSZWFjdCBpbnN0YW5jZS5cbiAqIEByZXR1cm4gez9ET01FbGVtZW50fSBET00gbm9kZSB3aXRoIHRoZSBzdXBwbGVkIGBpZGAuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0YW5jZSkge1xuICB2YXIgaWQgPSBSZWFjdEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSkuX3Jvb3ROb2RlSUQ7XG4gIGlmIChSZWFjdEVtcHR5Q29tcG9uZW50LmlzTnVsbENvbXBvbmVudElEKGlkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICghbm9kZUNhY2hlLmhhc093blByb3BlcnR5KGlkKSB8fCAhaXNWYWxpZChub2RlQ2FjaGVbaWRdLCBpZCkpIHtcbiAgICBub2RlQ2FjaGVbaWRdID0gUmVhY3RNb3VudC5maW5kUmVhY3ROb2RlQnlJRChpZCk7XG4gIH1cbiAgcmV0dXJuIG5vZGVDYWNoZVtpZF07XG59XG5cbi8qKlxuICogQSBub2RlIGlzIFwidmFsaWRcIiBpZiBpdCBpcyBjb250YWluZWQgYnkgYSBjdXJyZW50bHkgbW91bnRlZCBjb250YWluZXIuXG4gKlxuICogVGhpcyBtZWFucyB0aGF0IHRoZSBub2RlIGRvZXMgbm90IGhhdmUgdG8gYmUgY29udGFpbmVkIGJ5IGEgZG9jdW1lbnQgaW5cbiAqIG9yZGVyIHRvIGJlIGNvbnNpZGVyZWQgdmFsaWQuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBleHBlY3RlZCBJRCBvZiB0aGUgbm9kZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaXMgY29udGFpbmVkIGJ5IGEgbW91bnRlZCBjb250YWluZXIuXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWQobm9kZSwgaWQpIHtcbiAgaWYgKG5vZGUpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgaW50ZXJuYWxHZXRJRChub2RlKSA9PT0gaWQsXG4gICAgICAnUmVhY3RNb3VudDogVW5leHBlY3RlZCBtb2RpZmljYXRpb24gb2YgYCVzYCcsXG4gICAgICBBVFRSX05BTUVcbiAgICApIDogaW52YXJpYW50KGludGVybmFsR2V0SUQobm9kZSkgPT09IGlkKSk7XG5cbiAgICB2YXIgY29udGFpbmVyID0gUmVhY3RNb3VudC5maW5kUmVhY3RDb250YWluZXJGb3JJRChpZCk7XG4gICAgaWYgKGNvbnRhaW5lciAmJiBjb250YWluc05vZGUoY29udGFpbmVyLCBub2RlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENhdXNlcyB0aGUgY2FjaGUgdG8gZm9yZ2V0IGFib3V0IG9uZSBSZWFjdC1zcGVjaWZpYyBJRC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIHRvIGZvcmdldC5cbiAqL1xuZnVuY3Rpb24gcHVyZ2VJRChpZCkge1xuICBkZWxldGUgbm9kZUNhY2hlW2lkXTtcbn1cblxudmFyIGRlZXBlc3ROb2RlU29GYXIgPSBudWxsO1xuZnVuY3Rpb24gZmluZERlZXBlc3RDYWNoZWRBbmNlc3RvckltcGwoYW5jZXN0b3JJRCkge1xuICB2YXIgYW5jZXN0b3IgPSBub2RlQ2FjaGVbYW5jZXN0b3JJRF07XG4gIGlmIChhbmNlc3RvciAmJiBpc1ZhbGlkKGFuY2VzdG9yLCBhbmNlc3RvcklEKSkge1xuICAgIGRlZXBlc3ROb2RlU29GYXIgPSBhbmNlc3RvcjtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIG5vZGUgaXNuJ3QgcG9wdWxhdGVkIGluIHRoZSBjYWNoZSwgc28gcHJlc3VtYWJseSBub25lIG9mIGl0c1xuICAgIC8vIGRlc2NlbmRhbnRzIGFyZS4gQnJlYWsgb3V0IG9mIHRoZSBsb29wLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZGVlcGVzdCBjYWNoZWQgbm9kZSB3aG9zZSBJRCBpcyBhIHByZWZpeCBvZiBgdGFyZ2V0SURgLlxuICovXG5mdW5jdGlvbiBmaW5kRGVlcGVzdENhY2hlZEFuY2VzdG9yKHRhcmdldElEKSB7XG4gIGRlZXBlc3ROb2RlU29GYXIgPSBudWxsO1xuICBSZWFjdEluc3RhbmNlSGFuZGxlcy50cmF2ZXJzZUFuY2VzdG9ycyhcbiAgICB0YXJnZXRJRCxcbiAgICBmaW5kRGVlcGVzdENhY2hlZEFuY2VzdG9ySW1wbFxuICApO1xuXG4gIHZhciBmb3VuZE5vZGUgPSBkZWVwZXN0Tm9kZVNvRmFyO1xuICBkZWVwZXN0Tm9kZVNvRmFyID0gbnVsbDtcbiAgcmV0dXJuIGZvdW5kTm9kZTtcbn1cblxuLyoqXG4gKiBNb3VudHMgdGhpcyBjb21wb25lbnQgYW5kIGluc2VydHMgaXQgaW50byB0aGUgRE9NLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudEluc3RhbmNlIFRoZSBpbnN0YW5jZSB0byBtb3VudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb290SUQgRE9NIElEIG9mIHRoZSByb290IG5vZGUuXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byBtb3VudCBpbnRvLlxuICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHtib29sZWFufSBzaG91bGRSZXVzZU1hcmt1cCBJZiB0cnVlLCBkbyBub3QgaW5zZXJ0IG1hcmt1cFxuICovXG5mdW5jdGlvbiBtb3VudENvbXBvbmVudEludG9Ob2RlKFxuICAgIGNvbXBvbmVudEluc3RhbmNlLFxuICAgIHJvb3RJRCxcbiAgICBjb250YWluZXIsXG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2hvdWxkUmV1c2VNYXJrdXApIHtcbiAgdmFyIG1hcmt1cCA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChcbiAgICBjb21wb25lbnRJbnN0YW5jZSwgcm9vdElELCB0cmFuc2FjdGlvbiwgZW1wdHlPYmplY3RcbiAgKTtcbiAgY29tcG9uZW50SW5zdGFuY2UuX2lzVG9wTGV2ZWwgPSB0cnVlO1xuICBSZWFjdE1vdW50Ll9tb3VudEltYWdlSW50b05vZGUobWFya3VwLCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3VwKTtcbn1cblxuLyoqXG4gKiBCYXRjaGVkIG1vdW50LlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudEluc3RhbmNlIFRoZSBpbnN0YW5jZSB0byBtb3VudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb290SUQgRE9NIElEIG9mIHRoZSByb290IG5vZGUuXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byBtb3VudCBpbnRvLlxuICogQHBhcmFtIHtib29sZWFufSBzaG91bGRSZXVzZU1hcmt1cCBJZiB0cnVlLCBkbyBub3QgaW5zZXJ0IG1hcmt1cFxuICovXG5mdW5jdGlvbiBiYXRjaGVkTW91bnRDb21wb25lbnRJbnRvTm9kZShcbiAgICBjb21wb25lbnRJbnN0YW5jZSxcbiAgICByb290SUQsXG4gICAgY29udGFpbmVyLFxuICAgIHNob3VsZFJldXNlTWFya3VwKSB7XG4gIHZhciB0cmFuc2FjdGlvbiA9IFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmdldFBvb2xlZCgpO1xuICB0cmFuc2FjdGlvbi5wZXJmb3JtKFxuICAgIG1vdW50Q29tcG9uZW50SW50b05vZGUsXG4gICAgbnVsbCxcbiAgICBjb21wb25lbnRJbnN0YW5jZSxcbiAgICByb290SUQsXG4gICAgY29udGFpbmVyLFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIHNob3VsZFJldXNlTWFya3VwXG4gICk7XG4gIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLnJlbGVhc2UodHJhbnNhY3Rpb24pO1xufVxuXG4vKipcbiAqIE1vdW50aW5nIGlzIHRoZSBwcm9jZXNzIG9mIGluaXRpYWxpemluZyBhIFJlYWN0IGNvbXBvbmVudCBieSBjcmVhdGluZyBpdHNcbiAqIHJlcHJlc2VudGF0aXZlIERPTSBlbGVtZW50cyBhbmQgaW5zZXJ0aW5nIHRoZW0gaW50byBhIHN1cHBsaWVkIGBjb250YWluZXJgLlxuICogQW55IHByaW9yIGNvbnRlbnQgaW5zaWRlIGBjb250YWluZXJgIGlzIGRlc3Ryb3llZCBpbiB0aGUgcHJvY2Vzcy5cbiAqXG4gKiAgIFJlYWN0TW91bnQucmVuZGVyKFxuICogICAgIGNvbXBvbmVudCxcbiAqICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJylcbiAqICAgKTtcbiAqXG4gKiAgIDxkaXYgaWQ9XCJjb250YWluZXJcIj4gICAgICAgICAgICAgICAgICAgPC0tIFN1cHBsaWVkIGBjb250YWluZXJgLlxuICogICAgIDxkaXYgZGF0YS1yZWFjdGlkPVwiLjNcIj4gICAgICAgICAgICAgIDwtLSBSZW5kZXJlZCByZWFjdFJvb3Qgb2YgUmVhY3RcbiAqICAgICAgIC8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5cbiAqICAgICA8L2Rpdj5cbiAqICAgPC9kaXY+XG4gKlxuICogSW5zaWRlIG9mIGBjb250YWluZXJgLCB0aGUgZmlyc3QgZWxlbWVudCByZW5kZXJlZCBpcyB0aGUgXCJyZWFjdFJvb3RcIi5cbiAqL1xudmFyIFJlYWN0TW91bnQgPSB7XG4gIC8qKiBFeHBvc2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKiovXG4gIF9pbnN0YW5jZXNCeVJlYWN0Um9vdElEOiBpbnN0YW5jZXNCeVJlYWN0Um9vdElELFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgaG9vayBwcm92aWRlZCB0byBzdXBwb3J0IHJlbmRlcmluZyBSZWFjdCBjb21wb25lbnRzIHdoaWxlXG4gICAqIGVuc3VyaW5nIHRoYXQgdGhlIGFwcGFyZW50IHNjcm9sbCBwb3NpdGlvbiBvZiBpdHMgYGNvbnRhaW5lcmAgZG9lcyBub3RcbiAgICogY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBUaGUgYGNvbnRhaW5lcmAgYmVpbmcgcmVuZGVyZWQgaW50by5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVuZGVyQ2FsbGJhY2sgVGhpcyBtdXN0IGJlIGNhbGxlZCBvbmNlIHRvIGRvIHRoZSByZW5kZXIuXG4gICAqL1xuICBzY3JvbGxNb25pdG9yOiBmdW5jdGlvbihjb250YWluZXIsIHJlbmRlckNhbGxiYWNrKSB7XG4gICAgcmVuZGVyQ2FsbGJhY2soKTtcbiAgfSxcblxuICAvKipcbiAgICogVGFrZSBhIGNvbXBvbmVudCB0aGF0J3MgYWxyZWFkeSBtb3VudGVkIGludG8gdGhlIERPTSBhbmQgcmVwbGFjZSBpdHMgcHJvcHNcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gcHJldkNvbXBvbmVudCBjb21wb25lbnQgaW5zdGFuY2UgYWxyZWFkeSBpbiB0aGUgRE9NXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdHJpZ2dlcmVkIG9uIGNvbXBsZXRpb25cbiAgICovXG4gIF91cGRhdGVSb290Q29tcG9uZW50OiBmdW5jdGlvbihcbiAgICAgIHByZXZDb21wb25lbnQsXG4gICAgICBuZXh0RWxlbWVudCxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNhbGxiYWNrKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNoZWNrQW5kV2FybkZvck11dGF0ZWRQcm9wcyhuZXh0RWxlbWVudCk7XG4gICAgfVxuXG4gICAgUmVhY3RNb3VudC5zY3JvbGxNb25pdG9yKGNvbnRhaW5lciwgZnVuY3Rpb24oKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVFbGVtZW50SW50ZXJuYWwocHJldkNvbXBvbmVudCwgbmV4dEVsZW1lbnQpO1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUNhbGxiYWNrSW50ZXJuYWwocHJldkNvbXBvbmVudCwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgLy8gUmVjb3JkIHRoZSByb290IGVsZW1lbnQgaW4gY2FzZSBpdCBsYXRlciBnZXRzIHRyYW5zcGxhbnRlZC5cbiAgICAgIHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbZ2V0UmVhY3RSb290SUQoY29udGFpbmVyKV0gPVxuICAgICAgICBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJldkNvbXBvbmVudDtcbiAgfSxcblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBjb21wb25lbnQgaW50byB0aGUgaW5zdGFuY2UgbWFwIGFuZCBzdGFydHMgc2Nyb2xsIHZhbHVlXG4gICAqIG1vbml0b3JpbmdcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gbmV4dENvbXBvbmVudCBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHJlYWN0Um9vdCBJRCBwcmVmaXhcbiAgICovXG4gIF9yZWdpc3RlckNvbXBvbmVudDogZnVuY3Rpb24obmV4dENvbXBvbmVudCwgY29udGFpbmVyKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGNvbnRhaW5lciAmJiAoXG4gICAgICAgIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFIHx8IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQRSlcbiAgICAgICksXG4gICAgICAnX3JlZ2lzdGVyQ29tcG9uZW50KC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJ1xuICAgICkgOiBpbnZhcmlhbnQoY29udGFpbmVyICYmIChcbiAgICAgIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFIHx8IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQRSlcbiAgICApKSk7XG5cbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuZW5zdXJlU2Nyb2xsVmFsdWVNb25pdG9yaW5nKCk7XG5cbiAgICB2YXIgcmVhY3RSb290SUQgPSBSZWFjdE1vdW50LnJlZ2lzdGVyQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgaW5zdGFuY2VzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gPSBuZXh0Q29tcG9uZW50O1xuICAgIHJldHVybiByZWFjdFJvb3RJRDtcbiAgfSxcblxuICAvKipcbiAgICogUmVuZGVyIGEgbmV3IGNvbXBvbmVudCBpbnRvIHRoZSBET00uXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBlbGVtZW50IHRvIHJlbmRlclxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBjb250YWluZXIgdG8gcmVuZGVyIGludG9cbiAgICogQHBhcmFtIHtib29sZWFufSBzaG91bGRSZXVzZU1hcmt1cCBpZiB3ZSBzaG91bGQgc2tpcCB0aGUgbWFya3VwIGluc2VydGlvblxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gbmV4dENvbXBvbmVudFxuICAgKi9cbiAgX3JlbmRlck5ld1Jvb3RDb21wb25lbnQ6IGZ1bmN0aW9uKFxuICAgIG5leHRFbGVtZW50LFxuICAgIGNvbnRhaW5lcixcbiAgICBzaG91bGRSZXVzZU1hcmt1cFxuICApIHtcbiAgICAvLyBWYXJpb3VzIHBhcnRzIG9mIG91ciBjb2RlIChzdWNoIGFzIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50J3NcbiAgICAvLyBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KSBhc3N1bWUgdGhhdCBjYWxscyB0byByZW5kZXIgYXJlbid0IG5lc3RlZDtcbiAgICAvLyB2ZXJpZnkgdGhhdCB0aGF0J3MgdGhlIGNhc2UuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID09IG51bGwsXG4gICAgICAnX3JlbmRlck5ld1Jvb3RDb21wb25lbnQoKTogUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiAnICtcbiAgICAgICdvZiBwcm9wcyBhbmQgc3RhdGU7IHRyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gJyArXG4gICAgICAncmVuZGVyIGlzIG5vdCBhbGxvd2VkLiBJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gJyArXG4gICAgICAnY29tcG9uZW50RGlkVXBkYXRlLidcbiAgICApIDogbnVsbCk7XG5cbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG5leHRFbGVtZW50LCBudWxsKTtcbiAgICB2YXIgcmVhY3RSb290SUQgPSBSZWFjdE1vdW50Ll9yZWdpc3RlckNvbXBvbmVudChcbiAgICAgIGNvbXBvbmVudEluc3RhbmNlLFxuICAgICAgY29udGFpbmVyXG4gICAgKTtcblxuICAgIC8vIFRoZSBpbml0aWFsIHJlbmRlciBpcyBzeW5jaHJvbm91cyBidXQgYW55IHVwZGF0ZXMgdGhhdCBoYXBwZW4gZHVyaW5nXG4gICAgLy8gcmVuZGVyaW5nLCBpbiBjb21wb25lbnRXaWxsTW91bnQgb3IgY29tcG9uZW50RGlkTW91bnQsIHdpbGwgYmUgYmF0Y2hlZFxuICAgIC8vIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBiYXRjaGluZyBzdHJhdGVneS5cblxuICAgIFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBkYXRlcyhcbiAgICAgIGJhdGNoZWRNb3VudENvbXBvbmVudEludG9Ob2RlLFxuICAgICAgY29tcG9uZW50SW5zdGFuY2UsXG4gICAgICByZWFjdFJvb3RJRCxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHNob3VsZFJldXNlTWFya3VwXG4gICAgKTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIC8vIFJlY29yZCB0aGUgcm9vdCBlbGVtZW50IGluIGNhc2UgaXQgbGF0ZXIgZ2V0cyB0cmFuc3BsYW50ZWQuXG4gICAgICByb290RWxlbWVudHNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXSA9XG4gICAgICAgIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wb25lbnRJbnN0YW5jZTtcbiAgfSxcblxuICAvKipcbiAgICogUmVuZGVycyBhIFJlYWN0IGNvbXBvbmVudCBpbnRvIHRoZSBET00gaW4gdGhlIHN1cHBsaWVkIGBjb250YWluZXJgLlxuICAgKlxuICAgKiBJZiB0aGUgUmVhY3QgY29tcG9uZW50IHdhcyBwcmV2aW91c2x5IHJlbmRlcmVkIGludG8gYGNvbnRhaW5lcmAsIHRoaXMgd2lsbFxuICAgKiBwZXJmb3JtIGFuIHVwZGF0ZSBvbiBpdCBhbmQgb25seSBtdXRhdGUgdGhlIERPTSBhcyBuZWNlc3NhcnkgdG8gcmVmbGVjdCB0aGVcbiAgICogbGF0ZXN0IFJlYWN0IGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IENvbXBvbmVudCBlbGVtZW50IHRvIHJlbmRlci5cbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgb24gY29tcGxldGlvblxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gQ29tcG9uZW50IGluc3RhbmNlIHJlbmRlcmVkIGluIGBjb250YWluZXJgLlxuICAgKi9cbiAgcmVuZGVyOiBmdW5jdGlvbihuZXh0RWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobmV4dEVsZW1lbnQpLFxuICAgICAgJ1JlYWN0LnJlbmRlcigpOiBJbnZhbGlkIGNvbXBvbmVudCBlbGVtZW50LiVzJyxcbiAgICAgIChcbiAgICAgICAgdHlwZW9mIG5leHRFbGVtZW50ID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgJyBJbnN0ZWFkIG9mIHBhc3NpbmcgYW4gZWxlbWVudCBzdHJpbmcsIG1ha2Ugc3VyZSB0byBpbnN0YW50aWF0ZSAnICtcbiAgICAgICAgICAnaXQgYnkgcGFzc2luZyBpdCB0byBSZWFjdC5jcmVhdGVFbGVtZW50LicgOlxuICAgICAgICB0eXBlb2YgbmV4dEVsZW1lbnQgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICcgSW5zdGVhZCBvZiBwYXNzaW5nIGEgY29tcG9uZW50IGNsYXNzLCBtYWtlIHN1cmUgdG8gaW5zdGFudGlhdGUgJyArXG4gICAgICAgICAgJ2l0IGJ5IHBhc3NpbmcgaXQgdG8gUmVhY3QuY3JlYXRlRWxlbWVudC4nIDpcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgcXVhY2tzIGxpa2UgYW4gZWxlbWVudFxuICAgICAgICBuZXh0RWxlbWVudCAhPSBudWxsICYmIG5leHRFbGVtZW50LnByb3BzICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICcgVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHVuaW50ZW50aW9uYWxseSBsb2FkaW5nIHR3byBpbmRlcGVuZGVudCAnICtcbiAgICAgICAgICAnY29waWVzIG9mIFJlYWN0LicgOlxuICAgICAgICAgICcnXG4gICAgICApXG4gICAgKSA6IGludmFyaWFudChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobmV4dEVsZW1lbnQpKSk7XG5cbiAgICB2YXIgcHJldkNvbXBvbmVudCA9IGluc3RhbmNlc0J5UmVhY3RSb290SURbZ2V0UmVhY3RSb290SUQoY29udGFpbmVyKV07XG5cbiAgICBpZiAocHJldkNvbXBvbmVudCkge1xuICAgICAgdmFyIHByZXZFbGVtZW50ID0gcHJldkNvbXBvbmVudC5fY3VycmVudEVsZW1lbnQ7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gUmVhY3RNb3VudC5fdXBkYXRlUm9vdENvbXBvbmVudChcbiAgICAgICAgICBwcmV2Q29tcG9uZW50LFxuICAgICAgICAgIG5leHRFbGVtZW50LFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBjYWxsYmFja1xuICAgICAgICApLmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBSZWFjdE1vdW50LnVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVhY3RSb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIHZhciBjb250YWluZXJIYXNSZWFjdE1hcmt1cCA9XG4gICAgICByZWFjdFJvb3RFbGVtZW50ICYmIFJlYWN0TW91bnQuaXNSZW5kZXJlZEJ5UmVhY3QocmVhY3RSb290RWxlbWVudCk7XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBpZiAoIWNvbnRhaW5lckhhc1JlYWN0TWFya3VwIHx8IHJlYWN0Um9vdEVsZW1lbnQubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgdmFyIHJvb3RFbGVtZW50U2libGluZyA9IHJlYWN0Um9vdEVsZW1lbnQ7XG4gICAgICAgIHdoaWxlIChyb290RWxlbWVudFNpYmxpbmcpIHtcbiAgICAgICAgICBpZiAoUmVhY3RNb3VudC5pc1JlbmRlcmVkQnlSZWFjdChyb290RWxlbWVudFNpYmxpbmcpKSB7XG4gICAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICdyZW5kZXIoKTogVGFyZ2V0IG5vZGUgaGFzIG1hcmt1cCByZW5kZXJlZCBieSBSZWFjdCwgYnV0IHRoZXJlICcgK1xuICAgICAgICAgICAgICAnYXJlIHVucmVsYXRlZCBub2RlcyBhcyB3ZWxsLiBUaGlzIGlzIG1vc3QgY29tbW9ubHkgY2F1c2VkIGJ5ICcgK1xuICAgICAgICAgICAgICAnd2hpdGUtc3BhY2UgaW5zZXJ0ZWQgYXJvdW5kIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAuJ1xuICAgICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcm9vdEVsZW1lbnRTaWJsaW5nID0gcm9vdEVsZW1lbnRTaWJsaW5nLm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZFJldXNlTWFya3VwID0gY29udGFpbmVySGFzUmVhY3RNYXJrdXAgJiYgIXByZXZDb21wb25lbnQ7XG5cbiAgICB2YXIgY29tcG9uZW50ID0gUmVhY3RNb3VudC5fcmVuZGVyTmV3Um9vdENvbXBvbmVudChcbiAgICAgIG5leHRFbGVtZW50LFxuICAgICAgY29udGFpbmVyLFxuICAgICAgc2hvdWxkUmV1c2VNYXJrdXBcbiAgICApLmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKGNvbXBvbmVudCk7XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBjb21wb25lbnQgaW5zdGFuY2Ugb2YgYGNvbnN0cnVjdG9yYCB3aXRoIGBpbml0aWFsUHJvcHNgIGFuZFxuICAgKiByZW5kZXJzIGl0IGludG8gdGhlIHN1cHBsaWVkIGBjb250YWluZXJgLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvciBSZWFjdCBjb21wb25lbnQgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcHJvcHMgSW5pdGlhbCBwcm9wcyBvZiB0aGUgY29tcG9uZW50IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byByZW5kZXIgaW50by5cbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9IENvbXBvbmVudCBpbnN0YW5jZSByZW5kZXJlZCBpbiBgY29udGFpbmVyYC5cbiAgICovXG4gIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudDogZnVuY3Rpb24oY29uc3RydWN0b3IsIHByb3BzLCBjb250YWluZXIpIHtcbiAgICB2YXIgZWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50KGNvbnN0cnVjdG9yLCBwcm9wcyk7XG4gICAgcmV0dXJuIFJlYWN0TW91bnQucmVuZGVyKGVsZW1lbnQsIGNvbnRhaW5lcik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBjb21wb25lbnQgaW5zdGFuY2Ugb2YgYGNvbnN0cnVjdG9yYCB3aXRoIGBpbml0aWFsUHJvcHNgIGFuZFxuICAgKiByZW5kZXJzIGl0IGludG8gYSBjb250YWluZXIgbm9kZSBpZGVudGlmaWVkIGJ5IHN1cHBsaWVkIGBpZGAuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBvbmVudENvbnN0cnVjdG9yIFJlYWN0IGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gez9vYmplY3R9IHByb3BzIEluaXRpYWwgcHJvcHMgb2YgdGhlIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBET00gZWxlbWVudCB0byByZW5kZXIgaW50by5cbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9IENvbXBvbmVudCBpbnN0YW5jZSByZW5kZXJlZCBpbiB0aGUgY29udGFpbmVyIG5vZGUuXG4gICAqL1xuICBjb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25lbnRCeUlEOiBmdW5jdGlvbihjb25zdHJ1Y3RvciwgcHJvcHMsIGlkKSB7XG4gICAgdmFyIGRvbU5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGRvbU5vZGUsXG4gICAgICAnVHJpZWQgdG8gZ2V0IGVsZW1lbnQgd2l0aCBpZCBvZiBcIiVzXCIgYnV0IGl0IGlzIG5vdCBwcmVzZW50IG9uIHRoZSBwYWdlLicsXG4gICAgICBpZFxuICAgICkgOiBpbnZhcmlhbnQoZG9tTm9kZSkpO1xuICAgIHJldHVybiBSZWFjdE1vdW50LmNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudChjb25zdHJ1Y3RvciwgcHJvcHMsIGRvbU5vZGUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjb250YWluZXIgbm9kZSBpbnRvIHdoaWNoIFJlYWN0IGNvbXBvbmVudHMgd2lsbCBiZSByZW5kZXJlZC5cbiAgICogVGhpcyBhbHNvIGNyZWF0ZXMgdGhlIFwicmVhY3RSb290XCIgSUQgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50XG4gICAqIHJlbmRlcmVkIHdpdGhpbi5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdG8gcmVnaXN0ZXIgYXMgYSBjb250YWluZXIuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFwicmVhY3RSb290XCIgSUQgb2YgZWxlbWVudHMgcmVuZGVyZWQgd2l0aGluLlxuICAgKi9cbiAgcmVnaXN0ZXJDb250YWluZXI6IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuICAgIHZhciByZWFjdFJvb3RJRCA9IGdldFJlYWN0Um9vdElEKGNvbnRhaW5lcik7XG4gICAgaWYgKHJlYWN0Um9vdElEKSB7XG4gICAgICAvLyBJZiBvbmUgZXhpc3RzLCBtYWtlIHN1cmUgaXQgaXMgYSB2YWxpZCBcInJlYWN0Um9vdFwiIElELlxuICAgICAgcmVhY3RSb290SUQgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5nZXRSZWFjdFJvb3RJREZyb21Ob2RlSUQocmVhY3RSb290SUQpO1xuICAgIH1cbiAgICBpZiAoIXJlYWN0Um9vdElEKSB7XG4gICAgICAvLyBObyB2YWxpZCBcInJlYWN0Um9vdFwiIElEIGZvdW5kLCBjcmVhdGUgb25lLlxuICAgICAgcmVhY3RSb290SUQgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5jcmVhdGVSZWFjdFJvb3RJRCgpO1xuICAgIH1cbiAgICBjb250YWluZXJzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gPSBjb250YWluZXI7XG4gICAgcmV0dXJuIHJlYWN0Um9vdElEO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVbm1vdW50cyBhbmQgZGVzdHJveXMgdGhlIFJlYWN0IGNvbXBvbmVudCByZW5kZXJlZCBpbiB0aGUgYGNvbnRhaW5lcmAuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IGNvbnRhaW5pbmcgYSBSZWFjdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYSBjb21wb25lbnQgd2FzIGZvdW5kIGluIGFuZCB1bm1vdW50ZWQgZnJvbVxuICAgKiAgICAgICAgICAgICAgICAgICBgY29udGFpbmVyYFxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudEF0Tm9kZTogZnVuY3Rpb24oY29udGFpbmVyKSB7XG4gICAgLy8gVmFyaW91cyBwYXJ0cyBvZiBvdXIgY29kZSAoc3VjaCBhcyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdzXG4gICAgLy8gX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCkgYXNzdW1lIHRoYXQgY2FsbHMgdG8gcmVuZGVyIGFyZW4ndCBuZXN0ZWQ7XG4gICAgLy8gdmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLiAoU3RyaWN0bHkgc3BlYWtpbmcsIHVubW91bnRpbmcgd29uJ3QgY2F1c2UgYVxuICAgIC8vIHJlbmRlciBidXQgd2Ugc3RpbGwgZG9uJ3QgZXhwZWN0IHRvIGJlIGluIGEgcmVuZGVyIGNhbGwgaGVyZS4pXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID09IG51bGwsXG4gICAgICAndW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mICcgK1xuICAgICAgJ3Byb3BzIGFuZCBzdGF0ZTsgdHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgaXMgJyArXG4gICAgICAnbm90IGFsbG93ZWQuIElmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiAnICtcbiAgICAgICdjb21wb25lbnREaWRVcGRhdGUuJ1xuICAgICkgOiBudWxsKTtcblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBjb250YWluZXIgJiYgKFxuICAgICAgICAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSB8fCBjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpXG4gICAgICApLFxuICAgICAgJ3VubW91bnRDb21wb25lbnRBdE5vZGUoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC4nXG4gICAgKSA6IGludmFyaWFudChjb250YWluZXIgJiYgKFxuICAgICAgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFX1RZUEUgfHwgY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKVxuICAgICkpKTtcblxuICAgIHZhciByZWFjdFJvb3RJRCA9IGdldFJlYWN0Um9vdElEKGNvbnRhaW5lcik7XG4gICAgdmFyIGNvbXBvbmVudCA9IGluc3RhbmNlc0J5UmVhY3RSb290SURbcmVhY3RSb290SURdO1xuICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFJlYWN0TW91bnQudW5tb3VudENvbXBvbmVudEZyb21Ob2RlKGNvbXBvbmVudCwgY29udGFpbmVyKTtcbiAgICBkZWxldGUgaW5zdGFuY2VzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF07XG4gICAgZGVsZXRlIGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBkZWxldGUgcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF07XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVbm1vdW50cyBhIGNvbXBvbmVudCBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBET00uXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGluc3RhbmNlIFJlYWN0IGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdG8gdW5tb3VudCBmcm9tLlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqIEBzZWUge1JlYWN0TW91bnQudW5tb3VudENvbXBvbmVudEF0Tm9kZX1cbiAgICovXG4gIHVubW91bnRDb21wb25lbnRGcm9tTm9kZTogZnVuY3Rpb24oaW5zdGFuY2UsIGNvbnRhaW5lcikge1xuICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KGluc3RhbmNlKTtcblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpIHtcbiAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5kb2N1bWVudEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gaHR0cDovL2pzcGVyZi5jb20vZW1wdHlpbmctYS1ub2RlXG4gICAgd2hpbGUgKGNvbnRhaW5lci5sYXN0Q2hpbGQpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChjb250YWluZXIubGFzdENoaWxkKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBjb250YWluZXIgRE9NIGVsZW1lbnQgdGhhdCBjb250YWlucyBSZWFjdCBjb21wb25lbnQgdG8gd2hpY2ggdGhlXG4gICAqIHN1cHBsaWVkIERPTSBgaWRgIGJlbG9uZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSUQgb2YgYW4gZWxlbWVudCByZW5kZXJlZCBieSBhIFJlYWN0IGNvbXBvbmVudC5cbiAgICogQHJldHVybiB7P0RPTUVsZW1lbnR9IERPTSBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIGBpZGAuXG4gICAqL1xuICBmaW5kUmVhY3RDb250YWluZXJGb3JJRDogZnVuY3Rpb24oaWQpIHtcbiAgICB2YXIgcmVhY3RSb290SUQgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5nZXRSZWFjdFJvb3RJREZyb21Ob2RlSUQoaWQpO1xuICAgIHZhciBjb250YWluZXIgPSBjb250YWluZXJzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF07XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSByb290RWxlbWVudHNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTtcbiAgICAgIGlmIChyb290RWxlbWVudCAmJiByb290RWxlbWVudC5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICAvLyBDYWxsIGludGVybmFsR2V0SUQgaGVyZSBiZWNhdXNlIGdldElEIGNhbGxzIGlzVmFsaWQgd2hpY2ggY2FsbHNcbiAgICAgICAgICAvLyBmaW5kUmVhY3RDb250YWluZXJGb3JJRCAodGhpcyBmdW5jdGlvbikuXG4gICAgICAgICAgaW50ZXJuYWxHZXRJRChyb290RWxlbWVudCkgPT09IHJlYWN0Um9vdElELFxuICAgICAgICAgICdSZWFjdE1vdW50OiBSb290IGVsZW1lbnQgSUQgZGlmZmVyZWQgZnJvbSByZWFjdFJvb3RJRC4nXG4gICAgICAgICkgOiBpbnZhcmlhbnQoLy8gQ2FsbCBpbnRlcm5hbEdldElEIGhlcmUgYmVjYXVzZSBnZXRJRCBjYWxscyBpc1ZhbGlkIHdoaWNoIGNhbGxzXG4gICAgICAgIC8vIGZpbmRSZWFjdENvbnRhaW5lckZvcklEICh0aGlzIGZ1bmN0aW9uKS5cbiAgICAgICAgaW50ZXJuYWxHZXRJRChyb290RWxlbWVudCkgPT09IHJlYWN0Um9vdElEKSk7XG5cbiAgICAgICAgdmFyIGNvbnRhaW5lckNoaWxkID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmIChjb250YWluZXJDaGlsZCAmJlxuICAgICAgICAgICAgcmVhY3RSb290SUQgPT09IGludGVybmFsR2V0SUQoY29udGFpbmVyQ2hpbGQpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGNvbnRhaW5lciBoYXMgYSBuZXcgY2hpbGQgd2l0aCB0aGUgc2FtZSBJRCBhcyB0aGUgb2xkXG4gICAgICAgICAgLy8gcm9vdCBlbGVtZW50LCB0aGVuIHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbcmVhY3RSb290SURdIGlzXG4gICAgICAgICAgLy8ganVzdCBzdGFsZSBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC4gVGhlIGNhc2UgdGhhdCBkZXNlcnZlcyBhXG4gICAgICAgICAgLy8gd2FybmluZyBpcyB3aGVuIHRoZSBjb250YWluZXIgaXMgZW1wdHkuXG4gICAgICAgICAgcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gPSBjb250YWluZXJDaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgJ1JlYWN0TW91bnQ6IFJvb3QgZWxlbWVudCBoYXMgYmVlbiByZW1vdmVkIGZyb20gaXRzIG9yaWdpbmFsICcgK1xuICAgICAgICAgICAgJ2NvbnRhaW5lci4gTmV3IGNvbnRhaW5lcjonLCByb290RWxlbWVudC5wYXJlbnROb2RlXG4gICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfSxcblxuICAvKipcbiAgICogRmluZHMgYW4gZWxlbWVudCByZW5kZXJlZCBieSBSZWFjdCB3aXRoIHRoZSBzdXBwbGllZCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIGEgRE9NIG5vZGUgaW4gdGhlIFJlYWN0IGNvbXBvbmVudC5cbiAgICogQHJldHVybiB7RE9NRWxlbWVudH0gUm9vdCBET00gbm9kZSBvZiB0aGUgUmVhY3QgY29tcG9uZW50LlxuICAgKi9cbiAgZmluZFJlYWN0Tm9kZUJ5SUQ6IGZ1bmN0aW9uKGlkKSB7XG4gICAgdmFyIHJlYWN0Um9vdCA9IFJlYWN0TW91bnQuZmluZFJlYWN0Q29udGFpbmVyRm9ySUQoaWQpO1xuICAgIHJldHVybiBSZWFjdE1vdW50LmZpbmRDb21wb25lbnRSb290KHJlYWN0Um9vdCwgaWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcnVlIGlmIHRoZSBzdXBwbGllZCBgbm9kZWAgaXMgcmVuZGVyZWQgYnkgUmVhY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gbm9kZSBET00gRWxlbWVudCB0byBjaGVjay5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgRE9NIEVsZW1lbnQgYXBwZWFycyB0byBiZSByZW5kZXJlZCBieSBSZWFjdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBpc1JlbmRlcmVkQnlSZWFjdDogZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICAvLyBOb3QgYSBET01FbGVtZW50LCB0aGVyZWZvcmUgbm90IGEgUmVhY3QgY29tcG9uZW50XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBpZCA9IFJlYWN0TW91bnQuZ2V0SUQobm9kZSk7XG4gICAgcmV0dXJuIGlkID8gaWQuY2hhckF0KDApID09PSBTRVBBUkFUT1IgOiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogVHJhdmVyc2VzIHVwIHRoZSBhbmNlc3RvcnMgb2YgdGhlIHN1cHBsaWVkIG5vZGUgdG8gZmluZCBhIG5vZGUgdGhhdCBpcyBhXG4gICAqIERPTSByZXByZXNlbnRhdGlvbiBvZiBhIFJlYWN0IGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBub2RlXG4gICAqIEByZXR1cm4gez9ET01FdmVudFRhcmdldH1cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRGaXJzdFJlYWN0RE9NOiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBub2RlO1xuICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQucGFyZW50Tm9kZSAhPT0gY3VycmVudCkge1xuICAgICAgaWYgKFJlYWN0TW91bnQuaXNSZW5kZXJlZEJ5UmVhY3QoY3VycmVudCkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogRmluZHMgYSBub2RlIHdpdGggdGhlIHN1cHBsaWVkIGB0YXJnZXRJRGAgaW5zaWRlIG9mIHRoZSBzdXBwbGllZFxuICAgKiBgYW5jZXN0b3JOb2RlYC4gIEV4cGxvaXRzIHRoZSBJRCBuYW1pbmcgc2NoZW1lIHRvIHBlcmZvcm0gdGhlIHNlYXJjaFxuICAgKiBxdWlja2x5LlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSBhbmNlc3Rvck5vZGUgU2VhcmNoIGZyb20gdGhpcyByb290LlxuICAgKiBAcGFyYXJtIHtzdHJpbmd9IHRhcmdldElEIElEIG9mIHRoZSBET00gcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IERPTSBub2RlIHdpdGggdGhlIHN1cHBsaWVkIGB0YXJnZXRJRGAuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZmluZENvbXBvbmVudFJvb3Q6IGZ1bmN0aW9uKGFuY2VzdG9yTm9kZSwgdGFyZ2V0SUQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZHJlbiA9IGZpbmRDb21wb25lbnRSb290UmV1c2FibGVBcnJheTtcbiAgICB2YXIgY2hpbGRJbmRleCA9IDA7XG5cbiAgICB2YXIgZGVlcGVzdEFuY2VzdG9yID0gZmluZERlZXBlc3RDYWNoZWRBbmNlc3Rvcih0YXJnZXRJRCkgfHwgYW5jZXN0b3JOb2RlO1xuXG4gICAgZmlyc3RDaGlsZHJlblswXSA9IGRlZXBlc3RBbmNlc3Rvci5maXJzdENoaWxkO1xuICAgIGZpcnN0Q2hpbGRyZW4ubGVuZ3RoID0gMTtcblxuICAgIHdoaWxlIChjaGlsZEluZGV4IDwgZmlyc3RDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHZhciBjaGlsZCA9IGZpcnN0Q2hpbGRyZW5bY2hpbGRJbmRleCsrXTtcbiAgICAgIHZhciB0YXJnZXRDaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgIHZhciBjaGlsZElEID0gUmVhY3RNb3VudC5nZXRJRChjaGlsZCk7XG4gICAgICAgIGlmIChjaGlsZElEKSB7XG4gICAgICAgICAgLy8gRXZlbiBpZiB3ZSBmaW5kIHRoZSBub2RlIHdlJ3JlIGxvb2tpbmcgZm9yLCB3ZSBmaW5pc2ggbG9vcGluZ1xuICAgICAgICAgIC8vIHRocm91Z2ggaXRzIHNpYmxpbmdzIHRvIGVuc3VyZSB0aGV5J3JlIGNhY2hlZCBzbyB0aGF0IHdlIGRvbid0IGhhdmVcbiAgICAgICAgICAvLyB0byByZXZpc2l0IHRoaXMgbm9kZSBhZ2Fpbi4gT3RoZXJ3aXNlLCB3ZSBtYWtlIG5eMiBjYWxscyB0byBnZXRJRFxuICAgICAgICAgIC8vIHdoZW4gdmlzaXRpbmcgdGhlIG1hbnkgY2hpbGRyZW4gb2YgYSBzaW5nbGUgbm9kZSBpbiBvcmRlci5cblxuICAgICAgICAgIGlmICh0YXJnZXRJRCA9PT0gY2hpbGRJRCkge1xuICAgICAgICAgICAgdGFyZ2V0Q2hpbGQgPSBjaGlsZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKFJlYWN0SW5zdGFuY2VIYW5kbGVzLmlzQW5jZXN0b3JJRE9mKGNoaWxkSUQsIHRhcmdldElEKSkge1xuICAgICAgICAgICAgLy8gSWYgd2UgZmluZCBhIGNoaWxkIHdob3NlIElEIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBnaXZlbiBJRCxcbiAgICAgICAgICAgIC8vIHRoZW4gd2UgY2FuIGJlIHN1cmUgdGhhdCB3ZSBvbmx5IHdhbnQgdG8gc2VhcmNoIHRoZSBzdWJ0cmVlXG4gICAgICAgICAgICAvLyByb290ZWQgYXQgdGhpcyBjaGlsZCwgc28gd2UgY2FuIHRocm93IG91dCB0aGUgcmVzdCBvZiB0aGVcbiAgICAgICAgICAgIC8vIHNlYXJjaCBzdGF0ZS5cbiAgICAgICAgICAgIGZpcnN0Q2hpbGRyZW4ubGVuZ3RoID0gY2hpbGRJbmRleCA9IDA7XG4gICAgICAgICAgICBmaXJzdENoaWxkcmVuLnB1c2goY2hpbGQuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBjaGlsZCBoYWQgbm8gSUQsIHRoZW4gdGhlcmUncyBhIGNoYW5jZSB0aGF0IGl0IHdhc1xuICAgICAgICAgIC8vIGluamVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGJyb3dzZXIsIGFzIHdoZW4gYSBgPHRhYmxlPmBcbiAgICAgICAgICAvLyBlbGVtZW50IHNwcm91dHMgYW4gZXh0cmEgYDx0Ym9keT5gIGNoaWxkIGFzIGEgc2lkZSBlZmZlY3Qgb2ZcbiAgICAgICAgICAvLyBgLmlubmVySFRNTGAgcGFyc2luZy4gT3B0aW1pc3RpY2FsbHkgY29udGludWUgZG93biB0aGlzXG4gICAgICAgICAgLy8gYnJhbmNoLCBidXQgbm90IGJlZm9yZSBleGFtaW5pbmcgdGhlIG90aGVyIHNpYmxpbmdzLlxuICAgICAgICAgIGZpcnN0Q2hpbGRyZW4ucHVzaChjaGlsZC5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXRDaGlsZCkge1xuICAgICAgICAvLyBFbXB0eWluZyBmaXJzdENoaWxkcmVuL2ZpbmRDb21wb25lbnRSb290UmV1c2FibGVBcnJheSBpc1xuICAgICAgICAvLyBub3QgbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcywgYnV0IGl0IGhlbHBzIHRoZSBHQyByZWNsYWltXG4gICAgICAgIC8vIGFueSBub2RlcyB0aGF0IHdlcmUgbGVmdCBhdCB0aGUgZW5kIG9mIHRoZSBzZWFyY2guXG4gICAgICAgIGZpcnN0Q2hpbGRyZW4ubGVuZ3RoID0gMDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0Q2hpbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmlyc3RDaGlsZHJlbi5sZW5ndGggPSAwO1xuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGZhbHNlLFxuICAgICAgJ2ZpbmRDb21wb25lbnRSb290KC4uLiwgJXMpOiBVbmFibGUgdG8gZmluZCBlbGVtZW50LiBUaGlzIHByb2JhYmx5ICcgK1xuICAgICAgJ21lYW5zIHRoZSBET00gd2FzIHVuZXhwZWN0ZWRseSBtdXRhdGVkIChlLmcuLCBieSB0aGUgYnJvd3NlciksICcgK1xuICAgICAgJ3VzdWFsbHkgZHVlIHRvIGZvcmdldHRpbmcgYSA8dGJvZHk+IHdoZW4gdXNpbmcgdGFibGVzLCBuZXN0aW5nIHRhZ3MgJyArXG4gICAgICAnbGlrZSA8Zm9ybT4sIDxwPiwgb3IgPGE+LCBvciB1c2luZyBub24tU1ZHIGVsZW1lbnRzIGluIGFuIDxzdmc+ICcgK1xuICAgICAgJ3BhcmVudC4gJyArXG4gICAgICAnVHJ5IGluc3BlY3RpbmcgdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBlbGVtZW50IHdpdGggUmVhY3QgSUQgYCVzYC4nLFxuICAgICAgdGFyZ2V0SUQsXG4gICAgICBSZWFjdE1vdW50LmdldElEKGFuY2VzdG9yTm9kZSlcbiAgICApIDogaW52YXJpYW50KGZhbHNlKSk7XG4gIH0sXG5cbiAgX21vdW50SW1hZ2VJbnRvTm9kZTogZnVuY3Rpb24obWFya3VwLCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3VwKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGNvbnRhaW5lciAmJiAoXG4gICAgICAgIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFIHx8IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQRSlcbiAgICAgICksXG4gICAgICAnbW91bnRDb21wb25lbnRJbnRvTm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCB2YWxpZC4nXG4gICAgKSA6IGludmFyaWFudChjb250YWluZXIgJiYgKFxuICAgICAgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFX1RZUEUgfHwgY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKVxuICAgICkpKTtcblxuICAgIGlmIChzaG91bGRSZXVzZU1hcmt1cCkge1xuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgICBpZiAoUmVhY3RNYXJrdXBDaGVja3N1bS5jYW5SZXVzZU1hcmt1cChtYXJrdXAsIHJvb3RFbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY2hlY2tzdW0gPSByb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgUmVhY3RNYXJrdXBDaGVja3N1bS5DSEVDS1NVTV9BVFRSX05BTUVcbiAgICAgICAgKTtcbiAgICAgICAgcm9vdEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FKTtcblxuICAgICAgICB2YXIgcm9vdE1hcmt1cCA9IHJvb3RFbGVtZW50Lm91dGVySFRNTDtcbiAgICAgICAgcm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FLFxuICAgICAgICAgIGNoZWNrc3VtXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIGRpZmZJbmRleCA9IGZpcnN0RGlmZmVyZW5jZUluZGV4KG1hcmt1cCwgcm9vdE1hcmt1cCk7XG4gICAgICAgIHZhciBkaWZmZXJlbmNlID0gJyAoY2xpZW50KSAnICtcbiAgICAgICAgICBtYXJrdXAuc3Vic3RyaW5nKGRpZmZJbmRleCAtIDIwLCBkaWZmSW5kZXggKyAyMCkgK1xuICAgICAgICAgICdcXG4gKHNlcnZlcikgJyArIHJvb3RNYXJrdXAuc3Vic3RyaW5nKGRpZmZJbmRleCAtIDIwLCBkaWZmSW5kZXggKyAyMCk7XG5cbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICBjb250YWluZXIubm9kZVR5cGUgIT09IERPQ19OT0RFX1RZUEUsXG4gICAgICAgICAgJ1lvdVxcJ3JlIHRyeWluZyB0byByZW5kZXIgYSBjb21wb25lbnQgdG8gdGhlIGRvY3VtZW50IHVzaW5nICcgK1xuICAgICAgICAgICdzZXJ2ZXIgcmVuZGVyaW5nIGJ1dCB0aGUgY2hlY2tzdW0gd2FzIGludmFsaWQuIFRoaXMgdXN1YWxseSAnICtcbiAgICAgICAgICAnbWVhbnMgeW91IHJlbmRlcmVkIGEgZGlmZmVyZW50IGNvbXBvbmVudCB0eXBlIG9yIHByb3BzIG9uICcgK1xuICAgICAgICAgICd0aGUgY2xpZW50IGZyb20gdGhlIG9uZSBvbiB0aGUgc2VydmVyLCBvciB5b3VyIHJlbmRlcigpICcgK1xuICAgICAgICAgICdtZXRob2RzIGFyZSBpbXB1cmUuIFJlYWN0IGNhbm5vdCBoYW5kbGUgdGhpcyBjYXNlIGR1ZSB0byAnICtcbiAgICAgICAgICAnY3Jvc3MtYnJvd3NlciBxdWlya3MgYnkgcmVuZGVyaW5nIGF0IHRoZSBkb2N1bWVudCByb290LiBZb3UgJyArXG4gICAgICAgICAgJ3Nob3VsZCBsb29rIGZvciBlbnZpcm9ubWVudCBkZXBlbmRlbnQgY29kZSBpbiB5b3VyIGNvbXBvbmVudHMgJyArXG4gICAgICAgICAgJ2FuZCBlbnN1cmUgdGhlIHByb3BzIGFyZSB0aGUgc2FtZSBjbGllbnQgYW5kIHNlcnZlciBzaWRlOlxcbiVzJyxcbiAgICAgICAgICBkaWZmZXJlbmNlXG4gICAgICAgICkgOiBpbnZhcmlhbnQoY29udGFpbmVyLm5vZGVUeXBlICE9PSBET0NfTk9ERV9UWVBFKSk7XG5cbiAgICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAnUmVhY3QgYXR0ZW1wdGVkIHRvIHJldXNlIG1hcmt1cCBpbiBhIGNvbnRhaW5lciBidXQgdGhlICcgK1xuICAgICAgICAgICAgJ2NoZWNrc3VtIHdhcyBpbnZhbGlkLiBUaGlzIGdlbmVyYWxseSBtZWFucyB0aGF0IHlvdSBhcmUgJyArXG4gICAgICAgICAgICAndXNpbmcgc2VydmVyIHJlbmRlcmluZyBhbmQgdGhlIG1hcmt1cCBnZW5lcmF0ZWQgb24gdGhlICcgK1xuICAgICAgICAgICAgJ3NlcnZlciB3YXMgbm90IHdoYXQgdGhlIGNsaWVudCB3YXMgZXhwZWN0aW5nLiBSZWFjdCBpbmplY3RlZCAnICtcbiAgICAgICAgICAgICduZXcgbWFya3VwIHRvIGNvbXBlbnNhdGUgd2hpY2ggd29ya3MgYnV0IHlvdSBoYXZlIGxvc3QgbWFueSAnICtcbiAgICAgICAgICAgICdvZiB0aGUgYmVuZWZpdHMgb2Ygc2VydmVyIHJlbmRlcmluZy4gSW5zdGVhZCwgZmlndXJlIG91dCAnICtcbiAgICAgICAgICAgICd3aHkgdGhlIG1hcmt1cCBiZWluZyBnZW5lcmF0ZWQgaXMgZGlmZmVyZW50IG9uIHRoZSBjbGllbnQgJyArXG4gICAgICAgICAgICAnb3Igc2VydmVyOlxcbiVzJyxcbiAgICAgICAgICAgIGRpZmZlcmVuY2VcbiAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgY29udGFpbmVyLm5vZGVUeXBlICE9PSBET0NfTk9ERV9UWVBFLFxuICAgICAgJ1lvdVxcJ3JlIHRyeWluZyB0byByZW5kZXIgYSBjb21wb25lbnQgdG8gdGhlIGRvY3VtZW50IGJ1dCAnICtcbiAgICAgICAgJ3lvdSBkaWRuXFwndCB1c2Ugc2VydmVyIHJlbmRlcmluZy4gV2UgY2FuXFwndCBkbyB0aGlzICcgK1xuICAgICAgICAnd2l0aG91dCB1c2luZyBzZXJ2ZXIgcmVuZGVyaW5nIGR1ZSB0byBjcm9zcy1icm93c2VyIHF1aXJrcy4gJyArXG4gICAgICAgICdTZWUgUmVhY3QucmVuZGVyVG9TdHJpbmcoKSBmb3Igc2VydmVyIHJlbmRlcmluZy4nXG4gICAgKSA6IGludmFyaWFudChjb250YWluZXIubm9kZVR5cGUgIT09IERPQ19OT0RFX1RZUEUpKTtcblxuICAgIHNldElubmVySFRNTChjb250YWluZXIsIG1hcmt1cCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlYWN0IElEIHV0aWxpdGllcy5cbiAgICovXG5cbiAgZ2V0UmVhY3RSb290SUQ6IGdldFJlYWN0Um9vdElELFxuXG4gIGdldElEOiBnZXRJRCxcblxuICBzZXRJRDogc2V0SUQsXG5cbiAgZ2V0Tm9kZTogZ2V0Tm9kZSxcblxuICBnZXROb2RlRnJvbUluc3RhbmNlOiBnZXROb2RlRnJvbUluc3RhbmNlLFxuXG4gIHB1cmdlSUQ6IHB1cmdlSURcbn07XG5cblJlYWN0UGVyZi5tZWFzdXJlTWV0aG9kcyhSZWFjdE1vdW50LCAnUmVhY3RNb3VudCcsIHtcbiAgX3JlbmRlck5ld1Jvb3RDb21wb25lbnQ6ICdfcmVuZGVyTmV3Um9vdENvbXBvbmVudCcsXG4gIF9tb3VudEltYWdlSW50b05vZGU6ICdfbW91bnRJbWFnZUludG9Ob2RlJ1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RNb3VudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JOYjNWdWRDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUk5iM1Z1ZEZ4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlFUlBUVkJ5YjNCbGNuUjVJRDBnY21WeGRXbHlaU2hjSWk0dlJFOU5VSEp2Y0dWeWRIbGNJaWs3WEc1MllYSWdVbVZoWTNSQ2NtOTNjMlZ5UlhabGJuUkZiV2wwZEdWeUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkNjbTkzYzJWeVJYWmxiblJGYldsMGRHVnlYQ0lwTzF4dWRtRnlJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEZFhKeVpXNTBUM2R1WlhKY0lpazdYRzUyWVhJZ1VtVmhZM1JGYkdWdFpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYkdWdFpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFJXeGxiV1Z1ZEZaaGJHbGtZWFJ2Y2lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJXeGxiV1Z1ZEZaaGJHbGtZWFJ2Y2x3aUtUdGNiblpoY2lCU1pXRmpkRVZ0Y0hSNVEyOXRjRzl1Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiWEIwZVVOdmJYQnZibVZ1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWelhDSXBPMXh1ZG1GeUlGSmxZV04wU1c1emRHRnVZMlZOWVhBZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFbHVjM1JoYm1ObFRXRndYQ0lwTzF4dWRtRnlJRkpsWVdOMFRXRnlhM1Z3UTJobFkydHpkVzBnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEUxaGNtdDFjRU5vWldOcmMzVnRYQ0lwTzF4dWRtRnlJRkpsWVdOMFVHVnlaaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVUdWeVpsd2lLVHRjYm5aaGNpQlNaV0ZqZEZKbFkyOXVZMmxzWlhJZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGSmxZMjl1WTJsc1pYSmNJaWs3WEc1MllYSWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBWWEJrWVhSbFVYVmxkV1ZjSWlrN1hHNTJZWElnVW1WaFkzUlZjR1JoZEdWeklEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlZjR1JoZEdWelhDSXBPMXh1WEc1MllYSWdaVzF3ZEhsUFltcGxZM1FnUFNCeVpYRjFhWEpsS0Z3aUxpOWxiWEIwZVU5aWFtVmpkRndpS1R0Y2JuWmhjaUJqYjI1MFlXbHVjMDV2WkdVZ1BTQnlaWEYxYVhKbEtGd2lMaTlqYjI1MFlXbHVjMDV2WkdWY0lpazdYRzUyWVhJZ1oyVjBVbVZoWTNSU2IyOTBSV3hsYldWdWRFbHVRMjl1ZEdGcGJtVnlJRDBnY21WeGRXbHlaU2hjSWk0dloyVjBVbVZoWTNSU2IyOTBSV3hsYldWdWRFbHVRMjl1ZEdGcGJtVnlYQ0lwTzF4dWRtRnlJR2x1YzNSaGJuUnBZWFJsVW1WaFkzUkRiMjF3YjI1bGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuTjBZVzUwYVdGMFpWSmxZV04wUTI5dGNHOXVaVzUwWENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUJ6WlhSSmJtNWxja2hVVFV3Z1BTQnlaWEYxYVhKbEtGd2lMaTl6WlhSSmJtNWxja2hVVFV4Y0lpazdYRzUyWVhJZ2MyaHZkV3hrVlhCa1lYUmxVbVZoWTNSRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTl6YUc5MWJHUlZjR1JoZEdWU1pXRmpkRU52YlhCdmJtVnVkRndpS1R0Y2JuWmhjaUIzWVhKdWFXNW5JRDBnY21WeGRXbHlaU2hjSWk0dmQyRnlibWx1WjF3aUtUdGNibHh1ZG1GeUlGTkZVRUZTUVZSUFVpQTlJRkpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6TGxORlVFRlNRVlJQVWp0Y2JseHVkbUZ5SUVGVVZGSmZUa0ZOUlNBOUlFUlBUVkJ5YjNCbGNuUjVMa2xFWDBGVVZGSkpRbFZVUlY5T1FVMUZPMXh1ZG1GeUlHNXZaR1ZEWVdOb1pTQTlJSHQ5TzF4dVhHNTJZWElnUlV4RlRVVk9WRjlPVDBSRlgxUlpVRVVnUFNBeE8xeHVkbUZ5SUVSUFExOU9UMFJGWDFSWlVFVWdQU0E1TzF4dVhHNHZLaW9nVFdGd2NHbHVaeUJtY205dElISmxZV04wVW05dmRFbEVJSFJ2SUZKbFlXTjBJR052YlhCdmJtVnVkQ0JwYm5OMFlXNWpaUzRnS2k5Y2JuWmhjaUJwYm5OMFlXNWpaWE5DZVZKbFlXTjBVbTl2ZEVsRUlEMGdlMzA3WEc1Y2JpOHFLaUJOWVhCd2FXNW5JR1p5YjIwZ2NtVmhZM1JTYjI5MFNVUWdkRzhnWUdOdmJuUmhhVzVsY21BZ2JtOWtaWE11SUNvdlhHNTJZWElnWTI5dWRHRnBibVZ5YzBKNVVtVmhZM1JTYjI5MFNVUWdQU0I3ZlR0Y2JseHVhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBdktpb2dYMTlFUlZaZlh5MXZibXg1SUcxaGNIQnBibWNnWm5KdmJTQnlaV0ZqZEZKdmIzUkpSQ0IwYnlCeWIyOTBJR1ZzWlcxbGJuUnpMaUFxTDF4dUlDQjJZWElnY205dmRFVnNaVzFsYm5SelFubFNaV0ZqZEZKdmIzUkpSQ0E5SUh0OU8xeHVmVnh1WEc0dkx5QlZjMlZrSUhSdklITjBiM0psSUdKeVpXRmtkR2d0Wm1seWMzUWdjMlZoY21Ob0lITjBZWFJsSUdsdUlHWnBibVJEYjIxd2IyNWxiblJTYjI5MExseHVkbUZ5SUdacGJtUkRiMjF3YjI1bGJuUlNiMjkwVW1WMWMyRmliR1ZCY25KaGVTQTlJRnRkTzF4dVhHNHZLaXBjYmlBcUlFWnBibVJ6SUhSb1pTQnBibVJsZUNCdlppQjBhR1VnWm1seWMzUWdZMmhoY21GamRHVnlYRzRnS2lCMGFHRjBKM01nYm05MElHTnZiVzF2YmlCaVpYUjNaV1Z1SUhSb1pTQjBkMjhnWjJsMlpXNGdjM1J5YVc1bmN5NWNiaUFxWEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlIUm9aU0JwYm1SbGVDQnZaaUIwYUdVZ1kyaGhjbUZqZEdWeUlIZG9aWEpsSUhSb1pTQnpkSEpwYm1keklHUnBkbVZ5WjJWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWm1seWMzUkVhV1ptWlhKbGJtTmxTVzVrWlhnb2MzUnlhVzVuTVN3Z2MzUnlhVzVuTWlrZ2UxeHVJQ0IyWVhJZ2JXbHVUR1Z1SUQwZ1RXRjBhQzV0YVc0b2MzUnlhVzVuTVM1c1pXNW5kR2dzSUhOMGNtbHVaekl1YkdWdVozUm9LVHRjYmlBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQnRhVzVNWlc0N0lHa3JLeWtnZTF4dUlDQWdJR2xtSUNoemRISnBibWN4TG1Ob1lYSkJkQ2hwS1NBaFBUMGdjM1J5YVc1bk1pNWphR0Z5UVhRb2FTa3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnBPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2MzUnlhVzVuTVM1c1pXNW5kR2dnUFQwOUlITjBjbWx1WnpJdWJHVnVaM1JvSUQ4Z0xURWdPaUJ0YVc1TVpXNDdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0RVQwMUZiR1Z0Wlc1MGZTQmpiMjUwWVdsdVpYSWdSRTlOSUdWc1pXMWxiblFnZEdoaGRDQnRZWGtnWTI5dWRHRnBiaUJoSUZKbFlXTjBJR052YlhCdmJtVnVkQzVjYmlBcUlFQnlaWFIxY200Z2V6OXpkSEpwYm1kOUlFRWdYQ0p5WldGamRGSnZiM1JjSWlCSlJDd2dhV1lnWVNCU1pXRmpkQ0JqYjIxd2IyNWxiblFnYVhNZ2NtVnVaR1Z5WldRdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdkbGRGSmxZV04wVW05dmRFbEVLR052Ym5SaGFXNWxjaWtnZTF4dUlDQjJZWElnY205dmRFVnNaVzFsYm5RZ1BTQm5aWFJTWldGamRGSnZiM1JGYkdWdFpXNTBTVzVEYjI1MFlXbHVaWElvWTI5dWRHRnBibVZ5S1R0Y2JpQWdjbVYwZFhKdUlISnZiM1JGYkdWdFpXNTBJQ1ltSUZKbFlXTjBUVzkxYm5RdVoyVjBTVVFvY205dmRFVnNaVzFsYm5RcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVGalkyVnpjMmx1WnlCdWIyUmxXMEZVVkZKZlRrRk5SVjBnYjNJZ1kyRnNiR2x1WnlCblpYUkJkSFJ5YVdKMWRHVW9RVlJVVWw5T1FVMUZLU0J2YmlCaElHWnZjbTFjYmlBcUlHVnNaVzFsYm5RZ1kyRnVJSEpsZEhWeWJpQnBkSE1nWTI5dWRISnZiQ0IzYUc5elpTQnVZVzFsSUc5eUlFbEVJR1Z4ZFdGc2N5QkJWRlJTWDA1QlRVVXVJRUZzYkZ4dUlDb2dSRTlOSUc1dlpHVnpJSE4xY0hCdmNuUWdZR2RsZEVGMGRISnBZblYwWlU1dlpHVmdJR0oxZENCMGFHbHpJR05oYmlCaGJITnZJR2RsZENCallXeHNaV1FnYjI1Y2JpQXFJRzkwYUdWeUlHOWlhbVZqZEhNZ2MyOGdhblZ6ZENCeVpYUjFjbTRnSnljZ2FXWWdkMlVuY21VZ1oybDJaVzRnYzI5dFpYUm9hVzVuSUc5MGFHVnlJSFJvWVc0Z1lWeHVJQ29nUkU5TklHNXZaR1VnS0hOMVkyZ2dZWE1nZDJsdVpHOTNLUzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlejlFVDAxRmJHVnRaVzUwZkVSUFRWZHBibVJ2ZDN4RVQwMUViMk4xYldWdWRIeEVUMDFVWlhoMFRtOWtaWDBnYm05a1pTQkVUMDBnYm05a1pTNWNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnU1VRZ2IyWWdkR2hsSUhOMWNIQnNhV1ZrSUdCa2IyMU9iMlJsWUM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWjJWMFNVUW9ibTlrWlNrZ2UxeHVJQ0IyWVhJZ2FXUWdQU0JwYm5SbGNtNWhiRWRsZEVsRUtHNXZaR1VwTzF4dUlDQnBaaUFvYVdRcElIdGNiaUFnSUNCcFppQW9ibTlrWlVOaFkyaGxMbWhoYzA5M2JsQnliM0JsY25SNUtHbGtLU2tnZTF4dUlDQWdJQ0FnZG1GeUlHTmhZMmhsWkNBOUlHNXZaR1ZEWVdOb1pWdHBaRjA3WEc0Z0lDQWdJQ0JwWmlBb1kyRmphR1ZrSUNFOVBTQnViMlJsS1NCN1hHNGdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lDQWdJV2x6Vm1Gc2FXUW9ZMkZqYUdWa0xDQnBaQ2tzWEc0Z0lDQWdJQ0FnSUNBZ0oxSmxZV04wVFc5MWJuUTZJRlIzYnlCMllXeHBaQ0JpZFhRZ2RXNWxjWFZoYkNCdWIyUmxjeUIzYVhSb0lIUm9aU0J6WVcxbElHQWxjMkE2SUNWekp5eGNiaUFnSUNBZ0lDQWdJQ0JCVkZSU1gwNUJUVVVzSUdsa1hHNGdJQ0FnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVdselZtRnNhV1FvWTJGamFHVmtMQ0JwWkNrcEtUdGNibHh1SUNBZ0lDQWdJQ0J1YjJSbFEyRmphR1ZiYVdSZElEMGdibTlrWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdibTlrWlVOaFkyaGxXMmxrWFNBOUlHNXZaR1U3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJR2xrTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJwYm5SbGNtNWhiRWRsZEVsRUtHNXZaR1VwSUh0Y2JpQWdMeThnU1dZZ2JtOWtaU0JwY3lCemIyMWxkR2hwYm1jZ2JHbHJaU0JoSUhkcGJtUnZkeXdnWkc5amRXMWxiblFzSUc5eUlIUmxlSFFnYm05a1pTd2dibTl1WlNCdlpseHVJQ0F2THlCM2FHbGphQ0J6ZFhCd2IzSjBJR0YwZEhKcFluVjBaWE1nYjNJZ1lTQXVaMlYwUVhSMGNtbGlkWFJsSUcxbGRHaHZaQ3dnWjNKaFkyVm1kV3hzZVNCeVpYUjFjbTVjYmlBZ0x5OGdkR2hsSUdWdGNIUjVJSE4wY21sdVp5d2dZWE1nYVdZZ2RHaGxJR0YwZEhKcFluVjBaU0IzWlhKbElHMXBjM05wYm1jdVhHNGdJSEpsZEhWeWJpQnViMlJsSUNZbUlHNXZaR1V1WjJWMFFYUjBjbWxpZFhSbElDWW1JRzV2WkdVdVoyVjBRWFIwY21saWRYUmxLRUZVVkZKZlRrRk5SU2tnZkh3Z0p5YzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1UyVjBjeUIwYUdVZ1VtVmhZM1F0YzNCbFkybG1hV01nU1VRZ2IyWWdkR2hsSUdkcGRtVnVJRzV2WkdVdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0RVQwMUZiR1Z0Wlc1MGZTQnViMlJsSUZSb1pTQkVUMDBnYm05a1pTQjNhRzl6WlNCSlJDQjNhV3hzSUdKbElITmxkQzVjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQlVhR1VnZG1Gc2RXVWdiMllnZEdobElFbEVJR0YwZEhKcFluVjBaUzVjYmlBcUwxeHVablZ1WTNScGIyNGdjMlYwU1VRb2JtOWtaU3dnYVdRcElIdGNiaUFnZG1GeUlHOXNaRWxFSUQwZ2FXNTBaWEp1WVd4SFpYUkpSQ2h1YjJSbEtUdGNiaUFnYVdZZ0tHOXNaRWxFSUNFOVBTQnBaQ2tnZTF4dUlDQWdJR1JsYkdWMFpTQnViMlJsUTJGamFHVmJiMnhrU1VSZE8xeHVJQ0I5WEc0Z0lHNXZaR1V1YzJWMFFYUjBjbWxpZFhSbEtFRlVWRkpmVGtGTlJTd2dhV1FwTzF4dUlDQnViMlJsUTJGamFHVmJhV1JkSUQwZ2JtOWtaVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkdhVzVrY3lCMGFHVWdibTlrWlNCM2FYUm9JSFJvWlNCemRYQndiR2xsWkNCU1pXRmpkQzFuWlc1bGNtRjBaV1FnUkU5TklFbEVMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnBaQ0JCSUZKbFlXTjBMV2RsYm1WeVlYUmxaQ0JFVDAwZ1NVUXVYRzRnS2lCQWNtVjBkWEp1SUh0RVQwMUZiR1Z0Wlc1MGZTQkVUMDBnYm05a1pTQjNhWFJvSUhSb1pTQnpkWEJ3YkdWa0lHQnBaR0F1WEc0Z0tpQkFhVzUwWlhKdVlXeGNiaUFxTDF4dVpuVnVZM1JwYjI0Z1oyVjBUbTlrWlNocFpDa2dlMXh1SUNCcFppQW9JVzV2WkdWRFlXTm9aUzVvWVhOUGQyNVFjbTl3WlhKMGVTaHBaQ2tnZkh3Z0lXbHpWbUZzYVdRb2JtOWtaVU5oWTJobFcybGtYU3dnYVdRcEtTQjdYRzRnSUNBZ2JtOWtaVU5oWTJobFcybGtYU0E5SUZKbFlXTjBUVzkxYm5RdVptbHVaRkpsWVdOMFRtOWtaVUo1U1VRb2FXUXBPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnViMlJsUTJGamFHVmJhV1JkTzF4dWZWeHVYRzR2S2lwY2JpQXFJRVpwYm1SeklIUm9aU0J1YjJSbElIZHBkR2dnZEdobElITjFjSEJzYVdWa0lIQjFZbXhwWXlCU1pXRmpkQ0JwYm5OMFlXNWpaUzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdleXA5SUdsdWMzUmhibU5sSUVFZ2NIVmliR2xqSUZKbFlXTjBJR2x1YzNSaGJtTmxMbHh1SUNvZ1FISmxkSFZ5YmlCN1AwUlBUVVZzWlcxbGJuUjlJRVJQVFNCdWIyUmxJSGRwZEdnZ2RHaGxJSE4xY0hCc1pXUWdZR2xrWUM1Y2JpQXFJRUJwYm5SbGNtNWhiRnh1SUNvdlhHNW1kVzVqZEdsdmJpQm5aWFJPYjJSbFJuSnZiVWx1YzNSaGJtTmxLR2x1YzNSaGJtTmxLU0I3WEc0Z0lIWmhjaUJwWkNBOUlGSmxZV04wU1c1emRHRnVZMlZOWVhBdVoyVjBLR2x1YzNSaGJtTmxLUzVmY205dmRFNXZaR1ZKUkR0Y2JpQWdhV1lnS0ZKbFlXTjBSVzF3ZEhsRGIyMXdiMjVsYm5RdWFYTk9kV3hzUTI5dGNHOXVaVzUwU1VRb2FXUXBLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lIMWNiaUFnYVdZZ0tDRnViMlJsUTJGamFHVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2FXUXBJSHg4SUNGcGMxWmhiR2xrS0c1dlpHVkRZV05vWlZ0cFpGMHNJR2xrS1NrZ2UxeHVJQ0FnSUc1dlpHVkRZV05vWlZ0cFpGMGdQU0JTWldGamRFMXZkVzUwTG1acGJtUlNaV0ZqZEU1dlpHVkNlVWxFS0dsa0tUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2JtOWtaVU5oWTJobFcybGtYVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkJJRzV2WkdVZ2FYTWdYQ0oyWVd4cFpGd2lJR2xtSUdsMElHbHpJR052Ym5SaGFXNWxaQ0JpZVNCaElHTjFjbkpsYm5Sc2VTQnRiM1Z1ZEdWa0lHTnZiblJoYVc1bGNpNWNiaUFxWEc0Z0tpQlVhR2x6SUcxbFlXNXpJSFJvWVhRZ2RHaGxJRzV2WkdVZ1pHOWxjeUJ1YjNRZ2FHRjJaU0IwYnlCaVpTQmpiMjUwWVdsdVpXUWdZbmtnWVNCa2IyTjFiV1Z1ZENCcGJseHVJQ29nYjNKa1pYSWdkRzhnWW1VZ1kyOXVjMmxrWlhKbFpDQjJZV3hwWkM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZXo5RVQwMUZiR1Z0Wlc1MGZTQnViMlJsSUZSb1pTQmpZVzVrYVdSaGRHVWdSRTlOSUc1dlpHVXVYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1ZHaGxJR1Y0Y0dWamRHVmtJRWxFSUc5bUlIUm9aU0J1YjJSbExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjBnVjJobGRHaGxjaUIwYUdVZ2JtOWtaU0JwY3lCamIyNTBZV2x1WldRZ1lua2dZU0J0YjNWdWRHVmtJR052Ym5SaGFXNWxjaTVjYmlBcUwxeHVablZ1WTNScGIyNGdhWE5XWVd4cFpDaHViMlJsTENCcFpDa2dlMXh1SUNCcFppQW9ibTlrWlNrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0JwYm5SbGNtNWhiRWRsZEVsRUtHNXZaR1VwSUQwOVBTQnBaQ3hjYmlBZ0lDQWdJQ2RTWldGamRFMXZkVzUwT2lCVmJtVjRjR1ZqZEdWa0lHMXZaR2xtYVdOaGRHbHZiaUJ2WmlCZ0pYTmdKeXhjYmlBZ0lDQWdJRUZVVkZKZlRrRk5SVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvYVc1MFpYSnVZV3hIWlhSSlJDaHViMlJsS1NBOVBUMGdhV1FwS1R0Y2JseHVJQ0FnSUhaaGNpQmpiMjUwWVdsdVpYSWdQU0JTWldGamRFMXZkVzUwTG1acGJtUlNaV0ZqZEVOdmJuUmhhVzVsY2tadmNrbEVLR2xrS1R0Y2JpQWdJQ0JwWmlBb1kyOXVkR0ZwYm1WeUlDWW1JR052Ym5SaGFXNXpUbTlrWlNoamIyNTBZV2x1WlhJc0lHNXZaR1VwS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z1ptRnNjMlU3WEc1OVhHNWNiaThxS2x4dUlDb2dRMkYxYzJWeklIUm9aU0JqWVdOb1pTQjBieUJtYjNKblpYUWdZV0p2ZFhRZ2IyNWxJRkpsWVdOMExYTndaV05wWm1saklFbEVMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnBaQ0JVYUdVZ1NVUWdkRzhnWm05eVoyVjBMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQndkWEpuWlVsRUtHbGtLU0I3WEc0Z0lHUmxiR1YwWlNCdWIyUmxRMkZqYUdWYmFXUmRPMXh1ZlZ4dVhHNTJZWElnWkdWbGNHVnpkRTV2WkdWVGIwWmhjaUE5SUc1MWJHdzdYRzVtZFc1amRHbHZiaUJtYVc1a1JHVmxjR1Z6ZEVOaFkyaGxaRUZ1WTJWemRHOXlTVzF3YkNoaGJtTmxjM1J2Y2tsRUtTQjdYRzRnSUhaaGNpQmhibU5sYzNSdmNpQTlJRzV2WkdWRFlXTm9aVnRoYm1ObGMzUnZja2xFWFR0Y2JpQWdhV1lnS0dGdVkyVnpkRzl5SUNZbUlHbHpWbUZzYVdRb1lXNWpaWE4wYjNJc0lHRnVZMlZ6ZEc5eVNVUXBLU0I3WEc0Z0lDQWdaR1ZsY0dWemRFNXZaR1ZUYjBaaGNpQTlJR0Z1WTJWemRHOXlPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJQzh2SUZSb2FYTWdibTlrWlNCcGMyNG5kQ0J3YjNCMWJHRjBaV1FnYVc0Z2RHaGxJR05oWTJobExDQnpieUJ3Y21WemRXMWhZbXg1SUc1dmJtVWdiMllnYVhSelhHNGdJQ0FnTHk4Z1pHVnpZMlZ1WkdGdWRITWdZWEpsTGlCQ2NtVmhheUJ2ZFhRZ2IyWWdkR2hsSUd4dmIzQXVYRzRnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVJSFJvWlNCa1pXVndaWE4wSUdOaFkyaGxaQ0J1YjJSbElIZG9iM05sSUVsRUlHbHpJR0VnY0hKbFptbDRJRzltSUdCMFlYSm5aWFJKUkdBdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdacGJtUkVaV1Z3WlhOMFEyRmphR1ZrUVc1alpYTjBiM0lvZEdGeVoyVjBTVVFwSUh0Y2JpQWdaR1ZsY0dWemRFNXZaR1ZUYjBaaGNpQTlJRzUxYkd3N1hHNGdJRkpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6TG5SeVlYWmxjbk5sUVc1alpYTjBiM0p6S0Z4dUlDQWdJSFJoY21kbGRFbEVMRnh1SUNBZ0lHWnBibVJFWldWd1pYTjBRMkZqYUdWa1FXNWpaWE4wYjNKSmJYQnNYRzRnSUNrN1hHNWNiaUFnZG1GeUlHWnZkVzVrVG05a1pTQTlJR1JsWlhCbGMzUk9iMlJsVTI5R1lYSTdYRzRnSUdSbFpYQmxjM1JPYjJSbFUyOUdZWElnUFNCdWRXeHNPMXh1SUNCeVpYUjFjbTRnWm05MWJtUk9iMlJsTzF4dWZWeHVYRzR2S2lwY2JpQXFJRTF2ZFc1MGN5QjBhR2x6SUdOdmJYQnZibVZ1ZENCaGJtUWdhVzV6WlhKMGN5QnBkQ0JwYm5SdklIUm9aU0JFVDAwdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRU52YlhCdmJtVnVkSDBnWTI5dGNHOXVaVzUwU1c1emRHRnVZMlVnVkdobElHbHVjM1JoYm1ObElIUnZJRzF2ZFc1MExseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSEp2YjNSSlJDQkVUMDBnU1VRZ2IyWWdkR2hsSUhKdmIzUWdibTlrWlM1Y2JpQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnWTI5dWRHRnBibVZ5SUVSUFRTQmxiR1Z0Wlc1MElIUnZJRzF2ZFc1MElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2UxSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI1OUlIUnlZVzV6WVdOMGFXOXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUhOb2IzVnNaRkpsZFhObFRXRnlhM1Z3SUVsbUlIUnlkV1VzSUdSdklHNXZkQ0JwYm5ObGNuUWdiV0Z5YTNWd1hHNGdLaTljYm1aMWJtTjBhVzl1SUcxdmRXNTBRMjl0Y0c5dVpXNTBTVzUwYjA1dlpHVW9YRzRnSUNBZ1kyOXRjRzl1Wlc1MFNXNXpkR0Z1WTJVc1hHNGdJQ0FnY205dmRFbEVMRnh1SUNBZ0lHTnZiblJoYVc1bGNpeGNiaUFnSUNCMGNtRnVjMkZqZEdsdmJpeGNiaUFnSUNCemFHOTFiR1JTWlhWelpVMWhjbXQxY0NrZ2UxeHVJQ0IyWVhJZ2JXRnlhM1Z3SUQwZ1VtVmhZM1JTWldOdmJtTnBiR1Z5TG0xdmRXNTBRMjl0Y0c5dVpXNTBLRnh1SUNBZ0lHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObExDQnliMjkwU1VRc0lIUnlZVzV6WVdOMGFXOXVMQ0JsYlhCMGVVOWlhbVZqZEZ4dUlDQXBPMXh1SUNCamIyMXdiMjVsYm5SSmJuTjBZVzVqWlM1ZmFYTlViM0JNWlhabGJDQTlJSFJ5ZFdVN1hHNGdJRkpsWVdOMFRXOTFiblF1WDIxdmRXNTBTVzFoWjJWSmJuUnZUbTlrWlNodFlYSnJkWEFzSUdOdmJuUmhhVzVsY2l3Z2MyaHZkV3hrVW1WMWMyVk5ZWEpyZFhBcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVKaGRHTm9aV1FnYlc5MWJuUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ1kyOXRjRzl1Wlc1MFNXNXpkR0Z1WTJVZ1ZHaGxJR2x1YzNSaGJtTmxJSFJ2SUcxdmRXNTBMbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhKdmIzUkpSQ0JFVDAwZ1NVUWdiMllnZEdobElISnZiM1FnYm05a1pTNWNiaUFxSUVCd1lYSmhiU0I3UkU5TlJXeGxiV1Z1ZEgwZ1kyOXVkR0ZwYm1WeUlFUlBUU0JsYkdWdFpXNTBJSFJ2SUcxdmRXNTBJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSE5vYjNWc1pGSmxkWE5sVFdGeWEzVndJRWxtSUhSeWRXVXNJR1J2SUc1dmRDQnBibk5sY25RZ2JXRnlhM1Z3WEc0Z0tpOWNibVoxYm1OMGFXOXVJR0poZEdOb1pXUk5iM1Z1ZEVOdmJYQnZibVZ1ZEVsdWRHOU9iMlJsS0Z4dUlDQWdJR052YlhCdmJtVnVkRWx1YzNSaGJtTmxMRnh1SUNBZ0lISnZiM1JKUkN4Y2JpQWdJQ0JqYjI1MFlXbHVaWElzWEc0Z0lDQWdjMmh2ZFd4a1VtVjFjMlZOWVhKcmRYQXBJSHRjYmlBZ2RtRnlJSFJ5WVc1ellXTjBhVzl1SUQwZ1VtVmhZM1JWY0dSaGRHVnpMbEpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNHVaMlYwVUc5dmJHVmtLQ2s3WEc0Z0lIUnlZVzV6WVdOMGFXOXVMbkJsY21admNtMG9YRzRnSUNBZ2JXOTFiblJEYjIxd2IyNWxiblJKYm5SdlRtOWtaU3hjYmlBZ0lDQnVkV3hzTEZ4dUlDQWdJR052YlhCdmJtVnVkRWx1YzNSaGJtTmxMRnh1SUNBZ0lISnZiM1JKUkN4Y2JpQWdJQ0JqYjI1MFlXbHVaWElzWEc0Z0lDQWdkSEpoYm5OaFkzUnBiMjRzWEc0Z0lDQWdjMmh2ZFd4a1VtVjFjMlZOWVhKcmRYQmNiaUFnS1R0Y2JpQWdVbVZoWTNSVmNHUmhkR1Z6TGxKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjR1Y21Wc1pXRnpaU2gwY21GdWMyRmpkR2x2YmlrN1hHNTlYRzVjYmk4cUtseHVJQ29nVFc5MWJuUnBibWNnYVhNZ2RHaGxJSEJ5YjJObGMzTWdiMllnYVc1cGRHbGhiR2w2YVc1bklHRWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MElHSjVJR055WldGMGFXNW5JR2wwYzF4dUlDb2djbVZ3Y21WelpXNTBZWFJwZG1VZ1JFOU5JR1ZzWlcxbGJuUnpJR0Z1WkNCcGJuTmxjblJwYm1jZ2RHaGxiU0JwYm5SdklHRWdjM1Z3Y0d4cFpXUWdZR052Ym5SaGFXNWxjbUF1WEc0Z0tpQkJibmtnY0hKcGIzSWdZMjl1ZEdWdWRDQnBibk5wWkdVZ1lHTnZiblJoYVc1bGNtQWdhWE1nWkdWemRISnZlV1ZrSUdsdUlIUm9aU0J3Y205alpYTnpMbHh1SUNwY2JpQXFJQ0FnVW1WaFkzUk5iM1Z1ZEM1eVpXNWtaWElvWEc0Z0tpQWdJQ0FnWTI5dGNHOXVaVzUwTEZ4dUlDb2dJQ0FnSUdSdlkzVnRaVzUwTG1kbGRFVnNaVzFsYm5SQ2VVbGtLQ2RqYjI1MFlXbHVaWEluS1Z4dUlDb2dJQ0FwTzF4dUlDcGNiaUFxSUNBZ1BHUnBkaUJwWkQxY0ltTnZiblJoYVc1bGNsd2lQaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4TFMwZ1UzVndjR3hwWldRZ1lHTnZiblJoYVc1bGNtQXVYRzRnS2lBZ0lDQWdQR1JwZGlCa1lYUmhMWEpsWVdOMGFXUTlYQ0l1TTF3aVBpQWdJQ0FnSUNBZ0lDQWdJQ0FnUEMwdElGSmxibVJsY21Wa0lISmxZV04wVW05dmRDQnZaaUJTWldGamRGeHVJQ29nSUNBZ0lDQWdMeThnTGk0dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHOXVaVzUwTGx4dUlDb2dJQ0FnSUR3dlpHbDJQbHh1SUNvZ0lDQThMMlJwZGo1Y2JpQXFYRzRnS2lCSmJuTnBaR1VnYjJZZ1lHTnZiblJoYVc1bGNtQXNJSFJvWlNCbWFYSnpkQ0JsYkdWdFpXNTBJSEpsYm1SbGNtVmtJR2x6SUhSb1pTQmNJbkpsWVdOMFVtOXZkRndpTGx4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JOYjNWdWRDQTlJSHRjYmlBZ0x5b3FJRVY0Y0c5elpXUWdabTl5SUdSbFluVm5aMmx1WnlCd2RYSndiM05sY3lBcUtpOWNiaUFnWDJsdWMzUmhibU5sYzBKNVVtVmhZM1JTYjI5MFNVUTZJR2x1YzNSaGJtTmxjMEo1VW1WaFkzUlNiMjkwU1VRc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZSb2FYTWdhWE1nWVNCb2IyOXJJSEJ5YjNacFpHVmtJSFJ2SUhOMWNIQnZjblFnY21WdVpHVnlhVzVuSUZKbFlXTjBJR052YlhCdmJtVnVkSE1nZDJocGJHVmNiaUFnSUNvZ1pXNXpkWEpwYm1jZ2RHaGhkQ0IwYUdVZ1lYQndZWEpsYm5RZ2MyTnliMnhzSUhCdmMybDBhVzl1SUc5bUlHbDBjeUJnWTI5dWRHRnBibVZ5WUNCa2IyVnpJRzV2ZEZ4dUlDQWdLaUJqYUdGdVoyVXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3UkU5TlJXeGxiV1Z1ZEgwZ1kyOXVkR0ZwYm1WeUlGUm9aU0JnWTI5dWRHRnBibVZ5WUNCaVpXbHVaeUJ5Wlc1a1pYSmxaQ0JwYm5SdkxseHVJQ0FnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCeVpXNWtaWEpEWVd4c1ltRmpheUJVYUdseklHMTFjM1FnWW1VZ1kyRnNiR1ZrSUc5dVkyVWdkRzhnWkc4Z2RHaGxJSEpsYm1SbGNpNWNiaUFnSUNvdlhHNGdJSE5qY205c2JFMXZibWwwYjNJNklHWjFibU4wYVc5dUtHTnZiblJoYVc1bGNpd2djbVZ1WkdWeVEyRnNiR0poWTJzcElIdGNiaUFnSUNCeVpXNWtaWEpEWVd4c1ltRmpheWdwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlVZV3RsSUdFZ1kyOXRjRzl1Wlc1MElIUm9ZWFFuY3lCaGJISmxZV1I1SUcxdmRXNTBaV1FnYVc1MGJ5QjBhR1VnUkU5TklHRnVaQ0J5WlhCc1lXTmxJR2wwY3lCd2NtOXdjMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCd2NtVjJRMjl0Y0c5dVpXNTBJR052YlhCdmJtVnVkQ0JwYm5OMFlXNWpaU0JoYkhKbFlXUjVJR2x1SUhSb1pTQkVUMDFjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUc1bGVIUkZiR1Z0Wlc1MElHTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTQjBieUJ5Wlc1a1pYSmNiaUFnSUNvZ1FIQmhjbUZ0SUh0RVQwMUZiR1Z0Wlc1MGZTQmpiMjUwWVdsdVpYSWdZMjl1ZEdGcGJtVnlJSFJ2SUhKbGJtUmxjaUJwYm5SdlhHNGdJQ0FxSUVCd1lYSmhiU0I3UDJaMWJtTjBhVzl1ZlNCallXeHNZbUZqYXlCbWRXNWpkR2x2YmlCMGNtbG5aMlZ5WldRZ2IyNGdZMjl0Y0d4bGRHbHZibHh1SUNBZ0tpOWNiaUFnWDNWd1pHRjBaVkp2YjNSRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtGeHVJQ0FnSUNBZ2NISmxka052YlhCdmJtVnVkQ3hjYmlBZ0lDQWdJRzVsZUhSRmJHVnRaVzUwTEZ4dUlDQWdJQ0FnWTI5dWRHRnBibVZ5TEZ4dUlDQWdJQ0FnWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0JTWldGamRFVnNaVzFsYm5SV1lXeHBaR0YwYjNJdVkyaGxZMnRCYm1SWFlYSnVSbTl5VFhWMFlYUmxaRkJ5YjNCektHNWxlSFJGYkdWdFpXNTBLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQlNaV0ZqZEUxdmRXNTBMbk5qY205c2JFMXZibWwwYjNJb1kyOXVkR0ZwYm1WeUxDQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJRkpsWVdOMFZYQmtZWFJsVVhWbGRXVXVaVzV4ZFdWMVpVVnNaVzFsYm5SSmJuUmxjbTVoYkNod2NtVjJRMjl0Y0c5dVpXNTBMQ0J1WlhoMFJXeGxiV1Z1ZENrN1hHNGdJQ0FnSUNCcFppQW9ZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQWdJQ0FnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVsYm5GMVpYVmxRMkZzYkdKaFkydEpiblJsY201aGJDaHdjbVYyUTI5dGNHOXVaVzUwTENCallXeHNZbUZqYXlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrN1hHNWNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNBdkx5QlNaV052Y21RZ2RHaGxJSEp2YjNRZ1pXeGxiV1Z1ZENCcGJpQmpZWE5sSUdsMElHeGhkR1Z5SUdkbGRITWdkSEpoYm5Od2JHRnVkR1ZrTGx4dUlDQWdJQ0FnY205dmRFVnNaVzFsYm5SelFubFNaV0ZqZEZKdmIzUkpSRnRuWlhSU1pXRmpkRkp2YjNSSlJDaGpiMjUwWVdsdVpYSXBYU0E5WEc0Z0lDQWdJQ0FnSUdkbGRGSmxZV04wVW05dmRFVnNaVzFsYm5SSmJrTnZiblJoYVc1bGNpaGpiMjUwWVdsdVpYSXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCd2NtVjJRMjl0Y0c5dVpXNTBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pXZHBjM1JsY2lCaElHTnZiWEJ2Ym1WdWRDQnBiblJ2SUhSb1pTQnBibk4wWVc1alpTQnRZWEFnWVc1a0lITjBZWEowY3lCelkzSnZiR3dnZG1Gc2RXVmNiaUFnSUNvZ2JXOXVhWFJ2Y21sdVoxeHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0J1WlhoMFEyOXRjRzl1Wlc1MElHTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTQjBieUJ5Wlc1a1pYSmNiaUFnSUNvZ1FIQmhjbUZ0SUh0RVQwMUZiR1Z0Wlc1MGZTQmpiMjUwWVdsdVpYSWdZMjl1ZEdGcGJtVnlJSFJ2SUhKbGJtUmxjaUJwYm5SdlhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnY21WaFkzUlNiMjkwSUVsRUlIQnlaV1pwZUZ4dUlDQWdLaTljYmlBZ1gzSmxaMmx6ZEdWeVEyOXRjRzl1Wlc1ME9pQm1kVzVqZEdsdmJpaHVaWGgwUTI5dGNHOXVaVzUwTENCamIyNTBZV2x1WlhJcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnWTI5dWRHRnBibVZ5SUNZbUlDaGNiaUFnSUNBZ0lDQWdLR052Ym5SaGFXNWxjaTV1YjJSbFZIbHdaU0E5UFQwZ1JVeEZUVVZPVkY5T1QwUkZYMVJaVUVVZ2ZId2dZMjl1ZEdGcGJtVnlMbTV2WkdWVWVYQmxJRDA5UFNCRVQwTmZUazlFUlY5VVdWQkZLVnh1SUNBZ0lDQWdLU3hjYmlBZ0lDQWdJQ2RmY21WbmFYTjBaWEpEYjIxd2IyNWxiblFvTGk0dUtUb2dWR0Z5WjJWMElHTnZiblJoYVc1bGNpQnBjeUJ1YjNRZ1lTQkVUMDBnWld4bGJXVnVkQzRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoamIyNTBZV2x1WlhJZ0ppWWdLRnh1SUNBZ0lDQWdLR052Ym5SaGFXNWxjaTV1YjJSbFZIbHdaU0E5UFQwZ1JVeEZUVVZPVkY5T1QwUkZYMVJaVUVVZ2ZId2dZMjl1ZEdGcGJtVnlMbTV2WkdWVWVYQmxJRDA5UFNCRVQwTmZUazlFUlY5VVdWQkZLVnh1SUNBZ0lDa3BLVHRjYmx4dUlDQWdJRkpsWVdOMFFuSnZkM05sY2tWMlpXNTBSVzFwZEhSbGNpNWxibk4xY21WVFkzSnZiR3hXWVd4MVpVMXZibWwwYjNKcGJtY29LVHRjYmx4dUlDQWdJSFpoY2lCeVpXRmpkRkp2YjNSSlJDQTlJRkpsWVdOMFRXOTFiblF1Y21WbmFYTjBaWEpEYjI1MFlXbHVaWElvWTI5dWRHRnBibVZ5S1R0Y2JpQWdJQ0JwYm5OMFlXNWpaWE5DZVZKbFlXTjBVbTl2ZEVsRVczSmxZV04wVW05dmRFbEVYU0E5SUc1bGVIUkRiMjF3YjI1bGJuUTdYRzRnSUNBZ2NtVjBkWEp1SUhKbFlXTjBVbTl2ZEVsRU8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlc1a1pYSWdZU0J1WlhjZ1kyOXRjRzl1Wlc1MElHbHVkRzhnZEdobElFUlBUUzVjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUc1bGVIUkZiR1Z0Wlc1MElHVnNaVzFsYm5RZ2RHOGdjbVZ1WkdWeVhHNGdJQ0FxSUVCd1lYSmhiU0I3UkU5TlJXeGxiV1Z1ZEgwZ1kyOXVkR0ZwYm1WeUlHTnZiblJoYVc1bGNpQjBieUJ5Wlc1a1pYSWdhVzUwYjF4dUlDQWdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSE5vYjNWc1pGSmxkWE5sVFdGeWEzVndJR2xtSUhkbElITm9iM1ZzWkNCemEybHdJSFJvWlNCdFlYSnJkWEFnYVc1elpYSjBhVzl1WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQnVaWGgwUTI5dGNHOXVaVzUwWEc0Z0lDQXFMMXh1SUNCZmNtVnVaR1Z5VG1WM1VtOXZkRU52YlhCdmJtVnVkRG9nWm5WdVkzUnBiMjRvWEc0Z0lDQWdibVY0ZEVWc1pXMWxiblFzWEc0Z0lDQWdZMjl1ZEdGcGJtVnlMRnh1SUNBZ0lITm9iM1ZzWkZKbGRYTmxUV0Z5YTNWd1hHNGdJQ2tnZTF4dUlDQWdJQzh2SUZaaGNtbHZkWE1nY0dGeWRITWdiMllnYjNWeUlHTnZaR1VnS0hOMVkyZ2dZWE1nVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUW5jMXh1SUNBZ0lDOHZJRjl5Wlc1a1pYSldZV3hwWkdGMFpXUkRiMjF3YjI1bGJuUXBJR0Z6YzNWdFpTQjBhR0YwSUdOaGJHeHpJSFJ2SUhKbGJtUmxjaUJoY21WdUozUWdibVZ6ZEdWa08xeHVJQ0FnSUM4dklIWmxjbWxtZVNCMGFHRjBJSFJvWVhRbmN5QjBhR1VnWTJGelpTNWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlMbU4xY25KbGJuUWdQVDBnYm5Wc2JDeGNiaUFnSUNBZ0lDZGZjbVZ1WkdWeVRtVjNVbTl2ZEVOdmJYQnZibVZ1ZENncE9pQlNaVzVrWlhJZ2JXVjBhRzlrY3lCemFHOTFiR1FnWW1VZ1lTQndkWEpsSUdaMWJtTjBhVzl1SUNjZ0sxeHVJQ0FnSUNBZ0oyOW1JSEJ5YjNCeklHRnVaQ0J6ZEdGMFpUc2dkSEpwWjJkbGNtbHVaeUJ1WlhOMFpXUWdZMjl0Y0c5dVpXNTBJSFZ3WkdGMFpYTWdabkp2YlNBbklDdGNiaUFnSUNBZ0lDZHlaVzVrWlhJZ2FYTWdibTkwSUdGc2JHOTNaV1F1SUVsbUlHNWxZMlZ6YzJGeWVTd2dkSEpwWjJkbGNpQnVaWE4wWldRZ2RYQmtZWFJsY3lCcGJpQW5JQ3RjYmlBZ0lDQWdJQ2RqYjIxd2IyNWxiblJFYVdSVmNHUmhkR1V1SjF4dUlDQWdJQ2tnT2lCdWRXeHNLVHRjYmx4dUlDQWdJSFpoY2lCamIyMXdiMjVsYm5SSmJuTjBZVzVqWlNBOUlHbHVjM1JoYm5ScFlYUmxVbVZoWTNSRGIyMXdiMjVsYm5Rb2JtVjRkRVZzWlcxbGJuUXNJRzUxYkd3cE8xeHVJQ0FnSUhaaGNpQnlaV0ZqZEZKdmIzUkpSQ0E5SUZKbFlXTjBUVzkxYm5RdVgzSmxaMmx6ZEdWeVEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUNBZ1kyOXRjRzl1Wlc1MFNXNXpkR0Z1WTJVc1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhKY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnTHk4Z1ZHaGxJR2x1YVhScFlXd2djbVZ1WkdWeUlHbHpJSE41Ym1Ob2NtOXViM1Z6SUdKMWRDQmhibmtnZFhCa1lYUmxjeUIwYUdGMElHaGhjSEJsYmlCa2RYSnBibWRjYmlBZ0lDQXZMeUJ5Wlc1a1pYSnBibWNzSUdsdUlHTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWRDQnZjaUJqYjIxd2IyNWxiblJFYVdSTmIzVnVkQ3dnZDJsc2JDQmlaU0JpWVhSamFHVmtYRzRnSUNBZ0x5OGdZV05qYjNKa2FXNW5JSFJ2SUhSb1pTQmpkWEp5Wlc1MElHSmhkR05vYVc1bklITjBjbUYwWldkNUxseHVYRzRnSUNBZ1VtVmhZM1JWY0dSaGRHVnpMbUpoZEdOb1pXUlZjR1JoZEdWektGeHVJQ0FnSUNBZ1ltRjBZMmhsWkUxdmRXNTBRMjl0Y0c5dVpXNTBTVzUwYjA1dlpHVXNYRzRnSUNBZ0lDQmpiMjF3YjI1bGJuUkpibk4wWVc1alpTeGNiaUFnSUNBZ0lISmxZV04wVW05dmRFbEVMRnh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlMRnh1SUNBZ0lDQWdjMmh2ZFd4a1VtVjFjMlZOWVhKcmRYQmNiaUFnSUNBcE8xeHVYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0x5OGdVbVZqYjNKa0lIUm9aU0J5YjI5MElHVnNaVzFsYm5RZ2FXNGdZMkZ6WlNCcGRDQnNZWFJsY2lCblpYUnpJSFJ5WVc1emNHeGhiblJsWkM1Y2JpQWdJQ0FnSUhKdmIzUkZiR1Z0Wlc1MGMwSjVVbVZoWTNSU2IyOTBTVVJiY21WaFkzUlNiMjkwU1VSZElEMWNiaUFnSUNBZ0lDQWdaMlYwVW1WaFkzUlNiMjkwUld4bGJXVnVkRWx1UTI5dWRHRnBibVZ5S0dOdmJuUmhhVzVsY2lrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJR052YlhCdmJtVnVkRWx1YzNSaGJtTmxPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pXNWtaWEp6SUdFZ1VtVmhZM1FnWTI5dGNHOXVaVzUwSUdsdWRHOGdkR2hsSUVSUFRTQnBiaUIwYUdVZ2MzVndjR3hwWldRZ1lHTnZiblJoYVc1bGNtQXVYRzRnSUNBcVhHNGdJQ0FxSUVsbUlIUm9aU0JTWldGamRDQmpiMjF3YjI1bGJuUWdkMkZ6SUhCeVpYWnBiM1Z6YkhrZ2NtVnVaR1Z5WldRZ2FXNTBieUJnWTI5dWRHRnBibVZ5WUN3Z2RHaHBjeUIzYVd4c1hHNGdJQ0FxSUhCbGNtWnZjbTBnWVc0Z2RYQmtZWFJsSUc5dUlHbDBJR0Z1WkNCdmJteDVJRzExZEdGMFpTQjBhR1VnUkU5TklHRnpJRzVsWTJWemMyRnllU0IwYnlCeVpXWnNaV04wSUhSb1pWeHVJQ0FnS2lCc1lYUmxjM1FnVW1WaFkzUWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBSV3hsYldWdWRIMGdibVY0ZEVWc1pXMWxiblFnUTI5dGNHOXVaVzUwSUdWc1pXMWxiblFnZEc4Z2NtVnVaR1Z5TGx4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUdOdmJuUmhhVzVsY2lCRVQwMGdaV3hsYldWdWRDQjBieUJ5Wlc1a1pYSWdhVzUwYnk1Y2JpQWdJQ29nUUhCaGNtRnRJSHMvWm5WdVkzUnBiMjU5SUdOaGJHeGlZV05ySUdaMWJtTjBhVzl1SUhSeWFXZG5aWEpsWkNCdmJpQmpiMjF3YkdWMGFXOXVYRzRnSUNBcUlFQnlaWFIxY200Z2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCRGIyMXdiMjVsYm5RZ2FXNXpkR0Z1WTJVZ2NtVnVaR1Z5WldRZ2FXNGdZR052Ym5SaGFXNWxjbUF1WEc0Z0lDQXFMMXh1SUNCeVpXNWtaWEk2SUdaMWJtTjBhVzl1S0c1bGVIUkZiR1Z0Wlc1MExDQmpiMjUwWVdsdVpYSXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaHVaWGgwUld4bGJXVnVkQ2tzWEc0Z0lDQWdJQ0FuVW1WaFkzUXVjbVZ1WkdWeUtDazZJRWx1ZG1Gc2FXUWdZMjl0Y0c5dVpXNTBJR1ZzWlcxbGJuUXVKWE1uTEZ4dUlDQWdJQ0FnS0Z4dUlDQWdJQ0FnSUNCMGVYQmxiMllnYm1WNGRFVnNaVzFsYm5RZ1BUMDlJQ2R6ZEhKcGJtY25JRDljYmlBZ0lDQWdJQ0FnSUNBbklFbHVjM1JsWVdRZ2IyWWdjR0Z6YzJsdVp5QmhiaUJsYkdWdFpXNTBJSE4wY21sdVp5d2diV0ZyWlNCemRYSmxJSFJ2SUdsdWMzUmhiblJwWVhSbElDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkcGRDQmllU0J3WVhOemFXNW5JR2wwSUhSdklGSmxZV04wTG1OeVpXRjBaVVZzWlcxbGJuUXVKeUE2WEc0Z0lDQWdJQ0FnSUhSNWNHVnZaaUJ1WlhoMFJXeGxiV1Z1ZENBOVBUMGdKMloxYm1OMGFXOXVKeUEvWEc0Z0lDQWdJQ0FnSUNBZ0p5Qkpibk4wWldGa0lHOW1JSEJoYzNOcGJtY2dZU0JqYjIxd2IyNWxiblFnWTJ4aGMzTXNJRzFoYTJVZ2MzVnlaU0IwYnlCcGJuTjBZVzUwYVdGMFpTQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBbmFYUWdZbmtnY0dGemMybHVaeUJwZENCMGJ5QlNaV0ZqZEM1amNtVmhkR1ZGYkdWdFpXNTBMaWNnT2x4dUlDQWdJQ0FnSUNBdkx5QkRhR1ZqYXlCcFppQnBkQ0J4ZFdGamEzTWdiR2xyWlNCaGJpQmxiR1Z0Wlc1MFhHNGdJQ0FnSUNBZ0lHNWxlSFJGYkdWdFpXNTBJQ0U5SUc1MWJHd2dKaVlnYm1WNGRFVnNaVzFsYm5RdWNISnZjSE1nSVQwOUlIVnVaR1ZtYVc1bFpDQS9YRzRnSUNBZ0lDQWdJQ0FnSnlCVWFHbHpJRzFoZVNCaVpTQmpZWFZ6WldRZ1lua2dkVzVwYm5SbGJuUnBiMjVoYkd4NUlHeHZZV1JwYm1jZ2RIZHZJR2x1WkdWd1pXNWtaVzUwSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2RqYjNCcFpYTWdiMllnVW1WaFkzUXVKeUE2WEc0Z0lDQWdJQ0FnSUNBZ0p5ZGNiaUFnSUNBZ0lDbGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRkpsWVdOMFJXeGxiV1Z1ZEM1cGMxWmhiR2xrUld4bGJXVnVkQ2h1WlhoMFJXeGxiV1Z1ZENrcEtUdGNibHh1SUNBZ0lIWmhjaUJ3Y21WMlEyOXRjRzl1Wlc1MElEMGdhVzV6ZEdGdVkyVnpRbmxTWldGamRGSnZiM1JKUkZ0blpYUlNaV0ZqZEZKdmIzUkpSQ2hqYjI1MFlXbHVaWElwWFR0Y2JseHVJQ0FnSUdsbUlDaHdjbVYyUTI5dGNHOXVaVzUwS1NCN1hHNGdJQ0FnSUNCMllYSWdjSEpsZGtWc1pXMWxiblFnUFNCd2NtVjJRMjl0Y0c5dVpXNTBMbDlqZFhKeVpXNTBSV3hsYldWdWREdGNiaUFnSUNBZ0lHbG1JQ2h6YUc5MWJHUlZjR1JoZEdWU1pXRmpkRU52YlhCdmJtVnVkQ2h3Y21WMlJXeGxiV1Z1ZEN3Z2JtVjRkRVZzWlcxbGJuUXBLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJTWldGamRFMXZkVzUwTGw5MWNHUmhkR1ZTYjI5MFEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUNBZ0lDQWdJSEJ5WlhaRGIyMXdiMjVsYm5Rc1hHNGdJQ0FnSUNBZ0lDQWdibVY0ZEVWc1pXMWxiblFzWEc0Z0lDQWdJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxGeHVJQ0FnSUNBZ0lDQWdJR05oYkd4aVlXTnJYRzRnSUNBZ0lDQWdJQ2t1WjJWMFVIVmliR2xqU1c1emRHRnVZMlVvS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUZKbFlXTjBUVzkxYm5RdWRXNXRiM1Z1ZEVOdmJYQnZibVZ1ZEVGMFRtOWtaU2hqYjI1MFlXbHVaWElwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCeVpXRmpkRkp2YjNSRmJHVnRaVzUwSUQwZ1oyVjBVbVZoWTNSU2IyOTBSV3hsYldWdWRFbHVRMjl1ZEdGcGJtVnlLR052Ym5SaGFXNWxjaWs3WEc0Z0lDQWdkbUZ5SUdOdmJuUmhhVzVsY2toaGMxSmxZV04wVFdGeWEzVndJRDFjYmlBZ0lDQWdJSEpsWVdOMFVtOXZkRVZzWlcxbGJuUWdKaVlnVW1WaFkzUk5iM1Z1ZEM1cGMxSmxibVJsY21Wa1FubFNaV0ZqZENoeVpXRmpkRkp2YjNSRmJHVnRaVzUwS1R0Y2JseHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hZMjl1ZEdGcGJtVnlTR0Z6VW1WaFkzUk5ZWEpyZFhBZ2ZId2djbVZoWTNSU2IyOTBSV3hsYldWdWRDNXVaWGgwVTJsaWJHbHVaeWtnZTF4dUlDQWdJQ0FnSUNCMllYSWdjbTl2ZEVWc1pXMWxiblJUYVdKc2FXNW5JRDBnY21WaFkzUlNiMjkwUld4bGJXVnVkRHRjYmlBZ0lDQWdJQ0FnZDJocGJHVWdLSEp2YjNSRmJHVnRaVzUwVTJsaWJHbHVaeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hTWldGamRFMXZkVzUwTG1selVtVnVaR1Z5WldSQ2VWSmxZV04wS0hKdmIzUkZiR1Z0Wlc1MFUybGliR2x1WnlrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSjNKbGJtUmxjaWdwT2lCVVlYSm5aWFFnYm05a1pTQm9ZWE1nYldGeWEzVndJSEpsYm1SbGNtVmtJR0o1SUZKbFlXTjBMQ0JpZFhRZ2RHaGxjbVVnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNkaGNtVWdkVzV5Wld4aGRHVmtJRzV2WkdWeklHRnpJSGRsYkd3dUlGUm9hWE1nYVhNZ2JXOXpkQ0JqYjIxdGIyNXNlU0JqWVhWelpXUWdZbmtnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNkM2FHbDBaUzF6Y0dGalpTQnBibk5sY25SbFpDQmhjbTkxYm1RZ2MyVnlkbVZ5TFhKbGJtUmxjbVZrSUcxaGNtdDFjQzRuWEc0Z0lDQWdJQ0FnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0J5YjI5MFJXeGxiV1Z1ZEZOcFlteHBibWNnUFNCeWIyOTBSV3hsYldWdWRGTnBZbXhwYm1jdWJtVjRkRk5wWW14cGJtYzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQjJZWElnYzJodmRXeGtVbVYxYzJWTllYSnJkWEFnUFNCamIyNTBZV2x1WlhKSVlYTlNaV0ZqZEUxaGNtdDFjQ0FtSmlBaGNISmxka052YlhCdmJtVnVkRHRjYmx4dUlDQWdJSFpoY2lCamIyMXdiMjVsYm5RZ1BTQlNaV0ZqZEUxdmRXNTBMbDl5Wlc1a1pYSk9aWGRTYjI5MFEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUNBZ2JtVjRkRVZzWlcxbGJuUXNYRzRnSUNBZ0lDQmpiMjUwWVdsdVpYSXNYRzRnSUNBZ0lDQnphRzkxYkdSU1pYVnpaVTFoY210MWNGeHVJQ0FnSUNrdVoyVjBVSFZpYkdsalNXNXpkR0Z1WTJVb0tUdGNiaUFnSUNCcFppQW9ZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQWdJR05oYkd4aVlXTnJMbU5oYkd3b1kyOXRjRzl1Wlc1MEtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR052YlhCdmJtVnVkRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1EyOXVjM1J5ZFdOMGN5QmhJR052YlhCdmJtVnVkQ0JwYm5OMFlXNWpaU0J2WmlCZ1kyOXVjM1J5ZFdOMGIzSmdJSGRwZEdnZ1lHbHVhWFJwWVd4UWNtOXdjMkFnWVc1a1hHNGdJQ0FxSUhKbGJtUmxjbk1nYVhRZ2FXNTBieUIwYUdVZ2MzVndjR3hwWldRZ1lHTnZiblJoYVc1bGNtQXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjU5SUdOdmJuTjBjblZqZEc5eUlGSmxZV04wSUdOdmJYQnZibVZ1ZENCamIyNXpkSEoxWTNSdmNpNWNiaUFnSUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCd2NtOXdjeUJKYm1sMGFXRnNJSEJ5YjNCeklHOW1JSFJvWlNCamIyMXdiMjVsYm5RZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3UkU5TlJXeGxiV1Z1ZEgwZ1kyOXVkR0ZwYm1WeUlFUlBUU0JsYkdWdFpXNTBJSFJ2SUhKbGJtUmxjaUJwYm5SdkxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0U1pXRmpkRU52YlhCdmJtVnVkSDBnUTI5dGNHOXVaVzUwSUdsdWMzUmhibU5sSUhKbGJtUmxjbVZrSUdsdUlHQmpiMjUwWVdsdVpYSmdMbHh1SUNBZ0tpOWNiaUFnWTI5dWMzUnlkV04wUVc1a1VtVnVaR1Z5UTI5dGNHOXVaVzUwT2lCbWRXNWpkR2x2YmloamIyNXpkSEoxWTNSdmNpd2djSEp2Y0hNc0lHTnZiblJoYVc1bGNpa2dlMXh1SUNBZ0lIWmhjaUJsYkdWdFpXNTBJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblFvWTI5dWMzUnlkV04wYjNJc0lIQnliM0J6S1R0Y2JpQWdJQ0J5WlhSMWNtNGdVbVZoWTNSTmIzVnVkQzV5Wlc1a1pYSW9aV3hsYldWdWRDd2dZMjl1ZEdGcGJtVnlLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1EyOXVjM1J5ZFdOMGN5QmhJR052YlhCdmJtVnVkQ0JwYm5OMFlXNWpaU0J2WmlCZ1kyOXVjM1J5ZFdOMGIzSmdJSGRwZEdnZ1lHbHVhWFJwWVd4UWNtOXdjMkFnWVc1a1hHNGdJQ0FxSUhKbGJtUmxjbk1nYVhRZ2FXNTBieUJoSUdOdmJuUmhhVzVsY2lCdWIyUmxJR2xrWlc1MGFXWnBaV1FnWW5rZ2MzVndjR3hwWldRZ1lHbGtZQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2Ym4wZ1kyOXRjRzl1Wlc1MFEyOXVjM1J5ZFdOMGIzSWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MElHTnZibk4wY25WamRHOXlYRzRnSUNBcUlFQndZWEpoYlNCN1AyOWlhbVZqZEgwZ2NISnZjSE1nU1c1cGRHbGhiQ0J3Y205d2N5QnZaaUIwYUdVZ1kyOXRjRzl1Wlc1MElHbHVjM1JoYm1ObExseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1NVUWdiMllnZEdobElFUlBUU0JsYkdWdFpXNTBJSFJ2SUhKbGJtUmxjaUJwYm5SdkxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0U1pXRmpkRU52YlhCdmJtVnVkSDBnUTI5dGNHOXVaVzUwSUdsdWMzUmhibU5sSUhKbGJtUmxjbVZrSUdsdUlIUm9aU0JqYjI1MFlXbHVaWElnYm05a1pTNWNiaUFnSUNvdlhHNGdJR052Ym5OMGNuVmpkRUZ1WkZKbGJtUmxja052YlhCdmJtVnVkRUo1U1VRNklHWjFibU4wYVc5dUtHTnZibk4wY25WamRHOXlMQ0J3Y205d2N5d2dhV1FwSUh0Y2JpQWdJQ0IyWVhJZ1pHOXRUbTlrWlNBOUlHUnZZM1Z0Wlc1MExtZGxkRVZzWlcxbGJuUkNlVWxrS0dsa0tUdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnWkc5dFRtOWtaU3hjYmlBZ0lDQWdJQ2RVY21sbFpDQjBieUJuWlhRZ1pXeGxiV1Z1ZENCM2FYUm9JR2xrSUc5bUlGd2lKWE5jSWlCaWRYUWdhWFFnYVhNZ2JtOTBJSEJ5WlhObGJuUWdiMjRnZEdobElIQmhaMlV1Snl4Y2JpQWdJQ0FnSUdsa1hHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaGtiMjFPYjJSbEtTazdYRzRnSUNBZ2NtVjBkWEp1SUZKbFlXTjBUVzkxYm5RdVkyOXVjM1J5ZFdOMFFXNWtVbVZ1WkdWeVEyOXRjRzl1Wlc1MEtHTnZibk4wY25WamRHOXlMQ0J3Y205d2N5d2daRzl0VG05a1pTazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbFoybHpkR1Z5Y3lCaElHTnZiblJoYVc1bGNpQnViMlJsSUdsdWRHOGdkMmhwWTJnZ1VtVmhZM1FnWTI5dGNHOXVaVzUwY3lCM2FXeHNJR0psSUhKbGJtUmxjbVZrTGx4dUlDQWdLaUJVYUdseklHRnNjMjhnWTNKbFlYUmxjeUIwYUdVZ1hDSnlaV0ZqZEZKdmIzUmNJaUJKUkNCMGFHRjBJSGRwYkd3Z1ltVWdZWE56YVdkdVpXUWdkRzhnZEdobElHVnNaVzFsYm5SY2JpQWdJQ29nY21WdVpHVnlaV1FnZDJsMGFHbHVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlHTnZiblJoYVc1bGNpQkVUMDBnWld4bGJXVnVkQ0IwYnlCeVpXZHBjM1JsY2lCaGN5QmhJR052Ym5SaGFXNWxjaTVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZTQlVhR1VnWENKeVpXRmpkRkp2YjNSY0lpQkpSQ0J2WmlCbGJHVnRaVzUwY3lCeVpXNWtaWEpsWkNCM2FYUm9hVzR1WEc0Z0lDQXFMMXh1SUNCeVpXZHBjM1JsY2tOdmJuUmhhVzVsY2pvZ1puVnVZM1JwYjI0b1kyOXVkR0ZwYm1WeUtTQjdYRzRnSUNBZ2RtRnlJSEpsWVdOMFVtOXZkRWxFSUQwZ1oyVjBVbVZoWTNSU2IyOTBTVVFvWTI5dWRHRnBibVZ5S1R0Y2JpQWdJQ0JwWmlBb2NtVmhZM1JTYjI5MFNVUXBJSHRjYmlBZ0lDQWdJQzh2SUVsbUlHOXVaU0JsZUdsemRITXNJRzFoYTJVZ2MzVnlaU0JwZENCcGN5QmhJSFpoYkdsa0lGd2ljbVZoWTNSU2IyOTBYQ0lnU1VRdVhHNGdJQ0FnSUNCeVpXRmpkRkp2YjNSSlJDQTlJRkpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6TG1kbGRGSmxZV04wVW05dmRFbEVSbkp2YlU1dlpHVkpSQ2h5WldGamRGSnZiM1JKUkNrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNnaGNtVmhZM1JTYjI5MFNVUXBJSHRjYmlBZ0lDQWdJQzh2SUU1dklIWmhiR2xrSUZ3aWNtVmhZM1JTYjI5MFhDSWdTVVFnWm05MWJtUXNJR055WldGMFpTQnZibVV1WEc0Z0lDQWdJQ0J5WldGamRGSnZiM1JKUkNBOUlGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpMbU55WldGMFpWSmxZV04wVW05dmRFbEVLQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZiblJoYVc1bGNuTkNlVkpsWVdOMFVtOXZkRWxFVzNKbFlXTjBVbTl2ZEVsRVhTQTlJR052Ym5SaGFXNWxjanRjYmlBZ0lDQnlaWFIxY200Z2NtVmhZM1JTYjI5MFNVUTdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWdWJXOTFiblJ6SUdGdVpDQmtaWE4wY205NWN5QjBhR1VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBJSEpsYm1SbGNtVmtJR2x1SUhSb1pTQmdZMjl1ZEdGcGJtVnlZQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0RVQwMUZiR1Z0Wlc1MGZTQmpiMjUwWVdsdVpYSWdSRTlOSUdWc1pXMWxiblFnWTI5dWRHRnBibWx1WnlCaElGSmxZV04wSUdOdmJYQnZibVZ1ZEM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjBnVkhKMVpTQnBaaUJoSUdOdmJYQnZibVZ1ZENCM1lYTWdabTkxYm1RZ2FXNGdZVzVrSUhWdWJXOTFiblJsWkNCbWNtOXRYRzRnSUNBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHQmpiMjUwWVdsdVpYSmdYRzRnSUNBcUwxeHVJQ0IxYm0xdmRXNTBRMjl0Y0c5dVpXNTBRWFJPYjJSbE9pQm1kVzVqZEdsdmJpaGpiMjUwWVdsdVpYSXBJSHRjYmlBZ0lDQXZMeUJXWVhKcGIzVnpJSEJoY25SeklHOW1JRzkxY2lCamIyUmxJQ2h6ZFdOb0lHRnpJRkpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1MEozTmNiaUFnSUNBdkx5QmZjbVZ1WkdWeVZtRnNhV1JoZEdWa1EyOXRjRzl1Wlc1MEtTQmhjM04xYldVZ2RHaGhkQ0JqWVd4c2N5QjBieUJ5Wlc1a1pYSWdZWEpsYmlkMElHNWxjM1JsWkR0Y2JpQWdJQ0F2THlCMlpYSnBabmtnZEdoaGRDQjBhR0YwSjNNZ2RHaGxJR05oYzJVdUlDaFRkSEpwWTNSc2VTQnpjR1ZoYTJsdVp5d2dkVzV0YjNWdWRHbHVaeUIzYjI0bmRDQmpZWFZ6WlNCaFhHNGdJQ0FnTHk4Z2NtVnVaR1Z5SUdKMWRDQjNaU0J6ZEdsc2JDQmtiMjRuZENCbGVIQmxZM1FnZEc4Z1ltVWdhVzRnWVNCeVpXNWtaWElnWTJGc2JDQm9aWEpsTGlsY2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUxtTjFjbkpsYm5RZ1BUMGdiblZzYkN4Y2JpQWdJQ0FnSUNkMWJtMXZkVzUwUTI5dGNHOXVaVzUwUVhST2IyUmxLQ2s2SUZKbGJtUmxjaUJ0WlhSb2IyUnpJSE5vYjNWc1pDQmlaU0JoSUhCMWNtVWdablZ1WTNScGIyNGdiMllnSnlBclhHNGdJQ0FnSUNBbmNISnZjSE1nWVc1a0lITjBZWFJsT3lCMGNtbG5aMlZ5YVc1bklHNWxjM1JsWkNCamIyMXdiMjVsYm5RZ2RYQmtZWFJsY3lCbWNtOXRJSEpsYm1SbGNpQnBjeUFuSUN0Y2JpQWdJQ0FnSUNkdWIzUWdZV3hzYjNkbFpDNGdTV1lnYm1WalpYTnpZWEo1TENCMGNtbG5aMlZ5SUc1bGMzUmxaQ0IxY0dSaGRHVnpJR2x1SUNjZ0sxeHVJQ0FnSUNBZ0oyTnZiWEJ2Ym1WdWRFUnBaRlZ3WkdGMFpTNG5YRzRnSUNBZ0tTQTZJRzUxYkd3cE8xeHVYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUdOdmJuUmhhVzVsY2lBbUppQW9YRzRnSUNBZ0lDQWdJQ2hqYjI1MFlXbHVaWEl1Ym05a1pWUjVjR1VnUFQwOUlFVk1SVTFGVGxSZlRrOUVSVjlVV1ZCRklIeDhJR052Ym5SaGFXNWxjaTV1YjJSbFZIbHdaU0E5UFQwZ1JFOURYMDVQUkVWZlZGbFFSU2xjYmlBZ0lDQWdJQ2tzWEc0Z0lDQWdJQ0FuZFc1dGIzVnVkRU52YlhCdmJtVnVkRUYwVG05a1pTZ3VMaTRwT2lCVVlYSm5aWFFnWTI5dWRHRnBibVZ5SUdseklHNXZkQ0JoSUVSUFRTQmxiR1Z0Wlc1MExpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLR052Ym5SaGFXNWxjaUFtSmlBb1hHNGdJQ0FnSUNBb1kyOXVkR0ZwYm1WeUxtNXZaR1ZVZVhCbElEMDlQU0JGVEVWTlJVNVVYMDVQUkVWZlZGbFFSU0I4ZkNCamIyNTBZV2x1WlhJdWJtOWtaVlI1Y0dVZ1BUMDlJRVJQUTE5T1QwUkZYMVJaVUVVcFhHNGdJQ0FnS1NrcE8xeHVYRzRnSUNBZ2RtRnlJSEpsWVdOMFVtOXZkRWxFSUQwZ1oyVjBVbVZoWTNSU2IyOTBTVVFvWTI5dWRHRnBibVZ5S1R0Y2JpQWdJQ0IyWVhJZ1kyOXRjRzl1Wlc1MElEMGdhVzV6ZEdGdVkyVnpRbmxTWldGamRGSnZiM1JKUkZ0eVpXRmpkRkp2YjNSSlJGMDdYRzRnSUNBZ2FXWWdLQ0ZqYjIxd2IyNWxiblFwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNCOVhHNGdJQ0FnVW1WaFkzUk5iM1Z1ZEM1MWJtMXZkVzUwUTI5dGNHOXVaVzUwUm5KdmJVNXZaR1VvWTI5dGNHOXVaVzUwTENCamIyNTBZV2x1WlhJcE8xeHVJQ0FnSUdSbGJHVjBaU0JwYm5OMFlXNWpaWE5DZVZKbFlXTjBVbTl2ZEVsRVczSmxZV04wVW05dmRFbEVYVHRjYmlBZ0lDQmtaV3hsZEdVZ1kyOXVkR0ZwYm1WeWMwSjVVbVZoWTNSU2IyOTBTVVJiY21WaFkzUlNiMjkwU1VSZE8xeHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUdSbGJHVjBaU0J5YjI5MFJXeGxiV1Z1ZEhOQ2VWSmxZV04wVW05dmRFbEVXM0psWVdOMFVtOXZkRWxFWFR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUnlkV1U3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGVnViVzkxYm5SeklHRWdZMjl0Y0c5dVpXNTBJR0Z1WkNCeVpXMXZkbVZ6SUdsMElHWnliMjBnZEdobElFUlBUUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRU52YlhCdmJtVnVkSDBnYVc1emRHRnVZMlVnVW1WaFkzUWdZMjl0Y0c5dVpXNTBJR2x1YzNSaGJtTmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJR052Ym5SaGFXNWxjaUJFVDAwZ1pXeGxiV1Z1ZENCMGJ5QjFibTF2ZFc1MElHWnliMjB1WEc0Z0lDQXFJRUJtYVc1aGJGeHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ29nUUhObFpTQjdVbVZoWTNSTmIzVnVkQzUxYm0xdmRXNTBRMjl0Y0c5dVpXNTBRWFJPYjJSbGZWeHVJQ0FnS2k5Y2JpQWdkVzV0YjNWdWRFTnZiWEJ2Ym1WdWRFWnliMjFPYjJSbE9pQm1kVzVqZEdsdmJpaHBibk4wWVc1alpTd2dZMjl1ZEdGcGJtVnlLU0I3WEc0Z0lDQWdVbVZoWTNSU1pXTnZibU5wYkdWeUxuVnViVzkxYm5SRGIyMXdiMjVsYm5Rb2FXNXpkR0Z1WTJVcE8xeHVYRzRnSUNBZ2FXWWdLR052Ym5SaGFXNWxjaTV1YjJSbFZIbHdaU0E5UFQwZ1JFOURYMDVQUkVWZlZGbFFSU2tnZTF4dUlDQWdJQ0FnWTI5dWRHRnBibVZ5SUQwZ1kyOXVkR0ZwYm1WeUxtUnZZM1Z0Wlc1MFJXeGxiV1Z1ZER0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCb2RIUndPaTh2YW5Od1pYSm1MbU52YlM5bGJYQjBlV2x1WnkxaExXNXZaR1ZjYmlBZ0lDQjNhR2xzWlNBb1kyOXVkR0ZwYm1WeUxteGhjM1JEYUdsc1pDa2dlMXh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlMbkpsYlc5MlpVTm9hV3hrS0dOdmJuUmhhVzVsY2k1c1lYTjBRMmhwYkdRcE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSbWx1WkhNZ2RHaGxJR052Ym5SaGFXNWxjaUJFVDAwZ1pXeGxiV1Z1ZENCMGFHRjBJR052Ym5SaGFXNXpJRkpsWVdOMElHTnZiWEJ2Ym1WdWRDQjBieUIzYUdsamFDQjBhR1ZjYmlBZ0lDb2djM1Z3Y0d4cFpXUWdSRTlOSUdCcFpHQWdZbVZzYjI1bmN5NWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR2xrSUZSb1pTQkpSQ0J2WmlCaGJpQmxiR1Z0Wlc1MElISmxibVJsY21Wa0lHSjVJR0VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIcy9SRTlOUld4bGJXVnVkSDBnUkU5TklHVnNaVzFsYm5RZ2RHaGhkQ0JqYjI1MFlXbHVjeUIwYUdVZ1lHbGtZQzVjYmlBZ0lDb3ZYRzRnSUdacGJtUlNaV0ZqZEVOdmJuUmhhVzVsY2tadmNrbEVPaUJtZFc1amRHbHZiaWhwWkNrZ2UxeHVJQ0FnSUhaaGNpQnlaV0ZqZEZKdmIzUkpSQ0E5SUZKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWekxtZGxkRkpsWVdOMFVtOXZkRWxFUm5KdmJVNXZaR1ZKUkNocFpDazdYRzRnSUNBZ2RtRnlJR052Ym5SaGFXNWxjaUE5SUdOdmJuUmhhVzVsY25OQ2VWSmxZV04wVW05dmRFbEVXM0psWVdOMFVtOXZkRWxFWFR0Y2JseHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUhaaGNpQnliMjkwUld4bGJXVnVkQ0E5SUhKdmIzUkZiR1Z0Wlc1MGMwSjVVbVZoWTNSU2IyOTBTVVJiY21WaFkzUlNiMjkwU1VSZE8xeHVJQ0FnSUNBZ2FXWWdLSEp2YjNSRmJHVnRaVzUwSUNZbUlISnZiM1JGYkdWdFpXNTBMbkJoY21WdWRFNXZaR1VnSVQwOUlHTnZiblJoYVc1bGNpa2dlMXh1SUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJQ0FnSUM4dklFTmhiR3dnYVc1MFpYSnVZV3hIWlhSSlJDQm9aWEpsSUdKbFkyRjFjMlVnWjJWMFNVUWdZMkZzYkhNZ2FYTldZV3hwWkNCM2FHbGphQ0JqWVd4c2MxeHVJQ0FnSUNBZ0lDQWdJQzh2SUdacGJtUlNaV0ZqZEVOdmJuUmhhVzVsY2tadmNrbEVJQ2gwYUdseklHWjFibU4wYVc5dUtTNWNiaUFnSUNBZ0lDQWdJQ0JwYm5SbGNtNWhiRWRsZEVsRUtISnZiM1JGYkdWdFpXNTBLU0E5UFQwZ2NtVmhZM1JTYjI5MFNVUXNYRzRnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBUVzkxYm5RNklGSnZiM1FnWld4bGJXVnVkQ0JKUkNCa2FXWm1aWEpsWkNCbWNtOXRJSEpsWVdOMFVtOXZkRWxFTGlkY2JpQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2d2THlCRFlXeHNJR2x1ZEdWeWJtRnNSMlYwU1VRZ2FHVnlaU0JpWldOaGRYTmxJR2RsZEVsRUlHTmhiR3h6SUdselZtRnNhV1FnZDJocFkyZ2dZMkZzYkhOY2JpQWdJQ0FnSUNBZ0x5OGdabWx1WkZKbFlXTjBRMjl1ZEdGcGJtVnlSbTl5U1VRZ0tIUm9hWE1nWm5WdVkzUnBiMjRwTGx4dUlDQWdJQ0FnSUNCcGJuUmxjbTVoYkVkbGRFbEVLSEp2YjNSRmJHVnRaVzUwS1NBOVBUMGdjbVZoWTNSU2IyOTBTVVFwS1R0Y2JseHVJQ0FnSUNBZ0lDQjJZWElnWTI5dWRHRnBibVZ5UTJocGJHUWdQU0JqYjI1MFlXbHVaWEl1Wm1seWMzUkRhR2xzWkR0Y2JpQWdJQ0FnSUNBZ2FXWWdLR052Ym5SaGFXNWxja05vYVd4a0lDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNCeVpXRmpkRkp2YjNSSlJDQTlQVDBnYVc1MFpYSnVZV3hIWlhSSlJDaGpiMjUwWVdsdVpYSkRhR2xzWkNrcElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCSlppQjBhR1VnWTI5dWRHRnBibVZ5SUdoaGN5QmhJRzVsZHlCamFHbHNaQ0IzYVhSb0lIUm9aU0J6WVcxbElFbEVJR0Z6SUhSb1pTQnZiR1JjYmlBZ0lDQWdJQ0FnSUNBdkx5QnliMjkwSUdWc1pXMWxiblFzSUhSb1pXNGdjbTl2ZEVWc1pXMWxiblJ6UW5sU1pXRmpkRkp2YjNSSlJGdHlaV0ZqZEZKdmIzUkpSRjBnYVhOY2JpQWdJQ0FnSUNBZ0lDQXZMeUJxZFhOMElITjBZV3hsSUdGdVpDQnVaV1ZrY3lCMGJ5QmlaU0IxY0dSaGRHVmtMaUJVYUdVZ1kyRnpaU0IwYUdGMElHUmxjMlZ5ZG1WeklHRmNiaUFnSUNBZ0lDQWdJQ0F2THlCM1lYSnVhVzVuSUdseklIZG9aVzRnZEdobElHTnZiblJoYVc1bGNpQnBjeUJsYlhCMGVTNWNiaUFnSUNBZ0lDQWdJQ0J5YjI5MFJXeGxiV1Z1ZEhOQ2VWSmxZV04wVW05dmRFbEVXM0psWVdOMFVtOXZkRWxFWFNBOUlHTnZiblJoYVc1bGNrTm9hV3hrTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FuVW1WaFkzUk5iM1Z1ZERvZ1VtOXZkQ0JsYkdWdFpXNTBJR2hoY3lCaVpXVnVJSEpsYlc5MlpXUWdabkp2YlNCcGRITWdiM0pwWjJsdVlXd2dKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5ZMjl1ZEdGcGJtVnlMaUJPWlhjZ1kyOXVkR0ZwYm1WeU9pY3NJSEp2YjNSRmJHVnRaVzUwTG5CaGNtVnVkRTV2WkdWY2JpQWdJQ0FnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z1kyOXVkR0ZwYm1WeU8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJHYVc1a2N5QmhiaUJsYkdWdFpXNTBJSEpsYm1SbGNtVmtJR0o1SUZKbFlXTjBJSGRwZEdnZ2RHaGxJSE4xY0hCc2FXVmtJRWxFTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2FXUWdTVVFnYjJZZ1lTQkVUMDBnYm05a1pTQnBiaUIwYUdVZ1VtVmhZM1FnWTI5dGNHOXVaVzUwTGx4dUlDQWdLaUJBY21WMGRYSnVJSHRFVDAxRmJHVnRaVzUwZlNCU2IyOTBJRVJQVFNCdWIyUmxJRzltSUhSb1pTQlNaV0ZqZENCamIyMXdiMjVsYm5RdVhHNGdJQ0FxTDF4dUlDQm1hVzVrVW1WaFkzUk9iMlJsUW5sSlJEb2dablZ1WTNScGIyNG9hV1FwSUh0Y2JpQWdJQ0IyWVhJZ2NtVmhZM1JTYjI5MElEMGdVbVZoWTNSTmIzVnVkQzVtYVc1a1VtVmhZM1JEYjI1MFlXbHVaWEpHYjNKSlJDaHBaQ2s3WEc0Z0lDQWdjbVYwZFhKdUlGSmxZV04wVFc5MWJuUXVabWx1WkVOdmJYQnZibVZ1ZEZKdmIzUW9jbVZoWTNSU2IyOTBMQ0JwWkNrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJ5ZFdVZ2FXWWdkR2hsSUhOMWNIQnNhV1ZrSUdCdWIyUmxZQ0JwY3lCeVpXNWtaWEpsWkNCaWVTQlNaV0ZqZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIc3FmU0J1YjJSbElFUlBUU0JGYkdWdFpXNTBJSFJ2SUdOb1pXTnJMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZTQlVjblZsSUdsbUlIUm9aU0JFVDAwZ1JXeGxiV1Z1ZENCaGNIQmxZWEp6SUhSdklHSmxJSEpsYm1SbGNtVmtJR0o1SUZKbFlXTjBMbHh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJR2x6VW1WdVpHVnlaV1JDZVZKbFlXTjBPaUJtZFc1amRHbHZiaWh1YjJSbEtTQjdYRzRnSUNBZ2FXWWdLRzV2WkdVdWJtOWtaVlI1Y0dVZ0lUMDlJREVwSUh0Y2JpQWdJQ0FnSUM4dklFNXZkQ0JoSUVSUFRVVnNaVzFsYm5Rc0lIUm9aWEpsWm05eVpTQnViM1FnWVNCU1pXRmpkQ0JqYjIxd2IyNWxiblJjYmlBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdsa0lEMGdVbVZoWTNSTmIzVnVkQzVuWlhSSlJDaHViMlJsS1R0Y2JpQWdJQ0J5WlhSMWNtNGdhV1FnUHlCcFpDNWphR0Z5UVhRb01Da2dQVDA5SUZORlVFRlNRVlJQVWlBNklHWmhiSE5sTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlVjbUYyWlhKelpYTWdkWEFnZEdobElHRnVZMlZ6ZEc5eWN5QnZaaUIwYUdVZ2MzVndjR3hwWldRZ2JtOWtaU0IwYnlCbWFXNWtJR0VnYm05a1pTQjBhR0YwSUdseklHRmNiaUFnSUNvZ1JFOU5JSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JR0VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZXlwOUlHNXZaR1ZjYmlBZ0lDb2dRSEpsZEhWeWJpQjdQMFJQVFVWMlpXNTBWR0Z5WjJWMGZWeHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHZGxkRVpwY25OMFVtVmhZM1JFVDAwNklHWjFibU4wYVc5dUtHNXZaR1VwSUh0Y2JpQWdJQ0IyWVhJZ1kzVnljbVZ1ZENBOUlHNXZaR1U3WEc0Z0lDQWdkMmhwYkdVZ0tHTjFjbkpsYm5RZ0ppWWdZM1Z5Y21WdWRDNXdZWEpsYm5ST2IyUmxJQ0U5UFNCamRYSnlaVzUwS1NCN1hHNGdJQ0FnSUNCcFppQW9VbVZoWTNSTmIzVnVkQzVwYzFKbGJtUmxjbVZrUW5sU1pXRmpkQ2hqZFhKeVpXNTBLU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWTNWeWNtVnVkRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR04xY25KbGJuUWdQU0JqZFhKeVpXNTBMbkJoY21WdWRFNXZaR1U3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCR2FXNWtjeUJoSUc1dlpHVWdkMmwwYUNCMGFHVWdjM1Z3Y0d4cFpXUWdZSFJoY21kbGRFbEVZQ0JwYm5OcFpHVWdiMllnZEdobElITjFjSEJzYVdWa1hHNGdJQ0FxSUdCaGJtTmxjM1J2Y2s1dlpHVmdMaUFnUlhod2JHOXBkSE1nZEdobElFbEVJRzVoYldsdVp5QnpZMmhsYldVZ2RHOGdjR1Z5Wm05eWJTQjBhR1VnYzJWaGNtTm9YRzRnSUNBcUlIRjFhV05yYkhrdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUlhabGJuUlVZWEpuWlhSOUlHRnVZMlZ6ZEc5eVRtOWtaU0JUWldGeVkyZ2dabkp2YlNCMGFHbHpJSEp2YjNRdVhHNGdJQ0FxSUVCd1lYSmhjbTBnZTNOMGNtbHVaMzBnZEdGeVoyVjBTVVFnU1VRZ2IyWWdkR2hsSUVSUFRTQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR1VnWTI5dGNHOXVaVzUwTGx4dUlDQWdLaUJBY21WMGRYSnVJSHRFVDAxRmRtVnVkRlJoY21kbGRIMGdSRTlOSUc1dlpHVWdkMmwwYUNCMGFHVWdjM1Z3Y0d4cFpXUWdZSFJoY21kbGRFbEVZQzVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JtYVc1a1EyOXRjRzl1Wlc1MFVtOXZkRG9nWm5WdVkzUnBiMjRvWVc1alpYTjBiM0pPYjJSbExDQjBZWEpuWlhSSlJDa2dlMXh1SUNBZ0lIWmhjaUJtYVhKemRFTm9hV3hrY21WdUlEMGdabWx1WkVOdmJYQnZibVZ1ZEZKdmIzUlNaWFZ6WVdKc1pVRnljbUY1TzF4dUlDQWdJSFpoY2lCamFHbHNaRWx1WkdWNElEMGdNRHRjYmx4dUlDQWdJSFpoY2lCa1pXVndaWE4wUVc1alpYTjBiM0lnUFNCbWFXNWtSR1ZsY0dWemRFTmhZMmhsWkVGdVkyVnpkRzl5S0hSaGNtZGxkRWxFS1NCOGZDQmhibU5sYzNSdmNrNXZaR1U3WEc1Y2JpQWdJQ0JtYVhKemRFTm9hV3hrY21WdVd6QmRJRDBnWkdWbGNHVnpkRUZ1WTJWemRHOXlMbVpwY25OMFEyaHBiR1E3WEc0Z0lDQWdabWx5YzNSRGFHbHNaSEpsYmk1c1pXNW5kR2dnUFNBeE8xeHVYRzRnSUNBZ2QyaHBiR1VnS0dOb2FXeGtTVzVrWlhnZ1BDQm1hWEp6ZEVOb2FXeGtjbVZ1TG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnZG1GeUlHTm9hV3hrSUQwZ1ptbHljM1JEYUdsc1pISmxibHRqYUdsc1pFbHVaR1Y0S3l0ZE8xeHVJQ0FnSUNBZ2RtRnlJSFJoY21kbGRFTm9hV3hrTzF4dVhHNGdJQ0FnSUNCM2FHbHNaU0FvWTJocGJHUXBJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHTm9hV3hrU1VRZ1BTQlNaV0ZqZEUxdmRXNTBMbWRsZEVsRUtHTm9hV3hrS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLR05vYVd4a1NVUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QkZkbVZ1SUdsbUlIZGxJR1pwYm1RZ2RHaGxJRzV2WkdVZ2QyVW5jbVVnYkc5dmEybHVaeUJtYjNJc0lIZGxJR1pwYm1semFDQnNiMjl3YVc1blhHNGdJQ0FnSUNBZ0lDQWdMeThnZEdoeWIzVm5hQ0JwZEhNZ2MybGliR2x1WjNNZ2RHOGdaVzV6ZFhKbElIUm9aWGtuY21VZ1kyRmphR1ZrSUhOdklIUm9ZWFFnZDJVZ1pHOXVKM1FnYUdGMlpWeHVJQ0FnSUNBZ0lDQWdJQzh2SUhSdklISmxkbWx6YVhRZ2RHaHBjeUJ1YjJSbElHRm5ZV2x1TGlCUGRHaGxjbmRwYzJVc0lIZGxJRzFoYTJVZ2JsNHlJR05oYkd4eklIUnZJR2RsZEVsRVhHNGdJQ0FnSUNBZ0lDQWdMeThnZDJobGJpQjJhWE5wZEdsdVp5QjBhR1VnYldGdWVTQmphR2xzWkhKbGJpQnZaaUJoSUhOcGJtZHNaU0J1YjJSbElHbHVJRzl5WkdWeUxseHVYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tIUmhjbWRsZEVsRUlEMDlQU0JqYUdsc1pFbEVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBZWEpuWlhSRGFHbHNaQ0E5SUdOb2FXeGtPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1VtVmhZM1JKYm5OMFlXNWpaVWhoYm1Sc1pYTXVhWE5CYm1ObGMzUnZja2xFVDJZb1kyaHBiR1JKUkN3Z2RHRnlaMlYwU1VRcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QkpaaUIzWlNCbWFXNWtJR0VnWTJocGJHUWdkMmh2YzJVZ1NVUWdhWE1nWVc0Z1lXNWpaWE4wYjNJZ2IyWWdkR2hsSUdkcGRtVnVJRWxFTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnZEdobGJpQjNaU0JqWVc0Z1ltVWdjM1Z5WlNCMGFHRjBJSGRsSUc5dWJIa2dkMkZ1ZENCMGJ5QnpaV0Z5WTJnZ2RHaGxJSE4xWW5SeVpXVmNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklISnZiM1JsWkNCaGRDQjBhR2x6SUdOb2FXeGtMQ0J6YnlCM1pTQmpZVzRnZEdoeWIzY2diM1YwSUhSb1pTQnlaWE4wSUc5bUlIUm9aVnh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdjMlZoY21Ob0lITjBZWFJsTGx4dUlDQWdJQ0FnSUNBZ0lDQWdabWx5YzNSRGFHbHNaSEpsYmk1c1pXNW5kR2dnUFNCamFHbHNaRWx1WkdWNElEMGdNRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHWnBjbk4wUTJocGJHUnlaVzR1Y0hWemFDaGphR2xzWkM1bWFYSnpkRU5vYVd4a0tUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJKWmlCMGFHbHpJR05vYVd4a0lHaGhaQ0J1YnlCSlJDd2dkR2hsYmlCMGFHVnlaU2R6SUdFZ1kyaGhibU5sSUhSb1lYUWdhWFFnZDJGelhHNGdJQ0FnSUNBZ0lDQWdMeThnYVc1cVpXTjBaV1FnWVhWMGIyMWhkR2xqWVd4c2VTQmllU0IwYUdVZ1luSnZkM05sY2l3Z1lYTWdkMmhsYmlCaElHQThkR0ZpYkdVK1lGeHVJQ0FnSUNBZ0lDQWdJQzh2SUdWc1pXMWxiblFnYzNCeWIzVjBjeUJoYmlCbGVIUnlZU0JnUEhSaWIyUjVQbUFnWTJocGJHUWdZWE1nWVNCemFXUmxJR1ZtWm1WamRDQnZabHh1SUNBZ0lDQWdJQ0FnSUM4dklHQXVhVzV1WlhKSVZFMU1ZQ0J3WVhKemFXNW5MaUJQY0hScGJXbHpkR2xqWVd4c2VTQmpiMjUwYVc1MVpTQmtiM2R1SUhSb2FYTmNiaUFnSUNBZ0lDQWdJQ0F2THlCaWNtRnVZMmdzSUdKMWRDQnViM1FnWW1WbWIzSmxJR1Y0WVcxcGJtbHVaeUIwYUdVZ2IzUm9aWElnYzJsaWJHbHVaM011WEc0Z0lDQWdJQ0FnSUNBZ1ptbHljM1JEYUdsc1pISmxiaTV3ZFhOb0tHTm9hV3hrTG1acGNuTjBRMmhwYkdRcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnWTJocGJHUWdQU0JqYUdsc1pDNXVaWGgwVTJsaWJHbHVaenRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVdZZ0tIUmhjbWRsZEVOb2FXeGtLU0I3WEc0Z0lDQWdJQ0FnSUM4dklFVnRjSFI1YVc1bklHWnBjbk4wUTJocGJHUnlaVzR2Wm1sdVpFTnZiWEJ2Ym1WdWRGSnZiM1JTWlhWellXSnNaVUZ5Y21GNUlHbHpYRzRnSUNBZ0lDQWdJQzh2SUc1dmRDQnVaV05sYzNOaGNua2dabTl5SUdOdmNuSmxZM1J1WlhOekxDQmlkWFFnYVhRZ2FHVnNjSE1nZEdobElFZERJSEpsWTJ4aGFXMWNiaUFnSUNBZ0lDQWdMeThnWVc1NUlHNXZaR1Z6SUhSb1lYUWdkMlZ5WlNCc1pXWjBJR0YwSUhSb1pTQmxibVFnYjJZZ2RHaGxJSE5sWVhKamFDNWNiaUFnSUNBZ0lDQWdabWx5YzNSRGFHbHNaSEpsYmk1c1pXNW5kR2dnUFNBd08xeHVYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBZWEpuWlhSRGFHbHNaRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1hWEp6ZEVOb2FXeGtjbVZ1TG14bGJtZDBhQ0E5SURBN1hHNWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQW5abWx1WkVOdmJYQnZibVZ1ZEZKdmIzUW9MaTR1TENBbGN5azZJRlZ1WVdKc1pTQjBieUJtYVc1a0lHVnNaVzFsYm5RdUlGUm9hWE1nY0hKdlltRmliSGtnSnlBclhHNGdJQ0FnSUNBbmJXVmhibk1nZEdobElFUlBUU0IzWVhNZ2RXNWxlSEJsWTNSbFpHeDVJRzExZEdGMFpXUWdLR1V1Wnk0c0lHSjVJSFJvWlNCaWNtOTNjMlZ5S1N3Z0p5QXJYRzRnSUNBZ0lDQW5kWE4xWVd4c2VTQmtkV1VnZEc4Z1ptOXlaMlYwZEdsdVp5QmhJRHgwWW05a2VUNGdkMmhsYmlCMWMybHVaeUIwWVdKc1pYTXNJRzVsYzNScGJtY2dkR0ZuY3lBbklDdGNiaUFnSUNBZ0lDZHNhV3RsSUR4bWIzSnRQaXdnUEhBK0xDQnZjaUE4WVQ0c0lHOXlJSFZ6YVc1bklHNXZiaTFUVmtjZ1pXeGxiV1Z1ZEhNZ2FXNGdZVzRnUEhOMlp6NGdKeUFyWEc0Z0lDQWdJQ0FuY0dGeVpXNTBMaUFuSUN0Y2JpQWdJQ0FnSUNkVWNua2dhVzV6Y0dWamRHbHVaeUIwYUdVZ1kyaHBiR1FnYm05a1pYTWdiMllnZEdobElHVnNaVzFsYm5RZ2QybDBhQ0JTWldGamRDQkpSQ0JnSlhOZ0xpY3NYRzRnSUNBZ0lDQjBZWEpuWlhSSlJDeGNiaUFnSUNBZ0lGSmxZV04wVFc5MWJuUXVaMlYwU1VRb1lXNWpaWE4wYjNKT2IyUmxLVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvWm1Gc2MyVXBLVHRjYmlBZ2ZTeGNibHh1SUNCZmJXOTFiblJKYldGblpVbHVkRzlPYjJSbE9pQm1kVzVqZEdsdmJpaHRZWEpyZFhBc0lHTnZiblJoYVc1bGNpd2djMmh2ZFd4a1VtVjFjMlZOWVhKcmRYQXBJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUlDWW1JQ2hjYmlBZ0lDQWdJQ0FnS0dOdmJuUmhhVzVsY2k1dWIyUmxWSGx3WlNBOVBUMGdSVXhGVFVWT1ZGOU9UMFJGWDFSWlVFVWdmSHdnWTI5dWRHRnBibVZ5TG01dlpHVlVlWEJsSUQwOVBTQkVUME5mVGs5RVJWOVVXVkJGS1Z4dUlDQWdJQ0FnS1N4Y2JpQWdJQ0FnSUNkdGIzVnVkRU52YlhCdmJtVnVkRWx1ZEc5T2IyUmxLQzR1TGlrNklGUmhjbWRsZENCamIyNTBZV2x1WlhJZ2FYTWdibTkwSUhaaGJHbGtMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0dOdmJuUmhhVzVsY2lBbUppQW9YRzRnSUNBZ0lDQW9ZMjl1ZEdGcGJtVnlMbTV2WkdWVWVYQmxJRDA5UFNCRlRFVk5SVTVVWDA1UFJFVmZWRmxRUlNCOGZDQmpiMjUwWVdsdVpYSXVibTlrWlZSNWNHVWdQVDA5SUVSUFExOU9UMFJGWDFSWlVFVXBYRzRnSUNBZ0tTa3BPMXh1WEc0Z0lDQWdhV1lnS0hOb2IzVnNaRkpsZFhObFRXRnlhM1Z3S1NCN1hHNGdJQ0FnSUNCMllYSWdjbTl2ZEVWc1pXMWxiblFnUFNCblpYUlNaV0ZqZEZKdmIzUkZiR1Z0Wlc1MFNXNURiMjUwWVdsdVpYSW9ZMjl1ZEdGcGJtVnlLVHRjYmlBZ0lDQWdJR2xtSUNoU1pXRmpkRTFoY210MWNFTm9aV05yYzNWdExtTmhibEpsZFhObFRXRnlhM1Z3S0cxaGNtdDFjQ3dnY205dmRFVnNaVzFsYm5RcEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJqYUdWamEzTjFiU0E5SUhKdmIzUkZiR1Z0Wlc1MExtZGxkRUYwZEhKcFluVjBaU2hjYmlBZ0lDQWdJQ0FnSUNCU1pXRmpkRTFoY210MWNFTm9aV05yYzNWdExrTklSVU5MVTFWTlgwRlVWRkpmVGtGTlJWeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0J5YjI5MFJXeGxiV1Z1ZEM1eVpXMXZkbVZCZEhSeWFXSjFkR1VvVW1WaFkzUk5ZWEpyZFhCRGFHVmphM04xYlM1RFNFVkRTMU5WVFY5QlZGUlNYMDVCVFVVcE8xeHVYRzRnSUNBZ0lDQWdJSFpoY2lCeWIyOTBUV0Z5YTNWd0lEMGdjbTl2ZEVWc1pXMWxiblF1YjNWMFpYSklWRTFNTzF4dUlDQWdJQ0FnSUNCeWIyOTBSV3hsYldWdWRDNXpaWFJCZEhSeWFXSjFkR1VvWEc0Z0lDQWdJQ0FnSUNBZ1VtVmhZM1JOWVhKcmRYQkRhR1ZqYTNOMWJTNURTRVZEUzFOVlRWOUJWRlJTWDA1QlRVVXNYRzRnSUNBZ0lDQWdJQ0FnWTJobFkydHpkVzFjYmlBZ0lDQWdJQ0FnS1R0Y2JseHVJQ0FnSUNBZ0lDQjJZWElnWkdsbVprbHVaR1Y0SUQwZ1ptbHljM1JFYVdabVpYSmxibU5sU1c1a1pYZ29iV0Z5YTNWd0xDQnliMjkwVFdGeWEzVndLVHRjYmlBZ0lDQWdJQ0FnZG1GeUlHUnBabVpsY21WdVkyVWdQU0FuSUNoamJHbGxiblFwSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJRzFoY210MWNDNXpkV0p6ZEhKcGJtY29aR2xtWmtsdVpHVjRJQzBnTWpBc0lHUnBabVpKYm1SbGVDQXJJREl3S1NBclhHNGdJQ0FnSUNBZ0lDQWdKMXhjYmlBb2MyVnlkbVZ5S1NBbklDc2djbTl2ZEUxaGNtdDFjQzV6ZFdKemRISnBibWNvWkdsbVprbHVaR1Y0SUMwZ01qQXNJR1JwWm1aSmJtUmxlQ0FySURJd0tUdGNibHh1SUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmhhVzVsY2k1dWIyUmxWSGx3WlNBaFBUMGdSRTlEWDA1UFJFVmZWRmxRUlN4Y2JpQWdJQ0FnSUNBZ0lDQW5XVzkxWEZ3bmNtVWdkSEo1YVc1bklIUnZJSEpsYm1SbGNpQmhJR052YlhCdmJtVnVkQ0IwYnlCMGFHVWdaRzlqZFcxbGJuUWdkWE5wYm1jZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjNObGNuWmxjaUJ5Wlc1a1pYSnBibWNnWW5WMElIUm9aU0JqYUdWamEzTjFiU0IzWVhNZ2FXNTJZV3hwWkM0Z1ZHaHBjeUIxYzNWaGJHeDVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZHRaV0Z1Y3lCNWIzVWdjbVZ1WkdWeVpXUWdZU0JrYVdabVpYSmxiblFnWTI5dGNHOXVaVzUwSUhSNWNHVWdiM0lnY0hKdmNITWdiMjRnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM1JvWlNCamJHbGxiblFnWm5KdmJTQjBhR1VnYjI1bElHOXVJSFJvWlNCelpYSjJaWElzSUc5eUlIbHZkWElnY21WdVpHVnlLQ2tnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMjFsZEdodlpITWdZWEpsSUdsdGNIVnlaUzRnVW1WaFkzUWdZMkZ1Ym05MElHaGhibVJzWlNCMGFHbHpJR05oYzJVZ1pIVmxJSFJ2SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2RqY205emN5MWljbTkzYzJWeUlIRjFhWEpyY3lCaWVTQnlaVzVrWlhKcGJtY2dZWFFnZEdobElHUnZZM1Z0Wlc1MElISnZiM1F1SUZsdmRTQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBbmMyaHZkV3hrSUd4dmIyc2dabTl5SUdWdWRtbHliMjV0Wlc1MElHUmxjR1Z1WkdWdWRDQmpiMlJsSUdsdUlIbHZkWElnWTI5dGNHOXVaVzUwY3lBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuWVc1a0lHVnVjM1Z5WlNCMGFHVWdjSEp2Y0hNZ1lYSmxJSFJvWlNCellXMWxJR05zYVdWdWRDQmhibVFnYzJWeWRtVnlJSE5wWkdVNlhGeHVKWE1uTEZ4dUlDQWdJQ0FnSUNBZ0lHUnBabVpsY21WdVkyVmNiaUFnSUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoamIyNTBZV2x1WlhJdWJtOWtaVlI1Y0dVZ0lUMDlJRVJQUTE5T1QwUkZYMVJaVUVVcEtUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUNBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2RTWldGamRDQmhkSFJsYlhCMFpXUWdkRzhnY21WMWMyVWdiV0Z5YTNWd0lHbHVJR0VnWTI5dWRHRnBibVZ5SUdKMWRDQjBhR1VnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FuWTJobFkydHpkVzBnZDJGeklHbHVkbUZzYVdRdUlGUm9hWE1nWjJWdVpYSmhiR3g1SUcxbFlXNXpJSFJvWVhRZ2VXOTFJR0Z5WlNBbklDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNkMWMybHVaeUJ6WlhKMlpYSWdjbVZ1WkdWeWFXNW5JR0Z1WkNCMGFHVWdiV0Z5YTNWd0lHZGxibVZ5WVhSbFpDQnZiaUIwYUdVZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSUNBbmMyVnlkbVZ5SUhkaGN5QnViM1FnZDJoaGRDQjBhR1VnWTJ4cFpXNTBJSGRoY3lCbGVIQmxZM1JwYm1jdUlGSmxZV04wSUdsdWFtVmpkR1ZrSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSjI1bGR5QnRZWEpyZFhBZ2RHOGdZMjl0Y0dWdWMyRjBaU0IzYUdsamFDQjNiM0pyY3lCaWRYUWdlVzkxSUdoaGRtVWdiRzl6ZENCdFlXNTVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdKMjltSUhSb1pTQmlaVzVsWm1sMGN5QnZaaUJ6WlhKMlpYSWdjbVZ1WkdWeWFXNW5MaUJKYm5OMFpXRmtMQ0JtYVdkMWNtVWdiM1YwSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSjNkb2VTQjBhR1VnYldGeWEzVndJR0psYVc1bklHZGxibVZ5WVhSbFpDQnBjeUJrYVdabVpYSmxiblFnYjI0Z2RHaGxJR05zYVdWdWRDQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDZHZjaUJ6WlhKMlpYSTZYRnh1SlhNbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdsbVptVnlaVzVqWlZ4dUlDQWdJQ0FnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJdWJtOWtaVlI1Y0dVZ0lUMDlJRVJQUTE5T1QwUkZYMVJaVUVVc1hHNGdJQ0FnSUNBbldXOTFYRnduY21VZ2RISjVhVzVuSUhSdklISmxibVJsY2lCaElHTnZiWEJ2Ym1WdWRDQjBieUIwYUdVZ1pHOWpkVzFsYm5RZ1luVjBJQ2NnSzF4dUlDQWdJQ0FnSUNBbmVXOTFJR1JwWkc1Y1hDZDBJSFZ6WlNCelpYSjJaWElnY21WdVpHVnlhVzVuTGlCWFpTQmpZVzVjWENkMElHUnZJSFJvYVhNZ0p5QXJYRzRnSUNBZ0lDQWdJQ2QzYVhSb2IzVjBJSFZ6YVc1bklITmxjblpsY2lCeVpXNWtaWEpwYm1jZ1pIVmxJSFJ2SUdOeWIzTnpMV0p5YjNkelpYSWdjWFZwY210ekxpQW5JQ3RjYmlBZ0lDQWdJQ0FnSjFObFpTQlNaV0ZqZEM1eVpXNWtaWEpVYjFOMGNtbHVaeWdwSUdadmNpQnpaWEoyWlhJZ2NtVnVaR1Z5YVc1bkxpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLR052Ym5SaGFXNWxjaTV1YjJSbFZIbHdaU0FoUFQwZ1JFOURYMDVQUkVWZlZGbFFSU2twTzF4dVhHNGdJQ0FnYzJWMFNXNXVaWEpJVkUxTUtHTnZiblJoYVc1bGNpd2diV0Z5YTNWd0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WaFkzUWdTVVFnZFhScGJHbDBhV1Z6TGx4dUlDQWdLaTljYmx4dUlDQm5aWFJTWldGamRGSnZiM1JKUkRvZ1oyVjBVbVZoWTNSU2IyOTBTVVFzWEc1Y2JpQWdaMlYwU1VRNklHZGxkRWxFTEZ4dVhHNGdJSE5sZEVsRU9pQnpaWFJKUkN4Y2JseHVJQ0JuWlhST2IyUmxPaUJuWlhST2IyUmxMRnh1WEc0Z0lHZGxkRTV2WkdWR2NtOXRTVzV6ZEdGdVkyVTZJR2RsZEU1dlpHVkdjbTl0U1c1emRHRnVZMlVzWEc1Y2JpQWdjSFZ5WjJWSlJEb2djSFZ5WjJWSlJGeHVmVHRjYmx4dVVtVmhZM1JRWlhKbUxtMWxZWE4xY21WTlpYUm9iMlJ6S0ZKbFlXTjBUVzkxYm5Rc0lDZFNaV0ZqZEUxdmRXNTBKeXdnZTF4dUlDQmZjbVZ1WkdWeVRtVjNVbTl2ZEVOdmJYQnZibVZ1ZERvZ0oxOXlaVzVrWlhKT1pYZFNiMjkwUTI5dGNHOXVaVzUwSnl4Y2JpQWdYMjF2ZFc1MFNXMWhaMlZKYm5SdlRtOWtaVG9nSjE5dGIzVnVkRWx0WVdkbFNXNTBiMDV2WkdVblhHNTlLVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCU1pXRmpkRTF2ZFc1ME8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0TXVsdGlDaGlsZFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdENvbXBvbmVudEVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcyA9IHJlcXVpcmUoXCIuL1JlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzXCIpO1xuXG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZShcIi4vUmVhY3RSZWNvbmNpbGVyXCIpO1xudmFyIFJlYWN0Q2hpbGRSZWNvbmNpbGVyID0gcmVxdWlyZShcIi4vUmVhY3RDaGlsZFJlY29uY2lsZXJcIik7XG5cbi8qKlxuICogVXBkYXRpbmcgY2hpbGRyZW4gb2YgYSBjb21wb25lbnQgbWF5IHRyaWdnZXIgcmVjdXJzaXZlIHVwZGF0ZXMuIFRoZSBkZXB0aCBpc1xuICogdXNlZCB0byBiYXRjaCByZWN1cnNpdmUgdXBkYXRlcyB0byByZW5kZXIgbWFya3VwIG1vcmUgZWZmaWNpZW50bHkuXG4gKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciB1cGRhdGVEZXB0aCA9IDA7XG5cbi8qKlxuICogUXVldWUgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0cy5cbiAqXG4gKiBFYWNoIG9iamVjdCBoYXMgYSBgdHlwZWAgcHJvcGVydHkgdGhhdCBpcyBpbiBgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXNgLlxuICpcbiAqIEB0eXBlIHthcnJheTxvYmplY3Q+fVxuICogQHByaXZhdGVcbiAqL1xudmFyIHVwZGF0ZVF1ZXVlID0gW107XG5cbi8qKlxuICogUXVldWUgb2YgbWFya3VwIHRvIGJlIHJlbmRlcmVkLlxuICpcbiAqIEB0eXBlIHthcnJheTxzdHJpbmc+fVxuICogQHByaXZhdGVcbiAqL1xudmFyIG1hcmt1cFF1ZXVlID0gW107XG5cbi8qKlxuICogRW5xdWV1ZXMgbWFya3VwIHRvIGJlIHJlbmRlcmVkIGFuZCBpbnNlcnRlZCBhdCBhIHN1cHBsaWVkIGluZGV4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRJRCBJRCBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgTWFya3VwIHRoYXQgcmVuZGVycyBpbnRvIGFuIGVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gdG9JbmRleCBEZXN0aW5hdGlvbiBpbmRleC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVucXVldWVNYXJrdXAocGFyZW50SUQsIG1hcmt1cCwgdG9JbmRleCkge1xuICAvLyBOT1RFOiBOdWxsIHZhbHVlcyByZWR1Y2UgaGlkZGVuIGNsYXNzZXMuXG4gIHVwZGF0ZVF1ZXVlLnB1c2goe1xuICAgIHBhcmVudElEOiBwYXJlbnRJRCxcbiAgICBwYXJlbnROb2RlOiBudWxsLFxuICAgIHR5cGU6IFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLklOU0VSVF9NQVJLVVAsXG4gICAgbWFya3VwSW5kZXg6IG1hcmt1cFF1ZXVlLnB1c2gobWFya3VwKSAtIDEsXG4gICAgdGV4dENvbnRlbnQ6IG51bGwsXG4gICAgZnJvbUluZGV4OiBudWxsLFxuICAgIHRvSW5kZXg6IHRvSW5kZXhcbiAgfSk7XG59XG5cbi8qKlxuICogRW5xdWV1ZXMgbW92aW5nIGFuIGV4aXN0aW5nIGVsZW1lbnQgdG8gYW5vdGhlciBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50SUQgSUQgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFNvdXJjZSBpbmRleCBvZiB0aGUgZXhpc3RpbmcgZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4IERlc3RpbmF0aW9uIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5xdWV1ZU1vdmUocGFyZW50SUQsIGZyb21JbmRleCwgdG9JbmRleCkge1xuICAvLyBOT1RFOiBOdWxsIHZhbHVlcyByZWR1Y2UgaGlkZGVuIGNsYXNzZXMuXG4gIHVwZGF0ZVF1ZXVlLnB1c2goe1xuICAgIHBhcmVudElEOiBwYXJlbnRJRCxcbiAgICBwYXJlbnROb2RlOiBudWxsLFxuICAgIHR5cGU6IFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLk1PVkVfRVhJU1RJTkcsXG4gICAgbWFya3VwSW5kZXg6IG51bGwsXG4gICAgdGV4dENvbnRlbnQ6IG51bGwsXG4gICAgZnJvbUluZGV4OiBmcm9tSW5kZXgsXG4gICAgdG9JbmRleDogdG9JbmRleFxuICB9KTtcbn1cblxuLyoqXG4gKiBFbnF1ZXVlcyByZW1vdmluZyBhbiBlbGVtZW50IGF0IGFuIGluZGV4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRJRCBJRCBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggSW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gcmVtb3ZlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5xdWV1ZVJlbW92ZShwYXJlbnRJRCwgZnJvbUluZGV4KSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgdXBkYXRlUXVldWUucHVzaCh7XG4gICAgcGFyZW50SUQ6IHBhcmVudElELFxuICAgIHBhcmVudE5vZGU6IG51bGwsXG4gICAgdHlwZTogUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuUkVNT1ZFX05PREUsXG4gICAgbWFya3VwSW5kZXg6IG51bGwsXG4gICAgdGV4dENvbnRlbnQ6IG51bGwsXG4gICAgZnJvbUluZGV4OiBmcm9tSW5kZXgsXG4gICAgdG9JbmRleDogbnVsbFxuICB9KTtcbn1cblxuLyoqXG4gKiBFbnF1ZXVlcyBzZXR0aW5nIHRoZSB0ZXh0IGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudElEIElEIG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRDb250ZW50IFRleHQgY29udGVudCB0byBzZXQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBlbnF1ZXVlVGV4dENvbnRlbnQocGFyZW50SUQsIHRleHRDb250ZW50KSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgdXBkYXRlUXVldWUucHVzaCh7XG4gICAgcGFyZW50SUQ6IHBhcmVudElELFxuICAgIHBhcmVudE5vZGU6IG51bGwsXG4gICAgdHlwZTogUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuVEVYVF9DT05URU5ULFxuICAgIG1hcmt1cEluZGV4OiBudWxsLFxuICAgIHRleHRDb250ZW50OiB0ZXh0Q29udGVudCxcbiAgICBmcm9tSW5kZXg6IG51bGwsXG4gICAgdG9JbmRleDogbnVsbFxuICB9KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgYW55IGVucXVldWVkIHVwZGF0ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1F1ZXVlKCkge1xuICBpZiAodXBkYXRlUXVldWUubGVuZ3RoKSB7XG4gICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5wcm9jZXNzQ2hpbGRyZW5VcGRhdGVzKFxuICAgICAgdXBkYXRlUXVldWUsXG4gICAgICBtYXJrdXBRdWV1ZVxuICAgICk7XG4gICAgY2xlYXJRdWV1ZSgpO1xuICB9XG59XG5cbi8qKlxuICogQ2xlYXJzIGFueSBlbnF1ZXVlZCB1cGRhdGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyUXVldWUoKSB7XG4gIHVwZGF0ZVF1ZXVlLmxlbmd0aCA9IDA7XG4gIG1hcmt1cFF1ZXVlLmxlbmd0aCA9IDA7XG59XG5cbi8qKlxuICogUmVhY3RNdWx0aUNoaWxkIGFyZSBjYXBhYmxlIG9mIHJlY29uY2lsaW5nIG11bHRpcGxlIGNoaWxkcmVuLlxuICpcbiAqIEBjbGFzcyBSZWFjdE11bHRpQ2hpbGRcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RNdWx0aUNoaWxkID0ge1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgY29tcG9uZW50cyB0aGF0IG11c3QgcmVjb25jaWxlIG11bHRpcGxlXG4gICAqIGNoaWxkcmVuLiBUaGlzIGlzIHVzZWQgYnkgYFJlYWN0RE9NQ29tcG9uZW50YCB0byBtb3VudCwgdXBkYXRlLCBhbmRcbiAgICogdW5tb3VudCBjaGlsZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAbGVuZHMge1JlYWN0TXVsdGlDaGlsZC5wcm90b3R5cGV9XG4gICAqL1xuICBNaXhpbjoge1xuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgXCJtb3VudCBpbWFnZVwiIGZvciBlYWNoIG9mIHRoZSBzdXBwbGllZCBjaGlsZHJlbi4gSW4gdGhlIGNhc2VcbiAgICAgKiBvZiBgUmVhY3RET01Db21wb25lbnRgLCBhIG1vdW50IGltYWdlIGlzIGEgc3RyaW5nIG9mIG1hcmt1cC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmVzdGVkQ2hpbGRyZW4gTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAgICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IG9mIG1vdW50ZWQgcmVwcmVzZW50YXRpb25zLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG1vdW50Q2hpbGRyZW46IGZ1bmN0aW9uKG5lc3RlZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gUmVhY3RDaGlsZFJlY29uY2lsZXIuaW5zdGFudGlhdGVDaGlsZHJlbihcbiAgICAgICAgbmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0XG4gICAgICApO1xuICAgICAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgdmFyIG1vdW50SW1hZ2VzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgZm9yICh2YXIgbmFtZSBpbiBjaGlsZHJlbikge1xuICAgICAgICBpZiAoY2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltuYW1lXTtcbiAgICAgICAgICAvLyBJbmxpbmVkIGZvciBwZXJmb3JtYW5jZSwgc2VlIGBSZWFjdEluc3RhbmNlSGFuZGxlcy5jcmVhdGVSZWFjdElEYC5cbiAgICAgICAgICB2YXIgcm9vdElEID0gdGhpcy5fcm9vdE5vZGVJRCArIG5hbWU7XG4gICAgICAgICAgdmFyIG1vdW50SW1hZ2UgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21wb25lbnQoXG4gICAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICAgIHJvb3RJRCxcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgICAgY2hpbGQuX21vdW50SW5kZXggPSBpbmRleDtcbiAgICAgICAgICBtb3VudEltYWdlcy5wdXNoKG1vdW50SW1hZ2UpO1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtb3VudEltYWdlcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZXMgYW55IHJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSB0ZXh0IGNvbnRlbnQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5leHRDb250ZW50IFN0cmluZyBvZiBjb250ZW50LlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHVwZGF0ZVRleHRDb250ZW50OiBmdW5jdGlvbihuZXh0Q29udGVudCkge1xuICAgICAgdXBkYXRlRGVwdGgrKztcbiAgICAgIHZhciBlcnJvclRocm93biA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcHJldkNoaWxkcmVuID0gdGhpcy5fcmVuZGVyZWRDaGlsZHJlbjtcbiAgICAgICAgLy8gUmVtb3ZlIGFueSByZW5kZXJlZCBjaGlsZHJlbi5cbiAgICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudW5tb3VudENoaWxkcmVuKHByZXZDaGlsZHJlbik7XG4gICAgICAgIC8vIFRPRE86IFRoZSBzZXRUZXh0Q29udGVudCBvcGVyYXRpb24gc2hvdWxkIGJlIGVub3VnaFxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHByZXZDaGlsZHJlbikge1xuICAgICAgICAgIGlmIChwcmV2Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3VubW91bnRDaGlsZEJ5TmFtZShwcmV2Q2hpbGRyZW5bbmFtZV0sIG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgbmV3IHRleHQgY29udGVudC5cbiAgICAgICAgdGhpcy5zZXRUZXh0Q29udGVudChuZXh0Q29udGVudCk7XG4gICAgICAgIGVycm9yVGhyb3duID0gZmFsc2U7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB1cGRhdGVEZXB0aC0tO1xuICAgICAgICBpZiAoIXVwZGF0ZURlcHRoKSB7XG4gICAgICAgICAgaWYgKGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICBjbGVhclF1ZXVlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3NRdWV1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSByZW5kZXJlZCBjaGlsZHJlbiB3aXRoIG5ldyBjaGlsZHJlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dE5lc3RlZENoaWxkcmVuIE5lc3RlZCBjaGlsZCBtYXBzLlxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB1cGRhdGVDaGlsZHJlbjogZnVuY3Rpb24obmV4dE5lc3RlZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgICAgdXBkYXRlRGVwdGgrKztcbiAgICAgIHZhciBlcnJvclRocm93biA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl91cGRhdGVDaGlsZHJlbihuZXh0TmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICAgICAgZXJyb3JUaHJvd24gPSBmYWxzZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHVwZGF0ZURlcHRoLS07XG4gICAgICAgIGlmICghdXBkYXRlRGVwdGgpIHtcbiAgICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIGNsZWFyUXVldWUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvY2Vzc1F1ZXVlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW1wcm92ZSBwZXJmb3JtYW5jZSBieSBpc29sYXRpbmcgdGhpcyBob3QgY29kZSBwYXRoIGZyb20gdGhlIHRyeS9jYXRjaFxuICAgICAqIGJsb2NrIGluIGB1cGRhdGVDaGlsZHJlbmAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHROZXN0ZWRDaGlsZHJlbiBOZXN0ZWQgY2hpbGQgbWFwcy5cbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQGZpbmFsXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIF91cGRhdGVDaGlsZHJlbjogZnVuY3Rpb24obmV4dE5lc3RlZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47XG4gICAgICB2YXIgbmV4dENoaWxkcmVuID0gUmVhY3RDaGlsZFJlY29uY2lsZXIudXBkYXRlQ2hpbGRyZW4oXG4gICAgICAgIHByZXZDaGlsZHJlbiwgbmV4dE5lc3RlZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4gPSBuZXh0Q2hpbGRyZW47XG4gICAgICBpZiAoIW5leHRDaGlsZHJlbiAmJiAhcHJldkNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBuYW1lO1xuICAgICAgLy8gYG5leHRJbmRleGAgd2lsbCBpbmNyZW1lbnQgZm9yIGVhY2ggY2hpbGQgaW4gYG5leHRDaGlsZHJlbmAsIGJ1dFxuICAgICAgLy8gYGxhc3RJbmRleGAgd2lsbCBiZSB0aGUgbGFzdCBpbmRleCB2aXNpdGVkIGluIGBwcmV2Q2hpbGRyZW5gLlxuICAgICAgdmFyIGxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gMDtcbiAgICAgIGZvciAobmFtZSBpbiBuZXh0Q2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKCFuZXh0Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldkNoaWxkID0gcHJldkNoaWxkcmVuICYmIHByZXZDaGlsZHJlbltuYW1lXTtcbiAgICAgICAgdmFyIG5leHRDaGlsZCA9IG5leHRDaGlsZHJlbltuYW1lXTtcbiAgICAgICAgaWYgKHByZXZDaGlsZCA9PT0gbmV4dENoaWxkKSB7XG4gICAgICAgICAgdGhpcy5tb3ZlQ2hpbGQocHJldkNoaWxkLCBuZXh0SW5kZXgsIGxhc3RJbmRleCk7XG4gICAgICAgICAgbGFzdEluZGV4ID0gTWF0aC5tYXgocHJldkNoaWxkLl9tb3VudEluZGV4LCBsYXN0SW5kZXgpO1xuICAgICAgICAgIHByZXZDaGlsZC5fbW91bnRJbmRleCA9IG5leHRJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocHJldkNoaWxkKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgYGxhc3RJbmRleGAgYmVmb3JlIGBfbW91bnRJbmRleGAgZ2V0cyB1bnNldCBieSB1bm1vdW50aW5nLlxuICAgICAgICAgICAgbGFzdEluZGV4ID0gTWF0aC5tYXgocHJldkNoaWxkLl9tb3VudEluZGV4LCBsYXN0SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5fdW5tb3VudENoaWxkQnlOYW1lKHByZXZDaGlsZCwgbmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRoZSBjaGlsZCBtdXN0IGJlIGluc3RhbnRpYXRlZCBiZWZvcmUgaXQncyBtb3VudGVkLlxuICAgICAgICAgIHRoaXMuX21vdW50Q2hpbGRCeU5hbWVBdEluZGV4KFxuICAgICAgICAgICAgbmV4dENoaWxkLCBuYW1lLCBuZXh0SW5kZXgsIHRyYW5zYWN0aW9uLCBjb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0SW5kZXgrKztcbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSBjaGlsZHJlbiB0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudC5cbiAgICAgIGZvciAobmFtZSBpbiBwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHByZXZDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICAgICAgIShuZXh0Q2hpbGRyZW4gJiYgbmV4dENoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSkge1xuICAgICAgICAgIHRoaXMuX3VubW91bnRDaGlsZEJ5TmFtZShwcmV2Q2hpbGRyZW5bbmFtZV0sIG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVubW91bnRzIGFsbCByZW5kZXJlZCBjaGlsZHJlbi4gVGhpcyBzaG91bGQgYmUgdXNlZCB0byBjbGVhbiB1cCBjaGlsZHJlblxuICAgICAqIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdW5tb3VudENoaWxkcmVuOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZW5kZXJlZENoaWxkcmVuID0gdGhpcy5fcmVuZGVyZWRDaGlsZHJlbjtcbiAgICAgIFJlYWN0Q2hpbGRSZWNvbmNpbGVyLnVubW91bnRDaGlsZHJlbihyZW5kZXJlZENoaWxkcmVuKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4gPSBudWxsO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNb3ZlcyBhIGNoaWxkIGNvbXBvbmVudCB0byB0aGUgc3VwcGxpZWQgaW5kZXguXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDb21wb25lbnQgdG8gbW92ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9JbmRleCBEZXN0aW5hdGlvbiBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGFzdEluZGV4IExhc3QgaW5kZXggdmlzaXRlZCBvZiB0aGUgc2libGluZ3Mgb2YgYGNoaWxkYC5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgbW92ZUNoaWxkOiBmdW5jdGlvbihjaGlsZCwgdG9JbmRleCwgbGFzdEluZGV4KSB7XG4gICAgICAvLyBJZiB0aGUgaW5kZXggb2YgYGNoaWxkYCBpcyBsZXNzIHRoYW4gYGxhc3RJbmRleGAsIHRoZW4gaXQgbmVlZHMgdG9cbiAgICAgIC8vIGJlIG1vdmVkLiBPdGhlcndpc2UsIHdlIGRvIG5vdCBuZWVkIHRvIG1vdmUgaXQgYmVjYXVzZSBhIGNoaWxkIHdpbGwgYmVcbiAgICAgIC8vIGluc2VydGVkIG9yIG1vdmVkIGJlZm9yZSBgY2hpbGRgLlxuICAgICAgaWYgKGNoaWxkLl9tb3VudEluZGV4IDwgbGFzdEluZGV4KSB7XG4gICAgICAgIGVucXVldWVNb3ZlKHRoaXMuX3Jvb3ROb2RlSUQsIGNoaWxkLl9tb3VudEluZGV4LCB0b0luZGV4KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENvbXBvbmVudCB0byBjcmVhdGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1vdW50SW1hZ2UgTWFya3VwIHRvIGluc2VydC5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgY3JlYXRlQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkLCBtb3VudEltYWdlKSB7XG4gICAgICBlbnF1ZXVlTWFya3VwKHRoaXMuX3Jvb3ROb2RlSUQsIG1vdW50SW1hZ2UsIGNoaWxkLl9tb3VudEluZGV4KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENoaWxkIHRvIHJlbW92ZS5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcmVtb3ZlQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICBlbnF1ZXVlUmVtb3ZlKHRoaXMuX3Jvb3ROb2RlSUQsIGNoaWxkLl9tb3VudEluZGV4KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGlzIHRleHQgY29udGVudCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dENvbnRlbnQgVGV4dCBjb250ZW50IHRvIHNldC5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgc2V0VGV4dENvbnRlbnQ6IGZ1bmN0aW9uKHRleHRDb250ZW50KSB7XG4gICAgICBlbnF1ZXVlVGV4dENvbnRlbnQodGhpcy5fcm9vdE5vZGVJRCwgdGV4dENvbnRlbnQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNb3VudHMgYSBjaGlsZCB3aXRoIHRoZSBzdXBwbGllZCBuYW1lLlxuICAgICAqXG4gICAgICogTk9URTogVGhpcyBpcyBwYXJ0IG9mIGB1cGRhdGVDaGlsZHJlbmAgYW5kIGlzIGhlcmUgZm9yIHJlYWRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ29tcG9uZW50IHRvIG1vdW50LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGNoaWxkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIGNoaWxkLlxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9tb3VudENoaWxkQnlOYW1lQXRJbmRleDogZnVuY3Rpb24oXG4gICAgICBjaGlsZCxcbiAgICAgIG5hbWUsXG4gICAgICBpbmRleCxcbiAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgY29udGV4dCkge1xuICAgICAgLy8gSW5saW5lZCBmb3IgcGVyZm9ybWFuY2UsIHNlZSBgUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RJRGAuXG4gICAgICB2YXIgcm9vdElEID0gdGhpcy5fcm9vdE5vZGVJRCArIG5hbWU7XG4gICAgICB2YXIgbW91bnRJbWFnZSA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIHJvb3RJRCxcbiAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgIGNvbnRleHRcbiAgICAgICk7XG4gICAgICBjaGlsZC5fbW91bnRJbmRleCA9IGluZGV4O1xuICAgICAgdGhpcy5jcmVhdGVDaGlsZChjaGlsZCwgbW91bnRJbWFnZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVubW91bnRzIGEgcmVuZGVyZWQgY2hpbGQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoaXMgaXMgcGFydCBvZiBgdXBkYXRlQ2hpbGRyZW5gIGFuZCBpcyBoZXJlIGZvciByZWFkYWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENvbXBvbmVudCB0byB1bm1vdW50LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGNoaWxkIGluIGB0aGlzLl9yZW5kZXJlZENoaWxkcmVuYC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF91bm1vdW50Q2hpbGRCeU5hbWU6IGZ1bmN0aW9uKGNoaWxkLCBuYW1lKSB7XG4gICAgICB0aGlzLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgIGNoaWxkLl9tb3VudEluZGV4ID0gbnVsbDtcbiAgICB9XG5cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0TXVsdGlDaGlsZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGtleU1pcnJvciA9IHJlcXVpcmUoXCIuL2tleU1pcnJvclwiKTtcblxuLyoqXG4gKiBXaGVuIGEgY29tcG9uZW50J3MgY2hpbGRyZW4gYXJlIHVwZGF0ZWQsIGEgc2VyaWVzIG9mIHVwZGF0ZSBjb25maWd1cmF0aW9uXG4gKiBvYmplY3RzIGFyZSBjcmVhdGVkIGluIG9yZGVyIHRvIGJhdGNoIGFuZCBzZXJpYWxpemUgdGhlIHJlcXVpcmVkIGNoYW5nZXMuXG4gKlxuICogRW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHR5cGVzIG9mIHVwZGF0ZSBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzID0ga2V5TWlycm9yKHtcbiAgSU5TRVJUX01BUktVUDogbnVsbCxcbiAgTU9WRV9FWElTVElORzogbnVsbCxcbiAgUkVNT1ZFX05PREU6IG51bGwsXG4gIFRFWFRfQ09OVEVOVDogbnVsbFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXM7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0TmF0aXZlQ29tcG9uZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBhdXRvR2VuZXJhdGVXcmFwcGVyQ2xhc3MgPSBudWxsO1xudmFyIGdlbmVyaWNDb21wb25lbnRDbGFzcyA9IG51bGw7XG4vLyBUaGlzIHJlZ2lzdHJ5IGtlZXBzIHRyYWNrIG9mIHdyYXBwZXIgY2xhc3NlcyBhcm91bmQgbmF0aXZlIHRhZ3NcbnZhciB0YWdUb0NvbXBvbmVudENsYXNzID0ge307XG52YXIgdGV4dENvbXBvbmVudENsYXNzID0gbnVsbDtcblxudmFyIFJlYWN0TmF0aXZlQ29tcG9uZW50SW5qZWN0aW9uID0ge1xuICAvLyBUaGlzIGFjY2VwdHMgYSBjbGFzcyB0aGF0IHJlY2VpdmVzIHRoZSB0YWcgc3RyaW5nLiBUaGlzIGlzIGEgY2F0Y2ggYWxsXG4gIC8vIHRoYXQgY2FuIHJlbmRlciBhbnkga2luZCBvZiB0YWcuXG4gIGluamVjdEdlbmVyaWNDb21wb25lbnRDbGFzczogZnVuY3Rpb24oY29tcG9uZW50Q2xhc3MpIHtcbiAgICBnZW5lcmljQ29tcG9uZW50Q2xhc3MgPSBjb21wb25lbnRDbGFzcztcbiAgfSxcbiAgLy8gVGhpcyBhY2NlcHRzIGEgdGV4dCBjb21wb25lbnQgY2xhc3MgdGhhdCB0YWtlcyB0aGUgdGV4dCBzdHJpbmcgdG8gYmVcbiAgLy8gcmVuZGVyZWQgYXMgcHJvcHMuXG4gIGluamVjdFRleHRDb21wb25lbnRDbGFzczogZnVuY3Rpb24oY29tcG9uZW50Q2xhc3MpIHtcbiAgICB0ZXh0Q29tcG9uZW50Q2xhc3MgPSBjb21wb25lbnRDbGFzcztcbiAgfSxcbiAgLy8gVGhpcyBhY2NlcHRzIGEga2V5ZWQgb2JqZWN0IHdpdGggY2xhc3NlcyBhcyB2YWx1ZXMuIEVhY2gga2V5IHJlcHJlc2VudHMgYVxuICAvLyB0YWcuIFRoYXQgcGFydGljdWxhciB0YWcgd2lsbCB1c2UgdGhpcyBjbGFzcyBpbnN0ZWFkIG9mIHRoZSBnZW5lcmljIG9uZS5cbiAgaW5qZWN0Q29tcG9uZW50Q2xhc3NlczogZnVuY3Rpb24oY29tcG9uZW50Q2xhc3Nlcykge1xuICAgIGFzc2lnbih0YWdUb0NvbXBvbmVudENsYXNzLCBjb21wb25lbnRDbGFzc2VzKTtcbiAgfSxcbiAgLy8gVGVtcG9yYXJ5IGhhY2sgc2luY2Ugd2UgZXhwZWN0IERPTSByZWZzIHRvIGJlaGF2ZSBsaWtlIGNvbXBvc2l0ZXMsXG4gIC8vIGZvciB0aGlzIHJlbGVhc2UuXG4gIGluamVjdEF1dG9XcmFwcGVyOiBmdW5jdGlvbih3cmFwcGVyRmFjdG9yeSkge1xuICAgIGF1dG9HZW5lcmF0ZVdyYXBwZXJDbGFzcyA9IHdyYXBwZXJGYWN0b3J5O1xuICB9XG59O1xuXG4vKipcbiAqIEdldCBhIGNvbXBvc2l0ZSBjb21wb25lbnQgd3JhcHBlciBjbGFzcyBmb3IgYSBzcGVjaWZpYyB0YWcuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgVGhlIHRhZyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBjbGFzcy5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgUmVhY3QgY2xhc3MgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudChlbGVtZW50KSB7XG4gIGlmICh0eXBlb2YgZWxlbWVudC50eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQudHlwZTtcbiAgfVxuICB2YXIgdGFnID0gZWxlbWVudC50eXBlO1xuICB2YXIgY29tcG9uZW50Q2xhc3MgPSB0YWdUb0NvbXBvbmVudENsYXNzW3RhZ107XG4gIGlmIChjb21wb25lbnRDbGFzcyA9PSBudWxsKSB7XG4gICAgdGFnVG9Db21wb25lbnRDbGFzc1t0YWddID0gY29tcG9uZW50Q2xhc3MgPSBhdXRvR2VuZXJhdGVXcmFwcGVyQ2xhc3ModGFnKTtcbiAgfVxuICByZXR1cm4gY29tcG9uZW50Q2xhc3M7XG59XG5cbi8qKlxuICogR2V0IGEgbmF0aXZlIGludGVybmFsIGNvbXBvbmVudCBjbGFzcyBmb3IgYSBzcGVjaWZpYyB0YWcuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gY3JlYXRlLlxuICogQHJldHVybiB7ZnVuY3Rpb259IFRoZSBpbnRlcm5hbCBjbGFzcyBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW50ZXJuYWxDb21wb25lbnQoZWxlbWVudCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGdlbmVyaWNDb21wb25lbnRDbGFzcyxcbiAgICAnVGhlcmUgaXMgbm8gcmVnaXN0ZXJlZCBjb21wb25lbnQgZm9yIHRoZSB0YWcgJXMnLFxuICAgIGVsZW1lbnQudHlwZVxuICApIDogaW52YXJpYW50KGdlbmVyaWNDb21wb25lbnRDbGFzcykpO1xuICByZXR1cm4gbmV3IGdlbmVyaWNDb21wb25lbnRDbGFzcyhlbGVtZW50LnR5cGUsIGVsZW1lbnQucHJvcHMpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RUZXh0fSB0ZXh0XG4gKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VGb3JUZXh0KHRleHQpIHtcbiAgcmV0dXJuIG5ldyB0ZXh0Q29tcG9uZW50Q2xhc3ModGV4dCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1RleHRDb21wb25lbnQoY29tcG9uZW50KSB7XG4gIHJldHVybiBjb21wb25lbnQgaW5zdGFuY2VvZiB0ZXh0Q29tcG9uZW50Q2xhc3M7XG59XG5cbnZhciBSZWFjdE5hdGl2ZUNvbXBvbmVudCA9IHtcbiAgZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50OiBnZXRDb21wb25lbnRDbGFzc0ZvckVsZW1lbnQsXG4gIGNyZWF0ZUludGVybmFsQ29tcG9uZW50OiBjcmVhdGVJbnRlcm5hbENvbXBvbmVudCxcbiAgY3JlYXRlSW5zdGFuY2VGb3JUZXh0OiBjcmVhdGVJbnN0YW5jZUZvclRleHQsXG4gIGlzVGV4dENvbXBvbmVudDogaXNUZXh0Q29tcG9uZW50LFxuICBpbmplY3Rpb246IFJlYWN0TmF0aXZlQ29tcG9uZW50SW5qZWN0aW9uXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0TmF0aXZlQ29tcG9uZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUk9ZWFJwZG1WRGIyMXdiMjVsYm5RdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRRdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRTVoZEdsMlpVTnZiWEJ2Ym1WdWRGeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJR0Z6YzJsbmJpQTlJSEpsY1hWcGNtVW9YQ0l1TDA5aWFtVmpkQzVoYzNOcFoyNWNJaWs3WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc1MllYSWdZWFYwYjBkbGJtVnlZWFJsVjNKaGNIQmxja05zWVhOeklEMGdiblZzYkR0Y2JuWmhjaUJuWlc1bGNtbGpRMjl0Y0c5dVpXNTBRMnhoYzNNZ1BTQnVkV3hzTzF4dUx5OGdWR2hwY3lCeVpXZHBjM1J5ZVNCclpXVndjeUIwY21GamF5QnZaaUIzY21Gd2NHVnlJR05zWVhOelpYTWdZWEp2ZFc1a0lHNWhkR2wyWlNCMFlXZHpYRzUyWVhJZ2RHRm5WRzlEYjIxd2IyNWxiblJEYkdGemN5QTlJSHQ5TzF4dWRtRnlJSFJsZUhSRGIyMXdiMjVsYm5SRGJHRnpjeUE5SUc1MWJHdzdYRzVjYm5aaGNpQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkRWx1YW1WamRHbHZiaUE5SUh0Y2JpQWdMeThnVkdocGN5QmhZMk5sY0hSeklHRWdZMnhoYzNNZ2RHaGhkQ0J5WldObGFYWmxjeUIwYUdVZ2RHRm5JSE4wY21sdVp5NGdWR2hwY3lCcGN5QmhJR05oZEdOb0lHRnNiRnh1SUNBdkx5QjBhR0YwSUdOaGJpQnlaVzVrWlhJZ1lXNTVJR3RwYm1RZ2IyWWdkR0ZuTGx4dUlDQnBibXBsWTNSSFpXNWxjbWxqUTI5dGNHOXVaVzUwUTJ4aGMzTTZJR1oxYm1OMGFXOXVLR052YlhCdmJtVnVkRU5zWVhOektTQjdYRzRnSUNBZ1oyVnVaWEpwWTBOdmJYQnZibVZ1ZEVOc1lYTnpJRDBnWTI5dGNHOXVaVzUwUTJ4aGMzTTdYRzRnSUgwc1hHNGdJQzh2SUZSb2FYTWdZV05qWlhCMGN5QmhJSFJsZUhRZ1kyOXRjRzl1Wlc1MElHTnNZWE56SUhSb1lYUWdkR0ZyWlhNZ2RHaGxJSFJsZUhRZ2MzUnlhVzVuSUhSdklHSmxYRzRnSUM4dklISmxibVJsY21Wa0lHRnpJSEJ5YjNCekxseHVJQ0JwYm1wbFkzUlVaWGgwUTI5dGNHOXVaVzUwUTJ4aGMzTTZJR1oxYm1OMGFXOXVLR052YlhCdmJtVnVkRU5zWVhOektTQjdYRzRnSUNBZ2RHVjRkRU52YlhCdmJtVnVkRU5zWVhOeklEMGdZMjl0Y0c5dVpXNTBRMnhoYzNNN1hHNGdJSDBzWEc0Z0lDOHZJRlJvYVhNZ1lXTmpaWEIwY3lCaElHdGxlV1ZrSUc5aWFtVmpkQ0IzYVhSb0lHTnNZWE56WlhNZ1lYTWdkbUZzZFdWekxpQkZZV05vSUd0bGVTQnlaWEJ5WlhObGJuUnpJR0ZjYmlBZ0x5OGdkR0ZuTGlCVWFHRjBJSEJoY25ScFkzVnNZWElnZEdGbklIZHBiR3dnZFhObElIUm9hWE1nWTJ4aGMzTWdhVzV6ZEdWaFpDQnZaaUIwYUdVZ1oyVnVaWEpwWXlCdmJtVXVYRzRnSUdsdWFtVmpkRU52YlhCdmJtVnVkRU5zWVhOelpYTTZJR1oxYm1OMGFXOXVLR052YlhCdmJtVnVkRU5zWVhOelpYTXBJSHRjYmlBZ0lDQmhjM05wWjI0b2RHRm5WRzlEYjIxd2IyNWxiblJEYkdGemN5d2dZMjl0Y0c5dVpXNTBRMnhoYzNObGN5azdYRzRnSUgwc1hHNGdJQzh2SUZSbGJYQnZjbUZ5ZVNCb1lXTnJJSE5wYm1ObElIZGxJR1Y0Y0dWamRDQkVUMDBnY21WbWN5QjBieUJpWldoaGRtVWdiR2xyWlNCamIyMXdiM05wZEdWekxGeHVJQ0F2THlCbWIzSWdkR2hwY3lCeVpXeGxZWE5sTGx4dUlDQnBibXBsWTNSQmRYUnZWM0poY0hCbGNqb2dablZ1WTNScGIyNG9kM0poY0hCbGNrWmhZM1J2Y25rcElIdGNiaUFnSUNCaGRYUnZSMlZ1WlhKaGRHVlhjbUZ3Y0dWeVEyeGhjM01nUFNCM2NtRndjR1Z5Um1GamRHOXllVHRjYmlBZ2ZWeHVmVHRjYmx4dUx5b3FYRzRnS2lCSFpYUWdZU0JqYjIxd2IzTnBkR1VnWTI5dGNHOXVaVzUwSUhkeVlYQndaWElnWTJ4aGMzTWdabTl5SUdFZ2MzQmxZMmxtYVdNZ2RHRm5MbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdVbVZoWTNSRmJHVnRaVzUwZlNCbGJHVnRaVzUwSUZSb1pTQjBZV2NnWm05eUlIZG9hV05vSUhSdklHZGxkQ0IwYUdVZ1kyeGhjM011WEc0Z0tpQkFjbVYwZFhKdUlIdG1kVzVqZEdsdmJuMGdWR2hsSUZKbFlXTjBJR05zWVhOeklHTnZibk4wY25WamRHOXlJR1oxYm1OMGFXOXVMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQm5aWFJEYjIxd2IyNWxiblJEYkdGemMwWnZja1ZzWlcxbGJuUW9aV3hsYldWdWRDa2dlMXh1SUNCcFppQW9kSGx3Wlc5bUlHVnNaVzFsYm5RdWRIbHdaU0E5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lISmxkSFZ5YmlCbGJHVnRaVzUwTG5SNWNHVTdYRzRnSUgxY2JpQWdkbUZ5SUhSaFp5QTlJR1ZzWlcxbGJuUXVkSGx3WlR0Y2JpQWdkbUZ5SUdOdmJYQnZibVZ1ZEVOc1lYTnpJRDBnZEdGblZHOURiMjF3YjI1bGJuUkRiR0Z6YzF0MFlXZGRPMXh1SUNCcFppQW9ZMjl0Y0c5dVpXNTBRMnhoYzNNZ1BUMGdiblZzYkNrZ2UxeHVJQ0FnSUhSaFoxUnZRMjl0Y0c5dVpXNTBRMnhoYzNOYmRHRm5YU0E5SUdOdmJYQnZibVZ1ZEVOc1lYTnpJRDBnWVhWMGIwZGxibVZ5WVhSbFYzSmhjSEJsY2tOc1lYTnpLSFJoWnlrN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUdOdmJYQnZibVZ1ZEVOc1lYTnpPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZGxkQ0JoSUc1aGRHbDJaU0JwYm5SbGNtNWhiQ0JqYjIxd2IyNWxiblFnWTJ4aGMzTWdabTl5SUdFZ2MzQmxZMmxtYVdNZ2RHRm5MbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdVbVZoWTNSRmJHVnRaVzUwZlNCbGJHVnRaVzUwSUZSb1pTQmxiR1Z0Wlc1MElIUnZJR055WldGMFpTNWNiaUFxSUVCeVpYUjFjbTRnZTJaMWJtTjBhVzl1ZlNCVWFHVWdhVzUwWlhKdVlXd2dZMnhoYzNNZ1kyOXVjM1J5ZFdOMGIzSWdablZ1WTNScGIyNHVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHTnlaV0YwWlVsdWRHVnlibUZzUTI5dGNHOXVaVzUwS0dWc1pXMWxiblFwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCblpXNWxjbWxqUTI5dGNHOXVaVzUwUTJ4aGMzTXNYRzRnSUNBZ0oxUm9aWEpsSUdseklHNXZJSEpsWjJsemRHVnlaV1FnWTI5dGNHOXVaVzUwSUdadmNpQjBhR1VnZEdGbklDVnpKeXhjYmlBZ0lDQmxiR1Z0Wlc1MExuUjVjR1ZjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2huWlc1bGNtbGpRMjl0Y0c5dVpXNTBRMnhoYzNNcEtUdGNiaUFnY21WMGRYSnVJRzVsZHlCblpXNWxjbWxqUTI5dGNHOXVaVzUwUTJ4aGMzTW9aV3hsYldWdWRDNTBlWEJsTENCbGJHVnRaVzUwTG5CeWIzQnpLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UxSmxZV04wVkdWNGRIMGdkR1Y0ZEZ4dUlDb2dRSEpsZEhWeWJpQjdVbVZoWTNSRGIyMXdiMjVsYm5SOVhHNGdLaTljYm1aMWJtTjBhVzl1SUdOeVpXRjBaVWx1YzNSaGJtTmxSbTl5VkdWNGRDaDBaWGgwS1NCN1hHNGdJSEpsZEhWeWJpQnVaWGNnZEdWNGRFTnZiWEJ2Ym1WdWRFTnNZWE56S0hSbGVIUXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1VtVmhZM1JEYjIxd2IyNWxiblI5SUdOdmJYQnZibVZ1ZEZ4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2FYTlVaWGgwUTI5dGNHOXVaVzUwS0dOdmJYQnZibVZ1ZENrZ2UxeHVJQ0J5WlhSMWNtNGdZMjl0Y0c5dVpXNTBJR2x1YzNSaGJtTmxiMllnZEdWNGRFTnZiWEJ2Ym1WdWRFTnNZWE56TzF4dWZWeHVYRzUyWVhJZ1VtVmhZM1JPWVhScGRtVkRiMjF3YjI1bGJuUWdQU0I3WEc0Z0lHZGxkRU52YlhCdmJtVnVkRU5zWVhOelJtOXlSV3hsYldWdWREb2daMlYwUTI5dGNHOXVaVzUwUTJ4aGMzTkdiM0pGYkdWdFpXNTBMRnh1SUNCamNtVmhkR1ZKYm5SbGNtNWhiRU52YlhCdmJtVnVkRG9nWTNKbFlYUmxTVzUwWlhKdVlXeERiMjF3YjI1bGJuUXNYRzRnSUdOeVpXRjBaVWx1YzNSaGJtTmxSbTl5VkdWNGREb2dZM0psWVhSbFNXNXpkR0Z1WTJWR2IzSlVaWGgwTEZ4dUlDQnBjMVJsZUhSRGIyMXdiMjVsYm5RNklHbHpWR1Y0ZEVOdmJYQnZibVZ1ZEN4Y2JpQWdhVzVxWldOMGFXOXVPaUJTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEVsdWFtVmpkR2x2Ymx4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZER0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE93bmVyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIFJlYWN0T3duZXJzIGFyZSBjYXBhYmxlIG9mIHN0b3JpbmcgcmVmZXJlbmNlcyB0byBvd25lZCBjb21wb25lbnRzLlxuICpcbiAqIEFsbCBjb21wb25lbnRzIGFyZSBjYXBhYmxlIG9mIC8vYmVpbmcvLyByZWZlcmVuY2VkIGJ5IG93bmVyIGNvbXBvbmVudHMsIGJ1dFxuICogb25seSBSZWFjdE93bmVyIGNvbXBvbmVudHMgYXJlIGNhcGFibGUgb2YgLy9yZWZlcmVuY2luZy8vIG93bmVkIGNvbXBvbmVudHMuXG4gKiBUaGUgbmFtZWQgcmVmZXJlbmNlIGlzIGtub3duIGFzIGEgXCJyZWZcIi5cbiAqXG4gKiBSZWZzIGFyZSBhdmFpbGFibGUgd2hlbiBtb3VudGVkIGFuZCB1cGRhdGVkIGR1cmluZyByZWNvbmNpbGlhdGlvbi5cbiAqXG4gKiAgIHZhciBNeUNvbXBvbmVudCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICogICAgICAgcmV0dXJuIChcbiAqICAgICAgICAgPGRpdiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfT5cbiAqICAgICAgICAgICA8Q3VzdG9tQ29tcG9uZW50IHJlZj1cImN1c3RvbVwiIC8+XG4gKiAgICAgICAgIDwvZGl2PlxuICogICAgICAgKTtcbiAqICAgICB9LFxuICogICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbigpIHtcbiAqICAgICAgIHRoaXMucmVmcy5jdXN0b20uaGFuZGxlQ2xpY2soKTtcbiAqICAgICB9LFxuICogICAgIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAqICAgICAgIHRoaXMucmVmcy5jdXN0b20uaW5pdGlhbGl6ZSgpO1xuICogICAgIH1cbiAqICAgfSk7XG4gKlxuICogUmVmcyBzaG91bGQgcmFyZWx5IGJlIHVzZWQuIFdoZW4gcmVmcyBhcmUgdXNlZCwgdGhleSBzaG91bGQgb25seSBiZSBkb25lIHRvXG4gKiBjb250cm9sIGRhdGEgdGhhdCBpcyBub3QgaGFuZGxlZCBieSBSZWFjdCdzIGRhdGEgZmxvdy5cbiAqXG4gKiBAY2xhc3MgUmVhY3RPd25lclxuICovXG52YXIgUmVhY3RPd25lciA9IHtcblxuICAvKipcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIHZhbGlkIG93bmVyLlxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzVmFsaWRPd25lcjogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuICEhKFxuICAgICAgKG9iamVjdCAmJlxuICAgICAgdHlwZW9mIG9iamVjdC5hdHRhY2hSZWYgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iamVjdC5kZXRhY2hSZWYgPT09ICdmdW5jdGlvbicpXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkcyBhIGNvbXBvbmVudCBieSByZWYgdG8gYW4gb3duZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRvIHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZiBOYW1lIGJ5IHdoaWNoIHRvIHJlZmVyIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSB7UmVhY3RPd25lcn0gb3duZXIgQ29tcG9uZW50IG9uIHdoaWNoIHRvIHJlY29yZCB0aGUgcmVmLlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBhZGRDb21wb25lbnRBc1JlZlRvOiBmdW5jdGlvbihjb21wb25lbnQsIHJlZiwgb3duZXIpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgUmVhY3RPd25lci5pc1ZhbGlkT3duZXIob3duZXIpLFxuICAgICAgJ2FkZENvbXBvbmVudEFzUmVmVG8oLi4uKTogT25seSBhIFJlYWN0T3duZXIgY2FuIGhhdmUgcmVmcy4gVGhpcyAnICtcbiAgICAgICd1c3VhbGx5IG1lYW5zIHRoYXQgeW91XFwncmUgdHJ5aW5nIHRvIGFkZCBhIHJlZiB0byBhIGNvbXBvbmVudCB0aGF0ICcgK1xuICAgICAgJ2RvZXNuXFwndCBoYXZlIGFuIG93bmVyICh0aGF0IGlzLCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIG9mIGFub3RoZXIgJyArXG4gICAgICAnY29tcG9uZW50XFwncyBgcmVuZGVyYCBtZXRob2QpLiBUcnkgcmVuZGVyaW5nIHRoaXMgY29tcG9uZW50IGluc2lkZSBvZiAnICtcbiAgICAgICdhIG5ldyB0b3AtbGV2ZWwgY29tcG9uZW50IHdoaWNoIHdpbGwgaG9sZCB0aGUgcmVmLidcbiAgICApIDogaW52YXJpYW50KFJlYWN0T3duZXIuaXNWYWxpZE93bmVyKG93bmVyKSkpO1xuICAgIG93bmVyLmF0dGFjaFJlZihyZWYsIGNvbXBvbmVudCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjb21wb25lbnQgYnkgcmVmIGZyb20gYW4gb3duZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRvIGRlcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgb2YgdGhlIHJlZiB0byByZW1vdmUuXG4gICAqIEBwYXJhbSB7UmVhY3RPd25lcn0gb3duZXIgQ29tcG9uZW50IG9uIHdoaWNoIHRoZSByZWYgaXMgcmVjb3JkZWQuXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbTogZnVuY3Rpb24oY29tcG9uZW50LCByZWYsIG93bmVyKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIFJlYWN0T3duZXIuaXNWYWxpZE93bmVyKG93bmVyKSxcbiAgICAgICdyZW1vdmVDb21wb25lbnRBc1JlZkZyb20oLi4uKTogT25seSBhIFJlYWN0T3duZXIgY2FuIGhhdmUgcmVmcy4gVGhpcyAnICtcbiAgICAgICd1c3VhbGx5IG1lYW5zIHRoYXQgeW91XFwncmUgdHJ5aW5nIHRvIHJlbW92ZSBhIHJlZiB0byBhIGNvbXBvbmVudCB0aGF0ICcgK1xuICAgICAgJ2RvZXNuXFwndCBoYXZlIGFuIG93bmVyICh0aGF0IGlzLCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIG9mIGFub3RoZXIgJyArXG4gICAgICAnY29tcG9uZW50XFwncyBgcmVuZGVyYCBtZXRob2QpLiBUcnkgcmVuZGVyaW5nIHRoaXMgY29tcG9uZW50IGluc2lkZSBvZiAnICtcbiAgICAgICdhIG5ldyB0b3AtbGV2ZWwgY29tcG9uZW50IHdoaWNoIHdpbGwgaG9sZCB0aGUgcmVmLidcbiAgICApIDogaW52YXJpYW50KFJlYWN0T3duZXIuaXNWYWxpZE93bmVyKG93bmVyKSkpO1xuICAgIC8vIENoZWNrIHRoYXQgYGNvbXBvbmVudGAgaXMgc3RpbGwgdGhlIGN1cnJlbnQgcmVmIGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG9cbiAgICAvLyBkZXRhY2ggdGhlIHJlZiBpZiBhbm90aGVyIGNvbXBvbmVudCBzdG9sZSBpdC5cbiAgICBpZiAob3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5yZWZzW3JlZl0gPT09IGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpKSB7XG4gICAgICBvd25lci5kZXRhY2hSZWYocmVmKTtcbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE93bmVyO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUlBkMjVsY2k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFOTNibVZ5WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzR2S2lwY2JpQXFJRkpsWVdOMFQzZHVaWEp6SUdGeVpTQmpZWEJoWW14bElHOW1JSE4wYjNKcGJtY2djbVZtWlhKbGJtTmxjeUIwYnlCdmQyNWxaQ0JqYjIxd2IyNWxiblJ6TGx4dUlDcGNiaUFxSUVGc2JDQmpiMjF3YjI1bGJuUnpJR0Z5WlNCallYQmhZbXhsSUc5bUlDOHZZbVZwYm1jdkx5QnlaV1psY21WdVkyVmtJR0o1SUc5M2JtVnlJR052YlhCdmJtVnVkSE1zSUdKMWRGeHVJQ29nYjI1c2VTQlNaV0ZqZEU5M2JtVnlJR052YlhCdmJtVnVkSE1nWVhKbElHTmhjR0ZpYkdVZ2IyWWdMeTl5WldabGNtVnVZMmx1Wnk4dklHOTNibVZrSUdOdmJYQnZibVZ1ZEhNdVhHNGdLaUJVYUdVZ2JtRnRaV1FnY21WbVpYSmxibU5sSUdseklHdHViM2R1SUdGeklHRWdYQ0p5WldaY0lpNWNiaUFxWEc0Z0tpQlNaV1p6SUdGeVpTQmhkbUZwYkdGaWJHVWdkMmhsYmlCdGIzVnVkR1ZrSUdGdVpDQjFjR1JoZEdWa0lHUjFjbWx1WnlCeVpXTnZibU5wYkdsaGRHbHZiaTVjYmlBcVhHNGdLaUFnSUhaaGNpQk5lVU52YlhCdmJtVnVkQ0E5SUZKbFlXTjBMbU55WldGMFpVTnNZWE56S0h0Y2JpQXFJQ0FnSUNCeVpXNWtaWEk2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ29nSUNBZ0lDQWdjbVYwZFhKdUlDaGNiaUFxSUNBZ0lDQWdJQ0FnUEdScGRpQnZia05zYVdOclBYdDBhR2x6TG1oaGJtUnNaVU5zYVdOcmZUNWNiaUFxSUNBZ0lDQWdJQ0FnSUNBOFEzVnpkRzl0UTI5dGNHOXVaVzUwSUhKbFpqMWNJbU4xYzNSdmJWd2lJQzgrWEc0Z0tpQWdJQ0FnSUNBZ0lEd3ZaR2wyUGx4dUlDb2dJQ0FnSUNBZ0tUdGNiaUFxSUNBZ0lDQjlMRnh1SUNvZ0lDQWdJR2hoYm1Sc1pVTnNhV05yT2lCbWRXNWpkR2x2YmlncElIdGNiaUFxSUNBZ0lDQWdJSFJvYVhNdWNtVm1jeTVqZFhOMGIyMHVhR0Z1Wkd4bFEyeHBZMnNvS1R0Y2JpQXFJQ0FnSUNCOUxGeHVJQ29nSUNBZ0lHTnZiWEJ2Ym1WdWRFUnBaRTF2ZFc1ME9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBcUlDQWdJQ0FnSUhSb2FYTXVjbVZtY3k1amRYTjBiMjB1YVc1cGRHbGhiR2w2WlNncE8xeHVJQ29nSUNBZ0lIMWNiaUFxSUNBZ2ZTazdYRzRnS2x4dUlDb2dVbVZtY3lCemFHOTFiR1FnY21GeVpXeDVJR0psSUhWelpXUXVJRmRvWlc0Z2NtVm1jeUJoY21VZ2RYTmxaQ3dnZEdobGVTQnphRzkxYkdRZ2IyNXNlU0JpWlNCa2IyNWxJSFJ2WEc0Z0tpQmpiMjUwY205c0lHUmhkR0VnZEdoaGRDQnBjeUJ1YjNRZ2FHRnVaR3hsWkNCaWVTQlNaV0ZqZENkeklHUmhkR0VnWm14dmR5NWNiaUFxWEc0Z0tpQkFZMnhoYzNNZ1VtVmhZM1JQZDI1bGNseHVJQ292WEc1MllYSWdVbVZoWTNSUGQyNWxjaUE5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0J2WW1wbFkzUmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4wZ1ZISjFaU0JwWmlCZ2IySnFaV04wWUNCcGN5QmhJSFpoYkdsa0lHOTNibVZ5TGx4dUlDQWdLaUJBWm1sdVlXeGNiaUFnSUNvdlhHNGdJR2x6Vm1Gc2FXUlBkMjVsY2pvZ1puVnVZM1JwYjI0b2IySnFaV04wS1NCN1hHNGdJQ0FnY21WMGRYSnVJQ0VoS0Z4dUlDQWdJQ0FnS0c5aWFtVmpkQ0FtSmx4dUlDQWdJQ0FnZEhsd1pXOW1JRzlpYW1WamRDNWhkSFJoWTJoU1pXWWdQVDA5SUNkbWRXNWpkR2x2YmljZ0ppWWdkSGx3Wlc5bUlHOWlhbVZqZEM1a1pYUmhZMmhTWldZZ1BUMDlJQ2RtZFc1amRHbHZiaWNwWEc0Z0lDQWdLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1FXUmtjeUJoSUdOdmJYQnZibVZ1ZENCaWVTQnlaV1lnZEc4Z1lXNGdiM2R1WlhJZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQmpiMjF3YjI1bGJuUWdRMjl0Y0c5dVpXNTBJSFJ2SUhKbFptVnlaVzVqWlM1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSEpsWmlCT1lXMWxJR0o1SUhkb2FXTm9JSFJ2SUhKbFptVnlJSFJ2SUhSb1pTQmpiMjF3YjI1bGJuUXVYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JQZDI1bGNuMGdiM2R1WlhJZ1EyOXRjRzl1Wlc1MElHOXVJSGRvYVdOb0lIUnZJSEpsWTI5eVpDQjBhR1VnY21WbUxseHVJQ0FnS2lCQVptbHVZV3hjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JoWkdSRGIyMXdiMjVsYm5SQmMxSmxabFJ2T2lCbWRXNWpkR2x2YmloamIyMXdiMjVsYm5Rc0lISmxaaXdnYjNkdVpYSXBJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ1VtVmhZM1JQZDI1bGNpNXBjMVpoYkdsa1QzZHVaWElvYjNkdVpYSXBMRnh1SUNBZ0lDQWdKMkZrWkVOdmJYQnZibVZ1ZEVGelVtVm1WRzhvTGk0dUtUb2dUMjVzZVNCaElGSmxZV04wVDNkdVpYSWdZMkZ1SUdoaGRtVWdjbVZtY3k0Z1ZHaHBjeUFuSUN0Y2JpQWdJQ0FnSUNkMWMzVmhiR3g1SUcxbFlXNXpJSFJvWVhRZ2VXOTFYRnduY21VZ2RISjVhVzVuSUhSdklHRmtaQ0JoSUhKbFppQjBieUJoSUdOdmJYQnZibVZ1ZENCMGFHRjBJQ2NnSzF4dUlDQWdJQ0FnSjJSdlpYTnVYRnduZENCb1lYWmxJR0Z1SUc5M2JtVnlJQ2gwYUdGMElHbHpMQ0IzWVhNZ2JtOTBJR055WldGMFpXUWdhVzV6YVdSbElHOW1JR0Z1YjNSb1pYSWdKeUFyWEc0Z0lDQWdJQ0FuWTI5dGNHOXVaVzUwWEZ3bmN5QmdjbVZ1WkdWeVlDQnRaWFJvYjJRcExpQlVjbmtnY21WdVpHVnlhVzVuSUhSb2FYTWdZMjl0Y0c5dVpXNTBJR2x1YzJsa1pTQnZaaUFuSUN0Y2JpQWdJQ0FnSUNkaElHNWxkeUIwYjNBdGJHVjJaV3dnWTI5dGNHOXVaVzUwSUhkb2FXTm9JSGRwYkd3Z2FHOXNaQ0IwYUdVZ2NtVm1MaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0ZKbFlXTjBUM2R1WlhJdWFYTldZV3hwWkU5M2JtVnlLRzkzYm1WeUtTa3BPMXh1SUNBZ0lHOTNibVZ5TG1GMGRHRmphRkpsWmloeVpXWXNJR052YlhCdmJtVnVkQ2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxiVzkyWlhNZ1lTQmpiMjF3YjI1bGJuUWdZbmtnY21WbUlHWnliMjBnWVc0Z2IzZHVaWElnWTI5dGNHOXVaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCamIyMXdiMjVsYm5RZ1EyOXRjRzl1Wlc1MElIUnZJR1JsY21WbVpYSmxibU5sTGx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjbVZtSUU1aGJXVWdiMllnZEdobElISmxaaUIwYnlCeVpXMXZkbVV1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSUGQyNWxjbjBnYjNkdVpYSWdRMjl0Y0c5dVpXNTBJRzl1SUhkb2FXTm9JSFJvWlNCeVpXWWdhWE1nY21WamIzSmtaV1F1WEc0Z0lDQXFJRUJtYVc1aGJGeHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lISmxiVzkyWlVOdmJYQnZibVZ1ZEVGelVtVm1Sbkp2YlRvZ1puVnVZM1JwYjI0b1kyOXRjRzl1Wlc1MExDQnlaV1lzSUc5M2JtVnlLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lGSmxZV04wVDNkdVpYSXVhWE5XWVd4cFpFOTNibVZ5S0c5M2JtVnlLU3hjYmlBZ0lDQWdJQ2R5WlcxdmRtVkRiMjF3YjI1bGJuUkJjMUpsWmtaeWIyMG9MaTR1S1RvZ1QyNXNlU0JoSUZKbFlXTjBUM2R1WlhJZ1kyRnVJR2hoZG1VZ2NtVm1jeTRnVkdocGN5QW5JQ3RjYmlBZ0lDQWdJQ2QxYzNWaGJHeDVJRzFsWVc1eklIUm9ZWFFnZVc5MVhGd25jbVVnZEhKNWFXNW5JSFJ2SUhKbGJXOTJaU0JoSUhKbFppQjBieUJoSUdOdmJYQnZibVZ1ZENCMGFHRjBJQ2NnSzF4dUlDQWdJQ0FnSjJSdlpYTnVYRnduZENCb1lYWmxJR0Z1SUc5M2JtVnlJQ2gwYUdGMElHbHpMQ0IzWVhNZ2JtOTBJR055WldGMFpXUWdhVzV6YVdSbElHOW1JR0Z1YjNSb1pYSWdKeUFyWEc0Z0lDQWdJQ0FuWTI5dGNHOXVaVzUwWEZ3bmN5QmdjbVZ1WkdWeVlDQnRaWFJvYjJRcExpQlVjbmtnY21WdVpHVnlhVzVuSUhSb2FYTWdZMjl0Y0c5dVpXNTBJR2x1YzJsa1pTQnZaaUFuSUN0Y2JpQWdJQ0FnSUNkaElHNWxkeUIwYjNBdGJHVjJaV3dnWTI5dGNHOXVaVzUwSUhkb2FXTm9JSGRwYkd3Z2FHOXNaQ0IwYUdVZ2NtVm1MaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0ZKbFlXTjBUM2R1WlhJdWFYTldZV3hwWkU5M2JtVnlLRzkzYm1WeUtTa3BPMXh1SUNBZ0lDOHZJRU5vWldOcklIUm9ZWFFnWUdOdmJYQnZibVZ1ZEdBZ2FYTWdjM1JwYkd3Z2RHaGxJR04xY25KbGJuUWdjbVZtSUdKbFkyRjFjMlVnZDJVZ1pHOGdibTkwSUhkaGJuUWdkRzljYmlBZ0lDQXZMeUJrWlhSaFkyZ2dkR2hsSUhKbFppQnBaaUJoYm05MGFHVnlJR052YlhCdmJtVnVkQ0J6ZEc5c1pTQnBkQzVjYmlBZ0lDQnBaaUFvYjNkdVpYSXVaMlYwVUhWaWJHbGpTVzV6ZEdGdVkyVW9LUzV5WldaelczSmxabDBnUFQwOUlHTnZiWEJ2Ym1WdWRDNW5aWFJRZFdKc2FXTkpibk4wWVc1alpTZ3BLU0I3WEc0Z0lDQWdJQ0J2ZDI1bGNpNWtaWFJoWTJoU1pXWW9jbVZtS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQlNaV0ZqZEU5M2JtVnlPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RQZXJmXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBSZWFjdFBlcmYgaXMgYSBnZW5lcmFsIEFPUCBzeXN0ZW0gZGVzaWduZWQgdG8gbWVhc3VyZSBwZXJmb3JtYW5jZS4gVGhpc1xuICogbW9kdWxlIG9ubHkgaGFzIHRoZSBob29rczogc2VlIFJlYWN0RGVmYXVsdFBlcmYgZm9yIHRoZSBhbmFseXNpcyB0b29sLlxuICovXG52YXIgUmVhY3RQZXJmID0ge1xuICAvKipcbiAgICogQm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBtZWFzdXJlbWVudC4gU2V0IHRvIGZhbHNlIGJ5IGRlZmF1bHQgdG8gcHJldmVudFxuICAgKiBhY2NpZGVudGFsIGxvZ2dpbmcgYW5kIHBlcmYgbG9zcy5cbiAgICovXG4gIGVuYWJsZU1lYXN1cmU6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBIb2xkcyBvbnRvIHRoZSBtZWFzdXJlIGZ1bmN0aW9uIGluIHVzZS4gQnkgZGVmYXVsdCwgZG9uJ3QgbWVhc3VyZVxuICAgKiBhbnl0aGluZywgYnV0IHdlJ2xsIG92ZXJyaWRlIHRoaXMgaWYgd2UgaW5qZWN0IGEgbWVhc3VyZSBmdW5jdGlvbi5cbiAgICovXG4gIHN0b3JlZE1lYXN1cmU6IF9ub01lYXN1cmUsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9iamVjdE5hbWVcbiAgICogQHBhcmFtIHtvYmplY3Q8c3RyaW5nPn0gbWV0aG9kTmFtZXNcbiAgICovXG4gIG1lYXN1cmVNZXRob2RzOiBmdW5jdGlvbihvYmplY3QsIG9iamVjdE5hbWUsIG1ldGhvZE5hbWVzKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgZm9yICh2YXIga2V5IGluIG1ldGhvZE5hbWVzKSB7XG4gICAgICAgIGlmICghbWV0aG9kTmFtZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdFtrZXldID0gUmVhY3RQZXJmLm1lYXN1cmUoXG4gICAgICAgICAgb2JqZWN0TmFtZSxcbiAgICAgICAgICBtZXRob2ROYW1lc1trZXldLFxuICAgICAgICAgIG9iamVjdFtrZXldXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyB0byB3cmFwIG1ldGhvZHMgeW91IHdhbnQgdG8gbWVhc3VyZS4gWmVybyBvdmVyaGVhZCBpbiBwcm9kdWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm5OYW1lXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmNcbiAgICogQHJldHVybiB7ZnVuY3Rpb259XG4gICAqL1xuICBtZWFzdXJlOiBmdW5jdGlvbihvYmpOYW1lLCBmbk5hbWUsIGZ1bmMpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YXIgbWVhc3VyZWRGdW5jID0gbnVsbDtcbiAgICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChSZWFjdFBlcmYuZW5hYmxlTWVhc3VyZSkge1xuICAgICAgICAgIGlmICghbWVhc3VyZWRGdW5jKSB7XG4gICAgICAgICAgICBtZWFzdXJlZEZ1bmMgPSBSZWFjdFBlcmYuc3RvcmVkTWVhc3VyZShvYmpOYW1lLCBmbk5hbWUsIGZ1bmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWVhc3VyZWRGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICB3cmFwcGVyLmRpc3BsYXlOYW1lID0gb2JqTmFtZSArICdfJyArIGZuTmFtZTtcbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYztcbiAgfSxcblxuICBpbmplY3Rpb246IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZWFzdXJlXG4gICAgICovXG4gICAgaW5qZWN0TWVhc3VyZTogZnVuY3Rpb24obWVhc3VyZSkge1xuICAgICAgUmVhY3RQZXJmLnN0b3JlZE1lYXN1cmUgPSBtZWFzdXJlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBTaW1wbHkgcGFzc2VzIHRocm91Z2ggdGhlIG1lYXN1cmVkIGZ1bmN0aW9uLCB3aXRob3V0IG1lYXN1cmluZyBpdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb2JqTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGZuTmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuY1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIF9ub01lYXN1cmUob2JqTmFtZSwgZm5OYW1lLCBmdW5jKSB7XG4gIHJldHVybiBmdW5jO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UGVyZjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JRWlhKbUxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSUVpYSm1YRzRnS2lCQWRIbHdaV05vWldOcmN5QnpkR0YwYVdNdGIyNXNlVnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVMeW9xWEc0Z0tpQlNaV0ZqZEZCbGNtWWdhWE1nWVNCblpXNWxjbUZzSUVGUFVDQnplWE4wWlcwZ1pHVnphV2R1WldRZ2RHOGdiV1ZoYzNWeVpTQndaWEptYjNKdFlXNWpaUzRnVkdocGMxeHVJQ29nYlc5a2RXeGxJRzl1YkhrZ2FHRnpJSFJvWlNCb2IyOXJjem9nYzJWbElGSmxZV04wUkdWbVlYVnNkRkJsY21ZZ1ptOXlJSFJvWlNCaGJtRnNlWE5wY3lCMGIyOXNMbHh1SUNvdlhHNTJZWElnVW1WaFkzUlFaWEptSUQwZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUW05dmJHVmhiaUIwYnlCbGJtRmliR1V2WkdsellXSnNaU0J0WldGemRYSmxiV1Z1ZEM0Z1UyVjBJSFJ2SUdaaGJITmxJR0o1SUdSbFptRjFiSFFnZEc4Z2NISmxkbVZ1ZEZ4dUlDQWdLaUJoWTJOcFpHVnVkR0ZzSUd4dloyZHBibWNnWVc1a0lIQmxjbVlnYkc5emN5NWNiaUFnSUNvdlhHNGdJR1Z1WVdKc1pVMWxZWE4xY21VNklHWmhiSE5sTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJJYjJ4a2N5QnZiblJ2SUhSb1pTQnRaV0Z6ZFhKbElHWjFibU4wYVc5dUlHbHVJSFZ6WlM0Z1Fua2daR1ZtWVhWc2RDd2daRzl1SjNRZ2JXVmhjM1Z5WlZ4dUlDQWdLaUJoYm5sMGFHbHVaeXdnWW5WMElIZGxKMnhzSUc5MlpYSnlhV1JsSUhSb2FYTWdhV1lnZDJVZ2FXNXFaV04wSUdFZ2JXVmhjM1Z5WlNCbWRXNWpkR2x2Ymk1Y2JpQWdJQ292WEc0Z0lITjBiM0psWkUxbFlYTjFjbVU2SUY5dWIwMWxZWE4xY21Vc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J2WW1wbFkzUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUc5aWFtVmpkRTVoYldWY2JpQWdJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUThjM1J5YVc1blBuMGdiV1YwYUc5a1RtRnRaWE5jYmlBZ0lDb3ZYRzRnSUcxbFlYTjFjbVZOWlhSb2IyUnpPaUJtZFc1amRHbHZiaWh2WW1wbFkzUXNJRzlpYW1WamRFNWhiV1VzSUcxbGRHaHZaRTVoYldWektTQjdYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2EyVjVJR2x1SUcxbGRHaHZaRTVoYldWektTQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaGJXVjBhRzlrVG1GdFpYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2EyVjVLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJRzlpYW1WamRGdHJaWGxkSUQwZ1VtVmhZM1JRWlhKbUxtMWxZWE4xY21Vb1hHNGdJQ0FnSUNBZ0lDQWdiMkpxWldOMFRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNCdFpYUm9iMlJPWVcxbGMxdHJaWGxkTEZ4dUlDQWdJQ0FnSUNBZ0lHOWlhbVZqZEZ0clpYbGRYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVmMyVWdkR2hwY3lCMGJ5QjNjbUZ3SUcxbGRHaHZaSE1nZVc5MUlIZGhiblFnZEc4Z2JXVmhjM1Z5WlM0Z1dtVnlieUJ2ZG1WeWFHVmhaQ0JwYmlCd2NtOWtkV04wYVc5dUxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiMkpxVG1GdFpWeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnWm01T1lXMWxYRzRnSUNBcUlFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlHWjFibU5jYmlBZ0lDb2dRSEpsZEhWeWJpQjdablZ1WTNScGIyNTlYRzRnSUNBcUwxeHVJQ0J0WldGemRYSmxPaUJtZFc1amRHbHZiaWh2WW1wT1lXMWxMQ0JtYms1aGJXVXNJR1oxYm1NcElIdGNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNCMllYSWdiV1ZoYzNWeVpXUkdkVzVqSUQwZ2JuVnNiRHRjYmlBZ0lDQWdJSFpoY2lCM2NtRndjR1Z5SUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoU1pXRmpkRkJsY21ZdVpXNWhZbXhsVFdWaGMzVnlaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2doYldWaGMzVnlaV1JHZFc1aktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCdFpXRnpkWEpsWkVaMWJtTWdQU0JTWldGamRGQmxjbVl1YzNSdmNtVmtUV1ZoYzNWeVpTaHZZbXBPWVcxbExDQm1iazVoYldVc0lHWjFibU1wTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiV1ZoYzNWeVpXUkdkVzVqTG1Gd2NHeDVLSFJvYVhNc0lHRnlaM1Z0Wlc1MGN5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1oxYm1NdVlYQndiSGtvZEdocGN5d2dZWEpuZFcxbGJuUnpLVHRjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0IzY21Gd2NHVnlMbVJwYzNCc1lYbE9ZVzFsSUQwZ2IySnFUbUZ0WlNBcklDZGZKeUFySUdadVRtRnRaVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjNjbUZ3Y0dWeU8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdablZ1WXp0Y2JpQWdmU3hjYmx4dUlDQnBibXBsWTNScGIyNDZJSHRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVmU0J0WldGemRYSmxYRzRnSUNBZ0lDb3ZYRzRnSUNBZ2FXNXFaV04wVFdWaGMzVnlaVG9nWm5WdVkzUnBiMjRvYldWaGMzVnlaU2tnZTF4dUlDQWdJQ0FnVW1WaFkzUlFaWEptTG5OMGIzSmxaRTFsWVhOMWNtVWdQU0J0WldGemRYSmxPMXh1SUNBZ0lIMWNiaUFnZlZ4dWZUdGNibHh1THlvcVhHNGdLaUJUYVcxd2JIa2djR0Z6YzJWeklIUm9jbTkxWjJnZ2RHaGxJRzFsWVhOMWNtVmtJR1oxYm1OMGFXOXVMQ0IzYVhSb2IzVjBJRzFsWVhOMWNtbHVaeUJwZEM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYjJKcVRtRnRaVnh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdadVRtRnRaVnh1SUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2Ym4wZ1puVnVZMXh1SUNvZ1FISmxkSFZ5YmlCN1puVnVZM1JwYjI1OVhHNGdLaTljYm1aMWJtTjBhVzl1SUY5dWIwMWxZWE4xY21Vb2IySnFUbUZ0WlN3Z1ptNU9ZVzFsTENCbWRXNWpLU0I3WEc0Z0lISmxkSFZ5YmlCbWRXNWpPMXh1ZlZ4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wVUdWeVpqdGNiaUpkZlE9PSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHt9O1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge1xuICAgIHByb3A6ICdwcm9wJyxcbiAgICBjb250ZXh0OiAnY29udGV4dCcsXG4gICAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29udGV4dCdcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVUbUZ0WlhNdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVUbUZ0WlhOY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGN5QTlJSHQ5TzF4dVhHNXBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUZKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJrNWhiV1Z6SUQwZ2UxeHVJQ0FnSUhCeWIzQTZJQ2R3Y205d0p5eGNiaUFnSUNCamIyNTBaWGgwT2lBblkyOXVkR1Y0ZENjc1hHNGdJQ0FnWTJocGJHUkRiMjUwWlhoME9pQW5ZMmhwYkdRZ1kyOXVkR1Y0ZENkY2JpQWdmVHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGN6dGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFByb3BUeXBlTG9jYXRpb25zXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIga2V5TWlycm9yID0gcmVxdWlyZShcIi4va2V5TWlycm9yXCIpO1xuXG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucyA9IGtleU1pcnJvcih7XG4gIHByb3A6IG51bGwsXG4gIGNvbnRleHQ6IG51bGwsXG4gIGNoaWxkQ29udGV4dDogbnVsbFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9ucztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFByb3BUeXBlc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEZyYWdtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RGcmFnbWVudFwiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzXCIpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAqIHN1cHBsaWVkIHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6XG4gKlxuICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICogICB2YXIgTXlBcnRpY2xlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICogICAgIHByb3BUeXBlczoge1xuICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcbiAqXG4gKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXG4gKlxuICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3RhbmNlT2YoRGlhbG9nKS5pc1JlcXVpcmVkXG4gKiAgICAgfSxcbiAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICogICB9KTtcbiAqXG4gKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gKlxuICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAqXG4gKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gKlxuICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gKiAgICBwcm9wVHlwZXM6IHtcbiAqICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9wIG5hbWVkIFwiaHJlZlwiLlxuICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArXG4gKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAqICAgICAgICAgICk7XG4gKiAgICAgICAgfVxuICogICAgICB9XG4gKiAgICB9LFxuICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59XG4gKiAgfSk7XG4gKlxuICogQGludGVybmFsXG4gKi9cblxudmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxudmFyIGVsZW1lbnRUeXBlQ2hlY2tlciA9IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpO1xudmFyIG5vZGVUeXBlQ2hlY2tlciA9IGNyZWF0ZU5vZGVDaGVja2VyKCk7XG5cbnZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcbiAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcblxuICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgZWxlbWVudDogZWxlbWVudFR5cGVDaGVja2VyLFxuICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICBub2RlOiBub2RlVHlwZUNoZWNrZXIsXG4gIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAgIChcIlJlcXVpcmVkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgd2FzIG5vdCBzcGVjaWZpZWQgaW4gXCIpICtcbiAgICAgICAgICAoXCJgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLlwiKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBvZiB0eXBlIGBcIiArIHByZWNpc2VUeXBlICsgXCJgIFwiKSArXG4gICAgICAgIChcInN1cHBsaWVkIHRvIGBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAsIGV4cGVjdGVkIGBcIiArIGV4cGVjdGVkVHlwZSArIFwiYC5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJucyhudWxsKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgb2YgdHlwZSBcIikgK1xuICAgICAgICAoXCJgXCIgKyBwcm9wVHlwZSArIFwiYCBzdXBwbGllZCB0byBgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLCBleHBlY3RlZCBhbiBhcnJheS5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKTtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgaWYgKCFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBzdXBwbGllZCB0byBcIikgK1xuICAgICAgICAoXCJgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLCBleHBlY3RlZCBhIFJlYWN0RWxlbWVudC5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIHN1cHBsaWVkIHRvIFwiKSArXG4gICAgICAgIChcImBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAsIGV4cGVjdGVkIGluc3RhbmNlIG9mIGBcIiArIGV4cGVjdGVkQ2xhc3NOYW1lICsgXCJgLlwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgPT09IGV4cGVjdGVkVmFsdWVzW2ldKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcbiAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIG9mIHZhbHVlIGBcIiArIHByb3BWYWx1ZSArIFwiYCBcIikgK1xuICAgICAgKFwic3VwcGxpZWQgdG8gYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgb25lIG9mIFwiICsgdmFsdWVzU3RyaW5nICsgXCIuXCIpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBvZiB0eXBlIFwiKSArXG4gICAgICAgIChcImBcIiArIHByb3BUeXBlICsgXCJgIHN1cHBsaWVkIHRvIGBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAsIGV4cGVjdGVkIGFuIG9iamVjdC5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgc3VwcGxpZWQgdG8gXCIpICtcbiAgICAgIChcImBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAuXCIpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgc3VwcGxpZWQgdG8gXCIpICtcbiAgICAgICAgKFwiYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuXCIpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIG9mIHR5cGUgYFwiICsgcHJvcFR5cGUgKyBcImAgXCIpICtcbiAgICAgICAgKFwic3VwcGxpZWQgdG8gYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgYG9iamVjdGAuXCIpXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbik7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcHJvcFZhbHVlID0gUmVhY3RGcmFnbWVudC5leHRyYWN0SWZGcmFnbWVudChwcm9wVmFsdWUpO1xuICAgICAgZm9yICh2YXIgayBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc05vZGUocHJvcFZhbHVlW2tdKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG5mdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG4gIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgcmV0dXJuICdvYmplY3QnO1xuICB9XG4gIHJldHVybiBwcm9wVHlwZTtcbn1cblxuLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG5mdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gJ2RhdGUnO1xuICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9wVHlwZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFB1dExpc3RlbmVyUXVldWVcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoXCIuL1Bvb2xlZENsYXNzXCIpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlclwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG5cbmZ1bmN0aW9uIFJlYWN0UHV0TGlzdGVuZXJRdWV1ZSgpIHtcbiAgdGhpcy5saXN0ZW5lcnNUb1B1dCA9IFtdO1xufVxuXG5hc3NpZ24oUmVhY3RQdXRMaXN0ZW5lclF1ZXVlLnByb3RvdHlwZSwge1xuICBlbnF1ZXVlUHV0TGlzdGVuZXI6IGZ1bmN0aW9uKHJvb3ROb2RlSUQsIHByb3BLZXksIHByb3BWYWx1ZSkge1xuICAgIHRoaXMubGlzdGVuZXJzVG9QdXQucHVzaCh7XG4gICAgICByb290Tm9kZUlEOiByb290Tm9kZUlELFxuICAgICAgcHJvcEtleTogcHJvcEtleSxcbiAgICAgIHByb3BWYWx1ZTogcHJvcFZhbHVlXG4gICAgfSk7XG4gIH0sXG5cbiAgcHV0TGlzdGVuZXJzOiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlzdGVuZXJzVG9QdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaXN0ZW5lclRvUHV0ID0gdGhpcy5saXN0ZW5lcnNUb1B1dFtpXTtcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5wdXRMaXN0ZW5lcihcbiAgICAgICAgbGlzdGVuZXJUb1B1dC5yb290Tm9kZUlELFxuICAgICAgICBsaXN0ZW5lclRvUHV0LnByb3BLZXksXG4gICAgICAgIGxpc3RlbmVyVG9QdXQucHJvcFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfSxcblxuICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0ZW5lcnNUb1B1dC5sZW5ndGggPSAwO1xuICB9LFxuXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxufSk7XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhSZWFjdFB1dExpc3RlbmVyUXVldWUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHV0TGlzdGVuZXJRdWV1ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIENhbGxiYWNrUXVldWUgPSByZXF1aXJlKFwiLi9DYWxsYmFja1F1ZXVlXCIpO1xudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXCIpO1xudmFyIFJlYWN0SW5wdXRTZWxlY3Rpb24gPSByZXF1aXJlKFwiLi9SZWFjdElucHV0U2VsZWN0aW9uXCIpO1xudmFyIFJlYWN0UHV0TGlzdGVuZXJRdWV1ZSA9IHJlcXVpcmUoXCIuL1JlYWN0UHV0TGlzdGVuZXJRdWV1ZVwiKTtcbnZhciBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoXCIuL1RyYW5zYWN0aW9uXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQsIHdoZW4gcG9zc2libGUsIHRoZSBzZWxlY3Rpb24gcmFuZ2UgKGN1cnJlbnRseSBzZWxlY3RlZCB0ZXh0XG4gKiBpbnB1dCkgaXMgbm90IGRpc3R1cmJlZCBieSBwZXJmb3JtaW5nIHRoZSB0cmFuc2FjdGlvbi5cbiAqL1xudmFyIFNFTEVDVElPTl9SRVNUT1JBVElPTiA9IHtcbiAgLyoqXG4gICAqIEByZXR1cm4ge1NlbGVjdGlvbn0gU2VsZWN0aW9uIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgaW5pdGlhbGl6ZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvcm1hdGlvbixcbiAgLyoqXG4gICAqIEBwYXJhbSB7U2VsZWN0aW9ufSBzZWwgU2VsZWN0aW9uIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gYGluaXRpYWxpemVgLlxuICAgKi9cbiAgY2xvc2U6IFJlYWN0SW5wdXRTZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvblxufTtcblxuLyoqXG4gKiBTdXBwcmVzc2VzIGV2ZW50cyAoYmx1ci9mb2N1cykgdGhhdCBjb3VsZCBiZSBpbmFkdmVydGVudGx5IGRpc3BhdGNoZWQgZHVlIHRvXG4gKiBoaWdoIGxldmVsIERPTSBtYW5pcHVsYXRpb25zIChsaWtlIHRlbXBvcmFyaWx5IHJlbW92aW5nIGEgdGV4dCBpbnB1dCBmcm9tIHRoZVxuICogRE9NKS5cbiAqL1xudmFyIEVWRU5UX1NVUFBSRVNTSU9OID0ge1xuICAvKipcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVGhlIGVuYWJsZWQgc3RhdHVzIG9mIGBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJgIGJlZm9yZVxuICAgKiB0aGUgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY3VycmVudGx5RW5hYmxlZCA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5pc0VuYWJsZWQoKTtcbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuc2V0RW5hYmxlZChmYWxzZSk7XG4gICAgcmV0dXJuIGN1cnJlbnRseUVuYWJsZWQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJldmlvdXNseUVuYWJsZWQgRW5hYmxlZCBzdGF0dXMgb2ZcbiAgICogICBgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyYCBiZWZvcmUgdGhlIHJlY29uY2lsaWF0aW9uIG9jY3VyZWQuIGBjbG9zZWBcbiAgICogICByZXN0b3JlcyB0aGUgcHJldmlvdXMgdmFsdWUuXG4gICAqL1xuICBjbG9zZTogZnVuY3Rpb24ocHJldmlvdXNseUVuYWJsZWQpIHtcbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuc2V0RW5hYmxlZChwcmV2aW91c2x5RW5hYmxlZCk7XG4gIH1cbn07XG5cbi8qKlxuICogUHJvdmlkZXMgYSBxdWV1ZSBmb3IgY29sbGVjdGluZyBgY29tcG9uZW50RGlkTW91bnRgIGFuZFxuICogYGNvbXBvbmVudERpZFVwZGF0ZWAgY2FsbGJhY2tzIGR1cmluZyB0aGUgdGhlIHRyYW5zYWN0aW9uLlxuICovXG52YXIgT05fRE9NX1JFQURZX1FVRVVFSU5HID0ge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIGBvbkRPTVJlYWR5YCBxdWV1ZS5cbiAgICovXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5LnJlc2V0KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFmdGVyIERPTSBpcyBmbHVzaGVkLCBpbnZva2UgYWxsIHJlZ2lzdGVyZWQgYG9uRE9NUmVhZHlgIGNhbGxiYWNrcy5cbiAgICovXG4gIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlYWN0TW91bnRSZWFkeS5ub3RpZnlBbGwoKTtcbiAgfVxufTtcblxudmFyIFBVVF9MSVNURU5FUl9RVUVVRUlORyA9IHtcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlLnJlc2V0KCk7XG4gIH0sXG5cbiAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHV0TGlzdGVuZXJRdWV1ZS5wdXRMaXN0ZW5lcnMoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFeGVjdXRlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBgVHJhbnNhY3Rpb25gIGluc3RhbmNlLiBDb25zaWRlciB0aGVzZSBhc1xuICogYmVpbmcgbWVtYmVyIG1ldGhvZHMsIGJ1dCB3aXRoIGFuIGltcGxpZWQgb3JkZXJpbmcgd2hpbGUgYmVpbmcgaXNvbGF0ZWQgZnJvbVxuICogZWFjaCBvdGhlci5cbiAqL1xudmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJTID0gW1xuICBQVVRfTElTVEVORVJfUVVFVUVJTkcsXG4gIFNFTEVDVElPTl9SRVNUT1JBVElPTixcbiAgRVZFTlRfU1VQUFJFU1NJT04sXG4gIE9OX0RPTV9SRUFEWV9RVUVVRUlOR1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHk6XG4gKiAtIFRoZSBvcmRlciB0aGF0IHRoZXNlIGFyZSBsaXN0ZWQgaW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNyaXRpY2FsOlxuICogLSBTdXBwcmVzc2VzIGV2ZW50cy5cbiAqIC0gUmVzdG9yZXMgc2VsZWN0aW9uIHJhbmdlLlxuICpcbiAqIEZ1dHVyZTpcbiAqIC0gUmVzdG9yZSBkb2N1bWVudC9vdmVyZmxvdyBzY3JvbGwgcG9zaXRpb25zIHRoYXQgd2VyZSB1bmludGVudGlvbmFsbHlcbiAqICAgbW9kaWZpZWQgdmlhIERPTSBpbnNlcnRpb25zIGFib3ZlIHRoZSB0b3Agdmlld3BvcnQgYm91bmRhcnkuXG4gKiAtIEltcGxlbWVudC9pbnRlZ3JhdGUgd2l0aCBjdXN0b21pemVkIGNvbnN0cmFpbnQgYmFzZWQgbGF5b3V0IHN5c3RlbSBhbmQga2VlcFxuICogICB0cmFjayBvZiB3aGljaCBkaW1lbnNpb25zIG11c3QgYmUgcmVtZWFzdXJlZC5cbiAqXG4gKiBAY2xhc3MgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvblxuICovXG5mdW5jdGlvbiBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uKCkge1xuICB0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG4gIC8vIE9ubHkgc2VydmVyLXNpZGUgcmVuZGVyaW5nIHJlYWxseSBuZWVkcyB0aGlzIG9wdGlvbiAoc2VlXG4gIC8vIGBSZWFjdFNlcnZlclJlbmRlcmluZ2ApLCBidXQgc2VydmVyLXNpZGUgdXNlc1xuICAvLyBgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbmAgaW5zdGVhZC4gVGhpcyBvcHRpb24gaXMgaGVyZSBzbyB0aGF0IGl0J3NcbiAgLy8gYWNjZXNzaWJsZSBhbmQgZGVmYXVsdHMgdG8gZmFsc2Ugd2hlbiBgUmVhY3RET01Db21wb25lbnRgIGFuZFxuICAvLyBgUmVhY3RUZXh0Q29tcG9uZW50YCBjaGVja3MgaXQgaW4gYG1vdW50Q29tcG9uZW50YC5gXG4gIHRoaXMucmVuZGVyVG9TdGF0aWNNYXJrdXAgPSBmYWxzZTtcbiAgdGhpcy5yZWFjdE1vdW50UmVhZHkgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZChudWxsKTtcbiAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlID0gUmVhY3RQdXRMaXN0ZW5lclF1ZXVlLmdldFBvb2xlZCgpO1xufVxuXG52YXIgTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBAc2VlIFRyYW5zYWN0aW9uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAZmluYWxcbiAgICogQHJldHVybiB7YXJyYXk8b2JqZWN0Pn0gTGlzdCBvZiBvcGVyYXRpb24gd3JhcCBwcm9jZWVkdXJlcy5cbiAgICogICBUT0RPOiBjb252ZXJ0IHRvIGFycmF5PFRyYW5zYWN0aW9uV3JhcHBlcj5cbiAgICovXG4gIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgfSxcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUgdG8gY29sbGVjdCBgb25ET01SZWFkeWAgY2FsbGJhY2tzIHdpdGguXG4gICAqL1xuICBnZXRSZWFjdE1vdW50UmVhZHk6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeTtcbiAgfSxcblxuICBnZXRQdXRMaXN0ZW5lclF1ZXVlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wdXRMaXN0ZW5lclF1ZXVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciB0aGlzLCBhbmQgd2lsbCBpbnZva2UgdGhpcyBiZWZvcmUgYWxsb3dpbmcgdGhpc1xuICAgKiBpbnN0YW5jZSB0byBiZSByZXN1c2VkLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgQ2FsbGJhY2tRdWV1ZS5yZWxlYXNlKHRoaXMucmVhY3RNb3VudFJlYWR5KTtcbiAgICB0aGlzLnJlYWN0TW91bnRSZWFkeSA9IG51bGw7XG5cbiAgICBSZWFjdFB1dExpc3RlbmVyUXVldWUucmVsZWFzZSh0aGlzLnB1dExpc3RlbmVyUXVldWUpO1xuICAgIHRoaXMucHV0TGlzdGVuZXJRdWV1ZSA9IG51bGw7XG4gIH1cbn07XG5cblxuYXNzaWduKFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucHJvdG90eXBlLCBUcmFuc2FjdGlvbi5NaXhpbiwgTWl4aW4pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbik7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RSZWNvbmNpbGVyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RSZWYgPSByZXF1aXJlKFwiLi9SZWFjdFJlZlwiKTtcbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3JcIik7XG5cbi8qKlxuICogSGVscGVyIHRvIGNhbGwgUmVhY3RSZWYuYXR0YWNoUmVmcyB3aXRoIHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCwgc3BsaXQgb3V0XG4gKiB0byBhdm9pZCBhbGxvY2F0aW9ucyBpbiB0aGUgdHJhbnNhY3Rpb24gbW91bnQtcmVhZHkgcXVldWUuXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlZnMoKSB7XG4gIFJlYWN0UmVmLmF0dGFjaFJlZnModGhpcywgdGhpcy5fY3VycmVudEVsZW1lbnQpO1xufVxuXG52YXIgUmVhY3RSZWNvbmNpbGVyID0ge1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LCByZW5kZXJzIG1hcmt1cCwgYW5kIHJlZ2lzdGVycyBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGludGVybmFsSW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IFJlbmRlcmVkIG1hcmt1cCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00uXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbihpbnRlcm5hbEluc3RhbmNlLCByb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIG1hcmt1cCA9IGludGVybmFsSW5zdGFuY2UubW91bnRDb21wb25lbnQocm9vdElELCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNoZWNrQW5kV2FybkZvck11dGF0ZWRQcm9wcyhcbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnRcbiAgICAgICk7XG4gICAgfVxuICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYXR0YWNoUmVmcywgaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfSxcblxuICAvKipcbiAgICogUmVsZWFzZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgYG1vdW50Q29tcG9uZW50YC5cbiAgICpcbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24oaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIFJlYWN0UmVmLmRldGFjaFJlZnMoaW50ZXJuYWxJbnN0YW5jZSwgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQpO1xuICAgIGludGVybmFsSW5zdGFuY2UudW5tb3VudENvbXBvbmVudCgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYSBjb21wb25lbnQgdXNpbmcgYSBuZXcgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnRcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uKFxuICAgIGludGVybmFsSW5zdGFuY2UsIG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dFxuICApIHtcbiAgICB2YXIgcHJldkVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcblxuICAgIGlmIChuZXh0RWxlbWVudCA9PT0gcHJldkVsZW1lbnQgJiYgbmV4dEVsZW1lbnQuX293bmVyICE9IG51bGwpIHtcbiAgICAgIC8vIFNpbmNlIGVsZW1lbnRzIGFyZSBpbW11dGFibGUgYWZ0ZXIgdGhlIG93bmVyIGlzIHJlbmRlcmVkLFxuICAgICAgLy8gd2UgY2FuIGRvIGEgY2hlYXAgaWRlbnRpdHkgY29tcGFyZSBoZXJlIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGFcbiAgICAgIC8vIHN1cGVyZmx1b3VzIHJlY29uY2lsZS4gSXQncyBwb3NzaWJsZSBmb3Igc3RhdGUgdG8gYmUgbXV0YWJsZSBidXQgc3VjaFxuICAgICAgLy8gY2hhbmdlIHNob3VsZCB0cmlnZ2VyIGFuIHVwZGF0ZSBvZiB0aGUgb3duZXIgd2hpY2ggd291bGQgcmVjcmVhdGVcbiAgICAgIC8vIHRoZSBlbGVtZW50LiBXZSBleHBsaWNpdGx5IGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIGFuIG93bmVyIHNpbmNlXG4gICAgICAvLyBpdCdzIHBvc3NpYmxlIGZvciBhbiBlbGVtZW50IGNyZWF0ZWQgb3V0c2lkZSBhIGNvbXBvc2l0ZSB0byBiZVxuICAgICAgLy8gZGVlcGx5IG11dGF0ZWQgYW5kIHJldXNlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFByb3BzKG5leHRFbGVtZW50KTtcbiAgICB9XG5cbiAgICB2YXIgcmVmc0NoYW5nZWQgPSBSZWFjdFJlZi5zaG91bGRVcGRhdGVSZWZzKFxuICAgICAgcHJldkVsZW1lbnQsXG4gICAgICBuZXh0RWxlbWVudFxuICAgICk7XG5cbiAgICBpZiAocmVmc0NoYW5nZWQpIHtcbiAgICAgIFJlYWN0UmVmLmRldGFjaFJlZnMoaW50ZXJuYWxJbnN0YW5jZSwgcHJldkVsZW1lbnQpO1xuICAgIH1cblxuICAgIGludGVybmFsSW5zdGFuY2UucmVjZWl2ZUNvbXBvbmVudChuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlZnNDaGFuZ2VkKSB7XG4gICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGF0dGFjaFJlZnMsIGludGVybmFsSW5zdGFuY2UpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRmx1c2ggYW55IGRpcnR5IGNoYW5nZXMgaW4gYSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGludGVybmFsSW5zdGFuY2VcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTogZnVuY3Rpb24oXG4gICAgaW50ZXJuYWxJbnN0YW5jZSxcbiAgICB0cmFuc2FjdGlvblxuICApIHtcbiAgICBpbnRlcm5hbEluc3RhbmNlLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSh0cmFuc2FjdGlvbik7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFJlY29uY2lsZXI7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSU1pXTnZibU5wYkdWeUxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFVtVmpiMjVqYVd4bGNseHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRkpsWVdOMFVtVm1JRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JTWldaY0lpazdYRzUyWVhJZ1VtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlYQ0lwTzF4dVhHNHZLaXBjYmlBcUlFaGxiSEJsY2lCMGJ5QmpZV3hzSUZKbFlXTjBVbVZtTG1GMGRHRmphRkpsWm5NZ2QybDBhQ0IwYUdseklHTnZiWEJ2YzJsMFpTQmpiMjF3YjI1bGJuUXNJSE53YkdsMElHOTFkRnh1SUNvZ2RHOGdZWFp2YVdRZ1lXeHNiMk5oZEdsdmJuTWdhVzRnZEdobElIUnlZVzV6WVdOMGFXOXVJRzF2ZFc1MExYSmxZV1I1SUhGMVpYVmxMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQmhkSFJoWTJoU1pXWnpLQ2tnZTF4dUlDQlNaV0ZqZEZKbFppNWhkSFJoWTJoU1pXWnpLSFJvYVhNc0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBLVHRjYm4xY2JseHVkbUZ5SUZKbFlXTjBVbVZqYjI1amFXeGxjaUE5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nU1c1cGRHbGhiR2w2WlhNZ2RHaGxJR052YlhCdmJtVnVkQ3dnY21WdVpHVnljeUJ0WVhKcmRYQXNJR0Z1WkNCeVpXZHBjM1JsY25NZ1pYWmxiblFnYkdsemRHVnVaWEp6TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCcGJuUmxjbTVoYkVsdWMzUmhibU5sWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnliMjkwU1VRZ1JFOU5JRWxFSUc5bUlIUm9aU0J5YjI5MElHNXZaR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJueFNaV0ZqZEZObGNuWmxjbEpsYm1SbGNtbHVaMVJ5WVc1ellXTjBhVzl1ZlNCMGNtRnVjMkZqZEdsdmJseHVJQ0FnS2lCQWNtVjBkWEp1SUhzL2MzUnlhVzVuZlNCU1pXNWtaWEpsWkNCdFlYSnJkWEFnZEc4Z1ltVWdhVzV6WlhKMFpXUWdhVzUwYnlCMGFHVWdSRTlOTGx4dUlDQWdLaUJBWm1sdVlXeGNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQnRiM1Z1ZEVOdmJYQnZibVZ1ZERvZ1puVnVZM1JwYjI0b2FXNTBaWEp1WVd4SmJuTjBZVzVqWlN3Z2NtOXZkRWxFTENCMGNtRnVjMkZqZEdsdmJpd2dZMjl1ZEdWNGRDa2dlMXh1SUNBZ0lIWmhjaUJ0WVhKcmRYQWdQU0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbTF2ZFc1MFEyOXRjRzl1Wlc1MEtISnZiM1JKUkN3Z2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUXBPMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lGSmxZV04wUld4bGJXVnVkRlpoYkdsa1lYUnZjaTVqYUdWamEwRnVaRmRoY201R2IzSk5kWFJoZEdWa1VISnZjSE1vWEc0Z0lDQWdJQ0FnSUdsdWRHVnlibUZzU1c1emRHRnVZMlV1WDJOMWNuSmxiblJGYkdWdFpXNTBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNiaUFnSUNCMGNtRnVjMkZqZEdsdmJpNW5aWFJTWldGamRFMXZkVzUwVW1WaFpIa29LUzVsYm5GMVpYVmxLR0YwZEdGamFGSmxabk1zSUdsdWRHVnlibUZzU1c1emRHRnVZMlVwTzF4dUlDQWdJSEpsZEhWeWJpQnRZWEpyZFhBN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsYkdWaGMyVnpJR0Z1ZVNCeVpYTnZkWEpqWlhNZ1lXeHNiMk5oZEdWa0lHSjVJR0J0YjNWdWRFTnZiWEJ2Ym1WdWRHQXVYRzRnSUNBcVhHNGdJQ0FxSUVCbWFXNWhiRnh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJSFZ1Ylc5MWJuUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQlNaV0ZqZEZKbFppNWtaWFJoWTJoU1pXWnpLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXNJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYMk4xY25KbGJuUkZiR1Z0Wlc1MEtUdGNiaUFnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTG5WdWJXOTFiblJEYjIxd2IyNWxiblFvS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWWEJrWVhSbElHRWdZMjl0Y0c5dVpXNTBJSFZ6YVc1bklHRWdibVYzSUdWc1pXMWxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JEYjIxd2IyNWxiblI5SUdsdWRHVnlibUZzU1c1emRHRnVZMlZjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUc1bGVIUkZiR1Z0Wlc1MFhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibjBnZEhKaGJuTmhZM1JwYjI1Y2JpQWdJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJR052Ym5SbGVIUmNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQnlaV05sYVhabFEyOXRjRzl1Wlc1ME9pQm1kVzVqZEdsdmJpaGNiaUFnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTENCdVpYaDBSV3hsYldWdWRDd2dkSEpoYm5OaFkzUnBiMjRzSUdOdmJuUmxlSFJjYmlBZ0tTQjdYRzRnSUNBZ2RtRnlJSEJ5WlhaRmJHVnRaVzUwSUQwZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZlkzVnljbVZ1ZEVWc1pXMWxiblE3WEc1Y2JpQWdJQ0JwWmlBb2JtVjRkRVZzWlcxbGJuUWdQVDA5SUhCeVpYWkZiR1Z0Wlc1MElDWW1JRzVsZUhSRmJHVnRaVzUwTGw5dmQyNWxjaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0F2THlCVGFXNWpaU0JsYkdWdFpXNTBjeUJoY21VZ2FXMXRkWFJoWW14bElHRm1kR1Z5SUhSb1pTQnZkMjVsY2lCcGN5QnlaVzVrWlhKbFpDeGNiaUFnSUNBZ0lDOHZJSGRsSUdOaGJpQmtieUJoSUdOb1pXRndJR2xrWlc1MGFYUjVJR052YlhCaGNtVWdhR1Z5WlNCMGJ5QmtaWFJsY20xcGJtVWdhV1lnZEdocGN5QnBjeUJoWEc0Z0lDQWdJQ0F2THlCemRYQmxjbVpzZFc5MWN5QnlaV052Ym1OcGJHVXVJRWwwSjNNZ2NHOXpjMmxpYkdVZ1ptOXlJSE4wWVhSbElIUnZJR0psSUcxMWRHRmliR1VnWW5WMElITjFZMmhjYmlBZ0lDQWdJQzh2SUdOb1lXNW5aU0J6YUc5MWJHUWdkSEpwWjJkbGNpQmhiaUIxY0dSaGRHVWdiMllnZEdobElHOTNibVZ5SUhkb2FXTm9JSGR2ZFd4a0lISmxZM0psWVhSbFhHNGdJQ0FnSUNBdkx5QjBhR1VnWld4bGJXVnVkQzRnVjJVZ1pYaHdiR2xqYVhSc2VTQmphR1ZqYXlCbWIzSWdkR2hsSUdWNGFYTjBaVzVqWlNCdlppQmhiaUJ2ZDI1bGNpQnphVzVqWlZ4dUlDQWdJQ0FnTHk4Z2FYUW5jeUJ3YjNOemFXSnNaU0JtYjNJZ1lXNGdaV3hsYldWdWRDQmpjbVZoZEdWa0lHOTFkSE5wWkdVZ1lTQmpiMjF3YjNOcGRHVWdkRzhnWW1WY2JpQWdJQ0FnSUM4dklHUmxaWEJzZVNCdGRYUmhkR1ZrSUdGdVpDQnlaWFZ6WldRdVhHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5TG1Ob1pXTnJRVzVrVjJGeWJrWnZjazExZEdGMFpXUlFjbTl3Y3lodVpYaDBSV3hsYldWdWRDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJSEpsWm5ORGFHRnVaMlZrSUQwZ1VtVmhZM1JTWldZdWMyaHZkV3hrVlhCa1lYUmxVbVZtY3loY2JpQWdJQ0FnSUhCeVpYWkZiR1Z0Wlc1MExGeHVJQ0FnSUNBZ2JtVjRkRVZzWlcxbGJuUmNiaUFnSUNBcE8xeHVYRzRnSUNBZ2FXWWdLSEpsWm5ORGFHRnVaMlZrS1NCN1hHNGdJQ0FnSUNCU1pXRmpkRkpsWmk1a1pYUmhZMmhTWldaektHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVc0lIQnlaWFpGYkdWdFpXNTBLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObExuSmxZMlZwZG1WRGIyMXdiMjVsYm5Rb2JtVjRkRVZzWlcxbGJuUXNJSFJ5WVc1ellXTjBhVzl1TENCamIyNTBaWGgwS1R0Y2JseHVJQ0FnSUdsbUlDaHlaV1p6UTJoaGJtZGxaQ2tnZTF4dUlDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0dVoyVjBVbVZoWTNSTmIzVnVkRkpsWVdSNUtDa3VaVzV4ZFdWMVpTaGhkSFJoWTJoU1pXWnpMQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVac2RYTm9JR0Z1ZVNCa2FYSjBlU0JqYUdGdVoyVnpJR2x1SUdFZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQnBiblJsY201aGJFbHVjM1JoYm1ObFhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibjBnZEhKaGJuTmhZM1JwYjI1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCd1pYSm1iM0p0VlhCa1lYUmxTV1pPWldObGMzTmhjbms2SUdaMWJtTjBhVzl1S0Z4dUlDQWdJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXNYRzRnSUNBZ2RISmhibk5oWTNScGIyNWNiaUFnS1NCN1hHNGdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzV3WlhKbWIzSnRWWEJrWVhSbFNXWk9aV05sYzNOaGNua29kSEpoYm5OaFkzUnBiMjRwTzF4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSU1pXTnZibU5wYkdWeU8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UmVmXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0T3duZXJcIik7XG5cbnZhciBSZWFjdFJlZiA9IHt9O1xuXG5mdW5jdGlvbiBhdHRhY2hSZWYocmVmLCBjb21wb25lbnQsIG93bmVyKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25lci5hZGRDb21wb25lbnRBc1JlZlRvKGNvbXBvbmVudCwgcmVmLCBvd25lcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoUmVmKHJlZiwgY29tcG9uZW50LCBvd25lcikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZihudWxsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25lci5yZW1vdmVDb21wb25lbnRBc1JlZkZyb20oY29tcG9uZW50LCByZWYsIG93bmVyKTtcbiAgfVxufVxuXG5SZWFjdFJlZi5hdHRhY2hSZWZzID0gZnVuY3Rpb24oaW5zdGFuY2UsIGVsZW1lbnQpIHtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuICBpZiAocmVmICE9IG51bGwpIHtcbiAgICBhdHRhY2hSZWYocmVmLCBpbnN0YW5jZSwgZWxlbWVudC5fb3duZXIpO1xuICB9XG59O1xuXG5SZWFjdFJlZi5zaG91bGRVcGRhdGVSZWZzID0gZnVuY3Rpb24ocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KSB7XG4gIC8vIElmIGVpdGhlciB0aGUgb3duZXIgb3IgYSBgcmVmYCBoYXMgY2hhbmdlZCwgbWFrZSBzdXJlIHRoZSBuZXdlc3Qgb3duZXJcbiAgLy8gaGFzIHN0b3JlZCBhIHJlZmVyZW5jZSB0byBgdGhpc2AsIGFuZCB0aGUgcHJldmlvdXMgb3duZXIgKGlmIGRpZmZlcmVudClcbiAgLy8gaGFzIGZvcmdvdHRlbiB0aGUgcmVmZXJlbmNlIHRvIGB0aGlzYC4gV2UgdXNlIHRoZSBlbGVtZW50IGluc3RlYWRcbiAgLy8gb2YgdGhlIHB1YmxpYyB0aGlzLnByb3BzIGJlY2F1c2UgdGhlIHBvc3QgcHJvY2Vzc2luZyBjYW5ub3QgZGV0ZXJtaW5lXG4gIC8vIGEgcmVmLiBUaGUgcmVmIGNvbmNlcHR1YWxseSBsaXZlcyBvbiB0aGUgZWxlbWVudC5cblxuICAvLyBUT0RPOiBTaG91bGQgdGhpcyBldmVuIGJlIHBvc3NpYmxlPyBUaGUgb3duZXIgY2Fubm90IGNoYW5nZSBiZWNhdXNlXG4gIC8vIGl0J3MgZm9yYmlkZGVuIGJ5IHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LiBUaGUgcmVmIGNhbiBjaGFuZ2VcbiAgLy8gaWYgeW91IHN3YXAgdGhlIGtleXMgb2YgYnV0IG5vdCB0aGUgcmVmcy4gUmVjb25zaWRlciB3aGVyZSB0aGlzIGNoZWNrXG4gIC8vIGlzIG1hZGUuIEl0IHByb2JhYmx5IGJlbG9uZ3Mgd2hlcmUgdGhlIGtleSBjaGVja2luZyBhbmRcbiAgLy8gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCBpcyBkb25lLlxuXG4gIHJldHVybiAoXG4gICAgbmV4dEVsZW1lbnQuX293bmVyICE9PSBwcmV2RWxlbWVudC5fb3duZXIgfHxcbiAgICBuZXh0RWxlbWVudC5yZWYgIT09IHByZXZFbGVtZW50LnJlZlxuICApO1xufTtcblxuUmVhY3RSZWYuZGV0YWNoUmVmcyA9IGZ1bmN0aW9uKGluc3RhbmNlLCBlbGVtZW50KSB7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjtcbiAgaWYgKHJlZiAhPSBudWxsKSB7XG4gICAgZGV0YWNoUmVmKHJlZiwgaW5zdGFuY2UsIGVsZW1lbnQuX293bmVyKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFJlZjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFJvb3RJbmRleFxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFJvb3RJbmRleEluamVjdGlvbiA9IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IF9jcmVhdGVSZWFjdFJvb3RJbmRleFxuICAgKi9cbiAgaW5qZWN0Q3JlYXRlUmVhY3RSb290SW5kZXg6IGZ1bmN0aW9uKF9jcmVhdGVSZWFjdFJvb3RJbmRleCkge1xuICAgIFJlYWN0Um9vdEluZGV4LmNyZWF0ZVJlYWN0Um9vdEluZGV4ID0gX2NyZWF0ZVJlYWN0Um9vdEluZGV4O1xuICB9XG59O1xuXG52YXIgUmVhY3RSb290SW5kZXggPSB7XG4gIGNyZWF0ZVJlYWN0Um9vdEluZGV4OiBudWxsLFxuICBpbmplY3Rpb246IFJlYWN0Um9vdEluZGV4SW5qZWN0aW9uXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Um9vdEluZGV4O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0SW5zdGFuY2VIYW5kbGVzID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXNcIik7XG52YXIgUmVhY3RNYXJrdXBDaGVja3N1bSA9IHJlcXVpcmUoXCIuL1JlYWN0TWFya3VwQ2hlY2tzdW1cIik7XG52YXIgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbiA9XG4gIHJlcXVpcmUoXCIuL1JlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb25cIik7XG5cbnZhciBlbXB0eU9iamVjdCA9IHJlcXVpcmUoXCIuL2VtcHR5T2JqZWN0XCIpO1xudmFyIGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50XCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgSFRNTCBtYXJrdXBcbiAqL1xuZnVuY3Rpb24gcmVuZGVyVG9TdHJpbmcoZWxlbWVudCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSxcbiAgICAncmVuZGVyVG9TdHJpbmcoKTogWW91IG11c3QgcGFzcyBhIHZhbGlkIFJlYWN0RWxlbWVudC4nXG4gICkgOiBpbnZhcmlhbnQoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSk7XG5cbiAgdmFyIHRyYW5zYWN0aW9uO1xuICB0cnkge1xuICAgIHZhciBpZCA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLmNyZWF0ZVJlYWN0Um9vdElEKCk7XG4gICAgdHJhbnNhY3Rpb24gPSBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLmdldFBvb2xlZChmYWxzZSk7XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ucGVyZm9ybShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoZWxlbWVudCwgbnVsbCk7XG4gICAgICB2YXIgbWFya3VwID1cbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UubW91bnRDb21wb25lbnQoaWQsIHRyYW5zYWN0aW9uLCBlbXB0eU9iamVjdCk7XG4gICAgICByZXR1cm4gUmVhY3RNYXJrdXBDaGVja3N1bS5hZGRDaGVja3N1bVRvTWFya3VwKG1hcmt1cCk7XG4gICAgfSwgbnVsbCk7XG4gIH0gZmluYWxseSB7XG4gICAgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBIVE1MIG1hcmt1cCwgd2l0aG91dCB0aGUgZXh0cmEgUmVhY3QgSUQgYW5kIGNoZWNrc3VtXG4gKiAoZm9yIGdlbmVyYXRpbmcgc3RhdGljIHBhZ2VzKVxuICovXG5mdW5jdGlvbiByZW5kZXJUb1N0YXRpY01hcmt1cChlbGVtZW50KSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpLFxuICAgICdyZW5kZXJUb1N0YXRpY01hcmt1cCgpOiBZb3UgbXVzdCBwYXNzIGEgdmFsaWQgUmVhY3RFbGVtZW50LidcbiAgKSA6IGludmFyaWFudChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkpKTtcblxuICB2YXIgdHJhbnNhY3Rpb247XG4gIHRyeSB7XG4gICAgdmFyIGlkID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RSb290SUQoKTtcbiAgICB0cmFuc2FjdGlvbiA9IFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKHRydWUpO1xuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLnBlcmZvcm0oZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KGVsZW1lbnQsIG51bGwpO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudEluc3RhbmNlLm1vdW50Q29tcG9uZW50KGlkLCB0cmFuc2FjdGlvbiwgZW1wdHlPYmplY3QpO1xuICAgIH0sIG51bGwpO1xuICB9IGZpbmFsbHkge1xuICAgIFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlbmRlclRvU3RyaW5nOiByZW5kZXJUb1N0cmluZyxcbiAgcmVuZGVyVG9TdGF0aWNNYXJrdXA6IHJlbmRlclRvU3RhdGljTWFya3VwXG59O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUlRaWEoyWlhKU1pXNWtaWEpwYm1jdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFkSGx3WldOb1pXTnJjeUJ6ZEdGMGFXTXRiMjVzZVZ4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElGSmxZV04wVTJWeWRtVnlVbVZ1WkdWeWFXNW5YRzRnS2k5Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRkpsWVdOMFJXeGxiV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJXeGxiV1Z1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWelhDSXBPMXh1ZG1GeUlGSmxZV04wVFdGeWEzVndRMmhsWTJ0emRXMGdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTFoY210MWNFTm9aV05yYzNWdFhDSXBPMXh1ZG1GeUlGSmxZV04wVTJWeWRtVnlVbVZ1WkdWeWFXNW5WSEpoYm5OaFkzUnBiMjRnUFZ4dUlDQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGTmxjblpsY2xKbGJtUmxjbWx1WjFSeVlXNXpZV04wYVc5dVhDSXBPMXh1WEc1MllYSWdaVzF3ZEhsUFltcGxZM1FnUFNCeVpYRjFhWEpsS0Z3aUxpOWxiWEIwZVU5aWFtVmpkRndpS1R0Y2JuWmhjaUJwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNXpkR0Z1ZEdsaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZEZ3aUtUdGNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUdWc1pXMWxiblJjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMwZ2RHaGxJRWhVVFV3Z2JXRnlhM1Z3WEc0Z0tpOWNibVoxYm1OMGFXOXVJSEpsYm1SbGNsUnZVM1J5YVc1bktHVnNaVzFsYm5RcElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQlNaV0ZqZEVWc1pXMWxiblF1YVhOV1lXeHBaRVZzWlcxbGJuUW9aV3hsYldWdWRDa3NYRzRnSUNBZ0ozSmxibVJsY2xSdlUzUnlhVzVuS0NrNklGbHZkU0J0ZFhOMElIQmhjM01nWVNCMllXeHBaQ0JTWldGamRFVnNaVzFsYm5RdUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaGxiR1Z0Wlc1MEtTa3BPMXh1WEc0Z0lIWmhjaUIwY21GdWMyRmpkR2x2Ymp0Y2JpQWdkSEo1SUh0Y2JpQWdJQ0IyWVhJZ2FXUWdQU0JTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3k1amNtVmhkR1ZTWldGamRGSnZiM1JKUkNncE8xeHVJQ0FnSUhSeVlXNXpZV04wYVc5dUlEMGdVbVZoWTNSVFpYSjJaWEpTWlc1a1pYSnBibWRVY21GdWMyRmpkR2x2Ymk1blpYUlFiMjlzWldRb1ptRnNjMlVwTzF4dVhHNGdJQ0FnY21WMGRYSnVJSFJ5WVc1ellXTjBhVzl1TG5CbGNtWnZjbTBvWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNCMllYSWdZMjl0Y0c5dVpXNTBTVzV6ZEdGdVkyVWdQU0JwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBLR1ZzWlcxbGJuUXNJRzUxYkd3cE8xeHVJQ0FnSUNBZ2RtRnlJRzFoY210MWNDQTlYRzRnSUNBZ0lDQWdJR052YlhCdmJtVnVkRWx1YzNSaGJtTmxMbTF2ZFc1MFEyOXRjRzl1Wlc1MEtHbGtMQ0IwY21GdWMyRmpkR2x2Yml3Z1pXMXdkSGxQWW1wbFkzUXBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlGSmxZV04wVFdGeWEzVndRMmhsWTJ0emRXMHVZV1JrUTJobFkydHpkVzFVYjAxaGNtdDFjQ2h0WVhKcmRYQXBPMXh1SUNBZ0lIMHNJRzUxYkd3cE8xeHVJQ0I5SUdacGJtRnNiSGtnZTF4dUlDQWdJRkpsWVdOMFUyVnlkbVZ5VW1WdVpHVnlhVzVuVkhKaGJuTmhZM1JwYjI0dWNtVnNaV0Z6WlNoMGNtRnVjMkZqZEdsdmJpazdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMUpsWVdOMFJXeGxiV1Z1ZEgwZ1pXeGxiV1Z1ZEZ4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZTQjBhR1VnU0ZSTlRDQnRZWEpyZFhBc0lIZHBkR2h2ZFhRZ2RHaGxJR1Y0ZEhKaElGSmxZV04wSUVsRUlHRnVaQ0JqYUdWamEzTjFiVnh1SUNvZ0tHWnZjaUJuWlc1bGNtRjBhVzVuSUhOMFlYUnBZeUJ3WVdkbGN5bGNiaUFxTDF4dVpuVnVZM1JwYjI0Z2NtVnVaR1Z5Vkc5VGRHRjBhV05OWVhKcmRYQW9aV3hsYldWdWRDa2dlMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJRkpsWVdOMFJXeGxiV1Z1ZEM1cGMxWmhiR2xrUld4bGJXVnVkQ2hsYkdWdFpXNTBLU3hjYmlBZ0lDQW5jbVZ1WkdWeVZHOVRkR0YwYVdOTllYSnJkWEFvS1RvZ1dXOTFJRzExYzNRZ2NHRnpjeUJoSUhaaGJHbGtJRkpsWVdOMFJXeGxiV1Z1ZEM0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1VtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtHVnNaVzFsYm5RcEtTazdYRzVjYmlBZ2RtRnlJSFJ5WVc1ellXTjBhVzl1TzF4dUlDQjBjbmtnZTF4dUlDQWdJSFpoY2lCcFpDQTlJRkpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6TG1OeVpXRjBaVkpsWVdOMFVtOXZkRWxFS0NrN1hHNGdJQ0FnZEhKaGJuTmhZM1JwYjI0Z1BTQlNaV0ZqZEZObGNuWmxjbEpsYm1SbGNtbHVaMVJ5WVc1ellXTjBhVzl1TG1kbGRGQnZiMnhsWkNoMGNuVmxLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQjBjbUZ1YzJGamRHbHZiaTV3WlhKbWIzSnRLR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnZG1GeUlHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObElEMGdhVzV6ZEdGdWRHbGhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRDaGxiR1Z0Wlc1MExDQnVkV3hzS1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJqYjIxd2IyNWxiblJKYm5OMFlXNWpaUzV0YjNWdWRFTnZiWEJ2Ym1WdWRDaHBaQ3dnZEhKaGJuTmhZM1JwYjI0c0lHVnRjSFI1VDJKcVpXTjBLVHRjYmlBZ0lDQjlMQ0J1ZFd4c0tUdGNiaUFnZlNCbWFXNWhiR3g1SUh0Y2JpQWdJQ0JTWldGamRGTmxjblpsY2xKbGJtUmxjbWx1WjFSeVlXNXpZV04wYVc5dUxuSmxiR1ZoYzJVb2RISmhibk5oWTNScGIyNHBPMXh1SUNCOVhHNTlYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnZTF4dUlDQnlaVzVrWlhKVWIxTjBjbWx1WnpvZ2NtVnVaR1Z5Vkc5VGRISnBibWNzWEc0Z0lISmxibVJsY2xSdlUzUmhkR2xqVFdGeWEzVndPaUJ5Wlc1a1pYSlViMU4wWVhScFkwMWhjbXQxY0Z4dWZUdGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgQ2FsbGJhY2tRdWV1ZSA9IHJlcXVpcmUoXCIuL0NhbGxiYWNrUXVldWVcIik7XG52YXIgUmVhY3RQdXRMaXN0ZW5lclF1ZXVlID0gcmVxdWlyZShcIi4vUmVhY3RQdXRMaXN0ZW5lclF1ZXVlXCIpO1xudmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZShcIi4vVHJhbnNhY3Rpb25cIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xuXG4vKipcbiAqIFByb3ZpZGVzIGEgYENhbGxiYWNrUXVldWVgIHF1ZXVlIGZvciBjb2xsZWN0aW5nIGBvbkRPTVJlYWR5YCBjYWxsYmFja3NcbiAqIGR1cmluZyB0aGUgcGVyZm9ybWluZyBvZiB0aGUgdHJhbnNhY3Rpb24uXG4gKi9cbnZhciBPTl9ET01fUkVBRFlfUVVFVUVJTkcgPSB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgYG9uRE9NUmVhZHlgIHF1ZXVlLlxuICAgKi9cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkucmVzZXQoKTtcbiAgfSxcblxuICBjbG9zZTogZW1wdHlGdW5jdGlvblxufTtcblxudmFyIFBVVF9MSVNURU5FUl9RVUVVRUlORyA9IHtcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlLnJlc2V0KCk7XG4gIH0sXG5cbiAgY2xvc2U6IGVtcHR5RnVuY3Rpb25cbn07XG5cbi8qKlxuICogRXhlY3V0ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgYFRyYW5zYWN0aW9uYCBpbnN0YW5jZS4gQ29uc2lkZXIgdGhlc2UgYXNcbiAqIGJlaW5nIG1lbWJlciBtZXRob2RzLCBidXQgd2l0aCBhbiBpbXBsaWVkIG9yZGVyaW5nIHdoaWxlIGJlaW5nIGlzb2xhdGVkIGZyb21cbiAqIGVhY2ggb3RoZXIuXG4gKi9cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtcbiAgUFVUX0xJU1RFTkVSX1FVRVVFSU5HLFxuICBPTl9ET01fUkVBRFlfUVVFVUVJTkdcbl07XG5cbi8qKlxuICogQGNsYXNzIFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVuZGVyVG9TdGF0aWNNYXJrdXBcbiAqL1xuZnVuY3Rpb24gUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbihyZW5kZXJUb1N0YXRpY01hcmt1cCkge1xuICB0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG4gIHRoaXMucmVuZGVyVG9TdGF0aWNNYXJrdXAgPSByZW5kZXJUb1N0YXRpY01hcmt1cDtcbiAgdGhpcy5yZWFjdE1vdW50UmVhZHkgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZChudWxsKTtcbiAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlID0gUmVhY3RQdXRMaXN0ZW5lclF1ZXVlLmdldFBvb2xlZCgpO1xufVxuXG52YXIgTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBAc2VlIFRyYW5zYWN0aW9uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAZmluYWxcbiAgICogQHJldHVybiB7YXJyYXl9IEVtcHR5IGxpc3Qgb2Ygb3BlcmF0aW9uIHdyYXAgcHJvY2VlZHVyZXMuXG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gVFJBTlNBQ1RJT05fV1JBUFBFUlM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge29iamVjdH0gVGhlIHF1ZXVlIHRvIGNvbGxlY3QgYG9uRE9NUmVhZHlgIGNhbGxiYWNrcyB3aXRoLlxuICAgKi9cbiAgZ2V0UmVhY3RNb3VudFJlYWR5OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFjdE1vdW50UmVhZHk7XG4gIH0sXG5cbiAgZ2V0UHV0TGlzdGVuZXJRdWV1ZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucHV0TGlzdGVuZXJRdWV1ZTtcbiAgfSxcblxuICAvKipcbiAgICogYFBvb2xlZENsYXNzYCBsb29rcyBmb3IgdGhpcywgYW5kIHdpbGwgaW52b2tlIHRoaXMgYmVmb3JlIGFsbG93aW5nIHRoaXNcbiAgICogaW5zdGFuY2UgdG8gYmUgcmVzdXNlZC5cbiAgICovXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uKCkge1xuICAgIENhbGxiYWNrUXVldWUucmVsZWFzZSh0aGlzLnJlYWN0TW91bnRSZWFkeSk7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkgPSBudWxsO1xuXG4gICAgUmVhY3RQdXRMaXN0ZW5lclF1ZXVlLnJlbGVhc2UodGhpcy5wdXRMaXN0ZW5lclF1ZXVlKTtcbiAgICB0aGlzLnB1dExpc3RlbmVyUXVldWUgPSBudWxsO1xuICB9XG59O1xuXG5cbmFzc2lnbihcbiAgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbi5wcm90b3R5cGUsXG4gIFRyYW5zYWN0aW9uLk1peGluLFxuICBNaXhpblxuKTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb247XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFVwZGF0ZVF1ZXVlXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RMaWZlQ3ljbGUgPSByZXF1aXJlKFwiLi9SZWFjdExpZmVDeWNsZVwiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZU1hcFwiKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKSB7XG4gIGlmIChpbnRlcm5hbEluc3RhbmNlICE9PSBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlNb3VudGluZ0luc3RhbmNlKSB7XG4gICAgLy8gSWYgd2UncmUgaW4gYSBjb21wb25lbnRXaWxsTW91bnQgaGFuZGxlciwgZG9uJ3QgZW5xdWV1ZSBhIHJlcmVuZGVyXG4gICAgLy8gYmVjYXVzZSBSZWFjdFVwZGF0ZXMgYXNzdW1lcyB3ZSdyZSBpbiBhIGJyb3dzZXIgY29udGV4dCAod2hpY2ggaXNcbiAgICAvLyB3cm9uZyBmb3Igc2VydmVyIHJlbmRlcmluZykgYW5kIHdlJ3JlIGFib3V0IHRvIGRvIGEgcmVuZGVyIGFueXdheS5cbiAgICAvLyBTZWUgYnVnIGluICMxNzQwLlxuICAgIFJlYWN0VXBkYXRlcy5lbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCxcbiAgICAnJXMoLi4uKTogQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAnICtcbiAgICAnKHN1Y2ggYXMgd2l0aGluIGByZW5kZXJgKS4gUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiAnICtcbiAgICAnb2YgcHJvcHMgYW5kIHN0YXRlLicsXG4gICAgY2FsbGVyTmFtZVxuICApIDogaW52YXJpYW50KFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCkpO1xuXG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQocHVibGljSW5zdGFuY2UpO1xuICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBPbmx5IHdhcm4gd2hlbiB3ZSBoYXZlIGEgY2FsbGVyTmFtZS4gT3RoZXJ3aXNlIHdlIHNob3VsZCBiZSBzaWxlbnQuXG4gICAgICAvLyBXZSdyZSBwcm9iYWJseSBjYWxsaW5nIGZyb20gZW5xdWV1ZUNhbGxiYWNrLiBXZSBkb24ndCB3YW50IHRvIHdhcm5cbiAgICAgIC8vIHRoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSB3YXJuZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGxpZmVjeWNsZSBtZXRob2QuXG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgIWNhbGxlck5hbWUsXG4gICAgICAgICclcyguLi4pOiBDYW4gb25seSB1cGRhdGUgYSBtb3VudGVkIG9yIG1vdW50aW5nIGNvbXBvbmVudC4gJyArXG4gICAgICAgICdUaGlzIHVzdWFsbHkgbWVhbnMgeW91IGNhbGxlZCAlcygpIG9uIGFuIHVubW91bnRlZCAnICtcbiAgICAgICAgJ2NvbXBvbmVudC4gVGhpcyBpcyBhIG5vLW9wLicsXG4gICAgICAgIGNhbGxlck5hbWUsXG4gICAgICAgIGNhbGxlck5hbWVcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaW50ZXJuYWxJbnN0YW5jZSA9PT0gUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5VW5tb3VudGluZ0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaW50ZXJuYWxJbnN0YW5jZTtcbn1cblxuLyoqXG4gKiBSZWFjdFVwZGF0ZVF1ZXVlIGFsbG93cyBmb3Igc3RhdGUgdXBkYXRlcyB0byBiZSBzY2hlZHVsZWQgaW50byBhIGxhdGVyXG4gKiByZWNvbmNpbGlhdGlvbiBzdGVwLlxuICovXG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHtcblxuICAvKipcbiAgICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBhbGwgdGhlIHBlbmRpbmcgdXBkYXRlc1xuICAgKiBoYXZlIHByb2Nlc3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdG8gdXNlIGFzIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUNhbGxiYWNrOiBmdW5jdGlvbihwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2spIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ2VucXVldWVDYWxsYmFjayguLi4pOiBZb3UgY2FsbGVkIGBzZXRQcm9wc2AsIGByZXBsYWNlUHJvcHNgLCAnICtcbiAgICAgICdgc2V0U3RhdGVgLCBgcmVwbGFjZVN0YXRlYCwgb3IgYGZvcmNlVXBkYXRlYCB3aXRoIGEgY2FsbGJhY2sgdGhhdCAnICtcbiAgICAgICdpc25cXCd0IGNhbGxhYmxlLidcbiAgICApIDogaW52YXJpYW50KHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykpO1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKHB1YmxpY0luc3RhbmNlKTtcblxuICAgIC8vIFByZXZpb3VzbHkgd2Ugd291bGQgdGhyb3cgYW4gZXJyb3IgaWYgd2UgZGlkbid0IGhhdmUgYW4gaW50ZXJuYWxcbiAgICAvLyBpbnN0YW5jZS4gU2luY2Ugd2Ugd2FudCB0byBtYWtlIGl0IGEgbm8tb3AgaW5zdGVhZCwgd2UgbWlycm9yIHRoZSBzYW1lXG4gICAgLy8gYmVoYXZpb3Igd2UgaGF2ZSBpbiBvdGhlciBlbnF1ZXVlKiBtZXRob2RzLlxuICAgIC8vIFdlIGFsc28gbmVlZCB0byBpZ25vcmUgY2FsbGJhY2tzIGluIGNvbXBvbmVudFdpbGxNb3VudC4gU2VlXG4gICAgLy8gZW5xdWV1ZVVwZGF0ZXMuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlIHx8XG4gICAgICAgIGludGVybmFsSW5zdGFuY2UgPT09IFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzKSB7XG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzID0gW2NhbGxiYWNrXTtcbiAgICB9XG4gICAgLy8gVE9ETzogVGhlIGNhbGxiYWNrIGhlcmUgaXMgaWdub3JlZCB3aGVuIHNldFN0YXRlIGlzIGNhbGxlZCBmcm9tXG4gICAgLy8gY29tcG9uZW50V2lsbE1vdW50LiBFaXRoZXIgZml4IGl0IG9yIGRpc2FsbG93IGRvaW5nIHNvIGNvbXBsZXRlbHkgaW5cbiAgICAvLyBmYXZvciBvZiBnZXRJbml0aWFsU3RhdGUuIEFsdGVybmF0aXZlbHksIHdlIGNhbiBkaXNhbGxvd1xuICAgIC8vIGNvbXBvbmVudFdpbGxNb3VudCBkdXJpbmcgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgZW5xdWV1ZUNhbGxiYWNrSW50ZXJuYWw6IGZ1bmN0aW9uKGludGVybmFsSW5zdGFuY2UsIGNhbGxiYWNrKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdlbnF1ZXVlQ2FsbGJhY2soLi4uKTogWW91IGNhbGxlZCBgc2V0UHJvcHNgLCBgcmVwbGFjZVByb3BzYCwgJyArXG4gICAgICAnYHNldFN0YXRlYCwgYHJlcGxhY2VTdGF0ZWAsIG9yIGBmb3JjZVVwZGF0ZWAgd2l0aCBhIGNhbGxiYWNrIHRoYXQgJyArXG4gICAgICAnaXNuXFwndCBjYWxsYWJsZS4nXG4gICAgKSA6IGludmFyaWFudCh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpKTtcbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcykge1xuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAgfVxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRVcGRhdGVDb21wb25lbnRgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbihwdWJsaWNJbnN0YW5jZSkge1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKFxuICAgICAgcHVibGljSW5zdGFuY2UsXG4gICAgICAnZm9yY2VVcGRhdGUnXG4gICAgKTtcblxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IHRydWU7XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24ocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShcbiAgICAgIHB1YmxpY0luc3RhbmNlLFxuICAgICAgJ3JlcGxhY2VTdGF0ZSdcbiAgICApO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ1N0YXRlUXVldWUgPSBbY29tcGxldGVTdGF0ZV07XG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ1JlcGxhY2VTdGF0ZSA9IHRydWU7XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbihwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUoXG4gICAgICBwdWJsaWNJbnN0YW5jZSxcbiAgICAgICdzZXRTdGF0ZSdcbiAgICApO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHF1ZXVlID1cbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdTdGF0ZVF1ZXVlIHx8XG4gICAgICAoaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ1N0YXRlUXVldWUgPSBbXSk7XG4gICAgcXVldWUucHVzaChwYXJ0aWFsU3RhdGUpO1xuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgcHJvcHMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFByb3BzIFN1YnNldCBvZiB0aGUgbmV4dCBwcm9wcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0UHJvcHM6IGZ1bmN0aW9uKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsUHJvcHMpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShcbiAgICAgIHB1YmxpY0luc3RhbmNlLFxuICAgICAgJ3NldFByb3BzJ1xuICAgICk7XG5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5faXNUb3BMZXZlbCxcbiAgICAgICdzZXRQcm9wcyguLi4pOiBZb3UgY2FsbGVkIGBzZXRQcm9wc2Agb24gYSAnICtcbiAgICAgICdjb21wb25lbnQgd2l0aCBhIHBhcmVudC4gVGhpcyBpcyBhbiBhbnRpLXBhdHRlcm4gc2luY2UgcHJvcHMgd2lsbCAnICtcbiAgICAgICdnZXQgcmVhY3RpdmVseSB1cGRhdGVkIHdoZW4gcmVuZGVyZWQuIEluc3RlYWQsIGNoYW5nZSB0aGUgb3duZXJcXCdzICcgK1xuICAgICAgJ2ByZW5kZXJgIG1ldGhvZCB0byBwYXNzIHRoZSBjb3JyZWN0IHZhbHVlIGFzIHByb3BzIHRvIHRoZSBjb21wb25lbnQgJyArXG4gICAgICAnd2hlcmUgaXQgaXMgY3JlYXRlZC4nXG4gICAgKSA6IGludmFyaWFudChpbnRlcm5hbEluc3RhbmNlLl9pc1RvcExldmVsKSk7XG5cbiAgICAvLyBNZXJnZSB3aXRoIHRoZSBwZW5kaW5nIGVsZW1lbnQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2Ugd2l0aCBleGlzdGluZ1xuICAgIC8vIGVsZW1lbnQgcHJvcHMuXG4gICAgdmFyIGVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nRWxlbWVudCB8fFxuICAgICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG4gICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBlbGVtZW50LnByb3BzLCBwYXJ0aWFsUHJvcHMpO1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZVByb3BzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHByb3BzXG4gICAgKTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgcHJvcHMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgTmV3IHByb3BzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlUHJvcHM6IGZ1bmN0aW9uKHB1YmxpY0luc3RhbmNlLCBwcm9wcykge1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKFxuICAgICAgcHVibGljSW5zdGFuY2UsXG4gICAgICAncmVwbGFjZVByb3BzJ1xuICAgICk7XG5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5faXNUb3BMZXZlbCxcbiAgICAgICdyZXBsYWNlUHJvcHMoLi4uKTogWW91IGNhbGxlZCBgcmVwbGFjZVByb3BzYCBvbiBhICcgK1xuICAgICAgJ2NvbXBvbmVudCB3aXRoIGEgcGFyZW50LiBUaGlzIGlzIGFuIGFudGktcGF0dGVybiBzaW5jZSBwcm9wcyB3aWxsICcgK1xuICAgICAgJ2dldCByZWFjdGl2ZWx5IHVwZGF0ZWQgd2hlbiByZW5kZXJlZC4gSW5zdGVhZCwgY2hhbmdlIHRoZSBvd25lclxcJ3MgJyArXG4gICAgICAnYHJlbmRlcmAgbWV0aG9kIHRvIHBhc3MgdGhlIGNvcnJlY3QgdmFsdWUgYXMgcHJvcHMgdG8gdGhlIGNvbXBvbmVudCAnICtcbiAgICAgICd3aGVyZSBpdCBpcyBjcmVhdGVkLidcbiAgICApIDogaW52YXJpYW50KGludGVybmFsSW5zdGFuY2UuX2lzVG9wTGV2ZWwpKTtcblxuICAgIC8vIE1lcmdlIHdpdGggdGhlIHBlbmRpbmcgZWxlbWVudCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB3aXRoIGV4aXN0aW5nXG4gICAgLy8gZWxlbWVudCBwcm9wcy5cbiAgICB2YXIgZWxlbWVudCA9IGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50IHx8XG4gICAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcbiAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nRWxlbWVudCA9IFJlYWN0RWxlbWVudC5jbG9uZUFuZFJlcGxhY2VQcm9wcyhcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcm9wc1xuICAgICk7XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIGVucXVldWVFbGVtZW50SW50ZXJuYWw6IGZ1bmN0aW9uKGludGVybmFsSW5zdGFuY2UsIG5ld0VsZW1lbnQpIHtcbiAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nRWxlbWVudCA9IG5ld0VsZW1lbnQ7XG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0VXBkYXRlUXVldWU7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlNaV0ZqZEZWd1pHRjBaVkYxWlhWbFhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdVbVZoWTNSTWFXWmxRM2xqYkdVZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFeHBabVZEZVdOc1pWd2lLVHRjYm5aaGNpQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5WENJcE8xeHVkbUZ5SUZKbFlXTjBSV3hsYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSV3hsYldWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVsdWMzUmhibU5sVFdGd0lEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkpibk4wWVc1alpVMWhjRndpS1R0Y2JuWmhjaUJTWldGamRGVndaR0YwWlhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGVndaR0YwWlhOY0lpazdYRzVjYm5aaGNpQmhjM05wWjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlQWW1wbFkzUXVZWE56YVdkdVhDSXBPMXh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNiblpoY2lCM1lYSnVhVzVuSUQwZ2NtVnhkV2x5WlNoY0lpNHZkMkZ5Ym1sdVoxd2lLVHRjYmx4dVpuVnVZM1JwYjI0Z1pXNXhkV1YxWlZWd1pHRjBaU2hwYm5SbGNtNWhiRWx1YzNSaGJtTmxLU0I3WEc0Z0lHbG1JQ2hwYm5SbGNtNWhiRWx1YzNSaGJtTmxJQ0U5UFNCU1pXRmpkRXhwWm1WRGVXTnNaUzVqZFhKeVpXNTBiSGxOYjNWdWRHbHVaMGx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdMeThnU1dZZ2QyVW5jbVVnYVc0Z1lTQmpiMjF3YjI1bGJuUlhhV3hzVFc5MWJuUWdhR0Z1Wkd4bGNpd2daRzl1SjNRZ1pXNXhkV1YxWlNCaElISmxjbVZ1WkdWeVhHNGdJQ0FnTHk4Z1ltVmpZWFZ6WlNCU1pXRmpkRlZ3WkdGMFpYTWdZWE56ZFcxbGN5QjNaU2R5WlNCcGJpQmhJR0p5YjNkelpYSWdZMjl1ZEdWNGRDQW9kMmhwWTJnZ2FYTmNiaUFnSUNBdkx5QjNjbTl1WnlCbWIzSWdjMlZ5ZG1WeUlISmxibVJsY21sdVp5a2dZVzVrSUhkbEozSmxJR0ZpYjNWMElIUnZJR1J2SUdFZ2NtVnVaR1Z5SUdGdWVYZGhlUzVjYmlBZ0lDQXZMeUJUWldVZ1luVm5JR2x1SUNNeE56UXdMbHh1SUNBZ0lGSmxZV04wVlhCa1lYUmxjeTVsYm5GMVpYVmxWWEJrWVhSbEtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVcE8xeHVJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJR2RsZEVsdWRHVnlibUZzU1c1emRHRnVZMlZTWldGa2VVWnZjbFZ3WkdGMFpTaHdkV0pzYVdOSmJuTjBZVzVqWlN3Z1kyRnNiR1Z5VG1GdFpTa2dlMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlMbU4xY25KbGJuUWdQVDBnYm5Wc2JDeGNiaUFnSUNBbkpYTW9MaTR1S1RvZ1EyRnVibTkwSUhWd1pHRjBaU0JrZFhKcGJtY2dZVzRnWlhocGMzUnBibWNnYzNSaGRHVWdkSEpoYm5OcGRHbHZiaUFuSUN0Y2JpQWdJQ0FuS0hOMVkyZ2dZWE1nZDJsMGFHbHVJR0J5Wlc1a1pYSmdLUzRnVW1WdVpHVnlJRzFsZEdodlpITWdjMmh2ZFd4a0lHSmxJR0VnY0hWeVpTQm1kVzVqZEdsdmJpQW5JQ3RjYmlBZ0lDQW5iMllnY0hKdmNITWdZVzVrSUhOMFlYUmxMaWNzWEc0Z0lDQWdZMkZzYkdWeVRtRnRaVnh1SUNBcElEb2dhVzUyWVhKcFlXNTBLRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlMbU4xY25KbGJuUWdQVDBnYm5Wc2JDa3BPMXh1WEc0Z0lIWmhjaUJwYm5SbGNtNWhiRWx1YzNSaGJtTmxJRDBnVW1WaFkzUkpibk4wWVc1alpVMWhjQzVuWlhRb2NIVmliR2xqU1c1emRHRnVZMlVwTzF4dUlDQnBaaUFvSVdsdWRHVnlibUZzU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0F2THlCUGJteDVJSGRoY200Z2QyaGxiaUIzWlNCb1lYWmxJR0VnWTJGc2JHVnlUbUZ0WlM0Z1QzUm9aWEozYVhObElIZGxJSE5vYjNWc1pDQmlaU0J6YVd4bGJuUXVYRzRnSUNBZ0lDQXZMeUJYWlNkeVpTQndjbTlpWVdKc2VTQmpZV3hzYVc1bklHWnliMjBnWlc1eGRXVjFaVU5oYkd4aVlXTnJMaUJYWlNCa2IyNG5kQ0IzWVc1MElIUnZJSGRoY201Y2JpQWdJQ0FnSUM4dklIUm9aWEpsSUdKbFkyRjFjMlVnZDJVZ1lXeHlaV0ZrZVNCM1lYSnVaV1FnWm05eUlIUm9aU0JqYjNKeVpYTndiMjVrYVc1bklHeHBabVZqZVdOc1pTQnRaWFJvYjJRdVhHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSVdOaGJHeGxjazVoYldVc1hHNGdJQ0FnSUNBZ0lDY2xjeWd1TGk0cE9pQkRZVzRnYjI1c2VTQjFjR1JoZEdVZ1lTQnRiM1Z1ZEdWa0lHOXlJRzF2ZFc1MGFXNW5JR052YlhCdmJtVnVkQzRnSnlBclhHNGdJQ0FnSUNBZ0lDZFVhR2x6SUhWemRXRnNiSGtnYldWaGJuTWdlVzkxSUdOaGJHeGxaQ0FsY3lncElHOXVJR0Z1SUhWdWJXOTFiblJsWkNBbklDdGNiaUFnSUNBZ0lDQWdKMk52YlhCdmJtVnVkQzRnVkdocGN5QnBjeUJoSUc1dkxXOXdMaWNzWEc0Z0lDQWdJQ0FnSUdOaGJHeGxjazVoYldVc1hHNGdJQ0FnSUNBZ0lHTmhiR3hsY2s1aGJXVmNiaUFnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDFjYmx4dUlDQnBaaUFvYVc1MFpYSnVZV3hKYm5OMFlXNWpaU0E5UFQwZ1VtVmhZM1JNYVdabFEzbGpiR1V1WTNWeWNtVnVkR3g1Vlc1dGIzVnVkR2x1WjBsdWMzUmhibU5sS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2FXNTBaWEp1WVd4SmJuTjBZVzVqWlR0Y2JuMWNibHh1THlvcVhHNGdLaUJTWldGamRGVndaR0YwWlZGMVpYVmxJR0ZzYkc5M2N5Qm1iM0lnYzNSaGRHVWdkWEJrWVhSbGN5QjBieUJpWlNCelkyaGxaSFZzWldRZ2FXNTBieUJoSUd4aGRHVnlYRzRnS2lCeVpXTnZibU5wYkdsaGRHbHZiaUJ6ZEdWd0xseHVJQ292WEc1MllYSWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTQTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSVzV4ZFdWMVpTQmhJR05oYkd4aVlXTnJJSFJvWVhRZ2QybHNiQ0JpWlNCbGVHVmpkWFJsWkNCaFpuUmxjaUJoYkd3Z2RHaGxJSEJsYm1ScGJtY2dkWEJrWVhSbGMxeHVJQ0FnS2lCb1lYWmxJSEJ5YjJObGMzTmxaQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRU5zWVhOemZTQndkV0pzYVdOSmJuTjBZVzVqWlNCVWFHVWdhVzV6ZEdGdVkyVWdkRzhnZFhObElHRnpJR0IwYUdsellDQmpiMjUwWlhoMExseHVJQ0FnS2lCQWNHRnlZVzBnZXo5bWRXNWpkR2x2Ym4wZ1kyRnNiR0poWTJzZ1EyRnNiR1ZrSUdGbWRHVnlJSE4wWVhSbElHbHpJSFZ3WkdGMFpXUXVYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaVzV4ZFdWMVpVTmhiR3hpWVdOck9pQm1kVzVqZEdsdmJpaHdkV0pzYVdOSmJuTjBZVzVqWlN3Z1kyRnNiR0poWTJzcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnZEhsd1pXOW1JR05oYkd4aVlXTnJJRDA5UFNBblpuVnVZM1JwYjI0bkxGeHVJQ0FnSUNBZ0oyVnVjWFZsZFdWRFlXeHNZbUZqYXlndUxpNHBPaUJaYjNVZ1kyRnNiR1ZrSUdCelpYUlFjbTl3YzJBc0lHQnlaWEJzWVdObFVISnZjSE5nTENBbklDdGNiaUFnSUNBZ0lDZGdjMlYwVTNSaGRHVmdMQ0JnY21Wd2JHRmpaVk4wWVhSbFlDd2diM0lnWUdadmNtTmxWWEJrWVhSbFlDQjNhWFJvSUdFZ1kyRnNiR0poWTJzZ2RHaGhkQ0FuSUN0Y2JpQWdJQ0FnSUNkcGMyNWNYQ2QwSUdOaGJHeGhZbXhsTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIUjVjR1Z2WmlCallXeHNZbUZqYXlBOVBUMGdKMloxYm1OMGFXOXVKeWtwTzF4dUlDQWdJSFpoY2lCcGJuUmxjbTVoYkVsdWMzUmhibU5sSUQwZ1oyVjBTVzUwWlhKdVlXeEpibk4wWVc1alpWSmxZV1I1Um05eVZYQmtZWFJsS0hCMVlteHBZMGx1YzNSaGJtTmxLVHRjYmx4dUlDQWdJQzh2SUZCeVpYWnBiM1Z6YkhrZ2QyVWdkMjkxYkdRZ2RHaHliM2NnWVc0Z1pYSnliM0lnYVdZZ2QyVWdaR2xrYmlkMElHaGhkbVVnWVc0Z2FXNTBaWEp1WVd4Y2JpQWdJQ0F2THlCcGJuTjBZVzVqWlM0Z1UybHVZMlVnZDJVZ2QyRnVkQ0IwYnlCdFlXdGxJR2wwSUdFZ2JtOHRiM0FnYVc1emRHVmhaQ3dnZDJVZ2JXbHljbTl5SUhSb1pTQnpZVzFsWEc0Z0lDQWdMeThnWW1Wb1lYWnBiM0lnZDJVZ2FHRjJaU0JwYmlCdmRHaGxjaUJsYm5GMVpYVmxLaUJ0WlhSb2IyUnpMbHh1SUNBZ0lDOHZJRmRsSUdGc2MyOGdibVZsWkNCMGJ5QnBaMjV2Y21VZ1kyRnNiR0poWTJ0eklHbHVJR052YlhCdmJtVnVkRmRwYkd4TmIzVnVkQzRnVTJWbFhHNGdJQ0FnTHk4Z1pXNXhkV1YxWlZWd1pHRjBaWE11WEc0Z0lDQWdhV1lnS0NGcGJuUmxjbTVoYkVsdWMzUmhibU5sSUh4OFhHNGdJQ0FnSUNBZ0lHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVZ1BUMDlJRkpsWVdOMFRHbG1aVU41WTJ4bExtTjFjbkpsYm5Sc2VVMXZkVzUwYVc1blNXNXpkR0Z1WTJVcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbDl3Wlc1a2FXNW5RMkZzYkdKaFkydHpLU0I3WEc0Z0lDQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbDl3Wlc1a2FXNW5RMkZzYkdKaFkydHpMbkIxYzJnb1kyRnNiR0poWTJzcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbDl3Wlc1a2FXNW5RMkZzYkdKaFkydHpJRDBnVzJOaGJHeGlZV05yWFR0Y2JpQWdJQ0I5WEc0Z0lDQWdMeThnVkU5RVR6b2dWR2hsSUdOaGJHeGlZV05ySUdobGNtVWdhWE1nYVdkdWIzSmxaQ0IzYUdWdUlITmxkRk4wWVhSbElHbHpJR05oYkd4bFpDQm1jbTl0WEc0Z0lDQWdMeThnWTI5dGNHOXVaVzUwVjJsc2JFMXZkVzUwTGlCRmFYUm9aWElnWm1sNElHbDBJRzl5SUdScGMyRnNiRzkzSUdSdmFXNW5JSE52SUdOdmJYQnNaWFJsYkhrZ2FXNWNiaUFnSUNBdkx5Qm1ZWFp2Y2lCdlppQm5aWFJKYm1sMGFXRnNVM1JoZEdVdUlFRnNkR1Z5Ym1GMGFYWmxiSGtzSUhkbElHTmhiaUJrYVhOaGJHeHZkMXh1SUNBZ0lDOHZJR052YlhCdmJtVnVkRmRwYkd4TmIzVnVkQ0JrZFhKcGJtY2djMlZ5ZG1WeUxYTnBaR1VnY21WdVpHVnlhVzVuTGx4dUlDQWdJR1Z1Y1hWbGRXVlZjR1JoZEdVb2FXNTBaWEp1WVd4SmJuTjBZVzVqWlNrN1hHNGdJSDBzWEc1Y2JpQWdaVzV4ZFdWMVpVTmhiR3hpWVdOclNXNTBaWEp1WVd3NklHWjFibU4wYVc5dUtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUhSNWNHVnZaaUJqWVd4c1ltRmpheUE5UFQwZ0oyWjFibU4wYVc5dUp5eGNiaUFnSUNBZ0lDZGxibkYxWlhWbFEyRnNiR0poWTJzb0xpNHVLVG9nV1c5MUlHTmhiR3hsWkNCZ2MyVjBVSEp2Y0hOZ0xDQmdjbVZ3YkdGalpWQnliM0J6WUN3Z0p5QXJYRzRnSUNBZ0lDQW5ZSE5sZEZOMFlYUmxZQ3dnWUhKbGNHeGhZMlZUZEdGMFpXQXNJRzl5SUdCbWIzSmpaVlZ3WkdGMFpXQWdkMmwwYUNCaElHTmhiR3hpWVdOcklIUm9ZWFFnSnlBclhHNGdJQ0FnSUNBbmFYTnVYRnduZENCallXeHNZV0pzWlM0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaDBlWEJsYjJZZ1kyRnNiR0poWTJzZ1BUMDlJQ2RtZFc1amRHbHZiaWNwS1R0Y2JpQWdJQ0JwWmlBb2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmNHVnVaR2x1WjBOaGJHeGlZV05yY3lrZ2UxeHVJQ0FnSUNBZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmNHVnVaR2x1WjBOaGJHeGlZV05yY3k1d2RYTm9LR05oYkd4aVlXTnJLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmNHVnVaR2x1WjBOaGJHeGlZV05yY3lBOUlGdGpZV3hzWW1GamExMDdYRzRnSUNBZ2ZWeHVJQ0FnSUdWdWNYVmxkV1ZWY0dSaGRHVW9hVzUwWlhKdVlXeEpibk4wWVc1alpTazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVadmNtTmxjeUJoYmlCMWNHUmhkR1V1SUZSb2FYTWdjMmh2ZFd4a0lHOXViSGtnWW1VZ2FXNTJiMnRsWkNCM2FHVnVJR2wwSUdseklHdHViM2R1SUhkcGRHaGNiaUFnSUNvZ1kyVnlkR0ZwYm5SNUlIUm9ZWFFnZDJVZ1lYSmxJQ29xYm05MEtpb2dhVzRnWVNCRVQwMGdkSEpoYm5OaFkzUnBiMjR1WEc0Z0lDQXFYRzRnSUNBcUlGbHZkU0J0WVhrZ2QyRnVkQ0IwYnlCallXeHNJSFJvYVhNZ2QyaGxiaUI1YjNVZ2EyNXZkeUIwYUdGMElITnZiV1VnWkdWbGNHVnlJR0Z6Y0dWamRDQnZaaUIwYUdWY2JpQWdJQ29nWTI5dGNHOXVaVzUwSjNNZ2MzUmhkR1VnYUdGeklHTm9ZVzVuWldRZ1luVjBJR0J6WlhSVGRHRjBaV0FnZDJGeklHNXZkQ0JqWVd4c1pXUXVYRzRnSUNBcVhHNGdJQ0FxSUZSb2FYTWdkMmxzYkNCdWIzUWdhVzUyYjJ0bElHQnphRzkxYkdSVmNHUmhkR1ZEYjIxd2IyNWxiblJnTENCaWRYUWdhWFFnZDJsc2JDQnBiblp2YTJWY2JpQWdJQ29nWUdOdmJYQnZibVZ1ZEZkcGJHeFZjR1JoZEdWZ0lHRnVaQ0JnWTI5dGNHOXVaVzUwUkdsa1ZYQmtZWFJsWUM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVOc1lYTnpmU0J3ZFdKc2FXTkpibk4wWVc1alpTQlVhR1VnYVc1emRHRnVZMlVnZEdoaGRDQnphRzkxYkdRZ2NtVnlaVzVrWlhJdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1pXNXhkV1YxWlVadmNtTmxWWEJrWVhSbE9pQm1kVzVqZEdsdmJpaHdkV0pzYVdOSmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUhaaGNpQnBiblJsY201aGJFbHVjM1JoYm1ObElEMGdaMlYwU1c1MFpYSnVZV3hKYm5OMFlXNWpaVkpsWVdSNVJtOXlWWEJrWVhSbEtGeHVJQ0FnSUNBZ2NIVmliR2xqU1c1emRHRnVZMlVzWEc0Z0lDQWdJQ0FuWm05eVkyVlZjR1JoZEdVblhHNGdJQ0FnS1R0Y2JseHVJQ0FnSUdsbUlDZ2hhVzUwWlhKdVlXeEpibk4wWVc1alpTa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsdWRHVnlibUZzU1c1emRHRnVZMlV1WDNCbGJtUnBibWRHYjNKalpWVndaR0YwWlNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0JsYm5GMVpYVmxWWEJrWVhSbEtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVcE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhCc1lXTmxjeUJoYkd3Z2IyWWdkR2hsSUhOMFlYUmxMaUJCYkhkaGVYTWdkWE5sSUhSb2FYTWdiM0lnWUhObGRGTjBZWFJsWUNCMGJ5QnRkWFJoZEdVZ2MzUmhkR1V1WEc0Z0lDQXFJRmx2ZFNCemFHOTFiR1FnZEhKbFlYUWdZSFJvYVhNdWMzUmhkR1ZnSUdGeklHbHRiWFYwWVdKc1pTNWNiaUFnSUNwY2JpQWdJQ29nVkdobGNtVWdhWE1nYm04Z1ozVmhjbUZ1ZEdWbElIUm9ZWFFnWUhSb2FYTXVjM1JoZEdWZ0lIZHBiR3dnWW1VZ2FXMXRaV1JwWVhSbGJIa2dkWEJrWVhSbFpDd2djMjljYmlBZ0lDb2dZV05qWlhOemFXNW5JR0IwYUdsekxuTjBZWFJsWUNCaFpuUmxjaUJqWVd4c2FXNW5JSFJvYVhNZ2JXVjBhRzlrSUcxaGVTQnlaWFIxY200Z2RHaGxJRzlzWkNCMllXeDFaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRU5zWVhOemZTQndkV0pzYVdOSmJuTjBZVzVqWlNCVWFHVWdhVzV6ZEdGdVkyVWdkR2hoZENCemFHOTFiR1FnY21WeVpXNWtaWEl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQmpiMjF3YkdWMFpWTjBZWFJsSUU1bGVIUWdjM1JoZEdVdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1pXNXhkV1YxWlZKbGNHeGhZMlZUZEdGMFpUb2dablZ1WTNScGIyNG9jSFZpYkdsalNXNXpkR0Z1WTJVc0lHTnZiWEJzWlhSbFUzUmhkR1VwSUh0Y2JpQWdJQ0IyWVhJZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlNBOUlHZGxkRWx1ZEdWeWJtRnNTVzV6ZEdGdVkyVlNaV0ZrZVVadmNsVndaR0YwWlNoY2JpQWdJQ0FnSUhCMVlteHBZMGx1YzNSaGJtTmxMRnh1SUNBZ0lDQWdKM0psY0d4aFkyVlRkR0YwWlNkY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnYVdZZ0tDRnBiblJsY201aGJFbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY0dWdVpHbHVaMU4wWVhSbFVYVmxkV1VnUFNCYlkyOXRjR3hsZEdWVGRHRjBaVjA3WEc0Z0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNWZjR1Z1WkdsdVoxSmxjR3hoWTJWVGRHRjBaU0E5SUhSeWRXVTdYRzVjYmlBZ0lDQmxibkYxWlhWbFZYQmtZWFJsS0dsdWRHVnlibUZzU1c1emRHRnVZMlVwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRaWFJ6SUdFZ2MzVmljMlYwSUc5bUlIUm9aU0J6ZEdGMFpTNGdWR2hwY3lCdmJteDVJR1Y0YVhOMGN5QmlaV05oZFhObElGOXdaVzVrYVc1blUzUmhkR1VnYVhOY2JpQWdJQ29nYVc1MFpYSnVZV3d1SUZSb2FYTWdjSEp2ZG1sa1pYTWdZU0J0WlhKbmFXNW5JSE4wY21GMFpXZDVJSFJvWVhRZ2FYTWdibTkwSUdGMllXbHNZV0pzWlNCMGJ5QmtaV1Z3WEc0Z0lDQXFJSEJ5YjNCbGNuUnBaWE1nZDJocFkyZ2dhWE1nWTI5dVpuVnphVzVuTGlCVVQwUlBPaUJGZUhCdmMyVWdjR1Z1WkdsdVoxTjBZWFJsSUc5eUlHUnZiaWQwSUhWelpTQnBkRnh1SUNBZ0tpQmtkWEpwYm1jZ2RHaGxJRzFsY21kbExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyeGhjM045SUhCMVlteHBZMGx1YzNSaGJtTmxJRlJvWlNCcGJuTjBZVzVqWlNCMGFHRjBJSE5vYjNWc1pDQnlaWEpsYm1SbGNpNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhCaGNuUnBZV3hUZEdGMFpTQk9aWGgwSUhCaGNuUnBZV3dnYzNSaGRHVWdkRzhnWW1VZ2JXVnlaMlZrSUhkcGRHZ2djM1JoZEdVdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1pXNXhkV1YxWlZObGRGTjBZWFJsT2lCbWRXNWpkR2x2Ymlod2RXSnNhV05KYm5OMFlXNWpaU3dnY0dGeWRHbGhiRk4wWVhSbEtTQjdYRzRnSUNBZ2RtRnlJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVWdQU0JuWlhSSmJuUmxjbTVoYkVsdWMzUmhibU5sVW1WaFpIbEdiM0pWY0dSaGRHVW9YRzRnSUNBZ0lDQndkV0pzYVdOSmJuTjBZVzVqWlN4Y2JpQWdJQ0FnSUNkelpYUlRkR0YwWlNkY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnYVdZZ0tDRnBiblJsY201aGJFbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZG1GeUlIRjFaWFZsSUQxY2JpQWdJQ0FnSUdsdWRHVnlibUZzU1c1emRHRnVZMlV1WDNCbGJtUnBibWRUZEdGMFpWRjFaWFZsSUh4OFhHNGdJQ0FnSUNBb2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmNHVnVaR2x1WjFOMFlYUmxVWFZsZFdVZ1BTQmJYU2s3WEc0Z0lDQWdjWFZsZFdVdWNIVnphQ2h3WVhKMGFXRnNVM1JoZEdVcE8xeHVYRzRnSUNBZ1pXNXhkV1YxWlZWd1pHRjBaU2hwYm5SbGNtNWhiRWx1YzNSaGJtTmxLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1UyVjBjeUJoSUhOMVluTmxkQ0J2WmlCMGFHVWdjSEp2Y0hNdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSRGJHRnpjMzBnY0hWaWJHbGpTVzV6ZEdGdVkyVWdWR2hsSUdsdWMzUmhibU5sSUhSb1lYUWdjMmh2ZFd4a0lISmxjbVZ1WkdWeUxseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnY0dGeWRHbGhiRkJ5YjNCeklGTjFZbk5sZENCdlppQjBhR1VnYm1WNGRDQndjbTl3Y3k1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCbGJuRjFaWFZsVTJWMFVISnZjSE02SUdaMWJtTjBhVzl1S0hCMVlteHBZMGx1YzNSaGJtTmxMQ0J3WVhKMGFXRnNVSEp2Y0hNcElIdGNiaUFnSUNCMllYSWdhVzUwWlhKdVlXeEpibk4wWVc1alpTQTlJR2RsZEVsdWRHVnlibUZzU1c1emRHRnVZMlZTWldGa2VVWnZjbFZ3WkdGMFpTaGNiaUFnSUNBZ0lIQjFZbXhwWTBsdWMzUmhibU5sTEZ4dUlDQWdJQ0FnSjNObGRGQnliM0J6SjF4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0JwWmlBb0lXbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVcElIdGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNWZhWE5VYjNCTVpYWmxiQ3hjYmlBZ0lDQWdJQ2R6WlhSUWNtOXdjeWd1TGk0cE9pQlpiM1VnWTJGc2JHVmtJR0J6WlhSUWNtOXdjMkFnYjI0Z1lTQW5JQ3RjYmlBZ0lDQWdJQ2RqYjIxd2IyNWxiblFnZDJsMGFDQmhJSEJoY21WdWRDNGdWR2hwY3lCcGN5QmhiaUJoYm5ScExYQmhkSFJsY200Z2MybHVZMlVnY0hKdmNITWdkMmxzYkNBbklDdGNiaUFnSUNBZ0lDZG5aWFFnY21WaFkzUnBkbVZzZVNCMWNHUmhkR1ZrSUhkb1pXNGdjbVZ1WkdWeVpXUXVJRWx1YzNSbFlXUXNJR05vWVc1blpTQjBhR1VnYjNkdVpYSmNYQ2R6SUNjZ0sxeHVJQ0FnSUNBZ0oyQnlaVzVrWlhKZ0lHMWxkR2h2WkNCMGJ5QndZWE56SUhSb1pTQmpiM0p5WldOMElIWmhiSFZsSUdGeklIQnliM0J6SUhSdklIUm9aU0JqYjIxd2IyNWxiblFnSnlBclhHNGdJQ0FnSUNBbmQyaGxjbVVnYVhRZ2FYTWdZM0psWVhSbFpDNG5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbDlwYzFSdmNFeGxkbVZzS1NrN1hHNWNiaUFnSUNBdkx5Qk5aWEpuWlNCM2FYUm9JSFJvWlNCd1pXNWthVzVuSUdWc1pXMWxiblFnYVdZZ2FYUWdaWGhwYzNSekxDQnZkR2hsY25kcGMyVWdkMmwwYUNCbGVHbHpkR2x1WjF4dUlDQWdJQzh2SUdWc1pXMWxiblFnY0hKdmNITXVYRzRnSUNBZ2RtRnlJR1ZzWlcxbGJuUWdQU0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbDl3Wlc1a2FXNW5SV3hsYldWdWRDQjhmRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmWTNWeWNtVnVkRVZzWlcxbGJuUTdYRzRnSUNBZ2RtRnlJSEJ5YjNCeklEMGdZWE56YVdkdUtIdDlMQ0JsYkdWdFpXNTBMbkJ5YjNCekxDQndZWEowYVdGc1VISnZjSE1wTzF4dUlDQWdJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYM0JsYm1ScGJtZEZiR1Z0Wlc1MElEMGdVbVZoWTNSRmJHVnRaVzUwTG1Oc2IyNWxRVzVrVW1Wd2JHRmpaVkJ5YjNCektGeHVJQ0FnSUNBZ1pXeGxiV1Z1ZEN4Y2JpQWdJQ0FnSUhCeWIzQnpYRzRnSUNBZ0tUdGNibHh1SUNBZ0lHVnVjWFZsZFdWVmNHUmhkR1VvYVc1MFpYSnVZV3hKYm5OMFlXNWpaU2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxjR3hoWTJWeklHRnNiQ0J2WmlCMGFHVWdjSEp2Y0hNdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSRGJHRnpjMzBnY0hWaWJHbGpTVzV6ZEdGdVkyVWdWR2hsSUdsdWMzUmhibU5sSUhSb1lYUWdjMmh2ZFd4a0lISmxjbVZ1WkdWeUxseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnY0hKdmNITWdUbVYzSUhCeWIzQnpMbHh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJR1Z1Y1hWbGRXVlNaWEJzWVdObFVISnZjSE02SUdaMWJtTjBhVzl1S0hCMVlteHBZMGx1YzNSaGJtTmxMQ0J3Y205d2N5a2dlMXh1SUNBZ0lIWmhjaUJwYm5SbGNtNWhiRWx1YzNSaGJtTmxJRDBnWjJWMFNXNTBaWEp1WVd4SmJuTjBZVzVqWlZKbFlXUjVSbTl5VlhCa1lYUmxLRnh1SUNBZ0lDQWdjSFZpYkdsalNXNXpkR0Z1WTJVc1hHNGdJQ0FnSUNBbmNtVndiR0ZqWlZCeWIzQnpKMXh1SUNBZ0lDazdYRzVjYmlBZ0lDQnBaaUFvSVdsdWRHVnlibUZzU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzVjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmFYTlViM0JNWlhabGJDeGNiaUFnSUNBZ0lDZHlaWEJzWVdObFVISnZjSE1vTGk0dUtUb2dXVzkxSUdOaGJHeGxaQ0JnY21Wd2JHRmpaVkJ5YjNCellDQnZiaUJoSUNjZ0sxeHVJQ0FnSUNBZ0oyTnZiWEJ2Ym1WdWRDQjNhWFJvSUdFZ2NHRnlaVzUwTGlCVWFHbHpJR2x6SUdGdUlHRnVkR2t0Y0dGMGRHVnliaUJ6YVc1alpTQndjbTl3Y3lCM2FXeHNJQ2NnSzF4dUlDQWdJQ0FnSjJkbGRDQnlaV0ZqZEdsMlpXeDVJSFZ3WkdGMFpXUWdkMmhsYmlCeVpXNWtaWEpsWkM0Z1NXNXpkR1ZoWkN3Z1kyaGhibWRsSUhSb1pTQnZkMjVsY2x4Y0ozTWdKeUFyWEc0Z0lDQWdJQ0FuWUhKbGJtUmxjbUFnYldWMGFHOWtJSFJ2SUhCaGMzTWdkR2hsSUdOdmNuSmxZM1FnZG1Gc2RXVWdZWE1nY0hKdmNITWdkRzhnZEdobElHTnZiWEJ2Ym1WdWRDQW5JQ3RjYmlBZ0lDQWdJQ2QzYUdWeVpTQnBkQ0JwY3lCamNtVmhkR1ZrTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVdVgybHpWRzl3VEdWMlpXd3BLVHRjYmx4dUlDQWdJQzh2SUUxbGNtZGxJSGRwZEdnZ2RHaGxJSEJsYm1ScGJtY2daV3hsYldWdWRDQnBaaUJwZENCbGVHbHpkSE1zSUc5MGFHVnlkMmx6WlNCM2FYUm9JR1Y0YVhOMGFXNW5YRzRnSUNBZ0x5OGdaV3hsYldWdWRDQndjbTl3Y3k1Y2JpQWdJQ0IyWVhJZ1pXeGxiV1Z1ZENBOUlHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVdVgzQmxibVJwYm1kRmJHVnRaVzUwSUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObExsOWpkWEp5Wlc1MFJXeGxiV1Z1ZER0Y2JpQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbDl3Wlc1a2FXNW5SV3hsYldWdWRDQTlJRkpsWVdOMFJXeGxiV1Z1ZEM1amJHOXVaVUZ1WkZKbGNHeGhZMlZRY205d2N5aGNiaUFnSUNBZ0lHVnNaVzFsYm5Rc1hHNGdJQ0FnSUNCd2NtOXdjMXh1SUNBZ0lDazdYRzVjYmlBZ0lDQmxibkYxWlhWbFZYQmtZWFJsS0dsdWRHVnlibUZzU1c1emRHRnVZMlVwTzF4dUlDQjlMRnh1WEc0Z0lHVnVjWFZsZFdWRmJHVnRaVzUwU1c1MFpYSnVZV3c2SUdaMWJtTjBhVzl1S0dsdWRHVnlibUZzU1c1emRHRnVZMlVzSUc1bGQwVnNaVzFsYm5RcElIdGNiaUFnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTGw5d1pXNWthVzVuUld4bGJXVnVkQ0E5SUc1bGQwVnNaVzFsYm5RN1hHNGdJQ0FnWlc1eGRXVjFaVlZ3WkdGMFpTaHBiblJsY201aGJFbHVjM1JoYm1ObEtUdGNiaUFnZlZ4dVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBWWEJrWVhSbFVYVmxkV1U3WEc0aVhYMD0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0VXBkYXRlc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIENhbGxiYWNrUXVldWUgPSByZXF1aXJlKFwiLi9DYWxsYmFja1F1ZXVlXCIpO1xudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKFwiLi9SZWFjdEN1cnJlbnRPd25lclwiKTtcbnZhciBSZWFjdFBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdFBlcmZcIik7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZShcIi4vUmVhY3RSZWNvbmNpbGVyXCIpO1xudmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZShcIi4vVHJhbnNhY3Rpb25cIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIGRpcnR5Q29tcG9uZW50cyA9IFtdO1xudmFyIGFzYXBDYWxsYmFja1F1ZXVlID0gQ2FsbGJhY2tRdWV1ZS5nZXRQb29sZWQoKTtcbnZhciBhc2FwRW5xdWV1ZWQgPSBmYWxzZTtcblxudmFyIGJhdGNoaW5nU3RyYXRlZ3kgPSBudWxsO1xuXG5mdW5jdGlvbiBlbnN1cmVJbmplY3RlZCgpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiAmJiBiYXRjaGluZ1N0cmF0ZWd5LFxuICAgICdSZWFjdFVwZGF0ZXM6IG11c3QgaW5qZWN0IGEgcmVjb25jaWxlIHRyYW5zYWN0aW9uIGNsYXNzIGFuZCBiYXRjaGluZyAnICtcbiAgICAnc3RyYXRlZ3knXG4gICkgOiBpbnZhcmlhbnQoUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24gJiYgYmF0Y2hpbmdTdHJhdGVneSkpO1xufVxuXG52YXIgTkVTVEVEX1VQREFURVMgPSB7XG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoID0gZGlydHlDb21wb25lbnRzLmxlbmd0aDtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCAhPT0gZGlydHlDb21wb25lbnRzLmxlbmd0aCkge1xuICAgICAgLy8gQWRkaXRpb25hbCB1cGRhdGVzIHdlcmUgZW5xdWV1ZWQgYnkgY29tcG9uZW50RGlkVXBkYXRlIGhhbmRsZXJzIG9yXG4gICAgICAvLyBzaW1pbGFyOyBiZWZvcmUgb3VyIG93biBVUERBVEVfUVVFVUVJTkcgd3JhcHBlciBjbG9zZXMsIHdlIHdhbnQgdG8gcnVuXG4gICAgICAvLyB0aGVzZSBuZXcgdXBkYXRlcyBzbyB0aGF0IGlmIEEncyBjb21wb25lbnREaWRVcGRhdGUgY2FsbHMgc2V0U3RhdGUgb25cbiAgICAgIC8vIEIsIEIgd2lsbCB1cGRhdGUgYmVmb3JlIHRoZSBjYWxsYmFjayBBJ3MgdXBkYXRlciBwcm92aWRlZCB3aGVuIGNhbGxpbmdcbiAgICAgIC8vIHNldFN0YXRlLlxuICAgICAgZGlydHlDb21wb25lbnRzLnNwbGljZSgwLCB0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCk7XG4gICAgICBmbHVzaEJhdGNoZWRVcGRhdGVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcnR5Q29tcG9uZW50cy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfVxufTtcblxudmFyIFVQREFURV9RVUVVRUlORyA9IHtcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jYWxsYmFja1F1ZXVlLnJlc2V0KCk7XG4gIH0sXG4gIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNhbGxiYWNrUXVldWUubm90aWZ5QWxsKCk7XG4gIH1cbn07XG5cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtORVNURURfVVBEQVRFUywgVVBEQVRFX1FVRVVFSU5HXTtcblxuZnVuY3Rpb24gUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbigpIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICB0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCA9IG51bGw7XG4gIHRoaXMuY2FsbGJhY2tRdWV1ZSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKCk7XG4gIHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24gPVxuICAgIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmdldFBvb2xlZCgpO1xufVxuXG5hc3NpZ24oXG4gIFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24ucHJvdG90eXBlLFxuICBUcmFuc2FjdGlvbi5NaXhpbiwge1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gVFJBTlNBQ1RJT05fV1JBUFBFUlM7XG4gIH0sXG5cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggPSBudWxsO1xuICAgIENhbGxiYWNrUXVldWUucmVsZWFzZSh0aGlzLmNhbGxiYWNrUXVldWUpO1xuICAgIHRoaXMuY2FsbGJhY2tRdWV1ZSA9IG51bGw7XG4gICAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uKTtcbiAgICB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uID0gbnVsbDtcbiAgfSxcblxuICBwZXJmb3JtOiBmdW5jdGlvbihtZXRob2QsIHNjb3BlLCBhKSB7XG4gICAgLy8gRXNzZW50aWFsbHkgY2FsbHMgYHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24ucGVyZm9ybShtZXRob2QsIHNjb3BlLCBhKWBcbiAgICAvLyB3aXRoIHRoaXMgdHJhbnNhY3Rpb24ncyB3cmFwcGVycyBhcm91bmQgaXQuXG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uLk1peGluLnBlcmZvcm0uY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLnBlcmZvcm0sXG4gICAgICB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLFxuICAgICAgbWV0aG9kLFxuICAgICAgc2NvcGUsXG4gICAgICBhXG4gICAgKTtcbiAgfVxufSk7XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uKTtcblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoY2FsbGJhY2ssIGEsIGIsIGMsIGQpIHtcbiAgZW5zdXJlSW5qZWN0ZWQoKTtcbiAgYmF0Y2hpbmdTdHJhdGVneS5iYXRjaGVkVXBkYXRlcyhjYWxsYmFjaywgYSwgYiwgYywgZCk7XG59XG5cbi8qKlxuICogQXJyYXkgY29tcGFyYXRvciBmb3IgUmVhY3RDb21wb25lbnRzIGJ5IG1vdW50IG9yZGVyaW5nLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGMxIGZpcnN0IGNvbXBvbmVudCB5b3UncmUgY29tcGFyaW5nXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjMiBzZWNvbmQgY29tcG9uZW50IHlvdSdyZSBjb21wYXJpbmdcbiAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJuIHZhbHVlIHVzYWJsZSBieSBBcnJheS5wcm90b3R5cGUuc29ydCgpLlxuICovXG5mdW5jdGlvbiBtb3VudE9yZGVyQ29tcGFyYXRvcihjMSwgYzIpIHtcbiAgcmV0dXJuIGMxLl9tb3VudE9yZGVyIC0gYzIuX21vdW50T3JkZXI7XG59XG5cbmZ1bmN0aW9uIHJ1bkJhdGNoZWRVcGRhdGVzKHRyYW5zYWN0aW9uKSB7XG4gIHZhciBsZW4gPSB0cmFuc2FjdGlvbi5kaXJ0eUNvbXBvbmVudHNMZW5ndGg7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgbGVuID09PSBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoLFxuICAgICdFeHBlY3RlZCBmbHVzaCB0cmFuc2FjdGlvblxcJ3Mgc3RvcmVkIGRpcnR5LWNvbXBvbmVudHMgbGVuZ3RoICglcykgdG8gJyArXG4gICAgJ21hdGNoIGRpcnR5LWNvbXBvbmVudHMgYXJyYXkgbGVuZ3RoICglcykuJyxcbiAgICBsZW4sXG4gICAgZGlydHlDb21wb25lbnRzLmxlbmd0aFxuICApIDogaW52YXJpYW50KGxlbiA9PT0gZGlydHlDb21wb25lbnRzLmxlbmd0aCkpO1xuXG4gIC8vIFNpbmNlIHJlY29uY2lsaW5nIGEgY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgb3duZXIgaGllcmFyY2h5IHVzdWFsbHkgKG5vdFxuICAvLyBhbHdheXMgLS0gc2VlIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpKSB3aWxsIHJlY29uY2lsZSBjaGlsZHJlbiwgcmVjb25jaWxlXG4gIC8vIHRoZW0gYmVmb3JlIHRoZWlyIGNoaWxkcmVuIGJ5IHNvcnRpbmcgdGhlIGFycmF5LlxuICBkaXJ0eUNvbXBvbmVudHMuc29ydChtb3VudE9yZGVyQ29tcGFyYXRvcik7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIC8vIElmIGEgY29tcG9uZW50IGlzIHVubW91bnRlZCBiZWZvcmUgcGVuZGluZyBjaGFuZ2VzIGFwcGx5LCBpdCB3aWxsIHN0aWxsXG4gICAgLy8gYmUgaGVyZSwgYnV0IHdlIGFzc3VtZSB0aGF0IGl0IGhhcyBjbGVhcmVkIGl0cyBfcGVuZGluZ0NhbGxiYWNrcyBhbmRcbiAgICAvLyB0aGF0IHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSBpcyBhIG5vb3AuXG4gICAgdmFyIGNvbXBvbmVudCA9IGRpcnR5Q29tcG9uZW50c1tpXTtcblxuICAgIC8vIElmIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSBoYXBwZW5zIHRvIGVucXVldWUgYW55IG5ldyB1cGRhdGVzLCB3ZVxuICAgIC8vIHNob3VsZG4ndCBleGVjdXRlIHRoZSBjYWxsYmFja3MgdW50aWwgdGhlIG5leHQgcmVuZGVyIGhhcHBlbnMsIHNvXG4gICAgLy8gc3Rhc2ggdGhlIGNhbGxiYWNrcyBmaXJzdFxuICAgIHZhciBjYWxsYmFja3MgPSBjb21wb25lbnQuX3BlbmRpbmdDYWxsYmFja3M7XG4gICAgY29tcG9uZW50Ll9wZW5kaW5nQ2FsbGJhY2tzID0gbnVsbDtcblxuICAgIFJlYWN0UmVjb25jaWxlci5wZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkoXG4gICAgICBjb21wb25lbnQsXG4gICAgICB0cmFuc2FjdGlvbi5yZWNvbmNpbGVUcmFuc2FjdGlvblxuICAgICk7XG5cbiAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNhbGxiYWNrcy5sZW5ndGg7IGorKykge1xuICAgICAgICB0cmFuc2FjdGlvbi5jYWxsYmFja1F1ZXVlLmVucXVldWUoXG4gICAgICAgICAgY2FsbGJhY2tzW2pdLFxuICAgICAgICAgIGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBmbHVzaEJhdGNoZWRVcGRhdGVzID0gZnVuY3Rpb24oKSB7XG4gIC8vIFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24ncyB3cmFwcGVycyB3aWxsIGNsZWFyIHRoZSBkaXJ0eUNvbXBvbmVudHNcbiAgLy8gYXJyYXkgYW5kIHBlcmZvcm0gYW55IHVwZGF0ZXMgZW5xdWV1ZWQgYnkgbW91bnQtcmVhZHkgaGFuZGxlcnMgKGkuZS4sXG4gIC8vIGNvbXBvbmVudERpZFVwZGF0ZSkgYnV0IHdlIG5lZWQgdG8gY2hlY2sgaGVyZSB0b28gaW4gb3JkZXIgdG8gY2F0Y2hcbiAgLy8gdXBkYXRlcyBlbnF1ZXVlZCBieSBzZXRTdGF0ZSBjYWxsYmFja3MgYW5kIGFzYXAgY2FsbHMuXG4gIHdoaWxlIChkaXJ0eUNvbXBvbmVudHMubGVuZ3RoIHx8IGFzYXBFbnF1ZXVlZCkge1xuICAgIGlmIChkaXJ0eUNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICB2YXIgdHJhbnNhY3Rpb24gPSBSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLmdldFBvb2xlZCgpO1xuICAgICAgdHJhbnNhY3Rpb24ucGVyZm9ybShydW5CYXRjaGVkVXBkYXRlcywgbnVsbCwgdHJhbnNhY3Rpb24pO1xuICAgICAgUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoYXNhcEVucXVldWVkKSB7XG4gICAgICBhc2FwRW5xdWV1ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBxdWV1ZSA9IGFzYXBDYWxsYmFja1F1ZXVlO1xuICAgICAgYXNhcENhbGxiYWNrUXVldWUgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpO1xuICAgICAgcXVldWUubm90aWZ5QWxsKCk7XG4gICAgICBDYWxsYmFja1F1ZXVlLnJlbGVhc2UocXVldWUpO1xuICAgIH1cbiAgfVxufTtcbmZsdXNoQmF0Y2hlZFVwZGF0ZXMgPSBSZWFjdFBlcmYubWVhc3VyZShcbiAgJ1JlYWN0VXBkYXRlcycsXG4gICdmbHVzaEJhdGNoZWRVcGRhdGVzJyxcbiAgZmx1c2hCYXRjaGVkVXBkYXRlc1xuKTtcblxuLyoqXG4gKiBNYXJrIGEgY29tcG9uZW50IGFzIG5lZWRpbmcgYSByZXJlbmRlciwgYWRkaW5nIGFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGFcbiAqIGxpc3Qgb2YgZnVuY3Rpb25zIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgb25jZSB0aGUgcmVyZW5kZXIgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGNvbXBvbmVudCkge1xuICBlbnN1cmVJbmplY3RlZCgpO1xuXG4gIC8vIFZhcmlvdXMgcGFydHMgb2Ygb3VyIGNvZGUgKHN1Y2ggYXMgUmVhY3RDb21wb3NpdGVDb21wb25lbnQnc1xuICAvLyBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KSBhc3N1bWUgdGhhdCBjYWxscyB0byByZW5kZXIgYXJlbid0IG5lc3RlZDtcbiAgLy8gdmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLiAoVGhpcyBpcyBjYWxsZWQgYnkgZWFjaCB0b3AtbGV2ZWwgdXBkYXRlXG4gIC8vIGZ1bmN0aW9uLCBsaWtlIHNldFByb3BzLCBzZXRTdGF0ZSwgZm9yY2VVcGRhdGUsIGV0Yy47IGNyZWF0aW9uIGFuZFxuICAvLyBkZXN0cnVjdGlvbiBvZiB0b3AtbGV2ZWwgY29tcG9uZW50cyBpcyBndWFyZGVkIGluIFJlYWN0TW91bnQuKVxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID09IG51bGwsXG4gICAgJ2VucXVldWVVcGRhdGUoKTogUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyAnICtcbiAgICAnYW5kIHN0YXRlOyB0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgJyArXG4gICAgJ2FsbG93ZWQuIElmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiAnICtcbiAgICAnY29tcG9uZW50RGlkVXBkYXRlLidcbiAgKSA6IG51bGwpO1xuXG4gIGlmICghYmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcykge1xuICAgIGJhdGNoaW5nU3RyYXRlZ3kuYmF0Y2hlZFVwZGF0ZXMoZW5xdWV1ZVVwZGF0ZSwgY29tcG9uZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkaXJ0eUNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xufVxuXG4vKipcbiAqIEVucXVldWUgYSBjYWxsYmFjayB0byBiZSBydW4gYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBiYXRjaGluZyBjeWNsZS4gVGhyb3dzXG4gKiBpZiBubyB1cGRhdGVzIGFyZSBjdXJyZW50bHkgYmVpbmcgcGVyZm9ybWVkLlxuICovXG5mdW5jdGlvbiBhc2FwKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgYmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcyxcbiAgICAnUmVhY3RVcGRhdGVzLmFzYXA6IENhblxcJ3QgZW5xdWV1ZSBhbiBhc2FwIGNhbGxiYWNrIGluIGEgY29udGV4dCB3aGVyZScgK1xuICAgICd1cGRhdGVzIGFyZSBub3QgYmVpbmcgYmF0Y2hlZC4nXG4gICkgOiBpbnZhcmlhbnQoYmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcykpO1xuICBhc2FwQ2FsbGJhY2tRdWV1ZS5lbnF1ZXVlKGNhbGxiYWNrLCBjb250ZXh0KTtcbiAgYXNhcEVucXVldWVkID0gdHJ1ZTtcbn1cblxudmFyIFJlYWN0VXBkYXRlc0luamVjdGlvbiA9IHtcbiAgaW5qZWN0UmVjb25jaWxlVHJhbnNhY3Rpb246IGZ1bmN0aW9uKFJlY29uY2lsZVRyYW5zYWN0aW9uKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIFJlY29uY2lsZVRyYW5zYWN0aW9uLFxuICAgICAgJ1JlYWN0VXBkYXRlczogbXVzdCBwcm92aWRlIGEgcmVjb25jaWxlIHRyYW5zYWN0aW9uIGNsYXNzJ1xuICAgICkgOiBpbnZhcmlhbnQoUmVjb25jaWxlVHJhbnNhY3Rpb24pKTtcbiAgICBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiA9IFJlY29uY2lsZVRyYW5zYWN0aW9uO1xuICB9LFxuXG4gIGluamVjdEJhdGNoaW5nU3RyYXRlZ3k6IGZ1bmN0aW9uKF9iYXRjaGluZ1N0cmF0ZWd5KSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIF9iYXRjaGluZ1N0cmF0ZWd5LFxuICAgICAgJ1JlYWN0VXBkYXRlczogbXVzdCBwcm92aWRlIGEgYmF0Y2hpbmcgc3RyYXRlZ3knXG4gICAgKSA6IGludmFyaWFudChfYmF0Y2hpbmdTdHJhdGVneSkpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2YgX2JhdGNoaW5nU3RyYXRlZ3kuYmF0Y2hlZFVwZGF0ZXMgPT09ICdmdW5jdGlvbicsXG4gICAgICAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYSBiYXRjaGVkVXBkYXRlcygpIGZ1bmN0aW9uJ1xuICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIF9iYXRjaGluZ1N0cmF0ZWd5LmJhdGNoZWRVcGRhdGVzID09PSAnZnVuY3Rpb24nKSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHR5cGVvZiBfYmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcyA9PT0gJ2Jvb2xlYW4nLFxuICAgICAgJ1JlYWN0VXBkYXRlczogbXVzdCBwcm92aWRlIGFuIGlzQmF0Y2hpbmdVcGRhdGVzIGJvb2xlYW4gYXR0cmlidXRlJ1xuICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIF9iYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzID09PSAnYm9vbGVhbicpKTtcbiAgICBiYXRjaGluZ1N0cmF0ZWd5ID0gX2JhdGNoaW5nU3RyYXRlZ3k7XG4gIH1cbn07XG5cbnZhciBSZWFjdFVwZGF0ZXMgPSB7XG4gIC8qKlxuICAgKiBSZWFjdCByZWZlcmVuY2VzIGBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uYCB1c2luZyB0aGlzIHByb3BlcnR5IGluIG9yZGVyXG4gICAqIHRvIGFsbG93IGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246IG51bGwsXG5cbiAgYmF0Y2hlZFVwZGF0ZXM6IGJhdGNoZWRVcGRhdGVzLFxuICBlbnF1ZXVlVXBkYXRlOiBlbnF1ZXVlVXBkYXRlLFxuICBmbHVzaEJhdGNoZWRVcGRhdGVzOiBmbHVzaEJhdGNoZWRVcGRhdGVzLFxuICBpbmplY3Rpb246IFJlYWN0VXBkYXRlc0luamVjdGlvbixcbiAgYXNhcDogYXNhcFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFVwZGF0ZXM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSVmNHUmhkR1Z6TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRlZ3WkdGMFpYTmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJEWVd4c1ltRmphMUYxWlhWbElEMGdjbVZ4ZFdseVpTaGNJaTR2UTJGc2JHSmhZMnRSZFdWMVpWd2lLVHRjYm5aaGNpQlFiMjlzWldSRGJHRnpjeUE5SUhKbGNYVnBjbVVvWENJdUwxQnZiMnhsWkVOc1lYTnpYQ0lwTzF4dWRtRnlJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEZFhKeVpXNTBUM2R1WlhKY0lpazdYRzUyWVhJZ1VtVmhZM1JRWlhKbUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlFaWEptWENJcE8xeHVkbUZ5SUZKbFlXTjBVbVZqYjI1amFXeGxjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVW1WamIyNWphV3hsY2x3aUtUdGNiblpoY2lCVWNtRnVjMkZqZEdsdmJpQTlJSEpsY1hWcGNtVW9YQ0l1TDFSeVlXNXpZV04wYVc5dVhDSXBPMXh1WEc1MllYSWdZWE56YVdkdUlEMGdjbVZ4ZFdseVpTaGNJaTR2VDJKcVpXTjBMbUZ6YzJsbmJsd2lLVHRjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JuWmhjaUJrYVhKMGVVTnZiWEJ2Ym1WdWRITWdQU0JiWFR0Y2JuWmhjaUJoYzJGd1EyRnNiR0poWTJ0UmRXVjFaU0E5SUVOaGJHeGlZV05yVVhWbGRXVXVaMlYwVUc5dmJHVmtLQ2s3WEc1MllYSWdZWE5oY0VWdWNYVmxkV1ZrSUQwZ1ptRnNjMlU3WEc1Y2JuWmhjaUJpWVhSamFHbHVaMU4wY21GMFpXZDVJRDBnYm5Wc2JEdGNibHh1Wm5WdVkzUnBiMjRnWlc1emRYSmxTVzVxWldOMFpXUW9LU0I3WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnVW1WaFkzUlZjR1JoZEdWekxsSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI0Z0ppWWdZbUYwWTJocGJtZFRkSEpoZEdWbmVTeGNiaUFnSUNBblVtVmhZM1JWY0dSaGRHVnpPaUJ0ZFhOMElHbHVhbVZqZENCaElISmxZMjl1WTJsc1pTQjBjbUZ1YzJGamRHbHZiaUJqYkdGemN5QmhibVFnWW1GMFkyaHBibWNnSnlBclhHNGdJQ0FnSjNOMGNtRjBaV2Q1SjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0ZKbFlXTjBWWEJrWVhSbGN5NVNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUlDWW1JR0poZEdOb2FXNW5VM1J5WVhSbFoza3BLVHRjYm4xY2JseHVkbUZ5SUU1RlUxUkZSRjlWVUVSQlZFVlRJRDBnZTF4dUlDQnBibWwwYVdGc2FYcGxPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0IwYUdsekxtUnBjblI1UTI5dGNHOXVaVzUwYzB4bGJtZDBhQ0E5SUdScGNuUjVRMjl0Y0c5dVpXNTBjeTVzWlc1bmRHZzdYRzRnSUgwc1hHNGdJR05zYjNObE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWthWEowZVVOdmJYQnZibVZ1ZEhOTVpXNW5kR2dnSVQwOUlHUnBjblI1UTI5dGNHOXVaVzUwY3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUM4dklFRmtaR2wwYVc5dVlXd2dkWEJrWVhSbGN5QjNaWEpsSUdWdWNYVmxkV1ZrSUdKNUlHTnZiWEJ2Ym1WdWRFUnBaRlZ3WkdGMFpTQm9ZVzVrYkdWeWN5QnZjbHh1SUNBZ0lDQWdMeThnYzJsdGFXeGhjanNnWW1WbWIzSmxJRzkxY2lCdmQyNGdWVkJFUVZSRlgxRlZSVlZGU1U1SElIZHlZWEJ3WlhJZ1kyeHZjMlZ6TENCM1pTQjNZVzUwSUhSdklISjFibHh1SUNBZ0lDQWdMeThnZEdobGMyVWdibVYzSUhWd1pHRjBaWE1nYzI4Z2RHaGhkQ0JwWmlCQkozTWdZMjl0Y0c5dVpXNTBSR2xrVlhCa1lYUmxJR05oYkd4eklITmxkRk4wWVhSbElHOXVYRzRnSUNBZ0lDQXZMeUJDTENCQ0lIZHBiR3dnZFhCa1lYUmxJR0psWm05eVpTQjBhR1VnWTJGc2JHSmhZMnNnUVNkeklIVndaR0YwWlhJZ2NISnZkbWxrWldRZ2QyaGxiaUJqWVd4c2FXNW5YRzRnSUNBZ0lDQXZMeUJ6WlhSVGRHRjBaUzVjYmlBZ0lDQWdJR1JwY25SNVEyOXRjRzl1Wlc1MGN5NXpjR3hwWTJVb01Dd2dkR2hwY3k1a2FYSjBlVU52YlhCdmJtVnVkSE5NWlc1bmRHZ3BPMXh1SUNBZ0lDQWdabXgxYzJoQ1lYUmphR1ZrVlhCa1lYUmxjeWdwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmthWEowZVVOdmJYQnZibVZ1ZEhNdWJHVnVaM1JvSUQwZ01EdGNiaUFnSUNCOVhHNGdJSDFjYm4wN1hHNWNiblpoY2lCVlVFUkJWRVZmVVZWRlZVVkpUa2NnUFNCN1hHNGdJR2x1YVhScFlXeHBlbVU2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUhSb2FYTXVZMkZzYkdKaFkydFJkV1YxWlM1eVpYTmxkQ2dwTzF4dUlDQjlMRnh1SUNCamJHOXpaVG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnZEdocGN5NWpZV3hzWW1GamExRjFaWFZsTG01dmRHbG1lVUZzYkNncE8xeHVJQ0I5WEc1OU8xeHVYRzUyWVhJZ1ZGSkJUbE5CUTFSSlQwNWZWMUpCVUZCRlVsTWdQU0JiVGtWVFZFVkVYMVZRUkVGVVJWTXNJRlZRUkVGVVJWOVJWVVZWUlVsT1IxMDdYRzVjYm1aMWJtTjBhVzl1SUZKbFlXTjBWWEJrWVhSbGMwWnNkWE5vVkhKaGJuTmhZM1JwYjI0b0tTQjdYRzRnSUhSb2FYTXVjbVZwYm1sMGFXRnNhWHBsVkhKaGJuTmhZM1JwYjI0b0tUdGNiaUFnZEdocGN5NWthWEowZVVOdmJYQnZibVZ1ZEhOTVpXNW5kR2dnUFNCdWRXeHNPMXh1SUNCMGFHbHpMbU5oYkd4aVlXTnJVWFZsZFdVZ1BTQkRZV3hzWW1GamExRjFaWFZsTG1kbGRGQnZiMnhsWkNncE8xeHVJQ0IwYUdsekxuSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVJRDFjYmlBZ0lDQlNaV0ZqZEZWd1pHRjBaWE11VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZiaTVuWlhSUWIyOXNaV1FvS1R0Y2JuMWNibHh1WVhOemFXZHVLRnh1SUNCU1pXRmpkRlZ3WkdGMFpYTkdiSFZ6YUZSeVlXNXpZV04wYVc5dUxuQnliM1J2ZEhsd1pTeGNiaUFnVkhKaGJuTmhZM1JwYjI0dVRXbDRhVzRzSUh0Y2JpQWdaMlYwVkhKaGJuTmhZM1JwYjI1WGNtRndjR1Z5Y3pvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUZSU1FVNVRRVU5VU1U5T1gxZFNRVkJRUlZKVE8xeHVJQ0I5TEZ4dVhHNGdJR1JsYzNSeWRXTjBiM0k2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUhSb2FYTXVaR2x5ZEhsRGIyMXdiMjVsYm5SelRHVnVaM1JvSUQwZ2JuVnNiRHRjYmlBZ0lDQkRZV3hzWW1GamExRjFaWFZsTG5KbGJHVmhjMlVvZEdocGN5NWpZV3hzWW1GamExRjFaWFZsS1R0Y2JpQWdJQ0IwYUdsekxtTmhiR3hpWVdOclVYVmxkV1VnUFNCdWRXeHNPMXh1SUNBZ0lGSmxZV04wVlhCa1lYUmxjeTVTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVMbkpsYkdWaGMyVW9kR2hwY3k1eVpXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpazdYRzRnSUNBZ2RHaHBjeTV5WldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2YmlBOUlHNTFiR3c3WEc0Z0lIMHNYRzVjYmlBZ2NHVnlabTl5YlRvZ1puVnVZM1JwYjI0b2JXVjBhRzlrTENCelkyOXdaU3dnWVNrZ2UxeHVJQ0FnSUM4dklFVnpjMlZ1ZEdsaGJHeDVJR05oYkd4eklHQjBhR2x6TG5KbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUxuQmxjbVp2Y20wb2JXVjBhRzlrTENCelkyOXdaU3dnWVNsZ1hHNGdJQ0FnTHk4Z2QybDBhQ0IwYUdseklIUnlZVzV6WVdOMGFXOXVKM01nZDNKaGNIQmxjbk1nWVhKdmRXNWtJR2wwTGx4dUlDQWdJSEpsZEhWeWJpQlVjbUZ1YzJGamRHbHZiaTVOYVhocGJpNXdaWEptYjNKdExtTmhiR3dvWEc0Z0lDQWdJQ0IwYUdsekxGeHVJQ0FnSUNBZ2RHaHBjeTV5WldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ymk1d1pYSm1iM0p0TEZ4dUlDQWdJQ0FnZEdocGN5NXlaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZiaXhjYmlBZ0lDQWdJRzFsZEdodlpDeGNiaUFnSUNBZ0lITmpiM0JsTEZ4dUlDQWdJQ0FnWVZ4dUlDQWdJQ2s3WEc0Z0lIMWNibjBwTzF4dVhHNVFiMjlzWldSRGJHRnpjeTVoWkdSUWIyOXNhVzVuVkc4b1VtVmhZM1JWY0dSaGRHVnpSbXgxYzJoVWNtRnVjMkZqZEdsdmJpazdYRzVjYm1aMWJtTjBhVzl1SUdKaGRHTm9aV1JWY0dSaGRHVnpLR05oYkd4aVlXTnJMQ0JoTENCaUxDQmpMQ0JrS1NCN1hHNGdJR1Z1YzNWeVpVbHVhbVZqZEdWa0tDazdYRzRnSUdKaGRHTm9hVzVuVTNSeVlYUmxaM2t1WW1GMFkyaGxaRlZ3WkdGMFpYTW9ZMkZzYkdKaFkyc3NJR0VzSUdJc0lHTXNJR1FwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUZ5Y21GNUlHTnZiWEJoY21GMGIzSWdabTl5SUZKbFlXTjBRMjl0Y0c5dVpXNTBjeUJpZVNCdGIzVnVkQ0J2Y21SbGNtbHVaeTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQmpNU0JtYVhKemRDQmpiMjF3YjI1bGJuUWdlVzkxSjNKbElHTnZiWEJoY21sdVoxeHVJQ29nUUhCaGNtRnRJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdZeklnYzJWamIyNWtJR052YlhCdmJtVnVkQ0I1YjNVbmNtVWdZMjl0Y0dGeWFXNW5YRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUZKbGRIVnliaUIyWVd4MVpTQjFjMkZpYkdVZ1lua2dRWEp5WVhrdWNISnZkRzkwZVhCbExuTnZjblFvS1M1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYlc5MWJuUlBjbVJsY2tOdmJYQmhjbUYwYjNJb1l6RXNJR015S1NCN1hHNGdJSEpsZEhWeWJpQmpNUzVmYlc5MWJuUlBjbVJsY2lBdElHTXlMbDl0YjNWdWRFOXlaR1Z5TzF4dWZWeHVYRzVtZFc1amRHbHZiaUJ5ZFc1Q1lYUmphR1ZrVlhCa1lYUmxjeWgwY21GdWMyRmpkR2x2YmlrZ2UxeHVJQ0IyWVhJZ2JHVnVJRDBnZEhKaGJuTmhZM1JwYjI0dVpHbHlkSGxEYjIxd2IyNWxiblJ6VEdWdVozUm9PMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJR3hsYmlBOVBUMGdaR2x5ZEhsRGIyMXdiMjVsYm5SekxteGxibWQwYUN4Y2JpQWdJQ0FuUlhod1pXTjBaV1FnWm14MWMyZ2dkSEpoYm5OaFkzUnBiMjVjWENkeklITjBiM0psWkNCa2FYSjBlUzFqYjIxd2IyNWxiblJ6SUd4bGJtZDBhQ0FvSlhNcElIUnZJQ2NnSzF4dUlDQWdJQ2R0WVhSamFDQmthWEowZVMxamIyMXdiMjVsYm5SeklHRnljbUY1SUd4bGJtZDBhQ0FvSlhNcExpY3NYRzRnSUNBZ2JHVnVMRnh1SUNBZ0lHUnBjblI1UTI5dGNHOXVaVzUwY3k1c1pXNW5kR2hjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hzWlc0Z1BUMDlJR1JwY25SNVEyOXRjRzl1Wlc1MGN5NXNaVzVuZEdncEtUdGNibHh1SUNBdkx5QlRhVzVqWlNCeVpXTnZibU5wYkdsdVp5QmhJR052YlhCdmJtVnVkQ0JvYVdkb1pYSWdhVzRnZEdobElHOTNibVZ5SUdocFpYSmhjbU5vZVNCMWMzVmhiR3g1SUNodWIzUmNiaUFnTHk4Z1lXeDNZWGx6SUMwdElITmxaU0J6YUc5MWJHUkRiMjF3YjI1bGJuUlZjR1JoZEdVb0tTa2dkMmxzYkNCeVpXTnZibU5wYkdVZ1kyaHBiR1J5Wlc0c0lISmxZMjl1WTJsc1pWeHVJQ0F2THlCMGFHVnRJR0psWm05eVpTQjBhR1ZwY2lCamFHbHNaSEpsYmlCaWVTQnpiM0owYVc1bklIUm9aU0JoY25KaGVTNWNiaUFnWkdseWRIbERiMjF3YjI1bGJuUnpMbk52Y25Rb2JXOTFiblJQY21SbGNrTnZiWEJoY21GMGIzSXBPMXh1WEc0Z0lHWnZjaUFvZG1GeUlHa2dQU0F3T3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQXZMeUJKWmlCaElHTnZiWEJ2Ym1WdWRDQnBjeUIxYm0xdmRXNTBaV1FnWW1WbWIzSmxJSEJsYm1ScGJtY2dZMmhoYm1kbGN5QmhjSEJzZVN3Z2FYUWdkMmxzYkNCemRHbHNiRnh1SUNBZ0lDOHZJR0psSUdobGNtVXNJR0oxZENCM1pTQmhjM04xYldVZ2RHaGhkQ0JwZENCb1lYTWdZMnhsWVhKbFpDQnBkSE1nWDNCbGJtUnBibWREWVd4c1ltRmphM01nWVc1a1hHNGdJQ0FnTHk4Z2RHaGhkQ0J3WlhKbWIzSnRWWEJrWVhSbFNXWk9aV05sYzNOaGNua2dhWE1nWVNCdWIyOXdMbHh1SUNBZ0lIWmhjaUJqYjIxd2IyNWxiblFnUFNCa2FYSjBlVU52YlhCdmJtVnVkSE5iYVYwN1hHNWNiaUFnSUNBdkx5QkpaaUJ3WlhKbWIzSnRWWEJrWVhSbFNXWk9aV05sYzNOaGNua2dhR0Z3Y0dWdWN5QjBieUJsYm5GMVpYVmxJR0Z1ZVNCdVpYY2dkWEJrWVhSbGN5d2dkMlZjYmlBZ0lDQXZMeUJ6YUc5MWJHUnVKM1FnWlhobFkzVjBaU0IwYUdVZ1kyRnNiR0poWTJ0eklIVnVkR2xzSUhSb1pTQnVaWGgwSUhKbGJtUmxjaUJvWVhCd1pXNXpMQ0J6YjF4dUlDQWdJQzh2SUhOMFlYTm9JSFJvWlNCallXeHNZbUZqYTNNZ1ptbHljM1JjYmlBZ0lDQjJZWElnWTJGc2JHSmhZMnR6SUQwZ1kyOXRjRzl1Wlc1MExsOXdaVzVrYVc1blEyRnNiR0poWTJ0ek8xeHVJQ0FnSUdOdmJYQnZibVZ1ZEM1ZmNHVnVaR2x1WjBOaGJHeGlZV05yY3lBOUlHNTFiR3c3WEc1Y2JpQWdJQ0JTWldGamRGSmxZMjl1WTJsc1pYSXVjR1Z5Wm05eWJWVndaR0YwWlVsbVRtVmpaWE56WVhKNUtGeHVJQ0FnSUNBZ1kyOXRjRzl1Wlc1MExGeHVJQ0FnSUNBZ2RISmhibk5oWTNScGIyNHVjbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjVjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdhV1lnS0dOaGJHeGlZV05yY3lrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FpQTlJREE3SUdvZ1BDQmpZV3hzWW1GamEzTXViR1Z1WjNSb095QnFLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2RISmhibk5oWTNScGIyNHVZMkZzYkdKaFkydFJkV1YxWlM1bGJuRjFaWFZsS0Z4dUlDQWdJQ0FnSUNBZ0lHTmhiR3hpWVdOcmMxdHFYU3hjYmlBZ0lDQWdJQ0FnSUNCamIyMXdiMjVsYm5RdVoyVjBVSFZpYkdsalNXNXpkR0Z1WTJVb0tWeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dWZWeHVYRzUyWVhJZ1pteDFjMmhDWVhSamFHVmtWWEJrWVhSbGN5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQXZMeUJTWldGamRGVndaR0YwWlhOR2JIVnphRlJ5WVc1ellXTjBhVzl1SjNNZ2QzSmhjSEJsY25NZ2QybHNiQ0JqYkdWaGNpQjBhR1VnWkdseWRIbERiMjF3YjI1bGJuUnpYRzRnSUM4dklHRnljbUY1SUdGdVpDQndaWEptYjNKdElHRnVlU0IxY0dSaGRHVnpJR1Z1Y1hWbGRXVmtJR0o1SUcxdmRXNTBMWEpsWVdSNUlHaGhibVJzWlhKeklDaHBMbVV1TEZ4dUlDQXZMeUJqYjIxd2IyNWxiblJFYVdSVmNHUmhkR1VwSUdKMWRDQjNaU0J1WldWa0lIUnZJR05vWldOcklHaGxjbVVnZEc5dklHbHVJRzl5WkdWeUlIUnZJR05oZEdOb1hHNGdJQzh2SUhWd1pHRjBaWE1nWlc1eGRXVjFaV1FnWW5rZ2MyVjBVM1JoZEdVZ1kyRnNiR0poWTJ0eklHRnVaQ0JoYzJGd0lHTmhiR3h6TGx4dUlDQjNhR2xzWlNBb1pHbHlkSGxEYjIxd2IyNWxiblJ6TG14bGJtZDBhQ0I4ZkNCaGMyRndSVzV4ZFdWMVpXUXBJSHRjYmlBZ0lDQnBaaUFvWkdseWRIbERiMjF3YjI1bGJuUnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdkbUZ5SUhSeVlXNXpZV04wYVc5dUlEMGdVbVZoWTNSVmNHUmhkR1Z6Um14MWMyaFVjbUZ1YzJGamRHbHZiaTVuWlhSUWIyOXNaV1FvS1R0Y2JpQWdJQ0FnSUhSeVlXNXpZV04wYVc5dUxuQmxjbVp2Y20wb2NuVnVRbUYwWTJobFpGVndaR0YwWlhNc0lHNTFiR3dzSUhSeVlXNXpZV04wYVc5dUtUdGNiaUFnSUNBZ0lGSmxZV04wVlhCa1lYUmxjMFpzZFhOb1ZISmhibk5oWTNScGIyNHVjbVZzWldGelpTaDBjbUZ1YzJGamRHbHZiaWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0dGellYQkZibkYxWlhWbFpDa2dlMXh1SUNBZ0lDQWdZWE5oY0VWdWNYVmxkV1ZrSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0IyWVhJZ2NYVmxkV1VnUFNCaGMyRndRMkZzYkdKaFkydFJkV1YxWlR0Y2JpQWdJQ0FnSUdGellYQkRZV3hzWW1GamExRjFaWFZsSUQwZ1EyRnNiR0poWTJ0UmRXVjFaUzVuWlhSUWIyOXNaV1FvS1R0Y2JpQWdJQ0FnSUhGMVpYVmxMbTV2ZEdsbWVVRnNiQ2dwTzF4dUlDQWdJQ0FnUTJGc2JHSmhZMnRSZFdWMVpTNXlaV3hsWVhObEtIRjFaWFZsS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibjA3WEc1bWJIVnphRUpoZEdOb1pXUlZjR1JoZEdWeklEMGdVbVZoWTNSUVpYSm1MbTFsWVhOMWNtVW9YRzRnSUNkU1pXRmpkRlZ3WkdGMFpYTW5MRnh1SUNBblpteDFjMmhDWVhSamFHVmtWWEJrWVhSbGN5Y3NYRzRnSUdac2RYTm9RbUYwWTJobFpGVndaR0YwWlhOY2JpazdYRzVjYmk4cUtseHVJQ29nVFdGeWF5QmhJR052YlhCdmJtVnVkQ0JoY3lCdVpXVmthVzVuSUdFZ2NtVnlaVzVrWlhJc0lHRmtaR2x1WnlCaGJpQnZjSFJwYjI1aGJDQmpZV3hzWW1GamF5QjBieUJoWEc0Z0tpQnNhWE4wSUc5bUlHWjFibU4wYVc5dWN5QjNhR2xqYUNCM2FXeHNJR0psSUdWNFpXTjFkR1ZrSUc5dVkyVWdkR2hsSUhKbGNtVnVaR1Z5SUc5alkzVnljeTVjYmlBcUwxeHVablZ1WTNScGIyNGdaVzV4ZFdWMVpWVndaR0YwWlNoamIyMXdiMjVsYm5RcElIdGNiaUFnWlc1emRYSmxTVzVxWldOMFpXUW9LVHRjYmx4dUlDQXZMeUJXWVhKcGIzVnpJSEJoY25SeklHOW1JRzkxY2lCamIyUmxJQ2h6ZFdOb0lHRnpJRkpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1MEozTmNiaUFnTHk4Z1gzSmxibVJsY2xaaGJHbGtZWFJsWkVOdmJYQnZibVZ1ZENrZ1lYTnpkVzFsSUhSb1lYUWdZMkZzYkhNZ2RHOGdjbVZ1WkdWeUlHRnlaVzRuZENCdVpYTjBaV1E3WEc0Z0lDOHZJSFpsY21sbWVTQjBhR0YwSUhSb1lYUW5jeUIwYUdVZ1kyRnpaUzRnS0ZSb2FYTWdhWE1nWTJGc2JHVmtJR0o1SUdWaFkyZ2dkRzl3TFd4bGRtVnNJSFZ3WkdGMFpWeHVJQ0F2THlCbWRXNWpkR2x2Yml3Z2JHbHJaU0J6WlhSUWNtOXdjeXdnYzJWMFUzUmhkR1VzSUdadmNtTmxWWEJrWVhSbExDQmxkR011T3lCamNtVmhkR2x2YmlCaGJtUmNiaUFnTHk4Z1pHVnpkSEoxWTNScGIyNGdiMllnZEc5d0xXeGxkbVZzSUdOdmJYQnZibVZ1ZEhNZ2FYTWdaM1ZoY21SbFpDQnBiaUJTWldGamRFMXZkVzUwTGlsY2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnVW1WaFkzUkRkWEp5Wlc1MFQzZHVaWEl1WTNWeWNtVnVkQ0E5UFNCdWRXeHNMRnh1SUNBZ0lDZGxibkYxWlhWbFZYQmtZWFJsS0NrNklGSmxibVJsY2lCdFpYUm9iMlJ6SUhOb2IzVnNaQ0JpWlNCaElIQjFjbVVnWm5WdVkzUnBiMjRnYjJZZ2NISnZjSE1nSnlBclhHNGdJQ0FnSjJGdVpDQnpkR0YwWlRzZ2RISnBaMmRsY21sdVp5QnVaWE4wWldRZ1kyOXRjRzl1Wlc1MElIVndaR0YwWlhNZ1puSnZiU0J5Wlc1a1pYSWdhWE1nYm05MElDY2dLMXh1SUNBZ0lDZGhiR3h2ZDJWa0xpQkpaaUJ1WldObGMzTmhjbmtzSUhSeWFXZG5aWElnYm1WemRHVmtJSFZ3WkdGMFpYTWdhVzRnSnlBclhHNGdJQ0FnSjJOdmJYQnZibVZ1ZEVScFpGVndaR0YwWlM0blhHNGdJQ2tnT2lCdWRXeHNLVHRjYmx4dUlDQnBaaUFvSVdKaGRHTm9hVzVuVTNSeVlYUmxaM2t1YVhOQ1lYUmphR2x1WjFWd1pHRjBaWE1wSUh0Y2JpQWdJQ0JpWVhSamFHbHVaMU4wY21GMFpXZDVMbUpoZEdOb1pXUlZjR1JoZEdWektHVnVjWFZsZFdWVmNHUmhkR1VzSUdOdmJYQnZibVZ1ZENrN1hHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNWNiaUFnWkdseWRIbERiMjF3YjI1bGJuUnpMbkIxYzJnb1kyOXRjRzl1Wlc1MEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCRmJuRjFaWFZsSUdFZ1kyRnNiR0poWTJzZ2RHOGdZbVVnY25WdUlHRjBJSFJvWlNCbGJtUWdiMllnZEdobElHTjFjbkpsYm5RZ1ltRjBZMmhwYm1jZ1kzbGpiR1V1SUZSb2NtOTNjMXh1SUNvZ2FXWWdibThnZFhCa1lYUmxjeUJoY21VZ1kzVnljbVZ1ZEd4NUlHSmxhVzVuSUhCbGNtWnZjbTFsWkM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWVhOaGNDaGpZV3hzWW1GamF5d2dZMjl1ZEdWNGRDa2dlMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJR0poZEdOb2FXNW5VM1J5WVhSbFoza3VhWE5DWVhSamFHbHVaMVZ3WkdGMFpYTXNYRzRnSUNBZ0oxSmxZV04wVlhCa1lYUmxjeTVoYzJGd09pQkRZVzVjWENkMElHVnVjWFZsZFdVZ1lXNGdZWE5oY0NCallXeHNZbUZqYXlCcGJpQmhJR052Ym5SbGVIUWdkMmhsY21VbklDdGNiaUFnSUNBbmRYQmtZWFJsY3lCaGNtVWdibTkwSUdKbGFXNW5JR0poZEdOb1pXUXVKMXh1SUNBcElEb2dhVzUyWVhKcFlXNTBLR0poZEdOb2FXNW5VM1J5WVhSbFoza3VhWE5DWVhSamFHbHVaMVZ3WkdGMFpYTXBLVHRjYmlBZ1lYTmhjRU5oYkd4aVlXTnJVWFZsZFdVdVpXNXhkV1YxWlNoallXeHNZbUZqYXl3Z1kyOXVkR1Y0ZENrN1hHNGdJR0Z6WVhCRmJuRjFaWFZsWkNBOUlIUnlkV1U3WEc1OVhHNWNiblpoY2lCU1pXRmpkRlZ3WkdGMFpYTkpibXBsWTNScGIyNGdQU0I3WEc0Z0lHbHVhbVZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dU9pQm1kVzVqZEdsdmJpaFNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZiaWtnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZiaXhjYmlBZ0lDQWdJQ2RTWldGamRGVndaR0YwWlhNNklHMTFjM1FnY0hKdmRtbGtaU0JoSUhKbFkyOXVZMmxzWlNCMGNtRnVjMkZqZEdsdmJpQmpiR0Z6Y3lkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVLU2s3WEc0Z0lDQWdVbVZoWTNSVmNHUmhkR1Z6TGxKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjRnUFNCU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJqdGNiaUFnZlN4Y2JseHVJQ0JwYm1wbFkzUkNZWFJqYUdsdVoxTjBjbUYwWldkNU9pQm1kVzVqZEdsdmJpaGZZbUYwWTJocGJtZFRkSEpoZEdWbmVTa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCZlltRjBZMmhwYm1kVGRISmhkR1ZuZVN4Y2JpQWdJQ0FnSUNkU1pXRmpkRlZ3WkdGMFpYTTZJRzExYzNRZ2NISnZkbWxrWlNCaElHSmhkR05vYVc1bklITjBjbUYwWldkNUoxeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9YMkpoZEdOb2FXNW5VM1J5WVhSbFoza3BLVHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2RIbHdaVzltSUY5aVlYUmphR2x1WjFOMGNtRjBaV2Q1TG1KaGRHTm9aV1JWY0dSaGRHVnpJRDA5UFNBblpuVnVZM1JwYjI0bkxGeHVJQ0FnSUNBZ0oxSmxZV04wVlhCa1lYUmxjem9nYlhWemRDQndjbTkyYVdSbElHRWdZbUYwWTJobFpGVndaR0YwWlhNb0tTQm1kVzVqZEdsdmJpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLSFI1Y0dWdlppQmZZbUYwWTJocGJtZFRkSEpoZEdWbmVTNWlZWFJqYUdWa1ZYQmtZWFJsY3lBOVBUMGdKMloxYm1OMGFXOXVKeWtwTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQjBlWEJsYjJZZ1gySmhkR05vYVc1blUzUnlZWFJsWjNrdWFYTkNZWFJqYUdsdVoxVndaR0YwWlhNZ1BUMDlJQ2RpYjI5c1pXRnVKeXhjYmlBZ0lDQWdJQ2RTWldGamRGVndaR0YwWlhNNklHMTFjM1FnY0hKdmRtbGtaU0JoYmlCcGMwSmhkR05vYVc1blZYQmtZWFJsY3lCaWIyOXNaV0Z1SUdGMGRISnBZblYwWlNkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIUjVjR1Z2WmlCZlltRjBZMmhwYm1kVGRISmhkR1ZuZVM1cGMwSmhkR05vYVc1blZYQmtZWFJsY3lBOVBUMGdKMkp2YjJ4bFlXNG5LU2s3WEc0Z0lDQWdZbUYwWTJocGJtZFRkSEpoZEdWbmVTQTlJRjlpWVhSamFHbHVaMU4wY21GMFpXZDVPMXh1SUNCOVhHNTlPMXh1WEc1MllYSWdVbVZoWTNSVmNHUmhkR1Z6SUQwZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nVW1WaFkzUWdjbVZtWlhKbGJtTmxjeUJnVW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibUFnZFhOcGJtY2dkR2hwY3lCd2NtOXdaWEowZVNCcGJpQnZjbVJsY2x4dUlDQWdLaUIwYnlCaGJHeHZkeUJrWlhCbGJtUmxibU41SUdsdWFtVmpkR2x2Ymk1Y2JpQWdJQ3BjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVPaUJ1ZFd4c0xGeHVYRzRnSUdKaGRHTm9aV1JWY0dSaGRHVnpPaUJpWVhSamFHVmtWWEJrWVhSbGN5eGNiaUFnWlc1eGRXVjFaVlZ3WkdGMFpUb2daVzV4ZFdWMVpWVndaR0YwWlN4Y2JpQWdabXgxYzJoQ1lYUmphR1ZrVlhCa1lYUmxjem9nWm14MWMyaENZWFJqYUdWa1ZYQmtZWFJsY3l4Y2JpQWdhVzVxWldOMGFXOXVPaUJTWldGamRGVndaR0YwWlhOSmJtcGxZM1JwYjI0c1hHNGdJR0Z6WVhBNklHRnpZWEJjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSVmNHUmhkR1Z6TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU1ZHRE9NUHJvcGVydHlDb25maWdcbiAqL1xuXG4vKmpzbGludCBiaXR3aXNlOiB0cnVlKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcblxudmFyIE1VU1RfVVNFX0FUVFJJQlVURSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5NVVNUX1VTRV9BVFRSSUJVVEU7XG5cbnZhciBTVkdET01Qcm9wZXJ0eUNvbmZpZyA9IHtcbiAgUHJvcGVydGllczoge1xuICAgIGNsaXBQYXRoOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgY3g6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBjeTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBkeDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGR5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZmlsbDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZpbGxPcGFjaXR5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZm9udEZhbWlseTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZvbnRTaXplOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZng6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmeTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGdyYWRpZW50VHJhbnNmb3JtOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZ3JhZGllbnRVbml0czogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIG1hcmtlckVuZDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIG1hcmtlck1pZDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIG1hcmtlclN0YXJ0OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgb2Zmc2V0OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgb3BhY2l0eTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHBhdHRlcm5Db250ZW50VW5pdHM6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBwYXR0ZXJuVW5pdHM6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBwb2ludHM6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgcjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHJ4OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgcnk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzcHJlYWRNZXRob2Q6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzdG9wQ29sb3I6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzdG9wT3BhY2l0eTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0cm9rZTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0cm9rZURhc2hhcnJheTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0cm9rZUxpbmVjYXA6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzdHJva2VPcGFjaXR5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3Ryb2tlV2lkdGg6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB0ZXh0QW5jaG9yOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgdHJhbnNmb3JtOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgdmVyc2lvbjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHZpZXdCb3g6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB4MTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHgyOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgeDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHkxOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgeTI6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB5OiBNVVNUX1VTRV9BVFRSSUJVVEVcbiAgfSxcbiAgRE9NQXR0cmlidXRlTmFtZXM6IHtcbiAgICBjbGlwUGF0aDogJ2NsaXAtcGF0aCcsXG4gICAgZmlsbE9wYWNpdHk6ICdmaWxsLW9wYWNpdHknLFxuICAgIGZvbnRGYW1pbHk6ICdmb250LWZhbWlseScsXG4gICAgZm9udFNpemU6ICdmb250LXNpemUnLFxuICAgIGdyYWRpZW50VHJhbnNmb3JtOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxuICAgIGdyYWRpZW50VW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgICBtYXJrZXJFbmQ6ICdtYXJrZXItZW5kJyxcbiAgICBtYXJrZXJNaWQ6ICdtYXJrZXItbWlkJyxcbiAgICBtYXJrZXJTdGFydDogJ21hcmtlci1zdGFydCcsXG4gICAgcGF0dGVybkNvbnRlbnRVbml0czogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxuICAgIHBhdHRlcm5Vbml0czogJ3BhdHRlcm5Vbml0cycsXG4gICAgcHJlc2VydmVBc3BlY3RSYXRpbzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICAgIHNwcmVhZE1ldGhvZDogJ3NwcmVhZE1ldGhvZCcsXG4gICAgc3RvcENvbG9yOiAnc3RvcC1jb2xvcicsXG4gICAgc3RvcE9wYWNpdHk6ICdzdG9wLW9wYWNpdHknLFxuICAgIHN0cm9rZURhc2hhcnJheTogJ3N0cm9rZS1kYXNoYXJyYXknLFxuICAgIHN0cm9rZUxpbmVjYXA6ICdzdHJva2UtbGluZWNhcCcsXG4gICAgc3Ryb2tlT3BhY2l0eTogJ3N0cm9rZS1vcGFjaXR5JyxcbiAgICBzdHJva2VXaWR0aDogJ3N0cm9rZS13aWR0aCcsXG4gICAgdGV4dEFuY2hvcjogJ3RleHQtYW5jaG9yJyxcbiAgICB2aWV3Qm94OiAndmlld0JveCdcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTVkdET01Qcm9wZXJ0eUNvbmZpZztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTZWxlY3RFdmVudFBsdWdpblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoXCIuL0V2ZW50UHJvcGFnYXRvcnNcIik7XG52YXIgUmVhY3RJbnB1dFNlbGVjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0SW5wdXRTZWxlY3Rpb25cIik7XG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNFdmVudFwiKTtcblxudmFyIGdldEFjdGl2ZUVsZW1lbnQgPSByZXF1aXJlKFwiLi9nZXRBY3RpdmVFbGVtZW50XCIpO1xudmFyIGlzVGV4dElucHV0RWxlbWVudCA9IHJlcXVpcmUoXCIuL2lzVGV4dElucHV0RWxlbWVudFwiKTtcbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xudmFyIHNoYWxsb3dFcXVhbCA9IHJlcXVpcmUoXCIuL3NoYWxsb3dFcXVhbFwiKTtcblxudmFyIHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzO1xuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgc2VsZWN0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblNlbGVjdDogbnVsbH0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblNlbGVjdENhcHR1cmU6IG51bGx9KVxuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEJsdXIsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcENvbnRleHRNZW51LFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BGb2N1cyxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5RG93bixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZVVwLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BTZWxlY3Rpb25DaGFuZ2VcbiAgICBdXG4gIH1cbn07XG5cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SUQgPSBudWxsO1xudmFyIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xudmFyIG1vdXNlRG93biA9IGZhbHNlO1xuXG4vKipcbiAqIEdldCBhbiBvYmplY3Qgd2hpY2ggaXMgYSB1bmlxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBub3QgYmUgY29uc2lzdGVudCBhY3Jvc3Mgbm9kZXMgb3IgYnJvd3NlcnMsIGJ1dFxuICogdHdvIGlkZW50aWNhbCBzZWxlY3Rpb25zIG9uIHRoZSBzYW1lIG5vZGUgd2lsbCByZXR1cm4gaWRlbnRpY2FsIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKG5vZGUpIHtcbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gbm9kZSAmJlxuICAgICAgUmVhY3RJbnB1dFNlbGVjdGlvbi5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobm9kZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IG5vZGUuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICByZXR1cm4ge1xuICAgICAgYW5jaG9yTm9kZTogc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQ6IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGU6IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldDogc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgfTtcbiAgfSBlbHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24pIHtcbiAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50RWxlbWVudDogcmFuZ2UucGFyZW50RWxlbWVudCgpLFxuICAgICAgdGV4dDogcmFuZ2UudGV4dCxcbiAgICAgIHRvcDogcmFuZ2UuYm91bmRpbmdUb3AsXG4gICAgICBsZWZ0OiByYW5nZS5ib3VuZGluZ0xlZnRcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUG9sbCBzZWxlY3Rpb24gdG8gc2VlIHdoZXRoZXIgaXQncyBjaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7P1N5bnRoZXRpY0V2ZW50fVxuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCkge1xuICAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZWxlbWVudCwgYW5kIHRoYXQgdGhlIHVzZXIgaXMgbm90IGRyYWdnaW5nIGFcbiAgLy8gc2VsZWN0aW9uICh0aGlzIG1hdGNoZXMgbmF0aXZlIGBzZWxlY3RgIGV2ZW50IGJlaGF2aW9yKS4gSW4gSFRNTDUsIHNlbGVjdFxuICAvLyBmaXJlcyBvbmx5IG9uIGlucHV0IGFuZCB0ZXh0YXJlYSB0aHVzIGlmIHRoZXJlJ3Mgbm8gZm9jdXNlZCBlbGVtZW50IHdlXG4gIC8vIHdvbid0IGRpc3BhdGNoLlxuICBpZiAobW91c2VEb3duIHx8XG4gICAgICBhY3RpdmVFbGVtZW50ID09IG51bGwgfHxcbiAgICAgIGFjdGl2ZUVsZW1lbnQgIT09IGdldEFjdGl2ZUVsZW1lbnQoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gT25seSBmaXJlIHdoZW4gc2VsZWN0aW9uIGhhcyBhY3R1YWxseSBjaGFuZ2VkLlxuICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihhY3RpdmVFbGVtZW50KTtcbiAgaWYgKCFsYXN0U2VsZWN0aW9uIHx8ICFzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICBsYXN0U2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjtcblxuICAgIHZhciBzeW50aGV0aWNFdmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgIGV2ZW50VHlwZXMuc2VsZWN0LFxuICAgICAgYWN0aXZlRWxlbWVudElELFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApO1xuXG4gICAgc3ludGhldGljRXZlbnQudHlwZSA9ICdzZWxlY3QnO1xuICAgIHN5bnRoZXRpY0V2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQ7XG5cbiAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoc3ludGhldGljRXZlbnQpO1xuXG4gICAgcmV0dXJuIHN5bnRoZXRpY0V2ZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25TZWxlY3RgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBzZWxlY3QgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBjb250ZW50RWRpdGFibGVcbiAqXG4gKiBUaGlzIGRpZmZlcnMgZnJvbSBuYXRpdmUgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogLSBGaXJlcyBvbiBjb250ZW50RWRpdGFibGUgZmllbGRzIGFzIHdlbGwgYXMgaW5wdXRzLlxuICogLSBGaXJlcyBmb3IgY29sbGFwc2VkIHNlbGVjdGlvbi5cbiAqIC0gRmlyZXMgYWZ0ZXIgdXNlciBpbnB1dC5cbiAqL1xudmFyIFNlbGVjdEV2ZW50UGx1Z2luID0ge1xuXG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzfVxuICAgKi9cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24oXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudCkge1xuXG4gICAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICAgIC8vIFRyYWNrIHRoZSBpbnB1dCBub2RlIHRoYXQgaGFzIGZvY3VzLlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEZvY3VzOlxuICAgICAgICBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRvcExldmVsVGFyZ2V0KSB8fFxuICAgICAgICAgICAgdG9wTGV2ZWxUYXJnZXQuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBhY3RpdmVFbGVtZW50ID0gdG9wTGV2ZWxUYXJnZXQ7XG4gICAgICAgICAgYWN0aXZlRWxlbWVudElEID0gdG9wTGV2ZWxUYXJnZXRJRDtcbiAgICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BCbHVyOlxuICAgICAgICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgYWN0aXZlRWxlbWVudElEID0gbnVsbDtcbiAgICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBEb24ndCBmaXJlIHRoZSBldmVudCB3aGlsZSB0aGUgdXNlciBpcyBkcmFnZ2luZy4gVGhpcyBtYXRjaGVzIHRoZVxuICAgICAgLy8gc2VtYW50aWNzIG9mIHRoZSBuYXRpdmUgc2VsZWN0IGV2ZW50LlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlRG93bjpcbiAgICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ29udGV4dE1lbnU6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VVcDpcbiAgICAgICAgbW91c2VEb3duID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICAgIC8vIENocm9tZSBhbmQgSUUgZmlyZSBub24tc3RhbmRhcmQgZXZlbnQgd2hlbiBzZWxlY3Rpb24gaXMgY2hhbmdlZCAoYW5kXG4gICAgICAvLyBzb21ldGltZXMgd2hlbiBpdCBoYXNuJ3QpLlxuICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgc2VsZWN0aW9uY2hhbmdlLCBzbyBjaGVjayBzZWxlY3Rpb24gc3RhdHVzXG4gICAgICAvLyBhZnRlciBlYWNoIGtleSBlbnRyeS4gVGhlIHNlbGVjdGlvbiBjaGFuZ2VzIGFmdGVyIGtleWRvd24gYW5kIGJlZm9yZVxuICAgICAgLy8ga2V5dXAsIGJ1dCB3ZSBjaGVjayBvbiBrZXlkb3duIGFzIHdlbGwgaW4gdGhlIGNhc2Ugb2YgaG9sZGluZyBkb3duIGFcbiAgICAgIC8vIGtleSwgd2hlbiBtdWx0aXBsZSBrZXlkb3duIGV2ZW50cyBhcmUgZmlyZWQgYnV0IG9ubHkgb25lIGtleXVwIGlzLlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFNlbGVjdGlvbkNoYW5nZTpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleVVwOlxuICAgICAgICByZXR1cm4gY29uc3RydWN0U2VsZWN0RXZlbnQobmF0aXZlRXZlbnQpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RFdmVudFBsdWdpbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTZXJ2ZXJSZWFjdFJvb3RJbmRleFxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2l6ZSBvZiB0aGUgcmVhY3RSb290IElEIHNwYWNlLiBXZSBnZW5lcmF0ZSByYW5kb20gbnVtYmVycyBmb3IgUmVhY3Qgcm9vdFxuICogSURzIGFuZCBpZiB0aGVyZSdzIGEgY29sbGlzaW9uIHRoZSBldmVudHMgYW5kIERPTSB1cGRhdGUgc3lzdGVtIHdpbGxcbiAqIGdldCBjb25mdXNlZC4gSW4gdGhlIGZ1dHVyZSB3ZSBuZWVkIGEgd2F5IHRvIGdlbmVyYXRlIEdVSURzIGJ1dCBmb3JcbiAqIG5vdyB0aGlzIHdpbGwgd29yayBvbiBhIHNtYWxsZXIgc2NhbGUuXG4gKi9cbnZhciBHTE9CQUxfTU9VTlRfUE9JTlRfTUFYID0gTWF0aC5wb3coMiwgNTMpO1xuXG52YXIgU2VydmVyUmVhY3RSb290SW5kZXggPSB7XG4gIGNyZWF0ZVJlYWN0Um9vdEluZGV4OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiBHTE9CQUxfTU9VTlRfUE9JTlRfTUFYKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXJ2ZXJSZWFjdFJvb3RJbmRleDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU2ltcGxlRXZlbnRQbHVnaW5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIEV2ZW50UGx1Z2luVXRpbHMgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpblV0aWxzXCIpO1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKFwiLi9FdmVudFByb3BhZ2F0b3JzXCIpO1xudmFyIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljQ2xpcGJvYXJkRXZlbnRcIik7XG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNFdmVudFwiKTtcbnZhciBTeW50aGV0aWNGb2N1c0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRm9jdXNFdmVudFwiKTtcbnZhciBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljS2V5Ym9hcmRFdmVudFwiKTtcbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljTW91c2VFdmVudFwiKTtcbnZhciBTeW50aGV0aWNEcmFnRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNEcmFnRXZlbnRcIik7XG52YXIgU3ludGhldGljVG91Y2hFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY1RvdWNoRXZlbnRcIik7XG52YXIgU3ludGhldGljVUlFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY1VJRXZlbnRcIik7XG52YXIgU3ludGhldGljV2hlZWxFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY1doZWVsRXZlbnRcIik7XG5cbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRDaGFyQ29kZVwiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbnZhciBldmVudFR5cGVzID0ge1xuICBibHVyOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkJsdXI6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25CbHVyQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBjbGljazoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25DbGljazogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNsaWNrQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBjb250ZXh0TWVudToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Db250ZXh0TWVudTogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNvbnRleHRNZW51Q2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBjb3B5OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNvcHk6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Db3B5Q2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBjdXQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQ3V0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ3V0Q2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBkb3VibGVDbGljazoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Eb3VibGVDbGljazogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRvdWJsZUNsaWNrQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBkcmFnOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWc6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBkcmFnRW5kOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdFbmQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnRW5kQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBkcmFnRW50ZXI6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZ0VudGVyOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ0VudGVyQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBkcmFnRXhpdDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnRXhpdDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdFeGl0Q2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBkcmFnTGVhdmU6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZ0xlYXZlOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ0xlYXZlQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBkcmFnT3Zlcjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnT3ZlcjogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdPdmVyQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBkcmFnU3RhcnQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZ1N0YXJ0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ1N0YXJ0Q2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBkcm9wOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyb3A6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Ecm9wQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBmb2N1czoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Gb2N1czogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkZvY3VzQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBpbnB1dDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25JbnB1dDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbklucHV0Q2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBrZXlEb3duOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbktleURvd246IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25LZXlEb3duQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBrZXlQcmVzczoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25LZXlQcmVzczogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbktleVByZXNzQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBrZXlVcDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25LZXlVcDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbktleVVwQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBsb2FkOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkxvYWQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Mb2FkQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBlcnJvcjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25FcnJvcjogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkVycm9yQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICAvLyBOb3RlOiBXZSBkbyBub3QgYWxsb3cgbGlzdGVuaW5nIHRvIG1vdXNlT3ZlciBldmVudHMuIEluc3RlYWQsIHVzZSB0aGVcbiAgLy8gb25Nb3VzZUVudGVyL29uTW91c2VMZWF2ZSBjcmVhdGVkIGJ5IGBFbnRlckxlYXZlRXZlbnRQbHVnaW5gLlxuICBtb3VzZURvd246IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uTW91c2VEb3duOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uTW91c2VEb3duQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBtb3VzZU1vdmU6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uTW91c2VNb3ZlOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uTW91c2VNb3ZlQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBtb3VzZU91dDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Nb3VzZU91dDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbk1vdXNlT3V0Q2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBtb3VzZU92ZXI6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uTW91c2VPdmVyOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uTW91c2VPdmVyQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBtb3VzZVVwOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbk1vdXNlVXA6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZVVwQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBwYXN0ZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25QYXN0ZTogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblBhc3RlQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICByZXNldDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25SZXNldDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblJlc2V0Q2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBzY3JvbGw6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uU2Nyb2xsOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uU2Nyb2xsQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICBzdWJtaXQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uU3VibWl0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uU3VibWl0Q2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICB0b3VjaENhbmNlbDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Ub3VjaENhbmNlbDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblRvdWNoQ2FuY2VsQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICB0b3VjaEVuZDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Ub3VjaEVuZDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblRvdWNoRW5kQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICB0b3VjaE1vdmU6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uVG91Y2hNb3ZlOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uVG91Y2hNb3ZlQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICB0b3VjaFN0YXJ0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblRvdWNoU3RhcnQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Ub3VjaFN0YXJ0Q2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9LFxuICB3aGVlbDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25XaGVlbDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbldoZWVsQ2FwdHVyZTogdHJ1ZX0pXG4gICAgfVxuICB9XG59O1xuXG52YXIgdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnID0ge1xuICB0b3BCbHVyOiAgICAgICAgZXZlbnRUeXBlcy5ibHVyLFxuICB0b3BDbGljazogICAgICAgZXZlbnRUeXBlcy5jbGljayxcbiAgdG9wQ29udGV4dE1lbnU6IGV2ZW50VHlwZXMuY29udGV4dE1lbnUsXG4gIHRvcENvcHk6ICAgICAgICBldmVudFR5cGVzLmNvcHksXG4gIHRvcEN1dDogICAgICAgICBldmVudFR5cGVzLmN1dCxcbiAgdG9wRG91YmxlQ2xpY2s6IGV2ZW50VHlwZXMuZG91YmxlQ2xpY2ssXG4gIHRvcERyYWc6ICAgICAgICBldmVudFR5cGVzLmRyYWcsXG4gIHRvcERyYWdFbmQ6ICAgICBldmVudFR5cGVzLmRyYWdFbmQsXG4gIHRvcERyYWdFbnRlcjogICBldmVudFR5cGVzLmRyYWdFbnRlcixcbiAgdG9wRHJhZ0V4aXQ6ICAgIGV2ZW50VHlwZXMuZHJhZ0V4aXQsXG4gIHRvcERyYWdMZWF2ZTogICBldmVudFR5cGVzLmRyYWdMZWF2ZSxcbiAgdG9wRHJhZ092ZXI6ICAgIGV2ZW50VHlwZXMuZHJhZ092ZXIsXG4gIHRvcERyYWdTdGFydDogICBldmVudFR5cGVzLmRyYWdTdGFydCxcbiAgdG9wRHJvcDogICAgICAgIGV2ZW50VHlwZXMuZHJvcCxcbiAgdG9wRXJyb3I6ICAgICAgIGV2ZW50VHlwZXMuZXJyb3IsXG4gIHRvcEZvY3VzOiAgICAgICBldmVudFR5cGVzLmZvY3VzLFxuICB0b3BJbnB1dDogICAgICAgZXZlbnRUeXBlcy5pbnB1dCxcbiAgdG9wS2V5RG93bjogICAgIGV2ZW50VHlwZXMua2V5RG93bixcbiAgdG9wS2V5UHJlc3M6ICAgIGV2ZW50VHlwZXMua2V5UHJlc3MsXG4gIHRvcEtleVVwOiAgICAgICBldmVudFR5cGVzLmtleVVwLFxuICB0b3BMb2FkOiAgICAgICAgZXZlbnRUeXBlcy5sb2FkLFxuICB0b3BNb3VzZURvd246ICAgZXZlbnRUeXBlcy5tb3VzZURvd24sXG4gIHRvcE1vdXNlTW92ZTogICBldmVudFR5cGVzLm1vdXNlTW92ZSxcbiAgdG9wTW91c2VPdXQ6ICAgIGV2ZW50VHlwZXMubW91c2VPdXQsXG4gIHRvcE1vdXNlT3ZlcjogICBldmVudFR5cGVzLm1vdXNlT3ZlcixcbiAgdG9wTW91c2VVcDogICAgIGV2ZW50VHlwZXMubW91c2VVcCxcbiAgdG9wUGFzdGU6ICAgICAgIGV2ZW50VHlwZXMucGFzdGUsXG4gIHRvcFJlc2V0OiAgICAgICBldmVudFR5cGVzLnJlc2V0LFxuICB0b3BTY3JvbGw6ICAgICAgZXZlbnRUeXBlcy5zY3JvbGwsXG4gIHRvcFN1Ym1pdDogICAgICBldmVudFR5cGVzLnN1Ym1pdCxcbiAgdG9wVG91Y2hDYW5jZWw6IGV2ZW50VHlwZXMudG91Y2hDYW5jZWwsXG4gIHRvcFRvdWNoRW5kOiAgICBldmVudFR5cGVzLnRvdWNoRW5kLFxuICB0b3BUb3VjaE1vdmU6ICAgZXZlbnRUeXBlcy50b3VjaE1vdmUsXG4gIHRvcFRvdWNoU3RhcnQ6ICBldmVudFR5cGVzLnRvdWNoU3RhcnQsXG4gIHRvcFdoZWVsOiAgICAgICBldmVudFR5cGVzLndoZWVsXG59O1xuXG5mb3IgKHZhciB0eXBlIGluIHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZykge1xuICB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWdbdHlwZV0uZGVwZW5kZW5jaWVzID0gW3R5cGVdO1xufVxuXG52YXIgU2ltcGxlRXZlbnRQbHVnaW4gPSB7XG5cbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICAvKipcbiAgICogU2FtZSBhcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgZXhjZXB0IGNhbmNlbHMgdGhlIGV2ZW50IHdoZW4gcmV0dXJuXG4gICAqIHZhbHVlIGlzIGZhbHNlLiBUaGlzIGJlaGF2aW9yIHdpbGwgYmUgZGlzYWJsZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IEV2ZW50IHRvIGJlIGRpc3BhdGNoZWQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IEFwcGxpY2F0aW9uLWxldmVsIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZG9tSUQgRE9NIElEIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgZXhlY3V0ZURpc3BhdGNoOiBmdW5jdGlvbihldmVudCwgbGlzdGVuZXIsIGRvbUlEKSB7XG4gICAgdmFyIHJldHVyblZhbHVlID0gRXZlbnRQbHVnaW5VdGlscy5leGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBkb21JRCk7XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIHR5cGVvZiByZXR1cm5WYWx1ZSAhPT0gJ2Jvb2xlYW4nLFxuICAgICAgJ1JldHVybmluZyBgZmFsc2VgIGZyb20gYW4gZXZlbnQgaGFuZGxlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlICcgK1xuICAgICAgJ2lnbm9yZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gSW5zdGVhZCwgbWFudWFsbHkgY2FsbCAnICtcbiAgICAgICdlLnN0b3BQcm9wYWdhdGlvbigpIG9yIGUucHJldmVudERlZmF1bHQoKSwgYXMgYXBwcm9wcmlhdGUuJ1xuICAgICkgOiBudWxsKTtcblxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzfVxuICAgKi9cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24oXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudCkge1xuICAgIHZhciBkaXNwYXRjaENvbmZpZyA9IHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZ1t0b3BMZXZlbFR5cGVdO1xuICAgIGlmICghZGlzcGF0Y2hDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgRXZlbnRDb25zdHJ1Y3RvcjtcbiAgICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcElucHV0OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcExvYWQ6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRXJyb3I6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wUmVzZXQ6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wU3VibWl0OlxuICAgICAgICAvLyBIVE1MIEV2ZW50c1xuICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2luZGV4Lmh0bWwjZXZlbnRzLTBcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0V2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlQcmVzczpcbiAgICAgICAgLy8gRmlyZUZveCBjcmVhdGVzIGEga2V5cHJlc3MgZXZlbnQgZm9yIGZ1bmN0aW9uIGtleXMgdG9vLiBUaGlzIHJlbW92ZXNcbiAgICAgICAgLy8gdGhlIHVud2FudGVkIGtleXByZXNzIGV2ZW50cy4gRW50ZXIgaXMgaG93ZXZlciBib3RoIHByaW50YWJsZSBhbmRcbiAgICAgICAgLy8gbm9uLXByaW50YWJsZS4gT25lIHdvdWxkIGV4cGVjdCBUYWIgdG8gYmUgYXMgd2VsbCAoYnV0IGl0IGlzbid0KS5cbiAgICAgICAgaWYgKGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleURvd246XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5VXA6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BCbHVyOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEZvY3VzOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ2xpY2s6XG4gICAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGNsaWNrIGV2ZW50IG9uIHJpZ2h0IG1vdXNlIGNsaWNrcy4gVGhpcyByZW1vdmVzIHRoZVxuICAgICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ29udGV4dE1lbnU6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRG91YmxlQ2xpY2s6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlTW92ZTpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU91dDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU92ZXI6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VVcDpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyYWc6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ0VuZDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnRW50ZXI6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ0V4aXQ6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ0xlYXZlOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyYWdPdmVyOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyYWdTdGFydDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcm9wOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BUb3VjaENhbmNlbDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BUb3VjaEVuZDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BUb3VjaE1vdmU6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wVG91Y2hTdGFydDpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFNjcm9sbDpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFdoZWVsOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljV2hlZWxFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ29weTpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDdXQ6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wUGFzdGU6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBFdmVudENvbnN0cnVjdG9yLFxuICAgICAgJ1NpbXBsZUV2ZW50UGx1Z2luOiBVbmhhbmRsZWQgZXZlbnQgdHlwZSwgYCVzYC4nLFxuICAgICAgdG9wTGV2ZWxUeXBlXG4gICAgKSA6IGludmFyaWFudChFdmVudENvbnN0cnVjdG9yKSk7XG4gICAgdmFyIGV2ZW50ID0gRXZlbnRDb25zdHJ1Y3Rvci5nZXRQb29sZWQoXG4gICAgICBkaXNwYXRjaENvbmZpZyxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICk7XG4gICAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaW1wbGVFdmVudFBsdWdpbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlUybHRjR3hsUlhabGJuUlFiSFZuYVc0dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlRhVzF3YkdWRmRtVnVkRkJzZFdkcGJseHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRVYyWlc1MFEyOXVjM1JoYm5SeklEMGdjbVZ4ZFdseVpTaGNJaTR2UlhabGJuUkRiMjV6ZEdGdWRITmNJaWs3WEc1MllYSWdSWFpsYm5SUWJIVm5hVzVWZEdsc2N5QTlJSEpsY1hWcGNtVW9YQ0l1TDBWMlpXNTBVR3gxWjJsdVZYUnBiSE5jSWlrN1hHNTJZWElnUlhabGJuUlFjbTl3WVdkaGRHOXljeUE5SUhKbGNYVnBjbVVvWENJdUwwVjJaVzUwVUhKdmNHRm5ZWFJ2Y25OY0lpazdYRzUyWVhJZ1UzbHVkR2hsZEdsalEyeHBjR0p2WVhKa1JYWmxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVRlVzUwYUdWMGFXTkRiR2x3WW05aGNtUkZkbVZ1ZEZ3aUtUdGNiblpoY2lCVGVXNTBhR1YwYVdORmRtVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxTjViblJvWlhScFkwVjJaVzUwWENJcE8xeHVkbUZ5SUZONWJuUm9aWFJwWTBadlkzVnpSWFpsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlUZVc1MGFHVjBhV05HYjJOMWMwVjJaVzUwWENJcE8xeHVkbUZ5SUZONWJuUm9aWFJwWTB0bGVXSnZZWEprUlhabGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5VGVXNTBhR1YwYVdOTFpYbGliMkZ5WkVWMlpXNTBYQ0lwTzF4dWRtRnlJRk41Ym5Sb1pYUnBZMDF2ZFhObFJYWmxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVRlVzUwYUdWMGFXTk5iM1Z6WlVWMlpXNTBYQ0lwTzF4dWRtRnlJRk41Ym5Sb1pYUnBZMFJ5WVdkRmRtVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxTjViblJvWlhScFkwUnlZV2RGZG1WdWRGd2lLVHRjYm5aaGNpQlRlVzUwYUdWMGFXTlViM1ZqYUVWMlpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlUzbHVkR2hsZEdsalZHOTFZMmhGZG1WdWRGd2lLVHRjYm5aaGNpQlRlVzUwYUdWMGFXTlZTVVYyWlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VTNsdWRHaGxkR2xqVlVsRmRtVnVkRndpS1R0Y2JuWmhjaUJUZVc1MGFHVjBhV05YYUdWbGJFVjJaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVM2x1ZEdobGRHbGpWMmhsWld4RmRtVnVkRndpS1R0Y2JseHVkbUZ5SUdkbGRFVjJaVzUwUTJoaGNrTnZaR1VnUFNCeVpYRjFhWEpsS0Z3aUxpOW5aWFJGZG1WdWRFTm9ZWEpEYjJSbFhDSXBPMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1ZG1GeUlHdGxlVTltSUQwZ2NtVnhkV2x5WlNoY0lpNHZhMlY1VDJaY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JuWmhjaUIwYjNCTVpYWmxiRlI1Y0dWeklEMGdSWFpsYm5SRGIyNXpkR0Z1ZEhNdWRHOXdUR1YyWld4VWVYQmxjenRjYmx4dWRtRnlJR1YyWlc1MFZIbHdaWE1nUFNCN1hHNGdJR0pzZFhJNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1UW14MWNqb2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJrSnNkWEpEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHTnNhV05yT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia05zYVdOck9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVEyeHBZMnREWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHTnZiblJsZUhSTlpXNTFPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrTnZiblJsZUhSTlpXNTFPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVRMjl1ZEdWNGRFMWxiblZEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHTnZjSGs2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVRMjl3ZVRvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmtOdmNIbERZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdOMWREb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1RGRYUTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNURkWFJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnZkV0pzWlVOc2FXTnJPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrUnZkV0pzWlVOc2FXTnJPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVSRzkxWW14bFEyeHBZMnREWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnlZV2M2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVSSEpoWnpvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmtSeVlXZERZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeVlXZEZibVE2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVSSEpoWjBWdVpEb2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJrUnlZV2RGYm1SRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5WVdkRmJuUmxjam9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNUVjbUZuUlc1MFpYSTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNUVjbUZuUlc1MFpYSkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeVlXZEZlR2wwT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia1J5WVdkRmVHbDBPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVSSEpoWjBWNGFYUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeVlXZE1aV0YyWlRvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVFY21GblRHVmhkbVU2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVFY21GblRHVmhkbVZEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnlZV2RQZG1WeU9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmtSeVlXZFBkbVZ5T2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1UkhKaFowOTJaWEpEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnlZV2RUZEdGeWREb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1RWNtRm5VM1JoY25RNklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1RWNtRm5VM1JoY25SRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5YjNBNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1UkhKdmNEb2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJrUnliM0JEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHWnZZM1Z6T2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia1p2WTNWek9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVJtOWpkWE5EWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHbHVjSFYwT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia2x1Y0hWME9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVNXNXdkWFJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHdGxlVVJ2ZDI0NklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1UzJWNVJHOTNiam9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZia3RsZVVSdmQyNURZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUd0bGVWQnlaWE56T2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia3RsZVZCeVpYTnpPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVTMlY1VUhKbGMzTkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUd0bGVWVndPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrdGxlVlZ3T2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1UzJWNVZYQkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUd4dllXUTZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVRHOWhaRG9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZia3h2WVdSRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1Z5Y205eU9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmtWeWNtOXlPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVSWEp5YjNKRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJQzh2SUU1dmRHVTZJRmRsSUdSdklHNXZkQ0JoYkd4dmR5QnNhWE4wWlc1cGJtY2dkRzhnYlc5MWMyVlBkbVZ5SUdWMlpXNTBjeTRnU1c1emRHVmhaQ3dnZFhObElIUm9aVnh1SUNBdkx5QnZiazF2ZFhObFJXNTBaWEl2YjI1TmIzVnpaVXhsWVhabElHTnlaV0YwWldRZ1lua2dZRVZ1ZEdWeVRHVmhkbVZGZG1WdWRGQnNkV2RwYm1BdVhHNGdJRzF2ZFhObFJHOTNiam9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNU5iM1Z6WlVSdmQyNDZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNU5iM1Z6WlVSdmQyNURZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUcxdmRYTmxUVzkyWlRvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVOYjNWelpVMXZkbVU2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVOYjNWelpVMXZkbVZEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHMXZkWE5sVDNWME9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmsxdmRYTmxUM1YwT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1VFc5MWMyVlBkWFJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHMXZkWE5sVDNabGNqb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1TmIzVnpaVTkyWlhJNklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1TmIzVnpaVTkyWlhKRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJRzF2ZFhObFZYQTZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVRXOTFjMlZWY0RvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmsxdmRYTmxWWEJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lIQmhjM1JsT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZibEJoYzNSbE9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVVHRnpkR1ZEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lISmxjMlYwT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZibEpsYzJWME9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVVtVnpaWFJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lITmpjbTlzYkRvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVUWTNKdmJHdzZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNVRZM0p2Ykd4RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSE4xWW0xcGREb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1VGRXSnRhWFE2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVUZFdKdGFYUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhSdmRXTm9RMkZ1WTJWc09pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmxSdmRXTm9RMkZ1WTJWc09pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVZHOTFZMmhEWVc1alpXeERZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhSdmRXTm9SVzVrT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZibFJ2ZFdOb1JXNWtPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVWRzkxWTJoRmJtUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhSdmRXTm9UVzkyWlRvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVVYjNWamFFMXZkbVU2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVVYjNWamFFMXZkbVZEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lIUnZkV05vVTNSaGNuUTZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVZHOTFZMmhUZEdGeWREb2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJsUnZkV05vVTNSaGNuUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhkb1pXVnNPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJsZG9aV1ZzT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1VjJobFpXeERZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMWNibjA3WEc1Y2JuWmhjaUIwYjNCTVpYWmxiRVYyWlc1MGMxUnZSR2x6Y0dGMFkyaERiMjVtYVdjZ1BTQjdYRzRnSUhSdmNFSnNkWEk2SUNBZ0lDQWdJQ0JsZG1WdWRGUjVjR1Z6TG1Kc2RYSXNYRzRnSUhSdmNFTnNhV05yT2lBZ0lDQWdJQ0JsZG1WdWRGUjVjR1Z6TG1Oc2FXTnJMRnh1SUNCMGIzQkRiMjUwWlhoMFRXVnVkVG9nWlhabGJuUlVlWEJsY3k1amIyNTBaWGgwVFdWdWRTeGNiaUFnZEc5d1EyOXdlVG9nSUNBZ0lDQWdJR1YyWlc1MFZIbHdaWE11WTI5d2VTeGNiaUFnZEc5d1EzVjBPaUFnSUNBZ0lDQWdJR1YyWlc1MFZIbHdaWE11WTNWMExGeHVJQ0IwYjNCRWIzVmliR1ZEYkdsamF6b2daWFpsYm5SVWVYQmxjeTVrYjNWaWJHVkRiR2xqYXl4Y2JpQWdkRzl3UkhKaFp6b2dJQ0FnSUNBZ0lHVjJaVzUwVkhsd1pYTXVaSEpoWnl4Y2JpQWdkRzl3UkhKaFowVnVaRG9nSUNBZ0lHVjJaVzUwVkhsd1pYTXVaSEpoWjBWdVpDeGNiaUFnZEc5d1JISmhaMFZ1ZEdWeU9pQWdJR1YyWlc1MFZIbHdaWE11WkhKaFowVnVkR1Z5TEZ4dUlDQjBiM0JFY21GblJYaHBkRG9nSUNBZ1pYWmxiblJVZVhCbGN5NWtjbUZuUlhocGRDeGNiaUFnZEc5d1JISmhaMHhsWVhabE9pQWdJR1YyWlc1MFZIbHdaWE11WkhKaFoweGxZWFpsTEZ4dUlDQjBiM0JFY21GblQzWmxjam9nSUNBZ1pYWmxiblJVZVhCbGN5NWtjbUZuVDNabGNpeGNiaUFnZEc5d1JISmhaMU4wWVhKME9pQWdJR1YyWlc1MFZIbHdaWE11WkhKaFoxTjBZWEowTEZ4dUlDQjBiM0JFY205d09pQWdJQ0FnSUNBZ1pYWmxiblJVZVhCbGN5NWtjbTl3TEZ4dUlDQjBiM0JGY25KdmNqb2dJQ0FnSUNBZ1pYWmxiblJVZVhCbGN5NWxjbkp2Y2l4Y2JpQWdkRzl3Um05amRYTTZJQ0FnSUNBZ0lHVjJaVzUwVkhsd1pYTXVabTlqZFhNc1hHNGdJSFJ2Y0VsdWNIVjBPaUFnSUNBZ0lDQmxkbVZ1ZEZSNWNHVnpMbWx1Y0hWMExGeHVJQ0IwYjNCTFpYbEViM2R1T2lBZ0lDQWdaWFpsYm5SVWVYQmxjeTVyWlhsRWIzZHVMRnh1SUNCMGIzQkxaWGxRY21WemN6b2dJQ0FnWlhabGJuUlVlWEJsY3k1clpYbFFjbVZ6Y3l4Y2JpQWdkRzl3UzJWNVZYQTZJQ0FnSUNBZ0lHVjJaVzUwVkhsd1pYTXVhMlY1VlhBc1hHNGdJSFJ2Y0V4dllXUTZJQ0FnSUNBZ0lDQmxkbVZ1ZEZSNWNHVnpMbXh2WVdRc1hHNGdJSFJ2Y0UxdmRYTmxSRzkzYmpvZ0lDQmxkbVZ1ZEZSNWNHVnpMbTF2ZFhObFJHOTNiaXhjYmlBZ2RHOXdUVzkxYzJWTmIzWmxPaUFnSUdWMlpXNTBWSGx3WlhNdWJXOTFjMlZOYjNabExGeHVJQ0IwYjNCTmIzVnpaVTkxZERvZ0lDQWdaWFpsYm5SVWVYQmxjeTV0YjNWelpVOTFkQ3hjYmlBZ2RHOXdUVzkxYzJWUGRtVnlPaUFnSUdWMlpXNTBWSGx3WlhNdWJXOTFjMlZQZG1WeUxGeHVJQ0IwYjNCTmIzVnpaVlZ3T2lBZ0lDQWdaWFpsYm5SVWVYQmxjeTV0YjNWelpWVndMRnh1SUNCMGIzQlFZWE4wWlRvZ0lDQWdJQ0FnWlhabGJuUlVlWEJsY3k1d1lYTjBaU3hjYmlBZ2RHOXdVbVZ6WlhRNklDQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdWNtVnpaWFFzWEc0Z0lIUnZjRk5qY205c2JEb2dJQ0FnSUNCbGRtVnVkRlI1Y0dWekxuTmpjbTlzYkN4Y2JpQWdkRzl3VTNWaWJXbDBPaUFnSUNBZ0lHVjJaVzUwVkhsd1pYTXVjM1ZpYldsMExGeHVJQ0IwYjNCVWIzVmphRU5oYm1ObGJEb2daWFpsYm5SVWVYQmxjeTUwYjNWamFFTmhibU5sYkN4Y2JpQWdkRzl3Vkc5MVkyaEZibVE2SUNBZ0lHVjJaVzUwVkhsd1pYTXVkRzkxWTJoRmJtUXNYRzRnSUhSdmNGUnZkV05vVFc5MlpUb2dJQ0JsZG1WdWRGUjVjR1Z6TG5SdmRXTm9UVzkyWlN4Y2JpQWdkRzl3Vkc5MVkyaFRkR0Z5ZERvZ0lHVjJaVzUwVkhsd1pYTXVkRzkxWTJoVGRHRnlkQ3hjYmlBZ2RHOXdWMmhsWld3NklDQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdWQyaGxaV3hjYm4wN1hHNWNibVp2Y2lBb2RtRnlJSFI1Y0dVZ2FXNGdkRzl3VEdWMlpXeEZkbVZ1ZEhOVWIwUnBjM0JoZEdOb1EyOXVabWxuS1NCN1hHNGdJSFJ2Y0V4bGRtVnNSWFpsYm5SelZHOUVhWE53WVhSamFFTnZibVpwWjF0MGVYQmxYUzVrWlhCbGJtUmxibU5wWlhNZ1BTQmJkSGx3WlYwN1hHNTlYRzVjYm5aaGNpQlRhVzF3YkdWRmRtVnVkRkJzZFdkcGJpQTlJSHRjYmx4dUlDQmxkbVZ1ZEZSNWNHVnpPaUJsZG1WdWRGUjVjR1Z6TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJUWVcxbElHRnpJSFJvWlNCa1pXWmhkV3gwSUdsdGNHeGxiV1Z1ZEdGMGFXOXVMQ0JsZUdObGNIUWdZMkZ1WTJWc2N5QjBhR1VnWlhabGJuUWdkMmhsYmlCeVpYUjFjbTVjYmlBZ0lDb2dkbUZzZFdVZ2FYTWdabUZzYzJVdUlGUm9hWE1nWW1Wb1lYWnBiM0lnZDJsc2JDQmlaU0JrYVhOaFlteGxaQ0JwYmlCaElHWjFkSFZ5WlNCeVpXeGxZWE5sTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ1JYWmxiblFnZEc4Z1ltVWdaR2x6Y0dGMFkyaGxaQzVjYmlBZ0lDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdRWEJ3YkdsallYUnBiMjR0YkdWMlpXd2dZMkZzYkdKaFkyc3VYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCa2IyMUpSQ0JFVDAwZ1NVUWdkRzhnY0dGemN5QjBieUIwYUdVZ1kyRnNiR0poWTJzdVhHNGdJQ0FxTDF4dUlDQmxlR1ZqZFhSbFJHbHpjR0YwWTJnNklHWjFibU4wYVc5dUtHVjJaVzUwTENCc2FYTjBaVzVsY2l3Z1pHOXRTVVFwSUh0Y2JpQWdJQ0IyWVhJZ2NtVjBkWEp1Vm1Gc2RXVWdQU0JGZG1WdWRGQnNkV2RwYmxWMGFXeHpMbVY0WldOMWRHVkVhWE53WVhSamFDaGxkbVZ1ZEN3Z2JHbHpkR1Z1WlhJc0lHUnZiVWxFS1R0Y2JseHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdkSGx3Wlc5bUlISmxkSFZ5YmxaaGJIVmxJQ0U5UFNBblltOXZiR1ZoYmljc1hHNGdJQ0FnSUNBblVtVjBkWEp1YVc1bklHQm1ZV3h6WldBZ1puSnZiU0JoYmlCbGRtVnVkQ0JvWVc1a2JHVnlJR2x6SUdSbGNISmxZMkYwWldRZ1lXNWtJSGRwYkd3Z1ltVWdKeUFyWEc0Z0lDQWdJQ0FuYVdkdWIzSmxaQ0JwYmlCaElHWjFkSFZ5WlNCeVpXeGxZWE5sTGlCSmJuTjBaV0ZrTENCdFlXNTFZV3hzZVNCallXeHNJQ2NnSzF4dUlDQWdJQ0FnSjJVdWMzUnZjRkJ5YjNCaFoyRjBhVzl1S0NrZ2IzSWdaUzV3Y21WMlpXNTBSR1ZtWVhWc2RDZ3BMQ0JoY3lCaGNIQnliM0J5YVdGMFpTNG5YRzRnSUNBZ0tTQTZJRzUxYkd3cE8xeHVYRzRnSUNBZ2FXWWdLSEpsZEhWeWJsWmhiSFZsSUQwOVBTQm1ZV3h6WlNrZ2UxeHVJQ0FnSUNBZ1pYWmxiblF1YzNSdmNGQnliM0JoWjJGMGFXOXVLQ2s3WEc0Z0lDQWdJQ0JsZG1WdWRDNXdjbVYyWlc1MFJHVm1ZWFZzZENncE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIUnZjRXhsZG1Wc1ZIbHdaU0JTWldOdmNtUWdabkp2YlNCZ1JYWmxiblJEYjI1emRHRnVkSE5nTGx4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWMlpXNTBWR0Z5WjJWMGZTQjBiM0JNWlhabGJGUmhjbWRsZENCVWFHVWdiR2x6ZEdWdWFXNW5JR052YlhCdmJtVnVkQ0J5YjI5MElHNXZaR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjBiM0JNWlhabGJGUmhjbWRsZEVsRUlFbEVJRzltSUdCMGIzQk1aWFpsYkZSaGNtZGxkR0F1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQnVZWFJwZG1WRmRtVnVkQ0JPWVhScGRtVWdZbkp2ZDNObGNpQmxkbVZ1ZEM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3S24wZ1FXNGdZV05qZFcxMWJHRjBhVzl1SUc5bUlITjViblJvWlhScFl5QmxkbVZ1ZEhNdVhHNGdJQ0FxSUVCelpXVWdlMFYyWlc1MFVHeDFaMmx1U0hWaUxtVjRkSEpoWTNSRmRtVnVkSE45WEc0Z0lDQXFMMXh1SUNCbGVIUnlZV04wUlhabGJuUnpPaUJtZFc1amRHbHZiaWhjYmlBZ0lDQWdJSFJ2Y0V4bGRtVnNWSGx3WlN4Y2JpQWdJQ0FnSUhSdmNFeGxkbVZzVkdGeVoyVjBMRnh1SUNBZ0lDQWdkRzl3VEdWMlpXeFVZWEpuWlhSSlJDeGNiaUFnSUNBZ0lHNWhkR2wyWlVWMlpXNTBLU0I3WEc0Z0lDQWdkbUZ5SUdScGMzQmhkR05vUTI5dVptbG5JRDBnZEc5d1RHVjJaV3hGZG1WdWRITlViMFJwYzNCaGRHTm9RMjl1Wm1sblczUnZjRXhsZG1Wc1ZIbHdaVjA3WEc0Z0lDQWdhV1lnS0NGa2FYTndZWFJqYUVOdmJtWnBaeWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCRmRtVnVkRU52Ym5OMGNuVmpkRzl5TzF4dUlDQWdJSE4zYVhSamFDQW9kRzl3VEdWMlpXeFVlWEJsS1NCN1hHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdTVzV3ZFhRNlhHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdURzloWkRwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkZjbkp2Y2pwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQlNaWE5sZERwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQlRkV0p0YVhRNlhHNGdJQ0FnSUNBZ0lDOHZJRWhVVFV3Z1JYWmxiblJ6WEc0Z0lDQWdJQ0FnSUM4dklFQnpaV1VnYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2VkZJdmFIUnRiRFV2YVc1a1pYZ3VhSFJ0YkNObGRtVnVkSE10TUZ4dUlDQWdJQ0FnSUNCRmRtVnVkRU52Ym5OMGNuVmpkRzl5SUQwZ1UzbHVkR2hsZEdsalJYWmxiblE3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0V0bGVWQnlaWE56T2x4dUlDQWdJQ0FnSUNBdkx5QkdhWEpsUm05NElHTnlaV0YwWlhNZ1lTQnJaWGx3Y21WemN5QmxkbVZ1ZENCbWIzSWdablZ1WTNScGIyNGdhMlY1Y3lCMGIyOHVJRlJvYVhNZ2NtVnRiM1psYzF4dUlDQWdJQ0FnSUNBdkx5QjBhR1VnZFc1M1lXNTBaV1FnYTJWNWNISmxjM01nWlhabGJuUnpMaUJGYm5SbGNpQnBjeUJvYjNkbGRtVnlJR0p2ZEdnZ2NISnBiblJoWW14bElHRnVaRnh1SUNBZ0lDQWdJQ0F2THlCdWIyNHRjSEpwYm5SaFlteGxMaUJQYm1VZ2QyOTFiR1FnWlhod1pXTjBJRlJoWWlCMGJ5QmlaU0JoY3lCM1pXeHNJQ2hpZFhRZ2FYUWdhWE51SjNRcExseHVJQ0FnSUNBZ0lDQnBaaUFvWjJWMFJYWmxiblJEYUdGeVEyOWtaU2h1WVhScGRtVkZkbVZ1ZENrZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2JuVnNiRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBdktpQm1ZV3hzY3lCMGFISnZkV2RvSUNvdlhHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdTMlY1Ukc5M2JqcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JMWlhsVmNEcGNiaUFnSUNBZ0lDQWdSWFpsYm5SRGIyNXpkSEoxWTNSdmNpQTlJRk41Ym5Sb1pYUnBZMHRsZVdKdllYSmtSWFpsYm5RN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFSnNkWEk2WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1JtOWpkWE02WEc0Z0lDQWdJQ0FnSUVWMlpXNTBRMjl1YzNSeWRXTjBiM0lnUFNCVGVXNTBhR1YwYVdOR2IyTjFjMFYyWlc1ME8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkRiR2xqYXpwY2JpQWdJQ0FnSUNBZ0x5OGdSbWx5WldadmVDQmpjbVZoZEdWeklHRWdZMnhwWTJzZ1pYWmxiblFnYjI0Z2NtbG5hSFFnYlc5MWMyVWdZMnhwWTJ0ekxpQlVhR2x6SUhKbGJXOTJaWE1nZEdobFhHNGdJQ0FnSUNBZ0lDOHZJSFZ1ZDJGdWRHVmtJR05zYVdOcklHVjJaVzUwY3k1Y2JpQWdJQ0FnSUNBZ2FXWWdLRzVoZEdsMlpVVjJaVzUwTG1KMWRIUnZiaUE5UFQwZ01pa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQzhxSUdaaGJHeHpJSFJvY205MVoyZ2dLaTljYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRGIyNTBaWGgwVFdWdWRUcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JFYjNWaWJHVkRiR2xqYXpwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQk5iM1Z6WlVSdmQyNDZYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3VFc5MWMyVk5iM1psT2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFMXZkWE5sVDNWME9seHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRTF2ZFhObFQzWmxjanBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCTmIzVnpaVlZ3T2x4dUlDQWdJQ0FnSUNCRmRtVnVkRU52Ym5OMGNuVmpkRzl5SUQwZ1UzbHVkR2hsZEdsalRXOTFjMlZGZG1WdWREdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdSSEpoWnpwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkVjbUZuUlc1a09seHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRVJ5WVdkRmJuUmxjanBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRWNtRm5SWGhwZERwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkVjbUZuVEdWaGRtVTZYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3UkhKaFowOTJaWEk2WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1JISmhaMU4wWVhKME9seHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRVJ5YjNBNlhHNGdJQ0FnSUNBZ0lFVjJaVzUwUTI5dWMzUnlkV04wYjNJZ1BTQlRlVzUwYUdWMGFXTkVjbUZuUlhabGJuUTdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRlJ2ZFdOb1EyRnVZMlZzT2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNGUnZkV05vUlc1a09seHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRlJ2ZFdOb1RXOTJaVHBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCVWIzVmphRk4wWVhKME9seHVJQ0FnSUNBZ0lDQkZkbVZ1ZEVOdmJuTjBjblZqZEc5eUlEMGdVM2x1ZEdobGRHbGpWRzkxWTJoRmRtVnVkRHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3VTJOeWIyeHNPbHh1SUNBZ0lDQWdJQ0JGZG1WdWRFTnZibk4wY25WamRHOXlJRDBnVTNsdWRHaGxkR2xqVlVsRmRtVnVkRHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3VjJobFpXdzZYRzRnSUNBZ0lDQWdJRVYyWlc1MFEyOXVjM1J5ZFdOMGIzSWdQU0JUZVc1MGFHVjBhV05YYUdWbGJFVjJaVzUwTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRGIzQjVPbHh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0VOMWREcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JRWVhOMFpUcGNiaUFnSUNBZ0lDQWdSWFpsYm5SRGIyNXpkSEoxWTNSdmNpQTlJRk41Ym5Sb1pYUnBZME5zYVhCaWIyRnlaRVYyWlc1ME8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lFVjJaVzUwUTI5dWMzUnlkV04wYjNJc1hHNGdJQ0FnSUNBblUybHRjR3hsUlhabGJuUlFiSFZuYVc0NklGVnVhR0Z1Wkd4bFpDQmxkbVZ1ZENCMGVYQmxMQ0JnSlhOZ0xpY3NYRzRnSUNBZ0lDQjBiM0JNWlhabGJGUjVjR1ZjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0VWMlpXNTBRMjl1YzNSeWRXTjBiM0lwS1R0Y2JpQWdJQ0IyWVhJZ1pYWmxiblFnUFNCRmRtVnVkRU52Ym5OMGNuVmpkRzl5TG1kbGRGQnZiMnhsWkNoY2JpQWdJQ0FnSUdScGMzQmhkR05vUTI5dVptbG5MRnh1SUNBZ0lDQWdkRzl3VEdWMlpXeFVZWEpuWlhSSlJDeGNiaUFnSUNBZ0lHNWhkR2wyWlVWMlpXNTBYRzRnSUNBZ0tUdGNiaUFnSUNCRmRtVnVkRkJ5YjNCaFoyRjBiM0p6TG1GalkzVnRkV3hoZEdWVWQyOVFhR0Z6WlVScGMzQmhkR05vWlhNb1pYWmxiblFwTzF4dUlDQWdJSEpsZEhWeWJpQmxkbVZ1ZER0Y2JpQWdmVnh1WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRk5wYlhCc1pVVjJaVzUwVUd4MVoybHVPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0V2ZW50XCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY2xpcGJvYXJkLWFwaXMvXG4gKi9cbnZhciBDbGlwYm9hcmRFdmVudEludGVyZmFjZSA9IHtcbiAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgJ2NsaXBib2FyZERhdGEnIGluIGV2ZW50ID9cbiAgICAgICAgZXZlbnQuY2xpcGJvYXJkRGF0YSA6XG4gICAgICAgIHdpbmRvdy5jbGlwYm9hcmREYXRhXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljQ2xpcGJvYXJkRXZlbnQsIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRXZlbnRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1jb21wb3NpdGlvbmV2ZW50c1xuICovXG52YXIgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSA9IHtcbiAgZGF0YTogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljQ29tcG9zaXRpb25FdmVudChcbiAgZGlzcGF0Y2hDb25maWcsXG4gIGRpc3BhdGNoTWFya2VyLFxuICBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoXG4gIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQsXG4gIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2Vcbik7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNEcmFnRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY01vdXNlRXZlbnRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBEcmFnRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgRHJhZ0V2ZW50SW50ZXJmYWNlID0ge1xuICBkYXRhVHJhbnNmZXI6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0RyYWdFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY01vdXNlRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljTW91c2VFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljRHJhZ0V2ZW50LCBEcmFnRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0RyYWdFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoXCIuL1Bvb2xlZENsYXNzXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZW1wdHlGdW5jdGlvblwiKTtcbnZhciBnZXRFdmVudFRhcmdldCA9IHJlcXVpcmUoXCIuL2dldEV2ZW50VGFyZ2V0XCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHR5cGU6IG51bGwsXG4gIHRhcmdldDogZ2V0RXZlbnRUYXJnZXQsXG4gIC8vIGN1cnJlbnRUYXJnZXQgaXMgc2V0IHdoZW4gZGlzcGF0Y2hpbmc7IG5vIHVzZSBpbiBjb3B5aW5nIGl0IGhlcmVcbiAgY3VycmVudFRhcmdldDogZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwsXG4gIGV2ZW50UGhhc2U6IG51bGwsXG4gIGJ1YmJsZXM6IG51bGwsXG4gIGNhbmNlbGFibGU6IG51bGwsXG4gIHRpbWVTdGFtcDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIGRlZmF1bHRQcmV2ZW50ZWQ6IG51bGwsXG4gIGlzVHJ1c3RlZDogbnVsbFxufTtcblxuLyoqXG4gKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gKiB0b3AtbGV2ZWwgZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyLlxuICpcbiAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gKiBjb2xsZWN0aW9uLiBUaGUgc3lzdGVtIHNob3VsZCBjaGVjayBgaXNQZXJzaXN0ZW50YCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiAqIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFmdGVyIGJlaW5nIGRpc3BhdGNoZWQuIFVzZXJzIHRoYXRcbiAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gKlxuICogU3ludGhldGljIGV2ZW50cyAoYW5kIHN1YmNsYXNzZXMpIGltcGxlbWVudCB0aGUgRE9NIExldmVsIDMgRXZlbnRzIEFQSSBieVxuICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAqIERPTSBpbnRlcmZhY2U7IGN1c3RvbSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBldmVudHMgY2FuIGFsc28gc3ViY2xhc3MgdGhpcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0V2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgdGhpcy5kaXNwYXRjaENvbmZpZyA9IGRpc3BhdGNoQ29uZmlnO1xuICB0aGlzLmRpc3BhdGNoTWFya2VyID0gZGlzcGF0Y2hNYXJrZXI7XG4gIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcblxuICB2YXIgSW50ZXJmYWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7XG4gIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgIGlmICghSW50ZXJmYWNlLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBub3JtYWxpemUgPSBJbnRlcmZhY2VbcHJvcE5hbWVdO1xuICAgIGlmIChub3JtYWxpemUpIHtcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gbm9ybWFsaXplKG5hdGl2ZUV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1twcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtwcm9wTmFtZV07XG4gICAgfVxuICB9XG5cbiAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgP1xuICAgIG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgOlxuICAgIG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlID09PSBmYWxzZTtcbiAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlO1xuICB9XG4gIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2U7XG59XG5cbmFzc2lnbihTeW50aGV0aWNFdmVudC5wcm90b3R5cGUsIHtcblxuICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSxcblxuICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSxcblxuICAvKipcbiAgICogV2UgcmVsZWFzZSBhbGwgZGlzcGF0Y2hlZCBgU3ludGhldGljRXZlbnRgcyBhZnRlciBlYWNoIGV2ZW50IGxvb3AsIGFkZGluZ1xuICAgKiB0aGVtIGJhY2sgaW50byB0aGUgcG9vbC4gVGhpcyBhbGxvd3MgYSB3YXkgdG8gaG9sZCBvbnRvIGEgcmVmZXJlbmNlIHRoYXRcbiAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgKi9cbiAgcGVyc2lzdDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1BlcnNpc3RlbnQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIHNob3VsZCBub3QgYmUgcmVsZWFzZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGlzUGVyc2lzdGVudDogZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlLFxuXG4gIC8qKlxuICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciBgZGVzdHJ1Y3RvcmAgb24gZWFjaCBpbnN0YW5jZSBpdCByZWxlYXNlcy5cbiAgICovXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtcbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5kaXNwYXRjaENvbmZpZyA9IG51bGw7XG4gICAgdGhpcy5kaXNwYXRjaE1hcmtlciA9IG51bGw7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG51bGw7XG4gIH1cblxufSk7XG5cblN5bnRoZXRpY0V2ZW50LkludGVyZmFjZSA9IEV2ZW50SW50ZXJmYWNlO1xuXG4vKipcbiAqIEhlbHBlciB0byByZWR1Y2UgYm9pbGVycGxhdGUgd2hlbiBjcmVhdGluZyBzdWJjbGFzc2VzLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IENsYXNzXG4gKiBAcGFyYW0gez9vYmplY3R9IEludGVyZmFjZVxuICovXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MgPSBmdW5jdGlvbihDbGFzcywgSW50ZXJmYWNlKSB7XG4gIHZhciBTdXBlciA9IHRoaXM7XG5cbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgYXNzaWduKHByb3RvdHlwZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgQ2xhc3MucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDbGFzcztcblxuICBDbGFzcy5JbnRlcmZhY2UgPSBhc3NpZ24oe30sIFN1cGVyLkludGVyZmFjZSwgSW50ZXJmYWNlKTtcbiAgQ2xhc3MuYXVnbWVudENsYXNzID0gU3VwZXIuYXVnbWVudENsYXNzO1xuXG4gIFBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhDbGFzcywgUG9vbGVkQ2xhc3MudGhyZWVBcmd1bWVudFBvb2xlcik7XG59O1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oU3ludGhldGljRXZlbnQsIFBvb2xlZENsYXNzLnRocmVlQXJndW1lbnRQb29sZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0V2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0ZvY3VzRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY1VJRXZlbnRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBGb2N1c0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIEZvY3VzRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHJlbGF0ZWRUYXJnZXQ6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0ZvY3VzRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY1VJRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY0ZvY3VzRXZlbnQsIEZvY3VzRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljSW5wdXRFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0V2ZW50XCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDVcbiAqICAgICAgLyNldmVudHMtaW5wdXRldmVudHNcbiAqL1xudmFyIElucHV0RXZlbnRJbnRlcmZhY2UgPSB7XG4gIGRhdGE6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0lucHV0RXZlbnQoXG4gIGRpc3BhdGNoQ29uZmlnLFxuICBkaXNwYXRjaE1hcmtlcixcbiAgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljRXZlbnQuYXVnbWVudENsYXNzKFxuICBTeW50aGV0aWNJbnB1dEV2ZW50LFxuICBJbnB1dEV2ZW50SW50ZXJmYWNlXG4pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0lucHV0RXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljS2V5Ym9hcmRFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljVUlFdmVudFwiKTtcblxudmFyIGdldEV2ZW50Q2hhckNvZGUgPSByZXF1aXJlKFwiLi9nZXRFdmVudENoYXJDb2RlXCIpO1xudmFyIGdldEV2ZW50S2V5ID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRLZXlcIik7XG52YXIgZ2V0RXZlbnRNb2RpZmllclN0YXRlID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRNb2RpZmllclN0YXRlXCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBLZXlib2FyZEV2ZW50SW50ZXJmYWNlID0ge1xuICBrZXk6IGdldEV2ZW50S2V5LFxuICBsb2NhdGlvbjogbnVsbCxcbiAgY3RybEtleTogbnVsbCxcbiAgc2hpZnRLZXk6IG51bGwsXG4gIGFsdEtleTogbnVsbCxcbiAgbWV0YUtleTogbnVsbCxcbiAgcmVwZWF0OiBudWxsLFxuICBsb2NhbGU6IG51bGwsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgLy8gTGVnYWN5IEludGVyZmFjZVxuICBjaGFyQ29kZTogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAvLyBgY2hhckNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlQcmVzcyBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyB0aGUgYWN0dWFsIHByaW50YWJsZSBjaGFyYWN0ZXIuXG5cbiAgICAvLyBLZXlQcmVzcyBpcyBkZXByZWNhdGVkLCBidXQgaXRzIHJlcGxhY2VtZW50IGlzIG5vdCB5ZXQgZmluYWwgYW5kIG5vdFxuICAgIC8vIGltcGxlbWVudGVkIGluIGFueSBtYWpvciBicm93c2VyLiBPbmx5IEtleVByZXNzIGhhcyBjaGFyQ29kZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAga2V5Q29kZTogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAvLyBga2V5Q29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuXG4gICAgLy8gVGhlIGFjdHVhbCBtZWFuaW5nIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSB1c2Vycycga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gd2hpY2ggY2Fubm90IGJlIGRldGVjdGVkLiBBc3N1bWluZyB0aGF0IGl0IGlzIGEgVVMga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gcHJvdmlkZXMgYSBzdXJwcmlzaW5nbHkgYWNjdXJhdGUgbWFwcGluZyBmb3IgVVMgYW5kIEV1cm9wZWFuIHVzZXJzLlxuICAgIC8vIER1ZSB0byB0aGlzLCBpdCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHRvIGltcGxlbWVudCBhdCB0aGlzIHRpbWUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbihldmVudCkge1xuICAgIC8vIGB3aGljaGAgaXMgYW4gYWxpYXMgZm9yIGVpdGhlciBga2V5Q29kZWAgb3IgYGNoYXJDb2RlYCBkZXBlbmRpbmcgb24gdGhlXG4gICAgLy8gdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY1VJRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY0tleWJvYXJkRXZlbnQsIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljTW91c2VFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljVUlFdmVudFwiKTtcbnZhciBWaWV3cG9ydE1ldHJpY3MgPSByZXF1aXJlKFwiLi9WaWV3cG9ydE1ldHJpY3NcIik7XG5cbnZhciBnZXRFdmVudE1vZGlmaWVyU3RhdGUgPSByZXF1aXJlKFwiLi9nZXRFdmVudE1vZGlmaWVyU3RhdGVcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBNb3VzZUV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIE1vdXNlRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHNjcmVlblg6IG51bGwsXG4gIHNjcmVlblk6IG51bGwsXG4gIGNsaWVudFg6IG51bGwsXG4gIGNsaWVudFk6IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgYnV0dG9uOiBmdW5jdGlvbihldmVudCkge1xuICAgIC8vIFdlYmtpdCwgRmlyZWZveCwgSUU5K1xuICAgIC8vIHdoaWNoOiAgMSAyIDNcbiAgICAvLyBidXR0b246IDAgMSAyIChzdGFuZGFyZClcbiAgICB2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xuICAgIGlmICgnd2hpY2gnIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gYnV0dG9uO1xuICAgIH1cbiAgICAvLyBJRTw5XG4gICAgLy8gd2hpY2g6ICB1bmRlZmluZWRcbiAgICAvLyBidXR0b246IDAgMCAwXG4gICAgLy8gYnV0dG9uOiAxIDQgMiAob25tb3VzZXVwKVxuICAgIHJldHVybiBidXR0b24gPT09IDIgPyAyIDogYnV0dG9uID09PSA0ID8gMSA6IDA7XG4gIH0sXG4gIGJ1dHRvbnM6IG51bGwsXG4gIHJlbGF0ZWRUYXJnZXQ6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgKFxuICAgICAgKChldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQuc3JjRWxlbWVudCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50KSlcbiAgICApO1xuICB9LFxuICAvLyBcIlByb3ByaWV0YXJ5XCIgSW50ZXJmYWNlLlxuICBwYWdlWDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gJ3BhZ2VYJyBpbiBldmVudCA/XG4gICAgICBldmVudC5wYWdlWCA6XG4gICAgICBldmVudC5jbGllbnRYICsgVmlld3BvcnRNZXRyaWNzLmN1cnJlbnRTY3JvbGxMZWZ0O1xuICB9LFxuICBwYWdlWTogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gJ3BhZ2VZJyBpbiBldmVudCA/XG4gICAgICBldmVudC5wYWdlWSA6XG4gICAgICBldmVudC5jbGllbnRZICsgVmlld3BvcnRNZXRyaWNzLmN1cnJlbnRTY3JvbGxUb3A7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY01vdXNlRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY1VJRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY01vdXNlRXZlbnQsIE1vdXNlRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljVG91Y2hFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljVUlFdmVudFwiKTtcblxudmFyIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSA9IHJlcXVpcmUoXCIuL2dldEV2ZW50TW9kaWZpZXJTdGF0ZVwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIFRvdWNoRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzL1xuICovXG52YXIgVG91Y2hFdmVudEludGVyZmFjZSA9IHtcbiAgdG91Y2hlczogbnVsbCxcbiAgdGFyZ2V0VG91Y2hlczogbnVsbCxcbiAgY2hhbmdlZFRvdWNoZXM6IG51bGwsXG4gIGFsdEtleTogbnVsbCxcbiAgbWV0YUtleTogbnVsbCxcbiAgY3RybEtleTogbnVsbCxcbiAgc2hpZnRLZXk6IG51bGwsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljVG91Y2hFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljVUlFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljVG91Y2hFdmVudCwgVG91Y2hFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljVG91Y2hFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNVSUV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRXZlbnRcIik7XG5cbnZhciBnZXRFdmVudFRhcmdldCA9IHJlcXVpcmUoXCIuL2dldEV2ZW50VGFyZ2V0XCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgVUlFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBVSUV2ZW50SW50ZXJmYWNlID0ge1xuICB2aWV3OiBmdW5jdGlvbihldmVudCkge1xuICAgIGlmIChldmVudC52aWV3KSB7XG4gICAgICByZXR1cm4gZXZlbnQudmlldztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZXZlbnQpO1xuICAgIGlmICh0YXJnZXQgIT0gbnVsbCAmJiB0YXJnZXQud2luZG93ID09PSB0YXJnZXQpIHtcbiAgICAgIC8vIHRhcmdldCBpcyBhIHdpbmRvdyBvYmplY3RcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgdmFyIGRvYyA9IHRhcmdldC5vd25lckRvY3VtZW50O1xuICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMgdW5kZWZpbmVkIGluIElFOC5cbiAgICBpZiAoZG9jKSB7XG4gICAgICByZXR1cm4gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICB9LFxuICBkZXRhaWw6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmRldGFpbCB8fCAwO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljVUlFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNVSUV2ZW50LCBVSUV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNVSUV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY1doZWVsRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY01vdXNlRXZlbnRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBXaGVlbEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIFdoZWVsRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGRlbHRhWDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOlxuICAgICAgLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFYYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKHJpZ2h0IGlzIHBvc2l0aXZlKS5cbiAgICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVggOiAwXG4gICAgKTtcbiAgfSxcbiAgZGVsdGFZOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiAoXG4gICAgICAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWSA6XG4gICAgICAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVlgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFZIDpcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhYCBmb3IgSUU8OSBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAgICd3aGVlbERlbHRhJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhIDogMFxuICAgICk7XG4gIH0sXG4gIGRlbHRhWjogbnVsbCxcblxuICAvLyBCcm93c2VycyB3aXRob3V0IFwiZGVsdGFNb2RlXCIgaXMgcmVwb3J0aW5nIGluIHJhdyB3aGVlbCBkZWx0YSB3aGVyZSBvbmVcbiAgLy8gbm90Y2ggb24gdGhlIHNjcm9sbCBpcyBhbHdheXMgKy8tIDEyMCwgcm91Z2hseSBlcXVpdmFsZW50IHRvIHBpeGVscy5cbiAgLy8gQSBnb29kIGFwcHJveGltYXRpb24gb2YgRE9NX0RFTFRBX0xJTkUgKDEpIGlzIDUlIG9mIHZpZXdwb3J0IHNpemUgb3JcbiAgLy8gfjQwIHBpeGVscywgZm9yIERPTV9ERUxUQV9TQ1JFRU4gKDIpIGl0IGlzIDg3LjUlIG9mIHZpZXdwb3J0IHNpemUuXG4gIGRlbHRhTW9kZTogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljTW91c2VFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljV2hlZWxFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY01vdXNlRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljTW91c2VFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljV2hlZWxFdmVudCwgV2hlZWxFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljV2hlZWxFdmVudDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgVHJhbnNhY3Rpb25cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogYFRyYW5zYWN0aW9uYCBjcmVhdGVzIGEgYmxhY2sgYm94IHRoYXQgaXMgYWJsZSB0byB3cmFwIGFueSBtZXRob2Qgc3VjaCB0aGF0XG4gKiBjZXJ0YWluIGludmFyaWFudHMgYXJlIG1haW50YWluZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgbWV0aG9kIGlzIGludm9rZWRcbiAqIChFdmVuIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hpbGUgaW52b2tpbmcgdGhlIHdyYXBwZWQgbWV0aG9kKS4gV2hvZXZlclxuICogaW5zdGFudGlhdGVzIGEgdHJhbnNhY3Rpb24gY2FuIHByb3ZpZGUgZW5mb3JjZXJzIG9mIHRoZSBpbnZhcmlhbnRzIGF0XG4gKiBjcmVhdGlvbiB0aW1lLiBUaGUgYFRyYW5zYWN0aW9uYCBjbGFzcyBpdHNlbGYgd2lsbCBzdXBwbHkgb25lIGFkZGl0aW9uYWxcbiAqIGF1dG9tYXRpYyBpbnZhcmlhbnQgZm9yIHlvdSAtIHRoZSBpbnZhcmlhbnQgdGhhdCBhbnkgdHJhbnNhY3Rpb24gaW5zdGFuY2VcbiAqIHNob3VsZCBub3QgYmUgcnVuIHdoaWxlIGl0IGlzIGFscmVhZHkgYmVpbmcgcnVuLiBZb3Ugd291bGQgdHlwaWNhbGx5IGNyZWF0ZSBhXG4gKiBzaW5nbGUgaW5zdGFuY2Ugb2YgYSBgVHJhbnNhY3Rpb25gIGZvciByZXVzZSBtdWx0aXBsZSB0aW1lcywgdGhhdCBwb3RlbnRpYWxseVxuICogaXMgdXNlZCB0byB3cmFwIHNldmVyYWwgZGlmZmVyZW50IG1ldGhvZHMuIFdyYXBwZXJzIGFyZSBleHRyZW1lbHkgc2ltcGxlIC1cbiAqIHRoZXkgb25seSByZXF1aXJlIGltcGxlbWVudGluZyB0d28gbWV0aG9kcy5cbiAqXG4gKiA8cHJlPlxuICogICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJzIChpbmplY3RlZCBhdCBjcmVhdGlvbiB0aW1lKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgICAgICAgICtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHYgICAgICAgIHwgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgKy0tLS0tLS0tLS0tLS0tLSsgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgICstLXwgICAgd3JhcHBlcjEgICB8LS0tfC0tLS0rICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICArLS0tLS0tLS0tLS0tLS0tKyAgIHYgICAgfCAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICAgICArLS0tLS0tLS0tLS0tLSsgIHwgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICstLS0tfCAgIHdyYXBwZXIyICB8LS0tLS0tLS0rICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICB8ICAgICstLS0tLS0tLS0tLS0tKyAgfCAgICAgfCAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICB2ICAgICB2ICAgfCB3cmFwcGVyXG4gKiAgICAgICAgICAgICAgICAgICAgfCArLS0tKyArLS0tKyAgICstLS0tLS0tLS0rICAgKy0tLSsgKy0tLSsgfCBpbnZhcmlhbnRzXG4gKiBwZXJmb3JtKGFueU1ldGhvZCkgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfCBtYWludGFpbmVkXG4gKiArLS0tLS0tLS0tLS0tLS0tLS0+fC18LS0tfC18LS0tfC0tPnxhbnlNZXRob2R8LS0tfC0tLXwtfC0tLXwtfC0tLS0tLS0tPlxuICogICAgICAgICAgICAgICAgICAgIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8IHwgICB8IHxcbiAqICAgICAgICAgICAgICAgICAgICB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfFxuICogICAgICAgICAgICAgICAgICAgIHwgKy0tLSsgKy0tLSsgICArLS0tLS0tLS0tKyAgICstLS0rICstLS0rIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICBpbml0aWFsaXplICAgICAgICAgICAgICAgICAgICBjbG9zZSAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICogPC9wcmU+XG4gKlxuICogVXNlIGNhc2VzOlxuICogLSBQcmVzZXJ2aW5nIHRoZSBpbnB1dCBzZWxlY3Rpb24gcmFuZ2VzIGJlZm9yZS9hZnRlciByZWNvbmNpbGlhdGlvbi5cbiAqICAgUmVzdG9yaW5nIHNlbGVjdGlvbiBldmVuIGluIHRoZSBldmVudCBvZiBhbiB1bmV4cGVjdGVkIGVycm9yLlxuICogLSBEZWFjdGl2YXRpbmcgZXZlbnRzIHdoaWxlIHJlYXJyYW5naW5nIHRoZSBET00sIHByZXZlbnRpbmcgYmx1cnMvZm9jdXNlcyxcbiAqICAgd2hpbGUgZ3VhcmFudGVlaW5nIHRoYXQgYWZ0ZXJ3YXJkcywgdGhlIGV2ZW50IHN5c3RlbSBpcyByZWFjdGl2YXRlZC5cbiAqIC0gRmx1c2hpbmcgYSBxdWV1ZSBvZiBjb2xsZWN0ZWQgRE9NIG11dGF0aW9ucyB0byB0aGUgbWFpbiBVSSB0aHJlYWQgYWZ0ZXIgYVxuICogICByZWNvbmNpbGlhdGlvbiB0YWtlcyBwbGFjZSBpbiBhIHdvcmtlciB0aHJlYWQuXG4gKiAtIEludm9raW5nIGFueSBjb2xsZWN0ZWQgYGNvbXBvbmVudERpZFVwZGF0ZWAgY2FsbGJhY2tzIGFmdGVyIHJlbmRlcmluZyBuZXdcbiAqICAgY29udGVudC5cbiAqIC0gKEZ1dHVyZSB1c2UgY2FzZSk6IFdyYXBwaW5nIHBhcnRpY3VsYXIgZmx1c2hlcyBvZiB0aGUgYFJlYWN0V29ya2VyYCBxdWV1ZVxuICogICB0byBwcmVzZXJ2ZSB0aGUgYHNjcm9sbFRvcGAgKGFuIGF1dG9tYXRpYyBzY3JvbGwgYXdhcmUgRE9NKS5cbiAqIC0gKEZ1dHVyZSB1c2UgY2FzZSk6IExheW91dCBjYWxjdWxhdGlvbnMgYmVmb3JlIGFuZCBhZnRlciBET00gdXBkYXRlcy5cbiAqXG4gKiBUcmFuc2FjdGlvbmFsIHBsdWdpbiBBUEk6XG4gKiAtIEEgbW9kdWxlIHRoYXQgaGFzIGFuIGBpbml0aWFsaXplYCBtZXRob2QgdGhhdCByZXR1cm5zIGFueSBwcmVjb21wdXRhdGlvbi5cbiAqIC0gYW5kIGEgYGNsb3NlYCBtZXRob2QgdGhhdCBhY2NlcHRzIHRoZSBwcmVjb21wdXRhdGlvbi4gYGNsb3NlYCBpcyBpbnZva2VkXG4gKiAgIHdoZW4gdGhlIHdyYXBwZWQgcHJvY2VzcyBpcyBjb21wbGV0ZWQsIG9yIGhhcyBmYWlsZWQuXG4gKlxuICogQHBhcmFtIHtBcnJheTxUcmFuc2FjdGlvbmFsV3JhcHBlcj59IHRyYW5zYWN0aW9uV3JhcHBlciBXcmFwcGVyIG1vZHVsZXNcbiAqIHRoYXQgaW1wbGVtZW50IGBpbml0aWFsaXplYCBhbmQgYGNsb3NlYC5cbiAqIEByZXR1cm4ge1RyYW5zYWN0aW9ufSBTaW5nbGUgdHJhbnNhY3Rpb24gZm9yIHJldXNlIGluIHRocmVhZC5cbiAqXG4gKiBAY2xhc3MgVHJhbnNhY3Rpb25cbiAqL1xudmFyIE1peGluID0ge1xuICAvKipcbiAgICogU2V0cyB1cCB0aGlzIGluc3RhbmNlIHNvIHRoYXQgaXQgaXMgcHJlcGFyZWQgZm9yIGNvbGxlY3RpbmcgbWV0cmljcy4gRG9lc1xuICAgKiBzbyBzdWNoIHRoYXQgdGhpcyBzZXR1cCBtZXRob2QgbWF5IGJlIHVzZWQgb24gYW4gaW5zdGFuY2UgdGhhdCBpcyBhbHJlYWR5XG4gICAqIGluaXRpYWxpemVkLCBpbiBhIHdheSB0aGF0IGRvZXMgbm90IGNvbnN1bWUgYWRkaXRpb25hbCBtZW1vcnkgdXBvbiByZXVzZS5cbiAgICogVGhhdCBjYW4gYmUgdXNlZnVsIGlmIHlvdSBkZWNpZGUgdG8gbWFrZSB5b3VyIHN1YmNsYXNzIG9mIHRoaXMgbWl4aW4gYVxuICAgKiBcIlBvb2xlZENsYXNzXCIuXG4gICAqL1xuICByZWluaXRpYWxpemVUcmFuc2FjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzID0gdGhpcy5nZXRUcmFuc2FjdGlvbldyYXBwZXJzKCk7XG4gICAgaWYgKCF0aGlzLndyYXBwZXJJbml0RGF0YSkge1xuICAgICAgdGhpcy53cmFwcGVySW5pdERhdGEgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53cmFwcGVySW5pdERhdGEubGVuZ3RoID0gMDtcbiAgICB9XG4gICAgdGhpcy5faXNJblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gIH0sXG5cbiAgX2lzSW5UcmFuc2FjdGlvbjogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJuIHtBcnJheTxUcmFuc2FjdGlvbldyYXBwZXI+fSBBcnJheSBvZiB0cmFuc2FjdGlvbiB3cmFwcGVycy5cbiAgICovXG4gIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IG51bGwsXG5cbiAgaXNJblRyYW5zYWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gISF0aGlzLl9pc0luVHJhbnNhY3Rpb247XG4gIH0sXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBmdW5jdGlvbiB3aXRoaW4gYSBzYWZldHkgd2luZG93LiBVc2UgdGhpcyBmb3IgdGhlIHRvcCBsZXZlbFxuICAgKiBtZXRob2RzIHRoYXQgcmVzdWx0IGluIGxhcmdlIGFtb3VudHMgb2YgY29tcHV0YXRpb24vbXV0YXRpb25zIHRoYXQgd291bGRcbiAgICogbmVlZCB0byBiZSBzYWZldHkgY2hlY2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kIE1lbWJlciBvZiBzY29wZSB0byBjYWxsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gc2NvcGUgU2NvcGUgdG8gaW52b2tlIGZyb20uXG4gICAqIEBwYXJhbSB7T2JqZWN0Pz19IGFyZ3MuLi4gQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZCAob3B0aW9uYWwpLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlbHBzIHByZXZlbnQgbmVlZCB0byBiaW5kIGluIG1hbnkgY2FzZXMuXG4gICAqIEByZXR1cm4gUmV0dXJuIHZhbHVlIGZyb20gYG1ldGhvZGAuXG4gICAqL1xuICBwZXJmb3JtOiBmdW5jdGlvbihtZXRob2QsIHNjb3BlLCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICF0aGlzLmlzSW5UcmFuc2FjdGlvbigpLFxuICAgICAgJ1RyYW5zYWN0aW9uLnBlcmZvcm0oLi4uKTogQ2Fubm90IGluaXRpYWxpemUgYSB0cmFuc2FjdGlvbiB3aGVuIHRoZXJlICcgK1xuICAgICAgJ2lzIGFscmVhZHkgYW4gb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb24uJ1xuICAgICkgOiBpbnZhcmlhbnQoIXRoaXMuaXNJblRyYW5zYWN0aW9uKCkpKTtcbiAgICB2YXIgZXJyb3JUaHJvd247XG4gICAgdmFyIHJldDtcbiAgICB0cnkge1xuICAgICAgdGhpcy5faXNJblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgICAgIC8vIENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcgbW9yZSBkaWZmaWN1bHQsIHNvIHdlIHN0YXJ0IHdpdGhcbiAgICAgIC8vIGVycm9yVGhyb3duIHNldCB0byB0cnVlIGJlZm9yZSBzZXR0aW5nIGl0IHRvIGZhbHNlIGFmdGVyIGNhbGxpbmdcbiAgICAgIC8vIGNsb3NlIC0tIGlmIGl0J3Mgc3RpbGwgc2V0IHRvIHRydWUgaW4gdGhlIGZpbmFsbHkgYmxvY2ssIGl0IG1lYW5zXG4gICAgICAvLyBvbmUgb2YgdGhlc2UgY2FsbHMgdGhyZXcuXG4gICAgICBlcnJvclRocm93biA9IHRydWU7XG4gICAgICB0aGlzLmluaXRpYWxpemVBbGwoMCk7XG4gICAgICByZXQgPSBtZXRob2QuY2FsbChzY29wZSwgYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICBlcnJvclRocm93biA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAvLyBJZiBgbWV0aG9kYCB0aHJvd3MsIHByZWZlciB0byBzaG93IHRoYXQgc3RhY2sgdHJhY2Ugb3ZlciBhbnkgdGhyb3duXG4gICAgICAgICAgLy8gYnkgaW52b2tpbmcgYGNsb3NlQWxsYC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFsbCgwKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2luY2UgYG1ldGhvZGAgZGlkbid0IHRocm93LCB3ZSBkb24ndCB3YW50IHRvIHNpbGVuY2UgdGhlIGV4Y2VwdGlvblxuICAgICAgICAgIC8vIGhlcmUuXG4gICAgICAgICAgdGhpcy5jbG9zZUFsbCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5faXNJblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZUFsbDogZnVuY3Rpb24oc3RhcnRJbmRleCkge1xuICAgIHZhciB0cmFuc2FjdGlvbldyYXBwZXJzID0gdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdHJhbnNhY3Rpb25XcmFwcGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHdyYXBwZXIgPSB0cmFuc2FjdGlvbldyYXBwZXJzW2ldO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ2F0Y2hpbmcgZXJyb3JzIG1ha2VzIGRlYnVnZ2luZyBtb3JlIGRpZmZpY3VsdCwgc28gd2Ugc3RhcnQgd2l0aCB0aGVcbiAgICAgICAgLy8gT0JTRVJWRURfRVJST1Igc3RhdGUgYmVmb3JlIG92ZXJ3cml0aW5nIGl0IHdpdGggdGhlIHJlYWwgcmV0dXJuIHZhbHVlXG4gICAgICAgIC8vIG9mIGluaXRpYWxpemUgLS0gaWYgaXQncyBzdGlsbCBzZXQgdG8gT0JTRVJWRURfRVJST1IgaW4gdGhlIGZpbmFsbHlcbiAgICAgICAgLy8gYmxvY2ssIGl0IG1lYW5zIHdyYXBwZXIuaW5pdGlhbGl6ZSB0aHJldy5cbiAgICAgICAgdGhpcy53cmFwcGVySW5pdERhdGFbaV0gPSBUcmFuc2FjdGlvbi5PQlNFUlZFRF9FUlJPUjtcbiAgICAgICAgdGhpcy53cmFwcGVySW5pdERhdGFbaV0gPSB3cmFwcGVyLmluaXRpYWxpemUgP1xuICAgICAgICAgIHdyYXBwZXIuaW5pdGlhbGl6ZS5jYWxsKHRoaXMpIDpcbiAgICAgICAgICBudWxsO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRoaXMud3JhcHBlckluaXREYXRhW2ldID09PSBUcmFuc2FjdGlvbi5PQlNFUlZFRF9FUlJPUikge1xuICAgICAgICAgIC8vIFRoZSBpbml0aWFsaXplciBmb3Igd3JhcHBlciBpIHRocmV3IGFuIGVycm9yOyBpbml0aWFsaXplIHRoZVxuICAgICAgICAgIC8vIHJlbWFpbmluZyB3cmFwcGVycyBidXQgc2lsZW5jZSBhbnkgZXhjZXB0aW9ucyBmcm9tIHRoZW0gdG8gZW5zdXJlXG4gICAgICAgICAgLy8gdGhhdCB0aGUgZmlyc3QgZXJyb3IgaXMgdGhlIG9uZSB0byBidWJibGUgdXAuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFsbChpICsgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGVhY2ggb2YgYHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycy5jbG9zZVtpXWAgZnVuY3Rpb25zLCBwYXNzaW5nIGludG9cbiAgICogdGhlbSB0aGUgcmVzcGVjdGl2ZSByZXR1cm4gdmFsdWVzIG9mIGB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMuaW5pdFtpXWBcbiAgICogKGBjbG9zZWBycyB0aGF0IGNvcnJlc3BvbmQgdG8gaW5pdGlhbGl6ZXJzIHRoYXQgZmFpbGVkIHdpbGwgbm90IGJlXG4gICAqIGludm9rZWQpLlxuICAgKi9cbiAgY2xvc2VBbGw6IGZ1bmN0aW9uKHN0YXJ0SW5kZXgpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdGhpcy5pc0luVHJhbnNhY3Rpb24oKSxcbiAgICAgICdUcmFuc2FjdGlvbi5jbG9zZUFsbCgpOiBDYW5ub3QgY2xvc2UgdHJhbnNhY3Rpb24gd2hlbiBub25lIGFyZSBvcGVuLidcbiAgICApIDogaW52YXJpYW50KHRoaXMuaXNJblRyYW5zYWN0aW9uKCkpKTtcbiAgICB2YXIgdHJhbnNhY3Rpb25XcmFwcGVycyA9IHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycztcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IHRyYW5zYWN0aW9uV3JhcHBlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3cmFwcGVyID0gdHJhbnNhY3Rpb25XcmFwcGVyc1tpXTtcbiAgICAgIHZhciBpbml0RGF0YSA9IHRoaXMud3JhcHBlckluaXREYXRhW2ldO1xuICAgICAgdmFyIGVycm9yVGhyb3duO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ2F0Y2hpbmcgZXJyb3JzIG1ha2VzIGRlYnVnZ2luZyBtb3JlIGRpZmZpY3VsdCwgc28gd2Ugc3RhcnQgd2l0aFxuICAgICAgICAvLyBlcnJvclRocm93biBzZXQgdG8gdHJ1ZSBiZWZvcmUgc2V0dGluZyBpdCB0byBmYWxzZSBhZnRlciBjYWxsaW5nXG4gICAgICAgIC8vIGNsb3NlIC0tIGlmIGl0J3Mgc3RpbGwgc2V0IHRvIHRydWUgaW4gdGhlIGZpbmFsbHkgYmxvY2ssIGl0IG1lYW5zXG4gICAgICAgIC8vIHdyYXBwZXIuY2xvc2UgdGhyZXcuXG4gICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgICAgaWYgKGluaXREYXRhICE9PSBUcmFuc2FjdGlvbi5PQlNFUlZFRF9FUlJPUiAmJiB3cmFwcGVyLmNsb3NlKSB7XG4gICAgICAgICAgd3JhcHBlci5jbG9zZS5jYWxsKHRoaXMsIGluaXREYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlcnJvclRocm93biA9IGZhbHNlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgLy8gVGhlIGNsb3NlciBmb3Igd3JhcHBlciBpIHRocmV3IGFuIGVycm9yOyBjbG9zZSB0aGUgcmVtYWluaW5nXG4gICAgICAgICAgLy8gd3JhcHBlcnMgYnV0IHNpbGVuY2UgYW55IGV4Y2VwdGlvbnMgZnJvbSB0aGVtIHRvIGVuc3VyZSB0aGF0IHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGVycm9yIGlzIHRoZSBvbmUgdG8gYnViYmxlIHVwLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQWxsKGkgKyAxKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMud3JhcHBlckluaXREYXRhLmxlbmd0aCA9IDA7XG4gIH1cbn07XG5cbnZhciBUcmFuc2FjdGlvbiA9IHtcblxuICBNaXhpbjogTWl4aW4sXG5cbiAgLyoqXG4gICAqIFRva2VuIHRvIGxvb2sgZm9yIHRvIGRldGVybWluZSBpZiBhbiBlcnJvciBvY2N1cmVkLlxuICAgKi9cbiAgT0JTRVJWRURfRVJST1I6IHt9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNhY3Rpb247XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZWSEpoYm5OaFkzUnBiMjR1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1ZISmhibk5oWTNScGIyNWNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JpOHFLbHh1SUNvZ1lGUnlZVzV6WVdOMGFXOXVZQ0JqY21WaGRHVnpJR0VnWW14aFkyc2dZbTk0SUhSb1lYUWdhWE1nWVdKc1pTQjBieUIzY21Gd0lHRnVlU0J0WlhSb2IyUWdjM1ZqYUNCMGFHRjBYRzRnS2lCalpYSjBZV2x1SUdsdWRtRnlhV0Z1ZEhNZ1lYSmxJRzFoYVc1MFlXbHVaV1FnWW1WbWIzSmxJR0Z1WkNCaFpuUmxjaUIwYUdVZ2JXVjBhRzlrSUdseklHbHVkbTlyWldSY2JpQXFJQ2hGZG1WdUlHbG1JR0Z1SUdWNFkyVndkR2x2YmlCcGN5QjBhSEp2ZDI0Z2QyaHBiR1VnYVc1MmIydHBibWNnZEdobElIZHlZWEJ3WldRZ2JXVjBhRzlrS1M0Z1YyaHZaWFpsY2x4dUlDb2dhVzV6ZEdGdWRHbGhkR1Z6SUdFZ2RISmhibk5oWTNScGIyNGdZMkZ1SUhCeWIzWnBaR1VnWlc1bWIzSmpaWEp6SUc5bUlIUm9aU0JwYm5aaGNtbGhiblJ6SUdGMFhHNGdLaUJqY21WaGRHbHZiaUIwYVcxbExpQlVhR1VnWUZSeVlXNXpZV04wYVc5dVlDQmpiR0Z6Y3lCcGRITmxiR1lnZDJsc2JDQnpkWEJ3YkhrZ2IyNWxJR0ZrWkdsMGFXOXVZV3hjYmlBcUlHRjFkRzl0WVhScFl5QnBiblpoY21saGJuUWdabTl5SUhsdmRTQXRJSFJvWlNCcGJuWmhjbWxoYm5RZ2RHaGhkQ0JoYm5rZ2RISmhibk5oWTNScGIyNGdhVzV6ZEdGdVkyVmNiaUFxSUhOb2IzVnNaQ0J1YjNRZ1ltVWdjblZ1SUhkb2FXeGxJR2wwSUdseklHRnNjbVZoWkhrZ1ltVnBibWNnY25WdUxpQlpiM1VnZDI5MWJHUWdkSGx3YVdOaGJHeDVJR055WldGMFpTQmhYRzRnS2lCemFXNW5iR1VnYVc1emRHRnVZMlVnYjJZZ1lTQmdWSEpoYm5OaFkzUnBiMjVnSUdadmNpQnlaWFZ6WlNCdGRXeDBhWEJzWlNCMGFXMWxjeXdnZEdoaGRDQndiM1JsYm5ScFlXeHNlVnh1SUNvZ2FYTWdkWE5sWkNCMGJ5QjNjbUZ3SUhObGRtVnlZV3dnWkdsbVptVnlaVzUwSUcxbGRHaHZaSE11SUZkeVlYQndaWEp6SUdGeVpTQmxlSFJ5WlcxbGJIa2djMmx0Y0d4bElDMWNiaUFxSUhSb1pYa2diMjVzZVNCeVpYRjFhWEpsSUdsdGNHeGxiV1Z1ZEdsdVp5QjBkMjhnYldWMGFHOWtjeTVjYmlBcVhHNGdLaUE4Y0hKbFBseHVJQ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIZHlZWEJ3WlhKeklDaHBibXBsWTNSbFpDQmhkQ0JqY21WaGRHbHZiaUIwYVcxbEtWeHVJQ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNzZ0lDQWdJQ0FnSUN0Y2JpQXFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I4SUNBZ0lDQWdJQ0I4WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdLeTB0TFMwdExTMHRMUzB0TFMwdExTMHRmQzB0TFMwdExTMHRmQzB0TFMwdExTMHRMUzB0TFMwdEsxeHVJQ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh3Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhZZ0lDQWdJQ0FnSUh3Z0lDQWdJQ0FnSUNBZ0lDQWdJSHhjYmlBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjhJQ0FnSUNBZ0t5MHRMUzB0TFMwdExTMHRMUzB0TFNzZ0lDQjhJQ0FnSUNBZ0lDQWdJQ0FnSUNCOFhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZkNBZ0lDc3RMWHdnSUNBZ2QzSmhjSEJsY2pFZ0lDQjhMUzB0ZkMwdExTMHJJQ0FnSUNBZ0lDQWdmRnh1SUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lId2dJQ0I4SUNBckxTMHRMUzB0TFMwdExTMHRMUzB0S3lBZ0lIWWdJQ0FnZkNBZ0lDQWdJQ0FnSUh4Y2JpQXFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I4SUNBZ2ZDQWdJQ0FnSUNBZ0lDQXJMUzB0TFMwdExTMHRMUzB0TFNzZ0lId2dJQ0FnSUNBZ0lDQjhYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZDQWdJSHdnSUNBZ0lDc3RMUzB0ZkNBZ0lIZHlZWEJ3WlhJeUlDQjhMUzB0TFMwdExTMHJJQ0FnZkZ4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHdnSUNCOElDQWdJQ0I4SUNBZ0lDc3RMUzB0TFMwdExTMHRMUzB0S3lBZ2ZDQWdJQ0FnZkNBZ0lIeGNiaUFxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOElDQWdmQ0FnSUNBZ2ZDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHdnSUNBZ0lId2dJQ0I4WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmQ0FnSUhZZ0lDQWdJSFlnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMklDQWdJQ0IySUNBZ2ZDQjNjbUZ3Y0dWeVhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZkNBckxTMHRLeUFyTFMwdEt5QWdJQ3N0TFMwdExTMHRMUzBySUNBZ0t5MHRMU3NnS3kwdExTc2dmQ0JwYm5aaGNtbGhiblJ6WEc0Z0tpQndaWEptYjNKdEtHRnVlVTFsZEdodlpDa2dmQ0I4SUNBZ2ZDQjhJQ0FnZkNBZ0lId2dJQ0FnSUNBZ0lDQjhJQ0FnZkNBZ0lId2dmQ0FnSUh3Z2ZDQnRZV2x1ZEdGcGJtVmtYRzRnS2lBckxTMHRMUzB0TFMwdExTMHRMUzB0TFMwK2ZDMThMUzB0ZkMxOExTMHRmQzB0UG54aGJubE5aWFJvYjJSOExTMHRmQzB0TFh3dGZDMHRMWHd0ZkMwdExTMHRMUzB0UGx4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHdnZkNBZ0lId2dmQ0FnSUh3Z0lDQjhJQ0FnSUNBZ0lDQWdmQ0FnSUh3Z0lDQjhJSHdnSUNCOElIeGNiaUFxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOElId2dJQ0I4SUh3Z0lDQjhJQ0FnZkNBZ0lDQWdJQ0FnSUh3Z0lDQjhJQ0FnZkNCOElDQWdmQ0I4WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmQ0I4SUNBZ2ZDQjhJQ0FnZkNBZ0lId2dJQ0FnSUNBZ0lDQjhJQ0FnZkNBZ0lId2dmQ0FnSUh3Z2ZGeHVJQ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh3Z0t5MHRMU3NnS3kwdExTc2dJQ0FyTFMwdExTMHRMUzB0S3lBZ0lDc3RMUzBySUNzdExTMHJJSHhjYmlBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjhJQ0JwYm1sMGFXRnNhWHBsSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamJHOXpaU0FnSUNCOFhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS3kwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRLMXh1SUNvZ1BDOXdjbVUrWEc0Z0tseHVJQ29nVlhObElHTmhjMlZ6T2x4dUlDb2dMU0JRY21WelpYSjJhVzVuSUhSb1pTQnBibkIxZENCelpXeGxZM1JwYjI0Z2NtRnVaMlZ6SUdKbFptOXlaUzloWm5SbGNpQnlaV052Ym1OcGJHbGhkR2x2Ymk1Y2JpQXFJQ0FnVW1WemRHOXlhVzVuSUhObGJHVmpkR2x2YmlCbGRtVnVJR2x1SUhSb1pTQmxkbVZ1ZENCdlppQmhiaUIxYm1WNGNHVmpkR1ZrSUdWeWNtOXlMbHh1SUNvZ0xTQkVaV0ZqZEdsMllYUnBibWNnWlhabGJuUnpJSGRvYVd4bElISmxZWEp5WVc1bmFXNW5JSFJvWlNCRVQwMHNJSEJ5WlhabGJuUnBibWNnWW14MWNuTXZabTlqZFhObGN5eGNiaUFxSUNBZ2QyaHBiR1VnWjNWaGNtRnVkR1ZsYVc1bklIUm9ZWFFnWVdaMFpYSjNZWEprY3l3Z2RHaGxJR1YyWlc1MElITjVjM1JsYlNCcGN5QnlaV0ZqZEdsMllYUmxaQzVjYmlBcUlDMGdSbXgxYzJocGJtY2dZU0J4ZFdWMVpTQnZaaUJqYjJ4c1pXTjBaV1FnUkU5TklHMTFkR0YwYVc5dWN5QjBieUIwYUdVZ2JXRnBiaUJWU1NCMGFISmxZV1FnWVdaMFpYSWdZVnh1SUNvZ0lDQnlaV052Ym1OcGJHbGhkR2x2YmlCMFlXdGxjeUJ3YkdGalpTQnBiaUJoSUhkdmNtdGxjaUIwYUhKbFlXUXVYRzRnS2lBdElFbHVkbTlyYVc1bklHRnVlU0JqYjJ4c1pXTjBaV1FnWUdOdmJYQnZibVZ1ZEVScFpGVndaR0YwWldBZ1kyRnNiR0poWTJ0eklHRm1kR1Z5SUhKbGJtUmxjbWx1WnlCdVpYZGNiaUFxSUNBZ1kyOXVkR1Z1ZEM1Y2JpQXFJQzBnS0VaMWRIVnlaU0IxYzJVZ1kyRnpaU2s2SUZkeVlYQndhVzVuSUhCaGNuUnBZM1ZzWVhJZ1pteDFjMmhsY3lCdlppQjBhR1VnWUZKbFlXTjBWMjl5YTJWeVlDQnhkV1YxWlZ4dUlDb2dJQ0IwYnlCd2NtVnpaWEoyWlNCMGFHVWdZSE5qY205c2JGUnZjR0FnS0dGdUlHRjFkRzl0WVhScFl5QnpZM0p2Ykd3Z1lYZGhjbVVnUkU5TktTNWNiaUFxSUMwZ0tFWjFkSFZ5WlNCMWMyVWdZMkZ6WlNrNklFeGhlVzkxZENCallXeGpkV3hoZEdsdmJuTWdZbVZtYjNKbElHRnVaQ0JoWm5SbGNpQkVUMDBnZFhCa1lYUmxjeTVjYmlBcVhHNGdLaUJVY21GdWMyRmpkR2x2Ym1Gc0lIQnNkV2RwYmlCQlVFazZYRzRnS2lBdElFRWdiVzlrZFd4bElIUm9ZWFFnYUdGeklHRnVJR0JwYm1sMGFXRnNhWHBsWUNCdFpYUm9iMlFnZEdoaGRDQnlaWFIxY201eklHRnVlU0J3Y21WamIyMXdkWFJoZEdsdmJpNWNiaUFxSUMwZ1lXNWtJR0VnWUdOc2IzTmxZQ0J0WlhSb2IyUWdkR2hoZENCaFkyTmxjSFJ6SUhSb1pTQndjbVZqYjIxd2RYUmhkR2x2Ymk0Z1lHTnNiM05sWUNCcGN5QnBiblp2YTJWa1hHNGdLaUFnSUhkb1pXNGdkR2hsSUhkeVlYQndaV1FnY0hKdlkyVnpjeUJwY3lCamIyMXdiR1YwWldRc0lHOXlJR2hoY3lCbVlXbHNaV1F1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRCY25KaGVUeFVjbUZ1YzJGamRHbHZibUZzVjNKaGNIQmxjajU5SUhSeVlXNXpZV04wYVc5dVYzSmhjSEJsY2lCWGNtRndjR1Z5SUcxdlpIVnNaWE5jYmlBcUlIUm9ZWFFnYVcxd2JHVnRaVzUwSUdCcGJtbDBhV0ZzYVhwbFlDQmhibVFnWUdOc2IzTmxZQzVjYmlBcUlFQnlaWFIxY200Z2UxUnlZVzV6WVdOMGFXOXVmU0JUYVc1bmJHVWdkSEpoYm5OaFkzUnBiMjRnWm05eUlISmxkWE5sSUdsdUlIUm9jbVZoWkM1Y2JpQXFYRzRnS2lCQVkyeGhjM01nVkhKaGJuTmhZM1JwYjI1Y2JpQXFMMXh1ZG1GeUlFMXBlR2x1SUQwZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nVTJWMGN5QjFjQ0IwYUdseklHbHVjM1JoYm1ObElITnZJSFJvWVhRZ2FYUWdhWE1nY0hKbGNHRnlaV1FnWm05eUlHTnZiR3hsWTNScGJtY2diV1YwY21samN5NGdSRzlsYzF4dUlDQWdLaUJ6YnlCemRXTm9JSFJvWVhRZ2RHaHBjeUJ6WlhSMWNDQnRaWFJvYjJRZ2JXRjVJR0psSUhWelpXUWdiMjRnWVc0Z2FXNXpkR0Z1WTJVZ2RHaGhkQ0JwY3lCaGJISmxZV1I1WEc0Z0lDQXFJR2x1YVhScFlXeHBlbVZrTENCcGJpQmhJSGRoZVNCMGFHRjBJR1J2WlhNZ2JtOTBJR052Ym5OMWJXVWdZV1JrYVhScGIyNWhiQ0J0WlcxdmNua2dkWEJ2YmlCeVpYVnpaUzVjYmlBZ0lDb2dWR2hoZENCallXNGdZbVVnZFhObFpuVnNJR2xtSUhsdmRTQmtaV05wWkdVZ2RHOGdiV0ZyWlNCNWIzVnlJSE4xWW1Oc1lYTnpJRzltSUhSb2FYTWdiV2w0YVc0Z1lWeHVJQ0FnS2lCY0lsQnZiMnhsWkVOc1lYTnpYQ0l1WEc0Z0lDQXFMMXh1SUNCeVpXbHVhWFJwWVd4cGVtVlVjbUZ1YzJGamRHbHZiam9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnZEdocGN5NTBjbUZ1YzJGamRHbHZibGR5WVhCd1pYSnpJRDBnZEdocGN5NW5aWFJVY21GdWMyRmpkR2x2YmxkeVlYQndaWEp6S0NrN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG5keVlYQndaWEpKYm1sMFJHRjBZU2tnZTF4dUlDQWdJQ0FnZEdocGN5NTNjbUZ3Y0dWeVNXNXBkRVJoZEdFZ1BTQmJYVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTUzY21Gd2NHVnlTVzVwZEVSaGRHRXViR1Z1WjNSb0lEMGdNRHRjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTVmYVhOSmJsUnlZVzV6WVdOMGFXOXVJRDBnWm1Gc2MyVTdYRzRnSUgwc1hHNWNiaUFnWDJselNXNVVjbUZ1YzJGamRHbHZiam9nWm1Gc2MyVXNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmhZbk4wY21GamRGeHVJQ0FnS2lCQWNtVjBkWEp1SUh0QmNuSmhlVHhVY21GdWMyRmpkR2x2YmxkeVlYQndaWEkrZlNCQmNuSmhlU0J2WmlCMGNtRnVjMkZqZEdsdmJpQjNjbUZ3Y0dWeWN5NWNiaUFnSUNvdlhHNGdJR2RsZEZSeVlXNXpZV04wYVc5dVYzSmhjSEJsY25NNklHNTFiR3dzWEc1Y2JpQWdhWE5KYmxSeVlXNXpZV04wYVc5dU9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z0lTRjBhR2x6TGw5cGMwbHVWSEpoYm5OaFkzUnBiMjQ3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFVjRaV04xZEdWeklIUm9aU0JtZFc1amRHbHZiaUIzYVhSb2FXNGdZU0J6WVdabGRIa2dkMmx1Wkc5M0xpQlZjMlVnZEdocGN5Qm1iM0lnZEdobElIUnZjQ0JzWlhabGJGeHVJQ0FnS2lCdFpYUm9iMlJ6SUhSb1lYUWdjbVZ6ZFd4MElHbHVJR3hoY21kbElHRnRiM1Z1ZEhNZ2IyWWdZMjl0Y0hWMFlYUnBiMjR2YlhWMFlYUnBiMjV6SUhSb1lYUWdkMjkxYkdSY2JpQWdJQ29nYm1WbFpDQjBieUJpWlNCellXWmxkSGtnWTJobFkydGxaQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2Ym4wZ2JXVjBhRzlrSUUxbGJXSmxjaUJ2WmlCelkyOXdaU0IwYnlCallXeHNMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwOWlhbVZqZEgwZ2MyTnZjR1VnVTJOdmNHVWdkRzhnYVc1MmIydGxJR1p5YjIwdVhHNGdJQ0FxSUVCd1lYSmhiU0I3VDJKcVpXTjBQejE5SUdGeVozTXVMaTRnUVhKbmRXMWxiblJ6SUhSdklIQmhjM01nZEc4Z2RHaGxJRzFsZEdodlpDQW9iM0IwYVc5dVlXd3BMbHh1SUNBZ0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFaGxiSEJ6SUhCeVpYWmxiblFnYm1WbFpDQjBieUJpYVc1a0lHbHVJRzFoYm5rZ1kyRnpaWE11WEc0Z0lDQXFJRUJ5WlhSMWNtNGdVbVYwZFhKdUlIWmhiSFZsSUdaeWIyMGdZRzFsZEdodlpHQXVYRzRnSUNBcUwxeHVJQ0J3WlhKbWIzSnRPaUJtZFc1amRHbHZiaWh0WlhSb2IyUXNJSE5qYjNCbExDQmhMQ0JpTENCakxDQmtMQ0JsTENCbUtTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNGMGFHbHpMbWx6U1c1VWNtRnVjMkZqZEdsdmJpZ3BMRnh1SUNBZ0lDQWdKMVJ5WVc1ellXTjBhVzl1TG5CbGNtWnZjbTBvTGk0dUtUb2dRMkZ1Ym05MElHbHVhWFJwWVd4cGVtVWdZU0IwY21GdWMyRmpkR2x2YmlCM2FHVnVJSFJvWlhKbElDY2dLMXh1SUNBZ0lDQWdKMmx6SUdGc2NtVmhaSGtnWVc0Z2IzVjBjM1JoYm1ScGJtY2dkSEpoYm5OaFkzUnBiMjR1SjF4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lYUm9hWE11YVhOSmJsUnlZVzV6WVdOMGFXOXVLQ2twS1R0Y2JpQWdJQ0IyWVhJZ1pYSnliM0pVYUhKdmQyNDdYRzRnSUNBZ2RtRnlJSEpsZER0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVmYVhOSmJsUnlZVzV6WVdOMGFXOXVJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDOHZJRU5oZEdOb2FXNW5JR1Z5Y205eWN5QnRZV3RsY3lCa1pXSjFaMmRwYm1jZ2JXOXlaU0JrYVdabWFXTjFiSFFzSUhOdklIZGxJSE4wWVhKMElIZHBkR2hjYmlBZ0lDQWdJQzh2SUdWeWNtOXlWR2h5YjNkdUlITmxkQ0IwYnlCMGNuVmxJR0psWm05eVpTQnpaWFIwYVc1bklHbDBJSFJ2SUdaaGJITmxJR0ZtZEdWeUlHTmhiR3hwYm1kY2JpQWdJQ0FnSUM4dklHTnNiM05sSUMwdElHbG1JR2wwSjNNZ2MzUnBiR3dnYzJWMElIUnZJSFJ5ZFdVZ2FXNGdkR2hsSUdacGJtRnNiSGtnWW14dlkyc3NJR2wwSUcxbFlXNXpYRzRnSUNBZ0lDQXZMeUJ2Ym1VZ2IyWWdkR2hsYzJVZ1kyRnNiSE1nZEdoeVpYY3VYRzRnSUNBZ0lDQmxjbkp2Y2xSb2NtOTNiaUE5SUhSeWRXVTdYRzRnSUNBZ0lDQjBhR2x6TG1sdWFYUnBZV3hwZW1WQmJHd29NQ2s3WEc0Z0lDQWdJQ0J5WlhRZ1BTQnRaWFJvYjJRdVkyRnNiQ2h6WTI5d1pTd2dZU3dnWWl3Z1l5d2daQ3dnWlN3Z1ppazdYRzRnSUNBZ0lDQmxjbkp2Y2xSb2NtOTNiaUE5SUdaaGJITmxPMXh1SUNBZ0lIMGdabWx1WVd4c2VTQjdYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCcFppQW9aWEp5YjNKVWFISnZkMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJKWmlCZ2JXVjBhRzlrWUNCMGFISnZkM01zSUhCeVpXWmxjaUIwYnlCemFHOTNJSFJvWVhRZ2MzUmhZMnNnZEhKaFkyVWdiM1psY2lCaGJua2dkR2h5YjNkdVhHNGdJQ0FnSUNBZ0lDQWdMeThnWW5rZ2FXNTJiMnRwYm1jZ1lHTnNiM05sUVd4c1lDNWNiaUFnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpiRzl6WlVGc2JDZ3dLVHRjYmlBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vSUNobGNuSXBJSHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVTJsdVkyVWdZRzFsZEdodlpHQWdaR2xrYmlkMElIUm9jbTkzTENCM1pTQmtiMjRuZENCM1lXNTBJSFJ2SUhOcGJHVnVZMlVnZEdobElHVjRZMlZ3ZEdsdmJseHVJQ0FnSUNBZ0lDQWdJQzh2SUdobGNtVXVYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NWpiRzl6WlVGc2JDZ3dLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNCbWFXNWhiR3g1SUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVmYVhOSmJsUnlZVzV6WVdOMGFXOXVJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDBzWEc1Y2JpQWdhVzVwZEdsaGJHbDZaVUZzYkRvZ1puVnVZM1JwYjI0b2MzUmhjblJKYm1SbGVDa2dlMXh1SUNBZ0lIWmhjaUIwY21GdWMyRmpkR2x2YmxkeVlYQndaWEp6SUQwZ2RHaHBjeTUwY21GdWMyRmpkR2x2YmxkeVlYQndaWEp6TzF4dUlDQWdJR1p2Y2lBb2RtRnlJR2tnUFNCemRHRnlkRWx1WkdWNE95QnBJRHdnZEhKaGJuTmhZM1JwYjI1WGNtRndjR1Z5Y3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdkbUZ5SUhkeVlYQndaWElnUFNCMGNtRnVjMkZqZEdsdmJsZHlZWEJ3WlhKelcybGRPMXh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0x5OGdRMkYwWTJocGJtY2daWEp5YjNKeklHMWhhMlZ6SUdSbFluVm5aMmx1WnlCdGIzSmxJR1JwWm1acFkzVnNkQ3dnYzI4Z2QyVWdjM1JoY25RZ2QybDBhQ0IwYUdWY2JpQWdJQ0FnSUNBZ0x5OGdUMEpUUlZKV1JVUmZSVkpTVDFJZ2MzUmhkR1VnWW1WbWIzSmxJRzkyWlhKM2NtbDBhVzVuSUdsMElIZHBkR2dnZEdobElISmxZV3dnY21WMGRYSnVJSFpoYkhWbFhHNGdJQ0FnSUNBZ0lDOHZJRzltSUdsdWFYUnBZV3hwZW1VZ0xTMGdhV1lnYVhRbmN5QnpkR2xzYkNCelpYUWdkRzhnVDBKVFJWSldSVVJmUlZKU1QxSWdhVzRnZEdobElHWnBibUZzYkhsY2JpQWdJQ0FnSUNBZ0x5OGdZbXh2WTJzc0lHbDBJRzFsWVc1eklIZHlZWEJ3WlhJdWFXNXBkR2xoYkdsNlpTQjBhSEpsZHk1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzY21Gd2NHVnlTVzVwZEVSaGRHRmJhVjBnUFNCVWNtRnVjMkZqZEdsdmJpNVBRbE5GVWxaRlJGOUZVbEpQVWp0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzY21Gd2NHVnlTVzVwZEVSaGRHRmJhVjBnUFNCM2NtRndjR1Z5TG1sdWFYUnBZV3hwZW1VZ1AxeHVJQ0FnSUNBZ0lDQWdJSGR5WVhCd1pYSXVhVzVwZEdsaGJHbDZaUzVqWVd4c0tIUm9hWE1wSURwY2JpQWdJQ0FnSUNBZ0lDQnVkV3hzTzF4dUlDQWdJQ0FnZlNCbWFXNWhiR3g1SUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWQzSmhjSEJsY2tsdWFYUkVZWFJoVzJsZElEMDlQU0JVY21GdWMyRmpkR2x2Ymk1UFFsTkZVbFpGUkY5RlVsSlBVaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDOHZJRlJvWlNCcGJtbDBhV0ZzYVhwbGNpQm1iM0lnZDNKaGNIQmxjaUJwSUhSb2NtVjNJR0Z1SUdWeWNtOXlPeUJwYm1sMGFXRnNhWHBsSUhSb1pWeHVJQ0FnSUNBZ0lDQWdJQzh2SUhKbGJXRnBibWx1WnlCM2NtRndjR1Z5Y3lCaWRYUWdjMmxzWlc1alpTQmhibmtnWlhoalpYQjBhVzl1Y3lCbWNtOXRJSFJvWlcwZ2RHOGdaVzV6ZFhKbFhHNGdJQ0FnSUNBZ0lDQWdMeThnZEdoaGRDQjBhR1VnWm1seWMzUWdaWEp5YjNJZ2FYTWdkR2hsSUc5dVpTQjBieUJpZFdKaWJHVWdkWEF1WEc0Z0lDQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YVc1cGRHbGhiR2w2WlVGc2JDaHBJQ3NnTVNrN1hHNGdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aWEp5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCSmJuWnZhMlZ6SUdWaFkyZ2diMllnWUhSb2FYTXVkSEpoYm5OaFkzUnBiMjVYY21Gd2NHVnljeTVqYkc5elpWdHBYV0FnWm5WdVkzUnBiMjV6TENCd1lYTnphVzVuSUdsdWRHOWNiaUFnSUNvZ2RHaGxiU0IwYUdVZ2NtVnpjR1ZqZEdsMlpTQnlaWFIxY200Z2RtRnNkV1Z6SUc5bUlHQjBhR2x6TG5SeVlXNXpZV04wYVc5dVYzSmhjSEJsY25NdWFXNXBkRnRwWFdCY2JpQWdJQ29nS0dCamJHOXpaV0J5Y3lCMGFHRjBJR052Y25KbGMzQnZibVFnZEc4Z2FXNXBkR2xoYkdsNlpYSnpJSFJvWVhRZ1ptRnBiR1ZrSUhkcGJHd2dibTkwSUdKbFhHNGdJQ0FxSUdsdWRtOXJaV1FwTGx4dUlDQWdLaTljYmlBZ1kyeHZjMlZCYkd3NklHWjFibU4wYVc5dUtITjBZWEowU1c1a1pYZ3BJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2RHaHBjeTVwYzBsdVZISmhibk5oWTNScGIyNG9LU3hjYmlBZ0lDQWdJQ2RVY21GdWMyRmpkR2x2Ymk1amJHOXpaVUZzYkNncE9pQkRZVzV1YjNRZ1kyeHZjMlVnZEhKaGJuTmhZM1JwYjI0Z2QyaGxiaUJ1YjI1bElHRnlaU0J2Y0dWdUxpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLSFJvYVhNdWFYTkpibFJ5WVc1ellXTjBhVzl1S0NrcEtUdGNiaUFnSUNCMllYSWdkSEpoYm5OaFkzUnBiMjVYY21Gd2NHVnljeUE5SUhSb2FYTXVkSEpoYm5OaFkzUnBiMjVYY21Gd2NHVnljenRjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnYzNSaGNuUkpibVJsZURzZ2FTQThJSFJ5WVc1ellXTjBhVzl1VjNKaGNIQmxjbk11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lIWmhjaUIzY21Gd2NHVnlJRDBnZEhKaGJuTmhZM1JwYjI1WGNtRndjR1Z5YzF0cFhUdGNiaUFnSUNBZ0lIWmhjaUJwYm1sMFJHRjBZU0E5SUhSb2FYTXVkM0poY0hCbGNrbHVhWFJFWVhSaFcybGRPMXh1SUNBZ0lDQWdkbUZ5SUdWeWNtOXlWR2h5YjNkdU8xeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1EyRjBZMmhwYm1jZ1pYSnliM0p6SUcxaGEyVnpJR1JsWW5WbloybHVaeUJ0YjNKbElHUnBabVpwWTNWc2RDd2djMjhnZDJVZ2MzUmhjblFnZDJsMGFGeHVJQ0FnSUNBZ0lDQXZMeUJsY25KdmNsUm9jbTkzYmlCelpYUWdkRzhnZEhKMVpTQmlaV1p2Y21VZ2MyVjBkR2x1WnlCcGRDQjBieUJtWVd4elpTQmhablJsY2lCallXeHNhVzVuWEc0Z0lDQWdJQ0FnSUM4dklHTnNiM05sSUMwdElHbG1JR2wwSjNNZ2MzUnBiR3dnYzJWMElIUnZJSFJ5ZFdVZ2FXNGdkR2hsSUdacGJtRnNiSGtnWW14dlkyc3NJR2wwSUcxbFlXNXpYRzRnSUNBZ0lDQWdJQzh2SUhkeVlYQndaWEl1WTJ4dmMyVWdkR2h5WlhjdVhHNGdJQ0FnSUNBZ0lHVnljbTl5VkdoeWIzZHVJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdhV1lnS0dsdWFYUkVZWFJoSUNFOVBTQlVjbUZ1YzJGamRHbHZiaTVQUWxORlVsWkZSRjlGVWxKUFVpQW1KaUIzY21Gd2NHVnlMbU5zYjNObEtTQjdYRzRnSUNBZ0lDQWdJQ0FnZDNKaGNIQmxjaTVqYkc5elpTNWpZV3hzS0hSb2FYTXNJR2x1YVhSRVlYUmhLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCbGNuSnZjbFJvY205M2JpQTlJR1poYkhObE8xeHVJQ0FnSUNBZ2ZTQm1hVzVoYkd4NUlIdGNiaUFnSUNBZ0lDQWdhV1lnS0dWeWNtOXlWR2h5YjNkdUtTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1ZHaGxJR05zYjNObGNpQm1iM0lnZDNKaGNIQmxjaUJwSUhSb2NtVjNJR0Z1SUdWeWNtOXlPeUJqYkc5elpTQjBhR1VnY21WdFlXbHVhVzVuWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkM0poY0hCbGNuTWdZblYwSUhOcGJHVnVZMlVnWVc1NUlHVjRZMlZ3ZEdsdmJuTWdabkp2YlNCMGFHVnRJSFJ2SUdWdWMzVnlaU0IwYUdGMElIUm9aVnh1SUNBZ0lDQWdJQ0FnSUM4dklHWnBjbk4wSUdWeWNtOXlJR2x6SUhSb1pTQnZibVVnZEc4Z1luVmlZbXhsSUhWd0xseHVJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtTnNiM05sUVd4c0tHa2dLeUF4S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhSb2FYTXVkM0poY0hCbGNrbHVhWFJFWVhSaExteGxibWQwYUNBOUlEQTdYRzRnSUgxY2JuMDdYRzVjYm5aaGNpQlVjbUZ1YzJGamRHbHZiaUE5SUh0Y2JseHVJQ0JOYVhocGJqb2dUV2w0YVc0c1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZSdmEyVnVJSFJ2SUd4dmIyc2dabTl5SUhSdklHUmxkR1Z5YldsdVpTQnBaaUJoYmlCbGNuSnZjaUJ2WTJOMWNtVmtMbHh1SUNBZ0tpOWNiaUFnVDBKVFJWSldSVVJmUlZKU1QxSTZJSHQ5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVkhKaGJuTmhZM1JwYjI0N1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFZpZXdwb3J0TWV0cmljc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFZpZXdwb3J0TWV0cmljcyA9IHtcblxuICBjdXJyZW50U2Nyb2xsTGVmdDogMCxcblxuICBjdXJyZW50U2Nyb2xsVG9wOiAwLFxuXG4gIHJlZnJlc2hTY3JvbGxWYWx1ZXM6IGZ1bmN0aW9uKHNjcm9sbFBvc2l0aW9uKSB7XG4gICAgVmlld3BvcnRNZXRyaWNzLmN1cnJlbnRTY3JvbGxMZWZ0ID0gc2Nyb2xsUG9zaXRpb24ueDtcbiAgICBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbFRvcCA9IHNjcm9sbFBvc2l0aW9uLnk7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBWaWV3cG9ydE1ldHJpY3M7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGFjY3VtdWxhdGVJbnRvXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqXG4gKiBBY2N1bXVsYXRlcyBpdGVtcyB0aGF0IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIGludG8gdGhlIGZpcnN0IG9uZS4gVGhpc1xuICogaXMgdXNlZCB0byBjb25zZXJ2ZSBtZW1vcnkgYnkgYXZvaWRpbmcgYXJyYXkgYWxsb2NhdGlvbnMsIGFuZCB0aHVzIHNhY3JpZmljZXNcbiAqIEFQSSBjbGVhbm5lc3MuIFNpbmNlIGBjdXJyZW50YCBjYW4gYmUgbnVsbCBiZWZvcmUgYmVpbmcgcGFzc2VkIGluIGFuZCBub3RcbiAqIG51bGwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgbWFrZSBzdXJlIHRvIGFzc2lnbiBpdCBiYWNrIHRvIGBjdXJyZW50YDpcbiAqXG4gKiBgYSA9IGFjY3VtdWxhdGVJbnRvKGEsIGIpO2BcbiAqXG4gKiBUaGlzIEFQSSBzaG91bGQgYmUgc3BhcmluZ2x5IHVzZWQuIFRyeSBgYWNjdW11bGF0ZWAgZm9yIHNvbWV0aGluZyBjbGVhbmVyLlxuICpcbiAqIEByZXR1cm4geyp8YXJyYXk8Kj59IEFuIGFjY3VtdWxhdGlvbiBvZiBpdGVtcy5cbiAqL1xuXG5mdW5jdGlvbiBhY2N1bXVsYXRlSW50byhjdXJyZW50LCBuZXh0KSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgbmV4dCAhPSBudWxsLFxuICAgICdhY2N1bXVsYXRlSW50byguLi4pOiBBY2N1bXVsYXRlZCBpdGVtcyBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4nXG4gICkgOiBpbnZhcmlhbnQobmV4dCAhPSBudWxsKSk7XG4gIGlmIChjdXJyZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIC8vIEJvdGggYXJlIG5vdCBlbXB0eS4gV2FybmluZzogTmV2ZXIgY2FsbCB4LmNvbmNhdCh5KSB3aGVuIHlvdSBhcmUgbm90XG4gIC8vIGNlcnRhaW4gdGhhdCB4IGlzIGFuIEFycmF5ICh4IGNvdWxkIGJlIGEgc3RyaW5nIHdpdGggY29uY2F0IG1ldGhvZCkuXG4gIHZhciBjdXJyZW50SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoY3VycmVudCk7XG4gIHZhciBuZXh0SXNBcnJheSA9IEFycmF5LmlzQXJyYXkobmV4dCk7XG5cbiAgaWYgKGN1cnJlbnRJc0FycmF5ICYmIG5leHRJc0FycmF5KSB7XG4gICAgY3VycmVudC5wdXNoLmFwcGx5KGN1cnJlbnQsIG5leHQpO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgaWYgKGN1cnJlbnRJc0FycmF5KSB7XG4gICAgY3VycmVudC5wdXNoKG5leHQpO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgaWYgKG5leHRJc0FycmF5KSB7XG4gICAgLy8gQSBiaXQgdG9vIGRhbmdlcm91cyB0byBtdXRhdGUgYG5leHRgLlxuICAgIHJldHVybiBbY3VycmVudF0uY29uY2F0KG5leHQpO1xuICB9XG5cbiAgcmV0dXJuIFtjdXJyZW50LCBuZXh0XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhY2N1bXVsYXRlSW50bztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdllXTmpkVzExYkdGMFpVbHVkRzh1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TkMweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUdGalkzVnRkV3hoZEdWSmJuUnZYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNHZLaXBjYmlBcVhHNGdLaUJCWTJOMWJYVnNZWFJsY3lCcGRHVnRjeUIwYUdGMElHMTFjM1FnYm05MElHSmxJRzUxYkd3Z2IzSWdkVzVrWldacGJtVmtJR2x1ZEc4Z2RHaGxJR1pwY25OMElHOXVaUzRnVkdocGMxeHVJQ29nYVhNZ2RYTmxaQ0IwYnlCamIyNXpaWEoyWlNCdFpXMXZjbmtnWW5rZ1lYWnZhV1JwYm1jZ1lYSnlZWGtnWVd4c2IyTmhkR2x2Ym5Nc0lHRnVaQ0IwYUhWeklITmhZM0pwWm1salpYTmNiaUFxSUVGUVNTQmpiR1ZoYm01bGMzTXVJRk5wYm1ObElHQmpkWEp5Wlc1MFlDQmpZVzRnWW1VZ2JuVnNiQ0JpWldadmNtVWdZbVZwYm1jZ2NHRnpjMlZrSUdsdUlHRnVaQ0J1YjNSY2JpQXFJRzUxYkd3Z1lXWjBaWElnZEdocGN5Qm1kVzVqZEdsdmJpd2diV0ZyWlNCemRYSmxJSFJ2SUdGemMybG5iaUJwZENCaVlXTnJJSFJ2SUdCamRYSnlaVzUwWURwY2JpQXFYRzRnS2lCZ1lTQTlJR0ZqWTNWdGRXeGhkR1ZKYm5SdktHRXNJR0lwTzJCY2JpQXFYRzRnS2lCVWFHbHpJRUZRU1NCemFHOTFiR1FnWW1VZ2MzQmhjbWx1WjJ4NUlIVnpaV1F1SUZSeWVTQmdZV05qZFcxMWJHRjBaV0FnWm05eUlITnZiV1YwYUdsdVp5QmpiR1ZoYm1WeUxseHVJQ3BjYmlBcUlFQnlaWFIxY200Z2V5cDhZWEp5WVhrOEtqNTlJRUZ1SUdGalkzVnRkV3hoZEdsdmJpQnZaaUJwZEdWdGN5NWNiaUFxTDF4dVhHNW1kVzVqZEdsdmJpQmhZMk4xYlhWc1lYUmxTVzUwYnloamRYSnlaVzUwTENCdVpYaDBLU0I3WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnYm1WNGRDQWhQU0J1ZFd4c0xGeHVJQ0FnSUNkaFkyTjFiWFZzWVhSbFNXNTBieWd1TGk0cE9pQkJZMk4xYlhWc1lYUmxaQ0JwZEdWdGN5QnRkWE4wSUc1dmRDQmlaU0J1ZFd4c0lHOXlJSFZ1WkdWbWFXNWxaQzRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvYm1WNGRDQWhQU0J1ZFd4c0tTazdYRzRnSUdsbUlDaGpkWEp5Wlc1MElEMDlJRzUxYkd3cElIdGNiaUFnSUNCeVpYUjFjbTRnYm1WNGREdGNiaUFnZlZ4dVhHNGdJQzh2SUVKdmRHZ2dZWEpsSUc1dmRDQmxiWEIwZVM0Z1YyRnlibWx1WnpvZ1RtVjJaWElnWTJGc2JDQjRMbU52Ym1OaGRDaDVLU0IzYUdWdUlIbHZkU0JoY21VZ2JtOTBYRzRnSUM4dklHTmxjblJoYVc0Z2RHaGhkQ0I0SUdseklHRnVJRUZ5Y21GNUlDaDRJR052ZFd4a0lHSmxJR0VnYzNSeWFXNW5JSGRwZEdnZ1kyOXVZMkYwSUcxbGRHaHZaQ2t1WEc0Z0lIWmhjaUJqZFhKeVpXNTBTWE5CY25KaGVTQTlJRUZ5Y21GNUxtbHpRWEp5WVhrb1kzVnljbVZ1ZENrN1hHNGdJSFpoY2lCdVpYaDBTWE5CY25KaGVTQTlJRUZ5Y21GNUxtbHpRWEp5WVhrb2JtVjRkQ2s3WEc1Y2JpQWdhV1lnS0dOMWNuSmxiblJKYzBGeWNtRjVJQ1ltSUc1bGVIUkpjMEZ5Y21GNUtTQjdYRzRnSUNBZ1kzVnljbVZ1ZEM1d2RYTm9MbUZ3Y0d4NUtHTjFjbkpsYm5Rc0lHNWxlSFFwTzF4dUlDQWdJSEpsZEhWeWJpQmpkWEp5Wlc1ME8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0dOMWNuSmxiblJKYzBGeWNtRjVLU0I3WEc0Z0lDQWdZM1Z5Y21WdWRDNXdkWE5vS0c1bGVIUXBPMXh1SUNBZ0lISmxkSFZ5YmlCamRYSnlaVzUwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLRzVsZUhSSmMwRnljbUY1S1NCN1hHNGdJQ0FnTHk4Z1FTQmlhWFFnZEc5dklHUmhibWRsY205MWN5QjBieUJ0ZFhSaGRHVWdZRzVsZUhSZ0xseHVJQ0FnSUhKbGRIVnliaUJiWTNWeWNtVnVkRjB1WTI5dVkyRjBLRzVsZUhRcE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlGdGpkWEp5Wlc1MExDQnVaWGgwWFR0Y2JuMWNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JoWTJOMWJYVnNZWFJsU1c1MGJ6dGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBhZGxlcjMyXG4gKi9cblxuLyoganNsaW50IGJpdHdpc2U6dHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBNT0QgPSA2NTUyMTtcblxuLy8gVGhpcyBpcyBhIGNsZWFuLXJvb20gaW1wbGVtZW50YXRpb24gb2YgYWRsZXIzMiBkZXNpZ25lZCBmb3IgZGV0ZWN0aW5nXG4vLyBpZiBtYXJrdXAgaXMgbm90IHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlLiBJdCBkb2VzIG5vdCBuZWVkIHRvIGJlXG4vLyBjcnlwdG9ncmFwaGljYWxseSBzdHJvbmcsIG9ubHkgcmVhc29uYWJseSBnb29kIGF0IGRldGVjdGluZyBpZiBtYXJrdXBcbi8vIGdlbmVyYXRlZCBvbiB0aGUgc2VydmVyIGlzIGRpZmZlcmVudCB0aGFuIHRoYXQgb24gdGhlIGNsaWVudC5cbmZ1bmN0aW9uIGFkbGVyMzIoZGF0YSkge1xuICB2YXIgYSA9IDE7XG4gIHZhciBiID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgYSA9IChhICsgZGF0YS5jaGFyQ29kZUF0KGkpKSAlIE1PRDtcbiAgICBiID0gKGIgKyBhKSAlIE1PRDtcbiAgfVxuICByZXR1cm4gYSB8IChiIDw8IDE2KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhZGxlcjMyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGNhbWVsaXplXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBfaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7XG5cbi8qKlxuICogQ2FtZWxjYXNlcyBhIGh5cGhlbmF0ZWQgc3RyaW5nLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gY2FtZWxpemUoJ2JhY2tncm91bmQtY29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNhbWVsaXplKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoX2h5cGhlblBhdHRlcm4sIGZ1bmN0aW9uKF8sIGNoYXJhY3Rlcikge1xuICAgIHJldHVybiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FtZWxpemU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgY2FtZWxpemVTdHlsZU5hbWVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjYW1lbGl6ZSA9IHJlcXVpcmUoXCIuL2NhbWVsaXplXCIpO1xuXG52YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcblxuLyoqXG4gKiBDYW1lbGNhc2VzIGEgaHlwaGVuYXRlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGNhbWVsaXplU3R5bGVOYW1lKCdiYWNrZ3JvdW5kLWNvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmRDb2xvclwiXG4gKiAgID4gY2FtZWxpemVTdHlsZU5hbWUoJy1tb3otdHJhbnNpdGlvbicpXG4gKiAgIDwgXCJNb3pUcmFuc2l0aW9uXCJcbiAqICAgPiBjYW1lbGl6ZVN0eWxlTmFtZSgnLW1zLXRyYW5zaXRpb24nKVxuICogICA8IFwibXNUcmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBBbmRpIFNtaXRoIHN1Z2dlc3RzXG4gKiAoaHR0cDovL3d3dy5hbmRpc21pdGguY29tL2Jsb2cvMjAxMi8wMi9tb2Rlcm5penItcHJlZml4ZWQvKSwgYW4gYC1tc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGBtc2AuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjYW1lbGl6ZVN0eWxlTmFtZShzdHJpbmcpIHtcbiAgcmV0dXJuIGNhbWVsaXplKHN0cmluZy5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYW1lbGl6ZVN0eWxlTmFtZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBjb250YWluc05vZGVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIGlzVGV4dE5vZGUgPSByZXF1aXJlKFwiLi9pc1RleHROb2RlXCIpO1xuXG4vKmpzbGludCBiaXR3aXNlOnRydWUgKi9cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBET00gbm9kZSBjb250YWlucyBvciBpcyBhbm90aGVyIERPTSBub2RlLlxuICpcbiAqIEBwYXJhbSB7P0RPTU5vZGV9IG91dGVyTm9kZSBPdXRlciBET00gbm9kZS5cbiAqIEBwYXJhbSB7P0RPTU5vZGV9IGlubmVyTm9kZSBJbm5lciBET00gbm9kZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG91dGVyTm9kZWAgY29udGFpbnMgb3IgaXMgYGlubmVyTm9kZWAuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICBpZiAoIW91dGVyTm9kZSB8fCAhaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShvdXRlck5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUoaW5uZXJOb2RlKSkge1xuICAgIHJldHVybiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUucGFyZW50Tm9kZSk7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlLmNvbnRhaW5zKSB7XG4gICAgcmV0dXJuIG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgIHJldHVybiAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb250YWluc05vZGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgY3JlYXRlQXJyYXlGcm9tTWl4ZWRcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIHRvQXJyYXkgPSByZXF1aXJlKFwiLi90b0FycmF5XCIpO1xuXG4vKipcbiAqIFBlcmZvcm0gYSBoZXVyaXN0aWMgdGVzdCB0byBkZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIFwiYXJyYXktbGlrZVwiLlxuICpcbiAqICAgQSBtb25rIGFza2VkIEpvc2h1LCBhIFplbiBtYXN0ZXIsIFwiSGFzIGEgZG9nIEJ1ZGRoYSBuYXR1cmU/XCJcbiAqICAgSm9zaHUgcmVwbGllZDogXCJNdS5cIlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBpdHMgYXJndW1lbnQgaGFzIFwiYXJyYXkgbmF0dXJlXCI6IGl0IHJldHVybnNcbiAqIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFjdHVhbCBhcnJheSwgYW4gYGFyZ3VtZW50cycgb2JqZWN0LCBvciBhblxuICogSFRNTENvbGxlY3Rpb24gKGUuZy4gbm9kZS5jaGlsZE5vZGVzIG9yIG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoKSkuXG4gKlxuICogSXQgd2lsbCByZXR1cm4gZmFsc2UgZm9yIG90aGVyIGFycmF5LWxpa2Ugb2JqZWN0cyBsaWtlIEZpbGVsaXN0LlxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNBcnJheU5hdHVyZShvYmopIHtcbiAgcmV0dXJuIChcbiAgICAvLyBub3QgbnVsbC9mYWxzZVxuICAgICEhb2JqICYmXG4gICAgLy8gYXJyYXlzIGFyZSBvYmplY3RzLCBOb2RlTGlzdHMgYXJlIGZ1bmN0aW9ucyBpbiBTYWZhcmlcbiAgICAodHlwZW9mIG9iaiA9PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicpICYmXG4gICAgLy8gcXVhY2tzIGxpa2UgYW4gYXJyYXlcbiAgICAoJ2xlbmd0aCcgaW4gb2JqKSAmJlxuICAgIC8vIG5vdCB3aW5kb3dcbiAgICAhKCdzZXRJbnRlcnZhbCcgaW4gb2JqKSAmJlxuICAgIC8vIG5vIERPTSBub2RlIHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGFycmF5LWxpa2VcbiAgICAvLyBhICdzZWxlY3QnIGVsZW1lbnQgaGFzICdsZW5ndGgnIGFuZCAnaXRlbScgcHJvcGVydGllcyBvbiBJRThcbiAgICAodHlwZW9mIG9iai5ub2RlVHlwZSAhPSAnbnVtYmVyJykgJiZcbiAgICAoXG4gICAgICAvLyBhIHJlYWwgYXJyYXlcbiAgICAgICgvLyBIVE1MQ29sbGVjdGlvbi9Ob2RlTGlzdFxuICAgICAgKEFycmF5LmlzQXJyYXkob2JqKSB8fFxuICAgICAgLy8gYXJndW1lbnRzXG4gICAgICAoJ2NhbGxlZScgaW4gb2JqKSB8fCAnaXRlbScgaW4gb2JqKSlcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5IGJ5IHdyYXBwaW5nIGl0IGluIGFuIGFycmF5IGlmIGl0IGlzIG5vdC5cbiAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoZSBhcmd1bWVudCBpZiBpdCBpcyBhbHJlYWR5IGFuIGFycmF5LlxuICpcbiAqIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5OlxuICpcbiAqICAgdmFyIGNyZWF0ZUFycmF5RnJvbU1peGVkID0gcmVxdWlyZSgnY3JlYXRlQXJyYXlGcm9tTWl4ZWQnKTtcbiAqXG4gKiAgIGZ1bmN0aW9uIHRha2VzT25lT3JNb3JlVGhpbmdzKHRoaW5ncykge1xuICogICAgIHRoaW5ncyA9IGNyZWF0ZUFycmF5RnJvbU1peGVkKHRoaW5ncyk7XG4gKiAgICAgLi4uXG4gKiAgIH1cbiAqXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gdHJlYXQgYHRoaW5ncycgYXMgYW4gYXJyYXksIGJ1dCBhY2NlcHQgc2NhbGFycyBpbiB0aGUgQVBJLlxuICpcbiAqIElmIHlvdSBuZWVkIHRvIGNvbnZlcnQgYW4gYXJyYXktbGlrZSBvYmplY3QsIGxpa2UgYGFyZ3VtZW50c2AsIGludG8gYW4gYXJyYXlcbiAqIHVzZSB0b0FycmF5IGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHsqfSBvYmpcbiAqIEByZXR1cm4ge2FycmF5fVxuICovXG5mdW5jdGlvbiBjcmVhdGVBcnJheUZyb21NaXhlZChvYmopIHtcbiAgaWYgKCFoYXNBcnJheU5hdHVyZShvYmopKSB7XG4gICAgcmV0dXJuIFtvYmpdO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmouc2xpY2UoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdG9BcnJheShvYmopO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXJyYXlGcm9tTWl4ZWQ7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gRGVmZWF0IGNpcmN1bGFyIHJlZmVyZW5jZXMgYnkgcmVxdWlyaW5nIHRoaXMgZGlyZWN0bHkuXG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbXBvbmVudCB0aGF0IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gdW5tb3VudGVkLlxuICpcbiAqIENvbXBvbmVudHMgbGlrZSA8aHRtbD4gPGhlYWQ+IGFuZCA8Ym9keT4gY2FuJ3QgYmUgcmVtb3ZlZCBvciBhZGRlZFxuICogZWFzaWx5IGluIGEgY3Jvc3MtYnJvd3NlciB3YXksIGhvd2V2ZXIgaXQncyB2YWx1YWJsZSB0byBiZSBhYmxlIHRvXG4gKiB0YWtlIGFkdmFudGFnZSBvZiBSZWFjdCdzIHJlY29uY2lsaWF0aW9uIGZvciBzdHlsaW5nIGFuZCA8dGl0bGU+XG4gKiBtYW5hZ2VtZW50LiBTbyB3ZSBqdXN0IGRvY3VtZW50IGl0IGFuZCB0aHJvdyBpbiBkYW5nZXJvdXMgY2FzZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgdGFnIHRvIHdyYXBcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBjb252ZW5pZW5jZSBjb25zdHJ1Y3RvciBvZiBuZXcgY29tcG9uZW50XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50KHRhZykge1xuICB2YXIgZWxlbWVudEZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSh0YWcpO1xuXG4gIHZhciBGdWxsUGFnZUNvbXBvbmVudCA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICAgIHRhZ05hbWU6IHRhZy50b1VwcGVyQ2FzZSgpLFxuICAgIGRpc3BsYXlOYW1lOiAnUmVhY3RGdWxsUGFnZUNvbXBvbmVudCcgKyB0YWcsXG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJyVzIHRyaWVkIHRvIHVubW91bnQuIEJlY2F1c2Ugb2YgY3Jvc3MtYnJvd3NlciBxdWlya3MgaXQgaXMgJyArXG4gICAgICAgICdpbXBvc3NpYmxlIHRvIHVubW91bnQgc29tZSB0b3AtbGV2ZWwgY29tcG9uZW50cyAoZWcgPGh0bWw+LCA8aGVhZD4sICcgK1xuICAgICAgICAnYW5kIDxib2R5PikgcmVsaWFibHkgYW5kIGVmZmljaWVudGx5LiBUbyBmaXggdGhpcywgaGF2ZSBhIHNpbmdsZSAnICtcbiAgICAgICAgJ3RvcC1sZXZlbCBjb21wb25lbnQgdGhhdCBuZXZlciB1bm1vdW50cyByZW5kZXIgdGhlc2UgZWxlbWVudHMuJyxcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZVxuICAgICAgKSA6IGludmFyaWFudChmYWxzZSkpO1xuICAgIH0sXG5cbiAgICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRGYWN0b3J5KHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIEZ1bGxQYWdlQ29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2WTNKbFlYUmxSblZzYkZCaFoyVkRiMjF3YjI1bGJuUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQmpjbVZoZEdWR2RXeHNVR0ZuWlVOdmJYQnZibVZ1ZEZ4dUlDb2dRSFI1Y0dWamFHVmphM05jYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiaTh2SUVSbFptVmhkQ0JqYVhKamRXeGhjaUJ5WldabGNtVnVZMlZ6SUdKNUlISmxjWFZwY21sdVp5QjBhR2x6SUdScGNtVmpkR3g1TGx4dWRtRnlJRkpsWVdOMFEyeGhjM01nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOc1lYTnpYQ0lwTzF4dWRtRnlJRkpsWVdOMFJXeGxiV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJXeGxiV1Z1ZEZ3aUtUdGNibHh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1THlvcVhHNGdLaUJEY21WaGRHVWdZU0JqYjIxd2IyNWxiblFnZEdoaGRDQjNhV3hzSUhSb2NtOTNJR0Z1SUdWNFkyVndkR2x2YmlCM2FHVnVJSFZ1Ylc5MWJuUmxaQzVjYmlBcVhHNGdLaUJEYjIxd2IyNWxiblJ6SUd4cGEyVWdQR2gwYld3K0lEeG9aV0ZrUGlCaGJtUWdQR0p2WkhrK0lHTmhiaWQwSUdKbElISmxiVzkyWldRZ2IzSWdZV1JrWldSY2JpQXFJR1ZoYzJsc2VTQnBiaUJoSUdOeWIzTnpMV0p5YjNkelpYSWdkMkY1TENCb2IzZGxkbVZ5SUdsMEozTWdkbUZzZFdGaWJHVWdkRzhnWW1VZ1lXSnNaU0IwYjF4dUlDb2dkR0ZyWlNCaFpIWmhiblJoWjJVZ2IyWWdVbVZoWTNRbmN5QnlaV052Ym1OcGJHbGhkR2x2YmlCbWIzSWdjM1I1YkdsdVp5QmhibVFnUEhScGRHeGxQbHh1SUNvZ2JXRnVZV2RsYldWdWRDNGdVMjhnZDJVZ2FuVnpkQ0JrYjJOMWJXVnVkQ0JwZENCaGJtUWdkR2h5YjNjZ2FXNGdaR0Z1WjJWeWIzVnpJR05oYzJWekxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMFlXY2dWR2hsSUhSaFp5QjBieUIzY21Gd1hHNGdLaUJBY21WMGRYSnVJSHRtZFc1amRHbHZibjBnWTI5dWRtVnVhV1Z1WTJVZ1kyOXVjM1J5ZFdOMGIzSWdiMllnYm1WM0lHTnZiWEJ2Ym1WdWRGeHVJQ292WEc1bWRXNWpkR2x2YmlCamNtVmhkR1ZHZFd4c1VHRm5aVU52YlhCdmJtVnVkQ2gwWVdjcElIdGNiaUFnZG1GeUlHVnNaVzFsYm5SR1lXTjBiM0o1SUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVWmhZM1J2Y25rb2RHRm5LVHRjYmx4dUlDQjJZWElnUm5Wc2JGQmhaMlZEYjIxd2IyNWxiblFnUFNCU1pXRmpkRU5zWVhOekxtTnlaV0YwWlVOc1lYTnpLSHRjYmlBZ0lDQjBZV2RPWVcxbE9pQjBZV2N1ZEc5VmNIQmxja05oYzJVb0tTeGNiaUFnSUNCa2FYTndiR0Y1VG1GdFpUb2dKMUpsWVdOMFJuVnNiRkJoWjJWRGIyMXdiMjVsYm5RbklDc2dkR0ZuTEZ4dVhHNGdJQ0FnWTI5dGNHOXVaVzUwVjJsc2JGVnViVzkxYm5RNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDY2xjeUIwY21sbFpDQjBieUIxYm0xdmRXNTBMaUJDWldOaGRYTmxJRzltSUdOeWIzTnpMV0p5YjNkelpYSWdjWFZwY210eklHbDBJR2x6SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5hVzF3YjNOemFXSnNaU0IwYnlCMWJtMXZkVzUwSUhOdmJXVWdkRzl3TFd4bGRtVnNJR052YlhCdmJtVnVkSE1nS0dWbklEeG9kRzFzUGl3Z1BHaGxZV1ErTENBbklDdGNiaUFnSUNBZ0lDQWdKMkZ1WkNBOFltOWtlVDRwSUhKbGJHbGhZbXg1SUdGdVpDQmxabVpwWTJsbGJuUnNlUzRnVkc4Z1ptbDRJSFJvYVhNc0lHaGhkbVVnWVNCemFXNW5iR1VnSnlBclhHNGdJQ0FnSUNBZ0lDZDBiM0F0YkdWMlpXd2dZMjl0Y0c5dVpXNTBJSFJvWVhRZ2JtVjJaWElnZFc1dGIzVnVkSE1nY21WdVpHVnlJSFJvWlhObElHVnNaVzFsYm5SekxpY3NYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyOXVjM1J5ZFdOMGIzSXVaR2x6Y0d4aGVVNWhiV1ZjYmlBZ0lDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1ptRnNjMlVwS1R0Y2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnY21WdVpHVnlPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJsYkdWdFpXNTBSbUZqZEc5eWVTaDBhR2x6TG5CeWIzQnpLVHRjYmlBZ0lDQjlYRzRnSUgwcE8xeHVYRzRnSUhKbGRIVnliaUJHZFd4c1VHRm5aVU52YlhCdmJtVnVkRHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQmpjbVZoZEdWR2RXeHNVR0ZuWlVOdmJYQnZibVZ1ZER0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXBcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSwgc3ViOiB0cnVlICovXG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgY3JlYXRlQXJyYXlGcm9tTWl4ZWQgPSByZXF1aXJlKFwiLi9jcmVhdGVBcnJheUZyb21NaXhlZFwiKTtcbnZhciBnZXRNYXJrdXBXcmFwID0gcmVxdWlyZShcIi4vZ2V0TWFya3VwV3JhcFwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogRHVtbXkgY29udGFpbmVyIHVzZWQgdG8gcmVuZGVyIGFsbCBtYXJrdXAuXG4gKi9cbnZhciBkdW1teU5vZGUgPVxuICBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSA6IG51bGw7XG5cbi8qKlxuICogUGF0dGVybiB1c2VkIGJ5IGBnZXROb2RlTmFtZWAuXG4gKi9cbnZhciBub2RlTmFtZVBhdHRlcm4gPSAvXlxccyo8KFxcdyspLztcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYG5vZGVOYW1lYCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiBhIHN0cmluZyBvZiBtYXJrdXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBTdHJpbmcgb2YgbWFya3VwLlxuICogQHJldHVybiB7P3N0cmluZ30gTm9kZSBuYW1lIG9mIHRoZSBzdXBwbGllZCBtYXJrdXAuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG1hcmt1cCkge1xuICB2YXIgbm9kZU5hbWVNYXRjaCA9IG1hcmt1cC5tYXRjaChub2RlTmFtZVBhdHRlcm4pO1xuICByZXR1cm4gbm9kZU5hbWVNYXRjaCAmJiBub2RlTmFtZU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBub2RlcyByZW5kZXJlZCBmcm9tIHRoZSBzdXBwbGllZCBtYXJrdXAuIFRoZVxuICogb3B0aW9uYWxseSBzdXBwbGllZCBgaGFuZGxlU2NyaXB0YCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25jZSBmb3IgZWFjaFxuICogPHNjcmlwdD4gZWxlbWVudCB0aGF0IGlzIHJlbmRlcmVkLiBJZiBubyBgaGFuZGxlU2NyaXB0YCBmdW5jdGlvbiBpcyBzdXBwbGllZCxcbiAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgYW55IDxzY3JpcHQ+IGVsZW1lbnRzIGFyZSByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIEEgc3RyaW5nIG9mIHZhbGlkIEhUTUwgbWFya3VwLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGhhbmRsZVNjcmlwdCBJbnZva2VkIG9uY2UgZm9yIGVhY2ggcmVuZGVyZWQgPHNjcmlwdD4uXG4gKiBAcmV0dXJuIHthcnJheTxET01FbGVtZW50fERPTVRleHROb2RlPn0gQW4gYXJyYXkgb2YgcmVuZGVyZWQgbm9kZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVzRnJvbU1hcmt1cChtYXJrdXAsIGhhbmRsZVNjcmlwdCkge1xuICB2YXIgbm9kZSA9IGR1bW15Tm9kZTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudCghIWR1bW15Tm9kZSwgJ2NyZWF0ZU5vZGVzRnJvbU1hcmt1cCBkdW1teSBub3QgaW5pdGlhbGl6ZWQnKSA6IGludmFyaWFudCghIWR1bW15Tm9kZSkpO1xuICB2YXIgbm9kZU5hbWUgPSBnZXROb2RlTmFtZShtYXJrdXApO1xuXG4gIHZhciB3cmFwID0gbm9kZU5hbWUgJiYgZ2V0TWFya3VwV3JhcChub2RlTmFtZSk7XG4gIGlmICh3cmFwKSB7XG4gICAgbm9kZS5pbm5lckhUTUwgPSB3cmFwWzFdICsgbWFya3VwICsgd3JhcFsyXTtcblxuICAgIHZhciB3cmFwRGVwdGggPSB3cmFwWzBdO1xuICAgIHdoaWxlICh3cmFwRGVwdGgtLSkge1xuICAgICAgbm9kZSA9IG5vZGUubGFzdENoaWxkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBub2RlLmlubmVySFRNTCA9IG1hcmt1cDtcbiAgfVxuXG4gIHZhciBzY3JpcHRzID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gIGlmIChzY3JpcHRzLmxlbmd0aCkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBoYW5kbGVTY3JpcHQsXG4gICAgICAnY3JlYXRlTm9kZXNGcm9tTWFya3VwKC4uLik6IFVuZXhwZWN0ZWQgPHNjcmlwdD4gZWxlbWVudCByZW5kZXJlZC4nXG4gICAgKSA6IGludmFyaWFudChoYW5kbGVTY3JpcHQpKTtcbiAgICBjcmVhdGVBcnJheUZyb21NaXhlZChzY3JpcHRzKS5mb3JFYWNoKGhhbmRsZVNjcmlwdCk7XG4gIH1cblxuICB2YXIgbm9kZXMgPSBjcmVhdGVBcnJheUZyb21NaXhlZChub2RlLmNoaWxkTm9kZXMpO1xuICB3aGlsZSAobm9kZS5sYXN0Q2hpbGQpIHtcbiAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUubGFzdENoaWxkKTtcbiAgfVxuICByZXR1cm4gbm9kZXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlTm9kZXNGcm9tTWFya3VwO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2WTNKbFlYUmxUbTlrWlhOR2NtOXRUV0Z5YTNWd0xtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JqY21WaGRHVk9iMlJsYzBaeWIyMU5ZWEpyZFhCY2JpQXFJRUIwZVhCbFkyaGxZMnR6WEc0Z0tpOWNibHh1THlwcWMyeHBiblFnWlhacGJEb2dkSEoxWlN3Z2MzVmlPaUIwY25WbElDb3ZYRzVjYm5aaGNpQkZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwwVjRaV04xZEdsdmJrVnVkbWx5YjI1dFpXNTBYQ0lwTzF4dVhHNTJZWElnWTNKbFlYUmxRWEp5WVhsR2NtOXRUV2w0WldRZ1BTQnlaWEYxYVhKbEtGd2lMaTlqY21WaGRHVkJjbkpoZVVaeWIyMU5hWGhsWkZ3aUtUdGNiblpoY2lCblpYUk5ZWEpyZFhCWGNtRndJRDBnY21WeGRXbHlaU2hjSWk0dloyVjBUV0Z5YTNWd1YzSmhjRndpS1R0Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JpOHFLbHh1SUNvZ1JIVnRiWGtnWTI5dWRHRnBibVZ5SUhWelpXUWdkRzhnY21WdVpHVnlJR0ZzYkNCdFlYSnJkWEF1WEc0Z0tpOWNiblpoY2lCa2RXMXRlVTV2WkdVZ1BWeHVJQ0JGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZEM1allXNVZjMlZFVDAwZ1B5QmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwS0Nka2FYWW5LU0E2SUc1MWJHdzdYRzVjYmk4cUtseHVJQ29nVUdGMGRHVnliaUIxYzJWa0lHSjVJR0JuWlhST2IyUmxUbUZ0WldBdVhHNGdLaTljYm5aaGNpQnViMlJsVG1GdFpWQmhkSFJsY200Z1BTQXZYbHhjY3lvOEtGeGNkeXNwTHp0Y2JseHVMeW9xWEc0Z0tpQkZlSFJ5WVdOMGN5QjBhR1VnWUc1dlpHVk9ZVzFsWUNCdlppQjBhR1VnWm1seWMzUWdaV3hsYldWdWRDQnBiaUJoSUhOMGNtbHVaeUJ2WmlCdFlYSnJkWEF1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzFoY210MWNDQlRkSEpwYm1jZ2IyWWdiV0Z5YTNWd0xseHVJQ29nUUhKbGRIVnliaUI3UDNOMGNtbHVaMzBnVG05a1pTQnVZVzFsSUc5bUlIUm9aU0J6ZFhCd2JHbGxaQ0J0WVhKcmRYQXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHZGxkRTV2WkdWT1lXMWxLRzFoY210MWNDa2dlMXh1SUNCMllYSWdibTlrWlU1aGJXVk5ZWFJqYUNBOUlHMWhjbXQxY0M1dFlYUmphQ2h1YjJSbFRtRnRaVkJoZEhSbGNtNHBPMXh1SUNCeVpYUjFjbTRnYm05a1pVNWhiV1ZOWVhSamFDQW1KaUJ1YjJSbFRtRnRaVTFoZEdOb1d6RmRMblJ2VEc5M1pYSkRZWE5sS0NrN1hHNTlYRzVjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCaGNuSmhlU0JqYjI1MFlXbHVhVzVuSUhSb1pTQnViMlJsY3lCeVpXNWtaWEpsWkNCbWNtOXRJSFJvWlNCemRYQndiR2xsWkNCdFlYSnJkWEF1SUZSb1pWeHVJQ29nYjNCMGFXOXVZV3hzZVNCemRYQndiR2xsWkNCZ2FHRnVaR3hsVTJOeWFYQjBZQ0JtZFc1amRHbHZiaUIzYVd4c0lHSmxJR2x1ZG05clpXUWdiMjVqWlNCbWIzSWdaV0ZqYUZ4dUlDb2dQSE5qY21sd2RENGdaV3hsYldWdWRDQjBhR0YwSUdseklISmxibVJsY21Wa0xpQkpaaUJ1YnlCZ2FHRnVaR3hsVTJOeWFYQjBZQ0JtZFc1amRHbHZiaUJwY3lCemRYQndiR2xsWkN4Y2JpQXFJR0Z1SUdWNFkyVndkR2x2YmlCcGN5QjBhSEp2ZDI0Z2FXWWdZVzU1SUR4elkzSnBjSFErSUdWc1pXMWxiblJ6SUdGeVpTQnlaVzVrWlhKbFpDNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2JXRnlhM1Z3SUVFZ2MzUnlhVzVuSUc5bUlIWmhiR2xrSUVoVVRVd2diV0Z5YTNWd0xseHVJQ29nUUhCaGNtRnRJSHMvWm5WdVkzUnBiMjU5SUdoaGJtUnNaVk5qY21sd2RDQkpiblp2YTJWa0lHOXVZMlVnWm05eUlHVmhZMmdnY21WdVpHVnlaV1FnUEhOamNtbHdkRDR1WEc0Z0tpQkFjbVYwZFhKdUlIdGhjbkpoZVR4RVQwMUZiR1Z0Wlc1MGZFUlBUVlJsZUhST2IyUmxQbjBnUVc0Z1lYSnlZWGtnYjJZZ2NtVnVaR1Z5WldRZ2JtOWtaWE11WEc0Z0tpOWNibVoxYm1OMGFXOXVJR055WldGMFpVNXZaR1Z6Um5KdmJVMWhjbXQxY0NodFlYSnJkWEFzSUdoaGJtUnNaVk5qY21sd2RDa2dlMXh1SUNCMllYSWdibTlrWlNBOUlHUjFiVzE1VG05a1pUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2doSVdSMWJXMTVUbTlrWlN3Z0oyTnlaV0YwWlU1dlpHVnpSbkp2YlUxaGNtdDFjQ0JrZFcxdGVTQnViM1FnYVc1cGRHbGhiR2w2WldRbktTQTZJR2x1ZG1GeWFXRnVkQ2doSVdSMWJXMTVUbTlrWlNrcE8xeHVJQ0IyWVhJZ2JtOWtaVTVoYldVZ1BTQm5aWFJPYjJSbFRtRnRaU2h0WVhKcmRYQXBPMXh1WEc0Z0lIWmhjaUIzY21Gd0lEMGdibTlrWlU1aGJXVWdKaVlnWjJWMFRXRnlhM1Z3VjNKaGNDaHViMlJsVG1GdFpTazdYRzRnSUdsbUlDaDNjbUZ3S1NCN1hHNGdJQ0FnYm05a1pTNXBibTVsY2toVVRVd2dQU0IzY21Gd1d6RmRJQ3NnYldGeWEzVndJQ3NnZDNKaGNGc3lYVHRjYmx4dUlDQWdJSFpoY2lCM2NtRndSR1Z3ZEdnZ1BTQjNjbUZ3V3pCZE8xeHVJQ0FnSUhkb2FXeGxJQ2gzY21Gd1JHVndkR2d0TFNrZ2UxeHVJQ0FnSUNBZ2JtOWtaU0E5SUc1dlpHVXViR0Z6ZEVOb2FXeGtPMXh1SUNBZ0lIMWNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnViMlJsTG1sdWJtVnlTRlJOVENBOUlHMWhjbXQxY0R0Y2JpQWdmVnh1WEc0Z0lIWmhjaUJ6WTNKcGNIUnpJRDBnYm05a1pTNW5aWFJGYkdWdFpXNTBjMEo1VkdGblRtRnRaU2duYzJOeWFYQjBKeWs3WEc0Z0lHbG1JQ2h6WTNKcGNIUnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCb1lXNWtiR1ZUWTNKcGNIUXNYRzRnSUNBZ0lDQW5ZM0psWVhSbFRtOWtaWE5HY205dFRXRnlhM1Z3S0M0dUxpazZJRlZ1Wlhod1pXTjBaV1FnUEhOamNtbHdkRDRnWld4bGJXVnVkQ0J5Wlc1a1pYSmxaQzRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENob1lXNWtiR1ZUWTNKcGNIUXBLVHRjYmlBZ0lDQmpjbVZoZEdWQmNuSmhlVVp5YjIxTmFYaGxaQ2h6WTNKcGNIUnpLUzVtYjNKRllXTm9LR2hoYm1Sc1pWTmpjbWx3ZENrN1hHNGdJSDFjYmx4dUlDQjJZWElnYm05a1pYTWdQU0JqY21WaGRHVkJjbkpoZVVaeWIyMU5hWGhsWkNodWIyUmxMbU5vYVd4a1RtOWtaWE1wTzF4dUlDQjNhR2xzWlNBb2JtOWtaUzVzWVhOMFEyaHBiR1FwSUh0Y2JpQWdJQ0J1YjJSbExuSmxiVzkyWlVOb2FXeGtLRzV2WkdVdWJHRnpkRU5vYVd4a0tUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2JtOWtaWE03WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdZM0psWVhSbFRtOWtaWE5HY205dFRXRnlhM1Z3TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZGFuZ2Vyb3VzU3R5bGVWYWx1ZVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBDU1NQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0NTU1Byb3BlcnR5XCIpO1xuXG52YXIgaXNVbml0bGVzc051bWJlciA9IENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXI7XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIGludG8gdGhlIHByb3BlciBjc3Mgd3JpdGFibGUgdmFsdWUuIFRoZSBzdHlsZSBuYW1lIGBuYW1lYFxuICogc2hvdWxkIGJlIGxvZ2ljYWwgKG5vIGh5cGhlbnMpLCBhcyBzcGVjaWZpZWRcbiAqIGluIGBDU1NQcm9wZXJ0eS5pc1VuaXRsZXNzTnVtYmVyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDU1MgcHJvcGVydHkgbmFtZSBzdWNoIGFzIGB0b3BNYXJnaW5gLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBDU1MgcHJvcGVydHkgdmFsdWUgc3VjaCBhcyBgMTBweGAuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgc3R5bGUgdmFsdWUgd2l0aCBkaW1lbnNpb25zIGFwcGxpZWQuXG4gKi9cbmZ1bmN0aW9uIGRhbmdlcm91c1N0eWxlVmFsdWUobmFtZSwgdmFsdWUpIHtcbiAgLy8gTm90ZSB0aGF0IHdlJ3ZlIHJlbW92ZWQgZXNjYXBlVGV4dEZvckJyb3dzZXIoKSBjYWxscyBoZXJlIHNpbmNlIHRoZVxuICAvLyB3aG9sZSBzdHJpbmcgd2lsbCBiZSBlc2NhcGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBpbmplY3RlZCBpbnRvXG4gIC8vIHRoZSBtYXJrdXAuIElmIHlvdSBwcm92aWRlIHVuc2FmZSB1c2VyIGRhdGEgaGVyZSB0aGV5IGNhbiBpbmplY3RcbiAgLy8gYXJiaXRyYXJ5IENTUyB3aGljaCBtYXkgYmUgcHJvYmxlbWF0aWMgKEkgY291bGRuJ3QgcmVwcm8gdGhpcyk6XG4gIC8vIGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvWFNTX0ZpbHRlcl9FdmFzaW9uX0NoZWF0X1NoZWV0XG4gIC8vIGh0dHA6Ly93d3cudGhlc3Bhbm5lci5jby51ay8yMDA3LzExLzI2L3VsdGltYXRlLXhzcy1jc3MtaW5qZWN0aW9uL1xuICAvLyBUaGlzIGlzIG5vdCBhbiBYU1MgaG9sZSBidXQgaW5zdGVhZCBhIHBvdGVudGlhbCBDU1MgaW5qZWN0aW9uIGlzc3VlXG4gIC8vIHdoaWNoIGhhcyBsZWFkIHRvIGEgZ3JlYXRlciBkaXNjdXNzaW9uIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0b1xuICAvLyB0cnVzdCBVUkxzIG1vdmluZyBmb3J3YXJkLiBTZWUgIzIxMTU5MDFcblxuICB2YXIgaXNFbXB0eSA9IHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xuICBpZiAoaXNFbXB0eSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHZhciBpc05vbk51bWVyaWMgPSBpc05hTih2YWx1ZSk7XG4gIGlmIChpc05vbk51bWVyaWMgfHwgdmFsdWUgPT09IDAgfHxcbiAgICAgIGlzVW5pdGxlc3NOdW1iZXIuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgaXNVbml0bGVzc051bWJlcltuYW1lXSkge1xuICAgIHJldHVybiAnJyArIHZhbHVlOyAvLyBjYXN0IHRvIHN0cmluZ1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gdmFsdWUgKyAncHgnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRhbmdlcm91c1N0eWxlVmFsdWU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZW1wdHlGdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIG1ha2VFbXB0eUZ1bmN0aW9uKGFyZykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW5kIGRpc2NhcmRzIGlucHV0czsgaXQgaGFzIG5vIHNpZGUgZWZmZWN0cy4gVGhpcyBpc1xuICogcHJpbWFyaWx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5IGZvciBvdmVycmlkYWJsZSBmdW5jdGlvbiBlbmRwb2ludHMgd2hpY2hcbiAqIGFsd2F5cyBuZWVkIHRvIGJlIGNhbGxhYmxlLCBzaW5jZSBKUyBsYWNrcyBhIG51bGwtY2FsbCBpZGlvbSBhbGEgQ29jb2EuXG4gKi9cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fVxuXG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zID0gbWFrZUVtcHR5RnVuY3Rpb247XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UgPSBtYWtlRW1wdHlGdW5jdGlvbihmYWxzZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKHRydWUpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwgPSBtYWtlRW1wdHlGdW5jdGlvbihudWxsKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUaGlzID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9O1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50ID0gZnVuY3Rpb24oYXJnKSB7IHJldHVybiBhcmc7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZW1wdHlGdW5jdGlvbjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZW1wdHlPYmplY3RcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZW1wdHlPYmplY3Q7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZaVzF3ZEhsUFltcGxZM1F1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJR1Z0Y0hSNVQySnFaV04wWEc0Z0tpOWNibHh1WENKMWMyVWdjM1J5YVdOMFhDSTdYRzVjYm5aaGNpQmxiWEIwZVU5aWFtVmpkQ0E5SUh0OU8xeHVYRzVwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lFOWlhbVZqZEM1bWNtVmxlbVVvWlcxd2RIbFBZbXBsWTNRcE8xeHVmVnh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUdWdGNIUjVUMkpxWldOME8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlclxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEVTQ0FQRV9MT09LVVAgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJz4nOiAnJmd0OycsXG4gICc8JzogJyZsdDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgJ1xcJyc6ICcmI3gyNzsnXG59O1xuXG52YXIgRVNDQVBFX1JFR0VYID0gL1smPjxcIiddL2c7XG5cbmZ1bmN0aW9uIGVzY2FwZXIobWF0Y2gpIHtcbiAgcmV0dXJuIEVTQ0FQRV9MT09LVVBbbWF0Y2hdO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgdGV4dCB0byBwcmV2ZW50IHNjcmlwdGluZyBhdHRhY2tzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdGV4dCBUZXh0IHZhbHVlIHRvIGVzY2FwZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gQW4gZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3Nlcih0ZXh0KSB7XG4gIHJldHVybiAoJycgKyB0ZXh0KS5yZXBsYWNlKEVTQ0FQRV9SRUdFWCwgZXNjYXBlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBmaW5kRE9NTm9kZVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlTWFwXCIpO1xudmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKFwiLi9SZWFjdE1vdW50XCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoXCIuL2lzTm9kZVwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBET00gbm9kZSByZW5kZXJlZCBieSB0aGlzIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudHxET01FbGVtZW50fSBjb21wb25lbnRPckVsZW1lbnRcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRoZSByb290IG5vZGUgb2YgdGhpcyBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnRPckVsZW1lbnQpIHtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gICAgaWYgKG93bmVyICE9PSBudWxsKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgb3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyLFxuICAgICAgICAnJXMgaXMgYWNjZXNzaW5nIGdldERPTU5vZGUgb3IgZmluZERPTU5vZGUgaW5zaWRlIGl0cyByZW5kZXIoKS4gJyArXG4gICAgICAgICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgK1xuICAgICAgICAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArXG4gICAgICAgICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICtcbiAgICAgICAgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIG93bmVyLmdldE5hbWUoKSB8fCAnQSBjb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoaXNOb2RlKGNvbXBvbmVudE9yRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY29tcG9uZW50T3JFbGVtZW50O1xuICB9XG4gIGlmIChSZWFjdEluc3RhbmNlTWFwLmhhcyhjb21wb25lbnRPckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFJlYWN0TW91bnQuZ2V0Tm9kZUZyb21JbnN0YW5jZShjb21wb25lbnRPckVsZW1lbnQpO1xuICB9XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgY29tcG9uZW50T3JFbGVtZW50LnJlbmRlciA9PSBudWxsIHx8XG4gICAgdHlwZW9mIGNvbXBvbmVudE9yRWxlbWVudC5yZW5kZXIgIT09ICdmdW5jdGlvbicsXG4gICAgJ0NvbXBvbmVudCAod2l0aCBrZXlzOiAlcykgY29udGFpbnMgYHJlbmRlcmAgbWV0aG9kICcgK1xuICAgICdidXQgaXMgbm90IG1vdW50ZWQgaW4gdGhlIERPTScsXG4gICAgT2JqZWN0LmtleXMoY29tcG9uZW50T3JFbGVtZW50KVxuICApIDogaW52YXJpYW50KGNvbXBvbmVudE9yRWxlbWVudC5yZW5kZXIgPT0gbnVsbCB8fFxuICB0eXBlb2YgY29tcG9uZW50T3JFbGVtZW50LnJlbmRlciAhPT0gJ2Z1bmN0aW9uJykpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGZhbHNlLFxuICAgICdFbGVtZW50IGFwcGVhcnMgdG8gYmUgbmVpdGhlciBSZWFjdENvbXBvbmVudCBub3IgRE9NTm9kZSAoa2V5czogJXMpJyxcbiAgICBPYmplY3Qua2V5cyhjb21wb25lbnRPckVsZW1lbnQpXG4gICkgOiBpbnZhcmlhbnQoZmFsc2UpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kRE9NTm9kZTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlptbHVaRVJQVFU1dlpHVXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdabWx1WkVSUFRVNXZaR1ZjYmlBcUlFQjBlWEJsWTJobFkydHpJSE4wWVhScFl5MXZibXg1WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1VtVmhZM1JEZFhKeVpXNTBUM2R1WlhJZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTjFjbkpsYm5SUGQyNWxjbHdpS1R0Y2JuWmhjaUJTWldGamRFbHVjM1JoYm1ObFRXRndJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JKYm5OMFlXNWpaVTFoY0Z3aUtUdGNiblpoY2lCU1pXRmpkRTF2ZFc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUk5iM1Z1ZEZ3aUtUdGNibHh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNiblpoY2lCcGMwNXZaR1VnUFNCeVpYRjFhWEpsS0Z3aUxpOXBjMDV2WkdWY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCMGFHVWdSRTlOSUc1dlpHVWdjbVZ1WkdWeVpXUWdZbmtnZEdocGN5QmxiR1Z0Wlc1MExseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1VtVmhZM1JEYjIxd2IyNWxiblI4UkU5TlJXeGxiV1Z1ZEgwZ1kyOXRjRzl1Wlc1MFQzSkZiR1Z0Wlc1MFhHNGdLaUJBY21WMGRYSnVJSHRFVDAxRmJHVnRaVzUwZlNCVWFHVWdjbTl2ZENCdWIyUmxJRzltSUhSb2FYTWdaV3hsYldWdWRDNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1ptbHVaRVJQVFU1dlpHVW9ZMjl0Y0c5dVpXNTBUM0pGYkdWdFpXNTBLU0I3WEc0Z0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNCMllYSWdiM2R1WlhJZ1BTQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpNWpkWEp5Wlc1ME8xeHVJQ0FnSUdsbUlDaHZkMjVsY2lBaFBUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUc5M2JtVnlMbDkzWVhKdVpXUkJZbTkxZEZKbFpuTkpibEpsYm1SbGNpeGNiaUFnSUNBZ0lDQWdKeVZ6SUdseklHRmpZMlZ6YzJsdVp5Qm5aWFJFVDAxT2IyUmxJRzl5SUdacGJtUkVUMDFPYjJSbElHbHVjMmxrWlNCcGRITWdjbVZ1WkdWeUtDa3VJQ2NnSzF4dUlDQWdJQ0FnSUNBbmNtVnVaR1Z5S0NrZ2MyaHZkV3hrSUdKbElHRWdjSFZ5WlNCbWRXNWpkR2x2YmlCdlppQndjbTl3Y3lCaGJtUWdjM1JoZEdVdUlFbDBJSE5vYjNWc1pDQW5JQ3RjYmlBZ0lDQWdJQ0FnSjI1bGRtVnlJR0ZqWTJWemN5QnpiMjFsZEdocGJtY2dkR2hoZENCeVpYRjFhWEpsY3lCemRHRnNaU0JrWVhSaElHWnliMjBnZEdobElIQnlaWFpwYjNWeklDY2dLMXh1SUNBZ0lDQWdJQ0FuY21WdVpHVnlMQ0J6ZFdOb0lHRnpJSEpsWm5NdUlFMXZkbVVnZEdocGN5QnNiMmRwWXlCMGJ5QmpiMjF3YjI1bGJuUkVhV1JOYjNWdWRDQmhibVFnSnlBclhHNGdJQ0FnSUNBZ0lDZGpiMjF3YjI1bGJuUkVhV1JWY0dSaGRHVWdhVzV6ZEdWaFpDNG5MRnh1SUNBZ0lDQWdJQ0J2ZDI1bGNpNW5aWFJPWVcxbEtDa2dmSHdnSjBFZ1kyOXRjRzl1Wlc1MEoxeHVJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNBZ2IzZHVaWEl1WDNkaGNtNWxaRUZpYjNWMFVtVm1jMGx1VW1WdVpHVnlJRDBnZEhKMVpUdGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2FXWWdLR052YlhCdmJtVnVkRTl5Uld4bGJXVnVkQ0E5UFNCdWRXeHNLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lIMWNiaUFnYVdZZ0tHbHpUbTlrWlNoamIyMXdiMjVsYm5SUGNrVnNaVzFsYm5RcEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUdOdmJYQnZibVZ1ZEU5eVJXeGxiV1Z1ZER0Y2JpQWdmVnh1SUNCcFppQW9VbVZoWTNSSmJuTjBZVzVqWlUxaGNDNW9ZWE1vWTI5dGNHOXVaVzUwVDNKRmJHVnRaVzUwS1NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJTWldGamRFMXZkVzUwTG1kbGRFNXZaR1ZHY205dFNXNXpkR0Z1WTJVb1kyOXRjRzl1Wlc1MFQzSkZiR1Z0Wlc1MEtUdGNiaUFnZlZ4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUdOdmJYQnZibVZ1ZEU5eVJXeGxiV1Z1ZEM1eVpXNWtaWElnUFQwZ2JuVnNiQ0I4ZkZ4dUlDQWdJSFI1Y0dWdlppQmpiMjF3YjI1bGJuUlBja1ZzWlcxbGJuUXVjbVZ1WkdWeUlDRTlQU0FuWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ2REYjIxd2IyNWxiblFnS0hkcGRHZ2dhMlY1Y3pvZ0pYTXBJR052Ym5SaGFXNXpJR0J5Wlc1a1pYSmdJRzFsZEdodlpDQW5JQ3RjYmlBZ0lDQW5ZblYwSUdseklHNXZkQ0J0YjNWdWRHVmtJR2x1SUhSb1pTQkVUMDBuTEZ4dUlDQWdJRTlpYW1WamRDNXJaWGx6S0dOdmJYQnZibVZ1ZEU5eVJXeGxiV1Z1ZENsY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENoamIyMXdiMjVsYm5SUGNrVnNaVzFsYm5RdWNtVnVaR1Z5SUQwOUlHNTFiR3dnZkh4Y2JpQWdkSGx3Wlc5bUlHTnZiWEJ2Ym1WdWRFOXlSV3hsYldWdWRDNXlaVzVrWlhJZ0lUMDlJQ2RtZFc1amRHbHZiaWNwS1R0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCbVlXeHpaU3hjYmlBZ0lDQW5SV3hsYldWdWRDQmhjSEJsWVhKeklIUnZJR0psSUc1bGFYUm9aWElnVW1WaFkzUkRiMjF3YjI1bGJuUWdibTl5SUVSUFRVNXZaR1VnS0d0bGVYTTZJQ1Z6S1Njc1hHNGdJQ0FnVDJKcVpXTjBMbXRsZVhNb1kyOXRjRzl1Wlc1MFQzSkZiR1Z0Wlc1MEtWeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHWmhiSE5sS1NrN1hHNTlYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnWm1sdVpFUlBUVTV2WkdVN1hHNGlYWDA9IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBmbGF0dGVuQ2hpbGRyZW5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciB0cmF2ZXJzZUFsbENoaWxkcmVuID0gcmVxdWlyZShcIi4vdHJhdmVyc2VBbGxDaGlsZHJlblwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0cmF2ZXJzZUNvbnRleHQgQ29udGV4dCBwYXNzZWQgdGhyb3VnaCB0cmF2ZXJzYWwuXG4gKiBAcGFyYW0gez9SZWFjdENvbXBvbmVudH0gY2hpbGQgUmVhY3QgY2hpbGQgY29tcG9uZW50LlxuICogQHBhcmFtIHshc3RyaW5nfSBuYW1lIFN0cmluZyBuYW1lIG9mIGtleSBwYXRoIHRvIGNoaWxkLlxuICovXG5mdW5jdGlvbiBmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lKSB7XG4gIC8vIFdlIGZvdW5kIGEgY29tcG9uZW50IGluc3RhbmNlLlxuICB2YXIgcmVzdWx0ID0gdHJhdmVyc2VDb250ZXh0O1xuICB2YXIga2V5VW5pcXVlID0gIXJlc3VsdC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAga2V5VW5pcXVlLFxuICAgICAgJ2ZsYXR0ZW5DaGlsZHJlbiguLi4pOiBFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksICcgK1xuICAgICAgJ2Alc2AuIENoaWxkIGtleXMgbXVzdCBiZSB1bmlxdWU7IHdoZW4gdHdvIGNoaWxkcmVuIHNoYXJlIGEga2V5LCBvbmx5ICcgK1xuICAgICAgJ3RoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIHVzZWQuJyxcbiAgICAgIG5hbWVcbiAgICApIDogbnVsbCk7XG4gIH1cbiAgaWYgKGtleVVuaXF1ZSAmJiBjaGlsZCAhPSBudWxsKSB7XG4gICAgcmVzdWx0W25hbWVdID0gY2hpbGQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGbGF0dGVucyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuIEFueSBudWxsXG4gKiBjaGlsZHJlbiB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIG9iamVjdC5cbiAqIEByZXR1cm4geyFvYmplY3R9IGZsYXR0ZW5lZCBjaGlsZHJlbiBrZXllZCBieSBuYW1lLlxuICovXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHt9O1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuQ2hpbGRyZW47XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZabXhoZEhSbGJrTm9hV3hrY21WdUxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUdac1lYUjBaVzVEYUdsc1pISmxibHh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUhSeVlYWmxjbk5sUVd4c1EyaHBiR1J5Wlc0Z1BTQnlaWEYxYVhKbEtGd2lMaTkwY21GMlpYSnpaVUZzYkVOb2FXeGtjbVZ1WENJcE8xeHVkbUZ5SUhkaGNtNXBibWNnUFNCeVpYRjFhWEpsS0Z3aUxpOTNZWEp1YVc1blhDSXBPMXh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjU5SUhSeVlYWmxjbk5sUTI5dWRHVjRkQ0JEYjI1MFpYaDBJSEJoYzNObFpDQjBhSEp2ZFdkb0lIUnlZWFpsY25OaGJDNWNiaUFxSUVCd1lYSmhiU0I3UDFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JqYUdsc1pDQlNaV0ZqZENCamFHbHNaQ0JqYjIxd2IyNWxiblF1WEc0Z0tpQkFjR0Z5WVcwZ2V5RnpkSEpwYm1kOUlHNWhiV1VnVTNSeWFXNW5JRzVoYldVZ2IyWWdhMlY1SUhCaGRHZ2dkRzhnWTJocGJHUXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHWnNZWFIwWlc1VGFXNW5iR1ZEYUdsc1pFbHVkRzlEYjI1MFpYaDBLSFJ5WVhabGNuTmxRMjl1ZEdWNGRDd2dZMmhwYkdRc0lHNWhiV1VwSUh0Y2JpQWdMeThnVjJVZ1ptOTFibVFnWVNCamIyMXdiMjVsYm5RZ2FXNXpkR0Z1WTJVdVhHNGdJSFpoY2lCeVpYTjFiSFFnUFNCMGNtRjJaWEp6WlVOdmJuUmxlSFE3WEc0Z0lIWmhjaUJyWlhsVmJtbHhkV1VnUFNBaGNtVnpkV3gwTG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcE8xeHVJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNCclpYbFZibWx4ZFdVc1hHNGdJQ0FnSUNBblpteGhkSFJsYmtOb2FXeGtjbVZ1S0M0dUxpazZJRVZ1WTI5MWJuUmxjbVZrSUhSM2J5QmphR2xzWkhKbGJpQjNhWFJvSUhSb1pTQnpZVzFsSUd0bGVTd2dKeUFyWEc0Z0lDQWdJQ0FuWUNWellDNGdRMmhwYkdRZ2EyVjVjeUJ0ZFhOMElHSmxJSFZ1YVhGMVpUc2dkMmhsYmlCMGQyOGdZMmhwYkdSeVpXNGdjMmhoY21VZ1lTQnJaWGtzSUc5dWJIa2dKeUFyWEc0Z0lDQWdJQ0FuZEdobElHWnBjbk4wSUdOb2FXeGtJSGRwYkd3Z1ltVWdkWE5sWkM0bkxGeHVJQ0FnSUNBZ2JtRnRaVnh1SUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnZlZ4dUlDQnBaaUFvYTJWNVZXNXBjWFZsSUNZbUlHTm9hV3hrSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0J5WlhOMWJIUmJibUZ0WlYwZ1BTQmphR2xzWkR0Y2JpQWdmVnh1ZlZ4dVhHNHZLaXBjYmlBcUlFWnNZWFIwWlc1eklHTm9hV3hrY21WdUlIUm9ZWFFnWVhKbElIUjVjR2xqWVd4c2VTQnpjR1ZqYVdacFpXUWdZWE1nWUhCeWIzQnpMbU5vYVd4a2NtVnVZQzRnUVc1NUlHNTFiR3hjYmlBcUlHTm9hV3hrY21WdUlIZHBiR3dnYm05MElHSmxJR2x1WTJ4MVpHVmtJR2x1SUhSb1pTQnlaWE4xYkhScGJtY2diMkpxWldOMExseHVJQ29nUUhKbGRIVnliaUI3SVc5aWFtVmpkSDBnWm14aGRIUmxibVZrSUdOb2FXeGtjbVZ1SUd0bGVXVmtJR0o1SUc1aGJXVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHWnNZWFIwWlc1RGFHbHNaSEpsYmloamFHbHNaSEpsYmlrZ2UxeHVJQ0JwWmlBb1kyaHBiR1J5Wlc0Z1BUMGdiblZzYkNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJqYUdsc1pISmxianRjYmlBZ2ZWeHVJQ0IyWVhJZ2NtVnpkV3gwSUQwZ2UzMDdYRzRnSUhSeVlYWmxjbk5sUVd4c1EyaHBiR1J5Wlc0b1kyaHBiR1J5Wlc0c0lHWnNZWFIwWlc1VGFXNW5iR1ZEYUdsc1pFbHVkRzlEYjI1MFpYaDBMQ0J5WlhOMWJIUXBPMXh1SUNCeVpYUjFjbTRnY21WemRXeDBPMXh1ZlZ4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlHWnNZWFIwWlc1RGFHbHNaSEpsYmp0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGZvY3VzTm9kZVxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZSBpbnB1dC90ZXh0YXJlYSB0byBmb2N1c1xuICovXG5mdW5jdGlvbiBmb2N1c05vZGUobm9kZSkge1xuICAvLyBJRTggY2FuIHRocm93IFwiQ2FuJ3QgbW92ZSBmb2N1cyB0byB0aGUgY29udHJvbCBiZWNhdXNlIGl0IGlzIGludmlzaWJsZSxcbiAgLy8gbm90IGVuYWJsZWQsIG9yIG9mIGEgdHlwZSB0aGF0IGRvZXMgbm90IGFjY2VwdCB0aGUgZm9jdXMuXCIgZm9yIGFsbCBraW5kcyBvZlxuICAvLyByZWFzb25zIHRoYXQgYXJlIHRvbyBleHBlbnNpdmUgYW5kIGZyYWdpbGUgdG8gdGVzdC5cbiAgdHJ5IHtcbiAgICBub2RlLmZvY3VzKCk7XG4gIH0gY2F0Y2goZSkge1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZm9jdXNOb2RlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGZvckVhY2hBY2N1bXVsYXRlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAcGFyYW0ge2FycmF5fSBhbiBcImFjY3VtdWxhdGlvblwiIG9mIGl0ZW1zIHdoaWNoIGlzIGVpdGhlciBhbiBBcnJheSBvclxuICogYSBzaW5nbGUgaXRlbS4gVXNlZnVsIHdoZW4gcGFpcmVkIHdpdGggdGhlIGBhY2N1bXVsYXRlYCBtb2R1bGUuIFRoaXMgaXMgYVxuICogc2ltcGxlIHV0aWxpdHkgdGhhdCBhbGxvd3MgdXMgdG8gcmVhc29uIGFib3V0IGEgY29sbGVjdGlvbiBvZiBpdGVtcywgYnV0XG4gKiBoYW5kbGluZyB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGV4YWN0bHkgb25lIGl0ZW0gKGFuZCB3ZSBkbyBub3QgbmVlZCB0b1xuICogYWxsb2NhdGUgYW4gYXJyYXkpLlxuICovXG52YXIgZm9yRWFjaEFjY3VtdWxhdGVkID0gZnVuY3Rpb24oYXJyLCBjYiwgc2NvcGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGFyci5mb3JFYWNoKGNiLCBzY29wZSk7XG4gIH0gZWxzZSBpZiAoYXJyKSB7XG4gICAgY2IuY2FsbChzY29wZSwgYXJyKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmb3JFYWNoQWNjdW11bGF0ZWQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0QWN0aXZlRWxlbWVudFxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4vKipcbiAqIFNhbWUgYXMgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBidXQgd3JhcHMgaW4gYSB0cnktY2F0Y2ggYmxvY2suIEluIElFIGl0IGlzXG4gKiBub3Qgc2FmZSB0byBjYWxsIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaWYgdGhlcmUgaXMgbm90aGluZyBmb2N1c2VkLlxuICpcbiAqIFRoZSBhY3RpdmVFbGVtZW50IHdpbGwgYmUgbnVsbCBvbmx5IGlmIHRoZSBkb2N1bWVudCBib2R5IGlzIG5vdCB5ZXQgZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudCgpIC8qP0RPTUVsZW1lbnQqLyB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWN0aXZlRWxlbWVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRFdmVudENoYXJDb2RlXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBgY2hhckNvZGVgIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBcImNoYXJhY3RlciBjb2RlXCIgYW5kIGlzIHNhZmUgdG8gdXNlIHdpdGhcbiAqIGBTdHJpbmcuZnJvbUNoYXJDb2RlYC4gQXMgc3VjaCwgb25seSBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgcHJvZHVjZSBhIHZhbGlkIGBjaGFyQ29kZWAsIHRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIEVudGVyLlxuICogVGhlIFRhYi1rZXkgaXMgY29uc2lkZXJlZCBub24tcHJpbnRhYmxlIGFuZCBkb2VzIG5vdCBoYXZlIGEgYGNoYXJDb2RlYCxcbiAqIHByZXN1bWFibHkgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm9kdWNlIGEgdGFiLWNoYXJhY3RlciBpbiBicm93c2Vycy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgYGNoYXJDb2RlYCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7XG5cbiAgICAvLyBGRiBkb2VzIG5vdCBzZXQgYGNoYXJDb2RlYCBmb3IgdGhlIEVudGVyLWtleSwgY2hlY2sgYWdhaW5zdCBga2V5Q29kZWAuXG4gICAgaWYgKGNoYXJDb2RlID09PSAwICYmIGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBjaGFyQ29kZSA9IDEzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJRTggZG9lcyBub3QgaW1wbGVtZW50IGBjaGFyQ29kZWAsIGJ1dCBga2V5Q29kZWAgaGFzIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgIGNoYXJDb2RlID0ga2V5Q29kZTtcbiAgfVxuXG4gIC8vIFNvbWUgbm9uLXByaW50YWJsZSBrZXlzIGFyZSByZXBvcnRlZCBpbiBgY2hhckNvZGVgL2BrZXlDb2RlYCwgZGlzY2FyZCB0aGVtLlxuICAvLyBNdXN0IG5vdCBkaXNjYXJkIHRoZSAobm9uLSlwcmludGFibGUgRW50ZXIta2V5LlxuICBpZiAoY2hhckNvZGUgPj0gMzIgfHwgY2hhckNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRDaGFyQ29kZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRFdmVudEtleVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRDaGFyQ29kZVwiKTtcblxuLyoqXG4gKiBOb3JtYWxpemF0aW9uIG9mIGRlcHJlY2F0ZWQgSFRNTDUgYGtleWAgdmFsdWVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG52YXIgbm9ybWFsaXplS2V5ID0ge1xuICAnRXNjJzogJ0VzY2FwZScsXG4gICdTcGFjZWJhcic6ICcgJyxcbiAgJ0xlZnQnOiAnQXJyb3dMZWZ0JyxcbiAgJ1VwJzogJ0Fycm93VXAnLFxuICAnUmlnaHQnOiAnQXJyb3dSaWdodCcsXG4gICdEb3duJzogJ0Fycm93RG93bicsXG4gICdEZWwnOiAnRGVsZXRlJyxcbiAgJ1dpbic6ICdPUycsXG4gICdNZW51JzogJ0NvbnRleHRNZW51JyxcbiAgJ0FwcHMnOiAnQ29udGV4dE1lbnUnLFxuICAnU2Nyb2xsJzogJ1Njcm9sbExvY2snLFxuICAnTW96UHJpbnRhYmxlS2V5JzogJ1VuaWRlbnRpZmllZCdcbn07XG5cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBsZWdhY3kgYGtleUNvZGVgIHRvIEhUTUw1IGBrZXlgXG4gKiBPbmx5IHNwZWNpYWwga2V5cyBzdXBwb3J0ZWQsIGFsbCBvdGhlcnMgZGVwZW5kIG9uIGtleWJvYXJkIGxheW91dCBvciBicm93c2VyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG52YXIgdHJhbnNsYXRlVG9LZXkgPSB7XG4gIDg6ICdCYWNrc3BhY2UnLFxuICA5OiAnVGFiJyxcbiAgMTI6ICdDbGVhcicsXG4gIDEzOiAnRW50ZXInLFxuICAxNjogJ1NoaWZ0JyxcbiAgMTc6ICdDb250cm9sJyxcbiAgMTg6ICdBbHQnLFxuICAxOTogJ1BhdXNlJyxcbiAgMjA6ICdDYXBzTG9jaycsXG4gIDI3OiAnRXNjYXBlJyxcbiAgMzI6ICcgJyxcbiAgMzM6ICdQYWdlVXAnLFxuICAzNDogJ1BhZ2VEb3duJyxcbiAgMzU6ICdFbmQnLFxuICAzNjogJ0hvbWUnLFxuICAzNzogJ0Fycm93TGVmdCcsXG4gIDM4OiAnQXJyb3dVcCcsXG4gIDM5OiAnQXJyb3dSaWdodCcsXG4gIDQwOiAnQXJyb3dEb3duJyxcbiAgNDU6ICdJbnNlcnQnLFxuICA0NjogJ0RlbGV0ZScsXG4gIDExMjogJ0YxJywgMTEzOiAnRjInLCAxMTQ6ICdGMycsIDExNTogJ0Y0JywgMTE2OiAnRjUnLCAxMTc6ICdGNicsXG4gIDExODogJ0Y3JywgMTE5OiAnRjgnLCAxMjA6ICdGOScsIDEyMTogJ0YxMCcsIDEyMjogJ0YxMScsIDEyMzogJ0YxMicsXG4gIDE0NDogJ051bUxvY2snLFxuICAxNDU6ICdTY3JvbGxMb2NrJyxcbiAgMjI0OiAnTWV0YSdcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIGBrZXlgIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRFdmVudEtleShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQua2V5KSB7XG4gICAgLy8gTm9ybWFsaXplIGluY29uc2lzdGVudCB2YWx1ZXMgcmVwb3J0ZWQgYnkgYnJvd3NlcnMgZHVlIHRvXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIG9mIGEgd29ya2luZyBkcmFmdCBzcGVjaWZpY2F0aW9uLlxuXG4gICAgLy8gRmlyZUZveCBpbXBsZW1lbnRzIGBrZXlgIGJ1dCByZXR1cm5zIGBNb3pQcmludGFibGVLZXlgIGZvciBhbGxcbiAgICAvLyBwcmludGFibGUgY2hhcmFjdGVycyAobm9ybWFsaXplZCB0byBgVW5pZGVudGlmaWVkYCksIGlnbm9yZSBpdC5cbiAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuICAgIGlmIChrZXkgIT09ICdVbmlkZW50aWZpZWQnKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuXG4gIC8vIEJyb3dzZXIgZG9lcyBub3QgaW1wbGVtZW50IGBrZXlgLCBwb2x5ZmlsbCBhcyBtdWNoIG9mIGl0IGFzIHdlIGNhbi5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICB2YXIgY2hhckNvZGUgPSBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KTtcblxuICAgIC8vIFRoZSBlbnRlci1rZXkgaXMgdGVjaG5pY2FsbHkgYm90aCBwcmludGFibGUgYW5kIG5vbi1wcmludGFibGUgYW5kIGNhblxuICAgIC8vIHRodXMgYmUgY2FwdHVyZWQgYnkgYGtleXByZXNzYCwgbm8gb3RoZXIgbm9uLXByaW50YWJsZSBrZXkgc2hvdWxkLlxuICAgIHJldHVybiBjaGFyQ29kZSA9PT0gMTMgPyAnRW50ZXInIDogU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7XG4gIH1cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBuYXRpdmVFdmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgLy8gV2hpbGUgdXNlciBrZXlib2FyZCBsYXlvdXQgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIG1lYW5pbmcgb2YgZWFjaFxuICAgIC8vIGBrZXlDb2RlYCB2YWx1ZSwgYWxtb3N0IGFsbCBmdW5jdGlvbiBrZXlzIGhhdmUgYSB1bml2ZXJzYWwgdmFsdWUuXG4gICAgcmV0dXJuIHRyYW5zbGF0ZVRvS2V5W25hdGl2ZUV2ZW50LmtleUNvZGVdIHx8ICdVbmlkZW50aWZpZWQnO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRFdmVudEtleTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbW9kaWZpZXIga2V5IHRvIHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IGluIHRoZSBldmVudC5cbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNrZXlzLU1vZGlmaWVyc1xuICovXG5cbnZhciBtb2RpZmllcktleVRvUHJvcCA9IHtcbiAgJ0FsdCc6ICdhbHRLZXknLFxuICAnQ29udHJvbCc6ICdjdHJsS2V5JyxcbiAgJ01ldGEnOiAnbWV0YUtleScsXG4gICdTaGlmdCc6ICdzaGlmdEtleSdcbn07XG5cbi8vIElFOCBkb2VzIG5vdCBpbXBsZW1lbnQgZ2V0TW9kaWZpZXJTdGF0ZSBzbyB3ZSBzaW1wbHkgbWFwIGl0IHRvIHRoZSBvbmx5XG4vLyBtb2RpZmllciBrZXlzIGV4cG9zZWQgYnkgdGhlIGV2ZW50IGl0c2VsZiwgZG9lcyBub3Qgc3VwcG9ydCBMb2NrLWtleXMuXG4vLyBDdXJyZW50bHksIGFsbCBtYWpvciBicm93c2VycyBleGNlcHQgQ2hyb21lIHNlZW1zIHRvIHN1cHBvcnQgTG9jay1rZXlzLlxuZnVuY3Rpb24gbW9kaWZpZXJTdGF0ZUdldHRlcihrZXlBcmcpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gdGhpcztcbiAgdmFyIG5hdGl2ZUV2ZW50ID0gc3ludGhldGljRXZlbnQubmF0aXZlRXZlbnQ7XG4gIGlmIChuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKTtcbiAgfVxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRNb2RpZmllclN0YXRlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldEV2ZW50VGFyZ2V0XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBHZXRzIHRoZSB0YXJnZXQgbm9kZSBmcm9tIGEgbmF0aXZlIGJyb3dzZXIgZXZlbnQgYnkgYWNjb3VudGluZyBmb3JcbiAqIGluY29uc2lzdGVuY2llcyBpbiBicm93c2VyIERPTSBBUElzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge0RPTUV2ZW50VGFyZ2V0fSBUYXJnZXQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIHRhcmdldCA9IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8IHdpbmRvdztcbiAgLy8gU2FmYXJpIG1heSBmaXJlIGV2ZW50cyBvbiB0ZXh0IG5vZGVzIChOb2RlLlRFWFRfTk9ERSBpcyAzKS5cbiAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcbiAgcmV0dXJuIHRhcmdldC5ub2RlVHlwZSA9PT0gMyA/IHRhcmdldC5wYXJlbnROb2RlIDogdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEV2ZW50VGFyZ2V0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldEl0ZXJhdG9yRm5cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKiBnbG9iYWwgU3ltYm9sICovXG52YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gKlxuICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gKlxuICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTtcbiAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICogICAgICAgLi4uXG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZVxuICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChcbiAgICAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSlcbiAgKTtcbiAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvckZuO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRNYXJrdXBXcmFwXG4gKi9cblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogRHVtbXkgY29udGFpbmVyIHVzZWQgdG8gZGV0ZWN0IHdoaWNoIHdyYXBzIGFyZSBuZWNlc3NhcnkuXG4gKi9cbnZhciBkdW1teU5vZGUgPVxuICBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSA6IG51bGw7XG5cbi8qKlxuICogU29tZSBicm93c2VycyBjYW5ub3QgdXNlIGBpbm5lckhUTUxgIHRvIHJlbmRlciBjZXJ0YWluIGVsZW1lbnRzIHN0YW5kYWxvbmUsXG4gKiBzbyB3ZSB3cmFwIHRoZW0sIHJlbmRlciB0aGUgd3JhcHBlZCBub2RlcywgdGhlbiBleHRyYWN0IHRoZSBkZXNpcmVkIG5vZGUuXG4gKlxuICogSW4gSUU4LCBjZXJ0YWluIGVsZW1lbnRzIGNhbm5vdCByZW5kZXIgYWxvbmUsIHNvIHdyYXAgYWxsIGVsZW1lbnRzICgnKicpLlxuICovXG52YXIgc2hvdWxkV3JhcCA9IHtcbiAgLy8gRm9yY2Ugd3JhcHBpbmcgZm9yIFNWRyBlbGVtZW50cyBiZWNhdXNlIGlmIHRoZXkgZ2V0IGNyZWF0ZWQgaW5zaWRlIGEgPGRpdj4sXG4gIC8vIHRoZXkgd2lsbCBiZSBpbml0aWFsaXplZCBpbiB0aGUgd3JvbmcgbmFtZXNwYWNlIChhbmQgd2lsbCBub3QgZGlzcGxheSkuXG4gICdjaXJjbGUnOiB0cnVlLFxuICAnY2xpcFBhdGgnOiB0cnVlLFxuICAnZGVmcyc6IHRydWUsXG4gICdlbGxpcHNlJzogdHJ1ZSxcbiAgJ2cnOiB0cnVlLFxuICAnbGluZSc6IHRydWUsXG4gICdsaW5lYXJHcmFkaWVudCc6IHRydWUsXG4gICdwYXRoJzogdHJ1ZSxcbiAgJ3BvbHlnb24nOiB0cnVlLFxuICAncG9seWxpbmUnOiB0cnVlLFxuICAncmFkaWFsR3JhZGllbnQnOiB0cnVlLFxuICAncmVjdCc6IHRydWUsXG4gICdzdG9wJzogdHJ1ZSxcbiAgJ3RleHQnOiB0cnVlXG59O1xuXG52YXIgc2VsZWN0V3JhcCA9IFsxLCAnPHNlbGVjdCBtdWx0aXBsZT1cInRydWVcIj4nLCAnPC9zZWxlY3Q+J107XG52YXIgdGFibGVXcmFwID0gWzEsICc8dGFibGU+JywgJzwvdGFibGU+J107XG52YXIgdHJXcmFwID0gWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+J107XG5cbnZhciBzdmdXcmFwID0gWzEsICc8c3ZnPicsICc8L3N2Zz4nXTtcblxudmFyIG1hcmt1cFdyYXAgPSB7XG4gICcqJzogWzEsICc/PGRpdj4nLCAnPC9kaXY+J10sXG5cbiAgJ2FyZWEnOiBbMSwgJzxtYXA+JywgJzwvbWFwPiddLFxuICAnY29sJzogWzIsICc8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPicsICc8L2NvbGdyb3VwPjwvdGFibGU+J10sXG4gICdsZWdlbmQnOiBbMSwgJzxmaWVsZHNldD4nLCAnPC9maWVsZHNldD4nXSxcbiAgJ3BhcmFtJzogWzEsICc8b2JqZWN0PicsICc8L29iamVjdD4nXSxcbiAgJ3RyJzogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10sXG5cbiAgJ29wdGdyb3VwJzogc2VsZWN0V3JhcCxcbiAgJ29wdGlvbic6IHNlbGVjdFdyYXAsXG5cbiAgJ2NhcHRpb24nOiB0YWJsZVdyYXAsXG4gICdjb2xncm91cCc6IHRhYmxlV3JhcCxcbiAgJ3Rib2R5JzogdGFibGVXcmFwLFxuICAndGZvb3QnOiB0YWJsZVdyYXAsXG4gICd0aGVhZCc6IHRhYmxlV3JhcCxcblxuICAndGQnOiB0cldyYXAsXG4gICd0aCc6IHRyV3JhcCxcblxuICAnY2lyY2xlJzogc3ZnV3JhcCxcbiAgJ2NsaXBQYXRoJzogc3ZnV3JhcCxcbiAgJ2RlZnMnOiBzdmdXcmFwLFxuICAnZWxsaXBzZSc6IHN2Z1dyYXAsXG4gICdnJzogc3ZnV3JhcCxcbiAgJ2xpbmUnOiBzdmdXcmFwLFxuICAnbGluZWFyR3JhZGllbnQnOiBzdmdXcmFwLFxuICAncGF0aCc6IHN2Z1dyYXAsXG4gICdwb2x5Z29uJzogc3ZnV3JhcCxcbiAgJ3BvbHlsaW5lJzogc3ZnV3JhcCxcbiAgJ3JhZGlhbEdyYWRpZW50Jzogc3ZnV3JhcCxcbiAgJ3JlY3QnOiBzdmdXcmFwLFxuICAnc3RvcCc6IHN2Z1dyYXAsXG4gICd0ZXh0Jzogc3ZnV3JhcFxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXJrdXAgd3JhcCBjb25maWd1cmF0aW9uIGZvciB0aGUgc3VwcGxpZWQgYG5vZGVOYW1lYC5cbiAqXG4gKiBOT1RFOiBUaGlzIGxhemlseSBkZXRlY3RzIHdoaWNoIHdyYXBzIGFyZSBuZWNlc3NhcnkgZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5vZGVOYW1lIExvd2VyY2FzZSBgbm9kZU5hbWVgLlxuICogQHJldHVybiB7P2FycmF5fSBNYXJrdXAgd3JhcCBjb25maWd1cmF0aW9uLCBpZiBhcHBsaWNhYmxlLlxuICovXG5mdW5jdGlvbiBnZXRNYXJrdXBXcmFwKG5vZGVOYW1lKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoISFkdW1teU5vZGUsICdNYXJrdXAgd3JhcHBpbmcgbm9kZSBub3QgaW5pdGlhbGl6ZWQnKSA6IGludmFyaWFudCghIWR1bW15Tm9kZSkpO1xuICBpZiAoIW1hcmt1cFdyYXAuaGFzT3duUHJvcGVydHkobm9kZU5hbWUpKSB7XG4gICAgbm9kZU5hbWUgPSAnKic7XG4gIH1cbiAgaWYgKCFzaG91bGRXcmFwLmhhc093blByb3BlcnR5KG5vZGVOYW1lKSkge1xuICAgIGlmIChub2RlTmFtZSA9PT0gJyonKSB7XG4gICAgICBkdW1teU5vZGUuaW5uZXJIVE1MID0gJzxsaW5rIC8+JztcbiAgICB9IGVsc2Uge1xuICAgICAgZHVtbXlOb2RlLmlubmVySFRNTCA9ICc8JyArIG5vZGVOYW1lICsgJz48LycgKyBub2RlTmFtZSArICc+JztcbiAgICB9XG4gICAgc2hvdWxkV3JhcFtub2RlTmFtZV0gPSAhZHVtbXlOb2RlLmZpcnN0Q2hpbGQ7XG4gIH1cbiAgcmV0dXJuIHNob3VsZFdyYXBbbm9kZU5hbWVdID8gbWFya3VwV3JhcFtub2RlTmFtZV0gOiBudWxsO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFya3VwV3JhcDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdloyVjBUV0Z5YTNWd1YzSmhjQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElHZGxkRTFoY210MWNGZHlZWEJjYmlBcUwxeHVYRzUyWVhJZ1JYaGxZM1YwYVc5dVJXNTJhWEp2Ym0xbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5RmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRGd2lLVHRjYmx4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYmx4dUx5b3FYRzRnS2lCRWRXMXRlU0JqYjI1MFlXbHVaWElnZFhObFpDQjBieUJrWlhSbFkzUWdkMmhwWTJnZ2QzSmhjSE1nWVhKbElHNWxZMlZ6YzJGeWVTNWNiaUFxTDF4dWRtRnlJR1IxYlcxNVRtOWtaU0E5WEc0Z0lFVjRaV04xZEdsdmJrVnVkbWx5YjI1dFpXNTBMbU5oYmxWelpVUlBUU0EvSUdSdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9KMlJwZGljcElEb2diblZzYkR0Y2JseHVMeW9xWEc0Z0tpQlRiMjFsSUdKeWIzZHpaWEp6SUdOaGJtNXZkQ0IxYzJVZ1lHbHVibVZ5U0ZSTlRHQWdkRzhnY21WdVpHVnlJR05sY25SaGFXNGdaV3hsYldWdWRITWdjM1JoYm1SaGJHOXVaU3hjYmlBcUlITnZJSGRsSUhkeVlYQWdkR2hsYlN3Z2NtVnVaR1Z5SUhSb1pTQjNjbUZ3Y0dWa0lHNXZaR1Z6TENCMGFHVnVJR1Y0ZEhKaFkzUWdkR2hsSUdSbGMybHlaV1FnYm05a1pTNWNiaUFxWEc0Z0tpQkpiaUJKUlRnc0lHTmxjblJoYVc0Z1pXeGxiV1Z1ZEhNZ1kyRnVibTkwSUhKbGJtUmxjaUJoYkc5dVpTd2djMjhnZDNKaGNDQmhiR3dnWld4bGJXVnVkSE1nS0NjcUp5a3VYRzRnS2k5Y2JuWmhjaUJ6YUc5MWJHUlhjbUZ3SUQwZ2UxeHVJQ0F2THlCR2IzSmpaU0IzY21Gd2NHbHVaeUJtYjNJZ1UxWkhJR1ZzWlcxbGJuUnpJR0psWTJGMWMyVWdhV1lnZEdobGVTQm5aWFFnWTNKbFlYUmxaQ0JwYm5OcFpHVWdZU0E4WkdsMlBpeGNiaUFnTHk4Z2RHaGxlU0IzYVd4c0lHSmxJR2x1YVhScFlXeHBlbVZrSUdsdUlIUm9aU0IzY205dVp5QnVZVzFsYzNCaFkyVWdLR0Z1WkNCM2FXeHNJRzV2ZENCa2FYTndiR0Y1S1M1Y2JpQWdKMk5wY21Oc1pTYzZJSFJ5ZFdVc1hHNGdJQ2RqYkdsd1VHRjBhQ2M2SUhSeWRXVXNYRzRnSUNka1pXWnpKem9nZEhKMVpTeGNiaUFnSjJWc2JHbHdjMlVuT2lCMGNuVmxMRnh1SUNBblp5YzZJSFJ5ZFdVc1hHNGdJQ2RzYVc1bEp6b2dkSEoxWlN4Y2JpQWdKMnhwYm1WaGNrZHlZV1JwWlc1MEp6b2dkSEoxWlN4Y2JpQWdKM0JoZEdnbk9pQjBjblZsTEZ4dUlDQW5jRzlzZVdkdmJpYzZJSFJ5ZFdVc1hHNGdJQ2R3YjJ4NWJHbHVaU2M2SUhSeWRXVXNYRzRnSUNkeVlXUnBZV3hIY21Ga2FXVnVkQ2M2SUhSeWRXVXNYRzRnSUNkeVpXTjBKem9nZEhKMVpTeGNiaUFnSjNOMGIzQW5PaUIwY25WbExGeHVJQ0FuZEdWNGRDYzZJSFJ5ZFdWY2JuMDdYRzVjYm5aaGNpQnpaV3hsWTNSWGNtRndJRDBnV3pFc0lDYzhjMlZzWldOMElHMTFiSFJwY0d4bFBWd2lkSEoxWlZ3aVBpY3NJQ2M4TDNObGJHVmpkRDRuWFR0Y2JuWmhjaUIwWVdKc1pWZHlZWEFnUFNCYk1Td2dKengwWVdKc1pUNG5MQ0FuUEM5MFlXSnNaVDRuWFR0Y2JuWmhjaUIwY2xkeVlYQWdQU0JiTXl3Z0p6eDBZV0pzWlQ0OGRHSnZaSGsrUEhSeVBpY3NJQ2M4TDNSeVBqd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0blhUdGNibHh1ZG1GeUlITjJaMWR5WVhBZ1BTQmJNU3dnSnp4emRtYytKeXdnSnp3dmMzWm5QaWRkTzF4dVhHNTJZWElnYldGeWEzVndWM0poY0NBOUlIdGNiaUFnSnlvbk9pQmJNU3dnSno4OFpHbDJQaWNzSUNjOEwyUnBkajRuWFN4Y2JseHVJQ0FuWVhKbFlTYzZJRnN4TENBblBHMWhjRDRuTENBblBDOXRZWEErSjEwc1hHNGdJQ2RqYjJ3bk9pQmJNaXdnSnp4MFlXSnNaVDQ4ZEdKdlpIaytQQzkwWW05a2VUNDhZMjlzWjNKdmRYQStKeXdnSnp3dlkyOXNaM0p2ZFhBK1BDOTBZV0pzWlQ0blhTeGNiaUFnSjJ4bFoyVnVaQ2M2SUZzeExDQW5QR1pwWld4a2MyVjBQaWNzSUNjOEwyWnBaV3hrYzJWMFBpZGRMRnh1SUNBbmNHRnlZVzBuT2lCYk1Td2dKenh2WW1wbFkzUStKeXdnSnp3dmIySnFaV04wUGlkZExGeHVJQ0FuZEhJbk9pQmJNaXdnSnp4MFlXSnNaVDQ4ZEdKdlpIaytKeXdnSnp3dmRHSnZaSGsrUEM5MFlXSnNaVDRuWFN4Y2JseHVJQ0FuYjNCMFozSnZkWEFuT2lCelpXeGxZM1JYY21Gd0xGeHVJQ0FuYjNCMGFXOXVKem9nYzJWc1pXTjBWM0poY0N4Y2JseHVJQ0FuWTJGd2RHbHZiaWM2SUhSaFlteGxWM0poY0N4Y2JpQWdKMk52YkdkeWIzVndKem9nZEdGaWJHVlhjbUZ3TEZ4dUlDQW5kR0p2Wkhrbk9pQjBZV0pzWlZkeVlYQXNYRzRnSUNkMFptOXZkQ2M2SUhSaFlteGxWM0poY0N4Y2JpQWdKM1JvWldGa0p6b2dkR0ZpYkdWWGNtRndMRnh1WEc0Z0lDZDBaQ2M2SUhSeVYzSmhjQ3hjYmlBZ0ozUm9Kem9nZEhKWGNtRndMRnh1WEc0Z0lDZGphWEpqYkdVbk9pQnpkbWRYY21Gd0xGeHVJQ0FuWTJ4cGNGQmhkR2duT2lCemRtZFhjbUZ3TEZ4dUlDQW5aR1ZtY3ljNklITjJaMWR5WVhBc1hHNGdJQ2RsYkd4cGNITmxKem9nYzNablYzSmhjQ3hjYmlBZ0oyY25PaUJ6ZG1kWGNtRndMRnh1SUNBbmJHbHVaU2M2SUhOMloxZHlZWEFzWEc0Z0lDZHNhVzVsWVhKSGNtRmthV1Z1ZENjNklITjJaMWR5WVhBc1hHNGdJQ2R3WVhSb0p6b2djM1puVjNKaGNDeGNiaUFnSjNCdmJIbG5iMjRuT2lCemRtZFhjbUZ3TEZ4dUlDQW5jRzlzZVd4cGJtVW5PaUJ6ZG1kWGNtRndMRnh1SUNBbmNtRmthV0ZzUjNKaFpHbGxiblFuT2lCemRtZFhjbUZ3TEZ4dUlDQW5jbVZqZENjNklITjJaMWR5WVhBc1hHNGdJQ2R6ZEc5d0p6b2djM1puVjNKaGNDeGNiaUFnSjNSbGVIUW5PaUJ6ZG1kWGNtRndYRzU5TzF4dVhHNHZLaXBjYmlBcUlFZGxkSE1nZEdobElHMWhjbXQxY0NCM2NtRndJR052Ym1acFozVnlZWFJwYjI0Z1ptOXlJSFJvWlNCemRYQndiR2xsWkNCZ2JtOWtaVTVoYldWZ0xseHVJQ3BjYmlBcUlFNVBWRVU2SUZSb2FYTWdiR0Y2YVd4NUlHUmxkR1ZqZEhNZ2QyaHBZMmdnZDNKaGNITWdZWEpsSUc1bFkyVnpjMkZ5ZVNCbWIzSWdkR2hsSUdOMWNuSmxiblFnWW5KdmQzTmxjaTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdibTlrWlU1aGJXVWdURzkzWlhKallYTmxJR0J1YjJSbFRtRnRaV0F1WEc0Z0tpQkFjbVYwZFhKdUlIcy9ZWEp5WVhsOUlFMWhjbXQxY0NCM2NtRndJR052Ym1acFozVnlZWFJwYjI0c0lHbG1JR0Z3Y0d4cFkyRmliR1V1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR2RsZEUxaGNtdDFjRmR5WVhBb2JtOWtaVTVoYldVcElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2doSVdSMWJXMTVUbTlrWlN3Z0owMWhjbXQxY0NCM2NtRndjR2x1WnlCdWIyUmxJRzV2ZENCcGJtbDBhV0ZzYVhwbFpDY3BJRG9nYVc1MllYSnBZVzUwS0NFaFpIVnRiWGxPYjJSbEtTazdYRzRnSUdsbUlDZ2hiV0Z5YTNWd1YzSmhjQzVvWVhOUGQyNVFjbTl3WlhKMGVTaHViMlJsVG1GdFpTa3BJSHRjYmlBZ0lDQnViMlJsVG1GdFpTQTlJQ2NxSnp0Y2JpQWdmVnh1SUNCcFppQW9JWE5vYjNWc1pGZHlZWEF1YUdGelQzZHVVSEp2Y0dWeWRIa29ibTlrWlU1aGJXVXBLU0I3WEc0Z0lDQWdhV1lnS0c1dlpHVk9ZVzFsSUQwOVBTQW5LaWNwSUh0Y2JpQWdJQ0FnSUdSMWJXMTVUbTlrWlM1cGJtNWxja2hVVFV3Z1BTQW5QR3hwYm1zZ0x6NG5PMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCa2RXMXRlVTV2WkdVdWFXNXVaWEpJVkUxTUlEMGdKenduSUNzZ2JtOWtaVTVoYldVZ0t5QW5Qand2SnlBcklHNXZaR1ZPWVcxbElDc2dKejRuTzF4dUlDQWdJSDFjYmlBZ0lDQnphRzkxYkdSWGNtRndXMjV2WkdWT1lXMWxYU0E5SUNGa2RXMXRlVTV2WkdVdVptbHljM1JEYUdsc1pEdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2MyaHZkV3hrVjNKaGNGdHViMlJsVG1GdFpWMGdQeUJ0WVhKcmRYQlhjbUZ3VzI1dlpHVk9ZVzFsWFNBNklHNTFiR3c3WEc1OVhHNWNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JuWlhSTllYSnJkWEJYY21Gd08xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogR2l2ZW4gYW55IG5vZGUgcmV0dXJuIHRoZSBmaXJzdCBsZWFmIG5vZGUgd2l0aG91dCBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG5leHQgc2libGluZyB3aXRoaW4gYSBjb250YWluZXIuIFRoaXMgd2lsbCB3YWxrIHVwIHRoZVxuICogRE9NIGlmIGEgbm9kZSdzIHNpYmxpbmdzIGhhdmUgYmVlbiBleGhhdXN0ZWQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2libGluZ05vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICB9XG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9kZXMgd2hpY2ggY29udGFpbiBjaGFyYWN0ZXJzIGF0IG9mZnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IHJvb3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQocm9vdCwgb2Zmc2V0KSB7XG4gIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gIHZhciBub2RlU3RhcnQgPSAwO1xuICB2YXIgbm9kZUVuZCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgbm9kZUVuZCA9IG5vZGVTdGFydCArIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZVN0YXJ0IDw9IG9mZnNldCAmJiBub2RlRW5kID49IG9mZnNldCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQgLSBub2RlU3RhcnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbm9kZVN0YXJ0ID0gbm9kZUVuZDtcbiAgICB9XG5cbiAgICBub2RlID0gZ2V0TGVhZk5vZGUoZ2V0U2libGluZ05vZGUobm9kZSkpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET0NfTk9ERV9UWVBFID0gOTtcblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NRG9jdW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0aGF0IG1heSBjb250YWluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIFJlYWN0IGNvbXBvbmVudFxuICogQHJldHVybiB7Pyp9IERPTSBlbGVtZW50IHRoYXQgbWF5IGhhdmUgdGhlIHJlYWN0Um9vdCBJRCwgb3IgbnVsbC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQRSkge1xuICAgIHJldHVybiBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRUZXh0Q29udGVudEFjY2Vzc29yXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIGNvbnRlbnRLZXkgPSBudWxsO1xuXG4vKipcbiAqIEdldHMgdGhlIGtleSB1c2VkIHRvIGFjY2VzcyB0ZXh0IGNvbnRlbnQgb24gYSBET00gbm9kZS5cbiAqXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBLZXkgdXNlZCB0byBhY2Nlc3MgdGV4dCBjb250ZW50LlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFRleHRDb250ZW50QWNjZXNzb3IoKSB7XG4gIGlmICghY29udGVudEtleSAmJiBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgICAvLyBQcmVmZXIgdGV4dENvbnRlbnQgdG8gaW5uZXJUZXh0IGJlY2F1c2UgbWFueSBicm93c2VycyBzdXBwb3J0IGJvdGggYnV0XG4gICAgLy8gU1ZHIDx0ZXh0PiBlbGVtZW50cyBkb24ndCBzdXBwb3J0IGlubmVyVGV4dCBldmVuIHdoZW4gPGRpdj4gZG9lcy5cbiAgICBjb250ZW50S2V5ID0gJ3RleHRDb250ZW50JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgP1xuICAgICAgJ3RleHRDb250ZW50JyA6XG4gICAgICAnaW5uZXJUZXh0JztcbiAgfVxuICByZXR1cm4gY29udGVudEtleTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUZXh0Q29udGVudEFjY2Vzc29yO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIEdldHMgdGhlIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgc3VwcGxpZWQgZWxlbWVudCBvciB3aW5kb3cuXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZXMgYXJlIHVuYm91bmRlZCwgdW5saWtlIGBnZXRTY3JvbGxQb3NpdGlvbmAuIFRoaXMgbWVhbnMgdGhleVxuICogbWF5IGJlIG5lZ2F0aXZlIG9yIGV4Y2VlZCB0aGUgZWxlbWVudCBib3VuZGFyaWVzICh3aGljaCBpcyBwb3NzaWJsZSB1c2luZ1xuICogaW5lcnRpYWwgc2Nyb2xsaW5nKS5cbiAqXG4gKiBAcGFyYW0ge0RPTVdpbmRvd3xET01FbGVtZW50fSBzY3JvbGxhYmxlXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcCB3aXRoIGB4YCBhbmQgYHlgIGtleXMuXG4gKi9cbmZ1bmN0aW9uIGdldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uKHNjcm9sbGFibGUpIHtcbiAgaWYgKHNjcm9sbGFibGUgPT09IHdpbmRvdykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICB5OiB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiBzY3JvbGxhYmxlLnNjcm9sbExlZnQsXG4gICAgeTogc2Nyb2xsYWJsZS5zY3JvbGxUb3BcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBoeXBoZW5hdGVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIF91cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztcblxuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBzdHJpbmcsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqXG4gKiBGb3IgQ1NTIHN0eWxlIG5hbWVzLCB1c2UgYGh5cGhlbmF0ZVN0eWxlTmFtZWAgaW5zdGVhZCB3aGljaCB3b3JrcyBwcm9wZXJseVxuICogd2l0aCBhbGwgdmVuZG9yIHByZWZpeGVzLCBpbmNsdWRpbmcgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGh5cGhlbmF0ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF91cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoeXBoZW5hdGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgaHlwaGVuYXRlU3R5bGVOYW1lXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgaHlwaGVuYXRlID0gcmVxdWlyZShcIi4vaHlwaGVuYXRlXCIpO1xuXG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuXG4vKipcbiAqIEh5cGhlbmF0ZXMgYSBjYW1lbGNhc2VkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdiYWNrZ3JvdW5kQ29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZC1jb2xvclwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdNb3pUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tb3otdHJhbnNpdGlvblwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdtc1RyYW5zaXRpb24nKVxuICogICA8IFwiLW1zLXRyYW5zaXRpb25cIlxuICpcbiAqIEFzIE1vZGVybml6ciBzdWdnZXN0cyAoaHR0cDovL21vZGVybml6ci5jb20vZG9jcy8jcHJlZml4ZWQpLCBhbiBgbXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGAtbXMtYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShzdHJpbmcpIHtcbiAgcmV0dXJuIGh5cGhlbmF0ZShzdHJpbmcpLnJlcGxhY2UobXNQYXR0ZXJuLCAnLW1zLScpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGh5cGhlbmF0ZVN0eWxlTmFtZTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50XCIpO1xudmFyIFJlYWN0RW1wdHlDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVtcHR5Q29tcG9uZW50XCIpO1xudmFyIFJlYWN0TmF0aXZlQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3ROYXRpdmVDb21wb25lbnRcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuLy8gVG8gYXZvaWQgYSBjeWNsaWMgZGVwZW5kZW5jeSwgd2UgY3JlYXRlIHRoZSBmaW5hbCBjbGFzcyBpbiB0aGlzIG1vZHVsZVxudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlciA9IGZ1bmN0aW9uKCkgeyB9O1xuYXNzaWduKFxuICBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudFdyYXBwZXIucHJvdG90eXBlLFxuICBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5NaXhpbixcbiAge1xuICAgIF9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50OiBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50XG4gIH1cbik7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHR5cGUgcmVmZXJlbmNlIGlzIGEga25vd24gaW50ZXJuYWwgdHlwZS4gSS5lLiBub3QgYSB1c2VyXG4gKiBwcm92aWRlZCBjb21wb3NpdGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIHZhbGlkIGludGVybmFsIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZXJuYWxDb21wb25lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB0eXBlLnByb3RvdHlwZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgdHlwZS5wcm90b3R5cGUubW91bnRDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgdHlwZS5wcm90b3R5cGUucmVjZWl2ZUNvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgUmVhY3ROb2RlLCBjcmVhdGUgYW4gaW5zdGFuY2UgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIG1vdW50ZWQuXG4gKlxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7Kn0gcGFyZW50Q29tcG9zaXRlVHlwZSBUaGUgY29tcG9zaXRlIHR5cGUgdGhhdCByZXNvbHZlZCB0aGlzLlxuICogQHJldHVybiB7b2JqZWN0fSBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgZWxlbWVudCdzIGNvbnN0cnVjdG9yLlxuICogQHByb3RlY3RlZFxuICovXG5mdW5jdGlvbiBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG5vZGUsIHBhcmVudENvbXBvc2l0ZVR5cGUpIHtcbiAgdmFyIGluc3RhbmNlO1xuXG4gIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IGZhbHNlKSB7XG4gICAgbm9kZSA9IFJlYWN0RW1wdHlDb21wb25lbnQuZW1wdHlFbGVtZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBlbGVtZW50ID0gbm9kZTtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgZWxlbWVudCAmJiAodHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZWxlbWVudC50eXBlID09PSAnc3RyaW5nJyksXG4gICAgICAgICdPbmx5IGZ1bmN0aW9ucyBvciBzdHJpbmdzIGNhbiBiZSBtb3VudGVkIGFzIFJlYWN0IGNvbXBvbmVudHMuJ1xuICAgICAgKSA6IG51bGwpO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZSBzdHJpbmcgdmFsdWVzXG4gICAgaWYgKHBhcmVudENvbXBvc2l0ZVR5cGUgPT09IGVsZW1lbnQudHlwZSAmJlxuICAgICAgICB0eXBlb2YgZWxlbWVudC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gQXZvaWQgcmVjdXJzaW9uIGlmIHRoZSB3cmFwcGVyIHJlbmRlcnMgaXRzZWxmLlxuICAgICAgaW5zdGFuY2UgPSBSZWFjdE5hdGl2ZUNvbXBvbmVudC5jcmVhdGVJbnRlcm5hbENvbXBvbmVudChlbGVtZW50KTtcbiAgICAgIC8vIEFsbCBuYXRpdmUgY29tcG9uZW50cyBhcmUgY3VycmVudGx5IHdyYXBwZWQgaW4gYSBjb21wb3NpdGUgc28gd2UncmVcbiAgICAgIC8vIHNhZmUgdG8gYXNzdW1lIHRoYXQgdGhpcyBpcyB3aGF0IHdlIHNob3VsZCBpbnN0YW50aWF0ZS5cbiAgICB9IGVsc2UgaWYgKGlzSW50ZXJuYWxDb21wb25lbnRUeXBlKGVsZW1lbnQudHlwZSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGVtcG9yYXJpbHkgYXZhaWxhYmxlIGZvciBjdXN0b20gY29tcG9uZW50cyB0aGF0IGFyZSBub3Qgc3RyaW5nXG4gICAgICAvLyByZXByZXNlbmF0aW9ucy4gSS5lLiBBUlQuIE9uY2UgdGhvc2UgYXJlIHVwZGF0ZWQgdG8gdXNlIHRoZSBzdHJpbmdcbiAgICAgIC8vIHJlcHJlc2VudGF0aW9uLCB3ZSBjYW4gZHJvcCB0aGlzIGNvZGUgcGF0aC5cbiAgICAgIGluc3RhbmNlID0gbmV3IGVsZW1lbnQudHlwZShlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2UgPSBuZXcgUmVhY3RDb21wb3NpdGVDb21wb25lbnRXcmFwcGVyKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygbm9kZSA9PT0gJ251bWJlcicpIHtcbiAgICBpbnN0YW5jZSA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmNyZWF0ZUluc3RhbmNlRm9yVGV4dChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnRW5jb3VudGVyZWQgaW52YWxpZCBSZWFjdCBub2RlIG9mIHR5cGUgJXMnLFxuICAgICAgdHlwZW9mIG5vZGVcbiAgICApIDogaW52YXJpYW50KGZhbHNlKSk7XG4gIH1cblxuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICB0eXBlb2YgaW5zdGFuY2UuY29uc3RydWN0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgaW5zdGFuY2UubW91bnRDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBpbnN0YW5jZS5yZWNlaXZlQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgaW5zdGFuY2UudW5tb3VudENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdPbmx5IFJlYWN0IENvbXBvbmVudHMgY2FuIGJlIG1vdW50ZWQuJ1xuICAgICkgOiBudWxsKTtcbiAgfVxuXG4gIC8vIFNldHMgdXAgdGhlIGluc3RhbmNlLiBUaGlzIGNhbiBwcm9iYWJseSBqdXN0IG1vdmUgaW50byB0aGUgY29uc3RydWN0b3Igbm93LlxuICBpbnN0YW5jZS5jb25zdHJ1Y3Qobm9kZSk7XG5cbiAgLy8gVGhlc2UgdHdvIGZpZWxkcyBhcmUgdXNlZCBieSB0aGUgRE9NIGFuZCBBUlQgZGlmZmluZyBhbGdvcml0aG1zXG4gIC8vIHJlc3BlY3RpdmVseS4gSW5zdGVhZCBvZiB1c2luZyBleHBhbmRvcyBvbiBjb21wb25lbnRzLCB3ZSBzaG91bGQgYmVcbiAgLy8gc3RvcmluZyB0aGUgc3RhdGUgbmVlZGVkIGJ5IHRoZSBkaWZmaW5nIGFsZ29yaXRobXMgZWxzZXdoZXJlLlxuICBpbnN0YW5jZS5fbW91bnRJbmRleCA9IDA7XG4gIGluc3RhbmNlLl9tb3VudEltYWdlID0gbnVsbDtcblxuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgaW5zdGFuY2UuX2lzT3duZXJOZWNlc3NhcnkgPSBmYWxzZTtcbiAgICBpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGluc3RhbmNlcyBzaG91bGQgZnVsbHkgY29uc3RydWN0ZWQgYXQgdGhpcyBwb2ludCwgc28gdGhleSBzaG91bGRcbiAgLy8gbm90IGdldCBhbnkgbmV3IGZpZWxkcyBhZGRlZCB0byB0aGVtIGF0IHRoaXMgcG9pbnQuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICBpZiAoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7XG4gICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2YVc1emRHRnVkR2xoZEdWU1pXRmpkRU52YlhCdmJtVnVkQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnYVc1emRHRnVkR2xoZEdWU1pXRmpkRU52YlhCdmJtVnVkRnh1SUNvZ1FIUjVjR1ZqYUdWamEzTWdjM1JoZEdsakxXOXViSGxjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRU52YlhCdmMybDBaVU52YlhCdmJtVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwWENJcE8xeHVkbUZ5SUZKbFlXTjBSVzF3ZEhsRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFVnRjSFI1UTI5dGNHOXVaVzUwWENJcE8xeHVkbUZ5SUZKbFlXTjBUbUYwYVhabFEyOXRjRzl1Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUk9ZWFJwZG1WRGIyMXdiMjVsYm5SY0lpazdYRzVjYm5aaGNpQmhjM05wWjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlQWW1wbFkzUXVZWE56YVdkdVhDSXBPMXh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNiblpoY2lCM1lYSnVhVzVuSUQwZ2NtVnhkV2x5WlNoY0lpNHZkMkZ5Ym1sdVoxd2lLVHRjYmx4dUx5OGdWRzhnWVhadmFXUWdZU0JqZVdOc2FXTWdaR1Z3Wlc1a1pXNWplU3dnZDJVZ1kzSmxZWFJsSUhSb1pTQm1hVzVoYkNCamJHRnpjeUJwYmlCMGFHbHpJRzF2WkhWc1pWeHVkbUZ5SUZKbFlXTjBRMjl0Y0c5emFYUmxRMjl0Y0c5dVpXNTBWM0poY0hCbGNpQTlJR1oxYm1OMGFXOXVLQ2tnZXlCOU8xeHVZWE56YVdkdUtGeHVJQ0JTWldGamRFTnZiWEJ2YzJsMFpVTnZiWEJ2Ym1WdWRGZHlZWEJ3WlhJdWNISnZkRzkwZVhCbExGeHVJQ0JTWldGamRFTnZiWEJ2YzJsMFpVTnZiWEJ2Ym1WdWRDNU5hWGhwYml4Y2JpQWdlMXh1SUNBZ0lGOXBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1ME9pQnBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MFhHNGdJSDFjYmlrN1hHNWNiaThxS2x4dUlDb2dRMmhsWTJzZ2FXWWdkR2hsSUhSNWNHVWdjbVZtWlhKbGJtTmxJR2x6SUdFZ2EyNXZkMjRnYVc1MFpYSnVZV3dnZEhsd1pTNGdTUzVsTGlCdWIzUWdZU0IxYzJWeVhHNGdLaUJ3Y205MmFXUmxaQ0JqYjIxd2IzTnBkR1VnZEhsd1pTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQjBlWEJsWEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZTQlNaWFIxY201eklIUnlkV1VnYVdZZ2RHaHBjeUJwY3lCaElIWmhiR2xrSUdsdWRHVnlibUZzSUhSNWNHVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHbHpTVzUwWlhKdVlXeERiMjF3YjI1bGJuUlVlWEJsS0hSNWNHVXBJSHRjYmlBZ2NtVjBkWEp1SUNoY2JpQWdJQ0IwZVhCbGIyWWdkSGx3WlNBOVBUMGdKMloxYm1OMGFXOXVKeUFtSmx4dUlDQWdJSFI1Y0dWdlppQjBlWEJsTG5CeWIzUnZkSGx3WlNBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NnSmlaY2JpQWdJQ0IwZVhCbGIyWWdkSGx3WlM1d2NtOTBiM1I1Y0dVdWJXOTFiblJEYjIxd2IyNWxiblFnUFQwOUlDZG1kVzVqZEdsdmJpY2dKaVpjYmlBZ0lDQjBlWEJsYjJZZ2RIbHdaUzV3Y205MGIzUjVjR1V1Y21WalpXbDJaVU52YlhCdmJtVnVkQ0E5UFQwZ0oyWjFibU4wYVc5dUoxeHVJQ0FwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRwZG1WdUlHRWdVbVZoWTNST2IyUmxMQ0JqY21WaGRHVWdZVzRnYVc1emRHRnVZMlVnZEdoaGRDQjNhV3hzSUdGamRIVmhiR3g1SUdKbElHMXZkVzUwWldRdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRTV2WkdWOUlHNXZaR1ZjYmlBcUlFQndZWEpoYlNCN0tuMGdjR0Z5Wlc1MFEyOXRjRzl6YVhSbFZIbHdaU0JVYUdVZ1kyOXRjRzl6YVhSbElIUjVjR1VnZEdoaGRDQnlaWE52YkhabFpDQjBhR2x6TGx4dUlDb2dRSEpsZEhWeWJpQjdiMkpxWldOMGZTQkJJRzVsZHlCcGJuTjBZVzVqWlNCdlppQjBhR1VnWld4bGJXVnVkQ2R6SUdOdmJuTjBjblZqZEc5eUxseHVJQ29nUUhCeWIzUmxZM1JsWkZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBLRzV2WkdVc0lIQmhjbVZ1ZEVOdmJYQnZjMmwwWlZSNWNHVXBJSHRjYmlBZ2RtRnlJR2x1YzNSaGJtTmxPMXh1WEc0Z0lHbG1JQ2h1YjJSbElEMDlQU0J1ZFd4c0lIeDhJRzV2WkdVZ1BUMDlJR1poYkhObEtTQjdYRzRnSUNBZ2JtOWtaU0E5SUZKbFlXTjBSVzF3ZEhsRGIyMXdiMjVsYm5RdVpXMXdkSGxGYkdWdFpXNTBPMXh1SUNCOVhHNWNiaUFnYVdZZ0tIUjVjR1Z2WmlCdWIyUmxJRDA5UFNBbmIySnFaV04wSnlrZ2UxeHVJQ0FnSUhaaGNpQmxiR1Z0Wlc1MElEMGdibTlrWlR0Y2JpQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdaV3hsYldWdWRDQW1KaUFvZEhsd1pXOW1JR1ZzWlcxbGJuUXVkSGx3WlNBOVBUMGdKMloxYm1OMGFXOXVKeUI4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBlWEJsYjJZZ1pXeGxiV1Z1ZEM1MGVYQmxJRDA5UFNBbmMzUnlhVzVuSnlrc1hHNGdJQ0FnSUNBZ0lDZFBibXg1SUdaMWJtTjBhVzl1Y3lCdmNpQnpkSEpwYm1keklHTmhiaUJpWlNCdGIzVnVkR1ZrSUdGeklGSmxZV04wSUdOdmJYQnZibVZ1ZEhNdUoxeHVJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklGTndaV05wWVd3Z1kyRnpaU0J6ZEhKcGJtY2dkbUZzZFdWelhHNGdJQ0FnYVdZZ0tIQmhjbVZ1ZEVOdmJYQnZjMmwwWlZSNWNHVWdQVDA5SUdWc1pXMWxiblF1ZEhsd1pTQW1KbHh1SUNBZ0lDQWdJQ0IwZVhCbGIyWWdaV3hsYldWdWRDNTBlWEJsSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdMeThnUVhadmFXUWdjbVZqZFhKemFXOXVJR2xtSUhSb1pTQjNjbUZ3Y0dWeUlISmxibVJsY25NZ2FYUnpaV3htTGx4dUlDQWdJQ0FnYVc1emRHRnVZMlVnUFNCU1pXRmpkRTVoZEdsMlpVTnZiWEJ2Ym1WdWRDNWpjbVZoZEdWSmJuUmxjbTVoYkVOdmJYQnZibVZ1ZENobGJHVnRaVzUwS1R0Y2JpQWdJQ0FnSUM4dklFRnNiQ0J1WVhScGRtVWdZMjl0Y0c5dVpXNTBjeUJoY21VZ1kzVnljbVZ1ZEd4NUlIZHlZWEJ3WldRZ2FXNGdZU0JqYjIxd2IzTnBkR1VnYzI4Z2QyVW5jbVZjYmlBZ0lDQWdJQzh2SUhOaFptVWdkRzhnWVhOemRXMWxJSFJvWVhRZ2RHaHBjeUJwY3lCM2FHRjBJSGRsSUhOb2IzVnNaQ0JwYm5OMFlXNTBhV0YwWlM1Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0dselNXNTBaWEp1WVd4RGIyMXdiMjVsYm5SVWVYQmxLR1ZzWlcxbGJuUXVkSGx3WlNrcElIdGNiaUFnSUNBZ0lDOHZJRlJvYVhNZ2FYTWdkR1Z0Y0c5eVlYSnBiSGtnWVhaaGFXeGhZbXhsSUdadmNpQmpkWE4wYjIwZ1kyOXRjRzl1Wlc1MGN5QjBhR0YwSUdGeVpTQnViM1FnYzNSeWFXNW5YRzRnSUNBZ0lDQXZMeUJ5WlhCeVpYTmxibUYwYVc5dWN5NGdTUzVsTGlCQlVsUXVJRTl1WTJVZ2RHaHZjMlVnWVhKbElIVndaR0YwWldRZ2RHOGdkWE5sSUhSb1pTQnpkSEpwYm1kY2JpQWdJQ0FnSUM4dklISmxjSEpsYzJWdWRHRjBhVzl1TENCM1pTQmpZVzRnWkhKdmNDQjBhR2x6SUdOdlpHVWdjR0YwYUM1Y2JpQWdJQ0FnSUdsdWMzUmhibU5sSUQwZ2JtVjNJR1ZzWlcxbGJuUXVkSGx3WlNobGJHVnRaVzUwS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdhVzV6ZEdGdVkyVWdQU0J1WlhjZ1VtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblJYY21Gd2NHVnlLQ2s3WEc0Z0lDQWdmVnh1SUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCdWIyUmxJRDA5UFNBbmMzUnlhVzVuSnlCOGZDQjBlWEJsYjJZZ2JtOWtaU0E5UFQwZ0oyNTFiV0psY2ljcElIdGNiaUFnSUNCcGJuTjBZVzVqWlNBOUlGSmxZV04wVG1GMGFYWmxRMjl0Y0c5dVpXNTBMbU55WldGMFpVbHVjM1JoYm1ObFJtOXlWR1Y0ZENodWIyUmxLVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBblJXNWpiM1Z1ZEdWeVpXUWdhVzUyWVd4cFpDQlNaV0ZqZENCdWIyUmxJRzltSUhSNWNHVWdKWE1uTEZ4dUlDQWdJQ0FnZEhsd1pXOW1JRzV2WkdWY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHWmhiSE5sS1NrN1hHNGdJSDFjYmx4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0IwZVhCbGIyWWdhVzV6ZEdGdVkyVXVZMjl1YzNSeWRXTjBJRDA5UFNBblpuVnVZM1JwYjI0bklDWW1YRzRnSUNBZ0lDQjBlWEJsYjJZZ2FXNXpkR0Z1WTJVdWJXOTFiblJEYjIxd2IyNWxiblFnUFQwOUlDZG1kVzVqZEdsdmJpY2dKaVpjYmlBZ0lDQWdJSFI1Y0dWdlppQnBibk4wWVc1alpTNXlaV05sYVhabFEyOXRjRzl1Wlc1MElEMDlQU0FuWm5WdVkzUnBiMjRuSUNZbVhHNGdJQ0FnSUNCMGVYQmxiMllnYVc1emRHRnVZMlV1ZFc1dGIzVnVkRU52YlhCdmJtVnVkQ0E5UFQwZ0oyWjFibU4wYVc5dUp5eGNiaUFnSUNBZ0lDZFBibXg1SUZKbFlXTjBJRU52YlhCdmJtVnVkSE1nWTJGdUlHSmxJRzF2ZFc1MFpXUXVKMXh1SUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnZlZ4dVhHNGdJQzh2SUZObGRITWdkWEFnZEdobElHbHVjM1JoYm1ObExpQlVhR2x6SUdOaGJpQndjbTlpWVdKc2VTQnFkWE4wSUcxdmRtVWdhVzUwYnlCMGFHVWdZMjl1YzNSeWRXTjBiM0lnYm05M0xseHVJQ0JwYm5OMFlXNWpaUzVqYjI1emRISjFZM1FvYm05a1pTazdYRzVjYmlBZ0x5OGdWR2hsYzJVZ2RIZHZJR1pwWld4a2N5QmhjbVVnZFhObFpDQmllU0IwYUdVZ1JFOU5JR0Z1WkNCQlVsUWdaR2xtWm1sdVp5QmhiR2R2Y21sMGFHMXpYRzRnSUM4dklISmxjM0JsWTNScGRtVnNlUzRnU1c1emRHVmhaQ0J2WmlCMWMybHVaeUJsZUhCaGJtUnZjeUJ2YmlCamIyMXdiMjVsYm5SekxDQjNaU0J6YUc5MWJHUWdZbVZjYmlBZ0x5OGdjM1J2Y21sdVp5QjBhR1VnYzNSaGRHVWdibVZsWkdWa0lHSjVJSFJvWlNCa2FXWm1hVzVuSUdGc1oyOXlhWFJvYlhNZ1pXeHpaWGRvWlhKbExseHVJQ0JwYm5OMFlXNWpaUzVmYlc5MWJuUkpibVJsZUNBOUlEQTdYRzRnSUdsdWMzUmhibU5sTGw5dGIzVnVkRWx0WVdkbElEMGdiblZzYkR0Y2JseHVJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdhVzV6ZEdGdVkyVXVYMmx6VDNkdVpYSk9aV05sYzNOaGNua2dQU0JtWVd4elpUdGNiaUFnSUNCcGJuTjBZVzVqWlM1ZmQyRnlibVZrUVdKdmRYUlNaV1p6U1c1U1pXNWtaWElnUFNCbVlXeHpaVHRjYmlBZ2ZWeHVYRzRnSUM4dklFbHVkR1Z5Ym1Gc0lHbHVjM1JoYm1ObGN5QnphRzkxYkdRZ1puVnNiSGtnWTI5dWMzUnlkV04wWldRZ1lYUWdkR2hwY3lCd2IybHVkQ3dnYzI4Z2RHaGxlU0J6YUc5MWJHUmNiaUFnTHk4Z2JtOTBJR2RsZENCaGJua2dibVYzSUdacFpXeGtjeUJoWkdSbFpDQjBieUIwYUdWdElHRjBJSFJvYVhNZ2NHOXBiblF1WEc0Z0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNCcFppQW9UMkpxWldOMExuQnlaWFpsYm5SRmVIUmxibk5wYjI1ektTQjdYRzRnSUNBZ0lDQlBZbXBsWTNRdWNISmxkbVZ1ZEVWNGRHVnVjMmx2Ym5Nb2FXNXpkR0Z1WTJVcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCcGJuTjBZVzVqWlR0Y2JuMWNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgaW52YXJpYW50XG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciBpbnZhcmlhbnQgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgK1xuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgJ0ludmFyaWFudCBWaW9sYXRpb246ICcgK1xuICAgICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7IHJldHVybiBhcmdzW2FyZ0luZGV4KytdOyB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2YVc1MllYSnBZVzUwTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCcGJuWmhjbWxoYm5SY2JpQXFMMXh1WEc1Y0luVnpaU0J6ZEhKcFkzUmNJanRjYmx4dUx5b3FYRzRnS2lCVmMyVWdhVzUyWVhKcFlXNTBLQ2tnZEc4Z1lYTnpaWEowSUhOMFlYUmxJSGRvYVdOb0lIbHZkWElnY0hKdlozSmhiU0JoYzNOMWJXVnpJSFJ2SUdKbElIUnlkV1V1WEc0Z0tseHVJQ29nVUhKdmRtbGtaU0J6Y0hKcGJuUm1MWE4wZVd4bElHWnZjbTFoZENBb2IyNXNlU0FsY3lCcGN5QnpkWEJ3YjNKMFpXUXBJR0Z1WkNCaGNtZDFiV1Z1ZEhOY2JpQXFJSFJ2SUhCeWIzWnBaR1VnYVc1bWIzSnRZWFJwYjI0Z1lXSnZkWFFnZDJoaGRDQmljbTlyWlNCaGJtUWdkMmhoZENCNWIzVWdkMlZ5WlZ4dUlDb2daWGh3WldOMGFXNW5MbHh1SUNwY2JpQXFJRlJvWlNCcGJuWmhjbWxoYm5RZ2JXVnpjMkZuWlNCM2FXeHNJR0psSUhOMGNtbHdjR1ZrSUdsdUlIQnliMlIxWTNScGIyNHNJR0oxZENCMGFHVWdhVzUyWVhKcFlXNTBYRzRnS2lCM2FXeHNJSEpsYldGcGJpQjBieUJsYm5OMWNtVWdiRzluYVdNZ1pHOWxjeUJ1YjNRZ1pHbG1abVZ5SUdsdUlIQnliMlIxWTNScGIyNHVYRzRnS2k5Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlHWjFibU4wYVc5dUtHTnZibVJwZEdsdmJpd2dabTl5YldGMExDQmhMQ0JpTENCakxDQmtMQ0JsTENCbUtTQjdYRzRnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0JwWmlBb1ptOXliV0YwSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25hVzUyWVhKcFlXNTBJSEpsY1hWcGNtVnpJR0Z1SUdWeWNtOXlJRzFsYzNOaFoyVWdZWEpuZFcxbGJuUW5LVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JwWmlBb0lXTnZibVJwZEdsdmJpa2dlMXh1SUNBZ0lIWmhjaUJsY25KdmNqdGNiaUFnSUNCcFppQW9abTl5YldGMElEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUdWeWNtOXlJRDBnYm1WM0lFVnljbTl5S0Z4dUlDQWdJQ0FnSUNBblRXbHVhV1pwWldRZ1pYaGpaWEIwYVc5dUlHOWpZM1Z5Y21Wa095QjFjMlVnZEdobElHNXZiaTF0YVc1cFptbGxaQ0JrWlhZZ1pXNTJhWEp2Ym0xbGJuUWdKeUFyWEc0Z0lDQWdJQ0FnSUNkbWIzSWdkR2hsSUdaMWJHd2daWEp5YjNJZ2JXVnpjMkZuWlNCaGJtUWdZV1JrYVhScGIyNWhiQ0JvWld4d1puVnNJSGRoY201cGJtZHpMaWRjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIWmhjaUJoY21keklEMGdXMkVzSUdJc0lHTXNJR1FzSUdVc0lHWmRPMXh1SUNBZ0lDQWdkbUZ5SUdGeVowbHVaR1Y0SUQwZ01EdGNiaUFnSUNBZ0lHVnljbTl5SUQwZ2JtVjNJRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQW5TVzUyWVhKcFlXNTBJRlpwYjJ4aGRHbHZiam9nSnlBclhHNGdJQ0FnSUNBZ0lHWnZjbTFoZEM1eVpYQnNZV05sS0M4bGN5OW5MQ0JtZFc1amRHbHZiaWdwSUhzZ2NtVjBkWEp1SUdGeVozTmJZWEpuU1c1a1pYZ3JLMTA3SUgwcFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdWeWNtOXlMbVp5WVcxbGMxUnZVRzl3SUQwZ01Uc2dMeThnZDJVZ1pHOXVKM1FnWTJGeVpTQmhZbTkxZENCcGJuWmhjbWxoYm5RbmN5QnZkMjRnWm5KaGJXVmNiaUFnSUNCMGFISnZkeUJsY25KdmNqdGNiaUFnZlZ4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JwYm5aaGNtbGhiblE3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgaXNFdmVudFN1cHBvcnRlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciB1c2VIYXNGZWF0dXJlO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICB1c2VIYXNGZWF0dXJlID1cbiAgICBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbiAmJlxuICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUgJiZcbiAgICAvLyBhbHdheXMgcmV0dXJucyB0cnVlIGluIG5ld2VyIGJyb3dzZXJzIGFzIHBlciB0aGUgc3RhbmRhcmQuXG4gICAgLy8gQHNlZSBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWRvbWltcGxlbWVudGF0aW9uLWhhc2ZlYXR1cmVcbiAgICBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCcnLCAnJykgIT09IHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuXG4gKlxuICogTk9URTogVGhpcyB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLWdlbmVyaWMgZXZlbnRzIHN1Y2ggYXMgYGNoYW5nZWAsXG4gKiBgcmVzZXRgLCBgbG9hZGAsIGBlcnJvcmAsIGFuZCBgc2VsZWN0YC5cbiAqXG4gKiBCb3Jyb3dzIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVTdWZmaXggRXZlbnQgbmFtZSwgZS5nLiBcImNsaWNrXCIuXG4gKiBAcGFyYW0gez9ib29sZWFufSBjYXB0dXJlIENoZWNrIGlmIHRoZSBjYXB0dXJlIHBoYXNlIGlzIHN1cHBvcnRlZC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IGlzIHN1cHBvcnRlZC5cbiAqIEBpbnRlcm5hbFxuICogQGxpY2Vuc2UgTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4gKi9cbmZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3VmZml4LCBjYXB0dXJlKSB7XG4gIGlmICghRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NIHx8XG4gICAgICBjYXB0dXJlICYmICEoJ2FkZEV2ZW50TGlzdGVuZXInIGluIGRvY3VtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBldmVudE5hbWUgPSAnb24nICsgZXZlbnROYW1lU3VmZml4O1xuICB2YXIgaXNTdXBwb3J0ZWQgPSBldmVudE5hbWUgaW4gZG9jdW1lbnQ7XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCkge1xuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAncmV0dXJuOycpO1xuICAgIGlzU3VwcG9ydGVkID0gdHlwZW9mIGVsZW1lbnRbZXZlbnROYW1lXSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGlmICghaXNTdXBwb3J0ZWQgJiYgdXNlSGFzRmVhdHVyZSAmJiBldmVudE5hbWVTdWZmaXggPT09ICd3aGVlbCcpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byB0ZXN0IHN1cHBvcnQgZm9yIHRoZSBgd2hlZWxgIGV2ZW50IGluIElFOSsuXG4gICAgaXNTdXBwb3J0ZWQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCdFdmVudHMud2hlZWwnLCAnMy4wJyk7XG4gIH1cblxuICByZXR1cm4gaXNTdXBwb3J0ZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFdmVudFN1cHBvcnRlZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpc05vZGVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIG9iamVjdCBpcyBhIERPTSBub2RlLlxuICovXG5mdW5jdGlvbiBpc05vZGUob2JqZWN0KSB7XG4gIHJldHVybiAhIShvYmplY3QgJiYgKFxuICAgICgodHlwZW9mIE5vZGUgPT09ICdmdW5jdGlvbicgPyBvYmplY3QgaW5zdGFuY2VvZiBOb2RlIDogdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlID09PSAnbnVtYmVyJyAmJlxuICAgIHR5cGVvZiBvYmplY3Qubm9kZU5hbWUgPT09ICdzdHJpbmcnKSlcbiAgKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOb2RlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGlzVGV4dElucHV0RWxlbWVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnlcbiAqL1xudmFyIHN1cHBvcnRlZElucHV0VHlwZXMgPSB7XG4gICdjb2xvcic6IHRydWUsXG4gICdkYXRlJzogdHJ1ZSxcbiAgJ2RhdGV0aW1lJzogdHJ1ZSxcbiAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSxcbiAgJ2VtYWlsJzogdHJ1ZSxcbiAgJ21vbnRoJzogdHJ1ZSxcbiAgJ251bWJlcic6IHRydWUsXG4gICdwYXNzd29yZCc6IHRydWUsXG4gICdyYW5nZSc6IHRydWUsXG4gICdzZWFyY2gnOiB0cnVlLFxuICAndGVsJzogdHJ1ZSxcbiAgJ3RleHQnOiB0cnVlLFxuICAndGltZSc6IHRydWUsXG4gICd1cmwnOiB0cnVlLFxuICAnd2Vlayc6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gIHJldHVybiBlbGVtICYmIChcbiAgICAoZWxlbS5ub2RlTmFtZSA9PT0gJ0lOUFVUJyAmJiBzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV0gfHwgZWxlbS5ub2RlTmFtZSA9PT0gJ1RFWFRBUkVBJylcbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1RleHRJbnB1dEVsZW1lbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgaXNUZXh0Tm9kZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgaXNOb2RlID0gcmVxdWlyZShcIi4vaXNOb2RlXCIpO1xuXG4vKipcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGlzIGEgRE9NIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gaXNUZXh0Tm9kZShvYmplY3QpIHtcbiAgcmV0dXJuIGlzTm9kZShvYmplY3QpICYmIG9iamVjdC5ub2RlVHlwZSA9PSAzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVGV4dE5vZGU7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGtleU1pcnJvclxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbiBlbnVtZXJhdGlvbiB3aXRoIGtleXMgZXF1YWwgdG8gdGhlaXIgdmFsdWUuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKlxuICogICB2YXIgQ09MT1JTID0ga2V5TWlycm9yKHtibHVlOiBudWxsLCByZWQ6IG51bGx9KTtcbiAqICAgdmFyIG15Q29sb3IgPSBDT0xPUlMuYmx1ZTtcbiAqICAgdmFyIGlzQ29sb3JWYWxpZCA9ICEhQ09MT1JTW215Q29sb3JdO1xuICpcbiAqIFRoZSBsYXN0IGxpbmUgY291bGQgbm90IGJlIHBlcmZvcm1lZCBpZiB0aGUgdmFsdWVzIG9mIHRoZSBnZW5lcmF0ZWQgZW51bSB3ZXJlXG4gKiBub3QgZXF1YWwgdG8gdGhlaXIga2V5cy5cbiAqXG4gKiAgIElucHV0OiAge2tleTE6IHZhbDEsIGtleTI6IHZhbDJ9XG4gKiAgIE91dHB1dDoge2tleTE6IGtleTEsIGtleTI6IGtleTJ9XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG52YXIga2V5TWlycm9yID0gZnVuY3Rpb24ob2JqKSB7XG4gIHZhciByZXQgPSB7fTtcbiAgdmFyIGtleTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBvYmogaW5zdGFuY2VvZiBPYmplY3QgJiYgIUFycmF5LmlzQXJyYXkob2JqKSxcbiAgICAna2V5TWlycm9yKC4uLik6IEFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LidcbiAgKSA6IGludmFyaWFudChvYmogaW5zdGFuY2VvZiBPYmplY3QgJiYgIUFycmF5LmlzQXJyYXkob2JqKSkpO1xuICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0W2tleV0gPSBrZXk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5TWlycm9yO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2YTJWNVRXbHljbTl5TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUd0bGVVMXBjbkp2Y2x4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYmk4cUtseHVJQ29nUTI5dWMzUnlkV04wY3lCaGJpQmxiblZ0WlhKaGRHbHZiaUIzYVhSb0lHdGxlWE1nWlhGMVlXd2dkRzhnZEdobGFYSWdkbUZzZFdVdVhHNGdLbHh1SUNvZ1JtOXlJR1Y0WVcxd2JHVTZYRzRnS2x4dUlDb2dJQ0IyWVhJZ1EwOU1UMUpUSUQwZ2EyVjVUV2x5Y205eUtIdGliSFZsT2lCdWRXeHNMQ0J5WldRNklHNTFiR3g5S1R0Y2JpQXFJQ0FnZG1GeUlHMTVRMjlzYjNJZ1BTQkRUMHhQVWxNdVlteDFaVHRjYmlBcUlDQWdkbUZ5SUdselEyOXNiM0pXWVd4cFpDQTlJQ0VoUTA5TVQxSlRXMjE1UTI5c2IzSmRPMXh1SUNwY2JpQXFJRlJvWlNCc1lYTjBJR3hwYm1VZ1kyOTFiR1FnYm05MElHSmxJSEJsY21admNtMWxaQ0JwWmlCMGFHVWdkbUZzZFdWeklHOW1JSFJvWlNCblpXNWxjbUYwWldRZ1pXNTFiU0IzWlhKbFhHNGdLaUJ1YjNRZ1pYRjFZV3dnZEc4Z2RHaGxhWElnYTJWNWN5NWNiaUFxWEc0Z0tpQWdJRWx1Y0hWME9pQWdlMnRsZVRFNklIWmhiREVzSUd0bGVUSTZJSFpoYkRKOVhHNGdLaUFnSUU5MWRIQjFkRG9nZTJ0bGVURTZJR3RsZVRFc0lHdGxlVEk2SUd0bGVUSjlYRzRnS2x4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHOWlhbHh1SUNvZ1FISmxkSFZ5YmlCN2IySnFaV04wZlZ4dUlDb3ZYRzUyWVhJZ2EyVjVUV2x5Y205eUlEMGdablZ1WTNScGIyNG9iMkpxS1NCN1hHNGdJSFpoY2lCeVpYUWdQU0I3ZlR0Y2JpQWdkbUZ5SUd0bGVUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQnZZbW9nYVc1emRHRnVZMlZ2WmlCUFltcGxZM1FnSmlZZ0lVRnljbUY1TG1selFYSnlZWGtvYjJKcUtTeGNiaUFnSUNBbmEyVjVUV2x5Y205eUtDNHVMaWs2SUVGeVozVnRaVzUwSUcxMWMzUWdZbVVnWVc0Z2IySnFaV04wTGlkY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENodlltb2dhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUWdKaVlnSVVGeWNtRjVMbWx6UVhKeVlYa29iMkpxS1NrcE8xeHVJQ0JtYjNJZ0tHdGxlU0JwYmlCdlltb3BJSHRjYmlBZ0lDQnBaaUFvSVc5aWFpNW9ZWE5QZDI1UWNtOXdaWEowZVNoclpYa3BLU0I3WEc0Z0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBXMnRsZVYwZ1BTQnJaWGs3WEc0Z0lIMWNiaUFnY21WMGRYSnVJSEpsZER0Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnYTJWNVRXbHljbTl5TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUga2V5T2ZcbiAqL1xuXG4vKipcbiAqIEFsbG93cyBleHRyYWN0aW9uIG9mIGEgbWluaWZpZWQga2V5LiBMZXQncyB0aGUgYnVpbGQgc3lzdGVtIG1pbmlmeSBrZXlzXG4gKiB3aXRob3V0IGxvb3NpbmcgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgdXNlIGtleSBzdHJpbmdzIGFzIHZhbHVlc1xuICogdGhlbXNlbHZlcy4gUGFzcyBpbiBhbiBvYmplY3Qgd2l0aCBhIHNpbmdsZSBrZXkvdmFsIHBhaXIgYW5kIGl0IHdpbGwgcmV0dXJuXG4gKiB5b3UgdGhlIHN0cmluZyBrZXkgb2YgdGhhdCBzaW5nbGUgcmVjb3JkLiBTdXBwb3NlIHlvdSB3YW50IHRvIGdyYWIgdGhlXG4gKiB2YWx1ZSBmb3IgYSBrZXkgJ2NsYXNzTmFtZScgaW5zaWRlIG9mIGFuIG9iamVjdC4gS2V5L3ZhbCBtaW5pZmljYXRpb24gbWF5XG4gKiBoYXZlIGFsaWFzZWQgdGhhdCBrZXkgdG8gYmUgJ3hhMTInLiBrZXlPZih7Y2xhc3NOYW1lOiBudWxsfSkgd2lsbCByZXR1cm5cbiAqICd4YTEyJyBpbiB0aGF0IGNhc2UuIFJlc29sdmUga2V5cyB5b3Ugd2FudCB0byB1c2Ugb25jZSBhdCBzdGFydHVwIHRpbWUsIHRoZW5cbiAqIHJldXNlIHRob3NlIHJlc29sdXRpb25zLlxuICovXG52YXIga2V5T2YgPSBmdW5jdGlvbihvbmVLZXlPYmopIHtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gb25lS2V5T2JqKSB7XG4gICAgaWYgKCFvbmVLZXlPYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0ga2V5T2Y7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgbWFwT2JqZWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBwcm92aWRlZCBgY2FsbGJhY2tgIG9uY2UgZm9yIGVhY2ggZW51bWVyYWJsZSBvd24gcHJvcGVydHkgaW4gdGhlXG4gKiBvYmplY3QgYW5kIGNvbnN0cnVjdHMgYSBuZXcgb2JqZWN0IGZyb20gdGhlIHJlc3VsdHMuIFRoZSBgY2FsbGJhY2tgIGlzXG4gKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICpcbiAqICAtIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogIC0gdGhlIHByb3BlcnR5IG5hbWVcbiAqICAtIHRoZSBvYmplY3QgYmVpbmcgdHJhdmVyc2VkXG4gKlxuICogUHJvcGVydGllcyB0aGF0IGFyZSBhZGRlZCBhZnRlciB0aGUgY2FsbCB0byBgbWFwT2JqZWN0YCB3aWxsIG5vdCBiZSB2aXNpdGVkXG4gKiBieSBgY2FsbGJhY2tgLiBJZiB0aGUgdmFsdWVzIG9mIGV4aXN0aW5nIHByb3BlcnRpZXMgYXJlIGNoYW5nZWQsIHRoZSB2YWx1ZVxuICogcGFzc2VkIHRvIGBjYWxsYmFja2Agd2lsbCBiZSB0aGUgdmFsdWUgYXQgdGhlIHRpbWUgYG1hcE9iamVjdGAgdmlzaXRzIHRoZW0uXG4gKiBQcm9wZXJ0aWVzIHRoYXQgYXJlIGRlbGV0ZWQgYmVmb3JlIGJlaW5nIHZpc2l0ZWQgYXJlIG5vdCB2aXNpdGVkLlxuICpcbiAqIEBncmVwIGZ1bmN0aW9uIG9iamVjdE1hcCgpXG4gKiBAZ3JlcCBmdW5jdGlvbiBvYmpNYXAoKVxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHsqfSBjb250ZXh0XG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5mdW5jdGlvbiBtYXBPYmplY3Qob2JqZWN0LCBjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIG5hbWUpKSB7XG4gICAgICByZXN1bHRbbmFtZV0gPSBjYWxsYmFjay5jYWxsKGNvbnRleHQsIG9iamVjdFtuYW1lXSwgbmFtZSwgb2JqZWN0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBPYmplY3Q7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgbWVtb2l6ZVN0cmluZ09ubHlcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1lbW9pemVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgb25lIHN0cmluZyBhcmd1bWVudC5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVTdHJpbmdPbmx5KGNhbGxiYWNrKSB7XG4gIHZhciBjYWNoZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgaWYgKCFjYWNoZS5oYXNPd25Qcm9wZXJ0eShzdHJpbmcpKSB7XG4gICAgICBjYWNoZVtzdHJpbmddID0gY2FsbGJhY2suY2FsbCh0aGlzLCBzdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbc3RyaW5nXTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplU3RyaW5nT25seTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgb25seUNoaWxkXG4gKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzXG4gKiBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYSBzaW5nbGUgY2hpbGQgZ2V0cyBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGVcbiAqIHB1cnBvc2Ugb2YgdGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdG8gYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmVcbiAqIG9mIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gY2hpbGRyZW4gQ2hpbGQgY29sbGVjdGlvbiBzdHJ1Y3R1cmUuXG4gKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdENvbXBvbmVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5mdW5jdGlvbiBvbmx5Q2hpbGQoY2hpbGRyZW4pIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pLFxuICAgICdvbmx5Q2hpbGQgbXVzdCBiZSBwYXNzZWQgYSBjaGlsZHJlbiB3aXRoIGV4YWN0bHkgb25lIGNoaWxkLidcbiAgKSA6IGludmFyaWFudChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvbmx5Q2hpbGQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZiMjVzZVVOb2FXeGtMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElHOXViSGxEYUdsc1pGeHVJQ292WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNWNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjBhR1VnWm1seWMzUWdZMmhwYkdRZ2FXNGdZU0JqYjJ4c1pXTjBhVzl1SUc5bUlHTm9hV3hrY21WdUlHRnVaQ0IyWlhKcFptbGxjeUIwYUdGMElIUm9aWEpsWEc0Z0tpQnBjeUJ2Ym14NUlHOXVaU0JqYUdsc1pDQnBiaUIwYUdVZ1kyOXNiR1ZqZEdsdmJpNGdWR2hsSUdOMWNuSmxiblFnYVcxd2JHVnRaVzUwWVhScGIyNGdiMllnZEdocGMxeHVJQ29nWm5WdVkzUnBiMjRnWVhOemRXMWxjeUIwYUdGMElHRWdjMmx1WjJ4bElHTm9hV3hrSUdkbGRITWdjR0Z6YzJWa0lIZHBkR2h2ZFhRZ1lTQjNjbUZ3Y0dWeUxDQmlkWFFnZEdobFhHNGdLaUJ3ZFhKd2IzTmxJRzltSUhSb2FYTWdhR1ZzY0dWeUlHWjFibU4wYVc5dUlHbHpJSFJ2SUdGaWMzUnlZV04wSUdGM1lYa2dkR2hsSUhCaGNuUnBZM1ZzWVhJZ2MzUnlkV04wZFhKbFhHNGdLaUJ2WmlCamFHbHNaSEpsYmk1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZXo5dlltcGxZM1I5SUdOb2FXeGtjbVZ1SUVOb2FXeGtJR052Ykd4bFkzUnBiMjRnYzNSeWRXTjBkWEpsTGx4dUlDb2dRSEpsZEhWeWJpQjdVbVZoWTNSRGIyMXdiMjVsYm5SOUlGUm9aU0JtYVhKemRDQmhibVFnYjI1c2VTQmdVbVZoWTNSRGIyMXdiMjVsYm5SZ0lHTnZiblJoYVc1bFpDQnBiaUIwYUdWY2JpQXFJSE4wY25WamRIVnlaUzVjYmlBcUwxeHVablZ1WTNScGIyNGdiMjVzZVVOb2FXeGtLR05vYVd4a2NtVnVLU0I3WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0dOb2FXeGtjbVZ1S1N4Y2JpQWdJQ0FuYjI1c2VVTm9hV3hrSUcxMWMzUWdZbVVnY0dGemMyVmtJR0VnWTJocGJHUnlaVzRnZDJsMGFDQmxlR0ZqZEd4NUlHOXVaU0JqYUdsc1pDNG5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9VbVZoWTNSRmJHVnRaVzUwTG1selZtRnNhV1JGYkdWdFpXNTBLR05vYVd4a2NtVnVLU2twTzF4dUlDQnlaWFIxY200Z1kyaHBiR1J5Wlc0N1hHNTlYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnYjI1c2VVTm9hV3hrTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgcGVyZm9ybWFuY2VcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgcGVyZm9ybWFuY2U7XG5cbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgcGVyZm9ybWFuY2UgPVxuICAgIHdpbmRvdy5wZXJmb3JtYW5jZSB8fFxuICAgIHdpbmRvdy5tc1BlcmZvcm1hbmNlIHx8XG4gICAgd2luZG93LndlYmtpdFBlcmZvcm1hbmNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBlcmZvcm1hbmNlIHx8IHt9O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHBlcmZvcm1hbmNlTm93XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBwZXJmb3JtYW5jZSA9IHJlcXVpcmUoXCIuL3BlcmZvcm1hbmNlXCIpO1xuXG4vKipcbiAqIERldGVjdCBpZiB3ZSBjYW4gdXNlIGB3aW5kb3cucGVyZm9ybWFuY2Uubm93KClgIGFuZCBncmFjZWZ1bGx5IGZhbGxiYWNrIHRvXG4gKiBgRGF0ZS5ub3coKWAgaWYgaXQgZG9lc24ndCBleGlzdC4gV2UgbmVlZCB0byBzdXBwb3J0IEZpcmVmb3ggPCAxNSBmb3Igbm93XG4gKiBiZWNhdXNlIG9mIEZhY2Vib29rJ3MgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7XG4gIHBlcmZvcm1hbmNlID0gRGF0ZTtcbn1cblxudmFyIHBlcmZvcm1hbmNlTm93ID0gcGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBlcmZvcm1hbmNlTm93O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyID0gcmVxdWlyZShcIi4vZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyXCIpO1xuXG4vKipcbiAqIEVzY2FwZXMgYXR0cmlidXRlIHZhbHVlIHRvIHByZXZlbnQgc2NyaXB0aW5nIGF0dGFja3MuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEFuIGVzY2FwZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3Nlcih2YWx1ZSkge1xuICByZXR1cm4gJ1wiJyArIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3Nlcih2YWx1ZSkgKyAnXCInO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHNldElubmVySFRNTFxuICovXG5cbi8qIGdsb2JhbHMgTVNBcHAgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIFdISVRFU1BBQ0VfVEVTVCA9IC9eWyBcXHJcXG5cXHRcXGZdLztcbnZhciBOT05WSVNJQkxFX1RFU1QgPSAvPCghLS18bGlua3xub3NjcmlwdHxtZXRhfHNjcmlwdHxzdHlsZSlbIFxcclxcblxcdFxcZlxcLz5dLztcblxuLyoqXG4gKiBTZXQgdGhlIGlubmVySFRNTCBwcm9wZXJ0eSBvZiBhIG5vZGUsIGVuc3VyaW5nIHRoYXQgd2hpdGVzcGFjZSBpcyBwcmVzZXJ2ZWRcbiAqIGV2ZW4gaW4gSUU4LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgc2V0SW5uZXJIVE1MID0gZnVuY3Rpb24obm9kZSwgaHRtbCkge1xuICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG59O1xuXG4vLyBXaW44IGFwcHM6IEFsbG93IGFsbCBodG1sIHRvIGJlIGluc2VydGVkXG5pZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICBzZXRJbm5lckhUTUwgPSBmdW5jdGlvbihub2RlLCBodG1sKSB7XG4gICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKSB7XG4gICAgICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG4gICAgfSk7XG4gIH07XG59XG5cbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgLy8gSUU4OiBXaGVuIHVwZGF0aW5nIGEganVzdCBjcmVhdGVkIG5vZGUgd2l0aCBpbm5lckhUTUwgb25seSBsZWFkaW5nXG4gIC8vIHdoaXRlc3BhY2UgaXMgcmVtb3ZlZC4gV2hlbiB1cGRhdGluZyBhbiBleGlzdGluZyBub2RlIHdpdGggaW5uZXJIVE1MXG4gIC8vIHdoaXRlc3BhY2UgaW4gcm9vdCBUZXh0Tm9kZXMgaXMgYWxzbyBjb2xsYXBzZWQuXG4gIC8vIEBzZWUgcXVpcmtzbW9kZS5vcmcvYnVncmVwb3J0cy9hcmNoaXZlcy8yMDA0LzExL2lubmVyaHRtbF9hbmRfdC5odG1sXG5cbiAgLy8gRmVhdHVyZSBkZXRlY3Rpb247IG9ubHkgSUU4IGlzIGtub3duIHRvIGJlaGF2ZSBpbXByb3Blcmx5IGxpa2UgdGhpcy5cbiAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHRlc3RFbGVtZW50LmlubmVySFRNTCA9ICcgJztcbiAgaWYgKHRlc3RFbGVtZW50LmlubmVySFRNTCA9PT0gJycpIHtcbiAgICBzZXRJbm5lckhUTUwgPSBmdW5jdGlvbihub2RlLCBodG1sKSB7XG4gICAgICAvLyBNYWdpYyB0aGVvcnk6IElFOCBzdXBwb3NlZGx5IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gYWRkZWQgYW5kIHVwZGF0ZWRcbiAgICAgIC8vIG5vZGVzIHdoZW4gcHJvY2Vzc2luZyBpbm5lckhUTUwsIGlubmVySFRNTCBvbiB1cGRhdGVkIG5vZGVzIHN1ZmZlcnNcbiAgICAgIC8vIGZyb20gd29yc2Ugd2hpdGVzcGFjZSBiZWhhdmlvci4gUmUtYWRkaW5nIGEgbm9kZSBsaWtlIHRoaXMgdHJpZ2dlcnNcbiAgICAgIC8vIHRoZSBpbml0aWFsIGFuZCBtb3JlIGZhdm9yYWJsZSB3aGl0ZXNwYWNlIGJlaGF2aW9yLlxuICAgICAgLy8gVE9ETzogV2hhdCB0byBkbyBvbiBhIGRldGFjaGVkIG5vZGU/XG4gICAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobm9kZSwgbm9kZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGFsc28gaW1wbGVtZW50IGEgd29ya2Fyb3VuZCBmb3Igbm9uLXZpc2libGUgdGFncyBkaXNhcHBlYXJpbmcgaW50b1xuICAgICAgLy8gdGhpbiBhaXIgb24gSUU4LCB0aGlzIG9ubHkgaGFwcGVucyBpZiB0aGVyZSBpcyBubyB2aXNpYmxlIHRleHRcbiAgICAgIC8vIGluLWZyb250IG9mIHRoZSBub24tdmlzaWJsZSB0YWdzLiBQaWdneWJhY2sgb24gdGhlIHdoaXRlc3BhY2UgZml4XG4gICAgICAvLyBhbmQgc2ltcGx5IGNoZWNrIGlmIGFueSBub24tdmlzaWJsZSB0YWdzIGFwcGVhciBpbiB0aGUgc291cmNlLlxuICAgICAgaWYgKFdISVRFU1BBQ0VfVEVTVC50ZXN0KGh0bWwpIHx8XG4gICAgICAgICAgaHRtbFswXSA9PT0gJzwnICYmIE5PTlZJU0lCTEVfVEVTVC50ZXN0KGh0bWwpKSB7XG4gICAgICAgIC8vIFJlY292ZXIgbGVhZGluZyB3aGl0ZXNwYWNlIGJ5IHRlbXBvcmFyaWx5IHByZXBlbmRpbmcgYW55IGNoYXJhY3Rlci5cbiAgICAgICAgLy8gXFx1RkVGRiBoYXMgdGhlIHBvdGVudGlhbCBhZHZhbnRhZ2Ugb2YgYmVpbmcgemVyby13aWR0aC9pbnZpc2libGUuXG4gICAgICAgIG5vZGUuaW5uZXJIVE1MID0gJ1xcdUZFRkYnICsgaHRtbDtcblxuICAgICAgICAvLyBkZWxldGVEYXRhIGxlYXZlcyBhbiBlbXB0eSBgVGV4dE5vZGVgIHdoaWNoIG9mZnNldHMgdGhlIGluZGV4IG9mIGFsbFxuICAgICAgICAvLyBjaGlsZHJlbi4gRGVmaW5pdGVseSB3YW50IHRvIGF2b2lkIHRoaXMuXG4gICAgICAgIHZhciB0ZXh0Tm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKHRleHROb2RlLmRhdGEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgbm9kZS5yZW1vdmVDaGlsZCh0ZXh0Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dE5vZGUuZGVsZXRlRGF0YSgwLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRJbm5lckhUTUw7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgc2V0VGV4dENvbnRlbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xudmFyIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlciA9IHJlcXVpcmUoXCIuL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlclwiKTtcbnZhciBzZXRJbm5lckhUTUwgPSByZXF1aXJlKFwiLi9zZXRJbm5lckhUTUxcIik7XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0Q29udGVudCBwcm9wZXJ0eSBvZiBhIG5vZGUsIGVuc3VyaW5nIHRoYXQgd2hpdGVzcGFjZSBpcyBwcmVzZXJ2ZWRcbiAqIGV2ZW4gaW4gSUU4LiBpbm5lclRleHQgaXMgYSBwb29yIHN1YnN0aXR1dGUgZm9yIHRleHRDb250ZW50IGFuZCwgYW1vbmcgbWFueVxuICogaXNzdWVzLCBpbnNlcnRzIDxicj4gaW5zdGVhZCBvZiB0aGUgbGl0ZXJhbCBuZXdsaW5lIGNoYXJzLiBpbm5lckhUTUwgYmVoYXZlc1xuICogYXMgaXQgc2hvdWxkLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgc2V0VGV4dENvbnRlbnQgPSBmdW5jdGlvbihub2RlLCB0ZXh0KSB7XG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufTtcblxuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICBpZiAoISgndGV4dENvbnRlbnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpIHtcbiAgICBzZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uKG5vZGUsIHRleHQpIHtcbiAgICAgIHNldElubmVySFRNTChub2RlLCBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIodGV4dCkpO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUZXh0Q29udGVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBzaGFsbG93RXF1YWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZ1xuICogZmFsc2Ugd2hlbiBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBlcXVhbCBiZXR3ZWVuXG4gKiBvYmpBIGFuZCBvYmpCLiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWVzIG9mIGFsbCBrZXlzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBrZXk7XG4gIC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG4gIGZvciAoa2V5IGluIG9iakEpIHtcbiAgICBpZiAob2JqQS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICghb2JqQi5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IG9iakFba2V5XSAhPT0gb2JqQltrZXldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBUZXN0IGZvciBCJ3Mga2V5cyBtaXNzaW5nIGZyb20gQS5cbiAgZm9yIChrZXkgaW4gb2JqQikge1xuICAgIGlmIChvYmpCLmhhc093blByb3BlcnR5KGtleSkgJiYgIW9iakEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaGFsbG93RXF1YWw7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vKipcbiAqIEdpdmVuIGEgYHByZXZFbGVtZW50YCBhbmQgYG5leHRFbGVtZW50YCwgZGV0ZXJtaW5lcyBpZiB0aGUgZXhpc3RpbmdcbiAqIGluc3RhbmNlIHNob3VsZCBiZSB1cGRhdGVkIGFzIG9wcG9zZWQgdG8gYmVpbmcgZGVzdHJveWVkIG9yIHJlcGxhY2VkIGJ5IGEgbmV3XG4gKiBpbnN0YW5jZS4gQm90aCBhcmd1bWVudHMgYXJlIGVsZW1lbnRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGlzIGxvZ2ljIGNhblxuICogb3BlcmF0ZSBvbiBzdGF0ZWxlc3MgdHJlZXMgd2l0aG91dCBhbnkgYmFja2luZyBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IHByZXZFbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG5leHRFbGVtZW50XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBleGlzdGluZyBpbnN0YW5jZSBzaG91bGQgYmUgdXBkYXRlZC5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KSB7XG4gIGlmIChwcmV2RWxlbWVudCAhPSBudWxsICYmIG5leHRFbGVtZW50ICE9IG51bGwpIHtcbiAgICB2YXIgcHJldlR5cGUgPSB0eXBlb2YgcHJldkVsZW1lbnQ7XG4gICAgdmFyIG5leHRUeXBlID0gdHlwZW9mIG5leHRFbGVtZW50O1xuICAgIGlmIChwcmV2VHlwZSA9PT0gJ3N0cmluZycgfHwgcHJldlR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gKG5leHRUeXBlID09PSAnc3RyaW5nJyB8fCBuZXh0VHlwZSA9PT0gJ251bWJlcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV4dFR5cGUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgcHJldkVsZW1lbnQudHlwZSA9PT0gbmV4dEVsZW1lbnQudHlwZSAmJlxuICAgICAgICAgIHByZXZFbGVtZW50LmtleSA9PT0gbmV4dEVsZW1lbnQua2V5KSB7XG4gICAgICAgIHZhciBvd25lcnNNYXRjaCA9IHByZXZFbGVtZW50Ll9vd25lciA9PT0gbmV4dEVsZW1lbnQuX293bmVyO1xuICAgICAgICB2YXIgcHJldk5hbWUgPSBudWxsO1xuICAgICAgICB2YXIgbmV4dE5hbWUgPSBudWxsO1xuICAgICAgICB2YXIgbmV4dERpc3BsYXlOYW1lID0gbnVsbDtcbiAgICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAgIGlmICghb3duZXJzTWF0Y2gpIHtcbiAgICAgICAgICAgIGlmIChwcmV2RWxlbWVudC5fb3duZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHByZXZFbGVtZW50Ll9vd25lci5nZXRQdWJsaWNJbnN0YW5jZSgpICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBwcmV2RWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5jb25zdHJ1Y3RvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHByZXZOYW1lID1cbiAgICAgICAgICAgICAgICBwcmV2RWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudC5fb3duZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIG5leHRFbGVtZW50Ll9vd25lci5nZXRQdWJsaWNJbnN0YW5jZSgpICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5jb25zdHJ1Y3RvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG5leHROYW1lID1cbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudC50eXBlICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC50eXBlLmRpc3BsYXlOYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgbmV4dERpc3BsYXlOYW1lID0gbmV4dEVsZW1lbnQudHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudC50eXBlICE9IG51bGwgJiYgdHlwZW9mIG5leHRFbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG5leHREaXNwbGF5TmFtZSA9IG5leHRFbGVtZW50LnR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5leHRFbGVtZW50LnR5cGUgIT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQudHlwZSA9PT0gJ2lucHV0JyB8fFxuICAgICAgICAgICAgICAgIG5leHRFbGVtZW50LnR5cGUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgICAgICAgaWYgKChwcmV2RWxlbWVudC5fb3duZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgcHJldkVsZW1lbnQuX293bmVyLl9pc093bmVyTmVjZXNzYXJ5ID09PSBmYWxzZSkgfHxcbiAgICAgICAgICAgICAgICAgIChuZXh0RWxlbWVudC5fb3duZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuX293bmVyLl9pc093bmVyTmVjZXNzYXJ5ID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldkVsZW1lbnQuX293bmVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHByZXZFbGVtZW50Ll9vd25lci5faXNPd25lck5lY2Vzc2FyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudC5fb3duZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuX293bmVyLl9pc093bmVyTmVjZXNzYXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICc8JXMgLz4gaXMgYmVpbmcgcmVuZGVyZWQgYnkgYm90aCAlcyBhbmQgJXMgdXNpbmcgdGhlIHNhbWUgJyArXG4gICAgICAgICAgICAgICAgICAna2V5ICglcykgaW4gdGhlIHNhbWUgcGxhY2UuIEN1cnJlbnRseSwgdGhpcyBtZWFucyB0aGF0ICcgK1xuICAgICAgICAgICAgICAgICAgJ3RoZXkgZG9uXFwndCBwcmVzZXJ2ZSBzdGF0ZS4gVGhpcyBiZWhhdmlvciBzaG91bGQgYmUgdmVyeSAnICtcbiAgICAgICAgICAgICAgICAgICdyYXJlIHNvIHdlXFwncmUgY29uc2lkZXJpbmcgZGVwcmVjYXRpbmcgaXQuIFBsZWFzZSBjb250YWN0ICcgK1xuICAgICAgICAgICAgICAgICAgJ3RoZSBSZWFjdCB0ZWFtIGFuZCBleHBsYWluIHlvdXIgdXNlIGNhc2Ugc28gdGhhdCB3ZSBjYW4gJyArXG4gICAgICAgICAgICAgICAgICAndGFrZSB0aGF0IGludG8gY29uc2lkZXJhdGlvbi4nLFxuICAgICAgICAgICAgICAgICAgbmV4dERpc3BsYXlOYW1lIHx8ICdVbmtub3duIENvbXBvbmVudCcsXG4gICAgICAgICAgICAgICAgICBwcmV2TmFtZSB8fCAnW1Vua25vd25dJyxcbiAgICAgICAgICAgICAgICAgIG5leHROYW1lIHx8ICdbVW5rbm93bl0nLFxuICAgICAgICAgICAgICAgICAgcHJldkVsZW1lbnQua2V5XG4gICAgICAgICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvd25lcnNNYXRjaDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2YzJodmRXeGtWWEJrWVhSbFVtVmhZM1JEYjIxd2IyNWxiblF1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCemFHOTFiR1JWY0dSaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZEZ4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQjNZWEp1YVc1bklEMGdjbVZ4ZFdseVpTaGNJaTR2ZDJGeWJtbHVaMXdpS1R0Y2JseHVMeW9xWEc0Z0tpQkhhWFpsYmlCaElHQndjbVYyUld4bGJXVnVkR0FnWVc1a0lHQnVaWGgwUld4bGJXVnVkR0FzSUdSbGRHVnliV2x1WlhNZ2FXWWdkR2hsSUdWNGFYTjBhVzVuWEc0Z0tpQnBibk4wWVc1alpTQnphRzkxYkdRZ1ltVWdkWEJrWVhSbFpDQmhjeUJ2Y0hCdmMyVmtJSFJ2SUdKbGFXNW5JR1JsYzNSeWIzbGxaQ0J2Y2lCeVpYQnNZV05sWkNCaWVTQmhJRzVsZDF4dUlDb2dhVzV6ZEdGdVkyVXVJRUp2ZEdnZ1lYSm5kVzFsYm5SeklHRnlaU0JsYkdWdFpXNTBjeTRnVkdocGN5Qmxibk4xY21WeklIUm9ZWFFnZEdocGN5QnNiMmRwWXlCallXNWNiaUFxSUc5d1pYSmhkR1VnYjI0Z2MzUmhkR1ZzWlhOeklIUnlaV1Z6SUhkcGRHaHZkWFFnWVc1NUlHSmhZMnRwYm1jZ2FXNXpkR0Z1WTJVdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCd2NtVjJSV3hsYldWdWRGeHVJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0J1WlhoMFJXeGxiV1Z1ZEZ4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMGdWSEoxWlNCcFppQjBhR1VnWlhocGMzUnBibWNnYVc1emRHRnVZMlVnYzJodmRXeGtJR0psSUhWd1pHRjBaV1F1WEc0Z0tpQkFjSEp2ZEdWamRHVmtYRzRnS2k5Y2JtWjFibU4wYVc5dUlITm9iM1ZzWkZWd1pHRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MEtIQnlaWFpGYkdWdFpXNTBMQ0J1WlhoMFJXeGxiV1Z1ZENrZ2UxeHVJQ0JwWmlBb2NISmxka1ZzWlcxbGJuUWdJVDBnYm5Wc2JDQW1KaUJ1WlhoMFJXeGxiV1Z1ZENBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZG1GeUlIQnlaWFpVZVhCbElEMGdkSGx3Wlc5bUlIQnlaWFpGYkdWdFpXNTBPMXh1SUNBZ0lIWmhjaUJ1WlhoMFZIbHdaU0E5SUhSNWNHVnZaaUJ1WlhoMFJXeGxiV1Z1ZER0Y2JpQWdJQ0JwWmlBb2NISmxkbFI1Y0dVZ1BUMDlJQ2R6ZEhKcGJtY25JSHg4SUhCeVpYWlVlWEJsSUQwOVBTQW5iblZ0WW1WeUp5a2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlDaHVaWGgwVkhsd1pTQTlQVDBnSjNOMGNtbHVaeWNnZkh3Z2JtVjRkRlI1Y0dVZ1BUMDlJQ2R1ZFcxaVpYSW5LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2FXWWdLRzVsZUhSVWVYQmxJRDA5UFNBbmIySnFaV04wSnlBbUpseHVJQ0FnSUNBZ0lDQWdJSEJ5WlhaRmJHVnRaVzUwTG5SNWNHVWdQVDA5SUc1bGVIUkZiR1Z0Wlc1MExuUjVjR1VnSmlaY2JpQWdJQ0FnSUNBZ0lDQndjbVYyUld4bGJXVnVkQzVyWlhrZ1BUMDlJRzVsZUhSRmJHVnRaVzUwTG10bGVTa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2IzZHVaWEp6VFdGMFkyZ2dQU0J3Y21WMlJXeGxiV1Z1ZEM1ZmIzZHVaWElnUFQwOUlHNWxlSFJGYkdWdFpXNTBMbDl2ZDI1bGNqdGNiaUFnSUNBZ0lDQWdkbUZ5SUhCeVpYWk9ZVzFsSUQwZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnZG1GeUlHNWxlSFJPWVcxbElEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2RtRnlJRzVsZUhSRWFYTndiR0Y1VG1GdFpTQTlJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb0lXOTNibVZ5YzAxaGRHTm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY0hKbGRrVnNaVzFsYm5RdVgyOTNibVZ5SUNFOUlHNTFiR3dnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCd2NtVjJSV3hsYldWdWRDNWZiM2R1WlhJdVoyVjBVSFZpYkdsalNXNXpkR0Z1WTJVb0tTQWhQU0J1ZFd4c0lDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjSEpsZGtWc1pXMWxiblF1WDI5M2JtVnlMbWRsZEZCMVlteHBZMGx1YzNSaGJtTmxLQ2t1WTI5dWMzUnlkV04wYjNJZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCd2NtVjJUbUZ0WlNBOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NISmxka1ZzWlcxbGJuUXVYMjkzYm1WeUxtZGxkRkIxWW14cFkwbHVjM1JoYm1ObEtDa3VZMjl1YzNSeWRXTjBiM0l1WkdsemNHeGhlVTVoYldVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYm1WNGRFVnNaVzFsYm5RdVgyOTNibVZ5SUNFOUlHNTFiR3dnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBSV3hsYldWdWRDNWZiM2R1WlhJdVoyVjBVSFZpYkdsalNXNXpkR0Z1WTJVb0tTQWhQU0J1ZFd4c0lDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdibVY0ZEVWc1pXMWxiblF1WDI5M2JtVnlMbWRsZEZCMVlteHBZMGx1YzNSaGJtTmxLQ2t1WTI5dWMzUnlkV04wYjNJZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBUbUZ0WlNBOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRVZzWlcxbGJuUXVYMjkzYm1WeUxtZGxkRkIxWW14cFkwbHVjM1JoYm1ObEtDa3VZMjl1YzNSeWRXTjBiM0l1WkdsemNHeGhlVTVoYldVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYm1WNGRFVnNaVzFsYm5RdWRIbHdaU0FoUFNCdWRXeHNJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYm1WNGRFVnNaVzFsYm5RdWRIbHdaUzVrYVhOd2JHRjVUbUZ0WlNBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUc1bGVIUkVhWE53YkdGNVRtRnRaU0E5SUc1bGVIUkZiR1Z0Wlc1MExuUjVjR1V1WkdsemNHeGhlVTVoYldVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYm1WNGRFVnNaVzFsYm5RdWRIbHdaU0FoUFNCdWRXeHNJQ1ltSUhSNWNHVnZaaUJ1WlhoMFJXeGxiV1Z1ZEM1MGVYQmxJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBSR2x6Y0d4aGVVNWhiV1VnUFNCdVpYaDBSV3hsYldWdWRDNTBlWEJsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnVaWGgwUld4bGJXVnVkQzUwZVhCbElDRTlQU0FuYzNSeWFXNW5KeUI4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc1bGVIUkZiR1Z0Wlc1MExuUjVjR1VnUFQwOUlDZHBibkIxZENjZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwUld4bGJXVnVkQzUwZVhCbElEMDlQU0FuZEdWNGRHRnlaV0VuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDZ29jSEpsZGtWc1pXMWxiblF1WDI5M2JtVnlJQ0U5SUc1MWJHd2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCeVpYWkZiR1Z0Wlc1MExsOXZkMjVsY2k1ZmFYTlBkMjVsY2s1bFkyVnpjMkZ5ZVNBOVBUMGdabUZzYzJVcElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FvYm1WNGRFVnNaVzFsYm5RdVgyOTNibVZ5SUNFOUlHNTFiR3dnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFJGYkdWdFpXNTBMbDl2ZDI1bGNpNWZhWE5QZDI1bGNrNWxZMlZ6YzJGeWVTQTlQVDBnWm1Gc2MyVXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIQnlaWFpGYkdWdFpXNTBMbDl2ZDI1bGNpQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J3Y21WMlJXeGxiV1Z1ZEM1ZmIzZHVaWEl1WDJselQzZHVaWEpPWldObGMzTmhjbmtnUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2JtVjRkRVZzWlcxbGJuUXVYMjkzYm1WeUlDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZUhSRmJHVnRaVzUwTGw5dmQyNWxjaTVmYVhOUGQyNWxjazVsWTJWemMyRnllU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5QQ1Z6SUM4K0lHbHpJR0psYVc1bklISmxibVJsY21Wa0lHSjVJR0p2ZEdnZ0pYTWdZVzVrSUNWeklIVnphVzVuSUhSb1pTQnpZVzFsSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKMnRsZVNBb0pYTXBJR2x1SUhSb1pTQnpZVzFsSUhCc1lXTmxMaUJEZFhKeVpXNTBiSGtzSUhSb2FYTWdiV1ZoYm5NZ2RHaGhkQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDZDBhR1Y1SUdSdmJseGNKM1FnY0hKbGMyVnlkbVVnYzNSaGRHVXVJRlJvYVhNZ1ltVm9ZWFpwYjNJZ2MyaHZkV3hrSUdKbElIWmxjbmtnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5jbUZ5WlNCemJ5QjNaVnhjSjNKbElHTnZibk5wWkdWeWFXNW5JR1JsY0hKbFkyRjBhVzVuSUdsMExpQlFiR1ZoYzJVZ1kyOXVkR0ZqZENBbklDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2QwYUdVZ1VtVmhZM1FnZEdWaGJTQmhibVFnWlhod2JHRnBiaUI1YjNWeUlIVnpaU0JqWVhObElITnZJSFJvWVhRZ2QyVWdZMkZ1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKM1JoYTJVZ2RHaGhkQ0JwYm5SdklHTnZibk5wWkdWeVlYUnBiMjR1Snl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFJFYVhOd2JHRjVUbUZ0WlNCOGZDQW5WVzVyYm05M2JpQkRiMjF3YjI1bGJuUW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0hKbGRrNWhiV1VnZkh3Z0oxdFZibXR1YjNkdVhTY3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMFRtRnRaU0I4ZkNBblcxVnVhMjV2ZDI1ZEp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJ5WlhaRmJHVnRaVzUwTG10bGVWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiM2R1WlhKelRXRjBZMmc3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JuMWNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0J6YUc5MWJHUlZjR1JoZEdWU1pXRmpkRU52YlhCdmJtVnVkRHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHRvQXJyYXlcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5LWxpa2Ugb2JqZWN0cyB0byBhcnJheXMuXG4gKlxuICogVGhpcyBBUEkgYXNzdW1lcyB0aGUgY2FsbGVyIGtub3dzIHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YSB0eXBlLiBGb3IgbGVzc1xuICogd2VsbCBkZWZpbmVkIGlucHV0cyB1c2UgY3JlYXRlQXJyYXlGcm9tTWl4ZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb258ZmlsZWxpc3R9IG9ialxuICogQHJldHVybiB7YXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIHZhciBsZW5ndGggPSBvYmoubGVuZ3RoO1xuXG4gIC8vIFNvbWUgYnJvd3NlIGJ1aWx0aW4gb2JqZWN0cyBjYW4gcmVwb3J0IHR5cGVvZiAnZnVuY3Rpb24nIChlLmcuIE5vZGVMaXN0IGluXG4gIC8vIG9sZCB2ZXJzaW9ucyBvZiBTYWZhcmkpLlxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICFBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgICAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJyksXG4gICAgJ3RvQXJyYXk6IEFycmF5LWxpa2Ugb2JqZWN0IGV4cGVjdGVkJ1xuICApIDogaW52YXJpYW50KCFBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpKSk7XG5cbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICB0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJyxcbiAgICAndG9BcnJheTogT2JqZWN0IG5lZWRzIGEgbGVuZ3RoIHByb3BlcnR5J1xuICApIDogaW52YXJpYW50KHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInKSk7XG5cbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBsZW5ndGggPT09IDAgfHxcbiAgICAobGVuZ3RoIC0gMSkgaW4gb2JqLFxuICAgICd0b0FycmF5OiBPYmplY3Qgc2hvdWxkIGhhdmUga2V5cyBmb3IgaW5kaWNlcydcbiAgKSA6IGludmFyaWFudChsZW5ndGggPT09IDAgfHxcbiAgKGxlbmd0aCAtIDEpIGluIG9iaikpO1xuXG4gIC8vIE9sZCBJRSBkb2Vzbid0IGdpdmUgY29sbGVjdGlvbnMgYWNjZXNzIHRvIGhhc093blByb3BlcnR5LiBBc3N1bWUgaW5wdXRzXG4gIC8vIHdpdGhvdXQgbWV0aG9kIHdpbGwgdGhyb3cgZHVyaW5nIHRoZSBzbGljZSBjYWxsIGFuZCBza2lwIHN0cmFpZ2h0IHRvIHRoZVxuICAvLyBmYWxsYmFjay5cbiAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJRSA8IDkgZG9lcyBub3Qgc3VwcG9ydCBBcnJheSNzbGljZSBvbiBjb2xsZWN0aW9ucyBvYmplY3RzXG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGNvcHlpbmcga2V5IGJ5IGtleS4gVGhpcyBhc3N1bWVzIGFsbCBrZXlzIGhhdmUgYSB2YWx1ZSxcbiAgLy8gc28gd2lsbCBub3QgcHJlc2VydmUgc3BhcnNlbHkgcG9wdWxhdGVkIGlucHV0cy5cbiAgdmFyIHJldCA9IEFycmF5KGxlbmd0aCk7XG4gIGZvciAodmFyIGlpID0gMDsgaWkgPCBsZW5ndGg7IGlpKyspIHtcbiAgICByZXRbaWldID0gb2JqW2lpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvQXJyYXk7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZkRzlCY25KaGVTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREUwTFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnZEc5QmNuSmhlVnh1SUNvZ1FIUjVjR1ZqYUdWamEzTmNiaUFxTDF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNHZLaXBjYmlBcUlFTnZiblpsY25RZ1lYSnlZWGt0YkdsclpTQnZZbXBsWTNSeklIUnZJR0Z5Y21GNWN5NWNiaUFxWEc0Z0tpQlVhR2x6SUVGUVNTQmhjM04xYldWeklIUm9aU0JqWVd4c1pYSWdhMjV2ZDNNZ2RHaGxJR052Ym5SbGJuUnpJRzltSUhSb1pTQmtZWFJoSUhSNWNHVXVJRVp2Y2lCc1pYTnpYRzRnS2lCM1pXeHNJR1JsWm1sdVpXUWdhVzV3ZFhSeklIVnpaU0JqY21WaGRHVkJjbkpoZVVaeWIyMU5hWGhsWkM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSHhtZFc1amRHbHZibnhtYVd4bGJHbHpkSDBnYjJKcVhHNGdLaUJBY21WMGRYSnVJSHRoY25KaGVYMWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2RHOUJjbkpoZVNodlltb3BJSHRjYmlBZ2RtRnlJR3hsYm1kMGFDQTlJRzlpYWk1c1pXNW5kR2c3WEc1Y2JpQWdMeThnVTI5dFpTQmljbTkzYzJVZ1luVnBiSFJwYmlCdlltcGxZM1J6SUdOaGJpQnlaWEJ2Y25RZ2RIbHdaVzltSUNkbWRXNWpkR2x2YmljZ0tHVXVaeTRnVG05a1pVeHBjM1FnYVc1Y2JpQWdMeThnYjJ4a0lIWmxjbk5wYjI1eklHOW1JRk5oWm1GeWFTa3VYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJVUZ5Y21GNUxtbHpRWEp5WVhrb2IySnFLU0FtSmx4dUlDQWdJQ2gwZVhCbGIyWWdiMkpxSUQwOVBTQW5iMkpxWldOMEp5QjhmQ0IwZVhCbGIyWWdiMkpxSUQwOVBTQW5ablZ1WTNScGIyNG5LU3hjYmlBZ0lDQW5kRzlCY25KaGVUb2dRWEp5WVhrdGJHbHJaU0J2WW1wbFkzUWdaWGh3WldOMFpXUW5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9JVUZ5Y21GNUxtbHpRWEp5WVhrb2IySnFLU0FtSmx4dUlDQW9kSGx3Wlc5bUlHOWlhaUE5UFQwZ0oyOWlhbVZqZENjZ2ZId2dkSGx3Wlc5bUlHOWlhaUE5UFQwZ0oyWjFibU4wYVc5dUp5a3BLVHRjYmx4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUhSNWNHVnZaaUJzWlc1bmRHZ2dQVDA5SUNkdWRXMWlaWEluTEZ4dUlDQWdJQ2QwYjBGeWNtRjVPaUJQWW1wbFkzUWdibVZsWkhNZ1lTQnNaVzVuZEdnZ2NISnZjR1Z5ZEhrblhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2RIbHdaVzltSUd4bGJtZDBhQ0E5UFQwZ0oyNTFiV0psY2ljcEtUdGNibHh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJR3hsYm1kMGFDQTlQVDBnTUNCOGZGeHVJQ0FnSUNoc1pXNW5kR2dnTFNBeEtTQnBiaUJ2WW1vc1hHNGdJQ0FnSjNSdlFYSnlZWGs2SUU5aWFtVmpkQ0J6YUc5MWJHUWdhR0YyWlNCclpYbHpJR1p2Y2lCcGJtUnBZMlZ6SjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0d4bGJtZDBhQ0E5UFQwZ01DQjhmRnh1SUNBb2JHVnVaM1JvSUMwZ01Ta2dhVzRnYjJKcUtTazdYRzVjYmlBZ0x5OGdUMnhrSUVsRklHUnZaWE51SjNRZ1oybDJaU0JqYjJ4c1pXTjBhVzl1Y3lCaFkyTmxjM01nZEc4Z2FHRnpUM2R1VUhKdmNHVnlkSGt1SUVGemMzVnRaU0JwYm5CMWRITmNiaUFnTHk4Z2QybDBhRzkxZENCdFpYUm9iMlFnZDJsc2JDQjBhSEp2ZHlCa2RYSnBibWNnZEdobElITnNhV05sSUdOaGJHd2dZVzVrSUhOcmFYQWdjM1J5WVdsbmFIUWdkRzhnZEdobFhHNGdJQzh2SUdaaGJHeGlZV05yTGx4dUlDQnBaaUFvYjJKcUxtaGhjMDkzYmxCeWIzQmxjblI1S1NCN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCQmNuSmhlUzV3Y205MGIzUjVjR1V1YzJ4cFkyVXVZMkZzYkNodlltb3BPMXh1SUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQzh2SUVsRklEd2dPU0JrYjJWeklHNXZkQ0J6ZFhCd2IzSjBJRUZ5Y21GNUkzTnNhV05sSUc5dUlHTnZiR3hsWTNScGIyNXpJRzlpYW1WamRITmNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZMeUJHWVd4c0lHSmhZMnNnZEc4Z1kyOXdlV2x1WnlCclpYa2dZbmtnYTJWNUxpQlVhR2x6SUdGemMzVnRaWE1nWVd4c0lHdGxlWE1nYUdGMlpTQmhJSFpoYkhWbExGeHVJQ0F2THlCemJ5QjNhV3hzSUc1dmRDQndjbVZ6WlhKMlpTQnpjR0Z5YzJWc2VTQndiM0IxYkdGMFpXUWdhVzV3ZFhSekxseHVJQ0IyWVhJZ2NtVjBJRDBnUVhKeVlYa29iR1Z1WjNSb0tUdGNiaUFnWm05eUlDaDJZWElnYVdrZ1BTQXdPeUJwYVNBOElHeGxibWQwYURzZ2FXa3JLeWtnZTF4dUlDQWdJSEpsZEZ0cGFWMGdQU0J2WW1wYmFXbGRPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnlaWFE3WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdkRzlCY25KaGVUdGNiaUpkZlE9PSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgdHJhdmVyc2VBbGxDaGlsZHJlblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEZyYWdtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RGcmFnbWVudFwiKTtcbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzXCIpO1xuXG52YXIgZ2V0SXRlcmF0b3JGbiA9IHJlcXVpcmUoXCIuL2dldEl0ZXJhdG9yRm5cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgU0VQQVJBVE9SID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuU0VQQVJBVE9SO1xudmFyIFNVQlNFUEFSQVRPUiA9ICc6JztcblxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZXJMb29rdXAgPSB7XG4gICc9JzogJz0wJyxcbiAgJy4nOiAnPTEnLFxuICAnOic6ICc9Midcbn07XG5cbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9bPS46XS9nO1xuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1c2VyUHJvdmlkZWRLZXlFc2NhcGVyKG1hdGNoKSB7XG4gIHJldHVybiB1c2VyUHJvdmlkZWRLZXlFc2NhcGVyTG9va3VwW21hdGNoXTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGNvbXBvbmVudCBBIGNvbXBvbmVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb21wb25lbnRLZXkoY29tcG9uZW50LCBpbmRleCkge1xuICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC5rZXkgIT0gbnVsbCkge1xuICAgIC8vIEV4cGxpY2l0IGtleVxuICAgIHJldHVybiB3cmFwVXNlclByb3ZpZGVkS2V5KGNvbXBvbmVudC5rZXkpO1xuICB9XG4gIC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG4gIHJldHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbi8qKlxuICogRXNjYXBlIGEgY29tcG9uZW50IGtleSBzbyB0aGF0IGl0IGlzIHNhZmUgdG8gdXNlIGluIGEgcmVhY3RpZC5cbiAqXG4gKiBAcGFyYW0geyp9IGtleSBDb21wb25lbnQga2V5IHRvIGJlIGVzY2FwZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEFuIGVzY2FwZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlc2NhcGVVc2VyUHJvdmlkZWRLZXkodGV4dCkge1xuICByZXR1cm4gKCcnICsgdGV4dCkucmVwbGFjZShcbiAgICB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCxcbiAgICB1c2VyUHJvdmlkZWRLZXlFc2NhcGVyXG4gICk7XG59XG5cbi8qKlxuICogV3JhcCBhIGBrZXlgIHZhbHVlIGV4cGxpY2l0bHkgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbVxuICogaW1wbGljaXRseS1nZW5lcmF0ZWQga2V5cyBnZW5lcmF0ZWQgYnkgYSBjb21wb25lbnQncyBpbmRleCBpbiBpdHMgcGFyZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVmFsdWUgb2YgYSB1c2VyLXByb3ZpZGVkIGBrZXlgIGF0dHJpYnV0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB3cmFwVXNlclByb3ZpZGVkS2V5KGtleSkge1xuICByZXR1cm4gJyQnICsgZXNjYXBlVXNlclByb3ZpZGVkS2V5KGtleSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0geyFzdHJpbmd9IG5hbWVTb0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuXG4gKiBAcGFyYW0geyFudW1iZXJ9IGluZGV4U29GYXIgTnVtYmVyIG9mIGNoaWxkcmVuIGVuY291bnRlcmVkIHVudGlsIHRoaXMgcG9pbnQuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGUgdHJhdmVyc2FsXG4gKiBwcm9jZXNzLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKFxuICBjaGlsZHJlbixcbiAgbmFtZVNvRmFyLFxuICBpbmRleFNvRmFyLFxuICBjYWxsYmFjayxcbiAgdHJhdmVyc2VDb250ZXh0XG4pIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCB8fFxuICAgICAgdHlwZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgIHR5cGUgPT09ICdudW1iZXInIHx8XG4gICAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgY2FsbGJhY2soXG4gICAgICB0cmF2ZXJzZUNvbnRleHQsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5XG4gICAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzLlxuICAgICAgbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldENvbXBvbmVudEtleShjaGlsZHJlbiwgMCkgOiBuYW1lU29GYXIsXG4gICAgICBpbmRleFNvRmFyXG4gICAgKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZCwgbmV4dE5hbWUsIG5leHRJbmRleDtcbiAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIG5leHROYW1lID0gKFxuICAgICAgICAobmFtZVNvRmFyICE9PSAnJyA/IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUiA6IFNFUEFSQVRPUikgK1xuICAgICAgICBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGkpXG4gICAgICApO1xuICAgICAgbmV4dEluZGV4ID0gaW5kZXhTb0ZhciArIHN1YnRyZWVDb3VudDtcbiAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIG5leHROYW1lLFxuICAgICAgICBuZXh0SW5kZXgsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICB0cmF2ZXJzZUNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG4gICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChjaGlsZHJlbik7XG4gICAgICB2YXIgc3RlcDtcbiAgICAgIGlmIChpdGVyYXRvckZuICE9PSBjaGlsZHJlbi5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpaSA9IDA7XG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgbmV4dE5hbWUgPSAoXG4gICAgICAgICAgICAobmFtZVNvRmFyICE9PSAnJyA/IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUiA6IFNFUEFSQVRPUikgK1xuICAgICAgICAgICAgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpaSsrKVxuICAgICAgICAgICk7XG4gICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXhTb0ZhciArIHN1YnRyZWVDb3VudDtcbiAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoXG4gICAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICAgIG5leHROYW1lLFxuICAgICAgICAgICAgbmV4dEluZGV4LFxuICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICB0cmF2ZXJzZUNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzLFxuICAgICAgICAgICAgJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIEl0IGlzIGFuICcgK1xuICAgICAgICAgICAgJ2V4cGVyaW1lbnRhbCBmZWF0dXJlIHRoYXQgbWlnaHQgYmUgcmVtb3ZlZC4gQ29udmVydCBpdCB0byBhICcgK1xuICAgICAgICAgICAgJ3NlcXVlbmNlIC8gaXRlcmFibGUgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLidcbiAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgY2hpbGQgPSBlbnRyeVsxXTtcbiAgICAgICAgICAgIG5leHROYW1lID0gKFxuICAgICAgICAgICAgICAobmFtZVNvRmFyICE9PSAnJyA/IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUiA6IFNFUEFSQVRPUikgK1xuICAgICAgICAgICAgICB3cmFwVXNlclByb3ZpZGVkS2V5KGVudHJ5WzBdKSArIFNVQlNFUEFSQVRPUiArXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudEtleShjaGlsZCwgMClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleFNvRmFyICsgc3VidHJlZUNvdW50O1xuICAgICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKFxuICAgICAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICAgICAgbmV4dE5hbWUsXG4gICAgICAgICAgICAgIG5leHRJbmRleCxcbiAgICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICAgIHRyYXZlcnNlQ29udGV4dFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICBjaGlsZHJlbi5ub2RlVHlwZSAhPT0gMSxcbiAgICAgICAgJ3RyYXZlcnNlQWxsQ2hpbGRyZW4oLi4uKTogRW5jb3VudGVyZWQgYW4gaW52YWxpZCBjaGlsZDsgRE9NICcgK1xuICAgICAgICAnZWxlbWVudHMgYXJlIG5vdCB2YWxpZCBjaGlsZHJlbiBvZiBSZWFjdCBjb21wb25lbnRzLidcbiAgICAgICkgOiBpbnZhcmlhbnQoY2hpbGRyZW4ubm9kZVR5cGUgIT09IDEpKTtcbiAgICAgIHZhciBmcmFnbWVudCA9IFJlYWN0RnJhZ21lbnQuZXh0cmFjdChjaGlsZHJlbik7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gZnJhZ21lbnQpIHtcbiAgICAgICAgaWYgKGZyYWdtZW50Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBjaGlsZCA9IGZyYWdtZW50W2tleV07XG4gICAgICAgICAgbmV4dE5hbWUgPSAoXG4gICAgICAgICAgICAobmFtZVNvRmFyICE9PSAnJyA/IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUiA6IFNFUEFSQVRPUikgK1xuICAgICAgICAgICAgd3JhcFVzZXJQcm92aWRlZEtleShrZXkpICsgU1VCU0VQQVJBVE9SICtcbiAgICAgICAgICAgIGdldENvbXBvbmVudEtleShjaGlsZCwgMClcbiAgICAgICAgICApO1xuICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4U29GYXIgKyBzdWJ0cmVlQ291bnQ7XG4gICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKFxuICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICBuZXh0TmFtZSxcbiAgICAgICAgICAgIG5leHRJbmRleCxcbiAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgdHJhdmVyc2VDb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCwgYnV0XG4gKiBtaWdodCBhbHNvIGJlIHNwZWNpZmllZCB0aHJvdWdoIGF0dHJpYnV0ZXM6XG4gKlxuICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuLCAuLi4pYFxuICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmxlZnRQYW5lbENoaWxkcmVuLCAuLi4pYFxuICpcbiAqIFRoZSBgdHJhdmVyc2VDb250ZXh0YCBpcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IGlzIHBhc3NlZCB0aHJvdWdoIHRoZVxuICogZW50aXJlIHRyYXZlcnNhbC4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYWNjdW11bGF0aW9ucyBvciBhbnl0aGluZyBlbHNlIHRoYXRcbiAqIHRoZSBjYWxsYmFjayBtaWdodCBmaW5kIHJlbGV2YW50LlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgb2JqZWN0LlxuICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIFRvIGludm9rZSB1cG9uIHRyYXZlcnNpbmcgZWFjaCBjaGlsZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IGZvciB0cmF2ZXJzYWwuXG4gKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgc3VidHJlZS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCkge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCAnJywgMCwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdHJhdmVyc2VBbGxDaGlsZHJlbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdmRISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wUm5KaFoyMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVaeVlXZHRaVzUwWENJcE8xeHVkbUZ5SUZKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWeklEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkpibk4wWVc1alpVaGhibVJzWlhOY0lpazdYRzVjYm5aaGNpQm5aWFJKZEdWeVlYUnZja1p1SUQwZ2NtVnhkV2x5WlNoY0lpNHZaMlYwU1hSbGNtRjBiM0pHYmx3aUtUdGNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQlRSVkJCVWtGVVQxSWdQU0JTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3k1VFJWQkJVa0ZVVDFJN1hHNTJZWElnVTFWQ1UwVlFRVkpCVkU5U0lEMGdKem9uTzF4dVhHNHZLaXBjYmlBcUlGUlBSRTg2SUZSbGMzUWdkR2hoZENCaElITnBibWRzWlNCamFHbHNaQ0JoYm1RZ1lXNGdZWEp5WVhrZ2QybDBhQ0J2Ym1VZ2FYUmxiU0JvWVhabElIUm9aU0J6WVcxbElHdGxlVnh1SUNvZ2NHRjBkR1Z5Ymk1Y2JpQXFMMXh1WEc1MllYSWdkWE5sY2xCeWIzWnBaR1ZrUzJWNVJYTmpZWEJsY2t4dmIydDFjQ0E5SUh0Y2JpQWdKejBuT2lBblBUQW5MRnh1SUNBbkxpYzZJQ2M5TVNjc1hHNGdJQ2M2SnpvZ0p6MHlKMXh1ZlR0Y2JseHVkbUZ5SUhWelpYSlFjbTkyYVdSbFpFdGxlVVZ6WTJGd1pWSmxaMlY0SUQwZ0wxczlManBkTDJjN1hHNWNiblpoY2lCa2FXUlhZWEp1UVdKdmRYUk5ZWEJ6SUQwZ1ptRnNjMlU3WEc1Y2JtWjFibU4wYVc5dUlIVnpaWEpRY205MmFXUmxaRXRsZVVWelkyRndaWElvYldGMFkyZ3BJSHRjYmlBZ2NtVjBkWEp1SUhWelpYSlFjbTkyYVdSbFpFdGxlVVZ6WTJGd1pYSk1iMjlyZFhCYmJXRjBZMmhkTzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxJR0VnYTJWNUlITjBjbWx1WnlCMGFHRjBJR2xrWlc1MGFXWnBaWE1nWVNCamIyMXdiMjVsYm5RZ2QybDBhR2x1SUdFZ2MyVjBMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdLbjBnWTI5dGNHOXVaVzUwSUVFZ1kyOXRjRzl1Wlc1MElIUm9ZWFFnWTI5MWJHUWdZMjl1ZEdGcGJpQmhJRzFoYm5WaGJDQnJaWGt1WEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2FXNWtaWGdnU1c1a1pYZ2dkR2hoZENCcGN5QjFjMlZrSUdsbUlHRWdiV0Z1ZFdGc0lHdGxlU0JwY3lCdWIzUWdjSEp2ZG1sa1pXUXVYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibVoxYm1OMGFXOXVJR2RsZEVOdmJYQnZibVZ1ZEV0bGVTaGpiMjF3YjI1bGJuUXNJR2x1WkdWNEtTQjdYRzRnSUdsbUlDaGpiMjF3YjI1bGJuUWdKaVlnWTI5dGNHOXVaVzUwTG10bGVTQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0x5OGdSWGh3YkdsamFYUWdhMlY1WEc0Z0lDQWdjbVYwZFhKdUlIZHlZWEJWYzJWeVVISnZkbWxrWldSTFpYa29ZMjl0Y0c5dVpXNTBMbXRsZVNrN1hHNGdJSDFjYmlBZ0x5OGdTVzF3YkdsamFYUWdhMlY1SUdSbGRHVnliV2x1WldRZ1lua2dkR2hsSUdsdVpHVjRJR2x1SUhSb1pTQnpaWFJjYmlBZ2NtVjBkWEp1SUdsdVpHVjRMblJ2VTNSeWFXNW5LRE0yS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJGYzJOaGNHVWdZU0JqYjIxd2IyNWxiblFnYTJWNUlITnZJSFJvWVhRZ2FYUWdhWE1nYzJGbVpTQjBieUIxYzJVZ2FXNGdZU0J5WldGamRHbGtMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdLbjBnYTJWNUlFTnZiWEJ2Ym1WdWRDQnJaWGtnZEc4Z1ltVWdaWE5qWVhCbFpDNWNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnUVc0Z1pYTmpZWEJsWkNCemRISnBibWN1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1Z6WTJGd1pWVnpaWEpRY205MmFXUmxaRXRsZVNoMFpYaDBLU0I3WEc0Z0lISmxkSFZ5YmlBb0p5Y2dLeUIwWlhoMEtTNXlaWEJzWVdObEtGeHVJQ0FnSUhWelpYSlFjbTkyYVdSbFpFdGxlVVZ6WTJGd1pWSmxaMlY0TEZ4dUlDQWdJSFZ6WlhKUWNtOTJhV1JsWkV0bGVVVnpZMkZ3WlhKY2JpQWdLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlhjbUZ3SUdFZ1lHdGxlV0FnZG1Gc2RXVWdaWGh3YkdsamFYUnNlU0J3Y205MmFXUmxaQ0JpZVNCMGFHVWdkWE5sY2lCMGJ5QmthWE4wYVc1bmRXbHphQ0JwZENCbWNtOXRYRzRnS2lCcGJYQnNhV05wZEd4NUxXZGxibVZ5WVhSbFpDQnJaWGx6SUdkbGJtVnlZWFJsWkNCaWVTQmhJR052YlhCdmJtVnVkQ2R6SUdsdVpHVjRJR2x1SUdsMGN5QndZWEpsYm5RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUd0bGVTQldZV3gxWlNCdlppQmhJSFZ6WlhJdGNISnZkbWxrWldRZ1lHdGxlV0FnWVhSMGNtbGlkWFJsWEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm1aMWJtTjBhVzl1SUhkeVlYQlZjMlZ5VUhKdmRtbGtaV1JMWlhrb2EyVjVLU0I3WEc0Z0lISmxkSFZ5YmlBbkpDY2dLeUJsYzJOaGNHVlZjMlZ5VUhKdmRtbGtaV1JMWlhrb2EyVjVLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OHFmU0JqYUdsc1pISmxiaUJEYUdsc1pISmxiaUIwY21WbElHTnZiblJoYVc1bGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhOMGNtbHVaMzBnYm1GdFpWTnZSbUZ5SUU1aGJXVWdiMllnZEdobElHdGxlU0J3WVhSb0lITnZJR1poY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJVzUxYldKbGNuMGdhVzVrWlhoVGIwWmhjaUJPZFcxaVpYSWdiMllnWTJocGJHUnlaVzRnWlc1amIzVnVkR1Z5WldRZ2RXNTBhV3dnZEdocGN5QndiMmx1ZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJV1oxYm1OMGFXOXVmU0JqWVd4c1ltRmpheUJEWVd4c1ltRmpheUIwYnlCcGJuWnZhMlVnZDJsMGFDQmxZV05vSUdOb2FXeGtJR1p2ZFc1a0xseHVJQ29nUUhCaGNtRnRJSHMvS24wZ2RISmhkbVZ5YzJWRGIyNTBaWGgwSUZWelpXUWdkRzhnY0dGemN5QnBibVp2Y20xaGRHbHZiaUIwYUhKdmRXZG9iM1YwSUhSb1pTQjBjbUYyWlhKellXeGNiaUFxSUhCeWIyTmxjM011WEc0Z0tpQkFjbVYwZFhKdUlIc2hiblZ0WW1WeWZTQlVhR1VnYm5WdFltVnlJRzltSUdOb2FXeGtjbVZ1SUdsdUlIUm9hWE1nYzNWaWRISmxaUzVjYmlBcUwxeHVablZ1WTNScGIyNGdkSEpoZG1WeWMyVkJiR3hEYUdsc1pISmxia2x0Y0d3b1hHNGdJR05vYVd4a2NtVnVMRnh1SUNCdVlXMWxVMjlHWVhJc1hHNGdJR2x1WkdWNFUyOUdZWElzWEc0Z0lHTmhiR3hpWVdOckxGeHVJQ0IwY21GMlpYSnpaVU52Ym5SbGVIUmNiaWtnZTF4dUlDQjJZWElnZEhsd1pTQTlJSFI1Y0dWdlppQmphR2xzWkhKbGJqdGNibHh1SUNCcFppQW9kSGx3WlNBOVBUMGdKM1Z1WkdWbWFXNWxaQ2NnZkh3Z2RIbHdaU0E5UFQwZ0oySnZiMnhsWVc0bktTQjdYRzRnSUNBZ0x5OGdRV3hzSUc5bUlIUm9aU0JoWW05MlpTQmhjbVVnY0dWeVkyVnBkbVZrSUdGeklHNTFiR3d1WEc0Z0lDQWdZMmhwYkdSeVpXNGdQU0J1ZFd4c08xeHVJQ0I5WEc1Y2JpQWdhV1lnS0dOb2FXeGtjbVZ1SUQwOVBTQnVkV3hzSUh4OFhHNGdJQ0FnSUNCMGVYQmxJRDA5UFNBbmMzUnlhVzVuSnlCOGZGeHVJQ0FnSUNBZ2RIbHdaU0E5UFQwZ0oyNTFiV0psY2ljZ2ZIeGNiaUFnSUNBZ0lGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaGphR2xzWkhKbGJpa3BJSHRjYmlBZ0lDQmpZV3hzWW1GamF5aGNiaUFnSUNBZ0lIUnlZWFpsY25ObFEyOXVkR1Y0ZEN4Y2JpQWdJQ0FnSUdOb2FXeGtjbVZ1TEZ4dUlDQWdJQ0FnTHk4Z1NXWWdhWFFuY3lCMGFHVWdiMjVzZVNCamFHbHNaQ3dnZEhKbFlYUWdkR2hsSUc1aGJXVWdZWE1nYVdZZ2FYUWdkMkZ6SUhkeVlYQndaV1FnYVc0Z1lXNGdZWEp5WVhsY2JpQWdJQ0FnSUM4dklITnZJSFJvWVhRZ2FYUW5jeUJqYjI1emFYTjBaVzUwSUdsbUlIUm9aU0J1ZFcxaVpYSWdiMllnWTJocGJHUnlaVzRnWjNKdmQzTXVYRzRnSUNBZ0lDQnVZVzFsVTI5R1lYSWdQVDA5SUNjbklEOGdVMFZRUVZKQlZFOVNJQ3NnWjJWMFEyOXRjRzl1Wlc1MFMyVjVLR05vYVd4a2NtVnVMQ0F3S1NBNklHNWhiV1ZUYjBaaGNpeGNiaUFnSUNBZ0lHbHVaR1Y0VTI5R1lYSmNiaUFnSUNBcE8xeHVJQ0FnSUhKbGRIVnliaUF4TzF4dUlDQjlYRzVjYmlBZ2RtRnlJR05vYVd4a0xDQnVaWGgwVG1GdFpTd2dibVY0ZEVsdVpHVjRPMXh1SUNCMllYSWdjM1ZpZEhKbFpVTnZkVzUwSUQwZ01Ec2dMeThnUTI5MWJuUWdiMllnWTJocGJHUnlaVzRnWm05MWJtUWdhVzRnZEdobElHTjFjbkpsYm5RZ2MzVmlkSEpsWlM1Y2JseHVJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2hqYUdsc1pISmxiaWtwSUh0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdOb2FXeGtjbVZ1TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQmphR2xzWkNBOUlHTm9hV3hrY21WdVcybGRPMXh1SUNBZ0lDQWdibVY0ZEU1aGJXVWdQU0FvWEc0Z0lDQWdJQ0FnSUNodVlXMWxVMjlHWVhJZ0lUMDlJQ2NuSUQ4Z2JtRnRaVk52Um1GeUlDc2dVMVZDVTBWUVFWSkJWRTlTSURvZ1UwVlFRVkpCVkU5U0tTQXJYRzRnSUNBZ0lDQWdJR2RsZEVOdmJYQnZibVZ1ZEV0bGVTaGphR2xzWkN3Z2FTbGNiaUFnSUNBZ0lDazdYRzRnSUNBZ0lDQnVaWGgwU1c1a1pYZ2dQU0JwYm1SbGVGTnZSbUZ5SUNzZ2MzVmlkSEpsWlVOdmRXNTBPMXh1SUNBZ0lDQWdjM1ZpZEhKbFpVTnZkVzUwSUNzOUlIUnlZWFpsY25ObFFXeHNRMmhwYkdSeVpXNUpiWEJzS0Z4dUlDQWdJQ0FnSUNCamFHbHNaQ3hjYmlBZ0lDQWdJQ0FnYm1WNGRFNWhiV1VzWEc0Z0lDQWdJQ0FnSUc1bGVIUkpibVJsZUN4Y2JpQWdJQ0FnSUNBZ1kyRnNiR0poWTJzc1hHNGdJQ0FnSUNBZ0lIUnlZWFpsY25ObFEyOXVkR1Y0ZEZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnZG1GeUlHbDBaWEpoZEc5eVJtNGdQU0JuWlhSSmRHVnlZWFJ2Y2tadUtHTm9hV3hrY21WdUtUdGNiaUFnSUNCcFppQW9hWFJsY21GMGIzSkdiaWtnZTF4dUlDQWdJQ0FnZG1GeUlHbDBaWEpoZEc5eUlEMGdhWFJsY21GMGIzSkdiaTVqWVd4c0tHTm9hV3hrY21WdUtUdGNiaUFnSUNBZ0lIWmhjaUJ6ZEdWd08xeHVJQ0FnSUNBZ2FXWWdLR2wwWlhKaGRHOXlSbTRnSVQwOUlHTm9hV3hrY21WdUxtVnVkSEpwWlhNcElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdscElEMGdNRHRjYmlBZ0lDQWdJQ0FnZDJocGJHVWdLQ0VvYzNSbGNDQTlJR2wwWlhKaGRHOXlMbTVsZUhRb0tTa3VaRzl1WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05vYVd4a0lEMGdjM1JsY0M1MllXeDFaVHRjYmlBZ0lDQWdJQ0FnSUNCdVpYaDBUbUZ0WlNBOUlDaGNiaUFnSUNBZ0lDQWdJQ0FnSUNodVlXMWxVMjlHWVhJZ0lUMDlJQ2NuSUQ4Z2JtRnRaVk52Um1GeUlDc2dVMVZDVTBWUVFWSkJWRTlTSURvZ1UwVlFRVkpCVkU5U0tTQXJYRzRnSUNBZ0lDQWdJQ0FnSUNCblpYUkRiMjF3YjI1bGJuUkxaWGtvWTJocGJHUXNJR2xwS3lzcFhHNGdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnSUNCdVpYaDBTVzVrWlhnZ1BTQnBibVJsZUZOdlJtRnlJQ3NnYzNWaWRISmxaVU52ZFc1ME8xeHVJQ0FnSUNBZ0lDQWdJSE4xWW5SeVpXVkRiM1Z1ZENBclBTQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVTVzF3YkNoY2JpQWdJQ0FnSUNBZ0lDQWdJR05vYVd4a0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1WNGRFNWhiV1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnVaWGgwU1c1a1pYZ3NYRzRnSUNBZ0lDQWdJQ0FnSUNCallXeHNZbUZqYXl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJ5WVhabGNuTmxRMjl1ZEdWNGRGeHVJQ0FnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lDQWdJR1JwWkZkaGNtNUJZbTkxZEUxaGNITXNYRzRnSUNBZ0lDQWdJQ0FnSUNBblZYTnBibWNnVFdGd2N5QmhjeUJqYUdsc1pISmxiaUJwY3lCdWIzUWdlV1YwSUdaMWJHeDVJSE4xY0hCdmNuUmxaQzRnU1hRZ2FYTWdZVzRnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FuWlhod1pYSnBiV1Z1ZEdGc0lHWmxZWFIxY21VZ2RHaGhkQ0J0YVdkb2RDQmlaU0J5WlcxdmRtVmtMaUJEYjI1MlpYSjBJR2wwSUhSdklHRWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5jMlZ4ZFdWdVkyVWdMeUJwZEdWeVlXSnNaU0J2WmlCclpYbGxaQ0JTWldGamRFVnNaVzFsYm5SeklHbHVjM1JsWVdRdUoxeHVJQ0FnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnSUNCa2FXUlhZWEp1UVdKdmRYUk5ZWEJ6SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBdkx5QkpkR1Z5WVhSdmNpQjNhV3hzSUhCeWIzWnBaR1VnWlc1MGNua2dXMnNzZGwwZ2RIVndiR1Z6SUhKaGRHaGxjaUIwYUdGdUlIWmhiSFZsY3k1Y2JpQWdJQ0FnSUNBZ2QyaHBiR1VnS0NFb2MzUmxjQ0E5SUdsMFpYSmhkRzl5TG01bGVIUW9LU2t1Wkc5dVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhaaGNpQmxiblJ5ZVNBOUlITjBaWEF1ZG1Gc2RXVTdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHVnVkSEo1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYUdsc1pDQTlJR1Z1ZEhKNVd6RmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRTVoYldVZ1BTQW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDaHVZVzFsVTI5R1lYSWdJVDA5SUNjbklEOGdibUZ0WlZOdlJtRnlJQ3NnVTFWQ1UwVlFRVkpCVkU5U0lEb2dVMFZRUVZKQlZFOVNLU0FyWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSGR5WVhCVmMyVnlVSEp2ZG1sa1pXUkxaWGtvWlc1MGNubGJNRjBwSUNzZ1UxVkNVMFZRUVZKQlZFOVNJQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdaMlYwUTI5dGNHOXVaVzUwUzJWNUtHTm9hV3hrTENBd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVsZUhSSmJtUmxlQ0E5SUdsdVpHVjRVMjlHWVhJZ0t5QnpkV0owY21WbFEyOTFiblE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkV0owY21WbFEyOTFiblFnS3owZ2RISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJrbHRjR3dvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR05vYVd4a0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBUbUZ0WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYm1WNGRFbHVaR1Y0TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVd4c1ltRmpheXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkSEpoZG1WeWMyVkRiMjUwWlhoMFhHNGdJQ0FnSUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3WlNBOVBUMGdKMjlpYW1WamRDY3BJSHRjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJR05vYVd4a2NtVnVMbTV2WkdWVWVYQmxJQ0U5UFNBeExGeHVJQ0FnSUNBZ0lDQW5kSEpoZG1WeWMyVkJiR3hEYUdsc1pISmxiaWd1TGk0cE9pQkZibU52ZFc1MFpYSmxaQ0JoYmlCcGJuWmhiR2xrSUdOb2FXeGtPeUJFVDAwZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RsYkdWdFpXNTBjeUJoY21VZ2JtOTBJSFpoYkdsa0lHTm9hV3hrY21WdUlHOW1JRkpsWVdOMElHTnZiWEJ2Ym1WdWRITXVKMXh1SUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoamFHbHNaSEpsYmk1dWIyUmxWSGx3WlNBaFBUMGdNU2twTzF4dUlDQWdJQ0FnZG1GeUlHWnlZV2R0Wlc1MElEMGdVbVZoWTNSR2NtRm5iV1Z1ZEM1bGVIUnlZV04wS0dOb2FXeGtjbVZ1S1R0Y2JpQWdJQ0FnSUdadmNpQW9kbUZ5SUd0bGVTQnBiaUJtY21GbmJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9abkpoWjIxbGJuUXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2EyVjVLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTm9hV3hrSUQwZ1puSmhaMjFsYm5SYmEyVjVYVHRjYmlBZ0lDQWdJQ0FnSUNCdVpYaDBUbUZ0WlNBOUlDaGNiaUFnSUNBZ0lDQWdJQ0FnSUNodVlXMWxVMjlHWVhJZ0lUMDlJQ2NuSUQ4Z2JtRnRaVk52Um1GeUlDc2dVMVZDVTBWUVFWSkJWRTlTSURvZ1UwVlFRVkpCVkU5U0tTQXJYRzRnSUNBZ0lDQWdJQ0FnSUNCM2NtRndWWE5sY2xCeWIzWnBaR1ZrUzJWNUtHdGxlU2tnS3lCVFZVSlRSVkJCVWtGVVQxSWdLMXh1SUNBZ0lDQWdJQ0FnSUNBZ1oyVjBRMjl0Y0c5dVpXNTBTMlY1S0dOb2FXeGtMQ0F3S1Z4dUlDQWdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQWdJQ0FnYm1WNGRFbHVaR1Y0SUQwZ2FXNWtaWGhUYjBaaGNpQXJJSE4xWW5SeVpXVkRiM1Z1ZER0Y2JpQWdJQ0FnSUNBZ0lDQnpkV0owY21WbFEyOTFiblFnS3owZ2RISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJrbHRjR3dvWEc0Z0lDQWdJQ0FnSUNBZ0lDQmphR2xzWkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVsZUhST1lXMWxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRWx1WkdWNExGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGc2JHSmhZMnNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBjbUYyWlhKelpVTnZiblJsZUhSY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJSE4xWW5SeVpXVkRiM1Z1ZER0Y2JuMWNibHh1THlvcVhHNGdLaUJVY21GMlpYSnpaWE1nWTJocGJHUnlaVzRnZEdoaGRDQmhjbVVnZEhsd2FXTmhiR3g1SUhOd1pXTnBabWxsWkNCaGN5QmdjSEp2Y0hNdVkyaHBiR1J5Wlc1Z0xDQmlkWFJjYmlBcUlHMXBaMmgwSUdGc2MyOGdZbVVnYzNCbFkybG1hV1ZrSUhSb2NtOTFaMmdnWVhSMGNtbGlkWFJsY3pwY2JpQXFYRzRnS2lBdElHQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVLSFJvYVhNdWNISnZjSE11WTJocGJHUnlaVzRzSUM0dUxpbGdYRzRnS2lBdElHQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVLSFJvYVhNdWNISnZjSE11YkdWbWRGQmhibVZzUTJocGJHUnlaVzRzSUM0dUxpbGdYRzRnS2x4dUlDb2dWR2hsSUdCMGNtRjJaWEp6WlVOdmJuUmxlSFJnSUdseklHRnVJRzl3ZEdsdmJtRnNJR0Z5WjNWdFpXNTBJSFJvWVhRZ2FYTWdjR0Z6YzJWa0lIUm9jbTkxWjJnZ2RHaGxYRzRnS2lCbGJuUnBjbVVnZEhKaGRtVnljMkZzTGlCSmRDQmpZVzRnWW1VZ2RYTmxaQ0IwYnlCemRHOXlaU0JoWTJOMWJYVnNZWFJwYjI1eklHOXlJR0Z1ZVhSb2FXNW5JR1ZzYzJVZ2RHaGhkRnh1SUNvZ2RHaGxJR05oYkd4aVlXTnJJRzFwWjJoMElHWnBibVFnY21Wc1pYWmhiblF1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHMvS24wZ1kyaHBiR1J5Wlc0Z1EyaHBiR1J5Wlc0Z2RISmxaU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGbWRXNWpkR2x2Ym4wZ1kyRnNiR0poWTJzZ1ZHOGdhVzUyYjJ0bElIVndiMjRnZEhKaGRtVnljMmx1WnlCbFlXTm9JR05vYVd4a0xseHVJQ29nUUhCaGNtRnRJSHMvS24wZ2RISmhkbVZ5YzJWRGIyNTBaWGgwSUVOdmJuUmxlSFFnWm05eUlIUnlZWFpsY25OaGJDNWNiaUFxSUVCeVpYUjFjbTRnZXlGdWRXMWlaWEo5SUZSb1pTQnVkVzFpWlhJZ2IyWWdZMmhwYkdSeVpXNGdhVzRnZEdocGN5QnpkV0owY21WbExseHVJQ292WEc1bWRXNWpkR2x2YmlCMGNtRjJaWEp6WlVGc2JFTm9hV3hrY21WdUtHTm9hV3hrY21WdUxDQmpZV3hzWW1GamF5d2dkSEpoZG1WeWMyVkRiMjUwWlhoMEtTQjdYRzRnSUdsbUlDaGphR2xzWkhKbGJpQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ2NtVjBkWEp1SURBN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2RISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJrbHRjR3dvWTJocGJHUnlaVzRzSUNjbkxDQXdMQ0JqWVd4c1ltRmpheXdnZEhKaGRtVnljMlZEYjI1MFpYaDBLVHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgd2FybmluZ1xuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbi8qKlxuICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbFxuICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGVcbiAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLlxuICovXG5cbnZhciB3YXJuaW5nID0gZW1wdHlGdW5jdGlvbjtcblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICB3YXJuaW5nID0gZnVuY3Rpb24oY29uZGl0aW9uLCBmb3JtYXQgKSB7Zm9yICh2YXIgYXJncz1bXSwkX18wPTIsJF9fMT1hcmd1bWVudHMubGVuZ3RoOyRfXzA8JF9fMTskX18wKyspIGFyZ3MucHVzaChhcmd1bWVudHNbJF9fMF0pO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArXG4gICAgICAgICdtZXNzYWdlIGFyZ3VtZW50J1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0Lmxlbmd0aCA8IDEwIHx8IC9eW3NcXFddKiQvLnRlc3QoZm9ybWF0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHdhcm5pbmcgZm9ybWF0IHNob3VsZCBiZSBhYmxlIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgJyArXG4gICAgICAgICd3YXJuaW5nLiBQbGVhc2UsIHVzZSBhIG1vcmUgZGVzY3JpcHRpdmUgZm9ybWF0IHRoYW46ICcgKyBmb3JtYXRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdC5pbmRleE9mKCdGYWlsZWQgQ29tcG9zaXRlIHByb3BUeXBlOiAnKSA9PT0gMCkge1xuICAgICAgcmV0dXJuOyAvLyBJZ25vcmUgQ29tcG9zaXRlQ29tcG9uZW50IHByb3B0eXBlIGNoZWNrLlxuICAgIH1cblxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpICB7cmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107fSk7XG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSBjYXRjaCh4KSB7fVxuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YXJuaW5nO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2ZDJGeWJtbHVaeTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFMExUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ2QyRnlibWx1WjF4dUlDb3ZYRzVjYmx3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1MllYSWdaVzF3ZEhsR2RXNWpkR2x2YmlBOUlISmxjWFZwY21Vb1hDSXVMMlZ0Y0hSNVJuVnVZM1JwYjI1Y0lpazdYRzVjYmk4cUtseHVJQ29nVTJsdGFXeGhjaUIwYnlCcGJuWmhjbWxoYm5RZ1luVjBJRzl1YkhrZ2JHOW5jeUJoSUhkaGNtNXBibWNnYVdZZ2RHaGxJR052Ym1ScGRHbHZiaUJwY3lCdWIzUWdiV1YwTGx4dUlDb2dWR2hwY3lCallXNGdZbVVnZFhObFpDQjBieUJzYjJjZ2FYTnpkV1Z6SUdsdUlHUmxkbVZzYjNCdFpXNTBJR1Z1ZG1seWIyNXRaVzUwY3lCcGJpQmpjbWwwYVdOaGJGeHVJQ29nY0dGMGFITXVJRkpsYlc5MmFXNW5JSFJvWlNCc2IyZG5hVzVuSUdOdlpHVWdabTl5SUhCeWIyUjFZM1JwYjI0Z1pXNTJhWEp2Ym0xbGJuUnpJSGRwYkd3Z2EyVmxjQ0IwYUdWY2JpQXFJSE5oYldVZ2JHOW5hV01nWVc1a0lHWnZiR3h2ZHlCMGFHVWdjMkZ0WlNCamIyUmxJSEJoZEdoekxseHVJQ292WEc1Y2JuWmhjaUIzWVhKdWFXNW5JRDBnWlcxd2RIbEdkVzVqZEdsdmJqdGNibHh1YVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQjNZWEp1YVc1bklEMGdablZ1WTNScGIyNG9ZMjl1WkdsMGFXOXVMQ0JtYjNKdFlYUWdLU0I3Wm05eUlDaDJZWElnWVhKbmN6MWJYU3drWDE4d1BUSXNKRjlmTVQxaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvT3lSZlh6QThKRjlmTVRza1gxOHdLeXNwSUdGeVozTXVjSFZ6YUNoaGNtZDFiV1Z1ZEhOYkpGOWZNRjBwTzF4dUlDQWdJR2xtSUNobWIzSnRZWFFnUFQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQW5ZSGRoY201cGJtY29ZMjl1WkdsMGFXOXVMQ0JtYjNKdFlYUXNJQzR1TG1GeVozTXBZQ0J5WlhGMWFYSmxjeUJoSUhkaGNtNXBibWNnSnlBclhHNGdJQ0FnSUNBZ0lDZHRaWE56WVdkbElHRnlaM1Z0Wlc1MEoxeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9abTl5YldGMExteGxibWQwYUNBOElERXdJSHg4SUM5ZVczTmNYRmRkS2lRdkxuUmxjM1FvWm05eWJXRjBLU2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0FuVkdobElIZGhjbTVwYm1jZ1ptOXliV0YwSUhOb2IzVnNaQ0JpWlNCaFlteGxJSFJ2SUhWdWFYRjFaV3g1SUdsa1pXNTBhV1o1SUhSb2FYTWdKeUFyWEc0Z0lDQWdJQ0FnSUNkM1lYSnVhVzVuTGlCUWJHVmhjMlVzSUhWelpTQmhJRzF2Y21VZ1pHVnpZM0pwY0hScGRtVWdabTl5YldGMElIUm9ZVzQ2SUNjZ0t5Qm1iM0p0WVhSY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHWnZjbTFoZEM1cGJtUmxlRTltS0NkR1lXbHNaV1FnUTI5dGNHOXphWFJsSUhCeWIzQlVlWEJsT2lBbktTQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1T3lBdkx5QkpaMjV2Y21VZ1EyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1MElIQnliM0IwZVhCbElHTm9aV05yTGx4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNnaFkyOXVaR2wwYVc5dUtTQjdYRzRnSUNBZ0lDQjJZWElnWVhKblNXNWtaWGdnUFNBd08xeHVJQ0FnSUNBZ2RtRnlJRzFsYzNOaFoyVWdQU0FuVjJGeWJtbHVaem9nSnlBcklHWnZjbTFoZEM1eVpYQnNZV05sS0M4bGN5OW5MQ0JtZFc1amRHbHZiaWdwSUNCN2NtVjBkWEp1SUdGeVozTmJZWEpuU1c1a1pYZ3JLMTA3ZlNrN1hHNGdJQ0FnSUNCamIyNXpiMnhsTG5kaGNtNG9iV1Z6YzJGblpTazdYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBdkx5QXRMUzBnVjJWc1kyOXRaU0IwYnlCa1pXSjFaMmRwYm1jZ1VtVmhZM1FnTFMwdFhHNGdJQ0FnSUNBZ0lDOHZJRlJvYVhNZ1pYSnliM0lnZDJGeklIUm9jbTkzYmlCaGN5QmhJR052Ym5abGJtbGxibU5sSUhOdklIUm9ZWFFnZVc5MUlHTmhiaUIxYzJVZ2RHaHBjeUJ6ZEdGamExeHVJQ0FnSUNBZ0lDQXZMeUIwYnlCbWFXNWtJSFJvWlNCallXeHNjMmwwWlNCMGFHRjBJR05oZFhObFpDQjBhR2x6SUhkaGNtNXBibWNnZEc4Z1ptbHlaUzVjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRzFsYzNOaFoyVXBPMXh1SUNBZ0lDQWdmU0JqWVhSamFDaDRLU0I3ZlZ4dUlDQWdJSDFjYmlBZ2ZUdGNibjFjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCM1lYSnVhVzVuTzF4dUlsMTkiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL1JlYWN0Jyk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFRhYmxlSGVhZGVyIGZyb20gJy4vVGFibGVIZWFkZXInO1xuaW1wb3J0IFRhYmxlQm9keSBmcm9tICcuL1RhYmxlQm9keSc7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3QgZnJvbSAnLi9wYWdpbmF0aW9uL1BhZ2luYXRpb25MaXN0JztcbmltcG9ydCBUb29sQmFyIGZyb20gJy4vdG9vbGJhci9Ub29sQmFyJztcbmltcG9ydCBUYWJsZUZpbHRlciBmcm9tICcuL1RhYmxlRmlsdGVyJztcbmltcG9ydCB7VGFibGVEYXRhU3RvcmV9IGZyb20gJy4vc3RvcmUvVGFibGVEYXRhU3RvcmUnO1xuXG5jbGFzcyBCb290c3RyYXBUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuX2F0dGFjaENlbGxFZGl0RnVuYygpO1xuICAgIGxldCBrZXlGaWVsZCA9IG51bGw7XG4gICAgbGV0IGN1c3RvbVNvcnRGdW5jTWFwID0ge307XG5cbiAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHRoaXMucHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uKGNvbHVtbil7XG4gICAgICBpZihjb2x1bW4ucHJvcHMuaXNLZXkpe1xuICAgICAgICBpZihrZXlGaWVsZCAhPSBudWxsKSB0aHJvdyBcIkVycm9yLiBNdWx0aXBsZSBrZXkgY29sdW1uIGJlIGRldGVjdGVkIGluIFRhYmxlSGVhZGVyQ29sdW1uLlwiO1xuICAgICAgICBrZXlGaWVsZCA9IGNvbHVtbi5wcm9wcy5kYXRhRmllbGQ7XG4gICAgICB9XG4gICAgICBpZihjb2x1bW4ucHJvcHMuc29ydEZ1bmMpe1xuICAgICAgICBjdXN0b21Tb3J0RnVuY01hcFtjb2x1bW4ucHJvcHMuZGF0YUZpZWxkXSA9IGNvbHVtbi5wcm9wcy5zb3J0RnVuYztcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcblxuICAgIGlmKGtleUZpZWxkID09IG51bGwpXG4gICAgICB0aHJvdyBcIkVycm9yLiBObyBhbnkga2V5IGNvbHVtbiBkZWZpbmVkIGluIFRhYmxlSGVhZGVyQ29sdW1uLiBVc2UgJ2lzS2V5PXt0cnVlfScgdG8gc3BlY2lmeSBhbiB1bmlxdWUgY29sdW1uIGFmdGVyIHZlcnNpb24gMC41LjQuXCI7XG5cbiAgICBpZighQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmRhdGEpKXtcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgVGFibGVEYXRhU3RvcmUodGhpcy5wcm9wcy5kYXRhLmdldERhdGEoKSk7XG4gICAgICB0aGlzLnByb3BzLmRhdGEuY2xlYXIoKTtcbiAgICAgIHRoaXMucHJvcHMuZGF0YS5vbignY2hhbmdlJywgKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKGRhdGEpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBkYXRhOiB0aGlzLmdldFRhYmxlRGF0YSgpXG4gICAgICAgIH0pXG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0gZWxzZXtcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgVGFibGVEYXRhU3RvcmUodGhpcy5wcm9wcy5kYXRhKTtcbiAgICB9XG4gICAgdGhpcy5zdG9yZS5zZXRQcm9wcyh0aGlzLnByb3BzLnBhZ2luYXRpb24sIGtleUZpZWxkLCBjdXN0b21Tb3J0RnVuY01hcCk7XG5cbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdyAmJiB0aGlzLnByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCl7XG4gICAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KHRoaXMucHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZGF0YTogdGhpcy5nZXRUYWJsZURhdGEoKSxcbiAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKVxuICAgIH07XG4gIH1cblxuICBnZXRUYWJsZURhdGEoKSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGlmKHRoaXMucHJvcHMucGFnaW5hdGlvbil7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoMSwgQ29uc3QuU0laRV9QRVJfUEFHRSkuZ2V0KCk7XG4gICAgfSBlbHNle1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKXtcbiAgICBpZihBcnJheS5pc0FycmF5KG5leHRQcm9wcy5kYXRhKSl7XG4gICAgICB0aGlzLnN0b3JlLnNldERhdGEobmV4dFByb3BzLmRhdGEpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHRoaXMuZ2V0VGFibGVEYXRhKClcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZihuZXh0UHJvcHMuc2VsZWN0Um93ICYmIG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQpe1xuICAgICAgLy9zZXQgZGVmYXVsdCBzZWxlY3Qgcm93cyB0byBzdG9yZS5cbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkobmV4dFByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBuZXh0UHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKXtcbiAgICB0aGlzLl9hdHRhY2hDZWxsRWRpdEZ1bmMoKTtcbiAgICBpZih0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJUYWJsZUNvbXBsZXRlKVxuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyVGFibGVDb21wbGV0ZSgpO1xuICB9XG5cbiAgX2F0dGFjaENlbGxFZGl0RnVuYygpe1xuICAgIGlmKHRoaXMucHJvcHMuY2VsbEVkaXQpe1xuICAgICAgdGhpcy5wcm9wcy5jZWxsRWRpdC5fX29uQ29tcGxldGVFZGl0X18gPSB0aGlzLmhhbmRsZUVkaXRDZWxsLmJpbmQodGhpcyk7XG4gICAgICBpZih0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgIT09IENvbnN0LkNFTExfRURJVF9OT05FKVxuICAgICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIHRhYmxlQ2xhc3MgPSBjbGFzc1NldChcInJlYWN0LWJzLXRhYmxlXCIpO1xuICAgIHZhciBjaGlsZHJlbnMgPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogdGhpcy5wcm9wcy5oZWlnaHRcbiAgICB9O1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pKXtcbiAgICAgIGNoaWxkcmVucyA9IFt0aGlzLnByb3BzLmNoaWxkcmVuXTtcbiAgICB9XG4gICAgdmFyIGNvbHVtbnMgPSBjaGlsZHJlbnMubWFwKGZ1bmN0aW9uKGNvbHVtbiwgaSl7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBjb2x1bW4ucHJvcHMuZGF0YUZpZWxkLFxuICAgICAgICBhbGlnbjogY29sdW1uLnByb3BzLmRhdGFBbGlnbixcbiAgICAgICAgc29ydDogY29sdW1uLnByb3BzLmRhdGFTb3J0LFxuICAgICAgICBmb3JtYXQ6IGNvbHVtbi5wcm9wcy5kYXRhRm9ybWF0LFxuICAgICAgICBlZGl0YWJsZTogY29sdW1uLnByb3BzLmVkaXRhYmxlLFxuICAgICAgICBoaWRkZW46IGNvbHVtbi5wcm9wcy5oaWRkZW4sXG4gICAgICAgIGNsYXNzTmFtZTpjb2x1bW4ucHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICB3aWR0aDogY29sdW1uLnByb3BzLndpZHRoLFxuICAgICAgICBpbmRleDogaVxuICAgICAgfTtcbiAgICB9LCB0aGlzKTtcblxuICAgIHZhciBwYWdpbmF0aW9uID0gdGhpcy5yZW5kZXJQYWdpbmF0aW9uKCk7XG4gICAgdmFyIHRvb2xCYXIgPSB0aGlzLnJlbmRlclRvb2xCYXIoKTtcbiAgICB2YXIgdGFibGVGaWx0ZXIgPSB0aGlzLnJlbmRlclRhYmxlRmlsdGVyKGNvbHVtbnMpO1xuICAgIHJldHVybihcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVhY3QtYnMtY29udGFpbmVyXCI+XG4gICAgICAgIHt0b29sQmFyfVxuICAgICAgICA8ZGl2IHJlZj1cInRhYmxlXCIgc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e3RhYmxlQ2xhc3N9PlxuICAgICAgICAgIDxUYWJsZUhlYWRlciByb3dTZWxlY3RUeXBlPXt0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICBoaWRlU2VsZWN0Q29sdW1uPXt0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1ufVxuICAgICAgICAgICAgICAgICAgICAgICBzb3J0TmFtZT17dGhpcy5wcm9wcy5vcHRpb25zLnNvcnROYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICBzb3J0T3JkZXI9e3RoaXMucHJvcHMub3B0aW9ucy5zb3J0T3JkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uU29ydD17dGhpcy5oYW5kbGVTb3J0LmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0QWxsUm93PXt0aGlzLmhhbmRsZVNlbGVjdEFsbFJvdy5iaW5kKHRoaXMpfT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgIDwvVGFibGVIZWFkZXI+XG4gICAgICAgICAgPFRhYmxlQm9keSByZWY9XCJib2R5XCIgZGF0YT17dGhpcy5zdGF0ZS5kYXRhfSBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgc3RyaXBlZD17dGhpcy5wcm9wcy5zdHJpcGVkfVxuICAgICAgICAgICAgaG92ZXI9e3RoaXMucHJvcHMuaG92ZXJ9XG4gICAgICAgICAgICBrZXlGaWVsZD17dGhpcy5zdG9yZS5nZXRLZXlGaWVsZCgpfVxuICAgICAgICAgICAgY29uZGVuc2VkPXt0aGlzLnByb3BzLmNvbmRlbnNlZH1cbiAgICAgICAgICAgIHNlbGVjdFJvdz17dGhpcy5wcm9wcy5zZWxlY3RSb3d9XG4gICAgICAgICAgICBjZWxsRWRpdD17dGhpcy5wcm9wcy5jZWxsRWRpdH1cbiAgICAgICAgICAgIHNlbGVjdGVkUm93S2V5cz17dGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXN9XG4gICAgICAgICAgICBvblNlbGVjdFJvdz17dGhpcy5oYW5kbGVTZWxlY3RSb3cuYmluZCh0aGlzKX0vPlxuICAgICAgICAgIHt0YWJsZUZpbHRlcn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtwYWdpbmF0aW9ufVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgaGFuZGxlU29ydChvcmRlciwgc29ydEZpZWxkKXtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5zdG9yZS5zb3J0KG9yZGVyLCBzb3J0RmllbGQpLmdldCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVQYWdpbmF0aW9uRGF0YShwYWdlLCBzaXplUGVyUGFnZSl7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShwYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdEFsbFJvdyhlKXtcbiAgICB2YXIgaXNTZWxlY3RlZCA9IGUuY3VycmVudFRhcmdldC5jaGVja2VkO1xuICAgIGxldCBzZWxlY3RlZFJvd0tleXMgPSBbXTtcbiAgICBpZihpc1NlbGVjdGVkKXtcbiAgICAgIHNlbGVjdGVkUm93S2V5cyA9IHRoaXMuc3RvcmUuZ2V0QWxsUm93a2V5KCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShzZWxlY3RlZFJvd0tleXMpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBzZWxlY3RlZFJvd0tleXNcbiAgICB9KTtcbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdy5vblNlbGVjdEFsbCl7XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5vblNlbGVjdEFsbChpc1NlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTZWxlY3RSb3cocm93LCBpc1NlbGVjdGVkKXtcbiAgICBsZXQgY3VyclNlbGVjdGVkID0gdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKTtcbiAgICBsZXQgcm93S2V5ID0gcm93W3RoaXMuc3RvcmUuZ2V0S2V5RmllbGQoKV07XG4gICAgaWYodGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUpe1xuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShpc1NlbGVjdGVkP1tyb3dLZXldOltdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoaXNTZWxlY3RlZCkge1xuICAgICAgICBjdXJyU2VsZWN0ZWQucHVzaChyb3dLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VyclNlbGVjdGVkID0gY3VyclNlbGVjdGVkLmZpbHRlcihmdW5jdGlvbihrZXkpe1xuICAgICAgICAgIHJldHVybiByb3dLZXkgIT09IGtleTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShjdXJyU2VsZWN0ZWQpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBjdXJyU2VsZWN0ZWRcbiAgICB9KTtcblxuICAgIGlmKHRoaXMucHJvcHMuc2VsZWN0Um93Lm9uU2VsZWN0KXtcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93Lm9uU2VsZWN0KHJvdywgaXNTZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRWRpdENlbGwobmV3VmFsLCByb3dJbmRleCwgY29sSW5kZXgpe1xuICAgIGxldCBmaWVsZE5hbWU7XG4gICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaCh0aGlzLnByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbihjb2x1bW4sIGkpe1xuICAgICAgaWYoaSA9PSBjb2xJbmRleCl7XG4gICAgICAgIGZpZWxkTmFtZSA9IGNvbHVtbi5wcm9wcy5kYXRhRmllbGQ7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCByZXN1bHQgPSB0aGlzLnN0b3JlLmVkaXQobmV3VmFsLCByb3dJbmRleCwgZmllbGROYW1lKS5nZXQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH0pO1xuXG4gICAgaWYodGhpcy5wcm9wcy5jZWxsRWRpdC5hZnRlclNhdmVDZWxsKXtcbiAgICAgIHRoaXMucHJvcHMuY2VsbEVkaXQuYWZ0ZXJTYXZlQ2VsbCh0aGlzLnN0YXRlLmRhdGFbcm93SW5kZXhdLCBmaWVsZE5hbWUsIG5ld1ZhbCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQWRkUm93KG5ld09iail7XG4gICAgbGV0IG1zZyA9IG51bGwsIHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zdG9yZS5hZGQobmV3T2JqKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgcmV0dXJuIGU7XG4gICAgfVxuXG4gICAgaWYodGhpcy5wcm9wcy5wYWdpbmF0aW9uKXtcbiAgICAgIC8vaWYgcGFnaW5hdGlvbiBpcyBlbmFibGVkIGFuZCBpbnNlcnQgcm93IGJlIHRyaWdnZXIsIGNoYW5nZSB0byBsYXN0IHBhZ2VcbiAgICAgIGxldCBzaXplUGVyUGFnZSA9IHRoaXMucmVmcy5wYWdpbmF0aW9uLmdldFNpemVQZXJQYWdlKCk7XG4gICAgICBsZXQgY3Vyckxhc3RQYWdlID0gTWF0aC5jZWlsKHRoaXMuc3RvcmUuZ2V0RGF0YU51bSgpL3NpemVQZXJQYWdlKTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShjdXJyTGFzdFBhZ2UsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHRcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWZzLnBhZ2luYXRpb24uY2hhbmdlUGFnZShjdXJyTGFzdFBhZ2UpO1xuICAgIH0gZWxzZXtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogcmVzdWx0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJJbnNlcnRSb3cpe1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVySW5zZXJ0Um93KG5ld09iaik7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRHJvcFJvdygpe1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGRyb3BSb3dLZXlzID0gdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKTtcblxuICAgIHRoaXMuc3RvcmUucmVtb3ZlKGRyb3BSb3dLZXlzKTsgIC8vcmVtb3ZlIHNlbGVjdGVkIFJvd1xuICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoW10pOyAgLy9jbGVhciBzZWxlY3RlZCByb3cga2V5XG5cbiAgICBpZih0aGlzLnByb3BzLnBhZ2luYXRpb24pe1xuICAgICAgbGV0IHNpemVQZXJQYWdlID0gdGhpcy5yZWZzLnBhZ2luYXRpb24uZ2V0U2l6ZVBlclBhZ2UoKTtcbiAgICAgIGxldCBjdXJyTGFzdFBhZ2UgPSBNYXRoLmNlaWwodGhpcy5zdG9yZS5nZXREYXRhTnVtKCkvc2l6ZVBlclBhZ2UpO1xuICAgICAgbGV0IGN1cnJlbnRQYWdlID0gdGhpcy5yZWZzLnBhZ2luYXRpb24uZ2V0Q3VycmVudFBhZ2UoKTtcbiAgICAgIGlmKGN1cnJlbnRQYWdlID4gY3Vyckxhc3RQYWdlKVxuICAgICAgICBjdXJyZW50UGFnZSA9IGN1cnJMYXN0UGFnZTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShjdXJyZW50UGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcy5wYWdpbmF0aW9uLmNoYW5nZVBhZ2UoY3VycmVudFBhZ2UpO1xuICAgIH1lbHNle1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckRlbGV0ZVJvdyl7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJEZWxldGVSb3coZHJvcFJvd0tleXMpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpbHRlckRhdGEoZmlsdGVyT2JqKXtcbiAgICB0aGlzLnN0b3JlLmZpbHRlcihmaWx0ZXJPYmopO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYodGhpcy5wcm9wcy5wYWdpbmF0aW9uKXtcbiAgICAgIGxldCBzaXplUGVyUGFnZSA9IHRoaXMucmVmcy5wYWdpbmF0aW9uLmdldFNpemVQZXJQYWdlKCk7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoMSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5yZWZzLnBhZ2luYXRpb24uY2hhbmdlUGFnZSgxKTtcbiAgICB9ZWxzZXtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTZWFyY2goc2VhcmNoVGV4dCl7XG4gICAgdGhpcy5zdG9yZS5zZWFyY2goc2VhcmNoVGV4dCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZih0aGlzLnByb3BzLnBhZ2luYXRpb24pe1xuICAgICAgbGV0IHNpemVQZXJQYWdlID0gdGhpcy5yZWZzLnBhZ2luYXRpb24uZ2V0U2l6ZVBlclBhZ2UoKTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZSgxLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgICB0aGlzLnJlZnMucGFnaW5hdGlvbi5jaGFuZ2VQYWdlKDEpO1xuICAgIH1lbHNle1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlclBhZ2luYXRpb24oKXtcbiAgICBpZih0aGlzLnByb3BzLnBhZ2luYXRpb24pe1xuICAgICAgcmV0dXJuKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxQYWdpbmF0aW9uTGlzdCByZWY9XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlUGFnZT17dGhpcy5oYW5kbGVQYWdpbmF0aW9uRGF0YS5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplUGVyUGFnZT17Q29uc3QuU0laRV9QRVJfUEFHRX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNpemU9e3RoaXMuc3RvcmUuZ2V0RGF0YU51bSgpfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIClcbiAgICB9ZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXJUb29sQmFyKCl7XG4gICAgbGV0IGNvbHVtbnM7XG4gICAgaWYoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKSl7XG4gICAgICBjb2x1bW5zID0gdGhpcy5wcm9wcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY29sdW1uKXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBjb2x1bW4ucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgZmllbGQ6IGNvbHVtbi5wcm9wcy5kYXRhRmllbGRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW5zID0gW3tcbiAgICAgICAgbmFtZTogdGhpcy5wcm9wcy5jaGlsZHJlbi5wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgZmllbGQ6IHRoaXMucHJvcHMuY2hpbGRyZW4ucHJvcHMuZGF0YUZpZWxkXG4gICAgICB9XTtcbiAgICB9XG4gICAgaWYodGhpcy5wcm9wcy5pbnNlcnRSb3cgfHwgdGhpcy5wcm9wcy5kZWxldGVSb3cgfHwgdGhpcy5wcm9wcy5zZWFyY2gpe1xuICAgICAgcmV0dXJuKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRvb2wtYmFyXCI+XG4gICAgICAgICAgPFRvb2xCYXIgZW5hYmxlSW5zZXJ0PXt0aGlzLnByb3BzLmluc2VydFJvd31cbiAgICAgICAgICAgICAgICAgICBlbmFibGVEZWxldGU9e3RoaXMucHJvcHMuZGVsZXRlUm93fVxuICAgICAgICAgICAgICAgICAgIGVuYWJsZVNlYXJjaD17dGhpcy5wcm9wcy5zZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5zZWFyY2hQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgICBvbkFkZFJvdz17dGhpcy5oYW5kbGVBZGRSb3cuYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICBvbkRyb3BSb3c9e3RoaXMuaGFuZGxlRHJvcFJvdy5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgIG9uU2VhcmNoPXt0aGlzLmhhbmRsZVNlYXJjaC5iaW5kKHRoaXMpfS8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKVxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyVGFibGVGaWx0ZXIoY29sdW1ucyl7XG4gICAgaWYodGhpcy5wcm9wcy5jb2x1bW5GaWx0ZXIpe1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlRmlsdGVyIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgICAgICAgICByb3dTZWxlY3RUeXBlPXt0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgb25GaWx0ZXI9e3RoaXMuaGFuZGxlRmlsdGVyRGF0YS5iaW5kKHRoaXMpfS8+XG4gICAgICApO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5Cb290c3RyYXBUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGhlaWdodDogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YTogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICBzdHJpcGVkOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgaG92ZXI6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBjb25kZW5zZWQ6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBwYWdpbmF0aW9uOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdFJvdzogUmVhY3QuUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtb2RlOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICAgIGJnQ29sb3I6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VsZWN0ZWQ6IFJlYWN0LlByb3BUeXBlcy5hcnJheSxcbiAgICBvblNlbGVjdDogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25TZWxlY3RBbGw6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICAgIGNsaWNrVG9TZWxlY3Q6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICAgIGhpZGVTZWxlY3RDb2x1bW46IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICAgIGNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbDogUmVhY3QuUHJvcFR5cGVzLmJvb2xcbiAgfSksXG4gIGNlbGxFZGl0OiBSZWFjdC5Qcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1vZGU6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgYmx1clRvU2F2ZTogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gICAgYWZ0ZXJTYXZlQ2VsbDogUmVhY3QuUHJvcFR5cGVzLmZ1bmNcbiAgfSksXG4gIGluc2VydFJvdzogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGRlbGV0ZVJvdzogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIHNlYXJjaDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNvbHVtbkZpbHRlcjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIG9wdGlvbnM6IFJlYWN0LlByb3BUeXBlcy5zaGFwZSh7XG4gICAgc29ydE5hbWU6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgc29ydE9yZGVyOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFmdGVyVGFibGVDb21wbGV0ZTogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWZ0ZXJEZWxldGVSb3c6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICAgIGFmdGVySW5zZXJ0Um93OiBSZWFjdC5Qcm9wVHlwZXMuZnVuY1xuICB9KVxufTtcbkJvb3RzdHJhcFRhYmxlLmRlZmF1bHRQcm9wcyA9IHtcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgc3RyaXBlZDogZmFsc2UsXG4gIGhvdmVyOiBmYWxzZSxcbiAgY29uZGVuc2VkOiBmYWxzZSxcbiAgcGFnaW5hdGlvbjogZmFsc2UsXG4gIHNlYXJjaFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIHNlbGVjdFJvdzoge1xuICAgIG1vZGU6IENvbnN0LlJPV19TRUxFQ1RfTk9ORSxcbiAgICBiZ0NvbG9yOiBDb25zdC5ST1dfU0VMRUNUX0JHX0NPTE9SLFxuICAgIHNlbGVjdGVkOiBbXSxcbiAgICBvblNlbGVjdDogdW5kZWZpbmVkLFxuICAgIG9uU2VsZWN0QWxsOiB1bmRlZmluZWQsXG4gICAgY2xpY2tUb1NlbGVjdDogZmFsc2UsXG4gICAgaGlkZVNlbGVjdENvbHVtbjogZmFsc2UsXG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsOiBmYWxzZVxuICB9LFxuICBjZWxsRWRpdDp7XG4gICAgbW9kZTogQ29uc3QuQ0VMTF9FRElUX05PTkUsXG4gICAgYmx1clRvU2F2ZTogZmFsc2UsXG4gICAgYWZ0ZXJUYWJsZUNvbXBsZXRlOiB1bmRlZmluZWRcbiAgfSxcbiAgaW5zZXJ0Um93OiBmYWxzZSxcbiAgZGVsZXRlUm93OiBmYWxzZSxcbiAgc2VhcmNoOiBmYWxzZSxcbiAgY29sdW1uRmlsdGVyOiBmYWxzZSxcbiAgb3B0aW9uczoge1xuICAgIHNvcnROYW1lOiBudWxsLFxuICAgIHNvcnRPcmRlcjogQ29uc3QuU09SVF9ERVNDXG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJvb3RzdHJhcFRhYmxlO1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBTT1JUX0RFU0M6IFwiZGVzY1wiLFxuICBTT1JUX0FTQzogXCJhc2NcIixcbiAgU0laRV9QRVJfUEFHRTogMTAsXG4gIFNJWkVfUEVSX0xJU1Q6IDUsXG4gIE5FWFRfUEFHRTogXCI+XCIsXG4gIExBU1RfUEFHRTogXCI+PlwiLFxuICBQUkVfUEFHRTogXCI8XCIsXG4gIEZJUlNUX1BBR0U6IFwiPDxcIixcbiAgUk9XX1NFTEVDVF9CR19DT0xPUjogXCJcIixcbiAgUk9XX1NFTEVDVF9OT05FOiBcIm5vbmVcIixcbiAgUk9XX1NFTEVDVF9TSU5HTEU6IFwicmFkaW9cIixcbiAgUk9XX1NFTEVDVF9NVUxUSTogXCJjaGVja2JveFwiLFxuICBDRUxMX0VESVRfTk9ORTogXCJub25lXCIsXG4gIENFTExfRURJVF9DTElDSzogXCJjbGlja1wiLFxuICBDRUxMX0VESVRfREJDTElDSzogXCJkYmNsaWNrXCJcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5cbmNsYXNzIFNlbGVjdFJvd0hlYWRlckNvbHVtbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICByZW5kZXIoKXtcbiAgICB2YXIgdGhTdHlsZSA9IHtcbiAgICAgIHdpZHRoOiAzNVxuICAgIH07XG5cbiAgICByZXR1cm4oXG4gICAgICA8dGggc3R5bGU9e3RoU3R5bGV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRoLWlubmVyIHRhYmxlLWhlYWRlci1jb2x1bW5cIj5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RoPlxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RSb3dIZWFkZXJDb2x1bW47XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gJy4vVGFibGVSb3cnO1xuaW1wb3J0IFRhYmxlQ29sdW1uIGZyb20gJy4vVGFibGVDb2x1bW4nO1xuaW1wb3J0IFRhYmxlRWRpdENvbHVtbiBmcm9tICcuL1RhYmxlRWRpdENvbHVtbic7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmNsYXNzIFRhYmxlQm9keSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY3VyckVkaXRDZWxsOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciBjb250YWluZXJDbGFzc2VzID0gY2xhc3NTZXQoXCJ0YWJsZS1jb250YWluZXJcIik7XG5cbiAgICB2YXIgdGFibGVDbGFzc2VzID0gY2xhc3NTZXQoXCJ0YWJsZVwiLCBcInRhYmxlLWJvcmRlcmVkXCIsIHtcbiAgICAgICd0YWJsZS1zdHJpcGVkJzogdGhpcy5wcm9wcy5zdHJpcGVkLFxuICAgICAgJ3RhYmxlLWhvdmVyJzogdGhpcy5wcm9wcy5ob3ZlcixcbiAgICAgICd0YWJsZS1jb25kZW5zZWQnOiB0aGlzLnByb3BzLmNvbmRlbnNlZFxuICAgIH0pO1xuXG4gICAgdmFyIGlzU2VsZWN0Um93RGVmaW5lZCA9IHRoaXMuX2lzU2VsZWN0Um93RGVmaW5lZCgpO1xuICAgIHZhciB0YWJsZUhlYWRlciA9IHRoaXMucmVuZGVyVGFibGVIZWFkZXIoaXNTZWxlY3RSb3dEZWZpbmVkKTtcblxuICAgIHZhciB0YWJsZVJvd3MgPSB0aGlzLnByb3BzLmRhdGEubWFwKGZ1bmN0aW9uKGRhdGEsIHIpe1xuICAgICAgdmFyIHRhYmxlQ29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uLCBpKXtcbiAgICAgICAgdmFyIGZpZWxkVmFsdWUgPSBkYXRhW2NvbHVtbi5uYW1lXTtcbiAgICAgICAgaWYodGhpcy5lZGl0aW5nICYmXG4gICAgICAgICAgY29sdW1uLm5hbWUgIT09IHRoaXMucHJvcHMua2V5RmllbGQgJiYgLy8gS2V5IGZpZWxkIGNhbid0IGJlIGVkaXRcbiAgICAgICAgICBjb2x1bW4uZWRpdGFibGUgJiYgLy8gY29sdW1uIGlzIGVkaXRhYmxlPyBkZWZhdWx0IGlzIHRydWUsIHVzZXIgY2FuIHNldCBpdCBmYWxzZVxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyckVkaXRDZWxsICE9IG51bGwgJiZcbiAgICAgICAgICB0aGlzLnN0YXRlLmN1cnJFZGl0Q2VsbC5yaWQgPT0gciAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyckVkaXRDZWxsLmNpZCA9PSBpKXtcbiAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgPFRhYmxlRWRpdENvbHVtbiBjb21wbGV0ZUVkaXQ9e3RoaXMuaGFuZGxlQ29tcGxldGVFZGl0Q2VsbC5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVyVG9TYXZlPXt0aGlzLnByb3BzLmNlbGxFZGl0LmJsdXJUb1NhdmV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg9e3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXg9e2l9PlxuICAgICAgICAgICAgICAgIHtmaWVsZFZhbHVlfVxuICAgICAgICAgICAgICA8L1RhYmxlRWRpdENvbHVtbj5cbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNle1xuICAgICAgICAgIGlmKHR5cGVvZiBjb2x1bW4uZm9ybWF0ICE9PSBcInVuZGVmaW5lZFwiKXtcbiAgICAgICAgICAgIHZhciBmb3JtYXR0ZWRWYWx1ZSA9IGNvbHVtbi5mb3JtYXQoZmllbGRWYWx1ZSwgZGF0YSk7XG4gICAgICAgICAgICBpZiAoIVJlYWN0LmlzVmFsaWRFbGVtZW50KGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGZvcm1hdHRlZFZhbHVlfX0+PC9kaXY+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICA8VGFibGVDb2x1bW4gZGF0YUFsaWduPXtjb2x1bW4uYWxpZ259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NvbHVtbi5jbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsRWRpdD17dGhpcy5wcm9wcy5jZWxsRWRpdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRWRpdD17dGhpcy5oYW5kbGVFZGl0Q2VsbC5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9e2NvbHVtbi53aWR0aH0+XG4gICAgICAgICAgICAgICAge2Zvcm1hdHRlZFZhbHVlfVxuICAgICAgICAgICAgICA8L1RhYmxlQ29sdW1uPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0gZWxzZXtcbiAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgPFRhYmxlQ29sdW1uIGRhdGFBbGlnbj17Y29sdW1uLmFsaWdufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjb2x1bW4uY2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbEVkaXQ9e3RoaXMucHJvcHMuY2VsbEVkaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49e2NvbHVtbi5oaWRkZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVkaXQ9e3RoaXMuaGFuZGxlRWRpdENlbGwuYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtjb2x1bW4ud2lkdGh9PlxuICAgICAgICAgICAgICAgIHtmaWVsZFZhbHVlfVxuICAgICAgICAgICAgICA8L1RhYmxlQ29sdW1uPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLnByb3BzLnNlbGVjdGVkUm93S2V5cy5pbmRleE9mKGRhdGFbdGhpcy5wcm9wcy5rZXlGaWVsZF0pICE9IC0xO1xuICAgICAgdmFyIHNlbGVjdFJvd0NvbHVtbiA9IGlzU2VsZWN0Um93RGVmaW5lZCAmJiAhdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbj9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyU2VsZWN0Um93Q29sdW1uKHNlbGVjdGVkKTpudWxsO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlUm93IGlzU2VsZWN0ZWQ9e3NlbGVjdGVkfSBrZXk9e3J9XG4gICAgICAgICAgc2VsZWN0Um93PXtpc1NlbGVjdFJvd0RlZmluZWQ/dGhpcy5wcm9wcy5zZWxlY3RSb3c6dW5kZWZpbmVkfVxuICAgICAgICAgIGVuYWJsZUNlbGxFZGl0PXt0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgIT09IENvbnN0LkNFTExfRURJVF9OT05FfVxuICAgICAgICAgIG9uU2VsZWN0Um93PXt0aGlzLmhhbmRsZVNlbGVjdFJvdy5iaW5kKHRoaXMpfT5cbiAgICAgICAgICB7c2VsZWN0Um93Q29sdW1ufXt0YWJsZUNvbHVtbnN9XG4gICAgICAgIDwvVGFibGVSb3c+XG4gICAgICApXG4gICAgfSwgdGhpcyk7XG5cbiAgICBpZih0YWJsZVJvd3MubGVuZ3RoID09PSAwKXtcbiAgICAgIHRhYmxlUm93cy5wdXNoKFxuICAgICAgPFRhYmxlUm93IGtleT1cIiMjdGFibGUtZW1wdHkjI1wiPlxuICAgICAgICA8dGQgY29sU3Bhbj17dGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCsoaXNTZWxlY3RSb3dEZWZpbmVkPzE6MCl9XG4gICAgICAgICAgICBzdHlsZT17eyB0ZXh0QWxpZ246IFwiY2VudGVyXCIgfX0+XG4gICAgICAgICAgICBUaGVyZSBpcyBubyBkYXRhIHRvIGRpc3BsYXlcbiAgICAgICAgPC90ZD5cbiAgICAgIDwvVGFibGVSb3c+KTtcbiAgICB9XG5cbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICByZXR1cm4oXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y29udGFpbmVyQ2xhc3Nlc30+XG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RhYmxlQ2xhc3Nlc30+XG4gICAgICAgICAge3RhYmxlSGVhZGVyfVxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIHt0YWJsZVJvd3N9XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJlbmRlclRhYmxlSGVhZGVyKGlzU2VsZWN0Um93RGVmaW5lZCl7XG4gICAgdmFyIHNlbGVjdFJvd0hlYWRlciA9IG51bGw7XG5cbiAgICBpZihpc1NlbGVjdFJvd0RlZmluZWQpe1xuICAgICAgbGV0IHN0eWxlID0ge1xuICAgICAgICB3aWR0aDozNVxuICAgICAgfVxuICAgICAgc2VsZWN0Um93SGVhZGVyID0gdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbj9udWxsOig8dGggc3R5bGU9e3N0eWxlfSBrZXk9ey0xfT48L3RoPik7XG4gICAgfVxuICAgIHZhciB0aGVhZGVyID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4sIGkpe1xuICAgICAgbGV0IHN0eWxlPXtcbiAgICAgICAgZGlzcGxheTogY29sdW1uLmhpZGRlbj9cIm5vbmVcIjpudWxsLFxuICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoXG4gICAgICB9O1xuICAgICAgcmV0dXJuICg8dGggc3R5bGU9e3N0eWxlfSBrZXk9e2l9IGNsYXNzTmFtZT17Y29sdW1uLmNsYXNzTmFtZX0+PC90aD4pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuKFxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+e3NlbGVjdFJvd0hlYWRlcn17dGhlYWRlcn08L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICApXG4gIH1cblxuICBoYW5kbGVTZWxlY3RSb3cocm93SW5kZXgsIGlzU2VsZWN0ZWQpe1xuICAgIHZhciBrZXksIHNlbGVjdGVkUm93O1xuICAgIHRoaXMucHJvcHMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHJvdywgaSl7XG4gICAgICBpZihpID09IHJvd0luZGV4LTEpe1xuICAgICAgICBrZXkgPSByb3dbdGhpcy5wcm9wcy5rZXlGaWVsZF07XG4gICAgICAgIHNlbGVjdGVkUm93ID0gcm93O1xuICAgICAgfVxuICAgIH0sIHRoaXMpO1xuICAgIHRoaXMucHJvcHMub25TZWxlY3RSb3coc2VsZWN0ZWRSb3csIGlzU2VsZWN0ZWQpO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0Um93Q29sdW1DaGFuZ2UoZSl7XG4gICAgaWYoIXRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgfHwgIXRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbCl7XG4gICAgICB0aGlzLmhhbmRsZVNlbGVjdFJvdyhcbiAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5yb3dJbmRleCwgZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUVkaXRDZWxsKHJvd0luZGV4LCBjb2x1bW5JbmRleCl7XG4gICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICBpZih0aGlzLl9pc1NlbGVjdFJvd0RlZmluZWQoKSl7XG4gICAgICBjb2x1bW5JbmRleC0tO1xuICAgICAgaWYodGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbilcbiAgICAgICAgY29sdW1uSW5kZXgrKztcbiAgICB9XG4gICAgcm93SW5kZXgtLTtcbiAgICB2YXIgc3RhdGVPYmogPSB7XG4gICAgICBjdXJyRWRpdENlbGw6IHtcbiAgICAgICAgcmlkOiByb3dJbmRleCxcbiAgICAgICAgY2lkOiBjb2x1bW5JbmRleFxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0QW5kRWRpdENlbGwpe1xuICAgICAgLy9pZiBlZGl0IGNlbGwsIHRyaWdnZXIgcm93IHNlbGVjdGlvbnMgYWxzb1xuICAgICAgbGV0IHNlbGVjdGVkID0gdGhpcy5wcm9wcy5zZWxlY3RlZFJvd0tleXMuaW5kZXhPZih0aGlzLnByb3BzLmRhdGFbcm93SW5kZXhdW3RoaXMucHJvcHMua2V5RmllbGRdKSAhPSAtMTtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Um93KHJvd0luZGV4KzEsICFzZWxlY3RlZCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoc3RhdGVPYmopO1xuICB9XG5cbiAgaGFuZGxlQ29tcGxldGVFZGl0Q2VsbChuZXdWYWwsIHJvd0luZGV4LCBjb2x1bW5JbmRleCl7XG4gICAgdGhpcy5zZXRTdGF0ZSh7Y3VyckVkaXRDZWxsOiBudWxsfSk7XG4gICAgaWYobnVsbCAhPSBuZXdWYWwpXG4gICAgICB0aGlzLnByb3BzLmNlbGxFZGl0Ll9fb25Db21wbGV0ZUVkaXRfXyhuZXdWYWwsIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gIH1cblxuICByZW5kZXJTZWxlY3RSb3dDb2x1bW4oc2VsZWN0ZWQpe1xuICAgIGlmKHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgPT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUpIHtcbiAgICAgIHJldHVybiAoPFRhYmxlQ29sdW1uPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic2VsZWN0aW9uXCIgY2hlY2tlZD17c2VsZWN0ZWR9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZVNlbGVjdFJvd0NvbHVtQ2hhbmdlLmJpbmQodGhpcyl9Lz48L1RhYmxlQ29sdW1uPik7XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuICg8VGFibGVDb2x1bW4+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNoZWNrZWQ9e3NlbGVjdGVkfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3RSb3dDb2x1bUNoYW5nZS5iaW5kKHRoaXMpfS8+PC9UYWJsZUNvbHVtbj4pO1xuICAgIH1cbiAgfVxuXG4gIF9pc1NlbGVjdFJvd0RlZmluZWQoKXtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSB8fFxuICAgICAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgPT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSTtcbiAgfVxufVxuVGFibGVCb2R5LnByb3BUeXBlcyA9IHtcbiAgZGF0YTogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICBjb2x1bW5zOiBSZWFjdC5Qcm9wVHlwZXMuYXJyYXksXG4gIHN0cmlwZWQ6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBob3ZlcjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNvbmRlbnNlZDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGtleUZpZWxkOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBzZWxlY3RlZFJvd0tleXM6IFJlYWN0LlByb3BUeXBlcy5hcnJheSxcbiAgb25TZWxlY3RSb3c6IFJlYWN0LlByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVCb2R5O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcblxuY2xhc3MgVGFibGVDb2x1bW4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG4gIH1cblxuICBoYW5kbGVDZWxsRWRpdChlKXtcbiAgICBpZih0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT0gQ29uc3QuQ0VMTF9FRElUX0RCQ0xJQ0spe1xuICAgICAgaWYoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkge1xuICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTtcbiAgICAgIH0gZWxzZSBpZih3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJvcHMub25FZGl0KFxuICAgICAgZS5jdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQucm93SW5kZXgsXG4gICAgICBlLmN1cnJlbnRUYXJnZXQuY2VsbEluZGV4KTtcbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciB0ZFN0eWxlID0ge1xuICAgICAgdGV4dEFsaWduOiB0aGlzLnByb3BzLmRhdGFBbGlnbixcbiAgICAgIGRpc3BsYXk6IHRoaXMucHJvcHMuaGlkZGVuP1wibm9uZVwiOm51bGxcbiAgICB9O1xuXG4gICAgdmFyIG9wdHMgPSB7fTtcbiAgICBpZih0aGlzLnByb3BzLmNlbGxFZGl0KXtcbiAgICAgIGlmKHRoaXMucHJvcHMuY2VsbEVkaXQubW9kZSA9PSBDb25zdC5DRUxMX0VESVRfQ0xJQ0spe1xuICAgICAgICBvcHRzLm9uQ2xpY2sgPSB0aGlzLmhhbmRsZUNlbGxFZGl0LmJpbmQodGhpcyk7XG4gICAgICB9ZWxzZSBpZih0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT0gQ29uc3QuQ0VMTF9FRElUX0RCQ0xJQ0spe1xuICAgICAgICBvcHRzLm9uRG91YmxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNlbGxFZGl0LmJpbmQodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGQgc3R5bGU9e3RkU3R5bGV9IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWV9IHsuLi5vcHRzfT5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L3RkPlxuICAgIClcbiAgfVxufVxuVGFibGVDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBkYXRhQWxpZ246IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIGhpZGRlbjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTpSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5UYWJsZUNvbHVtbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGRhdGFBbGlnbjogXCJsZWZ0XCIsXG4gIGhpZGRlbjogZmFsc2UsXG4gIGNsYXNzTmFtZTpcIlwiXG59XG5leHBvcnQgZGVmYXVsdCBUYWJsZUNvbHVtbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5cbmNsYXNzIFRhYmxlRWRpdENvbHVtbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBoYW5kbGVLZXlQcmVzcyhlKXtcbiAgICBpZiAoZS5rZXlDb2RlID09IDEzKSB7IC8vUHJlc3NlZCBFTlRFUlxuICAgICAgdGhpcy5wcm9wcy5jb21wbGV0ZUVkaXQoXG4gICAgICAgIGUuY3VycmVudFRhcmdldC52YWx1ZSwgdGhpcy5wcm9wcy5yb3dJbmRleCwgdGhpcy5wcm9wcy5jb2xJbmRleCk7XG4gICAgfWVsc2UgaWYoZS5rZXlDb2RlID09IDI3KXtcbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICBudWxsLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVCbHVyKGUpe1xuICAgIGlmKHRoaXMucHJvcHMuYmx1clRvU2F2ZSl7XG4gICAgICB0aGlzLnByb3BzLmNvbXBsZXRlRWRpdChcbiAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnZhbHVlLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpe1xuICAgIHZhciBpbnB1dCA9IHRoaXMucmVmcy5pbnB1dFJlZi5nZXRET01Ob2RlKCk7XG4gICAgaW5wdXQudmFsdWUgPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIGlucHV0LmZvY3VzKCk7XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICByZXR1cm4gKFxuICAgICAgPHRkPlxuICAgICAgICA8aW5wdXQgcmVmPVwiaW5wdXRSZWZcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleVByZXNzLmJpbmQodGhpcyl9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLmhhbmRsZUJsdXIuYmluZCh0aGlzKX0vPlxuICAgICAgPC90ZD5cbiAgICApXG4gIH1cbn1cblRhYmxlRWRpdENvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGNvbXBsZXRlRWRpdDogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIHJvd0luZGV4OiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICBjb2xJbmRleDogUmVhY3QuUHJvcFR5cGVzLm51bWJlcixcbiAgYmx1clRvU2F2ZTogUmVhY3QuUHJvcFR5cGVzLmJvb2xcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlRWRpdENvbHVtbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmNsYXNzIFRhYmxlRmlsdGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuZmlsdGVyT2JqID0ge307XG4gIH1cblxuICBoYW5kbGVLZXlVcChlKXtcbiAgICBpZihlLmN1cnJlbnRUYXJnZXQudmFsdWUudHJpbSgpID09PSBcIlwiKVxuICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyT2JqW2UuY3VycmVudFRhcmdldC5uYW1lXTtcbiAgICBlbHNlXG4gICAgICB0aGlzLmZpbHRlck9ialtlLmN1cnJlbnRUYXJnZXQubmFtZV0gPSBlLmN1cnJlbnRUYXJnZXQudmFsdWU7XG5cbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMuZmlsdGVyT2JqKTtcbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciB0YWJsZUNsYXNzZXMgPSBjbGFzc1NldChcInRhYmxlXCIsIHtcbiAgICAgICd0YWJsZS1zdHJpcGVkJzogdGhpcy5wcm9wcy5zdHJpcGVkLFxuICAgICAgJ3RhYmxlLWNvbmRlbnNlZCc6IHRoaXMucHJvcHMuY29uZGVuc2VkXG4gICAgfSk7XG4gICAgdmFyIHNlbGVjdFJvd0hlYWRlciA9IG51bGw7XG5cbiAgICBpZih0aGlzLnByb3BzLnJvd1NlbGVjdFR5cGUgPT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUgfHxcbiAgICAgICAgdGhpcy5wcm9wcy5yb3dTZWxlY3RUeXBlID09IENvbnN0LlJPV19TRUxFQ1RfTVVMVEkpe1xuICAgICAgbGV0IHN0eWxlID0ge1xuICAgICAgICB3aWR0aDozNSxcbiAgICAgICAgcGFkZGluZ0xlZnQ6IDAsXG4gICAgICAgIHBhZGRpbmdSaWdodDogMFxuICAgICAgfVxuICAgICAgc2VsZWN0Um93SGVhZGVyID0gKDx0aCBzdHlsZT17c3R5bGV9IGtleT17LTF9PkZpbHRlcjwvdGg+KTtcbiAgICB9XG4gICAgdmFyIGZpbHRlckZpZWxkID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4pe1xuICAgICAgdmFyIHRoU3R5bGUgPSB7XG4gICAgICAgIGRpc3BsYXk6IGNvbHVtbi5oaWRkZW4/XCJub25lXCI6bnVsbCxcbiAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aFxuICAgICAgfTtcbiAgICAgIHJldHVybihcbiAgICAgICAgPHRoIGtleT17Y29sdW1uLm5hbWV9IHN0eWxlPXt0aFN0eWxlfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRoLWlubmVyIHRhYmxlLWhlYWRlci1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPXtjb2x1bW4ubmFtZX0gbmFtZT17Y29sdW1uLm5hbWV9IG9uS2V5VXA9e3RoaXMuaGFuZGxlS2V5VXAuYmluZCh0aGlzKX0vPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgKVxuICAgIH0sIHRoaXMpO1xuICAgIHJldHVybihcbiAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RhYmxlQ2xhc3Nlc30gc3R5bGU9e3ttYXJnaW5Ub3A6NX19PlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyIHN0eWxlPXt7Ym9yZGVyQm90dG9tU3R5bGU6ICdoaWRkZW4nfX0+XG4gICAgICAgICAgICB7c2VsZWN0Um93SGVhZGVyfXtmaWx0ZXJGaWVsZH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgPC90YWJsZT5cbiAgICApXG4gIH1cbn1cblRhYmxlRmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgY29sdW1uczogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICByb3dTZWxlY3RUeXBlOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBvbkZpbHRlcjogUmVhY3QuUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgZGVmYXVsdCBUYWJsZUZpbHRlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgVXRpbCBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFNlbGVjdFJvd0hlYWRlckNvbHVtbiBmcm9tICcuL1NlbGVjdFJvd0hlYWRlckNvbHVtbic7XG5cbmNsYXNzIFRhYmxlSGVhZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgY2xlYXJTb3J0Q2FyZXQob3JkZXIsIHNvcnRGaWVsZCl7XG4gICAgdmFyIHJvdyA9IHRoaXMucmVmcy5oZWFkZXIuZ2V0RE9NTm9kZSgpO1xuICAgIGZvcih2YXIgaT0wO2k8cm93LmNoaWxkRWxlbWVudENvdW50O2krKyl7XG4gICAgICB2YXIgY29sdW1uID0gcm93LmNoaWxkTm9kZXNbaV0uY2hpbGROb2Rlc1swXTtcbiAgICAgIGlmKGNvbHVtbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwib3JkZXJcIikubGVuZ3RoID4gMCl7XG4gICAgICAgIGNvbHVtbi5yZW1vdmVDaGlsZChjb2x1bW4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm9yZGVyXCIpWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vblNvcnQob3JkZXIsIHNvcnRGaWVsZCk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpe1xuICAgIC8vZGVmYXVsdCBzb3J0aW5nXG4gICAgaWYodGhpcy5wcm9wcy5zb3J0TmFtZSAhPT0gbnVsbCl7XG4gICAgICB0aGlzLmNsZWFyU29ydENhcmV0KHRoaXMucHJvcHMuc29ydE9yZGVyLCB0aGlzLnByb3BzLnNvcnROYW1lKTtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJlZnMuaGVhZGVyLmdldERPTU5vZGUoKTtcbiAgICAgIGZvcih2YXIgaT0wO2k8cm93LmNoaWxkRWxlbWVudENvdW50O2krKyl7XG4gICAgICAgIHZhciBjb2x1bW4gPSByb3cuY2hpbGROb2Rlc1tpXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgICBpZihjb2x1bW4uZ2V0QXR0cmlidXRlKCdkYXRhLWZpZWxkJykgPT09IHRoaXMucHJvcHMuc29ydE5hbWUpe1xuICAgICAgICAgIGNvbHVtbi5hcHBlbmRDaGlsZChVdGlsLnJlbmRlclNvcnRDYXJldCh0aGlzLnByb3BzLnNvcnRPcmRlcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIGNvbnRhaW5lckNsYXNzZXMgPSBjbGFzc1NldChcInRhYmxlLWhlYWRlclwiKTtcbiAgICB2YXIgc2VsZWN0Um93SGVhZGVyQ29sID0gdGhpcy5wcm9wcy5oaWRlU2VsZWN0Q29sdW1uP251bGw6dGhpcy5yZW5kZXJTZWxlY3RSb3dIZWFkZXIoKTtcbiAgICB0aGlzLl9hdHRhY2hDbGVhclNvcnRDYXJldEZ1bmMoKTtcblxuICAgIHJldHVybihcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjb250YWluZXJDbGFzc2VzfT5cbiAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cInRhYmxlIHRhYmxlLWhvdmVyIHRhYmxlLWJvcmRlcmVkXCI+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyIHJlZj1cImhlYWRlclwiPlxuICAgICAgICAgICAgICB7c2VsZWN0Um93SGVhZGVyQ29sfVxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJlbmRlclNlbGVjdFJvd0hlYWRlcigpe1xuICAgIGlmKHRoaXMucHJvcHMucm93U2VsZWN0VHlwZSA9PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSkge1xuICAgICAgcmV0dXJuICg8U2VsZWN0Um93SGVhZGVyQ29sdW1uPjwvU2VsZWN0Um93SGVhZGVyQ29sdW1uPik7XG4gICAgfWVsc2UgaWYodGhpcy5wcm9wcy5yb3dTZWxlY3RUeXBlID09IENvbnN0LlJPV19TRUxFQ1RfTVVMVEkpe1xuICAgICAgcmV0dXJuICg8U2VsZWN0Um93SGVhZGVyQ29sdW1uPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBvbkNoYW5nZT17dGhpcy5wcm9wcy5vblNlbGVjdEFsbFJvd30vPjwvU2VsZWN0Um93SGVhZGVyQ29sdW1uPik7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfYXR0YWNoQ2xlYXJTb3J0Q2FyZXRGdW5jKCl7XG4gICAgaWYoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKSl7XG4gICAgICBmb3IobGV0IGk9MDtpPHRoaXMucHJvcHMuY2hpbGRyZW4ubGVuZ3RoO2krKyl7XG4gICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5baV0gPVxuICAgICAgICAgIFJlYWN0LmNsb25lRWxlbWVudCh0aGlzLnByb3BzLmNoaWxkcmVuW2ldLCB7a2V5OiBpLCBjbGVhclNvcnRDYXJldDogdGhpcy5jbGVhclNvcnRDYXJldC5iaW5kKHRoaXMpfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW4gPVxuICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQodGhpcy5wcm9wcy5jaGlsZHJlbiwge2tleTogMCwgY2xlYXJTb3J0Q2FyZXQ6IHRoaXMuY2xlYXJTb3J0Q2FyZXQuYmluZCh0aGlzKX0pO1xuICAgIH1cbiAgfVxufVxuVGFibGVIZWFkZXIucHJvcFR5cGVzID0ge1xuICByb3dTZWxlY3RUeXBlOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBvblNvcnQ6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICBvblNlbGVjdEFsbFJvdzogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIHNvcnROYW1lOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBzb3J0T3JkZXI6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIGhpZGVTZWxlY3RDb2x1bW46IFJlYWN0LlByb3BUeXBlcy5ib29sXG59O1xuXG5UYWJsZUhlYWRlci5kZWZhdWx0UHJvcHMgPSB7XG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFV0aWwgZnJvbSAnLi91dGlsJztcblxuY2xhc3MgVGFibGVIZWFkZXJDb2x1bW4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgb3JkZXI6IENvbnN0LlNPUlRfREVTQ1xuXG4gIGhhbmRsZUNvbHVtbkNsaWNrKGUpe1xuICAgIGlmKCF0aGlzLnByb3BzLmRhdGFTb3J0KXJldHVybjtcbiAgICB2YXIgZG9tID0gdGhpcy5yZWZzLmlubmVyRGl2LmdldERPTU5vZGUoKTtcbiAgICB0aGlzLm9yZGVyID0gdGhpcy5vcmRlciA9PSBDb25zdC5TT1JUX0RFU0M/Q29uc3QuU09SVF9BU0M6Q29uc3QuU09SVF9ERVNDO1xuICAgIHRoaXMucHJvcHMuY2xlYXJTb3J0Q2FyZXQodGhpcy5vcmRlciwgdGhpcy5wcm9wcy5kYXRhRmllbGQpO1xuICAgIGRvbS5hcHBlbmRDaGlsZChVdGlsLnJlbmRlclNvcnRDYXJldCh0aGlzLm9yZGVyKSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpe1xuICAgIHRoaXMucmVmcy5pbm5lckRpdi5nZXRET01Ob2RlKCkuc2V0QXR0cmlidXRlKFwiZGF0YS1maWVsZFwiLCB0aGlzLnByb3BzLmRhdGFGaWVsZCk7XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgdGhTdHlsZSA9IHtcbiAgICAgIHRleHRBbGlnbjogdGhpcy5wcm9wcy5kYXRhQWxpZ24sXG4gICAgICBkaXNwbGF5OiB0aGlzLnByb3BzLmhpZGRlbj9cIm5vbmVcIjpudWxsLFxuICAgICAgd2lkdGg6IHRoaXMucHJvcHMud2lkdGhcbiAgICB9O1xuXG4gICAgdmFyIGNsYXNzZXMgPSB0aGlzLnByb3BzLmNsYXNzTmFtZStcIiBcIisodGhpcy5wcm9wcy5kYXRhU29ydD9cInNvcnQtY29sdW1uXCI6XCJcIik7XG4gICAgcmV0dXJuKFxuICAgICAgPHRoIGNsYXNzTmFtZT17Y2xhc3Nlc30gc3R5bGU9e3RoU3R5bGV9PlxuICAgICAgICA8ZGl2IHJlZj1cImlubmVyRGl2XCIgY2xhc3NOYW1lPVwidGgtaW5uZXIgdGFibGUtaGVhZGVyLWNvbHVtblwiXG4gICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDb2x1bW5DbGljay5iaW5kKHRoaXMpfT57dGhpcy5wcm9wcy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgIDwvdGg+XG4gICAgKVxuICB9XG59XG5UYWJsZUhlYWRlckNvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGRhdGFGaWVsZDogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YUFsaWduOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBkYXRhU29ydDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNsZWFyU29ydENhcmV0OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgZGF0YUZvcm1hdDogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIGlzS2V5OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgZWRpdGFibGU6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBoaWRkZW46IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6UmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgd2lkdGg6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIHNvcnRGdW5jOiBSZWFjdC5Qcm9wVHlwZXMuZnVuY1xufTtcblxuVGFibGVIZWFkZXJDb2x1bW4uZGVmYXVsdFByb3BzID0ge1xuICBkYXRhQWxpZ246IFwibGVmdFwiLFxuICBkYXRhU29ydDogZmFsc2UsXG4gIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCxcbiAgaXNLZXk6IGZhbHNlLFxuICBlZGl0YWJsZTogdHJ1ZSxcbiAgY2xlYXJTb3J0Q2FyZXQ6IHVuZGVmaW5lZCxcbiAgaGlkZGVuOiBmYWxzZSxcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICB3aWR0aDogbnVsbCxcbiAgc29ydEZ1bmM6IHVuZGVmaW5lZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXJDb2x1bW47XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuXG5jbGFzcyBUYWJsZVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICByb3dDbGljayhlKXtcbiAgICBpZihlLnRhcmdldC50YWdOYW1lICE9PSBcIklOUFVUXCIpXG4gICAgICB0aGlzLnByb3BzLm9uU2VsZWN0Um93KGUuY3VycmVudFRhcmdldC5yb3dJbmRleCwgIXRoaXMucHJvcHMuaXNTZWxlY3RlZCk7XG4gIH1cblxuICByZW5kZXIoKXtcblxuICAgIHZhciByb3dTdHlsZSA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5wcm9wcy5pc1NlbGVjdGVkP3RoaXMucHJvcHMuc2VsZWN0Um93LmJnQ29sb3I6bnVsbFxuICAgIH07XG5cbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdyAmJiAhdGhpcy5wcm9wcy5lbmFibGVDZWxsRWRpdCAmJlxuICAgICAgKHRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgfHwgdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKSl7XG4gICAgICByZXR1cm4oXG4gICAgICAgIDx0ciBzdHlsZT17cm93U3R5bGV9IG9uQ2xpY2s9e3RoaXMucm93Q2xpY2suYmluZCh0aGlzKX0+e3RoaXMucHJvcHMuY2hpbGRyZW59PC90cj5cbiAgICAgIClcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybihcbiAgICAgICAgPHRyIHN0eWxlPXtyb3dTdHlsZX0+e3RoaXMucHJvcHMuY2hpbGRyZW59PC90cj5cbiAgICAgIClcbiAgICB9XG4gIH1cbn1cblRhYmxlUm93LnByb3BUeXBlcyA9IHtcbiAgaXNTZWxlY3RlZDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZUNlbGxFZGl0OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgb25TZWxlY3RSb3c6IFJlYWN0LlByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3c7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5jbGFzcyBQYWdlQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHR9XG5cbiAgcGFnZUJ0bkNsaWNrKGUpe1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnByb3BzLmNoYW5nZVBhZ2UoZS5jdXJyZW50VGFyZ2V0LnRleHQpO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIGNsYXNzZXMgPSB0aGlzLnByb3BzLmFjdGl2ZT9jbGFzc1NldChcImFjdGl2ZVwiKTpudWxsO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzZXN9PjxhIGhyZWY9XCIjXCIgb25DbGljaz17dGhpcy5wYWdlQnRuQ2xpY2suYmluZCh0aGlzKX0+e3RoaXMucHJvcHMuY2hpbGRyZW59PC9hPjwvbGk+XG4gICAgKVxuICB9XG59XG5QYWdlQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2hhbmdlUGFnZTogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIGFjdGl2ZTogUmVhY3QuUHJvcFR5cGVzLmJvb2xcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2VCdXR0b247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBhZ2VCdXR0b24gZnJvbSAnLi9QYWdlQnV0dG9uLmpzJ1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY2xhc3MgUGFnaW5hdGlvbkxpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zaXplUGVyTGlzdCA9IENvbnN0LlNJWkVfUEVSX0xJU1Q7XG5cdFx0dGhpcy5zdGF0ZSA9IHtcbiAgICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgICAgc2l6ZVBlclBhZ2U6IHRoaXMucHJvcHMuc2l6ZVBlclBhZ2VcbiAgICB9O1xuXHR9XG5cbiAgY2hhbmdlUGFnZShwYWdlKXtcbiAgICBpZihwYWdlID09IENvbnN0LlBSRV9QQUdFKXtcbiAgICAgIHBhZ2UgPSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlLTEgPCAxPzE6dGhpcy5zdGF0ZS5jdXJyZW50UGFnZS0xO1xuICAgIH1lbHNlIGlmKHBhZ2UgPT0gQ29uc3QuTkVYVF9QQUdFKXtcbiAgICAgIHBhZ2UgPSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlKzEgPiB0aGlzLnRvdGFsUGFnZXM/dGhpcy50b3RhbFBhZ2VzOnRoaXMuc3RhdGUuY3VycmVudFBhZ2UrMTtcbiAgICB9ZWxzZSBpZihwYWdlID09IENvbnN0LkxBU1RfUEFHRSl7XG4gICAgICBwYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xuICAgIH1lbHNlIGlmKHBhZ2UgPT0gQ29uc3QuRklSU1RfUEFHRSl7XG4gICAgICBwYWdlID0gMTtcbiAgICB9ZWxzZXtcbiAgICAgIHBhZ2UgPSBwYXJzZUludChwYWdlKTtcbiAgICB9XG5cbiAgICBpZihwYWdlICE9IHRoaXMuc3RhdGUuY3VycmVudFBhZ2Upe1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFBhZ2U6IHBhZ2V9KTtcbiAgICAgIHRoaXMucHJvcHMuY2hhbmdlUGFnZShwYWdlLCB0aGlzLnN0YXRlLnNpemVQZXJQYWdlKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTaXplUGVyUGFnZShlKXtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdmFyIHNlbGVjdFNpemUgPSBwYXJzZUludChlLmN1cnJlbnRUYXJnZXQudGV4dCk7XG4gICAgaWYoc2VsZWN0U2l6ZSAhPSB0aGlzLnN0YXRlLnNpemVQZXJQYWdlKXtcbiAgICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnByb3BzLmRhdGFTaXplL3NlbGVjdFNpemUpO1xuICAgICAgaWYodGhpcy5zdGF0ZS5jdXJyZW50UGFnZSA+IHRoaXMudG90YWxQYWdlcylcbiAgICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50UGFnZSA9IHRoaXMudG90YWxQYWdlcztcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzaXplUGVyUGFnZTogc2VsZWN0U2l6ZSxcbiAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuc3RhdGUuY3VycmVudFBhZ2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UsIHNlbGVjdFNpemUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnByb3BzLmRhdGFTaXplL3RoaXMuc3RhdGUuc2l6ZVBlclBhZ2UpO1xuICAgIHZhciBwYWdlQnRucyA9IHRoaXMubWFrZVBhZ2UoKTtcbiAgICB2YXIgcGFnZUxpc3RTdHlsZSA9IHtcbiAgICAgIG1hcmdpblRvcDogXCIwcHhcIiAgLy9vdmVycmlkZSB0aGUgbWFyZ2luLXRvcCBkZWZpbmVkIGluIC5wYWdpbmF0aW9uIGNsYXNzIGluIGJvb3RzdHJhcC5cbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJwYWdlRHJvcERvd25cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1leHBhbmRlZD1cInRydWVcIj5cbiAgICAgICAgICAgICAge3RoaXMuc3RhdGUuc2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwiZHJvcGRvd24tbWVudVwiIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwicGFnZURyb3BEb3duXCI+XG4gICAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCI+PGEgcm9sZT1cIm1lbnVpdGVtXCIgdGFiSW5kZXg9XCItMVwiIGhyZWY9XCIjXCIgb25DbGljaz17dGhpcy5jaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpfT4xMDwvYT48L2xpPlxuICAgICAgICAgICAgICA8bGkgcm9sZT1cInByZXNlbnRhdGlvblwiPjxhIHJvbGU9XCJtZW51aXRlbVwiIHRhYkluZGV4PVwiLTFcIiBocmVmPVwiI1wiIG9uQ2xpY2s9e3RoaXMuY2hhbmdlU2l6ZVBlclBhZ2UuYmluZCh0aGlzKX0+MjU8L2E+PC9saT5cbiAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIj48YSByb2xlPVwibWVudWl0ZW1cIiB0YWJJbmRleD1cIi0xXCIgaHJlZj1cIiNcIiBvbkNsaWNrPXt0aGlzLmNoYW5nZVNpemVQZXJQYWdlLmJpbmQodGhpcyl9PjMwPC9hPjwvbGk+XG4gICAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCI+PGEgcm9sZT1cIm1lbnVpdGVtXCIgdGFiSW5kZXg9XCItMVwiIGhyZWY9XCIjXCIgb25DbGljaz17dGhpcy5jaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpfT41MDwvYT48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwicGFnaW5hdGlvblwiIHN0eWxlPXtwYWdlTGlzdFN0eWxlfT5cbiAgICAgICAgICAgIHtwYWdlQnRuc31cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIG1ha2VQYWdlKCl7XG4gICAgdmFyIHBhZ2VzID0gdGhpcy5nZXRQYWdlcygpO1xuICAgIHJldHVybiBwYWdlcy5tYXAoZnVuY3Rpb24ocGFnZSl7XG4gICAgICB2YXIgaXNBY3RpdmUgPSBwYWdlID09IHRoaXMuc3RhdGUuY3VycmVudFBhZ2U/dHJ1ZTpmYWxzZTtcbiAgICAgIHJldHVybihcbiAgICAgICAgPFBhZ2VCdXR0b24gY2hhbmdlUGFnZT17dGhpcy5jaGFuZ2VQYWdlLmJpbmQodGhpcyl9IGFjdGl2ZT17aXNBY3RpdmV9IGtleT17cGFnZX0+e3BhZ2V9PC9QYWdlQnV0dG9uPlxuICAgICAgKVxuICAgIH0sIHRoaXMpO1xuICB9XG5cbiAgZ2V0UGFnZXMoKXtcbiAgICB2YXIgc3RhcnRQYWdlID0gMSwgZW5kUGFnZSA9IHRoaXMudG90YWxQYWdlcztcblxuICAgIHN0YXJ0UGFnZSA9IE1hdGgubWF4KHRoaXMuc3RhdGUuY3VycmVudFBhZ2UgLSBNYXRoLmZsb29yKHRoaXMuc2l6ZVBlckxpc3QvMiksIDEpO1xuICAgIGVuZFBhZ2UgICA9IHN0YXJ0UGFnZSArIHRoaXMuc2l6ZVBlckxpc3QgLSAxO1xuXG4gICAgaWYgKGVuZFBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgIGVuZFBhZ2UgICA9IHRoaXMudG90YWxQYWdlcztcbiAgICAgIHN0YXJ0UGFnZSA9IGVuZFBhZ2UgLSB0aGlzLnNpemVQZXJMaXN0ICsgMTtcbiAgICB9XG4gICAgdmFyIHBhZ2VzID0gW0NvbnN0LkZJUlNUX1BBR0UsIENvbnN0LlBSRV9QQUdFXTtcbiAgICBmb3IodmFyIGk9c3RhcnRQYWdlO2k8PWVuZFBhZ2U7aSsrKXtcbiAgICAgIGlmKGk+MClwYWdlcy5wdXNoKGkpO1xuICAgIH1cbiAgICBwYWdlcy5wdXNoKENvbnN0Lk5FWFRfUEFHRSk7XG4gICAgcGFnZXMucHVzaChDb25zdC5MQVNUX1BBR0UpO1xuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG4gIGdldEN1cnJlbnRQYWdlKCl7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuY3VycmVudFBhZ2U7XG4gIH1cblxuICBnZXRTaXplUGVyUGFnZSgpe1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnNpemVQZXJQYWdlO1xuICB9XG59XG5QYWdpbmF0aW9uTGlzdC5wcm9wVHlwZXMgPSB7XG4gIHNpemVQZXJQYWdlOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICBkYXRhU2l6ZTogUmVhY3QuUHJvcFR5cGVzLm51bWJlcixcbiAgY2hhbmdlUGFnZTogUmVhY3QuUHJvcFR5cGVzLmZ1bmNcbn07XG5cblBhZ2luYXRpb25MaXN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgc2l6ZVBlclBhZ2U6IENvbnN0LlNJWkVfUEVSX1BBR0Vcbn1cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRpb25MaXN0O1xuIiwiaW1wb3J0IENvbnN0IGZyb20gXCIuLi9Db25zdFwiO1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxuZnVuY3Rpb24gX3NvcnQoYXJyLCBzb3J0RmllbGQsIG9yZGVyLCBzb3J0RnVuYyl7XG4gIG9yZGVyID0gb3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgYXJyLnNvcnQoKGEsYikgPT4ge1xuICAgIGlmKHNvcnRGdW5jKXtcbiAgICAgIHJldHVybiBzb3J0RnVuYyhhLCBiLCBvcmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKG9yZGVyID09IENvbnN0LlNPUlRfREVTQyl7XG4gICAgICAgIHJldHVybiBhW3NvcnRGaWVsZF0gPiBiW3NvcnRGaWVsZF0/LTE6ICgoYVtzb3J0RmllbGRdIDwgYltzb3J0RmllbGRdKSA/IDEgOiAwKTtcbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4gYVtzb3J0RmllbGRdIDwgYltzb3J0RmllbGRdPy0xOiAoKGFbc29ydEZpZWxkXSA+IGJbc29ydEZpZWxkXSkgPyAxIDogMCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhU2V0IGV4dGVuZHMgRXZlbnRFbWl0dGVye1xuICBjb25zdHJ1Y3RvcihkYXRhKXtcbiAgICBzdXBlcihkYXRhKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgc2V0RGF0YShkYXRhKSB7XG4gICAgdGhpcy5lbWl0KCdjaGFuZ2UnLCBkYXRhKTtcbiAgfVxuXG4gIGNsZWFyKCl7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgfVxuXG4gIGdldERhdGEoKXtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFTdG9yZXtcblxuICBjb25zdHJ1Y3RvcihkYXRhKXtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuY3VzdG9tU29ydEZ1bmNNYXAgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICB0aGlzLmlzT25GaWx0ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmZpbHRlck9iaiA9IG51bGw7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICB0aGlzLnNvcnRPYmogPSBudWxsO1xuICAgIHRoaXMucGFnZU9iaiA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgfVxuXG4gIHNldFByb3BzKGlzUGFnaW5hdGlvbiwga2V5RmllbGQsIGN1c3RvbVNvcnRGdW5jTWFwKXtcbiAgICB0aGlzLmtleUZpZWxkID0ga2V5RmllbGQ7XG4gICAgdGhpcy5lbmFibGVQYWdpbmF0aW9uID0gaXNQYWdpbmF0aW9uO1xuICAgIHRoaXMuY3VzdG9tU29ydEZ1bmNNYXAgPSBjdXN0b21Tb3J0RnVuY01hcDtcbiAgfVxuXG4gIHNldERhdGEoZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgaWYodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICBpZihudWxsICE9PSB0aGlzLmZpbHRlck9iaikgdGhpcy5maWx0ZXIodGhpcy5maWx0ZXJPYmopO1xuICAgICAgaWYobnVsbCAhPT0gdGhpcy5zZWFyY2hUZXh0KSB0aGlzLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIH1cbiAgICBpZih0aGlzLnNvcnRPYmope1xuICAgICAgdGhpcy5zb3J0KHRoaXMuc29ydE9iai5vcmRlciwgdGhpcy5zb3J0T2JqLnNvcnRGaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRSb3dLZXkoc2VsZWN0ZWRSb3dLZXlzKXtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWRSb3dLZXlzO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCl7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXRDdXJyZW50RGlzcGxheURhdGEoKXtcbiAgICBpZih0aGlzLmlzT25GaWx0ZXIpIHJldHVybiB0aGlzLmZpbHRlcmVkRGF0YTtcbiAgICBlbHNlIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBzb3J0KG9yZGVyLCBzb3J0RmllbGQpe1xuICAgIHRoaXMuc29ydE9iaiA9IHtcbiAgICAgIG9yZGVyOiBvcmRlcixcbiAgICAgIHNvcnRGaWVsZDogc29ydEZpZWxkXG4gICAgfTtcblxuICAgIGxldCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGxldCBzb3J0RnVuYyA9IHRoaXMuY3VzdG9tU29ydEZ1bmNNYXBbc29ydEZpZWxkXTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEgPSBfc29ydChjdXJyZW50RGlzcGxheURhdGEsIHNvcnRGaWVsZCwgb3JkZXIsIHNvcnRGdW5jKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGFnZShwYWdlLCBzaXplUGVyUGFnZSl7XG4gICAgdGhpcy5wYWdlT2JqLmVuZCA9IHBhZ2Uqc2l6ZVBlclBhZ2UtMTtcbiAgICB0aGlzLnBhZ2VPYmouc3RhcnQgPSB0aGlzLnBhZ2VPYmouZW5kIC0gKHNpemVQZXJQYWdlIC0gMSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBlZGl0KG5ld1ZhbCwgcm93SW5kZXgsIGZpZWxkTmFtZSl7XG4gICAgbGV0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgbGV0IHJvd0tleUNhY2hlO1xuICAgIGlmKCF0aGlzLmVuYWJsZVBhZ2luYXRpb24pe1xuICAgICAgY3VycmVudERpc3BsYXlEYXRhW3Jvd0luZGV4XVtmaWVsZE5hbWVdID0gbmV3VmFsO1xuICAgICAgcm93S2V5Q2FjaGUgPSBjdXJyZW50RGlzcGxheURhdGFbcm93SW5kZXhdW3RoaXMua2V5RmllbGRdO1xuICAgIH1lbHNle1xuICAgICAgY3VycmVudERpc3BsYXlEYXRhW3RoaXMucGFnZU9iai5zdGFydCtyb3dJbmRleF1bZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgIHJvd0tleUNhY2hlID0gY3VycmVudERpc3BsYXlEYXRhW3RoaXMucGFnZU9iai5zdGFydCtyb3dJbmRleF1bdGhpcy5rZXlGaWVsZF07XG4gICAgfVxuICAgIGlmKHRoaXMuaXNPbkZpbHRlcil7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpe1xuICAgICAgICBpZihyb3dbdGhpcy5rZXlGaWVsZF0gPT09IHJvd0tleUNhY2hlKXtcbiAgICAgICAgICByb3dbdGhpcy5rZXlGaWVsZF1bZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkKG5ld09iail7XG4gICAgaWYobmV3T2JqW3RoaXMua2V5RmllbGRdLnRyaW0oKSA9PT0gXCJcIil7XG4gICAgICB0aHJvdyB0aGlzLmtleUZpZWxkICsgXCIgY2FuJ3QgYmUgZW1wdHkgdmFsdWUuXCI7XG4gICAgfVxuICAgIGxldCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGN1cnJlbnREaXNwbGF5RGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7XG4gICAgICBpZihyb3dbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gbmV3T2JqW3RoaXMua2V5RmllbGRdKXtcbiAgICAgICAgdGhyb3cgdGhpcy5rZXlGaWVsZCArIFwiIFwiICsgbmV3T2JqW3RoaXMua2V5RmllbGRdICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcblxuICAgIGN1cnJlbnREaXNwbGF5RGF0YS5wdXNoKG5ld09iaik7XG4gICAgaWYodGhpcy5pc09uRmlsdGVyKXtcbiAgICAgIHRoaXMuZGF0YS5wdXNoKG5ld09iaik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKHJvd0tleSl7XG4gICAgbGV0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgbGV0IHJlc3VsdCA9IGN1cnJlbnREaXNwbGF5RGF0YS5maWx0ZXIoZnVuY3Rpb24ocm93KXtcbiAgICAgIHJldHVybiByb3dLZXkuaW5kZXhPZihyb3dbdGhpcy5rZXlGaWVsZF0pID09IC0xO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgaWYodGhpcy5pc09uRmlsdGVyKXtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24ocm93KXtcbiAgICAgICAgcmV0dXJuIHJvd0tleS5pbmRleE9mKHJvd1t0aGlzLmtleUZpZWxkXSkgPT0gLTE7XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gcmVzdWx0O1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5kYXRhID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlcihmaWx0ZXJPYmope1xuICAgIGlmKE9iamVjdC5rZXlzKGZpbHRlck9iaikubGVuZ3RoID09IDApe1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlck9iaiA9IG51bGw7XG4gICAgfSBlbHNle1xuICAgICAgdGhpcy5maWx0ZXJPYmogPSBmaWx0ZXJPYmo7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24ocm93KXtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgZm9yKHZhciBrZXkgaW4gZmlsdGVyT2JqKXtcbiAgICAgICAgICBpZihyb3dba2V5XS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJPYmpba2V5XS50b0xvd2VyQ2FzZSgpKSA9PSAtMSl7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZWFyY2goc2VhcmNoVGV4dCl7XG4gICAgaWYoc2VhcmNoVGV4dC50cmltKCkgPT09IFwiXCIpe1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbihyb3cpe1xuICAgICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgZm9yKHZhciBrZXkgaW4gcm93KXtcbiAgICAgICAgICBpZihyb3dba2V5XSAmJlxuICAgICAgICAgICAgIHJvd1trZXldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgIT09IC0xKXtcbiAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0KCl7XG4gICAgbGV0IF9kYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcblxuICAgIGlmKF9kYXRhLmxlbmd0aCA9PSAwKSByZXR1cm4gX2RhdGE7XG5cbiAgICBpZighdGhpcy5lbmFibGVQYWdpbmF0aW9uKXtcbiAgICAgIHJldHVybiBfZGF0YTtcbiAgICB9ZWxzZXtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvcih2YXIgaT10aGlzLnBhZ2VPYmouc3RhcnQ7aTw9dGhpcy5wYWdlT2JqLmVuZDtpKyspe1xuICAgICAgICByZXN1bHQucHVzaChfZGF0YVtpXSk7XG4gICAgICAgIGlmKGkrMSA9PSBfZGF0YS5sZW5ndGgpYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGdldEtleUZpZWxkKCl7XG4gICAgcmV0dXJuIHRoaXMua2V5RmllbGQ7XG4gIH1cblxuICBnZXREYXRhTnVtKCl7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0QWxsUm93a2V5KCl7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAoZnVuY3Rpb24ocm93KXtcbiAgICAgIHJldHVybiByb3dbdGhpcy5rZXlGaWVsZF07XG4gICAgfSwgdGhpcyk7XG4gIH1cblxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBUb29sQmFyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0luc2VydFJvd1RyaWdnZXI6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgaGFuZGxlU2F2ZUJ0bkNsaWNrKGUpe1xuICAgIHZhciBuZXdPYmogPSB7fTtcbiAgICB0aGlzLnByb3BzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbihjb2x1bW4sIGkpe1xuICAgICAgbmV3T2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLnJlZnNbY29sdW1uLmZpZWxkK2ldLmdldERPTU5vZGUoKS52YWx1ZTtcbiAgICB9LCB0aGlzKTtcbiAgICB2YXIgbXNnID0gdGhpcy5wcm9wcy5vbkFkZFJvdyhuZXdPYmopO1xuICAgIGlmKG1zZykge1xuICAgICAgdGhpcy5yZWZzLndhcm5pbmcuZ2V0RE9NTm9kZSgpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLnJlZnMud2FybmluZ1RleHQuZ2V0RE9NTm9kZSgpLnRleHRDb250ZW50ID0gbXNnO1xuICAgIH0gZWxzZXtcbiAgICAgIHRoaXMucmVmcy53YXJuaW5nLmdldERPTU5vZGUoKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRHJvcFJvd0J0bkNsaWNrKGUpe1xuICAgIHRoaXMucHJvcHMub25Ecm9wUm93KCk7XG4gIH1cblxuICBoYW5kbGVDbG9zZUJ0bihlKXtcbiAgICB0aGlzLnJlZnMud2FybmluZy5nZXRET01Ob2RlKCkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB9XG5cbiAgaGFuZGxlS2V5VXAoZSl7XG4gICAgdGhpcy5wcm9wcy5vblNlYXJjaChlLmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIG1vZGFsQ2xhc3NOYW1lID0gXCJicy10YWJsZS1tb2RhbC1zbVwiK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHZhciBpbnNlcnRCdG4gPSB0aGlzLnByb3BzLmVuYWJsZUluc2VydD9cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9eycuJyttb2RhbENsYXNzTmFtZX0+XG4gICAgICAgICAgICBOZXc8L2J1dHRvbj46bnVsbDtcblxuICAgIHZhciBkZWxldGVCdG4gPSB0aGlzLnByb3BzLmVuYWJsZURlbGV0ZT9cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJEcm9wIHNlbGVjdGVkIHJvd1wiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZURyb3BSb3dCdG5DbGljay5iaW5kKHRoaXMpfT5cbiAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgIDwvYnV0dG9uPjpudWxsO1xuICAgIHZhciBzZWFyY2hUZXh0SW5wdXQgPSB0aGlzLnByb3BzLmVuYWJsZVNlYXJjaD9cbiAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5zZWFyY2hQbGFjZWhvbGRlcj90aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyOidTZWFyY2gnfSBvbktleVVwPXt0aGlzLmhhbmRsZUtleVVwLmJpbmQodGhpcyl9Lz46bnVsbDtcbiAgICB2YXIgbW9kYWwgPSB0aGlzLnByb3BzLmVuYWJsZUluc2VydD90aGlzLnJlbmRlckluc2VydFJvd01vZGFsKG1vZGFsQ2xhc3NOYW1lKTpudWxsO1xuICAgIHZhciB3YXJuaW5nU3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiBcIm5vbmVcIixcbiAgICAgIG1hcmdpbkJvdHRvbTogMFxuICAgIH07XG4gICAgcmV0dXJuKFxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIi4uLlwiPlxuICAgICAgICAgIHtpbnNlcnRCdG59e2RlbGV0ZUJ0bn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzZWFyY2hUZXh0SW5wdXR9XG4gICAgICAgIDxkaXYgcmVmPVwid2FybmluZ1wiIGNsYXNzTmFtZT1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiBzdHlsZT17d2FybmluZ1N0eWxlfT5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJjbG9zZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xvc2VCdG4uYmluZCh0aGlzKX0+PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgICA8c3Ryb25nPldhcm5pbmchIDwvc3Ryb25nPjxmb250IHJlZj1cIndhcm5pbmdUZXh0XCI+PC9mb250PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge21vZGFsfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmVuZGVySW5zZXJ0Um93TW9kYWwobW9kYWxDbGFzc05hbWUpe1xuXG4gICAgdmFyIGlucHV0RmllbGQgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbiwgaSl7XG4gICAgICByZXR1cm4oXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiIGtleT17Y29sdW1uLmZpZWxkfT5cbiAgICAgICAgICA8bGFiZWw+e2NvbHVtbi5uYW1lfTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHJlZj17Y29sdW1uLmZpZWxkK2l9IHR5cGU9XCJ0ZXh0XCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9e2NvbHVtbi5uYW1lfT48L2lucHV0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gICAgdmFyIG1vZGFsQ2xhc3MgPSBjbGFzc1NldChcIm1vZGFsXCIsIFwiZmFkZVwiLCBtb2RhbENsYXNzTmFtZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXttb2RhbENsYXNzfSB0YWJJbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWRpYWxvZyBtb2RhbC1zbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+PC9idXR0b24+XG4gICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJtb2RhbC10aXRsZVwiPk5ldyBSZWNvcmQ8L2g0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAge2lucHV0RmllbGR9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZVNhdmVCdG5DbGljay5iaW5kKHRoaXMpfT5TYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbn1cblRvb2xCYXIucHJvcFR5cGVzID0ge1xuICBvbkFkZFJvdzogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRHJvcFJvdzogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIGVuYWJsZUluc2VydDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZURlbGV0ZTogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZVNlYXJjaDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNvbHVtbnM6IFJlYWN0LlByb3BUeXBlcy5hcnJheSxcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmdcbn07XG5cblRvb2xCYXIuZGVmYXVsdFByb3BzID0ge1xuICBlbmFibGVJbnNlcnQ6IGZhbHNlLFxuICBlbmFibGVEZWxldGU6IGZhbHNlLFxuICBlbmFibGVTZWFyY2g6IGZhbHNlXG59XG5leHBvcnQgZGVmYXVsdCBUb29sQmFyO1xuIiwiaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuZXhwb3J0IGRlZmF1bHQge1xuXG4gIHJlbmRlclNvcnRDYXJldChvcmRlcikge1xuICAgIHZhciB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgd3JhcC5jbGFzc05hbWUgPSBcIm9yZGVyXCI7XG4gICAgaWYob3JkZXIgPT0gQ29uc3QuU09SVF9BU0MpIHdyYXAuY2xhc3NOYW1lICs9IFwiIGRyb3B1cFwiO1xuICAgIHZhciBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIGlubmVyLmNsYXNzTmFtZSA9IFwiY2FyZXRcIjtcbiAgICBpbm5lci5zdHlsZS5tYXJnaW4gPSBcIjEwcHggNXB4XCI7XG4gICAgd3JhcC5hcHBlbmRDaGlsZChpbm5lcik7XG4gICAgcmV0dXJuIHdyYXA7XG4gIH1cblxufTtcbiIsImltcG9ydCBCb290c3RyYXBUYWJsZSBmcm9tICcuL0Jvb3RzdHJhcFRhYmxlJztcbmltcG9ydCBUYWJsZUhlYWRlckNvbHVtbiBmcm9tICcuL1RhYmxlSGVhZGVyQ29sdW1uJztcbmltcG9ydCB7VGFibGVEYXRhU2V0fSBmcm9tICcuL3N0b3JlL1RhYmxlRGF0YVN0b3JlJztcblxuaWYod2luZG93KXtcbiAgd2luZG93LkJvb3RzdHJhcFRhYmxlID0gQm9vdHN0cmFwVGFibGU7XG4gIHdpbmRvdy5UYWJsZUhlYWRlckNvbHVtbiA9IFRhYmxlSGVhZGVyQ29sdW1uO1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICBCb290c3RyYXBUYWJsZSxcbiAgVGFibGVIZWFkZXJDb2x1bW4sXG4gIFRhYmxlRGF0YVNldFxufTtcbiJdfQ== diff --git a/example/js/demo.js b/example/js/demo.js index 767c8467b..2d3d888d9 100644 --- a/example/js/demo.js +++ b/example/js/demo.js @@ -49,6 +49,7 @@ function onAfterInsertRow(row){ var selectRowProp = { mode: "checkbox", clickToSelect: true, + // hideSelectColumn: true, //you can hide select column, if you enable clickToSelect selected: [], //default select on table bgColor: "rgb(238, 193, 213)", onSelect: onRowSelect, diff --git a/src/BootstrapTable.js b/src/BootstrapTable.js index a45b9b56c..a0722b1d9 100644 --- a/src/BootstrapTable.js +++ b/src/BootstrapTable.js @@ -125,6 +125,7 @@ class BootstrapTable extends React.Component{ {toolBar}
); + selectRowHeader = this.props.selectRow.hideSelectColumn?null:(); } var theader = this.props.columns.map(function(column, i){ let style={ @@ -157,6 +158,8 @@ class TableBody extends React.Component{ this.editing = true; if(this._isSelectRowDefined()){ columnIndex--; + if(this.props.selectRow.hideSelectColumn) + columnIndex++; } rowIndex--; var stateObj = { diff --git a/src/TableHeader.js b/src/TableHeader.js index cb099a5fe..0decd33d9 100644 --- a/src/TableHeader.js +++ b/src/TableHeader.js @@ -38,7 +38,7 @@ class TableHeader extends React.Component{ render(){ var containerClasses = classSet("table-header"); - var selectRowHeaderCol = this.renderSelectRowHeader(); + var selectRowHeaderCol = this.props.hideSelectColumn?null:this.renderSelectRowHeader(); this._attachClearSortCaretFunc(); return( @@ -82,7 +82,8 @@ TableHeader.propTypes = { onSort: React.PropTypes.func, onSelectAllRow: React.PropTypes.func, sortName: React.PropTypes.string, - sortOrder: React.PropTypes.string + sortOrder: React.PropTypes.string, + hideSelectColumn: React.PropTypes.bool }; TableHeader.defaultProps = {