| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/ |
Upload File : |
/*! For license information please see multistore_dropdown.bundle.js.LICENSE.txt */
(()=>{var t={57208:t=>{"use strict";t.exports=JSON.parse('{"base_url":"","routes":{"admin_common_notifications":{"tokens":[["text","/common/notifications"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_product_form":{"tokens":[["variable","/","\\\\d+","id"],["text","/sell/catalog/products"]],"defaults":[],"requirements":{"id":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_feature_get_feature_values":{"tokens":[["variable","/","\\\\d+","idFeature"],["text","/sell/catalog/products/features"]],"defaults":{"idFeature":0},"requirements":{"idFeature":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations":{"tokens":[["text","/combinations"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_ids":{"tokens":[["text","/combinations/ids"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_update_combination_from_listing":{"tokens":[["text","/update-combination-from-listing"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["PATCH"],"schemes":[]},"admin_products_combinations_edit_combination":{"tokens":[["text","/edit"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_products_combinations_remove_combination":{"tokens":[["text","/remove"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["DELETE"],"schemes":[]},"admin_products_attribute_groups":{"tokens":[["text","/attribute-groups"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_all_attribute_groups":{"tokens":[["text","/sell/catalog/products-v2/all-attribute-groups"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_generate":{"tokens":[["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2/generate-combinations"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_products_v2_get_images":{"tokens":[["text","/images"],["variable","/","\\\\d+","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":{"productId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_v2_add_image":{"tokens":[["text","/sell/catalog/products-v2/images/add"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_products_v2_update_image":{"tokens":[["text","/update"],["variable","/","\\\\d+","productImageId"],["text","/sell/catalog/products-v2/images"]],"defaults":[],"requirements":{"productImageId":"\\\\d+"},"hosttokens":[],"methods":["PATCH"],"schemes":[]},"admin_products_v2_delete_image":{"tokens":[["text","/delete"],["variable","/","\\\\d+","productImageId"],["text","/sell/catalog/products-v2/images"]],"defaults":[],"requirements":{"productImageId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_categories_get_categories_tree":{"tokens":[["text","/sell/catalog/categories/tree"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_cart_rules_search":{"tokens":[["text","/sell/catalog/cart-rules/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_customers_search":{"tokens":[["text","/sell/customers/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_carts":{"tokens":[["text","/carts"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_orders":{"tokens":[["text","/orders"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_addresses_create":{"tokens":[["text","/sell/addresses/new"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_addresses_edit":{"tokens":[["text","/edit"],["variable","/","\\\\d+","addressId"],["text","/sell/addresses"]],"defaults":[],"requirements":{"addressId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_order_addresses_edit":{"tokens":[["text","/edit"],["variable","/","delivery|invoice","addressType"],["variable","/","\\\\d+","orderId"],["text","/sell/addresses/order"]],"defaults":[],"requirements":{"orderId":"\\\\d+","addressType":"delivery|invoice"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_cart_addresses_edit":{"tokens":[["text","/edit"],["variable","/","delivery|invoice","addressType"],["variable","/","\\\\d+","cartId"],["text","/sell/addresses/cart"]],"defaults":[],"requirements":{"cartId":"\\\\d+","addressType":"delivery|invoice"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_carts_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_carts_info":{"tokens":[["text","/info"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_carts_create":{"tokens":[["text","/sell/orders/carts/new"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_addresses":{"tokens":[["text","/addresses"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_carrier":{"tokens":[["text","/carrier"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_currency":{"tokens":[["text","/currency"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_language":{"tokens":[["text","/language"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_set_delivery_settings":{"tokens":[["text","/rules/delivery-settings"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_add_cart_rule":{"tokens":[["text","/cart-rules"],["variable","/","[^/]++","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_delete_cart_rule":{"tokens":[["text","/delete"],["variable","/","[^/]++","cartRuleId"],["text","/cart-rules"],["variable","/","[^/]++","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_add_product":{"tokens":[["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_product_price":{"tokens":[["text","/price"],["variable","/","\\\\d+","productId"],["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+","productId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_product_quantity":{"tokens":[["text","/quantity"],["variable","/","\\\\d+","productId"],["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+","productId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_delete_product":{"tokens":[["text","/delete-product"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_place":{"tokens":[["text","/sell/orders/place"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_orders_duplicate_cart":{"tokens":[["text","/duplicate-cart"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_update_product":{"tokens":[["variable","/","\\\\d+","orderDetailId"],["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+","orderDetailId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_partial_refund":{"tokens":[["text","/partial-refund"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_standard_refund":{"tokens":[["text","/standard-refund"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_return_product":{"tokens":[["text","/return-product"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_send_process_order_email":{"tokens":[["text","/sell/orders/process-order-email"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_add_product":{"tokens":[["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_delete_product":{"tokens":[["text","/delete"],["variable","/","\\\\d+","orderDetailId"],["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+","orderDetailId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_get_discounts":{"tokens":[["text","/discounts"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_prices":{"tokens":[["text","/prices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_payments":{"tokens":[["text","/payments"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_products":{"tokens":[["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_invoices":{"tokens":[["text","/invoices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_documents":{"tokens":[["text","/documents"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_shipping":{"tokens":[["text","/shipping"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_cancellation":{"tokens":[["text","/cancellation"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_configure_product_pagination":{"tokens":[["text","/sell/orders/configure-product-pagination"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_product_prices":{"tokens":[["text","/products/prices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_products_search":{"tokens":[["text","/sell/orders/products/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_shops_search":{"tokens":[["variable","/","[^/]++","searchTerm"],["text","/configure/advanced/shops/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]}},"prefix":"","host":"localhost","port":"","scheme":"http","locale":[]}')},73481:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=o(n(88239)),i=o(n(99663)),s=o(n(22600));function o(t){return t&&t.__esModule?t:{default:t}}var a=function(){function t(e,n){var s=this;(0,i.default)(this,t),this.$searchInput=e,this.searchInputId=this.$searchInput.prop("id");var o=n||{};this.config=(0,r.default)({minLength:2,highlight:!0,cache:!1,hint:!1},o),this.dataSetConfig=(0,r.default)({display:"name",value:"id",limit:20,dataLimit:0,onSelect:function(t,e){return!0},onClose:function(t){}},o);var a={suggestion:function(t){var e=t;return"function"==typeof s.dataSetConfig.display?s.dataSetConfig.display(t):Object.prototype.hasOwnProperty.call(t,s.dataSetConfig.display)&&(e=t[s.dataSetConfig.display]),'<div class="px-2">'+e+"</div>"},pending:function(t){return'<div class="px-2">Searching for "'+t.query+'"</div>'},notFound:function(t){return'<div class="px-2">No results found for "'+t.query+'"</div>'}};Object.prototype.hasOwnProperty.call(o,"templates")?this.dataSetConfig.templates=(0,r.default)({},a,o.templates):this.dataSetConfig.templates=a,this.buildTypeahead()}return(0,s.default)(t,[{key:"buildTypeahead",value:function(){var t=this;this.$searchInput.typeahead(this.config,this.dataSetConfig).bind("typeahead:select",(function(e,n){return t.config.onSelect(n,e,t.$searchInput)})).bind("typeahead:close",(function(e){t.config.onClose(e,t.$searchInput)}))}}]),t}();e.default=a},41941:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={multistoreDropdown:{searchInput:".js-multistore-dropdown-search",scrollbar:".js-multistore-scrollbar"},multistoreHeader:{modal:".js-multishop-modal",headerButton:".js-header-multishop-open-modal",searchInput:".js-multishop-modal-search",jsScrollbar:".js-multishop-scrollbar",setContextUrl:function(t,e,n){var r="setShopContext="+e+"-"+n,i=new URL(t);return""===i.search?i.search="?"+r:i.search+="&"+r,i.toString()}}}},95778:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=l(n(52945)),i=l(n(99663)),s=l(n(22600)),o=l(n(2564)),a=l(n(57208));function l(t){return t&&t.__esModule?t:{default:t}}var c=window.$,u=function(){function t(){return(0,i.default)(this,t),window.prestashop&&window.prestashop.customRoutes&&(0,r.default)(a.default.routes,window.prestashop.customRoutes),o.default.setData(a.default),o.default.setBaseUrl(c(document).find("body").data("base-url")),this}return(0,s.default)(t,[{key:"generate",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,r.default)(e,{_token:c(document).find("body").data("token")});return o.default.generate(t,n)}}]),t}();e.default=u},52945:(t,e,n)=>{t.exports={default:n(56981),__esModule:!0}},32242:(t,e,n)=>{t.exports={default:n(33391),__esModule:!0}},99663:(t,e)=>{"use strict";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},22600:(t,e,n)=>{"use strict";e.__esModule=!0;var r,i=(r=n(32242))&&r.__esModule?r:{default:r};e.default=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),(0,i.default)(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}()},88239:(t,e,n)=>{"use strict";e.__esModule=!0;var r,i=(r=n(52945))&&r.__esModule?r:{default:r};e.default=i.default||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t}},56981:(t,e,n)=>{n(72699),t.exports=n(34579).Object.assign},33391:(t,e,n)=>{n(31477);var r=n(34579).Object;t.exports=function(t,e,n){return r.defineProperty(t,e,n)}},85663:t=>{t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},12159:(t,e,n)=>{var r=n(36727);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},57428:(t,e,n)=>{var r=n(7932),i=n(78728),s=n(16531);t.exports=function(t){return function(e,n,o){var a,l=r(e),c=i(l.length),u=s(o,c);if(t&&n!=n){for(;c>u;)if((a=l[u++])!=a)return!0}else for(;c>u;u++)if((t||u in l)&&l[u]===n)return t||u||0;return!t&&-1}}},32894:t=>{var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},34579:t=>{var e=t.exports={version:"2.6.11"};"number"==typeof __e&&(__e=e)},19216:(t,e,n)=>{var r=n(85663);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},8333:t=>{t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},89666:(t,e,n)=>{t.exports=!n(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(t,e,n)=>{var r=n(36727),i=n(33938).document,s=r(i)&&r(i.createElement);t.exports=function(t){return s?i.createElement(t):{}}},73338:t=>{t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},83856:(t,e,n)=>{var r=n(33938),i=n(34579),s=n(19216),o=n(41818),a=n(27069),l=function(t,e,n){var c,u,h,d=t&l.F,f=t&l.G,p=t&l.S,m=t&l.P,g=t&l.B,v=t&l.W,b=f?i:i[e]||(i[e]={}),y=b.prototype,_=f?r:p?r[e]:(r[e]||{}).prototype;for(c in f&&(n=e),n)(u=!d&&_&&void 0!==_[c])&&a(b,c)||(h=u?_[c]:n[c],b[c]=f&&"function"!=typeof _[c]?n[c]:g&&u?s(h,r):v&&_[c]==h?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(h):m&&"function"==typeof h?s(Function.call,h):h,m&&((b.virtual||(b.virtual={}))[c]=h,t&l.R&&y&&!y[c]&&o(y,c,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,t.exports=l},7929:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},33938:t=>{var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},27069:t=>{var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},41818:(t,e,n)=>{var r=n(4743),i=n(83101);t.exports=n(89666)?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},33758:(t,e,n)=>{t.exports=!n(89666)&&!n(7929)((function(){return 7!=Object.defineProperty(n(97467)("div"),"a",{get:function(){return 7}}).a}))},50799:(t,e,n)=>{var r=n(32894);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},36727:t=>{t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},16227:t=>{t.exports=!0},88082:(t,e,n)=>{"use strict";var r=n(89666),i=n(46162),s=n(48195),o=n(86274),a=n(66530),l=n(50799),c=Object.assign;t.exports=!c||n(7929)((function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach((function(t){e[t]=t})),7!=c({},t)[n]||Object.keys(c({},e)).join("")!=r}))?function(t,e){for(var n=a(t),c=arguments.length,u=1,h=s.f,d=o.f;c>u;)for(var f,p=l(arguments[u++]),m=h?i(p).concat(h(p)):i(p),g=m.length,v=0;g>v;)f=m[v++],r&&!d.call(p,f)||(n[f]=p[f]);return n}:c},4743:(t,e,n)=>{var r=n(12159),i=n(33758),s=n(33206),o=Object.defineProperty;e.f=n(89666)?Object.defineProperty:function(t,e,n){if(r(t),e=s(e,!0),r(n),i)try{return o(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},48195:(t,e)=>{e.f=Object.getOwnPropertySymbols},12963:(t,e,n)=>{var r=n(27069),i=n(7932),s=n(57428)(!1),o=n(58989)("IE_PROTO");t.exports=function(t,e){var n,a=i(t),l=0,c=[];for(n in a)n!=o&&r(a,n)&&c.push(n);for(;e.length>l;)r(a,n=e[l++])&&(~s(c,n)||c.push(n));return c}},46162:(t,e,n)=>{var r=n(12963),i=n(73338);t.exports=Object.keys||function(t){return r(t,i)}},86274:(t,e)=>{e.f={}.propertyIsEnumerable},83101:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},58989:(t,e,n)=>{var r=n(20250)("keys"),i=n(65730);t.exports=function(t){return r[t]||(r[t]=i(t))}},20250:(t,e,n)=>{var r=n(34579),i=n(33938),s="__core-js_shared__",o=i[s]||(i[s]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n(16227)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},16531:(t,e,n)=>{var r=n(11052),i=Math.max,s=Math.min;t.exports=function(t,e){return(t=r(t))<0?i(t+e,0):s(t,e)}},11052:t=>{var e=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:e)(t)}},7932:(t,e,n)=>{var r=n(50799),i=n(8333);t.exports=function(t){return r(i(t))}},78728:(t,e,n)=>{var r=n(11052),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},66530:(t,e,n)=>{var r=n(8333);t.exports=function(t){return Object(r(t))}},33206:(t,e,n)=>{var r=n(36727);t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},65730:t=>{var e=0,n=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+n).toString(36))}},72699:(t,e,n)=>{var r=n(83856);r(r.S+r.F,"Object",{assign:n(88082)})},31477:(t,e,n)=>{var r=n(83856);r(r.S+r.F*!n(89666),"Object",{defineProperty:n(4743).f})},2564:t=>{"use strict";var e=Object.assign||function(t){for(var e,n=1;n<arguments.length;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t},n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};t.exports=new function t(){var r=this;(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),this.setRoutes=function(t){r.routesRouting=t||[]},this.getRoutes=function(){return r.routesRouting},this.setBaseUrl=function(t){r.contextRouting.base_url=t},this.getBaseUrl=function(){return r.contextRouting.base_url},this.setPrefix=function(t){r.contextRouting.prefix=t},this.setScheme=function(t){r.contextRouting.scheme=t},this.getScheme=function(){return r.contextRouting.scheme},this.setHost=function(t){r.contextRouting.host=t},this.getHost=function(){return r.contextRouting.host},this.buildQueryParams=function(t,e,i){var s=new RegExp(/\[]$/);e instanceof Array?e.forEach((function(e,o){s.test(t)?i(t,e):r.buildQueryParams(t+"["+("object"===(void 0===e?"undefined":n(e))?o:"")+"]",e,i)})):"object"===(void 0===e?"undefined":n(e))?Object.keys(e).forEach((function(n){return r.buildQueryParams(t+"["+n+"]",e[n],i)})):i(t,e)},this.getRoute=function(t){var e=r.contextRouting.prefix+t;if(r.routesRouting[e])return r.routesRouting[e];if(!r.routesRouting[t])throw new Error('The route "'+t+'" does not exist.');return r.routesRouting[t]},this.generate=function(t,n,i){var s=r.getRoute(t),o=n||{},a=e({},o),l="_scheme",c="",u=!0,h="";if((s.tokens||[]).forEach((function(e){if("text"===e[0])return c=e[1]+c,void(u=!1);if("variable"!==e[0])throw new Error('The token type "'+e[0]+'" is not supported.');var n=(s.defaults||{})[e[3]];if(0==u||!n||(o||{})[e[3]]&&o[e[3]]!==s.defaults[e[3]]){var r;if((o||{})[e[3]])r=o[e[3]],delete a[e[3]];else{if(!n){if(u)return;throw new Error('The route "'+t+'" requires the parameter "'+e[3]+'".')}r=s.defaults[e[3]]}if(!0!==r&&!1!==r&&""!==r||!u){var i=encodeURIComponent(r).replace(/%2F/g,"/");"null"===i&&null===r&&(i=""),c=e[1]+i+c}u=!1}else n&&delete a[e[3]]})),""==c&&(c="/"),(s.hosttokens||[]).forEach((function(t){var e;return"text"===t[0]?void(h=t[1]+h):void("variable"===t[0]&&((o||{})[t[3]]?(e=o[t[3]],delete a[t[3]]):s.defaults[t[3]]&&(e=s.defaults[t[3]]),h=t[1]+e+h))})),c=r.contextRouting.base_url+c,s.requirements[l]&&r.getScheme()!==s.requirements[l]?c=s.requirements[l]+"://"+(h||r.getHost())+c:h&&r.getHost()!==h?c=r.getScheme()+"://"+h+c:!0===i&&(c=r.getScheme()+"://"+r.getHost()+c),0<Object.keys(a).length){var d=[],f=function(t,e){var n=e;n=null===(n="function"==typeof n?n():n)?"":n,d.push(encodeURIComponent(t)+"="+encodeURIComponent(n))};Object.keys(a).forEach((function(t){return r.buildQueryParams(t,a[t],f)})),c=c+"?"+d.join("&").replace(/%20/g,"+")}return c},this.setData=function(t){r.setBaseUrl(t.base_url),r.setRoutes(t.routes),"prefix"in t&&r.setPrefix(t.prefix),r.setHost(t.host),r.setScheme(t.scheme)},this.contextRouting={base_url:"",prefix:"",host:"",scheme:""}}},43345:(t,e,n)=>{"use strict";n.r(e)},84772:(t,e,n)=>{"use strict";function r(t){return getComputedStyle(t)}function i(t,e){for(var n in e){var r=e[n];"number"==typeof r&&(r+="px"),t.style[n]=r}return t}function s(t){var e=document.createElement("div");return e.className=t,e}n.r(e),n.d(e,{default:()=>O});var o="undefined"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector);function a(t,e){if(!o)throw new Error("No element matching method supported");return o.call(t,e)}function l(t){t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)}function c(t,e){return Array.prototype.filter.call(t.children,(function(t){return a(t,e)}))}var u=function(t){return"ps__thumb-"+t},h=function(t){return"ps__rail-"+t},d="ps__child--consume",f="ps--focus",p="ps--clicking",m=function(t){return"ps--active-"+t},g=function(t){return"ps--scrolling-"+t},v={x:null,y:null};function b(t,e){var n=t.element.classList,r=g(e);n.contains(r)?clearTimeout(v[e]):n.add(r)}function y(t,e){v[e]=setTimeout((function(){return t.isAlive&&t.element.classList.remove(g(e))}),t.settings.scrollingThreshold)}var _=function(t){this.element=t,this.handlers={}},x={isEmpty:{configurable:!0}};_.prototype.bind=function(t,e){void 0===this.handlers[t]&&(this.handlers[t]=[]),this.handlers[t].push(e),this.element.addEventListener(t,e,!1)},_.prototype.unbind=function(t,e){var n=this;this.handlers[t]=this.handlers[t].filter((function(r){return!(!e||r===e)||(n.element.removeEventListener(t,r,!1),!1)}))},_.prototype.unbindAll=function(){for(var t in this.handlers)this.unbind(t)},x.isEmpty.get=function(){var t=this;return Object.keys(this.handlers).every((function(e){return 0===t.handlers[e].length}))},Object.defineProperties(_.prototype,x);var w=function(){this.eventElements=[]};function k(t){if("function"==typeof window.CustomEvent)return new CustomEvent(t);var e=document.createEvent("CustomEvent");return e.initCustomEvent(t,!1,!1,void 0),e}function S(t,e,n,r,i){var s;if(void 0===r&&(r=!0),void 0===i&&(i=!1),"top"===e)s=["contentHeight","containerHeight","scrollTop","y","up","down"];else{if("left"!==e)throw new Error("A proper axis should be provided");s=["contentWidth","containerWidth","scrollLeft","x","left","right"]}!function(t,e,n,r,i){var s=n[0],o=n[1],a=n[2],l=n[3],c=n[4],u=n[5];void 0===r&&(r=!0),void 0===i&&(i=!1);var h=t.element;t.reach[l]=null,h[a]<1&&(t.reach[l]="start"),h[a]>t[s]-t[o]-1&&(t.reach[l]="end"),e&&(h.dispatchEvent(k("ps-scroll-"+l)),e<0?h.dispatchEvent(k("ps-scroll-"+c)):e>0&&h.dispatchEvent(k("ps-scroll-"+u)),r&&function(t,e){b(t,e),y(t,e)}(t,l)),t.reach[l]&&(e||i)&&h.dispatchEvent(k("ps-"+l+"-reach-"+t.reach[l]))}(t,n,s,r,i)}function T(t){return parseInt(t,10)||0}w.prototype.eventElement=function(t){var e=this.eventElements.filter((function(e){return e.element===t}))[0];return e||(e=new _(t),this.eventElements.push(e)),e},w.prototype.bind=function(t,e,n){this.eventElement(t).bind(e,n)},w.prototype.unbind=function(t,e,n){var r=this.eventElement(t);r.unbind(e,n),r.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(r),1)},w.prototype.unbindAll=function(){this.eventElements.forEach((function(t){return t.unbindAll()})),this.eventElements=[]},w.prototype.once=function(t,e,n){var r=this.eventElement(t),i=function(t){r.unbind(e,i),n(t)};r.bind(e,i)};var I={isWebKit:"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style,supportsTouch:"undefined"!=typeof window&&("ontouchstart"in window||"maxTouchPoints"in window.navigator&&window.navigator.maxTouchPoints>0||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:"undefined"!=typeof navigator&&navigator.msMaxTouchPoints,isChrome:"undefined"!=typeof navigator&&/Chrome/i.test(navigator&&navigator.userAgent)};function E(t){var e=t.element,n=Math.floor(e.scrollTop),r=e.getBoundingClientRect();t.containerWidth=Math.ceil(r.width),t.containerHeight=Math.ceil(r.height),t.contentWidth=e.scrollWidth,t.contentHeight=e.scrollHeight,e.contains(t.scrollbarXRail)||(c(e,h("x")).forEach((function(t){return l(t)})),e.appendChild(t.scrollbarXRail)),e.contains(t.scrollbarYRail)||(c(e,h("y")).forEach((function(t){return l(t)})),e.appendChild(t.scrollbarYRail)),!t.settings.suppressScrollX&&t.containerWidth+t.settings.scrollXMarginOffset<t.contentWidth?(t.scrollbarXActive=!0,t.railXWidth=t.containerWidth-t.railXMarginWidth,t.railXRatio=t.containerWidth/t.railXWidth,t.scrollbarXWidth=R(t,T(t.railXWidth*t.containerWidth/t.contentWidth)),t.scrollbarXLeft=T((t.negativeScrollAdjustment+e.scrollLeft)*(t.railXWidth-t.scrollbarXWidth)/(t.contentWidth-t.containerWidth))):t.scrollbarXActive=!1,!t.settings.suppressScrollY&&t.containerHeight+t.settings.scrollYMarginOffset<t.contentHeight?(t.scrollbarYActive=!0,t.railYHeight=t.containerHeight-t.railYMarginHeight,t.railYRatio=t.containerHeight/t.railYHeight,t.scrollbarYHeight=R(t,T(t.railYHeight*t.containerHeight/t.contentHeight)),t.scrollbarYTop=T(n*(t.railYHeight-t.scrollbarYHeight)/(t.contentHeight-t.containerHeight))):t.scrollbarYActive=!1,t.scrollbarXLeft>=t.railXWidth-t.scrollbarXWidth&&(t.scrollbarXLeft=t.railXWidth-t.scrollbarXWidth),t.scrollbarYTop>=t.railYHeight-t.scrollbarYHeight&&(t.scrollbarYTop=t.railYHeight-t.scrollbarYHeight),function(t,e){var n={width:e.railXWidth},r=Math.floor(t.scrollTop);e.isRtl?n.left=e.negativeScrollAdjustment+t.scrollLeft+e.containerWidth-e.contentWidth:n.left=t.scrollLeft,e.isScrollbarXUsingBottom?n.bottom=e.scrollbarXBottom-r:n.top=e.scrollbarXTop+r,i(e.scrollbarXRail,n);var s={top:r,height:e.railYHeight};e.isScrollbarYUsingRight?e.isRtl?s.right=e.contentWidth-(e.negativeScrollAdjustment+t.scrollLeft)-e.scrollbarYRight-e.scrollbarYOuterWidth-9:s.right=e.scrollbarYRight-t.scrollLeft:e.isRtl?s.left=e.negativeScrollAdjustment+t.scrollLeft+2*e.containerWidth-e.contentWidth-e.scrollbarYLeft-e.scrollbarYOuterWidth:s.left=e.scrollbarYLeft+t.scrollLeft,i(e.scrollbarYRail,s),i(e.scrollbarX,{left:e.scrollbarXLeft,width:e.scrollbarXWidth-e.railBorderXWidth}),i(e.scrollbarY,{top:e.scrollbarYTop,height:e.scrollbarYHeight-e.railBorderYWidth})}(e,t),t.scrollbarXActive?e.classList.add(m("x")):(e.classList.remove(m("x")),t.scrollbarXWidth=0,t.scrollbarXLeft=0,e.scrollLeft=!0===t.isRtl?t.contentWidth:0),t.scrollbarYActive?e.classList.add(m("y")):(e.classList.remove(m("y")),t.scrollbarYHeight=0,t.scrollbarYTop=0,e.scrollTop=0)}function R(t,e){return t.settings.minScrollbarLength&&(e=Math.max(e,t.settings.minScrollbarLength)),t.settings.maxScrollbarLength&&(e=Math.min(e,t.settings.maxScrollbarLength)),e}function A(t,e){var n=e[0],r=e[1],i=e[2],s=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8],h=t.element,d=null,f=null,m=null;function g(e){e.touches&&e.touches[0]&&(e[i]=e.touches[0].pageY),h[l]=d+m*(e[i]-f),b(t,c),E(t),e.stopPropagation(),e.preventDefault()}function v(){y(t,c),t[u].classList.remove(p),t.event.unbind(t.ownerDocument,"mousemove",g)}function _(e,o){d=h[l],o&&e.touches&&(e[i]=e.touches[0].pageY),f=e[i],m=(t[r]-t[n])/(t[s]-t[a]),o?t.event.bind(t.ownerDocument,"touchmove",g):(t.event.bind(t.ownerDocument,"mousemove",g),t.event.once(t.ownerDocument,"mouseup",v),e.preventDefault()),t[u].classList.add(p),e.stopPropagation()}t.event.bind(t[o],"mousedown",(function(t){_(t)})),t.event.bind(t[o],"touchstart",(function(t){_(t,!0)}))}var q={"click-rail":function(t){t.element,t.event.bind(t.scrollbarY,"mousedown",(function(t){return t.stopPropagation()})),t.event.bind(t.scrollbarYRail,"mousedown",(function(e){var n=e.pageY-window.pageYOffset-t.scrollbarYRail.getBoundingClientRect().top>t.scrollbarYTop?1:-1;t.element.scrollTop+=n*t.containerHeight,E(t),e.stopPropagation()})),t.event.bind(t.scrollbarX,"mousedown",(function(t){return t.stopPropagation()})),t.event.bind(t.scrollbarXRail,"mousedown",(function(e){var n=e.pageX-window.pageXOffset-t.scrollbarXRail.getBoundingClientRect().left>t.scrollbarXLeft?1:-1;t.element.scrollLeft+=n*t.containerWidth,E(t),e.stopPropagation()}))},"drag-thumb":function(t){A(t,["containerWidth","contentWidth","pageX","railXWidth","scrollbarX","scrollbarXWidth","scrollLeft","x","scrollbarXRail"]),A(t,["containerHeight","contentHeight","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollTop","y","scrollbarYRail"])},keyboard:function(t){var e=t.element;t.event.bind(t.ownerDocument,"keydown",(function(n){if(!(n.isDefaultPrevented&&n.isDefaultPrevented()||n.defaultPrevented)&&(a(e,":hover")||a(t.scrollbarX,":focus")||a(t.scrollbarY,":focus"))){var r,i=document.activeElement?document.activeElement:t.ownerDocument.activeElement;if(i){if("IFRAME"===i.tagName)i=i.contentDocument.activeElement;else for(;i.shadowRoot;)i=i.shadowRoot.activeElement;if(a(r=i,"input,[contenteditable]")||a(r,"select,[contenteditable]")||a(r,"textarea,[contenteditable]")||a(r,"button,[contenteditable]"))return}var s=0,o=0;switch(n.which){case 37:s=n.metaKey?-t.contentWidth:n.altKey?-t.containerWidth:-30;break;case 38:o=n.metaKey?t.contentHeight:n.altKey?t.containerHeight:30;break;case 39:s=n.metaKey?t.contentWidth:n.altKey?t.containerWidth:30;break;case 40:o=n.metaKey?-t.contentHeight:n.altKey?-t.containerHeight:-30;break;case 32:o=n.shiftKey?t.containerHeight:-t.containerHeight;break;case 33:o=t.containerHeight;break;case 34:o=-t.containerHeight;break;case 36:o=t.contentHeight;break;case 35:o=-t.contentHeight;break;default:return}t.settings.suppressScrollX&&0!==s||t.settings.suppressScrollY&&0!==o||(e.scrollTop-=o,e.scrollLeft+=s,E(t),function(n,r){var i=Math.floor(e.scrollTop);if(0===n){if(!t.scrollbarYActive)return!1;if(0===i&&r>0||i>=t.contentHeight-t.containerHeight&&r<0)return!t.settings.wheelPropagation}var s=e.scrollLeft;if(0===r){if(!t.scrollbarXActive)return!1;if(0===s&&n<0||s>=t.contentWidth-t.containerWidth&&n>0)return!t.settings.wheelPropagation}return!0}(s,o)&&n.preventDefault())}}))},wheel:function(t){var e=t.element;function n(n){var i=function(t){var e=t.deltaX,n=-1*t.deltaY;return void 0!==e&&void 0!==n||(e=-1*t.wheelDeltaX/6,n=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(e*=10,n*=10),e!=e&&n!=n&&(e=0,n=t.wheelDelta),t.shiftKey?[-n,-e]:[e,n]}(n),s=i[0],o=i[1];if(!function(t,n,i){if(!I.isWebKit&&e.querySelector("select:focus"))return!0;if(!e.contains(t))return!1;for(var s=t;s&&s!==e;){if(s.classList.contains(d))return!0;var o=r(s);if(i&&o.overflowY.match(/(scroll|auto)/)){var a=s.scrollHeight-s.clientHeight;if(a>0&&(s.scrollTop>0&&i<0||s.scrollTop<a&&i>0))return!0}if(n&&o.overflowX.match(/(scroll|auto)/)){var l=s.scrollWidth-s.clientWidth;if(l>0&&(s.scrollLeft>0&&n<0||s.scrollLeft<l&&n>0))return!0}s=s.parentNode}return!1}(n.target,s,o)){var a=!1;t.settings.useBothWheelAxes?t.scrollbarYActive&&!t.scrollbarXActive?(o?e.scrollTop-=o*t.settings.wheelSpeed:e.scrollTop+=s*t.settings.wheelSpeed,a=!0):t.scrollbarXActive&&!t.scrollbarYActive&&(s?e.scrollLeft+=s*t.settings.wheelSpeed:e.scrollLeft-=o*t.settings.wheelSpeed,a=!0):(e.scrollTop-=o*t.settings.wheelSpeed,e.scrollLeft+=s*t.settings.wheelSpeed),E(t),(a=a||function(n,r){var i=Math.floor(e.scrollTop),s=0===e.scrollTop,o=i+e.offsetHeight===e.scrollHeight,a=0===e.scrollLeft,l=e.scrollLeft+e.offsetWidth===e.scrollWidth;return!(Math.abs(r)>Math.abs(n)?s||o:a||l)||!t.settings.wheelPropagation}(s,o))&&!n.ctrlKey&&(n.stopPropagation(),n.preventDefault())}}void 0!==window.onwheel?t.event.bind(e,"wheel",n):void 0!==window.onmousewheel&&t.event.bind(e,"mousewheel",n)},touch:function(t){if(I.supportsTouch||I.supportsIePointer){var e=t.element,n={},i=0,s={},o=null;I.supportsTouch?(t.event.bind(e,"touchstart",u),t.event.bind(e,"touchmove",h),t.event.bind(e,"touchend",f)):I.supportsIePointer&&(window.PointerEvent?(t.event.bind(e,"pointerdown",u),t.event.bind(e,"pointermove",h),t.event.bind(e,"pointerup",f)):window.MSPointerEvent&&(t.event.bind(e,"MSPointerDown",u),t.event.bind(e,"MSPointerMove",h),t.event.bind(e,"MSPointerUp",f)))}function a(n,r){e.scrollTop-=r,e.scrollLeft-=n,E(t)}function l(t){return t.targetTouches?t.targetTouches[0]:t}function c(t){return!(t.pointerType&&"pen"===t.pointerType&&0===t.buttons||(!t.targetTouches||1!==t.targetTouches.length)&&(!t.pointerType||"mouse"===t.pointerType||t.pointerType===t.MSPOINTER_TYPE_MOUSE))}function u(t){if(c(t)){var e=l(t);n.pageX=e.pageX,n.pageY=e.pageY,i=(new Date).getTime(),null!==o&&clearInterval(o)}}function h(o){if(c(o)){var u=l(o),h={pageX:u.pageX,pageY:u.pageY},f=h.pageX-n.pageX,p=h.pageY-n.pageY;if(function(t,n,i){if(!e.contains(t))return!1;for(var s=t;s&&s!==e;){if(s.classList.contains(d))return!0;var o=r(s);if(i&&o.overflowY.match(/(scroll|auto)/)){var a=s.scrollHeight-s.clientHeight;if(a>0&&(s.scrollTop>0&&i<0||s.scrollTop<a&&i>0))return!0}if(n&&o.overflowX.match(/(scroll|auto)/)){var l=s.scrollWidth-s.clientWidth;if(l>0&&(s.scrollLeft>0&&n<0||s.scrollLeft<l&&n>0))return!0}s=s.parentNode}return!1}(o.target,f,p))return;a(f,p),n=h;var m=(new Date).getTime(),g=m-i;g>0&&(s.x=f/g,s.y=p/g,i=m),function(n,r){var i=Math.floor(e.scrollTop),s=e.scrollLeft,o=Math.abs(n),a=Math.abs(r);if(a>o){if(r<0&&i===t.contentHeight-t.containerHeight||r>0&&0===i)return 0===window.scrollY&&r>0&&I.isChrome}else if(o>a&&(n<0&&s===t.contentWidth-t.containerWidth||n>0&&0===s))return!0;return!0}(f,p)&&o.preventDefault()}}function f(){t.settings.swipeEasing&&(clearInterval(o),o=setInterval((function(){t.isInitialized?clearInterval(o):s.x||s.y?Math.abs(s.x)<.01&&Math.abs(s.y)<.01?clearInterval(o):(a(30*s.x,30*s.y),s.x*=.8,s.y*=.8):clearInterval(o)}),10))}}},C=function(t,e){var n=this;if(void 0===e&&(e={}),"string"==typeof t&&(t=document.querySelector(t)),!t||!t.nodeName)throw new Error("no element is specified to initialize PerfectScrollbar");for(var o in this.element=t,t.classList.add("ps"),this.settings={handlers:["click-rail","drag-thumb","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollingThreshold:1e3,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!0,wheelSpeed:1},e)this.settings[o]=e[o];this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var a,l,c=function(){return t.classList.add(f)},d=function(){return t.classList.remove(f)};this.isRtl="rtl"===r(t).direction,!0===this.isRtl&&t.classList.add("ps__rtl"),this.isNegativeScroll=(l=t.scrollLeft,t.scrollLeft=-1,a=t.scrollLeft<0,t.scrollLeft=l,a),this.negativeScrollAdjustment=this.isNegativeScroll?t.scrollWidth-t.clientWidth:0,this.event=new w,this.ownerDocument=t.ownerDocument||document,this.scrollbarXRail=s(h("x")),t.appendChild(this.scrollbarXRail),this.scrollbarX=s(u("x")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute("tabindex",0),this.event.bind(this.scrollbarX,"focus",c),this.event.bind(this.scrollbarX,"blur",d),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var p=r(this.scrollbarXRail);this.scrollbarXBottom=parseInt(p.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=T(p.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=T(p.borderLeftWidth)+T(p.borderRightWidth),i(this.scrollbarXRail,{display:"block"}),this.railXMarginWidth=T(p.marginLeft)+T(p.marginRight),i(this.scrollbarXRail,{display:""}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=s(h("y")),t.appendChild(this.scrollbarYRail),this.scrollbarY=s(u("y")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute("tabindex",0),this.event.bind(this.scrollbarY,"focus",c),this.event.bind(this.scrollbarY,"blur",d),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var m=r(this.scrollbarYRail);this.scrollbarYRight=parseInt(m.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=T(m.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?function(t){var e=r(t);return T(e.width)+T(e.paddingLeft)+T(e.paddingRight)+T(e.borderLeftWidth)+T(e.borderRightWidth)}(this.scrollbarY):null,this.railBorderYWidth=T(m.borderTopWidth)+T(m.borderBottomWidth),i(this.scrollbarYRail,{display:"block"}),this.railYMarginHeight=T(m.marginTop)+T(m.marginBottom),i(this.scrollbarYRail,{display:""}),this.railYHeight=null,this.railYRatio=null,this.reach={x:t.scrollLeft<=0?"start":t.scrollLeft>=this.contentWidth-this.containerWidth?"end":null,y:t.scrollTop<=0?"start":t.scrollTop>=this.contentHeight-this.containerHeight?"end":null},this.isAlive=!0,this.settings.handlers.forEach((function(t){return q[t](n)})),this.lastScrollTop=Math.floor(t.scrollTop),this.lastScrollLeft=t.scrollLeft,this.event.bind(this.element,"scroll",(function(t){return n.onScroll(t)})),E(this)};C.prototype.update=function(){this.isAlive&&(this.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,i(this.scrollbarXRail,{display:"block"}),i(this.scrollbarYRail,{display:"block"}),this.railXMarginWidth=T(r(this.scrollbarXRail).marginLeft)+T(r(this.scrollbarXRail).marginRight),this.railYMarginHeight=T(r(this.scrollbarYRail).marginTop)+T(r(this.scrollbarYRail).marginBottom),i(this.scrollbarXRail,{display:"none"}),i(this.scrollbarYRail,{display:"none"}),E(this),S(this,"top",0,!1,!0),S(this,"left",0,!1,!0),i(this.scrollbarXRail,{display:""}),i(this.scrollbarYRail,{display:""}))},C.prototype.onScroll=function(t){this.isAlive&&(E(this),S(this,"top",this.element.scrollTop-this.lastScrollTop),S(this,"left",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=Math.floor(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)},C.prototype.destroy=function(){this.isAlive&&(this.event.unbindAll(),l(this.scrollbarX),l(this.scrollbarY),l(this.scrollbarXRail),l(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)},C.prototype.removePsClasses=function(){this.element.className=this.element.className.split(" ").filter((function(t){return!t.match(/^ps([-_].+|)$/)})).join(" ")};const O=C},53943:function(t,e,n){var r,i,s;s=this,r=[n(73609)],void 0===(i=function(t){return s.Bloodhound=(e=t,n=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:e.isArray,isFunction:e.isFunction,isObject:e.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(t){return t instanceof e},toStr:function(t){return n.isUndefined(t)||null===t?"":t+""},bind:e.proxy,each:function(t,n){e.each(t,(function(t,e){return n(e,t)}))},map:e.map,filter:e.grep,every:function(t,n){var r=!0;return t?(e.each(t,(function(e,i){if(!(r=n.call(null,i,e,t)))return!1})),!!r):r},some:function(t,n){var r=!1;return t?(e.each(t,(function(e,i){if(r=n.call(null,i,e,t))return!1})),!!r):r},mixin:e.extend,identity:function(t){return t},clone:function(t){return e.extend(!0,{},t)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(t){return e.isFunction(t)?t:function(){return String(t)}},defer:function(t){setTimeout(t,0)},debounce:function(t,e,n){var r,i;return function(){var s,o,a=this,l=arguments;return s=function(){r=null,n||(i=t.apply(a,l))},o=n&&!r,clearTimeout(r),r=setTimeout(s,e),o&&(i=t.apply(a,l)),i}},throttle:function(t,e){var n,r,i,s,o,a;return o=0,a=function(){o=new Date,i=null,s=t.apply(n,r)},function(){var l=new Date,c=e-(l-o);return n=this,r=arguments,c<=0?(clearTimeout(i),i=null,o=l,s=t.apply(n,r)):i||(i=setTimeout(a,c)),s}},stringify:function(t){return n.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),r="0.11.1",i=function(){"use strict";return{nonword:e,whitespace:t,obj:{nonword:r(e),whitespace:r(t)}};function t(t){return(t=n.toStr(t))?t.split(/\s+/):[]}function e(t){return(t=n.toStr(t))?t.split(/\W+/):[]}function r(t){return function(e){return e=n.isArray(e)?e:[].slice.call(arguments,0),function(r){var i=[];return n.each(e,(function(e){i=i.concat(t(n.toStr(r[e])))})),i}}}}(),o=function(){"use strict";function t(t){this.maxSize=n.isNumber(t)?t:100,this.reset(),this.maxSize<=0&&(this.set=this.get=e.noop)}function r(){this.head=this.tail=null}function i(t,e){this.key=t,this.val=e,this.prev=this.next=null}return n.mixin(t.prototype,{set:function(t,e){var n,r=this.list.tail;this.size>=this.maxSize&&(this.list.remove(r),delete this.hash[r.key],this.size--),(n=this.hash[t])?(n.val=e,this.list.moveToFront(n)):(n=new i(t,e),this.list.add(n),this.hash[t]=n,this.size++)},get:function(t){var e=this.hash[t];if(e)return this.list.moveToFront(e),e.val},reset:function(){this.size=0,this.hash={},this.list=new r}}),n.mixin(r.prototype,{add:function(t){this.head&&(t.next=this.head,this.head.prev=t),this.head=t,this.tail=this.tail||t},remove:function(t){t.prev?t.prev.next=t.next:this.head=t.next,t.next?t.next.prev=t.prev:this.tail=t.prev},moveToFront:function(t){this.remove(t),this.add(t)}}),t}(),a=function(){"use strict";var t;try{(t=window.localStorage).setItem("~~~","!"),t.removeItem("~~~")}catch(e){t=null}function r(e,r){this.prefix=["__",e,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+n.escapeRegExChars(this.prefix)),this.ls=r||t,!this.ls&&this._noop()}return n.mixin(r.prototype,{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},_noop:function(){this.get=this.set=this.remove=this.clear=this.isExpired=n.noop},_safeSet:function(t,e){try{this.ls.setItem(t,e)}catch(t){"QuotaExceededError"===t.name&&(this.clear(),this._noop())}},get:function(t){return this.isExpired(t)&&this.remove(t),o(this.ls.getItem(this._prefix(t)))},set:function(t,e,r){return n.isNumber(r)?this._safeSet(this._ttlKey(t),s(i()+r)):this.ls.removeItem(this._ttlKey(t)),this._safeSet(this._prefix(t),s(e))},remove:function(t){return this.ls.removeItem(this._ttlKey(t)),this.ls.removeItem(this._prefix(t)),this},clear:function(){var e,n=function(e){var n,r,i=[],s=t.length;for(n=0;n<s;n++)(r=t.key(n)).match(e)&&i.push(r.replace(e,""));return i}(this.keyMatcher);for(e=n.length;e--;)this.remove(n[e]);return this},isExpired:function(t){var e=o(this.ls.getItem(this._ttlKey(t)));return!!(n.isNumber(e)&&i()>e)}}),r;function i(){return(new Date).getTime()}function s(t){return JSON.stringify(n.isUndefined(t)?null:t)}function o(t){return e.parseJSON(t)}}(),l=function(){"use strict";var t=0,r={},i=6,s=new o(10);function a(t){t=t||{},this.cancelled=!1,this.lastReq=null,this._send=t.transport,this._get=t.limiter?t.limiter(this._get):this._get,this._cache=!1===t.cache?new o(0):s}return a.setMaxPendingRequests=function(t){i=t},a.resetCache=function(){s.reset()},n.mixin(a.prototype,{_fingerprint:function(t){return(t=t||{}).url+t.type+e.param(t.data||{})},_get:function(e,n){var s,o,a=this;function l(t){n(null,t),a._cache.set(s,t)}function c(){n(!0)}function u(){t--,delete r[s],a.onDeckRequestArgs&&(a._get.apply(a,a.onDeckRequestArgs),a.onDeckRequestArgs=null)}s=this._fingerprint(e),this.cancelled||s!==this.lastReq||((o=r[s])?o.done(l).fail(c):t<i?(t++,r[s]=this._send(e).done(l).fail(c).always(u)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(t,r){var i,s;r=r||e.noop,t=n.isString(t)?{url:t}:t||{},s=this._fingerprint(t),this.cancelled=!1,this.lastReq=s,(i=this._cache.get(s))?r(null,i):this._get(t,r)},cancel:function(){this.cancelled=!0}}),a}(),c=window.SearchIndex=function(){"use strict";function t(t){(t=t||{}).datumTokenizer&&t.queryTokenizer||e.error("datumTokenizer and queryTokenizer are both required"),this.identify=t.identify||n.stringify,this.datumTokenizer=t.datumTokenizer,this.queryTokenizer=t.queryTokenizer,this.reset()}return n.mixin(t.prototype,{bootstrap:function(t){this.datums=t.datums,this.trie=t.trie},add:function(t){var e=this;t=n.isArray(t)?t:[t],n.each(t,(function(t){var s,o;e.datums[s=e.identify(t)]=t,o=r(e.datumTokenizer(t)),n.each(o,(function(t){var n,r,o;for(n=e.trie,r=t.split("");o=r.shift();)(n=n.c[o]||(n.c[o]=i())).i.push(s)}))}))},get:function(t){var e=this;return n.map(t,(function(t){return e.datums[t]}))},search:function(t){var e,i,s=this;return e=r(this.queryTokenizer(t)),n.each(e,(function(t){var e,n,r,o;if(i&&0===i.length)return!1;for(e=s.trie,n=t.split("");e&&(r=n.shift());)e=e.c[r];if(!e||0!==n.length)return i=[],!1;o=e.i.slice(0),i=i?function(t,e){var n=0,r=0,i=[];t=t.sort(),e=e.sort();for(var s=t.length,o=e.length;n<s&&r<o;)t[n]<e[r]?n++:(t[n]>e[r]||(i.push(t[n]),n++),r++);return i}(i,o):o})),i?n.map(function(t){for(var e={},n=[],r=0,i=t.length;r<i;r++)e[t[r]]||(e[t[r]]=!0,n.push(t[r]));return n}(i),(function(t){return s.datums[t]})):[]},all:function(){var t=[];for(var e in this.datums)t.push(this.datums[e]);return t},reset:function(){this.datums={},this.trie=i()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),t;function r(t){return t=n.filter(t,(function(t){return!!t})),n.map(t,(function(t){return t.toLowerCase()}))}function i(){var t={i:[],c:{}};return t}}(),u=function(){"use strict";var t;function e(t){this.url=t.url,this.ttl=t.ttl,this.cache=t.cache,this.prepare=t.prepare,this.transform=t.transform,this.transport=t.transport,this.thumbprint=t.thumbprint,this.storage=new a(t.cacheKey)}return t={data:"data",protocol:"protocol",thumbprint:"thumbprint"},n.mixin(e.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},store:function(e){this.cache&&(this.storage.set(t.data,e,this.ttl),this.storage.set(t.protocol,location.protocol,this.ttl),this.storage.set(t.thumbprint,this.thumbprint,this.ttl))},fromCache:function(){var e,n={};return this.cache?(n.data=this.storage.get(t.data),n.protocol=this.storage.get(t.protocol),n.thumbprint=this.storage.get(t.thumbprint),e=n.thumbprint!==this.thumbprint||n.protocol!==location.protocol,n.data&&!e?n.data:null):null},fromNetwork:function(t){var e,n=this;t&&(e=this.prepare(this._settings()),this.transport(e).fail((function(){t(!0)})).done((function(e){t(null,n.transform(e))})))},clear:function(){return this.storage.clear(),this}}),e}(),h=function(){"use strict";function t(t){this.url=t.url,this.prepare=t.prepare,this.transform=t.transform,this.transport=new l({cache:t.cache,limiter:t.limiter,transport:t.transport})}return n.mixin(t.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},get:function(t,e){var n,r=this;if(e)return t=t||"",n=this.prepare(t,this._settings()),this.transport.get(n,(function(t,n){e(t?[]:r.transform(n))}))},cancelLastRequest:function(){this.transport.cancel()}}),t}(),d=function(){"use strict";return function(i){var s,o;return s={initialize:!0,identify:n.stringify,datumTokenizer:null,queryTokenizer:null,sufficient:5,sorter:null,local:[],prefetch:null,remote:null},!(i=n.mixin(s,i||{})).datumTokenizer&&e.error("datumTokenizer is required"),!i.queryTokenizer&&e.error("queryTokenizer is required"),o=i.sorter,i.sorter=o?function(t){return t.sort(o)}:n.identity,i.local=n.isFunction(i.local)?i.local():i.local,i.prefetch=function(i){var s;return i?(s={url:null,ttl:864e5,cache:!0,cacheKey:null,thumbprint:"",prepare:n.identity,transform:n.identity,transport:null},i=n.isString(i)?{url:i}:i,!(i=n.mixin(s,i)).url&&e.error("prefetch requires url to be set"),i.transform=i.filter||i.transform,i.cacheKey=i.cacheKey||i.url,i.thumbprint=r+i.thumbprint,i.transport=i.transport?t(i.transport):e.ajax,i):null}(i.prefetch),i.remote=function(r){var i;if(r)return i={url:null,cache:!0,prepare:null,replace:null,wildcard:null,limiter:null,rateLimitBy:"debounce",rateLimitWait:300,transform:n.identity,transport:null},r=n.isString(r)?{url:r}:r,!(r=n.mixin(i,r)).url&&e.error("remote requires url to be set"),r.transform=r.filter||r.transform,r.prepare=function(t){var e,n,r;return e=t.prepare,n=t.replace,r=t.wildcard,e||(n?i:t.wildcard?s:o);function i(t,e){return e.url=n(e.url,t),e}function s(t,e){return e.url=e.url.replace(r,encodeURIComponent(t)),e}function o(t,e){return e}}(r),r.limiter=function(t){var e,r,i;return e=t.limiter,r=t.rateLimitBy,i=t.rateLimitWait,e||(e=/^throttle$/i.test(r)?o(i):s(i)),e;function s(t){return function(e){return n.debounce(e,t)}}function o(t){return function(e){return n.throttle(e,t)}}}(r),r.transport=r.transport?t(r.transport):e.ajax,delete r.replace,delete r.wildcard,delete r.rateLimitBy,delete r.rateLimitWait,r}(i.remote),i};function t(t){return function(r){var i=e.Deferred();return t(r,(function(t){n.defer((function(){i.resolve(t)}))}),(function(t){n.defer((function(){i.reject(t)}))})),i}}}(),function(){"use strict";var t;function r(t){t=d(t),this.sorter=t.sorter,this.identify=t.identify,this.sufficient=t.sufficient,this.local=t.local,this.remote=t.remote?new h(t.remote):null,this.prefetch=t.prefetch?new u(t.prefetch):null,this.index=new c({identify:this.identify,datumTokenizer:t.datumTokenizer,queryTokenizer:t.queryTokenizer}),!1!==t.initialize&&this.initialize()}return t=window&&window.Bloodhound,r.noConflict=function(){return window&&(window.Bloodhound=t),r},r.tokenizers=i,n.mixin(r.prototype,{__ttAdapter:function(){var t=this;return this.remote?function(e,n,r){return t.search(e,n,r)}:function(e,n){return t.search(e,n)}},_loadPrefetch:function(){var t,n,r=this;return t=e.Deferred(),this.prefetch?(n=this.prefetch.fromCache())?(this.index.bootstrap(n),t.resolve()):this.prefetch.fromNetwork((function(e,n){if(e)return t.reject();r.add(n),r.prefetch.store(r.index.serialize()),t.resolve()})):t.resolve(),t.promise()},_initialize:function(){var t=this;return this.clear(),(this.initPromise=this._loadPrefetch()).done((function(){t.add(t.local)})),this.initPromise},initialize:function(t){return!this.initPromise||t?this._initialize():this.initPromise},add:function(t){return this.index.add(t),this},get:function(t){return t=n.isArray(t)?t:[].slice.call(arguments),this.index.get(t)},search:function(t,e,r){var i,s=this;return i=this.sorter(this.index.search(t)),e(this.remote?i.slice():i),this.remote&&i.length<this.sufficient?this.remote.get(t,(function(t){var e=[];n.each(t,(function(t){!n.some(i,(function(e){return s.identify(t)===s.identify(e)}))&&e.push(t)})),r&&r(e)})):this.remote&&this.remote.cancelLastRequest(),this},all:function(){return this.index.all()},clear:function(){return this.index.reset(),this},clearPrefetchCache:function(){return this.prefetch&&this.prefetch.clear(),this},clearRemoteCache:function(){return l.resetCache(),this},ttAdapter:function(){return this.__ttAdapter()}}),r}());var e,n,r,i,o,a,l,c,u,h,d}.apply(e,r))||(t.exports=i),r=[n(73609)],void 0===(i=function(t){return e=t,n=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:e.isArray,isFunction:e.isFunction,isObject:e.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(t){return t instanceof e},toStr:function(t){return n.isUndefined(t)||null===t?"":t+""},bind:e.proxy,each:function(t,n){e.each(t,(function(t,e){return n(e,t)}))},map:e.map,filter:e.grep,every:function(t,n){var r=!0;return t?(e.each(t,(function(e,i){if(!(r=n.call(null,i,e,t)))return!1})),!!r):r},some:function(t,n){var r=!1;return t?(e.each(t,(function(e,i){if(r=n.call(null,i,e,t))return!1})),!!r):r},mixin:e.extend,identity:function(t){return t},clone:function(t){return e.extend(!0,{},t)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(t){return e.isFunction(t)?t:function(){return String(t)}},defer:function(t){setTimeout(t,0)},debounce:function(t,e,n){var r,i;return function(){var s,o,a=this,l=arguments;return s=function(){r=null,n||(i=t.apply(a,l))},o=n&&!r,clearTimeout(r),r=setTimeout(s,e),o&&(i=t.apply(a,l)),i}},throttle:function(t,e){var n,r,i,s,o,a;return o=0,a=function(){o=new Date,i=null,s=t.apply(n,r)},function(){var l=new Date,c=e-(l-o);return n=this,r=arguments,c<=0?(clearTimeout(i),i=null,o=l,s=t.apply(n,r)):i||(i=setTimeout(a,c)),s}},stringify:function(t){return n.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),r=function(){"use strict";var t={wrapper:"twitter-typeahead",input:"tt-input",hint:"tt-hint",menu:"tt-menu",dataset:"tt-dataset",suggestion:"tt-suggestion",selectable:"tt-selectable",empty:"tt-empty",open:"tt-open",cursor:"tt-cursor",highlight:"tt-highlight"};return function(r){var i,s;return s=n.mixin({},t,r),{css:(i={css:(a={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},menu:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}},n.isMsie()&&n.mixin(a.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),a),classes:s,html:(o=s,{wrapper:'<span class="'+o.wrapper+'"></span>',menu:'<div class="'+o.menu+'"></div>'}),selectors:e(s)}).css,html:i.html,classes:i.classes,selectors:i.selectors,mixin:function(t){n.mixin(t,i)}};var o;var a};function e(t){var e={};return n.each(t,(function(t,n){e[n]="."+t})),e}}(),i=function(){"use strict";var t;function r(t){t&&t.el||e.error("EventBus initialized without el"),this.$el=e(t.el)}return"typeahead:",t={render:"rendered",cursorchange:"cursorchanged",select:"selected",autocomplete:"autocompleted"},n.mixin(r.prototype,{_trigger:function(t,n){var r;return r=e.Event("typeahead:"+t),(n=n||[]).unshift(r),this.$el.trigger.apply(this.$el,n),r},before:function(t){var e;return e=[].slice.call(arguments,1),this._trigger("before"+t,e).isDefaultPrevented()},trigger:function(e){var n;this._trigger(e,[].slice.call(arguments,1)),(n=t[e])&&this._trigger(n,[].slice.call(arguments,1))}}),r}(),s=function(){"use strict";var t=/\s+/,e=window.setImmediate?function(t){setImmediate((function(){t()}))}:function(t){setTimeout((function(){t()}),0)};return{onSync:function(t,e,r){return n.call(this,"sync",t,e,r)},onAsync:function(t,e,r){return n.call(this,"async",t,e,r)},off:function(e){var n;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)delete this._callbacks[n];return this},trigger:function(n){var i,s,o,a,l;if(!this._callbacks)return this;for(n=n.split(t),o=[].slice.call(arguments,1);(i=n.shift())&&(s=this._callbacks[i]);)a=r(s.sync,this,[i].concat(o)),l=r(s.async,this,[i].concat(o)),a()&&e(l);return this}};function n(e,n,r,i){var s;if(!r)return this;for(n=n.split(t),r=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(r,i):r,this._callbacks=this._callbacks||{};s=n.shift();)this._callbacks[s]=this._callbacks[s]||{sync:[],async:[]},this._callbacks[s][e].push(r);return this}function r(t,e,n){return function(){for(var r,i=0,s=t.length;!r&&i<s;i+=1)r=!1===t[i].apply(e,n);return!r}}}(),o=function(t){"use strict";var e={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(r){var i;(r=n.mixin({},e,r)).node&&r.pattern&&(r.pattern=n.isArray(r.pattern)?r.pattern:[r.pattern],i=function(t,e,r){for(var i,s=[],o=0,a=t.length;o<a;o++)s.push(n.escapeRegExChars(t[o]));return i=r?"\\b("+s.join("|")+")\\b":"("+s.join("|")+")",e?new RegExp(i):new RegExp(i,"i")}(r.pattern,r.caseSensitive,r.wordsOnly),function t(e,n){for(var r,i=0;i<e.childNodes.length;i++)3===(r=e.childNodes[i]).nodeType?i+=n(r)?1:0:t(r,n)}(r.node,(function(e){var n,s,o;return(n=i.exec(e.data))&&(o=t.createElement(r.tagName),r.className&&(o.className=r.className),(s=e.splitText(n.index)).splitText(n[0].length),o.appendChild(s.cloneNode(!0)),e.parentNode.replaceChild(o,s)),!!n})))}}(window.document),a=function(){"use strict";var t;function r(t,r){var i;(t=t||{}).input||e.error("input is missing"),r.mixin(this),this.$hint=e(t.hint),this.$input=e(t.input),this.query=this.$input.val(),this.queryWhenFocused=this.hasFocus()?this.query:null,this.$overflowHelper=(i=this.$input,e('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:i.css("font-family"),fontSize:i.css("font-size"),fontStyle:i.css("font-style"),fontVariant:i.css("font-variant"),fontWeight:i.css("font-weight"),wordSpacing:i.css("word-spacing"),letterSpacing:i.css("letter-spacing"),textIndent:i.css("text-indent"),textRendering:i.css("text-rendering"),textTransform:i.css("text-transform")}).insertAfter(i)),this._checkLanguageDirection(),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=n.noop)}return t={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"},r.normalizeQuery=function(t){return n.toStr(t).replace(/^\s*/g,"").replace(/\s{2,}/g," ")},n.mixin(r.prototype,s,{_onBlur:function(){this.resetInputValue(),this.trigger("blurred")},_onFocus:function(){this.queryWhenFocused=this.query,this.trigger("focused")},_onKeydown:function(e){var n=t[e.which||e.keyCode];this._managePreventDefault(n,e),n&&this._shouldTrigger(n,e)&&this.trigger(n+"Keyed",e)},_onInput:function(){this._setQuery(this.getInputValue()),this.clearHintIfInvalid(),this._checkLanguageDirection()},_managePreventDefault:function(t,e){var n;switch(t){case"up":case"down":n=!i(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;switch(t){case"tab":n=!i(e);break;default:n=!0}return n},_checkLanguageDirection:function(){var t=(this.$input.css("direction")||"ltr").toLowerCase();this.dir!==t&&(this.dir=t,this.$hint.attr("dir",t),this.trigger("langDirChanged",t))},_setQuery:function(t,e){var n,i,s,o;s=t,o=this.query,i=!!(n=r.normalizeQuery(s)===r.normalizeQuery(o))&&this.query.length!==t.length,this.query=t,e||n?!e&&i&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},bind:function(){var e,r,i,s,o=this;return e=n.bind(this._onBlur,this),r=n.bind(this._onFocus,this),i=n.bind(this._onKeydown,this),s=n.bind(this._onInput,this),this.$input.on("blur.tt",e).on("focus.tt",r).on("keydown.tt",i),!n.isMsie()||n.isMsie()>9?this.$input.on("input.tt",s):this.$input.on("keydown.tt keypress.tt cut.tt paste.tt",(function(e){t[e.which||e.keyCode]||n.defer(n.bind(o._onInput,o,e))})),this},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getLangDir:function(){return this.dir},getQuery:function(){return this.query||""},setQuery:function(t,e){this.setInputValue(t),this._setQuery(t,e)},hasQueryChangedSinceLastFocus:function(){return this.query!==this.queryWhenFocused},getInputValue:function(){return this.$input.val()},setInputValue:function(t){this.$input.val(t),this.clearHintIfInvalid(),this._checkLanguageDirection()},resetInputValue:function(){this.setInputValue(this.query)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),(""===t||!n||this.hasOverflow())&&this.clearHint()},hasFocus:function(){return this.$input.is(":focus")},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,r;return t=this.$input.val().length,e=this.$input[0].selectionStart,n.isNumber(e)?e===t:!document.selection||((r=document.selection.createRange()).moveStart("character",-t),t===r.text.length)},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$overflowHelper.remove(),this.$hint=this.$input=this.$overflowHelper=e("<div>")}}),r;function i(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}}(),l=function(){"use strict";var t,r;function i(t,i){var s;(t=t||{}).templates=t.templates||{},t.templates.notFound=t.templates.notFound||t.templates.empty,t.source||e.error("missing source"),t.node||e.error("missing node"),t.name&&(s=t.name,!/^[_a-zA-Z0-9-]+$/.test(s))&&e.error("invalid dataset name: "+t.name),i.mixin(this),this.highlight=!!t.highlight,this.name=t.name||r(),this.limit=t.limit||5,this.displayFn=function(t){return t=t||n.stringify,n.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.templates=function(t,r){return{notFound:t.notFound&&n.templatify(t.notFound),pending:t.pending&&n.templatify(t.pending),header:t.header&&n.templatify(t.header),footer:t.footer&&n.templatify(t.footer),suggestion:t.suggestion||i};function i(t){return e("<div>").text(r(t))}}(t.templates,this.displayFn),this.source=t.source.__ttAdapter?t.source.__ttAdapter():t.source,this.async=n.isUndefined(t.async)?this.source.length>2:!!t.async,this._resetLastSuggestion(),this.$el=e(t.node).addClass(this.classes.dataset).addClass(this.classes.dataset+"-"+this.name)}return t={val:"tt-selectable-display",obj:"tt-selectable-object"},r=n.getIdGenerator(),i.extractData=function(n){var r=e(n);return r.data(t.obj)?{val:r.data(t.val)||"",obj:r.data(t.obj)||null}:null},n.mixin(i.prototype,s,{_overwrite:function(t,e){(e=e||[]).length?this._renderSuggestions(t,e):this.async&&this.templates.pending?this._renderPending(t):!this.async&&this.templates.notFound?this._renderNotFound(t):this._empty(),this.trigger("rendered",this.name,e,!1)},_append:function(t,e){(e=e||[]).length&&this.$lastSuggestion.length?this._appendSuggestions(t,e):e.length?this._renderSuggestions(t,e):!this.$lastSuggestion.length&&this.templates.notFound&&this._renderNotFound(t),this.trigger("rendered",this.name,e,!0)},_renderSuggestions:function(t,e){var n;n=this._getSuggestionsFragment(t,e),this.$lastSuggestion=n.children().last(),this.$el.html(n).prepend(this._getHeader(t,e)).append(this._getFooter(t,e))},_appendSuggestions:function(t,e){var n,r;r=(n=this._getSuggestionsFragment(t,e)).children().last(),this.$lastSuggestion.after(n),this.$lastSuggestion=r},_renderPending:function(t){var e=this.templates.pending;this._resetLastSuggestion(),e&&this.$el.html(e({query:t,dataset:this.name}))},_renderNotFound:function(t){var e=this.templates.notFound;this._resetLastSuggestion(),e&&this.$el.html(e({query:t,dataset:this.name}))},_empty:function(){this.$el.empty(),this._resetLastSuggestion()},_getSuggestionsFragment:function(r,i){var s,a=this;return s=document.createDocumentFragment(),n.each(i,(function(n){var i,o;o=a._injectQuery(r,n),i=e(a.templates.suggestion(o)).data(t.obj,n).data(t.val,a.displayFn(n)).addClass(a.classes.suggestion+" "+a.classes.selectable),s.appendChild(i[0])})),this.highlight&&o({className:this.classes.highlight,node:s,pattern:r}),e(s)},_getFooter:function(t,e){return this.templates.footer?this.templates.footer({query:t,suggestions:e,dataset:this.name}):null},_getHeader:function(t,e){return this.templates.header?this.templates.header({query:t,suggestions:e,dataset:this.name}):null},_resetLastSuggestion:function(){this.$lastSuggestion=e()},_injectQuery:function(t,e){return n.isObject(e)?n.mixin({_query:t},e):e},update:function(t){var n=this,r=!1,i=!1,s=0;function o(e){i||(i=!0,e=(e||[]).slice(0,n.limit),s=e.length,n._overwrite(t,e),s<n.limit&&n.async&&n.trigger("asyncRequested",t))}this.cancel(),this.cancel=function(){r=!0,n.cancel=e.noop,n.async&&n.trigger("asyncCanceled",t)},this.source(t,o,(function(i){i=i||[],!r&&s<n.limit&&(n.cancel=e.noop,s+=i.length,n._append(t,i.slice(0,n.limit-s)),n.async&&n.trigger("asyncReceived",t))})),!i&&o([])},cancel:e.noop,clear:function(){this._empty(),this.cancel(),this.trigger("cleared")},isEmpty:function(){return this.$el.is(":empty")},destroy:function(){this.$el=e("<div>")}}),i}(),c=function(){"use strict";function t(t,r){var i=this;(t=t||{}).node||e.error("node is required"),r.mixin(this),this.$node=e(t.node),this.query=null,this.datasets=n.map(t.datasets,(function(t){var n=i.$node.find(t.node).first();return t.node=n.length?n:e("<div>").appendTo(i.$node),new l(t,r)}))}return n.mixin(t.prototype,s,{_onSelectableClick:function(t){this.trigger("selectableClicked",e(t.currentTarget))},_onRendered:function(t,e,n,r){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetRendered",e,n,r)},_onCleared:function(){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetCleared")},_propagate:function(){this.trigger.apply(this,arguments)},_allDatasetsEmpty:function(){return n.every(this.datasets,(function(t){return t.isEmpty()}))},_getSelectables:function(){return this.$node.find(this.selectors.selectable)},_removeCursor:function(){var t=this.getActiveSelectable();t&&t.removeClass(this.classes.cursor)},_ensureVisible:function(t){var e,n,r,i;n=(e=t.position().top)+t.outerHeight(!0),r=this.$node.scrollTop(),i=this.$node.height()+parseInt(this.$node.css("paddingTop"),10)+parseInt(this.$node.css("paddingBottom"),10),e<0?this.$node.scrollTop(r+e):i<n&&this.$node.scrollTop(r+(n-i))},bind:function(){var t,e=this;return t=n.bind(this._onSelectableClick,this),this.$node.on("click.tt",this.selectors.selectable,t),n.each(this.datasets,(function(t){t.onSync("asyncRequested",e._propagate,e).onSync("asyncCanceled",e._propagate,e).onSync("asyncReceived",e._propagate,e).onSync("rendered",e._onRendered,e).onSync("cleared",e._onCleared,e)})),this},isOpen:function(){return this.$node.hasClass(this.classes.open)},open:function(){this.$node.addClass(this.classes.open)},close:function(){this.$node.removeClass(this.classes.open),this._removeCursor()},setLanguageDirection:function(t){this.$node.attr("dir",t)},selectableRelativeToCursor:function(t){var e,n,r;return n=this.getActiveSelectable(),e=this._getSelectables(),-1===(r=(r=((r=(n?e.index(n):-1)+t)+1)%(e.length+1)-1)<-1?e.length-1:r)?null:e.eq(r)},setCursor:function(t){this._removeCursor(),(t=t&&t.first())&&(t.addClass(this.classes.cursor),this._ensureVisible(t))},getSelectableData:function(t){return t&&t.length?l.extractData(t):null},getActiveSelectable:function(){var t=this._getSelectables().filter(this.selectors.cursor).first();return t.length?t:null},getTopSelectable:function(){var t=this._getSelectables().first();return t.length?t:null},update:function(t){var e=t!==this.query;return e&&(this.query=t,n.each(this.datasets,(function(e){e.update(t)}))),e},empty:function(){n.each(this.datasets,(function(t){t.clear()})),this.query=null,this.$node.addClass(this.classes.empty)},destroy:function(){this.$node.off(".tt"),this.$node=e("<div>"),n.each(this.datasets,(function(t){t.destroy()}))}}),t}(),u=function(){"use strict";var t=c.prototype;function e(){c.apply(this,[].slice.call(arguments,0))}return n.mixin(e.prototype,c.prototype,{open:function(){return!this._allDatasetsEmpty()&&this._show(),t.open.apply(this,[].slice.call(arguments,0))},close:function(){return this._hide(),t.close.apply(this,[].slice.call(arguments,0))},_onRendered:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),t._onRendered.apply(this,[].slice.call(arguments,0))},_onCleared:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),t._onCleared.apply(this,[].slice.call(arguments,0))},setLanguageDirection:function(e){return this.$node.css("ltr"===e?this.css.ltr:this.css.rtl),t.setLanguageDirection.apply(this,[].slice.call(arguments,0))},_hide:function(){this.$node.hide()},_show:function(){this.$node.css("display","block")}}),e}(),h=function(){"use strict";function t(t,i){var s,o,a,l,c,u,h,d,f,p,m;(t=t||{}).input||e.error("missing input"),t.menu||e.error("missing menu"),t.eventBus||e.error("missing event bus"),i.mixin(this),this.eventBus=t.eventBus,this.minLength=n.isNumber(t.minLength)?t.minLength:1,this.input=t.input,this.menu=t.menu,this.enabled=!0,this.active=!1,this.input.hasFocus()&&this.activate(),this.dir=this.input.getLangDir(),this._hacks(),this.menu.bind().onSync("selectableClicked",this._onSelectableClicked,this).onSync("asyncRequested",this._onAsyncRequested,this).onSync("asyncCanceled",this._onAsyncCanceled,this).onSync("asyncReceived",this._onAsyncReceived,this).onSync("datasetRendered",this._onDatasetRendered,this).onSync("datasetCleared",this._onDatasetCleared,this),s=r(this,"activate","open","_onFocused"),o=r(this,"deactivate","_onBlurred"),a=r(this,"isActive","isOpen","_onEnterKeyed"),l=r(this,"isActive","isOpen","_onTabKeyed"),c=r(this,"isActive","_onEscKeyed"),u=r(this,"isActive","open","_onUpKeyed"),h=r(this,"isActive","open","_onDownKeyed"),d=r(this,"isActive","isOpen","_onLeftKeyed"),f=r(this,"isActive","isOpen","_onRightKeyed"),p=r(this,"_openIfActive","_onQueryChanged"),m=r(this,"_openIfActive","_onWhitespaceChanged"),this.input.bind().onSync("focused",s,this).onSync("blurred",o,this).onSync("enterKeyed",a,this).onSync("tabKeyed",l,this).onSync("escKeyed",c,this).onSync("upKeyed",u,this).onSync("downKeyed",h,this).onSync("leftKeyed",d,this).onSync("rightKeyed",f,this).onSync("queryChanged",p,this).onSync("whitespaceChanged",m,this).onSync("langDirChanged",this._onLangDirChanged,this)}return n.mixin(t.prototype,{_hacks:function(){var t,r;t=this.input.$input||e("<div>"),r=this.menu.$node||e("<div>"),t.on("blur.tt",(function(e){var i,s,o;i=document.activeElement,s=r.is(i),o=r.has(i).length>0,n.isMsie()&&(s||o)&&(e.preventDefault(),e.stopImmediatePropagation(),n.defer((function(){t.focus()})))})),r.on("mousedown.tt",(function(t){t.preventDefault()}))},_onSelectableClicked:function(t,e){this.select(e)},_onDatasetCleared:function(){this._updateHint()},_onDatasetRendered:function(t,e,n,r){this._updateHint(),this.eventBus.trigger("render",n,r,e)},_onAsyncRequested:function(t,e,n){this.eventBus.trigger("asyncrequest",n,e)},_onAsyncCanceled:function(t,e,n){this.eventBus.trigger("asynccancel",n,e)},_onAsyncReceived:function(t,e,n){this.eventBus.trigger("asyncreceive",n,e)},_onFocused:function(){this._minLengthMet()&&this.menu.update(this.input.getQuery())},_onBlurred:function(){this.input.hasQueryChangedSinceLastFocus()&&this.eventBus.trigger("change",this.input.getQuery())},_onEnterKeyed:function(t,e){var n;(n=this.menu.getActiveSelectable())&&this.select(n)&&e.preventDefault()},_onTabKeyed:function(t,e){var n;(n=this.menu.getActiveSelectable())?this.select(n)&&e.preventDefault():(n=this.menu.getTopSelectable())&&this.autocomplete(n)&&e.preventDefault()},_onEscKeyed:function(){this.close()},_onUpKeyed:function(){this.moveCursor(-1)},_onDownKeyed:function(){this.moveCursor(1)},_onLeftKeyed:function(){"rtl"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getTopSelectable())},_onRightKeyed:function(){"ltr"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getTopSelectable())},_onQueryChanged:function(t,e){this._minLengthMet(e)?this.menu.update(e):this.menu.empty()},_onWhitespaceChanged:function(){this._updateHint()},_onLangDirChanged:function(t,e){this.dir!==e&&(this.dir=e,this.menu.setLanguageDirection(e))},_openIfActive:function(){this.isActive()&&this.open()},_minLengthMet:function(t){return(t=n.isString(t)?t:this.input.getQuery()||"").length>=this.minLength},_updateHint:function(){var t,e,r,i,s,o;t=this.menu.getTopSelectable(),e=this.menu.getSelectableData(t),r=this.input.getInputValue(),!e||n.isBlankString(r)||this.input.hasOverflow()?this.input.clearHint():(i=a.normalizeQuery(r),s=n.escapeRegExChars(i),(o=new RegExp("^(?:"+s+")(.+$)","i").exec(e.val))&&this.input.setHint(r+o[1]))},isEnabled:function(){return this.enabled},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},isActive:function(){return this.active},activate:function(){return!!this.isActive()||!(!this.isEnabled()||this.eventBus.before("active"))&&(this.active=!0,this.eventBus.trigger("active"),!0)},deactivate:function(){return!this.isActive()||!this.eventBus.before("idle")&&(this.active=!1,this.close(),this.eventBus.trigger("idle"),!0)},isOpen:function(){return this.menu.isOpen()},open:function(){return this.isOpen()||this.eventBus.before("open")||(this.menu.open(),this._updateHint(),this.eventBus.trigger("open")),this.isOpen()},close:function(){return this.isOpen()&&!this.eventBus.before("close")&&(this.menu.close(),this.input.clearHint(),this.input.resetInputValue(),this.eventBus.trigger("close")),!this.isOpen()},setVal:function(t){this.input.setQuery(n.toStr(t))},getVal:function(){return this.input.getQuery()},select:function(t){var e=this.menu.getSelectableData(t);return!(!e||this.eventBus.before("select",e.obj)||(this.input.setQuery(e.val,!0),this.eventBus.trigger("select",e.obj),this.close(),0))},autocomplete:function(t){var e,n;return e=this.input.getQuery(),!(!(n=this.menu.getSelectableData(t))||e===n.val||this.eventBus.before("autocomplete",n.obj)||(this.input.setQuery(n.val),this.eventBus.trigger("autocomplete",n.obj),0))},moveCursor:function(t){var e,n,r,i;return e=this.input.getQuery(),n=this.menu.selectableRelativeToCursor(t),i=(r=this.menu.getSelectableData(n))?r.obj:null,!(this._minLengthMet()&&this.menu.update(e)||this.eventBus.before("cursorchange",i)||(this.menu.setCursor(n),r?this.input.setInputValue(r.val):(this.input.resetInputValue(),this._updateHint()),this.eventBus.trigger("cursorchange",i),0))},destroy:function(){this.input.destroy(),this.menu.destroy()}}),t;function r(t){var e=[].slice.call(arguments,1);return function(){var r=[].slice.call(arguments);n.each(e,(function(e){return t[e].apply(t,r)}))}}}(),void function(){"use strict";var t,s,o;function l(t,n){t.each((function(){var t,r=e(this);(t=r.data(s.typeahead))&&n(t,r)}))}function d(t,e){return t.clone().addClass(e.classes.hint).removeData().css(e.css.hint).css((n=t,{backgroundAttachment:n.css("background-attachment"),backgroundClip:n.css("background-clip"),backgroundColor:n.css("background-color"),backgroundImage:n.css("background-image"),backgroundOrigin:n.css("background-origin"),backgroundPosition:n.css("background-position"),backgroundRepeat:n.css("background-repeat"),backgroundSize:n.css("background-size")})).prop("readonly",!0).removeAttr("id name placeholder required").attr({autocomplete:"off",spellcheck:"false",tabindex:-1});var n}function f(t,e){t.data(s.attrs,{dir:t.attr("dir"),autocomplete:t.attr("autocomplete"),spellcheck:t.attr("spellcheck"),style:t.attr("style")}),t.addClass(e.classes.input).attr({autocomplete:"off",spellcheck:!1});try{!t.attr("dir")&&t.attr("dir","auto")}catch(t){}return t}function p(t){var r;return(r=n.isJQuery(t)||n.isElement(t)?e(t).first():[]).length?r:null}t=e.fn.typeahead,s={www:"tt-www",attrs:"tt-attrs",typeahead:"tt-typeahead"},o={initialize:function(t,o){var l;return o=n.isArray(o)?o:[].slice.call(arguments,1),l=r((t=t||{}).classNames),this.each(m);function m(){var r,m,g,v,b,y,_,x,w,k,S;n.each(o,(function(e){e.highlight=!!t.highlight})),r=e(this),m=e(l.html.wrapper),g=p(t.hint),v=p(t.menu),b=!1!==t.hint&&!g,y=!1!==t.menu&&!v,b&&(g=d(r,l)),y&&(v=e(l.html.menu).css(l.css.menu)),g&&g.val(""),r=f(r,l),(b||y)&&(m.css(l.css.wrapper),r.css(b?l.css.input:l.css.inputWithNoHint),r.wrap(m).parent().prepend(b?g:null).append(y?v:null)),S=y?u:c,_=new i({el:r}),x=new a({hint:g,input:r},l),w=new S({node:v,datasets:o},l),k=new h({input:x,menu:w,eventBus:_,minLength:t.minLength},l),r.data(s.www,l),r.data(s.typeahead,k)}},isEnabled:function(){var t;return l(this.first(),(function(e){t=e.isEnabled()})),t},enable:function(){return l(this,(function(t){t.enable()})),this},disable:function(){return l(this,(function(t){t.disable()})),this},isActive:function(){var t;return l(this.first(),(function(e){t=e.isActive()})),t},activate:function(){return l(this,(function(t){t.activate()})),this},deactivate:function(){return l(this,(function(t){t.deactivate()})),this},isOpen:function(){var t;return l(this.first(),(function(e){t=e.isOpen()})),t},open:function(){return l(this,(function(t){t.open()})),this},close:function(){return l(this,(function(t){t.close()})),this},select:function(t){var n=!1,r=e(t);return l(this.first(),(function(t){n=t.select(r)})),n},autocomplete:function(t){var n=!1,r=e(t);return l(this.first(),(function(t){n=t.autocomplete(r)})),n},moveCursor:function(t){var e=!1;return l(this.first(),(function(n){e=n.moveCursor(t)})),e},val:function(t){var e;return arguments.length?(l(this,(function(e){e.setVal(t)})),this):(l(this.first(),(function(t){e=t.getVal()})),e)},destroy:function(){return l(this,(function(t,e){(function(t){var e,r;e=t.data(s.www),r=t.parent().filter(e.selectors.wrapper),n.each(t.data(s.attrs),(function(e,r){n.isUndefined(e)?t.removeAttr(r):t.attr(r,e)})),t.removeData(s.typeahead).removeData(s.www).removeData(s.attr).removeClass(e.classes.input),r.length&&(t.detach().insertAfter(r),r.remove())})(e),t.destroy()})),this}},e.fn.typeahead=function(t){return o[t]?o[t].apply(this,[].slice.call(arguments,1)):o.initialize.apply(this,arguments)},e.fn.typeahead.noConflict=function(){return e.fn.typeahead=t,this}}();var e,n,r,i,s,o,a,l,c,u,h}.apply(e,r))||(t.exports=i)},73609:t=>{"use strict";t.exports=window.jQuery}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var s=e[r]={exports:{}};return t[r].call(s.exports,s,s.exports,n),s.exports}n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{"use strict";var t=o(n(53943)),e=o(n(95778)),r=o(n(73481)),i=o(n(84772)),s=o(n(41941));function o(t){return t&&t.__esModule?t:{default:t}}n(43345);var a=window.$;a((function(){!function(){var n=s.default.multistoreDropdown,o=a(n.searchInput),l=(new e.default).generate("admin_shops_search",{searchTerm:"__QUERY__"});a(n.scrollbar).length>0&&new i.default(n.scrollbar);var c={display:"name",value:"id",source:new t.default({datumTokenizer:t.default.tokenizers.obj.whitespace,queryTokenizer:t.default.tokenizers.whitespace,remote:{url:l,wildcard:"__QUERY__"}}),onSelect:function(t,e){var n=void 0!==t.groupName?"s":"g";return window.location.href=s.default.multistoreHeader.setContextUrl(window.location.href,n,t.id),!0},onClose:function(t){}};new r.default(o,c)}()}))})(),window.multistore_dropdown={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2F1dG8tY29tcGxldGUtc2VhcmNoLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvY29tcG9uZW50cy1tYXAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9yb3V0ZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvZm9zLXJvdXRpbmcvZGlzdC9yb3V0aW5nLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9wZXJmZWN0LXNjcm9sbGJhci9kaXN0L3BlcmZlY3Qtc2Nyb2xsYmFyLmVzbS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdHlwZWFoZWFkLmpzL2Rpc3QvdHlwZWFoZWFkLmJ1bmRsZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vZXh0ZXJuYWwgXCJqUXVlcnlcIiIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vW25hbWVdL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL211bHRpc3RvcmUtZHJvcGRvd24uanMiXSwibmFtZXMiOlsiQXV0b0NvbXBsZXRlU2VhcmNoIiwiJHNlYXJjaElucHV0IiwiY29uZmlnIiwidGhpcyIsInNlYXJjaElucHV0SWQiLCJwcm9wIiwiaW5wdXRDb25maWciLCJtaW5MZW5ndGgiLCJoaWdobGlnaHQiLCJjYWNoZSIsImhpbnQiLCJkYXRhU2V0Q29uZmlnIiwiZGlzcGxheSIsInZhbHVlIiwibGltaXQiLCJkYXRhTGltaXQiLCJvblNlbGVjdCIsInNlbGVjdGVkSXRlbSIsImV2ZW50Iiwib25DbG9zZSIsImRlZmF1bHRUZW1wbGF0ZXMiLCJzdWdnZXN0aW9uIiwiaXRlbSIsImRpc3BsYXlTdWdnZXN0aW9uIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicGVuZGluZyIsInF1ZXJ5Iiwibm90Rm91bmQiLCJ0ZW1wbGF0ZXMiLCJidWlsZFR5cGVhaGVhZCIsInR5cGVhaGVhZCIsImJpbmQiLCJlIiwibXVsdGlzdG9yZURyb3Bkb3duIiwic2VhcmNoSW5wdXQiLCJzY3JvbGxiYXIiLCJtdWx0aXN0b3JlSGVhZGVyIiwibW9kYWwiLCJoZWFkZXJCdXR0b24iLCJqc1Njcm9sbGJhciIsInNldENvbnRleHRVcmwiLCJsb2NhdGlvbiIsInVybExldHRlciIsIml0ZW1JZCIsInNldENvbnRleHRQYXJhbWV0ZXIiLCJ1cmwiLCJVUkwiLCJzZWFyY2giLCJ0b1N0cmluZyIsIiQiLCJ3aW5kb3ciLCJSb3V0ZXIiLCJwcmVzdGFzaG9wIiwiY3VzdG9tUm91dGVzIiwicm91dGVzIiwiUm91dGluZyIsInNldERhdGEiLCJzZXRCYXNlVXJsIiwiZG9jdW1lbnQiLCJmaW5kIiwiZGF0YSIsInJvdXRlIiwicGFyYW1zIiwidG9rZW5pemVkUGFyYW1zIiwiX3Rva2VuIiwiZ2VuZXJhdGUiLCJtb2R1bGUiLCJleHBvcnRzIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwib2JqIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmluZVByb3BlcnRpZXMiLCJ0YXJnZXQiLCJwcm9wcyIsImkiLCJsZW5ndGgiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwia2V5IiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiX2Fzc2lnbjIiLCJhcmd1bWVudHMiLCJzb3VyY2UiLCIkT2JqZWN0IiwiaXQiLCJkZXNjIiwiZGVmaW5lUHJvcGVydHkiLCJpc09iamVjdCIsInRvSU9iamVjdCIsInRvTGVuZ3RoIiwidG9BYnNvbHV0ZUluZGV4IiwiSVNfSU5DTFVERVMiLCIkdGhpcyIsImVsIiwiZnJvbUluZGV4IiwiTyIsImluZGV4Iiwic2xpY2UiLCJjb3JlIiwidmVyc2lvbiIsIl9fZSIsImFGdW5jdGlvbiIsImZuIiwidGhhdCIsInVuZGVmaW5lZCIsImEiLCJiIiwiYyIsImFwcGx5IiwiZ2V0IiwiaXMiLCJjcmVhdGVFbGVtZW50Iiwic3BsaXQiLCJnbG9iYWwiLCJjdHgiLCJoaWRlIiwiaGFzIiwiJGV4cG9ydCIsInR5cGUiLCJuYW1lIiwib3duIiwib3V0IiwiSVNfRk9SQ0VEIiwiRiIsIklTX0dMT0JBTCIsIkciLCJJU19TVEFUSUMiLCJTIiwiSVNfUFJPVE8iLCJQIiwiSVNfQklORCIsIkIiLCJJU19XUkFQIiwiVyIsImV4cFByb3RvIiwiQyIsIkZ1bmN0aW9uIiwidmlydHVhbCIsIlIiLCJVIiwiZXhlYyIsIk1hdGgiLCJzZWxmIiwiX19nIiwiZFAiLCJjcmVhdGVEZXNjIiwib2JqZWN0IiwiZiIsImNvZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiREVTQ1JJUFRPUlMiLCJnZXRLZXlzIiwiZ09QUyIsInBJRSIsInRvT2JqZWN0IiwiSU9iamVjdCIsIiRhc3NpZ24iLCJhc3NpZ24iLCJBIiwiU3ltYm9sIiwiSyIsImZvckVhY2giLCJrIiwia2V5cyIsImpvaW4iLCJUIiwiYUxlbiIsImdldFN5bWJvbHMiLCJpc0VudW0iLCJjb25jYXQiLCJqIiwiYW5PYmplY3QiLCJJRThfRE9NX0RFRklORSIsInRvUHJpbWl0aXZlIiwiQXR0cmlidXRlcyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImFycmF5SW5kZXhPZiIsIklFX1BST1RPIiwibmFtZXMiLCJyZXN1bHQiLCJwdXNoIiwiJGtleXMiLCJlbnVtQnVnS2V5cyIsImJpdG1hcCIsInNoYXJlZCIsInVpZCIsIlNIQVJFRCIsInN0b3JlIiwibW9kZSIsImNvcHlyaWdodCIsInRvSW50ZWdlciIsIm1heCIsIm1pbiIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwiZGVmaW5lZCIsInZhbCIsInZhbHVlT2YiLCJpZCIsInB4IiwicmFuZG9tIiwiX2V4dGVuZHMiLCJkIiwiX3R5cGVvZiIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJzZXRSb3V0ZXMiLCJyb3V0ZXNSb3V0aW5nIiwiZ2V0Um91dGVzIiwiY29udGV4dFJvdXRpbmciLCJiYXNlX3VybCIsImdldEJhc2VVcmwiLCJzZXRQcmVmaXgiLCJwcmVmaXgiLCJzZXRTY2hlbWUiLCJzY2hlbWUiLCJnZXRTY2hlbWUiLCJzZXRIb3N0IiwiaG9zdCIsImdldEhvc3QiLCJidWlsZFF1ZXJ5UGFyYW1zIiwiUmVnRXhwIiwiQXJyYXkiLCJ0ZXN0IiwiZ2V0Um91dGUiLCJFcnJvciIsImciLCJoIiwidG9rZW5zIiwiZGVmYXVsdHMiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwiaG9zdHRva2VucyIsInJlcXVpcmVtZW50cyIsImwiLCJtIiwiZWxlbWVudCIsImdldENvbXB1dGVkU3R5bGUiLCJzZXQiLCJzdHlsZSIsImRpdiIsImNsYXNzTmFtZSIsImVsTWF0Y2hlcyIsIkVsZW1lbnQiLCJtYXRjaGVzIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJyZW1vdmUiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJxdWVyeUNoaWxkcmVuIiwic2VsZWN0b3IiLCJmaWx0ZXIiLCJjaGlsZHJlbiIsImNoaWxkIiwiY2xzIiwieCIsInNjcm9sbGluZ0NsYXNzVGltZW91dCIsInkiLCJhZGRTY3JvbGxpbmdDbGFzcyIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiY2xlYXJUaW1lb3V0IiwiYWRkIiwicmVtb3ZlU2Nyb2xsaW5nQ2xhc3MiLCJzZXRUaW1lb3V0IiwiaXNBbGl2ZSIsInNldHRpbmdzIiwic2Nyb2xsaW5nVGhyZXNob2xkIiwiRXZlbnRFbGVtZW50IiwiaGFuZGxlcnMiLCJwcm90b3R5cGVBY2Nlc3NvcnMiLCJpc0VtcHR5IiwiZXZlbnROYW1lIiwiaGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJ1bmJpbmQiLCJ0aGlzJDEiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidW5iaW5kQWxsIiwiZXZlcnkiLCJFdmVudE1hbmFnZXIiLCJldmVudEVsZW1lbnRzIiwiY3JlYXRlRXZlbnQiLCJDdXN0b21FdmVudCIsImV2dCIsImluaXRDdXN0b21FdmVudCIsInByb2Nlc3NTY3JvbGxEaWZmIiwiYXhpcyIsImRpZmYiLCJ1c2VTY3JvbGxpbmdDbGFzcyIsImZvcmNlRmlyZVJlYWNoRXZlbnQiLCJmaWVsZHMiLCJyZWYiLCJjb250ZW50SGVpZ2h0IiwiY29udGFpbmVySGVpZ2h0Iiwic2Nyb2xsVG9wIiwidXAiLCJkb3duIiwicmVhY2giLCJkaXNwYXRjaEV2ZW50Iiwic2V0U2Nyb2xsaW5nQ2xhc3NJbnN0YW50bHkiLCJwcm9jZXNzU2Nyb2xsRGlmZiQxIiwidG9JbnQiLCJwYXJzZUludCIsImV2ZW50RWxlbWVudCIsImVlIiwic3BsaWNlIiwiaW5kZXhPZiIsIm9uY2UiLCJvbmNlSGFuZGxlciIsImVudiIsImlzV2ViS2l0IiwiZG9jdW1lbnRFbGVtZW50Iiwic3VwcG9ydHNUb3VjaCIsIm5hdmlnYXRvciIsIm1heFRvdWNoUG9pbnRzIiwiRG9jdW1lbnRUb3VjaCIsInN1cHBvcnRzSWVQb2ludGVyIiwibXNNYXhUb3VjaFBvaW50cyIsImlzQ2hyb21lIiwidXNlckFnZW50IiwidXBkYXRlR2VvbWV0cnkiLCJyb3VuZGVkU2Nyb2xsVG9wIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImNvbnRhaW5lcldpZHRoIiwid2lkdGgiLCJoZWlnaHQiLCJjb250ZW50V2lkdGgiLCJzY3JvbGxXaWR0aCIsInNjcm9sbEhlaWdodCIsInNjcm9sbGJhclhSYWlsIiwiYXBwZW5kQ2hpbGQiLCJzY3JvbGxiYXJZUmFpbCIsInN1cHByZXNzU2Nyb2xsWCIsInNjcm9sbFhNYXJnaW5PZmZzZXQiLCJzY3JvbGxiYXJYQWN0aXZlIiwicmFpbFhXaWR0aCIsInJhaWxYTWFyZ2luV2lkdGgiLCJyYWlsWFJhdGlvIiwic2Nyb2xsYmFyWFdpZHRoIiwiZ2V0VGh1bWJTaXplIiwic2Nyb2xsYmFyWExlZnQiLCJuZWdhdGl2ZVNjcm9sbEFkanVzdG1lbnQiLCJzY3JvbGxMZWZ0Iiwic3VwcHJlc3NTY3JvbGxZIiwic2Nyb2xsWU1hcmdpbk9mZnNldCIsInNjcm9sbGJhcllBY3RpdmUiLCJyYWlsWUhlaWdodCIsInJhaWxZTWFyZ2luSGVpZ2h0IiwicmFpbFlSYXRpbyIsInNjcm9sbGJhcllIZWlnaHQiLCJzY3JvbGxiYXJZVG9wIiwieFJhaWxPZmZzZXQiLCJpc1J0bCIsImxlZnQiLCJpc1Njcm9sbGJhclhVc2luZ0JvdHRvbSIsImJvdHRvbSIsInNjcm9sbGJhclhCb3R0b20iLCJ0b3AiLCJzY3JvbGxiYXJYVG9wIiwieVJhaWxPZmZzZXQiLCJpc1Njcm9sbGJhcllVc2luZ1JpZ2h0IiwicmlnaHQiLCJzY3JvbGxiYXJZUmlnaHQiLCJzY3JvbGxiYXJZT3V0ZXJXaWR0aCIsInNjcm9sbGJhcllMZWZ0Iiwic2Nyb2xsYmFyWCIsInJhaWxCb3JkZXJYV2lkdGgiLCJzY3JvbGxiYXJZIiwicmFpbEJvcmRlcllXaWR0aCIsInVwZGF0ZUNzcyIsInRodW1iU2l6ZSIsIm1pblNjcm9sbGJhckxlbmd0aCIsIm1heFNjcm9sbGJhckxlbmd0aCIsImJpbmRNb3VzZVNjcm9sbEhhbmRsZXIiLCJwYWdlWSIsInN0YXJ0aW5nU2Nyb2xsVG9wIiwic3RhcnRpbmdNb3VzZVBhZ2VZIiwic2Nyb2xsQnkiLCJtb3VzZU1vdmVIYW5kbGVyIiwidG91Y2hlcyIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwibW91c2VVcEhhbmRsZXIiLCJvd25lckRvY3VtZW50IiwiYmluZE1vdmVzIiwidG91Y2hNb2RlIiwiZGlyZWN0aW9uIiwicGFnZVlPZmZzZXQiLCJwYWdlWCIsInBhZ2VYT2Zmc2V0Iiwia2V5Ym9hcmQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJkZWZhdWx0UHJldmVudGVkIiwiYWN0aXZlRWxlbWVudCIsInRhZ05hbWUiLCJjb250ZW50RG9jdW1lbnQiLCJzaGFkb3dSb290IiwiZGVsdGFYIiwiZGVsdGFZIiwid2hpY2giLCJtZXRhS2V5IiwiYWx0S2V5Iiwic2hpZnRLZXkiLCJ3aGVlbFByb3BhZ2F0aW9uIiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJ3aGVlbCIsIm1vdXNld2hlZWxIYW5kbGVyIiwid2hlZWxEZWx0YVgiLCJ3aGVlbERlbHRhWSIsImRlbHRhTW9kZSIsIndoZWVsRGVsdGEiLCJnZXREZWx0YUZyb21FdmVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjdXJzb3IiLCJvdmVyZmxvd1kiLCJtYXRjaCIsIm1heFNjcm9sbFRvcCIsImNsaWVudEhlaWdodCIsIm92ZXJmbG93WCIsIm1heFNjcm9sbExlZnQiLCJjbGllbnRXaWR0aCIsInNob3VsZEJlQ29uc3VtZWRCeUNoaWxkIiwic2hvdWxkUHJldmVudCIsInVzZUJvdGhXaGVlbEF4ZXMiLCJ3aGVlbFNwZWVkIiwiaXNUb3AiLCJpc0JvdHRvbSIsIm9mZnNldEhlaWdodCIsImlzTGVmdCIsImlzUmlnaHQiLCJvZmZzZXRXaWR0aCIsImFicyIsImN0cmxLZXkiLCJvbndoZWVsIiwib25tb3VzZXdoZWVsIiwidG91Y2giLCJzdGFydE9mZnNldCIsInN0YXJ0VGltZSIsInNwZWVkIiwiZWFzaW5nTG9vcCIsInRvdWNoU3RhcnQiLCJ0b3VjaE1vdmUiLCJ0b3VjaEVuZCIsIlBvaW50ZXJFdmVudCIsIk1TUG9pbnRlckV2ZW50IiwiYXBwbHlUb3VjaE1vdmUiLCJkaWZmZXJlbmNlWCIsImRpZmZlcmVuY2VZIiwiZ2V0VG91Y2giLCJ0YXJnZXRUb3VjaGVzIiwic2hvdWxkSGFuZGxlIiwicG9pbnRlclR5cGUiLCJidXR0b25zIiwiTVNQT0lOVEVSX1RZUEVfTU9VU0UiLCJEYXRlIiwiZ2V0VGltZSIsImNsZWFySW50ZXJ2YWwiLCJjdXJyZW50T2Zmc2V0IiwiY3VycmVudFRpbWUiLCJ0aW1lR2FwIiwibWFnbml0dWRlWCIsIm1hZ25pdHVkZVkiLCJzY3JvbGxZIiwic3dpcGVFYXNpbmciLCJzZXRJbnRlcnZhbCIsImlzSW5pdGlhbGl6ZWQiLCJQZXJmZWN0U2Nyb2xsYmFyIiwidXNlclNldHRpbmdzIiwibm9kZU5hbWUiLCJvcmlnaW5hbFNjcm9sbExlZnQiLCJmb2N1cyIsImJsdXIiLCJpc05lZ2F0aXZlU2Nyb2xsIiwic2V0QXR0cmlidXRlIiwicmFpbFhTdHlsZSIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJyYWlsWVN0eWxlIiwic3R5bGVzIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJvdXRlcldpZHRoIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsImhhbmRsZXJOYW1lIiwibGFzdFNjcm9sbFRvcCIsImxhc3RTY3JvbGxMZWZ0Iiwib25TY3JvbGwiLCJ1cGRhdGUiLCJkZXN0cm95IiwicmVtb3ZlUHNDbGFzc2VzIiwicm9vdCIsImEwIiwiXyIsImlzTXNpZSIsImlzQmxhbmtTdHJpbmciLCJzdHIiLCJlc2NhcGVSZWdFeENoYXJzIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzQXJyYXkiLCJpc0Z1bmN0aW9uIiwiaXNQbGFpbk9iamVjdCIsImlzVW5kZWZpbmVkIiwiaXNFbGVtZW50Iiwibm9kZVR5cGUiLCJpc0pRdWVyeSIsInRvU3RyIiwicyIsInByb3h5IiwiZWFjaCIsImNvbGxlY3Rpb24iLCJjYiIsIm1hcCIsImdyZXAiLCJzb21lIiwibWl4aW4iLCJleHRlbmQiLCJpZGVudGl0eSIsImNsb25lIiwiZ2V0SWRHZW5lcmF0b3IiLCJjb3VudGVyIiwidGVtcGxhdGlmeSIsIlN0cmluZyIsImRlZmVyIiwiZGVib3VuY2UiLCJmdW5jIiwid2FpdCIsImltbWVkaWF0ZSIsInRpbWVvdXQiLCJsYXRlciIsImNhbGxOb3ciLCJjb250ZXh0IiwiYXJncyIsInRocm90dGxlIiwicHJldmlvdXMiLCJub3ciLCJyZW1haW5pbmciLCJzdHJpbmdpZnkiLCJKU09OIiwibm9vcCIsIlZFUlNJT04iLCJ0b2tlbml6ZXJzIiwibm9ud29yZCIsIndoaXRlc3BhY2UiLCJnZXRPYmpUb2tlbml6ZXIiLCJ0b2tlbml6ZXIiLCJvIiwiTHJ1Q2FjaGUiLCJtYXhTaXplIiwicmVzZXQiLCJMaXN0IiwiaGVhZCIsInRhaWwiLCJOb2RlIiwicHJldiIsIm5leHQiLCJub2RlIiwidGFpbEl0ZW0iLCJsaXN0Iiwic2l6ZSIsImhhc2giLCJtb3ZlVG9Gcm9udCIsIlBlcnNpc3RlbnRTdG9yYWdlIiwiTE9DQUxfU1RPUkFHRSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZXJyIiwibmFtZXNwYWNlIiwib3ZlcnJpZGUiLCJ0dGxLZXkiLCJrZXlNYXRjaGVyIiwibHMiLCJfbm9vcCIsIl9wcmVmaXgiLCJfdHRsS2V5IiwiY2xlYXIiLCJpc0V4cGlyZWQiLCJfc2FmZVNldCIsImRlY29kZSIsImdldEl0ZW0iLCJ0dGwiLCJlbmNvZGUiLCJsZW4iLCJnYXRoZXJNYXRjaGluZ0tleXMiLCJwYXJzZUpTT04iLCJUcmFuc3BvcnQiLCJwZW5kaW5nUmVxdWVzdHNDb3VudCIsInBlbmRpbmdSZXF1ZXN0cyIsIm1heFBlbmRpbmdSZXF1ZXN0cyIsInNoYXJlZENhY2hlIiwiY2FuY2VsbGVkIiwibGFzdFJlcSIsIl9zZW5kIiwidHJhbnNwb3J0IiwiX2dldCIsImxpbWl0ZXIiLCJfY2FjaGUiLCJzZXRNYXhQZW5kaW5nUmVxdWVzdHMiLCJudW0iLCJyZXNldENhY2hlIiwiX2ZpbmdlcnByaW50IiwicGFyYW0iLCJmaW5nZXJwcmludCIsImpxWGhyIiwiZG9uZSIsInJlc3AiLCJmYWlsIiwiYWx3YXlzIiwib25EZWNrUmVxdWVzdEFyZ3MiLCJjYW5jZWwiLCJTZWFyY2hJbmRleCIsImRhdHVtVG9rZW5pemVyIiwicXVlcnlUb2tlbml6ZXIiLCJlcnJvciIsImlkZW50aWZ5IiwiYm9vdHN0cmFwIiwiZGF0dW1zIiwidHJpZSIsImRhdHVtIiwibm9ybWFsaXplVG9rZW5zIiwidG9rZW4iLCJjaGFycyIsImNoIiwic2hpZnQiLCJuZXdOb2RlIiwiaWRzIiwiYXJyYXlBIiwiYXJyYXlCIiwiYWkiLCJiaSIsImludGVyc2VjdGlvbiIsInNvcnQiLCJsZW5BcnJheUEiLCJsZW5BcnJheUIiLCJnZXRJbnRlcnNlY3Rpb24iLCJhcnJheSIsInNlZW4iLCJ1bmlxdWVzIiwidW5pcXVlIiwiYWxsIiwidmFsdWVzIiwic2VyaWFsaXplIiwidG9Mb3dlckNhc2UiLCJQcmVmZXRjaCIsInByZXBhcmUiLCJ0cmFuc2Zvcm0iLCJ0aHVtYnByaW50Iiwic3RvcmFnZSIsImNhY2hlS2V5IiwicHJvdG9jb2wiLCJfc2V0dGluZ3MiLCJkYXRhVHlwZSIsImZyb21DYWNoZSIsInN0b3JlZCIsImZyb21OZXR3b3JrIiwiUmVtb3RlIiwiY2FuY2VsTGFzdFJlcXVlc3QiLCJvUGFyc2VyIiwic29ydGVyIiwiaW5pdGlhbGl6ZSIsInN1ZmZpY2llbnQiLCJsb2NhbCIsInByZWZldGNoIiwicmVtb3RlIiwiY2FsbGJhY2tUb0RlZmVycmVkIiwiYWpheCIsInBhcnNlUHJlZmV0Y2giLCJ3aWxkY2FyZCIsInJhdGVMaW1pdEJ5IiwicmF0ZUxpbWl0V2FpdCIsInByZXBhcmVCeVJlcGxhY2UiLCJwcmVwYXJlQnlXaWxkY2FyZCIsImlkZW5pdHlQcmVwYXJlIiwidG9SZW1vdGVQcmVwYXJlIiwibWV0aG9kIiwidG9MaW1pdGVyIiwicGFyc2VSZW1vdGUiLCJkZWZlcnJlZCIsIkRlZmVycmVkIiwicmVzb2x2ZSIsInJlamVjdCIsIm9sZCIsIkJsb29kaG91bmQiLCJub0NvbmZsaWN0IiwiX190dEFkYXB0ZXIiLCJzeW5jIiwiYXN5bmMiLCJfbG9hZFByZWZldGNoIiwic2VyaWFsaXplZCIsInByb21pc2UiLCJfaW5pdGlhbGl6ZSIsImluaXRQcm9taXNlIiwiZm9yY2UiLCJub25EdXBsaWNhdGVzIiwiciIsImNsZWFyUHJlZmV0Y2hDYWNoZSIsImNsZWFyUmVtb3RlQ2FjaGUiLCJ0dEFkYXB0ZXIiLCJXV1ciLCJkZWZhdWx0Q2xhc3NOYW1lcyIsIndyYXBwZXIiLCJpbnB1dCIsIm1lbnUiLCJkYXRhc2V0Iiwic2VsZWN0YWJsZSIsImVtcHR5Iiwib3BlbiIsInd3dyIsImNsYXNzZXMiLCJjc3MiLCJwb3NpdGlvbiIsImJvcmRlckNvbG9yIiwiYm94U2hhZG93Iiwib3BhY2l0eSIsInZlcnRpY2FsQWxpZ24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJpbnB1dFdpdGhOb0hpbnQiLCJ6SW5kZXgiLCJsdHIiLCJydGwiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJodG1sIiwic2VsZWN0b3JzIiwiYnVpbGRTZWxlY3RvcnMiLCJ2IiwiRXZlbnRCdXMiLCJkZXByZWNhdGlvbk1hcCIsIiRlbCIsInJlbmRlciIsImN1cnNvcmNoYW5nZSIsInNlbGVjdCIsImF1dG9jb21wbGV0ZSIsIl90cmlnZ2VyIiwiJGUiLCJFdmVudCIsInVuc2hpZnQiLCJ0cmlnZ2VyIiwiYmVmb3JlIiwiZGVwcmVjYXRlZFR5cGUiLCJFdmVudEVtaXR0ZXIiLCJzcGxpdHRlciIsIm5leHRUaWNrIiwic2V0SW1tZWRpYXRlIiwib25TeW5jIiwidHlwZXMiLCJvbiIsIm9uQXN5bmMiLCJvZmYiLCJfY2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwic3luY0ZsdXNoIiwiYXN5bmNGbHVzaCIsImdldEZsdXNoIiwiYmluZENvbnRleHQiLCJkb2MiLCJwYXR0ZXJuIiwid29yZHNPbmx5IiwiY2FzZVNlbnNpdGl2ZSIsInJlZ2V4IiwicGF0dGVybnMiLCJyZWdleFN0ciIsImVzY2FwZWRQYXR0ZXJucyIsImdldFJlZ2V4IiwidHJhdmVyc2UiLCJoaWdodGxpZ2h0VGV4dE5vZGUiLCJjaGlsZE5vZGUiLCJjaGlsZE5vZGVzIiwidGV4dE5vZGUiLCJwYXR0ZXJuTm9kZSIsIndyYXBwZXJOb2RlIiwic3BsaXRUZXh0IiwiY2xvbmVOb2RlIiwicmVwbGFjZUNoaWxkIiwiSW5wdXQiLCJzcGVjaWFsS2V5Q29kZU1hcCIsIiRpbnB1dCIsIiRoaW50IiwicXVlcnlXaGVuRm9jdXNlZCIsImhhc0ZvY3VzIiwiJG92ZXJmbG93SGVscGVyIiwidmlzaWJpbGl0eSIsIndoaXRlU3BhY2UiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJ3b3JkU3BhY2luZyIsImxldHRlclNwYWNpbmciLCJ0ZXh0SW5kZW50IiwidGV4dFJlbmRlcmluZyIsInRleHRUcmFuc2Zvcm0iLCJpbnNlcnRBZnRlciIsIl9jaGVja0xhbmd1YWdlRGlyZWN0aW9uIiwic2V0SGludCIsImdldEhpbnQiLCJjbGVhckhpbnQiLCJjbGVhckhpbnRJZkludmFsaWQiLCI5IiwiMjciLCIzNyIsIjM5IiwiMTMiLCIzOCIsIjQwIiwibm9ybWFsaXplUXVlcnkiLCJfb25CbHVyIiwicmVzZXRJbnB1dFZhbHVlIiwiX29uRm9jdXMiLCJfb25LZXlkb3duIiwia2V5TmFtZSIsImtleUNvZGUiLCJfbWFuYWdlUHJldmVudERlZmF1bHQiLCJfc2hvdWxkVHJpZ2dlciIsIl9vbklucHV0IiwiX3NldFF1ZXJ5IiwiZ2V0SW5wdXRWYWx1ZSIsIndpdGhNb2RpZmllciIsImRpciIsImF0dHIiLCJzaWxlbnQiLCJhcmVFcXVpdmFsZW50IiwiaGFzRGlmZmVyZW50V2hpdGVzcGFjZSIsIm9uQmx1ciIsIm9uRm9jdXMiLCJvbktleWRvd24iLCJvbklucHV0IiwiZ2V0TGFuZ0RpciIsImdldFF1ZXJ5Iiwic2V0UXVlcnkiLCJzZXRJbnB1dFZhbHVlIiwiaGFzUXVlcnlDaGFuZ2VkU2luY2VMYXN0Rm9jdXMiLCJ2YWxJc1ByZWZpeE9mSGludCIsImhhc092ZXJmbG93IiwiY29uc3RyYWludCIsInRleHQiLCJpc0N1cnNvckF0RW5kIiwidmFsdWVMZW5ndGgiLCJzZWxlY3Rpb25TdGFydCIsInJhbmdlIiwic2VsZWN0aW9uIiwiY3JlYXRlUmFuZ2UiLCJtb3ZlU3RhcnQiLCJEYXRhc2V0IiwibmFtZUdlbmVyYXRvciIsImRpc3BsYXlGbiIsImdldERpc3BsYXlGbiIsImRpc3BsYXlLZXkiLCJoZWFkZXIiLCJmb290ZXIiLCJzdWdnZXN0aW9uVGVtcGxhdGUiLCJnZXRUZW1wbGF0ZXMiLCJfcmVzZXRMYXN0U3VnZ2VzdGlvbiIsImFkZENsYXNzIiwiZXh0cmFjdERhdGEiLCJfb3ZlcndyaXRlIiwic3VnZ2VzdGlvbnMiLCJfcmVuZGVyU3VnZ2VzdGlvbnMiLCJfcmVuZGVyUGVuZGluZyIsIl9yZW5kZXJOb3RGb3VuZCIsIl9lbXB0eSIsIl9hcHBlbmQiLCIkbGFzdFN1Z2dlc3Rpb24iLCJfYXBwZW5kU3VnZ2VzdGlvbnMiLCIkZnJhZ21lbnQiLCJfZ2V0U3VnZ2VzdGlvbnNGcmFnbWVudCIsImxhc3QiLCJwcmVwZW5kIiwiX2dldEhlYWRlciIsImFwcGVuZCIsIl9nZXRGb290ZXIiLCJhZnRlciIsInRlbXBsYXRlIiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiX2luamVjdFF1ZXJ5IiwiX3F1ZXJ5IiwiY2FuY2VsZWQiLCJzeW5jQ2FsbGVkIiwicmVuZGVyZWQiLCJNZW51IiwiJG5vZGUiLCJkYXRhc2V0cyIsIm9EYXRhc2V0IiwiZmlyc3QiLCJhcHBlbmRUbyIsIl9vblNlbGVjdGFibGVDbGljayIsImN1cnJlbnRUYXJnZXQiLCJfb25SZW5kZXJlZCIsInRvZ2dsZUNsYXNzIiwiX2FsbERhdGFzZXRzRW1wdHkiLCJfb25DbGVhcmVkIiwiX3Byb3BhZ2F0ZSIsIl9nZXRTZWxlY3RhYmxlcyIsIl9yZW1vdmVDdXJzb3IiLCIkc2VsZWN0YWJsZSIsImdldEFjdGl2ZVNlbGVjdGFibGUiLCJyZW1vdmVDbGFzcyIsIl9lbnN1cmVWaXNpYmxlIiwiZWxUb3AiLCJlbEJvdHRvbSIsIm5vZGVTY3JvbGxUb3AiLCJub2RlSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJvblNlbGVjdGFibGVDbGljayIsImlzT3BlbiIsImhhc0NsYXNzIiwiY2xvc2UiLCJzZXRMYW5ndWFnZURpcmVjdGlvbiIsInNlbGVjdGFibGVSZWxhdGl2ZVRvQ3Vyc29yIiwiZGVsdGEiLCIkc2VsZWN0YWJsZXMiLCIkb2xkQ3Vyc29yIiwibmV3SW5kZXgiLCJlcSIsInNldEN1cnNvciIsImdldFNlbGVjdGFibGVEYXRhIiwiZ2V0VG9wU2VsZWN0YWJsZSIsImlzVmFsaWRVcGRhdGUiLCJEZWZhdWx0TWVudSIsIl9zaG93IiwiX2hpZGUiLCJUeXBlYWhlYWQiLCJvbkZvY3VzZWQiLCJvbkJsdXJyZWQiLCJvbkVudGVyS2V5ZWQiLCJvblRhYktleWVkIiwib25Fc2NLZXllZCIsIm9uVXBLZXllZCIsIm9uRG93bktleWVkIiwib25MZWZ0S2V5ZWQiLCJvblJpZ2h0S2V5ZWQiLCJvblF1ZXJ5Q2hhbmdlZCIsIm9uV2hpdGVzcGFjZUNoYW5nZWQiLCJldmVudEJ1cyIsImVuYWJsZWQiLCJhY3RpdmUiLCJhY3RpdmF0ZSIsIl9oYWNrcyIsIl9vblNlbGVjdGFibGVDbGlja2VkIiwiX29uQXN5bmNSZXF1ZXN0ZWQiLCJfb25Bc3luY0NhbmNlbGVkIiwiX29uQXN5bmNSZWNlaXZlZCIsIl9vbkRhdGFzZXRSZW5kZXJlZCIsIl9vbkRhdGFzZXRDbGVhcmVkIiwiX29uTGFuZ0RpckNoYW5nZWQiLCIkbWVudSIsImlzQWN0aXZlIiwiaGFzQWN0aXZlIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwiX3VwZGF0ZUhpbnQiLCJfb25Gb2N1c2VkIiwiX21pbkxlbmd0aE1ldCIsIl9vbkJsdXJyZWQiLCJfb25FbnRlcktleWVkIiwiX29uVGFiS2V5ZWQiLCJfb25Fc2NLZXllZCIsIl9vblVwS2V5ZWQiLCJtb3ZlQ3Vyc29yIiwiX29uRG93bktleWVkIiwiX29uTGVmdEtleWVkIiwiX29uUmlnaHRLZXllZCIsIl9vblF1ZXJ5Q2hhbmdlZCIsIl9vbldoaXRlc3BhY2VDaGFuZ2VkIiwiX29wZW5JZkFjdGl2ZSIsImVzY2FwZWRRdWVyeSIsImlzRW5hYmxlZCIsImVuYWJsZSIsImRpc2FibGUiLCJkZWFjdGl2YXRlIiwic2V0VmFsIiwiZ2V0VmFsIiwiJGNhbmRpZGF0ZSIsInBheWxvYWQiLCJtZXRob2RzIiwidHRFYWNoIiwiJGVscyIsImJ1aWxkSGludEZyb21JbnB1dCIsInJlbW92ZURhdGEiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRDbGlwIiwiYmFja2dyb3VuZE9yaWdpbiIsImJhY2tncm91bmRQb3NpdGlvbiIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kU2l6ZSIsInJlbW92ZUF0dHIiLCJzcGVsbGNoZWNrIiwidGFiaW5kZXgiLCJwcmVwSW5wdXQiLCJhdHRycyIsIiRlbE9yTnVsbCIsImNsYXNzTmFtZXMiLCJhdHRhY2giLCIkd3JhcHBlciIsImRlZmF1bHRIaW50IiwiZGVmYXVsdE1lbnUiLCJNZW51Q29uc3RydWN0b3IiLCJ3cmFwIiwicGFyZW50IiwidCIsInN1Y2Nlc3MiLCJuZXdWYWwiLCJkZXRhY2giLCJyZXZlcnQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZGVmaW5pdGlvbiIsInRvU3RyaW5nVGFnIiwiTXVsdGlzdG9yZURyb3Bkb3duTWFwIiwiQ29tcG9uZW50c01hcCIsInNlYXJjaFRlcm0iLCJjb250ZXh0VXJsTGV0dGVyIiwiZ3JvdXBOYW1lIiwiaHJlZiIsImluaXRNdWx0aXN0b3JlRHJvcGRvd24iXSwibWFwcGluZ3MiOiI7b3RiQThCcUJBLEUsV0FDbkIsV0FBWUMsRUFBY0MsR0FBUSxpQ0FDaENDLEtBQUtGLGFBQWVBLEVBQ3BCRSxLQUFLQyxjQUFnQkQsS0FBS0YsYUFBYUksS0FBSyxNQUU1QyxJQUFNQyxFQUFjSixHQUFVLEdBRTlCQyxLQUFLRCxRQUFMLGNBQ0VLLFVBQVcsRUFDWEMsV0FBVyxFQUNYQyxPQUFPLEVBQ1BDLE1BQU0sR0FDSEosR0FJTEgsS0FBS1EsZUFBTCxjQUNFQyxRQUFTLE9BQ1RDLE1BQU8sS0FDUEMsTUFBTyxHQUNQQyxVQUFXLEVBRVhDLFNBTkYsU0FNV0MsRUFBY0MsR0FDckIsT0FBTyxHQUdUQyxRQVZGLFNBVVVELE1BRUxaLEdBS0wsSUFBTWMsRUFBbUIsQ0FHdkJDLFdBQVksU0FBQ0MsR0FDWCxJQUFJQyxFQUFvQkQsRUFReEIsTUFOMEMsbUJBQS9CLEVBQUtYLGNBQWNDLFFBQzVCLEVBQUtELGNBQWNDLFFBQVFVLEdBQ2xCRSxPQUFPQyxVQUFVQyxlQUFlQyxLQUFLTCxFQUFNLEVBQUtYLGNBQWNDLFdBQ3ZFVyxFQUFvQkQsRUFBSyxFQUFLWCxjQUFjQyxVQUc5QyxxQkFBNEJXLEVBQTVCLFVBRUZLLFFBZHVCLFNBY2ZDLEdBQ04sMENBQTJDQSxF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b3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgYW4gb3ZlcmxheSBvZiB0eXBlYWhlYWQgaXQgYWxsb3dzIHRvIGhhdmUgYSBzaW5nbGUgY29uZmlnIGlucHV0IChzaW5jZVxuICogdHlwZWFoZWFkIHdlaXJkbHkgdXNlcyB0d28gZGlmZmVyZW50IGNvbmZpZ3MpLiBJdCBhbHNvIHByb3ZpZGVzIHNvbWUgZGVmYXVsdCByZW5kZXJpbmdcbiAqIGZ1bmN0aW9ucyB3aGljaCBhcmUsIG9mIGNvdXJzZSwgb3ZlcnJpZGFibGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dG9Db21wbGV0ZVNlYXJjaCB7XG4gIGNvbnN0cnVjdG9yKCRzZWFyY2hJbnB1dCwgY29uZmlnKSB7XG4gICAgdGhpcy4kc2VhcmNoSW5wdXQgPSAkc2VhcmNoSW5wdXQ7XG4gICAgdGhpcy5zZWFyY2hJbnB1dElkID0gdGhpcy4kc2VhcmNoSW5wdXQucHJvcCgnaWQnKTtcblxuICAgIGNvbnN0IGlucHV0Q29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIC8vIE1lcmdlIGRlZmF1bHQgYW5kIGlucHV0IGNvbmZpZ1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgbWluTGVuZ3RoOiAyLFxuICAgICAgaGlnaGxpZ2h0OiB0cnVlLFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgaGludDogZmFsc2UsXG4gICAgICAuLi5pbnB1dENvbmZpZyxcbiAgICB9O1xuXG4gICAgLy8gTWVyZ2UgZGVmYXVsdCBhbmQgaW5wdXQgZGF0YVNldENvbmZpZ1xuICAgIHRoaXMuZGF0YVNldENvbmZpZyA9IHtcbiAgICAgIGRpc3BsYXk6ICduYW1lJywgLy8gV2hpY2ggZmllbGQgb2YgdGhlIG9iamVjdCBmcm9tIHRoZSBsaXN0IGlzIHVzZWQgZm9yIGRpc3BsYXkgKGNhbiBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrKVxuICAgICAgdmFsdWU6ICdpZCcsIC8vIFdoaWNoIGZpZWxkIG9mIHRoZSBvYmplY3QgZnJvbSB0aGUgbGlzdCBpcyB1c2VkIGZvciB2YWx1ZSAoY2FuIGJlIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2spXG4gICAgICBsaW1pdDogMjAsIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgZGlzcGxheWVkIHN1Z2dlc3Rpb25cbiAgICAgIGRhdGFMaW1pdDogMCwgLy8gSG93IG1hbnkgZWxlbWVudHMgY2FuIGJlIHNlbGVjdGVkIG1heFxuICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzICovXG4gICAgICBvblNlbGVjdChzZWxlY3RlZEl0ZW0sIGV2ZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAqL1xuICAgICAgb25DbG9zZShldmVudCkge1xuICAgICAgfSxcbiAgICAgIC4uLmlucHV0Q29uZmlnLFxuICAgIH07XG5cbiAgICAvLyBNZXJnaW5nIG9iamVjdCB3b3JrcyBmaW5lIG9uIG9uZSBsZXZlbCwgYnV0IG9uIHR3byBpdCBlcmFzZXMgc3ViIGVsZW1lbnRzIGV2ZW4gaWYgbm90IHByZXNlbnQsIHNvXG4gICAgLy8gd2UgaGFuZGxlIHRlbXBsYXRlcyBzZXBhcmF0ZWx5LCB0aGVzZSBhcmUgdGhlIGRlZmF1bHQgcmVuZGVyaW5nIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlblxuICAgIGNvbnN0IGRlZmF1bHRUZW1wbGF0ZXMgPSB7XG4gICAgICAvLyBCZSBjYXJlZnVsIHRoYXQgeW91ciByZW5kZXJpbmcgZnVuY3Rpb24gbXVzdCByZXR1cm4gSFRNTCBub2RlIG5vdCBwdXJlIHRleHQgc28gYWx3YXlzIGluY2x1ZGUgdGhlXG4gICAgICAvLyBjb250ZW50IGluIGEgZGl2IGF0IGxlYXN0XG4gICAgICBzdWdnZXN0aW9uOiAoaXRlbSkgPT4ge1xuICAgICAgICBsZXQgZGlzcGxheVN1Z2dlc3Rpb24gPSBpdGVtO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhU2V0Q29uZmlnLmRpc3BsYXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLmRhdGFTZXRDb25maWcuZGlzcGxheShpdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbSwgdGhpcy5kYXRhU2V0Q29uZmlnLmRpc3BsYXkpKSB7XG4gICAgICAgICAgZGlzcGxheVN1Z2dlc3Rpb24gPSBpdGVtW3RoaXMuZGF0YVNldENvbmZpZy5kaXNwbGF5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cInB4LTJcIj4ke2Rpc3BsYXlTdWdnZXN0aW9ufTwvZGl2PmA7XG4gICAgICB9LFxuICAgICAgcGVuZGluZyhxdWVyeSkge1xuICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJweC0yXCI+U2VhcmNoaW5nIGZvciBcIiR7cXVlcnkucXVlcnl9XCI8L2Rpdj5gO1xuICAgICAgfSxcbiAgICAgIG5vdEZvdW5kKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cInB4LTJcIj5ObyByZXN1bHRzIGZvdW5kIGZvciBcIiR7cXVlcnkucXVlcnl9XCI8L2Rpdj5gO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnB1dENvbmZpZywgJ3RlbXBsYXRlcycpKSB7XG4gICAgICB0aGlzLmRhdGFTZXRDb25maWcudGVtcGxhdGVzID0gey4uLmRlZmF1bHRUZW1wbGF0ZXMsIC4uLmlucHV0Q29uZmlnLnRlbXBsYXRlc307XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVNldENvbmZpZy50ZW1wbGF0ZXMgPSBkZWZhdWx0VGVtcGxhdGVzO1xuICAgIH1cblxuICAgIHRoaXMuYnVpbGRUeXBlYWhlYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgdHlwZWFoZWFkIGNvbXBvbmVudCBiYXNlZCBvbiBwcm92aWRlZCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgYnVpbGRUeXBlYWhlYWQoKSB7XG4gICAgdGhpcy4kc2VhcmNoSW5wdXQudHlwZWFoZWFkKHRoaXMuY29uZmlnLCB0aGlzLmRhdGFTZXRDb25maWcpXG4gICAgICAuYmluZCgndHlwZWFoZWFkOnNlbGVjdCcsIChlLCBzZWxlY3RlZEl0ZW0pID0+IHRoaXMuY29uZmlnLm9uU2VsZWN0KHNlbGVjdGVkSXRlbSwgZSwgdGhpcy4kc2VhcmNoSW5wdXQpKVxuICAgICAgLmJpbmQoJ3R5cGVhaGVhZDpjbG9zZScsIChlKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnLm9uQ2xvc2UoZSwgdGhpcy4kc2VhcmNoSW5wdXQpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQge1xuICBtdWx0aXN0b3JlRHJvcGRvd246IHtcbiAgICBzZWFyY2hJbnB1dDogJy5qcy1tdWx0aXN0b3JlLWRyb3Bkb3duLXNlYXJjaCcsXG4gICAgc2Nyb2xsYmFyOiAnLmpzLW11bHRpc3RvcmUtc2Nyb2xsYmFyJyxcbiAgfSxcbiAgbXVsdGlzdG9yZUhlYWRlcjoge1xuICAgIG1vZGFsOiAnLmpzLW11bHRpc2hvcC1tb2RhbCcsXG4gICAgaGVhZGVyQnV0dG9uOiAnLmpzLWhlYWRlci1tdWx0aXNob3Atb3Blbi1tb2RhbCcsXG4gICAgc2VhcmNoSW5wdXQ6ICcuanMtbXVsdGlzaG9wLW1vZGFsLXNlYXJjaCcsXG4gICAganNTY3JvbGxiYXI6ICcuanMtbXVsdGlzaG9wLXNjcm9sbGJhcicsXG4gICAgc2V0Q29udGV4dFVybDogKGxvY2F0aW9uLCB1cmxMZXR0ZXIsIGl0ZW1JZCkgPT4ge1xuICAgICAgY29uc3Qgc2V0Q29udGV4dFBhcmFtZXRlciA9IGBzZXRTaG9wQ29udGV4dD0ke3VybExldHRlcn0tJHtpdGVtSWR9YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwobG9jYXRpb24pO1xuXG4gICAgICBpZiAodXJsLnNlYXJjaCA9PT0gJycpIHtcbiAgICAgICAgdXJsLnNlYXJjaCA9IGA/JHtzZXRDb250ZXh0UGFyYW1ldGVyfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwuc2VhcmNoICs9IGAmJHtzZXRDb250ZXh0UGFyYW1ldGVyfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgICB9LFxuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFJvdXRpbmcgZnJvbSAnZm9zLXJvdXRpbmcnO1xuaW1wb3J0IHJvdXRlcyBmcm9tICdAanMvZm9zX2pzX3JvdXRlcy5qc29uJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIFdyYXBzIEZPU0pzUm91dGluZ2J1bmRsZSB3aXRoIGV4cG9zZWQgcm91dGVzLlxuICogVG8gZXhwb3NlIHJvdXRlIGFkZCBvcHRpb24gYGV4cG9zZTogdHJ1ZWAgaW4gLnltbCByb3V0aW5nIGNvbmZpZ1xuICpcbiAqIGUuZy5cbiAqXG4gKiBgbXlfcm91dGVcbiAqICAgIHBhdGg6IC9teS1wYXRoXG4gKiAgICBvcHRpb25zOlxuICogICAgICBleHBvc2U6IHRydWVcbiAqIGBcbiAqIEFuZCBydW4gYGJpbi9jb25zb2xlIGZvczpqcy1yb3V0aW5nOmR1bXAgLS1mb3JtYXQ9anNvbiAtLXRhcmdldD1hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9qcy9mb3NfanNfcm91dGVzLmpzb25gXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICh3aW5kb3cucHJlc3Rhc2hvcCAmJiB3aW5kb3cucHJlc3Rhc2hvcC5jdXN0b21Sb3V0ZXMpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocm91dGVzLnJvdXRlcywgd2luZG93LnByZXN0YXNob3AuY3VzdG9tUm91dGVzKTtcbiAgICB9XG5cbiAgICBSb3V0aW5nLnNldERhdGEocm91dGVzKTtcbiAgICBSb3V0aW5nLnNldEJhc2VVcmwoXG4gICAgICAkKGRvY3VtZW50KVxuICAgICAgICAuZmluZCgnYm9keScpXG4gICAgICAgIC5kYXRhKCdiYXNlLXVybCcpLFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvcmF0ZWQgXCJnZW5lcmF0ZVwiIG1ldGhvZCwgd2l0aCBwcmVkZWZpbmVkIHNlY3VyaXR5IHRva2VuIGluIHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0gcm91dGVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgKi9cbiAgZ2VuZXJhdGUocm91dGUsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgdG9rZW5pemVkUGFyYW1zID0gT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgIF90b2tlbjogJChkb2N1bWVudClcbiAgICAgICAgLmZpbmQoJ2JvZHknKVxuICAgICAgICAuZGF0YSgndG9rZW4nKSxcbiAgICB9KTtcblxuICAgIHJldHVybiBSb3V0aW5nLmdlbmVyYXRlKHJvdXRlLCB0b2tlbml6ZWRQYXJhbXMpO1xuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnblwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZpbmVQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9hc3NpZ25cIik7XG5cbnZhciBfYXNzaWduMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Fzc2lnbik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9hc3NpZ24yLmRlZmF1bHQgfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5hc3NpZ247XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuICRPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgSVNfV1JBUCA9IHR5cGUgJiAkZXhwb3J0Llc7XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXTtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBrZXksIG93biwgb3V0O1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChvd24gJiYgaGFzKGV4cG9ydHMsIGtleSkpIGNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24gKEMpIHtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBDKSB7XG4gICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQygpO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZiAoSVNfUFJPVE8pIHtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZiAodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSkgaGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHsgYXNzaWduOiByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO3ZhciBfZXh0ZW5kcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihhKXtmb3IodmFyIGIsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspZm9yKHZhciBkIGluIGI9YXJndW1lbnRzW2NdLGIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsZCkmJihhW2RdPWJbZF0pO3JldHVybiBhfSxfdHlwZW9mPSdmdW5jdGlvbic9PXR5cGVvZiBTeW1ib2wmJidzeW1ib2wnPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYX06ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJidmdW5jdGlvbic9PXR5cGVvZiBTeW1ib2wmJmEuY29uc3RydWN0b3I9PT1TeW1ib2wmJmEhPT1TeW1ib2wucHJvdG90eXBlPydzeW1ib2wnOnR5cGVvZiBhfTtmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKX12YXIgUm91dGluZz1mdW5jdGlvbiBhKCl7dmFyIGI9dGhpcztfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSx0aGlzLnNldFJvdXRlcz1mdW5jdGlvbihhKXtiLnJvdXRlc1JvdXRpbmc9YXx8W119LHRoaXMuZ2V0Um91dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGIucm91dGVzUm91dGluZ30sdGhpcy5zZXRCYXNlVXJsPWZ1bmN0aW9uKGEpe2IuY29udGV4dFJvdXRpbmcuYmFzZV91cmw9YX0sdGhpcy5nZXRCYXNlVXJsPWZ1bmN0aW9uKCl7cmV0dXJuIGIuY29udGV4dFJvdXRpbmcuYmFzZV91cmx9LHRoaXMuc2V0UHJlZml4PWZ1bmN0aW9uKGEpe2IuY29udGV4dFJvdXRpbmcucHJlZml4PWF9LHRoaXMuc2V0U2NoZW1lPWZ1bmN0aW9uKGEpe2IuY29udGV4dFJvdXRpbmcuc2NoZW1lPWF9LHRoaXMuZ2V0U2NoZW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGIuY29udGV4dFJvdXRpbmcuc2NoZW1lfSx0aGlzLnNldEhvc3Q9ZnVuY3Rpb24oYSl7Yi5jb250ZXh0Um91dGluZy5ob3N0PWF9LHRoaXMuZ2V0SG9zdD1mdW5jdGlvbigpe3JldHVybiBiLmNvbnRleHRSb3V0aW5nLmhvc3R9LHRoaXMuYnVpbGRRdWVyeVBhcmFtcz1mdW5jdGlvbihhLGMsZCl7dmFyIGU9bmV3IFJlZ0V4cCgvXFxbXSQvKTtjIGluc3RhbmNlb2YgQXJyYXk/Yy5mb3JFYWNoKGZ1bmN0aW9uKGMsZil7ZS50ZXN0KGEpP2QoYSxjKTpiLmJ1aWxkUXVlcnlQYXJhbXMoYSsnWycrKCdvYmplY3QnPT09KCd1bmRlZmluZWQnPT10eXBlb2YgYz8ndW5kZWZpbmVkJzpfdHlwZW9mKGMpKT9mOicnKSsnXScsYyxkKX0pOidvYmplY3QnPT09KCd1bmRlZmluZWQnPT10eXBlb2YgYz8ndW5kZWZpbmVkJzpfdHlwZW9mKGMpKT9PYmplY3Qua2V5cyhjKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBiLmJ1aWxkUXVlcnlQYXJhbXMoYSsnWycrZSsnXScsY1tlXSxkKX0pOmQoYSxjKX0sdGhpcy5nZXRSb3V0ZT1mdW5jdGlvbihhKXt2YXIgYz1iLmNvbnRleHRSb3V0aW5nLnByZWZpeCthO2lmKCEhYi5yb3V0ZXNSb3V0aW5nW2NdKXJldHVybiBiLnJvdXRlc1JvdXRpbmdbY107ZWxzZSBpZighYi5yb3V0ZXNSb3V0aW5nW2FdKXRocm93IG5ldyBFcnJvcignVGhlIHJvdXRlIFwiJythKydcIiBkb2VzIG5vdCBleGlzdC4nKTtyZXR1cm4gYi5yb3V0ZXNSb3V0aW5nW2FdfSx0aGlzLmdlbmVyYXRlPWZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1iLmdldFJvdXRlKGEpLGY9Y3x8e30sZz1fZXh0ZW5kcyh7fSxmKSxoPSdfc2NoZW1lJyxpPScnLGo9ITAsaz0nJztpZigoZS50b2tlbnN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2lmKCd0ZXh0Jz09PWJbMF0pcmV0dXJuIGk9YlsxXStpLHZvaWQoaj0hMSk7aWYoJ3ZhcmlhYmxlJz09PWJbMF0pe3ZhciBjPShlLmRlZmF1bHRzfHx7fSlbYlszXV07aWYoITE9PWp8fCFjfHwoZnx8e30pW2JbM11dJiZmW2JbM11dIT09ZS5kZWZhdWx0c1tiWzNdXSl7dmFyIGQ7aWYoKGZ8fHt9KVtiWzNdXSlkPWZbYlszXV0sZGVsZXRlIGdbYlszXV07ZWxzZSBpZihjKWQ9ZS5kZWZhdWx0c1tiWzNdXTtlbHNle2lmKGopcmV0dXJuO3Rocm93IG5ldyBFcnJvcignVGhlIHJvdXRlIFwiJythKydcIiByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIFwiJytiWzNdKydcIi4nKX12YXIgaD0hMD09PWR8fCExPT09ZHx8Jyc9PT1kO2lmKCFofHwhail7dmFyIGs9ZW5jb2RlVVJJQ29tcG9uZW50KGQpLnJlcGxhY2UoLyUyRi9nLCcvJyk7J251bGwnPT09ayYmbnVsbD09PWQmJihrPScnKSxpPWJbMV0raytpfWo9ITF9ZWxzZSBjJiZkZWxldGUgZ1tiWzNdXTtyZXR1cm59dGhyb3cgbmV3IEVycm9yKCdUaGUgdG9rZW4gdHlwZSBcIicrYlswXSsnXCIgaXMgbm90IHN1cHBvcnRlZC4nKX0pLCcnPT1pJiYoaT0nLycpLChlLmhvc3R0b2tlbnN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybid0ZXh0Jz09PWFbMF0/dm9pZChrPWFbMV0rayk6dm9pZCgndmFyaWFibGUnPT09YVswXSYmKChmfHx7fSlbYVszXV0/KGI9ZlthWzNdXSxkZWxldGUgZ1thWzNdXSk6ZS5kZWZhdWx0c1thWzNdXSYmKGI9ZS5kZWZhdWx0c1thWzNdXSksaz1hWzFdK2IraykpfSksaT1iLmNvbnRleHRSb3V0aW5nLmJhc2VfdXJsK2ksZS5yZXF1aXJlbWVudHNbaF0mJmIuZ2V0U2NoZW1lKCkhPT1lLnJlcXVpcmVtZW50c1toXT9pPWUucmVxdWlyZW1lbnRzW2hdKyc6Ly8nKyhrfHxiLmdldEhvc3QoKSkraTprJiZiLmdldEhvc3QoKSE9PWs/aT1iLmdldFNjaGVtZSgpKyc6Ly8nK2sraTohMD09PWQmJihpPWIuZ2V0U2NoZW1lKCkrJzovLycrYi5nZXRIb3N0KCkraSksMDxPYmplY3Qua2V5cyhnKS5sZW5ndGgpe3ZhciBsPVtdLG09ZnVuY3Rpb24oYSxiKXt2YXIgYz1iO2M9J2Z1bmN0aW9uJz09dHlwZW9mIGM/YygpOmMsYz1udWxsPT09Yz8nJzpjLGwucHVzaChlbmNvZGVVUklDb21wb25lbnQoYSkrJz0nK2VuY29kZVVSSUNvbXBvbmVudChjKSl9O09iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGIuYnVpbGRRdWVyeVBhcmFtcyhhLGdbYV0sbSl9KSxpPWkrJz8nK2wuam9pbignJicpLnJlcGxhY2UoLyUyMC9nLCcrJyl9cmV0dXJuIGl9LHRoaXMuc2V0RGF0YT1mdW5jdGlvbihhKXtiLnNldEJhc2VVcmwoYS5iYXNlX3VybCksYi5zZXRSb3V0ZXMoYS5yb3V0ZXMpLCdwcmVmaXgnaW4gYSYmYi5zZXRQcmVmaXgoYS5wcmVmaXgpLGIuc2V0SG9zdChhLmhvc3QpLGIuc2V0U2NoZW1lKGEuc2NoZW1lKX0sdGhpcy5jb250ZXh0Um91dGluZz17YmFzZV91cmw6JycscHJlZml4OicnLGhvc3Q6Jycsc2NoZW1lOicnfX07bW9kdWxlLmV4cG9ydHM9bmV3IFJvdXRpbmc7IiwiLyohXG4gKiBwZXJmZWN0LXNjcm9sbGJhciB2MS41LjBcbiAqIENvcHlyaWdodCAyMDIwIEh5dW5qZSBKdW4sIE1EQm9vdHN0cmFwIGFuZCBDb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVFxuICovXG5cbmZ1bmN0aW9uIGdldChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBzZXQoZWxlbWVudCwgb2JqKSB7XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICB2YWwgPSB2YWwgKyBcInB4XCI7XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHZhbDtcbiAgfVxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZGl2KGNsYXNzTmFtZSkge1xuICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGRpdi5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gIHJldHVybiBkaXY7XG59XG5cbnZhciBlbE1hdGNoZXMgPVxuICB0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgKEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3Rvcik7XG5cbmZ1bmN0aW9uIG1hdGNoZXMoZWxlbWVudCwgcXVlcnkpIHtcbiAgaWYgKCFlbE1hdGNoZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgbWF0Y2hpbmcgbWV0aG9kIHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgcmV0dXJuIGVsTWF0Y2hlcy5jYWxsKGVsZW1lbnQsIHF1ZXJ5KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQucmVtb3ZlKSB7XG4gICAgZWxlbWVudC5yZW1vdmUoKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5Q2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlbGVtZW50LmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIG1hdGNoZXMoY2hpbGQsIHNlbGVjdG9yKTsgfVxuICApO1xufVxuXG52YXIgY2xzID0ge1xuICBtYWluOiAncHMnLFxuICBydGw6ICdwc19fcnRsJyxcbiAgZWxlbWVudDoge1xuICAgIHRodW1iOiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gKFwicHNfX3RodW1iLVwiICsgeCk7IH0sXG4gICAgcmFpbDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIChcInBzX19yYWlsLVwiICsgeCk7IH0sXG4gICAgY29uc3VtaW5nOiAncHNfX2NoaWxkLS1jb25zdW1lJyxcbiAgfSxcbiAgc3RhdGU6IHtcbiAgICBmb2N1czogJ3BzLS1mb2N1cycsXG4gICAgY2xpY2tpbmc6ICdwcy0tY2xpY2tpbmcnLFxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIChcInBzLS1hY3RpdmUtXCIgKyB4KTsgfSxcbiAgICBzY3JvbGxpbmc6IGZ1bmN0aW9uICh4KSB7IHJldHVybiAoXCJwcy0tc2Nyb2xsaW5nLVwiICsgeCk7IH0sXG4gIH0sXG59O1xuXG4vKlxuICogSGVscGVyIG1ldGhvZHNcbiAqL1xudmFyIHNjcm9sbGluZ0NsYXNzVGltZW91dCA9IHsgeDogbnVsbCwgeTogbnVsbCB9O1xuXG5mdW5jdGlvbiBhZGRTY3JvbGxpbmdDbGFzcyhpLCB4KSB7XG4gIHZhciBjbGFzc0xpc3QgPSBpLmVsZW1lbnQuY2xhc3NMaXN0O1xuICB2YXIgY2xhc3NOYW1lID0gY2xzLnN0YXRlLnNjcm9sbGluZyh4KTtcblxuICBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcbiAgICBjbGVhclRpbWVvdXQoc2Nyb2xsaW5nQ2xhc3NUaW1lb3V0W3hdKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2Nyb2xsaW5nQ2xhc3MoaSwgeCkge1xuICBzY3JvbGxpbmdDbGFzc1RpbWVvdXRbeF0gPSBzZXRUaW1lb3V0KFxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkuaXNBbGl2ZSAmJiBpLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbHMuc3RhdGUuc2Nyb2xsaW5nKHgpKTsgfSxcbiAgICBpLnNldHRpbmdzLnNjcm9sbGluZ1RocmVzaG9sZFxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxpbmdDbGFzc0luc3RhbnRseShpLCB4KSB7XG4gIGFkZFNjcm9sbGluZ0NsYXNzKGksIHgpO1xuICByZW1vdmVTY3JvbGxpbmdDbGFzcyhpLCB4KTtcbn1cblxudmFyIEV2ZW50RWxlbWVudCA9IGZ1bmN0aW9uIEV2ZW50RWxlbWVudChlbGVtZW50KSB7XG4gIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gIHRoaXMuaGFuZGxlcnMgPSB7fTtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGlzRW1wdHk6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuRXZlbnRFbGVtZW50LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCAoZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gIGlmICh0eXBlb2YgdGhpcy5oYW5kbGVyc1tldmVudE5hbWVdID09PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXSA9IFtdO1xuICB9XG4gIHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXS5wdXNoKGhhbmRsZXIpO1xuICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RWxlbWVudC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kIChldmVudE5hbWUsIHRhcmdldCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXSA9IHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXS5maWx0ZXIoZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICBpZiAodGFyZ2V0ICYmIGhhbmRsZXIgIT09IHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRoaXMkMS5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn07XG5cbkV2ZW50RWxlbWVudC5wcm90b3R5cGUudW5iaW5kQWxsID0gZnVuY3Rpb24gdW5iaW5kQWxsICgpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLmhhbmRsZXJzKSB7XG4gICAgdGhpcy51bmJpbmQobmFtZSk7XG4gIH1cbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5pc0VtcHR5LmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5oYW5kbGVycykuZXZlcnkoXG4gICAgZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gdGhpcyQxLmhhbmRsZXJzW2tleV0ubGVuZ3RoID09PSAwOyB9XG4gICk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggRXZlbnRFbGVtZW50LnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbnZhciBFdmVudE1hbmFnZXIgPSBmdW5jdGlvbiBFdmVudE1hbmFnZXIoKSB7XG4gIHRoaXMuZXZlbnRFbGVtZW50cyA9IFtdO1xufTtcblxuRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS5ldmVudEVsZW1lbnQgPSBmdW5jdGlvbiBldmVudEVsZW1lbnQgKGVsZW1lbnQpIHtcbiAgdmFyIGVlID0gdGhpcy5ldmVudEVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoZWUpIHsgcmV0dXJuIGVlLmVsZW1lbnQgPT09IGVsZW1lbnQ7IH0pWzBdO1xuICBpZiAoIWVlKSB7XG4gICAgZWUgPSBuZXcgRXZlbnRFbGVtZW50KGVsZW1lbnQpO1xuICAgIHRoaXMuZXZlbnRFbGVtZW50cy5wdXNoKGVlKTtcbiAgfVxuICByZXR1cm4gZWU7XG59O1xuXG5FdmVudE1hbmFnZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kIChlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgdGhpcy5ldmVudEVsZW1lbnQoZWxlbWVudCkuYmluZChldmVudE5hbWUsIGhhbmRsZXIpO1xufTtcblxuRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQgKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICB2YXIgZWUgPSB0aGlzLmV2ZW50RWxlbWVudChlbGVtZW50KTtcbiAgZWUudW5iaW5kKGV2ZW50TmFtZSwgaGFuZGxlcik7XG5cbiAgaWYgKGVlLmlzRW1wdHkpIHtcbiAgICAvLyByZW1vdmVcbiAgICB0aGlzLmV2ZW50RWxlbWVudHMuc3BsaWNlKHRoaXMuZXZlbnRFbGVtZW50cy5pbmRleE9mKGVlKSwgMSk7XG4gIH1cbn07XG5cbkV2ZW50TWFuYWdlci5wcm90b3R5cGUudW5iaW5kQWxsID0gZnVuY3Rpb24gdW5iaW5kQWxsICgpIHtcbiAgdGhpcy5ldmVudEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUudW5iaW5kQWxsKCk7IH0pO1xuICB0aGlzLmV2ZW50RWxlbWVudHMgPSBbXTtcbn07XG5cbkV2ZW50TWFuYWdlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UgKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICB2YXIgZWUgPSB0aGlzLmV2ZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIG9uY2VIYW5kbGVyID0gZnVuY3Rpb24gKGV2dCkge1xuICAgIGVlLnVuYmluZChldmVudE5hbWUsIG9uY2VIYW5kbGVyKTtcbiAgICBoYW5kbGVyKGV2dCk7XG4gIH07XG4gIGVlLmJpbmQoZXZlbnROYW1lLCBvbmNlSGFuZGxlcik7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVFdmVudChuYW1lKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChuYW1lKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gICAgZXZ0LmluaXRDdXN0b21FdmVudChuYW1lLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIGV2dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzU2Nyb2xsRGlmZihcbiAgaSxcbiAgYXhpcyxcbiAgZGlmZixcbiAgdXNlU2Nyb2xsaW5nQ2xhc3MsXG4gIGZvcmNlRmlyZVJlYWNoRXZlbnRcbikge1xuICBpZiAoIHVzZVNjcm9sbGluZ0NsYXNzID09PSB2b2lkIDAgKSB1c2VTY3JvbGxpbmdDbGFzcyA9IHRydWU7XG4gIGlmICggZm9yY2VGaXJlUmVhY2hFdmVudCA9PT0gdm9pZCAwICkgZm9yY2VGaXJlUmVhY2hFdmVudCA9IGZhbHNlO1xuXG4gIHZhciBmaWVsZHM7XG4gIGlmIChheGlzID09PSAndG9wJykge1xuICAgIGZpZWxkcyA9IFtcbiAgICAgICdjb250ZW50SGVpZ2h0JyxcbiAgICAgICdjb250YWluZXJIZWlnaHQnLFxuICAgICAgJ3Njcm9sbFRvcCcsXG4gICAgICAneScsXG4gICAgICAndXAnLFxuICAgICAgJ2Rvd24nIF07XG4gIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ2xlZnQnKSB7XG4gICAgZmllbGRzID0gW1xuICAgICAgJ2NvbnRlbnRXaWR0aCcsXG4gICAgICAnY29udGFpbmVyV2lkdGgnLFxuICAgICAgJ3Njcm9sbExlZnQnLFxuICAgICAgJ3gnLFxuICAgICAgJ2xlZnQnLFxuICAgICAgJ3JpZ2h0JyBdO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBwcm9wZXIgYXhpcyBzaG91bGQgYmUgcHJvdmlkZWQnKTtcbiAgfVxuXG4gIHByb2Nlc3NTY3JvbGxEaWZmJDEoaSwgZGlmZiwgZmllbGRzLCB1c2VTY3JvbGxpbmdDbGFzcywgZm9yY2VGaXJlUmVhY2hFdmVudCk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NTY3JvbGxEaWZmJDEoXG4gIGksXG4gIGRpZmYsXG4gIHJlZixcbiAgdXNlU2Nyb2xsaW5nQ2xhc3MsXG4gIGZvcmNlRmlyZVJlYWNoRXZlbnRcbikge1xuICB2YXIgY29udGVudEhlaWdodCA9IHJlZlswXTtcbiAgdmFyIGNvbnRhaW5lckhlaWdodCA9IHJlZlsxXTtcbiAgdmFyIHNjcm9sbFRvcCA9IHJlZlsyXTtcbiAgdmFyIHkgPSByZWZbM107XG4gIHZhciB1cCA9IHJlZls0XTtcbiAgdmFyIGRvd24gPSByZWZbNV07XG4gIGlmICggdXNlU2Nyb2xsaW5nQ2xhc3MgPT09IHZvaWQgMCApIHVzZVNjcm9sbGluZ0NsYXNzID0gdHJ1ZTtcbiAgaWYgKCBmb3JjZUZpcmVSZWFjaEV2ZW50ID09PSB2b2lkIDAgKSBmb3JjZUZpcmVSZWFjaEV2ZW50ID0gZmFsc2U7XG5cbiAgdmFyIGVsZW1lbnQgPSBpLmVsZW1lbnQ7XG5cbiAgLy8gcmVzZXQgcmVhY2hcbiAgaS5yZWFjaFt5XSA9IG51bGw7XG5cbiAgLy8gMSBmb3Igc3VicGl4ZWwgcm91bmRpbmdcbiAgaWYgKGVsZW1lbnRbc2Nyb2xsVG9wXSA8IDEpIHtcbiAgICBpLnJlYWNoW3ldID0gJ3N0YXJ0JztcbiAgfVxuXG4gIC8vIDEgZm9yIHN1YnBpeGVsIHJvdW5kaW5nXG4gIGlmIChlbGVtZW50W3Njcm9sbFRvcF0gPiBpW2NvbnRlbnRIZWlnaHRdIC0gaVtjb250YWluZXJIZWlnaHRdIC0gMSkge1xuICAgIGkucmVhY2hbeV0gPSAnZW5kJztcbiAgfVxuXG4gIGlmIChkaWZmKSB7XG4gICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KChcInBzLXNjcm9sbC1cIiArIHkpKSk7XG5cbiAgICBpZiAoZGlmZiA8IDApIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudCgoXCJwcy1zY3JvbGwtXCIgKyB1cCkpKTtcbiAgICB9IGVsc2UgaWYgKGRpZmYgPiAwKSB7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoY3JlYXRlRXZlbnQoKFwicHMtc2Nyb2xsLVwiICsgZG93bikpKTtcbiAgICB9XG5cbiAgICBpZiAodXNlU2Nyb2xsaW5nQ2xhc3MpIHtcbiAgICAgIHNldFNjcm9sbGluZ0NsYXNzSW5zdGFudGx5KGksIHkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpLnJlYWNoW3ldICYmIChkaWZmIHx8IGZvcmNlRmlyZVJlYWNoRXZlbnQpKSB7XG4gICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KChcInBzLVwiICsgeSArIFwiLXJlYWNoLVwiICsgKGkucmVhY2hbeV0pKSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvSW50KHgpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHgsIDEwKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBpc0VkaXRhYmxlKGVsKSB7XG4gIHJldHVybiAoXG4gICAgbWF0Y2hlcyhlbCwgJ2lucHV0LFtjb250ZW50ZWRpdGFibGVdJykgfHxcbiAgICBtYXRjaGVzKGVsLCAnc2VsZWN0LFtjb250ZW50ZWRpdGFibGVdJykgfHxcbiAgICBtYXRjaGVzKGVsLCAndGV4dGFyZWEsW2NvbnRlbnRlZGl0YWJsZV0nKSB8fFxuICAgIG1hdGNoZXMoZWwsICdidXR0b24sW2NvbnRlbnRlZGl0YWJsZV0nKVxuICApO1xufVxuXG5mdW5jdGlvbiBvdXRlcldpZHRoKGVsZW1lbnQpIHtcbiAgdmFyIHN0eWxlcyA9IGdldChlbGVtZW50KTtcbiAgcmV0dXJuIChcbiAgICB0b0ludChzdHlsZXMud2lkdGgpICtcbiAgICB0b0ludChzdHlsZXMucGFkZGluZ0xlZnQpICtcbiAgICB0b0ludChzdHlsZXMucGFkZGluZ1JpZ2h0KSArXG4gICAgdG9JbnQoc3R5bGVzLmJvcmRlckxlZnRXaWR0aCkgK1xuICAgIHRvSW50KHN0eWxlcy5ib3JkZXJSaWdodFdpZHRoKVxuICApO1xufVxuXG52YXIgZW52ID0ge1xuICBpc1dlYktpdDpcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgJ1dlYmtpdEFwcGVhcmFuY2UnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxcbiAgc3VwcG9ydHNUb3VjaDpcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHxcbiAgICAgICgnbWF4VG91Y2hQb2ludHMnIGluIHdpbmRvdy5uYXZpZ2F0b3IgJiZcbiAgICAgICAgd2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDApIHx8XG4gICAgICAod2luZG93LkRvY3VtZW50VG91Y2ggJiYgZG9jdW1lbnQgaW5zdGFuY2VvZiB3aW5kb3cuRG9jdW1lbnRUb3VjaCkpLFxuICBzdXBwb3J0c0llUG9pbnRlcjpcbiAgICB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyxcbiAgaXNDaHJvbWU6XG4gICAgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvQ2hyb21lL2kudGVzdChuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCksXG59O1xuXG5mdW5jdGlvbiB1cGRhdGVHZW9tZXRyeShpKSB7XG4gIHZhciBlbGVtZW50ID0gaS5lbGVtZW50O1xuICB2YXIgcm91bmRlZFNjcm9sbFRvcCA9IE1hdGguZmxvb3IoZWxlbWVudC5zY3JvbGxUb3ApO1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgaS5jb250YWluZXJXaWR0aCA9IE1hdGguY2VpbChyZWN0LndpZHRoKTtcbiAgaS5jb250YWluZXJIZWlnaHQgPSBNYXRoLmNlaWwocmVjdC5oZWlnaHQpO1xuICBpLmNvbnRlbnRXaWR0aCA9IGVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIGkuY29udGVudEhlaWdodCA9IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuXG4gIGlmICghZWxlbWVudC5jb250YWlucyhpLnNjcm9sbGJhclhSYWlsKSkge1xuICAgIC8vIGNsZWFuIHVwIGFuZCBhcHBlbmRcbiAgICBxdWVyeUNoaWxkcmVuKGVsZW1lbnQsIGNscy5lbGVtZW50LnJhaWwoJ3gnKSkuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIHJlbW92ZShlbCk7IH1cbiAgICApO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaS5zY3JvbGxiYXJYUmFpbCk7XG4gIH1cbiAgaWYgKCFlbGVtZW50LmNvbnRhaW5zKGkuc2Nyb2xsYmFyWVJhaWwpKSB7XG4gICAgLy8gY2xlYW4gdXAgYW5kIGFwcGVuZFxuICAgIHF1ZXJ5Q2hpbGRyZW4oZWxlbWVudCwgY2xzLmVsZW1lbnQucmFpbCgneScpKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gcmVtb3ZlKGVsKTsgfVxuICAgICk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChpLnNjcm9sbGJhcllSYWlsKTtcbiAgfVxuXG4gIGlmIChcbiAgICAhaS5zZXR0aW5ncy5zdXBwcmVzc1Njcm9sbFggJiZcbiAgICBpLmNvbnRhaW5lcldpZHRoICsgaS5zZXR0aW5ncy5zY3JvbGxYTWFyZ2luT2Zmc2V0IDwgaS5jb250ZW50V2lkdGhcbiAgKSB7XG4gICAgaS5zY3JvbGxiYXJYQWN0aXZlID0gdHJ1ZTtcbiAgICBpLnJhaWxYV2lkdGggPSBpLmNvbnRhaW5lcldpZHRoIC0gaS5yYWlsWE1hcmdpbldpZHRoO1xuICAgIGkucmFpbFhSYXRpbyA9IGkuY29udGFpbmVyV2lkdGggLyBpLnJhaWxYV2lkdGg7XG4gICAgaS5zY3JvbGxiYXJYV2lkdGggPSBnZXRUaHVtYlNpemUoXG4gICAgICBpLFxuICAgICAgdG9JbnQoKGkucmFpbFhXaWR0aCAqIGkuY29udGFpbmVyV2lkdGgpIC8gaS5jb250ZW50V2lkdGgpXG4gICAgKTtcbiAgICBpLnNjcm9sbGJhclhMZWZ0ID0gdG9JbnQoXG4gICAgICAoKGkubmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50ICsgZWxlbWVudC5zY3JvbGxMZWZ0KSAqXG4gICAgICAgIChpLnJhaWxYV2lkdGggLSBpLnNjcm9sbGJhclhXaWR0aCkpIC9cbiAgICAgICAgKGkuY29udGVudFdpZHRoIC0gaS5jb250YWluZXJXaWR0aClcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGkuc2Nyb2xsYmFyWEFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFpLnNldHRpbmdzLnN1cHByZXNzU2Nyb2xsWSAmJlxuICAgIGkuY29udGFpbmVySGVpZ2h0ICsgaS5zZXR0aW5ncy5zY3JvbGxZTWFyZ2luT2Zmc2V0IDwgaS5jb250ZW50SGVpZ2h0XG4gICkge1xuICAgIGkuc2Nyb2xsYmFyWUFjdGl2ZSA9IHRydWU7XG4gICAgaS5yYWlsWUhlaWdodCA9IGkuY29udGFpbmVySGVpZ2h0IC0gaS5yYWlsWU1hcmdpbkhlaWdodDtcbiAgICBpLnJhaWxZUmF0aW8gPSBpLmNvbnRhaW5lckhlaWdodCAvIGkucmFpbFlIZWlnaHQ7XG4gICAgaS5zY3JvbGxiYXJZSGVpZ2h0ID0gZ2V0VGh1bWJTaXplKFxuICAgICAgaSxcbiAgICAgIHRvSW50KChpLnJhaWxZSGVpZ2h0ICogaS5jb250YWluZXJIZWlnaHQpIC8gaS5jb250ZW50SGVpZ2h0KVxuICAgICk7XG4gICAgaS5zY3JvbGxiYXJZVG9wID0gdG9JbnQoXG4gICAgICAocm91bmRlZFNjcm9sbFRvcCAqIChpLnJhaWxZSGVpZ2h0IC0gaS5zY3JvbGxiYXJZSGVpZ2h0KSkgL1xuICAgICAgICAoaS5jb250ZW50SGVpZ2h0IC0gaS5jb250YWluZXJIZWlnaHQpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBpLnNjcm9sbGJhcllBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpLnNjcm9sbGJhclhMZWZ0ID49IGkucmFpbFhXaWR0aCAtIGkuc2Nyb2xsYmFyWFdpZHRoKSB7XG4gICAgaS5zY3JvbGxiYXJYTGVmdCA9IGkucmFpbFhXaWR0aCAtIGkuc2Nyb2xsYmFyWFdpZHRoO1xuICB9XG4gIGlmIChpLnNjcm9sbGJhcllUb3AgPj0gaS5yYWlsWUhlaWdodCAtIGkuc2Nyb2xsYmFyWUhlaWdodCkge1xuICAgIGkuc2Nyb2xsYmFyWVRvcCA9IGkucmFpbFlIZWlnaHQgLSBpLnNjcm9sbGJhcllIZWlnaHQ7XG4gIH1cblxuICB1cGRhdGVDc3MoZWxlbWVudCwgaSk7XG5cbiAgaWYgKGkuc2Nyb2xsYmFyWEFjdGl2ZSkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbHMuc3RhdGUuYWN0aXZlKCd4JykpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbHMuc3RhdGUuYWN0aXZlKCd4JykpO1xuICAgIGkuc2Nyb2xsYmFyWFdpZHRoID0gMDtcbiAgICBpLnNjcm9sbGJhclhMZWZ0ID0gMDtcbiAgICBlbGVtZW50LnNjcm9sbExlZnQgPSBpLmlzUnRsID09PSB0cnVlID8gaS5jb250ZW50V2lkdGggOiAwO1xuICB9XG4gIGlmIChpLnNjcm9sbGJhcllBY3RpdmUpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xzLnN0YXRlLmFjdGl2ZSgneScpKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xzLnN0YXRlLmFjdGl2ZSgneScpKTtcbiAgICBpLnNjcm9sbGJhcllIZWlnaHQgPSAwO1xuICAgIGkuc2Nyb2xsYmFyWVRvcCA9IDA7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRodW1iU2l6ZShpLCB0aHVtYlNpemUpIHtcbiAgaWYgKGkuc2V0dGluZ3MubWluU2Nyb2xsYmFyTGVuZ3RoKSB7XG4gICAgdGh1bWJTaXplID0gTWF0aC5tYXgodGh1bWJTaXplLCBpLnNldHRpbmdzLm1pblNjcm9sbGJhckxlbmd0aCk7XG4gIH1cbiAgaWYgKGkuc2V0dGluZ3MubWF4U2Nyb2xsYmFyTGVuZ3RoKSB7XG4gICAgdGh1bWJTaXplID0gTWF0aC5taW4odGh1bWJTaXplLCBpLnNldHRpbmdzLm1heFNjcm9sbGJhckxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHRodW1iU2l6ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ3NzKGVsZW1lbnQsIGkpIHtcbiAgdmFyIHhSYWlsT2Zmc2V0ID0geyB3aWR0aDogaS5yYWlsWFdpZHRoIH07XG4gIHZhciByb3VuZGVkU2Nyb2xsVG9wID0gTWF0aC5mbG9vcihlbGVtZW50LnNjcm9sbFRvcCk7XG5cbiAgaWYgKGkuaXNSdGwpIHtcbiAgICB4UmFpbE9mZnNldC5sZWZ0ID1cbiAgICAgIGkubmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50ICtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCArXG4gICAgICBpLmNvbnRhaW5lcldpZHRoIC1cbiAgICAgIGkuY29udGVudFdpZHRoO1xuICB9IGVsc2Uge1xuICAgIHhSYWlsT2Zmc2V0LmxlZnQgPSBlbGVtZW50LnNjcm9sbExlZnQ7XG4gIH1cbiAgaWYgKGkuaXNTY3JvbGxiYXJYVXNpbmdCb3R0b20pIHtcbiAgICB4UmFpbE9mZnNldC5ib3R0b20gPSBpLnNjcm9sbGJhclhCb3R0b20gLSByb3VuZGVkU2Nyb2xsVG9wO1xuICB9IGVsc2Uge1xuICAgIHhSYWlsT2Zmc2V0LnRvcCA9IGkuc2Nyb2xsYmFyWFRvcCArIHJvdW5kZWRTY3JvbGxUb3A7XG4gIH1cbiAgc2V0KGkuc2Nyb2xsYmFyWFJhaWwsIHhSYWlsT2Zmc2V0KTtcblxuICB2YXIgeVJhaWxPZmZzZXQgPSB7IHRvcDogcm91bmRlZFNjcm9sbFRvcCwgaGVpZ2h0OiBpLnJhaWxZSGVpZ2h0IH07XG4gIGlmIChpLmlzU2Nyb2xsYmFyWVVzaW5nUmlnaHQpIHtcbiAgICBpZiAoaS5pc1J0bCkge1xuICAgICAgeVJhaWxPZmZzZXQucmlnaHQgPVxuICAgICAgICBpLmNvbnRlbnRXaWR0aCAtXG4gICAgICAgIChpLm5lZ2F0aXZlU2Nyb2xsQWRqdXN0bWVudCArIGVsZW1lbnQuc2Nyb2xsTGVmdCkgLVxuICAgICAgICBpLnNjcm9sbGJhcllSaWdodCAtXG4gICAgICAgIGkuc2Nyb2xsYmFyWU91dGVyV2lkdGggLVxuICAgICAgICA5O1xuICAgIH0gZWxzZSB7XG4gICAgICB5UmFpbE9mZnNldC5yaWdodCA9IGkuc2Nyb2xsYmFyWVJpZ2h0IC0gZWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaS5pc1J0bCkge1xuICAgICAgeVJhaWxPZmZzZXQubGVmdCA9XG4gICAgICAgIGkubmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50ICtcbiAgICAgICAgZWxlbWVudC5zY3JvbGxMZWZ0ICtcbiAgICAgICAgaS5jb250YWluZXJXaWR0aCAqIDIgLVxuICAgICAgICBpLmNvbnRlbnRXaWR0aCAtXG4gICAgICAgIGkuc2Nyb2xsYmFyWUxlZnQgLVxuICAgICAgICBpLnNjcm9sbGJhcllPdXRlcldpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB5UmFpbE9mZnNldC5sZWZ0ID0gaS5zY3JvbGxiYXJZTGVmdCArIGVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gIH1cbiAgc2V0KGkuc2Nyb2xsYmFyWVJhaWwsIHlSYWlsT2Zmc2V0KTtcblxuICBzZXQoaS5zY3JvbGxiYXJYLCB7XG4gICAgbGVmdDogaS5zY3JvbGxiYXJYTGVmdCxcbiAgICB3aWR0aDogaS5zY3JvbGxiYXJYV2lkdGggLSBpLnJhaWxCb3JkZXJYV2lkdGgsXG4gIH0pO1xuICBzZXQoaS5zY3JvbGxiYXJZLCB7XG4gICAgdG9wOiBpLnNjcm9sbGJhcllUb3AsXG4gICAgaGVpZ2h0OiBpLnNjcm9sbGJhcllIZWlnaHQgLSBpLnJhaWxCb3JkZXJZV2lkdGgsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGlja1JhaWwoaSkge1xuICB2YXIgZWxlbWVudCA9IGkuZWxlbWVudDtcblxuICBpLmV2ZW50LmJpbmQoaS5zY3JvbGxiYXJZLCAnbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7IH0pO1xuICBpLmV2ZW50LmJpbmQoaS5zY3JvbGxiYXJZUmFpbCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHBvc2l0aW9uVG9wID1cbiAgICAgIGUucGFnZVkgLVxuICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0IC1cbiAgICAgIGkuc2Nyb2xsYmFyWVJhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgIHZhciBkaXJlY3Rpb24gPSBwb3NpdGlvblRvcCA+IGkuc2Nyb2xsYmFyWVRvcCA/IDEgOiAtMTtcblxuICAgIGkuZWxlbWVudC5zY3JvbGxUb3AgKz0gZGlyZWN0aW9uICogaS5jb250YWluZXJIZWlnaHQ7XG4gICAgdXBkYXRlR2VvbWV0cnkoaSk7XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9KTtcblxuICBpLmV2ZW50LmJpbmQoaS5zY3JvbGxiYXJYLCAnbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7IH0pO1xuICBpLmV2ZW50LmJpbmQoaS5zY3JvbGxiYXJYUmFpbCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHBvc2l0aW9uTGVmdCA9XG4gICAgICBlLnBhZ2VYIC1cbiAgICAgIHdpbmRvdy5wYWdlWE9mZnNldCAtXG4gICAgICBpLnNjcm9sbGJhclhSYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHBvc2l0aW9uTGVmdCA+IGkuc2Nyb2xsYmFyWExlZnQgPyAxIDogLTE7XG5cbiAgICBpLmVsZW1lbnQuc2Nyb2xsTGVmdCArPSBkaXJlY3Rpb24gKiBpLmNvbnRhaW5lcldpZHRoO1xuICAgIHVwZGF0ZUdlb21ldHJ5KGkpO1xuXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRyYWdUaHVtYihpKSB7XG4gIGJpbmRNb3VzZVNjcm9sbEhhbmRsZXIoaSwgW1xuICAgICdjb250YWluZXJXaWR0aCcsXG4gICAgJ2NvbnRlbnRXaWR0aCcsXG4gICAgJ3BhZ2VYJyxcbiAgICAncmFpbFhXaWR0aCcsXG4gICAgJ3Njcm9sbGJhclgnLFxuICAgICdzY3JvbGxiYXJYV2lkdGgnLFxuICAgICdzY3JvbGxMZWZ0JyxcbiAgICAneCcsXG4gICAgJ3Njcm9sbGJhclhSYWlsJyBdKTtcbiAgYmluZE1vdXNlU2Nyb2xsSGFuZGxlcihpLCBbXG4gICAgJ2NvbnRhaW5lckhlaWdodCcsXG4gICAgJ2NvbnRlbnRIZWlnaHQnLFxuICAgICdwYWdlWScsXG4gICAgJ3JhaWxZSGVpZ2h0JyxcbiAgICAnc2Nyb2xsYmFyWScsXG4gICAgJ3Njcm9sbGJhcllIZWlnaHQnLFxuICAgICdzY3JvbGxUb3AnLFxuICAgICd5JyxcbiAgICAnc2Nyb2xsYmFyWVJhaWwnIF0pO1xufVxuXG5mdW5jdGlvbiBiaW5kTW91c2VTY3JvbGxIYW5kbGVyKFxuICBpLFxuICByZWZcbikge1xuICB2YXIgY29udGFpbmVySGVpZ2h0ID0gcmVmWzBdO1xuICB2YXIgY29udGVudEhlaWdodCA9IHJlZlsxXTtcbiAgdmFyIHBhZ2VZID0gcmVmWzJdO1xuICB2YXIgcmFpbFlIZWlnaHQgPSByZWZbM107XG4gIHZhciBzY3JvbGxiYXJZID0gcmVmWzRdO1xuICB2YXIgc2Nyb2xsYmFyWUhlaWdodCA9IHJlZls1XTtcbiAgdmFyIHNjcm9sbFRvcCA9IHJlZls2XTtcbiAgdmFyIHkgPSByZWZbN107XG4gIHZhciBzY3JvbGxiYXJZUmFpbCA9IHJlZls4XTtcblxuICB2YXIgZWxlbWVudCA9IGkuZWxlbWVudDtcblxuICB2YXIgc3RhcnRpbmdTY3JvbGxUb3AgPSBudWxsO1xuICB2YXIgc3RhcnRpbmdNb3VzZVBhZ2VZID0gbnVsbDtcbiAgdmFyIHNjcm9sbEJ5ID0gbnVsbDtcblxuICBmdW5jdGlvbiBtb3VzZU1vdmVIYW5kbGVyKGUpIHtcbiAgICBpZiAoZS50b3VjaGVzICYmIGUudG91Y2hlc1swXSkge1xuICAgICAgZVtwYWdlWV0gPSBlLnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgfVxuICAgIGVsZW1lbnRbc2Nyb2xsVG9wXSA9XG4gICAgICBzdGFydGluZ1Njcm9sbFRvcCArIHNjcm9sbEJ5ICogKGVbcGFnZVldIC0gc3RhcnRpbmdNb3VzZVBhZ2VZKTtcbiAgICBhZGRTY3JvbGxpbmdDbGFzcyhpLCB5KTtcbiAgICB1cGRhdGVHZW9tZXRyeShpKTtcblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2VVcEhhbmRsZXIoKSB7XG4gICAgcmVtb3ZlU2Nyb2xsaW5nQ2xhc3MoaSwgeSk7XG4gICAgaVtzY3JvbGxiYXJZUmFpbF0uY2xhc3NMaXN0LnJlbW92ZShjbHMuc3RhdGUuY2xpY2tpbmcpO1xuICAgIGkuZXZlbnQudW5iaW5kKGkub3duZXJEb2N1bWVudCwgJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gYmluZE1vdmVzKGUsIHRvdWNoTW9kZSkge1xuICAgIHN0YXJ0aW5nU2Nyb2xsVG9wID0gZWxlbWVudFtzY3JvbGxUb3BdO1xuICAgIGlmICh0b3VjaE1vZGUgJiYgZS50b3VjaGVzKSB7XG4gICAgICBlW3BhZ2VZXSA9IGUudG91Y2hlc1swXS5wYWdlWTtcbiAgICB9XG4gICAgc3RhcnRpbmdNb3VzZVBhZ2VZID0gZVtwYWdlWV07XG4gICAgc2Nyb2xsQnkgPVxuICAgICAgKGlbY29udGVudEhlaWdodF0gLSBpW2NvbnRhaW5lckhlaWdodF0pIC9cbiAgICAgIChpW3JhaWxZSGVpZ2h0XSAtIGlbc2Nyb2xsYmFyWUhlaWdodF0pO1xuICAgIGlmICghdG91Y2hNb2RlKSB7XG4gICAgICBpLmV2ZW50LmJpbmQoaS5vd25lckRvY3VtZW50LCAnbW91c2Vtb3ZlJywgbW91c2VNb3ZlSGFuZGxlcik7XG4gICAgICBpLmV2ZW50Lm9uY2UoaS5vd25lckRvY3VtZW50LCAnbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaS5ldmVudC5iaW5kKGkub3duZXJEb2N1bWVudCwgJ3RvdWNobW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICAgIH1cblxuICAgIGlbc2Nyb2xsYmFyWVJhaWxdLmNsYXNzTGlzdC5hZGQoY2xzLnN0YXRlLmNsaWNraW5nKTtcblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBpLmV2ZW50LmJpbmQoaVtzY3JvbGxiYXJZXSwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgYmluZE1vdmVzKGUpO1xuICB9KTtcbiAgaS5ldmVudC5iaW5kKGlbc2Nyb2xsYmFyWV0sICd0b3VjaHN0YXJ0JywgZnVuY3Rpb24gKGUpIHtcbiAgICBiaW5kTW92ZXMoZSwgdHJ1ZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBrZXlib2FyZChpKSB7XG4gIHZhciBlbGVtZW50ID0gaS5lbGVtZW50O1xuXG4gIHZhciBlbGVtZW50SG92ZXJlZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCwgJzpob3ZlcicpOyB9O1xuICB2YXIgc2Nyb2xsYmFyRm9jdXNlZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hdGNoZXMoaS5zY3JvbGxiYXJYLCAnOmZvY3VzJykgfHwgbWF0Y2hlcyhpLnNjcm9sbGJhclksICc6Zm9jdXMnKTsgfTtcblxuICBmdW5jdGlvbiBzaG91bGRQcmV2ZW50RGVmYXVsdChkZWx0YVgsIGRlbHRhWSkge1xuICAgIHZhciBzY3JvbGxUb3AgPSBNYXRoLmZsb29yKGVsZW1lbnQuc2Nyb2xsVG9wKTtcbiAgICBpZiAoZGVsdGFYID09PSAwKSB7XG4gICAgICBpZiAoIWkuc2Nyb2xsYmFyWUFjdGl2ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChzY3JvbGxUb3AgPT09IDAgJiYgZGVsdGFZID4gMCkgfHxcbiAgICAgICAgKHNjcm9sbFRvcCA+PSBpLmNvbnRlbnRIZWlnaHQgLSBpLmNvbnRhaW5lckhlaWdodCAmJiBkZWx0YVkgPCAwKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAhaS5zZXR0aW5ncy53aGVlbFByb3BhZ2F0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzY3JvbGxMZWZ0ID0gZWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGlmIChkZWx0YVkgPT09IDApIHtcbiAgICAgIGlmICghaS5zY3JvbGxiYXJYQWN0aXZlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKHNjcm9sbExlZnQgPT09IDAgJiYgZGVsdGFYIDwgMCkgfHxcbiAgICAgICAgKHNjcm9sbExlZnQgPj0gaS5jb250ZW50V2lkdGggLSBpLmNvbnRhaW5lcldpZHRoICYmIGRlbHRhWCA+IDApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuICFpLnNldHRpbmdzLndoZWVsUHJvcGFnYXRpb247XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaS5ldmVudC5iaW5kKGkub3duZXJEb2N1bWVudCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChcbiAgICAgIChlLmlzRGVmYXVsdFByZXZlbnRlZCAmJiBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB8fFxuICAgICAgZS5kZWZhdWx0UHJldmVudGVkXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50SG92ZXJlZCgpICYmICFzY3JvbGxiYXJGb2N1c2VkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcbiAgICAgID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgOiBpLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoYWN0aXZlRWxlbWVudCkge1xuICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0lGUkFNRScpIHtcbiAgICAgICAgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnbyBkZWVwZXIgaWYgZWxlbWVudCBpcyBhIHdlYmNvbXBvbmVudFxuICAgICAgICB3aGlsZSAoYWN0aXZlRWxlbWVudC5zaGFkb3dSb290KSB7XG4gICAgICAgICAgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNFZGl0YWJsZShhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlbHRhWCA9IDA7XG4gICAgdmFyIGRlbHRhWSA9IDA7XG5cbiAgICBzd2l0Y2ggKGUud2hpY2gpIHtcbiAgICAgIGNhc2UgMzc6IC8vIGxlZnRcbiAgICAgICAgaWYgKGUubWV0YUtleSkge1xuICAgICAgICAgIGRlbHRhWCA9IC1pLmNvbnRlbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmIChlLmFsdEtleSkge1xuICAgICAgICAgIGRlbHRhWCA9IC1pLmNvbnRhaW5lcldpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbHRhWCA9IC0zMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzg6IC8vIHVwXG4gICAgICAgIGlmIChlLm1ldGFLZXkpIHtcbiAgICAgICAgICBkZWx0YVkgPSBpLmNvbnRlbnRIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5hbHRLZXkpIHtcbiAgICAgICAgICBkZWx0YVkgPSBpLmNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWx0YVkgPSAzMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzk6IC8vIHJpZ2h0XG4gICAgICAgIGlmIChlLm1ldGFLZXkpIHtcbiAgICAgICAgICBkZWx0YVggPSBpLmNvbnRlbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmIChlLmFsdEtleSkge1xuICAgICAgICAgIGRlbHRhWCA9IGkuY29udGFpbmVyV2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsdGFYID0gMzA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQwOiAvLyBkb3duXG4gICAgICAgIGlmIChlLm1ldGFLZXkpIHtcbiAgICAgICAgICBkZWx0YVkgPSAtaS5jb250ZW50SGVpZ2h0O1xuICAgICAgICB9IGVsc2UgaWYgKGUuYWx0S2V5KSB7XG4gICAgICAgICAgZGVsdGFZID0gLWkuY29udGFpbmVySGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbHRhWSA9IC0zMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzI6IC8vIHNwYWNlIGJhclxuICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAgIGRlbHRhWSA9IGkuY29udGFpbmVySGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbHRhWSA9IC1pLmNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzM6IC8vIHBhZ2UgdXBcbiAgICAgICAgZGVsdGFZID0gaS5jb250YWluZXJIZWlnaHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzNDogLy8gcGFnZSBkb3duXG4gICAgICAgIGRlbHRhWSA9IC1pLmNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM2OiAvLyBob21lXG4gICAgICAgIGRlbHRhWSA9IGkuY29udGVudEhlaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM1OiAvLyBlbmRcbiAgICAgICAgZGVsdGFZID0gLWkuY29udGVudEhlaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGkuc2V0dGluZ3Muc3VwcHJlc3NTY3JvbGxYICYmIGRlbHRhWCAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaS5zZXR0aW5ncy5zdXBwcmVzc1Njcm9sbFkgJiYgZGVsdGFZICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5zY3JvbGxUb3AgLT0gZGVsdGFZO1xuICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCArPSBkZWx0YVg7XG4gICAgdXBkYXRlR2VvbWV0cnkoaSk7XG5cbiAgICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQoZGVsdGFYLCBkZWx0YVkpKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2hlZWwoaSkge1xuICB2YXIgZWxlbWVudCA9IGkuZWxlbWVudDtcblxuICBmdW5jdGlvbiBzaG91bGRQcmV2ZW50RGVmYXVsdChkZWx0YVgsIGRlbHRhWSkge1xuICAgIHZhciByb3VuZGVkU2Nyb2xsVG9wID0gTWF0aC5mbG9vcihlbGVtZW50LnNjcm9sbFRvcCk7XG4gICAgdmFyIGlzVG9wID0gZWxlbWVudC5zY3JvbGxUb3AgPT09IDA7XG4gICAgdmFyIGlzQm90dG9tID1cbiAgICAgIHJvdW5kZWRTY3JvbGxUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCA9PT0gZWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgdmFyIGlzTGVmdCA9IGVsZW1lbnQuc2Nyb2xsTGVmdCA9PT0gMDtcbiAgICB2YXIgaXNSaWdodCA9XG4gICAgICBlbGVtZW50LnNjcm9sbExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoID09PSBlbGVtZW50LnNjcm9sbFdpZHRoO1xuXG4gICAgdmFyIGhpdHNCb3VuZDtcblxuICAgIC8vIHBpY2sgYXhpcyB3aXRoIHByaW1hcnkgZGlyZWN0aW9uXG4gICAgaWYgKE1hdGguYWJzKGRlbHRhWSkgPiBNYXRoLmFicyhkZWx0YVgpKSB7XG4gICAgICBoaXRzQm91bmQgPSBpc1RvcCB8fCBpc0JvdHRvbTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGl0c0JvdW5kID0gaXNMZWZ0IHx8IGlzUmlnaHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdHNCb3VuZCA/ICFpLnNldHRpbmdzLndoZWVsUHJvcGFnYXRpb24gOiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGVsdGFGcm9tRXZlbnQoZSkge1xuICAgIHZhciBkZWx0YVggPSBlLmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gLTEgKiBlLmRlbHRhWTtcblxuICAgIGlmICh0eXBlb2YgZGVsdGFYID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZGVsdGFZID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gT1MgWCBTYWZhcmlcbiAgICAgIGRlbHRhWCA9ICgtMSAqIGUud2hlZWxEZWx0YVgpIC8gNjtcbiAgICAgIGRlbHRhWSA9IGUud2hlZWxEZWx0YVkgLyA2O1xuICAgIH1cblxuICAgIGlmIChlLmRlbHRhTW9kZSAmJiBlLmRlbHRhTW9kZSA9PT0gMSkge1xuICAgICAgLy8gRmlyZWZveCBpbiBkZWx0YU1vZGUgMTogTGluZSBzY3JvbGxpbmdcbiAgICAgIGRlbHRhWCAqPSAxMDtcbiAgICAgIGRlbHRhWSAqPSAxMDtcbiAgICB9XG5cbiAgICBpZiAoZGVsdGFYICE9PSBkZWx0YVggJiYgZGVsdGFZICE9PSBkZWx0YVkgLyogTmFOIGNoZWNrcyAqLykge1xuICAgICAgLy8gSUUgaW4gc29tZSBtb3VzZSBkcml2ZXJzXG4gICAgICBkZWx0YVggPSAwO1xuICAgICAgZGVsdGFZID0gZS53aGVlbERlbHRhO1xuICAgIH1cblxuICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAvLyByZXZlcnNlIGF4aXMgd2l0aCBzaGlmdCBrZXlcbiAgICAgIHJldHVybiBbLWRlbHRhWSwgLWRlbHRhWF07XG4gICAgfVxuICAgIHJldHVybiBbZGVsdGFYLCBkZWx0YVldO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkQmVDb25zdW1lZEJ5Q2hpbGQodGFyZ2V0LCBkZWx0YVgsIGRlbHRhWSkge1xuICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHNlbGVjdD4gaXNzdWUgaW4gRkYgYW5kIElFICM1NzFcbiAgICBpZiAoIWVudi5pc1dlYktpdCAmJiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdDpmb2N1cycpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBjdXJzb3IgPSB0YXJnZXQ7XG5cbiAgICB3aGlsZSAoY3Vyc29yICYmIGN1cnNvciAhPT0gZWxlbWVudCkge1xuICAgICAgaWYgKGN1cnNvci5jbGFzc0xpc3QuY29udGFpbnMoY2xzLmVsZW1lbnQuY29uc3VtaW5nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0eWxlID0gZ2V0KGN1cnNvcik7XG5cbiAgICAgIC8vIGlmIGRlbHRhWSAmJiB2ZXJ0aWNhbCBzY3JvbGxhYmxlXG4gICAgICBpZiAoZGVsdGFZICYmIHN0eWxlLm92ZXJmbG93WS5tYXRjaCgvKHNjcm9sbHxhdXRvKS8pKSB7XG4gICAgICAgIHZhciBtYXhTY3JvbGxUb3AgPSBjdXJzb3Iuc2Nyb2xsSGVpZ2h0IC0gY3Vyc29yLmNsaWVudEhlaWdodDtcbiAgICAgICAgaWYgKG1heFNjcm9sbFRvcCA+IDApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbFRvcCA+IDAgJiYgZGVsdGFZIDwgMCkgfHxcbiAgICAgICAgICAgIChjdXJzb3Iuc2Nyb2xsVG9wIDwgbWF4U2Nyb2xsVG9wICYmIGRlbHRhWSA+IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIGRlbHRhWCAmJiBob3Jpem9udGFsIHNjcm9sbGFibGVcbiAgICAgIGlmIChkZWx0YVggJiYgc3R5bGUub3ZlcmZsb3dYLm1hdGNoKC8oc2Nyb2xsfGF1dG8pLykpIHtcbiAgICAgICAgdmFyIG1heFNjcm9sbExlZnQgPSBjdXJzb3Iuc2Nyb2xsV2lkdGggLSBjdXJzb3IuY2xpZW50V2lkdGg7XG4gICAgICAgIGlmIChtYXhTY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChjdXJzb3Iuc2Nyb2xsTGVmdCA+IDAgJiYgZGVsdGFYIDwgMCkgfHxcbiAgICAgICAgICAgIChjdXJzb3Iuc2Nyb2xsTGVmdCA8IG1heFNjcm9sbExlZnQgJiYgZGVsdGFYID4gMClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJzb3IgPSBjdXJzb3IucGFyZW50Tm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZXdoZWVsSGFuZGxlcihlKSB7XG4gICAgdmFyIHJlZiA9IGdldERlbHRhRnJvbUV2ZW50KGUpO1xuICAgIHZhciBkZWx0YVggPSByZWZbMF07XG4gICAgdmFyIGRlbHRhWSA9IHJlZlsxXTtcblxuICAgIGlmIChzaG91bGRCZUNvbnN1bWVkQnlDaGlsZChlLnRhcmdldCwgZGVsdGFYLCBkZWx0YVkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZFByZXZlbnQgPSBmYWxzZTtcbiAgICBpZiAoIWkuc2V0dGluZ3MudXNlQm90aFdoZWVsQXhlcykge1xuICAgICAgLy8gZGVsdGFYIHdpbGwgb25seSBiZSB1c2VkIGZvciBob3Jpem9udGFsIHNjcm9sbGluZyBhbmQgZGVsdGFZIHdpbGxcbiAgICAgIC8vIG9ubHkgYmUgdXNlZCBmb3IgdmVydGljYWwgc2Nyb2xsaW5nIC0gdGhpcyBpcyB0aGUgZGVmYXVsdFxuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgLT0gZGVsdGFZICogaS5zZXR0aW5ncy53aGVlbFNwZWVkO1xuICAgICAgZWxlbWVudC5zY3JvbGxMZWZ0ICs9IGRlbHRhWCAqIGkuc2V0dGluZ3Mud2hlZWxTcGVlZDtcbiAgICB9IGVsc2UgaWYgKGkuc2Nyb2xsYmFyWUFjdGl2ZSAmJiAhaS5zY3JvbGxiYXJYQWN0aXZlKSB7XG4gICAgICAvLyBvbmx5IHZlcnRpY2FsIHNjcm9sbGJhciBpcyBhY3RpdmUgYW5kIHVzZUJvdGhXaGVlbEF4ZXMgb3B0aW9uIGlzXG4gICAgICAvLyBhY3RpdmUsIHNvIGxldCdzIHNjcm9sbCB2ZXJ0aWNhbCBiYXIgdXNpbmcgYm90aCBtb3VzZSB3aGVlbCBheGVzXG4gICAgICBpZiAoZGVsdGFZKSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wIC09IGRlbHRhWSAqIGkuc2V0dGluZ3Mud2hlZWxTcGVlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wICs9IGRlbHRhWCAqIGkuc2V0dGluZ3Mud2hlZWxTcGVlZDtcbiAgICAgIH1cbiAgICAgIHNob3VsZFByZXZlbnQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaS5zY3JvbGxiYXJYQWN0aXZlICYmICFpLnNjcm9sbGJhcllBY3RpdmUpIHtcbiAgICAgIC8vIHVzZUJvdGhXaGVlbEF4ZXMgYW5kIG9ubHkgaG9yaXpvbnRhbCBiYXIgaXMgYWN0aXZlLCBzbyB1c2UgYm90aFxuICAgICAgLy8gd2hlZWwgYXhlcyBmb3IgaG9yaXpvbnRhbCBiYXJcbiAgICAgIGlmIChkZWx0YVgpIHtcbiAgICAgICAgZWxlbWVudC5zY3JvbGxMZWZ0ICs9IGRlbHRhWCAqIGkuc2V0dGluZ3Mud2hlZWxTcGVlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCAtPSBkZWx0YVkgKiBpLnNldHRpbmdzLndoZWVsU3BlZWQ7XG4gICAgICB9XG4gICAgICBzaG91bGRQcmV2ZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB1cGRhdGVHZW9tZXRyeShpKTtcblxuICAgIHNob3VsZFByZXZlbnQgPSBzaG91bGRQcmV2ZW50IHx8IHNob3VsZFByZXZlbnREZWZhdWx0KGRlbHRhWCwgZGVsdGFZKTtcbiAgICBpZiAoc2hvdWxkUHJldmVudCAmJiAhZS5jdHJsS2V5KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygd2luZG93Lm9ud2hlZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICd3aGVlbCcsIG1vdXNld2hlZWxIYW5kbGVyKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93Lm9ubW91c2V3aGVlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpLmV2ZW50LmJpbmQoZWxlbWVudCwgJ21vdXNld2hlZWwnLCBtb3VzZXdoZWVsSGFuZGxlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG91Y2goaSkge1xuICBpZiAoIWVudi5zdXBwb3J0c1RvdWNoICYmICFlbnYuc3VwcG9ydHNJZVBvaW50ZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGkuZWxlbWVudDtcblxuICBmdW5jdGlvbiBzaG91bGRQcmV2ZW50KGRlbHRhWCwgZGVsdGFZKSB7XG4gICAgdmFyIHNjcm9sbFRvcCA9IE1hdGguZmxvb3IoZWxlbWVudC5zY3JvbGxUb3ApO1xuICAgIHZhciBzY3JvbGxMZWZ0ID0gZWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHZhciBtYWduaXR1ZGVYID0gTWF0aC5hYnMoZGVsdGFYKTtcbiAgICB2YXIgbWFnbml0dWRlWSA9IE1hdGguYWJzKGRlbHRhWSk7XG5cbiAgICBpZiAobWFnbml0dWRlWSA+IG1hZ25pdHVkZVgpIHtcbiAgICAgIC8vIHVzZXIgaXMgcGVyaGFwcyB0cnlpbmcgdG8gc3dpcGUgdXAvZG93biB0aGUgcGFnZVxuXG4gICAgICBpZiAoXG4gICAgICAgIChkZWx0YVkgPCAwICYmIHNjcm9sbFRvcCA9PT0gaS5jb250ZW50SGVpZ2h0IC0gaS5jb250YWluZXJIZWlnaHQpIHx8XG4gICAgICAgIChkZWx0YVkgPiAwICYmIHNjcm9sbFRvcCA9PT0gMClcbiAgICAgICkge1xuICAgICAgICAvLyBzZXQgcHJldmVudCBmb3IgbW9iaWxlIENocm9tZSByZWZyZXNoXG4gICAgICAgIHJldHVybiB3aW5kb3cuc2Nyb2xsWSA9PT0gMCAmJiBkZWx0YVkgPiAwICYmIGVudi5pc0Nocm9tZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hZ25pdHVkZVggPiBtYWduaXR1ZGVZKSB7XG4gICAgICAvLyB1c2VyIGlzIHBlcmhhcHMgdHJ5aW5nIHRvIHN3aXBlIGxlZnQvcmlnaHQgYWNyb3NzIHRoZSBwYWdlXG5cbiAgICAgIGlmIChcbiAgICAgICAgKGRlbHRhWCA8IDAgJiYgc2Nyb2xsTGVmdCA9PT0gaS5jb250ZW50V2lkdGggLSBpLmNvbnRhaW5lcldpZHRoKSB8fFxuICAgICAgICAoZGVsdGFYID4gMCAmJiBzY3JvbGxMZWZ0ID09PSAwKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlUb3VjaE1vdmUoZGlmZmVyZW5jZVgsIGRpZmZlcmVuY2VZKSB7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgLT0gZGlmZmVyZW5jZVk7XG4gICAgZWxlbWVudC5zY3JvbGxMZWZ0IC09IGRpZmZlcmVuY2VYO1xuXG4gICAgdXBkYXRlR2VvbWV0cnkoaSk7XG4gIH1cblxuICB2YXIgc3RhcnRPZmZzZXQgPSB7fTtcbiAgdmFyIHN0YXJ0VGltZSA9IDA7XG4gIHZhciBzcGVlZCA9IHt9O1xuICB2YXIgZWFzaW5nTG9vcCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gZ2V0VG91Y2goZSkge1xuICAgIGlmIChlLnRhcmdldFRvdWNoZXMpIHtcbiAgICAgIHJldHVybiBlLnRhcmdldFRvdWNoZXNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1heWJlIElFIHBvaW50ZXJcbiAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEhhbmRsZShlKSB7XG4gICAgaWYgKGUucG9pbnRlclR5cGUgJiYgZS5wb2ludGVyVHlwZSA9PT0gJ3BlbicgJiYgZS5idXR0b25zID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChlLnRhcmdldFRvdWNoZXMgJiYgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGUucG9pbnRlclR5cGUgJiZcbiAgICAgIGUucG9pbnRlclR5cGUgIT09ICdtb3VzZScgJiZcbiAgICAgIGUucG9pbnRlclR5cGUgIT09IGUuTVNQT0lOVEVSX1RZUEVfTU9VU0VcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaFN0YXJ0KGUpIHtcbiAgICBpZiAoIXNob3VsZEhhbmRsZShlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaCA9IGdldFRvdWNoKGUpO1xuXG4gICAgc3RhcnRPZmZzZXQucGFnZVggPSB0b3VjaC5wYWdlWDtcbiAgICBzdGFydE9mZnNldC5wYWdlWSA9IHRvdWNoLnBhZ2VZO1xuXG4gICAgc3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICBpZiAoZWFzaW5nTG9vcCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChlYXNpbmdMb29wKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRCZUNvbnN1bWVkQnlDaGlsZCh0YXJnZXQsIGRlbHRhWCwgZGVsdGFZKSB7XG4gICAgaWYgKCFlbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgY3Vyc29yID0gdGFyZ2V0O1xuXG4gICAgd2hpbGUgKGN1cnNvciAmJiBjdXJzb3IgIT09IGVsZW1lbnQpIHtcbiAgICAgIGlmIChjdXJzb3IuY2xhc3NMaXN0LmNvbnRhaW5zKGNscy5lbGVtZW50LmNvbnN1bWluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZSA9IGdldChjdXJzb3IpO1xuXG4gICAgICAvLyBpZiBkZWx0YVkgJiYgdmVydGljYWwgc2Nyb2xsYWJsZVxuICAgICAgaWYgKGRlbHRhWSAmJiBzdHlsZS5vdmVyZmxvd1kubWF0Y2goLyhzY3JvbGx8YXV0bykvKSkge1xuICAgICAgICB2YXIgbWF4U2Nyb2xsVG9wID0gY3Vyc29yLnNjcm9sbEhlaWdodCAtIGN1cnNvci5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGlmIChtYXhTY3JvbGxUb3AgPiAwKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGN1cnNvci5zY3JvbGxUb3AgPiAwICYmIGRlbHRhWSA8IDApIHx8XG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbFRvcCA8IG1heFNjcm9sbFRvcCAmJiBkZWx0YVkgPiAwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBkZWx0YVggJiYgaG9yaXpvbnRhbCBzY3JvbGxhYmxlXG4gICAgICBpZiAoZGVsdGFYICYmIHN0eWxlLm92ZXJmbG93WC5tYXRjaCgvKHNjcm9sbHxhdXRvKS8pKSB7XG4gICAgICAgIHZhciBtYXhTY3JvbGxMZWZ0ID0gY3Vyc29yLnNjcm9sbFdpZHRoIC0gY3Vyc29yLmNsaWVudFdpZHRoO1xuICAgICAgICBpZiAobWF4U2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbExlZnQgPiAwICYmIGRlbHRhWCA8IDApIHx8XG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbExlZnQgPCBtYXhTY3JvbGxMZWZ0ICYmIGRlbHRhWCA+IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3Vyc29yID0gY3Vyc29yLnBhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hNb3ZlKGUpIHtcbiAgICBpZiAoc2hvdWxkSGFuZGxlKGUpKSB7XG4gICAgICB2YXIgdG91Y2ggPSBnZXRUb3VjaChlKTtcblxuICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB7IHBhZ2VYOiB0b3VjaC5wYWdlWCwgcGFnZVk6IHRvdWNoLnBhZ2VZIH07XG5cbiAgICAgIHZhciBkaWZmZXJlbmNlWCA9IGN1cnJlbnRPZmZzZXQucGFnZVggLSBzdGFydE9mZnNldC5wYWdlWDtcbiAgICAgIHZhciBkaWZmZXJlbmNlWSA9IGN1cnJlbnRPZmZzZXQucGFnZVkgLSBzdGFydE9mZnNldC5wYWdlWTtcblxuICAgICAgaWYgKHNob3VsZEJlQ29uc3VtZWRCeUNoaWxkKGUudGFyZ2V0LCBkaWZmZXJlbmNlWCwgZGlmZmVyZW5jZVkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBwbHlUb3VjaE1vdmUoZGlmZmVyZW5jZVgsIGRpZmZlcmVuY2VZKTtcbiAgICAgIHN0YXJ0T2Zmc2V0ID0gY3VycmVudE9mZnNldDtcblxuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICAgIHZhciB0aW1lR2FwID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWU7XG4gICAgICBpZiAodGltZUdhcCA+IDApIHtcbiAgICAgICAgc3BlZWQueCA9IGRpZmZlcmVuY2VYIC8gdGltZUdhcDtcbiAgICAgICAgc3BlZWQueSA9IGRpZmZlcmVuY2VZIC8gdGltZUdhcDtcbiAgICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRQcmV2ZW50KGRpZmZlcmVuY2VYLCBkaWZmZXJlbmNlWSkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB0b3VjaEVuZCgpIHtcbiAgICBpZiAoaS5zZXR0aW5ncy5zd2lwZUVhc2luZykge1xuICAgICAgY2xlYXJJbnRlcnZhbChlYXNpbmdMb29wKTtcbiAgICAgIGVhc2luZ0xvb3AgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGkuaXNJbml0aWFsaXplZCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoZWFzaW5nTG9vcCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzcGVlZC54ICYmICFzcGVlZC55KSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChlYXNpbmdMb29wKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTWF0aC5hYnMoc3BlZWQueCkgPCAwLjAxICYmIE1hdGguYWJzKHNwZWVkLnkpIDwgMC4wMSkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoZWFzaW5nTG9vcCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwbHlUb3VjaE1vdmUoc3BlZWQueCAqIDMwLCBzcGVlZC55ICogMzApO1xuXG4gICAgICAgIHNwZWVkLnggKj0gMC44O1xuICAgICAgICBzcGVlZC55ICo9IDAuODtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW52LnN1cHBvcnRzVG91Y2gpIHtcbiAgICBpLmV2ZW50LmJpbmQoZWxlbWVudCwgJ3RvdWNoc3RhcnQnLCB0b3VjaFN0YXJ0KTtcbiAgICBpLmV2ZW50LmJpbmQoZWxlbWVudCwgJ3RvdWNobW92ZScsIHRvdWNoTW92ZSk7XG4gICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICd0b3VjaGVuZCcsIHRvdWNoRW5kKTtcbiAgfSBlbHNlIGlmIChlbnYuc3VwcG9ydHNJZVBvaW50ZXIpIHtcbiAgICBpZiAod2luZG93LlBvaW50ZXJFdmVudCkge1xuICAgICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdwb2ludGVyZG93bicsIHRvdWNoU3RhcnQpO1xuICAgICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdwb2ludGVybW92ZScsIHRvdWNoTW92ZSk7XG4gICAgICBpLmV2ZW50LmJpbmQoZWxlbWVudCwgJ3BvaW50ZXJ1cCcsIHRvdWNoRW5kKTtcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5NU1BvaW50ZXJFdmVudCkge1xuICAgICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdNU1BvaW50ZXJEb3duJywgdG91Y2hTdGFydCk7XG4gICAgICBpLmV2ZW50LmJpbmQoZWxlbWVudCwgJ01TUG9pbnRlck1vdmUnLCB0b3VjaE1vdmUpO1xuICAgICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdNU1BvaW50ZXJVcCcsIHRvdWNoRW5kKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRlZmF1bHRTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gIGhhbmRsZXJzOiBbJ2NsaWNrLXJhaWwnLCAnZHJhZy10aHVtYicsICdrZXlib2FyZCcsICd3aGVlbCcsICd0b3VjaCddLFxuICBtYXhTY3JvbGxiYXJMZW5ndGg6IG51bGwsXG4gIG1pblNjcm9sbGJhckxlbmd0aDogbnVsbCxcbiAgc2Nyb2xsaW5nVGhyZXNob2xkOiAxMDAwLFxuICBzY3JvbGxYTWFyZ2luT2Zmc2V0OiAwLFxuICBzY3JvbGxZTWFyZ2luT2Zmc2V0OiAwLFxuICBzdXBwcmVzc1Njcm9sbFg6IGZhbHNlLFxuICBzdXBwcmVzc1Njcm9sbFk6IGZhbHNlLFxuICBzd2lwZUVhc2luZzogdHJ1ZSxcbiAgdXNlQm90aFdoZWVsQXhlczogZmFsc2UsXG4gIHdoZWVsUHJvcGFnYXRpb246IHRydWUsXG4gIHdoZWVsU3BlZWQ6IDEsXG59KTsgfTtcblxudmFyIGhhbmRsZXJzID0ge1xuICAnY2xpY2stcmFpbCc6IGNsaWNrUmFpbCxcbiAgJ2RyYWctdGh1bWInOiBkcmFnVGh1bWIsXG4gIGtleWJvYXJkOiBrZXlib2FyZCxcbiAgd2hlZWw6IHdoZWVsLFxuICB0b3VjaDogdG91Y2gsXG59O1xuXG52YXIgUGVyZmVjdFNjcm9sbGJhciA9IGZ1bmN0aW9uIFBlcmZlY3RTY3JvbGxiYXIoZWxlbWVudCwgdXNlclNldHRpbmdzKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuICBpZiAoIHVzZXJTZXR0aW5ncyA9PT0gdm9pZCAwICkgdXNlclNldHRpbmdzID0ge307XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBlbGVtZW50IGlzIHNwZWNpZmllZCB0byBpbml0aWFsaXplIFBlcmZlY3RTY3JvbGxiYXInKTtcbiAgfVxuXG4gIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNscy5tYWluKTtcblxuICB0aGlzLnNldHRpbmdzID0gZGVmYXVsdFNldHRpbmdzKCk7XG4gIGZvciAodmFyIGtleSBpbiB1c2VyU2V0dGluZ3MpIHtcbiAgICB0aGlzLnNldHRpbmdzW2tleV0gPSB1c2VyU2V0dGluZ3Nba2V5XTtcbiAgfVxuXG4gIHRoaXMuY29udGFpbmVyV2lkdGggPSBudWxsO1xuICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IG51bGw7XG4gIHRoaXMuY29udGVudFdpZHRoID0gbnVsbDtcbiAgdGhpcy5jb250ZW50SGVpZ2h0ID0gbnVsbDtcblxuICB2YXIgZm9jdXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xzLnN0YXRlLmZvY3VzKTsgfTtcbiAgdmFyIGJsdXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xzLnN0YXRlLmZvY3VzKTsgfTtcblxuICB0aGlzLmlzUnRsID0gZ2V0KGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gIGlmICh0aGlzLmlzUnRsID09PSB0cnVlKSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNscy5ydGwpO1xuICB9XG4gIHRoaXMuaXNOZWdhdGl2ZVNjcm9sbCA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9yaWdpbmFsU2Nyb2xsTGVmdCA9IGVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgICBlbGVtZW50LnNjcm9sbExlZnQgPSAtMTtcbiAgICByZXN1bHQgPSBlbGVtZW50LnNjcm9sbExlZnQgPCAwO1xuICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCA9IG9yaWdpbmFsU2Nyb2xsTGVmdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KSgpO1xuICB0aGlzLm5lZ2F0aXZlU2Nyb2xsQWRqdXN0bWVudCA9IHRoaXMuaXNOZWdhdGl2ZVNjcm9sbFxuICAgID8gZWxlbWVudC5zY3JvbGxXaWR0aCAtIGVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICA6IDA7XG4gIHRoaXMuZXZlbnQgPSBuZXcgRXZlbnRNYW5hZ2VyKCk7XG4gIHRoaXMub3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcblxuICB0aGlzLnNjcm9sbGJhclhSYWlsID0gZGl2KGNscy5lbGVtZW50LnJhaWwoJ3gnKSk7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxiYXJYUmFpbCk7XG4gIHRoaXMuc2Nyb2xsYmFyWCA9IGRpdihjbHMuZWxlbWVudC50aHVtYigneCcpKTtcbiAgdGhpcy5zY3JvbGxiYXJYUmFpbC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGJhclgpO1xuICB0aGlzLnNjcm9sbGJhclguc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIDApO1xuICB0aGlzLmV2ZW50LmJpbmQodGhpcy5zY3JvbGxiYXJYLCAnZm9jdXMnLCBmb2N1cyk7XG4gIHRoaXMuZXZlbnQuYmluZCh0aGlzLnNjcm9sbGJhclgsICdibHVyJywgYmx1cik7XG4gIHRoaXMuc2Nyb2xsYmFyWEFjdGl2ZSA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWFdpZHRoID0gbnVsbDtcbiAgdGhpcy5zY3JvbGxiYXJYTGVmdCA9IG51bGw7XG4gIHZhciByYWlsWFN0eWxlID0gZ2V0KHRoaXMuc2Nyb2xsYmFyWFJhaWwpO1xuICB0aGlzLnNjcm9sbGJhclhCb3R0b20gPSBwYXJzZUludChyYWlsWFN0eWxlLmJvdHRvbSwgMTApO1xuICBpZiAoaXNOYU4odGhpcy5zY3JvbGxiYXJYQm90dG9tKSkge1xuICAgIHRoaXMuaXNTY3JvbGxiYXJYVXNpbmdCb3R0b20gPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbGJhclhUb3AgPSB0b0ludChyYWlsWFN0eWxlLnRvcCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pc1Njcm9sbGJhclhVc2luZ0JvdHRvbSA9IHRydWU7XG4gIH1cbiAgdGhpcy5yYWlsQm9yZGVyWFdpZHRoID1cbiAgICB0b0ludChyYWlsWFN0eWxlLmJvcmRlckxlZnRXaWR0aCkgKyB0b0ludChyYWlsWFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgpO1xuICAvLyBTZXQgcmFpbCB0byBkaXNwbGF5OmJsb2NrIHRvIGNhbGN1bGF0ZSBtYXJnaW5zXG4gIHNldCh0aGlzLnNjcm9sbGJhclhSYWlsLCB7IGRpc3BsYXk6ICdibG9jaycgfSk7XG4gIHRoaXMucmFpbFhNYXJnaW5XaWR0aCA9XG4gICAgdG9JbnQocmFpbFhTdHlsZS5tYXJnaW5MZWZ0KSArIHRvSW50KHJhaWxYU3R5bGUubWFyZ2luUmlnaHQpO1xuICBzZXQodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiAnJyB9KTtcbiAgdGhpcy5yYWlsWFdpZHRoID0gbnVsbDtcbiAgdGhpcy5yYWlsWFJhdGlvID0gbnVsbDtcblxuICB0aGlzLnNjcm9sbGJhcllSYWlsID0gZGl2KGNscy5lbGVtZW50LnJhaWwoJ3knKSk7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxiYXJZUmFpbCk7XG4gIHRoaXMuc2Nyb2xsYmFyWSA9IGRpdihjbHMuZWxlbWVudC50aHVtYigneScpKTtcbiAgdGhpcy5zY3JvbGxiYXJZUmFpbC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGJhclkpO1xuICB0aGlzLnNjcm9sbGJhclkuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIDApO1xuICB0aGlzLmV2ZW50LmJpbmQodGhpcy5zY3JvbGxiYXJZLCAnZm9jdXMnLCBmb2N1cyk7XG4gIHRoaXMuZXZlbnQuYmluZCh0aGlzLnNjcm9sbGJhclksICdibHVyJywgYmx1cik7XG4gIHRoaXMuc2Nyb2xsYmFyWUFjdGl2ZSA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWUhlaWdodCA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWVRvcCA9IG51bGw7XG4gIHZhciByYWlsWVN0eWxlID0gZ2V0KHRoaXMuc2Nyb2xsYmFyWVJhaWwpO1xuICB0aGlzLnNjcm9sbGJhcllSaWdodCA9IHBhcnNlSW50KHJhaWxZU3R5bGUucmlnaHQsIDEwKTtcbiAgaWYgKGlzTmFOKHRoaXMuc2Nyb2xsYmFyWVJpZ2h0KSkge1xuICAgIHRoaXMuaXNTY3JvbGxiYXJZVXNpbmdSaWdodCA9IGZhbHNlO1xuICAgIHRoaXMuc2Nyb2xsYmFyWUxlZnQgPSB0b0ludChyYWlsWVN0eWxlLmxlZnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaXNTY3JvbGxiYXJZVXNpbmdSaWdodCA9IHRydWU7XG4gIH1cbiAgdGhpcy5zY3JvbGxiYXJZT3V0ZXJXaWR0aCA9IHRoaXMuaXNSdGwgPyBvdXRlcldpZHRoKHRoaXMuc2Nyb2xsYmFyWSkgOiBudWxsO1xuICB0aGlzLnJhaWxCb3JkZXJZV2lkdGggPVxuICAgIHRvSW50KHJhaWxZU3R5bGUuYm9yZGVyVG9wV2lkdGgpICsgdG9JbnQocmFpbFlTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCk7XG4gIHNldCh0aGlzLnNjcm9sbGJhcllSYWlsLCB7IGRpc3BsYXk6ICdibG9jaycgfSk7XG4gIHRoaXMucmFpbFlNYXJnaW5IZWlnaHQgPVxuICAgIHRvSW50KHJhaWxZU3R5bGUubWFyZ2luVG9wKSArIHRvSW50KHJhaWxZU3R5bGUubWFyZ2luQm90dG9tKTtcbiAgc2V0KHRoaXMuc2Nyb2xsYmFyWVJhaWwsIHsgZGlzcGxheTogJycgfSk7XG4gIHRoaXMucmFpbFlIZWlnaHQgPSBudWxsO1xuICB0aGlzLnJhaWxZUmF0aW8gPSBudWxsO1xuXG4gIHRoaXMucmVhY2ggPSB7XG4gICAgeDpcbiAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCA8PSAwXG4gICAgICAgID8gJ3N0YXJ0J1xuICAgICAgICA6IGVsZW1lbnQuc2Nyb2xsTGVmdCA+PSB0aGlzLmNvbnRlbnRXaWR0aCAtIHRoaXMuY29udGFpbmVyV2lkdGhcbiAgICAgICAgPyAnZW5kJ1xuICAgICAgICA6IG51bGwsXG4gICAgeTpcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wIDw9IDBcbiAgICAgICAgPyAnc3RhcnQnXG4gICAgICAgIDogZWxlbWVudC5zY3JvbGxUb3AgPj0gdGhpcy5jb250ZW50SGVpZ2h0IC0gdGhpcy5jb250YWluZXJIZWlnaHRcbiAgICAgICAgPyAnZW5kJ1xuICAgICAgICA6IG51bGwsXG4gIH07XG5cbiAgdGhpcy5pc0FsaXZlID0gdHJ1ZTtcblxuICB0aGlzLnNldHRpbmdzLmhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXJOYW1lKSB7IHJldHVybiBoYW5kbGVyc1toYW5kbGVyTmFtZV0odGhpcyQxKTsgfSk7XG5cbiAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gTWF0aC5mbG9vcihlbGVtZW50LnNjcm9sbFRvcCk7IC8vIGZvciBvblNjcm9sbCBvbmx5XG4gIHRoaXMubGFzdFNjcm9sbExlZnQgPSBlbGVtZW50LnNjcm9sbExlZnQ7IC8vIGZvciBvblNjcm9sbCBvbmx5XG4gIHRoaXMuZXZlbnQuYmluZCh0aGlzLmVsZW1lbnQsICdzY3JvbGwnLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcyQxLm9uU2Nyb2xsKGUpOyB9KTtcbiAgdXBkYXRlR2VvbWV0cnkodGhpcyk7XG59O1xuXG5QZXJmZWN0U2Nyb2xsYmFyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKCkge1xuICBpZiAoIXRoaXMuaXNBbGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFJlY2FsY3VhdGUgbmVnYXRpdmUgc2Nyb2xsTGVmdCBhZGp1c3RtZW50XG4gIHRoaXMubmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50ID0gdGhpcy5pc05lZ2F0aXZlU2Nyb2xsXG4gICAgPyB0aGlzLmVsZW1lbnQuc2Nyb2xsV2lkdGggLSB0aGlzLmVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICA6IDA7XG5cbiAgLy8gUmVjYWxjdWxhdGUgcmFpbCBtYXJnaW5zXG4gIHNldCh0aGlzLnNjcm9sbGJhclhSYWlsLCB7IGRpc3BsYXk6ICdibG9jaycgfSk7XG4gIHNldCh0aGlzLnNjcm9sbGJhcllSYWlsLCB7IGRpc3BsYXk6ICdibG9jaycgfSk7XG4gIHRoaXMucmFpbFhNYXJnaW5XaWR0aCA9XG4gICAgdG9JbnQoZ2V0KHRoaXMuc2Nyb2xsYmFyWFJhaWwpLm1hcmdpbkxlZnQpICtcbiAgICB0b0ludChnZXQodGhpcy5zY3JvbGxiYXJYUmFpbCkubWFyZ2luUmlnaHQpO1xuICB0aGlzLnJhaWxZTWFyZ2luSGVpZ2h0ID1cbiAgICB0b0ludChnZXQodGhpcy5zY3JvbGxiYXJZUmFpbCkubWFyZ2luVG9wKSArXG4gICAgdG9JbnQoZ2V0KHRoaXMuc2Nyb2xsYmFyWVJhaWwpLm1hcmdpbkJvdHRvbSk7XG5cbiAgLy8gSGlkZSBzY3JvbGxiYXJzIG5vdCB0byBhZmZlY3Qgc2Nyb2xsV2lkdGggYW5kIHNjcm9sbEhlaWdodFxuICBzZXQodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiAnbm9uZScgfSk7XG4gIHNldCh0aGlzLnNjcm9sbGJhcllSYWlsLCB7IGRpc3BsYXk6ICdub25lJyB9KTtcblxuICB1cGRhdGVHZW9tZXRyeSh0aGlzKTtcblxuICBwcm9jZXNzU2Nyb2xsRGlmZih0aGlzLCAndG9wJywgMCwgZmFsc2UsIHRydWUpO1xuICBwcm9jZXNzU2Nyb2xsRGlmZih0aGlzLCAnbGVmdCcsIDAsIGZhbHNlLCB0cnVlKTtcblxuICBzZXQodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiAnJyB9KTtcbiAgc2V0KHRoaXMuc2Nyb2xsYmFyWVJhaWwsIHsgZGlzcGxheTogJycgfSk7XG59O1xuXG5QZXJmZWN0U2Nyb2xsYmFyLnByb3RvdHlwZS5vblNjcm9sbCA9IGZ1bmN0aW9uIG9uU2Nyb2xsIChlKSB7XG4gIGlmICghdGhpcy5pc0FsaXZlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdXBkYXRlR2VvbWV0cnkodGhpcyk7XG4gIHByb2Nlc3NTY3JvbGxEaWZmKHRoaXMsICd0b3AnLCB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wIC0gdGhpcy5sYXN0U2Nyb2xsVG9wKTtcbiAgcHJvY2Vzc1Njcm9sbERpZmYoXG4gICAgdGhpcyxcbiAgICAnbGVmdCcsXG4gICAgdGhpcy5lbGVtZW50LnNjcm9sbExlZnQgLSB0aGlzLmxhc3RTY3JvbGxMZWZ0XG4gICk7XG5cbiAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gTWF0aC5mbG9vcih0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wKTtcbiAgdGhpcy5sYXN0U2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0O1xufTtcblxuUGVyZmVjdFNjcm9sbGJhci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3kgKCkge1xuICBpZiAoIXRoaXMuaXNBbGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuZXZlbnQudW5iaW5kQWxsKCk7XG4gIHJlbW92ZSh0aGlzLnNjcm9sbGJhclgpO1xuICByZW1vdmUodGhpcy5zY3JvbGxiYXJZKTtcbiAgcmVtb3ZlKHRoaXMuc2Nyb2xsYmFyWFJhaWwpO1xuICByZW1vdmUodGhpcy5zY3JvbGxiYXJZUmFpbCk7XG4gIHRoaXMucmVtb3ZlUHNDbGFzc2VzKCk7XG5cbiAgLy8gdW5zZXQgZWxlbWVudHNcbiAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgdGhpcy5zY3JvbGxiYXJYID0gbnVsbDtcbiAgdGhpcy5zY3JvbGxiYXJZID0gbnVsbDtcbiAgdGhpcy5zY3JvbGxiYXJYUmFpbCA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWVJhaWwgPSBudWxsO1xuXG4gIHRoaXMuaXNBbGl2ZSA9IGZhbHNlO1xufTtcblxuUGVyZmVjdFNjcm9sbGJhci5wcm90b3R5cGUucmVtb3ZlUHNDbGFzc2VzID0gZnVuY3Rpb24gcmVtb3ZlUHNDbGFzc2VzICgpIHtcbiAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuZWxlbWVudC5jbGFzc05hbWVcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICFuYW1lLm1hdGNoKC9ecHMoWy1fXS4rfCkkLyk7IH0pXG4gICAgLmpvaW4oJyAnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBlcmZlY3RTY3JvbGxiYXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmZWN0LXNjcm9sbGJhci5lc20uanMubWFwXG4iLCIvKiFcbiAqIHR5cGVhaGVhZC5qcyAwLjExLjFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90d2l0dGVyL3R5cGVhaGVhZC5qc1xuICogQ29weXJpZ2h0IDIwMTMtMjAxNSBUd2l0dGVyLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVFxuICovXG5cbihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShcImJsb29kaG91bmRcIiwgWyBcImpxdWVyeVwiIF0sIGZ1bmN0aW9uKGEwKSB7XG4gICAgICAgICAgICByZXR1cm4gcm9vdFtcIkJsb29kaG91bmRcIl0gPSBmYWN0b3J5KGEwKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImpxdWVyeVwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdFtcIkJsb29kaG91bmRcIl0gPSBmYWN0b3J5KGpRdWVyeSk7XG4gICAgfVxufSkodGhpcywgZnVuY3Rpb24oJCkge1xuICAgIHZhciBfID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNNc2llOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSA/IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goLyhtc2llIHxydjopKFxcZCsoLlxcZCspPykvaSlbMl0gOiBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0JsYW5rU3RyaW5nOiBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXN0ciB8fCAvXlxccyokLy50ZXN0KHN0cik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXNjYXBlUmVnRXhDaGFyczogZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXFwtXFxbXFxdXFwvXFx7XFx9XFwoXFwpXFwqXFwrXFw/XFwuXFxcXFxcXlxcJFxcfF0vZywgXCJcXFxcJCZcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTdHJpbmc6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzTnVtYmVyOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0FycmF5OiAkLmlzQXJyYXksXG4gICAgICAgICAgICBpc0Z1bmN0aW9uOiAkLmlzRnVuY3Rpb24sXG4gICAgICAgICAgICBpc09iamVjdDogJC5pc1BsYWluT2JqZWN0LFxuICAgICAgICAgICAgaXNVbmRlZmluZWQ6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzRWxlbWVudDogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSlF1ZXJ5OiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgJDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b1N0cjogZnVuY3Rpb24gdG9TdHIocykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmlzVW5kZWZpbmVkKHMpIHx8IHMgPT09IG51bGwgPyBcIlwiIDogcyArIFwiXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmluZDogJC5wcm94eSxcbiAgICAgICAgICAgIGVhY2g6IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGNiKSB7XG4gICAgICAgICAgICAgICAgJC5lYWNoKGNvbGxlY3Rpb24sIHJldmVyc2VBcmdzKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXZlcnNlQXJncyhpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKHZhbHVlLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hcDogJC5tYXAsXG4gICAgICAgICAgICBmaWx0ZXI6ICQuZ3JlcCxcbiAgICAgICAgICAgIGV2ZXJ5OiBmdW5jdGlvbihvYmosIHRlc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIW9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkLmVhY2gob2JqLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXN1bHQgPSB0ZXN0LmNhbGwobnVsbCwgdmFsLCBrZXksIG9iaikpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc29tZTogZnVuY3Rpb24ob2JqLCB0ZXN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQuZWFjaChvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPSB0ZXN0LmNhbGwobnVsbCwgdmFsLCBrZXksIG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtaXhpbjogJC5leHRlbmQsXG4gICAgICAgICAgICBpZGVudGl0eTogZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb25lOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5leHRlbmQodHJ1ZSwge30sIG9iaik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0SWRHZW5lcmF0b3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZW1wbGF0aWZ5OiBmdW5jdGlvbiB0ZW1wbGF0aWZ5KG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiAkLmlzRnVuY3Rpb24ob2JqKSA/IG9iaiA6IHRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRlbXBsYXRlKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmVyOiBmdW5jdGlvbihmbikge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlYm91bmNlOiBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGltZW91dCwgcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzLCBsYXRlciwgY2FsbE5vdztcbiAgICAgICAgICAgICAgICAgICAgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRocm90dGxlOiBmdW5jdGlvbihmdW5jLCB3YWl0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQsIGFyZ3MsIHRpbWVvdXQsIHJlc3VsdCwgcHJldmlvdXMsIGxhdGVyO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzID0gMDtcbiAgICAgICAgICAgICAgICBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSwgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2YWwpID8gdmFsIDogSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub29wOiBmdW5jdGlvbigpIHt9XG4gICAgICAgIH07XG4gICAgfSgpO1xuICAgIHZhciBWRVJTSU9OID0gXCIwLjExLjFcIjtcbiAgICB2YXIgdG9rZW5pemVycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vbndvcmQ6IG5vbndvcmQsXG4gICAgICAgICAgICB3aGl0ZXNwYWNlOiB3aGl0ZXNwYWNlLFxuICAgICAgICAgICAgb2JqOiB7XG4gICAgICAgICAgICAgICAgbm9ud29yZDogZ2V0T2JqVG9rZW5pemVyKG5vbndvcmQpLFxuICAgICAgICAgICAgICAgIHdoaXRlc3BhY2U6IGdldE9ialRva2VuaXplcih3aGl0ZXNwYWNlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiB3aGl0ZXNwYWNlKHN0cikge1xuICAgICAgICAgICAgc3RyID0gXy50b1N0cihzdHIpO1xuICAgICAgICAgICAgcmV0dXJuIHN0ciA/IHN0ci5zcGxpdCgvXFxzKy8pIDogW107XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbm9ud29yZChzdHIpIHtcbiAgICAgICAgICAgIHN0ciA9IF8udG9TdHIoc3RyKTtcbiAgICAgICAgICAgIHJldHVybiBzdHIgPyBzdHIuc3BsaXQoL1xcVysvKSA6IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE9ialRva2VuaXplcih0b2tlbml6ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRLZXkoa2V5cykge1xuICAgICAgICAgICAgICAgIGtleXMgPSBfLmlzQXJyYXkoa2V5cykgPyBrZXlzIDogW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0b2tlbml6ZShvKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgXy5lYWNoKGtleXMsIGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VucyA9IHRva2Vucy5jb25jYXQodG9rZW5pemVyKF8udG9TdHIob1trXSkpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KCk7XG4gICAgdmFyIExydUNhY2hlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBMcnVDYWNoZShtYXhTaXplKSB7XG4gICAgICAgICAgICB0aGlzLm1heFNpemUgPSBfLmlzTnVtYmVyKG1heFNpemUpID8gbWF4U2l6ZSA6IDEwMDtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heFNpemUgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0ID0gdGhpcy5nZXQgPSAkLm5vb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihMcnVDYWNoZS5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhaWxJdGVtID0gdGhpcy5saXN0LnRhaWwsIG5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2l6ZSA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0LnJlbW92ZSh0YWlsSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmhhc2hbdGFpbEl0ZW0ua2V5XTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaXplLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlID0gdGhpcy5oYXNoW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS52YWwgPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5tb3ZlVG9Gcm9udChub2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbmV3IE5vZGUoa2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3QuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc2hba2V5XSA9IG5vZGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2l6ZSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuaGFzaFtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5tb3ZlVG9Gcm9udChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUudmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc2ggPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBuZXcgTGlzdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gTGlzdCgpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihMaXN0LnByb3RvdHlwZSwge1xuICAgICAgICAgICAgYWRkOiBmdW5jdGlvbiBhZGQobm9kZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5uZXh0ID0gdGhpcy5oZWFkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWQucHJldiA9IG5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGVhZCA9IG5vZGU7XG4gICAgICAgICAgICAgICAgdGhpcy50YWlsID0gdGhpcy50YWlsIHx8IG5vZGU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobm9kZSkge1xuICAgICAgICAgICAgICAgIG5vZGUucHJldiA/IG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0IDogdGhpcy5oZWFkID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgIG5vZGUubmV4dCA/IG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2IDogdGhpcy50YWlsID0gbm9kZS5wcmV2O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vdmVUb0Zyb250OiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUobm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBOb2RlKGtleSwgdmFsKSB7XG4gICAgICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgICAgIHRoaXMudmFsID0gdmFsO1xuICAgICAgICAgICAgdGhpcy5wcmV2ID0gdGhpcy5uZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTHJ1Q2FjaGU7XG4gICAgfSgpO1xuICAgIHZhciBQZXJzaXN0ZW50U3RvcmFnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIExPQ0FMX1NUT1JBR0U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBMT0NBTF9TVE9SQUdFID0gd2luZG93LmxvY2FsU3RvcmFnZTtcbiAgICAgICAgICAgIExPQ0FMX1NUT1JBR0Uuc2V0SXRlbShcIn5+flwiLCBcIiFcIik7XG4gICAgICAgICAgICBMT0NBTF9TVE9SQUdFLnJlbW92ZUl0ZW0oXCJ+fn5cIik7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgTE9DQUxfU1RPUkFHRSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gUGVyc2lzdGVudFN0b3JhZ2UobmFtZXNwYWNlLCBvdmVycmlkZSkge1xuICAgICAgICAgICAgdGhpcy5wcmVmaXggPSBbIFwiX19cIiwgbmFtZXNwYWNlLCBcIl9fXCIgXS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgdGhpcy50dGxLZXkgPSBcIl9fdHRsX19cIjtcbiAgICAgICAgICAgIHRoaXMua2V5TWF0Y2hlciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBfLmVzY2FwZVJlZ0V4Q2hhcnModGhpcy5wcmVmaXgpKTtcbiAgICAgICAgICAgIHRoaXMubHMgPSBvdmVycmlkZSB8fCBMT0NBTF9TVE9SQUdFO1xuICAgICAgICAgICAgIXRoaXMubHMgJiYgdGhpcy5fbm9vcCgpO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBfcHJlZml4OiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVmaXggKyBrZXk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3R0bEtleTogZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZpeChrZXkpICsgdGhpcy50dGxLZXk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX25vb3A6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0ID0gdGhpcy5zZXQgPSB0aGlzLnJlbW92ZSA9IHRoaXMuY2xlYXIgPSB0aGlzLmlzRXhwaXJlZCA9IF8ubm9vcDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfc2FmZVNldDogZnVuY3Rpb24oa2V5LCB2YWwpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxzLnNldEl0ZW0oa2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiUXVvdGFFeGNlZWRlZEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRXhwaXJlZChrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGUodGhpcy5scy5nZXRJdGVtKHRoaXMuX3ByZWZpeChrZXkpKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihrZXksIHZhbCwgdHRsKSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uaXNOdW1iZXIodHRsKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zYWZlU2V0KHRoaXMuX3R0bEtleShrZXkpLCBlbmNvZGUobm93KCkgKyB0dGwpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxzLnJlbW92ZUl0ZW0odGhpcy5fdHRsS2V5KGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2FmZVNldCh0aGlzLl9wcmVmaXgoa2V5KSwgZW5jb2RlKHZhbCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5scy5yZW1vdmVJdGVtKHRoaXMuX3R0bEtleShrZXkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxzLnJlbW92ZUl0ZW0odGhpcy5fcHJlZml4KGtleSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSwga2V5cyA9IGdhdGhlck1hdGNoaW5nS2V5cyh0aGlzLmtleU1hdGNoZXIpO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IGtleXMubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShrZXlzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNFeHBpcmVkOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHRsID0gZGVjb2RlKHRoaXMubHMuZ2V0SXRlbSh0aGlzLl90dGxLZXkoa2V5KSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmlzTnVtYmVyKHR0bCkgJiYgbm93KCkgPiB0dGwgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUGVyc2lzdGVudFN0b3JhZ2U7XG4gICAgICAgIGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXy5pc1VuZGVmaW5lZCh2YWwpID8gbnVsbCA6IHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVjb2RlKHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuICQucGFyc2VKU09OKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2F0aGVyTWF0Y2hpbmdLZXlzKGtleU1hdGNoZXIpIHtcbiAgICAgICAgICAgIHZhciBpLCBrZXksIGtleXMgPSBbXSwgbGVuID0gTE9DQUxfU1RPUkFHRS5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoKGtleSA9IExPQ0FMX1NUT1JBR0Uua2V5KGkpKS5tYXRjaChrZXlNYXRjaGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5LnJlcGxhY2Uoa2V5TWF0Y2hlciwgXCJcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIHZhciBUcmFuc3BvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBwZW5kaW5nUmVxdWVzdHNDb3VudCA9IDAsIHBlbmRpbmdSZXF1ZXN0cyA9IHt9LCBtYXhQZW5kaW5nUmVxdWVzdHMgPSA2LCBzaGFyZWRDYWNoZSA9IG5ldyBMcnVDYWNoZSgxMCk7XG4gICAgICAgIGZ1bmN0aW9uIFRyYW5zcG9ydChvKSB7XG4gICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxhc3RSZXEgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fc2VuZCA9IG8udHJhbnNwb3J0O1xuICAgICAgICAgICAgdGhpcy5fZ2V0ID0gby5saW1pdGVyID8gby5saW1pdGVyKHRoaXMuX2dldCkgOiB0aGlzLl9nZXQ7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZSA9IG8uY2FjaGUgPT09IGZhbHNlID8gbmV3IExydUNhY2hlKDApIDogc2hhcmVkQ2FjaGU7XG4gICAgICAgIH1cbiAgICAgICAgVHJhbnNwb3J0LnNldE1heFBlbmRpbmdSZXF1ZXN0cyA9IGZ1bmN0aW9uIHNldE1heFBlbmRpbmdSZXF1ZXN0cyhudW0pIHtcbiAgICAgICAgICAgIG1heFBlbmRpbmdSZXF1ZXN0cyA9IG51bTtcbiAgICAgICAgfTtcbiAgICAgICAgVHJhbnNwb3J0LnJlc2V0Q2FjaGUgPSBmdW5jdGlvbiByZXNldENhY2hlKCkge1xuICAgICAgICAgICAgc2hhcmVkQ2FjaGUucmVzZXQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgXy5taXhpbihUcmFuc3BvcnQucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBfZmluZ2VycHJpbnQ6IGZ1bmN0aW9uIGZpbmdlcnByaW50KG8pIHtcbiAgICAgICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgICAgICByZXR1cm4gby51cmwgKyBvLnR5cGUgKyAkLnBhcmFtKG8uZGF0YSB8fCB7fSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2dldDogZnVuY3Rpb24obywgY2IpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIGZpbmdlcnByaW50LCBqcVhocjtcbiAgICAgICAgICAgICAgICBmaW5nZXJwcmludCA9IHRoaXMuX2ZpbmdlcnByaW50KG8pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCB8fCBmaW5nZXJwcmludCAhPT0gdGhpcy5sYXN0UmVxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGpxWGhyID0gcGVuZGluZ1JlcXVlc3RzW2ZpbmdlcnByaW50XSkge1xuICAgICAgICAgICAgICAgICAgICBqcVhoci5kb25lKGRvbmUpLmZhaWwoZmFpbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZW5kaW5nUmVxdWVzdHNDb3VudCA8IG1heFBlbmRpbmdSZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHNDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHNbZmluZ2VycHJpbnRdID0gdGhpcy5fc2VuZChvKS5kb25lKGRvbmUpLmZhaWwoZmFpbCkuYWx3YXlzKGFsd2F5cyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlY2tSZXF1ZXN0QXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9uZShyZXNwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKG51bGwsIHJlc3ApO1xuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9jYWNoZS5zZXQoZmluZ2VycHJpbnQsIHJlc3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmYWlsKCkge1xuICAgICAgICAgICAgICAgICAgICBjYih0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYWx3YXlzKCkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHNDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGVuZGluZ1JlcXVlc3RzW2ZpbmdlcnByaW50XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQub25EZWNrUmVxdWVzdEFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX2dldC5hcHBseSh0aGF0LCB0aGF0Lm9uRGVja1JlcXVlc3RBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQub25EZWNrUmVxdWVzdEFyZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24obywgY2IpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcCwgZmluZ2VycHJpbnQ7XG4gICAgICAgICAgICAgICAgY2IgPSBjYiB8fCAkLm5vb3A7XG4gICAgICAgICAgICAgICAgbyA9IF8uaXNTdHJpbmcobykgPyB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogb1xuICAgICAgICAgICAgICAgIH0gOiBvIHx8IHt9O1xuICAgICAgICAgICAgICAgIGZpbmdlcnByaW50ID0gdGhpcy5fZmluZ2VycHJpbnQobyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RSZXEgPSBmaW5nZXJwcmludDtcbiAgICAgICAgICAgICAgICBpZiAocmVzcCA9IHRoaXMuX2NhY2hlLmdldChmaW5nZXJwcmludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IobnVsbCwgcmVzcCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0KG8sIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gVHJhbnNwb3J0O1xuICAgIH0oKTtcbiAgICB2YXIgU2VhcmNoSW5kZXggPSB3aW5kb3cuU2VhcmNoSW5kZXggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBDSElMRFJFTiA9IFwiY1wiLCBJRFMgPSBcImlcIjtcbiAgICAgICAgZnVuY3Rpb24gU2VhcmNoSW5kZXgobykge1xuICAgICAgICAgICAgbyA9IG8gfHwge307XG4gICAgICAgICAgICBpZiAoIW8uZGF0dW1Ub2tlbml6ZXIgfHwgIW8ucXVlcnlUb2tlbml6ZXIpIHtcbiAgICAgICAgICAgICAgICAkLmVycm9yKFwiZGF0dW1Ub2tlbml6ZXIgYW5kIHF1ZXJ5VG9rZW5pemVyIGFyZSBib3RoIHJlcXVpcmVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pZGVudGlmeSA9IG8uaWRlbnRpZnkgfHwgXy5zdHJpbmdpZnk7XG4gICAgICAgICAgICB0aGlzLmRhdHVtVG9rZW5pemVyID0gby5kYXR1bVRva2VuaXplcjtcbiAgICAgICAgICAgIHRoaXMucXVlcnlUb2tlbml6ZXIgPSBvLnF1ZXJ5VG9rZW5pemVyO1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oU2VhcmNoSW5kZXgucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBib290c3RyYXA6IGZ1bmN0aW9uIGJvb3RzdHJhcChvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXR1bXMgPSBvLmRhdHVtcztcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWUgPSBvLnRyaWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBfLmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogWyBkYXRhIF07XG4gICAgICAgICAgICAgICAgXy5lYWNoKGRhdGEsIGZ1bmN0aW9uKGRhdHVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZCwgdG9rZW5zO1xuICAgICAgICAgICAgICAgICAgICB0aGF0LmRhdHVtc1tpZCA9IHRoYXQuaWRlbnRpZnkoZGF0dW0pXSA9IGRhdHVtO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSBub3JtYWxpemVUb2tlbnModGhhdC5kYXR1bVRva2VuaXplcihkYXR1bSkpO1xuICAgICAgICAgICAgICAgICAgICBfLmVhY2godG9rZW5zLCBmdW5jdGlvbih0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUsIGNoYXJzLCBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSB0aGF0LnRyaWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFycyA9IHRva2VuLnNwbGl0KFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoID0gY2hhcnMuc2hpZnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlW0NISUxEUkVOXVtjaF0gfHwgKG5vZGVbQ0hJTERSRU5dW2NoXSA9IG5ld05vZGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVtJRFNdLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldChpZHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8ubWFwKGlkcywgZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuZGF0dW1zW2lkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWFyY2g6IGZ1bmN0aW9uIHNlYXJjaChxdWVyeSkge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgdG9rZW5zLCBtYXRjaGVzO1xuICAgICAgICAgICAgICAgIHRva2VucyA9IG5vcm1hbGl6ZVRva2Vucyh0aGlzLnF1ZXJ5VG9rZW5pemVyKHF1ZXJ5KSk7XG4gICAgICAgICAgICAgICAgXy5lYWNoKHRva2VucywgZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUsIGNoYXJzLCBjaCwgaWRzO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSB0aGF0LnRyaWU7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzID0gdG9rZW4uc3BsaXQoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIChjaCA9IGNoYXJzLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZVtDSElMRFJFTl1bY2hdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlICYmIGNoYXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gbm9kZVtJRFNdLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMgPyBnZXRJbnRlcnNlY3Rpb24obWF0Y2hlcywgaWRzKSA6IGlkcztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzID8gXy5tYXAodW5pcXVlKG1hdGNoZXMpLCBmdW5jdGlvbihpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5kYXR1bXNbaWRdO1xuICAgICAgICAgICAgICAgIH0pIDogW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsOiBmdW5jdGlvbiBhbGwoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRhdHVtcykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLmRhdHVtc1trZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXR1bXMgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWUgPSBuZXdOb2RlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbiBzZXJpYWxpemUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0dW1zOiB0aGlzLmRhdHVtcyxcbiAgICAgICAgICAgICAgICAgICAgdHJpZTogdGhpcy50cmllXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBTZWFyY2hJbmRleDtcbiAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplVG9rZW5zKHRva2Vucykge1xuICAgICAgICAgICAgdG9rZW5zID0gXy5maWx0ZXIodG9rZW5zLCBmdW5jdGlvbih0b2tlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXRva2VuO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0b2tlbnMgPSBfLm1hcCh0b2tlbnMsIGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbmV3Tm9kZSgpIHtcbiAgICAgICAgICAgIHZhciBub2RlID0ge307XG4gICAgICAgICAgICBub2RlW0lEU10gPSBbXTtcbiAgICAgICAgICAgIG5vZGVbQ0hJTERSRU5dID0ge307XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB1bmlxdWUoYXJyYXkpIHtcbiAgICAgICAgICAgIHZhciBzZWVuID0ge30sIHVuaXF1ZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghc2VlblthcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblthcnJheVtpXV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB1bmlxdWVzLnB1c2goYXJyYXlbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmlxdWVzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldEludGVyc2VjdGlvbihhcnJheUEsIGFycmF5Qikge1xuICAgICAgICAgICAgdmFyIGFpID0gMCwgYmkgPSAwLCBpbnRlcnNlY3Rpb24gPSBbXTtcbiAgICAgICAgICAgIGFycmF5QSA9IGFycmF5QS5zb3J0KCk7XG4gICAgICAgICAgICBhcnJheUIgPSBhcnJheUIuc29ydCgpO1xuICAgICAgICAgICAgdmFyIGxlbkFycmF5QSA9IGFycmF5QS5sZW5ndGgsIGxlbkFycmF5QiA9IGFycmF5Qi5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoYWkgPCBsZW5BcnJheUEgJiYgYmkgPCBsZW5BcnJheUIpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlBW2FpXSA8IGFycmF5QltiaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFycmF5QVthaV0gPiBhcnJheUJbYmldKSB7XG4gICAgICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLnB1c2goYXJyYXlBW2FpXSk7XG4gICAgICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbjtcbiAgICAgICAgfVxuICAgIH0oKTtcbiAgICB2YXIgUHJlZmV0Y2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBrZXlzID0ge1xuICAgICAgICAgICAgZGF0YTogXCJkYXRhXCIsXG4gICAgICAgICAgICBwcm90b2NvbDogXCJwcm90b2NvbFwiLFxuICAgICAgICAgICAgdGh1bWJwcmludDogXCJ0aHVtYnByaW50XCJcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gUHJlZmV0Y2gobykge1xuICAgICAgICAgICAgdGhpcy51cmwgPSBvLnVybDtcbiAgICAgICAgICAgIHRoaXMudHRsID0gby50dGw7XG4gICAgICAgICAgICB0aGlzLmNhY2hlID0gby5jYWNoZTtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZSA9IG8ucHJlcGFyZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtID0gby50cmFuc2Zvcm07XG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydCA9IG8udHJhbnNwb3J0O1xuICAgICAgICAgICAgdGhpcy50aHVtYnByaW50ID0gby50aHVtYnByaW50O1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlID0gbmV3IFBlcnNpc3RlbnRTdG9yYWdlKG8uY2FjaGVLZXkpO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oUHJlZmV0Y2gucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBfc2V0dGluZ3M6IGZ1bmN0aW9uIHNldHRpbmdzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RvcmU6IGZ1bmN0aW9uIHN0b3JlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGtleXMuZGF0YSwgZGF0YSwgdGhpcy50dGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoa2V5cy5wcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wsIHRoaXMudHRsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGtleXMudGh1bWJwcmludCwgdGhpcy50aHVtYnByaW50LCB0aGlzLnR0bCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnJvbUNhY2hlOiBmdW5jdGlvbiBmcm9tQ2FjaGUoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0b3JlZCA9IHt9LCBpc0V4cGlyZWQ7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdG9yZWQuZGF0YSA9IHRoaXMuc3RvcmFnZS5nZXQoa2V5cy5kYXRhKTtcbiAgICAgICAgICAgICAgICBzdG9yZWQucHJvdG9jb2wgPSB0aGlzLnN0b3JhZ2UuZ2V0KGtleXMucHJvdG9jb2wpO1xuICAgICAgICAgICAgICAgIHN0b3JlZC50aHVtYnByaW50ID0gdGhpcy5zdG9yYWdlLmdldChrZXlzLnRodW1icHJpbnQpO1xuICAgICAgICAgICAgICAgIGlzRXhwaXJlZCA9IHN0b3JlZC50aHVtYnByaW50ICE9PSB0aGlzLnRodW1icHJpbnQgfHwgc3RvcmVkLnByb3RvY29sICE9PSBsb2NhdGlvbi5wcm90b2NvbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVkLmRhdGEgJiYgIWlzRXhwaXJlZCA/IHN0b3JlZC5kYXRhIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmcm9tTmV0d29yazogZnVuY3Rpb24oY2IpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIHNldHRpbmdzO1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IHRoaXMucHJlcGFyZSh0aGlzLl9zZXR0aW5ncygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydChzZXR0aW5ncykuZmFpbChvbkVycm9yKS5kb25lKG9uUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBvblJlc3BvbnNlKHJlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgY2IobnVsbCwgdGhhdC50cmFuc2Zvcm0ocmVzcCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUHJlZmV0Y2g7XG4gICAgfSgpO1xuICAgIHZhciBSZW1vdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIGZ1bmN0aW9uIFJlbW90ZShvKSB7XG4gICAgICAgICAgICB0aGlzLnVybCA9IG8udXJsO1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlID0gby5wcmVwYXJlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSBvLnRyYW5zZm9ybTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0ID0gbmV3IFRyYW5zcG9ydCh7XG4gICAgICAgICAgICAgICAgY2FjaGU6IG8uY2FjaGUsXG4gICAgICAgICAgICAgICAgbGltaXRlcjogby5saW1pdGVyLFxuICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogby50cmFuc3BvcnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oUmVtb3RlLnByb3RvdHlwZSwge1xuICAgICAgICAgICAgX3NldHRpbmdzOiBmdW5jdGlvbiBzZXR0aW5ncygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KHF1ZXJ5LCBjYikge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgc2V0dGluZ3M7XG4gICAgICAgICAgICAgICAgaWYgKCFjYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IHRoaXMucHJlcGFyZShxdWVyeSwgdGhpcy5fc2V0dGluZ3MoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LmdldChzZXR0aW5ncywgb25SZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gb25SZXNwb25zZShlcnIsIHJlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyID8gY2IoW10pIDogY2IodGhhdC50cmFuc2Zvcm0ocmVzcCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYW5jZWxMYXN0UmVxdWVzdDogZnVuY3Rpb24gY2FuY2VsTGFzdFJlcXVlc3QoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnQuY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUmVtb3RlO1xuICAgIH0oKTtcbiAgICB2YXIgb1BhcnNlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhcnNlKG8pIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0cywgc29ydGVyO1xuICAgICAgICAgICAgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpZGVudGlmeTogXy5zdHJpbmdpZnksXG4gICAgICAgICAgICAgICAgZGF0dW1Ub2tlbml6ZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgcXVlcnlUb2tlbml6ZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgc3VmZmljaWVudDogNSxcbiAgICAgICAgICAgICAgICBzb3J0ZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgbG9jYWw6IFtdLFxuICAgICAgICAgICAgICAgIHByZWZldGNoOiBudWxsLFxuICAgICAgICAgICAgICAgIHJlbW90ZTogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG8gPSBfLm1peGluKGRlZmF1bHRzLCBvIHx8IHt9KTtcbiAgICAgICAgICAgICFvLmRhdHVtVG9rZW5pemVyICYmICQuZXJyb3IoXCJkYXR1bVRva2VuaXplciBpcyByZXF1aXJlZFwiKTtcbiAgICAgICAgICAgICFvLnF1ZXJ5VG9rZW5pemVyICYmICQuZXJyb3IoXCJxdWVyeVRva2VuaXplciBpcyByZXF1aXJlZFwiKTtcbiAgICAgICAgICAgIHNvcnRlciA9IG8uc29ydGVyO1xuICAgICAgICAgICAgby5zb3J0ZXIgPSBzb3J0ZXIgPyBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHguc29ydChzb3J0ZXIpO1xuICAgICAgICAgICAgfSA6IF8uaWRlbnRpdHk7XG4gICAgICAgICAgICBvLmxvY2FsID0gXy5pc0Z1bmN0aW9uKG8ubG9jYWwpID8gby5sb2NhbCgpIDogby5sb2NhbDtcbiAgICAgICAgICAgIG8ucHJlZmV0Y2ggPSBwYXJzZVByZWZldGNoKG8ucHJlZmV0Y2gpO1xuICAgICAgICAgICAgby5yZW1vdGUgPSBwYXJzZVJlbW90ZShvLnJlbW90ZSk7XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gcGFyc2VQcmVmZXRjaChvKSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdHM7XG4gICAgICAgICAgICBpZiAoIW8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgICAgIHVybDogbnVsbCxcbiAgICAgICAgICAgICAgICB0dGw6IDI0ICogNjAgKiA2MCAqIDFlMyxcbiAgICAgICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjYWNoZUtleTogbnVsbCxcbiAgICAgICAgICAgICAgICB0aHVtYnByaW50OiBcIlwiLFxuICAgICAgICAgICAgICAgIHByZXBhcmU6IF8uaWRlbnRpdHksXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBfLmlkZW50aXR5LFxuICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG8gPSBfLmlzU3RyaW5nKG8pID8ge1xuICAgICAgICAgICAgICAgIHVybDogb1xuICAgICAgICAgICAgfSA6IG87XG4gICAgICAgICAgICBvID0gXy5taXhpbihkZWZhdWx0cywgbyk7XG4gICAgICAgICAgICAhby51cmwgJiYgJC5lcnJvcihcInByZWZldGNoIHJlcXVpcmVzIHVybCB0byBiZSBzZXRcIik7XG4gICAgICAgICAgICBvLnRyYW5zZm9ybSA9IG8uZmlsdGVyIHx8IG8udHJhbnNmb3JtO1xuICAgICAgICAgICAgby5jYWNoZUtleSA9IG8uY2FjaGVLZXkgfHwgby51cmw7XG4gICAgICAgICAgICBvLnRodW1icHJpbnQgPSBWRVJTSU9OICsgby50aHVtYnByaW50O1xuICAgICAgICAgICAgby50cmFuc3BvcnQgPSBvLnRyYW5zcG9ydCA/IGNhbGxiYWNrVG9EZWZlcnJlZChvLnRyYW5zcG9ydCkgOiAkLmFqYXg7XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwYXJzZVJlbW90ZShvKSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdHM7XG4gICAgICAgICAgICBpZiAoIW8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcHJlcGFyZTogbnVsbCxcbiAgICAgICAgICAgICAgICByZXBsYWNlOiBudWxsLFxuICAgICAgICAgICAgICAgIHdpbGRjYXJkOiBudWxsLFxuICAgICAgICAgICAgICAgIGxpbWl0ZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgcmF0ZUxpbWl0Qnk6IFwiZGVib3VuY2VcIixcbiAgICAgICAgICAgICAgICByYXRlTGltaXRXYWl0OiAzMDAsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBfLmlkZW50aXR5LFxuICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG8gPSBfLmlzU3RyaW5nKG8pID8ge1xuICAgICAgICAgICAgICAgIHVybDogb1xuICAgICAgICAgICAgfSA6IG87XG4gICAgICAgICAgICBvID0gXy5taXhpbihkZWZhdWx0cywgbyk7XG4gICAgICAgICAgICAhby51cmwgJiYgJC5lcnJvcihcInJlbW90ZSByZXF1aXJlcyB1cmwgdG8gYmUgc2V0XCIpO1xuICAgICAgICAgICAgby50cmFuc2Zvcm0gPSBvLmZpbHRlciB8fCBvLnRyYW5zZm9ybTtcbiAgICAgICAgICAgIG8ucHJlcGFyZSA9IHRvUmVtb3RlUHJlcGFyZShvKTtcbiAgICAgICAgICAgIG8ubGltaXRlciA9IHRvTGltaXRlcihvKTtcbiAgICAgICAgICAgIG8udHJhbnNwb3J0ID0gby50cmFuc3BvcnQgPyBjYWxsYmFja1RvRGVmZXJyZWQoby50cmFuc3BvcnQpIDogJC5hamF4O1xuICAgICAgICAgICAgZGVsZXRlIG8ucmVwbGFjZTtcbiAgICAgICAgICAgIGRlbGV0ZSBvLndpbGRjYXJkO1xuICAgICAgICAgICAgZGVsZXRlIG8ucmF0ZUxpbWl0Qnk7XG4gICAgICAgICAgICBkZWxldGUgby5yYXRlTGltaXRXYWl0O1xuICAgICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdG9SZW1vdGVQcmVwYXJlKG8pIHtcbiAgICAgICAgICAgIHZhciBwcmVwYXJlLCByZXBsYWNlLCB3aWxkY2FyZDtcbiAgICAgICAgICAgIHByZXBhcmUgPSBvLnByZXBhcmU7XG4gICAgICAgICAgICByZXBsYWNlID0gby5yZXBsYWNlO1xuICAgICAgICAgICAgd2lsZGNhcmQgPSBvLndpbGRjYXJkO1xuICAgICAgICAgICAgaWYgKHByZXBhcmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlcGFyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICAgICAgICAgICAgcHJlcGFyZSA9IHByZXBhcmVCeVJlcGxhY2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG8ud2lsZGNhcmQpIHtcbiAgICAgICAgICAgICAgICBwcmVwYXJlID0gcHJlcGFyZUJ5V2lsZGNhcmQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXBhcmUgPSBpZGVuaXR5UHJlcGFyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmVwYXJlO1xuICAgICAgICAgICAgZnVuY3Rpb24gcHJlcGFyZUJ5UmVwbGFjZShxdWVyeSwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICBzZXR0aW5ncy51cmwgPSByZXBsYWNlKHNldHRpbmdzLnVybCwgcXVlcnkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHByZXBhcmVCeVdpbGRjYXJkKHF1ZXJ5LCBzZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHNldHRpbmdzLnVybCA9IHNldHRpbmdzLnVybC5yZXBsYWNlKHdpbGRjYXJkLCBlbmNvZGVVUklDb21wb25lbnQocXVlcnkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpZGVuaXR5UHJlcGFyZShxdWVyeSwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdG9MaW1pdGVyKG8pIHtcbiAgICAgICAgICAgIHZhciBsaW1pdGVyLCBtZXRob2QsIHdhaXQ7XG4gICAgICAgICAgICBsaW1pdGVyID0gby5saW1pdGVyO1xuICAgICAgICAgICAgbWV0aG9kID0gby5yYXRlTGltaXRCeTtcbiAgICAgICAgICAgIHdhaXQgPSBvLnJhdGVMaW1pdFdhaXQ7XG4gICAgICAgICAgICBpZiAoIWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgICBsaW1pdGVyID0gL150aHJvdHRsZSQvaS50ZXN0KG1ldGhvZCkgPyB0aHJvdHRsZSh3YWl0KSA6IGRlYm91bmNlKHdhaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxpbWl0ZXI7XG4gICAgICAgICAgICBmdW5jdGlvbiBkZWJvdW5jZSh3YWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfLmRlYm91bmNlKGZuLCB3YWl0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdGhyb3R0bGUod2FpdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0aHJvdHRsZShmbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy50aHJvdHRsZShmbiwgd2FpdCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYWxsYmFja1RvRGVmZXJyZWQoZm4pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB3cmFwcGVyKG8pIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG4gICAgICAgICAgICAgICAgZm4obywgb25TdWNjZXNzLCBvbkVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gb25TdWNjZXNzKHJlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgXy5kZWZlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUocmVzcCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVycikge1xuICAgICAgICAgICAgICAgICAgICBfLmRlZmVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KCk7XG4gICAgdmFyIEJsb29kaG91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBvbGQ7XG4gICAgICAgIG9sZCA9IHdpbmRvdyAmJiB3aW5kb3cuQmxvb2Rob3VuZDtcbiAgICAgICAgZnVuY3Rpb24gQmxvb2Rob3VuZChvKSB7XG4gICAgICAgICAgICBvID0gb1BhcnNlcihvKTtcbiAgICAgICAgICAgIHRoaXMuc29ydGVyID0gby5zb3J0ZXI7XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZ5ID0gby5pZGVudGlmeTtcbiAgICAgICAgICAgIHRoaXMuc3VmZmljaWVudCA9IG8uc3VmZmljaWVudDtcbiAgICAgICAgICAgIHRoaXMubG9jYWwgPSBvLmxvY2FsO1xuICAgICAgICAgICAgdGhpcy5yZW1vdGUgPSBvLnJlbW90ZSA/IG5ldyBSZW1vdGUoby5yZW1vdGUpIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMucHJlZmV0Y2ggPSBvLnByZWZldGNoID8gbmV3IFByZWZldGNoKG8ucHJlZmV0Y2gpIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSBuZXcgU2VhcmNoSW5kZXgoe1xuICAgICAgICAgICAgICAgIGlkZW50aWZ5OiB0aGlzLmlkZW50aWZ5LFxuICAgICAgICAgICAgICAgIGRhdHVtVG9rZW5pemVyOiBvLmRhdHVtVG9rZW5pemVyLFxuICAgICAgICAgICAgICAgIHF1ZXJ5VG9rZW5pemVyOiBvLnF1ZXJ5VG9rZW5pemVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG8uaW5pdGlhbGl6ZSAhPT0gZmFsc2UgJiYgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgQmxvb2Rob3VuZC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gbm9Db25mbGljdCgpIHtcbiAgICAgICAgICAgIHdpbmRvdyAmJiAod2luZG93LkJsb29kaG91bmQgPSBvbGQpO1xuICAgICAgICAgICAgcmV0dXJuIEJsb29kaG91bmQ7XG4gICAgICAgIH07XG4gICAgICAgIEJsb29kaG91bmQudG9rZW5pemVycyA9IHRva2VuaXplcnM7XG4gICAgICAgIF8ubWl4aW4oQmxvb2Rob3VuZC5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIF9fdHRBZGFwdGVyOiBmdW5jdGlvbiB0dEFkYXB0ZXIoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW90ZSA/IHdpdGhBc3luYyA6IHdpdGhvdXRBc3luYztcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB3aXRoQXN5bmMocXVlcnksIHN5bmMsIGFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0LnNlYXJjaChxdWVyeSwgc3luYywgYXN5bmMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB3aXRob3V0QXN5bmMocXVlcnksIHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuc2VhcmNoKHF1ZXJ5LCBzeW5jKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2xvYWRQcmVmZXRjaDogZnVuY3Rpb24gbG9hZFByZWZldGNoKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgZGVmZXJyZWQsIHNlcmlhbGl6ZWQ7XG4gICAgICAgICAgICAgICAgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnByZWZldGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlcmlhbGl6ZWQgPSB0aGlzLnByZWZldGNoLmZyb21DYWNoZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXguYm9vdHN0cmFwKHNlcmlhbGl6ZWQpO1xuICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmZXRjaC5mcm9tTmV0d29yayhkb25lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb25lKGVyciwgZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhhdC5hZGQoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQucHJlZmV0Y2guc3RvcmUodGhhdC5pbmRleC5zZXJpYWxpemUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2luaXRpYWxpemU6IGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBkZWZlcnJlZDtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgKHRoaXMuaW5pdFByb21pc2UgPSB0aGlzLl9sb2FkUHJlZmV0Y2goKSkuZG9uZShhZGRMb2NhbFRvSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXRQcm9taXNlO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZExvY2FsVG9JbmRleCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5hZGQodGhhdC5sb2NhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIGluaXRpYWxpemUoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuaW5pdFByb21pc2UgfHwgZm9yY2UgPyB0aGlzLl9pbml0aWFsaXplKCkgOiB0aGlzLmluaXRQcm9taXNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gYWRkKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4LmFkZChkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldChpZHMpIHtcbiAgICAgICAgICAgICAgICBpZHMgPSBfLmlzQXJyYXkoaWRzKSA/IGlkcyA6IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5nZXQoaWRzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWFyY2g6IGZ1bmN0aW9uIHNlYXJjaChxdWVyeSwgc3luYywgYXN5bmMpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIGxvY2FsO1xuICAgICAgICAgICAgICAgIGxvY2FsID0gdGhpcy5zb3J0ZXIodGhpcy5pbmRleC5zZWFyY2gocXVlcnkpKTtcbiAgICAgICAgICAgICAgICBzeW5jKHRoaXMucmVtb3RlID8gbG9jYWwuc2xpY2UoKSA6IGxvY2FsKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZW1vdGUgJiYgbG9jYWwubGVuZ3RoIDwgdGhpcy5zdWZmaWNpZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3RlLmdldChxdWVyeSwgcHJvY2Vzc1JlbW90ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlbW90ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZS5jYW5jZWxMYXN0UmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUmVtb3RlKHJlbW90ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm9uRHVwbGljYXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBfLmVhY2gocmVtb3RlLCBmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAhXy5zb21lKGxvY2FsLCBmdW5jdGlvbihsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuaWRlbnRpZnkocikgPT09IHRoYXQuaWRlbnRpZnkobCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSAmJiBub25EdXBsaWNhdGVzLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luYyAmJiBhc3luYyhub25EdXBsaWNhdGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsOiBmdW5jdGlvbiBhbGwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXguYWxsKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgucmVzZXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhclByZWZldGNoQ2FjaGU6IGZ1bmN0aW9uIGNsZWFyUHJlZmV0Y2hDYWNoZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWZldGNoICYmIHRoaXMucHJlZmV0Y2guY2xlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhclJlbW90ZUNhY2hlOiBmdW5jdGlvbiBjbGVhclJlbW90ZUNhY2hlKCkge1xuICAgICAgICAgICAgICAgIFRyYW5zcG9ydC5yZXNldENhY2hlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHRBZGFwdGVyOiBmdW5jdGlvbiB0dEFkYXB0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX190dEFkYXB0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBCbG9vZGhvdW5kO1xuICAgIH0oKTtcbiAgICByZXR1cm4gQmxvb2Rob3VuZDtcbn0pO1xuXG4oZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoXCJ0eXBlYWhlYWQuanNcIiwgWyBcImpxdWVyeVwiIF0sIGZ1bmN0aW9uKGEwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeShhMCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJqcXVlcnlcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZhY3RvcnkoalF1ZXJ5KTtcbiAgICB9XG59KSh0aGlzLCBmdW5jdGlvbigkKSB7XG4gICAgdmFyIF8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc01zaWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpID8gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvKG1zaWUgfHJ2OikoXFxkKyguXFxkKyk/KS9pKVsyXSA6IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQmxhbmtTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICAgICAgICAgIHJldHVybiAhc3RyIHx8IC9eXFxzKiQvLnRlc3Qoc3RyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlc2NhcGVSZWdFeENoYXJzOiBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCBcIlxcXFwkJlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1N0cmluZzogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNOdW1iZXI6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQXJyYXk6ICQuaXNBcnJheSxcbiAgICAgICAgICAgIGlzRnVuY3Rpb246ICQuaXNGdW5jdGlvbixcbiAgICAgICAgICAgIGlzT2JqZWN0OiAkLmlzUGxhaW5PYmplY3QsXG4gICAgICAgICAgICBpc1VuZGVmaW5lZDogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNFbGVtZW50OiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNKUXVlcnk6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiAkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvU3RyOiBmdW5jdGlvbiB0b1N0cihzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNVbmRlZmluZWQocykgfHwgcyA9PT0gbnVsbCA/IFwiXCIgOiBzICsgXCJcIjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiaW5kOiAkLnByb3h5LFxuICAgICAgICAgICAgZWFjaDogZnVuY3Rpb24oY29sbGVjdGlvbiwgY2IpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2goY29sbGVjdGlvbiwgcmV2ZXJzZUFyZ3MpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VBcmdzKGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IodmFsdWUsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFwOiAkLm1hcCxcbiAgICAgICAgICAgIGZpbHRlcjogJC5ncmVwLFxuICAgICAgICAgICAgZXZlcnk6IGZ1bmN0aW9uKG9iaiwgdGVzdCkge1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQuZWFjaChvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9IHRlc3QuY2FsbChudWxsLCB2YWwsIGtleSwgb2JqKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb21lOiBmdW5jdGlvbihvYmosIHRlc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJC5lYWNoKG9iaiwgZnVuY3Rpb24oa2V5LCB2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9IHRlc3QuY2FsbChudWxsLCB2YWwsIGtleSwgb2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhcmVzdWx0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1peGluOiAkLmV4dGVuZCxcbiAgICAgICAgICAgIGlkZW50aXR5OiBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh0cnVlLCB7fSwgb2JqKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRJZEdlbmVyYXRvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRlbXBsYXRpZnk6IGZ1bmN0aW9uIHRlbXBsYXRpZnkob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQuaXNGdW5jdGlvbihvYmopID8gb2JqIDogdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdGVtcGxhdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmZXI6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVib3VuY2U6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciB0aW1lb3V0LCByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHMsIGxhdGVyLCBjYWxsTm93O1xuICAgICAgICAgICAgICAgICAgICBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhyb3R0bGU6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCwgYXJncywgdGltZW91dCwgcmVzdWx0LCBwcmV2aW91cywgbGF0ZXI7XG4gICAgICAgICAgICAgICAgcHJldmlvdXMgPSAwO1xuICAgICAgICAgICAgICAgIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLCByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmlzU3RyaW5nKHZhbCkgPyB2YWwgOiBKU09OLnN0cmluZ2lmeSh2YWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vb3A6IGZ1bmN0aW9uKCkge31cbiAgICAgICAgfTtcbiAgICB9KCk7XG4gICAgdmFyIFdXVyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIGRlZmF1bHRDbGFzc05hbWVzID0ge1xuICAgICAgICAgICAgd3JhcHBlcjogXCJ0d2l0dGVyLXR5cGVhaGVhZFwiLFxuICAgICAgICAgICAgaW5wdXQ6IFwidHQtaW5wdXRcIixcbiAgICAgICAgICAgIGhpbnQ6IFwidHQtaGludFwiLFxuICAgICAgICAgICAgbWVudTogXCJ0dC1tZW51XCIsXG4gICAgICAgICAgICBkYXRhc2V0OiBcInR0LWRhdGFzZXRcIixcbiAgICAgICAgICAgIHN1Z2dlc3Rpb246IFwidHQtc3VnZ2VzdGlvblwiLFxuICAgICAgICAgICAgc2VsZWN0YWJsZTogXCJ0dC1zZWxlY3RhYmxlXCIsXG4gICAgICAgICAgICBlbXB0eTogXCJ0dC1lbXB0eVwiLFxuICAgICAgICAgICAgb3BlbjogXCJ0dC1vcGVuXCIsXG4gICAgICAgICAgICBjdXJzb3I6IFwidHQtY3Vyc29yXCIsXG4gICAgICAgICAgICBoaWdobGlnaHQ6IFwidHQtaGlnaGxpZ2h0XCJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGJ1aWxkO1xuICAgICAgICBmdW5jdGlvbiBidWlsZChvKSB7XG4gICAgICAgICAgICB2YXIgd3d3LCBjbGFzc2VzO1xuICAgICAgICAgICAgY2xhc3NlcyA9IF8ubWl4aW4oe30sIGRlZmF1bHRDbGFzc05hbWVzLCBvKTtcbiAgICAgICAgICAgIHd3dyA9IHtcbiAgICAgICAgICAgICAgICBjc3M6IGJ1aWxkQ3NzKCksXG4gICAgICAgICAgICAgICAgY2xhc3NlczogY2xhc3NlcyxcbiAgICAgICAgICAgICAgICBodG1sOiBidWlsZEh0bWwoY2xhc3NlcyksXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JzOiBidWlsZFNlbGVjdG9ycyhjbGFzc2VzKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY3NzOiB3d3cuY3NzLFxuICAgICAgICAgICAgICAgIGh0bWw6IHd3dy5odG1sLFxuICAgICAgICAgICAgICAgIGNsYXNzZXM6IHd3dy5jbGFzc2VzLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yczogd3d3LnNlbGVjdG9ycyxcbiAgICAgICAgICAgICAgICBtaXhpbjogZnVuY3Rpb24obykge1xuICAgICAgICAgICAgICAgICAgICBfLm1peGluKG8sIHd3dyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZEh0bWwoYykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiAnPHNwYW4gY2xhc3M9XCInICsgYy53cmFwcGVyICsgJ1wiPjwvc3Bhbj4nLFxuICAgICAgICAgICAgICAgIG1lbnU6ICc8ZGl2IGNsYXNzPVwiJyArIGMubWVudSArICdcIj48L2Rpdj4nXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkU2VsZWN0b3JzKGNsYXNzZXMpIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSB7fTtcbiAgICAgICAgICAgIF8uZWFjaChjbGFzc2VzLCBmdW5jdGlvbih2LCBrKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3JzW2tdID0gXCIuXCIgKyB2O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0b3JzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkQ3NzKCkge1xuICAgICAgICAgICAgdmFyIGNzcyA9IHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhpbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgICAgICAgdG9wOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IFwiMVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBcInRvcFwiLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5wdXRXaXRoTm9IaW50OiB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IFwidG9wXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lbnU6IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgICAgICAgdG9wOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogXCIxMDBcIixcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJub25lXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGx0cjoge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IFwiYXV0b1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBydGw6IHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBcIiAwXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKF8uaXNNc2llKCkpIHtcbiAgICAgICAgICAgICAgICBfLm1peGluKGNzcy5pbnB1dCwge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IFwidXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8veUg1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlCUkFBNylcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNzcztcbiAgICAgICAgfVxuICAgIH0oKTtcbiAgICB2YXIgRXZlbnRCdXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBuYW1lc3BhY2UsIGRlcHJlY2F0aW9uTWFwO1xuICAgICAgICBuYW1lc3BhY2UgPSBcInR5cGVhaGVhZDpcIjtcbiAgICAgICAgZGVwcmVjYXRpb25NYXAgPSB7XG4gICAgICAgICAgICByZW5kZXI6IFwicmVuZGVyZWRcIixcbiAgICAgICAgICAgIGN1cnNvcmNoYW5nZTogXCJjdXJzb3JjaGFuZ2VkXCIsXG4gICAgICAgICAgICBzZWxlY3Q6IFwic2VsZWN0ZWRcIixcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogXCJhdXRvY29tcGxldGVkXCJcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gRXZlbnRCdXMobykge1xuICAgICAgICAgICAgaWYgKCFvIHx8ICFvLmVsKSB7XG4gICAgICAgICAgICAgICAgJC5lcnJvcihcIkV2ZW50QnVzIGluaXRpYWxpemVkIHdpdGhvdXQgZWxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiRlbCA9ICQoby5lbCk7XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihFdmVudEJ1cy5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIF90cmlnZ2VyOiBmdW5jdGlvbih0eXBlLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyICRlO1xuICAgICAgICAgICAgICAgICRlID0gJC5FdmVudChuYW1lc3BhY2UgKyB0eXBlKTtcbiAgICAgICAgICAgICAgICAoYXJncyA9IGFyZ3MgfHwgW10pLnVuc2hpZnQoJGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLnRyaWdnZXIuYXBwbHkodGhpcy4kZWwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiAkZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiZWZvcmU6IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncywgJGU7XG4gICAgICAgICAgICAgICAgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAkZSA9IHRoaXMuX3RyaWdnZXIoXCJiZWZvcmVcIiArIHR5cGUsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiAkZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlcHJlY2F0ZWRUeXBlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIodHlwZSwgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICAgICAgICAgICAgICBpZiAoZGVwcmVjYXRlZFR5cGUgPSBkZXByZWNhdGlvbk1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKGRlcHJlY2F0ZWRUeXBlLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudEJ1cztcbiAgICB9KCk7XG4gICAgdmFyIEV2ZW50RW1pdHRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIHNwbGl0dGVyID0gL1xccysvLCBuZXh0VGljayA9IGdldE5leHRUaWNrKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvblN5bmM6IG9uU3luYyxcbiAgICAgICAgICAgIG9uQXN5bmM6IG9uQXN5bmMsXG4gICAgICAgICAgICBvZmY6IG9mZixcbiAgICAgICAgICAgIHRyaWdnZXI6IHRyaWdnZXJcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gb24obWV0aG9kLCB0eXBlcywgY2IsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHZhciB0eXBlO1xuICAgICAgICAgICAgaWYgKCFjYikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHlwZXMgPSB0eXBlcy5zcGxpdChzcGxpdHRlcik7XG4gICAgICAgICAgICBjYiA9IGNvbnRleHQgPyBiaW5kQ29udGV4dChjYiwgY29udGV4dCkgOiBjYjtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcbiAgICAgICAgICAgIHdoaWxlICh0eXBlID0gdHlwZXMuc2hpZnQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1t0eXBlXSA9IHRoaXMuX2NhbGxiYWNrc1t0eXBlXSB8fCB7XG4gICAgICAgICAgICAgICAgICAgIHN5bmM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBhc3luYzogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1t0eXBlXVttZXRob2RdLnB1c2goY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25Bc3luYyh0eXBlcywgY2IsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBvbi5jYWxsKHRoaXMsIFwiYXN5bmNcIiwgdHlwZXMsIGNiLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvblN5bmModHlwZXMsIGNiLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gb24uY2FsbCh0aGlzLCBcInN5bmNcIiwgdHlwZXMsIGNiLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvZmYodHlwZXMpIHtcbiAgICAgICAgICAgIHZhciB0eXBlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoc3BsaXR0ZXIpO1xuICAgICAgICAgICAgd2hpbGUgKHR5cGUgPSB0eXBlcy5zaGlmdCgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1t0eXBlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXIodHlwZXMpIHtcbiAgICAgICAgICAgIHZhciB0eXBlLCBjYWxsYmFja3MsIGFyZ3MsIHN5bmNGbHVzaCwgYXN5bmNGbHVzaDtcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0eXBlcyA9IHR5cGVzLnNwbGl0KHNwbGl0dGVyKTtcbiAgICAgICAgICAgIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICB3aGlsZSAoKHR5cGUgPSB0eXBlcy5zaGlmdCgpKSAmJiAoY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW3R5cGVdKSkge1xuICAgICAgICAgICAgICAgIHN5bmNGbHVzaCA9IGdldEZsdXNoKGNhbGxiYWNrcy5zeW5jLCB0aGlzLCBbIHR5cGUgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgICAgIGFzeW5jRmx1c2ggPSBnZXRGbHVzaChjYWxsYmFja3MuYXN5bmMsIHRoaXMsIFsgdHlwZSBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgc3luY0ZsdXNoKCkgJiYgbmV4dFRpY2soYXN5bmNGbHVzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRGbHVzaChjYWxsYmFja3MsIGNvbnRleHQsIGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbHVzaDtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBjYW5jZWxsZWQ7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7ICFjYW5jZWxsZWQgJiYgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZCA9IGNhbGxiYWNrc1tpXS5hcHBseShjb250ZXh0LCBhcmdzKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhY2FuY2VsbGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE5leHRUaWNrKCkge1xuICAgICAgICAgICAgdmFyIG5leHRUaWNrRm47XG4gICAgICAgICAgICBpZiAod2luZG93LnNldEltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgIG5leHRUaWNrRm4gPSBmdW5jdGlvbiBuZXh0VGlja1NldEltbWVkaWF0ZShmbikge1xuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXh0VGlja0ZuID0gZnVuY3Rpb24gbmV4dFRpY2tTZXRUaW1lb3V0KGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHRUaWNrRm47XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYmluZENvbnRleHQoZm4sIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5iaW5kID8gZm4uYmluZChjb250ZXh0KSA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KGNvbnRleHQsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIHZhciBoaWdobGlnaHQgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIG5vZGU6IG51bGwsXG4gICAgICAgICAgICBwYXR0ZXJuOiBudWxsLFxuICAgICAgICAgICAgdGFnTmFtZTogXCJzdHJvbmdcIixcbiAgICAgICAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgICAgICAgIHdvcmRzT25seTogZmFsc2UsXG4gICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gaGlnaHRsaWdodChvKSB7XG4gICAgICAgICAgICB2YXIgcmVnZXg7XG4gICAgICAgICAgICBvID0gXy5taXhpbih7fSwgZGVmYXVsdHMsIG8pO1xuICAgICAgICAgICAgaWYgKCFvLm5vZGUgfHwgIW8ucGF0dGVybikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG8ucGF0dGVybiA9IF8uaXNBcnJheShvLnBhdHRlcm4pID8gby5wYXR0ZXJuIDogWyBvLnBhdHRlcm4gXTtcbiAgICAgICAgICAgIHJlZ2V4ID0gZ2V0UmVnZXgoby5wYXR0ZXJuLCBvLmNhc2VTZW5zaXRpdmUsIG8ud29yZHNPbmx5KTtcbiAgICAgICAgICAgIHRyYXZlcnNlKG8ubm9kZSwgaGlnaHRsaWdodFRleHROb2RlKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGhpZ2h0bGlnaHRUZXh0Tm9kZSh0ZXh0Tm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCwgcGF0dGVybk5vZGUsIHdyYXBwZXJOb2RlO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IHJlZ2V4LmV4ZWModGV4dE5vZGUuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlck5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudChvLnRhZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICBvLmNsYXNzTmFtZSAmJiAod3JhcHBlck5vZGUuY2xhc3NOYW1lID0gby5jbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuTm9kZSA9IHRleHROb2RlLnNwbGl0VGV4dChtYXRjaC5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5Ob2RlLnNwbGl0VGV4dChtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyTm9kZS5hcHBlbmRDaGlsZChwYXR0ZXJuTm9kZS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3cmFwcGVyTm9kZSwgcGF0dGVybk5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gISFtYXRjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlKGVsLCBoaWdodGxpZ2h0VGV4dE5vZGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlLCBURVhUX05PREVfVFlQRSA9IDM7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVsLmNoaWxkTm9kZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERV9UWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IGhpZ2h0bGlnaHRUZXh0Tm9kZShjaGlsZE5vZGUpID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZShjaGlsZE5vZGUsIGhpZ2h0bGlnaHRUZXh0Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIGdldFJlZ2V4KHBhdHRlcm5zLCBjYXNlU2Vuc2l0aXZlLCB3b3Jkc09ubHkpIHtcbiAgICAgICAgICAgIHZhciBlc2NhcGVkUGF0dGVybnMgPSBbXSwgcmVnZXhTdHI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGF0dGVybnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkUGF0dGVybnMucHVzaChfLmVzY2FwZVJlZ0V4Q2hhcnMocGF0dGVybnNbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZ2V4U3RyID0gd29yZHNPbmx5ID8gXCJcXFxcYihcIiArIGVzY2FwZWRQYXR0ZXJucy5qb2luKFwifFwiKSArIFwiKVxcXFxiXCIgOiBcIihcIiArIGVzY2FwZWRQYXR0ZXJucy5qb2luKFwifFwiKSArIFwiKVwiO1xuICAgICAgICAgICAgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyBuZXcgUmVnRXhwKHJlZ2V4U3RyKSA6IG5ldyBSZWdFeHAocmVnZXhTdHIsIFwiaVwiKTtcbiAgICAgICAgfVxuICAgIH0od2luZG93LmRvY3VtZW50KTtcbiAgICB2YXIgSW5wdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBzcGVjaWFsS2V5Q29kZU1hcDtcbiAgICAgICAgc3BlY2lhbEtleUNvZGVNYXAgPSB7XG4gICAgICAgICAgICA5OiBcInRhYlwiLFxuICAgICAgICAgICAgMjc6IFwiZXNjXCIsXG4gICAgICAgICAgICAzNzogXCJsZWZ0XCIsXG4gICAgICAgICAgICAzOTogXCJyaWdodFwiLFxuICAgICAgICAgICAgMTM6IFwiZW50ZXJcIixcbiAgICAgICAgICAgIDM4OiBcInVwXCIsXG4gICAgICAgICAgICA0MDogXCJkb3duXCJcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gSW5wdXQobywgd3d3KSB7XG4gICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgIGlmICghby5pbnB1dCkge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJpbnB1dCBpcyBtaXNzaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3d3Lm1peGluKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy4kaGludCA9ICQoby5oaW50KTtcbiAgICAgICAgICAgIHRoaXMuJGlucHV0ID0gJChvLmlucHV0KTtcbiAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRpbnB1dC52YWwoKTtcbiAgICAgICAgICAgIHRoaXMucXVlcnlXaGVuRm9jdXNlZCA9IHRoaXMuaGFzRm9jdXMoKSA/IHRoaXMucXVlcnkgOiBudWxsO1xuICAgICAgICAgICAgdGhpcy4kb3ZlcmZsb3dIZWxwZXIgPSBidWlsZE92ZXJmbG93SGVscGVyKHRoaXMuJGlucHV0KTtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrTGFuZ3VhZ2VEaXJlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRoaW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SGludCA9IHRoaXMuZ2V0SGludCA9IHRoaXMuY2xlYXJIaW50ID0gdGhpcy5jbGVhckhpbnRJZkludmFsaWQgPSBfLm5vb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgSW5wdXQubm9ybWFsaXplUXVlcnkgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBfLnRvU3RyKHN0cikucmVwbGFjZSgvXlxccyovZywgXCJcIikucmVwbGFjZSgvXFxzezIsfS9nLCBcIiBcIik7XG4gICAgICAgIH07XG4gICAgICAgIF8ubWl4aW4oSW5wdXQucHJvdG90eXBlLCBFdmVudEVtaXR0ZXIsIHtcbiAgICAgICAgICAgIF9vbkJsdXI6IGZ1bmN0aW9uIG9uQmx1cigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImJsdXJyZWRcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uRm9jdXM6IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVdoZW5Gb2N1c2VkID0gdGhpcy5xdWVyeTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJmb2N1c2VkXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbktleWRvd246IGZ1bmN0aW9uIG9uS2V5ZG93bigkZSkge1xuICAgICAgICAgICAgICAgIHZhciBrZXlOYW1lID0gc3BlY2lhbEtleUNvZGVNYXBbJGUud2hpY2ggfHwgJGUua2V5Q29kZV07XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFuYWdlUHJldmVudERlZmF1bHQoa2V5TmFtZSwgJGUpO1xuICAgICAgICAgICAgICAgIGlmIChrZXlOYW1lICYmIHRoaXMuX3Nob3VsZFRyaWdnZXIoa2V5TmFtZSwgJGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihrZXlOYW1lICsgXCJLZXllZFwiLCAkZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbklucHV0OiBmdW5jdGlvbiBvbklucHV0KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFF1ZXJ5KHRoaXMuZ2V0SW5wdXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySGludElmSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrTGFuZ3VhZ2VEaXJlY3Rpb24oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfbWFuYWdlUHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIG1hbmFnZVByZXZlbnREZWZhdWx0KGtleU5hbWUsICRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZlbnREZWZhdWx0O1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInVwXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZG93blwiOlxuICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9ICF3aXRoTW9kaWZpZXIoJGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgJiYgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfc2hvdWxkVHJpZ2dlcjogZnVuY3Rpb24gc2hvdWxkVHJpZ2dlcihrZXlOYW1lLCAkZSkge1xuICAgICAgICAgICAgICAgIHZhciB0cmlnZ2VyO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInRhYlwiOlxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyID0gIXdpdGhNb2RpZmllcigkZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyaWdnZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2NoZWNrTGFuZ3VhZ2VEaXJlY3Rpb246IGZ1bmN0aW9uIGNoZWNrTGFuZ3VhZ2VEaXJlY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRpciA9ICh0aGlzLiRpbnB1dC5jc3MoXCJkaXJlY3Rpb25cIikgfHwgXCJsdHJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIgIT09IGRpcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpciA9IGRpcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaGludC5hdHRyKFwiZGlyXCIsIGRpcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImxhbmdEaXJDaGFuZ2VkXCIsIGRpcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9zZXRRdWVyeTogZnVuY3Rpb24gc2V0UXVlcnkodmFsLCBzaWxlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJlRXF1aXZhbGVudCwgaGFzRGlmZmVyZW50V2hpdGVzcGFjZTtcbiAgICAgICAgICAgICAgICBhcmVFcXVpdmFsZW50ID0gYXJlUXVlcmllc0VxdWl2YWxlbnQodmFsLCB0aGlzLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBoYXNEaWZmZXJlbnRXaGl0ZXNwYWNlID0gYXJlRXF1aXZhbGVudCA/IHRoaXMucXVlcnkubGVuZ3RoICE9PSB2YWwubGVuZ3RoIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHZhbDtcbiAgICAgICAgICAgICAgICBpZiAoIXNpbGVudCAmJiAhYXJlRXF1aXZhbGVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJxdWVyeUNoYW5nZWRcIiwgdGhpcy5xdWVyeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2lsZW50ICYmIGhhc0RpZmZlcmVudFdoaXRlc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKFwid2hpdGVzcGFjZUNoYW5nZWRcIiwgdGhpcy5xdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJpbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgb25CbHVyLCBvbkZvY3VzLCBvbktleWRvd24sIG9uSW5wdXQ7XG4gICAgICAgICAgICAgICAgb25CbHVyID0gXy5iaW5kKHRoaXMuX29uQmx1ciwgdGhpcyk7XG4gICAgICAgICAgICAgICAgb25Gb2N1cyA9IF8uYmluZCh0aGlzLl9vbkZvY3VzLCB0aGlzKTtcbiAgICAgICAgICAgICAgICBvbktleWRvd24gPSBfLmJpbmQodGhpcy5fb25LZXlkb3duLCB0aGlzKTtcbiAgICAgICAgICAgICAgICBvbklucHV0ID0gXy5iaW5kKHRoaXMuX29uSW5wdXQsIHRoaXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0Lm9uKFwiYmx1ci50dFwiLCBvbkJsdXIpLm9uKFwiZm9jdXMudHRcIiwgb25Gb2N1cykub24oXCJrZXlkb3duLnR0XCIsIG9uS2V5ZG93bik7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzTXNpZSgpIHx8IF8uaXNNc2llKCkgPiA5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0Lm9uKFwiaW5wdXQudHRcIiwgb25JbnB1dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oXCJrZXlkb3duLnR0IGtleXByZXNzLnR0IGN1dC50dCBwYXN0ZS50dFwiLCBmdW5jdGlvbigkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwZWNpYWxLZXlDb2RlTWFwWyRlLndoaWNoIHx8ICRlLmtleUNvZGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXy5kZWZlcihfLmJpbmQodGhhdC5fb25JbnB1dCwgdGhhdCwgJGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uIGJsdXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuYmx1cigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldExhbmdEaXI6IGZ1bmN0aW9uIGdldExhbmdEaXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFF1ZXJ5OiBmdW5jdGlvbiBnZXRRdWVyeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVyeSB8fCBcIlwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldFF1ZXJ5OiBmdW5jdGlvbiBzZXRRdWVyeSh2YWwsIHNpbGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFF1ZXJ5KHZhbCwgc2lsZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNRdWVyeUNoYW5nZWRTaW5jZUxhc3RGb2N1czogZnVuY3Rpb24gaGFzUXVlcnlDaGFuZ2VkU2luY2VMYXN0Rm9jdXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkgIT09IHRoaXMucXVlcnlXaGVuRm9jdXNlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRJbnB1dFZhbHVlOiBmdW5jdGlvbiBnZXRJbnB1dFZhbHVlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRpbnB1dC52YWwoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRJbnB1dFZhbHVlOiBmdW5jdGlvbiBzZXRJbnB1dFZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySGludElmSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrTGFuZ3VhZ2VEaXJlY3Rpb24oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldElucHV0VmFsdWU6IGZ1bmN0aW9uIHJlc2V0SW5wdXRWYWx1ZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5xdWVyeSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0SGludDogZnVuY3Rpb24gZ2V0SGludCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaGludC52YWwoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRIaW50OiBmdW5jdGlvbiBzZXRIaW50KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaGludC52YWwodmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFySGludDogZnVuY3Rpb24gY2xlYXJIaW50KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SGludChcIlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhckhpbnRJZkludmFsaWQ6IGZ1bmN0aW9uIGNsZWFySGludElmSW52YWxpZCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsLCBoaW50LCB2YWxJc1ByZWZpeE9mSGludCwgaXNWYWxpZDtcbiAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLmdldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICBoaW50ID0gdGhpcy5nZXRIaW50KCk7XG4gICAgICAgICAgICAgICAgdmFsSXNQcmVmaXhPZkhpbnQgPSB2YWwgIT09IGhpbnQgJiYgaGludC5pbmRleE9mKHZhbCkgPT09IDA7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHZhbCAhPT0gXCJcIiAmJiB2YWxJc1ByZWZpeE9mSGludCAmJiAhdGhpcy5oYXNPdmVyZmxvdygpO1xuICAgICAgICAgICAgICAgICFpc1ZhbGlkICYmIHRoaXMuY2xlYXJIaW50KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzRm9jdXM6IGZ1bmN0aW9uIGhhc0ZvY3VzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRpbnB1dC5pcyhcIjpmb2N1c1wiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNPdmVyZmxvdzogZnVuY3Rpb24gaGFzT3ZlcmZsb3coKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnQgPSB0aGlzLiRpbnB1dC53aWR0aCgpIC0gMjtcbiAgICAgICAgICAgICAgICB0aGlzLiRvdmVyZmxvd0hlbHBlci50ZXh0KHRoaXMuZ2V0SW5wdXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kb3ZlcmZsb3dIZWxwZXIud2lkdGgoKSA+PSBjb25zdHJhaW50O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQ3Vyc29yQXRFbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZUxlbmd0aCwgc2VsZWN0aW9uU3RhcnQsIHJhbmdlO1xuICAgICAgICAgICAgICAgIHZhbHVlTGVuZ3RoID0gdGhpcy4kaW5wdXQudmFsKCkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gdGhpcy4kaW5wdXRbMF0uc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgaWYgKF8uaXNOdW1iZXIoc2VsZWN0aW9uU3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb25TdGFydCA9PT0gdmFsdWVMZW5ndGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UubW92ZVN0YXJ0KFwiY2hhcmFjdGVyXCIsIC12YWx1ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZUxlbmd0aCA9PT0gcmFuZ2UudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaGludC5vZmYoXCIudHRcIik7XG4gICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub2ZmKFwiLnR0XCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuJG92ZXJmbG93SGVscGVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGhpbnQgPSB0aGlzLiRpbnB1dCA9IHRoaXMuJG92ZXJmbG93SGVscGVyID0gJChcIjxkaXY+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIElucHV0O1xuICAgICAgICBmdW5jdGlvbiBidWlsZE92ZXJmbG93SGVscGVyKCRpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICQoJzxwcmUgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9wcmU+JykuY3NzKHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogXCJwcmVcIixcbiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAkaW5wdXQuY3NzKFwiZm9udC1mYW1pbHlcIiksXG4gICAgICAgICAgICAgICAgZm9udFNpemU6ICRpbnB1dC5jc3MoXCJmb250LXNpemVcIiksXG4gICAgICAgICAgICAgICAgZm9udFN0eWxlOiAkaW5wdXQuY3NzKFwiZm9udC1zdHlsZVwiKSxcbiAgICAgICAgICAgICAgICBmb250VmFyaWFudDogJGlucHV0LmNzcyhcImZvbnQtdmFyaWFudFwiKSxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAkaW5wdXQuY3NzKFwiZm9udC13ZWlnaHRcIiksXG4gICAgICAgICAgICAgICAgd29yZFNwYWNpbmc6ICRpbnB1dC5jc3MoXCJ3b3JkLXNwYWNpbmdcIiksXG4gICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJGlucHV0LmNzcyhcImxldHRlci1zcGFjaW5nXCIpLFxuICAgICAgICAgICAgICAgIHRleHRJbmRlbnQ6ICRpbnB1dC5jc3MoXCJ0ZXh0LWluZGVudFwiKSxcbiAgICAgICAgICAgICAgICB0ZXh0UmVuZGVyaW5nOiAkaW5wdXQuY3NzKFwidGV4dC1yZW5kZXJpbmdcIiksXG4gICAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogJGlucHV0LmNzcyhcInRleHQtdHJhbnNmb3JtXCIpXG4gICAgICAgICAgICB9KS5pbnNlcnRBZnRlcigkaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFyZVF1ZXJpZXNFcXVpdmFsZW50KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBJbnB1dC5ub3JtYWxpemVRdWVyeShhKSA9PT0gSW5wdXQubm9ybWFsaXplUXVlcnkoYik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gd2l0aE1vZGlmaWVyKCRlKSB7XG4gICAgICAgICAgICByZXR1cm4gJGUuYWx0S2V5IHx8ICRlLmN0cmxLZXkgfHwgJGUubWV0YUtleSB8fCAkZS5zaGlmdEtleTtcbiAgICAgICAgfVxuICAgIH0oKTtcbiAgICB2YXIgRGF0YXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIGtleXMsIG5hbWVHZW5lcmF0b3I7XG4gICAgICAgIGtleXMgPSB7XG4gICAgICAgICAgICB2YWw6IFwidHQtc2VsZWN0YWJsZS1kaXNwbGF5XCIsXG4gICAgICAgICAgICBvYmo6IFwidHQtc2VsZWN0YWJsZS1vYmplY3RcIlxuICAgICAgICB9O1xuICAgICAgICBuYW1lR2VuZXJhdG9yID0gXy5nZXRJZEdlbmVyYXRvcigpO1xuICAgICAgICBmdW5jdGlvbiBEYXRhc2V0KG8sIHd3dykge1xuICAgICAgICAgICAgbyA9IG8gfHwge307XG4gICAgICAgICAgICBvLnRlbXBsYXRlcyA9IG8udGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICAgICAgby50ZW1wbGF0ZXMubm90Rm91bmQgPSBvLnRlbXBsYXRlcy5ub3RGb3VuZCB8fCBvLnRlbXBsYXRlcy5lbXB0eTtcbiAgICAgICAgICAgIGlmICghby5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAkLmVycm9yKFwibWlzc2luZyBzb3VyY2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW8ubm9kZSkge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJtaXNzaW5nIG5vZGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoby5uYW1lICYmICFpc1ZhbGlkTmFtZShvLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgJC5lcnJvcihcImludmFsaWQgZGF0YXNldCBuYW1lOiBcIiArIG8ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3d3cubWl4aW4odGhpcyk7XG4gICAgICAgICAgICB0aGlzLmhpZ2hsaWdodCA9ICEhby5oaWdobGlnaHQ7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBvLm5hbWUgfHwgbmFtZUdlbmVyYXRvcigpO1xuICAgICAgICAgICAgdGhpcy5saW1pdCA9IG8ubGltaXQgfHwgNTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUZuID0gZ2V0RGlzcGxheUZuKG8uZGlzcGxheSB8fCBvLmRpc3BsYXlLZXkpO1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBnZXRUZW1wbGF0ZXMoby50ZW1wbGF0ZXMsIHRoaXMuZGlzcGxheUZuKTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gby5zb3VyY2UuX190dEFkYXB0ZXIgPyBvLnNvdXJjZS5fX3R0QWRhcHRlcigpIDogby5zb3VyY2U7XG4gICAgICAgICAgICB0aGlzLmFzeW5jID0gXy5pc1VuZGVmaW5lZChvLmFzeW5jKSA/IHRoaXMuc291cmNlLmxlbmd0aCA+IDIgOiAhIW8uYXN5bmM7XG4gICAgICAgICAgICB0aGlzLl9yZXNldExhc3RTdWdnZXN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLiRlbCA9ICQoby5ub2RlKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuZGF0YXNldCkuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmRhdGFzZXQgKyBcIi1cIiArIHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgRGF0YXNldC5leHRyYWN0RGF0YSA9IGZ1bmN0aW9uIGV4dHJhY3REYXRhKGVsKSB7XG4gICAgICAgICAgICB2YXIgJGVsID0gJChlbCk7XG4gICAgICAgICAgICBpZiAoJGVsLmRhdGEoa2V5cy5vYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsOiAkZWwuZGF0YShrZXlzLnZhbCkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgb2JqOiAkZWwuZGF0YShrZXlzLm9iaikgfHwgbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgICAgXy5taXhpbihEYXRhc2V0LnByb3RvdHlwZSwgRXZlbnRFbWl0dGVyLCB7XG4gICAgICAgICAgICBfb3ZlcndyaXRlOiBmdW5jdGlvbiBvdmVyd3JpdGUocXVlcnksIHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucyB8fCBbXTtcbiAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclN1Z2dlc3Rpb25zKHF1ZXJ5LCBzdWdnZXN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFzeW5jICYmIHRoaXMudGVtcGxhdGVzLnBlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyUGVuZGluZyhxdWVyeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5hc3luYyAmJiB0aGlzLnRlbXBsYXRlcy5ub3RGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJOb3RGb3VuZChxdWVyeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1wdHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKFwicmVuZGVyZWRcIiwgdGhpcy5uYW1lLCBzdWdnZXN0aW9ucywgZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIGFwcGVuZChxdWVyeSwgc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGggJiYgdGhpcy4kbGFzdFN1Z2dlc3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFN1Z2dlc3Rpb25zKHF1ZXJ5LCBzdWdnZXN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyU3VnZ2VzdGlvbnMocXVlcnksIHN1Z2dlc3Rpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLiRsYXN0U3VnZ2VzdGlvbi5sZW5ndGggJiYgdGhpcy50ZW1wbGF0ZXMubm90Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyTm90Rm91bmQocXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJyZW5kZXJlZFwiLCB0aGlzLm5hbWUsIHN1Z2dlc3Rpb25zLCB0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfcmVuZGVyU3VnZ2VzdGlvbnM6IGZ1bmN0aW9uIHJlbmRlclN1Z2dlc3Rpb25zKHF1ZXJ5LCBzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhciAkZnJhZ21lbnQ7XG4gICAgICAgICAgICAgICAgJGZyYWdtZW50ID0gdGhpcy5fZ2V0U3VnZ2VzdGlvbnNGcmFnbWVudChxdWVyeSwgc3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGxhc3RTdWdnZXN0aW9uID0gJGZyYWdtZW50LmNoaWxkcmVuKCkubGFzdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwoJGZyYWdtZW50KS5wcmVwZW5kKHRoaXMuX2dldEhlYWRlcihxdWVyeSwgc3VnZ2VzdGlvbnMpKS5hcHBlbmQodGhpcy5fZ2V0Rm9vdGVyKHF1ZXJ5LCBzdWdnZXN0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9hcHBlbmRTdWdnZXN0aW9uczogZnVuY3Rpb24gYXBwZW5kU3VnZ2VzdGlvbnMocXVlcnksIHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyICRmcmFnbWVudCwgJGxhc3RTdWdnZXN0aW9uO1xuICAgICAgICAgICAgICAgICRmcmFnbWVudCA9IHRoaXMuX2dldFN1Z2dlc3Rpb25zRnJhZ21lbnQocXVlcnksIHN1Z2dlc3Rpb25zKTtcbiAgICAgICAgICAgICAgICAkbGFzdFN1Z2dlc3Rpb24gPSAkZnJhZ21lbnQuY2hpbGRyZW4oKS5sYXN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy4kbGFzdFN1Z2dlc3Rpb24uYWZ0ZXIoJGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLiRsYXN0U3VnZ2VzdGlvbiA9ICRsYXN0U3VnZ2VzdGlvbjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfcmVuZGVyUGVuZGluZzogZnVuY3Rpb24gcmVuZGVyUGVuZGluZyhxdWVyeSkge1xuICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzLnBlbmRpbmc7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRMYXN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlICYmIHRoaXMuJGVsLmh0bWwodGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMubmFtZVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfcmVuZGVyTm90Rm91bmQ6IGZ1bmN0aW9uIHJlbmRlck5vdEZvdW5kKHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMubm90Rm91bmQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRMYXN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlICYmIHRoaXMuJGVsLmh0bWwodGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMubmFtZVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfZW1wdHk6IGZ1bmN0aW9uIGVtcHR5KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRMYXN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9nZXRTdWdnZXN0aW9uc0ZyYWdtZW50OiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uc0ZyYWdtZW50KHF1ZXJ5LCBzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgZnJhZ21lbnQ7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICAgICAgXy5lYWNoKHN1Z2dlc3Rpb25zLCBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uTm9kZShzdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkZWwsIGNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSB0aGF0Ll9pbmplY3RRdWVyeShxdWVyeSwgc3VnZ2VzdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICRlbCA9ICQodGhhdC50ZW1wbGF0ZXMuc3VnZ2VzdGlvbihjb250ZXh0KSkuZGF0YShrZXlzLm9iaiwgc3VnZ2VzdGlvbikuZGF0YShrZXlzLnZhbCwgdGhhdC5kaXNwbGF5Rm4oc3VnZ2VzdGlvbikpLmFkZENsYXNzKHRoYXQuY2xhc3Nlcy5zdWdnZXN0aW9uICsgXCIgXCIgKyB0aGF0LmNsYXNzZXMuc2VsZWN0YWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCRlbFswXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQgJiYgaGlnaGxpZ2h0KHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0aGlzLmNsYXNzZXMuaGlnaGxpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBub2RlOiBmcmFnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogcXVlcnlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJChmcmFnbWVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2dldEZvb3RlcjogZnVuY3Rpb24gZ2V0Rm9vdGVyKHF1ZXJ5LCBzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcy5mb290ZXIgPyB0aGlzLnRlbXBsYXRlcy5mb290ZXIoe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldDogdGhpcy5uYW1lXG4gICAgICAgICAgICAgICAgfSkgOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9nZXRIZWFkZXI6IGZ1bmN0aW9uIGdldEhlYWRlcihxdWVyeSwgc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMuaGVhZGVyID8gdGhpcy50ZW1wbGF0ZXMuaGVhZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMubmFtZVxuICAgICAgICAgICAgICAgIH0pIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfcmVzZXRMYXN0U3VnZ2VzdGlvbjogZnVuY3Rpb24gcmVzZXRMYXN0U3VnZ2VzdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRsYXN0U3VnZ2VzdGlvbiA9ICQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfaW5qZWN0UXVlcnk6IGZ1bmN0aW9uIGluamVjdFF1ZXJ5KHF1ZXJ5LCBvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXy5pc09iamVjdChvYmopID8gXy5taXhpbih7XG4gICAgICAgICAgICAgICAgICAgIF9xdWVyeTogcXVlcnlcbiAgICAgICAgICAgICAgICB9LCBvYmopIDogb2JqO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBjYW5jZWxlZCA9IGZhbHNlLCBzeW5jQ2FsbGVkID0gZmFsc2UsIHJlbmRlcmVkID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuY2FuY2VsID0gJC5ub29wO1xuICAgICAgICAgICAgICAgICAgICB0aGF0LmFzeW5jICYmIHRoYXQudHJpZ2dlcihcImFzeW5jQ2FuY2VsZWRcIiwgcXVlcnkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2UocXVlcnksIHN5bmMsIGFzeW5jKTtcbiAgICAgICAgICAgICAgICAhc3luY0NhbGxlZCAmJiBzeW5jKFtdKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzeW5jKHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzeW5jQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3luY0NhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gKHN1Z2dlc3Rpb25zIHx8IFtdKS5zbGljZSgwLCB0aGF0LmxpbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWQgPSBzdWdnZXN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX292ZXJ3cml0ZShxdWVyeSwgc3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyZWQgPCB0aGF0LmxpbWl0ICYmIHRoYXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQudHJpZ2dlcihcImFzeW5jUmVxdWVzdGVkXCIsIHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3luYyhzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGVkICYmIHJlbmRlcmVkIDwgdGhhdC5saW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5jYW5jZWwgPSAkLm5vb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCArPSBzdWdnZXN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9hcHBlbmQocXVlcnksIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIHRoYXQubGltaXQgLSByZW5kZXJlZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5hc3luYyAmJiB0aGF0LnRyaWdnZXIoXCJhc3luY1JlY2VpdmVkXCIsIHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYW5jZWw6ICQubm9vcCxcbiAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKFwiY2xlYXJlZFwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0VtcHR5OiBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRlbC5pcyhcIjplbXB0eVwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsID0gJChcIjxkaXY+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIERhdGFzZXQ7XG4gICAgICAgIGZ1bmN0aW9uIGdldERpc3BsYXlGbihkaXNwbGF5KSB7XG4gICAgICAgICAgICBkaXNwbGF5ID0gZGlzcGxheSB8fCBfLnN0cmluZ2lmeTtcbiAgICAgICAgICAgIHJldHVybiBfLmlzRnVuY3Rpb24oZGlzcGxheSkgPyBkaXNwbGF5IDogZGlzcGxheUZuO1xuICAgICAgICAgICAgZnVuY3Rpb24gZGlzcGxheUZuKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbZGlzcGxheV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0VGVtcGxhdGVzKHRlbXBsYXRlcywgZGlzcGxheUZuKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5vdEZvdW5kOiB0ZW1wbGF0ZXMubm90Rm91bmQgJiYgXy50ZW1wbGF0aWZ5KHRlbXBsYXRlcy5ub3RGb3VuZCksXG4gICAgICAgICAgICAgICAgcGVuZGluZzogdGVtcGxhdGVzLnBlbmRpbmcgJiYgXy50ZW1wbGF0aWZ5KHRlbXBsYXRlcy5wZW5kaW5nKSxcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHRlbXBsYXRlcy5oZWFkZXIgJiYgXy50ZW1wbGF0aWZ5KHRlbXBsYXRlcy5oZWFkZXIpLFxuICAgICAgICAgICAgICAgIGZvb3RlcjogdGVtcGxhdGVzLmZvb3RlciAmJiBfLnRlbXBsYXRpZnkodGVtcGxhdGVzLmZvb3RlciksXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbjogdGVtcGxhdGVzLnN1Z2dlc3Rpb24gfHwgc3VnZ2VzdGlvblRlbXBsYXRlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZnVuY3Rpb24gc3VnZ2VzdGlvblRlbXBsYXRlKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJChcIjxkaXY+XCIpLnRleHQoZGlzcGxheUZuKGNvbnRleHQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1ZhbGlkTmFtZShzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiAvXltfYS16QS1aMC05LV0rJC8udGVzdChzdHIpO1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIHZhciBNZW51ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBNZW51KG8sIHd3dykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgbyA9IG8gfHwge307XG4gICAgICAgICAgICBpZiAoIW8ubm9kZSkge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJub2RlIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3d3Lm1peGluKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy4kbm9kZSA9ICQoby5ub2RlKTtcbiAgICAgICAgICAgIHRoaXMucXVlcnkgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRhc2V0cyA9IF8ubWFwKG8uZGF0YXNldHMsIGluaXRpYWxpemVEYXRhc2V0KTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGluaXRpYWxpemVEYXRhc2V0KG9EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGF0LiRub2RlLmZpbmQob0RhdGFzZXQubm9kZSkuZmlyc3QoKTtcbiAgICAgICAgICAgICAgICBvRGF0YXNldC5ub2RlID0gbm9kZS5sZW5ndGggPyBub2RlIDogJChcIjxkaXY+XCIpLmFwcGVuZFRvKHRoYXQuJG5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0YXNldChvRGF0YXNldCwgd3d3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfLm1peGluKE1lbnUucHJvdG90eXBlLCBFdmVudEVtaXR0ZXIsIHtcbiAgICAgICAgICAgIF9vblNlbGVjdGFibGVDbGljazogZnVuY3Rpb24gb25TZWxlY3RhYmxlQ2xpY2soJGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJzZWxlY3RhYmxlQ2xpY2tlZFwiLCAkKCRlLmN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25SZW5kZXJlZDogZnVuY3Rpb24gb25SZW5kZXJlZCh0eXBlLCBkYXRhc2V0LCBzdWdnZXN0aW9ucywgYXN5bmMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLnRvZ2dsZUNsYXNzKHRoaXMuY2xhc3Nlcy5lbXB0eSwgdGhpcy5fYWxsRGF0YXNldHNFbXB0eSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJkYXRhc2V0UmVuZGVyZWRcIiwgZGF0YXNldCwgc3VnZ2VzdGlvbnMsIGFzeW5jKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25DbGVhcmVkOiBmdW5jdGlvbiBvbkNsZWFyZWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS50b2dnbGVDbGFzcyh0aGlzLmNsYXNzZXMuZW1wdHksIHRoaXMuX2FsbERhdGFzZXRzRW1wdHkoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKFwiZGF0YXNldENsZWFyZWRcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3Byb3BhZ2F0ZTogZnVuY3Rpb24gcHJvcGFnYXRlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9hbGxEYXRhc2V0c0VtcHR5OiBmdW5jdGlvbiBhbGxEYXRhc2V0c0VtcHR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmV2ZXJ5KHRoaXMuZGF0YXNldHMsIGlzRGF0YXNldEVtcHR5KTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0RhdGFzZXRFbXB0eShkYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhc2V0LmlzRW1wdHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2dldFNlbGVjdGFibGVzOiBmdW5jdGlvbiBnZXRTZWxlY3RhYmxlcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kbm9kZS5maW5kKHRoaXMuc2VsZWN0b3JzLnNlbGVjdGFibGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9yZW1vdmVDdXJzb3I6IGZ1bmN0aW9uIF9yZW1vdmVDdXJzb3IoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlID0gdGhpcy5nZXRBY3RpdmVTZWxlY3RhYmxlKCk7XG4gICAgICAgICAgICAgICAgJHNlbGVjdGFibGUgJiYgJHNlbGVjdGFibGUucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmN1cnNvcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2Vuc3VyZVZpc2libGU6IGZ1bmN0aW9uIGVuc3VyZVZpc2libGUoJGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsVG9wLCBlbEJvdHRvbSwgbm9kZVNjcm9sbFRvcCwgbm9kZUhlaWdodDtcbiAgICAgICAgICAgICAgICBlbFRvcCA9ICRlbC5wb3NpdGlvbigpLnRvcDtcbiAgICAgICAgICAgICAgICBlbEJvdHRvbSA9IGVsVG9wICsgJGVsLm91dGVySGVpZ2h0KHRydWUpO1xuICAgICAgICAgICAgICAgIG5vZGVTY3JvbGxUb3AgPSB0aGlzLiRub2RlLnNjcm9sbFRvcCgpO1xuICAgICAgICAgICAgICAgIG5vZGVIZWlnaHQgPSB0aGlzLiRub2RlLmhlaWdodCgpICsgcGFyc2VJbnQodGhpcy4kbm9kZS5jc3MoXCJwYWRkaW5nVG9wXCIpLCAxMCkgKyBwYXJzZUludCh0aGlzLiRub2RlLmNzcyhcInBhZGRpbmdCb3R0b21cIiksIDEwKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxUb3AgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUuc2Nyb2xsVG9wKG5vZGVTY3JvbGxUb3AgKyBlbFRvcCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlSGVpZ2h0IDwgZWxCb3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5zY3JvbGxUb3Aobm9kZVNjcm9sbFRvcCArIChlbEJvdHRvbSAtIG5vZGVIZWlnaHQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmluZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBvblNlbGVjdGFibGVDbGljaztcbiAgICAgICAgICAgICAgICBvblNlbGVjdGFibGVDbGljayA9IF8uYmluZCh0aGlzLl9vblNlbGVjdGFibGVDbGljaywgdGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5vbihcImNsaWNrLnR0XCIsIHRoaXMuc2VsZWN0b3JzLnNlbGVjdGFibGUsIG9uU2VsZWN0YWJsZUNsaWNrKTtcbiAgICAgICAgICAgICAgICBfLmVhY2godGhpcy5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0Lm9uU3luYyhcImFzeW5jUmVxdWVzdGVkXCIsIHRoYXQuX3Byb3BhZ2F0ZSwgdGhhdCkub25TeW5jKFwiYXN5bmNDYW5jZWxlZFwiLCB0aGF0Ll9wcm9wYWdhdGUsIHRoYXQpLm9uU3luYyhcImFzeW5jUmVjZWl2ZWRcIiwgdGhhdC5fcHJvcGFnYXRlLCB0aGF0KS5vblN5bmMoXCJyZW5kZXJlZFwiLCB0aGF0Ll9vblJlbmRlcmVkLCB0aGF0KS5vblN5bmMoXCJjbGVhcmVkXCIsIHRoYXQuX29uQ2xlYXJlZCwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNPcGVuOiBmdW5jdGlvbiBpc09wZW4oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG5vZGUuaGFzQ2xhc3ModGhpcy5jbGFzc2VzLm9wZW4pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMub3Blbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLm9wZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUN1cnNvcigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldExhbmd1YWdlRGlyZWN0aW9uOiBmdW5jdGlvbiBzZXRMYW5ndWFnZURpcmVjdGlvbihkaXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLmF0dHIoXCJkaXJcIiwgZGlyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3RhYmxlUmVsYXRpdmVUb0N1cnNvcjogZnVuY3Rpb24gc2VsZWN0YWJsZVJlbGF0aXZlVG9DdXJzb3IoZGVsdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGVjdGFibGVzLCAkb2xkQ3Vyc29yLCBvbGRJbmRleCwgbmV3SW5kZXg7XG4gICAgICAgICAgICAgICAgJG9sZEN1cnNvciA9IHRoaXMuZ2V0QWN0aXZlU2VsZWN0YWJsZSgpO1xuICAgICAgICAgICAgICAgICRzZWxlY3RhYmxlcyA9IHRoaXMuX2dldFNlbGVjdGFibGVzKCk7XG4gICAgICAgICAgICAgICAgb2xkSW5kZXggPSAkb2xkQ3Vyc29yID8gJHNlbGVjdGFibGVzLmluZGV4KCRvbGRDdXJzb3IpIDogLTE7XG4gICAgICAgICAgICAgICAgbmV3SW5kZXggPSBvbGRJbmRleCArIGRlbHRhO1xuICAgICAgICAgICAgICAgIG5ld0luZGV4ID0gKG5ld0luZGV4ICsgMSkgJSAoJHNlbGVjdGFibGVzLmxlbmd0aCArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBuZXdJbmRleCA9IG5ld0luZGV4IDwgLTEgPyAkc2VsZWN0YWJsZXMubGVuZ3RoIC0gMSA6IG5ld0luZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdJbmRleCA9PT0gLTEgPyBudWxsIDogJHNlbGVjdGFibGVzLmVxKG5ld0luZGV4KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRDdXJzb3I6IGZ1bmN0aW9uIHNldEN1cnNvcigkc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUN1cnNvcigpO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0YWJsZSA9ICRzZWxlY3RhYmxlICYmICRzZWxlY3RhYmxlLmZpcnN0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGVjdGFibGUuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmN1cnNvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVZpc2libGUoJHNlbGVjdGFibGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRTZWxlY3RhYmxlRGF0YTogZnVuY3Rpb24gZ2V0U2VsZWN0YWJsZURhdGEoJGVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICRlbCAmJiAkZWwubGVuZ3RoID8gRGF0YXNldC5leHRyYWN0RGF0YSgkZWwpIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRBY3RpdmVTZWxlY3RhYmxlOiBmdW5jdGlvbiBnZXRBY3RpdmVTZWxlY3RhYmxlKCkge1xuICAgICAgICAgICAgICAgIHZhciAkc2VsZWN0YWJsZSA9IHRoaXMuX2dldFNlbGVjdGFibGVzKCkuZmlsdGVyKHRoaXMuc2VsZWN0b3JzLmN1cnNvcikuZmlyc3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJHNlbGVjdGFibGUubGVuZ3RoID8gJHNlbGVjdGFibGUgOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFRvcFNlbGVjdGFibGU6IGZ1bmN0aW9uIGdldFRvcFNlbGVjdGFibGUoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlID0gdGhpcy5fZ2V0U2VsZWN0YWJsZXMoKS5maXJzdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2VsZWN0YWJsZS5sZW5ndGggPyAkc2VsZWN0YWJsZSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUocXVlcnkpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNWYWxpZFVwZGF0ZSA9IHF1ZXJ5ICE9PSB0aGlzLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSBxdWVyeTtcbiAgICAgICAgICAgICAgICAgICAgXy5lYWNoKHRoaXMuZGF0YXNldHMsIHVwZGF0ZURhdGFzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFVwZGF0ZTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0KGRhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC51cGRhdGUocXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24gZW1wdHkoKSB7XG4gICAgICAgICAgICAgICAgXy5lYWNoKHRoaXMuZGF0YXNldHMsIGNsZWFyRGF0YXNldCk7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuZW1wdHkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNsZWFyRGF0YXNldChkYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLm9mZihcIi50dFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlID0gJChcIjxkaXY+XCIpO1xuICAgICAgICAgICAgICAgIF8uZWFjaCh0aGlzLmRhdGFzZXRzLCBkZXN0cm95RGF0YXNldCk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVzdHJveURhdGFzZXQoZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gTWVudTtcbiAgICB9KCk7XG4gICAgdmFyIERlZmF1bHRNZW51ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgcyA9IE1lbnUucHJvdG90eXBlO1xuICAgICAgICBmdW5jdGlvbiBEZWZhdWx0TWVudSgpIHtcbiAgICAgICAgICAgIE1lbnUuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcbiAgICAgICAgfVxuICAgICAgICBfLm1peGluKERlZmF1bHRNZW51LnByb3RvdHlwZSwgTWVudS5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgICAgICAgICAgICAgIXRoaXMuX2FsbERhdGFzZXRzRW1wdHkoKSAmJiB0aGlzLl9zaG93KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMub3Blbi5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMuY2xvc2UuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25SZW5kZXJlZDogZnVuY3Rpb24gb25SZW5kZXJlZCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYWxsRGF0YXNldHNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbigpICYmIHRoaXMuX3Nob3coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMuX29uUmVuZGVyZWQuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25DbGVhcmVkOiBmdW5jdGlvbiBvbkNsZWFyZWQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2FsbERhdGFzZXRzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaWRlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW4oKSAmJiB0aGlzLl9zaG93KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzLl9vbkNsZWFyZWQuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRMYW5ndWFnZURpcmVjdGlvbjogZnVuY3Rpb24gc2V0TGFuZ3VhZ2VEaXJlY3Rpb24oZGlyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5jc3MoZGlyID09PSBcImx0clwiID8gdGhpcy5jc3MubHRyIDogdGhpcy5jc3MucnRsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcy5zZXRMYW5ndWFnZURpcmVjdGlvbi5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9oaWRlOiBmdW5jdGlvbiBoaWRlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUuaGlkZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9zaG93OiBmdW5jdGlvbiBzaG93KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUuY3NzKFwiZGlzcGxheVwiLCBcImJsb2NrXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRNZW51O1xuICAgIH0oKTtcbiAgICB2YXIgVHlwZWFoZWFkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBUeXBlYWhlYWQobywgd3d3KSB7XG4gICAgICAgICAgICB2YXIgb25Gb2N1c2VkLCBvbkJsdXJyZWQsIG9uRW50ZXJLZXllZCwgb25UYWJLZXllZCwgb25Fc2NLZXllZCwgb25VcEtleWVkLCBvbkRvd25LZXllZCwgb25MZWZ0S2V5ZWQsIG9uUmlnaHRLZXllZCwgb25RdWVyeUNoYW5nZWQsIG9uV2hpdGVzcGFjZUNoYW5nZWQ7XG4gICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgIGlmICghby5pbnB1dCkge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJtaXNzaW5nIGlucHV0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvLm1lbnUpIHtcbiAgICAgICAgICAgICAgICAkLmVycm9yKFwibWlzc2luZyBtZW51XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvLmV2ZW50QnVzKSB7XG4gICAgICAgICAgICAgICAgJC5lcnJvcihcIm1pc3NpbmcgZXZlbnQgYnVzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3d3Lm1peGluKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cyA9IG8uZXZlbnRCdXM7XG4gICAgICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IF8uaXNOdW1iZXIoby5taW5MZW5ndGgpID8gby5taW5MZW5ndGggOiAxO1xuICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG8uaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLm1lbnUgPSBvLm1lbnU7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuaGFzRm9jdXMoKSAmJiB0aGlzLmFjdGl2YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmRpciA9IHRoaXMuaW5wdXQuZ2V0TGFuZ0RpcigpO1xuICAgICAgICAgICAgdGhpcy5faGFja3MoKTtcbiAgICAgICAgICAgIHRoaXMubWVudS5iaW5kKCkub25TeW5jKFwic2VsZWN0YWJsZUNsaWNrZWRcIiwgdGhpcy5fb25TZWxlY3RhYmxlQ2xpY2tlZCwgdGhpcykub25TeW5jKFwiYXN5bmNSZXF1ZXN0ZWRcIiwgdGhpcy5fb25Bc3luY1JlcXVlc3RlZCwgdGhpcykub25TeW5jKFwiYXN5bmNDYW5jZWxlZFwiLCB0aGlzLl9vbkFzeW5jQ2FuY2VsZWQsIHRoaXMpLm9uU3luYyhcImFzeW5jUmVjZWl2ZWRcIiwgdGhpcy5fb25Bc3luY1JlY2VpdmVkLCB0aGlzKS5vblN5bmMoXCJkYXRhc2V0UmVuZGVyZWRcIiwgdGhpcy5fb25EYXRhc2V0UmVuZGVyZWQsIHRoaXMpLm9uU3luYyhcImRhdGFzZXRDbGVhcmVkXCIsIHRoaXMuX29uRGF0YXNldENsZWFyZWQsIHRoaXMpO1xuICAgICAgICAgICAgb25Gb2N1c2VkID0gYyh0aGlzLCBcImFjdGl2YXRlXCIsIFwib3BlblwiLCBcIl9vbkZvY3VzZWRcIik7XG4gICAgICAgICAgICBvbkJsdXJyZWQgPSBjKHRoaXMsIFwiZGVhY3RpdmF0ZVwiLCBcIl9vbkJsdXJyZWRcIik7XG4gICAgICAgICAgICBvbkVudGVyS2V5ZWQgPSBjKHRoaXMsIFwiaXNBY3RpdmVcIiwgXCJpc09wZW5cIiwgXCJfb25FbnRlcktleWVkXCIpO1xuICAgICAgICAgICAgb25UYWJLZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcImlzT3BlblwiLCBcIl9vblRhYktleWVkXCIpO1xuICAgICAgICAgICAgb25Fc2NLZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcIl9vbkVzY0tleWVkXCIpO1xuICAgICAgICAgICAgb25VcEtleWVkID0gYyh0aGlzLCBcImlzQWN0aXZlXCIsIFwib3BlblwiLCBcIl9vblVwS2V5ZWRcIik7XG4gICAgICAgICAgICBvbkRvd25LZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcIm9wZW5cIiwgXCJfb25Eb3duS2V5ZWRcIik7XG4gICAgICAgICAgICBvbkxlZnRLZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcImlzT3BlblwiLCBcIl9vbkxlZnRLZXllZFwiKTtcbiAgICAgICAgICAgIG9uUmlnaHRLZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcImlzT3BlblwiLCBcIl9vblJpZ2h0S2V5ZWRcIik7XG4gICAgICAgICAgICBvblF1ZXJ5Q2hhbmdlZCA9IGModGhpcywgXCJfb3BlbklmQWN0aXZlXCIsIFwiX29uUXVlcnlDaGFuZ2VkXCIpO1xuICAgICAgICAgICAgb25XaGl0ZXNwYWNlQ2hhbmdlZCA9IGModGhpcywgXCJfb3BlbklmQWN0aXZlXCIsIFwiX29uV2hpdGVzcGFjZUNoYW5nZWRcIik7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmJpbmQoKS5vblN5bmMoXCJmb2N1c2VkXCIsIG9uRm9jdXNlZCwgdGhpcykub25TeW5jKFwiYmx1cnJlZFwiLCBvbkJsdXJyZWQsIHRoaXMpLm9uU3luYyhcImVudGVyS2V5ZWRcIiwgb25FbnRlcktleWVkLCB0aGlzKS5vblN5bmMoXCJ0YWJLZXllZFwiLCBvblRhYktleWVkLCB0aGlzKS5vblN5bmMoXCJlc2NLZXllZFwiLCBvbkVzY0tleWVkLCB0aGlzKS5vblN5bmMoXCJ1cEtleWVkXCIsIG9uVXBLZXllZCwgdGhpcykub25TeW5jKFwiZG93bktleWVkXCIsIG9uRG93bktleWVkLCB0aGlzKS5vblN5bmMoXCJsZWZ0S2V5ZWRcIiwgb25MZWZ0S2V5ZWQsIHRoaXMpLm9uU3luYyhcInJpZ2h0S2V5ZWRcIiwgb25SaWdodEtleWVkLCB0aGlzKS5vblN5bmMoXCJxdWVyeUNoYW5nZWRcIiwgb25RdWVyeUNoYW5nZWQsIHRoaXMpLm9uU3luYyhcIndoaXRlc3BhY2VDaGFuZ2VkXCIsIG9uV2hpdGVzcGFjZUNoYW5nZWQsIHRoaXMpLm9uU3luYyhcImxhbmdEaXJDaGFuZ2VkXCIsIHRoaXMuX29uTGFuZ0RpckNoYW5nZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oVHlwZWFoZWFkLnByb3RvdHlwZSwge1xuICAgICAgICAgICAgX2hhY2tzOiBmdW5jdGlvbiBoYWNrcygpIHtcbiAgICAgICAgICAgICAgICB2YXIgJGlucHV0LCAkbWVudTtcbiAgICAgICAgICAgICAgICAkaW5wdXQgPSB0aGlzLmlucHV0LiRpbnB1dCB8fCAkKFwiPGRpdj5cIik7XG4gICAgICAgICAgICAgICAgJG1lbnUgPSB0aGlzLm1lbnUuJG5vZGUgfHwgJChcIjxkaXY+XCIpO1xuICAgICAgICAgICAgICAgICRpbnB1dC5vbihcImJsdXIudHRcIiwgZnVuY3Rpb24oJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSwgaXNBY3RpdmUsIGhhc0FjdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmUgPSAkbWVudS5pcyhhY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICBoYXNBY3RpdmUgPSAkbWVudS5oYXMoYWN0aXZlKS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc01zaWUoKSAmJiAoaXNBY3RpdmUgfHwgaGFzQWN0aXZlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5kZWZlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJG1lbnUub24oXCJtb3VzZWRvd24udHRcIiwgZnVuY3Rpb24oJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25TZWxlY3RhYmxlQ2xpY2tlZDogZnVuY3Rpb24gb25TZWxlY3RhYmxlQ2xpY2tlZCh0eXBlLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgkZWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkRhdGFzZXRDbGVhcmVkOiBmdW5jdGlvbiBvbkRhdGFzZXRDbGVhcmVkKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25EYXRhc2V0UmVuZGVyZWQ6IGZ1bmN0aW9uIG9uRGF0YXNldFJlbmRlcmVkKHR5cGUsIGRhdGFzZXQsIHN1Z2dlc3Rpb25zLCBhc3luYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJyZW5kZXJcIiwgc3VnZ2VzdGlvbnMsIGFzeW5jLCBkYXRhc2V0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25Bc3luY1JlcXVlc3RlZDogZnVuY3Rpb24gb25Bc3luY1JlcXVlc3RlZCh0eXBlLCBkYXRhc2V0LCBxdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcImFzeW5jcmVxdWVzdFwiLCBxdWVyeSwgZGF0YXNldCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uQXN5bmNDYW5jZWxlZDogZnVuY3Rpb24gb25Bc3luY0NhbmNlbGVkKHR5cGUsIGRhdGFzZXQsIHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwiYXN5bmNjYW5jZWxcIiwgcXVlcnksIGRhdGFzZXQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkFzeW5jUmVjZWl2ZWQ6IGZ1bmN0aW9uIG9uQXN5bmNSZWNlaXZlZCh0eXBlLCBkYXRhc2V0LCBxdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcImFzeW5jcmVjZWl2ZVwiLCBxdWVyeSwgZGF0YXNldCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uRm9jdXNlZDogZnVuY3Rpb24gb25Gb2N1c2VkKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbkxlbmd0aE1ldCgpICYmIHRoaXMubWVudS51cGRhdGUodGhpcy5pbnB1dC5nZXRRdWVyeSgpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25CbHVycmVkOiBmdW5jdGlvbiBvbkJsdXJyZWQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQuaGFzUXVlcnlDaGFuZ2VkU2luY2VMYXN0Rm9jdXMoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJjaGFuZ2VcIiwgdGhpcy5pbnB1dC5nZXRRdWVyeSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uRW50ZXJLZXllZDogZnVuY3Rpb24gb25FbnRlcktleWVkKHR5cGUsICRlKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0YWJsZSA9IHRoaXMubWVudS5nZXRBY3RpdmVTZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJHNlbGVjdGFibGUpICYmICRlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vblRhYktleWVkOiBmdW5jdGlvbiBvblRhYktleWVkKHR5cGUsICRlKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0YWJsZSA9IHRoaXMubWVudS5nZXRBY3RpdmVTZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJHNlbGVjdGFibGUpICYmICRlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkc2VsZWN0YWJsZSA9IHRoaXMubWVudS5nZXRUb3BTZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGUoJHNlbGVjdGFibGUpICYmICRlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkVzY0tleWVkOiBmdW5jdGlvbiBvbkVzY0tleWVkKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25VcEtleWVkOiBmdW5jdGlvbiBvblVwS2V5ZWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yKC0xKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25Eb3duS2V5ZWQ6IGZ1bmN0aW9uIG9uRG93bktleWVkKCkge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvcigrMSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uTGVmdEtleWVkOiBmdW5jdGlvbiBvbkxlZnRLZXllZCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIgPT09IFwicnRsXCIgJiYgdGhpcy5pbnB1dC5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGUodGhpcy5tZW51LmdldFRvcFNlbGVjdGFibGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vblJpZ2h0S2V5ZWQ6IGZ1bmN0aW9uIG9uUmlnaHRLZXllZCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIgPT09IFwibHRyXCIgJiYgdGhpcy5pbnB1dC5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGUodGhpcy5tZW51LmdldFRvcFNlbGVjdGFibGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vblF1ZXJ5Q2hhbmdlZDogZnVuY3Rpb24gb25RdWVyeUNoYW5nZWQoZSwgcXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5MZW5ndGhNZXQocXVlcnkpID8gdGhpcy5tZW51LnVwZGF0ZShxdWVyeSkgOiB0aGlzLm1lbnUuZW1wdHkoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25XaGl0ZXNwYWNlQ2hhbmdlZDogZnVuY3Rpb24gb25XaGl0ZXNwYWNlQ2hhbmdlZCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVIaW50KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uTGFuZ0RpckNoYW5nZWQ6IGZ1bmN0aW9uIG9uTGFuZ0RpckNoYW5nZWQoZSwgZGlyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlyICE9PSBkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXIgPSBkaXI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudS5zZXRMYW5ndWFnZURpcmVjdGlvbihkaXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb3BlbklmQWN0aXZlOiBmdW5jdGlvbiBvcGVuSWZBY3RpdmUoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZSgpICYmIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9taW5MZW5ndGhNZXQ6IGZ1bmN0aW9uIG1pbkxlbmd0aE1ldChxdWVyeSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gXy5pc1N0cmluZyhxdWVyeSkgPyBxdWVyeSA6IHRoaXMuaW5wdXQuZ2V0UXVlcnkoKSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeS5sZW5ndGggPj0gdGhpcy5taW5MZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3VwZGF0ZUhpbnQ6IGZ1bmN0aW9uIHVwZGF0ZUhpbnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlLCBkYXRhLCB2YWwsIHF1ZXJ5LCBlc2NhcGVkUXVlcnksIGZyb250TWF0Y2hSZWdFeCwgbWF0Y2g7XG4gICAgICAgICAgICAgICAgJHNlbGVjdGFibGUgPSB0aGlzLm1lbnUuZ2V0VG9wU2VsZWN0YWJsZSgpO1xuICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLm1lbnUuZ2V0U2VsZWN0YWJsZURhdGEoJHNlbGVjdGFibGUpO1xuICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuaW5wdXQuZ2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmICFfLmlzQmxhbmtTdHJpbmcodmFsKSAmJiAhdGhpcy5pbnB1dC5oYXNPdmVyZmxvdygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gSW5wdXQubm9ybWFsaXplUXVlcnkodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBlZFF1ZXJ5ID0gXy5lc2NhcGVSZWdFeENoYXJzKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgZnJvbnRNYXRjaFJlZ0V4ID0gbmV3IFJlZ0V4cChcIl4oPzpcIiArIGVzY2FwZWRRdWVyeSArIFwiKSguKyQpXCIsIFwiaVwiKTtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmcm9udE1hdGNoUmVnRXguZXhlYyhkYXRhLnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoICYmIHRoaXMuaW5wdXQuc2V0SGludCh2YWwgKyBtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5jbGVhckhpbnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNFbmFibGVkOiBmdW5jdGlvbiBpc0VuYWJsZWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5hYmxlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY3RpdmF0ZTogZnVuY3Rpb24gYWN0aXZhdGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRW5hYmxlZCgpIHx8IHRoaXMuZXZlbnRCdXMuYmVmb3JlKFwiYWN0aXZlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlYWN0aXZhdGU6IGZ1bmN0aW9uIGRlYWN0aXZhdGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50QnVzLmJlZm9yZShcImlkbGVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwiaWRsZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogZnVuY3Rpb24gaXNPcGVuKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbnUuaXNPcGVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkgJiYgIXRoaXMuZXZlbnRCdXMuYmVmb3JlKFwib3BlblwiKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnUub3BlbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVIaW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcIm9wZW5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzT3BlbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4oKSAmJiAhdGhpcy5ldmVudEJ1cy5iZWZvcmUoXCJjbG9zZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnUuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5jbGVhckhpbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5yZXNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwiY2xvc2VcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc09wZW4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRWYWw6IGZ1bmN0aW9uIHNldFZhbCh2YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldFF1ZXJ5KF8udG9TdHIodmFsKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0VmFsOiBmdW5jdGlvbiBnZXRWYWwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuZ2V0UXVlcnkoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdCgkc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5tZW51LmdldFNlbGVjdGFibGVEYXRhKCRzZWxlY3RhYmxlKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiAhdGhpcy5ldmVudEJ1cy5iZWZvcmUoXCJzZWxlY3RcIiwgZGF0YS5vYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuc2V0UXVlcnkoZGF0YS52YWwsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJzZWxlY3RcIiwgZGF0YS5vYmopO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBmdW5jdGlvbiBhdXRvY29tcGxldGUoJHNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcXVlcnksIGRhdGEsIGlzVmFsaWQ7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmlucHV0LmdldFF1ZXJ5KCk7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMubWVudS5nZXRTZWxlY3RhYmxlRGF0YSgkc2VsZWN0YWJsZSk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IGRhdGEgJiYgcXVlcnkgIT09IGRhdGEudmFsO1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmICF0aGlzLmV2ZW50QnVzLmJlZm9yZShcImF1dG9jb21wbGV0ZVwiLCBkYXRhLm9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5zZXRRdWVyeShkYXRhLnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcImF1dG9jb21wbGV0ZVwiLCBkYXRhLm9iaik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW92ZUN1cnNvcjogZnVuY3Rpb24gbW92ZUN1cnNvcihkZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciBxdWVyeSwgJGNhbmRpZGF0ZSwgZGF0YSwgcGF5bG9hZCwgY2FuY2VsTW92ZTtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHRoaXMuaW5wdXQuZ2V0UXVlcnkoKTtcbiAgICAgICAgICAgICAgICAkY2FuZGlkYXRlID0gdGhpcy5tZW51LnNlbGVjdGFibGVSZWxhdGl2ZVRvQ3Vyc29yKGRlbHRhKTtcbiAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5tZW51LmdldFNlbGVjdGFibGVEYXRhKCRjYW5kaWRhdGUpO1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBkYXRhID8gZGF0YS5vYmogOiBudWxsO1xuICAgICAgICAgICAgICAgIGNhbmNlbE1vdmUgPSB0aGlzLl9taW5MZW5ndGhNZXQoKSAmJiB0aGlzLm1lbnUudXBkYXRlKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbE1vdmUgJiYgIXRoaXMuZXZlbnRCdXMuYmVmb3JlKFwiY3Vyc29yY2hhbmdlXCIsIHBheWxvYWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudS5zZXRDdXJzb3IoJGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldElucHV0VmFsdWUoZGF0YS52YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5yZXNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJjdXJzb3JjaGFuZ2VcIiwgcGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnUuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFR5cGVhaGVhZDtcbiAgICAgICAgZnVuY3Rpb24gYyhjdHgpIHtcbiAgICAgICAgICAgIHZhciBtZXRob2RzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIF8uZWFjaChtZXRob2RzLCBmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eFttZXRob2RdLmFwcGx5KGN0eCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBvbGQsIGtleXMsIG1ldGhvZHM7XG4gICAgICAgIG9sZCA9ICQuZm4udHlwZWFoZWFkO1xuICAgICAgICBrZXlzID0ge1xuICAgICAgICAgICAgd3d3OiBcInR0LXd3d1wiLFxuICAgICAgICAgICAgYXR0cnM6IFwidHQtYXR0cnNcIixcbiAgICAgICAgICAgIHR5cGVhaGVhZDogXCJ0dC10eXBlYWhlYWRcIlxuICAgICAgICB9O1xuICAgICAgICBtZXRob2RzID0ge1xuICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZShvLCBkYXRhc2V0cykge1xuICAgICAgICAgICAgICAgIHZhciB3d3c7XG4gICAgICAgICAgICAgICAgZGF0YXNldHMgPSBfLmlzQXJyYXkoZGF0YXNldHMpID8gZGF0YXNldHMgOiBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgbyA9IG8gfHwge307XG4gICAgICAgICAgICAgICAgd3d3ID0gV1dXKG8uY2xhc3NOYW1lcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChhdHRhY2gpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRpbnB1dCwgJHdyYXBwZXIsICRoaW50LCAkbWVudSwgZGVmYXVsdEhpbnQsIGRlZmF1bHRNZW51LCBldmVudEJ1cywgaW5wdXQsIG1lbnUsIHR5cGVhaGVhZCwgTWVudUNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICBfLmVhY2goZGF0YXNldHMsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQuaGlnaGxpZ2h0ID0gISFvLmhpZ2hsaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICRpbnB1dCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICR3cmFwcGVyID0gJCh3d3cuaHRtbC53cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgJGhpbnQgPSAkZWxPck51bGwoby5oaW50KTtcbiAgICAgICAgICAgICAgICAgICAgJG1lbnUgPSAkZWxPck51bGwoby5tZW51KTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEhpbnQgPSBvLmhpbnQgIT09IGZhbHNlICYmICEkaGludDtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lbnUgPSBvLm1lbnUgIT09IGZhbHNlICYmICEkbWVudTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEhpbnQgJiYgKCRoaW50ID0gYnVpbGRIaW50RnJvbUlucHV0KCRpbnB1dCwgd3d3KSk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZW51ICYmICgkbWVudSA9ICQod3d3Lmh0bWwubWVudSkuY3NzKHd3dy5jc3MubWVudSkpO1xuICAgICAgICAgICAgICAgICAgICAkaGludCAmJiAkaGludC52YWwoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICRpbnB1dCA9IHByZXBJbnB1dCgkaW5wdXQsIHd3dyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0SGludCB8fCBkZWZhdWx0TWVudSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHdyYXBwZXIuY3NzKHd3dy5jc3Mud3JhcHBlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQuY3NzKGRlZmF1bHRIaW50ID8gd3d3LmNzcy5pbnB1dCA6IHd3dy5jc3MuaW5wdXRXaXRoTm9IaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC53cmFwKCR3cmFwcGVyKS5wYXJlbnQoKS5wcmVwZW5kKGRlZmF1bHRIaW50ID8gJGhpbnQgOiBudWxsKS5hcHBlbmQoZGVmYXVsdE1lbnUgPyAkbWVudSA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIE1lbnVDb25zdHJ1Y3RvciA9IGRlZmF1bHRNZW51ID8gRGVmYXVsdE1lbnUgOiBNZW51O1xuICAgICAgICAgICAgICAgICAgICBldmVudEJ1cyA9IG5ldyBFdmVudEJ1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbDogJGlucHV0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IG5ldyBJbnB1dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaW50OiAkaGludCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiAkaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgfSwgd3d3KTtcbiAgICAgICAgICAgICAgICAgICAgbWVudSA9IG5ldyBNZW51Q29uc3RydWN0b3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogJG1lbnUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0czogZGF0YXNldHNcbiAgICAgICAgICAgICAgICAgICAgfSwgd3d3KTtcbiAgICAgICAgICAgICAgICAgICAgdHlwZWFoZWFkID0gbmV3IFR5cGVhaGVhZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZW51OiBtZW51LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRCdXM6IGV2ZW50QnVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluTGVuZ3RoOiBvLm1pbkxlbmd0aFxuICAgICAgICAgICAgICAgICAgICB9LCB3d3cpO1xuICAgICAgICAgICAgICAgICAgICAkaW5wdXQuZGF0YShrZXlzLnd3dywgd3d3KTtcbiAgICAgICAgICAgICAgICAgICAgJGlucHV0LmRhdGEoa2V5cy50eXBlYWhlYWQsIHR5cGVhaGVhZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzRW5hYmxlZDogZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICAgICAgICAgICAgICAgIHZhciBlbmFibGVkO1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCA9IHQuaXNFbmFibGVkKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXNhYmxlOiBmdW5jdGlvbiBkaXNhYmxlKCkge1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQWN0aXZlOiBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYWN0aXZlO1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gdC5pc0FjdGl2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3RpdmU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWN0aXZhdGU6IGZ1bmN0aW9uIGFjdGl2YXRlKCkge1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWFjdGl2YXRlOiBmdW5jdGlvbiBkZWFjdGl2YXRlKCkge1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogZnVuY3Rpb24gaXNPcGVuKCkge1xuICAgICAgICAgICAgICAgIHZhciBvcGVuO1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlbiA9IHQuaXNPcGVuKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wZW47XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgICAgICAgICAgICB0dEVhY2godGhpcywgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICB0Lm9wZW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmYWxzZSwgJGVsID0gJChlbCk7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMuZmlyc3QoKSwgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdC5zZWxlY3QoJGVsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdXRvY29tcGxldGU6IGZ1bmN0aW9uIGF1dG9jb21wbGV0ZShlbCkge1xuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzID0gZmFsc2UsICRlbCA9ICQoZWwpO1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHQuYXV0b2NvbXBsZXRlKCRlbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW92ZUN1cnNvcjogZnVuY3Rpb24gbW92ZUN1cnNvZShkZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMuZmlyc3QoKSwgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdC5tb3ZlQ3Vyc29yKGRlbHRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWw6IGZ1bmN0aW9uIHZhbChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgcXVlcnk7XG4gICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gdC5nZXRWYWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0dEVhY2godGhpcywgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWwobmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0eXBlYWhlYWQsICRpbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICByZXZlcnQoJGlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgdHlwZWFoZWFkLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgJC5mbi50eXBlYWhlYWQgPSBmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgICAgICAgIGlmIChtZXRob2RzW21ldGhvZF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kc1ttZXRob2RdLmFwcGx5KHRoaXMsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2RzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgJC5mbi50eXBlYWhlYWQubm9Db25mbGljdCA9IGZ1bmN0aW9uIG5vQ29uZmxpY3QoKSB7XG4gICAgICAgICAgICAkLmZuLnR5cGVhaGVhZCA9IG9sZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiB0dEVhY2goJGVscywgZm4pIHtcbiAgICAgICAgICAgICRlbHMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJCh0aGlzKSwgdHlwZWFoZWFkO1xuICAgICAgICAgICAgICAgICh0eXBlYWhlYWQgPSAkaW5wdXQuZGF0YShrZXlzLnR5cGVhaGVhZCkpICYmIGZuKHR5cGVhaGVhZCwgJGlucHV0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkSGludEZyb21JbnB1dCgkaW5wdXQsIHd3dykge1xuICAgICAgICAgICAgcmV0dXJuICRpbnB1dC5jbG9uZSgpLmFkZENsYXNzKHd3dy5jbGFzc2VzLmhpbnQpLnJlbW92ZURhdGEoKS5jc3Mod3d3LmNzcy5oaW50KS5jc3MoZ2V0QmFja2dyb3VuZFN0eWxlcygkaW5wdXQpKS5wcm9wKFwicmVhZG9ubHlcIiwgdHJ1ZSkucmVtb3ZlQXR0cihcImlkIG5hbWUgcGxhY2Vob2xkZXIgcmVxdWlyZWRcIikuYXR0cih7XG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBcIm9mZlwiLFxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICB0YWJpbmRleDogLTFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHByZXBJbnB1dCgkaW5wdXQsIHd3dykge1xuICAgICAgICAgICAgJGlucHV0LmRhdGEoa2V5cy5hdHRycywge1xuICAgICAgICAgICAgICAgIGRpcjogJGlucHV0LmF0dHIoXCJkaXJcIiksXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiAkaW5wdXQuYXR0cihcImF1dG9jb21wbGV0ZVwiKSxcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrOiAkaW5wdXQuYXR0cihcInNwZWxsY2hlY2tcIiksXG4gICAgICAgICAgICAgICAgc3R5bGU6ICRpbnB1dC5hdHRyKFwic3R5bGVcIilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgJGlucHV0LmFkZENsYXNzKHd3dy5jbGFzc2VzLmlucHV0KS5hdHRyKHtcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IFwib2ZmXCIsXG4gICAgICAgICAgICAgICAgc3BlbGxjaGVjazogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAhJGlucHV0LmF0dHIoXCJkaXJcIikgJiYgJGlucHV0LmF0dHIoXCJkaXJcIiwgXCJhdXRvXCIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgIHJldHVybiAkaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0QmFja2dyb3VuZFN0eWxlcygkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZEF0dGFjaG1lbnQ6ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnRcIiksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENsaXA6ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLWNsaXBcIiksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAkZWwuY3NzKFwiYmFja2dyb3VuZC1jb2xvclwiKSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLWltYWdlXCIpLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRPcmlnaW46ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLW9yaWdpblwiKSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLXBvc2l0aW9uXCIpLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLXJlcGVhdFwiKSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJGVsLmNzcyhcImJhY2tncm91bmQtc2l6ZVwiKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZXZlcnQoJGlucHV0KSB7XG4gICAgICAgICAgICB2YXIgd3d3LCAkd3JhcHBlcjtcbiAgICAgICAgICAgIHd3dyA9ICRpbnB1dC5kYXRhKGtleXMud3d3KTtcbiAgICAgICAgICAgICR3cmFwcGVyID0gJGlucHV0LnBhcmVudCgpLmZpbHRlcih3d3cuc2VsZWN0b3JzLndyYXBwZXIpO1xuICAgICAgICAgICAgXy5lYWNoKCRpbnB1dC5kYXRhKGtleXMuYXR0cnMpLCBmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgICAgICAgICAgIF8uaXNVbmRlZmluZWQodmFsKSA/ICRpbnB1dC5yZW1vdmVBdHRyKGtleSkgOiAkaW5wdXQuYXR0cihrZXksIHZhbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICRpbnB1dC5yZW1vdmVEYXRhKGtleXMudHlwZWFoZWFkKS5yZW1vdmVEYXRhKGtleXMud3d3KS5yZW1vdmVEYXRhKGtleXMuYXR0cikucmVtb3ZlQ2xhc3Mod3d3LmNsYXNzZXMuaW5wdXQpO1xuICAgICAgICAgICAgaWYgKCR3cmFwcGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICRpbnB1dC5kZXRhY2goKS5pbnNlcnRBZnRlcigkd3JhcHBlcik7XG4gICAgICAgICAgICAgICAgJHdyYXBwZXIucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gJGVsT3JOdWxsKG9iaikge1xuICAgICAgICAgICAgdmFyIGlzVmFsaWQsICRlbDtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBfLmlzSlF1ZXJ5KG9iaikgfHwgXy5pc0VsZW1lbnQob2JqKTtcbiAgICAgICAgICAgICRlbCA9IGlzVmFsaWQgPyAkKG9iaikuZmlyc3QoKSA6IFtdO1xuICAgICAgICAgICAgcmV0dXJuICRlbC5sZW5ndGggPyAkZWwgOiBudWxsO1xuICAgICAgICB9XG4gICAgfSkoKTtcbn0pOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93W1wialF1ZXJ5XCJdOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgQmxvb2Rob3VuZCBmcm9tICd0eXBlYWhlYWQuanMnO1xuaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuaW1wb3J0IEF1dG9Db21wbGV0ZVNlYXJjaCBmcm9tICdAY29tcG9uZW50cy9hdXRvLWNvbXBsZXRlLXNlYXJjaCc7XG5pbXBvcnQgUGVyZmVjdFNjcm9sbGJhciBmcm9tICdwZXJmZWN0LXNjcm9sbGJhcic7XG5pbXBvcnQgQ29tcG9uZW50c01hcCBmcm9tICdAY29tcG9uZW50cy9jb21wb25lbnRzLW1hcCc7XG5pbXBvcnQgJ3BlcmZlY3Qtc2Nyb2xsYmFyL2Nzcy9wZXJmZWN0LXNjcm9sbGJhci5jc3MnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmNvbnN0IGluaXRNdWx0aXN0b3JlRHJvcGRvd24gPSAoKSA9PiB7XG4gIGNvbnN0IE11bHRpc3RvcmVEcm9wZG93bk1hcCA9IENvbXBvbmVudHNNYXAubXVsdGlzdG9yZURyb3Bkb3duO1xuICBjb25zdCAkc2VhcmNoSW5wdXQgPSAkKE11bHRpc3RvcmVEcm9wZG93bk1hcC5zZWFyY2hJbnB1dCk7XG4gIGNvbnN0IHJvdXRlciA9IG5ldyBSb3V0ZXIoKTtcbiAgY29uc3Qgcm91dGUgPSByb3V0ZXIuZ2VuZXJhdGUoJ2FkbWluX3Nob3BzX3NlYXJjaCcsIHtcbiAgICBzZWFyY2hUZXJtOiAnX19RVUVSWV9fJyxcbiAgfSk7XG5cbiAgaWYgKCQoTXVsdGlzdG9yZURyb3Bkb3duTWFwLnNjcm9sbGJhcikubGVuZ3RoID4gMCkge1xuICAgIG5ldyBQZXJmZWN0U2Nyb2xsYmFyKE11bHRpc3RvcmVEcm9wZG93bk1hcC5zY3JvbGxiYXIpO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gbmV3IEJsb29kaG91bmQoe1xuICAgIGRhdHVtVG9rZW5pemVyOiBCbG9vZGhvdW5kLnRva2VuaXplcnMub2JqLndoaXRlc3BhY2UsXG4gICAgcXVlcnlUb2tlbml6ZXI6IEJsb29kaG91bmQudG9rZW5pemVycy53aGl0ZXNwYWNlLFxuICAgIHJlbW90ZToge1xuICAgICAgdXJsOiByb3V0ZSxcbiAgICAgIHdpbGRjYXJkOiAnX19RVUVSWV9fJyxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBkYXRhU2V0Q29uZmlnID0ge1xuICAgIGRpc3BsYXk6ICduYW1lJyxcbiAgICB2YWx1ZTogJ2lkJyxcbiAgICBzb3VyY2UsXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzICovXG4gICAgb25TZWxlY3Qoc2VsZWN0ZWRJdGVtLCBldmVudCkge1xuICAgICAgY29uc3QgY29udGV4dFVybExldHRlciA9IHR5cGVvZiBzZWxlY3RlZEl0ZW0uZ3JvdXBOYW1lICE9PSAndW5kZWZpbmVkJyA/ICdzJyA6ICdnJztcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gQ29tcG9uZW50c01hcC5tdWx0aXN0b3JlSGVhZGVyLnNldENvbnRleHRVcmwoXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgICBjb250ZXh0VXJsTGV0dGVyLFxuICAgICAgICBzZWxlY3RlZEl0ZW0uaWQsXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAqL1xuICAgIG9uQ2xvc2UoZXZlbnQpIHt9LFxuICB9O1xuXG4gIG5ldyBBdXRvQ29tcGxldGVTZWFyY2goJHNlYXJjaElucHV0LCBkYXRhU2V0Q29uZmlnKTtcbn07XG5cbiQoKCkgPT4ge1xuICBpbml0TXVsdGlzdG9yZURyb3Bkb3duKCk7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=