@merchi/checkout 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +196 -0
- package/lib/actions/confirm.d.ts +2 -0
- package/lib/actions/confirm.js +85 -0
- package/lib/actions/customer.d.ts +2 -0
- package/lib/actions/customer.js +53 -0
- package/lib/actions/domain.d.ts +2 -0
- package/lib/actions/domain.js +65 -0
- package/lib/actions/files.d.ts +1 -0
- package/lib/actions/files.js +35 -0
- package/lib/actions/helpers.d.ts +19 -0
- package/lib/actions/helpers.js +125 -0
- package/lib/actions/invoice.d.ts +3 -0
- package/lib/actions/invoice.js +113 -0
- package/lib/area.d.ts +77 -0
- package/lib/area.js +298 -0
- package/lib/assets/merchi-monster-loader.gif +0 -0
- package/lib/checkoutSession.d.ts +32 -0
- package/lib/checkoutSession.js +151 -0
- package/lib/components/Alerts.d.ts +3 -0
- package/lib/components/Alerts.js +88 -0
- package/lib/components/CancelOrderConfirmModal.d.ts +10 -0
- package/lib/components/CancelOrderConfirmModal.js +50 -0
- package/lib/components/CheckoutSummaryFields.d.ts +11 -0
- package/lib/components/CheckoutSummaryFields.js +38 -0
- package/lib/components/Collapse.d.ts +3 -0
- package/lib/components/Collapse.js +34 -0
- package/lib/components/CustomerCheckoutMethodTabs.d.ts +6 -0
- package/lib/components/CustomerCheckoutMethodTabs.js +90 -0
- package/lib/components/DiscountInputGroup.d.ts +2 -0
- package/lib/components/DiscountInputGroup.js +256 -0
- package/lib/components/DraftImageUploaded.d.ts +8 -0
- package/lib/components/DraftImageUploaded.js +53 -0
- package/lib/components/FooterButtons.d.ts +11 -0
- package/lib/components/FooterButtons.js +28 -0
- package/lib/components/InvoiceInfo.d.ts +6 -0
- package/lib/components/InvoiceInfo.js +37 -0
- package/lib/components/JobInfoContent.d.ts +2 -0
- package/lib/components/JobInfoContent.js +728 -0
- package/lib/components/MerchiCheckout.d.ts +46 -0
- package/lib/components/MerchiCheckout.js +49 -0
- package/lib/components/MerchiCheckoutProvider.d.ts +167 -0
- package/lib/components/MerchiCheckoutProvider.js +569 -0
- package/lib/components/MerchiCheckoutTabs.d.ts +2 -0
- package/lib/components/MerchiCheckoutTabs.js +50 -0
- package/lib/components/TabPane.d.ts +7 -0
- package/lib/components/TabPane.js +21 -0
- package/lib/components/TabPaneAddress.d.ts +3 -0
- package/lib/components/TabPaneAddress.js +28 -0
- package/lib/components/TabPaneConfirm.d.ts +11 -0
- package/lib/components/TabPaneConfirm.js +288 -0
- package/lib/components/TabPaneContainer.d.ts +6 -0
- package/lib/components/TabPaneContainer.js +13 -0
- package/lib/components/TabPaneCustomer.d.ts +5 -0
- package/lib/components/TabPaneCustomer.js +93 -0
- package/lib/components/TabPaneNewDomain.d.ts +3 -0
- package/lib/components/TabPaneNewDomain.js +39 -0
- package/lib/components/TabPanePayment.d.ts +3 -0
- package/lib/components/TabPanePayment.js +99 -0
- package/lib/components/TabPaneSubmitted.d.ts +3 -0
- package/lib/components/TabPaneSubmitted.js +90 -0
- package/lib/components/TitleStep.d.ts +6 -0
- package/lib/components/TitleStep.js +24 -0
- package/lib/components/buttons/ButtonInvoiceDownload.d.ts +3 -0
- package/lib/components/buttons/ButtonInvoiceDownload.js +91 -0
- package/lib/components/buttons/ButtonNext.d.ts +10 -0
- package/lib/components/buttons/ButtonNext.js +48 -0
- package/lib/components/buttons/ButtonPrevious.d.ts +7 -0
- package/lib/components/buttons/ButtonPrevious.js +36 -0
- package/lib/components/buttons/index.d.ts +3 -0
- package/lib/components/buttons/index.js +4 -0
- package/lib/components/currency.d.ts +5 -0
- package/lib/components/currency.js +223 -0
- package/lib/components/forms/CheckboxBillingAddressSameAsShippingAddress.d.ts +7 -0
- package/lib/components/forms/CheckboxBillingAddressSameAsShippingAddress.js +22 -0
- package/lib/components/forms/FormAddresses.d.ts +6 -0
- package/lib/components/forms/FormAddresses.js +251 -0
- package/lib/components/forms/FormCustomerNew.d.ts +4 -0
- package/lib/components/forms/FormCustomerNew.js +197 -0
- package/lib/components/forms/FormCustomerReturning.d.ts +3 -0
- package/lib/components/forms/FormCustomerReturning.js +147 -0
- package/lib/components/forms/FormDomainNew.d.ts +2 -0
- package/lib/components/forms/FormDomainNew.js +152 -0
- package/lib/components/forms/FormWhatsappCustomer.d.ts +4 -0
- package/lib/components/forms/FormWhatsappCustomer.js +217 -0
- package/lib/components/forms/InputAcceptUserTermsAndConditions.d.ts +7 -0
- package/lib/components/forms/InputAcceptUserTermsAndConditions.js +38 -0
- package/lib/components/forms/InputCheckStoreName.d.ts +7 -0
- package/lib/components/forms/InputCheckStoreName.js +168 -0
- package/lib/components/forms/InputError.d.ts +8 -0
- package/lib/components/forms/InputError.js +19 -0
- package/lib/components/forms/InputFileUpload.d.ts +12 -0
- package/lib/components/forms/InputFileUpload.js +191 -0
- package/lib/components/forms/InputSelect.d.ts +14 -0
- package/lib/components/forms/InputSelect.js +52 -0
- package/lib/components/forms/InputText.d.ts +12 -0
- package/lib/components/forms/InputText.js +59 -0
- package/lib/components/forms/InputsAddress.d.ts +12 -0
- package/lib/components/forms/InputsAddress.js +533 -0
- package/lib/components/forms/index.d.ts +5 -0
- package/lib/components/forms/index.js +6 -0
- package/lib/components/lists/ListShipmentQuoteOptions.d.ts +9 -0
- package/lib/components/lists/ListShipmentQuoteOptions.js +145 -0
- package/lib/components/lists/index.d.ts +2 -0
- package/lib/components/lists/index.js +3 -0
- package/lib/fonts/nunito-bold-webfont.woff +0 -0
- package/lib/fonts/nunito-bold-webfont.woff2 +0 -0
- package/lib/fonts/nunito-regular-webfont.woff +0 -0
- package/lib/fonts/nunito-regular-webfont.woff2 +0 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +4 -0
- package/lib/merchi_source.d.ts +2 -0
- package/lib/merchi_source.js +31 -0
- package/lib/styles/globals.css +2546 -0
- package/lib/styles/globals.css.map +1 -0
- package/lib/styles/globals.scss +2763 -0
- package/lib/tabs_utils.d.ts +31 -0
- package/lib/tabs_utils.js +104 -0
- package/lib/types.d.ts +43 -0
- package/lib/types.js +40 -0
- package/lib/utils.d.ts +68 -0
- package/lib/utils.js +560 -0
- package/package.json +96 -0
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
5
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
6
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
7
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
8
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
9
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
10
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
11
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
12
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
13
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
14
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
15
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
16
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
17
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
18
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
19
|
+
import React from 'react';
|
|
20
|
+
import { useEffect } from 'react';
|
|
21
|
+
import { debounce } from 'lodash';
|
|
22
|
+
import { Merchi } from '@merchi/sdk';
|
|
23
|
+
import { CountryDropdown, RegionDropdown } from 'react-country-region-selector';
|
|
24
|
+
import { Controller } from 'react-hook-form';
|
|
25
|
+
import InputText from './InputText';
|
|
26
|
+
import { useMerchiCheckboutContext } from '../MerchiCheckoutProvider';
|
|
27
|
+
import { addressInOneLine, googlePlacesResultAsNewAddress } from '../../utils';
|
|
28
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
29
|
+
import { faSpinner, faTimes, faEdit, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
|
|
30
|
+
import { useState } from 'react';
|
|
31
|
+
import Collapse from '../Collapse';
|
|
32
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
33
|
+
var merchi = new Merchi();
|
|
34
|
+
export function InputsAddress(_ref) {
|
|
35
|
+
var _addressLocal$lineOne;
|
|
36
|
+
var _ref$defaultAddress = _ref.defaultAddress,
|
|
37
|
+
defaultAddress = _ref$defaultAddress === void 0 ? {} : _ref$defaultAddress,
|
|
38
|
+
_ref$labelGeoSuggest = _ref.labelGeoSuggest,
|
|
39
|
+
labelGeoSuggest = _ref$labelGeoSuggest === void 0 ? 'Address' : _ref$labelGeoSuggest,
|
|
40
|
+
hookForm = _ref.hookForm,
|
|
41
|
+
name = _ref.name,
|
|
42
|
+
_ref$placeholder = _ref.placeholder,
|
|
43
|
+
placeholder = _ref$placeholder === void 0 ? 'Search your address' : _ref$placeholder,
|
|
44
|
+
recommendedAddress = _ref.recommendedAddress,
|
|
45
|
+
updateAddress = _ref.updateAddress;
|
|
46
|
+
var _useMerchiCheckboutCo = useMerchiCheckboutContext(),
|
|
47
|
+
classNameMerchiCheckoutFormGroup = _useMerchiCheckboutCo.classNameMerchiCheckoutFormGroup,
|
|
48
|
+
classNameMerchiCheckoutFormInput = _useMerchiCheckboutCo.classNameMerchiCheckoutFormInput,
|
|
49
|
+
classNameMerchiCheckoutFormSelect = _useMerchiCheckboutCo.classNameMerchiCheckoutFormSelect,
|
|
50
|
+
classNameMerchiCheckoutRow = _useMerchiCheckboutCo.classNameMerchiCheckoutRow,
|
|
51
|
+
classNameMerchiCheckoutRowColumn = _useMerchiCheckboutCo.classNameMerchiCheckoutRowColumn,
|
|
52
|
+
classNameMerchiCheckoutGoogleSuggestList = _useMerchiCheckboutCo.classNameMerchiCheckoutGoogleSuggestList,
|
|
53
|
+
classNameMerchiCheckoutGoogleSuggestListItem = _useMerchiCheckboutCo.classNameMerchiCheckoutGoogleSuggestListItem;
|
|
54
|
+
var _React$useState = React.useState(''),
|
|
55
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
56
|
+
inputValue = _React$useState2[0],
|
|
57
|
+
setInputValue = _React$useState2[1];
|
|
58
|
+
var _React$useState3 = React.useState([]),
|
|
59
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
60
|
+
suggestions = _React$useState4[0],
|
|
61
|
+
setSuggestions = _React$useState4[1];
|
|
62
|
+
var _React$useState5 = React.useState(false),
|
|
63
|
+
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
64
|
+
showSuggestions = _React$useState6[0],
|
|
65
|
+
setShowSuggestions = _React$useState6[1];
|
|
66
|
+
var _React$useState7 = React.useState(false),
|
|
67
|
+
_React$useState8 = _slicedToArray(_React$useState7, 2),
|
|
68
|
+
loading = _React$useState8[0],
|
|
69
|
+
setLoading = _React$useState8[1];
|
|
70
|
+
var _React$useState9 = React.useState(-1),
|
|
71
|
+
_React$useState0 = _slicedToArray(_React$useState9, 2),
|
|
72
|
+
selectedIndex = _React$useState0[0],
|
|
73
|
+
setSelectedIndex = _React$useState0[1];
|
|
74
|
+
var _React$useState1 = React.useState(_objectSpread({}, defaultAddress)),
|
|
75
|
+
_React$useState10 = _slicedToArray(_React$useState1, 2),
|
|
76
|
+
addressLocal = _React$useState10[0],
|
|
77
|
+
setAddressLocal = _React$useState10[1];
|
|
78
|
+
var inputRef = React.useRef(null);
|
|
79
|
+
var suggestionsRef = React.useRef(null);
|
|
80
|
+
var control = hookForm.control,
|
|
81
|
+
_hookForm$formState = hookForm.formState,
|
|
82
|
+
errors = _hookForm$formState.errors,
|
|
83
|
+
isValid = _hookForm$formState.isValid,
|
|
84
|
+
submitCount = _hookForm$formState.submitCount,
|
|
85
|
+
setValue = hookForm.setValue,
|
|
86
|
+
getValues = hookForm.getValues,
|
|
87
|
+
reset = hookForm.reset,
|
|
88
|
+
watch = hookForm.watch;
|
|
89
|
+
var inputName = function inputName(_name) {
|
|
90
|
+
return "".concat(name ? "".concat(name, ".") : '').concat(_name);
|
|
91
|
+
};
|
|
92
|
+
var selectedCountry = watch(inputName('country'));
|
|
93
|
+
function onChangeCountryState() {
|
|
94
|
+
// Parent updateAddress expects a single address object (see FormAddresses).
|
|
95
|
+
updateAddress(getValues()[name]);
|
|
96
|
+
}
|
|
97
|
+
var _useState = useState(false),
|
|
98
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
99
|
+
addressFieldsOpen = _useState2[0],
|
|
100
|
+
setAddressFieldsOpen = _useState2[1];
|
|
101
|
+
var toggleAddressFieldsOpen = function toggleAddressFieldsOpen() {
|
|
102
|
+
return setAddressFieldsOpen(!addressFieldsOpen);
|
|
103
|
+
};
|
|
104
|
+
useEffect(function () {
|
|
105
|
+
if (!isValid && !addressFieldsOpen && submitCount > 0) {
|
|
106
|
+
toggleAddressFieldsOpen();
|
|
107
|
+
}
|
|
108
|
+
}, [isValid, submitCount]);
|
|
109
|
+
useEffect(function () {
|
|
110
|
+
if (!(defaultAddress !== null && defaultAddress !== void 0 && defaultAddress.lineOne)) return;
|
|
111
|
+
var nextAddress = _objectSpread({}, defaultAddress);
|
|
112
|
+
setAddressLocal(nextAddress);
|
|
113
|
+
setInputValue(addressInOneLine(nextAddress));
|
|
114
|
+
reset(_objectSpread(_objectSpread({}, getValues()), {}, _defineProperty({}, name, nextAddress)));
|
|
115
|
+
}, [defaultAddress === null || defaultAddress === void 0 ? void 0 : defaultAddress.lineOne, defaultAddress === null || defaultAddress === void 0 ? void 0 : defaultAddress.city, defaultAddress === null || defaultAddress === void 0 ? void 0 : defaultAddress.postcode]);
|
|
116
|
+
function searchAddresses(_x) {
|
|
117
|
+
return _searchAddresses.apply(this, arguments);
|
|
118
|
+
} // Debounced search function
|
|
119
|
+
function _searchAddresses() {
|
|
120
|
+
_searchAddresses = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(query) {
|
|
121
|
+
var response, _t;
|
|
122
|
+
return _regenerator().w(function (_context) {
|
|
123
|
+
while (1) switch (_context.p = _context.n) {
|
|
124
|
+
case 0:
|
|
125
|
+
if (query.trim()) {
|
|
126
|
+
_context.n = 1;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
setSuggestions([]);
|
|
130
|
+
setShowSuggestions(false);
|
|
131
|
+
return _context.a(2);
|
|
132
|
+
case 1:
|
|
133
|
+
setLoading(true);
|
|
134
|
+
_context.p = 2;
|
|
135
|
+
_context.n = 3;
|
|
136
|
+
return merchi.authenticatedFetch('/addresses/place-search/', {
|
|
137
|
+
method: 'GET',
|
|
138
|
+
query: [['q', query]]
|
|
139
|
+
});
|
|
140
|
+
case 3:
|
|
141
|
+
response = _context.v;
|
|
142
|
+
if (response.status === 'success') {
|
|
143
|
+
setSuggestions(response.results || []);
|
|
144
|
+
setShowSuggestions(true);
|
|
145
|
+
setSelectedIndex(-1);
|
|
146
|
+
}
|
|
147
|
+
_context.n = 5;
|
|
148
|
+
break;
|
|
149
|
+
case 4:
|
|
150
|
+
_context.p = 4;
|
|
151
|
+
_t = _context.v;
|
|
152
|
+
console.error('Error searching addresses:', _t);
|
|
153
|
+
setSuggestions([]);
|
|
154
|
+
setShowSuggestions(false);
|
|
155
|
+
case 5:
|
|
156
|
+
_context.p = 5;
|
|
157
|
+
setLoading(false);
|
|
158
|
+
return _context.f(5);
|
|
159
|
+
case 6:
|
|
160
|
+
return _context.a(2);
|
|
161
|
+
}
|
|
162
|
+
}, _callee, null, [[2, 4, 5, 6]]);
|
|
163
|
+
}));
|
|
164
|
+
return _searchAddresses.apply(this, arguments);
|
|
165
|
+
}
|
|
166
|
+
var debouncedSearch = React.useMemo(function () {
|
|
167
|
+
return debounce(searchAddresses, 500);
|
|
168
|
+
}, []);
|
|
169
|
+
function handleInputChange(event) {
|
|
170
|
+
var value = event.target.value;
|
|
171
|
+
setInputValue(value);
|
|
172
|
+
debouncedSearch(value);
|
|
173
|
+
}
|
|
174
|
+
function handleSuggestionSelect(_x2) {
|
|
175
|
+
return _handleSuggestionSelect.apply(this, arguments);
|
|
176
|
+
}
|
|
177
|
+
function _handleSuggestionSelect() {
|
|
178
|
+
_handleSuggestionSelect = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(suggestion) {
|
|
179
|
+
var response, parsedAddress, fallbackAddress, _fallbackAddress, _fallbackAddress2, _t2;
|
|
180
|
+
return _regenerator().w(function (_context2) {
|
|
181
|
+
while (1) switch (_context2.p = _context2.n) {
|
|
182
|
+
case 0:
|
|
183
|
+
setLoading(true);
|
|
184
|
+
_context2.p = 1;
|
|
185
|
+
_context2.n = 2;
|
|
186
|
+
return merchi.authenticatedFetch('/addresses/place-details/', {
|
|
187
|
+
method: 'GET',
|
|
188
|
+
query: [['place_id', suggestion.placeId]]
|
|
189
|
+
});
|
|
190
|
+
case 2:
|
|
191
|
+
response = _context2.v;
|
|
192
|
+
if (response.status === 'success') {
|
|
193
|
+
// Parse the Google Places result into address components
|
|
194
|
+
parsedAddress = googlePlacesResultAsNewAddress(response.result);
|
|
195
|
+
if (parsedAddress) {
|
|
196
|
+
setInputValue(addressInOneLine(parsedAddress));
|
|
197
|
+
updateAddress(parsedAddress);
|
|
198
|
+
setAddressLocal(parsedAddress);
|
|
199
|
+
} else {
|
|
200
|
+
// Fallback to using the description if parsing fails
|
|
201
|
+
fallbackAddress = {
|
|
202
|
+
city: '',
|
|
203
|
+
country: '',
|
|
204
|
+
lineOne: suggestion.description,
|
|
205
|
+
lineTwo: '',
|
|
206
|
+
postcode: '',
|
|
207
|
+
state: ''
|
|
208
|
+
};
|
|
209
|
+
setInputValue(suggestion.description);
|
|
210
|
+
updateAddress(fallbackAddress);
|
|
211
|
+
setAddressLocal(fallbackAddress);
|
|
212
|
+
}
|
|
213
|
+
} else {
|
|
214
|
+
// Fallback to using the description if API call fails
|
|
215
|
+
_fallbackAddress = {
|
|
216
|
+
city: '',
|
|
217
|
+
country: '',
|
|
218
|
+
lineOne: suggestion.description,
|
|
219
|
+
lineTwo: '',
|
|
220
|
+
postcode: '',
|
|
221
|
+
state: ''
|
|
222
|
+
};
|
|
223
|
+
setInputValue(suggestion.description);
|
|
224
|
+
updateAddress(_fallbackAddress);
|
|
225
|
+
setAddressLocal(_fallbackAddress);
|
|
226
|
+
}
|
|
227
|
+
_context2.n = 4;
|
|
228
|
+
break;
|
|
229
|
+
case 3:
|
|
230
|
+
_context2.p = 3;
|
|
231
|
+
_t2 = _context2.v;
|
|
232
|
+
console.error('Error fetching place details:', _t2);
|
|
233
|
+
// Fallback to using the description if there's an error
|
|
234
|
+
_fallbackAddress2 = {
|
|
235
|
+
city: '',
|
|
236
|
+
country: '',
|
|
237
|
+
lineOne: suggestion.description,
|
|
238
|
+
lineTwo: '',
|
|
239
|
+
postcode: '',
|
|
240
|
+
state: ''
|
|
241
|
+
};
|
|
242
|
+
setInputValue(suggestion.description);
|
|
243
|
+
updateAddress(_fallbackAddress2);
|
|
244
|
+
setAddressLocal(_fallbackAddress2);
|
|
245
|
+
case 4:
|
|
246
|
+
_context2.p = 4;
|
|
247
|
+
setLoading(false);
|
|
248
|
+
setShowSuggestions(false);
|
|
249
|
+
setSuggestions([]);
|
|
250
|
+
setSelectedIndex(-1);
|
|
251
|
+
return _context2.f(4);
|
|
252
|
+
case 5:
|
|
253
|
+
return _context2.a(2);
|
|
254
|
+
}
|
|
255
|
+
}, _callee2, null, [[1, 3, 4, 5]]);
|
|
256
|
+
}));
|
|
257
|
+
return _handleSuggestionSelect.apply(this, arguments);
|
|
258
|
+
}
|
|
259
|
+
function handleKeyDown(event) {
|
|
260
|
+
if (!showSuggestions || suggestions.length === 0) return;
|
|
261
|
+
switch (event.key) {
|
|
262
|
+
case 'ArrowDown':
|
|
263
|
+
event.preventDefault();
|
|
264
|
+
setSelectedIndex(function (prev) {
|
|
265
|
+
return prev < suggestions.length - 1 ? prev + 1 : 0;
|
|
266
|
+
});
|
|
267
|
+
break;
|
|
268
|
+
case 'ArrowUp':
|
|
269
|
+
event.preventDefault();
|
|
270
|
+
setSelectedIndex(function (prev) {
|
|
271
|
+
return prev > 0 ? prev - 1 : suggestions.length - 1;
|
|
272
|
+
});
|
|
273
|
+
break;
|
|
274
|
+
case 'Enter':
|
|
275
|
+
event.preventDefault();
|
|
276
|
+
if (selectedIndex >= 0 && selectedIndex < suggestions.length) {
|
|
277
|
+
handleSuggestionSelect(suggestions[selectedIndex]);
|
|
278
|
+
}
|
|
279
|
+
break;
|
|
280
|
+
case 'Escape':
|
|
281
|
+
setShowSuggestions(false);
|
|
282
|
+
setSelectedIndex(-1);
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function handleInputBlur(event) {
|
|
287
|
+
// Delay hiding suggestions to allow click events on suggestions
|
|
288
|
+
setTimeout(function () {
|
|
289
|
+
var _suggestionsRef$curre;
|
|
290
|
+
if (!((_suggestionsRef$curre = suggestionsRef.current) !== null && _suggestionsRef$curre !== void 0 && _suggestionsRef$curre.contains(document.activeElement))) {
|
|
291
|
+
setShowSuggestions(false);
|
|
292
|
+
setSelectedIndex(-1);
|
|
293
|
+
}
|
|
294
|
+
}, 200);
|
|
295
|
+
}
|
|
296
|
+
function handleInputFocus() {
|
|
297
|
+
if (suggestions.length > 0) {
|
|
298
|
+
setShowSuggestions(true);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function applyRecommendedAddress() {
|
|
302
|
+
if (!(recommendedAddress !== null && recommendedAddress !== void 0 && recommendedAddress.lineOne)) return;
|
|
303
|
+
var nextAddress = _objectSpread({}, recommendedAddress);
|
|
304
|
+
setInputValue(addressInOneLine(nextAddress));
|
|
305
|
+
updateAddress(nextAddress);
|
|
306
|
+
setAddressLocal(nextAddress);
|
|
307
|
+
setShowSuggestions(false);
|
|
308
|
+
setSuggestions([]);
|
|
309
|
+
}
|
|
310
|
+
var showRecommendedAddress = Boolean(recommendedAddress === null || recommendedAddress === void 0 ? void 0 : recommendedAddress.lineOne) && !(addressLocal !== null && addressLocal !== void 0 && (_addressLocal$lineOne = addressLocal.lineOne) !== null && _addressLocal$lineOne !== void 0 && _addressLocal$lineOne.trim());
|
|
311
|
+
function clearInput(e) {
|
|
312
|
+
e.preventDefault();
|
|
313
|
+
setInputValue('');
|
|
314
|
+
setSuggestions([]);
|
|
315
|
+
setShowSuggestions(false);
|
|
316
|
+
updateAddress({
|
|
317
|
+
city: '',
|
|
318
|
+
country: '',
|
|
319
|
+
lineOne: '',
|
|
320
|
+
lineTwo: '',
|
|
321
|
+
postcode: '',
|
|
322
|
+
state: ''
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
var hasErrors = !!Object.keys(errors).length;
|
|
326
|
+
var addressForm = /*#__PURE__*/_jsxs(_Fragment, {
|
|
327
|
+
children: [/*#__PURE__*/_jsx(InputText, {
|
|
328
|
+
control: control,
|
|
329
|
+
label: "Address line one",
|
|
330
|
+
name: inputName("lineOne"),
|
|
331
|
+
placeholder: "123 Fake st",
|
|
332
|
+
rules: {
|
|
333
|
+
required: 'Address line one is required.'
|
|
334
|
+
}
|
|
335
|
+
}), /*#__PURE__*/_jsx(InputText, {
|
|
336
|
+
control: control,
|
|
337
|
+
label: "Continue address",
|
|
338
|
+
name: inputName("lineTwo"),
|
|
339
|
+
placeholder: "Continue address..."
|
|
340
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
341
|
+
className: classNameMerchiCheckoutRow,
|
|
342
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
343
|
+
className: classNameMerchiCheckoutRowColumn,
|
|
344
|
+
children: /*#__PURE__*/_jsx(InputText, {
|
|
345
|
+
control: control,
|
|
346
|
+
label: "City / Province",
|
|
347
|
+
name: inputName("city"),
|
|
348
|
+
placeholder: "City",
|
|
349
|
+
rules: {
|
|
350
|
+
required: 'City / Province is required.'
|
|
351
|
+
}
|
|
352
|
+
})
|
|
353
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
354
|
+
className: classNameMerchiCheckoutRowColumn,
|
|
355
|
+
children: /*#__PURE__*/_jsx(InputText, {
|
|
356
|
+
control: control,
|
|
357
|
+
label: "Post / Zip code",
|
|
358
|
+
name: inputName("postcode"),
|
|
359
|
+
placeholder: "90210"
|
|
360
|
+
})
|
|
361
|
+
})]
|
|
362
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
363
|
+
className: classNameMerchiCheckoutRow,
|
|
364
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
365
|
+
className: classNameMerchiCheckoutRowColumn,
|
|
366
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
367
|
+
className: classNameMerchiCheckoutFormGroup,
|
|
368
|
+
children: [/*#__PURE__*/_jsx("label", {
|
|
369
|
+
children: "Country"
|
|
370
|
+
}), /*#__PURE__*/_jsx(Controller, {
|
|
371
|
+
name: inputName("country"),
|
|
372
|
+
control: control,
|
|
373
|
+
defaultValue: defaultAddress && defaultAddress.country,
|
|
374
|
+
render: function render(_ref2) {
|
|
375
|
+
var field = _ref2.field;
|
|
376
|
+
return /*#__PURE__*/_jsx(CountryDropdown, _objectSpread(_objectSpread({}, field), {}, {
|
|
377
|
+
classes: classNameMerchiCheckoutFormSelect,
|
|
378
|
+
onChange: function onChange(val) {
|
|
379
|
+
setValue(inputName("country"), val);
|
|
380
|
+
// Regions are country-specific; clear stale state on country change.
|
|
381
|
+
setValue(inputName("state"), '');
|
|
382
|
+
field.onChange(val);
|
|
383
|
+
onChangeCountryState();
|
|
384
|
+
},
|
|
385
|
+
valueType: "short"
|
|
386
|
+
}));
|
|
387
|
+
}
|
|
388
|
+
})]
|
|
389
|
+
})
|
|
390
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
391
|
+
className: classNameMerchiCheckoutRowColumn,
|
|
392
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
393
|
+
className: classNameMerchiCheckoutFormGroup,
|
|
394
|
+
children: [/*#__PURE__*/_jsx("label", {
|
|
395
|
+
children: "State / Region"
|
|
396
|
+
}), /*#__PURE__*/_jsx(Controller, {
|
|
397
|
+
name: inputName("state"),
|
|
398
|
+
control: control,
|
|
399
|
+
defaultValue: defaultAddress && defaultAddress.state,
|
|
400
|
+
render: function render(_ref3) {
|
|
401
|
+
var field = _ref3.field;
|
|
402
|
+
return /*#__PURE__*/_jsx(RegionDropdown, _objectSpread(_objectSpread({}, field), {}, {
|
|
403
|
+
countryValueType: "short",
|
|
404
|
+
country: selectedCountry,
|
|
405
|
+
classes: classNameMerchiCheckoutFormSelect,
|
|
406
|
+
onChange: function onChange(val) {
|
|
407
|
+
setValue(inputName("state"), val);
|
|
408
|
+
field.onChange(val);
|
|
409
|
+
onChangeCountryState();
|
|
410
|
+
},
|
|
411
|
+
valueType: "short"
|
|
412
|
+
}));
|
|
413
|
+
}
|
|
414
|
+
})]
|
|
415
|
+
})
|
|
416
|
+
})]
|
|
417
|
+
})]
|
|
418
|
+
});
|
|
419
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
420
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
421
|
+
className: classNameMerchiCheckoutFormGroup,
|
|
422
|
+
children: [/*#__PURE__*/_jsx("label", {
|
|
423
|
+
children: labelGeoSuggest
|
|
424
|
+
}), showRecommendedAddress && /*#__PURE__*/_jsx("div", {
|
|
425
|
+
className: "merchi-checkout-address-recommendation",
|
|
426
|
+
children: /*#__PURE__*/_jsxs("button", {
|
|
427
|
+
type: "button",
|
|
428
|
+
className: "merchi-checkout-address-recommendation-btn",
|
|
429
|
+
onClick: applyRecommendedAddress,
|
|
430
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
431
|
+
className: "merchi-checkout-address-recommendation-label",
|
|
432
|
+
children: "Use previous address"
|
|
433
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
434
|
+
className: "merchi-checkout-address-recommendation-value",
|
|
435
|
+
children: addressInOneLine(recommendedAddress)
|
|
436
|
+
})]
|
|
437
|
+
})
|
|
438
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
439
|
+
className: "position-relative",
|
|
440
|
+
style: {
|
|
441
|
+
position: 'relative'
|
|
442
|
+
},
|
|
443
|
+
children: [/*#__PURE__*/_jsx("input", {
|
|
444
|
+
autoComplete: "new-password",
|
|
445
|
+
ref: inputRef,
|
|
446
|
+
type: "text",
|
|
447
|
+
name: "address-suggestion",
|
|
448
|
+
className: classNameMerchiCheckoutFormInput,
|
|
449
|
+
placeholder: placeholder,
|
|
450
|
+
value: inputValue,
|
|
451
|
+
onChange: handleInputChange,
|
|
452
|
+
onKeyDown: handleKeyDown,
|
|
453
|
+
onBlur: handleInputBlur,
|
|
454
|
+
onFocus: handleInputFocus,
|
|
455
|
+
style: {
|
|
456
|
+
paddingRight: loading ? '40px' : '20px'
|
|
457
|
+
}
|
|
458
|
+
}), loading && /*#__PURE__*/_jsx("div", {
|
|
459
|
+
className: "position-absolute",
|
|
460
|
+
style: {
|
|
461
|
+
position: 'absolute',
|
|
462
|
+
right: '10px',
|
|
463
|
+
top: '50%',
|
|
464
|
+
transform: 'translateY(-50%)'
|
|
465
|
+
},
|
|
466
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
467
|
+
icon: faSpinner,
|
|
468
|
+
spin: true
|
|
469
|
+
})
|
|
470
|
+
}), inputValue && !loading && /*#__PURE__*/_jsx("button", {
|
|
471
|
+
type: "button",
|
|
472
|
+
className: "btn btn-sm position-absolute",
|
|
473
|
+
style: {
|
|
474
|
+
right: '5px',
|
|
475
|
+
top: '50%',
|
|
476
|
+
transform: 'translateY(-50%)',
|
|
477
|
+
border: 'none',
|
|
478
|
+
background: 'transparent',
|
|
479
|
+
padding: '2px 5px',
|
|
480
|
+
position: 'absolute'
|
|
481
|
+
},
|
|
482
|
+
onClick: clearInput,
|
|
483
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
484
|
+
icon: faTimes
|
|
485
|
+
})
|
|
486
|
+
}), showSuggestions && suggestions.length > 0 && /*#__PURE__*/_jsx("div", {
|
|
487
|
+
ref: suggestionsRef,
|
|
488
|
+
className: classNameMerchiCheckoutGoogleSuggestList,
|
|
489
|
+
role: "listbox",
|
|
490
|
+
children: suggestions.map(function (suggestion, index) {
|
|
491
|
+
var _suggestion$structure, _suggestion$structure2;
|
|
492
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
493
|
+
className: "".concat(classNameMerchiCheckoutGoogleSuggestListItem, " ").concat(index === selectedIndex ? 'active' : ''),
|
|
494
|
+
role: "option",
|
|
495
|
+
onMouseDown: function onMouseDown(e) {
|
|
496
|
+
e.preventDefault();
|
|
497
|
+
handleSuggestionSelect(suggestion);
|
|
498
|
+
},
|
|
499
|
+
onMouseEnter: function onMouseEnter() {
|
|
500
|
+
return setSelectedIndex(index);
|
|
501
|
+
},
|
|
502
|
+
children: [/*#__PURE__*/_jsx("strong", {
|
|
503
|
+
children: ((_suggestion$structure = suggestion.structuredFormatting) === null || _suggestion$structure === void 0 ? void 0 : _suggestion$structure.main_text) || suggestion.description
|
|
504
|
+
}), ((_suggestion$structure2 = suggestion.structuredFormatting) === null || _suggestion$structure2 === void 0 ? void 0 : _suggestion$structure2.secondary_text) && /*#__PURE__*/_jsx("div", {
|
|
505
|
+
className: "text-muted small",
|
|
506
|
+
children: suggestion.structuredFormatting.secondary_text
|
|
507
|
+
})]
|
|
508
|
+
}, suggestion.placeId);
|
|
509
|
+
})
|
|
510
|
+
})]
|
|
511
|
+
})]
|
|
512
|
+
}), /*#__PURE__*/_jsx(Collapse, {
|
|
513
|
+
isOpen: addressFieldsOpen,
|
|
514
|
+
children: addressForm
|
|
515
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
516
|
+
className: "d-flex align-items-center",
|
|
517
|
+
children: [hasErrors && /*#__PURE__*/_jsxs("div", {
|
|
518
|
+
className: "text-danger",
|
|
519
|
+
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
520
|
+
icon: faExclamationTriangle
|
|
521
|
+
}), " Invalid address!"]
|
|
522
|
+
}), /*#__PURE__*/_jsxs("a", {
|
|
523
|
+
className: "ml-auto btn btn-sm btn-link ".concat(hasErrors && 'text-danger'),
|
|
524
|
+
onClick: toggleAddressFieldsOpen,
|
|
525
|
+
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
526
|
+
icon: addressFieldsOpen ? faTimes : faEdit
|
|
527
|
+
}), " ", addressFieldsOpen ? 'Close' : 'Edit fields']
|
|
528
|
+
})]
|
|
529
|
+
})]
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
export default InputsAddress;
|
|
533
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJuIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJuZXh0IiwiaXNBcnJheSIsIlJlYWN0IiwidXNlRWZmZWN0IiwiZGVib3VuY2UiLCJNZXJjaGkiLCJDb3VudHJ5RHJvcGRvd24iLCJSZWdpb25Ecm9wZG93biIsIkNvbnRyb2xsZXIiLCJJbnB1dFRleHQiLCJ1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0IiwiYWRkcmVzc0luT25lTGluZSIsImdvb2dsZVBsYWNlc1Jlc3VsdEFzTmV3QWRkcmVzcyIsIkZvbnRBd2Vzb21lSWNvbiIsImZhU3Bpbm5lciIsImZhVGltZXMiLCJmYUVkaXQiLCJmYUV4Y2xhbWF0aW9uVHJpYW5nbGUiLCJ1c2VTdGF0ZSIsIkNvbGxhcHNlIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwibWVyY2hpIiwiSW5wdXRzQWRkcmVzcyIsIl9yZWYiLCJfYWRkcmVzc0xvY2FsJGxpbmVPbmUiLCJfcmVmJGRlZmF1bHRBZGRyZXNzIiwiZGVmYXVsdEFkZHJlc3MiLCJfcmVmJGxhYmVsR2VvU3VnZ2VzdCIsImxhYmVsR2VvU3VnZ2VzdCIsImhvb2tGb3JtIiwiX3JlZiRwbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIiwicmVjb21tZW5kZWRBZGRyZXNzIiwidXBkYXRlQWRkcmVzcyIsIl91c2VNZXJjaGlDaGVja2JvdXRDbyIsImNsYXNzTmFtZU1lcmNoaUNoZWNrb3V0Rm9ybUdyb3VwIiwiY2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRGb3JtSW5wdXQiLCJjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1TZWxlY3QiLCJjbGFzc05hbWVNZXJjaGlDaGVja291dFJvdyIsImNsYXNzTmFtZU1lcmNoaUNoZWNrb3V0Um93Q29sdW1uIiwiY2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRHb29nbGVTdWdnZXN0TGlzdCIsImNsYXNzTmFtZU1lcmNoaUNoZWNrb3V0R29vZ2xlU3VnZ2VzdExpc3RJdGVtIiwiX1JlYWN0JHVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsImlucHV0VmFsdWUiLCJzZXRJbnB1dFZhbHVlIiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJzdWdnZXN0aW9ucyIsInNldFN1Z2dlc3Rpb25zIiwiX1JlYWN0JHVzZVN0YXRlNSIsIl9SZWFjdCR1c2VTdGF0ZTYiLCJzaG93U3VnZ2VzdGlvbnMiLCJzZXRTaG93U3VnZ2VzdGlvbnMiLCJfUmVhY3QkdXNlU3RhdGU3IiwiX1JlYWN0JHVzZVN0YXRlOCIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiX1JlYWN0JHVzZVN0YXRlOSIsIl9SZWFjdCR1c2VTdGF0ZTAiLCJzZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWRJbmRleCIsIl9SZWFjdCR1c2VTdGF0ZTEiLCJfUmVhY3QkdXNlU3RhdGUxMCIsImFkZHJlc3NMb2NhbCIsInNldEFkZHJlc3NMb2NhbCIsImlucHV0UmVmIiwidXNlUmVmIiwic3VnZ2VzdGlvbnNSZWYiLCJjb250cm9sIiwiX2hvb2tGb3JtJGZvcm1TdGF0ZSIsImZvcm1TdGF0ZSIsImVycm9ycyIsImlzVmFsaWQiLCJzdWJtaXRDb3VudCIsInNldFZhbHVlIiwiZ2V0VmFsdWVzIiwicmVzZXQiLCJ3YXRjaCIsImlucHV0TmFtZSIsIl9uYW1lIiwiY29uY2F0Iiwic2VsZWN0ZWRDb3VudHJ5Iiwib25DaGFuZ2VDb3VudHJ5U3RhdGUiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiYWRkcmVzc0ZpZWxkc09wZW4iLCJzZXRBZGRyZXNzRmllbGRzT3BlbiIsInRvZ2dsZUFkZHJlc3NGaWVsZHNPcGVuIiwibGluZU9uZSIsIm5leHRBZGRyZXNzIiwiY2l0eSIsInBvc3Rjb2RlIiwic2VhcmNoQWRkcmVzc2VzIiwiX3giLCJfc2VhcmNoQWRkcmVzc2VzIiwiX2NhbGxlZSIsInF1ZXJ5IiwicmVzcG9uc2UiLCJfdCIsIl9jb250ZXh0IiwidHJpbSIsImF1dGhlbnRpY2F0ZWRGZXRjaCIsIm1ldGhvZCIsInN0YXR1cyIsInJlc3VsdHMiLCJjb25zb2xlIiwiZXJyb3IiLCJkZWJvdW5jZWRTZWFyY2giLCJ1c2VNZW1vIiwiaGFuZGxlSW5wdXRDaGFuZ2UiLCJldmVudCIsInRhcmdldCIsImhhbmRsZVN1Z2dlc3Rpb25TZWxlY3QiLCJfeDIiLCJfaGFuZGxlU3VnZ2VzdGlvblNlbGVjdCIsIl9jYWxsZWUyIiwic3VnZ2VzdGlvbiIsInBhcnNlZEFkZHJlc3MiLCJmYWxsYmFja0FkZHJlc3MiLCJfZmFsbGJhY2tBZGRyZXNzIiwiX2ZhbGxiYWNrQWRkcmVzczIiLCJfdDIiLCJfY29udGV4dDIiLCJwbGFjZUlkIiwicmVzdWx0IiwiY291bnRyeSIsImRlc2NyaXB0aW9uIiwibGluZVR3byIsInN0YXRlIiwiaGFuZGxlS2V5RG93biIsImtleSIsInByZXZlbnREZWZhdWx0IiwicHJldiIsImhhbmRsZUlucHV0Qmx1ciIsInNldFRpbWVvdXQiLCJfc3VnZ2VzdGlvbnNSZWYkY3VycmUiLCJjdXJyZW50IiwiY29udGFpbnMiLCJkb2N1bWVudCIsImFjdGl2ZUVsZW1lbnQiLCJoYW5kbGVJbnB1dEZvY3VzIiwiYXBwbHlSZWNvbW1lbmRlZEFkZHJlc3MiLCJzaG93UmVjb21tZW5kZWRBZGRyZXNzIiwiQm9vbGVhbiIsImNsZWFySW5wdXQiLCJoYXNFcnJvcnMiLCJhZGRyZXNzRm9ybSIsImNoaWxkcmVuIiwibGFiZWwiLCJydWxlcyIsInJlcXVpcmVkIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwicmVuZGVyIiwiX3JlZjIiLCJmaWVsZCIsImNsYXNzZXMiLCJvbkNoYW5nZSIsInZhbCIsInZhbHVlVHlwZSIsIl9yZWYzIiwiY291bnRyeVZhbHVlVHlwZSIsInR5cGUiLCJvbkNsaWNrIiwic3R5bGUiLCJwb3NpdGlvbiIsImF1dG9Db21wbGV0ZSIsInJlZiIsIm9uS2V5RG93biIsIm9uQmx1ciIsIm9uRm9jdXMiLCJwYWRkaW5nUmlnaHQiLCJyaWdodCIsInRvcCIsInRyYW5zZm9ybSIsImljb24iLCJzcGluIiwiYm9yZGVyIiwiYmFja2dyb3VuZCIsInBhZGRpbmciLCJyb2xlIiwibWFwIiwiaW5kZXgiLCJfc3VnZ2VzdGlvbiRzdHJ1Y3R1cmUiLCJfc3VnZ2VzdGlvbiRzdHJ1Y3R1cmUyIiwib25Nb3VzZURvd24iLCJvbk1vdXNlRW50ZXIiLCJzdHJ1Y3R1cmVkRm9ybWF0dGluZyIsIm1haW5fdGV4dCIsInNlY29uZGFyeV90ZXh0IiwiaXNPcGVuIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZm9ybXMvSW5wdXRzQWRkcmVzcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IE1lcmNoaSB9IGZyb20gJ0BtZXJjaGkvc2RrJztcbmltcG9ydCB7IENvdW50cnlEcm9wZG93biwgUmVnaW9uRHJvcGRvd24gfSBmcm9tICdyZWFjdC1jb3VudHJ5LXJlZ2lvbi1zZWxlY3Rvcic7XG5pbXBvcnQgeyBDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCBJbnB1dFRleHQgZnJvbSAnLi9JbnB1dFRleHQnO1xuaW1wb3J0IHsgdXNlTWVyY2hpQ2hlY2tib3V0Q29udGV4dCB9IGZyb20gJy4uL01lcmNoaUNoZWNrb3V0UHJvdmlkZXInO1xuaW1wb3J0IHsgYWRkcmVzc0luT25lTGluZSwgZ29vZ2xlUGxhY2VzUmVzdWx0QXNOZXdBZGRyZXNzIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRm9udEF3ZXNvbWVJY29uIH0gZnJvbSAnQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhU3Bpbm5lciwgZmFUaW1lcywgZmFFZGl0LCBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29sbGFwc2UgZnJvbSAnLi4vQ29sbGFwc2UnO1xuXG5jb25zdCBtZXJjaGkgPSBuZXcgTWVyY2hpKCk7XG5cbmludGVyZmFjZSBTdWdnZXN0aW9uIHtcbiAgcGxhY2VJZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdHJ1Y3R1cmVkRm9ybWF0dGluZzogYW55O1xuICB0eXBlczogc3RyaW5nW107XG4gIG1hdGNoZWRTdWJzdHJpbmdzOiBhbnlbXTtcbn1cblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgZGVmYXVsdEFkZHJlc3M/OiBhbnk7XG4gIGxhYmVsR2VvU3VnZ2VzdD86IHN0cmluZztcbiAgaG9va0Zvcm06IGFueTtcbiAgbmFtZTogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgcmVjb21tZW5kZWRBZGRyZXNzPzogYW55O1xuICB1cGRhdGVBZGRyZXNzOiAoYWRkcmVzczogYW55KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSW5wdXRzQWRkcmVzcyh7XG4gIGRlZmF1bHRBZGRyZXNzID0ge30sXG4gIGxhYmVsR2VvU3VnZ2VzdCA9ICdBZGRyZXNzJyxcbiAgaG9va0Zvcm0sXG4gIG5hbWUsXG4gIHBsYWNlaG9sZGVyID0gJ1NlYXJjaCB5b3VyIGFkZHJlc3MnLFxuICByZWNvbW1lbmRlZEFkZHJlc3MsXG4gIHVwZGF0ZUFkZHJlc3Ncbn06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1Hcm91cCxcbiAgICBjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1JbnB1dCxcbiAgICBjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1TZWxlY3QsXG4gICAgY2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRSb3csXG4gICAgY2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRSb3dDb2x1bW4sXG4gICAgY2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRHb29nbGVTdWdnZXN0TGlzdCxcbiAgICBjbGFzc05hbWVNZXJjaGlDaGVja291dEdvb2dsZVN1Z2dlc3RMaXN0SXRlbSxcbiAgfSA9IHVzZU1lcmNoaUNoZWNrYm91dENvbnRleHQoKTtcblxuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzdWdnZXN0aW9ucywgc2V0U3VnZ2VzdGlvbnNdID0gUmVhY3QudXNlU3RhdGU8U3VnZ2VzdGlvbltdPihbXSk7XG4gIGNvbnN0IFtzaG93U3VnZ2VzdGlvbnMsIHNldFNob3dTdWdnZXN0aW9uc10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NlbGVjdGVkSW5kZXgsIHNldFNlbGVjdGVkSW5kZXhdID0gUmVhY3QudXNlU3RhdGUoLTEpO1xuICBjb25zdCBbYWRkcmVzc0xvY2FsLCBzZXRBZGRyZXNzTG9jYWxdID0gUmVhY3QudXNlU3RhdGUoeyAuLi5kZWZhdWx0QWRkcmVzcyB9KTtcblxuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc3VnZ2VzdGlvbnNSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHtcbiAgICBjb250cm9sLFxuICAgIGZvcm1TdGF0ZTogeyBlcnJvcnMsIGlzVmFsaWQsIHN1Ym1pdENvdW50IH0sXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0VmFsdWVzLFxuICAgIHJlc2V0LFxuICAgIHdhdGNoLFxuICB9ID0gaG9va0Zvcm07XG4gIGNvbnN0IGlucHV0TmFtZSA9IChfbmFtZTogc3RyaW5nKSA9PiBgJHtuYW1lID8gYCR7bmFtZX0uYCA6ICcnfSR7X25hbWV9YDtcbiAgY29uc3Qgc2VsZWN0ZWRDb3VudHJ5ID0gd2F0Y2goaW5wdXROYW1lKCdjb3VudHJ5JykpO1xuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlQ291bnRyeVN0YXRlKCkge1xuICAgIC8vIFBhcmVudCB1cGRhdGVBZGRyZXNzIGV4cGVjdHMgYSBzaW5nbGUgYWRkcmVzcyBvYmplY3QgKHNlZSBGb3JtQWRkcmVzc2VzKS5cbiAgICB1cGRhdGVBZGRyZXNzKGdldFZhbHVlcygpW25hbWVdKTtcbiAgfVxuICBjb25zdCBbYWRkcmVzc0ZpZWxkc09wZW4sIHNldEFkZHJlc3NGaWVsZHNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgdG9nZ2xlQWRkcmVzc0ZpZWxkc09wZW4gPSAoKSA9PiBzZXRBZGRyZXNzRmllbGRzT3BlbighYWRkcmVzc0ZpZWxkc09wZW4pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNWYWxpZCAmJiAhYWRkcmVzc0ZpZWxkc09wZW4gJiYgc3VibWl0Q291bnQgPiAwKSB7XG4gICAgICB0b2dnbGVBZGRyZXNzRmllbGRzT3BlbigpO1xuICAgIH1cbiAgfSwgW2lzVmFsaWQsIHN1Ym1pdENvdW50XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRlZmF1bHRBZGRyZXNzPy5saW5lT25lKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXh0QWRkcmVzcyA9IHsgLi4uZGVmYXVsdEFkZHJlc3MgfTtcbiAgICBzZXRBZGRyZXNzTG9jYWwobmV4dEFkZHJlc3MpO1xuICAgIHNldElucHV0VmFsdWUoYWRkcmVzc0luT25lTGluZShuZXh0QWRkcmVzcykpO1xuICAgIHJlc2V0KHtcbiAgICAgIC4uLmdldFZhbHVlcygpLFxuICAgICAgW25hbWVdOiBuZXh0QWRkcmVzcyxcbiAgICB9KTtcbiAgfSwgW2RlZmF1bHRBZGRyZXNzPy5saW5lT25lLCBkZWZhdWx0QWRkcmVzcz8uY2l0eSwgZGVmYXVsdEFkZHJlc3M/LnBvc3Rjb2RlXSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICBpZiAoIXF1ZXJ5LnRyaW0oKSkge1xuICAgICAgc2V0U3VnZ2VzdGlvbnMoW10pO1xuICAgICAgc2V0U2hvd1N1Z2dlc3Rpb25zKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1lcmNoaS5hdXRoZW50aWNhdGVkRmV0Y2goJy9hZGRyZXNzZXMvcGxhY2Utc2VhcmNoLycsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgcXVlcnk6IFtbJ3EnLCBxdWVyeV1dXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKHJlc3BvbnNlLnJlc3VsdHMgfHwgW10pO1xuICAgICAgICBzZXRTaG93U3VnZ2VzdGlvbnModHJ1ZSk7XG4gICAgICAgIHNldFNlbGVjdGVkSW5kZXgoLTEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZWFyY2hpbmcgYWRkcmVzc2VzOicsIGVycm9yKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICAgIHNldFNob3dTdWdnZXN0aW9ucyhmYWxzZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlYm91bmNlZCBzZWFyY2ggZnVuY3Rpb25cbiAgY29uc3QgZGVib3VuY2VkU2VhcmNoID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBkZWJvdW5jZShzZWFyY2hBZGRyZXNzZXMsIDUwMCksXG4gICAgW11cbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVJbnB1dENoYW5nZShldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBzZXRJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICBkZWJvdW5jZWRTZWFyY2godmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlU3VnZ2VzdGlvblNlbGVjdChzdWdnZXN0aW9uOiBTdWdnZXN0aW9uKSB7XG4gICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgLy8gRmV0Y2ggZGV0YWlsZWQgcGxhY2UgaW5mb3JtYXRpb24gdXNpbmcgdGhlIHBsYWNlIElEXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1lcmNoaS5hdXRoZW50aWNhdGVkRmV0Y2goJy9hZGRyZXNzZXMvcGxhY2UtZGV0YWlscy8nLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHF1ZXJ5OiBbWydwbGFjZV9pZCcsIHN1Z2dlc3Rpb24ucGxhY2VJZF1dXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIC8vIFBhcnNlIHRoZSBHb29nbGUgUGxhY2VzIHJlc3VsdCBpbnRvIGFkZHJlc3MgY29tcG9uZW50c1xuICAgICAgICBjb25zdCBwYXJzZWRBZGRyZXNzID0gZ29vZ2xlUGxhY2VzUmVzdWx0QXNOZXdBZGRyZXNzKHJlc3BvbnNlLnJlc3VsdCk7XG5cbiAgICAgICAgaWYgKHBhcnNlZEFkZHJlc3MpIHtcbiAgICAgICAgICBzZXRJbnB1dFZhbHVlKGFkZHJlc3NJbk9uZUxpbmUocGFyc2VkQWRkcmVzcykpO1xuICAgICAgICAgIHVwZGF0ZUFkZHJlc3MocGFyc2VkQWRkcmVzcyk7XG4gICAgICAgICAgc2V0QWRkcmVzc0xvY2FsKHBhcnNlZEFkZHJlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHVzaW5nIHRoZSBkZXNjcmlwdGlvbiBpZiBwYXJzaW5nIGZhaWxzXG4gICAgICAgICAgY29uc3QgZmFsbGJhY2tBZGRyZXNzID0ge1xuICAgICAgICAgICAgY2l0eTogJycsXG4gICAgICAgICAgICBjb3VudHJ5OiAnJyxcbiAgICAgICAgICAgIGxpbmVPbmU6IHN1Z2dlc3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBsaW5lVHdvOiAnJyxcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnJyxcbiAgICAgICAgICAgIHN0YXRlOiAnJyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNldElucHV0VmFsdWUoc3VnZ2VzdGlvbi5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgdXBkYXRlQWRkcmVzcyhmYWxsYmFja0FkZHJlc3MpO1xuICAgICAgICAgIHNldEFkZHJlc3NMb2NhbChmYWxsYmFja0FkZHJlc3MpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGYWxsYmFjayB0byB1c2luZyB0aGUgZGVzY3JpcHRpb24gaWYgQVBJIGNhbGwgZmFpbHNcbiAgICAgICAgY29uc3QgZmFsbGJhY2tBZGRyZXNzID0ge1xuICAgICAgICAgIGNpdHk6ICcnLFxuICAgICAgICAgIGNvdW50cnk6ICcnLFxuICAgICAgICAgIGxpbmVPbmU6IHN1Z2dlc3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgbGluZVR3bzogJycsXG4gICAgICAgICAgcG9zdGNvZGU6ICcnLFxuICAgICAgICAgIHN0YXRlOiAnJyxcbiAgICAgICAgfTtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZShzdWdnZXN0aW9uLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgdXBkYXRlQWRkcmVzcyhmYWxsYmFja0FkZHJlc3MpO1xuICAgICAgICBzZXRBZGRyZXNzTG9jYWwoZmFsbGJhY2tBZGRyZXNzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGxhY2UgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAvLyBGYWxsYmFjayB0byB1c2luZyB0aGUgZGVzY3JpcHRpb24gaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgY29uc3QgZmFsbGJhY2tBZGRyZXNzID0ge1xuICAgICAgICBjaXR5OiAnJyxcbiAgICAgICAgY291bnRyeTogJycsXG4gICAgICAgIGxpbmVPbmU6IHN1Z2dlc3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICAgIGxpbmVUd286ICcnLFxuICAgICAgICBwb3N0Y29kZTogJycsXG4gICAgICAgIHN0YXRlOiAnJyxcbiAgICAgIH07XG4gICAgICBzZXRJbnB1dFZhbHVlKHN1Z2dlc3Rpb24uZGVzY3JpcHRpb24pO1xuICAgICAgdXBkYXRlQWRkcmVzcyhmYWxsYmFja0FkZHJlc3MpO1xuICAgICAgc2V0QWRkcmVzc0xvY2FsKGZhbGxiYWNrQWRkcmVzcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0U2hvd1N1Z2dlc3Rpb25zKGZhbHNlKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICAgIHNldFNlbGVjdGVkSW5kZXgoLTEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pIHtcbiAgICBpZiAoIXNob3dTdWdnZXN0aW9ucyB8fCBzdWdnZXN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KHByZXYgPT5cbiAgICAgICAgICBwcmV2IDwgc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSA/IHByZXYgKyAxIDogMFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KHByZXYgPT5cbiAgICAgICAgICBwcmV2ID4gMCA/IHByZXYgLSAxIDogc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwgc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvblNlbGVjdChzdWdnZXN0aW9uc1tzZWxlY3RlZEluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBzZXRTaG93U3VnZ2VzdGlvbnMoZmFsc2UpO1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSW5wdXRCbHVyKGV2ZW50OiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSB7XG4gICAgLy8gRGVsYXkgaGlkaW5nIHN1Z2dlc3Rpb25zIHRvIGFsbG93IGNsaWNrIGV2ZW50cyBvbiBzdWdnZXN0aW9uc1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uc1JlZi5jdXJyZW50Py5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBzZXRTaG93U3VnZ2VzdGlvbnMoZmFsc2UpO1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KC0xKTtcbiAgICAgIH1cbiAgICB9LCAyMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSW5wdXRGb2N1cygpIHtcbiAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgc2V0U2hvd1N1Z2dlc3Rpb25zKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5UmVjb21tZW5kZWRBZGRyZXNzKCkge1xuICAgIGlmICghcmVjb21tZW5kZWRBZGRyZXNzPy5saW5lT25lKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXh0QWRkcmVzcyA9IHsgLi4ucmVjb21tZW5kZWRBZGRyZXNzIH07XG4gICAgc2V0SW5wdXRWYWx1ZShhZGRyZXNzSW5PbmVMaW5lKG5leHRBZGRyZXNzKSk7XG4gICAgdXBkYXRlQWRkcmVzcyhuZXh0QWRkcmVzcyk7XG4gICAgc2V0QWRkcmVzc0xvY2FsKG5leHRBZGRyZXNzKTtcbiAgICBzZXRTaG93U3VnZ2VzdGlvbnMoZmFsc2UpO1xuICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgfVxuXG4gIGNvbnN0IHNob3dSZWNvbW1lbmRlZEFkZHJlc3MgPVxuICAgIEJvb2xlYW4ocmVjb21tZW5kZWRBZGRyZXNzPy5saW5lT25lKSAmJiAhYWRkcmVzc0xvY2FsPy5saW5lT25lPy50cmltKCk7XG5cbiAgZnVuY3Rpb24gY2xlYXJJbnB1dChlOiBhbnkpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgc2V0U3VnZ2VzdGlvbnMoW10pO1xuICAgIHNldFNob3dTdWdnZXN0aW9ucyhmYWxzZSk7XG4gICAgdXBkYXRlQWRkcmVzcyh7XG4gICAgICBjaXR5OiAnJyxcbiAgICAgIGNvdW50cnk6ICcnLFxuICAgICAgbGluZU9uZTogJycsXG4gICAgICBsaW5lVHdvOiAnJyxcbiAgICAgIHBvc3Rjb2RlOiAnJyxcbiAgICAgIHN0YXRlOiAnJyxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGhhc0Vycm9ycyA9ICEhT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGg7XG5cbiAgY29uc3QgYWRkcmVzc0Zvcm0gPSAoXG4gICAgPD5cbiAgICAgIDxJbnB1dFRleHRcbiAgICAgICAgY29udHJvbD17Y29udHJvbH1cbiAgICAgICAgbGFiZWw9XCJBZGRyZXNzIGxpbmUgb25lXCJcbiAgICAgICAgbmFtZT17aW5wdXROYW1lKFwibGluZU9uZVwiKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9XCIxMjMgRmFrZSBzdFwiXG4gICAgICAgIHJ1bGVzPXt7IHJlcXVpcmVkOiAnQWRkcmVzcyBsaW5lIG9uZSBpcyByZXF1aXJlZC4nIH19XG4gICAgICAvPlxuICAgICAgPElucHV0VGV4dFxuICAgICAgICBjb250cm9sPXtjb250cm9sfVxuICAgICAgICBsYWJlbD1cIkNvbnRpbnVlIGFkZHJlc3NcIlxuICAgICAgICBuYW1lPXtpbnB1dE5hbWUoXCJsaW5lVHdvXCIpfVxuICAgICAgICBwbGFjZWhvbGRlcj1cIkNvbnRpbnVlIGFkZHJlc3MuLi5cIlxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVNZXJjaGlDaGVja291dFJvd30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVNZXJjaGlDaGVja291dFJvd0NvbHVtbn0+XG4gICAgICAgICAgPElucHV0VGV4dFxuICAgICAgICAgICAgY29udHJvbD17Y29udHJvbH1cbiAgICAgICAgICAgIGxhYmVsPVwiQ2l0eSAvIFByb3ZpbmNlXCJcbiAgICAgICAgICAgIG5hbWU9e2lucHV0TmFtZShcImNpdHlcIil9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNpdHlcIlxuICAgICAgICAgICAgcnVsZXM9e3sgcmVxdWlyZWQ6ICdDaXR5IC8gUHJvdmluY2UgaXMgcmVxdWlyZWQuJyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRSb3dDb2x1bW59PlxuICAgICAgICAgIDxJbnB1dFRleHRcbiAgICAgICAgICAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gICAgICAgICAgICBsYWJlbD1cIlBvc3QgLyBaaXAgY29kZVwiXG4gICAgICAgICAgICBuYW1lPXtpbnB1dE5hbWUoXCJwb3N0Y29kZVwiKX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiOTAyMTBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRSb3d9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRSb3dDb2x1bW59PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1Hcm91cH0+XG4gICAgICAgICAgICA8bGFiZWw+Q291bnRyeTwvbGFiZWw+XG4gICAgICAgICAgICA8Q29udHJvbGxlclxuICAgICAgICAgICAgICBuYW1lPXtpbnB1dE5hbWUoXCJjb3VudHJ5XCIpfVxuICAgICAgICAgICAgICBjb250cm9sPXtjb250cm9sfVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRBZGRyZXNzICYmIGRlZmF1bHRBZGRyZXNzLmNvdW50cnl9XG4gICAgICAgICAgICAgIHJlbmRlcj17KHsgZmllbGQgfTogYW55KSA9PiAoXG4gICAgICAgICAgICAgICAgPENvdW50cnlEcm9wZG93blxuICAgICAgICAgICAgICAgICAgey4uLmZpZWxkfVxuICAgICAgICAgICAgICAgICAgY2xhc3Nlcz17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRGb3JtU2VsZWN0fVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoaW5wdXROYW1lKFwiY291bnRyeVwiKSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVnaW9ucyBhcmUgY291bnRyeS1zcGVjaWZpYzsgY2xlYXIgc3RhbGUgc3RhdGUgb24gY291bnRyeSBjaGFuZ2UuXG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGlucHV0TmFtZShcInN0YXRlXCIpLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLm9uQ2hhbmdlKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlQ291bnRyeVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgdmFsdWVUeXBlPSdzaG9ydCdcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVNZXJjaGlDaGVja291dFJvd0NvbHVtbn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZU1lcmNoaUNoZWNrb3V0Rm9ybUdyb3VwfT5cbiAgICAgICAgICAgIDxsYWJlbD5TdGF0ZSAvIFJlZ2lvbjwvbGFiZWw+XG4gICAgICAgICAgICA8Q29udHJvbGxlclxuICAgICAgICAgICAgICBuYW1lPXtpbnB1dE5hbWUoXCJzdGF0ZVwiKX1cbiAgICAgICAgICAgICAgY29udHJvbD17Y29udHJvbH1cbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0QWRkcmVzcyAmJiBkZWZhdWx0QWRkcmVzcy5zdGF0ZX1cbiAgICAgICAgICAgICAgcmVuZGVyPXsoeyBmaWVsZCB9OiBhbnkpID0+IChcbiAgICAgICAgICAgICAgICA8UmVnaW9uRHJvcGRvd25cbiAgICAgICAgICAgICAgICAgIHsuLi5maWVsZH1cbiAgICAgICAgICAgICAgICAgIGNvdW50cnlWYWx1ZVR5cGU9XCJzaG9ydFwiXG4gICAgICAgICAgICAgICAgICBjb3VudHJ5PXtzZWxlY3RlZENvdW50cnl9XG4gICAgICAgICAgICAgICAgICBjbGFzc2VzPXtjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1TZWxlY3R9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShpbnB1dE5hbWUoXCJzdGF0ZVwiKSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQub25DaGFuZ2UodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2VDb3VudHJ5U3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICB2YWx1ZVR5cGU9J3Nob3J0J1xuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRGb3JtR3JvdXB9PlxuICAgICAgICA8bGFiZWw+e2xhYmVsR2VvU3VnZ2VzdH08L2xhYmVsPlxuICAgICAgICB7c2hvd1JlY29tbWVuZGVkQWRkcmVzcyAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1hZGRyZXNzLXJlY29tbWVuZGF0aW9uJz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1hZGRyZXNzLXJlY29tbWVuZGF0aW9uLWJ0bidcbiAgICAgICAgICAgICAgb25DbGljaz17YXBwbHlSZWNvbW1lbmRlZEFkZHJlc3N9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LWFkZHJlc3MtcmVjb21tZW5kYXRpb24tbGFiZWwnPlxuICAgICAgICAgICAgICAgIFVzZSBwcmV2aW91cyBhZGRyZXNzXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtYWRkcmVzcy1yZWNvbW1lbmRhdGlvbi12YWx1ZSc+XG4gICAgICAgICAgICAgICAge2FkZHJlc3NJbk9uZUxpbmUocmVjb21tZW5kZWRBZGRyZXNzKX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicG9zaXRpb24tcmVsYXRpdmVcIiBzdHlsZT17eyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT0nbmV3LXBhc3N3b3JkJ1xuICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG5hbWU9J2FkZHJlc3Mtc3VnZ2VzdGlvbidcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRGb3JtSW5wdXR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlSW5wdXRCbHVyfVxuICAgICAgICAgICAgb25Gb2N1cz17aGFuZGxlSW5wdXRGb2N1c31cbiAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmdSaWdodDogbG9hZGluZyA/ICc0MHB4JyA6ICcyMHB4JyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICcxMHB4JyxcbiAgICAgICAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxGb250QXdlc29tZUljb24gaWNvbj17ZmFTcGlubmVyfSBzcGluIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpbnB1dFZhbHVlICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tc20gcG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAnNXB4JyxcbiAgICAgICAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogJzJweCA1cHgnLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXtjbGVhcklucHV0fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIGljb249e2ZhVGltZXN9IC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzaG93U3VnZ2VzdGlvbnMgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHJlZj17c3VnZ2VzdGlvbnNSZWZ9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRHb29nbGVTdWdnZXN0TGlzdH1cbiAgICAgICAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7c3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17c3VnZ2VzdGlvbi5wbGFjZUlkfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWVNZXJjaGlDaGVja291dEdvb2dsZVN1Z2dlc3RMaXN0SXRlbX0gJHtpbmRleCA9PT0gc2VsZWN0ZWRJbmRleCA/ICdhY3RpdmUnIDogJyd9YH1cbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgb25Nb3VzZURvd249eyhlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvblNlbGVjdChzdWdnZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFNlbGVjdGVkSW5kZXgoaW5kZXgpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgIHtzdWdnZXN0aW9uLnN0cnVjdHVyZWRGb3JtYXR0aW5nPy5tYWluX3RleHQgfHwgc3VnZ2VzdGlvbi5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAge3N1Z2dlc3Rpb24uc3RydWN0dXJlZEZvcm1hdHRpbmc/LnNlY29uZGFyeV90ZXh0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3N1Z2dlc3Rpb24uc3RydWN0dXJlZEZvcm1hdHRpbmcuc2Vjb25kYXJ5X3RleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPENvbGxhcHNlIGlzT3Blbj17YWRkcmVzc0ZpZWxkc09wZW59PlxuICAgICAgICB7YWRkcmVzc0Zvcm19XG4gICAgICA8L0NvbGxhcHNlPlxuICAgICAgPGRpdiBjbGFzc05hbWU9J2QtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXInPlxuICAgICAgICB7aGFzRXJyb3JzICYmXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3RleHQtZGFuZ2VyJz5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb24gaWNvbj17ZmFFeGNsYW1hdGlvblRyaWFuZ2xlfSAvPiBJbnZhbGlkIGFkZHJlc3MhXG4gICAgICAgICAgPC9kaXY+fVxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzTmFtZT17YG1sLWF1dG8gYnRuIGJ0bi1zbSBidG4tbGluayAke2hhc0Vycm9ycyAmJiAndGV4dC1kYW5nZXInfWB9XG4gICAgICAgICAgb25DbGljaz17dG9nZ2xlQWRkcmVzc0ZpZWxkc09wZW59XG4gICAgICAgID5cbiAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICBpY29uPXthZGRyZXNzRmllbGRzT3BlbiA/IGZhVGltZXMgOiBmYUVkaXR9XG4gICAgICAgICAgLz4ge2FkZHJlc3NGaWVsZHNPcGVuID8gJ0Nsb3NlJyA6ICdFZGl0IGZpZWxkcyd9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbnB1dHNBZGRyZXNzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZOztBQUFDLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBQUEsU0FBQUssYUFBQSxJQUNiLHVLQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSx3QkFBQVAsTUFBQSxHQUFBQSxNQUFBLE9BQUFRLENBQUEsR0FBQUQsQ0FBQSxDQUFBTixRQUFBLGtCQUFBRixDQUFBLEdBQUFRLENBQUEsQ0FBQUUsV0FBQSw4QkFBQUMsRUFBQUgsQ0FBQSxFQUFBQyxDQUFBLEVBQUFULENBQUEsRUFBQVcsQ0FBQSxRQUFBQyxDQUFBLEdBQUFILENBQUEsSUFBQUEsQ0FBQSxDQUFBTCxTQUFBLFlBQUFTLFNBQUEsR0FBQUosQ0FBQSxHQUFBSSxTQUFBLEVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxNQUFBLENBQUFKLENBQUEsQ0FBQVIsU0FBQSxVQUFBYSxtQkFBQSxDQUFBSCxDQUFBLHVCQUFBTixDQUFBLEVBQUFDLENBQUEsRUFBQVQsQ0FBQSxRQUFBVyxDQUFBLEVBQUFDLENBQUEsRUFBQUUsQ0FBQSxFQUFBSSxDQUFBLE1BQUFDLENBQUEsR0FBQW5CLENBQUEsUUFBQW9CLENBQUEsT0FBQUMsQ0FBQSxLQUFBRixDQUFBLEtBQUFWLENBQUEsS0FBQWEsQ0FBQSxFQUFBaEIsQ0FBQSxFQUFBaUIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFOLENBQUEsRUFBQU0sQ0FBQSxDQUFBQyxJQUFBLENBQUFuQixDQUFBLE1BQUFrQixDQUFBLFdBQUFBLEVBQUFqQixDQUFBLEVBQUFDLENBQUEsV0FBQUcsQ0FBQSxHQUFBSixDQUFBLEVBQUFLLENBQUEsTUFBQUUsQ0FBQSxHQUFBUixDQUFBLEVBQUFlLENBQUEsQ0FBQVosQ0FBQSxHQUFBRCxDQUFBLEVBQUFlLENBQUEsZ0JBQUFDLEVBQUFoQixDQUFBLEVBQUFDLENBQUEsU0FBQUcsQ0FBQSxHQUFBSixDQUFBLEVBQUFNLENBQUEsR0FBQUwsQ0FBQSxFQUFBRixDQUFBLE9BQUFhLENBQUEsSUFBQUYsQ0FBQSxLQUFBbEIsQ0FBQSxJQUFBTyxDQUFBLEdBQUFZLENBQUEsQ0FBQU8sTUFBQSxFQUFBbkIsQ0FBQSxVQUFBUCxDQUFBLEVBQUFXLENBQUEsR0FBQVEsQ0FBQSxDQUFBWixDQUFBLEdBQUFpQixDQUFBLEdBQUFILENBQUEsQ0FBQUYsQ0FBQSxFQUFBUSxDQUFBLEdBQUFoQixDQUFBLEtBQUFILENBQUEsUUFBQVIsQ0FBQSxHQUFBMkIsQ0FBQSxLQUFBbEIsQ0FBQSxNQUFBSyxDQUFBLEdBQUFILENBQUEsRUFBQUMsQ0FBQSxHQUFBRCxDQUFBLFlBQUFDLENBQUEsV0FBQUQsQ0FBQSxNQUFBQSxDQUFBLE1BQUFMLENBQUEsSUFBQUssQ0FBQSxPQUFBYSxDQUFBLE1BQUF4QixDQUFBLEdBQUFRLENBQUEsUUFBQWdCLENBQUEsR0FBQWIsQ0FBQSxRQUFBQyxDQUFBLE1BQUFTLENBQUEsQ0FBQUMsQ0FBQSxHQUFBYixDQUFBLEVBQUFZLENBQUEsQ0FBQVosQ0FBQSxHQUFBRSxDQUFBLE9BQUFhLENBQUEsR0FBQUcsQ0FBQSxLQUFBM0IsQ0FBQSxHQUFBUSxDQUFBLFFBQUFHLENBQUEsTUFBQUYsQ0FBQSxJQUFBQSxDQUFBLEdBQUFrQixDQUFBLE1BQUFoQixDQUFBLE1BQUFILENBQUEsRUFBQUcsQ0FBQSxNQUFBRixDQUFBLEVBQUFZLENBQUEsQ0FBQVosQ0FBQSxHQUFBa0IsQ0FBQSxFQUFBZixDQUFBLGNBQUFaLENBQUEsSUFBQVEsQ0FBQSxhQUFBZSxDQUFBLFFBQUFILENBQUEsT0FBQVgsQ0FBQSxxQkFBQVQsQ0FBQSxFQUFBbUIsQ0FBQSxFQUFBUSxDQUFBLFFBQUFULENBQUEsWUFBQVUsU0FBQSx1Q0FBQVIsQ0FBQSxVQUFBRCxDQUFBLElBQUFLLENBQUEsQ0FBQUwsQ0FBQSxFQUFBUSxDQUFBLEdBQUFmLENBQUEsR0FBQU8sQ0FBQSxFQUFBTCxDQUFBLEdBQUFhLENBQUEsR0FBQXBCLENBQUEsR0FBQUssQ0FBQSxPQUFBTixDQUFBLEdBQUFRLENBQUEsTUFBQU0sQ0FBQSxLQUFBVCxDQUFBLEtBQUFDLENBQUEsR0FBQUEsQ0FBQSxRQUFBQSxDQUFBLFNBQUFTLENBQUEsQ0FBQVosQ0FBQSxRQUFBZSxDQUFBLENBQUFaLENBQUEsRUFBQUUsQ0FBQSxLQUFBTyxDQUFBLENBQUFaLENBQUEsR0FBQUssQ0FBQSxHQUFBTyxDQUFBLENBQUFDLENBQUEsR0FBQVIsQ0FBQSxhQUFBSSxDQUFBLE1BQUFQLENBQUEsUUFBQUMsQ0FBQSxLQUFBWixDQUFBLFlBQUFPLENBQUEsR0FBQUksQ0FBQSxDQUFBWCxDQUFBLFdBQUFPLENBQUEsR0FBQUEsQ0FBQSxDQUFBc0IsSUFBQSxDQUFBbEIsQ0FBQSxFQUFBRyxDQUFBLFVBQUFjLFNBQUEsMkNBQUFyQixDQUFBLENBQUF1QixJQUFBLFNBQUF2QixDQUFBLEVBQUFPLENBQUEsR0FBQVAsQ0FBQSxDQUFBd0IsS0FBQSxFQUFBbkIsQ0FBQSxTQUFBQSxDQUFBLG9CQUFBQSxDQUFBLEtBQUFMLENBQUEsR0FBQUksQ0FBQSxlQUFBSixDQUFBLENBQUFzQixJQUFBLENBQUFsQixDQUFBLEdBQUFDLENBQUEsU0FBQUUsQ0FBQSxHQUFBYyxTQUFBLHVDQUFBNUIsQ0FBQSxnQkFBQVksQ0FBQSxPQUFBRCxDQUFBLEdBQUFMLENBQUEsY0FBQUMsQ0FBQSxJQUFBYSxDQUFBLEdBQUFDLENBQUEsQ0FBQVosQ0FBQSxRQUFBSyxDQUFBLEdBQUFOLENBQUEsQ0FBQXFCLElBQUEsQ0FBQXBCLENBQUEsRUFBQVksQ0FBQSxPQUFBRSxDQUFBLGtCQUFBaEIsQ0FBQSxJQUFBSSxDQUFBLEdBQUFMLENBQUEsRUFBQU0sQ0FBQSxNQUFBRSxDQUFBLEdBQUFQLENBQUEsY0FBQVcsQ0FBQSxtQkFBQWEsS0FBQSxFQUFBeEIsQ0FBQSxFQUFBdUIsSUFBQSxFQUFBVixDQUFBLFNBQUFaLENBQUEsRUFBQVIsQ0FBQSxFQUFBVyxDQUFBLFFBQUFHLENBQUEsUUFBQVMsQ0FBQSxnQkFBQVYsVUFBQSxjQUFBbUIsa0JBQUEsY0FBQUMsMkJBQUEsS0FBQTFCLENBQUEsR0FBQVEsTUFBQSxDQUFBbUIsY0FBQSxNQUFBdEIsQ0FBQSxNQUFBSCxDQUFBLElBQUFGLENBQUEsQ0FBQUEsQ0FBQSxJQUFBRSxDQUFBLFNBQUFRLG1CQUFBLENBQUFWLENBQUEsT0FBQUUsQ0FBQSxpQ0FBQUYsQ0FBQSxHQUFBTyxDQUFBLEdBQUFtQiwwQkFBQSxDQUFBN0IsU0FBQSxHQUFBUyxTQUFBLENBQUFULFNBQUEsR0FBQVcsTUFBQSxDQUFBQyxNQUFBLENBQUFKLENBQUEsWUFBQU0sRUFBQVosQ0FBQSxXQUFBUyxNQUFBLENBQUFvQixjQUFBLEdBQUFwQixNQUFBLENBQUFvQixjQUFBLENBQUE3QixDQUFBLEVBQUEyQiwwQkFBQSxLQUFBM0IsQ0FBQSxDQUFBOEIsU0FBQSxHQUFBSCwwQkFBQSxFQUFBaEIsbUJBQUEsQ0FBQVgsQ0FBQSxFQUFBTixDQUFBLHlCQUFBTSxDQUFBLENBQUFGLFNBQUEsR0FBQVcsTUFBQSxDQUFBQyxNQUFBLENBQUFGLENBQUEsR0FBQVIsQ0FBQSxXQUFBMEIsaUJBQUEsQ0FBQTVCLFNBQUEsR0FBQTZCLDBCQUFBLEVBQUFoQixtQkFBQSxDQUFBSCxDQUFBLGlCQUFBbUIsMEJBQUEsR0FBQWhCLG1CQUFBLENBQUFnQiwwQkFBQSxpQkFBQUQsaUJBQUEsR0FBQUEsaUJBQUEsQ0FBQUssV0FBQSx3QkFBQXBCLG1CQUFBLENBQUFnQiwwQkFBQSxFQUFBakMsQ0FBQSx3QkFBQWlCLG1CQUFBLENBQUFILENBQUEsR0FBQUcsbUJBQUEsQ0FBQUgsQ0FBQSxFQUFBZCxDQUFBLGdCQUFBaUIsbUJBQUEsQ0FBQUgsQ0FBQSxFQUFBTCxDQUFBLGlDQUFBUSxtQkFBQSxDQUFBSCxDQUFBLDhEQUFBVCxZQUFBLFlBQUFBLGFBQUEsYUFBQWlDLENBQUEsRUFBQTNCLENBQUEsRUFBQTRCLENBQUEsRUFBQXJCLENBQUE7QUFBQSxTQUFBRCxvQkFBQVgsQ0FBQSxFQUFBRSxDQUFBLEVBQUFDLENBQUEsRUFBQUYsQ0FBQSxRQUFBSSxDQUFBLEdBQUFJLE1BQUEsQ0FBQXlCLGNBQUEsUUFBQTdCLENBQUEsdUJBQUFMLENBQUEsSUFBQUssQ0FBQSxRQUFBTSxtQkFBQSxZQUFBd0IsbUJBQUFuQyxDQUFBLEVBQUFFLENBQUEsRUFBQUMsQ0FBQSxFQUFBRixDQUFBLGFBQUFQLEVBQUFRLENBQUEsRUFBQUMsQ0FBQSxJQUFBUSxtQkFBQSxDQUFBWCxDQUFBLEVBQUFFLENBQUEsWUFBQUYsQ0FBQSxnQkFBQW9DLE9BQUEsQ0FBQWxDLENBQUEsRUFBQUMsQ0FBQSxFQUFBSCxDQUFBLFNBQUFFLENBQUEsR0FBQUcsQ0FBQSxHQUFBQSxDQUFBLENBQUFMLENBQUEsRUFBQUUsQ0FBQSxJQUFBdUIsS0FBQSxFQUFBdEIsQ0FBQSxFQUFBa0MsVUFBQSxHQUFBcEMsQ0FBQSxFQUFBcUMsWUFBQSxHQUFBckMsQ0FBQSxFQUFBc0MsUUFBQSxHQUFBdEMsQ0FBQSxNQUFBRCxDQUFBLENBQUFFLENBQUEsSUFBQUMsQ0FBQSxJQUFBVCxDQUFBLGFBQUFBLENBQUEsY0FBQUEsQ0FBQSxtQkFBQWlCLG1CQUFBLENBQUFYLENBQUEsRUFBQUUsQ0FBQSxFQUFBQyxDQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBdUMsbUJBQUFyQyxDQUFBLEVBQUFGLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLEVBQUFSLENBQUEsRUFBQXVCLENBQUEsRUFBQVgsQ0FBQSxjQUFBRCxDQUFBLEdBQUFGLENBQUEsQ0FBQWMsQ0FBQSxFQUFBWCxDQUFBLEdBQUFFLENBQUEsR0FBQUgsQ0FBQSxDQUFBb0IsS0FBQSxXQUFBdEIsQ0FBQSxnQkFBQUgsQ0FBQSxDQUFBRyxDQUFBLEtBQUFFLENBQUEsQ0FBQW1CLElBQUEsR0FBQXZCLENBQUEsQ0FBQU8sQ0FBQSxJQUFBaUMsT0FBQSxDQUFBQyxPQUFBLENBQUFsQyxDQUFBLEVBQUFtQyxJQUFBLENBQUF6QyxDQUFBLEVBQUFSLENBQUE7QUFBQSxTQUFBa0Qsa0JBQUF6QyxDQUFBLDZCQUFBRixDQUFBLFNBQUFELENBQUEsR0FBQTZDLFNBQUEsYUFBQUosT0FBQSxXQUFBdkMsQ0FBQSxFQUFBUixDQUFBLFFBQUF1QixDQUFBLEdBQUFkLENBQUEsQ0FBQTJDLEtBQUEsQ0FBQTdDLENBQUEsRUFBQUQsQ0FBQSxZQUFBK0MsTUFBQTVDLENBQUEsSUFBQXFDLGtCQUFBLENBQUF2QixDQUFBLEVBQUFmLENBQUEsRUFBQVIsQ0FBQSxFQUFBcUQsS0FBQSxFQUFBQyxNQUFBLFVBQUE3QyxDQUFBLGNBQUE2QyxPQUFBN0MsQ0FBQSxJQUFBcUMsa0JBQUEsQ0FBQXZCLENBQUEsRUFBQWYsQ0FBQSxFQUFBUixDQUFBLEVBQUFxRCxLQUFBLEVBQUFDLE1BQUEsV0FBQTdDLENBQUEsS0FBQTRDLEtBQUE7QUFBQSxTQUFBRSxRQUFBakQsQ0FBQSxFQUFBRSxDQUFBLFFBQUFELENBQUEsR0FBQVEsTUFBQSxDQUFBeUMsSUFBQSxDQUFBbEQsQ0FBQSxPQUFBUyxNQUFBLENBQUEwQyxxQkFBQSxRQUFBekQsQ0FBQSxHQUFBZSxNQUFBLENBQUEwQyxxQkFBQSxDQUFBbkQsQ0FBQSxHQUFBRSxDQUFBLEtBQUFSLENBQUEsR0FBQUEsQ0FBQSxDQUFBMEQsTUFBQSxXQUFBbEQsQ0FBQSxXQUFBTyxNQUFBLENBQUE0Qyx3QkFBQSxDQUFBckQsQ0FBQSxFQUFBRSxDQUFBLEVBQUFtQyxVQUFBLE9BQUFwQyxDQUFBLENBQUFxRCxJQUFBLENBQUFSLEtBQUEsQ0FBQTdDLENBQUEsRUFBQVAsQ0FBQSxZQUFBTyxDQUFBO0FBQUEsU0FBQXNELGNBQUF2RCxDQUFBLGFBQUFFLENBQUEsTUFBQUEsQ0FBQSxHQUFBMkMsU0FBQSxDQUFBekIsTUFBQSxFQUFBbEIsQ0FBQSxVQUFBRCxDQUFBLFdBQUE0QyxTQUFBLENBQUEzQyxDQUFBLElBQUEyQyxTQUFBLENBQUEzQyxDQUFBLFFBQUFBLENBQUEsT0FBQStDLE9BQUEsQ0FBQXhDLE1BQUEsQ0FBQVIsQ0FBQSxPQUFBdUQsT0FBQSxXQUFBdEQsQ0FBQSxJQUFBdUQsZUFBQSxDQUFBekQsQ0FBQSxFQUFBRSxDQUFBLEVBQUFELENBQUEsQ0FBQUMsQ0FBQSxTQUFBTyxNQUFBLENBQUFpRCx5QkFBQSxHQUFBakQsTUFBQSxDQUFBa0QsZ0JBQUEsQ0FBQTNELENBQUEsRUFBQVMsTUFBQSxDQUFBaUQseUJBQUEsQ0FBQXpELENBQUEsS0FBQWdELE9BQUEsQ0FBQXhDLE1BQUEsQ0FBQVIsQ0FBQSxHQUFBdUQsT0FBQSxXQUFBdEQsQ0FBQSxJQUFBTyxNQUFBLENBQUF5QixjQUFBLENBQUFsQyxDQUFBLEVBQUFFLENBQUEsRUFBQU8sTUFBQSxDQUFBNEMsd0JBQUEsQ0FBQXBELENBQUEsRUFBQUMsQ0FBQSxpQkFBQUYsQ0FBQTtBQUFBLFNBQUF5RCxnQkFBQXpELENBQUEsRUFBQUUsQ0FBQSxFQUFBRCxDQUFBLFlBQUFDLENBQUEsR0FBQTBELGNBQUEsQ0FBQTFELENBQUEsTUFBQUYsQ0FBQSxHQUFBUyxNQUFBLENBQUF5QixjQUFBLENBQUFsQyxDQUFBLEVBQUFFLENBQUEsSUFBQXVCLEtBQUEsRUFBQXhCLENBQUEsRUFBQW9DLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFVBQUF2QyxDQUFBLENBQUFFLENBQUEsSUFBQUQsQ0FBQSxFQUFBRCxDQUFBO0FBQUEsU0FBQTRELGVBQUEzRCxDQUFBLFFBQUFJLENBQUEsR0FBQXdELFlBQUEsQ0FBQTVELENBQUEsZ0NBQUFSLE9BQUEsQ0FBQVksQ0FBQSxJQUFBQSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBd0QsYUFBQTVELENBQUEsRUFBQUMsQ0FBQSxvQkFBQVQsT0FBQSxDQUFBUSxDQUFBLE1BQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBRCxDQUFBLEdBQUFDLENBQUEsQ0FBQU4sTUFBQSxDQUFBbUUsV0FBQSxrQkFBQTlELENBQUEsUUFBQUssQ0FBQSxHQUFBTCxDQUFBLENBQUF1QixJQUFBLENBQUF0QixDQUFBLEVBQUFDLENBQUEsZ0NBQUFULE9BQUEsQ0FBQVksQ0FBQSxVQUFBQSxDQUFBLFlBQUFpQixTQUFBLHlFQUFBcEIsQ0FBQSxHQUFBNkQsTUFBQSxHQUFBQyxNQUFBLEVBQUEvRCxDQUFBO0FBQUEsU0FBQWdFLGVBQUEvRCxDQUFBLEVBQUFGLENBQUEsV0FBQWtFLGVBQUEsQ0FBQWhFLENBQUEsS0FBQWlFLHFCQUFBLENBQUFqRSxDQUFBLEVBQUFGLENBQUEsS0FBQW9FLDJCQUFBLENBQUFsRSxDQUFBLEVBQUFGLENBQUEsS0FBQXFFLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQS9DLFNBQUE7QUFBQSxTQUFBOEMsNEJBQUFsRSxDQUFBLEVBQUFlLENBQUEsUUFBQWYsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBb0UsaUJBQUEsQ0FBQXBFLENBQUEsRUFBQWUsQ0FBQSxPQUFBaEIsQ0FBQSxNQUFBc0UsUUFBQSxDQUFBaEQsSUFBQSxDQUFBckIsQ0FBQSxFQUFBc0UsS0FBQSw2QkFBQXZFLENBQUEsSUFBQUMsQ0FBQSxDQUFBTCxXQUFBLEtBQUFJLENBQUEsR0FBQUMsQ0FBQSxDQUFBTCxXQUFBLENBQUE0RSxJQUFBLGFBQUF4RSxDQUFBLGNBQUFBLENBQUEsR0FBQXlFLEtBQUEsQ0FBQUMsSUFBQSxDQUFBekUsQ0FBQSxvQkFBQUQsQ0FBQSwrQ0FBQTJFLElBQUEsQ0FBQTNFLENBQUEsSUFBQXFFLGlCQUFBLENBQUFwRSxDQUFBLEVBQUFlLENBQUE7QUFBQSxTQUFBcUQsa0JBQUFwRSxDQUFBLEVBQUFlLENBQUEsYUFBQUEsQ0FBQSxJQUFBQSxDQUFBLEdBQUFmLENBQUEsQ0FBQWtCLE1BQUEsTUFBQUgsQ0FBQSxHQUFBZixDQUFBLENBQUFrQixNQUFBLFlBQUFwQixDQUFBLE1BQUFHLENBQUEsR0FBQXVFLEtBQUEsQ0FBQXpELENBQUEsR0FBQWpCLENBQUEsR0FBQWlCLENBQUEsRUFBQWpCLENBQUEsSUFBQUcsQ0FBQSxDQUFBSCxDQUFBLElBQUFFLENBQUEsQ0FBQUYsQ0FBQSxVQUFBRyxDQUFBO0FBQUEsU0FBQWdFLHNCQUFBakUsQ0FBQSxFQUFBbUIsQ0FBQSxRQUFBcEIsQ0FBQSxXQUFBQyxDQUFBLGdDQUFBUCxNQUFBLElBQUFPLENBQUEsQ0FBQVAsTUFBQSxDQUFBQyxRQUFBLEtBQUFNLENBQUEsNEJBQUFELENBQUEsUUFBQUQsQ0FBQSxFQUFBRyxDQUFBLEVBQUFFLENBQUEsRUFBQUcsQ0FBQSxFQUFBUyxDQUFBLE9BQUFMLENBQUEsT0FBQWxCLENBQUEsaUJBQUFXLENBQUEsSUFBQUosQ0FBQSxHQUFBQSxDQUFBLENBQUFzQixJQUFBLENBQUFyQixDQUFBLEdBQUEyRSxJQUFBLFFBQUF4RCxDQUFBLFFBQUFaLE1BQUEsQ0FBQVIsQ0FBQSxNQUFBQSxDQUFBLFVBQUFXLENBQUEsdUJBQUFBLENBQUEsSUFBQVosQ0FBQSxHQUFBSyxDQUFBLENBQUFrQixJQUFBLENBQUF0QixDQUFBLEdBQUF1QixJQUFBLE1BQUFQLENBQUEsQ0FBQXFDLElBQUEsQ0FBQXRELENBQUEsQ0FBQXlCLEtBQUEsR0FBQVIsQ0FBQSxDQUFBRyxNQUFBLEtBQUFDLENBQUEsR0FBQVQsQ0FBQSxpQkFBQVYsQ0FBQSxJQUFBUixDQUFBLE9BQUFTLENBQUEsR0FBQUQsQ0FBQSx5QkFBQVUsQ0FBQSxZQUFBWCxDQUFBLGVBQUFPLENBQUEsR0FBQVAsQ0FBQSxjQUFBUSxNQUFBLENBQUFELENBQUEsTUFBQUEsQ0FBQSwyQkFBQWQsQ0FBQSxRQUFBUyxDQUFBLGFBQUFjLENBQUE7QUFBQSxTQUFBaUQsZ0JBQUFoRSxDQUFBLFFBQUF3RSxLQUFBLENBQUFJLE9BQUEsQ0FBQTVFLENBQUEsVUFBQUEsQ0FBQTtBQUFBLE9BQU82RSxLQUFLLE1BQU0sT0FBTztBQUN6QixTQUFTQyxTQUFTLFFBQVEsT0FBTztBQUNqQyxTQUFTQyxRQUFRLFFBQVEsUUFBUTtBQUNqQyxTQUFTQyxNQUFNLFFBQVEsYUFBYTtBQUNwQyxTQUFTQyxlQUFlLEVBQUVDLGNBQWMsUUFBUSwrQkFBK0I7QUFDL0UsU0FBU0MsVUFBVSxRQUFRLGlCQUFpQjtBQUM1QyxPQUFPQyxTQUFTLE1BQU0sYUFBYTtBQUNuQyxTQUFTQyx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDckUsU0FBU0MsZ0JBQWdCLEVBQUVDLDhCQUE4QixRQUFRLGFBQWE7QUFDOUUsU0FBU0MsZUFBZSxRQUFRLGdDQUFnQztBQUNoRSxTQUFTQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxxQkFBcUIsUUFBUSxtQ0FBbUM7QUFDckcsU0FBU0MsUUFBUSxRQUFRLE9BQU87QUFDaEMsT0FBT0MsUUFBUSxNQUFNLGFBQWE7QUFBQyxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBLEVBQUFDLFFBQUEsSUFBQUMsU0FBQTtBQUVuQyxJQUFNQyxNQUFNLEdBQUcsSUFBSXJCLE1BQU0sQ0FBQyxDQUFDO0FBb0IzQixPQUFPLFNBQVNzQixhQUFhQSxDQUFBQyxJQUFBLEVBUW5CO0VBQUEsSUFBQUMscUJBQUE7RUFBQSxJQUFBQyxtQkFBQSxHQUFBRixJQUFBLENBUFJHLGNBQWM7SUFBZEEsY0FBYyxHQUFBRCxtQkFBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxtQkFBQTtJQUFBRSxvQkFBQSxHQUFBSixJQUFBLENBQ25CSyxlQUFlO0lBQWZBLGVBQWUsR0FBQUQsb0JBQUEsY0FBRyxTQUFTLEdBQUFBLG9CQUFBO0lBQzNCRSxRQUFRLEdBQUFOLElBQUEsQ0FBUk0sUUFBUTtJQUNSdEMsSUFBSSxHQUFBZ0MsSUFBQSxDQUFKaEMsSUFBSTtJQUFBdUMsZ0JBQUEsR0FBQVAsSUFBQSxDQUNKUSxXQUFXO0lBQVhBLFdBQVcsR0FBQUQsZ0JBQUEsY0FBRyxxQkFBcUIsR0FBQUEsZ0JBQUE7SUFDbkNFLGtCQUFrQixHQUFBVCxJQUFBLENBQWxCUyxrQkFBa0I7SUFDbEJDLGFBQWEsR0FBQVYsSUFBQSxDQUFiVSxhQUFhO0VBRWIsSUFBQUMscUJBQUEsR0FRSTdCLHlCQUF5QixDQUFDLENBQUM7SUFQN0I4QixnQ0FBZ0MsR0FBQUQscUJBQUEsQ0FBaENDLGdDQUFnQztJQUNoQ0MsZ0NBQWdDLEdBQUFGLHFCQUFBLENBQWhDRSxnQ0FBZ0M7SUFDaENDLGlDQUFpQyxHQUFBSCxxQkFBQSxDQUFqQ0csaUNBQWlDO0lBQ2pDQywwQkFBMEIsR0FBQUoscUJBQUEsQ0FBMUJJLDBCQUEwQjtJQUMxQkMsZ0NBQWdDLEdBQUFMLHFCQUFBLENBQWhDSyxnQ0FBZ0M7SUFDaENDLHdDQUF3QyxHQUFBTixxQkFBQSxDQUF4Q00sd0NBQXdDO0lBQ3hDQyw0Q0FBNEMsR0FBQVAscUJBQUEsQ0FBNUNPLDRDQUE0QztFQUc5QyxJQUFBQyxlQUFBLEdBQW9DN0MsS0FBSyxDQUFDZ0IsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUFBOEIsZ0JBQUEsR0FBQTVELGNBQUEsQ0FBQTJELGVBQUE7SUFBL0NFLFVBQVUsR0FBQUQsZ0JBQUE7SUFBRUUsYUFBYSxHQUFBRixnQkFBQTtFQUNoQyxJQUFBRyxnQkFBQSxHQUFzQ2pELEtBQUssQ0FBQ2dCLFFBQVEsQ0FBZSxFQUFFLENBQUM7SUFBQWtDLGdCQUFBLEdBQUFoRSxjQUFBLENBQUErRCxnQkFBQTtJQUEvREUsV0FBVyxHQUFBRCxnQkFBQTtJQUFFRSxjQUFjLEdBQUFGLGdCQUFBO0VBQ2xDLElBQUFHLGdCQUFBLEdBQThDckQsS0FBSyxDQUFDZ0IsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBc0MsZ0JBQUEsR0FBQXBFLGNBQUEsQ0FBQW1FLGdCQUFBO0lBQTVERSxlQUFlLEdBQUFELGdCQUFBO0lBQUVFLGtCQUFrQixHQUFBRixnQkFBQTtFQUMxQyxJQUFBRyxnQkFBQSxHQUE4QnpELEtBQUssQ0FBQ2dCLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQTBDLGdCQUFBLEdBQUF4RSxjQUFBLENBQUF1RSxnQkFBQTtJQUE1Q0UsT0FBTyxHQUFBRCxnQkFBQTtJQUFFRSxVQUFVLEdBQUFGLGdCQUFBO0VBQzFCLElBQUFHLGdCQUFBLEdBQTBDN0QsS0FBSyxDQUFDZ0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUE4QyxnQkFBQSxHQUFBNUUsY0FBQSxDQUFBMkUsZ0JBQUE7SUFBckRFLGFBQWEsR0FBQUQsZ0JBQUE7SUFBRUUsZ0JBQWdCLEdBQUFGLGdCQUFBO0VBQ3RDLElBQUFHLGdCQUFBLEdBQXdDakUsS0FBSyxDQUFDZ0IsUUFBUSxDQUFBeEMsYUFBQSxLQUFNcUQsY0FBYyxDQUFFLENBQUM7SUFBQXFDLGlCQUFBLEdBQUFoRixjQUFBLENBQUErRSxnQkFBQTtJQUF0RUUsWUFBWSxHQUFBRCxpQkFBQTtJQUFFRSxlQUFlLEdBQUFGLGlCQUFBO0VBRXBDLElBQU1HLFFBQVEsR0FBR3JFLEtBQUssQ0FBQ3NFLE1BQU0sQ0FBbUIsSUFBSSxDQUFDO0VBQ3JELElBQU1DLGNBQWMsR0FBR3ZFLEtBQUssQ0FBQ3NFLE1BQU0sQ0FBaUIsSUFBSSxDQUFDO0VBRXpELElBQ0VFLE9BQU8sR0FNTHhDLFFBQVEsQ0FOVndDLE9BQU87SUFBQUMsbUJBQUEsR0FNTHpDLFFBQVEsQ0FMVjBDLFNBQVM7SUFBSUMsTUFBTSxHQUFBRixtQkFBQSxDQUFORSxNQUFNO0lBQUVDLE9BQU8sR0FBQUgsbUJBQUEsQ0FBUEcsT0FBTztJQUFFQyxXQUFXLEdBQUFKLG1CQUFBLENBQVhJLFdBQVc7SUFDekNDLFFBQVEsR0FJTjlDLFFBQVEsQ0FKVjhDLFFBQVE7SUFDUkMsU0FBUyxHQUdQL0MsUUFBUSxDQUhWK0MsU0FBUztJQUNUQyxLQUFLLEdBRUhoRCxRQUFRLENBRlZnRCxLQUFLO0lBQ0xDLEtBQUssR0FDSGpELFFBQVEsQ0FEVmlELEtBQUs7RUFFUCxJQUFNQyxTQUFTLEdBQUcsU0FBWkEsU0FBU0EsQ0FBSUMsS0FBYTtJQUFBLFVBQUFDLE1BQUEsQ0FBUTFGLElBQUksTUFBQTBGLE1BQUEsQ0FBTTFGLElBQUksU0FBTSxFQUFFLEVBQUEwRixNQUFBLENBQUdELEtBQUs7RUFBQSxDQUFFO0VBQ3hFLElBQU1FLGVBQWUsR0FBR0osS0FBSyxDQUFDQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7RUFFbkQsU0FBU0ksb0JBQW9CQSxDQUFBLEVBQUc7SUFDOUI7SUFDQWxELGFBQWEsQ0FBQzJDLFNBQVMsQ0FBQyxDQUFDLENBQUNyRixJQUFJLENBQUMsQ0FBQztFQUNsQztFQUNBLElBQUE2RixTQUFBLEdBQWtEdkUsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBd0UsVUFBQSxHQUFBdEcsY0FBQSxDQUFBcUcsU0FBQTtJQUExREUsaUJBQWlCLEdBQUFELFVBQUE7SUFBRUUsb0JBQW9CLEdBQUFGLFVBQUE7RUFDOUMsSUFBTUcsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FBQTtJQUFBLE9BQVNELG9CQUFvQixDQUFDLENBQUNELGlCQUFpQixDQUFDO0VBQUE7RUFDOUV4RixTQUFTLENBQUMsWUFBTTtJQUNkLElBQUksQ0FBQzJFLE9BQU8sSUFBSSxDQUFDYSxpQkFBaUIsSUFBSVosV0FBVyxHQUFHLENBQUMsRUFBRTtNQUNyRGMsdUJBQXVCLENBQUMsQ0FBQztJQUMzQjtFQUNGLENBQUMsRUFBRSxDQUFDZixPQUFPLEVBQUVDLFdBQVcsQ0FBQyxDQUFDO0VBRTFCNUUsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLEVBQUM0QixjQUFjLGFBQWRBLGNBQWMsZUFBZEEsY0FBYyxDQUFFK0QsT0FBTyxHQUFFO0lBRTlCLElBQU1DLFdBQVcsR0FBQXJILGFBQUEsS0FBUXFELGNBQWMsQ0FBRTtJQUN6Q3VDLGVBQWUsQ0FBQ3lCLFdBQVcsQ0FBQztJQUM1QjdDLGFBQWEsQ0FBQ3ZDLGdCQUFnQixDQUFDb0YsV0FBVyxDQUFDLENBQUM7SUFDNUNiLEtBQUssQ0FBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUNBdUcsU0FBUyxDQUFDLENBQUMsT0FBQXJHLGVBQUEsS0FDYmdCLElBQUksRUFBR21HLFdBQVcsRUFDcEIsQ0FBQztFQUNKLENBQUMsRUFBRSxDQUFDaEUsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUUrRCxPQUFPLEVBQUUvRCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRWlFLElBQUksRUFBRWpFLGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFa0UsUUFBUSxDQUFDLENBQUM7RUFBQyxTQUUvREMsZUFBZUEsQ0FBQUMsRUFBQTtJQUFBLE9BQUFDLGdCQUFBLENBQUFuSSxLQUFBLE9BQUFELFNBQUE7RUFBQSxFQTRCOUI7RUFBQSxTQUFBb0ksaUJBQUE7SUFBQUEsZ0JBQUEsR0FBQXJJLGlCQUFBLGNBQUE3QyxZQUFBLEdBQUFrQyxDQUFBLENBNUJBLFNBQUFpSixRQUErQkMsS0FBYTtNQUFBLElBQUFDLFFBQUEsRUFBQUMsRUFBQTtNQUFBLE9BQUF0TCxZQUFBLEdBQUFpQyxDQUFBLFdBQUFzSixRQUFBO1FBQUEsa0JBQUFBLFFBQUEsQ0FBQXpLLENBQUEsR0FBQXlLLFFBQUEsQ0FBQW5MLENBQUE7VUFBQTtZQUFBLElBQ3JDZ0wsS0FBSyxDQUFDSSxJQUFJLENBQUMsQ0FBQztjQUFBRCxRQUFBLENBQUFuTCxDQUFBO2NBQUE7WUFBQTtZQUNmZ0ksY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNsQkksa0JBQWtCLENBQUMsS0FBSyxDQUFDO1lBQUMsT0FBQStDLFFBQUEsQ0FBQXJLLENBQUE7VUFBQTtZQUk1QjBILFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFBQzJDLFFBQUEsQ0FBQXpLLENBQUE7WUFBQXlLLFFBQUEsQ0FBQW5MLENBQUE7WUFBQSxPQUVRb0csTUFBTSxDQUFDaUYsa0JBQWtCLENBQUMsMEJBQTBCLEVBQUU7Y0FDM0VDLE1BQU0sRUFBRSxLQUFLO2NBQ2JOLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFQSxLQUFLLENBQUM7WUFDdEIsQ0FBQyxDQUFDO1VBQUE7WUFISUMsUUFBUSxHQUFBRSxRQUFBLENBQUF0SyxDQUFBO1lBS2QsSUFBSW9LLFFBQVEsQ0FBQ00sTUFBTSxLQUFLLFNBQVMsRUFBRTtjQUNqQ3ZELGNBQWMsQ0FBQ2lELFFBQVEsQ0FBQ08sT0FBTyxJQUFJLEVBQUUsQ0FBQztjQUN0Q3BELGtCQUFrQixDQUFDLElBQUksQ0FBQztjQUN4QlEsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEI7WUFBQ3VDLFFBQUEsQ0FBQW5MLENBQUE7WUFBQTtVQUFBO1lBQUFtTCxRQUFBLENBQUF6SyxDQUFBO1lBQUF3SyxFQUFBLEdBQUFDLFFBQUEsQ0FBQXRLLENBQUE7WUFFRDRLLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLDRCQUE0QixFQUFBUixFQUFPLENBQUM7WUFDbERsRCxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2xCSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7VUFBQztZQUFBK0MsUUFBQSxDQUFBekssQ0FBQTtZQUUxQjhILFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFBQyxPQUFBMkMsUUFBQSxDQUFBMUssQ0FBQTtVQUFBO1lBQUEsT0FBQTBLLFFBQUEsQ0FBQXJLLENBQUE7UUFBQTtNQUFBLEdBQUFpSyxPQUFBO0lBQUEsQ0FFckI7SUFBQSxPQUFBRCxnQkFBQSxDQUFBbkksS0FBQSxPQUFBRCxTQUFBO0VBQUE7RUFHRCxJQUFNaUosZUFBZSxHQUFHL0csS0FBSyxDQUFDZ0gsT0FBTyxDQUNuQztJQUFBLE9BQU05RyxRQUFRLENBQUM4RixlQUFlLEVBQUUsR0FBRyxDQUFDO0VBQUEsR0FDcEMsRUFDRixDQUFDO0VBRUQsU0FBU2lCLGlCQUFpQkEsQ0FBQ0MsS0FBMEMsRUFBRTtJQUNyRSxJQUFNeEssS0FBSyxHQUFHd0ssS0FBSyxDQUFDQyxNQUFNLENBQUN6SyxLQUFLO0lBQ2hDc0csYUFBYSxDQUFDdEcsS0FBSyxDQUFDO0lBQ3BCcUssZUFBZSxDQUFDckssS0FBSyxDQUFDO0VBQ3hCO0VBQUMsU0FFYzBLLHNCQUFzQkEsQ0FBQUMsR0FBQTtJQUFBLE9BQUFDLHVCQUFBLENBQUF2SixLQUFBLE9BQUFELFNBQUE7RUFBQTtFQUFBLFNBQUF3Six3QkFBQTtJQUFBQSx1QkFBQSxHQUFBekosaUJBQUEsY0FBQTdDLFlBQUEsR0FBQWtDLENBQUEsQ0FBckMsU0FBQXFLLFNBQXNDQyxVQUFzQjtNQUFBLElBQUFuQixRQUFBLEVBQUFvQixhQUFBLEVBQUFDLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsaUJBQUEsRUFBQUMsR0FBQTtNQUFBLE9BQUE3TSxZQUFBLEdBQUFpQyxDQUFBLFdBQUE2SyxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQWhNLENBQUEsR0FBQWdNLFNBQUEsQ0FBQTFNLENBQUE7VUFBQTtZQUMxRHdJLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFBQ2tFLFNBQUEsQ0FBQWhNLENBQUE7WUFBQWdNLFNBQUEsQ0FBQTFNLENBQUE7WUFBQSxPQUdRb0csTUFBTSxDQUFDaUYsa0JBQWtCLENBQUMsMkJBQTJCLEVBQUU7Y0FDNUVDLE1BQU0sRUFBRSxLQUFLO2NBQ2JOLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFb0IsVUFBVSxDQUFDTyxPQUFPLENBQUM7WUFDMUMsQ0FBQyxDQUFDO1VBQUE7WUFISTFCLFFBQVEsR0FBQXlCLFNBQUEsQ0FBQTdMLENBQUE7WUFLZCxJQUFJb0ssUUFBUSxDQUFDTSxNQUFNLEtBQUssU0FBUyxFQUFFO2NBQ2pDO2NBQ01jLGFBQWEsR0FBRy9HLDhCQUE4QixDQUFDMkYsUUFBUSxDQUFDMkIsTUFBTSxDQUFDO2NBRXJFLElBQUlQLGFBQWEsRUFBRTtnQkFDakJ6RSxhQUFhLENBQUN2QyxnQkFBZ0IsQ0FBQ2dILGFBQWEsQ0FBQyxDQUFDO2dCQUM5Q3JGLGFBQWEsQ0FBQ3FGLGFBQWEsQ0FBQztnQkFDNUJyRCxlQUFlLENBQUNxRCxhQUFhLENBQUM7Y0FDaEMsQ0FBQyxNQUFNO2dCQUNMO2dCQUNNQyxlQUFlLEdBQUc7a0JBQ3RCNUIsSUFBSSxFQUFFLEVBQUU7a0JBQ1JtQyxPQUFPLEVBQUUsRUFBRTtrQkFDWHJDLE9BQU8sRUFBRTRCLFVBQVUsQ0FBQ1UsV0FBVztrQkFDL0JDLE9BQU8sRUFBRSxFQUFFO2tCQUNYcEMsUUFBUSxFQUFFLEVBQUU7a0JBQ1pxQyxLQUFLLEVBQUU7Z0JBQ1QsQ0FBQztnQkFDRHBGLGFBQWEsQ0FBQ3dFLFVBQVUsQ0FBQ1UsV0FBVyxDQUFDO2dCQUNyQzlGLGFBQWEsQ0FBQ3NGLGVBQWUsQ0FBQztnQkFDOUJ0RCxlQUFlLENBQUNzRCxlQUFlLENBQUM7Y0FDbEM7WUFDRixDQUFDLE1BQU07Y0FDTDtjQUNNQSxnQkFBZSxHQUFHO2dCQUN0QjVCLElBQUksRUFBRSxFQUFFO2dCQUNSbUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1hyQyxPQUFPLEVBQUU0QixVQUFVLENBQUNVLFdBQVc7Z0JBQy9CQyxPQUFPLEVBQUUsRUFBRTtnQkFDWHBDLFFBQVEsRUFBRSxFQUFFO2dCQUNacUMsS0FBSyxFQUFFO2NBQ1QsQ0FBQztjQUNEcEYsYUFBYSxDQUFDd0UsVUFBVSxDQUFDVSxXQUFXLENBQUM7Y0FDckM5RixhQUFhLENBQUNzRixnQkFBZSxDQUFDO2NBQzlCdEQsZUFBZSxDQUFDc0QsZ0JBQWUsQ0FBQztZQUNsQztZQUFDSSxTQUFBLENBQUExTSxDQUFBO1lBQUE7VUFBQTtZQUFBME0sU0FBQSxDQUFBaE0sQ0FBQTtZQUFBK0wsR0FBQSxHQUFBQyxTQUFBLENBQUE3TCxDQUFBO1lBRUQ0SyxPQUFPLENBQUNDLEtBQUssQ0FBQywrQkFBK0IsRUFBQWUsR0FBTyxDQUFDO1lBQ3JEO1lBQ01ILGlCQUFlLEdBQUc7Y0FDdEI1QixJQUFJLEVBQUUsRUFBRTtjQUNSbUMsT0FBTyxFQUFFLEVBQUU7Y0FDWHJDLE9BQU8sRUFBRTRCLFVBQVUsQ0FBQ1UsV0FBVztjQUMvQkMsT0FBTyxFQUFFLEVBQUU7Y0FDWHBDLFFBQVEsRUFBRSxFQUFFO2NBQ1pxQyxLQUFLLEVBQUU7WUFDVCxDQUFDO1lBQ0RwRixhQUFhLENBQUN3RSxVQUFVLENBQUNVLFdBQVcsQ0FBQztZQUNyQzlGLGFBQWEsQ0FBQ3NGLGlCQUFlLENBQUM7WUFDOUJ0RCxlQUFlLENBQUNzRCxpQkFBZSxDQUFDO1VBQUM7WUFBQUksU0FBQSxDQUFBaE0sQ0FBQTtZQUVqQzhILFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDakJKLGtCQUFrQixDQUFDLEtBQUssQ0FBQztZQUN6QkosY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNsQlksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxPQUFBOEQsU0FBQSxDQUFBak0sQ0FBQTtVQUFBO1lBQUEsT0FBQWlNLFNBQUEsQ0FBQTVMLENBQUE7UUFBQTtNQUFBLEdBQUFxTCxRQUFBO0lBQUEsQ0FFeEI7SUFBQSxPQUFBRCx1QkFBQSxDQUFBdkosS0FBQSxPQUFBRCxTQUFBO0VBQUE7RUFFRCxTQUFTdUssYUFBYUEsQ0FBQ25CLEtBQTRDLEVBQUU7SUFDbkUsSUFBSSxDQUFDM0QsZUFBZSxJQUFJSixXQUFXLENBQUM5RyxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBRWxELFFBQVE2SyxLQUFLLENBQUNvQixHQUFHO01BQ2YsS0FBSyxXQUFXO1FBQ2RwQixLQUFLLENBQUNxQixjQUFjLENBQUMsQ0FBQztRQUN0QnZFLGdCQUFnQixDQUFDLFVBQUF3RSxJQUFJO1VBQUEsT0FDbkJBLElBQUksR0FBR3JGLFdBQVcsQ0FBQzlHLE1BQU0sR0FBRyxDQUFDLEdBQUdtTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFBQSxDQUM5QyxDQUFDO1FBQ0Q7TUFDRixLQUFLLFNBQVM7UUFDWnRCLEtBQUssQ0FBQ3FCLGNBQWMsQ0FBQyxDQUFDO1FBQ3RCdkUsZ0JBQWdCLENBQUMsVUFBQXdFLElBQUk7VUFBQSxPQUNuQkEsSUFBSSxHQUFHLENBQUMsR0FBR0EsSUFBSSxHQUFHLENBQUMsR0FBR3JGLFdBQVcsQ0FBQzlHLE1BQU0sR0FBRyxDQUFDO1FBQUEsQ0FDOUMsQ0FBQztRQUNEO01BQ0YsS0FBSyxPQUFPO1FBQ1Y2SyxLQUFLLENBQUNxQixjQUFjLENBQUMsQ0FBQztRQUN0QixJQUFJeEUsYUFBYSxJQUFJLENBQUMsSUFBSUEsYUFBYSxHQUFHWixXQUFXLENBQUM5RyxNQUFNLEVBQUU7VUFDNUQrSyxzQkFBc0IsQ0FBQ2pFLFdBQVcsQ0FBQ1ksYUFBYSxDQUFDLENBQUM7UUFDcEQ7UUFDQTtNQUNGLEtBQUssUUFBUTtRQUNYUCxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDekJRLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCO0lBQ0o7RUFDRjtFQUVBLFNBQVN5RSxlQUFlQSxDQUFDdkIsS0FBeUMsRUFBRTtJQUNsRTtJQUNBd0IsVUFBVSxDQUFDLFlBQU07TUFBQSxJQUFBQyxxQkFBQTtNQUNmLElBQUksR0FBQUEscUJBQUEsR0FBQ3BFLGNBQWMsQ0FBQ3FFLE9BQU8sY0FBQUQscUJBQUEsZUFBdEJBLHFCQUFBLENBQXdCRSxRQUFRLENBQUNDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLEdBQUU7UUFDN0R2RixrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDekJRLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3RCO0lBQ0YsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUNUO0VBRUEsU0FBU2dGLGdCQUFnQkEsQ0FBQSxFQUFHO0lBQzFCLElBQUk3RixXQUFXLENBQUM5RyxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzFCbUgsa0JBQWtCLENBQUMsSUFBSSxDQUFDO0lBQzFCO0VBQ0Y7RUFFQSxTQUFTeUYsdUJBQXVCQSxDQUFBLEVBQUc7SUFDakMsSUFBSSxFQUFDOUcsa0JBQWtCLGFBQWxCQSxrQkFBa0IsZUFBbEJBLGtCQUFrQixDQUFFeUQsT0FBTyxHQUFFO0lBRWxDLElBQU1DLFdBQVcsR0FBQXJILGFBQUEsS0FBUTJELGtCQUFrQixDQUFFO0lBQzdDYSxhQUFhLENBQUN2QyxnQkFBZ0IsQ0FBQ29GLFdBQVcsQ0FBQyxDQUFDO0lBQzVDekQsYUFBYSxDQUFDeUQsV0FBVyxDQUFDO0lBQzFCekIsZUFBZSxDQUFDeUIsV0FBVyxDQUFDO0lBQzVCckMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQ3pCSixjQUFjLENBQUMsRUFBRSxDQUFDO0VBQ3BCO0VBRUEsSUFBTThGLHNCQUFzQixHQUMxQkMsT0FBTyxDQUFDaEgsa0JBQWtCLGFBQWxCQSxrQkFBa0IsdUJBQWxCQSxrQkFBa0IsQ0FBRXlELE9BQU8sQ0FBQyxJQUFJLEVBQUN6QixZQUFZLGFBQVpBLFlBQVksZ0JBQUF4QyxxQkFBQSxHQUFad0MsWUFBWSxDQUFFeUIsT0FBTyxjQUFBakUscUJBQUEsZUFBckJBLHFCQUFBLENBQXVCNkUsSUFBSSxDQUFDLENBQUM7RUFFeEUsU0FBUzRDLFVBQVVBLENBQUNuTyxDQUFNLEVBQUU7SUFDMUJBLENBQUMsQ0FBQ3NOLGNBQWMsQ0FBQyxDQUFDO0lBQ2xCdkYsYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUNqQkksY0FBYyxDQUFDLEVBQUUsQ0FBQztJQUNsQkksa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQ3pCcEIsYUFBYSxDQUFDO01BQ1owRCxJQUFJLEVBQUUsRUFBRTtNQUNSbUMsT0FBTyxFQUFFLEVBQUU7TUFDWHJDLE9BQU8sRUFBRSxFQUFFO01BQ1h1QyxPQUFPLEVBQUUsRUFBRTtNQUNYcEMsUUFBUSxFQUFFLEVBQUU7TUFDWnFDLEtBQUssRUFBRTtJQUNULENBQUMsQ0FBQztFQUNKO0VBRUEsSUFBTWlCLFNBQVMsR0FBRyxDQUFDLENBQUMzTixNQUFNLENBQUN5QyxJQUFJLENBQUN3RyxNQUFNLENBQUMsQ0FBQ3RJLE1BQU07RUFFOUMsSUFBTWlOLFdBQVcsZ0JBQ2ZqSSxLQUFBLENBQUFFLFNBQUE7SUFBQWdJLFFBQUEsZ0JBQ0VwSSxJQUFBLENBQUNaLFNBQVM7TUFDUmlFLE9BQU8sRUFBRUEsT0FBUTtNQUNqQmdGLEtBQUssRUFBQyxrQkFBa0I7TUFDeEI5SixJQUFJLEVBQUV3RixTQUFTLENBQUMsU0FBUyxDQUFFO01BQzNCaEQsV0FBVyxFQUFDLGFBQWE7TUFDekJ1SCxLQUFLLEVBQUU7UUFBRUMsUUFBUSxFQUFFO01BQWdDO0lBQUUsQ0FDdEQsQ0FBQyxlQUNGdkksSUFBQSxDQUFDWixTQUFTO01BQ1JpRSxPQUFPLEVBQUVBLE9BQVE7TUFDakJnRixLQUFLLEVBQUMsa0JBQWtCO01BQ3hCOUosSUFBSSxFQUFFd0YsU0FBUyxDQUFDLFNBQVMsQ0FBRTtNQUMzQmhELFdBQVcsRUFBQztJQUFxQixDQUNsQyxDQUFDLGVBQ0ZiLEtBQUE7TUFBS3NJLFNBQVMsRUFBRWxILDBCQUEyQjtNQUFBOEcsUUFBQSxnQkFDekNwSSxJQUFBO1FBQUt3SSxTQUFTLEVBQUVqSCxnQ0FBaUM7UUFBQTZHLFFBQUEsZUFDL0NwSSxJQUFBLENBQUNaLFNBQVM7VUFDUmlFLE9BQU8sRUFBRUEsT0FBUTtVQUNqQmdGLEtBQUssRUFBQyxpQkFBaUI7VUFDdkI5SixJQUFJLEVBQUV3RixTQUFTLENBQUMsTUFBTSxDQUFFO1VBQ3hCaEQsV0FBVyxFQUFDLE1BQU07VUFDbEJ1SCxLQUFLLEVBQUU7WUFBRUMsUUFBUSxFQUFFO1VBQStCO1FBQUUsQ0FDckQ7TUFBQyxDQUNDLENBQUMsZUFDTnZJLElBQUE7UUFBS3dJLFNBQVMsRUFBRWpILGdDQUFpQztRQUFBNkcsUUFBQSxlQUMvQ3BJLElBQUEsQ0FBQ1osU0FBUztVQUNSaUUsT0FBTyxFQUFFQSxPQUFRO1VBQ2pCZ0YsS0FBSyxFQUFDLGlCQUFpQjtVQUN2QjlKLElBQUksRUFBRXdGLFNBQVMsQ0FBQyxVQUFVLENBQUU7VUFDNUJoRCxXQUFXLEVBQUM7UUFBTyxDQUNwQjtNQUFDLENBQ0MsQ0FBQztJQUFBLENBQ0gsQ0FBQyxlQUNOYixLQUFBO01BQUtzSSxTQUFTLEVBQUVsSCwwQkFBMkI7TUFBQThHLFFBQUEsZ0JBQ3pDcEksSUFBQTtRQUFLd0ksU0FBUyxFQUFFakgsZ0NBQWlDO1FBQUE2RyxRQUFBLGVBQy9DbEksS0FBQTtVQUFLc0ksU0FBUyxFQUFFckgsZ0NBQWlDO1VBQUFpSCxRQUFBLGdCQUMvQ3BJLElBQUE7WUFBQW9JLFFBQUEsRUFBTztVQUFPLENBQU8sQ0FBQyxlQUN0QnBJLElBQUEsQ0FBQ2IsVUFBVTtZQUNUWixJQUFJLEVBQUV3RixTQUFTLENBQUMsU0FBUyxDQUFFO1lBQzNCVixPQUFPLEVBQUVBLE9BQVE7WUFDakJvRixZQUFZLEVBQUUvSCxjQUFjLElBQUlBLGNBQWMsQ0FBQ29HLE9BQVE7WUFDdkQ0QixNQUFNLEVBQUUsU0FBUkEsTUFBTUEsQ0FBQUMsS0FBQTtjQUFBLElBQUtDLEtBQUssR0FBQUQsS0FBQSxDQUFMQyxLQUFLO2NBQUEsb0JBQ2Q1SSxJQUFBLENBQUNmLGVBQWUsRUFBQTVCLGFBQUEsQ0FBQUEsYUFBQSxLQUNWdUwsS0FBSztnQkFDVEMsT0FBTyxFQUFFeEgsaUNBQWtDO2dCQUMzQ3lILFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHQyxHQUFHLEVBQUs7a0JBQ2pCcEYsUUFBUSxDQUFDSSxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUVnRixHQUFHLENBQUM7a0JBQ25DO2tCQUNBcEYsUUFBUSxDQUFDSSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDO2tCQUNoQzZFLEtBQUssQ0FBQ0UsUUFBUSxDQUFDQyxHQUFHLENBQUM7a0JBQ25CNUUsb0JBQW9CLENBQUMsQ0FBQztnQkFDeEIsQ0FBRTtnQkFDRjZFLFNBQVMsRUFBQztjQUFPLEVBQ2xCLENBQUM7WUFBQTtVQUNGLENBQ0gsQ0FBQztRQUFBLENBQ0M7TUFBQyxDQUNILENBQUMsZUFDTmhKLElBQUE7UUFBS3dJLFNBQVMsRUFBRWpILGdDQUFpQztRQUFBNkcsUUFBQSxlQUMvQ2xJLEtBQUE7VUFBS3NJLFNBQVMsRUFBRXJILGdDQUFpQztVQUFBaUgsUUFBQSxnQkFDL0NwSSxJQUFBO1lBQUFvSSxRQUFBLEVBQU87VUFBYyxDQUFPLENBQUMsZUFDN0JwSSxJQUFBLENBQUNiLFVBQVU7WUFDVFosSUFBSSxFQUFFd0YsU0FBUyxDQUFDLE9BQU8sQ0FBRTtZQUN6QlYsT0FBTyxFQUFFQSxPQUFRO1lBQ2pCb0YsWUFBWSxFQUFFL0gsY0FBYyxJQUFJQSxjQUFjLENBQUN1RyxLQUFNO1lBQ3JEeUIsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUFPLEtBQUE7Y0FBQSxJQUFLTCxLQUFLLEdBQUFLLEtBQUEsQ0FBTEwsS0FBSztjQUFBLG9CQUNkNUksSUFBQSxDQUFDZCxjQUFjLEVBQUE3QixhQUFBLENBQUFBLGFBQUEsS0FDVHVMLEtBQUs7Z0JBQ1RNLGdCQUFnQixFQUFDLE9BQU87Z0JBQ3hCcEMsT0FBTyxFQUFFNUMsZUFBZ0I7Z0JBQ3pCMkUsT0FBTyxFQUFFeEgsaUNBQWtDO2dCQUMzQ3lILFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHQyxHQUFHLEVBQUs7a0JBQ2pCcEYsUUFBUSxDQUFDSSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUVnRixHQUFHLENBQUM7a0JBQ2pDSCxLQUFLLENBQUNFLFFBQVEsQ0FBQ0MsR0FBRyxDQUFDO2tCQUNuQjVFLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3hCLENBQUU7Z0JBQ0Y2RSxTQUFTLEVBQUM7Y0FBTyxFQUNsQixDQUFDO1lBQUE7VUFDRixDQUNILENBQUM7UUFBQSxDQUNDO01BQUMsQ0FDSCxDQUFDO0lBQUEsQ0FDSCxDQUFDO0VBQUEsQ0FDTixDQUNIO0VBQ0Qsb0JBQ0U5SSxLQUFBLENBQUFFLFNBQUE7SUFBQWdJLFFBQUEsZ0JBQ0VsSSxLQUFBO01BQUtzSSxTQUFTLEVBQUVySCxnQ0FBaUM7TUFBQWlILFFBQUEsZ0JBQy9DcEksSUFBQTtRQUFBb0ksUUFBQSxFQUFReEg7TUFBZSxDQUFRLENBQUMsRUFDL0JtSCxzQkFBc0IsaUJBQ3JCL0gsSUFBQTtRQUFLd0ksU0FBUyxFQUFDLHdDQUF3QztRQUFBSixRQUFBLGVBQ3JEbEksS0FBQTtVQUNFaUosSUFBSSxFQUFDLFFBQVE7VUFDYlgsU0FBUyxFQUFDLDRDQUE0QztVQUN0RFksT0FBTyxFQUFFdEIsdUJBQXdCO1VBQUFNLFFBQUEsZ0JBRWpDcEksSUFBQTtZQUFNd0ksU0FBUyxFQUFDLDhDQUE4QztZQUFBSixRQUFBLEVBQUM7VUFFL0QsQ0FBTSxDQUFDLGVBQ1BwSSxJQUFBO1lBQU13SSxTQUFTLEVBQUMsOENBQThDO1lBQUFKLFFBQUEsRUFDM0Q5SSxnQkFBZ0IsQ0FBQzBCLGtCQUFrQjtVQUFDLENBQ2pDLENBQUM7UUFBQSxDQUNEO01BQUMsQ0FDTixDQUNOLGVBQ0RkLEtBQUE7UUFBS3NJLFNBQVMsRUFBQyxtQkFBbUI7UUFBQ2EsS0FBSyxFQUFFO1VBQUVDLFFBQVEsRUFBRTtRQUFXLENBQUU7UUFBQWxCLFFBQUEsZ0JBQ2pFcEksSUFBQTtVQUNFdUosWUFBWSxFQUFDLGNBQWM7VUFDM0JDLEdBQUcsRUFBRXRHLFFBQVM7VUFDZGlHLElBQUksRUFBQyxNQUFNO1VBQ1g1SyxJQUFJLEVBQUMsb0JBQW9CO1VBQ3pCaUssU0FBUyxFQUFFcEgsZ0NBQWlDO1VBQzVDTCxXQUFXLEVBQUVBLFdBQVk7VUFDekJ4RixLQUFLLEVBQUVxRyxVQUFXO1VBQ2xCa0gsUUFBUSxFQUFFaEQsaUJBQWtCO1VBQzVCMkQsU0FBUyxFQUFFdkMsYUFBYztVQUN6QndDLE1BQU0sRUFBRXBDLGVBQWdCO1VBQ3hCcUMsT0FBTyxFQUFFOUIsZ0JBQWlCO1VBQzFCd0IsS0FBSyxFQUFFO1lBQUVPLFlBQVksRUFBRXBILE9BQU8sR0FBRyxNQUFNLEdBQUc7VUFBTztRQUFFLENBQ3BELENBQUMsRUFDREEsT0FBTyxpQkFDTnhDLElBQUE7VUFDRXdJLFNBQVMsRUFBQyxtQkFBbUI7VUFDN0JhLEtBQUssRUFBRTtZQUNMQyxRQUFRLEVBQUUsVUFBVTtZQUNwQk8sS0FBSyxFQUFFLE1BQU07WUFDYkMsR0FBRyxFQUFFLEtBQUs7WUFDVkMsU0FBUyxFQUFFO1VBQ2IsQ0FBRTtVQUFBM0IsUUFBQSxlQUVGcEksSUFBQSxDQUFDUixlQUFlO1lBQUN3SyxJQUFJLEVBQUV2SyxTQUFVO1lBQUN3SyxJQUFJO1VBQUEsQ0FBRTtRQUFDLENBQ3RDLENBQ04sRUFDQXJJLFVBQVUsSUFBSSxDQUFDWSxPQUFPLGlCQUNyQnhDLElBQUE7VUFDRW1KLElBQUksRUFBQyxRQUFRO1VBQ2JYLFNBQVMsRUFBQyw4QkFBOEI7VUFDeENhLEtBQUssRUFBRTtZQUNMUSxLQUFLLEVBQUUsS0FBSztZQUNaQyxHQUFHLEVBQUUsS0FBSztZQUNWQyxTQUFTLEVBQUUsa0JBQWtCO1lBQzdCRyxNQUFNLEVBQUUsTUFBTTtZQUNkQyxVQUFVLEVBQUUsYUFBYTtZQUN6QkMsT0FBTyxFQUFFLFNBQVM7WUFDbEJkLFFBQVEsRUFBRTtVQUNaLENBQUU7VUFDRkYsT0FBTyxFQUFFbkIsVUFBVztVQUFBRyxRQUFBLGVBRXBCcEksSUFBQSxDQUFDUixlQUFlO1lBQUN3SyxJQUFJLEVBQUV0SztVQUFRLENBQUU7UUFBQyxDQUM1QixDQUNULEVBQ0EwQyxlQUFlLElBQUlKLFdBQVcsQ0FBQzlHLE1BQU0sR0FBRyxDQUFDLGlCQUN4QzhFLElBQUE7VUFDRXdKLEdBQUcsRUFBRXBHLGNBQWU7VUFDcEJvRixTQUFTLEVBQUVoSCx3Q0FBeUM7VUFDcEQ2SSxJQUFJLEVBQUMsU0FBUztVQUFBakMsUUFBQSxFQUVicEcsV0FBVyxDQUFDc0ksR0FBRyxDQUFDLFVBQUNqRSxVQUFVLEVBQUVrRSxLQUFLO1lBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7WUFBQSxvQkFDakN2SyxLQUFBO2NBRUVzSSxTQUFTLEtBQUF2RSxNQUFBLENBQUt4Qyw0Q0FBNEMsT0FBQXdDLE1BQUEsQ0FBSXNHLEtBQUssS0FBSzNILGFBQWEsR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFHO2NBQ3hHeUgsSUFBSSxFQUFDLFFBQVE7Y0FDYkssV0FBVyxFQUFFLFNBQWJBLFdBQVdBLENBQUc1USxDQUFtQixFQUFLO2dCQUNwQ0EsQ0FBQyxDQUFDc04sY0FBYyxDQUFDLENBQUM7Z0JBQ2xCbkIsc0JBQXNCLENBQUNJLFVBQVUsQ0FBQztjQUNwQyxDQUFFO2NBQ0ZzRSxZQUFZLEVBQUUsU0FBZEEsWUFBWUEsQ0FBQTtnQkFBQSxPQUFROUgsZ0JBQWdCLENBQUMwSCxLQUFLLENBQUM7Y0FBQSxDQUFDO2NBQUFuQyxRQUFBLGdCQUU1Q3BJLElBQUE7Z0JBQUFvSSxRQUFBLEVBQ0csRUFBQW9DLHFCQUFBLEdBQUFuRSxVQUFVLENBQUN1RSxvQkFBb0IsY0FBQUoscUJBQUEsdUJBQS9CQSxxQkFBQSxDQUFpQ0ssU0FBUyxLQUFJeEUsVUFBVSxDQUFDVTtjQUFXLENBQy9ELENBQUMsRUFDUixFQUFBMEQsc0JBQUEsR0FBQXBFLFVBQVUsQ0FBQ3VFLG9CQUFvQixjQUFBSCxzQkFBQSx1QkFBL0JBLHNCQUFBLENBQWlDSyxjQUFjLGtCQUM5QzlLLElBQUE7Z0JBQUt3SSxTQUFTLEVBQUMsa0JBQWtCO2dCQUFBSixRQUFBLEVBQzlCL0IsVUFBVSxDQUFDdUUsb0JBQW9CLENBQUNFO2NBQWMsQ0FDNUMsQ0FDTjtZQUFBLEdBaEJJekUsVUFBVSxDQUFDTyxPQWlCYixDQUFDO1VBQUEsQ0FDUDtRQUFDLENBQ0MsQ0FDTjtNQUFBLENBQ0UsQ0FBQztJQUFBLENBQ0gsQ0FBQyxlQUNONUcsSUFBQSxDQUFDRixRQUFRO01BQUNpTCxNQUFNLEVBQUV6RyxpQkFBa0I7TUFBQThELFFBQUEsRUFDakNEO0lBQVcsQ0FDSixDQUFDLGVBQ1hqSSxLQUFBO01BQUtzSSxTQUFTLEVBQUMsMkJBQTJCO01BQUFKLFFBQUEsR0FDdkNGLFNBQVMsaUJBQ1JoSSxLQUFBO1FBQUtzSSxTQUFTLEVBQUMsYUFBYTtRQUFBSixRQUFBLGdCQUMxQnBJLElBQUEsQ0FBQ1IsZUFBZTtVQUFDd0ssSUFBSSxFQUFFcEs7UUFBc0IsQ0FBRSxDQUFDLHFCQUNsRDtNQUFBLENBQUssQ0FBQyxlQUNSTSxLQUFBO1FBQ0VzSSxTQUFTLGlDQUFBdkUsTUFBQSxDQUFpQ2lFLFNBQVMsSUFBSSxhQUFhLENBQUc7UUFDdkVrQixPQUFPLEVBQUU1RSx1QkFBd0I7UUFBQTRELFFBQUEsZ0JBRWpDcEksSUFBQSxDQUFDUixlQUFlO1VBQ2R3SyxJQUFJLEVBQUUxRixpQkFBaUIsR0FBRzVFLE9BQU8sR0FBR0M7UUFBTyxDQUM1QyxDQUFDLEtBQUMsRUFBQzJFLGlCQUFpQixHQUFHLE9BQU8sR0FBRyxhQUFhO01BQUEsQ0FDOUMsQ0FBQztJQUFBLENBQ0QsQ0FBQztFQUFBLENBQ04sQ0FBQztBQUVQO0FBRUEsZUFBZWhFLGFBQWEiLCJpZ25vcmVMaXN0IjpbXX0=
|