ngx-spine
Version:
[](https://travis-ci.org/PoiScript/ngx-spine)
196 lines • 17.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/******************************************************************************
* Spine Runtimes License Agreement
* Last updated May 1, 2019. Replaces all prior versions.
*
* Copyright (c) 2013-2019, Esoteric Software LLC
*
* Integration of the Spine Runtimes into software or otherwise creating
* derivative works of the Spine Runtimes is permitted under the terms and
* conditions of Section 2 of the Spine Editor License Agreement:
* http://esotericsoftware.com/spine-editor-license
*
* Otherwise, it is permitted to integrate the Spine Runtimes into software
* or otherwise create derivative works of the Spine Runtimes (collectively,
* "Products"), provided that each user of the Products must obtain their own
* Spine Editor license and redistribution of the Products in any form must
* include this license and copyright notice.
*
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS
* INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
import { BlendMode } from "../core/BlendMode";
var ManagedWebGLRenderingContext = /** @class */ (function () {
function ManagedWebGLRenderingContext(canvasOrContext, contextConfig) {
var _this = this;
if (contextConfig === void 0) { contextConfig = { alpha: "true" }; }
this.restorables = new Array();
if (canvasOrContext instanceof HTMLCanvasElement) {
/** @type {?} */
var canvas = canvasOrContext;
this.gl = (/** @type {?} */ (((canvas.getContext("webgl", contextConfig) ||
canvas.getContext("experimental-webgl", contextConfig)))));
this.canvas = canvas;
canvas.addEventListener("webglcontextlost", (/**
* @param {?} e
* @return {?}
*/
function (e) {
/** @type {?} */
var event = (/** @type {?} */ (e));
if (e) {
e.preventDefault();
}
}));
canvas.addEventListener("webglcontextrestored", (/**
* @param {?} e
* @return {?}
*/
function (e) {
for (var i = 0, n = _this.restorables.length; i < n; i++) {
_this.restorables[i].restore();
}
}));
}
else {
this.gl = canvasOrContext;
this.canvas = (/** @type {?} */ (this.gl.canvas));
}
}
/**
* @param {?} restorable
* @return {?}
*/
ManagedWebGLRenderingContext.prototype.addRestorable = /**
* @param {?} restorable
* @return {?}
*/
function (restorable) {
this.restorables.push(restorable);
};
/**
* @param {?} restorable
* @return {?}
*/
ManagedWebGLRenderingContext.prototype.removeRestorable = /**
* @param {?} restorable
* @return {?}
*/
function (restorable) {
/** @type {?} */
var index = this.restorables.indexOf(restorable);
if (index > -1)
this.restorables.splice(index, 1);
};
return ManagedWebGLRenderingContext;
}());
export { ManagedWebGLRenderingContext };
if (false) {
/** @type {?} */
ManagedWebGLRenderingContext.prototype.canvas;
/** @type {?} */
ManagedWebGLRenderingContext.prototype.gl;
/**
* @type {?}
* @private
*/
ManagedWebGLRenderingContext.prototype.restorables;
}
var WebGLBlendModeConverter = /** @class */ (function () {
function WebGLBlendModeConverter() {
}
/**
* @param {?} blendMode
* @return {?}
*/
WebGLBlendModeConverter.getDestGLBlendMode = /**
* @param {?} blendMode
* @return {?}
*/
function (blendMode) {
switch (blendMode) {
case BlendMode.Normal:
return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;
case BlendMode.Additive:
return WebGLBlendModeConverter.ONE;
case BlendMode.Multiply:
return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;
case BlendMode.Screen:
return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;
default:
throw new Error("Unknown blend mode: " + blendMode);
}
};
/**
* @param {?} blendMode
* @param {?=} premultipliedAlpha
* @return {?}
*/
WebGLBlendModeConverter.getSourceGLBlendMode = /**
* @param {?} blendMode
* @param {?=} premultipliedAlpha
* @return {?}
*/
function (blendMode, premultipliedAlpha) {
if (premultipliedAlpha === void 0) { premultipliedAlpha = false; }
switch (blendMode) {
case BlendMode.Normal:
return premultipliedAlpha
? WebGLBlendModeConverter.ONE
: WebGLBlendModeConverter.SRC_ALPHA;
case BlendMode.Additive:
return premultipliedAlpha
? WebGLBlendModeConverter.ONE
: WebGLBlendModeConverter.SRC_ALPHA;
case BlendMode.Multiply:
return WebGLBlendModeConverter.DST_COLOR;
case BlendMode.Screen:
return WebGLBlendModeConverter.ONE;
default:
throw new Error("Unknown blend mode: " + blendMode);
}
};
WebGLBlendModeConverter.ZERO = 0;
WebGLBlendModeConverter.ONE = 1;
WebGLBlendModeConverter.SRC_COLOR = 0x0300;
WebGLBlendModeConverter.ONE_MINUS_SRC_COLOR = 0x0301;
WebGLBlendModeConverter.SRC_ALPHA = 0x0302;
WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA = 0x0303;
WebGLBlendModeConverter.DST_ALPHA = 0x0304;
WebGLBlendModeConverter.ONE_MINUS_DST_ALPHA = 0x0305;
WebGLBlendModeConverter.DST_COLOR = 0x0306;
return WebGLBlendModeConverter;
}());
export { WebGLBlendModeConverter };
if (false) {
/** @type {?} */
WebGLBlendModeConverter.ZERO;
/** @type {?} */
WebGLBlendModeConverter.ONE;
/** @type {?} */
WebGLBlendModeConverter.SRC_COLOR;
/** @type {?} */
WebGLBlendModeConverter.ONE_MINUS_SRC_COLOR;
/** @type {?} */
WebGLBlendModeConverter.SRC_ALPHA;
/** @type {?} */
WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA;
/** @type {?} */
WebGLBlendModeConverter.DST_ALPHA;
/** @type {?} */
WebGLBlendModeConverter.ONE_MINUS_DST_ALPHA;
/** @type {?} */
WebGLBlendModeConverter.DST_COLOR;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViR0wuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc3BpbmUvIiwic291cmNlcyI6WyJsaWIvc3BpbmUtdHMvd2ViZ2wvV2ViR0wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDO0lBSUUsc0NBQ0UsZUFBMEQsRUFDMUQsYUFBc0M7UUFGeEMsaUJBMEJDO1FBeEJDLDhCQUFBLEVBQUEsa0JBQXVCLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFIaEMsZ0JBQVcsR0FBRyxJQUFJLEtBQUssRUFBYyxDQUFDO1FBSzVDLElBQUksZUFBZSxZQUFZLGlCQUFpQixFQUFFOztnQkFDNUMsTUFBTSxHQUFHLGVBQWU7WUFDNUIsSUFBSSxDQUFDLEVBQUUsR0FBRyxtQkFBdUIsQ0FDL0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FDMUQsRUFBQSxDQUFDO1lBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQjs7OztZQUFFLFVBQUMsQ0FBTTs7b0JBQzdDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFBO2dCQUNoQyxJQUFJLENBQUMsRUFBRTtvQkFDTCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ3BCO1lBQ0gsQ0FBQyxFQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCOzs7O1lBQUUsVUFBQyxDQUFNO2dCQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVB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N0NZLHVCQUF1Qjs7O0lBQ2xDLDZCQUFnQjs7SUFDaEIsNEJBQWU7O0lBQ2Ysa0NBQTBCOztJQUMxQiw0Q0FBb0M7O0lBQ3BDLGtDQUEwQjs7SUFDMUIsNENBQW9DOztJQUNwQyxrQ0FBMEI7O0lBQzFCLDRDQUFvQzs7SUFDcEMsa0NBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxyXG4gKiBMYXN0IHVwZGF0ZWQgTWF5IDEsIDIwMTkuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTksIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xyXG4gKlxyXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcclxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcclxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcclxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXHJcbiAqXHJcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxyXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXHJcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cclxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XHJcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxyXG4gKlxyXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTXHJcbiAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVNcclxuICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU5cclxuICogTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsXHJcbiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXHJcbiAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUywgQlVTSU5FU1NcclxuICogSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxyXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcclxuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLFxyXG4gKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5pbXBvcnQgeyBSZXN0b3JhYmxlIH0gZnJvbSBcIi4uL2NvcmUvVXRpbHNcIjtcclxuaW1wb3J0IHsgQmxlbmRNb2RlIH0gZnJvbSBcIi4uL2NvcmUvQmxlbmRNb2RlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWFuYWdlZFdlYkdMUmVuZGVyaW5nQ29udGV4dCB7XHJcbiAgcHVibGljIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgcHVibGljIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XHJcbiAgcHJpdmF0ZSByZXN0b3JhYmxlcyA9IG5ldyBBcnJheTxSZXN0b3JhYmxlPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgY2FudmFzT3JDb250ZXh0OiBIVE1MQ2FudmFzRWxlbWVudCB8IFdlYkdMUmVuZGVyaW5nQ29udGV4dCxcclxuICAgIGNvbnRleHRDb25maWc6IGFueSA9IHsgYWxwaGE6IFwidHJ1ZVwiIH1cclxuICApIHtcclxuICAgIGlmIChjYW52YXNPckNvbnRleHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkge1xyXG4gICAgICBsZXQgY2FudmFzID0gY2FudmFzT3JDb250ZXh0O1xyXG4gICAgICB0aGlzLmdsID0gPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oXHJcbiAgICAgICAgKGNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIiwgY29udGV4dENvbmZpZykgfHxcclxuICAgICAgICAgIGNhbnZhcy5nZXRDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsIGNvbnRleHRDb25maWcpKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcclxuICAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZXZlbnQgPSA8V2ViR0xDb250ZXh0RXZlbnQ+ZTtcclxuICAgICAgICBpZiAoZSkge1xyXG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0cmVzdG9yZWRcIiwgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBuID0gdGhpcy5yZXN0b3JhYmxlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMucmVzdG9yYWJsZXNbaV0ucmVzdG9yZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdsID0gY2FudmFzT3JDb250ZXh0O1xyXG4gICAgICB0aGlzLmNhbnZhcyA9IHRoaXMuZ2wuY2FudmFzIGFzIEhUTUxDYW52YXNFbGVtZW50O1xyXG4gICAgfVxyXG4gIH1cclxuICBhZGRSZXN0b3JhYmxlKHJlc3RvcmFibGU6IFJlc3RvcmFibGUpIHtcclxuICAgIHRoaXMucmVzdG9yYWJsZXMucHVzaChyZXN0b3JhYmxlKTtcclxuICB9XHJcbiAgcmVtb3ZlUmVzdG9yYWJsZShyZXN0b3JhYmxlOiBSZXN0b3JhYmxlKSB7XHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLnJlc3RvcmFibGVzLmluZGV4T2YocmVzdG9yYWJsZSk7XHJcbiAgICBpZiAoaW5kZXggPiAtMSkgdGhpcy5yZXN0b3JhYmxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgY2xhc3MgV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIge1xyXG4gIHN0YXRpYyBaRVJPID0gMDtcclxuICBzdGF0aWMgT05FID0gMTtcclxuICBzdGF0aWMgU1JDX0NPTE9SID0gMHgwMzAwO1xyXG4gIHN0YXRpYyBPTkVfTUlOVVNfU1JDX0NPTE9SID0gMHgwMzAxO1xyXG4gIHN0YXRpYyBTUkNfQUxQSEEgPSAweDAzMDI7XHJcbiAgc3RhdGljIE9ORV9NSU5VU19TUkNfQUxQSEEgPSAweDAzMDM7XHJcbiAgc3RhdGljIERTVF9BTFBIQSA9IDB4MDMwNDtcclxuICBzdGF0aWMgT05FX01JTlVTX0RTVF9BTFBIQSA9IDB4MDMwNTtcclxuICBzdGF0aWMgRFNUX0NPTE9SID0gMHgwMzA2O1xyXG4gIHN0YXRpYyBnZXREZXN0R0xCbGVuZE1vZGUoYmxlbmRNb2RlOiBCbGVuZE1vZGUpIHtcclxuICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7XHJcbiAgICAgIGNhc2UgQmxlbmRNb2RlLk5vcm1hbDpcclxuICAgICAgICByZXR1cm4gV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuT05FX01JTlVTX1NSQ19BTFBIQTtcclxuICAgICAgY2FzZSBCbGVuZE1vZGUuQWRkaXRpdmU6XHJcbiAgICAgICAgcmV0dXJuIFdlYkdMQmxlbmRNb2RlQ29udmVydGVyLk9ORTtcclxuICAgICAgY2FzZSBCbGVuZE1vZGUuTXVsdGlwbHk6XHJcbiAgICAgICAgcmV0dXJuIFdlYkdMQmxlbmRNb2RlQ29udmVydGVyLk9ORV9NSU5VU19TUkNfQUxQSEE7XHJcbiAgICAgIGNhc2UgQmxlbmRNb2RlLlNjcmVlbjpcclxuICAgICAgICByZXR1cm4gV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuT05FX01JTlVTX1NSQ19BTFBIQTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGJsZW5kIG1vZGU6IFwiICsgYmxlbmRNb2RlKTtcclxuICAgIH1cclxuICB9XHJcbiAgc3RhdGljIGdldFNvdXJjZUdMQmxlbmRNb2RlKFxyXG4gICAgYmxlbmRNb2RlOiBCbGVuZE1vZGUsXHJcbiAgICBwcmVtdWx0aXBsaWVkQWxwaGE6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgc3dpdGNoIChibGVuZE1vZGUpIHtcclxuICAgICAgY2FzZSBCbGVuZE1vZGUuTm9ybWFsOlxyXG4gICAgICAgIHJldHVybiBwcmVtdWx0aXBsaWVkQWxwaGFcclxuICAgICAgICAgID8gV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuT05FXHJcbiAgICAgICAgICA6IFdlYkdMQmxlbmRNb2RlQ29udmVydGVyLlNSQ19BTFBIQTtcclxuICAgICAgY2FzZSBCbGVuZE1vZGUuQWRkaXRpdmU6XHJcbiAgICAgICAgcmV0dXJuIHByZW11bHRpcGxpZWRBbHBoYVxyXG4gICAgICAgICAgPyBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5PTkVcclxuICAgICAgICAgIDogV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuU1JDX0FMUEhBO1xyXG4gICAgICBjYXNlIEJsZW5kTW9kZS5NdWx0aXBseTpcclxuICAgICAgICByZXR1cm4gV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuRFNUX0NPTE9SO1xyXG4gICAgICBjYXNlIEJsZW5kTW9kZS5TY3JlZW46XHJcbiAgICAgICAgcmV0dXJuIFdlYkdMQmxlbmRNb2RlQ29udmVydGVyLk9ORTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGJsZW5kIG1vZGU6IFwiICsgYmxlbmRNb2RlKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19