@drincs/pixi-vn 1.5.13 → 1.5.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -3
- package/dist/canvas.cjs +3 -2
- package/dist/canvas.d.cts +46 -105
- package/dist/canvas.d.ts +46 -105
- package/dist/canvas.mjs +3 -2
- package/dist/characters.cjs +2 -1
- package/dist/characters.mjs +2 -1
- package/dist/chunk-46QBDRUK.mjs +2 -0
- package/dist/chunk-52EK6LYW.mjs +2 -0
- package/dist/chunk-INJYRMJ3.mjs +2 -0
- package/dist/{chunk-TTRUPDAB.mjs → chunk-JJFD2BVW.mjs} +2 -1
- package/dist/chunk-JJFD2BVW.mjs.map +1 -0
- package/dist/chunk-OXRIVLY2.mjs +2 -0
- package/dist/chunk-SOFV7YZ5.mjs +2 -0
- package/dist/chunk-XZMYXKAY.mjs +2 -0
- package/dist/core.cjs +1 -0
- package/dist/core.d.cts +399 -0
- package/dist/core.d.ts +399 -0
- package/dist/core.mjs +1 -0
- package/dist/history.cjs +2 -1
- package/dist/history.d.cts +1 -1
- package/dist/history.d.ts +1 -1
- package/dist/history.mjs +2 -1
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +9 -10
- package/dist/index.d.ts +9 -10
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -0
- package/dist/motion.cjs +2 -0
- package/dist/motion.cjs.map +1 -0
- package/dist/motion.d.cts +96 -0
- package/dist/motion.d.ts +96 -0
- package/dist/motion.mjs +2 -0
- package/dist/motion.mjs.map +1 -0
- package/dist/narration.cjs +3 -2
- package/dist/narration.mjs +3 -2
- package/dist/pixi/browser.js +170 -167
- package/dist/sound.cjs +2 -1
- package/dist/sound.mjs +2 -1
- package/dist/storage.cjs +2 -1
- package/dist/storage.mjs +2 -1
- package/dist/vite-listener.cjs +2 -1
- package/dist/vite-listener.cjs.map +1 -0
- package/dist/vite-listener.mjs +2 -1
- package/dist/vite-listener.mjs.map +1 -0
- package/dist/vite.cjs +2 -1
- package/dist/vite.cjs.map +1 -0
- package/dist/vite.mjs +2 -1
- package/dist/vite.mjs.map +1 -0
- package/package.json +27 -10
- package/dist/chunk-6GO4XVS7.mjs +0 -1
- package/dist/chunk-6IVCTY6P.mjs +0 -1
- package/dist/chunk-GNJIUFU2.mjs +0 -1
- package/dist/chunk-HVEJJGVC.mjs +0 -1
- package/dist/chunk-XDBHD3IV.mjs +0 -1
- package/dist/chunk-XSN6P5JL.mjs +0 -0
- package/dist/unifier.cjs +0 -1
- package/dist/unifier.mjs +0 -1
package/dist/characters.mjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import {b}from'./chunk-
|
|
1
|
+
import {b}from'./chunk-XZMYXKAY.mjs';import {a as a$1}from'./chunk-OXRIVLY2.mjs';import {a}from'./chunk-INJYRMJ3.mjs';import {j,d}from'./chunk-46QBDRUK.mjs';var l="@",s=class extends b{constructor(e,r=""){super(a$1.CHARACTER_CATEGORY_KEY,e+(r?l+r:""));d(this,"sourceId");this.sourceId=e;}getStorageProperty(e){let r=super.getStorageProperty(e);return r===void 0&&(r=super.getStorageProperty(e,this.sourceId)),r}};var u=class extends s{constructor(e,r){super(typeof e=="string"?e:e.id,typeof e=="string"?"":e.emotion);d(this,"defaultName");d(this,"defaultSurname");d(this,"defaultAge");d(this,"_icon");d(this,"_color");this.defaultName=r.name,this.defaultSurname=r.surname,this.defaultAge=r.age,this._icon=r.icon,this._color=r.color;}get name(){return this.getStorageProperty("name")||this.defaultName||this.id}set name(e){this.setStorageProperty("name",e);}get surname(){return this.getStorageProperty("surname")||this.defaultSurname}set surname(e){this.setStorageProperty("surname",e);}get age(){return this.getStorageProperty("age")||this.defaultAge}set age(e){this.setStorageProperty("age",e);}get icon(){return this._icon}get color(){return this._color}};var i=new a({cacheSize:10}),f;(S=>{function d(t){try{let a=i.get(t);if(!a){j.warn(`Character "${t}" not found, did you forget to register it with the RegisteredCharacters.add?`);return}return a}catch(a){j.error(`Error while getting Character "${t}"`,a);return}}S.get=d;function g(t){if(Array.isArray(t)){t.forEach(a=>g(a));return}i.get(t.id)&&j.info(`Character id "${t.id}" already exists, it will be overwritten`),i.set(t.id,t);}S.add=g;function e(){return Array.from(i.values())}S.values=e;function r(t){return i.has(t)}S.has=r;function C(){return Array.from(i.keys())}S.keys=C;})(f||(f={}));var p=f;export{u as CharacterBaseModel,s as CharacterStoredClass,p as RegisteredCharacters};//# sourceMappingURL=characters.mjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jaGFyYWN0ZXJzL2NsYXNzZXMvQ2hhcmFjdGVyU3RvcmVkQ2xhc3MudHMiLCIuLi9zcmMvY2hhcmFjdGVycy9jbGFzc2VzL0NoYXJhY3RlckJhc2VNb2RlbC50cyIsIi4uL3NyYy9jaGFyYWN0ZXJzL2RlY29yYXRvcnMvY2hhcmFjdGVyLWRlY29yYXRvci50cyJdLCJuYW1lcyI6WyJFTU9USU9OX1NFUEFSQVRPUiIsIkNoYXJhY3RlclN0b3JlZENsYXNzIiwiU3RvcmVkQ2xhc3NNb2RlbCIsImlkIiwiZW1vdGlvbiIsIlNZU1RFTV9SRVNFUlZFRF9TVE9SQUdFX0tFWVMiLCJfX3B1YmxpY0ZpZWxkIiwicHJvcGVydHlOYW1lIiwidmFsdWUiLCJDaGFyYWN0ZXJCYXNlTW9kZWwiLCJwcm9wcyIsInJlZ2lzdGVyZWRDaGFyYWN0ZXJzIiwiQ2FjaGVkTWFwIiwiUmVnaXN0ZXJlZENoYXJhY3RlcnMiLCJnZXQiLCJjaGFyYWN0ZXIiLCJsb2dnZXIiLCJlIiwiYWRkIiwiYyIsInZhbHVlcyIsImhhcyIsImtleXMiLCJjaGFyYWN0ZXJfZGVjb3JhdG9yX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI2SkFFQSxJQUFNQSxFQUFvQixHQUFBLENBQ0xDLENBQUFBLENBQXJCLGNBQWtEQyxDQUFpQixDQUUvRCxXQUFBLENBQVlDLENBQUFBLENBQVlDLENBQUFBLENBQWtCLEVBQUEsQ0FBSSxDQUMxQyxLQUFBLENBQU1DLEdBQUFBLENBQTZCLHNCQUFBLENBQXdCRixDQUFBQSxFQUFNQyxFQUFVSixDQUFBQSxDQUFvQkksQ0FBQUEsQ0FBVSxFQUFBLENBQUcsQ0FBQSxDQUZoSEUsRUFBQSxJQUFBLENBQVEsVUFBQSxDQUFBLENBR0osSUFBQSxDQUFLLFFBQUEsQ0FBV0gsRUFDcEIsQ0FFUyxrQkFBQSxDQUFzQkksQ0FBQUEsQ0FBcUMsQ0FDaEUsSUFBSUMsQ0FBQUEsQ0FBUSxLQUFBLENBQU0sbUJBQXNCRCxDQUFZLENBQUEsQ0FDcEQsT0FBSUMsQ0FBQUEsR0FB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LENBQUMsRUFDL0IsTUFDSixDQUNJUixDQUFBQSxDQUFxQixHQUFBLENBQUlJLEVBQVUsRUFBRSxDQUFBLEVBQ3JDQyxDQUFBQSxDQUFPLElBQUEsQ0FBSyxpQkFBaUJELENBQUFBLENBQVUsRUFBRSxDQUFBLHdDQUFBLENBQTBDLENBQUEsQ0FFdkZKLEVBQXFCLEdBQUEsQ0FBSUksQ0FBQUEsQ0FBVSxFQUFBLENBQUlBLENBQVMsRUFDcEQsQ0FUT0YsQ0FBQUEsQ0FBUyxJQUFBSyxDQUFBQSxDQW1CVCxTQUFTRSxHQUE0QyxDQUN4RCxPQUFPLEtBQUEsQ0FBTSxJQUFBLENBQUtULEVBQXFCLE1BQUEsRUFBUSxDQUNuRCxDQUZPRSxFQUFTLE1BQUEsQ0FBQU8sQ0FBQUEsQ0FTVCxTQUFTQyxDQUFBQSxDQUFJbEIsRUFBcUIsQ0FDckMsT0FBT1EsRUFBcUIsR0FBQSxDQUFJUixDQUFFLENBQ3RDLENBRk9VLENBQUFBLENBQVMsR0FBQSxDQUFBUSxDQUFBQSxDQVFULFNBQVNDLENBQUFBLEVBQWlCLENBQzdCLE9BQU8sS0FBQSxDQUFNLEtBQUtYLENBQUFBLENBQXFCLElBQUEsRUFBTSxDQUNqRCxDQUZPRSxDQUFBQSxDQUFTLElBQUEsQ0FBQVMsS0F6RVZULENBQUFBLEdBQUFBLENBQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsS0E2RUhVLENBQUFBLENBQVFWIiwiZmlsZSI6ImNoYXJhY3RlcnMubWpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RvcmVkQ2xhc3NNb2RlbCwgU1lTVEVNX1JFU0VSVkVEX1NUT1JBR0VfS0VZUyB9IGZyb20gXCIuLi8uLi9zdG9yYWdlXCI7XG5cbmNvbnN0IEVNT1RJT05fU0VQQVJBVE9SID0gXCJAXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFyYWN0ZXJTdG9yZWRDbGFzcyBleHRlbmRzIFN0b3JlZENsYXNzTW9kZWwge1xuICAgIHByaXZhdGUgc291cmNlSWQ6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBlbW90aW9uOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgICAgIHN1cGVyKFNZU1RFTV9SRVNFUlZFRF9TVE9SQUdFX0tFWVMuQ0hBUkFDVEVSX0NBVEVHT1JZX0tFWSwgaWQgKyAoZW1vdGlvbiA/IEVNT1RJT05fU0VQQVJBVE9SICsgZW1vdGlvbiA6IFwiXCIpKTtcbiAgICAgICAgdGhpcy5zb3VyY2VJZCA9IGlkO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGdldFN0b3JhZ2VQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgdmFsdWUgPSBzdXBlci5nZXRTdG9yYWdlUHJvcGVydHk8VD4ocHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhbHVlID0gc3VwZXIuZ2V0U3RvcmFnZVByb3BlcnR5PFQ+KHByb3BlcnR5TmFtZSwgdGhpcy5zb3VyY2VJZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGRlZmF1bHQgYXMgUmVnaXN0ZXJlZENoYXJhY3RlcnMgfSBmcm9tIFwiLi4vZGVjb3JhdG9ycy9jaGFyYWN0ZXItZGVjb3JhdG9yXCI7XG5pbXBvcnQgQ2hhcmFjdGVyQmFzZU1vZGVsUHJvcHMgZnJvbSBcIi4uL2ludGVyZmFjZXMvQ2hhcmFjdGVyQmFzZU1vZGVsUHJvcHNcIjtcbmltcG9ydCBDaGFyYWN0ZXJTdG9yZWRDbGFzcyBmcm9tIFwiLi9DaGFyYWN0ZXJTdG9yZWRDbGFzc1wiO1xuXG4vKipcbiAqIENoYXJhY3RlckJhc2VNb2RlbCBpcyBhIGNsYXNzIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgYSBjaGFyYWN0ZXIgbW9kZWwuXG4gKiBZb3UgbXVzdCB1c2UgdGhlIHtAbGluayBSZWdpc3RlcmVkQ2hhcmFjdGVycy5hZGR9IGZ1bmN0aW9uIHRvIHNhdmUgdGhlIGNoYXJhY3RlciBpbiB0aGUgZ2FtZS5cbiAqIEl0IGlzIHJhY2NvbWVuZGVkIHRvIGNyZWF0ZSB5b3VyIG93biBjbGFzcyBDaGFyYWN0ZXIsIHJlYWQgbW9yZSBoZXJlOiBodHRwczovL3BpeGktdm4ud2ViLmFwcC9zdGFydC9jaGFyYWN0ZXIuaHRtbCNjdXN0b20tY2hhcmFjdGVyXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNvbnN0IGxpYW0gPSBuZXcgQ2hhcmFjdGVyQmFzZU1vZGVsKCdsaWFtJywge1xuICogICAgIG5hbWU6ICdMaWFtJyxcbiAqICAgICBzdXJuYW1lOiAnU21pdGgnLFxuICogICAgIGFnZTogMjUsXG4gKiAgICAgaWNvbjogXCJodHRwczovL3BpeGlqcy5jb20vYXNzZXRzL2VnZ0hlYWQucG5nXCIsXG4gKiAgICAgY29sb3I6IFwiIzllMmUxMlwiXG4gKiB9KTtcbiAqIGV4cG9ydCBjb25zdCBhbGljZSA9IG5ldyBDaGFyYWN0ZXJCYXNlTW9kZWwoJ2FsaWNlJywge1xuICogICAgIG5hbWU6ICdBbGljZScsXG4gKiAgICAgc3VybmFtZTogJ1NtaXRoJyxcbiAqICAgICBhZ2U6IDI1LFxuICogICAgIGljb246IFwiaHR0cHM6Ly9waXhpanMuY29tL2Fzc2V0cy9lZ2dIZWFkLnBuZ1wiLFxuICogICAgIGNvbG9yOiBcIiM5ZTJlMTJcIlxuICogfSk7XG4gKiBSZWdpc3RlcmVkQ2hhcmFjdGVycy5hZGQoW2xpYW0sIGFsaWNlXSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhcmFjdGVyQmFzZU1vZGVsIGV4dGVuZHMgQ2hhcmFjdGVyU3RvcmVkQ2xhc3Mge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIGNoYXJhY3Rlci5cbiAgICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIGNoYXJhY3Rlci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nIHwgeyBpZDogc3RyaW5nOyBlbW90aW9uOiBzdHJpbmcgfSwgcHJvcHM6IENoYXJhY3RlckJhc2VNb2RlbFByb3BzKSB7XG4gICAgICAgIHN1cGVyKHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IGlkIDogaWQuaWQsIHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IFwiXCIgOiBpZC5lbW90aW9uKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0TmFtZSA9IHByb3BzLm5hbWU7XG4gICAgICAgIHRoaXMuZGVmYXVsdFN1cm5hbWUgPSBwcm9wcy5zdXJuYW1lO1xuICAgICAgICB0aGlzLmRlZmF1bHRBZ2UgPSBwcm9wcy5hZ2U7XG4gICAgICAgIHRoaXMuX2ljb24gPSBwcm9wcy5pY29uO1xuICAgICAgICB0aGlzLl9jb2xvciA9IHByb3BzLmNvbG9yO1xuICAgIH1cbiAgICBwcml2YXRlIGRlZmF1bHROYW1lPzogc3RyaW5nO1xuICAgIC8qKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY2hhcmFjdGVyLlxuICAgICAqIElmIHlvdSBzZXQgdW5kZWZpbmVkLCBpdCB3aWxsIHJldHVybiB0aGUgZGVmYXVsdCBuYW1lLlxuICAgICAqL1xuICAgIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0b3JhZ2VQcm9wZXJ0eTxzdHJpbmc+KFwibmFtZVwiKSB8fCB0aGlzLmRlZmF1bHROYW1lIHx8IHRoaXMuaWQ7XG4gICAgfVxuICAgIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yYWdlUHJvcGVydHk8c3RyaW5nPihcIm5hbWVcIiwgdmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIGRlZmF1bHRTdXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBzdXJuYW1lIG9mIHRoZSBjaGFyYWN0ZXIuXG4gICAgICogSWYgeW91IHNldCB1bmRlZmluZWQsIGl0IHdpbGwgcmV0dXJuIHRoZSBkZWZhdWx0IHN1cm5hbWUuXG4gICAgICovXG4gICAgZ2V0IHN1cm5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmFnZVByb3BlcnR5PHN0cmluZz4oXCJzdXJuYW1lXCIpIHx8IHRoaXMuZGVmYXVsdFN1cm5hbWU7XG4gICAgfVxuICAgIHNldCBzdXJuYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yYWdlUHJvcGVydHk8c3RyaW5nPihcInN1cm5hbWVcIiwgdmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIGRlZmF1bHRBZ2U/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVGhlIGFnZSBvZiB0aGUgY2hhcmFjdGVyLlxuICAgICAqIElmIHlvdSBzZXQgdW5kZWZpbmVkLCBpdCB3aWxsIHJldHVybiB0aGUgZGVmYXVsdCBhZ2UuXG4gICAgICovXG4gICAgZ2V0IGFnZSgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdG9yYWdlUHJvcGVydHk8bnVtYmVyPihcImFnZVwiKSB8fCB0aGlzLmRlZmF1bHRBZ2U7XG4gICAgfVxuICAgIHNldCBhZ2UodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JhZ2VQcm9wZXJ0eTxudW1iZXI+KFwiYWdlXCIsIHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaWNvbj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgaWNvbiBvZiB0aGUgY2hhcmFjdGVyLlxuICAgICAqL1xuICAgIGdldCBpY29uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uO1xuICAgIH1cbiAgICBwcml2YXRlIF9jb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3Igb2YgdGhlIGNoYXJhY3Rlci5cbiAgICAgKi9cbiAgICBnZXQgY29sb3IoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IENoYXJhY3RlckludGVyZmFjZSB9IGZyb20gXCJAZHJpbmNzL3BpeGktdm5cIjtcbmltcG9ydCB7IENhY2hlZE1hcCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbG9nLXV0aWxpdHlcIjtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyZWRDaGFyYWN0ZXJzID0gbmV3IENhY2hlZE1hcDxzdHJpbmcsIENoYXJhY3RlckludGVyZmFjZT4oeyBjYWNoZVNpemU6IDEwIH0pO1xuXG5uYW1lc3BhY2UgUmVnaXN0ZXJlZENoYXJhY3RlcnMge1xuICAgIC8qKlxuICAgICAqIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIgYnkgdGhlIGlkXG4gICAgICogQHBhcmFtIGlkIGlzIHRoZSBpZCBvZiB0aGUgY2hhcmFjdGVyXG4gICAgICogQHJldHVybnMgdGhlIGNoYXJhY3RlclxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGxpYW0gPSBSZWdpc3RlcmVkQ2hhcmFjdGVycy5nZXQoJ2xpYW0nKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gZ2V0PFQgPSBDaGFyYWN0ZXJJbnRlcmZhY2U+KGlkOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBjaGFyYWN0ZXIgPSByZWdpc3RlcmVkQ2hhcmFjdGVycy5nZXQoaWQpO1xuICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXIpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgICAgICAgICAgYENoYXJhY3RlciBcIiR7aWR9XCIgbm90IGZvdW5kLCBkaWQgeW91IGZvcmdldCB0byByZWdpc3RlciBpdCB3aXRoIHRoZSBSZWdpc3RlcmVkQ2hhcmFjdGVycy5hZGQ/YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlciBhcyBUO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIHdoaWxlIGdldHRpbmcgQ2hhcmFjdGVyIFwiJHtpZH1cImAsIGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXMgYSBmdW5jdGlvbiB0aGF0IHNhdmVzIHRoZSBjaGFyYWN0ZXIuIElmIHRoZSBjaGFyYWN0ZXIgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAgICogQHBhcmFtIGNoYXJhY3RlciBpcyB0aGUgY2hhcmFjdGVyIHRvIHNhdmVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGV4cG9ydCBjb25zdCBsaWFtID0gbmV3IENoYXJhY3RlckJhc2VNb2RlbCgnbGlhbScsIHsgbmFtZTogJ0xpYW0nfSk7XG4gICAgICogZXhwb3J0IGNvbnN0IGFsaWNlID0gbmV3IENoYXJhY3RlckJhc2VNb2RlbCgnYWxpY2UnLCB7IG5hbWU6ICdBbGljZSd9KTtcbiAgICAgKiBSZWdpc3RlcmVkQ2hhcmFjdGVycy5hZGQoW2xpYW0sIGFsaWNlXSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGFkZChjaGFyYWN0ZXI6IENoYXJhY3RlckludGVyZmFjZSB8IENoYXJhY3RlckludGVyZmFjZVtdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoYXJhY3RlcikpIHtcbiAgICAgICAgICAgIGNoYXJhY3Rlci5mb3JFYWNoKChjKSA9PiBhZGQoYykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWdpc3RlcmVkQ2hhcmFjdGVycy5nZXQoY2hhcmFjdGVyLmlkKSkge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYENoYXJhY3RlciBpZCBcIiR7Y2hhcmFjdGVyLmlkfVwiIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJlZENoYXJhY3RlcnMuc2V0KGNoYXJhY3Rlci5pZCwgY2hhcmFjdGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbGwgY2hhcmFjdGVyc1xuICAgICAqIEByZXR1cm5zIGFsbCBjaGFyYWN0ZXJzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgYWxsQ2hhcmFjdGVycyA9IFJlZ2lzdGVyZWRDaGFyYWN0ZXJzLnZhbHVlcygpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB2YWx1ZXM8VCBleHRlbmRzIENoYXJhY3RlckludGVyZmFjZT4oKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20ocmVnaXN0ZXJlZENoYXJhY3RlcnMudmFsdWVzKCkpIGFzIFRbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIGNoYXJhY3RlciBpcyByZWdpc3RlcmVkLlxuICAgICAqIEBwYXJhbSBpZCBpcyB0aGUgaWQgb2YgdGhlIGNoYXJhY3RlclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNoYXJhY3RlciBleGlzdHMsIGZhbHNlIG90aGVyd2lzZVxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBoYXMoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJlZENoYXJhY3RlcnMuaGFzKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBsaXN0IG9mIGFsbCBjaGFyYWN0ZXIgaWRzIHJlZ2lzdGVyZWQuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgbGFiZWwgaWRzLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBrZXlzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20ocmVnaXN0ZXJlZENoYXJhY3RlcnMua2V5cygpKTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBSZWdpc3RlcmVkQ2hhcmFjdGVycztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {PixiError}from'@drincs/pixi-vn/core';var y=Object.create;var p=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var m=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var s=r=>{throw TypeError(r)};var E=(r,o,n)=>o in r?p(r,o,{enumerable:true,configurable:true,writable:true,value:n}):r[o]=n;var V=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(o,n)=>(typeof require<"u"?require:o)[n]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var $=(r,o)=>()=>(o||r((o={exports:{}}).exports,o),o.exports);var P=(r,o,n,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of l(o))!N.call(r,e)&&e!==n&&p(r,e,{get:()=>o[e],enumerable:!(t=f(o,e))||t.enumerable});return r};var S=(r,o,n)=>(n=r!=null?y(m(r)):{},P(o||!r||!r.__esModule?p(n,"default",{value:r,enumerable:true}):n,r));var T=(r,o,n)=>E(r,typeof o!="symbol"?o+"":o,n),x=(r,o,n)=>o.has(r)||s("Cannot "+n);var b=(r,o,n)=>(x(r,o,"read from private field"),n?n.call(r):o.get(r)),d=(r,o,n)=>o.has(r)?s("Cannot add the same private member more than once"):o instanceof WeakSet?o.add(r):o.set(r,n),u=(r,o,n,t)=>(x(r,o,"write to private field"),t?t.call(r,n):o.set(r,n),n),h=(r,o,n)=>(x(r,o,"access private method"),n);var J=(r,o,n,t)=>({set _(e){u(r,o,e,n);},get _(){return b(r,o,t)}});var c;(e=>(e.log=(i,...a)=>console.log(`[Pixi\u2019VN] ${i}`,...a),e.warn=(i,...a)=>console.warn(`[Pixi\u2019VN] ${i}`,...a),e.error=(i,...a)=>console.error(`[Pixi\u2019VN] ${i}`,...a),e.info=(i,...a)=>console.info(`[Pixi\u2019VN] ${i}`,...a)))(c||(c={}));function k(r){try{if(typeof r>"u")return r;let o=JSON.stringify(r);return JSON.parse(o)}catch(o){throw c.error("Error creating exportable element",r,o),new PixiError("not_json_serializable","Error creating exportable element")}}export{V as a,$ as b,S as c,T as d,b as e,d as f,u as g,h,J as i,c as j,k};//# sourceMappingURL=chunk-46QBDRUK.mjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9sb2ctdXRpbGl0eS50cyIsIi4uL3NyYy91dGlscy9leHBvcnQtdXRpbGl0eS50cyJdLCJuYW1lcyI6WyJsb2dnZXIiLCJtZXNzYWdlIiwib3B0aW9uYWxQYXJhbXMiLCJjcmVhdGVFeHBvcnRhYmxlRWxlbWVudCIsImVsZW1lbnQiLCJlbGVtZW50U3RyaW5nIiwiZSIsIlBpeGlFcnJvciJdLCJtYXBwaW5ncyI6InczQ0FBTyxJQUFVQSxFQUFBQSxDQUFBQSxDQUFBQSxHQUNBQSxFQUFBLEdBQUEsQ0FBTSxDQUFDQyxLQUFrQkMsQ0FBQUEsR0FDbEMsT0FBQSxDQUFRLElBQUksQ0FBQSxlQUFBLEVBQWFELENBQU8sR0FBSSxHQUFHQyxDQUFjLEVBQzVDRixDQUFBQSxDQUFBLElBQUEsQ0FBTyxDQUFDQyxDQUFBQSxDQUFBQSxHQUFrQkMsQ0FBQUEsR0FDbkMsT0FBQSxDQUFRLElBQUEsQ0FBSyxDQUFBLGVBQUEsRUFBYUQsQ0FBTyxHQUFJLEdBQUdDLENBQWMsRUFDN0NGLENBQUFBLENBQUEsS0FBQSxDQUFRLENBQUNDLENBQUFBLENBQUFBLEdBQWtCQyxDQUFBQSxHQUNwQyxRQUFRLEtBQUEsQ0FBTSxDQUFBLGVBQUEsRUFBYUQsQ0FBTyxDQUFBLENBQUEsQ0FBSSxHQUFHQyxDQUFjLENBQUEsQ0FDOUNGLENBQUFBLENBQUEsS0FBTyxDQUFDQyxDQUFBQSxDQUFBQSxHQUFrQkMsQ0FBQUEsR0FDbkMsT0FBQSxDQUFRLElBQUEsQ0FBSyxDQUFBLGVBQUEsRUFBYUQsQ0FBTyxDQUFBLENBQUEsQ0FBSSxHQUFHQyxDQUFjLENBQUEsQ0FBQSxFQVI3Q0YsQ0FBQUEsR0FBQUEsQ0FBQUEsQ0FBQSxLQ1FWLFNBQVNHLEVBQTJCQyxDQUFBQSxDQUFlLENBQ3RELEdBQUksQ0FDQSxHQUFJLE9BQU9BLENBQUFBLENBQVksR0FBQSxDQUNuQixPQUFPQSxDQUFBQSxDQUVYLElBQUlDLENBQUFBLENBQWdCLEtBQUssU0FBQSxDQUFVRCxDQUFPLEVBQzFDLE9BQU8sSUFBQSxDQUFLLE1BQU1DLENBQWEsQ0FDbkMsQ0FBQSxNQUFTQyxDQUFBQSxDQUFHLENBQ1IsTUFBQU4sRUFBTyxLQUFBLENBQU0sbUNBQUEsQ0FBcUNJLEVBQVNFLENBQUMsQ0FBQSxDQUN0RCxJQUFJQyxTQUFBQSxDQUFVLHVCQUFBLENBQXlCLG1DQUFtQyxDQUNwRixDQUNKIiwiZmlsZSI6ImNodW5rLTQ2UUJEUlVLLm1qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBuYW1lc3BhY2UgbG9nZ2VyIHtcbiAgICBleHBvcnQgY29uc3QgbG9nID0gKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT5cbiAgICAgICAgY29uc29sZS5sb2coYFtQaXhp4oCZVk5dICR7bWVzc2FnZX1gLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgZXhwb3J0IGNvbnN0IHdhcm4gPSAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PlxuICAgICAgICBjb25zb2xlLndhcm4oYFtQaXhp4oCZVk5dICR7bWVzc2FnZX1gLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgZXhwb3J0IGNvbnN0IGVycm9yID0gKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT5cbiAgICAgICAgY29uc29sZS5lcnJvcihgW1BpeGnigJlWTl0gJHttZXNzYWdlfWAsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgICBleHBvcnQgY29uc3QgaW5mbyA9IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW1BpeGnigJlWTl0gJHttZXNzYWdlfWAsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbn1cbiIsImltcG9ydCB7IFBpeGlFcnJvciB9IGZyb20gXCJAZHJpbmNzL3BpeGktdm4vY29yZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nLXV0aWxpdHlcIjtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIGEgZGVlcCBjb3B5IG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBiZSBjb3BpZWRcbiAqIEByZXR1cm5zIFRoZSBjb3BpZWQgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXhwb3J0YWJsZUVsZW1lbnQ8VD4oZWxlbWVudDogVCk6IFQge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVsZW1lbnRTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZWxlbWVudFN0cmluZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBjcmVhdGluZyBleHBvcnRhYmxlIGVsZW1lbnRcIiwgZWxlbWVudCwgZSk7XG4gICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJub3RfanNvbl9zZXJpYWxpemFibGVcIiwgXCJFcnJvciBjcmVhdGluZyBleHBvcnRhYmxlIGVsZW1lbnRcIik7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {d,f,e,g,h,i}from'./chunk-46QBDRUK.mjs';var kt=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Gt=new Set,zt=typeof process=="object"&&process?process:{},Mt=(_,e,i,s)=>{typeof zt.emitWarning=="function"?zt.emitWarning(_,e,i,s):console.error(`[${i}] ${e}: ${_}`);},Ft=globalThis.AbortController,Dt=globalThis.AbortSignal;if(typeof Ft>"u"){Dt=class{constructor(){d(this,"onabort");d(this,"_onabort",[]);d(this,"reason");d(this,"aborted",false);}addEventListener(i,s){this._onabort.push(s);}},Ft=class{constructor(){d(this,"signal",new Dt);e();}abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=true;for(let s of this.signal._onabort)s(i);this.signal.onabort?.(i);}}};let _=zt.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",e=()=>{_&&(_=false,Mt("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e));};}var Ht=_=>!Gt.has(_);var tt=_=>_&&_===Math.floor(_)&&_>0&&isFinite(_),jt=_=>tt(_)?_<=Math.pow(2,8)?Uint8Array:_<=Math.pow(2,16)?Uint16Array:_<=Math.pow(2,32)?Uint32Array:_<=Number.MAX_SAFE_INTEGER?yt:null:null,yt=class extends Array{constructor(_){super(_),this.fill(0);}},J,ft,Vt=(J=class{constructor(e$1,i){d(this,"heap");d(this,"length");if(!e(J,ft))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new i(e$1),this.length=0;}static create(e){let i=jt(e);if(!i)return [];g(J,ft,true);let s=new J(e,i);return g(J,ft,false),s}push(e){this.heap[this.length++]=e;}pop(){return this.heap[--this.length]}},ft=new WeakMap,f(J,ft,false),J),Lt,Ut,k,U,H,ot,V,ct,dt,K,F,P,O,b,c,W,G,x,E,B,T,$,q,M,j,X,ht,D,gt,o,xt,rt,Q,St,I,Nt,nt,pt,bt,et,it,Ct,At,Ot,S,Rt,vt,st,Wt,wt,It=(wt=class{constructor(e$1){f(this,o);f(this,k);f(this,U);f(this,H);f(this,ot);f(this,V);f(this,ct);f(this,dt);f(this,K);d(this,"ttl");d(this,"ttlResolution");d(this,"ttlAutopurge");d(this,"updateAgeOnGet");d(this,"updateAgeOnHas");d(this,"allowStale");d(this,"noDisposeOnSet");d(this,"noUpdateTTL");d(this,"maxEntrySize");d(this,"sizeCalculation");d(this,"noDeleteOnFetchRejection");d(this,"noDeleteOnStaleGet");d(this,"allowStaleOnFetchAbort");d(this,"allowStaleOnFetchRejection");d(this,"ignoreFetchAbort");f(this,F);f(this,P);f(this,O);f(this,b);f(this,c);f(this,W);f(this,G);f(this,x);f(this,E);f(this,B);f(this,T);f(this,$);f(this,q);f(this,M);f(this,j);f(this,X);f(this,ht);f(this,D);f(this,gt);f(this,rt,()=>{});f(this,Q,()=>{});f(this,St,()=>{});f(this,I,()=>false);f(this,nt,e=>{});f(this,pt,(e,i,s)=>{});f(this,bt,(e,i,s,h)=>{if(s||h)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0});d(this,Lt,"LRUCache");let{max:i=0,ttl:s,ttlResolution:h$1=1,ttlAutopurge:n,updateAgeOnGet:r,updateAgeOnHas:a,allowStale:u,dispose:p,onInsert:z,disposeAfter:w,noDisposeOnSet:Z,noUpdateTTL:N,maxSize:Y=0,maxEntrySize:y=0,sizeCalculation:v,fetchMethod:d$1,memoMethod:C,noDeleteOnFetchRejection:L,noDeleteOnStaleGet:R,allowStaleOnFetchRejection:A,allowStaleOnFetchAbort:mt,ignoreFetchAbort:lt,perf:at}=e$1;if(at!==void 0&&typeof at?.now!="function")throw new TypeError("perf option must have a now() method if specified");if(g(this,K,at??kt),i!==0&&!tt(i))throw new TypeError("max option must be a nonnegative integer");let ut=i?jt(i):Array;if(!ut)throw new Error("invalid max value: "+i);if(g(this,k,i),g(this,U,Y),this.maxEntrySize=y||e(this,U),this.sizeCalculation=v,this.sizeCalculation){if(!e(this,U)&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(C!==void 0&&typeof C!="function")throw new TypeError("memoMethod must be a function if defined");if(g(this,dt,C),d$1!==void 0&&typeof d$1!="function")throw new TypeError("fetchMethod must be a function if specified");if(g(this,ct,d$1),g(this,ht,!!d$1),g(this,O,new Map),g(this,b,new Array(i).fill(void 0)),g(this,c,new Array(i).fill(void 0)),g(this,W,new ut(i)),g(this,G,new ut(i)),g(this,x,0),g(this,E,0),g(this,B,Vt.create(i)),g(this,F,0),g(this,P,0),typeof p=="function"&&g(this,H,p),typeof z=="function"&&g(this,ot,z),typeof w=="function"?(g(this,V,w),g(this,T,[])):(g(this,V,void 0),g(this,T,void 0)),g(this,X,!!e(this,H)),g(this,gt,!!e(this,ot)),g(this,D,!!e(this,V)),this.noDisposeOnSet=!!Z,this.noUpdateTTL=!!N,this.noDeleteOnFetchRejection=!!L,this.allowStaleOnFetchRejection=!!A,this.allowStaleOnFetchAbort=!!mt,this.ignoreFetchAbort=!!lt,this.maxEntrySize!==0){if(e(this,U)!==0&&!tt(e(this,U)))throw new TypeError("maxSize must be a positive integer if specified");if(!tt(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");h(this,o,Nt).call(this);}if(this.allowStale=!!u,this.noDeleteOnStaleGet=!!R,this.updateAgeOnGet=!!r,this.updateAgeOnHas=!!a,this.ttlResolution=tt(h$1)||h$1===0?h$1:1,this.ttlAutopurge=!!n,this.ttl=s||0,this.ttl){if(!tt(this.ttl))throw new TypeError("ttl must be a positive integer if specified");h(this,o,xt).call(this);}if(e(this,k)===0&&this.ttl===0&&e(this,U)===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!e(this,k)&&!e(this,U)){let Tt="LRU_CACHE_UNBOUNDED";Ht(Tt)&&(Gt.add(Tt),Mt("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",Tt,wt));}}get perf(){return e(this,K)}static unsafeExposeInternals(e$1){return {starts:e(e$1,q),ttls:e(e$1,M),autopurgeTimers:e(e$1,j),sizes:e(e$1,$),keyMap:e(e$1,O),keyList:e(e$1,b),valList:e(e$1,c),next:e(e$1,W),prev:e(e$1,G),get head(){return e(e$1,x)},get tail(){return e(e$1,E)},free:e(e$1,B),isBackgroundFetch:i=>{var s;return h(s=e$1,o,S).call(s,i)},backgroundFetch:(i,s,h$1,n)=>{var r;return h(r=e$1,o,Ot).call(r,i,s,h$1,n)},moveToTail:i=>{var s;return h(s=e$1,o,vt).call(s,i)},indexes:i=>{var s;return h(s=e$1,o,et).call(s,i)},rindexes:i=>{var s;return h(s=e$1,o,it).call(s,i)},isStale:i=>{var s;return e(s=e$1,I).call(s,i)}}}get max(){return e(this,k)}get maxSize(){return e(this,U)}get calculatedSize(){return e(this,P)}get size(){return e(this,F)}get fetchMethod(){return e(this,ct)}get memoMethod(){return e(this,dt)}get dispose(){return e(this,H)}get onInsert(){return e(this,ot)}get disposeAfter(){return e(this,V)}getRemainingTTL(e$1){return e(this,O).has(e$1)?1/0:0}*entries(){for(let e$1 of h(this,o,et).call(this))e(this,c)[e$1]!==void 0&&e(this,b)[e$1]!==void 0&&!h(this,o,S).call(this,e(this,c)[e$1])&&(yield [e(this,b)[e$1],e(this,c)[e$1]]);}*rentries(){for(let e$1 of h(this,o,it).call(this))e(this,c)[e$1]!==void 0&&e(this,b)[e$1]!==void 0&&!h(this,o,S).call(this,e(this,c)[e$1])&&(yield [e(this,b)[e$1],e(this,c)[e$1]]);}*keys(){for(let e$1 of h(this,o,et).call(this)){let i=e(this,b)[e$1];i!==void 0&&!h(this,o,S).call(this,e(this,c)[e$1])&&(yield i);}}*rkeys(){for(let e$1 of h(this,o,it).call(this)){let i=e(this,b)[e$1];i!==void 0&&!h(this,o,S).call(this,e(this,c)[e$1])&&(yield i);}}*values(){for(let e$1 of h(this,o,et).call(this))e(this,c)[e$1]!==void 0&&!h(this,o,S).call(this,e(this,c)[e$1])&&(yield e(this,c)[e$1]);}*rvalues(){for(let e$1 of h(this,o,it).call(this))e(this,c)[e$1]!==void 0&&!h(this,o,S).call(this,e(this,c)[e$1])&&(yield e(this,c)[e$1]);}[(Ut=Symbol.iterator,Lt=Symbol.toStringTag,Ut)](){return this.entries()}find(e$1,i={}){for(let s of h(this,o,et).call(this)){let h$1=e(this,c)[s],n=h(this,o,S).call(this,h$1)?h$1.__staleWhileFetching:h$1;if(n!==void 0&&e$1(n,e(this,b)[s],this))return this.get(e(this,b)[s],i)}}forEach(e$1,i=this){for(let s of h(this,o,et).call(this)){let h$1=e(this,c)[s],n=h(this,o,S).call(this,h$1)?h$1.__staleWhileFetching:h$1;n!==void 0&&e$1.call(i,n,e(this,b)[s],this);}}rforEach(e$1,i=this){for(let s of h(this,o,it).call(this)){let h$1=e(this,c)[s],n=h(this,o,S).call(this,h$1)?h$1.__staleWhileFetching:h$1;n!==void 0&&e$1.call(i,n,e(this,b)[s],this);}}purgeStale(){let e$1=false;for(let i of h(this,o,it).call(this,{allowStale:true}))e(this,I).call(this,i)&&(h(this,o,st).call(this,e(this,b)[i],"expire"),e$1=true);return e$1}info(e$1){let i=e(this,O).get(e$1);if(i===void 0)return;let s=e(this,c)[i],h$1=h(this,o,S).call(this,s)?s.__staleWhileFetching:s;if(h$1===void 0)return;let n={value:h$1};if(e(this,M)&&e(this,q)){let r=e(this,M)[i],a=e(this,q)[i];if(r&&a){let u=r-(e(this,K).now()-a);n.ttl=u,n.start=Date.now();}}return e(this,$)&&(n.size=e(this,$)[i]),n}dump(){let e$1=[];for(let i of h(this,o,et).call(this,{allowStale:true})){let s=e(this,b)[i],h$1=e(this,c)[i],n=h(this,o,S).call(this,h$1)?h$1.__staleWhileFetching:h$1;if(n===void 0||s===void 0)continue;let r={value:n};if(e(this,M)&&e(this,q)){r.ttl=e(this,M)[i];let a=e(this,K).now()-e(this,q)[i];r.start=Math.floor(Date.now()-a);}e(this,$)&&(r.size=e(this,$)[i]),e$1.unshift([s,r]);}return e$1}load(e$1){this.clear();for(let[i,s]of e$1){if(s.start){let h=Date.now()-s.start;s.start=e(this,K).now()-h;}this.set(i,s.value,s);}}set(e$1,i$1,s={}){var Z,N,Y,y;if(i$1===void 0)return this.delete(e$1),this;let{ttl:h$1=this.ttl,start:n,noDisposeOnSet:r=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:u}=s,{noUpdateTTL:p=this.noUpdateTTL}=s,z=e(this,bt).call(this,e$1,i$1,s.size||0,a);if(this.maxEntrySize&&z>this.maxEntrySize)return u&&(u.set="miss",u.maxEntrySizeExceeded=true),h(this,o,st).call(this,e$1,"set"),this;let w=e(this,F)===0?void 0:e(this,O).get(e$1);if(w===void 0)w=e(this,F)===0?e(this,E):e(this,B).length!==0?e(this,B).pop():e(this,F)===e(this,k)?h(this,o,At).call(this,false):e(this,F),e(this,b)[w]=e$1,e(this,c)[w]=i$1,e(this,O).set(e$1,w),e(this,W)[e(this,E)]=w,e(this,G)[w]=e(this,E),g(this,E,w),i(this,F)._++,e(this,pt).call(this,w,z,u),u&&(u.set="add"),p=false,e(this,gt)&&((Z=e(this,ot))==null||Z.call(this,i$1,e$1,"add"));else {h(this,o,vt).call(this,w);let v=e(this,c)[w];if(i$1!==v){if(e(this,ht)&&h(this,o,S).call(this,v)){v.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:d}=v;d!==void 0&&!r&&(e(this,X)&&((N=e(this,H))==null||N.call(this,d,e$1,"set")),e(this,D)&&e(this,T)?.push([d,e$1,"set"]));}else r||(e(this,X)&&((Y=e(this,H))==null||Y.call(this,v,e$1,"set")),e(this,D)&&e(this,T)?.push([v,e$1,"set"]));if(e(this,nt).call(this,w),e(this,pt).call(this,w,z,u),e(this,c)[w]=i$1,u){u.set="replace";let d=v&&h(this,o,S).call(this,v)?v.__staleWhileFetching:v;d!==void 0&&(u.oldValue=d);}}else u&&(u.set="update");e(this,gt)&&this.onInsert?.(i$1,e$1,i$1===v?"update":"replace");}if(h$1!==0&&!e(this,M)&&h(this,o,xt).call(this),e(this,M)&&(p||e(this,St).call(this,w,h$1,n),u&&e(this,Q).call(this,u,w)),!r&&e(this,D)&&e(this,T)){let v=e(this,T),d;for(;d=v?.shift();)(y=e(this,V))==null||y.call(this,...d);}return this}pop(){var e$1;try{for(;e(this,F);){let i=e(this,c)[e(this,x)];if(h(this,o,At).call(this,!0),h(this,o,S).call(this,i)){if(i.__staleWhileFetching)return i.__staleWhileFetching}else if(i!==void 0)return i}}finally{if(e(this,D)&&e(this,T)){let i=e(this,T),s;for(;s=i?.shift();)(e$1=e(this,V))==null||e$1.call(this,...s);}}}has(e$1,i={}){let{updateAgeOnHas:s=this.updateAgeOnHas,status:h$1}=i,n=e(this,O).get(e$1);if(n!==void 0){let r=e(this,c)[n];if(h(this,o,S).call(this,r)&&r.__staleWhileFetching===void 0)return false;if(e(this,I).call(this,n))h$1&&(h$1.has="stale",e(this,Q).call(this,h$1,n));else return s&&e(this,rt).call(this,n),h$1&&(h$1.has="hit",e(this,Q).call(this,h$1,n)),true}else h$1&&(h$1.has="miss");return false}peek(e$1,i={}){let{allowStale:s=this.allowStale}=i,h$1=e(this,O).get(e$1);if(h$1===void 0||!s&&e(this,I).call(this,h$1))return;let n=e(this,c)[h$1];return h(this,o,S).call(this,n)?n.__staleWhileFetching:n}async fetch(e$1,i={}){let{allowStale:s=this.allowStale,updateAgeOnGet:h$1=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:r=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:u=0,sizeCalculation:p=this.sizeCalculation,noUpdateTTL:z=this.noUpdateTTL,noDeleteOnFetchRejection:w=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:Z=this.allowStaleOnFetchRejection,ignoreFetchAbort:N=this.ignoreFetchAbort,allowStaleOnFetchAbort:Y=this.allowStaleOnFetchAbort,context:y,forceRefresh:v=false,status:d,signal:C}=i;if(!e(this,ht))return d&&(d.fetch="get"),this.get(e$1,{allowStale:s,updateAgeOnGet:h$1,noDeleteOnStaleGet:n,status:d});let L={allowStale:s,updateAgeOnGet:h$1,noDeleteOnStaleGet:n,ttl:r,noDisposeOnSet:a,size:u,sizeCalculation:p,noUpdateTTL:z,noDeleteOnFetchRejection:w,allowStaleOnFetchRejection:Z,allowStaleOnFetchAbort:Y,ignoreFetchAbort:N,status:d,signal:C},R=e(this,O).get(e$1);if(R===void 0){d&&(d.fetch="miss");let A=h(this,o,Ot).call(this,e$1,R,L,y);return A.__returned=A}else {let A=e(this,c)[R];if(h(this,o,S).call(this,A)){let ut=s&&A.__staleWhileFetching!==void 0;return d&&(d.fetch="inflight",ut&&(d.returnedStale=true)),ut?A.__staleWhileFetching:A.__returned=A}let mt=e(this,I).call(this,R);if(!v&&!mt)return d&&(d.fetch="hit"),h(this,o,vt).call(this,R),h$1&&e(this,rt).call(this,R),d&&e(this,Q).call(this,d,R),A;let lt=h(this,o,Ot).call(this,e$1,R,L,y),at=lt.__staleWhileFetching!==void 0&&s;return d&&(d.fetch=mt?"stale":"refresh",at&&mt&&(d.returnedStale=true)),at?lt.__staleWhileFetching:lt.__returned=lt}}async forceFetch(e,i={}){let s=await this.fetch(e,i);if(s===void 0)throw new Error("fetch() returned undefined");return s}memo(e$1,i={}){let s=e(this,dt);if(!s)throw new Error("no memoMethod provided to constructor");let{context:h,forceRefresh:n,...r}=i,a=this.get(e$1,r);if(!n&&a!==void 0)return a;let u=s(e$1,a,{options:r,context:h});return this.set(e$1,u,r),u}get(e$1,i={}){let{allowStale:s=this.allowStale,updateAgeOnGet:h$1=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:r}=i,a=e(this,O).get(e$1);if(a!==void 0){let u=e(this,c)[a],p=h(this,o,S).call(this,u);return r&&e(this,Q).call(this,r,a),e(this,I).call(this,a)?(r&&(r.get="stale"),p?(r&&s&&u.__staleWhileFetching!==void 0&&(r.returnedStale=true),s?u.__staleWhileFetching:void 0):(n||h(this,o,st).call(this,e$1,"expire"),r&&s&&(r.returnedStale=true),s?u:void 0)):(r&&(r.get="hit"),p?u.__staleWhileFetching:(h(this,o,vt).call(this,a),h$1&&e(this,rt).call(this,a),u))}else r&&(r.get="miss");}delete(e){return h(this,o,st).call(this,e,"delete")}clear(){return h(this,o,Wt).call(this,"delete")}},k=new WeakMap,U=new WeakMap,H=new WeakMap,ot=new WeakMap,V=new WeakMap,ct=new WeakMap,dt=new WeakMap,K=new WeakMap,F=new WeakMap,P=new WeakMap,O=new WeakMap,b=new WeakMap,c=new WeakMap,W=new WeakMap,G=new WeakMap,x=new WeakMap,E=new WeakMap,B=new WeakMap,T=new WeakMap,$=new WeakMap,q=new WeakMap,M=new WeakMap,j=new WeakMap,X=new WeakMap,ht=new WeakMap,D=new WeakMap,gt=new WeakMap,o=new WeakSet,xt=function(){let e$1=new yt(e(this,k)),i=new yt(e(this,k));g(this,M,e$1),g(this,q,i);let s=this.ttlAutopurge?new Array(e(this,k)):void 0;g(this,j,s),g(this,St,(a,u,p=e(this,K).now())=>{i[a]=u!==0?p:0,e$1[a]=u,h$1(a,u);}),g(this,rt,a=>{i[a]=e$1[a]!==0?e(this,K).now():0,h$1(a,e$1[a]);});let h$1=this.ttlAutopurge?(a,u)=>{if(s?.[a]&&(clearTimeout(s[a]),s[a]=void 0),u&&u!==0&&s){let p=setTimeout(()=>{e(this,I).call(this,a)&&h(this,o,st).call(this,e(this,b)[a],"expire");},u+1);p.unref&&p.unref(),s[a]=p;}}:()=>{};g(this,Q,(a,u)=>{if(e$1[u]){let p=e$1[u],z=i[u];if(!p||!z)return;a.ttl=p,a.start=z,a.now=n||r();let w=a.now-z;a.remainingTTL=p-w;}});let n=0,r=()=>{let a=e(this,K).now();if(this.ttlResolution>0){n=a;let u=setTimeout(()=>n=0,this.ttlResolution);u.unref&&u.unref();}return a};this.getRemainingTTL=a=>{let u=e(this,O).get(a);if(u===void 0)return 0;let p=e$1[u],z=i[u];if(!p||!z)return 1/0;let w=(n||r())-z;return p-w},g(this,I,a=>{let u=i[a],p=e$1[a];return !!p&&!!u&&(n||r())-u>p});},rt=new WeakMap,Q=new WeakMap,St=new WeakMap,I=new WeakMap,Nt=function(){let e$1=new yt(e(this,k));g(this,P,0),g(this,$,e$1),g(this,nt,i=>{g(this,P,e(this,P)-e$1[i]),e$1[i]=0;}),g(this,bt,(i,s,h$1,n)=>{if(h(this,o,S).call(this,s))return 0;if(!tt(h$1))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(h$1=n(s,i),!tt(h$1))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return h$1}),g(this,pt,(i,s,h$1)=>{if(e$1[i]=s,e(this,U)){let n=e(this,U)-e$1[i];for(;e(this,P)>n;)h(this,o,At).call(this,true);}g(this,P,e(this,P)+e$1[i]),h$1&&(h$1.entrySize=s,h$1.totalCalculatedSize=e(this,P));});},nt=new WeakMap,pt=new WeakMap,bt=new WeakMap,et=function*({allowStale:e$1=this.allowStale}={}){if(e(this,F))for(let i=e(this,E);!(!h(this,o,Ct).call(this,i)||((e$1||!e(this,I).call(this,i))&&(yield i),i===e(this,x)));)i=e(this,G)[i];},it=function*({allowStale:e$1=this.allowStale}={}){if(e(this,F))for(let i=e(this,x);!(!h(this,o,Ct).call(this,i)||((e$1||!e(this,I).call(this,i))&&(yield i),i===e(this,E)));)i=e(this,W)[i];},Ct=function(e$1){return e$1!==void 0&&e(this,O).get(e(this,b)[e$1])===e$1},At=function(e$1){var n;let i$1=e(this,x),s=e(this,b)[i$1],h$1=e(this,c)[i$1];return e(this,ht)&&h(this,o,S).call(this,h$1)?h$1.__abortController.abort(new Error("evicted")):(e(this,X)||e(this,D))&&(e(this,X)&&((n=e(this,H))==null||n.call(this,h$1,s,"evict")),e(this,D)&&e(this,T)?.push([h$1,s,"evict"])),e(this,nt).call(this,i$1),e(this,j)?.[i$1]&&(clearTimeout(e(this,j)[i$1]),e(this,j)[i$1]=void 0),e$1&&(e(this,b)[i$1]=void 0,e(this,c)[i$1]=void 0,e(this,B).push(i$1)),e(this,F)===1?(g(this,x,g(this,E,0)),e(this,B).length=0):g(this,x,e(this,W)[i$1]),e(this,O).delete(s),i(this,F)._--,i$1},Ot=function(e$1,i,s,h$1){let n=i===void 0?void 0:e(this,c)[i];if(h(this,o,S).call(this,n))return n;let r=new Ft,{signal:a}=s;a?.addEventListener("abort",()=>r.abort(a.reason),{signal:r.signal});let u={signal:r.signal,options:s,context:h$1},p=(y,v=false)=>{let{aborted:d}=r.signal,C=s.ignoreFetchAbort&&y!==void 0,L=s.ignoreFetchAbort||!!(s.allowStaleOnFetchAbort&&y!==void 0);if(s.status&&(d&&!v?(s.status.fetchAborted=true,s.status.fetchError=r.signal.reason,C&&(s.status.fetchAbortIgnored=true)):s.status.fetchResolved=true),d&&!C&&!v)return w(r.signal.reason,L);let R=N,A=e(this,c)[i];return (A===N||C&&v&&A===void 0)&&(y===void 0?R.__staleWhileFetching!==void 0?e(this,c)[i]=R.__staleWhileFetching:h(this,o,st).call(this,e$1,"fetch"):(s.status&&(s.status.fetchUpdated=true),this.set(e$1,y,u.options))),y},z=y=>(s.status&&(s.status.fetchRejected=true,s.status.fetchError=y),w(y,false)),w=(y,v)=>{let{aborted:d}=r.signal,C=d&&s.allowStaleOnFetchAbort,L=C||s.allowStaleOnFetchRejection,R=L||s.noDeleteOnFetchRejection,A=N;if(e(this,c)[i]===N&&(!R||!v&&A.__staleWhileFetching===void 0?h(this,o,st).call(this,e$1,"fetch"):C||(e(this,c)[i]=A.__staleWhileFetching)),L)return s.status&&A.__staleWhileFetching!==void 0&&(s.status.returnedStale=true),A.__staleWhileFetching;if(A.__returned===A)throw y},Z=(y,v)=>{var C;let d=(C=e(this,ct))==null?void 0:C.call(this,e$1,n,u);d&&d instanceof Promise&&d.then(L=>y(L===void 0?void 0:L),v),r.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(y(void 0),s.allowStaleOnFetchAbort&&(y=L=>p(L,true)));});};s.status&&(s.status.fetchDispatched=true);let N=new Promise(Z).then(p,z),Y=Object.assign(N,{__abortController:r,__staleWhileFetching:n,__returned:void 0});return i===void 0?(this.set(e$1,Y,{...u.options,status:void 0}),i=e(this,O).get(e$1)):e(this,c)[i]=Y,Y},S=function(e$1){if(!e(this,ht))return false;let i=e$1;return !!i&&i instanceof Promise&&i.hasOwnProperty("__staleWhileFetching")&&i.__abortController instanceof Ft},Rt=function(e$1,i){e(this,G)[i]=e$1,e(this,W)[e$1]=i;},vt=function(e$1){e$1!==e(this,E)&&(e$1===e(this,x)?g(this,x,e(this,W)[e$1]):h(this,o,Rt).call(this,e(this,G)[e$1],e(this,W)[e$1]),h(this,o,Rt).call(this,e(this,E),e$1),g(this,E,e$1));},st=function(e$1,i$1){var h$1,n;let s=false;if(e(this,F)!==0){let r=e(this,O).get(e$1);if(r!==void 0)if(e(this,j)?.[r]&&(clearTimeout(e(this,j)?.[r]),e(this,j)[r]=void 0),s=true,e(this,F)===1)h(this,o,Wt).call(this,i$1);else {e(this,nt).call(this,r);let a=e(this,c)[r];if(h(this,o,S).call(this,a)?a.__abortController.abort(new Error("deleted")):(e(this,X)||e(this,D))&&(e(this,X)&&((h$1=e(this,H))==null||h$1.call(this,a,e$1,i$1)),e(this,D)&&e(this,T)?.push([a,e$1,i$1])),e(this,O).delete(e$1),e(this,b)[r]=void 0,e(this,c)[r]=void 0,r===e(this,E))g(this,E,e(this,G)[r]);else if(r===e(this,x))g(this,x,e(this,W)[r]);else {let u=e(this,G)[r];e(this,W)[u]=e(this,W)[r];let p=e(this,W)[r];e(this,G)[p]=e(this,G)[r];}i(this,F)._--,e(this,B).push(r);}}if(e(this,D)&&e(this,T)?.length){let r=e(this,T),a;for(;a=r?.shift();)(n=e(this,V))==null||n.call(this,...a);}return s},Wt=function(e$1){var i,s;for(let h$1 of h(this,o,it).call(this,{allowStale:true})){let n=e(this,c)[h$1];if(h(this,o,S).call(this,n))n.__abortController.abort(new Error("deleted"));else {let r=e(this,b)[h$1];e(this,X)&&((i=e(this,H))==null||i.call(this,n,r,e$1)),e(this,D)&&e(this,T)?.push([n,r,e$1]);}}if(e(this,O).clear(),e(this,c).fill(void 0),e(this,b).fill(void 0),e(this,M)&&e(this,q)){e(this,M).fill(0),e(this,q).fill(0);for(let h of e(this,j)??[])h!==void 0&&clearTimeout(h);e(this,j)?.fill(void 0);}if(e(this,$)&&e(this,$).fill(0),g(this,x,0),g(this,E,0),e(this,B).length=0,g(this,P,0),g(this,F,0),e(this,D)&&e(this,T)){let h=e(this,T),n;for(;n=h?.shift();)(s=e(this,V))==null||s.call(this,...n);}},wt);var Et=class{constructor(e){d(this,"cache");d(this,"map",new Map);this.cache=new It({max:e.cacheSize}),this.map=new Map;}get[Symbol.iterator](){return this.map[Symbol.iterator]}get[Symbol.toStringTag](){return this.map[Symbol.toStringTag]}clear(){return this.cache.clear(),this.map.clear()}delete(e){let i=this.map.delete(e);return i&&this.cache.delete(e),i}get forEach(){return this.map.forEach}get(e){let i=this.cache.get(e);return i||this.map.get(e)}has(e){return this.map.has(e)}set(e,i){return this.map.set(e,i),this.cache.set(e,i),this}get size(){return this.map.size}entries(){return this.map.entries()}keys(){return this.map.keys()}values(){return this.map.values()}};export{Et as a};//# sourceMappingURL=chunk-INJYRMJ3.mjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9scnUtY2FjaGUvc3JjL2luZGV4LnRzIiwiLi4vc3JjL2NsYXNzZXMvQ2FjaGVkTWFwLnRzIl0sIm5hbWVzIjpbImRlZmF1bHRQZXJmIiwid2FybmVkIiwiUFJPQ0VTUyIsImVtaXRXYXJuaW5nIiwibXNnIiwidHlwZSIsImNvZGUiLCJmbiIsIkFDIiwiQVMiLCJfX3B1YmxpY0ZpZWxkIiwiXyIsIndhcm5BQ1BvbHlmaWxsIiwicmVhc29uIiwicHJpbnRBQ1BvbHlmaWxsV2FybmluZyIsInNob3VsZFdhcm4iLCJpc1Bvc0ludCIsIm4iLCJnZXRVaW50QXJyYXkiLCJtYXgiLCJaZXJvQXJyYXkiLCJzaXplIiwiX2EiLCJfbyIsIlN0YWNrIiwiSGVhcENscyIsIl9TdGFjayIsIiNjb25zdHJ1Y3RpbmciLCJzIiwiX19wcml2YXRlQWRkIiwiX2IiLCJfYyIsIl93IiwiX0MiLCJfUyIsIl9MIiwiX0kiLCJfbSIsIl9uIiwiX18iLCJfcyIsIl9pIiwiX3QiLCJfdSIsIl9sIiwiX2giLCJfciIsIl95IiwiX0EiLCJfZCIsIl9nIiwiX1QiLCJfdiIsIl9mIiwiX1UiLCJfY19pbnN0YW5jZXMiLCJqX2ZuIiwiX1IiLCJfeiIsIl9OIiwiX3AiLCJCX2ZuIiwiX1ciLCJfTSIsIl9QIiwiRl9mbiIsIk9fZm4iLCJIX2ZuIiwieF9mbiIsIkdfZm4iLCJlX2ZuIiwia19mbiIsIkRfZm4iLCJFX2ZuIiwiVl9mbiIsIkxSVUNhY2hlIiwib3B0aW9ucyIsIiNtYXgiLCIjbWF4U2l6ZSIsIiNkaXNwb3NlIiwiI29uSW5zZXJ0IiwiI2Rpc3Bvc2VBZnRlciIsIiNmZXRjaE1ldGhvZCIsIiNtZW1vTWV0aG9kIiwiI3BlcmYiLCIjc2l6ZSIsIiNjYWxjdWxhdGVkU2l6ZSIsIiNrZXlNYXAiLCIja2V5TGlzdCIsIiN2YWxMaXN0IiwiI25leHQiLCIjcHJldiIsIiNoZWFkIiwiI3RhaWwiLCIjZnJlZSIsIiNkaXNwb3NlZCIsIiNzaXplcyIsIiNzdGFydHMiLCIjdHRscyIsIiNhdXRvcHVyZ2VUaW1lcnMiLCIjaGFzRGlzcG9zZSIsIiNoYXNGZXRjaE1ldGhvZCIsIiNoYXNEaXNwb3NlQWZ0ZXIiLCIjaGFzT25JbnNlcnQiLCIjdXBkYXRlSXRlbUFnZSIsIiNzdGF0dXNUVEwiLCIjc2V0SXRlbVRUTCIsIiNpc1N0YWxlIiwiI3JlbW92ZUl0ZW1TaXplIiwiI2FkZEl0ZW1TaXplIiwiX3N0IiwiI3JlcXVpcmVTaXplIiwiX2siLCJzaXplQ2FsY3VsYXRpb24iLCJ0dGwiLCJ0dGxSZXNvbHV0aW9uIiwidHRsQXV0b3B1cmdlIiwidXBkYXRlQWdlT25HZXQiLCJ1cGRhdGVBZ2VPbkhhcyIsImFsbG93U3RhbGUiLCJkaXNwb3NlIiwib25JbnNlcnQiLCJkaXNwb3NlQWZ0ZXIiLCJub0Rpc3Bvc2VPblNldCIsIm5vVXBkYXRlVFRMIiwibWF4U2l6ZSIsIm1heEVudHJ5U2l6ZSIsImZldGNoTWV0aG9kIiwibWVtb01ldGhvZCIsIm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiIsIm5vRGVsZXRlT25TdGFsZUdldCIsImFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uIiwiYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCIsImlnbm9yZUZldGNoQWJvcnQiLCJwZXJmIiwiX19wcml2YXRlU2V0IiwiVWludEFycmF5IiwiX19wcml2YXRlR2V0IiwiX19wcml2YXRlTWV0aG9kIiwiI2luaXRpYWxpemVTaXplVHJhY2tpbmciLCIjaW5pdGlhbGl6ZVRUTFRyYWNraW5nIiwiX0xSVUNhY2hlIiwiYyIsInAiLCIjaXNCYWNrZ3JvdW5kRmV0Y2giLCJrIiwiaW5kZXgiLCJjb250ZXh0IiwiI2JhY2tncm91bmRGZXRjaCIsIiNtb3ZlVG9UYWlsIiwiI2luZGV4ZXMiLCIjcmluZGV4ZXMiLCJrZXkiLCJpIiwiZ2V0T3B0aW9ucyIsInYiLCJ2YWx1ZSIsInRoaXNwIiwiZGVsZXRlZCIsIiNkZWxldGUiLCJlbnRyeSIsInN0YXJ0IiwicmVtYWluIiwiYXJyIiwiYWdlIiwic2V0T3B0aW9ucyIsInN0YXR1cyIsIiNldmljdCIsIl9fcHJpdmF0ZVdyYXBwZXIiLCJvbGRWYWwiLCJvbGRWYWx1ZSIsImR0IiwidGFzayIsInZhbCIsImhhc09wdGlvbnMiLCJwZWVrT3B0aW9ucyIsImZldGNoT3B0aW9ucyIsImZvcmNlUmVmcmVzaCIsInNpZ25hbCIsInN0YWxlIiwiaXNTdGFsZSIsInN0YWxlVmFsIiwibWVtb09wdGlvbnMiLCJ2diIsImZldGNoaW5nIiwiI2NsZWFyIiwidHRscyIsInN0YXJ0cyIsInB1cmdlVGltZXJzIiwic2V0UHVyZ2V0VGltZXIiLCJ0IiwiY2FjaGVkTm93IiwiZ2V0Tm93Iiwic2l6ZXMiLCIjaXNWYWxpZEluZGV4IiwiZnJlZSIsImhlYWQiLCJhYyIsImZldGNoT3B0cyIsImNiIiwidXBkYXRlQ2FjaGUiLCJhYm9ydGVkIiwiaWdub3JlQWJvcnQiLCJwcm9jZWVkIiwiZmV0Y2hGYWlsIiwiYmYiLCJ2bCIsImViIiwiZXIiLCJhbGxvd1N0YWxlQWJvcnRlZCIsIm5vRGVsZXRlIiwicGNhbGwiLCJyZXMiLCJyZWoiLCJmbXAiLCJiIiwiI2Nvbm5lY3QiLCJwaSIsIm5pIiwiQ2FjaGVkTWFwIiwiTCIsImNhY2hlZFZhbHVlIl0sIm1hcHBpbmdzIjoiK0NBU0EsSUFBTUEsRUFBQUEsQ0FFRixPQUFPLFdBQUEsRUFBZ0IsUUFBQSxFQUN2QixhQUNBLE9BQU8sV0FBQSxDQUFZLEdBQUEsRUFBUSxVQUFBLENBRTNCLFlBQ0EsSUFBQSxDQUVFQyxFQUFBQSxDQUFTLElBQUksR0FBQSxDQU1iQyxHQUNKLE9BQU8sT0FBQSxFQUFZLFFBQUEsRUFBYyxPQUFBLENBQy9CLE9BQUEsQ0FDQSxFQUFBLENBR0VDLEVBQUFBLENBQWMsQ0FDbEJDLENBQUFBLENBQ0FDLENBQUFBLENBQ0FDLENBQUFBLENBQ0FDLENBQUFBLEdBQ0UsQ0FDRixPQUFPTCxFQUFBQSxDQUFRLFdBQUEsRUFBZ0IsVUFBQSxDQUM3QkEsR0FBUSxXQUFBLENBQVlFLENBQUFBLENBQUtDLENBQUFBLENBQU1DLENBQUFBLENB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RUFBQSxJQUFBLENBQUEsZ0JBQUEsQ0FBQSxDQUlBQSxDQUFBQSxDQUFBLElBQUEsQ0FBQSxnQkFBQSxDQUFBLENBSUFBLENBQUFBLENBQUEsbUJBS0FBLENBQUFBLENBQUEsSUFBQSxDQUFBLGdCQUFBLENBQUEsQ0FJQUEsQ0FBQUEsQ0FBQSxJQUFBLENBQUEsYUFBQSxDQUFBLENBSUFBLEVBQUEsSUFBQSxDQUFBLGNBQUEsQ0FBQSxDQUlBQSxDQUFBQSxDQUFBLElBQUEsQ0FBQSxpQkFBQSxDQUFBLENBSUFBLENBQUFBLENBQUEsaUNBSUFBLENBQUFBLENBQUEsSUFBQSxDQUFBLG9CQUFBLENBQUEsQ0FJQUEsQ0FBQUEsQ0FBQSxJQUFBLENBQUEsd0JBQUEsQ0FBQSxDQUlBQSxDQUFBQSxDQUFBLElBQUEsQ0FBQSw0QkFBQSxDQUFBLENBSUFBLENBQUFBLENBQUEsSUFBQSxDQUFBLGtCQUFBLENBQUEsQ0FHQTJFLEVBQUFBLElBQUFBLENBQUFBLENBQUFBLENBQUFBLENBQ0FDLENBQUFBLENBQUFBLElBQUFBLENBQUFBLEdBQ0FDLENBQUFBLENBQUFBLElBQUFBLENBQUFBLENBQUFBLENBQUFBLENBQ0FDLENBQUFBLENBQUFBLEtBQUFBLENBQUFBLENBQUFBLENBQ0FDLENBQUFBLENBQUFBLElBQUFBLENBQUFBLENBQUFBLENBQUFBLENBQ0FDLEVBQUFBLElBQUFBLENBQUFBLENBQUFBLENBQUFBLENBQ0FDLENBQUFBLENBQUFBLElBQUFBLENBQUFBLEdBQ0FDLENBQUFBLENBQUFBLElBQUFBLENBQUFBLENBQUFBLENBQUFBLENBQ0FDLENBQUFBLENBQUFBLEtBQUFBLENBQUFBLENBQUFBLENBQ0FDLENBQUFBLENBQUFBLElBQUFBLENBQUFBLENBQUFBLENBQUFBLENBQ0FDLEVBQUFBLElBQUFBLENBQUFBLENBQUFBLENBQUFBLENBQ0FDLENBQUFBLENBQUFBLElBQUFBLENBQUFBLENBQUFBLENBQUFBLENBQ0FDLENBQUFBLENBQUFBLElBQUFBLENBQUFBLENBQUFBLENBQUFBLENBQ0FDLEVBQUFB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QUFBLENBQUksT0FBQSxFQUNwQixDQUNBLElBQUEsRUFBTyxDQUNILE9BQU8sSUFBQSxDQUFLLElBQUksSUFBQSxFQUNwQixDQUNBLE1BQUEsRUFBUyxDQUNMLE9BQU8sSUFBQSxDQUFLLEdBQUEsQ0FBSSxNQUFBLEVBQ3BCLENBQ0oiLCJmaWxlIjoiY2h1bmstSU5KWVJNSjMubWpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIExSVUNhY2hlXG4gKi9cblxuLy8gbW9kdWxlLXByaXZhdGUgbmFtZXMgYW5kIHR5cGVzXG4vLyB0aGlzIHByb3ZpZGVzIHRoZSBkZWZhdWx0IFBlcmYgb2JqZWN0IHNvdXJjZS5cbi8vIGl0IGNhbiBiZSBwYXNzZWQgaW4gdmlhIGNvbmZpZ3VyYXRpb24gdG8gb3ZlcnJpZGUgaXRcbi8vIGZvciBhIHNpbmdsZSBMUlUgb2JqZWN0LlxuZXhwb3J0IHR5cGUgUGVyZiA9IHsgbm93OiAoKSA9PiBudW1iZXIgfVxuY29uc3QgZGVmYXVsdFBlcmY6IFBlcmYgPVxuICAoXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJlxuICAgIHBlcmZvcm1hbmNlICYmXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJ1xuICApID9cbiAgICBwZXJmb3JtYW5jZVxuICA6IERhdGVcblxuY29uc3Qgd2FybmVkID0gbmV3IFNldDxzdHJpbmc+KClcblxuLy8gZWl0aGVyIGEgZnVuY3Rpb24gb3IgYSBjbGFzc1xudHlwZSBGb3JDID0gKCguLi5hOiBhbnlbXSkgPT4gYW55KSB8IHsgbmV3ICguLi5hOiBhbnlbXSk6IGFueSB9XG5cbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgUFJPQ0VTUyA9IChcbiAgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmICEhcHJvY2VzcyA/XG4gICAgcHJvY2Vzc1xuICA6IHt9KSBhcyB7IFtrOiBzdHJpbmddOiBhbnkgfVxuLyogYzggaWdub3JlIHN0YXJ0ICovXG5cbmNvbnN0IGVtaXRXYXJuaW5nID0gKFxuICBtc2c6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nLFxuICBjb2RlOiBzdHJpbmcsXG4gIGZuOiBGb3JDLFxuKSA9PiB7XG4gIHR5cGVvZiBQUk9DRVNTLmVtaXRXYXJuaW5nID09PSAnZnVuY3Rpb24nID9cbiAgICBQUk9DRVNTLmVtaXRXYXJuaW5nKG1zZywgdHlwZSwgY29kZSwgZm4pXG4gIDogY29uc29sZS5lcnJvcihgWyR7Y29kZX1dICR7dHlwZX06ICR7bXNnfWApXG59XG5cbmxldCBBQyA9IGdsb2JhbFRoaXMuQWJvcnRDb250cm9sbGVyXG5sZXQgQVMgPSBnbG9iYWxUaGlzLkFib3J0U2lnbmFsXG5cbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuaWYgKHR5cGVvZiBBQyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy9AdHMtaWdub3JlXG4gIEFTID0gY2xhc3MgQWJvcnRTaWduYWwge1xuICAgIG9uYWJvcnQ/OiAoLi4uYTogYW55W10pID0+IGFueVxuICAgIF9vbmFib3J0OiAoKC4uLmE6IGFueVtdKSA9PiBhbnkpW10gPSBbXVxuICAgIHJlYXNvbj86IGFueVxuICAgIGFib3J0ZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICAgIGFkZEV2ZW50TGlzdGVuZXIoXzogc3RyaW5nLCBmbjogKC4uLmE6IGFueVtdKSA9PiBhbnkpIHtcbiAgICAgIHRoaXMuX29uYWJvcnQucHVzaChmbilcbiAgICB9XG4gIH1cbiAgLy9AdHMtaWdub3JlXG4gIEFDID0gY2xhc3MgQWJvcnRDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHdhcm5BQ1BvbHlmaWxsKClcbiAgICB9XG4gICAgc2lnbmFsID0gbmV3IEFTKClcbiAgICBhYm9ydChyZWFzb246IGFueSkge1xuICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHJldHVyblxuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0aGlzLnNpZ25hbC5yZWFzb24gPSByZWFzb25cbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdGhpcy5zaWduYWwuYWJvcnRlZCA9IHRydWVcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgZm9yIChjb25zdCBmbiBvZiB0aGlzLnNpZ25hbC5fb25hYm9ydCkge1xuICAgICAgICBmbihyZWFzb24pXG4gICAgICB9XG4gICAgICB0aGlzLnNpZ25hbC5vbmFib3J0Py4ocmVhc29uKVxuICAgIH1cbiAgfVxuICBsZXQgcHJpbnRBQ1BvbHlmaWxsV2FybmluZyA9XG4gICAgUFJPQ0VTUy5lbnY/LkxSVV9DQUNIRV9JR05PUkVfQUNfV0FSTklORyAhPT0gJzEnXG4gIGNvbnN0IHdhcm5BQ1BvbHlmaWxsID0gKCkgPT4ge1xuICAgIGlmICghcHJpbnRBQ1BvbHlmaWxsV2FybmluZykgcmV0dXJuXG4gICAgcHJpbnRBQ1BvbHlmaWxsV2FybmluZyA9IGZhbHNlXG4gICAgZW1pdFdhcm5pbmcoXG4gICAgICAnQWJvcnRDb250cm9sbGVyIGlzIG5vdCBkZWZpbmVkLiBJZiB1c2luZyBscnUtY2FjaGUgaW4gJyArXG4gICAgICAgICdub2RlIDE0LCBsb2FkIGFuIEFib3J0Q29udHJvbGxlciBwb2x5ZmlsbCBmcm9tIHRoZSAnICtcbiAgICAgICAgJ2Bub2RlLWFib3J0LWNvbnRyb2xsZXJgIHBhY2thZ2UuIEEgbWluaW1hbCBwb2x5ZmlsbCBpcyAnICtcbiAgICAgICAgJ3Byb3ZpZGVkIGZvciB1c2UgYnkgTFJVQ2FjaGUuZmV0Y2goKSwgYnV0IGl0IHNob3VsZCBub3QgYmUgJyArXG4gICAgICAgICdyZWxpZWQgdXBvbiBpbiBvdGhlciBjb250ZXh0cyAoZWcsIHBhc3NpbmcgaXQgdG8gb3RoZXIgQVBJcyB0aGF0ICcgK1xuICAgICAgICAndXNlIEFib3J0Q29udHJvbGxlci9BYm9ydFNpZ25hbCBtaWdodCBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMpLiAnICtcbiAgICAgICAgJ1lvdSBtYXkgZGlzYWJsZSB0aGlzIHdpdGggTFJVX0NBQ0hFX0lHTk9SRV9BQ19XQVJOSU5HPTEgaW4gdGhlIGVudi4nLFxuICAgICAgJ05PX0FCT1JUX0NPTlRST0xMRVInLFxuICAgICAgJ0VOT1RTVVAnLFxuICAgICAgd2FybkFDUG9seWZpbGwsXG4gICAgKVxuICB9XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuXG5jb25zdCBzaG91bGRXYXJuID0gKGNvZGU6IHN0cmluZykgPT4gIXdhcm5lZC5oYXMoY29kZSlcblxuY29uc3QgVFlQRSA9IFN5bWJvbCgndHlwZScpXG5leHBvcnQgdHlwZSBQb3NJbnQgPSBudW1iZXIgJiB7IFtUWVBFXTogJ1Bvc2l0aXZlIEludGVnZXInIH1cbmV4cG9ydCB0eXBlIEluZGV4ID0gbnVtYmVyICYgeyBbVFlQRV06ICdMUlVDYWNoZSBJbmRleCcgfVxuXG5jb25zdCBpc1Bvc0ludCA9IChuOiBhbnkpOiBuIGlzIFBvc0ludCA9PlxuICBuICYmIG4gPT09IE1hdGguZmxvb3IobikgJiYgbiA+IDAgJiYgaXNGaW5pdGUobilcblxuZXhwb3J0IHR5cGUgVWludEFycmF5ID0gVWludDhBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXlcbmV4cG9ydCB0eXBlIE51bWJlckFycmF5ID0gVWludEFycmF5IHwgbnVtYmVyW11cblxuLyogYzggaWdub3JlIHN0YXJ0ICovXG4vLyBUaGlzIGlzIGEgbGl0dGxlIGJpdCByaWRpY3Vsb3VzLCB0YmguXG4vLyBUaGUgbWF4aW11bSBhcnJheSBsZW5ndGggaXMgMl4zMi0xIG9yIHRoZXJlYWJvdXRzIG9uIG1vc3QgSlMgaW1wbHMuXG4vLyBBbmQgd2VsbCBiZWZvcmUgdGhhdCBwb2ludCwgeW91J3JlIGNhY2hpbmcgdGhlIGVudGlyZSB3b3JsZCwgSSBtZWFuLFxuLy8gdGhhdCdzIH4zMkdCIG9mIGp1c3QgaW50ZWdlcnMgZm9yIHRoZSBuZXh0L3ByZXYgbGlua3MsIHBsdXMgd2hhdGV2ZXJcbi8vIGVsc2UgdG8gaG9sZCB0aGF0IG1hbnkga2V5cyBhbmQgdmFsdWVzLiAgSnVzdCBmaWxsaW5nIHRoZSBtZW1vcnkgd2l0aFxuLy8gemVyb2VzIGF0IGluaXQgdGltZSBpcyBicnV0YWwgd2hlbiB5b3UgZ2V0IHRoYXQgYmlnLlxuLy8gQnV0IHdoeSBub3QgYmUgY29tcGxldGU/XG4vLyBNYXliZSBpbiB0aGUgZnV0dXJlLCB0aGVzZSBsaW1pdHMgd2lsbCBoYXZlIGV4cGFuZGVkLlxuY29uc3QgZ2V0VWludEFycmF5ID0gKG1heDogbnVtYmVyKSA9PlxuICAhaXNQb3NJbnQobWF4KSA/IG51bGxcbiAgOiBtYXggPD0gTWF0aC5wb3coMiwgOCkgPyBVaW50OEFycmF5XG4gIDogbWF4IDw9IE1hdGgucG93KDIsIDE2KSA/IFVpbnQxNkFycmF5XG4gIDogbWF4IDw9IE1hdGgucG93KDIsIDMyKSA/IFVpbnQzMkFycmF5XG4gIDogbWF4IDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSID8gWmVyb0FycmF5XG4gIDogbnVsbFxuLyogYzggaWdub3JlIHN0b3AgKi9cblxuY2xhc3MgWmVyb0FycmF5IGV4dGVuZHMgQXJyYXk8bnVtYmVyPiB7XG4gIGNvbnN0cnVjdG9yKHNpemU6IG51bWJlcikge1xuICAgIHN1cGVyKHNpemUpXG4gICAgdGhpcy5maWxsKDApXG4gIH1cbn1cbmV4cG9ydCB0eXBlIHsgWmVyb0FycmF5IH1cbmV4cG9ydCB0eXBlIHsgU3RhY2sgfVxuXG5leHBvcnQgdHlwZSBTdGFja0xpa2UgPSBTdGFjayB8IEluZGV4W11cbmNsYXNzIFN0YWNrIHtcbiAgaGVhcDogTnVtYmVyQXJyYXlcbiAgbGVuZ3RoOiBudW1iZXJcbiAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvclxuICBzdGF0aWMgI2NvbnN0cnVjdGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIHN0YXRpYyBjcmVhdGUobWF4OiBudW1iZXIpOiBTdGFja0xpa2Uge1xuICAgIGNvbnN0IEhlYXBDbHMgPSBnZXRVaW50QXJyYXkobWF4KVxuICAgIGlmICghSGVhcENscykgcmV0dXJuIFtdXG4gICAgU3RhY2suI2NvbnN0cnVjdGluZyA9IHRydWVcbiAgICBjb25zdCBzID0gbmV3IFN0YWNrKG1heCwgSGVhcENscylcbiAgICBTdGFjay4jY29uc3RydWN0aW5nID0gZmFsc2VcbiAgICByZXR1cm4gc1xuICB9XG4gIGNvbnN0cnVjdG9yKG1heDogbnVtYmVyLCBIZWFwQ2xzOiB7IG5ldyAobjogbnVtYmVyKTogTnVtYmVyQXJyYXkgfSkge1xuICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgIGlmICghU3RhY2suI2NvbnN0cnVjdGluZykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5zdGFudGlhdGUgU3RhY2sgdXNpbmcgU3RhY2suY3JlYXRlKG4pJylcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB0aGlzLmhlYXAgPSBuZXcgSGVhcENscyhtYXgpXG4gICAgdGhpcy5sZW5ndGggPSAwXG4gIH1cbiAgcHVzaChuOiBJbmRleCkge1xuICAgIHRoaXMuaGVhcFt0aGlzLmxlbmd0aCsrXSA9IG5cbiAgfVxuICBwb3AoKTogSW5kZXgge1xuICAgIHJldHVybiB0aGlzLmhlYXBbLS10aGlzLmxlbmd0aF0gYXMgSW5kZXhcbiAgfVxufVxuXG4vKipcbiAqIFByb21pc2UgcmVwcmVzZW50aW5nIGFuIGluLXByb2dyZXNzIHtAbGluayBMUlVDYWNoZSNmZXRjaH0gY2FsbFxuICovXG5leHBvcnQgdHlwZSBCYWNrZ3JvdW5kRmV0Y2g8Vj4gPSBQcm9taXNlPFYgfCB1bmRlZmluZWQ+ICYge1xuICBfX3JldHVybmVkOiBCYWNrZ3JvdW5kRmV0Y2g8Vj4gfCB1bmRlZmluZWRcbiAgX19hYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlclxuICBfX3N0YWxlV2hpbGVGZXRjaGluZzogViB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgdHlwZSBEaXNwb3NlVGFzazxLLCBWPiA9IFtcbiAgdmFsdWU6IFYsXG4gIGtleTogSyxcbiAgcmVhc29uOiBMUlVDYWNoZS5EaXNwb3NlUmVhc29uLFxuXVxuXG5leHBvcnQgbmFtZXNwYWNlIExSVUNhY2hlIHtcbiAgLyoqXG4gICAqIEFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAsIHJlZmxlY3RpbmcgdGhlIGNhbGN1bGF0ZWQgc2l6ZSBvZiBpdGVtc1xuICAgKi9cbiAgZXhwb3J0IHR5cGUgU2l6ZSA9IG51bWJlclxuXG4gIC8qKlxuICAgKiBJbnRlZ2VyIGdyZWF0ZXIgdGhhbiAwLCByZXByZXNlbnRpbmcgc29tZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBvciB0aGVcbiAgICogdGltZSBhdCB3aGljaCBhIFRUTCBzdGFydGVkIGNvdW50aW5nIGZyb20uXG4gICAqL1xuICBleHBvcnQgdHlwZSBNaWxsaXNlY29uZHMgPSBudW1iZXJcblxuICAvKipcbiAgICogQW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMCwgcmVmbGVjdGluZyBhIG51bWJlciBvZiBpdGVtc1xuICAgKi9cbiAgZXhwb3J0IHR5cGUgQ291bnQgPSBudW1iZXJcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiB3aHkgYW4gaXRlbSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSwgcGFzc2VkXG4gICAqIHRvIHRoZSB7QGxpbmsgRGlzcG9zZXJ9IG1ldGhvZHMuXG4gICAqXG4gICAqIC0gYGV2aWN0YDogVGhlIGl0ZW0gd2FzIGV2aWN0ZWQgYmVjYXVzZSBpdCBpcyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCxcbiAgICogICBhbmQgdGhlIGNhY2hlIGlzIGZ1bGwuXG4gICAqIC0gYHNldGA6IEEgbmV3IHZhbHVlIHdhcyBzZXQsIG92ZXJ3cml0aW5nIHRoZSBvbGQgdmFsdWUgYmVpbmcgZGlzcG9zZWQuXG4gICAqIC0gYGRlbGV0ZWA6IFRoZSBpdGVtIHdhcyBleHBsaWNpdGx5IGRlbGV0ZWQsIGVpdGhlciBieSBjYWxsaW5nXG4gICAqICAge0BsaW5rIExSVUNhY2hlI2RlbGV0ZX0sIHtAbGluayBMUlVDYWNoZSNjbGVhcn0sIG9yXG4gICAqICAge0BsaW5rIExSVUNhY2hlI3NldH0gd2l0aCBhbiB1bmRlZmluZWQgdmFsdWUuXG4gICAqIC0gYGV4cGlyZWA6IFRoZSBpdGVtIHdhcyByZW1vdmVkIGR1ZSB0byBleGNlZWRpbmcgaXRzIFRUTC5cbiAgICogLSBgZmV0Y2hgOiBBIHtAbGluayBPcHRpb25zQmFzZSNmZXRjaE1ldGhvZH0gb3BlcmF0aW9uIHJldHVybmVkXG4gICAqICAgYHVuZGVmaW5lZGAgb3Igd2FzIGFib3J0ZWQsIGNhdXNpbmcgdGhlIGl0ZW0gdG8gYmUgZGVsZXRlZC5cbiAgICovXG4gIGV4cG9ydCB0eXBlIERpc3Bvc2VSZWFzb24gPVxuICAgIHwgJ2V2aWN0J1xuICAgIHwgJ3NldCdcbiAgICB8ICdkZWxldGUnXG4gICAgfCAnZXhwaXJlJ1xuICAgIHwgJ2ZldGNoJ1xuICAvKipcbiAgICogQSBtZXRob2QgY2FsbGVkIHVwb24gaXRlbSByZW1vdmFsLCBwYXNzZWQgYXMgdGhlXG4gICAqIHtAbGluayBPcHRpb25zQmFzZS5kaXNwb3NlfSBhbmQvb3JcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmRpc3Bvc2VBZnRlcn0gb3B0aW9ucy5cbiAgICovXG4gIGV4cG9ydCB0eXBlIERpc3Bvc2VyPEssIFY+ID0gKFxuICAgIHZhbHVlOiBWLFxuICAgIGtleTogSyxcbiAgICByZWFzb246IERpc3Bvc2VSZWFzb24sXG4gICkgPT4gdm9pZFxuXG4gIC8qKlxuICAgKiBUaGUgcmVhc29uIHdoeSBhbiBpdGVtIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUsIHBhc3NlZFxuICAgKiB0byB0aGUge0BsaW5rIEluc2VydGVyfSBtZXRob2RzLlxuICAgKlxuICAgKiAtIGBhZGRgOiB0aGUgaXRlbSB3YXMgbm90IGZvdW5kIGluIHRoZSBjYWNoZSwgYW5kIHdhcyBhZGRlZFxuICAgKiAtIGB1cGRhdGVgOiB0aGUgaXRlbSB3YXMgaW4gdGhlIGNhY2hlLCB3aXRoIHRoZSBzYW1lIHZhbHVlIHByb3ZpZGVkXG4gICAqIC0gYHJlcGxhY2VgOiB0aGUgaXRlbSB3YXMgaW4gdGhlIGNhY2hlLCBhbmQgcmVwbGFjZWRcbiAgICovXG4gIGV4cG9ydCB0eXBlIEluc2VydFJlYXNvbiA9ICdhZGQnIHwgJ3VwZGF0ZScgfCAncmVwbGFjZSdcblxuICAvKipcbiAgICogQSBtZXRob2QgY2FsbGVkIHVwb24gaXRlbSBpbnNlcnRpb24sIHBhc3NlZCBhcyB0aGVcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmluc2VydH1cbiAgICovXG4gIGV4cG9ydCB0eXBlIEluc2VydGVyPEssIFY+ID0gKFxuICAgIHZhbHVlOiBWLFxuICAgIGtleTogSyxcbiAgICByZWFzb246IEluc2VydFJlYXNvbixcbiAgKSA9PiB2b2lkXG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBlZmZlY3RpdmUgY2FsY3VsYXRlZCBzaXplXG4gICAqIG9mIGFuIGVudHJ5IGluIHRoZSBjYWNoZS5cbiAgICovXG4gIGV4cG9ydCB0eXBlIFNpemVDYWxjdWxhdG9yPEssIFY+ID0gKHZhbHVlOiBWLCBrZXk6IEspID0+IFNpemVcblxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB0aGVcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBmdW5jdGlvbi5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hlck9wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPiB7XG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbFxuICAgIG9wdGlvbnM6IEZldGNoZXJGZXRjaE9wdGlvbnM8SywgViwgRkM+XG4gICAgLyoqXG4gICAgICogT2JqZWN0IHByb3ZpZGVkIGluIHRoZSB7QGxpbmsgRmV0Y2hPcHRpb25zLmNvbnRleHR9IG9wdGlvbiB0b1xuICAgICAqIHtAbGluayBMUlVDYWNoZSNmZXRjaH1cbiAgICAgKi9cbiAgICBjb250ZXh0OiBGQ1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY2FzaW9uYWxseSwgaXQgbWF5IGJlIHVzZWZ1bCB0byB0cmFjayB0aGUgaW50ZXJuYWwgYmVoYXZpb3Igb2YgdGhlXG4gICAqIGNhY2hlLCBwYXJ0aWN1bGFybHkgZm9yIGxvZ2dpbmcsIGRlYnVnZ2luZywgb3IgZm9yIGJlaGF2aW9yIHdpdGhpbiB0aGVcbiAgICogYGZldGNoTWV0aG9kYC4gVG8gZG8gdGhpcywgeW91IGNhbiBwYXNzIGEgYHN0YXR1c2Agb2JqZWN0IHRvIHRoZVxuICAgKiB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9LCB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSwge0BsaW5rIExSVUNhY2hlI3NldH0sXG4gICAqIHtAbGluayBMUlVDYWNoZSNtZW1vfSwgYW5kIHtAbGluayBMUlVDYWNoZSNoYXN9IG1ldGhvZHMuXG4gICAqXG4gICAqIFRoZSBgc3RhdHVzYCBvcHRpb24gc2hvdWxkIGJlIGEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuIFRoZSBmb2xsb3dpbmdcbiAgICogZmllbGRzIHdpbGwgYmUgc2V0IG9uIGl0IGFwcHJvcHJpYXRlbHksIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBTdGF0dXM8Vj4ge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGF0dXMgb2YgYSBzZXQoKSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiAtIGFkZDogdGhlIGl0ZW0gd2FzIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGUsIGFuZCB3YXMgYWRkZWRcbiAgICAgKiAtIHVwZGF0ZTogdGhlIGl0ZW0gd2FzIGluIHRoZSBjYWNoZSwgd2l0aCB0aGUgc2FtZSB2YWx1ZSBwcm92aWRlZFxuICAgICAqIC0gcmVwbGFjZTogdGhlIGl0ZW0gd2FzIGluIHRoZSBjYWNoZSwgYW5kIHJlcGxhY2VkXG4gICAgICogLSBtaXNzOiB0aGUgaXRlbSB3YXMgbm90IGFkZGVkIHRvIHRoZSBjYWNoZSBmb3Igc29tZSByZWFzb25cbiAgICAgKi9cbiAgICBzZXQ/OiAnYWRkJyB8ICd1cGRhdGUnIHwgJ3JlcGxhY2UnIHwgJ21pc3MnXG5cbiAgICAvKipcbiAgICAgKiB0aGUgdHRsIHN0b3JlZCBmb3IgdGhlIGl0ZW0sIG9yIHVuZGVmaW5lZCBpZiB0dGxzIGFyZSBub3QgdXNlZC5cbiAgICAgKi9cbiAgICB0dGw/OiBNaWxsaXNlY29uZHNcblxuICAgIC8qKlxuICAgICAqIHRoZSBzdGFydCB0aW1lIGZvciB0aGUgaXRlbSwgb3IgdW5kZWZpbmVkIGlmIHR0bHMgYXJlIG5vdCB1c2VkLlxuICAgICAqL1xuICAgIHN0YXJ0PzogTWlsbGlzZWNvbmRzXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGltZXN0YW1wIHVzZWQgZm9yIFRUTCBjYWxjdWxhdGlvblxuICAgICAqL1xuICAgIG5vdz86IE1pbGxpc2Vjb25kc1xuXG4gICAgLyoqXG4gICAgICogdGhlIHJlbWFpbmluZyB0dGwgZm9yIHRoZSBpdGVtLCBvciB1bmRlZmluZWQgaWYgdHRscyBhcmUgbm90IHVzZWQuXG4gICAgICovXG4gICAgcmVtYWluaW5nVFRMPzogTWlsbGlzZWNvbmRzXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FsY3VsYXRlZCBzaXplIGZvciB0aGUgaXRlbSwgaWYgc2l6ZXMgYXJlIHVzZWQuXG4gICAgICovXG4gICAgZW50cnlTaXplPzogU2l6ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIGNhbGN1bGF0ZWQgc2l6ZSBvZiB0aGUgY2FjaGUsIGlmIHNpemVzIGFyZSB1c2VkLlxuICAgICAqL1xuICAgIHRvdGFsQ2FsY3VsYXRlZFNpemU/OiBTaXplXG5cbiAgICAvKipcbiAgICAgKiBBIGZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSBpdGVtIHdhcyBub3Qgc3RvcmVkLCBkdWUgdG8gZXhjZWVkaW5nIHRoZVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5tYXhFbnRyeVNpemV9XG4gICAgICovXG4gICAgbWF4RW50cnlTaXplRXhjZWVkZWQ/OiB0cnVlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2xkIHZhbHVlLCBzcGVjaWZpZWQgaW4gdGhlIGNhc2Ugb2YgYHNldDondXBkYXRlJ2Agb3JcbiAgICAgKiBgc2V0OidyZXBsYWNlJ2BcbiAgICAgKi9cbiAgICBvbGRWYWx1ZT86IFZcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXN1bHRzIG9mIGEge0BsaW5rIExSVUNhY2hlI2hhc30gb3BlcmF0aW9uXG4gICAgICpcbiAgICAgKiAtIGhpdDogdGhlIGl0ZW0gd2FzIGZvdW5kIGluIHRoZSBjYWNoZVxuICAgICAqIC0gc3RhbGU6IHRoZSBpdGVtIHdhcyBmb3VuZCBpbiB0aGUgY2FjaGUsIGJ1dCBpcyBzdGFsZVxuICAgICAqIC0gbWlzczogdGhlIGl0ZW0gd2FzIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGVcbiAgICAgKi9cbiAgICBoYXM/OiAnaGl0JyB8ICdzdGFsZScgfCAnbWlzcydcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGF0dXMgb2YgYSB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IG9wZXJhdGlvbi5cbiAgICAgKiBOb3RlIHRoYXQgdGhpcyBjYW4gY2hhbmdlIGFzIHRoZSB1bmRlcmx5aW5nIGZldGNoKCkgbW92ZXMgdGhyb3VnaFxuICAgICAqIHZhcmlvdXMgc3RhdGVzLlxuICAgICAqXG4gICAgICogLSBpbmZsaWdodDogdGhlcmUgaXMgYW5vdGhlciBmZXRjaCgpIGZvciB0aGlzIGtleSB3aGljaCBpcyBpbiBwcm9jZXNzXG4gICAgICogLSBnZXQ6IHRoZXJlIGlzIG5vIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0sIHNvXG4gICAgICogICB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSB3YXMgY2FsbGVkLlxuICAgICAqIC0gbWlzczogdGhlIGl0ZW0gaXMgbm90IGluIGNhY2hlLCBhbmQgd2lsbCBiZSBmZXRjaGVkLlxuICAgICAqIC0gaGl0OiB0aGUgaXRlbSBpcyBpbiB0aGUgY2FjaGUsIGFuZCB3YXMgcmVzb2x2ZWQgaW1tZWRpYXRlbHkuXG4gICAgICogLSBzdGFsZTogdGhlIGl0ZW0gaXMgaW4gdGhlIGNhY2hlLCBidXQgc3RhbGUuXG4gICAgICogLSByZWZyZXNoOiB0aGUgaXRlbSBpcyBpbiB0aGUgY2FjaGUsIGFuZCBub3Qgc3RhbGUsIGJ1dFxuICAgICAqICAge0BsaW5rIEZldGNoT3B0aW9ucy5mb3JjZVJlZnJlc2h9IHdhcyBzcGVjaWZpZWQuXG4gICAgICovXG4gICAgZmV0Y2g/OiAnZ2V0JyB8ICdpbmZsaWdodCcgfCAnbWlzcycgfCAnaGl0JyB8ICdzdGFsZScgfCAncmVmcmVzaCdcblxuICAgIC8qKlxuICAgICAqIFRoZSB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9IHdhcyBjYWxsZWRcbiAgICAgKi9cbiAgICBmZXRjaERpc3BhdGNoZWQ/OiB0cnVlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FjaGVkIHZhbHVlIHdhcyB1cGRhdGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfVxuICAgICAqL1xuICAgIGZldGNoVXBkYXRlZD86IHRydWVcblxuICAgIC8qKlxuICAgICAqIFRoZSByZWFzb24gZm9yIGEgZmV0Y2goKSByZWplY3Rpb24uICBFaXRoZXIgdGhlIGVycm9yIHJhaXNlZCBieSB0aGVcbiAgICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9LCBvciB0aGUgcmVhc29uIGZvciBhblxuICAgICAqIEFib3J0U2lnbmFsLlxuICAgICAqL1xuICAgIGZldGNoRXJyb3I/OiBFcnJvclxuXG4gICAgLyoqXG4gICAgICogVGhlIGZldGNoIHJlY2VpdmVkIGFuIGFib3J0IHNpZ25hbFxuICAgICAqL1xuICAgIGZldGNoQWJvcnRlZD86IHRydWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBhYm9ydCBzaWduYWwgcmVjZWl2ZWQgd2FzIGlnbm9yZWQsIGFuZCB0aGUgZmV0Y2ggd2FzIGFsbG93ZWQgdG9cbiAgICAgKiBjb250aW51ZS5cbiAgICAgKi9cbiAgICBmZXRjaEFib3J0SWdub3JlZD86IHRydWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBmZXRjaE1ldGhvZCBwcm9taXNlIHJlc29sdmVkIHN1Y2Nlc3NmdWxseVxuICAgICAqL1xuICAgIGZldGNoUmVzb2x2ZWQ/OiB0cnVlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmV0Y2hNZXRob2QgcHJvbWlzZSB3YXMgcmVqZWN0ZWRcbiAgICAgKi9cbiAgICBmZXRjaFJlamVjdGVkPzogdHJ1ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXR1cyBvZiBhIHtAbGluayBMUlVDYWNoZSNnZXR9IG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIC0gZmV0Y2hpbmc6IFRoZSBpdGVtIGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkLiAgSWYgYSBwcmV2aW91cyB2YWx1ZVxuICAgICAqICAgaXMgcHJlc2VudCBhbmQgYWxsb3dlZCwgdGhhdCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqIC0gc3RhbGU6IFRoZSBpdGVtIGlzIGluIHRoZSBjYWNoZSwgYW5kIGlzIHN0YWxlLlxuICAgICAqIC0gaGl0OiB0aGUgaXRlbSBpcyBpbiB0aGUgY2FjaGVcbiAgICAgKiAtIG1pc3M6IHRoZSBpdGVtIGlzIG5vdCBpbiB0aGUgY2FjaGVcbiAgICAgKi9cbiAgICBnZXQ/OiAnc3RhbGUnIHwgJ2hpdCcgfCAnbWlzcydcblxuICAgIC8qKlxuICAgICAqIEEgZmV0Y2ggb3IgZ2V0IG9wZXJhdGlvbiByZXR1cm5lZCBhIHN0YWxlIHZhbHVlLlxuICAgICAqL1xuICAgIHJldHVybmVkU3RhbGU/OiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogb3B0aW9ucyB3aGljaCBvdmVycmlkZSB0aGUgb3B0aW9ucyBzZXQgaW4gdGhlIExSVUNhY2hlIGNvbnN0cnVjdG9yXG4gICAqIHdoZW4gY2FsbGluZyB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSB1bmlvbiBvZiB7QGxpbmsgR2V0T3B0aW9uc30gYW5kIHtAbGluayBTZXRPcHRpb25zfSwgcGx1c1xuICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2Uubm9EZWxldGVPbkZldGNoUmVqZWN0aW9ufSxcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufSxcbiAgICoge0BsaW5rIEZldGNoT3B0aW9ucy5mb3JjZVJlZnJlc2h9LCBhbmRcbiAgICoge0BsaW5rIEZldGNoZXJPcHRpb25zLmNvbnRleHR9XG4gICAqXG4gICAqIEFueSBvZiB0aGVzZSBtYXkgYmUgbW9kaWZpZWQgaW4gdGhlIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH1cbiAgICogZnVuY3Rpb24sIGJ1dCB0aGUge0BsaW5rIEdldE9wdGlvbnN9IGZpZWxkcyB3aWxsIG9mIGNvdXJzZSBoYXZlIG5vXG4gICAqIGVmZmVjdCwgYXMgdGhlIHtAbGluayBMUlVDYWNoZSNnZXR9IGNhbGwgYWxyZWFkeSBoYXBwZW5lZCBieSB0aGUgdGltZVxuICAgKiB0aGUgZmV0Y2hNZXRob2QgaXMgY2FsbGVkLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBGZXRjaGVyRmV0Y2hPcHRpb25zPEssIFYsIEZDID0gdW5rbm93bj5cbiAgICBleHRlbmRzIFBpY2s8XG4gICAgICBPcHRpb25zQmFzZTxLLCBWLCBGQz4sXG4gICAgICB8ICdhbGxvd1N0YWxlJ1xuICAgICAgfCAndXBkYXRlQWdlT25HZXQnXG4gICAgICB8ICdub0RlbGV0ZU9uU3RhbGVHZXQnXG4gICAgICB8ICdzaXplQ2FsY3VsYXRpb24nXG4gICAgICB8ICd0dGwnXG4gICAgICB8ICdub0Rpc3Bvc2VPblNldCdcbiAgICAgIHwgJ25vVXBkYXRlVFRMJ1xuICAgICAgfCAnbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uJ1xuICAgICAgfCAnYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24nXG4gICAgICB8ICdpZ25vcmVGZXRjaEFib3J0J1xuICAgICAgfCAnYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCdcbiAgICA+IHtcbiAgICBzdGF0dXM/OiBTdGF0dXM8Vj5cbiAgICBzaXplPzogU2l6ZVxuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdGhhdCBtYXkgYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IG1ldGhvZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIGV4dGVuZHMgRmV0Y2hlckZldGNoT3B0aW9uczxLLCBWLCBGQz4ge1xuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGZvcmNlIGEgcmUtbG9hZCBvZiB0aGUgZXhpc3RpbmcgZGF0YSwgZXZlbiBpZiBpdFxuICAgICAqIGlzIG5vdCB5ZXQgc3RhbGUuXG4gICAgICovXG4gICAgZm9yY2VSZWZyZXNoPzogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnRleHQgcHJvdmlkZWQgdG8gdGhlIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gYXNcbiAgICAgKiB0aGUge0BsaW5rIEZldGNoZXJPcHRpb25zLmNvbnRleHR9IHBhcmFtLlxuICAgICAqXG4gICAgICogSWYgdGhlIEZDIHR5cGUgaXMgc3BlY2lmaWVkIGFzIHVua25vd24gKHRoZSBkZWZhdWx0KSxcbiAgICAgKiB1bmRlZmluZWQgb3Igdm9pZCwgdGhlbiB0aGlzIGlzIG9wdGlvbmFsLiAgT3RoZXJ3aXNlLCBpdCB3aWxsXG4gICAgICogYmUgcmVxdWlyZWQuXG4gICAgICovXG4gICAgY29udGV4dD86IEZDXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICBzdGF0dXM/OiBTdGF0dXM8Vj5cbiAgfVxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IHdoZW4gdGhlIEZDIHR5cGUgaXMgc29tZXRoaW5nXG4gICAqIG90aGVyIHRoYW4gYHVua25vd25gLCBgdW5kZWZpbmVkYCwgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZldGNoT3B0aW9uc1dpdGhDb250ZXh0PEssIFYsIEZDPlxuICAgIGV4dGVuZHMgRmV0Y2hPcHRpb25zPEssIFYsIEZDPiB7XG4gICAgY29udGV4dDogRkNcbiAgfVxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IHdoZW4gdGhlIEZDIHR5cGUgaXNcbiAgICogYHVuZGVmaW5lZGAgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEZldGNoT3B0aW9uc05vQ29udGV4dDxLLCBWPlxuICAgIGV4dGVuZHMgRmV0Y2hPcHRpb25zPEssIFYsIHVuZGVmaW5lZD4ge1xuICAgIGNvbnRleHQ/OiB1bmRlZmluZWRcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVtb09wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPlxuICAgIGV4dGVuZHMgUGljazxcbiAgICAgIE9wdGlvbnNCYXNlPEssIFYsIEZDPixcbiAgICAgIHwgJ2FsbG93U3RhbGUnXG4gICAgICB8ICd1cGRhdGVBZ2VPbkdldCdcbiAgICAgIHwgJ25vRGVsZXRlT25TdGFsZUdldCdcbiAgICAgIHwgJ3NpemVDYWxjdWxhdGlvbidcbiAgICAgIHwgJ3R0bCdcbiAgICAgIHwgJ25vRGlzcG9zZU9uU2V0J1xuICAgICAgfCAnbm9VcGRhdGVUVEwnXG4gICAgICB8ICdub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24nXG4gICAgICB8ICdhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbidcbiAgICAgIHwgJ2lnbm9yZUZldGNoQWJvcnQnXG4gICAgICB8ICdhbGxvd1N0YWxlT25GZXRjaEFib3J0J1xuICAgID4ge1xuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGZvcmNlIGEgcmUtbG9hZCBvZiB0aGUgZXhpc3RpbmcgZGF0YSwgZXZlbiBpZiBpdFxuICAgICAqIGlzIG5vdCB5ZXQgc3RhbGUuXG4gICAgICovXG4gICAgZm9yY2VSZWZyZXNoPzogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnRleHQgcHJvdmlkZWQgdG8gdGhlIHtAbGluayBPcHRpb25zQmFzZS5tZW1vTWV0aG9kfSBhc1xuICAgICAqIHRoZSB7QGxpbmsgTWVtb2l6ZXJPcHRpb25zLmNvbnRleHR9IHBhcmFtLlxuICAgICAqXG4gICAgICogSWYgdGhlIEZDIHR5cGUgaXMgc3BlY2lmaWVkIGFzIHVua25vd24gKHRoZSBkZWZhdWx0KSxcbiAgICAgKiB1bmRlZmluZWQgb3Igdm9pZCwgdGhlbiB0aGlzIGlzIG9wdGlvbmFsLiAgT3RoZXJ3aXNlLCBpdCB3aWxsXG4gICAgICogYmUgcmVxdWlyZWQuXG4gICAgICovXG4gICAgY29udGV4dD86IEZDXG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gIH1cbiAgLyoqXG4gICAqIE9wdGlvbnMgcHJvdmlkZWQgdG8ge0BsaW5rIExSVUNhY2hlI21lbW99IHdoZW4gdGhlIEZDIHR5cGUgaXMgc29tZXRoaW5nXG4gICAqIG90aGVyIHRoYW4gYHVua25vd25gLCBgdW5kZWZpbmVkYCwgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE1lbW9PcHRpb25zV2l0aENvbnRleHQ8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBNZW1vT3B0aW9uczxLLCBWLCBGQz4ge1xuICAgIGNvbnRleHQ6IEZDXG4gIH1cbiAgLyoqXG4gICAqIE9wdGlvbnMgcHJvdmlkZWQgdG8ge0BsaW5rIExSVUNhY2hlI21lbW99IHdoZW4gdGhlIEZDIHR5cGUgaXNcbiAgICogYHVuZGVmaW5lZGAgb3IgYHZvaWRgXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE1lbW9PcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgZXh0ZW5kcyBNZW1vT3B0aW9uczxLLCBWLCB1bmRlZmluZWQ+IHtcbiAgICBjb250ZXh0PzogdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB0aGVcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm1lbW9NZXRob2R9IGZ1bmN0aW9uLlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBNZW1vaXplck9wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPiB7XG4gICAgb3B0aW9uczogTWVtb2l6ZXJNZW1vT3B0aW9uczxLLCBWLCBGQz5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgcHJvdmlkZWQgaW4gdGhlIHtAbGluayBNZW1vT3B0aW9ucy5jb250ZXh0fSBvcHRpb24gdG9cbiAgICAgKiB7QGxpbmsgTFJVQ2FjaGUjbWVtb31cbiAgICAgKi9cbiAgICBjb250ZXh0OiBGQ1xuICB9XG5cbiAgLyoqXG4gICAqIG9wdGlvbnMgd2hpY2ggb3ZlcnJpZGUgdGhlIG9wdGlvbnMgc2V0IGluIHRoZSBMUlVDYWNoZSBjb25zdHJ1Y3RvclxuICAgKiB3aGVuIGNhbGxpbmcge0BsaW5rIExSVUNhY2hlI21lbW99LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSB1bmlvbiBvZiB7QGxpbmsgR2V0T3B0aW9uc30gYW5kIHtAbGluayBTZXRPcHRpb25zfSwgcGx1c1xuICAgKiB7QGxpbmsgTWVtb09wdGlvbnMuZm9yY2VSZWZyZXNofSwgYW5kXG4gICAqIHtAbGluayBNZW1vT3B0aW9ucy5jb250ZXh0fVxuICAgKlxuICAgKiBBbnkgb2YgdGhlc2UgbWF5IGJlIG1vZGlmaWVkIGluIHRoZSB7QGxpbmsgT3B0aW9uc0Jhc2UubWVtb01ldGhvZH1cbiAgICogZnVuY3Rpb24sIGJ1dCB0aGUge0BsaW5rIEdldE9wdGlvbnN9IGZpZWxkcyB3aWxsIG9mIGNvdXJzZSBoYXZlIG5vXG4gICAqIGVmZmVjdCwgYXMgdGhlIHtAbGluayBMUlVDYWNoZSNnZXR9IGNhbGwgYWxyZWFkeSBoYXBwZW5lZCBieSB0aGUgdGltZVxuICAgKiB0aGUgbWVtb01ldGhvZCBpcyBjYWxsZWQuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE1lbW9pemVyTWVtb09wdGlvbnM8SywgViwgRkMgPSB1bmtub3duPlxuICAgIGV4dGVuZHMgUGljazxcbiAgICAgIE9wdGlvbnNCYXNlPEssIFYsIEZDPixcbiAgICAgIHwgJ2FsbG93U3RhbGUnXG4gICAgICB8ICd1cGRhdGVBZ2VPbkdldCdcbiAgICAgIHwgJ25vRGVsZXRlT25TdGFsZUdldCdcbiAgICAgIHwgJ3NpemVDYWxjdWxhdGlvbidcbiAgICAgIHwgJ3R0bCdcbiAgICAgIHwgJ25vRGlzcG9zZU9uU2V0J1xuICAgICAgfCAnbm9VcGRhdGVUVEwnXG4gICAgPiB7XG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gICAgc2l6ZT86IFNpemVcbiAgICBzdGFydD86IE1pbGxpc2Vjb25kc1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdGhhdCBtYXkgYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgTFJVQ2FjaGUjaGFzfSBtZXRob2QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEhhc09wdGlvbnM8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBQaWNrPE9wdGlvbnNCYXNlPEssIFYsIEZDPiwgJ3VwZGF0ZUFnZU9uSGFzJz4ge1xuICAgIHN0YXR1cz86IFN0YXR1czxWPlxuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdGhhdCBtYXkgYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSBtZXRob2QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEdldE9wdGlvbnM8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBQaWNrPFxuICAgICAgT3B0aW9uc0Jhc2U8SywgViwgRkM+LFxuICAgICAgJ2FsbG93U3RhbGUnIHwgJ3VwZGF0ZUFnZU9uR2V0JyB8ICdub0RlbGV0ZU9uU3RhbGVHZXQnXG4gICAgPiB7XG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gIH1cblxuICAvKipcbiAgICogT3B0aW9ucyB0aGF0IG1heSBiZSBwYXNzZWQgdG8gdGhlIHtAbGluayBMUlVDYWNoZSNwZWVrfSBtZXRob2QuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFBlZWtPcHRpb25zPEssIFYsIEZDPlxuICAgIGV4dGVuZHMgUGljazxPcHRpb25zQmFzZTxLLCBWLCBGQz4sICdhbGxvd1N0YWxlJz4ge31cblxuICAvKipcbiAgICogT3B0aW9ucyB0aGF0IG1heSBiZSBwYXNzZWQgdG8gdGhlIHtAbGluayBMUlVDYWNoZSNzZXR9IG1ldGhvZC5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2V0T3B0aW9uczxLLCBWLCBGQz5cbiAgICBleHRlbmRzIFBpY2s8XG4gICAgICBPcHRpb25zQmFzZTxLLCBWLCBGQz4sXG4gICAgICAnc2l6ZUNhbGN1bGF0aW9uJyB8ICd0dGwnIHwgJ25vRGlzcG9zZU9uU2V0JyB8ICdub1VwZGF0ZVRUTCdcbiAgICA+IHtcbiAgICAvKipcbiAgICAgKiBJZiBzaXplIHRyYWNraW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0dGluZyBhbiBleHBsaWNpdCBzaXplXG4gICAgICogaW4gdGhlIHtAbGluayBMUlVDYWNoZSNzZXR9IGNhbGwgd2lsbCBwcmV2ZW50IGNhbGxpbmcgdGhlXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLnNpemVDYWxjdWxhdGlvbn0gZnVuY3Rpb24uXG4gICAgICovXG4gICAgc2l6ZT86IFNpemVcbiAgICAvKipcbiAgICAgKiBJZiBUVEwgdHJhY2tpbmcgaXMgZW5hYmxlZCwgdGhlbiBzZXR0aW5nIGFuIGV4cGxpY2l0IHN0YXJ0XG4gICAgICogdGltZSBpbiB0aGUge0BsaW5rIExSVUNhY2hlI3NldH0gY2FsbCB3aWxsIG92ZXJyaWRlIHRoZVxuICAgICAqIGRlZmF1bHQgdGltZSBmcm9tIGBwZXJmb3JtYW5jZS5ub3coKWAgb3IgYERhdGUubm93KClgLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGl0IG11c3QgYmUgYSB2YWxpZCB2YWx1ZSBmb3Igd2hpY2hldmVyIHRpbWUtdHJhY2tpbmdcbiAgICAgKiBtZXRob2QgaXMgaW4gdXNlLlxuICAgICAqL1xuICAgIHN0YXJ0PzogTWlsbGlzZWNvbmRzXG4gICAgc3RhdHVzPzogU3RhdHVzPFY+XG4gIH1cblxuICAvKipcbiAgICogVGhlIHR5cGUgc2lnbmF0dXJlIGZvciB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBvcHRpb24uXG4gICAqL1xuICBleHBvcnQgdHlwZSBGZXRjaGVyPEssIFYsIEZDID0gdW5rbm93bj4gPSAoXG4gICAga2V5OiBLLFxuICAgIHN0YWxlVmFsdWU6IFYgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogRmV0Y2hlck9wdGlvbnM8SywgViwgRkM+LFxuICApID0+IFByb21pc2U8ViB8IHVuZGVmaW5lZCB8IHZvaWQ+IHwgViB8IHVuZGVmaW5lZCB8IHZvaWRcblxuICAvKipcbiAgICogdGhlIHR5cGUgc2lnbmF0dXJlIGZvciB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLm1lbW9NZXRob2R9IG9wdGlvbi5cbiAgICovXG4gIGV4cG9ydCB0eXBlIE1lbW9pemVyPEssIFYsIEZDID0gdW5rbm93bj4gPSAoXG4gICAga2V5OiBLLFxuICAgIHN0YWxlVmFsdWU6IFYgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogTWVtb2l6ZXJPcHRpb25zPEssIFYsIEZDPixcbiAgKSA9PiBWXG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgd2hpY2ggbWF5IGJlIHBhc3NlZCB0byB0aGUge0BsaW5rIExSVUNhY2hlfSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogTW9zdCBvZiB0aGVzZSBtYXkgYmUgb3ZlcnJpZGRlbiBpbiB0aGUgdmFyaW91cyBvcHRpb25zIHRoYXQgdXNlXG4gICAqIHRoZW0uXG4gICAqXG4gICAqIERlc3BpdGUgYWxsIGJlaW5nIHRlY2huaWNhbGx5IG9wdGlvbmFsLCB0aGUgY29uc3RydWN0b3IgcmVxdWlyZXMgdGhhdFxuICAgKiBhIGNhY2hlIGlzIGF0IG1pbmltdW0gbGltaXRlZCBieSBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgT3B0aW9uc0Jhc2UubWF4fSxcbiAgICoge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0sIG9yIHtAbGluayBPcHRpb25zQmFzZS5tYXhTaXplfS5cbiAgICpcbiAgICogSWYge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgdXNlZCBhbG9uZSwgdGhlbiBpdCBpcyBzdHJvbmdseSBhZHZpc2VkXG4gICAqIChhbmQgaW4gZmFjdCByZXF1aXJlZCBieSB0aGUgdHlwZSBkZWZpbml0aW9ucyBoZXJlKSB0aGF0IHRoZSBjYWNoZVxuICAgKiBhbHNvIHNldCB7QGxpbmsgT3B0aW9uc0Jhc2UudHRsQXV0b3B1cmdlfSwgdG8gcHJldmVudCBwb3RlbnRpYWxseVxuICAgKiB1bmJvdW5kZWQgc3RvcmFnZS5cbiAgICpcbiAgICogQWxsIG9wdGlvbnMgYXJlIGFsc28gYXZhaWxhYmxlIG9uIHRoZSB7QGxpbmsgTFJVQ2FjaGV9IGluc3RhbmNlLCBtYWtpbmdcbiAgICogaXQgc2FmZSB0byBwYXNzIGFuIExSVUNhY2hlIGluc3RhbmNlIGFzIHRoZSBvcHRpb25zIGFyZ3VtZW1udCB0b1xuICAgKiBtYWtlIGFub3RoZXIgZW1wdHkgY2FjaGUgb2YgdGhlIHNhbWUgdHlwZS5cbiAgICpcbiAgICogU29tZSBvcHRpb25zIGFyZSBtYXJrZWQgYXMgcmVhZC1vbmx5LCBiZWNhdXNlIGNoYW5naW5nIHRoZW0gYWZ0ZXJcbiAgICogaW5zdGFudGlhdGlvbiBpcyBub3Qgc2FmZS4gQ2hhbmdpbmcgYW55IG9mIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgb2ZcbiAgICogY291cnNlIG9ubHkgaGF2ZSBhbiBlZmZlY3Qgb24gc3Vic2VxdWVudCBtZXRob2QgY2FsbHMuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNCYXNlPEssIFYsIEZDPiB7XG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHN0b3JlIGluIHRoZSBjYWNoZSBiZWZvcmUgZXZpY3RpbmdcbiAgICAgKiBvbGQgZW50cmllcy4gVGhpcyBpcyByZWFkLW9ubHkgb24gdGhlIHtAbGluayBMUlVDYWNoZX0gaW5zdGFuY2UsXG4gICAgICogYW5kIG1heSBub3QgYmUgb3ZlcnJpZGRlbi5cbiAgICAgKlxuICAgICAqIElmIHNldCwgdGhlbiBzdG9yYWdlIHNwYWNlIHdpbGwgYmUgcHJlLWFsbG9jYXRlZCBhdCBjb25zdHJ1Y3Rpb25cbiAgICAgKiB0aW1lLCBhbmQgdGhlIGNhY2hlIHdpbGwgcGVyZm9ybSBzaWduaWZpY2FudGx5IGZhc3Rlci5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBzaWduaWZpY2FudGx5IGZld2VyIGl0ZW1zIG1heSBiZSBzdG9yZWQsIGlmXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm1heFNpemV9IGFuZC9vciB7QGxpbmsgT3B0aW9uc0Jhc2UudHRsfSBhcmUgYWxzb1xuICAgICAqIHNldC5cbiAgICAgKlxuICAgICAqICoqSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gc2V0IGEgYG1heGAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoXG4gICAgICogb2YgdGhlIGNhY2hlLioqXG4gICAgICovXG4gICAgbWF4PzogQ291bnRcblxuICAgIC8qKlxuICAgICAqIE1heCB0aW1lIGluIG1pbGxpc2Vjb25kcyBmb3IgaXRlbXMgdG8gbGl2ZSBpbiBjYWNoZSBiZWZvcmUgdGhleSBhcmVcbiAgICAgKiBjb25zaWRlcmVkIHN0YWxlLiAgTm90ZSB0aGF0IHN0YWxlIGl0ZW1zIGFyZSBOT1QgcHJlZW1wdGl2ZWx5IHJlbW92ZWQgYnlcbiAgICAgKiBkZWZhdWx0LCBhbmQgTUFZIGxpdmUgaW4gdGhlIGNhY2hlLCBjb250cmlidXRpbmcgdG8gaXRzIExSVSBtYXgsIGxvbmdcbiAgICAgKiBhZnRlciB0aGV5IGhhdmUgZXhwaXJlZCwgdW5sZXNzIHtAbGluayBPcHRpb25zQmFzZS50dGxBdXRvcHVyZ2V9IGlzXG4gICAgICogc2V0LlxuICAgICAqXG4gICAgICogSWYgc2V0IHRvIGAwYCAodGhlIGRlZmF1bHQgdmFsdWUpLCB0aGVuIHRoYXQgbWVhbnMgXCJkbyBub3QgdHJhY2tcbiAgICAgKiBUVExcIiwgbm90IFwiZXhwaXJlIGltbWVkaWF0ZWx5XCIuXG4gICAgICpcbiAgICAgKiBBbHNvLCBhcyB0aGlzIGNhY2hlIGlzIG9wdGltaXplZCBmb3IgTFJVL01SVSBvcGVyYXRpb25zLCBzb21lIG9mXG4gICAgICogdGhlIHN0YWxlbmVzcy9UVEwgY2hlY2tzIHdpbGwgcmVkdWNlIHBlcmZvcm1hbmNlLCBhcyB0aGV5IHdpbGwgaW5jdXJcbiAgICAgKiBvdmVyaGVhZCBieSBkZWxldGluZyBpdGVtcy5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbm90IHByaW1hcmlseSBhIFRUTCBjYWNoZSwgYW5kIGRvZXMgbm90IG1ha2Ugc3Ryb25nIFRUTFxuICAgICAqIGd1YXJhbnRlZXMuIFRoZXJlIGlzIG5vIHByZS1lbXB0aXZlIHBydW5pbmcgb2YgZXhwaXJlZCBpdGVtcywgYnV0IHlvdVxuICAgICAqIF9tYXlfIHNldCBhIFRUTCBvbiB0aGUgY2FjaGUsIGFuZCBpdCB3aWxsIHRyZWF0IGV4cGlyZWQgaXRlbXMgYXMgbWlzc2luZ1xuICAgICAqIHdoZW4gdGhleSBhcmUgZmV0Y2hlZCwgYW5kIGRlbGV0ZSB0aGVtLlxuICAgICAqXG4gICAgICogT3B0aW9uYWwsIGJ1dCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgaW4gbXMgaWYgc3BlY2lmaWVkLlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGFuIG9wdGlvbnMgb2JqZWN0IHRvIGBjYWNoZS5zZXQoKWAuXG4gICAgICpcbiAgICAgKiBBdCBsZWFzdCBvbmUgb2YgYG1heGAsIGBtYXhTaXplYCwgb3IgYFRUTGAgaXMgcmVxdWlyZWQuIFRoaXMgbXVzdCBiZSBhXG4gICAgICogcG9zaXRpdmUgaW50ZWdlciBpZiBzZXQuXG4gICAgICpcbiAgICAgKiBFdmVuIGlmIHR0bCB0cmFja2luZyBpcyBlbmFibGVkLCAqKml0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHNldCBhXG4gICAgICogYG1heGAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIHRoZSBjYWNoZS4qKlxuICAgICAqXG4gICAgICogSWYgdHRsIHRyYWNraW5nIGlzIGVuYWJsZWQsIGFuZCBgbWF4YCBhbmQgYG1heFNpemVgIGFyZSBub3Qgc2V0LFxuICAgICAqIGFuZCBgdHRsQXV0b3B1cmdlYCBpcyBub3Qgc2V0LCB0aGVuIGEgd2FybmluZyB3aWxsIGJlIGVtaXR0ZWRcbiAgICAgKiBjYXV0aW9uaW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uXG4gICAgICogKFRoZSBUeXBlU2NyaXB0IGRlZmluaXRpb25zIHdpbGwgYWxzbyBkaXNjb3VyYWdlIHRoaXMuKVxuICAgICAqL1xuICAgIHR0bD86IE1pbGxpc2Vjb25kc1xuXG4gICAgLyoqXG4gICAgICogTWluaW11bSBhbW91bnQgb2YgdGltZSBpbiBtcyBpbiB3aGljaCB0byBjaGVjayBmb3Igc3RhbGVuZXNzLlxuICAgICAqIERlZmF1bHRzIHRvIDEsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGN1cnJlbnQgdGltZSBpcyBjaGVja2VkXG4gICAgICogYXQgbW9zdCBvbmNlIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIFNldCB0byAwIHRvIGNoZWNrIHRoZSBjdXJyZW50IHRpbWUgZXZlcnkgdGltZSBzdGFsZW5lc3MgaXMgdGVzdGVkLlxuICAgICAqIChUaGlzIHJlZHVjZXMgcGVyZm9ybWFuY2UsIGFuZCBpcyB0aGVvcmV0aWNhbGx5IHVubmVjZXNzYXJ5LilcbiAgICAgKlxuICAgICAqIFNldHRpbmcgdGhpcyB0byBhIGhpZ2hlciB2YWx1ZSB3aWxsIGltcHJvdmUgcGVyZm9ybWFuY2Ugc29tZXdoYXRcbiAgICAgKiB3aGlsZSB1c2luZyB0dGwgdHJhY2tpbmcsIGFsYmVpdCBhdCB0aGUgZXhwZW5zZSBvZiBrZWVwaW5nIHN0YWxlXG4gICAgICogaXRlbXMgYXJvdW5kIGEgYml0IGxvbmdlciB0aGFuIHRoZWlyIFRUTHMgd291bGQgaW5kaWNhdGUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdHRsUmVzb2x1dGlvbj86IE1pbGxpc2Vjb25kc1xuXG4gICAgLyoqXG4gICAgICogUHJlZW1wdGl2ZWx5IHJlbW92ZSBzdGFsZSBpdGVtcyBmcm9tIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIG1heSAqc2lnbmlmaWNhbnRseSogZGVncmFkZSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpZlxuICAgICAqIHRoZSBjYWNoZSBpcyBzdG9yaW5nIGEgbGFyZ2UgbnVtYmVyIG9mIGl0ZW1zLiBJdCBpcyBhbG1vc3QgYWx3YXlzIGJlc3RcbiAgICAgKiB0byBqdXN0IGxlYXZlIHRoZSBzdGFsZSBpdGVtcyBpbiB0aGUgY2FjaGUsIGFuZCBsZXQgdGhlbSBmYWxsIG91dCBhcyBuZXdcbiAgICAgKiBpdGVtcyBhcmUgYWRkZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IHtAbGluayBPcHRpb25zQmFzZS5hbGxvd1N0YWxlfSBpcyBhIGJpdFxuICAgICAqIHBvaW50bGVzcywgYXMgc3RhbGUgaXRlbXMgd2lsbCBiZSBkZWxldGVkIGFsbW9zdCBhcyBzb29uIGFzIHRoZXlcbiAgICAgKiBleHBpcmUuXG4gICAgICpcbiAgICAgKiBVc2Ugd2l0aCBjYXV0aW9uIVxuICAgICAqL1xuICAgIHR0bEF1dG9wdXJnZT86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFdoZW4gdXNpbmcgdGltZS1leHBpcmluZyBlbnRyaWVzIHdpdGggYHR0bGAsIHNldHRpbmcgdGhpcyB0byBgdHJ1ZWAgd2lsbFxuICAgICAqIG1ha2UgZWFjaCBpdGVtJ3MgYWdlIHJlc2V0IHRvIDAgd2hlbmV2ZXIgaXQgaXMgcmV0cmlldmVkIGZyb20gY2FjaGUgd2l0aFxuICAgICAqIHtAbGluayBMUlVDYWNoZSNnZXR9LCBjYXVzaW5nIGl0IHRvIG5vdCBleHBpcmUuIChJdCBjYW4gc3RpbGwgZmFsbCBvdXRcbiAgICAgKiBvZiBjYWNoZSBiYXNlZCBvbiByZWNlbmN5IG9mIHVzZSwgb2YgY291cnNlLilcbiAgICAgKlxuICAgICAqIEhhcyBubyBlZmZlY3QgaWYge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgbm90IHNldC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBhbiBvcHRpb25zIG9iamVjdCB0byBgY2FjaGUuZ2V0KClgLlxuICAgICAqL1xuICAgIHVwZGF0ZUFnZU9uR2V0PzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hlbiB1c2luZyB0aW1lLWV4cGlyaW5nIGVudHJpZXMgd2l0aCBgdHRsYCwgc2V0dGluZyB0aGlzIHRvIGB0cnVlYCB3aWxsXG4gICAgICogbWFrZSBlYWNoIGl0ZW0ncyBhZ2UgcmVzZXQgdG8gMCB3aGVuZXZlciBpdHMgcHJlc2VuY2UgaW4gdGhlIGNhY2hlIGlzXG4gICAgICogY2hlY2tlZCB3aXRoIHtAbGluayBMUlVDYWNoZSNoYXN9LCBjYXVzaW5nIGl0IHRvIG5vdCBleHBpcmUuIChJdCBjYW5cbiAgICAgKiBzdGlsbCBmYWxsIG91dCBvZiBjYWNoZSBiYXNlZCBvbiByZWNlbmN5IG9mIHVzZSwgb2YgY291cnNlLilcbiAgICAgKlxuICAgICAqIEhhcyBubyBlZmZlY3QgaWYge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgbm90IHNldC5cbiAgICAgKi9cbiAgICB1cGRhdGVBZ2VPbkhhcz86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIEFsbG93IHtAbGluayBMUlVDYWNoZSNnZXR9IGFuZCB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IGNhbGxzIHRvIHJldHVyblxuICAgICAqIHN0YWxlIGRhdGEsIGlmIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQsIGlmIHlvdSBzZXQgYHR0bGAsIHN0YWxlIGl0ZW1zIHdpbGwgb25seSBiZSBkZWxldGVkIGZyb20gdGhlXG4gICAgICogY2FjaGUgd2hlbiB5b3UgYGdldChrZXkpYC4gVGhhdCBpcywgaXQncyBub3QgcHJlZW1wdGl2ZWx5IHBydW5pbmcgaXRlbXMsXG4gICAgICogdW5sZXNzIHtAbGluayBPcHRpb25zQmFzZS50dGxBdXRvcHVyZ2V9IGlzIHNldC5cbiAgICAgKlxuICAgICAqIElmIHlvdSBzZXQgYGFsbG93U3RhbGU6dHJ1ZWAsIGl0J2xsIHJldHVybiB0aGUgc3RhbGUgdmFsdWUgKmFzIHdlbGwgYXMqXG4gICAgICogZGVsZXRpbmcgaXQuIElmIHlvdSBkb24ndCBzZXQgdGhpcywgdGhlbiBpdCdsbCByZXR1cm4gYHVuZGVmaW5lZGAgd2hlblxuICAgICAqIHlvdSB0cnkgdG8gZ2V0IGEgc3RhbGUgZW50cnkuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgd2hlbiBhIHN0YWxlIGVudHJ5IGlzIGZldGNoZWQsIF9ldmVuIGlmIGl0IGlzIHJldHVybmVkIGR1ZSB0b1xuICAgICAqIGBhbGxvd1N0YWxlYCBiZWluZyBzZXRfLCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGltbWVkaWF0ZWx5LiBZb3VcbiAgICAgKiBjYW4gc3VwcHJlc3MgdGhpcyBiZWhhdmlvciBieSBzZXR0aW5nXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm5vRGVsZXRlT25TdGFsZUdldH0sIGVpdGhlciBpbiB0aGUgY29uc3RydWN0b3IsIG9yIGluXG4gICAgICogdGhlIG9wdGlvbnMgcHJvdmlkZWQgdG8ge0BsaW5rIExSVUNhY2hlI2dldH0uXG4gICAgICpcbiAgICAgKiBUaGlzIG1heSBiZSBvdmVycmlkZGVuIGJ5IHBhc3NpbmcgYW4gb3B0aW9ucyBvYmplY3QgdG8gYGNhY2hlLmdldCgpYC5cbiAgICAgKiBUaGUgYGNhY2hlLmhhcygpYCBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIGBmYWxzZWAgZm9yIHN0YWxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogT25seSByZWxldmFudCBpZiBhIHR0bCBpcyBzZXQuXG4gICAgICovXG4gICAgYWxsb3dTdGFsZT86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uIGl0ZW1zIHdoZW4gdGhleSBhcmUgZHJvcHBlZCBmcm9tIHRoZVxuICAgICAqIGNhY2hlLCBhcyBgZGlzcG9zZSh2YWx1ZSwga2V5LCByZWFzb24pYC5cbiAgICAgKlxuICAgICAqIFRoaXMgY2FuIGJlIGhhbmR5IGlmIHlvdSB3YW50IHRvIGNsb3NlIGZpbGUgZGVzY3JpcHRvcnMgb3IgZG9cbiAgICAgKiBvdGhlciBjbGVhbnVwIHRhc2tzIHdoZW4gaXRlbXMgYXJlIG5vIGxvbmdlciBzdG9yZWQgaW4gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogKipOT1RFKio6IEl0IGlzIGNhbGxlZCBfYmVmb3JlXyB0aGUgaXRlbSBoYXMgYmVlbiBmdWxseSByZW1vdmVkXG4gICAgICogZnJvbSB0aGUgY2FjaGUsIHNvIGlmIHlvdSB3YW50IHRvIHB1dCBpdCByaWdodCBiYWNrIGluLCB5b3UgbmVlZFxuICAgICAqIHRvIHdhaXQgdW50aWwgdGhlIG5leHQgdGljay4gSWYgeW91IHRyeSB0byBhZGQgaXQgYmFjayBpbiBkdXJpbmdcbiAgICAgKiB0aGUgYGRpc3Bvc2UoKWAgZnVuY3Rpb24gY2FsbCwgaXQgd2lsbCBicmVhayB0aGluZ3MgaW4gc3VidGxlIGFuZFxuICAgICAqIHdlaXJkIHdheXMuXG4gICAgICpcbiAgICAgKiBVbmxpa2Ugc2V2ZXJhbCBvdGhlciBvcHRpb25zLCB0aGlzIG1heSBfbm90XyBiZSBvdmVycmlkZGVuIGJ5XG4gICAgICogcGFzc2luZyBhbiBvcHRpb24gdG8gYHNldCgpYCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gICAgICpcbiAgICAgKiBUaGUgYHJlYXNvbmAgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzLCBjb3JyZXNwb25kaW5nXG4gICAgICogdG8gdGhlIHJlYXNvbiBmb3IgdGhlIGl0ZW0ncyBkZWxldGlvbjpcbiAgICAgKlxuICAgICAqIC0gYGV2aWN0YCBJdGVtIHdhcyBldmljdGVkIHRvIG1ha2Ugc3BhY2UgZm9yIGEgbmV3IGFkZGl0aW9uXG4gICAgICogLSBgc2V0YCBJdGVtIHdhcyBvdmVyd3JpdHRlbiBieSBhIG5ldyB2YWx1ZVxuICAgICAqIC0gYGV4cGlyZWAgSXRlbSBleHBpcmVkIGl0cyBUVExcbiAgICAgKiAtIGBmZXRjaGAgSXRlbSB3YXMgZGVsZXRlZCBkdWUgdG8gYSBmYWlsZWQgb3IgYWJvcnRlZCBmZXRjaCwgb3IgYVxuICAgICAqICAgZmV0Y2hNZXRob2QgcmV0dXJuaW5nIGB1bmRlZmluZWQuXG4gICAgICogLSBgZGVsZXRlYCBJdGVtIHdhcyByZW1vdmVkIGJ5IGV4cGxpY2l0IGBjYWNoZS5kZWxldGUoa2V5KWAsXG4gICAgICogICBgY2FjaGUuY2xlYXIoKWAsIG9yIGBjYWNoZS5zZXQoa2V5LCB1bmRlZmluZWQpYC5cbiAgICAgKi9cbiAgICBkaXNwb3NlPzogRGlzcG9zZXI8SywgVj5cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gbmV3IGl0ZW1zIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBjYWNoZSxcbiAgICAgKiBhcyBgb25JbnNlcnQodmFsdWUsIGtleSwgcmVhc29uKWAuXG4gICAgICpcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IG5lZWQgdG8gcGVyZm9ybSBhY3Rpb25zIHdoZW4gYW4gaXRlbSBpc1xuICAgICAqIGFkZGVkLCBzdWNoIGFzIGxvZ2dpbmcgb3IgdHJhY2tpbmcgaW5zZXJ0aW9ucy5cbiAgICAgKlxuICAgICAqIFVubGlrZSBzb21lIG90aGVyIG9wdGlvbnMsIHRoaXMgbWF5IF9ub3RfIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZ1xuICAgICAqIGFuIG9wdGlvbiB0byBgc2V0KClgLCBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbnNpc3RlbmN5IHJlYXNvbnMuXG4gICAgICovXG4gICAgb25JbnNlcnQ/OiBJbnNlcnRlcjxLLCBWPlxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhbWUgYXMge0BsaW5rIE9wdGlvbnNCYXNlLmRpc3Bvc2V9LCBidXQgY2FsbGVkICphZnRlciogdGhlIGVudHJ5XG4gICAgICogaXMgY29tcGxldGVseSByZW1vdmVkIGFuZCB0aGUgY2FjaGUgaXMgb25jZSBhZ2FpbiBpbiBhIGNsZWFuIHN0YXRlLlxuICAgICAqXG4gICAgICogSXQgaXMgc2FmZSB0byBhZGQgYW4gaXRlbSByaWdodCBiYWNrIGludG8gdGhlIGNhY2hlIGF0IHRoaXMgcG9pbnQuXG4gICAgICogSG93ZXZlciwgbm90ZSB0aGF0IGl0IGlzICp2ZXJ5KiBlYXN5IHRvIGluYWR2ZXJ0ZW50bHkgY3JlYXRlIGluZmluaXRlXG4gICAgICogcmVjdXJzaW9uIHRoaXMgd2F5LlxuICAgICAqL1xuICAgIGRpc3Bvc2VBZnRlcj86IERpc3Bvc2VyPEssIFY+XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBzdXBwcmVzcyBjYWxsaW5nIHRoZVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5kaXNwb3NlfSBmdW5jdGlvbiBpZiB0aGUgZW50cnkga2V5IGlzXG4gICAgICogc3RpbGwgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGFuIG9wdGlvbnMgb2JqZWN0IHRvXG4gICAgICoge0BsaW5rIExSVUNhY2hlI3NldH0uXG4gICAgICpcbiAgICAgKiBPbmx5IHJlbGV2YW50IGlmIGBkaXNwb3NlYCBvciBgZGlzcG9zZUFmdGVyYCBhcmUgc2V0LlxuICAgICAqL1xuICAgIG5vRGlzcG9zZU9uU2V0PzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogQm9vbGVhbiBmbGFnIHRvIHRlbGwgdGhlIGNhY2hlIHRvIG5vdCB1cGRhdGUgdGhlIFRUTCB3aGVuIHNldHRpbmcgYSBuZXdcbiAgICAgKiB2YWx1ZSBmb3IgYW4gZXhpc3Rpbmcga2V5IChpZSwgd2hlbiB1cGRhdGluZyBhIHZhbHVlIHJhdGhlciB0aGFuXG4gICAgICogaW5zZXJ0aW5nIGEgbmV3IHZhbHVlKS4gIE5vdGUgdGhhdCB0aGUgVFRMIHZhbHVlIGlzIF9hbHdheXNfIHNldCAoaWZcbiAgICAgKiBwcm92aWRlZCkgd2hlbiBhZGRpbmcgYSBuZXcgZW50cnkgaW50byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBIYXMgbm8gZWZmZWN0IGlmIGEge0BsaW5rIE9wdGlvbnNCYXNlLnR0bH0gaXMgbm90IHNldC5cbiAgICAgKlxuICAgICAqIE1heSBiZSBwYXNzZWQgYXMgYW4gb3B0aW9uIHRvIHtAbGluayBMUlVDYWNoZSNzZXR9LlxuICAgICAqL1xuICAgIG5vVXBkYXRlVFRMPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGEgcG9zaXRpdmUgaW50ZWdlciB0byB0cmFjayB0aGUgc2l6ZXMgb2YgaXRlbXMgYWRkZWQgdG8gdGhlXG4gICAgICogY2FjaGUsIGFuZCBhdXRvbWF0aWNhbGx5IGV2aWN0IGl0ZW1zIGluIG9yZGVyIHRvIHN0YXkgYmVsb3cgdGhpcyBzaXplLlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIG1heSByZXN1bHQgaW4gZmV3ZXIgdGhhbiBgbWF4YCBpdGVtcyBiZWluZyBzdG9yZWQuXG4gICAgICpcbiAgICAgKiBBdHRlbXB0aW5nIHRvIGFkZCBhbiBpdGVtIHRvIHRoZSBjYWNoZSB3aG9zZSBjYWxjdWxhdGVkIHNpemUgaXMgZ3JlYXRlclxuICAgICAqIHRoYXQgdGhpcyBhbW91bnQgd2lsbCBiZSBhIG5vLW9wLiBUaGUgaXRlbSB3aWxsIG5vdCBiZSBjYWNoZWQsIGFuZCBub1xuICAgICAqIG90aGVyIGl0ZW1zIHdpbGwgYmUgZXZpY3RlZC5cbiAgICAgKlxuICAgICAqIE9wdGlvbmFsLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIFNldHMgYG1heEVudHJ5U2l6ZWAgdG8gdGhlIHNhbWUgdmFsdWUsIHVubGVzcyBhIGRpZmZlcmVudCB2YWx1ZSBpc1xuICAgICAqIHByb3ZpZGVkIGZvciBgbWF4RW50cnlTaXplYC5cbiAgICAgKlxuICAgICAqIEF0IGxlYXN0IG9uZSBvZiBgbWF4YCwgYG1heFNpemVgLCBvciBgVFRMYCBpcyByZXF1aXJlZC4gVGhpcyBtdXN0IGJlIGFcbiAgICAgKiBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNldC5cbiAgICAgKlxuICAgICAqIEV2ZW4gaWYgc2l6ZSB0cmFja2luZyBpcyBlbmFibGVkLCAqKml0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHNldCBhXG4gICAgICogYG1heGAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIHRoZSBjYWNoZS4qKlxuICAgICAqXG4gICAgICogTm90ZSBhbHNvIHRoYXQgc2l6ZSB0cmFja2luZyBjYW4gbmVnYXRpdmVseSBpbXBhY3QgcGVyZm9ybWFuY2UsXG4gICAgICogdGhvdWdoIGZvciBtb3N0IGNhc2VzLCBvbmx5IG1pbmltYWxseS5cbiAgICAgKi9cbiAgICBtYXhTaXplPzogU2l6ZVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gYWxsb3dlZCBzaXplIGZvciBhbnkgc2luZ2xlIGl0ZW0gaW4gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogSWYgYSBsYXJnZXIgaXRlbSBpcyBwYXNzZWQgdG8ge0BsaW5rIExSVUNhY2hlI3NldH0gb3IgcmV0dXJuZWQgYnkgYVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gb3Ige0BsaW5rIE9wdGlvbnNCYXNlLm1lbW9NZXRob2R9LCB0aGVuXG4gICAgICogaXQgd2lsbCBub3QgYmUgc3RvcmVkIGluIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEF0dGVtcHRpbmcgdG8gYWRkIGFuIGl0ZW0gd2hvc2UgY2FsY3VsYXRlZCBzaXplIGlzIGdyZWF0ZXIgdGhhblxuICAgICAqIHRoaXMgYW1vdW50IHdpbGwgbm90IGNhY2hlIHRoZSBpdGVtIG9yIGV2aWN0IGFueSBvbGQgaXRlbXMsIGJ1dFxuICAgICAqIFdJTEwgZGVsZXRlIGFuIGV4aXN0aW5nIHZhbHVlIGlmIG9uZSBpcyBhbHJlYWR5IHByZXNlbnQuXG4gICAgICpcbiAgICAgKiBPcHRpb25hbCwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgcHJvdmlkZWQuIERlZmF1bHRzIHRvXG4gICAgICogdGhlIHZhbHVlIG9mIGBtYXhTaXplYCBpZiBwcm92aWRlZC5cbiAgICAgKi9cbiAgICBtYXhFbnRyeVNpemU/OiBTaXplXG5cbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBpdGVtJ3Mgc2l6ZS5cbiAgICAgKlxuICAgICAqIFJlcXVpcmVzIHtAbGluayBPcHRpb25zQmFzZS5tYXhTaXplfSB0byBiZSBzZXQuXG4gICAgICpcbiAgICAgKiBJZiBub3QgcHJvdmlkZWQsIGFuZCB7QGxpbmsgT3B0aW9uc0Jhc2UubWF4U2l6ZX0gb3JcbiAgICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2UubWF4RW50cnlTaXplfSBhcmUgc2V0LCB0aGVuIGFsbFxuICAgICAqIHtAbGluayBMUlVDYWNoZSNzZXR9IGNhbGxzICoqbXVzdCoqIHByb3ZpZGUgYW4gZXhwbGljaXRcbiAgICAgKiB7QGxpbmsgU2V0T3B0aW9ucy5zaXplfSBvciBzaXplQ2FsY3VsYXRpb24gcGFyYW0uXG4gICAgICovXG4gICAgc2l6ZUNhbGN1bGF0aW9uPzogU2l6ZUNhbGN1bGF0b3I8SywgVj5cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IHByb3ZpZGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3Ige0BsaW5rIExSVUNhY2hlI2ZldGNofVxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBmZXRjaE1ldGhvZChrZXksIHN0YWxlVmFsdWUsIHsgc2lnbmFsLCBvcHRpb25zLCBjb250ZXh0IH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJZiBgZmV0Y2hNZXRob2RgIGlzIG5vdCBwcm92aWRlZCwgdGhlbiBgY2FjaGUuZmV0Y2goa2V5KWAgaXMgZXF1aXZhbGVudFxuICAgICAqIHRvIGBQcm9taXNlLnJlc29sdmUoY2FjaGUuZ2V0KGtleSkpYC5cbiAgICAgKlxuICAgICAqIElmIGF0IGFueSB0aW1lLCBgc2lnbmFsLmFib3J0ZWRgIGlzIHNldCB0byBgdHJ1ZWAsIG9yIGlmIHRoZVxuICAgICAqIGBzaWduYWwub25hYm9ydGAgbWV0aG9kIGlzIGNhbGxlZCwgb3IgaWYgaXQgZW1pdHMgYW4gYCdhYm9ydCdgIGV2ZW50XG4gICAgICogd2hpY2ggeW91IGNhbiBsaXN0ZW4gdG8gd2l0aCBgYWRkRXZlbnRMaXN0ZW5lcmAsIHRoZW4gdGhhdCBtZWFucyB0aGF0XG4gICAgICogdGhlIGZldGNoIHNob3VsZCBiZSBhYmFuZG9uZWQuIFRoaXMgbWF5IGJlIHBhc3NlZCBhbG9uZyB0byBhc3luY1xuICAgICAqIGZ1bmN0aW9ucyBhd2FyZSBvZiBBYm9ydENvbnRyb2xsZXIvQWJvcnRTaWduYWwgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBUaGUgYGZldGNoTWV0aG9kYCBzaG91bGQgKipvbmx5KiogcmV0dXJuIGB1bmRlZmluZWRgIG9yIGEgUHJvbWlzZVxuICAgICAqIHJlc29sdmluZyB0byBgdW5kZWZpbmVkYCBpZiB0aGUgQWJvcnRDb250cm9sbGVyIHNpZ25hbGVkIGFuIGBhYm9ydGBcbiAgICAgKiBldmVudC4gSW4gYWxsIG90aGVyIGNhc2VzLCBpdCBzaG91bGQgcmV0dXJuIG9yIHJlc29sdmUgdG8gYSB2YWx1ZVxuICAgICAqIHN1aXRhYmxlIGZvciBhZGRpbmcgdG8gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogVGhlIGBvcHRpb25zYCBvYmplY3QgaXMgYSB1bmlvbiBvZiB0aGUgb3B0aW9ucyB0aGF0IG1heSBiZSBwcm92aWRlZCB0b1xuICAgICAqIGBzZXQoKWAgYW5kIGBnZXQoKWAuIElmIHRoZXkgYXJlIG1vZGlmaWVkLCB0aGVuIHRoYXQgd2lsbCByZXN1bHQgaW5cbiAgICAgKiBtb2RpZnlpbmcgdGhlIHNldHRpbmdzIHRvIGBjYWNoZS5zZXQoKWAgd2hlbiB0aGUgdmFsdWUgaXMgcmVzb2x2ZWQsIGFuZFxuICAgICAqIGluIHRoZSBjYXNlIG9mXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbn0gYW5kXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufSwgdGhlIGhhbmRsaW5nIG9mXG4gICAgICogYGZldGNoTWV0aG9kYCBmYWlsdXJlcy5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlLCBhIEROUyBjYWNoZSBtYXkgdXBkYXRlIHRoZSBUVEwgYmFzZWQgb24gdGhlIHZhbHVlIHJldHVybmVkXG4gICAgICogZnJvbSBhIHJlbW90ZSBETlMgc2VydmVyIGJ5IGNoYW5naW5nIGBvcHRpb25zLnR0bGAgaW4gdGhlIGBmZXRjaE1ldGhvZGAuXG4gICAgICovXG4gICAgZmV0Y2hNZXRob2Q/OiBGZXRjaGVyPEssIFYsIEZDPlxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgcHJvdmlkZXMgdGhlIGltcGxlbWVudGF0aW9uIGZvciB7QGxpbmsgTFJVQ2FjaGUjbWVtb31cbiAgICAgKi9cbiAgICBtZW1vTWV0aG9kPzogTWVtb2l6ZXI8SywgViwgRkM+XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBzdXBwcmVzcyB0aGUgZGVsZXRpb24gb2Ygc3RhbGUgZGF0YSB3aGVuIGFcbiAgICAgKiB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9IHJldHVybnMgYSByZWplY3RlZCBwcm9taXNlLlxuICAgICAqL1xuICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIERvIG5vdCBkZWxldGUgc3RhbGUgaXRlbXMgd2hlbiB0aGV5IGFyZSByZXRyaWV2ZWQgd2l0aFxuICAgICAqIHtAbGluayBMUlVDYWNoZSNnZXR9LlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHRoZSBgZ2V0YCByZXR1cm4gdmFsdWUgd2lsbCBzdGlsbCBiZSBgdW5kZWZpbmVkYFxuICAgICAqIHVubGVzcyB7QGxpbmsgT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaXMgdHJ1ZS5cbiAgICAgKlxuICAgICAqIFdoZW4gdXNpbmcgdGltZS1leHBpcmluZyBlbnRyaWVzIHdpdGggYHR0bGAsIGJ5IGRlZmF1bHQgc3RhbGVcbiAgICAgKiBpdGVtcyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgd2hlbiB0aGUga2V5IGlzIGFjY2Vzc2VkXG4gICAgICogd2l0aCBgY2FjaGUuZ2V0KClgLlxuICAgICAqXG4gICAgICogU2V0dGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHN0YWxlIGl0ZW1zIHRvIHJlbWFpbiBpbiB0aGUgY2FjaGUsIHVudGlsXG4gICAgICogdGhleSBhcmUgZXhwbGljaXRseSBkZWxldGVkIHdpdGggYGNhY2hlLmRlbGV0ZShrZXkpYCwgb3IgcmV0cmlldmVkIHdpdGhcbiAgICAgKiBgbm9EZWxldGVPblN0YWxlR2V0YCBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBhbiBvcHRpb25zIG9iamVjdCB0byBgY2FjaGUuZ2V0KClgLlxuICAgICAqXG4gICAgICogT25seSByZWxldmFudCBpZiBhIHR0bCBpcyB1c2VkLlxuICAgICAqL1xuICAgIG5vRGVsZXRlT25TdGFsZUdldD86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGFsbG93IHJldHVybmluZyBzdGFsZSBkYXRhIHdoZW4gYVxuICAgICAqIHtAbGluayBPcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gdGhyb3dzIGFuIGVycm9yIG9yIHJldHVybnMgYSByZWplY3RlZFxuICAgICAqIHByb21pc2UuXG4gICAgICpcbiAgICAgKiBUaGlzIGRpZmZlcnMgZnJvbSB1c2luZyB7QGxpbmsgT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaW4gdGhhdCBzdGFsZVxuICAgICAqIGRhdGEgd2lsbCBPTkxZIGJlIHJldHVybmVkIGluIHRoZSBjYXNlIHRoYXQgdGhlIHtAbGluayBMUlVDYWNoZSNmZXRjaH1cbiAgICAgKiBmYWlscywgbm90IGFueSBvdGhlciB0aW1lcy5cbiAgICAgKlxuICAgICAqIElmIGEgYGZldGNoTWV0aG9kYCBmYWlscywgYW5kIHRoZXJlIGlzIG5vIHN0YWxlIHZhbHVlIGF2YWlsYWJsZSwgdGhlXG4gICAgICogYGZldGNoKClgIHdpbGwgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gSWUsIGFsbCBgZmV0Y2hNZXRob2RgIGVycm9ycyBhcmVcbiAgICAgKiBzdXBwcmVzc2VkLlxuICAgICAqXG4gICAgICogSW1wbGllcyBgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIHNldCBpbiBjYWxscyB0byBgZmV0Y2goKWAsIG9yIGRlZmF1bHRlZCBvbiB0aGUgY29uc3RydWN0b3IsXG4gICAgICogb3Igb3ZlcnJpZGRlbiBieSBtb2RpZnlpbmcgdGhlIG9wdGlvbnMgb2JqZWN0IGluIHRoZSBgZmV0Y2hNZXRob2RgLlxuICAgICAqL1xuICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gcmV0dXJuIGEgc3RhbGUgdmFsdWUgZnJvbSB0aGUgY2FjaGUgd2hlbiB0aGVcbiAgICAgKiBgQWJvcnRTaWduYWxgIHBhc3NlZCB0byB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBkaXNwYXRjaGVzXG4gICAgICogYW4gYCdhYm9ydCdgIGV2ZW50LCB3aGV0aGVyIHVzZXItdHJpZ2dlcmVkLCBvciBkdWUgdG8gaW50ZXJuYWwgY2FjaGVcbiAgICAgKiBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIFVubGVzcyB7QGxpbmsgT3B0aW9uc0Jhc2UuaWdub3JlRmV0Y2hBYm9ydH0gaXMgYWxzbyBzZXQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICoge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSB3aWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgY2FuY2VsZWQsIGFuZFxuICAgICAqIGFueSB2YWx1ZSBpdCByZXR1cm5zIHdpbGwgYmUgaWdub3JlZCBhbmQgbm90IGNhY2hlZC5cbiAgICAgKlxuICAgICAqIENhdmVhdDogc2luY2UgZmV0Y2hlcyBhcmUgYWJvcnRlZCB3aGVuIGEgbmV3IHZhbHVlIGlzIGV4cGxpY2l0bHlcbiAgICAgKiBzZXQgaW4gdGhlIGNhY2hlLCB0aGlzIGNhbiBsZWFkIHRvIGZldGNoIHJldHVybmluZyBhIHN0YWxlIHZhbHVlLFxuICAgICAqIHNpbmNlIHRoYXQgd2FzIHRoZSBmYWxsYmFjayB2YWx1ZSBfYXQgdGhlIG1vbWVudCB0aGUgYGZldGNoKClgIHdhc1xuICAgICAqIGluaXRpYXRlZF8sIGV2ZW4gdGhvdWdoIHRoZSBuZXcgdXBkYXRlZCB2YWx1ZSBpcyBub3cgcHJlc2VudCBpblxuICAgICAqIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCBjYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIGFueT4oe1xuICAgICAqICAgdHRsOiAxMDAsXG4gICAgICogICBmZXRjaE1ldGhvZDogYXN5bmMgKHVybCwgb2xkVmFsdWUsIHsgc2lnbmFsIH0pID0+ICB7XG4gICAgICogICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWwgfSlcbiAgICAgKiAgICAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKClcbiAgICAgKiAgIH1cbiAgICAgKiB9KVxuICAgICAqIGNhY2hlLnNldCgnaHR0cHM6Ly9leGFtcGxlLmNvbS8nLCB7IHNvbWU6ICdkYXRhJyB9KVxuICAgICAqIC8vIDEwMG1zIGdvIGJ5Li4uXG4gICAgICogY29uc3QgcmVzdWx0ID0gY2FjaGUuZmV0Y2goJ2h0dHBzOi8vZXhhbXBsZS5jb20vJylcbiAgICAgKiBjYWNoZS5zZXQoJ2h0dHBzOi8vZXhhbXBsZS5jb20vJywgeyBvdGhlcjogJ3RoaW5nJyB9KVxuICAgICAqIGNvbnNvbGUubG9nKGF3YWl0IHJlc3VsdCkgLy8geyBzb21lOiAnZGF0YScgfVxuICAgICAqIGNvbnNvbGUubG9nKGNhY2hlLmdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbS8nKSkgLy8geyBvdGhlcjogJ3RoaW5nJyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydD86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIGlnbm9yZSB0aGUgYGFib3J0YCBldmVudCBlbWl0dGVkIGJ5IHRoZSBgQWJvcnRTaWduYWxgXG4gICAgICogb2JqZWN0IHBhc3NlZCB0byB7QGxpbmsgT3B0aW9uc0Jhc2UuZmV0Y2hNZXRob2R9LCBhbmQgc3RpbGwgY2FjaGUgdGhlXG4gICAgICogcmVzdWx0aW5nIHJlc29sdXRpb24gdmFsdWUsIGFzIGxvbmcgYXMgaXQgaXMgbm90IGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogV2hlbiB1c2VkIG9uIGl0cyBvd24sIHRoaXMgbWVhbnMgYWJvcnRlZCB7QGxpbmsgTFJVQ2FjaGUjZmV0Y2h9IGNhbGxzXG4gICAgICogYXJlIG5vdCBpbW1lZGlhdGVseSByZXNvbHZlZCBvciByZWplY3RlZCB3aGVuIHRoZXkgYXJlIGFib3J0ZWQsIGFuZFxuICAgICAqIGluc3RlYWQgdGFrZSB0aGUgZnVsbCB0aW1lIHRvIGF3YWl0LlxuICAgICAqXG4gICAgICogV2hlbiB1c2VkIHdpdGgge0BsaW5rIE9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoQWJvcnR9LCBhYm9ydGVkXG4gICAgICoge0BsaW5rIExSVUNhY2hlI2ZldGNofSBjYWxscyB3aWxsIHJlc29sdmUgaW1tZWRpYXRlbHkgdG8gdGhlaXIgc3RhbGVcbiAgICAgKiBjYWNoZWQgdmFsdWUgb3IgYHVuZGVmaW5lZGAsIGFuZCB3aWxsIGNvbnRpbnVlIHRvIHByb2Nlc3MgYW5kIGV2ZW50dWFsbHlcbiAgICAgKiB1cGRhdGUgdGhlIGNhY2hlIHdoZW4gdGhleSByZXNvbHZlLCBhcyBsb25nIGFzIHRoZSByZXN1bHRpbmcgdmFsdWUgaXNcbiAgICAgKiBub3QgYHVuZGVmaW5lZGAsIHRodXMgc3VwcG9ydGluZyBhIFwicmV0dXJuIHN0YWxlIG9uIHRpbWVvdXQgd2hpbGVcbiAgICAgKiByZWZyZXNoaW5nXCIgbWVjaGFuaXNtIGJ5IHBhc3NpbmcgYEFib3J0U2lnbmFsLnRpbWVvdXQobilgIGFzIHRoZSBzaWduYWwuXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgYyA9IG5ldyBMUlVDYWNoZSh7XG4gICAgICogICB0dGw6IDEwMCxcbiAgICAgKiAgIGlnbm9yZUZldGNoQWJvcnQ6IHRydWUsXG4gICAgICogICBhbGxvd1N0YWxlT25GZXRjaEFib3J0OiB0cnVlLFxuICAgICAqICAgZmV0Y2hNZXRob2Q6IGFzeW5jIChrZXksIG9sZFZhbHVlLCB7IHNpZ25hbCB9KSA9PiB7XG4gICAgICogICAgIC8vIG5vdGU6IGRvIE5PVCBwYXNzIHRoZSBzaWduYWwgdG8gZmV0Y2goKSFcbiAgICAgKiAgICAgLy8gbGV0J3Mgc2F5IHRoaXMgZmV0Y2ggY2FuIHRha2UgYSBsb25nIHRpbWUuXG4gICAgICogICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGBodHRwczovL3Nsb3ctYmFja2VuZC1zZXJ2ZXIvJHtrZXl9YClcbiAgICAgKiAgICAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKClcbiAgICAgKiAgIH0sXG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIC8vIHRoaXMgd2lsbCByZXR1cm4gdGhlIHN0YWxlIHZhbHVlIGFmdGVyIDEwMG1zLCB3aGlsZSBzdGlsbFxuICAgICAqIC8vIHVwZGF0aW5nIGluIHRoZSBiYWNrZ3JvdW5kIGZvciBuZXh0IHRpbWUuXG4gICAgICogY29uc3QgdmFsID0gYXdhaXQgYy5mZXRjaCgna2V5JywgeyBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoMTAwKSB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogKipOb3RlKio6IHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLCBhbiBgYWJvcnRgIGV2ZW50IF9pcyBzdGlsbFxuICAgICAqIGVtaXR0ZWQgb24gdGhlIGBBYm9ydFNpZ25hbGAgb2JqZWN0Xywgc28gbWF5IHJlc3VsdCBpbiBpbnZhbGlkIHJlc3VsdHNcbiAgICAgKiB3aGVuIHBhc3NlZCB0byBvdGhlciB1bmRlcmx5aW5nIEFQSXMgdGhhdCB1c2UgQWJvcnRTaWduYWxzLlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBpbiB0aGUge0BsaW5rIE9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBvciB0aGVcbiAgICAgKiBjYWxsIHRvIHtAbGluayBMUlVDYWNoZSNmZXRjaH0uXG4gICAgICovXG4gICAgaWdub3JlRmV0Y2hBYm9ydD86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIEluIHNvbWUgY2FzZXMsIHlvdSBtYXkgd2FudCB0byBzd2FwIG91dCB0aGUgcGVyZm9ybWFuY2UvRGF0ZSBvYmplY3RcbiAgICAgKiB1c2VkIGZvciBUVEwgdHJhY2tpbmcuIFRoaXMgc2hvdWxkIGFsbW9zdCBjZXJ0YWlubHkgTk9UIGJlIGRvbmUgaW5cbiAgICAgKiBwcm9kdWN0aW9uIGVudmlyb25tZW50cyFcbiAgICAgKlxuICAgICAqIFRoaXMgdmFsdWUgZGVmYXVsdHMgdG8gYGdsb2JhbC5wZXJmb3JtYW5jZWAgaWYgaXQgaGFzIGEgYG5vdygpYCBtZXRob2QsXG4gICAgICogb3IgdGhlIGBnbG9iYWwuRGF0ZWAgb2JqZWN0IG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwZXJmPzogUGVyZlxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBPcHRpb25zTWF4TGltaXQ8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBPcHRpb25zQmFzZTxLLCBWLCBGQz4ge1xuICAgIG1heDogQ291bnRcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNUVExMaW1pdDxLLCBWLCBGQz5cbiAgICBleHRlbmRzIE9wdGlvbnNCYXNlPEssIFYsIEZDPiB7XG4gICAgdHRsOiBNaWxsaXNlY29uZHNcbiAgICB0dGxBdXRvcHVyZ2U6IGJvb2xlYW5cbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNTaXplTGltaXQ8SywgViwgRkM+XG4gICAgZXh0ZW5kcyBPcHRpb25zQmFzZTxLLCBWLCBGQz4ge1xuICAgIG1heFNpemU6IFNpemVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmFsaWQgc2FmZSBvcHRpb25zIGZvciB0aGUge0BsaW5rIExSVUNhY2hlfSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgZXhwb3J0IHR5cGUgT3B0aW9uczxLLCBWLCBGQz4gPVxuICAgIHwgT3B0aW9uc01heExpbWl0PEssIFYsIEZDPlxuICAgIHwgT3B0aW9uc1NpemVMaW1pdDxLLCBWLCBGQz5cbiAgICB8IE9wdGlvbnNUVExMaW1pdDxLLCBWLCBGQz5cblxuICAvKipcbiAgICogRW50cnkgb2JqZWN0cyB1c2VkIGJ5IHtAbGluayBMUlVDYWNoZSNsb2FkfSBhbmQge0BsaW5rIExSVUNhY2hlI2R1bXB9LFxuICAgKiBhbmQgcmV0dXJuZWQgYnkge0BsaW5rIExSVUNhY2hlI2luZm99LlxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBFbnRyeTxWPiB7XG4gICAgdmFsdWU6IFZcbiAgICB0dGw/OiBNaWxsaXNlY29uZHNcbiAgICBzaXplPzogU2l6ZVxuICAgIHN0YXJ0PzogTWlsbGlzZWNvbmRzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IGV4cG9ydCwgdGhlIHRoaW5nIHlvdSdyZSB1c2luZyB0aGlzIG1vZHVsZSB0byBnZXQuXG4gKlxuICogVGhlIGBLYCBhbmQgYFZgIHR5cGVzIGRlZmluZSB0aGUga2V5IGFuZCB2YWx1ZSB0eXBlcywgcmVzcGVjdGl2ZWx5LiBUaGVcbiAqIG9wdGlvbmFsIGBGQ2AgdHlwZSBkZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBgY29udGV4dGAgb2JqZWN0IHBhc3NlZCB0b1xuICogYGNhY2hlLmZldGNoKClgIGFuZCBgY2FjaGUubWVtbygpYC5cbiAqXG4gKiBLZXlzIGFuZCB2YWx1ZXMgKiptdXN0IG5vdCoqIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBBbGwgcHJvcGVydGllcyBmcm9tIHRoZSBvcHRpb25zIG9iamVjdCAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGBtYXhgLFxuICogYG1heFNpemVgLCBgZmV0Y2hNZXRob2RgLCBgbWVtb01ldGhvZGAsIGBkaXNwb3NlYCBhbmQgYGRpc3Bvc2VBZnRlcmApIGFyZVxuICogYWRkZWQgYXMgbm9ybWFsIHB1YmxpYyBtZW1iZXJzLiAoVGhlIGxpc3RlZCBvcHRpb25zIGFyZSByZWFkLW9ubHkgZ2V0dGVycy4pXG4gKlxuICogQ2hhbmdpbmcgYW55IG9mIHRoZXNlIHdpbGwgYWx0ZXIgdGhlIGRlZmF1bHRzIGZvciBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscy5cbiAqL1xuZXhwb3J0IGNsYXNzIExSVUNhY2hlPEsgZXh0ZW5kcyB7fSwgViBleHRlbmRzIHt9LCBGQyA9IHVua25vd24+IHtcbiAgLy8gb3B0aW9ucyB0aGF0IGNhbm5vdCBiZSBjaGFuZ2VkIHdpdGhvdXQgZGlzYXN0ZXJcbiAgcmVhZG9ubHkgI21heDogTFJVQ2FjaGUuQ291bnRcbiAgcmVhZG9ubHkgI21heFNpemU6IExSVUNhY2hlLlNpemVcbiAgcmVhZG9ubHkgI2Rpc3Bvc2U/OiBMUlVDYWNoZS5EaXNwb3NlcjxLLCBWPlxuICByZWFkb25seSAjb25JbnNlcnQ/OiBMUlVDYWNoZS5JbnNlcnRlcjxLLCBWPlxuICByZWFkb25seSAjZGlzcG9zZUFmdGVyPzogTFJVQ2FjaGUuRGlzcG9zZXI8SywgVj5cbiAgcmVhZG9ubHkgI2ZldGNoTWV0aG9kPzogTFJVQ2FjaGUuRmV0Y2hlcjxLLCBWLCBGQz5cbiAgcmVhZG9ubHkgI21lbW9NZXRob2Q/OiBMUlVDYWNoZS5NZW1vaXplcjxLLCBWLCBGQz5cbiAgcmVhZG9ubHkgI3BlcmY6IFBlcmZcblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnBlcmZ9XG4gICAqL1xuICBnZXQgcGVyZigpIHtcbiAgICByZXR1cm4gdGhpcy4jcGVyZlxuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS50dGx9XG4gICAqL1xuICB0dGw6IExSVUNhY2hlLk1pbGxpc2Vjb25kc1xuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UudHRsUmVzb2x1dGlvbn1cbiAgICovXG4gIHR0bFJlc29sdXRpb246IExSVUNhY2hlLk1pbGxpc2Vjb25kc1xuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnR0bEF1dG9wdXJnZX1cbiAgICovXG4gIHR0bEF1dG9wdXJnZTogYm9vbGVhblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uR2V0fVxuICAgKi9cbiAgdXBkYXRlQWdlT25HZXQ6IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc31cbiAgICovXG4gIHVwZGF0ZUFnZU9uSGFzOiBib29sZWFuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX1cbiAgICovXG4gIGFsbG93U3RhbGU6IGJvb2xlYW5cblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm5vRGlzcG9zZU9uU2V0fVxuICAgKi9cbiAgbm9EaXNwb3NlT25TZXQ6IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub1VwZGF0ZVRUTH1cbiAgICovXG4gIG5vVXBkYXRlVFRMOiBib29sZWFuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4RW50cnlTaXplfVxuICAgKi9cbiAgbWF4RW50cnlTaXplOiBMUlVDYWNoZS5TaXplXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2Uuc2l6ZUNhbGN1bGF0aW9ufVxuICAgKi9cbiAgc2l6ZUNhbGN1bGF0aW9uPzogTFJVQ2FjaGUuU2l6ZUNhbGN1bGF0b3I8SywgVj5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb259XG4gICAqL1xuICBub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb246IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5ub0RlbGV0ZU9uU3RhbGVHZXR9XG4gICAqL1xuICBub0RlbGV0ZU9uU3RhbGVHZXQ6IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaEFib3J0fVxuICAgKi9cbiAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDogYm9vbGVhblxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9ufVxuICAgKi9cbiAgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb246IGJvb2xlYW5cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5pZ25vcmVGZXRjaEFib3J0fVxuICAgKi9cbiAgaWdub3JlRmV0Y2hBYm9ydDogYm9vbGVhblxuXG4gIC8vIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgI3NpemU6IExSVUNhY2hlLkNvdW50XG4gICNjYWxjdWxhdGVkU2l6ZTogTFJVQ2FjaGUuU2l6ZVxuICAja2V5TWFwOiBNYXA8SywgSW5kZXg+XG4gICNrZXlMaXN0OiAoSyB8IHVuZGVmaW5lZClbXVxuICAjdmFsTGlzdDogKFYgfCBCYWNrZ3JvdW5kRmV0Y2g8Vj4gfCB1bmRlZmluZWQpW11cbiAgI25leHQ6IE51bWJlckFycmF5XG4gICNwcmV2OiBOdW1iZXJBcnJheVxuICAjaGVhZDogSW5kZXhcbiAgI3RhaWw6IEluZGV4XG4gICNmcmVlOiBTdGFja0xpa2VcbiAgI2Rpc3Bvc2VkPzogRGlzcG9zZVRhc2s8SywgVj5bXVxuICAjc2l6ZXM/OiBaZXJvQXJyYXlcbiAgI3N0YXJ0cz86IFplcm9BcnJheVxuICAjdHRscz86IFplcm9BcnJheVxuICAjYXV0b3B1cmdlVGltZXJzPzogKHVuZGVmaW5lZCB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+KVtdXG5cbiAgI2hhc0Rpc3Bvc2U6IGJvb2xlYW5cbiAgI2hhc0ZldGNoTWV0aG9kOiBib29sZWFuXG4gICNoYXNEaXNwb3NlQWZ0ZXI6IGJvb2xlYW5cbiAgI2hhc09uSW5zZXJ0OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIERvIG5vdCBjYWxsIHRoaXMgbWV0aG9kIHVubGVzcyB5b3UgbmVlZCB0byBpbnNwZWN0IHRoZVxuICAgKiBpbm5lciB3b3JraW5ncyBvZiB0aGUgY2FjaGUuICBJZiBhbnl0aGluZyByZXR1cm5lZCBieSB0aGlzXG4gICAqIG9iamVjdCBpcyBtb2RpZmllZCBpbiBhbnkgd2F5LCBzdHJhbmdlIGJyZWFrYWdlIG1heSBvY2N1ci5cbiAgICpcbiAgICogVGhlc2UgZmllbGRzIGFyZSBwcml2YXRlIGZvciBhIHJlYXNvbiFcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzdGF0aWMgdW5zYWZlRXhwb3NlSW50ZXJuYWxzPFxuICAgIEsgZXh0ZW5kcyB7fSxcbiAgICBWIGV4dGVuZHMge30sXG4gICAgRkMgZXh0ZW5kcyB1bmtub3duID0gdW5rbm93bixcbiAgPihjOiBMUlVDYWNoZTxLLCBWLCBGQz4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gcHJvcGVydGllc1xuICAgICAgc3RhcnRzOiBjLiNzdGFydHMsXG4gICAgICB0dGxzOiBjLiN0dGxzLFxuICAgICAgYXV0b3B1cmdlVGltZXJzOiBjLiNhdXRvcHVyZ2VUaW1lcnMsXG4gICAgICBzaXplczogYy4jc2l6ZXMsXG4gICAgICBrZXlNYXA6IGMuI2tleU1hcCBhcyBNYXA8SywgbnVtYmVyPixcbiAgICAgIGtleUxpc3Q6IGMuI2tleUxpc3QsXG4gICAgICB2YWxMaXN0OiBjLiN2YWxMaXN0LFxuICAgICAgbmV4dDogYy4jbmV4dCxcbiAgICAgIHByZXY6IGMuI3ByZXYsXG4gICAgICBnZXQgaGVhZCgpIHtcbiAgICAgICAgcmV0dXJuIGMuI2hlYWRcbiAgICAgIH0sXG4gICAgICBnZXQgdGFpbCgpIHtcbiAgICAgICAgcmV0dXJuIGMuI3RhaWxcbiAgICAgIH0sXG4gICAgICBmcmVlOiBjLiNmcmVlLFxuICAgICAgLy8gbWV0aG9kc1xuICAgICAgaXNCYWNrZ3JvdW5kRmV0Y2g6IChwOiBhbnkpID0+IGMuI2lzQmFja2dyb3VuZEZldGNoKHApLFxuICAgICAgYmFja2dyb3VuZEZldGNoOiAoXG4gICAgICAgIGs6IEssXG4gICAgICAgIGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgICAgIG9wdGlvbnM6IExSVUNhY2hlLkZldGNoT3B0aW9uczxLLCBWLCBGQz4sXG4gICAgICAgIGNvbnRleHQ6IGFueSxcbiAgICAgICk6IEJhY2tncm91bmRGZXRjaDxWPiA9PlxuICAgICAgICBjLiNiYWNrZ3JvdW5kRmV0Y2goXG4gICAgICAgICAgayxcbiAgICAgICAgICBpbmRleCBhcyBJbmRleCB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICksXG4gICAgICBtb3ZlVG9UYWlsOiAoaW5kZXg6IG51bWJlcik6IHZvaWQgPT4gYy4jbW92ZVRvVGFpbChpbmRleCBhcyBJbmRleCksXG4gICAgICBpbmRleGVzOiAob3B0aW9ucz86IHsgYWxsb3dTdGFsZTogYm9vbGVhbiB9KSA9PiBjLiNpbmRleGVzKG9wdGlvbnMpLFxuICAgICAgcmluZGV4ZXM6IChvcHRpb25zPzogeyBhbGxvd1N0YWxlOiBib29sZWFuIH0pID0+XG4gICAgICAgIGMuI3JpbmRleGVzKG9wdGlvbnMpLFxuICAgICAgaXNTdGFsZTogKGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IGMuI2lzU3RhbGUoaW5kZXggYXMgSW5kZXgpLFxuICAgIH1cbiAgfVxuXG4gIC8vIFByb3RlY3RlZCByZWFkLW9ubHkgbWVtYmVyc1xuXG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4fSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IG1heCgpOiBMUlVDYWNoZS5Db3VudCB7XG4gICAgcmV0dXJuIHRoaXMuI21heFxuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWF4U2l6ZX0gKHJlYWQtb25seSlcbiAgICovXG4gIGdldCBtYXhTaXplKCk6IExSVUNhY2hlLkNvdW50IHtcbiAgICByZXR1cm4gdGhpcy4jbWF4U2l6ZVxuICB9XG4gIC8qKlxuICAgKiBUaGUgdG90YWwgY29tcHV0ZWQgc2l6ZSBvZiBpdGVtcyBpbiB0aGUgY2FjaGUgKHJlYWQtb25seSlcbiAgICovXG4gIGdldCBjYWxjdWxhdGVkU2l6ZSgpOiBMUlVDYWNoZS5TaXplIHtcbiAgICByZXR1cm4gdGhpcy4jY2FsY3VsYXRlZFNpemVcbiAgfVxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBpdGVtcyBzdG9yZWQgaW4gdGhlIGNhY2hlIChyZWFkLW9ubHkpXG4gICAqL1xuICBnZXQgc2l6ZSgpOiBMUlVDYWNoZS5Db3VudCB7XG4gICAgcmV0dXJuIHRoaXMuI3NpemVcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IGZldGNoTWV0aG9kKCk6IExSVUNhY2hlLkZldGNoZXI8SywgViwgRkM+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jZmV0Y2hNZXRob2RcbiAgfVxuICBnZXQgbWVtb01ldGhvZCgpOiBMUlVDYWNoZS5NZW1vaXplcjxLLCBWLCBGQz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNtZW1vTWV0aG9kXG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5kaXNwb3NlfSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IGRpc3Bvc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2Rpc3Bvc2VcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLm9uSW5zZXJ0fSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IG9uSW5zZXJ0KCkge1xuICAgIHJldHVybiB0aGlzLiNvbkluc2VydFxuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuZGlzcG9zZUFmdGVyfSAocmVhZC1vbmx5KVxuICAgKi9cbiAgZ2V0IGRpc3Bvc2VBZnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy4jZGlzcG9zZUFmdGVyXG4gIH1cblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMUlVDYWNoZS5PcHRpb25zPEssIFYsIEZDPiB8IExSVUNhY2hlPEssIFYsIEZDPikge1xuICAgIGNvbnN0IHtcbiAgICAgIG1heCA9IDAsXG4gICAgICB0dGwsXG4gICAgICB0dGxSZXNvbHV0aW9uID0gMSxcbiAgICAgIHR0bEF1dG9wdXJnZSxcbiAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgdXBkYXRlQWdlT25IYXMsXG4gICAgICBhbGxvd1N0YWxlLFxuICAgICAgZGlzcG9zZSxcbiAgICAgIG9uSW5zZXJ0LFxuICAgICAgZGlzcG9zZUFmdGVyLFxuICAgICAgbm9EaXNwb3NlT25TZXQsXG4gICAgICBub1VwZGF0ZVRUTCxcbiAgICAgIG1heFNpemUgPSAwLFxuICAgICAgbWF4RW50cnlTaXplID0gMCxcbiAgICAgIHNpemVDYWxjdWxhdGlvbixcbiAgICAgIGZldGNoTWV0aG9kLFxuICAgICAgbWVtb01ldGhvZCxcbiAgICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixcbiAgICAgIG5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgIGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxcbiAgICAgIGlnbm9yZUZldGNoQWJvcnQsXG4gICAgICBwZXJmLFxuICAgIH0gPSBvcHRpb25zXG5cbiAgICBpZiAocGVyZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHBlcmY/Lm5vdyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdwZXJmIG9wdGlvbiBtdXN0IGhhdmUgYSBub3coKSBtZXRob2QgaWYgc3BlY2lmaWVkJyxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI3BlcmYgPSBwZXJmID8/IGRlZmF1bHRQZXJmXG5cbiAgICBpZiAobWF4ICE9PSAwICYmICFpc1Bvc0ludChtYXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggb3B0aW9uIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyJylcbiAgICB9XG5cbiAgICBjb25zdCBVaW50QXJyYXkgPSBtYXggPyBnZXRVaW50QXJyYXkobWF4KSA6IEFycmF5XG4gICAgaWYgKCFVaW50QXJyYXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBtYXggdmFsdWU6ICcgKyBtYXgpXG4gICAgfVxuXG4gICAgdGhpcy4jbWF4ID0gbWF4XG4gICAgdGhpcy4jbWF4U2l6ZSA9IG1heFNpemVcbiAgICB0aGlzLm1heEVudHJ5U2l6ZSA9IG1heEVudHJ5U2l6ZSB8fCB0aGlzLiNtYXhTaXplXG4gICAgdGhpcy5zaXplQ2FsY3VsYXRpb24gPSBzaXplQ2FsY3VsYXRpb25cbiAgICBpZiAodGhpcy5zaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgIGlmICghdGhpcy4jbWF4U2l6ZSAmJiAhdGhpcy5tYXhFbnRyeVNpemUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnY2Fubm90IHNldCBzaXplQ2FsY3VsYXRpb24gd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplJyxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpemVDYWxjdWxhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplQ2FsY3VsYXRpb24gc2V0IHRvIG5vbi1mdW5jdGlvbicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1lbW9NZXRob2QgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWVtb01ldGhvZCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVtb01ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgZGVmaW5lZCcpXG4gICAgfVxuICAgIHRoaXMuI21lbW9NZXRob2QgPSBtZW1vTWV0aG9kXG5cbiAgICBpZiAoZmV0Y2hNZXRob2QgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZmV0Y2hNZXRob2QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ZldGNoTWV0aG9kIG11c3QgYmUgYSBmdW5jdGlvbiBpZiBzcGVjaWZpZWQnKVxuICAgIH1cbiAgICB0aGlzLiNmZXRjaE1ldGhvZCA9IGZldGNoTWV0aG9kXG4gICAgdGhpcy4jaGFzRmV0Y2hNZXRob2QgPSAhIWZldGNoTWV0aG9kXG5cbiAgICB0aGlzLiNrZXlNYXAgPSBuZXcgTWFwKClcbiAgICB0aGlzLiNrZXlMaXN0ID0gbmV3IEFycmF5KG1heCkuZmlsbCh1bmRlZmluZWQpXG4gICAgdGhpcy4jdmFsTGlzdCA9IG5ldyBBcnJheShtYXgpLmZpbGwodW5kZWZpbmVkKVxuICAgIHRoaXMuI25leHQgPSBuZXcgVWludEFycmF5KG1heClcbiAgICB0aGlzLiNwcmV2ID0gbmV3IFVpbnRBcnJheShtYXgpXG4gICAgdGhpcy4jaGVhZCA9IDAgYXMgSW5kZXhcbiAgICB0aGlzLiN0YWlsID0gMCBhcyBJbmRleFxuICAgIHRoaXMuI2ZyZWUgPSBTdGFjay5jcmVhdGUobWF4KVxuICAgIHRoaXMuI3NpemUgPSAwXG4gICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgPSAwXG5cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2Rpc3Bvc2UgPSBkaXNwb3NlXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb25JbnNlcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI29uSW5zZXJ0ID0gb25JbnNlcnRcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlQWZ0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2Rpc3Bvc2VBZnRlciA9IGRpc3Bvc2VBZnRlclxuICAgICAgdGhpcy4jZGlzcG9zZWQgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXIgPSB1bmRlZmluZWRcbiAgICAgIHRoaXMuI2Rpc3Bvc2VkID0gdW5kZWZpbmVkXG4gICAgfVxuICAgIHRoaXMuI2hhc0Rpc3Bvc2UgPSAhIXRoaXMuI2Rpc3Bvc2VcbiAgICB0aGlzLiNoYXNPbkluc2VydCA9ICEhdGhpcy4jb25JbnNlcnRcbiAgICB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgPSAhIXRoaXMuI2Rpc3Bvc2VBZnRlclxuXG4gICAgdGhpcy5ub0Rpc3Bvc2VPblNldCA9ICEhbm9EaXNwb3NlT25TZXRcbiAgICB0aGlzLm5vVXBkYXRlVFRMID0gISFub1VwZGF0ZVRUTFxuICAgIHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uID0gISFub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb25cbiAgICB0aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uID0gISFhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvblxuICAgIHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCA9ICEhYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydFxuICAgIHRoaXMuaWdub3JlRmV0Y2hBYm9ydCA9ICEhaWdub3JlRmV0Y2hBYm9ydFxuXG4gICAgLy8gTkI6IG1heEVudHJ5U2l6ZSBpcyBzZXQgdG8gbWF4U2l6ZSBpZiBpdCdzIHNldFxuICAgIGlmICh0aGlzLm1heEVudHJ5U2l6ZSAhPT0gMCkge1xuICAgICAgaWYgKHRoaXMuI21heFNpemUgIT09IDApIHtcbiAgICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLiNtYXhTaXplKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnbWF4U2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWQnLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpc1Bvc0ludCh0aGlzLm1heEVudHJ5U2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnbWF4RW50cnlTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZCcsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHRoaXMuI2luaXRpYWxpemVTaXplVHJhY2tpbmcoKVxuICAgIH1cblxuICAgIHRoaXMuYWxsb3dTdGFsZSA9ICEhYWxsb3dTdGFsZVxuICAgIHRoaXMubm9EZWxldGVPblN0YWxlR2V0ID0gISFub0RlbGV0ZU9uU3RhbGVHZXRcbiAgICB0aGlzLnVwZGF0ZUFnZU9uR2V0ID0gISF1cGRhdGVBZ2VPbkdldFxuICAgIHRoaXMudXBkYXRlQWdlT25IYXMgPSAhIXVwZGF0ZUFnZU9uSGFzXG4gICAgdGhpcy50dGxSZXNvbHV0aW9uID1cbiAgICAgIGlzUG9zSW50KHR0bFJlc29sdXRpb24pIHx8IHR0bFJlc29sdXRpb24gPT09IDAgPyB0dGxSZXNvbHV0aW9uIDogMVxuICAgIHRoaXMudHRsQXV0b3B1cmdlID0gISF0dGxBdXRvcHVyZ2VcbiAgICB0aGlzLnR0bCA9IHR0bCB8fCAwXG4gICAgaWYgKHRoaXMudHRsKSB7XG4gICAgICBpZiAoIWlzUG9zSW50KHRoaXMudHRsKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0dGwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkJylcbiAgICAgIH1cbiAgICAgIHRoaXMuI2luaXRpYWxpemVUVExUcmFja2luZygpXG4gICAgfVxuXG4gICAgLy8gZG8gbm90IGFsbG93IGNvbXBsZXRlbHkgdW5ib3VuZGVkIGNhY2hlc1xuICAgIGlmICh0aGlzLiNtYXggPT09IDAgJiYgdGhpcy50dGwgPT09IDAgJiYgdGhpcy4jbWF4U2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0F0IGxlYXN0IG9uZSBvZiBtYXgsIG1heFNpemUsIG9yIHR0bCBpcyByZXF1aXJlZCcsXG4gICAgICApXG4gICAgfVxuICAgIGlmICghdGhpcy50dGxBdXRvcHVyZ2UgJiYgIXRoaXMuI21heCAmJiAhdGhpcy4jbWF4U2l6ZSkge1xuICAgICAgY29uc3QgY29kZSA9ICdMUlVfQ0FDSEVfVU5CT1VOREVEJ1xuICAgICAgaWYgKHNob3VsZFdhcm4oY29kZSkpIHtcbiAgICAgICAgd2FybmVkLmFkZChjb2RlKVxuICAgICAgICBjb25zdCBtc2cgPVxuICAgICAgICAgICdUVEwgY2FjaGluZyB3aXRob3V0IHR0bEF1dG9wdXJnZSwgbWF4LCBvciBtYXhTaXplIGNhbiAnICtcbiAgICAgICAgICAncmVzdWx0IGluIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uJ1xuICAgICAgICBlbWl0V2FybmluZyhtc2csICdVbmJvdW5kZWRDYWNoZVdhcm5pbmcnLCBjb2RlLCBMUlVDYWNoZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXMgbGVmdCBpbiB0aGUgaXRlbSdzIFRUTC4gSWYgaXRlbSBpcyBub3QgaW4gY2FjaGUsXG4gICAqIHJldHVybnMgYDBgLiBSZXR1cm5zIGBJbmZpbml0eWAgaWYgaXRlbSBpcyBpbiBjYWNoZSB3aXRob3V0IGEgZGVmaW5lZCBUVEwuXG4gICAqL1xuICBnZXRSZW1haW5pbmdUVEwoa2V5OiBLKSB7XG4gICAgcmV0dXJuIHRoaXMuI2tleU1hcC5oYXMoa2V5KSA/IEluZmluaXR5IDogMFxuICB9XG5cbiAgI2luaXRpYWxpemVUVExUcmFja2luZygpIHtcbiAgICBjb25zdCB0dGxzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpXG4gICAgY29uc3Qgc3RhcnRzID0gbmV3IFplcm9BcnJheSh0aGlzLiNtYXgpXG4gICAgdGhpcy4jdHRscyA9IHR0bHNcbiAgICB0aGlzLiNzdGFydHMgPSBzdGFydHNcbiAgICBjb25zdCBwdXJnZVRpbWVycyA9XG4gICAgICB0aGlzLnR0bEF1dG9wdXJnZSA/XG4gICAgICAgIG5ldyBBcnJheTx1bmRlZmluZWQgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj4odGhpcy4jbWF4KVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzLiNhdXRvcHVyZ2VUaW1lcnMgPSBwdXJnZVRpbWVyc1xuXG4gICAgdGhpcy4jc2V0SXRlbVRUTCA9IChpbmRleCwgdHRsLCBzdGFydCA9IHRoaXMuI3BlcmYubm93KCkpID0+IHtcbiAgICAgIHN0YXJ0c1tpbmRleF0gPSB0dGwgIT09IDAgPyBzdGFydCA6IDBcbiAgICAgIHR0bHNbaW5kZXhdID0gdHRsXG4gICAgICBzZXRQdXJnZXRUaW1lcihpbmRleCwgdHRsKVxuICAgIH1cblxuICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UgPSBpbmRleCA9PiB7XG4gICAgICBzdGFydHNbaW5kZXhdID0gdHRsc1tpbmRleF0gIT09IDAgPyB0aGlzLiNwZXJmLm5vdygpIDogMFxuICAgICAgc2V0UHVyZ2V0VGltZXIoaW5kZXgsIHR0bHNbaW5kZXhdKVxuICAgIH1cblxuICAgIC8vIGNsZWFyIG91dCB0aGUgcHVyZ2UgdGltZXIgaWYgd2UncmUgc2V0dGluZyBUVEwgdG8gMCwgYW5kXG4gICAgLy8gcHJldmlvdXNseSBoYWQgYSB0dGwgcHVyZ2UgdGltZXIgcnVubmluZywgc28gaXQgZG9lc24ndFxuICAgIC8vIGZpcmUgdW5uZWNlc3NhcmlseS4gRG9uJ3QgbmVlZCB0byBkbyB0aGlzIGlmIHdlJ3JlIG5vdCBkb2luZ1xuICAgIC8vIGF1dG9wdXJnZS5cbiAgICBjb25zdCBzZXRQdXJnZXRUaW1lciA9XG4gICAgICAhdGhpcy50dGxBdXRvcHVyZ2UgP1xuICAgICAgICAoKSA9PiB7fVxuICAgICAgOiAoaW5kZXg6IEluZGV4LCB0dGw/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAocHVyZ2VUaW1lcnM/LltpbmRleF0pIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChwdXJnZVRpbWVyc1tpbmRleF0pXG4gICAgICAgICAgICBwdXJnZVRpbWVyc1tpbmRleF0gPSB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR0bCAmJiB0dGwgIT09IDAgJiYgcHVyZ2VUaW1lcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaW5kZXhdIGFzIEssICdleHBpcmUnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0dGwgKyAxKVxuICAgICAgICAgICAgLy8gdW5yZWYoKSBub3Qgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHQudW5yZWYpIHtcbiAgICAgICAgICAgICAgdC51bnJlZigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgcHVyZ2VUaW1lcnNbaW5kZXhdID0gdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgdGhpcy4jc3RhdHVzVFRMID0gKHN0YXR1cywgaW5kZXgpID0+IHtcbiAgICAgIGlmICh0dGxzW2luZGV4XSkge1xuICAgICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XVxuICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0c1tpbmRleF1cbiAgICAgICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKCF0dGwgfHwgIXN0YXJ0KSByZXR1cm5cbiAgICAgICAgc3RhdHVzLnR0bCA9IHR0bFxuICAgICAgICBzdGF0dXMuc3RhcnQgPSBzdGFydFxuICAgICAgICBzdGF0dXMubm93ID0gY2FjaGVkTm93IHx8IGdldE5vdygpXG4gICAgICAgIGNvbnN0IGFnZSA9IHN0YXR1cy5ub3cgLSBzdGFydFxuICAgICAgICBzdGF0dXMucmVtYWluaW5nVFRMID0gdHRsIC0gYWdlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVib3VuY2UgY2FsbHMgdG8gcGVyZi5ub3coKSB0byAxcyBzbyB3ZSdyZSBub3QgaGl0dGluZ1xuICAgIC8vIHRoYXQgY29zdGx5IGNhbGwgcmVwZWF0ZWRseS5cbiAgICBsZXQgY2FjaGVkTm93ID0gMFxuICAgIGNvbnN0IGdldE5vdyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG4gPSB0aGlzLiNwZXJmLm5vdygpXG4gICAgICBpZiAodGhpcy50dGxSZXNvbHV0aW9uID4gMCkge1xuICAgICAgICBjYWNoZWROb3cgPSBuXG4gICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IChjYWNoZWROb3cgPSAwKSwgdGhpcy50dGxSZXNvbHV0aW9uKVxuICAgICAgICAvLyBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0LnVucmVmKSB7XG4gICAgICAgICAgdC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgIH1cbiAgICAgIHJldHVybiBuXG4gICAgfVxuXG4gICAgdGhpcy5nZXRSZW1haW5pbmdUVEwgPSBrZXkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSlcbiAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG4gICAgICBjb25zdCB0dGwgPSB0dGxzW2luZGV4XVxuICAgICAgY29uc3Qgc3RhcnQgPSBzdGFydHNbaW5kZXhdXG4gICAgICBpZiAoIXR0bCB8fCAhc3RhcnQpIHtcbiAgICAgICAgcmV0dXJuIEluZmluaXR5XG4gICAgICB9XG4gICAgICBjb25zdCBhZ2UgPSAoY2FjaGVkTm93IHx8IGdldE5vdygpKSAtIHN0YXJ0XG4gICAgICByZXR1cm4gdHRsIC0gYWdlXG4gICAgfVxuXG4gICAgdGhpcy4jaXNTdGFsZSA9IGluZGV4ID0+IHtcbiAgICAgIGNvbnN0IHMgPSBzdGFydHNbaW5kZXhdXG4gICAgICBjb25zdCB0ID0gdHRsc1tpbmRleF1cbiAgICAgIHJldHVybiAhIXQgJiYgISFzICYmIChjYWNoZWROb3cgfHwgZ2V0Tm93KCkpIC0gcyA+IHRcbiAgICB9XG4gIH1cblxuICAvLyBjb25kaXRpb25hbGx5IHNldCBwcml2YXRlIG1ldGhvZHMgcmVsYXRlZCB0byBUVExcbiAgI3VwZGF0ZUl0ZW1BZ2U6IChpbmRleDogSW5kZXgpID0+IHZvaWQgPSAoKSA9PiB7fVxuICAjc3RhdHVzVFRMOiAoc3RhdHVzOiBMUlVDYWNoZS5TdGF0dXM8Vj4sIGluZGV4OiBJbmRleCkgPT4gdm9pZCA9ICgpID0+IHt9XG4gICNzZXRJdGVtVFRMOiAoXG4gICAgaW5kZXg6IEluZGV4LFxuICAgIHR0bDogTFJVQ2FjaGUuTWlsbGlzZWNvbmRzLFxuICAgIHN0YXJ0PzogTFJVQ2FjaGUuTWlsbGlzZWNvbmRzLFxuICAgIC8vIGlnbm9yZSBiZWNhdXNlIHdlIG5ldmVyIGNhbGwgdGhpcyBpZiB3ZSdyZSBub3QgYWxyZWFkeSBpbiBUVEwgbW9kZVxuICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICApID0+IHZvaWQgPSAoKSA9PiB7fVxuICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuXG4gICNpc1N0YWxlOiAoaW5kZXg6IEluZGV4KSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2VcblxuICAjaW5pdGlhbGl6ZVNpemVUcmFja2luZygpIHtcbiAgICBjb25zdCBzaXplcyA9IG5ldyBaZXJvQXJyYXkodGhpcy4jbWF4KVxuICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMFxuICAgIHRoaXMuI3NpemVzID0gc2l6ZXNcbiAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZSA9IGluZGV4ID0+IHtcbiAgICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplIC09IHNpemVzW2luZGV4XSBhcyBudW1iZXJcbiAgICAgIHNpemVzW2luZGV4XSA9IDBcbiAgICB9XG4gICAgdGhpcy4jcmVxdWlyZVNpemUgPSAoaywgdiwgc2l6ZSwgc2l6ZUNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAvLyBwcm92aXNpb25hbGx5IGFjY2VwdCBiYWNrZ3JvdW5kIGZldGNoZXMuXG4gICAgICAvLyBhY3R1YWwgdmFsdWUgc2l6ZSB3aWxsIGJlIGNoZWNrZWQgd2hlbiB0aGV5IHJldHVybi5cbiAgICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuICAgICAgaWYgKCFpc1Bvc0ludChzaXplKSkge1xuICAgICAgICBpZiAoc2l6ZUNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzaXplQ2FsY3VsYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemVDYWxjdWxhdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzaXplID0gc2l6ZUNhbGN1bGF0aW9uKHYsIGspXG4gICAgICAgICAgaWYgKCFpc1Bvc0ludChzaXplKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgJ3NpemVDYWxjdWxhdGlvbiByZXR1cm4gaW52YWxpZCAoZXhwZWN0IHBvc2l0aXZlIGludGVnZXIpJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdpbnZhbGlkIHNpemUgdmFsdWUgKG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcikuICcgK1xuICAgICAgICAgICAgICAnV2hlbiBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZSBpcyB1c2VkLCBzaXplQ2FsY3VsYXRpb24gJyArXG4gICAgICAgICAgICAgICdvciBzaXplIG11c3QgYmUgc2V0LicsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc2l6ZVxuICAgIH1cbiAgICB0aGlzLiNhZGRJdGVtU2l6ZSA9IChcbiAgICAgIGluZGV4OiBJbmRleCxcbiAgICAgIHNpemU6IExSVUNhY2hlLlNpemUsXG4gICAgICBzdGF0dXM/OiBMUlVDYWNoZS5TdGF0dXM8Vj4sXG4gICAgKSA9PiB7XG4gICAgICBzaXplc1tpbmRleF0gPSBzaXplXG4gICAgICBpZiAodGhpcy4jbWF4U2l6ZSkge1xuICAgICAgICBjb25zdCBtYXhTaXplID0gdGhpcy4jbWF4U2l6ZSAtIChzaXplc1tpbmRleF0gYXMgbnVtYmVyKVxuICAgICAgICB3aGlsZSAodGhpcy4jY2FsY3VsYXRlZFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4jY2FsY3VsYXRlZFNpemUgKz0gc2l6ZXNbaW5kZXhdIGFzIG51bWJlclxuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuZW50cnlTaXplID0gc2l6ZVxuICAgICAgICBzdGF0dXMudG90YWxDYWxjdWxhdGVkU2l6ZSA9IHRoaXMuI2NhbGN1bGF0ZWRTaXplXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI3JlbW92ZUl0ZW1TaXplOiAoaW5kZXg6IEluZGV4KSA9PiB2b2lkID0gX2kgPT4ge31cbiAgI2FkZEl0ZW1TaXplOiAoXG4gICAgaW5kZXg6IEluZGV4LFxuICAgIHNpemU6IExSVUNhY2hlLlNpemUsXG4gICAgc3RhdHVzPzogTFJVQ2FjaGUuU3RhdHVzPFY+LFxuICApID0+IHZvaWQgPSAoX2ksIF9zLCBfc3QpID0+IHt9XG4gICNyZXF1aXJlU2l6ZTogKFxuICAgIGs6IEssXG4gICAgdjogViB8IEJhY2tncm91bmRGZXRjaDxWPixcbiAgICBzaXplPzogTFJVQ2FjaGUuU2l6ZSxcbiAgICBzaXplQ2FsY3VsYXRpb24/OiBMUlVDYWNoZS5TaXplQ2FsY3VsYXRvcjxLLCBWPixcbiAgKSA9PiBMUlVDYWNoZS5TaXplID0gKFxuICAgIF9rOiBLLFxuICAgIF92OiBWIHwgQmFja2dyb3VuZEZldGNoPFY+LFxuICAgIHNpemU/OiBMUlVDYWNoZS5TaXplLFxuICAgIHNpemVDYWxjdWxhdGlvbj86IExSVUNhY2hlLlNpemVDYWxjdWxhdG9yPEssIFY+LFxuICApID0+IHtcbiAgICBpZiAoc2l6ZSB8fCBzaXplQ2FsY3VsYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdjYW5ub3Qgc2V0IHNpemUgd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplIG9uIGNhY2hlJyxcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfTtcblxuICAqI2luZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy4jdGFpbDsgdHJ1ZTsgKSB7XG4gICAgICAgIGlmICghdGhpcy4jaXNWYWxpZEluZGV4KGkpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dTdGFsZSB8fCAhdGhpcy4jaXNTdGFsZShpKSkge1xuICAgICAgICAgIHlpZWxkIGlcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gdGhpcy4jaGVhZCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaSA9IHRoaXMuI3ByZXZbaV0gYXMgSW5kZXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICojcmluZGV4ZXMoeyBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlIH0gPSB7fSkge1xuICAgIGlmICh0aGlzLiNzaXplKSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy4jaGVhZDsgdHJ1ZTsgKSB7XG4gICAgICAgIGlmICghdGhpcy4jaXNWYWxpZEluZGV4KGkpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dTdGFsZSB8fCAhdGhpcy4jaXNTdGFsZShpKSkge1xuICAgICAgICAgIHlpZWxkIGlcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gdGhpcy4jdGFpbCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaSA9IHRoaXMuI25leHRbaV0gYXMgSW5kZXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNpc1ZhbGlkSW5kZXgoaW5kZXg6IEluZGV4KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGluZGV4ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuI2tleU1hcC5nZXQodGhpcy4ja2V5TGlzdFtpbmRleF0gYXMgSykgPT09IGluZGV4XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyBgW2tleSwgdmFsdWVdYCBwYWlycyxcbiAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICovXG4gICplbnRyaWVzKCkge1xuICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNpbmRleGVzKCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy4jdmFsTGlzdFtpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuI2tleUxpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSlcbiAgICAgICkge1xuICAgICAgICB5aWVsZCBbdGhpcy4ja2V5TGlzdFtpXSwgdGhpcy4jdmFsTGlzdFtpXV0gYXMgW0ssIFZdXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludmVyc2Ugb3JkZXIgdmVyc2lvbiBvZiB7QGxpbmsgTFJVQ2FjaGUuZW50cmllc31cbiAgICpcbiAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIGBba2V5LCB2YWx1ZV1gIHBhaXJzLFxuICAgKiBpbiBvcmRlciBmcm9tIGxlYXN0IHJlY2VudGx5IHVzZWQgdG8gbW9zdCByZWNlbnRseSB1c2VkLlxuICAgKi9cbiAgKnJlbnRyaWVzKCkge1xuICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLiNyaW5kZXhlcygpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuI3ZhbExpc3RbaV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLiNrZXlMaXN0W2ldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pXG4gICAgICApIHtcbiAgICAgICAgeWllbGQgW3RoaXMuI2tleUxpc3RbaV0sIHRoaXMuI3ZhbExpc3RbaV1dXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAqIGluIG9yZGVyIGZyb20gbW9zdCByZWNlbnRseSB1c2VkIHRvIGxlYXN0IHJlY2VudGx5IHVzZWQuXG4gICAqL1xuICAqa2V5cygpIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtpXVxuICAgICAgaWYgKGsgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godGhpcy4jdmFsTGlzdFtpXSkpIHtcbiAgICAgICAgeWllbGQga1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLmtleXN9XG4gICAqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUga2V5cyBpbiB0aGUgY2FjaGUsXG4gICAqIGluIG9yZGVyIGZyb20gbGVhc3QgcmVjZW50bHkgdXNlZCB0byBtb3N0IHJlY2VudGx5IHVzZWQuXG4gICAqL1xuICAqcmtleXMoKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2ldXG4gICAgICBpZiAoayAhPT0gdW5kZWZpbmVkICYmICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICB5aWVsZCBrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGdlbmVyYXRvciB5aWVsZGluZyB0aGUgdmFsdWVzIGluIHRoZSBjYWNoZSxcbiAgICogaW4gb3JkZXIgZnJvbSBtb3N0IHJlY2VudGx5IHVzZWQgdG8gbGVhc3QgcmVjZW50bHkgdXNlZC5cbiAgICovXG4gICp2YWx1ZXMoKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHRoaXMuI3ZhbExpc3RbaV0pKSB7XG4gICAgICAgIHlpZWxkIHRoaXMuI3ZhbExpc3RbaV0gYXMgVlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZlcnNlIG9yZGVyIHZlcnNpb24gb2Yge0BsaW5rIExSVUNhY2hlLnZhbHVlc31cbiAgICpcbiAgICogUmV0dXJuIGEgZ2VuZXJhdG9yIHlpZWxkaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIGNhY2hlLFxuICAgKiBpbiBvcmRlciBmcm9tIGxlYXN0IHJlY2VudGx5IHVzZWQgdG8gbW9zdCByZWNlbnRseSB1c2VkLlxuICAgKi9cbiAgKnJ2YWx1ZXMoKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKCkpIHtcbiAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2ldXG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmICF0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh0aGlzLiN2YWxMaXN0W2ldKSkge1xuICAgICAgICB5aWVsZCB0aGlzLiN2YWxMaXN0W2ldXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGluZyBvdmVyIHRoZSBjYWNoZSBpdHNlbGYgeWllbGRzIHRoZSBzYW1lIHJlc3VsdHMgYXNcbiAgICoge0BsaW5rIExSVUNhY2hlLmVudHJpZXN9XG4gICAqL1xuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBBIFN0cmluZyB2YWx1ZSB0aGF0IGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBkZWZhdWx0IHN0cmluZ1xuICAgKiBkZXNjcmlwdGlvbiBvZiBhbiBvYmplY3QuIENhbGxlZCBieSB0aGUgYnVpbHQtaW4gbWV0aG9kXG4gICAqIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICovXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddID0gJ0xSVUNhY2hlJ1xuXG4gIC8qKlxuICAgKiBGaW5kIGEgdmFsdWUgZm9yIHdoaWNoIHRoZSBzdXBwbGllZCBmbiBtZXRob2QgcmV0dXJucyBhIHRydXRoeSB2YWx1ZSxcbiAgICogc2ltaWxhciB0byBgQXJyYXkuZmluZCgpYC4gZm4gaXMgY2FsbGVkIGFzIGBmbih2YWx1ZSwga2V5LCBjYWNoZSlgLlxuICAgKi9cbiAgZmluZChcbiAgICBmbjogKHY6IFYsIGs6IEssIHNlbGY6IExSVUNhY2hlPEssIFYsIEZDPikgPT4gYm9vbGVhbixcbiAgICBnZXRPcHRpb25zOiBMUlVDYWNoZS5HZXRPcHRpb25zPEssIFYsIEZDPiA9IHt9LFxuICApIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jaW5kZXhlcygpKSB7XG4gICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXVxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiB2XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWVcbiAgICAgIGlmIChmbih2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSBhcyBLLCB0aGlzKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQodGhpcy4ja2V5TGlzdFtpXSBhcyBLLCBnZXRPcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBvbiBlYWNoIGl0ZW0gaW4gdGhlIGNhY2hlLCBpbiBvcmRlciBmcm9tIG1vc3RcbiAgICogcmVjZW50bHkgdXNlZCB0byBsZWFzdCByZWNlbnRseSB1c2VkLlxuICAgKlxuICAgKiBgZm5gIGlzIGNhbGxlZCBhcyBgZm4odmFsdWUsIGtleSwgY2FjaGUpYC5cbiAgICpcbiAgICogSWYgYHRoaXNwYCBpcyBwcm92aWRlZCwgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGB0aGlzYC1jb250ZXh0IG9mXG4gICAqIHRoZSBwcm92aWRlZCBvYmplY3QsIG9yIHRoZSBjYWNoZSBpZiBubyBgdGhpc3BgIG9iamVjdCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogRG9lcyBub3QgdXBkYXRlIGFnZSBvciByZWNlbnR5IG9mIHVzZSwgb3IgaXRlcmF0ZSBvdmVyIHN0YWxlIHZhbHVlcy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgZm46ICh2OiBWLCBrOiBLLCBzZWxmOiBMUlVDYWNoZTxLLCBWLCBGQz4pID0+IGFueSxcbiAgICB0aGlzcDogYW55ID0gdGhpcyxcbiAgKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoKSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nIDogdlxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG4gICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSBhcyBLLCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgTFJVQ2FjaGUuZm9yRWFjaH0gYnV0IGl0ZW1zIGFyZSBpdGVyYXRlZCBvdmVyIGluXG4gICAqIHJldmVyc2Ugb3JkZXIuICAoaWUsIGxlc3MgcmVjZW50bHkgdXNlZCBpdGVtcyBhcmUgaXRlcmF0ZWQgb3ZlciBmaXJzdC4pXG4gICAqL1xuICByZm9yRWFjaChcbiAgICBmbjogKHY6IFYsIGs6IEssIHNlbGY6IExSVUNhY2hlPEssIFYsIEZDPikgPT4gYW55LFxuICAgIHRoaXNwOiBhbnkgPSB0aGlzLFxuICApIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy4jcmluZGV4ZXMoKSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikgPyB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nIDogdlxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG4gICAgICBmbi5jYWxsKHRoaXNwLCB2YWx1ZSwgdGhpcy4ja2V5TGlzdFtpXSBhcyBLLCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYW55IHN0YWxlIGVudHJpZXMuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcmVtb3ZlZCxcbiAgICogZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVyZ2VTdGFsZSgpIHtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlXG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgaWYgKHRoaXMuI2lzU3RhbGUoaSkpIHtcbiAgICAgICAgdGhpcy4jZGVsZXRlKHRoaXMuI2tleUxpc3RbaV0gYXMgSywgJ2V4cGlyZScpXG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWxldGVkXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHRlbmRlZCBpbmZvIGFib3V0IGEgZ2l2ZW4gZW50cnksIHRvIGdldCBpdHMgdmFsdWUsIHNpemUsIGFuZFxuICAgKiBUVEwgaW5mbyBzaW11bHRhbmVvdXNseS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LlxuICAgKlxuICAgKiBVbmxpa2Uge0BsaW5rIExSVUNhY2hlI2R1bXB9LCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSBhbmQgc3Vydml2ZVxuICAgKiBzZXJpYWxpemF0aW9uLCB0aGUgYHN0YXJ0YCB2YWx1ZSBpcyBhbHdheXMgdGhlIGN1cnJlbnQgdGltZXN0YW1wLCBhbmQgdGhlXG4gICAqIGB0dGxgIGlzIGEgY2FsY3VsYXRlZCByZW1haW5pbmcgdGltZSB0byBsaXZlIChuZWdhdGl2ZSBpZiBleHBpcmVkKS5cbiAgICpcbiAgICogQWx3YXlzIHJldHVybnMgc3RhbGUgdmFsdWVzLCBpZiB0aGVpciBpbmZvIGlzIGZvdW5kIGluIHRoZSBjYWNoZSwgc28gYmVcbiAgICogc3VyZSB0byBjaGVjayBmb3IgZXhwaXJhdGlvbnMgKGllLCBhIG5lZ2F0aXZlIHtAbGluayBMUlVDYWNoZS5FbnRyeSN0dGx9KVxuICAgKiBpZiByZWxldmFudC5cbiAgICovXG4gIGluZm8oa2V5OiBLKTogTFJVQ2FjaGUuRW50cnk8Vj4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGkgPSB0aGlzLiNrZXlNYXAuZ2V0KGtleSlcbiAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaV1cbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgLSB0aGlzIGlzbid0IHRlc3RlZCBmb3IgdGhlIGluZm8gZnVuY3Rpb24sXG4gICAgICogYnV0IGl0J3MgdGhlIHNhbWUgbG9naWMgYXMgZm91bmQgaW4gb3RoZXIgcGxhY2VzLiAqL1xuICAgIGNvbnN0IHZhbHVlOiBWIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHZcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIC8qIGM4IGlnbm9yZSBlbmQgKi9cbiAgICBjb25zdCBlbnRyeTogTFJVQ2FjaGUuRW50cnk8Vj4gPSB7IHZhbHVlIH1cbiAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgIGNvbnN0IHR0bCA9IHRoaXMuI3R0bHNbaV1cbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy4jc3RhcnRzW2ldXG4gICAgICBpZiAodHRsICYmIHN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHJlbWFpbiA9IHR0bCAtICh0aGlzLiNwZXJmLm5vdygpIC0gc3RhcnQpXG4gICAgICAgIGVudHJ5LnR0bCA9IHJlbWFpblxuICAgICAgICBlbnRyeS5zdGFydCA9IERhdGUubm93KClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICBlbnRyeS5zaXplID0gdGhpcy4jc2l6ZXNbaV1cbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIFtrZXksIHtAbGluayBMUlVDYWNoZS5FbnRyeX1dIHR1cGxlcyB3aGljaCBjYW4gYmVcbiAgICogcGFzc2VkIHRvIHtAbGluayBMUlVDYWNoZSNsb2FkfS5cbiAgICpcbiAgICogVGhlIGBzdGFydGAgZmllbGRzIGFyZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGUgYERhdGUubm93KClgXG4gICAqIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogU3RhbGUgZW50cmllcyBhcmUgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBgZHVtcGAsIGV2ZW4gaWZcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmFsbG93U3RhbGV9IGlzIGZhbHNlLlxuICAgKlxuICAgKiBOb3RlOiB0aGlzIHJldHVybnMgYW4gYWN0dWFsIGFycmF5LCBub3QgYSBnZW5lcmF0b3IsIHNvIGl0IGNhbiBiZSBtb3JlXG4gICAqIGVhc2lseSBwYXNzZWQgYXJvdW5kLlxuICAgKi9cbiAgZHVtcCgpIHtcbiAgICBjb25zdCBhcnI6IFtLLCBMUlVDYWNoZS5FbnRyeTxWPl1bXSA9IFtdXG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuI2luZGV4ZXMoeyBhbGxvd1N0YWxlOiB0cnVlIH0pKSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLiNrZXlMaXN0W2ldXG4gICAgICBjb25zdCB2ID0gdGhpcy4jdmFsTGlzdFtpXVxuICAgICAgY29uc3QgdmFsdWU6IFYgfCB1bmRlZmluZWQgPVxuICAgICAgICB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiB2XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IHVuZGVmaW5lZCkgY29udGludWVcbiAgICAgIGNvbnN0IGVudHJ5OiBMUlVDYWNoZS5FbnRyeTxWPiA9IHsgdmFsdWUgfVxuICAgICAgaWYgKHRoaXMuI3R0bHMgJiYgdGhpcy4jc3RhcnRzKSB7XG4gICAgICAgIGVudHJ5LnR0bCA9IHRoaXMuI3R0bHNbaV1cbiAgICAgICAgLy8gYWx3YXlzIGR1bXAgdGhlIHN0YXJ0IHJlbGF0aXZlIHRvIGEgcG9ydGFibGUgdGltZXN0YW1wXG4gICAgICAgIC8vIGl0J3Mgb2sgZm9yIHRoaXMgdG8gYmUgYSBiaXQgc2xvdywgaXQncyBhIHJhcmUgb3BlcmF0aW9uLlxuICAgICAgICBjb25zdCBhZ2UgPSB0aGlzLiNwZXJmLm5vdygpIC0gKHRoaXMuI3N0YXJ0c1tpXSBhcyBudW1iZXIpXG4gICAgICAgIGVudHJ5LnN0YXJ0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC0gYWdlKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuI3NpemVzKSB7XG4gICAgICAgIGVudHJ5LnNpemUgPSB0aGlzLiNzaXplc1tpXVxuICAgICAgfVxuICAgICAgYXJyLnVuc2hpZnQoW2tleSwgZW50cnldKVxuICAgIH1cbiAgICByZXR1cm4gYXJyXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGNhY2hlIGFuZCBsb2FkIGluIHRoZSBpdGVtcyBpbiBlbnRyaWVzIGluIHRoZSBvcmRlciBsaXN0ZWQuXG4gICAqXG4gICAqIFRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0aW5nIGNhY2hlIG1heSBiZSBkaWZmZXJlbnQgaWYgdGhlIHNhbWUgb3B0aW9ucyBhcmVcbiAgICogbm90IHVzZWQgaW4gYm90aCBjYWNoZXMuXG4gICAqXG4gICAqIFRoZSBgc3RhcnRgIGZpZWxkcyBhcmUgYXNzdW1lZCB0byBiZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGEgcG9ydGFibGVcbiAgICogYERhdGUubm93KClgIHRpbWVzdGFtcCwgZXZlbiBpZiBgcGVyZm9ybWFuY2Uubm93KClgIGlzIGF2YWlsYWJsZS5cbiAgICovXG4gIGxvYWQoYXJyOiBbSywgTFJVQ2FjaGUuRW50cnk8Vj5dW10pIHtcbiAgICB0aGlzLmNsZWFyKClcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBhcnIpIHtcbiAgICAgIGlmIChlbnRyeS5zdGFydCkge1xuICAgICAgICAvLyBlbnRyeS5zdGFydCBpcyBhIHBvcnRhYmxlIHRpbWVzdGFtcCwgYnV0IHdlIG1heSBiZSB1c2luZ1xuICAgICAgICAvLyBub2RlJ3MgcGVyZm9ybWFuY2Uubm93KCksIHNvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0LCBzbyB0aGF0XG4gICAgICAgIC8vIHdlIGdldCB0aGUgaW50ZW5kZWQgcmVtYWluaW5nIFRUTCwgbm8gbWF0dGVyIGhvdyBsb25nIGl0J3NcbiAgICAgICAgLy8gYmVlbiBvbiBpY2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGl0J3Mgb2sgZm9yIHRoaXMgdG8gYmUgYSBiaXQgc2xvdywgaXQncyBhIHJhcmUgb3BlcmF0aW9uLlxuICAgICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gZW50cnkuc3RhcnRcbiAgICAgICAgZW50cnkuc3RhcnQgPSB0aGlzLiNwZXJmLm5vdygpIC0gYWdlXG4gICAgICB9XG4gICAgICB0aGlzLnNldChrZXksIGVudHJ5LnZhbHVlLCBlbnRyeSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdmFsdWUgdG8gdGhlIGNhY2hlLlxuICAgKlxuICAgKiBOb3RlOiBpZiBgdW5kZWZpbmVkYCBpcyBzcGVjaWZpZWQgYXMgYSB2YWx1ZSwgdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICoge0BsaW5rIExSVUNhY2hlI2RlbGV0ZX1cbiAgICpcbiAgICogRmllbGRzIG9uIHRoZSB7QGxpbmsgTFJVQ2FjaGUuU2V0T3B0aW9uc30gb3B0aW9ucyBwYXJhbSB3aWxsIG92ZXJyaWRlXG4gICAqIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zIGZvciB0aGUgc2NvcGVcbiAgICogb2YgdGhpcyBzaW5nbGUgYHNldCgpYCBvcGVyYXRpb24uXG4gICAqXG4gICAqIElmIGBzdGFydGAgaXMgcHJvdmlkZWQsIHRoZW4gdGhhdCB3aWxsIHNldCB0aGUgZWZmZWN0aXZlIHN0YXJ0XG4gICAqIHRpbWUgZm9yIHRoZSBUVEwgY2FsY3VsYXRpb24uIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgYSBwcmV2aW91c1xuICAgKiB2YWx1ZSBvZiBgcGVyZm9ybWFuY2Uubm93KClgIGlmIHN1cHBvcnRlZCwgb3IgYSBwcmV2aW91cyB2YWx1ZSBvZlxuICAgKiBgRGF0ZS5ub3coKWAgaWYgbm90LlxuICAgKlxuICAgKiBPcHRpb25zIG9iamVjdCBtYXkgYWxzbyBpbmNsdWRlIGBzaXplYCwgd2hpY2ggd2lsbCBwcmV2ZW50XG4gICAqIGNhbGxpbmcgdGhlIGBzaXplQ2FsY3VsYXRpb25gIGZ1bmN0aW9uIGFuZCBqdXN0IHVzZSB0aGUgc3BlY2lmaWVkXG4gICAqIG51bWJlciBpZiBpdCBpcyBhIHBvc2l0aXZlIGludGVnZXIsIGFuZCBgbm9EaXNwb3NlT25TZXRgIHdoaWNoXG4gICAqIHdpbGwgcHJldmVudCBjYWxsaW5nIGEgYGRpc3Bvc2VgIGZ1bmN0aW9uIGluIHRoZSBjYXNlIG9mXG4gICAqIG92ZXJ3cml0ZXMuXG4gICAqXG4gICAqIElmIHRoZSBgc2l6ZWAgKG9yIHJldHVybiB2YWx1ZSBvZiBgc2l6ZUNhbGN1bGF0aW9uYCkgZm9yIGEgZ2l2ZW5cbiAgICogZW50cnkgaXMgZ3JlYXRlciB0aGFuIGBtYXhFbnRyeVNpemVgLCB0aGVuIHRoZSBpdGVtIHdpbGwgbm90IGJlXG4gICAqIGFkZGVkIHRvIHRoZSBjYWNoZS5cbiAgICpcbiAgICogV2lsbCB1cGRhdGUgdGhlIHJlY2VuY3kgb2YgdGhlIGVudHJ5LlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgYHVuZGVmaW5lZGAsIHRoZW4gdGhpcyBpcyBhbiBhbGlhcyBmb3JcbiAgICogYGNhY2hlLmRlbGV0ZShrZXkpYC4gYHVuZGVmaW5lZGAgaXMgbmV2ZXIgc3RvcmVkIGluIHRoZSBjYWNoZS5cbiAgICovXG4gIHNldChcbiAgICBrOiBLLFxuICAgIHY6IFYgfCBCYWNrZ3JvdW5kRmV0Y2g8Vj4gfCB1bmRlZmluZWQsXG4gICAgc2V0T3B0aW9uczogTFJVQ2FjaGUuU2V0T3B0aW9uczxLLCBWLCBGQz4gPSB7fSxcbiAgKSB7XG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kZWxldGUoaylcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHR0bCA9IHRoaXMudHRsLFxuICAgICAgc3RhcnQsXG4gICAgICBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsXG4gICAgICBzaXplQ2FsY3VsYXRpb24gPSB0aGlzLnNpemVDYWxjdWxhdGlvbixcbiAgICAgIHN0YXR1cyxcbiAgICB9ID0gc2V0T3B0aW9uc1xuICAgIGxldCB7IG5vVXBkYXRlVFRMID0gdGhpcy5ub1VwZGF0ZVRUTCB9ID0gc2V0T3B0aW9uc1xuXG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuI3JlcXVpcmVTaXplKFxuICAgICAgayxcbiAgICAgIHYsXG4gICAgICBzZXRPcHRpb25zLnNpemUgfHwgMCxcbiAgICAgIHNpemVDYWxjdWxhdGlvbixcbiAgICApXG4gICAgLy8gaWYgdGhlIGl0ZW0gZG9lc24ndCBmaXQsIGRvbid0IGRvIGFueXRoaW5nXG4gICAgLy8gTkI6IG1heEVudHJ5U2l6ZSBzZXQgdG8gbWF4U2l6ZSBieSBkZWZhdWx0XG4gICAgaWYgKHRoaXMubWF4RW50cnlTaXplICYmIHNpemUgPiB0aGlzLm1heEVudHJ5U2l6ZSkge1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuc2V0ID0gJ21pc3MnXG4gICAgICAgIHN0YXR1cy5tYXhFbnRyeVNpemVFeGNlZWRlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIGhhdmUgdG8gZGVsZXRlLCBpbiBjYXNlIHNvbWV0aGluZyBpcyB0aGVyZSBhbHJlYWR5LlxuICAgICAgdGhpcy4jZGVsZXRlKGssICdzZXQnKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgbGV0IGluZGV4ID0gdGhpcy4jc2l6ZSA9PT0gMCA/IHVuZGVmaW5lZCA6IHRoaXMuI2tleU1hcC5nZXQoaylcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gYWRkaXRpb25cbiAgICAgIGluZGV4ID0gKFxuICAgICAgICB0aGlzLiNzaXplID09PSAwID8gdGhpcy4jdGFpbFxuICAgICAgICA6IHRoaXMuI2ZyZWUubGVuZ3RoICE9PSAwID8gdGhpcy4jZnJlZS5wb3AoKVxuICAgICAgICA6IHRoaXMuI3NpemUgPT09IHRoaXMuI21heCA/IHRoaXMuI2V2aWN0KGZhbHNlKVxuICAgICAgICA6IHRoaXMuI3NpemUpIGFzIEluZGV4XG4gICAgICB0aGlzLiNrZXlMaXN0W2luZGV4XSA9IGtcbiAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdlxuICAgICAgdGhpcy4ja2V5TWFwLnNldChrLCBpbmRleClcbiAgICAgIHRoaXMuI25leHRbdGhpcy4jdGFpbF0gPSBpbmRleFxuICAgICAgdGhpcy4jcHJldltpbmRleF0gPSB0aGlzLiN0YWlsXG4gICAgICB0aGlzLiN0YWlsID0gaW5kZXhcbiAgICAgIHRoaXMuI3NpemUrK1xuICAgICAgdGhpcy4jYWRkSXRlbVNpemUoaW5kZXgsIHNpemUsIHN0YXR1cylcbiAgICAgIGlmIChzdGF0dXMpIHN0YXR1cy5zZXQgPSAnYWRkJ1xuICAgICAgbm9VcGRhdGVUVEwgPSBmYWxzZVxuICAgICAgaWYgKHRoaXMuI2hhc09uSW5zZXJ0KSB7XG4gICAgICAgIHRoaXMuI29uSW5zZXJ0Py4odiBhcyBWLCBrLCAnYWRkJylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlXG4gICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KVxuICAgICAgY29uc3Qgb2xkVmFsID0gdGhpcy4jdmFsTGlzdFtpbmRleF0gYXMgViB8IEJhY2tncm91bmRGZXRjaDxWPlxuICAgICAgaWYgKHYgIT09IG9sZFZhbCkge1xuICAgICAgICBpZiAodGhpcy4jaGFzRmV0Y2hNZXRob2QgJiYgdGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2gob2xkVmFsKSkge1xuICAgICAgICAgIG9sZFZhbC5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ3JlcGxhY2VkJykpXG4gICAgICAgICAgY29uc3QgeyBfX3N0YWxlV2hpbGVGZXRjaGluZzogcyB9ID0gb2xkVmFsXG4gICAgICAgICAgaWYgKHMgIT09IHVuZGVmaW5lZCAmJiAhbm9EaXNwb3NlT25TZXQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/LihzIGFzIFYsIGssICdzZXQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlcikge1xuICAgICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbcyBhcyBWLCBrLCAnc2V0J10pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFub0Rpc3Bvc2VPblNldCkge1xuICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlPy4ob2xkVmFsIGFzIFYsIGssICdzZXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbb2xkVmFsIGFzIFYsIGssICdzZXQnXSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaW5kZXgpXG4gICAgICAgIHRoaXMuI2FkZEl0ZW1TaXplKGluZGV4LCBzaXplLCBzdGF0dXMpXG4gICAgICAgIHRoaXMuI3ZhbExpc3RbaW5kZXhdID0gdlxuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgc3RhdHVzLnNldCA9ICdyZXBsYWNlJ1xuICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID1cbiAgICAgICAgICAgIG9sZFZhbCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaChvbGRWYWwpID9cbiAgICAgICAgICAgICAgb2xkVmFsLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgICA6IG9sZFZhbFxuICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSBzdGF0dXMub2xkVmFsdWUgPSBvbGRWYWx1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuc2V0ID0gJ3VwZGF0ZSdcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI2hhc09uSW5zZXJ0KSB7XG4gICAgICAgIHRoaXMub25JbnNlcnQ/Lih2IGFzIFYsIGssIHYgPT09IG9sZFZhbCA/ICd1cGRhdGUnIDogJ3JlcGxhY2UnKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHRsICE9PSAwICYmICF0aGlzLiN0dGxzKSB7XG4gICAgICB0aGlzLiNpbml0aWFsaXplVFRMVHJhY2tpbmcoKVxuICAgIH1cbiAgICBpZiAodGhpcy4jdHRscykge1xuICAgICAgaWYgKCFub1VwZGF0ZVRUTCkge1xuICAgICAgICB0aGlzLiNzZXRJdGVtVFRMKGluZGV4LCB0dGwsIHN0YXJ0KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cykgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpXG4gICAgfVxuICAgIGlmICghbm9EaXNwb3NlT25TZXQgJiYgdGhpcy4jaGFzRGlzcG9zZUFmdGVyICYmIHRoaXMuI2Rpc3Bvc2VkKSB7XG4gICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkXG4gICAgICBsZXQgdGFzazogRGlzcG9zZVRhc2s8SywgVj4gfCB1bmRlZmluZWRcbiAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEV2aWN0IHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW0sIHJldHVybmluZyBpdHMgdmFsdWUgb3JcbiAgICogYHVuZGVmaW5lZGAgaWYgY2FjaGUgaXMgZW1wdHkuXG4gICAqL1xuICBwb3AoKTogViB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIHdoaWxlICh0aGlzLiNzaXplKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuI3ZhbExpc3RbdGhpcy4jaGVhZF1cbiAgICAgICAgdGhpcy4jZXZpY3QodHJ1ZSlcbiAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbCkpIHtcbiAgICAgICAgICBpZiAodmFsLl9fc3RhbGVXaGlsZUZldGNoaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIgJiYgdGhpcy4jZGlzcG9zZWQpIHtcbiAgICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZFxuICAgICAgICBsZXQgdGFzazogRGlzcG9zZVRhc2s8SywgVj4gfCB1bmRlZmluZWRcbiAgICAgICAgd2hpbGUgKCh0YXNrID0gZHQ/LnNoaWZ0KCkpKSB7XG4gICAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzaylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNldmljdChmcmVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgaGVhZCA9IHRoaXMuI2hlYWRcbiAgICBjb25zdCBrID0gdGhpcy4ja2V5TGlzdFtoZWFkXSBhcyBLXG4gICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaGVhZF0gYXMgVlxuICAgIGlmICh0aGlzLiNoYXNGZXRjaE1ldGhvZCAmJiB0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2V2aWN0ZWQnKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuI2hhc0Rpc3Bvc2UgfHwgdGhpcy4jaGFzRGlzcG9zZUFmdGVyKSB7XG4gICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICB0aGlzLiNkaXNwb3NlPy4odiwgaywgJ2V2aWN0JylcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YsIGssICdldmljdCddKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLiNyZW1vdmVJdGVtU2l6ZShoZWFkKVxuICAgIGlmICh0aGlzLiNhdXRvcHVyZ2VUaW1lcnM/LltoZWFkXSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2F1dG9wdXJnZVRpbWVyc1toZWFkXSlcbiAgICAgIHRoaXMuI2F1dG9wdXJnZVRpbWVyc1toZWFkXSA9IHVuZGVmaW5lZFxuICAgIH1cbiAgICAvLyBpZiB3ZSBhcmVuJ3QgYWJvdXQgdG8gdXNlIHRoZSBpbmRleCwgdGhlbiBudWxsIHRoZXNlIG91dFxuICAgIGlmIChmcmVlKSB7XG4gICAgICB0aGlzLiNrZXlMaXN0W2hlYWRdID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLiN2YWxMaXN0W2hlYWRdID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLiNmcmVlLnB1c2goaGVhZClcbiAgICB9XG4gICAgaWYgKHRoaXMuI3NpemUgPT09IDEpIHtcbiAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiN0YWlsID0gMCBhcyBJbmRleFxuICAgICAgdGhpcy4jZnJlZS5sZW5ndGggPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2hlYWRdIGFzIEluZGV4XG4gICAgfVxuICAgIHRoaXMuI2tleU1hcC5kZWxldGUoaylcbiAgICB0aGlzLiNzaXplLS1cbiAgICByZXR1cm4gaGVhZFxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEga2V5IGlzIGluIHRoZSBjYWNoZSwgd2l0aG91dCB1cGRhdGluZyB0aGUgcmVjZW5jeSBvZiB1c2UuXG4gICAqIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseVxuICAgKiBpbiB0aGUgY2FjaGUuXG4gICAqXG4gICAqIENoZWNrIGlmIGEga2V5IGlzIGluIHRoZSBjYWNoZSwgd2l0aG91dCB1cGRhdGluZyB0aGUgcmVjZW5jeSBvZlxuICAgKiB1c2UuIEFnZSBpcyB1cGRhdGVkIGlmIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS51cGRhdGVBZ2VPbkhhc30gaXMgc2V0XG4gICAqIHRvIGB0cnVlYCBpbiBlaXRoZXIgdGhlIG9wdGlvbnMgb3IgdGhlIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBXaWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBpdGVtIGlzIHN0YWxlLCBldmVuIHRob3VnaCBpdCBpcyB0ZWNobmljYWxseSBpblxuICAgKiB0aGUgY2FjaGUuIFRoZSBkaWZmZXJlbmNlIGNhbiBiZSBkZXRlcm1pbmVkIChpZiBpdCBtYXR0ZXJzKSBieSB1c2luZyBhXG4gICAqIGBzdGF0dXNgIGFyZ3VtZW50LCBhbmQgaW5zcGVjdGluZyB0aGUgYGhhc2AgZmllbGQuXG4gICAqXG4gICAqIFdpbGwgbm90IHVwZGF0ZSBpdGVtIGFnZSB1bmxlc3NcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLnVwZGF0ZUFnZU9uSGFzfSBpcyBzZXQuXG4gICAqL1xuICBoYXMoazogSywgaGFzT3B0aW9uczogTFJVQ2FjaGUuSGFzT3B0aW9uczxLLCBWLCBGQz4gPSB7fSkge1xuICAgIGNvbnN0IHsgdXBkYXRlQWdlT25IYXMgPSB0aGlzLnVwZGF0ZUFnZU9uSGFzLCBzdGF0dXMgfSA9IGhhc09wdGlvbnNcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleU1hcC5nZXQoaylcbiAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpICYmXG4gICAgICAgIHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgPT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLiNpc1N0YWxlKGluZGV4KSkge1xuICAgICAgICBpZiAodXBkYXRlQWdlT25IYXMpIHtcbiAgICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlKGluZGV4KVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICBzdGF0dXMuaGFzID0gJ2hpdCdcbiAgICAgICAgICB0aGlzLiNzdGF0dXNUVEwoc3RhdHVzLCBpbmRleClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgICAgc3RhdHVzLmhhcyA9ICdzdGFsZSdcbiAgICAgICAgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgIHN0YXR1cy5oYXMgPSAnbWlzcydcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogTGlrZSB7QGxpbmsgTFJVQ2FjaGUjZ2V0fSBidXQgZG9lc24ndCB1cGRhdGUgcmVjZW5jeSBvciBkZWxldGUgc3RhbGVcbiAgICogaXRlbXMuXG4gICAqXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGl0ZW0gaXMgc3RhbGUsIHVubGVzc1xuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZX0gaXMgc2V0LlxuICAgKi9cbiAgcGVlayhrOiBLLCBwZWVrT3B0aW9uczogTFJVQ2FjaGUuUGVla09wdGlvbnM8SywgViwgRkM+ID0ge30pIHtcbiAgICBjb25zdCB7IGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUgfSA9IHBlZWtPcHRpb25zXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgKCFhbGxvd1N0YWxlICYmIHRoaXMuI2lzU3RhbGUoaW5kZXgpKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XVxuICAgIC8vIGVpdGhlciBzdGFsZSBhbmQgYWxsb3dlZCwgb3IgZm9yY2luZyBhIHJlZnJlc2ggb2Ygbm9uLXN0YWxlIHZhbHVlXG4gICAgcmV0dXJuIHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpID8gdi5fX3N0YWxlV2hpbGVGZXRjaGluZyA6IHZcbiAgfVxuXG4gICNiYWNrZ3JvdW5kRmV0Y2goXG4gICAgazogSyxcbiAgICBpbmRleDogSW5kZXggfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPixcbiAgICBjb250ZXh0OiBhbnksXG4gICk6IEJhY2tncm91bmRGZXRjaDxWPiB7XG4gICAgY29uc3QgdiA9IGluZGV4ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLiN2YWxMaXN0W2luZGV4XVxuICAgIGlmICh0aGlzLiNpc0JhY2tncm91bmRGZXRjaCh2KSkge1xuICAgICAgcmV0dXJuIHZcbiAgICB9XG5cbiAgICBjb25zdCBhYyA9IG5ldyBBQygpXG4gICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnNcbiAgICAvLyB3aGVuL2lmIG91ciBBQyBzaWduYWxzLCB0aGVuIHN0b3AgbGlzdGVuaW5nIHRvIHRoZWlycy5cbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gYWMuYWJvcnQoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgIHNpZ25hbDogYWMuc2lnbmFsLFxuICAgIH0pXG5cbiAgICBjb25zdCBmZXRjaE9wdHMgPSB7XG4gICAgICBzaWduYWw6IGFjLnNpZ25hbCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgIH1cblxuICAgIGNvbnN0IGNiID0gKHY6IFYgfCB1bmRlZmluZWQsIHVwZGF0ZUNhY2hlID0gZmFsc2UpOiBWIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHsgYWJvcnRlZCB9ID0gYWMuc2lnbmFsXG4gICAgICBjb25zdCBpZ25vcmVBYm9ydCA9IG9wdGlvbnMuaWdub3JlRmV0Y2hBYm9ydCAmJiB2ICE9PSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHByb2NlZWQgPVxuICAgICAgICBvcHRpb25zLmlnbm9yZUZldGNoQWJvcnQgfHxcbiAgICAgICAgISEob3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0ICYmIHYgIT09IHVuZGVmaW5lZClcbiAgICAgIGlmIChvcHRpb25zLnN0YXR1cykge1xuICAgICAgICBpZiAoYWJvcnRlZCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICBvcHRpb25zLnN0YXR1cy5mZXRjaEFib3J0ZWQgPSB0cnVlXG4gICAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGFjLnNpZ25hbC5yZWFzb25cbiAgICAgICAgICBpZiAoaWdub3JlQWJvcnQpIG9wdGlvbnMuc3RhdHVzLmZldGNoQWJvcnRJZ25vcmVkID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLmZldGNoUmVzb2x2ZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhYm9ydGVkICYmICFpZ25vcmVBYm9ydCAmJiAhdXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIGZldGNoRmFpbChhYy5zaWduYWwucmVhc29uLCBwcm9jZWVkKVxuICAgICAgfVxuICAgICAgLy8gZWl0aGVyIHdlIGRpZG4ndCBhYm9ydCwgYW5kIGFyZSBzdGlsbCBoZXJlLCBvciB3ZSBkaWQsIGFuZCBpZ25vcmVkXG4gICAgICBjb25zdCBiZiA9IHAgYXMgQmFja2dyb3VuZEZldGNoPFY+XG4gICAgICAvLyBpZiBub3RoaW5nIGVsc2UgaGFzIGJlZW4gd3JpdHRlbiB0aGVyZSBidXQgd2UncmUgc2V0IHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIGNhY2hlIGFuZCBpZ25vcmUgdGhlIGFib3J0LCBvciBpZiBpdCdzIHN0aWxsIHBlbmRpbmcgb24gdGhpcyBzcGVjaWZpY1xuICAgICAgLy8gYmFja2dyb3VuZCByZXF1ZXN0LCB0aGVuIHdyaXRlIGl0IHRvIHRoZSBjYWNoZS5cbiAgICAgIGNvbnN0IHZsID0gdGhpcy4jdmFsTGlzdFtpbmRleCBhcyBJbmRleF1cbiAgICAgIGlmICh2bCA9PT0gcCB8fCAoaWdub3JlQWJvcnQgJiYgdXBkYXRlQ2FjaGUgJiYgdmwgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChiZi5fX3N0YWxlV2hpbGVGZXRjaGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLiN2YWxMaXN0W2luZGV4IGFzIEluZGV4XSA9IGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2RlbGV0ZShrLCAnZmV0Y2gnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIG9wdGlvbnMuc3RhdHVzLmZldGNoVXBkYXRlZCA9IHRydWVcbiAgICAgICAgICB0aGlzLnNldChrLCB2LCBmZXRjaE9wdHMub3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZcbiAgICB9XG5cbiAgICBjb25zdCBlYiA9IChlcjogYW55KSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5zdGF0dXMpIHtcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hSZWplY3RlZCA9IHRydWVcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMuZmV0Y2hFcnJvciA9IGVyXG4gICAgICB9XG4gICAgICAvLyBkbyBub3QgcGFzcyBnbywgZG8gbm90IGNvbGxlY3QgJDIwMFxuICAgICAgcmV0dXJuIGZldGNoRmFpbChlciwgZmFsc2UpXG4gICAgfVxuXG4gICAgY29uc3QgZmV0Y2hGYWlsID0gKGVyOiBhbnksIHByb2NlZWQ6IGJvb2xlYW4pOiBWIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHsgYWJvcnRlZCB9ID0gYWMuc2lnbmFsXG4gICAgICBjb25zdCBhbGxvd1N0YWxlQWJvcnRlZCA9IGFib3J0ZWQgJiYgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0XG4gICAgICBjb25zdCBhbGxvd1N0YWxlID1cbiAgICAgICAgYWxsb3dTdGFsZUFib3J0ZWQgfHwgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvblxuICAgICAgY29uc3Qgbm9EZWxldGUgPSBhbGxvd1N0YWxlIHx8IG9wdGlvbnMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uXG4gICAgICBjb25zdCBiZiA9IHAgYXMgQmFja2dyb3VuZEZldGNoPFY+XG4gICAgICBpZiAodGhpcy4jdmFsTGlzdFtpbmRleCBhcyBJbmRleF0gPT09IHApIHtcbiAgICAgICAgLy8gaWYgd2UgYWxsb3cgc3RhbGUgb24gZmV0Y2ggcmVqZWN0aW9ucywgdGhlbiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0XG4gICAgICAgIC8vIHRoZSBzdGFsZSB2YWx1ZSBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSB3aGVuIHRoZSBmZXRjaCBmYWlscy5cbiAgICAgICAgY29uc3QgZGVsID1cbiAgICAgICAgICAhbm9EZWxldGUgfHwgKCFwcm9jZWVkICYmIGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nID09PSB1bmRlZmluZWQpXG4gICAgICAgIGlmIChkZWwpIHtcbiAgICAgICAgICB0aGlzLiNkZWxldGUoaywgJ2ZldGNoJylcbiAgICAgICAgfSBlbHNlIGlmICghYWxsb3dTdGFsZUFib3J0ZWQpIHtcbiAgICAgICAgICAvLyBzdGlsbCByZXBsYWNlIHRoZSAqcHJvbWlzZSogd2l0aCB0aGUgc3RhbGUgdmFsdWUsXG4gICAgICAgICAgLy8gc2luY2Ugd2UgYXJlIGRvbmUgd2l0aCB0aGUgcHJvbWlzZSBhdCB0aGlzIHBvaW50LlxuICAgICAgICAgIC8vIGxlYXZlIGl0IHVudG91Y2hlZCBpZiB3ZSdyZSBzdGlsbCB3YWl0aW5nIGZvciBhblxuICAgICAgICAgIC8vIGFib3J0ZWQgYmFja2dyb3VuZCBmZXRjaCB0aGF0IGhhc24ndCB5ZXQgcmV0dXJuZWQuXG4gICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleCBhcyBJbmRleF0gPSBiZi5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYWxsb3dTdGFsZSkge1xuICAgICAgICBpZiAob3B0aW9ucy5zdGF0dXMgJiYgYmYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9wdGlvbnMuc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJmLl9fc3RhbGVXaGlsZUZldGNoaW5nXG4gICAgICB9IGVsc2UgaWYgKGJmLl9fcmV0dXJuZWQgPT09IGJmKSB7XG4gICAgICAgIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGNhbGwgPSAoXG4gICAgICByZXM6ICh2OiBWIHwgdW5kZWZpbmVkKSA9PiB2b2lkLFxuICAgICAgcmVqOiAoZTogYW55KSA9PiB2b2lkLFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgZm1wID0gdGhpcy4jZmV0Y2hNZXRob2Q/LihrLCB2LCBmZXRjaE9wdHMpXG4gICAgICBpZiAoZm1wICYmIGZtcCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgZm1wLnRoZW4odiA9PiByZXModiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdiksIHJlailcbiAgICAgIH1cbiAgICAgIC8vIGlnbm9yZWQsIHdlIGdvIHVudGlsIHdlIGZpbmlzaCwgcmVnYXJkbGVzcy5cbiAgICAgIC8vIGRlZmVyIGNoZWNrIHVudGlsIHdlIGFyZSBhY3R1YWxseSBhYm9ydGluZyxcbiAgICAgIC8vIHNvIGZldGNoTWV0aG9kIGNhbiBvdmVycmlkZS5cbiAgICAgIGFjLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmlnbm9yZUZldGNoQWJvcnQgfHwgb3B0aW9ucy5hbGxvd1N0YWxlT25GZXRjaEFib3J0KSB7XG4gICAgICAgICAgcmVzKHVuZGVmaW5lZClcbiAgICAgICAgICAvLyB3aGVuIGl0IGV2ZW50dWFsbHkgcmVzb2x2ZXMsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCkge1xuICAgICAgICAgICAgcmVzID0gdiA9PiBjYih2LCB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zdGF0dXMpIG9wdGlvbnMuc3RhdHVzLmZldGNoRGlzcGF0Y2hlZCA9IHRydWVcbiAgICBjb25zdCBwID0gbmV3IFByb21pc2UocGNhbGwpLnRoZW4oY2IsIGViKVxuICAgIGNvbnN0IGJmOiBCYWNrZ3JvdW5kRmV0Y2g8Vj4gPSBPYmplY3QuYXNzaWduKHAsIHtcbiAgICAgIF9fYWJvcnRDb250cm9sbGVyOiBhYyxcbiAgICAgIF9fc3RhbGVXaGlsZUZldGNoaW5nOiB2LFxuICAgICAgX19yZXR1cm5lZDogdW5kZWZpbmVkLFxuICAgIH0pXG5cbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW50ZXJuYWwsIGRvbid0IGV4cG9zZSBzdGF0dXMuXG4gICAgICB0aGlzLnNldChrLCBiZiwgeyAuLi5mZXRjaE9wdHMub3B0aW9ucywgc3RhdHVzOiB1bmRlZmluZWQgfSlcbiAgICAgIGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiN2YWxMaXN0W2luZGV4XSA9IGJmXG4gICAgfVxuICAgIHJldHVybiBiZlxuICB9XG5cbiAgI2lzQmFja2dyb3VuZEZldGNoKHA6IGFueSk6IHAgaXMgQmFja2dyb3VuZEZldGNoPFY+IHtcbiAgICBpZiAoIXRoaXMuI2hhc0ZldGNoTWV0aG9kKSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCBiID0gcCBhcyBCYWNrZ3JvdW5kRmV0Y2g8Vj5cbiAgICByZXR1cm4gKFxuICAgICAgISFiICYmXG4gICAgICBiIGluc3RhbmNlb2YgUHJvbWlzZSAmJlxuICAgICAgYi5oYXNPd25Qcm9wZXJ0eSgnX19zdGFsZVdoaWxlRmV0Y2hpbmcnKSAmJlxuICAgICAgYi5fX2Fib3J0Q29udHJvbGxlciBpbnN0YW5jZW9mIEFDXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gYXN5bmNocm9ub3VzIGNhY2hlZCBmZXRjaCB1c2luZyB0aGVcbiAgICoge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBmdW5jdGlvbi5cbiAgICpcbiAgICogSWYgdGhlIHZhbHVlIGlzIGluIHRoZSBjYWNoZSBhbmQgbm90IHN0YWxlLCB0aGVuIHRoZSByZXR1cm5lZFxuICAgKiBQcm9taXNlIHJlc29sdmVzIHRvIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogSWYgbm90IGluIHRoZSBjYWNoZSwgb3IgYmV5b25kIGl0cyBUVEwgc3RhbGVuZXNzLCB0aGVuXG4gICAqIGBmZXRjaE1ldGhvZChrZXksIHN0YWxlVmFsdWUsIHsgb3B0aW9ucywgc2lnbmFsLCBjb250ZXh0IH0pYCBpc1xuICAgKiBjYWxsZWQsIGFuZCB0aGUgdmFsdWUgcmV0dXJuZWQgd2lsbCBiZSBhZGRlZCB0byB0aGUgY2FjaGUgb25jZVxuICAgKiByZXNvbHZlZC5cbiAgICpcbiAgICogSWYgY2FsbGVkIHdpdGggYGFsbG93U3RhbGVgLCBhbmQgYW4gYXN5bmNocm9ub3VzIGZldGNoIGlzXG4gICAqIGN1cnJlbnRseSBpbiBwcm9ncmVzcyB0byByZWxvYWQgYSBzdGFsZSB2YWx1ZSwgdGhlbiB0aGUgZm9ybWVyXG4gICAqIHN0YWxlIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqXG4gICAqIElmIGNhbGxlZCB3aXRoIGBmb3JjZVJlZnJlc2hgLCB0aGVuIHRoZSBjYWNoZWQgaXRlbSB3aWxsIGJlXG4gICAqIHJlLWZldGNoZWQsIGV2ZW4gaWYgaXQgaXMgbm90IHN0YWxlLiBIb3dldmVyLCBpZiBgYWxsb3dTdGFsZWAgaXMgYWxzb1xuICAgKiBzZXQsIHRoZW4gdGhlIG9sZCB2YWx1ZSB3aWxsIHN0aWxsIGJlIHJldHVybmVkLiBUaGlzIGlzIHVzZWZ1bFxuICAgKiBpbiBjYXNlcyB3aGVyZSB5b3Ugd2FudCB0byBmb3JjZSBhIHJlbG9hZCBvZiBhIGNhY2hlZCB2YWx1ZS4gSWZcbiAgICogYSBiYWNrZ3JvdW5kIGZldGNoIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHRoZW4gYGZvcmNlUmVmcmVzaGBcbiAgICogaGFzIG5vIGVmZmVjdC5cbiAgICpcbiAgICogSWYgbXVsdGlwbGUgZmV0Y2hlcyBmb3IgdGhlIHNhbWUga2V5IGFyZSBpc3N1ZWQsIHRoZW4gdGhleSB3aWxsIGFsbCBiZVxuICAgKiBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSBjYWxsIHRvIGZldGNoTWV0aG9kLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IGhhbmRsaW5nIG9wdGlvbnMgc3VjaCBhc1xuICAgKiB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydH0sXG4gICAqIHtAbGluayBMUlVDYWNoZS5GZXRjaE9wdGlvbnMuc2lnbmFsfSxcbiAgICogYW5kIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbn0gd2lsbCBiZVxuICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBGSVJTVCBmZXRjaCgpIGNhbGwgZm9yIGEgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBUaGlzIGlzIGEga25vd24gKGZpeGFibGUpIHNob3J0Y29taW5nIHdoaWNoIHdpbGwgYmUgYWRkcmVzZWQgb24gd2hlblxuICAgKiBzb21lb25lIGNvbXBsYWlucyBhYm91dCBpdCwgYXMgdGhlIGZpeCB3b3VsZCBpbnZvbHZlIGFkZGVkIGNvbXBsZXhpdHkgYW5kXG4gICAqIG1heSBub3QgYmUgd29ydGggdGhlIGNvc3RzIGZvciB0aGlzIGVkZ2UgY2FzZS5cbiAgICpcbiAgICogSWYge0BsaW5rIExSVUNhY2hlLk9wdGlvbnNCYXNlLmZldGNoTWV0aG9kfSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoaXMgaXNcbiAgICogZWZmZWN0aXZlbHkgYW4gYWxpYXMgZm9yIGBQcm9taXNlLnJlc29sdmUoY2FjaGUuZ2V0KGtleSkpYC5cbiAgICpcbiAgICogV2hlbiB0aGUgZmV0Y2ggbWV0aG9kIHJlc29sdmVzIHRvIGEgdmFsdWUsIGlmIHRoZSBmZXRjaCBoYXMgbm90XG4gICAqIGJlZW4gYWJvcnRlZCBkdWUgdG8gZGVsZXRpb24sIGV2aWN0aW9uLCBvciBiZWluZyBvdmVyd3JpdHRlbixcbiAgICogdGhlbiBpdCBpcyBhZGRlZCB0byB0aGUgY2FjaGUgdXNpbmcgdGhlIG9wdGlvbnMgcHJvdmlkZWQuXG4gICAqXG4gICAqIElmIHRoZSBrZXkgaXMgZXZpY3RlZCBvciBkZWxldGVkIGJlZm9yZSB0aGUgYGZldGNoTWV0aG9kYFxuICAgKiByZXNvbHZlcywgdGhlbiB0aGUgQWJvcnRTaWduYWwgcGFzc2VkIHRvIHRoZSBgZmV0Y2hNZXRob2RgIHdpbGxcbiAgICogcmVjZWl2ZSBhbiBgYWJvcnRgIGV2ZW50LCBhbmQgdGhlIHByb21pc2UgcmV0dXJuZWQgYnkgYGZldGNoKClgXG4gICAqIHdpbGwgcmVqZWN0IHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGFib3J0LlxuICAgKlxuICAgKiBJZiBhIGBzaWduYWxgIGlzIHBhc3NlZCB0byB0aGUgYGZldGNoKClgIGNhbGwsIHRoZW4gYWJvcnRpbmcgdGhlXG4gICAqIHNpZ25hbCB3aWxsIGFib3J0IHRoZSBmZXRjaCBhbmQgY2F1c2UgdGhlIGBmZXRjaCgpYCBwcm9taXNlIHRvXG4gICAqIHJlamVjdCB3aXRoIHRoZSByZWFzb24gcHJvdmlkZWQuXG4gICAqXG4gICAqICoqU2V0dGluZyBgY29udGV4dGAqKlxuICAgKlxuICAgKiBJZiBhbiBgRkNgIHR5cGUgaXMgc2V0IHRvIGEgdHlwZSBvdGhlciB0aGFuIGB1bmtub3duYCwgYHZvaWRgLCBvclxuICAgKiBgdW5kZWZpbmVkYCBpbiB0aGUge0BsaW5rIExSVUNhY2hlfSBjb25zdHJ1Y3RvciwgdGhlbiBhbGxcbiAgICogY2FsbHMgdG8gYGNhY2hlLmZldGNoKClgIF9tdXN0XyBwcm92aWRlIGEgYGNvbnRleHRgIG9wdGlvbi4gSWZcbiAgICogc2V0IHRvIGB1bmRlZmluZWRgIG9yIGB2b2lkYCwgdGhlbiBjYWxscyB0byBmZXRjaCBfbXVzdCBub3RfXG4gICAqIHByb3ZpZGUgYSBgY29udGV4dGAgb3B0aW9uLlxuICAgKlxuICAgKiBUaGUgYGNvbnRleHRgIHBhcmFtIGFsbG93cyB5b3UgdG8gcHJvdmlkZSBhcmJpdHJhcnkgZGF0YSB0aGF0XG4gICAqIG1pZ2h0IGJlIHJlbGV2YW50IGluIHRoZSBjb3Vyc2Ugb2YgZmV0Y2hpbmcgdGhlIGRhdGEuIEl0IGlzIG9ubHlcbiAgICogcmVsZXZhbnQgZm9yIHRoZSBjb3Vyc2Ugb2YgYSBzaW5nbGUgYGZldGNoKClgIG9wZXJhdGlvbiwgYW5kXG4gICAqIGRpc2NhcmRlZCBhZnRlcndhcmRzLlxuICAgKlxuICAgKiAqKk5vdGU6IGBmZXRjaCgpYCBjYWxscyBhcmUgaW5mbGlnaHQtdW5pcXVlKipcbiAgICpcbiAgICogSWYgeW91IGNhbGwgYGZldGNoKClgIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUga2V5IHZhbHVlLFxuICAgKiB0aGVuIGV2ZXJ5IGNhbGwgYWZ0ZXIgdGhlIGZpcnN0IHdpbGwgcmVzb2x2ZSBvbiB0aGUgc2FtZVxuICAgKiBwcm9taXNlPHN1cD4xPC9zdXA+LFxuICAgKiBfZXZlbiBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IHNldHRpbmdzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGNoYW5nZVxuICAgKiB0aGUgYmVoYXZpb3Igb2YgdGhlIGZldGNoXywgc3VjaCBhcyBgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uYFxuICAgKiBvciBgaWdub3JlRmV0Y2hBYm9ydGAuXG4gICAqXG4gICAqIEluIG1vc3QgY2FzZXMsIHRoaXMgaXMgbm90IGEgcHJvYmxlbSAoaW4gZmFjdCwgb25seSBmZXRjaGluZ1xuICAgKiBzb21ldGhpbmcgb25jZSBpcyB3aGF0IHlvdSBwcm9iYWJseSB3YW50LCBpZiB5b3UncmUgY2FjaGluZyBpblxuICAgKiB0aGUgZmlyc3QgcGxhY2UpLiBJZiB5b3UgYXJlIGNoYW5naW5nIHRoZSBmZXRjaCgpIG9wdGlvbnNcbiAgICogZHJhbWF0aWNhbGx5IGJldHdlZW4gcnVucywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgeW91IG1pZ2h0XG4gICAqIGJlIHRyeWluZyB0byBmaXQgZGl2ZXJnZW50IHNlbWFudGljcyBpbnRvIGEgc2luZ2xlIG9iamVjdCwgYW5kXG4gICAqIHdvdWxkIGJlIGJldHRlciBvZmYgd2l0aCBtdWx0aXBsZSBjYWNoZSBpbnN0YW5jZXMuXG4gICAqXG4gICAqICoqMSoqOiBJZSwgdGhleSdyZSBub3QgdGhlIFwic2FtZSBQcm9taXNlXCIsIGJ1dCB0aGV5IHJlc29sdmUgYXRcbiAgICogdGhlIHNhbWUgdGltZSwgYmVjYXVzZSB0aGV5J3JlIGJvdGggd2FpdGluZyBvbiB0aGUgc2FtZVxuICAgKiB1bmRlcmx5aW5nIGZldGNoTWV0aG9kIHJlc3BvbnNlLlxuICAgKi9cblxuICBmZXRjaChcbiAgICBrOiBLLFxuICAgIGZldGNoT3B0aW9uczogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICk6IFByb21pc2U8dW5kZWZpbmVkIHwgVj5cblxuICAvLyB0aGlzIG92ZXJsb2FkIG5vdCBhbGxvd2VkIGlmIGNvbnRleHQgaXMgcmVxdWlyZWRcbiAgZmV0Y2goXG4gICAgazogdW5rbm93biBleHRlbmRzIEZDID8gS1xuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gS1xuICAgIDogbmV2ZXIsXG4gICAgZmV0Y2hPcHRpb25zPzogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBuZXZlcixcbiAgKTogUHJvbWlzZTx1bmRlZmluZWQgfCBWPlxuXG4gIGFzeW5jIGZldGNoKFxuICAgIGs6IEssXG4gICAgZmV0Y2hPcHRpb25zOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnM8SywgViwgRkM+ID0ge30sXG4gICk6IFByb21pc2U8dW5kZWZpbmVkIHwgVj4ge1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIGdldCBvcHRpb25zXG4gICAgICBhbGxvd1N0YWxlID0gdGhpcy5hbGxvd1N0YWxlLFxuICAgICAgdXBkYXRlQWdlT25HZXQgPSB0aGlzLnVwZGF0ZUFnZU9uR2V0LFxuICAgICAgbm9EZWxldGVPblN0YWxlR2V0ID0gdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQsXG4gICAgICAvLyBzZXQgb3B0aW9uc1xuICAgICAgdHRsID0gdGhpcy50dGwsXG4gICAgICBub0Rpc3Bvc2VPblNldCA9IHRoaXMubm9EaXNwb3NlT25TZXQsXG4gICAgICBzaXplID0gMCxcbiAgICAgIHNpemVDYWxjdWxhdGlvbiA9IHRoaXMuc2l6ZUNhbGN1bGF0aW9uLFxuICAgICAgbm9VcGRhdGVUVEwgPSB0aGlzLm5vVXBkYXRlVFRMLFxuICAgICAgLy8gZmV0Y2ggZXhjbHVzaXZlIG9wdGlvbnNcbiAgICAgIG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbiA9IHRoaXMubm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24gPSB0aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgaWdub3JlRmV0Y2hBYm9ydCA9IHRoaXMuaWdub3JlRmV0Y2hBYm9ydCxcbiAgICAgIGFsbG93U3RhbGVPbkZldGNoQWJvcnQgPSB0aGlzLmFsbG93U3RhbGVPbkZldGNoQWJvcnQsXG4gICAgICBjb250ZXh0LFxuICAgICAgZm9yY2VSZWZyZXNoID0gZmFsc2UsXG4gICAgICBzdGF0dXMsXG4gICAgICBzaWduYWwsXG4gICAgfSA9IGZldGNoT3B0aW9uc1xuXG4gICAgaWYgKCF0aGlzLiNoYXNGZXRjaE1ldGhvZCkge1xuICAgICAgaWYgKHN0YXR1cykgc3RhdHVzLmZldGNoID0gJ2dldCdcbiAgICAgIHJldHVybiB0aGlzLmdldChrLCB7XG4gICAgICAgIGFsbG93U3RhbGUsXG4gICAgICAgIHVwZGF0ZUFnZU9uR2V0LFxuICAgICAgICBub0RlbGV0ZU9uU3RhbGVHZXQsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGFsbG93U3RhbGUsXG4gICAgICB1cGRhdGVBZ2VPbkdldCxcbiAgICAgIG5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgIHR0bCxcbiAgICAgIG5vRGlzcG9zZU9uU2V0LFxuICAgICAgc2l6ZSxcbiAgICAgIHNpemVDYWxjdWxhdGlvbixcbiAgICAgIG5vVXBkYXRlVFRMLFxuICAgICAgbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uLFxuICAgICAgYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24sXG4gICAgICBhbGxvd1N0YWxlT25GZXRjaEFib3J0LFxuICAgICAgaWdub3JlRmV0Y2hBYm9ydCxcbiAgICAgIHN0YXR1cyxcbiAgICAgIHNpZ25hbCxcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChzdGF0dXMpIHN0YXR1cy5mZXRjaCA9ICdtaXNzJ1xuICAgICAgY29uc3QgcCA9IHRoaXMuI2JhY2tncm91bmRGZXRjaChrLCBpbmRleCwgb3B0aW9ucywgY29udGV4dClcbiAgICAgIHJldHVybiAocC5fX3JldHVybmVkID0gcClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW4gY2FjaGUsIG1heWJlIGFscmVhZHkgZmV0Y2hpbmdcbiAgICAgIGNvbnN0IHYgPSB0aGlzLiN2YWxMaXN0W2luZGV4XVxuICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgIGNvbnN0IHN0YWxlID0gYWxsb3dTdGFsZSAmJiB2Ll9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWRcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgIHN0YXR1cy5mZXRjaCA9ICdpbmZsaWdodCdcbiAgICAgICAgICBpZiAoc3RhbGUpIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFsZSA/IHYuX19zdGFsZVdoaWxlRmV0Y2hpbmcgOiAodi5fX3JldHVybmVkID0gdilcbiAgICAgIH1cblxuICAgICAgLy8gaWYgd2UgZm9yY2UgYSByZWZyZXNoLCB0aGF0IG1lYW5zIGRvIE5PVCBzZXJ2ZSB0aGUgY2FjaGVkIHZhbHVlLFxuICAgICAgLy8gdW5sZXNzIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIHJlZnJlc2hpbmcgdGhlIGNhY2hlLlxuICAgICAgY29uc3QgaXNTdGFsZSA9IHRoaXMuI2lzU3RhbGUoaW5kZXgpXG4gICAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiAhaXNTdGFsZSkge1xuICAgICAgICBpZiAoc3RhdHVzKSBzdGF0dXMuZmV0Y2ggPSAnaGl0J1xuICAgICAgICB0aGlzLiNtb3ZlVG9UYWlsKGluZGV4KVxuICAgICAgICBpZiAodXBkYXRlQWdlT25HZXQpIHtcbiAgICAgICAgICB0aGlzLiN1cGRhdGVJdGVtQWdlKGluZGV4KVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMpIHRoaXMuI3N0YXR1c1RUTChzdGF0dXMsIGluZGV4KVxuICAgICAgICByZXR1cm4gdlxuICAgICAgfVxuXG4gICAgICAvLyBvaywgaXQgaXMgc3RhbGUgb3IgYSBmb3JjZWQgcmVmcmVzaCwgYW5kIG5vdCBhbHJlYWR5IGZldGNoaW5nLlxuICAgICAgLy8gcmVmcmVzaCB0aGUgY2FjaGUuXG4gICAgICBjb25zdCBwID0gdGhpcy4jYmFja2dyb3VuZEZldGNoKGssIGluZGV4LCBvcHRpb25zLCBjb250ZXh0KVxuICAgICAgY29uc3QgaGFzU3RhbGUgPSBwLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHN0YWxlVmFsID0gaGFzU3RhbGUgJiYgYWxsb3dTdGFsZVxuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMuZmV0Y2ggPSBpc1N0YWxlID8gJ3N0YWxlJyA6ICdyZWZyZXNoJ1xuICAgICAgICBpZiAoc3RhbGVWYWwgJiYgaXNTdGFsZSkgc3RhdHVzLnJldHVybmVkU3RhbGUgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhbGVWYWwgPyBwLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogKHAuX19yZXR1cm5lZCA9IHApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluIHNvbWUgY2FzZXMsIGBjYWNoZS5mZXRjaCgpYCBtYXkgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCwgZWl0aGVyIGJlY2F1c2VcbiAgICogYSB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UjZmV0Y2hNZXRob2R9IHdhcyBub3QgcHJvdmlkZWQgKHR1cm5pbmdcbiAgICogYGNhY2hlLmZldGNoKGspYCBpbnRvIGp1c3QgYW4gYXN5bmMgd3JhcHBlciBhcm91bmQgYGNhY2hlLmdldChrKWApIG9yXG4gICAqIGJlY2F1c2UgYGlnbm9yZUZldGNoQWJvcnRgIHdhcyBzcGVjaWZpZWQgKGVpdGhlciB0byB0aGUgY29uc3RydWN0b3Igb3JcbiAgICogaW4gdGhlIHtAbGluayBMUlVDYWNoZS5GZXRjaE9wdGlvbnN9KS4gQWxzbywgdGhlXG4gICAqIHtAbGluayBMUlVDYWNoZS5PcHRpb25zQmFzZS5mZXRjaE1ldGhvZH0gbWF5IHJldHVybiBgdW5kZWZpbmVkYCBvciBgdm9pZGAsIG1ha2luZ1xuICAgKiB0aGUgdGVzdCBldmVuIG1vcmUgY29tcGxpY2F0ZWQuXG4gICAqXG4gICAqIEJlY2F1c2UgaW5mZXJyaW5nIHRoZSBjYXNlcyB3aGVyZSBgdW5kZWZpbmVkYCBtaWdodCBiZSByZXR1cm5lZCBhcmUgc29cbiAgICogY3VtYmVyc29tZSwgYnV0IHRlc3RpbmcgZm9yIGB1bmRlZmluZWRgIGNhbiBhbHNvIGJlIGFubm95aW5nLCB0aGlzIG1ldGhvZFxuICAgKiBjYW4gYmUgdXNlZCwgd2hpY2ggd2lsbCByZWplY3QgaWYgYHRoaXMuZmV0Y2goKWAgcmVzb2x2ZXMgdG8gdW5kZWZpbmVkLlxuICAgKi9cbiAgZm9yY2VGZXRjaChcbiAgICBrOiBLLFxuICAgIGZldGNoT3B0aW9uczogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICk6IFByb21pc2U8Vj5cbiAgLy8gdGhpcyBvdmVybG9hZCBub3QgYWxsb3dlZCBpZiBjb250ZXh0IGlzIHJlcXVpcmVkXG4gIGZvcmNlRmV0Y2goXG4gICAgazogdW5rbm93biBleHRlbmRzIEZDID8gS1xuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gS1xuICAgIDogbmV2ZXIsXG4gICAgZmV0Y2hPcHRpb25zPzogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zPEssIFYsIEZDPlxuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gTFJVQ2FjaGUuRmV0Y2hPcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBuZXZlcixcbiAgKTogUHJvbWlzZTxWPlxuICBhc3luYyBmb3JjZUZldGNoKFxuICAgIGs6IEssXG4gICAgZmV0Y2hPcHRpb25zOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnM8SywgViwgRkM+ID0ge30sXG4gICk6IFByb21pc2U8Vj4ge1xuICAgIGNvbnN0IHYgPSBhd2FpdCB0aGlzLmZldGNoKFxuICAgICAgayxcbiAgICAgIGZldGNoT3B0aW9ucyBhcyB1bmtub3duIGV4dGVuZHMgRkMgPyBMUlVDYWNoZS5GZXRjaE9wdGlvbnM8SywgViwgRkM+XG4gICAgICA6IEZDIGV4dGVuZHMgdW5kZWZpbmVkIHwgdm9pZCA/IExSVUNhY2hlLkZldGNoT3B0aW9uc05vQ29udGV4dDxLLCBWPlxuICAgICAgOiBMUlVDYWNoZS5GZXRjaE9wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICAgKVxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignZmV0Y2goKSByZXR1cm5lZCB1bmRlZmluZWQnKVxuICAgIHJldHVybiB2XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGtleSBpcyBmb3VuZCBpbiB0aGUgY2FjaGUsIHRoZW4gdGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAqIHtAbGluayBMUlVDYWNoZSNnZXR9LiBJZiBub3QsIGluIHRoZSBjYWNoZSwgdGhlbiBjYWxjdWxhdGUgdGhlIHZhbHVlIHVzaW5nXG4gICAqIHRoZSB7QGxpbmsgTFJVQ2FjaGUuT3B0aW9uc0Jhc2UubWVtb01ldGhvZH0sIGFuZCBhZGQgaXQgdG8gdGhlIGNhY2hlLlxuICAgKlxuICAgKiBJZiBhbiBgRkNgIHR5cGUgaXMgc2V0IHRvIGEgdHlwZSBvdGhlciB0aGFuIGB1bmtub3duYCwgYHZvaWRgLCBvclxuICAgKiBgdW5kZWZpbmVkYCBpbiB0aGUgTFJVQ2FjaGUgY29uc3RydWN0b3IsIHRoZW4gYWxsIGNhbGxzIHRvIGBjYWNoZS5tZW1vKClgXG4gICAqIF9tdXN0XyBwcm92aWRlIGEgYGNvbnRleHRgIG9wdGlvbi4gSWYgc2V0IHRvIGB1bmRlZmluZWRgIG9yIGB2b2lkYCwgdGhlblxuICAgKiBjYWxscyB0byBtZW1vIF9tdXN0IG5vdF8gcHJvdmlkZSBhIGBjb250ZXh0YCBvcHRpb24uXG4gICAqXG4gICAqIFRoZSBgY29udGV4dGAgcGFyYW0gYWxsb3dzIHlvdSB0byBwcm92aWRlIGFyYml0cmFyeSBkYXRhIHRoYXQgbWlnaHQgYmVcbiAgICogcmVsZXZhbnQgaW4gdGhlIGNvdXJzZSBvZiBmZXRjaGluZyB0aGUgZGF0YS4gSXQgaXMgb25seSByZWxldmFudCBmb3IgdGhlXG4gICAqIGNvdXJzZSBvZiBhIHNpbmdsZSBgbWVtbygpYCBvcGVyYXRpb24sIGFuZCBkaXNjYXJkZWQgYWZ0ZXJ3YXJkcy5cbiAgICovXG4gIG1lbW8oXG4gICAgazogSyxcbiAgICBtZW1vT3B0aW9uczogdW5rbm93biBleHRlbmRzIEZDID8gTFJVQ2FjaGUuTWVtb09wdGlvbnM8SywgViwgRkM+XG4gICAgOiBGQyBleHRlbmRzIHVuZGVmaW5lZCB8IHZvaWQgPyBMUlVDYWNoZS5NZW1vT3B0aW9uc05vQ29udGV4dDxLLCBWPlxuICAgIDogTFJVQ2FjaGUuTWVtb09wdGlvbnNXaXRoQ29udGV4dDxLLCBWLCBGQz4sXG4gICk6IFZcbiAgLy8gdGhpcyBvdmVybG9hZCBub3QgYWxsb3dlZCBpZiBjb250ZXh0IGlzIHJlcXVpcmVkXG4gIG1lbW8oXG4gICAgazogdW5rbm93biBleHRlbmRzIEZDID8gS1xuICAgIDogRkMgZXh0ZW5kcyB1bmRlZmluZWQgfCB2b2lkID8gS1xuICAgIDogbmV2ZXIsXG4gICAgbWVtb09wdGlvbnM/OiB1bmtub3duIGV4dGVuZHMgRkMgPyBMUlVDYWNoZS5NZW1vT3B0aW9uczxLLCBWLCBGQz5cbiAgICA6IEZDIGV4dGVuZHMgdW5kZWZpbmVkIHwgdm9pZCA/IExSVUNhY2hlLk1lbW9PcHRpb25zTm9Db250ZXh0PEssIFY+XG4gICAgOiBuZXZlcixcbiAgKTogVlxuICBtZW1vKGs6IEssIG1lbW9PcHRpb25zOiBMUlVDYWNoZS5NZW1vT3B0aW9uczxLLCBWLCBGQz4gPSB7fSkge1xuICAgIGNvbnN0IG1lbW9NZXRob2QgPSB0aGlzLiNtZW1vTWV0aG9kXG4gICAgaWYgKCFtZW1vTWV0aG9kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIG1lbW9NZXRob2QgcHJvdmlkZWQgdG8gY29uc3RydWN0b3InKVxuICAgIH1cbiAgICBjb25zdCB7IGNvbnRleHQsIGZvcmNlUmVmcmVzaCwgLi4ub3B0aW9ucyB9ID0gbWVtb09wdGlvbnNcbiAgICBjb25zdCB2ID0gdGhpcy5nZXQoaywgb3B0aW9ucylcbiAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiB2ICE9PSB1bmRlZmluZWQpIHJldHVybiB2XG4gICAgY29uc3QgdnYgPSBtZW1vTWV0aG9kKGssIHYsIHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgIH0gYXMgTFJVQ2FjaGUuTWVtb2l6ZXJPcHRpb25zPEssIFYsIEZDPilcbiAgICB0aGlzLnNldChrLCB2diwgb3B0aW9ucylcbiAgICByZXR1cm4gdnZcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZS4gV2lsbCB1cGRhdGUgdGhlIHJlY2VuY3kgb2YgdGhlIGNhY2hlXG4gICAqIGVudHJ5IGZvdW5kLlxuICAgKlxuICAgKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgZ2V0KCkgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAqL1xuICBnZXQoazogSywgZ2V0T3B0aW9uczogTFJVQ2FjaGUuR2V0T3B0aW9uczxLLCBWLCBGQz4gPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFsbG93U3RhbGUgPSB0aGlzLmFsbG93U3RhbGUsXG4gICAgICB1cGRhdGVBZ2VPbkdldCA9IHRoaXMudXBkYXRlQWdlT25HZXQsXG4gICAgICBub0RlbGV0ZU9uU3RhbGVHZXQgPSB0aGlzLm5vRGVsZXRlT25TdGFsZUdldCxcbiAgICAgIHN0YXR1cyxcbiAgICB9ID0gZ2V0T3B0aW9uc1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5TWFwLmdldChrKVxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICBjb25zdCBmZXRjaGluZyA9IHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHZhbHVlKVxuICAgICAgaWYgKHN0YXR1cykgdGhpcy4jc3RhdHVzVFRMKHN0YXR1cywgaW5kZXgpXG4gICAgICBpZiAodGhpcy4jaXNTdGFsZShpbmRleCkpIHtcbiAgICAgICAgaWYgKHN0YXR1cykgc3RhdHVzLmdldCA9ICdzdGFsZSdcbiAgICAgICAgLy8gZGVsZXRlIG9ubHkgaWYgbm90IGFuIGluLWZsaWdodCBiYWNrZ3JvdW5kIGZldGNoXG4gICAgICAgIGlmICghZmV0Y2hpbmcpIHtcbiAgICAgICAgICBpZiAoIW5vRGVsZXRlT25TdGFsZUdldCkge1xuICAgICAgICAgICAgdGhpcy4jZGVsZXRlKGssICdleHBpcmUnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhdHVzICYmIGFsbG93U3RhbGUpIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZVxuICAgICAgICAgIHJldHVybiBhbGxvd1N0YWxlID8gdmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdGF0dXMgJiZcbiAgICAgICAgICAgIGFsbG93U3RhbGUgJiZcbiAgICAgICAgICAgIHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nICE9PSB1bmRlZmluZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHN0YXR1cy5yZXR1cm5lZFN0YWxlID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWxsb3dTdGFsZSA/IHZhbHVlLl9fc3RhbGVXaGlsZUZldGNoaW5nIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0dXMpIHN0YXR1cy5nZXQgPSAnaGl0J1xuICAgICAgICAvLyBpZiB3ZSdyZSBjdXJyZW50bHkgZmV0Y2hpbmcgaXQsIHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgaXQgeWV0XG4gICAgICAgIC8vIGl0J3Mgbm90IHN0YWxlLCB3aGljaCBtZWFucyB0aGlzIGlzbid0IGEgc3RhbGVXaGlsZVJlZmV0Y2hpbmcuXG4gICAgICAgIC8vIElmIGl0J3Mgbm90IHN0YWxlLCBhbmQgZmV0Y2hpbmcsIEFORCBoYXMgYSBfX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICAvLyB2YWx1ZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSB1c2VyIGZldGNoZWQgd2l0aCB7Zm9yY2VSZWZyZXNoOnRydWV9LFxuICAgICAgICAvLyBzbyBpdCdzIHNhZmUgdG8gcmV0dXJuIHRoYXQgdmFsdWUuXG4gICAgICAgIGlmIChmZXRjaGluZykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5fX3N0YWxlV2hpbGVGZXRjaGluZ1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI21vdmVUb1RhaWwoaW5kZXgpXG4gICAgICAgIGlmICh1cGRhdGVBZ2VPbkdldCkge1xuICAgICAgICAgIHRoaXMuI3VwZGF0ZUl0ZW1BZ2UoaW5kZXgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0dXMpIHtcbiAgICAgIHN0YXR1cy5nZXQgPSAnbWlzcydcbiAgICB9XG4gIH1cblxuICAjY29ubmVjdChwOiBJbmRleCwgbjogSW5kZXgpIHtcbiAgICB0aGlzLiNwcmV2W25dID0gcFxuICAgIHRoaXMuI25leHRbcF0gPSBuXG4gIH1cblxuICAjbW92ZVRvVGFpbChpbmRleDogSW5kZXgpOiB2b2lkIHtcbiAgICAvLyBpZiB0YWlsIGFscmVhZHksIG5vdGhpbmcgdG8gZG9cbiAgICAvLyBpZiBoZWFkLCBtb3ZlIGhlYWQgdG8gbmV4dFtpbmRleF1cbiAgICAvLyBlbHNlXG4gICAgLy8gICBtb3ZlIG5leHRbcHJldltpbmRleF1dIHRvIG5leHRbaW5kZXhdIChoZWFkIGhhcyBubyBwcmV2KVxuICAgIC8vICAgbW92ZSBwcmV2W25leHRbaW5kZXhdXSB0byBwcmV2W2luZGV4XVxuICAgIC8vIHByZXZbaW5kZXhdID0gdGFpbFxuICAgIC8vIG5leHRbdGFpbF0gPSBpbmRleFxuICAgIC8vIHRhaWwgPSBpbmRleFxuICAgIGlmIChpbmRleCAhPT0gdGhpcy4jdGFpbCkge1xuICAgICAgaWYgKGluZGV4ID09PSB0aGlzLiNoZWFkKSB7XG4gICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XSBhcyBJbmRleFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jY29ubmVjdChcbiAgICAgICAgICB0aGlzLiNwcmV2W2luZGV4XSBhcyBJbmRleCxcbiAgICAgICAgICB0aGlzLiNuZXh0W2luZGV4XSBhcyBJbmRleCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgdGhpcy4jY29ubmVjdCh0aGlzLiN0YWlsLCBpbmRleClcbiAgICAgIHRoaXMuI3RhaWwgPSBpbmRleFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEga2V5IG91dCBvZiB0aGUgY2FjaGUuXG4gICAqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBkZWxldGUoazogSykge1xuICAgIHJldHVybiB0aGlzLiNkZWxldGUoaywgJ2RlbGV0ZScpXG4gIH1cblxuICAjZGVsZXRlKGs6IEssIHJlYXNvbjogTFJVQ2FjaGUuRGlzcG9zZVJlYXNvbikge1xuICAgIGxldCBkZWxldGVkID0gZmFsc2VcbiAgICBpZiAodGhpcy4jc2l6ZSAhPT0gMCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLiNrZXlNYXAuZ2V0KGspXG4gICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodGhpcy4jYXV0b3B1cmdlVGltZXJzPy5baW5kZXhdKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2F1dG9wdXJnZVRpbWVycz8uW2luZGV4XSlcbiAgICAgICAgICB0aGlzLiNhdXRvcHVyZ2VUaW1lcnNbaW5kZXhdID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlZCA9IHRydWVcbiAgICAgICAgaWYgKHRoaXMuI3NpemUgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLiNjbGVhcihyZWFzb24pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4jcmVtb3ZlSXRlbVNpemUoaW5kZXgpXG4gICAgICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICAgICAgaWYgKHRoaXMuI2lzQmFja2dyb3VuZEZldGNoKHYpKSB7XG4gICAgICAgICAgICB2Ll9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignZGVsZXRlZCcpKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaGFzRGlzcG9zZSB8fCB0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/Lih2IGFzIFYsIGssIHJlYXNvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy4jZGlzcG9zZWQ/LnB1c2goW3YgYXMgViwgaywgcmVhc29uXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4ja2V5TWFwLmRlbGV0ZShrKVxuICAgICAgICAgIHRoaXMuI2tleUxpc3RbaW5kZXhdID0gdW5kZWZpbmVkXG4gICAgICAgICAgdGhpcy4jdmFsTGlzdFtpbmRleF0gPSB1bmRlZmluZWRcbiAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuI3RhaWwpIHtcbiAgICAgICAgICAgIHRoaXMuI3RhaWwgPSB0aGlzLiNwcmV2W2luZGV4XSBhcyBJbmRleFxuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuI2hlYWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2hlYWQgPSB0aGlzLiNuZXh0W2luZGV4XSBhcyBJbmRleFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwaSA9IHRoaXMuI3ByZXZbaW5kZXhdIGFzIG51bWJlclxuICAgICAgICAgICAgdGhpcy4jbmV4dFtwaV0gPSB0aGlzLiNuZXh0W2luZGV4XSBhcyBudW1iZXJcbiAgICAgICAgICAgIGNvbnN0IG5pID0gdGhpcy4jbmV4dFtpbmRleF0gYXMgbnVtYmVyXG4gICAgICAgICAgICB0aGlzLiNwcmV2W25pXSA9IHRoaXMuI3ByZXZbaW5kZXhdIGFzIG51bWJlclxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiNzaXplLS1cbiAgICAgICAgICB0aGlzLiNmcmVlLnB1c2goaW5kZXgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZD8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkdCA9IHRoaXMuI2Rpc3Bvc2VkXG4gICAgICBsZXQgdGFzazogRGlzcG9zZVRhc2s8SywgVj4gfCB1bmRlZmluZWRcbiAgICAgIHdoaWxlICgodGFzayA9IGR0Py5zaGlmdCgpKSkge1xuICAgICAgICB0aGlzLiNkaXNwb3NlQWZ0ZXI/LiguLi50YXNrKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVsZXRlZFxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBjYWNoZSBlbnRpcmVseSwgdGhyb3dpbmcgYXdheSBhbGwgdmFsdWVzLlxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NsZWFyKCdkZWxldGUnKVxuICB9XG4gICNjbGVhcihyZWFzb246IExSVUNhY2hlLkRpc3Bvc2VSZWFzb24pIHtcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHRoaXMuI3JpbmRleGVzKHsgYWxsb3dTdGFsZTogdHJ1ZSB9KSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuI3ZhbExpc3RbaW5kZXhdXG4gICAgICBpZiAodGhpcy4jaXNCYWNrZ3JvdW5kRmV0Y2godikpIHtcbiAgICAgICAgdi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ2RlbGV0ZWQnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLiNrZXlMaXN0W2luZGV4XVxuICAgICAgICBpZiAodGhpcy4jaGFzRGlzcG9zZSkge1xuICAgICAgICAgIHRoaXMuI2Rpc3Bvc2U/Lih2IGFzIFYsIGsgYXMgSywgcmVhc29uKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNoYXNEaXNwb3NlQWZ0ZXIpIHtcbiAgICAgICAgICB0aGlzLiNkaXNwb3NlZD8ucHVzaChbdiBhcyBWLCBrIGFzIEssIHJlYXNvbl0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNrZXlNYXAuY2xlYXIoKVxuICAgIHRoaXMuI3ZhbExpc3QuZmlsbCh1bmRlZmluZWQpXG4gICAgdGhpcy4ja2V5TGlzdC5maWxsKHVuZGVmaW5lZClcbiAgICBpZiAodGhpcy4jdHRscyAmJiB0aGlzLiNzdGFydHMpIHtcbiAgICAgIHRoaXMuI3R0bHMuZmlsbCgwKVxuICAgICAgdGhpcy4jc3RhcnRzLmZpbGwoMClcbiAgICAgIGZvciAoY29uc3QgdCBvZiB0aGlzLiNhdXRvcHVyZ2VUaW1lcnMgPz8gW10pIHtcbiAgICAgICAgaWYgKHQgIT09IHVuZGVmaW5lZCkgY2xlYXJUaW1lb3V0KHQpXG4gICAgICB9XG4gICAgICB0aGlzLiNhdXRvcHVyZ2VUaW1lcnM/LmZpbGwodW5kZWZpbmVkKVxuICAgIH1cbiAgICBpZiAodGhpcy4jc2l6ZXMpIHtcbiAgICAgIHRoaXMuI3NpemVzLmZpbGwoMClcbiAgICB9XG4gICAgdGhpcy4jaGVhZCA9IDAgYXMgSW5kZXhcbiAgICB0aGlzLiN0YWlsID0gMCBhcyBJbmRleFxuICAgIHRoaXMuI2ZyZWUubGVuZ3RoID0gMFxuICAgIHRoaXMuI2NhbGN1bGF0ZWRTaXplID0gMFxuICAgIHRoaXMuI3NpemUgPSAwXG4gICAgaWYgKHRoaXMuI2hhc0Rpc3Bvc2VBZnRlciAmJiB0aGlzLiNkaXNwb3NlZCkge1xuICAgICAgY29uc3QgZHQgPSB0aGlzLiNkaXNwb3NlZFxuICAgICAgbGV0IHRhc2s6IERpc3Bvc2VUYXNrPEssIFY+IHwgdW5kZWZpbmVkXG4gICAgICB3aGlsZSAoKHRhc2sgPSBkdD8uc2hpZnQoKSkpIHtcbiAgICAgICAgdGhpcy4jZGlzcG9zZUFmdGVyPy4oLi4udGFzaylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcImxydS1jYWNoZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYWNoZWRNYXA8SyBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30+IGltcGxlbWVudHMgTWFwPEssIFY+IHtcbiAgICByZWFkb25seSBjYWNoZTogTFJVQ2FjaGU8SywgVj47XG4gICAgcmVhZG9ubHkgbWFwOiBNYXA8SywgVj4gPSBuZXcgTWFwKCk7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogeyBjYWNoZVNpemU6IG51bWJlciB9KSB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBuZXcgTFJVQ2FjaGU8SywgVj4oe1xuICAgICAgICAgICAgbWF4OiBvcHRpb25zLmNhY2hlU2l6ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcFtTeW1ib2wuaXRlcmF0b3JdO1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcFtTeW1ib2wudG9TdHJpbmdUYWddO1xuICAgIH1cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuY2xlYXIoKTtcbiAgICB9XG4gICAgZGVsZXRlKGtleTogSyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkZWxldGVkID0gdGhpcy5tYXAuZGVsZXRlKGtleSk7XG4gICAgICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkO1xuICAgIH1cbiAgICBnZXQgZm9yRWFjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmZvckVhY2g7XG4gICAgfVxuICAgIGdldChrZXk6IEspOiBWIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgY2FjaGVkVmFsdWUgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgICAgICBpZiAoY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KGtleSk7XG4gICAgfVxuICAgIGhhcyhrZXk6IEspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmhhcyhrZXkpO1xuICAgIH1cbiAgICBzZXQoa2V5OiBLLCB2YWx1ZTogVik6IHRoaXMge1xuICAgICAgICB0aGlzLm1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5zaXplO1xuICAgIH1cbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZW50cmllcygpO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAua2V5cygpO1xuICAgIH1cbiAgICB2YWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC52YWx1ZXMoKTtcbiAgICB9XG59XG4iXX0=
|