aem-core-components-contributions-react-core
Version:
AEM - React Wrapper components - for the OOTB AEM Core Components
2 lines • 43.5 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.cqCoreComponents=t():e.cqCoreComponents=t()}("undefined"!=typeof self?self:this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(r,s,function(t){return e[t]}.bind(null,s));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=27)}({0:function(e,t){e.exports=require("react")},1:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(0),s=n.n(r);class i extends r.Component{render(){const e=(null!=this.props.componentTitle&&this.props.componentTitle.length>0?this.props.componentTitle+" - ":"")+(null!=this.props.emptyTextAppend?this.props.emptyTextAppend:i.DEFAULT_EMPTY_TEXT_LABEL);return this.renderPlaceHolder(e)}renderPlaceHolder(e){return s.a.createElement("div",{className:"cq-placeholder"+(null!=this.props.classAppend?" "+this.props.classAppend:"")},e)}}i.DEFAULT_EMPTY_TEXT_LABEL="Please configure the component";class a extends s.a.Component{constructor(e,t,n){super(e),this.baseCssCls=t,this.emptyPlaceHolderText=n}__hidePlaceHolder(){return this.props.hidePlaceHolder}__renderPlaceHolder(e,t){return s.a.createElement(i,{emptyTextAppend:t,componentTitle:e})}render(){const e=this.isEmpty();return s.a.createElement(s.a.Fragment,null,!e&&this.renderComponent(),e&&this.props.isInEditor&&!this.__hidePlaceHolder()&&this.__renderPlaceHolder(this.emptyPlaceHolderText))}}a.defaultProps={hidePlaceHolder:!1,isInEditor:!1}},15:function(e,t,n){"use strict";n.r(t),n.d(t,"LanguageNavigationV1IsEmptyFn",(function(){return l})),n.d(t,"LanguageNavigationV1",(function(){return c}));var r=n(0),s=n.n(r),i=n(7),a=n(2),o=n(3);function l(e){return null==e.items||0===e.items.length}class c extends i.NavigationV1{constructor(e){super(e),this.baseCssCls="cmp-languagenavigation",this.emptyPlaceHolderText="LanguageNavigationV1",this.navChildren=e.items}renderLink(e,t){return e.level>0?s.a.createElement(a.a,{isRouted:Object(o.a)(this.props,e),className:this.baseCssCls+"__item-link",to:e.url,hrefLang:e.language,lang:e.language,rel:"alternate",title:e.title},e.title):s.a.createElement("span",{className:this.baseCssCls+"__item-title",lang:e.language},e.title)}getExtraNavItemCssClss(e,t){return`${this.baseCssCls}__item--countrycode-${e.country} ${this.baseCssCls}__item--langcode-${e.language}`}}c.defaultProps={isInEditor:!1,hidePlaceHolder:!1,items:[]}},2:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(0),s=n.n(r),i=n(4);const a=e=>{const{to:t,isRouted:n,...r}=e;if(void 0===t)return s.a.createElement("a",Object.assign({href:"#"},e));return/^https?:\/\//.test(t)||!n?s.a.createElement("a",Object.assign({href:t},e)):s.a.createElement(i.Link,Object.assign({},r,{to:t}))}},27:function(e,t,n){e.exports=n(15)},3:function(e,t,n){"use strict";function r(e,t){return!0===e.routed&&!1!==t.routed||!0===t.routed}n.d(t,"a",(function(){return r}))},4:function(e,t){e.exports=require("react-router-dom")},7:function(e,t,n){"use strict";n.r(t),n.d(t,"NavigationV1IsEmptyFn",(function(){return l})),n.d(t,"NavigationV1",(function(){return c}));var r=n(0),s=n.n(r),i=n(1),a=n(3),o=n(2);function l(e){return null==e.items||0===e.items.length}class c extends i.a{constructor(e){super(e,"cmp-navigation","NavigationV1")}isEmpty(){return l(this.props)}determineIsActive(e){return e.active}renderComponent(){const e={active:!1,lastModified:0,level:0,path:"",title:"",url:"",children:this.props.items};return s.a.createElement("nav",{className:this.baseCssCls,role:"navigation",itemScope:!0,itemType:"http://schema.org/SiteNavigationElement","aria-label":this.props.accessibilityLabel},this.renderGroup(e))}renderGroup(e){return s.a.createElement(s.a.Fragment,null,!!e.children&&e.children.length>0&&s.a.createElement("ul",{className:this.baseCssCls+"__group"},e.children.map((e,t)=>this.renderNavItem(e,t))))}renderLink(e,t){return s.a.createElement(o.a,{isRouted:Object(a.a)(this.props,e),to:e.url,title:e.title,"aria-current":t&&"page",className:this.baseCssCls+"__item-link"},e.title)}renderNavItem(e,t){const n=this.determineIsActive(e),r=this.baseCssCls+"__item "+this.baseCssCls+"__item--level-"+e.level+" "+this.getExtraNavItemCssClss(e,t)+(n?" "+this.baseCssCls+"__item--active":"");return s.a.createElement("li",{key:this.baseCssCls+"__item-"+t,className:r},this.renderLink(e,n),!!e.children&&e.children.length>0&&this.renderGroup(e))}getExtraNavItemCssClss(e,t){return""}}c.defaultProps={isInEditor:!1,hidePlaceHolder:!1,items:[]}}})}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcUNvcmVDb21wb25lbnRzL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9jcUNvcmVDb21wb25lbnRzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2NxQ29yZUNvbXBvbmVudHMvZXh0ZXJuYWwgXCJyZWFjdFwiIiwid2VicGFjazovL2NxQ29yZUNvbXBvbmVudHMvLi9zcmMvY29tbW9uL3BsYWNlaG9sZGVyLnRzeCIsIndlYnBhY2s6Ly9jcUNvcmVDb21wb25lbnRzLy4vc3JjL0Fic3RyYWN0Q29yZUNvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vY3FDb3JlQ29tcG9uZW50cy8uL3NyYy9sYXlvdXQvbGFuZ3VhZ2UtbmF2aWdhdGlvbi92MS9MYW5ndWFnZU5hdmlnYXRpb25WMS50c3giLCJ3ZWJwYWNrOi8vY3FDb3JlQ29tcG9uZW50cy8uL3NyYy9yb3V0aW5nL1JvdXRlZExpbmsudHN4Iiwid2VicGFjazovL2NxQ29yZUNvbXBvbmVudHMvLi9zcmMvcm91dGluZy9Sb3V0ZWRDb3JlQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly9jcUNvcmVDb21wb25lbnRzL2V4dGVybmFsIFwicmVhY3Qtcm91dGVyLWRvbVwiIiwid2VicGFjazovL2NxQ29yZUNvbXBvbmVudHMvLi9zcmMvbGF5b3V0L25hdmlnYXRpb24vdjEvTmF2aWdhdGlvblYxLnRzeCJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwidGhpcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJyZXF1aXJlIiwiZW1wdHlUZXh0IiwicHJvcHMiLCJjb21wb25lbnRUaXRsZSIsImxlbmd0aCIsImVtcHR5VGV4dEFwcGVuZCIsIkRFRkFVTFRfRU1QVFlfVEVYVF9MQUJFTCIsInJlbmRlclBsYWNlSG9sZGVyIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImNsYXNzQXBwZW5kIiwiQ29tcG9uZW50IiwiYmFzZUNzc0NscyIsImVtcHR5UGxhY2VIb2xkZXJUZXh0Iiwic3VwZXIiLCJoaWRlUGxhY2VIb2xkZXIiLCJ0aXRsZSIsImlzRW1wdHkiLCJGcmFnbWVudCIsInJlbmRlckNvbXBvbmVudCIsImlzSW5FZGl0b3IiLCJfX2hpZGVQbGFjZUhvbGRlciIsIl9fcmVuZGVyUGxhY2VIb2xkZXIiLCJkZWZhdWx0UHJvcHMiLCJMYW5ndWFnZU5hdmlnYXRpb25WMUlzRW1wdHlGbiIsIml0ZW1zIiwiTGFuZ3VhZ2VOYXZpZ2F0aW9uVjEiLCJuYXZDaGlsZHJlbiIsIml0ZW0iLCJpc0FjdGl2ZSIsImxldmVsIiwiaXNSb3V0ZWQiLCJ0byIsInVybCIsImhyZWZMYW5nIiwibGFuZ3VhZ2UiLCJsYW5nIiwicmVsIiwiaW5kZXgiLCJjb3VudHJ5IiwiUm91dGVkTGluayIsIm90aGVyUHJvcHMiLCJ1bmRlZmluZWQiLCJhc3NpZ24iLCJocmVmIiwidGVzdCIsImlzSXRlbVJvdXRlZCIsInNlbGZQcm9wcyIsInJvdXRlZCIsIk5hdmlnYXRpb25WMUlzRW1wdHlGbiIsIk5hdmlnYXRpb25WMSIsImFjdGl2ZSIsInNlbGZDbG9uZSIsImxhc3RNb2RpZmllZCIsInBhdGgiLCJjaGlsZHJlbiIsInJvbGUiLCJpdGVtU2NvcGUiLCJpdGVtVHlwZSIsImFjY2Vzc2liaWxpdHlMYWJlbCIsInJlbmRlckdyb3VwIiwibWFwIiwicmVuZGVyTmF2SXRlbSIsImRldGVybWluZUlzQWN0aXZlIiwiY3NzQ2xhc3MiLCJnZXRFeHRyYU5hdkl0ZW1Dc3NDbHNzIiwicmVuZGVyTGluayJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELElBQ1EsbUJBQVhHLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxHQUFJSCxHQUNlLGlCQUFaQyxRQUNkQSxRQUEwQixpQkFBSUQsSUFFOUJELEVBQXVCLGlCQUFJQyxJQVI3QixDQVNtQixvQkFBVEssS0FBdUJBLEtBQU9DLE1BQU0sV0FDOUMsTyxZQ1RFLElBQUlDLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVSLFFBR25DLElBQUlDLEVBQVNLLEVBQWlCRSxHQUFZLENBQ3pDQyxFQUFHRCxFQUNIRSxHQUFHLEVBQ0hWLFFBQVMsSUFVVixPQU5BVyxFQUFRSCxHQUFVSSxLQUFLWCxFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTTyxHQUcvRE4sRUFBT1MsR0FBSSxFQUdKVCxFQUFPRCxRQTBEZixPQXJEQU8sRUFBb0JNLEVBQUlGLEVBR3hCSixFQUFvQk8sRUFBSVIsRUFHeEJDLEVBQW9CUSxFQUFJLFNBQVNmLEVBQVNnQixFQUFNQyxHQUMzQ1YsRUFBb0JXLEVBQUVsQixFQUFTZ0IsSUFDbENHLE9BQU9DLGVBQWVwQixFQUFTZ0IsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFVixFQUFvQmdCLEVBQUksU0FBU3ZCLEdBQ1gsb0JBQVh3QixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWVwQixFQUFTd0IsT0FBT0MsWUFBYSxDQUFFQyxNQUFPLFdBRTdEUCxPQUFPQyxlQUFlcEIsRUFBUyxhQUFjLENBQUUwQixPQUFPLEtBUXZEbkIsRUFBb0JvQixFQUFJLFNBQVNELEVBQU9FLEdBRXZD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QUtzRyxXQUFXdEMsRUFBTUMsS0FDcEJELEVBQUsyQixVQUFZM0IsRUFBSzJCLFNBQVNuRCxPQUFTLEdBQUt4QyxLQUFLZ0csWUFBWWhDLElBRXhFLHVCQUF1QkEsRUFBTVUsR0FDekIsTUFBTyxJQUdmWSxFQUFhM0IsYUFBZSxDQUN4QkgsWUFBWSxFQUNaTCxpQkFBaUIsRUFDakJVLE1BQU8iLCJmaWxlIjoiTGFuZ3VhZ2VOYXZpZ2F0aW9uVjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJjcUNvcmVDb21wb25lbnRzXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImNxQ29yZUNvbXBvbmVudHNcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDI3KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMjAgQWRvYmVcbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgY2xhc3MgRWRpdG9yUGxhY2VIb2xkZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgcGFydDEgPSAodGhpcy5wcm9wcy5jb21wb25lbnRUaXRsZSAhPSBudWxsICYmIHRoaXMucHJvcHMuY29tcG9uZW50VGl0bGUubGVuZ3RoID4gMCkgPyB0aGlzLnByb3BzLmNvbXBvbmVudFRpdGxlICsgJyAtICcgOiAnJztcbiAgICAgICAgY29uc3QgcGFydDIgPSAodGhpcy5wcm9wcy5lbXB0eVRleHRBcHBlbmQgIT0gbnVsbCkgPyB0aGlzLnByb3BzLmVtcHR5VGV4dEFwcGVuZCA6IEVkaXRvclBsYWNlSG9sZGVyLkRFRkFVTFRfRU1QVFlfVEVYVF9MQUJFTDtcbiAgICAgICAgY29uc3QgZW1wdHlUZXh0ID0gcGFydDEgKyBwYXJ0MjtcbiAgICAgICAgcmV0dXJuICh0aGlzLnJlbmRlclBsYWNlSG9sZGVyKGVtcHR5VGV4dCkpO1xuICAgIH1cbiAgICByZW5kZXJQbGFjZUhvbGRlcihlbXB0eVRleHQpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdjcS1wbGFjZWhvbGRlcicgKyAodGhpcy5wcm9wcy5jbGFzc0FwcGVuZCAhPSBudWxsID8gJyAnICsgdGhpcy5wcm9wcy5jbGFzc0FwcGVuZCA6ICcnKSB9LCBlbXB0eVRleHQpO1xuICAgIH1cbn1cbkVkaXRvclBsYWNlSG9sZGVyLkRFRkFVTFRfRU1QVFlfVEVYVF9MQUJFTCA9ICdQbGVhc2UgY29uZmlndXJlIHRoZSBjb21wb25lbnQnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY0d4aFkyVm9iMnhrWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUp3YkdGalpXaHZiR1JsY2k1MGMzZ2lYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRMEU3T3pzN096czdPenM3T3pzN08wZEJZMGM3UVVGRFNDeFBRVUZQTEV0QlFVc3NSVUZCUlN4RlFVRkRMRk5CUVZNc1JVRkJReXhOUVVGTkxFOUJRVThzUTBGQlF6dEJRVkYyUXl4TlFVRk5MRTlCUVU4c2FVSkJRV3RDTEZOQlFWRXNVMEZCWjBNN1NVRkpia1VzVFVGQlRUdFJRVU5HTEUxQlFVMHNTMEZCU3l4SFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eGpRVUZqTEVsQlFVa3NTVUZCU1N4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zWTBGQll5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4alFVRmpMRWRCUVVrc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdVVUZETjBrc1RVRkJUU3hMUVVGTExFZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eERRVUZETEdsQ1FVRnBRaXhEUVVGRExIZENRVUYzUWl4RFFVRkRPMUZCUTNSSkxFMUJRVTBzVTBGQlV5eEhRVUZITEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkZhRU1zVDBGQlR5eERRVU5JTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZEY0VNc1EwRkJRVHRKUVVOTUxFTkJRVU03U1VGSFJDeHBRa0ZCYVVJc1EwRkJReXhUUVVGcFFqdFJRVU12UWl4UFFVRlBMRFpDUVVOSUxGTkJRVk1zUlVGQlJTeG5Ra0ZCWjBJc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4SlFVRkpMRWxCUVVrc1EwRkJRU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZEYUVjc1UwRkJVeXhEUVVOU0xFTkJRVU03U1VGRFdDeERRVUZET3p0QlFXeENUU3d3UTBGQmQwSXNSMEZCVnl4blEwRkJaME1zUTBGQlF5SjkiLCIvKlxuICogIENvcHlyaWdodCAyMDIwIEFkb2JlXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFZGl0b3JQbGFjZUhvbGRlciB9IGZyb20gXCIuL2NvbW1vbi9wbGFjZWhvbGRlclwiO1xuLyoqXG4gKiBBYnN0cmFjdENvcmVDb21wb25lbnQgLSBwcm92aWRlcyBhYnN0cmFjdGlvbiBhbmQgaGVscGVyIG1ldGhvZHMgdG8gc2hvdyBhIHBsYWNlaG9sZGVyIGlmIHRoZSBjb21wb25lbnQgaXMgZW1wdHkgYW5kIGF1dGhvciBtb2RlIGlzIG9uLlxuICovXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RDb3JlQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiBCYXNlIENvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHByb3BzIGNvbXBvbmVudCBwcm9wZXJ0aWVzXG4gICAgICogQHBhcmFtIGJhc2VDc3NDbHMgdGhlIGJhc2UgQkVNIGNzcyBjbGFzcyB0byBiZSB1c2VkIGZvciB0aGUgY29tcG9uZW50XG4gICAgICogQHBhcmFtIGVtcHR5UGxhY2VIb2xkZXJUZXh0IGVtcHR5IHBsYWNlaG9sZGVyIGxhYmVsIGZvciB3aGVuIHRoZSBjb21wb25lbnQgbmVlZHMgdG8gYmUgY29uZmlndXJlZCBpbiBhdXRob3IgbW9kZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByb3BzLCBiYXNlQ3NzQ2xzLCBlbXB0eVBsYWNlSG9sZGVyVGV4dCkge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuYmFzZUNzc0NscyA9IGJhc2VDc3NDbHM7XG4gICAgICAgIHRoaXMuZW1wdHlQbGFjZUhvbGRlclRleHQgPSBlbXB0eVBsYWNlSG9sZGVyVGV4dDtcbiAgICB9XG4gICAgX19oaWRlUGxhY2VIb2xkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmhpZGVQbGFjZUhvbGRlcjtcbiAgICB9XG4gICAgX19yZW5kZXJQbGFjZUhvbGRlcih0aXRsZSwgZW1wdHlUZXh0KSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChFZGl0b3JQbGFjZUhvbGRlciwgeyBlbXB0eVRleHRBcHBlbmQ6IGVtcHR5VGV4dCwgY29tcG9uZW50VGl0bGU6IHRpdGxlIH0pKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBpc0VtcHR5ID0gdGhpcy5pc0VtcHR5KCk7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgICFpc0VtcHR5ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnQoKSxcbiAgICAgICAgICAgIChpc0VtcHR5ICYmIHRoaXMucHJvcHMuaXNJbkVkaXRvciAmJiAhdGhpcy5fX2hpZGVQbGFjZUhvbGRlcigpKSAmJiB0aGlzLl9fcmVuZGVyUGxhY2VIb2xkZXIodGhpcy5lbXB0eVBsYWNlSG9sZGVyVGV4dCkpKTtcbiAgICB9XG59XG5BYnN0cmFjdENvcmVDb21wb25lbnQuZGVmYXVsdFByb3BzID0ge1xuICAgIGhpZGVQbGFjZUhvbGRlcjogZmFsc2UsXG4gICAgaXNJbkVkaXRvcjogZmFsc2Vcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lRV0p6ZEhKaFkzUkRiM0psUTI5dGNHOXVaVzUwTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lRV0p6ZEhKaFkzUkRiM0psUTI5dGNHOXVaVzUwTG5SemVDSmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRVHM3T3pzN096czdPenM3T3pzN1IwRmpSenRCUVVWSUxFOUJRVThzUzBGQlN5eE5RVUZOTEU5QlFVOHNRMEZCUXp0QlFVTXhRaXhQUVVGUExFVkJRVU1zYVVKQlFXbENMRVZCUVVNc1RVRkJUU3h6UWtGQmMwSXNRMEZCUXp0QlFWbDJSRHM3UjBGRlJ6dEJRVU5JTEUxQlFVMHNUMEZCWjBJc2NVSkJRVEJHTEZOQlFWRXNTMEZCU3l4RFFVRkRMRk5CUVhOQ08wbEJWV2hLT3pzN096dFBRVXRITzBsQlEwZ3NXVUZCYzBJc1MwRkJWeXhGUVVGRExGVkJRV2xDTEVWQlFVTXNiMEpCUVRKQ08xRkJRek5GTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVOaUxFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NWVUZCVlN4RFFVRkRPMUZCUXpkQ0xFbEJRVWtzUTBGQlF5eHZRa0ZCYjBJc1IwRkJSeXh2UWtGQmIwSXNRMEZCUXp0SlFVTnlSQ3hEUVVGRE8wbEJXVThzYVVKQlFXbENPMUZCUTNKQ0xFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNN1NVRkRkRU1zUTBGQlF6dEpRVVZQTEcxQ1FVRnRRaXhEUVVGRExFdEJRV0VzUlVGQlJTeFRRVUZwUWp0UlFVTjRSQ3hQUVVGTkxFTkJRMFlzYjBKQlFVTXNhVUpCUVdsQ0xFbEJRMlFzWlVGQlpTeEZRVUZGTEZOQlFWTXNSVUZETVVJc1kwRkJZeXhGUVVGRkxFdEJRVXNzUjBGRGRrSXNRMEZEVEN4RFFVRkJPMGxCUTB3c1EwRkJRenRKUVVWRUxFMUJRVTA3VVVGRFJpeE5RVUZOTEU5QlFVOHNSMEZCVnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRmRrTXNUMEZCVHl4RFFVTklPMWxCUTAwc1EwRkJReXhQUVVGUE8yZENRVU5PTEVsQlFVa3NRMEZCUXl4bFFVRmxMRVZCUVVVN1dVRkhkRUlzUTBGQlF5eFBRVUZQTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGVkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zUTBGRk0wZ3NRMEZEVGl4RFFVRkJPMGxCUTB3c1EwRkJRenM3UVVGNFJHRXNhME5CUVZrc1IwRkJSenRKUVVONlFpeGxRVUZsTEVWQlFVVXNTMEZCU3p0SlFVTjBRaXhWUVVGVkxFVkJRVVVzUzBGQlN6dERRVU53UWl4RFFVRkRJbjA9IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE5hdmlnYXRpb25WMSB9IGZyb20gXCIuLi8uLi9uYXZpZ2F0aW9uL3YxL05hdmlnYXRpb25WMVwiO1xuaW1wb3J0IHsgUm91dGVkTGluayB9IGZyb20gXCIuLi8uLi8uLi9yb3V0aW5nL1JvdXRlZExpbmtcIjtcbmltcG9ydCB7IGlzSXRlbVJvdXRlZCB9IGZyb20gXCIuLi8uLi8uLi9yb3V0aW5nL1JvdXRlZENvcmVDb21wb25lbnRcIjtcbmV4cG9ydCBmdW5jdGlvbiBMYW5ndWFnZU5hdmlnYXRpb25WMUlzRW1wdHlGbihwcm9wcykge1xuICAgIHJldHVybiBwcm9wcy5pdGVtcyA9PSBudWxsIHx8IHByb3BzLml0ZW1zLmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZU5hdmlnYXRpb25WMSBleHRlbmRzIE5hdmlnYXRpb25WMSB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLmJhc2VDc3NDbHMgPSAnY21wLWxhbmd1YWdlbmF2aWdhdGlvbic7XG4gICAgICAgIHRoaXMuZW1wdHlQbGFjZUhvbGRlclRleHQgPSAnTGFuZ3VhZ2VOYXZpZ2F0aW9uVjEnO1xuICAgICAgICB0aGlzLm5hdkNoaWxkcmVuID0gcHJvcHMuaXRlbXM7XG4gICAgfVxuICAgIHJlbmRlckxpbmsoaXRlbSwgaXNBY3RpdmUpIHtcbiAgICAgICAgaWYgKGl0ZW0ubGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVkTGluaywgeyBpc1JvdXRlZDogaXNJdGVtUm91dGVkKHRoaXMucHJvcHMsIGl0ZW0pLCBjbGFzc05hbWU6IHRoaXMuYmFzZUNzc0NscyArICdfX2l0ZW0tbGluaycsIHRvOiBpdGVtLnVybCwgaHJlZkxhbmc6IGl0ZW0ubGFuZ3VhZ2UsIGxhbmc6IGl0ZW0ubGFuZ3VhZ2UsIHJlbDogXCJhbHRlcm5hdGVcIiwgdGl0bGU6IGl0ZW0udGl0bGUgfSwgaXRlbS50aXRsZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogdGhpcy5iYXNlQ3NzQ2xzICsgJ19faXRlbS10aXRsZScsIGxhbmc6IGl0ZW0ubGFuZ3VhZ2UgfSwgaXRlbS50aXRsZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldEV4dHJhTmF2SXRlbUNzc0Nsc3MoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuYmFzZUNzc0Nsc31fX2l0ZW0tLWNvdW50cnljb2RlLSR7aXRlbS5jb3VudHJ5fSAke3RoaXMuYmFzZUNzc0Nsc31fX2l0ZW0tLWxhbmdjb2RlLSR7aXRlbS5sYW5ndWFnZX1gO1xuICAgIH1cbn1cbkxhbmd1YWdlTmF2aWdhdGlvblYxLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBpc0luRWRpdG9yOiBmYWxzZSxcbiAgICBoaWRlUGxhY2VIb2xkZXI6IGZhbHNlLFxuICAgIGl0ZW1zOiBbXVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVRHRnVaM1ZoWjJWT1lYWnBaMkYwYVc5dVZqRXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKTVlXNW5kV0ZuWlU1aGRtbG5ZWFJwYjI1V01TNTBjM2dpWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1QwRkJUeXhMUVVGTExFMUJRVTBzVDBGQlR5eERRVUZETzBGQlJURkNMRTlCUVU4c1JVRkJReXhaUVVGWkxFVkJRWE5ETEUxQlFVMHNhME5CUVd0RExFTkJRVU03UVVGRGJrY3NUMEZCVHl4RlFVRkRMRlZCUVZVc1JVRkJReXhOUVVGTkxEWkNRVUUyUWl4RFFVRkRPMEZCUTNaRUxFOUJRVThzUlVGQlF5eFpRVUZaTEVWQlFVTXNUVUZCVFN4elEwRkJjME1zUTBGQlF6dEJRWEZDYkVVc1RVRkJUU3hWUVVGVkxEWkNRVUUyUWl4RFFVRkRMRXRCUVN0Q08wbEJRM3BGTEU5QlFVOHNTMEZCU3l4RFFVRkRMRXRCUVVzc1NVRkJTU3hKUVVGSkxFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRek5FTEVOQlFVTTdRVUZGUkN4TlFVRk5MRTlCUVU4c2IwSkJRV2RITEZOQlFWRXNXVUZCTUVJN1NVRlZNMGtzV1VGQldTeExRVUZYTzFGQlEyNUNMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU5pTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc2QwSkJRWGRDTEVOQlFVTTdVVUZETTBNc1NVRkJTU3hEUVVGRExHOUNRVUZ2UWl4SFFVRkhMSE5DUVVGelFpeERRVUZETzFGQlEyNUVMRWxCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXp0SlFVTnVReXhEUVVGRE8wbEJSVVFzVlVGQlZTeERRVUZETEVsQlFUWkNMRVZCUVVVc1VVRkJaMEk3VVVGRmRFUXNTVUZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUlVGQlF6dFpRVU5rTEU5QlFVOHNRMEZEU0N4dlFrRkJReXhWUVVGVkxFbEJRMUFzVVVGQlVTeEZRVUZGTEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVU40UXl4VFFVRlRMRVZCUVVVc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eGhRVUZoTEVWQlF6RkRMRVZCUVVVc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVU5hTEZGQlFWRXNSVUZCUlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVOMlFpeEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkRia0lzUjBGQlJ5eEZRVUZETEZkQlFWY3NSVUZEWml4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzU1VGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRmpMRU5CUTI1RUxFTkJRVUU3VTBGRFNqdGhRVUZKTzFsQlEwUXNUMEZCVHl4RFFVTklMRGhDUVVGTkxGTkJRVk1zUlVGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMR05CUVdNc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNTVUZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGUkxFTkJReTlHTEVOQlFVRTdVMEZEU2p0SlFVVk1MRU5CUVVNN1NVRkZSQ3h6UWtGQmMwSXNRMEZCUXl4SlFVRTRRaXhGUVVGRkxFdEJRV0U3VVVGRGFFVXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxIVkNRVUYxUWl4SlFVRkpMRU5CUVVNc1QwRkJUeXhKUVVGSkxFbEJRVWtzUTBGQlF5eFZRVUZWTEc5Q1FVRnZRaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdTVUZEZGtnc1EwRkJRenM3UVVGd1EyRXNhVU5CUVZrc1IwRkJSenRKUVVONlFpeFZRVUZWTEVWQlFVVXNTMEZCU3p0SlFVTnFRaXhsUVVGbExFVkJRVVVzUzBGQlN6dEpRVU4wUWl4TFFVRkxMRVZCUVVVc1JVRkJSVHREUVVOYUxFTkJRVU1pZlE9PSIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMjAgQWRvYmVcbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIGFzIFJvdXRlckxpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmV4cG9ydCBjb25zdCBSb3V0ZWRMaW5rID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyB0bywgaXNSb3V0ZWQsIC4uLm90aGVyUHJvcHMgfSA9IHByb3BzO1xuICAgIGlmICh0byA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBPYmplY3QuYXNzaWduKHsgaHJlZjogJyMnIH0sIHByb3BzKSk7XG4gICAgfVxuICAgIGNvbnN0IGlzRXh0ZXJuYWwgPSAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodG8pO1xuICAgIHJldHVybiBpc0V4dGVybmFsIHx8ICFpc1JvdXRlZCA/XG4gICAgICAgIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBPYmplY3QuYXNzaWduKHsgaHJlZjogdG8gfSwgcHJvcHMpKSlcbiAgICAgICAgOlxuICAgICAgICAgICAgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyTGluaywgT2JqZWN0LmFzc2lnbih7fSwgb3RoZXJQcm9wcywgeyB0bzogdG8gfSkpKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVbTkxZEdWa1RHbHVheTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklsSnZkWFJsWkV4cGJtc3VkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQk96czdPenM3T3pzN096czdPenRIUVdOSE8wRkJSVWdzVDBGQlR5eExRVUZMTEUxQlFVMHNUMEZCVHl4RFFVRkRPMEZCUXpGQ0xFOUJRVThzUlVGQlF5eEpRVUZKTEVsQlFVa3NWVUZCVlN4RlFVRkRMRTFCUVUwc2EwSkJRV3RDTEVOQlFVTTdRVUZQY0VRc1RVRkJUU3hEUVVGRExFMUJRVTBzVlVGQlZTeEhRVUZITEVOQlFVTXNTMEZCWlN4RlFVRkZMRVZCUVVVN1NVRkRNVU1zVFVGQlRTeEZRVUZETEVWQlFVVXNSVUZCUlN4UlFVRlJMRVZCUVVVc1IwRkJSeXhWUVVGVkxFVkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdTVUZGTlVNc1NVRkJSeXhGUVVGRkxFdEJRVXNzVTBGQlV5eEZRVUZETzFGQlEyaENMRTlCUVU4c2VVTkJRVWNzU1VGQlNTeEZRVUZGTEVkQlFVY3NTVUZEV0N4TFFVRkxMRVZCUTFnc1EwRkJRenRMUVVOT08wbEJRMFFzVFVGQlRTeFZRVUZWTEVkQlFVY3NZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVVV6UXl4UFFVRlBMRlZCUVZVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlFTeERRVUZETzFGQlF6TkNMRU5CUVVNc2VVTkJRMGNzU1VGQlNTeEZRVUZGTEVWQlFVVXNTVUZEU2l4TFFVRkxMRVZCUTFnc1EwRkJRenRSUVVOSUxFTkJRVU03V1VGRFJDeERRVUZGTEc5Q1FVRkRMRlZCUVZVc2IwSkJRVXNzVlVGQlZTeEpRVU5rTEVWQlFVVXNSVUZCUlN4RlFVRkZMRWxCUTJ4Q0xFTkJRVU1zUTBGQlFUdEJRVU5ZTEVOQlFVTXNRMEZCUXlKOSIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMjAgQWRvYmVcbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0l0ZW1Sb3V0ZWQoc2VsZlByb3BzLCBpdGVtKSB7XG4gICAgcmV0dXJuICgoc2VsZlByb3BzLnJvdXRlZCA9PT0gdHJ1ZSAmJiBpdGVtLnJvdXRlZCAhPT0gZmFsc2UpIHx8IGl0ZW0ucm91dGVkID09PSB0cnVlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVVtOTFkR1ZrUTI5eVpVTnZiWEJ2Ym1WdWRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWxKdmRYUmxaRU52Y21WRGIyMXdiMjVsYm5RdWRITjRJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCT3pzN096czdPenM3T3pzN096dEhRV05ITzBGQllVZ3NUVUZCVFN4VlFVRlZMRmxCUVZrc1EwRkJReXhUUVVGeFFpeEZRVUZGTEVsQlFXZENPMGxCUTJoRkxFOUJRVThzUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRXRCUVVzc1NVRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEV0QlFVc3NTMEZCU3l4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUzBGQlN5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTXhSaXhEUVVGREluMD0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1yb3V0ZXItZG9tXCIpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvcmVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vQWJzdHJhY3RDb3JlQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBpc0l0ZW1Sb3V0ZWQgfSBmcm9tIFwiLi4vLi4vLi4vcm91dGluZy9Sb3V0ZWRDb3JlQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBSb3V0ZWRMaW5rIH0gZnJvbSBcIi4uLy4uLy4uL3JvdXRpbmcvUm91dGVkTGlua1wiO1xuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb25WMUlzRW1wdHlGbihwcm9wcykge1xuICAgIHJldHVybiBwcm9wcy5pdGVtcyA9PSBudWxsIHx8IHByb3BzLml0ZW1zLmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uVjEgZXh0ZW5kcyBBYnN0cmFjdENvcmVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzLCBcImNtcC1uYXZpZ2F0aW9uXCIsICdOYXZpZ2F0aW9uVjEnKTtcbiAgICB9XG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIE5hdmlnYXRpb25WMUlzRW1wdHlGbih0aGlzLnByb3BzKTtcbiAgICB9XG4gICAgZGV0ZXJtaW5lSXNBY3RpdmUoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5hY3RpdmU7XG4gICAgfVxuICAgIHJlbmRlckNvbXBvbmVudCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZkNsb25lID0ge1xuICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDogMCxcbiAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgcGF0aDogXCJcIixcbiAgICAgICAgICAgIHRpdGxlOiBcIlwiLFxuICAgICAgICAgICAgdXJsOiBcIlwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMucHJvcHMuaXRlbXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwibmF2XCIsIHsgY2xhc3NOYW1lOiB0aGlzLmJhc2VDc3NDbHMsIHJvbGU6IFwibmF2aWdhdGlvblwiLCBpdGVtU2NvcGU6IHRydWUsIGl0ZW1UeXBlOiBcImh0dHA6Ly9zY2hlbWEub3JnL1NpdGVOYXZpZ2F0aW9uRWxlbWVudFwiLCBcImFyaWEtbGFiZWxcIjogdGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5TGFiZWwgfSwgdGhpcy5yZW5kZXJHcm91cChzZWxmQ2xvbmUpKSk7XG4gICAgfVxuICAgIHJlbmRlckdyb3VwKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAhIWl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IHRoaXMuYmFzZUNzc0NscyArICdfX2dyb3VwJyB9LCBpdGVtLmNoaWxkcmVuLm1hcCgoaXRlbSwgaW5kZXgpID0+IHsgcmV0dXJuIHRoaXMucmVuZGVyTmF2SXRlbShpdGVtLCBpbmRleCk7IH0pKSkpKTtcbiAgICB9XG4gICAgcmVuZGVyTGluayhpdGVtLCBpc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVkTGluaywgeyBpc1JvdXRlZDogaXNJdGVtUm91dGVkKHRoaXMucHJvcHMsIGl0ZW0pLCB0bzogaXRlbS51cmwsIHRpdGxlOiBpdGVtLnRpdGxlLCBcImFyaWEtY3VycmVudFwiOiBpc0FjdGl2ZSAmJiAncGFnZScsIGNsYXNzTmFtZTogdGhpcy5iYXNlQ3NzQ2xzICsgJ19faXRlbS1saW5rJyB9LCBpdGVtLnRpdGxlKSk7XG4gICAgfVxuICAgIHJlbmRlck5hdkl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmRldGVybWluZUlzQWN0aXZlKGl0ZW0pO1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IHRoaXMuYmFzZUNzc0NscyArICdfX2l0ZW0gJyArXG4gICAgICAgICAgICB0aGlzLmJhc2VDc3NDbHMgKyAnX19pdGVtLS1sZXZlbC0nICsgaXRlbS5sZXZlbCArICcgJ1xuICAgICAgICAgICAgKyAnICcgKyB0aGlzLmdldEV4dHJhTmF2SXRlbUNzc0Nsc3MoaXRlbSwgaW5kZXgpXG4gICAgICAgICAgICArIChpc0FjdGl2ZSA/ICcgJyArIHRoaXMuYmFzZUNzc0NscyArICdfX2l0ZW0tLWFjdGl2ZScgOiAnJyk7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsga2V5OiB0aGlzLmJhc2VDc3NDbHMgKyAnX19pdGVtLScgKyBpbmRleCwgY2xhc3NOYW1lOiBjc3NDbGFzcyB9LFxuICAgICAgICAgICAgdGhpcy5yZW5kZXJMaW5rKGl0ZW0sIGlzQWN0aXZlKSxcbiAgICAgICAgICAgICEhaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgdGhpcy5yZW5kZXJHcm91cChpdGVtKSkpO1xuICAgIH1cbiAgICBnZXRFeHRyYU5hdkl0ZW1Dc3NDbHNzKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbn1cbk5hdmlnYXRpb25WMS5kZWZhdWx0UHJvcHMgPSB7XG4gICAgaXNJbkVkaXRvcjogZmFsc2UsXG4gICAgaGlkZVBsYWNlSG9sZGVyOiBmYWxzZSxcbiAgICBpdGVtczogW11cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lUbUYyYVdkaGRHbHZibFl4TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lUbUYyYVdkaGRHbHZibFl4TG5SemVDSmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hQUVVGUExFdEJRVXNzVFVGQlRTeFBRVUZQTEVOQlFVTTdRVUZETVVJc1QwRkJUeXhGUVVGRExIRkNRVUZ4UWl4RlFVRjVReXhOUVVGTkxHZERRVUZuUXl4RFFVRkRPMEZCUXpkSExFOUJRVThzUlVGQlF5eFpRVUZaTEVWQlFYZERMRTFCUVUwc2MwTkJRWE5ETEVOQlFVTTdRVUZEZWtjc1QwRkJUeXhGUVVGRExGVkJRVlVzUlVGQlF5eE5RVUZOTERaQ1FVRTJRaXhEUVVGRE8wRkJiMEoyUkN4TlFVRk5MRlZCUVZVc2NVSkJRWEZDTEVOQlFVTXNTMEZCZFVJN1NVRkRla1FzVDBGQlR5eExRVUZMTEVOQlFVTXNTMEZCU3l4SlFVRkpMRWxCUVVrc1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRNMFFzUTBGQlF6dEJRVVZFTEUxQlFVMHNUMEZCVHl4WlFVRm5SaXhUUVVGUkxIRkNRVUZ0UXp0SlFWRndTU3haUVVGWkxFdEJRVmM3VVVGRGJrSXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVOdVJDeERRVUZETzBsQlJVUXNUMEZCVHp0UlFVTklMRTlCUVU4c2NVSkJRWEZDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wbEJRemRETEVOQlFVTTdTVUZGUkN4cFFrRkJhVUlzUTBGQlF5eEpRVUZ4UWp0UlFVTnVReXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEZGtJc1EwRkJRenRKUVVWRUxHVkJRV1U3VVVGRldDeE5RVUZOTEZOQlFWTXNSMEZCYjBJN1dVRkRMMElzVFVGQlRTeEZRVUZGTEV0QlFVczdXVUZEWWl4WlFVRlpMRVZCUVVVc1EwRkJRenRaUVVObUxFdEJRVXNzUlVGQlJTeERRVUZETzFsQlExSXNTVUZCU1N4RlFVRkZMRVZCUVVVN1dVRkRVaXhMUVVGTExFVkJRVVVzUlVGQlJUdFpRVU5VTEVkQlFVY3NSVUZCUlN4RlFVRkZPMWxCUTFBc1VVRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3p0VFFVTTNRaXhEUVVGRE8xRkJSVVlzVDBGQlR5eERRVU5JTERaQ1FVRkxMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVU14UWl4SlFVRkpMRVZCUVVNc1dVRkJXU3hGUVVOcVFpeFRRVUZUTEZGQlFVTXNVVUZCVVN4RlFVRkRMSGxEUVVGNVF5eG5Ra0ZEYUVRc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eHJRa0ZCYTBJc1NVRkRla01zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkRNVUlzUTBGRFZDeERRVUZCTzBsQlEwd3NRMEZCUXp0SlFVVkVMRmRCUVZjc1EwRkJReXhKUVVGeFFqdFJRVU0zUWl4UFFVRlBMRU5CUTBnc01FTkJRMHNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRWxCUVVrc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4SlFVRkxMRU5CUXpkRExEUkNRVUZKTEZOQlFWTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hIUVVGSExGTkJRVk1zU1VGRGNrTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRMlFzUTBGQlF5eEpRVUZKTEVWQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVVc1IwRkJSeXhQUVVGUExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RlFVRkRMRXRCUVVzc1EwRkJReXhEUVVGQkxFTkJRVUVzUTBGQlF5eERRVU16UkN4RFFVTkJMRU5CUTFJc1EwRkRTQ3hEUVVOTUxFTkJRVUU3U1VGRFRDeERRVUZETzBsQlJVUXNWVUZCVlN4RFFVRkRMRWxCUVhGQ0xFVkJRVVVzVVVGQlowSTdVVUZET1VNc1QwRkJUeXhEUVVOSUxHOUNRVUZETEZWQlFWVXNTVUZCUXl4UlFVRlJMRVZCUVVVc1dVRkJXU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExHdENRVUZuUWl4UlFVRlJMRWxCUVVrc1RVRkJUU3hGUVVOdVNDeFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhoUVVGaExFbEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCWXl4RFFVTXpSU3hEUVVGQk8wbEJRMHdzUTBGQlF6dEpRVU5FTEdGQlFXRXNRMEZCUXl4SlFVRnpRaXhGUVVGRkxFdEJRV0U3VVVGREwwTXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRemxETEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzVTBGQlV6dFpRVU16UWl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hIUVVGSExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ6dGpRVU51UkN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU03WTBGRE9VTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMR2RDUVVGblFpeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVNNVJTeFBRVUZQTEVOQlEwZ3NORUpCUVVrc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NVMEZCVXl4SFFVRkhMRXRCUVVzc1JVRkJSU3hUUVVGVExFVkJRVVVzVVVGQlVUdFpRVU4yUkN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUlVGQlJTeFJRVUZSTEVOQlFVTTdXVUZGTjBJc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVsQlFVa3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJSVFZGTEVOQlExSXNRMEZCUVR0SlFVTk1MRU5CUVVNN1NVRkZSQ3h6UWtGQmMwSXNRMEZCUXl4SlFVRnpRaXhGUVVGRkxFdEJRV0U3VVVGRGVFUXNUMEZCVHl4RlFVRkZMRU5CUVVNN1NVRkRaQ3hEUVVGRE96dEJRVGxGWVN4NVFrRkJXU3hIUVVGSE8wbEJRM3BDTEZWQlFWVXNSVUZCUlN4TFFVRkxPMGxCUTJwQ0xHVkJRV1VzUlVGQlJTeExRVUZMTzBsQlEzUkNMRXRCUVVzc1JVRkJSU3hGUVVGRk8wTkJRMW9zUTBGQlF5SjkiXSwic291cmNlUm9vdCI6IiJ9