UNPKG

ngx-spine

Version:

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

174 lines 16.8 kB
/** * @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"; export class ManagedWebGLRenderingContext { /** * @param {?} canvasOrContext * @param {?=} contextConfig */ constructor(canvasOrContext, contextConfig = { alpha: "true" }) { this.restorables = new Array(); if (canvasOrContext instanceof HTMLCanvasElement) { /** @type {?} */ let canvas = canvasOrContext; this.gl = (/** @type {?} */ (((canvas.getContext("webgl", contextConfig) || canvas.getContext("experimental-webgl", contextConfig))))); this.canvas = canvas; canvas.addEventListener("webglcontextlost", (/** * @param {?} e * @return {?} */ (e) => { /** @type {?} */ let event = (/** @type {?} */ (e)); if (e) { e.preventDefault(); } })); canvas.addEventListener("webglcontextrestored", (/** * @param {?} e * @return {?} */ (e) => { for (let 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 {?} */ addRestorable(restorable) { this.restorables.push(restorable); } /** * @param {?} restorable * @return {?} */ removeRestorable(restorable) { /** @type {?} */ let index = this.restorables.indexOf(restorable); if (index > -1) this.restorables.splice(index, 1); } } if (false) { /** @type {?} */ ManagedWebGLRenderingContext.prototype.canvas; /** @type {?} */ ManagedWebGLRenderingContext.prototype.gl; /** * @type {?} * @private */ ManagedWebGLRenderingContext.prototype.restorables; } export class WebGLBlendModeConverter { /** * @param {?} blendMode * @return {?} */ static getDestGLBlendMode(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 {?} */ static getSourceGLBlendMode(blendMode, 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; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViR0wuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc3BpbmUvIiwic291cmNlcyI6WyJsaWIvc3BpbmUtdHMvd2ViZ2wvV2ViR0wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE1BQU0sT0FBTyw0QkFBNEI7Ozs7O0lBSXZDLFlBQ0UsZUFBMEQsRUFDMUQsZ0JBQXFCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtRQUhoQyxnQkFBVyxHQUFHLElBQUksS0FBSyxFQUFjLENBQUM7UUFLNUMsSUFBSSxlQUFlLFlBQVksaUJBQWlCLEVBQUU7O2dCQUM1QyxNQUFNLEdBQUcsZUFBZTtZQUM1QixJQUFJLENBQUMsRUFBRSxHQUFHLG1CQUF1QixDQUMvQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUMxRCxFQUFBLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCOzs7O1lBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTs7b0JBQ2pELEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxFQUFBO2dCQUNoQyxJQUFJLENBQUMsRUFBRTtvQkFDTCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ3BCO1lBQ0gsQ0FBQyxFQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCOzs7O1lBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDekQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVB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Q3BDLGtDQUEwQjs7SUFDMUIsNENBQW9DOztJQUNwQyxrQ0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XHJcbiAqIExhc3QgdXBkYXRlZCBNYXkgMSwgMjAxOS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxOSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXHJcbiAqXHJcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xyXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxyXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxyXG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcclxuICpcclxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXHJcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcclxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxyXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcclxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXHJcbiAqXHJcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1NcclxuICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFU1xyXG4gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTlxyXG4gKiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCxcclxuICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyxcclxuICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBCVVNJTkVTU1xyXG4gKiBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXHJcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xyXG4gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsXHJcbiAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbmltcG9ydCB7IFJlc3RvcmFibGUgfSBmcm9tIFwiLi4vY29yZS9VdGlsc1wiO1xyXG5pbXBvcnQgeyBCbGVuZE1vZGUgfSBmcm9tIFwiLi4vY29yZS9CbGVuZE1vZGVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYW5hZ2VkV2ViR0xSZW5kZXJpbmdDb250ZXh0IHtcclxuICBwdWJsaWMgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICBwdWJsaWMgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dDtcclxuICBwcml2YXRlIHJlc3RvcmFibGVzID0gbmV3IEFycmF5PFJlc3RvcmFibGU+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjYW52YXNPckNvbnRleHQ6IEhUTUxDYW52YXNFbGVtZW50IHwgV2ViR0xSZW5kZXJpbmdDb250ZXh0LFxyXG4gICAgY29udGV4dENvbmZpZzogYW55ID0geyBhbHBoYTogXCJ0cnVlXCIgfVxyXG4gICkge1xyXG4gICAgaWYgKGNhbnZhc09yQ29udGV4dCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7XHJcbiAgICAgIGxldCBjYW52YXMgPSBjYW52YXNPckNvbnRleHQ7XHJcbiAgICAgIHRoaXMuZ2wgPSA8V2ViR0xSZW5kZXJpbmdDb250ZXh0PihcclxuICAgICAgICAoY2FudmFzLmdldENvbnRleHQoXCJ3ZWJnbFwiLCBjb250ZXh0Q29uZmlnKSB8fFxyXG4gICAgICAgICAgY2FudmFzLmdldENvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIiwgY29udGV4dENvbmZpZykpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xyXG4gICAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dGxvc3RcIiwgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBldmVudCA9IDxXZWJHTENvbnRleHRFdmVudD5lO1xyXG4gICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRyZXN0b3JlZFwiLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG4gPSB0aGlzLnJlc3RvcmFibGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5yZXN0b3JhYmxlc1tpXS5yZXN0b3JlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2wgPSBjYW52YXNPckNvbnRleHQ7XHJcbiAgICAgIHRoaXMuY2FudmFzID0gdGhpcy5nbC5jYW52YXMgYXMgSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFkZFJlc3RvcmFibGUocmVzdG9yYWJsZTogUmVzdG9yYWJsZSkge1xyXG4gICAgdGhpcy5yZXN0b3JhYmxlcy5wdXNoKHJlc3RvcmFibGUpO1xyXG4gIH1cclxuICByZW1vdmVSZXN0b3JhYmxlKHJlc3RvcmFibGU6IFJlc3RvcmFibGUpIHtcclxuICAgIGxldCBpbmRleCA9IHRoaXMucmVzdG9yYWJsZXMuaW5kZXhPZihyZXN0b3JhYmxlKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB0aGlzLnJlc3RvcmFibGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlciB7XHJcbiAgc3RhdGljIFpFUk8gPSAwO1xyXG4gIHN0YXRpYyBPTkUgPSAxO1xyXG4gIHN0YXRpYyBTUkNfQ09MT1IgPSAweDAzMDA7XHJcbiAgc3RhdGljIE9ORV9NSU5VU19TUkNfQ09MT1IgPSAweDAzMDE7XHJcbiAgc3RhdGljIFNSQ19BTFBIQSA9IDB4MDMwMjtcclxuICBzdGF0aWMgT05FX01JTlVTX1NSQ19BTFBIQSA9IDB4MDMwMztcclxuICBzdGF0aWMgRFNUX0FMUEhBID0gMHgwMzA0O1xyXG4gIHN0YXRpYyBPTkVfTUlOVVNfRFNUX0FMUEhBID0gMHgwMzA1O1xyXG4gIHN0YXRpYyBEU1RfQ09MT1IgPSAweDAzMDY7XHJcbiAgc3RhdGljIGdldERlc3RHTEJsZW5kTW9kZShibGVuZE1vZGU6IEJsZW5kTW9kZSkge1xyXG4gICAgc3dpdGNoIChibGVuZE1vZGUpIHtcclxuICAgICAgY2FzZSBCbGVuZE1vZGUuTm9ybWFsOlxyXG4gICAgICAgIHJldHVybiBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5PTkVfTUlOVVNfU1JDX0FMUEhBO1xyXG4gICAgICBjYXNlIEJsZW5kTW9kZS5BZGRpdGl2ZTpcclxuICAgICAgICByZXR1cm4gV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuT05FO1xyXG4gICAgICBjYXNlIEJsZW5kTW9kZS5NdWx0aXBseTpcclxuICAgICAgICByZXR1cm4gV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuT05FX01JTlVTX1NSQ19BTFBIQTtcclxuICAgICAgY2FzZSBCbGVuZE1vZGUuU2NyZWVuOlxyXG4gICAgICAgIHJldHVybiBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5PTkVfTUlOVVNfU1JDX0FMUEhBO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gYmxlbmQgbW9kZTogXCIgKyBibGVuZE1vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgZ2V0U291cmNlR0xCbGVuZE1vZGUoXHJcbiAgICBibGVuZE1vZGU6IEJsZW5kTW9kZSxcclxuICAgIHByZW11bHRpcGxpZWRBbHBoYTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICBzd2l0Y2ggKGJsZW5kTW9kZSkge1xyXG4gICAgICBjYXNlIEJsZW5kTW9kZS5Ob3JtYWw6XHJcbiAgICAgICAgcmV0dXJuIHByZW11bHRpcGxpZWRBbHBoYVxyXG4gICAgICAgICAgPyBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5PTkVcclxuICAgICAgICAgIDogV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuU1JDX0FMUEhBO1xyXG4gICAgICBjYXNlIEJsZW5kTW9kZS5BZGRpdGl2ZTpcclxuICAgICAgICByZXR1cm4gcHJlbXVsdGlwbGllZEFscGhhXHJcbiAgICAgICAgICA/IFdlYkdMQmxlbmRNb2RlQ29udmVydGVyLk9ORVxyXG4gICAgICAgICAgOiBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5TUkNfQUxQSEE7XHJcbiAgICAgIGNhc2UgQmxlbmRNb2RlLk11bHRpcGx5OlxyXG4gICAgICAgIHJldHVybiBXZWJHTEJsZW5kTW9kZUNvbnZlcnRlci5EU1RfQ09MT1I7XHJcbiAgICAgIGNhc2UgQmxlbmRNb2RlLlNjcmVlbjpcclxuICAgICAgICByZXR1cm4gV2ViR0xCbGVuZE1vZGVDb252ZXJ0ZXIuT05FO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gYmxlbmQgbW9kZTogXCIgKyBibGVuZE1vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=