Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@ngx-pwa/local-storage

Package Overview
Dependencies
Maintainers
1
Versions
126
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ngx-pwa/local-storage - npm Package Compare versions

Comparing version 7.2.0 to 7.2.1

2

bundles/ngx-pwa-local-storage.umd.min.js

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs"),require("rxjs/operators"),require("@angular/common")):"function"==typeof define&&define.amd?define("@ngx-pwa/local-storage",["exports","@angular/core","rxjs","rxjs/operators","@angular/common"],t):t((e["ngx-pwa"]=e["ngx-pwa"]||{},e["ngx-pwa"]["local-storage"]={}),e.ng.core,e.rxjs,e.rxjs.operators,e.ng.common)}(this,function(e,t,s,c,r){"use strict";var n=new t.InjectionToken("localStoragePrefix",{providedIn:"root",factory:function(){return""}});var o=function(){function e(e){void 0===e&&(e=null),this.userPrefix=e,this.prefix="",e&&(this.prefix=e+"_")}return Object.defineProperty(e.prototype,"size",{get:function(){return s.of(localStorage.length)},enumerable:!0,configurable:!0}),e.prototype.getItem=function(e){var t=localStorage.getItem(""+this.prefix+e),r=null;if(null!=t)try{r=JSON.parse(t)}catch(n){return s.throwError(new Error("Invalid data in localStorage."))}return s.of(r)},e.prototype.setItem=function(e,t){return localStorage.setItem(""+this.prefix+e,JSON.stringify(t)),s.of(!0)},e.prototype.removeItem=function(e){return localStorage.removeItem(""+this.prefix+e),s.of(!0)},e.prototype.clear=function(){return localStorage.clear(),s.of(!0)},e.prototype.keys=function(){for(var e=[],t=0;t<localStorage.length;t+=1)e.push(this.getKey(t));return s.of(e)},e.prototype.has=function(e){for(var t=0;t<localStorage.length;t+=1)if(e===this.getKey(t))return s.of(!0);return s.of(!1)},e.prototype.getKey=function(e){var t=localStorage.key(e);return null!==t?""===this.prefix?t:t.substr(this.prefix.length):null},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:undefined,decorators:[{type:t.Optional},{type:t.Inject,args:[n]}]}]},e.ngInjectableDef=t.defineInjectable({factory:function(){return new e(t.inject(n,8))},token:e,providedIn:"root"}),e}(),a=function(){function e(e){void 0===e&&(e=null),this.prefix=e,this.dbName="ngStorage",this.objectStoreName="localStorage",this.keyPath="key",this.dataPath="value",this.fallback=null,e&&(this.dbName=e+"_"+this.dbName),this.database=new s.ReplaySubject,this.connect(e)}return Object.defineProperty(e.prototype,"size",{get:function(){var n=this;return this.fallback?this.fallback.size:this.transaction("readonly").pipe(c.mergeMap(function(e){var t=e.count(),r=s.fromEvent(t,"success").pipe(c.map(function(e){return e.target.result}));return s.race(r,n.toErrorObservable(t,"length"))}),c.first())},enumerable:!0,configurable:!0}),e.prototype.getItem=function(e){return this.fallback?this.fallback.getItem(e):this.getItemFromTransaction(e)},e.prototype.getItemFromTransaction=function(t,e){var r=this;return(e?s.of(e):this.transaction()).pipe(c.map(function(e){return e.get(t)}),c.mergeMap(function(e){var t=s.fromEvent(e,"success").pipe(c.map(function(e){return e.target.result}),c.map(function(e){return e&&r.dataPath in e?e[r.dataPath]:null}));return s.race(t,r.toErrorObservable(e,"getter"))}),c.first())},e.prototype.setItem=function(o,a){var i,u=this;return this.fallback?this.fallback.setItem(o,a):null==a?s.of(!0):this.transaction("readwrite").pipe(c.tap(function(e){i=e}),c.mergeMap(function(){return u.getItemFromTransaction(o,i)}),c.map(function(e){return null==e?"add":"put"}),c.mergeMap(function(e){var t,r,n;switch(e){case"add":n=i.add(((t={})[u.dataPath]=a,t),o);break;case"put":default:n=i.put(((r={})[u.dataPath]=a,r),o)}return s.race(u.toSuccessObservable(n),u.toErrorObservable(n,"setter"))}),c.first())},e.prototype.removeItem=function(r){var n=this;return this.fallback?this.fallback.removeItem(r):this.getItem(r).pipe(c.mergeMap(function(e){return null!=e?n.transaction("readwrite").pipe(c.mergeMap(function(e){var t=e["delete"](r);return s.race(n.toSuccessObservable(t),n.toErrorObservable(t,"remover"))})):s.of(!0)}),c.first())},e.prototype.clear=function(){var r=this;return this.fallback?this.fallback.clear():this.transaction("readwrite").pipe(c.mergeMap(function(e){var t=e.clear();return s.race(r.toSuccessObservable(t),r.toErrorObservable(t,"clearer"))}),c.first())},e.prototype.keys=function(){var n=this;return this.fallback?this.fallback.keys():this.transaction("readonly").pipe(c.mergeMap(function(e){var t=e.getAllKeys(),r=s.fromEvent(t,"success").pipe(c.map(function(e){return e.target.result}));return s.race(r,n.toErrorObservable(t,"keys"))}),c.first())},e.prototype.has=function(t){var r=this;return this.fallback?this.fallback.has(t):this.transaction("readonly").pipe(c.map(function(e){return e.getKey(t)}),c.mergeMap(function(e){var t=s.fromEvent(e,"success").pipe(c.map(function(e){return e.target.result}),c.map(function(e){return e!==undefined}));return s.race(t,r.toErrorObservable(e,"has"))}),c.first())},e.prototype.connect=function(e){var t,r=this;void 0===e&&(e=null);try{t=indexedDB.open(this.dbName)}catch(o){return void this.setFallback(e)}s.fromEvent(t,"upgradeneeded").pipe(c.first()).subscribe(function(e){var t=e.target.result;t.objectStoreNames.contains(r.objectStoreName)||t.createObjectStore(r.objectStoreName)});var n=s.fromEvent(t,"success");s.race(n,this.toErrorObservable(t,"connection")).pipe(c.first()).subscribe(function(e){r.database.next(e.target.result)},function(){r.setFallback(e)})},e.prototype.transaction=function(t){var r=this;return void 0===t&&(t="readonly"),this.database.pipe(c.map(function(e){return e.transaction([r.objectStoreName],t).objectStore(r.objectStoreName)}))},e.prototype.toSuccessObservable=function(e){return s.fromEvent(e,"success").pipe(c.map(function(){return!0}))},e.prototype.toErrorObservable=function(e,t){return void 0===t&&(t=""),s.fromEvent(e,"error").pipe(c.mergeMap(function(){return s.throwError(new Error("IndexedDB "+t+" issue : "+e.error.message+"."))}))},e.prototype.setFallback=function(e){this.fallback=new o(e)},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:undefined,decorators:[{type:t.Optional},{type:t.Inject,args:[n]}]}]},e.ngInjectableDef=t.defineInjectable({factory:function(){return new e(t.inject(n,8))},token:e,providedIn:"root"}),e}(),i=function(){function e(){this.localStorage=new Map}return Object.defineProperty(e.prototype,"size",{get:function(){return s.of(this.localStorage.size)},enumerable:!0,configurable:!0}),e.prototype.getItem=function(e){var t=this.localStorage.get(e);return s.of(t!==undefined?t:null)},e.prototype.setItem=function(e,t){return this.localStorage.set(e,t),s.of(!0)},e.prototype.removeItem=function(e){return this.localStorage["delete"](e),s.of(!0)},e.prototype.clear=function(){return this.localStorage.clear(),s.of(!0)},e.prototype.keys=function(){return s.of(Array.from(this.localStorage.keys()))},e.prototype.has=function(e){return s.of(this.localStorage.has(e))},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ngInjectableDef=t.defineInjectable({factory:function(){return new e},token:e,providedIn:"root"}),e}();function u(e,t){return r.isPlatformBrowser(e)&&"indexedDB"in window&&indexedDB!==undefined&&null!==indexedDB?new a(t):r.isPlatformBrowser(e)&&"localStorage"in window&&localStorage!==undefined&&null!==localStorage?new o(t):new i}var l=function(){function e(){}return e.decorators=[{type:t.Injectable,args:[{providedIn:"root",useFactory:u,deps:[t.PLATFORM_ID,[new t.Optional,n]]}]}],e.ngInjectableDef=t.defineInjectable({factory:function(){return u(t.inject(t.PLATFORM_ID),t.inject(n,8))},token:e,providedIn:"root"}),e}();function p(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}var f=function(){function e(){}return e.prototype.validate=function(e,t){if(!((t.hasOwnProperty("const")&&t["const"]!==undefined||t.hasOwnProperty("enum")&&null!=t["enum"]||t.hasOwnProperty("type")&&null!=t.type)&&"array"!==t.type&&"object"!==t.type||t.hasOwnProperty("properties")&&null!=t.properties||t.hasOwnProperty("items")&&null!=t.items))throw new Error("Each value must have a 'type' or 'properties' or 'items' or 'const' or 'enum', to enforce strict types.");return(!t.hasOwnProperty("const")||t["const"]===undefined||e===t["const"])&&(!!this.validateEnum(e,t)&&(!!this.validateType(e,t)&&(!!this.validateItems(e,t)&&(!!this.validateProperties(e,t)&&!!this.validateRequired(e,t)))))},e.prototype.isObjectNotNull=function(e){return null!==e&&"object"==typeof e},e.prototype.validateProperties=function(e,t){if(!t.hasOwnProperty("properties")||null==t.properties)return!0;if(!this.isObjectNotNull(e))return!1;if(Object.keys(t.properties).length!==Object.keys(e).length)return!1;for(var r in t.properties)if(t.properties.hasOwnProperty(r)&&e.hasOwnProperty(r)&&!this.validate(e[r],t.properties[r]))return!1;return!0},e.prototype.validateRequired=function(e,t){var r,n;if(!t.hasOwnProperty("required")||null==t.required)return!0;if(!this.isObjectNotNull(e))return!1;try{for(var o=p(t.required),a=o.next();!a.done;a=o.next()){var i=a.value;if(!t.properties||!t.properties.hasOwnProperty(i))throw new Error("'required' properties must be described in 'properties' too.");if(!e.hasOwnProperty(i))return!1}}catch(u){r={error:u}}finally{try{a&&!a.done&&(n=o["return"])&&n.call(o)}finally{if(r)throw r.error}}return!0},e.prototype.validateEnum=function(e,t){return!t.hasOwnProperty("enum")||null==t["enum"]||-1!==t["enum"].indexOf(e)},e.prototype.validateType=function(e,t){if(!t.hasOwnProperty("type")||null==t.type)return!0;switch(t.type){case"null":return null===e;case"string":return this.validateString(e,t);case"number":case"integer":return this.validateNumber(e,t);case"boolean":return"boolean"==typeof e;case"object":return"object"==typeof e;case"array":return Array.isArray(e)}return!0},e.prototype.validateItems=function(e,t){var r,n;if(!t.hasOwnProperty("items")||null==t.items)return!0;if(!Array.isArray(e))return!1;if(t.hasOwnProperty("maxItems")&&null!=t.maxItems){if(!Number.isInteger(t.maxItems)||t.maxItems<0)throw new Error("'maxItems' must be a non-negative integer.");if(e.length>t.maxItems)return!1}if(t.hasOwnProperty("minItems")&&null!=t.minItems){if(!Number.isInteger(t.minItems)||t.minItems<0)throw new Error("'minItems' must be a non-negative integer.");if(e.length<t.minItems)return!1}if(t.hasOwnProperty("uniqueItems")&&null!=t.uniqueItems&&t.uniqueItems){var o=new Set(e);if(e.length!==o.size)return!1}if(Array.isArray(t.items))return this.validateItemsList(e,t);try{for(var a=p(e),i=a.next();!i.done;i=a.next()){var u=i.value;if(!this.validate(u,t.items))return!1}}catch(s){r={error:s}}finally{try{i&&!i.done&&(n=a["return"])&&n.call(a)}finally{if(r)throw r.error}}return!0},e.prototype.validateItemsList=function(e,t){var r=t.items;if(e.length!==r.length)return!1;for(var n=0;n<r.length;n+=1)if(!this.validate(e[n],r[n]))return!1;return!0},e.prototype.validateString=function(e,t){if("string"!=typeof e)return!1;if(t.hasOwnProperty("maxLength")&&null!=t.maxLength){if(!Number.isInteger(t.maxLength)||t.maxLength<0)throw new Error("'maxLength' must be a non-negative integer.");if(e.length>t.maxLength)return!1}if(t.hasOwnProperty("minLength")&&null!=t.minLength){if(!Number.isInteger(t.minLength)||t.minLength<0)throw new Error("'minLength' must be a non-negative integer.");if(e.length<t.minLength)return!1}if(t.hasOwnProperty("pattern")&&null!=t.pattern&&!new RegExp(t.pattern).test(e))return!1;return!0},e.prototype.validateNumber=function(e,t){if("number"!=typeof e)return!1;if("integer"===t.type&&!Number.isInteger(e))return!1;if(t.hasOwnProperty("multipleOf")&&null!=t.multipleOf){if(t.multipleOf<=0)throw new Error("'multipleOf' must be a number strictly greater than 0.");if(!Number.isInteger(e/t.multipleOf))return!1}return!(t.hasOwnProperty("maximum")&&null!=t.maximum&&e>t.maximum)&&(!(t.hasOwnProperty("exclusiveMaximum")&&null!=t.exclusiveMaximum&&e>=t.exclusiveMaximum)&&(!(t.hasOwnProperty("minimum")&&null!=t.minimum&&e<t.minimum)&&!(t.hasOwnProperty("exclusiveMinimum")&&null!=t.exclusiveMinimum&&e<=t.exclusiveMinimum)))},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ngInjectableDef=t.defineInjectable({factory:function(){return new e},token:e,providedIn:"root"}),e}(),m=function(){function e(e,t){this.database=e,this.jsonValidator=t,this.getItemOptionsDefault={schema:null}}return Object.defineProperty(e.prototype,"size",{get:function(){return this.database.size},enumerable:!0,configurable:!0}),e.prototype.getItem=function(e,n){var o=this;return void 0===n&&(n=this.getItemOptionsDefault),this.database.getItem(e).pipe(c.mergeMap(function(e){if(null===e)return s.of(null);if(n.schema){var t=!0;try{t=o.jsonValidator.validate(e,n.schema)}catch(r){return s.throwError(r)}if(!t)return s.throwError(new Error("JSON invalid"))}return s.of(e)}))},e.prototype.getUnsafeItem=function(e){return this.database.getItem(e)},e.prototype.setItem=function(e,t){return this.database.setItem(e,t)},e.prototype.removeItem=function(e){return this.database.removeItem(e)},e.prototype.clear=function(){return this.database.clear()},e.prototype.keys=function(){return this.database.keys()},e.prototype.has=function(e){return this.database.has(e)},e.prototype.setItemSubscribe=function(e,t){this.setItem(e,t).subscribe(function(){},function(){})},e.prototype.removeItemSubscribe=function(e){this.removeItem(e).subscribe(function(){},function(){})},e.prototype.clearSubscribe=function(){this.clear().subscribe(function(){},function(){})},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:l},{type:f}]},e.ngInjectableDef=t.defineInjectable({factory:function(){return new e(t.inject(l),t.inject(f))},token:e,providedIn:"root"}),e}();e.LocalDatabase=l,e.IndexedDBDatabase=a,e.LocalStorageDatabase=o,e.MockLocalDatabase=i,e.JSONValidator=f,e.LocalStorage=m,e.localStorageProviders=function h(e){return[e.prefix?{provide:n,useValue:e.prefix}:[]]},e.LOCAL_STORAGE_PREFIX=n,e.ɵa=u,Object.defineProperty(e,"__esModule",{value:!0})});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs"),require("rxjs/operators"),require("@angular/common")):"function"==typeof define&&define.amd?define("@ngx-pwa/local-storage",["exports","@angular/core","rxjs","rxjs/operators","@angular/common"],t):t((e["ngx-pwa"]=e["ngx-pwa"]||{},e["ngx-pwa"]["local-storage"]={}),e.ng.core,e.rxjs,e.rxjs.operators,e.ng.common)}(this,function(e,t,s,c,r){"use strict";var n=new t.InjectionToken("localStoragePrefix",{providedIn:"root",factory:function(){return""}});var o=function(){function e(e){void 0===e&&(e=null),this.userPrefix=e,this.prefix="",e&&(this.prefix=e+"_")}return Object.defineProperty(e.prototype,"size",{get:function(){return s.of(localStorage.length)},enumerable:!0,configurable:!0}),e.prototype.getItem=function(e){var t=localStorage.getItem(""+this.prefix+e),r=null;if(null!=t)try{r=JSON.parse(t)}catch(n){return s.throwError(new Error("Invalid data in localStorage."))}return s.of(r)},e.prototype.setItem=function(e,t){return localStorage.setItem(""+this.prefix+e,JSON.stringify(t)),s.of(!0)},e.prototype.removeItem=function(e){return localStorage.removeItem(""+this.prefix+e),s.of(!0)},e.prototype.clear=function(){return localStorage.clear(),s.of(!0)},e.prototype.keys=function(){for(var e=[],t=0;t<localStorage.length;t+=1)e.push(this.getKey(t));return s.of(e)},e.prototype.has=function(e){for(var t=0;t<localStorage.length;t+=1)if(e===this.getKey(t))return s.of(!0);return s.of(!1)},e.prototype.getKey=function(e){var t=localStorage.key(e);return null!==t?""===this.prefix?t:t.substr(this.prefix.length):null},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:undefined,decorators:[{type:t.Optional},{type:t.Inject,args:[n]}]}]},e.ngInjectableDef=t.defineInjectable({factory:function(){return new e(t.inject(n,8))},token:e,providedIn:"root"}),e}(),a=function(){function e(e){void 0===e&&(e=null),this.prefix=e,this.dbName="ngStorage",this.objectStoreName="localStorage",this.keyPath="key",this.dataPath="value",this.fallback=null,e&&(this.dbName=e+"_"+this.dbName),this.database=new s.ReplaySubject,this.connect(e)}return Object.defineProperty(e.prototype,"size",{get:function(){var n=this;return this.fallback?this.fallback.size:this.transaction("readonly").pipe(c.mergeMap(function(e){var t=e.count(),r=s.fromEvent(t,"success").pipe(c.map(function(e){return e.target.result}));return s.race(r,n.toErrorObservable(t,"length"))}),c.first())},enumerable:!0,configurable:!0}),e.prototype.getItem=function(e){return this.fallback?this.fallback.getItem(e):this.getItemFromTransaction(e)},e.prototype.getItemFromTransaction=function(t,e){var r=this;return(e?s.of(e):this.transaction()).pipe(c.map(function(e){return e.get(t)}),c.mergeMap(function(e){var t=s.fromEvent(e,"success").pipe(c.map(function(e){return e.target.result}),c.map(function(e){return e&&r.dataPath in e?e[r.dataPath]:null}));return s.race(t,r.toErrorObservable(e,"getter"))}),c.first())},e.prototype.setItem=function(o,a){var i,u=this;return this.fallback?this.fallback.setItem(o,a):null==a?s.of(!0):this.transaction("readwrite").pipe(c.tap(function(e){i=e}),c.mergeMap(function(){return u.getItemFromTransaction(o,i)}),c.map(function(e){return null==e?"add":"put"}),c.mergeMap(function(e){var t,r,n;switch(e){case"add":n=i.add(((t={})[u.dataPath]=a,t),o);break;case"put":default:n=i.put(((r={})[u.dataPath]=a,r),o)}return s.race(u.toSuccessObservable(n),u.toErrorObservable(n,"setter"))}),c.first())},e.prototype.removeItem=function(r){var n=this;return this.fallback?this.fallback.removeItem(r):this.getItem(r).pipe(c.mergeMap(function(e){return null!=e?n.transaction("readwrite").pipe(c.mergeMap(function(e){var t=e["delete"](r);return s.race(n.toSuccessObservable(t),n.toErrorObservable(t,"remover"))})):s.of(!0)}),c.first())},e.prototype.clear=function(){var r=this;return this.fallback?this.fallback.clear():this.transaction("readwrite").pipe(c.mergeMap(function(e){var t=e.clear();return s.race(r.toSuccessObservable(t),r.toErrorObservable(t,"clearer"))}),c.first())},e.prototype.keys=function(){var n=this;return this.fallback?this.fallback.keys():this.transaction("readonly").pipe(c.mergeMap(function(e){var t=e.getAllKeys(),r=s.fromEvent(t,"success").pipe(c.map(function(e){return e.target.result}));return s.race(r,n.toErrorObservable(t,"keys"))}),c.first())},e.prototype.has=function(t){var r=this;return this.fallback?this.fallback.has(t):this.transaction("readonly").pipe(c.map(function(e){return e.getKey(t)}),c.mergeMap(function(e){var t=s.fromEvent(e,"success").pipe(c.map(function(e){return e.target.result}),c.map(function(e){return e!==undefined}));return s.race(t,r.toErrorObservable(e,"has"))}),c.first())},e.prototype.connect=function(e){var t,r=this;void 0===e&&(e=null);try{t=indexedDB.open(this.dbName)}catch(o){return void this.setFallback(e)}s.fromEvent(t,"upgradeneeded").pipe(c.first()).subscribe(function(e){var t=e.target.result;t.objectStoreNames.contains(r.objectStoreName)||t.createObjectStore(r.objectStoreName)});var n=s.fromEvent(t,"success");s.race(n,this.toErrorObservable(t,"connection")).pipe(c.first()).subscribe(function(e){r.database.next(e.target.result)},function(){r.setFallback(e)})},e.prototype.transaction=function(t){var r=this;return void 0===t&&(t="readonly"),this.database.pipe(c.map(function(e){return e.transaction([r.objectStoreName],t).objectStore(r.objectStoreName)}))},e.prototype.toSuccessObservable=function(e){return s.fromEvent(e,"success").pipe(c.map(function(){return!0}))},e.prototype.toErrorObservable=function(e,t){return void 0===t&&(t=""),s.fromEvent(e,"error").pipe(c.mergeMap(function(){return s.throwError(new Error("IndexedDB "+t+" issue : "+e.error.message+"."))}))},e.prototype.setFallback=function(e){this.fallback=new o(e)},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:undefined,decorators:[{type:t.Optional},{type:t.Inject,args:[n]}]}]},e.ngInjectableDef=t.defineInjectable({factory:function(){return new e(t.inject(n,8))},token:e,providedIn:"root"}),e}(),i=function(){function e(){this.localStorage=new Map}return Object.defineProperty(e.prototype,"size",{get:function(){return s.of(this.localStorage.size)},enumerable:!0,configurable:!0}),e.prototype.getItem=function(e){var t=this.localStorage.get(e);return s.of(t!==undefined?t:null)},e.prototype.setItem=function(e,t){return this.localStorage.set(e,t),s.of(!0)},e.prototype.removeItem=function(e){return this.localStorage["delete"](e),s.of(!0)},e.prototype.clear=function(){return this.localStorage.clear(),s.of(!0)},e.prototype.keys=function(){return s.of(Array.from(this.localStorage.keys()))},e.prototype.has=function(e){return s.of(this.localStorage.has(e))},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ngInjectableDef=t.defineInjectable({factory:function(){return new e},token:e,providedIn:"root"}),e}();function u(e,t){return r.isPlatformBrowser(e)&&"indexedDB"in window&&indexedDB!==undefined&&null!==indexedDB?new a(t):r.isPlatformBrowser(e)&&"localStorage"in window&&localStorage!==undefined&&null!==localStorage?new o(t):new i}var l=function(){function e(){}return e.decorators=[{type:t.Injectable,args:[{providedIn:"root",useFactory:u,deps:[t.PLATFORM_ID,[new t.Optional,n]]}]}],e.ngInjectableDef=t.defineInjectable({factory:function(){return u(t.inject(t.PLATFORM_ID),t.inject(n,8))},token:e,providedIn:"root"}),e}();function p(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}var f=function(){function e(){}return e.prototype.validate=function(e,t){if(!((t.hasOwnProperty("const")&&t["const"]!==undefined||t.hasOwnProperty("enum")&&null!=t["enum"]||t.hasOwnProperty("type")&&null!=t.type)&&"array"!==t.type&&"object"!==t.type||t.hasOwnProperty("properties")&&null!=t.properties||t.hasOwnProperty("items")&&null!=t.items))throw new Error("Each value must have a 'type' or 'properties' or 'items' or 'const' or 'enum', to enforce strict types.");return(!t.hasOwnProperty("const")||t["const"]===undefined||e===t["const"])&&(!!this.validateEnum(e,t)&&(!!this.validateType(e,t)&&(!!this.validateItems(e,t)&&(!!this.validateProperties(e,t)&&!!this.validateRequired(e,t)))))},e.prototype.isObjectNotNull=function(e){return null!==e&&"object"==typeof e},e.prototype.validateProperties=function(e,t){if(!t.hasOwnProperty("properties")||null==t.properties)return!0;if(!this.isObjectNotNull(e))return!1;if(Object.keys(t.properties).length<Object.keys(e).length)return!1;for(var r in t.properties)if(t.properties.hasOwnProperty(r)&&e.hasOwnProperty(r)&&!this.validate(e[r],t.properties[r]))return!1;return!0},e.prototype.validateRequired=function(e,t){var r,n;if(!t.hasOwnProperty("required")||null==t.required)return!0;if(!this.isObjectNotNull(e))return!1;try{for(var o=p(t.required),a=o.next();!a.done;a=o.next()){var i=a.value;if(!t.properties||!t.properties.hasOwnProperty(i))throw new Error("'required' properties must be described in 'properties' too.");if(!e.hasOwnProperty(i))return!1}}catch(u){r={error:u}}finally{try{a&&!a.done&&(n=o["return"])&&n.call(o)}finally{if(r)throw r.error}}return!0},e.prototype.validateEnum=function(e,t){return!t.hasOwnProperty("enum")||null==t["enum"]||-1!==t["enum"].indexOf(e)},e.prototype.validateType=function(e,t){if(!t.hasOwnProperty("type")||null==t.type)return!0;switch(t.type){case"null":return null===e;case"string":return this.validateString(e,t);case"number":case"integer":return this.validateNumber(e,t);case"boolean":return"boolean"==typeof e;case"object":return"object"==typeof e;case"array":return Array.isArray(e)}return!0},e.prototype.validateItems=function(e,t){var r,n;if(!t.hasOwnProperty("items")||null==t.items)return!0;if(!Array.isArray(e))return!1;if(t.hasOwnProperty("maxItems")&&null!=t.maxItems){if(!Number.isInteger(t.maxItems)||t.maxItems<0)throw new Error("'maxItems' must be a non-negative integer.");if(e.length>t.maxItems)return!1}if(t.hasOwnProperty("minItems")&&null!=t.minItems){if(!Number.isInteger(t.minItems)||t.minItems<0)throw new Error("'minItems' must be a non-negative integer.");if(e.length<t.minItems)return!1}if(t.hasOwnProperty("uniqueItems")&&null!=t.uniqueItems&&t.uniqueItems){var o=new Set(e);if(e.length!==o.size)return!1}if(Array.isArray(t.items))return this.validateItemsList(e,t);try{for(var a=p(e),i=a.next();!i.done;i=a.next()){var u=i.value;if(!this.validate(u,t.items))return!1}}catch(s){r={error:s}}finally{try{i&&!i.done&&(n=a["return"])&&n.call(a)}finally{if(r)throw r.error}}return!0},e.prototype.validateItemsList=function(e,t){var r=t.items;if(e.length!==r.length)return!1;for(var n=0;n<r.length;n+=1)if(!this.validate(e[n],r[n]))return!1;return!0},e.prototype.validateString=function(e,t){if("string"!=typeof e)return!1;if(t.hasOwnProperty("maxLength")&&null!=t.maxLength){if(!Number.isInteger(t.maxLength)||t.maxLength<0)throw new Error("'maxLength' must be a non-negative integer.");if(e.length>t.maxLength)return!1}if(t.hasOwnProperty("minLength")&&null!=t.minLength){if(!Number.isInteger(t.minLength)||t.minLength<0)throw new Error("'minLength' must be a non-negative integer.");if(e.length<t.minLength)return!1}if(t.hasOwnProperty("pattern")&&null!=t.pattern&&!new RegExp(t.pattern).test(e))return!1;return!0},e.prototype.validateNumber=function(e,t){if("number"!=typeof e)return!1;if("integer"===t.type&&!Number.isInteger(e))return!1;if(t.hasOwnProperty("multipleOf")&&null!=t.multipleOf){if(t.multipleOf<=0)throw new Error("'multipleOf' must be a number strictly greater than 0.");if(!Number.isInteger(e/t.multipleOf))return!1}return!(t.hasOwnProperty("maximum")&&null!=t.maximum&&e>t.maximum)&&(!(t.hasOwnProperty("exclusiveMaximum")&&null!=t.exclusiveMaximum&&e>=t.exclusiveMaximum)&&(!(t.hasOwnProperty("minimum")&&null!=t.minimum&&e<t.minimum)&&!(t.hasOwnProperty("exclusiveMinimum")&&null!=t.exclusiveMinimum&&e<=t.exclusiveMinimum)))},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ngInjectableDef=t.defineInjectable({factory:function(){return new e},token:e,providedIn:"root"}),e}(),m=function(){function e(e,t){this.database=e,this.jsonValidator=t,this.getItemOptionsDefault={schema:null}}return Object.defineProperty(e.prototype,"size",{get:function(){return this.database.size},enumerable:!0,configurable:!0}),e.prototype.getItem=function(e,n){var o=this;return void 0===n&&(n=this.getItemOptionsDefault),this.database.getItem(e).pipe(c.mergeMap(function(e){if(null===e)return s.of(null);if(n.schema){var t=!0;try{t=o.jsonValidator.validate(e,n.schema)}catch(r){return s.throwError(r)}if(!t)return s.throwError(new Error("JSON invalid"))}return s.of(e)}))},e.prototype.getUnsafeItem=function(e){return this.database.getItem(e)},e.prototype.setItem=function(e,t){return this.database.setItem(e,t)},e.prototype.removeItem=function(e){return this.database.removeItem(e)},e.prototype.clear=function(){return this.database.clear()},e.prototype.keys=function(){return this.database.keys()},e.prototype.has=function(e){return this.database.has(e)},e.prototype.setItemSubscribe=function(e,t){this.setItem(e,t).subscribe(function(){},function(){})},e.prototype.removeItemSubscribe=function(e){this.removeItem(e).subscribe(function(){},function(){})},e.prototype.clearSubscribe=function(){this.clear().subscribe(function(){},function(){})},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:l},{type:f}]},e.ngInjectableDef=t.defineInjectable({factory:function(){return new e(t.inject(l),t.inject(f))},token:e,providedIn:"root"}),e}();e.LocalDatabase=l,e.IndexedDBDatabase=a,e.LocalStorageDatabase=o,e.MockLocalDatabase=i,e.JSONValidator=f,e.LocalStorage=m,e.localStorageProviders=function h(e){return[e.prefix?{provide:n,useValue:e.prefix}:[]]},e.LOCAL_STORAGE_PREFIX=n,e.ɵa=u,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=ngx-pwa-local-storage.umd.min.js.map

@@ -74,3 +74,3 @@ /**

*/
if (Object.keys(schema.properties).length !== Object.keys(data).length) {
if (Object.keys(schema.properties).length < Object.keys(data).length) {
return false;

@@ -305,2 +305,2 @@ }

/** @nocollapse */ JSONValidator.ngInjectableDef = i0.defineInjectable({ factory: function JSONValidator_Factory() { return new JSONValidator(); }, token: JSONValidator, providedIn: "root" });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi12YWxpZGF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LXB3YS9sb2NhbC1zdG9yYWdlLyIsInNvdXJjZXMiOlsibGliL3ZhbGlkYXRpb24vanNvbi12YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUzNDLE1BQU0sT0FBTyxhQUFhOzs7Ozs7Ozs7OztJQVl4QixRQUFRLENBQUMsSUFBUyxFQUFFLE1BQWtCO1FBRXBDLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztlQUNsRSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7ZUFDbkgsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7ZUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFO1lBRXBJLE1BQU0sSUFBSSxLQUFLLENBQUMseUdBQXlHLENBQUMsQ0FBQztTQUU1SDtRQUVELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFD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QUNkO1NBRUY7UUFFRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFO1lBRWhFLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3pCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FFRjtRQUVELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxFQUFFO1lBRWxGLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDbkMsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUVGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFFZCxDQUFDOzs7WUF2WEYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSlNPTlNjaGVtYSB9IGZyb20gJy4vanNvbi1zY2hlbWEnO1xuXG4vKipcbiAqIEB0b2RvIEFkZCBvdGhlciBKU09OIFNjaGVtYSB2YWxpZGF0aW9uIGZlYXR1cmVzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEpTT05WYWxpZGF0b3Ige1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIEpTT04gZGF0YSBhZ2FpbnN0IGEgSlNPTiBTY2hlbWFcbiAgICogQHBhcmFtIGRhdGEgSlNPTiBkYXRhIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBzY2hlbWEgU3Vic2V0IG9mIEpTT04gU2NoZW1hLlxuICAgKiBUeXBlcyBhcmUgZW5mb3JjZWQgdG8gdmFsaWRhdGUgZXZlcnl0aGluZzpcbiAgICogZWFjaCB2YWx1ZSBNVVNUIGhhdmUgJ3R5cGUnIG9yICdwcm9wZXJ0aWVzJyBvciAnaXRlbXMnIG9yICdjb25zdCcgb3IgJ2VudW0nLlxuICAgKiBUaGVyZWZvcmUsIHVubGlrZSB0aGUgc3BlYywgYm9vbGVhbnMgYXJlIG5vdCBhbGxvd2VkIGFzIHNjaGVtYXMuXG4gICAqIE5vdCBhbGwgdmFsaWRhdGlvbiBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOiBqdXN0IGZvbGxvdyB0aGUgaW50ZXJmYWNlLlxuICAgKiBAcmV0dXJucyBJZiBkYXRhIGlzIHZhbGlkIDogdHJ1ZSwgaWYgaXQgaXMgaW52YWxpZCA6IGZhbHNlLCBhbmQgdGhyb3dzIGlmIHRoZSBzY2hlbWEgaXMgaW52YWxpZFxuICAgKi9cbiAgdmFsaWRhdGUoZGF0YTogYW55LCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIC8qKiBAdG9kbyBXaGVuIFRTIDIuOCwgZXhwbG9yZSBpZiB0aGlzIGlzIHBvc3NpYmxlIHdpdGggY29uZGl0aW9uYWwgdHlwZXMgKi9cbiAgICBpZiAoKCghKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnY29uc3QnKSAmJiBzY2hlbWEuY29uc3QgIT09IHVuZGVmaW5lZClcbiAgICAmJiAhKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnZW51bScpICYmIHNjaGVtYS5lbnVtICE9IG51bGwpICYmICEoc2NoZW1hLmhhc093blByb3BlcnR5KCd0eXBlJykgJiYgc2NoZW1hLnR5cGUgIT0gbnVsbCkpXG4gICAgfHwgc2NoZW1hLnR5cGUgPT09ICdhcnJheScgfHwgc2NoZW1hLnR5cGUgPT09ICdvYmplY3QnKVxuICAgICYmICEoc2NoZW1hLmhhc093blByb3BlcnR5KCdwcm9wZXJ0aWVzJykgJiYgc2NoZW1hLnByb3BlcnRpZXMgIT0gbnVsbCkgICYmICEoc2NoZW1hLmhhc093blByb3BlcnR5KCdpdGVtcycpICYmIHNjaGVtYS5pdGVtcyAhPSBudWxsKSkge1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVhY2ggdmFsdWUgbXVzdCBoYXZlIGEgJ3R5cGUnIG9yICdwcm9wZXJ0aWVzJyBvciAnaXRlbXMnIG9yICdjb25zdCcgb3IgJ2VudW0nLCB0byBlbmZvcmNlIHN0cmljdCB0eXBlcy5gKTtcblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2NvbnN0JykgJiYgc2NoZW1hLmNvbnN0ICE9PSB1bmRlZmluZWQgJiYgKGRhdGEgIT09IHNjaGVtYS5jb25zdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVFbnVtKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVUeXBlKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVJdGVtcyhkYXRhLCBzY2hlbWEpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlUHJvcGVydGllcyhkYXRhLCBzY2hlbWEpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlUmVxdWlyZWQoZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgaXNPYmplY3ROb3ROdWxsKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblxuICAgIHJldHVybiAodmFsdWUgIT09IG51bGwpICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlUHJvcGVydGllcyhkYXRhOiB7IFtrOiBzdHJpbmddOiBhbnk7IH0sIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3Byb3BlcnRpZXMnKSB8fCAoc2NoZW1hLnByb3BlcnRpZXMgPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc09iamVjdE5vdE51bGwoZGF0YSkpIHtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIG9iamVjdCBkb2Vzbid0IGhhdmUgbW9yZSBwcm9wZXJ0aWVzIHRoYW4gZXhwZWN0ZWRcbiAgICAgKiBFcXVpdmFsZW50IG9mIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAqL1xuICAgIGlmIChPYmplY3Qua2V5cyhzY2hlbWEucHJvcGVydGllcykubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGgpIHtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgLyogUmVjdXJzaXZlbHkgdmFsaWRhdGUgYWxsIHByb3BlcnRpZXMgKi9cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHNjaGVtYS5wcm9wZXJ0aWVzKSB7XG5cbiAgICAgIGlmIChzY2hlbWEucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiYgZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGUoZGF0YVtwcm9wZXJ0eV0sIHNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSkpIHtcblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVSZXF1aXJlZChkYXRhOiB7fSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgncmVxdWlyZWQnKSB8fCAoc2NoZW1hLnJlcXVpcmVkID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNPYmplY3ROb3ROdWxsKGRhdGEpKSB7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVxdWlyZWRQcm9wIG9mIHNjaGVtYS5yZXF1aXJlZCkge1xuXG4gICAgICAvKiBDaGVja3MgaWYgdGhlIHByb3BlcnR5IGlzIHByZXNlbnQgaW4gdGhlIHNjaGVtYSAncHJvcGVydGllcycgKi9cbiAgICAgIGlmICghc2NoZW1hLnByb3BlcnRpZXMgfHwgIXNjaGVtYS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHJlcXVpcmVkUHJvcCkpIHtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdyZXF1aXJlZCcgcHJvcGVydGllcyBtdXN0IGJlIGRlc2NyaWJlZCBpbiAncHJvcGVydGllcycgdG9vLmApO1xuXG4gICAgICB9XG5cbiAgICAgIC8qIENoZWNrcyBpZiB0aGUgcHJvcGVydHkgaXMgcHJlc2VudCBpbiB0aGUgZGF0YSAqL1xuICAgICAgaWYgKCFkYXRhLmhhc093blByb3BlcnR5KHJlcXVpcmVkUHJvcCkpIHtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVFbnVtKGRhdGE6IGFueSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnZW51bScpIHx8IChzY2hlbWEuZW51bSA9PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEB0b2RvIE1vdmUgdG8gRVMyMDE2IC5pbmNsdWRlcygpID8gKi9cbiAgICByZXR1cm4gKHNjaGVtYS5lbnVtLmluZGV4T2YoZGF0YSkgIT09IC0xKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlVHlwZShkYXRhOiBhbnksIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSB8fCAoc2NoZW1hLnR5cGUgPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcblxuICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgIHJldHVybiBkYXRhID09PSBudWxsO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVTdHJpbmcoZGF0YSwgc2NoZW1hKTtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVOdW1iZXIoZGF0YSwgc2NoZW1hKTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdib29sZWFuJztcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCc7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEpO1xuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUl0ZW1zKGRhdGE6IGFueVtdLCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIGlmICghc2NoZW1hLmhhc093blByb3BlcnR5KCdpdGVtcycpIHx8IChzY2hlbWEuaXRlbXMgPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtYXhJdGVtcycpICYmIChzY2hlbWEubWF4SXRlbXMgIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNjaGVtYS5tYXhJdGVtcykgfHwgc2NoZW1hLm1heEl0ZW1zIDwgMCkge1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ21heEl0ZW1zJyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuYCk7XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEubGVuZ3RoID4gc2NoZW1hLm1heEl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21pbkl0ZW1zJykgJiYgKHNjaGVtYS5taW5JdGVtcyAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc2NoZW1hLm1pbkl0ZW1zKSB8fCBzY2hlbWEubWluSXRlbXMgPCAwKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnbWluSXRlbXMnIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci5gKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5sZW5ndGggPCBzY2hlbWEubWluSXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgndW5pcXVlSXRlbXMnKSAmJiAoc2NoZW1hLnVuaXF1ZUl0ZW1zICE9IG51bGwpKSB7XG5cbiAgICAgIGlmIChzY2hlbWEudW5pcXVlSXRlbXMpIHtcblxuICAgICAgICBjb25zdCBkYXRhU2V0ID0gbmV3IFNldChkYXRhKTtcblxuICAgICAgICBpZiAoZGF0YS5sZW5ndGggIT09IGRhdGFTZXQuc2l6ZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG5cbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSXRlbXNMaXN0KGRhdGEsIHNjaGVtYSk7XG5cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGRhdGEpIHtcblxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlKHZhbHVlLCBzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVJdGVtc0xpc3QoZGF0YTogYW55LCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIGNvbnN0IGl0ZW1zID0gc2NoZW1hLml0ZW1zIGFzIEpTT05TY2hlbWFbXTtcblxuICAgIGlmIChkYXRhLmxlbmd0aCAhPT0gaXRlbXMubGVuZ3RoKSB7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IDEpIHtcblxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlKGRhdGFbaV0sIGl0ZW1zW2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlU3RyaW5nKGRhdGE6IGFueSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWF4TGVuZ3RoJykgJiYgKHNjaGVtYS5tYXhMZW5ndGggIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNjaGVtYS5tYXhMZW5ndGgpIHx8IHNjaGVtYS5tYXhMZW5ndGggPCAwKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnbWF4TGVuZ3RoJyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuYCk7XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEubGVuZ3RoID4gc2NoZW1hLm1heExlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtaW5MZW5ndGgnKSAmJiAoc2NoZW1hLm1pbkxlbmd0aCAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc2NoZW1hLm1pbkxlbmd0aCkgfHwgc2NoZW1hLm1pbkxlbmd0aCA8IDApIHtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdtaW5MZW5ndGgnIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci5gKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5sZW5ndGggPCBzY2hlbWEubWluTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3BhdHRlcm4nKSAmJiAoc2NoZW1hLnBhdHRlcm4gIT0gbnVsbCkpIHtcblxuICAgICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKHNjaGVtYS5wYXR0ZXJuKTtcblxuICAgICAgaWYgKCFyZWd1bGFyRXhwcmVzc2lvbi50ZXN0KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVOdW1iZXIoZGF0YTogYW55LCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKHNjaGVtYS50eXBlID09PSAnaW50ZWdlcicpICYmICFOdW1iZXIuaXNJbnRlZ2VyKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbXVsdGlwbGVPZicpICYmIChzY2hlbWEubXVsdGlwbGVPZiAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoc2NoZW1hLm11bHRpcGxlT2YgPD0gMCkge1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ211bHRpcGxlT2YnIG11c3QgYmUgYSBudW1iZXIgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuYCk7XG5cbiAgICAgIH1cblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRhdGEgLyBzY2hlbWEubXVsdGlwbGVPZikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWF4aW11bScpICYmIChzY2hlbWEubWF4aW11bSAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoZGF0YSA+IHNjaGVtYS5tYXhpbXVtKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2V4Y2x1c2l2ZU1heGltdW0nKSAmJiAoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKGRhdGEgPj0gc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWluaW11bScpICYmIChzY2hlbWEubWluaW11bSAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoZGF0YSA8IHNjaGVtYS5taW5pbXVtKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2V4Y2x1c2l2ZU1pbmltdW0nKSAmJiAoc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKGRhdGEgPD0gc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi12YWxpZGF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LXB3YS9sb2NhbC1zdG9yYWdlLyIsInNvdXJjZXMiOlsibGliL3ZhbGlkYXRpb24vanNvbi12YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUzNDLE1BQU0sT0FBTyxhQUFhOzs7Ozs7Ozs7OztJQVl4QixRQUFRLENBQUMsSUFBUyxFQUFFLE1BQWtCO1FBRXBDLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztlQUNsRSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7ZUFDbkgsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7ZUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFO1lBRXBJLE1BQU0sSUFBSSxLQUFLLENBQUMseUdBQXlHLENBQUMsQ0FBQztTQUU1SDtRQUVELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFD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QUNkO1NBRUY7UUFFRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFO1lBRWhFLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3pCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FFRjtRQUVELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxFQUFFO1lBRWxGLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDbkMsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUVGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFFZCxDQUFDOzs7WUF2WEYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSlNPTlNjaGVtYSB9IGZyb20gJy4vanNvbi1zY2hlbWEnO1xuXG4vKipcbiAqIEB0b2RvIEFkZCBvdGhlciBKU09OIFNjaGVtYSB2YWxpZGF0aW9uIGZlYXR1cmVzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEpTT05WYWxpZGF0b3Ige1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIEpTT04gZGF0YSBhZ2FpbnN0IGEgSlNPTiBTY2hlbWFcbiAgICogQHBhcmFtIGRhdGEgSlNPTiBkYXRhIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBzY2hlbWEgU3Vic2V0IG9mIEpTT04gU2NoZW1hLlxuICAgKiBUeXBlcyBhcmUgZW5mb3JjZWQgdG8gdmFsaWRhdGUgZXZlcnl0aGluZzpcbiAgICogZWFjaCB2YWx1ZSBNVVNUIGhhdmUgJ3R5cGUnIG9yICdwcm9wZXJ0aWVzJyBvciAnaXRlbXMnIG9yICdjb25zdCcgb3IgJ2VudW0nLlxuICAgKiBUaGVyZWZvcmUsIHVubGlrZSB0aGUgc3BlYywgYm9vbGVhbnMgYXJlIG5vdCBhbGxvd2VkIGFzIHNjaGVtYXMuXG4gICAqIE5vdCBhbGwgdmFsaWRhdGlvbiBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOiBqdXN0IGZvbGxvdyB0aGUgaW50ZXJmYWNlLlxuICAgKiBAcmV0dXJucyBJZiBkYXRhIGlzIHZhbGlkIDogdHJ1ZSwgaWYgaXQgaXMgaW52YWxpZCA6IGZhbHNlLCBhbmQgdGhyb3dzIGlmIHRoZSBzY2hlbWEgaXMgaW52YWxpZFxuICAgKi9cbiAgdmFsaWRhdGUoZGF0YTogYW55LCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIC8qKiBAdG9kbyBXaGVuIFRTIDIuOCwgZXhwbG9yZSBpZiB0aGlzIGlzIHBvc3NpYmxlIHdpdGggY29uZGl0aW9uYWwgdHlwZXMgKi9cbiAgICBpZiAoKCghKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnY29uc3QnKSAmJiBzY2hlbWEuY29uc3QgIT09IHVuZGVmaW5lZClcbiAgICAmJiAhKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnZW51bScpICYmIHNjaGVtYS5lbnVtICE9IG51bGwpICYmICEoc2NoZW1hLmhhc093blByb3BlcnR5KCd0eXBlJykgJiYgc2NoZW1hLnR5cGUgIT0gbnVsbCkpXG4gICAgfHwgc2NoZW1hLnR5cGUgPT09ICdhcnJheScgfHwgc2NoZW1hLnR5cGUgPT09ICdvYmplY3QnKVxuICAgICYmICEoc2NoZW1hLmhhc093blByb3BlcnR5KCdwcm9wZXJ0aWVzJykgJiYgc2NoZW1hLnByb3BlcnRpZXMgIT0gbnVsbCkgICYmICEoc2NoZW1hLmhhc093blByb3BlcnR5KCdpdGVtcycpICYmIHNjaGVtYS5pdGVtcyAhPSBudWxsKSkge1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVhY2ggdmFsdWUgbXVzdCBoYXZlIGEgJ3R5cGUnIG9yICdwcm9wZXJ0aWVzJyBvciAnaXRlbXMnIG9yICdjb25zdCcgb3IgJ2VudW0nLCB0byBlbmZvcmNlIHN0cmljdCB0eXBlcy5gKTtcblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2NvbnN0JykgJiYgc2NoZW1hLmNvbnN0ICE9PSB1bmRlZmluZWQgJiYgKGRhdGEgIT09IHNjaGVtYS5jb25zdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVFbnVtKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVUeXBlKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVJdGVtcyhkYXRhLCBzY2hlbWEpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlUHJvcGVydGllcyhkYXRhLCBzY2hlbWEpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlUmVxdWlyZWQoZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgaXNPYmplY3ROb3ROdWxsKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblxuICAgIHJldHVybiAodmFsdWUgIT09IG51bGwpICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlUHJvcGVydGllcyhkYXRhOiB7IFtrOiBzdHJpbmddOiBhbnk7IH0sIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3Byb3BlcnRpZXMnKSB8fCAoc2NoZW1hLnByb3BlcnRpZXMgPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc09iamVjdE5vdE51bGwoZGF0YSkpIHtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIG9iamVjdCBkb2Vzbid0IGhhdmUgbW9yZSBwcm9wZXJ0aWVzIHRoYW4gZXhwZWN0ZWRcbiAgICAgKiBFcXVpdmFsZW50IG9mIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAqL1xuICAgIGlmIChPYmplY3Qua2V5cyhzY2hlbWEucHJvcGVydGllcykubGVuZ3RoIDwgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoKSB7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIH1cblxuICAgIC8qIFJlY3Vyc2l2ZWx5IHZhbGlkYXRlIGFsbCBwcm9wZXJ0aWVzICovXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBzY2hlbWEucHJvcGVydGllcykge1xuXG4gICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpICYmIGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG5cbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlKGRhdGFbcHJvcGVydHldLCBzY2hlbWEucHJvcGVydGllc1twcm9wZXJ0eV0pKSB7XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlUmVxdWlyZWQoZGF0YToge30sIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3JlcXVpcmVkJykgfHwgKHNjaGVtYS5yZXF1aXJlZCA9PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzT2JqZWN0Tm90TnVsbChkYXRhKSkge1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVpcmVkUHJvcCBvZiBzY2hlbWEucmVxdWlyZWQpIHtcblxuICAgICAgLyogQ2hlY2tzIGlmIHRoZSBwcm9wZXJ0eSBpcyBwcmVzZW50IGluIHRoZSBzY2hlbWEgJ3Byb3BlcnRpZXMnICovXG4gICAgICBpZiAoIXNjaGVtYS5wcm9wZXJ0aWVzIHx8ICFzY2hlbWEucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShyZXF1aXJlZFByb3ApKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAncmVxdWlyZWQnIHByb3BlcnRpZXMgbXVzdCBiZSBkZXNjcmliZWQgaW4gJ3Byb3BlcnRpZXMnIHRvby5gKTtcblxuICAgICAgfVxuXG4gICAgICAvKiBDaGVja3MgaWYgdGhlIHByb3BlcnR5IGlzIHByZXNlbnQgaW4gdGhlIGRhdGEgKi9cbiAgICAgIGlmICghZGF0YS5oYXNPd25Qcm9wZXJ0eShyZXF1aXJlZFByb3ApKSB7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlRW51bShkYXRhOiBhbnksIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2VudW0nKSB8fCAoc2NoZW1hLmVudW0gPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBAdG9kbyBNb3ZlIHRvIEVTMjAxNiAuaW5jbHVkZXMoKSA/ICovXG4gICAgcmV0dXJuIChzY2hlbWEuZW51bS5pbmRleE9mKGRhdGEpICE9PSAtMSk7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZVR5cGUoZGF0YTogYW55LCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIGlmICghc2NoZW1hLmhhc093blByb3BlcnR5KCd0eXBlJykgfHwgKHNjaGVtYS50eXBlID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG5cbiAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICByZXR1cm4gZGF0YSA9PT0gbnVsbDtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlU3RyaW5nKGRhdGEsIHNjaGVtYSk7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlTnVtYmVyKGRhdGEsIHNjaGVtYSk7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbic7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnO1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhKTtcblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVJdGVtcyhkYXRhOiBhbnlbXSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKSB8fCAoc2NoZW1hLml0ZW1zID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWF4SXRlbXMnKSAmJiAoc2NoZW1hLm1heEl0ZW1zICE9IG51bGwpKSB7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihzY2hlbWEubWF4SXRlbXMpIHx8IHNjaGVtYS5tYXhJdGVtcyA8IDApIHtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdtYXhJdGVtcycgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLmApO1xuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmxlbmd0aCA+IHNjaGVtYS5tYXhJdGVtcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtaW5JdGVtcycpICYmIChzY2hlbWEubWluSXRlbXMgIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNjaGVtYS5taW5JdGVtcykgfHwgc2NoZW1hLm1pbkl0ZW1zIDwgMCkge1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ21pbkl0ZW1zJyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuYCk7XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEubGVuZ3RoIDwgc2NoZW1hLm1pbkl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3VuaXF1ZUl0ZW1zJykgJiYgKHNjaGVtYS51bmlxdWVJdGVtcyAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoc2NoZW1hLnVuaXF1ZUl0ZW1zKSB7XG5cbiAgICAgICAgY29uc3QgZGF0YVNldCA9IG5ldyBTZXQoZGF0YSk7XG5cbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoICE9PSBkYXRhU2V0LnNpemUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuXG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUl0ZW1zTGlzdChkYXRhLCBzY2hlbWEpO1xuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkYXRhKSB7XG5cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZSh2YWx1ZSwgc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlSXRlbXNMaXN0KGRhdGE6IGFueSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBjb25zdCBpdGVtcyA9IHNjaGVtYS5pdGVtcyBhcyBKU09OU2NoZW1hW107XG5cbiAgICBpZiAoZGF0YS5sZW5ndGggIT09IGl0ZW1zLmxlbmd0aCkge1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArPSAxKSB7XG5cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZShkYXRhW2ldLCBpdGVtc1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZVN0cmluZyhkYXRhOiBhbnksIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21heExlbmd0aCcpICYmIChzY2hlbWEubWF4TGVuZ3RoICE9IG51bGwpKSB7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihzY2hlbWEubWF4TGVuZ3RoKSB8fCBzY2hlbWEubWF4TGVuZ3RoIDwgMCkge1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ21heExlbmd0aCcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLmApO1xuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmxlbmd0aCA+IHNjaGVtYS5tYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWluTGVuZ3RoJykgJiYgKHNjaGVtYS5taW5MZW5ndGggIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNjaGVtYS5taW5MZW5ndGgpIHx8IHNjaGVtYS5taW5MZW5ndGggPCAwKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnbWluTGVuZ3RoJyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuYCk7XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEubGVuZ3RoIDwgc2NoZW1hLm1pbkxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdwYXR0ZXJuJykgJiYgKHNjaGVtYS5wYXR0ZXJuICE9IG51bGwpKSB7XG5cbiAgICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uID0gbmV3IFJlZ0V4cChzY2hlbWEucGF0dGVybik7XG5cbiAgICAgIGlmICghcmVndWxhckV4cHJlc3Npb24udGVzdChkYXRhKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlTnVtYmVyKGRhdGE6IGFueSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKChzY2hlbWEudHlwZSA9PT0gJ2ludGVnZXInKSAmJiAhTnVtYmVyLmlzSW50ZWdlcihkYXRhKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ211bHRpcGxlT2YnKSAmJiAoc2NoZW1hLm11bHRpcGxlT2YgIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZU9mIDw9IDApIHtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdtdWx0aXBsZU9mJyBtdXN0IGJlIGEgbnVtYmVyIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLmApO1xuXG4gICAgICB9XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihkYXRhIC8gc2NoZW1hLm11bHRpcGxlT2YpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21heGltdW0nKSAmJiAoc2NoZW1hLm1heGltdW0gIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKGRhdGEgPiBzY2hlbWEubWF4aW11bSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdleGNsdXNpdmVNYXhpbXVtJykgJiYgKHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9IG51bGwpKSB7XG5cbiAgICAgIGlmIChkYXRhID49IHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21pbmltdW0nKSAmJiAoc2NoZW1hLm1pbmltdW0gIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKGRhdGEgPCBzY2hlbWEubWluaW11bSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdleGNsdXNpdmVNaW5pbXVtJykgJiYgKHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtICE9IG51bGwpKSB7XG5cbiAgICAgIGlmIChkYXRhIDw9IHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxufVxuIl19

@@ -108,3 +108,3 @@ /**

*/
if (Object.keys(schema.properties).length !== Object.keys(data).length) {
if (Object.keys(schema.properties).length < Object.keys(data).length) {
return false;

@@ -405,2 +405,2 @@ }

export { JSONValidator };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi12YWxpZGF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LXB3YS9sb2NhbC1zdG9yYWdlLyIsInNvdXJjZXMiOlsibGliL3ZhbGlkYXRpb24vanNvbi12YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQU0zQztJQUFBO0tBeVhDO0lBcFhDOzs7Ozs7Ozs7T0FTRzs7Ozs7Ozs7Ozs7SUFDSCxnQ0FBUTs7Ozs7Ozs7OztJQUFSLFVBQVMsSUFBUyxFQUFFLE1BQWtCO1FBRXBDLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztlQUNsRSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7ZUFDbkgsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7ZUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFO1lBRXBJLE1BQU0sSUFBSSxLQUFLLENBQUMseUdBQXlHLENBQUMsQ0FBQztTQUU1SDtRQUVELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFN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SUFBSSxDQUFDLEVBQUU7WUFFaEUsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDekIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUVGO1FBRUQsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLEVBQUU7WUFFbEYsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFO2dCQUNuQyxPQUFPLEtBQUssQ0FBQzthQUNkO1NBRUY7UUFFRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFO1lBRWhFLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3pCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FFRjtRQUVELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxFQUFFO1lBRWxGLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDbkMsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUVGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFFZCxDQUFDOztnQkF2WEYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7O3dCQVJEO0NBK1hDLEFBelhELElBeVhDO1NBdFhZLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKU09OU2NoZW1hIH0gZnJvbSAnLi9qc29uLXNjaGVtYSc7XG5cbi8qKlxuICogQHRvZG8gQWRkIG90aGVyIEpTT04gU2NoZW1hIHZhbGlkYXRpb24gZmVhdHVyZXNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSlNPTlZhbGlkYXRvciB7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgSlNPTiBkYXRhIGFnYWluc3QgYSBKU09OIFNjaGVtYVxuICAgKiBAcGFyYW0gZGF0YSBKU09OIGRhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHNjaGVtYSBTdWJzZXQgb2YgSlNPTiBTY2hlbWEuXG4gICAqIFR5cGVzIGFyZSBlbmZvcmNlZCB0byB2YWxpZGF0ZSBldmVyeXRoaW5nOlxuICAgKiBlYWNoIHZhbHVlIE1VU1QgaGF2ZSAndHlwZScgb3IgJ3Byb3BlcnRpZXMnIG9yICdpdGVtcycgb3IgJ2NvbnN0JyBvciAnZW51bScuXG4gICAqIFRoZXJlZm9yZSwgdW5saWtlIHRoZSBzcGVjLCBib29sZWFucyBhcmUgbm90IGFsbG93ZWQgYXMgc2NoZW1hcy5cbiAgICogTm90IGFsbCB2YWxpZGF0aW9uIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6IGp1c3QgZm9sbG93IHRoZSBpbnRlcmZhY2UuXG4gICAqIEByZXR1cm5zIElmIGRhdGEgaXMgdmFsaWQgOiB0cnVlLCBpZiBpdCBpcyBpbnZhbGlkIDogZmFsc2UsIGFuZCB0aHJvd3MgaWYgdGhlIHNjaGVtYSBpcyBpbnZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZShkYXRhOiBhbnksIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgLyoqIEB0b2RvIFdoZW4gVFMgMi44LCBleHBsb3JlIGlmIHRoaXMgaXMgcG9zc2libGUgd2l0aCBjb25kaXRpb25hbCB0eXBlcyAqL1xuICAgIGlmICgoKCEoc2NoZW1hLmhhc093blByb3BlcnR5KCdjb25zdCcpICYmIHNjaGVtYS5jb25zdCAhPT0gdW5kZWZpbmVkKVxuICAgICYmICEoc2NoZW1hLmhhc093blByb3BlcnR5KCdlbnVtJykgJiYgc2NoZW1hLmVudW0gIT0gbnVsbCkgJiYgIShzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSAmJiBzY2hlbWEudHlwZSAhPSBudWxsKSlcbiAgICB8fCBzY2hlbWEudHlwZSA9PT0gJ2FycmF5JyB8fCBzY2hlbWEudHlwZSA9PT0gJ29iamVjdCcpXG4gICAgJiYgIShzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3Byb3BlcnRpZXMnKSAmJiBzY2hlbWEucHJvcGVydGllcyAhPSBudWxsKSAgJiYgIShzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2l0ZW1zJykgJiYgc2NoZW1hLml0ZW1zICE9IG51bGwpKSB7XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgRWFjaCB2YWx1ZSBtdXN0IGhhdmUgYSAndHlwZScgb3IgJ3Byb3BlcnRpZXMnIG9yICdpdGVtcycgb3IgJ2NvbnN0JyBvciAnZW51bScsIHRvIGVuZm9yY2Ugc3RyaWN0IHR5cGVzLmApO1xuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnY29uc3QnKSAmJiBzY2hlbWEuY29uc3QgIT09IHVuZGVmaW5lZCAmJiAoZGF0YSAhPT0gc2NoZW1hLmNvbnN0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZUVudW0oZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZVR5cGUoZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZUl0ZW1zKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVQcm9wZXJ0aWVzKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVSZXF1aXJlZChkYXRhLCBzY2hlbWEpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBpc09iamVjdE5vdE51bGwodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXG4gICAgcmV0dXJuICh2YWx1ZSAhPT0gbnVsbCkgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVQcm9wZXJ0aWVzKGRhdGE6IHsgW2s6IHN0cmluZ106IGFueTsgfSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgncHJvcGVydGllcycpIHx8IChzY2hlbWEucHJvcGVydGllcyA9PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzT2JqZWN0Tm90TnVsbChkYXRhKSkge1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBtb3JlIHByb3BlcnRpZXMgdGhhbiBleHBlY3RlZFxuICAgICAqIEVxdWl2YWxlbnQgb2YgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICovXG4gICAgaWYgKE9iamVjdC5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCkge1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB9XG5cbiAgICAvKiBSZWN1cnNpdmVseSB2YWxpZGF0ZSBhbGwgcHJvcGVydGllcyAqL1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gc2NoZW1hLnByb3BlcnRpZXMpIHtcblxuICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSAmJiBkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuXG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZShkYXRhW3Byb3BlcnR5XSwgc2NoZW1hLnByb3BlcnRpZXNbcHJvcGVydHldKSkge1xuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZVJlcXVpcmVkKGRhdGE6IHt9LCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIGlmICghc2NoZW1hLmhhc093blByb3BlcnR5KCdyZXF1aXJlZCcpIHx8IChzY2hlbWEucmVxdWlyZWQgPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc09iamVjdE5vdE51bGwoZGF0YSkpIHtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1aXJlZFByb3Agb2Ygc2NoZW1hLnJlcXVpcmVkKSB7XG5cbiAgICAgIC8qIENoZWNrcyBpZiB0aGUgcHJvcGVydHkgaXMgcHJlc2VudCBpbiB0aGUgc2NoZW1hICdwcm9wZXJ0aWVzJyAqL1xuICAgICAgaWYgKCFzY2hlbWEucHJvcGVydGllcyB8fCAhc2NoZW1hLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocmVxdWlyZWRQcm9wKSkge1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ3JlcXVpcmVkJyBwcm9wZXJ0aWVzIG11c3QgYmUgZGVzY3JpYmVkIGluICdwcm9wZXJ0aWVzJyB0b28uYCk7XG5cbiAgICAgIH1cblxuICAgICAgLyogQ2hlY2tzIGlmIHRoZSBwcm9wZXJ0eSBpcyBwcmVzZW50IGluIHRoZSBkYXRhICovXG4gICAgICBpZiAoIWRhdGEuaGFzT3duUHJvcGVydHkocmVxdWlyZWRQcm9wKSkge1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUVudW0oZGF0YTogYW55LCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIGlmICghc2NoZW1hLmhhc093blByb3BlcnR5KCdlbnVtJykgfHwgKHNjaGVtYS5lbnVtID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQHRvZG8gTW92ZSB0byBFUzIwMTYgLmluY2x1ZGVzKCkgPyAqL1xuICAgIHJldHVybiAoc2NoZW1hLmVudW0uaW5kZXhPZihkYXRhKSAhPT0gLTEpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVUeXBlKGRhdGE6IGFueSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgndHlwZScpIHx8IChzY2hlbWEudHlwZSA9PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuXG4gICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgcmV0dXJuIGRhdGEgPT09IG51bGw7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVN0cmluZyhkYXRhLCBzY2hlbWEpO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU51bWJlcihkYXRhLCBzY2hlbWEpO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JztcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YSk7XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlSXRlbXMoZGF0YTogYW55W10sIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2l0ZW1zJykgfHwgKHNjaGVtYS5pdGVtcyA9PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21heEl0ZW1zJykgJiYgKHNjaGVtYS5tYXhJdGVtcyAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc2NoZW1hLm1heEl0ZW1zKSB8fCBzY2hlbWEubWF4SXRlbXMgPCAwKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnbWF4SXRlbXMnIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci5gKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5sZW5ndGggPiBzY2hlbWEubWF4SXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWluSXRlbXMnKSAmJiAoc2NoZW1hLm1pbkl0ZW1zICE9IG51bGwpKSB7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihzY2hlbWEubWluSXRlbXMpIHx8IHNjaGVtYS5taW5JdGVtcyA8IDApIHtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdtaW5JdGVtcycgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLmApO1xuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmxlbmd0aCA8IHNjaGVtYS5taW5JdGVtcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCd1bmlxdWVJdGVtcycpICYmIChzY2hlbWEudW5pcXVlSXRlbXMgIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKHNjaGVtYS51bmlxdWVJdGVtcykge1xuXG4gICAgICAgIGNvbnN0IGRhdGFTZXQgPSBuZXcgU2V0KGRhdGEpO1xuXG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCAhPT0gZGF0YVNldC5zaXplKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5pdGVtcykpIHtcblxuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVJdGVtc0xpc3QoZGF0YSwgc2NoZW1hKTtcblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZGF0YSkge1xuXG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGUodmFsdWUsIHNjaGVtYS5pdGVtcykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUl0ZW1zTGlzdChkYXRhOiBhbnksIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgY29uc3QgaXRlbXMgPSBzY2hlbWEuaXRlbXMgYXMgSlNPTlNjaGVtYVtdO1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoICE9PSBpdGVtcy5sZW5ndGgpIHtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKz0gMSkge1xuXG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGUoZGF0YVtpXSwgaXRlbXNbaV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVTdHJpbmcoZGF0YTogYW55LCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtYXhMZW5ndGgnKSAmJiAoc2NoZW1hLm1heExlbmd0aCAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc2NoZW1hLm1heExlbmd0aCkgfHwgc2NoZW1hLm1heExlbmd0aCA8IDApIHtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdtYXhMZW5ndGgnIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci5gKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5sZW5ndGggPiBzY2hlbWEubWF4TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21pbkxlbmd0aCcpICYmIChzY2hlbWEubWluTGVuZ3RoICE9IG51bGwpKSB7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihzY2hlbWEubWluTGVuZ3RoKSB8fCBzY2hlbWEubWluTGVuZ3RoIDwgMCkge1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ21pbkxlbmd0aCcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLmApO1xuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmxlbmd0aCA8IHNjaGVtYS5taW5MZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgncGF0dGVybicpICYmIChzY2hlbWEucGF0dGVybiAhPSBudWxsKSkge1xuXG4gICAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoc2NoZW1hLnBhdHRlcm4pO1xuXG4gICAgICBpZiAoIXJlZ3VsYXJFeHByZXNzaW9uLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU51bWJlcihkYXRhOiBhbnksIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICgoc2NoZW1hLnR5cGUgPT09ICdpbnRlZ2VyJykgJiYgIU51bWJlci5pc0ludGVnZXIoZGF0YSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtdWx0aXBsZU9mJykgJiYgKHNjaGVtYS5tdWx0aXBsZU9mICE9IG51bGwpKSB7XG5cbiAgICAgIGlmIChzY2hlbWEubXVsdGlwbGVPZiA8PSAwKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnbXVsdGlwbGVPZicgbXVzdCBiZSBhIG51bWJlciBzdHJpY3RseSBncmVhdGVyIHRoYW4gMC5gKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZGF0YSAvIHNjaGVtYS5tdWx0aXBsZU9mKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtYXhpbXVtJykgJiYgKHNjaGVtYS5tYXhpbXVtICE9IG51bGwpKSB7XG5cbiAgICAgIGlmIChkYXRhID4gc2NoZW1hLm1heGltdW0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnZXhjbHVzaXZlTWF4aW11bScpICYmIChzY2hlbWEuZXhjbHVzaXZlTWF4aW11bSAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoZGF0YSA+PSBzY2hlbWEuZXhjbHVzaXZlTWF4aW11bSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtaW5pbXVtJykgJiYgKHNjaGVtYS5taW5pbXVtICE9IG51bGwpKSB7XG5cbiAgICAgIGlmIChkYXRhIDwgc2NoZW1hLm1pbmltdW0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnZXhjbHVzaXZlTWluaW11bScpICYmIChzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoZGF0YSA8PSBzY2hlbWEuZXhjbHVzaXZlTWluaW11bSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi12YWxpZGF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LXB3YS9sb2NhbC1zdG9yYWdlLyIsInNvdXJjZXMiOlsibGliL3ZhbGlkYXRpb24vanNvbi12YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQU0zQztJQUFBO0tBeVhDO0lBcFhDOzs7Ozs7Ozs7T0FTRzs7Ozs7Ozs7Ozs7SUFDSCxnQ0FBUTs7Ozs7Ozs7OztJQUFSLFVBQVMsSUFBUyxFQUFFLE1BQWtCO1FBRXBDLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztlQUNsRSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7ZUFDbkgsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7ZUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFO1lBRXBJLE1BQU0sSUFBSSxLQUFLLENBQUMseUdBQXlHLENBQUMsQ0FBQztTQUU1SDtRQUVELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFN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SUFBSSxDQUFDLEVBQUU7WUFFaEUsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDekIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUVGO1FBRUQsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLEVBQUU7WUFFbEYsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFO2dCQUNuQyxPQUFPLEtBQUssQ0FBQzthQUNkO1NBRUY7UUFFRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFO1lBRWhFLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3pCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FFRjtRQUVELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxFQUFFO1lBRWxGLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDbkMsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUVGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFFZCxDQUFDOztnQkF2WEYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7O3dCQVJEO0NBK1hDLEFBelhELElBeVhDO1NBdFhZLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKU09OU2NoZW1hIH0gZnJvbSAnLi9qc29uLXNjaGVtYSc7XG5cbi8qKlxuICogQHRvZG8gQWRkIG90aGVyIEpTT04gU2NoZW1hIHZhbGlkYXRpb24gZmVhdHVyZXNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSlNPTlZhbGlkYXRvciB7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgSlNPTiBkYXRhIGFnYWluc3QgYSBKU09OIFNjaGVtYVxuICAgKiBAcGFyYW0gZGF0YSBKU09OIGRhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHNjaGVtYSBTdWJzZXQgb2YgSlNPTiBTY2hlbWEuXG4gICAqIFR5cGVzIGFyZSBlbmZvcmNlZCB0byB2YWxpZGF0ZSBldmVyeXRoaW5nOlxuICAgKiBlYWNoIHZhbHVlIE1VU1QgaGF2ZSAndHlwZScgb3IgJ3Byb3BlcnRpZXMnIG9yICdpdGVtcycgb3IgJ2NvbnN0JyBvciAnZW51bScuXG4gICAqIFRoZXJlZm9yZSwgdW5saWtlIHRoZSBzcGVjLCBib29sZWFucyBhcmUgbm90IGFsbG93ZWQgYXMgc2NoZW1hcy5cbiAgICogTm90IGFsbCB2YWxpZGF0aW9uIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6IGp1c3QgZm9sbG93IHRoZSBpbnRlcmZhY2UuXG4gICAqIEByZXR1cm5zIElmIGRhdGEgaXMgdmFsaWQgOiB0cnVlLCBpZiBpdCBpcyBpbnZhbGlkIDogZmFsc2UsIGFuZCB0aHJvd3MgaWYgdGhlIHNjaGVtYSBpcyBpbnZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZShkYXRhOiBhbnksIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgLyoqIEB0b2RvIFdoZW4gVFMgMi44LCBleHBsb3JlIGlmIHRoaXMgaXMgcG9zc2libGUgd2l0aCBjb25kaXRpb25hbCB0eXBlcyAqL1xuICAgIGlmICgoKCEoc2NoZW1hLmhhc093blByb3BlcnR5KCdjb25zdCcpICYmIHNjaGVtYS5jb25zdCAhPT0gdW5kZWZpbmVkKVxuICAgICYmICEoc2NoZW1hLmhhc093blByb3BlcnR5KCdlbnVtJykgJiYgc2NoZW1hLmVudW0gIT0gbnVsbCkgJiYgIShzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSAmJiBzY2hlbWEudHlwZSAhPSBudWxsKSlcbiAgICB8fCBzY2hlbWEudHlwZSA9PT0gJ2FycmF5JyB8fCBzY2hlbWEudHlwZSA9PT0gJ29iamVjdCcpXG4gICAgJiYgIShzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3Byb3BlcnRpZXMnKSAmJiBzY2hlbWEucHJvcGVydGllcyAhPSBudWxsKSAgJiYgIShzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2l0ZW1zJykgJiYgc2NoZW1hLml0ZW1zICE9IG51bGwpKSB7XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgRWFjaCB2YWx1ZSBtdXN0IGhhdmUgYSAndHlwZScgb3IgJ3Byb3BlcnRpZXMnIG9yICdpdGVtcycgb3IgJ2NvbnN0JyBvciAnZW51bScsIHRvIGVuZm9yY2Ugc3RyaWN0IHR5cGVzLmApO1xuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnY29uc3QnKSAmJiBzY2hlbWEuY29uc3QgIT09IHVuZGVmaW5lZCAmJiAoZGF0YSAhPT0gc2NoZW1hLmNvbnN0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZUVudW0oZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZVR5cGUoZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZUl0ZW1zKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVQcm9wZXJ0aWVzKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVSZXF1aXJlZChkYXRhLCBzY2hlbWEpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBpc09iamVjdE5vdE51bGwodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXG4gICAgcmV0dXJuICh2YWx1ZSAhPT0gbnVsbCkgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVQcm9wZXJ0aWVzKGRhdGE6IHsgW2s6IHN0cmluZ106IGFueTsgfSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgncHJvcGVydGllcycpIHx8IChzY2hlbWEucHJvcGVydGllcyA9PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzT2JqZWN0Tm90TnVsbChkYXRhKSkge1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBtb3JlIHByb3BlcnRpZXMgdGhhbiBleHBlY3RlZFxuICAgICAqIEVxdWl2YWxlbnQgb2YgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICovXG4gICAgaWYgKE9iamVjdC5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzKS5sZW5ndGggPCBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGgpIHtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgLyogUmVjdXJzaXZlbHkgdmFsaWRhdGUgYWxsIHByb3BlcnRpZXMgKi9cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHNjaGVtYS5wcm9wZXJ0aWVzKSB7XG5cbiAgICAgIGlmIChzY2hlbWEucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiYgZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGUoZGF0YVtwcm9wZXJ0eV0sIHNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSkpIHtcblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVSZXF1aXJlZChkYXRhOiB7fSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgncmVxdWlyZWQnKSB8fCAoc2NoZW1hLnJlcXVpcmVkID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNPYmplY3ROb3ROdWxsKGRhdGEpKSB7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVxdWlyZWRQcm9wIG9mIHNjaGVtYS5yZXF1aXJlZCkge1xuXG4gICAgICAvKiBDaGVja3MgaWYgdGhlIHByb3BlcnR5IGlzIHByZXNlbnQgaW4gdGhlIHNjaGVtYSAncHJvcGVydGllcycgKi9cbiAgICAgIGlmICghc2NoZW1hLnByb3BlcnRpZXMgfHwgIXNjaGVtYS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHJlcXVpcmVkUHJvcCkpIHtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdyZXF1aXJlZCcgcHJvcGVydGllcyBtdXN0IGJlIGRlc2NyaWJlZCBpbiAncHJvcGVydGllcycgdG9vLmApO1xuXG4gICAgICB9XG5cbiAgICAgIC8qIENoZWNrcyBpZiB0aGUgcHJvcGVydHkgaXMgcHJlc2VudCBpbiB0aGUgZGF0YSAqL1xuICAgICAgaWYgKCFkYXRhLmhhc093blByb3BlcnR5KHJlcXVpcmVkUHJvcCkpIHtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVFbnVtKGRhdGE6IGFueSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnZW51bScpIHx8IChzY2hlbWEuZW51bSA9PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEB0b2RvIE1vdmUgdG8gRVMyMDE2IC5pbmNsdWRlcygpID8gKi9cbiAgICByZXR1cm4gKHNjaGVtYS5lbnVtLmluZGV4T2YoZGF0YSkgIT09IC0xKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlVHlwZShkYXRhOiBhbnksIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSB8fCAoc2NoZW1hLnR5cGUgPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcblxuICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgIHJldHVybiBkYXRhID09PSBudWxsO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVTdHJpbmcoZGF0YSwgc2NoZW1hKTtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVOdW1iZXIoZGF0YSwgc2NoZW1hKTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdib29sZWFuJztcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCc7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEpO1xuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUl0ZW1zKGRhdGE6IGFueVtdLCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIGlmICghc2NoZW1hLmhhc093blByb3BlcnR5KCdpdGVtcycpIHx8IChzY2hlbWEuaXRlbXMgPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtYXhJdGVtcycpICYmIChzY2hlbWEubWF4SXRlbXMgIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNjaGVtYS5tYXhJdGVtcykgfHwgc2NoZW1hLm1heEl0ZW1zIDwgMCkge1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ21heEl0ZW1zJyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuYCk7XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEubGVuZ3RoID4gc2NoZW1hLm1heEl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21pbkl0ZW1zJykgJiYgKHNjaGVtYS5taW5JdGVtcyAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc2NoZW1hLm1pbkl0ZW1zKSB8fCBzY2hlbWEubWluSXRlbXMgPCAwKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnbWluSXRlbXMnIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci5gKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5sZW5ndGggPCBzY2hlbWEubWluSXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgndW5pcXVlSXRlbXMnKSAmJiAoc2NoZW1hLnVuaXF1ZUl0ZW1zICE9IG51bGwpKSB7XG5cbiAgICAgIGlmIChzY2hlbWEudW5pcXVlSXRlbXMpIHtcblxuICAgICAgICBjb25zdCBkYXRhU2V0ID0gbmV3IFNldChkYXRhKTtcblxuICAgICAgICBpZiAoZGF0YS5sZW5ndGggIT09IGRhdGFTZXQuc2l6ZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG5cbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSXRlbXNMaXN0KGRhdGEsIHNjaGVtYSk7XG5cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGRhdGEpIHtcblxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlKHZhbHVlLCBzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVJdGVtc0xpc3QoZGF0YTogYW55LCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIGNvbnN0IGl0ZW1zID0gc2NoZW1hLml0ZW1zIGFzIEpTT05TY2hlbWFbXTtcblxuICAgIGlmIChkYXRhLmxlbmd0aCAhPT0gaXRlbXMubGVuZ3RoKSB7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IDEpIHtcblxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlKGRhdGFbaV0sIGl0ZW1zW2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlU3RyaW5nKGRhdGE6IGFueSwgc2NoZW1hOiBKU09OU2NoZW1hKTogYm9vbGVhbiB7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWF4TGVuZ3RoJykgJiYgKHNjaGVtYS5tYXhMZW5ndGggIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNjaGVtYS5tYXhMZW5ndGgpIHx8IHNjaGVtYS5tYXhMZW5ndGggPCAwKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnbWF4TGVuZ3RoJyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuYCk7XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEubGVuZ3RoID4gc2NoZW1hLm1heExlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtaW5MZW5ndGgnKSAmJiAoc2NoZW1hLm1pbkxlbmd0aCAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc2NoZW1hLm1pbkxlbmd0aCkgfHwgc2NoZW1hLm1pbkxlbmd0aCA8IDApIHtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdtaW5MZW5ndGgnIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci5gKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5sZW5ndGggPCBzY2hlbWEubWluTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ3BhdHRlcm4nKSAmJiAoc2NoZW1hLnBhdHRlcm4gIT0gbnVsbCkpIHtcblxuICAgICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKHNjaGVtYS5wYXR0ZXJuKTtcblxuICAgICAgaWYgKCFyZWd1bGFyRXhwcmVzc2lvbi50ZXN0KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVOdW1iZXIoZGF0YTogYW55LCBzY2hlbWE6IEpTT05TY2hlbWEpOiBib29sZWFuIHtcblxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKHNjaGVtYS50eXBlID09PSAnaW50ZWdlcicpICYmICFOdW1iZXIuaXNJbnRlZ2VyKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbXVsdGlwbGVPZicpICYmIChzY2hlbWEubXVsdGlwbGVPZiAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoc2NoZW1hLm11bHRpcGxlT2YgPD0gMCkge1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ211bHRpcGxlT2YnIG11c3QgYmUgYSBudW1iZXIgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuYCk7XG5cbiAgICAgIH1cblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRhdGEgLyBzY2hlbWEubXVsdGlwbGVPZikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWF4aW11bScpICYmIChzY2hlbWEubWF4aW11bSAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoZGF0YSA+IHNjaGVtYS5tYXhpbXVtKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2V4Y2x1c2l2ZU1heGltdW0nKSAmJiAoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKGRhdGEgPj0gc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWluaW11bScpICYmIChzY2hlbWEubWluaW11bSAhPSBudWxsKSkge1xuXG4gICAgICBpZiAoZGF0YSA8IHNjaGVtYS5taW5pbXVtKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2V4Y2x1c2l2ZU1pbmltdW0nKSAmJiAoc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gIT0gbnVsbCkpIHtcblxuICAgICAgaWYgKGRhdGEgPD0gc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG59XG4iXX0=
{
"name": "@ngx-pwa/local-storage",
"version": "7.2.0",
"version": "7.2.1",
"description": "Efficient local storage module for Angular apps and PWA: simple API based on native localStorage API, but internally stored via the asynchronous IndexedDB API for performance, and wrapped in RxJS observables to be homogeneous with other Angular modules.",

@@ -5,0 +5,0 @@ "author": "Cyrille Tuzi",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc