UNPKG

ngx-spine

Version:

[![Build Status](https://travis-ci.org/PoiScript/ngx-spine.svg?branch=master)](https://travis-ci.org/PoiScript/ngx-spine)

368 lines 32.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /****************************************************************************** * 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 { Utils, Color } from "../Utils"; import { Attachment } from "./Attachment"; var RegionAttachment = /** @class */ (function (_super) { tslib_1.__extends(RegionAttachment, _super); function RegionAttachment(name) { var _this = _super.call(this, name) || this; _this.x = 0; _this.y = 0; _this.scaleX = 1; _this.scaleY = 1; _this.rotation = 0; _this.width = 0; _this.height = 0; _this.color = new Color(1, 1, 1, 1); _this.offset = Utils.newFloatArray(8); _this.uvs = Utils.newFloatArray(8); _this.tempColor = new Color(1, 1, 1, 1); return _this; } /** * @return {?} */ RegionAttachment.prototype.updateOffset = /** * @return {?} */ function () { /** @type {?} */ var regionScaleX = (this.width / this.region.originalWidth) * this.scaleX; /** @type {?} */ var regionScaleY = (this.height / this.region.originalHeight) * this.scaleY; /** @type {?} */ var localX = (-this.width / 2) * this.scaleX + this.region.offsetX * regionScaleX; /** @type {?} */ var localY = (-this.height / 2) * this.scaleY + this.region.offsetY * regionScaleY; /** @type {?} */ var localX2 = localX + this.region.width * regionScaleX; /** @type {?} */ var localY2 = localY + this.region.height * regionScaleY; /** @type {?} */ var radians = (this.rotation * Math.PI) / 180; /** @type {?} */ var cos = Math.cos(radians); /** @type {?} */ var sin = Math.sin(radians); /** @type {?} */ var localXCos = localX * cos + this.x; /** @type {?} */ var localXSin = localX * sin; /** @type {?} */ var localYCos = localY * cos + this.y; /** @type {?} */ var localYSin = localY * sin; /** @type {?} */ var localX2Cos = localX2 * cos + this.x; /** @type {?} */ var localX2Sin = localX2 * sin; /** @type {?} */ var localY2Cos = localY2 * cos + this.y; /** @type {?} */ var localY2Sin = localY2 * sin; /** @type {?} */ var offset = this.offset; offset[RegionAttachment.OX1] = localXCos - localYSin; offset[RegionAttachment.OY1] = localYCos + localXSin; offset[RegionAttachment.OX2] = localXCos - localY2Sin; offset[RegionAttachment.OY2] = localY2Cos + localXSin; offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; offset[RegionAttachment.OX4] = localX2Cos - localYSin; offset[RegionAttachment.OY4] = localYCos + localX2Sin; }; /** * @param {?} region * @return {?} */ RegionAttachment.prototype.setRegion = /** * @param {?} region * @return {?} */ function (region) { this.region = region; /** @type {?} */ var uvs = this.uvs; if (region.rotate) { uvs[2] = region.u; uvs[3] = region.v2; uvs[4] = region.u; uvs[5] = region.v; uvs[6] = region.u2; uvs[7] = region.v; uvs[0] = region.u2; uvs[1] = region.v2; } else { uvs[0] = region.u; uvs[1] = region.v2; uvs[2] = region.u; uvs[3] = region.v; uvs[4] = region.u2; uvs[5] = region.v; uvs[6] = region.u2; uvs[7] = region.v2; } }; /** * @param {?} bone * @param {?} worldVertices * @param {?} offset * @param {?} stride * @return {?} */ RegionAttachment.prototype.computeWorldVertices = /** * @param {?} bone * @param {?} worldVertices * @param {?} offset * @param {?} stride * @return {?} */ function (bone, worldVertices, offset, stride) { /** @type {?} */ var vertexOffset = this.offset; /** @type {?} */ var x = bone.worldX; /** @type {?} */ var y = bone.worldY; /** @type {?} */ var a = bone.a; /** @type {?} */ var b = bone.b; /** @type {?} */ var c = bone.c; /** @type {?} */ var d = bone.d; /** @type {?} */ var offsetX = 0; /** @type {?} */ var offsetY = 0; offsetX = vertexOffset[RegionAttachment.OX1]; offsetY = vertexOffset[RegionAttachment.OY1]; worldVertices[offset] = offsetX * a + offsetY * b + x; // br worldVertices[offset + 1] = offsetX * c + offsetY * d + y; offset += stride; offsetX = vertexOffset[RegionAttachment.OX2]; offsetY = vertexOffset[RegionAttachment.OY2]; worldVertices[offset] = offsetX * a + offsetY * b + x; // bl worldVertices[offset + 1] = offsetX * c + offsetY * d + y; offset += stride; offsetX = vertexOffset[RegionAttachment.OX3]; offsetY = vertexOffset[RegionAttachment.OY3]; worldVertices[offset] = offsetX * a + offsetY * b + x; // ul worldVertices[offset + 1] = offsetX * c + offsetY * d + y; offset += stride; offsetX = vertexOffset[RegionAttachment.OX4]; offsetY = vertexOffset[RegionAttachment.OY4]; worldVertices[offset] = offsetX * a + offsetY * b + x; // ur worldVertices[offset + 1] = offsetX * c + offsetY * d + y; }; /** * @return {?} */ RegionAttachment.prototype.copy = /** * @return {?} */ function () { /** @type {?} */ var copy = new RegionAttachment(name); copy.region = this.region; copy.rendererObject = this.rendererObject; copy.path = this.path; copy.x = this.x; copy.y = this.y; copy.scaleX = this.scaleX; copy.scaleY = this.scaleY; copy.rotation = this.rotation; copy.width = this.width; copy.height = this.height; Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); copy.color.setFromColor(this.color); return copy; }; RegionAttachment.OX1 = 0; RegionAttachment.OY1 = 1; RegionAttachment.OX2 = 2; RegionAttachment.OY2 = 3; RegionAttachment.OX3 = 4; RegionAttachment.OY3 = 5; RegionAttachment.OX4 = 6; RegionAttachment.OY4 = 7; RegionAttachment.X1 = 0; RegionAttachment.Y1 = 1; RegionAttachment.C1R = 2; RegionAttachment.C1G = 3; RegionAttachment.C1B = 4; RegionAttachment.C1A = 5; RegionAttachment.U1 = 6; RegionAttachment.V1 = 7; RegionAttachment.X2 = 8; RegionAttachment.Y2 = 9; RegionAttachment.C2R = 10; RegionAttachment.C2G = 11; RegionAttachment.C2B = 12; RegionAttachment.C2A = 13; RegionAttachment.U2 = 14; RegionAttachment.V2 = 15; RegionAttachment.X3 = 16; RegionAttachment.Y3 = 17; RegionAttachment.C3R = 18; RegionAttachment.C3G = 19; RegionAttachment.C3B = 20; RegionAttachment.C3A = 21; RegionAttachment.U3 = 22; RegionAttachment.V3 = 23; RegionAttachment.X4 = 24; RegionAttachment.Y4 = 25; RegionAttachment.C4R = 26; RegionAttachment.C4G = 27; RegionAttachment.C4B = 28; RegionAttachment.C4A = 29; RegionAttachment.U4 = 30; RegionAttachment.V4 = 31; return RegionAttachment; }(Attachment)); export { RegionAttachment }; if (false) { /** @type {?} */ RegionAttachment.OX1; /** @type {?} */ RegionAttachment.OY1; /** @type {?} */ RegionAttachment.OX2; /** @type {?} */ RegionAttachment.OY2; /** @type {?} */ RegionAttachment.OX3; /** @type {?} */ RegionAttachment.OY3; /** @type {?} */ RegionAttachment.OX4; /** @type {?} */ RegionAttachment.OY4; /** @type {?} */ RegionAttachment.X1; /** @type {?} */ RegionAttachment.Y1; /** @type {?} */ RegionAttachment.C1R; /** @type {?} */ RegionAttachment.C1G; /** @type {?} */ RegionAttachment.C1B; /** @type {?} */ RegionAttachment.C1A; /** @type {?} */ RegionAttachment.U1; /** @type {?} */ RegionAttachment.V1; /** @type {?} */ RegionAttachment.X2; /** @type {?} */ RegionAttachment.Y2; /** @type {?} */ RegionAttachment.C2R; /** @type {?} */ RegionAttachment.C2G; /** @type {?} */ RegionAttachment.C2B; /** @type {?} */ RegionAttachment.C2A; /** @type {?} */ RegionAttachment.U2; /** @type {?} */ RegionAttachment.V2; /** @type {?} */ RegionAttachment.X3; /** @type {?} */ RegionAttachment.Y3; /** @type {?} */ RegionAttachment.C3R; /** @type {?} */ RegionAttachment.C3G; /** @type {?} */ RegionAttachment.C3B; /** @type {?} */ RegionAttachment.C3A; /** @type {?} */ RegionAttachment.U3; /** @type {?} */ RegionAttachment.V3; /** @type {?} */ RegionAttachment.X4; /** @type {?} */ RegionAttachment.Y4; /** @type {?} */ RegionAttachment.C4R; /** @type {?} */ RegionAttachment.C4G; /** @type {?} */ RegionAttachment.C4B; /** @type {?} */ RegionAttachment.C4A; /** @type {?} */ RegionAttachment.U4; /** @type {?} */ RegionAttachment.V4; /** @type {?} */ RegionAttachment.prototype.x; /** @type {?} */ RegionAttachment.prototype.y; /** @type {?} */ RegionAttachment.prototype.scaleX; /** @type {?} */ RegionAttachment.prototype.scaleY; /** @type {?} */ RegionAttachment.prototype.rotation; /** @type {?} */ RegionAttachment.prototype.width; /** @type {?} */ RegionAttachment.prototype.height; /** @type {?} */ RegionAttachment.prototype.color; /** @type {?} */ RegionAttachment.prototype.path; /** @type {?} */ RegionAttachment.prototype.rendererObject; /** @type {?} */ RegionAttachment.prototype.region; /** @type {?} */ RegionAttachment.prototype.offset; /** @type {?} */ RegionAttachment.prototype.uvs; /** @type {?} */ RegionAttachment.prototype.tempColor; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaW9uQXR0YWNobWVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zcGluZS8iLCJzb3VyY2VzIjpbImxpYi9zcGluZS10cy9jb3JlL2F0dGFjaG1lbnRzL1JlZ2lvbkF0dGFjaG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLE9BQU8sRUFBRSxLQUFLLEVBQWEsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJMUM7SUFBc0MsNENBQVU7SUFnRTlDLDBCQUFZLElBQVk7UUFBeEIsWUFDRSxrQkFBTSxJQUFJLENBQUMsU0FDWjtRQXBCRCxPQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ04sT0FBQyxHQUFHLENBQUMsQ0FBQztRQUNOLFlBQU0sR0FBRyxDQUFDLENBQUM7UUFDWCxZQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsY0FBUSxHQUFHLENBQUMsQ0FBQztRQUNiLFdBQUssR0FBRyxDQUFDLENBQUM7UUFDVixZQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsV0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBTTlCLFlBQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLFNBQUcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdCLGVBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFJbEMsQ0FBQzs7OztJQUVELHVDQUFZOzs7SUFBWjs7WUFDTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFD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Z0I7O0lBQ2hCLHFCQUFnQjs7SUFDaEIscUJBQWdCOztJQUNoQixxQkFBZ0I7O0lBQ2hCLG9CQUFlOztJQUNmLG9CQUFlOztJQUVmLG9CQUFlOztJQUNmLG9CQUFlOztJQUNmLHFCQUFnQjs7SUFDaEIscUJBQWdCOztJQUNoQixxQkFBZ0I7O0lBQ2hCLHFCQUFnQjs7SUFDaEIsb0JBQWU7O0lBQ2Ysb0JBQWU7O0lBRWYsNkJBQU07O0lBQ04sNkJBQU07O0lBQ04sa0NBQVc7O0lBQ1gsa0NBQVc7O0lBQ1gsb0NBQWE7O0lBQ2IsaUNBQVU7O0lBQ1Ysa0NBQVc7O0lBQ1gsaUNBQThCOztJQUU5QixnQ0FBYTs7SUFDYiwwQ0FBb0I7O0lBQ3BCLGtDQUFzQjs7SUFFdEIsa0NBQWdDOztJQUNoQywrQkFBNkI7O0lBRTdCLHFDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcclxuICogTGFzdCB1cGRhdGVkIE1heSAxLCAyMDE5LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE5LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcclxuICpcclxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXHJcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXHJcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XHJcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxyXG4gKlxyXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcclxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxyXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXHJcbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxyXG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cclxuICpcclxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTU1xyXG4gKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTXHJcbiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOXHJcbiAqIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULFxyXG4gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLFxyXG4gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsIEJVU0lORVNTXHJcbiAqIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcclxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HXHJcbiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSxcclxuICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cclxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuaW1wb3J0IHsgVXRpbHMsIEFycmF5TGlrZSwgQ29sb3IgfSBmcm9tIFwiLi4vVXRpbHNcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudCB9IGZyb20gXCIuL0F0dGFjaG1lbnRcIjtcclxuaW1wb3J0IHsgVGV4dHVyZVJlZ2lvbiB9IGZyb20gXCIuLi9UZXh0dXJlXCI7XHJcbmltcG9ydCB7IEJvbmUgfSBmcm9tIFwiLi4vQm9uZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlZ2lvbkF0dGFjaG1lbnQgZXh0ZW5kcyBBdHRhY2htZW50IHtcclxuICBzdGF0aWMgT1gxID0gMDtcclxuICBzdGF0aWMgT1kxID0gMTtcclxuICBzdGF0aWMgT1gyID0gMjtcclxuICBzdGF0aWMgT1kyID0gMztcclxuICBzdGF0aWMgT1gzID0gNDtcclxuICBzdGF0aWMgT1kzID0gNTtcclxuICBzdGF0aWMgT1g0ID0gNjtcclxuICBzdGF0aWMgT1k0ID0gNztcclxuXHJcbiAgc3RhdGljIFgxID0gMDtcclxuICBzdGF0aWMgWTEgPSAxO1xyXG4gIHN0YXRpYyBDMVIgPSAyO1xyXG4gIHN0YXRpYyBDMUcgPSAzO1xyXG4gIHN0YXRpYyBDMUIgPSA0O1xyXG4gIHN0YXRpYyBDMUEgPSA1O1xyXG4gIHN0YXRpYyBVMSA9IDY7XHJcbiAgc3RhdGljIFYxID0gNztcclxuXHJcbiAgc3RhdGljIFgyID0gODtcclxuICBzdGF0aWMgWTIgPSA5O1xyXG4gIHN0YXRpYyBDMlIgPSAxMDtcclxuICBzdGF0aWMgQzJHID0gMTE7XHJcbiAgc3RhdGljIEMyQiA9IDEyO1xyXG4gIHN0YXRpYyBDMkEgPSAxMztcclxuICBzdGF0aWMgVTIgPSAxNDtcclxuICBzdGF0aWMgVjIgPSAxNTtcclxuXHJcbiAgc3RhdGljIFgzID0gMTY7XHJcbiAgc3RhdGljIFkzID0gMTc7XHJcbiAgc3RhdGljIEMzUiA9IDE4O1xyXG4gIHN0YXRpYyBDM0cgPSAxOTtcclxuICBzdGF0aWMgQzNCID0gMjA7XHJcbiAgc3RhdGljIEMzQSA9IDIxO1xyXG4gIHN0YXRpYyBVMyA9IDIyO1xyXG4gIHN0YXRpYyBWMyA9IDIzO1xyXG5cclxuICBzdGF0aWMgWDQgPSAyNDtcclxuICBzdGF0aWMgWTQgPSAyNTtcclxuICBzdGF0aWMgQzRSID0gMjY7XHJcbiAgc3RhdGljIEM0RyA9IDI3O1xyXG4gIHN0YXRpYyBDNEIgPSAyODtcclxuICBzdGF0aWMgQzRBID0gMjk7XHJcbiAgc3RhdGljIFU0ID0gMzA7XHJcbiAgc3RhdGljIFY0ID0gMzE7XHJcblxyXG4gIHggPSAwO1xyXG4gIHkgPSAwO1xyXG4gIHNjYWxlWCA9IDE7XHJcbiAgc2NhbGVZID0gMTtcclxuICByb3RhdGlvbiA9IDA7XHJcbiAgd2lkdGggPSAwO1xyXG4gIGhlaWdodCA9IDA7XHJcbiAgY29sb3IgPSBuZXcgQ29sb3IoMSwgMSwgMSwgMSk7XHJcblxyXG4gIHBhdGg6IHN0cmluZztcclxuICByZW5kZXJlck9iamVjdDogYW55O1xyXG4gIHJlZ2lvbjogVGV4dHVyZVJlZ2lvbjtcclxuXHJcbiAgb2Zmc2V0ID0gVXRpbHMubmV3RmxvYXRBcnJheSg4KTtcclxuICB1dnMgPSBVdGlscy5uZXdGbG9hdEFycmF5KDgpO1xyXG5cclxuICB0ZW1wQ29sb3IgPSBuZXcgQ29sb3IoMSwgMSwgMSwgMSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xyXG4gICAgc3VwZXIobmFtZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVPZmZzZXQoKTogdm9pZCB7XHJcbiAgICBsZXQgcmVnaW9uU2NhbGVYID0gKHRoaXMud2lkdGggLyB0aGlzLnJlZ2lvbi5vcmlnaW5hbFdpZHRoKSAqIHRoaXMuc2NhbGVYO1xyXG4gICAgbGV0IHJlZ2lvblNjYWxlWSA9ICh0aGlzLmhlaWdodCAvIHRoaXMucmVnaW9uLm9yaWdpbmFsSGVpZ2h0KSAqIHRoaXMuc2NhbGVZO1xyXG4gICAgbGV0IGxvY2FsWCA9XHJcbiAgICAgICgtdGhpcy53aWR0aCAvIDIpICogdGhpcy5zY2FsZVggKyB0aGlzLnJlZ2lvbi5vZmZzZXRYICogcmVnaW9uU2NhbGVYO1xyXG4gICAgbGV0IGxvY2FsWSA9XHJcbiAgICAgICgtdGhpcy5oZWlnaHQgLyAyKSAqIHRoaXMuc2NhbGVZICsgdGhpcy5yZWdpb24ub2Zmc2V0WSAqIHJlZ2lvblNjYWxlWTtcclxuICAgIGxldCBsb2NhbFgyID0gbG9jYWxYICsgdGhpcy5yZWdpb24ud2lkdGggKiByZWdpb25TY2FsZVg7XHJcbiAgICBsZXQgbG9jYWxZMiA9IGxvY2FsWSArIHRoaXMucmVnaW9uLmhlaWdodCAqIHJlZ2lvblNjYWxlWTtcclxuICAgIGxldCByYWRpYW5zID0gKHRoaXMucm90YXRpb24gKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgIGxldCBjb3MgPSBNYXRoLmNvcyhyYWRpYW5zKTtcclxuICAgIGxldCBzaW4gPSBNYXRoLnNpbihyYWRpYW5zKTtcclxuICAgIGxldCBsb2NhbFhDb3MgPSBsb2NhbFggKiBjb3MgKyB0aGlzLng7XHJcbiAgICBsZXQgbG9jYWxYU2luID0gbG9jYWxYICogc2luO1xyXG4gICAgbGV0IGxvY2FsWUNvcyA9IGxvY2FsWSAqIGNvcyArIHRoaXMueTtcclxuICAgIGxldCBsb2NhbFlTaW4gPSBsb2NhbFkgKiBzaW47XHJcbiAgICBsZXQgbG9jYWxYMkNvcyA9IGxvY2FsWDIgKiBjb3MgKyB0aGlzLng7XHJcbiAgICBsZXQgbG9jYWxYMlNpbiA9IGxvY2FsWDIgKiBzaW47XHJcbiAgICBsZXQgbG9jYWxZMkNvcyA9IGxvY2FsWTIgKiBjb3MgKyB0aGlzLnk7XHJcbiAgICBsZXQgbG9jYWxZMlNpbiA9IGxvY2FsWTIgKiBzaW47XHJcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XHJcbiAgICBvZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWDFdID0gbG9jYWxYQ29zIC0gbG9jYWxZU2luO1xyXG4gICAgb2Zmc2V0W1JlZ2lvbkF0dGFjaG1lbnQuT1kxXSA9IGxvY2FsWUNvcyArIGxvY2FsWFNpbjtcclxuICAgIG9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9YMl0gPSBsb2NhbFhDb3MgLSBsb2NhbFkyU2luO1xyXG4gICAgb2Zmc2V0W1JlZ2lvbkF0dGFjaG1lbnQuT1kyXSA9IGxvY2FsWTJDb3MgKyBsb2NhbFhTaW47XHJcbiAgICBvZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWDNdID0gbG9jYWxYMkNvcyAtIGxvY2FsWTJTaW47XHJcbiAgICBvZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWTNdID0gbG9jYWxZMkNvcyArIGxvY2FsWDJTaW47XHJcbiAgICBvZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWDRdID0gbG9jYWxYMkNvcyAtIGxvY2FsWVNpbjtcclxuICAgIG9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9ZNF0gPSBsb2NhbFlDb3MgKyBsb2NhbFgyU2luO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVnaW9uKHJlZ2lvbjogVGV4dHVyZVJlZ2lvbik6IHZvaWQge1xyXG4gICAgdGhpcy5yZWdpb24gPSByZWdpb247XHJcbiAgICBsZXQgdXZzID0gdGhpcy51dnM7XHJcbiAgICBpZiAocmVnaW9uLnJvdGF0ZSkge1xyXG4gICAgICB1dnNbMl0gPSByZWdpb24udTtcclxuICAgICAgdXZzWzNdID0gcmVnaW9uLnYyO1xyXG4gICAgICB1dnNbNF0gPSByZWdpb24udTtcclxuICAgICAgdXZzWzVdID0gcmVnaW9uLnY7XHJcbiAgICAgIHV2c1s2XSA9IHJlZ2lvbi51MjtcclxuICAgICAgdXZzWzddID0gcmVnaW9uLnY7XHJcbiAgICAgIHV2c1swXSA9IHJlZ2lvbi51MjtcclxuICAgICAgdXZzWzFdID0gcmVnaW9uLnYyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXZzWzBdID0gcmVnaW9uLnU7XHJcbiAgICAgIHV2c1sxXSA9IHJlZ2lvbi52MjtcclxuICAgICAgdXZzWzJdID0gcmVnaW9uLnU7XHJcbiAgICAgIHV2c1szXSA9IHJlZ2lvbi52O1xyXG4gICAgICB1dnNbNF0gPSByZWdpb24udTI7XHJcbiAgICAgIHV2c1s1XSA9IHJlZ2lvbi52O1xyXG4gICAgICB1dnNbNl0gPSByZWdpb24udTI7XHJcbiAgICAgIHV2c1s3XSA9IHJlZ2lvbi52MjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXB1dGVXb3JsZFZlcnRpY2VzKFxyXG4gICAgYm9uZTogQm9uZSxcclxuICAgIHdvcmxkVmVydGljZXM6IEFycmF5TGlrZTxudW1iZXI+LFxyXG4gICAgb2Zmc2V0OiBudW1iZXIsXHJcbiAgICBzdHJpZGU6IG51bWJlclxyXG4gICkge1xyXG4gICAgbGV0IHZlcnRleE9mZnNldCA9IHRoaXMub2Zmc2V0O1xyXG4gICAgbGV0IHggPSBib25lLndvcmxkWCxcclxuICAgICAgeSA9IGJvbmUud29ybGRZO1xyXG4gICAgbGV0IGEgPSBib25lLmEsXHJcbiAgICAgIGIgPSBib25lLmIsXHJcbiAgICAgIGMgPSBib25lLmMsXHJcbiAgICAgIGQgPSBib25lLmQ7XHJcbiAgICBsZXQgb2Zmc2V0WCA9IDAsXHJcbiAgICAgIG9mZnNldFkgPSAwO1xyXG5cclxuICAgIG9mZnNldFggPSB2ZXJ0ZXhPZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWDFdO1xyXG4gICAgb2Zmc2V0WSA9IHZlcnRleE9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9ZMV07XHJcbiAgICB3b3JsZFZlcnRpY2VzW29mZnNldF0gPSBvZmZzZXRYICogYSArIG9mZnNldFkgKiBiICsgeDsgLy8gYnJcclxuICAgIHdvcmxkVmVydGljZXNbb2Zmc2V0ICsgMV0gPSBvZmZzZXRYICogYyArIG9mZnNldFkgKiBkICsgeTtcclxuICAgIG9mZnNldCArPSBzdHJpZGU7XHJcblxyXG4gICAgb2Zmc2V0WCA9IHZlcnRleE9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9YMl07XHJcbiAgICBvZmZzZXRZID0gdmVydGV4T2Zmc2V0W1JlZ2lvbkF0dGFjaG1lbnQuT1kyXTtcclxuICAgIHdvcmxkVmVydGljZXNbb2Zmc2V0XSA9IG9mZnNldFggKiBhICsgb2Zmc2V0WSAqIGIgKyB4OyAvLyBibFxyXG4gICAgd29ybGRWZXJ0aWNlc1tvZmZzZXQgKyAxXSA9IG9mZnNldFggKiBjICsgb2Zmc2V0WSAqIGQgKyB5O1xyXG4gICAgb2Zmc2V0ICs9IHN0cmlkZTtcclxuXHJcbiAgICBvZmZzZXRYID0gdmVydGV4T2Zmc2V0W1JlZ2lvbkF0dGFjaG1lbnQuT1gzXTtcclxuICAgIG9mZnNldFkgPSB2ZXJ0ZXhPZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWTNdO1xyXG4gICAgd29ybGRWZXJ0aWNlc1tvZmZzZXRdID0gb2Zmc2V0WCAqIGEgKyBvZmZzZXRZICogYiArIHg7IC8vIHVsXHJcbiAgICB3b3JsZFZlcnRpY2VzW29mZnNldCArIDFdID0gb2Zmc2V0WCAqIGMgKyBvZmZzZXRZICogZCArIHk7XHJcbiAgICBvZmZzZXQgKz0gc3RyaWRlO1xyXG5cclxuICAgIG9mZnNldFggPSB2ZXJ0ZXhPZmZzZXRbUmVnaW9uQXR0YWNobWVudC5PWDRdO1xyXG4gICAgb2Zmc2V0WSA9IHZlcnRleE9mZnNldFtSZWdpb25BdHRhY2htZW50Lk9ZNF07XHJcbiAgICB3b3JsZFZlcnRpY2VzW29mZnNldF0gPSBvZmZzZXRYICogYSArIG9mZnNldFkgKiBiICsgeDsgLy8gdXJcclxuICAgIHdvcmxkVmVydGljZXNbb2Zmc2V0ICsgMV0gPSBvZmZzZXRYICogYyArIG9mZnNldFkgKiBkICsgeTtcclxuICB9XHJcblxyXG4gIGNvcHkoKTogQXR0YWNobWVudCB7XHJcbiAgICBsZXQgY29weSA9IG5ldyBSZWdpb25BdHRhY2htZW50KG5hbWUpO1xyXG4gICAgY29weS5yZWdpb24gPSB0aGlzLnJlZ2lvbjtcclxuICAgIGNvcHkucmVuZGVyZXJPYmplY3QgPSB0aGlzLnJlbmRlcmVyT2JqZWN0O1xyXG4gICAgY29weS5wYXRoID0gdGhpcy5wYXRoO1xyXG4gICAgY29weS54ID0gdGhpcy54O1xyXG4gICAgY29weS55ID0gdGhpcy55O1xyXG4gICAgY29weS5zY2FsZVggPSB0aGlzLnNjYWxlWDtcclxuICAgIGNvcHkuc2NhbGVZID0gdGhpcy5zY2FsZVk7XHJcbiAgICBjb3B5LnJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcclxuICAgIGNvcHkud2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgY29weS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgIFV0aWxzLmFycmF5Q29weSh0aGlzLnV2cywgMCwgY29weS51dnMsIDAsIDgpO1xyXG4gICAgVXRpbHMuYXJyYXlDb3B5KHRoaXMub2Zmc2V0LCAwLCBjb3B5Lm9mZnNldCwgMCwgOCk7XHJcbiAgICBjb3B5LmNvbG9yLnNldEZyb21Db2xvcih0aGlzLmNvbG9yKTtcclxuICAgIHJldHVybiBjb3B5O1xyXG4gIH1cclxufVxyXG4iXX0=