/*
	Copyright (c) Microsoft Corporation.  All rights reserved.
*/

/*
	Your use of this file is governed by the Microsoft Services Agreement http://go.microsoft.com/fwlink/?LinkId=266419.
*/

/*
* @overview es6-promise - a tiny implementation of Promises/A+.
* @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
* @license   Licensed under MIT license
*            See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE
* @version   2.3.0
*/


// Sources:
// osfweb: 16.0\14621.10000
// runtime: 16.0\14621.10000
// core: 16.0\14621.10000
// host: 16.0\14621.10000



if (typeof OSFPerformance !== "undefined") {
    OSFPerformance.hostInitializationStart = OSFPerformance.now();
}
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b)
                if (b.hasOwnProperty(p))
                    d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var OfficeExt;
(function (OfficeExt) {
    var MicrosoftAjaxFactory = (function () {
        function MicrosoftAjaxFactory() {
        }
        MicrosoftAjaxFactory.prototype.isMsAjaxLoaded = function () {
            if (typeof (Sys) !== 'undefined' && typeof (Type) !== 'undefined' &&
                Sys.StringBuilder && typeof (Sys.StringBuilder) === "function" &&
                Type.registerNamespace && typeof (Type.registerNamespace) === "function" &&
                Type.registerClass && typeof (Type.registerClass) === "function" &&
                typeof (Function._validateParams) === "function" &&
                Sys.Serialization && Sys.Serialization.JavaScriptSerializer && typeof (Sys.Serialization.JavaScriptSerializer.serialize) === "function") {
                return true;
            }
            else {
                return false;
            }
        };
        MicrosoftAjaxFactory.prototype.loadMsAjaxFull = function (callback) {
            var msAjaxCDNPath = (window.location.protocol.toLowerCase() === 'https:' ? 'https:' : 'http:') + '//ajax.aspnetcdn.com/ajax/3.5/MicrosoftAjax.js';
            OSF.OUtil.loadScript(msAjaxCDNPath, callback);
        };
        Object.defineProperty(MicrosoftAjaxFactory.prototype, "msAjaxError", {
            get: function () {
                if (this._msAjaxError == null && this.isMsAjaxLoaded()) {
                    this._msAjaxError = Error;
                }
                return this._msAjaxError;
            },
            set: function (errorClass) {
                this._msAjaxError = errorClass;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(MicrosoftAjaxFactory.prototype, "msAjaxString", {
            get: function () {
                if (this._msAjaxString == null && this.isMsAjaxLoaded()) {
                    this._msAjaxString = String;
                }
                return this._msAjaxString;
            },
            set: function (stringClass) {
                this._msAjaxString = stringClass;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(MicrosoftAjaxFactory.prototype, "msAjaxDebug", {
            get: function () {
                if (this._msAjaxDebug == null && this.isMsAjaxLoaded()) {
                    this._msAjaxDebug = Sys.Debug;
                }
                return this._msAjaxDebug;
            },
            set: function (debugClass) {
                this._msAjaxDebug = debugClass;
            },
            enumerable: true,
            configurable: true
        });
        return MicrosoftAjaxFactory;
    }());
    OfficeExt.MicrosoftAjaxFactory = MicrosoftAjaxFactory;
})(OfficeExt || (OfficeExt = {}));
var OsfMsAjaxFactory = new OfficeExt.MicrosoftAjaxFactory();
var OSF = OSF || {};
(function (OfficeExt) {
    var SafeStorage = (function () {
        function SafeStorage(_internalStorage) {
            this._internalStorage = _internalStorage;
        }
        SafeStorage.prototype.getItem = function (key) {
            try {
                return this._internalStorage && this._internalStorage.getItem(key);
            }
            catch (e) {
                return null;
            }
        };
        SafeStorage.prototype.setItem = function (key, data) {
            try {
                this._internalStorage && this._internalStorage.setItem(key, data);
            }
            catch (e) {
            }
        };
        SafeStorage.prototype.clear = function () {
            try {
                this._internalStorage && this._internalStorage.clear();
            }
            catch (e) {
            }
        };
        SafeStorage.prototype.removeItem = function (key) {
            try {
                this._internalStorage && this._internalStorage.removeItem(key);
            }
            catch (e) {
            }
        };
        SafeStorage.prototype.getKeysWithPrefix = function (keyPrefix) {
            var keyList = [];
            try {
                var len = this._internalStorage && this._internalStorage.length || 0;
                for (var i = 0; i < len; i++) {
                    var key = this._internalStorage.key(i);
                    if (key.indexOf(keyPrefix) === 0) {
                        keyList.push(key);
                    }
                }
            }
            catch (e) {
            }
            return keyList;
        };
        SafeStorage.prototype.isLocalStorageAvailable = function () {
            return (this._internalStorage != null);
        };
        return SafeStorage;
    }());
    OfficeExt.SafeStorage = SafeStorage;
})(OfficeExt || (OfficeExt = {}));
OSF.XdmFieldName = {
    ConversationUrl: "ConversationUrl",
    AppId: "AppId"
};
OSF.TestFlightStart = 1000;
OSF.TestFlightEnd = 1009;
OSF.FlightNames = {
    UseOriginNotUrl: 0,
    AddinEnforceHttps: 2,
    FirstPartyAnonymousProxyReadyCheckTimeout: 6,
    AddinRibbonIdAllowUnknown: 9,
    ManifestParserDevConsoleLog: 15,
    AddinActionDefinitionHybridMode: 18,
    UseActionIdForUILessCommand: 20,
    RequirementSetRibbonApiOnePointTwo: 21,
    SetFocusToTaskpaneIsEnabled: 22,
    ShortcutInfoArrayInUserPreferenceData: 23,
    OSFTestFlight1000: OSF.TestFlightStart,
    OSFTestFlight1001: OSF.TestFlightStart + 1,
    OSFTestFlight1002: OSF.TestFlightStart + 2,
    OSFTestFlight1003: OSF.TestFlightStart + 3,
    OSFTestFlight1004: OSF.TestFlightStart + 4,
    OSFTestFlight1005: OSF.TestFlightStart + 5,
    OSFTestFlight1006: OSF.TestFlightStart + 6,
    OSFTestFlight1007: OSF.TestFlightStart + 7,
    OSFTestFlight1008: OSF.TestFlightStart + 8,
    OSFTestFlight1009: OSF.TestFlightEnd
};
OSF.FlightTreatmentNames = {
    AllowStorageAccessByUserActivationOnIFrameCheck: "Microsoft.Office.SharedOnline.AllowStorageAccessByUserActivationOnIFrameCheck",
    IsPrivateAddin: "Microsoft.Office.SharedOnline.IsPrivateAddin",
    LogAllAddinsAsPublic: "Microsoft.Office.SharedOnline.LogAllAddinsAsPublic",
    WopiPreinstalledAddInsEnabled: "Microsoft.Office.SharedOnline.WopiPreinstalledAddInsEnabled",
    AddinCommandRibbonCacheFixEnabled: "Microsoft.Office.SharedOnline.AddinCommandRibbonCacheFixEnabled",
    OSFSolutionRefactor: "Microsoft.Office.SharedOnline.OSFSolutionRefactor",
    CheckProxyIsReadyRetry: "Microsoft.Office.SharedOnline.OEP.CheckProxyIsReadyRetry"
};
OSF.Flights = [];
OSF.Settings = {};
OSF.WindowNameItemKeys = {
    BaseFrameName: "baseFrameName",
    HostInfo: "hostInfo",
    XdmInfo: "xdmInfo",
    SerializerVersion: "serializerVersion",
    AppContext: "appContext",
    Flights: "flights"
};
OSF.OUtil = (function () {
    var _uniqueId = -1;
    var _xdmInfoKey = '&_xdm_Info=';
    var _serializerVersionKey = '&_serializer_version=';
    var _flightsKey = '&_flights=';
    var _xdmSessionKeyPrefix = '_xdm_';
    var _serializerVersionKeyPrefix = '_serializer_version=';
    var _flightsKeyPrefix = '_flights=';
    var _fragmentSeparator = '#';
    var _fragmentInfoDelimiter = '&';
    var _classN = "class";
    var _loadedScripts = {};
    var _defaultScriptLoadingTimeout = 30000;
    var _safeSessionStorage = null;
    var _safeLocalStorage = null;
    var _rndentropy = new Date().getTime();
    function _random() {
        var nextrand = 0x7fffffff * (Math.random());
        nextrand ^= _rndentropy ^ ((new Date().getMilliseconds()) << Math.floor(Math.random() * (31 - 10)));
        return nextrand.toString(16);
    }
    ;
    function _getSessionStorage() {
        if (!_safeSessionStorage) {
            try {
                var sessionStorage = window.sessionStorage;
            }
            catch (ex) {
                sessionStorage = null;
            }
            _safeSessionStorage = new OfficeExt.SafeStorage(sessionStorage);
        }
        return _safeSessionStorage;
    }
    ;
    function _reOrderTabbableElements(elements) {
        var bucket0 = [];
        var bucketPositive = [];
        var i;
        var len = elements.length;
        var ele;
        for (i = 0; i < len; i++) {
            ele = elements[i];
            if (ele.tabIndex) {
                if (ele.tabIndex > 0) {
                    bucketPositive.push(ele);
                }
                else if (ele.tabIndex === 0) {
                    bucket0.push(ele);
                }
            }
            else {
                bucket0.push(ele);
            }
        }
        bucketPositive = bucketPositive.sort(function (left, right) {
            var diff = left.tabIndex - right.tabIndex;
            if (diff === 0) {
                diff = bucketPositive.indexOf(left) - bucketPositive.indexOf(right);
            }
            return diff;
        });
        return [].concat(bucketPositive, bucket0);
    }
    ;
    return {
        set_entropy: function OSF_OUtil$set_entropy(entropy) {
            if (typeof entropy == "string") {
                for (var i = 0; i < entropy.length; i += 4) {
                    var temp = 0;
                    for (var j = 0; j < 4 && i + j < entropy.length; j++) {
                        temp = (temp << 8) + entropy.charCodeAt(i + j);
                    }
                    _rndentropy ^= temp;
                }
            }
            else if (typeof entropy == "number") {
                _rndentropy ^= entropy;
            }
            else {
                _rndentropy ^= 0x7fffffff * Math.random();
            }
            _rndentropy &= 0x7fffffff;
        },
        extend: function OSF_OUtil$extend(child, parent) {
            var F = function () { };
            F.prototype = parent.prototype;
            child.prototype = new F();
            child.prototype.constructor = child;
            child.uber = parent.prototype;
            if (parent.prototype.constructor === Object.prototype.constructor) {
                parent.prototype.constructor = parent;
            }
        },
        setNamespace: function OSF_OUtil$setNamespace(name, parent) {
            if (parent && name && !parent[name]) {
                parent[name] = {};
            }
        },
        unsetNamespace: function OSF_OUtil$unsetNamespace(name, parent) {
            if (parent && name && parent[name]) {
                delete parent[name];
            }
        },
        serializeSettings: function OSF_OUtil$serializeSettings(settingsCollection) {
            var ret = {};
            for (var key in settingsCollection) {
                var value = settingsCollection[key];
                try {
                    if (JSON) {
                        value = JSON.stringify(value, function dateReplacer(k, v) {
                            return OSF.OUtil.isDate(this[k]) ? OSF.DDA.SettingsManager.DateJSONPrefix + this[k].getTime() + OSF.DDA.SettingsManager.DataJSONSuffix : v;
                        });
                    }
                    else {
                        value = Sys.Serialization.JavaScriptSerializer.serialize(value);
                    }
                    ret[key] = value;
                }
                catch (ex) {
                }
            }
            return ret;
        },
        deserializeSettings: function OSF_OUtil$deserializeSettings(serializedSettings) {
            var ret = {};
            serializedSettings = serializedSettings || {};
            for (var key in serializedSettings) {
                var value = serializedSettings[key];
                try {
                    if (JSON) {
                        value = JSON.parse(value, function dateReviver(k, v) {
                            var d;
                            if (typeof v === 'string' && v && v.length > 6 && v.slice(0, 5) === OSF.DDA.SettingsManager.DateJSONPrefix && v.slice(-1) === OSF.DDA.SettingsManager.DataJSONSuffix) {
                                d = new Date(parseInt(v.slice(5, -1)));
                                if (d) {
                                    return d;
                                }
                            }
                            return v;
                        });
                    }
                    else {
                        value = Sys.Serialization.JavaScriptSerializer.deserialize(value, true);
                    }
                    ret[key] = value;
                }
                catch (ex) {
                }
            }
            return ret;
        },
        loadScript: function OSF_OUtil$loadScript(url, callback, timeoutInMs) {
            if (url && callback) {
                var doc = window.document;
                var _loadedScriptEntry = _loadedScripts[url];
                if (!_loadedScriptEntry) {
                    var script = doc.createElement("script");
                    script.type = "text/javascript";
                    _loadedScriptEntry = { loaded: false, pendingCallbacks: [callback], timer: null };
                    _loadedScripts[url] = _loadedScriptEntry;
                    var onLoadCallback = function OSF_OUtil_loadScript$onLoadCallback() {
                        if (_loadedScriptEntry.timer != null) {
                            clearTimeout(_loadedScriptEntry.timer);
                            delete _loadedScriptEntry.timer;
                        }
                        _loadedScriptEntry.loaded = true;
                        var pendingCallbackCount = _loadedScriptEntry.pendingCallbacks.length;
                        for (var i = 0; i < pendingCallbackCount; i++) {
                            var currentCallback = _loadedScriptEntry.pendingCallbacks.shift();
                            currentCallback();
                        }
                    };
                    var onLoadTimeOut = function OSF_OUtil_loadScript$onLoadTimeOut() {
                        if (window.navigator.userAgent.indexOf("Trident") > 0) {
                            onLoadError(null);
                        }
                        else {
                            onLoadError(new Event("Script load timed out"));
                        }
                    };
                    var onLoadError = function OSF_OUtil_loadScript$onLoadError(errorEvent) {
                        delete _loadedScripts[url];
                        if (_loadedScriptEntry.timer != null) {
                            clearTimeout(_loadedScriptEntry.timer);
                            delete _loadedScriptEntry.timer;
                        }
                        var pendingCallbackCount = _loadedScriptEntry.pendingCallbacks.length;
                        for (var i = 0; i < pendingCallbackCount; i++) {
                            var currentCallback = _loadedScriptEntry.pendingCallbacks.shift();
                            currentCallback();
                        }
                    };
                    if (script.readyState) {
                        script.onreadystatechange = function () {
                            if (script.readyState == "loaded" || script.readyState == "complete") {
                                script.onreadystatechange = null;
                                onLoadCallback();
                            }
                        };
                    }
                    else {
                        script.onload = onLoadCallback;
                    }
                    script.onerror = onLoadError;
                    timeoutInMs = timeoutInMs || _defaultScriptLoadingTimeout;
                    _loadedScriptEntry.timer = setTimeout(onLoadTimeOut, timeoutInMs);
                    script.setAttribute("crossOrigin", "anonymous");
                    script.src = url;
                    doc.getElementsByTagName("head")[0].appendChild(script);
                }
                else if (_loadedScriptEntry.loaded) {
                    callback();
                }
                else {
                    _loadedScriptEntry.pendingCallbacks.push(callback);
                }
            }
        },
        loadCSS: function OSF_OUtil$loadCSS(url) {
            if (url) {
                var doc = window.document;
                var link = doc.createElement("link");
                link.type = "text/css";
                link.rel = "stylesheet";
                link.href = url;
                doc.getElementsByTagName("head")[0].appendChild(link);
            }
        },
        parseEnum: function OSF_OUtil$parseEnum(str, enumObject) {
            var parsed = enumObject[str.trim()];
            if (typeof (parsed) == 'undefined') {
                OsfMsAjaxFactory.msAjaxDebug.trace("invalid enumeration string:" + str);
                throw OsfMsAjaxFactory.msAjaxError.argument("str");
            }
            return parsed;
        },
        delayExecutionAndCache: function OSF_OUtil$delayExecutionAndCache() {
            var obj = { calc: arguments[0] };
            return function () {
                if (obj.calc) {
                    obj.val = obj.calc.apply(this, arguments);
                    delete obj.calc;
                }
                return obj.val;
            };
        },
        getUniqueId: function OSF_OUtil$getUniqueId() {
            _uniqueId = _uniqueId + 1;
            return _uniqueId.toString();
        },
        formatString: function OSF_OUtil$formatString() {
            var args = arguments;
            var source = args[0];
            return source.replace(/{(\d+)}/gm, function (match, number) {
                var index = parseInt(number, 10) + 1;
                return args[index] === undefined ? '{' + number + '}' : args[index];
            });
        },
        generateConversationId: function OSF_OUtil$generateConversationId() {
            return [_random(), _random(), (new Date()).getTime().toString()].join('_');
        },
        getFrameName: function OSF_OUtil$getFrameName(cacheKey) {
            return _xdmSessionKeyPrefix + cacheKey + this.generateConversationId();
        },
        addXdmInfoAsHash: function OSF_OUtil$addXdmInfoAsHash(url, xdmInfoValue) {
            return OSF.OUtil.addInfoAsHash(url, _xdmInfoKey, xdmInfoValue, false);
        },
        addSerializerVersionAsHash: function OSF_OUtil$addSerializerVersionAsHash(url, serializerVersion) {
            return OSF.OUtil.addInfoAsHash(url, _serializerVersionKey, serializerVersion, true);
        },
        addFlightsAsHash: function OSF_OUtil$addFlightsAsHash(url, flights) {
            return OSF.OUtil.addInfoAsHash(url, _flightsKey, flights, true);
        },
        addInfoAsHash: function OSF_OUtil$addInfoAsHash(url, keyName, infoValue, encodeInfo) {
            url = url.trim() || '';
            var urlParts = url.split(_fragmentSeparator);
            var urlWithoutFragment = urlParts.shift();
            var fragment = urlParts.join(_fragmentSeparator);
            var newFragment;
            if (encodeInfo) {
                newFragment = [keyName, encodeURIComponent(infoValue), fragment].join('');
            }
            else {
                newFragment = [fragment, keyName, infoValue].join('');
            }
            return [urlWithoutFragment, _fragmentSeparator, newFragment].join('');
        },
        parseHostInfoFromWindowName: function OSF_OUtil$parseHostInfoFromWindowName(skipSessionStorage, windowName) {
            return OSF.OUtil.parseInfoFromWindowName(skipSessionStorage, windowName, OSF.WindowNameItemKeys.HostInfo);
        },
        parseXdmInfo: function OSF_OUtil$parseXdmInfo(skipSessionStorage) {
            var xdmInfoValue = OSF.OUtil.parseXdmInfoWithGivenFragment(skipSessionStorage, window.location.hash);
            if (!xdmInfoValue) {
                xdmInfoValue = OSF.OUtil.parseXdmInfoFromWindowName(skipSessionStorage, window.name);
            }
            return xdmInfoValue;
        },
        parseXdmInfoFromWindowName: function OSF_OUtil$parseXdmInfoFromWindowName(skipSessionStorage, windowName) {
            return OSF.OUtil.parseInfoFromWindowName(skipSessionStorage, windowName, OSF.WindowNameItemKeys.XdmInfo);
        },
        parseXdmInfoWithGivenFragment: function OSF_OUtil$parseXdmInfoWithGivenFragment(skipSessionStorage, fragment) {
            return OSF.OUtil.parseInfoWithGivenFragment(_xdmInfoKey, _xdmSessionKeyPrefix, false, skipSessionStorage, fragment);
        },
        parseSerializerVersion: function OSF_OUtil$parseSerializerVersion(skipSessionStorage) {
            var serializerVersion = OSF.OUtil.parseSerializerVersionWithGivenFragment(skipSessionStorage, window.location.hash);
            if (isNaN(serializerVersion)) {
                serializerVersion = OSF.OUtil.parseSerializerVersionFromWindowName(skipSessionStorage, window.name);
            }
            return serializerVersion;
        },
        parseSerializerVersionFromWindowName: function OSF_OUtil$parseSerializerVersionFromWindowName(skipSessionStorage, windowName) {
            return parseInt(OSF.OUtil.parseInfoFromWindowName(skipSessionStorage, windowName, OSF.WindowNameItemKeys.SerializerVersion));
        },
        parseSerializerVersionWithGivenFragment: function OSF_OUtil$parseSerializerVersionWithGivenFragment(skipSessionStorage, fragment) {
            return parseInt(OSF.OUtil.parseInfoWithGivenFragment(_serializerVersionKey, _serializerVersionKeyPrefix, true, skipSessionStorage, fragment));
        },
        parseFlights: function OSF_OUtil$parseFlights(skipSessionStorage) {
            var flights = OSF.OUtil.parseFlightsWithGivenFragment(skipSessionStorage, window.location.hash);
            if (flights.length == 0) {
                flights = OSF.OUtil.parseFlightsFromWindowName(skipSessionStorage, window.name);
            }
            return flights;
        },
        checkFlight: function OSF_OUtil$checkFlightEnabled(flight) {
            return OSF.Flights && OSF.Flights.indexOf(flight) >= 0;
        },
        pushFlight: function OSF_OUtil$pushFlight(flight) {
            if (OSF.Flights.indexOf(flight) < 0) {
                OSF.Flights.push(flight);
                return true;
            }
            return false;
        },
        getBooleanSetting: function OSF_OUtil$getSetting(settingName) {
            return OSF.OUtil.getBooleanFromDictionary(OSF.Settings, settingName);
        },
        getBooleanFromDictionary: function OSF_OUtil$getBooleanFromDictionary(settings, settingName) {
            var result = (settings && settingName && settings[settingName] !== undefined && settings[settingName] &&
                ((typeof (settings[settingName]) === "string" && settings[settingName].toUpperCase() === 'TRUE') ||
                    (typeof (settings[settingName]) === "boolean" && settings[settingName])));
            return result !== undefined ? result : false;
        },
        parseFlightsFromWindowName: function OSF_OUtil$parseFlightsFromWindowName(skipSessionStorage, windowName) {
            return OSF.OUtil.parseArrayWithDefault(OSF.OUtil.parseInfoFromWindowName(skipSessionStorage, windowName, OSF.WindowNameItemKeys.Flights));
        },
        parseFlightsWithGivenFragment: function OSF_OUtil$parseFlightsWithGivenFragment(skipSessionStorage, fragment) {
            return OSF.OUtil.parseArrayWithDefault(OSF.OUtil.parseInfoWithGivenFragment(_flightsKey, _flightsKeyPrefix, true, skipSessionStorage, fragment));
        },
        parseArrayWithDefault: function OSF_OUtil$parseArrayWithDefault(jsonString) {
            var array = [];
            try {
                array = JSON.parse(jsonString);
            }
            catch (ex) { }
            if (!Array.isArray(array)) {
                array = [];
            }
            return array;
        },
        parseInfoFromWindowName: function OSF_OUtil$parseInfoFromWindowName(skipSessionStorage, windowName, infoKey) {
            try {
                var windowNameObj = JSON.parse(windowName);
                var infoValue = windowNameObj != null ? windowNameObj[infoKey] : null;
                var osfSessionStorage = _getSessionStorage();
                if (!skipSessionStorage && osfSessionStorage && windowNameObj != null) {
                    var sessionKey = windowNameObj[OSF.WindowNameItemKeys.BaseFrameName] + infoKey;
                    if (infoValue) {
                        osfSessionStorage.setItem(sessionKey, infoValue);
                    }
                    else {
                        infoValue = osfSessionStorage.getItem(sessionKey);
                    }
                }
                return infoValue;
            }
            catch (Exception) {
                return null;
            }
        },
        parseInfoWithGivenFragment: function OSF_OUtil$parseInfoWithGivenFragment(infoKey, infoKeyPrefix, decodeInfo, skipSessionStorage, fragment) {
            var fragmentParts = fragment.split(infoKey);
            var infoValue = fragmentParts.length > 1 ? fragmentParts[fragmentParts.length - 1] : null;
            if (decodeInfo && infoValue != null) {
                if (infoValue.indexOf(_fragmentInfoDelimiter) >= 0) {
                    infoValue = infoValue.split(_fragmentInfoDelimiter)[0];
                }
                infoValue = decodeURIComponent(infoValue);
            }
            var osfSessionStorage = _getSessionStorage();
            if (!skipSessionStorage && osfSessionStorage) {
                var sessionKeyStart = window.name.indexOf(infoKeyPrefix);
                if (sessionKeyStart > -1) {
                    var sessionKeyEnd = window.name.indexOf(";", sessionKeyStart);
                    if (sessionKeyEnd == -1) {
                        sessionKeyEnd = window.name.length;
                    }
                    var sessionKey = window.name.substring(sessionKeyStart, sessionKeyEnd);
                    if (infoValue) {
                        osfSessionStorage.setItem(sessionKey, infoValue);
                    }
                    else {
                        infoValue = osfSessionStorage.getItem(sessionKey);
                    }
                }
            }
            return infoValue;
        },
        getConversationId: function OSF_OUtil$getConversationId() {
            var searchString = window.location.search;
            var conversationId = null;
            if (searchString) {
                var index = searchString.indexOf("&");
                conversationId = index > 0 ? searchString.substring(1, index) : searchString.substr(1);
                if (conversationId && conversationId.charAt(conversationId.length - 1) === '=') {
                    conversationId = conversationId.substring(0, conversationId.length - 1);
                    if (conversationId) {
                        conversationId = decodeURIComponent(conversationId);
                    }
                }
            }
            return conversationId;
        },
        getInfoItems: function OSF_OUtil$getInfoItems(strInfo) {
            var items = strInfo.split("$");
            if (typeof items[1] == "undefined") {
                items = strInfo.split("|");
            }
            if (typeof items[1] == "undefined") {
                items = strInfo.split("%7C");
            }
            return items;
        },
        getXdmFieldValue: function OSF_OUtil$getXdmFieldValue(xdmFieldName, skipSessionStorage) {
            var fieldValue = '';
            var xdmInfoValue = OSF.OUtil.parseXdmInfo(skipSessionStorage);
            if (xdmInfoValue) {
                var items = OSF.OUtil.getInfoItems(xdmInfoValue);
                if (items != undefined && items.length >= 3) {
                    switch (xdmFieldName) {
                        case OSF.XdmFieldName.ConversationUrl:
                            fieldValue = items[2];
                            break;
                        case OSF.XdmFieldName.AppId:
                            fieldValue = items[1];
                            break;
                    }
                }
            }
            return fieldValue;
        },
        validateParamObject: function OSF_OUtil$validateParamObject(params, expectedProperties, callback) {
            var e = Function._validateParams(arguments, [{ name: "params", type: Object, mayBeNull: false },
                { name: "expectedProperties", type: Object, mayBeNull: false },
                { name: "callback", type: Function, mayBeNull: true }
            ]);
            if (e)
                throw e;
            for (var p in expectedProperties) {
                e = Function._validateParameter(params[p], expectedProperties[p], p);
                if (e)
                    throw e;
            }
        },
        writeProfilerMark: function OSF_OUtil$writeProfilerMark(text) {
            if (window.msWriteProfilerMark) {
                window.msWriteProfilerMark(text);
                OsfMsAjaxFactory.msAjaxDebug.trace(text);
            }
        },
        outputDebug: function OSF_OUtil$outputDebug(text) {
            if (typeof (OsfMsAjaxFactory) !== 'undefined' && OsfMsAjaxFactory.msAjaxDebug && OsfMsAjaxFactory.msAjaxDebug.trace) {
                OsfMsAjaxFactory.msAjaxDebug.trace(text);
            }
        },
        defineNondefaultProperty: function OSF_OUtil$defineNondefaultProperty(obj, prop, descriptor, attributes) {
            descriptor = descriptor || {};
            for (var nd in attributes) {
                var attribute = attributes[nd];
                if (descriptor[attribute] == undefined) {
                    descriptor[attribute] = true;
                }
            }
            Object.defineProperty(obj, prop, descriptor);
            return obj;
        },
        defineNondefaultProperties: function OSF_OUtil$defineNondefaultProperties(obj, descriptors, attributes) {
            descriptors = descriptors || {};
            for (var prop in descriptors) {
                OSF.OUtil.defineNondefaultProperty(obj, prop, descriptors[prop], attributes);
            }
            return obj;
        },
        defineEnumerableProperty: function OSF_OUtil$defineEnumerableProperty(obj, prop, descriptor) {
            return OSF.OUtil.defineNondefaultProperty(obj, prop, descriptor, ["enumerable"]);
        },
        defineEnumerableProperties: function OSF_OUtil$defineEnumerableProperties(obj, descriptors) {
            return OSF.OUtil.defineNondefaultProperties(obj, descriptors, ["enumerable"]);
        },
        defineMutableProperty: function OSF_OUtil$defineMutableProperty(obj, prop, descriptor) {
            return OSF.OUtil.defineNondefaultProperty(obj, prop, descriptor, ["writable", "enumerable", "configurable"]);
        },
        defineMutableProperties: function OSF_OUtil$defineMutableProperties(obj, descriptors) {
            return OSF.OUtil.defineNondefaultProperties(obj, descriptors, ["writable", "enumerable", "configurable"]);
        },
        finalizeProperties: function OSF_OUtil$finalizeProperties(obj, descriptor) {
            descriptor = descriptor || {};
            var props = Object.getOwnPropertyNames(obj);
            var propsLength = props.length;
            for (var i = 0; i < propsLength; i++) {
                var prop = props[i];
                var desc = Object.getOwnPropertyDescriptor(obj, prop);
                if (!desc.get && !desc.set) {
                    desc.writable = descriptor.writable || false;
                }
                desc.configurable = descriptor.configurable || false;
                desc.enumerable = descriptor.enumerable || true;
                Object.defineProperty(obj, prop, desc);
            }
            return obj;
        },
        mapList: function OSF_OUtil$MapList(list, mapFunction) {
            var ret = [];
            if (list) {
                for (var item in list) {
                    ret.push(mapFunction(list[item]));
                }
            }
            return ret;
        },
        listContainsKey: function OSF_OUtil$listContainsKey(list, key) {
            for (var item in list) {
                if (key == item) {
                    return true;
                }
            }
            return false;
        },
        listContainsValue: function OSF_OUtil$listContainsElement(list, value) {
            for (var item in list) {
                if (value == list[item]) {
                    return true;
                }
            }
            return false;
        },
        augmentList: function OSF_OUtil$augmentList(list, addenda) {
            var add = list.push ? function (key, value) { list.push(value); } : function (key, value) { list[key] = value; };
            for (var key in addenda) {
                add(key, addenda[key]);
            }
        },
        redefineList: function OSF_Outil$redefineList(oldList, newList) {
            for (var key1 in oldList) {
                delete oldList[key1];
            }
            for (var key2 in newList) {
                oldList[key2] = newList[key2];
            }
        },
        isArray: function OSF_OUtil$isArray(obj) {
            return Object.prototype.toString.apply(obj) === "[object Array]";
        },
        isFunction: function OSF_OUtil$isFunction(obj) {
            return Object.prototype.toString.apply(obj) === "[object Function]";
        },
        isDate: function OSF_OUtil$isDate(obj) {
            return Object.prototype.toString.apply(obj) === "[object Date]";
        },
        addEventListener: function OSF_OUtil$addEventListener(element, eventName, listener) {
            if (element.addEventListener) {
                element.addEventListener(eventName, listener, false);
            }
            else if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && element.attachEvent) {
                element.attachEvent("on" + eventName, listener);
            }
            else {
                element["on" + eventName] = listener;
            }
        },
        removeEventListener: function OSF_OUtil$removeEventListener(element, eventName, listener) {
            if (element.removeEventListener) {
                element.removeEventListener(eventName, listener, false);
            }
            else if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && element.detachEvent) {
                element.detachEvent("on" + eventName, listener);
            }
            else {
                element["on" + eventName] = null;
            }
        },
        getCookieValue: function OSF_OUtil$getCookieValue(cookieName) {
            var tmpCookieString = RegExp(cookieName + "[^;]+").exec(document.cookie);
            return tmpCookieString.toString().replace(/^[^=]+./, "");
        },
        xhrGet: function OSF_OUtil$xhrGet(url, onSuccess, onError) {
            var xmlhttp;
            try {
                xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function () {
                    if (xmlhttp.readyState == 4) {
                        if (xmlhttp.status == 200) {
                            onSuccess(xmlhttp.responseText);
                        }
                        else {
                            onError(xmlhttp.status);
                        }
                    }
                };
                xmlhttp.open("GET", url, true);
                xmlhttp.send();
            }
            catch (ex) {
                onError(ex);
            }
        },
        xhrGetFull: function OSF_OUtil$xhrGetFull(url, oneDriveFileName, onSuccess, onError) {
            var xmlhttp;
            var requestedFileName = oneDriveFileName;
            try {
                xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function () {
                    if (xmlhttp.readyState == 4) {
                        if (xmlhttp.status == 200) {
                            onSuccess(xmlhttp, requestedFileName);
                        }
                        else {
                            onError(xmlhttp.status);
                        }
                    }
                };
                xmlhttp.open("GET", url, true);
                xmlhttp.send();
            }
            catch (ex) {
                onError(ex);
            }
        },
        encodeBase64: function OSF_Outil$encodeBase64(input) {
            if (!input)
                return input;
            var codex = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/=";
            var output = [];
            var temp = [];
            var index = 0;
            var c1, c2, c3, a, b, c;
            var i;
            var length = input.length;
            do {
                c1 = input.charCodeAt(index++);
                c2 = input.charCodeAt(index++);
                c3 = input.charCodeAt(index++);
                i = 0;
                a = c1 & 255;
                b = c1 >> 8;
                c = c2 & 255;
                temp[i++] = a >> 2;
                temp[i++] = ((a & 3) << 4) | (b >> 4);
                temp[i++] = ((b & 15) << 2) | (c >> 6);
                temp[i++] = c & 63;
                if (!isNaN(c2)) {
                    a = c2 >> 8;
                    b = c3 & 255;
                    c = c3 >> 8;
                    temp[i++] = a >> 2;
                    temp[i++] = ((a & 3) << 4) | (b >> 4);
                    temp[i++] = ((b & 15) << 2) | (c >> 6);
                    temp[i++] = c & 63;
                }
                if (isNaN(c2)) {
                    temp[i - 1] = 64;
                }
                else if (isNaN(c3)) {
                    temp[i - 2] = 64;
                    temp[i - 1] = 64;
                }
                for (var t = 0; t < i; t++) {
                    output.push(codex.charAt(temp[t]));
                }
            } while (index < length);
            return output.join("");
        },
        getSessionStorage: function OSF_Outil$getSessionStorage() {
            return _getSessionStorage();
        },
        getLocalStorage: function OSF_Outil$getLocalStorage() {
            if (!_safeLocalStorage) {
                try {
                    var localStorage = window.localStorage;
                }
                catch (ex) {
                    localStorage = null;
                }
                _safeLocalStorage = new OfficeExt.SafeStorage(localStorage);
            }
            return _safeLocalStorage;
        },
        convertIntToCssHexColor: function OSF_Outil$convertIntToCssHexColor(val) {
            var hex = "#" + (Number(val) + 0x1000000).toString(16).slice(-6);
            return hex;
        },
        attachClickHandler: function OSF_Outil$attachClickHandler(element, handler) {
            element.onclick = function (e) {
                handler();
            };
            element.ontouchend = function (e) {
                handler();
                e.preventDefault();
            };
        },
        getQueryStringParamValue: function OSF_Outil$getQueryStringParamValue(queryString, paramName) {
            var e = Function._validateParams(arguments, [{ name: "queryString", type: String, mayBeNull: false },
                { name: "paramName", type: String, mayBeNull: false }
            ]);
            if (e) {
                OsfMsAjaxFactory.msAjaxDebug.trace("OSF_Outil_getQueryStringParamValue: Parameters cannot be null.");
                return "";
            }
            var queryExp = new RegExp("[\\?&]" + paramName + "=([^&#]*)", "i");
            if (!queryExp.test(queryString)) {
                OsfMsAjaxFactory.msAjaxDebug.trace("OSF_Outil_getQueryStringParamValue: The parameter is not found.");
                return "";
            }
            return queryExp.exec(queryString)[1];
        },
        getHostnamePortionForLogging: function OSF_Outil$getHostnamePortionForLogging(hostname) {
            var e = Function._validateParams(arguments, [{ name: "hostname", type: String, mayBeNull: false }
            ]);
            if (e) {
                return "";
            }
            var hostnameSubstrings = hostname.split('.');
            var len = hostnameSubstrings.length;
            if (len >= 2) {
                return hostnameSubstrings[len - 2] + "." + hostnameSubstrings[len - 1];
            }
            else if (len == 1) {
                return hostnameSubstrings[0];
            }
        },
        isiOS: function OSF_Outil$isiOS() {
            return (window.navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false);
        },
        isChrome: function OSF_Outil$isChrome() {
            return (window.navigator.userAgent.indexOf("Chrome") > 0) && !OSF.OUtil.isEdge();
        },
        isEdge: function OSF_Outil$isEdge() {
            return window.navigator.userAgent.indexOf("Edge") > 0;
        },
        isIE: function OSF_Outil$isIE() {
            return window.navigator.userAgent.indexOf("Trident") > 0;
        },
        isFirefox: function OSF_Outil$isFirefox() {
            return window.navigator.userAgent.indexOf("Firefox") > 0;
        },
        startsWith: function OSF_Outil$startsWith(originalString, patternToCheck, browserIsIE) {
            if (browserIsIE) {
                return originalString.substr(0, patternToCheck.length) === patternToCheck;
            }
            else {
                return originalString.startsWith(patternToCheck);
            }
        },
        containsPort: function OSF_Outil$containsPort(url, protocol, hostname, portNumber) {
            return this.startsWith(url, protocol + "//" + hostname + ":" + portNumber, true) || this.startsWith(url, hostname + ":" + portNumber, true);
        },
        getRedundandPortString: function OSF_Outil$getRedundandPortString(url, parser) {
            if (!url || !parser)
                return "";
            if (parser.protocol == "https:" && this.containsPort(url, "https:", parser.hostname, "443"))
                return ":443";
            else if (parser.protocol == "http:" && this.containsPort(url, "http:", parser.hostname, "80"))
                return ":80";
            return "";
        },
        removeChar: function OSF_Outil$removeChar(url, indexOfCharToRemove) {
            if (indexOfCharToRemove < url.length - 1)
                return url.substring(0, indexOfCharToRemove) + url.substring(indexOfCharToRemove + 1);
            else if (indexOfCharToRemove == url.length - 1)
                return url.substring(0, url.length - 1);
            else
                return url;
        },
        cleanUrlOfChar: function OSF_Outil$cleanUrlOfChar(url, charToClean) {
            var i;
            for (i = 0; i < url.length; i++) {
                if (url.charAt(i) === charToClean) {
                    if (i + 1 >= url.length) {
                        return this.removeChar(url, i);
                    }
                    else if (charToClean === '/') {
                        if (url.charAt(i + 1) === '?' || url.charAt(i + 1) === '#') {
                            return this.removeChar(url, i);
                        }
                    }
                    else if (charToClean === '?') {
                        if (url.charAt(i + 1) === '#') {
                            return this.removeChar(url, i);
                        }
                    }
                }
            }
            return url;
        },
        cleanUrl: function OSF_Outil$cleanUrl(url) {
            url = this.cleanUrlOfChar(url, '/');
            url = this.cleanUrlOfChar(url, '?');
            url = this.cleanUrlOfChar(url, '#');
            if (url.substr(0, 8) == "https://") {
                var portIndex = url.indexOf(":443");
                if (portIndex != -1) {
                    if (portIndex == url.length - 4 || url.charAt(portIndex + 4) == "/" || url.charAt(portIndex + 4) == "?" || url.charAt(portIndex + 4) == "#") {
                        url = url.substring(0, portIndex) + url.substring(portIndex + 4);
                    }
                }
            }
            else if (url.substr(0, 7) == "http://") {
                var portIndex = url.indexOf(":80");
                if (portIndex != -1) {
                    if (portIndex == url.length - 3 || url.charAt(portIndex + 3) == "/" || url.charAt(portIndex + 3) == "?" || url.charAt(portIndex + 3) == "#") {
                        url = url.substring(0, portIndex) + url.substring(portIndex + 3);
                    }
                }
            }
            return url;
        },
        parseUrl: function OSF_Outil$parseUrl(url, enforceHttps) {
            if (enforceHttps === void 0) {
                enforceHttps = false;
            }
            if (typeof url === "undefined" || !url) {
                return undefined;
            }
            var notHttpsErrorMessage = "NotHttps";
            var invalidUrlErrorMessage = "InvalidUrl";
            var isIEBoolean = this.isIE();
            var parsedUrlObj = {
                protocol: undefined,
                hostname: undefined,
                host: undefined,
                port: undefined,
                pathname: undefined,
                search: undefined,
                hash: undefined,
                isPortPartOfUrl: undefined
            };
            try {
                if (isIEBoolean) {
                    var parser = document.createElement("a");
                    parser.href = url;
                    if (!parser || !parser.protocol || !parser.host || !parser.hostname || !parser.href
                        || this.cleanUrl(parser.href).toLowerCase() !== this.cleanUrl(url).toLowerCase()) {
                        throw invalidUrlErrorMessage;
                    }
                    if (OSF.OUtil.checkFlight(OSF.FlightNames.AddinEnforceHttps)) {
                        if (enforceHttps && parser.protocol != "https:")
                            throw new Error(notHttpsErrorMessage);
                    }
                    var redundandPortString = this.getRedundandPortString(url, parser);
                    parsedUrlObj.protocol = parser.protocol;
                    parsedUrlObj.hostname = parser.hostname;
                    parsedUrlObj.port = (redundandPortString == "") ? parser.port : "";
                    parsedUrlObj.host = (redundandPortString != "") ? parser.hostname : parser.host;
                    parsedUrlObj.pathname = (isIEBoolean ? "/" : "") + parser.pathname;
                    parsedUrlObj.search = parser.search;
                    parsedUrlObj.hash = parser.hash;
                    parsedUrlObj.isPortPartOfUrl = this.containsPort(url, parser.protocol, parser.hostname, parser.port);
                }
                else {
                    var urlObj = new URL(url);
                    if (urlObj && urlObj.protocol && urlObj.host && urlObj.hostname) {
                        if (OSF.OUtil.checkFlight(OSF.FlightNames.AddinEnforceHttps)) {
                            if (enforceHttps && urlObj.protocol != "https:")
                                throw new Error(notHttpsErrorMessage);
                        }
                        parsedUrlObj.protocol = urlObj.protocol;
                        parsedUrlObj.hostname = urlObj.hostname;
                        parsedUrlObj.port = urlObj.port;
                        parsedUrlObj.host = urlObj.host;
                        parsedUrlObj.pathname = urlObj.pathname;
                        parsedUrlObj.search = urlObj.search;
                        parsedUrlObj.hash = urlObj.hash;
                        parsedUrlObj.isPortPartOfUrl = urlObj.host.lastIndexOf(":" + urlObj.port) == (urlObj.host.length - urlObj.port.length - 1);
                    }
                }
            }
            catch (err) {
                if (err.message === notHttpsErrorMessage)
                    throw err;
            }
            return parsedUrlObj;
        },
        shallowCopy: function OSF_Outil$shallowCopy(sourceObj) {
            if (sourceObj == null) {
                return null;
            }
            else if (!(sourceObj instanceof Object)) {
                return sourceObj;
            }
            else if (Array.isArray(sourceObj)) {
                var copyArr = [];
                for (var i = 0; i < sourceObj.length; i++) {
                    copyArr.push(sourceObj[i]);
                }
                return copyArr;
            }
            else {
                var copyObj = sourceObj.constructor();
                for (var property in sourceObj) {
                    if (sourceObj.hasOwnProperty(property)) {
                        copyObj[property] = sourceObj[property];
                    }
                }
                return copyObj;
            }
        },
        createObject: function OSF_Outil$createObject(properties) {
            var obj = null;
            if (properties) {
                obj = {};
                var len = properties.length;
                for (var i = 0; i < len; i++) {
                    obj[properties[i].name] = properties[i].value;
                }
            }
            return obj;
        },
        addClass: function OSF_OUtil$addClass(elmt, val) {
            if (!OSF.OUtil.hasClass(elmt, val)) {
                var className = elmt.getAttribute(_classN);
                if (className) {
                    elmt.setAttribute(_classN, className + " " + val);
                }
                else {
                    elmt.setAttribute(_classN, val);
                }
            }
        },
        removeClass: function OSF_OUtil$removeClass(elmt, val) {
            if (OSF.OUtil.hasClass(elmt, val)) {
                var className = elmt.getAttribute(_classN);
                var reg = new RegExp('(\\s|^)' + val + '(\\s|$)');
                className = className.replace(reg, '');
                elmt.setAttribute(_classN, className);
            }
        },
        hasClass: function OSF_OUtil$hasClass(elmt, clsName) {
            var className = elmt.getAttribute(_classN);
            return className && className.match(new RegExp('(\\s|^)' + clsName + '(\\s|$)'));
        },
        focusToFirstTabbable: function OSF_OUtil$focusToFirstTabbable(all, backward) {
            var next;
            var focused = false;
            var candidate;
            var setFlag = function (e) {
                focused = true;
            };
            var findNextPos = function (allLen, currPos, backward) {
                if (currPos < 0 || currPos > allLen) {
                    return -1;
                }
                else if (currPos === 0 && backward) {
                    return -1;
                }
                else if (currPos === allLen - 1 && !backward) {
                    return -1;
                }
                if (backward) {
                    return currPos - 1;
                }
                else {
                    return currPos + 1;
                }
            };
            all = _reOrderTabbableElements(all);
            next = backward ? all.length - 1 : 0;
            if (all.length === 0) {
                return null;
            }
            while (!focused && next >= 0 && next < all.length) {
                candidate = all[next];
                window.focus();
                candidate.addEventListener('focus', setFlag);
                candidate.focus();
                candidate.removeEventListener('focus', setFlag);
                next = findNextPos(all.length, next, backward);
                if (!focused && candidate === document.activeElement) {
                    focused = true;
                }
            }
            if (focused) {
                return candidate;
            }
            else {
                return null;
            }
        },
        focusToNextTabbable: function OSF_OUtil$focusToNextTabbable(all, curr, shift) {
            var currPos;
            var next;
            var focused = false;
            var candidate;
            var setFlag = function (e) {
                focused = true;
            };
            var findCurrPos = function (all, curr) {
                var i = 0;
                for (; i < all.length; i++) {
                    if (all[i] === curr) {
                        return i;
                    }
                }
                return -1;
            };
            var findNextPos = function (allLen, currPos, shift) {
                if (currPos < 0 || currPos > allLen) {
                    return -1;
                }
                else if (currPos === 0 && shift) {
                    return -1;
                }
                else if (currPos === allLen - 1 && !shift) {
                    return -1;
                }
                if (shift) {
                    return currPos - 1;
                }
                else {
                    return currPos + 1;
                }
            };
            all = _reOrderTabbableElements(all);
            currPos = findCurrPos(all, curr);
            next = findNextPos(all.length, currPos, shift);
            if (next < 0) {
                return null;
            }
            while (!focused && next >= 0 && next < all.length) {
                candidate = all[next];
                candidate.addEventListener('focus', setFlag);
                candidate.focus();
                candidate.removeEventListener('focus', setFlag);
                next = findNextPos(all.length, next, shift);
                if (!focused && candidate === document.activeElement) {
                    focused = true;
                }
            }
            if (focused) {
                return candidate;
            }
            else {
                return null;
            }
        },
        isNullOrUndefined: function OSF_OUtil$isNullOrUndefined(value) {
            if (typeof (value) === "undefined") {
                return true;
            }
            if (value === null) {
                return true;
            }
            return false;
        },
        stringEndsWith: function OSF_OUtil$stringEndsWith(value, subString) {
            if (!OSF.OUtil.isNullOrUndefined(value) && !OSF.OUtil.isNullOrUndefined(subString)) {
                if (subString.length > value.length) {
                    return false;
                }
                if (value.substr(value.length - subString.length) === subString) {
                    return true;
                }
            }
            return false;
        },
        hashCode: function OSF_OUtil$hashCode(str) {
            var hash = 0;
            if (!OSF.OUtil.isNullOrUndefined(str)) {
                var i = 0;
                var len = str.length;
                while (i < len) {
                    hash = (hash << 5) - hash + str.charCodeAt(i++) | 0;
                }
            }
            return hash;
        },
        getValue: function OSF_OUtil$getValue(value, defaultValue) {
            if (OSF.OUtil.isNullOrUndefined(value)) {
                return defaultValue;
            }
            return value;
        },
        externalNativeFunctionExists: function OSF_OUtil$externalNativeFunctionExists(type) {
            return type === 'unknown' || type !== 'undefined';
        }
    };
})();
OSF.OUtil.Guid = (function () {
    var hexCode = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
    return {
        generateNewGuid: function OSF_Outil_Guid$generateNewGuid() {
            var result = "";
            var tick = (new Date()).getTime();
            var index = 0;
            for (; index < 32 && tick > 0; index++) {
                if (index == 8 || index == 12 || index == 16 || index == 20) {
                    result += "-";
                }
                result += hexCode[tick % 16];
                tick = Math.floor(tick / 16);
            }
            for (; index < 32; index++) {
                if (index == 8 || index == 12 || index == 16 || index == 20) {
                    result += "-";
                }
                result += hexCode[Math.floor(Math.random() * 16)];
            }
            return result;
        }
    };
})();
try {
    (function () {
        OSF.Flights = OSF.OUtil.parseFlights(true);
    })();
}
catch (ex) { }
window.OSF = OSF;
OSF.OUtil.setNamespace("OSF", window);
OSF.MessageIDs = {
    "FetchBundleUrl": 0,
    "LoadReactBundle": 1,
    "LoadBundleSuccess": 2,
    "LoadBundleError": 3
};
OSF.AppName = {
    Unsupported: 0,
    Excel: 1,
    Word: 2,
    PowerPoint: 4,
    Outlook: 8,
    ExcelWebApp: 16,
    WordWebApp: 32,
    OutlookWebApp: 64,
    Project: 128,
    AccessWebApp: 256,
    PowerpointWebApp: 512,
    ExcelIOS: 1024,
    Sway: 2048,
    WordIOS: 4096,
    PowerPointIOS: 8192,
    Access: 16384,
    Lync: 32768,
    OutlookIOS: 65536,
    OneNoteWebApp: 131072,
    OneNote: 262144,
    ExcelWinRT: 524288,
    WordWinRT: 1048576,
    PowerpointWinRT: 2097152,
    OutlookAndroid: 4194304,
    OneNoteWinRT: 8388608,
    ExcelAndroid: 8388609,
    VisioWebApp: 8388610,
    OneNoteIOS: 8388611,
    WordAndroid: 8388613,
    PowerpointAndroid: 8388614,
    Visio: 8388615,
    OneNoteAndroid: 4194305
};
OSF.InternalPerfMarker = {
    DataCoercionBegin: "Agave.HostCall.CoerceDataStart",
    DataCoercionEnd: "Agave.HostCall.CoerceDataEnd"
};
OSF.HostCallPerfMarker = {
    IssueCall: "Agave.HostCall.IssueCall",
    ReceiveResponse: "Agave.HostCall.ReceiveResponse",
    RuntimeExceptionRaised: "Agave.HostCall.RuntimeExecptionRaised"
};
OSF.AgaveHostAction = {
    "Select": 0,
    "UnSelect": 1,
    "CancelDialog": 2,
    "InsertAgave": 3,
    "CtrlF6In": 4,
    "CtrlF6Exit": 5,
    "CtrlF6ExitShift": 6,
    "SelectWithError": 7,
    "NotifyHostError": 8,
    "RefreshAddinCommands": 9,
    "PageIsReady": 10,
    "TabIn": 11,
    "TabInShift": 12,
    "TabExit": 13,
    "TabExitShift": 14,
    "EscExit": 15,
    "F2Exit": 16,
    "ExitNoFocusable": 17,
    "ExitNoFocusableShift": 18,
    "MouseEnter": 19,
    "MouseLeave": 20,
    "UpdateTargetUrl": 21,
    "InstallCustomFunctions": 22,
    "SendTelemetryEvent": 23,
    "UninstallCustomFunctions": 24,
    "SendMessage": 25,
    "LaunchExtensionComponent": 26,
    "StopExtensionComponent": 27,
    "RestartExtensionComponent": 28,
    "EnableTaskPaneHeaderButton": 29,
    "DisableTaskPaneHeaderButton": 30,
    "TaskPaneHeaderButtonClicked": 31,
    "RemoveAppCommandsAddin": 32,
    "RefreshRibbonGallery": 33,
    "GetOriginalControlId": 34,
    "OfficeJsReady": 35,
    "InsertDevManifest": 36,
    "InsertDevManifestError": 37,
    "SendCustomerContent": 38,
    "KeyboardShortcuts": 39
};
OSF.SharedConstants = {
    "NotificationConversationIdSuffix": '_ntf'
};
OSF.DialogMessageType = {
    DialogMessageReceived: 0,
    DialogParentMessageReceived: 1,
    DialogClosed: 12006
};
OSF.OfficeAppContext = function OSF_OfficeAppContext(id, appName, appVersion, appUILocale, dataLocale, docUrl, clientMode, settings, reason, osfControlType, eToken, correlationId, appInstanceId, touchEnabled, commerceAllowed, appMinorVersion, requirementMatrix, hostCustomMessage, hostFullVersion, clientWindowHeight, clientWindowWidth, addinName, appDomains, dialogRequirementMatrix, featureGates, officeTheme, initialDisplayMode) {
    this._id = id;
    this._appName = appName;
    this._appVersion = appVersion;
    this._appUILocale = appUILocale;
    this._dataLocale = dataLocale;
    this._docUrl = docUrl;
    this._clientMode = clientMode;
    this._settings = settings;
    this._reason = reason;
    this._osfControlType = osfControlType;
    this._eToken = eToken;
    this._correlationId = correlationId;
    this._appInstanceId = appInstanceId;
    this._touchEnabled = touchEnabled;
    this._commerceAllowed = commerceAllowed;
    this._appMinorVersion = appMinorVersion;
    this._requirementMatrix = requirementMatrix;
    this._hostCustomMessage = hostCustomMessage;
    this._hostFullVersion = hostFullVersion;
    this._isDialog = false;
    this._clientWindowHeight = clientWindowHeight;
    this._clientWindowWidth = clientWindowWidth;
    this._addinName = addinName;
    this._appDomains = appDomains;
    this._dialogRequirementMatrix = dialogRequirementMatrix;
    this._featureGates = featureGates;
    this._officeTheme = officeTheme;
    this._initialDisplayMode = initialDisplayMode;
    this.get_id = function get_id() { return this._id; };
    this.get_appName = function get_appName() { return this._appName; };
    this.get_appVersion = function get_appVersion() { return this._appVersion; };
    this.get_appUILocale = function get_appUILocale() { return this._appUILocale; };
    this.get_dataLocale = function get_dataLocale() { return this._dataLocale; };
    this.get_docUrl = function get_docUrl() { return this._docUrl; };
    this.get_clientMode = function get_clientMode() { return this._clientMode; };
    this.get_bindings = function get_bindings() { return this._bindings; };
    this.get_settings = function get_settings() { return this._settings; };
    this.get_reason = function get_reason() { return this._reason; };
    this.get_osfControlType = function get_osfControlType() { return this._osfControlType; };
    this.get_eToken = function get_eToken() { return this._eToken; };
    this.get_correlationId = function get_correlationId() { return this._correlationId; };
    this.get_appInstanceId = function get_appInstanceId() { return this._appInstanceId; };
    this.get_touchEnabled = function get_touchEnabled() { return this._touchEnabled; };
    this.get_commerceAllowed = function get_commerceAllowed() { return this._commerceAllowed; };
    this.get_appMinorVersion = function get_appMinorVersion() { return this._appMinorVersion; };
    this.get_requirementMatrix = function get_requirementMatrix() { return this._requirementMatrix; };
    this.get_dialogRequirementMatrix = function get_dialogRequirementMatrix() { return this._dialogRequirementMatrix; };
    this.get_hostCustomMessage = function get_hostCustomMessage() { return this._hostCustomMessage; };
    this.get_hostFullVersion = function get_hostFullVersion() { return this._hostFullVersion; };
    this.get_isDialog = function get_isDialog() { return this._isDialog; };
    this.get_clientWindowHeight = function get_clientWindowHeight() { return this._clientWindowHeight; };
    this.get_clientWindowWidth = function get_clientWindowWidth() { return this._clientWindowWidth; };
    this.get_addinName = function get_addinName() { return this._addinName; };
    this.get_appDomains = function get_appDomains() { return this._appDomains; };
    this.get_featureGates = function get_featureGates() { return this._featureGates; };
    this.get_officeTheme = function get_officeTheme() { return this._officeTheme; };
    this.get_initialDisplayMode = function get_initialDisplayMode() { return this._initialDisplayMode ? this._initialDisplayMode : 0; };
};
OSF.OsfControlType = {
    DocumentLevel: 0,
    ContainerLevel: 1
};
OSF.ClientMode = {
    ReadOnly: 0,
    ReadWrite: 1
};
OSF.OUtil.setNamespace("Microsoft", window);
OSF.OUtil.setNamespace("Office", Microsoft);
OSF.OUtil.setNamespace("Client", Microsoft.Office);
OSF.OUtil.setNamespace("WebExtension", Microsoft.Office);
Microsoft.Office.WebExtension.InitializationReason = {
    Inserted: "inserted",
    DocumentOpened: "documentOpened",
    ControlActivation: "controlActivation"
};
Microsoft.Office.WebExtension.ValueFormat = {
    Unformatted: "unformatted",
    Formatted: "formatted"
};
Microsoft.Office.WebExtension.FilterType = {
    All: "all"
};
Microsoft.Office.WebExtension.Parameters = {
    BindingType: "bindingType",
    CoercionType: "coercionType",
    ValueFormat: "valueFormat",
    FilterType: "filterType",
    Columns: "columns",
    SampleData: "sampleData",
    GoToType: "goToType",
    SelectionMode: "selectionMode",
    Id: "id",
    PromptText: "promptText",
    ItemName: "itemName",
    FailOnCollision: "failOnCollision",
    StartRow: "startRow",
    StartColumn: "startColumn",
    RowCount: "rowCount",
    ColumnCount: "columnCount",
    Callback: "callback",
    AsyncContext: "asyncContext",
    Data: "data",
    Rows: "rows",
    OverwriteIfStale: "overwriteIfStale",
    FileType: "fileType",
    EventType: "eventType",
    Handler: "handler",
    SliceSize: "sliceSize",
    SliceIndex: "sliceIndex",
    ActiveView: "activeView",
    Status: "status",
    PlatformType: "platformType",
    HostType: "hostType",
    ForceConsent: "forceConsent",
    ForceAddAccount: "forceAddAccount",
    AuthChallenge: "authChallenge",
    AllowConsentPrompt: "allowConsentPrompt",
    ForMSGraphAccess: "forMSGraphAccess",
    AllowSignInPrompt: "allowSignInPrompt",
    JsonPayload: "jsonPayload",
    EnableNewHosts: "enableNewHosts",
    AccountTypeFilter: "accountTypeFilter",
    AddinTrustId: "addinTrustId",
    Reserved: "reserved",
    Tcid: "tcid",
    Xml: "xml",
    Namespace: "namespace",
    Prefix: "prefix",
    XPath: "xPath",
    Text: "text",
    ImageLeft: "imageLeft",
    ImageTop: "imageTop",
    ImageWidth: "imageWidth",
    ImageHeight: "imageHeight",
    TaskId: "taskId",
    FieldId: "fieldId",
    FieldValue: "fieldValue",
    ServerUrl: "serverUrl",
    ListName: "listName",
    ResourceId: "resourceId",
    ViewType: "viewType",
    ViewName: "viewName",
    GetRawValue: "getRawValue",
    CellFormat: "cellFormat",
    TableOptions: "tableOptions",
    TaskIndex: "taskIndex",
    ResourceIndex: "resourceIndex",
    CustomFieldId: "customFieldId",
    Url: "url",
    MessageHandler: "messageHandler",
    Width: "width",
    Height: "height",
    RequireHTTPs: "requireHTTPS",
    MessageToParent: "messageToParent",
    DisplayInIframe: "displayInIframe",
    MessageContent: "messageContent",
    HideTitle: "hideTitle",
    UseDeviceIndependentPixels: "useDeviceIndependentPixels",
    PromptBeforeOpen: "promptBeforeOpen",
    EnforceAppDomain: "enforceAppDomain",
    UrlNoHostInfo: "urlNoHostInfo",
    TargetOrigin: "targetOrigin",
    AppCommandInvocationCompletedData: "appCommandInvocationCompletedData",
    Base64: "base64",
    FormId: "formId"
};
OSF.OUtil.setNamespace("DDA", OSF);
OSF.DDA.DocumentMode = {
    ReadOnly: 1,
    ReadWrite: 0
};
OSF.DDA.PropertyDescriptors = {
    AsyncResultStatus: "AsyncResultStatus"
};
OSF.DDA.EventDescriptors = {};
OSF.DDA.ListDescriptors = {};
OSF.DDA.UI = {};
OSF.DDA.getXdmEventName = function OSF_DDA$GetXdmEventName(id, eventType) {
    if (eventType == Microsoft.Office.WebExtension.EventType.BindingSelectionChanged ||
        eventType == Microsoft.Office.WebExtension.EventType.BindingDataChanged ||
        eventType == Microsoft.Office.WebExtension.EventType.DataNodeDeleted ||
        eventType == Microsoft.Office.WebExtension.EventType.DataNodeInserted ||
        eventType == Microsoft.Office.WebExtension.EventType.DataNodeReplaced) {
        return id + "_" + eventType;
    }
    else {
        return eventType;
    }
};
OSF.DDA.MethodDispId = {
    dispidMethodMin: 64,
    dispidGetSelectedDataMethod: 64,
    dispidSetSelectedDataMethod: 65,
    dispidAddBindingFromSelectionMethod: 66,
    dispidAddBindingFromPromptMethod: 67,
    dispidGetBindingMethod: 68,
    dispidReleaseBindingMethod: 69,
    dispidGetBindingDataMethod: 70,
    dispidSetBindingDataMethod: 71,
    dispidAddRowsMethod: 72,
    dispidClearAllRowsMethod: 73,
    dispidGetAllBindingsMethod: 74,
    dispidLoadSettingsMethod: 75,
    dispidSaveSettingsMethod: 76,
    dispidGetDocumentCopyMethod: 77,
    dispidAddBindingFromNamedItemMethod: 78,
    dispidAddColumnsMethod: 79,
    dispidGetDocumentCopyChunkMethod: 80,
    dispidReleaseDocumentCopyMethod: 81,
    dispidNavigateToMethod: 82,
    dispidGetActiveViewMethod: 83,
    dispidGetDocumentThemeMethod: 84,
    dispidGetOfficeThemeMethod: 85,
    dispidGetFilePropertiesMethod: 86,
    dispidClearFormatsMethod: 87,
    dispidSetTableOptionsMethod: 88,
    dispidSetFormatsMethod: 89,
    dispidExecuteRichApiRequestMethod: 93,
    dispidAppCommandInvocationCompletedMethod: 94,
    dispidCloseContainerMethod: 97,
    dispidGetAccessTokenMethod: 98,
    dispidGetAuthContextMethod: 99,
    dispidOpenBrowserWindow: 102,
    dispidCreateDocumentMethod: 105,
    dispidInsertFormMethod: 106,
    dispidDisplayRibbonCalloutAsyncMethod: 109,
    dispidGetSelectedTaskMethod: 110,
    dispidGetSelectedResourceMethod: 111,
    dispidGetTaskMethod: 112,
    dispidGetResourceFieldMethod: 113,
    dispidGetWSSUrlMethod: 114,
    dispidGetTaskFieldMethod: 115,
    dispidGetProjectFieldMethod: 116,
    dispidGetSelectedViewMethod: 117,
    dispidGetTaskByIndexMethod: 118,
    dispidGetResourceByIndexMethod: 119,
    dispidSetTaskFieldMethod: 120,
    dispidSetResourceFieldMethod: 121,
    dispidGetMaxTaskIndexMethod: 122,
    dispidGetMaxResourceIndexMethod: 123,
    dispidCreateTaskMethod: 124,
    dispidAddDataPartMethod: 128,
    dispidGetDataPartByIdMethod: 129,
    dispidGetDataPartsByNamespaceMethod: 130,
    dispidGetDataPartXmlMethod: 131,
    dispidGetDataPartNodesMethod: 132,
    dispidDeleteDataPartMethod: 133,
    dispidGetDataNodeValueMethod: 134,
    dispidGetDataNodeXmlMethod: 135,
    dispidGetDataNodesMethod: 136,
    dispidSetDataNodeValueMethod: 137,
    dispidSetDataNodeXmlMethod: 138,
    dispidAddDataNamespaceMethod: 139,
    dispidGetDataUriByPrefixMethod: 140,
    dispidGetDataPrefixByUriMethod: 141,
    dispidGetDataNodeTextMethod: 142,
    dispidSetDataNodeTextMethod: 143,
    dispidMessageParentMethod: 144,
    dispidSendMessageMethod: 145,
    dispidExecuteFeature: 146,
    dispidQueryFeature: 147,
    dispidMethodMax: 147
};
OSF.DDA.EventDispId = {
    dispidEventMin: 0,
    dispidInitializeEvent: 0,
    dispidSettingsChangedEvent: 1,
    dispidDocumentSelectionChangedEvent: 2,
    dispidBindingSelectionChangedEvent: 3,
    dispidBindingDataChangedEvent: 4,
    dispidDocumentOpenEvent: 5,
    dispidDocumentCloseEvent: 6,
    dispidActiveViewChangedEvent: 7,
    dispidDocumentThemeChangedEvent: 8,
    dispidOfficeThemeChangedEvent: 9,
    dispidDialogMessageReceivedEvent: 10,
    dispidDialogNotificationShownInAddinEvent: 11,
    dispidDialogParentMessageReceivedEvent: 12,
    dispidObjectDeletedEvent: 13,
    dispidObjectSelectionChangedEvent: 14,
    dispidObjectDataChangedEvent: 15,
    dispidContentControlAddedEvent: 16,
    dispidActivationStatusChangedEvent: 32,
    dispidRichApiMessageEvent: 33,
    dispidAppCommandInvokedEvent: 39,
    dispidOlkItemSelectedChangedEvent: 46,
    dispidOlkRecipientsChangedEvent: 47,
    dispidOlkAppointmentTimeChangedEvent: 48,
    dispidOlkRecurrenceChangedEvent: 49,
    dispidOlkAttachmentsChangedEvent: 50,
    dispidOlkEnhancedLocationsChangedEvent: 51,
    dispidOlkInfobarClickedEvent: 52,
    dispidTaskSelectionChangedEvent: 56,
    dispidResourceSelectionChangedEvent: 57,
    dispidViewSelectionChangedEvent: 58,
    dispidDataNodeAddedEvent: 60,
    dispidDataNodeReplacedEvent: 61,
    dispidDataNodeDeletedEvent: 62,
    dispidEventMax: 63
};
OSF.DDA.ErrorCodeManager = (function () {
    var _errorMappings = {};
    return {
        getErrorArgs: function OSF_DDA_ErrorCodeManager$getErrorArgs(errorCode) {
            var errorArgs = _errorMappings[errorCode];
            if (!errorArgs) {
                errorArgs = _errorMappings[this.errorCodes.ooeInternalError];
            }
            else {
                if (!errorArgs.name) {
                    errorArgs.name = _errorMappings[this.errorCodes.ooeInternalError].name;
                }
                if (!errorArgs.message) {
                    errorArgs.message = _errorMappings[this.errorCodes.ooeInternalError].message;
                }
            }
            return errorArgs;
        },
        addErrorMessage: function OSF_DDA_ErrorCodeManager$addErrorMessage(errorCode, errorNameMessage) {
            _errorMappings[errorCode] = errorNameMessage;
        },
        errorCodes: {
            ooeSuccess: 0,
            ooeChunkResult: 1,
            ooeCoercionTypeNotSupported: 1000,
            ooeGetSelectionNotMatchDataType: 1001,
            ooeCoercionTypeNotMatchBinding: 1002,
            ooeInvalidGetRowColumnCounts: 1003,
            ooeSelectionNotSupportCoercionType: 1004,
            ooeInvalidGetStartRowColumn: 1005,
            ooeNonUniformPartialGetNotSupported: 1006,
            ooeGetDataIsTooLarge: 1008,
            ooeFileTypeNotSupported: 1009,
            ooeGetDataParametersConflict: 1010,
            ooeInvalidGetColumns: 1011,
            ooeInvalidGetRows: 1012,
            ooeInvalidReadForBlankRow: 1013,
            ooeUnsupportedDataObject: 2000,
            ooeCannotWriteToSelection: 2001,
            ooeDataNotMatchSelection: 2002,
            ooeOverwriteWorksheetData: 2003,
            ooeDataNotMatchBindingSize: 2004,
            ooeInvalidSetStartRowColumn: 2005,
            ooeInvalidDataFormat: 2006,
            ooeDataNotMatchCoercionType: 2007,
            ooeDataNotMatchBindingType: 2008,
            ooeSetDataIsTooLarge: 2009,
            ooeNonUniformPartialSetNotSupported: 2010,
            ooeInvalidSetColumns: 2011,
            ooeInvalidSetRows: 2012,
            ooeSetDataParametersConflict: 2013,
            ooeCellDataAmountBeyondLimits: 2014,
            ooeSelectionCannotBound: 3000,
            ooeBindingNotExist: 3002,
            ooeBindingToMultipleSelection: 3003,
            ooeInvalidSelectionForBindingType: 3004,
            ooeOperationNotSupportedOnThisBindingType: 3005,
            ooeNamedItemNotFound: 3006,
            ooeMultipleNamedItemFound: 3007,
            ooeInvalidNamedItemForBindingType: 3008,
            ooeUnknownBindingType: 3009,
            ooeOperationNotSupportedOnMatrixData: 3010,
            ooeInvalidColumnsForBinding: 3011,
            ooeSettingNameNotExist: 4000,
            ooeSettingsCannotSave: 4001,
            ooeSettingsAreStale: 4002,
            ooeOperationNotSupported: 5000,
            ooeInternalError: 5001,
            ooeDocumentReadOnly: 5002,
            ooeEventHandlerNotExist: 5003,
            ooeInvalidApiCallInContext: 5004,
            ooeShuttingDown: 5005,
            ooeUnsupportedEnumeration: 5007,
            ooeIndexOutOfRange: 5008,
            ooeBrowserAPINotSupported: 5009,
            ooeInvalidParam: 5010,
            ooeRequestTimeout: 5011,
            ooeInvalidOrTimedOutSession: 5012,
            ooeInvalidApiArguments: 5013,
            ooeOperationCancelled: 5014,
            ooeWorkbookHidden: 5015,
            ooeWriteNotSupportedWhenModalDialogOpen: 5016,
            ooeTooManyIncompleteRequests: 5100,
            ooeRequestTokenUnavailable: 5101,
            ooeActivityLimitReached: 5102,
            ooeRequestPayloadSizeLimitExceeded: 5103,
            ooeResponsePayloadSizeLimitExceeded: 5104,
            ooeCustomXmlNodeNotFound: 6000,
            ooeCustomXmlError: 6100,
            ooeCustomXmlExceedQuota: 6101,
            ooeCustomXmlOutOfDate: 6102,
            ooeNoCapability: 7000,
            ooeCannotNavTo: 7001,
            ooeSpecifiedIdNotExist: 7002,
            ooeNavOutOfBound: 7004,
            ooeElementMissing: 8000,
            ooeProtectedError: 8001,
            ooeInvalidCellsValue: 8010,
            ooeInvalidTableOptionValue: 8011,
            ooeInvalidFormatValue: 8012,
            ooeRowIndexOutOfRange: 8020,
            ooeColIndexOutOfRange: 8021,
            ooeFormatValueOutOfRange: 8022,
            ooeCellFormatAmountBeyondLimits: 8023,
            ooeMemoryFileLimit: 11000,
            ooeNetworkProblemRetrieveFile: 11001,
            ooeInvalidSliceSize: 11002,
            ooeInvalidCallback: 11101,
            ooeInvalidWidth: 12000,
            ooeInvalidHeight: 12001,
            ooeNavigationError: 12002,
            ooeInvalidScheme: 12003,
            ooeAppDomains: 12004,
            ooeRequireHTTPS: 12005,
            ooeWebDialogClosed: 12006,
            ooeDialogAlreadyOpened: 12007,
            ooeEndUserAllow: 12008,
            ooeEndUserIgnore: 12009,
            ooeNotUILessDialog: 12010,
            ooeCrossZone: 12011,
            ooeNotSSOAgave: 13000,
            ooeSSOUserNotSignedIn: 13001,
            ooeSSOUserAborted: 13002,
            ooeSSOUnsupportedUserIdentity: 13003,
            ooeSSOInvalidResourceUrl: 13004,
            ooeSSOInvalidGrant: 13005,
            ooeSSOClientError: 13006,
            ooeSSOServerError: 13007,
            ooeAddinIsAlreadyRequestingToken: 13008,
            ooeSSOUserConsentNotSupportedByCurrentAddinCategory: 13009,
            ooeSSOConnectionLost: 13010,
            ooeResourceNotAllowed: 13011,
            ooeSSOUnsupportedPlatform: 13012,
            ooeSSOCallThrottled: 13013,
            ooeAccessDenied: 13990,
            ooeGeneralException: 13991
        },
        initializeErrorMessages: function OSF_DDA_ErrorCodeManager$initializeErrorMessages(stringNS) {
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCoercionTypeNotSupported] = { name: stringNS.L_InvalidCoercion, message: stringNS.L_CoercionTypeNotSupported };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeGetSelectionNotMatchDataType] = { name: stringNS.L_DataReadError, message: stringNS.L_GetSelectionNotSupported };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCoercionTypeNotMatchBinding] = { name: stringNS.L_InvalidCoercion, message: stringNS.L_CoercionTypeNotMatchBinding };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidGetRowColumnCounts] = { name: stringNS.L_DataReadError, message: stringNS.L_InvalidGetRowColumnCounts };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSelectionNotSupportCoercionType] = { name: stringNS.L_DataReadError, message: stringNS.L_SelectionNotSupportCoercionType };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidGetStartRowColumn] = { name: stringNS.L_DataReadError, message: stringNS.L_InvalidGetStartRowColumn };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNonUniformPartialGetNotSupported] = { name: stringNS.L_DataReadError, message: stringNS.L_NonUniformPartialGetNotSupported };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeGetDataIsTooLarge] = { name: stringNS.L_DataReadError, message: stringNS.L_GetDataIsTooLarge };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeFileTypeNotSupported] = { name: stringNS.L_DataReadError, message: stringNS.L_FileTypeNotSupported };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeGetDataParametersConflict] = { name: stringNS.L_DataReadError, message: stringNS.L_GetDataParametersConflict };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidGetColumns] = { name: stringNS.L_DataReadError, message: stringNS.L_InvalidGetColumns };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidGetRows] = { name: stringNS.L_DataReadError, message: stringNS.L_InvalidGetRows };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidReadForBlankRow] = { name: stringNS.L_DataReadError, message: stringNS.L_InvalidReadForBlankRow };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeUnsupportedDataObject] = { name: stringNS.L_DataWriteError, message: stringNS.L_UnsupportedDataObject };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCannotWriteToSelection] = { name: stringNS.L_DataWriteError, message: stringNS.L_CannotWriteToSelection };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDataNotMatchSelection] = { name: stringNS.L_DataWriteError, message: stringNS.L_DataNotMatchSelection };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeOverwriteWorksheetData] = { name: stringNS.L_DataWriteError, message: stringNS.L_OverwriteWorksheetData };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDataNotMatchBindingSize] = { name: stringNS.L_DataWriteError, message: stringNS.L_DataNotMatchBindingSize };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSetStartRowColumn] = { name: stringNS.L_DataWriteError, message: stringNS.L_InvalidSetStartRowColumn };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidDataFormat] = { name: stringNS.L_InvalidFormat, message: stringNS.L_InvalidDataFormat };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDataNotMatchCoercionType] = { name: stringNS.L_InvalidDataObject, message: stringNS.L_DataNotMatchCoercionType };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDataNotMatchBindingType] = { name: stringNS.L_InvalidDataObject, message: stringNS.L_DataNotMatchBindingType };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSetDataIsTooLarge] = { name: stringNS.L_DataWriteError, message: stringNS.L_SetDataIsTooLarge };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNonUniformPartialSetNotSupported] = { name: stringNS.L_DataWriteError, message: stringNS.L_NonUniformPartialSetNotSupported };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSetColumns] = { name: stringNS.L_DataWriteError, message: stringNS.L_InvalidSetColumns };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSetRows] = { name: stringNS.L_DataWriteError, message: stringNS.L_InvalidSetRows };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSetDataParametersConflict] = { name: stringNS.L_DataWriteError, message: stringNS.L_SetDataParametersConflict };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSelectionCannotBound] = { name: stringNS.L_BindingCreationError, message: stringNS.L_SelectionCannotBound };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeBindingNotExist] = { name: stringNS.L_InvalidBindingError, message: stringNS.L_BindingNotExist };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeBindingToMultipleSelection] = { name: stringNS.L_BindingCreationError, message: stringNS.L_BindingToMultipleSelection };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSelectionForBindingType] = { name: stringNS.L_BindingCreationError, message: stringNS.L_InvalidSelectionForBindingType };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeOperationNotSupportedOnThisBindingType] = { name: stringNS.L_InvalidBindingOperation, message: stringNS.L_OperationNotSupportedOnThisBindingType };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNamedItemNotFound] = { name: stringNS.L_BindingCreationError, message: stringNS.L_NamedItemNotFound };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeMultipleNamedItemFound] = { name: stringNS.L_BindingCreationError, message: stringNS.L_MultipleNamedItemFound };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidNamedItemForBindingType] = { name: stringNS.L_BindingCreationError, message: stringNS.L_InvalidNamedItemForBindingType };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeUnknownBindingType] = { name: stringNS.L_InvalidBinding, message: stringNS.L_UnknownBindingType };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeOperationNotSupportedOnMatrixData] = { name: stringNS.L_InvalidBindingOperation, message: stringNS.L_OperationNotSupportedOnMatrixData };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidColumnsForBinding] = { name: stringNS.L_InvalidBinding, message: stringNS.L_InvalidColumnsForBinding };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSettingNameNotExist] = { name: stringNS.L_ReadSettingsError, message: stringNS.L_SettingNameNotExist };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSettingsCannotSave] = { name: stringNS.L_SaveSettingsError, message: stringNS.L_SettingsCannotSave };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSettingsAreStale] = { name: stringNS.L_SettingsStaleError, message: stringNS.L_SettingsAreStale };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeOperationNotSupported] = { name: stringNS.L_HostError, message: stringNS.L_OperationNotSupported };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError] = { name: stringNS.L_InternalError, message: stringNS.L_InternalErrorDescription };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDocumentReadOnly] = { name: stringNS.L_PermissionDenied, message: stringNS.L_DocumentReadOnly };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeEventHandlerNotExist] = { name: stringNS.L_EventRegistrationError, message: stringNS.L_EventHandlerNotExist };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidApiCallInContext] = { name: stringNS.L_InvalidAPICall, message: stringNS.L_InvalidApiCallInContext };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeShuttingDown] = { name: stringNS.L_ShuttingDown, message: stringNS.L_ShuttingDown };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeUnsupportedEnumeration] = { name: stringNS.L_UnsupportedEnumeration, message: stringNS.L_UnsupportedEnumerationMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeIndexOutOfRange] = { name: stringNS.L_IndexOutOfRange, message: stringNS.L_IndexOutOfRange };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeBrowserAPINotSupported] = { name: stringNS.L_APINotSupported, message: stringNS.L_BrowserAPINotSupported };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeRequestTimeout] = { name: stringNS.L_APICallFailed, message: stringNS.L_RequestTimeout };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidOrTimedOutSession] = { name: stringNS.L_InvalidOrTimedOutSession, message: stringNS.L_InvalidOrTimedOutSessionMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidApiArguments] = { name: stringNS.L_APICallFailed, message: stringNS.L_InvalidApiArgumentsMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeWorkbookHidden] = { name: stringNS.L_APICallFailed, message: stringNS.L_WorkbookHiddenMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeWriteNotSupportedWhenModalDialogOpen] = { name: stringNS.L_APICallFailed, message: stringNS.L_WriteNotSupportedWhenModalDialogOpen };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeTooManyIncompleteRequests] = { name: stringNS.L_APICallFailed, message: stringNS.L_TooManyIncompleteRequests };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeRequestTokenUnavailable] = { name: stringNS.L_APICallFailed, message: stringNS.L_RequestTokenUnavailable };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeActivityLimitReached] = { name: stringNS.L_APICallFailed, message: stringNS.L_ActivityLimitReached };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeRequestPayloadSizeLimitExceeded] = { name: stringNS.L_APICallFailed, message: stringNS.L_RequestPayloadSizeLimitExceededMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeResponsePayloadSizeLimitExceeded] = { name: stringNS.L_APICallFailed, message: stringNS.L_ResponsePayloadSizeLimitExceededMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCustomXmlNodeNotFound] = { name: stringNS.L_InvalidNode, message: stringNS.L_CustomXmlNodeNotFound };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCustomXmlError] = { name: stringNS.L_CustomXmlError, message: stringNS.L_CustomXmlError };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCustomXmlExceedQuota] = { name: stringNS.L_CustomXmlExceedQuotaName, message: stringNS.L_CustomXmlExceedQuotaMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCustomXmlOutOfDate] = { name: stringNS.L_CustomXmlOutOfDateName, message: stringNS.L_CustomXmlOutOfDateMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNoCapability] = { name: stringNS.L_PermissionDenied, message: stringNS.L_NoCapability };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCannotNavTo] = { name: stringNS.L_CannotNavigateTo, message: stringNS.L_CannotNavigateTo };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSpecifiedIdNotExist] = { name: stringNS.L_SpecifiedIdNotExist, message: stringNS.L_SpecifiedIdNotExist };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNavOutOfBound] = { name: stringNS.L_NavOutOfBound, message: stringNS.L_NavOutOfBound };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCellDataAmountBeyondLimits] = { name: stringNS.L_DataWriteReminder, message: stringNS.L_CellDataAmountBeyondLimits };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeElementMissing] = { name: stringNS.L_MissingParameter, message: stringNS.L_ElementMissing };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeProtectedError] = { name: stringNS.L_PermissionDenied, message: stringNS.L_NoCapability };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidCellsValue] = { name: stringNS.L_InvalidValue, message: stringNS.L_InvalidCellsValue };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidTableOptionValue] = { name: stringNS.L_InvalidValue, message: stringNS.L_InvalidTableOptionValue };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidFormatValue] = { name: stringNS.L_InvalidValue, message: stringNS.L_InvalidFormatValue };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeRowIndexOutOfRange] = { name: stringNS.L_OutOfRange, message: stringNS.L_RowIndexOutOfRange };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeColIndexOutOfRange] = { name: stringNS.L_OutOfRange, message: stringNS.L_ColIndexOutOfRange };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeFormatValueOutOfRange] = { name: stringNS.L_OutOfRange, message: stringNS.L_FormatValueOutOfRange };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCellFormatAmountBeyondLimits] = { name: stringNS.L_FormattingReminder, message: stringNS.L_CellFormatAmountBeyondLimits };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeMemoryFileLimit] = { name: stringNS.L_MemoryLimit, message: stringNS.L_CloseFileBeforeRetrieve };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNetworkProblemRetrieveFile] = { name: stringNS.L_NetworkProblem, message: stringNS.L_NetworkProblemRetrieveFile };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSliceSize] = { name: stringNS.L_InvalidValue, message: stringNS.L_SliceSizeNotSupported };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeDialogAlreadyOpened] = { name: stringNS.L_DisplayDialogError, message: stringNS.L_DialogAlreadyOpened };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidWidth] = { name: stringNS.L_IndexOutOfRange, message: stringNS.L_IndexOutOfRange };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidHeight] = { name: stringNS.L_IndexOutOfRange, message: stringNS.L_IndexOutOfRange };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNavigationError] = { name: stringNS.L_DisplayDialogError, message: stringNS.L_NetworkProblem };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidScheme] = { name: stringNS.L_DialogNavigateError, message: stringNS.L_DialogInvalidScheme };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeAppDomains] = { name: stringNS.L_DisplayDialogError, message: stringNS.L_DialogAddressNotTrusted };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeRequireHTTPS] = { name: stringNS.L_DisplayDialogError, message: stringNS.L_DialogRequireHTTPS };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeEndUserIgnore] = { name: stringNS.L_DisplayDialogError, message: stringNS.L_UserClickIgnore };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeCrossZone] = { name: stringNS.L_DisplayDialogError, message: stringNS.L_NewWindowCrossZoneErrorString };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeNotSSOAgave] = { name: stringNS.L_APINotSupported, message: stringNS.L_InvalidSSOAddinMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOUserNotSignedIn] = { name: stringNS.L_UserNotSignedIn, message: stringNS.L_UserNotSignedIn };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOUserAborted] = { name: stringNS.L_UserAborted, message: stringNS.L_UserAbortedMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOUnsupportedUserIdentity] = { name: stringNS.L_UnsupportedUserIdentity, message: stringNS.L_UnsupportedUserIdentityMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOInvalidResourceUrl] = { name: stringNS.L_InvalidResourceUrl, message: stringNS.L_InvalidResourceUrlMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOInvalidGrant] = { name: stringNS.L_InvalidGrant, message: stringNS.L_InvalidGrantMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOClientError] = { name: stringNS.L_SSOClientError, message: stringNS.L_SSOClientErrorMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOServerError] = { name: stringNS.L_SSOServerError, message: stringNS.L_SSOServerErrorMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeAddinIsAlreadyRequestingToken] = { name: stringNS.L_AddinIsAlreadyRequestingToken, message: stringNS.L_AddinIsAlreadyRequestingTokenMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOUserConsentNotSupportedByCurrentAddinCategory] = { name: stringNS.L_SSOUserConsentNotSupportedByCurrentAddinCategory, message: stringNS.L_SSOUserConsentNotSupportedByCurrentAddinCategoryMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOConnectionLost] = { name: stringNS.L_SSOConnectionLostError, message: stringNS.L_SSOConnectionLostErrorMessage };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOUnsupportedPlatform] = { name: stringNS.L_APINotSupported, message: stringNS.L_SSOUnsupportedPlatform };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeSSOCallThrottled] = { name: stringNS.L_APICallFailed, message: stringNS.L_RequestTokenUnavailable };
            _errorMappings[OSF.DDA.ErrorCodeManager.errorCodes.ooeOperationCancelled] = { name: stringNS.L_OperationCancelledError, message: stringNS.L_OperationCancelledErrorMessage };
        }
    };
})();
(function (OfficeExt) {
    var Requirement;
    (function (Requirement) {
        var RequirementVersion = (function () {
            function RequirementVersion() {
            }
            return RequirementVersion;
        }());
        Requirement.RequirementVersion = RequirementVersion;
        var RequirementMatrix = (function () {
            function RequirementMatrix(_setMap) {
                this.isSetSupported = function _isSetSupported(name, minVersion) {
                    if (name == undefined) {
                        return false;
                    }
                    if (minVersion == undefined) {
                        minVersion = 0;
                    }
                    var setSupportArray = this._setMap;
                    var sets = setSupportArray._sets;
                    if (sets.hasOwnProperty(name.toLowerCase())) {
                        var setMaxVersion = sets[name.toLowerCase()];
                        try {
                            var setMaxVersionNum = this._getVersion(setMaxVersion);
                            minVersion = minVersion + "";
                            var minVersionNum = this._getVersion(minVersion);
                            if (setMaxVersionNum.major > 0 && setMaxVersionNum.major > minVersionNum.major) {
                                return true;
                            }
                            if (setMaxVersionNum.major > 0 &&
                                setMaxVersionNum.minor >= 0 &&
                                setMaxVersionNum.major == minVersionNum.major &&
                                setMaxVersionNum.minor >= minVersionNum.minor) {
                                return true;
                            }
                        }
                        catch (e) {
                            return false;
                        }
                    }
                    return false;
                };
                this._getVersion = function (version) {
                    version = version + "";
                    var temp = version.split(".");
                    var major = 0;
                    var minor = 0;
                    if (temp.length < 2 && isNaN(Number(version))) {
                        throw "version format incorrect";
                    }
                    else {
                        major = Number(temp[0]);
                        if (temp.length >= 2) {
                            minor = Number(temp[1]);
                        }
                        if (isNaN(major) || isNaN(minor)) {
                            throw "version format incorrect";
                        }
                    }
                    var result = { "minor": minor, "major": major };
                    return result;
                };
                this._setMap = _setMap;
                this.isSetSupported = this.isSetSupported.bind(this);
            }
            return RequirementMatrix;
        }());
        Requirement.RequirementMatrix = RequirementMatrix;
        var DefaultSetRequirement = (function () {
            function DefaultSetRequirement(setMap) {
                this._addSetMap = function DefaultSetRequirement_addSetMap(addedSet) {
                    for (var name in addedSet) {
                        this._sets[name] = addedSet[name];
                    }
                };
                this._sets = setMap;
            }
            return DefaultSetRequirement;
        }());
        Requirement.DefaultSetRequirement = DefaultSetRequirement;
        var DefaultRequiredDialogSetRequirement = (function (_super) {
            __extends(DefaultRequiredDialogSetRequirement, _super);
            function DefaultRequiredDialogSetRequirement() {
                return _super.call(this, {
                    "dialogapi": 1.1
                }) || this;
            }
            return DefaultRequiredDialogSetRequirement;
        }(DefaultSetRequirement));
        Requirement.DefaultRequiredDialogSetRequirement = DefaultRequiredDialogSetRequirement;
        var DefaultOptionalDialogSetRequirement = (function (_super) {
            __extends(DefaultOptionalDialogSetRequirement, _super);
            function DefaultOptionalDialogSetRequirement() {
                return _super.call(this, {
                    "dialogorigin": 1.1
                }) || this;
            }
            return DefaultOptionalDialogSetRequirement;
        }(DefaultSetRequirement));
        Requirement.DefaultOptionalDialogSetRequirement = DefaultOptionalDialogSetRequirement;
        var ExcelClientDefaultSetRequirement = (function (_super) {
            __extends(ExcelClientDefaultSetRequirement, _super);
            function ExcelClientDefaultSetRequirement() {
                return _super.call(this, {
                    "bindingevents": 1.1,
                    "documentevents": 1.1,
                    "excelapi": 1.1,
                    "matrixbindings": 1.1,
                    "matrixcoercion": 1.1,
                    "selection": 1.1,
                    "settings": 1.1,
                    "tablebindings": 1.1,
                    "tablecoercion": 1.1,
                    "textbindings": 1.1,
                    "textcoercion": 1.1
                }) || this;
            }
            return ExcelClientDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.ExcelClientDefaultSetRequirement = ExcelClientDefaultSetRequirement;
        var ExcelClientV1DefaultSetRequirement = (function (_super) {
            __extends(ExcelClientV1DefaultSetRequirement, _super);
            function ExcelClientV1DefaultSetRequirement() {
                var _this = _super.call(this) || this;
                _this._addSetMap({
                    "imagecoercion": 1.1
                });
                return _this;
            }
            return ExcelClientV1DefaultSetRequirement;
        }(ExcelClientDefaultSetRequirement));
        Requirement.ExcelClientV1DefaultSetRequirement = ExcelClientV1DefaultSetRequirement;
        var OutlookClientDefaultSetRequirement = (function (_super) {
            __extends(OutlookClientDefaultSetRequirement, _super);
            function OutlookClientDefaultSetRequirement() {
                return _super.call(this, {
                    "mailbox": 1.3
                }) || this;
            }
            return OutlookClientDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.OutlookClientDefaultSetRequirement = OutlookClientDefaultSetRequirement;
        var WordClientDefaultSetRequirement = (function (_super) {
            __extends(WordClientDefaultSetRequirement, _super);
            function WordClientDefaultSetRequirement() {
                return _super.call(this, {
                    "bindingevents": 1.1,
                    "compressedfile": 1.1,
                    "customxmlparts": 1.1,
                    "documentevents": 1.1,
                    "file": 1.1,
                    "htmlcoercion": 1.1,
                    "matrixbindings": 1.1,
                    "matrixcoercion": 1.1,
                    "ooxmlcoercion": 1.1,
                    "pdffile": 1.1,
                    "selection": 1.1,
                    "settings": 1.1,
                    "tablebindings": 1.1,
                    "tablecoercion": 1.1,
                    "textbindings": 1.1,
                    "textcoercion": 1.1,
                    "textfile": 1.1,
                    "wordapi": 1.1
                }) || this;
            }
            return WordClientDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.WordClientDefaultSetRequirement = WordClientDefaultSetRequirement;
        var WordClientV1DefaultSetRequirement = (function (_super) {
            __extends(WordClientV1DefaultSetRequirement, _super);
            function WordClientV1DefaultSetRequirement() {
                var _this = _super.call(this) || this;
                _this._addSetMap({
                    "customxmlparts": 1.2,
                    "wordapi": 1.2,
                    "imagecoercion": 1.1
                });
                return _this;
            }
            return WordClientV1DefaultSetRequirement;
        }(WordClientDefaultSetRequirement));
        Requirement.WordClientV1DefaultSetRequirement = WordClientV1DefaultSetRequirement;
        var PowerpointClientDefaultSetRequirement = (function (_super) {
            __extends(PowerpointClientDefaultSetRequirement, _super);
            function PowerpointClientDefaultSetRequirement() {
                return _super.call(this, {
                    "activeview": 1.1,
                    "compressedfile": 1.1,
                    "documentevents": 1.1,
                    "file": 1.1,
                    "pdffile": 1.1,
                    "selection": 1.1,
                    "settings": 1.1,
                    "textcoercion": 1.1
                }) || this;
            }
            return PowerpointClientDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.PowerpointClientDefaultSetRequirement = PowerpointClientDefaultSetRequirement;
        var PowerpointClientV1DefaultSetRequirement = (function (_super) {
            __extends(PowerpointClientV1DefaultSetRequirement, _super);
            function PowerpointClientV1DefaultSetRequirement() {
                var _this = _super.call(this) || this;
                _this._addSetMap({
                    "imagecoercion": 1.1
                });
                return _this;
            }
            return PowerpointClientV1DefaultSetRequirement;
        }(PowerpointClientDefaultSetRequirement));
        Requirement.PowerpointClientV1DefaultSetRequirement = PowerpointClientV1DefaultSetRequirement;
        var ProjectClientDefaultSetRequirement = (function (_super) {
            __extends(ProjectClientDefaultSetRequirement, _super);
            function ProjectClientDefaultSetRequirement() {
                return _super.call(this, {
                    "selection": 1.1,
                    "textcoercion": 1.1
                }) || this;
            }
            return ProjectClientDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.ProjectClientDefaultSetRequirement = ProjectClientDefaultSetRequirement;
        var ExcelWebDefaultSetRequirement = (function (_super) {
            __extends(ExcelWebDefaultSetRequirement, _super);
            function ExcelWebDefaultSetRequirement() {
                return _super.call(this, {
                    "bindingevents": 1.1,
                    "documentevents": 1.1,
                    "matrixbindings": 1.1,
                    "matrixcoercion": 1.1,
                    "selection": 1.1,
                    "settings": 1.1,
                    "tablebindings": 1.1,
                    "tablecoercion": 1.1,
                    "textbindings": 1.1,
                    "textcoercion": 1.1,
                    "file": 1.1
                }) || this;
            }
            return ExcelWebDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.ExcelWebDefaultSetRequirement = ExcelWebDefaultSetRequirement;
        var WordWebDefaultSetRequirement = (function (_super) {
            __extends(WordWebDefaultSetRequirement, _super);
            function WordWebDefaultSetRequirement() {
                return _super.call(this, {
                    "compressedfile": 1.1,
                    "documentevents": 1.1,
                    "file": 1.1,
                    "imagecoercion": 1.1,
                    "matrixcoercion": 1.1,
                    "ooxmlcoercion": 1.1,
                    "pdffile": 1.1,
                    "selection": 1.1,
                    "settings": 1.1,
                    "tablecoercion": 1.1,
                    "textcoercion": 1.1,
                    "textfile": 1.1
                }) || this;
            }
            return WordWebDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.WordWebDefaultSetRequirement = WordWebDefaultSetRequirement;
        var PowerpointWebDefaultSetRequirement = (function (_super) {
            __extends(PowerpointWebDefaultSetRequirement, _super);
            function PowerpointWebDefaultSetRequirement() {
                return _super.call(this, {
                    "activeview": 1.1,
                    "settings": 1.1
                }) || this;
            }
            return PowerpointWebDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.PowerpointWebDefaultSetRequirement = PowerpointWebDefaultSetRequirement;
        var OutlookWebDefaultSetRequirement = (function (_super) {
            __extends(OutlookWebDefaultSetRequirement, _super);
            function OutlookWebDefaultSetRequirement() {
                return _super.call(this, {
                    "mailbox": 1.3
                }) || this;
            }
            return OutlookWebDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.OutlookWebDefaultSetRequirement = OutlookWebDefaultSetRequirement;
        var SwayWebDefaultSetRequirement = (function (_super) {
            __extends(SwayWebDefaultSetRequirement, _super);
            function SwayWebDefaultSetRequirement() {
                return _super.call(this, {
                    "activeview": 1.1,
                    "documentevents": 1.1,
                    "selection": 1.1,
                    "settings": 1.1,
                    "textcoercion": 1.1
                }) || this;
            }
            return SwayWebDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.SwayWebDefaultSetRequirement = SwayWebDefaultSetRequirement;
        var AccessWebDefaultSetRequirement = (function (_super) {
            __extends(AccessWebDefaultSetRequirement, _super);
            function AccessWebDefaultSetRequirement() {
                return _super.call(this, {
                    "bindingevents": 1.1,
                    "partialtablebindings": 1.1,
                    "settings": 1.1,
                    "tablebindings": 1.1,
                    "tablecoercion": 1.1
                }) || this;
            }
            return AccessWebDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.AccessWebDefaultSetRequirement = AccessWebDefaultSetRequirement;
        var ExcelIOSDefaultSetRequirement = (function (_super) {
            __extends(ExcelIOSDefaultSetRequirement, _super);
            function ExcelIOSDefaultSetRequirement() {
                return _super.call(this, {
                    "bindingevents": 1.1,
                    "documentevents": 1.1,
                    "matrixbindings": 1.1,
                    "matrixcoercion": 1.1,
                    "selection": 1.1,
                    "settings": 1.1,
                    "tablebindings": 1.1,
                    "tablecoercion": 1.1,
                    "textbindings": 1.1,
                    "textcoercion": 1.1
                }) || this;
            }
            return ExcelIOSDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.ExcelIOSDefaultSetRequirement = ExcelIOSDefaultSetRequirement;
        var WordIOSDefaultSetRequirement = (function (_super) {
            __extends(WordIOSDefaultSetRequirement, _super);
            function WordIOSDefaultSetRequirement() {
                return _super.call(this, {
                    "bindingevents": 1.1,
                    "compressedfile": 1.1,
                    "customxmlparts": 1.1,
                    "documentevents": 1.1,
                    "file": 1.1,
                    "htmlcoercion": 1.1,
                    "matrixbindings": 1.1,
                    "matrixcoercion": 1.1,
                    "ooxmlcoercion": 1.1,
                    "pdffile": 1.1,
                    "selection": 1.1,
                    "settings": 1.1,
                    "tablebindings": 1.1,
                    "tablecoercion": 1.1,
                    "textbindings": 1.1,
                    "textcoercion": 1.1,
                    "textfile": 1.1
                }) || this;
            }
            return WordIOSDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.WordIOSDefaultSetRequirement = WordIOSDefaultSetRequirement;
        var WordIOSV1DefaultSetRequirement = (function (_super) {
            __extends(WordIOSV1DefaultSetRequirement, _super);
            function WordIOSV1DefaultSetRequirement() {
                var _this = _super.call(this) || this;
                _this._addSetMap({
                    "customxmlparts": 1.2,
                    "wordapi": 1.2
                });
                return _this;
            }
            return WordIOSV1DefaultSetRequirement;
        }(WordIOSDefaultSetRequirement));
        Requirement.WordIOSV1DefaultSetRequirement = WordIOSV1DefaultSetRequirement;
        var PowerpointIOSDefaultSetRequirement = (function (_super) {
            __extends(PowerpointIOSDefaultSetRequirement, _super);
            function PowerpointIOSDefaultSetRequirement() {
                return _super.call(this, {
                    "activeview": 1.1,
                    "compressedfile": 1.1,
                    "documentevents": 1.1,
                    "file": 1.1,
                    "pdffile": 1.1,
                    "selection": 1.1,
                    "settings": 1.1,
                    "textcoercion": 1.1
                }) || this;
            }
            return PowerpointIOSDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.PowerpointIOSDefaultSetRequirement = PowerpointIOSDefaultSetRequirement;
        var OutlookIOSDefaultSetRequirement = (function (_super) {
            __extends(OutlookIOSDefaultSetRequirement, _super);
            function OutlookIOSDefaultSetRequirement() {
                return _super.call(this, {
                    "mailbox": 1.1
                }) || this;
            }
            return OutlookIOSDefaultSetRequirement;
        }(DefaultSetRequirement));
        Requirement.OutlookIOSDefaultSetRequirement = OutlookIOSDefaultSetRequirement;
        var RequirementsMatrixFactory = (function () {
            function RequirementsMatrixFactory() {
            }
            RequirementsMatrixFactory.initializeOsfDda = function () {
                OSF.OUtil.setNamespace("Requirement", OSF.DDA);
            };
            RequirementsMatrixFactory.getDefaultRequirementMatrix = function (appContext) {
                this.initializeDefaultSetMatrix();
                var defaultRequirementMatrix = undefined;
                var clientRequirement = appContext.get_requirementMatrix();
                if (clientRequirement != undefined && clientRequirement.length > 0 && typeof (JSON) !== "undefined") {
                    var matrixItem = JSON.parse(appContext.get_requirementMatrix().toLowerCase());
                    defaultRequirementMatrix = new RequirementMatrix(new DefaultSetRequirement(matrixItem));
                }
                else {
                    var appLocator = RequirementsMatrixFactory.getClientFullVersionString(appContext);
                    if (RequirementsMatrixFactory.DefaultSetArrayMatrix != undefined && RequirementsMatrixFactory.DefaultSetArrayMatrix[appLocator] != undefined) {
                        defaultRequirementMatrix = new RequirementMatrix(RequirementsMatrixFactory.DefaultSetArrayMatrix[appLocator]);
                    }
                    else {
                        defaultRequirementMatrix = new RequirementMatrix(new DefaultSetRequirement({}));
                    }
                }
                return defaultRequirementMatrix;
            };
            RequirementsMatrixFactory.getDefaultDialogRequirementMatrix = function (appContext) {
                var setRequirements = undefined;
                var clientRequirement = appContext.get_dialogRequirementMatrix();
                if (clientRequirement != undefined && clientRequirement.length > 0 && typeof (JSON) !== "undefined") {
                    var matrixItem = JSON.parse(appContext.get_requirementMatrix().toLowerCase());
                    setRequirements = new DefaultSetRequirement(matrixItem);
                }
                else {
                    setRequirements = new DefaultRequiredDialogSetRequirement();
                    var mainRequirement = appContext.get_requirementMatrix();
                    if (mainRequirement != undefined && mainRequirement.length > 0 && typeof (JSON) !== "undefined") {
                        var matrixItem = JSON.parse(mainRequirement.toLowerCase());
                        for (var name in setRequirements._sets) {
                            if (matrixItem.hasOwnProperty(name)) {
                                setRequirements._sets[name] = matrixItem[name];
                            }
                        }
                        var dialogOptionalSetRequirement = new DefaultOptionalDialogSetRequirement();
                        for (var name in dialogOptionalSetRequirement._sets) {
                            if (matrixItem.hasOwnProperty(name)) {
                                setRequirements._sets[name] = matrixItem[name];
                            }
                        }
                    }
                }
                return new RequirementMatrix(setRequirements);
            };
            RequirementsMatrixFactory.getClientFullVersionString = function (appContext) {
                var appMinorVersion = appContext.get_appMinorVersion();
                var appMinorVersionString = "";
                var appFullVersion = "";
                var appName = appContext.get_appName();
                var isIOSClient = appName == 1024 ||
                    appName == 4096 ||
                    appName == 8192 ||
                    appName == 65536;
                if (isIOSClient && appContext.get_appVersion() == 1) {
                    if (appName == 4096 && appMinorVersion >= 15) {
                        appFullVersion = "16.00.01";
                    }
                    else {
                        appFullVersion = "16.00";
                    }
                }
                else if (appContext.get_appName() == 64) {
                    appFullVersion = appContext.get_appVersion();
                }
                else {
                    if (appMinorVersion < 10) {
                        appMinorVersionString = "0" + appMinorVersion;
                    }
                    else {
                        appMinorVersionString = "" + appMinorVersion;
                    }
                    appFullVersion = appContext.get_appVersion() + "." + appMinorVersionString;
                }
                return appContext.get_appName() + "-" + appFullVersion;
            };
            RequirementsMatrixFactory.initializeDefaultSetMatrix = function () {
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Excel_RCLIENT_1600] = new ExcelClientDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Word_RCLIENT_1600] = new WordClientDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.PowerPoint_RCLIENT_1600] = new PowerpointClientDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Excel_RCLIENT_1601] = new ExcelClientV1DefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Word_RCLIENT_1601] = new WordClientV1DefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.PowerPoint_RCLIENT_1601] = new PowerpointClientV1DefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Outlook_RCLIENT_1600] = new OutlookClientDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Excel_WAC_1600] = new ExcelWebDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Word_WAC_1600] = new WordWebDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Outlook_WAC_1600] = new OutlookWebDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Outlook_WAC_1601] = new OutlookWebDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Project_RCLIENT_1600] = new ProjectClientDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Access_WAC_1600] = new AccessWebDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.PowerPoint_WAC_1600] = new PowerpointWebDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Excel_IOS_1600] = new ExcelIOSDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.SWAY_WAC_1600] = new SwayWebDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Word_IOS_1600] = new WordIOSDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Word_IOS_16001] = new WordIOSV1DefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.PowerPoint_IOS_1600] = new PowerpointIOSDefaultSetRequirement();
                RequirementsMatrixFactory.DefaultSetArrayMatrix[RequirementsMatrixFactory.Outlook_IOS_1600] = new OutlookIOSDefaultSetRequirement();
            };
            RequirementsMatrixFactory.Excel_RCLIENT_1600 = "1-16.00";
            RequirementsMatrixFactory.Excel_RCLIENT_1601 = "1-16.01";
            RequirementsMatrixFactory.Word_RCLIENT_1600 = "2-16.00";
            RequirementsMatrixFactory.Word_RCLIENT_1601 = "2-16.01";
            RequirementsMatrixFactory.PowerPoint_RCLIENT_1600 = "4-16.00";
            RequirementsMatrixFactory.PowerPoint_RCLIENT_1601 = "4-16.01";
            RequirementsMatrixFactory.Outlook_RCLIENT_1600 = "8-16.00";
            RequirementsMatrixFactory.Excel_WAC_1600 = "16-16.00";
            RequirementsMatrixFactory.Word_WAC_1600 = "32-16.00";
            RequirementsMatrixFactory.Outlook_WAC_1600 = "64-16.00";
            RequirementsMatrixFactory.Outlook_WAC_1601 = "64-16.01";
            RequirementsMatrixFactory.Project_RCLIENT_1600 = "128-16.00";
            RequirementsMatrixFactory.Access_WAC_1600 = "256-16.00";
            RequirementsMatrixFactory.PowerPoint_WAC_1600 = "512-16.00";
            RequirementsMatrixFactory.Excel_IOS_1600 = "1024-16.00";
            RequirementsMatrixFactory.SWAY_WAC_1600 = "2048-16.00";
            RequirementsMatrixFactory.Word_IOS_1600 = "4096-16.00";
            RequirementsMatrixFactory.Word_IOS_16001 = "4096-16.00.01";
            RequirementsMatrixFactory.PowerPoint_IOS_1600 = "8192-16.00";
            RequirementsMatrixFactory.Outlook_IOS_1600 = "65536-16.00";
            RequirementsMatrixFactory.DefaultSetArrayMatrix = {};
            return RequirementsMatrixFactory;
        }());
        Requirement.RequirementsMatrixFactory = RequirementsMatrixFactory;
    })(Requirement = OfficeExt.Requirement || (OfficeExt.Requirement = {}));
})(OfficeExt || (OfficeExt = {}));
OfficeExt.Requirement.RequirementsMatrixFactory.initializeOsfDda();
Microsoft.Office.WebExtension.ApplicationMode = {
    WebEditor: "webEditor",
    WebViewer: "webViewer",
    Client: "client"
};
Microsoft.Office.WebExtension.DocumentMode = {
    ReadOnly: "readOnly",
    ReadWrite: "readWrite"
};
OSF.NamespaceManager = (function OSF_NamespaceManager() {
    var _userOffice;
    var _useShortcut = false;
    return {
        enableShortcut: function OSF_NamespaceManager$enableShortcut() {
            if (!_useShortcut) {
                if (window.Office) {
                    _userOffice = window.Office;
                }
                else {
                    OSF.OUtil.setNamespace("Office", window);
                }
                window.Office = Microsoft.Office.WebExtension;
                _useShortcut = true;
            }
        },
        disableShortcut: function OSF_NamespaceManager$disableShortcut() {
            if (_useShortcut) {
                if (_userOffice) {
                    window.Office = _userOffice;
                }
                else {
                    OSF.OUtil.unsetNamespace("Office", window);
                }
                _useShortcut = false;
            }
        }
    };
})();
OSF.NamespaceManager.enableShortcut();
Microsoft.Office.WebExtension.useShortNamespace = function Microsoft_Office_WebExtension_useShortNamespace(useShortcut) {
    if (useShortcut) {
        OSF.NamespaceManager.enableShortcut();
    }
    else {
        OSF.NamespaceManager.disableShortcut();
    }
};
Microsoft.Office.WebExtension.select = function Microsoft_Office_WebExtension_select(str, errorCallback) {
    var promise;
    if (str && typeof str == "string") {
        var index = str.indexOf("#");
        if (index != -1) {
            var op = str.substring(0, index);
            var target = str.substring(index + 1);
            switch (op) {
                case "binding":
                case "bindings":
                    if (target) {
                        promise = new OSF.DDA.BindingPromise(target);
                    }
                    break;
            }
        }
    }
    if (!promise) {
        if (errorCallback) {
            var callbackType = typeof errorCallback;
            if (callbackType == "function") {
                var callArgs = {};
                callArgs[Microsoft.Office.WebExtension.Parameters.Callback] = errorCallback;
                OSF.DDA.issueAsyncResult(callArgs, OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidApiCallInContext, OSF.DDA.ErrorCodeManager.getErrorArgs(OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidApiCallInContext));
            }
            else {
                throw OSF.OUtil.formatString(Strings.OfficeOM.L_CallbackNotAFunction, callbackType);
            }
        }
    }
    else {
        promise.onFail = errorCallback;
        return promise;
    }
};
OSF.DDA.Context = function OSF_DDA_Context(officeAppContext, document, license, appOM, getOfficeTheme) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "contentLanguage": {
            value: officeAppContext.get_dataLocale()
        },
        "displayLanguage": {
            value: officeAppContext.get_appUILocale()
        },
        "touchEnabled": {
            value: officeAppContext.get_touchEnabled()
        },
        "commerceAllowed": {
            value: officeAppContext.get_commerceAllowed()
        },
        "host": {
            value: OfficeExt.HostName.Host.getInstance().getHost()
        },
        "platform": {
            value: OfficeExt.HostName.Host.getInstance().getPlatform()
        },
        "isDialog": {
            value: OSF._OfficeAppFactory.getHostInfo().isDialog
        },
        "diagnostics": {
            value: OfficeExt.HostName.Host.getInstance().getDiagnostics(officeAppContext.get_hostFullVersion())
        }
    });
    if (license) {
        OSF.OUtil.defineEnumerableProperty(this, "license", {
            value: license
        });
    }
    if (officeAppContext.ui) {
        OSF.OUtil.defineEnumerableProperty(this, "ui", {
            value: officeAppContext.ui
        });
    }
    if (officeAppContext.auth) {
        OSF.OUtil.defineEnumerableProperty(this, "auth", {
            value: officeAppContext.auth
        });
    }
    if (officeAppContext.webAuth) {
        OSF.OUtil.defineEnumerableProperty(this, "webAuth", {
            value: officeAppContext.webAuth
        });
    }
    if (officeAppContext.application) {
        OSF.OUtil.defineEnumerableProperty(this, "application", {
            value: officeAppContext.application
        });
    }
    if (officeAppContext.extensionLifeCycle) {
        OSF.OUtil.defineEnumerableProperty(this, "extensionLifeCycle", {
            value: officeAppContext.extensionLifeCycle
        });
    }
    if (officeAppContext.messaging) {
        OSF.OUtil.defineEnumerableProperty(this, "messaging", {
            value: officeAppContext.messaging
        });
    }
    if (officeAppContext.ui && officeAppContext.ui.taskPaneAction) {
        OSF.OUtil.defineEnumerableProperty(this, "taskPaneAction", {
            value: officeAppContext.ui.taskPaneAction
        });
    }
    if (officeAppContext.ui && officeAppContext.ui.ribbonGallery) {
        OSF.OUtil.defineEnumerableProperty(this, "ribbonGallery", {
            value: officeAppContext.ui.ribbonGallery
        });
    }
    if (officeAppContext.get_isDialog()) {
        var requirements = OfficeExt.Requirement.RequirementsMatrixFactory.getDefaultDialogRequirementMatrix(officeAppContext);
        OSF.OUtil.defineEnumerableProperty(this, "requirements", {
            value: requirements
        });
    }
    else {
        if (document) {
            OSF.OUtil.defineEnumerableProperty(this, "document", {
                value: document
            });
        }
        if (appOM) {
            var displayName = appOM.displayName || "appOM";
            delete appOM.displayName;
            OSF.OUtil.defineEnumerableProperty(this, displayName, {
                value: appOM
            });
        }
        if (officeAppContext.get_officeTheme()) {
            OSF.OUtil.defineEnumerableProperty(this, "officeTheme", {
                get: function () {
                    return officeAppContext.get_officeTheme();
                }
            });
        }
        else if (getOfficeTheme) {
            OSF.OUtil.defineEnumerableProperty(this, "officeTheme", {
                get: function () {
                    return getOfficeTheme();
                }
            });
        }
        var requirements = OfficeExt.Requirement.RequirementsMatrixFactory.getDefaultRequirementMatrix(officeAppContext);
        OSF.OUtil.defineEnumerableProperty(this, "requirements", {
            value: requirements
        });
    }
};
OSF.DDA.OutlookContext = function OSF_DDA_OutlookContext(appContext, settings, license, appOM, getOfficeTheme) {
    OSF.DDA.OutlookContext.uber.constructor.call(this, appContext, null, license, appOM, getOfficeTheme);
    if (settings) {
        OSF.OUtil.defineEnumerableProperty(this, "roamingSettings", {
            value: settings
        });
    }
};
OSF.OUtil.extend(OSF.DDA.OutlookContext, OSF.DDA.Context);
OSF.DDA.OutlookAppOm = function OSF_DDA_OutlookAppOm(appContext, window, appReady) { };
OSF.DDA.Application = function OSF_DDA_Application(officeAppContext) {
};
OSF.DDA.Document = function OSF_DDA_Document(officeAppContext, settings) {
    var mode;
    switch (officeAppContext.get_clientMode()) {
        case OSF.ClientMode.ReadOnly:
            mode = Microsoft.Office.WebExtension.DocumentMode.ReadOnly;
            break;
        case OSF.ClientMode.ReadWrite:
            mode = Microsoft.Office.WebExtension.DocumentMode.ReadWrite;
            break;
    }
    ;
    if (settings) {
        OSF.OUtil.defineEnumerableProperty(this, "settings", {
            value: settings
        });
    }
    ;
    OSF.OUtil.defineMutableProperties(this, {
        "mode": {
            value: mode
        },
        "url": {
            value: officeAppContext.get_docUrl()
        }
    });
};
OSF.DDA.JsomDocument = function OSF_DDA_JsomDocument(officeAppContext, bindingFacade, settings) {
    OSF.DDA.JsomDocument.uber.constructor.call(this, officeAppContext, settings);
    if (bindingFacade) {
        OSF.OUtil.defineEnumerableProperty(this, "bindings", {
            get: function OSF_DDA_Document$GetBindings() { return bindingFacade; }
        });
    }
    var am = OSF.DDA.AsyncMethodNames;
    OSF.DDA.DispIdHost.addAsyncMethods(this, [
        am.GetSelectedDataAsync,
        am.SetSelectedDataAsync
    ]);
    OSF.DDA.DispIdHost.addEventSupport(this, new OSF.EventDispatch([Microsoft.Office.WebExtension.EventType.DocumentSelectionChanged]));
};
OSF.OUtil.extend(OSF.DDA.JsomDocument, OSF.DDA.Document);
OSF.OUtil.defineEnumerableProperty(Microsoft.Office.WebExtension, "context", {
    get: function Microsoft_Office_WebExtension$GetContext() {
        var context;
        if (OSF && OSF._OfficeAppFactory) {
            context = OSF._OfficeAppFactory.getContext();
        }
        return context;
    }
});
OSF.DDA.License = function OSF_DDA_License(eToken) {
    OSF.OUtil.defineEnumerableProperty(this, "value", {
        value: eToken
    });
};
OSF.DDA.ApiMethodCall = function OSF_DDA_ApiMethodCall(requiredParameters, supportedOptions, privateStateCallbacks, checkCallArgs, displayName) {
    var requiredCount = requiredParameters.length;
    var getInvalidParameterString = OSF.OUtil.delayExecutionAndCache(function () {
        return OSF.OUtil.formatString(Strings.OfficeOM.L_InvalidParameters, displayName);
    });
    this.verifyArguments = function OSF_DDA_ApiMethodCall$VerifyArguments(params, args) {
        for (var name in params) {
            var param = params[name];
            var arg = args[name];
            if (param["enum"]) {
                switch (typeof arg) {
                    case "string":
                        if (OSF.OUtil.listContainsValue(param["enum"], arg)) {
                            break;
                        }
                    case "undefined":
                        throw OSF.DDA.ErrorCodeManager.errorCodes.ooeUnsupportedEnumeration;
                    default:
                        throw getInvalidParameterString();
                }
            }
            if (param["types"]) {
                if (!OSF.OUtil.listContainsValue(param["types"], typeof arg)) {
                    throw getInvalidParameterString();
                }
            }
        }
    };
    this.extractRequiredArguments = function OSF_DDA_ApiMethodCall$ExtractRequiredArguments(userArgs, caller, stateInfo) {
        if (userArgs.length < requiredCount) {
            throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_MissingRequiredArguments);
        }
        var requiredArgs = [];
        var index;
        for (index = 0; index < requiredCount; index++) {
            requiredArgs.push(userArgs[index]);
        }
        this.verifyArguments(requiredParameters, requiredArgs);
        var ret = {};
        for (index = 0; index < requiredCount; index++) {
            var param = requiredParameters[index];
            var arg = requiredArgs[index];
            if (param.verify) {
                var isValid = param.verify(arg, caller, stateInfo);
                if (!isValid) {
                    throw getInvalidParameterString();
                }
            }
            ret[param.name] = arg;
        }
        return ret;
    },
        this.fillOptions = function OSF_DDA_ApiMethodCall$FillOptions(options, requiredArgs, caller, stateInfo) {
            options = options || {};
            for (var optionName in supportedOptions) {
                if (!OSF.OUtil.listContainsKey(options, optionName)) {
                    var value = undefined;
                    var option = supportedOptions[optionName];
                    if (option.calculate && requiredArgs) {
                        value = option.calculate(requiredArgs, caller, stateInfo);
                    }
                    if (!value && option.defaultValue !== undefined) {
                        value = option.defaultValue;
                    }
                    options[optionName] = value;
                }
            }
            return options;
        };
    this.constructCallArgs = function OSF_DAA_ApiMethodCall$ConstructCallArgs(required, options, caller, stateInfo) {
        var callArgs = {};
        for (var r in required) {
            callArgs[r] = required[r];
        }
        for (var o in options) {
            callArgs[o] = options[o];
        }
        for (var s in privateStateCallbacks) {
            callArgs[s] = privateStateCallbacks[s](caller, stateInfo);
        }
        if (checkCallArgs) {
            callArgs = checkCallArgs(callArgs, caller, stateInfo);
        }
        return callArgs;
    };
};
OSF.OUtil.setNamespace("AsyncResultEnum", OSF.DDA);
OSF.DDA.AsyncResultEnum.Properties = {
    Context: "Context",
    Value: "Value",
    Status: "Status",
    Error: "Error"
};
Microsoft.Office.WebExtension.AsyncResultStatus = {
    Succeeded: "succeeded",
    Failed: "failed"
};
OSF.DDA.AsyncResultEnum.ErrorCode = {
    Success: 0,
    Failed: 1
};
OSF.DDA.AsyncResultEnum.ErrorProperties = {
    Name: "Name",
    Message: "Message",
    Code: "Code"
};
OSF.DDA.AsyncMethodNames = {};
OSF.DDA.AsyncMethodNames.addNames = function (methodNames) {
    for (var entry in methodNames) {
        var am = {};
        OSF.OUtil.defineEnumerableProperties(am, {
            "id": {
                value: entry
            },
            "displayName": {
                value: methodNames[entry]
            }
        });
        OSF.DDA.AsyncMethodNames[entry] = am;
    }
};
OSF.DDA.AsyncMethodCall = function OSF_DDA_AsyncMethodCall(requiredParameters, supportedOptions, privateStateCallbacks, onSucceeded, onFailed, checkCallArgs, displayName) {
    var requiredCount = requiredParameters.length;
    var apiMethods = new OSF.DDA.ApiMethodCall(requiredParameters, supportedOptions, privateStateCallbacks, checkCallArgs, displayName);
    function OSF_DAA_AsyncMethodCall$ExtractOptions(userArgs, requiredArgs, caller, stateInfo) {
        if (userArgs.length > requiredCount + 2) {
            throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_TooManyArguments);
        }
        var options, parameterCallback;
        for (var i = userArgs.length - 1; i >= requiredCount; i--) {
            var argument = userArgs[i];
            switch (typeof argument) {
                case "object":
                    if (options) {
                        throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_TooManyOptionalObjects);
                    }
                    else {
                        options = argument;
                    }
                    break;
                case "function":
                    if (parameterCallback) {
                        throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_TooManyOptionalFunction);
                    }
                    else {
                        parameterCallback = argument;
                    }
                    break;
                default:
                    throw OsfMsAjaxFactory.msAjaxError.argument(Strings.OfficeOM.L_InValidOptionalArgument);
                    break;
            }
        }
        options = apiMethods.fillOptions(options, requiredArgs, caller, stateInfo);
        if (parameterCallback) {
            if (options[Microsoft.Office.WebExtension.Parameters.Callback]) {
                throw Strings.OfficeOM.L_RedundantCallbackSpecification;
            }
            else {
                options[Microsoft.Office.WebExtension.Parameters.Callback] = parameterCallback;
            }
        }
        apiMethods.verifyArguments(supportedOptions, options);
        return options;
    }
    ;
    this.verifyAndExtractCall = function OSF_DAA_AsyncMethodCall$VerifyAndExtractCall(userArgs, caller, stateInfo) {
        var required = apiMethods.extractRequiredArguments(userArgs, caller, stateInfo);
        var options = OSF_DAA_AsyncMethodCall$ExtractOptions(userArgs, required, caller, stateInfo);
        var callArgs = apiMethods.constructCallArgs(required, options, caller, stateInfo);
        return callArgs;
    };
    this.processResponse = function OSF_DAA_AsyncMethodCall$ProcessResponse(status, response, caller, callArgs) {
        var payload;
        if (status == OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
            if (onSucceeded) {
                payload = onSucceeded(response, caller, callArgs);
            }
            else {
                payload = response;
            }
        }
        else {
            if (onFailed) {
                payload = onFailed(status, response);
            }
            else {
                payload = OSF.DDA.ErrorCodeManager.getErrorArgs(status);
            }
        }
        return payload;
    };
    this.getCallArgs = function (suppliedArgs) {
        var options, parameterCallback;
        for (var i = suppliedArgs.length - 1; i >= requiredCount; i--) {
            var argument = suppliedArgs[i];
            switch (typeof argument) {
                case "object":
                    options = argument;
                    break;
                case "function":
                    parameterCallback = argument;
                    break;
            }
        }
        options = options || {};
        if (parameterCallback) {
            options[Microsoft.Office.WebExtension.Parameters.Callback] = parameterCallback;
        }
        return options;
    };
};
OSF.DDA.AsyncMethodCallFactory = (function () {
    return {
        manufacture: function (params) {
            var supportedOptions = params.supportedOptions ? OSF.OUtil.createObject(params.supportedOptions) : [];
            var privateStateCallbacks = params.privateStateCallbacks ? OSF.OUtil.createObject(params.privateStateCallbacks) : [];
            return new OSF.DDA.AsyncMethodCall(params.requiredArguments || [], supportedOptions, privateStateCallbacks, params.onSucceeded, params.onFailed, params.checkCallArgs, params.method.displayName);
        }
    };
})();
OSF.DDA.AsyncMethodCalls = {};
OSF.DDA.AsyncMethodCalls.define = function (callDefinition) {
    OSF.DDA.AsyncMethodCalls[callDefinition.method.id] = OSF.DDA.AsyncMethodCallFactory.manufacture(callDefinition);
};
OSF.DDA.Error = function OSF_DDA_Error(name, message, code) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "name": {
            value: name
        },
        "message": {
            value: message
        },
        "code": {
            value: code
        }
    });
};
OSF.DDA.AsyncResult = function OSF_DDA_AsyncResult(initArgs, errorArgs) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "value": {
            value: initArgs[OSF.DDA.AsyncResultEnum.Properties.Value]
        },
        "status": {
            value: errorArgs ? Microsoft.Office.WebExtension.AsyncResultStatus.Failed : Microsoft.Office.WebExtension.AsyncResultStatus.Succeeded
        }
    });
    if (initArgs[OSF.DDA.AsyncResultEnum.Properties.Context]) {
        OSF.OUtil.defineEnumerableProperty(this, "asyncContext", {
            value: initArgs[OSF.DDA.AsyncResultEnum.Properties.Context]
        });
    }
    if (errorArgs) {
        OSF.OUtil.defineEnumerableProperty(this, "error", {
            value: new OSF.DDA.Error(errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Name], errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Message], errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Code])
        });
    }
};
OSF.DDA.issueAsyncResult = function OSF_DDA$IssueAsyncResult(callArgs, status, payload) {
    var callback = callArgs[Microsoft.Office.WebExtension.Parameters.Callback];
    if (callback) {
        var asyncInitArgs = {};
        asyncInitArgs[OSF.DDA.AsyncResultEnum.Properties.Context] = callArgs[Microsoft.Office.WebExtension.Parameters.AsyncContext];
        var errorArgs;
        if (status == OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
            asyncInitArgs[OSF.DDA.AsyncResultEnum.Properties.Value] = payload;
        }
        else {
            errorArgs = {};
            payload = payload || OSF.DDA.ErrorCodeManager.getErrorArgs(OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError);
            errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Code] = status || OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
            errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Name] = payload.name || payload;
            errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Message] = payload.message || payload;
        }
        callback(new OSF.DDA.AsyncResult(asyncInitArgs, errorArgs));
    }
};
OSF.DDA.SyncMethodNames = {};
OSF.DDA.SyncMethodNames.addNames = function (methodNames) {
    for (var entry in methodNames) {
        var am = {};
        OSF.OUtil.defineEnumerableProperties(am, {
            "id": {
                value: entry
            },
            "displayName": {
                value: methodNames[entry]
            }
        });
        OSF.DDA.SyncMethodNames[entry] = am;
    }
};
OSF.DDA.SyncMethodCall = function OSF_DDA_SyncMethodCall(requiredParameters, supportedOptions, privateStateCallbacks, checkCallArgs, displayName) {
    var requiredCount = requiredParameters.length;
    var apiMethods = new OSF.DDA.ApiMethodCall(requiredParameters, supportedOptions, privateStateCallbacks, checkCallArgs, displayName);
    function OSF_DAA_SyncMethodCall$ExtractOptions(userArgs, requiredArgs, caller, stateInfo) {
        if (userArgs.length > requiredCount + 1) {
            throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_TooManyArguments);
        }
        var options, parameterCallback;
        for (var i = userArgs.length - 1; i >= requiredCount; i--) {
            var argument = userArgs[i];
            switch (typeof argument) {
                case "object":
                    if (options) {
                        throw OsfMsAjaxFactory.msAjaxError.parameterCount(Strings.OfficeOM.L_TooManyOptionalObjects);
                    }
                    else {
                        options = argument;
                    }
                    break;
                default:
                    throw OsfMsAjaxFactory.msAjaxError.argument(Strings.OfficeOM.L_InValidOptionalArgument);
                    break;
            }
        }
        options = apiMethods.fillOptions(options, requiredArgs, caller, stateInfo);
        apiMethods.verifyArguments(supportedOptions, options);
        return options;
    }
    ;
    this.verifyAndExtractCall = function OSF_DAA_AsyncMethodCall$VerifyAndExtractCall(userArgs, caller, stateInfo) {
        var required = apiMethods.extractRequiredArguments(userArgs, caller, stateInfo);
        var options = OSF_DAA_SyncMethodCall$ExtractOptions(userArgs, required, caller, stateInfo);
        var callArgs = apiMethods.constructCallArgs(required, options, caller, stateInfo);
        return callArgs;
    };
};
OSF.DDA.SyncMethodCallFactory = (function () {
    return {
        manufacture: function (params) {
            var supportedOptions = params.supportedOptions ? OSF.OUtil.createObject(params.supportedOptions) : [];
            return new OSF.DDA.SyncMethodCall(params.requiredArguments || [], supportedOptions, params.privateStateCallbacks, params.checkCallArgs, params.method.displayName);
        }
    };
})();
OSF.DDA.SyncMethodCalls = {};
OSF.DDA.SyncMethodCalls.define = function (callDefinition) {
    OSF.DDA.SyncMethodCalls[callDefinition.method.id] = OSF.DDA.SyncMethodCallFactory.manufacture(callDefinition);
};
OSF.DDA.ListType = (function () {
    var listTypes = {};
    return {
        setListType: function OSF_DDA_ListType$AddListType(t, prop) { listTypes[t] = prop; },
        isListType: function OSF_DDA_ListType$IsListType(t) { return OSF.OUtil.listContainsKey(listTypes, t); },
        getDescriptor: function OSF_DDA_ListType$getDescriptor(t) { return listTypes[t]; }
    };
})();
OSF.DDA.HostParameterMap = function (specialProcessor, mappings) {
    var toHostMap = "toHost";
    var fromHostMap = "fromHost";
    var sourceData = "sourceData";
    var self = "self";
    var dynamicTypes = {};
    dynamicTypes[Microsoft.Office.WebExtension.Parameters.Data] = {
        toHost: function (data) {
            if (data != null && data.rows !== undefined) {
                var tableData = {};
                tableData[OSF.DDA.TableDataProperties.TableRows] = data.rows;
                tableData[OSF.DDA.TableDataProperties.TableHeaders] = data.headers;
                data = tableData;
            }
            return data;
        },
        fromHost: function (args) {
            return args;
        }
    };
    dynamicTypes[Microsoft.Office.WebExtension.Parameters.SampleData] = dynamicTypes[Microsoft.Office.WebExtension.Parameters.Data];
    function mapValues(preimageSet, mapping) {
        var ret = preimageSet ? {} : undefined;
        for (var entry in preimageSet) {
            var preimage = preimageSet[entry];
            var image;
            if (OSF.DDA.ListType.isListType(entry)) {
                image = [];
                for (var subEntry in preimage) {
                    image.push(mapValues(preimage[subEntry], mapping));
                }
            }
            else if (OSF.OUtil.listContainsKey(dynamicTypes, entry)) {
                image = dynamicTypes[entry][mapping](preimage);
            }
            else if (mapping == fromHostMap && specialProcessor.preserveNesting(entry)) {
                image = mapValues(preimage, mapping);
            }
            else {
                var maps = mappings[entry];
                if (maps) {
                    var map = maps[mapping];
                    if (map) {
                        image = map[preimage];
                        if (image === undefined) {
                            image = preimage;
                        }
                    }
                }
                else {
                    image = preimage;
                }
            }
            ret[entry] = image;
        }
        return ret;
    }
    ;
    function generateArguments(imageSet, parameters) {
        var ret;
        for (var param in parameters) {
            var arg;
            if (specialProcessor.isComplexType(param)) {
                arg = generateArguments(imageSet, mappings[param][toHostMap]);
            }
            else {
                arg = imageSet[param];
            }
            if (arg != undefined) {
                if (!ret) {
                    ret = {};
                }
                var index = parameters[param];
                if (index == self) {
                    index = param;
                }
                ret[index] = specialProcessor.pack(param, arg);
            }
        }
        return ret;
    }
    ;
    function extractArguments(source, parameters, extracted) {
        if (!extracted) {
            extracted = {};
        }
        for (var param in parameters) {
            var index = parameters[param];
            var value;
            if (index == self) {
                value = source;
            }
            else if (index == sourceData) {
                extracted[param] = source.toArray();
                continue;
            }
            else {
                value = source[index];
            }
            if (value === null || value === undefined) {
                extracted[param] = undefined;
            }
            else {
                value = specialProcessor.unpack(param, value);
                var map;
                if (specialProcessor.isComplexType(param)) {
                    map = mappings[param][fromHostMap];
                    if (specialProcessor.preserveNesting(param)) {
                        extracted[param] = extractArguments(value, map);
                    }
                    else {
                        extractArguments(value, map, extracted);
                    }
                }
                else {
                    if (OSF.DDA.ListType.isListType(param)) {
                        map = {};
                        var entryDescriptor = OSF.DDA.ListType.getDescriptor(param);
                        map[entryDescriptor] = self;
                        var extractedValues = new Array(value.length);
                        for (var item in value) {
                            extractedValues[item] = extractArguments(value[item], map);
                        }
                        extracted[param] = extractedValues;
                    }
                    else {
                        extracted[param] = value;
                    }
                }
            }
        }
        return extracted;
    }
    ;
    function applyMap(mapName, preimage, mapping) {
        var parameters = mappings[mapName][mapping];
        var image;
        if (mapping == "toHost") {
            var imageSet = mapValues(preimage, mapping);
            image = generateArguments(imageSet, parameters);
        }
        else if (mapping == "fromHost") {
            var argumentSet = extractArguments(preimage, parameters);
            image = mapValues(argumentSet, mapping);
        }
        return image;
    }
    ;
    if (!mappings) {
        mappings = {};
    }
    this.addMapping = function (mapName, description) {
        var toHost, fromHost;
        if (description.map) {
            toHost = description.map;
            fromHost = {};
            for (var preimage in toHost) {
                var image = toHost[preimage];
                if (image == self) {
                    image = preimage;
                }
                fromHost[image] = preimage;
            }
        }
        else {
            toHost = description.toHost;
            fromHost = description.fromHost;
        }
        var pair = mappings[mapName];
        if (pair) {
            var currMap = pair[toHostMap];
            for (var th in currMap)
                toHost[th] = currMap[th];
            currMap = pair[fromHostMap];
            for (var fh in currMap)
                fromHost[fh] = currMap[fh];
        }
        else {
            pair = mappings[mapName] = {};
        }
        pair[toHostMap] = toHost;
        pair[fromHostMap] = fromHost;
    };
    this.toHost = function (mapName, preimage) { return applyMap(mapName, preimage, toHostMap); };
    this.fromHost = function (mapName, image) { return applyMap(mapName, image, fromHostMap); };
    this.self = self;
    this.sourceData = sourceData;
    this.addComplexType = function (ct) { specialProcessor.addComplexType(ct); };
    this.getDynamicType = function (dt) { return specialProcessor.getDynamicType(dt); };
    this.setDynamicType = function (dt, handler) { specialProcessor.setDynamicType(dt, handler); };
    this.dynamicTypes = dynamicTypes;
    this.doMapValues = function (preimageSet, mapping) { return mapValues(preimageSet, mapping); };
};
OSF.DDA.SpecialProcessor = function (complexTypes, dynamicTypes) {
    this.addComplexType = function OSF_DDA_SpecialProcessor$addComplexType(ct) {
        complexTypes.push(ct);
    };
    this.getDynamicType = function OSF_DDA_SpecialProcessor$getDynamicType(dt) {
        return dynamicTypes[dt];
    };
    this.setDynamicType = function OSF_DDA_SpecialProcessor$setDynamicType(dt, handler) {
        dynamicTypes[dt] = handler;
    };
    this.isComplexType = function OSF_DDA_SpecialProcessor$isComplexType(t) {
        return OSF.OUtil.listContainsValue(complexTypes, t);
    };
    this.isDynamicType = function OSF_DDA_SpecialProcessor$isDynamicType(p) {
        return OSF.OUtil.listContainsKey(dynamicTypes, p);
    };
    this.preserveNesting = function OSF_DDA_SpecialProcessor$preserveNesting(p) {
        var pn = [];
        if (OSF.DDA.PropertyDescriptors)
            pn.push(OSF.DDA.PropertyDescriptors.Subset);
        if (OSF.DDA.DataNodeEventProperties) {
            pn = pn.concat([
                OSF.DDA.DataNodeEventProperties.OldNode,
                OSF.DDA.DataNodeEventProperties.NewNode,
                OSF.DDA.DataNodeEventProperties.NextSiblingNode
            ]);
        }
        return OSF.OUtil.listContainsValue(pn, p);
    };
    this.pack = function OSF_DDA_SpecialProcessor$pack(param, arg) {
        var value;
        if (this.isDynamicType(param)) {
            value = dynamicTypes[param].toHost(arg);
        }
        else {
            value = arg;
        }
        return value;
    };
    this.unpack = function OSF_DDA_SpecialProcessor$unpack(param, arg) {
        var value;
        if (this.isDynamicType(param)) {
            value = dynamicTypes[param].fromHost(arg);
        }
        else {
            value = arg;
        }
        return value;
    };
};
OSF.DDA.getDecoratedParameterMap = function (specialProcessor, initialDefs) {
    var parameterMap = new OSF.DDA.HostParameterMap(specialProcessor);
    var self = parameterMap.self;
    function createObject(properties) {
        var obj = null;
        if (properties) {
            obj = {};
            var len = properties.length;
            for (var i = 0; i < len; i++) {
                obj[properties[i].name] = properties[i].value;
            }
        }
        return obj;
    }
    parameterMap.define = function define(definition) {
        var args = {};
        var toHost = createObject(definition.toHost);
        if (definition.invertible) {
            args.map = toHost;
        }
        else if (definition.canonical) {
            args.toHost = args.fromHost = toHost;
        }
        else {
            args.toHost = toHost;
            args.fromHost = createObject(definition.fromHost);
        }
        parameterMap.addMapping(definition.type, args);
        if (definition.isComplexType)
            parameterMap.addComplexType(definition.type);
    };
    for (var id in initialDefs)
        parameterMap.define(initialDefs[id]);
    return parameterMap;
};
OSF.OUtil.setNamespace("DispIdHost", OSF.DDA);
OSF.DDA.DispIdHost.Methods = {
    InvokeMethod: "invokeMethod",
    AddEventHandler: "addEventHandler",
    RemoveEventHandler: "removeEventHandler",
    OpenDialog: "openDialog",
    CloseDialog: "closeDialog",
    MessageParent: "messageParent",
    SendMessage: "sendMessage"
};
OSF.DDA.DispIdHost.Delegates = {
    ExecuteAsync: "executeAsync",
    RegisterEventAsync: "registerEventAsync",
    UnregisterEventAsync: "unregisterEventAsync",
    ParameterMap: "parameterMap",
    OpenDialog: "openDialog",
    CloseDialog: "closeDialog",
    MessageParent: "messageParent",
    SendMessage: "sendMessage"
};
OSF.DDA.DispIdHost.Facade = function OSF_DDA_DispIdHost_Facade(getDelegateMethods, parameterMap) {
    var dispIdMap = {};
    var jsom = OSF.DDA.AsyncMethodNames;
    var did = OSF.DDA.MethodDispId;
    var methodMap = {
        "GoToByIdAsync": did.dispidNavigateToMethod,
        "GetSelectedDataAsync": did.dispidGetSelectedDataMethod,
        "SetSelectedDataAsync": did.dispidSetSelectedDataMethod,
        "GetDocumentCopyChunkAsync": did.dispidGetDocumentCopyChunkMethod,
        "ReleaseDocumentCopyAsync": did.dispidReleaseDocumentCopyMethod,
        "GetDocumentCopyAsync": did.dispidGetDocumentCopyMethod,
        "AddFromSelectionAsync": did.dispidAddBindingFromSelectionMethod,
        "AddFromPromptAsync": did.dispidAddBindingFromPromptMethod,
        "AddFromNamedItemAsync": did.dispidAddBindingFromNamedItemMethod,
        "GetAllAsync": did.dispidGetAllBindingsMethod,
        "GetByIdAsync": did.dispidGetBindingMethod,
        "ReleaseByIdAsync": did.dispidReleaseBindingMethod,
        "GetDataAsync": did.dispidGetBindingDataMethod,
        "SetDataAsync": did.dispidSetBindingDataMethod,
        "AddRowsAsync": did.dispidAddRowsMethod,
        "AddColumnsAsync": did.dispidAddColumnsMethod,
        "DeleteAllDataValuesAsync": did.dispidClearAllRowsMethod,
        "RefreshAsync": did.dispidLoadSettingsMethod,
        "SaveAsync": did.dispidSaveSettingsMethod,
        "GetActiveViewAsync": did.dispidGetActiveViewMethod,
        "GetFilePropertiesAsync": did.dispidGetFilePropertiesMethod,
        "GetOfficeThemeAsync": did.dispidGetOfficeThemeMethod,
        "GetDocumentThemeAsync": did.dispidGetDocumentThemeMethod,
        "ClearFormatsAsync": did.dispidClearFormatsMethod,
        "SetTableOptionsAsync": did.dispidSetTableOptionsMethod,
        "SetFormatsAsync": did.dispidSetFormatsMethod,
        "GetAccessTokenAsync": did.dispidGetAccessTokenMethod,
        "GetAuthContextAsync": did.dispidGetAuthContextMethod,
        "ExecuteRichApiRequestAsync": did.dispidExecuteRichApiRequestMethod,
        "AppCommandInvocationCompletedAsync": did.dispidAppCommandInvocationCompletedMethod,
        "CloseContainerAsync": did.dispidCloseContainerMethod,
        "OpenBrowserWindow": did.dispidOpenBrowserWindow,
        "CreateDocumentAsync": did.dispidCreateDocumentMethod,
        "InsertFormAsync": did.dispidInsertFormMethod,
        "ExecuteFeature": did.dispidExecuteFeature,
        "QueryFeature": did.dispidQueryFeature,
        "AddDataPartAsync": did.dispidAddDataPartMethod,
        "GetDataPartByIdAsync": did.dispidGetDataPartByIdMethod,
        "GetDataPartsByNameSpaceAsync": did.dispidGetDataPartsByNamespaceMethod,
        "GetPartXmlAsync": did.dispidGetDataPartXmlMethod,
        "GetPartNodesAsync": did.dispidGetDataPartNodesMethod,
        "DeleteDataPartAsync": did.dispidDeleteDataPartMethod,
        "GetNodeValueAsync": did.dispidGetDataNodeValueMethod,
        "GetNodeXmlAsync": did.dispidGetDataNodeXmlMethod,
        "GetRelativeNodesAsync": did.dispidGetDataNodesMethod,
        "SetNodeValueAsync": did.dispidSetDataNodeValueMethod,
        "SetNodeXmlAsync": did.dispidSetDataNodeXmlMethod,
        "AddDataPartNamespaceAsync": did.dispidAddDataNamespaceMethod,
        "GetDataPartNamespaceAsync": did.dispidGetDataUriByPrefixMethod,
        "GetDataPartPrefixAsync": did.dispidGetDataPrefixByUriMethod,
        "GetNodeTextAsync": did.dispidGetDataNodeTextMethod,
        "SetNodeTextAsync": did.dispidSetDataNodeTextMethod,
        "GetSelectedTask": did.dispidGetSelectedTaskMethod,
        "GetTask": did.dispidGetTaskMethod,
        "GetWSSUrl": did.dispidGetWSSUrlMethod,
        "GetTaskField": did.dispidGetTaskFieldMethod,
        "GetSelectedResource": did.dispidGetSelectedResourceMethod,
        "GetResourceField": did.dispidGetResourceFieldMethod,
        "GetProjectField": did.dispidGetProjectFieldMethod,
        "GetSelectedView": did.dispidGetSelectedViewMethod,
        "GetTaskByIndex": did.dispidGetTaskByIndexMethod,
        "GetResourceByIndex": did.dispidGetResourceByIndexMethod,
        "SetTaskField": did.dispidSetTaskFieldMethod,
        "SetResourceField": did.dispidSetResourceFieldMethod,
        "GetMaxTaskIndex": did.dispidGetMaxTaskIndexMethod,
        "GetMaxResourceIndex": did.dispidGetMaxResourceIndexMethod,
        "CreateTask": did.dispidCreateTaskMethod
    };
    for (var method in methodMap) {
        if (jsom[method]) {
            dispIdMap[jsom[method].id] = methodMap[method];
        }
    }
    jsom = OSF.DDA.SyncMethodNames;
    did = OSF.DDA.MethodDispId;
    var syncMethodMap = {
        "MessageParent": did.dispidMessageParentMethod,
        "SendMessage": did.dispidSendMessageMethod
    };
    for (var method in syncMethodMap) {
        if (jsom[method]) {
            dispIdMap[jsom[method].id] = syncMethodMap[method];
        }
    }
    jsom = Microsoft.Office.WebExtension.EventType;
    did = OSF.DDA.EventDispId;
    var eventMap = {
        "SettingsChanged": did.dispidSettingsChangedEvent,
        "DocumentSelectionChanged": did.dispidDocumentSelectionChangedEvent,
        "BindingSelectionChanged": did.dispidBindingSelectionChangedEvent,
        "BindingDataChanged": did.dispidBindingDataChangedEvent,
        "ActiveViewChanged": did.dispidActiveViewChangedEvent,
        "OfficeThemeChanged": did.dispidOfficeThemeChangedEvent,
        "DocumentThemeChanged": did.dispidDocumentThemeChangedEvent,
        "AppCommandInvoked": did.dispidAppCommandInvokedEvent,
        "DialogMessageReceived": did.dispidDialogMessageReceivedEvent,
        "DialogParentMessageReceived": did.dispidDialogParentMessageReceivedEvent,
        "ObjectDeleted": did.dispidObjectDeletedEvent,
        "ObjectSelectionChanged": did.dispidObjectSelectionChangedEvent,
        "ObjectDataChanged": did.dispidObjectDataChangedEvent,
        "ContentControlAdded": did.dispidContentControlAddedEvent,
        "RichApiMessage": did.dispidRichApiMessageEvent,
        "ItemChanged": did.dispidOlkItemSelectedChangedEvent,
        "RecipientsChanged": did.dispidOlkRecipientsChangedEvent,
        "AppointmentTimeChanged": did.dispidOlkAppointmentTimeChangedEvent,
        "RecurrenceChanged": did.dispidOlkRecurrenceChangedEvent,
        "AttachmentsChanged": did.dispidOlkAttachmentsChangedEvent,
        "EnhancedLocationsChanged": did.dispidOlkEnhancedLocationsChangedEvent,
        "InfobarClicked": did.dispidOlkInfobarClickedEvent,
        "TaskSelectionChanged": did.dispidTaskSelectionChangedEvent,
        "ResourceSelectionChanged": did.dispidResourceSelectionChangedEvent,
        "ViewSelectionChanged": did.dispidViewSelectionChangedEvent,
        "DataNodeInserted": did.dispidDataNodeAddedEvent,
        "DataNodeReplaced": did.dispidDataNodeReplacedEvent,
        "DataNodeDeleted": did.dispidDataNodeDeletedEvent
    };
    for (var event in eventMap) {
        if (jsom[event]) {
            dispIdMap[jsom[event]] = eventMap[event];
        }
    }
    function IsObjectEvent(dispId) {
        return (dispId == OSF.DDA.EventDispId.dispidObjectDeletedEvent ||
            dispId == OSF.DDA.EventDispId.dispidObjectSelectionChangedEvent ||
            dispId == OSF.DDA.EventDispId.dispidObjectDataChangedEvent ||
            dispId == OSF.DDA.EventDispId.dispidContentControlAddedEvent);
    }
    function onException(ex, asyncMethodCall, suppliedArgs, callArgs) {
        if (typeof ex == "number") {
            if (!callArgs) {
                callArgs = asyncMethodCall.getCallArgs(suppliedArgs);
            }
            OSF.DDA.issueAsyncResult(callArgs, ex, OSF.DDA.ErrorCodeManager.getErrorArgs(ex));
        }
        else {
            throw ex;
        }
    }
    ;
    this[OSF.DDA.DispIdHost.Methods.InvokeMethod] = function OSF_DDA_DispIdHost_Facade$InvokeMethod(method, suppliedArguments, caller, privateState) {
        var callArgs;
        try {
            var methodName = method.id;
            var asyncMethodCall = OSF.DDA.AsyncMethodCalls[methodName];
            callArgs = asyncMethodCall.verifyAndExtractCall(suppliedArguments, caller, privateState);
            var dispId = dispIdMap[methodName];
            var delegate = getDelegateMethods(methodName);
            var richApiInExcelMethodSubstitution = null;
            if (window.Excel && window.Office.context.requirements.isSetSupported("RedirectV1Api")) {
                window.Excel._RedirectV1APIs = true;
            }
            if (window.Excel && window.Excel._RedirectV1APIs && (richApiInExcelMethodSubstitution = window.Excel._V1APIMap[methodName])) {
                var preprocessedCallArgs = OSF.OUtil.shallowCopy(callArgs);
                delete preprocessedCallArgs[Microsoft.Office.WebExtension.Parameters.AsyncContext];
                if (richApiInExcelMethodSubstitution.preprocess) {
                    preprocessedCallArgs = richApiInExcelMethodSubstitution.preprocess(preprocessedCallArgs);
                }
                var ctx = new window.Excel.RequestContext();
                var result = richApiInExcelMethodSubstitution.call(ctx, preprocessedCallArgs);
                ctx.sync()
                    .then(function () {
                    var response = result.value;
                    var status = response.status;
                    delete response["status"];
                    delete response["@odata.type"];
                    if (richApiInExcelMethodSubstitution.postprocess) {
                        response = richApiInExcelMethodSubstitution.postprocess(response, preprocessedCallArgs);
                    }
                    if (status != 0) {
                        response = OSF.DDA.ErrorCodeManager.getErrorArgs(status);
                    }
                    OSF.DDA.issueAsyncResult(callArgs, status, response);
                })["catch"](function (error) {
                    OSF.DDA.issueAsyncResult(callArgs, OSF.DDA.ErrorCodeManager.errorCodes.ooeFailure, null);
                });
            }
            else {
                var hostCallArgs;
                if (parameterMap.toHost) {
                    hostCallArgs = parameterMap.toHost(dispId, callArgs);
                }
                else {
                    hostCallArgs = callArgs;
                }
                var startTime = (new Date()).getTime();
                delegate[OSF.DDA.DispIdHost.Delegates.ExecuteAsync]({
                    "dispId": dispId,
                    "hostCallArgs": hostCallArgs,
                    "onCalling": function OSF_DDA_DispIdFacade$Execute_onCalling() { },
                    "onReceiving": function OSF_DDA_DispIdFacade$Execute_onReceiving() { },
                    "onComplete": function (status, hostResponseArgs) {
                        var responseArgs;
                        if (status == OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
                            if (parameterMap.fromHost) {
                                responseArgs = parameterMap.fromHost(dispId, hostResponseArgs);
                            }
                            else {
                                responseArgs = hostResponseArgs;
                            }
                        }
                        else {
                            responseArgs = hostResponseArgs;
                        }
                        var payload = asyncMethodCall.processResponse(status, responseArgs, caller, callArgs);
                        OSF.DDA.issueAsyncResult(callArgs, status, payload);
                        if (OSF.AppTelemetry && !(OSF.ConstantNames && OSF.ConstantNames.IsCustomFunctionsRuntime)) {
                            OSF.AppTelemetry.onMethodDone(dispId, hostCallArgs, Math.abs((new Date()).getTime() - startTime), status);
                        }
                    }
                });
            }
        }
        catch (ex) {
            onException(ex, asyncMethodCall, suppliedArguments, callArgs);
        }
    };
    this[OSF.DDA.DispIdHost.Methods.AddEventHandler] = function OSF_DDA_DispIdHost_Facade$AddEventHandler(suppliedArguments, eventDispatch, caller, isPopupWindow) {
        var callArgs;
        var eventType, handler;
        var isObjectEvent = false;
        function onEnsureRegistration(status) {
            if (status == OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
                var added = !isObjectEvent ? eventDispatch.addEventHandler(eventType, handler) :
                    eventDispatch.addObjectEventHandler(eventType, callArgs[Microsoft.Office.WebExtension.Parameters.Id], handler);
                if (!added) {
                    status = OSF.DDA.ErrorCodeManager.errorCodes.ooeEventHandlerAdditionFailed;
                }
            }
            var error;
            if (status != OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
                error = OSF.DDA.ErrorCodeManager.getErrorArgs(status);
            }
            OSF.DDA.issueAsyncResult(callArgs, status, error);
        }
        try {
            var asyncMethodCall = OSF.DDA.AsyncMethodCalls[OSF.DDA.AsyncMethodNames.AddHandlerAsync.id];
            callArgs = asyncMethodCall.verifyAndExtractCall(suppliedArguments, caller, eventDispatch);
            eventType = callArgs[Microsoft.Office.WebExtension.Parameters.EventType];
            handler = callArgs[Microsoft.Office.WebExtension.Parameters.Handler];
            if (isPopupWindow) {
                onEnsureRegistration(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
                return;
            }
            var dispId_1 = dispIdMap[eventType];
            isObjectEvent = IsObjectEvent(dispId_1);
            var targetId_1 = (isObjectEvent ? callArgs[Microsoft.Office.WebExtension.Parameters.Id] : (caller.id || ""));
            var count = isObjectEvent ? eventDispatch.getObjectEventHandlerCount(eventType, targetId_1) : eventDispatch.getEventHandlerCount(eventType);
            if (count == 0) {
                var invoker = getDelegateMethods(eventType)[OSF.DDA.DispIdHost.Delegates.RegisterEventAsync];
                invoker({
                    "eventType": eventType,
                    "dispId": dispId_1,
                    "targetId": targetId_1,
                    "onCalling": function OSF_DDA_DispIdFacade$Execute_onCalling() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall); },
                    "onReceiving": function OSF_DDA_DispIdFacade$Execute_onReceiving() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse); },
                    "onComplete": onEnsureRegistration,
                    "onEvent": function handleEvent(hostArgs) {
                        var args = parameterMap.fromHost(dispId_1, hostArgs);
                        if (!isObjectEvent)
                            eventDispatch.fireEvent(OSF.DDA.OMFactory.manufactureEventArgs(eventType, caller, args));
                        else
                            eventDispatch.fireObjectEvent(targetId_1, OSF.DDA.OMFactory.manufactureEventArgs(eventType, targetId_1, args));
                    }
                });
            }
            else {
                onEnsureRegistration(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
            }
        }
        catch (ex) {
            onException(ex, asyncMethodCall, suppliedArguments, callArgs);
        }
    };
    this[OSF.DDA.DispIdHost.Methods.RemoveEventHandler] = function OSF_DDA_DispIdHost_Facade$RemoveEventHandler(suppliedArguments, eventDispatch, caller) {
        var callArgs;
        var eventType, handler;
        var isObjectEvent = false;
        function onEnsureRegistration(status) {
            var error;
            if (status != OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
                error = OSF.DDA.ErrorCodeManager.getErrorArgs(status);
            }
            OSF.DDA.issueAsyncResult(callArgs, status, error);
        }
        try {
            var asyncMethodCall = OSF.DDA.AsyncMethodCalls[OSF.DDA.AsyncMethodNames.RemoveHandlerAsync.id];
            callArgs = asyncMethodCall.verifyAndExtractCall(suppliedArguments, caller, eventDispatch);
            eventType = callArgs[Microsoft.Office.WebExtension.Parameters.EventType];
            handler = callArgs[Microsoft.Office.WebExtension.Parameters.Handler];
            var dispId = dispIdMap[eventType];
            isObjectEvent = IsObjectEvent(dispId);
            var targetId = (isObjectEvent ? callArgs[Microsoft.Office.WebExtension.Parameters.Id] : (caller.id || ""));
            var status, removeSuccess;
            if (handler === null) {
                removeSuccess = isObjectEvent ? eventDispatch.clearObjectEventHandlers(eventType, targetId) : eventDispatch.clearEventHandlers(eventType);
                status = OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess;
            }
            else {
                removeSuccess = isObjectEvent ? eventDispatch.removeObjectEventHandler(eventType, targetId, handler) : eventDispatch.removeEventHandler(eventType, handler);
                status = removeSuccess ? OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess : OSF.DDA.ErrorCodeManager.errorCodes.ooeEventHandlerNotExist;
            }
            var count = isObjectEvent ? eventDispatch.getObjectEventHandlerCount(eventType, targetId) : eventDispatch.getEventHandlerCount(eventType);
            if (removeSuccess && count == 0) {
                var invoker = getDelegateMethods(eventType)[OSF.DDA.DispIdHost.Delegates.UnregisterEventAsync];
                invoker({
                    "eventType": eventType,
                    "dispId": dispId,
                    "targetId": targetId,
                    "onCalling": function OSF_DDA_DispIdFacade$Execute_onCalling() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall); },
                    "onReceiving": function OSF_DDA_DispIdFacade$Execute_onReceiving() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse); },
                    "onComplete": onEnsureRegistration
                });
            }
            else {
                onEnsureRegistration(status);
            }
        }
        catch (ex) {
            onException(ex, asyncMethodCall, suppliedArguments, callArgs);
        }
    };
    this[OSF.DDA.DispIdHost.Methods.OpenDialog] = function OSF_DDA_DispIdHost_Facade$OpenDialog(suppliedArguments, eventDispatch, caller) {
        var callArgs;
        var targetId;
        var dialogMessageEvent = Microsoft.Office.WebExtension.EventType.DialogMessageReceived;
        var dialogOtherEvent = Microsoft.Office.WebExtension.EventType.DialogEventReceived;
        function onEnsureRegistration(status) {
            var payload;
            if (status != OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
                payload = OSF.DDA.ErrorCodeManager.getErrorArgs(status);
            }
            else {
                var onSucceedArgs = {};
                onSucceedArgs[Microsoft.Office.WebExtension.Parameters.Id] = targetId;
                onSucceedArgs[Microsoft.Office.WebExtension.Parameters.Data] = eventDispatch;
                var payload = asyncMethodCall.processResponse(status, onSucceedArgs, caller, callArgs);
                OSF.DialogShownStatus.hasDialogShown = true;
                eventDispatch.clearEventHandlers(dialogMessageEvent);
                eventDispatch.clearEventHandlers(dialogOtherEvent);
            }
            OSF.DDA.issueAsyncResult(callArgs, status, payload);
        }
        try {
            if (dialogMessageEvent == undefined || dialogOtherEvent == undefined) {
                onEnsureRegistration(OSF.DDA.ErrorCodeManager.ooeOperationNotSupported);
            }
            if (OSF.DDA.AsyncMethodNames.DisplayDialogAsync == null) {
                onEnsureRegistration(OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError);
                return;
            }
            var asyncMethodCall = OSF.DDA.AsyncMethodCalls[OSF.DDA.AsyncMethodNames.DisplayDialogAsync.id];
            callArgs = asyncMethodCall.verifyAndExtractCall(suppliedArguments, caller, eventDispatch);
            var dispId = dispIdMap[dialogMessageEvent];
            var delegateMethods = getDelegateMethods(dialogMessageEvent);
            var invoker = delegateMethods[OSF.DDA.DispIdHost.Delegates.OpenDialog] != undefined ?
                delegateMethods[OSF.DDA.DispIdHost.Delegates.OpenDialog] :
                delegateMethods[OSF.DDA.DispIdHost.Delegates.RegisterEventAsync];
            targetId = JSON.stringify(callArgs);
            if (!OSF.DialogShownStatus.hasDialogShown) {
                eventDispatch.clearQueuedEvent(dialogMessageEvent);
                eventDispatch.clearQueuedEvent(dialogOtherEvent);
                eventDispatch.clearQueuedEvent(Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived);
            }
            invoker({
                "eventType": dialogMessageEvent,
                "dispId": dispId,
                "targetId": targetId,
                "onCalling": function OSF_DDA_DispIdFacade$Execute_onCalling() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall); },
                "onReceiving": function OSF_DDA_DispIdFacade$Execute_onReceiving() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse); },
                "onComplete": onEnsureRegistration,
                "onEvent": function handleEvent(hostArgs) {
                    var args = parameterMap.fromHost(dispId, hostArgs);
                    var event = OSF.DDA.OMFactory.manufactureEventArgs(dialogMessageEvent, caller, args);
                    if (event.type == dialogOtherEvent) {
                        var payload = OSF.DDA.ErrorCodeManager.getErrorArgs(event.error);
                        var errorArgs = {};
                        errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Code] = status || OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                        errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Name] = payload.name || payload;
                        errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Message] = payload.message || payload;
                        event.error = new OSF.DDA.Error(errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Name], errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Message], errorArgs[OSF.DDA.AsyncResultEnum.ErrorProperties.Code]);
                    }
                    eventDispatch.fireOrQueueEvent(event);
                    if (args[OSF.DDA.PropertyDescriptors.MessageType] == OSF.DialogMessageType.DialogClosed) {
                        eventDispatch.clearEventHandlers(dialogMessageEvent);
                        eventDispatch.clearEventHandlers(dialogOtherEvent);
                        eventDispatch.clearEventHandlers(Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived);
                        OSF.DialogShownStatus.hasDialogShown = false;
                    }
                }
            });
        }
        catch (ex) {
            onException(ex, asyncMethodCall, suppliedArguments, callArgs);
        }
    };
    this[OSF.DDA.DispIdHost.Methods.CloseDialog] = function OSF_DDA_DispIdHost_Facade$CloseDialog(suppliedArguments, targetId, eventDispatch, caller) {
        var callArgs;
        var dialogMessageEvent, dialogOtherEvent;
        var closeStatus = OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess;
        function closeCallback(status) {
            closeStatus = status;
            OSF.DialogShownStatus.hasDialogShown = false;
        }
        try {
            var asyncMethodCall = OSF.DDA.AsyncMethodCalls[OSF.DDA.AsyncMethodNames.CloseAsync.id];
            callArgs = asyncMethodCall.verifyAndExtractCall(suppliedArguments, caller, eventDispatch);
            dialogMessageEvent = Microsoft.Office.WebExtension.EventType.DialogMessageReceived;
            dialogOtherEvent = Microsoft.Office.WebExtension.EventType.DialogEventReceived;
            eventDispatch.clearEventHandlers(dialogMessageEvent);
            eventDispatch.clearEventHandlers(dialogOtherEvent);
            var dispId = dispIdMap[dialogMessageEvent];
            var delegateMethods = getDelegateMethods(dialogMessageEvent);
            var invoker = delegateMethods[OSF.DDA.DispIdHost.Delegates.CloseDialog] != undefined ?
                delegateMethods[OSF.DDA.DispIdHost.Delegates.CloseDialog] :
                delegateMethods[OSF.DDA.DispIdHost.Delegates.UnregisterEventAsync];
            invoker({
                "eventType": dialogMessageEvent,
                "dispId": dispId,
                "targetId": targetId,
                "onCalling": function OSF_DDA_DispIdFacade$Execute_onCalling() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall); },
                "onReceiving": function OSF_DDA_DispIdFacade$Execute_onReceiving() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse); },
                "onComplete": closeCallback
            });
        }
        catch (ex) {
            onException(ex, asyncMethodCall, suppliedArguments, callArgs);
        }
        if (closeStatus != OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
            throw OSF.OUtil.formatString(Strings.OfficeOM.L_FunctionCallFailed, OSF.DDA.AsyncMethodNames.CloseAsync.displayName, closeStatus);
        }
    };
    this[OSF.DDA.DispIdHost.Methods.MessageParent] = function OSF_DDA_DispIdHost_Facade$MessageParent(suppliedArguments, caller) {
        var stateInfo = {};
        var syncMethodCall = OSF.DDA.SyncMethodCalls[OSF.DDA.SyncMethodNames.MessageParent.id];
        var callArgs = syncMethodCall.verifyAndExtractCall(suppliedArguments, caller, stateInfo);
        var delegate = getDelegateMethods(OSF.DDA.SyncMethodNames.MessageParent.id);
        var invoker = delegate[OSF.DDA.DispIdHost.Delegates.MessageParent];
        var dispId = dispIdMap[OSF.DDA.SyncMethodNames.MessageParent.id];
        return invoker({
            "dispId": dispId,
            "hostCallArgs": callArgs,
            "onCalling": function OSF_DDA_DispIdFacade$Execute_onCalling() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall); },
            "onReceiving": function OSF_DDA_DispIdFacade$Execute_onReceiving() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse); }
        });
    };
    this[OSF.DDA.DispIdHost.Methods.SendMessage] = function OSF_DDA_DispIdHost_Facade$SendMessage(suppliedArguments, eventDispatch, caller) {
        var stateInfo = {};
        var syncMethodCall = OSF.DDA.SyncMethodCalls[OSF.DDA.SyncMethodNames.SendMessage.id];
        var callArgs = syncMethodCall.verifyAndExtractCall(suppliedArguments, caller, stateInfo);
        var delegate = getDelegateMethods(OSF.DDA.SyncMethodNames.SendMessage.id);
        var invoker = delegate[OSF.DDA.DispIdHost.Delegates.SendMessage];
        var dispId = dispIdMap[OSF.DDA.SyncMethodNames.SendMessage.id];
        return invoker({
            "dispId": dispId,
            "hostCallArgs": callArgs,
            "onCalling": function OSF_DDA_DispIdFacade$Execute_onCalling() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.IssueCall); },
            "onReceiving": function OSF_DDA_DispIdFacade$Execute_onReceiving() { OSF.OUtil.writeProfilerMark(OSF.HostCallPerfMarker.ReceiveResponse); }
        });
    };
};
OSF.DDA.DispIdHost.addAsyncMethods = function OSF_DDA_DispIdHost$AddAsyncMethods(target, asyncMethodNames, privateState) {
    for (var entry in asyncMethodNames) {
        var method = asyncMethodNames[entry];
        var name = method.displayName;
        if (!target[name]) {
            OSF.OUtil.defineEnumerableProperty(target, name, {
                value: (function (asyncMethod) {
                    return function () {
                        var invokeMethod = OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.InvokeMethod];
                        invokeMethod(asyncMethod, arguments, target, privateState);
                    };
                })(method)
            });
        }
    }
};
OSF.DDA.DispIdHost.addEventSupport = function OSF_DDA_DispIdHost$AddEventSupport(target, eventDispatch, isPopupWindow) {
    var add = OSF.DDA.AsyncMethodNames.AddHandlerAsync.displayName;
    var remove = OSF.DDA.AsyncMethodNames.RemoveHandlerAsync.displayName;
    if (!target[add]) {
        OSF.OUtil.defineEnumerableProperty(target, add, {
            value: function () {
                var addEventHandler = OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.AddEventHandler];
                addEventHandler(arguments, eventDispatch, target, isPopupWindow);
            }
        });
    }
    if (!target[remove]) {
        OSF.OUtil.defineEnumerableProperty(target, remove, {
            value: function () {
                var removeEventHandler = OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.RemoveEventHandler];
                removeEventHandler(arguments, eventDispatch, target);
            }
        });
    }
};
(function (OfficeExt) {
    var MsAjaxTypeHelper = (function () {
        function MsAjaxTypeHelper() {
        }
        MsAjaxTypeHelper.isInstanceOfType = function (type, instance) {
            if (typeof (instance) === "undefined" || instance === null)
                return false;
            if (instance instanceof type)
                return true;
            var instanceType = instance.constructor;
            if (!instanceType || (typeof (instanceType) !== "function") || !instanceType.__typeName || instanceType.__typeName === 'Object') {
                instanceType = Object;
            }
            return !!(instanceType === type) ||
                (instanceType.__typeName && type.__typeName && instanceType.__typeName === type.__typeName);
        };
        return MsAjaxTypeHelper;
    }());
    OfficeExt.MsAjaxTypeHelper = MsAjaxTypeHelper;
    var MsAjaxError = (function () {
        function MsAjaxError() {
        }
        MsAjaxError.create = function (message, errorInfo) {
            var err = new Error(message);
            err.message = message;
            if (errorInfo) {
                for (var v in errorInfo) {
                    err[v] = errorInfo[v];
                }
            }
            err.popStackFrame();
            return err;
        };
        MsAjaxError.parameterCount = function (message) {
            var displayMessage = "Sys.ParameterCountException: " + (message ? message : "Parameter count mismatch.");
            var err = MsAjaxError.create(displayMessage, { name: 'Sys.ParameterCountException' });
            err.popStackFrame();
            return err;
        };
        MsAjaxError.argument = function (paramName, message) {
            var displayMessage = "Sys.ArgumentException: " + (message ? message : "Value does not fall within the expected range.");
            if (paramName) {
                displayMessage += "\n" + MsAjaxString.format("Parameter name: {0}", paramName);
            }
            var err = MsAjaxError.create(displayMessage, { name: "Sys.ArgumentException", paramName: paramName });
            err.popStackFrame();
            return err;
        };
        MsAjaxError.argumentNull = function (paramName, message) {
            var displayMessage = "Sys.ArgumentNullException: " + (message ? message : "Value cannot be null.");
            if (paramName) {
                displayMessage += "\n" + MsAjaxString.format("Parameter name: {0}", paramName);
            }
            var err = MsAjaxError.create(displayMessage, { name: "Sys.ArgumentNullException", paramName: paramName });
            err.popStackFrame();
            return err;
        };
        MsAjaxError.argumentOutOfRange = function (paramName, actualValue, message) {
            var displayMessage = "Sys.ArgumentOutOfRangeException: " + (message ? message : "Specified argument was out of the range of valid values.");
            if (paramName) {
                displayMessage += "\n" + MsAjaxString.format("Parameter name: {0}", paramName);
            }
            if (typeof (actualValue) !== "undefined" && actualValue !== null) {
                displayMessage += "\n" + MsAjaxString.format("Actual value was {0}.", actualValue);
            }
            var err = MsAjaxError.create(displayMessage, {
                name: "Sys.ArgumentOutOfRangeException",
                paramName: paramName,
                actualValue: actualValue
            });
            err.popStackFrame();
            return err;
        };
        MsAjaxError.argumentType = function (paramName, actualType, expectedType, message) {
            var displayMessage = "Sys.ArgumentTypeException: ";
            if (message) {
                displayMessage += message;
            }
            else if (actualType && expectedType) {
                displayMessage += MsAjaxString.format("Object of type '{0}' cannot be converted to type '{1}'.", actualType.getName ? actualType.getName() : actualType, expectedType.getName ? expectedType.getName() : expectedType);
            }
            else {
                displayMessage += "Object cannot be converted to the required type.";
            }
            if (paramName) {
                displayMessage += "\n" + MsAjaxString.format("Parameter name: {0}", paramName);
            }
            var err = MsAjaxError.create(displayMessage, {
                name: "Sys.ArgumentTypeException",
                paramName: paramName,
                actualType: actualType,
                expectedType: expectedType
            });
            err.popStackFrame();
            return err;
        };
        MsAjaxError.argumentUndefined = function (paramName, message) {
            var displayMessage = "Sys.ArgumentUndefinedException: " + (message ? message : "Value cannot be undefined.");
            if (paramName) {
                displayMessage += "\n" + MsAjaxString.format("Parameter name: {0}", paramName);
            }
            var err = MsAjaxError.create(displayMessage, { name: "Sys.ArgumentUndefinedException", paramName: paramName });
            err.popStackFrame();
            return err;
        };
        MsAjaxError.invalidOperation = function (message) {
            var displayMessage = "Sys.InvalidOperationException: " + (message ? message : "Operation is not valid due to the current state of the object.");
            var err = MsAjaxError.create(displayMessage, { name: 'Sys.InvalidOperationException' });
            err.popStackFrame();
            return err;
        };
        return MsAjaxError;
    }());
    OfficeExt.MsAjaxError = MsAjaxError;
    var MsAjaxString = (function () {
        function MsAjaxString() {
        }
        MsAjaxString.format = function (format) {
            var args = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                args[_i - 1] = arguments[_i];
            }
            var source = format;
            return source.replace(/{(\d+)}/gm, function (match, number) {
                var index = parseInt(number, 10);
                return args[index] === undefined ? '{' + number + '}' : args[index];
            });
        };
        MsAjaxString.startsWith = function (str, prefix) {
            return (str.substr(0, prefix.length) === prefix);
        };
        return MsAjaxString;
    }());
    OfficeExt.MsAjaxString = MsAjaxString;
    var MsAjaxDebug = (function () {
        function MsAjaxDebug() {
        }
        MsAjaxDebug.trace = function (text) {
            if (typeof Debug !== "undefined" && Debug.writeln)
                Debug.writeln(text);
            if (window.console && window.console.log)
                window.console.log(text);
            if (window.opera && window.opera.postError)
                window.opera.postError(text);
            if (window.debugService && window.debugService.trace)
                window.debugService.trace(text);
            var a = document.getElementById("TraceConsole");
            if (a && a.tagName.toUpperCase() === "TEXTAREA") {
                a.innerHTML += text + "\n";
            }
        };
        return MsAjaxDebug;
    }());
    OfficeExt.MsAjaxDebug = MsAjaxDebug;
    if (!OsfMsAjaxFactory.isMsAjaxLoaded()) {
        var registerTypeInternal = function registerTypeInternal(type, name, isClass) {
            if (type.__typeName === undefined || type.__typeName === null) {
                type.__typeName = name;
            }
            if (type.__class === undefined || type.__class === null) {
                type.__class = isClass;
            }
        };
        registerTypeInternal(Function, "Function", true);
        registerTypeInternal(Error, "Error", true);
        registerTypeInternal(Object, "Object", true);
        registerTypeInternal(String, "String", true);
        registerTypeInternal(Boolean, "Boolean", true);
        registerTypeInternal(Date, "Date", true);
        registerTypeInternal(Number, "Number", true);
        registerTypeInternal(RegExp, "RegExp", true);
        registerTypeInternal(Array, "Array", true);
        if (!Function.createCallback) {
            Function.createCallback = function Function$createCallback(method, context) {
                var e = Function._validateParams(arguments, [
                    { name: "method", type: Function },
                    { name: "context", mayBeNull: true }
                ]);
                if (e)
                    throw e;
                return function () {
                    var l = arguments.length;
                    if (l > 0) {
                        var args = [];
                        for (var i = 0; i < l; i++) {
                            args[i] = arguments[i];
                        }
                        args[l] = context;
                        return method.apply(this, args);
                    }
                    return method.call(this, context);
                };
            };
        }
        if (!Function.createDelegate) {
            Function.createDelegate = function Function$createDelegate(instance, method) {
                var e = Function._validateParams(arguments, [
                    { name: "instance", mayBeNull: true },
                    { name: "method", type: Function }
                ]);
                if (e)
                    throw e;
                return function () {
                    return method.apply(instance, arguments);
                };
            };
        }
        if (!Function._validateParams) {
            Function._validateParams = function (params, expectedParams, validateParameterCount) {
                var e, expectedLength = expectedParams.length;
                validateParameterCount = validateParameterCount || (typeof (validateParameterCount) === "undefined");
                e = Function._validateParameterCount(params, expectedParams, validateParameterCount);
                if (e) {
                    e.popStackFrame();
                    return e;
                }
                for (var i = 0, l = params.length; i < l; i++) {
                    var expectedParam = expectedParams[Math.min(i, expectedLength - 1)], paramName = expectedParam.name;
                    if (expectedParam.parameterArray) {
                        paramName += "[" + (i - expectedLength + 1) + "]";
                    }
                    else if (!validateParameterCount && (i >= expectedLength)) {
                        break;
                    }
                    e = Function._validateParameter(params[i], expectedParam, paramName);
                    if (e) {
                        e.popStackFrame();
                        return e;
                    }
                }
                return null;
            };
        }
        if (!Function._validateParameterCount) {
            Function._validateParameterCount = function (params, expectedParams, validateParameterCount) {
                var i, error, expectedLen = expectedParams.length, actualLen = params.length;
                if (actualLen < expectedLen) {
                    var minParams = expectedLen;
                    for (i = 0; i < expectedLen; i++) {
                        var param = expectedParams[i];
                        if (param.optional || param.parameterArray) {
                            minParams--;
                        }
                    }
                    if (actualLen < minParams) {
                        error = true;
                    }
                }
                else if (validateParameterCount && (actualLen > expectedLen)) {
                    error = true;
                    for (i = 0; i < expectedLen; i++) {
                        if (expectedParams[i].parameterArray) {
                            error = false;
                            break;
                        }
                    }
                }
                if (error) {
                    var e = MsAjaxError.parameterCount();
                    e.popStackFrame();
                    return e;
                }
                return null;
            };
        }
        if (!Function._validateParameter) {
            Function._validateParameter = function (param, expectedParam, paramName) {
                var e, expectedType = expectedParam.type, expectedInteger = !!expectedParam.integer, expectedDomElement = !!expectedParam.domElement, mayBeNull = !!expectedParam.mayBeNull;
                e = Function._validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName);
                if (e) {
                    e.popStackFrame();
                    return e;
                }
                var expectedElementType = expectedParam.elementType, elementMayBeNull = !!expectedParam.elementMayBeNull;
                if (expectedType === Array && typeof (param) !== "undefined" && param !== null &&
                    (expectedElementType || !elementMayBeNull)) {
                    var expectedElementInteger = !!expectedParam.elementInteger, expectedElementDomElement = !!expectedParam.elementDomElement;
                    for (var i = 0; i < param.length; i++) {
                        var elem = param[i];
                        e = Function._validateParameterType(elem, expectedElementType, expectedElementInteger, expectedElementDomElement, elementMayBeNull, paramName + "[" + i + "]");
                        if (e) {
                            e.popStackFrame();
                            return e;
                        }
                    }
                }
                return null;
            };
        }
        if (!Function._validateParameterType) {
            Function._validateParameterType = function (param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName) {
                var e, i;
                if (typeof (param) === "undefined") {
                    if (mayBeNull) {
                        return null;
                    }
                    else {
                        e = OfficeExt.MsAjaxError.argumentUndefined(paramName);
                        e.popStackFrame();
                        return e;
                    }
                }
                if (param === null) {
                    if (mayBeNull) {
                        return null;
                    }
                    else {
                        e = OfficeExt.MsAjaxError.argumentNull(paramName);
                        e.popStackFrame();
                        return e;
                    }
                }
                if (expectedType && !OfficeExt.MsAjaxTypeHelper.isInstanceOfType(expectedType, param)) {
                    e = OfficeExt.MsAjaxError.argumentType(paramName, typeof (param), expectedType);
                    e.popStackFrame();
                    return e;
                }
                return null;
            };
        }
        if (!window.Type) {
            window.Type = Function;
        }
        if (!Type.registerNamespace) {
            Type.registerNamespace = function (ns) {
                var namespaceParts = ns.split('.');
                var currentNamespace = window;
                for (var i = 0; i < namespaceParts.length; i++) {
                    currentNamespace[namespaceParts[i]] = currentNamespace[namespaceParts[i]] || {};
                    currentNamespace = currentNamespace[namespaceParts[i]];
                }
            };
        }
        if (!Type.prototype.registerClass) {
            Type.prototype.registerClass = function (cls) { cls = {}; };
        }
        if (typeof (Sys) === "undefined") {
            Type.registerNamespace('Sys');
        }
        if (!Error.prototype.popStackFrame) {
            Error.prototype.popStackFrame = function () {
                if (arguments.length !== 0)
                    throw MsAjaxError.parameterCount();
                if (typeof (this.stack) === "undefined" || this.stack === null ||
                    typeof (this.fileName) === "undefined" || this.fileName === null ||
                    typeof (this.lineNumber) === "undefined" || this.lineNumber === null) {
                    return;
                }
                var stackFrames = this.stack.split("\n");
                var currentFrame = stackFrames[0];
                var pattern = this.fileName + ":" + this.lineNumber;
                while (typeof (currentFrame) !== "undefined" &&
                    currentFrame !== null &&
                    currentFrame.indexOf(pattern) === -1) {
                    stackFrames.shift();
                    currentFrame = stackFrames[0];
                }
                var nextFrame = stackFrames[1];
                if (typeof (nextFrame) === "undefined" || nextFrame === null) {
                    return;
                }
                var nextFrameParts = nextFrame.match(/@(.*):(\d+)$/);
                if (typeof (nextFrameParts) === "undefined" || nextFrameParts === null) {
                    return;
                }
                this.fileName = nextFrameParts[1];
                this.lineNumber = parseInt(nextFrameParts[2]);
                stackFrames.shift();
                this.stack = stackFrames.join("\n");
            };
        }
        OsfMsAjaxFactory.msAjaxError = MsAjaxError;
        OsfMsAjaxFactory.msAjaxString = MsAjaxString;
        OsfMsAjaxFactory.msAjaxDebug = MsAjaxDebug;
    }
})(OfficeExt || (OfficeExt = {}));
OSF.OUtil.setNamespace("SafeArray", OSF.DDA);
OSF.DDA.SafeArray.Response = {
    Status: 0,
    Payload: 1
};
OSF.DDA.SafeArray.UniqueArguments = {
    Offset: "offset",
    Run: "run",
    BindingSpecificData: "bindingSpecificData",
    MergedCellGuid: "{66e7831f-81b2-42e2-823c-89e872d541b3}"
};
OSF.OUtil.setNamespace("Delegate", OSF.DDA.SafeArray);
OSF.DDA.SafeArray.Delegate._onException = function OSF_DDA_SafeArray_Delegate$OnException(ex, args) {
    var status;
    var statusNumber = ex.number;
    if (statusNumber) {
        switch (statusNumber) {
            case -2146828218:
                status = OSF.DDA.ErrorCodeManager.errorCodes.ooeNoCapability;
                break;
            case -2147467259:
                if (args.dispId == OSF.DDA.EventDispId.dispidDialogMessageReceivedEvent) {
                    status = OSF.DDA.ErrorCodeManager.errorCodes.ooeDialogAlreadyOpened;
                }
                else {
                    status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                }
                break;
            case -2146828283:
                status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidParam;
                break;
            case -2147209089:
                status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidParam;
                break;
            case -2147208704:
                status = OSF.DDA.ErrorCodeManager.errorCodes.ooeTooManyIncompleteRequests;
                break;
            case -2146827850:
            default:
                status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                break;
        }
    }
    if (args.onComplete) {
        args.onComplete(status || OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError);
    }
};
OSF.DDA.SafeArray.Delegate._onExceptionSyncMethod = function OSF_DDA_SafeArray_Delegate$OnExceptionSyncMethod(ex, args) {
    var status;
    var number = ex.number;
    if (number) {
        switch (number) {
            case -2146828218:
                status = OSF.DDA.ErrorCodeManager.errorCodes.ooeNoCapability;
                break;
            case -2146827850:
            default:
                status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                break;
        }
    }
    return status || OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
};
OSF.DDA.SafeArray.Delegate.SpecialProcessor = function OSF_DDA_SafeArray_Delegate_SpecialProcessor() {
    function _2DVBArrayToJaggedArray(vbArr) {
        var ret;
        try {
            var rows = vbArr.ubound(1);
            var cols = vbArr.ubound(2);
            vbArr = vbArr.toArray();
            if (rows == 1 && cols == 1) {
                ret = [vbArr];
            }
            else {
                ret = [];
                for (var row = 0; row < rows; row++) {
                    var rowArr = [];
                    for (var col = 0; col < cols; col++) {
                        var datum = vbArr[row * cols + col];
                        if (datum != OSF.DDA.SafeArray.UniqueArguments.MergedCellGuid) {
                            rowArr.push(datum);
                        }
                    }
                    if (rowArr.length > 0) {
                        ret.push(rowArr);
                    }
                }
            }
        }
        catch (ex) {
        }
        return ret;
    }
    var complexTypes = [];
    var dynamicTypes = {};
    dynamicTypes[Microsoft.Office.WebExtension.Parameters.Data] = (function () {
        var tableRows = 0;
        var tableHeaders = 1;
        return {
            toHost: function OSF_DDA_SafeArray_Delegate_SpecialProcessor_Data$toHost(data) {
                if (OSF.DDA.TableDataProperties && typeof data != "string" && data[OSF.DDA.TableDataProperties.TableRows] !== undefined) {
                    var tableData = [];
                    tableData[tableRows] = data[OSF.DDA.TableDataProperties.TableRows];
                    tableData[tableHeaders] = data[OSF.DDA.TableDataProperties.TableHeaders];
                    data = tableData;
                }
                return data;
            },
            fromHost: function OSF_DDA_SafeArray_Delegate_SpecialProcessor_Data$fromHost(hostArgs) {
                var ret;
                if (hostArgs.toArray) {
                    var dimensions = hostArgs.dimensions();
                    if (dimensions === 2) {
                        ret = _2DVBArrayToJaggedArray(hostArgs);
                    }
                    else {
                        var array = hostArgs.toArray();
                        if (array.length === 2 && ((array[0] != null && array[0].toArray) || (array[1] != null && array[1].toArray))) {
                            ret = {};
                            ret[OSF.DDA.TableDataProperties.TableRows] = _2DVBArrayToJaggedArray(array[tableRows]);
                            ret[OSF.DDA.TableDataProperties.TableHeaders] = _2DVBArrayToJaggedArray(array[tableHeaders]);
                        }
                        else {
                            ret = array;
                        }
                    }
                }
                else {
                    ret = hostArgs;
                }
                return ret;
            }
        };
    })();
    OSF.DDA.SafeArray.Delegate.SpecialProcessor.uber.constructor.call(this, complexTypes, dynamicTypes);
    this.unpack = function OSF_DDA_SafeArray_Delegate_SpecialProcessor$unpack(param, arg) {
        var value;
        if (this.isComplexType(param) || OSF.DDA.ListType.isListType(param)) {
            var toArraySupported = arg !== undefined && arg.toArray !== undefined;
            value = toArraySupported ? arg.toArray() : arg || {};
        }
        else if (this.isDynamicType(param)) {
            value = dynamicTypes[param].fromHost(arg);
        }
        else {
            value = arg;
        }
        return value;
    };
};
OSF.OUtil.extend(OSF.DDA.SafeArray.Delegate.SpecialProcessor, OSF.DDA.SpecialProcessor);
OSF.DDA.SafeArray.Delegate.ParameterMap = OSF.DDA.getDecoratedParameterMap(new OSF.DDA.SafeArray.Delegate.SpecialProcessor(), [
    {
        type: Microsoft.Office.WebExtension.Parameters.ValueFormat,
        toHost: [
            { name: Microsoft.Office.WebExtension.ValueFormat.Unformatted, value: 0 },
            { name: Microsoft.Office.WebExtension.ValueFormat.Formatted, value: 1 }
        ]
    },
    {
        type: Microsoft.Office.WebExtension.Parameters.FilterType,
        toHost: [
            { name: Microsoft.Office.WebExtension.FilterType.All, value: 0 }
        ]
    }
]);
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.PropertyDescriptors.AsyncResultStatus,
    fromHost: [
        { name: Microsoft.Office.WebExtension.AsyncResultStatus.Succeeded, value: 0 },
        { name: Microsoft.Office.WebExtension.AsyncResultStatus.Failed, value: 1 }
    ]
});
OSF.DDA.SafeArray.Delegate.executeAsync = function OSF_DDA_SafeArray_Delegate$ExecuteAsync(args) {
    function toArray(args) {
        var arrArgs = args;
        if (OSF.OUtil.isArray(args)) {
            var len = arrArgs.length;
            for (var i = 0; i < len; i++) {
                arrArgs[i] = toArray(arrArgs[i]);
            }
        }
        else if (OSF.OUtil.isDate(args)) {
            arrArgs = args.getVarDate();
        }
        else if (typeof args === "object" && !OSF.OUtil.isArray(args)) {
            arrArgs = [];
            for (var index in args) {
                if (!OSF.OUtil.isFunction(args[index])) {
                    arrArgs[index] = toArray(args[index]);
                }
            }
        }
        return arrArgs;
    }
    function fromSafeArray(value) {
        var ret = value;
        if (value != null && value.toArray) {
            var arrayResult = value.toArray();
            ret = new Array(arrayResult.length);
            for (var i = 0; i < arrayResult.length; i++) {
                ret[i] = fromSafeArray(arrayResult[i]);
            }
        }
        return ret;
    }
    try {
        if (args.onCalling) {
            args.onCalling();
        }
        OSF.ClientHostController.execute(args.dispId, toArray(args.hostCallArgs), function OSF_DDA_SafeArrayFacade$Execute_OnResponse(hostResponseArgs, resultCode) {
            var result;
            var status;
            if (typeof hostResponseArgs === "number") {
                result = [];
                status = hostResponseArgs;
            }
            else {
                result = hostResponseArgs.toArray();
                status = result[OSF.DDA.SafeArray.Response.Status];
            }
            if (status == OSF.DDA.ErrorCodeManager.errorCodes.ooeChunkResult) {
                var payload = result[OSF.DDA.SafeArray.Response.Payload];
                payload = fromSafeArray(payload);
                if (payload != null) {
                    if (!args._chunkResultData) {
                        args._chunkResultData = new Array();
                    }
                    args._chunkResultData[payload[0]] = payload[1];
                }
                return false;
            }
            if (args.onReceiving) {
                args.onReceiving();
            }
            if (args.onComplete) {
                var payload;
                if (status == OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
                    if (result.length > 2) {
                        payload = [];
                        for (var i = 1; i < result.length; i++)
                            payload[i - 1] = result[i];
                    }
                    else {
                        payload = result[OSF.DDA.SafeArray.Response.Payload];
                    }
                    if (args._chunkResultData) {
                        payload = fromSafeArray(payload);
                        if (payload != null) {
                            var expectedChunkCount = payload[payload.length - 1];
                            if (args._chunkResultData.length == expectedChunkCount) {
                                payload[payload.length - 1] = args._chunkResultData;
                            }
                            else {
                                status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                            }
                        }
                    }
                }
                else {
                    payload = result[OSF.DDA.SafeArray.Response.Payload];
                }
                args.onComplete(status, payload);
            }
            return true;
        });
    }
    catch (ex) {
        OSF.DDA.SafeArray.Delegate._onException(ex, args);
    }
};
OSF.DDA.SafeArray.Delegate._getOnAfterRegisterEvent = function OSF_DDA_SafeArrayDelegate$GetOnAfterRegisterEvent(register, args) {
    var startTime = (new Date()).getTime();
    return function OSF_DDA_SafeArrayDelegate$OnAfterRegisterEvent(hostResponseArgs) {
        if (args.onReceiving) {
            args.onReceiving();
        }
        var status = hostResponseArgs.toArray ? hostResponseArgs.toArray()[OSF.DDA.SafeArray.Response.Status] : hostResponseArgs;
        if (args.onComplete) {
            args.onComplete(status);
        }
        if (OSF.AppTelemetry) {
            OSF.AppTelemetry.onRegisterDone(register, args.dispId, Math.abs((new Date()).getTime() - startTime), status);
        }
    };
};
OSF.DDA.SafeArray.Delegate.registerEventAsync = function OSF_DDA_SafeArray_Delegate$RegisterEventAsync(args) {
    if (args.onCalling) {
        args.onCalling();
    }
    var callback = OSF.DDA.SafeArray.Delegate._getOnAfterRegisterEvent(true, args);
    try {
        OSF.ClientHostController.registerEvent(args.dispId, args.targetId, function OSF_DDA_SafeArrayDelegate$RegisterEventAsync_OnEvent(eventDispId, payload) {
            if (args.onEvent) {
                args.onEvent(payload);
            }
            if (OSF.AppTelemetry) {
                OSF.AppTelemetry.onEventDone(args.dispId);
            }
        }, callback);
    }
    catch (ex) {
        OSF.DDA.SafeArray.Delegate._onException(ex, args);
    }
};
OSF.DDA.SafeArray.Delegate.unregisterEventAsync = function OSF_DDA_SafeArray_Delegate$UnregisterEventAsync(args) {
    if (args.onCalling) {
        args.onCalling();
    }
    var callback = OSF.DDA.SafeArray.Delegate._getOnAfterRegisterEvent(false, args);
    try {
        OSF.ClientHostController.unregisterEvent(args.dispId, args.targetId, callback);
    }
    catch (ex) {
        OSF.DDA.SafeArray.Delegate._onException(ex, args);
    }
};
OSF.ClientMode = {
    ReadWrite: 0,
    ReadOnly: 1
};
OSF.DDA.RichInitializationReason = {
    1: Microsoft.Office.WebExtension.InitializationReason.Inserted,
    2: Microsoft.Office.WebExtension.InitializationReason.DocumentOpened
};
OSF.InitializationHelper = function OSF_InitializationHelper(hostInfo, webAppState, context, settings, hostFacade) {
    this._hostInfo = hostInfo;
    this._webAppState = webAppState;
    this._context = context;
    this._settings = settings;
    this._hostFacade = hostFacade;
    this._initializeSettings = this.initializeSettings;
};
OSF.InitializationHelper.prototype.deserializeSettings = function OSF_InitializationHelper$deserializeSettings(serializedSettings, refreshSupported) {
    var settings;
    var osfSessionStorage = OSF.OUtil.getSessionStorage();
    if (osfSessionStorage) {
        var storageSettings = osfSessionStorage.getItem(OSF._OfficeAppFactory.getCachedSessionSettingsKey());
        if (storageSettings) {
            serializedSettings = JSON.parse(storageSettings);
        }
        else {
            storageSettings = JSON.stringify(serializedSettings);
            osfSessionStorage.setItem(OSF._OfficeAppFactory.getCachedSessionSettingsKey(), storageSettings);
        }
    }
    var deserializedSettings = OSF.DDA.SettingsManager.deserializeSettings(serializedSettings);
    if (refreshSupported) {
        settings = new OSF.DDA.RefreshableSettings(deserializedSettings);
    }
    else {
        settings = new OSF.DDA.Settings(deserializedSettings);
    }
    return settings;
};
OSF.InitializationHelper.prototype.saveAndSetDialogInfo = function OSF_InitializationHelper$saveAndSetDialogInfo(hostInfoValue) {
};
OSF.InitializationHelper.prototype.setAgaveHostCommunication = function OSF_InitializationHelper$setAgaveHostCommunication() {
};
OSF.InitializationHelper.prototype.prepareRightBeforeWebExtensionInitialize = function OSF_InitializationHelper$prepareRightBeforeWebExtensionInitialize(appContext) {
    this.prepareApiSurface(appContext);
    Microsoft.Office.WebExtension.initialize(this.getInitializationReason(appContext));
};
OSF.InitializationHelper.prototype.prepareApiSurface = function OSF_InitializationHelper$prepareApiSurfaceAndInitialize(appContext) {
    var license = new OSF.DDA.License(appContext.get_eToken());
    var getOfficeThemeHandler = (OSF.DDA.OfficeTheme && OSF.DDA.OfficeTheme.getOfficeTheme) ? OSF.DDA.OfficeTheme.getOfficeTheme : null;
    if (appContext.get_isDialog()) {
        if (OSF.DDA.UI.ChildUI) {
            appContext.ui = new OSF.DDA.UI.ChildUI();
        }
    }
    else {
        if (OSF.DDA.UI.ParentUI) {
            appContext.ui = new OSF.DDA.UI.ParentUI();
            if (OfficeExt.Container) {
                OSF.DDA.DispIdHost.addAsyncMethods(appContext.ui, [OSF.DDA.AsyncMethodNames.CloseContainerAsync]);
            }
        }
    }
    if (OSF.DDA.OpenBrowser) {
        OSF.DDA.DispIdHost.addAsyncMethods(appContext.ui, [OSF.DDA.AsyncMethodNames.OpenBrowserWindow]);
    }
    if (OSF.DDA.ExecuteFeature) {
        OSF.DDA.DispIdHost.addAsyncMethods(appContext.ui, [OSF.DDA.AsyncMethodNames.ExecuteFeature]);
    }
    if (OSF.DDA.QueryFeature) {
        OSF.DDA.DispIdHost.addAsyncMethods(appContext.ui, [OSF.DDA.AsyncMethodNames.QueryFeature]);
    }
    if (OSF.DDA.Auth) {
        appContext.auth = new OSF.DDA.Auth();
        OSF.DDA.DispIdHost.addAsyncMethods(appContext.auth, [OSF.DDA.AsyncMethodNames.GetAccessTokenAsync]);
    }
    OSF._OfficeAppFactory.setContext(new OSF.DDA.Context(appContext, appContext.doc, license, null, getOfficeThemeHandler));
    var getDelegateMethods, parameterMap;
    getDelegateMethods = OSF.DDA.DispIdHost.getClientDelegateMethods;
    parameterMap = OSF.DDA.SafeArray.Delegate.ParameterMap;
    OSF._OfficeAppFactory.setHostFacade(new OSF.DDA.DispIdHost.Facade(getDelegateMethods, parameterMap));
};
OSF.InitializationHelper.prototype.getInitializationReason = function (appContext) { return OSF.DDA.RichInitializationReason[appContext.get_reason()]; };
OSF.DDA.DispIdHost.getClientDelegateMethods = function (actionId) {
    var delegateMethods = {};
    delegateMethods[OSF.DDA.DispIdHost.Delegates.ExecuteAsync] = OSF.DDA.SafeArray.Delegate.executeAsync;
    delegateMethods[OSF.DDA.DispIdHost.Delegates.RegisterEventAsync] = OSF.DDA.SafeArray.Delegate.registerEventAsync;
    delegateMethods[OSF.DDA.DispIdHost.Delegates.UnregisterEventAsync] = OSF.DDA.SafeArray.Delegate.unregisterEventAsync;
    delegateMethods[OSF.DDA.DispIdHost.Delegates.OpenDialog] = OSF.DDA.SafeArray.Delegate.openDialog;
    delegateMethods[OSF.DDA.DispIdHost.Delegates.CloseDialog] = OSF.DDA.SafeArray.Delegate.closeDialog;
    delegateMethods[OSF.DDA.DispIdHost.Delegates.MessageParent] = OSF.DDA.SafeArray.Delegate.messageParent;
    delegateMethods[OSF.DDA.DispIdHost.Delegates.SendMessage] = OSF.DDA.SafeArray.Delegate.sendMessage;
    if (OSF.DDA.AsyncMethodNames.RefreshAsync && actionId == OSF.DDA.AsyncMethodNames.RefreshAsync.id) {
        var readSerializedSettings = function (hostCallArgs, onCalling, onReceiving) {
            if (typeof (OSF.DDA.ClientSettingsManager.refresh) === "function") {
                return OSF.DDA.ClientSettingsManager.refresh(onCalling, onReceiving);
            }
            else {
                return OSF.DDA.ClientSettingsManager.read(onCalling, onReceiving);
            }
        };
        delegateMethods[OSF.DDA.DispIdHost.Delegates.ExecuteAsync] = OSF.DDA.ClientSettingsManager.getSettingsExecuteMethod(readSerializedSettings);
    }
    if (OSF.DDA.AsyncMethodNames.SaveAsync && actionId == OSF.DDA.AsyncMethodNames.SaveAsync.id) {
        var writeSerializedSettings = function (hostCallArgs, onCalling, onReceiving) {
            return OSF.DDA.ClientSettingsManager.write(hostCallArgs[OSF.DDA.SettingsManager.SerializedSettings], hostCallArgs[Microsoft.Office.WebExtension.Parameters.OverwriteIfStale], onCalling, onReceiving);
        };
        delegateMethods[OSF.DDA.DispIdHost.Delegates.ExecuteAsync] = OSF.DDA.ClientSettingsManager.getSettingsExecuteMethod(writeSerializedSettings);
    }
    return delegateMethods;
};
(function (OfficeExt) {
    var MacRichClientHostController = (function () {
        function MacRichClientHostController() {
        }
        MacRichClientHostController.prototype.execute = function (id, params, callback) {
            setTimeout(function () {
                window.external.Execute(id, params, callback);
            }, 0);
        };
        MacRichClientHostController.prototype.registerEvent = function (id, targetId, handler, callback) {
            setTimeout(function () {
                window.external.RegisterEvent(id, targetId, handler, callback);
            }, 0);
        };
        MacRichClientHostController.prototype.unregisterEvent = function (id, targetId, callback) {
            setTimeout(function () {
                window.external.UnregisterEvent(id, targetId, callback);
            }, 0);
        };
        MacRichClientHostController.prototype.openDialog = function (id, targetId, handler, callback) {
            if (MacRichClientHostController.popup && !MacRichClientHostController.popup.closed) {
                callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeDialogAlreadyOpened);
                return;
            }
            var magicWord = "action=displayDialog";
            window.dialogAPIErrorCode = undefined;
            var fragmentSeparator = '#';
            var callArgs = JSON.parse(targetId);
            var callUrl = callArgs.url;
            if (!callUrl) {
                callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidScheme);
                return;
            }
            var urlParts = callUrl.split(fragmentSeparator);
            var seperator = "?";
            if (urlParts[0].indexOf("?") > -1) {
                seperator = "&";
            }
            var width = screen.width * callArgs.width / 100;
            var height = screen.height * callArgs.height / 100;
            var params = "width=" + width + ", height=" + height;
            urlParts[0] = urlParts[0].concat(seperator).concat(magicWord);
            var openUrl = urlParts.join(fragmentSeparator);
            MacRichClientHostController.popup = window.open(openUrl, "", params);
            function receiveMessage(event) {
                if (event.source == MacRichClientHostController.popup) {
                    try {
                        var messageObj = JSON.parse(event.data);
                        if (messageObj.dialogMessage) {
                            handler(id, [OSF.DialogMessageType.DialogMessageReceived, messageObj.dialogMessage.messageContent]);
                        }
                    }
                    catch (e) {
                        OsfMsAjaxFactory.msAjaxDebug.trace("messages received cannot be handlered. Message:" + event.data);
                    }
                }
            }
            MacRichClientHostController.DialogEventListener = receiveMessage;
            function checkWindowCloseNotifyError(errorCode) {
                handler(id, [errorCode]);
            }
            function checkWindowClose() {
                try {
                    if (MacRichClientHostController.popup == null || MacRichClientHostController.popup.closed) {
                        window.clearInterval(MacRichClientHostController.interval);
                        window.removeEventListener("message", MacRichClientHostController.DialogEventListener);
                        MacRichClientHostController.NotifyError = null;
                        handler(id, [OSF.DialogMessageType.DialogClosed]);
                    }
                }
                catch (e) {
                    OsfMsAjaxFactory.msAjaxDebug.trace("Error happened when popup window closed.");
                }
            }
            if (MacRichClientHostController.popup != undefined && window.dialogAPIErrorCode == undefined) {
                window.addEventListener("message", MacRichClientHostController.DialogEventListener);
                MacRichClientHostController.interval = window.setInterval(checkWindowClose, 500);
                MacRichClientHostController.NotifyError = checkWindowCloseNotifyError;
                callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
            }
            else {
                var error = OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                if (window.dialogAPIErrorCode) {
                    error = window.dialogAPIErrorCode;
                }
                callback(error);
            }
        };
        MacRichClientHostController.prototype.messageParent = function (params) {
            var message = params[Microsoft.Office.WebExtension.Parameters.MessageToParent];
            var messageObj = { dialogMessage: { messageType: OSF.DialogMessageType.DialogMessageReceived, messageContent: message } };
            window.opener.postMessage(JSON.stringify(messageObj), window.location.origin);
        };
        MacRichClientHostController.prototype.closeDialog = function (id, targetId, callback) {
            if (MacRichClientHostController.popup) {
                if (MacRichClientHostController.interval) {
                    window.clearInterval(MacRichClientHostController.interval);
                }
                MacRichClientHostController.popup.close();
                MacRichClientHostController.popup = null;
                window.removeEventListener("message", MacRichClientHostController.DialogEventListener);
                MacRichClientHostController.NotifyError = null;
                callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
            }
            else {
                callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError);
            }
        };
        MacRichClientHostController.prototype.sendMessage = function (params) {
        };
        return MacRichClientHostController;
    }());
    OfficeExt.MacRichClientHostController = MacRichClientHostController;
})(OfficeExt || (OfficeExt = {}));
var OSF = OSF || {};
var OSFWebkit;
(function (OSFWebkit) {
    var WebkitSafeArray = (function () {
        function WebkitSafeArray(data) {
            this.data = data;
            this.safeArrayFlag = this.isSafeArray(data);
        }
        WebkitSafeArray.prototype.dimensions = function () {
            var dimensions = 0;
            if (this.safeArrayFlag) {
                dimensions = this.data[0][0];
            }
            else if (this.isArray()) {
                dimensions = 2;
            }
            return dimensions;
        };
        WebkitSafeArray.prototype.getItem = function () {
            var array = [];
            var element = null;
            if (this.safeArrayFlag) {
                array = this.toArray();
            }
            else {
                array = this.data;
            }
            element = array;
            for (var i = 0; i < arguments.length; i++) {
                element = element[arguments[i]];
            }
            return element;
        };
        WebkitSafeArray.prototype.lbound = function (dimension) {
            return 0;
        };
        WebkitSafeArray.prototype.ubound = function (dimension) {
            var ubound = 0;
            if (this.safeArrayFlag) {
                ubound = this.data[0][dimension];
            }
            else if (this.isArray()) {
                if (dimension == 1) {
                    return this.data.length;
                }
                else if (dimension == 2) {
                    if (OSF.OUtil.isArray(this.data[0])) {
                        return this.data[0].length;
                    }
                    else if (this.data[0] != null) {
                        return 1;
                    }
                }
            }
            return ubound;
        };
        WebkitSafeArray.prototype.toArray = function () {
            if (this.isArray() == false) {
                return this.data;
            }
            var arr = [];
            var startingIndex = this.safeArrayFlag ? 1 : 0;
            for (var i = startingIndex; i < this.data.length; i++) {
                var element = this.data[i];
                if (this.isSafeArray(element)) {
                    arr.push(new WebkitSafeArray(element));
                }
                else {
                    arr.push(element);
                }
            }
            return arr;
        };
        WebkitSafeArray.prototype.isArray = function () {
            return OSF.OUtil.isArray(this.data);
        };
        WebkitSafeArray.prototype.isSafeArray = function (obj) {
            var isSafeArray = false;
            if (OSF.OUtil.isArray(obj) && OSF.OUtil.isArray(obj[0])) {
                var bounds = obj[0];
                var dimensions = bounds[0];
                if (bounds.length != dimensions + 1) {
                    return false;
                }
                var expectedArraySize = 1;
                for (var i = 1; i < bounds.length; i++) {
                    var dimension = bounds[i];
                    if (isFinite(dimension) == false) {
                        return false;
                    }
                    expectedArraySize = expectedArraySize * dimension;
                }
                expectedArraySize++;
                isSafeArray = (expectedArraySize == obj.length);
            }
            return isSafeArray;
        };
        return WebkitSafeArray;
    }());
    OSFWebkit.WebkitSafeArray = WebkitSafeArray;
})(OSFWebkit || (OSFWebkit = {}));
(function (OSFWebkit) {
    var ScriptMessaging;
    (function (ScriptMessaging) {
        var scriptMessenger = null;
        function agaveHostCallback(callbackId, params) {
            scriptMessenger.agaveHostCallback(callbackId, params);
        }
        ScriptMessaging.agaveHostCallback = agaveHostCallback;
        function agaveHostEventCallback(callbackId, params) {
            scriptMessenger.agaveHostEventCallback(callbackId, params);
        }
        ScriptMessaging.agaveHostEventCallback = agaveHostEventCallback;
        function GetScriptMessenger() {
            if (scriptMessenger == null) {
                if (HostScriptMessaging.IsSupportedByHost()) {
                    scriptMessenger = new HostScriptMessaging();
                }
                else {
                    scriptMessenger = new WebkitScriptMessaging("OSF.ScriptMessaging.agaveHostCallback", "OSF.ScriptMessaging.agaveHostEventCallback");
                }
            }
            return scriptMessenger;
        }
        ScriptMessaging.GetScriptMessenger = GetScriptMessenger;
        var EventHandlerCallback = (function () {
            function EventHandlerCallback(id, targetId, handler) {
                this.id = id;
                this.targetId = targetId;
                this.handler = handler;
            }
            return EventHandlerCallback;
        }());
        var HostScriptMessaging = (function () {
            function HostScriptMessaging() {
                this.eventHandlers = [];
            }
            HostScriptMessaging.IsSupportedByHost = function () {
                return !!window._osfHostAPI;
            };
            HostScriptMessaging.prototype.invokeMethod = function (handlerName, methodId, params, callback) {
                var internalCallback = function (params) {
                    var callbacksDone = callback(params);
                    if (callbacksDone === undefined || callbacksDone === true) {
                        return true;
                    }
                    return false;
                };
                window._osfHostAPI(handlerName, this.constructMessagingArgs(methodId, params), internalCallback);
            };
            HostScriptMessaging.prototype.registerEvent = function (handlerName, methodId, dispId, targetId, handler, callback) {
                var hostArgs = {
                    id: dispId,
                    targetId: targetId
                };
                var internalCallback = function (params) {
                    callback(params);
                    return true;
                };
                var internalEventHandler = function (params) {
                    handler(params);
                    return false;
                };
                var callbackInfo = window._osfHostRegisterEvent(handlerName, this.constructMessagingArgs(methodId, hostArgs), internalEventHandler, internalCallback);
                this.eventHandlers.push({ targetId: targetId, dispId: dispId, callbackId: callbackInfo.eventCallbackId });
            };
            HostScriptMessaging.prototype.unregisterEvent = function (handlerName, methodId, dispId, targetId, callback) {
                var hostArgs = {
                    id: dispId,
                    targetId: targetId
                };
                var internalCallback = function (params) {
                    callback(params);
                    return true;
                };
                window._osfHostAPI(handlerName, this.constructMessagingArgs(methodId, hostArgs), internalCallback);
                for (var i = this.eventHandlers.length - 1; i >= 0; i--) {
                    var handler = this.eventHandlers[i];
                    if (handler.dispId === dispId && handler.targetId === targetId) {
                        this.eventHandlers.splice(i, 1);
                        window._osfHostUnregisterCallback(handler.callbackId);
                    }
                }
            };
            HostScriptMessaging.prototype.agaveHostCallback = function (callbackId, params) {
            };
            HostScriptMessaging.prototype.agaveHostEventCallback = function (callbackId, params) {
            };
            HostScriptMessaging.prototype.constructMessagingArgs = function (methodId, params) {
                var messagingArgs = {
                    params: params,
                    methodId: methodId
                };
                return messagingArgs;
            };
            return HostScriptMessaging;
        }());
        var WebkitScriptMessaging = (function () {
            function WebkitScriptMessaging(methodCallbackName, eventCallbackName) {
                this.callingIndex = 0;
                this.callbackList = {};
                this.eventHandlerList = {};
                this.asyncMethodCallbackFunctionName = methodCallbackName;
                this.eventCallbackFunctionName = eventCallbackName;
                this.conversationId = WebkitScriptMessaging.getCurrentTimeMS().toString();
            }
            WebkitScriptMessaging.prototype.invokeMethod = function (handlerName, methodId, params, callback) {
                var messagingArgs = {};
                this.postWebkitMessage(messagingArgs, handlerName, methodId, params, callback);
            };
            WebkitScriptMessaging.prototype.registerEvent = function (handlerName, methodId, dispId, targetId, handler, callback) {
                var messagingArgs = {
                    eventCallbackFunction: this.eventCallbackFunctionName
                };
                var hostArgs = {
                    id: dispId,
                    targetId: targetId
                };
                var correlationId = this.postWebkitMessage(messagingArgs, handlerName, methodId, hostArgs, callback);
                this.eventHandlerList[correlationId] = new EventHandlerCallback(dispId, targetId, handler);
            };
            WebkitScriptMessaging.prototype.unregisterEvent = function (handlerName, methodId, dispId, targetId, callback) {
                var hostArgs = {
                    id: dispId,
                    targetId: targetId
                };
                for (var key in this.eventHandlerList) {
                    if (this.eventHandlerList.hasOwnProperty(key)) {
                        var eventCallback = this.eventHandlerList[key];
                        if (eventCallback.id == dispId && eventCallback.targetId == targetId) {
                            delete this.eventHandlerList[key];
                        }
                    }
                }
                this.invokeMethod(handlerName, methodId, hostArgs, callback);
            };
            WebkitScriptMessaging.prototype.agaveHostCallback = function (callbackId, params) {
                var callbackFunction = this.callbackList[callbackId];
                if (callbackFunction) {
                    var callbacksDone = callbackFunction(params);
                    if (callbacksDone === undefined || callbacksDone === true) {
                        delete this.callbackList[callbackId];
                    }
                }
            };
            WebkitScriptMessaging.prototype.agaveHostEventCallback = function (callbackId, params) {
                var eventCallback = this.eventHandlerList[callbackId];
                if (eventCallback) {
                    eventCallback.handler(params);
                }
            };
            WebkitScriptMessaging.prototype.postWebkitMessage = function (messagingArgs, handlerName, methodId, params, callback) {
                messagingArgs.methodId = methodId;
                messagingArgs.params = params;
                var correlationId = "";
                if (callback) {
                    correlationId = this.generateCorrelationId();
                    this.callbackList[correlationId] = callback;
                    messagingArgs.callbackId = correlationId;
                    messagingArgs.callbackFunction = this.asyncMethodCallbackFunctionName;
                }
                var invokePostMessage = function () {
                    window.webkit.messageHandlers[handlerName].postMessage(JSON.stringify(messagingArgs));
                };
                var currentTimestamp = WebkitScriptMessaging.getCurrentTimeMS();
                if (this.lastMessageTimestamp == null || (currentTimestamp - this.lastMessageTimestamp >= WebkitScriptMessaging.MESSAGE_TIME_DELTA)) {
                    invokePostMessage();
                    this.lastMessageTimestamp = currentTimestamp;
                }
                else {
                    this.lastMessageTimestamp += WebkitScriptMessaging.MESSAGE_TIME_DELTA;
                    setTimeout(function () {
                        invokePostMessage();
                    }, this.lastMessageTimestamp - currentTimestamp);
                }
                return correlationId;
            };
            WebkitScriptMessaging.prototype.generateCorrelationId = function () {
                ++this.callingIndex;
                return this.conversationId + this.callingIndex;
            };
            WebkitScriptMessaging.getCurrentTimeMS = function () {
                return (new Date).getTime();
            };
            WebkitScriptMessaging.MESSAGE_TIME_DELTA = 10;
            return WebkitScriptMessaging;
        }());
    })(ScriptMessaging = OSFWebkit.ScriptMessaging || (OSFWebkit.ScriptMessaging = {}));
})(OSFWebkit || (OSFWebkit = {}));
OSF.ScriptMessaging = OSFWebkit.ScriptMessaging;
(function (OSFWebkit) {
    OSFWebkit.MessageHandlerName = "Agave";
    OSFWebkit.PopupMessageHandlerName = "WefPopupHandler";
    var AppContextProperties;
    (function (AppContextProperties) {
        AppContextProperties[AppContextProperties["Settings"] = 0] = "Settings";
        AppContextProperties[AppContextProperties["SolutionReferenceId"] = 1] = "SolutionReferenceId";
        AppContextProperties[AppContextProperties["AppType"] = 2] = "AppType";
        AppContextProperties[AppContextProperties["MajorVersion"] = 3] = "MajorVersion";
        AppContextProperties[AppContextProperties["MinorVersion"] = 4] = "MinorVersion";
        AppContextProperties[AppContextProperties["RevisionVersion"] = 5] = "RevisionVersion";
        AppContextProperties[AppContextProperties["APIVersionSequence"] = 6] = "APIVersionSequence";
        AppContextProperties[AppContextProperties["AppCapabilities"] = 7] = "AppCapabilities";
        AppContextProperties[AppContextProperties["APPUILocale"] = 8] = "APPUILocale";
        AppContextProperties[AppContextProperties["AppDataLocale"] = 9] = "AppDataLocale";
        AppContextProperties[AppContextProperties["BindingCount"] = 10] = "BindingCount";
        AppContextProperties[AppContextProperties["DocumentUrl"] = 11] = "DocumentUrl";
        AppContextProperties[AppContextProperties["ActivationMode"] = 12] = "ActivationMode";
        AppContextProperties[AppContextProperties["ControlIntegrationLevel"] = 13] = "ControlIntegrationLevel";
        AppContextProperties[AppContextProperties["SolutionToken"] = 14] = "SolutionToken";
        AppContextProperties[AppContextProperties["APISetVersion"] = 15] = "APISetVersion";
        AppContextProperties[AppContextProperties["CorrelationId"] = 16] = "CorrelationId";
        AppContextProperties[AppContextProperties["InstanceId"] = 17] = "InstanceId";
        AppContextProperties[AppContextProperties["TouchEnabled"] = 18] = "TouchEnabled";
        AppContextProperties[AppContextProperties["CommerceAllowed"] = 19] = "CommerceAllowed";
        AppContextProperties[AppContextProperties["RequirementMatrix"] = 20] = "RequirementMatrix";
        AppContextProperties[AppContextProperties["HostCustomMessage"] = 21] = "HostCustomMessage";
        AppContextProperties[AppContextProperties["HostFullVersion"] = 22] = "HostFullVersion";
        AppContextProperties[AppContextProperties["InitialDisplayMode"] = 23] = "InitialDisplayMode";
    })(AppContextProperties = OSFWebkit.AppContextProperties || (OSFWebkit.AppContextProperties = {}));
    var MethodId;
    (function (MethodId) {
        MethodId[MethodId["Execute"] = 1] = "Execute";
        MethodId[MethodId["RegisterEvent"] = 2] = "RegisterEvent";
        MethodId[MethodId["UnregisterEvent"] = 3] = "UnregisterEvent";
        MethodId[MethodId["WriteSettings"] = 4] = "WriteSettings";
        MethodId[MethodId["GetContext"] = 5] = "GetContext";
        MethodId[MethodId["SendMessage"] = 6] = "SendMessage";
        MethodId[MethodId["MessageParent"] = 7] = "MessageParent";
        MethodId[MethodId["SendMessage2"] = 8] = "SendMessage2";
        MethodId[MethodId["MessageParent2"] = 9] = "MessageParent2";
    })(MethodId = OSFWebkit.MethodId || (OSFWebkit.MethodId = {}));
    var WebkitHostController = (function () {
        function WebkitHostController(hostScriptProxy) {
            this.hostScriptProxy = hostScriptProxy;
            this.useFullDialogAPI = !!window._enableFullDialogAPI;
            this.osfSupportsDialogOrigin = !!window._osfEnableDialogOrigin;
        }
        WebkitHostController.prototype.execute = function (id, params, callback) {
            var hostParams = {
                id: id,
                apiArgs: params
            };
            var agaveResponseCallback = function (payload) {
                if (callback) {
                    var invokeArguments = [];
                    if (OSF.OUtil.isArray(payload)) {
                        for (var i = 0; i < payload.length; i++) {
                            var element = payload[i];
                            if (OSF.OUtil.isArray(element)) {
                                element = new OSFWebkit.WebkitSafeArray(element);
                            }
                            invokeArguments.unshift(element);
                        }
                    }
                    return callback.apply(null, invokeArguments);
                }
            };
            this.hostScriptProxy.invokeMethod(OSF.Webkit.MessageHandlerName, OSF.Webkit.MethodId.Execute, hostParams, agaveResponseCallback);
        };
        WebkitHostController.prototype.registerEvent = function (id, targetId, handler, callback) {
            var agaveEventHandlerCallback = function (payload) {
                var safeArraySource = payload;
                var eventId = 0;
                if (OSF.OUtil.isArray(payload) && payload.length >= 2) {
                    safeArraySource = payload[0];
                    eventId = payload[1];
                }
                if (handler) {
                    handler(eventId, new OSFWebkit.WebkitSafeArray(safeArraySource));
                }
            };
            var agaveResponseCallback = function (payload) {
                if (callback) {
                    return callback(new OSFWebkit.WebkitSafeArray(payload));
                }
            };
            this.hostScriptProxy.registerEvent(OSF.Webkit.MessageHandlerName, OSF.Webkit.MethodId.RegisterEvent, id, targetId, agaveEventHandlerCallback, agaveResponseCallback);
        };
        WebkitHostController.prototype.unregisterEvent = function (id, targetId, callback) {
            var agaveResponseCallback = function (response) {
                return callback(new OSFWebkit.WebkitSafeArray(response));
            };
            this.hostScriptProxy.unregisterEvent(OSF.Webkit.MessageHandlerName, OSF.Webkit.MethodId.UnregisterEvent, id, targetId, agaveResponseCallback);
        };
        WebkitHostController.prototype.messageParent = function (params) {
            if (this.useFullDialogAPI && params) {
                var messageToParent = params[Microsoft.Office.WebExtension.Parameters.MessageToParent];
                if (typeof messageToParent === "boolean") {
                    if (messageToParent === true) {
                        params[Microsoft.Office.WebExtension.Parameters.MessageToParent] = "true";
                    }
                    else if (messageToParent === false) {
                        params[Microsoft.Office.WebExtension.Parameters.MessageToParent] = "";
                    }
                }
            }
            var message;
            var methodId;
            if (this.osfSupportsDialogOrigin && params[Microsoft.Office.WebExtension.Parameters.TargetOrigin]) {
                message = this.useFullDialogAPI ? JSON.stringify(params) : params[Microsoft.Office.WebExtension.Parameters.MessageToParent];
                methodId = OSF.Webkit.MethodId.MessageParent2;
            }
            else {
                message = params[Microsoft.Office.WebExtension.Parameters.MessageToParent];
                methodId = OSF.Webkit.MethodId.MessageParent;
            }
            if (this.useFullDialogAPI) {
                this.hostScriptProxy.invokeMethod(OSF.Webkit.MessageHandlerName, methodId, message, null);
            }
            else {
                var messageObj = { dialogMessage: { messageType: OSF.DialogMessageType.DialogMessageReceived, messageContent: message } };
                var targetOrigin = methodId == OSF.Webkit.MethodId.MessageParent2 ? params[Microsoft.Office.WebExtension.Parameters.TargetOrigin] : window.location.origin;
                window.opener.postMessage(JSON.stringify(messageObj), targetOrigin);
            }
        };
        WebkitHostController.prototype.openDialog = function (id, targetId, handler, callback) {
            if (this.useFullDialogAPI) {
                this.registerEvent(id, targetId, handler, callback);
                return;
            }
            if (WebkitHostController.popup && !WebkitHostController.popup.closed) {
                callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeDialogAlreadyOpened);
                return;
            }
            var magicWord = "action=displayDialog";
            WebkitHostController.OpenDialogCallback = undefined;
            var fragmentSeparator = '#';
            var callArgs = JSON.parse(targetId);
            var callUrl = callArgs.url;
            if (!callUrl) {
                callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidScheme);
                return;
            }
            var urlParts = callUrl.split(fragmentSeparator);
            var seperator = "?";
            if (urlParts[0].indexOf("?") > -1) {
                seperator = "&";
            }
            var width = screen.width * callArgs.width / 100;
            var height = screen.height * callArgs.height / 100;
            var params = "width=" + width + ", height=" + height;
            urlParts[0] = urlParts[0].concat(seperator).concat(magicWord);
            var openUrl = urlParts.join(fragmentSeparator);
            WebkitHostController.popup = window.open(openUrl, "", params);
            function receiveMessage(event) {
                if (event.origin == window.location.origin) {
                    try {
                        var messageObj = JSON.parse(event.data);
                        if (messageObj.dialogMessage) {
                            handler(id, [OSF.DialogMessageType.DialogMessageReceived, messageObj.dialogMessage.messageContent, event.origin]);
                        }
                    }
                    catch (e) {
                        OsfMsAjaxFactory.msAjaxDebug.trace("messages received cannot be handlered. Message:" + event.data);
                    }
                }
            }
            WebkitHostController.DialogEventListener = receiveMessage;
            function checkWindowClose() {
                try {
                    if (WebkitHostController.popup == null || WebkitHostController.popup.closed) {
                        window.clearInterval(WebkitHostController.interval);
                        window.removeEventListener("message", WebkitHostController.DialogEventListener);
                        WebkitHostController.NotifyError = null;
                        WebkitHostController.popup = null;
                        handler(id, [OSF.DialogMessageType.DialogClosed]);
                    }
                }
                catch (e) {
                    OsfMsAjaxFactory.msAjaxDebug.trace("Error happened when popup window closed.");
                }
            }
            function OpenDialogCallbackNotifyError(errorCode) {
                handler(id, [errorCode]);
            }
            WebkitHostController.OpenDialogCallback = function (code) {
                if (code == OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
                    window.addEventListener("message", WebkitHostController.DialogEventListener);
                    WebkitHostController.interval = window.setInterval(checkWindowClose, 1000);
                    WebkitHostController.NotifyError = OpenDialogCallbackNotifyError;
                }
                callback(code);
            };
        };
        WebkitHostController.prototype.closeDialog = function (id, targetId, callback) {
            if (this.useFullDialogAPI) {
                this.unregisterEvent(id, targetId, callback);
            }
            else {
                if (WebkitHostController.popup) {
                    if (WebkitHostController.interval) {
                        window.clearInterval(WebkitHostController.interval);
                    }
                    WebkitHostController.popup.close();
                    WebkitHostController.popup = null;
                    window.removeEventListener("message", WebkitHostController.DialogEventListener);
                    WebkitHostController.NotifyError = null;
                    callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
                }
                else {
                    callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError);
                }
            }
        };
        WebkitHostController.prototype.sendMessage = function (params) {
            var message;
            var methodId;
            if (this.osfSupportsDialogOrigin && params[Microsoft.Office.WebExtension.Parameters.TargetOrigin]) {
                message = JSON.stringify(params);
                methodId = OSF.Webkit.MethodId.SendMessage2;
            }
            else {
                message = params[Microsoft.Office.WebExtension.Parameters.MessageContent];
                methodId = OSF.Webkit.MethodId.SendMessage;
                if (!isNaN(parseFloat(message)) && isFinite(message)) {
                    message = message.toString();
                }
            }
            this.hostScriptProxy.invokeMethod(OSF.Webkit.MessageHandlerName, methodId, message, null);
        };
        return WebkitHostController;
    }());
    OSFWebkit.WebkitHostController = WebkitHostController;
})(OSFWebkit || (OSFWebkit = {}));
OSF.Webkit = OSFWebkit;
OSF.initializeWebkitCommon = function OSF_initializeWebkitCommon() {
    OSF.DDA.ClientSettingsManager = {
        getSettingsExecuteMethod: function OSF_DDA_ClientSettingsManager$getSettingsExecuteMethod(hostDelegateMethod) {
            return function (args) {
                var status, response;
                var onComplete = function onComplete(status, response) {
                    if (args.onReceiving) {
                        args.onReceiving();
                    }
                    if (args.onComplete) {
                        args.onComplete(status, response);
                    }
                };
                try {
                    hostDelegateMethod(args.hostCallArgs, args.onCalling, onComplete);
                }
                catch (ex) {
                    status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                    response = { name: Strings.OfficeOM.L_InternalError, message: ex };
                    onComplete(status, response);
                }
            };
        },
        read: function OSF_DDA_ClientSettingsManager$read(onCalling, onComplete) {
            var keys = [];
            var values = [];
            if (onCalling) {
                onCalling();
            }
            var initializationHelper = OSF._OfficeAppFactory.getInitializationHelper();
            var onReceivedContext = function onReceivedContext(appContext) {
                if (onComplete) {
                    onComplete(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess, appContext.get_settings());
                }
            };
            initializationHelper.getAppContext(null, onReceivedContext);
        },
        write: function OSF_DDA_ClientSettingsManager$write(serializedSettings, overwriteIfStale, onCalling, onComplete) {
            var hostParams = {};
            var keys = [];
            var values = [];
            for (var key in serializedSettings) {
                keys.push(key);
                values.push(serializedSettings[key]);
            }
            hostParams["keys"] = keys;
            hostParams["values"] = values;
            if (onCalling) {
                onCalling();
            }
            var onWriteCompleted = function onWriteCompleted(status) {
                if (onComplete) {
                    onComplete(status[0], null);
                }
            };
            OSF.ScriptMessaging.GetScriptMessenger().invokeMethod(OSF.Webkit.MessageHandlerName, OSF.Webkit.MethodId.WriteSettings, hostParams, onWriteCompleted);
        }
    };
    OSF.InitializationHelper.prototype.initializeSettings = function OSF_InitializationHelper$initializeSettings(appContext, refreshSupported) {
        var serializedSettings = appContext.get_settings();
        var settings = this.deserializeSettings(serializedSettings, refreshSupported);
        return settings;
    };
    OSF.InitializationHelper.prototype.getAppContext = function OSF_InitializationHelper$getAppContext(wnd, gotAppContext) {
        var getInvocationCallback = function OSF_InitializationHelper_getAppContextAsync$getInvocationCallbackWebApp(appContext) {
            var returnedContext;
            var appContextProperties = OSF.Webkit.AppContextProperties;
            var appType = appContext[appContextProperties.AppType];
            var hostSettings = appContext[appContextProperties.Settings];
            var serializedSettings = {};
            var keys = hostSettings[0];
            var values = hostSettings[1];
            for (var index = 0; index < keys.length; index++) {
                serializedSettings[keys[index]] = values[index];
            }
            var id = appContext[appContextProperties.SolutionReferenceId];
            var version = appContext[appContextProperties.MajorVersion];
            var minorVersion = appContext[appContextProperties.MinorVersion];
            var clientMode = appContext[appContextProperties.AppCapabilities];
            var UILocale = appContext[appContextProperties.APPUILocale];
            var dataLocale = appContext[appContextProperties.AppDataLocale];
            var docUrl = appContext[appContextProperties.DocumentUrl];
            var reason = appContext[appContextProperties.ActivationMode];
            var osfControlType = appContext[appContextProperties.ControlIntegrationLevel];
            var eToken = appContext[appContextProperties.SolutionToken];
            eToken = eToken ? eToken.toString() : "";
            var correlationId = appContext[appContextProperties.CorrelationId];
            var appInstanceId = appContext[appContextProperties.InstanceId];
            var touchEnabled = appContext[appContextProperties.TouchEnabled];
            var commerceAllowed = appContext[appContextProperties.CommerceAllowed];
            var requirementMatrix = appContext[appContextProperties.RequirementMatrix];
            var hostCustomMessage = appContext[appContextProperties.HostCustomMessage];
            var hostFullVersion = appContext[appContextProperties.HostFullVersion];
            var initialDisplayMode = appContext[appContextProperties.InitialDisplayMode];
            returnedContext = new OSF.OfficeAppContext(id, appType, version, UILocale, dataLocale, docUrl, clientMode, serializedSettings, reason, osfControlType, eToken, correlationId, appInstanceId, touchEnabled, commerceAllowed, minorVersion, requirementMatrix, hostCustomMessage, hostFullVersion, undefined, undefined, undefined, undefined, undefined, undefined, undefined, initialDisplayMode);
            if (OSF.AppTelemetry) {
                OSF.AppTelemetry.initialize(returnedContext);
            }
            gotAppContext(returnedContext);
        };
        var handler;
        if (this._hostInfo.isDialog && window.webkit.messageHandlers[OSF.Webkit.PopupMessageHandlerName]) {
            handler = OSF.Webkit.PopupMessageHandlerName;
        }
        else {
            handler = OSF.Webkit.MessageHandlerName;
        }
        OSF.ScriptMessaging.GetScriptMessenger().invokeMethod(handler, OSF.Webkit.MethodId.GetContext, [], getInvocationCallback);
    };
};
(function (OfficeExt) {
    var OfficeTheme;
    (function (OfficeTheme) {
        var OfficeThemeManager = (function () {
            function OfficeThemeManager() {
                this._osfOfficeTheme = null;
                this._osfOfficeThemeTimeStamp = null;
            }
            OfficeThemeManager.prototype.getOfficeTheme = function () {
                if (OSF.DDA._OsfControlContext) {
                    if (this._osfOfficeTheme && this._osfOfficeThemeTimeStamp && ((new Date()).getTime() - this._osfOfficeThemeTimeStamp < OfficeThemeManager._osfOfficeThemeCacheValidPeriod)) {
                        if (OSF.AppTelemetry) {
                            OSF.AppTelemetry.onPropertyDone("GetOfficeThemeInfo", 0);
                        }
                    }
                    else {
                        var startTime = (new Date()).getTime();
                        var osfOfficeTheme = OSF.DDA._OsfControlContext.GetOfficeThemeInfo();
                        var endTime = (new Date()).getTime();
                        if (OSF.AppTelemetry) {
                            OSF.AppTelemetry.onPropertyDone("GetOfficeThemeInfo", Math.abs(endTime - startTime));
                        }
                        this._osfOfficeTheme = JSON.parse(osfOfficeTheme);
                        for (var color in this._osfOfficeTheme) {
                            this._osfOfficeTheme[color] = OSF.OUtil.convertIntToCssHexColor(this._osfOfficeTheme[color]);
                        }
                        this._osfOfficeThemeTimeStamp = endTime;
                    }
                    return this._osfOfficeTheme;
                }
            };
            OfficeThemeManager.instance = function () {
                if (OfficeThemeManager._instance == null) {
                    OfficeThemeManager._instance = new OfficeThemeManager();
                }
                return OfficeThemeManager._instance;
            };
            OfficeThemeManager._osfOfficeThemeCacheValidPeriod = 5000;
            OfficeThemeManager._instance = null;
            return OfficeThemeManager;
        }());
        OfficeTheme.OfficeThemeManager = OfficeThemeManager;
        OSF.OUtil.setNamespace("OfficeTheme", OSF.DDA);
        OSF.DDA.OfficeTheme.getOfficeTheme = OfficeExt.OfficeTheme.OfficeThemeManager.instance().getOfficeTheme;
    })(OfficeTheme = OfficeExt.OfficeTheme || (OfficeExt.OfficeTheme = {}));
})(OfficeExt || (OfficeExt = {}));
OSF.initializeRichCommon = function OSF_initializeRichCommon() {
    OSF.DDA.ClientSettingsManager = {
        getSettingsExecuteMethod: function OSF_DDA_ClientSettingsManager$getSettingsExecuteMethod(hostDelegateMethod) {
            return function (args) {
                var onComplete = function onComplete(status, response) {
                    if (args.onReceiving) {
                        args.onReceiving();
                    }
                    if (args.onComplete) {
                        args.onComplete(status, response);
                    }
                };
                var response;
                try {
                    response = hostDelegateMethod(args.hostCallArgs, args.onCalling, onComplete);
                }
                catch (ex) {
                    var status = OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError;
                    response = { name: Strings.OfficeOM.L_InternalError, message: ex };
                    if (args.onComplete) {
                        args.onComplete(status, response);
                    }
                }
            };
        },
        read: function OSF_DDA_ClientSettingsManager$read(onCalling, onComplete) {
            var keys = [];
            var values = [];
            if (onCalling) {
                onCalling();
            }
            if (typeof OsfOMToken != 'undefined' && OsfOMToken) {
                OSF.DDA._OsfControlContext.GetSettings(OsfOMToken).Read(keys, values);
            }
            else {
                OSF.DDA._OsfControlContext.GetSettings().Read(keys, values);
            }
            var serializedSettings = {};
            for (var index = 0; index < keys.length; index++) {
                serializedSettings[keys[index]] = values[index];
            }
            if (onComplete) {
                onComplete(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess, serializedSettings);
            }
            return serializedSettings;
        },
        write: function OSF_DDA_ClientSettingsManager$write(serializedSettings, overwriteIfStale, onCalling, onComplete) {
            var keys = [];
            var values = [];
            for (var key in serializedSettings) {
                keys.push(key);
                values.push(serializedSettings[key]);
            }
            if (onCalling) {
                onCalling();
            }
            var settingObj;
            if (typeof OsfOMToken != 'undefined' && OsfOMToken) {
                settingObj = OSF.DDA._OsfControlContext.GetSettings(OsfOMToken);
            }
            else {
                settingObj = OSF.DDA._OsfControlContext.GetSettings();
            }
            if (typeof settingObj.WriteAsync != 'undefined') {
                settingObj.WriteAsync(keys, values, onComplete);
            }
            else {
                settingObj.Write(keys, values);
                if (onComplete) {
                    onComplete(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
                }
            }
        },
        refresh: function OSF_DDA_ClientSettingsManager$refresh(onCalling, onComplete) {
            var keys = [];
            var values = [];
            if (onCalling) {
                onCalling();
            }
            var osfSettingsObj;
            if (typeof OsfOMToken != 'undefined' && OsfOMToken) {
                osfSettingsObj = OSF.DDA._OsfControlContext.GetSettings(OsfOMToken);
            }
            else {
                osfSettingsObj = OSF.DDA._OsfControlContext.GetSettings();
            }
            var readSettingsAndReturn = function () {
                osfSettingsObj.Read(keys, values);
                var serializedSettings = {};
                for (var index = 0; index < keys.length; index++) {
                    serializedSettings[keys[index]] = values[index];
                }
                if (onComplete) {
                    onComplete(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess, serializedSettings);
                }
            };
            if (osfSettingsObj.RefreshAsync) {
                osfSettingsObj.RefreshAsync(function () {
                    readSettingsAndReturn();
                });
            }
            else {
                readSettingsAndReturn();
            }
        }
    };
    OSF.InitializationHelper.prototype.initializeSettings = function OSF_InitializationHelper$initializeSettings(refreshSupported) {
        var serializedSettings = OSF.DDA.ClientSettingsManager.read();
        var settings = this.deserializeSettings(serializedSettings, refreshSupported);
        return settings;
    };
    OSF.InitializationHelper.prototype.getAppContext = function OSF_InitializationHelper$getAppContext(wnd, gotAppContext) {
        var returnedContext;
        var context;
        var warningText = "Warning: Office.js is loaded outside of Office client";
        try {
            if (window.external && OSF.OUtil.externalNativeFunctionExists(typeof window.external.GetContext)) {
                context = OSF.DDA._OsfControlContext = window.external.GetContext();
            }
            else {
                OsfMsAjaxFactory.msAjaxDebug.trace(warningText);
                return;
            }
        }
        catch (e) {
            OsfMsAjaxFactory.msAjaxDebug.trace(warningText);
            return;
        }
        var appType = context.GetAppType();
        var id = context.GetSolutionRef();
        var version = context.GetAppVersionMajor();
        var minorVersion = context.GetAppVersionMinor();
        var UILocale = context.GetAppUILocale();
        var dataLocale = context.GetAppDataLocale();
        var docUrl = context.GetDocUrl();
        var clientMode = context.GetAppCapabilities();
        var reason = context.GetActivationMode();
        var osfControlType = context.GetControlIntegrationLevel();
        var settings = [];
        var eToken;
        try {
            eToken = context.GetSolutionToken();
        }
        catch (ex) {
        }
        var correlationId;
        if (OSF.OUtil.externalNativeFunctionExists(typeof context.GetCorrelationId)) {
            correlationId = context.GetCorrelationId();
        }
        var appInstanceId;
        if (OSF.OUtil.externalNativeFunctionExists(typeof context.GetInstanceId)) {
            appInstanceId = context.GetInstanceId();
        }
        var touchEnabled;
        if (OSF.OUtil.externalNativeFunctionExists(typeof context.GetTouchEnabled)) {
            touchEnabled = context.GetTouchEnabled();
        }
        var commerceAllowed;
        if (OSF.OUtil.externalNativeFunctionExists(typeof context.GetCommerceAllowed)) {
            commerceAllowed = context.GetCommerceAllowed();
        }
        var requirementMatrix;
        if (OSF.OUtil.externalNativeFunctionExists(typeof context.GetSupportedMatrix)) {
            requirementMatrix = context.GetSupportedMatrix();
        }
        var hostCustomMessage;
        if (OSF.OUtil.externalNativeFunctionExists(typeof context.GetHostCustomMessage)) {
            hostCustomMessage = context.GetHostCustomMessage();
        }
        var hostFullVersion;
        if (OSF.OUtil.externalNativeFunctionExists(typeof context.GetHostFullVersion)) {
            hostFullVersion = context.GetHostFullVersion();
        }
        var dialogRequirementMatrix;
        if (OSF.OUtil.externalNativeFunctionExists(typeof context.GetDialogRequirementMatrix)) {
            dialogRequirementMatrix = context.GetDialogRequirementMatrix();
        }
        var sdxFeatureGates;
        if (OSF.OUtil.externalNativeFunctionExists(typeof context.GetFeaturesForSolution)) {
            try {
                var sdxFeatureGatesJson = context.GetFeaturesForSolution();
                if (sdxFeatureGatesJson) {
                    sdxFeatureGates = JSON.parse(sdxFeatureGatesJson);
                }
            }
            catch (ex) {
                OsfMsAjaxFactory.msAjaxDebug.trace("Exception while creating the SDX FeatureGates object. Details: " + ex);
            }
        }
        var initialDisplayMode = 0;
        if (OSF.OUtil.externalNativeFunctionExists(typeof context.GetInitialDisplayMode)) {
            initialDisplayMode = context.GetInitialDisplayMode();
        }
        eToken = eToken ? eToken.toString() : "";
        returnedContext = new OSF.OfficeAppContext(id, appType, version, UILocale, dataLocale, docUrl, clientMode, settings, reason, osfControlType, eToken, correlationId, appInstanceId, touchEnabled, commerceAllowed, minorVersion, requirementMatrix, hostCustomMessage, hostFullVersion, undefined, undefined, undefined, undefined, dialogRequirementMatrix, sdxFeatureGates, undefined, initialDisplayMode);
        if (OSF.AppTelemetry) {
            OSF.AppTelemetry.initialize(returnedContext);
        }
        gotAppContext(returnedContext);
    };
};
(function () {
    function isWebkit2Sandbox() {
        return window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.Agave;
    }
    if (isWebkit2Sandbox()) {
        OSF.ClientHostController = new OSFWebkit.WebkitHostController(OSF.ScriptMessaging.GetScriptMessenger());
        OSF.initializeWebkitCommon();
        OSF.InitializationHelper.prototype.initializeMacSettings = function (appContext, refreshSupported) {
            return this._initializeSettings(appContext, refreshSupported);
        };
    }
    else {
        OSF.ClientHostController = new OfficeExt.MacRichClientHostController();
        OSF.initializeRichCommon();
        OSF.InitializationHelper.prototype.initializeMacSettings = function (appContext, refreshSupported) {
            return this._initializeSettings(refreshSupported);
        };
    }
})();
var OSFLog;
(function (OSFLog) {
    var BaseUsageData = (function () {
        function BaseUsageData(table) {
            this._table = table;
            this._fields = {};
        }
        Object.defineProperty(BaseUsageData.prototype, "Fields", {
            get: function () {
                return this._fields;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(BaseUsageData.prototype, "Table", {
            get: function () {
                return this._table;
            },
            enumerable: true,
            configurable: true
        });
        BaseUsageData.prototype.SerializeFields = function () {
        };
        BaseUsageData.prototype.SetSerializedField = function (key, value) {
            if (typeof (value) !== "undefined" && value !== null) {
                this._serializedFields[key] = value.toString();
            }
        };
        BaseUsageData.prototype.SerializeRow = function () {
            this._serializedFields = {};
            this.SetSerializedField("Table", this._table);
            this.SerializeFields();
            return JSON.stringify(this._serializedFields);
        };
        return BaseUsageData;
    }());
    OSFLog.BaseUsageData = BaseUsageData;
    var AppActivatedUsageData = (function (_super) {
        __extends(AppActivatedUsageData, _super);
        function AppActivatedUsageData() {
            return _super.call(this, "AppActivated") || this;
        }
        Object.defineProperty(AppActivatedUsageData.prototype, "CorrelationId", {
            get: function () { return this.Fields["CorrelationId"]; },
            set: function (value) { this.Fields["CorrelationId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "SessionId", {
            get: function () { return this.Fields["SessionId"]; },
            set: function (value) { this.Fields["SessionId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "AppId", {
            get: function () { return this.Fields["AppId"]; },
            set: function (value) { this.Fields["AppId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "AppInstanceId", {
            get: function () { return this.Fields["AppInstanceId"]; },
            set: function (value) { this.Fields["AppInstanceId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "AppURL", {
            get: function () { return this.Fields["AppURL"]; },
            set: function (value) { this.Fields["AppURL"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "AssetId", {
            get: function () { return this.Fields["AssetId"]; },
            set: function (value) { this.Fields["AssetId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "Browser", {
            get: function () { return this.Fields["Browser"]; },
            set: function (value) { this.Fields["Browser"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "UserId", {
            get: function () { return this.Fields["UserId"]; },
            set: function (value) { this.Fields["UserId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "Host", {
            get: function () { return this.Fields["Host"]; },
            set: function (value) { this.Fields["Host"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "HostVersion", {
            get: function () { return this.Fields["HostVersion"]; },
            set: function (value) { this.Fields["HostVersion"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "ClientId", {
            get: function () { return this.Fields["ClientId"]; },
            set: function (value) { this.Fields["ClientId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "AppSizeWidth", {
            get: function () { return this.Fields["AppSizeWidth"]; },
            set: function (value) { this.Fields["AppSizeWidth"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "AppSizeHeight", {
            get: function () { return this.Fields["AppSizeHeight"]; },
            set: function (value) { this.Fields["AppSizeHeight"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "Message", {
            get: function () { return this.Fields["Message"]; },
            set: function (value) { this.Fields["Message"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "DocUrl", {
            get: function () { return this.Fields["DocUrl"]; },
            set: function (value) { this.Fields["DocUrl"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "OfficeJSVersion", {
            get: function () { return this.Fields["OfficeJSVersion"]; },
            set: function (value) { this.Fields["OfficeJSVersion"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "HostJSVersion", {
            get: function () { return this.Fields["HostJSVersion"]; },
            set: function (value) { this.Fields["HostJSVersion"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "WacHostEnvironment", {
            get: function () { return this.Fields["WacHostEnvironment"]; },
            set: function (value) { this.Fields["WacHostEnvironment"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppActivatedUsageData.prototype, "IsFromWacAutomation", {
            get: function () { return this.Fields["IsFromWacAutomation"]; },
            set: function (value) { this.Fields["IsFromWacAutomation"] = value; },
            enumerable: true,
            configurable: true
        });
        AppActivatedUsageData.prototype.SerializeFields = function () {
            this.SetSerializedField("CorrelationId", this.CorrelationId);
            this.SetSerializedField("SessionId", this.SessionId);
            this.SetSerializedField("AppId", this.AppId);
            this.SetSerializedField("AppInstanceId", this.AppInstanceId);
            this.SetSerializedField("AppURL", this.AppURL);
            this.SetSerializedField("AssetId", this.AssetId);
            this.SetSerializedField("Browser", this.Browser);
            this.SetSerializedField("UserId", this.UserId);
            this.SetSerializedField("Host", this.Host);
            this.SetSerializedField("HostVersion", this.HostVersion);
            this.SetSerializedField("ClientId", this.ClientId);
            this.SetSerializedField("AppSizeWidth", this.AppSizeWidth);
            this.SetSerializedField("AppSizeHeight", this.AppSizeHeight);
            this.SetSerializedField("Message", this.Message);
            this.SetSerializedField("DocUrl", this.DocUrl);
            this.SetSerializedField("OfficeJSVersion", this.OfficeJSVersion);
            this.SetSerializedField("HostJSVersion", this.HostJSVersion);
            this.SetSerializedField("WacHostEnvironment", this.WacHostEnvironment);
            this.SetSerializedField("IsFromWacAutomation", this.IsFromWacAutomation);
        };
        return AppActivatedUsageData;
    }(BaseUsageData));
    OSFLog.AppActivatedUsageData = AppActivatedUsageData;
    var ScriptLoadUsageData = (function (_super) {
        __extends(ScriptLoadUsageData, _super);
        function ScriptLoadUsageData() {
            return _super.call(this, "ScriptLoad") || this;
        }
        Object.defineProperty(ScriptLoadUsageData.prototype, "CorrelationId", {
            get: function () { return this.Fields["CorrelationId"]; },
            set: function (value) { this.Fields["CorrelationId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ScriptLoadUsageData.prototype, "SessionId", {
            get: function () { return this.Fields["SessionId"]; },
            set: function (value) { this.Fields["SessionId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ScriptLoadUsageData.prototype, "ScriptId", {
            get: function () { return this.Fields["ScriptId"]; },
            set: function (value) { this.Fields["ScriptId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ScriptLoadUsageData.prototype, "StartTime", {
            get: function () { return this.Fields["StartTime"]; },
            set: function (value) { this.Fields["StartTime"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ScriptLoadUsageData.prototype, "ResponseTime", {
            get: function () { return this.Fields["ResponseTime"]; },
            set: function (value) { this.Fields["ResponseTime"] = value; },
            enumerable: true,
            configurable: true
        });
        ScriptLoadUsageData.prototype.SerializeFields = function () {
            this.SetSerializedField("CorrelationId", this.CorrelationId);
            this.SetSerializedField("SessionId", this.SessionId);
            this.SetSerializedField("ScriptId", this.ScriptId);
            this.SetSerializedField("StartTime", this.StartTime);
            this.SetSerializedField("ResponseTime", this.ResponseTime);
        };
        return ScriptLoadUsageData;
    }(BaseUsageData));
    OSFLog.ScriptLoadUsageData = ScriptLoadUsageData;
    var AppClosedUsageData = (function (_super) {
        __extends(AppClosedUsageData, _super);
        function AppClosedUsageData() {
            return _super.call(this, "AppClosed") || this;
        }
        Object.defineProperty(AppClosedUsageData.prototype, "CorrelationId", {
            get: function () { return this.Fields["CorrelationId"]; },
            set: function (value) { this.Fields["CorrelationId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppClosedUsageData.prototype, "SessionId", {
            get: function () { return this.Fields["SessionId"]; },
            set: function (value) { this.Fields["SessionId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppClosedUsageData.prototype, "FocusTime", {
            get: function () { return this.Fields["FocusTime"]; },
            set: function (value) { this.Fields["FocusTime"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppClosedUsageData.prototype, "AppSizeFinalWidth", {
            get: function () { return this.Fields["AppSizeFinalWidth"]; },
            set: function (value) { this.Fields["AppSizeFinalWidth"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppClosedUsageData.prototype, "AppSizeFinalHeight", {
            get: function () { return this.Fields["AppSizeFinalHeight"]; },
            set: function (value) { this.Fields["AppSizeFinalHeight"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppClosedUsageData.prototype, "OpenTime", {
            get: function () { return this.Fields["OpenTime"]; },
            set: function (value) { this.Fields["OpenTime"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppClosedUsageData.prototype, "CloseMethod", {
            get: function () { return this.Fields["CloseMethod"]; },
            set: function (value) { this.Fields["CloseMethod"] = value; },
            enumerable: true,
            configurable: true
        });
        AppClosedUsageData.prototype.SerializeFields = function () {
            this.SetSerializedField("CorrelationId", this.CorrelationId);
            this.SetSerializedField("SessionId", this.SessionId);
            this.SetSerializedField("FocusTime", this.FocusTime);
            this.SetSerializedField("AppSizeFinalWidth", this.AppSizeFinalWidth);
            this.SetSerializedField("AppSizeFinalHeight", this.AppSizeFinalHeight);
            this.SetSerializedField("OpenTime", this.OpenTime);
            this.SetSerializedField("CloseMethod", this.CloseMethod);
        };
        return AppClosedUsageData;
    }(BaseUsageData));
    OSFLog.AppClosedUsageData = AppClosedUsageData;
    var APIUsageUsageData = (function (_super) {
        __extends(APIUsageUsageData, _super);
        function APIUsageUsageData() {
            return _super.call(this, "APIUsage") || this;
        }
        Object.defineProperty(APIUsageUsageData.prototype, "CorrelationId", {
            get: function () { return this.Fields["CorrelationId"]; },
            set: function (value) { this.Fields["CorrelationId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(APIUsageUsageData.prototype, "SessionId", {
            get: function () { return this.Fields["SessionId"]; },
            set: function (value) { this.Fields["SessionId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(APIUsageUsageData.prototype, "APIType", {
            get: function () { return this.Fields["APIType"]; },
            set: function (value) { this.Fields["APIType"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(APIUsageUsageData.prototype, "APIID", {
            get: function () { return this.Fields["APIID"]; },
            set: function (value) { this.Fields["APIID"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(APIUsageUsageData.prototype, "Parameters", {
            get: function () { return this.Fields["Parameters"]; },
            set: function (value) { this.Fields["Parameters"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(APIUsageUsageData.prototype, "ResponseTime", {
            get: function () { return this.Fields["ResponseTime"]; },
            set: function (value) { this.Fields["ResponseTime"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(APIUsageUsageData.prototype, "ErrorType", {
            get: function () { return this.Fields["ErrorType"]; },
            set: function (value) { this.Fields["ErrorType"] = value; },
            enumerable: true,
            configurable: true
        });
        APIUsageUsageData.prototype.SerializeFields = function () {
            this.SetSerializedField("CorrelationId", this.CorrelationId);
            this.SetSerializedField("SessionId", this.SessionId);
            this.SetSerializedField("APIType", this.APIType);
            this.SetSerializedField("APIID", this.APIID);
            this.SetSerializedField("Parameters", this.Parameters);
            this.SetSerializedField("ResponseTime", this.ResponseTime);
            this.SetSerializedField("ErrorType", this.ErrorType);
        };
        return APIUsageUsageData;
    }(BaseUsageData));
    OSFLog.APIUsageUsageData = APIUsageUsageData;
    var AppInitializationUsageData = (function (_super) {
        __extends(AppInitializationUsageData, _super);
        function AppInitializationUsageData() {
            return _super.call(this, "AppInitialization") || this;
        }
        Object.defineProperty(AppInitializationUsageData.prototype, "CorrelationId", {
            get: function () { return this.Fields["CorrelationId"]; },
            set: function (value) { this.Fields["CorrelationId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppInitializationUsageData.prototype, "SessionId", {
            get: function () { return this.Fields["SessionId"]; },
            set: function (value) { this.Fields["SessionId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppInitializationUsageData.prototype, "SuccessCode", {
            get: function () { return this.Fields["SuccessCode"]; },
            set: function (value) { this.Fields["SuccessCode"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AppInitializationUsageData.prototype, "Message", {
            get: function () { return this.Fields["Message"]; },
            set: function (value) { this.Fields["Message"] = value; },
            enumerable: true,
            configurable: true
        });
        AppInitializationUsageData.prototype.SerializeFields = function () {
            this.SetSerializedField("CorrelationId", this.CorrelationId);
            this.SetSerializedField("SessionId", this.SessionId);
            this.SetSerializedField("SuccessCode", this.SuccessCode);
            this.SetSerializedField("Message", this.Message);
        };
        return AppInitializationUsageData;
    }(BaseUsageData));
    OSFLog.AppInitializationUsageData = AppInitializationUsageData;
    var CheckWACHostUsageData = (function (_super) {
        __extends(CheckWACHostUsageData, _super);
        function CheckWACHostUsageData() {
            return _super.call(this, "CheckWACHost") || this;
        }
        Object.defineProperty(CheckWACHostUsageData.prototype, "isWacKnownHost", {
            get: function () { return this.Fields["isWacKnownHost"]; },
            set: function (value) { this.Fields["isWacKnownHost"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CheckWACHostUsageData.prototype, "instanceId", {
            get: function () { return this.Fields["instanceId"]; },
            set: function (value) { this.Fields["instanceId"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CheckWACHostUsageData.prototype, "hostType", {
            get: function () { return this.Fields["hostType"]; },
            set: function (value) { this.Fields["hostType"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CheckWACHostUsageData.prototype, "hostPlatform", {
            get: function () { return this.Fields["hostPlatform"]; },
            set: function (value) { this.Fields["hostPlatform"] = value; },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CheckWACHostUsageData.prototype, "wacDomain", {
            get: function () { return this.Fields["wacDomain"]; },
            set: function (value) { this.Fields["wacDomain"] = value; },
            enumerable: true,
            configurable: true
        });
        CheckWACHostUsageData.prototype.SerializeFields = function () {
            this.SetSerializedField("isWacKnownHost", this.isWacKnownHost);
            this.SetSerializedField("instanceId", this.instanceId);
            this.SetSerializedField("hostType", this.hostType);
            this.SetSerializedField("hostPlatform", this.hostPlatform);
            this.SetSerializedField("wacDomain", this.wacDomain);
        };
        return CheckWACHostUsageData;
    }(BaseUsageData));
    OSFLog.CheckWACHostUsageData = CheckWACHostUsageData;
})(OSFLog || (OSFLog = {}));
var Logger;
(function (Logger) {
    "use strict";
    var TraceLevel;
    (function (TraceLevel) {
        TraceLevel[TraceLevel["info"] = 0] = "info";
        TraceLevel[TraceLevel["warning"] = 1] = "warning";
        TraceLevel[TraceLevel["error"] = 2] = "error";
    })(TraceLevel = Logger.TraceLevel || (Logger.TraceLevel = {}));
    var SendFlag;
    (function (SendFlag) {
        SendFlag[SendFlag["none"] = 0] = "none";
        SendFlag[SendFlag["flush"] = 1] = "flush";
    })(SendFlag = Logger.SendFlag || (Logger.SendFlag = {}));
    function allowUploadingData() {
    }
    Logger.allowUploadingData = allowUploadingData;
    function sendLog(traceLevel, message, flag) {
    }
    Logger.sendLog = sendLog;
    function creatULSEndpoint() {
        try {
            return new ULSEndpointProxy();
        }
        catch (e) {
            return null;
        }
    }
    var ULSEndpointProxy = (function () {
        function ULSEndpointProxy() {
        }
        ULSEndpointProxy.prototype.writeLog = function (log) {
        };
        ULSEndpointProxy.prototype.loadProxyFrame = function () {
        };
        return ULSEndpointProxy;
    }());
    if (!OSF.Logger) {
        OSF.Logger = Logger;
    }
    Logger.ulsEndpoint = creatULSEndpoint();
})(Logger || (Logger = {}));
var OSFAriaLogger;
(function (OSFAriaLogger) {
    var TelemetryEventAppActivated = { name: "AppActivated", enabled: true, critical: true, points: [
            { name: "Browser", type: "string" },
            { name: "Message", type: "string" },
            { name: "Host", type: "string" },
            { name: "AppSizeWidth", type: "int64" },
            { name: "AppSizeHeight", type: "int64" },
            { name: "IsFromWacAutomation", type: "string" },
        ] };
    var TelemetryEventScriptLoad = { name: "ScriptLoad", enabled: true, critical: false, points: [
            { name: "ScriptId", type: "string" },
            { name: "StartTime", type: "double" },
            { name: "ResponseTime", type: "double" },
        ] };
    var enableAPIUsage = shouldAPIUsageBeEnabled();
    var TelemetryEventApiUsage = { name: "APIUsage", enabled: enableAPIUsage, critical: false, points: [
            { name: "APIType", type: "string" },
            { name: "APIID", type: "int64" },
            { name: "Parameters", type: "string" },
            { name: "ResponseTime", type: "int64" },
            { name: "ErrorType", type: "int64" },
        ] };
    var TelemetryEventAppInitialization = { name: "AppInitialization", enabled: true, critical: false, points: [
            { name: "SuccessCode", type: "int64" },
            { name: "Message", type: "string" },
        ] };
    var TelemetryEventAppClosed = { name: "AppClosed", enabled: true, critical: false, points: [
            { name: "FocusTime", type: "int64" },
            { name: "AppSizeFinalWidth", type: "int64" },
            { name: "AppSizeFinalHeight", type: "int64" },
            { name: "OpenTime", type: "int64" },
        ] };
    var TelemetryEventCheckWACHost = { name: "CheckWACHost", enabled: true, critical: false, points: [
            { name: "isWacKnownHost", type: "int64" },
            { name: "solutionId", type: "string" },
            { name: "hostType", type: "string" },
            { name: "hostPlatform", type: "string" },
            { name: "correlationId", type: "string" },
        ] };
    var TelemetryEvents = [
        TelemetryEventAppActivated,
        TelemetryEventScriptLoad,
        TelemetryEventApiUsage,
        TelemetryEventAppInitialization,
        TelemetryEventAppClosed,
        TelemetryEventCheckWACHost,
    ];
    function createDataField(value, point) {
        var key = point.rename === undefined ? point.name : point.rename;
        var type = point.type;
        var field = undefined;
        switch (type) {
            case "string":
                field = oteljs.makeStringDataField(key, value);
                break;
            case "double":
                if (typeof value === "string") {
                    value = parseFloat(value);
                }
                field = oteljs.makeDoubleDataField(key, value);
                break;
            case "int64":
                if (typeof value === "string") {
                    value = parseInt(value);
                }
                field = oteljs.makeInt64DataField(key, value);
                break;
            case "boolean":
                if (typeof value === "string") {
                    value = value === "true";
                }
                field = oteljs.makeBooleanDataField(key, value);
                break;
        }
        return field;
    }
    function getEventDefinition(eventName) {
        for (var _i = 0, TelemetryEvents_1 = TelemetryEvents; _i < TelemetryEvents_1.length; _i++) {
            var event_1 = TelemetryEvents_1[_i];
            if (event_1.name === eventName) {
                return event_1;
            }
        }
        return undefined;
    }
    function eventEnabled(eventName) {
        var eventDefinition = getEventDefinition(eventName);
        if (eventDefinition === undefined) {
            return false;
        }
        return eventDefinition.enabled;
    }
    function shouldAPIUsageBeEnabled() {
        if (!OSF._OfficeAppFactory || !OSF._OfficeAppFactory.getHostInfo) {
            return false;
        }
        var hostInfo = OSF._OfficeAppFactory.getHostInfo();
        if (!hostInfo) {
            return false;
        }
        switch (hostInfo["hostType"]) {
            case "outlook":
                switch (hostInfo["hostPlatform"]) {
                    case "mac":
                    case "web":
                        return true;
                    default:
                        return false;
                }
            default:
                return false;
        }
    }
    function generateTelemetryEvent(eventName, telemetryData) {
        var eventDefinition = getEventDefinition(eventName);
        if (eventDefinition === undefined) {
            return undefined;
        }
        var dataFields = [];
        for (var _i = 0, _a = eventDefinition.points; _i < _a.length; _i++) {
            var point = _a[_i];
            var key = point.name;
            var value = telemetryData[key];
            if (value === undefined) {
                continue;
            }
            var field = createDataField(value, point);
            if (field !== undefined) {
                dataFields.push(field);
            }
        }
        var flags = { dataCategories: oteljs.DataCategories.ProductServiceUsage };
        if (eventDefinition.critical) {
            flags.samplingPolicy = oteljs.SamplingPolicy.CriticalBusinessImpact;
        }
        flags.diagnosticLevel = oteljs.DiagnosticLevel.NecessaryServiceDataEvent;
        var eventNameFull = "Office.Extensibility.OfficeJs." + eventName + "X";
        var event = { eventName: eventNameFull, dataFields: dataFields, eventFlags: flags };
        return event;
    }
    function sendOtelTelemetryEvent(eventName, telemetryData) {
        if (eventEnabled(eventName)) {
            if (typeof OTel !== "undefined") {
                OTel.OTelLogger.onTelemetryLoaded(function () {
                    var event = generateTelemetryEvent(eventName, telemetryData);
                    if (event === undefined) {
                        return;
                    }
                    Microsoft.Office.WebExtension.sendTelemetryEvent(event);
                });
            }
        }
    }
    var AriaLogger = (function () {
        function AriaLogger() {
        }
        AriaLogger.prototype.getAriaCDNLocation = function () {
            return (OSF._OfficeAppFactory.getLoadScriptHelper().getOfficeJsBasePath() + "ariatelemetry/aria-web-telemetry.js");
        };
        AriaLogger.getInstance = function () {
            if (AriaLogger.AriaLoggerObj === undefined) {
                AriaLogger.AriaLoggerObj = new AriaLogger();
            }
            return AriaLogger.AriaLoggerObj;
        };
        AriaLogger.prototype.isIUsageData = function (arg) {
            return arg["Fields"] !== undefined;
        };
        AriaLogger.prototype.shouldSendDirectToAria = function (flavor, version) {
            var BASE10 = 10;
            var MAX_VERSION_WIN32 = [16, 0, 11601];
            var MAX_VERSION_MAC = [16, 28];
            var max_version;
            if (!flavor) {
                return false;
            }
            else if (flavor.toLowerCase() === "win32") {
                max_version = MAX_VERSION_WIN32;
            }
            else if (flavor.toLowerCase() === "mac") {
                max_version = MAX_VERSION_MAC;
            }
            else {
                return true;
            }
            if (!version) {
                return false;
            }
            var versionTokens = version.split('.');
            for (var i = 0; i < max_version.length && i < versionTokens.length; i++) {
                var versionToken = parseInt(versionTokens[i], BASE10);
                if (isNaN(versionToken)) {
                    return false;
                }
                if (versionToken < max_version[i]) {
                    return true;
                }
                if (versionToken > max_version[i]) {
                    return false;
                }
            }
            return false;
        };
        AriaLogger.prototype.isDirectToAriaEnabled = function () {
            if (this.EnableDirectToAria === undefined || this.EnableDirectToAria === null) {
                var flavor = void 0;
                var version = void 0;
                if (OSF._OfficeAppFactory && OSF._OfficeAppFactory.getHostInfo) {
                    flavor = OSF._OfficeAppFactory.getHostInfo()["hostPlatform"];
                }
                if (window.external && typeof window.external.GetContext !== "undefined" && typeof window.external.GetContext().GetHostFullVersion !== "undefined") {
                    version = window.external.GetContext().GetHostFullVersion();
                }
                this.EnableDirectToAria = this.shouldSendDirectToAria(flavor, version);
            }
            return this.EnableDirectToAria;
        };
        AriaLogger.prototype.sendTelemetry = function (tableName, telemetryData) {
            var startAfterMs = 1000;
            var sendAriaEnabled = AriaLogger.EnableSendingTelemetryWithLegacyAria && this.isDirectToAriaEnabled();
            if (sendAriaEnabled) {
                OSF.OUtil.loadScript(this.getAriaCDNLocation(), function () {
                    try {
                        if (!this.ALogger) {
                            var OfficeExtensibilityTenantID = "db334b301e7b474db5e0f02f07c51a47-a1b5bc36-1bbe-482f-a64a-c2d9cb606706-7439";
                            this.ALogger = AWTLogManager.initialize(OfficeExtensibilityTenantID);
                        }
                        var eventProperties = new AWTEventProperties();
                        eventProperties.setName("Office.Extensibility.OfficeJS." + tableName);
                        for (var key in telemetryData) {
                            if (key.toLowerCase() !== "table") {
                                eventProperties.setProperty(key, telemetryData[key]);
                            }
                        }
                        var today = new Date();
                        eventProperties.setProperty("Date", today.toISOString());
                        this.ALogger.logEvent(eventProperties);
                    }
                    catch (e) {
                    }
                }, startAfterMs);
            }
            if (AriaLogger.EnableSendingTelemetryWithOTel) {
                sendOtelTelemetryEvent(tableName, telemetryData);
            }
        };
        AriaLogger.prototype.logData = function (data) {
            if (this.isIUsageData(data)) {
                this.sendTelemetry(data["Table"], data["Fields"]);
            }
            else {
                this.sendTelemetry(data["Table"], data);
            }
        };
        AriaLogger.EnableSendingTelemetryWithOTel = true;
        AriaLogger.EnableSendingTelemetryWithLegacyAria = false;
        return AriaLogger;
    }());
    OSFAriaLogger.AriaLogger = AriaLogger;
})(OSFAriaLogger || (OSFAriaLogger = {}));
var OSFAppTelemetry;
(function (OSFAppTelemetry) {
    "use strict";
    var appInfo;
    var sessionId = OSF.OUtil.Guid.generateNewGuid();
    var osfControlAppCorrelationId = "";
    var omexDomainRegex = new RegExp("^https?://store\\.office(ppe|-int)?\\.com/", "i");
    var privateAddinId = "PRIVATE";
    OSFAppTelemetry.enableTelemetry = true;
    ;
    var AppInfo = (function () {
        function AppInfo() {
        }
        return AppInfo;
    }());
    OSFAppTelemetry.AppInfo = AppInfo;
    var Event = (function () {
        function Event(name, handler) {
            this.name = name;
            this.handler = handler;
        }
        return Event;
    }());
    var AppStorage = (function () {
        function AppStorage() {
            this.clientIDKey = "Office API client";
            this.logIdSetKey = "Office App Log Id Set";
        }
        AppStorage.prototype.getClientId = function () {
            var clientId = this.getValue(this.clientIDKey);
            if (!clientId || clientId.length <= 0 || clientId.length > 40) {
                clientId = OSF.OUtil.Guid.generateNewGuid();
                this.setValue(this.clientIDKey, clientId);
            }
            return clientId;
        };
        AppStorage.prototype.saveLog = function (logId, log) {
            var logIdSet = this.getValue(this.logIdSetKey);
            logIdSet = ((logIdSet && logIdSet.length > 0) ? (logIdSet + ";") : "") + logId;
            this.setValue(this.logIdSetKey, logIdSet);
            this.setValue(logId, log);
        };
        AppStorage.prototype.enumerateLog = function (callback, clean) {
            var logIdSet = this.getValue(this.logIdSetKey);
            if (logIdSet) {
                var ids = logIdSet.split(";");
                for (var id in ids) {
                    var logId = ids[id];
                    var log = this.getValue(logId);
                    if (log) {
                        if (callback) {
                            callback(logId, log);
                        }
                        if (clean) {
                            this.remove(logId);
                        }
                    }
                }
                if (clean) {
                    this.remove(this.logIdSetKey);
                }
            }
        };
        AppStorage.prototype.getValue = function (key) {
            var osfLocalStorage = OSF.OUtil.getLocalStorage();
            var value = "";
            if (osfLocalStorage) {
                value = osfLocalStorage.getItem(key);
            }
            return value;
        };
        AppStorage.prototype.setValue = function (key, value) {
            var osfLocalStorage = OSF.OUtil.getLocalStorage();
            if (osfLocalStorage) {
                osfLocalStorage.setItem(key, value);
            }
        };
        AppStorage.prototype.remove = function (key) {
            var osfLocalStorage = OSF.OUtil.getLocalStorage();
            if (osfLocalStorage) {
                try {
                    osfLocalStorage.removeItem(key);
                }
                catch (ex) {
                }
            }
        };
        return AppStorage;
    }());
    var AppLogger = (function () {
        function AppLogger() {
        }
        AppLogger.prototype.LogData = function (data) {
            if (!OSFAppTelemetry.enableTelemetry) {
                return;
            }
            try {
                OSFAriaLogger.AriaLogger.getInstance().logData(data);
            }
            catch (e) {
            }
        };
        AppLogger.prototype.LogRawData = function (log) {
            if (!OSFAppTelemetry.enableTelemetry) {
                return;
            }
            try {
                OSFAriaLogger.AriaLogger.getInstance().logData(JSON.parse(log));
            }
            catch (e) {
            }
        };
        return AppLogger;
    }());
    function trimStringToLowerCase(input) {
        if (input) {
            input = input.replace(/[{}]/g, "").toLowerCase();
        }
        return (input || "");
    }
    function initialize(context) {
        if (!OSFAppTelemetry.enableTelemetry) {
            return;
        }
        if (appInfo) {
            return;
        }
        appInfo = new AppInfo();
        if (context.get_hostFullVersion()) {
            appInfo.hostVersion = context.get_hostFullVersion();
        }
        else {
            appInfo.hostVersion = context.get_appVersion();
        }
        appInfo.appId = canSendAddinId() ? context.get_id() : privateAddinId;
        appInfo.browser = window.navigator.userAgent;
        appInfo.correlationId = trimStringToLowerCase(context.get_correlationId());
        appInfo.clientId = (new AppStorage()).getClientId();
        appInfo.appInstanceId = context.get_appInstanceId();
        if (appInfo.appInstanceId) {
            appInfo.appInstanceId = trimStringToLowerCase(appInfo.appInstanceId);
            appInfo.appInstanceId = getCompliantAppInstanceId(context.get_id(), appInfo.appInstanceId);
        }
        appInfo.message = context.get_hostCustomMessage();
        appInfo.officeJSVersion = OSF.ConstantNames.FileVersion;
        appInfo.hostJSVersion = "16.0.14621.10000";
        if (context._wacHostEnvironment) {
            appInfo.wacHostEnvironment = context._wacHostEnvironment;
        }
        if (context._isFromWacAutomation !== undefined && context._isFromWacAutomation !== null) {
            appInfo.isFromWacAutomation = context._isFromWacAutomation.toString().toLowerCase();
        }
        var docUrl = context.get_docUrl();
        appInfo.docUrl = omexDomainRegex.test(docUrl) ? docUrl : "";
        var url = location.href;
        if (url) {
            url = url.split("?")[0].split("#")[0];
        }
        appInfo.appURL = "";
        (function getUserIdAndAssetIdFromToken(token, appInfo) {
            var xmlContent;
            var parser;
            var xmlDoc;
            appInfo.assetId = "";
            appInfo.userId = "";
            try {
                xmlContent = decodeURIComponent(token);
                parser = new DOMParser();
                xmlDoc = parser.parseFromString(xmlContent, "text/xml");
                var cidNode = xmlDoc.getElementsByTagName("t")[0].attributes.getNamedItem("cid");
                var oidNode = xmlDoc.getElementsByTagName("t")[0].attributes.getNamedItem("oid");
                if (cidNode && cidNode.nodeValue) {
                    appInfo.userId = cidNode.nodeValue;
                }
                else if (oidNode && oidNode.nodeValue) {
                    appInfo.userId = oidNode.nodeValue;
                }
                appInfo.assetId = xmlDoc.getElementsByTagName("t")[0].attributes.getNamedItem("aid").nodeValue;
            }
            catch (e) {
            }
            finally {
                xmlContent = null;
                xmlDoc = null;
                parser = null;
            }
        })(context.get_eToken(), appInfo);
        appInfo.sessionId = sessionId;
        if (typeof OTel !== "undefined") {
            OTel.OTelLogger.initialize(appInfo);
        }
        (function handleLifecycle() {
            var startTime = new Date();
            var lastFocus = null;
            var focusTime = 0;
            var finished = false;
            var adjustFocusTime = function () {
                if (document.hasFocus()) {
                    if (lastFocus == null) {
                        lastFocus = new Date();
                    }
                }
                else if (lastFocus) {
                    focusTime += Math.abs((new Date()).getTime() - lastFocus.getTime());
                    lastFocus = null;
                }
            };
            var eventList = [];
            eventList.push(new Event("focus", adjustFocusTime));
            eventList.push(new Event("blur", adjustFocusTime));
            eventList.push(new Event("focusout", adjustFocusTime));
            eventList.push(new Event("focusin", adjustFocusTime));
            var exitFunction = function () {
                for (var i = 0; i < eventList.length; i++) {
                    OSF.OUtil.removeEventListener(window, eventList[i].name, eventList[i].handler);
                }
                eventList.length = 0;
                if (!finished) {
                    if (document.hasFocus() && lastFocus) {
                        focusTime += Math.abs((new Date()).getTime() - lastFocus.getTime());
                        lastFocus = null;
                    }
                    OSFAppTelemetry.onAppClosed(Math.abs((new Date()).getTime() - startTime.getTime()), focusTime);
                    finished = true;
                }
            };
            eventList.push(new Event("beforeunload", exitFunction));
            eventList.push(new Event("unload", exitFunction));
            for (var i = 0; i < eventList.length; i++) {
                OSF.OUtil.addEventListener(window, eventList[i].name, eventList[i].handler);
            }
            adjustFocusTime();
        })();
        OSFAppTelemetry.onAppActivated();
    }
    OSFAppTelemetry.initialize = initialize;
    function onAppActivated() {
        if (!appInfo) {
            return;
        }
        (new AppStorage()).enumerateLog(function (id, log) { return (new AppLogger()).LogRawData(log); }, true);
        var data = new OSFLog.AppActivatedUsageData();
        data.SessionId = sessionId;
        data.AppId = appInfo.appId;
        data.AssetId = appInfo.assetId;
        data.AppURL = "";
        data.UserId = "";
        data.ClientId = appInfo.clientId;
        data.Browser = appInfo.browser;
        data.HostVersion = appInfo.hostVersion;
        data.CorrelationId = trimStringToLowerCase(appInfo.correlationId);
        data.AppSizeWidth = window.innerWidth;
        data.AppSizeHeight = window.innerHeight;
        data.AppInstanceId = appInfo.appInstanceId;
        data.Message = appInfo.message;
        data.DocUrl = appInfo.docUrl;
        data.OfficeJSVersion = appInfo.officeJSVersion;
        data.HostJSVersion = appInfo.hostJSVersion;
        if (appInfo.wacHostEnvironment) {
            data.WacHostEnvironment = appInfo.wacHostEnvironment;
        }
        if (appInfo.isFromWacAutomation !== undefined && appInfo.isFromWacAutomation !== null) {
            data.IsFromWacAutomation = appInfo.isFromWacAutomation;
        }
        (new AppLogger()).LogData(data);
    }
    OSFAppTelemetry.onAppActivated = onAppActivated;
    function onScriptDone(scriptId, msStartTime, msResponseTime, appCorrelationId) {
        var data = new OSFLog.ScriptLoadUsageData();
        data.CorrelationId = trimStringToLowerCase(appCorrelationId);
        data.SessionId = sessionId;
        data.ScriptId = scriptId;
        data.StartTime = msStartTime;
        data.ResponseTime = msResponseTime;
        (new AppLogger()).LogData(data);
    }
    OSFAppTelemetry.onScriptDone = onScriptDone;
    function onCallDone(apiType, id, parameters, msResponseTime, errorType) {
        if (!appInfo) {
            return;
        }
        if (!isAllowedHost() || !isAPIUsageEnabledDispId(id, apiType)) {
            return;
        }
        var data = new OSFLog.APIUsageUsageData();
        data.CorrelationId = trimStringToLowerCase(osfControlAppCorrelationId);
        data.SessionId = sessionId;
        data.APIType = apiType;
        data.APIID = id;
        data.Parameters = parameters;
        data.ResponseTime = msResponseTime;
        data.ErrorType = errorType;
        (new AppLogger()).LogData(data);
    }
    OSFAppTelemetry.onCallDone = onCallDone;
    ;
    function onMethodDone(id, args, msResponseTime, errorType) {
        var parameters = null;
        if (args) {
            if (typeof args == "number") {
                parameters = String(args);
            }
            else if (typeof args === "object") {
                for (var index in args) {
                    if (parameters !== null) {
                        parameters += ",";
                    }
                    else {
                        parameters = "";
                    }
                    if (typeof args[index] == "number") {
                        parameters += String(args[index]);
                    }
                }
            }
            else {
                parameters = "";
            }
        }
        OSF.AppTelemetry.onCallDone("method", id, parameters, msResponseTime, errorType);
    }
    OSFAppTelemetry.onMethodDone = onMethodDone;
    function onPropertyDone(propertyName, msResponseTime) {
        OSF.AppTelemetry.onCallDone("property", -1, propertyName, msResponseTime);
    }
    OSFAppTelemetry.onPropertyDone = onPropertyDone;
    function onCheckWACHost(isWacKnownHost, instanceId, hostType, hostPlatform, wacDomain) {
        var data = new OSFLog.CheckWACHostUsageData();
        data.isWacKnownHost = isWacKnownHost;
        data.instanceId = instanceId;
        data.hostType = hostType;
        data.hostPlatform = hostPlatform;
        data.wacDomain = "";
        (new AppLogger()).LogData(data);
    }
    OSFAppTelemetry.onCheckWACHost = onCheckWACHost;
    function onEventDone(id, errorType) {
        OSF.AppTelemetry.onCallDone("event", id, null, 0, errorType);
    }
    OSFAppTelemetry.onEventDone = onEventDone;
    function onRegisterDone(register, id, msResponseTime, errorType) {
        OSF.AppTelemetry.onCallDone(register ? "registerevent" : "unregisterevent", id, null, msResponseTime, errorType);
    }
    OSFAppTelemetry.onRegisterDone = onRegisterDone;
    function onAppClosed(openTime, focusTime) {
        if (!appInfo) {
            return;
        }
        var data = new OSFLog.AppClosedUsageData();
        data.CorrelationId = trimStringToLowerCase(osfControlAppCorrelationId);
        data.SessionId = sessionId;
        data.FocusTime = focusTime;
        data.OpenTime = openTime;
        data.AppSizeFinalWidth = window.innerWidth;
        data.AppSizeFinalHeight = window.innerHeight;
        (new AppStorage()).saveLog(sessionId, data.SerializeRow());
    }
    OSFAppTelemetry.onAppClosed = onAppClosed;
    function setOsfControlAppCorrelationId(correlationId) {
        osfControlAppCorrelationId = trimStringToLowerCase(correlationId);
    }
    OSFAppTelemetry.setOsfControlAppCorrelationId = setOsfControlAppCorrelationId;
    function doAppInitializationLogging(isException, message) {
        var data = new OSFLog.AppInitializationUsageData();
        data.CorrelationId = trimStringToLowerCase(osfControlAppCorrelationId);
        data.SessionId = sessionId;
        data.SuccessCode = isException ? 1 : 0;
        data.Message = message;
        (new AppLogger()).LogData(data);
    }
    OSFAppTelemetry.doAppInitializationLogging = doAppInitializationLogging;
    function logAppCommonMessage(message) {
        doAppInitializationLogging(false, message);
    }
    OSFAppTelemetry.logAppCommonMessage = logAppCommonMessage;
    function logAppException(errorMessage) {
        doAppInitializationLogging(true, errorMessage);
    }
    OSFAppTelemetry.logAppException = logAppException;
    function isAllowedHost() {
        if (!OSF._OfficeAppFactory || !OSF._OfficeAppFactory.getHostInfo) {
            return false;
        }
        var hostInfo = OSF._OfficeAppFactory.getHostInfo();
        if (!hostInfo) {
            return false;
        }
        switch (hostInfo["hostType"]) {
            case "outlook":
                switch (hostInfo["hostPlatform"]) {
                    case "mac":
                    case "web":
                        return true;
                    default:
                        return false;
                }
            default:
                return false;
        }
    }
    function isAPIUsageEnabledDispId(dispId, apiType) {
        if (apiType === "method") {
            switch (dispId) {
                case 3:
                case 4:
                case 38:
                case 37:
                case 10:
                case 12:
                    return true;
                default:
                    return false;
            }
        }
        return false;
    }
    function canSendAddinId() {
        var isPublic = (OSF._OfficeAppFactory.getHostInfo().flags & OSF.HostInfoFlags.PublicAddin) != 0;
        if (isPublic) {
            return isPublic;
        }
        if (!appInfo) {
            return false;
        }
        var hostPlatform = OSF._OfficeAppFactory.getHostInfo().hostPlatform;
        var hostVersion = appInfo.hostVersion;
        return _isComplianceExceptedHost(hostPlatform, hostVersion);
    }
    OSFAppTelemetry.canSendAddinId = canSendAddinId;
    function getCompliantAppInstanceId(addinId, appInstanceId) {
        if (!canSendAddinId() && appInstanceId === addinId) {
            return privateAddinId;
        }
        return appInstanceId;
    }
    OSFAppTelemetry.getCompliantAppInstanceId = getCompliantAppInstanceId;
    function _isComplianceExceptedHost(hostPlatform, hostVersion) {
        var excepted = false;
        var versionExtractor = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
        var result = versionExtractor.exec(hostVersion);
        if (result) {
            var major = parseInt(result[1]);
            var minor = parseInt(result[2]);
            var build = parseInt(result[3]);
            if (hostPlatform == "win32") {
                if (major < 16 || major == 16 && build < 14225) {
                    excepted = true;
                }
            }
            else if (hostPlatform == "mac") {
                if (major < 16 || (major == 16 && (minor < 52 || minor == 52 && build < 808))) {
                    excepted = true;
                }
            }
        }
        return excepted;
    }
    OSFAppTelemetry._isComplianceExceptedHost = _isComplianceExceptedHost;
    OSF.AppTelemetry = OSFAppTelemetry;
})(OSFAppTelemetry || (OSFAppTelemetry = {}));
var OSFPerfUtil;
(function (OSFPerfUtil) {
    function prepareDataFieldsForOtel(resource, name) {
        name = name + "_Resource";
        if (oteljs !== undefined) {
            return [
                oteljs.makeDoubleDataField(name + "_responseEnd", resource.responseEnd),
                oteljs.makeDoubleDataField(name + "_responseStart", resource.responseStart),
                oteljs.makeDoubleDataField(name + "_startTime", resource.startTime),
                oteljs.makeDoubleDataField(name + "_transferSize", resource.transferSize)
            ];
        }
    }
    function sendPerformanceTelemetry() {
        if (typeof OTel !== "undefined" && OSF.AppTelemetry.enableTelemetry && typeof OSFPerformance !== "undefined" && typeof (performance) != "undefined" && performance.getEntriesByType) {
            var hostPerfResource_1;
            var officePerfResource_1;
            var resources = performance.getEntriesByType("resource");
            resources.forEach(function (resource) {
                var resourceName = resource.name.toLowerCase();
                if (OSF.OUtil.stringEndsWith(resourceName, OSFPerformance.hostSpecificFileName)) {
                    hostPerfResource_1 = resource;
                }
                else if (OSF.OUtil.stringEndsWith(resourceName, OSF.ConstantNames.OfficeDebugJS) ||
                    OSF.OUtil.stringEndsWith(resourceName, OSF.ConstantNames.OfficeJS)) {
                    officePerfResource_1 = resource;
                }
            });
            OTel.OTelLogger.onTelemetryLoaded(function () {
                var dataFields = prepareDataFieldsForOtel(hostPerfResource_1, "HostJs");
                dataFields = dataFields.concat(prepareDataFieldsForOtel(officePerfResource_1, "OfficeJs"));
                dataFields = dataFields.concat([
                    oteljs.makeDoubleDataField("officeExecuteStartDate", OSFPerformance.officeExecuteStartDate),
                    oteljs.makeDoubleDataField("officeExecuteStart", OSFPerformance.officeExecuteStart),
                    oteljs.makeDoubleDataField("officeExecuteEnd", OSFPerformance.officeExecuteEnd),
                    oteljs.makeDoubleDataField("hostInitializationStart", OSFPerformance.hostInitializationStart),
                    oteljs.makeDoubleDataField("hostInitializationEnd", OSFPerformance.hostInitializationEnd),
                    oteljs.makeDoubleDataField("totalJSHeapSize", OSFPerformance.totalJSHeapSize),
                    oteljs.makeDoubleDataField("usedJSHeapSize", OSFPerformance.usedJSHeapSize),
                    oteljs.makeDoubleDataField("jsHeapSizeLimit", OSFPerformance.jsHeapSizeLimit),
                    oteljs.makeDoubleDataField("getAppContextStart", OSFPerformance.getAppContextStart),
                    oteljs.makeDoubleDataField("getAppContextEnd", OSFPerformance.getAppContextEnd),
                    oteljs.makeDoubleDataField("createOMEnd", OSFPerformance.createOMEnd),
                    oteljs.makeDoubleDataField("officeOnReady", OSFPerformance.officeOnReady),
                    oteljs.makeBooleanDataField("isSharedRuntime", (OSF._OfficeAppFactory.getHostInfo().flags & OSF.HostInfoFlags.SharedApp) !== 0)
                ]);
                Microsoft.Office.WebExtension.sendTelemetryEvent({
                    eventName: "Office.Extensibility.OfficeJs.JSPerformanceTelemetryV06",
                    dataFields: dataFields,
                    eventFlags: {
                        dataCategories: oteljs.DataCategories.ProductServiceUsage,
                        diagnosticLevel: oteljs.DiagnosticLevel.NecessaryServiceDataEvent
                    }
                });
            });
        }
    }
    OSFPerfUtil.sendPerformanceTelemetry = sendPerformanceTelemetry;
})(OSFPerfUtil || (OSFPerfUtil = {}));
Microsoft.Office.WebExtension.EventType = {};
OSF.EventDispatch = function OSF_EventDispatch(eventTypes) {
    this._eventHandlers = {};
    this._objectEventHandlers = {};
    this._queuedEventsArgs = {};
    if (eventTypes != null) {
        for (var i = 0; i < eventTypes.length; i++) {
            var eventType = eventTypes[i];
            var isObjectEvent = (eventType == "objectDeleted" || eventType == "objectSelectionChanged" || eventType == "objectDataChanged" || eventType == "contentControlAdded");
            if (!isObjectEvent)
                this._eventHandlers[eventType] = [];
            else
                this._objectEventHandlers[eventType] = {};
            this._queuedEventsArgs[eventType] = [];
        }
    }
};
OSF.EventDispatch.prototype = {
    getSupportedEvents: function OSF_EventDispatch$getSupportedEvents() {
        var events = [];
        for (var eventName in this._eventHandlers)
            events.push(eventName);
        for (var eventName in this._objectEventHandlers)
            events.push(eventName);
        return events;
    },
    supportsEvent: function OSF_EventDispatch$supportsEvent(event) {
        for (var eventName in this._eventHandlers) {
            if (event == eventName)
                return true;
        }
        for (var eventName in this._objectEventHandlers) {
            if (event == eventName)
                return true;
        }
        return false;
    },
    hasEventHandler: function OSF_EventDispatch$hasEventHandler(eventType, handler) {
        var handlers = this._eventHandlers[eventType];
        if (handlers && handlers.length > 0) {
            for (var i = 0; i < handlers.length; i++) {
                if (handlers[i] === handler)
                    return true;
            }
        }
        return false;
    },
    hasObjectEventHandler: function OSF_EventDispatch$hasObjectEventHandler(eventType, objectId, handler) {
        var handlers = this._objectEventHandlers[eventType];
        if (handlers != null) {
            var _handlers = handlers[objectId];
            for (var i = 0; _handlers != null && i < _handlers.length; i++) {
                if (_handlers[i] === handler)
                    return true;
            }
        }
        return false;
    },
    addEventHandler: function OSF_EventDispatch$addEventHandler(eventType, handler) {
        if (typeof handler != "function") {
            return false;
        }
        var handlers = this._eventHandlers[eventType];
        if (handlers && !this.hasEventHandler(eventType, handler)) {
            handlers.push(handler);
            return true;
        }
        else {
            return false;
        }
    },
    addObjectEventHandler: function OSF_EventDispatch$addObjectEventHandler(eventType, objectId, handler) {
        if (typeof handler != "function") {
            return false;
        }
        var handlers = this._objectEventHandlers[eventType];
        if (handlers && !this.hasObjectEventHandler(eventType, objectId, handler)) {
            if (handlers[objectId] == null)
                handlers[objectId] = [];
            handlers[objectId].push(handler);
            return true;
        }
        return false;
    },
    addEventHandlerAndFireQueuedEvent: function OSF_EventDispatch$addEventHandlerAndFireQueuedEvent(eventType, handler) {
        var handlers = this._eventHandlers[eventType];
        var isFirstHandler = handlers.length == 0;
        var succeed = this.addEventHandler(eventType, handler);
        if (isFirstHandler && succeed) {
            this.fireQueuedEvent(eventType);
        }
        return succeed;
    },
    removeEventHandler: function OSF_EventDispatch$removeEventHandler(eventType, handler) {
        var handlers = this._eventHandlers[eventType];
        if (handlers && handlers.length > 0) {
            for (var index = 0; index < handlers.length; index++) {
                if (handlers[index] === handler) {
                    handlers.splice(index, 1);
                    return true;
                }
            }
        }
        return false;
    },
    removeObjectEventHandler: function OSF_EventDispatch$removeObjectEventHandler(eventType, objectId, handler) {
        var handlers = this._objectEventHandlers[eventType];
        if (handlers != null) {
            var _handlers = handlers[objectId];
            for (var i = 0; _handlers != null && i < _handlers.length; i++) {
                if (_handlers[i] === handler) {
                    _handlers.splice(i, 1);
                    return true;
                }
            }
        }
        return false;
    },
    clearEventHandlers: function OSF_EventDispatch$clearEventHandlers(eventType) {
        if (typeof this._eventHandlers[eventType] != "undefined" && this._eventHandlers[eventType].length > 0) {
            this._eventHandlers[eventType] = [];
            return true;
        }
        return false;
    },
    clearObjectEventHandlers: function OSF_EventDispatch$clearObjectEventHandlers(eventType, objectId) {
        if (this._objectEventHandlers[eventType] != null && this._objectEventHandlers[eventType][objectId] != null) {
            this._objectEventHandlers[eventType][objectId] = [];
            return true;
        }
        return false;
    },
    getEventHandlerCount: function OSF_EventDispatch$getEventHandlerCount(eventType) {
        return this._eventHandlers[eventType] != undefined ? this._eventHandlers[eventType].length : -1;
    },
    getObjectEventHandlerCount: function OSF_EventDispatch$getObjectEventHandlerCount(eventType, objectId) {
        if (this._objectEventHandlers[eventType] == null || this._objectEventHandlers[eventType][objectId] == null)
            return 0;
        return this._objectEventHandlers[eventType][objectId].length;
    },
    fireEvent: function OSF_EventDispatch$fireEvent(eventArgs) {
        if (eventArgs.type == undefined)
            return false;
        var eventType = eventArgs.type;
        if (eventType && this._eventHandlers[eventType]) {
            var eventHandlers = this._eventHandlers[eventType];
            for (var i = 0; i < eventHandlers.length; i++) {
                eventHandlers[i](eventArgs);
            }
            return true;
        }
        else {
            return false;
        }
    },
    fireObjectEvent: function OSF_EventDispatch$fireObjectEvent(objectId, eventArgs) {
        if (eventArgs.type == undefined)
            return false;
        var eventType = eventArgs.type;
        if (eventType && this._objectEventHandlers[eventType]) {
            var eventHandlers = this._objectEventHandlers[eventType];
            var _handlers = eventHandlers[objectId];
            if (_handlers != null) {
                for (var i = 0; i < _handlers.length; i++)
                    _handlers[i](eventArgs);
                return true;
            }
        }
        return false;
    },
    fireOrQueueEvent: function OSF_EventDispatch$fireOrQueueEvent(eventArgs) {
        var eventType = eventArgs.type;
        if (eventType && this._eventHandlers[eventType]) {
            var eventHandlers = this._eventHandlers[eventType];
            var queuedEvents = this._queuedEventsArgs[eventType];
            if (eventHandlers.length == 0) {
                queuedEvents.push(eventArgs);
            }
            else {
                this.fireEvent(eventArgs);
            }
            return true;
        }
        else {
            return false;
        }
    },
    fireQueuedEvent: function OSF_EventDispatch$queueEvent(eventType) {
        if (eventType && this._eventHandlers[eventType]) {
            var eventHandlers = this._eventHandlers[eventType];
            var queuedEvents = this._queuedEventsArgs[eventType];
            if (eventHandlers.length > 0) {
                var eventHandler = eventHandlers[0];
                while (queuedEvents.length > 0) {
                    var eventArgs = queuedEvents.shift();
                    eventHandler(eventArgs);
                }
                return true;
            }
        }
        return false;
    },
    clearQueuedEvent: function OSF_EventDispatch$clearQueuedEvent(eventType) {
        if (eventType && this._eventHandlers[eventType]) {
            var queuedEvents = this._queuedEventsArgs[eventType];
            if (queuedEvents) {
                this._queuedEventsArgs[eventType] = [];
            }
        }
    }
};
OSF.DDA.OMFactory = OSF.DDA.OMFactory || {};
OSF.DDA.OMFactory.manufactureEventArgs = function OSF_DDA_OMFactory$manufactureEventArgs(eventType, target, eventProperties) {
    var args;
    switch (eventType) {
        case Microsoft.Office.WebExtension.EventType.DocumentSelectionChanged:
            args = new OSF.DDA.DocumentSelectionChangedEventArgs(target);
            break;
        case Microsoft.Office.WebExtension.EventType.BindingSelectionChanged:
            args = new OSF.DDA.BindingSelectionChangedEventArgs(this.manufactureBinding(eventProperties, target.document), eventProperties[OSF.DDA.PropertyDescriptors.Subset]);
            break;
        case Microsoft.Office.WebExtension.EventType.BindingDataChanged:
            args = new OSF.DDA.BindingDataChangedEventArgs(this.manufactureBinding(eventProperties, target.document));
            break;
        case Microsoft.Office.WebExtension.EventType.SettingsChanged:
            args = new OSF.DDA.SettingsChangedEventArgs(target);
            break;
        case Microsoft.Office.WebExtension.EventType.ActiveViewChanged:
            args = new OSF.DDA.ActiveViewChangedEventArgs(eventProperties);
            break;
        case Microsoft.Office.WebExtension.EventType.OfficeThemeChanged:
            args = new OSF.DDA.Theming.OfficeThemeChangedEventArgs(eventProperties);
            break;
        case Microsoft.Office.WebExtension.EventType.DocumentThemeChanged:
            args = new OSF.DDA.Theming.DocumentThemeChangedEventArgs(eventProperties);
            break;
        case Microsoft.Office.WebExtension.EventType.AppCommandInvoked:
            args = OSF.DDA.AppCommand.AppCommandInvokedEventArgs.create(eventProperties);
            break;
        case Microsoft.Office.WebExtension.EventType.ObjectDeleted:
        case Microsoft.Office.WebExtension.EventType.ObjectSelectionChanged:
        case Microsoft.Office.WebExtension.EventType.ObjectDataChanged:
        case Microsoft.Office.WebExtension.EventType.ContentControlAdded:
            args = new OSF.DDA.ObjectEventArgs(eventType, eventProperties[Microsoft.Office.WebExtension.Parameters.Id]);
            break;
        case Microsoft.Office.WebExtension.EventType.RichApiMessage:
            args = new OSF.DDA.RichApiMessageEventArgs(eventType, eventProperties);
            break;
        case Microsoft.Office.WebExtension.EventType.DataNodeInserted:
            args = new OSF.DDA.NodeInsertedEventArgs(this.manufactureDataNode(eventProperties[OSF.DDA.DataNodeEventProperties.NewNode]), eventProperties[OSF.DDA.DataNodeEventProperties.InUndoRedo]);
            break;
        case Microsoft.Office.WebExtension.EventType.DataNodeReplaced:
            args = new OSF.DDA.NodeReplacedEventArgs(this.manufactureDataNode(eventProperties[OSF.DDA.DataNodeEventProperties.OldNode]), this.manufactureDataNode(eventProperties[OSF.DDA.DataNodeEventProperties.NewNode]), eventProperties[OSF.DDA.DataNodeEventProperties.InUndoRedo]);
            break;
        case Microsoft.Office.WebExtension.EventType.DataNodeDeleted:
            args = new OSF.DDA.NodeDeletedEventArgs(this.manufactureDataNode(eventProperties[OSF.DDA.DataNodeEventProperties.OldNode]), this.manufactureDataNode(eventProperties[OSF.DDA.DataNodeEventProperties.NextSiblingNode]), eventProperties[OSF.DDA.DataNodeEventProperties.InUndoRedo]);
            break;
        case Microsoft.Office.WebExtension.EventType.TaskSelectionChanged:
            args = new OSF.DDA.TaskSelectionChangedEventArgs(target);
            break;
        case Microsoft.Office.WebExtension.EventType.ResourceSelectionChanged:
            args = new OSF.DDA.ResourceSelectionChangedEventArgs(target);
            break;
        case Microsoft.Office.WebExtension.EventType.ViewSelectionChanged:
            args = new OSF.DDA.ViewSelectionChangedEventArgs(target);
            break;
        case Microsoft.Office.WebExtension.EventType.DialogMessageReceived:
            args = new OSF.DDA.DialogEventArgs(eventProperties);
            break;
        case Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived:
            args = new OSF.DDA.DialogParentEventArgs(eventProperties);
            break;
        case Microsoft.Office.WebExtension.EventType.ItemChanged:
            if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                args = new OSF.DDA.OlkItemSelectedChangedEventArgs(eventProperties);
                target.initialize(args["initialData"]);
                if (OSF._OfficeAppFactory.getHostInfo()["hostPlatform"] == "win32" || OSF._OfficeAppFactory.getHostInfo()["hostPlatform"] == "mac") {
                    target.setCurrentItemNumber(args["itemNumber"].itemNumber);
                }
            }
            else {
                throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
            }
            break;
        case Microsoft.Office.WebExtension.EventType.RecipientsChanged:
            if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                args = new OSF.DDA.OlkRecipientsChangedEventArgs(eventProperties);
            }
            else {
                throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
            }
            break;
        case Microsoft.Office.WebExtension.EventType.AppointmentTimeChanged:
            if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                args = new OSF.DDA.OlkAppointmentTimeChangedEventArgs(eventProperties);
            }
            else {
                throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
            }
            break;
        case Microsoft.Office.WebExtension.EventType.RecurrenceChanged:
            if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                args = new OSF.DDA.OlkRecurrenceChangedEventArgs(eventProperties);
            }
            else {
                throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
            }
            break;
        case Microsoft.Office.WebExtension.EventType.AttachmentsChanged:
            if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                args = new OSF.DDA.OlkAttachmentsChangedEventArgs(eventProperties);
            }
            else {
                throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
            }
            break;
        case Microsoft.Office.WebExtension.EventType.EnhancedLocationsChanged:
            if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                args = new OSF.DDA.OlkEnhancedLocationsChangedEventArgs(eventProperties);
            }
            else {
                throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
            }
            break;
        case Microsoft.Office.WebExtension.EventType.InfobarClicked:
            if (OSF._OfficeAppFactory.getHostInfo()["hostType"] == "outlook") {
                args = new OSF.DDA.OlkInfobarClickedEventArgs(eventProperties);
            }
            else {
                throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
            }
            break;
        default:
            throw OsfMsAjaxFactory.msAjaxError.argument(Microsoft.Office.WebExtension.Parameters.EventType, OSF.OUtil.formatString(Strings.OfficeOM.L_NotSupportedEventType, eventType));
    }
    return args;
};
OSF.DDA.AsyncMethodNames.addNames({
    AddHandlerAsync: "addHandlerAsync",
    RemoveHandlerAsync: "removeHandlerAsync"
});
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.AddHandlerAsync,
    requiredArguments: [{
            "name": Microsoft.Office.WebExtension.Parameters.EventType,
            "enum": Microsoft.Office.WebExtension.EventType,
            "verify": function (eventType, caller, eventDispatch) { return eventDispatch.supportsEvent(eventType); }
        },
        {
            "name": Microsoft.Office.WebExtension.Parameters.Handler,
            "types": ["function"]
        }
    ],
    supportedOptions: [],
    privateStateCallbacks: []
});
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.RemoveHandlerAsync,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.EventType,
            "enum": Microsoft.Office.WebExtension.EventType,
            "verify": function (eventType, caller, eventDispatch) { return eventDispatch.supportsEvent(eventType); }
        }
    ],
    supportedOptions: [
        {
            name: Microsoft.Office.WebExtension.Parameters.Handler,
            value: {
                "types": ["function", "object"],
                "defaultValue": null
            }
        }
    ],
    privateStateCallbacks: []
});
OSF.DialogShownStatus = { hasDialogShown: false, isWindowDialog: false };
OSF.OUtil.augmentList(OSF.DDA.EventDescriptors, {
    DialogMessageReceivedEvent: "DialogMessageReceivedEvent"
});
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, {
    DialogMessageReceived: "dialogMessageReceived",
    DialogEventReceived: "dialogEventReceived"
});
OSF.OUtil.augmentList(OSF.DDA.PropertyDescriptors, {
    MessageType: "messageType",
    MessageContent: "messageContent",
    MessageOrigin: "messageOrigin"
});
OSF.DDA.DialogEventType = {};
OSF.OUtil.augmentList(OSF.DDA.DialogEventType, {
    DialogClosed: "dialogClosed",
    NavigationFailed: "naviationFailed"
});
OSF.DDA.AsyncMethodNames.addNames({
    DisplayDialogAsync: "displayDialogAsync",
    CloseAsync: "close"
});
OSF.DDA.SyncMethodNames.addNames({
    MessageParent: "messageParent",
    MessageChild: "messageChild",
    SendMessage: "sendMessage",
    AddMessageHandler: "addEventHandler"
});
OSF.DDA.UI.ParentUI = function OSF_DDA_ParentUI() {
    var eventDispatch;
    if (Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived != null) {
        eventDispatch = new OSF.EventDispatch([
            Microsoft.Office.WebExtension.EventType.DialogMessageReceived,
            Microsoft.Office.WebExtension.EventType.DialogEventReceived,
            Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived
        ]);
    }
    else {
        eventDispatch = new OSF.EventDispatch([
            Microsoft.Office.WebExtension.EventType.DialogMessageReceived,
            Microsoft.Office.WebExtension.EventType.DialogEventReceived
        ]);
    }
    var openDialogName = OSF.DDA.AsyncMethodNames.DisplayDialogAsync.displayName;
    var target = this;
    if (!target[openDialogName]) {
        OSF.OUtil.defineEnumerableProperty(target, openDialogName, {
            value: function () {
                var openDialog = OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.OpenDialog];
                openDialog(arguments, eventDispatch, target);
            }
        });
    }
    OSF.OUtil.finalizeProperties(this);
};
OSF.DDA.UI.ChildUI = function OSF_DDA_ChildUI(isPopupWindow) {
    var messageParentName = OSF.DDA.SyncMethodNames.MessageParent.displayName;
    var target = this;
    if (!target[messageParentName]) {
        OSF.OUtil.defineEnumerableProperty(target, messageParentName, {
            value: function () {
                var messageParent = OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.MessageParent];
                return messageParent(arguments, target);
            }
        });
    }
    var addEventHandler = OSF.DDA.SyncMethodNames.AddMessageHandler.displayName;
    if (!target[addEventHandler] && typeof OSF.DialogParentMessageEventDispatch != "undefined") {
        OSF.DDA.DispIdHost.addEventSupport(target, OSF.DialogParentMessageEventDispatch, isPopupWindow);
    }
    OSF.OUtil.finalizeProperties(this);
};
OSF.DialogHandler = function OSF_DialogHandler() { };
OSF.DDA.DialogEventArgs = function OSF_DDA_DialogEventArgs(message) {
    if (message[OSF.DDA.PropertyDescriptors.MessageType] == OSF.DialogMessageType.DialogMessageReceived) {
        OSF.OUtil.defineEnumerableProperties(this, {
            "type": {
                value: Microsoft.Office.WebExtension.EventType.DialogMessageReceived
            },
            "message": {
                value: message[OSF.DDA.PropertyDescriptors.MessageContent]
            },
            "origin": {
                value: message[OSF.DDA.PropertyDescriptors.MessageOrigin]
            }
        });
    }
    else {
        OSF.OUtil.defineEnumerableProperties(this, {
            "type": {
                value: Microsoft.Office.WebExtension.EventType.DialogEventReceived
            },
            "error": {
                value: message[OSF.DDA.PropertyDescriptors.MessageType]
            }
        });
    }
};
OSF.DDA.DialogParentEventArgs = function OSF_DDA_DialogParentEventArgs(message) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "type": {
            value: Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived
        },
        "message": {
            value: message[OSF.DDA.PropertyDescriptors.MessageContent]
        },
        "origin": {
            value: message[OSF.DDA.PropertyDescriptors.MessageOrigin]
        }
    });
};
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.DisplayDialogAsync,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.Url,
            "types": ["string"]
        }
    ],
    supportedOptions: [
        {
            name: Microsoft.Office.WebExtension.Parameters.Width,
            value: {
                "types": ["number"],
                "defaultValue": 99
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.Height,
            value: {
                "types": ["number"],
                "defaultValue": 99
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.RequireHTTPs,
            value: {
                "types": ["boolean"],
                "defaultValue": true
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.DisplayInIframe,
            value: {
                "types": ["boolean"],
                "defaultValue": false
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.HideTitle,
            value: {
                "types": ["boolean"],
                "defaultValue": false
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.UseDeviceIndependentPixels,
            value: {
                "types": ["boolean"],
                "defaultValue": false
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.PromptBeforeOpen,
            value: {
                "types": ["boolean"],
                "defaultValue": true
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.EnforceAppDomain,
            value: {
                "types": ["boolean"],
                "defaultValue": true
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.UrlNoHostInfo,
            value: {
                "types": ["boolean"],
                "defaultValue": false
            }
        }
    ],
    privateStateCallbacks: [],
    onSucceeded: function (args, caller, callArgs) {
        var targetId = args[Microsoft.Office.WebExtension.Parameters.Id];
        var eventDispatch = args[Microsoft.Office.WebExtension.Parameters.Data];
        var dialog = new OSF.DialogHandler();
        var closeDialog = OSF.DDA.AsyncMethodNames.CloseAsync.displayName;
        OSF.OUtil.defineEnumerableProperty(dialog, closeDialog, {
            value: function () {
                var closeDialogfunction = OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.CloseDialog];
                closeDialogfunction(arguments, targetId, eventDispatch, dialog);
            }
        });
        var addHandler = OSF.DDA.SyncMethodNames.AddMessageHandler.displayName;
        OSF.OUtil.defineEnumerableProperty(dialog, addHandler, {
            value: function () {
                var syncMethodCall = OSF.DDA.SyncMethodCalls[OSF.DDA.SyncMethodNames.AddMessageHandler.id];
                var callArgs = syncMethodCall.verifyAndExtractCall(arguments, dialog, eventDispatch);
                var eventType = callArgs[Microsoft.Office.WebExtension.Parameters.EventType];
                var handler = callArgs[Microsoft.Office.WebExtension.Parameters.Handler];
                return eventDispatch.addEventHandlerAndFireQueuedEvent(eventType, handler);
            }
        });
        if (OSF.DDA.UI.EnableSendMessageDialogAPI === true) {
            var sendMessage = OSF.DDA.SyncMethodNames.SendMessage.displayName;
            OSF.OUtil.defineEnumerableProperty(dialog, sendMessage, {
                value: function () {
                    var execute = OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.SendMessage];
                    return execute(arguments, eventDispatch, dialog);
                }
            });
        }
        if (OSF.DDA.UI.EnableMessageChildDialogAPI === true) {
            var messageChild = OSF.DDA.SyncMethodNames.MessageChild.displayName;
            OSF.OUtil.defineEnumerableProperty(dialog, messageChild, {
                value: function () {
                    var execute = OSF._OfficeAppFactory.getHostFacade()[OSF.DDA.DispIdHost.Methods.SendMessage];
                    return execute(arguments, eventDispatch, dialog);
                }
            });
        }
        return dialog;
    },
    checkCallArgs: function (callArgs, caller, stateInfo) {
        if (callArgs[Microsoft.Office.WebExtension.Parameters.Width] <= 0) {
            callArgs[Microsoft.Office.WebExtension.Parameters.Width] = 1;
        }
        if (!callArgs[Microsoft.Office.WebExtension.Parameters.UseDeviceIndependentPixels] && callArgs[Microsoft.Office.WebExtension.Parameters.Width] > 100) {
            callArgs[Microsoft.Office.WebExtension.Parameters.Width] = 99;
        }
        if (callArgs[Microsoft.Office.WebExtension.Parameters.Height] <= 0) {
            callArgs[Microsoft.Office.WebExtension.Parameters.Height] = 1;
        }
        if (!callArgs[Microsoft.Office.WebExtension.Parameters.UseDeviceIndependentPixels] && callArgs[Microsoft.Office.WebExtension.Parameters.Height] > 100) {
            callArgs[Microsoft.Office.WebExtension.Parameters.Height] = 99;
        }
        if (!callArgs[Microsoft.Office.WebExtension.Parameters.RequireHTTPs]) {
            callArgs[Microsoft.Office.WebExtension.Parameters.RequireHTTPs] = true;
        }
        return callArgs;
    }
});
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.CloseAsync,
    requiredArguments: [],
    supportedOptions: [],
    privateStateCallbacks: []
});
OSF.DDA.SyncMethodCalls.define({
    method: OSF.DDA.SyncMethodNames.MessageParent,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.MessageToParent,
            "types": ["string", "number", "boolean"]
        }
    ],
    supportedOptions: [
        {
            name: Microsoft.Office.WebExtension.Parameters.TargetOrigin,
            value: {
                "types": ["string"],
                "defaultValue": ""
            }
        }
    ]
});
OSF.DDA.SyncMethodCalls.define({
    method: OSF.DDA.SyncMethodNames.AddMessageHandler,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.EventType,
            "enum": Microsoft.Office.WebExtension.EventType,
            "verify": function (eventType, caller, eventDispatch) { return eventDispatch.supportsEvent(eventType); }
        },
        {
            "name": Microsoft.Office.WebExtension.Parameters.Handler,
            "types": ["function"]
        }
    ],
    supportedOptions: []
});
OSF.DDA.SyncMethodCalls.define({
    method: OSF.DDA.SyncMethodNames.SendMessage,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.MessageContent,
            "types": ["string"]
        }
    ],
    supportedOptions: [
        {
            name: Microsoft.Office.WebExtension.Parameters.TargetOrigin,
            value: {
                "types": ["string"],
                "defaultValue": ""
            }
        }
    ],
    privateStateCallbacks: []
});
OSF.DDA.SafeArray.Delegate.openDialog = function OSF_DDA_SafeArray_Delegate$OpenDialog(args) {
    try {
        if (args.onCalling) {
            args.onCalling();
        }
        var callback = OSF.DDA.SafeArray.Delegate._getOnAfterRegisterEvent(true, args);
        OSF.ClientHostController.openDialog(args.dispId, args.targetId, function OSF_DDA_SafeArrayDelegate$RegisterEventAsync_OnEvent(eventDispId, payload) {
            if (args.onEvent) {
                args.onEvent(payload);
            }
            if (OSF.AppTelemetry) {
                OSF.AppTelemetry.onEventDone(args.dispId);
            }
        }, callback);
    }
    catch (ex) {
        OSF.DDA.SafeArray.Delegate._onException(ex, args);
    }
};
OSF.DDA.SafeArray.Delegate.closeDialog = function OSF_DDA_SafeArray_Delegate$CloseDialog(args) {
    if (args.onCalling) {
        args.onCalling();
    }
    var callback = OSF.DDA.SafeArray.Delegate._getOnAfterRegisterEvent(false, args);
    try {
        OSF.ClientHostController.closeDialog(args.dispId, args.targetId, callback);
    }
    catch (ex) {
        OSF.DDA.SafeArray.Delegate._onException(ex, args);
    }
};
OSF.DDA.SafeArray.Delegate.messageParent = function OSF_DDA_SafeArray_Delegate$MessageParent(args) {
    try {
        if (args.onCalling) {
            args.onCalling();
        }
        var startTime = (new Date()).getTime();
        var result = OSF.ClientHostController.messageParent(args.hostCallArgs);
        if (args.onReceiving) {
            args.onReceiving();
        }
        if (OSF.AppTelemetry) {
            OSF.AppTelemetry.onMethodDone(args.dispId, args.hostCallArgs, Math.abs((new Date()).getTime() - startTime), result);
        }
        return result;
    }
    catch (ex) {
        return OSF.DDA.SafeArray.Delegate._onExceptionSyncMethod(ex);
    }
};
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDispId.dispidDialogMessageReceivedEvent,
    fromHost: [
        { name: OSF.DDA.EventDescriptors.DialogMessageReceivedEvent, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDescriptors.DialogMessageReceivedEvent,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.MessageType, value: 0 },
        { name: OSF.DDA.PropertyDescriptors.MessageContent, value: 1 },
        { name: OSF.DDA.PropertyDescriptors.MessageOrigin, value: 2 }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.sendMessage = function OSF_DDA_SafeArray_Delegate$SendMessage(args) {
    try {
        if (args.onCalling) {
            args.onCalling();
        }
        var startTime = (new Date()).getTime();
        var result = OSF.ClientHostController.sendMessage(args.hostCallArgs);
        if (args.onReceiving) {
            args.onReceiving();
        }
        return result;
    }
    catch (ex) {
        return OSF.DDA.SafeArray.Delegate._onExceptionSyncMethod(ex);
    }
};
OSF.OUtil.augmentList(OSF.DDA.EventDescriptors, {
    DialogParentMessageReceivedEvent: "DialogParentMessageReceivedEvent"
});
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, {
    DialogParentMessageReceived: "dialogParentMessageReceived",
    DialogParentEventReceived: "dialogParentEventReceived"
});
OSF.DialogParentMessageEventDispatch = new OSF.EventDispatch([
    Microsoft.Office.WebExtension.EventType.DialogParentMessageReceived,
    Microsoft.Office.WebExtension.EventType.DialogParentEventReceived
]);
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDispId.dispidDialogParentMessageReceivedEvent,
    fromHost: [
        { name: OSF.DDA.EventDescriptors.DialogParentMessageReceivedEvent, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDescriptors.DialogParentMessageReceivedEvent,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.MessageType, value: 0 },
        { name: OSF.DDA.PropertyDescriptors.MessageContent, value: 1 },
        { name: OSF.DDA.PropertyDescriptors.MessageOrigin, value: 2 }
    ],
    isComplexType: true
});
OSF.DDA.UI.EnableMessageChildDialogAPI = true;
Microsoft.Office.WebExtension.TableData = function Microsoft_Office_WebExtension_TableData(rows, headers) {
    function fixData(data) {
        if (data == null || data == undefined) {
            return null;
        }
        try {
            for (var dim = OSF.DDA.DataCoercion.findArrayDimensionality(data, 2); dim < 2; dim++) {
                data = [data];
            }
            return data;
        }
        catch (ex) {
        }
    }
    ;
    OSF.OUtil.defineEnumerableProperties(this, {
        "headers": {
            get: function () { return headers; },
            set: function (value) {
                headers = fixData(value);
            }
        },
        "rows": {
            get: function () { return rows; },
            set: function (value) {
                rows = (value == null || (OSF.OUtil.isArray(value) && (value.length == 0))) ?
                    [] :
                    fixData(value);
            }
        }
    });
    this.headers = headers;
    this.rows = rows;
};
OSF.DDA.OMFactory = OSF.DDA.OMFactory || {};
OSF.DDA.OMFactory.manufactureTableData = function OSF_DDA_OMFactory$manufactureTableData(tableDataProperties) {
    return new Microsoft.Office.WebExtension.TableData(tableDataProperties[OSF.DDA.TableDataProperties.TableRows], tableDataProperties[OSF.DDA.TableDataProperties.TableHeaders]);
};
Microsoft.Office.WebExtension.CoercionType = {
    Text: "text",
    Matrix: "matrix",
    Table: "table"
};
OSF.DDA.DataCoercion = (function OSF_DDA_DataCoercion() {
    return {
        findArrayDimensionality: function OSF_DDA_DataCoercion$findArrayDimensionality(obj) {
            if (OSF.OUtil.isArray(obj)) {
                var dim = 0;
                for (var index = 0; index < obj.length; index++) {
                    dim = Math.max(dim, OSF.DDA.DataCoercion.findArrayDimensionality(obj[index]));
                }
                return dim + 1;
            }
            else {
                return 0;
            }
        },
        getCoercionDefaultForBinding: function OSF_DDA_DataCoercion$getCoercionDefaultForBinding(bindingType) {
            switch (bindingType) {
                case Microsoft.Office.WebExtension.BindingType.Matrix: return Microsoft.Office.WebExtension.CoercionType.Matrix;
                case Microsoft.Office.WebExtension.BindingType.Table: return Microsoft.Office.WebExtension.CoercionType.Table;
                case Microsoft.Office.WebExtension.BindingType.Text:
                default:
                    return Microsoft.Office.WebExtension.CoercionType.Text;
            }
        },
        getBindingDefaultForCoercion: function OSF_DDA_DataCoercion$getBindingDefaultForCoercion(coercionType) {
            switch (coercionType) {
                case Microsoft.Office.WebExtension.CoercionType.Matrix: return Microsoft.Office.WebExtension.BindingType.Matrix;
                case Microsoft.Office.WebExtension.CoercionType.Table: return Microsoft.Office.WebExtension.BindingType.Table;
                case Microsoft.Office.WebExtension.CoercionType.Text:
                case Microsoft.Office.WebExtension.CoercionType.Html:
                case Microsoft.Office.WebExtension.CoercionType.Ooxml:
                default:
                    return Microsoft.Office.WebExtension.BindingType.Text;
            }
        },
        determineCoercionType: function OSF_DDA_DataCoercion$determineCoercionType(data) {
            if (data == null || data == undefined)
                return null;
            var sourceType = null;
            var runtimeType = typeof data;
            if (data.rows !== undefined) {
                sourceType = Microsoft.Office.WebExtension.CoercionType.Table;
            }
            else if (OSF.OUtil.isArray(data)) {
                sourceType = Microsoft.Office.WebExtension.CoercionType.Matrix;
            }
            else if (runtimeType == "string" || runtimeType == "number" || runtimeType == "boolean" || OSF.OUtil.isDate(data)) {
                sourceType = Microsoft.Office.WebExtension.CoercionType.Text;
            }
            else {
                throw OSF.DDA.ErrorCodeManager.errorCodes.ooeUnsupportedDataObject;
            }
            return sourceType;
        },
        coerceData: function OSF_DDA_DataCoercion$coerceData(data, destinationType, sourceType) {
            sourceType = sourceType || OSF.DDA.DataCoercion.determineCoercionType(data);
            if (sourceType && sourceType != destinationType) {
                OSF.OUtil.writeProfilerMark(OSF.InternalPerfMarker.DataCoercionBegin);
                data = OSF.DDA.DataCoercion._coerceDataFromTable(destinationType, OSF.DDA.DataCoercion._coerceDataToTable(data, sourceType));
                OSF.OUtil.writeProfilerMark(OSF.InternalPerfMarker.DataCoercionEnd);
            }
            return data;
        },
        _matrixToText: function OSF_DDA_DataCoercion$_matrixToText(matrix) {
            if (matrix.length == 1 && matrix[0].length == 1)
                return "" + matrix[0][0];
            var val = "";
            for (var i = 0; i < matrix.length; i++) {
                val += matrix[i].join("\t") + "\n";
            }
            return val.substring(0, val.length - 1);
        },
        _textToMatrix: function OSF_DDA_DataCoercion$_textToMatrix(text) {
            var ret = text.split("\n");
            for (var i = 0; i < ret.length; i++)
                ret[i] = ret[i].split("\t");
            return ret;
        },
        _tableToText: function OSF_DDA_DataCoercion$_tableToText(table) {
            var headers = "";
            if (table.headers != null) {
                headers = OSF.DDA.DataCoercion._matrixToText([table.headers]) + "\n";
            }
            var rows = OSF.DDA.DataCoercion._matrixToText(table.rows);
            if (rows == "") {
                headers = headers.substring(0, headers.length - 1);
            }
            return headers + rows;
        },
        _tableToMatrix: function OSF_DDA_DataCoercion$_tableToMatrix(table) {
            var matrix = table.rows;
            if (table.headers != null) {
                matrix.unshift(table.headers);
            }
            return matrix;
        },
        _coerceDataFromTable: function OSF_DDA_DataCoercion$_coerceDataFromTable(coercionType, table) {
            var value;
            switch (coercionType) {
                case Microsoft.Office.WebExtension.CoercionType.Table:
                    value = table;
                    break;
                case Microsoft.Office.WebExtension.CoercionType.Matrix:
                    value = OSF.DDA.DataCoercion._tableToMatrix(table);
                    break;
                case Microsoft.Office.WebExtension.CoercionType.SlideRange:
                    value = null;
                    if (OSF.DDA.OMFactory.manufactureSlideRange) {
                        value = OSF.DDA.OMFactory.manufactureSlideRange(OSF.DDA.DataCoercion._tableToText(table));
                    }
                    if (value == null) {
                        value = OSF.DDA.DataCoercion._tableToText(table);
                    }
                    break;
                case Microsoft.Office.WebExtension.CoercionType.Text:
                case Microsoft.Office.WebExtension.CoercionType.Html:
                case Microsoft.Office.WebExtension.CoercionType.Ooxml:
                default:
                    value = OSF.DDA.DataCoercion._tableToText(table);
                    break;
            }
            return value;
        },
        _coerceDataToTable: function OSF_DDA_DataCoercion$_coerceDataToTable(data, sourceType) {
            if (sourceType == undefined) {
                sourceType = OSF.DDA.DataCoercion.determineCoercionType(data);
            }
            var value;
            switch (sourceType) {
                case Microsoft.Office.WebExtension.CoercionType.Table:
                    value = data;
                    break;
                case Microsoft.Office.WebExtension.CoercionType.Matrix:
                    value = new Microsoft.Office.WebExtension.TableData(data);
                    break;
                case Microsoft.Office.WebExtension.CoercionType.Text:
                case Microsoft.Office.WebExtension.CoercionType.Html:
                case Microsoft.Office.WebExtension.CoercionType.Ooxml:
                default:
                    value = new Microsoft.Office.WebExtension.TableData(OSF.DDA.DataCoercion._textToMatrix(data));
                    break;
            }
            return value;
        }
    };
})();
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: Microsoft.Office.WebExtension.Parameters.CoercionType,
    toHost: [
        { name: Microsoft.Office.WebExtension.CoercionType.Text, value: 0 },
        { name: Microsoft.Office.WebExtension.CoercionType.Matrix, value: 1 },
        { name: Microsoft.Office.WebExtension.CoercionType.Table, value: 2 }
    ]
});
OSF.DDA.AsyncMethodNames.addNames({
    GetSelectedDataAsync: "getSelectedDataAsync",
    SetSelectedDataAsync: "setSelectedDataAsync"
});
(function () {
    function processData(dataDescriptor, caller, callArgs) {
        var data = dataDescriptor[Microsoft.Office.WebExtension.Parameters.Data];
        if (OSF.DDA.TableDataProperties && data && (data[OSF.DDA.TableDataProperties.TableRows] != undefined || data[OSF.DDA.TableDataProperties.TableHeaders] != undefined)) {
            data = OSF.DDA.OMFactory.manufactureTableData(data);
        }
        data = OSF.DDA.DataCoercion.coerceData(data, callArgs[Microsoft.Office.WebExtension.Parameters.CoercionType]);
        return data == undefined ? null : data;
    }
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.GetSelectedDataAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.CoercionType,
                "enum": Microsoft.Office.WebExtension.CoercionType
            }
        ],
        supportedOptions: [
            {
                name: Microsoft.Office.WebExtension.Parameters.ValueFormat,
                value: {
                    "enum": Microsoft.Office.WebExtension.ValueFormat,
                    "defaultValue": Microsoft.Office.WebExtension.ValueFormat.Unformatted
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.FilterType,
                value: {
                    "enum": Microsoft.Office.WebExtension.FilterType,
                    "defaultValue": Microsoft.Office.WebExtension.FilterType.All
                }
            }
        ],
        privateStateCallbacks: [],
        onSucceeded: processData
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.SetSelectedDataAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.Data,
                "types": ["string", "object", "number", "boolean"]
            }
        ],
        supportedOptions: [
            {
                name: Microsoft.Office.WebExtension.Parameters.CoercionType,
                value: {
                    "enum": Microsoft.Office.WebExtension.CoercionType,
                    "calculate": function (requiredArgs) {
                        return OSF.DDA.DataCoercion.determineCoercionType(requiredArgs[Microsoft.Office.WebExtension.Parameters.Data]);
                    }
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.ImageLeft,
                value: {
                    "types": ["number", "boolean"],
                    "defaultValue": false
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.ImageTop,
                value: {
                    "types": ["number", "boolean"],
                    "defaultValue": false
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.ImageWidth,
                value: {
                    "types": ["number", "boolean"],
                    "defaultValue": false
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.ImageHeight,
                value: {
                    "types": ["number", "boolean"],
                    "defaultValue": false
                }
            }
        ],
        privateStateCallbacks: []
    });
})();
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidGetSelectedDataMethod,
    fromHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ],
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.CoercionType, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.ValueFormat, value: 1 },
        { name: Microsoft.Office.WebExtension.Parameters.FilterType, value: 2 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidSetSelectedDataMethod,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.CoercionType, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: 1 },
        { name: Microsoft.Office.WebExtension.Parameters.ImageLeft, value: 2 },
        { name: Microsoft.Office.WebExtension.Parameters.ImageTop, value: 3 },
        { name: Microsoft.Office.WebExtension.Parameters.ImageWidth, value: 4 },
        { name: Microsoft.Office.WebExtension.Parameters.ImageHeight, value: 5 },
    ]
});
OSF.DDA.SettingsManager = {
    SerializedSettings: "serializedSettings",
    RefreshingSettings: "refreshingSettings",
    DateJSONPrefix: "Date(",
    DataJSONSuffix: ")",
    serializeSettings: function OSF_DDA_SettingsManager$serializeSettings(settingsCollection) {
        return OSF.OUtil.serializeSettings(settingsCollection);
    },
    deserializeSettings: function OSF_DDA_SettingsManager$deserializeSettings(serializedSettings) {
        return OSF.OUtil.deserializeSettings(serializedSettings);
    }
};
OSF.DDA.Settings = function OSF_DDA_Settings(settings) {
    settings = settings || {};
    var cacheSessionSettings = function (settings) {
        var osfSessionStorage = OSF.OUtil.getSessionStorage();
        if (osfSessionStorage) {
            var serializedSettings = OSF.DDA.SettingsManager.serializeSettings(settings);
            var storageSettings = JSON ? JSON.stringify(serializedSettings) : Sys.Serialization.JavaScriptSerializer.serialize(serializedSettings);
            osfSessionStorage.setItem(OSF._OfficeAppFactory.getCachedSessionSettingsKey(), storageSettings);
        }
    };
    OSF.OUtil.defineEnumerableProperties(this, {
        "get": {
            value: function OSF_DDA_Settings$get(name) {
                var e = Function._validateParams(arguments, [
                    { name: "name", type: String, mayBeNull: false }
                ]);
                if (e)
                    throw e;
                var setting = settings[name];
                return typeof (setting) === 'undefined' ? null : setting;
            }
        },
        "set": {
            value: function OSF_DDA_Settings$set(name, value) {
                var e = Function._validateParams(arguments, [
                    { name: "name", type: String, mayBeNull: false },
                    { name: "value", mayBeNull: true }
                ]);
                if (e)
                    throw e;
                settings[name] = value;
                cacheSessionSettings(settings);
            }
        },
        "remove": {
            value: function OSF_DDA_Settings$remove(name) {
                var e = Function._validateParams(arguments, [
                    { name: "name", type: String, mayBeNull: false }
                ]);
                if (e)
                    throw e;
                delete settings[name];
                cacheSessionSettings(settings);
            }
        }
    });
    OSF.DDA.DispIdHost.addAsyncMethods(this, [OSF.DDA.AsyncMethodNames.SaveAsync], settings);
};
OSF.DDA.RefreshableSettings = function OSF_DDA_RefreshableSettings(settings) {
    OSF.DDA.RefreshableSettings.uber.constructor.call(this, settings);
    OSF.DDA.DispIdHost.addAsyncMethods(this, [OSF.DDA.AsyncMethodNames.RefreshAsync], settings);
    OSF.DDA.DispIdHost.addEventSupport(this, new OSF.EventDispatch([Microsoft.Office.WebExtension.EventType.SettingsChanged]));
};
OSF.OUtil.extend(OSF.DDA.RefreshableSettings, OSF.DDA.Settings);
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, {
    SettingsChanged: "settingsChanged"
});
OSF.DDA.SettingsChangedEventArgs = function OSF_DDA_SettingsChangedEventArgs(settingsInstance) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "type": {
            value: Microsoft.Office.WebExtension.EventType.SettingsChanged
        },
        "settings": {
            value: settingsInstance
        }
    });
};
OSF.DDA.AsyncMethodNames.addNames({
    RefreshAsync: "refreshAsync",
    SaveAsync: "saveAsync"
});
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.RefreshAsync,
    requiredArguments: [],
    supportedOptions: [],
    privateStateCallbacks: [
        {
            name: OSF.DDA.SettingsManager.RefreshingSettings,
            value: function getRefreshingSettings(settingsInstance, settingsCollection) {
                return settingsCollection;
            }
        }
    ],
    onSucceeded: function deserializeSettings(serializedSettingsDescriptor, refreshingSettings, refreshingSettingsArgs) {
        var serializedSettings = serializedSettingsDescriptor[OSF.DDA.SettingsManager.SerializedSettings];
        var newSettings = OSF.DDA.SettingsManager.deserializeSettings(serializedSettings);
        var oldSettings = refreshingSettingsArgs[OSF.DDA.SettingsManager.RefreshingSettings];
        for (var setting in oldSettings) {
            refreshingSettings.remove(setting);
        }
        for (var setting in newSettings) {
            refreshingSettings.set(setting, newSettings[setting]);
        }
        return refreshingSettings;
    }
});
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.SaveAsync,
    requiredArguments: [],
    supportedOptions: [
        {
            name: Microsoft.Office.WebExtension.Parameters.OverwriteIfStale,
            value: {
                "types": ["boolean"],
                "defaultValue": true
            }
        }
    ],
    privateStateCallbacks: [
        {
            name: OSF.DDA.SettingsManager.SerializedSettings,
            value: function serializeSettings(settingsInstance, settingsCollection) {
                return OSF.DDA.SettingsManager.serializeSettings(settingsCollection);
            }
        }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidLoadSettingsMethod,
    fromHost: [
        { name: OSF.DDA.SettingsManager.SerializedSettings, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidSaveSettingsMethod,
    toHost: [
        { name: OSF.DDA.SettingsManager.SerializedSettings, value: OSF.DDA.SettingsManager.SerializedSettings },
        { name: Microsoft.Office.WebExtension.Parameters.OverwriteIfStale, value: Microsoft.Office.WebExtension.Parameters.OverwriteIfStale }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({ type: OSF.DDA.EventDispId.dispidSettingsChangedEvent });
Microsoft.Office.WebExtension.BindingType = {
    Table: "table",
    Text: "text",
    Matrix: "matrix"
};
OSF.DDA.BindingProperties = {
    Id: "BindingId",
    Type: Microsoft.Office.WebExtension.Parameters.BindingType
};
OSF.OUtil.augmentList(OSF.DDA.ListDescriptors, { BindingList: "BindingList" });
OSF.OUtil.augmentList(OSF.DDA.PropertyDescriptors, {
    Subset: "subset",
    BindingProperties: "BindingProperties"
});
OSF.DDA.ListType.setListType(OSF.DDA.ListDescriptors.BindingList, OSF.DDA.PropertyDescriptors.BindingProperties);
OSF.DDA.BindingPromise = function OSF_DDA_BindingPromise(bindingId, errorCallback) {
    this._id = bindingId;
    OSF.OUtil.defineEnumerableProperty(this, "onFail", {
        get: function () {
            return errorCallback;
        },
        set: function (onError) {
            var t = typeof onError;
            if (t != "undefined" && t != "function") {
                throw OSF.OUtil.formatString(Strings.OfficeOM.L_CallbackNotAFunction, t);
            }
            errorCallback = onError;
        }
    });
};
OSF.DDA.BindingPromise.prototype = {
    _fetch: function OSF_DDA_BindingPromise$_fetch(onComplete) {
        if (this.binding) {
            if (onComplete)
                onComplete(this.binding);
        }
        else {
            if (!this._binding) {
                var me = this;
                Microsoft.Office.WebExtension.context.document.bindings.getByIdAsync(this._id, function (asyncResult) {
                    if (asyncResult.status == Microsoft.Office.WebExtension.AsyncResultStatus.Succeeded) {
                        OSF.OUtil.defineEnumerableProperty(me, "binding", {
                            value: asyncResult.value
                        });
                        if (onComplete)
                            onComplete(me.binding);
                    }
                    else {
                        if (me.onFail)
                            me.onFail(asyncResult);
                    }
                });
            }
        }
        return this;
    },
    getDataAsync: function OSF_DDA_BindingPromise$getDataAsync() {
        var args = arguments;
        this._fetch(function onComplete(binding) { binding.getDataAsync.apply(binding, args); });
        return this;
    },
    setDataAsync: function OSF_DDA_BindingPromise$setDataAsync() {
        var args = arguments;
        this._fetch(function onComplete(binding) { binding.setDataAsync.apply(binding, args); });
        return this;
    },
    addHandlerAsync: function OSF_DDA_BindingPromise$addHandlerAsync() {
        var args = arguments;
        this._fetch(function onComplete(binding) { binding.addHandlerAsync.apply(binding, args); });
        return this;
    },
    removeHandlerAsync: function OSF_DDA_BindingPromise$removeHandlerAsync() {
        var args = arguments;
        this._fetch(function onComplete(binding) { binding.removeHandlerAsync.apply(binding, args); });
        return this;
    }
};
OSF.DDA.BindingFacade = function OSF_DDA_BindingFacade(docInstance) {
    this._eventDispatches = [];
    OSF.OUtil.defineEnumerableProperty(this, "document", {
        value: docInstance
    });
    var am = OSF.DDA.AsyncMethodNames;
    OSF.DDA.DispIdHost.addAsyncMethods(this, [
        am.AddFromSelectionAsync,
        am.AddFromNamedItemAsync,
        am.GetAllAsync,
        am.GetByIdAsync,
        am.ReleaseByIdAsync
    ]);
};
OSF.DDA.UnknownBinding = function OSF_DDA_UknonwnBinding(id, docInstance) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "document": { value: docInstance },
        "id": { value: id }
    });
};
OSF.DDA.Binding = function OSF_DDA_Binding(id, docInstance) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "document": {
            value: docInstance
        },
        "id": {
            value: id
        }
    });
    var am = OSF.DDA.AsyncMethodNames;
    OSF.DDA.DispIdHost.addAsyncMethods(this, [
        am.GetDataAsync,
        am.SetDataAsync
    ]);
    var et = Microsoft.Office.WebExtension.EventType;
    var bindingEventDispatches = docInstance.bindings._eventDispatches;
    if (!bindingEventDispatches[id]) {
        bindingEventDispatches[id] = new OSF.EventDispatch([
            et.BindingSelectionChanged,
            et.BindingDataChanged
        ]);
    }
    var eventDispatch = bindingEventDispatches[id];
    OSF.DDA.DispIdHost.addEventSupport(this, eventDispatch);
};
OSF.DDA.generateBindingId = function OSF_DDA$GenerateBindingId() {
    return "UnnamedBinding_" + OSF.OUtil.getUniqueId() + "_" + new Date().getTime();
};
OSF.DDA.OMFactory = OSF.DDA.OMFactory || {};
OSF.DDA.OMFactory.manufactureBinding = function OSF_DDA_OMFactory$manufactureBinding(bindingProperties, containingDocument) {
    var id = bindingProperties[OSF.DDA.BindingProperties.Id];
    var rows = bindingProperties[OSF.DDA.BindingProperties.RowCount];
    var cols = bindingProperties[OSF.DDA.BindingProperties.ColumnCount];
    var hasHeaders = bindingProperties[OSF.DDA.BindingProperties.HasHeaders];
    var binding;
    switch (bindingProperties[OSF.DDA.BindingProperties.Type]) {
        case Microsoft.Office.WebExtension.BindingType.Text:
            binding = new OSF.DDA.TextBinding(id, containingDocument);
            break;
        case Microsoft.Office.WebExtension.BindingType.Matrix:
            binding = new OSF.DDA.MatrixBinding(id, containingDocument, rows, cols);
            break;
        case Microsoft.Office.WebExtension.BindingType.Table:
            var isExcelApp = function () {
                return (OSF.DDA.ExcelDocument)
                    && (Microsoft.Office.WebExtension.context.document)
                    && (Microsoft.Office.WebExtension.context.document instanceof OSF.DDA.ExcelDocument);
            };
            var tableBindingObject;
            if (isExcelApp() && OSF.DDA.ExcelTableBinding) {
                tableBindingObject = OSF.DDA.ExcelTableBinding;
            }
            else {
                tableBindingObject = OSF.DDA.TableBinding;
            }
            binding = new tableBindingObject(id, containingDocument, rows, cols, hasHeaders);
            break;
        default:
            binding = new OSF.DDA.UnknownBinding(id, containingDocument);
    }
    return binding;
};
OSF.DDA.AsyncMethodNames.addNames({
    AddFromSelectionAsync: "addFromSelectionAsync",
    AddFromNamedItemAsync: "addFromNamedItemAsync",
    GetAllAsync: "getAllAsync",
    GetByIdAsync: "getByIdAsync",
    ReleaseByIdAsync: "releaseByIdAsync",
    GetDataAsync: "getDataAsync",
    SetDataAsync: "setDataAsync"
});
(function () {
    function processBinding(bindingDescriptor) {
        return OSF.DDA.OMFactory.manufactureBinding(bindingDescriptor, Microsoft.Office.WebExtension.context.document);
    }
    function getObjectId(obj) { return obj.id; }
    function processData(dataDescriptor, caller, callArgs) {
        var data = dataDescriptor[Microsoft.Office.WebExtension.Parameters.Data];
        if (OSF.DDA.TableDataProperties && data && (data[OSF.DDA.TableDataProperties.TableRows] != undefined || data[OSF.DDA.TableDataProperties.TableHeaders] != undefined)) {
            data = OSF.DDA.OMFactory.manufactureTableData(data);
        }
        data = OSF.DDA.DataCoercion.coerceData(data, callArgs[Microsoft.Office.WebExtension.Parameters.CoercionType]);
        return data == undefined ? null : data;
    }
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.AddFromSelectionAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.BindingType,
                "enum": Microsoft.Office.WebExtension.BindingType
            }
        ],
        supportedOptions: [{
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: {
                    "types": ["string"],
                    "calculate": OSF.DDA.generateBindingId
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.Columns,
                value: {
                    "types": ["object"],
                    "defaultValue": null
                }
            }
        ],
        privateStateCallbacks: [],
        onSucceeded: processBinding
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.AddFromNamedItemAsync,
        requiredArguments: [{
                "name": Microsoft.Office.WebExtension.Parameters.ItemName,
                "types": ["string"]
            },
            {
                "name": Microsoft.Office.WebExtension.Parameters.BindingType,
                "enum": Microsoft.Office.WebExtension.BindingType
            }
        ],
        supportedOptions: [{
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: {
                    "types": ["string"],
                    "calculate": OSF.DDA.generateBindingId
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.Columns,
                value: {
                    "types": ["object"],
                    "defaultValue": null
                }
            }
        ],
        privateStateCallbacks: [
            {
                name: Microsoft.Office.WebExtension.Parameters.FailOnCollision,
                value: function () { return true; }
            }
        ],
        onSucceeded: processBinding
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.GetAllAsync,
        requiredArguments: [],
        supportedOptions: [],
        privateStateCallbacks: [],
        onSucceeded: function (response) { return OSF.OUtil.mapList(response[OSF.DDA.ListDescriptors.BindingList], processBinding); }
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.GetByIdAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.Id,
                "types": ["string"]
            }
        ],
        supportedOptions: [],
        privateStateCallbacks: [],
        onSucceeded: processBinding
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.ReleaseByIdAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.Id,
                "types": ["string"]
            }
        ],
        supportedOptions: [],
        privateStateCallbacks: [],
        onSucceeded: function (response, caller, callArgs) {
            var id = callArgs[Microsoft.Office.WebExtension.Parameters.Id];
            delete caller._eventDispatches[id];
        }
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.GetDataAsync,
        requiredArguments: [],
        supportedOptions: [{
                name: Microsoft.Office.WebExtension.Parameters.CoercionType,
                value: {
                    "enum": Microsoft.Office.WebExtension.CoercionType,
                    "calculate": function (requiredArgs, binding) { return OSF.DDA.DataCoercion.getCoercionDefaultForBinding(binding.type); }
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.ValueFormat,
                value: {
                    "enum": Microsoft.Office.WebExtension.ValueFormat,
                    "defaultValue": Microsoft.Office.WebExtension.ValueFormat.Unformatted
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.FilterType,
                value: {
                    "enum": Microsoft.Office.WebExtension.FilterType,
                    "defaultValue": Microsoft.Office.WebExtension.FilterType.All
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.Rows,
                value: {
                    "types": ["object", "string"],
                    "defaultValue": null
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.Columns,
                value: {
                    "types": ["object"],
                    "defaultValue": null
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.StartRow,
                value: {
                    "types": ["number"],
                    "defaultValue": 0
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.StartColumn,
                value: {
                    "types": ["number"],
                    "defaultValue": 0
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.RowCount,
                value: {
                    "types": ["number"],
                    "defaultValue": 0
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.ColumnCount,
                value: {
                    "types": ["number"],
                    "defaultValue": 0
                }
            }
        ],
        checkCallArgs: function (callArgs, caller, stateInfo) {
            if (callArgs[Microsoft.Office.WebExtension.Parameters.StartRow] == 0 &&
                callArgs[Microsoft.Office.WebExtension.Parameters.StartColumn] == 0 &&
                callArgs[Microsoft.Office.WebExtension.Parameters.RowCount] == 0 &&
                callArgs[Microsoft.Office.WebExtension.Parameters.ColumnCount] == 0) {
                delete callArgs[Microsoft.Office.WebExtension.Parameters.StartRow];
                delete callArgs[Microsoft.Office.WebExtension.Parameters.StartColumn];
                delete callArgs[Microsoft.Office.WebExtension.Parameters.RowCount];
                delete callArgs[Microsoft.Office.WebExtension.Parameters.ColumnCount];
            }
            if (callArgs[Microsoft.Office.WebExtension.Parameters.CoercionType] != OSF.DDA.DataCoercion.getCoercionDefaultForBinding(caller.type) &&
                (callArgs[Microsoft.Office.WebExtension.Parameters.StartRow] ||
                    callArgs[Microsoft.Office.WebExtension.Parameters.StartColumn] ||
                    callArgs[Microsoft.Office.WebExtension.Parameters.RowCount] ||
                    callArgs[Microsoft.Office.WebExtension.Parameters.ColumnCount])) {
                throw OSF.DDA.ErrorCodeManager.errorCodes.ooeCoercionTypeNotMatchBinding;
            }
            return callArgs;
        },
        privateStateCallbacks: [
            {
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: getObjectId
            }
        ],
        onSucceeded: processData
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.SetDataAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.Data,
                "types": ["string", "object", "number", "boolean"]
            }
        ],
        supportedOptions: [{
                name: Microsoft.Office.WebExtension.Parameters.CoercionType,
                value: {
                    "enum": Microsoft.Office.WebExtension.CoercionType,
                    "calculate": function (requiredArgs) { return OSF.DDA.DataCoercion.determineCoercionType(requiredArgs[Microsoft.Office.WebExtension.Parameters.Data]); }
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.Rows,
                value: {
                    "types": ["object", "string"],
                    "defaultValue": null
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.Columns,
                value: {
                    "types": ["object"],
                    "defaultValue": null
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.StartRow,
                value: {
                    "types": ["number"],
                    "defaultValue": 0
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.StartColumn,
                value: {
                    "types": ["number"],
                    "defaultValue": 0
                }
            }
        ],
        checkCallArgs: function (callArgs, caller, stateInfo) {
            if (callArgs[Microsoft.Office.WebExtension.Parameters.StartRow] == 0 &&
                callArgs[Microsoft.Office.WebExtension.Parameters.StartColumn] == 0) {
                delete callArgs[Microsoft.Office.WebExtension.Parameters.StartRow];
                delete callArgs[Microsoft.Office.WebExtension.Parameters.StartColumn];
            }
            if (callArgs[Microsoft.Office.WebExtension.Parameters.CoercionType] != OSF.DDA.DataCoercion.getCoercionDefaultForBinding(caller.type) &&
                (callArgs[Microsoft.Office.WebExtension.Parameters.StartRow] ||
                    callArgs[Microsoft.Office.WebExtension.Parameters.StartColumn])) {
                throw OSF.DDA.ErrorCodeManager.errorCodes.ooeCoercionTypeNotMatchBinding;
            }
            return callArgs;
        },
        privateStateCallbacks: [
            {
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: getObjectId
            }
        ]
    });
})();
OSF.OUtil.augmentList(OSF.DDA.BindingProperties, {
    RowCount: "BindingRowCount",
    ColumnCount: "BindingColumnCount",
    HasHeaders: "HasHeaders"
});
OSF.DDA.MatrixBinding = function OSF_DDA_MatrixBinding(id, docInstance, rows, cols) {
    OSF.DDA.MatrixBinding.uber.constructor.call(this, id, docInstance);
    OSF.OUtil.defineEnumerableProperties(this, {
        "type": {
            value: Microsoft.Office.WebExtension.BindingType.Matrix
        },
        "rowCount": {
            value: rows ? rows : 0
        },
        "columnCount": {
            value: cols ? cols : 0
        }
    });
};
OSF.OUtil.extend(OSF.DDA.MatrixBinding, OSF.DDA.Binding);
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.PropertyDescriptors.BindingProperties,
    fromHost: [
        { name: OSF.DDA.BindingProperties.Id, value: 0 },
        { name: OSF.DDA.BindingProperties.Type, value: 1 },
        { name: OSF.DDA.SafeArray.UniqueArguments.BindingSpecificData, value: 2 }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: Microsoft.Office.WebExtension.Parameters.BindingType,
    toHost: [
        { name: Microsoft.Office.WebExtension.BindingType.Text, value: 0 },
        { name: Microsoft.Office.WebExtension.BindingType.Matrix, value: 1 },
        { name: Microsoft.Office.WebExtension.BindingType.Table, value: 2 }
    ],
    invertible: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidAddBindingFromSelectionMethod,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.BindingProperties, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ],
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.BindingType, value: 1 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidAddBindingFromNamedItemMethod,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.BindingProperties, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ],
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.ItemName, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 1 },
        { name: Microsoft.Office.WebExtension.Parameters.BindingType, value: 2 },
        { name: Microsoft.Office.WebExtension.Parameters.FailOnCollision, value: 3 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidReleaseBindingMethod,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidGetBindingMethod,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.BindingProperties, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ],
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidGetAllBindingsMethod,
    fromHost: [
        { name: OSF.DDA.ListDescriptors.BindingList, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidGetBindingDataMethod,
    fromHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ],
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.CoercionType, value: 1 },
        { name: Microsoft.Office.WebExtension.Parameters.ValueFormat, value: 2 },
        { name: Microsoft.Office.WebExtension.Parameters.FilterType, value: 3 },
        { name: OSF.DDA.PropertyDescriptors.Subset, value: 4 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidSetBindingDataMethod,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.CoercionType, value: 1 },
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: 2 },
        { name: OSF.DDA.SafeArray.UniqueArguments.Offset, value: 3 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.SafeArray.UniqueArguments.BindingSpecificData,
    fromHost: [
        { name: OSF.DDA.BindingProperties.RowCount, value: 0 },
        { name: OSF.DDA.BindingProperties.ColumnCount, value: 1 },
        { name: OSF.DDA.BindingProperties.HasHeaders, value: 2 }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.PropertyDescriptors.Subset,
    toHost: [
        { name: OSF.DDA.SafeArray.UniqueArguments.Offset, value: 0 },
        { name: OSF.DDA.SafeArray.UniqueArguments.Run, value: 1 }
    ],
    canonical: true,
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.SafeArray.UniqueArguments.Offset,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.StartRow, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.StartColumn, value: 1 }
    ],
    canonical: true,
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.SafeArray.UniqueArguments.Run,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.RowCount, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.ColumnCount, value: 1 }
    ],
    canonical: true,
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidAddRowsMethod,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: 1 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidAddColumnsMethod,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: 1 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidClearAllRowsMethod,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 }
    ]
});
OSF.OUtil.augmentList(OSF.DDA.PropertyDescriptors, { TableDataProperties: "TableDataProperties" });
OSF.OUtil.augmentList(OSF.DDA.BindingProperties, {
    RowCount: "BindingRowCount",
    ColumnCount: "BindingColumnCount",
    HasHeaders: "HasHeaders"
});
OSF.DDA.TableDataProperties = {
    TableRows: "TableRows",
    TableHeaders: "TableHeaders"
};
OSF.DDA.TableBinding = function OSF_DDA_TableBinding(id, docInstance, rows, cols, hasHeaders) {
    OSF.DDA.TableBinding.uber.constructor.call(this, id, docInstance);
    OSF.OUtil.defineEnumerableProperties(this, {
        "type": {
            value: Microsoft.Office.WebExtension.BindingType.Table
        },
        "rowCount": {
            value: rows ? rows : 0
        },
        "columnCount": {
            value: cols ? cols : 0
        },
        "hasHeaders": {
            value: hasHeaders ? hasHeaders : false
        }
    });
    var am = OSF.DDA.AsyncMethodNames;
    OSF.DDA.DispIdHost.addAsyncMethods(this, [
        am.AddRowsAsync,
        am.AddColumnsAsync,
        am.DeleteAllDataValuesAsync
    ]);
};
OSF.OUtil.extend(OSF.DDA.TableBinding, OSF.DDA.Binding);
OSF.DDA.AsyncMethodNames.addNames({
    AddRowsAsync: "addRowsAsync",
    AddColumnsAsync: "addColumnsAsync",
    DeleteAllDataValuesAsync: "deleteAllDataValuesAsync"
});
(function () {
    function getObjectId(obj) { return obj.id; }
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.AddRowsAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.Data,
                "types": ["object"]
            }
        ],
        supportedOptions: [],
        privateStateCallbacks: [
            {
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: getObjectId
            }
        ]
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.AddColumnsAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.Data,
                "types": ["object"]
            }
        ],
        supportedOptions: [],
        privateStateCallbacks: [
            {
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: getObjectId
            }
        ]
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.DeleteAllDataValuesAsync,
        requiredArguments: [],
        supportedOptions: [],
        privateStateCallbacks: [
            {
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: getObjectId
            }
        ]
    });
})();
OSF.DDA.TextBinding = function OSF_DDA_TextBinding(id, docInstance) {
    OSF.DDA.TextBinding.uber.constructor.call(this, id, docInstance);
    OSF.OUtil.defineEnumerableProperty(this, "type", {
        value: Microsoft.Office.WebExtension.BindingType.Text
    });
};
OSF.OUtil.extend(OSF.DDA.TextBinding, OSF.DDA.Binding);
OSF.DDA.AsyncMethodNames.addNames({ AddFromPromptAsync: "addFromPromptAsync" });
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.AddFromPromptAsync,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.BindingType,
            "enum": Microsoft.Office.WebExtension.BindingType
        }
    ],
    supportedOptions: [{
            name: Microsoft.Office.WebExtension.Parameters.Id,
            value: {
                "types": ["string"],
                "calculate": OSF.DDA.generateBindingId
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.PromptText,
            value: {
                "types": ["string"],
                "calculate": function () { return Strings.OfficeOM.L_AddBindingFromPromptDefaultText; }
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.SampleData,
            value: {
                "types": ["object"],
                "defaultValue": null
            }
        }
    ],
    privateStateCallbacks: [],
    onSucceeded: function (bindingDescriptor) { return OSF.DDA.OMFactory.manufactureBinding(bindingDescriptor, Microsoft.Office.WebExtension.context.document); }
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidAddBindingFromPromptMethod,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.BindingProperties, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ],
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.BindingType, value: 1 },
        { name: Microsoft.Office.WebExtension.Parameters.PromptText, value: 2 }
    ]
});
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, { DocumentSelectionChanged: "documentSelectionChanged" });
OSF.DDA.DocumentSelectionChangedEventArgs = function OSF_DDA_DocumentSelectionChangedEventArgs(docInstance) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "type": {
            value: Microsoft.Office.WebExtension.EventType.DocumentSelectionChanged
        },
        "document": {
            value: docInstance
        }
    });
};
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, { ObjectDeleted: "objectDeleted" });
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, { ObjectSelectionChanged: "objectSelectionChanged" });
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, { ObjectDataChanged: "objectDataChanged" });
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, { ContentControlAdded: "contentControlAdded" });
OSF.DDA.ObjectEventArgs = function OSF_DDA_ObjectEventArgs(eventType, object) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "type": { value: eventType },
        "object": { value: object }
    });
};
OSF.DDA.SafeArray.Delegate.ParameterMap.define({ type: OSF.DDA.EventDispId.dispidDocumentSelectionChangedEvent });
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDispId.dispidObjectDeletedEvent,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 }
    ],
    fromHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: OSF.DDA.SafeArray.Delegate.ParameterMap.sourceData }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDispId.dispidObjectSelectionChangedEvent,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 }
    ],
    fromHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: OSF.DDA.SafeArray.Delegate.ParameterMap.sourceData }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDispId.dispidObjectDataChangedEvent,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 }
    ],
    fromHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: OSF.DDA.SafeArray.Delegate.ParameterMap.sourceData }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDispId.dispidContentControlAddedEvent,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 }
    ],
    fromHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: OSF.DDA.SafeArray.Delegate.ParameterMap.sourceData }
    ]
});
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, {
    BindingSelectionChanged: "bindingSelectionChanged",
    BindingDataChanged: "bindingDataChanged"
});
OSF.OUtil.augmentList(OSF.DDA.EventDescriptors, { BindingSelectionChangedEvent: "BindingSelectionChangedEvent" });
OSF.DDA.BindingSelectionChangedEventArgs = function OSF_DDA_BindingSelectionChangedEventArgs(bindingInstance, subset) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "type": {
            value: Microsoft.Office.WebExtension.EventType.BindingSelectionChanged
        },
        "binding": {
            value: bindingInstance
        }
    });
    for (var prop in subset) {
        OSF.OUtil.defineEnumerableProperty(this, prop, {
            value: subset[prop]
        });
    }
};
OSF.DDA.BindingDataChangedEventArgs = function OSF_DDA_BindingDataChangedEventArgs(bindingInstance) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "type": {
            value: Microsoft.Office.WebExtension.EventType.BindingDataChanged
        },
        "binding": {
            value: bindingInstance
        }
    });
};
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDescriptors.BindingSelectionChangedEvent,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.BindingProperties, value: 0 },
        { name: OSF.DDA.PropertyDescriptors.Subset, value: 1 }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDispId.dispidBindingSelectionChangedEvent,
    fromHost: [
        { name: OSF.DDA.EventDescriptors.BindingSelectionChangedEvent, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDispId.dispidBindingDataChangedEvent,
    fromHost: [{ name: OSF.DDA.PropertyDescriptors.BindingProperties, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }]
});
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.FilterType, { OnlyVisible: "onlyVisible" });
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: Microsoft.Office.WebExtension.Parameters.FilterType,
    toHost: [{ name: Microsoft.Office.WebExtension.FilterType.OnlyVisible, value: 1 }]
});
Microsoft.Office.WebExtension.GoToType = {
    Binding: "binding",
    NamedItem: "namedItem",
    Slide: "slide",
    Index: "index"
};
Microsoft.Office.WebExtension.SelectionMode = {
    Default: "default",
    Selected: "selected",
    None: "none"
};
Microsoft.Office.WebExtension.Index = {
    First: "first",
    Last: "last",
    Next: "next",
    Previous: "previous"
};
OSF.DDA.AsyncMethodNames.addNames({ GoToByIdAsync: "goToByIdAsync" });
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.GoToByIdAsync,
    requiredArguments: [{
            "name": Microsoft.Office.WebExtension.Parameters.Id,
            "types": ["string", "number"]
        },
        {
            "name": Microsoft.Office.WebExtension.Parameters.GoToType,
            "enum": Microsoft.Office.WebExtension.GoToType
        }
    ],
    supportedOptions: [
        {
            name: Microsoft.Office.WebExtension.Parameters.SelectionMode,
            value: {
                "enum": Microsoft.Office.WebExtension.SelectionMode,
                "defaultValue": Microsoft.Office.WebExtension.SelectionMode.Default
            }
        }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: Microsoft.Office.WebExtension.Parameters.GoToType,
    toHost: [
        { name: Microsoft.Office.WebExtension.GoToType.Binding, value: 0 },
        { name: Microsoft.Office.WebExtension.GoToType.NamedItem, value: 1 },
        { name: Microsoft.Office.WebExtension.GoToType.Slide, value: 2 },
        { name: Microsoft.Office.WebExtension.GoToType.Index, value: 3 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: Microsoft.Office.WebExtension.Parameters.SelectionMode,
    toHost: [
        { name: Microsoft.Office.WebExtension.SelectionMode.Default, value: 0 },
        { name: Microsoft.Office.WebExtension.SelectionMode.Selected, value: 1 },
        { name: Microsoft.Office.WebExtension.SelectionMode.None, value: 2 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidNavigateToMethod,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.GoToType, value: 1 },
        { name: Microsoft.Office.WebExtension.Parameters.SelectionMode, value: 2 }
    ]
});
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, { RichApiMessage: "richApiMessage" });
OSF.DDA.RichApiMessageEventArgs = function OSF_DDA_RichApiMessageEventArgs(eventType, eventProperties) {
    var entryArray = eventProperties[Microsoft.Office.WebExtension.Parameters.Data];
    var entries = [];
    if (entryArray) {
        for (var i = 0; i < entryArray.length; i++) {
            var elem = entryArray[i];
            if (elem.toArray) {
                elem = elem.toArray();
            }
            entries.push({
                messageCategory: elem[0],
                messageType: elem[1],
                targetId: elem[2],
                message: elem[3],
                id: elem[4],
                isRemoteOverride: elem[5]
            });
        }
    }
    OSF.OUtil.defineEnumerableProperties(this, {
        "type": { value: Microsoft.Office.WebExtension.EventType.RichApiMessage },
        "entries": { value: entries }
    });
};
(function (OfficeExt) {
    var RichApiMessageManager = (function () {
        function RichApiMessageManager() {
            this._eventDispatch = null;
            this._registerHandlers = [];
            this._eventDispatch = new OSF.EventDispatch([
                Microsoft.Office.WebExtension.EventType.RichApiMessage,
            ]);
            OSF.DDA.DispIdHost.addEventSupport(this, this._eventDispatch);
        }
        RichApiMessageManager.prototype.register = function (handler) {
            var _this = this;
            if (!this._registerWithHostPromise) {
                this._registerWithHostPromise = new Office.Promise(function (resolve, reject) {
                    _this.addHandlerAsync(Microsoft.Office.WebExtension.EventType.RichApiMessage, function (args) {
                        _this._registerHandlers.forEach(function (value) {
                            if (value) {
                                value(args);
                            }
                        });
                    }, function (asyncResult) {
                        if (asyncResult.status == 'failed') {
                            reject(asyncResult.error);
                        }
                        else {
                            resolve();
                        }
                    });
                });
            }
            return this._registerWithHostPromise.then(function () {
                _this._registerHandlers.push(handler);
            });
        };
        return RichApiMessageManager;
    }());
    OfficeExt.RichApiMessageManager = RichApiMessageManager;
})(OfficeExt || (OfficeExt = {}));
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.EventDispId.dispidRichApiMessageEvent,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: 0 }
    ],
    fromHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: OSF.DDA.SafeArray.Delegate.ParameterMap.sourceData }
    ]
});
OSF.DDA.AsyncMethodNames.addNames({
    ExecuteRichApiRequestAsync: "executeRichApiRequestAsync"
});
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.ExecuteRichApiRequestAsync,
    requiredArguments: [
        {
            name: Microsoft.Office.WebExtension.Parameters.Data,
            types: ["object"]
        }
    ],
    supportedOptions: []
});
OSF.OUtil.setNamespace("RichApi", OSF.DDA);
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidExecuteRichApiRequestMethod,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: 0 }
    ],
    fromHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ]
});
Microsoft.Office.WebExtension.FileType = {
    Text: "text",
    Compressed: "compressed",
    Pdf: "pdf"
};
OSF.OUtil.augmentList(OSF.DDA.PropertyDescriptors, {
    FileProperties: "FileProperties",
    FileSliceProperties: "FileSliceProperties"
});
OSF.DDA.FileProperties = {
    Handle: "FileHandle",
    FileSize: "FileSize",
    SliceSize: Microsoft.Office.WebExtension.Parameters.SliceSize
};
OSF.DDA.File = function OSF_DDA_File(handle, fileSize, sliceSize) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "size": {
            value: fileSize
        },
        "sliceCount": {
            value: Math.ceil(fileSize / sliceSize)
        }
    });
    var privateState = {};
    privateState[OSF.DDA.FileProperties.Handle] = handle;
    privateState[OSF.DDA.FileProperties.SliceSize] = sliceSize;
    var am = OSF.DDA.AsyncMethodNames;
    OSF.DDA.DispIdHost.addAsyncMethods(this, [
        am.GetDocumentCopyChunkAsync,
        am.ReleaseDocumentCopyAsync
    ], privateState);
};
OSF.DDA.FileSliceOffset = "fileSliceoffset";
OSF.DDA.AsyncMethodNames.addNames({
    GetDocumentCopyAsync: "getFileAsync",
    GetDocumentCopyChunkAsync: "getSliceAsync",
    ReleaseDocumentCopyAsync: "closeAsync"
});
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.GetDocumentCopyAsync,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.FileType,
            "enum": Microsoft.Office.WebExtension.FileType
        }
    ],
    supportedOptions: [
        {
            name: Microsoft.Office.WebExtension.Parameters.SliceSize,
            value: {
                "types": ["number"],
                "defaultValue": 4 * 1024 * 1024
            }
        }
    ],
    checkCallArgs: function (callArgs, caller, stateInfo) {
        var sliceSize = callArgs[Microsoft.Office.WebExtension.Parameters.SliceSize];
        if (sliceSize <= 0 || sliceSize > (4 * 1024 * 1024)) {
            throw OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidSliceSize;
        }
        return callArgs;
    },
    onSucceeded: function (fileDescriptor, caller, callArgs) {
        return new OSF.DDA.File(fileDescriptor[OSF.DDA.FileProperties.Handle], fileDescriptor[OSF.DDA.FileProperties.FileSize], callArgs[Microsoft.Office.WebExtension.Parameters.SliceSize]);
    }
});
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.GetDocumentCopyChunkAsync,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.SliceIndex,
            "types": ["number"]
        }
    ],
    privateStateCallbacks: [
        {
            name: OSF.DDA.FileProperties.Handle,
            value: function (caller, stateInfo) { return stateInfo[OSF.DDA.FileProperties.Handle]; }
        },
        {
            name: OSF.DDA.FileProperties.SliceSize,
            value: function (caller, stateInfo) { return stateInfo[OSF.DDA.FileProperties.SliceSize]; }
        }
    ],
    checkCallArgs: function (callArgs, caller, stateInfo) {
        var index = callArgs[Microsoft.Office.WebExtension.Parameters.SliceIndex];
        if (index < 0 || index >= caller.sliceCount) {
            throw OSF.DDA.ErrorCodeManager.errorCodes.ooeIndexOutOfRange;
        }
        callArgs[OSF.DDA.FileSliceOffset] = parseInt((index * stateInfo[OSF.DDA.FileProperties.SliceSize]).toString());
        return callArgs;
    },
    onSucceeded: function (sliceDescriptor, caller, callArgs) {
        var slice = {};
        OSF.OUtil.defineEnumerableProperties(slice, {
            "data": {
                value: OSF.OUtil.shallowCopy(sliceDescriptor[Microsoft.Office.WebExtension.Parameters.Data])
            },
            "index": {
                value: callArgs[Microsoft.Office.WebExtension.Parameters.SliceIndex]
            },
            "size": {
                value: sliceDescriptor[OSF.DDA.FileProperties.SliceSize]
            }
        });
        return slice;
    }
});
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.ReleaseDocumentCopyAsync,
    privateStateCallbacks: [
        {
            name: OSF.DDA.FileProperties.Handle,
            value: function (caller, stateInfo) { return stateInfo[OSF.DDA.FileProperties.Handle]; }
        }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.PropertyDescriptors.FileProperties,
    fromHost: [
        { name: OSF.DDA.FileProperties.Handle, value: 0 },
        { name: OSF.DDA.FileProperties.FileSize, value: 1 }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.PropertyDescriptors.FileSliceProperties,
    fromHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: 0 },
        { name: OSF.DDA.FileProperties.SliceSize, value: 1 }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: Microsoft.Office.WebExtension.Parameters.FileType,
    toHost: [
        { name: Microsoft.Office.WebExtension.FileType.Text, value: 0 },
        { name: Microsoft.Office.WebExtension.FileType.Compressed, value: 5 },
        { name: Microsoft.Office.WebExtension.FileType.Pdf, value: 6 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidGetDocumentCopyMethod,
    toHost: [{ name: Microsoft.Office.WebExtension.Parameters.FileType, value: 0 }],
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.FileProperties, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidGetDocumentCopyChunkMethod,
    toHost: [
        { name: OSF.DDA.FileProperties.Handle, value: 0 },
        { name: OSF.DDA.FileSliceOffset, value: 1 },
        { name: OSF.DDA.FileProperties.SliceSize, value: 2 }
    ],
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.FileSliceProperties, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidReleaseDocumentCopyMethod,
    toHost: [{ name: OSF.DDA.FileProperties.Handle, value: 0 }]
});
OSF.DDA.FilePropertiesDescriptor = {
    Url: "Url"
};
OSF.OUtil.augmentList(OSF.DDA.PropertyDescriptors, {
    FilePropertiesDescriptor: "FilePropertiesDescriptor"
});
Microsoft.Office.WebExtension.FileProperties = function Microsoft_Office_WebExtension_FileProperties(filePropertiesDescriptor) {
    OSF.OUtil.defineEnumerableProperties(this, {
        "url": {
            value: filePropertiesDescriptor[OSF.DDA.FilePropertiesDescriptor.Url]
        }
    });
};
OSF.DDA.AsyncMethodNames.addNames({ GetFilePropertiesAsync: "getFilePropertiesAsync" });
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.GetFilePropertiesAsync,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.FilePropertiesDescriptor, value: 0 }
    ],
    requiredArguments: [],
    supportedOptions: [],
    onSucceeded: function (filePropertiesDescriptor, caller, callArgs) {
        return new Microsoft.Office.WebExtension.FileProperties(filePropertiesDescriptor);
    }
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.PropertyDescriptors.FilePropertiesDescriptor,
    fromHost: [
        { name: OSF.DDA.FilePropertiesDescriptor.Url, value: 0 }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidGetFilePropertiesMethod,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.FilePropertiesDescriptor, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ]
});
OSF.DDA.ExcelTableBinding = function OSF_DDA_ExcelTableBinding(id, docInstance, rows, cols, hasHeaders) {
    var am = OSF.DDA.AsyncMethodNames;
    OSF.DDA.DispIdHost.addAsyncMethods(this, [
        am.ClearFormatsAsync,
        am.SetTableOptionsAsync,
        am.SetFormatsAsync
    ]);
    OSF.DDA.ExcelTableBinding.uber.constructor.call(this, id, docInstance, rows, cols, hasHeaders);
    OSF.OUtil.finalizeProperties(this);
};
OSF.OUtil.extend(OSF.DDA.ExcelTableBinding, OSF.DDA.TableBinding);
(function () {
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.SetSelectedDataAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.Data,
                "types": ["string", "object", "number", "boolean"]
            }
        ],
        supportedOptions: [{
                name: Microsoft.Office.WebExtension.Parameters.CoercionType,
                value: {
                    "enum": Microsoft.Office.WebExtension.CoercionType,
                    "calculate": function (requiredArgs) { return OSF.DDA.DataCoercion.determineCoercionType(requiredArgs[Microsoft.Office.WebExtension.Parameters.Data]); }
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.CellFormat,
                value: {
                    "types": ["object"],
                    "defaultValue": []
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.TableOptions,
                value: {
                    "types": ["object"],
                    "defaultValue": []
                }
            }
        ],
        privateStateCallbacks: []
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.SetDataAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.Data,
                "types": ["string", "object", "number", "boolean"]
            }
        ],
        supportedOptions: [{
                name: Microsoft.Office.WebExtension.Parameters.CoercionType,
                value: {
                    "enum": Microsoft.Office.WebExtension.CoercionType,
                    "calculate": function (requiredArgs) { return OSF.DDA.DataCoercion.determineCoercionType(requiredArgs[Microsoft.Office.WebExtension.Parameters.Data]); }
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.Rows,
                value: {
                    "types": ["object", "string"],
                    "defaultValue": null
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.Columns,
                value: {
                    "types": ["object"],
                    "defaultValue": null
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.StartRow,
                value: {
                    "types": ["number"],
                    "defaultValue": 0
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.StartColumn,
                value: {
                    "types": ["number"],
                    "defaultValue": 0
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.CellFormat,
                value: {
                    "types": ["object"],
                    "defaultValue": []
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.TableOptions,
                value: {
                    "types": ["object"],
                    "defaultValue": []
                }
            }
        ],
        checkCallArgs: function (callArgs, caller, stateInfo) {
            var Parameters = Microsoft.Office.WebExtension.Parameters;
            if (callArgs[Parameters.StartRow] == 0 &&
                callArgs[Parameters.StartColumn] == 0 &&
                OSF.OUtil.isArray(callArgs[Parameters.CellFormat]) && callArgs[Parameters.CellFormat].length === 0 &&
                OSF.OUtil.isArray(callArgs[Parameters.TableOptions]) && callArgs[Parameters.TableOptions].length === 0) {
                delete callArgs[Parameters.StartRow];
                delete callArgs[Parameters.StartColumn];
                delete callArgs[Parameters.CellFormat];
                delete callArgs[Parameters.TableOptions];
            }
            if (callArgs[Parameters.CoercionType] != OSF.DDA.DataCoercion.getCoercionDefaultForBinding(caller.type) &&
                ((callArgs[Parameters.StartRow] && callArgs[Parameters.StartRow] != 0) ||
                    (callArgs[Parameters.StartColumn] && callArgs[Parameters.StartColumn] != 0) ||
                    callArgs[Parameters.CellFormat] ||
                    callArgs[Parameters.TableOptions])) {
                throw OSF.DDA.ErrorCodeManager.errorCodes.ooeCoercionTypeNotMatchBinding;
            }
            return callArgs;
        },
        privateStateCallbacks: [
            {
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: function (obj) { return obj.id; }
            }
        ]
    });
    OSF.DDA.BindingPromise.prototype.setTableOptionsAsync = function OSF_DDA_BindingPromise$setTableOptionsAsync() {
        var args = arguments;
        this._fetch(function onComplete(binding) { binding.setTableOptionsAsync.apply(binding, args); });
        return this;
    },
        OSF.DDA.BindingPromise.prototype.setFormatsAsync = function OSF_DDA_BindingPromise$setFormatsAsync() {
            var args = arguments;
            this._fetch(function onComplete(binding) { binding.setFormatsAsync.apply(binding, args); });
            return this;
        },
        OSF.DDA.BindingPromise.prototype.clearFormatsAsync = function OSF_DDA_BindingPromise$clearFormatsAsync() {
            var args = arguments;
            this._fetch(function onComplete(binding) { binding.clearFormatsAsync.apply(binding, args); });
            return this;
        };
})();
(function () {
    function getObjectId(obj) { return obj.id; }
    OSF.DDA.AsyncMethodNames.addNames({
        ClearFormatsAsync: "clearFormatsAsync",
        SetTableOptionsAsync: "setTableOptionsAsync",
        SetFormatsAsync: "setFormatsAsync"
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.ClearFormatsAsync,
        requiredArguments: [],
        supportedOptions: [],
        privateStateCallbacks: [
            {
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: getObjectId
            }
        ]
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.SetTableOptionsAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.TableOptions,
                "defaultValue": []
            }
        ],
        privateStateCallbacks: [
            {
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: getObjectId
            }
        ]
    });
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.SetFormatsAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.CellFormat,
                "defaultValue": []
            }
        ],
        privateStateCallbacks: [
            {
                name: Microsoft.Office.WebExtension.Parameters.Id,
                value: getObjectId
            }
        ]
    });
})();
Microsoft.Office.WebExtension.Table = {
    All: 0,
    Data: 1,
    Headers: 2
};
(function () {
    OSF.DDA.SafeArray.Delegate.ParameterMap.define({
        type: OSF.DDA.MethodDispId.dispidClearFormatsMethod,
        toHost: [
            { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 }
        ]
    });
    OSF.DDA.SafeArray.Delegate.ParameterMap.define({
        type: OSF.DDA.MethodDispId.dispidSetTableOptionsMethod,
        toHost: [
            { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
            { name: Microsoft.Office.WebExtension.Parameters.TableOptions, value: 1 },
        ]
    });
    OSF.DDA.SafeArray.Delegate.ParameterMap.define({
        type: OSF.DDA.MethodDispId.dispidSetFormatsMethod,
        toHost: [
            { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
            { name: Microsoft.Office.WebExtension.Parameters.CellFormat, value: 1 },
        ]
    });
    OSF.DDA.SafeArray.Delegate.ParameterMap.define({
        type: OSF.DDA.MethodDispId.dispidSetSelectedDataMethod,
        toHost: [
            { name: Microsoft.Office.WebExtension.Parameters.CoercionType, value: 0 },
            { name: Microsoft.Office.WebExtension.Parameters.Data, value: 1 },
            { name: Microsoft.Office.WebExtension.Parameters.CellFormat, value: 2 },
            { name: Microsoft.Office.WebExtension.Parameters.TableOptions, value: 3 }
        ]
    });
    OSF.DDA.SafeArray.Delegate.ParameterMap.define({
        type: OSF.DDA.MethodDispId.dispidSetBindingDataMethod,
        toHost: [
            { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
            { name: Microsoft.Office.WebExtension.Parameters.CoercionType, value: 1 },
            { name: Microsoft.Office.WebExtension.Parameters.Data, value: 2 },
            { name: OSF.DDA.SafeArray.UniqueArguments.Offset, value: 3 },
            { name: Microsoft.Office.WebExtension.Parameters.CellFormat, value: 4 },
            { name: Microsoft.Office.WebExtension.Parameters.TableOptions, value: 5 }
        ]
    });
    var tableOptionProperties = {
        headerRow: 0,
        bandedRows: 1,
        firstColumn: 2,
        lastColumn: 3,
        bandedColumns: 4,
        filterButton: 5,
        style: 6,
        totalRow: 7
    };
    var cellProperties = {
        row: 0,
        column: 1
    };
    var formatProperties = {
        alignHorizontal: { text: "alignHorizontal", type: 1 },
        alignVertical: { text: "alignVertical", type: 2 },
        backgroundColor: { text: "backgroundColor", type: 101 },
        borderStyle: { text: "borderStyle", type: 201 },
        borderColor: { text: "borderColor", type: 202 },
        borderTopStyle: { text: "borderTopStyle", type: 203 },
        borderTopColor: { text: "borderTopColor", type: 204 },
        borderBottomStyle: { text: "borderBottomStyle", type: 205 },
        borderBottomColor: { text: "borderBottomColor", type: 206 },
        borderLeftStyle: { text: "borderLeftStyle", type: 207 },
        borderLeftColor: { text: "borderLeftColor", type: 208 },
        borderRightStyle: { text: "borderRightStyle", type: 209 },
        borderRightColor: { text: "borderRightColor", type: 210 },
        borderOutlineStyle: { text: "borderOutlineStyle", type: 211 },
        borderOutlineColor: { text: "borderOutlineColor", type: 212 },
        borderInlineStyle: { text: "borderInlineStyle", type: 213 },
        borderInlineColor: { text: "borderInlineColor", type: 214 },
        fontFamily: { text: "fontFamily", type: 301 },
        fontStyle: { text: "fontStyle", type: 302 },
        fontSize: { text: "fontSize", type: 303 },
        fontUnderlineStyle: { text: "fontUnderlineStyle", type: 304 },
        fontColor: { text: "fontColor", type: 305 },
        fontDirection: { text: "fontDirection", type: 306 },
        fontStrikethrough: { text: "fontStrikethrough", type: 307 },
        fontSuperscript: { text: "fontSuperscript", type: 308 },
        fontSubscript: { text: "fontSubscript", type: 309 },
        fontNormal: { text: "fontNormal", type: 310 },
        indentLeft: { text: "indentLeft", type: 401 },
        indentRight: { text: "indentRight", type: 402 },
        numberFormat: { text: "numberFormat", type: 501 },
        width: { text: "width", type: 701 },
        height: { text: "height", type: 702 },
        wrapping: { text: "wrapping", type: 703 }
    };
    var borderStyleSet = [
        { name: "none", value: 0 },
        { name: "thin", value: 1 },
        { name: "medium", value: 2 },
        { name: "dashed", value: 3 },
        { name: "dotted", value: 4 },
        { name: "thick", value: 5 },
        { name: "double", value: 6 },
        { name: "hair", value: 7 },
        { name: "medium dashed", value: 8 },
        { name: "dash dot", value: 9 },
        { name: "medium dash dot", value: 10 },
        { name: "dash dot dot", value: 11 },
        { name: "medium dash dot dot", value: 12 },
        { name: "slant dash dot", value: 13 },
    ];
    var colorSet = [
        { name: "none", value: 0 },
        { name: "black", value: 1 },
        { name: "blue", value: 2 },
        { name: "gray", value: 3 },
        { name: "green", value: 4 },
        { name: "orange", value: 5 },
        { name: "pink", value: 6 },
        { name: "purple", value: 7 },
        { name: "red", value: 8 },
        { name: "teal", value: 9 },
        { name: "turquoise", value: 10 },
        { name: "violet", value: 11 },
        { name: "white", value: 12 },
        { name: "yellow", value: 13 },
        { name: "automatic", value: 14 },
    ];
    var ns = OSF.DDA.SafeArray.Delegate.ParameterMap;
    ns.define({
        type: formatProperties.alignHorizontal.text,
        toHost: [
            { name: "general", value: 0 },
            { name: "left", value: 1 },
            { name: "center", value: 2 },
            { name: "right", value: 3 },
            { name: "fill", value: 4 },
            { name: "justify", value: 5 },
            { name: "center across selection", value: 6 },
            { name: "distributed", value: 7 },
        ]
    });
    ns.define({
        type: formatProperties.alignVertical.text,
        toHost: [
            { name: "top", value: 0 },
            { name: "center", value: 1 },
            { name: "bottom", value: 2 },
            { name: "justify", value: 3 },
            { name: "distributed", value: 4 },
        ]
    });
    ns.define({
        type: formatProperties.backgroundColor.text,
        toHost: colorSet
    });
    ns.define({
        type: formatProperties.borderStyle.text,
        toHost: borderStyleSet
    });
    ns.define({
        type: formatProperties.borderColor.text,
        toHost: colorSet
    });
    ns.define({
        type: formatProperties.borderTopStyle.text,
        toHost: borderStyleSet
    });
    ns.define({
        type: formatProperties.borderTopColor.text,
        toHost: colorSet
    });
    ns.define({
        type: formatProperties.borderBottomStyle.text,
        toHost: borderStyleSet
    });
    ns.define({
        type: formatProperties.borderBottomColor.text,
        toHost: colorSet
    });
    ns.define({
        type: formatProperties.borderLeftStyle.text,
        toHost: borderStyleSet
    });
    ns.define({
        type: formatProperties.borderLeftColor.text,
        toHost: colorSet
    });
    ns.define({
        type: formatProperties.borderRightStyle.text,
        toHost: borderStyleSet
    });
    ns.define({
        type: formatProperties.borderRightColor.text,
        toHost: colorSet
    });
    ns.define({
        type: formatProperties.borderOutlineStyle.text,
        toHost: borderStyleSet
    });
    ns.define({
        type: formatProperties.borderOutlineColor.text,
        toHost: colorSet
    });
    ns.define({
        type: formatProperties.borderInlineStyle.text,
        toHost: borderStyleSet
    });
    ns.define({
        type: formatProperties.borderInlineColor.text,
        toHost: colorSet
    });
    ns.define({
        type: formatProperties.fontStyle.text,
        toHost: [
            { name: "regular", value: 0 },
            { name: "italic", value: 1 },
            { name: "bold", value: 2 },
            { name: "bold italic", value: 3 },
        ]
    });
    ns.define({
        type: formatProperties.fontUnderlineStyle.text,
        toHost: [
            { name: "none", value: 0 },
            { name: "single", value: 1 },
            { name: "double", value: 2 },
            { name: "single accounting", value: 3 },
            { name: "double accounting", value: 4 },
        ]
    });
    ns.define({
        type: formatProperties.fontColor.text,
        toHost: colorSet
    });
    ns.define({
        type: formatProperties.fontDirection.text,
        toHost: [
            { name: "context", value: 0 },
            { name: "left-to-right", value: 1 },
            { name: "right-to-left", value: 2 },
        ]
    });
    ns.define({
        type: formatProperties.width.text,
        toHost: [
            { name: "auto fit", value: -1 },
        ]
    });
    ns.define({
        type: formatProperties.height.text,
        toHost: [
            { name: "auto fit", value: -1 },
        ]
    });
    ns.define({
        type: Microsoft.Office.WebExtension.Parameters.TableOptions,
        toHost: [
            { name: "headerRow", value: 0 },
            { name: "bandedRows", value: 1 },
            { name: "firstColumn", value: 2 },
            { name: "lastColumn", value: 3 },
            { name: "bandedColumns", value: 4 },
            { name: "filterButton", value: 5 },
            { name: "style", value: 6 },
            { name: "totalRow", value: 7 }
        ]
    });
    ns.dynamicTypes[Microsoft.Office.WebExtension.Parameters.CellFormat] = {
        toHost: function (data) {
            for (var entry in data) {
                if (data[entry].format) {
                    data[entry].format = ns.doMapValues(data[entry].format, "toHost");
                }
            }
            return data;
        },
        fromHost: function (args) {
            return args;
        }
    };
    ns.setDynamicType(Microsoft.Office.WebExtension.Parameters.CellFormat, {
        toHost: function OSF_DDA_SafeArray_Delegate_SpecialProcessor_CellFormat$toHost(cellFormats) {
            var textCells = "cells";
            var textFormat = "format";
            var posCells = 0;
            var posFormat = 1;
            var ret = [];
            for (var index in cellFormats) {
                var cfOld = cellFormats[index];
                var cfNew = [];
                if (typeof (cfOld[textCells]) !== 'undefined') {
                    var cellsOld = cfOld[textCells];
                    var cellsNew;
                    if (typeof cfOld[textCells] === "object") {
                        cellsNew = [];
                        for (var entry in cellsOld) {
                            if (typeof (cellProperties[entry]) !== 'undefined') {
                                cellsNew[cellProperties[entry]] = cellsOld[entry];
                            }
                        }
                    }
                    else {
                        cellsNew = cellsOld;
                    }
                    cfNew[posCells] = cellsNew;
                }
                if (cfOld[textFormat]) {
                    var formatOld = cfOld[textFormat];
                    var formatNew = [];
                    for (var entry2 in formatOld) {
                        if (typeof (formatProperties[entry2]) !== 'undefined') {
                            formatNew.push([
                                formatProperties[entry2].type,
                                formatOld[entry2]
                            ]);
                        }
                    }
                    cfNew[posFormat] = formatNew;
                }
                ret[index] = cfNew;
            }
            return ret;
        },
        fromHost: function OSF_DDA_SafeArray_Delegate_SpecialProcessor_CellFormat$fromHost(hostArgs) {
            return hostArgs;
        }
    });
    ns.setDynamicType(Microsoft.Office.WebExtension.Parameters.TableOptions, {
        toHost: function OSF_DDA_SafeArray_Delegate_SpecialProcessor_TableOptions$toHost(tableOptions) {
            var ret = [];
            for (var entry in tableOptions) {
                if (typeof (tableOptionProperties[entry]) !== 'undefined') {
                    ret[tableOptionProperties[entry]] = tableOptions[entry];
                }
            }
            return ret;
        },
        fromHost: function OSF_DDA_SafeArray_Delegate_SpecialProcessor_TableOptions$fromHost(hostArgs) {
            return hostArgs;
        }
    });
})();
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.CoercionType, { Image: "image" });
OSF.OUtil.augmentList(Microsoft.Office.WebExtension.CoercionType, { XmlSvg: "xmlSvg" });
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: Microsoft.Office.WebExtension.Parameters.CoercionType,
    toHost: [
        { name: Microsoft.Office.WebExtension.CoercionType.Image, value: 8 },
        { name: Microsoft.Office.WebExtension.CoercionType.XmlSvg, value: 9 }
    ]
});
(function (OfficeExt) {
    var AppCommand;
    (function (AppCommand) {
        var AppCommandManager = (function () {
            function AppCommandManager() {
                var _this = this;
                this._pseudoDocument = null;
                this._eventDispatch = null;
                this._processAppCommandInvocation = function (args) {
                    var verifyResult = _this._verifyManifestCallback(args.callbackName);
                    if (verifyResult.errorCode != OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess) {
                        _this._invokeAppCommandCompletedMethod(args.appCommandId, verifyResult.errorCode, "");
                        return;
                    }
                    var eventObj = _this._constructEventObjectForCallback(args);
                    if (eventObj) {
                        window.setTimeout(function () { verifyResult.callback(eventObj); }, 0);
                    }
                    else {
                        _this._invokeAppCommandCompletedMethod(args.appCommandId, OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError, "");
                    }
                };
            }
            AppCommandManager.initializeOsfDda = function () {
                OSF.DDA.AsyncMethodNames.addNames({
                    AppCommandInvocationCompletedAsync: "appCommandInvocationCompletedAsync"
                });
                OSF.DDA.AsyncMethodCalls.define({
                    method: OSF.DDA.AsyncMethodNames.AppCommandInvocationCompletedAsync,
                    requiredArguments: [{
                            "name": Microsoft.Office.WebExtension.Parameters.Id,
                            "types": ["string"]
                        },
                        {
                            "name": Microsoft.Office.WebExtension.Parameters.Status,
                            "types": ["number"]
                        },
                        {
                            "name": Microsoft.Office.WebExtension.Parameters.AppCommandInvocationCompletedData,
                            "types": ["string"]
                        }
                    ]
                });
                OSF.OUtil.augmentList(OSF.DDA.EventDescriptors, {
                    AppCommandInvokedEvent: "AppCommandInvokedEvent"
                });
                OSF.OUtil.augmentList(Microsoft.Office.WebExtension.EventType, {
                    AppCommandInvoked: "appCommandInvoked"
                });
                OSF.OUtil.setNamespace("AppCommand", OSF.DDA);
                OSF.DDA.AppCommand.AppCommandInvokedEventArgs = OfficeExt.AppCommand.AppCommandInvokedEventArgs;
            };
            AppCommandManager.prototype.initializeAndChangeOnce = function (callback) {
                AppCommand.registerDdaFacade();
                this._pseudoDocument = {};
                OSF.DDA.DispIdHost.addAsyncMethods(this._pseudoDocument, [
                    OSF.DDA.AsyncMethodNames.AppCommandInvocationCompletedAsync,
                ]);
                this._eventDispatch = new OSF.EventDispatch([
                    Microsoft.Office.WebExtension.EventType.AppCommandInvoked,
                ]);
                var onRegisterCompleted = function (result) {
                    if (callback) {
                        if (result.status == "succeeded") {
                            callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess);
                        }
                        else {
                            callback(OSF.DDA.ErrorCodeManager.errorCodes.ooeInternalError);
                        }
                    }
                };
                OSF.DDA.DispIdHost.addEventSupport(this._pseudoDocument, this._eventDispatch);
                this._pseudoDocument.addHandlerAsync(Microsoft.Office.WebExtension.EventType.AppCommandInvoked, this._processAppCommandInvocation, onRegisterCompleted);
            };
            AppCommandManager.prototype._verifyManifestCallback = function (callbackName) {
                var defaultResult = { callback: null, errorCode: OSF.DDA.ErrorCodeManager.errorCodes.ooeInvalidCallback };
                callbackName = callbackName.trim();
                try {
                    var callbackFunc = this._getCallbackFunc(callbackName);
                    if (typeof callbackFunc != "function") {
                        return defaultResult;
                    }
                }
                catch (e) {
                    return defaultResult;
                }
                return { callback: callbackFunc, errorCode: OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess };
            };
            AppCommandManager.prototype._getCallbackFuncFromWindow = function (callbackName) {
                var callList = callbackName.split(".");
                var parentObject = window;
                for (var i = 0; i < callList.length - 1; i++) {
                    if (parentObject[callList[i]] && (typeof parentObject[callList[i]] == "object" || typeof parentObject[callList[i]] == "function")) {
                        parentObject = parentObject[callList[i]];
                    }
                    else {
                        return null;
                    }
                }
                var callbackFunc = parentObject[callList[callList.length - 1]];
                return callbackFunc;
            };
            AppCommandManager.prototype._getCallbackFuncFromActionAssociateTable = function (callbackName) {
                var nameUpperCase = callbackName.toUpperCase();
                return Office.actions._association.mappings[nameUpperCase];
            };
            AppCommandManager.prototype._getCallbackFunc = function (callbackName) {
                var callbackFunc = this._getCallbackFuncFromWindow(callbackName);
                if (!callbackFunc) {
                    callbackFunc = this._getCallbackFuncFromActionAssociateTable(callbackName);
                }
                return callbackFunc;
            };
            AppCommandManager.prototype._invokeAppCommandCompletedMethod = function (appCommandId, resultCode, data) {
                this._pseudoDocument.appCommandInvocationCompletedAsync(appCommandId, resultCode, data);
            };
            AppCommandManager.prototype._constructEventObjectForCallback = function (args) {
                var _this = this;
                var eventObj = new AppCommandCallbackEventArgs();
                try {
                    var jsonData = JSON.parse(args.eventObjStr);
                    this._translateEventObjectInternal(jsonData, eventObj);
                    Object.defineProperty(eventObj, 'completed', {
                        value: function (completedContext) {
                            eventObj.completedContext = completedContext;
                            var jsonString = JSON.stringify(eventObj);
                            _this._invokeAppCommandCompletedMethod(args.appCommandId, OSF.DDA.ErrorCodeManager.errorCodes.ooeSuccess, jsonString);
                        },
                        enumerable: true
                    });
                }
                catch (e) {
                    eventObj = null;
                }
                return eventObj;
            };
            AppCommandManager.prototype._translateEventObjectInternal = function (input, output) {
                for (var key in input) {
                    if (!input.hasOwnProperty(key))
                        continue;
                    var inputChild = input[key];
                    if (typeof inputChild == "object" && inputChild != null) {
                        OSF.OUtil.defineEnumerableProperty(output, key, {
                            value: {}
                        });
                        this._translateEventObjectInternal(inputChild, output[key]);
                    }
                    else {
                        Object.defineProperty(output, key, {
                            value: inputChild,
                            enumerable: true,
                            writable: true
                        });
                    }
                }
            };
            AppCommandManager.prototype._constructObjectByTemplate = function (template, input) {
                var output = {};
                if (!template || !input)
                    return output;
                for (var key in template) {
                    if (template.hasOwnProperty(key)) {
                        output[key] = null;
                        if (input[key] != null) {
                            var templateChild = template[key];
                            var inputChild = input[key];
                            var inputChildType = typeof inputChild;
                            if (typeof templateChild == "object" && templateChild != null) {
                                output[key] = this._constructObjectByTemplate(templateChild, inputChild);
                            }
                            else if (inputChildType == "number" || inputChildType == "string" || inputChildType == "boolean") {
                                output[key] = inputChild;
                            }
                        }
                    }
                }
                return output;
            };
            AppCommandManager.instance = function () {
                if (AppCommandManager._instance == null) {
                    AppCommandManager._instance = new AppCommandManager();
                }
                return AppCommandManager._instance;
            };
            AppCommandManager._instance = null;
            return AppCommandManager;
        }());
        AppCommand.AppCommandManager = AppCommandManager;
        var AppCommandInvokedEventArgs = (function () {
            function AppCommandInvokedEventArgs(appCommandId, callbackName, eventObjStr) {
                this.type = Microsoft.Office.WebExtension.EventType.AppCommandInvoked;
                this.appCommandId = appCommandId;
                this.callbackName = callbackName;
                this.eventObjStr = eventObjStr;
            }
            AppCommandInvokedEventArgs.create = function (eventProperties) {
                return new AppCommandInvokedEventArgs(eventProperties[AppCommand.AppCommandInvokedEventEnums.AppCommandId], eventProperties[AppCommand.AppCommandInvokedEventEnums.CallbackName], eventProperties[AppCommand.AppCommandInvokedEventEnums.EventObjStr]);
            };
            return AppCommandInvokedEventArgs;
        }());
        AppCommand.AppCommandInvokedEventArgs = AppCommandInvokedEventArgs;
        var AppCommandCallbackEventArgs = (function () {
            function AppCommandCallbackEventArgs() {
            }
            return AppCommandCallbackEventArgs;
        }());
        AppCommand.AppCommandCallbackEventArgs = AppCommandCallbackEventArgs;
        AppCommand.AppCommandInvokedEventEnums = {
            AppCommandId: "appCommandId",
            CallbackName: "callbackName",
            EventObjStr: "eventObjStr"
        };
    })(AppCommand = OfficeExt.AppCommand || (OfficeExt.AppCommand = {}));
})(OfficeExt || (OfficeExt = {}));
OfficeExt.AppCommand.AppCommandManager.initializeOsfDda();
(function (OfficeExt) {
    var AppCommand;
    (function (AppCommand) {
        function registerDdaFacade() {
            if (OSF.DDA.SafeArray) {
                var parameterMap = OSF.DDA.SafeArray.Delegate.ParameterMap;
                parameterMap.define({
                    type: OSF.DDA.MethodDispId.dispidAppCommandInvocationCompletedMethod,
                    toHost: [
                        { name: Microsoft.Office.WebExtension.Parameters.Id, value: 0 },
                        { name: Microsoft.Office.WebExtension.Parameters.Status, value: 1 },
                        { name: Microsoft.Office.WebExtension.Parameters.AppCommandInvocationCompletedData, value: 2 }
                    ]
                });
                parameterMap.define({
                    type: OSF.DDA.EventDispId.dispidAppCommandInvokedEvent,
                    fromHost: [
                        { name: OSF.DDA.EventDescriptors.AppCommandInvokedEvent, value: parameterMap.self }
                    ],
                    isComplexType: true
                });
                parameterMap.define({
                    type: OSF.DDA.EventDescriptors.AppCommandInvokedEvent,
                    fromHost: [
                        { name: OfficeExt.AppCommand.AppCommandInvokedEventEnums.AppCommandId, value: 0 },
                        { name: OfficeExt.AppCommand.AppCommandInvokedEventEnums.CallbackName, value: 1 },
                        { name: OfficeExt.AppCommand.AppCommandInvokedEventEnums.EventObjStr, value: 2 },
                    ],
                    isComplexType: true
                });
            }
        }
        AppCommand.registerDdaFacade = registerDdaFacade;
    })(AppCommand = OfficeExt.AppCommand || (OfficeExt.AppCommand = {}));
})(OfficeExt || (OfficeExt = {}));
Microsoft.Office.WebExtension.AccountTypeFilter = {
    NoFilter: "noFilter",
    AAD: "aad",
    MSA: "msa"
};
OSF.DDA.AsyncMethodNames.addNames({ GetAccessTokenAsync: "getAccessTokenAsync" });
OSF.DDA.Auth = function OSF_DDA_Auth() {
};
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.GetAccessTokenAsync,
    requiredArguments: [],
    supportedOptions: [
        {
            name: Microsoft.Office.WebExtension.Parameters.ForceConsent,
            value: {
                "types": ["boolean"],
                "defaultValue": false
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.ForceAddAccount,
            value: {
                "types": ["boolean"],
                "defaultValue": false
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.AuthChallenge,
            value: {
                "types": ["string"],
                "defaultValue": ""
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.AllowConsentPrompt,
            value: {
                "types": ["boolean"],
                "defaultValue": false
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.ForMSGraphAccess,
            value: {
                "types": ["boolean"],
                "defaultValue": false
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.AllowSignInPrompt,
            value: {
                "types": ["boolean"],
                "defaultValue": false
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.EnableNewHosts,
            value: {
                "types": ["number"],
                "defaultValue": 0
            }
        },
        {
            name: Microsoft.Office.WebExtension.Parameters.AccountTypeFilter,
            value: {
                "enum": Microsoft.Office.WebExtension.AccountTypeFilter,
                "defaultValue": Microsoft.Office.WebExtension.AccountTypeFilter.NoFilter
            }
        }
    ],
    checkCallArgs: function (callArgs, caller, stateInfo) {
        var _a;
        var appContext = OSF._OfficeAppFactory.getInitializationHelper()._appContext;
        if (appContext && appContext._wopiHostOriginForSingleSignOn) {
            var addinTrustId = OSF.OUtil.Guid.generateNewGuid();
            window.parent.parent.postMessage("{\"MessageId\":\"AddinTrustedOrigin\",\"AddinTrustId\":\"" + addinTrustId + "\"}", appContext._wopiHostOriginForSingleSignOn);
            callArgs[Microsoft.Office.WebExtension.Parameters.AddinTrustId] = addinTrustId;
        }
        if (window.Office.context.requirements.isSetSupported("JsonPayloadSSO")) {
            var jsonParameterMap = (_a = {},
                _a[Microsoft.Office.WebExtension.Parameters.ForceConsent] = false,
                _a[Microsoft.Office.WebExtension.Parameters.ForceAddAccount] = false,
                _a[Microsoft.Office.WebExtension.Parameters.AuthChallenge] = true,
                _a[Microsoft.Office.WebExtension.Parameters.AllowConsentPrompt] = true,
                _a[Microsoft.Office.WebExtension.Parameters.ForMSGraphAccess] = true,
                _a[Microsoft.Office.WebExtension.Parameters.AllowSignInPrompt] = true,
                _a[Microsoft.Office.WebExtension.Parameters.EnableNewHosts] = true,
                _a[Microsoft.Office.WebExtension.Parameters.AccountTypeFilter] = true,
                _a);
            var jsonPayload = {};
            for (var _i = 0, _b = Object.keys(jsonParameterMap); _i < _b.length; _i++) {
                var key = _b[_i];
                if (jsonParameterMap[key]) {
                    jsonPayload[key] = callArgs[key];
                }
                delete callArgs[key];
            }
            callArgs[Microsoft.Office.WebExtension.Parameters.JsonPayload] = JSON.stringify(jsonPayload);
        }
        return callArgs;
    },
    onSucceeded: function (dataDescriptor, caller, callArgs) {
        var data = dataDescriptor[Microsoft.Office.WebExtension.Parameters.Data];
        return data;
    }
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidGetAccessTokenMethod,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.JsonPayload, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.ForceConsent, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.ForceAddAccount, value: 1 },
        { name: Microsoft.Office.WebExtension.Parameters.AuthChallenge, value: 2 },
        { name: Microsoft.Office.WebExtension.Parameters.AllowConsentPrompt, value: 3 },
        { name: Microsoft.Office.WebExtension.Parameters.ForMSGraphAccess, value: 4 },
        { name: Microsoft.Office.WebExtension.Parameters.AllowSignInPrompt, value: 5 }
    ],
    fromHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Data, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ]
});
OSF.DDA.AsyncMethodNames.addNames({
    OpenBrowserWindow: "openBrowserWindow"
});
OSF.DDA.OpenBrowser = function OSF_DDA_OpenBrowser() {
};
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.OpenBrowserWindow,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.Url,
            "types": ["string"]
        }
    ],
    supportedOptions: [
        {
            name: Microsoft.Office.WebExtension.Parameters.Reserved,
            value: {
                "types": ["number"],
                "defaultValue": 0
            }
        }
    ],
    privateStateCallbacks: []
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidOpenBrowserWindow,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Reserved, value: 0 },
        { name: Microsoft.Office.WebExtension.Parameters.Url, value: 1 }
    ]
});
OSF.DDA.AsyncMethodNames.addNames({
    ExecuteFeature: "executeFeatureAsync",
    QueryFeature: "queryFeatureAsync"
});
OSF.OUtil.augmentList(OSF.DDA.PropertyDescriptors, {
    FeatureProperties: "FeatureProperties",
    TcidEnabled: "TcidEnabled",
    TcidVisible: "TcidVisible"
});
OSF.DDA.ExecuteFeature = function OSF_DDA_ExecuteFeature() {
};
OSF.DDA.QueryFeature = function OSF_DDA_QueryFeature() {
};
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.ExecuteFeature,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.Tcid,
            "types": ["number"]
        }
    ],
    privateStateCallbacks: []
});
OSF.DDA.AsyncMethodCalls.define({
    method: OSF.DDA.AsyncMethodNames.QueryFeature,
    requiredArguments: [
        {
            "name": Microsoft.Office.WebExtension.Parameters.Tcid,
            "types": ["number"]
        }
    ],
    privateStateCallbacks: []
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.PropertyDescriptors.FeatureProperties,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.TcidEnabled, value: 0 },
        { name: OSF.DDA.PropertyDescriptors.TcidVisible, value: 1 }
    ],
    isComplexType: true
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidExecuteFeature,
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Tcid, value: 0 }
    ]
});
OSF.DDA.SafeArray.Delegate.ParameterMap.define({
    type: OSF.DDA.MethodDispId.dispidQueryFeature,
    fromHost: [
        { name: OSF.DDA.PropertyDescriptors.FeatureProperties, value: OSF.DDA.SafeArray.Delegate.ParameterMap.self }
    ],
    toHost: [
        { name: Microsoft.Office.WebExtension.Parameters.Tcid, value: 0 }
    ]
});
OSF.DDA.ExcelDocument = function OSF_DDA_ExcelDocument(officeAppContext, settings) {
    var bf = new OSF.DDA.BindingFacade(this);
    OSF.DDA.DispIdHost.addAsyncMethods(bf, [OSF.DDA.AsyncMethodNames.AddFromPromptAsync]);
    OSF.DDA.DispIdHost.addAsyncMethods(this, [OSF.DDA.AsyncMethodNames.GoToByIdAsync]);
    OSF.DDA.DispIdHost.addAsyncMethods(this, [OSF.DDA.AsyncMethodNames.GetDocumentCopyAsync]);
    OSF.DDA.DispIdHost.addAsyncMethods(this, [OSF.DDA.AsyncMethodNames.GetFilePropertiesAsync]);
    OSF.DDA.ExcelDocument.uber.constructor.call(this, officeAppContext, bf, settings);
    OSF.OUtil.finalizeProperties(this);
};
OSF.OUtil.extend(OSF.DDA.ExcelDocument, OSF.DDA.JsomDocument);
OSF.InitializationHelper.prototype.prepareRightAfterWebExtensionInitialize = function OSF_InitializationHelper$prepareRightAfterWebExtensionInitialize() {
    var appCommandHandler = OfficeExt.AppCommand.AppCommandManager.instance();
    appCommandHandler.initializeAndChangeOnce();
};
OSF.InitializationHelper.prototype.loadAppSpecificScriptAndCreateOM = function OSF_InitializationHelper$loadAppSpecificScriptAndCreateOM(appContext, appReady, basePath) {
    OSF.DDA.ErrorCodeManager.initializeErrorMessages(Strings.OfficeOM);
    appContext.doc = new OSF.DDA.ExcelDocument(appContext, this.initializeMacSettings(appContext, true));
    OSF.DDA.DispIdHost.addAsyncMethods(OSF.DDA.RichApi, [OSF.DDA.AsyncMethodNames.ExecuteRichApiRequestAsync]);
    OSF.DDA.RichApi.richApiMessageManager = new OfficeExt.RichApiMessageManager();
    appReady();
};
(function () {
    OSF.DDA.AsyncMethodCalls.define({
        method: OSF.DDA.AsyncMethodNames.SetSelectedDataAsync,
        requiredArguments: [
            {
                "name": Microsoft.Office.WebExtension.Parameters.Data,
                "types": ["string", "object", "number", "boolean"]
            }
        ],
        supportedOptions: [{
                name: Microsoft.Office.WebExtension.Parameters.CoercionType,
                value: {
                    "enum": Microsoft.Office.WebExtension.CoercionType,
                    "calculate": function (requiredArgs) {
                        return OSF.DDA.DataCoercion.determineCoercionType(requiredArgs[Microsoft.Office.WebExtension.Parameters.Data]);
                    }
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.CellFormat,
                value: {
                    "types": ["number", "object"],
                    "defaultValue": []
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.TableOptions,
                value: {
                    "types": ["number", "object"],
                    "defaultValue": []
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.ImageWidth,
                value: {
                    "types": ["number", "boolean"],
                    "defaultValue": false
                }
            },
            {
                name: Microsoft.Office.WebExtension.Parameters.ImageHeight,
                value: {
                    "types": ["number", "boolean"],
                    "defaultValue": false
                }
            }
        ],
        privateStateCallbacks: []
    });
})();
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b)
                if (b.hasOwnProperty(p))
                    d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var OfficeExtension;
(function (OfficeExtension) {
    var _Internal;
    (function (_Internal) {
        _Internal.OfficeRequire = function () {
            return null;
        }();
    })(_Internal = OfficeExtension._Internal || (OfficeExtension._Internal = {}));
    (function (_Internal) {
        var PromiseImpl;
        (function (PromiseImpl) {
            function Init() {
                return (function () {
                    "use strict";
                    function lib$es6$promise$utils$$objectOrFunction(x) {
                        return typeof x === 'function' || (typeof x === 'object' && x !== null);
                    }
                    function lib$es6$promise$utils$$isFunction(x) {
                        return typeof x === 'function';
                    }
                    function lib$es6$promise$utils$$isMaybeThenable(x) {
                        return typeof x === 'object' && x !== null;
                    }
                    var lib$es6$promise$utils$$_isArray;
                    if (!Array.isArray) {
                        lib$es6$promise$utils$$_isArray = function (x) {
                            return Object.prototype.toString.call(x) === '[object Array]';
                        };
                    }
                    else {
                        lib$es6$promise$utils$$_isArray = Array.isArray;
                    }
                    var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;
                    var lib$es6$promise$asap$$len = 0;
                    var lib$es6$promise$asap$$toString = {}.toString;
                    var lib$es6$promise$asap$$vertxNext;
                    var lib$es6$promise$asap$$customSchedulerFn;
                    var lib$es6$promise$asap$$asap = function asap(callback, arg) {
                        lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;
                        lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;
                        lib$es6$promise$asap$$len += 2;
                        if (lib$es6$promise$asap$$len === 2) {
                            if (lib$es6$promise$asap$$customSchedulerFn) {
                                lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);
                            }
                            else {
                                lib$es6$promise$asap$$scheduleFlush();
                            }
                        }
                    };
                    function lib$es6$promise$asap$$setScheduler(scheduleFn) {
                        lib$es6$promise$asap$$customSchedulerFn = scheduleFn;
                    }
                    function lib$es6$promise$asap$$setAsap(asapFn) {
                        lib$es6$promise$asap$$asap = asapFn;
                    }
                    var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;
                    var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};
                    var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;
                    var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';
                    var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&
                        typeof importScripts !== 'undefined' &&
                        typeof MessageChannel !== 'undefined';
                    function lib$es6$promise$asap$$useNextTick() {
                        var nextTick = process.nextTick;
                        var version = process.versions.node.match(/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/);
                        if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {
                            nextTick = window.setImmediate;
                        }
                        return function () {
                            nextTick(lib$es6$promise$asap$$flush);
                        };
                    }
                    function lib$es6$promise$asap$$useVertxTimer() {
                        return function () {
                            lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);
                        };
                    }
                    function lib$es6$promise$asap$$useMutationObserver() {
                        var iterations = 0;
                        var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);
                        var node = document.createTextNode('');
                        observer.observe(node, { characterData: true });
                        return function () {
                            node.data = (iterations = ++iterations % 2);
                        };
                    }
                    function lib$es6$promise$asap$$useMessageChannel() {
                        var channel = new MessageChannel();
                        channel.port1.onmessage = lib$es6$promise$asap$$flush;
                        return function () {
                            channel.port2.postMessage(0);
                        };
                    }
                    function lib$es6$promise$asap$$useSetTimeout() {
                        return function () {
                            setTimeout(lib$es6$promise$asap$$flush, 1);
                        };
                    }
                    var lib$es6$promise$asap$$queue = new Array(1000);
                    function lib$es6$promise$asap$$flush() {
                        for (var i = 0; i < lib$es6$promise$asap$$len; i += 2) {
                            var callback = lib$es6$promise$asap$$queue[i];
                            var arg = lib$es6$promise$asap$$queue[i + 1];
                            callback(arg);
                            lib$es6$promise$asap$$queue[i] = undefined;
                            lib$es6$promise$asap$$queue[i + 1] = undefined;
                        }
                        lib$es6$promise$asap$$len = 0;
                    }
                    var lib$es6$promise$asap$$scheduleFlush;
                    if (lib$es6$promise$asap$$isNode) {
                        lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();
                    }
                    else if (lib$es6$promise$asap$$isWorker) {
                        lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();
                    }
                    else {
                        lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();
                    }
                    function lib$es6$promise$$internal$$noop() { }
                    var lib$es6$promise$$internal$$PENDING = void 0;
                    var lib$es6$promise$$internal$$FULFILLED = 1;
                    var lib$es6$promise$$internal$$REJECTED = 2;
                    var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();
                    function lib$es6$promise$$internal$$selfFullfillment() {
                        return new TypeError("You cannot resolve a promise with itself");
                    }
                    function lib$es6$promise$$internal$$cannotReturnOwn() {
                        return new TypeError('A promises callback cannot return that same promise.');
                    }
                    function lib$es6$promise$$internal$$getThen(promise) {
                        try {
                            return promise.then;
                        }
                        catch (error) {
                            lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;
                            return lib$es6$promise$$internal$$GET_THEN_ERROR;
                        }
                    }
                    function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {
                        try {
                            then.call(value, fulfillmentHandler, rejectionHandler);
                        }
                        catch (e) {
                            return e;
                        }
                    }
                    function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {
                        lib$es6$promise$asap$$asap(function (promise) {
                            var sealed = false;
                            var error = lib$es6$promise$$internal$$tryThen(then, thenable, function (value) {
                                if (sealed) {
                                    return;
                                }
                                sealed = true;
                                if (thenable !== value) {
                                    lib$es6$promise$$internal$$resolve(promise, value);
                                }
                                else {
                                    lib$es6$promise$$internal$$fulfill(promise, value);
                                }
                            }, function (reason) {
                                if (sealed) {
                                    return;
                                }
                                sealed = true;
                                lib$es6$promise$$internal$$reject(promise, reason);
                            }, 'Settle: ' + (promise._label || ' unknown promise'));
                            if (!sealed && error) {
                                sealed = true;
                                lib$es6$promise$$internal$$reject(promise, error);
                            }
                        }, promise);
                    }
                    function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {
                        if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {
                            lib$es6$promise$$internal$$fulfill(promise, thenable._result);
                        }
                        else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {
                            lib$es6$promise$$internal$$reject(promise, thenable._result);
                        }
                        else {
                            lib$es6$promise$$internal$$subscribe(thenable, undefined, function (value) {
                                lib$es6$promise$$internal$$resolve(promise, value);
                            }, function (reason) {
                                lib$es6$promise$$internal$$reject(promise, reason);
                            });
                        }
                    }
                    function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {
                        if (maybeThenable.constructor === promise.constructor) {
                            lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);
                        }
                        else {
                            var then = lib$es6$promise$$internal$$getThen(maybeThenable);
                            if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {
                                lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);
                            }
                            else if (then === undefined) {
                                lib$es6$promise$$internal$$fulfill(promise, maybeThenable);
                            }
                            else if (lib$es6$promise$utils$$isFunction(then)) {
                                lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);
                            }
                            else {
                                lib$es6$promise$$internal$$fulfill(promise, maybeThenable);
                            }
                        }
                    }
                    function lib$es6$promise$$internal$$resolve(promise, value) {
                        if (promise === value) {
                            lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFullfillment());
                        }
                        else if (lib$es6$promise$utils$$objectOrFunction(value)) {
                            lib$es6$promise$$internal$$handleMaybeThenable(promise, value);
                        }
                        else {
                            lib$es6$promise$$internal$$fulfill(promise, value);
                        }
                    }
                    function lib$es6$promise$$internal$$publishRejection(promise) {
                        if (promise._onerror) {
                            promise._onerror(promise._result);
                        }
                        lib$es6$promise$$internal$$publish(promise);
                    }
                    function lib$es6$promise$$internal$$fulfill(promise, value) {
                        if (promise._state !== lib$es6$promise$$internal$$PENDING) {
                            return;
                        }
                        promise._result = value;
                        promise._state = lib$es6$promise$$internal$$FULFILLED;
                        if (promise._subscribers.length !== 0) {
                            lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);
                        }
                    }
                    function lib$es6$promise$$internal$$reject(promise, reason) {
                        if (promise._state !== lib$es6$promise$$internal$$PENDING) {
                            return;
                        }
                        promise._state = lib$es6$promise$$internal$$REJECTED;
                        promise._result = reason;
                        lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);
                    }
                    function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {
                        var subscribers = parent._subscribers;
                        var length = subscribers.length;
                        parent._onerror = null;
                        subscribers[length] = child;
                        subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;
                        subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;
                        if (length === 0 && parent._state) {
                            lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);
                        }
                    }
                    function lib$es6$promise$$internal$$publish(promise) {
                        var subscribers = promise._subscribers;
                        var settled = promise._state;
                        if (subscribers.length === 0) {
                            return;
                        }
                        var child, callback, detail = promise._result;
                        for (var i = 0; i < subscribers.length; i += 3) {
                            child = subscribers[i];
                            callback = subscribers[i + settled];
                            if (child) {
                                lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);
                            }
                            else {
                                callback(detail);
                            }
                        }
                        promise._subscribers.length = 0;
                    }
                    function lib$es6$promise$$internal$$ErrorObject() {
                        this.error = null;
                    }
                    var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();
                    function lib$es6$promise$$internal$$tryCatch(callback, detail) {
                        try {
                            return callback(detail);
                        }
                        catch (e) {
                            lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;
                            return lib$es6$promise$$internal$$TRY_CATCH_ERROR;
                        }
                    }
                    function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {
                        var hasCallback = lib$es6$promise$utils$$isFunction(callback), value, error, succeeded, failed;
                        if (hasCallback) {
                            value = lib$es6$promise$$internal$$tryCatch(callback, detail);
                            if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {
                                failed = true;
                                error = value.error;
                                value = null;
                            }
                            else {
                                succeeded = true;
                            }
                            if (promise === value) {
                                lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());
                                return;
                            }
                        }
                        else {
                            value = detail;
                            succeeded = true;
                        }
                        if (promise._state !== lib$es6$promise$$internal$$PENDING) {
                        }
                        else if (hasCallback && succeeded) {
                            lib$es6$promise$$internal$$resolve(promise, value);
                        }
                        else if (failed) {
                            lib$es6$promise$$internal$$reject(promise, error);
                        }
                        else if (settled === lib$es6$promise$$internal$$FULFILLED) {
                            lib$es6$promise$$internal$$fulfill(promise, value);
                        }
                        else if (settled === lib$es6$promise$$internal$$REJECTED) {
                            lib$es6$promise$$internal$$reject(promise, value);
                        }
                    }
                    function lib$es6$promise$$internal$$initializePromise(promise, resolver) {
                        try {
                            resolver(function resolvePromise(value) {
                                lib$es6$promise$$internal$$resolve(promise, value);
                            }, function rejectPromise(reason) {
                                lib$es6$promise$$internal$$reject(promise, reason);
                            });
                        }
                        catch (e) {
                            lib$es6$promise$$internal$$reject(promise, e);
                        }
                    }
                    function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {
                        var enumerator = this;
                        enumerator._instanceConstructor = Constructor;
                        enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);
                        if (enumerator._validateInput(input)) {
                            enumerator._input = input;
                            enumerator.length = input.length;
                            enumerator._remaining = input.length;
                            enumerator._init();
                            if (enumerator.length === 0) {
                                lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);
                            }
                            else {
                                enumerator.length = enumerator.length || 0;
                                enumerator._enumerate();
                                if (enumerator._remaining === 0) {
                                    lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);
                                }
                            }
                        }
                        else {
                            lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());
                        }
                    }
                    lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function (input) {
                        return lib$es6$promise$utils$$isArray(input);
                    };
                    lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function () {
                        return new _Internal.Error('Array Methods must be provided an Array');
                    };
                    lib$es6$promise$enumerator$$Enumerator.prototype._init = function () {
                        this._result = new Array(this.length);
                    };
                    var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;
                    lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function () {
                        var enumerator = this;
                        var length = enumerator.length;
                        var promise = enumerator.promise;
                        var input = enumerator._input;
                        for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {
                            enumerator._eachEntry(input[i], i);
                        }
                    };
                    lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function (entry, i) {
                        var enumerator = this;
                        var c = enumerator._instanceConstructor;
                        if (lib$es6$promise$utils$$isMaybeThenable(entry)) {
                            if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {
                                entry._onerror = null;
                                enumerator._settledAt(entry._state, i, entry._result);
                            }
                            else {
                                enumerator._willSettleAt(c.resolve(entry), i);
                            }
                        }
                        else {
                            enumerator._remaining--;
                            enumerator._result[i] = entry;
                        }
                    };
                    lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function (state, i, value) {
                        var enumerator = this;
                        var promise = enumerator.promise;
                        if (promise._state === lib$es6$promise$$internal$$PENDING) {
                            enumerator._remaining--;
                            if (state === lib$es6$promise$$internal$$REJECTED) {
                                lib$es6$promise$$internal$$reject(promise, value);
                            }
                            else {
                                enumerator._result[i] = value;
                            }
                        }
                        if (enumerator._remaining === 0) {
                            lib$es6$promise$$internal$$fulfill(promise, enumerator._result);
                        }
                    };
                    lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function (promise, i) {
                        var enumerator = this;
                        lib$es6$promise$$internal$$subscribe(promise, undefined, function (value) {
                            enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);
                        }, function (reason) {
                            enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);
                        });
                    };
                    function lib$es6$promise$promise$all$$all(entries) {
                        return new lib$es6$promise$enumerator$$default(this, entries).promise;
                    }
                    var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;
                    function lib$es6$promise$promise$race$$race(entries) {
                        var Constructor = this;
                        var promise = new Constructor(lib$es6$promise$$internal$$noop);
                        if (!lib$es6$promise$utils$$isArray(entries)) {
                            lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));
                            return promise;
                        }
                        var length = entries.length;
                        function onFulfillment(value) {
                            lib$es6$promise$$internal$$resolve(promise, value);
                        }
                        function onRejection(reason) {
                            lib$es6$promise$$internal$$reject(promise, reason);
                        }
                        for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {
                            lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);
                        }
                        return promise;
                    }
                    var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;
                    function lib$es6$promise$promise$resolve$$resolve(object) {
                        var Constructor = this;
                        if (object && typeof object === 'object' && object.constructor === Constructor) {
                            return object;
                        }
                        var promise = new Constructor(lib$es6$promise$$internal$$noop);
                        lib$es6$promise$$internal$$resolve(promise, object);
                        return promise;
                    }
                    var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;
                    function lib$es6$promise$promise$reject$$reject(reason) {
                        var Constructor = this;
                        var promise = new Constructor(lib$es6$promise$$internal$$noop);
                        lib$es6$promise$$internal$$reject(promise, reason);
                        return promise;
                    }
                    var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;
                    var lib$es6$promise$promise$$counter = 0;
                    function lib$es6$promise$promise$$needsResolver() {
                        throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
                    }
                    function lib$es6$promise$promise$$needsNew() {
                        throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
                    }
                    var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;
                    function lib$es6$promise$promise$$Promise(resolver) {
                        this._id = lib$es6$promise$promise$$counter++;
                        this._state = undefined;
                        this._result = undefined;
                        this._subscribers = [];
                        if (lib$es6$promise$$internal$$noop !== resolver) {
                            if (!lib$es6$promise$utils$$isFunction(resolver)) {
                                lib$es6$promise$promise$$needsResolver();
                            }
                            if (!(this instanceof lib$es6$promise$promise$$Promise)) {
                                lib$es6$promise$promise$$needsNew();
                            }
                            lib$es6$promise$$internal$$initializePromise(this, resolver);
                        }
                    }
                    lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;
                    lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;
                    lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;
                    lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;
                    lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;
                    lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;
                    lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;
                    lib$es6$promise$promise$$Promise.prototype = {
                        constructor: lib$es6$promise$promise$$Promise,
                        then: function (onFulfillment, onRejection) {
                            var parent = this;
                            var state = parent._state;
                            if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {
                                return this;
                            }
                            var child = new this.constructor(lib$es6$promise$$internal$$noop);
                            var result = parent._result;
                            if (state) {
                                var callback = arguments[state - 1];
                                lib$es6$promise$asap$$asap(function () {
                                    lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);
                                });
                            }
                            else {
                                lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);
                            }
                            return child;
                        },
                        'catch': function (onRejection) {
                            return this.then(null, onRejection);
                        }
                    };
                    return lib$es6$promise$promise$$default;
                }).call(this);
            }
            PromiseImpl.Init = Init;
        })(PromiseImpl = _Internal.PromiseImpl || (_Internal.PromiseImpl = {}));
    })(_Internal = OfficeExtension._Internal || (OfficeExtension._Internal = {}));
    (function (_Internal) {
        function isEdgeLessThan14() {
            var userAgent = window.navigator.userAgent;
            var versionIdx = userAgent.indexOf("Edge/");
            if (versionIdx >= 0) {
                userAgent = userAgent.substring(versionIdx + 5, userAgent.length);
                if (userAgent < "14.14393")
                    return true;
                else
                    return false;
            }
            return false;
        }
        function determinePromise() {
            if (typeof (window) === "undefined" && typeof (Promise) === "function") {
                return Promise;
            }
            if (typeof (window) !== "undefined" && window.Promise) {
                if (isEdgeLessThan14()) {
                    return _Internal.PromiseImpl.Init();
                }
                else {
                    return window.Promise;
                }
            }
            else {
                return _Internal.PromiseImpl.Init();
            }
        }
        _Internal.OfficePromise = determinePromise();
    })(_Internal = OfficeExtension._Internal || (OfficeExtension._Internal = {}));
    var OfficePromise = _Internal.OfficePromise;
    OfficeExtension.Promise = OfficePromise;
})(OfficeExtension || (OfficeExtension = {}));
var OfficeExtension;
(function (OfficeExtension_1) {
    var SessionBase = (function () {
        function SessionBase() {
        }
        SessionBase.prototype._resolveRequestUrlAndHeaderInfo = function () {
            return CoreUtility._createPromiseFromResult(null);
        };
        SessionBase.prototype._createRequestExecutorOrNull = function () {
            return null;
        };
        Object.defineProperty(SessionBase.prototype, "eventRegistration", {
            get: function () {
                return null;
            },
            enumerable: true,
            configurable: true
        });
        return SessionBase;
    }());
    OfficeExtension_1.SessionBase = SessionBase;
    var HttpUtility = (function () {
        function HttpUtility() {
        }
        HttpUtility.setCustomSendRequestFunc = function (func) {
            HttpUtility.s_customSendRequestFunc = func;
        };
        HttpUtility.xhrSendRequestFunc = function (request) {
            return CoreUtility.createPromise(function (resolve, reject) {
                var xhr = new XMLHttpRequest();
                xhr.open(request.method, request.url);
                xhr.onload = function () {
                    var resp = {
                        statusCode: xhr.status,
                        headers: CoreUtility._parseHttpResponseHeaders(xhr.getAllResponseHeaders()),
                        body: xhr.responseText
                    };
                    resolve(resp);
                };
                xhr.onerror = function () {
                    reject(new _Internal.RuntimeError({
                        code: CoreErrorCodes.connectionFailure,
                        httpStatusCode: xhr.status,
                        message: CoreUtility._getResourceString(CoreResourceStrings.connectionFailureWithStatus, xhr.statusText)
                    }));
                };
                if (request.headers) {
                    for (var key in request.headers) {
                        xhr.setRequestHeader(key, request.headers[key]);
                    }
                }
                xhr.send(CoreUtility._getRequestBodyText(request));
            });
        };
        HttpUtility.fetchSendRequestFunc = function (request) {
            var requestBodyText = CoreUtility._getRequestBodyText(request);
            if (requestBodyText === '') {
                requestBodyText = undefined;
            }
            return fetch(request.url, {
                method: request.method,
                headers: request.headers,
                body: requestBodyText
            })
                .then(function (resp) {
                return resp.text()
                    .then(function (body) {
                    var statusCode = resp.status;
                    var headers = {};
                    resp.headers.forEach(function (value, name) {
                        headers[name] = value;
                    });
                    var ret = { statusCode: statusCode, headers: headers, body: body };
                    return ret;
                });
            });
        };
        HttpUtility.sendRequest = function (request) {
            HttpUtility.validateAndNormalizeRequest(request);
            var func = HttpUtility.s_customSendRequestFunc;
            if (!func) {
                if (typeof (fetch) !== 'undefined') {
                    func = HttpUtility.fetchSendRequestFunc;
                }
                else {
                    func = HttpUtility.xhrSendRequestFunc;
                }
            }
            return func(request);
        };
        HttpUtility.setCustomSendLocalDocumentRequestFunc = function (func) {
            HttpUtility.s_customSendLocalDocumentRequestFunc = func;
        };
        HttpUtility.sendLocalDocumentRequest = function (request) {
            HttpUtility.validateAndNormalizeRequest(request);
            var func;
            func = HttpUtility.s_customSendLocalDocumentRequestFunc || HttpUtility.officeJsSendLocalDocumentRequestFunc;
            return func(request);
        };
        HttpUtility.officeJsSendLocalDocumentRequestFunc = function (request) {
            request = CoreUtility._validateLocalDocumentRequest(request);
            var requestSafeArray = CoreUtility._buildRequestMessageSafeArray(request);
            return CoreUtility.createPromise(function (resolve, reject) {
                OSF.DDA.RichApi.executeRichApiRequestAsync(requestSafeArray, function (asyncResult) {
                    var response;
                    if (asyncResult.status == 'succeeded') {
                        response = {
                            statusCode: RichApiMessageUtility.getResponseStatusCode(asyncResult),
                            headers: RichApiMessageUtility.getResponseHeaders(asyncResult),
                            body: RichApiMessageUtility.getResponseBody(asyncResult)
                        };
                    }
                    else {
                        response = RichApiMessageUtility.buildHttpResponseFromOfficeJsError(asyncResult.error.code, asyncResult.error.message);
                    }
                    CoreUtility.log('Response:');
                    CoreUtility.log(JSON.stringify(response));
                    resolve(response);
                });
            });
        };
        HttpUtility.validateAndNormalizeRequest = function (request) {
            if (CoreUtility.isNullOrUndefined(request)) {
                throw _Internal.RuntimeError._createInvalidArgError({
                    argumentName: 'request'
                });
            }
            if (CoreUtility.isNullOrEmptyString(request.method)) {
                request.method = 'GET';
            }
            request.method = request.method.toUpperCase();
        };
        HttpUtility.logRequest = function (request) {
            if (CoreUtility._logEnabled) {
                CoreUtility.log('---HTTP Request---');
                CoreUtility.log(request.method + ' ' + request.url);
                if (request.headers) {
                    for (var key in request.headers) {
                        CoreUtility.log(key + ': ' + request.headers[key]);
                    }
                }
                if (HttpUtility._logBodyEnabled) {
                    CoreUtility.log(CoreUtility._getRequestBodyText(request));
                }
            }
        };
        HttpUtility.logResponse = function (response) {
            if (CoreUtility._logEnabled) {
                CoreUtility.log('---HTTP Response---');
                CoreUtility.log('' + response.statusCode);
                if (response.headers) {
                    for (var key in response.headers) {
                        CoreUtility.log(key + ': ' + response.headers[key]);
                    }
                }
                if (HttpUtility._logBodyEnabled) {
                    CoreUtility.log(response.body);
                }
            }
        };
        HttpUtility._logBodyEnabled = false;
        return HttpUtility;
    }());
    OfficeExtension_1.HttpUtility = HttpUtility;
    var HostBridge = (function () {
        function HostBridge(m_bridge) {
            var _this = this;
            this.m_bridge = m_bridge;
            this.m_promiseResolver = {};
            this.m_handlers = [];
            this.m_bridge.onMessageFromHost = function (messageText) {
                var message = JSON.parse(messageText);
                if (message.type == 3) {
                    var genericMessageBody = message.message;
                    if (genericMessageBody && genericMessageBody.entries) {
                        for (var i = 0; i < genericMessageBody.entries.length; i++) {
                            var entryObjectOrArray = genericMessageBody.entries[i];
                            if (Array.isArray(entryObjectOrArray)) {
                                var entry = {
                                    messageCategory: entryObjectOrArray[0],
                                    messageType: entryObjectOrArray[1],
                                    targetId: entryObjectOrArray[2],
                                    message: entryObjectOrArray[3],
                                    id: entryObjectOrArray[4]
                                };
                                genericMessageBody.entries[i] = entry;
                            }
                        }
                    }
                }
                _this.dispatchMessage(message);
            };
        }
        HostBridge.init = function (bridge) {
            if (typeof bridge !== 'object' || !bridge) {
                return;
            }
            var instance = new HostBridge(bridge);
            HostBridge.s_instance = instance;
            HttpUtility.setCustomSendLocalDocumentRequestFunc(function (request) {
                request = CoreUtility._validateLocalDocumentRequest(request);
                var requestFlags = 0;
                if (!CoreUtility.isReadonlyRestRequest(request.method)) {
                    requestFlags = 1;
                }
                var index = request.url.indexOf('?');
                if (index >= 0) {
                    var query = request.url.substr(index + 1);
                    var flagsAndCustomData = CoreUtility._parseRequestFlagsAndCustomDataFromQueryStringIfAny(query);
                    if (flagsAndCustomData.flags >= 0) {
                        requestFlags = flagsAndCustomData.flags;
                    }
                }
                if (typeof (request.body) === "string") {
                    request.body = JSON.parse(request.body);
                }
                var bridgeMessage = {
                    id: HostBridge.nextId(),
                    type: 1,
                    flags: requestFlags,
                    message: request
                };
                return instance.sendMessageToHostAndExpectResponse(bridgeMessage).then(function (bridgeResponse) {
                    var responseInfo = bridgeResponse.message;
                    return responseInfo;
                });
            });
            for (var i = 0; i < HostBridge.s_onInitedHandlers.length; i++) {
                HostBridge.s_onInitedHandlers[i](instance);
            }
        };
        Object.defineProperty(HostBridge, "instance", {
            get: function () {
                return HostBridge.s_instance;
            },
            enumerable: true,
            configurable: true
        });
        HostBridge.prototype.sendMessageToHost = function (message) {
            this.m_bridge.sendMessageToHost(JSON.stringify(message));
        };
        HostBridge.prototype.sendMessageToHostAndExpectResponse = function (message) {
            var _this = this;
            var ret = CoreUtility.createPromise(function (resolve, reject) {
                _this.m_promiseResolver[message.id] = resolve;
            });
            this.m_bridge.sendMessageToHost(JSON.stringify(message));
            return ret;
        };
        HostBridge.prototype.addHostMessageHandler = function (handler) {
            this.m_handlers.push(handler);
        };
        HostBridge.prototype.removeHostMessageHandler = function (handler) {
            var index = this.m_handlers.indexOf(handler);
            if (index >= 0) {
                this.m_handlers.splice(index, 1);
            }
        };
        HostBridge.onInited = function (handler) {
            HostBridge.s_onInitedHandlers.push(handler);
            if (HostBridge.s_instance) {
                handler(HostBridge.s_instance);
            }
        };
        HostBridge.prototype.dispatchMessage = function (message) {
            if (typeof message.id === 'number') {
                var resolve = this.m_promiseResolver[message.id];
                if (resolve) {
                    resolve(message);
                    delete this.m_promiseResolver[message.id];
                    return;
                }
            }
            for (var i = 0; i < this.m_handlers.length; i++) {
                this.m_handlers[i](message);
            }
        };
        HostBridge.nextId = function () {
            return HostBridge.s_nextId++;
        };
        HostBridge.s_onInitedHandlers = [];
        HostBridge.s_nextId = 1;
        return HostBridge;
    }());
    OfficeExtension_1.HostBridge = HostBridge;
    if (typeof _richApiNativeBridge === 'object' && _richApiNativeBridge) {
        HostBridge.init(_richApiNativeBridge);
    }
    var _Internal;
    (function (_Internal) {
        var RuntimeError = (function (_super) {
            __extends(RuntimeError, _super);
            function RuntimeError(error) {
                var _this = _super.call(this, typeof error === 'string' ? error : error.message) || this;
                Object.setPrototypeOf(_this, RuntimeError.prototype);
                _this.name = 'RichApi.Error';
                if (typeof error === 'string') {
                    _this.message = error;
                }
                else {
                    _this.code = error.code;
                    _this.message = error.message;
                    _this.traceMessages = error.traceMessages || [];
                    _this.innerError = error.innerError || null;
                    _this.debugInfo = _this._createDebugInfo(error.debugInfo || {});
                    _this.httpStatusCode = error.httpStatusCode;
                    _this.data = error.data;
                }
                if (CoreUtility.isNullOrUndefined(_this.httpStatusCode) || _this.httpStatusCode === 200) {
                    var mapping = {};
                    mapping[CoreErrorCodes.accessDenied] = 401;
                    mapping[CoreErrorCodes.connectionFailure] = 500;
                    mapping[CoreErrorCodes.generalException] = 500;
                    mapping[CoreErrorCodes.invalidArgument] = 400;
                    mapping[CoreErrorCodes.invalidObjectPath] = 400;
                    mapping[CoreErrorCodes.invalidOrTimedOutSession] = 408;
                    mapping[CoreErrorCodes.invalidRequestContext] = 400;
                    mapping[CoreErrorCodes.timeout] = 408;
                    mapping[CoreErrorCodes.valueNotLoaded] = 400;
                    _this.httpStatusCode = mapping[_this.code];
                }
                if (CoreUtility.isNullOrUndefined(_this.httpStatusCode)) {
                    _this.httpStatusCode = 500;
                }
                return _this;
            }
            RuntimeError.prototype.toString = function () {
                return this.code + ': ' + this.message;
            };
            RuntimeError.prototype._createDebugInfo = function (partialDebugInfo) {
                var debugInfo = {
                    code: this.code,
                    message: this.message
                };
                debugInfo.toString = function () {
                    return JSON.stringify(this);
                };
                for (var key in partialDebugInfo) {
                    debugInfo[key] = partialDebugInfo[key];
                }
                if (this.innerError) {
                    if (this.innerError instanceof _Internal.RuntimeError) {
                        debugInfo.innerError = this.innerError.debugInfo;
                    }
                    else {
                        debugInfo.innerError = this.innerError;
                    }
                }
                return debugInfo;
            };
            RuntimeError._createInvalidArgError = function (error) {
                return new _Internal.RuntimeError({
                    code: CoreErrorCodes.invalidArgument,
                    httpStatusCode: 400,
                    message: CoreUtility.isNullOrEmptyString(error.argumentName)
                        ? CoreUtility._getResourceString(CoreResourceStrings.invalidArgumentGeneric)
                        : CoreUtility._getResourceString(CoreResourceStrings.invalidArgument, error.argumentName),
                    debugInfo: error.errorLocation ? { errorLocation: error.errorLocation } : {},
                    innerError: error.innerError
                });
            };
            return RuntimeError;
        }(Error));
        _Internal.RuntimeError = RuntimeError;
    })(_Internal = OfficeExtension_1._Internal || (OfficeExtension_1._Internal = {}));
    OfficeExtension_1.Error = _Internal.RuntimeError;
    var CoreErrorCodes = (function () {
        function CoreErrorCodes() {
        }
        CoreErrorCodes.apiNotFound = 'ApiNotFound';
        CoreErrorCodes.accessDenied = 'AccessDenied';
        CoreErrorCodes.generalException = 'GeneralException';
        CoreErrorCodes.activityLimitReached = 'ActivityLimitReached';
        CoreErrorCodes.invalidArgument = 'InvalidArgument';
        CoreErrorCodes.connectionFailure = 'ConnectionFailure';
        CoreErrorCodes.timeout = 'Timeout';
        CoreErrorCodes.invalidOrTimedOutSession = 'InvalidOrTimedOutSession';
        CoreErrorCodes.invalidObjectPath = 'InvalidObjectPath';
        CoreErrorCodes.invalidRequestContext = 'InvalidRequestContext';
        CoreErrorCodes.valueNotLoaded = 'ValueNotLoaded';
        CoreErrorCodes.requestPayloadSizeLimitExceeded = 'RequestPayloadSizeLimitExceeded';
        CoreErrorCodes.responsePayloadSizeLimitExceeded = 'ResponsePayloadSizeLimitExceeded';
        CoreErrorCodes.writeNotSupportedWhenModalDialogOpen = 'WriteNotSupportedWhenModalDialogOpen';
        return CoreErrorCodes;
    }());
    OfficeExtension_1.CoreErrorCodes = CoreErrorCodes;
    var CoreResourceStrings = (function () {
        function CoreResourceStrings() {
        }
        CoreResourceStrings.apiNotFoundDetails = 'ApiNotFoundDetails';
        CoreResourceStrings.connectionFailureWithStatus = 'ConnectionFailureWithStatus';
        CoreResourceStrings.connectionFailureWithDetails = 'ConnectionFailureWithDetails';
        CoreResourceStrings.invalidArgument = 'InvalidArgument';
        CoreResourceStrings.invalidArgumentGeneric = 'InvalidArgumentGeneric';
        CoreResourceStrings.timeout = 'Timeout';
        CoreResourceStrings.invalidOrTimedOutSessionMessage = 'InvalidOrTimedOutSessionMessage';
        CoreResourceStrings.invalidSheetName = 'InvalidSheetName';
        CoreResourceStrings.invalidObjectPath = 'InvalidObjectPath';
        CoreResourceStrings.invalidRequestContext = 'InvalidRequestContext';
        CoreResourceStrings.valueNotLoaded = 'ValueNotLoaded';
        return CoreResourceStrings;
    }());
    OfficeExtension_1.CoreResourceStrings = CoreResourceStrings;
    var CoreConstants = (function () {
        function CoreConstants() {
        }
        CoreConstants.flags = 'flags';
        CoreConstants.sourceLibHeader = 'SdkVersion';
        CoreConstants.processQuery = 'ProcessQuery';
        CoreConstants.localDocument = 'http://document.localhost/';
        CoreConstants.localDocumentApiPrefix = 'http://document.localhost/_api/';
        CoreConstants.customData = 'customdata';
        return CoreConstants;
    }());
    OfficeExtension_1.CoreConstants = CoreConstants;
    var RichApiMessageUtility = (function () {
        function RichApiMessageUtility() {
        }
        RichApiMessageUtility.buildMessageArrayForIRequestExecutor = function (customData, requestFlags, requestMessage, sourceLibHeaderValue) {
            var requestMessageText = JSON.stringify(requestMessage.Body);
            CoreUtility.log('Request:');
            CoreUtility.log(requestMessageText);
            var headers = {};
            CoreUtility._copyHeaders(requestMessage.Headers, headers);
            headers[CoreConstants.sourceLibHeader] = sourceLibHeaderValue;
            var messageSafearray = RichApiMessageUtility.buildRequestMessageSafeArray(customData, requestFlags, 'POST', CoreConstants.processQuery, headers, requestMessageText);
            return messageSafearray;
        };
        RichApiMessageUtility.buildResponseOnSuccess = function (responseBody, responseHeaders) {
            var response = { HttpStatusCode: 200, ErrorCode: '', ErrorMessage: '', Headers: null, Body: null };
            response.Body = JSON.parse(responseBody);
            response.Headers = responseHeaders;
            return response;
        };
        RichApiMessageUtility.buildResponseOnError = function (errorCode, message) {
            var response = { HttpStatusCode: 500, ErrorCode: '', ErrorMessage: '', Headers: null, Body: null };
            response.ErrorCode = CoreErrorCodes.generalException;
            response.ErrorMessage = message;
            if (errorCode == RichApiMessageUtility.OfficeJsErrorCode_ooeNoCapability) {
                response.ErrorCode = CoreErrorCodes.accessDenied;
                response.HttpStatusCode = 401;
            }
            else if (errorCode == RichApiMessageUtility.OfficeJsErrorCode_ooeActivityLimitReached) {
                response.ErrorCode = CoreErrorCodes.activityLimitReached;
                response.HttpStatusCode = 429;
            }
            else if (errorCode == RichApiMessageUtility.OfficeJsErrorCode_ooeInvalidOrTimedOutSession) {
                response.ErrorCode = CoreErrorCodes.invalidOrTimedOutSession;
                response.HttpStatusCode = 408;
                response.ErrorMessage = CoreUtility._getResourceString(CoreResourceStrings.invalidOrTimedOutSessionMessage);
            }
            else if (errorCode == RichApiMessageUtility.OfficeJsErrorCode_ooeRequestPayloadSizeLimitExceeded) {
                response.ErrorCode = CoreErrorCodes.requestPayloadSizeLimitExceeded;
                response.HttpStatusCode = 400;
            }
            else if (errorCode == RichApiMessageUtility.OfficeJsErrorCode_ooeResponsePayloadSizeLimitExceeded) {
                response.ErrorCode = CoreErrorCodes.responsePayloadSizeLimitExceeded;
                response.HttpStatusCode = 400;
            }
            else if (errorCode == RichApiMessageUtility.OfficeJsErrorCode_ooeWriteNotSupportedWhenModalDialogOpen) {
                response.ErrorCode = CoreErrorCodes.writeNotSupportedWhenModalDialogOpen;
                response.HttpStatusCode = 400;
            }
            else if (errorCode == RichApiMessageUtility.OfficeJsErrorCode_ooeInvalidSheetName) {
                response.ErrorCode = CoreErrorCodes.invalidRequestContext;
                response.HttpStatusCode = 400;
                response.ErrorMessage = CoreUtility._getResourceString(CoreResourceStrings.invalidSheetName);
            }
            return response;
        };
        RichApiMessageUtility.buildHttpResponseFromOfficeJsError = function (errorCode, message) {
            var statusCode = 500;
            var errorBody = {};
            errorBody['error'] = {};
            errorBody['error']['code'] = CoreErrorCodes.generalException;
            errorBody['error']['message'] = message;
            if (errorCode === RichApiMessageUtility.OfficeJsErrorCode_ooeNoCapability) {
                statusCode = 403;
                errorBody['error']['code'] = CoreErrorCodes.accessDenied;
            }
            else if (errorCode === RichApiMessageUtility.OfficeJsErrorCode_ooeActivityLimitReached) {
                statusCode = 429;
                errorBody['error']['code'] = CoreErrorCodes.activityLimitReached;
            }
            return { statusCode: statusCode, headers: {}, body: JSON.stringify(errorBody) };
        };
        RichApiMessageUtility.buildRequestMessageSafeArray = function (customData, requestFlags, method, path, headers, body) {
            var headerArray = [];
            if (headers) {
                for (var headerName in headers) {
                    headerArray.push(headerName);
                    headerArray.push(headers[headerName]);
                }
            }
            var appPermission = 0;
            var solutionId = '';
            var instanceId = '';
            var marketplaceType = '';
            var solutionVersion = '';
            var storeLocation = '';
            var compliantSolutionId = '';
            return [
                customData,
                method,
                path,
                headerArray,
                body,
                appPermission,
                requestFlags,
                solutionId,
                instanceId,
                marketplaceType,
                solutionVersion,
                storeLocation,
                compliantSolutionId
            ];
        };
        RichApiMessageUtility.getResponseBody = function (result) {
            return RichApiMessageUtility.getResponseBodyFromSafeArray(result.value.data);
        };
        RichApiMessageUtility.getResponseHeaders = function (result) {
            return RichApiMessageUtility.getResponseHeadersFromSafeArray(result.value.data);
        };
        RichApiMessageUtility.getResponseBodyFromSafeArray = function (data) {
            var ret = data[2];
            if (typeof ret === 'string') {
                return ret;
            }
            var arr = ret;
            return arr.join('');
        };
        RichApiMessageUtility.getResponseHeadersFromSafeArray = function (data) {
            var arrayHeader = data[1];
            if (!arrayHeader) {
                return null;
            }
            var headers = {};
            for (var i = 0; i < arrayHeader.length - 1; i += 2) {
                headers[arrayHeader[i]] = arrayHeader[i + 1];
            }
            return headers;
        };
        RichApiMessageUtility.getResponseStatusCode = function (result) {
            return RichApiMessageUtility.getResponseStatusCodeFromSafeArray(result.value.data);
        };
        RichApiMessageUtility.getResponseStatusCodeFromSafeArray = function (data) {
            return data[0];
        };
        RichApiMessageUtility.OfficeJsErrorCode_ooeInvalidOrTimedOutSession = 5012;
        RichApiMessageUtility.OfficeJsErrorCode_ooeActivityLimitReached = 5102;
        RichApiMessageUtility.OfficeJsErrorCode_ooeNoCapability = 7000;
        RichApiMessageUtility.OfficeJsErrorCode_ooeRequestPayloadSizeLimitExceeded = 5103;
        RichApiMessageUtility.OfficeJsErrorCode_ooeResponsePayloadSizeLimitExceeded = 5104;
        RichApiMessageUtility.OfficeJsErrorCode_ooeWriteNotSupportedWhenModalDialogOpen = 5016;
        RichApiMessageUtility.OfficeJsErrorCode_ooeInvalidSheetName = 1014;
        return RichApiMessageUtility;
    }());
    OfficeExtension_1.RichApiMessageUtility = RichApiMessageUtility;
    (function (_Internal) {
        function getPromiseType() {
            if (typeof Promise !== 'undefined') {
                return Promise;
            }
            if (typeof Office !== 'undefined') {
                if (Office.Promise) {
                    return Office.Promise;
                }
            }
            if (typeof OfficeExtension !== 'undefined') {
                if (OfficeExtension.Promise) {
                    return OfficeExtension.Promise;
                }
            }
            throw new _Internal.Error('No Promise implementation found');
        }
        _Internal.getPromiseType = getPromiseType;
    })(_Internal = OfficeExtension_1._Internal || (OfficeExtension_1._Internal = {}));
    var CoreUtility = (function () {
        function CoreUtility() {
        }
        CoreUtility.log = function (message) {
            if (CoreUtility._logEnabled && typeof console !== 'undefined' && console.log) {
                console.log(message);
            }
        };
        CoreUtility.checkArgumentNull = function (value, name) {
            if (CoreUtility.isNullOrUndefined(value)) {
                throw _Internal.RuntimeError._createInvalidArgError({ argumentName: name });
            }
        };
        CoreUtility.isNullOrUndefined = function (value) {
            if (value === null) {
                return true;
            }
            if (typeof value === 'undefined') {
                return true;
            }
            return false;
        };
        CoreUtility.isUndefined = function (value) {
            if (typeof value === 'undefined') {
                return true;
            }
            return false;
        };
        CoreUtility.isNullOrEmptyString = function (value) {
            if (value === null) {
                return true;
            }
            if (typeof value === 'undefined') {
                return true;
            }
            if (value.length == 0) {
                return true;
            }
            return false;
        };
        CoreUtility.isPlainJsonObject = function (value) {
            if (CoreUtility.isNullOrUndefined(value)) {
                return false;
            }
            if (typeof value !== 'object') {
                return false;
            }
            if (Object.prototype.toString.apply(value) !== '[object Object]') {
                return false;
            }
            if (value.constructor &&
                !Object.prototype.hasOwnProperty.call(value, 'constructor') &&
                !Object.prototype.hasOwnProperty.call(value.constructor.prototype, 'hasOwnProperty')) {
                return false;
            }
            for (var key in value) {
                if (!Object.prototype.hasOwnProperty.call(value, key)) {
                    return false;
                }
            }
            return true;
        };
        CoreUtility.trim = function (str) {
            return str.replace(new RegExp('^\\s+|\\s+$', 'g'), '');
        };
        CoreUtility.caseInsensitiveCompareString = function (str1, str2) {
            if (CoreUtility.isNullOrUndefined(str1)) {
                return CoreUtility.isNullOrUndefined(str2);
            }
            else {
                if (CoreUtility.isNullOrUndefined(str2)) {
                    return false;
                }
                else {
                    return str1.toUpperCase() == str2.toUpperCase();
                }
            }
        };
        CoreUtility.isReadonlyRestRequest = function (method) {
            return CoreUtility.caseInsensitiveCompareString(method, 'GET');
        };
        CoreUtility._getResourceString = function (resourceId, arg) {
            var ret;
            if (typeof window !== 'undefined' && window.Strings && window.Strings.OfficeOM) {
                var stringName = 'L_' + resourceId;
                var stringValue = window.Strings.OfficeOM[stringName];
                if (stringValue) {
                    ret = stringValue;
                }
            }
            if (!ret) {
                ret = CoreUtility.s_resourceStringValues[resourceId];
            }
            if (!ret) {
                ret = resourceId;
            }
            if (!CoreUtility.isNullOrUndefined(arg)) {
                if (Array.isArray(arg)) {
                    var arrArg = arg;
                    ret = CoreUtility._formatString(ret, arrArg);
                }
                else {
                    ret = ret.replace('{0}', arg);
                }
            }
            return ret;
        };
        CoreUtility._formatString = function (format, arrArg) {
            return format.replace(/\{\d\}/g, function (v) {
                var position = parseInt(v.substr(1, v.length - 2));
                if (position < arrArg.length) {
                    return arrArg[position];
                }
                else {
                    throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'format' });
                }
            });
        };
        Object.defineProperty(CoreUtility, "Promise", {
            get: function () {
                return _Internal.getPromiseType();
            },
            enumerable: true,
            configurable: true
        });
        CoreUtility.createPromise = function (executor) {
            var ret = new CoreUtility.Promise(executor);
            return ret;
        };
        CoreUtility._createPromiseFromResult = function (value) {
            return CoreUtility.createPromise(function (resolve, reject) {
                resolve(value);
            });
        };
        CoreUtility._createPromiseFromException = function (reason) {
            return CoreUtility.createPromise(function (resolve, reject) {
                reject(reason);
            });
        };
        CoreUtility._createTimeoutPromise = function (timeout) {
            return CoreUtility.createPromise(function (resolve, reject) {
                setTimeout(function () {
                    resolve(null);
                }, timeout);
            });
        };
        CoreUtility._createInvalidArgError = function (error) {
            return _Internal.RuntimeError._createInvalidArgError(error);
        };
        CoreUtility._isLocalDocumentUrl = function (url) {
            return CoreUtility._getLocalDocumentUrlPrefixLength(url) > 0;
        };
        CoreUtility._getLocalDocumentUrlPrefixLength = function (url) {
            var localDocumentPrefixes = [
                'http://document.localhost',
                'https://document.localhost',
                '//document.localhost'
            ];
            var urlLower = url.toLowerCase().trim();
            for (var i = 0; i < localDocumentPrefixes.length; i++) {
                if (urlLower === localDocumentPrefixes[i]) {
                    return localDocumentPrefixes[i].length;
                }
                else if (urlLower.substr(0, localDocumentPrefixes[i].length + 1) === localDocumentPrefixes[i] + '/') {
                    return localDocumentPrefixes[i].length + 1;
                }
            }
            return 0;
        };
        CoreUtility._validateLocalDocumentRequest = function (request) {
            var index = CoreUtility._getLocalDocumentUrlPrefixLength(request.url);
            if (index <= 0) {
                throw _Internal.RuntimeError._createInvalidArgError({
                    argumentName: 'request'
                });
            }
            var path = request.url.substr(index);
            var pathLower = path.toLowerCase();
            if (pathLower === '_api') {
                path = '';
            }
            else if (pathLower.substr(0, '_api/'.length) === '_api/') {
                path = path.substr('_api/'.length);
            }
            return {
                method: request.method,
                url: path,
                headers: request.headers,
                body: request.body
            };
        };
        CoreUtility._parseRequestFlagsAndCustomDataFromQueryStringIfAny = function (queryString) {
            var ret = { flags: -1, customData: '' };
            var parts = queryString.split('&');
            for (var i = 0; i < parts.length; i++) {
                var keyvalue = parts[i].split('=');
                if (keyvalue[0].toLowerCase() === CoreConstants.flags) {
                    var flags = parseInt(keyvalue[1]);
                    flags = flags & 8191;
                    ret.flags = flags;
                }
                else if (keyvalue[0].toLowerCase() === CoreConstants.customData) {
                    ret.customData = decodeURIComponent(keyvalue[1]);
                }
            }
            return ret;
        };
        CoreUtility._getRequestBodyText = function (request) {
            var body = '';
            if (typeof request.body === 'string') {
                body = request.body;
            }
            else if (request.body && typeof request.body === 'object') {
                body = JSON.stringify(request.body);
            }
            return body;
        };
        CoreUtility._parseResponseBody = function (response) {
            if (typeof response.body === 'string') {
                var bodyText = CoreUtility.trim(response.body);
                return JSON.parse(bodyText);
            }
            else {
                return response.body;
            }
        };
        CoreUtility._buildRequestMessageSafeArray = function (request) {
            var requestFlags = 0;
            if (!CoreUtility.isReadonlyRestRequest(request.method)) {
                requestFlags = 1;
            }
            var customData = '';
            if (request.url.substr(0, CoreConstants.processQuery.length).toLowerCase() ===
                CoreConstants.processQuery.toLowerCase()) {
                var index = request.url.indexOf('?');
                if (index > 0) {
                    var queryString = request.url.substr(index + 1);
                    var flagsAndCustomData = CoreUtility._parseRequestFlagsAndCustomDataFromQueryStringIfAny(queryString);
                    if (flagsAndCustomData.flags >= 0) {
                        requestFlags = flagsAndCustomData.flags;
                    }
                    customData = flagsAndCustomData.customData;
                }
            }
            return RichApiMessageUtility.buildRequestMessageSafeArray(customData, requestFlags, request.method, request.url, request.headers, CoreUtility._getRequestBodyText(request));
        };
        CoreUtility._parseHttpResponseHeaders = function (allResponseHeaders) {
            var responseHeaders = {};
            if (!CoreUtility.isNullOrEmptyString(allResponseHeaders)) {
                var regex = new RegExp('\r?\n');
                var entries = allResponseHeaders.split(regex);
                for (var i = 0; i < entries.length; i++) {
                    var entry = entries[i];
                    if (entry != null) {
                        var index = entry.indexOf(':');
                        if (index > 0) {
                            var key = entry.substr(0, index);
                            var value = entry.substr(index + 1);
                            key = CoreUtility.trim(key);
                            value = CoreUtility.trim(value);
                            responseHeaders[key.toUpperCase()] = value;
                        }
                    }
                }
            }
            return responseHeaders;
        };
        CoreUtility._parseErrorResponse = function (responseInfo) {
            var errorObj = CoreUtility._parseErrorResponseBody(responseInfo);
            var statusCode = responseInfo.statusCode.toString();
            if (CoreUtility.isNullOrUndefined(errorObj) || typeof errorObj !== 'object' || !errorObj.error) {
                return CoreUtility._createDefaultErrorResponse(statusCode);
            }
            var error = errorObj.error;
            var innerError = error.innerError;
            if (innerError && innerError.code) {
                return CoreUtility._createErrorResponse(innerError.code, statusCode, innerError.message);
            }
            if (error.code) {
                return CoreUtility._createErrorResponse(error.code, statusCode, error.message);
            }
            return CoreUtility._createDefaultErrorResponse(statusCode);
        };
        CoreUtility._parseErrorResponseBody = function (responseInfo) {
            if (CoreUtility.isPlainJsonObject(responseInfo.body)) {
                return responseInfo.body;
            }
            else if (!CoreUtility.isNullOrEmptyString(responseInfo.body)) {
                var errorResponseBody = CoreUtility.trim(responseInfo.body);
                try {
                    return JSON.parse(errorResponseBody);
                }
                catch (e) {
                    CoreUtility.log('Error when parse ' + errorResponseBody);
                }
            }
        };
        CoreUtility._createDefaultErrorResponse = function (statusCode) {
            return {
                errorCode: CoreErrorCodes.connectionFailure,
                errorMessage: CoreUtility._getResourceString(CoreResourceStrings.connectionFailureWithStatus, statusCode)
            };
        };
        CoreUtility._createErrorResponse = function (code, statusCode, message) {
            return {
                errorCode: code,
                errorMessage: CoreUtility._getResourceString(CoreResourceStrings.connectionFailureWithDetails, [
                    statusCode,
                    code,
                    message
                ])
            };
        };
        CoreUtility._copyHeaders = function (src, dest) {
            if (src && dest) {
                for (var key in src) {
                    dest[key] = src[key];
                }
            }
        };
        CoreUtility.addResourceStringValues = function (values) {
            for (var key in values) {
                CoreUtility.s_resourceStringValues[key] = values[key];
            }
        };
        CoreUtility._logEnabled = false;
        CoreUtility.s_resourceStringValues = {
            ApiNotFoundDetails: 'The method or property {0} is part of the {1} requirement set, which is not available in your version of {2}.',
            ConnectionFailureWithStatus: 'The request failed with status code of {0}.',
            ConnectionFailureWithDetails: 'The request failed with status code of {0}, error code {1} and the following error message: {2}',
            InvalidArgument: "The argument '{0}' doesn't work for this situation, is missing, or isn't in the right format.",
            InvalidObjectPath: 'The object path \'{0}\' isn\'t working for what you\'re trying to do. If you\'re using the object across multiple "context.sync" calls and outside the sequential execution of a ".run" batch, please use the "context.trackedObjects.add()" and "context.trackedObjects.remove()" methods to manage the object\'s lifetime.',
            InvalidRequestContext: 'Cannot use the object across different request contexts.',
            Timeout: 'The operation has timed out.',
            ValueNotLoaded: 'The value of the result object has not been loaded yet. Before reading the value property, call "context.sync()" on the associated request context.'
        };
        return CoreUtility;
    }());
    OfficeExtension_1.CoreUtility = CoreUtility;
    var TestUtility = (function () {
        function TestUtility() {
        }
        TestUtility.setMock = function (value) {
            TestUtility.s_isMock = value;
        };
        TestUtility.isMock = function () {
            return TestUtility.s_isMock;
        };
        return TestUtility;
    }());
    OfficeExtension_1.TestUtility = TestUtility;
    OfficeExtension_1._internalConfig = {
        showDisposeInfoInDebugInfo: false,
        showInternalApiInDebugInfo: false,
        enableEarlyDispose: true,
        alwaysPolyfillClientObjectUpdateMethod: false,
        alwaysPolyfillClientObjectRetrieveMethod: false,
        enableConcurrentFlag: true,
        enableUndoableFlag: true,
        appendTypeNameToObjectPathInfo: false,
        enablePreviewExecution: false
    };
    OfficeExtension_1.config = {
        extendedErrorLogging: false
    };
    var CommonActionFactory = (function () {
        function CommonActionFactory() {
        }
        CommonActionFactory.createSetPropertyAction = function (context, parent, propertyName, value, flags) {
            CommonUtility.validateObjectPath(parent);
            var actionInfo = {
                Id: context._nextId(),
                ActionType: 4,
                Name: propertyName,
                ObjectPathId: parent._objectPath.objectPathInfo.Id,
                ArgumentInfo: {}
            };
            var args = [value];
            var referencedArgumentObjectPaths = CommonUtility.setMethodArguments(context, actionInfo.ArgumentInfo, args);
            CommonUtility.validateReferencedObjectPaths(referencedArgumentObjectPaths);
            var action = new Action(actionInfo, 0, flags);
            action.referencedObjectPath = parent._objectPath;
            action.referencedArgumentObjectPaths = referencedArgumentObjectPaths;
            if (OfficeExtension_1._internalConfig.enablePreviewExecution && (flags & 16) !== 0) {
                var previewExecutionAction = {
                    Id: context._nextId(),
                    ActionType: 4,
                    Name: propertyName,
                    ObjectId: '',
                    ObjectType: '',
                    Arguments: [value]
                };
                parent._addPreviewExecutionAction(previewExecutionAction);
            }
            return parent._addAction(action);
        };
        CommonActionFactory.createQueryAction = function (context, parent, queryOption, resultHandler) {
            CommonUtility.validateObjectPath(parent);
            var actionInfo = {
                Id: context._nextId(),
                ActionType: 2,
                Name: '',
                ObjectPathId: parent._objectPath.objectPathInfo.Id,
                QueryInfo: queryOption
            };
            var action = new Action(actionInfo, 1, 4);
            action.referencedObjectPath = parent._objectPath;
            return parent._addAction(action, resultHandler);
        };
        CommonActionFactory.createQueryAsJsonAction = function (context, parent, queryOption, resultHandler) {
            CommonUtility.validateObjectPath(parent);
            var actionInfo = {
                Id: context._nextId(),
                ActionType: 7,
                Name: '',
                ObjectPathId: parent._objectPath.objectPathInfo.Id,
                QueryInfo: queryOption
            };
            var action = new Action(actionInfo, 1, 4);
            action.referencedObjectPath = parent._objectPath;
            return parent._addAction(action, resultHandler);
        };
        CommonActionFactory.createUpdateAction = function (context, parent, objectState) {
            CommonUtility.validateObjectPath(parent);
            var actionInfo = {
                Id: context._nextId(),
                ActionType: 9,
                Name: '',
                ObjectPathId: parent._objectPath.objectPathInfo.Id,
                ObjectState: objectState
            };
            var action = new Action(actionInfo, 0, 0);
            action.referencedObjectPath = parent._objectPath;
            return parent._addAction(action);
        };
        return CommonActionFactory;
    }());
    OfficeExtension_1.CommonActionFactory = CommonActionFactory;
    var ClientObjectBase = (function () {
        function ClientObjectBase(contextBase, objectPath) {
            this.m_contextBase = contextBase;
            this.m_objectPath = objectPath;
        }
        Object.defineProperty(ClientObjectBase.prototype, "_objectPath", {
            get: function () {
                return this.m_objectPath;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientObjectBase.prototype, "_context", {
            get: function () {
                return this.m_contextBase;
            },
            enumerable: true,
            configurable: true
        });
        ClientObjectBase.prototype._addAction = function (action, resultHandler) {
            var _this = this;
            if (resultHandler === void 0) {
                resultHandler = null;
            }
            return CoreUtility.createPromise(function (resolve, reject) {
                _this._context._addServiceApiAction(action, resultHandler, resolve, reject);
            });
        };
        ClientObjectBase.prototype._addPreviewExecutionAction = function (action) {
        };
        ClientObjectBase.prototype._retrieve = function (option, resultHandler) {
            var shouldPolyfill = OfficeExtension_1._internalConfig.alwaysPolyfillClientObjectRetrieveMethod;
            if (!shouldPolyfill) {
                shouldPolyfill = !CommonUtility.isSetSupported('RichApiRuntime', '1.1');
            }
            var queryOption = ClientRequestContextBase._parseQueryOption(option);
            if (shouldPolyfill) {
                return CommonActionFactory.createQueryAction(this._context, this, queryOption, resultHandler);
            }
            return CommonActionFactory.createQueryAsJsonAction(this._context, this, queryOption, resultHandler);
        };
        ClientObjectBase.prototype._recursivelyUpdate = function (properties) {
            var shouldPolyfill = OfficeExtension_1._internalConfig.alwaysPolyfillClientObjectUpdateMethod;
            if (!shouldPolyfill) {
                shouldPolyfill = !CommonUtility.isSetSupported('RichApiRuntime', '1.2');
            }
            try {
                var scalarPropNames = this[CommonConstants.scalarPropertyNames];
                if (!scalarPropNames) {
                    scalarPropNames = [];
                }
                var scalarPropUpdatable = this[CommonConstants.scalarPropertyUpdateable];
                if (!scalarPropUpdatable) {
                    scalarPropUpdatable = [];
                    for (var i = 0; i < scalarPropNames.length; i++) {
                        scalarPropUpdatable.push(false);
                    }
                }
                var navigationPropNames = this[CommonConstants.navigationPropertyNames];
                if (!navigationPropNames) {
                    navigationPropNames = [];
                }
                var scalarProps = {};
                var navigationProps = {};
                var scalarPropCount = 0;
                for (var propName in properties) {
                    var index = scalarPropNames.indexOf(propName);
                    if (index >= 0) {
                        if (!scalarPropUpdatable[index]) {
                            throw new _Internal.RuntimeError({
                                code: CoreErrorCodes.invalidArgument,
                                httpStatusCode: 400,
                                message: CoreUtility._getResourceString(CommonResourceStrings.attemptingToSetReadOnlyProperty, propName),
                                debugInfo: {
                                    errorLocation: propName
                                }
                            });
                        }
                        scalarProps[propName] = properties[propName];
                        ++scalarPropCount;
                    }
                    else if (navigationPropNames.indexOf(propName) >= 0) {
                        navigationProps[propName] = properties[propName];
                    }
                    else {
                        throw new _Internal.RuntimeError({
                            code: CoreErrorCodes.invalidArgument,
                            httpStatusCode: 400,
                            message: CoreUtility._getResourceString(CommonResourceStrings.propertyDoesNotExist, propName),
                            debugInfo: {
                                errorLocation: propName
                            }
                        });
                    }
                }
                if (scalarPropCount > 0) {
                    if (shouldPolyfill) {
                        for (var i = 0; i < scalarPropNames.length; i++) {
                            var propName = scalarPropNames[i];
                            var propValue = scalarProps[propName];
                            if (!CommonUtility.isUndefined(propValue)) {
                                CommonActionFactory.createSetPropertyAction(this._context, this, propName, propValue);
                            }
                        }
                    }
                    else {
                        CommonActionFactory.createUpdateAction(this._context, this, scalarProps);
                    }
                }
                for (var propName in navigationProps) {
                    var navigationPropProxy = this[propName];
                    var navigationPropValue = navigationProps[propName];
                    navigationPropProxy._recursivelyUpdate(navigationPropValue);
                }
            }
            catch (innerError) {
                throw new _Internal.RuntimeError({
                    code: CoreErrorCodes.invalidArgument,
                    httpStatusCode: 400,
                    message: CoreUtility._getResourceString(CoreResourceStrings.invalidArgument, 'properties'),
                    debugInfo: {
                        errorLocation: this._className + '.update'
                    },
                    innerError: innerError
                });
            }
        };
        return ClientObjectBase;
    }());
    OfficeExtension_1.ClientObjectBase = ClientObjectBase;
    var Action = (function () {
        function Action(actionInfo, operationType, flags) {
            this.m_actionInfo = actionInfo;
            this.m_operationType = operationType;
            this.m_flags = flags;
        }
        Object.defineProperty(Action.prototype, "actionInfo", {
            get: function () {
                return this.m_actionInfo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Action.prototype, "operationType", {
            get: function () {
                return this.m_operationType;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Action.prototype, "flags", {
            get: function () {
                return this.m_flags;
            },
            enumerable: true,
            configurable: true
        });
        return Action;
    }());
    OfficeExtension_1.Action = Action;
    var ObjectPath = (function () {
        function ObjectPath(objectPathInfo, parentObjectPath, isCollection, isInvalidAfterRequest, operationType, flags) {
            this.m_objectPathInfo = objectPathInfo;
            this.m_parentObjectPath = parentObjectPath;
            this.m_isCollection = isCollection;
            this.m_isInvalidAfterRequest = isInvalidAfterRequest;
            this.m_isValid = true;
            this.m_operationType = operationType;
            this.m_flags = flags;
        }
        Object.defineProperty(ObjectPath.prototype, "id", {
            get: function () {
                var argumentInfo = this.m_objectPathInfo.ArgumentInfo;
                if (!argumentInfo) {
                    return undefined;
                }
                var argument = argumentInfo.Arguments;
                if (!argument) {
                    return undefined;
                }
                return argument[0];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "parent", {
            get: function () {
                var parent = this.m_parentObjectPath;
                if (!parent) {
                    return undefined;
                }
                return parent;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "parentId", {
            get: function () {
                return this.parent ? this.parent.id : undefined;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "objectPathInfo", {
            get: function () {
                return this.m_objectPathInfo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "operationType", {
            get: function () {
                return this.m_operationType;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "flags", {
            get: function () {
                return this.m_flags;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "isCollection", {
            get: function () {
                return this.m_isCollection;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "isInvalidAfterRequest", {
            get: function () {
                return this.m_isInvalidAfterRequest;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "parentObjectPath", {
            get: function () {
                return this.m_parentObjectPath;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "argumentObjectPaths", {
            get: function () {
                return this.m_argumentObjectPaths;
            },
            set: function (value) {
                this.m_argumentObjectPaths = value;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "isValid", {
            get: function () {
                return this.m_isValid;
            },
            set: function (value) {
                this.m_isValid = value;
                if (!value &&
                    this.m_objectPathInfo.ObjectPathType === 6 &&
                    this.m_savedObjectPathInfo) {
                    ObjectPath.copyObjectPathInfo(this.m_savedObjectPathInfo.pathInfo, this.m_objectPathInfo);
                    this.m_parentObjectPath = this.m_savedObjectPathInfo.parent;
                    this.m_isValid = true;
                    this.m_savedObjectPathInfo = null;
                }
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "originalObjectPathInfo", {
            get: function () {
                return this.m_originalObjectPathInfo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ObjectPath.prototype, "getByIdMethodName", {
            get: function () {
                return this.m_getByIdMethodName;
            },
            set: function (value) {
                this.m_getByIdMethodName = value;
            },
            enumerable: true,
            configurable: true
        });
        ObjectPath.prototype._updateAsNullObject = function () {
            this.resetForUpdateUsingObjectData();
            this.m_objectPathInfo.ObjectPathType = 7;
            this.m_objectPathInfo.Name = '';
            this.m_parentObjectPath = null;
        };
        ObjectPath.prototype.saveOriginalObjectPathInfo = function () {
            if (OfficeExtension_1.config.extendedErrorLogging && !this.m_originalObjectPathInfo) {
                this.m_originalObjectPathInfo = {};
                ObjectPath.copyObjectPathInfo(this.m_objectPathInfo, this.m_originalObjectPathInfo);
            }
        };
        ObjectPath.prototype.updateUsingObjectData = function (value, clientObject) {
            var referenceId = value[CommonConstants.referenceId];
            if (!CoreUtility.isNullOrEmptyString(referenceId)) {
                if (!this.m_savedObjectPathInfo &&
                    !this.isInvalidAfterRequest &&
                    ObjectPath.isRestorableObjectPath(this.m_objectPathInfo.ObjectPathType)) {
                    var pathInfo = {};
                    ObjectPath.copyObjectPathInfo(this.m_objectPathInfo, pathInfo);
                    this.m_savedObjectPathInfo = {
                        pathInfo: pathInfo,
                        parent: this.m_parentObjectPath
                    };
                }
                this.saveOriginalObjectPathInfo();
                this.resetForUpdateUsingObjectData();
                this.m_objectPathInfo.ObjectPathType = 6;
                this.m_objectPathInfo.Name = referenceId;
                delete this.m_objectPathInfo.ParentObjectPathId;
                this.m_parentObjectPath = null;
                return;
            }
            if (clientObject) {
                var collectionPropertyPath = clientObject[CommonConstants.collectionPropertyPath];
                if (!CoreUtility.isNullOrEmptyString(collectionPropertyPath) && clientObject.context) {
                    var id = CommonUtility.tryGetObjectIdFromLoadOrRetrieveResult(value);
                    if (!CoreUtility.isNullOrUndefined(id)) {
                        var propNames = collectionPropertyPath.split('.');
                        var parent_1 = clientObject.context[propNames[0]];
                        for (var i = 1; i < propNames.length; i++) {
                            parent_1 = parent_1[propNames[i]];
                        }
                        this.saveOriginalObjectPathInfo();
                        this.resetForUpdateUsingObjectData();
                        this.m_parentObjectPath = parent_1._objectPath;
                        this.m_objectPathInfo.ParentObjectPathId = this.m_parentObjectPath.objectPathInfo.Id;
                        this.m_objectPathInfo.ObjectPathType = 5;
                        this.m_objectPathInfo.Name = '';
                        this.m_objectPathInfo.ArgumentInfo.Arguments = [id];
                        return;
                    }
                }
            }
            var parentIsCollection = this.parentObjectPath && this.parentObjectPath.isCollection;
            var getByIdMethodName = this.getByIdMethodName;
            if (parentIsCollection || !CoreUtility.isNullOrEmptyString(getByIdMethodName)) {
                var id = CommonUtility.tryGetObjectIdFromLoadOrRetrieveResult(value);
                if (!CoreUtility.isNullOrUndefined(id)) {
                    this.saveOriginalObjectPathInfo();
                    this.resetForUpdateUsingObjectData();
                    if (!CoreUtility.isNullOrEmptyString(getByIdMethodName)) {
                        this.m_objectPathInfo.ObjectPathType = 3;
                        this.m_objectPathInfo.Name = getByIdMethodName;
                    }
                    else {
                        this.m_objectPathInfo.ObjectPathType = 5;
                        this.m_objectPathInfo.Name = '';
                    }
                    this.m_objectPathInfo.ArgumentInfo.Arguments = [id];
                    return;
                }
            }
        };
        ObjectPath.prototype.resetForUpdateUsingObjectData = function () {
            this.m_isInvalidAfterRequest = false;
            this.m_isValid = true;
            this.m_operationType = 1;
            this.m_flags = 4;
            this.m_objectPathInfo.ArgumentInfo = {};
            this.m_argumentObjectPaths = null;
            this.m_getByIdMethodName = null;
        };
        ObjectPath.isRestorableObjectPath = function (objectPathType) {
            return (objectPathType === 1 ||
                objectPathType === 5 ||
                objectPathType === 3 ||
                objectPathType === 4);
        };
        ObjectPath.copyObjectPathInfo = function (src, dest) {
            dest.Id = src.Id;
            dest.ArgumentInfo = src.ArgumentInfo;
            dest.Name = src.Name;
            dest.ObjectPathType = src.ObjectPathType;
            dest.ParentObjectPathId = src.ParentObjectPathId;
        };
        return ObjectPath;
    }());
    OfficeExtension_1.ObjectPath = ObjectPath;
    var ClientRequestContextBase = (function () {
        function ClientRequestContextBase() {
            this.m_nextId = 0;
        }
        ClientRequestContextBase.prototype._nextId = function () {
            return ++this.m_nextId;
        };
        ClientRequestContextBase.prototype._addServiceApiAction = function (action, resultHandler, resolve, reject) {
            if (!this.m_serviceApiQueue) {
                this.m_serviceApiQueue = new ServiceApiQueue(this);
            }
            this.m_serviceApiQueue.add(action, resultHandler, resolve, reject);
        };
        ClientRequestContextBase._parseQueryOption = function (option) {
            var queryOption = {};
            if (typeof option === 'string') {
                var select = option;
                queryOption.Select = CommonUtility._parseSelectExpand(select);
            }
            else if (Array.isArray(option)) {
                queryOption.Select = option;
            }
            else if (typeof option === 'object') {
                var loadOption = option;
                if (ClientRequestContextBase.isLoadOption(loadOption)) {
                    if (typeof loadOption.select === 'string') {
                        queryOption.Select = CommonUtility._parseSelectExpand(loadOption.select);
                    }
                    else if (Array.isArray(loadOption.select)) {
                        queryOption.Select = loadOption.select;
                    }
                    else if (!CommonUtility.isNullOrUndefined(loadOption.select)) {
                        throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'option.select' });
                    }
                    if (typeof loadOption.expand === 'string') {
                        queryOption.Expand = CommonUtility._parseSelectExpand(loadOption.expand);
                    }
                    else if (Array.isArray(loadOption.expand)) {
                        queryOption.Expand = loadOption.expand;
                    }
                    else if (!CommonUtility.isNullOrUndefined(loadOption.expand)) {
                        throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'option.expand' });
                    }
                    if (typeof loadOption.top === 'number') {
                        queryOption.Top = loadOption.top;
                    }
                    else if (!CommonUtility.isNullOrUndefined(loadOption.top)) {
                        throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'option.top' });
                    }
                    if (typeof loadOption.skip === 'number') {
                        queryOption.Skip = loadOption.skip;
                    }
                    else if (!CommonUtility.isNullOrUndefined(loadOption.skip)) {
                        throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'option.skip' });
                    }
                }
                else {
                    queryOption = ClientRequestContextBase.parseStrictLoadOption(option);
                }
            }
            else if (!CommonUtility.isNullOrUndefined(option)) {
                throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'option' });
            }
            return queryOption;
        };
        ClientRequestContextBase.isLoadOption = function (loadOption) {
            if (!CommonUtility.isUndefined(loadOption.select) &&
                (typeof loadOption.select === 'string' || Array.isArray(loadOption.select)))
                return true;
            if (!CommonUtility.isUndefined(loadOption.expand) &&
                (typeof loadOption.expand === 'string' || Array.isArray(loadOption.expand)))
                return true;
            if (!CommonUtility.isUndefined(loadOption.top) && typeof loadOption.top === 'number')
                return true;
            if (!CommonUtility.isUndefined(loadOption.skip) && typeof loadOption.skip === 'number')
                return true;
            for (var i in loadOption) {
                return false;
            }
            return true;
        };
        ClientRequestContextBase.parseStrictLoadOption = function (option) {
            var ret = { Select: [] };
            ClientRequestContextBase.parseStrictLoadOptionHelper(ret, '', 'option', option);
            return ret;
        };
        ClientRequestContextBase.combineQueryPath = function (pathPrefix, key, separator) {
            if (pathPrefix.length === 0) {
                return key;
            }
            else {
                return pathPrefix + separator + key;
            }
        };
        ClientRequestContextBase.parseStrictLoadOptionHelper = function (queryInfo, pathPrefix, argPrefix, option) {
            for (var key in option) {
                var value = option[key];
                if (key === '$all') {
                    if (typeof value !== 'boolean') {
                        throw _Internal.RuntimeError._createInvalidArgError({
                            argumentName: ClientRequestContextBase.combineQueryPath(argPrefix, key, '.')
                        });
                    }
                    if (value) {
                        queryInfo.Select.push(ClientRequestContextBase.combineQueryPath(pathPrefix, '*', '/'));
                    }
                }
                else if (key === '$top') {
                    if (typeof value !== 'number' || pathPrefix.length > 0) {
                        throw _Internal.RuntimeError._createInvalidArgError({
                            argumentName: ClientRequestContextBase.combineQueryPath(argPrefix, key, '.')
                        });
                    }
                    queryInfo.Top = value;
                }
                else if (key === '$skip') {
                    if (typeof value !== 'number' || pathPrefix.length > 0) {
                        throw _Internal.RuntimeError._createInvalidArgError({
                            argumentName: ClientRequestContextBase.combineQueryPath(argPrefix, key, '.')
                        });
                    }
                    queryInfo.Skip = value;
                }
                else {
                    if (typeof value === 'boolean') {
                        if (value) {
                            queryInfo.Select.push(ClientRequestContextBase.combineQueryPath(pathPrefix, key, '/'));
                        }
                    }
                    else if (typeof value === 'object') {
                        ClientRequestContextBase.parseStrictLoadOptionHelper(queryInfo, ClientRequestContextBase.combineQueryPath(pathPrefix, key, '/'), ClientRequestContextBase.combineQueryPath(argPrefix, key, '.'), value);
                    }
                    else {
                        throw _Internal.RuntimeError._createInvalidArgError({
                            argumentName: ClientRequestContextBase.combineQueryPath(argPrefix, key, '.')
                        });
                    }
                }
            }
        };
        return ClientRequestContextBase;
    }());
    OfficeExtension_1.ClientRequestContextBase = ClientRequestContextBase;
    var InstantiateActionUpdateObjectPathHandler = (function () {
        function InstantiateActionUpdateObjectPathHandler(m_objectPath) {
            this.m_objectPath = m_objectPath;
        }
        InstantiateActionUpdateObjectPathHandler.prototype._handleResult = function (value) {
            if (CoreUtility.isNullOrUndefined(value)) {
                this.m_objectPath._updateAsNullObject();
            }
            else {
                this.m_objectPath.updateUsingObjectData(value, null);
            }
        };
        return InstantiateActionUpdateObjectPathHandler;
    }());
    var ClientRequestBase = (function () {
        function ClientRequestBase(context) {
            this.m_contextBase = context;
            this.m_actions = [];
            this.m_actionResultHandler = {};
            this.m_referencedObjectPaths = {};
            this.m_instantiatedObjectPaths = {};
            this.m_preSyncPromises = [];
            this.m_previewExecutionActions = [];
        }
        ClientRequestBase.prototype.addAction = function (action) {
            this.m_actions.push(action);
            if (action.actionInfo.ActionType == 1) {
                this.m_instantiatedObjectPaths[action.actionInfo.ObjectPathId] = action;
            }
        };
        ClientRequestBase.prototype.addPreviewExecutionAction = function (action) {
            this.m_previewExecutionActions.push(action);
        };
        Object.defineProperty(ClientRequestBase.prototype, "hasActions", {
            get: function () {
                return this.m_actions.length > 0;
            },
            enumerable: true,
            configurable: true
        });
        ClientRequestBase.prototype._getLastAction = function () {
            return this.m_actions[this.m_actions.length - 1];
        };
        ClientRequestBase.prototype.ensureInstantiateObjectPath = function (objectPath) {
            if (objectPath) {
                if (this.m_instantiatedObjectPaths[objectPath.objectPathInfo.Id]) {
                    return;
                }
                this.ensureInstantiateObjectPath(objectPath.parentObjectPath);
                this.ensureInstantiateObjectPaths(objectPath.argumentObjectPaths);
                if (!this.m_instantiatedObjectPaths[objectPath.objectPathInfo.Id]) {
                    var actionInfo = {
                        Id: this.m_contextBase._nextId(),
                        ActionType: 1,
                        Name: '',
                        ObjectPathId: objectPath.objectPathInfo.Id
                    };
                    var instantiateAction = new Action(actionInfo, 1, 4);
                    instantiateAction.referencedObjectPath = objectPath;
                    this.addReferencedObjectPath(objectPath);
                    this.addAction(instantiateAction);
                    var resultHandler = new InstantiateActionUpdateObjectPathHandler(objectPath);
                    this.addActionResultHandler(instantiateAction, resultHandler);
                }
            }
        };
        ClientRequestBase.prototype.ensureInstantiateObjectPaths = function (objectPaths) {
            if (objectPaths) {
                for (var i = 0; i < objectPaths.length; i++) {
                    this.ensureInstantiateObjectPath(objectPaths[i]);
                }
            }
        };
        ClientRequestBase.prototype.addReferencedObjectPath = function (objectPath) {
            if (!objectPath || this.m_referencedObjectPaths[objectPath.objectPathInfo.Id]) {
                return;
            }
            if (!objectPath.isValid) {
                throw new _Internal.RuntimeError({
                    code: CoreErrorCodes.invalidObjectPath,
                    httpStatusCode: 400,
                    message: CoreUtility._getResourceString(CoreResourceStrings.invalidObjectPath, CommonUtility.getObjectPathExpression(objectPath)),
                    debugInfo: {
                        errorLocation: CommonUtility.getObjectPathExpression(objectPath)
                    }
                });
            }
            while (objectPath) {
                this.m_referencedObjectPaths[objectPath.objectPathInfo.Id] = objectPath;
                if (objectPath.objectPathInfo.ObjectPathType == 3) {
                    this.addReferencedObjectPaths(objectPath.argumentObjectPaths);
                }
                objectPath = objectPath.parentObjectPath;
            }
        };
        ClientRequestBase.prototype.addReferencedObjectPaths = function (objectPaths) {
            if (objectPaths) {
                for (var i = 0; i < objectPaths.length; i++) {
                    this.addReferencedObjectPath(objectPaths[i]);
                }
            }
        };
        ClientRequestBase.prototype.addActionResultHandler = function (action, resultHandler) {
            this.m_actionResultHandler[action.actionInfo.Id] = resultHandler;
        };
        ClientRequestBase.prototype.aggregrateRequestFlags = function (requestFlags, operationType, flags) {
            if (operationType === 0) {
                requestFlags = requestFlags | 1;
                if ((flags & 2) === 0) {
                    requestFlags = requestFlags & ~16;
                }
                if ((flags & 8) === 0) {
                    requestFlags = requestFlags & ~256;
                }
                requestFlags = requestFlags & ~4;
            }
            if (flags & 1) {
                requestFlags = requestFlags | 2;
            }
            if ((flags & 4) === 0) {
                requestFlags = requestFlags & ~4;
            }
            return requestFlags;
        };
        ClientRequestBase.prototype.finallyNormalizeFlags = function (requestFlags) {
            if ((requestFlags & 1) === 0) {
                requestFlags = requestFlags & ~16;
                requestFlags = requestFlags & ~256;
            }
            if (!OfficeExtension_1._internalConfig.enableConcurrentFlag) {
                requestFlags = requestFlags & ~4;
            }
            if (!OfficeExtension_1._internalConfig.enableUndoableFlag) {
                requestFlags = requestFlags & ~16;
            }
            if (!CommonUtility.isSetSupported('RichApiRuntimeFlag', '1.1')) {
                requestFlags = requestFlags & ~4;
                requestFlags = requestFlags & ~16;
            }
            if (!CommonUtility.isSetSupported('RichApiRuntimeFlag', '1.2')) {
                requestFlags = requestFlags & ~256;
            }
            if (typeof this.m_flagsForTesting === 'number') {
                requestFlags = this.m_flagsForTesting;
            }
            return requestFlags;
        };
        ClientRequestBase.prototype.buildRequestMessageBodyAndRequestFlags = function () {
            if (OfficeExtension_1._internalConfig.enableEarlyDispose) {
                ClientRequestBase._calculateLastUsedObjectPathIds(this.m_actions);
            }
            var requestFlags = 4 |
                16 |
                256;
            var objectPaths = {};
            for (var i in this.m_referencedObjectPaths) {
                requestFlags = this.aggregrateRequestFlags(requestFlags, this.m_referencedObjectPaths[i].operationType, this.m_referencedObjectPaths[i].flags);
                objectPaths[i] = this.m_referencedObjectPaths[i].objectPathInfo;
            }
            var actions = [];
            var hasKeepReference = false;
            for (var index = 0; index < this.m_actions.length; index++) {
                var action = this.m_actions[index];
                if (action.actionInfo.ActionType === 3 &&
                    action.actionInfo.Name === CommonConstants.keepReference) {
                    hasKeepReference = true;
                }
                requestFlags = this.aggregrateRequestFlags(requestFlags, action.operationType, action.flags);
                actions.push(action.actionInfo);
            }
            requestFlags = this.finallyNormalizeFlags(requestFlags);
            var body = {
                AutoKeepReference: this.m_contextBase._autoCleanup && hasKeepReference,
                Actions: actions,
                ObjectPaths: objectPaths
            };
            if (this.m_previewExecutionActions.length > 0) {
                body.PreviewExecutionActions = this.m_previewExecutionActions;
                requestFlags = requestFlags | 4096;
            }
            return {
                body: body,
                flags: requestFlags
            };
        };
        ClientRequestBase.prototype.processResponse = function (actionResults) {
            if (actionResults) {
                for (var i = 0; i < actionResults.length; i++) {
                    var actionResult = actionResults[i];
                    var handler = this.m_actionResultHandler[actionResult.ActionId];
                    if (handler) {
                        handler._handleResult(actionResult.Value);
                    }
                }
            }
        };
        ClientRequestBase.prototype.invalidatePendingInvalidObjectPaths = function () {
            for (var i in this.m_referencedObjectPaths) {
                if (this.m_referencedObjectPaths[i].isInvalidAfterRequest) {
                    this.m_referencedObjectPaths[i].isValid = false;
                }
            }
        };
        ClientRequestBase.prototype._addPreSyncPromise = function (value) {
            this.m_preSyncPromises.push(value);
        };
        Object.defineProperty(ClientRequestBase.prototype, "_preSyncPromises", {
            get: function () {
                return this.m_preSyncPromises;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequestBase.prototype, "_actions", {
            get: function () {
                return this.m_actions;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequestBase.prototype, "_objectPaths", {
            get: function () {
                return this.m_referencedObjectPaths;
            },
            enumerable: true,
            configurable: true
        });
        ClientRequestBase.prototype._removeKeepReferenceAction = function (objectPathId) {
            for (var i = this.m_actions.length - 1; i >= 0; i--) {
                var actionInfo = this.m_actions[i].actionInfo;
                if (actionInfo.ObjectPathId === objectPathId &&
                    actionInfo.ActionType === 3 &&
                    actionInfo.Name === CommonConstants.keepReference) {
                    this.m_actions.splice(i, 1);
                    break;
                }
            }
        };
        ClientRequestBase._updateLastUsedActionIdOfObjectPathId = function (lastUsedActionIdOfObjectPathId, objectPath, actionId) {
            while (objectPath) {
                if (lastUsedActionIdOfObjectPathId[objectPath.objectPathInfo.Id]) {
                    return;
                }
                lastUsedActionIdOfObjectPathId[objectPath.objectPathInfo.Id] = actionId;
                var argumentObjectPaths = objectPath.argumentObjectPaths;
                if (argumentObjectPaths) {
                    var argumentObjectPathsLength = argumentObjectPaths.length;
                    for (var i = 0; i < argumentObjectPathsLength; i++) {
                        ClientRequestBase._updateLastUsedActionIdOfObjectPathId(lastUsedActionIdOfObjectPathId, argumentObjectPaths[i], actionId);
                    }
                }
                objectPath = objectPath.parentObjectPath;
            }
        };
        ClientRequestBase._calculateLastUsedObjectPathIds = function (actions) {
            var lastUsedActionIdOfObjectPathId = {};
            var actionsLength = actions.length;
            for (var index = actionsLength - 1; index >= 0; --index) {
                var action = actions[index];
                var actionId = action.actionInfo.Id;
                if (action.referencedObjectPath) {
                    ClientRequestBase._updateLastUsedActionIdOfObjectPathId(lastUsedActionIdOfObjectPathId, action.referencedObjectPath, actionId);
                }
                var referencedObjectPaths = action.referencedArgumentObjectPaths;
                if (referencedObjectPaths) {
                    var referencedObjectPathsLength = referencedObjectPaths.length;
                    for (var refIndex = 0; refIndex < referencedObjectPathsLength; refIndex++) {
                        ClientRequestBase._updateLastUsedActionIdOfObjectPathId(lastUsedActionIdOfObjectPathId, referencedObjectPaths[refIndex], actionId);
                    }
                }
            }
            var lastUsedObjectPathIdsOfAction = {};
            for (var key in lastUsedActionIdOfObjectPathId) {
                var actionId = lastUsedActionIdOfObjectPathId[key];
                var objectPathIds = lastUsedObjectPathIdsOfAction[actionId];
                if (!objectPathIds) {
                    objectPathIds = [];
                    lastUsedObjectPathIdsOfAction[actionId] = objectPathIds;
                }
                objectPathIds.push(parseInt(key));
            }
            for (var index = 0; index < actionsLength; index++) {
                var action = actions[index];
                var lastUsedObjectPathIds = lastUsedObjectPathIdsOfAction[action.actionInfo.Id];
                if (lastUsedObjectPathIds && lastUsedObjectPathIds.length > 0) {
                    action.actionInfo.L = lastUsedObjectPathIds;
                }
                else if (action.actionInfo.L) {
                    delete action.actionInfo.L;
                }
            }
        };
        return ClientRequestBase;
    }());
    OfficeExtension_1.ClientRequestBase = ClientRequestBase;
    var ClientResult = (function () {
        function ClientResult(m_type) {
            this.m_type = m_type;
        }
        Object.defineProperty(ClientResult.prototype, "value", {
            get: function () {
                if (!this.m_isLoaded) {
                    throw new _Internal.RuntimeError({
                        code: CoreErrorCodes.valueNotLoaded,
                        httpStatusCode: 400,
                        message: CoreUtility._getResourceString(CoreResourceStrings.valueNotLoaded),
                        debugInfo: {
                            errorLocation: 'clientResult.value'
                        }
                    });
                }
                return this.m_value;
            },
            enumerable: true,
            configurable: true
        });
        ClientResult.prototype._handleResult = function (value) {
            this.m_isLoaded = true;
            if (typeof value === 'object' && value && value._IsNull) {
                return;
            }
            if (this.m_type === 1) {
                this.m_value = CommonUtility.adjustToDateTime(value);
            }
            else {
                this.m_value = value;
            }
        };
        return ClientResult;
    }());
    OfficeExtension_1.ClientResult = ClientResult;
    var ServiceApiQueue = (function () {
        function ServiceApiQueue(m_context) {
            this.m_context = m_context;
            this.m_actions = [];
        }
        ServiceApiQueue.prototype.add = function (action, resultHandler, resolve, reject) {
            var _this = this;
            this.m_actions.push({ action: action, resultHandler: resultHandler, resolve: resolve, reject: reject });
            if (this.m_actions.length === 1) {
                setTimeout(function () { return _this.processActions(); }, 0);
            }
        };
        ServiceApiQueue.prototype.processActions = function () {
            var _this = this;
            if (this.m_actions.length === 0) {
                return;
            }
            var actions = this.m_actions;
            this.m_actions = [];
            var request = new ClientRequestBase(this.m_context);
            for (var i = 0; i < actions.length; i++) {
                var action = actions[i];
                request.ensureInstantiateObjectPath(action.action.referencedObjectPath);
                request.ensureInstantiateObjectPaths(action.action.referencedArgumentObjectPaths);
                request.addAction(action.action);
                request.addReferencedObjectPath(action.action.referencedObjectPath);
                request.addReferencedObjectPaths(action.action.referencedArgumentObjectPaths);
            }
            var _a = request.buildRequestMessageBodyAndRequestFlags(), body = _a.body, flags = _a.flags;
            var requestMessage = {
                Url: CoreConstants.localDocumentApiPrefix,
                Headers: null,
                Body: body
            };
            CoreUtility.log('Request:');
            CoreUtility.log(JSON.stringify(body));
            var executor = new HttpRequestExecutor();
            executor
                .executeAsync(this.m_context._customData, flags, requestMessage)
                .then(function (response) {
                _this.processResponse(request, actions, response);
            })["catch"](function (ex) {
                for (var i = 0; i < actions.length; i++) {
                    var action = actions[i];
                    action.reject(ex);
                }
            });
        };
        ServiceApiQueue.prototype.processResponse = function (request, actions, response) {
            var error = this.getErrorFromResponse(response);
            var actionResults = null;
            if (response.Body.Results) {
                actionResults = response.Body.Results;
            }
            else if (response.Body.ProcessedResults && response.Body.ProcessedResults.Results) {
                actionResults = response.Body.ProcessedResults.Results;
            }
            if (!actionResults) {
                actionResults = [];
            }
            this.processActionResults(request, actions, actionResults, error);
        };
        ServiceApiQueue.prototype.getErrorFromResponse = function (response) {
            if (!CoreUtility.isNullOrEmptyString(response.ErrorCode)) {
                return new _Internal.RuntimeError({
                    code: response.ErrorCode,
                    httpStatusCode: response.HttpStatusCode,
                    message: response.ErrorMessage
                });
            }
            if (response.Body && response.Body.Error) {
                return new _Internal.RuntimeError({
                    code: response.Body.Error.Code,
                    httpStatusCode: response.Body.Error.HttpStatusCode,
                    message: response.Body.Error.Message
                });
            }
            return null;
        };
        ServiceApiQueue.prototype.processActionResults = function (request, actions, actionResults, err) {
            request.processResponse(actionResults);
            for (var i = 0; i < actions.length; i++) {
                var action = actions[i];
                var actionId = action.action.actionInfo.Id;
                var hasResult = false;
                for (var j = 0; j < actionResults.length; j++) {
                    if (actionId == actionResults[j].ActionId) {
                        var resultValue = actionResults[j].Value;
                        if (action.resultHandler) {
                            action.resultHandler._handleResult(resultValue);
                            resultValue = action.resultHandler.value;
                        }
                        if (action.resolve) {
                            action.resolve(resultValue);
                        }
                        hasResult = true;
                        break;
                    }
                }
                if (!hasResult && action.reject) {
                    if (err) {
                        action.reject(err);
                    }
                    else {
                        action.reject('No response for the action.');
                    }
                }
            }
        };
        return ServiceApiQueue;
    }());
    var HttpRequestExecutor = (function () {
        function HttpRequestExecutor() {
        }
        HttpRequestExecutor.prototype.getRequestUrl = function (baseUrl, requestFlags) {
            if (baseUrl.charAt(baseUrl.length - 1) != '/') {
                baseUrl = baseUrl + '/';
            }
            baseUrl = baseUrl + CoreConstants.processQuery;
            baseUrl = baseUrl + '?' + CoreConstants.flags + '=' + requestFlags.toString();
            return baseUrl;
        };
        HttpRequestExecutor.prototype.executeAsync = function (customData, requestFlags, requestMessage) {
            var url = this.getRequestUrl(requestMessage.Url, requestFlags);
            var requestInfo = {
                method: 'POST',
                url: url,
                headers: {},
                body: requestMessage.Body
            };
            requestInfo.headers[CoreConstants.sourceLibHeader] = HttpRequestExecutor.SourceLibHeaderValue;
            requestInfo.headers['CONTENT-TYPE'] = 'application/json';
            if (requestMessage.Headers) {
                for (var key in requestMessage.Headers) {
                    requestInfo.headers[key] = requestMessage.Headers[key];
                }
            }
            var sendRequestFunc = CoreUtility._isLocalDocumentUrl(requestInfo.url)
                ? HttpUtility.sendLocalDocumentRequest
                : HttpUtility.sendRequest;
            return sendRequestFunc(requestInfo).then(function (responseInfo) {
                var response;
                if (responseInfo.statusCode === 200) {
                    response = {
                        HttpStatusCode: responseInfo.statusCode,
                        ErrorCode: null,
                        ErrorMessage: null,
                        Headers: responseInfo.headers,
                        Body: CoreUtility._parseResponseBody(responseInfo)
                    };
                }
                else {
                    CoreUtility.log('Error Response:' + responseInfo.body);
                    var error = CoreUtility._parseErrorResponse(responseInfo);
                    response = {
                        HttpStatusCode: responseInfo.statusCode,
                        ErrorCode: error.errorCode,
                        ErrorMessage: error.errorMessage,
                        Headers: responseInfo.headers,
                        Body: null
                    };
                }
                return response;
            });
        };
        HttpRequestExecutor.SourceLibHeaderValue = 'officejs-rest';
        return HttpRequestExecutor;
    }());
    OfficeExtension_1.HttpRequestExecutor = HttpRequestExecutor;
    var CommonConstants = (function (_super) {
        __extends(CommonConstants, _super);
        function CommonConstants() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        CommonConstants.collectionPropertyPath = '_collectionPropertyPath';
        CommonConstants.id = 'Id';
        CommonConstants.idLowerCase = 'id';
        CommonConstants.idPrivate = '_Id';
        CommonConstants.keepReference = '_KeepReference';
        CommonConstants.objectPathIdPrivate = '_ObjectPathId';
        CommonConstants.referenceId = '_ReferenceId';
        CommonConstants.items = '_Items';
        CommonConstants.itemsLowerCase = 'items';
        CommonConstants.scalarPropertyNames = '_scalarPropertyNames';
        CommonConstants.scalarPropertyOriginalNames = '_scalarPropertyOriginalNames';
        CommonConstants.navigationPropertyNames = '_navigationPropertyNames';
        CommonConstants.scalarPropertyUpdateable = '_scalarPropertyUpdateable';
        CommonConstants.previewExecutionObjectId = '_previewExecutionObjectId';
        return CommonConstants;
    }(CoreConstants));
    OfficeExtension_1.CommonConstants = CommonConstants;
    var CommonUtility = (function (_super) {
        __extends(CommonUtility, _super);
        function CommonUtility() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        CommonUtility.validateObjectPath = function (clientObject) {
            var objectPath = clientObject._objectPath;
            while (objectPath) {
                if (!objectPath.isValid) {
                    throw new _Internal.RuntimeError({
                        code: CoreErrorCodes.invalidObjectPath,
                        httpStatusCode: 400,
                        message: CoreUtility._getResourceString(CoreResourceStrings.invalidObjectPath, CommonUtility.getObjectPathExpression(objectPath)),
                        debugInfo: {
                            errorLocation: CommonUtility.getObjectPathExpression(objectPath)
                        }
                    });
                }
                objectPath = objectPath.parentObjectPath;
            }
        };
        CommonUtility.validateReferencedObjectPaths = function (objectPaths) {
            if (objectPaths) {
                for (var i = 0; i < objectPaths.length; i++) {
                    var objectPath = objectPaths[i];
                    while (objectPath) {
                        if (!objectPath.isValid) {
                            throw new _Internal.RuntimeError({
                                code: CoreErrorCodes.invalidObjectPath,
                                httpStatusCode: 400,
                                message: CoreUtility._getResourceString(CoreResourceStrings.invalidObjectPath, CommonUtility.getObjectPathExpression(objectPath))
                            });
                        }
                        objectPath = objectPath.parentObjectPath;
                    }
                }
            }
        };
        CommonUtility._toCamelLowerCase = function (name) {
            if (CoreUtility.isNullOrEmptyString(name)) {
                return name;
            }
            var index = 0;
            while (index < name.length && name.charCodeAt(index) >= 65 && name.charCodeAt(index) <= 90) {
                index++;
            }
            if (index < name.length) {
                return name.substr(0, index).toLowerCase() + name.substr(index);
            }
            else {
                return name.toLowerCase();
            }
        };
        CommonUtility.adjustToDateTime = function (value) {
            if (CoreUtility.isNullOrUndefined(value)) {
                return null;
            }
            if (typeof value === 'string') {
                return new Date(value);
            }
            if (Array.isArray(value)) {
                var arr = value;
                for (var i = 0; i < arr.length; i++) {
                    arr[i] = CommonUtility.adjustToDateTime(arr[i]);
                }
                return arr;
            }
            throw CoreUtility._createInvalidArgError({ argumentName: 'date' });
        };
        CommonUtility.tryGetObjectIdFromLoadOrRetrieveResult = function (value) {
            var id = value[CommonConstants.id];
            if (CoreUtility.isNullOrUndefined(id)) {
                id = value[CommonConstants.idLowerCase];
            }
            if (CoreUtility.isNullOrUndefined(id)) {
                id = value[CommonConstants.idPrivate];
            }
            return id;
        };
        CommonUtility.getObjectPathExpression = function (objectPath) {
            var ret = '';
            while (objectPath) {
                switch (objectPath.objectPathInfo.ObjectPathType) {
                    case 1:
                        ret = ret;
                        break;
                    case 2:
                        ret = 'new()' + (ret.length > 0 ? '.' : '') + ret;
                        break;
                    case 3:
                        ret = CommonUtility.normalizeName(objectPath.objectPathInfo.Name) + '()' + (ret.length > 0 ? '.' : '') + ret;
                        break;
                    case 4:
                        ret = CommonUtility.normalizeName(objectPath.objectPathInfo.Name) + (ret.length > 0 ? '.' : '') + ret;
                        break;
                    case 5:
                        ret = 'getItem()' + (ret.length > 0 ? '.' : '') + ret;
                        break;
                    case 6:
                        ret = '_reference()' + (ret.length > 0 ? '.' : '') + ret;
                        break;
                }
                objectPath = objectPath.parentObjectPath;
            }
            return ret;
        };
        CommonUtility.setMethodArguments = function (context, argumentInfo, args) {
            if (CoreUtility.isNullOrUndefined(args)) {
                return null;
            }
            var referencedObjectPaths = new Array();
            var referencedObjectPathIds = new Array();
            var hasOne = CommonUtility.collectObjectPathInfos(context, args, referencedObjectPaths, referencedObjectPathIds);
            argumentInfo.Arguments = args;
            if (hasOne) {
                argumentInfo.ReferencedObjectPathIds = referencedObjectPathIds;
            }
            return referencedObjectPaths;
        };
        CommonUtility.validateContext = function (context, obj) {
            if (context && obj && obj._context !== context) {
                throw new _Internal.RuntimeError({
                    code: CoreErrorCodes.invalidRequestContext,
                    httpStatusCode: 400,
                    message: CoreUtility._getResourceString(CoreResourceStrings.invalidRequestContext)
                });
            }
        };
        CommonUtility.isSetSupported = function (apiSetName, apiSetVersion) {
            if (typeof window !== 'undefined' &&
                window.Office &&
                window.Office.context &&
                window.Office.context.requirements) {
                return window.Office.context.requirements.isSetSupported(apiSetName, apiSetVersion);
            }
            return true;
        };
        CommonUtility.throwIfApiNotSupported = function (apiFullName, apiSetName, apiSetVersion, hostName) {
            if (!CommonUtility._doApiNotSupportedCheck) {
                return;
            }
            if (!CommonUtility.isSetSupported(apiSetName, apiSetVersion)) {
                var message = CoreUtility._getResourceString(CoreResourceStrings.apiNotFoundDetails, [
                    apiFullName,
                    apiSetName + ' ' + apiSetVersion,
                    hostName
                ]);
                throw new _Internal.RuntimeError({
                    code: CoreErrorCodes.apiNotFound,
                    httpStatusCode: 404,
                    message: message,
                    debugInfo: { errorLocation: apiFullName }
                });
            }
        };
        CommonUtility.calculateApiFlags = function (apiFlags, undoableApiSetName, undoableApiSetVersion) {
            if (!CommonUtility.isSetSupported(undoableApiSetName, undoableApiSetVersion)) {
                apiFlags = apiFlags & (~2);
            }
            return apiFlags;
        };
        CommonUtility._parseSelectExpand = function (select) {
            var args = [];
            if (!CoreUtility.isNullOrEmptyString(select)) {
                var propertyNames = select.split(',');
                for (var i = 0; i < propertyNames.length; i++) {
                    var propertyName = propertyNames[i];
                    propertyName = sanitizeForAnyItemsSlash(propertyName.trim());
                    if (propertyName.length > 0) {
                        args.push(propertyName);
                    }
                }
            }
            return args;
            function sanitizeForAnyItemsSlash(propertyName) {
                var propertyNameLower = propertyName.toLowerCase();
                if (propertyNameLower === 'items' || propertyNameLower === 'items/') {
                    return '*';
                }
                var itemsSlashLength = 6;
                var isItemsSlashOrItemsDot = propertyNameLower.substr(0, itemsSlashLength) === 'items/' ||
                    propertyNameLower.substr(0, itemsSlashLength) === 'items.';
                if (isItemsSlashOrItemsDot) {
                    propertyName = propertyName.substr(itemsSlashLength);
                }
                return propertyName.replace(new RegExp('[/.]items[/.]', 'gi'), '/');
            }
        };
        CommonUtility.changePropertyNameToCamelLowerCase = function (value) {
            var charCodeUnderscore = 95;
            if (Array.isArray(value)) {
                var ret = [];
                for (var i = 0; i < value.length; i++) {
                    ret.push(this.changePropertyNameToCamelLowerCase(value[i]));
                }
                return ret;
            }
            else if (typeof value === 'object' && value !== null) {
                var ret = {};
                for (var key in value) {
                    var propValue = value[key];
                    if (key === CommonConstants.items) {
                        ret = {};
                        ret[CommonConstants.itemsLowerCase] = this.changePropertyNameToCamelLowerCase(propValue);
                        break;
                    }
                    else {
                        var propName = CommonUtility._toCamelLowerCase(key);
                        ret[propName] = this.changePropertyNameToCamelLowerCase(propValue);
                    }
                }
                return ret;
            }
            else {
                return value;
            }
        };
        CommonUtility.purifyJson = function (value) {
            var charCodeUnderscore = 95;
            if (Array.isArray(value)) {
                var ret = [];
                for (var i = 0; i < value.length; i++) {
                    ret.push(this.purifyJson(value[i]));
                }
                return ret;
            }
            else if (typeof value === 'object' && value !== null) {
                var ret = {};
                for (var key in value) {
                    if (key.charCodeAt(0) !== charCodeUnderscore) {
                        var propValue = value[key];
                        if (typeof propValue === 'object' && propValue !== null && Array.isArray(propValue['items'])) {
                            propValue = propValue['items'];
                        }
                        ret[key] = this.purifyJson(propValue);
                    }
                }
                return ret;
            }
            else {
                return value;
            }
        };
        CommonUtility.collectObjectPathInfos = function (context, args, referencedObjectPaths, referencedObjectPathIds) {
            var hasOne = false;
            for (var i = 0; i < args.length; i++) {
                if (args[i] instanceof ClientObjectBase) {
                    var clientObject = args[i];
                    CommonUtility.validateContext(context, clientObject);
                    args[i] = clientObject._objectPath.objectPathInfo.Id;
                    referencedObjectPathIds.push(clientObject._objectPath.objectPathInfo.Id);
                    referencedObjectPaths.push(clientObject._objectPath);
                    hasOne = true;
                }
                else if (Array.isArray(args[i])) {
                    var childArrayObjectPathIds = new Array();
                    var childArrayHasOne = CommonUtility.collectObjectPathInfos(context, args[i], referencedObjectPaths, childArrayObjectPathIds);
                    if (childArrayHasOne) {
                        referencedObjectPathIds.push(childArrayObjectPathIds);
                        hasOne = true;
                    }
                    else {
                        referencedObjectPathIds.push(0);
                    }
                }
                else if (CoreUtility.isPlainJsonObject(args[i])) {
                    referencedObjectPathIds.push(0);
                    CommonUtility.replaceClientObjectPropertiesWithObjectPathIds(args[i], referencedObjectPaths);
                }
                else {
                    referencedObjectPathIds.push(0);
                }
            }
            return hasOne;
        };
        CommonUtility.replaceClientObjectPropertiesWithObjectPathIds = function (value, referencedObjectPaths) {
            var _a, _b;
            for (var key in value) {
                var propValue = value[key];
                if (propValue instanceof ClientObjectBase) {
                    referencedObjectPaths.push(propValue._objectPath);
                    value[key] = (_a = {}, _a[CommonConstants.objectPathIdPrivate] = propValue._objectPath.objectPathInfo.Id, _a);
                }
                else if (Array.isArray(propValue)) {
                    for (var i = 0; i < propValue.length; i++) {
                        if (propValue[i] instanceof ClientObjectBase) {
                            var elem = propValue[i];
                            referencedObjectPaths.push(elem._objectPath);
                            propValue[i] = (_b = {}, _b[CommonConstants.objectPathIdPrivate] = elem._objectPath.objectPathInfo.Id, _b);
                        }
                        else if (CoreUtility.isPlainJsonObject(propValue[i])) {
                            CommonUtility.replaceClientObjectPropertiesWithObjectPathIds(propValue[i], referencedObjectPaths);
                        }
                    }
                }
                else if (CoreUtility.isPlainJsonObject(propValue)) {
                    CommonUtility.replaceClientObjectPropertiesWithObjectPathIds(propValue, referencedObjectPaths);
                }
                else {
                }
            }
        };
        CommonUtility.normalizeName = function (name) {
            return name.substr(0, 1).toLowerCase() + name.substr(1);
        };
        CommonUtility._doApiNotSupportedCheck = false;
        return CommonUtility;
    }(CoreUtility));
    OfficeExtension_1.CommonUtility = CommonUtility;
    var CommonResourceStrings = (function (_super) {
        __extends(CommonResourceStrings, _super);
        function CommonResourceStrings() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        CommonResourceStrings.propertyDoesNotExist = 'PropertyDoesNotExist';
        CommonResourceStrings.attemptingToSetReadOnlyProperty = 'AttemptingToSetReadOnlyProperty';
        return CommonResourceStrings;
    }(CoreResourceStrings));
    OfficeExtension_1.CommonResourceStrings = CommonResourceStrings;
    var ClientRetrieveResult = (function (_super) {
        __extends(ClientRetrieveResult, _super);
        function ClientRetrieveResult(m_shouldPolyfill) {
            var _this = _super.call(this) || this;
            _this.m_shouldPolyfill = m_shouldPolyfill;
            return _this;
        }
        ClientRetrieveResult.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (this.m_shouldPolyfill) {
                this.m_value = CommonUtility.changePropertyNameToCamelLowerCase(this.m_value);
            }
            this.m_value = this.removeItemNodes(this.m_value);
        };
        ClientRetrieveResult.prototype.removeItemNodes = function (value) {
            if (typeof value === 'object' && value !== null && value[CommonConstants.itemsLowerCase]) {
                value = value[CommonConstants.itemsLowerCase];
            }
            return CommonUtility.purifyJson(value);
        };
        return ClientRetrieveResult;
    }(ClientResult));
    OfficeExtension_1.ClientRetrieveResult = ClientRetrieveResult;
    var TraceActionResultHandler = (function () {
        function TraceActionResultHandler(callback) {
            this.callback = callback;
        }
        TraceActionResultHandler.prototype._handleResult = function (value) {
            if (this.callback) {
                this.callback();
            }
        };
        return TraceActionResultHandler;
    }());
    var ClientResultCallback = (function (_super) {
        __extends(ClientResultCallback, _super);
        function ClientResultCallback(callback) {
            var _this = _super.call(this) || this;
            _this.callback = callback;
            return _this;
        }
        ClientResultCallback.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            this.callback();
        };
        return ClientResultCallback;
    }(ClientResult));
    OfficeExtension_1.ClientResultCallback = ClientResultCallback;
    var OperationalApiHelper = (function () {
        function OperationalApiHelper() {
        }
        OperationalApiHelper.invokeMethod = function (obj, methodName, operationType, args, flags, resultProcessType) {
            if (operationType === void 0) {
                operationType = 0;
            }
            if (args === void 0) {
                args = [];
            }
            if (flags === void 0) {
                flags = 0;
            }
            if (resultProcessType === void 0) {
                resultProcessType = 0;
            }
            return CoreUtility.createPromise(function (resolve, reject) {
                var result = new ClientResult();
                var actionInfo = {
                    Id: obj._context._nextId(),
                    ActionType: 3,
                    Name: methodName,
                    ObjectPathId: obj._objectPath.objectPathInfo.Id,
                    ArgumentInfo: {}
                };
                var referencedArgumentObjectPaths = CommonUtility.setMethodArguments(obj._context, actionInfo.ArgumentInfo, args);
                var action = new Action(actionInfo, operationType, flags);
                action.referencedObjectPath = obj._objectPath;
                action.referencedArgumentObjectPaths = referencedArgumentObjectPaths;
                obj._context._addServiceApiAction(action, result, resolve, reject);
            });
        };
        OperationalApiHelper.invokeMethodWithClientResultCallback = function (callback, obj, methodName) {
            var operationType = 0;
            var args = [];
            var flags = 0;
            return CoreUtility.createPromise(function (resolve, reject) {
                var result = new ClientResultCallback(callback);
                var actionInfo = {
                    Id: obj._context._nextId(),
                    ActionType: 3,
                    Name: methodName,
                    ObjectPathId: obj._objectPath.objectPathInfo.Id,
                    ArgumentInfo: {}
                };
                var referencedArgumentObjectPaths = CommonUtility.setMethodArguments(obj._context, actionInfo.ArgumentInfo, args);
                var action = new Action(actionInfo, operationType, flags);
                action.referencedObjectPath = obj._objectPath;
                action.referencedArgumentObjectPaths = referencedArgumentObjectPaths;
                obj._context._addServiceApiAction(action, result, resolve, reject);
            });
        };
        OperationalApiHelper.invokeRetrieve = function (obj, select) {
            var shouldPolyfill = OfficeExtension_1._internalConfig.alwaysPolyfillClientObjectRetrieveMethod;
            if (!shouldPolyfill) {
                shouldPolyfill = !CommonUtility.isSetSupported('RichApiRuntime', '1.1');
            }
            var option;
            if (typeof select[0] === 'object' && select[0].hasOwnProperty('$all')) {
                if (!select[0]['$all']) {
                    throw OfficeExtension_1.Error._createInvalidArgError({});
                }
                option = select[0];
            }
            else {
                option = OperationalApiHelper._parseSelectOption(select);
            }
            return obj._retrieve(option, new ClientRetrieveResult(shouldPolyfill));
        };
        OperationalApiHelper._parseSelectOption = function (select) {
            if (!select || !select[0]) {
                throw OfficeExtension_1.Error._createInvalidArgError({});
            }
            var parsedSelect = select[0] && typeof select[0] !== 'string' ? select[0] : select;
            return Array.isArray(parsedSelect) ? parsedSelect : OperationalApiHelper.parseRecursiveSelect(parsedSelect);
        };
        OperationalApiHelper.parseRecursiveSelect = function (select) {
            var deconstruct = function (selectObj) {
                return Object.keys(selectObj).reduce(function (scalars, name) {
                    var value = selectObj[name];
                    if (typeof value === 'object') {
                        return scalars.concat(deconstruct(value).map(function (postfix) { return name + "/" + postfix; }));
                    }
                    if (value) {
                        return scalars.concat(name);
                    }
                    return scalars;
                }, []);
            };
            return deconstruct(select);
        };
        OperationalApiHelper.invokeRecursiveUpdate = function (obj, properties) {
            return CoreUtility.createPromise(function (resolve, reject) {
                obj._recursivelyUpdate(properties);
                var actionInfo = {
                    Id: obj._context._nextId(),
                    ActionType: 5,
                    Name: 'Trace',
                    ObjectPathId: 0
                };
                var action = new Action(actionInfo, 1, 4);
                obj._context._addServiceApiAction(action, null, resolve, reject);
            });
        };
        OperationalApiHelper.createRootServiceObject = function (type, context) {
            var objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 1,
                Name: ''
            };
            var objectPath = new ObjectPath(objectPathInfo, null, false, false, 1, 4);
            return new type(context, objectPath);
        };
        OperationalApiHelper.createTopLevelServiceObject = function (type, context, typeName, isCollection, flags) {
            var objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 2,
                Name: typeName
            };
            var objectPath = new ObjectPath(objectPathInfo, null, isCollection, false, 1, flags | 4);
            return new type(context, objectPath);
        };
        OperationalApiHelper.createPropertyObject = function (type, parent, propertyName, isCollection, flags) {
            var objectPathInfo = {
                Id: parent._context._nextId(),
                ObjectPathType: 4,
                Name: propertyName,
                ParentObjectPathId: parent._objectPath.objectPathInfo.Id
            };
            var objectPath = new ObjectPath(objectPathInfo, parent._objectPath, isCollection, false, 1, flags | 4);
            return new type(parent._context, objectPath);
        };
        OperationalApiHelper.createIndexerObject = function (type, parent, args) {
            var objectPathInfo = {
                Id: parent._context._nextId(),
                ObjectPathType: 5,
                Name: '',
                ParentObjectPathId: parent._objectPath.objectPathInfo.Id,
                ArgumentInfo: {}
            };
            objectPathInfo.ArgumentInfo.Arguments = args;
            var objectPath = new ObjectPath(objectPathInfo, parent._objectPath, false, false, 1, 4);
            return new type(parent._context, objectPath);
        };
        OperationalApiHelper.createMethodObject = function (type, parent, methodName, operationType, args, isCollection, isInvalidAfterRequest, getByIdMethodName, flags) {
            var id = parent._context._nextId();
            var objectPathInfo = {
                Id: id,
                ObjectPathType: 3,
                Name: methodName,
                ParentObjectPathId: parent._objectPath.objectPathInfo.Id,
                ArgumentInfo: {}
            };
            var argumentObjectPaths = CommonUtility.setMethodArguments(parent._context, objectPathInfo.ArgumentInfo, args);
            var objectPath = new ObjectPath(objectPathInfo, parent._objectPath, isCollection, isInvalidAfterRequest, operationType, flags);
            objectPath.argumentObjectPaths = argumentObjectPaths;
            objectPath.getByIdMethodName = getByIdMethodName;
            var o = new type(parent._context, objectPath);
            return o;
        };
        OperationalApiHelper.createAndInstantiateMethodObject = function (type, parent, methodName, operationType, args, isCollection, isInvalidAfterRequest, getByIdMethodName, flags) {
            return CoreUtility.createPromise(function (resolve, reject) {
                var objectPathInfo = {
                    Id: parent._context._nextId(),
                    ObjectPathType: 3,
                    Name: methodName,
                    ParentObjectPathId: parent._objectPath.objectPathInfo.Id,
                    ArgumentInfo: {}
                };
                var argumentObjectPaths = CommonUtility.setMethodArguments(parent._context, objectPathInfo.ArgumentInfo, args);
                var objectPath = new ObjectPath(objectPathInfo, parent._objectPath, isCollection, isInvalidAfterRequest, operationType, flags);
                objectPath.argumentObjectPaths = argumentObjectPaths;
                objectPath.getByIdMethodName = getByIdMethodName;
                var result = new ClientResult();
                var actionInfo = {
                    Id: parent._context._nextId(),
                    ActionType: 1,
                    Name: '',
                    ObjectPathId: objectPath.objectPathInfo.Id,
                    QueryInfo: {}
                };
                var action = new Action(actionInfo, 1, 4);
                action.referencedObjectPath = objectPath;
                parent._context._addServiceApiAction(action, result, function () { return resolve(new type(parent._context, objectPath)); }, reject);
            });
        };
        OperationalApiHelper.createTraceAction = function (context, callback) {
            return CoreUtility.createPromise(function (resolve, reject) {
                var actionInfo = {
                    Id: context._nextId(),
                    ActionType: 5,
                    Name: 'Trace',
                    ObjectPathId: 0
                };
                var action = new Action(actionInfo, 1, 4);
                var result = new TraceActionResultHandler(callback);
                context._addServiceApiAction(action, result, resolve, reject);
            });
        };
        OperationalApiHelper.localDocumentContext = new ClientRequestContextBase();
        return OperationalApiHelper;
    }());
    OfficeExtension_1.OperationalApiHelper = OperationalApiHelper;
    var GenericEventRegistryOperational = (function () {
        function GenericEventRegistryOperational(eventId, targetId, eventArgumentTransform) {
            this.eventId = eventId;
            this.targetId = targetId;
            this.eventArgumentTransform = eventArgumentTransform;
            this.registeredCallbacks = [];
        }
        GenericEventRegistryOperational.prototype.add = function (callback) {
            if (this.hasZero()) {
                GenericEventRegistration.getGenericEventRegistration().register(this.eventId, this.targetId, this.registerCallback);
            }
            this.registeredCallbacks.push(callback);
        };
        GenericEventRegistryOperational.prototype.remove = function (callback) {
            var index = this.registeredCallbacks.lastIndexOf(callback);
            if (index !== -1) {
                this.registeredCallbacks.splice(index, 1);
            }
        };
        GenericEventRegistryOperational.prototype.removeAll = function () {
            this.registeredCallbacks = [];
            GenericEventRegistration.getGenericEventRegistration().unregister(this.eventId, this.targetId, this.registerCallback);
        };
        GenericEventRegistryOperational.prototype.hasZero = function () {
            return this.registeredCallbacks.length === 0;
        };
        Object.defineProperty(GenericEventRegistryOperational.prototype, "registerCallback", {
            get: function () {
                var i = this;
                if (!this.outsideCallback) {
                    this.outsideCallback = function (argument) {
                        i.call(argument);
                    };
                }
                return this.outsideCallback;
            },
            enumerable: true,
            configurable: true
        });
        GenericEventRegistryOperational.prototype.call = function (rawEventArguments) {
            var _this = this;
            this.eventArgumentTransform(rawEventArguments).then(function (eventArguments) {
                var promises = _this.registeredCallbacks.map(function (callback) { return GenericEventRegistryOperational.callCallback(callback, eventArguments); });
                CoreUtility.Promise.all(promises);
            });
        };
        GenericEventRegistryOperational.callCallback = function (callback, eventArguments) {
            return CoreUtility._createPromiseFromResult(null)
                .then(GenericEventRegistryOperational.wrapCallbackInFunction(callback, eventArguments))["catch"](function (e) {
                CoreUtility.log('Error when invoke handler: ' + JSON.stringify(e));
            });
        };
        GenericEventRegistryOperational.wrapCallbackInFunction = function (callback, args) {
            return function () { return callback(args); };
        };
        return GenericEventRegistryOperational;
    }());
    OfficeExtension_1.GenericEventRegistryOperational = GenericEventRegistryOperational;
    var GlobalEventRegistryOperational = (function () {
        function GlobalEventRegistryOperational() {
            this.eventToTargetToHandlerMap = {};
        }
        Object.defineProperty(GlobalEventRegistryOperational, "globalEventRegistry", {
            get: function () {
                if (!GlobalEventRegistryOperational.singleton) {
                    GlobalEventRegistryOperational.singleton = new GlobalEventRegistryOperational();
                }
                return GlobalEventRegistryOperational.singleton;
            },
            enumerable: true,
            configurable: true
        });
        GlobalEventRegistryOperational.getGlobalEventRegistry = function (eventId, targetId, eventArgumentTransform) {
            var global = GlobalEventRegistryOperational.globalEventRegistry;
            var mapGlobal = global.eventToTargetToHandlerMap;
            if (!mapGlobal.hasOwnProperty(eventId)) {
                mapGlobal[eventId] = {};
            }
            var mapEvent = mapGlobal[eventId];
            if (!mapEvent.hasOwnProperty(targetId)) {
                mapEvent[targetId] = new GenericEventRegistryOperational(eventId, targetId, eventArgumentTransform);
            }
            var target = mapEvent[targetId];
            return target;
        };
        GlobalEventRegistryOperational.singleton = undefined;
        return GlobalEventRegistryOperational;
    }());
    OfficeExtension_1.GlobalEventRegistryOperational = GlobalEventRegistryOperational;
    var GenericEventHandlerOperational = (function () {
        function GenericEventHandlerOperational(genericEventInfo) {
            this.genericEventInfo = genericEventInfo;
        }
        GenericEventHandlerOperational.prototype.add = function (callback) {
            var _this = this;
            var eventRegistered = undefined;
            var promise = CoreUtility.createPromise(function (resolve) {
                eventRegistered = resolve;
            });
            var addCallback = function () {
                var eventId = _this.genericEventInfo.eventType;
                var targetId = _this.genericEventInfo.getTargetIdFunc();
                var event = GlobalEventRegistryOperational.getGlobalEventRegistry(eventId, targetId, _this.genericEventInfo.eventArgsTransformFunc);
                event.add(callback);
                eventRegistered();
            };
            this.register();
            this.createTrace(addCallback);
            return promise;
        };
        GenericEventHandlerOperational.prototype.remove = function (callback) {
            var _this = this;
            var removeCallback = function () {
                var eventId = _this.genericEventInfo.eventType;
                var targetId = _this.genericEventInfo.getTargetIdFunc();
                var event = GlobalEventRegistryOperational.getGlobalEventRegistry(eventId, targetId, _this.genericEventInfo.eventArgsTransformFunc);
                event.remove(callback);
            };
            this.register();
            this.createTrace(removeCallback);
        };
        GenericEventHandlerOperational.prototype.removeAll = function () {
            var _this = this;
            var removeAllCallback = function () {
                var eventId = _this.genericEventInfo.eventType;
                var targetId = _this.genericEventInfo.getTargetIdFunc();
                var event = GlobalEventRegistryOperational.getGlobalEventRegistry(eventId, targetId, _this.genericEventInfo.eventArgsTransformFunc);
                event.removeAll();
            };
            this.unregister();
            this.createTrace(removeAllCallback);
        };
        GenericEventHandlerOperational.prototype.createTrace = function (callback) {
            OperationalApiHelper.createTraceAction(this.genericEventInfo.object._context, callback);
        };
        GenericEventHandlerOperational.prototype.register = function () {
            var operationType = 0;
            var args = [];
            var flags = 0;
            OperationalApiHelper.invokeMethod(this.genericEventInfo.object, this.genericEventInfo.register, operationType, args, flags);
            if (!GenericEventRegistration.getGenericEventRegistration().isReady) {
                GenericEventRegistration.getGenericEventRegistration().ready();
            }
        };
        GenericEventHandlerOperational.prototype.unregister = function () {
            OperationalApiHelper.invokeMethod(this.genericEventInfo.object, this.genericEventInfo.unregister);
        };
        return GenericEventHandlerOperational;
    }());
    OfficeExtension_1.GenericEventHandlerOperational = GenericEventHandlerOperational;
    var EventHelper = (function () {
        function EventHelper() {
        }
        EventHelper.invokeOn = function (eventHandler, callback, options) {
            var promiseResolve = undefined;
            var promise = CoreUtility.createPromise(function (resolve, reject) {
                promiseResolve = resolve;
            });
            eventHandler.add(callback).then(function () {
                promiseResolve({});
            });
            return promise;
        };
        EventHelper.invokeOff = function (genericEventHandlersOpObj, eventHandler, eventName, callback) {
            if (!eventName && !callback) {
                var allGenericEventHandlersOp = Object.keys(genericEventHandlersOpObj).map(function (eventName) { return genericEventHandlersOpObj[eventName]; });
                return EventHelper.invokeAllOff(allGenericEventHandlersOp);
            }
            if (!eventName) {
                return CoreUtility._createPromiseFromException(eventName + " must be supplied if handler is supplied.");
            }
            if (callback) {
                eventHandler.remove(callback);
            }
            else {
                eventHandler.removeAll();
            }
            return CoreUtility.createPromise(function (resolve, reject) { return resolve(); });
        };
        EventHelper.invokeAllOff = function (allGenericEventHandlersOperational) {
            allGenericEventHandlersOperational.forEach(function (genericEventHandlerOperational) {
                genericEventHandlerOperational.removeAll();
            });
            return CoreUtility.createPromise(function (resolve, reject) { return resolve(); });
        };
        return EventHelper;
    }());
    OfficeExtension_1.EventHelper = EventHelper;
    var ErrorCodes = (function (_super) {
        __extends(ErrorCodes, _super);
        function ErrorCodes() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        ErrorCodes.propertyNotLoaded = 'PropertyNotLoaded';
        ErrorCodes.runMustReturnPromise = 'RunMustReturnPromise';
        ErrorCodes.cannotRegisterEvent = 'CannotRegisterEvent';
        ErrorCodes.invalidOrTimedOutSession = 'InvalidOrTimedOutSession';
        ErrorCodes.cannotUpdateReadOnlyProperty = 'CannotUpdateReadOnlyProperty';
        return ErrorCodes;
    }(CoreErrorCodes));
    OfficeExtension_1.ErrorCodes = ErrorCodes;
    var TraceMarkerActionResultHandler = (function () {
        function TraceMarkerActionResultHandler(callback) {
            this.m_callback = callback;
        }
        TraceMarkerActionResultHandler.prototype._handleResult = function (value) {
            if (this.m_callback) {
                this.m_callback();
            }
        };
        return TraceMarkerActionResultHandler;
    }());
    var ActionFactory = (function (_super) {
        __extends(ActionFactory, _super);
        function ActionFactory() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        ActionFactory.createMethodAction = function (context, parent, methodName, operationType, args, flags) {
            Utility.validateObjectPath(parent);
            var actionInfo = {
                Id: context._nextId(),
                ActionType: 3,
                Name: methodName,
                ObjectPathId: parent._objectPath.objectPathInfo.Id,
                ArgumentInfo: {}
            };
            var referencedArgumentObjectPaths = Utility.setMethodArguments(context, actionInfo.ArgumentInfo, args);
            Utility.validateReferencedObjectPaths(referencedArgumentObjectPaths);
            var fixedFlags = Utility._fixupApiFlags(flags);
            var action = new Action(actionInfo, operationType, fixedFlags);
            action.referencedObjectPath = parent._objectPath;
            action.referencedArgumentObjectPaths = referencedArgumentObjectPaths;
            parent._addAction(action);
            if (OfficeExtension_1._internalConfig.enablePreviewExecution && (fixedFlags & 16) !== 0) {
                var previewExecutionAction = {
                    Id: context._nextId(),
                    ActionType: 3,
                    Name: methodName,
                    Arguments: args,
                    ObjectId: '',
                    ObjectType: ''
                };
                parent._addPreviewExecutionAction(previewExecutionAction);
            }
            return action;
        };
        ActionFactory.createRecursiveQueryAction = function (context, parent, query) {
            Utility.validateObjectPath(parent);
            var actionInfo = {
                Id: context._nextId(),
                ActionType: 6,
                Name: '',
                ObjectPathId: parent._objectPath.objectPathInfo.Id,
                RecursiveQueryInfo: query
            };
            var action = new Action(actionInfo, 1, 4);
            action.referencedObjectPath = parent._objectPath;
            parent._addAction(action);
            return action;
        };
        ActionFactory.createEnsureUnchangedAction = function (context, parent, objectState) {
            Utility.validateObjectPath(parent);
            var actionInfo = {
                Id: context._nextId(),
                ActionType: 8,
                Name: '',
                ObjectPathId: parent._objectPath.objectPathInfo.Id,
                ObjectState: objectState
            };
            var action = new Action(actionInfo, 1, 4);
            action.referencedObjectPath = parent._objectPath;
            parent._addAction(action);
            return action;
        };
        ActionFactory.createInstantiateAction = function (context, obj) {
            Utility.validateObjectPath(obj);
            context._pendingRequest.ensureInstantiateObjectPath(obj._objectPath.parentObjectPath);
            context._pendingRequest.ensureInstantiateObjectPaths(obj._objectPath.argumentObjectPaths);
            var actionInfo = {
                Id: context._nextId(),
                ActionType: 1,
                Name: '',
                ObjectPathId: obj._objectPath.objectPathInfo.Id
            };
            var action = new Action(actionInfo, 1, 4);
            action.referencedObjectPath = obj._objectPath;
            obj._addAction(action, new InstantiateActionResultHandler(obj), true);
            return action;
        };
        ActionFactory.createTraceAction = function (context, message, addTraceMessage) {
            var actionInfo = {
                Id: context._nextId(),
                ActionType: 5,
                Name: 'Trace',
                ObjectPathId: 0
            };
            var ret = new Action(actionInfo, 1, 4);
            context._pendingRequest.addAction(ret);
            if (addTraceMessage) {
                context._pendingRequest.addTrace(actionInfo.Id, message);
            }
            return ret;
        };
        ActionFactory.createTraceMarkerForCallback = function (context, callback) {
            var action = ActionFactory.createTraceAction(context, null, false);
            context._pendingRequest.addActionResultHandler(action, new TraceMarkerActionResultHandler(callback));
        };
        return ActionFactory;
    }(CommonActionFactory));
    OfficeExtension_1.ActionFactory = ActionFactory;
    var ClientObject = (function (_super) {
        __extends(ClientObject, _super);
        function ClientObject(context, objectPath) {
            var _this = _super.call(this, context, objectPath) || this;
            Utility.checkArgumentNull(context, 'context');
            _this.m_context = context;
            if (_this._objectPath) {
                if (!context._processingResult && context._pendingRequest) {
                    ActionFactory.createInstantiateAction(context, _this);
                    if (context._autoCleanup && _this._KeepReference) {
                        context.trackedObjects._autoAdd(_this);
                    }
                }
                if (OfficeExtension_1._internalConfig.appendTypeNameToObjectPathInfo && _this._objectPath.objectPathInfo && _this._className) {
                    _this._objectPath.objectPathInfo.T = _this._className;
                }
            }
            return _this;
        }
        Object.defineProperty(ClientObject.prototype, "context", {
            get: function () {
                return this.m_context;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientObject.prototype, "isNull", {
            get: function () {
                if (typeof (this.m_isNull) === 'undefined' && TestUtility.isMock()) {
                    return false;
                }
                Utility.throwIfNotLoaded('isNull', this._isNull, null, this._isNull);
                return this._isNull;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientObject.prototype, "isNullObject", {
            get: function () {
                if (typeof (this.m_isNull) === 'undefined' && TestUtility.isMock()) {
                    return false;
                }
                Utility.throwIfNotLoaded('isNullObject', this._isNull, null, this._isNull);
                return this._isNull;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientObject.prototype, "_isNull", {
            get: function () {
                return this.m_isNull;
            },
            set: function (value) {
                this.m_isNull = value;
                if (value && this._objectPath) {
                    this._objectPath._updateAsNullObject();
                }
            },
            enumerable: true,
            configurable: true
        });
        ClientObject.prototype._addAction = function (action, resultHandler, isInstantiationEnsured) {
            if (resultHandler === void 0) {
                resultHandler = null;
            }
            if (!isInstantiationEnsured) {
                this.context._pendingRequest.ensureInstantiateObjectPath(this._objectPath);
                this.context._pendingRequest.ensureInstantiateObjectPaths(action.referencedArgumentObjectPaths);
            }
            this.context._pendingRequest.addAction(action);
            this.context._pendingRequest.addReferencedObjectPath(this._objectPath);
            this.context._pendingRequest.addReferencedObjectPaths(action.referencedArgumentObjectPaths);
            this.context._pendingRequest.addActionResultHandler(action, resultHandler);
            return CoreUtility._createPromiseFromResult(null);
        };
        ClientObject.prototype._addPreviewExecutionAction = function (action) {
            if (!Utility.isUndefined(this._className)) {
                action.ObjectType = this._className;
                var objectId = Utility._getPropertyValueWithoutCheckLoaded(this, Constants.idLowerCase);
                if (Utility.isUndefined(objectId)) {
                    objectId = Utility._getPropertyValueWithoutCheckLoaded(this, Constants.idPrivate);
                }
                if (Utility.isUndefined(objectId)) {
                    objectId = Utility._getPropertyValueWithoutCheckLoaded(this, Constants.previewExecutionObjectId);
                }
                action.ObjectId = objectId;
                this.context._pendingRequest.addPreviewExecutionAction(action);
            }
        };
        ClientObject.prototype._handleResult = function (value) {
            this._isNull = Utility.isNullOrUndefined(value);
            this.context.trackedObjects._autoTrackIfNecessaryWhenHandleObjectResultValue(this, value);
        };
        ClientObject.prototype._handleIdResult = function (value) {
            this._isNull = Utility.isNullOrUndefined(value);
            Utility.fixObjectPathIfNecessary(this, value);
            this.context.trackedObjects._autoTrackIfNecessaryWhenHandleObjectResultValue(this, value);
        };
        ClientObject.prototype._handleRetrieveResult = function (value, result) {
            this._handleIdResult(value);
        };
        ClientObject.prototype._recursivelySet = function (input, options, scalarWriteablePropertyNames, objectPropertyNames, notAllowedToBeSetPropertyNames) {
            var isClientObject = input instanceof ClientObject;
            var originalInput = input;
            if (isClientObject) {
                if (Object.getPrototypeOf(this) === Object.getPrototypeOf(input)) {
                    input = JSON.parse(JSON.stringify(input));
                }
                else {
                    throw _Internal.RuntimeError._createInvalidArgError({
                        argumentName: 'properties',
                        errorLocation: this._className + '.set'
                    });
                }
            }
            try {
                var prop;
                for (var i = 0; i < scalarWriteablePropertyNames.length; i++) {
                    prop = scalarWriteablePropertyNames[i];
                    if (input.hasOwnProperty(prop)) {
                        if (typeof input[prop] !== 'undefined') {
                            this[prop] = input[prop];
                        }
                    }
                }
                for (var i = 0; i < objectPropertyNames.length; i++) {
                    prop = objectPropertyNames[i];
                    if (input.hasOwnProperty(prop)) {
                        if (typeof input[prop] !== 'undefined') {
                            var dataToPassToSet = isClientObject ? originalInput[prop] : input[prop];
                            this[prop].set(dataToPassToSet, options);
                        }
                    }
                }
                var throwOnReadOnly = !isClientObject;
                if (options && !Utility.isNullOrUndefined(throwOnReadOnly)) {
                    throwOnReadOnly = options.throwOnReadOnly;
                }
                for (var i = 0; i < notAllowedToBeSetPropertyNames.length; i++) {
                    prop = notAllowedToBeSetPropertyNames[i];
                    if (input.hasOwnProperty(prop)) {
                        if (typeof input[prop] !== 'undefined' && throwOnReadOnly) {
                            throw new _Internal.RuntimeError({
                                code: CoreErrorCodes.invalidArgument,
                                httpStatusCode: 400,
                                message: CoreUtility._getResourceString(ResourceStrings.cannotApplyPropertyThroughSetMethod, prop),
                                debugInfo: {
                                    errorLocation: prop
                                }
                            });
                        }
                    }
                }
                for (prop in input) {
                    if (scalarWriteablePropertyNames.indexOf(prop) < 0 && objectPropertyNames.indexOf(prop) < 0) {
                        var propertyDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this), prop);
                        if (!propertyDescriptor) {
                            throw new _Internal.RuntimeError({
                                code: CoreErrorCodes.invalidArgument,
                                httpStatusCode: 400,
                                message: CoreUtility._getResourceString(CommonResourceStrings.propertyDoesNotExist, prop),
                                debugInfo: {
                                    errorLocation: prop
                                }
                            });
                        }
                        if (throwOnReadOnly && !propertyDescriptor.set) {
                            throw new _Internal.RuntimeError({
                                code: CoreErrorCodes.invalidArgument,
                                httpStatusCode: 400,
                                message: CoreUtility._getResourceString(CommonResourceStrings.attemptingToSetReadOnlyProperty, prop),
                                debugInfo: {
                                    errorLocation: prop
                                }
                            });
                        }
                    }
                }
            }
            catch (innerError) {
                throw new _Internal.RuntimeError({
                    code: CoreErrorCodes.invalidArgument,
                    httpStatusCode: 400,
                    message: CoreUtility._getResourceString(CoreResourceStrings.invalidArgument, 'properties'),
                    debugInfo: {
                        errorLocation: this._className + '.set'
                    },
                    innerError: innerError
                });
            }
        };
        return ClientObject;
    }(ClientObjectBase));
    OfficeExtension_1.ClientObject = ClientObject;
    var HostBridgeRequestExecutor = (function () {
        function HostBridgeRequestExecutor(session) {
            this.m_session = session;
        }
        HostBridgeRequestExecutor.prototype.executeAsync = function (customData, requestFlags, requestMessage) {
            var httpRequestInfo = {
                url: CoreConstants.processQuery,
                method: 'POST',
                headers: requestMessage.Headers,
                body: requestMessage.Body
            };
            var message = {
                id: HostBridge.nextId(),
                type: 1,
                flags: requestFlags,
                message: httpRequestInfo
            };
            CoreUtility.log(JSON.stringify(message));
            return this.m_session.sendMessageToHost(message).then(function (nativeBridgeResponse) {
                CoreUtility.log('Received response: ' + JSON.stringify(nativeBridgeResponse));
                var responseInfo = nativeBridgeResponse.message;
                var response;
                if (responseInfo.statusCode === 200) {
                    response = {
                        HttpStatusCode: responseInfo.statusCode,
                        ErrorCode: null,
                        ErrorMessage: null,
                        Headers: responseInfo.headers,
                        Body: CoreUtility._parseResponseBody(responseInfo)
                    };
                }
                else {
                    CoreUtility.log('Error Response:' + responseInfo.body);
                    var error = CoreUtility._parseErrorResponse(responseInfo);
                    response = {
                        HttpStatusCode: responseInfo.statusCode,
                        ErrorCode: error.errorCode,
                        ErrorMessage: error.errorMessage,
                        Headers: responseInfo.headers,
                        Body: null
                    };
                }
                return response;
            });
        };
        return HostBridgeRequestExecutor;
    }());
    var HostBridgeSession = (function (_super) {
        __extends(HostBridgeSession, _super);
        function HostBridgeSession(m_bridge) {
            var _this = _super.call(this) || this;
            _this.m_bridge = m_bridge;
            _this.m_bridge.addHostMessageHandler(function (message) {
                if (message.type === 3) {
                    GenericEventRegistration.getGenericEventRegistration()._handleRichApiMessage(message.message);
                }
            });
            return _this;
        }
        HostBridgeSession.getInstanceIfHostBridgeInited = function () {
            if (HostBridge.instance) {
                if (CoreUtility.isNullOrUndefined(HostBridgeSession.s_instance) ||
                    HostBridgeSession.s_instance.m_bridge !== HostBridge.instance) {
                    HostBridgeSession.s_instance = new HostBridgeSession(HostBridge.instance);
                }
                return HostBridgeSession.s_instance;
            }
            return null;
        };
        HostBridgeSession.prototype._resolveRequestUrlAndHeaderInfo = function () {
            return CoreUtility._createPromiseFromResult(null);
        };
        HostBridgeSession.prototype._createRequestExecutorOrNull = function () {
            CoreUtility.log('NativeBridgeSession::CreateRequestExecutor');
            return new HostBridgeRequestExecutor(this);
        };
        Object.defineProperty(HostBridgeSession.prototype, "eventRegistration", {
            get: function () {
                return GenericEventRegistration.getGenericEventRegistration();
            },
            enumerable: true,
            configurable: true
        });
        HostBridgeSession.prototype.sendMessageToHost = function (message) {
            return this.m_bridge.sendMessageToHostAndExpectResponse(message);
        };
        return HostBridgeSession;
    }(SessionBase));
    OfficeExtension_1.HostBridgeSession = HostBridgeSession;
    var ClientRequestContext = (function (_super) {
        __extends(ClientRequestContext, _super);
        function ClientRequestContext(url) {
            var _this = _super.call(this) || this;
            _this.m_customRequestHeaders = {};
            _this.m_batchMode = 0;
            _this._onRunFinishedNotifiers = [];
            if (SessionBase._overrideSession) {
                _this.m_requestUrlAndHeaderInfoResolver = SessionBase._overrideSession;
            }
            else {
                if (Utility.isNullOrUndefined(url) || (typeof url === 'string' && url.length === 0)) {
                    url = ClientRequestContext.defaultRequestUrlAndHeaders;
                    if (!url) {
                        url = { url: CoreConstants.localDocument, headers: {} };
                    }
                }
                if (typeof url === 'string') {
                    _this.m_requestUrlAndHeaderInfo = { url: url, headers: {} };
                }
                else if (ClientRequestContext.isRequestUrlAndHeaderInfoResolver(url)) {
                    _this.m_requestUrlAndHeaderInfoResolver = url;
                }
                else if (ClientRequestContext.isRequestUrlAndHeaderInfo(url)) {
                    var requestInfo = url;
                    _this.m_requestUrlAndHeaderInfo = { url: requestInfo.url, headers: {} };
                    CoreUtility._copyHeaders(requestInfo.headers, _this.m_requestUrlAndHeaderInfo.headers);
                }
                else {
                    throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'url' });
                }
            }
            if (!_this.m_requestUrlAndHeaderInfoResolver &&
                _this.m_requestUrlAndHeaderInfo &&
                CoreUtility._isLocalDocumentUrl(_this.m_requestUrlAndHeaderInfo.url) &&
                HostBridgeSession.getInstanceIfHostBridgeInited()) {
                _this.m_requestUrlAndHeaderInfo = null;
                _this.m_requestUrlAndHeaderInfoResolver = HostBridgeSession.getInstanceIfHostBridgeInited();
            }
            if (_this.m_requestUrlAndHeaderInfoResolver instanceof SessionBase) {
                _this.m_session = _this.m_requestUrlAndHeaderInfoResolver;
            }
            _this._processingResult = false;
            _this._customData = Constants.iterativeExecutor;
            _this.sync = _this.sync.bind(_this);
            return _this;
        }
        Object.defineProperty(ClientRequestContext.prototype, "session", {
            get: function () {
                return this.m_session;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequestContext.prototype, "eventRegistration", {
            get: function () {
                if (this.m_session) {
                    return this.m_session.eventRegistration;
                }
                return _Internal.officeJsEventRegistration;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequestContext.prototype, "_url", {
            get: function () {
                if (this.m_requestUrlAndHeaderInfo) {
                    return this.m_requestUrlAndHeaderInfo.url;
                }
                return null;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequestContext.prototype, "_pendingRequest", {
            get: function () {
                if (this.m_pendingRequest == null) {
                    this.m_pendingRequest = new ClientRequest(this);
                }
                return this.m_pendingRequest;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequestContext.prototype, "debugInfo", {
            get: function () {
                var prettyPrinter = new RequestPrettyPrinter(this._rootObjectPropertyName, this._pendingRequest._objectPaths, this._pendingRequest._actions, OfficeExtension_1._internalConfig.showDisposeInfoInDebugInfo);
                var statements = prettyPrinter.process();
                return { pendingStatements: statements };
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequestContext.prototype, "trackedObjects", {
            get: function () {
                if (!this.m_trackedObjects) {
                    this.m_trackedObjects = new TrackedObjects(this);
                }
                return this.m_trackedObjects;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequestContext.prototype, "requestHeaders", {
            get: function () {
                return this.m_customRequestHeaders;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequestContext.prototype, "batchMode", {
            get: function () {
                return this.m_batchMode;
            },
            enumerable: true,
            configurable: true
        });
        ClientRequestContext.prototype.ensureInProgressBatchIfBatchMode = function () {
            if (this.m_batchMode === 1 && !this.m_explicitBatchInProgress) {
                throw Utility.createRuntimeError(CoreErrorCodes.generalException, CoreUtility._getResourceString(ResourceStrings.notInsideBatch), null);
            }
        };
        ClientRequestContext.prototype.load = function (clientObj, option) {
            Utility.validateContext(this, clientObj);
            var queryOption = ClientRequestContext._parseQueryOption(option);
            CommonActionFactory.createQueryAction(this, clientObj, queryOption, clientObj);
        };
        ClientRequestContext.prototype.loadRecursive = function (clientObj, options, maxDepth) {
            if (!Utility.isPlainJsonObject(options)) {
                throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'options' });
            }
            var quries = {};
            for (var key in options) {
                quries[key] = ClientRequestContext._parseQueryOption(options[key]);
            }
            var action = ActionFactory.createRecursiveQueryAction(this, clientObj, { Queries: quries, MaxDepth: maxDepth });
            this._pendingRequest.addActionResultHandler(action, clientObj);
        };
        ClientRequestContext.prototype.trace = function (message) {
            ActionFactory.createTraceAction(this, message, true);
        };
        ClientRequestContext.prototype._processOfficeJsErrorResponse = function (officeJsErrorCode, response) { };
        ClientRequestContext.prototype.ensureRequestUrlAndHeaderInfo = function () {
            var _this = this;
            return Utility._createPromiseFromResult(null).then(function () {
                if (!_this.m_requestUrlAndHeaderInfo) {
                    return _this.m_requestUrlAndHeaderInfoResolver._resolveRequestUrlAndHeaderInfo().then(function (value) {
                        _this.m_requestUrlAndHeaderInfo = value;
                        if (!_this.m_requestUrlAndHeaderInfo) {
                            _this.m_requestUrlAndHeaderInfo = { url: CoreConstants.localDocument, headers: {} };
                        }
                        if (Utility.isNullOrEmptyString(_this.m_requestUrlAndHeaderInfo.url)) {
                            _this.m_requestUrlAndHeaderInfo.url = CoreConstants.localDocument;
                        }
                        if (!_this.m_requestUrlAndHeaderInfo.headers) {
                            _this.m_requestUrlAndHeaderInfo.headers = {};
                        }
                        if (typeof _this.m_requestUrlAndHeaderInfoResolver._createRequestExecutorOrNull === 'function') {
                            var executor = _this.m_requestUrlAndHeaderInfoResolver._createRequestExecutorOrNull();
                            if (executor) {
                                _this._requestExecutor = executor;
                            }
                        }
                    });
                }
            });
        };
        ClientRequestContext.prototype.syncPrivateMain = function () {
            var _this = this;
            return this.ensureRequestUrlAndHeaderInfo().then(function () {
                var req = _this._pendingRequest;
                _this.m_pendingRequest = null;
                return _this.processPreSyncPromises(req).then(function () { return _this.syncPrivate(req); });
            });
        };
        ClientRequestContext.prototype.syncPrivate = function (req) {
            var _this = this;
            if (TestUtility.isMock()) {
                return CoreUtility._createPromiseFromResult(null);
            }
            if (!req.hasActions) {
                return this.processPendingEventHandlers(req);
            }
            var _a = req.buildRequestMessageBodyAndRequestFlags(), msgBody = _a.body, requestFlags = _a.flags;
            if (this._requestFlagModifier) {
                requestFlags |= this._requestFlagModifier;
            }
            if (!this._requestExecutor) {
                if (CoreUtility._isLocalDocumentUrl(this.m_requestUrlAndHeaderInfo.url)) {
                    this._requestExecutor = new OfficeJsRequestExecutor(this);
                }
                else {
                    this._requestExecutor = new HttpRequestExecutor();
                }
            }
            var requestExecutor = this._requestExecutor;
            var headers = {};
            CoreUtility._copyHeaders(this.m_requestUrlAndHeaderInfo.headers, headers);
            CoreUtility._copyHeaders(this.m_customRequestHeaders, headers);
            delete this.m_customRequestHeaders[Constants.officeScriptEventId];
            var requestExecutorRequestMessage = {
                Url: this.m_requestUrlAndHeaderInfo.url,
                Headers: headers,
                Body: msgBody
            };
            req.invalidatePendingInvalidObjectPaths();
            var errorFromResponse = null;
            var errorFromProcessEventHandlers = null;
            this._lastSyncStart = typeof performance === 'undefined' ? 0 : performance.now();
            this._lastRequestFlags = requestFlags;
            return requestExecutor
                .executeAsync(this._customData, requestFlags, requestExecutorRequestMessage)
                .then(function (response) {
                _this._lastSyncEnd = typeof performance === 'undefined' ? 0 : performance.now();
                errorFromResponse = _this.processRequestExecutorResponseMessage(req, response);
                return _this.processPendingEventHandlers(req)["catch"](function (ex) {
                    CoreUtility.log('Error in processPendingEventHandlers');
                    CoreUtility.log(JSON.stringify(ex));
                    errorFromProcessEventHandlers = ex;
                });
            })
                .then(function () {
                if (errorFromResponse) {
                    CoreUtility.log('Throw error from response: ' + JSON.stringify(errorFromResponse));
                    throw errorFromResponse;
                }
                if (errorFromProcessEventHandlers) {
                    CoreUtility.log('Throw error from ProcessEventHandler: ' + JSON.stringify(errorFromProcessEventHandlers));
                    var transformedError = null;
                    if (errorFromProcessEventHandlers instanceof _Internal.RuntimeError) {
                        transformedError = errorFromProcessEventHandlers;
                        transformedError.traceMessages = req._responseTraceMessages;
                    }
                    else {
                        var message = null;
                        if (typeof errorFromProcessEventHandlers === 'string') {
                            message = errorFromProcessEventHandlers;
                        }
                        else {
                            message = errorFromProcessEventHandlers.message;
                        }
                        if (Utility.isNullOrEmptyString(message)) {
                            message = CoreUtility._getResourceString(ResourceStrings.cannotRegisterEvent);
                        }
                        transformedError = new _Internal.RuntimeError({
                            code: ErrorCodes.cannotRegisterEvent,
                            httpStatusCode: 400,
                            message: message,
                            traceMessages: req._responseTraceMessages
                        });
                    }
                    throw transformedError;
                }
            });
        };
        ClientRequestContext.prototype.processRequestExecutorResponseMessage = function (req, response) {
            if (response.Body && response.Body.TraceIds) {
                req._setResponseTraceIds(response.Body.TraceIds);
            }
            var traceMessages = req._responseTraceMessages;
            var errorStatementInfo = null;
            if (response.Body) {
                if (response.Body.Error && response.Body.Error.ActionIndex >= 0) {
                    var prettyPrinter = new RequestPrettyPrinter(this._rootObjectPropertyName, req._objectPaths, req._actions, false, true);
                    var debugInfoStatementInfo = prettyPrinter.processForDebugStatementInfo(response.Body.Error.ActionIndex);
                    errorStatementInfo = {
                        statement: debugInfoStatementInfo.statement,
                        surroundingStatements: debugInfoStatementInfo.surroundingStatements,
                        fullStatements: ['Please enable config.extendedErrorLogging to see full statements.']
                    };
                    if (OfficeExtension_1.config.extendedErrorLogging) {
                        prettyPrinter = new RequestPrettyPrinter(this._rootObjectPropertyName, req._objectPaths, req._actions, false, false);
                        errorStatementInfo.fullStatements = prettyPrinter.process();
                    }
                }
                var actionResults = null;
                if (response.Body.Results) {
                    actionResults = response.Body.Results;
                }
                else if (response.Body.ProcessedResults && response.Body.ProcessedResults.Results) {
                    actionResults = response.Body.ProcessedResults.Results;
                }
                if (actionResults) {
                    this._processingResult = true;
                    try {
                        req.processResponse(actionResults);
                    }
                    finally {
                        this._processingResult = false;
                    }
                }
            }
            if (!Utility.isNullOrEmptyString(response.ErrorCode)) {
                return new _Internal.RuntimeError({
                    code: response.ErrorCode,
                    httpStatusCode: response.HttpStatusCode,
                    message: response.ErrorMessage,
                    traceMessages: traceMessages
                });
            }
            else if (response.Body && response.Body.Error) {
                var debugInfo = {
                    errorLocation: response.Body.Error.Location
                };
                if (errorStatementInfo) {
                    debugInfo.statement = errorStatementInfo.statement;
                    debugInfo.surroundingStatements = errorStatementInfo.surroundingStatements;
                    debugInfo.fullStatements = errorStatementInfo.fullStatements;
                }
                return new _Internal.RuntimeError({
                    code: response.Body.Error.Code,
                    httpStatusCode: response.Body.Error.HttpStatusCode,
                    message: response.Body.Error.Message,
                    traceMessages: traceMessages,
                    debugInfo: debugInfo
                });
            }
            return null;
        };
        ClientRequestContext.prototype.processPendingEventHandlers = function (req) {
            var ret = Utility._createPromiseFromResult(null);
            for (var i = 0; i < req._pendingProcessEventHandlers.length; i++) {
                var eventHandlers = req._pendingProcessEventHandlers[i];
                ret = ret.then(this.createProcessOneEventHandlersFunc(eventHandlers, req));
            }
            return ret;
        };
        ClientRequestContext.prototype.createProcessOneEventHandlersFunc = function (eventHandlers, req) {
            return function () { return eventHandlers._processRegistration(req); };
        };
        ClientRequestContext.prototype.processPreSyncPromises = function (req) {
            var ret = Utility._createPromiseFromResult(null);
            for (var i = 0; i < req._preSyncPromises.length; i++) {
                var p = req._preSyncPromises[i];
                ret = ret.then(this.createProcessOneProSyncFunc(p));
            }
            return ret;
        };
        ClientRequestContext.prototype.createProcessOneProSyncFunc = function (p) {
            return function () { return p; };
        };
        ClientRequestContext.prototype.sync = function (passThroughValue) {
            if (TestUtility.isMock()) {
                return CoreUtility._createPromiseFromResult(passThroughValue);
            }
            return this.syncPrivateMain().then(function () { return passThroughValue; });
        };
        ClientRequestContext.prototype.batch = function (batchBody) {
            var _this = this;
            if (this.m_batchMode !== 1) {
                return CoreUtility._createPromiseFromException(Utility.createRuntimeError(CoreErrorCodes.generalException, null, null));
            }
            if (this.m_explicitBatchInProgress) {
                return CoreUtility._createPromiseFromException(Utility.createRuntimeError(CoreErrorCodes.generalException, CoreUtility._getResourceString(ResourceStrings.pendingBatchInProgress), null));
            }
            if (Utility.isNullOrUndefined(batchBody)) {
                return Utility._createPromiseFromResult(null);
            }
            this.m_explicitBatchInProgress = true;
            var previousRequest = this.m_pendingRequest;
            this.m_pendingRequest = new ClientRequest(this);
            var batchBodyResult;
            try {
                batchBodyResult = batchBody(this._rootObject, this);
            }
            catch (ex) {
                this.m_explicitBatchInProgress = false;
                this.m_pendingRequest = previousRequest;
                return CoreUtility._createPromiseFromException(ex);
            }
            var request;
            var batchBodyResultPromise;
            if (typeof batchBodyResult === 'object' && batchBodyResult && typeof batchBodyResult.then === 'function') {
                batchBodyResultPromise = Utility._createPromiseFromResult(null)
                    .then(function () {
                    return batchBodyResult;
                })
                    .then(function (result) {
                    _this.m_explicitBatchInProgress = false;
                    request = _this.m_pendingRequest;
                    _this.m_pendingRequest = previousRequest;
                    return result;
                })["catch"](function (ex) {
                    _this.m_explicitBatchInProgress = false;
                    request = _this.m_pendingRequest;
                    _this.m_pendingRequest = previousRequest;
                    return CoreUtility._createPromiseFromException(ex);
                });
            }
            else {
                this.m_explicitBatchInProgress = false;
                request = this.m_pendingRequest;
                this.m_pendingRequest = previousRequest;
                batchBodyResultPromise = Utility._createPromiseFromResult(batchBodyResult);
            }
            return batchBodyResultPromise.then(function (result) {
                return _this.ensureRequestUrlAndHeaderInfo()
                    .then(function () {
                    return _this.syncPrivate(request);
                })
                    .then(function () {
                    return result;
                });
            });
        };
        ClientRequestContext._run = function (ctxInitializer, runBody, numCleanupAttempts, retryDelay, onCleanupSuccess, onCleanupFailure) {
            if (numCleanupAttempts === void 0) {
                numCleanupAttempts = 3;
            }
            if (retryDelay === void 0) {
                retryDelay = 5000;
            }
            return ClientRequestContext._runCommon('run', null, ctxInitializer, 0, runBody, numCleanupAttempts, retryDelay, null, onCleanupSuccess, onCleanupFailure);
        };
        ClientRequestContext.isValidRequestInfo = function (value) {
            return (typeof value === 'string' ||
                ClientRequestContext.isRequestUrlAndHeaderInfo(value) ||
                ClientRequestContext.isRequestUrlAndHeaderInfoResolver(value));
        };
        ClientRequestContext.isRequestUrlAndHeaderInfo = function (value) {
            return (typeof value === 'object' &&
                value !== null &&
                Object.getPrototypeOf(value) === Object.getPrototypeOf({}) &&
                !Utility.isNullOrUndefined(value.url));
        };
        ClientRequestContext.isRequestUrlAndHeaderInfoResolver = function (value) {
            return typeof value === 'object' && value !== null && typeof value._resolveRequestUrlAndHeaderInfo === 'function';
        };
        ClientRequestContext._runBatch = function (functionName, receivedRunArgs, ctxInitializer, onBeforeRun, numCleanupAttempts, retryDelay, onCleanupSuccess, onCleanupFailure) {
            if (numCleanupAttempts === void 0) {
                numCleanupAttempts = 3;
            }
            if (retryDelay === void 0) {
                retryDelay = 5000;
            }
            return ClientRequestContext._runBatchCommon(0, functionName, receivedRunArgs, ctxInitializer, numCleanupAttempts, retryDelay, onBeforeRun, onCleanupSuccess, onCleanupFailure);
        };
        ClientRequestContext._runExplicitBatch = function (functionName, receivedRunArgs, ctxInitializer, onBeforeRun, numCleanupAttempts, retryDelay, onCleanupSuccess, onCleanupFailure) {
            if (numCleanupAttempts === void 0) {
                numCleanupAttempts = 3;
            }
            if (retryDelay === void 0) {
                retryDelay = 5000;
            }
            return ClientRequestContext._runBatchCommon(1, functionName, receivedRunArgs, ctxInitializer, numCleanupAttempts, retryDelay, onBeforeRun, onCleanupSuccess, onCleanupFailure);
        };
        ClientRequestContext._runBatchCommon = function (batchMode, functionName, receivedRunArgs, ctxInitializer, numCleanupAttempts, retryDelay, onBeforeRun, onCleanupSuccess, onCleanupFailure) {
            if (numCleanupAttempts === void 0) {
                numCleanupAttempts = 3;
            }
            if (retryDelay === void 0) {
                retryDelay = 5000;
            }
            var ctxRetriever;
            var batch;
            var requestInfo = null;
            var previousObjects = null;
            var argOffset = 0;
            var options = null;
            if (receivedRunArgs.length > 0) {
                if (ClientRequestContext.isValidRequestInfo(receivedRunArgs[0])) {
                    requestInfo = receivedRunArgs[0];
                    argOffset = 1;
                }
                else if (Utility.isPlainJsonObject(receivedRunArgs[0])) {
                    options = receivedRunArgs[0];
                    requestInfo = options.session;
                    if (requestInfo != null && !ClientRequestContext.isValidRequestInfo(requestInfo)) {
                        return ClientRequestContext.createErrorPromise(functionName);
                    }
                    previousObjects = options.previousObjects;
                    argOffset = 1;
                }
            }
            if (receivedRunArgs.length == argOffset + 1) {
                batch = receivedRunArgs[argOffset + 0];
            }
            else if (options == null && receivedRunArgs.length == argOffset + 2) {
                previousObjects = receivedRunArgs[argOffset + 0];
                batch = receivedRunArgs[argOffset + 1];
            }
            else {
                return ClientRequestContext.createErrorPromise(functionName);
            }
            if (previousObjects != null) {
                if (previousObjects instanceof ClientObject) {
                    ctxRetriever = function () { return previousObjects.context; };
                }
                else if (previousObjects instanceof ClientRequestContext) {
                    ctxRetriever = function () { return previousObjects; };
                }
                else if (Array.isArray(previousObjects)) {
                    var array = previousObjects;
                    if (array.length == 0) {
                        return ClientRequestContext.createErrorPromise(functionName);
                    }
                    for (var i = 0; i < array.length; i++) {
                        if (!(array[i] instanceof ClientObject)) {
                            return ClientRequestContext.createErrorPromise(functionName);
                        }
                        if (array[i].context != array[0].context) {
                            return ClientRequestContext.createErrorPromise(functionName, ResourceStrings.invalidRequestContext);
                        }
                    }
                    ctxRetriever = function () { return array[0].context; };
                }
                else {
                    return ClientRequestContext.createErrorPromise(functionName);
                }
            }
            else {
                ctxRetriever = ctxInitializer;
            }
            var onBeforeRunWithOptions = null;
            if (onBeforeRun) {
                onBeforeRunWithOptions = function (context) { return onBeforeRun(options || {}, context); };
            }
            return ClientRequestContext._runCommon(functionName, requestInfo, ctxRetriever, batchMode, batch, numCleanupAttempts, retryDelay, onBeforeRunWithOptions, onCleanupSuccess, onCleanupFailure);
        };
        ClientRequestContext.createErrorPromise = function (functionName, code) {
            if (code === void 0) {
                code = CoreResourceStrings.invalidArgument;
            }
            return CoreUtility._createPromiseFromException(Utility.createRuntimeError(code, CoreUtility._getResourceString(code), functionName));
        };
        ClientRequestContext._runCommon = function (functionName, requestInfo, ctxRetriever, batchMode, runBody, numCleanupAttempts, retryDelay, onBeforeRun, onCleanupSuccess, onCleanupFailure) {
            if (SessionBase._overrideSession) {
                requestInfo = SessionBase._overrideSession;
            }
            var starterPromise = CoreUtility.createPromise(function (resolve, reject) {
                resolve();
            });
            var ctx;
            var succeeded = false;
            var resultOrError;
            var previousBatchMode;
            return starterPromise
                .then(function () {
                ctx = ctxRetriever(requestInfo);
                if (ctx._autoCleanup) {
                    return new OfficeExtension_1.Promise(function (resolve, reject) {
                        ctx._onRunFinishedNotifiers.push(function () {
                            ctx._autoCleanup = true;
                            resolve();
                        });
                    });
                }
                else {
                    ctx._autoCleanup = true;
                }
            })
                .then(function () {
                if (typeof runBody !== 'function') {
                    return ClientRequestContext.createErrorPromise(functionName);
                }
                previousBatchMode = ctx.m_batchMode;
                ctx.m_batchMode = batchMode;
                if (onBeforeRun) {
                    onBeforeRun(ctx);
                }
                var runBodyResult;
                if (batchMode == 1) {
                    runBodyResult = runBody(ctx.batch.bind(ctx));
                }
                else {
                    runBodyResult = runBody(ctx);
                }
                if (Utility.isNullOrUndefined(runBodyResult) || typeof runBodyResult.then !== 'function') {
                    Utility.throwError(ResourceStrings.runMustReturnPromise);
                }
                return runBodyResult;
            })
                .then(function (runBodyResult) {
                if (batchMode === 1) {
                    return runBodyResult;
                }
                else {
                    return ctx.sync(runBodyResult);
                }
            })
                .then(function (result) {
                succeeded = true;
                resultOrError = result;
            })["catch"](function (error) {
                resultOrError = error;
            })
                .then(function () {
                var itemsToRemove = ctx.trackedObjects._retrieveAndClearAutoCleanupList();
                ctx._autoCleanup = false;
                ctx.m_batchMode = previousBatchMode;
                for (var key in itemsToRemove) {
                    itemsToRemove[key]._objectPath.isValid = false;
                }
                var cleanupCounter = 0;
                if (Utility._synchronousCleanup || ClientRequestContext.isRequestUrlAndHeaderInfoResolver(requestInfo)) {
                    return attemptCleanup();
                }
                else {
                    attemptCleanup();
                }
                function attemptCleanup() {
                    cleanupCounter++;
                    var savedPendingRequest = ctx.m_pendingRequest;
                    var savedBatchMode = ctx.m_batchMode;
                    var request = new ClientRequest(ctx);
                    ctx.m_pendingRequest = request;
                    ctx.m_batchMode = 0;
                    try {
                        for (var key in itemsToRemove) {
                            ctx.trackedObjects.remove(itemsToRemove[key]);
                        }
                    }
                    finally {
                        ctx.m_batchMode = savedBatchMode;
                        ctx.m_pendingRequest = savedPendingRequest;
                    }
                    return ctx
                        .syncPrivate(request)
                        .then(function () {
                        if (onCleanupSuccess) {
                            onCleanupSuccess(cleanupCounter);
                        }
                    })["catch"](function () {
                        if (onCleanupFailure) {
                            onCleanupFailure(cleanupCounter);
                        }
                        if (cleanupCounter < numCleanupAttempts) {
                            setTimeout(function () {
                                attemptCleanup();
                            }, retryDelay);
                        }
                    });
                }
            })
                .then(function () {
                if (ctx._onRunFinishedNotifiers && ctx._onRunFinishedNotifiers.length > 0) {
                    var func = ctx._onRunFinishedNotifiers.shift();
                    func();
                }
                if (succeeded) {
                    return resultOrError;
                }
                else {
                    throw resultOrError;
                }
            });
        };
        return ClientRequestContext;
    }(ClientRequestContextBase));
    OfficeExtension_1.ClientRequestContext = ClientRequestContext;
    var RetrieveResultImpl = (function () {
        function RetrieveResultImpl(m_proxy, m_shouldPolyfill) {
            this.m_proxy = m_proxy;
            this.m_shouldPolyfill = m_shouldPolyfill;
            var scalarPropertyNames = m_proxy[Constants.scalarPropertyNames];
            var navigationPropertyNames = m_proxy[Constants.navigationPropertyNames];
            var typeName = m_proxy[Constants.className];
            var isCollection = m_proxy[Constants.isCollection];
            if (scalarPropertyNames) {
                for (var i = 0; i < scalarPropertyNames.length; i++) {
                    Utility.definePropertyThrowUnloadedException(this, typeName, scalarPropertyNames[i]);
                }
            }
            if (navigationPropertyNames) {
                for (var i = 0; i < navigationPropertyNames.length; i++) {
                    Utility.definePropertyThrowUnloadedException(this, typeName, navigationPropertyNames[i]);
                }
            }
            if (isCollection) {
                Utility.definePropertyThrowUnloadedException(this, typeName, Constants.itemsLowerCase);
            }
        }
        Object.defineProperty(RetrieveResultImpl.prototype, "$proxy", {
            get: function () {
                return this.m_proxy;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RetrieveResultImpl.prototype, "$isNullObject", {
            get: function () {
                if (!this.m_isLoaded) {
                    throw new _Internal.RuntimeError({
                        code: ErrorCodes.valueNotLoaded,
                        httpStatusCode: 400,
                        message: CoreUtility._getResourceString(ResourceStrings.valueNotLoaded),
                        debugInfo: {
                            errorLocation: 'retrieveResult.$isNullObject'
                        }
                    });
                }
                return this.m_isNullObject;
            },
            enumerable: true,
            configurable: true
        });
        RetrieveResultImpl.prototype.toJSON = function () {
            if (!this.m_isLoaded) {
                return undefined;
            }
            if (this.m_isNullObject) {
                return null;
            }
            if (Utility.isUndefined(this.m_json)) {
                this.m_json = Utility.purifyJson(this.m_value);
            }
            return this.m_json;
        };
        RetrieveResultImpl.prototype.toString = function () {
            return JSON.stringify(this.toJSON());
        };
        RetrieveResultImpl.prototype._handleResult = function (value) {
            this.m_isLoaded = true;
            if (value === null || (typeof value === 'object' && value && value._IsNull)) {
                this.m_isNullObject = true;
                value = null;
            }
            else {
                this.m_isNullObject = false;
            }
            if (this.m_shouldPolyfill) {
                value = Utility.changePropertyNameToCamelLowerCase(value);
            }
            this.m_value = value;
            this.m_proxy._handleRetrieveResult(value, this);
        };
        return RetrieveResultImpl;
    }());
    var Constants = (function (_super) {
        __extends(Constants, _super);
        function Constants() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Constants.getItemAt = 'GetItemAt';
        Constants.index = '_Index';
        Constants.iterativeExecutor = 'IterativeExecutor';
        Constants.isTracked = '_IsTracked';
        Constants.eventMessageCategory = 65536;
        Constants.eventWorkbookId = 'Workbook';
        Constants.eventSourceRemote = 'Remote';
        Constants.proxy = '$proxy';
        Constants.className = '_className';
        Constants.isCollection = '_isCollection';
        Constants.collectionPropertyPath = '_collectionPropertyPath';
        Constants.objectPathInfoDoNotKeepReferenceFieldName = 'D';
        Constants.officeScriptEventId = 'X-OfficeScriptEventId';
        Constants.officeScriptFireRecordingEvent = 'X-OfficeScriptFireRecordingEvent';
        return Constants;
    }(CommonConstants));
    OfficeExtension_1.Constants = Constants;
    var ClientRequest = (function (_super) {
        __extends(ClientRequest, _super);
        function ClientRequest(context) {
            var _this = _super.call(this, context) || this;
            _this.m_context = context;
            _this.m_pendingProcessEventHandlers = [];
            _this.m_pendingEventHandlerActions = {};
            _this.m_traceInfos = {};
            _this.m_responseTraceIds = {};
            _this.m_responseTraceMessages = [];
            return _this;
        }
        Object.defineProperty(ClientRequest.prototype, "traceInfos", {
            get: function () {
                return this.m_traceInfos;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequest.prototype, "_responseTraceMessages", {
            get: function () {
                return this.m_responseTraceMessages;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ClientRequest.prototype, "_responseTraceIds", {
            get: function () {
                return this.m_responseTraceIds;
            },
            enumerable: true,
            configurable: true
        });
        ClientRequest.prototype._setResponseTraceIds = function (value) {
            if (value) {
                for (var i = 0; i < value.length; i++) {
                    var traceId = value[i];
                    this.m_responseTraceIds[traceId] = traceId;
                    var message = this.m_traceInfos[traceId];
                    if (!CoreUtility.isNullOrUndefined(message)) {
                        this.m_responseTraceMessages.push(message);
                    }
                }
            }
        };
        ClientRequest.prototype.addTrace = function (actionId, message) {
            this.m_traceInfos[actionId] = message;
        };
        ClientRequest.prototype._addPendingEventHandlerAction = function (eventHandlers, action) {
            if (!this.m_pendingEventHandlerActions[eventHandlers._id]) {
                this.m_pendingEventHandlerActions[eventHandlers._id] = [];
                this.m_pendingProcessEventHandlers.push(eventHandlers);
            }
            this.m_pendingEventHandlerActions[eventHandlers._id].push(action);
        };
        Object.defineProperty(ClientRequest.prototype, "_pendingProcessEventHandlers", {
            get: function () {
                return this.m_pendingProcessEventHandlers;
            },
            enumerable: true,
            configurable: true
        });
        ClientRequest.prototype._getPendingEventHandlerActions = function (eventHandlers) {
            return this.m_pendingEventHandlerActions[eventHandlers._id];
        };
        return ClientRequest;
    }(ClientRequestBase));
    OfficeExtension_1.ClientRequest = ClientRequest;
    var EventHandlers = (function () {
        function EventHandlers(context, parentObject, name, eventInfo) {
            var _this = this;
            this.m_id = context._nextId();
            this.m_context = context;
            this.m_name = name;
            this.m_handlers = [];
            this.m_registered = false;
            this.m_eventInfo = eventInfo;
            this.m_callback = function (args) {
                _this.m_eventInfo.eventArgsTransformFunc(args).then(function (newArgs) { return _this.fireEvent(newArgs); });
            };
        }
        Object.defineProperty(EventHandlers.prototype, "_registered", {
            get: function () {
                return this.m_registered;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(EventHandlers.prototype, "_id", {
            get: function () {
                return this.m_id;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(EventHandlers.prototype, "_handlers", {
            get: function () {
                return this.m_handlers;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(EventHandlers.prototype, "_context", {
            get: function () {
                return this.m_context;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(EventHandlers.prototype, "_callback", {
            get: function () {
                return this.m_callback;
            },
            enumerable: true,
            configurable: true
        });
        EventHandlers.prototype.add = function (handler) {
            var action = ActionFactory.createTraceAction(this.m_context, null, false);
            this.m_context._pendingRequest._addPendingEventHandlerAction(this, {
                id: action.actionInfo.Id,
                handler: handler,
                operation: 0
            });
            return new EventHandlerResult(this.m_context, this, handler);
        };
        EventHandlers.prototype.remove = function (handler) {
            var action = ActionFactory.createTraceAction(this.m_context, null, false);
            this.m_context._pendingRequest._addPendingEventHandlerAction(this, {
                id: action.actionInfo.Id,
                handler: handler,
                operation: 1
            });
        };
        EventHandlers.prototype.removeAll = function () {
            var action = ActionFactory.createTraceAction(this.m_context, null, false);
            this.m_context._pendingRequest._addPendingEventHandlerAction(this, {
                id: action.actionInfo.Id,
                handler: null,
                operation: 2
            });
        };
        EventHandlers.prototype._processRegistration = function (req) {
            var _this = this;
            var ret = CoreUtility._createPromiseFromResult(null);
            var actions = req._getPendingEventHandlerActions(this);
            if (!actions) {
                return ret;
            }
            var handlersResult = [];
            for (var i = 0; i < this.m_handlers.length; i++) {
                handlersResult.push(this.m_handlers[i]);
            }
            var hasChange = false;
            for (var i = 0; i < actions.length; i++) {
                if (req._responseTraceIds[actions[i].id]) {
                    hasChange = true;
                    switch (actions[i].operation) {
                        case 0:
                            handlersResult.push(actions[i].handler);
                            break;
                        case 1:
                            for (var index = handlersResult.length - 1; index >= 0; index--) {
                                if (handlersResult[index] === actions[i].handler) {
                                    handlersResult.splice(index, 1);
                                    break;
                                }
                            }
                            break;
                        case 2:
                            handlersResult = [];
                            break;
                    }
                }
            }
            if (hasChange) {
                if (!this.m_registered && handlersResult.length > 0) {
                    ret = ret.then(function () { return _this.m_eventInfo.registerFunc(_this.m_callback); }).then(function () { return (_this.m_registered = true); });
                }
                else if (this.m_registered && handlersResult.length == 0) {
                    ret = ret
                        .then(function () { return _this.m_eventInfo.unregisterFunc(_this.m_callback); })["catch"](function (ex) {
                        CoreUtility.log('Error when unregister event: ' + JSON.stringify(ex));
                    })
                        .then(function () { return (_this.m_registered = false); });
                }
                ret = ret.then(function () { return (_this.m_handlers = handlersResult); });
            }
            return ret;
        };
        EventHandlers.prototype.fireEvent = function (args) {
            var promises = [];
            for (var i = 0; i < this.m_handlers.length; i++) {
                var handler = this.m_handlers[i];
                var p = CoreUtility._createPromiseFromResult(null)
                    .then(this.createFireOneEventHandlerFunc(handler, args))["catch"](function (ex) {
                    CoreUtility.log('Error when invoke handler: ' + JSON.stringify(ex));
                });
                promises.push(p);
            }
            CoreUtility.Promise.all(promises);
        };
        EventHandlers.prototype.createFireOneEventHandlerFunc = function (handler, args) {
            return function () { return handler(args); };
        };
        return EventHandlers;
    }());
    OfficeExtension_1.EventHandlers = EventHandlers;
    var EventHandlerResult = (function () {
        function EventHandlerResult(context, handlers, handler) {
            this.m_context = context;
            this.m_allHandlers = handlers;
            this.m_handler = handler;
        }
        Object.defineProperty(EventHandlerResult.prototype, "context", {
            get: function () {
                return this.m_context;
            },
            enumerable: true,
            configurable: true
        });
        EventHandlerResult.prototype.remove = function () {
            if (this.m_allHandlers && this.m_handler) {
                this.m_allHandlers.remove(this.m_handler);
                this.m_allHandlers = null;
                this.m_handler = null;
            }
        };
        return EventHandlerResult;
    }());
    OfficeExtension_1.EventHandlerResult = EventHandlerResult;
    (function (_Internal) {
        var OfficeJsEventRegistration = (function () {
            function OfficeJsEventRegistration() {
            }
            OfficeJsEventRegistration.prototype.register = function (eventId, targetId, handler) {
                switch (eventId) {
                    case 4:
                        return Utility.promisify(function (callback) { return Office.context.document.bindings.getByIdAsync(targetId, callback); }).then(function (officeBinding) {
                            return Utility.promisify(function (callback) {
                                return officeBinding.addHandlerAsync(Office.EventType.BindingDataChanged, handler, callback);
                            });
                        });
                    case 3:
                        return Utility.promisify(function (callback) { return Office.context.document.bindings.getByIdAsync(targetId, callback); }).then(function (officeBinding) {
                            return Utility.promisify(function (callback) {
                                return officeBinding.addHandlerAsync(Office.EventType.BindingSelectionChanged, handler, callback);
                            });
                        });
                    case 2:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.addHandlerAsync(Office.EventType.DocumentSelectionChanged, handler, callback);
                        });
                    case 1:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.settings.addHandlerAsync(Office.EventType.SettingsChanged, handler, callback);
                        });
                    case 5:
                        return OSF.DDA.RichApi.richApiMessageManager.register(handler);
                    case 13:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.addHandlerAsync(Office.EventType.ObjectDeleted, handler, { id: targetId }, callback);
                        });
                    case 14:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.addHandlerAsync(Office.EventType.ObjectSelectionChanged, handler, { id: targetId }, callback);
                        });
                    case 15:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.addHandlerAsync(Office.EventType.ObjectDataChanged, handler, { id: targetId }, callback);
                        });
                    case 16:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.addHandlerAsync(Office.EventType.ContentControlAdded, handler, { id: targetId }, callback);
                        });
                    default:
                        throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'eventId' });
                }
            };
            OfficeJsEventRegistration.prototype.unregister = function (eventId, targetId, handler) {
                switch (eventId) {
                    case 4:
                        return Utility.promisify(function (callback) { return Office.context.document.bindings.getByIdAsync(targetId, callback); }).then(function (officeBinding) {
                            return Utility.promisify(function (callback) {
                                return officeBinding.removeHandlerAsync(Office.EventType.BindingDataChanged, { handler: handler }, callback);
                            });
                        });
                    case 3:
                        return Utility.promisify(function (callback) { return Office.context.document.bindings.getByIdAsync(targetId, callback); }).then(function (officeBinding) {
                            return Utility.promisify(function (callback) {
                                return officeBinding.removeHandlerAsync(Office.EventType.BindingSelectionChanged, { handler: handler }, callback);
                            });
                        });
                    case 2:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.removeHandlerAsync(Office.EventType.DocumentSelectionChanged, { handler: handler }, callback);
                        });
                    case 1:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.settings.removeHandlerAsync(Office.EventType.SettingsChanged, { handler: handler }, callback);
                        });
                    case 5:
                        return Utility.promisify(function (callback) {
                            return OSF.DDA.RichApi.richApiMessageManager.removeHandlerAsync('richApiMessage', { handler: handler }, callback);
                        });
                    case 13:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.removeHandlerAsync(Office.EventType.ObjectDeleted, { id: targetId, handler: handler }, callback);
                        });
                    case 14:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.removeHandlerAsync(Office.EventType.ObjectSelectionChanged, { id: targetId, handler: handler }, callback);
                        });
                    case 15:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.removeHandlerAsync(Office.EventType.ObjectDataChanged, { id: targetId, handler: handler }, callback);
                        });
                    case 16:
                        return Utility.promisify(function (callback) {
                            return Office.context.document.removeHandlerAsync(Office.EventType.ContentControlAdded, { id: targetId, handler: handler }, callback);
                        });
                    default:
                        throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'eventId' });
                }
            };
            return OfficeJsEventRegistration;
        }());
        _Internal.officeJsEventRegistration = new OfficeJsEventRegistration();
    })(_Internal = OfficeExtension_1._Internal || (OfficeExtension_1._Internal = {}));
    var EventRegistration = (function () {
        function EventRegistration(registerEventImpl, unregisterEventImpl) {
            this.m_handlersByEventByTarget = {};
            this.m_registerEventImpl = registerEventImpl;
            this.m_unregisterEventImpl = unregisterEventImpl;
        }
        EventRegistration.getTargetIdOrDefault = function (targetId) {
            if (Utility.isNullOrUndefined(targetId)) {
                return '';
            }
            return targetId;
        };
        EventRegistration.prototype.getHandlers = function (eventId, targetId) {
            targetId = EventRegistration.getTargetIdOrDefault(targetId);
            var handlersById = this.m_handlersByEventByTarget[eventId];
            if (!handlersById) {
                handlersById = {};
                this.m_handlersByEventByTarget[eventId] = handlersById;
            }
            var handlers = handlersById[targetId];
            if (!handlers) {
                handlers = [];
                handlersById[targetId] = handlers;
            }
            return handlers;
        };
        EventRegistration.prototype.callHandlers = function (eventId, targetId, argument) {
            var funcs = this.getHandlers(eventId, targetId);
            for (var i = 0; i < funcs.length; i++) {
                funcs[i](argument);
            }
        };
        EventRegistration.prototype.hasHandlers = function (eventId, targetId) {
            return this.getHandlers(eventId, targetId).length > 0;
        };
        EventRegistration.prototype.register = function (eventId, targetId, handler) {
            if (!handler) {
                throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'handler' });
            }
            var handlers = this.getHandlers(eventId, targetId);
            handlers.push(handler);
            if (handlers.length === 1) {
                return this.m_registerEventImpl(eventId, targetId);
            }
            return Utility._createPromiseFromResult(null);
        };
        EventRegistration.prototype.unregister = function (eventId, targetId, handler) {
            if (!handler) {
                throw _Internal.RuntimeError._createInvalidArgError({ argumentName: 'handler' });
            }
            var handlers = this.getHandlers(eventId, targetId);
            for (var index = handlers.length - 1; index >= 0; index--) {
                if (handlers[index] === handler) {
                    handlers.splice(index, 1);
                    break;
                }
            }
            if (handlers.length === 0) {
                return this.m_unregisterEventImpl(eventId, targetId);
            }
            return Utility._createPromiseFromResult(null);
        };
        return EventRegistration;
    }());
    OfficeExtension_1.EventRegistration = EventRegistration;
    var GenericEventRegistration = (function () {
        function GenericEventRegistration() {
            this.m_eventRegistration = new EventRegistration(this._registerEventImpl.bind(this), this._unregisterEventImpl.bind(this));
            this.m_richApiMessageHandler = this._handleRichApiMessage.bind(this);
        }
        GenericEventRegistration.prototype.ready = function () {
            var _this = this;
            if (!this.m_ready) {
                if (GenericEventRegistration._testReadyImpl) {
                    this.m_ready = GenericEventRegistration._testReadyImpl().then(function () {
                        _this.m_isReady = true;
                    });
                }
                else if (HostBridge.instance) {
                    this.m_ready = Utility._createPromiseFromResult(null).then(function () {
                        _this.m_isReady = true;
                    });
                }
                else {
                    this.m_ready = _Internal.officeJsEventRegistration
                        .register(5, '', this.m_richApiMessageHandler)
                        .then(function () {
                        _this.m_isReady = true;
                    });
                }
            }
            return this.m_ready;
        };
        Object.defineProperty(GenericEventRegistration.prototype, "isReady", {
            get: function () {
                return this.m_isReady;
            },
            enumerable: true,
            configurable: true
        });
        GenericEventRegistration.prototype.register = function (eventId, targetId, handler) {
            var _this = this;
            return this.ready().then(function () { return _this.m_eventRegistration.register(eventId, targetId, handler); });
        };
        GenericEventRegistration.prototype.unregister = function (eventId, targetId, handler) {
            var _this = this;
            return this.ready().then(function () { return _this.m_eventRegistration.unregister(eventId, targetId, handler); });
        };
        GenericEventRegistration.prototype._registerEventImpl = function (eventId, targetId) {
            return Utility._createPromiseFromResult(null);
        };
        GenericEventRegistration.prototype._unregisterEventImpl = function (eventId, targetId) {
            return Utility._createPromiseFromResult(null);
        };
        GenericEventRegistration.prototype._handleRichApiMessage = function (msg) {
            if (msg && msg.entries) {
                for (var entryIndex = 0; entryIndex < msg.entries.length; entryIndex++) {
                    var entry = msg.entries[entryIndex];
                    if (entry.messageCategory == Constants.eventMessageCategory) {
                        if (CoreUtility._logEnabled) {
                            CoreUtility.log(JSON.stringify(entry));
                        }
                        var eventId = entry.messageType;
                        var targetId = entry.targetId;
                        var hasHandlers = this.m_eventRegistration.hasHandlers(eventId, targetId);
                        if (hasHandlers) {
                            var arg = JSON.parse(entry.message);
                            if (entry.isRemoteOverride) {
                                arg.source = Constants.eventSourceRemote;
                            }
                            this.m_eventRegistration.callHandlers(eventId, targetId, arg);
                        }
                    }
                }
            }
        };
        GenericEventRegistration.getGenericEventRegistration = function () {
            if (!GenericEventRegistration.s_genericEventRegistration) {
                GenericEventRegistration.s_genericEventRegistration = new GenericEventRegistration();
            }
            return GenericEventRegistration.s_genericEventRegistration;
        };
        GenericEventRegistration.richApiMessageEventCategory = 65536;
        return GenericEventRegistration;
    }());
    OfficeExtension_1.GenericEventRegistration = GenericEventRegistration;
    function _testSetRichApiMessageReadyImpl(impl) {
        GenericEventRegistration._testReadyImpl = impl;
    }
    OfficeExtension_1._testSetRichApiMessageReadyImpl = _testSetRichApiMessageReadyImpl;
    function _testTriggerRichApiMessageEvent(msg) {
        GenericEventRegistration.getGenericEventRegistration()._handleRichApiMessage(msg);
    }
    OfficeExtension_1._testTriggerRichApiMessageEvent = _testTriggerRichApiMessageEvent;
    var GenericEventHandlers = (function (_super) {
        __extends(GenericEventHandlers, _super);
        function GenericEventHandlers(context, parentObject, name, eventInfo) {
            var _this = _super.call(this, context, parentObject, name, eventInfo) || this;
            _this.m_genericEventInfo = eventInfo;
            return _this;
        }
        GenericEventHandlers.prototype.add = function (handler) {
            var _this = this;
            if (this._handlers.length == 0 && this.m_genericEventInfo.registerFunc) {
                this.m_genericEventInfo.registerFunc();
            }
            if (!GenericEventRegistration.getGenericEventRegistration().isReady) {
                this._context._pendingRequest._addPreSyncPromise(GenericEventRegistration.getGenericEventRegistration().ready());
            }
            ActionFactory.createTraceMarkerForCallback(this._context, function () {
                _this._handlers.push(handler);
                if (_this._handlers.length == 1) {
                    GenericEventRegistration.getGenericEventRegistration().register(_this.m_genericEventInfo.eventType, _this.m_genericEventInfo.getTargetIdFunc(), _this._callback);
                }
            });
            return new EventHandlerResult(this._context, this, handler);
        };
        GenericEventHandlers.prototype.remove = function (handler) {
            var _this = this;
            if (this._handlers.length == 1 && this.m_genericEventInfo.unregisterFunc) {
                this.m_genericEventInfo.unregisterFunc();
            }
            ActionFactory.createTraceMarkerForCallback(this._context, function () {
                var handlers = _this._handlers;
                for (var index = handlers.length - 1; index >= 0; index--) {
                    if (handlers[index] === handler) {
                        handlers.splice(index, 1);
                        break;
                    }
                }
                if (handlers.length == 0) {
                    GenericEventRegistration.getGenericEventRegistration().unregister(_this.m_genericEventInfo.eventType, _this.m_genericEventInfo.getTargetIdFunc(), _this._callback);
                }
            });
        };
        GenericEventHandlers.prototype.removeAll = function () { };
        return GenericEventHandlers;
    }(EventHandlers));
    OfficeExtension_1.GenericEventHandlers = GenericEventHandlers;
    var InstantiateActionResultHandler = (function () {
        function InstantiateActionResultHandler(clientObject) {
            this.m_clientObject = clientObject;
        }
        InstantiateActionResultHandler.prototype._handleResult = function (value) {
            this.m_clientObject._handleIdResult(value);
        };
        return InstantiateActionResultHandler;
    }());
    var ObjectPathFactory = (function () {
        function ObjectPathFactory() {
        }
        ObjectPathFactory.createGlobalObjectObjectPath = function (context) {
            var objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 1,
                Name: ''
            };
            return new ObjectPath(objectPathInfo, null, false, false, 1, 4);
        };
        ObjectPathFactory.createNewObjectObjectPath = function (context, typeName, isCollection, flags) {
            var objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 2,
                Name: typeName
            };
            var ret = new ObjectPath(objectPathInfo, null, isCollection, false, 1, Utility._fixupApiFlags(flags));
            return ret;
        };
        ObjectPathFactory.createPropertyObjectPath = function (context, parent, propertyName, isCollection, isInvalidAfterRequest, flags) {
            var objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 4,
                Name: propertyName,
                ParentObjectPathId: parent._objectPath.objectPathInfo.Id
            };
            var ret = new ObjectPath(objectPathInfo, parent._objectPath, isCollection, isInvalidAfterRequest, 1, Utility._fixupApiFlags(flags));
            return ret;
        };
        ObjectPathFactory.createIndexerObjectPath = function (context, parent, args) {
            var objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 5,
                Name: '',
                ParentObjectPathId: parent._objectPath.objectPathInfo.Id,
                ArgumentInfo: {}
            };
            objectPathInfo.ArgumentInfo.Arguments = args;
            return new ObjectPath(objectPathInfo, parent._objectPath, false, false, 1, 4);
        };
        ObjectPathFactory.createIndexerObjectPathUsingParentPath = function (context, parentObjectPath, args) {
            var objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 5,
                Name: '',
                ParentObjectPathId: parentObjectPath.objectPathInfo.Id,
                ArgumentInfo: {}
            };
            objectPathInfo.ArgumentInfo.Arguments = args;
            return new ObjectPath(objectPathInfo, parentObjectPath, false, false, 1, 4);
        };
        ObjectPathFactory.createMethodObjectPath = function (context, parent, methodName, operationType, args, isCollection, isInvalidAfterRequest, getByIdMethodName, flags) {
            var objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 3,
                Name: methodName,
                ParentObjectPathId: parent._objectPath.objectPathInfo.Id,
                ArgumentInfo: {}
            };
            var argumentObjectPaths = Utility.setMethodArguments(context, objectPathInfo.ArgumentInfo, args);
            var ret = new ObjectPath(objectPathInfo, parent._objectPath, isCollection, isInvalidAfterRequest, operationType, Utility._fixupApiFlags(flags));
            ret.argumentObjectPaths = argumentObjectPaths;
            ret.getByIdMethodName = getByIdMethodName;
            return ret;
        };
        ObjectPathFactory.createReferenceIdObjectPath = function (context, referenceId) {
            var objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 6,
                Name: referenceId,
                ArgumentInfo: {}
            };
            var ret = new ObjectPath(objectPathInfo, null, false, false, 1, 4);
            return ret;
        };
        ObjectPathFactory.createChildItemObjectPathUsingIndexerOrGetItemAt = function (hasIndexerMethod, context, parent, childItem, index) {
            var id = Utility.tryGetObjectIdFromLoadOrRetrieveResult(childItem);
            if (hasIndexerMethod && !Utility.isNullOrUndefined(id)) {
                return ObjectPathFactory.createChildItemObjectPathUsingIndexer(context, parent, childItem);
            }
            else {
                return ObjectPathFactory.createChildItemObjectPathUsingGetItemAt(context, parent, childItem, index);
            }
        };
        ObjectPathFactory.createChildItemObjectPathUsingIndexer = function (context, parent, childItem) {
            var id = Utility.tryGetObjectIdFromLoadOrRetrieveResult(childItem);
            var objectPathInfo = (objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 5,
                Name: '',
                ParentObjectPathId: parent._objectPath.objectPathInfo.Id,
                ArgumentInfo: {}
            });
            objectPathInfo.ArgumentInfo.Arguments = [id];
            return new ObjectPath(objectPathInfo, parent._objectPath, false, false, 1, 4);
        };
        ObjectPathFactory.createChildItemObjectPathUsingGetItemAt = function (context, parent, childItem, index) {
            var indexFromServer = childItem[Constants.index];
            if (indexFromServer) {
                index = indexFromServer;
            }
            var objectPathInfo = {
                Id: context._nextId(),
                ObjectPathType: 3,
                Name: Constants.getItemAt,
                ParentObjectPathId: parent._objectPath.objectPathInfo.Id,
                ArgumentInfo: {}
            };
            objectPathInfo.ArgumentInfo.Arguments = [index];
            return new ObjectPath(objectPathInfo, parent._objectPath, false, false, 1, 4);
        };
        return ObjectPathFactory;
    }());
    OfficeExtension_1.ObjectPathFactory = ObjectPathFactory;
    var OfficeJsRequestExecutor = (function () {
        function OfficeJsRequestExecutor(context) {
            this.m_context = context;
        }
        OfficeJsRequestExecutor.prototype.executeAsync = function (customData, requestFlags, requestMessage) {
            var _this = this;
            var messageSafearray = RichApiMessageUtility.buildMessageArrayForIRequestExecutor(customData, requestFlags, requestMessage, OfficeJsRequestExecutor.SourceLibHeaderValue);
            return new OfficeExtension_1.Promise(function (resolve, reject) {
                OSF.DDA.RichApi.executeRichApiRequestAsync(messageSafearray, function (result) {
                    CoreUtility.log('Response:');
                    CoreUtility.log(JSON.stringify(result));
                    var response;
                    if (result.status == 'succeeded') {
                        response = RichApiMessageUtility.buildResponseOnSuccess(RichApiMessageUtility.getResponseBody(result), RichApiMessageUtility.getResponseHeaders(result));
                    }
                    else {
                        response = RichApiMessageUtility.buildResponseOnError(result.error.code, result.error.message);
                        _this.m_context._processOfficeJsErrorResponse(result.error.code, response);
                    }
                    resolve(response);
                });
            });
        };
        OfficeJsRequestExecutor.SourceLibHeaderValue = 'officejs';
        return OfficeJsRequestExecutor;
    }());
    var TrackedObjects = (function () {
        function TrackedObjects(context) {
            this._autoCleanupList = {};
            this.m_context = context;
        }
        TrackedObjects.prototype.add = function (param) {
            var _this = this;
            if (Array.isArray(param)) {
                param.forEach(function (item) { return _this._addCommon(item, true); });
            }
            else {
                this._addCommon(param, true);
            }
        };
        TrackedObjects.prototype._autoAdd = function (object) {
            this._addCommon(object, false);
            this._autoCleanupList[object._objectPath.objectPathInfo.Id] = object;
        };
        TrackedObjects.prototype._autoTrackIfNecessaryWhenHandleObjectResultValue = function (object, resultValue) {
            var shouldAutoTrack = this.m_context._autoCleanup &&
                !object[Constants.isTracked] &&
                object !== this.m_context._rootObject &&
                resultValue &&
                !Utility.isNullOrEmptyString(resultValue[Constants.referenceId]);
            if (shouldAutoTrack) {
                this._autoCleanupList[object._objectPath.objectPathInfo.Id] = object;
                object[Constants.isTracked] = true;
            }
        };
        TrackedObjects.prototype._addCommon = function (object, isExplicitlyAdded) {
            if (object[Constants.isTracked]) {
                if (isExplicitlyAdded && this.m_context._autoCleanup) {
                    delete this._autoCleanupList[object._objectPath.objectPathInfo.Id];
                }
                return;
            }
            var referenceId = object[Constants.referenceId];
            var donotKeepReference = object._objectPath.objectPathInfo[Constants.objectPathInfoDoNotKeepReferenceFieldName];
            if (donotKeepReference) {
                throw Utility.createRuntimeError(CoreErrorCodes.generalException, CoreUtility._getResourceString(ResourceStrings.objectIsUntracked), null);
            }
            if (Utility.isNullOrEmptyString(referenceId) && object._KeepReference) {
                object._KeepReference();
                ActionFactory.createInstantiateAction(this.m_context, object);
                if (isExplicitlyAdded && this.m_context._autoCleanup) {
                    delete this._autoCleanupList[object._objectPath.objectPathInfo.Id];
                }
                object[Constants.isTracked] = true;
            }
        };
        TrackedObjects.prototype.remove = function (param) {
            var _this = this;
            if (Array.isArray(param)) {
                param.forEach(function (item) { return _this._removeCommon(item); });
            }
            else {
                this._removeCommon(param);
            }
        };
        TrackedObjects.prototype._removeCommon = function (object) {
            object._objectPath.objectPathInfo[Constants.objectPathInfoDoNotKeepReferenceFieldName] = true;
            object.context._pendingRequest._removeKeepReferenceAction(object._objectPath.objectPathInfo.Id);
            var referenceId = object[Constants.referenceId];
            if (!Utility.isNullOrEmptyString(referenceId)) {
                var rootObject = this.m_context._rootObject;
                if (rootObject._RemoveReference) {
                    rootObject._RemoveReference(referenceId);
                }
            }
            delete object[Constants.isTracked];
        };
        TrackedObjects.prototype._retrieveAndClearAutoCleanupList = function () {
            var list = this._autoCleanupList;
            this._autoCleanupList = {};
            return list;
        };
        return TrackedObjects;
    }());
    OfficeExtension_1.TrackedObjects = TrackedObjects;
    var RequestPrettyPrinter = (function () {
        function RequestPrettyPrinter(globalObjName, referencedObjectPaths, actions, showDispose, removePII) {
            if (!globalObjName) {
                globalObjName = 'root';
            }
            this.m_globalObjName = globalObjName;
            this.m_referencedObjectPaths = referencedObjectPaths;
            this.m_actions = actions;
            this.m_statements = [];
            this.m_variableNameForObjectPathMap = {};
            this.m_variableNameToObjectPathMap = {};
            this.m_declaredObjectPathMap = {};
            this.m_showDispose = showDispose;
            this.m_removePII = removePII;
        }
        RequestPrettyPrinter.prototype.process = function () {
            if (this.m_showDispose) {
                ClientRequest._calculateLastUsedObjectPathIds(this.m_actions);
            }
            for (var i = 0; i < this.m_actions.length; i++) {
                this.processOneAction(this.m_actions[i]);
            }
            return this.m_statements;
        };
        RequestPrettyPrinter.prototype.processForDebugStatementInfo = function (actionIndex) {
            if (this.m_showDispose) {
                ClientRequest._calculateLastUsedObjectPathIds(this.m_actions);
            }
            var surroundingCount = 5;
            this.m_statements = [];
            var oneStatement = '';
            var statementIndex = -1;
            for (var i = 0; i < this.m_actions.length; i++) {
                this.processOneAction(this.m_actions[i]);
                if (actionIndex == i) {
                    statementIndex = this.m_statements.length - 1;
                }
                if (statementIndex >= 0 && this.m_statements.length > statementIndex + surroundingCount + 1) {
                    break;
                }
            }
            if (statementIndex < 0) {
                return null;
            }
            var startIndex = statementIndex - surroundingCount;
            if (startIndex < 0) {
                startIndex = 0;
            }
            var endIndex = statementIndex + 1 + surroundingCount;
            if (endIndex > this.m_statements.length) {
                endIndex = this.m_statements.length;
            }
            var surroundingStatements = [];
            if (startIndex != 0) {
                surroundingStatements.push('...');
            }
            for (var i_1 = startIndex; i_1 < statementIndex; i_1++) {
                surroundingStatements.push(this.m_statements[i_1]);
            }
            surroundingStatements.push('// >>>>>');
            surroundingStatements.push(this.m_statements[statementIndex]);
            surroundingStatements.push('// <<<<<');
            for (var i_2 = statementIndex + 1; i_2 < endIndex; i_2++) {
                surroundingStatements.push(this.m_statements[i_2]);
            }
            if (endIndex < this.m_statements.length) {
                surroundingStatements.push('...');
            }
            return {
                statement: this.m_statements[statementIndex],
                surroundingStatements: surroundingStatements
            };
        };
        RequestPrettyPrinter.prototype.processOneAction = function (action) {
            var actionInfo = action.actionInfo;
            switch (actionInfo.ActionType) {
                case 1:
                    this.processInstantiateAction(action);
                    break;
                case 3:
                    this.processMethodAction(action);
                    break;
                case 2:
                    this.processQueryAction(action);
                    break;
                case 7:
                    this.processQueryAsJsonAction(action);
                    break;
                case 6:
                    this.processRecursiveQueryAction(action);
                    break;
                case 4:
                    this.processSetPropertyAction(action);
                    break;
                case 5:
                    this.processTraceAction(action);
                    break;
                case 8:
                    this.processEnsureUnchangedAction(action);
                    break;
                case 9:
                    this.processUpdateAction(action);
                    break;
            }
        };
        RequestPrettyPrinter.prototype.processInstantiateAction = function (action) {
            var objId = action.actionInfo.ObjectPathId;
            var objPath = this.m_referencedObjectPaths[objId];
            var varName = this.getObjVarName(objId);
            if (!this.m_declaredObjectPathMap[objId]) {
                var statement = 'var ' + varName + ' = ' + this.buildObjectPathExpressionWithParent(objPath) + ';';
                statement = this.appendDisposeCommentIfRelevant(statement, action);
                this.m_statements.push(statement);
                this.m_declaredObjectPathMap[objId] = varName;
            }
            else {
                var statement = '// Instantiate {' + varName + '}';
                statement = this.appendDisposeCommentIfRelevant(statement, action);
                this.m_statements.push(statement);
            }
        };
        RequestPrettyPrinter.prototype.processMethodAction = function (action) {
            var methodName = action.actionInfo.Name;
            if (methodName === '_KeepReference') {
                if (!OfficeExtension_1._internalConfig.showInternalApiInDebugInfo) {
                    return;
                }
                methodName = 'track';
            }
            var statement = this.getObjVarName(action.actionInfo.ObjectPathId) +
                '.' +
                Utility._toCamelLowerCase(methodName) +
                '(' +
                this.buildArgumentsExpression(action.actionInfo.ArgumentInfo) +
                ');';
            statement = this.appendDisposeCommentIfRelevant(statement, action);
            this.m_statements.push(statement);
        };
        RequestPrettyPrinter.prototype.processQueryAction = function (action) {
            var queryExp = this.buildQueryExpression(action);
            var statement = this.getObjVarName(action.actionInfo.ObjectPathId) + '.load(' + queryExp + ');';
            statement = this.appendDisposeCommentIfRelevant(statement, action);
            this.m_statements.push(statement);
        };
        RequestPrettyPrinter.prototype.processQueryAsJsonAction = function (action) {
            var queryExp = this.buildQueryExpression(action);
            var statement = this.getObjVarName(action.actionInfo.ObjectPathId) + '.retrieve(' + queryExp + ');';
            statement = this.appendDisposeCommentIfRelevant(statement, action);
            this.m_statements.push(statement);
        };
        RequestPrettyPrinter.prototype.processRecursiveQueryAction = function (action) {
            var queryExp = '';
            if (action.actionInfo.RecursiveQueryInfo) {
                queryExp = JSON.stringify(action.actionInfo.RecursiveQueryInfo);
            }
            var statement = this.getObjVarName(action.actionInfo.ObjectPathId) + '.loadRecursive(' + queryExp + ');';
            statement = this.appendDisposeCommentIfRelevant(statement, action);
            this.m_statements.push(statement);
        };
        RequestPrettyPrinter.prototype.processSetPropertyAction = function (action) {
            var statement = this.getObjVarName(action.actionInfo.ObjectPathId) +
                '.' +
                Utility._toCamelLowerCase(action.actionInfo.Name) +
                ' = ' +
                this.buildArgumentsExpression(action.actionInfo.ArgumentInfo) +
                ';';
            statement = this.appendDisposeCommentIfRelevant(statement, action);
            this.m_statements.push(statement);
        };
        RequestPrettyPrinter.prototype.processTraceAction = function (action) {
            var statement = 'context.trace();';
            statement = this.appendDisposeCommentIfRelevant(statement, action);
            this.m_statements.push(statement);
        };
        RequestPrettyPrinter.prototype.processEnsureUnchangedAction = function (action) {
            var statement = this.getObjVarName(action.actionInfo.ObjectPathId) +
                '.ensureUnchanged(' +
                JSON.stringify(action.actionInfo.ObjectState) +
                ');';
            statement = this.appendDisposeCommentIfRelevant(statement, action);
            this.m_statements.push(statement);
        };
        RequestPrettyPrinter.prototype.processUpdateAction = function (action) {
            var statement = this.getObjVarName(action.actionInfo.ObjectPathId) +
                '.update(' +
                JSON.stringify(action.actionInfo.ObjectState) +
                ');';
            statement = this.appendDisposeCommentIfRelevant(statement, action);
            this.m_statements.push(statement);
        };
        RequestPrettyPrinter.prototype.appendDisposeCommentIfRelevant = function (statement, action) {
            var _this = this;
            if (this.m_showDispose) {
                var lastUsedObjectPathIds = action.actionInfo.L;
                if (lastUsedObjectPathIds && lastUsedObjectPathIds.length > 0) {
                    var objectNamesToDispose = lastUsedObjectPathIds.map(function (item) { return _this.getObjVarName(item); }).join(', ');
                    return statement + ' // And then dispose {' + objectNamesToDispose + '}';
                }
            }
            return statement;
        };
        RequestPrettyPrinter.prototype.buildQueryExpression = function (action) {
            if (action.actionInfo.QueryInfo) {
                var option = {};
                option.select = action.actionInfo.QueryInfo.Select;
                option.expand = action.actionInfo.QueryInfo.Expand;
                option.skip = action.actionInfo.QueryInfo.Skip;
                option.top = action.actionInfo.QueryInfo.Top;
                if (typeof option.top === 'undefined' &&
                    typeof option.skip === 'undefined' &&
                    typeof option.expand === 'undefined') {
                    if (typeof option.select === 'undefined') {
                        return '';
                    }
                    else {
                        return JSON.stringify(option.select);
                    }
                }
                else {
                    return JSON.stringify(option);
                }
            }
            return '';
        };
        RequestPrettyPrinter.prototype.buildObjectPathExpressionWithParent = function (objPath) {
            var hasParent = objPath.objectPathInfo.ObjectPathType == 5 ||
                objPath.objectPathInfo.ObjectPathType == 3 ||
                objPath.objectPathInfo.ObjectPathType == 4;
            if (hasParent && objPath.objectPathInfo.ParentObjectPathId) {
                return (this.getObjVarName(objPath.objectPathInfo.ParentObjectPathId) + '.' + this.buildObjectPathExpression(objPath));
            }
            return this.buildObjectPathExpression(objPath);
        };
        RequestPrettyPrinter.prototype.buildObjectPathExpression = function (objPath) {
            var expr = this.buildObjectPathInfoExpression(objPath.objectPathInfo);
            var originalObjectPathInfo = objPath.originalObjectPathInfo;
            if (originalObjectPathInfo) {
                expr = expr + ' /* originally ' + this.buildObjectPathInfoExpression(originalObjectPathInfo) + ' */';
            }
            return expr;
        };
        RequestPrettyPrinter.prototype.buildObjectPathInfoExpression = function (objectPathInfo) {
            switch (objectPathInfo.ObjectPathType) {
                case 1:
                    return 'context.' + this.m_globalObjName;
                case 5:
                    return 'getItem(' + this.buildArgumentsExpression(objectPathInfo.ArgumentInfo) + ')';
                case 3:
                    return (Utility._toCamelLowerCase(objectPathInfo.Name) +
                        '(' +
                        this.buildArgumentsExpression(objectPathInfo.ArgumentInfo) +
                        ')');
                case 2:
                    return objectPathInfo.Name + '.newObject()';
                case 7:
                    return 'null';
                case 4:
                    return Utility._toCamelLowerCase(objectPathInfo.Name);
                case 6:
                    return ('context.' + this.m_globalObjName + '._getObjectByReferenceId(' + JSON.stringify(objectPathInfo.Name) + ')');
            }
        };
        RequestPrettyPrinter.prototype.buildArgumentsExpression = function (args) {
            var ret = '';
            if (!args.Arguments || args.Arguments.length === 0) {
                return ret;
            }
            if (this.m_removePII) {
                if (typeof args.Arguments[0] === 'undefined') {
                    return ret;
                }
                return '...';
            }
            for (var i = 0; i < args.Arguments.length; i++) {
                if (i > 0) {
                    ret = ret + ', ';
                }
                ret =
                    ret +
                        this.buildArgumentLiteral(args.Arguments[i], args.ReferencedObjectPathIds ? args.ReferencedObjectPathIds[i] : null);
            }
            if (ret === 'undefined') {
                ret = '';
            }
            return ret;
        };
        RequestPrettyPrinter.prototype.buildArgumentLiteral = function (value, objectPathId) {
            if (typeof value == 'number' && value === objectPathId) {
                return this.getObjVarName(objectPathId);
            }
            else {
                return JSON.stringify(value);
            }
        };
        RequestPrettyPrinter.prototype.getObjVarNameBase = function (objectPathId) {
            var ret = 'v';
            var objPath = this.m_referencedObjectPaths[objectPathId];
            if (objPath) {
                switch (objPath.objectPathInfo.ObjectPathType) {
                    case 1:
                        ret = this.m_globalObjName;
                        break;
                    case 4:
                        ret = Utility._toCamelLowerCase(objPath.objectPathInfo.Name);
                        break;
                    case 3:
                        var methodName = objPath.objectPathInfo.Name;
                        if (methodName.length > 3 && methodName.substr(0, 3) === 'Get') {
                            methodName = methodName.substr(3);
                        }
                        ret = Utility._toCamelLowerCase(methodName);
                        break;
                    case 5:
                        var parentName = this.getObjVarNameBase(objPath.objectPathInfo.ParentObjectPathId);
                        if (parentName.charAt(parentName.length - 1) === 's') {
                            ret = parentName.substr(0, parentName.length - 1);
                        }
                        else {
                            ret = parentName + 'Item';
                        }
                        break;
                }
            }
            return ret;
        };
        RequestPrettyPrinter.prototype.getObjVarName = function (objectPathId) {
            if (this.m_variableNameForObjectPathMap[objectPathId]) {
                return this.m_variableNameForObjectPathMap[objectPathId];
            }
            var ret = this.getObjVarNameBase(objectPathId);
            if (!this.m_variableNameToObjectPathMap[ret]) {
                this.m_variableNameForObjectPathMap[objectPathId] = ret;
                this.m_variableNameToObjectPathMap[ret] = objectPathId;
                return ret;
            }
            var i = 1;
            while (this.m_variableNameToObjectPathMap[ret + i.toString()]) {
                i++;
            }
            ret = ret + i.toString();
            this.m_variableNameForObjectPathMap[objectPathId] = ret;
            this.m_variableNameToObjectPathMap[ret] = objectPathId;
            return ret;
        };
        return RequestPrettyPrinter;
    }());
    var ResourceStrings = (function (_super) {
        __extends(ResourceStrings, _super);
        function ResourceStrings() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        ResourceStrings.cannotRegisterEvent = 'CannotRegisterEvent';
        ResourceStrings.connectionFailureWithStatus = 'ConnectionFailureWithStatus';
        ResourceStrings.connectionFailureWithDetails = 'ConnectionFailureWithDetails';
        ResourceStrings.propertyNotLoaded = 'PropertyNotLoaded';
        ResourceStrings.runMustReturnPromise = 'RunMustReturnPromise';
        ResourceStrings.moreInfoInnerError = 'MoreInfoInnerError';
        ResourceStrings.cannotApplyPropertyThroughSetMethod = 'CannotApplyPropertyThroughSetMethod';
        ResourceStrings.invalidOperationInCellEditMode = 'InvalidOperationInCellEditMode';
        ResourceStrings.objectIsUntracked = 'ObjectIsUntracked';
        ResourceStrings.customFunctionDefintionMissing = 'CustomFunctionDefintionMissing';
        ResourceStrings.customFunctionImplementationMissing = 'CustomFunctionImplementationMissing';
        ResourceStrings.customFunctionNameContainsBadChars = 'CustomFunctionNameContainsBadChars';
        ResourceStrings.customFunctionNameCannotSplit = 'CustomFunctionNameCannotSplit';
        ResourceStrings.customFunctionUnexpectedNumberOfEntriesInResultBatch = 'CustomFunctionUnexpectedNumberOfEntriesInResultBatch';
        ResourceStrings.customFunctionCancellationHandlerMissing = 'CustomFunctionCancellationHandlerMissing';
        ResourceStrings.customFunctionInvalidFunction = 'CustomFunctionInvalidFunction';
        ResourceStrings.customFunctionInvalidFunctionMapping = 'CustomFunctionInvalidFunctionMapping';
        ResourceStrings.customFunctionWindowMissing = 'CustomFunctionWindowMissing';
        ResourceStrings.customFunctionDefintionMissingOnWindow = 'CustomFunctionDefintionMissingOnWindow';
        ResourceStrings.pendingBatchInProgress = 'PendingBatchInProgress';
        ResourceStrings.notInsideBatch = 'NotInsideBatch';
        ResourceStrings.cannotUpdateReadOnlyProperty = 'CannotUpdateReadOnlyProperty';
        return ResourceStrings;
    }(CommonResourceStrings));
    OfficeExtension_1.ResourceStrings = ResourceStrings;
    CoreUtility.addResourceStringValues({
        CannotRegisterEvent: 'The event handler cannot be registered.',
        PropertyNotLoaded: "The property '{0}' is not available. Before reading the property's value, call the load method on the containing object and call \"context.sync()\" on the associated request context.",
        RunMustReturnPromise: 'The batch function passed to the ".run" method didn\'t return a promise. The function must return a promise, so that any automatically-tracked objects can be released at the completion of the batch operation. Typically, you return a promise by returning the response from "context.sync()".',
        InvalidOrTimedOutSessionMessage: 'Your Office Online session has expired or is invalid. To continue, refresh the page.',
        InvalidOperationInCellEditMode: 'Excel is in cell-editing mode. Please exit the edit mode by pressing ENTER or TAB or selecting another cell, and then try again.',
        InvalidSheetName: 'The request cannot be processed because the specified worksheet cannot be found. Please try again.',
        CustomFunctionDefintionMissing: "A property with the name '{0}' that represents the function's definition must exist on Excel.Script.CustomFunctions.",
        CustomFunctionDefintionMissingOnWindow: "A property with the name '{0}' that represents the function's definition must exist on the window object.",
        CustomFunctionImplementationMissing: "The property with the name '{0}' on Excel.Script.CustomFunctions that represents the function's definition must contain a 'call' property that implements the function.",
        CustomFunctionNameContainsBadChars: 'The function name may only contain letters, digits, underscores, and periods.',
        CustomFunctionNameCannotSplit: 'The function name must contain a non-empty namespace and a non-empty short name.',
        CustomFunctionUnexpectedNumberOfEntriesInResultBatch: "The batching function returned a number of results that doesn't match the number of parameter value sets that were passed into it.",
        CustomFunctionCancellationHandlerMissing: 'The cancellation handler onCanceled is missing in the function. The handler must be present as the function is defined as cancelable.',
        CustomFunctionInvalidFunction: "The property with the name '{0}' that represents the function's definition is not a valid function.",
        CustomFunctionInvalidFunctionMapping: "The property with the name '{0}' on CustomFunctionMappings that represents the function's definition is not a valid function.",
        CustomFunctionWindowMissing: 'The window object was not found.',
        PendingBatchInProgress: 'There is a pending batch in progress. The batch method may not be called inside another batch, or simultaneously with another batch.',
        NotInsideBatch: 'Operations may not be invoked outside of a batch method.',
        CannotUpdateReadOnlyProperty: "The property '{0}' is read-only and it cannot be updated.",
        ObjectIsUntracked: 'The object is untracked.'
    });
    var Utility = (function (_super) {
        __extends(Utility, _super);
        function Utility() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Utility.fixObjectPathIfNecessary = function (clientObject, value) {
            if (clientObject && clientObject._objectPath && value) {
                clientObject._objectPath.updateUsingObjectData(value, clientObject);
            }
        };
        Utility.load = function (clientObj, option) {
            clientObj.context.load(clientObj, option);
            return clientObj;
        };
        Utility.loadAndSync = function (clientObj, option) {
            clientObj.context.load(clientObj, option);
            return clientObj.context.sync().then(function () { return clientObj; });
        };
        Utility.retrieve = function (clientObj, option) {
            var shouldPolyfill = OfficeExtension_1._internalConfig.alwaysPolyfillClientObjectRetrieveMethod;
            if (!shouldPolyfill) {
                shouldPolyfill = !Utility.isSetSupported('RichApiRuntime', '1.1');
            }
            var result = new RetrieveResultImpl(clientObj, shouldPolyfill);
            clientObj._retrieve(option, result);
            return result;
        };
        Utility.retrieveAndSync = function (clientObj, option) {
            var result = Utility.retrieve(clientObj, option);
            return clientObj.context.sync().then(function () { return result; });
        };
        Utility.toJson = function (clientObj, scalarProperties, navigationProperties, collectionItemsIfAny) {
            var result = {};
            for (var prop in scalarProperties) {
                var value = scalarProperties[prop];
                if (typeof value !== 'undefined') {
                    result[prop] = value;
                }
            }
            for (var prop in navigationProperties) {
                var value = navigationProperties[prop];
                if (typeof value !== 'undefined') {
                    if (value[Utility.fieldName_isCollection] && typeof value[Utility.fieldName_m__items] !== 'undefined') {
                        result[prop] = value.toJSON()['items'];
                    }
                    else {
                        result[prop] = value.toJSON();
                    }
                }
            }
            if (collectionItemsIfAny) {
                result['items'] = collectionItemsIfAny.map(function (item) { return item.toJSON(); });
            }
            return result;
        };
        Utility.throwError = function (resourceId, arg, errorLocation) {
            throw new _Internal.RuntimeError({
                code: resourceId,
                httpStatusCode: 400,
                message: CoreUtility._getResourceString(resourceId, arg),
                debugInfo: errorLocation ? { errorLocation: errorLocation } : undefined
            });
        };
        Utility.createRuntimeError = function (code, message, location, httpStatusCode, data) {
            return new _Internal.RuntimeError({
                code: code,
                httpStatusCode: httpStatusCode,
                message: message,
                debugInfo: { errorLocation: location },
                data: data
            });
        };
        Utility.throwIfNotLoaded = function (propertyName, fieldValue, entityName, isNull) {
            if (!isNull &&
                CoreUtility.isUndefined(fieldValue) &&
                propertyName.charCodeAt(0) != Utility.s_underscoreCharCode &&
                !Utility.s_suppressPropertyNotLoadedException) {
                throw Utility.createPropertyNotLoadedException(entityName, propertyName);
            }
        };
        Utility._getPropertyValueWithoutCheckLoaded = function (object, propertyName) {
            Utility.s_suppressPropertyNotLoadedException = true;
            try {
                return object[propertyName];
            }
            finally {
                Utility.s_suppressPropertyNotLoadedException = false;
            }
        };
        Utility.createPropertyNotLoadedException = function (entityName, propertyName) {
            return new _Internal.RuntimeError({
                code: ErrorCodes.propertyNotLoaded,
                httpStatusCode: 400,
                message: CoreUtility._getResourceString(ResourceStrings.propertyNotLoaded, propertyName),
                debugInfo: entityName ? { errorLocation: entityName + '.' + propertyName } : undefined
            });
        };
        Utility.createCannotUpdateReadOnlyPropertyException = function (entityName, propertyName) {
            return new _Internal.RuntimeError({
                code: ErrorCodes.cannotUpdateReadOnlyProperty,
                httpStatusCode: 400,
                message: CoreUtility._getResourceString(ResourceStrings.cannotUpdateReadOnlyProperty, propertyName),
                debugInfo: entityName ? { errorLocation: entityName + '.' + propertyName } : undefined
            });
        };
        Utility.promisify = function (action) {
            return new OfficeExtension_1.Promise(function (resolve, reject) {
                var callback = function (result) {
                    if (result.status == 'failed') {
                        reject(result.error);
                    }
                    else {
                        resolve(result.value);
                    }
                };
                action(callback);
            });
        };
        Utility._addActionResultHandler = function (clientObj, action, resultHandler) {
            clientObj.context._pendingRequest.addActionResultHandler(action, resultHandler);
        };
        Utility._handleNavigationPropertyResults = function (clientObj, objectValue, propertyNames) {
            for (var i = 0; i < propertyNames.length - 1; i += 2) {
                if (!CoreUtility.isUndefined(objectValue[propertyNames[i + 1]])) {
                    clientObj[propertyNames[i]]._handleResult(objectValue[propertyNames[i + 1]]);
                }
            }
        };
        Utility._fixupApiFlags = function (flags) {
            if (typeof flags === 'boolean') {
                if (flags) {
                    flags = 1;
                }
                else {
                    flags = 0;
                }
            }
            return flags;
        };
        Utility.definePropertyThrowUnloadedException = function (obj, typeName, propertyName) {
            Object.defineProperty(obj, propertyName, {
                configurable: true,
                enumerable: true,
                get: function () {
                    throw Utility.createPropertyNotLoadedException(typeName, propertyName);
                },
                set: function () {
                    throw Utility.createCannotUpdateReadOnlyPropertyException(typeName, propertyName);
                }
            });
        };
        Utility.defineReadOnlyPropertyWithValue = function (obj, propertyName, value) {
            Object.defineProperty(obj, propertyName, {
                configurable: true,
                enumerable: true,
                get: function () {
                    return value;
                },
                set: function () {
                    throw Utility.createCannotUpdateReadOnlyPropertyException(null, propertyName);
                }
            });
        };
        Utility.processRetrieveResult = function (proxy, value, result, childItemCreateFunc) {
            if (CoreUtility.isNullOrUndefined(value)) {
                return;
            }
            if (childItemCreateFunc) {
                var data = value[Constants.itemsLowerCase];
                if (Array.isArray(data)) {
                    var itemsResult = [];
                    for (var i = 0; i < data.length; i++) {
                        var itemProxy = childItemCreateFunc(data[i], i);
                        var itemResult = {};
                        itemResult[Constants.proxy] = itemProxy;
                        itemProxy._handleRetrieveResult(data[i], itemResult);
                        itemsResult.push(itemResult);
                    }
                    Utility.defineReadOnlyPropertyWithValue(result, Constants.itemsLowerCase, itemsResult);
                }
            }
            else {
                var scalarPropertyNames = proxy[Constants.scalarPropertyNames];
                var navigationPropertyNames = proxy[Constants.navigationPropertyNames];
                var typeName = proxy[Constants.className];
                if (scalarPropertyNames) {
                    for (var i = 0; i < scalarPropertyNames.length; i++) {
                        var propName = scalarPropertyNames[i];
                        var propValue = value[propName];
                        if (CoreUtility.isUndefined(propValue)) {
                            Utility.definePropertyThrowUnloadedException(result, typeName, propName);
                        }
                        else {
                            Utility.defineReadOnlyPropertyWithValue(result, propName, propValue);
                        }
                    }
                }
                if (navigationPropertyNames) {
                    for (var i = 0; i < navigationPropertyNames.length; i++) {
                        var propName = navigationPropertyNames[i];
                        var propValue = value[propName];
                        if (CoreUtility.isUndefined(propValue)) {
                            Utility.definePropertyThrowUnloadedException(result, typeName, propName);
                        }
                        else {
                            var propProxy = proxy[propName];
                            var propResult = {};
                            propProxy._handleRetrieveResult(propValue, propResult);
                            propResult[Constants.proxy] = propProxy;
                            if (Array.isArray(propResult[Constants.itemsLowerCase])) {
                                propResult = propResult[Constants.itemsLowerCase];
                            }
                            Utility.defineReadOnlyPropertyWithValue(result, propName, propResult);
                        }
                    }
                }
            }
        };
        Utility.setMockData = function (clientObj, value, childItemCreateFunc, setItemsFunc) {
            if (CoreUtility.isNullOrUndefined(value)) {
                clientObj._handleResult(value);
                return;
            }
            if (clientObj[Constants.scalarPropertyOriginalNames]) {
                var result = {};
                var scalarPropertyOriginalNames = clientObj[Constants.scalarPropertyOriginalNames];
                var scalarPropertyNames = clientObj[Constants.scalarPropertyNames];
                for (var i = 0; i < scalarPropertyNames.length; i++) {
                    if (typeof (value[scalarPropertyNames[i]]) !== 'undefined') {
                        result[scalarPropertyOriginalNames[i]] = value[scalarPropertyNames[i]];
                    }
                }
                clientObj._handleResult(result);
            }
            if (clientObj[Constants.navigationPropertyNames]) {
                var navigationPropertyNames = clientObj[Constants.navigationPropertyNames];
                for (var i = 0; i < navigationPropertyNames.length; i++) {
                    if (typeof (value[navigationPropertyNames[i]]) !== 'undefined') {
                        var navigationPropValue = clientObj[navigationPropertyNames[i]];
                        if (navigationPropValue.setMockData) {
                            navigationPropValue.setMockData(value[navigationPropertyNames[i]]);
                        }
                    }
                }
            }
            if (clientObj[Constants.isCollection] && childItemCreateFunc) {
                var itemsData = Array.isArray(value) ? value : value[Constants.itemsLowerCase];
                if (Array.isArray(itemsData)) {
                    var items = [];
                    for (var i = 0; i < itemsData.length; i++) {
                        var item = childItemCreateFunc(itemsData, i);
                        Utility.setMockData(item, itemsData[i]);
                        items.push(item);
                    }
                    setItemsFunc(items);
                }
            }
        };
        Utility.applyMixin = function (derived, base) {
            Object.getOwnPropertyNames(base.prototype).forEach(function (name) {
                if (name !== 'constructor') {
                    Object.defineProperty(derived.prototype, name, Object.getOwnPropertyDescriptor(base.prototype, name));
                }
            });
        };
        Utility.ensureTypeInitialized = function (type) {
            var context = new ClientRequestContext();
            var objectPath = ObjectPathFactory.createNewObjectObjectPath(context, "Temp", false, 0);
            new type(context, objectPath);
        };
        Utility.fieldName_m__items = 'm__items';
        Utility.fieldName_isCollection = '_isCollection';
        Utility._synchronousCleanup = false;
        Utility.s_underscoreCharCode = '_'.charCodeAt(0);
        Utility.s_suppressPropertyNotLoadedException = false;
        return Utility;
    }(CommonUtility));
    OfficeExtension_1.Utility = Utility;
    var BatchApiHelper = (function () {
        function BatchApiHelper() {
        }
        BatchApiHelper.invokeMethod = function (obj, methodName, operationType, args, flags, resultProcessType) {
            var action = ActionFactory.createMethodAction(obj.context, obj, methodName, operationType, args, flags);
            var result = new ClientResult(resultProcessType);
            Utility._addActionResultHandler(obj, action, result);
            return result;
        };
        BatchApiHelper.invokeEnsureUnchanged = function (obj, objectState) {
            ActionFactory.createEnsureUnchangedAction(obj.context, obj, objectState);
        };
        BatchApiHelper.invokeSetProperty = function (obj, propName, propValue, flags) {
            ActionFactory.createSetPropertyAction(obj.context, obj, propName, propValue, flags);
        };
        BatchApiHelper.createRootServiceObject = function (type, context) {
            var objectPath = ObjectPathFactory.createGlobalObjectObjectPath(context);
            return new type(context, objectPath);
        };
        BatchApiHelper.createObjectFromReferenceId = function (type, context, referenceId) {
            var objectPath = ObjectPathFactory.createReferenceIdObjectPath(context, referenceId);
            return new type(context, objectPath);
        };
        BatchApiHelper.createTopLevelServiceObject = function (type, context, typeName, isCollection, flags) {
            var objectPath = ObjectPathFactory.createNewObjectObjectPath(context, typeName, isCollection, flags);
            return new type(context, objectPath);
        };
        BatchApiHelper.createPropertyObject = function (type, parent, propertyName, isCollection, flags) {
            var objectPath = ObjectPathFactory.createPropertyObjectPath(parent.context, parent, propertyName, isCollection, false, flags);
            return new type(parent.context, objectPath);
        };
        BatchApiHelper.createIndexerObject = function (type, parent, args) {
            var objectPath = ObjectPathFactory.createIndexerObjectPath(parent.context, parent, args);
            return new type(parent.context, objectPath);
        };
        BatchApiHelper.createMethodObject = function (type, parent, methodName, operationType, args, isCollection, isInvalidAfterRequest, getByIdMethodName, flags) {
            var objectPath = ObjectPathFactory.createMethodObjectPath(parent.context, parent, methodName, operationType, args, isCollection, isInvalidAfterRequest, getByIdMethodName, flags);
            return new type(parent.context, objectPath);
        };
        BatchApiHelper.createChildItemObject = function (type, hasIndexerMethod, parent, chileItem, index) {
            var objectPath = ObjectPathFactory.createChildItemObjectPathUsingIndexerOrGetItemAt(hasIndexerMethod, parent.context, parent, chileItem, index);
            return new type(parent.context, objectPath);
        };
        return BatchApiHelper;
    }());
    OfficeExtension_1.BatchApiHelper = BatchApiHelper;
    var LibraryBuilder = (function () {
        function LibraryBuilder(options) {
            this.m_namespaceMap = {};
            this.m_namespace = options.metadata.name;
            this.m_targetNamespaceObject = options.targetNamespaceObject;
            this.m_namespaceMap[this.m_namespace] = options.targetNamespaceObject;
            if (options.namespaceMap) {
                for (var ns in options.namespaceMap) {
                    this.m_namespaceMap[ns] = options.namespaceMap[ns];
                }
            }
            this.m_defaultApiSetName = options.metadata.defaultApiSetName;
            this.m_hostName = options.metadata.hostName;
            var metadata = options.metadata;
            if (metadata.enumTypes) {
                for (var i = 0; i < metadata.enumTypes.length; i++) {
                    this.buildEnumType(metadata.enumTypes[i]);
                }
            }
            if (metadata.apiSets) {
                for (var i = 0; i < metadata.apiSets.length; i++) {
                    var elem = metadata.apiSets[i];
                    if (Array.isArray(elem)) {
                        metadata.apiSets[i] = {
                            version: elem[0],
                            name: elem[1] || this.m_defaultApiSetName
                        };
                    }
                }
                this.m_apiSets = metadata.apiSets;
            }
            this.m_strings = metadata.strings;
            if (metadata.clientObjectTypes) {
                for (var i = 0; i < metadata.clientObjectTypes.length; i++) {
                    var elem = metadata.clientObjectTypes[i];
                    if (Array.isArray(elem)) {
                        this.ensureArraySize(elem, 11);
                        metadata.clientObjectTypes[i] = {
                            name: this.getString(elem[0]),
                            behaviorFlags: elem[1],
                            collectionPropertyPath: this.getString(elem[6]),
                            newObjectServerTypeFullName: this.getString(elem[9]),
                            newObjectApiFlags: elem[10],
                            childItemTypeFullName: this.getString(elem[7]),
                            scalarProperties: elem[2],
                            navigationProperties: elem[3],
                            scalarMethods: elem[4],
                            navigationMethods: elem[5],
                            events: elem[8]
                        };
                    }
                    this.buildClientObjectType(metadata.clientObjectTypes[i], options.fullyInitialize);
                }
            }
        }
        LibraryBuilder.prototype.ensureArraySize = function (value, size) {
            var count = size - value.length;
            while (count > 0) {
                value.push(0);
                count--;
            }
        };
        LibraryBuilder.prototype.getString = function (ordinalOrValue) {
            if (typeof (ordinalOrValue) === "number") {
                if (ordinalOrValue > 0) {
                    return this.m_strings[ordinalOrValue - 1];
                }
                return null;
            }
            return ordinalOrValue;
        };
        LibraryBuilder.prototype.buildEnumType = function (elem) {
            var enumType;
            if (Array.isArray(elem)) {
                enumType = {
                    name: elem[0],
                    fields: elem[2]
                };
                if (!enumType.fields) {
                    enumType.fields = {};
                }
                var fieldsWithCamelUpperCaseValue = elem[1];
                if (Array.isArray(fieldsWithCamelUpperCaseValue)) {
                    for (var index = 0; index < fieldsWithCamelUpperCaseValue.length; index++) {
                        enumType.fields[fieldsWithCamelUpperCaseValue[index]] = this.toSimpleCamelUpperCase(fieldsWithCamelUpperCaseValue[index]);
                    }
                }
            }
            else {
                enumType = elem;
            }
            this.m_targetNamespaceObject[enumType.name] = enumType.fields;
        };
        LibraryBuilder.prototype.buildClientObjectType = function (typeInfo, fullyInitialize) {
            var thisBuilder = this;
            var type = function (context, objectPath) {
                ClientObject.apply(this, arguments);
                if (!thisBuilder.m_targetNamespaceObject[typeInfo.name]._typeInited) {
                    thisBuilder.buildPrototype(thisBuilder.m_targetNamespaceObject[typeInfo.name], typeInfo);
                    thisBuilder.m_targetNamespaceObject[typeInfo.name]._typeInited = true;
                }
                if (OfficeExtension_1._internalConfig.appendTypeNameToObjectPathInfo) {
                    if (this._objectPath && this._objectPath.objectPathInfo && this._className) {
                        this._objectPath.objectPathInfo.T = this._className;
                    }
                }
            };
            this.m_targetNamespaceObject[typeInfo.name] = type;
            this.extendsType(type, ClientObject);
            this.buildNewObject(type, typeInfo);
            if ((typeInfo.behaviorFlags & 2) !== 0) {
                type.prototype._KeepReference = function () {
                    BatchApiHelper.invokeMethod(this, "_KeepReference", 1, [], 0, 0);
                };
            }
            if ((typeInfo.behaviorFlags & 32) !== 0) {
                var func = this.getFunction(LibraryBuilder.CustomizationCodeNamespace + "." + typeInfo.name + "_StaticCustomize");
                func.call(null, type);
            }
            if (fullyInitialize) {
                this.buildPrototype(type, typeInfo);
                type._typeInited = true;
            }
        };
        LibraryBuilder.prototype.extendsType = function (d, b) {
            function __() { this.constructor = d; }
            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
        };
        LibraryBuilder.prototype.findObjectUnderPath = function (top, paths, pathStartIndex) {
            var obj = top;
            for (var i = pathStartIndex; i < paths.length; i++) {
                if (typeof (obj) !== 'object') {
                    throw new OfficeExtension_1.Error("Cannot find " + paths.join("."));
                }
                obj = obj[paths[i]];
            }
            return obj;
        };
        LibraryBuilder.prototype.getFunction = function (fullName) {
            var ret = this.resolveObjectByFullName(fullName);
            if (typeof (ret) !== 'function') {
                throw new OfficeExtension_1.Error("Cannot find function or type: " + fullName);
            }
            return ret;
        };
        LibraryBuilder.prototype.resolveObjectByFullName = function (fullName) {
            var parts = fullName.split('.');
            if (parts.length === 1) {
                return this.m_targetNamespaceObject[parts[0]];
            }
            var rootName = parts[0];
            if (rootName === this.m_namespace) {
                return this.findObjectUnderPath(this.m_targetNamespaceObject, parts, 1);
            }
            if (this.m_namespaceMap[rootName]) {
                return this.findObjectUnderPath(this.m_namespaceMap[rootName], parts, 1);
            }
            return this.findObjectUnderPath(this.m_targetNamespaceObject, parts, 0);
        };
        LibraryBuilder.prototype.evaluateSimpleExpression = function (expression, thisObj) {
            if (Utility.isNullOrUndefined(expression)) {
                return null;
            }
            var paths = expression.split('.');
            if (paths.length === 3 && paths[0] === 'OfficeExtension' && paths[1] === 'Constants') {
                return Constants[paths[2]];
            }
            if (paths[0] === 'this') {
                var obj = thisObj;
                for (var i = 1; i < paths.length; i++) {
                    if (paths[i] == 'toString()') {
                        obj = obj.toString();
                    }
                    else if (paths[i].substr(paths[i].length - 2) === "()") {
                        obj = obj[paths[i].substr(0, paths[i].length - 2)]();
                    }
                    else {
                        obj = obj[paths[i]];
                    }
                }
                return obj;
            }
            throw new OfficeExtension_1.Error("Cannot evaluate: " + expression);
        };
        LibraryBuilder.prototype.evaluateEventTargetId = function (targetIdExpression, thisObj) {
            if (Utility.isNullOrEmptyString(targetIdExpression)) {
                return '';
            }
            return this.evaluateSimpleExpression(targetIdExpression, thisObj);
        };
        LibraryBuilder.prototype.isAllDigits = function (expression) {
            var charZero = '0'.charCodeAt(0);
            var charNine = '9'.charCodeAt(0);
            for (var i = 0; i < expression.length; i++) {
                if (expression.charCodeAt(i) < charZero ||
                    expression.charCodeAt(i) > charNine) {
                    return false;
                }
            }
            return true;
        };
        LibraryBuilder.prototype.evaluateEventType = function (eventTypeExpression) {
            if (Utility.isNullOrEmptyString(eventTypeExpression)) {
                return 0;
            }
            if (this.isAllDigits(eventTypeExpression)) {
                return parseInt(eventTypeExpression);
            }
            var ret = this.resolveObjectByFullName(eventTypeExpression);
            if (typeof (ret) !== 'number') {
                throw new OfficeExtension_1.Error("Invalid event type: " + eventTypeExpression);
            }
            return ret;
        };
        LibraryBuilder.prototype.buildPrototype = function (type, typeInfo) {
            this.buildScalarProperties(type, typeInfo);
            this.buildNavigationProperties(type, typeInfo);
            this.buildScalarMethods(type, typeInfo);
            this.buildNavigationMethods(type, typeInfo);
            this.buildEvents(type, typeInfo);
            this.buildHandleResult(type, typeInfo);
            this.buildHandleIdResult(type, typeInfo);
            this.buildHandleRetrieveResult(type, typeInfo);
            this.buildLoad(type, typeInfo);
            this.buildRetrieve(type, typeInfo);
            this.buildSetMockData(type, typeInfo);
            this.buildEnsureUnchanged(type, typeInfo);
            this.buildUpdate(type, typeInfo);
            this.buildSet(type, typeInfo);
            this.buildToJSON(type, typeInfo);
            this.buildItems(type, typeInfo);
            this.buildTypeMetadataInfo(type, typeInfo);
            this.buildTrackUntrack(type, typeInfo);
            this.buildMixin(type, typeInfo);
        };
        LibraryBuilder.prototype.toSimpleCamelUpperCase = function (name) {
            return name.substr(0, 1).toUpperCase() + name.substr(1);
        };
        LibraryBuilder.prototype.ensureOriginalName = function (member) {
            if (member.originalName === null) {
                member.originalName = this.toSimpleCamelUpperCase(member.name);
            }
        };
        LibraryBuilder.prototype.getFieldName = function (member) {
            return "m_" + member.name;
        };
        LibraryBuilder.prototype.throwIfApiNotSupported = function (typeInfo, member) {
            if (this.m_apiSets && member.apiSetInfoOrdinal > 0) {
                var apiSetInfo = this.m_apiSets[member.apiSetInfoOrdinal - 1];
                if (apiSetInfo) {
                    Utility.throwIfApiNotSupported(typeInfo.name + "." + member.name, apiSetInfo.name, apiSetInfo.version, this.m_hostName);
                }
            }
        };
        LibraryBuilder.prototype.buildScalarProperties = function (type, typeInfo) {
            if (Array.isArray(typeInfo.scalarProperties)) {
                for (var i = 0; i < typeInfo.scalarProperties.length; i++) {
                    var elem = typeInfo.scalarProperties[i];
                    if (Array.isArray(elem)) {
                        this.ensureArraySize(elem, 6);
                        typeInfo.scalarProperties[i] = {
                            name: this.getString(elem[0]),
                            behaviorFlags: elem[1],
                            apiSetInfoOrdinal: elem[2],
                            originalName: this.getString(elem[3]),
                            setMethodApiFlags: elem[4],
                            undoableApiSetInfoOrdinal: elem[5]
                        };
                    }
                    this.buildScalarProperty(type, typeInfo, typeInfo.scalarProperties[i]);
                }
            }
        };
        LibraryBuilder.prototype.calculateApiFlags = function (apiFlags, undoableApiSetInfoOrdinal) {
            if (undoableApiSetInfoOrdinal > 0) {
                var undoableApiSetInfo = this.m_apiSets[undoableApiSetInfoOrdinal - 1];
                if (undoableApiSetInfo) {
                    apiFlags = CommonUtility.calculateApiFlags(apiFlags, undoableApiSetInfo.name, undoableApiSetInfo.version);
                }
            }
            return apiFlags;
        };
        LibraryBuilder.prototype.buildScalarProperty = function (type, typeInfo, propInfo) {
            this.ensureOriginalName(propInfo);
            var thisBuilder = this;
            var fieldName = this.getFieldName(propInfo);
            var descriptor = {
                get: function () {
                    Utility.throwIfNotLoaded(propInfo.name, this[fieldName], typeInfo.name, this._isNull);
                    thisBuilder.throwIfApiNotSupported(typeInfo, propInfo);
                    return this[fieldName];
                },
                enumerable: true,
                configurable: true
            };
            if ((propInfo.behaviorFlags & 2) === 0) {
                descriptor.set = function (value) {
                    if (propInfo.behaviorFlags & 4) {
                        var customizationFunc = thisBuilder.getFunction(LibraryBuilder.CustomizationCodeNamespace + "." + typeInfo.name + "_" + propInfo.originalName + "_Set");
                        var handled = customizationFunc.call(this, this, value).handled;
                        if (handled) {
                            return;
                        }
                    }
                    this[fieldName] = value;
                    var apiFlags = thisBuilder.calculateApiFlags(propInfo.setMethodApiFlags, propInfo.undoableApiSetInfoOrdinal);
                    BatchApiHelper.invokeSetProperty(this, propInfo.originalName, value, apiFlags);
                };
            }
            Object.defineProperty(type.prototype, propInfo.name, descriptor);
        };
        LibraryBuilder.prototype.buildNavigationProperties = function (type, typeInfo) {
            if (Array.isArray(typeInfo.navigationProperties)) {
                for (var i = 0; i < typeInfo.navigationProperties.length; i++) {
                    var elem = typeInfo.navigationProperties[i];
                    if (Array.isArray(elem)) {
                        this.ensureArraySize(elem, 8);
                        typeInfo.navigationProperties[i] = {
                            name: this.getString(elem[0]),
                            behaviorFlags: elem[2],
                            apiSetInfoOrdinal: elem[3],
                            originalName: this.getString(elem[4]),
                            getMethodApiFlags: elem[5],
                            setMethodApiFlags: elem[6],
                            propertyTypeFullName: this.getString(elem[1]),
                            undoableApiSetInfoOrdinal: elem[7]
                        };
                    }
                    this.buildNavigationProperty(type, typeInfo, typeInfo.navigationProperties[i]);
                }
            }
        };
        LibraryBuilder.prototype.buildNavigationProperty = function (type, typeInfo, propInfo) {
            this.ensureOriginalName(propInfo);
            var thisBuilder = this;
            var fieldName = this.getFieldName(propInfo);
            var descriptor = {
                get: function () {
                    if (!this[thisBuilder.getFieldName(propInfo)]) {
                        thisBuilder.throwIfApiNotSupported(typeInfo, propInfo);
                        this[fieldName] = BatchApiHelper.createPropertyObject(thisBuilder.getFunction(propInfo.propertyTypeFullName), this, propInfo.originalName, (propInfo.behaviorFlags & 16) !== 0, propInfo.getMethodApiFlags);
                    }
                    if (propInfo.behaviorFlags & 64) {
                        var customizationFunc = thisBuilder.getFunction(LibraryBuilder.CustomizationCodeNamespace + "." + typeInfo.name + "_" + propInfo.originalName + "_Get");
                        customizationFunc.call(this, this, this[fieldName]);
                    }
                    return this[fieldName];
                },
                enumerable: true,
                configurable: true
            };
            if ((propInfo.behaviorFlags & 2) === 0) {
                descriptor.set = function (value) {
                    if (propInfo.behaviorFlags & 4) {
                        var customizationFunc = thisBuilder.getFunction(LibraryBuilder.CustomizationCodeNamespace + "." + typeInfo.name + "_" + propInfo.originalName + "_Set");
                        var handled = customizationFunc.call(this, this, value).handled;
                        if (handled) {
                            return;
                        }
                    }
                    this[fieldName] = value;
                    var apiFlags = thisBuilder.calculateApiFlags(propInfo.setMethodApiFlags, propInfo.undoableApiSetInfoOrdinal);
                    BatchApiHelper.invokeSetProperty(this, propInfo.originalName, value, apiFlags);
                };
            }
            Object.defineProperty(type.prototype, propInfo.name, descriptor);
        };
        LibraryBuilder.prototype.buildScalarMethods = function (type, typeInfo) {
            if (Array.isArray(typeInfo.scalarMethods)) {
                for (var i = 0; i < typeInfo.scalarMethods.length; i++) {
                    var elem = typeInfo.scalarMethods[i];
                    if (Array.isArray(elem)) {
                        this.ensureArraySize(elem, 7);
                        typeInfo.scalarMethods[i] = {
                            name: this.getString(elem[0]),
                            behaviorFlags: elem[2],
                            apiSetInfoOrdinal: elem[3],
                            originalName: this.getString(elem[5]),
                            apiFlags: elem[4],
                            parameterCount: elem[1],
                            undoableApiSetInfoOrdinal: elem[6]
                        };
                    }
                    this.buildScalarMethod(type, typeInfo, typeInfo.scalarMethods[i]);
                }
            }
        };
        LibraryBuilder.prototype.buildScalarMethod = function (type, typeInfo, methodInfo) {
            this.ensureOriginalName(methodInfo);
            var thisBuilder = this;
            type.prototype[methodInfo.name] = function () {
                var args = [];
                if ((methodInfo.behaviorFlags & 64) && methodInfo.parameterCount > 0) {
                    for (var i = 0; i < methodInfo.parameterCount - 1; i++) {
                        args.push(arguments[i]);
                    }
                    var rest = [];
                    for (var i = methodInfo.parameterCount - 1; i < arguments.length; i++) {
                        rest.push(arguments[i]);
                    }
                    args.push(rest);
                }
                else {
                    for (var i = 0; i < arguments.length; i++) {
                        args.push(arguments[i]);
                    }
                }
                if (methodInfo.behaviorFlags & 1) {
                    var customizationFunc = thisBuilder.getFunction(LibraryBuilder.CustomizationCodeNamespace + "." + typeInfo.name + "_" + methodInfo.originalName);
                    var applyArgs = [this];
                    for (var i = 0; i < args.length; i++) {
                        applyArgs.push(args[i]);
                    }
                    var _a = customizationFunc.apply(this, applyArgs), handled = _a.handled, result = _a.result;
                    if (handled) {
                        return result;
                    }
                }
                thisBuilder.throwIfApiNotSupported(typeInfo, methodInfo);
                var resultProcessType = 0;
                if (methodInfo.behaviorFlags & 32) {
                    resultProcessType = 1;
                }
                var operationType = 0;
                if (methodInfo.behaviorFlags & 2) {
                    operationType = 1;
                }
                var apiFlags = thisBuilder.calculateApiFlags(methodInfo.apiFlags, methodInfo.undoableApiSetInfoOrdinal);
                return BatchApiHelper.invokeMethod(this, methodInfo.originalName, operationType, args, apiFlags, resultProcessType);
            };
        };
        LibraryBuilder.prototype.buildNavigationMethods = function (type, typeInfo) {
            if (Array.isArray(typeInfo.navigationMethods)) {
                for (var i = 0; i < typeInfo.navigationMethods.length; i++) {
                    var elem = typeInfo.navigationMethods[i];
                    if (Array.isArray(elem)) {
                        this.ensureArraySize(elem, 9);
                        typeInfo.navigationMethods[i] = {
                            name: this.getString(elem[0]),
                            behaviorFlags: elem[3],
                            apiSetInfoOrdinal: elem[4],
                            originalName: this.getString(elem[6]),
                            apiFlags: elem[5],
                            parameterCount: elem[2],
                            returnTypeFullName: this.getString(elem[1]),
                            returnObjectGetByIdMethodName: this.getString(elem[7]),
                            undoableApiSetInfoOrdinal: elem[8]
                        };
                    }
                    this.buildNavigationMethod(type, typeInfo, typeInfo.navigationMethods[i]);
                }
            }
        };
        LibraryBuilder.prototype.buildNavigationMethod = function (type, typeInfo, methodInfo) {
            this.ensureOriginalName(methodInfo);
            var thisBuilder = this;
            type.prototype[methodInfo.name] = function () {
                var args = [];
                if ((methodInfo.behaviorFlags & 64) && methodInfo.parameterCount > 0) {
                    for (var i = 0; i < methodInfo.parameterCount - 1; i++) {
                        args.push(arguments[i]);
                    }
                    var rest = [];
                    for (var i = methodInfo.parameterCount - 1; i < arguments.length; i++) {
                        rest.push(arguments[i]);
                    }
                    args.push(rest);
                }
                else {
                    for (var i = 0; i < arguments.length; i++) {
                        args.push(arguments[i]);
                    }
                }
                if (methodInfo.behaviorFlags & 1) {
                    var customizationFunc = thisBuilder.getFunction(LibraryBuilder.CustomizationCodeNamespace + "." + typeInfo.name + "_" + methodInfo.originalName);
                    var applyArgs = [this];
                    for (var i = 0; i < args.length; i++) {
                        applyArgs.push(args[i]);
                    }
                    var _a = customizationFunc.apply(this, applyArgs), handled = _a.handled, result = _a.result;
                    if (handled) {
                        return result;
                    }
                }
                thisBuilder.throwIfApiNotSupported(typeInfo, methodInfo);
                if ((methodInfo.behaviorFlags & 16) !== 0) {
                    return BatchApiHelper.createIndexerObject(thisBuilder.getFunction(methodInfo.returnTypeFullName), this, args);
                }
                else {
                    var operationType = 0;
                    if (methodInfo.behaviorFlags & 2) {
                        operationType = 1;
                    }
                    var apiFlags = thisBuilder.calculateApiFlags(methodInfo.apiFlags, methodInfo.undoableApiSetInfoOrdinal);
                    return BatchApiHelper.createMethodObject(thisBuilder.getFunction(methodInfo.returnTypeFullName), this, methodInfo.originalName, operationType, args, (methodInfo.behaviorFlags & 4) !== 0, (methodInfo.behaviorFlags & 8) !== 0, methodInfo.returnObjectGetByIdMethodName, apiFlags);
                }
            };
        };
        LibraryBuilder.prototype.buildHandleResult = function (type, typeInfo) {
            var thisBuilder = this;
            type.prototype._handleResult = function (value) {
                ClientObject.prototype._handleResult.call(this, value);
                if (Utility.isNullOrUndefined(value)) {
                    return;
                }
                Utility.fixObjectPathIfNecessary(this, value);
                if (typeInfo.behaviorFlags & 8) {
                    var customizationFunc = thisBuilder.getFunction(LibraryBuilder.CustomizationCodeNamespace + "." + typeInfo.name + "_HandleResult");
                    customizationFunc.call(this, this, value);
                }
                if (typeInfo.scalarProperties) {
                    for (var i_3 = 0; i_3 < typeInfo.scalarProperties.length; i_3++) {
                        if (!Utility.isUndefined(value[typeInfo.scalarProperties[i_3].originalName])) {
                            if ((typeInfo.scalarProperties[i_3].behaviorFlags & 8) !== 0) {
                                this[thisBuilder.getFieldName(typeInfo.scalarProperties[i_3])] = Utility.adjustToDateTime(value[typeInfo.scalarProperties[i_3].originalName]);
                            }
                            else {
                                this[thisBuilder.getFieldName(typeInfo.scalarProperties[i_3])] = value[typeInfo.scalarProperties[i_3].originalName];
                            }
                        }
                    }
                }
                if (typeInfo.navigationProperties) {
                    var propNames = [];
                    for (var i_4 = 0; i_4 < typeInfo.navigationProperties.length; i_4++) {
                        propNames.push(typeInfo.navigationProperties[i_4].name);
                        propNames.push(typeInfo.navigationProperties[i_4].originalName);
                    }
                    Utility._handleNavigationPropertyResults(this, value, propNames);
                }
                if ((typeInfo.behaviorFlags & 1) !== 0) {
                    var hasIndexerMethod = thisBuilder.hasIndexMethod(typeInfo);
                    if (!Utility.isNullOrUndefined(value[Constants.items])) {
                        this.m__items = [];
                        var _data = value[Constants.items];
                        var childItemType = thisBuilder.getFunction(typeInfo.childItemTypeFullName);
                        for (var i = 0; i < _data.length; i++) {
                            var _item = BatchApiHelper.createChildItemObject(childItemType, hasIndexerMethod, this, _data[i], i);
                            _item._handleResult(_data[i]);
                            this.m__items.push(_item);
                        }
                    }
                }
            };
        };
        LibraryBuilder.prototype.buildHandleRetrieveResult = function (type, typeInfo) {
            var thisBuilder = this;
            type.prototype._handleRetrieveResult = function (value, result) {
                ClientObject.prototype._handleRetrieveResult.call(this, value, result);
                if (Utility.isNullOrUndefined(value)) {
                    return;
                }
                if (typeInfo.scalarProperties) {
                    for (var i = 0; i < typeInfo.scalarProperties.length; i++) {
                        if (typeInfo.scalarProperties[i].behaviorFlags & 8) {
                            if (!Utility.isNullOrUndefined(value[typeInfo.scalarProperties[i].name])) {
                                value[typeInfo.scalarProperties[i].name] = Utility.adjustToDateTime(value[typeInfo.scalarProperties[i].name]);
                            }
                        }
                    }
                }
                if (typeInfo.behaviorFlags & 1) {
                    var hasIndexerMethod_1 = thisBuilder.hasIndexMethod(typeInfo);
                    var childItemType_1 = thisBuilder.getFunction(typeInfo.childItemTypeFullName);
                    var thisObj_1 = this;
                    Utility.processRetrieveResult(thisObj_1, value, result, function (childItemData, index) { return BatchApiHelper.createChildItemObject(childItemType_1, hasIndexerMethod_1, thisObj_1, childItemData, index); });
                }
                else {
                    Utility.processRetrieveResult(this, value, result);
                }
            };
        };
        LibraryBuilder.prototype.buildHandleIdResult = function (type, typeInfo) {
            var thisBuilder = this;
            type.prototype._handleIdResult = function (value) {
                ClientObject.prototype._handleIdResult.call(this, value);
                if (Utility.isNullOrUndefined(value)) {
                    return;
                }
                if (typeInfo.behaviorFlags & 16) {
                    var customizationFunc = thisBuilder.getFunction(LibraryBuilder.CustomizationCodeNamespace + "." + typeInfo.name + "_HandleIdResult");
                    customizationFunc.call(this, this, value);
                }
                if (typeInfo.scalarProperties) {
                    for (var i = 0; i < typeInfo.scalarProperties.length; i++) {
                        var propName = typeInfo.scalarProperties[i].originalName;
                        if (propName === "Id" || propName === "_Id" || propName === "_ReferenceId") {
                            if (!Utility.isNullOrUndefined(value[typeInfo.scalarProperties[i].originalName])) {
                                this[thisBuilder.getFieldName(typeInfo.scalarProperties[i])] = value[typeInfo.scalarProperties[i].originalName];
                            }
                        }
                    }
                }
            };
        };
        LibraryBuilder.prototype.buildLoad = function (type, typeInfo) {
            type.prototype.load = function (options) {
                return Utility.load(this, options);
            };
        };
        LibraryBuilder.prototype.buildRetrieve = function (type, typeInfo) {
            type.prototype.retrieve = function (options) {
                return Utility.retrieve(this, options);
            };
        };
        LibraryBuilder.prototype.buildNewObject = function (type, typeInfo) {
            if (!Utility.isNullOrEmptyString(typeInfo.newObjectServerTypeFullName)) {
                type.newObject = function (context) {
                    return BatchApiHelper.createTopLevelServiceObject(type, context, typeInfo.newObjectServerTypeFullName, (typeInfo.behaviorFlags & 1) !== 0, typeInfo.newObjectApiFlags);
                };
            }
        };
        LibraryBuilder.prototype.buildSetMockData = function (type, typeInfo) {
            var thisBuilder = this;
            if (typeInfo.behaviorFlags & 1) {
                var hasIndexMethod_1 = thisBuilder.hasIndexMethod(typeInfo);
                type.prototype.setMockData = function (data) {
                    var thisObj = this;
                    Utility.setMockData(thisObj, data, function (childItemData, index) {
                        return BatchApiHelper.createChildItemObject(thisBuilder.getFunction(typeInfo.childItemTypeFullName), hasIndexMethod_1, thisObj, childItemData, index);
                    }, function (items) {
                        thisObj.m__items = items;
                    });
                };
            }
            else {
                type.prototype.setMockData = function (data) {
                    Utility.setMockData(this, data);
                };
            }
        };
        LibraryBuilder.prototype.buildEnsureUnchanged = function (type, typeInfo) {
            type.prototype.ensureUnchanged = function (data) {
                BatchApiHelper.invokeEnsureUnchanged(this, data);
            };
        };
        LibraryBuilder.prototype.buildUpdate = function (type, typeInfo) {
            type.prototype.update = function (properties) {
                this._recursivelyUpdate(properties);
            };
        };
        LibraryBuilder.prototype.buildSet = function (type, typeInfo) {
            if ((typeInfo.behaviorFlags & 1) !== 0) {
                return;
            }
            var notAllowedToBeSetPropertyNames = [];
            var allowedScalarPropertyNames = [];
            if (typeInfo.scalarProperties) {
                for (var i = 0; i < typeInfo.scalarProperties.length; i++) {
                    if ((typeInfo.scalarProperties[i].behaviorFlags & 2) === 0 &&
                        (typeInfo.scalarProperties[i].behaviorFlags & 1) !== 0) {
                        allowedScalarPropertyNames.push(typeInfo.scalarProperties[i].name);
                    }
                    else {
                        notAllowedToBeSetPropertyNames.push(typeInfo.scalarProperties[i].name);
                    }
                }
            }
            var allowedNavigationPropertyNames = [];
            if (typeInfo.navigationProperties) {
                for (var i = 0; i < typeInfo.navigationProperties.length; i++) {
                    if ((typeInfo.navigationProperties[i].behaviorFlags & 16) !== 0) {
                        notAllowedToBeSetPropertyNames.push(typeInfo.navigationProperties[i].name);
                    }
                    else if ((typeInfo.navigationProperties[i].behaviorFlags & 1) === 0) {
                        notAllowedToBeSetPropertyNames.push(typeInfo.navigationProperties[i].name);
                    }
                    else if ((typeInfo.navigationProperties[i].behaviorFlags & 32) === 0) {
                        notAllowedToBeSetPropertyNames.push(typeInfo.navigationProperties[i].name);
                    }
                    else {
                        allowedNavigationPropertyNames.push(typeInfo.navigationProperties[i].name);
                    }
                }
            }
            if (allowedNavigationPropertyNames.length === 0 && allowedScalarPropertyNames.length === 0) {
                return;
            }
            type.prototype.set = function (properties, options) {
                this._recursivelySet(properties, options, allowedScalarPropertyNames, allowedNavigationPropertyNames, notAllowedToBeSetPropertyNames);
            };
        };
        LibraryBuilder.prototype.buildItems = function (type, typeInfo) {
            if ((typeInfo.behaviorFlags & 1) === 0) {
                return;
            }
            Object.defineProperty(type.prototype, "items", {
                get: function () {
                    Utility.throwIfNotLoaded("items", this.m__items, typeInfo.name, this._isNull);
                    return this.m__items;
                },
                enumerable: true,
                configurable: true
            });
        };
        LibraryBuilder.prototype.buildToJSON = function (type, typeInfo) {
            var thisBuilder = this;
            if ((typeInfo.behaviorFlags & 1) !== 0) {
                type.prototype.toJSON = function () {
                    return Utility.toJson(this, {}, {}, this.m__items);
                };
                return;
            }
            else {
                type.prototype.toJSON = function () {
                    var scalarProperties = {};
                    if (typeInfo.scalarProperties) {
                        for (var i = 0; i < typeInfo.scalarProperties.length; i++) {
                            if ((typeInfo.scalarProperties[i].behaviorFlags & 1) !== 0) {
                                scalarProperties[typeInfo.scalarProperties[i].name] = this[thisBuilder.getFieldName(typeInfo.scalarProperties[i])];
                            }
                        }
                    }
                    var navProperties = {};
                    if (typeInfo.navigationProperties) {
                        for (var i = 0; i < typeInfo.navigationProperties.length; i++) {
                            if ((typeInfo.navigationProperties[i].behaviorFlags & 1) !== 0) {
                                navProperties[typeInfo.navigationProperties[i].name] = this[thisBuilder.getFieldName(typeInfo.navigationProperties[i])];
                            }
                        }
                    }
                    return Utility.toJson(this, scalarProperties, navProperties);
                };
            }
        };
        LibraryBuilder.prototype.buildTypeMetadataInfo = function (type, typeInfo) {
            Object.defineProperty(type.prototype, "_className", {
                get: function () {
                    return typeInfo.name;
                },
                enumerable: true,
                configurable: true
            });
            Object.defineProperty(type.prototype, "_isCollection", {
                get: function () {
                    return (typeInfo.behaviorFlags & 1) !== 0;
                },
                enumerable: true,
                configurable: true
            });
            if (!Utility.isNullOrEmptyString(typeInfo.collectionPropertyPath)) {
                Object.defineProperty(type.prototype, "_collectionPropertyPath", {
                    get: function () {
                        return typeInfo.collectionPropertyPath;
                    },
                    enumerable: true,
                    configurable: true
                });
            }
            if (typeInfo.scalarProperties && typeInfo.scalarProperties.length > 0) {
                Object.defineProperty(type.prototype, "_scalarPropertyNames", {
                    get: function () {
                        if (!this.m__scalarPropertyNames) {
                            this.m__scalarPropertyNames = typeInfo.scalarProperties.map(function (p) { return p.name; });
                        }
                        return this.m__scalarPropertyNames;
                    },
                    enumerable: true,
                    configurable: true
                });
                Object.defineProperty(type.prototype, "_scalarPropertyOriginalNames", {
                    get: function () {
                        if (!this.m__scalarPropertyOriginalNames) {
                            this.m__scalarPropertyOriginalNames = typeInfo.scalarProperties.map(function (p) { return p.originalName; });
                        }
                        return this.m__scalarPropertyOriginalNames;
                    },
                    enumerable: true,
                    configurable: true
                });
                Object.defineProperty(type.prototype, "_scalarPropertyUpdateable", {
                    get: function () {
                        if (!this.m__scalarPropertyUpdateable) {
                            this.m__scalarPropertyUpdateable = typeInfo.scalarProperties.map(function (p) { return (p.behaviorFlags & 2) === 0; });
                        }
                        return this.m__scalarPropertyUpdateable;
                    },
                    enumerable: true,
                    configurable: true
                });
            }
            if (typeInfo.navigationProperties && typeInfo.navigationProperties.length > 0) {
                Object.defineProperty(type.prototype, "_navigationPropertyNames", {
                    get: function () {
                        if (!this.m__navigationPropertyNames) {
                            this.m__navigationPropertyNames = typeInfo.navigationProperties.map(function (p) { return p.name; });
                        }
                        return this.m__navigationPropertyNames;
                    },
                    enumerable: true,
                    configurable: true
                });
            }
        };
        LibraryBuilder.prototype.buildTrackUntrack = function (type, typeInfo) {
            if (typeInfo.behaviorFlags & 2) {
                type.prototype.track = function () {
                    this.context.trackedObjects.add(this);
                    return this;
                };
                type.prototype.untrack = function () {
                    this.context.trackedObjects.remove(this);
                    return this;
                };
            }
        };
        LibraryBuilder.prototype.buildMixin = function (type, typeInfo) {
            if (typeInfo.behaviorFlags & 4) {
                var mixinType = this.getFunction(typeInfo.name + 'Custom');
                Utility.applyMixin(type, mixinType);
            }
        };
        LibraryBuilder.prototype.getOnEventName = function (name) {
            if (name[0] === '_') {
                return '_on' + name.substr(1);
            }
            return 'on' + name;
        };
        LibraryBuilder.prototype.buildEvents = function (type, typeInfo) {
            if (typeInfo.events) {
                for (var i = 0; i < typeInfo.events.length; i++) {
                    var elem = typeInfo.events[i];
                    if (Array.isArray(elem)) {
                        this.ensureArraySize(elem, 7);
                        typeInfo.events[i] = {
                            name: this.getString(elem[0]),
                            behaviorFlags: elem[1],
                            apiSetInfoOrdinal: elem[2],
                            typeExpression: this.getString(elem[3]),
                            targetIdExpression: this.getString(elem[4]),
                            register: this.getString(elem[5]),
                            unregister: this.getString(elem[6])
                        };
                    }
                    this.buildEvent(type, typeInfo, typeInfo.events[i]);
                }
            }
        };
        LibraryBuilder.prototype.buildEvent = function (type, typeInfo, evt) {
            if (evt.behaviorFlags & 1) {
                this.buildV0Event(type, typeInfo, evt);
            }
            else {
                this.buildV2Event(type, typeInfo, evt);
            }
        };
        LibraryBuilder.prototype.buildV2Event = function (type, typeInfo, evt) {
            var thisBuilder = this;
            var eventName = this.getOnEventName(evt.name);
            var fieldName = this.getFieldName(evt);
            Object.defineProperty(type.prototype, eventName, {
                get: function () {
                    if (!this[fieldName]) {
                        thisBuilder.throwIfApiNotSupported(typeInfo, evt);
                        var thisObj = this;
                        var registerFunc = null;
                        if (evt.register !== 'null') {
                            registerFunc = this[evt.register].bind(this);
                        }
                        var unregisterFunc = null;
                        if (evt.unregister !== 'null') {
                            unregisterFunc = this[evt.unregister].bind(this);
                        }
                        var getTargetIdFunc = function () {
                            return thisBuilder.evaluateEventTargetId(evt.targetIdExpression, thisObj);
                        };
                        var func = null;
                        if (evt.behaviorFlags & 2) {
                            func = thisBuilder.getFunction(LibraryBuilder.CustomizationCodeNamespace + "." + typeInfo.name + "_" + evt.name + "_EventArgsTransform");
                        }
                        var eventArgsTransformFunc = function (value) {
                            if (func) {
                                value = func.call(thisObj, thisObj, value);
                            }
                            return Utility._createPromiseFromResult(value);
                        };
                        var eventType = thisBuilder.evaluateEventType(evt.typeExpression);
                        this[fieldName] = new GenericEventHandlers(this.context, this, evt.name, {
                            eventType: eventType,
                            getTargetIdFunc: getTargetIdFunc,
                            registerFunc: registerFunc,
                            unregisterFunc: unregisterFunc,
                            eventArgsTransformFunc: eventArgsTransformFunc
                        });
                    }
                    return this[fieldName];
                },
                enumerable: true,
                configurable: true
            });
        };
        LibraryBuilder.prototype.buildV0Event = function (type, typeInfo, evt) {
            var thisBuilder = this;
            var eventName = this.getOnEventName(evt.name);
            var fieldName = this.getFieldName(evt);
            Object.defineProperty(type.prototype, eventName, {
                get: function () {
                    if (!this[fieldName]) {
                        thisBuilder.throwIfApiNotSupported(typeInfo, evt);
                        var thisObj = this;
                        var registerFunc = null;
                        if (Utility.isNullOrEmptyString(evt.register)) {
                            var eventType_1 = thisBuilder.evaluateEventType(evt.typeExpression);
                            registerFunc =
                                function (handlerCallback) {
                                    var targetId = thisBuilder.evaluateEventTargetId(evt.targetIdExpression, thisObj);
                                    return thisObj.context.eventRegistration.register(eventType_1, targetId, handlerCallback);
                                };
                        }
                        else if (evt.register !== 'null') {
                            var func_1 = thisBuilder.getFunction(evt.register);
                            registerFunc =
                                function (handlerCallback) {
                                    return func_1.call(thisObj, thisObj, handlerCallback);
                                };
                        }
                        var unregisterFunc = null;
                        if (Utility.isNullOrEmptyString(evt.unregister)) {
                            var eventType_2 = thisBuilder.evaluateEventType(evt.typeExpression);
                            unregisterFunc =
                                function (handlerCallback) {
                                    var targetId = thisBuilder.evaluateEventTargetId(evt.targetIdExpression, thisObj);
                                    return thisObj.context.eventRegistration.unregister(eventType_2, targetId, handlerCallback);
                                };
                        }
                        else if (evt.unregister !== 'null') {
                            var func_2 = thisBuilder.getFunction(evt.unregister);
                            unregisterFunc =
                                function (handlerCallback) {
                                    return func_2.call(thisObj, thisObj, handlerCallback);
                                };
                        }
                        var func = null;
                        if (evt.behaviorFlags & 2) {
                            func = thisBuilder.getFunction(LibraryBuilder.CustomizationCodeNamespace + "." + typeInfo.name + "_" + evt.name + "_EventArgsTransform");
                        }
                        var eventArgsTransformFunc = function (value) {
                            if (func) {
                                value = func.call(thisObj, thisObj, value);
                            }
                            return Utility._createPromiseFromResult(value);
                        };
                        this[fieldName] = new EventHandlers(this.context, this, evt.name, {
                            registerFunc: registerFunc,
                            unregisterFunc: unregisterFunc,
                            eventArgsTransformFunc: eventArgsTransformFunc
                        });
                    }
                    return this[fieldName];
                },
                enumerable: true,
                configurable: true
            });
        };
        LibraryBuilder.prototype.hasIndexMethod = function (typeInfo) {
            var ret = false;
            if (typeInfo.navigationMethods) {
                for (var i = 0; i < typeInfo.navigationMethods.length; i++) {
                    if ((typeInfo.navigationMethods[i].behaviorFlags & 16) !== 0) {
                        ret = true;
                        break;
                    }
                }
            }
            return ret;
        };
        LibraryBuilder.CustomizationCodeNamespace = "_CC";
        return LibraryBuilder;
    }());
    OfficeExtension_1.LibraryBuilder = LibraryBuilder;
    var versionToken = 1;
    var internalConfiguration = {
        invokeRequestModifier: function (request) {
            request.DdaMethod.Version = versionToken;
            return request;
        },
        invokeResponseModifier: function (args) {
            versionToken = args.Version;
            if (args.Error) {
                args.error = {};
                args.error.Code = args.Error;
            }
            return args;
        }
    };
    var CommunicationConstants;
    (function (CommunicationConstants) {
        CommunicationConstants["SendingId"] = "sId";
        CommunicationConstants["RespondingId"] = "rId";
        CommunicationConstants["CommandKey"] = "command";
        CommunicationConstants["SessionInfoKey"] = "sessionInfo";
        CommunicationConstants["ParamsKey"] = "params";
        CommunicationConstants["ApiReadyCommand"] = "apiready";
        CommunicationConstants["ExecuteMethodCommand"] = "executeMethod";
        CommunicationConstants["GetAppContextCommand"] = "getAppContext";
        CommunicationConstants["RegisterEventCommand"] = "registerEvent";
        CommunicationConstants["UnregisterEventCommand"] = "unregisterEvent";
        CommunicationConstants["FireEventCommand"] = "fireEvent";
    })(CommunicationConstants || (CommunicationConstants = {}));
    var EmbeddedConstants = (function () {
        function EmbeddedConstants() {
        }
        EmbeddedConstants.sessionContext = 'sc';
        EmbeddedConstants.embeddingPageOrigin = 'EmbeddingPageOrigin';
        EmbeddedConstants.embeddingPageSessionInfo = 'EmbeddingPageSessionInfo';
        return EmbeddedConstants;
    }());
    OfficeExtension_1.EmbeddedConstants = EmbeddedConstants;
    var EmbeddedSession = (function (_super) {
        __extends(EmbeddedSession, _super);
        function EmbeddedSession(url, options) {
            var _this = _super.call(this) || this;
            _this.m_chosenWindow = null;
            _this.m_chosenOrigin = null;
            _this.m_enabled = true;
            _this.m_onMessageHandler = _this._onMessage.bind(_this);
            _this.m_callbackList = {};
            _this.m_id = 0;
            _this.m_timeoutId = -1;
            _this.m_appContext = null;
            _this.m_url = url;
            _this.m_options = options;
            if (!_this.m_options) {
                _this.m_options = { sessionKey: Math.random().toString() };
            }
            if (!_this.m_options.sessionKey) {
                _this.m_options.sessionKey = Math.random().toString();
            }
            if (!_this.m_options.container) {
                _this.m_options.container = document.body;
            }
            if (!_this.m_options.timeoutInMilliseconds) {
                _this.m_options.timeoutInMilliseconds = 60000;
            }
            if (!_this.m_options.height) {
                _this.m_options.height = '400px';
            }
            if (!_this.m_options.width) {
                _this.m_options.width = '100%';
            }
            if (!(_this.m_options.webApplication &&
                _this.m_options.webApplication.accessToken &&
                _this.m_options.webApplication.accessTokenTtl)) {
                _this.m_options.webApplication = null;
            }
            return _this;
        }
        EmbeddedSession.prototype._getIFrameSrc = function () {
            var origin = window.location.protocol + '//' + window.location.host;
            var toAppend = EmbeddedConstants.embeddingPageOrigin +
                '=' +
                encodeURIComponent(origin) +
                '&' +
                EmbeddedConstants.embeddingPageSessionInfo +
                '=' +
                encodeURIComponent(this.m_options.sessionKey);
            var useHash = false;
            if (this.m_url.toLowerCase().indexOf('/_layouts/preauth.aspx') > 0 ||
                this.m_url.toLowerCase().indexOf('/_layouts/15/preauth.aspx') > 0) {
                useHash = true;
            }
            var a = document.createElement('a');
            a.href = this.m_url;
            if (this.m_options.webApplication) {
                var toAppendWAC = EmbeddedConstants.embeddingPageOrigin +
                    '=' +
                    origin +
                    '&' +
                    EmbeddedConstants.embeddingPageSessionInfo +
                    '=' +
                    this.m_options.sessionKey;
                if (a.search.length === 0 || a.search === '?') {
                    a.search = '?' + EmbeddedConstants.sessionContext + '=' + encodeURIComponent(toAppendWAC);
                }
                else {
                    a.search = a.search + '&' + EmbeddedConstants.sessionContext + '=' + encodeURIComponent(toAppendWAC);
                }
            }
            else if (useHash) {
                if (a.hash.length === 0 || a.hash === '#') {
                    a.hash = '#' + toAppend;
                }
                else {
                    a.hash = a.hash + '&' + toAppend;
                }
            }
            else {
                if (a.search.length === 0 || a.search === '?') {
                    a.search = '?' + toAppend;
                }
                else {
                    a.search = a.search + '&' + toAppend;
                }
            }
            var iframeSrc = a.href;
            return iframeSrc;
        };
        EmbeddedSession.prototype.init = function () {
            var _this = this;
            window.addEventListener('message', this.m_onMessageHandler);
            var iframeSrc = this._getIFrameSrc();
            return CoreUtility.createPromise(function (resolve, reject) {
                var iframeElement = document.createElement('iframe');
                if (_this.m_options.id) {
                    iframeElement.id = _this.m_options.id;
                    iframeElement.name = _this.m_options.id;
                }
                iframeElement.style.height = _this.m_options.height;
                iframeElement.style.width = _this.m_options.width;
                if (!_this.m_options.webApplication) {
                    iframeElement.src = iframeSrc;
                    _this.m_options.container.appendChild(iframeElement);
                }
                else {
                    var webApplicationForm = document.createElement('form');
                    webApplicationForm.setAttribute('action', iframeSrc);
                    webApplicationForm.setAttribute('method', 'post');
                    webApplicationForm.setAttribute('target', iframeElement.name);
                    _this.m_options.container.appendChild(webApplicationForm);
                    var token_input = document.createElement('input');
                    token_input.setAttribute('type', 'hidden');
                    token_input.setAttribute('name', 'access_token');
                    token_input.setAttribute('value', _this.m_options.webApplication.accessToken);
                    webApplicationForm.appendChild(token_input);
                    var token_ttl_input = document.createElement('input');
                    token_ttl_input.setAttribute('type', 'hidden');
                    token_ttl_input.setAttribute('name', 'access_token_ttl');
                    token_ttl_input.setAttribute('value', _this.m_options.webApplication.accessTokenTtl);
                    webApplicationForm.appendChild(token_ttl_input);
                    _this.m_options.container.appendChild(iframeElement);
                    webApplicationForm.submit();
                }
                _this.m_timeoutId = window.setTimeout(function () {
                    _this.close();
                    var err = Utility.createRuntimeError(CoreErrorCodes.timeout, CoreUtility._getResourceString(CoreResourceStrings.timeout), 'EmbeddedSession.init');
                    reject(err);
                }, _this.m_options.timeoutInMilliseconds);
                _this.m_promiseResolver = resolve;
            });
        };
        EmbeddedSession.prototype._invoke = function (method, callback, params) {
            if (!this.m_enabled) {
                callback(5001, null);
                return;
            }
            if (internalConfiguration.invokeRequestModifier) {
                params = internalConfiguration.invokeRequestModifier(params);
            }
            this._sendMessageWithCallback(this.m_id++, method, params, function (args) {
                if (internalConfiguration.invokeResponseModifier) {
                    args = internalConfiguration.invokeResponseModifier(args);
                }
                var errorCode = args['Error'];
                delete args['Error'];
                callback(errorCode || 0, args);
            });
        };
        EmbeddedSession.prototype.close = function () {
            window.removeEventListener('message', this.m_onMessageHandler);
            window.clearTimeout(this.m_timeoutId);
            this.m_enabled = false;
        };
        Object.defineProperty(EmbeddedSession.prototype, "eventRegistration", {
            get: function () {
                if (!this.m_sessionEventManager) {
                    this.m_sessionEventManager = new EventRegistration(this._registerEventImpl.bind(this), this._unregisterEventImpl.bind(this));
                }
                return this.m_sessionEventManager;
            },
            enumerable: true,
            configurable: true
        });
        EmbeddedSession.prototype._createRequestExecutorOrNull = function () {
            return new EmbeddedRequestExecutor(this);
        };
        EmbeddedSession.prototype._resolveRequestUrlAndHeaderInfo = function () {
            return CoreUtility._createPromiseFromResult(null);
        };
        EmbeddedSession.prototype._registerEventImpl = function (eventId, targetId) {
            var _this = this;
            return CoreUtility.createPromise(function (resolve, reject) {
                _this._sendMessageWithCallback(_this.m_id++, CommunicationConstants.RegisterEventCommand, { EventId: eventId, TargetId: targetId }, function () {
                    resolve(null);
                });
            });
        };
        EmbeddedSession.prototype._unregisterEventImpl = function (eventId, targetId) {
            var _this = this;
            return CoreUtility.createPromise(function (resolve, reject) {
                _this._sendMessageWithCallback(_this.m_id++, CommunicationConstants.UnregisterEventCommand, { EventId: eventId, TargetId: targetId }, function () {
                    resolve();
                });
            });
        };
        EmbeddedSession.prototype._onMessage = function (event) {
            var _this = this;
            if (!this.m_enabled) {
                return;
            }
            if (this.m_chosenWindow && (this.m_chosenWindow !== event.source || this.m_chosenOrigin !== event.origin)) {
                return;
            }
            var eventData = event.data;
            if (eventData && eventData[CommunicationConstants.CommandKey] === CommunicationConstants.ApiReadyCommand) {
                if (!this.m_chosenWindow &&
                    this._isValidDescendant(event.source) &&
                    eventData[CommunicationConstants.SessionInfoKey] === this.m_options.sessionKey) {
                    this.m_chosenWindow = event.source;
                    this.m_chosenOrigin = event.origin;
                    this._sendMessageWithCallback(this.m_id++, CommunicationConstants.GetAppContextCommand, null, function (appContext) {
                        _this._setupContext(appContext);
                        window.clearTimeout(_this.m_timeoutId);
                        _this.m_promiseResolver();
                    });
                }
                return;
            }
            if (eventData && eventData[CommunicationConstants.CommandKey] === CommunicationConstants.FireEventCommand) {
                var msg = eventData[CommunicationConstants.ParamsKey];
                var eventId = msg['EventId'];
                var targetId = msg['TargetId'];
                var data = msg['Data'];
                if (this.m_sessionEventManager) {
                    var handlers = this.m_sessionEventManager.getHandlers(eventId, targetId);
                    for (var i = 0; i < handlers.length; i++) {
                        handlers[i](data);
                    }
                }
                return;
            }
            if (eventData && eventData.hasOwnProperty(CommunicationConstants.RespondingId)) {
                var rId = eventData[CommunicationConstants.RespondingId];
                var callback = this.m_callbackList[rId];
                if (typeof callback === 'function') {
                    callback(eventData[CommunicationConstants.ParamsKey]);
                }
                delete this.m_callbackList[rId];
            }
        };
        EmbeddedSession.prototype._sendMessageWithCallback = function (id, command, data, callback) {
            this.m_callbackList[id] = callback;
            var message = {};
            message[CommunicationConstants.SendingId] = id;
            message[CommunicationConstants.CommandKey] = command;
            message[CommunicationConstants.ParamsKey] = data;
            this.m_chosenWindow.postMessage(JSON.stringify(message), this.m_chosenOrigin);
        };
        EmbeddedSession.prototype._isValidDescendant = function (wnd) {
            var container = this.m_options.container || document.body;
            function doesFrameWindow(containerWindow) {
                if (containerWindow === wnd) {
                    return true;
                }
                for (var i = 0, len = containerWindow.frames.length; i < len; i++) {
                    if (doesFrameWindow(containerWindow.frames[i])) {
                        return true;
                    }
                }
                return false;
            }
            var iframes = container.getElementsByTagName('iframe');
            for (var i = 0, len = iframes.length; i < len; i++) {
                if (doesFrameWindow(iframes[i].contentWindow)) {
                    return true;
                }
            }
            return false;
        };
        EmbeddedSession.prototype._setupContext = function (appContext) {
            if (!(this.m_appContext = appContext)) {
                return;
            }
        };
        return EmbeddedSession;
    }(SessionBase));
    OfficeExtension_1.EmbeddedSession = EmbeddedSession;
    var EmbeddedRequestExecutor = (function () {
        function EmbeddedRequestExecutor(session) {
            this.m_session = session;
        }
        EmbeddedRequestExecutor.prototype.executeAsync = function (customData, requestFlags, requestMessage) {
            var _this = this;
            var messageSafearray = RichApiMessageUtility.buildMessageArrayForIRequestExecutor(customData, requestFlags, requestMessage, EmbeddedRequestExecutor.SourceLibHeaderValue);
            return CoreUtility.createPromise(function (resolve, reject) {
                _this.m_session._invoke(CommunicationConstants.ExecuteMethodCommand, function (status, result) {
                    CoreUtility.log('Response:');
                    CoreUtility.log(JSON.stringify(result));
                    var response;
                    if (status == 0) {
                        response = RichApiMessageUtility.buildResponseOnSuccess(RichApiMessageUtility.getResponseBodyFromSafeArray(result.Data), RichApiMessageUtility.getResponseHeadersFromSafeArray(result.Data));
                    }
                    else {
                        response = RichApiMessageUtility.buildResponseOnError(result.error.Code, result.error.Message);
                    }
                    resolve(response);
                }, EmbeddedRequestExecutor._transformMessageArrayIntoParams(messageSafearray));
            });
        };
        EmbeddedRequestExecutor._transformMessageArrayIntoParams = function (msgArray) {
            return {
                ArrayData: msgArray,
                DdaMethod: {
                    DispatchId: EmbeddedRequestExecutor.DispidExecuteRichApiRequestMethod
                }
            };
        };
        EmbeddedRequestExecutor.DispidExecuteRichApiRequestMethod = 93;
        EmbeddedRequestExecutor.SourceLibHeaderValue = 'Embedded';
        return EmbeddedRequestExecutor;
    }());
})(OfficeExtension || (OfficeExtension = {}));
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b)
                if (b.hasOwnProperty(p))
                    d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try {
            step(generator.next(value));
        }
        catch (e) {
            reject(e);
        } }
        function rejected(value) { try {
            step(generator["throw"](value));
        }
        catch (e) {
            reject(e);
        } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function () { if (t[0] & 1)
            throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f)
            throw new TypeError("Generator is already executing.");
        while (_)
            try {
                if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
                    return t;
                if (y = 0, t)
                    op = [op[0] & 2, t.value];
                switch (op[0]) {
                    case 0:
                    case 1:
                        t = op;
                        break;
                    case 4:
                        _.label++;
                        return { value: op[1], done: false };
                    case 5:
                        _.label++;
                        y = op[1];
                        op = [0];
                        continue;
                    case 7:
                        op = _.ops.pop();
                        _.trys.pop();
                        continue;
                    default:
                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
                            _ = 0;
                            continue;
                        }
                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
                            _.label = op[1];
                            break;
                        }
                        if (op[0] === 6 && _.label < t[1]) {
                            _.label = t[1];
                            t = op;
                            break;
                        }
                        if (t && _.label < t[2]) {
                            _.label = t[2];
                            _.ops.push(op);
                            break;
                        }
                        if (t[2])
                            _.ops.pop();
                        _.trys.pop();
                        continue;
                }
                op = body.call(thisArg, _);
            }
            catch (e) {
                op = [6, e];
                y = 0;
            }
            finally {
                f = t = 0;
            }
        if (op[0] & 5)
            throw op[1];
        return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var OfficeCore;
(function (OfficeCore) {
    var _hostName = "OfficeCore";
    var _defaultApiSetName = "AgaveVisualApi";
    var _createPropertyObject = OfficeExtension.BatchApiHelper.createPropertyObject;
    var _createMethodObject = OfficeExtension.BatchApiHelper.createMethodObject;
    var _createIndexerObject = OfficeExtension.BatchApiHelper.createIndexerObject;
    var _createRootServiceObject = OfficeExtension.BatchApiHelper.createRootServiceObject;
    var _createTopLevelServiceObject = OfficeExtension.BatchApiHelper.createTopLevelServiceObject;
    var _createChildItemObject = OfficeExtension.BatchApiHelper.createChildItemObject;
    var _invokeMethod = OfficeExtension.BatchApiHelper.invokeMethod;
    var _invokeEnsureUnchanged = OfficeExtension.BatchApiHelper.invokeEnsureUnchanged;
    var _invokeSetProperty = OfficeExtension.BatchApiHelper.invokeSetProperty;
    var _isNullOrUndefined = OfficeExtension.Utility.isNullOrUndefined;
    var _isUndefined = OfficeExtension.Utility.isUndefined;
    var _throwIfNotLoaded = OfficeExtension.Utility.throwIfNotLoaded;
    var _throwIfApiNotSupported = OfficeExtension.Utility.throwIfApiNotSupported;
    var _load = OfficeExtension.Utility.load;
    var _retrieve = OfficeExtension.Utility.retrieve;
    var _toJson = OfficeExtension.Utility.toJson;
    var _fixObjectPathIfNecessary = OfficeExtension.Utility.fixObjectPathIfNecessary;
    var _handleNavigationPropertyResults = OfficeExtension.Utility._handleNavigationPropertyResults;
    var _adjustToDateTime = OfficeExtension.Utility.adjustToDateTime;
    var _processRetrieveResult = OfficeExtension.Utility.processRetrieveResult;
    var _typeBiShim = "BiShim";
    var BiShim = (function (_super) {
        __extends(BiShim, _super);
        function BiShim() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(BiShim.prototype, "_className", {
            get: function () {
                return "BiShim";
            },
            enumerable: true,
            configurable: true
        });
        BiShim.prototype.initialize = function (capabilities) {
            _invokeMethod(this, "Initialize", 0, [capabilities], 0, 0);
        };
        BiShim.prototype.getData = function () {
            return _invokeMethod(this, "getData", 1, [], 4, 0);
        };
        BiShim.prototype.setVisualObjects = function (visualObjects) {
            _invokeMethod(this, "setVisualObjects", 0, [visualObjects], 2, 0);
        };
        BiShim.prototype.setVisualObjectsToPersist = function (visualObjectsToPersist) {
            _invokeMethod(this, "setVisualObjectsToPersist", 0, [visualObjectsToPersist], 2, 0);
        };
        BiShim.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        BiShim.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        BiShim.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.BiShim, context, "Microsoft.AgaveVisual.BiShim", false, 4);
        };
        BiShim.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return BiShim;
    }(OfficeExtension.ClientObject));
    OfficeCore.BiShim = BiShim;
    var AgaveVisualErrorCodes;
    (function (AgaveVisualErrorCodes) {
        AgaveVisualErrorCodes["generalException1"] = "GeneralException";
    })(AgaveVisualErrorCodes = OfficeCore.AgaveVisualErrorCodes || (OfficeCore.AgaveVisualErrorCodes = {}));
})(OfficeCore || (OfficeCore = {}));
var OfficeCore;
(function (OfficeCore) {
    var _hostName = "OfficeCore";
    var _defaultApiSetName = "ExperimentApi";
    var _createPropertyObject = OfficeExtension.BatchApiHelper.createPropertyObject;
    var _createMethodObject = OfficeExtension.BatchApiHelper.createMethodObject;
    var _createIndexerObject = OfficeExtension.BatchApiHelper.createIndexerObject;
    var _createRootServiceObject = OfficeExtension.BatchApiHelper.createRootServiceObject;
    var _createTopLevelServiceObject = OfficeExtension.BatchApiHelper.createTopLevelServiceObject;
    var _createChildItemObject = OfficeExtension.BatchApiHelper.createChildItemObject;
    var _invokeMethod = OfficeExtension.BatchApiHelper.invokeMethod;
    var _invokeEnsureUnchanged = OfficeExtension.BatchApiHelper.invokeEnsureUnchanged;
    var _invokeSetProperty = OfficeExtension.BatchApiHelper.invokeSetProperty;
    var _isNullOrUndefined = OfficeExtension.Utility.isNullOrUndefined;
    var _isUndefined = OfficeExtension.Utility.isUndefined;
    var _throwIfNotLoaded = OfficeExtension.Utility.throwIfNotLoaded;
    var _throwIfApiNotSupported = OfficeExtension.Utility.throwIfApiNotSupported;
    var _load = OfficeExtension.Utility.load;
    var _retrieve = OfficeExtension.Utility.retrieve;
    var _toJson = OfficeExtension.Utility.toJson;
    var _fixObjectPathIfNecessary = OfficeExtension.Utility.fixObjectPathIfNecessary;
    var _handleNavigationPropertyResults = OfficeExtension.Utility._handleNavigationPropertyResults;
    var _adjustToDateTime = OfficeExtension.Utility.adjustToDateTime;
    var _processRetrieveResult = OfficeExtension.Utility.processRetrieveResult;
    var _typeFlightingService = "FlightingService";
    var FlightingService = (function (_super) {
        __extends(FlightingService, _super);
        function FlightingService() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(FlightingService.prototype, "_className", {
            get: function () {
                return "FlightingService";
            },
            enumerable: true,
            configurable: true
        });
        FlightingService.prototype.getClientSessionId = function () {
            return _invokeMethod(this, "GetClientSessionId", 1, [], 4, 0);
        };
        FlightingService.prototype.getDeferredFlights = function () {
            return _invokeMethod(this, "GetDeferredFlights", 1, [], 4, 0);
        };
        FlightingService.prototype.getFeature = function (featureName, type, defaultValue, possibleValues) {
            return _createMethodObject(OfficeCore.ABType, this, "GetFeature", 1, [featureName, type, defaultValue, possibleValues], false, false, null, 4);
        };
        FlightingService.prototype.getFeatureGate = function (featureName, scope) {
            return _createMethodObject(OfficeCore.ABType, this, "GetFeatureGate", 1, [featureName, scope], false, false, null, 4);
        };
        FlightingService.prototype.resetOverride = function (featureName) {
            _invokeMethod(this, "ResetOverride", 0, [featureName], 0, 0);
        };
        FlightingService.prototype.setOverride = function (featureName, type, value) {
            _invokeMethod(this, "SetOverride", 0, [featureName, type, value], 0, 0);
        };
        FlightingService.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        FlightingService.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        FlightingService.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.FlightingService, context, "Microsoft.Experiment.FlightingService", false, 4);
        };
        FlightingService.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return FlightingService;
    }(OfficeExtension.ClientObject));
    OfficeCore.FlightingService = FlightingService;
    var _typeABType = "ABType";
    var ABType = (function (_super) {
        __extends(ABType, _super);
        function ABType() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ABType.prototype, "_className", {
            get: function () {
                return "ABType";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ABType.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["value"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ABType.prototype, "value", {
            get: function () {
                _throwIfNotLoaded("value", this._V, _typeABType, this._isNull);
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        ABType.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Value"])) {
                this._V = obj["Value"];
            }
        };
        ABType.prototype.load = function (option) {
            return _load(this, option);
        };
        ABType.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ABType.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ABType.prototype.toJSON = function () {
            return _toJson(this, {
                "value": this._V
            }, {});
        };
        ABType.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ABType;
    }(OfficeExtension.ClientObject));
    OfficeCore.ABType = ABType;
    var FeatureType;
    (function (FeatureType) {
        FeatureType["boolean"] = "Boolean";
        FeatureType["integer"] = "Integer";
        FeatureType["string"] = "String";
    })(FeatureType = OfficeCore.FeatureType || (OfficeCore.FeatureType = {}));
    var ExperimentErrorCodes;
    (function (ExperimentErrorCodes) {
        ExperimentErrorCodes["generalException"] = "GeneralException";
    })(ExperimentErrorCodes = OfficeCore.ExperimentErrorCodes || (OfficeCore.ExperimentErrorCodes = {}));
})(OfficeCore || (OfficeCore = {}));
var OfficeCore;
(function (OfficeCore) {
    OfficeCore.OfficeOnlineDomainList = [
        "*.dod.online.office365.us",
        "*.gov.online.office365.us",
        "*.officeapps-df.live.com",
        "*.officeapps.live.com",
        "*.online.office.de",
        "*.partner.officewebapps.cn"
    ];
    function isHostOriginTrusted() {
        if (typeof window.external === 'undefined' ||
            typeof window.external.GetContext === 'undefined') {
            var hostUrl = OSF.getClientEndPoint()._targetUrl;
            var hostname_1 = getHostNameFromUrl(hostUrl);
            if (hostUrl.indexOf("https:") != 0) {
                return false;
            }
            OfficeCore.OfficeOnlineDomainList.forEach(function (domain) {
                if (domain.indexOf("*.") == 0) {
                    domain = domain.substring(2);
                }
                if (hostname_1.indexOf(domain) == hostname_1.length - domain.length) {
                    return true;
                }
            });
            return false;
        }
        return true;
    }
    OfficeCore.isHostOriginTrusted = isHostOriginTrusted;
    function getHostNameFromUrl(url) {
        var hostName = "";
        hostName = url.split("/")[2];
        hostName = hostName.split(":")[0];
        hostName = hostName.split("?")[0];
        return hostName;
    }
})(OfficeCore || (OfficeCore = {}));
var OfficeCore;
(function (OfficeCore) {
    var FirstPartyApis = (function () {
        function FirstPartyApis(context) {
            this.context = context;
        }
        Object.defineProperty(FirstPartyApis.prototype, "roamingSettings", {
            get: function () {
                if (!this.m_roamingSettings) {
                    this.m_roamingSettings = OfficeCore.AuthenticationService.newObject(this.context).roamingSettings;
                }
                return this.m_roamingSettings;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FirstPartyApis.prototype, "tap", {
            get: function () {
                if (!this.m_tap) {
                    this.m_tap = OfficeCore.Tap.newObject(this.context);
                }
                return this.m_tap;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FirstPartyApis.prototype, "skill", {
            get: function () {
                if (!this.m_skill) {
                    this.m_skill = OfficeCore.Skill.newObject(this.context);
                }
                return this.m_skill;
            },
            enumerable: true,
            configurable: true
        });
        return FirstPartyApis;
    }());
    OfficeCore.FirstPartyApis = FirstPartyApis;
    var RequestContext = (function (_super) {
        __extends(RequestContext, _super);
        function RequestContext(url) {
            return _super.call(this, url) || this;
        }
        Object.defineProperty(RequestContext.prototype, "firstParty", {
            get: function () {
                if (!this.m_firstPartyApis) {
                    this.m_firstPartyApis = new FirstPartyApis(this);
                }
                return this.m_firstPartyApis;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RequestContext.prototype, "flighting", {
            get: function () {
                return this.flightingService;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RequestContext.prototype, "telemetry", {
            get: function () {
                if (!this.m_telemetry) {
                    this.m_telemetry = OfficeCore.TelemetryService.newObject(this);
                }
                return this.m_telemetry;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RequestContext.prototype, "ribbon", {
            get: function () {
                if (!this.m_ribbon) {
                    this.m_ribbon = OfficeCore.DynamicRibbon.newObject(this);
                }
                return this.m_ribbon;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RequestContext.prototype, "bi", {
            get: function () {
                if (!this.m_biShim) {
                    this.m_biShim = OfficeCore.BiShim.newObject(this);
                }
                return this.m_biShim;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RequestContext.prototype, "flightingService", {
            get: function () {
                if (!this.m_flightingService) {
                    this.m_flightingService = OfficeCore.FlightingService.newObject(this);
                }
                return this.m_flightingService;
            },
            enumerable: true,
            configurable: true
        });
        return RequestContext;
    }(OfficeExtension.ClientRequestContext));
    OfficeCore.RequestContext = RequestContext;
    function run(arg1, arg2) {
        return OfficeExtension.ClientRequestContext._runBatch("OfficeCore.run", arguments, function (requestInfo) { return new OfficeCore.RequestContext(requestInfo); });
    }
    OfficeCore.run = run;
})(OfficeCore || (OfficeCore = {}));
var Office;
(function (Office) {
    var license;
    (function (license_1) {
        function _createRequestContext() {
            var context = new OfficeCore.RequestContext();
            if (OSF._OfficeAppFactory.getHostInfo().hostPlatform == 'web') {
                context._customData = 'WacPartition';
            }
            return context;
        }
        function isFeatureEnabled(feature, fallbackValue) {
            return __awaiter(this, void 0, void 0, function () {
                var context, license, isEnabled;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext();
                            license = OfficeCore.License.newObject(context);
                            isEnabled = license.isFeatureEnabled(feature, fallbackValue);
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2, isEnabled.value];
                    }
                });
            });
        }
        license_1.isFeatureEnabled = isFeatureEnabled;
        function getFeatureTier(feature, fallbackValue) {
            return __awaiter(this, void 0, void 0, function () {
                var context, license, tier;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext();
                            license = OfficeCore.License.newObject(context);
                            tier = license.getFeatureTier(feature, fallbackValue);
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2, tier.value];
                    }
                });
            });
        }
        license_1.getFeatureTier = getFeatureTier;
        function isFreemiumUpsellEnabled() {
            return __awaiter(this, void 0, void 0, function () {
                var context, license, isFreemiumUpsellEnabled;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext();
                            license = OfficeCore.License.newObject(context);
                            isFreemiumUpsellEnabled = license.isFreemiumUpsellEnabled();
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2, isFreemiumUpsellEnabled.value];
                    }
                });
            });
        }
        license_1.isFreemiumUpsellEnabled = isFreemiumUpsellEnabled;
        function launchUpsellExperience(experienceId) {
            return __awaiter(this, void 0, void 0, function () {
                var context, license;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext();
                            license = OfficeCore.License.newObject(context);
                            license.launchUpsellExperience(experienceId);
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2];
                    }
                });
            });
        }
        license_1.launchUpsellExperience = launchUpsellExperience;
        function onFeatureStateChanged(feature, listener) {
            return __awaiter(this, void 0, void 0, function () {
                var context, license, licenseFeature, removeListener;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext();
                            license = OfficeCore.License.newObject(context);
                            licenseFeature = license.getLicenseFeature(feature);
                            licenseFeature.onStateChanged.add(listener);
                            removeListener = function () {
                                licenseFeature.onStateChanged.remove(listener);
                                return null;
                            };
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2, removeListener];
                    }
                });
            });
        }
        license_1.onFeatureStateChanged = onFeatureStateChanged;
        function getMsaDeviceTicket(resource, policy, options) {
            return __awaiter(this, void 0, void 0, function () {
                var context, license, msaDeviceTicket;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext();
                            license = OfficeCore.License.newObject(context);
                            msaDeviceTicket = license.getMsaDeviceTicket(resource, policy, options);
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2, msaDeviceTicket.value];
                    }
                });
            });
        }
        license_1.getMsaDeviceTicket = getMsaDeviceTicket;
    })(license = Office.license || (Office.license = {}));
})(Office || (Office = {}));
var OfficeCore;
(function (OfficeCore) {
    var _hostName = "Office";
    var _defaultApiSetName = "OfficeSharedApi";
    var _createPropertyObject = OfficeExtension.BatchApiHelper.createPropertyObject;
    var _createMethodObject = OfficeExtension.BatchApiHelper.createMethodObject;
    var _createIndexerObject = OfficeExtension.BatchApiHelper.createIndexerObject;
    var _createRootServiceObject = OfficeExtension.BatchApiHelper.createRootServiceObject;
    var _createTopLevelServiceObject = OfficeExtension.BatchApiHelper.createTopLevelServiceObject;
    var _createChildItemObject = OfficeExtension.BatchApiHelper.createChildItemObject;
    var _invokeMethod = OfficeExtension.BatchApiHelper.invokeMethod;
    var _invokeEnsureUnchanged = OfficeExtension.BatchApiHelper.invokeEnsureUnchanged;
    var _invokeSetProperty = OfficeExtension.BatchApiHelper.invokeSetProperty;
    var _isNullOrUndefined = OfficeExtension.Utility.isNullOrUndefined;
    var _isUndefined = OfficeExtension.Utility.isUndefined;
    var _throwIfNotLoaded = OfficeExtension.Utility.throwIfNotLoaded;
    var _throwIfApiNotSupported = OfficeExtension.Utility.throwIfApiNotSupported;
    var _load = OfficeExtension.Utility.load;
    var _retrieve = OfficeExtension.Utility.retrieve;
    var _toJson = OfficeExtension.Utility.toJson;
    var _fixObjectPathIfNecessary = OfficeExtension.Utility.fixObjectPathIfNecessary;
    var _handleNavigationPropertyResults = OfficeExtension.Utility._handleNavigationPropertyResults;
    var _adjustToDateTime = OfficeExtension.Utility.adjustToDateTime;
    var _processRetrieveResult = OfficeExtension.Utility.processRetrieveResult;
    var _setMockData = OfficeExtension.Utility.setMockData;
    var _calculateApiFlags = OfficeExtension.CommonUtility.calculateApiFlags;
    var _typeSkill = "Skill";
    var Skill = (function (_super) {
        __extends(Skill, _super);
        function Skill() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Skill.prototype, "_className", {
            get: function () {
                return "Skill";
            },
            enumerable: true,
            configurable: true
        });
        Skill.prototype.executeAction = function (paneId, actionId, actionDescriptor) {
            return _invokeMethod(this, "ExecuteAction", 1, [paneId, actionId, actionDescriptor], 4 | 1, 0);
        };
        Skill.prototype.notifyPaneEvent = function (paneId, eventDescriptor) {
            _invokeMethod(this, "NotifyPaneEvent", 1, [paneId, eventDescriptor], 4 | 1, 0);
        };
        Skill.prototype.registerHostSkillEvent = function () {
            _invokeMethod(this, "RegisterHostSkillEvent", 0, [], 1, 0);
        };
        Skill.prototype.testFireEvent = function () {
            _invokeMethod(this, "TestFireEvent", 0, [], 1, 0);
        };
        Skill.prototype.unregisterHostSkillEvent = function () {
            _invokeMethod(this, "UnregisterHostSkillEvent", 0, [], 1, 0);
        };
        Skill.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        Skill.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Skill.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.Skill, context, "Microsoft.SkillApi.Skill", false, 4);
        };
        Object.defineProperty(Skill.prototype, "onHostSkillEvent", {
            get: function () {
                var _this = this;
                if (!this.m_hostSkillEvent) {
                    this.m_hostSkillEvent = new OfficeExtension.GenericEventHandlers(this.context, this, "HostSkillEvent", {
                        eventType: 65538,
                        registerFunc: function () { return _this.registerHostSkillEvent(); },
                        unregisterFunc: function () { return _this.unregisterHostSkillEvent(); },
                        getTargetIdFunc: function () { return ""; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.Skill_HostSkillEvent_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_hostSkillEvent;
            },
            enumerable: true,
            configurable: true
        });
        Skill.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return Skill;
    }(OfficeExtension.ClientObject));
    OfficeCore.Skill = Skill;
    var _CC;
    (function (_CC) {
        function Skill_HostSkillEvent_EventArgsTransform(thisObj, args) {
            var transformedArgs = {
                type: args.type,
                data: args.data
            };
            return transformedArgs;
        }
        _CC.Skill_HostSkillEvent_EventArgsTransform = Skill_HostSkillEvent_EventArgsTransform;
    })(_CC = OfficeCore._CC || (OfficeCore._CC = {}));
    var SkillErrorCodes;
    (function (SkillErrorCodes) {
        SkillErrorCodes["generalException"] = "GeneralException";
    })(SkillErrorCodes = OfficeCore.SkillErrorCodes || (OfficeCore.SkillErrorCodes = {}));
})(OfficeCore || (OfficeCore = {}));
var OfficeCore;
(function (OfficeCore) {
    var _hostName = "OfficeCore";
    var _defaultApiSetName = "TelemetryApi";
    var _createPropertyObject = OfficeExtension.BatchApiHelper.createPropertyObject;
    var _createMethodObject = OfficeExtension.BatchApiHelper.createMethodObject;
    var _createIndexerObject = OfficeExtension.BatchApiHelper.createIndexerObject;
    var _createRootServiceObject = OfficeExtension.BatchApiHelper.createRootServiceObject;
    var _createTopLevelServiceObject = OfficeExtension.BatchApiHelper.createTopLevelServiceObject;
    var _createChildItemObject = OfficeExtension.BatchApiHelper.createChildItemObject;
    var _invokeMethod = OfficeExtension.BatchApiHelper.invokeMethod;
    var _invokeEnsureUnchanged = OfficeExtension.BatchApiHelper.invokeEnsureUnchanged;
    var _invokeSetProperty = OfficeExtension.BatchApiHelper.invokeSetProperty;
    var _isNullOrUndefined = OfficeExtension.Utility.isNullOrUndefined;
    var _isUndefined = OfficeExtension.Utility.isUndefined;
    var _throwIfNotLoaded = OfficeExtension.Utility.throwIfNotLoaded;
    var _throwIfApiNotSupported = OfficeExtension.Utility.throwIfApiNotSupported;
    var _load = OfficeExtension.Utility.load;
    var _retrieve = OfficeExtension.Utility.retrieve;
    var _toJson = OfficeExtension.Utility.toJson;
    var _fixObjectPathIfNecessary = OfficeExtension.Utility.fixObjectPathIfNecessary;
    var _handleNavigationPropertyResults = OfficeExtension.Utility._handleNavigationPropertyResults;
    var _adjustToDateTime = OfficeExtension.Utility.adjustToDateTime;
    var _processRetrieveResult = OfficeExtension.Utility.processRetrieveResult;
    var _setMockData = OfficeExtension.Utility.setMockData;
    var _calculateApiFlags = OfficeExtension.CommonUtility.calculateApiFlags;
    var _typeTelemetryService = "TelemetryService";
    var TelemetryService = (function (_super) {
        __extends(TelemetryService, _super);
        function TelemetryService() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TelemetryService.prototype, "_className", {
            get: function () {
                return "TelemetryService";
            },
            enumerable: true,
            configurable: true
        });
        TelemetryService.prototype.sendCustomerContent = function (telemetryProperties, eventName, eventContract, eventFlags, value) {
            _throwIfApiNotSupported("TelemetryService.sendCustomerContent", "Telemetry", "1.3", _hostName);
            _invokeMethod(this, "SendCustomerContent", 1, [telemetryProperties, eventName, eventContract, eventFlags, value], 4, 0);
        };
        TelemetryService.prototype.sendTelemetryEvent = function (telemetryProperties, eventName, eventContract, eventFlags, value) {
            _invokeMethod(this, "SendTelemetryEvent", 1, [telemetryProperties, eventName, eventContract, eventFlags, value], 4, 0);
        };
        TelemetryService.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        TelemetryService.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        TelemetryService.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.TelemetryService, context, "Microsoft.Telemetry.TelemetryService", false, 4);
        };
        TelemetryService.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return TelemetryService;
    }(OfficeExtension.ClientObject));
    OfficeCore.TelemetryService = TelemetryService;
    var DataFieldType;
    (function (DataFieldType) {
        DataFieldType["unset"] = "Unset";
        DataFieldType["string"] = "String";
        DataFieldType["boolean"] = "Boolean";
        DataFieldType["int64"] = "Int64";
        DataFieldType["double"] = "Double";
    })(DataFieldType = OfficeCore.DataFieldType || (OfficeCore.DataFieldType = {}));
    var TelemetryErrorCodes;
    (function (TelemetryErrorCodes) {
        TelemetryErrorCodes["generalException"] = "GeneralException";
    })(TelemetryErrorCodes = OfficeCore.TelemetryErrorCodes || (OfficeCore.TelemetryErrorCodes = {}));
})(OfficeCore || (OfficeCore = {}));
var OfficeFirstPartyAuth;
(function (OfficeFirstPartyAuth) {
    var WebAuthReplyUrlsStorageKey = "officeWebAuthReplyUrls";
    var loaded = false;
    OfficeFirstPartyAuth.authFlow = "implicit";
    OfficeFirstPartyAuth.autoPopup = false;
    OfficeFirstPartyAuth.debugging = false;
    OfficeFirstPartyAuth.delay = 0;
    function load(replyUrl) {
        return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
            if (OSF.WebAuth && OSF._OfficeAppFactory.getHostInfo().hostPlatform == "web") {
                var retrievedAuthContext = false;
                var errorMessage;
                try {
                    if (!Office || !Office.context || !Office.context.webAuth) {
                        reject({
                            code: "GetAuthContextAsyncMissing",
                            message: (typeof (Strings) !== 'undefined' && Strings.OfficeOM.L_ImplicitGetAuthContextMissing) ? Strings.OfficeOM.L_ImplicitGetAuthContextMissing : ""
                        });
                        return;
                    }
                    Office.context.webAuth.getAuthContextAsync(function (result) {
                        if (result.status === "succeeded") {
                            retrievedAuthContext = true;
                            var authContext = result.value;
                            if (!authContext || authContext.isAnonymous) {
                                reject({
                                    code: "CannotGetAuthContext",
                                    message: (typeof (Strings) !== 'undefined' && Strings.OfficeOM.L_ImplicitGetAuthContextMissing) ? Strings.OfficeOM.L_ImplicitGetAuthContextMissing : ""
                                });
                                return;
                            }
                            var isMsa = authContext.authorityType.toLowerCase() === 'msa';
                            OSF.WebAuth.config = {
                                authFlow: OfficeFirstPartyAuth.authFlow,
                                authVersion: (OfficeFirstPartyAuth.authVersion) ? OfficeFirstPartyAuth.authVersion : null,
                                loadDelay: OfficeFirstPartyAuth.delay,
                                debugging: OfficeFirstPartyAuth.debugging,
                                authority: (OfficeFirstPartyAuth.authorityOverride) ? OfficeFirstPartyAuth.authorityOverride : authContext.authority,
                                idp: authContext.authorityType.toLowerCase(),
                                appIds: [isMsa ? (authContext.msaAppId) ? authContext.msaAppId : authContext.appId : authContext.appId],
                                redirectUri: (replyUrl) ? replyUrl : null,
                                upn: authContext.upn,
                                telemetryInstance: 'otel',
                                autoPopup: OfficeFirstPartyAuth.autoPopup,
                                enableConsoleLogging: OfficeFirstPartyAuth.debugging
                            };
                            OSF.WebAuth.load().then(function (loadResult) {
                                loaded = true;
                                logLoadEvent(loadResult, true);
                                resolve();
                            })["catch"](function (loadError) {
                                logLoadEvent(loadError, false);
                                reject({
                                    code: "PackageNotLoaded",
                                    message: loadError ? loadError : (typeof (Strings) !== 'undefined' && Strings.OfficeOM.L_ImplicitNotLoaded) ? Strings.OfficeOM.L_ImplicitNotLoaded : ""
                                });
                            });
                            var finalReplyUrl = (replyUrl) ? replyUrl : window.location.href.split("?")[0];
                            var replyUrls = sessionStorage.getItem(WebAuthReplyUrlsStorageKey);
                            if (replyUrls || replyUrls === "") {
                                replyUrls = finalReplyUrl;
                            }
                            else {
                                replyUrls += ", " + finalReplyUrl;
                            }
                            if (replyUrls)
                                sessionStorage.setItem(WebAuthReplyUrlsStorageKey, replyUrls);
                        }
                        else {
                            OSF.WebAuth.config = null;
                            errorMessage = JSON.stringify(result);
                            reject({
                                code: "CannotGetAuthContext",
                                message: errorMessage
                            });
                        }
                    });
                }
                catch (e) {
                    errorMessage = e;
                    OSF.WebAuth.config = null;
                    OSF.WebAuth.load().then(function () {
                        resolve();
                    })["catch"](function () {
                        reject({
                            code: retrievedAuthContext ? "CannotGetAuthContext" : "FailedToLoad",
                            message: errorMessage
                        });
                    });
                }
            }
            else {
                resolve();
            }
        });
    }
    OfficeFirstPartyAuth.load = load;
    function getAccessToken(options, behaviorOption) {
        return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
            if (OSF._OfficeAppFactory.getHostInfo().hostPlatform == "web") {
                Office.context.webAuth.getAuthContextAsync(function (result) {
                    var supportsAuthToken = false;
                    if (result.status === "succeeded") {
                        var authContext = result.value;
                        if (authContext.supportsAuthToken) {
                            supportsAuthToken = true;
                        }
                    }
                    if (!supportsAuthToken) {
                        if (OSF.WebAuth && loaded) {
                            if (OSF.WebAuth.config.appIds[0]) {
                                OSF.WebAuth.getToken(options.resource, OSF.WebAuth.config.appIds[0], OSF._OfficeAppFactory.getHostInfo().osfControlAppCorrelationId, (behaviorOption && behaviorOption.popup) ? behaviorOption.popup : null).then(function (result) {
                                    logAcquireEvent(result, true, options.resource, (behaviorOption && behaviorOption.popup) ? behaviorOption.popup : null);
                                    resolve({
                                        accessToken: result.Token,
                                        tokenIdenityType: (OSF.WebAuth.config.idp.toLowerCase() == "msa")
                                            ? OfficeCore.IdentityType.microsoftAccount
                                            : OfficeCore.IdentityType.organizationAccount
                                    });
                                })["catch"](function (result) {
                                    logAcquireEvent(result, false, options.resource, (behaviorOption && behaviorOption.popup) ? behaviorOption.popup : null, result.ErrorCode);
                                    reject({ code: result.ErrorCode, message: result.ErrorMessage });
                                });
                            }
                        }
                        else {
                            logUnexpectedAcquireEvent(loaded, OSF.WebAuth.loadAttempts);
                        }
                    }
                    else {
                        var context = new OfficeCore.RequestContext();
                        var auth = OfficeCore.AuthenticationService.newObject(context);
                        context._customData = "WacPartition";
                        var result_1 = auth.getAccessToken(options, null);
                        context.sync().then(function () {
                            resolve(result_1.value);
                        });
                    }
                });
            }
            else {
                var context_1 = new OfficeCore.RequestContext();
                var auth_1 = OfficeCore.AuthenticationService.newObject(context_1);
                var handler_1 = auth_1.onTokenReceived.add(function (arg) {
                    if (!OfficeExtension.CoreUtility.isNullOrUndefined(arg)) {
                        handler_1.remove();
                        context_1.sync()["catch"](function () {
                        });
                        if (arg.code == 0) {
                            resolve(arg.tokenValue);
                        }
                        else {
                            if (OfficeExtension.CoreUtility.isNullOrUndefined(arg.errorInfo)) {
                                reject({ code: arg.code });
                            }
                            else {
                                try {
                                    reject(JSON.parse(arg.errorInfo));
                                }
                                catch (e) {
                                    reject({ code: arg.code, message: arg.errorInfo });
                                }
                            }
                        }
                    }
                    return null;
                });
                context_1.sync()
                    .then(function () {
                    var apiResult = auth_1.getAccessToken(options, auth_1._targetId);
                    return context_1.sync()
                        .then(function () {
                        if (OfficeExtension.CoreUtility.isNullOrUndefined(apiResult.value)) {
                            return null;
                        }
                        var tokenValue = apiResult.value.accessToken;
                        if (!OfficeExtension.CoreUtility.isNullOrUndefined(tokenValue)) {
                            resolve(apiResult.value);
                        }
                    });
                })["catch"](function (e) {
                    reject(e);
                });
            }
        });
    }
    OfficeFirstPartyAuth.getAccessToken = getAccessToken;
    function getPrimaryIdentityInfo() {
        var context = new OfficeCore.RequestContext();
        var auth = OfficeCore.AuthenticationService.newObject(context);
        context._customData = "WacPartition";
        var result = auth.getPrimaryIdentityInfo();
        return context.sync().then(function () { return result.value; });
    }
    OfficeFirstPartyAuth.getPrimaryIdentityInfo = getPrimaryIdentityInfo;
    function getIdentities() {
        var context = new OfficeCore.RequestContext();
        var auth_service = OfficeCore.AuthenticationService.newObject(context);
        var result = auth_service.getIdentities();
        return context.sync().then(function () { return result.value; });
    }
    OfficeFirstPartyAuth.getIdentities = getIdentities;
    function logLoadEvent(result, succeeded) {
        if (OfficeFirstPartyAuth.debugging) {
            console.log("Logging WebAuthJs load event:" + succeeded);
        }
        if (typeof OTel !== "undefined") {
            OTel.OTelLogger.onTelemetryLoaded(function () {
                var telemetryData = [
                    oteljs.makeStringDataField('IdentityProvider', OSF.WebAuth.config.idp),
                    oteljs.makeStringDataField('AppId', OSF.WebAuth.config.appIds[0]),
                    oteljs.makeBooleanDataField('Js', (typeof Implicit !== "undefined" || typeof BrowserAuth !== "undefined") ? true : false),
                    oteljs.makeBooleanDataField('Result', succeeded)
                ];
                if (OSF.WebAuth.config.telemetry) {
                    for (var key in OSF.WebAuth.config.telemetry) {
                        telemetryData.push(oteljs.makeStringDataField(key, OSF.WebAuth.config.telemetry[key]));
                    }
                }
                if (result && result.Telemetry) {
                    for (var key in result.Telemetry) {
                        if (!result.Telemetry[key]) {
                            continue;
                        }
                        switch (key) {
                            case 'succeeded':
                                telemetryData.push(oteljs.makeBooleanDataField(key, result.Telemetry[key]));
                                break;
                            case 'loadedApplicationCount':
                                telemetryData.push(oteljs.makeInt64DataField(key, result.Telemetry[key]));
                                break;
                            case 'timeToLoad':
                                telemetryData.push(oteljs.makeInt64DataField(key, result.Telemetry[key]));
                                break;
                            default:
                                telemetryData.push(oteljs.makeStringDataField(key, result.Telemetry[key]));
                        }
                    }
                }
                OTel.OTelLogger.sendTelemetryEvent({
                    eventName: "Office.Extensibility.OfficeJs.OfficeFirstPartyAuth.Load",
                    dataFields: telemetryData,
                    eventFlags: {
                        dataCategories: oteljs.DataCategories.ProductServiceUsage
                    }
                });
            });
        }
    }
    function logAcquireEvent(result, succeeded, target, popup, message) {
        if (OfficeFirstPartyAuth.debugging) {
            console.log("Logging WebAuthJs acquire event");
        }
        if (typeof OTel !== "undefined") {
            OTel.OTelLogger.onTelemetryLoaded(function () {
                var telemetryData = [
                    oteljs.makeStringDataField('IdentityProvider', OSF.WebAuth.config.idp),
                    oteljs.makeStringDataField('AppId', OSF.WebAuth.config.appIds[0]),
                    oteljs.makeStringDataField('Target', target),
                    oteljs.makeBooleanDataField('Popup', (typeof popup === "boolean") ? popup : false),
                    oteljs.makeBooleanDataField('Result', succeeded),
                    oteljs.makeStringDataField('Error', message)
                ];
                if (OSF.WebAuth.config.telemetry) {
                    for (var key in OSF.WebAuth.config.telemetry) {
                        telemetryData.push(oteljs.makeStringDataField(key, OSF.WebAuth.config.telemetry[key]));
                    }
                }
                if (result && result.Telemetry) {
                    for (var key in result.Telemetry) {
                        if (!result.Telemetry[key]) {
                            continue;
                        }
                        switch (key) {
                            case 'succeeded':
                                telemetryData.push(oteljs.makeBooleanDataField(key, result.Telemetry[key]));
                                break;
                            case 'timeToGetToken':
                                telemetryData.push(oteljs.makeInt64DataField(key, result.Telemetry[key]));
                                break;
                            default:
                                telemetryData.push(oteljs.makeStringDataField(key, result.Telemetry[key]));
                        }
                    }
                }
                OTel.OTelLogger.sendTelemetryEvent({
                    eventName: "Office.Extensibility.OfficeJs.OfficeFirstPartyAuth.GetAccessToken",
                    dataFields: telemetryData,
                    eventFlags: {
                        dataCategories: oteljs.DataCategories.ProductServiceUsage
                    }
                });
            });
        }
    }
    function logUnexpectedAcquireEvent(loadResult, loadAttempts) {
        if (OfficeFirstPartyAuth.debugging) {
            console.log("Logging WebAuthJs unexpected acquire event");
        }
        if (typeof OTel !== "undefined") {
            OTel.OTelLogger.onTelemetryLoaded(function () {
                var telemetryData = [
                    oteljs.makeBooleanDataField('Loaded', loadResult),
                    oteljs.makeInt64DataField('LoadAttempts', loadAttempts)
                ];
                OTel.OTelLogger.sendTelemetryEvent({
                    eventName: "Office.Extensibility.OfficeJs.OfficeFirstPartyAuth.UnexpectedAcquire",
                    dataFields: telemetryData,
                    eventFlags: {
                        dataCategories: oteljs.DataCategories.ProductServiceUsage
                    }
                });
            });
        }
    }
    function loadWebAuthForReplyPage() {
        try {
            if (typeof (window) === "undefined" || !window.sessionStorage) {
                return;
            }
            var webAuthRedirectUrls = sessionStorage.getItem(WebAuthReplyUrlsStorageKey);
            if (webAuthRedirectUrls !== null && webAuthRedirectUrls.indexOf(window.location.origin + window.location.pathname) !== -1) {
                load();
            }
        }
        catch (ex) {
            console.error(ex);
        }
    }
    if (typeof (window) !== "undefined" && window.OSF) {
        loadWebAuthForReplyPage();
    }
})(OfficeFirstPartyAuth || (OfficeFirstPartyAuth = {}));
var OfficeCore;
(function (OfficeCore) {
    var _hostName = "Office";
    var _defaultApiSetName = "OfficeSharedApi";
    var _createPropertyObject = OfficeExtension.BatchApiHelper.createPropertyObject;
    var _createMethodObject = OfficeExtension.BatchApiHelper.createMethodObject;
    var _createIndexerObject = OfficeExtension.BatchApiHelper.createIndexerObject;
    var _createRootServiceObject = OfficeExtension.BatchApiHelper.createRootServiceObject;
    var _createTopLevelServiceObject = OfficeExtension.BatchApiHelper.createTopLevelServiceObject;
    var _createChildItemObject = OfficeExtension.BatchApiHelper.createChildItemObject;
    var _invokeMethod = OfficeExtension.BatchApiHelper.invokeMethod;
    var _invokeEnsureUnchanged = OfficeExtension.BatchApiHelper.invokeEnsureUnchanged;
    var _invokeSetProperty = OfficeExtension.BatchApiHelper.invokeSetProperty;
    var _isNullOrUndefined = OfficeExtension.Utility.isNullOrUndefined;
    var _isUndefined = OfficeExtension.Utility.isUndefined;
    var _throwIfNotLoaded = OfficeExtension.Utility.throwIfNotLoaded;
    var _throwIfApiNotSupported = OfficeExtension.Utility.throwIfApiNotSupported;
    var _load = OfficeExtension.Utility.load;
    var _retrieve = OfficeExtension.Utility.retrieve;
    var _toJson = OfficeExtension.Utility.toJson;
    var _fixObjectPathIfNecessary = OfficeExtension.Utility.fixObjectPathIfNecessary;
    var _handleNavigationPropertyResults = OfficeExtension.Utility._handleNavigationPropertyResults;
    var _adjustToDateTime = OfficeExtension.Utility.adjustToDateTime;
    var _processRetrieveResult = OfficeExtension.Utility.processRetrieveResult;
    var _setMockData = OfficeExtension.Utility.setMockData;
    var _calculateApiFlags = OfficeExtension.CommonUtility.calculateApiFlags;
    var IdentityType;
    (function (IdentityType) {
        IdentityType["organizationAccount"] = "OrganizationAccount";
        IdentityType["microsoftAccount"] = "MicrosoftAccount";
        IdentityType["unsupported"] = "Unsupported";
    })(IdentityType = OfficeCore.IdentityType || (OfficeCore.IdentityType = {}));
    var _typeAuthenticationService = "AuthenticationService";
    var AuthenticationService = (function (_super) {
        __extends(AuthenticationService, _super);
        function AuthenticationService() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(AuthenticationService.prototype, "_className", {
            get: function () {
                return "AuthenticationService";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AuthenticationService.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["roamingSettings"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AuthenticationService.prototype, "roamingSettings", {
            get: function () {
                if (!this._R) {
                    this._R = _createPropertyObject(OfficeCore.RoamingSettingCollection, this, "RoamingSettings", false, 4);
                }
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        AuthenticationService.prototype.getAccessToken = function (tokenParameters, targetId) {
            return _invokeMethod(this, "GetAccessToken", 1, [tokenParameters, targetId], 4 | 1, 0);
        };
        AuthenticationService.prototype.getIdentities = function () {
            _throwIfApiNotSupported("AuthenticationService.getIdentities", "FirstPartyAuthentication", "1.3", _hostName);
            return _invokeMethod(this, "GetIdentities", 1, [], 4 | 1, 0);
        };
        AuthenticationService.prototype.getPrimaryIdentityInfo = function () {
            _throwIfApiNotSupported("AuthenticationService.getPrimaryIdentityInfo", "FirstPartyAuthentication", "1.2", _hostName);
            return _invokeMethod(this, "GetPrimaryIdentityInfo", 1, [], 4 | 1, 0);
        };
        AuthenticationService.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["roamingSettings", "RoamingSettings"]);
        };
        AuthenticationService.prototype.load = function (options) {
            return _load(this, options);
        };
        AuthenticationService.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        AuthenticationService.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        AuthenticationService.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.AuthenticationService, context, "Microsoft.Authentication.AuthenticationService", false, 4);
        };
        Object.defineProperty(AuthenticationService.prototype, "onTokenReceived", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("AuthenticationService.onTokenReceived", "FirstPartyAuthentication", "1.2", _hostName);
                if (!this.m_tokenReceived) {
                    this.m_tokenReceived = new OfficeExtension.GenericEventHandlers(this.context, this, "TokenReceived", {
                        eventType: 3001,
                        registerFunc: function () { return OfficeExtension.Utility._createPromiseFromResult(null); },
                        unregisterFunc: function () { return OfficeExtension.Utility._createPromiseFromResult(null); },
                        getTargetIdFunc: function () { return _this._targetId; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.AuthenticationService_TokenReceived_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_tokenReceived;
            },
            enumerable: true,
            configurable: true
        });
        AuthenticationService.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return AuthenticationService;
    }(OfficeExtension.ClientObject));
    OfficeCore.AuthenticationService = AuthenticationService;
    var AuthenticationServiceCustom = (function () {
        function AuthenticationServiceCustom() {
        }
        Object.defineProperty(AuthenticationServiceCustom.prototype, "_targetId", {
            get: function () {
                if (this.m_targetId == undefined) {
                    if (typeof (OSF) !== 'undefined' && OSF.OUtil) {
                        this.m_targetId = OSF.OUtil.Guid.generateNewGuid();
                    }
                    else {
                        this.m_targetId = "" + this.context._nextId();
                    }
                }
                return this.m_targetId;
            },
            enumerable: true,
            configurable: true
        });
        return AuthenticationServiceCustom;
    }());
    OfficeCore.AuthenticationServiceCustom = AuthenticationServiceCustom;
    OfficeExtension.Utility.applyMixin(AuthenticationService, AuthenticationServiceCustom);
    var _CC;
    (function (_CC) {
        function AuthenticationService_TokenReceived_EventArgsTransform(thisObj, args) {
            var value = args;
            var newArgs = {
                tokenValue: value.tokenValue,
                code: value.code,
                errorInfo: value.errorInfo
            };
            return newArgs;
        }
        _CC.AuthenticationService_TokenReceived_EventArgsTransform = AuthenticationService_TokenReceived_EventArgsTransform;
    })(_CC = OfficeCore._CC || (OfficeCore._CC = {}));
    var _typeRoamingSetting = "RoamingSetting";
    var RoamingSetting = (function (_super) {
        __extends(RoamingSetting, _super);
        function RoamingSetting() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RoamingSetting.prototype, "_className", {
            get: function () {
                return "RoamingSetting";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RoamingSetting.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "value"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RoamingSetting.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Value"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RoamingSetting.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RoamingSetting.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeRoamingSetting, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RoamingSetting.prototype, "value", {
            get: function () {
                _throwIfNotLoaded("value", this._V, _typeRoamingSetting, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Value", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        RoamingSetting.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["value"], [], []);
        };
        RoamingSetting.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        RoamingSetting.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Value"])) {
                this._V = obj["Value"];
            }
        };
        RoamingSetting.prototype.load = function (options) {
            return _load(this, options);
        };
        RoamingSetting.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RoamingSetting.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        RoamingSetting.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RoamingSetting.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I,
                "value": this._V
            }, {});
        };
        RoamingSetting.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RoamingSetting.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RoamingSetting;
    }(OfficeExtension.ClientObject));
    OfficeCore.RoamingSetting = RoamingSetting;
    var _typeRoamingSettingCollection = "RoamingSettingCollection";
    var RoamingSettingCollection = (function (_super) {
        __extends(RoamingSettingCollection, _super);
        function RoamingSettingCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RoamingSettingCollection.prototype, "_className", {
            get: function () {
                return "RoamingSettingCollection";
            },
            enumerable: true,
            configurable: true
        });
        RoamingSettingCollection.prototype.getItem = function (id) {
            return _createMethodObject(OfficeCore.RoamingSetting, this, "GetItem", 1, [id], false, false, null, 4);
        };
        RoamingSettingCollection.prototype.getItemOrNullObject = function (id) {
            return _createMethodObject(OfficeCore.RoamingSetting, this, "GetItemOrNullObject", 1, [id], false, false, null, 4);
        };
        RoamingSettingCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        RoamingSettingCollection.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RoamingSettingCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return RoamingSettingCollection;
    }(OfficeExtension.ClientObject));
    OfficeCore.RoamingSettingCollection = RoamingSettingCollection;
    var ServiceProvider;
    (function (ServiceProvider) {
        ServiceProvider["ariaBrowserPipeUrl"] = "AriaBrowserPipeUrl";
        ServiceProvider["ariaUploadUrl"] = "AriaUploadUrl";
        ServiceProvider["ariaVNextUploadUrl"] = "AriaVNextUploadUrl";
        ServiceProvider["lokiAutoDiscoverUrl"] = "LokiAutoDiscoverUrl";
    })(ServiceProvider = OfficeCore.ServiceProvider || (OfficeCore.ServiceProvider = {}));
    var _typeServiceUrlProvider = "ServiceUrlProvider";
    var ServiceUrlProvider = (function (_super) {
        __extends(ServiceUrlProvider, _super);
        function ServiceUrlProvider() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ServiceUrlProvider.prototype, "_className", {
            get: function () {
                return "ServiceUrlProvider";
            },
            enumerable: true,
            configurable: true
        });
        ServiceUrlProvider.prototype.getServiceUrl = function (emailAddress, provider) {
            return _invokeMethod(this, "GetServiceUrl", 1, [emailAddress, provider], 4, 0);
        };
        ServiceUrlProvider.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        ServiceUrlProvider.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ServiceUrlProvider.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.ServiceUrlProvider, context, "Microsoft.DesktopCompliance.ServiceUrlProvider", false, 4);
        };
        ServiceUrlProvider.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return ServiceUrlProvider;
    }(OfficeExtension.ClientObject));
    OfficeCore.ServiceUrlProvider = ServiceUrlProvider;
    var _typeLinkedIn = "LinkedIn";
    var LinkedIn = (function (_super) {
        __extends(LinkedIn, _super);
        function LinkedIn() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(LinkedIn.prototype, "_className", {
            get: function () {
                return "LinkedIn";
            },
            enumerable: true,
            configurable: true
        });
        LinkedIn.prototype.isEnabledForOffice = function () {
            return _invokeMethod(this, "IsEnabledForOffice", 1, [], 4, 0);
        };
        LinkedIn.prototype.recordLinkedInSettingsCompliance = function (featureName, isEnabled) {
            _invokeMethod(this, "RecordLinkedInSettingsCompliance", 0, [featureName, isEnabled], 0, 0);
        };
        LinkedIn.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        LinkedIn.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        LinkedIn.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.LinkedIn, context, "Microsoft.DesktopCompliance.LinkedIn", false, 4);
        };
        LinkedIn.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return LinkedIn;
    }(OfficeExtension.ClientObject));
    OfficeCore.LinkedIn = LinkedIn;
    var _typeNetworkUsage = "NetworkUsage";
    var NetworkUsage = (function (_super) {
        __extends(NetworkUsage, _super);
        function NetworkUsage() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(NetworkUsage.prototype, "_className", {
            get: function () {
                return "NetworkUsage";
            },
            enumerable: true,
            configurable: true
        });
        NetworkUsage.prototype.isInDisconnectedMode = function () {
            return _invokeMethod(this, "IsInDisconnectedMode", 1, [], 4, 0);
        };
        NetworkUsage.prototype.isInOnlineMode = function () {
            return _invokeMethod(this, "IsInOnlineMode", 1, [], 4, 0);
        };
        NetworkUsage.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        NetworkUsage.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        NetworkUsage.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.NetworkUsage, context, "Microsoft.DesktopCompliance.NetworkUsage", false, 4);
        };
        NetworkUsage.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return NetworkUsage;
    }(OfficeExtension.ClientObject));
    OfficeCore.NetworkUsage = NetworkUsage;
    var _typeDynamicRibbon = "DynamicRibbon";
    var DynamicRibbon = (function (_super) {
        __extends(DynamicRibbon, _super);
        function DynamicRibbon() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(DynamicRibbon.prototype, "_className", {
            get: function () {
                return "DynamicRibbon";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DynamicRibbon.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["buttons"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DynamicRibbon.prototype, "buttons", {
            get: function () {
                if (!this._B) {
                    this._B = _createPropertyObject(OfficeCore.RibbonButtonCollection, this, "Buttons", true, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        DynamicRibbon.prototype.executeRequestCreate = function (jsonCreate) {
            _throwIfApiNotSupported("DynamicRibbon.executeRequestCreate", "DynamicRibbon", "1.2", _hostName);
            _invokeMethod(this, "ExecuteRequestCreate", 1, [jsonCreate], 4, 0);
        };
        DynamicRibbon.prototype.executeRequestUpdate = function (jsonUpdate) {
            _invokeMethod(this, "ExecuteRequestUpdate", 1, [jsonUpdate], 4, 0);
        };
        DynamicRibbon.prototype.getButton = function (id) {
            return _createMethodObject(OfficeCore.RibbonButton, this, "GetButton", 1, [id], false, false, null, 4);
        };
        DynamicRibbon.prototype.getTab = function (id) {
            return _createMethodObject(OfficeCore.RibbonTab, this, "GetTab", 1, [id], false, false, null, 4);
        };
        DynamicRibbon.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["buttons", "Buttons"]);
        };
        DynamicRibbon.prototype.load = function (options) {
            return _load(this, options);
        };
        DynamicRibbon.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        DynamicRibbon.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        DynamicRibbon.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.DynamicRibbon, context, "Microsoft.DynamicRibbon.DynamicRibbon", false, 4);
        };
        DynamicRibbon.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "buttons": this._B
            });
        };
        return DynamicRibbon;
    }(OfficeExtension.ClientObject));
    OfficeCore.DynamicRibbon = DynamicRibbon;
    var _typeRibbonTab = "RibbonTab";
    var RibbonTab = (function (_super) {
        __extends(RibbonTab, _super);
        function RibbonTab() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RibbonTab.prototype, "_className", {
            get: function () {
                return "RibbonTab";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonTab.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonTab.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonTab.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeRibbonTab, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        RibbonTab.prototype.setVisibility = function (visibility) {
            _invokeMethod(this, "SetVisibility", 0, [visibility], 0, 0);
        };
        RibbonTab.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
        };
        RibbonTab.prototype.load = function (options) {
            return _load(this, options);
        };
        RibbonTab.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RibbonTab.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        RibbonTab.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RibbonTab.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I
            }, {});
        };
        RibbonTab.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RibbonTab.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RibbonTab;
    }(OfficeExtension.ClientObject));
    OfficeCore.RibbonTab = RibbonTab;
    var _typeRibbonButton = "RibbonButton";
    var RibbonButton = (function (_super) {
        __extends(RibbonButton, _super);
        function RibbonButton() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RibbonButton.prototype, "_className", {
            get: function () {
                return "RibbonButton";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonButton.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "enabled", "label"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonButton.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Enabled", "Label"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonButton.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonButton.prototype, "enabled", {
            get: function () {
                _throwIfNotLoaded("enabled", this._E, _typeRibbonButton, this._isNull);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "Enabled", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonButton.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeRibbonButton, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonButton.prototype, "label", {
            get: function () {
                _throwIfNotLoaded("label", this._L, _typeRibbonButton, this._isNull);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        RibbonButton.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["enabled"], [], []);
        };
        RibbonButton.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        RibbonButton.prototype.setEnabled = function (enabled) {
            _invokeMethod(this, "SetEnabled", 0, [enabled], 0, 0);
        };
        RibbonButton.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Enabled"])) {
                this._E = obj["Enabled"];
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Label"])) {
                this._L = obj["Label"];
            }
        };
        RibbonButton.prototype.load = function (options) {
            return _load(this, options);
        };
        RibbonButton.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RibbonButton.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        RibbonButton.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RibbonButton.prototype.toJSON = function () {
            return _toJson(this, {
                "enabled": this._E,
                "id": this._I,
                "label": this._L
            }, {});
        };
        RibbonButton.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RibbonButton.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RibbonButton;
    }(OfficeExtension.ClientObject));
    OfficeCore.RibbonButton = RibbonButton;
    var _typeRibbonButtonCollection = "RibbonButtonCollection";
    var RibbonButtonCollection = (function (_super) {
        __extends(RibbonButtonCollection, _super);
        function RibbonButtonCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RibbonButtonCollection.prototype, "_className", {
            get: function () {
                return "RibbonButtonCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonButtonCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RibbonButtonCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeRibbonButtonCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        RibbonButtonCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        RibbonButtonCollection.prototype.getItem = function (key) {
            return _createIndexerObject(OfficeCore.RibbonButton, this, [key]);
        };
        RibbonButtonCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(OfficeCore.RibbonButton, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        RibbonButtonCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        RibbonButtonCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RibbonButtonCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(OfficeCore.RibbonButton, true, _this, childItemData, index); });
        };
        RibbonButtonCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        RibbonButtonCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(OfficeCore.RibbonButton, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return RibbonButtonCollection;
    }(OfficeExtension.ClientObject));
    OfficeCore.RibbonButtonCollection = RibbonButtonCollection;
    var TimeStringFormat;
    (function (TimeStringFormat) {
        TimeStringFormat["shortTime"] = "ShortTime";
        TimeStringFormat["longTime"] = "LongTime";
        TimeStringFormat["shortDate"] = "ShortDate";
        TimeStringFormat["longDate"] = "LongDate";
    })(TimeStringFormat = OfficeCore.TimeStringFormat || (OfficeCore.TimeStringFormat = {}));
    var _typeLocaleApi = "LocaleApi";
    var LocaleApi = (function (_super) {
        __extends(LocaleApi, _super);
        function LocaleApi() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(LocaleApi.prototype, "_className", {
            get: function () {
                return "LocaleApi";
            },
            enumerable: true,
            configurable: true
        });
        LocaleApi.prototype.formatDateTimeString = function (localeName, value, format) {
            return _invokeMethod(this, "FormatDateTimeString", 1, [localeName, value, format], 4, 0);
        };
        LocaleApi.prototype.getLocaleDateTimeFormattingInfo = function (localeName) {
            return _invokeMethod(this, "GetLocaleDateTimeFormattingInfo", 1, [localeName], 4, 0);
        };
        LocaleApi.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        LocaleApi.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        LocaleApi.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.LocaleApi, context, "Microsoft.LocaleApi.LocaleApi", false, 4);
        };
        LocaleApi.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return LocaleApi;
    }(OfficeExtension.ClientObject));
    OfficeCore.LocaleApi = LocaleApi;
    var _typeComment = "Comment";
    var Comment = (function (_super) {
        __extends(Comment, _super);
        function Comment() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Comment.prototype, "_className", {
            get: function () {
                return "Comment";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "text", "created", "level", "resolved", "author", "mentions"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Text", "Created", "Level", "Resolved", "Author", "Mentions"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, false, false, true, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["parent", "parentOrNullObject", "replies"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "parent", {
            get: function () {
                if (!this._P) {
                    this._P = _createPropertyObject(OfficeCore.Comment, this, "Parent", false, 4);
                }
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "parentOrNullObject", {
            get: function () {
                if (!this._Pa) {
                    this._Pa = _createPropertyObject(OfficeCore.Comment, this, "ParentOrNullObject", false, 4);
                }
                return this._Pa;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "replies", {
            get: function () {
                if (!this._R) {
                    this._R = _createPropertyObject(OfficeCore.CommentCollection, this, "Replies", true, 4);
                }
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "author", {
            get: function () {
                _throwIfNotLoaded("author", this._A, _typeComment, this._isNull);
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "created", {
            get: function () {
                _throwIfNotLoaded("created", this._C, _typeComment, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeComment, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "level", {
            get: function () {
                _throwIfNotLoaded("level", this._L, _typeComment, this._isNull);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "mentions", {
            get: function () {
                _throwIfNotLoaded("mentions", this._M, _typeComment, this._isNull);
                return this._M;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "resolved", {
            get: function () {
                _throwIfNotLoaded("resolved", this._Re, _typeComment, this._isNull);
                return this._Re;
            },
            set: function (value) {
                this._Re = value;
                _invokeSetProperty(this, "Resolved", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "text", {
            get: function () {
                _throwIfNotLoaded("text", this._T, _typeComment, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Text", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Comment.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["text", "resolved"], [], [
                "parent",
                "parentOrNullObject",
                "replies"
            ]);
        };
        Comment.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Comment.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        Comment.prototype.getParentOrSelf = function () {
            return _createMethodObject(OfficeCore.Comment, this, "GetParentOrSelf", 1, [], false, false, null, 4);
        };
        Comment.prototype.getRichText = function (format) {
            return _invokeMethod(this, "GetRichText", 1, [format], 4, 0);
        };
        Comment.prototype.reply = function (text, format) {
            return _createMethodObject(OfficeCore.Comment, this, "Reply", 0, [text, format], false, false, null, 0);
        };
        Comment.prototype.setRichText = function (text, format) {
            return _invokeMethod(this, "SetRichText", 0, [text, format], 0, 0);
        };
        Comment.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Author"])) {
                this._A = obj["Author"];
            }
            if (!_isUndefined(obj["Created"])) {
                this._C = _adjustToDateTime(obj["Created"]);
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Level"])) {
                this._L = obj["Level"];
            }
            if (!_isUndefined(obj["Mentions"])) {
                this._M = obj["Mentions"];
            }
            if (!_isUndefined(obj["Resolved"])) {
                this._Re = obj["Resolved"];
            }
            if (!_isUndefined(obj["Text"])) {
                this._T = obj["Text"];
            }
            _handleNavigationPropertyResults(this, obj, ["parent", "Parent", "parentOrNullObject", "ParentOrNullObject", "replies", "Replies"]);
        };
        Comment.prototype.load = function (options) {
            return _load(this, options);
        };
        Comment.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Comment.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Comment.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            if (!_isUndefined(obj["Created"])) {
                obj["created"] = _adjustToDateTime(obj["created"]);
            }
            _processRetrieveResult(this, value, result);
        };
        Comment.prototype.toJSON = function () {
            return _toJson(this, {
                "author": this._A,
                "created": this._C,
                "id": this._I,
                "level": this._L,
                "mentions": this._M,
                "resolved": this._Re,
                "text": this._T
            }, {
                "replies": this._R
            });
        };
        Comment.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Comment.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Comment;
    }(OfficeExtension.ClientObject));
    OfficeCore.Comment = Comment;
    var _typeCommentCollection = "CommentCollection";
    var CommentCollection = (function (_super) {
        __extends(CommentCollection, _super);
        function CommentCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CommentCollection.prototype, "_className", {
            get: function () {
                return "CommentCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeCommentCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        CommentCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        CommentCollection.prototype.getItem = function (id) {
            return _createIndexerObject(OfficeCore.Comment, this, [id]);
        };
        CommentCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(OfficeCore.Comment, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        CommentCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        CommentCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CommentCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(OfficeCore.Comment, true, _this, childItemData, index); });
        };
        CommentCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        CommentCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(OfficeCore.Comment, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return CommentCollection;
    }(OfficeExtension.ClientObject));
    OfficeCore.CommentCollection = CommentCollection;
    var CommentTextFormat;
    (function (CommentTextFormat) {
        CommentTextFormat["plain"] = "Plain";
        CommentTextFormat["markdown"] = "Markdown";
        CommentTextFormat["delta"] = "Delta";
    })(CommentTextFormat = OfficeCore.CommentTextFormat || (OfficeCore.CommentTextFormat = {}));
    var PersonaCardPerfPoint;
    (function (PersonaCardPerfPoint) {
        PersonaCardPerfPoint["placeHolderRendered"] = "PlaceHolderRendered";
        PersonaCardPerfPoint["initialCardRendered"] = "InitialCardRendered";
    })(PersonaCardPerfPoint = OfficeCore.PersonaCardPerfPoint || (OfficeCore.PersonaCardPerfPoint = {}));
    var UnifiedCommunicationAvailability;
    (function (UnifiedCommunicationAvailability) {
        UnifiedCommunicationAvailability["notSet"] = "NotSet";
        UnifiedCommunicationAvailability["free"] = "Free";
        UnifiedCommunicationAvailability["idle"] = "Idle";
        UnifiedCommunicationAvailability["busy"] = "Busy";
        UnifiedCommunicationAvailability["idleBusy"] = "IdleBusy";
        UnifiedCommunicationAvailability["doNotDisturb"] = "DoNotDisturb";
        UnifiedCommunicationAvailability["unalertable"] = "Unalertable";
        UnifiedCommunicationAvailability["unavailable"] = "Unavailable";
    })(UnifiedCommunicationAvailability = OfficeCore.UnifiedCommunicationAvailability || (OfficeCore.UnifiedCommunicationAvailability = {}));
    var UnifiedCommunicationStatus;
    (function (UnifiedCommunicationStatus) {
        UnifiedCommunicationStatus["online"] = "Online";
        UnifiedCommunicationStatus["notOnline"] = "NotOnline";
        UnifiedCommunicationStatus["away"] = "Away";
        UnifiedCommunicationStatus["busy"] = "Busy";
        UnifiedCommunicationStatus["beRightBack"] = "BeRightBack";
        UnifiedCommunicationStatus["onThePhone"] = "OnThePhone";
        UnifiedCommunicationStatus["outToLunch"] = "OutToLunch";
        UnifiedCommunicationStatus["inAMeeting"] = "InAMeeting";
        UnifiedCommunicationStatus["outOfOffice"] = "OutOfOffice";
        UnifiedCommunicationStatus["doNotDisturb"] = "DoNotDisturb";
        UnifiedCommunicationStatus["inAConference"] = "InAConference";
        UnifiedCommunicationStatus["getting"] = "Getting";
        UnifiedCommunicationStatus["notABuddy"] = "NotABuddy";
        UnifiedCommunicationStatus["disconnected"] = "Disconnected";
        UnifiedCommunicationStatus["notInstalled"] = "NotInstalled";
        UnifiedCommunicationStatus["urgentInterruptionsOnly"] = "UrgentInterruptionsOnly";
        UnifiedCommunicationStatus["mayBeAvailable"] = "MayBeAvailable";
        UnifiedCommunicationStatus["idle"] = "Idle";
        UnifiedCommunicationStatus["inPresentation"] = "InPresentation";
    })(UnifiedCommunicationStatus = OfficeCore.UnifiedCommunicationStatus || (OfficeCore.UnifiedCommunicationStatus = {}));
    var UnifiedCommunicationPresence;
    (function (UnifiedCommunicationPresence) {
        UnifiedCommunicationPresence["free"] = "Free";
        UnifiedCommunicationPresence["busy"] = "Busy";
        UnifiedCommunicationPresence["idle"] = "Idle";
        UnifiedCommunicationPresence["doNotDistrub"] = "DoNotDistrub";
        UnifiedCommunicationPresence["blocked"] = "Blocked";
        UnifiedCommunicationPresence["notSet"] = "NotSet";
        UnifiedCommunicationPresence["outOfOffice"] = "OutOfOffice";
    })(UnifiedCommunicationPresence = OfficeCore.UnifiedCommunicationPresence || (OfficeCore.UnifiedCommunicationPresence = {}));
    var FreeBusyCalendarState;
    (function (FreeBusyCalendarState) {
        FreeBusyCalendarState["unknown"] = "Unknown";
        FreeBusyCalendarState["free"] = "Free";
        FreeBusyCalendarState["busy"] = "Busy";
        FreeBusyCalendarState["elsewhere"] = "Elsewhere";
        FreeBusyCalendarState["tentative"] = "Tentative";
        FreeBusyCalendarState["outOfOffice"] = "OutOfOffice";
    })(FreeBusyCalendarState = OfficeCore.FreeBusyCalendarState || (OfficeCore.FreeBusyCalendarState = {}));
    var PersonaType;
    (function (PersonaType) {
        PersonaType["unknown"] = "Unknown";
        PersonaType["enterprise"] = "Enterprise";
        PersonaType["contact"] = "Contact";
        PersonaType["bot"] = "Bot";
        PersonaType["phoneOnly"] = "PhoneOnly";
        PersonaType["oneOff"] = "OneOff";
        PersonaType["distributionList"] = "DistributionList";
        PersonaType["personalDistributionList"] = "PersonalDistributionList";
        PersonaType["anonymous"] = "Anonymous";
        PersonaType["unifiedGroup"] = "UnifiedGroup";
    })(PersonaType = OfficeCore.PersonaType || (OfficeCore.PersonaType = {}));
    var PhoneType;
    (function (PhoneType) {
        PhoneType["workPhone"] = "WorkPhone";
        PhoneType["homePhone"] = "HomePhone";
        PhoneType["mobilePhone"] = "MobilePhone";
        PhoneType["businessFax"] = "BusinessFax";
        PhoneType["otherPhone"] = "OtherPhone";
    })(PhoneType = OfficeCore.PhoneType || (OfficeCore.PhoneType = {}));
    var AddressType;
    (function (AddressType) {
        AddressType["workAddress"] = "WorkAddress";
        AddressType["homeAddress"] = "HomeAddress";
        AddressType["otherAddress"] = "OtherAddress";
    })(AddressType = OfficeCore.AddressType || (OfficeCore.AddressType = {}));
    var MemberType;
    (function (MemberType) {
        MemberType["unknown"] = "Unknown";
        MemberType["individual"] = "Individual";
        MemberType["group"] = "Group";
    })(MemberType = OfficeCore.MemberType || (OfficeCore.MemberType = {}));
    var _typeMemberInfoList = "MemberInfoList";
    var MemberInfoList = (function (_super) {
        __extends(MemberInfoList, _super);
        function MemberInfoList() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(MemberInfoList.prototype, "_className", {
            get: function () {
                return "MemberInfoList";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(MemberInfoList.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["isWarmedUp", "isWarmingUp"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(MemberInfoList.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["IsWarmedUp", "IsWarmingUp"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(MemberInfoList.prototype, "isWarmedUp", {
            get: function () {
                _throwIfNotLoaded("isWarmedUp", this._I, _typeMemberInfoList, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(MemberInfoList.prototype, "isWarmingUp", {
            get: function () {
                _throwIfNotLoaded("isWarmingUp", this._Is, _typeMemberInfoList, this._isNull);
                return this._Is;
            },
            enumerable: true,
            configurable: true
        });
        MemberInfoList.prototype.getPersonaForMember = function (memberCookie) {
            return _createMethodObject(OfficeCore.Persona, this, "GetPersonaForMember", 1, [memberCookie], false, false, null, 4);
        };
        MemberInfoList.prototype.items = function () {
            return _invokeMethod(this, "Items", 1, [], 4, 0);
        };
        MemberInfoList.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["IsWarmedUp"])) {
                this._I = obj["IsWarmedUp"];
            }
            if (!_isUndefined(obj["IsWarmingUp"])) {
                this._Is = obj["IsWarmingUp"];
            }
        };
        MemberInfoList.prototype.load = function (options) {
            return _load(this, options);
        };
        MemberInfoList.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        MemberInfoList.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        MemberInfoList.prototype.toJSON = function () {
            return _toJson(this, {
                "isWarmedUp": this._I,
                "isWarmingUp": this._Is
            }, {});
        };
        MemberInfoList.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        MemberInfoList.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return MemberInfoList;
    }(OfficeExtension.ClientObject));
    OfficeCore.MemberInfoList = MemberInfoList;
    var PersonaDataUpdated;
    (function (PersonaDataUpdated) {
        PersonaDataUpdated["hostId"] = "HostId";
        PersonaDataUpdated["type"] = "Type";
        PersonaDataUpdated["photo"] = "Photo";
        PersonaDataUpdated["personaInfo"] = "PersonaInfo";
        PersonaDataUpdated["unifiedCommunicationInfo"] = "UnifiedCommunicationInfo";
        PersonaDataUpdated["organization"] = "Organization";
        PersonaDataUpdated["unifiedGroupInfo"] = "UnifiedGroupInfo";
        PersonaDataUpdated["members"] = "Members";
        PersonaDataUpdated["membership"] = "Membership";
        PersonaDataUpdated["capabilities"] = "Capabilities";
        PersonaDataUpdated["customizations"] = "Customizations";
        PersonaDataUpdated["viewableSources"] = "ViewableSources";
        PersonaDataUpdated["placeholder"] = "Placeholder";
    })(PersonaDataUpdated = OfficeCore.PersonaDataUpdated || (OfficeCore.PersonaDataUpdated = {}));
    var _typePersonaActions = "PersonaActions";
    var PersonaActions = (function (_super) {
        __extends(PersonaActions, _super);
        function PersonaActions() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PersonaActions.prototype, "_className", {
            get: function () {
                return "PersonaActions";
            },
            enumerable: true,
            configurable: true
        });
        PersonaActions.prototype.addContact = function () {
            _invokeMethod(this, "AddContact", 0, [], 0, 0);
        };
        PersonaActions.prototype.callPhoneNumber = function (contactNumber) {
            _invokeMethod(this, "CallPhoneNumber", 0, [contactNumber], 0, 0);
        };
        PersonaActions.prototype.composeEmail = function (emailAddress) {
            _invokeMethod(this, "ComposeEmail", 0, [emailAddress], 0, 0);
        };
        PersonaActions.prototype.composeInstantMessage = function (sipAddress) {
            _invokeMethod(this, "ComposeInstantMessage", 0, [sipAddress], 0, 0);
        };
        PersonaActions.prototype.editContact = function () {
            _invokeMethod(this, "EditContact", 0, [], 0, 0);
        };
        PersonaActions.prototype.editContactByIdentifier = function (identifier) {
            _invokeMethod(this, "EditContactByIdentifier", 0, [identifier], 0, 0);
        };
        PersonaActions.prototype.editUnifiedGroup = function () {
            _invokeMethod(this, "EditUnifiedGroup", 0, [], 0, 0);
        };
        PersonaActions.prototype.getChangePhotoUrlAndOpenInBrowser = function () {
            _invokeMethod(this, "GetChangePhotoUrlAndOpenInBrowser", 0, [], 0, 0);
        };
        PersonaActions.prototype.hideHoverCardForPersona = function () {
            _invokeMethod(this, "HideHoverCardForPersona", 0, [], 0, 0);
        };
        PersonaActions.prototype.joinUnifiedGroup = function () {
            _invokeMethod(this, "JoinUnifiedGroup", 0, [], 0, 0);
        };
        PersonaActions.prototype.leaveUnifiedGroup = function () {
            _invokeMethod(this, "LeaveUnifiedGroup", 0, [], 0, 0);
        };
        PersonaActions.prototype.openGroupCalendar = function () {
            _invokeMethod(this, "OpenGroupCalendar", 0, [], 0, 0);
        };
        PersonaActions.prototype.openLinkContactUx = function () {
            _invokeMethod(this, "OpenLinkContactUx", 0, [], 0, 0);
        };
        PersonaActions.prototype.openOutlookProperties = function () {
            _invokeMethod(this, "OpenOutlookProperties", 0, [], 0, 0);
        };
        PersonaActions.prototype.pinPersonaToQuickContacts = function () {
            _invokeMethod(this, "PinPersonaToQuickContacts", 0, [], 0, 0);
        };
        PersonaActions.prototype.scheduleMeeting = function () {
            _invokeMethod(this, "ScheduleMeeting", 0, [], 0, 0);
        };
        PersonaActions.prototype.showContactCard = function (pointToShowX, pointToShowY, personaRectTop, personaRectLeft, personaRectWidth, personaRectHeight) {
            _invokeMethod(this, "ShowContactCard", 0, [pointToShowX, pointToShowY, personaRectTop, personaRectLeft, personaRectWidth, personaRectHeight], 0, 0);
        };
        PersonaActions.prototype.showContextMenu = function (pointToShowX, pointToShowY, personaRectTop, personaRectLeft, personaRectWidth, personaRectHeight) {
            _invokeMethod(this, "ShowContextMenu", 0, [pointToShowX, pointToShowY, personaRectTop, personaRectLeft, personaRectWidth, personaRectHeight], 0, 0);
        };
        PersonaActions.prototype.showExpandedCard = function (pointToShowX, pointToShowY, personaRectTop, personaRectLeft, personaRectWidth, personaRectHeight) {
            _invokeMethod(this, "ShowExpandedCard", 0, [pointToShowX, pointToShowY, personaRectTop, personaRectLeft, personaRectWidth, personaRectHeight], 0, 0);
        };
        PersonaActions.prototype.showHoverCardForPersona = function (pointToShowX, pointToShowY, personaRectTop, personaRectLeft, personaRectWidth, personaRectHeight) {
            _invokeMethod(this, "ShowHoverCardForPersona", 0, [pointToShowX, pointToShowY, personaRectTop, personaRectLeft, personaRectWidth, personaRectHeight], 0, 0);
        };
        PersonaActions.prototype.startAudioCall = function () {
            _invokeMethod(this, "StartAudioCall", 0, [], 0, 0);
        };
        PersonaActions.prototype.startVideoCall = function () {
            _invokeMethod(this, "StartVideoCall", 0, [], 0, 0);
        };
        PersonaActions.prototype.subscribeToGroup = function () {
            _invokeMethod(this, "SubscribeToGroup", 0, [], 0, 0);
        };
        PersonaActions.prototype.toggleTagForAlerts = function () {
            _invokeMethod(this, "ToggleTagForAlerts", 0, [], 0, 0);
        };
        PersonaActions.prototype.unsubscribeFromGroup = function () {
            _invokeMethod(this, "UnsubscribeFromGroup", 0, [], 0, 0);
        };
        PersonaActions.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        PersonaActions.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PersonaActions.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return PersonaActions;
    }(OfficeExtension.ClientObject));
    OfficeCore.PersonaActions = PersonaActions;
    var _typePersonaInfoSource = "PersonaInfoSource";
    var PersonaInfoSource = (function (_super) {
        __extends(PersonaInfoSource, _super);
        function PersonaInfoSource() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PersonaInfoSource.prototype, "_className", {
            get: function () {
                return "PersonaInfoSource";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["displayName", "email", "emailAddresses", "sipAddresses", "birthday", "birthdays", "title", "jobInfoDepartment", "companyName", "office", "linkedTitles", "linkedDepartments", "linkedCompanyNames", "linkedOffices", "phones", "addresses", "webSites", "notes"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["DisplayName", "Email", "EmailAddresses", "SipAddresses", "Birthday", "Birthdays", "Title", "JobInfoDepartment", "CompanyName", "Office", "LinkedTitles", "LinkedDepartments", "LinkedCompanyNames", "LinkedOffices", "Phones", "Addresses", "WebSites", "Notes"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "addresses", {
            get: function () {
                _throwIfNotLoaded("addresses", this._A, _typePersonaInfoSource, this._isNull);
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "birthday", {
            get: function () {
                _throwIfNotLoaded("birthday", this._B, _typePersonaInfoSource, this._isNull);
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "birthdays", {
            get: function () {
                _throwIfNotLoaded("birthdays", this._Bi, _typePersonaInfoSource, this._isNull);
                return this._Bi;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "companyName", {
            get: function () {
                _throwIfNotLoaded("companyName", this._C, _typePersonaInfoSource, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "displayName", {
            get: function () {
                _throwIfNotLoaded("displayName", this._D, _typePersonaInfoSource, this._isNull);
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "email", {
            get: function () {
                _throwIfNotLoaded("email", this._E, _typePersonaInfoSource, this._isNull);
                return this._E;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "emailAddresses", {
            get: function () {
                _throwIfNotLoaded("emailAddresses", this._Em, _typePersonaInfoSource, this._isNull);
                return this._Em;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "jobInfoDepartment", {
            get: function () {
                _throwIfNotLoaded("jobInfoDepartment", this._J, _typePersonaInfoSource, this._isNull);
                return this._J;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "linkedCompanyNames", {
            get: function () {
                _throwIfNotLoaded("linkedCompanyNames", this._L, _typePersonaInfoSource, this._isNull);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "linkedDepartments", {
            get: function () {
                _throwIfNotLoaded("linkedDepartments", this._Li, _typePersonaInfoSource, this._isNull);
                return this._Li;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "linkedOffices", {
            get: function () {
                _throwIfNotLoaded("linkedOffices", this._Lin, _typePersonaInfoSource, this._isNull);
                return this._Lin;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "linkedTitles", {
            get: function () {
                _throwIfNotLoaded("linkedTitles", this._Link, _typePersonaInfoSource, this._isNull);
                return this._Link;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "notes", {
            get: function () {
                _throwIfNotLoaded("notes", this._N, _typePersonaInfoSource, this._isNull);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "office", {
            get: function () {
                _throwIfNotLoaded("office", this._O, _typePersonaInfoSource, this._isNull);
                return this._O;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "phones", {
            get: function () {
                _throwIfNotLoaded("phones", this._P, _typePersonaInfoSource, this._isNull);
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "sipAddresses", {
            get: function () {
                _throwIfNotLoaded("sipAddresses", this._S, _typePersonaInfoSource, this._isNull);
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "title", {
            get: function () {
                _throwIfNotLoaded("title", this._T, _typePersonaInfoSource, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfoSource.prototype, "webSites", {
            get: function () {
                _throwIfNotLoaded("webSites", this._W, _typePersonaInfoSource, this._isNull);
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        PersonaInfoSource.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Addresses"])) {
                this._A = obj["Addresses"];
            }
            if (!_isUndefined(obj["Birthday"])) {
                this._B = obj["Birthday"];
            }
            if (!_isUndefined(obj["Birthdays"])) {
                this._Bi = obj["Birthdays"];
            }
            if (!_isUndefined(obj["CompanyName"])) {
                this._C = obj["CompanyName"];
            }
            if (!_isUndefined(obj["DisplayName"])) {
                this._D = obj["DisplayName"];
            }
            if (!_isUndefined(obj["Email"])) {
                this._E = obj["Email"];
            }
            if (!_isUndefined(obj["EmailAddresses"])) {
                this._Em = obj["EmailAddresses"];
            }
            if (!_isUndefined(obj["JobInfoDepartment"])) {
                this._J = obj["JobInfoDepartment"];
            }
            if (!_isUndefined(obj["LinkedCompanyNames"])) {
                this._L = obj["LinkedCompanyNames"];
            }
            if (!_isUndefined(obj["LinkedDepartments"])) {
                this._Li = obj["LinkedDepartments"];
            }
            if (!_isUndefined(obj["LinkedOffices"])) {
                this._Lin = obj["LinkedOffices"];
            }
            if (!_isUndefined(obj["LinkedTitles"])) {
                this._Link = obj["LinkedTitles"];
            }
            if (!_isUndefined(obj["Notes"])) {
                this._N = obj["Notes"];
            }
            if (!_isUndefined(obj["Office"])) {
                this._O = obj["Office"];
            }
            if (!_isUndefined(obj["Phones"])) {
                this._P = obj["Phones"];
            }
            if (!_isUndefined(obj["SipAddresses"])) {
                this._S = obj["SipAddresses"];
            }
            if (!_isUndefined(obj["Title"])) {
                this._T = obj["Title"];
            }
            if (!_isUndefined(obj["WebSites"])) {
                this._W = obj["WebSites"];
            }
        };
        PersonaInfoSource.prototype.load = function (options) {
            return _load(this, options);
        };
        PersonaInfoSource.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PersonaInfoSource.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PersonaInfoSource.prototype.toJSON = function () {
            return _toJson(this, {
                "addresses": this._A,
                "birthday": this._B,
                "birthdays": this._Bi,
                "companyName": this._C,
                "displayName": this._D,
                "email": this._E,
                "emailAddresses": this._Em,
                "jobInfoDepartment": this._J,
                "linkedCompanyNames": this._L,
                "linkedDepartments": this._Li,
                "linkedOffices": this._Lin,
                "linkedTitles": this._Link,
                "notes": this._N,
                "office": this._O,
                "phones": this._P,
                "sipAddresses": this._S,
                "title": this._T,
                "webSites": this._W
            }, {});
        };
        PersonaInfoSource.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PersonaInfoSource.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PersonaInfoSource;
    }(OfficeExtension.ClientObject));
    OfficeCore.PersonaInfoSource = PersonaInfoSource;
    var _typePersonaInfo = "PersonaInfo";
    var PersonaInfo = (function (_super) {
        __extends(PersonaInfo, _super);
        function PersonaInfo() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PersonaInfo.prototype, "_className", {
            get: function () {
                return "PersonaInfo";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["displayName", "email", "emailAddresses", "sipAddresses", "birthday", "birthdays", "title", "jobInfoDepartment", "companyName", "office", "linkedTitles", "linkedDepartments", "linkedCompanyNames", "linkedOffices", "webSites", "notes", "isPersonResolved"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["DisplayName", "Email", "EmailAddresses", "SipAddresses", "Birthday", "Birthdays", "Title", "JobInfoDepartment", "CompanyName", "Office", "LinkedTitles", "LinkedDepartments", "LinkedCompanyNames", "LinkedOffices", "WebSites", "Notes", "IsPersonResolved"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["sources"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "sources", {
            get: function () {
                if (!this._So) {
                    this._So = _createPropertyObject(OfficeCore.PersonaInfoSource, this, "Sources", false, 4);
                }
                return this._So;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "birthday", {
            get: function () {
                _throwIfNotLoaded("birthday", this._B, _typePersonaInfo, this._isNull);
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "birthdays", {
            get: function () {
                _throwIfNotLoaded("birthdays", this._Bi, _typePersonaInfo, this._isNull);
                return this._Bi;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "companyName", {
            get: function () {
                _throwIfNotLoaded("companyName", this._C, _typePersonaInfo, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "displayName", {
            get: function () {
                _throwIfNotLoaded("displayName", this._D, _typePersonaInfo, this._isNull);
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "email", {
            get: function () {
                _throwIfNotLoaded("email", this._E, _typePersonaInfo, this._isNull);
                return this._E;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "emailAddresses", {
            get: function () {
                _throwIfNotLoaded("emailAddresses", this._Em, _typePersonaInfo, this._isNull);
                return this._Em;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "isPersonResolved", {
            get: function () {
                _throwIfNotLoaded("isPersonResolved", this._I, _typePersonaInfo, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "jobInfoDepartment", {
            get: function () {
                _throwIfNotLoaded("jobInfoDepartment", this._J, _typePersonaInfo, this._isNull);
                return this._J;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "linkedCompanyNames", {
            get: function () {
                _throwIfNotLoaded("linkedCompanyNames", this._L, _typePersonaInfo, this._isNull);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "linkedDepartments", {
            get: function () {
                _throwIfNotLoaded("linkedDepartments", this._Li, _typePersonaInfo, this._isNull);
                return this._Li;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "linkedOffices", {
            get: function () {
                _throwIfNotLoaded("linkedOffices", this._Lin, _typePersonaInfo, this._isNull);
                return this._Lin;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "linkedTitles", {
            get: function () {
                _throwIfNotLoaded("linkedTitles", this._Link, _typePersonaInfo, this._isNull);
                return this._Link;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "notes", {
            get: function () {
                _throwIfNotLoaded("notes", this._N, _typePersonaInfo, this._isNull);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "office", {
            get: function () {
                _throwIfNotLoaded("office", this._O, _typePersonaInfo, this._isNull);
                return this._O;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "sipAddresses", {
            get: function () {
                _throwIfNotLoaded("sipAddresses", this._S, _typePersonaInfo, this._isNull);
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "title", {
            get: function () {
                _throwIfNotLoaded("title", this._T, _typePersonaInfo, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaInfo.prototype, "webSites", {
            get: function () {
                _throwIfNotLoaded("webSites", this._W, _typePersonaInfo, this._isNull);
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        PersonaInfo.prototype.getAddresses = function () {
            return _invokeMethod(this, "GetAddresses", 1, [], 4, 0);
        };
        PersonaInfo.prototype.getPhones = function () {
            return _invokeMethod(this, "GetPhones", 1, [], 4, 0);
        };
        PersonaInfo.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Birthday"])) {
                this._B = _adjustToDateTime(obj["Birthday"]);
            }
            if (!_isUndefined(obj["Birthdays"])) {
                this._Bi = _adjustToDateTime(obj["Birthdays"]);
            }
            if (!_isUndefined(obj["CompanyName"])) {
                this._C = obj["CompanyName"];
            }
            if (!_isUndefined(obj["DisplayName"])) {
                this._D = obj["DisplayName"];
            }
            if (!_isUndefined(obj["Email"])) {
                this._E = obj["Email"];
            }
            if (!_isUndefined(obj["EmailAddresses"])) {
                this._Em = obj["EmailAddresses"];
            }
            if (!_isUndefined(obj["IsPersonResolved"])) {
                this._I = obj["IsPersonResolved"];
            }
            if (!_isUndefined(obj["JobInfoDepartment"])) {
                this._J = obj["JobInfoDepartment"];
            }
            if (!_isUndefined(obj["LinkedCompanyNames"])) {
                this._L = obj["LinkedCompanyNames"];
            }
            if (!_isUndefined(obj["LinkedDepartments"])) {
                this._Li = obj["LinkedDepartments"];
            }
            if (!_isUndefined(obj["LinkedOffices"])) {
                this._Lin = obj["LinkedOffices"];
            }
            if (!_isUndefined(obj["LinkedTitles"])) {
                this._Link = obj["LinkedTitles"];
            }
            if (!_isUndefined(obj["Notes"])) {
                this._N = obj["Notes"];
            }
            if (!_isUndefined(obj["Office"])) {
                this._O = obj["Office"];
            }
            if (!_isUndefined(obj["SipAddresses"])) {
                this._S = obj["SipAddresses"];
            }
            if (!_isUndefined(obj["Title"])) {
                this._T = obj["Title"];
            }
            if (!_isUndefined(obj["WebSites"])) {
                this._W = obj["WebSites"];
            }
            _handleNavigationPropertyResults(this, obj, ["sources", "Sources"]);
        };
        PersonaInfo.prototype.load = function (options) {
            return _load(this, options);
        };
        PersonaInfo.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PersonaInfo.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            if (!_isUndefined(obj["Birthday"])) {
                obj["birthday"] = _adjustToDateTime(obj["birthday"]);
            }
            if (!_isUndefined(obj["Birthdays"])) {
                obj["birthdays"] = _adjustToDateTime(obj["birthdays"]);
            }
            _processRetrieveResult(this, value, result);
        };
        PersonaInfo.prototype.toJSON = function () {
            return _toJson(this, {
                "birthday": this._B,
                "birthdays": this._Bi,
                "companyName": this._C,
                "displayName": this._D,
                "email": this._E,
                "emailAddresses": this._Em,
                "isPersonResolved": this._I,
                "jobInfoDepartment": this._J,
                "linkedCompanyNames": this._L,
                "linkedDepartments": this._Li,
                "linkedOffices": this._Lin,
                "linkedTitles": this._Link,
                "notes": this._N,
                "office": this._O,
                "sipAddresses": this._S,
                "title": this._T,
                "webSites": this._W
            }, {
                "sources": this._So
            });
        };
        PersonaInfo.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PersonaInfo.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PersonaInfo;
    }(OfficeExtension.ClientObject));
    OfficeCore.PersonaInfo = PersonaInfo;
    var _typePersonaUnifiedCommunicationInfo = "PersonaUnifiedCommunicationInfo";
    var PersonaUnifiedCommunicationInfo = (function (_super) {
        __extends(PersonaUnifiedCommunicationInfo, _super);
        function PersonaUnifiedCommunicationInfo() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "_className", {
            get: function () {
                return "PersonaUnifiedCommunicationInfo";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["availability", "status", "isSelf", "isTagged", "customStatusString", "isBlocked", "presenceTooltip", "isOutOfOffice", "outOfOfficeNote", "timezone", "meetingLocation", "meetingSubject", "timezoneBias", "idleStartTime", "overallCapability", "isOnBuddyList", "presenceNote", "voiceMailUri", "availabilityText", "availabilityTooltip", "isDurationInAvailabilityText", "freeBusyStatus", "calendarState", "presence"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Availability", "Status", "IsSelf", "IsTagged", "CustomStatusString", "IsBlocked", "PresenceTooltip", "IsOutOfOffice", "OutOfOfficeNote", "Timezone", "MeetingLocation", "MeetingSubject", "TimezoneBias", "IdleStartTime", "OverallCapability", "IsOnBuddyList", "PresenceNote", "VoiceMailUri", "AvailabilityText", "AvailabilityTooltip", "IsDurationInAvailabilityText", "FreeBusyStatus", "CalendarState", "Presence"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "availability", {
            get: function () {
                _throwIfNotLoaded("availability", this._A, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "availabilityText", {
            get: function () {
                _throwIfNotLoaded("availabilityText", this._Av, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._Av;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "availabilityTooltip", {
            get: function () {
                _throwIfNotLoaded("availabilityTooltip", this._Ava, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._Ava;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "calendarState", {
            get: function () {
                _throwIfNotLoaded("calendarState", this._C, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "customStatusString", {
            get: function () {
                _throwIfNotLoaded("customStatusString", this._Cu, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._Cu;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "freeBusyStatus", {
            get: function () {
                _throwIfNotLoaded("freeBusyStatus", this._F, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "idleStartTime", {
            get: function () {
                _throwIfNotLoaded("idleStartTime", this._I, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "isBlocked", {
            get: function () {
                _throwIfNotLoaded("isBlocked", this._Is, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._Is;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "isDurationInAvailabilityText", {
            get: function () {
                _throwIfNotLoaded("isDurationInAvailabilityText", this._IsD, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._IsD;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "isOnBuddyList", {
            get: function () {
                _throwIfNotLoaded("isOnBuddyList", this._IsO, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._IsO;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "isOutOfOffice", {
            get: function () {
                _throwIfNotLoaded("isOutOfOffice", this._IsOu, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._IsOu;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "isSelf", {
            get: function () {
                _throwIfNotLoaded("isSelf", this._IsS, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._IsS;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "isTagged", {
            get: function () {
                _throwIfNotLoaded("isTagged", this._IsT, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._IsT;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "meetingLocation", {
            get: function () {
                _throwIfNotLoaded("meetingLocation", this._M, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._M;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "meetingSubject", {
            get: function () {
                _throwIfNotLoaded("meetingSubject", this._Me, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._Me;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "outOfOfficeNote", {
            get: function () {
                _throwIfNotLoaded("outOfOfficeNote", this._O, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._O;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "overallCapability", {
            get: function () {
                _throwIfNotLoaded("overallCapability", this._Ov, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._Ov;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "presence", {
            get: function () {
                _throwIfNotLoaded("presence", this._P, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "presenceNote", {
            get: function () {
                _throwIfNotLoaded("presenceNote", this._Pr, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._Pr;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "presenceTooltip", {
            get: function () {
                _throwIfNotLoaded("presenceTooltip", this._Pre, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._Pre;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "status", {
            get: function () {
                _throwIfNotLoaded("status", this._S, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "timezone", {
            get: function () {
                _throwIfNotLoaded("timezone", this._T, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "timezoneBias", {
            get: function () {
                _throwIfNotLoaded("timezoneBias", this._Ti, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._Ti;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaUnifiedCommunicationInfo.prototype, "voiceMailUri", {
            get: function () {
                _throwIfNotLoaded("voiceMailUri", this._V, _typePersonaUnifiedCommunicationInfo, this._isNull);
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        PersonaUnifiedCommunicationInfo.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Availability"])) {
                this._A = obj["Availability"];
            }
            if (!_isUndefined(obj["AvailabilityText"])) {
                this._Av = obj["AvailabilityText"];
            }
            if (!_isUndefined(obj["AvailabilityTooltip"])) {
                this._Ava = obj["AvailabilityTooltip"];
            }
            if (!_isUndefined(obj["CalendarState"])) {
                this._C = obj["CalendarState"];
            }
            if (!_isUndefined(obj["CustomStatusString"])) {
                this._Cu = obj["CustomStatusString"];
            }
            if (!_isUndefined(obj["FreeBusyStatus"])) {
                this._F = obj["FreeBusyStatus"];
            }
            if (!_isUndefined(obj["IdleStartTime"])) {
                this._I = _adjustToDateTime(obj["IdleStartTime"]);
            }
            if (!_isUndefined(obj["IsBlocked"])) {
                this._Is = obj["IsBlocked"];
            }
            if (!_isUndefined(obj["IsDurationInAvailabilityText"])) {
                this._IsD = obj["IsDurationInAvailabilityText"];
            }
            if (!_isUndefined(obj["IsOnBuddyList"])) {
                this._IsO = obj["IsOnBuddyList"];
            }
            if (!_isUndefined(obj["IsOutOfOffice"])) {
                this._IsOu = obj["IsOutOfOffice"];
            }
            if (!_isUndefined(obj["IsSelf"])) {
                this._IsS = obj["IsSelf"];
            }
            if (!_isUndefined(obj["IsTagged"])) {
                this._IsT = obj["IsTagged"];
            }
            if (!_isUndefined(obj["MeetingLocation"])) {
                this._M = obj["MeetingLocation"];
            }
            if (!_isUndefined(obj["MeetingSubject"])) {
                this._Me = obj["MeetingSubject"];
            }
            if (!_isUndefined(obj["OutOfOfficeNote"])) {
                this._O = obj["OutOfOfficeNote"];
            }
            if (!_isUndefined(obj["OverallCapability"])) {
                this._Ov = obj["OverallCapability"];
            }
            if (!_isUndefined(obj["Presence"])) {
                this._P = obj["Presence"];
            }
            if (!_isUndefined(obj["PresenceNote"])) {
                this._Pr = obj["PresenceNote"];
            }
            if (!_isUndefined(obj["PresenceTooltip"])) {
                this._Pre = obj["PresenceTooltip"];
            }
            if (!_isUndefined(obj["Status"])) {
                this._S = obj["Status"];
            }
            if (!_isUndefined(obj["Timezone"])) {
                this._T = obj["Timezone"];
            }
            if (!_isUndefined(obj["TimezoneBias"])) {
                this._Ti = obj["TimezoneBias"];
            }
            if (!_isUndefined(obj["VoiceMailUri"])) {
                this._V = obj["VoiceMailUri"];
            }
        };
        PersonaUnifiedCommunicationInfo.prototype.load = function (options) {
            return _load(this, options);
        };
        PersonaUnifiedCommunicationInfo.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PersonaUnifiedCommunicationInfo.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            if (!_isUndefined(obj["IdleStartTime"])) {
                obj["idleStartTime"] = _adjustToDateTime(obj["idleStartTime"]);
            }
            _processRetrieveResult(this, value, result);
        };
        PersonaUnifiedCommunicationInfo.prototype.toJSON = function () {
            return _toJson(this, {
                "availability": this._A,
                "availabilityText": this._Av,
                "availabilityTooltip": this._Ava,
                "calendarState": this._C,
                "customStatusString": this._Cu,
                "freeBusyStatus": this._F,
                "idleStartTime": this._I,
                "isBlocked": this._Is,
                "isDurationInAvailabilityText": this._IsD,
                "isOnBuddyList": this._IsO,
                "isOutOfOffice": this._IsOu,
                "isSelf": this._IsS,
                "isTagged": this._IsT,
                "meetingLocation": this._M,
                "meetingSubject": this._Me,
                "outOfOfficeNote": this._O,
                "overallCapability": this._Ov,
                "presence": this._P,
                "presenceNote": this._Pr,
                "presenceTooltip": this._Pre,
                "status": this._S,
                "timezone": this._T,
                "timezoneBias": this._Ti,
                "voiceMailUri": this._V
            }, {});
        };
        PersonaUnifiedCommunicationInfo.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PersonaUnifiedCommunicationInfo.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PersonaUnifiedCommunicationInfo;
    }(OfficeExtension.ClientObject));
    OfficeCore.PersonaUnifiedCommunicationInfo = PersonaUnifiedCommunicationInfo;
    var _typePersonaPhotoInfo = "PersonaPhotoInfo";
    var PersonaPhotoInfo = (function (_super) {
        __extends(PersonaPhotoInfo, _super);
        function PersonaPhotoInfo() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PersonaPhotoInfo.prototype, "_className", {
            get: function () {
                return "PersonaPhotoInfo";
            },
            enumerable: true,
            configurable: true
        });
        PersonaPhotoInfo.prototype.getImageUri = function (uriScheme) {
            return _invokeMethod(this, "getImageUri", 1, [uriScheme], 4, 0);
        };
        PersonaPhotoInfo.prototype.getImageUriWithMetadata = function (uriScheme) {
            return _invokeMethod(this, "getImageUriWithMetadata", 1, [uriScheme], 4, 0);
        };
        PersonaPhotoInfo.prototype.getPlaceholderUri = function (uriScheme) {
            return _invokeMethod(this, "getPlaceholderUri", 1, [uriScheme], 4, 0);
        };
        PersonaPhotoInfo.prototype.setPlaceholderColor = function (color) {
            _invokeMethod(this, "setPlaceholderColor", 0, [color], 0, 0);
        };
        PersonaPhotoInfo.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        PersonaPhotoInfo.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PersonaPhotoInfo.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return PersonaPhotoInfo;
    }(OfficeExtension.ClientObject));
    OfficeCore.PersonaPhotoInfo = PersonaPhotoInfo;
    var _typePersonaCollection = "PersonaCollection";
    var PersonaCollection = (function (_super) {
        __extends(PersonaCollection, _super);
        function PersonaCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PersonaCollection.prototype, "_className", {
            get: function () {
                return "PersonaCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typePersonaCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        PersonaCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        PersonaCollection.prototype.getItem = function (index) {
            return _createIndexerObject(OfficeCore.Persona, this, [index]);
        };
        PersonaCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(OfficeCore.Persona, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        PersonaCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        PersonaCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PersonaCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(OfficeCore.Persona, true, _this, childItemData, index); });
        };
        PersonaCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        PersonaCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(OfficeCore.Persona, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return PersonaCollection;
    }(OfficeExtension.ClientObject));
    OfficeCore.PersonaCollection = PersonaCollection;
    var _typePersonaOrganizationInfo = "PersonaOrganizationInfo";
    var PersonaOrganizationInfo = (function (_super) {
        __extends(PersonaOrganizationInfo, _super);
        function PersonaOrganizationInfo() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PersonaOrganizationInfo.prototype, "_className", {
            get: function () {
                return "PersonaOrganizationInfo";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaOrganizationInfo.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["isWarmedUp", "isWarmingUp"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaOrganizationInfo.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["IsWarmedUp", "IsWarmingUp"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaOrganizationInfo.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["hierarchy", "manager", "directReports"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaOrganizationInfo.prototype, "directReports", {
            get: function () {
                if (!this._D) {
                    this._D = _createPropertyObject(OfficeCore.PersonaCollection, this, "DirectReports", true, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaOrganizationInfo.prototype, "hierarchy", {
            get: function () {
                if (!this._H) {
                    this._H = _createPropertyObject(OfficeCore.PersonaCollection, this, "Hierarchy", true, 4);
                }
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaOrganizationInfo.prototype, "manager", {
            get: function () {
                if (!this._M) {
                    this._M = _createPropertyObject(OfficeCore.Persona, this, "Manager", false, 4);
                }
                return this._M;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaOrganizationInfo.prototype, "isWarmedUp", {
            get: function () {
                _throwIfNotLoaded("isWarmedUp", this._I, _typePersonaOrganizationInfo, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaOrganizationInfo.prototype, "isWarmingUp", {
            get: function () {
                _throwIfNotLoaded("isWarmingUp", this._Is, _typePersonaOrganizationInfo, this._isNull);
                return this._Is;
            },
            enumerable: true,
            configurable: true
        });
        PersonaOrganizationInfo.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["IsWarmedUp"])) {
                this._I = obj["IsWarmedUp"];
            }
            if (!_isUndefined(obj["IsWarmingUp"])) {
                this._Is = obj["IsWarmingUp"];
            }
            _handleNavigationPropertyResults(this, obj, ["directReports", "DirectReports", "hierarchy", "Hierarchy", "manager", "Manager"]);
        };
        PersonaOrganizationInfo.prototype.load = function (options) {
            return _load(this, options);
        };
        PersonaOrganizationInfo.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PersonaOrganizationInfo.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PersonaOrganizationInfo.prototype.toJSON = function () {
            return _toJson(this, {
                "isWarmedUp": this._I,
                "isWarmingUp": this._Is
            }, {});
        };
        PersonaOrganizationInfo.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PersonaOrganizationInfo.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PersonaOrganizationInfo;
    }(OfficeExtension.ClientObject));
    OfficeCore.PersonaOrganizationInfo = PersonaOrganizationInfo;
    var CustomizedData;
    (function (CustomizedData) {
        CustomizedData["email"] = "Email";
        CustomizedData["workPhone"] = "WorkPhone";
        CustomizedData["workPhone2"] = "WorkPhone2";
        CustomizedData["workFax"] = "WorkFax";
        CustomizedData["mobilePhone"] = "MobilePhone";
        CustomizedData["homePhone"] = "HomePhone";
        CustomizedData["homePhone2"] = "HomePhone2";
        CustomizedData["otherPhone"] = "OtherPhone";
        CustomizedData["sipAddress"] = "SipAddress";
        CustomizedData["profile"] = "Profile";
        CustomizedData["office"] = "Office";
        CustomizedData["company"] = "Company";
        CustomizedData["workAddress"] = "WorkAddress";
        CustomizedData["homeAddress"] = "HomeAddress";
        CustomizedData["otherAddress"] = "OtherAddress";
        CustomizedData["birthday"] = "Birthday";
    })(CustomizedData = OfficeCore.CustomizedData || (OfficeCore.CustomizedData = {}));
    var _typeUnifiedGroupInfo = "UnifiedGroupInfo";
    var UnifiedGroupInfo = (function (_super) {
        __extends(UnifiedGroupInfo, _super);
        function UnifiedGroupInfo() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(UnifiedGroupInfo.prototype, "_className", {
            get: function () {
                return "UnifiedGroupInfo";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["description", "oneDrive", "oneNote", "isPublic", "amIOwner", "amIMember", "amISubscribed", "memberCount", "ownerCount", "hasGuests", "site", "planner", "classification", "subscriptionEnabled"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Description", "OneDrive", "OneNote", "IsPublic", "AmIOwner", "AmIMember", "AmISubscribed", "MemberCount", "OwnerCount", "HasGuests", "Site", "Planner", "Classification", "SubscriptionEnabled"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "amIMember", {
            get: function () {
                _throwIfNotLoaded("amIMember", this._A, _typeUnifiedGroupInfo, this._isNull);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AmIMember", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "amIOwner", {
            get: function () {
                _throwIfNotLoaded("amIOwner", this._Am, _typeUnifiedGroupInfo, this._isNull);
                return this._Am;
            },
            set: function (value) {
                this._Am = value;
                _invokeSetProperty(this, "AmIOwner", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "amISubscribed", {
            get: function () {
                _throwIfNotLoaded("amISubscribed", this._AmI, _typeUnifiedGroupInfo, this._isNull);
                return this._AmI;
            },
            set: function (value) {
                this._AmI = value;
                _invokeSetProperty(this, "AmISubscribed", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "classification", {
            get: function () {
                _throwIfNotLoaded("classification", this._C, _typeUnifiedGroupInfo, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Classification", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "description", {
            get: function () {
                _throwIfNotLoaded("description", this._D, _typeUnifiedGroupInfo, this._isNull);
                return this._D;
            },
            set: function (value) {
                this._D = value;
                _invokeSetProperty(this, "Description", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "hasGuests", {
            get: function () {
                _throwIfNotLoaded("hasGuests", this._H, _typeUnifiedGroupInfo, this._isNull);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "HasGuests", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "isPublic", {
            get: function () {
                _throwIfNotLoaded("isPublic", this._I, _typeUnifiedGroupInfo, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "IsPublic", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "memberCount", {
            get: function () {
                _throwIfNotLoaded("memberCount", this._M, _typeUnifiedGroupInfo, this._isNull);
                return this._M;
            },
            set: function (value) {
                this._M = value;
                _invokeSetProperty(this, "MemberCount", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "oneDrive", {
            get: function () {
                _throwIfNotLoaded("oneDrive", this._O, _typeUnifiedGroupInfo, this._isNull);
                return this._O;
            },
            set: function (value) {
                this._O = value;
                _invokeSetProperty(this, "OneDrive", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "oneNote", {
            get: function () {
                _throwIfNotLoaded("oneNote", this._On, _typeUnifiedGroupInfo, this._isNull);
                return this._On;
            },
            set: function (value) {
                this._On = value;
                _invokeSetProperty(this, "OneNote", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "ownerCount", {
            get: function () {
                _throwIfNotLoaded("ownerCount", this._Ow, _typeUnifiedGroupInfo, this._isNull);
                return this._Ow;
            },
            set: function (value) {
                this._Ow = value;
                _invokeSetProperty(this, "OwnerCount", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "planner", {
            get: function () {
                _throwIfNotLoaded("planner", this._P, _typeUnifiedGroupInfo, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Planner", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "site", {
            get: function () {
                _throwIfNotLoaded("site", this._S, _typeUnifiedGroupInfo, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Site", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(UnifiedGroupInfo.prototype, "subscriptionEnabled", {
            get: function () {
                _throwIfNotLoaded("subscriptionEnabled", this._Su, _typeUnifiedGroupInfo, this._isNull);
                return this._Su;
            },
            set: function (value) {
                this._Su = value;
                _invokeSetProperty(this, "SubscriptionEnabled", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        UnifiedGroupInfo.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["description", "oneDrive", "oneNote", "isPublic", "amIOwner", "amIMember", "amISubscribed", "memberCount", "ownerCount", "hasGuests", "site", "planner", "classification", "subscriptionEnabled"], [], []);
        };
        UnifiedGroupInfo.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        UnifiedGroupInfo.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AmIMember"])) {
                this._A = obj["AmIMember"];
            }
            if (!_isUndefined(obj["AmIOwner"])) {
                this._Am = obj["AmIOwner"];
            }
            if (!_isUndefined(obj["AmISubscribed"])) {
                this._AmI = obj["AmISubscribed"];
            }
            if (!_isUndefined(obj["Classification"])) {
                this._C = obj["Classification"];
            }
            if (!_isUndefined(obj["Description"])) {
                this._D = obj["Description"];
            }
            if (!_isUndefined(obj["HasGuests"])) {
                this._H = obj["HasGuests"];
            }
            if (!_isUndefined(obj["IsPublic"])) {
                this._I = obj["IsPublic"];
            }
            if (!_isUndefined(obj["MemberCount"])) {
                this._M = obj["MemberCount"];
            }
            if (!_isUndefined(obj["OneDrive"])) {
                this._O = obj["OneDrive"];
            }
            if (!_isUndefined(obj["OneNote"])) {
                this._On = obj["OneNote"];
            }
            if (!_isUndefined(obj["OwnerCount"])) {
                this._Ow = obj["OwnerCount"];
            }
            if (!_isUndefined(obj["Planner"])) {
                this._P = obj["Planner"];
            }
            if (!_isUndefined(obj["Site"])) {
                this._S = obj["Site"];
            }
            if (!_isUndefined(obj["SubscriptionEnabled"])) {
                this._Su = obj["SubscriptionEnabled"];
            }
        };
        UnifiedGroupInfo.prototype.load = function (options) {
            return _load(this, options);
        };
        UnifiedGroupInfo.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        UnifiedGroupInfo.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        UnifiedGroupInfo.prototype.toJSON = function () {
            return _toJson(this, {
                "amIMember": this._A,
                "amIOwner": this._Am,
                "amISubscribed": this._AmI,
                "classification": this._C,
                "description": this._D,
                "hasGuests": this._H,
                "isPublic": this._I,
                "memberCount": this._M,
                "oneDrive": this._O,
                "oneNote": this._On,
                "ownerCount": this._Ow,
                "planner": this._P,
                "site": this._S,
                "subscriptionEnabled": this._Su
            }, {});
        };
        UnifiedGroupInfo.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        UnifiedGroupInfo.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return UnifiedGroupInfo;
    }(OfficeExtension.ClientObject));
    OfficeCore.UnifiedGroupInfo = UnifiedGroupInfo;
    var _typePersona = "Persona";
    var PersonaPromiseType;
    (function (PersonaPromiseType) {
        PersonaPromiseType[PersonaPromiseType["immediate"] = 0] = "immediate";
        PersonaPromiseType[PersonaPromiseType["load"] = 3] = "load";
    })(PersonaPromiseType = OfficeCore.PersonaPromiseType || (OfficeCore.PersonaPromiseType = {}));
    var PersonaInfoAndSource = (function () {
        function PersonaInfoAndSource() {
        }
        return PersonaInfoAndSource;
    }());
    OfficeCore.PersonaInfoAndSource = PersonaInfoAndSource;
    ;
    var Persona = (function (_super) {
        __extends(Persona, _super);
        function Persona() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Persona.prototype, "_className", {
            get: function () {
                return "Persona";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["hostId", "type", "capabilities", "diagnosticId", "instanceId"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["HostId", "Type", "Capabilities", "DiagnosticId", "InstanceId"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["photo", "personaInfo", "unifiedCommunicationInfo", "organization", "unifiedGroupInfo", "actions"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "actions", {
            get: function () {
                if (!this._A) {
                    this._A = _createPropertyObject(OfficeCore.PersonaActions, this, "Actions", false, 4);
                }
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "organization", {
            get: function () {
                if (!this._O) {
                    this._O = _createPropertyObject(OfficeCore.PersonaOrganizationInfo, this, "Organization", false, 4);
                }
                return this._O;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "personaInfo", {
            get: function () {
                if (!this._P) {
                    this._P = _createPropertyObject(OfficeCore.PersonaInfo, this, "PersonaInfo", false, 4);
                }
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "photo", {
            get: function () {
                if (!this._Ph) {
                    this._Ph = _createPropertyObject(OfficeCore.PersonaPhotoInfo, this, "Photo", false, 4);
                }
                return this._Ph;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "unifiedCommunicationInfo", {
            get: function () {
                if (!this._U) {
                    this._U = _createPropertyObject(OfficeCore.PersonaUnifiedCommunicationInfo, this, "UnifiedCommunicationInfo", false, 4);
                }
                return this._U;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "unifiedGroupInfo", {
            get: function () {
                if (!this._Un) {
                    this._Un = _createPropertyObject(OfficeCore.UnifiedGroupInfo, this, "UnifiedGroupInfo", false, 4);
                }
                return this._Un;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "capabilities", {
            get: function () {
                _throwIfNotLoaded("capabilities", this._C, _typePersona, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "diagnosticId", {
            get: function () {
                _throwIfNotLoaded("diagnosticId", this._D, _typePersona, this._isNull);
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "hostId", {
            get: function () {
                _throwIfNotLoaded("hostId", this._H, _typePersona, this._isNull);
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "instanceId", {
            get: function () {
                _throwIfNotLoaded("instanceId", this._I, _typePersona, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Persona.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._T, _typePersona, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Persona.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["unifiedGroupInfo"], [
                "actions",
                "organization",
                "personaInfo",
                "photo",
                "unifiedCommunicationInfo"
            ]);
        };
        Persona.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Persona.prototype.dispose = function () {
            _invokeMethod(this, "Dispose", 0, [], 0, 0);
        };
        Persona.prototype.getCustomizations = function () {
            return _invokeMethod(this, "GetCustomizations", 1, [], 4, 0);
        };
        Persona.prototype.getMembers = function () {
            return _createMethodObject(OfficeCore.MemberInfoList, this, "GetMembers", 1, [], false, false, null, 4);
        };
        Persona.prototype.getMembership = function () {
            return _createMethodObject(OfficeCore.MemberInfoList, this, "GetMembership", 1, [], false, false, null, 4);
        };
        Persona.prototype.getViewableSources = function () {
            return _invokeMethod(this, "GetViewableSources", 1, [], 4, 0);
        };
        Persona.prototype.reportTimeForRender = function (perfpoint, millisecUTC) {
            _invokeMethod(this, "ReportTimeForRender", 0, [perfpoint, millisecUTC], 0, 0);
        };
        Persona.prototype.warmup = function (dataToWarmUp) {
            _invokeMethod(this, "Warmup", 0, [dataToWarmUp], 0, 0);
        };
        Persona.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Capabilities"])) {
                this._C = obj["Capabilities"];
            }
            if (!_isUndefined(obj["DiagnosticId"])) {
                this._D = obj["DiagnosticId"];
            }
            if (!_isUndefined(obj["HostId"])) {
                this._H = obj["HostId"];
            }
            if (!_isUndefined(obj["InstanceId"])) {
                this._I = obj["InstanceId"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._T = obj["Type"];
            }
            _handleNavigationPropertyResults(this, obj, ["actions", "Actions", "organization", "Organization", "personaInfo", "PersonaInfo", "photo", "Photo", "unifiedCommunicationInfo", "UnifiedCommunicationInfo", "unifiedGroupInfo", "UnifiedGroupInfo"]);
        };
        Persona.prototype.load = function (options) {
            return _load(this, options);
        };
        Persona.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Persona.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Persona.prototype.toJSON = function () {
            return _toJson(this, {
                "capabilities": this._C,
                "diagnosticId": this._D,
                "hostId": this._H,
                "instanceId": this._I,
                "type": this._T
            }, {
                "organization": this._O,
                "personaInfo": this._P,
                "unifiedCommunicationInfo": this._U,
                "unifiedGroupInfo": this._Un
            });
        };
        Persona.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Persona.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Persona;
    }(OfficeExtension.ClientObject));
    OfficeCore.Persona = Persona;
    var PersonaCustom = (function () {
        function PersonaCustom() {
        }
        PersonaCustom.prototype.performAsyncOperation = function (type, waitFor, action, check) {
            var _this = this;
            if (type == PersonaPromiseType.immediate) {
                action();
                return;
            }
            check().then(function (isWarmedUp) {
                if (isWarmedUp) {
                    action();
                }
                else {
                    var persona = _this;
                    persona.load("hostId");
                    persona.context.sync().then(function () {
                        var hostId = persona.hostId;
                        _this.getPersonaLifetime().then(function (personaLifetime) {
                            var eventHandler = function (args) {
                                return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                                    if (args.sendingPersonaHostId == hostId) {
                                        for (var index = 0; index < args.dataUpdated.length; ++index) {
                                            var updated = args.dataUpdated[index];
                                            if (waitFor == updated) {
                                                check().then(function (isWarmedUp) {
                                                    if (isWarmedUp) {
                                                        action();
                                                        personaLifetime.onPersonaUpdated.remove(eventHandler);
                                                        persona.context.sync();
                                                    }
                                                    resolve(isWarmedUp);
                                                });
                                                return;
                                            }
                                        }
                                    }
                                    resolve(false);
                                });
                            };
                            personaLifetime.onPersonaUpdated.add(eventHandler);
                            persona.context.sync();
                        });
                    });
                }
            });
        };
        PersonaCustom.prototype.getOrganizationAsync = function (type) {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var persona = _this;
                var action = function () {
                    var organization = persona.organization;
                    organization.load("*");
                    persona.context.sync().then(function () {
                        resolve(organization);
                    });
                };
                var check = function () {
                    return new OfficeExtension.CoreUtility.Promise(function (isWarmedUpResolve, isWarmedUpReject) {
                        var organization = persona.organization;
                        organization.load("isWarmedUp");
                        persona.context.sync().then(function () {
                            isWarmedUpResolve(organization.isWarmedUp);
                        });
                    });
                };
                _this.performAsyncOperation(type, PersonaDataUpdated.organization, action, check);
            });
        };
        PersonaCustom.prototype.getIsPersonaInfoResolvedCheck = function () {
            var persona = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var info = persona.personaInfo;
                info.load("isPersonResolved");
                persona.context.sync().then(function () {
                    resolve(info.isPersonResolved);
                });
            });
        };
        PersonaCustom.prototype.getPersonaInfoAsync = function (type) {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var persona = _this;
                var action = function () {
                    var info = persona.personaInfo;
                    info.load();
                    persona.context.sync().then(function () {
                        resolve(info);
                    });
                };
                var check = function () {
                    return _this.getIsPersonaInfoResolvedCheck();
                };
                _this.performAsyncOperation(type, PersonaDataUpdated.personaInfo, action, check);
            });
        };
        PersonaCustom.prototype.getPersonaInfoWithSourceAsync = function (type) {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var persona = _this;
                var action = function () {
                    var result = new PersonaInfoAndSource();
                    result.info = persona.personaInfo;
                    result.info.load();
                    result.source = persona.personaInfo.sources;
                    result.source.load();
                    persona.context.sync().then(function () {
                        resolve(result);
                    });
                };
                var check = function () {
                    return _this.getIsPersonaInfoResolvedCheck();
                };
                _this.performAsyncOperation(type, PersonaDataUpdated.personaInfo, action, check);
            });
        };
        PersonaCustom.prototype.getUnifiedCommunicationInfo = function (type) {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var persona = _this;
                var action = function () {
                    var ucInfo = persona.unifiedCommunicationInfo;
                    ucInfo.load("*");
                    persona.context.sync().then(function () {
                        resolve(ucInfo);
                    });
                };
                var check = function () {
                    return _this.getIsPersonaInfoResolvedCheck();
                };
                _this.performAsyncOperation(type, PersonaDataUpdated.personaInfo, action, check);
            });
        };
        PersonaCustom.prototype.getUnifiedGroupInfoAsync = function (type) {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var persona = _this;
                var action = function () {
                    var group = persona.unifiedGroupInfo;
                    group.load("*");
                    persona.context.sync().then(function () {
                        resolve(group);
                    });
                };
                var check = function () {
                    return _this.getIsPersonaInfoResolvedCheck();
                };
                _this.performAsyncOperation(type, PersonaDataUpdated.personaInfo, action, check);
            });
        };
        PersonaCustom.prototype.getTypeAsync = function (type) {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var persona = _this;
                var action = function () {
                    persona.load("type");
                    persona.context.sync().then(function () {
                        resolve(OfficeCore.PersonaType[persona.type.valueOf()]);
                    });
                };
                var check = function () {
                    return _this.getIsPersonaInfoResolvedCheck();
                };
                _this.performAsyncOperation(type, PersonaDataUpdated.personaInfo, action, check);
            });
        };
        PersonaCustom.prototype.getCustomizationsAsync = function (type) {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var persona = _this;
                var action = function () {
                    var customizations = persona.getCustomizations();
                    persona.context.sync().then(function () {
                        resolve(customizations.value);
                    });
                };
                var check = function () {
                    return _this.getIsPersonaInfoResolvedCheck();
                };
                _this.performAsyncOperation(type, PersonaDataUpdated.personaInfo, action, check);
            });
        };
        PersonaCustom.prototype.getMembersAsync = function (type) {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, rejcet) {
                var persona = _this;
                var action = function () {
                    var members = persona.getMembers();
                    members.load("isWarmedUp");
                    persona.context.sync().then(function () {
                        resolve(members);
                    });
                };
                var check = function () {
                    return new OfficeExtension.CoreUtility.Promise(function (isWarmedUpResolve, isWarmedUpReject) {
                        var members = persona.getMembers();
                        members.load("isWarmedUp");
                        persona.context.sync().then(function () {
                            isWarmedUpResolve(members.isWarmedUp);
                        });
                    });
                };
                _this.performAsyncOperation(type, PersonaDataUpdated.members, action, check);
            });
        };
        PersonaCustom.prototype.getMembershipAsync = function (type) {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var persona = _this;
                var action = function () {
                    var membership = persona.getMembership();
                    membership.load("*");
                    persona.context.sync().then(function () {
                        resolve(membership);
                    });
                };
                var check = function () {
                    return new OfficeExtension.CoreUtility.Promise(function (isWarmedUpResolve) {
                        var membership = persona.getMembership();
                        membership.load("isWarmedUp");
                        persona.context.sync().then(function () {
                            isWarmedUpResolve(membership.isWarmedUp);
                        });
                    });
                };
                _this.performAsyncOperation(type, PersonaDataUpdated.membership, action, check);
            });
        };
        PersonaCustom.prototype.getPersonaLifetime = function () {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var persona = _this;
                persona.load("instanceId");
                persona.context.sync().then(function () {
                    var peopleApi = new PeopleApiContext(persona.context, persona.instanceId);
                    peopleApi.getPersonaLifetime().then(function (lifetime) {
                        resolve(lifetime);
                    });
                });
            });
        };
        return PersonaCustom;
    }());
    OfficeCore.PersonaCustom = PersonaCustom;
    OfficeExtension.Utility.applyMixin(Persona, PersonaCustom);
    var _typePersonaLifetime = "PersonaLifetime";
    var PersonaLifetime = (function (_super) {
        __extends(PersonaLifetime, _super);
        function PersonaLifetime() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PersonaLifetime.prototype, "_className", {
            get: function () {
                return "PersonaLifetime";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaLifetime.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["instanceId"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaLifetime.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["InstanceId"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PersonaLifetime.prototype, "instanceId", {
            get: function () {
                _throwIfNotLoaded("instanceId", this._I, _typePersonaLifetime, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        PersonaLifetime.prototype.getPersona = function (hostId) {
            return _createMethodObject(OfficeCore.Persona, this, "GetPersona", 1, [hostId], false, false, null, 4);
        };
        PersonaLifetime.prototype.getPersonaForOrgByEntryId = function (entryId, name, sip, smtp) {
            return _createMethodObject(OfficeCore.Persona, this, "GetPersonaForOrgByEntryId", 1, [entryId, name, sip, smtp], false, false, null, 4);
        };
        PersonaLifetime.prototype.getPersonaForOrgEntry = function (name, sip, smtp, entryId) {
            return _createMethodObject(OfficeCore.Persona, this, "GetPersonaForOrgEntry", 1, [name, sip, smtp, entryId], false, false, null, 4);
        };
        PersonaLifetime.prototype.getPolicies = function () {
            return _invokeMethod(this, "GetPolicies", 1, [], 4, 0);
        };
        PersonaLifetime.prototype.getTextScaleFactor = function () {
            return _invokeMethod(this, "GetTextScaleFactor", 1, [], 4, 0);
        };
        PersonaLifetime.prototype._RegisterPersonaUpdatedEvent = function () {
            _invokeMethod(this, "_RegisterPersonaUpdatedEvent", 0, [], 0, 0);
        };
        PersonaLifetime.prototype._UnregisterPersonaUpdatedEvent = function () {
            _invokeMethod(this, "_UnregisterPersonaUpdatedEvent", 0, [], 0, 0);
        };
        PersonaLifetime.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["InstanceId"])) {
                this._I = obj["InstanceId"];
            }
        };
        PersonaLifetime.prototype.load = function (options) {
            return _load(this, options);
        };
        PersonaLifetime.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PersonaLifetime.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(PersonaLifetime.prototype, "onPersonaUpdated", {
            get: function () {
                var _this = this;
                if (!this.m_personaUpdated) {
                    this.m_personaUpdated = new OfficeExtension.GenericEventHandlers(this.context, this, "PersonaUpdated", {
                        eventType: 3502,
                        registerFunc: function () { return _this._RegisterPersonaUpdatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterPersonaUpdatedEvent(); },
                        getTargetIdFunc: function () { return _this.instanceId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                dataUpdated: value.dataUpdated,
                                sendingPersonaHostId: value.sendingPersonaHostId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_personaUpdated;
            },
            enumerable: true,
            configurable: true
        });
        PersonaLifetime.prototype.toJSON = function () {
            return _toJson(this, {
                "instanceId": this._I
            }, {});
        };
        PersonaLifetime.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PersonaLifetime.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PersonaLifetime;
    }(OfficeExtension.ClientObject));
    OfficeCore.PersonaLifetime = PersonaLifetime;
    var _typeLokiTokenProvider = "LokiTokenProvider";
    var LokiTokenProvider = (function (_super) {
        __extends(LokiTokenProvider, _super);
        function LokiTokenProvider() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(LokiTokenProvider.prototype, "_className", {
            get: function () {
                return "LokiTokenProvider";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LokiTokenProvider.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["emailOrUpn", "instanceId"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LokiTokenProvider.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["EmailOrUpn", "InstanceId"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LokiTokenProvider.prototype, "emailOrUpn", {
            get: function () {
                _throwIfNotLoaded("emailOrUpn", this._E, _typeLokiTokenProvider, this._isNull);
                return this._E;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LokiTokenProvider.prototype, "instanceId", {
            get: function () {
                _throwIfNotLoaded("instanceId", this._I, _typeLokiTokenProvider, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        LokiTokenProvider.prototype.requestClientAccessToken = function () {
            _invokeMethod(this, "RequestClientAccessToken", 0, [], 0, 0);
        };
        LokiTokenProvider.prototype.requestIdentityUniqueId = function () {
            _invokeMethod(this, "RequestIdentityUniqueId", 0, [], 0, 0);
        };
        LokiTokenProvider.prototype.requestToken = function () {
            _invokeMethod(this, "RequestToken", 0, [], 0, 0);
        };
        LokiTokenProvider.prototype._RegisterClientAccessTokenAvailableEvent = function () {
            _invokeMethod(this, "_RegisterClientAccessTokenAvailableEvent", 0, [], 0, 0);
        };
        LokiTokenProvider.prototype._RegisterIdentityUniqueIdAvailableEvent = function () {
            _invokeMethod(this, "_RegisterIdentityUniqueIdAvailableEvent", 0, [], 0, 0);
        };
        LokiTokenProvider.prototype._RegisterLokiTokenAvailableEvent = function () {
            _invokeMethod(this, "_RegisterLokiTokenAvailableEvent", 0, [], 0, 0);
        };
        LokiTokenProvider.prototype._UnregisterClientAccessTokenAvailableEvent = function () {
            _invokeMethod(this, "_UnregisterClientAccessTokenAvailableEvent", 0, [], 0, 0);
        };
        LokiTokenProvider.prototype._UnregisterIdentityUniqueIdAvailableEvent = function () {
            _invokeMethod(this, "_UnregisterIdentityUniqueIdAvailableEvent", 0, [], 0, 0);
        };
        LokiTokenProvider.prototype._UnregisterLokiTokenAvailableEvent = function () {
            _invokeMethod(this, "_UnregisterLokiTokenAvailableEvent", 0, [], 0, 0);
        };
        LokiTokenProvider.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["EmailOrUpn"])) {
                this._E = obj["EmailOrUpn"];
            }
            if (!_isUndefined(obj["InstanceId"])) {
                this._I = obj["InstanceId"];
            }
        };
        LokiTokenProvider.prototype.load = function (options) {
            return _load(this, options);
        };
        LokiTokenProvider.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        LokiTokenProvider.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(LokiTokenProvider.prototype, "onClientAccessTokenAvailable", {
            get: function () {
                var _this = this;
                if (!this.m_clientAccessTokenAvailable) {
                    this.m_clientAccessTokenAvailable = new OfficeExtension.GenericEventHandlers(this.context, this, "ClientAccessTokenAvailable", {
                        eventType: 3505,
                        registerFunc: function () { return _this._RegisterClientAccessTokenAvailableEvent(); },
                        unregisterFunc: function () { return _this._UnregisterClientAccessTokenAvailableEvent(); },
                        getTargetIdFunc: function () { return _this.instanceId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                clientAccessToken: value.clientAccessToken,
                                isAvailable: value.isAvailable,
                                tokenTTLInSeconds: value.tokenTTLInSeconds
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_clientAccessTokenAvailable;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LokiTokenProvider.prototype, "onIdentityUniqueIdAvailable", {
            get: function () {
                var _this = this;
                if (!this.m_identityUniqueIdAvailable) {
                    this.m_identityUniqueIdAvailable = new OfficeExtension.GenericEventHandlers(this.context, this, "IdentityUniqueIdAvailable", {
                        eventType: 3504,
                        registerFunc: function () { return _this._RegisterIdentityUniqueIdAvailableEvent(); },
                        unregisterFunc: function () { return _this._UnregisterIdentityUniqueIdAvailableEvent(); },
                        getTargetIdFunc: function () { return _this.instanceId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                isAvailable: value.isAvailable,
                                uniqueId: value.uniqueId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_identityUniqueIdAvailable;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LokiTokenProvider.prototype, "onLokiTokenAvailable", {
            get: function () {
                var _this = this;
                if (!this.m_lokiTokenAvailable) {
                    this.m_lokiTokenAvailable = new OfficeExtension.GenericEventHandlers(this.context, this, "LokiTokenAvailable", {
                        eventType: 3503,
                        registerFunc: function () { return _this._RegisterLokiTokenAvailableEvent(); },
                        unregisterFunc: function () { return _this._UnregisterLokiTokenAvailableEvent(); },
                        getTargetIdFunc: function () { return _this.instanceId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                isAvailable: value.isAvailable,
                                lokiAutoDiscoverUrl: value.lokiAutoDiscoverUrl,
                                lokiToken: value.lokiToken
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_lokiTokenAvailable;
            },
            enumerable: true,
            configurable: true
        });
        LokiTokenProvider.prototype.toJSON = function () {
            return _toJson(this, {
                "emailOrUpn": this._E,
                "instanceId": this._I
            }, {});
        };
        LokiTokenProvider.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        LokiTokenProvider.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return LokiTokenProvider;
    }(OfficeExtension.ClientObject));
    OfficeCore.LokiTokenProvider = LokiTokenProvider;
    var _typeLokiTokenProviderFactory = "LokiTokenProviderFactory";
    var LokiTokenProviderFactory = (function (_super) {
        __extends(LokiTokenProviderFactory, _super);
        function LokiTokenProviderFactory() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(LokiTokenProviderFactory.prototype, "_className", {
            get: function () {
                return "LokiTokenProviderFactory";
            },
            enumerable: true,
            configurable: true
        });
        LokiTokenProviderFactory.prototype.getLokiTokenProvider = function (accountName) {
            return _createMethodObject(OfficeCore.LokiTokenProvider, this, "GetLokiTokenProvider", 1, [accountName], false, false, null, 4);
        };
        LokiTokenProviderFactory.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        LokiTokenProviderFactory.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        LokiTokenProviderFactory.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.LokiTokenProviderFactory, context, "Microsoft.People.LokiTokenProviderFactory", false, 4);
        };
        LokiTokenProviderFactory.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return LokiTokenProviderFactory;
    }(OfficeExtension.ClientObject));
    OfficeCore.LokiTokenProviderFactory = LokiTokenProviderFactory;
    var _typeServiceContext = "ServiceContext";
    var PeopleApiContext = (function () {
        function PeopleApiContext(context, instanceId) {
            this.context = context;
            this.instanceId = instanceId;
        }
        Object.defineProperty(PeopleApiContext.prototype, "serviceContext", {
            get: function () {
                if (!this.m_serviceConext) {
                    this.m_serviceConext = OfficeCore.ServiceContext.newObject(this.context);
                }
                return this.m_serviceConext;
            },
            enumerable: true,
            configurable: true
        });
        PeopleApiContext.prototype.getPersonaLifetime = function () {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var lifetime = _this.serviceContext.getPersonaLifetime(_this.instanceId);
                _this.context.sync().then(function () {
                    lifetime.load("instanceId");
                    _this.context.sync().then(function () {
                        resolve(lifetime);
                    });
                });
            });
        };
        PeopleApiContext.prototype.getInitialPersona = function () {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var persona = _this.serviceContext.getInitialPersona(_this.instanceId);
                _this.context.sync().then(function () {
                    resolve(persona);
                });
            });
        };
        PeopleApiContext.prototype.getLokiTokenProvider = function () {
            var _this = this;
            return new OfficeExtension.CoreUtility.Promise(function (resolve, reject) {
                var provider = _this.serviceContext.getLokiTokenProvider(_this.instanceId);
                _this.context.sync().then(function () {
                    provider.load("instanceId");
                    _this.context.sync().then(function () {
                        resolve(provider);
                    });
                });
            });
        };
        return PeopleApiContext;
    }());
    OfficeCore.PeopleApiContext = PeopleApiContext;
    var ServiceContext = (function (_super) {
        __extends(ServiceContext, _super);
        function ServiceContext() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ServiceContext.prototype, "_className", {
            get: function () {
                return "ServiceContext";
            },
            enumerable: true,
            configurable: true
        });
        ServiceContext.prototype.accountEmailOrUpn = function (instanceId) {
            return _invokeMethod(this, "AccountEmailOrUpn", 1, [instanceId], 4, 0);
        };
        ServiceContext.prototype.dispose = function (instance) {
            _invokeMethod(this, "Dispose", 0, [instance], 0, 0);
        };
        ServiceContext.prototype.getInitialPersona = function (instanceId) {
            return _createMethodObject(OfficeCore.Persona, this, "GetInitialPersona", 1, [instanceId], false, false, null, 4);
        };
        ServiceContext.prototype.getLokiTokenProvider = function (instanceId) {
            return _createMethodObject(OfficeCore.LokiTokenProvider, this, "GetLokiTokenProvider", 1, [instanceId], false, false, null, 4);
        };
        ServiceContext.prototype.getPersonaLifetime = function (instanceId) {
            return _createMethodObject(OfficeCore.PersonaLifetime, this, "GetPersonaLifetime", 1, [instanceId], false, false, null, 4);
        };
        ServiceContext.prototype.getPersonaPolicies = function () {
            return _invokeMethod(this, "GetPersonaPolicies", 1, [], 4, 0);
        };
        ServiceContext.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        ServiceContext.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ServiceContext.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.ServiceContext, context, "Microsoft.People.ServiceContext", false, 4);
        };
        ServiceContext.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return ServiceContext;
    }(OfficeExtension.ClientObject));
    OfficeCore.ServiceContext = ServiceContext;
    var _typeRichapiPcxFeatureChecks = "RichapiPcxFeatureChecks";
    var RichapiPcxFeatureChecks = (function (_super) {
        __extends(RichapiPcxFeatureChecks, _super);
        function RichapiPcxFeatureChecks() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RichapiPcxFeatureChecks.prototype, "_className", {
            get: function () {
                return "RichapiPcxFeatureChecks";
            },
            enumerable: true,
            configurable: true
        });
        RichapiPcxFeatureChecks.prototype.isAddChangePhotoLinkOnLpcPersonaImageFlightEnabled = function () {
            return _invokeMethod(this, "IsAddChangePhotoLinkOnLpcPersonaImageFlightEnabled", 1, [], 4, 0);
        };
        RichapiPcxFeatureChecks.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        RichapiPcxFeatureChecks.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RichapiPcxFeatureChecks.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.RichapiPcxFeatureChecks, context, "Microsoft.People.RichapiPcxFeatureChecks", false, 4);
        };
        RichapiPcxFeatureChecks.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return RichapiPcxFeatureChecks;
    }(OfficeExtension.ClientObject));
    OfficeCore.RichapiPcxFeatureChecks = RichapiPcxFeatureChecks;
    var _typeTap = "Tap";
    var Tap = (function (_super) {
        __extends(Tap, _super);
        function Tap() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Tap.prototype, "_className", {
            get: function () {
                return "Tap";
            },
            enumerable: true,
            configurable: true
        });
        Tap.prototype.getEnterpriseUserInfo = function () {
            return _invokeMethod(this, "GetEnterpriseUserInfo", 1, [], 4 | 1, 0);
        };
        Tap.prototype.getMruFriendlyPath = function (documentUrl) {
            return _invokeMethod(this, "GetMruFriendlyPath", 1, [documentUrl], 4 | 1, 0);
        };
        Tap.prototype.launchFileUrlInOfficeApp = function (documentUrl, useUniversalAsBackup) {
            return _invokeMethod(this, "LaunchFileUrlInOfficeApp", 1, [documentUrl, useUniversalAsBackup], 4 | 1, 0);
        };
        Tap.prototype.performLocalSearch = function (query, numResultsRequested, supportedFileExtensions, documentUrlToExclude) {
            return _invokeMethod(this, "PerformLocalSearch", 1, [query, numResultsRequested, supportedFileExtensions, documentUrlToExclude], 4 | 1, 0);
        };
        Tap.prototype.readSearchCache = function (keyword, expiredHours, filterObjectType) {
            return _invokeMethod(this, "ReadSearchCache", 1, [keyword, expiredHours, filterObjectType], 4 | 1, 0);
        };
        Tap.prototype.writeSearchCache = function (fileContent, keyword, filterObjectType) {
            return _invokeMethod(this, "WriteSearchCache", 1, [fileContent, keyword, filterObjectType], 4 | 1, 0);
        };
        Tap.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        Tap.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Tap.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.Tap, context, "Microsoft.TapRichApi.Tap", false, 4);
        };
        Tap.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return Tap;
    }(OfficeExtension.ClientObject));
    OfficeCore.Tap = Tap;
    var ObjectType;
    (function (ObjectType) {
        ObjectType["unknown"] = "Unknown";
        ObjectType["chart"] = "Chart";
        ObjectType["smartArt"] = "SmartArt";
        ObjectType["table"] = "Table";
        ObjectType["image"] = "Image";
        ObjectType["slide"] = "Slide";
        ObjectType["ole"] = "OLE";
        ObjectType["text"] = "Text";
    })(ObjectType = OfficeCore.ObjectType || (OfficeCore.ObjectType = {}));
    var _typeAppRuntimePersistenceService = "AppRuntimePersistenceService";
    var AppRuntimePersistenceService = (function (_super) {
        __extends(AppRuntimePersistenceService, _super);
        function AppRuntimePersistenceService() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(AppRuntimePersistenceService.prototype, "_className", {
            get: function () {
                return "AppRuntimePersistenceService";
            },
            enumerable: true,
            configurable: true
        });
        AppRuntimePersistenceService.prototype.getAppRuntimeStartState = function () {
            return _invokeMethod(this, "GetAppRuntimeStartState", 1, [], 4, 0);
        };
        AppRuntimePersistenceService.prototype.setAppRuntimeStartState = function (appRuntimeState) {
            _invokeMethod(this, "SetAppRuntimeStartState", 0, [appRuntimeState], _calculateApiFlags(2, "SharedRuntimeInternal", "1.2"), 0);
        };
        AppRuntimePersistenceService.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        AppRuntimePersistenceService.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        AppRuntimePersistenceService.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.AppRuntimePersistenceService, context, "Microsoft.AppRuntime.AppRuntimePersistenceService", false, 4);
        };
        AppRuntimePersistenceService.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return AppRuntimePersistenceService;
    }(OfficeExtension.ClientObject));
    OfficeCore.AppRuntimePersistenceService = AppRuntimePersistenceService;
    var _typeAppRuntimeService = "AppRuntimeService";
    var AppRuntimeService = (function (_super) {
        __extends(AppRuntimeService, _super);
        function AppRuntimeService() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(AppRuntimeService.prototype, "_className", {
            get: function () {
                return "AppRuntimeService";
            },
            enumerable: true,
            configurable: true
        });
        AppRuntimeService.prototype.getAppRuntimeState = function () {
            return _invokeMethod(this, "GetAppRuntimeState", 1, [], 4, 0);
        };
        AppRuntimeService.prototype.setAppRuntimeState = function (appRuntimeState) {
            _invokeMethod(this, "SetAppRuntimeState", 0, [appRuntimeState], _calculateApiFlags(2, "SharedRuntimeInternal", "1.2"), 0);
        };
        AppRuntimeService.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        AppRuntimeService.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        AppRuntimeService.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.AppRuntimeService, context, "Microsoft.AppRuntime.AppRuntimeService", false, 4);
        };
        Object.defineProperty(AppRuntimeService.prototype, "onVisibilityChanged", {
            get: function () {
                if (!this.m_visibilityChanged) {
                    this.m_visibilityChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "VisibilityChanged", {
                        eventType: 65539,
                        registerFunc: function () { return OfficeExtension.Utility._createPromiseFromResult(null); },
                        unregisterFunc: function () { return OfficeExtension.Utility._createPromiseFromResult(null); },
                        getTargetIdFunc: function () { return ""; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                visibility: value.visibility
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_visibilityChanged;
            },
            enumerable: true,
            configurable: true
        });
        AppRuntimeService.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return AppRuntimeService;
    }(OfficeExtension.ClientObject));
    OfficeCore.AppRuntimeService = AppRuntimeService;
    var AppRuntimeState;
    (function (AppRuntimeState) {
        AppRuntimeState["inactive"] = "Inactive";
        AppRuntimeState["background"] = "Background";
        AppRuntimeState["visible"] = "Visible";
    })(AppRuntimeState = OfficeCore.AppRuntimeState || (OfficeCore.AppRuntimeState = {}));
    var Visibility;
    (function (Visibility) {
        Visibility["hidden"] = "Hidden";
        Visibility["visible"] = "Visible";
    })(Visibility = OfficeCore.Visibility || (OfficeCore.Visibility = {}));
    var LicenseFeatureTier;
    (function (LicenseFeatureTier) {
        LicenseFeatureTier["unknown"] = "Unknown";
        LicenseFeatureTier["basic"] = "Basic";
        LicenseFeatureTier["premium"] = "Premium";
    })(LicenseFeatureTier = OfficeCore.LicenseFeatureTier || (OfficeCore.LicenseFeatureTier = {}));
    var _typeLicense = "License";
    var License = (function (_super) {
        __extends(License, _super);
        function License() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(License.prototype, "_className", {
            get: function () {
                return "License";
            },
            enumerable: true,
            configurable: true
        });
        License.prototype.getFeatureTier = function (feature, fallbackValue) {
            return _invokeMethod(this, "GetFeatureTier", 1, [feature, fallbackValue], 4, 0);
        };
        License.prototype.getLicenseFeature = function (feature) {
            return _createMethodObject(OfficeCore.LicenseFeature, this, "GetLicenseFeature", 1, [feature], false, false, null, 4);
        };
        License.prototype.getMsaDeviceTicket = function (resource, policy, options) {
            return _invokeMethod(this, "GetMsaDeviceTicket", 1, [resource, policy, options], 4 | 1, 0);
        };
        License.prototype.isFeatureEnabled = function (feature, fallbackValue) {
            return _invokeMethod(this, "IsFeatureEnabled", 1, [feature, fallbackValue], 4, 0);
        };
        License.prototype.isFreemiumUpsellEnabled = function () {
            return _invokeMethod(this, "IsFreemiumUpsellEnabled", 1, [], 4, 0);
        };
        License.prototype.launchUpsellExperience = function (experienceId) {
            _invokeMethod(this, "LaunchUpsellExperience", 1, [experienceId], 4, 0);
        };
        License.prototype._TestFireStateChangedEvent = function (feature) {
            _invokeMethod(this, "_TestFireStateChangedEvent", 0, [feature], 1, 0);
        };
        License.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        License.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        License.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.License, context, "Microsoft.Office.Licensing.License", false, 4);
        };
        License.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return License;
    }(OfficeExtension.ClientObject));
    OfficeCore.License = License;
    var _typeLicenseFeature = "LicenseFeature";
    var LicenseFeature = (function (_super) {
        __extends(LicenseFeature, _super);
        function LicenseFeature() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(LicenseFeature.prototype, "_className", {
            get: function () {
                return "LicenseFeature";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LicenseFeature.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LicenseFeature.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LicenseFeature.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeLicenseFeature, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        LicenseFeature.prototype._RegisterStateChange = function () {
            _invokeMethod(this, "_RegisterStateChange", 1, [], 4, 0);
        };
        LicenseFeature.prototype._UnregisterStateChange = function () {
            _invokeMethod(this, "_UnregisterStateChange", 1, [], 4, 0);
        };
        LicenseFeature.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
        };
        LicenseFeature.prototype.load = function (options) {
            return _load(this, options);
        };
        LicenseFeature.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        LicenseFeature.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        LicenseFeature.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(LicenseFeature.prototype, "onStateChanged", {
            get: function () {
                var _this = this;
                if (!this.m_stateChanged) {
                    this.m_stateChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "StateChanged", {
                        eventType: 1,
                        registerFunc: function () { return _this._RegisterStateChange(); },
                        unregisterFunc: function () { return _this._UnregisterStateChange(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.LicenseFeature_StateChanged_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_stateChanged;
            },
            enumerable: true,
            configurable: true
        });
        LicenseFeature.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I
            }, {});
        };
        LicenseFeature.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        LicenseFeature.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return LicenseFeature;
    }(OfficeExtension.ClientObject));
    OfficeCore.LicenseFeature = LicenseFeature;
    (function (_CC) {
        function LicenseFeature_StateChanged_EventArgsTransform(thisObj, args) {
            var newArgs = {
                feature: args.featureName,
                isEnabled: args.isEnabled,
                tier: args.tierName
            };
            if (args.tierName) {
                newArgs.tier = args.tierName == 0 ? LicenseFeatureTier.unknown :
                    args.tierName == 1 ? LicenseFeatureTier.basic :
                        args.tierName == 2 ? LicenseFeatureTier.premium :
                            args.tierName;
            }
            return newArgs;
        }
        _CC.LicenseFeature_StateChanged_EventArgsTransform = LicenseFeature_StateChanged_EventArgsTransform;
    })(_CC = OfficeCore._CC || (OfficeCore._CC = {}));
    var _typeMsaDeviceTicketOptions = "MsaDeviceTicketOptions";
    var MsaDeviceTicketOptions = (function (_super) {
        __extends(MsaDeviceTicketOptions, _super);
        function MsaDeviceTicketOptions() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(MsaDeviceTicketOptions.prototype, "_className", {
            get: function () {
                return "MsaDeviceTicketOptions";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(MsaDeviceTicketOptions.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["scopes"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(MsaDeviceTicketOptions.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Scopes"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(MsaDeviceTicketOptions.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(MsaDeviceTicketOptions.prototype, "scopes", {
            get: function () {
                _throwIfNotLoaded("scopes", this._S, _typeMsaDeviceTicketOptions, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Scopes", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        MsaDeviceTicketOptions.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["scopes"], [], []);
        };
        MsaDeviceTicketOptions.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        MsaDeviceTicketOptions.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Scopes"])) {
                this._S = obj["Scopes"];
            }
        };
        MsaDeviceTicketOptions.prototype.load = function (options) {
            return _load(this, options);
        };
        MsaDeviceTicketOptions.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        MsaDeviceTicketOptions.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        MsaDeviceTicketOptions.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.MsaDeviceTicketOptions, context, "Microsoft.Office.Licensing.MsaDeviceTicketOptions", false, 4);
        };
        MsaDeviceTicketOptions.prototype.toJSON = function () {
            return _toJson(this, {
                "scopes": this._S
            }, {});
        };
        MsaDeviceTicketOptions.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        MsaDeviceTicketOptions.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return MsaDeviceTicketOptions;
    }(OfficeExtension.ClientObject));
    OfficeCore.MsaDeviceTicketOptions = MsaDeviceTicketOptions;
    var _typeDialogPage = "DialogPage";
    var DialogPage = (function (_super) {
        __extends(DialogPage, _super);
        function DialogPage() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(DialogPage.prototype, "_className", {
            get: function () {
                return "DialogPage";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DialogPage.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DialogPage.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DialogPage.prototype, "_Id", {
            get: function () {
                _throwIfNotLoaded("_Id", this.__I, _typeDialogPage, this._isNull);
                return this.__I;
            },
            enumerable: true,
            configurable: true
        });
        DialogPage.prototype.close = function () {
            _invokeMethod(this, "Close", 1, [], 4, 0);
        };
        DialogPage.prototype.readyToShow = function () {
            _invokeMethod(this, "ReadyToShow", 1, [], 4, 0);
        };
        DialogPage.prototype.registerOnShow = function () {
            _invokeMethod(this, "RegisterOnShow", 1, [], 4, 0);
        };
        DialogPage.prototype.sendMessageToHost = function (message) {
            _invokeMethod(this, "SendMessageToHost", 1, [message], 4, 0);
        };
        DialogPage.prototype.unregisterOnShow = function () {
            _invokeMethod(this, "UnregisterOnShow", 1, [], 4, 0);
        };
        DialogPage.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["_Id"])) {
                this.__I = obj["_Id"];
            }
        };
        DialogPage.prototype.load = function (options) {
            return _load(this, options);
        };
        DialogPage.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_Id"])) {
                this.__I = value["_Id"];
            }
        };
        DialogPage.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        DialogPage.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.DialogPage, context, "Microsoft.Office.DialogPage.DialogPage", false, 4);
        };
        Object.defineProperty(DialogPage.prototype, "onOnShowEvent", {
            get: function () {
                var _this = this;
                if (!this.m_onShowEvent) {
                    this.m_onShowEvent = new OfficeExtension.GenericEventHandlers(this.context, this, "OnShowEvent", {
                        eventType: 1,
                        registerFunc: function () { return _this.registerOnShow(); },
                        unregisterFunc: function () { return _this.unregisterOnShow(); },
                        getTargetIdFunc: function () { return _this._Id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {};
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_onShowEvent;
            },
            enumerable: true,
            configurable: true
        });
        DialogPage.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return DialogPage;
    }(OfficeExtension.ClientObject));
    OfficeCore.DialogPage = DialogPage;
    var _typeActionService = "ActionService";
    var ActionService = (function (_super) {
        __extends(ActionService, _super);
        function ActionService() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ActionService.prototype, "_className", {
            get: function () {
                return "ActionService";
            },
            enumerable: true,
            configurable: true
        });
        ActionService.prototype.areShortcutsInUse = function (shortcuts) {
            return _invokeMethod(this, "AreShortcutsInUse", 0, [shortcuts], 0, 0);
        };
        ActionService.prototype.getShortcuts = function () {
            return _invokeMethod(this, "GetShortcuts", 1, [], 4, 0);
        };
        ActionService.prototype.replaceShortcuts = function (shortcuts) {
            _invokeMethod(this, "ReplaceShortcuts", 0, [shortcuts], 0, 0);
        };
        ActionService.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        ActionService.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ActionService.newObject = function (context) {
            return _createTopLevelServiceObject(OfficeCore.ActionService, context, "Microsoft.Office.ActionService", false, 4);
        };
        ActionService.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return ActionService;
    }(OfficeExtension.ClientObject));
    OfficeCore.ActionService = ActionService;
    var ErrorCodes;
    (function (ErrorCodes) {
        ErrorCodes["apiNotAvailable"] = "ApiNotAvailable";
        ErrorCodes["clientError"] = "ClientError";
        ErrorCodes["controlIdNotFound"] = "ControlIdNotFound";
        ErrorCodes["entryIdRequired"] = "EntryIdRequired";
        ErrorCodes["generalException"] = "GeneralException";
        ErrorCodes["hostRestartNeeded"] = "HostRestartNeeded";
        ErrorCodes["instanceNotFound"] = "InstanceNotFound";
        ErrorCodes["interactiveFlowAborted"] = "InteractiveFlowAborted";
        ErrorCodes["invalidArgument"] = "InvalidArgument";
        ErrorCodes["invalidGrant"] = "InvalidGrant";
        ErrorCodes["invalidResourceUrl"] = "InvalidResourceUrl";
        ErrorCodes["invalidRibbonDefinition"] = "InvalidRibbonDefinition";
        ErrorCodes["objectNotFound"] = "ObjectNotFound";
        ErrorCodes["resourceNotSupported"] = "ResourceNotSupported";
        ErrorCodes["serverError"] = "ServerError";
        ErrorCodes["serviceUrlNotFound"] = "ServiceUrlNotFound";
        ErrorCodes["sharedRuntimeNotAvailable"] = "SharedRuntimeNotAvailable";
        ErrorCodes["ticketInvalidParams"] = "TicketInvalidParams";
        ErrorCodes["ticketNetworkError"] = "TicketNetworkError";
        ErrorCodes["ticketUnauthorized"] = "TicketUnauthorized";
        ErrorCodes["ticketUninitialized"] = "TicketUninitialized";
        ErrorCodes["ticketUnknownError"] = "TicketUnknownError";
        ErrorCodes["unexpectedError"] = "UnexpectedError";
        ErrorCodes["unsupportedUserIdentity"] = "UnsupportedUserIdentity";
        ErrorCodes["userNotSignedIn"] = "UserNotSignedIn";
    })(ErrorCodes = OfficeCore.ErrorCodes || (OfficeCore.ErrorCodes = {}));
    var Interfaces;
    (function (Interfaces) {
    })(Interfaces = OfficeCore.Interfaces || (OfficeCore.Interfaces = {}));
})(OfficeCore || (OfficeCore = {}));
var Office;
(function (Office) {
    var VisibilityMode;
    (function (VisibilityMode) {
        VisibilityMode["hidden"] = "Hidden";
        VisibilityMode["taskpane"] = "Taskpane";
    })(VisibilityMode = Office.VisibilityMode || (Office.VisibilityMode = {}));
    var StartupBehavior;
    (function (StartupBehavior) {
        StartupBehavior["none"] = "None";
        StartupBehavior["load"] = "Load";
    })(StartupBehavior = Office.StartupBehavior || (Office.StartupBehavior = {}));
    var addin;
    (function (addin) {
        function _createRequestContext(wacPartition) {
            var context = new OfficeCore.RequestContext();
            context._requestFlagModifier |= 64;
            if (wacPartition) {
                context._customData = 'WacPartition';
            }
            return context;
        }
        function setStartupBehavior(behavior) {
            return __awaiter(this, void 0, void 0, function () {
                var state, context, appRuntimePersistenceService;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            if (behavior !== StartupBehavior.load && behavior !== StartupBehavior.none) {
                                throw OfficeExtension.Utility.createRuntimeError(OfficeExtension.ErrorCodes.invalidArgument, null, null);
                            }
                            state = (behavior == StartupBehavior.load ? OfficeCore.AppRuntimeState.background : OfficeCore.AppRuntimeState.inactive);
                            context = _createRequestContext(false);
                            appRuntimePersistenceService = OfficeCore.AppRuntimePersistenceService.newObject(context);
                            appRuntimePersistenceService.setAppRuntimeStartState(state);
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2];
                    }
                });
            });
        }
        addin.setStartupBehavior = setStartupBehavior;
        function getStartupBehavior() {
            return __awaiter(this, void 0, void 0, function () {
                var context, appRuntimePersistenceService, stateResult, state, ret;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext(false);
                            appRuntimePersistenceService = OfficeCore.AppRuntimePersistenceService.newObject(context);
                            stateResult = appRuntimePersistenceService.getAppRuntimeStartState();
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            state = stateResult.value;
                            ret = (state == OfficeCore.AppRuntimeState.inactive ? StartupBehavior.none : StartupBehavior.load);
                            return [2, ret];
                    }
                });
            });
        }
        addin.getStartupBehavior = getStartupBehavior;
        function _setState(state) {
            return __awaiter(this, void 0, void 0, function () {
                var context, appRuntimeService;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext(true);
                            appRuntimeService = OfficeCore.AppRuntimeService.newObject(context);
                            appRuntimeService.setAppRuntimeState(state);
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2];
                    }
                });
            });
        }
        function _getState() {
            return __awaiter(this, void 0, void 0, function () {
                var context, appRuntimeService, stateResult;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext(true);
                            appRuntimeService = OfficeCore.AppRuntimeService.newObject(context);
                            stateResult = appRuntimeService.getAppRuntimeState();
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2, stateResult.value];
                    }
                });
            });
        }
        addin._getState = _getState;
        function showAsTaskpane() {
            return _setState(OfficeCore.AppRuntimeState.visible);
        }
        addin.showAsTaskpane = showAsTaskpane;
        function hide() {
            return _setState(OfficeCore.AppRuntimeState.background);
        }
        addin.hide = hide;
        var _appRuntimeEvent;
        function _getAppRuntimeEventService() {
            if (!_appRuntimeEvent) {
                var context = _createRequestContext(true);
                _appRuntimeEvent = OfficeCore.AppRuntimeService.newObject(context);
            }
            return _appRuntimeEvent;
        }
        function _convertVisibilityToVisibilityMode(visibility) {
            if (visibility === OfficeCore.Visibility.visible) {
                return VisibilityMode.taskpane;
            }
            return VisibilityMode.hidden;
        }
        function onVisibilityModeChanged(listener) {
            return __awaiter(this, void 0, void 0, function () {
                var eventService, registrationToken, ret;
                var _this = this;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            eventService = _getAppRuntimeEventService();
                            registrationToken = eventService.onVisibilityChanged.add(function (args) {
                                if (listener) {
                                    var msg = {
                                        visibilityMode: _convertVisibilityToVisibilityMode(args.visibility)
                                    };
                                    listener(msg);
                                }
                                return null;
                            });
                            return [4, eventService.context.sync()];
                        case 1:
                            _a.sent();
                            ret = function () {
                                return __awaiter(_this, void 0, void 0, function () {
                                    return __generator(this, function (_a) {
                                        switch (_a.label) {
                                            case 0:
                                                registrationToken.remove();
                                                return [4, eventService.context.sync()];
                                            case 1:
                                                _a.sent();
                                                return [2];
                                        }
                                    });
                                });
                            };
                            return [2, ret];
                    }
                });
            });
        }
        addin.onVisibilityModeChanged = onVisibilityModeChanged;
    })(addin = Office.addin || (Office.addin = {}));
})(Office || (Office = {}));
var Office;
(function (Office) {
    var ribbon;
    (function (ribbon_1) {
        function _createRequestContext() {
            var context = new OfficeCore.RequestContext();
            if (OSF._OfficeAppFactory.getHostInfo().hostPlatform == 'web') {
                context._customData = 'WacPartition';
            }
            return context;
        }
        function requestUpdate(input) {
            var requestContext = _createRequestContext();
            var ribbon = requestContext.ribbon;
            function processControls(parent) {
                if (parent.controls !== undefined
                    && parent.controls.length !== undefined
                    && !!parent.controls.length) {
                    parent.controls
                        .filter(function (control) { return !(!control.id); })
                        .forEach(function (control) {
                        var ribbonControl = ribbon.getButton(control.id);
                        if (control.enabled !== undefined && control.enabled !== null) {
                            ribbonControl.enabled = control.enabled;
                        }
                    });
                }
            }
            input.tabs
                .filter(function (tab) { return !(!tab.id); })
                .forEach(function (tab) {
                var ribbonTab = ribbon.getTab(tab.id);
                if (tab.visible !== undefined && tab.visible !== null) {
                    ribbonTab.setVisibility(tab.visible);
                }
                if (!!tab.groups && !!tab.groups.length) {
                    tab.groups
                        .filter(function (group) { return !(!group.id); })
                        .forEach(function (group) {
                        processControls(group);
                    });
                }
                else {
                    processControls(tab);
                }
            });
            return requestContext.sync();
        }
        ribbon_1.requestUpdate = requestUpdate;
        function requestCreateControls(input) {
            var requestContext = _createRequestContext();
            var ribbon = requestContext.ribbon;
            var delay = function (milliseconds) {
                return new Promise(function (resolve, _) { return setTimeout(function () { return resolve(); }, milliseconds); });
            };
            ribbon.executeRequestCreate(JSON.stringify(input));
            return delay(250)
                .then(function () { return requestContext.sync(); });
        }
        ribbon_1.requestCreateControls = requestCreateControls;
    })(ribbon = Office.ribbon || (Office.ribbon = {}));
})(Office || (Office = {}));
var OfficeCore;
(function (OfficeCore) {
    var _hostName = "Office";
    var _defaultApiSetName = "OfficeSharedApi";
    var _createPropertyObject = OfficeExtension.BatchApiHelper.createPropertyObject;
    var _createMethodObject = OfficeExtension.BatchApiHelper.createMethodObject;
    var _createIndexerObject = OfficeExtension.BatchApiHelper.createIndexerObject;
    var _createRootServiceObject = OfficeExtension.BatchApiHelper.createRootServiceObject;
    var _createTopLevelServiceObject = OfficeExtension.BatchApiHelper.createTopLevelServiceObject;
    var _createChildItemObject = OfficeExtension.BatchApiHelper.createChildItemObject;
    var _invokeMethod = OfficeExtension.BatchApiHelper.invokeMethod;
    var _invokeEnsureUnchanged = OfficeExtension.BatchApiHelper.invokeEnsureUnchanged;
    var _invokeSetProperty = OfficeExtension.BatchApiHelper.invokeSetProperty;
    var _isNullOrUndefined = OfficeExtension.Utility.isNullOrUndefined;
    var _isUndefined = OfficeExtension.Utility.isUndefined;
    var _throwIfNotLoaded = OfficeExtension.Utility.throwIfNotLoaded;
    var _throwIfApiNotSupported = OfficeExtension.Utility.throwIfApiNotSupported;
    var _load = OfficeExtension.Utility.load;
    var _retrieve = OfficeExtension.Utility.retrieve;
    var _toJson = OfficeExtension.Utility.toJson;
    var _fixObjectPathIfNecessary = OfficeExtension.Utility.fixObjectPathIfNecessary;
    var _handleNavigationPropertyResults = OfficeExtension.Utility._handleNavigationPropertyResults;
    var _adjustToDateTime = OfficeExtension.Utility.adjustToDateTime;
    var _processRetrieveResult = OfficeExtension.Utility.processRetrieveResult;
    var _setMockData = OfficeExtension.Utility.setMockData;
    var _calculateApiFlags = OfficeExtension.CommonUtility.calculateApiFlags;
    var AddinInternalServiceErrorCodes;
    (function (AddinInternalServiceErrorCodes) {
        AddinInternalServiceErrorCodes["generalException"] = "GeneralException";
    })(AddinInternalServiceErrorCodes || (AddinInternalServiceErrorCodes = {}));
    var _libraryMetadataInternalServiceApi = { "version": "1.0.0",
        "name": "OfficeCore",
        "defaultApiSetName": "OfficeSharedApi",
        "hostName": "Office",
        "apiSets": [],
        "strings": ["AddinInternalService"],
        "enumTypes": [],
        "clientObjectTypes": [[1,
                0,
                0,
                0,
                [["notifyActionHandlerReady",
                        0,
                        2,
                        0,
                        4]],
                0,
                0,
                0,
                0,
                "Microsoft.InternalService.AddinInternalService",
                4]] };
    var _builder = new OfficeExtension.LibraryBuilder({ metadata: _libraryMetadataInternalServiceApi, targetNamespaceObject: OfficeCore });
})(OfficeCore || (OfficeCore = {}));
var Office;
(function (Office) {
    var actionProxy;
    (function (actionProxy) {
        var _isNullOrUndefined = OfficeExtension.Utility.isNullOrUndefined;
        var _association;
        var ActionMessageCategory = 2;
        var ActionDispatchMessageType = 1000;
        function init() {
            if (typeof (OSF) !== "undefined" && OSF.DDA && OSF.DDA.RichApi && OSF.DDA.RichApi.richApiMessageManager) {
                var context = new OfficeExtension.ClientRequestContext();
                return context.eventRegistration.register(5, "", _handleMessage);
            }
        }
        function setActionAssociation(association) {
            _association = association;
        }
        function _getFunction(functionName) {
            if (functionName) {
                var nameUpperCase = functionName.toUpperCase();
                var call = _association.mappings[nameUpperCase];
                if (!_isNullOrUndefined(call) && typeof (call) === "function") {
                    return call;
                }
            }
            throw OfficeExtension.Utility.createRuntimeError("invalidOperation", "sourceData", "ActionProxy._getFunction");
        }
        function _handleMessage(args) {
            try {
                OfficeExtension.Utility.log('ActionProxy._handleMessage');
                OfficeExtension.Utility.checkArgumentNull(args, "args");
                var entryArray = args.entries;
                var invocationArray = [];
                for (var i = 0; i < entryArray.length; i++) {
                    if (entryArray[i].messageCategory !== ActionMessageCategory) {
                        continue;
                    }
                    if (typeof (entryArray[i].message) === 'string') {
                        entryArray[i].message = JSON.parse(entryArray[i].message);
                    }
                    if (entryArray[i].messageType === ActionDispatchMessageType) {
                        var actionsArgs = null;
                        var actionName = entryArray[i].message[0];
                        var call = _getFunction(actionName);
                        if (entryArray[i].message.length >= 2) {
                            var actionArgsJson = entryArray[i].message[1];
                            if (actionArgsJson) {
                                if (_isJsonObjectString(actionArgsJson)) {
                                    actionsArgs = JSON.parse(actionArgsJson);
                                }
                                else {
                                    actionsArgs = actionArgsJson;
                                }
                            }
                        }
                        if (typeof (OSF) !== 'undefined' &&
                            OSF.AppTelemetry &&
                            OSF.AppTelemetry.CallOnAppActivatedIfPending) {
                            OSF.AppTelemetry.CallOnAppActivatedIfPending();
                        }
                        call.apply(null, [actionsArgs]);
                    }
                    else {
                        OfficeExtension.Utility.log('ActionProxy._handleMessage unknown message type ' + entryArray[i].messageType);
                    }
                }
            }
            catch (ex) {
                _tryLog(ex);
                throw ex;
            }
            return OfficeExtension.Utility._createPromiseFromResult(null);
        }
        function _isJsonObjectString(value) {
            if (typeof value === 'string' && value[0] === '{') {
                return true;
            }
            return false;
        }
        function toLogMessage(ex) {
            var ret = 'Unknown Error';
            if (ex) {
                try {
                    if (ex.toString) {
                        ret = ex.toString();
                    }
                    ret = ret + ' ' + JSON.stringify(ex);
                }
                catch (otherEx) {
                    ret = 'Unexpected Error';
                }
            }
            return ret;
        }
        function _tryLog(ex) {
            var message = toLogMessage(ex);
            OfficeExtension.Utility.log(message);
        }
        function notifyActionHandlerReady() {
            var context = new OfficeExtension.ClientRequestContext();
            var addinInternalService = OfficeCore.AddinInternalService.newObject(context);
            context._customData = 'WacPartition';
            addinInternalService.notifyActionHandlerReady();
            return context.sync();
        }
        function handlerOnReadyInternal() {
            try {
                Microsoft.Office.WebExtension.onReadyInternal()
                    .then(function () {
                    return init();
                })
                    .then(function () {
                    var hostInfo = OSF._OfficeAppFactory.getHostInfo();
                    if (hostInfo.hostPlatform === "web" && hostInfo.hostType !== "word" && hostInfo.hostType !== "excel") {
                        return;
                    }
                    else {
                        return notifyActionHandlerReady();
                    }
                });
            }
            catch (ex) {
            }
        }
        function initFromHostBridge(hostBridge) {
            hostBridge.addHostMessageHandler(function (bridgeMessage) {
                if (bridgeMessage.type === 3) {
                    _handleMessage(bridgeMessage.message);
                }
            });
        }
        function initOnce() {
            OfficeExtension.Utility.log('ActionProxy.initOnce');
            if (typeof (Office.actions) != 'undefined') {
                setActionAssociation(Office.actions._association);
            }
            if (typeof (document) !== 'undefined') {
                if (document.readyState && document.readyState !== 'loading') {
                    OfficeExtension.Utility.log('ActionProxy.initOnce: document.readyState is not loading state');
                    handlerOnReadyInternal();
                }
                else if (document.addEventListener) {
                    document.addEventListener("DOMContentLoaded", function () {
                        OfficeExtension.Utility.log('ActionProxy.initOnce: DOMContentLoaded event triggered');
                        handlerOnReadyInternal();
                    });
                }
            }
            OfficeExtension.HostBridge.onInited(function (hostBridge) {
                initFromHostBridge(hostBridge);
            });
        }
        initOnce();
    })(actionProxy || (actionProxy = {}));
})(Office || (Office = {}));
var Office;
(function (Office) {
    var actions;
    (function (actions) {
        function _createRequestContext() {
            var context = new OfficeCore.RequestContext();
            if (OSF._OfficeAppFactory.getHostInfo().hostPlatform == 'web') {
                context._customData = 'WacPartition';
            }
            return context;
        }
        function areShortcutsInUse(shortcuts) {
            return __awaiter(this, void 0, void 0, function () {
                var context, actionService, inUseArray, inUseInfoArray, i;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext();
                            actionService = OfficeCore.ActionService.newObject(context);
                            inUseArray = actionService.areShortcutsInUse(shortcuts);
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            inUseInfoArray = [];
                            for (i = 0; i < shortcuts.length; i++) {
                                inUseInfoArray.push({
                                    shortcut: shortcuts[i],
                                    inUse: inUseArray.value[i]
                                });
                            }
                            return [2, inUseInfoArray];
                    }
                });
            });
        }
        actions.areShortcutsInUse = areShortcutsInUse;
        function replaceShortcuts(shortcuts) {
            return __awaiter(this, void 0, void 0, function () {
                var context, actionService;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext();
                            actionService = OfficeCore.ActionService.newObject(context);
                            actionService.replaceShortcuts(shortcuts);
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2];
                    }
                });
            });
        }
        actions.replaceShortcuts = replaceShortcuts;
        function getShortcuts() {
            return __awaiter(this, void 0, void 0, function () {
                var context, actionService, shortcuts;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = _createRequestContext();
                            actionService = OfficeCore.ActionService.newObject(context);
                            shortcuts = actionService.getShortcuts();
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2, shortcuts.value];
                    }
                });
            });
        }
        actions.getShortcuts = getShortcuts;
    })(actions = Office.actions || (Office.actions = {}));
})(Office || (Office = {}));
var Office;
(function (Office) {
    var dialogPage;
    (function (dialogPage_1) {
        function close() {
            return __awaiter(this, void 0, void 0, function () {
                var context, dialogPage;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = new OfficeCore.RequestContext();
                            dialogPage = OfficeCore.DialogPage.newObject(context);
                            dialogPage.close();
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2];
                    }
                });
            });
        }
        dialogPage_1.close = close;
        function readyToShow() {
            return __awaiter(this, void 0, void 0, function () {
                var context, dialogPage;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = new OfficeCore.RequestContext();
                            dialogPage = OfficeCore.DialogPage.newObject(context);
                            dialogPage.readyToShow();
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2];
                    }
                });
            });
        }
        dialogPage_1.readyToShow = readyToShow;
        function onShow(callback) {
            return __awaiter(this, void 0, void 0, function () {
                var context, dialogPage, removeListener;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = new OfficeCore.RequestContext();
                            dialogPage = OfficeCore.DialogPage.newObject(context);
                            dialogPage.onOnShowEvent.add(callback);
                            removeListener = function () {
                                dialogPage.onOnShowEvent.remove(callback);
                                return null;
                            };
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2, removeListener];
                    }
                });
            });
        }
        dialogPage_1.onShow = onShow;
        function sendMessageToHost(message) {
            return __awaiter(this, void 0, void 0, function () {
                var context, dialogPage;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            context = new OfficeCore.RequestContext();
                            dialogPage = OfficeCore.DialogPage.newObject(context);
                            dialogPage.sendMessageToHost(message);
                            return [4, context.sync()];
                        case 1:
                            _a.sent();
                            return [2];
                    }
                });
            });
        }
        dialogPage_1.sendMessageToHost = sendMessageToHost;
    })(dialogPage = Office.dialogPage || (Office.dialogPage = {}));
})(Office || (Office = {}));
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b)
                if (b.hasOwnProperty(p))
                    d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function (t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s)
                if (Object.prototype.hasOwnProperty.call(s, p))
                    t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
var _BeginExcel = "_BeginExcel";
var Excel;
(function (Excel) {
    function _runOnRegularOrWacContext(options, callback) {
        var context = isOfficePlatform("OfficeOnline")
            ? new WacSpecificRequestContext()
            : new RequestContext();
        onBeforeExcelRun(options, context);
        return OfficeExtension.CoreUtility.Promise.resolve()
            .then(function () { return callback(context); })
            .then(context.sync);
    }
    var WacSpecificRequestContext = (function (_super) {
        __extends(WacSpecificRequestContext, _super);
        function WacSpecificRequestContext(url) {
            var _this = _super.call(this, url) || this;
            _this._customData = "WacPartition";
            _this.m_wacWorkbook = _createRootServiceObject(WacWorkbook, _this);
            _this._rootObject = _this.m_wacWorkbook;
            _this._rootObjectPropertyName = "wacWorkbook";
            return _this;
        }
        Object.defineProperty(WacSpecificRequestContext.prototype, "wacWorkbook", {
            get: function () {
                return this.m_wacWorkbook;
            },
            enumerable: true,
            configurable: true
        });
        return WacSpecificRequestContext;
    }(OfficeCore.RequestContext));
    var WacWorkbook = (function (_super) {
        __extends(WacWorkbook, _super);
        function WacWorkbook() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        WacWorkbook.prototype.createAndOpenWorkbook = function (base64) {
            _invokeMethod(this, "CreateAndOpenWorkbook", 0, [base64], 0, 0);
        };
        return WacWorkbook;
    }(OfficeExtension.ClientObject));
    function createWorkbook(base64) {
        _throwIfApiNotSupported("Excel.createWorkbook", _defaultApiSetName, "1.8", _hostName);
        return _runOnRegularOrWacContext({ delayForCellEdit: true }, function (context) {
            if (context instanceof WacSpecificRequestContext) {
                context.wacWorkbook.createAndOpenWorkbook(base64);
            }
            else {
                context.workbook.application.createWorkbook(base64).open();
            }
        });
    }
    Excel.createWorkbook = createWorkbook;
    function lowerCaseFirst(str) {
        return str[0].toLowerCase() + str.slice(1);
    }
    var iconSets = ["ThreeArrows",
        "ThreeArrowsGray",
        "ThreeFlags",
        "ThreeTrafficLights1",
        "ThreeTrafficLights2",
        "ThreeSigns",
        "ThreeSymbols",
        "ThreeSymbols2",
        "FourArrows",
        "FourArrowsGray",
        "FourRedToBlack",
        "FourRating",
        "FourTrafficLights",
        "FiveArrows",
        "FiveArrowsGray",
        "FiveRating",
        "FiveQuarters",
        "ThreeStars",
        "ThreeTriangles",
        "FiveBoxes"];
    var iconNames = [["RedDownArrow", "YellowSideArrow", "GreenUpArrow"],
        ["GrayDownArrow", "GraySideArrow", "GrayUpArrow"],
        ["RedFlag", "YellowFlag", "GreenFlag"],
        ["RedCircleWithBorder", "YellowCircle", "GreenCircle"],
        ["RedTrafficLight", "YellowTrafficLight", "GreenTrafficLight"],
        ["RedDiamond", "YellowTriangle", "GreenCircle"],
        ["RedCrossSymbol", "YellowExclamationSymbol", "GreenCheckSymbol"],
        ["RedCross", "YellowExclamation", "GreenCheck"],
        ["RedDownArrow", "YellowDownInclineArrow", "YellowUpInclineArrow", "GreenUpArrow"],
        ["GrayDownArrow", "GrayDownInclineArrow", "GrayUpInclineArrow", "GrayUpArrow"],
        ["BlackCircle", "GrayCircle", "PinkCircle", "RedCircle"],
        ["OneBar", "TwoBars", "ThreeBars", "FourBars"],
        ["BlackCircleWithBorder", "RedCircleWithBorder", "YellowCircle", "GreenCircle"],
        ["RedDownArrow", "YellowDownInclineArrow", "YellowSideArrow", "YellowUpInclineArrow", "GreenUpArrow"],
        ["GrayDownArrow", "GrayDownInclineArrow", "GraySideArrow", "GrayUpInclineArrow", "GrayUpArrow"],
        ["NoBars", "OneBar", "TwoBars", "ThreeBars", "FourBars"],
        ["WhiteCircleAllWhiteQuarters", "CircleWithThreeWhiteQuarters", "CircleWithTwoWhiteQuarters", "CircleWithOneWhiteQuarter", "BlackCircle"],
        ["SilverStar", "HalfGoldStar", "GoldStar"],
        ["RedDownTriangle", "YellowDash", "GreenUpTriangle"],
        ["NoFilledBoxes", "OneFilledBox", "TwoFilledBoxes", "ThreeFilledBoxes", "FourFilledBoxes"],];
    Excel.icons = {};
    iconSets.map(function (title, i) {
        var camelTitle = lowerCaseFirst(title);
        Excel.icons[camelTitle] = [];
        iconNames[i].map(function (iconName, j) {
            iconName = lowerCaseFirst(iconName);
            var obj = { set: title, index: j };
            Excel.icons[camelTitle].push(obj);
            Excel.icons[camelTitle][iconName] = obj;
        });
    });
    function setRangePropertiesInBulk(range, propertyName, values) {
        var maxCellCount = 1500;
        if (Array.isArray(values) && values.length > 0 && Array.isArray(values[0]) && (values.length * values[0].length > maxCellCount) && isExcel1_3OrAbove()) {
            var maxRowCount = Math.max(1, Math.round(maxCellCount / values[0].length));
            range._ValidateArraySize(values.length, values[0].length);
            for (var startRowIndex = 0; startRowIndex < values.length; startRowIndex += maxRowCount) {
                var rowCount = maxRowCount;
                if (startRowIndex + rowCount > values.length) {
                    rowCount = values.length - startRowIndex;
                }
                var chunk = range.getRow(startRowIndex).untrack().getBoundingRect(range.getRow(startRowIndex + rowCount - 1).untrack()).untrack();
                var valueSlice = values.slice(startRowIndex, startRowIndex + rowCount);
                _invokeSetProperty(chunk, propertyName, valueSlice, 0);
            }
            return true;
        }
        return false;
    }
    function isExcelApiSetSupported(version) {
        return OfficeExtension.Utility.isSetSupported("ExcelApi", version.toString());
    }
    function isExcel1_3OrAbove() {
        return isExcelApiSetSupported(1.3);
    }
    function isOfficePlatform(platform) {
        if (typeof (window) !== "undefined" && window.Office && window.Office.context) {
            return window.Office.context.platform === platform;
        }
        return false;
    }
    var OperationStatus;
    (function (OperationStatus) {
        OperationStatus["NotStarted"] = "notStarted";
        OperationStatus["Running"] = "running";
        OperationStatus["Succeeded"] = "succeeded";
        OperationStatus["Failed"] = "failed";
    })(OperationStatus || (OperationStatus = {}));
    var HttpStatusCode;
    (function (HttpStatusCode) {
        HttpStatusCode[HttpStatusCode["OK"] = 200] = "OK";
        HttpStatusCode[HttpStatusCode["Created"] = 201] = "Created";
        HttpStatusCode[HttpStatusCode["Accepted"] = 202] = "Accepted";
        HttpStatusCode[HttpStatusCode["NoContent"] = 204] = "NoContent";
        HttpStatusCode[HttpStatusCode["HighestSuccessCode"] = 299] = "HighestSuccessCode";
        HttpStatusCode[HttpStatusCode["TooManyRequests"] = 429] = "TooManyRequests";
        HttpStatusCode[HttpStatusCode["InternalServerError"] = 500] = "InternalServerError";
        HttpStatusCode[HttpStatusCode["ServiceUnavailable"] = 503] = "ServiceUnavailable";
        HttpStatusCode[HttpStatusCode["GatewayTimeout"] = 504] = "GatewayTimeout";
    })(HttpStatusCode || (HttpStatusCode = {}));
    var SessionOperation;
    (function (SessionOperation) {
        SessionOperation["Close"] = "Session.close";
        SessionOperation["CommitChanges"] = "Session.commitChanges";
        SessionOperation["Create"] = "Session.resolveRequestUrlAndHeaderInfo";
        SessionOperation["Refresh"] = "Session.refreshSession";
    })(SessionOperation = Excel.SessionOperation || (Excel.SessionOperation = {}));
    var Session = (function () {
        function Session(workbookUrl, requestHeaders, _a) {
            var _b = _a === void 0 ? {} : _a, _d = _b.persistChanges, persistChanges = _d === void 0 ? true : _d, _e = _b.commitExplicitly, commitExplicitly = _e === void 0 ? true : _e;
            this.m_requestId = '';
            this.m_workbookUrl = !workbookUrl ? '' : this.ensureUrlFormatEndWithSlash(workbookUrl);
            this.m_requestHeaders = !requestHeaders ? {} : requestHeaders;
            this.m_persistChanges = persistChanges;
            this.m_commitExplicitly = commitExplicitly;
        }
        Object.defineProperty(Session.prototype, "requestId", {
            get: function () {
                return this.m_requestId;
            },
            enumerable: true,
            configurable: true
        });
        Session.prototype.close = function () {
            var _this = this;
            if (this.m_requestUrlAndHeaderInfo &&
                !OfficeExtension.Utility._isLocalDocumentUrl(this.m_requestUrlAndHeaderInfo.url)) {
                var url = this.ensureUrlFormatEndWithSlash(this.m_requestUrlAndHeaderInfo.url) + Session.CLOSE_SESSION;
                var req = {
                    method: 'POST',
                    url: url,
                    headers: this.m_requestUrlAndHeaderInfo.headers,
                    body: ''
                };
                return OfficeExtension.HttpUtility.sendRequest(req).then(function (resp) {
                    if (resp.statusCode !== HttpStatusCode.NoContent) {
                        throw _this.createErrorFromResponseInfo(resp, SessionOperation.Close);
                    }
                    _this.m_requestUrlAndHeaderInfo = null;
                    for (var key in _this.m_requestHeaders) {
                        if (key.toLowerCase() === Session.WorkbookSessionIdHeaderNameLower) {
                            delete _this.m_requestHeaders[key];
                            break;
                        }
                    }
                });
            }
            return OfficeExtension.Utility._createPromiseFromResult(null);
        };
        Session.prototype.commitChanges = function (additionalRequestHeaders) {
            var _this = this;
            if (additionalRequestHeaders === void 0) {
                additionalRequestHeaders = {};
            }
            if (!this.m_commitExplicitly) {
                throw this.createError(HttpStatusCode.InternalServerError, 'Can not call commitChanges() if commitExplicitly is not set.', SessionOperation.CommitChanges);
            }
            if (!this.m_workbookUrl || OfficeExtension.Utility._isLocalDocumentUrl(this.m_workbookUrl)) {
                throw this.createError(HttpStatusCode.InternalServerError, 'Not supported for local documents.', SessionOperation.CommitChanges);
            }
            if (!this.m_requestUrlAndHeaderInfo) {
                throw this.createError(HttpStatusCode.InternalServerError, 'Need to call this._resolveRequestUrlAndHeaderInfo() to get the session id first.', SessionOperation.CommitChanges);
            }
            var commitChangesRequestInfo = this.createCommitChangesRequestInfo(additionalRequestHeaders);
            return OfficeExtension.HttpUtility.sendRequest(commitChangesRequestInfo).then(function (commitChangesResponseInfo) {
                var statusCode = commitChangesResponseInfo.statusCode;
                if (statusCode === HttpStatusCode.Accepted) {
                    return _this.delay(Session.POLL_DELAY)
                        .then(function (_) {
                        return _this.pollResourceLocation(_this.getHeaderIgnoreCase(commitChangesResponseInfo.headers, Session.LOCATION_HEADER), SessionOperation.CommitChanges, additionalRequestHeaders);
                    })
                        .then(function (commitChangesResourceLocationResponseInfo) {
                        var operationStatusBody = JSON.parse(commitChangesResourceLocationResponseInfo.body);
                        if (operationStatusBody.status === OperationStatus.Failed) {
                            throw _this.createErrorFromResponseInfo(commitChangesResourceLocationResponseInfo, SessionOperation.CommitChanges);
                        }
                        return _this.parseCooldownTime(commitChangesResourceLocationResponseInfo);
                    });
                }
                if (statusCode >= HttpStatusCode.OK && statusCode <= HttpStatusCode.HighestSuccessCode) {
                    return _this.parseCooldownTime(commitChangesResponseInfo);
                }
                throw _this.createErrorFromResponseInfo(commitChangesResponseInfo, SessionOperation.CommitChanges);
            });
        };
        Session.prototype._resolveRequestUrlAndHeaderInfo = function (additionalRequestHeaders) {
            var _this = this;
            if (additionalRequestHeaders === void 0) {
                additionalRequestHeaders = {};
            }
            if (this.m_requestUrlAndHeaderInfo) {
                return OfficeExtension.Utility._createPromiseFromResult(this.m_requestUrlAndHeaderInfo);
            }
            if (!this.m_workbookUrl || OfficeExtension.Utility._isLocalDocumentUrl(this.m_workbookUrl)) {
                this.m_requestUrlAndHeaderInfo = { url: this.m_workbookUrl, headers: this.m_requestHeaders };
                return OfficeExtension.Utility._createPromiseFromResult(this.m_requestUrlAndHeaderInfo);
            }
            if (this.getHeaderIgnoreCase(this.m_requestHeaders, Session.WorkbookSessionIdHeaderNameLower)) {
                this.m_requestUrlAndHeaderInfo = { url: this.m_workbookUrl, headers: this.m_requestHeaders };
                return OfficeExtension.Utility._createPromiseFromResult(this.m_requestUrlAndHeaderInfo);
            }
            var sessionRequestInfo = this.createAsyncGraphSessionRequestInfo(additionalRequestHeaders);
            return OfficeExtension.HttpUtility.sendRequest(sessionRequestInfo).then(function (sessionResponseInfo) {
                _this.m_requestId = _this.getHeaderIgnoreCase(sessionResponseInfo.headers, Session.REQUEST_ID_HEADER);
                if (sessionResponseInfo.statusCode !== HttpStatusCode.Accepted &&
                    sessionResponseInfo.statusCode !== HttpStatusCode.Created) {
                    throw _this.createErrorFromResponseInfo(sessionResponseInfo, SessionOperation.Create);
                }
                if (sessionResponseInfo.statusCode === HttpStatusCode.Created) {
                    _this.formatRequestUrlAndHeaderInfo(sessionResponseInfo);
                    return _this.m_requestUrlAndHeaderInfo;
                }
                return _this.delay(Session.POLL_DELAY)
                    .then(function (_) { return _this.pollResourceLocation(_this.getHeaderIgnoreCase(sessionResponseInfo.headers, Session.LOCATION_HEADER), SessionOperation.Create, additionalRequestHeaders); })
                    .then(function (operationStatusResponseInfo) {
                    var operationStatusBody = JSON.parse(operationStatusResponseInfo.body);
                    if (operationStatusBody.status === OperationStatus.Failed) {
                        throw _this.createErrorFromResponseInfo(operationStatusResponseInfo, SessionOperation.Create);
                    }
                    var sessionResourceLocationRequestInfo = {
                        method: 'GET',
                        url: operationStatusBody.resourceLocation,
                        headers: __assign({}, additionalRequestHeaders, { Authorization: _this.getHeaderIgnoreCase(_this.m_requestHeaders, Session.AUTHORIZATION_HEADER) }),
                        body: undefined
                    };
                    return OfficeExtension.HttpUtility.sendRequest(sessionResourceLocationRequestInfo).then(function (sessionResourceLocationResponseInfo) {
                        _this.formatRequestUrlAndHeaderInfo(sessionResourceLocationResponseInfo);
                        return _this.m_requestUrlAndHeaderInfo;
                    });
                });
            });
        };
        Session.prototype.refreshSession = function () {
            var _this = this;
            if (!this.m_workbookUrl || OfficeExtension.Utility._isLocalDocumentUrl(this.m_workbookUrl)) {
                throw this.createError(HttpStatusCode.InternalServerError, 'Not supported for local documents.', SessionOperation.Refresh);
            }
            if (!this.m_requestUrlAndHeaderInfo) {
                throw this.createError(HttpStatusCode.InternalServerError, 'Need to call this._resolveRequestUrlAndHeaderInfo() to get the session id first.', SessionOperation.Refresh);
            }
            var refreshSessionRequestInfo = this.createRefreshSessionRequestInfo();
            return OfficeExtension.HttpUtility.sendRequest(refreshSessionRequestInfo).then(function (refreshSessionResponseInfo) {
                var statusCode = refreshSessionResponseInfo.statusCode;
                if (statusCode != HttpStatusCode.NoContent) {
                    throw _this.createErrorFromResponseInfo(refreshSessionResponseInfo, SessionOperation.Refresh);
                }
                return OfficeExtension.Utility._createPromiseFromResult(null);
            });
        };
        Session.prototype.getHeaderIgnoreCase = function (headers, headerName) {
            var foundHeaders = Object.keys(headers).filter(function (key) { return key.toLowerCase() === headerName.toLowerCase(); });
            return foundHeaders.length > 0 ? headers[foundHeaders[0]] : undefined;
        };
        Session.prototype.createCommitChangesRequestInfo = function (additionalRequestHeaders) {
            if (additionalRequestHeaders === void 0) {
                additionalRequestHeaders = {};
            }
            var url = this.getCorrectGraphVersionUrl() + Session.COMMIT_CHANGES;
            var headers = {};
            OfficeExtension.Utility._copyHeaders(this.m_requestUrlAndHeaderInfo.headers, headers);
            OfficeExtension.Utility._copyHeaders(additionalRequestHeaders, headers);
            headers[Session.PREFER_HEADER] = Session.PREFER_HEADER_VAL;
            return {
                url: url,
                method: 'POST',
                headers: headers,
                body: {}
            };
        };
        Session.prototype.createAsyncGraphSessionRequestInfo = function (additionalRequestHeaders) {
            if (additionalRequestHeaders === void 0) {
                additionalRequestHeaders = {};
            }
            var url = this.getCorrectGraphVersionUrl() + Session.CREATE_SESSION;
            var headers = {};
            OfficeExtension.Utility._copyHeaders(this.m_requestHeaders, headers);
            OfficeExtension.Utility._copyHeaders(additionalRequestHeaders, headers);
            headers[Session.CONTENT_TYPE_HEADER] = Session.CONTENT_TYPE_HEADER_VAL;
            headers[Session.PREFER_HEADER] = Session.PREFER_HEADER_VAL;
            return {
                url: url,
                method: 'POST',
                headers: headers,
                body: { persistChanges: this.m_persistChanges, commitExplicitly: this.m_commitExplicitly }
            };
        };
        Session.prototype.createRefreshSessionRequestInfo = function () {
            var url = this.getCorrectGraphVersionUrl() + Session.REFRESH_SESSION;
            var headers = {};
            OfficeExtension.Utility._copyHeaders(this.m_requestUrlAndHeaderInfo.headers, headers);
            headers[Session.CONTENT_TYPE_HEADER] = Session.CONTENT_TYPE_HEADER_VAL;
            return {
                url: url,
                method: 'POST',
                headers: headers,
                body: {}
            };
        };
        Session.prototype.getCorrectGraphVersionUrl = function () {
            return this.m_workbookUrl.replace(new RegExp('graph\.microsoft\.com\/.*?\/'), "graph.microsoft.com/" + Session.ASYNC_API_GRAPH_VERSION + "/");
        };
        Session.prototype.pollResourceLocation = function (resourceLocation, sessionOperation, additionalRequestHeaders, pollAttempt) {
            var _this = this;
            if (additionalRequestHeaders === void 0) {
                additionalRequestHeaders = {};
            }
            if (pollAttempt === void 0) {
                pollAttempt = 0;
            }
            if (pollAttempt >= Session.MAX_POLL_ATTEMPTS) {
                throw this.createError(HttpStatusCode.InternalServerError, 'Timout while polling for the resource location.', sessionOperation);
            }
            var operationStatusRequestInfo = {
                method: 'GET',
                url: resourceLocation,
                headers: __assign({}, additionalRequestHeaders, { Authorization: this.getHeaderIgnoreCase(this.m_requestHeaders, Session.AUTHORIZATION_HEADER) }),
                body: undefined
            };
            return OfficeExtension.HttpUtility.sendRequest(operationStatusRequestInfo).then(function (operationStatusResponseInfo) {
                if (operationStatusResponseInfo.statusCode !== HttpStatusCode.OK) {
                    return _this.pollResourceLocation(resourceLocation, sessionOperation, additionalRequestHeaders, pollAttempt + 1);
                }
                var operationStatusBody = JSON.parse(operationStatusResponseInfo.body);
                switch (operationStatusBody.status) {
                    case OperationStatus.Succeeded:
                        return operationStatusResponseInfo;
                    case OperationStatus.Failed:
                        return operationStatusResponseInfo;
                    case OperationStatus.NotStarted:
                    case OperationStatus.Running:
                        return _this.delay(Session.POLL_DELAY).then(function (_) {
                            return _this.pollResourceLocation(resourceLocation, sessionOperation, additionalRequestHeaders, pollAttempt + 1);
                        });
                    default:
                        throw _this.createErrorFromResponseInfo(operationStatusResponseInfo, sessionOperation);
                }
            });
        };
        Session.prototype.parseCooldownTime = function (responseInfo) {
            var retryAfter = this.getHeaderIgnoreCase(responseInfo.headers, Session.RETRY_AFTER_HEADER);
            return !retryAfter
                ? Session.DEFAULT_COMMIT_CHANGES_RETRY_AFTER
                : parseInt(retryAfter) * 1000;
        };
        Session.prototype.formatRequestUrlAndHeaderInfo = function (responseInfo) {
            if (responseInfo.statusCode !== HttpStatusCode.OK && responseInfo.statusCode !== HttpStatusCode.Created) {
                throw this.createErrorFromResponseInfo(responseInfo, SessionOperation.Create);
            }
            var session = JSON.parse(responseInfo.body);
            var sessionId = session.id;
            var headers = {};
            OfficeExtension.Utility._copyHeaders(this.m_requestHeaders, headers);
            headers[Session.WorkbookSessionIdHeaderName] = sessionId;
            this.m_requestUrlAndHeaderInfo = { url: this.getCorrectGraphVersionUrl(), headers: headers };
        };
        Session.prototype.ensureUrlFormatEndWithSlash = function (url) {
            if (url.charAt(url.length - 1) !== '/') {
                url += '/';
            }
            return url;
        };
        Session.prototype.delay = function (milliseconds) {
            return new OfficeExtension.CoreUtility.Promise(function (res, _) { return setTimeout(function () { return res(); }, milliseconds); });
        };
        Session.prototype.createErrorFromResponseInfo = function (responseInfo, locationThrown) {
            var err = OfficeExtension.Utility._parseErrorResponse(responseInfo);
            var retryAfter = this.getHeaderIgnoreCase(responseInfo.headers, Session.RETRY_AFTER_HEADER);
            var data = {
                retryAfter: retryAfter,
                responseBody: OfficeExtension.Utility._parseErrorResponseBody(responseInfo)
            };
            return OfficeExtension.Utility.createRuntimeError(err.errorCode, err.errorMessage, locationThrown, responseInfo.statusCode, data);
        };
        Session.prototype.createError = function (code, message, locationThrown) {
            return OfficeExtension.Utility.createRuntimeError('' + code, message, locationThrown);
        };
        Session.WorkbookSessionIdHeaderName = 'Workbook-Session-Id';
        Session.WorkbookSessionIdHeaderNameLower = 'workbook-session-id';
        Session.ASYNC_API_GRAPH_VERSION = 'beta';
        Session.POLL_DELAY = 10000;
        Session.MAX_POLL_ATTEMPTS = 10;
        Session.DEFAULT_COMMIT_CHANGES_RETRY_AFTER = 10000;
        Session.LOCATION_HEADER = 'location';
        Session.AUTHORIZATION_HEADER = 'authorization';
        Session.REQUEST_ID_HEADER = 'request-id';
        Session.RETRY_AFTER_HEADER = 'retry-after';
        Session.PREFER_HEADER = 'Prefer';
        Session.PREFER_HEADER_VAL = 'respond-async';
        Session.CONTENT_TYPE_HEADER = 'Content-Type';
        Session.CONTENT_TYPE_HEADER_VAL = 'application/json';
        Session.CLOSE_SESSION = 'closeSession';
        Session.COMMIT_CHANGES = 'commitChanges';
        Session.CREATE_SESSION = 'createSession';
        Session.REFRESH_SESSION = 'refreshSession';
        return Session;
    }());
    Excel.Session = Session;
    var RequestContext = (function (_super) {
        __extends(RequestContext, _super);
        function RequestContext(url) {
            var _this = _super.call(this, url) || this;
            _this.m_workbook = _createRootServiceObject(Excel.Workbook, _this);
            _this._rootObject = _this.m_workbook;
            _this._rootObjectPropertyName = "workbook";
            return _this;
        }
        RequestContext.prototype._processOfficeJsErrorResponse = function (officeJsErrorCode, response) {
            var ooeInvalidApiCallInContext = 5004;
            if (officeJsErrorCode === ooeInvalidApiCallInContext) {
                response.ErrorCode = ErrorCodes.invalidOperationInCellEditMode;
                response.HttpStatusCode = 400;
                response.ErrorMessage = OfficeExtension.Utility._getResourceString(OfficeExtension.ResourceStrings.invalidOperationInCellEditMode);
            }
        };
        Object.defineProperty(RequestContext.prototype, "workbook", {
            get: function () {
                return this.m_workbook;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RequestContext.prototype, "application", {
            get: function () {
                return this.workbook.application;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RequestContext.prototype, "runtime", {
            get: function () {
                return this.workbook._Runtime;
            },
            enumerable: true,
            configurable: true
        });
        return RequestContext;
    }(OfficeCore.RequestContext));
    Excel.RequestContext = RequestContext;
    function onBeforeExcelRun(options, context) {
        var excelOptions = options;
        if (excelOptions.delayForCellEdit && OfficeExtension.CommonUtility.isSetSupported("DelayForCellEdit")) {
            context._requestFlagModifier |= 64;
        }
        else {
            context._requestFlagModifier &= ~64;
        }
        if (excelOptions._makerSafe) {
            context._requestFlagModifier |= 1024;
        }
    }
    function run(arg1, arg2) {
        return OfficeExtension.ClientRequestContext._runBatch("Excel.run", arguments, function (requestInfo) {
            var ret = new Excel.RequestContext(requestInfo);
            return ret;
        }, onBeforeExcelRun);
    }
    Excel.run = run;
    function runBatch(arg1, arg2) {
        return OfficeExtension.ClientRequestContext._runExplicitBatch("Excel.runBatch", arguments, function (requestInfo) {
            var ret = new Excel.RequestContext(requestInfo);
            return ret;
        }, onBeforeExcelRun);
    }
    Excel.runBatch = runBatch;
    Excel._RedirectV1APIs = false;
    Excel._V1APIMap = {
        "GetDataAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingGetData(callArgs); },
            postprocess: getDataCommonPostprocess
        },
        "GetSelectedDataAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.getSelectedData(callArgs); },
            postprocess: getDataCommonPostprocess
        },
        "GoToByIdAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.gotoById(callArgs); }
        },
        "AddColumnsAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingAddColumns(callArgs); }
        },
        "AddFromSelectionAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingAddFromSelection(callArgs); },
            postprocess: postprocessBindingDescriptor
        },
        "AddFromNamedItemAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingAddFromNamedItem(callArgs); },
            postprocess: postprocessBindingDescriptor
        },
        "AddFromPromptAsync": {
            call: function (ctx, callArgs) {
                if (versionNumberIsEarlierThan({ ios: { desiredMajor: 2, desiredMinor: 20, desiredBuild: 0 } }) && OfficeExtension.CommonUtility.isSetSupported("DelayForCellEdit")) {
                    ctx._requestFlagModifier |= 64;
                }
                return ctx.workbook._V1Api.bindingAddFromPrompt(callArgs);
            },
            postprocess: postprocessBindingDescriptor
        },
        "AddRowsAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingAddRows(callArgs); }
        },
        "GetByIdAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingGetById(callArgs); },
            postprocess: postprocessBindingDescriptor
        },
        "ReleaseByIdAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingReleaseById(callArgs); }
        },
        "GetAllAsync": {
            call: function (ctx) { return ctx.workbook._V1Api.bindingGetAll(); },
            postprocess: function (response) {
                return response.bindings.map(function (descriptor) { return postprocessBindingDescriptor(descriptor); });
            }
        },
        "DeleteAllDataValuesAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingDeleteAllDataValues(callArgs); }
        },
        "SetSelectedDataAsync": {
            preprocess: function (callArgs) {
                var preimage = callArgs["cellFormat"];
                if (typeof (window) !== "undefined" && window.OSF.DDA.SafeArray) {
                    if (window.OSF.OUtil.listContainsKey(window.OSF.DDA.SafeArray.Delegate.ParameterMap.dynamicTypes, "cellFormat")) {
                        callArgs["cellFormat"] = window.OSF.DDA.SafeArray.Delegate.ParameterMap.dynamicTypes["cellFormat"]["toHost"](preimage);
                    }
                }
                else if (typeof (window) !== "undefined" && window.OSF.DDA.WAC) {
                    if (window.OSF.OUtil.listContainsKey(window.OSF.DDA.WAC.Delegate.ParameterMap.dynamicTypes, "cellFormat")) {
                        callArgs["cellFormat"] = window.OSF.DDA.WAC.Delegate.ParameterMap.dynamicTypes["cellFormat"]["toHost"](preimage);
                    }
                }
                return callArgs;
            },
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.setSelectedData(callArgs); }
        },
        "SetDataAsync": {
            preprocess: function (callArgs) {
                var preimage = callArgs["cellFormat"];
                if (typeof (window) !== "undefined" && window.OSF.DDA.SafeArray) {
                    if (window.OSF.OUtil.listContainsKey(window.OSF.DDA.SafeArray.Delegate.ParameterMap.dynamicTypes, "cellFormat")) {
                        callArgs["cellFormat"] = window.OSF.DDA.SafeArray.Delegate.ParameterMap.dynamicTypes["cellFormat"]["toHost"](preimage);
                    }
                }
                else if (typeof (window) !== "undefined" && window.OSF.DDA.WAC) {
                    if (window.OSF.OUtil.listContainsKey(window.OSF.DDA.WAC.Delegate.ParameterMap.dynamicTypes, "cellFormat")) {
                        callArgs["cellFormat"] = window.OSF.DDA.WAC.Delegate.ParameterMap.dynamicTypes["cellFormat"]["toHost"](preimage);
                    }
                }
                return callArgs;
            },
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingSetData(callArgs); }
        },
        "SetFormatsAsync": {
            preprocess: function (callArgs) {
                var preimage = callArgs["cellFormat"];
                if (typeof (window) !== "undefined" && window.OSF.DDA.SafeArray) {
                    if (window.OSF.OUtil.listContainsKey(window.OSF.DDA.SafeArray.Delegate.ParameterMap.dynamicTypes, "cellFormat")) {
                        callArgs["cellFormat"] = window.OSF.DDA.SafeArray.Delegate.ParameterMap.dynamicTypes["cellFormat"]["toHost"](preimage);
                    }
                }
                else if (typeof (window) !== "undefined" && window.OSF.DDA.WAC) {
                    if (window.OSF.OUtil.listContainsKey(window.OSF.DDA.WAC.Delegate.ParameterMap.dynamicTypes, "cellFormat")) {
                        callArgs["cellFormat"] = window.OSF.DDA.WAC.Delegate.ParameterMap.dynamicTypes["cellFormat"]["toHost"](preimage);
                    }
                }
                return callArgs;
            },
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingSetFormats(callArgs); }
        },
        "SetTableOptionsAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingSetTableOptions(callArgs); }
        },
        "ClearFormatsAsync": {
            call: function (ctx, callArgs) { return ctx.workbook._V1Api.bindingClearFormats(callArgs); }
        },
        "GetFilePropertiesAsync": {
            call: function (ctx) { return ctx.workbook._V1Api.getFilePropertiesAsync(); }
        }
    };
    function postprocessBindingDescriptor(response) {
        var bindingDescriptor = {
            BindingColumnCount: response.bindingColumnCount,
            BindingId: response.bindingId,
            BindingRowCount: response.bindingRowCount,
            bindingType: response.bindingType,
            HasHeaders: response.hasHeaders
        };
        return window.OSF.DDA.OMFactory.manufactureBinding(bindingDescriptor, window.Microsoft.Office.WebExtension.context.document);
    }
    function getDataCommonPostprocess(response, callArgs) {
        var isPlainData = response.headers == null;
        var data;
        if (isPlainData) {
            data = response.rows;
        }
        else {
            data = response;
        }
        data = window.OSF.DDA.DataCoercion.coerceData(data, callArgs[window.Microsoft.Office.WebExtension.Parameters.CoercionType]);
        return data === undefined ? null : data;
    }
    function versionNumberIsEarlierThan(versionsForPlatformMap) {
        var hasOfficeVersion = typeof (window) !== "undefined" &&
            window.Office &&
            window.Office.context &&
            window.Office.context.diagnostics &&
            window.Office.context.diagnostics.version;
        if (!hasOfficeVersion) {
            return false;
        }
        var platform = window.Office.context.diagnostics.platform.toLowerCase();
        if (platform === 'officeonline') {
            return false;
        }
        var versionForCurrentPlatform = versionsForPlatformMap[platform];
        if (versionForCurrentPlatform == null) {
            versionForCurrentPlatform = versionsForPlatformMap.general;
        }
        var version = window.Office.context.diagnostics.version;
        var versionExtractor = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
        var result = versionExtractor.exec(version);
        if (result) {
            var major = parseInt(result[1]);
            var minor = parseInt(result[2]);
            var build = parseInt(result[3]);
            if (major < versionForCurrentPlatform.desiredMajor) {
                return true;
            }
            if (major === versionForCurrentPlatform.desiredMajor && minor < versionForCurrentPlatform.desiredMinor) {
                return true;
            }
            if (major === versionForCurrentPlatform.desiredMajor && minor === versionForCurrentPlatform.desiredMinor && build < versionForCurrentPlatform.desiredBuild) {
                var revisionString = result[4];
                var devBuildValidation = /^3\d\d\d+$/;
                var isDevBuild = devBuildValidation.exec(revisionString);
                if (isDevBuild) {
                    return true;
                }
            }
        }
        return false;
    }
    var ALWAYS_TRUE_PLACEHOLDER_OVERRIDE = true;
    var _CC;
    (function (_CC) {
        _CC.office10EventIdBindingSelectionChangedEvent = 3;
        _CC.office10EventIdBindingDataChangedEvent = 4;
        _CC.office10EventIdDocumentSelectionChangedEvent = 2;
        _CC.office10EventIdRichApiMessageEvent = 5;
        _CC.office10EventIdSettingsChangedEvent = 1;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _hostName = "Excel";
    var _defaultApiSetName = "ExcelApi";
    var _createPropertyObject = OfficeExtension.BatchApiHelper.createPropertyObject;
    var _createMethodObject = OfficeExtension.BatchApiHelper.createMethodObject;
    var _createIndexerObject = OfficeExtension.BatchApiHelper.createIndexerObject;
    var _createRootServiceObject = OfficeExtension.BatchApiHelper.createRootServiceObject;
    var _createTopLevelServiceObject = OfficeExtension.BatchApiHelper.createTopLevelServiceObject;
    var _createChildItemObject = OfficeExtension.BatchApiHelper.createChildItemObject;
    var _invokeMethod = OfficeExtension.BatchApiHelper.invokeMethod;
    var _invokeEnsureUnchanged = OfficeExtension.BatchApiHelper.invokeEnsureUnchanged;
    var _invokeSetProperty = OfficeExtension.BatchApiHelper.invokeSetProperty;
    var _isNullOrUndefined = OfficeExtension.Utility.isNullOrUndefined;
    var _isUndefined = OfficeExtension.Utility.isUndefined;
    var _throwIfNotLoaded = OfficeExtension.Utility.throwIfNotLoaded;
    var _throwIfApiNotSupported = OfficeExtension.Utility.throwIfApiNotSupported;
    var _load = OfficeExtension.Utility.load;
    var _retrieve = OfficeExtension.Utility.retrieve;
    var _toJson = OfficeExtension.Utility.toJson;
    var _fixObjectPathIfNecessary = OfficeExtension.Utility.fixObjectPathIfNecessary;
    var _handleNavigationPropertyResults = OfficeExtension.Utility._handleNavigationPropertyResults;
    var _adjustToDateTime = OfficeExtension.Utility.adjustToDateTime;
    var _processRetrieveResult = OfficeExtension.Utility.processRetrieveResult;
    var _setMockData = OfficeExtension.Utility.setMockData;
    var _calculateApiFlags = OfficeExtension.CommonUtility.calculateApiFlags;
    var LoadToType;
    (function (LoadToType) {
        LoadToType["connectionOnly"] = "ConnectionOnly";
        LoadToType["table"] = "Table";
        LoadToType["pivotTable"] = "PivotTable";
        LoadToType["pivotChart"] = "PivotChart";
    })(LoadToType = Excel.LoadToType || (Excel.LoadToType = {}));
    var _typeQuery = "Query";
    var Query = (function (_super) {
        __extends(Query, _super);
        function Query() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Query.prototype, "_className", {
            get: function () {
                return "Query";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Query.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["loadedTo", "loadedToDataModel", "name", "refreshDate", "rowsLoadedCount", "error"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Query.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["LoadedTo", "LoadedToDataModel", "Name", "RefreshDate", "RowsLoadedCount", "Error"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Query.prototype, "error", {
            get: function () {
                _throwIfNotLoaded("error", this._E, _typeQuery, this._isNull);
                return this._E;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Query.prototype, "loadedTo", {
            get: function () {
                _throwIfNotLoaded("loadedTo", this._L, _typeQuery, this._isNull);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Query.prototype, "loadedToDataModel", {
            get: function () {
                _throwIfNotLoaded("loadedToDataModel", this._Lo, _typeQuery, this._isNull);
                return this._Lo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Query.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeQuery, this._isNull);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Query.prototype, "refreshDate", {
            get: function () {
                _throwIfNotLoaded("refreshDate", this._R, _typeQuery, this._isNull);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Query.prototype, "rowsLoadedCount", {
            get: function () {
                _throwIfNotLoaded("rowsLoadedCount", this._Ro, _typeQuery, this._isNull);
                return this._Ro;
            },
            enumerable: true,
            configurable: true
        });
        Query.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Error"])) {
                this._E = obj["Error"];
            }
            if (!_isUndefined(obj["LoadedTo"])) {
                this._L = obj["LoadedTo"];
            }
            if (!_isUndefined(obj["LoadedToDataModel"])) {
                this._Lo = obj["LoadedToDataModel"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["RefreshDate"])) {
                this._R = _adjustToDateTime(obj["RefreshDate"]);
            }
            if (!_isUndefined(obj["RowsLoadedCount"])) {
                this._Ro = obj["RowsLoadedCount"];
            }
        };
        Query.prototype.load = function (options) {
            return _load(this, options);
        };
        Query.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Query.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            if (!_isUndefined(obj["RefreshDate"])) {
                obj["refreshDate"] = _adjustToDateTime(obj["refreshDate"]);
            }
            _processRetrieveResult(this, value, result);
        };
        Query.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        Query.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Query.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Query;
    }(OfficeExtension.ClientObject));
    Excel.Query = Query;
    var _typeQueryCollection = "QueryCollection";
    var QueryCollection = (function (_super) {
        __extends(QueryCollection, _super);
        function QueryCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(QueryCollection.prototype, "_className", {
            get: function () {
                return "QueryCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(QueryCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(QueryCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeQueryCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        QueryCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        QueryCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.Query, this, [key]);
        };
        QueryCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Query, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        QueryCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        QueryCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        QueryCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Query, true, _this, childItemData, index); });
        };
        QueryCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        QueryCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Query, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return QueryCollection;
    }(OfficeExtension.ClientObject));
    Excel.QueryCollection = QueryCollection;
    var QueryError;
    (function (QueryError) {
        QueryError["unknown"] = "Unknown";
        QueryError["none"] = "None";
        QueryError["failedLoadToWorksheet"] = "FailedLoadToWorksheet";
        QueryError["failedLoadToDataModel"] = "FailedLoadToDataModel";
        QueryError["failedDownload"] = "FailedDownload";
        QueryError["failedToCompleteDownload"] = "FailedToCompleteDownload";
    })(QueryError = Excel.QueryError || (Excel.QueryError = {}));
    var _typeLinkedWorkbook = "LinkedWorkbook";
    var LinkedWorkbook = (function (_super) {
        __extends(LinkedWorkbook, _super);
        function LinkedWorkbook() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(LinkedWorkbook.prototype, "_className", {
            get: function () {
                return "LinkedWorkbook";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LinkedWorkbook.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LinkedWorkbook.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LinkedWorkbook.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeLinkedWorkbook, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        LinkedWorkbook.prototype.breakLinks = function () {
            _invokeMethod(this, "BreakLinks", 0, [], 0, 0);
        };
        LinkedWorkbook.prototype.refresh = function () {
            _invokeMethod(this, "Refresh", 0, [], 0, 0);
        };
        LinkedWorkbook.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
        };
        LinkedWorkbook.prototype.load = function (options) {
            return _load(this, options);
        };
        LinkedWorkbook.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        LinkedWorkbook.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        LinkedWorkbook.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        LinkedWorkbook.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        LinkedWorkbook.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        LinkedWorkbook.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return LinkedWorkbook;
    }(OfficeExtension.ClientObject));
    Excel.LinkedWorkbook = LinkedWorkbook;
    var _typeLinkedWorkbookCollection = "LinkedWorkbookCollection";
    var LinkedWorkbookCollection = (function (_super) {
        __extends(LinkedWorkbookCollection, _super);
        function LinkedWorkbookCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(LinkedWorkbookCollection.prototype, "_className", {
            get: function () {
                return "LinkedWorkbookCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LinkedWorkbookCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LinkedWorkbookCollection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["workbookLinksRefreshMode"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LinkedWorkbookCollection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["WorkbookLinksRefreshMode"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LinkedWorkbookCollection.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LinkedWorkbookCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeLinkedWorkbookCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(LinkedWorkbookCollection.prototype, "workbookLinksRefreshMode", {
            get: function () {
                _throwIfNotLoaded("workbookLinksRefreshMode", this._W, _typeLinkedWorkbookCollection, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "WorkbookLinksRefreshMode", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        LinkedWorkbookCollection.prototype.breakAllLinks = function () {
            _invokeMethod(this, "BreakAllLinks", 0, [], 0, 0);
        };
        LinkedWorkbookCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.LinkedWorkbook, this, [key]);
        };
        LinkedWorkbookCollection.prototype.getItemOrNullObject = function (key) {
            return _createMethodObject(Excel.LinkedWorkbook, this, "GetItemOrNullObject", 0, [key], false, false, null, 0);
        };
        LinkedWorkbookCollection.prototype.refreshAll = function () {
            _invokeMethod(this, "RefreshAll", 0, [], 0, 0);
        };
        LinkedWorkbookCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["WorkbookLinksRefreshMode"])) {
                this._W = obj["WorkbookLinksRefreshMode"];
            }
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.LinkedWorkbook, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        LinkedWorkbookCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        LinkedWorkbookCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        LinkedWorkbookCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.LinkedWorkbook, true, _this, childItemData, index); });
        };
        LinkedWorkbookCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        LinkedWorkbookCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.LinkedWorkbook, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return LinkedWorkbookCollection;
    }(OfficeExtension.ClientObject));
    Excel.LinkedWorkbookCollection = LinkedWorkbookCollection;
    var WorkbookLinksRefreshMode;
    (function (WorkbookLinksRefreshMode) {
        WorkbookLinksRefreshMode["manual"] = "Manual";
        WorkbookLinksRefreshMode["automatic"] = "Automatic";
    })(WorkbookLinksRefreshMode = Excel.WorkbookLinksRefreshMode || (Excel.WorkbookLinksRefreshMode = {}));
    var DateFilterCondition;
    (function (DateFilterCondition) {
        DateFilterCondition["unknown"] = "Unknown";
        DateFilterCondition["equals"] = "Equals";
        DateFilterCondition["before"] = "Before";
        DateFilterCondition["beforeOrEqualTo"] = "BeforeOrEqualTo";
        DateFilterCondition["after"] = "After";
        DateFilterCondition["afterOrEqualTo"] = "AfterOrEqualTo";
        DateFilterCondition["between"] = "Between";
        DateFilterCondition["tomorrow"] = "Tomorrow";
        DateFilterCondition["today"] = "Today";
        DateFilterCondition["yesterday"] = "Yesterday";
        DateFilterCondition["nextWeek"] = "NextWeek";
        DateFilterCondition["thisWeek"] = "ThisWeek";
        DateFilterCondition["lastWeek"] = "LastWeek";
        DateFilterCondition["nextMonth"] = "NextMonth";
        DateFilterCondition["thisMonth"] = "ThisMonth";
        DateFilterCondition["lastMonth"] = "LastMonth";
        DateFilterCondition["nextQuarter"] = "NextQuarter";
        DateFilterCondition["thisQuarter"] = "ThisQuarter";
        DateFilterCondition["lastQuarter"] = "LastQuarter";
        DateFilterCondition["nextYear"] = "NextYear";
        DateFilterCondition["thisYear"] = "ThisYear";
        DateFilterCondition["lastYear"] = "LastYear";
        DateFilterCondition["yearToDate"] = "YearToDate";
        DateFilterCondition["allDatesInPeriodQuarter1"] = "AllDatesInPeriodQuarter1";
        DateFilterCondition["allDatesInPeriodQuarter2"] = "AllDatesInPeriodQuarter2";
        DateFilterCondition["allDatesInPeriodQuarter3"] = "AllDatesInPeriodQuarter3";
        DateFilterCondition["allDatesInPeriodQuarter4"] = "AllDatesInPeriodQuarter4";
        DateFilterCondition["allDatesInPeriodJanuary"] = "AllDatesInPeriodJanuary";
        DateFilterCondition["allDatesInPeriodFebruary"] = "AllDatesInPeriodFebruary";
        DateFilterCondition["allDatesInPeriodMarch"] = "AllDatesInPeriodMarch";
        DateFilterCondition["allDatesInPeriodApril"] = "AllDatesInPeriodApril";
        DateFilterCondition["allDatesInPeriodMay"] = "AllDatesInPeriodMay";
        DateFilterCondition["allDatesInPeriodJune"] = "AllDatesInPeriodJune";
        DateFilterCondition["allDatesInPeriodJuly"] = "AllDatesInPeriodJuly";
        DateFilterCondition["allDatesInPeriodAugust"] = "AllDatesInPeriodAugust";
        DateFilterCondition["allDatesInPeriodSeptember"] = "AllDatesInPeriodSeptember";
        DateFilterCondition["allDatesInPeriodOctober"] = "AllDatesInPeriodOctober";
        DateFilterCondition["allDatesInPeriodNovember"] = "AllDatesInPeriodNovember";
        DateFilterCondition["allDatesInPeriodDecember"] = "AllDatesInPeriodDecember";
    })(DateFilterCondition = Excel.DateFilterCondition || (Excel.DateFilterCondition = {}));
    var LabelFilterCondition;
    (function (LabelFilterCondition) {
        LabelFilterCondition["unknown"] = "Unknown";
        LabelFilterCondition["equals"] = "Equals";
        LabelFilterCondition["beginsWith"] = "BeginsWith";
        LabelFilterCondition["endsWith"] = "EndsWith";
        LabelFilterCondition["contains"] = "Contains";
        LabelFilterCondition["greaterThan"] = "GreaterThan";
        LabelFilterCondition["greaterThanOrEqualTo"] = "GreaterThanOrEqualTo";
        LabelFilterCondition["lessThan"] = "LessThan";
        LabelFilterCondition["lessThanOrEqualTo"] = "LessThanOrEqualTo";
        LabelFilterCondition["between"] = "Between";
    })(LabelFilterCondition = Excel.LabelFilterCondition || (Excel.LabelFilterCondition = {}));
    var PivotFilterType;
    (function (PivotFilterType) {
        PivotFilterType["unknown"] = "Unknown";
        PivotFilterType["value"] = "Value";
        PivotFilterType["manual"] = "Manual";
        PivotFilterType["label"] = "Label";
        PivotFilterType["date"] = "Date";
    })(PivotFilterType = Excel.PivotFilterType || (Excel.PivotFilterType = {}));
    var TopBottomSelectionType;
    (function (TopBottomSelectionType) {
        TopBottomSelectionType["items"] = "Items";
        TopBottomSelectionType["percent"] = "Percent";
        TopBottomSelectionType["sum"] = "Sum";
    })(TopBottomSelectionType = Excel.TopBottomSelectionType || (Excel.TopBottomSelectionType = {}));
    var ValueFilterCondition;
    (function (ValueFilterCondition) {
        ValueFilterCondition["unknown"] = "Unknown";
        ValueFilterCondition["equals"] = "Equals";
        ValueFilterCondition["greaterThan"] = "GreaterThan";
        ValueFilterCondition["greaterThanOrEqualTo"] = "GreaterThanOrEqualTo";
        ValueFilterCondition["lessThan"] = "LessThan";
        ValueFilterCondition["lessThanOrEqualTo"] = "LessThanOrEqualTo";
        ValueFilterCondition["between"] = "Between";
        ValueFilterCondition["topN"] = "TopN";
        ValueFilterCondition["bottomN"] = "BottomN";
    })(ValueFilterCondition = Excel.ValueFilterCondition || (Excel.ValueFilterCondition = {}));
    var ChartSeriesDimension;
    (function (ChartSeriesDimension) {
        ChartSeriesDimension["categories"] = "Categories";
        ChartSeriesDimension["values"] = "Values";
        ChartSeriesDimension["xvalues"] = "XValues";
        ChartSeriesDimension["yvalues"] = "YValues";
        ChartSeriesDimension["bubbleSizes"] = "BubbleSizes";
    })(ChartSeriesDimension = Excel.ChartSeriesDimension || (Excel.ChartSeriesDimension = {}));
    var _typeRuntime = "Runtime";
    var Runtime = (function (_super) {
        __extends(Runtime, _super);
        function Runtime() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Runtime.prototype, "_className", {
            get: function () {
                return "Runtime";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Runtime.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["enableEvents"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Runtime.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["EnableEvents"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Runtime.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Runtime.prototype, "enableEvents", {
            get: function () {
                _throwIfNotLoaded("enableEvents", this._E, _typeRuntime, this._isNull);
                _throwIfApiNotSupported("Runtime.enableEvents", _defaultApiSetName, "1.8", _hostName);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "EnableEvents", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Runtime.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["enableEvents"], [], []);
        };
        Runtime.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Runtime.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["EnableEvents"])) {
                this._E = obj["EnableEvents"];
            }
        };
        Runtime.prototype.load = function (options) {
            return _load(this, options);
        };
        Runtime.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Runtime.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Runtime.prototype.toJSON = function () {
            return _toJson(this, {
                "enableEvents": this._E
            }, {});
        };
        Runtime.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Runtime.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Runtime;
    }(OfficeExtension.ClientObject));
    Excel.Runtime = Runtime;
    var _typeApplication = "Application";
    var Application = (function (_super) {
        __extends(Application, _super);
        function Application() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Application.prototype, "_className", {
            get: function () {
                return "Application";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["calculationMode", "calculationEngineVersion", "calculationState", "decimalSeparator", "thousandsSeparator", "useSystemSeparators"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["CalculationMode", "CalculationEngineVersion", "CalculationState", "DecimalSeparator", "ThousandsSeparator", "UseSystemSeparators"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, false, false, false, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["iterativeCalculation", "ribbon", "cultureInfo"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "cultureInfo", {
            get: function () {
                _throwIfApiNotSupported("Application.cultureInfo", _defaultApiSetName, "1.11", _hostName);
                if (!this._Cu) {
                    this._Cu = _createPropertyObject(Excel.CultureInfo, this, "CultureInfo", false, 4);
                }
                return this._Cu;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "iterativeCalculation", {
            get: function () {
                _throwIfApiNotSupported("Application.iterativeCalculation", _defaultApiSetName, "1.9", _hostName);
                if (!this._I) {
                    this._I = _createPropertyObject(Excel.IterativeCalculation, this, "IterativeCalculation", false, 4);
                }
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "ribbon", {
            get: function () {
                _throwIfApiNotSupported("Application.ribbon", _defaultApiSetName, "1.9", _hostName);
                if (!this._R) {
                    this._R = _createPropertyObject(Excel.Ribbon, this, "Ribbon", false, 4);
                }
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "calculationEngineVersion", {
            get: function () {
                _throwIfNotLoaded("calculationEngineVersion", this._C, _typeApplication, this._isNull);
                _throwIfApiNotSupported("Application.calculationEngineVersion", _defaultApiSetName, "1.9", _hostName);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "calculationMode", {
            get: function () {
                _throwIfNotLoaded("calculationMode", this._Ca, _typeApplication, this._isNull);
                return this._Ca;
            },
            set: function (value) {
                this._Ca = value;
                _invokeSetProperty(this, "CalculationMode", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "calculationState", {
            get: function () {
                _throwIfNotLoaded("calculationState", this._Cal, _typeApplication, this._isNull);
                _throwIfApiNotSupported("Application.calculationState", _defaultApiSetName, "1.9", _hostName);
                return this._Cal;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "decimalSeparator", {
            get: function () {
                _throwIfNotLoaded("decimalSeparator", this._D, _typeApplication, this._isNull);
                _throwIfApiNotSupported("Application.decimalSeparator", _defaultApiSetName, "1.11", _hostName);
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "thousandsSeparator", {
            get: function () {
                _throwIfNotLoaded("thousandsSeparator", this._T, _typeApplication, this._isNull);
                _throwIfApiNotSupported("Application.thousandsSeparator", _defaultApiSetName, "1.11", _hostName);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Application.prototype, "useSystemSeparators", {
            get: function () {
                _throwIfNotLoaded("useSystemSeparators", this._U, _typeApplication, this._isNull);
                _throwIfApiNotSupported("Application.useSystemSeparators", _defaultApiSetName, "1.11", _hostName);
                return this._U;
            },
            enumerable: true,
            configurable: true
        });
        Application.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["calculationMode"], ["iterativeCalculation", "ribbon"], [
                "cultureInfo"
            ]);
        };
        Application.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Application.prototype.calculate = function (calculationType) {
            _invokeMethod(this, "Calculate", 0, [calculationType], 0, 0);
        };
        Application.prototype.createWorkbook = function (base64File) {
            _throwIfApiNotSupported("Application.createWorkbook", _defaultApiSetName, "1.8", _hostName);
            return _createMethodObject(Excel.WorkbookCreated, this, "CreateWorkbook", 1, [base64File], false, true, "_GetWorkbookCreatedById", 0);
        };
        Application.prototype.suspendApiCalculationUntilNextSync = function () {
            var handled = _CC.Application_SuspendApiCalculationUntilNextSync(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("Application.suspendApiCalculationUntilNextSync", _defaultApiSetName, "1.6", _hostName);
            _invokeMethod(this, "SuspendApiCalculationUntilNextSync", 0, [], 0, 0);
        };
        Application.prototype.suspendScreenUpdatingUntilNextSync = function () {
            _throwIfApiNotSupported("Application.suspendScreenUpdatingUntilNextSync", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "SuspendScreenUpdatingUntilNextSync", 0, [], 0, 0);
        };
        Application.prototype._GetWorkbookCreatedById = function (id) {
            _throwIfApiNotSupported("Application._GetWorkbookCreatedById", _defaultApiSetName, "1.8", _hostName);
            return _createMethodObject(Excel.WorkbookCreated, this, "_GetWorkbookCreatedById", 1, [id], false, false, null, 4);
        };
        Application.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["CalculationEngineVersion"])) {
                this._C = obj["CalculationEngineVersion"];
            }
            if (!_isUndefined(obj["CalculationMode"])) {
                this._Ca = obj["CalculationMode"];
            }
            if (!_isUndefined(obj["CalculationState"])) {
                this._Cal = obj["CalculationState"];
            }
            if (!_isUndefined(obj["DecimalSeparator"])) {
                this._D = obj["DecimalSeparator"];
            }
            if (!_isUndefined(obj["ThousandsSeparator"])) {
                this._T = obj["ThousandsSeparator"];
            }
            if (!_isUndefined(obj["UseSystemSeparators"])) {
                this._U = obj["UseSystemSeparators"];
            }
            _handleNavigationPropertyResults(this, obj, ["cultureInfo", "CultureInfo", "iterativeCalculation", "IterativeCalculation", "ribbon", "Ribbon"]);
        };
        Application.prototype.load = function (options) {
            return _load(this, options);
        };
        Application.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Application.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Application.prototype.toJSON = function () {
            return _toJson(this, {
                "calculationEngineVersion": this._C,
                "calculationMode": this._Ca,
                "calculationState": this._Cal,
                "decimalSeparator": this._D,
                "thousandsSeparator": this._T,
                "useSystemSeparators": this._U
            }, {
                "cultureInfo": this._Cu,
                "iterativeCalculation": this._I,
                "ribbon": this._R
            });
        };
        Application.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Application.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Application;
    }(OfficeExtension.ClientObject));
    Excel.Application = Application;
    (function (_CC) {
        function Application_SuspendApiCalculationUntilNextSync(thisObj) {
            if (isOfficePlatform("Mac") && isExcelApiSetSupported(1.6) && !isExcelApiSetSupported(1.7)) {
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.Application_SuspendApiCalculationUntilNextSync = Application_SuspendApiCalculationUntilNextSync;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeIterativeCalculation = "IterativeCalculation";
    var IterativeCalculation = (function (_super) {
        __extends(IterativeCalculation, _super);
        function IterativeCalculation() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(IterativeCalculation.prototype, "_className", {
            get: function () {
                return "IterativeCalculation";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IterativeCalculation.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["enabled", "maxIteration", "maxChange"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IterativeCalculation.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Enabled", "MaxIteration", "MaxChange"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IterativeCalculation.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IterativeCalculation.prototype, "enabled", {
            get: function () {
                _throwIfNotLoaded("enabled", this._E, _typeIterativeCalculation, this._isNull);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "Enabled", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IterativeCalculation.prototype, "maxChange", {
            get: function () {
                _throwIfNotLoaded("maxChange", this._M, _typeIterativeCalculation, this._isNull);
                return this._M;
            },
            set: function (value) {
                this._M = value;
                _invokeSetProperty(this, "MaxChange", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IterativeCalculation.prototype, "maxIteration", {
            get: function () {
                _throwIfNotLoaded("maxIteration", this._Ma, _typeIterativeCalculation, this._isNull);
                return this._Ma;
            },
            set: function (value) {
                this._Ma = value;
                _invokeSetProperty(this, "MaxIteration", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        IterativeCalculation.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["enabled", "maxIteration", "maxChange"], [], []);
        };
        IterativeCalculation.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        IterativeCalculation.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Enabled"])) {
                this._E = obj["Enabled"];
            }
            if (!_isUndefined(obj["MaxChange"])) {
                this._M = obj["MaxChange"];
            }
            if (!_isUndefined(obj["MaxIteration"])) {
                this._Ma = obj["MaxIteration"];
            }
        };
        IterativeCalculation.prototype.load = function (options) {
            return _load(this, options);
        };
        IterativeCalculation.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        IterativeCalculation.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        IterativeCalculation.prototype.toJSON = function () {
            return _toJson(this, {
                "enabled": this._E,
                "maxChange": this._M,
                "maxIteration": this._Ma
            }, {});
        };
        IterativeCalculation.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        IterativeCalculation.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return IterativeCalculation;
    }(OfficeExtension.ClientObject));
    Excel.IterativeCalculation = IterativeCalculation;
    var _typeWorkbook = "Workbook";
    var Workbook = (function (_super) {
        __extends(Workbook, _super);
        function Workbook() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Workbook.prototype, "_className", {
            get: function () {
                return "Workbook";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "readOnly", "isDirty", "chartDataPointTrack", "usePrecisionAsDisplayed", "calculationEngineVersion", "autoSave", "previouslySaved"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "ReadOnly", "IsDirty", "ChartDataPointTrack", "UsePrecisionAsDisplayed", "CalculationEngineVersion", "AutoSave", "PreviouslySaved"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, false, true, true, true, false, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["worksheets", "names", "tables", "application", "bindings", "functions", "_V1Api", "pivotTables", "settings", "customXmlParts", "internalTest", "properties", "styles", "protection", "dataConnections", "_Runtime", "comments", "slicers", "tableStyles", "pivotTableStyles", "slicerStyles", "timelineStyles", "queries", "linkedWorkbooks"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "application", {
            get: function () {
                if (!this._A) {
                    this._A = _createPropertyObject(Excel.Application, this, "Application", false, 4);
                }
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "bindings", {
            get: function () {
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.BindingCollection, this, "Bindings", true, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "comments", {
            get: function () {
                _throwIfApiNotSupported("Workbook.comments", _defaultApiSetName, "1.10", _hostName);
                if (!this._Co) {
                    this._Co = _createPropertyObject(Excel.CommentCollection, this, "Comments", true, 4);
                }
                return this._Co;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "customXmlParts", {
            get: function () {
                _throwIfApiNotSupported("Workbook.customXmlParts", _defaultApiSetName, "1.5", _hostName);
                if (!this._Cus) {
                    this._Cus = _createPropertyObject(Excel.CustomXmlPartCollection, this, "CustomXmlParts", true, 4);
                }
                return this._Cus;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "dataConnections", {
            get: function () {
                _throwIfApiNotSupported("Workbook.dataConnections", _defaultApiSetName, "1.7", _hostName);
                if (!this._D) {
                    this._D = _createPropertyObject(Excel.DataConnectionCollection, this, "DataConnections", false, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "functions", {
            get: function () {
                _throwIfApiNotSupported("Workbook.functions", _defaultApiSetName, "1.2", _hostName);
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.Functions, this, "Functions", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "internalTest", {
            get: function () {
                _throwIfApiNotSupported("Workbook.internalTest", _defaultApiSetName, "1.6", _hostName);
                if (!this._I) {
                    this._I = _createPropertyObject(Excel.InternalTest, this, "InternalTest", false, 4);
                }
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "linkedWorkbooks", {
            get: function () {
                _throwIfApiNotSupported("Workbook.linkedWorkbooks", "ExcelApiOnline", "1.1", _hostName);
                if (!this._L) {
                    this._L = _createPropertyObject(Excel.LinkedWorkbookCollection, this, "LinkedWorkbooks", true, 4);
                }
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "names", {
            get: function () {
                if (!this._Na) {
                    this._Na = _createPropertyObject(Excel.NamedItemCollection, this, "Names", true, 4);
                }
                return this._Na;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "pivotTableStyles", {
            get: function () {
                _throwIfApiNotSupported("Workbook.pivotTableStyles", _defaultApiSetName, "1.10", _hostName);
                if (!this._Pi) {
                    this._Pi = _createPropertyObject(Excel.PivotTableStyleCollection, this, "PivotTableStyles", true, 4);
                }
                return this._Pi;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "pivotTables", {
            get: function () {
                _throwIfApiNotSupported("Workbook.pivotTables", _defaultApiSetName, "1.3", _hostName);
                if (!this._P) {
                    this._P = _createPropertyObject(Excel.PivotTableCollection, this, "PivotTables", true, 4);
                }
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "properties", {
            get: function () {
                _throwIfApiNotSupported("Workbook.properties", _defaultApiSetName, "1.7", _hostName);
                if (!this._Pro) {
                    this._Pro = _createPropertyObject(Excel.DocumentProperties, this, "Properties", false, 4);
                }
                return this._Pro;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "protection", {
            get: function () {
                _throwIfApiNotSupported("Workbook.protection", _defaultApiSetName, "1.7", _hostName);
                if (!this._Prot) {
                    this._Prot = _createPropertyObject(Excel.WorkbookProtection, this, "Protection", false, 4);
                }
                return this._Prot;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "queries", {
            get: function () {
                _throwIfApiNotSupported("Workbook.queries", _defaultApiSetName, "1.14", _hostName);
                if (!this._Q) {
                    this._Q = _createPropertyObject(Excel.QueryCollection, this, "Queries", true, 4);
                }
                return this._Q;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "settings", {
            get: function () {
                _throwIfApiNotSupported("Workbook.settings", _defaultApiSetName, "1.4", _hostName);
                if (!this._S) {
                    this._S = _createPropertyObject(Excel.SettingCollection, this, "Settings", true, 4);
                }
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "slicerStyles", {
            get: function () {
                _throwIfApiNotSupported("Workbook.slicerStyles", _defaultApiSetName, "1.10", _hostName);
                if (!this._Sli) {
                    this._Sli = _createPropertyObject(Excel.SlicerStyleCollection, this, "SlicerStyles", true, 4);
                }
                return this._Sli;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "slicers", {
            get: function () {
                _throwIfApiNotSupported("Workbook.slicers", _defaultApiSetName, "1.10", _hostName);
                if (!this._Sl) {
                    this._Sl = _createPropertyObject(Excel.SlicerCollection, this, "Slicers", true, 4);
                }
                return this._Sl;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "styles", {
            get: function () {
                _throwIfApiNotSupported("Workbook.styles", _defaultApiSetName, "1.7", _hostName);
                if (!this._St) {
                    this._St = _createPropertyObject(Excel.StyleCollection, this, "Styles", true, 4);
                }
                return this._St;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "tableStyles", {
            get: function () {
                _throwIfApiNotSupported("Workbook.tableStyles", _defaultApiSetName, "1.10", _hostName);
                if (!this._Ta) {
                    this._Ta = _createPropertyObject(Excel.TableStyleCollection, this, "TableStyles", true, 4);
                }
                return this._Ta;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "tables", {
            get: function () {
                if (!this._T) {
                    this._T = _createPropertyObject(Excel.TableCollection, this, "Tables", true, 4);
                }
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "timelineStyles", {
            get: function () {
                _throwIfApiNotSupported("Workbook.timelineStyles", _defaultApiSetName, "1.10", _hostName);
                if (!this._Ti) {
                    this._Ti = _createPropertyObject(Excel.TimelineStyleCollection, this, "TimelineStyles", true, 4);
                }
                return this._Ti;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "worksheets", {
            get: function () {
                if (!this._W) {
                    this._W = _createPropertyObject(Excel.WorksheetCollection, this, "Worksheets", true, 4);
                }
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "_Runtime", {
            get: function () {
                _throwIfApiNotSupported("Workbook._Runtime", _defaultApiSetName, "1.5", _hostName);
                if (!this.__R) {
                    this.__R = _createPropertyObject(Excel.Runtime, this, "_Runtime", false, 4);
                }
                return this.__R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "_V1Api", {
            get: function () {
                _throwIfApiNotSupported("Workbook._V1Api", _defaultApiSetName, "1.3", _hostName);
                if (!this.__V) {
                    this.__V = _createPropertyObject(Excel._V1Api, this, "_V1Api", false, 4);
                }
                return this.__V;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "autoSave", {
            get: function () {
                _throwIfNotLoaded("autoSave", this._Au, _typeWorkbook, this._isNull);
                _throwIfApiNotSupported("Workbook.autoSave", _defaultApiSetName, "1.9", _hostName);
                return this._Au;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "calculationEngineVersion", {
            get: function () {
                _throwIfNotLoaded("calculationEngineVersion", this._C, _typeWorkbook, this._isNull);
                _throwIfApiNotSupported("Workbook.calculationEngineVersion", _defaultApiSetName, "1.9", _hostName);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "chartDataPointTrack", {
            get: function () {
                _throwIfNotLoaded("chartDataPointTrack", this._Ch, _typeWorkbook, this._isNull);
                _throwIfApiNotSupported("Workbook.chartDataPointTrack", _defaultApiSetName, "1.9", _hostName);
                return this._Ch;
            },
            set: function (value) {
                this._Ch = value;
                _invokeSetProperty(this, "ChartDataPointTrack", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "isDirty", {
            get: function () {
                _throwIfNotLoaded("isDirty", this._Is, _typeWorkbook, this._isNull);
                _throwIfApiNotSupported("Workbook.isDirty", _defaultApiSetName, "1.9", _hostName);
                return this._Is;
            },
            set: function (value) {
                this._Is = value;
                _invokeSetProperty(this, "IsDirty", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeWorkbook, this._isNull);
                _throwIfApiNotSupported("Workbook.name", _defaultApiSetName, "1.7", _hostName);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "previouslySaved", {
            get: function () {
                _throwIfNotLoaded("previouslySaved", this._Pr, _typeWorkbook, this._isNull);
                _throwIfApiNotSupported("Workbook.previouslySaved", _defaultApiSetName, "1.9", _hostName);
                return this._Pr;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "readOnly", {
            get: function () {
                _throwIfNotLoaded("readOnly", this._R, _typeWorkbook, this._isNull);
                _throwIfApiNotSupported("Workbook.readOnly", _defaultApiSetName, "1.8", _hostName);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "usePrecisionAsDisplayed", {
            get: function () {
                _throwIfNotLoaded("usePrecisionAsDisplayed", this._U, _typeWorkbook, this._isNull);
                _throwIfApiNotSupported("Workbook.usePrecisionAsDisplayed", _defaultApiSetName, "1.9", _hostName);
                return this._U;
            },
            set: function (value) {
                this._U = value;
                _invokeSetProperty(this, "UsePrecisionAsDisplayed", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Workbook.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["isDirty", "chartDataPointTrack", "usePrecisionAsDisplayed"], ["properties"], [
                "_Runtime",
                "_V1Api",
                "application",
                "bindings",
                "comments",
                "customXmlParts",
                "dataConnections",
                "functions",
                "internalTest",
                "linkedWorkbooks",
                "names",
                "pivotTables",
                "pivotTableStyles",
                "protection",
                "queries",
                "settings",
                "slicers",
                "slicerStyles",
                "styles",
                "tables",
                "tableStyles",
                "timelineStyles",
                "worksheets"
            ]);
        };
        Workbook.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Workbook.prototype.close = function (closeBehavior) {
            _throwIfApiNotSupported("Workbook.close", _defaultApiSetName, "1.11", _hostName);
            _invokeMethod(this, "Close", 0, [closeBehavior], 0, 0);
        };
        Workbook.prototype.enableOfficeScriptRecording = function (eventId) {
            var handled = _CC.Workbook_EnableOfficeScriptRecording(this, eventId).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("Workbook.enableOfficeScriptRecording", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "EnableOfficeScriptRecording", 0, [eventId], 0, 0);
        };
        Workbook.prototype.getActiveCell = function () {
            _throwIfApiNotSupported("Workbook.getActiveCell", _defaultApiSetName, "1.7", _hostName);
            return _createMethodObject(Excel.Range, this, "GetActiveCell", 1, [], false, true, null, 4);
        };
        Workbook.prototype.getActiveChart = function () {
            _throwIfApiNotSupported("Workbook.getActiveChart", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.Chart, this, "GetActiveChart", 1, [], false, false, null, 4);
        };
        Workbook.prototype.getActiveChartOrNullObject = function () {
            _throwIfApiNotSupported("Workbook.getActiveChartOrNullObject", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.Chart, this, "GetActiveChartOrNullObject", 1, [], false, false, null, 4);
        };
        Workbook.prototype.getActiveSlicer = function () {
            _throwIfApiNotSupported("Workbook.getActiveSlicer", _defaultApiSetName, "1.10", _hostName);
            return _createMethodObject(Excel.Slicer, this, "GetActiveSlicer", 1, [], false, false, null, 4);
        };
        Workbook.prototype.getActiveSlicerOrNullObject = function () {
            _throwIfApiNotSupported("Workbook.getActiveSlicerOrNullObject", _defaultApiSetName, "1.10", _hostName);
            return _createMethodObject(Excel.Slicer, this, "GetActiveSlicerOrNullObject", 1, [], false, false, null, 4);
        };
        Workbook.prototype.getIsActiveCollabSession = function () {
            _throwIfApiNotSupported("Workbook.getIsActiveCollabSession", _defaultApiSetName, "1.9", _hostName);
            return _invokeMethod(this, "GetIsActiveCollabSession", 0, [], 0, 0);
        };
        Workbook.prototype.getSelectedRange = function () {
            return _createMethodObject(Excel.Range, this, "GetSelectedRange", 1, [], false, true, null, 4);
        };
        Workbook.prototype.getSelectedRanges = function () {
            _throwIfApiNotSupported("Workbook.getSelectedRanges", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "GetSelectedRanges", 1, [], false, true, null, 4);
        };
        Workbook.prototype.insertWorksheetsFromBase64 = function (base64File, options) {
            _throwIfApiNotSupported("Workbook.insertWorksheetsFromBase64", _defaultApiSetName, "1.13", _hostName);
            return _invokeMethod(this, "InsertWorksheetsFromBase64", 0, [base64File, options], 0, 0);
        };
        Workbook.prototype.recordAction = function (payload) {
            var handled = _CC.Workbook_RecordAction(this, payload).handled;
            if (handled) {
                return;
            }
            _invokeMethod(this, "RecordAction", 1, [payload], 4, 0);
        };
        Workbook.prototype.registerCustomFunctions = function (addinNamespace, metadataContent, addinId, locale, addinInvariantNamespace, addinTitle, isXllCompatible) {
            _throwIfApiNotSupported("Workbook.registerCustomFunctions", "CustomFunctions", "1.1", _hostName);
            _invokeMethod(this, "RegisterCustomFunctions", 0, [addinNamespace, metadataContent, addinId, locale, addinInvariantNamespace, addinTitle, isXllCompatible], 8, 0);
        };
        Workbook.prototype.save = function (saveBehavior) {
            _throwIfApiNotSupported("Workbook.save", _defaultApiSetName, "1.11", _hostName);
            _invokeMethod(this, "Save", 0, [saveBehavior], 0, 0);
        };
        Workbook.prototype._GetObjectByReferenceId = function (bstrReferenceId) {
            return _invokeMethod(this, "_GetObjectByReferenceId", 1, [bstrReferenceId], 4, 0);
        };
        Workbook.prototype._GetObjectTypeNameByReferenceId = function (bstrReferenceId) {
            return _invokeMethod(this, "_GetObjectTypeNameByReferenceId", 1, [bstrReferenceId], 4, 0);
        };
        Workbook.prototype._GetRangeForEventByReferenceId = function (bstrReferenceId) {
            return _createMethodObject(Excel.Range, this, "_GetRangeForEventByReferenceId", 1, [bstrReferenceId], false, false, null, 4);
        };
        Workbook.prototype._GetRangeOrNullObjectForEventByReferenceId = function (bstrReferenceId) {
            return _createMethodObject(Excel.Range, this, "_GetRangeOrNullObjectForEventByReferenceId", 1, [bstrReferenceId], false, false, null, 4);
        };
        Workbook.prototype._GetRangesForEventByReferenceId = function (bstrReferenceId) {
            _throwIfApiNotSupported("Workbook._GetRangesForEventByReferenceId", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "_GetRangesForEventByReferenceId", 1, [bstrReferenceId], false, false, null, 4);
        };
        Workbook.prototype._GetRangesOrNullObjectForEventByReferenceId = function (bstrReferenceId) {
            _throwIfApiNotSupported("Workbook._GetRangesOrNullObjectForEventByReferenceId", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "_GetRangesOrNullObjectForEventByReferenceId", 1, [bstrReferenceId], false, false, null, 4);
        };
        Workbook.prototype._GetReferenceCount = function () {
            return _invokeMethod(this, "_GetReferenceCount", 1, [], 4, 0);
        };
        Workbook.prototype._RegisterActivatedEvent = function () {
            _throwIfApiNotSupported("Workbook._RegisterActivatedEvent", _defaultApiSetName, "1.13", _hostName);
            _invokeMethod(this, "_RegisterActivatedEvent", 1, [], 0, 0);
        };
        Workbook.prototype._RegisterAutoSaveSettingChangedEvent = function () {
            _throwIfApiNotSupported("Workbook._RegisterAutoSaveSettingChangedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_RegisterAutoSaveSettingChangedEvent", 0, [], 0, 0);
        };
        Workbook.prototype._RemoveAllReferences = function () {
            _invokeMethod(this, "_RemoveAllReferences", 1, [], 0, 0);
        };
        Workbook.prototype._RemoveReference = function (bstrReferenceId) {
            _invokeMethod(this, "_RemoveReference", 1, [bstrReferenceId], 0, 0);
        };
        Workbook.prototype._SetOsfControlContainerReadyForCustomFunctions = function () {
            _throwIfApiNotSupported("Workbook._SetOsfControlContainerReadyForCustomFunctions", "CustomFunctions", "1.1", _hostName);
            _invokeMethod(this, "_SetOsfControlContainerReadyForCustomFunctions", 0, [], 0, 0);
        };
        Workbook.prototype._UnregisterActivatedEvent = function () {
            _throwIfApiNotSupported("Workbook._UnregisterActivatedEvent", _defaultApiSetName, "1.13", _hostName);
            _invokeMethod(this, "_UnregisterActivatedEvent", 1, [], 0, 0);
        };
        Workbook.prototype._UnregisterAutoSaveSettingChangedEvent = function () {
            _throwIfApiNotSupported("Workbook._UnregisterAutoSaveSettingChangedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_UnregisterAutoSaveSettingChangedEvent", 0, [], 0, 0);
        };
        Workbook.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AutoSave"])) {
                this._Au = obj["AutoSave"];
            }
            if (!_isUndefined(obj["CalculationEngineVersion"])) {
                this._C = obj["CalculationEngineVersion"];
            }
            if (!_isUndefined(obj["ChartDataPointTrack"])) {
                this._Ch = obj["ChartDataPointTrack"];
            }
            if (!_isUndefined(obj["IsDirty"])) {
                this._Is = obj["IsDirty"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["PreviouslySaved"])) {
                this._Pr = obj["PreviouslySaved"];
            }
            if (!_isUndefined(obj["ReadOnly"])) {
                this._R = obj["ReadOnly"];
            }
            if (!_isUndefined(obj["UsePrecisionAsDisplayed"])) {
                this._U = obj["UsePrecisionAsDisplayed"];
            }
            _handleNavigationPropertyResults(this, obj, ["application", "Application", "bindings", "Bindings", "comments", "Comments", "customXmlParts", "CustomXmlParts", "dataConnections", "DataConnections", "functions", "Functions", "internalTest", "InternalTest", "linkedWorkbooks", "LinkedWorkbooks", "names", "Names", "pivotTableStyles", "PivotTableStyles", "pivotTables", "PivotTables", "properties", "Properties", "protection", "Protection", "queries", "Queries", "settings", "Settings", "slicerStyles", "SlicerStyles", "slicers", "Slicers", "styles", "Styles", "tableStyles", "TableStyles", "tables", "Tables", "timelineStyles", "TimelineStyles", "worksheets", "Worksheets", "_Runtime", "_Runtime", "_V1Api", "_V1Api"]);
        };
        Workbook.prototype.load = function (options) {
            return _load(this, options);
        };
        Workbook.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Workbook.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(Workbook.prototype, "onActivated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Workbook.onActivated", _defaultApiSetName, "1.13", _hostName);
                if (!this.m_activated) {
                    this.m_activated = new OfficeExtension.GenericEventHandlers(this.context, this, "Activated", {
                        eventType: 2203,
                        registerFunc: function () { return _this._RegisterActivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterActivatedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.workbookActivated
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_activated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "onAutoSaveSettingChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Workbook.onAutoSaveSettingChanged", _defaultApiSetName, "1.9", _hostName);
                if (!this.m_autoSaveSettingChanged) {
                    this.m_autoSaveSettingChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "AutoSaveSettingChanged", {
                        eventType: 2200,
                        registerFunc: function () { return _this._RegisterAutoSaveSettingChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterAutoSaveSettingChangedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.workbookAutoSaveSettingChanged
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_autoSaveSettingChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "onSelectionChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Workbook.onSelectionChanged", _defaultApiSetName, "1.3", _hostName);
                if (!this.m_selectionChanged) {
                    this.m_selectionChanged = new OfficeExtension.EventHandlers(this.context, this, "SelectionChanged", {
                        registerFunc: function (handlerCallback) {
                            return _this.context.eventRegistration.register(_CC.office10EventIdDocumentSelectionChangedEvent, "", handlerCallback);
                        },
                        unregisterFunc: function (handlerCallback) {
                            return _this.context.eventRegistration.unregister(_CC.office10EventIdDocumentSelectionChangedEvent, "", handlerCallback);
                        },
                        eventArgsTransformFunc: function (args) {
                            var newEventArgs = _CC.Workbook_SelectionChanged_EventArgsTransform(_this, args);
                            return OfficeExtension.Utility._createPromiseFromResult(newEventArgs);
                        }
                    });
                }
                return this.m_selectionChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Workbook.prototype, "_onMessage", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Workbook._onMessage", _defaultApiSetName, "1.7", _hostName);
                if (!this.m__Message) {
                    this.m__Message = new OfficeExtension.EventHandlers(this.context, this, "_Message", {
                        registerFunc: function (handlerCallback) {
                            return _this.context.eventRegistration.register(_CC.office10EventIdRichApiMessageEvent, "", handlerCallback);
                        },
                        unregisterFunc: function (handlerCallback) {
                            return _this.context.eventRegistration.unregister(_CC.office10EventIdRichApiMessageEvent, "", handlerCallback);
                        },
                        eventArgsTransformFunc: function (args) {
                            var newEventArgs = _CC.Workbook__Message_EventArgsTransform(_this, args);
                            return OfficeExtension.Utility._createPromiseFromResult(newEventArgs);
                        }
                    });
                }
                return this.m__Message;
            },
            enumerable: true,
            configurable: true
        });
        Workbook.prototype.toJSON = function () {
            return _toJson(this, {
                "autoSave": this._Au,
                "calculationEngineVersion": this._C,
                "chartDataPointTrack": this._Ch,
                "isDirty": this._Is,
                "name": this._N,
                "previouslySaved": this._Pr,
                "readOnly": this._R,
                "usePrecisionAsDisplayed": this._U
            }, {
                "bindings": this._B,
                "comments": this._Co,
                "customXmlParts": this._Cus,
                "names": this._Na,
                "pivotTables": this._P,
                "pivotTableStyles": this._Pi,
                "properties": this._Pro,
                "protection": this._Prot,
                "settings": this._S,
                "slicers": this._Sl,
                "slicerStyles": this._Sli,
                "styles": this._St,
                "tables": this._T,
                "tableStyles": this._Ta,
                "timelineStyles": this._Ti,
                "worksheets": this._W
            });
        };
        Workbook.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Workbook.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Workbook;
    }(OfficeExtension.ClientObject));
    Excel.Workbook = Workbook;
    (function (_CC) {
        function Workbook_EnableOfficeScriptRecording(thisObj, eventId) {
            this.context.eventId = eventId;
            return { handled: false };
        }
        _CC.Workbook_EnableOfficeScriptRecording = Workbook_EnableOfficeScriptRecording;
        function Workbook_RecordAction(thisObj, payload) {
            this.context.sdxPayload = payload;
            return { handled: false };
        }
        _CC.Workbook_RecordAction = Workbook_RecordAction;
        function Workbook_SelectionChanged_EventArgsTransform(thisObj, args) {
            return { workbook: thisObj };
        }
        _CC.Workbook_SelectionChanged_EventArgsTransform = Workbook_SelectionChanged_EventArgsTransform;
        function Workbook__Message_EventArgsTransform(thisObj, args) {
            return {
                entries: args.entries,
                workbook: thisObj
            };
        }
        _CC.Workbook__Message_EventArgsTransform = Workbook__Message_EventArgsTransform;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeWorkbookProtection = "WorkbookProtection";
    var WorkbookProtection = (function (_super) {
        __extends(WorkbookProtection, _super);
        function WorkbookProtection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(WorkbookProtection.prototype, "_className", {
            get: function () {
                return "WorkbookProtection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookProtection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["protected"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookProtection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Protected"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookProtection.prototype, "protected", {
            get: function () {
                _throwIfNotLoaded("protected", this._P, _typeWorkbookProtection, this._isNull);
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        WorkbookProtection.prototype.protect = function (password) {
            _invokeMethod(this, "Protect", 0, [password], 0, 0);
        };
        WorkbookProtection.prototype.unprotect = function (password) {
            _invokeMethod(this, "Unprotect", 0, [password], 0, 0);
        };
        WorkbookProtection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Protected"])) {
                this._P = obj["Protected"];
            }
        };
        WorkbookProtection.prototype.load = function (options) {
            return _load(this, options);
        };
        WorkbookProtection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        WorkbookProtection.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        WorkbookProtection.prototype.toJSON = function () {
            return _toJson(this, {
                "protected": this._P
            }, {});
        };
        WorkbookProtection.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        WorkbookProtection.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return WorkbookProtection;
    }(OfficeExtension.ClientObject));
    Excel.WorkbookProtection = WorkbookProtection;
    var _typeWorkbookCreated = "WorkbookCreated";
    var WorkbookCreated = (function (_super) {
        __extends(WorkbookCreated, _super);
        function WorkbookCreated() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(WorkbookCreated.prototype, "_className", {
            get: function () {
                return "WorkbookCreated";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookCreated.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookCreated.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookCreated.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeWorkbookCreated, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        WorkbookCreated.prototype.open = function () {
            _invokeMethod(this, "Open", 1, [], 4, 0);
        };
        WorkbookCreated.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
        };
        WorkbookCreated.prototype.load = function (options) {
            return _load(this, options);
        };
        WorkbookCreated.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        WorkbookCreated.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        WorkbookCreated.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        WorkbookCreated.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I
            }, {});
        };
        return WorkbookCreated;
    }(OfficeExtension.ClientObject));
    Excel.WorkbookCreated = WorkbookCreated;
    var _typeWorksheet = "Worksheet";
    var Worksheet = (function (_super) {
        __extends(Worksheet, _super);
        function Worksheet() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Worksheet.prototype, "_className", {
            get: function () {
                return "Worksheet";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "_collectionPropertyPath", {
            get: function () {
                return "workbook.worksheets";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "id", "position", "visibility", "tabColor", "standardWidth", "standardHeight", "showGridlines", "showHeadings", "enableCalculation", "tabId"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "Id", "Position", "Visibility", "TabColor", "StandardWidth", "StandardHeight", "ShowGridlines", "ShowHeadings", "EnableCalculation", "TabId"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, false, true, true, true, true, false, true, true, true, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["charts", "tables", "protection", "pivotTables", "names", "freezePanes", "pageLayout", "visuals", "shapes", "horizontalPageBreaks", "verticalPageBreaks", "autoFilter", "slicers", "comments", "customProperties", "namedSheetViews"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "autoFilter", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.autoFilter", _defaultApiSetName, "1.9", _hostName);
                if (!this._A) {
                    this._A = _createPropertyObject(Excel.AutoFilter, this, "AutoFilter", false, 4);
                }
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "charts", {
            get: function () {
                if (!this.m_charts) {
                    this.m_charts = _createPropertyObject(Excel.ChartCollection, this, "Charts", true, 4);
                }
                _CC.Worksheet_Charts_Get(this, this.m_charts);
                return this.m_charts;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "comments", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.comments", _defaultApiSetName, "1.10", _hostName);
                if (!this.m_comments) {
                    this.m_comments = _createPropertyObject(Excel.CommentCollection, this, "Comments", true, 4);
                }
                _CC.Worksheet_Comments_Get(this, this.m_comments);
                return this.m_comments;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "customProperties", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.customProperties", _defaultApiSetName, "1.12", _hostName);
                if (!this._C) {
                    this._C = _createPropertyObject(Excel.WorksheetCustomPropertyCollection, this, "CustomProperties", true, 4);
                }
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "freezePanes", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.freezePanes", _defaultApiSetName, "1.7", _hostName);
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.WorksheetFreezePanes, this, "FreezePanes", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "horizontalPageBreaks", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.horizontalPageBreaks", _defaultApiSetName, "1.9", _hostName);
                if (!this._Ho) {
                    this._Ho = _createPropertyObject(Excel.PageBreakCollection, this, "HorizontalPageBreaks", true, 4);
                }
                return this._Ho;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "namedSheetViews", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.namedSheetViews", "ExcelApiOnline", "1.1", _hostName);
                if (!this._Na) {
                    this._Na = _createPropertyObject(Excel.NamedSheetViewCollection, this, "NamedSheetViews", true, 4);
                }
                return this._Na;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "names", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.names", _defaultApiSetName, "1.4", _hostName);
                if (!this._Nam) {
                    this._Nam = _createPropertyObject(Excel.NamedItemCollection, this, "Names", true, 4);
                }
                return this._Nam;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "pageLayout", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.pageLayout", _defaultApiSetName, "1.9", _hostName);
                if (!this._P) {
                    this._P = _createPropertyObject(Excel.PageLayout, this, "PageLayout", false, 4);
                }
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "pivotTables", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.pivotTables", _defaultApiSetName, "1.3", _hostName);
                if (!this._Pi) {
                    this._Pi = _createPropertyObject(Excel.PivotTableCollection, this, "PivotTables", true, 4);
                }
                return this._Pi;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "protection", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.protection", _defaultApiSetName, "1.2", _hostName);
                if (!this._Pr) {
                    this._Pr = _createPropertyObject(Excel.WorksheetProtection, this, "Protection", false, 4);
                }
                return this._Pr;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "shapes", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.shapes", _defaultApiSetName, "1.9", _hostName);
                if (!this._S) {
                    this._S = _createPropertyObject(Excel.ShapeCollection, this, "Shapes", true, 4);
                }
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "slicers", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.slicers", _defaultApiSetName, "1.10", _hostName);
                if (!this._Sl) {
                    this._Sl = _createPropertyObject(Excel.SlicerCollection, this, "Slicers", true, 4);
                }
                return this._Sl;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "tables", {
            get: function () {
                if (!this.m_tables) {
                    this.m_tables = _createPropertyObject(Excel.TableCollection, this, "Tables", true, 4);
                }
                _CC.Worksheet_Tables_Get(this, this.m_tables);
                return this.m_tables;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "verticalPageBreaks", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.verticalPageBreaks", _defaultApiSetName, "1.9", _hostName);
                if (!this._V) {
                    this._V = _createPropertyObject(Excel.PageBreakCollection, this, "VerticalPageBreaks", true, 4);
                }
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "visuals", {
            get: function () {
                _throwIfApiNotSupported("Worksheet.visuals", _defaultApiSetName, "1.10", _hostName);
                if (!this.m_visuals) {
                    this.m_visuals = _createPropertyObject(Excel.VisualCollection, this, "Visuals", true, 4);
                }
                _CC.Worksheet_Visuals_Get(this, this.m_visuals);
                return this.m_visuals;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "enableCalculation", {
            get: function () {
                _throwIfNotLoaded("enableCalculation", this._E, _typeWorksheet, this._isNull);
                _throwIfApiNotSupported("Worksheet.enableCalculation", _defaultApiSetName, "1.9", _hostName);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "EnableCalculation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeWorksheet, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeWorksheet, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "position", {
            get: function () {
                _throwIfNotLoaded("position", this._Po, _typeWorksheet, this._isNull);
                return this._Po;
            },
            set: function (value) {
                this._Po = value;
                _invokeSetProperty(this, "Position", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "showGridlines", {
            get: function () {
                _throwIfNotLoaded("showGridlines", this.m_showGridlines, _typeWorksheet, this._isNull);
                _throwIfApiNotSupported("Worksheet.showGridlines", _defaultApiSetName, "1.8", _hostName);
                return this.m_showGridlines;
            },
            set: function (value) {
                var handled = _CC.Worksheet_ShowGridlines_Set(this, value).handled;
                if (handled) {
                    return;
                }
                this.m_showGridlines = value;
                _invokeSetProperty(this, "ShowGridlines", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "showHeadings", {
            get: function () {
                _throwIfNotLoaded("showHeadings", this.m_showHeadings, _typeWorksheet, this._isNull);
                _throwIfApiNotSupported("Worksheet.showHeadings", _defaultApiSetName, "1.8", _hostName);
                return this.m_showHeadings;
            },
            set: function (value) {
                var handled = _CC.Worksheet_ShowHeadings_Set(this, value).handled;
                if (handled) {
                    return;
                }
                this.m_showHeadings = value;
                _invokeSetProperty(this, "ShowHeadings", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "standardHeight", {
            get: function () {
                _throwIfNotLoaded("standardHeight", this._St, _typeWorksheet, this._isNull);
                _throwIfApiNotSupported("Worksheet.standardHeight", _defaultApiSetName, "1.7", _hostName);
                return this._St;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "standardWidth", {
            get: function () {
                _throwIfNotLoaded("standardWidth", this._Sta, _typeWorksheet, this._isNull);
                _throwIfApiNotSupported("Worksheet.standardWidth", _defaultApiSetName, "1.7", _hostName);
                return this._Sta;
            },
            set: function (value) {
                this._Sta = value;
                _invokeSetProperty(this, "StandardWidth", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "tabColor", {
            get: function () {
                _throwIfNotLoaded("tabColor", this._T, _typeWorksheet, this._isNull);
                _throwIfApiNotSupported("Worksheet.tabColor", _defaultApiSetName, "1.7", _hostName);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "TabColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "tabId", {
            get: function () {
                _throwIfNotLoaded("tabId", this._Ta, _typeWorksheet, this._isNull);
                _throwIfApiNotSupported("Worksheet.tabId", _defaultApiSetName, "1.14", _hostName);
                return this._Ta;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "visibility", {
            get: function () {
                _throwIfNotLoaded("visibility", this._Vi, _typeWorksheet, this._isNull);
                return this._Vi;
            },
            set: function (value) {
                this._Vi = value;
                _invokeSetProperty(this, "Visibility", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Worksheet.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "position", "visibility", "tabColor", "standardWidth", "showGridlines", "showHeadings", "enableCalculation"], ["pageLayout"], [
                "autoFilter",
                "charts",
                "comments",
                "customProperties",
                "freezePanes",
                "horizontalPageBreaks",
                "namedSheetViews",
                "names",
                "pivotTables",
                "protection",
                "shapes",
                "slicers",
                "tables",
                "verticalPageBreaks",
                "visuals"
            ]);
        };
        Worksheet.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Worksheet.prototype.activate = function () {
            _invokeMethod(this, "Activate", 1, [], 0, 0);
        };
        Worksheet.prototype.calculate = function (markAllDirty) {
            _throwIfApiNotSupported("Worksheet.calculate", _defaultApiSetName, "1.6", _hostName);
            _invokeMethod(this, "Calculate", 0, [markAllDirty], 0, 0);
        };
        Worksheet.prototype.copy = function (positionType, relativeTo) {
            _throwIfApiNotSupported("Worksheet.copy", _defaultApiSetName, "1.7", _hostName);
            return _createMethodObject(Excel.Worksheet, this, "Copy", 0, [positionType, relativeTo], false, false, "_GetAnotherWorksheetById", 0);
        };
        Worksheet.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        Worksheet.prototype.findAll = function (text, criteria) {
            _throwIfApiNotSupported("Worksheet.findAll", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "FindAll", 1, [text, criteria], false, true, null, 4);
        };
        Worksheet.prototype.findAllOrNullObject = function (text, criteria) {
            _throwIfApiNotSupported("Worksheet.findAllOrNullObject", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "FindAllOrNullObject", 1, [text, criteria], false, true, null, 4);
        };
        Worksheet.prototype.getCell = function (row, column) {
            return _createMethodObject(Excel.Range, this, "GetCell", 1, [row, column], false, true, null, 4);
        };
        Worksheet.prototype.getNext = function (visibleOnly) {
            _throwIfApiNotSupported("Worksheet.getNext", _defaultApiSetName, "1.5", _hostName);
            return _createMethodObject(Excel.Worksheet, this, "GetNext", 1, [visibleOnly], false, true, "_GetSheetById", 4);
        };
        Worksheet.prototype.getNextOrNullObject = function (visibleOnly) {
            _throwIfApiNotSupported("Worksheet.getNextOrNullObject", _defaultApiSetName, "1.5", _hostName);
            return _createMethodObject(Excel.Worksheet, this, "GetNextOrNullObject", 1, [visibleOnly], false, true, "_GetSheetById", 4);
        };
        Worksheet.prototype.getPrevious = function (visibleOnly) {
            _throwIfApiNotSupported("Worksheet.getPrevious", _defaultApiSetName, "1.5", _hostName);
            return _createMethodObject(Excel.Worksheet, this, "GetPrevious", 1, [visibleOnly], false, true, "_GetSheetById", 4);
        };
        Worksheet.prototype.getPreviousOrNullObject = function (visibleOnly) {
            _throwIfApiNotSupported("Worksheet.getPreviousOrNullObject", _defaultApiSetName, "1.5", _hostName);
            return _createMethodObject(Excel.Worksheet, this, "GetPreviousOrNullObject", 1, [visibleOnly], false, true, "_GetSheetById", 4);
        };
        Worksheet.prototype.getRange = function (address) {
            return _createMethodObject(Excel.Range, this, "GetRange", 1, [address], false, true, null, 4);
        };
        Worksheet.prototype.getRangeByIndexes = function (startRow, startColumn, rowCount, columnCount) {
            _throwIfApiNotSupported("Worksheet.getRangeByIndexes", _defaultApiSetName, "1.7", _hostName);
            return _createMethodObject(Excel.Range, this, "GetRangeByIndexes", 1, [startRow, startColumn, rowCount, columnCount], false, true, null, 4);
        };
        Worksheet.prototype.getRanges = function (address) {
            _throwIfApiNotSupported("Worksheet.getRanges", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "GetRanges", 1, [address], false, true, null, 4);
        };
        Worksheet.prototype.getUsedRange = function (valuesOnly) {
            return _createMethodObject(Excel.Range, this, "GetUsedRange", 1, [valuesOnly], false, true, null, 4);
        };
        Worksheet.prototype.getUsedRangeOrNullObject = function (valuesOnly) {
            _throwIfApiNotSupported("Worksheet.getUsedRangeOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.Range, this, "GetUsedRangeOrNullObject", 1, [valuesOnly], false, true, null, 4);
        };
        Worksheet.prototype.replaceAll = function (text, replacement, criteria) {
            _throwIfApiNotSupported("Worksheet.replaceAll", _defaultApiSetName, "1.9", _hostName);
            return _invokeMethod(this, "ReplaceAll", 0, [text, replacement, criteria], 0, 0);
        };
        Worksheet.prototype.showOutlineLevels = function (rowLevels, columnLevels) {
            _throwIfApiNotSupported("Worksheet.showOutlineLevels", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "ShowOutlineLevels", 0, [rowLevels, columnLevels], 0, 0);
        };
        Worksheet.prototype._GetAnotherWorksheetById = function (id) {
            _throwIfApiNotSupported("Worksheet._GetAnotherWorksheetById", _defaultApiSetName, "1.7", _hostName);
            return _createMethodObject(Excel.Worksheet, this, "_GetAnotherWorksheetById", 0, [id], false, false, null, 0);
        };
        Worksheet.prototype._GetSheetById = function (id) {
            _throwIfApiNotSupported("Worksheet._GetSheetById", _defaultApiSetName, "1.7", _hostName);
            return _createMethodObject(Excel.Worksheet, this, "_GetSheetById", 1, [id], false, false, null, 4);
        };
        Worksheet.prototype._RegisterActivatedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterActivatedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterActivatedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._RegisterCalculatedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterCalculatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_RegisterCalculatedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._RegisterColumnSortedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterColumnSortedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_RegisterColumnSortedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._RegisterDataChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterDataChangedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterDataChangedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._RegisterDeactivatedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterDeactivatedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterDeactivatedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._RegisterEventNameChanged = function () {
            _throwIfApiNotSupported("Worksheet._RegisterEventNameChanged", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "_RegisterEventNameChanged", 0, [], 0, 0);
        };
        Worksheet.prototype._RegisterEventVisibilityChanged = function () {
            _throwIfApiNotSupported("Worksheet._RegisterEventVisibilityChanged", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "_RegisterEventVisibilityChanged", 0, [], 0, 0);
        };
        Worksheet.prototype._RegisterFormatChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterFormatChangedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_RegisterFormatChangedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._RegisterFormulaChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterFormulaChangedEvent", _defaultApiSetName, "1.13", _hostName);
            _invokeMethod(this, "_RegisterFormulaChangedEvent", 1, [], 0, 0);
        };
        Worksheet.prototype._RegisterProtectionChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterProtectionChangedEvent", _defaultApiSetName, "1.14", _hostName);
            _invokeMethod(this, "_RegisterProtectionChangedEvent", 1, [], 0, 0);
        };
        Worksheet.prototype._RegisterRowHiddenChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterRowHiddenChangedEvent", _defaultApiSetName, "1.11", _hostName);
            _invokeMethod(this, "_RegisterRowHiddenChangedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._RegisterRowSortedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterRowSortedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_RegisterRowSortedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._RegisterSelectionChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterSelectionChangedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterSelectionChangedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        Worksheet.prototype._RegisterSingleClickedEvent = function () {
            _throwIfApiNotSupported("Worksheet._RegisterSingleClickedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_RegisterSingleClickedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterActivatedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterActivatedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterActivatedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterCalculatedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterCalculatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_UnregisterCalculatedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterColumnSortedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterColumnSortedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_UnregisterColumnSortedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterDataChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterDataChangedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterDataChangedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterDeactivatedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterDeactivatedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterDeactivatedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterEventNameChanged = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterEventNameChanged", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "_UnregisterEventNameChanged", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterEventVisibilityChanged = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterEventVisibilityChanged", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "_UnregisterEventVisibilityChanged", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterFormatChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterFormatChangedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_UnregisterFormatChangedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterFormulaChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterFormulaChangedEvent", _defaultApiSetName, "1.13", _hostName);
            _invokeMethod(this, "_UnregisterFormulaChangedEvent", 1, [], 0, 0);
        };
        Worksheet.prototype._UnregisterProtectionChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterProtectionChangedEvent", _defaultApiSetName, "1.14", _hostName);
            _invokeMethod(this, "_UnregisterProtectionChangedEvent", 1, [], 0, 0);
        };
        Worksheet.prototype._UnregisterRowHiddenChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterRowHiddenChangedEvent", _defaultApiSetName, "1.11", _hostName);
            _invokeMethod(this, "_UnregisterRowHiddenChangedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterRowSortedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterRowSortedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_UnregisterRowSortedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._UnregisterSelectionChangedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterSelectionChangedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterSelectionChangedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        Worksheet.prototype._UnregisterSingleClickedEvent = function () {
            _throwIfApiNotSupported("Worksheet._UnregisterSingleClickedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_UnregisterSingleClickedEvent", 0, [], 0, 0);
        };
        Worksheet.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["EnableCalculation"])) {
                this._E = obj["EnableCalculation"];
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Position"])) {
                this._Po = obj["Position"];
            }
            if (!_isUndefined(obj["ShowGridlines"])) {
                this.m_showGridlines = obj["ShowGridlines"];
            }
            if (!_isUndefined(obj["ShowHeadings"])) {
                this.m_showHeadings = obj["ShowHeadings"];
            }
            if (!_isUndefined(obj["StandardHeight"])) {
                this._St = obj["StandardHeight"];
            }
            if (!_isUndefined(obj["StandardWidth"])) {
                this._Sta = obj["StandardWidth"];
            }
            if (!_isUndefined(obj["TabColor"])) {
                this._T = obj["TabColor"];
            }
            if (!_isUndefined(obj["TabId"])) {
                this._Ta = obj["TabId"];
            }
            if (!_isUndefined(obj["Visibility"])) {
                this._Vi = obj["Visibility"];
            }
            _handleNavigationPropertyResults(this, obj, ["autoFilter", "AutoFilter", "charts", "Charts", "comments", "Comments", "customProperties", "CustomProperties", "freezePanes", "FreezePanes", "horizontalPageBreaks", "HorizontalPageBreaks", "namedSheetViews", "NamedSheetViews", "names", "Names", "pageLayout", "PageLayout", "pivotTables", "PivotTables", "protection", "Protection", "shapes", "Shapes", "slicers", "Slicers", "tables", "Tables", "verticalPageBreaks", "VerticalPageBreaks", "visuals", "Visuals"]);
        };
        Worksheet.prototype.load = function (options) {
            return _load(this, options);
        };
        Worksheet.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Worksheet.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Worksheet.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(Worksheet.prototype, "onActivated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onActivated", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_activated) {
                    this.m_activated = new OfficeExtension.GenericEventHandlers(this.context, this, "Activated", {
                        eventType: 11,
                        registerFunc: function () { return _this._RegisterActivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterActivatedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetActivated,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_activated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onCalculated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onCalculated", _defaultApiSetName, "1.8", _hostName);
                if (!this.m_calculated) {
                    this.m_calculated = new OfficeExtension.GenericEventHandlers(this.context, this, "Calculated", {
                        eventType: 16,
                        registerFunc: function () { return _this._RegisterCalculatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterCalculatedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetCalculated,
                                address: value.address,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_calculated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onChanged", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_changed) {
                    this.m_changed = new OfficeExtension.GenericEventHandlers(this.context, this, "Changed", {
                        eventType: 10,
                        registerFunc: function () { return _this._RegisterDataChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDataChangedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.Worksheet_Changed_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_changed;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onColumnSorted", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onColumnSorted", _defaultApiSetName, "1.10", _hostName);
                if (!this.m_columnSorted) {
                    this.m_columnSorted = new OfficeExtension.GenericEventHandlers(this.context, this, "ColumnSorted", {
                        eventType: 20,
                        registerFunc: function () { return _this._RegisterColumnSortedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterColumnSortedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetColumnSorted,
                                address: value.address,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_columnSorted;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onDeactivated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onDeactivated", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_deactivated) {
                    this.m_deactivated = new OfficeExtension.GenericEventHandlers(this.context, this, "Deactivated", {
                        eventType: 12,
                        registerFunc: function () { return _this._RegisterDeactivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDeactivatedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetDeactivated,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_deactivated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onFormatChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onFormatChanged", _defaultApiSetName, "1.9", _hostName);
                if (!this.m_formatChanged) {
                    this.m_formatChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "FormatChanged", {
                        eventType: 18,
                        registerFunc: function () { return _this._RegisterFormatChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterFormatChangedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.Worksheet_FormatChanged_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_formatChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onFormulaChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onFormulaChanged", _defaultApiSetName, "1.13", _hostName);
                if (!this.m_formulaChanged) {
                    this.m_formulaChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "FormulaChanged", {
                        eventType: 23,
                        registerFunc: function () { return _this._RegisterFormulaChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterFormulaChangedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.Worksheet_FormulaChanged_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_formulaChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onNameChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onNameChanged", "ExcelApiOnline", "1.1", _hostName);
                if (!this.m_nameChanged) {
                    this.m_nameChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "NameChanged", {
                        eventType: 25,
                        registerFunc: function () { return _this._RegisterEventNameChanged(); },
                        unregisterFunc: function () { return _this._UnregisterEventNameChanged(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetNameChanged,
                                nameAfter: value.nameAfter,
                                nameBefore: value.nameBefore,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_nameChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onProtectionChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onProtectionChanged", _defaultApiSetName, "1.14", _hostName);
                if (!this.m_protectionChanged) {
                    this.m_protectionChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "ProtectionChanged", {
                        eventType: 24,
                        registerFunc: function () { return _this._RegisterProtectionChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterProtectionChangedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetProtectionChanged,
                                isProtected: value.isProtected,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_protectionChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onRowHiddenChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onRowHiddenChanged", _defaultApiSetName, "1.11", _hostName);
                if (!this.m_rowHiddenChanged) {
                    this.m_rowHiddenChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "RowHiddenChanged", {
                        eventType: 22,
                        registerFunc: function () { return _this._RegisterRowHiddenChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterRowHiddenChangedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetRowHiddenChanged,
                                address: value.address,
                                changeType: value.changeType,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_rowHiddenChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onRowSorted", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onRowSorted", _defaultApiSetName, "1.10", _hostName);
                if (!this.m_rowSorted) {
                    this.m_rowSorted = new OfficeExtension.GenericEventHandlers(this.context, this, "RowSorted", {
                        eventType: 19,
                        registerFunc: function () { return _this._RegisterRowSortedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterRowSortedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetRowSorted,
                                address: value.address,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_rowSorted;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onSelectionChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onSelectionChanged", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_selectionChanged) {
                    this.m_selectionChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "SelectionChanged", {
                        eventType: 14,
                        registerFunc: function () { return _this._RegisterSelectionChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterSelectionChangedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetSelectionChanged,
                                address: value.address,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_selectionChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onSingleClicked", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onSingleClicked", _defaultApiSetName, "1.10", _hostName);
                if (!this.m_singleClicked) {
                    this.m_singleClicked = new OfficeExtension.GenericEventHandlers(this.context, this, "SingleClicked", {
                        eventType: 21,
                        registerFunc: function () { return _this._RegisterSingleClickedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterSingleClickedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetSingleClicked,
                                address: value.address,
                                offsetX: value.offsetX,
                                offsetY: value.offsetY,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_singleClicked;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Worksheet.prototype, "onVisibilityChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Worksheet.onVisibilityChanged", "ExcelApiOnline", "1.1", _hostName);
                if (!this.m_visibilityChanged) {
                    this.m_visibilityChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "VisibilityChanged", {
                        eventType: 26,
                        registerFunc: function () { return _this._RegisterEventVisibilityChanged(); },
                        unregisterFunc: function () { return _this._UnregisterEventVisibilityChanged(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetVisibilityChanged,
                                source: value.source,
                                visibilityAfter: value.visibilityAfter,
                                visibilityBefore: value.visibilityBefore,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_visibilityChanged;
            },
            enumerable: true,
            configurable: true
        });
        Worksheet.prototype.toJSON = function () {
            return _toJson(this, {
                "enableCalculation": this._E,
                "id": this._I,
                "name": this._N,
                "position": this._Po,
                "showGridlines": this.m_showGridlines,
                "showHeadings": this.m_showHeadings,
                "standardHeight": this._St,
                "standardWidth": this._Sta,
                "tabColor": this._T,
                "tabId": this._Ta,
                "visibility": this._Vi
            }, {
                "autoFilter": this._A,
                "charts": this.m_charts,
                "comments": this.m_comments,
                "customProperties": this._C,
                "horizontalPageBreaks": this._Ho,
                "names": this._Nam,
                "pageLayout": this._P,
                "pivotTables": this._Pi,
                "protection": this._Pr,
                "shapes": this._S,
                "slicers": this._Sl,
                "tables": this.m_tables,
                "verticalPageBreaks": this._V,
                "visuals": this.m_visuals
            });
        };
        Worksheet.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Worksheet.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Worksheet;
    }(OfficeExtension.ClientObject));
    Excel.Worksheet = Worksheet;
    (function (_CC) {
        function Worksheet_Charts_Get(thisObj, ret) {
            ret._ParentObject = thisObj;
        }
        _CC.Worksheet_Charts_Get = Worksheet_Charts_Get;
        function Worksheet_Comments_Get(thisObj, ret) {
            ret._ParentObject = thisObj;
        }
        _CC.Worksheet_Comments_Get = Worksheet_Comments_Get;
        function Worksheet_ShowGridlines_Set(thisObj, value) {
            if (ALWAYS_TRUE_PLACEHOLDER_OVERRIDE) {
                thisObj.m_showGridlines = value;
                _invokeSetProperty(thisObj, "Gridlines", value, 0);
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.Worksheet_ShowGridlines_Set = Worksheet_ShowGridlines_Set;
        function Worksheet_ShowHeadings_Set(thisObj, value) {
            if (ALWAYS_TRUE_PLACEHOLDER_OVERRIDE) {
                thisObj.m_showHeadings = value;
                _invokeSetProperty(thisObj, "Headings", value, 0);
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.Worksheet_ShowHeadings_Set = Worksheet_ShowHeadings_Set;
        function Worksheet_Tables_Get(thisObj, ret) {
            ret._ParentObject = thisObj;
        }
        _CC.Worksheet_Tables_Get = Worksheet_Tables_Get;
        function Worksheet_Visuals_Get(thisObj, ret) {
            ret._ParentObject = thisObj;
        }
        _CC.Worksheet_Visuals_Get = Worksheet_Visuals_Get;
        function Worksheet_Changed_EventArgsTransform(thisObj, args) {
            var value = args;
            var details;
            if (value.valueBefore != null || value.valueAfter != null) {
                details = {
                    valueBefore: value.valueBefore,
                    valueAfter: value.valueAfter,
                    valueTypeBefore: value.valueTypeBefore,
                    valueTypeAfter: value.valueTypeAfter
                };
            }
            var deleteShiftDirection;
            var insertShiftDirection;
            var changeDirectionState;
            if (value.shiftDirection == Excel.InsertDeleteCellsShiftDirection.shiftCellLeft) {
                deleteShiftDirection = Excel.DeleteShiftDirection.left;
            }
            else if (value.shiftDirection == Excel.InsertDeleteCellsShiftDirection.shiftCellUp) {
                deleteShiftDirection = Excel.DeleteShiftDirection.up;
            }
            else if (value.shiftDirection == Excel.InsertDeleteCellsShiftDirection.shiftCellRight) {
                insertShiftDirection = Excel.InsertShiftDirection.right;
            }
            else if (value.shiftDirection == Excel.InsertDeleteCellsShiftDirection.shiftCellDown) {
                insertShiftDirection = Excel.InsertShiftDirection.down;
            }
            if (value.shiftDirection != Excel.InsertDeleteCellsShiftDirection.none) {
                changeDirectionState = {
                    deleteShiftDirection: deleteShiftDirection,
                    insertShiftDirection: insertShiftDirection
                };
            }
            var newArgs = {
                type: Excel.EventType.worksheetChanged,
                changeType: value.changeType,
                source: value.source,
                worksheetId: thisObj.id,
                address: value.address,
                getRange: function (ctx) {
                    _throwIfApiNotSupported("WorksheetChangedEventArgs.getRange", _defaultApiSetName, "1.8", _hostName);
                    return ctx.workbook._GetRangeForEventByReferenceId(value.referenceId);
                },
                getRangeOrNullObject: function (ctx) {
                    _throwIfApiNotSupported("WorksheetChangedEventArgs.getRangeOrNullObject", _defaultApiSetName, "1.8", _hostName);
                    return ctx.workbook._GetRangeOrNullObjectForEventByReferenceId(value.referenceId);
                },
                details: details,
                triggerSource: value.triggerSource,
                changeDirectionState: changeDirectionState
            };
            return newArgs;
        }
        _CC.Worksheet_Changed_EventArgsTransform = Worksheet_Changed_EventArgsTransform;
        function Worksheet_FormatChanged_EventArgsTransform(thisObj, args) {
            var value = args;
            var newArgs = {
                type: Excel.EventType.worksheetFormatChanged,
                source: value.source,
                worksheetId: thisObj.id,
                address: value.address,
                getRange: function (ctx) {
                    _throwIfApiNotSupported("WorksheetFormatChangedEventArgs.getRange", _defaultApiSetName, "1.9", _hostName);
                    return ctx.workbook._GetRangeForEventByReferenceId(value.referenceId);
                },
                getRangeOrNullObject: function (ctx) {
                    _throwIfApiNotSupported("WorksheetFormatChangedEventArgs.getRangeOrNullObject", _defaultApiSetName, "1.9", _hostName);
                    return ctx.workbook._GetRangeOrNullObjectForEventByReferenceId(value.referenceId);
                }
            };
            return newArgs;
        }
        _CC.Worksheet_FormatChanged_EventArgsTransform = Worksheet_FormatChanged_EventArgsTransform;
        function Worksheet_FormulaChanged_EventArgsTransform(thisObj, args) {
            var value = args;
            var formulaDetails;
            if (value.formulaDetails != null) {
                formulaDetails = value.formulaDetails;
            }
            var newArgs = {
                type: Excel.EventType.worksheetFormulaChanged,
                source: value.source,
                worksheetId: value.worksheetId,
                formulaDetails: formulaDetails
            };
            return newArgs;
        }
        _CC.Worksheet_FormulaChanged_EventArgsTransform = Worksheet_FormulaChanged_EventArgsTransform;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeWorksheetCollection = "WorksheetCollection";
    var WorksheetCollection = (function (_super) {
        __extends(WorksheetCollection, _super);
        function WorksheetCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(WorksheetCollection.prototype, "_className", {
            get: function () {
                return "WorksheetCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeWorksheetCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        WorksheetCollection.prototype.add = function (name) {
            return _createMethodObject(Excel.Worksheet, this, "Add", 0, [name], false, true, null, _calculateApiFlags(2, "ExcelApiUndo", "1.2"));
        };
        WorksheetCollection.prototype.getActiveWorksheet = function () {
            return _createMethodObject(Excel.Worksheet, this, "GetActiveWorksheet", 1, [], false, false, null, 4);
        };
        WorksheetCollection.prototype.getCount = function (visibleOnly) {
            _throwIfApiNotSupported("WorksheetCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [visibleOnly], 4, 0);
        };
        WorksheetCollection.prototype.getFirst = function (visibleOnly) {
            _throwIfApiNotSupported("WorksheetCollection.getFirst", _defaultApiSetName, "1.5", _hostName);
            return _createMethodObject(Excel.Worksheet, this, "GetFirst", 1, [visibleOnly], false, true, null, 4);
        };
        WorksheetCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.Worksheet, this, [key]);
        };
        WorksheetCollection.prototype.getItemOrNullObject = function (key) {
            _throwIfApiNotSupported("WorksheetCollection.getItemOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.Worksheet, this, "GetItemOrNullObject", 1, [key], false, false, null, 4);
        };
        WorksheetCollection.prototype.getLast = function (visibleOnly) {
            _throwIfApiNotSupported("WorksheetCollection.getLast", _defaultApiSetName, "1.5", _hostName);
            return _createMethodObject(Excel.Worksheet, this, "GetLast", 1, [visibleOnly], false, true, null, 4);
        };
        WorksheetCollection.prototype._RegisterActivatedEvent = function () {
            var handled = _CC.WorksheetCollection__RegisterActivatedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._RegisterActivatedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterActivatedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterAddedEvent = function () {
            var handled = _CC.WorksheetCollection__RegisterAddedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._RegisterAddedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterAddedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterCalculatedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterCalculatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_RegisterCalculatedEvent", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterColumnSortedEvent = function () {
            var handled = _CC.WorksheetCollection__RegisterColumnSortedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._RegisterColumnSortedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_RegisterColumnSortedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterDataChangedEvent = function () {
            var handled = _CC.WorksheetCollection__RegisterDataChangedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._RegisterDataChangedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_RegisterDataChangedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterDeactivatedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterDeactivatedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterDeactivatedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        WorksheetCollection.prototype._RegisterDeletedEvent = function () {
            var handled = _CC.WorksheetCollection__RegisterDeletedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._RegisterDeletedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterDeletedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterEventMoved = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterEventMoved", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "_RegisterEventMoved", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterEventNameChanged = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterEventNameChanged", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "_RegisterEventNameChanged", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterEventVisibilityChanged = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterEventVisibilityChanged", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "_RegisterEventVisibilityChanged", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterFormatChangedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterFormatChangedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_RegisterFormatChangedEvent", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterFormulaChangedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterFormulaChangedEvent", _defaultApiSetName, "1.13", _hostName);
            _invokeMethod(this, "_RegisterFormulaChangedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterProtectionChangedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterProtectionChangedEvent", _defaultApiSetName, "1.14", _hostName);
            _invokeMethod(this, "_RegisterProtectionChangedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterRowHiddenChangedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterRowHiddenChangedEvent", _defaultApiSetName, "1.11", _hostName);
            _invokeMethod(this, "_RegisterRowHiddenChangedEvent", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterRowSortedEvent = function () {
            var handled = _CC.WorksheetCollection__RegisterRowSortedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._RegisterRowSortedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_RegisterRowSortedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._RegisterSelectionChangedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterSelectionChangedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_RegisterSelectionChangedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        WorksheetCollection.prototype._RegisterSingleClickedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._RegisterSingleClickedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_RegisterSingleClickedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        WorksheetCollection.prototype._UnregisterActivatedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterActivatedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterActivatedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        WorksheetCollection.prototype._UnregisterAddedEvent = function () {
            var handled = _CC.WorksheetCollection__UnregisterAddedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._UnregisterAddedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterAddedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterCalculatedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterCalculatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_UnregisterCalculatedEvent", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterColumnSortedEvent = function () {
            var handled = _CC.WorksheetCollection__UnregisterColumnSortedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._UnregisterColumnSortedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_UnregisterColumnSortedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterDataChangedEvent = function () {
            var handled = _CC.WorksheetCollection__UnregisterDataChangedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._UnregisterDataChangedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_UnregisterDataChangedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterDeactivatedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterDeactivatedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterDeactivatedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        WorksheetCollection.prototype._UnregisterDeletedEvent = function () {
            var handled = _CC.WorksheetCollection__UnregisterDeletedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._UnregisterDeletedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterDeletedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterEventMoved = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterEventMoved", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "_UnregisterEventMoved", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterEventNameChanged = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterEventNameChanged", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "_UnregisterEventNameChanged", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterEventVisibilityChanged = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterEventVisibilityChanged", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "_UnregisterEventVisibilityChanged", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterFormatChangedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterFormatChangedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_UnregisterFormatChangedEvent", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterFormulaChangedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterFormulaChangedEvent", _defaultApiSetName, "1.13", _hostName);
            _invokeMethod(this, "_UnregisterFormulaChangedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterProtectionChangedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterProtectionChangedEvent", _defaultApiSetName, "1.14", _hostName);
            _invokeMethod(this, "_UnregisterProtectionChangedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterRowHiddenChangedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterRowHiddenChangedEvent", _defaultApiSetName, "1.11", _hostName);
            _invokeMethod(this, "_UnregisterRowHiddenChangedEvent", 0, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterRowSortedEvent = function () {
            var handled = _CC.WorksheetCollection__UnregisterRowSortedEvent(this).handled;
            if (handled) {
                return;
            }
            _throwIfApiNotSupported("WorksheetCollection._UnregisterRowSortedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_UnregisterRowSortedEvent", 1, [], 0, 0);
        };
        WorksheetCollection.prototype._UnregisterSelectionChangedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterSelectionChangedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_UnregisterSelectionChangedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        WorksheetCollection.prototype._UnregisterSingleClickedEvent = function () {
            _throwIfApiNotSupported("WorksheetCollection._UnregisterSingleClickedEvent", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "_UnregisterSingleClickedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        WorksheetCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Worksheet, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        WorksheetCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        WorksheetCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        WorksheetCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Worksheet, true, _this, childItemData, index); });
        };
        Object.defineProperty(WorksheetCollection.prototype, "onActivated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onActivated", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_activated) {
                    this.m_activated = new OfficeExtension.GenericEventHandlers(this.context, this, "Activated", {
                        eventType: 11,
                        registerFunc: function () { return _this._RegisterActivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterActivatedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetActivated,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_activated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onAdded", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onAdded", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_added) {
                    this.m_added = new OfficeExtension.GenericEventHandlers(this.context, this, "Added", {
                        eventType: 13,
                        registerFunc: function () { return _this._RegisterAddedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterAddedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetAdded,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_added;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onCalculated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onCalculated", _defaultApiSetName, "1.8", _hostName);
                if (!this.m_calculated) {
                    this.m_calculated = new OfficeExtension.GenericEventHandlers(this.context, this, "Calculated", {
                        eventType: 16,
                        registerFunc: function () { return _this._RegisterCalculatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterCalculatedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetCalculated,
                                address: value.address,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_calculated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onChanged", _defaultApiSetName, "1.9", _hostName);
                if (!this.m_changed) {
                    this.m_changed = new OfficeExtension.GenericEventHandlers(this.context, this, "Changed", {
                        eventType: 10,
                        registerFunc: function () { return _this._RegisterDataChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDataChangedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.WorksheetCollection_Changed_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_changed;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onColumnSorted", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onColumnSorted", _defaultApiSetName, "1.10", _hostName);
                if (!this.m_columnSorted) {
                    this.m_columnSorted = new OfficeExtension.GenericEventHandlers(this.context, this, "ColumnSorted", {
                        eventType: 20,
                        registerFunc: function () { return _this._RegisterColumnSortedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterColumnSortedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetColumnSorted,
                                address: value.address,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_columnSorted;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onDeactivated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onDeactivated", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_deactivated) {
                    this.m_deactivated = new OfficeExtension.GenericEventHandlers(this.context, this, "Deactivated", {
                        eventType: 12,
                        registerFunc: function () { return _this._RegisterDeactivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDeactivatedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetDeactivated,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_deactivated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onDeleted", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onDeleted", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_deleted) {
                    this.m_deleted = new OfficeExtension.GenericEventHandlers(this.context, this, "Deleted", {
                        eventType: 15,
                        registerFunc: function () { return _this._RegisterDeletedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDeletedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetDeleted,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_deleted;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onFormatChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onFormatChanged", _defaultApiSetName, "1.9", _hostName);
                if (!this.m_formatChanged) {
                    this.m_formatChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "FormatChanged", {
                        eventType: 18,
                        registerFunc: function () { return _this._RegisterFormatChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterFormatChangedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.WorksheetCollection_FormatChanged_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_formatChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onFormulaChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onFormulaChanged", _defaultApiSetName, "1.13", _hostName);
                if (!this.m_formulaChanged) {
                    this.m_formulaChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "FormulaChanged", {
                        eventType: 23,
                        registerFunc: function () { return _this._RegisterFormulaChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterFormulaChangedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.WorksheetCollection_FormulaChanged_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_formulaChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onMoved", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onMoved", "ExcelApiOnline", "1.1", _hostName);
                if (!this.m_moved) {
                    this.m_moved = new OfficeExtension.GenericEventHandlers(this.context, this, "Moved", {
                        eventType: 27,
                        registerFunc: function () { return _this._RegisterEventMoved(); },
                        unregisterFunc: function () { return _this._UnregisterEventMoved(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetMoved,
                                positionAfter: value.positionAfter,
                                positionBefore: value.positionBefore,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_moved;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onNameChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onNameChanged", "ExcelApiOnline", "1.1", _hostName);
                if (!this.m_nameChanged) {
                    this.m_nameChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "NameChanged", {
                        eventType: 25,
                        registerFunc: function () { return _this._RegisterEventNameChanged(); },
                        unregisterFunc: function () { return _this._UnregisterEventNameChanged(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetNameChanged,
                                nameAfter: value.nameAfter,
                                nameBefore: value.nameBefore,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_nameChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onProtectionChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onProtectionChanged", _defaultApiSetName, "1.14", _hostName);
                if (!this.m_protectionChanged) {
                    this.m_protectionChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "ProtectionChanged", {
                        eventType: 24,
                        registerFunc: function () { return _this._RegisterProtectionChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterProtectionChangedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetProtectionChanged,
                                isProtected: value.isProtected,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_protectionChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onRowHiddenChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onRowHiddenChanged", _defaultApiSetName, "1.11", _hostName);
                if (!this.m_rowHiddenChanged) {
                    this.m_rowHiddenChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "RowHiddenChanged", {
                        eventType: 22,
                        registerFunc: function () { return _this._RegisterRowHiddenChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterRowHiddenChangedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetRowHiddenChanged,
                                address: value.address,
                                changeType: value.changeType,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_rowHiddenChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onRowSorted", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onRowSorted", _defaultApiSetName, "1.10", _hostName);
                if (!this.m_rowSorted) {
                    this.m_rowSorted = new OfficeExtension.GenericEventHandlers(this.context, this, "RowSorted", {
                        eventType: 19,
                        registerFunc: function () { return _this._RegisterRowSortedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterRowSortedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetRowSorted,
                                address: value.address,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_rowSorted;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onSelectionChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onSelectionChanged", _defaultApiSetName, "1.9", _hostName);
                if (!this.m_selectionChanged) {
                    this.m_selectionChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "SelectionChanged", {
                        eventType: 14,
                        registerFunc: function () { return _this._RegisterSelectionChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterSelectionChangedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetSelectionChanged,
                                address: value.address,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_selectionChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onSingleClicked", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onSingleClicked", _defaultApiSetName, "1.10", _hostName);
                if (!this.m_singleClicked) {
                    this.m_singleClicked = new OfficeExtension.GenericEventHandlers(this.context, this, "SingleClicked", {
                        eventType: 21,
                        registerFunc: function () { return _this._RegisterSingleClickedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterSingleClickedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetSingleClicked,
                                address: value.address,
                                offsetX: value.offsetX,
                                offsetY: value.offsetY,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_singleClicked;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCollection.prototype, "onVisibilityChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("WorksheetCollection.onVisibilityChanged", "ExcelApiOnline", "1.1", _hostName);
                if (!this.m_visibilityChanged) {
                    this.m_visibilityChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "VisibilityChanged", {
                        eventType: 26,
                        registerFunc: function () { return _this._RegisterEventVisibilityChanged(); },
                        unregisterFunc: function () { return _this._UnregisterEventVisibilityChanged(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.worksheetVisibilityChanged,
                                source: value.source,
                                visibilityAfter: value.visibilityAfter,
                                visibilityBefore: value.visibilityBefore,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_visibilityChanged;
            },
            enumerable: true,
            configurable: true
        });
        WorksheetCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        WorksheetCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Worksheet, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return WorksheetCollection;
    }(OfficeExtension.ClientObject));
    Excel.WorksheetCollection = WorksheetCollection;
    (function (_CC) {
        function _overrideWorksheetCollectionEventMethod(thisObj, methodName, apiVersion) {
            if ((!isOfficePlatform("OfficeOnline") && !isExcelApiSetSupported(1.12)) ||
                (isOfficePlatform("OfficeOnline") && !isExcelApiSetSupported(1.11))) {
                _throwIfApiNotSupported("WorksheetCollection." + methodName, _defaultApiSetName, apiVersion, _hostName);
                _invokeMethod(thisObj, methodName, 0, [], 0, 0);
                return { handled: true };
            }
            return { handled: false };
        }
        function WorksheetCollection__RegisterActivatedEvent(thisObj) {
            if (!isExcelApiSetSupported(1.9)) {
                _throwIfApiNotSupported("WorksheetCollection._RegisterActivatedEvent", _defaultApiSetName, "1.7", _hostName);
                _invokeMethod(thisObj, "_RegisterActivatedEvent", 0, [], 0, 0);
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.WorksheetCollection__RegisterActivatedEvent = WorksheetCollection__RegisterActivatedEvent;
        function WorksheetCollection__RegisterAddedEvent(thisObj) {
            return _overrideWorksheetCollectionEventMethod(thisObj, "_RegisterAddedEvent", "1.7");
        }
        _CC.WorksheetCollection__RegisterAddedEvent = WorksheetCollection__RegisterAddedEvent;
        function WorksheetCollection__RegisterColumnSortedEvent(thisObj) {
            return _overrideWorksheetCollectionEventMethod(thisObj, "_RegisterColumnSortedEvent", "1.10");
        }
        _CC.WorksheetCollection__RegisterColumnSortedEvent = WorksheetCollection__RegisterColumnSortedEvent;
        function WorksheetCollection__RegisterDataChangedEvent(thisObj) {
            return _overrideWorksheetCollectionEventMethod(thisObj, "_RegisterDataChangedEvent", "1.9");
        }
        _CC.WorksheetCollection__RegisterDataChangedEvent = WorksheetCollection__RegisterDataChangedEvent;
        function WorksheetCollection__RegisterDeletedEvent(thisObj) {
            return _overrideWorksheetCollectionEventMethod(thisObj, "_RegisterDeletedEvent", "1.7");
        }
        _CC.WorksheetCollection__RegisterDeletedEvent = WorksheetCollection__RegisterDeletedEvent;
        function WorksheetCollection__RegisterRowSortedEvent(thisObj) {
            return _overrideWorksheetCollectionEventMethod(thisObj, "_RegisterRowSortedEvent", "1.10");
        }
        _CC.WorksheetCollection__RegisterRowSortedEvent = WorksheetCollection__RegisterRowSortedEvent;
        function WorksheetCollection__UnregisterAddedEvent(thisObj) {
            return _overrideWorksheetCollectionEventMethod(thisObj, "_UnregisterAddedEvent", "1.7");
        }
        _CC.WorksheetCollection__UnregisterAddedEvent = WorksheetCollection__UnregisterAddedEvent;
        function WorksheetCollection__UnregisterColumnSortedEvent(thisObj) {
            return _overrideWorksheetCollectionEventMethod(thisObj, "_UnregisterColumnSortedEvent", "1.10");
        }
        _CC.WorksheetCollection__UnregisterColumnSortedEvent = WorksheetCollection__UnregisterColumnSortedEvent;
        function WorksheetCollection__UnregisterDataChangedEvent(thisObj) {
            return _overrideWorksheetCollectionEventMethod(thisObj, "_UnregisterDataChangedEvent", "1.9");
        }
        _CC.WorksheetCollection__UnregisterDataChangedEvent = WorksheetCollection__UnregisterDataChangedEvent;
        function WorksheetCollection__UnregisterDeletedEvent(thisObj) {
            return _overrideWorksheetCollectionEventMethod(thisObj, "_UnregisterDeletedEvent", "1.7");
        }
        _CC.WorksheetCollection__UnregisterDeletedEvent = WorksheetCollection__UnregisterDeletedEvent;
        function WorksheetCollection__UnregisterRowSortedEvent(thisObj) {
            return _overrideWorksheetCollectionEventMethod(thisObj, "_UnregisterRowSortedEvent", "1.10");
        }
        _CC.WorksheetCollection__UnregisterRowSortedEvent = WorksheetCollection__UnregisterRowSortedEvent;
        function WorksheetCollection_Changed_EventArgsTransform(thisObj, args) {
            var value = args;
            var details;
            if (value.valueBefore != null || value.valueAfter != null) {
                details = {
                    valueBefore: value.valueBefore,
                    valueAfter: value.valueAfter,
                    valueTypeBefore: value.valueTypeBefore,
                    valueTypeAfter: value.valueTypeAfter
                };
            }
            var deleteShiftDirection;
            var insertShiftDirection;
            var changeDirectionState;
            if (value.shiftDirection == Excel.InsertDeleteCellsShiftDirection.shiftCellLeft) {
                deleteShiftDirection = Excel.DeleteShiftDirection.left;
            }
            else if (value.shiftDirection == Excel.InsertDeleteCellsShiftDirection.shiftCellUp) {
                deleteShiftDirection = Excel.DeleteShiftDirection.up;
            }
            else if (value.shiftDirection == Excel.InsertDeleteCellsShiftDirection.shiftCellRight) {
                insertShiftDirection = Excel.InsertShiftDirection.right;
            }
            else if (value.shiftDirection == Excel.InsertDeleteCellsShiftDirection.shiftCellDown) {
                insertShiftDirection = Excel.InsertShiftDirection.down;
            }
            if (value.shiftDirection != Excel.InsertDeleteCellsShiftDirection.none) {
                changeDirectionState = {
                    deleteShiftDirection: deleteShiftDirection,
                    insertShiftDirection: insertShiftDirection
                };
            }
            var newArgs = {
                type: Excel.EventType.worksheetChanged,
                changeType: value.changeType,
                source: value.source,
                worksheetId: value.worksheetId,
                address: value.address,
                getRange: function (ctx) {
                    _throwIfApiNotSupported("WorksheetChangedEventArgs.getRange", _defaultApiSetName, "1.9", _hostName);
                    return ctx.workbook._GetRangeForEventByReferenceId(value.referenceId);
                },
                getRangeOrNullObject: function (ctx) {
                    _throwIfApiNotSupported("WorksheetChangedEventArgs.getRangeOrNullObject", _defaultApiSetName, "1.9", _hostName);
                    return ctx.workbook._GetRangeOrNullObjectForEventByReferenceId(value.referenceId);
                },
                details: details,
                triggerSource: value.triggerSource,
                changeDirectionState: changeDirectionState
            };
            return newArgs;
        }
        _CC.WorksheetCollection_Changed_EventArgsTransform = WorksheetCollection_Changed_EventArgsTransform;
        function WorksheetCollection_FormatChanged_EventArgsTransform(thisObj, args) {
            var value = args;
            var newArgs = {
                type: Excel.EventType.worksheetFormatChanged,
                source: value.source,
                worksheetId: value.worksheetId,
                address: value.address,
                getRange: function (ctx) {
                    _throwIfApiNotSupported("WorksheetFormatChangedEventArgs.getRange", _defaultApiSetName, "1.9", _hostName);
                    return ctx.workbook._GetRangeForEventByReferenceId(value.referenceId);
                },
                getRangeOrNullObject: function (ctx) {
                    _throwIfApiNotSupported("WorksheetFormatChangedEventArgs.getRangeOrNullObject", _defaultApiSetName, "1.9", _hostName);
                    return ctx.workbook._GetRangeOrNullObjectForEventByReferenceId(value.referenceId);
                }
            };
            return newArgs;
        }
        _CC.WorksheetCollection_FormatChanged_EventArgsTransform = WorksheetCollection_FormatChanged_EventArgsTransform;
        function WorksheetCollection_FormulaChanged_EventArgsTransform(thisObj, args) {
            var value = args;
            var formulaDetails;
            if (value.formulaDetails != null) {
                formulaDetails = value.formulaDetails;
            }
            var newArgs = {
                type: Excel.EventType.worksheetFormulaChanged,
                source: value.source,
                worksheetId: value.worksheetId,
                formulaDetails: formulaDetails
            };
            return newArgs;
        }
        _CC.WorksheetCollection_FormulaChanged_EventArgsTransform = WorksheetCollection_FormulaChanged_EventArgsTransform;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeWorksheetProtection = "WorksheetProtection";
    var WorksheetProtection = (function (_super) {
        __extends(WorksheetProtection, _super);
        function WorksheetProtection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(WorksheetProtection.prototype, "_className", {
            get: function () {
                return "WorksheetProtection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetProtection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["protected", "options"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetProtection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Protected", "Options"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetProtection.prototype, "options", {
            get: function () {
                _throwIfNotLoaded("options", this._O, _typeWorksheetProtection, this._isNull);
                return this._O;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetProtection.prototype, "protected", {
            get: function () {
                _throwIfNotLoaded("protected", this._P, _typeWorksheetProtection, this._isNull);
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        WorksheetProtection.prototype.protect = function (options, password) {
            var handled = _CC.WorksheetProtection_Protect(this, options, password).handled;
            if (handled) {
                return;
            }
            _invokeMethod(this, "Protect", 0, [options, password], 0, 0);
        };
        WorksheetProtection.prototype.unprotect = function (password) {
            _invokeMethod(this, "Unprotect", 0, [password], 0, 0);
        };
        WorksheetProtection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Options"])) {
                this._O = obj["Options"];
            }
            if (!_isUndefined(obj["Protected"])) {
                this._P = obj["Protected"];
            }
        };
        WorksheetProtection.prototype.load = function (options) {
            return _load(this, options);
        };
        WorksheetProtection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        WorksheetProtection.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        WorksheetProtection.prototype.toJSON = function () {
            return _toJson(this, {
                "options": this._O,
                "protected": this._P
            }, {});
        };
        WorksheetProtection.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        WorksheetProtection.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return WorksheetProtection;
    }(OfficeExtension.ClientObject));
    Excel.WorksheetProtection = WorksheetProtection;
    (function (_CC) {
        function WorksheetProtection_Protect(thisObj, options, password) {
            if (versionNumberIsEarlierThan({
                mac: { desiredMajor: 16, desiredMinor: 7, desiredBuild: 17101600 },
                ios: { desiredMajor: 2, desiredMinor: 7, desiredBuild: 1016 },
                general: { desiredMajor: 16, desiredMinor: 0, desiredBuild: 8716 }
            })) {
                _invokeMethod(thisObj, "Protect", 0, [options], 0, 0);
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.WorksheetProtection_Protect = WorksheetProtection_Protect;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeWorksheetFreezePanes = "WorksheetFreezePanes";
    var WorksheetFreezePanes = (function (_super) {
        __extends(WorksheetFreezePanes, _super);
        function WorksheetFreezePanes() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(WorksheetFreezePanes.prototype, "_className", {
            get: function () {
                return "WorksheetFreezePanes";
            },
            enumerable: true,
            configurable: true
        });
        WorksheetFreezePanes.prototype.freezeAt = function (frozenRange) {
            _invokeMethod(this, "FreezeAt", 0, [frozenRange], 0, 0);
        };
        WorksheetFreezePanes.prototype.freezeColumns = function (count) {
            _invokeMethod(this, "FreezeColumns", 0, [count], 0, 0);
        };
        WorksheetFreezePanes.prototype.freezeRows = function (count) {
            _invokeMethod(this, "FreezeRows", 0, [count], 0, 0);
        };
        WorksheetFreezePanes.prototype.getLocation = function () {
            return _createMethodObject(Excel.Range, this, "GetLocation", 1, [], false, true, null, 4);
        };
        WorksheetFreezePanes.prototype.getLocationOrNullObject = function () {
            return _createMethodObject(Excel.Range, this, "GetLocationOrNullObject", 1, [], false, true, null, 4);
        };
        WorksheetFreezePanes.prototype.unfreeze = function () {
            _invokeMethod(this, "Unfreeze", 0, [], 0, 0);
        };
        WorksheetFreezePanes.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        WorksheetFreezePanes.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        WorksheetFreezePanes.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return WorksheetFreezePanes;
    }(OfficeExtension.ClientObject));
    Excel.WorksheetFreezePanes = WorksheetFreezePanes;
    var _typeRange = "Range";
    var Range = (function (_super) {
        __extends(Range, _super);
        function Range() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Range.prototype, "_className", {
            get: function () {
                return "Range";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["numberFormat", "numberFormatLocal", "values", "text", "formulas", "formulasLocal", "rowIndex", "columnIndex", "rowCount", "columnCount", "address", "addressLocal", "cellCount", "_ReferenceId", "valueTypes", "formulasR1C1", "hidden", "rowHidden", "columnHidden", "isEntireColumn", "isEntireRow", "hyperlink", "style", "linkedDataTypeState", "hasSpill", "top", "left", "height", "width", "savedAsArray", "numberFormatCategories"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["NumberFormat", "NumberFormatLocal", "Values", "Text", "Formulas", "FormulasLocal", "RowIndex", "ColumnIndex", "RowCount", "ColumnCount", "Address", "AddressLocal", "CellCount", "_ReferenceId", "ValueTypes", "FormulasR1C1", "Hidden", "RowHidden", "ColumnHidden", "IsEntireColumn", "IsEntireRow", "Hyperlink", "Style", "LinkedDataTypeState", "HasSpill", "Top", "Left", "Height", "Width", "SavedAsArray", "NumberFormatCategories"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, false, true, true, false, false, false, false, false, false, false, false, false, true, false, true, true, false, false, true, true, false, false, false, false, false, false, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format", "worksheet", "sort", "conditionalFormats", "dataValidation"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "conditionalFormats", {
            get: function () {
                _throwIfApiNotSupported("Range.conditionalFormats", _defaultApiSetName, "1.6", _hostName);
                if (!this._Con) {
                    this._Con = _createPropertyObject(Excel.ConditionalFormatCollection, this, "ConditionalFormats", true, 4);
                }
                return this._Con;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "dataValidation", {
            get: function () {
                _throwIfApiNotSupported("Range.dataValidation", _defaultApiSetName, "1.8", _hostName);
                if (!this._D) {
                    this._D = _createPropertyObject(Excel.DataValidation, this, "DataValidation", false, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.RangeFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "sort", {
            get: function () {
                _throwIfApiNotSupported("Range.sort", _defaultApiSetName, "1.2", _hostName);
                if (!this._So) {
                    this._So = _createPropertyObject(Excel.RangeSort, this, "Sort", false, 4);
                }
                return this._So;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "worksheet", {
            get: function () {
                if (!this._Wo) {
                    this._Wo = _createPropertyObject(Excel.Worksheet, this, "Worksheet", false, 4);
                }
                return this._Wo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "address", {
            get: function () {
                _throwIfNotLoaded("address", this._A, _typeRange, this._isNull);
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "addressLocal", {
            get: function () {
                _throwIfNotLoaded("addressLocal", this._Ad, _typeRange, this._isNull);
                return this._Ad;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "cellCount", {
            get: function () {
                _throwIfNotLoaded("cellCount", this._C, _typeRange, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "columnCount", {
            get: function () {
                _throwIfNotLoaded("columnCount", this._Co, _typeRange, this._isNull);
                return this._Co;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "columnHidden", {
            get: function () {
                _throwIfNotLoaded("columnHidden", this._Col, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.columnHidden", _defaultApiSetName, "1.2", _hostName);
                return this._Col;
            },
            set: function (value) {
                this._Col = value;
                _invokeSetProperty(this, "ColumnHidden", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "columnIndex", {
            get: function () {
                _throwIfNotLoaded("columnIndex", this._Colu, _typeRange, this._isNull);
                return this._Colu;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "formulas", {
            get: function () {
                _throwIfNotLoaded("formulas", this.m_formulas, _typeRange, this._isNull);
                return this.m_formulas;
            },
            set: function (value) {
                var handled = _CC.Range_Formulas_Set(this, value).handled;
                if (handled) {
                    return;
                }
                this.m_formulas = value;
                _invokeSetProperty(this, "Formulas", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "formulasLocal", {
            get: function () {
                _throwIfNotLoaded("formulasLocal", this.m_formulasLocal, _typeRange, this._isNull);
                return this.m_formulasLocal;
            },
            set: function (value) {
                var handled = _CC.Range_FormulasLocal_Set(this, value).handled;
                if (handled) {
                    return;
                }
                this.m_formulasLocal = value;
                _invokeSetProperty(this, "FormulasLocal", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "formulasR1C1", {
            get: function () {
                _throwIfNotLoaded("formulasR1C1", this.m_formulasR1C1, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.formulasR1C1", _defaultApiSetName, "1.2", _hostName);
                return this.m_formulasR1C1;
            },
            set: function (value) {
                var handled = _CC.Range_FormulasR1C1_Set(this, value).handled;
                if (handled) {
                    return;
                }
                this.m_formulasR1C1 = value;
                _invokeSetProperty(this, "FormulasR1C1", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "hasSpill", {
            get: function () {
                _throwIfNotLoaded("hasSpill", this._H, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.hasSpill", _defaultApiSetName, "1.12", _hostName);
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._He, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.height", _defaultApiSetName, "1.10", _hostName);
                return this._He;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "hidden", {
            get: function () {
                _throwIfNotLoaded("hidden", this._Hi, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.hidden", _defaultApiSetName, "1.2", _hostName);
                return this._Hi;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "hyperlink", {
            get: function () {
                _throwIfNotLoaded("hyperlink", this._Hy, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.hyperlink", _defaultApiSetName, "1.7", _hostName);
                return this._Hy;
            },
            set: function (value) {
                this._Hy = value;
                _invokeSetProperty(this, "Hyperlink", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "isEntireColumn", {
            get: function () {
                _throwIfNotLoaded("isEntireColumn", this.m_isEntireColumn, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.isEntireColumn", _defaultApiSetName, "1.7", _hostName);
                return this.m_isEntireColumn;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "isEntireRow", {
            get: function () {
                _throwIfNotLoaded("isEntireRow", this.m_isEntireRow, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.isEntireRow", _defaultApiSetName, "1.7", _hostName);
                return this.m_isEntireRow;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.left", _defaultApiSetName, "1.10", _hostName);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "linkedDataTypeState", {
            get: function () {
                _throwIfNotLoaded("linkedDataTypeState", this._Li, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.linkedDataTypeState", _defaultApiSetName, "1.9", _hostName);
                return this._Li;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "numberFormat", {
            get: function () {
                _throwIfNotLoaded("numberFormat", this.m_numberFormat, _typeRange, this._isNull);
                return this.m_numberFormat;
            },
            set: function (value) {
                var handled = _CC.Range_NumberFormat_Set(this, value).handled;
                if (handled) {
                    return;
                }
                this.m_numberFormat = value;
                _invokeSetProperty(this, "NumberFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "numberFormatCategories", {
            get: function () {
                _throwIfNotLoaded("numberFormatCategories", this._N, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.numberFormatCategories", _defaultApiSetName, "1.12", _hostName);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "numberFormatLocal", {
            get: function () {
                _throwIfNotLoaded("numberFormatLocal", this._Nu, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.numberFormatLocal", _defaultApiSetName, "1.7", _hostName);
                return this._Nu;
            },
            set: function (value) {
                this._Nu = value;
                _invokeSetProperty(this, "NumberFormatLocal", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "rowCount", {
            get: function () {
                _throwIfNotLoaded("rowCount", this._R, _typeRange, this._isNull);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "rowHidden", {
            get: function () {
                _throwIfNotLoaded("rowHidden", this._Ro, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.rowHidden", _defaultApiSetName, "1.2", _hostName);
                return this._Ro;
            },
            set: function (value) {
                this._Ro = value;
                _invokeSetProperty(this, "RowHidden", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "rowIndex", {
            get: function () {
                _throwIfNotLoaded("rowIndex", this._Row, _typeRange, this._isNull);
                return this._Row;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "savedAsArray", {
            get: function () {
                _throwIfNotLoaded("savedAsArray", this._S, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.savedAsArray", _defaultApiSetName, "1.12", _hostName);
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "style", {
            get: function () {
                _throwIfNotLoaded("style", this._St, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.style", _defaultApiSetName, "1.7", _hostName);
                return this._St;
            },
            set: function (value) {
                this._St = value;
                _invokeSetProperty(this, "Style", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "text", {
            get: function () {
                _throwIfNotLoaded("text", this._T, _typeRange, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._To, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.top", _defaultApiSetName, "1.10", _hostName);
                return this._To;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "valueTypes", {
            get: function () {
                _throwIfNotLoaded("valueTypes", this._V, _typeRange, this._isNull);
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "values", {
            get: function () {
                _throwIfNotLoaded("values", this.m_values, _typeRange, this._isNull);
                return this.m_values;
            },
            set: function (value) {
                var handled = _CC.Range_Values_Set(this, value).handled;
                if (handled) {
                    return;
                }
                this.m_values = value;
                _invokeSetProperty(this, "Values", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeRange, this._isNull);
                _throwIfApiNotSupported("Range.width", _defaultApiSetName, "1.10", _hostName);
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Range.prototype, "_ReferenceId", {
            get: function () {
                _throwIfNotLoaded("_ReferenceId", this.__R, _typeRange, this._isNull);
                return this.__R;
            },
            enumerable: true,
            configurable: true
        });
        Range.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["numberFormat", "numberFormatLocal", "values", "formulas", "formulasLocal", "formulasR1C1", "rowHidden", "columnHidden", "hyperlink", "style"], ["format", "dataValidation"], [
                "conditionalFormats",
                "sort",
                "worksheet"
            ]);
        };
        Range.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Range.prototype.autoFill = function (destinationRange, autoFillType) {
            _throwIfApiNotSupported("Range.autoFill", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "AutoFill", 0, [destinationRange, autoFillType], 0, 0);
        };
        Range.prototype.calculate = function () {
            _throwIfApiNotSupported("Range.calculate", _defaultApiSetName, "1.6", _hostName);
            _invokeMethod(this, "Calculate", 0, [], 0, 0);
        };
        Range.prototype.clear = function (applyTo) {
            _invokeMethod(this, "Clear", 0, [applyTo], 0, 0);
        };
        Range.prototype.convertDataTypeToText = function () {
            _throwIfApiNotSupported("Range.convertDataTypeToText", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "ConvertDataTypeToText", 0, [], 0, 0);
        };
        Range.prototype.convertToLinkedDataType = function (serviceID, languageCulture) {
            _throwIfApiNotSupported("Range.convertToLinkedDataType", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "ConvertToLinkedDataType", 0, [serviceID, languageCulture], 0, 0);
        };
        Range.prototype.copyFrom = function (sourceRange, copyType, skipBlanks, transpose) {
            _throwIfApiNotSupported("Range.copyFrom", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "CopyFrom", 0, [sourceRange, copyType, skipBlanks, transpose], 0, 0);
        };
        Range.prototype["delete"] = function (shift) {
            _invokeMethod(this, "Delete", 0, [shift], 0, 0);
        };
        Range.prototype.find = function (text, criteria) {
            _throwIfApiNotSupported("Range.find", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.Range, this, "Find", 1, [text, criteria], false, true, null, 4);
        };
        Range.prototype.findOrNullObject = function (text, criteria) {
            _throwIfApiNotSupported("Range.findOrNullObject", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.Range, this, "FindOrNullObject", 1, [text, criteria], false, true, null, 4);
        };
        Range.prototype.flashFill = function () {
            _throwIfApiNotSupported("Range.flashFill", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "FlashFill", 0, [], 0, 0);
        };
        Range.prototype.getAbsoluteResizedRange = function (numRows, numColumns) {
            _throwIfApiNotSupported("Range.getAbsoluteResizedRange", _defaultApiSetName, "1.7", _hostName);
            return _createMethodObject(Excel.Range, this, "GetAbsoluteResizedRange", 1, [numRows, numColumns], false, true, null, 4);
        };
        Range.prototype.getBoundingRect = function (anotherRange) {
            return _createMethodObject(Excel.Range, this, "GetBoundingRect", 1, [anotherRange], false, true, null, 4);
        };
        Range.prototype.getCell = function (row, column) {
            return _createMethodObject(Excel.Range, this, "GetCell", 1, [row, column], false, true, null, 4);
        };
        Range.prototype.getCellProperties = function (cellPropertiesLoadOptions) {
            _throwIfApiNotSupported("Range.getCellProperties", _defaultApiSetName, "1.9", _hostName);
            return _invokeMethod(this, "GetCellProperties", 0, [cellPropertiesLoadOptions], 0, 0);
        };
        Range.prototype.getColumn = function (column) {
            return _createMethodObject(Excel.Range, this, "GetColumn", 1, [column], false, true, null, 4);
        };
        Range.prototype.getColumnProperties = function (columnPropertiesLoadOptions) {
            _throwIfApiNotSupported("Range.getColumnProperties", _defaultApiSetName, "1.9", _hostName);
            return _invokeMethod(this, "GetColumnProperties", 0, [columnPropertiesLoadOptions], 0, 0);
        };
        Range.prototype.getColumnsAfter = function (count) {
            var _a = _CC.Range_GetColumnsAfter(this, count), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            _throwIfApiNotSupported("Range.getColumnsAfter", _defaultApiSetName, "1.3", _hostName);
            return _createMethodObject(Excel.Range, this, "GetColumnsAfter", 1, [count], false, true, null, 4);
        };
        Range.prototype.getColumnsBefore = function (count) {
            var _a = _CC.Range_GetColumnsBefore(this, count), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            _throwIfApiNotSupported("Range.getColumnsBefore", _defaultApiSetName, "1.3", _hostName);
            return _createMethodObject(Excel.Range, this, "GetColumnsBefore", 1, [count], false, true, null, 4);
        };
        Range.prototype.getDataClassificationIds = function () {
            _throwIfApiNotSupported("Range.getDataClassificationIds", "ExcelApiOnline", "1.1", _hostName);
            return _invokeMethod(this, "GetDataClassificationIds", 1, [], 4, 0);
        };
        Range.prototype.getDirectDependents = function () {
            _throwIfApiNotSupported("Range.getDirectDependents", _defaultApiSetName, "1.13", _hostName);
            return _createMethodObject(Excel.WorkbookRangeAreas, this, "GetDirectDependents", 1, [], false, true, null, 4);
        };
        Range.prototype.getDirectPrecedents = function () {
            _throwIfApiNotSupported("Range.getDirectPrecedents", _defaultApiSetName, "1.12", _hostName);
            return _createMethodObject(Excel.WorkbookRangeAreas, this, "GetDirectPrecedents", 1, [], false, true, null, 4);
        };
        Range.prototype.getEntireColumn = function () {
            return _createMethodObject(Excel.Range, this, "GetEntireColumn", 1, [], false, true, null, 4);
        };
        Range.prototype.getEntireRow = function () {
            return _createMethodObject(Excel.Range, this, "GetEntireRow", 1, [], false, true, null, 4);
        };
        Range.prototype.getExtendedRange = function (direction, activeCell) {
            _throwIfApiNotSupported("Range.getExtendedRange", _defaultApiSetName, "1.13", _hostName);
            return _createMethodObject(Excel.Range, this, "GetExtendedRange", 1, [direction, activeCell], false, true, null, 4);
        };
        Range.prototype.getImage = function () {
            _throwIfApiNotSupported("Range.getImage", _defaultApiSetName, "1.7", _hostName);
            return _invokeMethod(this, "GetImage", 1, [], 4, 0);
        };
        Range.prototype.getIntersection = function (anotherRange) {
            return _createMethodObject(Excel.Range, this, "GetIntersection", 1, [anotherRange], false, true, null, 4);
        };
        Range.prototype.getIntersectionOrNullObject = function (anotherRange) {
            _throwIfApiNotSupported("Range.getIntersectionOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.Range, this, "GetIntersectionOrNullObject", 1, [anotherRange], false, true, null, 4);
        };
        Range.prototype.getLastCell = function () {
            return _createMethodObject(Excel.Range, this, "GetLastCell", 1, [], false, true, null, 4);
        };
        Range.prototype.getLastColumn = function () {
            return _createMethodObject(Excel.Range, this, "GetLastColumn", 1, [], false, true, null, 4);
        };
        Range.prototype.getLastRow = function () {
            return _createMethodObject(Excel.Range, this, "GetLastRow", 1, [], false, true, null, 4);
        };
        Range.prototype.getMergedAreas = function () {
            _throwIfApiNotSupported("Range.getMergedAreas", "ExcelApiOnline", "1.1", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "GetMergedAreas", 1, [], false, true, null, 4);
        };
        Range.prototype.getMergedAreasOrNullObject = function () {
            _throwIfApiNotSupported("Range.getMergedAreasOrNullObject", _defaultApiSetName, "1.13", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "GetMergedAreasOrNullObject", 0, [], false, false, null, 0);
        };
        Range.prototype.getOffsetRange = function (rowOffset, columnOffset) {
            return _createMethodObject(Excel.Range, this, "GetOffsetRange", 1, [rowOffset, columnOffset], false, true, null, 4);
        };
        Range.prototype.getPivotTables = function (fullyContained) {
            _throwIfApiNotSupported("Range.getPivotTables", _defaultApiSetName, "1.12", _hostName);
            return _createMethodObject(Excel.PivotTableScopedCollection, this, "GetPivotTables", 1, [fullyContained], true, false, null, 4);
        };
        Range.prototype.getPrecedents = function () {
            _throwIfApiNotSupported("Range.getPrecedents", _defaultApiSetName, "1.14", _hostName);
            return _createMethodObject(Excel.WorkbookRangeAreas, this, "GetPrecedents", 1, [], false, true, null, 4);
        };
        Range.prototype.getRangeEdge = function (direction, activeCell) {
            _throwIfApiNotSupported("Range.getRangeEdge", _defaultApiSetName, "1.13", _hostName);
            return _createMethodObject(Excel.Range, this, "GetRangeEdge", 1, [direction, activeCell], false, true, null, 4);
        };
        Range.prototype.getResizedRange = function (deltaRows, deltaColumns) {
            var _a = _CC.Range_GetResizedRange(this, deltaRows, deltaColumns), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            _throwIfApiNotSupported("Range.getResizedRange", _defaultApiSetName, "1.3", _hostName);
            return _createMethodObject(Excel.Range, this, "GetResizedRange", 1, [deltaRows, deltaColumns], false, true, null, 4);
        };
        Range.prototype.getRow = function (row) {
            return _createMethodObject(Excel.Range, this, "GetRow", 1, [row], false, true, null, 4);
        };
        Range.prototype.getRowProperties = function (rowPropertiesLoadOptions) {
            _throwIfApiNotSupported("Range.getRowProperties", _defaultApiSetName, "1.9", _hostName);
            return _invokeMethod(this, "GetRowProperties", 0, [rowPropertiesLoadOptions], 0, 0);
        };
        Range.prototype.getRowsAbove = function (count) {
            var _a = _CC.Range_GetRowsAbove(this, count), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            _throwIfApiNotSupported("Range.getRowsAbove", _defaultApiSetName, "1.3", _hostName);
            return _createMethodObject(Excel.Range, this, "GetRowsAbove", 1, [count], false, true, null, 4);
        };
        Range.prototype.getRowsBelow = function (count) {
            var _a = _CC.Range_GetRowsBelow(this, count), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            _throwIfApiNotSupported("Range.getRowsBelow", _defaultApiSetName, "1.3", _hostName);
            return _createMethodObject(Excel.Range, this, "GetRowsBelow", 1, [count], false, true, null, 4);
        };
        Range.prototype.getSpecialCells = function (cellType, cellValueType) {
            _throwIfApiNotSupported("Range.getSpecialCells", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "GetSpecialCells", 1, [cellType, cellValueType], false, true, null, 4);
        };
        Range.prototype.getSpecialCellsOrNullObject = function (cellType, cellValueType) {
            _throwIfApiNotSupported("Range.getSpecialCellsOrNullObject", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "GetSpecialCellsOrNullObject", 1, [cellType, cellValueType], false, true, null, 4);
        };
        Range.prototype.getSpillParent = function () {
            _throwIfApiNotSupported("Range.getSpillParent", _defaultApiSetName, "1.12", _hostName);
            return _createMethodObject(Excel.Range, this, "GetSpillParent", 1, [], false, true, null, 4);
        };
        Range.prototype.getSpillParentOrNullObject = function () {
            _throwIfApiNotSupported("Range.getSpillParentOrNullObject", _defaultApiSetName, "1.12", _hostName);
            return _createMethodObject(Excel.Range, this, "GetSpillParentOrNullObject", 1, [], false, true, null, 4);
        };
        Range.prototype.getSpillingToRange = function () {
            _throwIfApiNotSupported("Range.getSpillingToRange", _defaultApiSetName, "1.12", _hostName);
            return _createMethodObject(Excel.Range, this, "GetSpillingToRange", 1, [], false, true, null, 4);
        };
        Range.prototype.getSpillingToRangeOrNullObject = function () {
            _throwIfApiNotSupported("Range.getSpillingToRangeOrNullObject", _defaultApiSetName, "1.12", _hostName);
            return _createMethodObject(Excel.Range, this, "GetSpillingToRangeOrNullObject", 1, [], false, true, null, 4);
        };
        Range.prototype.getSurroundingRegion = function () {
            _throwIfApiNotSupported("Range.getSurroundingRegion", _defaultApiSetName, "1.7", _hostName);
            return _createMethodObject(Excel.Range, this, "GetSurroundingRegion", 1, [], false, true, null, 4);
        };
        Range.prototype.getTables = function (fullyContained) {
            _throwIfApiNotSupported("Range.getTables", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.TableScopedCollection, this, "GetTables", 1, [fullyContained], true, false, null, 4);
        };
        Range.prototype.getUsedRange = function (valuesOnly) {
            return _createMethodObject(Excel.Range, this, "GetUsedRange", 1, [valuesOnly], false, true, null, 4);
        };
        Range.prototype.getUsedRangeOrNullObject = function (valuesOnly) {
            _throwIfApiNotSupported("Range.getUsedRangeOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.Range, this, "GetUsedRangeOrNullObject", 1, [valuesOnly], false, true, null, 4);
        };
        Range.prototype.getVisibleView = function () {
            _throwIfApiNotSupported("Range.getVisibleView", _defaultApiSetName, "1.3", _hostName);
            return _createMethodObject(Excel.RangeView, this, "GetVisibleView", 1, [], false, false, null, 4);
        };
        Range.prototype.group = function (groupOption) {
            _throwIfApiNotSupported("Range.group", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "Group", 0, [groupOption], 0, 0);
        };
        Range.prototype.hideGroupDetails = function (groupOption) {
            _throwIfApiNotSupported("Range.hideGroupDetails", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "HideGroupDetails", 0, [groupOption], 0, 0);
        };
        Range.prototype.insert = function (shift) {
            return _createMethodObject(Excel.Range, this, "Insert", 0, [shift], false, true, null, 0);
        };
        Range.prototype.merge = function (across) {
            _throwIfApiNotSupported("Range.merge", _defaultApiSetName, "1.2", _hostName);
            _invokeMethod(this, "Merge", 0, [across], 0, 0);
        };
        Range.prototype.moveTo = function (destinationRange) {
            _throwIfApiNotSupported("Range.moveTo", _defaultApiSetName, "1.11", _hostName);
            _invokeMethod(this, "MoveTo", 0, [destinationRange], 0, 0);
        };
        Range.prototype.removeDuplicates = function (columns, includesHeader) {
            _throwIfApiNotSupported("Range.removeDuplicates", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RemoveDuplicatesResult, this, "RemoveDuplicates", 0, [columns, includesHeader], false, true, null, 0);
        };
        Range.prototype.replaceAll = function (text, replacement, criteria) {
            _throwIfApiNotSupported("Range.replaceAll", _defaultApiSetName, "1.9", _hostName);
            return _invokeMethod(this, "ReplaceAll", 0, [text, replacement, criteria], 0, 0);
        };
        Range.prototype.select = function () {
            _invokeMethod(this, "Select", 1, [], 0, 0);
        };
        Range.prototype.setCellProperties = function (cellPropertiesData) {
            _throwIfApiNotSupported("Range.setCellProperties", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "SetCellProperties", 0, [cellPropertiesData], 0, 0);
        };
        Range.prototype.setColumnProperties = function (columnPropertiesData) {
            _throwIfApiNotSupported("Range.setColumnProperties", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "SetColumnProperties", 0, [columnPropertiesData], 0, 0);
        };
        Range.prototype.setDirty = function () {
            _throwIfApiNotSupported("Range.setDirty", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "SetDirty", 0, [], 0, 0);
        };
        Range.prototype.setRowProperties = function (rowPropertiesData) {
            _throwIfApiNotSupported("Range.setRowProperties", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "SetRowProperties", 0, [rowPropertiesData], 0, 0);
        };
        Range.prototype.showCard = function () {
            _throwIfApiNotSupported("Range.showCard", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "ShowCard", 0, [], 0, 0);
        };
        Range.prototype.showGroupDetails = function (groupOption) {
            _throwIfApiNotSupported("Range.showGroupDetails", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "ShowGroupDetails", 0, [groupOption], 0, 0);
        };
        Range.prototype.showTeachingCallout = function (title, message) {
            _throwIfApiNotSupported("Range.showTeachingCallout", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "ShowTeachingCallout", 0, [title, message], 0, 0);
        };
        Range.prototype.ungroup = function (groupOption) {
            _throwIfApiNotSupported("Range.ungroup", _defaultApiSetName, "1.10", _hostName);
            _invokeMethod(this, "Ungroup", 0, [groupOption], 0, 0);
        };
        Range.prototype.unmerge = function () {
            _throwIfApiNotSupported("Range.unmerge", _defaultApiSetName, "1.2", _hostName);
            _invokeMethod(this, "Unmerge", 0, [], 0, 0);
        };
        Range.prototype._KeepReference = function () {
            _invokeMethod(this, "_KeepReference", 1, [], 0, 0);
        };
        Range.prototype._ValidateArraySize = function (rows, columns) {
            _throwIfApiNotSupported("Range._ValidateArraySize", _defaultApiSetName, "1.3", _hostName);
            _invokeMethod(this, "_ValidateArraySize", 1, [rows, columns], 4, 0);
        };
        Range.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _CC.Range_HandleResult(this, obj);
            if (!_isUndefined(obj["Address"])) {
                this._A = obj["Address"];
            }
            if (!_isUndefined(obj["AddressLocal"])) {
                this._Ad = obj["AddressLocal"];
            }
            if (!_isUndefined(obj["CellCount"])) {
                this._C = obj["CellCount"];
            }
            if (!_isUndefined(obj["ColumnCount"])) {
                this._Co = obj["ColumnCount"];
            }
            if (!_isUndefined(obj["ColumnHidden"])) {
                this._Col = obj["ColumnHidden"];
            }
            if (!_isUndefined(obj["ColumnIndex"])) {
                this._Colu = obj["ColumnIndex"];
            }
            if (!_isUndefined(obj["Formulas"])) {
                this.m_formulas = obj["Formulas"];
            }
            if (!_isUndefined(obj["FormulasLocal"])) {
                this.m_formulasLocal = obj["FormulasLocal"];
            }
            if (!_isUndefined(obj["FormulasR1C1"])) {
                this.m_formulasR1C1 = obj["FormulasR1C1"];
            }
            if (!_isUndefined(obj["HasSpill"])) {
                this._H = obj["HasSpill"];
            }
            if (!_isUndefined(obj["Height"])) {
                this._He = obj["Height"];
            }
            if (!_isUndefined(obj["Hidden"])) {
                this._Hi = obj["Hidden"];
            }
            if (!_isUndefined(obj["Hyperlink"])) {
                this._Hy = obj["Hyperlink"];
            }
            if (!_isUndefined(obj["IsEntireColumn"])) {
                this.m_isEntireColumn = obj["IsEntireColumn"];
            }
            if (!_isUndefined(obj["IsEntireRow"])) {
                this.m_isEntireRow = obj["IsEntireRow"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["LinkedDataTypeState"])) {
                this._Li = obj["LinkedDataTypeState"];
            }
            if (!_isUndefined(obj["NumberFormat"])) {
                this.m_numberFormat = obj["NumberFormat"];
            }
            if (!_isUndefined(obj["NumberFormatCategories"])) {
                this._N = obj["NumberFormatCategories"];
            }
            if (!_isUndefined(obj["NumberFormatLocal"])) {
                this._Nu = obj["NumberFormatLocal"];
            }
            if (!_isUndefined(obj["RowCount"])) {
                this._R = obj["RowCount"];
            }
            if (!_isUndefined(obj["RowHidden"])) {
                this._Ro = obj["RowHidden"];
            }
            if (!_isUndefined(obj["RowIndex"])) {
                this._Row = obj["RowIndex"];
            }
            if (!_isUndefined(obj["SavedAsArray"])) {
                this._S = obj["SavedAsArray"];
            }
            if (!_isUndefined(obj["Style"])) {
                this._St = obj["Style"];
            }
            if (!_isUndefined(obj["Text"])) {
                this._T = obj["Text"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._To = obj["Top"];
            }
            if (!_isUndefined(obj["ValueTypes"])) {
                this._V = obj["ValueTypes"];
            }
            if (!_isUndefined(obj["Values"])) {
                this.m_values = obj["Values"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
            if (!_isUndefined(obj["_ReferenceId"])) {
                this.__R = obj["_ReferenceId"];
            }
            _handleNavigationPropertyResults(this, obj, ["conditionalFormats", "ConditionalFormats", "dataValidation", "DataValidation", "format", "Format", "sort", "Sort", "worksheet", "Worksheet"]);
        };
        Range.prototype.load = function (options) {
            return _load(this, options);
        };
        Range.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Range.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_ReferenceId"])) {
                this.__R = value["_ReferenceId"];
            }
        };
        Range.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Range.prototype.track = function () {
            this.context.trackedObjects.add(this);
            return this;
        };
        Range.prototype.untrack = function () {
            this.context.trackedObjects.remove(this);
            return this;
        };
        Range.prototype.toJSON = function () {
            return _toJson(this, {
                "address": this._A,
                "addressLocal": this._Ad,
                "cellCount": this._C,
                "columnCount": this._Co,
                "columnHidden": this._Col,
                "columnIndex": this._Colu,
                "formulas": this.m_formulas,
                "formulasLocal": this.m_formulasLocal,
                "formulasR1C1": this.m_formulasR1C1,
                "hasSpill": this._H,
                "height": this._He,
                "hidden": this._Hi,
                "hyperlink": this._Hy,
                "isEntireColumn": this.m_isEntireColumn,
                "isEntireRow": this.m_isEntireRow,
                "left": this._L,
                "linkedDataTypeState": this._Li,
                "numberFormat": this.m_numberFormat,
                "numberFormatCategories": this._N,
                "numberFormatLocal": this._Nu,
                "rowCount": this._R,
                "rowHidden": this._Ro,
                "rowIndex": this._Row,
                "savedAsArray": this._S,
                "style": this._St,
                "text": this._T,
                "top": this._To,
                "values": this.m_values,
                "valueTypes": this._V,
                "width": this._W
            }, {
                "conditionalFormats": this._Con,
                "dataValidation": this._D,
                "format": this._F
            });
        };
        Range.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Range.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Range;
    }(OfficeExtension.ClientObject));
    Excel.Range = Range;
    var RangeCustom = (function () {
        function RangeCustom() {
        }
        RangeCustom.prototype._ensureInteger = function (num, methodName) {
            if (!(typeof num === "number" && isFinite(num) && Math.floor(num) === num)) {
                OfficeExtension.Utility.throwError(Excel.ErrorCodes.invalidArgument, num, methodName);
            }
        };
        RangeCustom.prototype._getAdjacentRange = function (functionName, count, referenceRange, rowDirection, columnDirection) {
            if (count == null) {
                count = 1;
            }
            this._ensureInteger(count, functionName);
            var startRange;
            var rowOffset = 0;
            var columnOffset = 0;
            if (count > 0) {
                startRange = referenceRange.getOffsetRange(rowDirection, columnDirection);
            }
            else {
                startRange = referenceRange;
                rowOffset = rowDirection;
                columnOffset = columnDirection;
            }
            if (Math.abs(count) === 1) {
                return startRange;
            }
            return startRange.getBoundingRect(referenceRange.getOffsetRange(rowDirection * count + rowOffset, columnDirection * count + columnOffset));
        };
        return RangeCustom;
    }());
    Excel.RangeCustom = RangeCustom;
    OfficeExtension.Utility.applyMixin(Range, RangeCustom);
    (function (_CC) {
        function Range_HandleResult(thisObj, value) {
            if (!_isUndefined(value["isEntireColumn"])) {
                thisObj.m_isEntireColumn = value["isEntireColumn"];
            }
            if (!_isUndefined(value["isEntireRow"])) {
                thisObj.m_isEntireRow = value["isEntireRow"];
            }
        }
        _CC.Range_HandleResult = Range_HandleResult;
        function Range_GetColumnsAfter(thisObj, count) {
            if (!isExcel1_3OrAbove()) {
                if (count == null) {
                    count = 1;
                }
                thisObj._ensureInteger(count, "RowsAbove");
                if (count === 0) {
                    OfficeExtension.Utility.throwError(Excel.ErrorCodes.invalidArgument, "count", "RowsAbove");
                }
                return {
                    handled: true,
                    result: thisObj._getAdjacentRange("getColumnsAfter", count, thisObj.getLastColumn(), 0, 1)
                };
            }
            return { handled: false, result: null };
        }
        _CC.Range_GetColumnsAfter = Range_GetColumnsAfter;
        function Range_GetColumnsBefore(thisObj, count) {
            if (!isExcel1_3OrAbove()) {
                if (count == null) {
                    count = 1;
                }
                thisObj._ensureInteger(count, "RowsAbove");
                if (count === 0) {
                    OfficeExtension.Utility.throwError(Excel.ErrorCodes.invalidArgument, "count", "RowsAbove");
                }
                return {
                    handled: true,
                    result: thisObj._getAdjacentRange("getColumnsBefore", count, thisObj.getColumn(0), 0, -1)
                };
            }
            return { handled: false, result: null };
        }
        _CC.Range_GetColumnsBefore = Range_GetColumnsBefore;
        function Range_GetResizedRange(thisObj, deltaRows, deltaColumns) {
            if (!isExcel1_3OrAbove()) {
                thisObj._ensureInteger(deltaRows, "getResizedRange");
                thisObj._ensureInteger(deltaColumns, "getResizedRange");
                var referenceRange = (deltaRows >= 0 && deltaColumns >= 0) ? thisObj : thisObj.getCell(0, 0);
                var result = referenceRange.getBoundingRect(thisObj.getLastCell().getOffsetRange(deltaRows, deltaColumns));
                return { handled: true, result: result };
            }
            return { handled: false, result: null };
        }
        _CC.Range_GetResizedRange = Range_GetResizedRange;
        function Range_GetRowsAbove(thisObj, count) {
            if (!isExcel1_3OrAbove()) {
                if (count == null) {
                    count = 1;
                }
                thisObj._ensureInteger(count, "RowsAbove");
                if (count === 0) {
                    OfficeExtension.Utility.throwError(Excel.ErrorCodes.invalidArgument, "count", "RowsAbove");
                }
                var result = thisObj._getAdjacentRange("getRowsAbove", count, thisObj.getRow(0), -1, 0);
                return { handled: true, result: result };
            }
            return { handled: false, result: null };
        }
        _CC.Range_GetRowsAbove = Range_GetRowsAbove;
        function Range_GetRowsBelow(thisObj, count) {
            if (!isExcel1_3OrAbove()) {
                if (count == null) {
                    count = 1;
                }
                thisObj._ensureInteger(count, "RowsAbove");
                if (count === 0) {
                    OfficeExtension.Utility.throwError(Excel.ErrorCodes.invalidArgument, "count", "RowsAbove");
                }
                var result = this._getAdjacentRange("getRowsBelow", count, thisObj.getLastRow(), 1, 0);
                return { handled: true, result: result };
            }
            return { handled: false, result: null };
        }
        _CC.Range_GetRowsBelow = Range_GetRowsBelow;
        function Range_Formulas_Set(thisObj, value) {
            thisObj.m_formulas = value;
            if (setRangePropertiesInBulk(thisObj, "Formulas", value)) {
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.Range_Formulas_Set = Range_Formulas_Set;
        function Range_FormulasLocal_Set(thisObj, value) {
            thisObj.m_formulasLocal = value;
            if (setRangePropertiesInBulk(thisObj, "FormulasLocal", value)) {
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.Range_FormulasLocal_Set = Range_FormulasLocal_Set;
        function Range_FormulasR1C1_Set(thisObj, value) {
            thisObj.m_formulasR1C1 = value;
            if (setRangePropertiesInBulk(thisObj, "FormulasR1C1", value)) {
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.Range_FormulasR1C1_Set = Range_FormulasR1C1_Set;
        function Range_NumberFormat_Set(thisObj, value) {
            thisObj.m_numberFormat = value;
            if (setRangePropertiesInBulk(thisObj, "NumberFormat", value)) {
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.Range_NumberFormat_Set = Range_NumberFormat_Set;
        function Range_Values_Set(thisObj, value) {
            thisObj.m_values = value;
            if (setRangePropertiesInBulk(thisObj, "Values", value)) {
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.Range_Values_Set = Range_Values_Set;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeRangeAreas = "RangeAreas";
    var RangeAreas = (function (_super) {
        __extends(RangeAreas, _super);
        function RangeAreas() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeAreas.prototype, "_className", {
            get: function () {
                return "RangeAreas";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["_ReferenceId", "address", "addressLocal", "areaCount", "cellCount", "isEntireColumn", "isEntireRow", "style"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["_ReferenceId", "Address", "AddressLocal", "AreaCount", "CellCount", "IsEntireColumn", "IsEntireRow", "Style"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, false, false, false, false, false, false, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["areas", "conditionalFormats", "format", "dataValidation", "worksheet"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "areas", {
            get: function () {
                if (!this._Are) {
                    this._Are = _createPropertyObject(Excel.RangeCollection, this, "Areas", true, 4);
                }
                return this._Are;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "conditionalFormats", {
            get: function () {
                if (!this._Co) {
                    this._Co = _createPropertyObject(Excel.ConditionalFormatCollection, this, "ConditionalFormats", true, 4);
                }
                return this._Co;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "dataValidation", {
            get: function () {
                if (!this._D) {
                    this._D = _createPropertyObject(Excel.DataValidation, this, "DataValidation", false, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.RangeFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "worksheet", {
            get: function () {
                if (!this._W) {
                    this._W = _createPropertyObject(Excel.Worksheet, this, "Worksheet", false, 4);
                }
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "address", {
            get: function () {
                _throwIfNotLoaded("address", this._A, _typeRangeAreas, this._isNull);
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "addressLocal", {
            get: function () {
                _throwIfNotLoaded("addressLocal", this._Ad, _typeRangeAreas, this._isNull);
                return this._Ad;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "areaCount", {
            get: function () {
                _throwIfNotLoaded("areaCount", this._Ar, _typeRangeAreas, this._isNull);
                return this._Ar;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "cellCount", {
            get: function () {
                _throwIfNotLoaded("cellCount", this._C, _typeRangeAreas, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "isEntireColumn", {
            get: function () {
                _throwIfNotLoaded("isEntireColumn", this.m_isEntireColumn, _typeRangeAreas, this._isNull);
                return this.m_isEntireColumn;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "isEntireRow", {
            get: function () {
                _throwIfNotLoaded("isEntireRow", this.m_isEntireRow, _typeRangeAreas, this._isNull);
                return this.m_isEntireRow;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "style", {
            get: function () {
                _throwIfNotLoaded("style", this._S, _typeRangeAreas, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Style", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreas.prototype, "_ReferenceId", {
            get: function () {
                _throwIfNotLoaded("_ReferenceId", this.__R, _typeRangeAreas, this._isNull);
                return this.__R;
            },
            enumerable: true,
            configurable: true
        });
        RangeAreas.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["style"], ["format", "dataValidation"], [
                "areas",
                "conditionalFormats",
                "worksheet"
            ]);
        };
        RangeAreas.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        RangeAreas.prototype.calculate = function () {
            _invokeMethod(this, "Calculate", 0, [], 0, 0);
        };
        RangeAreas.prototype.clear = function (applyTo) {
            _invokeMethod(this, "Clear", 0, [applyTo], 0, 0);
        };
        RangeAreas.prototype.convertDataTypeToText = function () {
            _invokeMethod(this, "ConvertDataTypeToText", 0, [], 0, 0);
        };
        RangeAreas.prototype.convertToLinkedDataType = function (serviceID, languageCulture) {
            _invokeMethod(this, "ConvertToLinkedDataType", 0, [serviceID, languageCulture], 0, 0);
        };
        RangeAreas.prototype.copyFrom = function (sourceRange, copyType, skipBlanks, transpose) {
            _invokeMethod(this, "CopyFrom", 0, [sourceRange, copyType, skipBlanks, transpose], 0, 0);
        };
        RangeAreas.prototype.getEntireColumn = function () {
            return _createMethodObject(Excel.RangeAreas, this, "GetEntireColumn", 1, [], false, true, null, 4);
        };
        RangeAreas.prototype.getEntireRow = function () {
            return _createMethodObject(Excel.RangeAreas, this, "GetEntireRow", 1, [], false, true, null, 4);
        };
        RangeAreas.prototype.getIntersection = function (anotherRange) {
            return _createMethodObject(Excel.RangeAreas, this, "GetIntersection", 1, [anotherRange], false, true, null, 4);
        };
        RangeAreas.prototype.getIntersectionOrNullObject = function (anotherRange) {
            return _createMethodObject(Excel.RangeAreas, this, "GetIntersectionOrNullObject", 1, [anotherRange], false, true, null, 4);
        };
        RangeAreas.prototype.getOffsetRangeAreas = function (rowOffset, columnOffset) {
            return _createMethodObject(Excel.RangeAreas, this, "GetOffsetRangeAreas", 1, [rowOffset, columnOffset], false, true, null, 4);
        };
        RangeAreas.prototype.getSpecialCells = function (cellType, cellValueType) {
            return _createMethodObject(Excel.RangeAreas, this, "GetSpecialCells", 1, [cellType, cellValueType], false, true, null, 4);
        };
        RangeAreas.prototype.getSpecialCellsOrNullObject = function (cellType, cellValueType) {
            return _createMethodObject(Excel.RangeAreas, this, "GetSpecialCellsOrNullObject", 1, [cellType, cellValueType], false, true, null, 4);
        };
        RangeAreas.prototype.getTables = function (fullyContained) {
            return _createMethodObject(Excel.TableScopedCollection, this, "GetTables", 1, [fullyContained], true, false, null, 4);
        };
        RangeAreas.prototype.getUsedRangeAreas = function (valuesOnly) {
            return _createMethodObject(Excel.RangeAreas, this, "GetUsedRangeAreas", 1, [valuesOnly], false, true, null, 4);
        };
        RangeAreas.prototype.getUsedRangeAreasOrNullObject = function (valuesOnly) {
            return _createMethodObject(Excel.RangeAreas, this, "GetUsedRangeAreasOrNullObject", 1, [valuesOnly], false, true, null, 4);
        };
        RangeAreas.prototype.setDirty = function () {
            _invokeMethod(this, "SetDirty", 0, [], 0, 0);
        };
        RangeAreas.prototype._KeepReference = function () {
            _invokeMethod(this, "_KeepReference", 1, [], 0, 0);
        };
        RangeAreas.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Address"])) {
                this._A = obj["Address"];
            }
            if (!_isUndefined(obj["AddressLocal"])) {
                this._Ad = obj["AddressLocal"];
            }
            if (!_isUndefined(obj["AreaCount"])) {
                this._Ar = obj["AreaCount"];
            }
            if (!_isUndefined(obj["CellCount"])) {
                this._C = obj["CellCount"];
            }
            if (!_isUndefined(obj["IsEntireColumn"])) {
                this.m_isEntireColumn = obj["IsEntireColumn"];
            }
            if (!_isUndefined(obj["IsEntireRow"])) {
                this.m_isEntireRow = obj["IsEntireRow"];
            }
            if (!_isUndefined(obj["Style"])) {
                this._S = obj["Style"];
            }
            if (!_isUndefined(obj["_ReferenceId"])) {
                this.__R = obj["_ReferenceId"];
            }
            _handleNavigationPropertyResults(this, obj, ["areas", "Areas", "conditionalFormats", "ConditionalFormats", "dataValidation", "DataValidation", "format", "Format", "worksheet", "Worksheet"]);
        };
        RangeAreas.prototype.load = function (options) {
            return _load(this, options);
        };
        RangeAreas.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RangeAreas.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_ReferenceId"])) {
                this.__R = value["_ReferenceId"];
            }
        };
        RangeAreas.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RangeAreas.prototype.track = function () {
            this.context.trackedObjects.add(this);
            return this;
        };
        RangeAreas.prototype.untrack = function () {
            this.context.trackedObjects.remove(this);
            return this;
        };
        RangeAreas.prototype.toJSON = function () {
            return _toJson(this, {
                "address": this._A,
                "addressLocal": this._Ad,
                "areaCount": this._Ar,
                "cellCount": this._C,
                "isEntireColumn": this.m_isEntireColumn,
                "isEntireRow": this.m_isEntireRow,
                "style": this._S
            }, {
                "areas": this._Are,
                "conditionalFormats": this._Co,
                "dataValidation": this._D,
                "format": this._F
            });
        };
        RangeAreas.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RangeAreas.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RangeAreas;
    }(OfficeExtension.ClientObject));
    Excel.RangeAreas = RangeAreas;
    var _typeWorkbookRangeAreas = "WorkbookRangeAreas";
    var WorkbookRangeAreas = (function (_super) {
        __extends(WorkbookRangeAreas, _super);
        function WorkbookRangeAreas() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(WorkbookRangeAreas.prototype, "_className", {
            get: function () {
                return "WorkbookRangeAreas";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookRangeAreas.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["_ReferenceId", "addresses"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookRangeAreas.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["_ReferenceId", "Addresses"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookRangeAreas.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["ranges", "areas"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookRangeAreas.prototype, "areas", {
            get: function () {
                if (!this._Ar) {
                    this._Ar = _createPropertyObject(Excel.RangeAreasCollection, this, "Areas", true, 4);
                }
                return this._Ar;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookRangeAreas.prototype, "ranges", {
            get: function () {
                if (!this._R) {
                    this._R = _createPropertyObject(Excel.RangeCollection, this, "Ranges", true, 4);
                }
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookRangeAreas.prototype, "addresses", {
            get: function () {
                _throwIfNotLoaded("addresses", this._A, _typeWorkbookRangeAreas, this._isNull);
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorkbookRangeAreas.prototype, "_ReferenceId", {
            get: function () {
                _throwIfNotLoaded("_ReferenceId", this.__R, _typeWorkbookRangeAreas, this._isNull);
                return this.__R;
            },
            enumerable: true,
            configurable: true
        });
        WorkbookRangeAreas.prototype.getRangeAreasBySheet = function (key) {
            return _createMethodObject(Excel.RangeAreas, this, "GetRangeAreasBySheet", 1, [key], false, true, null, 4);
        };
        WorkbookRangeAreas.prototype.getRangeAreasOrNullObjectBySheet = function (key) {
            return _createMethodObject(Excel.RangeAreas, this, "GetRangeAreasOrNullObjectBySheet", 1, [key], false, true, null, 4);
        };
        WorkbookRangeAreas.prototype._KeepReference = function () {
            _invokeMethod(this, "_KeepReference", 1, [], 0, 0);
        };
        WorkbookRangeAreas.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Addresses"])) {
                this._A = obj["Addresses"];
            }
            if (!_isUndefined(obj["_ReferenceId"])) {
                this.__R = obj["_ReferenceId"];
            }
            _handleNavigationPropertyResults(this, obj, ["areas", "Areas", "ranges", "Ranges"]);
        };
        WorkbookRangeAreas.prototype.load = function (options) {
            return _load(this, options);
        };
        WorkbookRangeAreas.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        WorkbookRangeAreas.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_ReferenceId"])) {
                this.__R = value["_ReferenceId"];
            }
        };
        WorkbookRangeAreas.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        WorkbookRangeAreas.prototype.track = function () {
            this.context.trackedObjects.add(this);
            return this;
        };
        WorkbookRangeAreas.prototype.untrack = function () {
            this.context.trackedObjects.remove(this);
            return this;
        };
        WorkbookRangeAreas.prototype.toJSON = function () {
            return _toJson(this, {
                "addresses": this._A
            }, {
                "areas": this._Ar,
                "ranges": this._R
            });
        };
        WorkbookRangeAreas.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        WorkbookRangeAreas.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return WorkbookRangeAreas;
    }(OfficeExtension.ClientObject));
    Excel.WorkbookRangeAreas = WorkbookRangeAreas;
    var _typeRangeView = "RangeView";
    var RangeView = (function (_super) {
        __extends(RangeView, _super);
        function RangeView() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeView.prototype, "_className", {
            get: function () {
                return "RangeView";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["numberFormat", "values", "text", "formulas", "formulasLocal", "formulasR1C1", "valueTypes", "rowCount", "columnCount", "cellAddresses", "index"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["NumberFormat", "Values", "Text", "Formulas", "FormulasLocal", "FormulasR1C1", "ValueTypes", "RowCount", "ColumnCount", "CellAddresses", "Index"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, false, true, true, true, false, false, false, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["rows"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "rows", {
            get: function () {
                if (!this._Ro) {
                    this._Ro = _createPropertyObject(Excel.RangeViewCollection, this, "Rows", true, 4);
                }
                return this._Ro;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "cellAddresses", {
            get: function () {
                _throwIfNotLoaded("cellAddresses", this._C, _typeRangeView, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "columnCount", {
            get: function () {
                _throwIfNotLoaded("columnCount", this._Co, _typeRangeView, this._isNull);
                return this._Co;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "formulas", {
            get: function () {
                _throwIfNotLoaded("formulas", this._F, _typeRangeView, this._isNull);
                return this._F;
            },
            set: function (value) {
                this._F = value;
                _invokeSetProperty(this, "Formulas", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "formulasLocal", {
            get: function () {
                _throwIfNotLoaded("formulasLocal", this._Fo, _typeRangeView, this._isNull);
                return this._Fo;
            },
            set: function (value) {
                this._Fo = value;
                _invokeSetProperty(this, "FormulasLocal", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "formulasR1C1", {
            get: function () {
                _throwIfNotLoaded("formulasR1C1", this._For, _typeRangeView, this._isNull);
                return this._For;
            },
            set: function (value) {
                this._For = value;
                _invokeSetProperty(this, "FormulasR1C1", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "index", {
            get: function () {
                _throwIfNotLoaded("index", this._I, _typeRangeView, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "numberFormat", {
            get: function () {
                _throwIfNotLoaded("numberFormat", this._N, _typeRangeView, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "NumberFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "rowCount", {
            get: function () {
                _throwIfNotLoaded("rowCount", this._R, _typeRangeView, this._isNull);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "text", {
            get: function () {
                _throwIfNotLoaded("text", this._T, _typeRangeView, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "valueTypes", {
            get: function () {
                _throwIfNotLoaded("valueTypes", this._Va, _typeRangeView, this._isNull);
                return this._Va;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeView.prototype, "values", {
            get: function () {
                _throwIfNotLoaded("values", this._V, _typeRangeView, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Values", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        RangeView.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["numberFormat", "values", "formulas", "formulasLocal", "formulasR1C1"], [], [
                "rows"
            ]);
        };
        RangeView.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        RangeView.prototype.getRange = function () {
            return _createMethodObject(Excel.Range, this, "GetRange", 1, [], false, true, null, 4);
        };
        RangeView.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["CellAddresses"])) {
                this._C = obj["CellAddresses"];
            }
            if (!_isUndefined(obj["ColumnCount"])) {
                this._Co = obj["ColumnCount"];
            }
            if (!_isUndefined(obj["Formulas"])) {
                this._F = obj["Formulas"];
            }
            if (!_isUndefined(obj["FormulasLocal"])) {
                this._Fo = obj["FormulasLocal"];
            }
            if (!_isUndefined(obj["FormulasR1C1"])) {
                this._For = obj["FormulasR1C1"];
            }
            if (!_isUndefined(obj["Index"])) {
                this._I = obj["Index"];
            }
            if (!_isUndefined(obj["NumberFormat"])) {
                this._N = obj["NumberFormat"];
            }
            if (!_isUndefined(obj["RowCount"])) {
                this._R = obj["RowCount"];
            }
            if (!_isUndefined(obj["Text"])) {
                this._T = obj["Text"];
            }
            if (!_isUndefined(obj["ValueTypes"])) {
                this._Va = obj["ValueTypes"];
            }
            if (!_isUndefined(obj["Values"])) {
                this._V = obj["Values"];
            }
            _handleNavigationPropertyResults(this, obj, ["rows", "Rows"]);
        };
        RangeView.prototype.load = function (options) {
            return _load(this, options);
        };
        RangeView.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RangeView.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RangeView.prototype.toJSON = function () {
            return _toJson(this, {
                "cellAddresses": this._C,
                "columnCount": this._Co,
                "formulas": this._F,
                "formulasLocal": this._Fo,
                "formulasR1C1": this._For,
                "index": this._I,
                "numberFormat": this._N,
                "rowCount": this._R,
                "text": this._T,
                "values": this._V,
                "valueTypes": this._Va
            }, {
                "rows": this._Ro
            });
        };
        RangeView.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RangeView.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RangeView;
    }(OfficeExtension.ClientObject));
    Excel.RangeView = RangeView;
    var _typeRangeViewCollection = "RangeViewCollection";
    var RangeViewCollection = (function (_super) {
        __extends(RangeViewCollection, _super);
        function RangeViewCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeViewCollection.prototype, "_className", {
            get: function () {
                return "RangeViewCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeViewCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeViewCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeRangeViewCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        RangeViewCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("RangeViewCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        RangeViewCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.RangeView, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        RangeViewCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.RangeView, false, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        RangeViewCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        RangeViewCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RangeViewCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.RangeView, false, _this, childItemData, index); });
        };
        RangeViewCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        RangeViewCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.RangeView, false, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return RangeViewCollection;
    }(OfficeExtension.ClientObject));
    Excel.RangeViewCollection = RangeViewCollection;
    var _typeSettingCollection = "SettingCollection";
    var SettingCollection = (function (_super) {
        __extends(SettingCollection, _super);
        function SettingCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(SettingCollection.prototype, "_className", {
            get: function () {
                return "SettingCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SettingCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SettingCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeSettingCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        SettingCollection.prototype.add = function (key, value) {
            var _a = _CC.SettingCollection_Add(this, key, value), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            return _createMethodObject(Excel.Setting, this, "Add", 0, [key, value], false, true, null, 0);
        };
        SettingCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        SettingCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.Setting, this, [key]);
        };
        SettingCollection.prototype.getItemOrNullObject = function (key) {
            return _createMethodObject(Excel.Setting, this, "GetItemOrNullObject", 1, [key], false, false, null, 4);
        };
        SettingCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Setting, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        SettingCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        SettingCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        SettingCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Setting, true, _this, childItemData, index); });
        };
        Object.defineProperty(SettingCollection.prototype, "onSettingsChanged", {
            get: function () {
                var _this = this;
                if (!this.m_settingsChanged) {
                    this.m_settingsChanged = new OfficeExtension.EventHandlers(this.context, this, "SettingsChanged", {
                        registerFunc: function (handlerCallback) {
                            return _this.context.eventRegistration.register(_CC.office10EventIdSettingsChangedEvent, "", handlerCallback);
                        },
                        unregisterFunc: function (handlerCallback) {
                            return _this.context.eventRegistration.unregister(_CC.office10EventIdSettingsChangedEvent, "", handlerCallback);
                        },
                        eventArgsTransformFunc: function (args) {
                            var newEventArgs = _CC.SettingCollection_SettingsChanged_EventArgsTransform(_this, args);
                            return OfficeExtension.Utility._createPromiseFromResult(newEventArgs);
                        }
                    });
                }
                return this.m_settingsChanged;
            },
            enumerable: true,
            configurable: true
        });
        SettingCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        SettingCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Setting, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return SettingCollection;
    }(OfficeExtension.ClientObject));
    Excel.SettingCollection = SettingCollection;
    (function (_CC) {
        function SettingCollection_Add(thisObj, key, value) {
            value = _CC._replaceDateWithStringDate(value);
            var result = _createMethodObject(Excel.Setting, thisObj, "Add", 0, [key, value], false, true, null, 0);
            return { handled: true, result: result };
        }
        _CC.SettingCollection_Add = SettingCollection_Add;
        function SettingCollection_SettingsChanged_EventArgsTransform(thisObj, args) {
            return {
                settings: thisObj
            };
        }
        _CC.SettingCollection_SettingsChanged_EventArgsTransform = SettingCollection_SettingsChanged_EventArgsTransform;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeSetting = "Setting";
    var Setting = (function (_super) {
        __extends(Setting, _super);
        function Setting() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Setting.prototype, "_className", {
            get: function () {
                return "Setting";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Setting.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["key", "value", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Setting.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Key", "Value", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Setting.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Setting.prototype, "key", {
            get: function () {
                _throwIfNotLoaded("key", this._K, _typeSetting, this._isNull);
                return this._K;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Setting.prototype, "value", {
            get: function () {
                _throwIfNotLoaded("value", this.m_value, _typeSetting, this._isNull);
                return this.m_value;
            },
            set: function (value) {
                var handled = _CC.Setting_Value_Set(this, value).handled;
                if (handled) {
                    return;
                }
                this.m_value = value;
                _invokeSetProperty(this, "Value", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Setting.prototype, "_Id", {
            get: function () {
                _throwIfNotLoaded("_Id", this.__I, _typeSetting, this._isNull);
                return this.__I;
            },
            enumerable: true,
            configurable: true
        });
        Setting.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["value"], [], []);
        };
        Setting.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Setting.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        Setting.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _CC.Setting_HandleResult(this, obj);
            if (!_isUndefined(obj["Key"])) {
                this._K = obj["Key"];
            }
            if (!_isUndefined(obj["Value"])) {
                this.m_value = obj["Value"];
            }
            if (!_isUndefined(obj["_Id"])) {
                this.__I = obj["_Id"];
            }
        };
        Setting.prototype.load = function (options) {
            return _load(this, options);
        };
        Setting.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Setting.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_Id"])) {
                this.__I = value["_Id"];
            }
        };
        Setting.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Setting.prototype.toJSON = function () {
            return _toJson(this, {
                "key": this._K,
                "value": this.m_value
            }, {});
        };
        Setting.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Setting.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Setting;
    }(OfficeExtension.ClientObject));
    Excel.Setting = Setting;
    (function (_CC) {
        var DateJSONPrefix = "Date(";
        var DateJSONSuffix = ")";
        function _replaceStringDateWithDate(value) {
            var strValue = JSON.stringify(value);
            value = JSON.parse(strValue, function dateReviver(k, v) {
                var d;
                if (typeof v === 'string' && v && v.length > 6 && v.slice(0, 5) === DateJSONPrefix && v.slice(-1) === DateJSONSuffix) {
                    d = new Date(parseInt(v.slice(5, -1)));
                    if (d) {
                        return d;
                    }
                }
                return v;
            });
            return value;
        }
        function _replaceDateWithStringDate(value) {
            var strValue = JSON.stringify(value, function dateReplacer(k, v) {
                return (this[k] instanceof Date) ? (DateJSONPrefix + this[k].getTime() + DateJSONSuffix) : v;
            });
            value = JSON.parse(strValue);
            return value;
        }
        _CC._replaceDateWithStringDate = _replaceDateWithStringDate;
        function Setting_HandleResult(thisObj, value) {
            if (!_isUndefined(value["Value"])) {
                value["Value"] = _replaceStringDateWithDate(value["Value"]);
            }
            ;
        }
        _CC.Setting_HandleResult = Setting_HandleResult;
        function Setting_Value_Set(thisObj, value) {
            if (!_isNullOrUndefined(value)) {
                thisObj.m_value = value;
                var newValue = _replaceDateWithStringDate(value);
                _invokeSetProperty(thisObj, "Value", newValue, 0);
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.Setting_Value_Set = Setting_Value_Set;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeNamedItemCollection = "NamedItemCollection";
    var NamedItemCollection = (function (_super) {
        __extends(NamedItemCollection, _super);
        function NamedItemCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(NamedItemCollection.prototype, "_className", {
            get: function () {
                return "NamedItemCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItemCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItemCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeNamedItemCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        NamedItemCollection.prototype.add = function (name, reference, comment) {
            _throwIfApiNotSupported("NamedItemCollection.add", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.NamedItem, this, "Add", 0, [name, reference, comment], false, true, null, 0);
        };
        NamedItemCollection.prototype.addFormulaLocal = function (name, formula, comment) {
            _throwIfApiNotSupported("NamedItemCollection.addFormulaLocal", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.NamedItem, this, "AddFormulaLocal", 0, [name, formula, comment], false, false, null, 0);
        };
        NamedItemCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("NamedItemCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        NamedItemCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.NamedItem, this, [name]);
        };
        NamedItemCollection.prototype.getItemOrNullObject = function (name) {
            _throwIfApiNotSupported("NamedItemCollection.getItemOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.NamedItem, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        NamedItemCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.NamedItem, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        NamedItemCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        NamedItemCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        NamedItemCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.NamedItem, true, _this, childItemData, index); });
        };
        NamedItemCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        NamedItemCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.NamedItem, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return NamedItemCollection;
    }(OfficeExtension.ClientObject));
    Excel.NamedItemCollection = NamedItemCollection;
    var _typeNamedItem = "NamedItem";
    var NamedItem = (function (_super) {
        __extends(NamedItem, _super);
        function NamedItem() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(NamedItem.prototype, "_className", {
            get: function () {
                return "NamedItem";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "type", "value", "visible", "_Id", "comment", "scope", "formula"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "Type", "Value", "Visible", "_Id", "Comment", "Scope", "Formula"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, false, false, true, false, true, false, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["worksheet", "worksheetOrNullObject", "arrayValues"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "arrayValues", {
            get: function () {
                _throwIfApiNotSupported("NamedItem.arrayValues", _defaultApiSetName, "1.7", _hostName);
                if (!this._A) {
                    this._A = _createPropertyObject(Excel.NamedItemArrayValues, this, "ArrayValues", false, 4);
                }
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "worksheet", {
            get: function () {
                _throwIfApiNotSupported("NamedItem.worksheet", _defaultApiSetName, "1.4", _hostName);
                if (!this._W) {
                    this._W = _createPropertyObject(Excel.Worksheet, this, "Worksheet", false, 4);
                }
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "worksheetOrNullObject", {
            get: function () {
                _throwIfApiNotSupported("NamedItem.worksheetOrNullObject", _defaultApiSetName, "1.4", _hostName);
                if (!this._Wo) {
                    this._Wo = _createPropertyObject(Excel.Worksheet, this, "WorksheetOrNullObject", false, 4);
                }
                return this._Wo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "comment", {
            get: function () {
                _throwIfNotLoaded("comment", this._C, _typeNamedItem, this._isNull);
                _throwIfApiNotSupported("NamedItem.comment", _defaultApiSetName, "1.4", _hostName);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Comment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "formula", {
            get: function () {
                _throwIfNotLoaded("formula", this._F, _typeNamedItem, this._isNull);
                _throwIfApiNotSupported("NamedItem.formula", _defaultApiSetName, "1.7", _hostName);
                return this._F;
            },
            set: function (value) {
                this._F = value;
                _invokeSetProperty(this, "Formula", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeNamedItem, this._isNull);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "scope", {
            get: function () {
                _throwIfNotLoaded("scope", this._S, _typeNamedItem, this._isNull);
                _throwIfApiNotSupported("NamedItem.scope", _defaultApiSetName, "1.4", _hostName);
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._T, _typeNamedItem, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "value", {
            get: function () {
                _throwIfNotLoaded("value", this._V, _typeNamedItem, this._isNull);
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._Vi, _typeNamedItem, this._isNull);
                return this._Vi;
            },
            set: function (value) {
                this._Vi = value;
                _invokeSetProperty(this, "Visible", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItem.prototype, "_Id", {
            get: function () {
                _throwIfNotLoaded("_Id", this.__I, _typeNamedItem, this._isNull);
                return this.__I;
            },
            enumerable: true,
            configurable: true
        });
        NamedItem.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["visible", "comment", "formula"], [], [
                "arrayValues",
                "worksheet",
                "worksheetOrNullObject"
            ]);
        };
        NamedItem.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        NamedItem.prototype["delete"] = function () {
            _throwIfApiNotSupported("NamedItem.delete", _defaultApiSetName, "1.4", _hostName);
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        NamedItem.prototype.getRange = function () {
            return _createMethodObject(Excel.Range, this, "GetRange", 1, [], false, true, null, 4);
        };
        NamedItem.prototype.getRangeOrNullObject = function () {
            _throwIfApiNotSupported("NamedItem.getRangeOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.Range, this, "GetRangeOrNullObject", 1, [], false, true, null, 4);
        };
        NamedItem.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Comment"])) {
                this._C = obj["Comment"];
            }
            if (!_isUndefined(obj["Formula"])) {
                this._F = obj["Formula"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Scope"])) {
                this._S = obj["Scope"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._T = obj["Type"];
            }
            if (!_isUndefined(obj["Value"])) {
                this._V = obj["Value"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._Vi = obj["Visible"];
            }
            if (!_isUndefined(obj["_Id"])) {
                this.__I = obj["_Id"];
            }
            _handleNavigationPropertyResults(this, obj, ["arrayValues", "ArrayValues", "worksheet", "Worksheet", "worksheetOrNullObject", "WorksheetOrNullObject"]);
        };
        NamedItem.prototype.load = function (options) {
            return _load(this, options);
        };
        NamedItem.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        NamedItem.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_Id"])) {
                this.__I = value["_Id"];
            }
        };
        NamedItem.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        NamedItem.prototype.toJSON = function () {
            return _toJson(this, {
                "comment": this._C,
                "formula": this._F,
                "name": this._N,
                "scope": this._S,
                "type": this._T,
                "value": this._V,
                "visible": this._Vi
            }, {
                "arrayValues": this._A
            });
        };
        NamedItem.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        NamedItem.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return NamedItem;
    }(OfficeExtension.ClientObject));
    Excel.NamedItem = NamedItem;
    var _typeNamedItemArrayValues = "NamedItemArrayValues";
    var NamedItemArrayValues = (function (_super) {
        __extends(NamedItemArrayValues, _super);
        function NamedItemArrayValues() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(NamedItemArrayValues.prototype, "_className", {
            get: function () {
                return "NamedItemArrayValues";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItemArrayValues.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["values", "types"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItemArrayValues.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Values", "Types"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItemArrayValues.prototype, "types", {
            get: function () {
                _throwIfNotLoaded("types", this._T, _typeNamedItemArrayValues, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedItemArrayValues.prototype, "values", {
            get: function () {
                _throwIfNotLoaded("values", this._V, _typeNamedItemArrayValues, this._isNull);
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        NamedItemArrayValues.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Types"])) {
                this._T = obj["Types"];
            }
            if (!_isUndefined(obj["Values"])) {
                this._V = obj["Values"];
            }
        };
        NamedItemArrayValues.prototype.load = function (options) {
            return _load(this, options);
        };
        NamedItemArrayValues.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        NamedItemArrayValues.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        NamedItemArrayValues.prototype.toJSON = function () {
            return _toJson(this, {
                "types": this._T,
                "values": this._V
            }, {});
        };
        NamedItemArrayValues.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        NamedItemArrayValues.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return NamedItemArrayValues;
    }(OfficeExtension.ClientObject));
    Excel.NamedItemArrayValues = NamedItemArrayValues;
    var _typeBinding = "Binding";
    var Binding = (function (_super) {
        __extends(Binding, _super);
        function Binding() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Binding.prototype, "_className", {
            get: function () {
                return "Binding";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Binding.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "type"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Binding.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Type"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Binding.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeBinding, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Binding.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._T, _typeBinding, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Binding.prototype["delete"] = function () {
            _throwIfApiNotSupported("Binding.delete", _defaultApiSetName, "1.3", _hostName);
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        Binding.prototype.getRange = function () {
            return _createMethodObject(Excel.Range, this, "GetRange", 1, [], false, false, null, 4);
        };
        Binding.prototype.getTable = function () {
            return _createMethodObject(Excel.Table, this, "GetTable", 1, [], false, false, null, 4);
        };
        Binding.prototype.getText = function () {
            return _invokeMethod(this, "GetText", 1, [], 4, 0);
        };
        Binding.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._T = obj["Type"];
            }
        };
        Binding.prototype.load = function (options) {
            return _load(this, options);
        };
        Binding.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Binding.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Binding.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(Binding.prototype, "onDataChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Binding.onDataChanged", _defaultApiSetName, "1.3", _hostName);
                if (!this.m_dataChanged) {
                    this.m_dataChanged = new OfficeExtension.EventHandlers(this.context, this, "DataChanged", {
                        registerFunc: function (handlerCallback) {
                            return _this.context.eventRegistration.register(_CC.office10EventIdBindingDataChangedEvent, _this.id, handlerCallback);
                        },
                        unregisterFunc: function (handlerCallback) {
                            return _this.context.eventRegistration.unregister(_CC.office10EventIdBindingDataChangedEvent, _this.id, handlerCallback);
                        },
                        eventArgsTransformFunc: function (args) {
                            var newEventArgs = _CC.Binding_DataChanged_EventArgsTransform(_this, args);
                            return OfficeExtension.Utility._createPromiseFromResult(newEventArgs);
                        }
                    });
                }
                return this.m_dataChanged;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Binding.prototype, "onSelectionChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Binding.onSelectionChanged", _defaultApiSetName, "1.3", _hostName);
                if (!this.m_selectionChanged) {
                    this.m_selectionChanged = new OfficeExtension.EventHandlers(this.context, this, "SelectionChanged", {
                        registerFunc: function (handlerCallback) {
                            return _this.context.eventRegistration.register(_CC.office10EventIdBindingSelectionChangedEvent, _this.id, handlerCallback);
                        },
                        unregisterFunc: function (handlerCallback) {
                            return _this.context.eventRegistration.unregister(_CC.office10EventIdBindingSelectionChangedEvent, _this.id, handlerCallback);
                        },
                        eventArgsTransformFunc: function (args) {
                            var newEventArgs = _CC.Binding_SelectionChanged_EventArgsTransform(_this, args);
                            return OfficeExtension.Utility._createPromiseFromResult(newEventArgs);
                        }
                    });
                }
                return this.m_selectionChanged;
            },
            enumerable: true,
            configurable: true
        });
        Binding.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I,
                "type": this._T
            }, {});
        };
        Binding.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Binding.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Binding;
    }(OfficeExtension.ClientObject));
    Excel.Binding = Binding;
    (function (_CC) {
        function Binding_DataChanged_EventArgsTransform(thisObj, args) {
            var evt = {
                binding: thisObj
            };
            return evt;
        }
        _CC.Binding_DataChanged_EventArgsTransform = Binding_DataChanged_EventArgsTransform;
        function Binding_SelectionChanged_EventArgsTransform(thisObj, args) {
            var evt = {
                binding: thisObj,
                columnCount: args.columnCount,
                rowCount: args.rowCount,
                startColumn: args.startColumn,
                startRow: args.startRow
            };
            return evt;
        }
        _CC.Binding_SelectionChanged_EventArgsTransform = Binding_SelectionChanged_EventArgsTransform;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeBindingCollection = "BindingCollection";
    var BindingCollection = (function (_super) {
        __extends(BindingCollection, _super);
        function BindingCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(BindingCollection.prototype, "_className", {
            get: function () {
                return "BindingCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(BindingCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(BindingCollection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(BindingCollection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(BindingCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeBindingCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(BindingCollection.prototype, "count", {
            get: function () {
                _throwIfNotLoaded("count", this._C, _typeBindingCollection, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        BindingCollection.prototype.add = function (range, bindingType, id) {
            _throwIfApiNotSupported("BindingCollection.add", _defaultApiSetName, "1.3", _hostName);
            return _createMethodObject(Excel.Binding, this, "Add", 0, [range, bindingType, id], false, true, null, 0);
        };
        BindingCollection.prototype.addFromNamedItem = function (name, bindingType, id) {
            _throwIfApiNotSupported("BindingCollection.addFromNamedItem", _defaultApiSetName, "1.3", _hostName);
            return _createMethodObject(Excel.Binding, this, "AddFromNamedItem", 0, [name, bindingType, id], false, false, null, 0);
        };
        BindingCollection.prototype.addFromSelection = function (bindingType, id) {
            _throwIfApiNotSupported("BindingCollection.addFromSelection", _defaultApiSetName, "1.3", _hostName);
            return _createMethodObject(Excel.Binding, this, "AddFromSelection", 0, [bindingType, id], false, false, null, 0);
        };
        BindingCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("BindingCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        BindingCollection.prototype.getItem = function (id) {
            return _createIndexerObject(Excel.Binding, this, [id]);
        };
        BindingCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.Binding, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        BindingCollection.prototype.getItemOrNullObject = function (id) {
            _throwIfApiNotSupported("BindingCollection.getItemOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.Binding, this, "GetItemOrNullObject", 1, [id], false, false, null, 4);
        };
        BindingCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Count"])) {
                this._C = obj["Count"];
            }
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Binding, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        BindingCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        BindingCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        BindingCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Binding, true, _this, childItemData, index); });
        };
        BindingCollection.prototype.toJSON = function () {
            return _toJson(this, {
                "count": this._C
            }, {}, this.m__items);
        };
        BindingCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Binding, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return BindingCollection;
    }(OfficeExtension.ClientObject));
    Excel.BindingCollection = BindingCollection;
    var _typeTableCollection = "TableCollection";
    var TableCollection = (function (_super) {
        __extends(TableCollection, _super);
        function TableCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TableCollection.prototype, "_className", {
            get: function () {
                return "TableCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableCollection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableCollection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeTableCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableCollection.prototype, "count", {
            get: function () {
                _throwIfNotLoaded("count", this._C, _typeTableCollection, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        TableCollection.prototype.add = function (address, hasHeaders) {
            return _createMethodObject(Excel.Table, this, "Add", 0, [address, hasHeaders], false, true, null, 0);
        };
        TableCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("TableCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        TableCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.Table, this, [key]);
        };
        TableCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.Table, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        TableCollection.prototype.getItemOrNullObject = function (key) {
            _throwIfApiNotSupported("TableCollection.getItemOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.Table, this, "GetItemOrNullObject", 1, [key], false, false, null, 4);
        };
        TableCollection.prototype._RegisterAddedEvent = function () {
            _throwIfApiNotSupported("TableCollection._RegisterAddedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_RegisterAddedEvent", 0, [], 0, 0);
        };
        TableCollection.prototype._RegisterDataChangedEvent = function () {
            _throwIfApiNotSupported("TableCollection._RegisterDataChangedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterDataChangedEvent", 0, [], 0, 0);
        };
        TableCollection.prototype._RegisterDeletedEvent = function () {
            _throwIfApiNotSupported("TableCollection._RegisterDeletedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_RegisterDeletedEvent", 0, [], 0, 0);
        };
        TableCollection.prototype._UnregisterAddedEvent = function () {
            _throwIfApiNotSupported("TableCollection._UnregisterAddedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_UnregisterAddedEvent", 0, [], 0, 0);
        };
        TableCollection.prototype._UnregisterDataChangedEvent = function () {
            _throwIfApiNotSupported("TableCollection._UnregisterDataChangedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterDataChangedEvent", 0, [], 0, 0);
        };
        TableCollection.prototype._UnregisterDeletedEvent = function () {
            _throwIfApiNotSupported("TableCollection._UnregisterDeletedEvent", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "_UnregisterDeletedEvent", 0, [], 0, 0);
        };
        TableCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Count"])) {
                this._C = obj["Count"];
            }
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Table, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        TableCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        TableCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TableCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Table, true, _this, childItemData, index); });
        };
        Object.defineProperty(TableCollection.prototype, "onAdded", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("TableCollection.onAdded", _defaultApiSetName, "1.9", _hostName);
                if (!this.m_added) {
                    this.m_added = new OfficeExtension.GenericEventHandlers(this.context, this, "Added", {
                        eventType: 102,
                        registerFunc: function () { return _this._RegisterAddedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterAddedEvent(); },
                        getTargetIdFunc: function () { return _this._eventTargetId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.tableAdded,
                                source: value.source,
                                tableId: value.tableId,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_added;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableCollection.prototype, "onChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("TableCollection.onChanged", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_changed) {
                    this.m_changed = new OfficeExtension.GenericEventHandlers(this.context, this, "Changed", {
                        eventType: 101,
                        registerFunc: function () { return _this._RegisterDataChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDataChangedEvent(); },
                        getTargetIdFunc: function () { return _this._eventTargetId; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.TableCollection_Changed_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_changed;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableCollection.prototype, "onDeleted", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("TableCollection.onDeleted", _defaultApiSetName, "1.9", _hostName);
                if (!this.m_deleted) {
                    this.m_deleted = new OfficeExtension.GenericEventHandlers(this.context, this, "Deleted", {
                        eventType: 103,
                        registerFunc: function () { return _this._RegisterDeletedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDeletedEvent(); },
                        getTargetIdFunc: function () { return _this._eventTargetId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.tableDeleted,
                                source: value.source,
                                tableId: value.tableId,
                                tableName: value.tableName,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_deleted;
            },
            enumerable: true,
            configurable: true
        });
        TableCollection.prototype.toJSON = function () {
            return _toJson(this, {
                "count": this._C
            }, {}, this.m__items);
        };
        TableCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Table, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return TableCollection;
    }(OfficeExtension.ClientObject));
    Excel.TableCollection = TableCollection;
    var TableCollectionCustom = (function () {
        function TableCollectionCustom() {
        }
        Object.defineProperty(TableCollectionCustom.prototype, "_ParentObject", {
            get: function () {
                return this.m__ParentObject;
            },
            set: function (value) {
                this.m__ParentObject = value;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableCollectionCustom.prototype, "_eventTargetId", {
            get: function () {
                return this._ParentObject ? this._ParentObject.id : OfficeExtension.Constants.eventWorkbookId;
            },
            enumerable: true,
            configurable: true
        });
        return TableCollectionCustom;
    }());
    Excel.TableCollectionCustom = TableCollectionCustom;
    OfficeExtension.Utility.applyMixin(TableCollection, TableCollectionCustom);
    (function (_CC) {
        function TableCollection_Changed_EventArgsTransform(thisObj, args) {
            var value = args;
            var details;
            if (value.valueBefore != null || value.valueAfter != null) {
                details = {
                    valueBefore: value.valueBefore,
                    valueAfter: value.valueAfter,
                    valueTypeBefore: value.valueTypeBefore,
                    valueTypeAfter: value.valueTypeAfter
                };
            }
            var newArgs = {
                type: Excel.EventType.tableChanged,
                changeType: value.changeType,
                source: value.source,
                worksheetId: value.worksheetId,
                tableId: value.tableId,
                address: value.address,
                getRange: function (ctx) {
                    _throwIfApiNotSupported("TableChangedEventArgs.getRange", _defaultApiSetName, "1.8", _hostName);
                    return ctx.workbook._GetRangeForEventByReferenceId(value.referenceId);
                },
                getRangeOrNullObject: function (ctx) {
                    _throwIfApiNotSupported("TableChangedEventArgs.getRangeOrNullObject", _defaultApiSetName, "1.8", _hostName);
                    return ctx.workbook._GetRangeOrNullObjectForEventByReferenceId(value.referenceId);
                },
                details: details
            };
            return newArgs;
        }
        _CC.TableCollection_Changed_EventArgsTransform = TableCollection_Changed_EventArgsTransform;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeTableScopedCollection = "TableScopedCollection";
    var TableScopedCollection = (function (_super) {
        __extends(TableScopedCollection, _super);
        function TableScopedCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TableScopedCollection.prototype, "_className", {
            get: function () {
                return "TableScopedCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableScopedCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableScopedCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeTableScopedCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        TableScopedCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        TableScopedCollection.prototype.getFirst = function () {
            return _createMethodObject(Excel.Table, this, "GetFirst", 1, [], false, true, null, 4);
        };
        TableScopedCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.Table, this, [key]);
        };
        TableScopedCollection.prototype.getItemOrNullObject = function (key) {
            _throwIfApiNotSupported("TableScopedCollection.getItemOrNullObject", _defaultApiSetName, "1.14", _hostName);
            return _createMethodObject(Excel.Table, this, "GetItemOrNullObject", 1, [key], false, false, null, 4);
        };
        TableScopedCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Table, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        TableScopedCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        TableScopedCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TableScopedCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Table, true, _this, childItemData, index); });
        };
        TableScopedCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        TableScopedCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Table, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return TableScopedCollection;
    }(OfficeExtension.ClientObject));
    Excel.TableScopedCollection = TableScopedCollection;
    var _typeTable = "Table";
    var Table = (function (_super) {
        __extends(Table, _super);
        function Table() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Table.prototype, "_className", {
            get: function () {
                return "Table";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "_collectionPropertyPath", {
            get: function () {
                return "workbook.tables";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "name", "showHeaders", "showTotals", "style", "highlightFirstColumn", "highlightLastColumn", "showBandedRows", "showBandedColumns", "showFilterButton", "legacyId"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Name", "ShowHeaders", "ShowTotals", "Style", "HighlightFirstColumn", "HighlightLastColumn", "ShowBandedRows", "ShowBandedColumns", "ShowFilterButton", "LegacyId"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true, true, true, true, true, true, true, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["columns", "rows", "sort", "worksheet", "autoFilter"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "autoFilter", {
            get: function () {
                _throwIfApiNotSupported("Table.autoFilter", _defaultApiSetName, "1.9", _hostName);
                if (!this._A) {
                    this._A = _createPropertyObject(Excel.AutoFilter, this, "AutoFilter", false, 4);
                }
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "columns", {
            get: function () {
                if (!this._C) {
                    this._C = _createPropertyObject(Excel.TableColumnCollection, this, "Columns", true, 4);
                }
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "rows", {
            get: function () {
                if (!this._R) {
                    this._R = _createPropertyObject(Excel.TableRowCollection, this, "Rows", true, 4);
                }
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "sort", {
            get: function () {
                _throwIfApiNotSupported("Table.sort", _defaultApiSetName, "1.2", _hostName);
                if (!this._So) {
                    this._So = _createPropertyObject(Excel.TableSort, this, "Sort", false, 4);
                }
                return this._So;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "worksheet", {
            get: function () {
                _throwIfApiNotSupported("Table.worksheet", _defaultApiSetName, "1.2", _hostName);
                if (!this._W) {
                    this._W = _createPropertyObject(Excel.Worksheet, this, "Worksheet", false, 4);
                }
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "highlightFirstColumn", {
            get: function () {
                _throwIfNotLoaded("highlightFirstColumn", this._H, _typeTable, this._isNull);
                _throwIfApiNotSupported("Table.highlightFirstColumn", _defaultApiSetName, "1.3", _hostName);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "HighlightFirstColumn", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "highlightLastColumn", {
            get: function () {
                _throwIfNotLoaded("highlightLastColumn", this._Hi, _typeTable, this._isNull);
                _throwIfApiNotSupported("Table.highlightLastColumn", _defaultApiSetName, "1.3", _hostName);
                return this._Hi;
            },
            set: function (value) {
                this._Hi = value;
                _invokeSetProperty(this, "HighlightLastColumn", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeTable, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "legacyId", {
            get: function () {
                _throwIfNotLoaded("legacyId", this._L, _typeTable, this._isNull);
                _throwIfApiNotSupported("Table.legacyId", _defaultApiSetName, "1.8", _hostName);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeTable, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "showBandedColumns", {
            get: function () {
                _throwIfNotLoaded("showBandedColumns", this._S, _typeTable, this._isNull);
                _throwIfApiNotSupported("Table.showBandedColumns", _defaultApiSetName, "1.3", _hostName);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowBandedColumns", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "showBandedRows", {
            get: function () {
                _throwIfNotLoaded("showBandedRows", this._Sh, _typeTable, this._isNull);
                _throwIfApiNotSupported("Table.showBandedRows", _defaultApiSetName, "1.3", _hostName);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowBandedRows", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "showFilterButton", {
            get: function () {
                _throwIfNotLoaded("showFilterButton", this._Sho, _typeTable, this._isNull);
                _throwIfApiNotSupported("Table.showFilterButton", _defaultApiSetName, "1.3", _hostName);
                return this._Sho;
            },
            set: function (value) {
                this._Sho = value;
                _invokeSetProperty(this, "ShowFilterButton", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "showHeaders", {
            get: function () {
                _throwIfNotLoaded("showHeaders", this._Show, _typeTable, this._isNull);
                return this._Show;
            },
            set: function (value) {
                this._Show = value;
                _invokeSetProperty(this, "ShowHeaders", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "showTotals", {
            get: function () {
                _throwIfNotLoaded("showTotals", this._ShowT, _typeTable, this._isNull);
                return this._ShowT;
            },
            set: function (value) {
                this._ShowT = value;
                _invokeSetProperty(this, "ShowTotals", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "style", {
            get: function () {
                _throwIfNotLoaded("style", this._St, _typeTable, this._isNull);
                return this._St;
            },
            set: function (value) {
                this._St = value;
                _invokeSetProperty(this, "Style", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Table.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "showHeaders", "showTotals", "style", "highlightFirstColumn", "highlightLastColumn", "showBandedRows", "showBandedColumns", "showFilterButton"], [], [
                "autoFilter",
                "columns",
                "rows",
                "sort",
                "worksheet"
            ]);
        };
        Table.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Table.prototype.clearFilters = function () {
            _throwIfApiNotSupported("Table.clearFilters", _defaultApiSetName, "1.2", _hostName);
            _invokeMethod(this, "ClearFilters", 0, [], 0, 0);
        };
        Table.prototype.convertToRange = function () {
            _throwIfApiNotSupported("Table.convertToRange", _defaultApiSetName, "1.2", _hostName);
            return _createMethodObject(Excel.Range, this, "ConvertToRange", 0, [], false, true, null, 0);
        };
        Table.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        Table.prototype.getDataBodyRange = function () {
            return _createMethodObject(Excel.Range, this, "GetDataBodyRange", 1, [], false, true, null, 4);
        };
        Table.prototype.getHeaderRowRange = function () {
            return _createMethodObject(Excel.Range, this, "GetHeaderRowRange", 1, [], false, true, null, 4);
        };
        Table.prototype.getRange = function () {
            return _createMethodObject(Excel.Range, this, "GetRange", 1, [], false, true, null, 4);
        };
        Table.prototype.getTotalRowRange = function () {
            return _createMethodObject(Excel.Range, this, "GetTotalRowRange", 1, [], false, true, null, 4);
        };
        Table.prototype.reapplyFilters = function () {
            _throwIfApiNotSupported("Table.reapplyFilters", _defaultApiSetName, "1.2", _hostName);
            _invokeMethod(this, "ReapplyFilters", 0, [], 0, 0);
        };
        Table.prototype.resize = function (newRange) {
            _throwIfApiNotSupported("Table.resize", _defaultApiSetName, "1.13", _hostName);
            _invokeMethod(this, "Resize", 0, [newRange], 0, 0);
        };
        Table.prototype._RegisterDataChangedEvent = function () {
            _throwIfApiNotSupported("Table._RegisterDataChangedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterDataChangedEvent", 0, [], 0, 0);
        };
        Table.prototype._RegisterSelectionChangedEvent = function () {
            _throwIfApiNotSupported("Table._RegisterSelectionChangedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterSelectionChangedEvent", 0, [], 0, 0);
        };
        Table.prototype._UnregisterDataChangedEvent = function () {
            _throwIfApiNotSupported("Table._UnregisterDataChangedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterDataChangedEvent", 0, [], 0, 0);
        };
        Table.prototype._UnregisterSelectionChangedEvent = function () {
            _throwIfApiNotSupported("Table._UnregisterSelectionChangedEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterSelectionChangedEvent", 0, [], 0, 0);
        };
        Table.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _CC.Table_HandleResult(this, obj);
            if (!_isUndefined(obj["HighlightFirstColumn"])) {
                this._H = obj["HighlightFirstColumn"];
            }
            if (!_isUndefined(obj["HighlightLastColumn"])) {
                this._Hi = obj["HighlightLastColumn"];
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["LegacyId"])) {
                this._L = obj["LegacyId"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["ShowBandedColumns"])) {
                this._S = obj["ShowBandedColumns"];
            }
            if (!_isUndefined(obj["ShowBandedRows"])) {
                this._Sh = obj["ShowBandedRows"];
            }
            if (!_isUndefined(obj["ShowFilterButton"])) {
                this._Sho = obj["ShowFilterButton"];
            }
            if (!_isUndefined(obj["ShowHeaders"])) {
                this._Show = obj["ShowHeaders"];
            }
            if (!_isUndefined(obj["ShowTotals"])) {
                this._ShowT = obj["ShowTotals"];
            }
            if (!_isUndefined(obj["Style"])) {
                this._St = obj["Style"];
            }
            _handleNavigationPropertyResults(this, obj, ["autoFilter", "AutoFilter", "columns", "Columns", "rows", "Rows", "sort", "Sort", "worksheet", "Worksheet"]);
        };
        Table.prototype.load = function (options) {
            return _load(this, options);
        };
        Table.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Table.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            _CC.Table_HandleIdResult(this, value);
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Table.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(Table.prototype, "onChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Table.onChanged", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_changed) {
                    this.m_changed = new OfficeExtension.GenericEventHandlers(this.context, this, "Changed", {
                        eventType: 101,
                        registerFunc: function () { return _this._RegisterDataChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDataChangedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.Table_Changed_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_changed;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Table.prototype, "onSelectionChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Table.onSelectionChanged", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_selectionChanged) {
                    this.m_selectionChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "SelectionChanged", {
                        eventType: 100,
                        registerFunc: function () { return _this._RegisterSelectionChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterSelectionChangedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.Table_SelectionChanged_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_selectionChanged;
            },
            enumerable: true,
            configurable: true
        });
        Table.prototype.toJSON = function () {
            return _toJson(this, {
                "highlightFirstColumn": this._H,
                "highlightLastColumn": this._Hi,
                "id": this._I,
                "legacyId": this._L,
                "name": this._N,
                "showBandedColumns": this._S,
                "showBandedRows": this._Sh,
                "showFilterButton": this._Sho,
                "showHeaders": this._Show,
                "showTotals": this._ShowT,
                "style": this._St
            }, {
                "autoFilter": this._A,
                "columns": this._C,
                "rows": this._R,
                "sort": this._So
            });
        };
        Table.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Table.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Table;
    }(OfficeExtension.ClientObject));
    Excel.Table = Table;
    (function (_CC) {
        function Table_HandleIdResult(thisObj, value) {
            if (!_isUndefined(value["Id"])) {
                value["Id"] = value["Id"].toString();
            }
        }
        _CC.Table_HandleIdResult = Table_HandleIdResult;
        function Table_HandleResult(thisObj, value) {
            if (!_isUndefined(value["Id"])) {
                value["Id"] = value["Id"].toString();
            }
        }
        _CC.Table_HandleResult = Table_HandleResult;
        function Table_Changed_EventArgsTransform(thisObj, args) {
            var value = args;
            var details;
            if (value.valueBefore != null || value.valueAfter != null) {
                details = {
                    valueBefore: value.valueBefore,
                    valueAfter: value.valueAfter,
                    valueTypeBefore: value.valueTypeBefore,
                    valueTypeAfter: value.valueTypeAfter
                };
            }
            var newArgs = {
                type: Excel.EventType.tableChanged,
                changeType: value.changeType,
                source: value.source,
                worksheetId: value.worksheetId,
                tableId: value.tableId,
                address: value.address,
                getRange: function (ctx) {
                    _throwIfApiNotSupported("TableChangedEventArgs.getRange", _defaultApiSetName, "1.8", _hostName);
                    return ctx.workbook._GetRangeForEventByReferenceId(value.referenceId);
                },
                getRangeOrNullObject: function (ctx) {
                    _throwIfApiNotSupported("TableChangedEventArgs.getRangeOrNullObject", _defaultApiSetName, "1.8", _hostName);
                    return ctx.workbook._GetRangeOrNullObjectForEventByReferenceId(value.referenceId);
                },
                details: details
            };
            return newArgs;
        }
        _CC.Table_Changed_EventArgsTransform = Table_Changed_EventArgsTransform;
        function Table_SelectionChanged_EventArgsTransform(thisObj, args) {
            var value = args;
            var isAddressNullOrEmpty = (!value.address || value.address.length === 0);
            var newArgs = {
                type: Excel.EventType.tableSelectionChanged,
                isInsideTable: !isAddressNullOrEmpty,
                worksheetId: value.worksheetId,
                tableId: thisObj.id,
                address: value.address
            };
            return newArgs;
        }
        _CC.Table_SelectionChanged_EventArgsTransform = Table_SelectionChanged_EventArgsTransform;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeTableColumnCollection = "TableColumnCollection";
    var TableColumnCollection = (function (_super) {
        __extends(TableColumnCollection, _super);
        function TableColumnCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TableColumnCollection.prototype, "_className", {
            get: function () {
                return "TableColumnCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumnCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumnCollection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumnCollection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumnCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeTableColumnCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumnCollection.prototype, "count", {
            get: function () {
                _throwIfNotLoaded("count", this._C, _typeTableColumnCollection, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        TableColumnCollection.prototype.add = function (index, values, name) {
            return _createMethodObject(Excel.TableColumn, this, "Add", 0, [index, values, name], false, true, null, 0);
        };
        TableColumnCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("TableColumnCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        TableColumnCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.TableColumn, this, [key]);
        };
        TableColumnCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.TableColumn, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        TableColumnCollection.prototype.getItemOrNullObject = function (key) {
            _throwIfApiNotSupported("TableColumnCollection.getItemOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.TableColumn, this, "GetItemOrNullObject", 1, [key], false, false, null, 4);
        };
        TableColumnCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Count"])) {
                this._C = obj["Count"];
            }
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.TableColumn, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        TableColumnCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        TableColumnCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TableColumnCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.TableColumn, true, _this, childItemData, index); });
        };
        TableColumnCollection.prototype.toJSON = function () {
            return _toJson(this, {
                "count": this._C
            }, {}, this.m__items);
        };
        TableColumnCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.TableColumn, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return TableColumnCollection;
    }(OfficeExtension.ClientObject));
    Excel.TableColumnCollection = TableColumnCollection;
    var _typeTableColumn = "TableColumn";
    var TableColumn = (function (_super) {
        __extends(TableColumn, _super);
        function TableColumn() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TableColumn.prototype, "_className", {
            get: function () {
                return "TableColumn";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumn.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "index", "values", "name"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumn.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Index", "Values", "Name"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumn.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, false, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumn.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["filter"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumn.prototype, "filter", {
            get: function () {
                _throwIfApiNotSupported("TableColumn.filter", _defaultApiSetName, "1.2", _hostName);
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.Filter, this, "Filter", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumn.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeTableColumn, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumn.prototype, "index", {
            get: function () {
                _throwIfNotLoaded("index", this._In, _typeTableColumn, this._isNull);
                return this._In;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumn.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeTableColumn, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableColumn.prototype, "values", {
            get: function () {
                _throwIfNotLoaded("values", this._V, _typeTableColumn, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Values", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        TableColumn.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["values", "name"], [], [
                "filter"
            ]);
        };
        TableColumn.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        TableColumn.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        TableColumn.prototype.getDataBodyRange = function () {
            return _createMethodObject(Excel.Range, this, "GetDataBodyRange", 1, [], false, true, null, 4);
        };
        TableColumn.prototype.getHeaderRowRange = function () {
            return _createMethodObject(Excel.Range, this, "GetHeaderRowRange", 1, [], false, true, null, 4);
        };
        TableColumn.prototype.getRange = function () {
            return _createMethodObject(Excel.Range, this, "GetRange", 1, [], false, true, null, 4);
        };
        TableColumn.prototype.getTotalRowRange = function () {
            return _createMethodObject(Excel.Range, this, "GetTotalRowRange", 1, [], false, true, null, 4);
        };
        TableColumn.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Index"])) {
                this._In = obj["Index"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Values"])) {
                this._V = obj["Values"];
            }
            _handleNavigationPropertyResults(this, obj, ["filter", "Filter"]);
        };
        TableColumn.prototype.load = function (options) {
            return _load(this, options);
        };
        TableColumn.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TableColumn.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        TableColumn.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        TableColumn.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I,
                "index": this._In,
                "name": this._N,
                "values": this._V
            }, {
                "filter": this._F
            });
        };
        TableColumn.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        TableColumn.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return TableColumn;
    }(OfficeExtension.ClientObject));
    Excel.TableColumn = TableColumn;
    var _typeTableRowCollection = "TableRowCollection";
    var TableRowCollection = (function (_super) {
        __extends(TableRowCollection, _super);
        function TableRowCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TableRowCollection.prototype, "_className", {
            get: function () {
                return "TableRowCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableRowCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableRowCollection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableRowCollection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableRowCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeTableRowCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableRowCollection.prototype, "count", {
            get: function () {
                _throwIfNotLoaded("count", this._C, _typeTableRowCollection, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        TableRowCollection.prototype.add = function (index, values, alwaysInsert) {
            return _createMethodObject(Excel.TableRow, this, "Add", 0, [index, values, alwaysInsert], false, true, null, _calculateApiFlags(2, "ExcelApiUndo", "99.0"));
        };
        TableRowCollection.prototype.deleteRows = function (rows) {
            _throwIfApiNotSupported("TableRowCollection.deleteRows", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "DeleteRows", 0, [rows], 0, 0);
        };
        TableRowCollection.prototype.deleteRowsAt = function (index, count) {
            _throwIfApiNotSupported("TableRowCollection.deleteRowsAt", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "DeleteRowsAt", 0, [index, count], 0, 0);
        };
        TableRowCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("TableRowCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        TableRowCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.TableRow, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        TableRowCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Count"])) {
                this._C = obj["Count"];
            }
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.TableRow, false, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        TableRowCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        TableRowCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TableRowCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.TableRow, false, _this, childItemData, index); });
        };
        TableRowCollection.prototype.toJSON = function () {
            return _toJson(this, {
                "count": this._C
            }, {}, this.m__items);
        };
        TableRowCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.TableRow, false, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return TableRowCollection;
    }(OfficeExtension.ClientObject));
    Excel.TableRowCollection = TableRowCollection;
    var _typeTableRow = "TableRow";
    var TableRow = (function (_super) {
        __extends(TableRow, _super);
        function TableRow() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TableRow.prototype, "_className", {
            get: function () {
                return "TableRow";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableRow.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["index", "values"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableRow.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Index", "Values"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableRow.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableRow.prototype, "index", {
            get: function () {
                _throwIfNotLoaded("index", this._I, _typeTableRow, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableRow.prototype, "values", {
            get: function () {
                _throwIfNotLoaded("values", this._V, _typeTableRow, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Values", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        TableRow.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["values"], [], []);
        };
        TableRow.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        TableRow.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        TableRow.prototype.getRange = function () {
            return _createMethodObject(Excel.Range, this, "GetRange", 1, [], false, true, null, 4);
        };
        TableRow.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Index"])) {
                this._I = obj["Index"];
            }
            if (!_isUndefined(obj["Values"])) {
                this._V = obj["Values"];
            }
        };
        TableRow.prototype.load = function (options) {
            return _load(this, options);
        };
        TableRow.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TableRow.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        TableRow.prototype.toJSON = function () {
            return _toJson(this, {
                "index": this._I,
                "values": this._V
            }, {});
        };
        TableRow.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        TableRow.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return TableRow;
    }(OfficeExtension.ClientObject));
    Excel.TableRow = TableRow;
    var _typeDataValidation = "DataValidation";
    var DataValidation = (function (_super) {
        __extends(DataValidation, _super);
        function DataValidation() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(DataValidation.prototype, "_className", {
            get: function () {
                return "DataValidation";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataValidation.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["type", "rule", "prompt", "errorAlert", "ignoreBlanks", "valid"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataValidation.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Type", "Rule", "Prompt", "ErrorAlert", "IgnoreBlanks", "Valid"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataValidation.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true, true, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataValidation.prototype, "errorAlert", {
            get: function () {
                _throwIfNotLoaded("errorAlert", this._E, _typeDataValidation, this._isNull);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "ErrorAlert", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataValidation.prototype, "ignoreBlanks", {
            get: function () {
                _throwIfNotLoaded("ignoreBlanks", this._I, _typeDataValidation, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "IgnoreBlanks", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataValidation.prototype, "prompt", {
            get: function () {
                _throwIfNotLoaded("prompt", this._P, _typeDataValidation, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Prompt", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataValidation.prototype, "rule", {
            get: function () {
                _throwIfNotLoaded("rule", this._R, _typeDataValidation, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "Rule", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataValidation.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._T, _typeDataValidation, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataValidation.prototype, "valid", {
            get: function () {
                _throwIfNotLoaded("valid", this._V, _typeDataValidation, this._isNull);
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        DataValidation.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["rule", "prompt", "errorAlert", "ignoreBlanks"], [], []);
        };
        DataValidation.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        DataValidation.prototype.clear = function () {
            _invokeMethod(this, "Clear", 0, [], 0, 0);
        };
        DataValidation.prototype.getInvalidCells = function () {
            _throwIfApiNotSupported("DataValidation.getInvalidCells", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "GetInvalidCells", 1, [], false, true, null, 4);
        };
        DataValidation.prototype.getInvalidCellsOrNullObject = function () {
            _throwIfApiNotSupported("DataValidation.getInvalidCellsOrNullObject", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "GetInvalidCellsOrNullObject", 1, [], false, true, null, 4);
        };
        DataValidation.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["ErrorAlert"])) {
                this._E = obj["ErrorAlert"];
            }
            if (!_isUndefined(obj["IgnoreBlanks"])) {
                this._I = obj["IgnoreBlanks"];
            }
            if (!_isUndefined(obj["Prompt"])) {
                this._P = obj["Prompt"];
            }
            if (!_isUndefined(obj["Rule"])) {
                this._R = obj["Rule"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._T = obj["Type"];
            }
            if (!_isUndefined(obj["Valid"])) {
                this._V = obj["Valid"];
            }
        };
        DataValidation.prototype.load = function (options) {
            return _load(this, options);
        };
        DataValidation.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        DataValidation.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        DataValidation.prototype.toJSON = function () {
            return _toJson(this, {
                "errorAlert": this._E,
                "ignoreBlanks": this._I,
                "prompt": this._P,
                "rule": this._R,
                "type": this._T,
                "valid": this._V
            }, {});
        };
        DataValidation.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        DataValidation.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return DataValidation;
    }(OfficeExtension.ClientObject));
    Excel.DataValidation = DataValidation;
    var _typeRemoveDuplicatesResult = "RemoveDuplicatesResult";
    var RemoveDuplicatesResult = (function (_super) {
        __extends(RemoveDuplicatesResult, _super);
        function RemoveDuplicatesResult() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RemoveDuplicatesResult.prototype, "_className", {
            get: function () {
                return "RemoveDuplicatesResult";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RemoveDuplicatesResult.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["removed", "uniqueRemaining"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RemoveDuplicatesResult.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Removed", "UniqueRemaining"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RemoveDuplicatesResult.prototype, "removed", {
            get: function () {
                _throwIfNotLoaded("removed", this._R, _typeRemoveDuplicatesResult, this._isNull);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RemoveDuplicatesResult.prototype, "uniqueRemaining", {
            get: function () {
                _throwIfNotLoaded("uniqueRemaining", this._U, _typeRemoveDuplicatesResult, this._isNull);
                return this._U;
            },
            enumerable: true,
            configurable: true
        });
        RemoveDuplicatesResult.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Removed"])) {
                this._R = obj["Removed"];
            }
            if (!_isUndefined(obj["UniqueRemaining"])) {
                this._U = obj["UniqueRemaining"];
            }
        };
        RemoveDuplicatesResult.prototype.load = function (options) {
            return _load(this, options);
        };
        RemoveDuplicatesResult.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RemoveDuplicatesResult.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RemoveDuplicatesResult.prototype.toJSON = function () {
            return _toJson(this, {
                "removed": this._R,
                "uniqueRemaining": this._U
            }, {});
        };
        RemoveDuplicatesResult.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RemoveDuplicatesResult.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RemoveDuplicatesResult;
    }(OfficeExtension.ClientObject));
    Excel.RemoveDuplicatesResult = RemoveDuplicatesResult;
    var _typeRangeFormat = "RangeFormat";
    var RangeFormat = (function (_super) {
        __extends(RangeFormat, _super);
        function RangeFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeFormat.prototype, "_className", {
            get: function () {
                return "RangeFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["wrapText", "horizontalAlignment", "verticalAlignment", "columnWidth", "rowHeight", "textOrientation", "useStandardHeight", "useStandardWidth", "readingOrder", "shrinkToFit", "indentLevel", "autoIndent"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["WrapText", "HorizontalAlignment", "VerticalAlignment", "ColumnWidth", "RowHeight", "TextOrientation", "UseStandardHeight", "UseStandardWidth", "ReadingOrder", "ShrinkToFit", "IndentLevel", "AutoIndent"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["fill", "font", "borders", "protection"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "borders", {
            get: function () {
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.RangeBorderCollection, this, "Borders", true, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.RangeFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.RangeFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "protection", {
            get: function () {
                _throwIfApiNotSupported("RangeFormat.protection", _defaultApiSetName, "1.2", _hostName);
                if (!this._P) {
                    this._P = _createPropertyObject(Excel.FormatProtection, this, "Protection", false, 4);
                }
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "autoIndent", {
            get: function () {
                _throwIfNotLoaded("autoIndent", this._A, _typeRangeFormat, this._isNull);
                _throwIfApiNotSupported("RangeFormat.autoIndent", _defaultApiSetName, "1.9", _hostName);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AutoIndent", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "columnWidth", {
            get: function () {
                _throwIfNotLoaded("columnWidth", this._C, _typeRangeFormat, this._isNull);
                _throwIfApiNotSupported("RangeFormat.columnWidth", _defaultApiSetName, "1.2", _hostName);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "ColumnWidth", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "horizontalAlignment", {
            get: function () {
                _throwIfNotLoaded("horizontalAlignment", this._H, _typeRangeFormat, this._isNull);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "HorizontalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "indentLevel", {
            get: function () {
                _throwIfNotLoaded("indentLevel", this._I, _typeRangeFormat, this._isNull);
                _throwIfApiNotSupported("RangeFormat.indentLevel", _defaultApiSetName, "1.9", _hostName);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "IndentLevel", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "readingOrder", {
            get: function () {
                _throwIfNotLoaded("readingOrder", this._R, _typeRangeFormat, this._isNull);
                _throwIfApiNotSupported("RangeFormat.readingOrder", _defaultApiSetName, "1.9", _hostName);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "ReadingOrder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "rowHeight", {
            get: function () {
                _throwIfNotLoaded("rowHeight", this._Ro, _typeRangeFormat, this._isNull);
                _throwIfApiNotSupported("RangeFormat.rowHeight", _defaultApiSetName, "1.2", _hostName);
                return this._Ro;
            },
            set: function (value) {
                this._Ro = value;
                _invokeSetProperty(this, "RowHeight", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "shrinkToFit", {
            get: function () {
                _throwIfNotLoaded("shrinkToFit", this._S, _typeRangeFormat, this._isNull);
                _throwIfApiNotSupported("RangeFormat.shrinkToFit", _defaultApiSetName, "1.9", _hostName);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShrinkToFit", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "textOrientation", {
            get: function () {
                _throwIfNotLoaded("textOrientation", this._T, _typeRangeFormat, this._isNull);
                _throwIfApiNotSupported("RangeFormat.textOrientation", _defaultApiSetName, "1.7", _hostName);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "TextOrientation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "useStandardHeight", {
            get: function () {
                _throwIfNotLoaded("useStandardHeight", this._U, _typeRangeFormat, this._isNull);
                _throwIfApiNotSupported("RangeFormat.useStandardHeight", _defaultApiSetName, "1.7", _hostName);
                return this._U;
            },
            set: function (value) {
                this._U = value;
                _invokeSetProperty(this, "UseStandardHeight", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "useStandardWidth", {
            get: function () {
                _throwIfNotLoaded("useStandardWidth", this._Us, _typeRangeFormat, this._isNull);
                _throwIfApiNotSupported("RangeFormat.useStandardWidth", _defaultApiSetName, "1.7", _hostName);
                return this._Us;
            },
            set: function (value) {
                this._Us = value;
                _invokeSetProperty(this, "UseStandardWidth", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "verticalAlignment", {
            get: function () {
                _throwIfNotLoaded("verticalAlignment", this._V, _typeRangeFormat, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "VerticalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFormat.prototype, "wrapText", {
            get: function () {
                _throwIfNotLoaded("wrapText", this._W, _typeRangeFormat, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "WrapText", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        RangeFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["wrapText", "horizontalAlignment", "verticalAlignment", "columnWidth", "rowHeight", "textOrientation", "useStandardHeight", "useStandardWidth", "readingOrder", "shrinkToFit", "indentLevel", "autoIndent"], ["fill", "font", "protection"], [
                "borders"
            ]);
        };
        RangeFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        RangeFormat.prototype.adjustIndent = function (amount) {
            _throwIfApiNotSupported("RangeFormat.adjustIndent", _defaultApiSetName, "1.11", _hostName);
            _invokeMethod(this, "AdjustIndent", 0, [amount], 0, 0);
        };
        RangeFormat.prototype.autofitColumns = function () {
            _throwIfApiNotSupported("RangeFormat.autofitColumns", _defaultApiSetName, "1.2", _hostName);
            _invokeMethod(this, "AutofitColumns", 0, [], 0, 0);
        };
        RangeFormat.prototype.autofitRows = function () {
            _throwIfApiNotSupported("RangeFormat.autofitRows", _defaultApiSetName, "1.2", _hostName);
            _invokeMethod(this, "AutofitRows", 0, [], 0, 0);
        };
        RangeFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AutoIndent"])) {
                this._A = obj["AutoIndent"];
            }
            if (!_isUndefined(obj["ColumnWidth"])) {
                this._C = obj["ColumnWidth"];
            }
            if (!_isUndefined(obj["HorizontalAlignment"])) {
                this._H = obj["HorizontalAlignment"];
            }
            if (!_isUndefined(obj["IndentLevel"])) {
                this._I = obj["IndentLevel"];
            }
            if (!_isUndefined(obj["ReadingOrder"])) {
                this._R = obj["ReadingOrder"];
            }
            if (!_isUndefined(obj["RowHeight"])) {
                this._Ro = obj["RowHeight"];
            }
            if (!_isUndefined(obj["ShrinkToFit"])) {
                this._S = obj["ShrinkToFit"];
            }
            if (!_isUndefined(obj["TextOrientation"])) {
                this._T = obj["TextOrientation"];
            }
            if (!_isUndefined(obj["UseStandardHeight"])) {
                this._U = obj["UseStandardHeight"];
            }
            if (!_isUndefined(obj["UseStandardWidth"])) {
                this._Us = obj["UseStandardWidth"];
            }
            if (!_isUndefined(obj["VerticalAlignment"])) {
                this._V = obj["VerticalAlignment"];
            }
            if (!_isUndefined(obj["WrapText"])) {
                this._W = obj["WrapText"];
            }
            _handleNavigationPropertyResults(this, obj, ["borders", "Borders", "fill", "Fill", "font", "Font", "protection", "Protection"]);
        };
        RangeFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        RangeFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RangeFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RangeFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "autoIndent": this._A,
                "columnWidth": this._C,
                "horizontalAlignment": this._H,
                "indentLevel": this._I,
                "readingOrder": this._R,
                "rowHeight": this._Ro,
                "shrinkToFit": this._S,
                "textOrientation": this._T,
                "useStandardHeight": this._U,
                "useStandardWidth": this._Us,
                "verticalAlignment": this._V,
                "wrapText": this._W
            }, {
                "borders": this._B,
                "fill": this._F,
                "font": this._Fo,
                "protection": this._P
            });
        };
        RangeFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RangeFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RangeFormat;
    }(OfficeExtension.ClientObject));
    Excel.RangeFormat = RangeFormat;
    var _typeFormatProtection = "FormatProtection";
    var FormatProtection = (function (_super) {
        __extends(FormatProtection, _super);
        function FormatProtection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(FormatProtection.prototype, "_className", {
            get: function () {
                return "FormatProtection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FormatProtection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["locked", "formulaHidden"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FormatProtection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Locked", "FormulaHidden"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FormatProtection.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FormatProtection.prototype, "formulaHidden", {
            get: function () {
                _throwIfNotLoaded("formulaHidden", this._F, _typeFormatProtection, this._isNull);
                return this._F;
            },
            set: function (value) {
                this._F = value;
                _invokeSetProperty(this, "FormulaHidden", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FormatProtection.prototype, "locked", {
            get: function () {
                _throwIfNotLoaded("locked", this._L, _typeFormatProtection, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "Locked", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        FormatProtection.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["locked", "formulaHidden"], [], []);
        };
        FormatProtection.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        FormatProtection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["FormulaHidden"])) {
                this._F = obj["FormulaHidden"];
            }
            if (!_isUndefined(obj["Locked"])) {
                this._L = obj["Locked"];
            }
        };
        FormatProtection.prototype.load = function (options) {
            return _load(this, options);
        };
        FormatProtection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        FormatProtection.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        FormatProtection.prototype.toJSON = function () {
            return _toJson(this, {
                "formulaHidden": this._F,
                "locked": this._L
            }, {});
        };
        FormatProtection.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        FormatProtection.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return FormatProtection;
    }(OfficeExtension.ClientObject));
    Excel.FormatProtection = FormatProtection;
    var _typeRangeFill = "RangeFill";
    var RangeFill = (function (_super) {
        __extends(RangeFill, _super);
        function RangeFill() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeFill.prototype, "_className", {
            get: function () {
                return "RangeFill";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFill.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["color", "tintAndShade", "patternTintAndShade", "pattern", "patternColor"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFill.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Color", "TintAndShade", "PatternTintAndShade", "Pattern", "PatternColor"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFill.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFill.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeRangeFill, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFill.prototype, "pattern", {
            get: function () {
                _throwIfNotLoaded("pattern", this._P, _typeRangeFill, this._isNull);
                _throwIfApiNotSupported("RangeFill.pattern", _defaultApiSetName, "1.9", _hostName);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Pattern", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFill.prototype, "patternColor", {
            get: function () {
                _throwIfNotLoaded("patternColor", this._Pa, _typeRangeFill, this._isNull);
                _throwIfApiNotSupported("RangeFill.patternColor", _defaultApiSetName, "1.9", _hostName);
                return this._Pa;
            },
            set: function (value) {
                this._Pa = value;
                _invokeSetProperty(this, "PatternColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFill.prototype, "patternTintAndShade", {
            get: function () {
                _throwIfNotLoaded("patternTintAndShade", this._Pat, _typeRangeFill, this._isNull);
                _throwIfApiNotSupported("RangeFill.patternTintAndShade", _defaultApiSetName, "1.9", _hostName);
                return this._Pat;
            },
            set: function (value) {
                this._Pat = value;
                _invokeSetProperty(this, "PatternTintAndShade", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFill.prototype, "tintAndShade", {
            get: function () {
                _throwIfNotLoaded("tintAndShade", this._T, _typeRangeFill, this._isNull);
                _throwIfApiNotSupported("RangeFill.tintAndShade", _defaultApiSetName, "1.9", _hostName);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "TintAndShade", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        RangeFill.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["color", "tintAndShade", "patternTintAndShade", "pattern", "patternColor"], [], []);
        };
        RangeFill.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        RangeFill.prototype.clear = function () {
            _invokeMethod(this, "Clear", 0, [], 0, 0);
        };
        RangeFill.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
            if (!_isUndefined(obj["Pattern"])) {
                this._P = obj["Pattern"];
            }
            if (!_isUndefined(obj["PatternColor"])) {
                this._Pa = obj["PatternColor"];
            }
            if (!_isUndefined(obj["PatternTintAndShade"])) {
                this._Pat = obj["PatternTintAndShade"];
            }
            if (!_isUndefined(obj["TintAndShade"])) {
                this._T = obj["TintAndShade"];
            }
        };
        RangeFill.prototype.load = function (options) {
            return _load(this, options);
        };
        RangeFill.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RangeFill.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RangeFill.prototype.toJSON = function () {
            return _toJson(this, {
                "color": this._C,
                "pattern": this._P,
                "patternColor": this._Pa,
                "patternTintAndShade": this._Pat,
                "tintAndShade": this._T
            }, {});
        };
        RangeFill.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RangeFill.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RangeFill;
    }(OfficeExtension.ClientObject));
    Excel.RangeFill = RangeFill;
    var _typeRangeBorder = "RangeBorder";
    var RangeBorder = (function (_super) {
        __extends(RangeBorder, _super);
        function RangeBorder() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeBorder.prototype, "_className", {
            get: function () {
                return "RangeBorder";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorder.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["sideIndex", "style", "weight", "color", "tintAndShade"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorder.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["SideIndex", "Style", "Weight", "Color", "TintAndShade"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorder.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorder.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeRangeBorder, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorder.prototype, "sideIndex", {
            get: function () {
                _throwIfNotLoaded("sideIndex", this._S, _typeRangeBorder, this._isNull);
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorder.prototype, "style", {
            get: function () {
                _throwIfNotLoaded("style", this._St, _typeRangeBorder, this._isNull);
                return this._St;
            },
            set: function (value) {
                this._St = value;
                _invokeSetProperty(this, "Style", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorder.prototype, "tintAndShade", {
            get: function () {
                _throwIfNotLoaded("tintAndShade", this._T, _typeRangeBorder, this._isNull);
                _throwIfApiNotSupported("RangeBorder.tintAndShade", _defaultApiSetName, "1.9", _hostName);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "TintAndShade", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorder.prototype, "weight", {
            get: function () {
                _throwIfNotLoaded("weight", this._W, _typeRangeBorder, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "Weight", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        RangeBorder.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["style", "weight", "color", "tintAndShade"], [], []);
        };
        RangeBorder.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        RangeBorder.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
            if (!_isUndefined(obj["SideIndex"])) {
                this._S = obj["SideIndex"];
            }
            if (!_isUndefined(obj["Style"])) {
                this._St = obj["Style"];
            }
            if (!_isUndefined(obj["TintAndShade"])) {
                this._T = obj["TintAndShade"];
            }
            if (!_isUndefined(obj["Weight"])) {
                this._W = obj["Weight"];
            }
        };
        RangeBorder.prototype.load = function (options) {
            return _load(this, options);
        };
        RangeBorder.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RangeBorder.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RangeBorder.prototype.toJSON = function () {
            return _toJson(this, {
                "color": this._C,
                "sideIndex": this._S,
                "style": this._St,
                "tintAndShade": this._T,
                "weight": this._W
            }, {});
        };
        RangeBorder.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RangeBorder.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RangeBorder;
    }(OfficeExtension.ClientObject));
    Excel.RangeBorder = RangeBorder;
    var _typeRangeBorderCollection = "RangeBorderCollection";
    var RangeBorderCollection = (function (_super) {
        __extends(RangeBorderCollection, _super);
        function RangeBorderCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeBorderCollection.prototype, "_className", {
            get: function () {
                return "RangeBorderCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorderCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorderCollection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["count", "tintAndShade"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorderCollection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Count", "TintAndShade"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorderCollection.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorderCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeRangeBorderCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorderCollection.prototype, "count", {
            get: function () {
                _throwIfNotLoaded("count", this._C, _typeRangeBorderCollection, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeBorderCollection.prototype, "tintAndShade", {
            get: function () {
                _throwIfNotLoaded("tintAndShade", this._T, _typeRangeBorderCollection, this._isNull);
                _throwIfApiNotSupported("RangeBorderCollection.tintAndShade", _defaultApiSetName, "1.9", _hostName);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "TintAndShade", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        RangeBorderCollection.prototype.getItem = function (index) {
            return _createIndexerObject(Excel.RangeBorder, this, [index]);
        };
        RangeBorderCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.RangeBorder, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        RangeBorderCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Count"])) {
                this._C = obj["Count"];
            }
            if (!_isUndefined(obj["TintAndShade"])) {
                this._T = obj["TintAndShade"];
            }
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.RangeBorder, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        RangeBorderCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        RangeBorderCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RangeBorderCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.RangeBorder, true, _this, childItemData, index); });
        };
        RangeBorderCollection.prototype.toJSON = function () {
            return _toJson(this, {
                "count": this._C,
                "tintAndShade": this._T
            }, {}, this.m__items);
        };
        RangeBorderCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.RangeBorder, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return RangeBorderCollection;
    }(OfficeExtension.ClientObject));
    Excel.RangeBorderCollection = RangeBorderCollection;
    var _typeRangeFont = "RangeFont";
    var RangeFont = (function (_super) {
        __extends(RangeFont, _super);
        function RangeFont() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeFont.prototype, "_className", {
            get: function () {
                return "RangeFont";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "size", "color", "italic", "bold", "underline", "strikethrough", "subscript", "superscript", "tintAndShade"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "Size", "Color", "Italic", "Bold", "Underline", "Strikethrough", "Subscript", "Superscript", "TintAndShade"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "bold", {
            get: function () {
                _throwIfNotLoaded("bold", this._B, _typeRangeFont, this._isNull);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "Bold", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeRangeFont, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "italic", {
            get: function () {
                _throwIfNotLoaded("italic", this._I, _typeRangeFont, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "Italic", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeRangeFont, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "size", {
            get: function () {
                _throwIfNotLoaded("size", this._S, _typeRangeFont, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Size", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "strikethrough", {
            get: function () {
                _throwIfNotLoaded("strikethrough", this._St, _typeRangeFont, this._isNull);
                _throwIfApiNotSupported("RangeFont.strikethrough", _defaultApiSetName, "1.9", _hostName);
                return this._St;
            },
            set: function (value) {
                this._St = value;
                _invokeSetProperty(this, "Strikethrough", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "subscript", {
            get: function () {
                _throwIfNotLoaded("subscript", this._Su, _typeRangeFont, this._isNull);
                _throwIfApiNotSupported("RangeFont.subscript", _defaultApiSetName, "1.9", _hostName);
                return this._Su;
            },
            set: function (value) {
                this._Su = value;
                _invokeSetProperty(this, "Subscript", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "superscript", {
            get: function () {
                _throwIfNotLoaded("superscript", this._Sup, _typeRangeFont, this._isNull);
                _throwIfApiNotSupported("RangeFont.superscript", _defaultApiSetName, "1.9", _hostName);
                return this._Sup;
            },
            set: function (value) {
                this._Sup = value;
                _invokeSetProperty(this, "Superscript", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "tintAndShade", {
            get: function () {
                _throwIfNotLoaded("tintAndShade", this._T, _typeRangeFont, this._isNull);
                _throwIfApiNotSupported("RangeFont.tintAndShade", _defaultApiSetName, "1.9", _hostName);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "TintAndShade", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeFont.prototype, "underline", {
            get: function () {
                _throwIfNotLoaded("underline", this._U, _typeRangeFont, this._isNull);
                return this._U;
            },
            set: function (value) {
                this._U = value;
                _invokeSetProperty(this, "Underline", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        RangeFont.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "size", "color", "italic", "bold", "underline", "strikethrough", "subscript", "superscript", "tintAndShade"], [], []);
        };
        RangeFont.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        RangeFont.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Bold"])) {
                this._B = obj["Bold"];
            }
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
            if (!_isUndefined(obj["Italic"])) {
                this._I = obj["Italic"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Size"])) {
                this._S = obj["Size"];
            }
            if (!_isUndefined(obj["Strikethrough"])) {
                this._St = obj["Strikethrough"];
            }
            if (!_isUndefined(obj["Subscript"])) {
                this._Su = obj["Subscript"];
            }
            if (!_isUndefined(obj["Superscript"])) {
                this._Sup = obj["Superscript"];
            }
            if (!_isUndefined(obj["TintAndShade"])) {
                this._T = obj["TintAndShade"];
            }
            if (!_isUndefined(obj["Underline"])) {
                this._U = obj["Underline"];
            }
        };
        RangeFont.prototype.load = function (options) {
            return _load(this, options);
        };
        RangeFont.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RangeFont.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RangeFont.prototype.toJSON = function () {
            return _toJson(this, {
                "bold": this._B,
                "color": this._C,
                "italic": this._I,
                "name": this._N,
                "size": this._S,
                "strikethrough": this._St,
                "subscript": this._Su,
                "superscript": this._Sup,
                "tintAndShade": this._T,
                "underline": this._U
            }, {});
        };
        RangeFont.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RangeFont.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RangeFont;
    }(OfficeExtension.ClientObject));
    Excel.RangeFont = RangeFont;
    var _typeChartCollection = "ChartCollection";
    var ChartCollection = (function (_super) {
        __extends(ChartCollection, _super);
        function ChartCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartCollection.prototype, "_className", {
            get: function () {
                return "ChartCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartCollection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartCollection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeChartCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartCollection.prototype, "count", {
            get: function () {
                _throwIfNotLoaded("count", this._C, _typeChartCollection, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        ChartCollection.prototype.add = function (type, sourceData, seriesBy) {
            var _a = _CC.ChartCollection_Add(this, type, sourceData, seriesBy), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            return _createMethodObject(Excel.Chart, this, "Add", 0, [type, sourceData, seriesBy], false, true, null, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
        };
        ChartCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("ChartCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        ChartCollection.prototype.getItem = function (name) {
            return _createMethodObject(Excel.Chart, this, "GetItem", 1, [name], false, false, null, 4);
        };
        ChartCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.Chart, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        ChartCollection.prototype.getItemOrNullObject = function (name) {
            _throwIfApiNotSupported("ChartCollection.getItemOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.Chart, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        ChartCollection.prototype._GetItem = function (key) {
            return _createIndexerObject(Excel.Chart, this, [key]);
        };
        ChartCollection.prototype._RegisterActivatedEvent = function () {
            _throwIfApiNotSupported("ChartCollection._RegisterActivatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_RegisterActivatedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        ChartCollection.prototype._RegisterAddedEvent = function () {
            _throwIfApiNotSupported("ChartCollection._RegisterAddedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_RegisterAddedEvent", 0, [], 0, 0);
        };
        ChartCollection.prototype._RegisterDeactivatedEvent = function () {
            _throwIfApiNotSupported("ChartCollection._RegisterDeactivatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_RegisterDeactivatedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        ChartCollection.prototype._RegisterDeletedEvent = function () {
            _throwIfApiNotSupported("ChartCollection._RegisterDeletedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_RegisterDeletedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        ChartCollection.prototype._UnregisterActivatedEvent = function () {
            _throwIfApiNotSupported("ChartCollection._UnregisterActivatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_UnregisterActivatedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        ChartCollection.prototype._UnregisterAddedEvent = function () {
            _throwIfApiNotSupported("ChartCollection._UnregisterAddedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_UnregisterAddedEvent", 0, [], 0, 0);
        };
        ChartCollection.prototype._UnregisterDeactivatedEvent = function () {
            _throwIfApiNotSupported("ChartCollection._UnregisterDeactivatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_UnregisterDeactivatedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        ChartCollection.prototype._UnregisterDeletedEvent = function () {
            _throwIfApiNotSupported("ChartCollection._UnregisterDeletedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_UnregisterDeletedEvent", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        ChartCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Count"])) {
                this._C = obj["Count"];
            }
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Chart, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        ChartCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Chart, true, _this, childItemData, index); });
        };
        Object.defineProperty(ChartCollection.prototype, "onActivated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("ChartCollection.onActivated", _defaultApiSetName, "1.8", _hostName);
                if (!this.m_activated) {
                    this.m_activated = new OfficeExtension.GenericEventHandlers(this.context, this, "Activated", {
                        eventType: 51,
                        registerFunc: function () { return _this._RegisterActivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterActivatedEvent(); },
                        getTargetIdFunc: function () { return _this._ParentObject.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.chartActivated,
                                chartId: value.chartId,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_activated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartCollection.prototype, "onAdded", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("ChartCollection.onAdded", _defaultApiSetName, "1.8", _hostName);
                if (!this.m_added) {
                    this.m_added = new OfficeExtension.GenericEventHandlers(this.context, this, "Added", {
                        eventType: 50,
                        registerFunc: function () { return _this._RegisterAddedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterAddedEvent(); },
                        getTargetIdFunc: function () { return _this._ParentObject.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.chartAdded,
                                chartId: value.chartId,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_added;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartCollection.prototype, "onDeactivated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("ChartCollection.onDeactivated", _defaultApiSetName, "1.8", _hostName);
                if (!this.m_deactivated) {
                    this.m_deactivated = new OfficeExtension.GenericEventHandlers(this.context, this, "Deactivated", {
                        eventType: 52,
                        registerFunc: function () { return _this._RegisterDeactivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDeactivatedEvent(); },
                        getTargetIdFunc: function () { return _this._ParentObject.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.chartDeactivated,
                                chartId: value.chartId,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_deactivated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartCollection.prototype, "onDeleted", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("ChartCollection.onDeleted", _defaultApiSetName, "1.8", _hostName);
                if (!this.m_deleted) {
                    this.m_deleted = new OfficeExtension.GenericEventHandlers(this.context, this, "Deleted", {
                        eventType: 53,
                        registerFunc: function () { return _this._RegisterDeletedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDeletedEvent(); },
                        getTargetIdFunc: function () { return _this._ParentObject.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.chartDeleted,
                                chartId: value.chartId,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_deleted;
            },
            enumerable: true,
            configurable: true
        });
        ChartCollection.prototype.toJSON = function () {
            return _toJson(this, {
                "count": this._C
            }, {}, this.m__items);
        };
        ChartCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Chart, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return ChartCollection;
    }(OfficeExtension.ClientObject));
    Excel.ChartCollection = ChartCollection;
    var ChartCollectionCustom = (function () {
        function ChartCollectionCustom() {
        }
        Object.defineProperty(ChartCollectionCustom.prototype, "_ParentObject", {
            get: function () {
                return this.m__ParentObject;
            },
            set: function (value) {
                this.m__ParentObject = value;
            },
            enumerable: true,
            configurable: true
        });
        return ChartCollectionCustom;
    }());
    Excel.ChartCollectionCustom = ChartCollectionCustom;
    OfficeExtension.Utility.applyMixin(ChartCollection, ChartCollectionCustom);
    (function (_CC) {
        function ChartCollection_Add(thisObj, type, sourceData, seriesBy) {
            if (!(sourceData instanceof Excel.Range)) {
                throw OfficeExtension.Utility.createRuntimeError(OfficeExtension.ResourceStrings.invalidArgument, "sourceData", "Charts.Add");
            }
            return { handled: false, result: null };
        }
        _CC.ChartCollection_Add = ChartCollection_Add;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeChart = "Chart";
    var Chart = (function (_super) {
        __extends(Chart, _super);
        function Chart() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Chart.prototype, "_className", {
            get: function () {
                return "Chart";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "top", "left", "width", "height", "id", "showAllFieldButtons", "chartType", "showDataLabelsOverMaximum", "categoryLabelLevel", "style", "displayBlanksAs", "plotBy", "plotVisibleOnly", "seriesNameLevel"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "Top", "Left", "Width", "Height", "Id", "ShowAllFieldButtons", "ChartType", "ShowDataLabelsOverMaximum", "CategoryLabelLevel", "Style", "DisplayBlanksAs", "PlotBy", "PlotVisibleOnly", "SeriesNameLevel"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, false, true, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["title", "dataLabels", "legend", "series", "axes", "format", "worksheet", "plotArea", "pivotOptions"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "axes", {
            get: function () {
                if (!this._A) {
                    this._A = _createPropertyObject(Excel.ChartAxes, this, "Axes", false, 4);
                }
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "dataLabels", {
            get: function () {
                if (!this._D) {
                    this._D = _createPropertyObject(Excel.ChartDataLabels, this, "DataLabels", false, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartAreaFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "legend", {
            get: function () {
                if (!this._Le) {
                    this._Le = _createPropertyObject(Excel.ChartLegend, this, "Legend", false, 4);
                }
                return this._Le;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "pivotOptions", {
            get: function () {
                _throwIfApiNotSupported("Chart.pivotOptions", _defaultApiSetName, "1.9", _hostName);
                if (!this._P) {
                    this._P = _createPropertyObject(Excel.ChartPivotOptions, this, "PivotOptions", false, 4);
                }
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "plotArea", {
            get: function () {
                _throwIfApiNotSupported("Chart.plotArea", _defaultApiSetName, "1.8", _hostName);
                if (!this._Pl) {
                    this._Pl = _createPropertyObject(Excel.ChartPlotArea, this, "PlotArea", false, 4);
                }
                return this._Pl;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "series", {
            get: function () {
                if (!this._S) {
                    this._S = _createPropertyObject(Excel.ChartSeriesCollection, this, "Series", true, 4);
                }
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "title", {
            get: function () {
                if (!this._T) {
                    this._T = _createPropertyObject(Excel.ChartTitle, this, "Title", false, 4);
                }
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "worksheet", {
            get: function () {
                _throwIfApiNotSupported("Chart.worksheet", _defaultApiSetName, "1.2", _hostName);
                if (!this._Wo) {
                    this._Wo = _createPropertyObject(Excel.Worksheet, this, "Worksheet", false, 4);
                }
                return this._Wo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "categoryLabelLevel", {
            get: function () {
                _throwIfNotLoaded("categoryLabelLevel", this._C, _typeChart, this._isNull);
                _throwIfApiNotSupported("Chart.categoryLabelLevel", _defaultApiSetName, "1.8", _hostName);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "CategoryLabelLevel", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "chartType", {
            get: function () {
                _throwIfNotLoaded("chartType", this._Ch, _typeChart, this._isNull);
                _throwIfApiNotSupported("Chart.chartType", _defaultApiSetName, "1.7", _hostName);
                return this._Ch;
            },
            set: function (value) {
                this._Ch = value;
                _invokeSetProperty(this, "ChartType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "displayBlanksAs", {
            get: function () {
                _throwIfNotLoaded("displayBlanksAs", this._Di, _typeChart, this._isNull);
                _throwIfApiNotSupported("Chart.displayBlanksAs", _defaultApiSetName, "1.8", _hostName);
                return this._Di;
            },
            set: function (value) {
                this._Di = value;
                _invokeSetProperty(this, "DisplayBlanksAs", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._H, _typeChart, this._isNull);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "Height", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeChart, this._isNull);
                _throwIfApiNotSupported("Chart.id", _defaultApiSetName, "1.7", _hostName);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeChart, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "Left", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeChart, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "plotBy", {
            get: function () {
                _throwIfNotLoaded("plotBy", this._Plo, _typeChart, this._isNull);
                _throwIfApiNotSupported("Chart.plotBy", _defaultApiSetName, "1.8", _hostName);
                return this._Plo;
            },
            set: function (value) {
                this._Plo = value;
                _invokeSetProperty(this, "PlotBy", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "plotVisibleOnly", {
            get: function () {
                _throwIfNotLoaded("plotVisibleOnly", this._Plot, _typeChart, this._isNull);
                _throwIfApiNotSupported("Chart.plotVisibleOnly", _defaultApiSetName, "1.8", _hostName);
                return this._Plot;
            },
            set: function (value) {
                this._Plot = value;
                _invokeSetProperty(this, "PlotVisibleOnly", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "seriesNameLevel", {
            get: function () {
                _throwIfNotLoaded("seriesNameLevel", this._Se, _typeChart, this._isNull);
                _throwIfApiNotSupported("Chart.seriesNameLevel", _defaultApiSetName, "1.8", _hostName);
                return this._Se;
            },
            set: function (value) {
                this._Se = value;
                _invokeSetProperty(this, "SeriesNameLevel", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "showAllFieldButtons", {
            get: function () {
                _throwIfNotLoaded("showAllFieldButtons", this._Sh, _typeChart, this._isNull);
                _throwIfApiNotSupported("Chart.showAllFieldButtons", _defaultApiSetName, "1.7", _hostName);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowAllFieldButtons", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "showDataLabelsOverMaximum", {
            get: function () {
                _throwIfNotLoaded("showDataLabelsOverMaximum", this._Sho, _typeChart, this._isNull);
                _throwIfApiNotSupported("Chart.showDataLabelsOverMaximum", _defaultApiSetName, "1.8", _hostName);
                return this._Sho;
            },
            set: function (value) {
                this._Sho = value;
                _invokeSetProperty(this, "ShowDataLabelsOverMaximum", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "style", {
            get: function () {
                _throwIfNotLoaded("style", this._St, _typeChart, this._isNull);
                _throwIfApiNotSupported("Chart.style", _defaultApiSetName, "1.8", _hostName);
                return this._St;
            },
            set: function (value) {
                this._St = value;
                _invokeSetProperty(this, "Style", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._To, _typeChart, this._isNull);
                return this._To;
            },
            set: function (value) {
                this._To = value;
                _invokeSetProperty(this, "Top", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeChart, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "Width", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Chart.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "top", "left", "width", "height", "showAllFieldButtons", "chartType", "showDataLabelsOverMaximum", "categoryLabelLevel", "style", "displayBlanksAs", "plotBy", "plotVisibleOnly", "seriesNameLevel"], ["title", "dataLabels", "legend", "axes", "format", "plotArea", "pivotOptions"], [
                "series",
                "worksheet"
            ]);
        };
        Chart.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Chart.prototype.activate = function () {
            _throwIfApiNotSupported("Chart.activate", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "Activate", 1, [], 0, 0);
        };
        Chart.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.5"), 0);
        };
        Chart.prototype.getDataTable = function () {
            _throwIfApiNotSupported("Chart.getDataTable", _defaultApiSetName, "1.14", _hostName);
            return _createMethodObject(Excel.ChartDataTable, this, "GetDataTable", 1, [], false, false, null, 4);
        };
        Chart.prototype.getDataTableOrNullObject = function () {
            _throwIfApiNotSupported("Chart.getDataTableOrNullObject", _defaultApiSetName, "1.14", _hostName);
            return _createMethodObject(Excel.ChartDataTable, this, "GetDataTableOrNullObject", 1, [], false, false, null, 4);
        };
        Chart.prototype.getImage = function (width, height, fittingMode) {
            _throwIfApiNotSupported("Chart.getImage", _defaultApiSetName, "1.2", _hostName);
            return _invokeMethod(this, "GetImage", 1, [width, height, fittingMode], 4, 0);
        };
        Chart.prototype.setData = function (sourceData, seriesBy) {
            var handled = _CC.Chart_SetData(this, sourceData, seriesBy).handled;
            if (handled) {
                return;
            }
            _invokeMethod(this, "SetData", 0, [sourceData, seriesBy], _calculateApiFlags(2, "ExcelApiUndo", "1.5"), 0);
        };
        Chart.prototype.setPosition = function (startCell, endCell) {
            _invokeMethod(this, "SetPosition", 0, [startCell, endCell], _calculateApiFlags(2, "ExcelApiUndo", "1.5"), 0);
        };
        Chart.prototype._RegisterActivatedEvent = function () {
            _throwIfApiNotSupported("Chart._RegisterActivatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_RegisterActivatedEvent", 0, [], 0, 0);
        };
        Chart.prototype._RegisterDeactivatedEvent = function () {
            _throwIfApiNotSupported("Chart._RegisterDeactivatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_RegisterDeactivatedEvent", 0, [], 0, 0);
        };
        Chart.prototype._UnregisterActivatedEvent = function () {
            _throwIfApiNotSupported("Chart._UnregisterActivatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_UnregisterActivatedEvent", 0, [], 0, 0);
        };
        Chart.prototype._UnregisterDeactivatedEvent = function () {
            _throwIfApiNotSupported("Chart._UnregisterDeactivatedEvent", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "_UnregisterDeactivatedEvent", 0, [], 0, 0);
        };
        Chart.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["CategoryLabelLevel"])) {
                this._C = obj["CategoryLabelLevel"];
            }
            if (!_isUndefined(obj["ChartType"])) {
                this._Ch = obj["ChartType"];
            }
            if (!_isUndefined(obj["DisplayBlanksAs"])) {
                this._Di = obj["DisplayBlanksAs"];
            }
            if (!_isUndefined(obj["Height"])) {
                this._H = obj["Height"];
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["PlotBy"])) {
                this._Plo = obj["PlotBy"];
            }
            if (!_isUndefined(obj["PlotVisibleOnly"])) {
                this._Plot = obj["PlotVisibleOnly"];
            }
            if (!_isUndefined(obj["SeriesNameLevel"])) {
                this._Se = obj["SeriesNameLevel"];
            }
            if (!_isUndefined(obj["ShowAllFieldButtons"])) {
                this._Sh = obj["ShowAllFieldButtons"];
            }
            if (!_isUndefined(obj["ShowDataLabelsOverMaximum"])) {
                this._Sho = obj["ShowDataLabelsOverMaximum"];
            }
            if (!_isUndefined(obj["Style"])) {
                this._St = obj["Style"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._To = obj["Top"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
            _handleNavigationPropertyResults(this, obj, ["axes", "Axes", "dataLabels", "DataLabels", "format", "Format", "legend", "Legend", "pivotOptions", "PivotOptions", "plotArea", "PlotArea", "series", "Series", "title", "Title", "worksheet", "Worksheet"]);
        };
        Chart.prototype.load = function (options) {
            return _load(this, options);
        };
        Chart.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Chart.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Chart.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(Chart.prototype, "onActivated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Chart.onActivated", _defaultApiSetName, "1.8", _hostName);
                if (!this.m_activated) {
                    this.m_activated = new OfficeExtension.GenericEventHandlers(this.context, this, "Activated", {
                        eventType: 51,
                        registerFunc: function () { return _this._RegisterActivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterActivatedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.chartActivated,
                                chartId: value.chartId,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_activated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Chart.prototype, "onDeactivated", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("Chart.onDeactivated", _defaultApiSetName, "1.8", _hostName);
                if (!this.m_deactivated) {
                    this.m_deactivated = new OfficeExtension.GenericEventHandlers(this.context, this, "Deactivated", {
                        eventType: 52,
                        registerFunc: function () { return _this._RegisterDeactivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDeactivatedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.chartDeactivated,
                                chartId: value.chartId,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_deactivated;
            },
            enumerable: true,
            configurable: true
        });
        Chart.prototype.toJSON = function () {
            return _toJson(this, {
                "categoryLabelLevel": this._C,
                "chartType": this._Ch,
                "displayBlanksAs": this._Di,
                "height": this._H,
                "id": this._I,
                "left": this._L,
                "name": this._N,
                "plotBy": this._Plo,
                "plotVisibleOnly": this._Plot,
                "seriesNameLevel": this._Se,
                "showAllFieldButtons": this._Sh,
                "showDataLabelsOverMaximum": this._Sho,
                "style": this._St,
                "top": this._To,
                "width": this._W
            }, {
                "axes": this._A,
                "dataLabels": this._D,
                "format": this._F,
                "legend": this._Le,
                "pivotOptions": this._P,
                "plotArea": this._Pl,
                "series": this._S,
                "title": this._T
            });
        };
        Chart.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Chart.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Chart;
    }(OfficeExtension.ClientObject));
    Excel.Chart = Chart;
    (function (_CC) {
        function Chart_SetData(thisObj, sourceData, seriesBy) {
            if (!(sourceData instanceof Excel.Range)) {
                throw OfficeExtension.Utility.createRuntimeError(OfficeExtension.ResourceStrings.invalidArgument, "sourceData", "Chart.setData");
            }
            return { handled: false };
        }
        _CC.Chart_SetData = Chart_SetData;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeChartPivotOptions = "ChartPivotOptions";
    var ChartPivotOptions = (function (_super) {
        __extends(ChartPivotOptions, _super);
        function ChartPivotOptions() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartPivotOptions.prototype, "_className", {
            get: function () {
                return "ChartPivotOptions";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPivotOptions.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["showAxisFieldButtons", "showLegendFieldButtons", "showReportFilterFieldButtons", "showValueFieldButtons"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPivotOptions.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["ShowAxisFieldButtons", "ShowLegendFieldButtons", "ShowReportFilterFieldButtons", "ShowValueFieldButtons"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPivotOptions.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPivotOptions.prototype, "showAxisFieldButtons", {
            get: function () {
                _throwIfNotLoaded("showAxisFieldButtons", this._S, _typeChartPivotOptions, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowAxisFieldButtons", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPivotOptions.prototype, "showLegendFieldButtons", {
            get: function () {
                _throwIfNotLoaded("showLegendFieldButtons", this._Sh, _typeChartPivotOptions, this._isNull);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowLegendFieldButtons", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPivotOptions.prototype, "showReportFilterFieldButtons", {
            get: function () {
                _throwIfNotLoaded("showReportFilterFieldButtons", this._Sho, _typeChartPivotOptions, this._isNull);
                return this._Sho;
            },
            set: function (value) {
                this._Sho = value;
                _invokeSetProperty(this, "ShowReportFilterFieldButtons", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPivotOptions.prototype, "showValueFieldButtons", {
            get: function () {
                _throwIfNotLoaded("showValueFieldButtons", this._Show, _typeChartPivotOptions, this._isNull);
                return this._Show;
            },
            set: function (value) {
                this._Show = value;
                _invokeSetProperty(this, "ShowValueFieldButtons", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartPivotOptions.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["showAxisFieldButtons", "showLegendFieldButtons", "showReportFilterFieldButtons", "showValueFieldButtons"], [], []);
        };
        ChartPivotOptions.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartPivotOptions.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["ShowAxisFieldButtons"])) {
                this._S = obj["ShowAxisFieldButtons"];
            }
            if (!_isUndefined(obj["ShowLegendFieldButtons"])) {
                this._Sh = obj["ShowLegendFieldButtons"];
            }
            if (!_isUndefined(obj["ShowReportFilterFieldButtons"])) {
                this._Sho = obj["ShowReportFilterFieldButtons"];
            }
            if (!_isUndefined(obj["ShowValueFieldButtons"])) {
                this._Show = obj["ShowValueFieldButtons"];
            }
        };
        ChartPivotOptions.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartPivotOptions.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartPivotOptions.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartPivotOptions.prototype.toJSON = function () {
            return _toJson(this, {
                "showAxisFieldButtons": this._S,
                "showLegendFieldButtons": this._Sh,
                "showReportFilterFieldButtons": this._Sho,
                "showValueFieldButtons": this._Show
            }, {});
        };
        ChartPivotOptions.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartPivotOptions.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartPivotOptions;
    }(OfficeExtension.ClientObject));
    Excel.ChartPivotOptions = ChartPivotOptions;
    var _typeChartAreaFormat = "ChartAreaFormat";
    var ChartAreaFormat = (function (_super) {
        __extends(ChartAreaFormat, _super);
        function ChartAreaFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartAreaFormat.prototype, "_className", {
            get: function () {
                return "ChartAreaFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAreaFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["roundedCorners", "colorScheme"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAreaFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["RoundedCorners", "ColorScheme"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAreaFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAreaFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["fill", "font", "border"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAreaFormat.prototype, "border", {
            get: function () {
                _throwIfApiNotSupported("ChartAreaFormat.border", _defaultApiSetName, "1.7", _hostName);
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ChartBorder, this, "Border", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAreaFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAreaFormat.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.ChartFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAreaFormat.prototype, "colorScheme", {
            get: function () {
                _throwIfNotLoaded("colorScheme", this._C, _typeChartAreaFormat, this._isNull);
                _throwIfApiNotSupported("ChartAreaFormat.colorScheme", _defaultApiSetName, "1.9", _hostName);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "ColorScheme", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAreaFormat.prototype, "roundedCorners", {
            get: function () {
                _throwIfNotLoaded("roundedCorners", this._R, _typeChartAreaFormat, this._isNull);
                _throwIfApiNotSupported("ChartAreaFormat.roundedCorners", _defaultApiSetName, "1.9", _hostName);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "RoundedCorners", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartAreaFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["roundedCorners", "colorScheme"], ["font", "border"], [
                "fill"
            ]);
        };
        ChartAreaFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartAreaFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["ColorScheme"])) {
                this._C = obj["ColorScheme"];
            }
            if (!_isUndefined(obj["RoundedCorners"])) {
                this._R = obj["RoundedCorners"];
            }
            _handleNavigationPropertyResults(this, obj, ["border", "Border", "fill", "Fill", "font", "Font"]);
        };
        ChartAreaFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartAreaFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartAreaFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartAreaFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "colorScheme": this._C,
                "roundedCorners": this._R
            }, {
                "border": this._B,
                "font": this._Fo
            });
        };
        ChartAreaFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartAreaFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartAreaFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartAreaFormat = ChartAreaFormat;
    var _typeChartSeriesCollection = "ChartSeriesCollection";
    var ChartSeriesCollection = (function (_super) {
        __extends(ChartSeriesCollection, _super);
        function ChartSeriesCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartSeriesCollection.prototype, "_className", {
            get: function () {
                return "ChartSeriesCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeriesCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeriesCollection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeriesCollection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeriesCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeChartSeriesCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeriesCollection.prototype, "count", {
            get: function () {
                _throwIfNotLoaded("count", this._C, _typeChartSeriesCollection, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        ChartSeriesCollection.prototype.add = function (name, index) {
            _throwIfApiNotSupported("ChartSeriesCollection.add", _defaultApiSetName, "1.7", _hostName);
            return _createMethodObject(Excel.ChartSeries, this, "Add", 0, [name, index], false, true, null, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
        };
        ChartSeriesCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("ChartSeriesCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        ChartSeriesCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.ChartSeries, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        ChartSeriesCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Count"])) {
                this._C = obj["Count"];
            }
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.ChartSeries, false, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        ChartSeriesCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartSeriesCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartSeriesCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.ChartSeries, false, _this, childItemData, index); });
        };
        ChartSeriesCollection.prototype.toJSON = function () {
            return _toJson(this, {
                "count": this._C
            }, {}, this.m__items);
        };
        ChartSeriesCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.ChartSeries, false, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return ChartSeriesCollection;
    }(OfficeExtension.ClientObject));
    Excel.ChartSeriesCollection = ChartSeriesCollection;
    var _typeChartSeries = "ChartSeries";
    var ChartSeries = (function (_super) {
        __extends(ChartSeries, _super);
        function ChartSeries() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartSeries.prototype, "_className", {
            get: function () {
                return "ChartSeries";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "chartType", "hasDataLabels", "filtered", "markerSize", "markerStyle", "showShadow", "markerBackgroundColor", "markerForegroundColor", "smooth", "plotOrder", "gapWidth", "doughnutHoleSize", "axisGroup", "explosion", "firstSliceAngle", "invertIfNegative", "bubbleScale", "secondPlotSize", "splitType", "splitValue", "varyByCategories", "showLeaderLines", "overlap", "gradientStyle", "gradientMinimumType", "gradientMidpointType", "gradientMaximumType", "gradientMinimumValue", "gradientMidpointValue", "gradientMaximumValue", "gradientMinimumColor", "gradientMidpointColor", "gradientMaximumColor", "parentLabelStrategy", "showConnectorLines", "invertColor"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "ChartType", "HasDataLabels", "Filtered", "MarkerSize", "MarkerStyle", "ShowShadow", "MarkerBackgroundColor", "MarkerForegroundColor", "Smooth", "PlotOrder", "GapWidth", "DoughnutHoleSize", "AxisGroup", "Explosion", "FirstSliceAngle", "InvertIfNegative", "BubbleScale", "SecondPlotSize", "SplitType", "SplitValue", "VaryByCategories", "ShowLeaderLines", "Overlap", "GradientStyle", "GradientMinimumType", "GradientMidpointType", "GradientMaximumType", "GradientMinimumValue", "GradientMidpointValue", "GradientMaximumValue", "GradientMinimumColor", "GradientMidpointColor", "GradientMaximumColor", "ParentLabelStrategy", "ShowConnectorLines", "InvertColor"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["points", "format", "trendlines", "xErrorBars", "yErrorBars", "dataLabels", "binOptions", "mapOptions", "boxwhiskerOptions"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "binOptions", {
            get: function () {
                _throwIfApiNotSupported("ChartSeries.binOptions", _defaultApiSetName, "1.9", _hostName);
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ChartBinOptions, this, "BinOptions", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "boxwhiskerOptions", {
            get: function () {
                _throwIfApiNotSupported("ChartSeries.boxwhiskerOptions", _defaultApiSetName, "1.9", _hostName);
                if (!this._Bo) {
                    this._Bo = _createPropertyObject(Excel.ChartBoxwhiskerOptions, this, "BoxwhiskerOptions", false, 4);
                }
                return this._Bo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "dataLabels", {
            get: function () {
                _throwIfApiNotSupported("ChartSeries.dataLabels", _defaultApiSetName, "1.8", _hostName);
                if (!this._D) {
                    this._D = _createPropertyObject(Excel.ChartDataLabels, this, "DataLabels", false, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "format", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.ChartSeriesFormat, this, "Format", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "mapOptions", {
            get: function () {
                _throwIfApiNotSupported("ChartSeries.mapOptions", _defaultApiSetName, "1.9", _hostName);
                if (!this._M) {
                    this._M = _createPropertyObject(Excel.ChartMapOptions, this, "MapOptions", false, 4);
                }
                return this._M;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "points", {
            get: function () {
                if (!this._Po) {
                    this._Po = _createPropertyObject(Excel.ChartPointsCollection, this, "Points", true, 4);
                }
                return this._Po;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "trendlines", {
            get: function () {
                _throwIfApiNotSupported("ChartSeries.trendlines", _defaultApiSetName, "1.7", _hostName);
                if (!this._T) {
                    this._T = _createPropertyObject(Excel.ChartTrendlineCollection, this, "Trendlines", true, 4);
                }
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "xErrorBars", {
            get: function () {
                _throwIfApiNotSupported("ChartSeries.xErrorBars", _defaultApiSetName, "1.9", _hostName);
                if (!this._X) {
                    this._X = _createPropertyObject(Excel.ChartErrorBars, this, "XErrorBars", false, 4);
                }
                return this._X;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "yErrorBars", {
            get: function () {
                _throwIfApiNotSupported("ChartSeries.yErrorBars", _defaultApiSetName, "1.9", _hostName);
                if (!this._Y) {
                    this._Y = _createPropertyObject(Excel.ChartErrorBars, this, "YErrorBars", false, 4);
                }
                return this._Y;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "axisGroup", {
            get: function () {
                _throwIfNotLoaded("axisGroup", this._A, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.axisGroup", _defaultApiSetName, "1.8", _hostName);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AxisGroup", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "bubbleScale", {
            get: function () {
                _throwIfNotLoaded("bubbleScale", this._Bu, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.bubbleScale", _defaultApiSetName, "1.9", _hostName);
                return this._Bu;
            },
            set: function (value) {
                this._Bu = value;
                _invokeSetProperty(this, "BubbleScale", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "chartType", {
            get: function () {
                _throwIfNotLoaded("chartType", this._C, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.chartType", _defaultApiSetName, "1.7", _hostName);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "ChartType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "doughnutHoleSize", {
            get: function () {
                _throwIfNotLoaded("doughnutHoleSize", this._Do, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.doughnutHoleSize", _defaultApiSetName, "1.7", _hostName);
                return this._Do;
            },
            set: function (value) {
                this._Do = value;
                _invokeSetProperty(this, "DoughnutHoleSize", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "explosion", {
            get: function () {
                _throwIfNotLoaded("explosion", this._E, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.explosion", _defaultApiSetName, "1.8", _hostName);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "Explosion", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "filtered", {
            get: function () {
                _throwIfNotLoaded("filtered", this._F, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.filtered", _defaultApiSetName, "1.7", _hostName);
                return this._F;
            },
            set: function (value) {
                this._F = value;
                _invokeSetProperty(this, "Filtered", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "firstSliceAngle", {
            get: function () {
                _throwIfNotLoaded("firstSliceAngle", this._Fi, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.firstSliceAngle", _defaultApiSetName, "1.8", _hostName);
                return this._Fi;
            },
            set: function (value) {
                this._Fi = value;
                _invokeSetProperty(this, "FirstSliceAngle", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gapWidth", {
            get: function () {
                _throwIfNotLoaded("gapWidth", this._G, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gapWidth", _defaultApiSetName, "1.7", _hostName);
                return this._G;
            },
            set: function (value) {
                this._G = value;
                _invokeSetProperty(this, "GapWidth", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gradientMaximumColor", {
            get: function () {
                _throwIfNotLoaded("gradientMaximumColor", this._Gr, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gradientMaximumColor", _defaultApiSetName, "1.9", _hostName);
                return this._Gr;
            },
            set: function (value) {
                this._Gr = value;
                _invokeSetProperty(this, "GradientMaximumColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gradientMaximumType", {
            get: function () {
                _throwIfNotLoaded("gradientMaximumType", this._Gra, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gradientMaximumType", _defaultApiSetName, "1.9", _hostName);
                return this._Gra;
            },
            set: function (value) {
                this._Gra = value;
                _invokeSetProperty(this, "GradientMaximumType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gradientMaximumValue", {
            get: function () {
                _throwIfNotLoaded("gradientMaximumValue", this._Grad, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gradientMaximumValue", _defaultApiSetName, "1.9", _hostName);
                return this._Grad;
            },
            set: function (value) {
                this._Grad = value;
                _invokeSetProperty(this, "GradientMaximumValue", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gradientMidpointColor", {
            get: function () {
                _throwIfNotLoaded("gradientMidpointColor", this._Gradi, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gradientMidpointColor", _defaultApiSetName, "1.9", _hostName);
                return this._Gradi;
            },
            set: function (value) {
                this._Gradi = value;
                _invokeSetProperty(this, "GradientMidpointColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gradientMidpointType", {
            get: function () {
                _throwIfNotLoaded("gradientMidpointType", this._Gradie, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gradientMidpointType", _defaultApiSetName, "1.9", _hostName);
                return this._Gradie;
            },
            set: function (value) {
                this._Gradie = value;
                _invokeSetProperty(this, "GradientMidpointType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gradientMidpointValue", {
            get: function () {
                _throwIfNotLoaded("gradientMidpointValue", this._Gradien, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gradientMidpointValue", _defaultApiSetName, "1.9", _hostName);
                return this._Gradien;
            },
            set: function (value) {
                this._Gradien = value;
                _invokeSetProperty(this, "GradientMidpointValue", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gradientMinimumColor", {
            get: function () {
                _throwIfNotLoaded("gradientMinimumColor", this._Gradient, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gradientMinimumColor", _defaultApiSetName, "1.9", _hostName);
                return this._Gradient;
            },
            set: function (value) {
                this._Gradient = value;
                _invokeSetProperty(this, "GradientMinimumColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gradientMinimumType", {
            get: function () {
                _throwIfNotLoaded("gradientMinimumType", this._GradientM, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gradientMinimumType", _defaultApiSetName, "1.9", _hostName);
                return this._GradientM;
            },
            set: function (value) {
                this._GradientM = value;
                _invokeSetProperty(this, "GradientMinimumType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gradientMinimumValue", {
            get: function () {
                _throwIfNotLoaded("gradientMinimumValue", this._GradientMi, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gradientMinimumValue", _defaultApiSetName, "1.9", _hostName);
                return this._GradientMi;
            },
            set: function (value) {
                this._GradientMi = value;
                _invokeSetProperty(this, "GradientMinimumValue", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "gradientStyle", {
            get: function () {
                _throwIfNotLoaded("gradientStyle", this._GradientS, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.gradientStyle", _defaultApiSetName, "1.9", _hostName);
                return this._GradientS;
            },
            set: function (value) {
                this._GradientS = value;
                _invokeSetProperty(this, "GradientStyle", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "hasDataLabels", {
            get: function () {
                _throwIfNotLoaded("hasDataLabels", this._H, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.hasDataLabels", _defaultApiSetName, "1.7", _hostName);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "HasDataLabels", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "invertColor", {
            get: function () {
                _throwIfNotLoaded("invertColor", this._I, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.invertColor", _defaultApiSetName, "1.9", _hostName);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "InvertColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "invertIfNegative", {
            get: function () {
                _throwIfNotLoaded("invertIfNegative", this._In, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.invertIfNegative", _defaultApiSetName, "1.8", _hostName);
                return this._In;
            },
            set: function (value) {
                this._In = value;
                _invokeSetProperty(this, "InvertIfNegative", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "markerBackgroundColor", {
            get: function () {
                _throwIfNotLoaded("markerBackgroundColor", this._Ma, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.markerBackgroundColor", _defaultApiSetName, "1.7", _hostName);
                return this._Ma;
            },
            set: function (value) {
                this._Ma = value;
                _invokeSetProperty(this, "MarkerBackgroundColor", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "markerForegroundColor", {
            get: function () {
                _throwIfNotLoaded("markerForegroundColor", this._Mar, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.markerForegroundColor", _defaultApiSetName, "1.7", _hostName);
                return this._Mar;
            },
            set: function (value) {
                this._Mar = value;
                _invokeSetProperty(this, "MarkerForegroundColor", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "markerSize", {
            get: function () {
                _throwIfNotLoaded("markerSize", this._Mark, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.markerSize", _defaultApiSetName, "1.7", _hostName);
                return this._Mark;
            },
            set: function (value) {
                this._Mark = value;
                _invokeSetProperty(this, "MarkerSize", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "markerStyle", {
            get: function () {
                _throwIfNotLoaded("markerStyle", this._Marke, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.markerStyle", _defaultApiSetName, "1.7", _hostName);
                return this._Marke;
            },
            set: function (value) {
                this._Marke = value;
                _invokeSetProperty(this, "MarkerStyle", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeChartSeries, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "overlap", {
            get: function () {
                _throwIfNotLoaded("overlap", this._O, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.overlap", _defaultApiSetName, "1.8", _hostName);
                return this._O;
            },
            set: function (value) {
                this._O = value;
                _invokeSetProperty(this, "Overlap", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "parentLabelStrategy", {
            get: function () {
                _throwIfNotLoaded("parentLabelStrategy", this._P, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.parentLabelStrategy", _defaultApiSetName, "1.9", _hostName);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "ParentLabelStrategy", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "plotOrder", {
            get: function () {
                _throwIfNotLoaded("plotOrder", this._Pl, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.plotOrder", _defaultApiSetName, "1.7", _hostName);
                return this._Pl;
            },
            set: function (value) {
                this._Pl = value;
                _invokeSetProperty(this, "PlotOrder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "secondPlotSize", {
            get: function () {
                _throwIfNotLoaded("secondPlotSize", this._S, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.secondPlotSize", _defaultApiSetName, "1.8", _hostName);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "SecondPlotSize", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "showConnectorLines", {
            get: function () {
                _throwIfNotLoaded("showConnectorLines", this._Sh, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.showConnectorLines", _defaultApiSetName, "1.9", _hostName);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowConnectorLines", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "showLeaderLines", {
            get: function () {
                _throwIfNotLoaded("showLeaderLines", this._Sho, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.showLeaderLines", _defaultApiSetName, "1.9", _hostName);
                return this._Sho;
            },
            set: function (value) {
                this._Sho = value;
                _invokeSetProperty(this, "ShowLeaderLines", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "showShadow", {
            get: function () {
                _throwIfNotLoaded("showShadow", this._Show, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.showShadow", _defaultApiSetName, "1.7", _hostName);
                return this._Show;
            },
            set: function (value) {
                this._Show = value;
                _invokeSetProperty(this, "ShowShadow", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "smooth", {
            get: function () {
                _throwIfNotLoaded("smooth", this._Sm, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.smooth", _defaultApiSetName, "1.7", _hostName);
                return this._Sm;
            },
            set: function (value) {
                this._Sm = value;
                _invokeSetProperty(this, "Smooth", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "splitType", {
            get: function () {
                _throwIfNotLoaded("splitType", this._Sp, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.splitType", _defaultApiSetName, "1.8", _hostName);
                return this._Sp;
            },
            set: function (value) {
                this._Sp = value;
                _invokeSetProperty(this, "SplitType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "splitValue", {
            get: function () {
                _throwIfNotLoaded("splitValue", this._Spl, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.splitValue", _defaultApiSetName, "1.9", _hostName);
                return this._Spl;
            },
            set: function (value) {
                this._Spl = value;
                _invokeSetProperty(this, "SplitValue", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeries.prototype, "varyByCategories", {
            get: function () {
                _throwIfNotLoaded("varyByCategories", this._V, _typeChartSeries, this._isNull);
                _throwIfApiNotSupported("ChartSeries.varyByCategories", _defaultApiSetName, "1.8", _hostName);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "VaryByCategories", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartSeries.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "chartType", "hasDataLabels", "filtered", "markerSize", "markerStyle", "showShadow", "markerBackgroundColor", "markerForegroundColor", "smooth", "plotOrder", "gapWidth", "doughnutHoleSize", "axisGroup", "explosion", "firstSliceAngle", "invertIfNegative", "bubbleScale", "secondPlotSize", "splitType", "splitValue", "varyByCategories", "showLeaderLines", "overlap", "gradientStyle", "gradientMinimumType", "gradientMidpointType", "gradientMaximumType", "gradientMinimumValue", "gradientMidpointValue", "gradientMaximumValue", "gradientMinimumColor", "gradientMidpointColor", "gradientMaximumColor", "parentLabelStrategy", "showConnectorLines", "invertColor"], ["format", "xErrorBars", "yErrorBars", "dataLabels", "binOptions", "mapOptions", "boxwhiskerOptions"], [
                "points",
                "trendlines"
            ]);
        };
        ChartSeries.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartSeries.prototype["delete"] = function () {
            _throwIfApiNotSupported("ChartSeries.delete", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "Delete", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.5"), 0);
        };
        ChartSeries.prototype.getDimensionValues = function (dimension) {
            _throwIfApiNotSupported("ChartSeries.getDimensionValues", _defaultApiSetName, "1.12", _hostName);
            return _invokeMethod(this, "GetDimensionValues", 0, [dimension], _calculateApiFlags(2, "ExcelApiUndo", "1.5"), 0);
        };
        ChartSeries.prototype.setBubbleSizes = function (sourceData) {
            _throwIfApiNotSupported("ChartSeries.setBubbleSizes", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "SetBubbleSizes", 0, [sourceData], 0, 0);
        };
        ChartSeries.prototype.setValues = function (sourceData) {
            _throwIfApiNotSupported("ChartSeries.setValues", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "SetValues", 0, [sourceData], _calculateApiFlags(2, "ExcelApiUndo", "1.5"), 0);
        };
        ChartSeries.prototype.setXAxisValues = function (sourceData) {
            _throwIfApiNotSupported("ChartSeries.setXAxisValues", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "SetXAxisValues", 0, [sourceData], _calculateApiFlags(2, "ExcelApiUndo", "1.5"), 0);
        };
        ChartSeries.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AxisGroup"])) {
                this._A = obj["AxisGroup"];
            }
            if (!_isUndefined(obj["BubbleScale"])) {
                this._Bu = obj["BubbleScale"];
            }
            if (!_isUndefined(obj["ChartType"])) {
                this._C = obj["ChartType"];
            }
            if (!_isUndefined(obj["DoughnutHoleSize"])) {
                this._Do = obj["DoughnutHoleSize"];
            }
            if (!_isUndefined(obj["Explosion"])) {
                this._E = obj["Explosion"];
            }
            if (!_isUndefined(obj["Filtered"])) {
                this._F = obj["Filtered"];
            }
            if (!_isUndefined(obj["FirstSliceAngle"])) {
                this._Fi = obj["FirstSliceAngle"];
            }
            if (!_isUndefined(obj["GapWidth"])) {
                this._G = obj["GapWidth"];
            }
            if (!_isUndefined(obj["GradientMaximumColor"])) {
                this._Gr = obj["GradientMaximumColor"];
            }
            if (!_isUndefined(obj["GradientMaximumType"])) {
                this._Gra = obj["GradientMaximumType"];
            }
            if (!_isUndefined(obj["GradientMaximumValue"])) {
                this._Grad = obj["GradientMaximumValue"];
            }
            if (!_isUndefined(obj["GradientMidpointColor"])) {
                this._Gradi = obj["GradientMidpointColor"];
            }
            if (!_isUndefined(obj["GradientMidpointType"])) {
                this._Gradie = obj["GradientMidpointType"];
            }
            if (!_isUndefined(obj["GradientMidpointValue"])) {
                this._Gradien = obj["GradientMidpointValue"];
            }
            if (!_isUndefined(obj["GradientMinimumColor"])) {
                this._Gradient = obj["GradientMinimumColor"];
            }
            if (!_isUndefined(obj["GradientMinimumType"])) {
                this._GradientM = obj["GradientMinimumType"];
            }
            if (!_isUndefined(obj["GradientMinimumValue"])) {
                this._GradientMi = obj["GradientMinimumValue"];
            }
            if (!_isUndefined(obj["GradientStyle"])) {
                this._GradientS = obj["GradientStyle"];
            }
            if (!_isUndefined(obj["HasDataLabels"])) {
                this._H = obj["HasDataLabels"];
            }
            if (!_isUndefined(obj["InvertColor"])) {
                this._I = obj["InvertColor"];
            }
            if (!_isUndefined(obj["InvertIfNegative"])) {
                this._In = obj["InvertIfNegative"];
            }
            if (!_isUndefined(obj["MarkerBackgroundColor"])) {
                this._Ma = obj["MarkerBackgroundColor"];
            }
            if (!_isUndefined(obj["MarkerForegroundColor"])) {
                this._Mar = obj["MarkerForegroundColor"];
            }
            if (!_isUndefined(obj["MarkerSize"])) {
                this._Mark = obj["MarkerSize"];
            }
            if (!_isUndefined(obj["MarkerStyle"])) {
                this._Marke = obj["MarkerStyle"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Overlap"])) {
                this._O = obj["Overlap"];
            }
            if (!_isUndefined(obj["ParentLabelStrategy"])) {
                this._P = obj["ParentLabelStrategy"];
            }
            if (!_isUndefined(obj["PlotOrder"])) {
                this._Pl = obj["PlotOrder"];
            }
            if (!_isUndefined(obj["SecondPlotSize"])) {
                this._S = obj["SecondPlotSize"];
            }
            if (!_isUndefined(obj["ShowConnectorLines"])) {
                this._Sh = obj["ShowConnectorLines"];
            }
            if (!_isUndefined(obj["ShowLeaderLines"])) {
                this._Sho = obj["ShowLeaderLines"];
            }
            if (!_isUndefined(obj["ShowShadow"])) {
                this._Show = obj["ShowShadow"];
            }
            if (!_isUndefined(obj["Smooth"])) {
                this._Sm = obj["Smooth"];
            }
            if (!_isUndefined(obj["SplitType"])) {
                this._Sp = obj["SplitType"];
            }
            if (!_isUndefined(obj["SplitValue"])) {
                this._Spl = obj["SplitValue"];
            }
            if (!_isUndefined(obj["VaryByCategories"])) {
                this._V = obj["VaryByCategories"];
            }
            _handleNavigationPropertyResults(this, obj, ["binOptions", "BinOptions", "boxwhiskerOptions", "BoxwhiskerOptions", "dataLabels", "DataLabels", "format", "Format", "mapOptions", "MapOptions", "points", "Points", "trendlines", "Trendlines", "xErrorBars", "XErrorBars", "yErrorBars", "YErrorBars"]);
        };
        ChartSeries.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartSeries.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartSeries.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartSeries.prototype.toJSON = function () {
            return _toJson(this, {
                "axisGroup": this._A,
                "bubbleScale": this._Bu,
                "chartType": this._C,
                "doughnutHoleSize": this._Do,
                "explosion": this._E,
                "filtered": this._F,
                "firstSliceAngle": this._Fi,
                "gapWidth": this._G,
                "gradientMaximumColor": this._Gr,
                "gradientMaximumType": this._Gra,
                "gradientMaximumValue": this._Grad,
                "gradientMidpointColor": this._Gradi,
                "gradientMidpointType": this._Gradie,
                "gradientMidpointValue": this._Gradien,
                "gradientMinimumColor": this._Gradient,
                "gradientMinimumType": this._GradientM,
                "gradientMinimumValue": this._GradientMi,
                "gradientStyle": this._GradientS,
                "hasDataLabels": this._H,
                "invertColor": this._I,
                "invertIfNegative": this._In,
                "markerBackgroundColor": this._Ma,
                "markerForegroundColor": this._Mar,
                "markerSize": this._Mark,
                "markerStyle": this._Marke,
                "name": this._N,
                "overlap": this._O,
                "parentLabelStrategy": this._P,
                "plotOrder": this._Pl,
                "secondPlotSize": this._S,
                "showConnectorLines": this._Sh,
                "showLeaderLines": this._Sho,
                "showShadow": this._Show,
                "smooth": this._Sm,
                "splitType": this._Sp,
                "splitValue": this._Spl,
                "varyByCategories": this._V
            }, {
                "binOptions": this._B,
                "boxwhiskerOptions": this._Bo,
                "dataLabels": this._D,
                "format": this._Fo,
                "mapOptions": this._M,
                "points": this._Po,
                "trendlines": this._T,
                "xErrorBars": this._X,
                "yErrorBars": this._Y
            });
        };
        ChartSeries.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartSeries.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartSeries;
    }(OfficeExtension.ClientObject));
    Excel.ChartSeries = ChartSeries;
    var _typeChartSeriesFormat = "ChartSeriesFormat";
    var ChartSeriesFormat = (function (_super) {
        __extends(ChartSeriesFormat, _super);
        function ChartSeriesFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartSeriesFormat.prototype, "_className", {
            get: function () {
                return "ChartSeriesFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeriesFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["fill", "line"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeriesFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartSeriesFormat.prototype, "line", {
            get: function () {
                if (!this._L) {
                    this._L = _createPropertyObject(Excel.ChartLineFormat, this, "Line", false, 4);
                }
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        ChartSeriesFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["line"], [
                "fill"
            ]);
        };
        ChartSeriesFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartSeriesFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["fill", "Fill", "line", "Line"]);
        };
        ChartSeriesFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartSeriesFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartSeriesFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartSeriesFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "line": this._L
            });
        };
        ChartSeriesFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartSeriesFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartSeriesFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartSeriesFormat = ChartSeriesFormat;
    var _typeChartPointsCollection = "ChartPointsCollection";
    var ChartPointsCollection = (function (_super) {
        __extends(ChartPointsCollection, _super);
        function ChartPointsCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartPointsCollection.prototype, "_className", {
            get: function () {
                return "ChartPointsCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPointsCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPointsCollection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPointsCollection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPointsCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeChartPointsCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPointsCollection.prototype, "count", {
            get: function () {
                _throwIfNotLoaded("count", this._C, _typeChartPointsCollection, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        ChartPointsCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("ChartPointsCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        ChartPointsCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.ChartPoint, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        ChartPointsCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Count"])) {
                this._C = obj["Count"];
            }
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.ChartPoint, false, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        ChartPointsCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartPointsCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartPointsCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.ChartPoint, false, _this, childItemData, index); });
        };
        ChartPointsCollection.prototype.toJSON = function () {
            return _toJson(this, {
                "count": this._C
            }, {}, this.m__items);
        };
        ChartPointsCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.ChartPoint, false, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return ChartPointsCollection;
    }(OfficeExtension.ClientObject));
    Excel.ChartPointsCollection = ChartPointsCollection;
    var _typeChartPoint = "ChartPoint";
    var ChartPoint = (function (_super) {
        __extends(ChartPoint, _super);
        function ChartPoint() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartPoint.prototype, "_className", {
            get: function () {
                return "ChartPoint";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["value", "hasDataLabel", "markerStyle", "markerSize", "markerBackgroundColor", "markerForegroundColor"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Value", "HasDataLabel", "MarkerStyle", "MarkerSize", "MarkerBackgroundColor", "MarkerForegroundColor"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format", "dataLabel"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "dataLabel", {
            get: function () {
                _throwIfApiNotSupported("ChartPoint.dataLabel", _defaultApiSetName, "1.7", _hostName);
                if (!this._D) {
                    this._D = _createPropertyObject(Excel.ChartDataLabel, this, "DataLabel", false, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartPointFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "hasDataLabel", {
            get: function () {
                _throwIfNotLoaded("hasDataLabel", this._H, _typeChartPoint, this._isNull);
                _throwIfApiNotSupported("ChartPoint.hasDataLabel", _defaultApiSetName, "1.7", _hostName);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "HasDataLabel", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "markerBackgroundColor", {
            get: function () {
                _throwIfNotLoaded("markerBackgroundColor", this._M, _typeChartPoint, this._isNull);
                _throwIfApiNotSupported("ChartPoint.markerBackgroundColor", _defaultApiSetName, "1.7", _hostName);
                return this._M;
            },
            set: function (value) {
                this._M = value;
                _invokeSetProperty(this, "MarkerBackgroundColor", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "markerForegroundColor", {
            get: function () {
                _throwIfNotLoaded("markerForegroundColor", this._Ma, _typeChartPoint, this._isNull);
                _throwIfApiNotSupported("ChartPoint.markerForegroundColor", _defaultApiSetName, "1.7", _hostName);
                return this._Ma;
            },
            set: function (value) {
                this._Ma = value;
                _invokeSetProperty(this, "MarkerForegroundColor", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "markerSize", {
            get: function () {
                _throwIfNotLoaded("markerSize", this._Mar, _typeChartPoint, this._isNull);
                _throwIfApiNotSupported("ChartPoint.markerSize", _defaultApiSetName, "1.7", _hostName);
                return this._Mar;
            },
            set: function (value) {
                this._Mar = value;
                _invokeSetProperty(this, "MarkerSize", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "markerStyle", {
            get: function () {
                _throwIfNotLoaded("markerStyle", this._Mark, _typeChartPoint, this._isNull);
                _throwIfApiNotSupported("ChartPoint.markerStyle", _defaultApiSetName, "1.7", _hostName);
                return this._Mark;
            },
            set: function (value) {
                this._Mark = value;
                _invokeSetProperty(this, "MarkerStyle", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPoint.prototype, "value", {
            get: function () {
                _throwIfNotLoaded("value", this._V, _typeChartPoint, this._isNull);
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        ChartPoint.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["hasDataLabel", "markerStyle", "markerSize", "markerBackgroundColor", "markerForegroundColor"], ["format", "dataLabel"], []);
        };
        ChartPoint.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartPoint.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["HasDataLabel"])) {
                this._H = obj["HasDataLabel"];
            }
            if (!_isUndefined(obj["MarkerBackgroundColor"])) {
                this._M = obj["MarkerBackgroundColor"];
            }
            if (!_isUndefined(obj["MarkerForegroundColor"])) {
                this._Ma = obj["MarkerForegroundColor"];
            }
            if (!_isUndefined(obj["MarkerSize"])) {
                this._Mar = obj["MarkerSize"];
            }
            if (!_isUndefined(obj["MarkerStyle"])) {
                this._Mark = obj["MarkerStyle"];
            }
            if (!_isUndefined(obj["Value"])) {
                this._V = obj["Value"];
            }
            _handleNavigationPropertyResults(this, obj, ["dataLabel", "DataLabel", "format", "Format"]);
        };
        ChartPoint.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartPoint.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartPoint.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartPoint.prototype.toJSON = function () {
            return _toJson(this, {
                "hasDataLabel": this._H,
                "markerBackgroundColor": this._M,
                "markerForegroundColor": this._Ma,
                "markerSize": this._Mar,
                "markerStyle": this._Mark,
                "value": this._V
            }, {
                "dataLabel": this._D,
                "format": this._F
            });
        };
        ChartPoint.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartPoint.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartPoint;
    }(OfficeExtension.ClientObject));
    Excel.ChartPoint = ChartPoint;
    var _typeChartPointFormat = "ChartPointFormat";
    var ChartPointFormat = (function (_super) {
        __extends(ChartPointFormat, _super);
        function ChartPointFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartPointFormat.prototype, "_className", {
            get: function () {
                return "ChartPointFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPointFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["fill", "border"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPointFormat.prototype, "border", {
            get: function () {
                _throwIfApiNotSupported("ChartPointFormat.border", _defaultApiSetName, "1.7", _hostName);
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ChartBorder, this, "Border", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPointFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        ChartPointFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["border"], [
                "fill"
            ]);
        };
        ChartPointFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartPointFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["border", "Border", "fill", "Fill"]);
        };
        ChartPointFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartPointFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartPointFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartPointFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "border": this._B
            });
        };
        ChartPointFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartPointFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartPointFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartPointFormat = ChartPointFormat;
    var _typeChartAxes = "ChartAxes";
    var ChartAxes = (function (_super) {
        __extends(ChartAxes, _super);
        function ChartAxes() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartAxes.prototype, "_className", {
            get: function () {
                return "ChartAxes";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxes.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["categoryAxis", "seriesAxis", "valueAxis"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxes.prototype, "categoryAxis", {
            get: function () {
                if (!this._C) {
                    this._C = _createPropertyObject(Excel.ChartAxis, this, "CategoryAxis", false, 4);
                }
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxes.prototype, "seriesAxis", {
            get: function () {
                if (!this._S) {
                    this._S = _createPropertyObject(Excel.ChartAxis, this, "SeriesAxis", false, 4);
                }
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxes.prototype, "valueAxis", {
            get: function () {
                if (!this._V) {
                    this._V = _createPropertyObject(Excel.ChartAxis, this, "ValueAxis", false, 4);
                }
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        ChartAxes.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["categoryAxis", "seriesAxis", "valueAxis"], []);
        };
        ChartAxes.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartAxes.prototype.getItem = function (type, group) {
            _throwIfApiNotSupported("ChartAxes.getItem", _defaultApiSetName, "1.7", _hostName);
            return _createMethodObject(Excel.ChartAxis, this, "GetItem", 1, [type, group], false, false, null, 4);
        };
        ChartAxes.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["categoryAxis", "CategoryAxis", "seriesAxis", "SeriesAxis", "valueAxis", "ValueAxis"]);
        };
        ChartAxes.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartAxes.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartAxes.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartAxes.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "categoryAxis": this._C,
                "seriesAxis": this._S,
                "valueAxis": this._V
            });
        };
        ChartAxes.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartAxes.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartAxes;
    }(OfficeExtension.ClientObject));
    Excel.ChartAxes = ChartAxes;
    var _typeChartAxis = "ChartAxis";
    var ChartAxis = (function (_super) {
        __extends(ChartAxis, _super);
        function ChartAxis() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartAxis.prototype, "_className", {
            get: function () {
                return "ChartAxis";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["majorUnit", "maximum", "minimum", "minorUnit", "displayUnit", "showDisplayUnitLabel", "customDisplayUnit", "type", "minorTimeUnitScale", "majorTimeUnitScale", "baseTimeUnit", "categoryType", "axisGroup", "scaleType", "logBase", "left", "top", "height", "width", "reversePlotOrder", "crosses", "crossesAt", "visible", "isBetweenCategories", "majorTickMark", "minorTickMark", "tickMarkSpacing", "tickLabelPosition", "tickLabelSpacing", "alignment", "multiLevel", "numberFormat", "linkNumberFormat", "offset", "textOrientation", "position", "positionAt"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["MajorUnit", "Maximum", "Minimum", "MinorUnit", "DisplayUnit", "ShowDisplayUnitLabel", "CustomDisplayUnit", "Type", "MinorTimeUnitScale", "MajorTimeUnitScale", "BaseTimeUnit", "CategoryType", "AxisGroup", "ScaleType", "LogBase", "Left", "Top", "Height", "Width", "ReversePlotOrder", "Crosses", "CrossesAt", "Visible", "IsBetweenCategories", "MajorTickMark", "MinorTickMark", "TickMarkSpacing", "TickLabelPosition", "TickLabelSpacing", "Alignment", "MultiLevel", "NumberFormat", "LinkNumberFormat", "Offset", "TextOrientation", "Position", "PositionAt"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, false, false, true, true, true, true, false, true, true, false, false, false, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["majorGridlines", "minorGridlines", "title", "format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartAxisFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "majorGridlines", {
            get: function () {
                if (!this._M) {
                    this._M = _createPropertyObject(Excel.ChartGridlines, this, "MajorGridlines", false, 4);
                }
                return this._M;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "minorGridlines", {
            get: function () {
                if (!this._Min) {
                    this._Min = _createPropertyObject(Excel.ChartGridlines, this, "MinorGridlines", false, 4);
                }
                return this._Min;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "title", {
            get: function () {
                if (!this._Tit) {
                    this._Tit = _createPropertyObject(Excel.ChartAxisTitle, this, "Title", false, 4);
                }
                return this._Tit;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "alignment", {
            get: function () {
                _throwIfNotLoaded("alignment", this._A, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.alignment", _defaultApiSetName, "1.8", _hostName);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "Alignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "axisGroup", {
            get: function () {
                _throwIfNotLoaded("axisGroup", this._Ax, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.axisGroup", _defaultApiSetName, "1.7", _hostName);
                return this._Ax;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "baseTimeUnit", {
            get: function () {
                _throwIfNotLoaded("baseTimeUnit", this._B, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.baseTimeUnit", _defaultApiSetName, "1.7", _hostName);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "BaseTimeUnit", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "categoryType", {
            get: function () {
                _throwIfNotLoaded("categoryType", this._C, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.categoryType", _defaultApiSetName, "1.7", _hostName);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "CategoryType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "crosses", {
            get: function () {
                _throwIfNotLoaded("crosses", this._Cr, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.crosses", _defaultApiSetName, "1.7", _hostName);
                return this._Cr;
            },
            set: function (value) {
                this._Cr = value;
                _invokeSetProperty(this, "Crosses", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "crossesAt", {
            get: function () {
                _throwIfNotLoaded("crossesAt", this._Cro, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.crossesAt", _defaultApiSetName, "1.7", _hostName);
                return this._Cro;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "customDisplayUnit", {
            get: function () {
                _throwIfNotLoaded("customDisplayUnit", this._Cu, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.customDisplayUnit", _defaultApiSetName, "1.7", _hostName);
                return this._Cu;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "displayUnit", {
            get: function () {
                _throwIfNotLoaded("displayUnit", this._D, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.displayUnit", _defaultApiSetName, "1.7", _hostName);
                return this._D;
            },
            set: function (value) {
                this._D = value;
                _invokeSetProperty(this, "DisplayUnit", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._H, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.height", _defaultApiSetName, "1.7", _hostName);
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "isBetweenCategories", {
            get: function () {
                _throwIfNotLoaded("isBetweenCategories", this._I, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.isBetweenCategories", _defaultApiSetName, "1.8", _hostName);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "IsBetweenCategories", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.left", _defaultApiSetName, "1.7", _hostName);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "linkNumberFormat", {
            get: function () {
                _throwIfNotLoaded("linkNumberFormat", this._Li, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.linkNumberFormat", _defaultApiSetName, "1.9", _hostName);
                return this._Li;
            },
            set: function (value) {
                this._Li = value;
                _invokeSetProperty(this, "LinkNumberFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "logBase", {
            get: function () {
                _throwIfNotLoaded("logBase", this._Lo, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.logBase", _defaultApiSetName, "1.7", _hostName);
                return this._Lo;
            },
            set: function (value) {
                this._Lo = value;
                _invokeSetProperty(this, "LogBase", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "majorTickMark", {
            get: function () {
                _throwIfNotLoaded("majorTickMark", this._Ma, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.majorTickMark", _defaultApiSetName, "1.7", _hostName);
                return this._Ma;
            },
            set: function (value) {
                this._Ma = value;
                _invokeSetProperty(this, "MajorTickMark", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "majorTimeUnitScale", {
            get: function () {
                _throwIfNotLoaded("majorTimeUnitScale", this._Maj, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.majorTimeUnitScale", _defaultApiSetName, "1.7", _hostName);
                return this._Maj;
            },
            set: function (value) {
                this._Maj = value;
                _invokeSetProperty(this, "MajorTimeUnitScale", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "majorUnit", {
            get: function () {
                _throwIfNotLoaded("majorUnit", this._Majo, _typeChartAxis, this._isNull);
                return this._Majo;
            },
            set: function (value) {
                this._Majo = value;
                _invokeSetProperty(this, "MajorUnit", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "maximum", {
            get: function () {
                _throwIfNotLoaded("maximum", this._Max, _typeChartAxis, this._isNull);
                return this._Max;
            },
            set: function (value) {
                this._Max = value;
                _invokeSetProperty(this, "Maximum", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "minimum", {
            get: function () {
                _throwIfNotLoaded("minimum", this._Mi, _typeChartAxis, this._isNull);
                return this._Mi;
            },
            set: function (value) {
                this._Mi = value;
                _invokeSetProperty(this, "Minimum", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "minorTickMark", {
            get: function () {
                _throwIfNotLoaded("minorTickMark", this._Mino, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.minorTickMark", _defaultApiSetName, "1.7", _hostName);
                return this._Mino;
            },
            set: function (value) {
                this._Mino = value;
                _invokeSetProperty(this, "MinorTickMark", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "minorTimeUnitScale", {
            get: function () {
                _throwIfNotLoaded("minorTimeUnitScale", this._Minor, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.minorTimeUnitScale", _defaultApiSetName, "1.7", _hostName);
                return this._Minor;
            },
            set: function (value) {
                this._Minor = value;
                _invokeSetProperty(this, "MinorTimeUnitScale", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "minorUnit", {
            get: function () {
                _throwIfNotLoaded("minorUnit", this._MinorU, _typeChartAxis, this._isNull);
                return this._MinorU;
            },
            set: function (value) {
                this._MinorU = value;
                _invokeSetProperty(this, "MinorUnit", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "multiLevel", {
            get: function () {
                _throwIfNotLoaded("multiLevel", this._Mu, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.multiLevel", _defaultApiSetName, "1.8", _hostName);
                return this._Mu;
            },
            set: function (value) {
                this._Mu = value;
                _invokeSetProperty(this, "MultiLevel", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "numberFormat", {
            get: function () {
                _throwIfNotLoaded("numberFormat", this._N, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.numberFormat", _defaultApiSetName, "1.8", _hostName);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "NumberFormat", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "offset", {
            get: function () {
                _throwIfNotLoaded("offset", this._O, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.offset", _defaultApiSetName, "1.8", _hostName);
                return this._O;
            },
            set: function (value) {
                this._O = value;
                _invokeSetProperty(this, "Offset", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "position", {
            get: function () {
                _throwIfNotLoaded("position", this._P, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.position", _defaultApiSetName, "1.8", _hostName);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Position", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "positionAt", {
            get: function () {
                _throwIfNotLoaded("positionAt", this._Po, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.positionAt", _defaultApiSetName, "1.8", _hostName);
                return this._Po;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "reversePlotOrder", {
            get: function () {
                _throwIfNotLoaded("reversePlotOrder", this._R, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.reversePlotOrder", _defaultApiSetName, "1.7", _hostName);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "ReversePlotOrder", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "scaleType", {
            get: function () {
                _throwIfNotLoaded("scaleType", this._S, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.scaleType", _defaultApiSetName, "1.7", _hostName);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ScaleType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "showDisplayUnitLabel", {
            get: function () {
                _throwIfNotLoaded("showDisplayUnitLabel", this._Sh, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.showDisplayUnitLabel", _defaultApiSetName, "1.7", _hostName);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowDisplayUnitLabel", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "textOrientation", {
            get: function () {
                _throwIfNotLoaded("textOrientation", this._T, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.textOrientation", _defaultApiSetName, "1.8", _hostName);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "TextOrientation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "tickLabelPosition", {
            get: function () {
                _throwIfNotLoaded("tickLabelPosition", this._Ti, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.tickLabelPosition", _defaultApiSetName, "1.7", _hostName);
                return this._Ti;
            },
            set: function (value) {
                this._Ti = value;
                _invokeSetProperty(this, "TickLabelPosition", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "tickLabelSpacing", {
            get: function () {
                _throwIfNotLoaded("tickLabelSpacing", this._Tic, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.tickLabelSpacing", _defaultApiSetName, "1.7", _hostName);
                return this._Tic;
            },
            set: function (value) {
                this._Tic = value;
                _invokeSetProperty(this, "TickLabelSpacing", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "tickMarkSpacing", {
            get: function () {
                _throwIfNotLoaded("tickMarkSpacing", this._Tick, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.tickMarkSpacing", _defaultApiSetName, "1.7", _hostName);
                return this._Tick;
            },
            set: function (value) {
                this._Tick = value;
                _invokeSetProperty(this, "TickMarkSpacing", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._To, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.top", _defaultApiSetName, "1.7", _hostName);
                return this._To;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._Ty, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.type", _defaultApiSetName, "1.7", _hostName);
                return this._Ty;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._V, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.visible", _defaultApiSetName, "1.7", _hostName);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Visible", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxis.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeChartAxis, this._isNull);
                _throwIfApiNotSupported("ChartAxis.width", _defaultApiSetName, "1.7", _hostName);
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        ChartAxis.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["majorUnit", "maximum", "minimum", "minorUnit", "displayUnit", "showDisplayUnitLabel", "minorTimeUnitScale", "majorTimeUnitScale", "baseTimeUnit", "categoryType", "scaleType", "logBase", "reversePlotOrder", "crosses", "visible", "isBetweenCategories", "majorTickMark", "minorTickMark", "tickMarkSpacing", "tickLabelPosition", "tickLabelSpacing", "alignment", "multiLevel", "numberFormat", "linkNumberFormat", "offset", "textOrientation", "position"], ["majorGridlines", "minorGridlines", "title", "format"], []);
        };
        ChartAxis.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartAxis.prototype.setCategoryNames = function (sourceData) {
            _throwIfApiNotSupported("ChartAxis.setCategoryNames", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "SetCategoryNames", 0, [sourceData], 0, 0);
        };
        ChartAxis.prototype.setCrossesAt = function (value) {
            _throwIfApiNotSupported("ChartAxis.setCrossesAt", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "SetCrossesAt", 0, [value], 0, 0);
        };
        ChartAxis.prototype.setCustomDisplayUnit = function (value) {
            _throwIfApiNotSupported("ChartAxis.setCustomDisplayUnit", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "SetCustomDisplayUnit", 0, [value], 0, 0);
        };
        ChartAxis.prototype.setPositionAt = function (value) {
            _throwIfApiNotSupported("ChartAxis.setPositionAt", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "SetPositionAt", 0, [value], 0, 0);
        };
        ChartAxis.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Alignment"])) {
                this._A = obj["Alignment"];
            }
            if (!_isUndefined(obj["AxisGroup"])) {
                this._Ax = obj["AxisGroup"];
            }
            if (!_isUndefined(obj["BaseTimeUnit"])) {
                this._B = obj["BaseTimeUnit"];
            }
            if (!_isUndefined(obj["CategoryType"])) {
                this._C = obj["CategoryType"];
            }
            if (!_isUndefined(obj["Crosses"])) {
                this._Cr = obj["Crosses"];
            }
            if (!_isUndefined(obj["CrossesAt"])) {
                this._Cro = obj["CrossesAt"];
            }
            if (!_isUndefined(obj["CustomDisplayUnit"])) {
                this._Cu = obj["CustomDisplayUnit"];
            }
            if (!_isUndefined(obj["DisplayUnit"])) {
                this._D = obj["DisplayUnit"];
            }
            if (!_isUndefined(obj["Height"])) {
                this._H = obj["Height"];
            }
            if (!_isUndefined(obj["IsBetweenCategories"])) {
                this._I = obj["IsBetweenCategories"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["LinkNumberFormat"])) {
                this._Li = obj["LinkNumberFormat"];
            }
            if (!_isUndefined(obj["LogBase"])) {
                this._Lo = obj["LogBase"];
            }
            if (!_isUndefined(obj["MajorTickMark"])) {
                this._Ma = obj["MajorTickMark"];
            }
            if (!_isUndefined(obj["MajorTimeUnitScale"])) {
                this._Maj = obj["MajorTimeUnitScale"];
            }
            if (!_isUndefined(obj["MajorUnit"])) {
                this._Majo = obj["MajorUnit"];
            }
            if (!_isUndefined(obj["Maximum"])) {
                this._Max = obj["Maximum"];
            }
            if (!_isUndefined(obj["Minimum"])) {
                this._Mi = obj["Minimum"];
            }
            if (!_isUndefined(obj["MinorTickMark"])) {
                this._Mino = obj["MinorTickMark"];
            }
            if (!_isUndefined(obj["MinorTimeUnitScale"])) {
                this._Minor = obj["MinorTimeUnitScale"];
            }
            if (!_isUndefined(obj["MinorUnit"])) {
                this._MinorU = obj["MinorUnit"];
            }
            if (!_isUndefined(obj["MultiLevel"])) {
                this._Mu = obj["MultiLevel"];
            }
            if (!_isUndefined(obj["NumberFormat"])) {
                this._N = obj["NumberFormat"];
            }
            if (!_isUndefined(obj["Offset"])) {
                this._O = obj["Offset"];
            }
            if (!_isUndefined(obj["Position"])) {
                this._P = obj["Position"];
            }
            if (!_isUndefined(obj["PositionAt"])) {
                this._Po = obj["PositionAt"];
            }
            if (!_isUndefined(obj["ReversePlotOrder"])) {
                this._R = obj["ReversePlotOrder"];
            }
            if (!_isUndefined(obj["ScaleType"])) {
                this._S = obj["ScaleType"];
            }
            if (!_isUndefined(obj["ShowDisplayUnitLabel"])) {
                this._Sh = obj["ShowDisplayUnitLabel"];
            }
            if (!_isUndefined(obj["TextOrientation"])) {
                this._T = obj["TextOrientation"];
            }
            if (!_isUndefined(obj["TickLabelPosition"])) {
                this._Ti = obj["TickLabelPosition"];
            }
            if (!_isUndefined(obj["TickLabelSpacing"])) {
                this._Tic = obj["TickLabelSpacing"];
            }
            if (!_isUndefined(obj["TickMarkSpacing"])) {
                this._Tick = obj["TickMarkSpacing"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._To = obj["Top"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._Ty = obj["Type"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._V = obj["Visible"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format", "majorGridlines", "MajorGridlines", "minorGridlines", "MinorGridlines", "title", "Title"]);
        };
        ChartAxis.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartAxis.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartAxis.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartAxis.prototype.toJSON = function () {
            return _toJson(this, {
                "alignment": this._A,
                "axisGroup": this._Ax,
                "baseTimeUnit": this._B,
                "categoryType": this._C,
                "crosses": this._Cr,
                "crossesAt": this._Cro,
                "customDisplayUnit": this._Cu,
                "displayUnit": this._D,
                "height": this._H,
                "isBetweenCategories": this._I,
                "left": this._L,
                "linkNumberFormat": this._Li,
                "logBase": this._Lo,
                "majorTickMark": this._Ma,
                "majorTimeUnitScale": this._Maj,
                "majorUnit": this._Majo,
                "maximum": this._Max,
                "minimum": this._Mi,
                "minorTickMark": this._Mino,
                "minorTimeUnitScale": this._Minor,
                "minorUnit": this._MinorU,
                "multiLevel": this._Mu,
                "numberFormat": this._N,
                "offset": this._O,
                "position": this._P,
                "positionAt": this._Po,
                "reversePlotOrder": this._R,
                "scaleType": this._S,
                "showDisplayUnitLabel": this._Sh,
                "textOrientation": this._T,
                "tickLabelPosition": this._Ti,
                "tickLabelSpacing": this._Tic,
                "tickMarkSpacing": this._Tick,
                "top": this._To,
                "type": this._Ty,
                "visible": this._V,
                "width": this._W
            }, {
                "format": this._F,
                "majorGridlines": this._M,
                "minorGridlines": this._Min,
                "title": this._Tit
            });
        };
        ChartAxis.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartAxis.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartAxis;
    }(OfficeExtension.ClientObject));
    Excel.ChartAxis = ChartAxis;
    var _typeChartAxisFormat = "ChartAxisFormat";
    var ChartAxisFormat = (function (_super) {
        __extends(ChartAxisFormat, _super);
        function ChartAxisFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartAxisFormat.prototype, "_className", {
            get: function () {
                return "ChartAxisFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["font", "line", "fill"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisFormat.prototype, "fill", {
            get: function () {
                _throwIfApiNotSupported("ChartAxisFormat.fill", _defaultApiSetName, "1.8", _hostName);
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisFormat.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.ChartFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisFormat.prototype, "line", {
            get: function () {
                if (!this._L) {
                    this._L = _createPropertyObject(Excel.ChartLineFormat, this, "Line", false, 4);
                }
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        ChartAxisFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["font", "line"], [
                "fill"
            ]);
        };
        ChartAxisFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartAxisFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["fill", "Fill", "font", "Font", "line", "Line"]);
        };
        ChartAxisFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartAxisFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartAxisFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartAxisFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "font": this._Fo,
                "line": this._L
            });
        };
        ChartAxisFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartAxisFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartAxisFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartAxisFormat = ChartAxisFormat;
    var _typeChartAxisTitle = "ChartAxisTitle";
    var ChartAxisTitle = (function (_super) {
        __extends(ChartAxisTitle, _super);
        function ChartAxisTitle() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartAxisTitle.prototype, "_className", {
            get: function () {
                return "ChartAxisTitle";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitle.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["text", "visible", "textOrientation"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitle.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Text", "Visible", "TextOrientation"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitle.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitle.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitle.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartAxisTitleFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitle.prototype, "text", {
            get: function () {
                _throwIfNotLoaded("text", this._T, _typeChartAxisTitle, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Text", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitle.prototype, "textOrientation", {
            get: function () {
                _throwIfNotLoaded("textOrientation", this._Te, _typeChartAxisTitle, this._isNull);
                _throwIfApiNotSupported("ChartAxisTitle.textOrientation", _defaultApiSetName, "1.12", _hostName);
                return this._Te;
            },
            set: function (value) {
                this._Te = value;
                _invokeSetProperty(this, "TextOrientation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitle.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._V, _typeChartAxisTitle, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Visible", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        ChartAxisTitle.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["text", "visible", "textOrientation"], ["format"], []);
        };
        ChartAxisTitle.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartAxisTitle.prototype.setFormula = function (formula) {
            _throwIfApiNotSupported("ChartAxisTitle.setFormula", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "SetFormula", 0, [formula], 0, 0);
        };
        ChartAxisTitle.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Text"])) {
                this._T = obj["Text"];
            }
            if (!_isUndefined(obj["TextOrientation"])) {
                this._Te = obj["TextOrientation"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._V = obj["Visible"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        ChartAxisTitle.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartAxisTitle.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartAxisTitle.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartAxisTitle.prototype.toJSON = function () {
            return _toJson(this, {
                "text": this._T,
                "textOrientation": this._Te,
                "visible": this._V
            }, {
                "format": this._F
            });
        };
        ChartAxisTitle.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartAxisTitle.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartAxisTitle;
    }(OfficeExtension.ClientObject));
    Excel.ChartAxisTitle = ChartAxisTitle;
    var _typeChartAxisTitleFormat = "ChartAxisTitleFormat";
    var ChartAxisTitleFormat = (function (_super) {
        __extends(ChartAxisTitleFormat, _super);
        function ChartAxisTitleFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartAxisTitleFormat.prototype, "_className", {
            get: function () {
                return "ChartAxisTitleFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitleFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["font", "fill", "border"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitleFormat.prototype, "border", {
            get: function () {
                _throwIfApiNotSupported("ChartAxisTitleFormat.border", _defaultApiSetName, "1.8", _hostName);
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ChartBorder, this, "Border", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitleFormat.prototype, "fill", {
            get: function () {
                _throwIfApiNotSupported("ChartAxisTitleFormat.fill", _defaultApiSetName, "1.8", _hostName);
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartAxisTitleFormat.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.ChartFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        ChartAxisTitleFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["font", "border"], [
                "fill"
            ]);
        };
        ChartAxisTitleFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartAxisTitleFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["border", "Border", "fill", "Fill", "font", "Font"]);
        };
        ChartAxisTitleFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartAxisTitleFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartAxisTitleFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartAxisTitleFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "border": this._B,
                "font": this._Fo
            });
        };
        ChartAxisTitleFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartAxisTitleFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartAxisTitleFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartAxisTitleFormat = ChartAxisTitleFormat;
    var _typeChartDataLabels = "ChartDataLabels";
    var ChartDataLabels = (function (_super) {
        __extends(ChartDataLabels, _super);
        function ChartDataLabels() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartDataLabels.prototype, "_className", {
            get: function () {
                return "ChartDataLabels";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["position", "showValue", "showSeriesName", "showCategoryName", "showLegendKey", "showPercentage", "showBubbleSize", "separator", "numberFormat", "linkNumberFormat", "textOrientation", "autoText", "horizontalAlignment", "verticalAlignment"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Position", "ShowValue", "ShowSeriesName", "ShowCategoryName", "ShowLegendKey", "ShowPercentage", "ShowBubbleSize", "Separator", "NumberFormat", "LinkNumberFormat", "TextOrientation", "AutoText", "HorizontalAlignment", "VerticalAlignment"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartDataLabelFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "autoText", {
            get: function () {
                _throwIfNotLoaded("autoText", this._A, _typeChartDataLabels, this._isNull);
                _throwIfApiNotSupported("ChartDataLabels.autoText", _defaultApiSetName, "1.8", _hostName);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AutoText", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "horizontalAlignment", {
            get: function () {
                _throwIfNotLoaded("horizontalAlignment", this._H, _typeChartDataLabels, this._isNull);
                _throwIfApiNotSupported("ChartDataLabels.horizontalAlignment", _defaultApiSetName, "1.8", _hostName);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "HorizontalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "linkNumberFormat", {
            get: function () {
                _throwIfNotLoaded("linkNumberFormat", this._L, _typeChartDataLabels, this._isNull);
                _throwIfApiNotSupported("ChartDataLabels.linkNumberFormat", _defaultApiSetName, "1.9", _hostName);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "LinkNumberFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "numberFormat", {
            get: function () {
                _throwIfNotLoaded("numberFormat", this._N, _typeChartDataLabels, this._isNull);
                _throwIfApiNotSupported("ChartDataLabels.numberFormat", _defaultApiSetName, "1.8", _hostName);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "NumberFormat", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "position", {
            get: function () {
                _throwIfNotLoaded("position", this._P, _typeChartDataLabels, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Position", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "separator", {
            get: function () {
                _throwIfNotLoaded("separator", this._S, _typeChartDataLabels, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Separator", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "showBubbleSize", {
            get: function () {
                _throwIfNotLoaded("showBubbleSize", this._Sh, _typeChartDataLabels, this._isNull);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowBubbleSize", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "showCategoryName", {
            get: function () {
                _throwIfNotLoaded("showCategoryName", this._Sho, _typeChartDataLabels, this._isNull);
                return this._Sho;
            },
            set: function (value) {
                this._Sho = value;
                _invokeSetProperty(this, "ShowCategoryName", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "showLegendKey", {
            get: function () {
                _throwIfNotLoaded("showLegendKey", this._Show, _typeChartDataLabels, this._isNull);
                return this._Show;
            },
            set: function (value) {
                this._Show = value;
                _invokeSetProperty(this, "ShowLegendKey", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "showPercentage", {
            get: function () {
                _throwIfNotLoaded("showPercentage", this._ShowP, _typeChartDataLabels, this._isNull);
                return this._ShowP;
            },
            set: function (value) {
                this._ShowP = value;
                _invokeSetProperty(this, "ShowPercentage", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "showSeriesName", {
            get: function () {
                _throwIfNotLoaded("showSeriesName", this._ShowS, _typeChartDataLabels, this._isNull);
                return this._ShowS;
            },
            set: function (value) {
                this._ShowS = value;
                _invokeSetProperty(this, "ShowSeriesName", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "showValue", {
            get: function () {
                _throwIfNotLoaded("showValue", this._ShowV, _typeChartDataLabels, this._isNull);
                return this._ShowV;
            },
            set: function (value) {
                this._ShowV = value;
                _invokeSetProperty(this, "ShowValue", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "textOrientation", {
            get: function () {
                _throwIfNotLoaded("textOrientation", this._T, _typeChartDataLabels, this._isNull);
                _throwIfApiNotSupported("ChartDataLabels.textOrientation", _defaultApiSetName, "1.8", _hostName);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "TextOrientation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabels.prototype, "verticalAlignment", {
            get: function () {
                _throwIfNotLoaded("verticalAlignment", this._V, _typeChartDataLabels, this._isNull);
                _throwIfApiNotSupported("ChartDataLabels.verticalAlignment", _defaultApiSetName, "1.8", _hostName);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "VerticalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartDataLabels.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["position", "showValue", "showSeriesName", "showCategoryName", "showLegendKey", "showPercentage", "showBubbleSize", "separator", "numberFormat", "linkNumberFormat", "textOrientation", "autoText", "horizontalAlignment", "verticalAlignment"], ["format"], []);
        };
        ChartDataLabels.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartDataLabels.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AutoText"])) {
                this._A = obj["AutoText"];
            }
            if (!_isUndefined(obj["HorizontalAlignment"])) {
                this._H = obj["HorizontalAlignment"];
            }
            if (!_isUndefined(obj["LinkNumberFormat"])) {
                this._L = obj["LinkNumberFormat"];
            }
            if (!_isUndefined(obj["NumberFormat"])) {
                this._N = obj["NumberFormat"];
            }
            if (!_isUndefined(obj["Position"])) {
                this._P = obj["Position"];
            }
            if (!_isUndefined(obj["Separator"])) {
                this._S = obj["Separator"];
            }
            if (!_isUndefined(obj["ShowBubbleSize"])) {
                this._Sh = obj["ShowBubbleSize"];
            }
            if (!_isUndefined(obj["ShowCategoryName"])) {
                this._Sho = obj["ShowCategoryName"];
            }
            if (!_isUndefined(obj["ShowLegendKey"])) {
                this._Show = obj["ShowLegendKey"];
            }
            if (!_isUndefined(obj["ShowPercentage"])) {
                this._ShowP = obj["ShowPercentage"];
            }
            if (!_isUndefined(obj["ShowSeriesName"])) {
                this._ShowS = obj["ShowSeriesName"];
            }
            if (!_isUndefined(obj["ShowValue"])) {
                this._ShowV = obj["ShowValue"];
            }
            if (!_isUndefined(obj["TextOrientation"])) {
                this._T = obj["TextOrientation"];
            }
            if (!_isUndefined(obj["VerticalAlignment"])) {
                this._V = obj["VerticalAlignment"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        ChartDataLabels.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartDataLabels.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartDataLabels.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartDataLabels.prototype.toJSON = function () {
            return _toJson(this, {
                "autoText": this._A,
                "horizontalAlignment": this._H,
                "linkNumberFormat": this._L,
                "numberFormat": this._N,
                "position": this._P,
                "separator": this._S,
                "showBubbleSize": this._Sh,
                "showCategoryName": this._Sho,
                "showLegendKey": this._Show,
                "showPercentage": this._ShowP,
                "showSeriesName": this._ShowS,
                "showValue": this._ShowV,
                "textOrientation": this._T,
                "verticalAlignment": this._V
            }, {
                "format": this._F
            });
        };
        ChartDataLabels.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartDataLabels.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartDataLabels;
    }(OfficeExtension.ClientObject));
    Excel.ChartDataLabels = ChartDataLabels;
    var _typeChartDataLabel = "ChartDataLabel";
    var ChartDataLabel = (function (_super) {
        __extends(ChartDataLabel, _super);
        function ChartDataLabel() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartDataLabel.prototype, "_className", {
            get: function () {
                return "ChartDataLabel";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["position", "showValue", "showSeriesName", "showCategoryName", "showLegendKey", "showPercentage", "showBubbleSize", "separator", "top", "left", "width", "height", "formula", "textOrientation", "horizontalAlignment", "verticalAlignment", "text", "autoText", "numberFormat", "linkNumberFormat"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Position", "ShowValue", "ShowSeriesName", "ShowCategoryName", "ShowLegendKey", "ShowPercentage", "ShowBubbleSize", "Separator", "Top", "Left", "Width", "Height", "Formula", "TextOrientation", "HorizontalAlignment", "VerticalAlignment", "Text", "AutoText", "NumberFormat", "LinkNumberFormat"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "format", {
            get: function () {
                _throwIfApiNotSupported("ChartDataLabel.format", _defaultApiSetName, "1.8", _hostName);
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartDataLabelFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "autoText", {
            get: function () {
                _throwIfNotLoaded("autoText", this._A, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.autoText", _defaultApiSetName, "1.8", _hostName);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AutoText", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "formula", {
            get: function () {
                _throwIfNotLoaded("formula", this._Fo, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.formula", _defaultApiSetName, "1.8", _hostName);
                return this._Fo;
            },
            set: function (value) {
                this._Fo = value;
                _invokeSetProperty(this, "Formula", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._H, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.height", _defaultApiSetName, "1.8", _hostName);
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "horizontalAlignment", {
            get: function () {
                _throwIfNotLoaded("horizontalAlignment", this._Ho, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.horizontalAlignment", _defaultApiSetName, "1.8", _hostName);
                return this._Ho;
            },
            set: function (value) {
                this._Ho = value;
                _invokeSetProperty(this, "HorizontalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.left", _defaultApiSetName, "1.8", _hostName);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "Left", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "linkNumberFormat", {
            get: function () {
                _throwIfNotLoaded("linkNumberFormat", this._Li, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.linkNumberFormat", _defaultApiSetName, "1.9", _hostName);
                return this._Li;
            },
            set: function (value) {
                this._Li = value;
                _invokeSetProperty(this, "LinkNumberFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "numberFormat", {
            get: function () {
                _throwIfNotLoaded("numberFormat", this._N, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.numberFormat", _defaultApiSetName, "1.8", _hostName);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "NumberFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "position", {
            get: function () {
                _throwIfNotLoaded("position", this._P, _typeChartDataLabel, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Position", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "separator", {
            get: function () {
                _throwIfNotLoaded("separator", this._S, _typeChartDataLabel, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Separator", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "showBubbleSize", {
            get: function () {
                _throwIfNotLoaded("showBubbleSize", this._Sh, _typeChartDataLabel, this._isNull);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowBubbleSize", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "showCategoryName", {
            get: function () {
                _throwIfNotLoaded("showCategoryName", this._Sho, _typeChartDataLabel, this._isNull);
                return this._Sho;
            },
            set: function (value) {
                this._Sho = value;
                _invokeSetProperty(this, "ShowCategoryName", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "showLegendKey", {
            get: function () {
                _throwIfNotLoaded("showLegendKey", this._Show, _typeChartDataLabel, this._isNull);
                return this._Show;
            },
            set: function (value) {
                this._Show = value;
                _invokeSetProperty(this, "ShowLegendKey", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "showPercentage", {
            get: function () {
                _throwIfNotLoaded("showPercentage", this._ShowP, _typeChartDataLabel, this._isNull);
                return this._ShowP;
            },
            set: function (value) {
                this._ShowP = value;
                _invokeSetProperty(this, "ShowPercentage", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "showSeriesName", {
            get: function () {
                _throwIfNotLoaded("showSeriesName", this._ShowS, _typeChartDataLabel, this._isNull);
                return this._ShowS;
            },
            set: function (value) {
                this._ShowS = value;
                _invokeSetProperty(this, "ShowSeriesName", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "showValue", {
            get: function () {
                _throwIfNotLoaded("showValue", this._ShowV, _typeChartDataLabel, this._isNull);
                return this._ShowV;
            },
            set: function (value) {
                this._ShowV = value;
                _invokeSetProperty(this, "ShowValue", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "text", {
            get: function () {
                _throwIfNotLoaded("text", this._T, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.text", _defaultApiSetName, "1.8", _hostName);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Text", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "textOrientation", {
            get: function () {
                _throwIfNotLoaded("textOrientation", this._Te, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.textOrientation", _defaultApiSetName, "1.8", _hostName);
                return this._Te;
            },
            set: function (value) {
                this._Te = value;
                _invokeSetProperty(this, "TextOrientation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._To, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.top", _defaultApiSetName, "1.8", _hostName);
                return this._To;
            },
            set: function (value) {
                this._To = value;
                _invokeSetProperty(this, "Top", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "verticalAlignment", {
            get: function () {
                _throwIfNotLoaded("verticalAlignment", this._V, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.verticalAlignment", _defaultApiSetName, "1.8", _hostName);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "VerticalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabel.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeChartDataLabel, this._isNull);
                _throwIfApiNotSupported("ChartDataLabel.width", _defaultApiSetName, "1.8", _hostName);
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        ChartDataLabel.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["position", "showValue", "showSeriesName", "showCategoryName", "showLegendKey", "showPercentage", "showBubbleSize", "separator", "top", "left", "formula", "textOrientation", "horizontalAlignment", "verticalAlignment", "text", "autoText", "numberFormat", "linkNumberFormat"], ["format"], []);
        };
        ChartDataLabel.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartDataLabel.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AutoText"])) {
                this._A = obj["AutoText"];
            }
            if (!_isUndefined(obj["Formula"])) {
                this._Fo = obj["Formula"];
            }
            if (!_isUndefined(obj["Height"])) {
                this._H = obj["Height"];
            }
            if (!_isUndefined(obj["HorizontalAlignment"])) {
                this._Ho = obj["HorizontalAlignment"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["LinkNumberFormat"])) {
                this._Li = obj["LinkNumberFormat"];
            }
            if (!_isUndefined(obj["NumberFormat"])) {
                this._N = obj["NumberFormat"];
            }
            if (!_isUndefined(obj["Position"])) {
                this._P = obj["Position"];
            }
            if (!_isUndefined(obj["Separator"])) {
                this._S = obj["Separator"];
            }
            if (!_isUndefined(obj["ShowBubbleSize"])) {
                this._Sh = obj["ShowBubbleSize"];
            }
            if (!_isUndefined(obj["ShowCategoryName"])) {
                this._Sho = obj["ShowCategoryName"];
            }
            if (!_isUndefined(obj["ShowLegendKey"])) {
                this._Show = obj["ShowLegendKey"];
            }
            if (!_isUndefined(obj["ShowPercentage"])) {
                this._ShowP = obj["ShowPercentage"];
            }
            if (!_isUndefined(obj["ShowSeriesName"])) {
                this._ShowS = obj["ShowSeriesName"];
            }
            if (!_isUndefined(obj["ShowValue"])) {
                this._ShowV = obj["ShowValue"];
            }
            if (!_isUndefined(obj["Text"])) {
                this._T = obj["Text"];
            }
            if (!_isUndefined(obj["TextOrientation"])) {
                this._Te = obj["TextOrientation"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._To = obj["Top"];
            }
            if (!_isUndefined(obj["VerticalAlignment"])) {
                this._V = obj["VerticalAlignment"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        ChartDataLabel.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartDataLabel.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartDataLabel.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartDataLabel.prototype.toJSON = function () {
            return _toJson(this, {
                "autoText": this._A,
                "formula": this._Fo,
                "height": this._H,
                "horizontalAlignment": this._Ho,
                "left": this._L,
                "linkNumberFormat": this._Li,
                "numberFormat": this._N,
                "position": this._P,
                "separator": this._S,
                "showBubbleSize": this._Sh,
                "showCategoryName": this._Sho,
                "showLegendKey": this._Show,
                "showPercentage": this._ShowP,
                "showSeriesName": this._ShowS,
                "showValue": this._ShowV,
                "text": this._T,
                "textOrientation": this._Te,
                "top": this._To,
                "verticalAlignment": this._V,
                "width": this._W
            }, {
                "format": this._F
            });
        };
        ChartDataLabel.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartDataLabel.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartDataLabel;
    }(OfficeExtension.ClientObject));
    Excel.ChartDataLabel = ChartDataLabel;
    var _typeChartDataLabelFormat = "ChartDataLabelFormat";
    var ChartDataLabelFormat = (function (_super) {
        __extends(ChartDataLabelFormat, _super);
        function ChartDataLabelFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartDataLabelFormat.prototype, "_className", {
            get: function () {
                return "ChartDataLabelFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabelFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["font", "fill", "border"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabelFormat.prototype, "border", {
            get: function () {
                _throwIfApiNotSupported("ChartDataLabelFormat.border", _defaultApiSetName, "1.8", _hostName);
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ChartBorder, this, "Border", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabelFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataLabelFormat.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.ChartFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        ChartDataLabelFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["font", "border"], [
                "fill"
            ]);
        };
        ChartDataLabelFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartDataLabelFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["border", "Border", "fill", "Fill", "font", "Font"]);
        };
        ChartDataLabelFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartDataLabelFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartDataLabelFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartDataLabelFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "border": this._B,
                "font": this._Fo
            });
        };
        ChartDataLabelFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartDataLabelFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartDataLabelFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartDataLabelFormat = ChartDataLabelFormat;
    var _typeChartDataTable = "ChartDataTable";
    var ChartDataTable = (function (_super) {
        __extends(ChartDataTable, _super);
        function ChartDataTable() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartDataTable.prototype, "_className", {
            get: function () {
                return "ChartDataTable";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTable.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["visible", "showLegendKey", "showHorizontalBorder", "showVerticalBorder", "showOutlineBorder"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTable.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Visible", "ShowLegendKey", "ShowHorizontalBorder", "ShowVerticalBorder", "ShowOutlineBorder"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTable.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTable.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTable.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartDataTableFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTable.prototype, "showHorizontalBorder", {
            get: function () {
                _throwIfNotLoaded("showHorizontalBorder", this._S, _typeChartDataTable, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowHorizontalBorder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTable.prototype, "showLegendKey", {
            get: function () {
                _throwIfNotLoaded("showLegendKey", this._Sh, _typeChartDataTable, this._isNull);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowLegendKey", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTable.prototype, "showOutlineBorder", {
            get: function () {
                _throwIfNotLoaded("showOutlineBorder", this._Sho, _typeChartDataTable, this._isNull);
                return this._Sho;
            },
            set: function (value) {
                this._Sho = value;
                _invokeSetProperty(this, "ShowOutlineBorder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTable.prototype, "showVerticalBorder", {
            get: function () {
                _throwIfNotLoaded("showVerticalBorder", this._Show, _typeChartDataTable, this._isNull);
                return this._Show;
            },
            set: function (value) {
                this._Show = value;
                _invokeSetProperty(this, "ShowVerticalBorder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTable.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._V, _typeChartDataTable, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Visible", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartDataTable.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["visible", "showLegendKey", "showHorizontalBorder", "showVerticalBorder", "showOutlineBorder"], ["format"], []);
        };
        ChartDataTable.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartDataTable.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["ShowHorizontalBorder"])) {
                this._S = obj["ShowHorizontalBorder"];
            }
            if (!_isUndefined(obj["ShowLegendKey"])) {
                this._Sh = obj["ShowLegendKey"];
            }
            if (!_isUndefined(obj["ShowOutlineBorder"])) {
                this._Sho = obj["ShowOutlineBorder"];
            }
            if (!_isUndefined(obj["ShowVerticalBorder"])) {
                this._Show = obj["ShowVerticalBorder"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._V = obj["Visible"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        ChartDataTable.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartDataTable.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartDataTable.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartDataTable.prototype.toJSON = function () {
            return _toJson(this, {
                "showHorizontalBorder": this._S,
                "showLegendKey": this._Sh,
                "showOutlineBorder": this._Sho,
                "showVerticalBorder": this._Show,
                "visible": this._V
            }, {
                "format": this._F
            });
        };
        ChartDataTable.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartDataTable.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartDataTable;
    }(OfficeExtension.ClientObject));
    Excel.ChartDataTable = ChartDataTable;
    var _typeChartDataTableFormat = "ChartDataTableFormat";
    var ChartDataTableFormat = (function (_super) {
        __extends(ChartDataTableFormat, _super);
        function ChartDataTableFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartDataTableFormat.prototype, "_className", {
            get: function () {
                return "ChartDataTableFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTableFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["fill", "font", "border"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTableFormat.prototype, "border", {
            get: function () {
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ChartBorder, this, "Border", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTableFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartDataTableFormat.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.ChartFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        ChartDataTableFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["font", "border"], [
                "fill"
            ]);
        };
        ChartDataTableFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartDataTableFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["border", "Border", "fill", "Fill", "font", "Font"]);
        };
        ChartDataTableFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartDataTableFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartDataTableFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartDataTableFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "border": this._B,
                "font": this._Fo
            });
        };
        ChartDataTableFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartDataTableFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartDataTableFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartDataTableFormat = ChartDataTableFormat;
    var _typeChartErrorBars = "ChartErrorBars";
    var ChartErrorBars = (function (_super) {
        __extends(ChartErrorBars, _super);
        function ChartErrorBars() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartErrorBars.prototype, "_className", {
            get: function () {
                return "ChartErrorBars";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBars.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["endStyleCap", "include", "type", "visible"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBars.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["EndStyleCap", "Include", "Type", "Visible"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBars.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBars.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBars.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartErrorBarsFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBars.prototype, "endStyleCap", {
            get: function () {
                _throwIfNotLoaded("endStyleCap", this._E, _typeChartErrorBars, this._isNull);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "EndStyleCap", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBars.prototype, "include", {
            get: function () {
                _throwIfNotLoaded("include", this._I, _typeChartErrorBars, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "Include", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBars.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._T, _typeChartErrorBars, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Type", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBars.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._V, _typeChartErrorBars, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Visible", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartErrorBars.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["endStyleCap", "include", "type", "visible"], ["format"], []);
        };
        ChartErrorBars.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartErrorBars.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["EndStyleCap"])) {
                this._E = obj["EndStyleCap"];
            }
            if (!_isUndefined(obj["Include"])) {
                this._I = obj["Include"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._T = obj["Type"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._V = obj["Visible"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        ChartErrorBars.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartErrorBars.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartErrorBars.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartErrorBars.prototype.toJSON = function () {
            return _toJson(this, {
                "endStyleCap": this._E,
                "include": this._I,
                "type": this._T,
                "visible": this._V
            }, {
                "format": this._F
            });
        };
        ChartErrorBars.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartErrorBars.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartErrorBars;
    }(OfficeExtension.ClientObject));
    Excel.ChartErrorBars = ChartErrorBars;
    var _typeChartErrorBarsFormat = "ChartErrorBarsFormat";
    var ChartErrorBarsFormat = (function (_super) {
        __extends(ChartErrorBarsFormat, _super);
        function ChartErrorBarsFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartErrorBarsFormat.prototype, "_className", {
            get: function () {
                return "ChartErrorBarsFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBarsFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["line"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartErrorBarsFormat.prototype, "line", {
            get: function () {
                if (!this._L) {
                    this._L = _createPropertyObject(Excel.ChartLineFormat, this, "Line", false, 4);
                }
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        ChartErrorBarsFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["line"], []);
        };
        ChartErrorBarsFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartErrorBarsFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["line", "Line"]);
        };
        ChartErrorBarsFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartErrorBarsFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartErrorBarsFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartErrorBarsFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "line": this._L
            });
        };
        ChartErrorBarsFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartErrorBarsFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartErrorBarsFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartErrorBarsFormat = ChartErrorBarsFormat;
    var _typeChartGridlines = "ChartGridlines";
    var ChartGridlines = (function (_super) {
        __extends(ChartGridlines, _super);
        function ChartGridlines() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartGridlines.prototype, "_className", {
            get: function () {
                return "ChartGridlines";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartGridlines.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["visible"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartGridlines.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Visible"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartGridlines.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartGridlines.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartGridlines.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartGridlinesFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartGridlines.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._V, _typeChartGridlines, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Visible", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        ChartGridlines.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["visible"], ["format"], []);
        };
        ChartGridlines.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartGridlines.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Visible"])) {
                this._V = obj["Visible"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        ChartGridlines.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartGridlines.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartGridlines.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartGridlines.prototype.toJSON = function () {
            return _toJson(this, {
                "visible": this._V
            }, {
                "format": this._F
            });
        };
        ChartGridlines.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartGridlines.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartGridlines;
    }(OfficeExtension.ClientObject));
    Excel.ChartGridlines = ChartGridlines;
    var _typeChartGridlinesFormat = "ChartGridlinesFormat";
    var ChartGridlinesFormat = (function (_super) {
        __extends(ChartGridlinesFormat, _super);
        function ChartGridlinesFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartGridlinesFormat.prototype, "_className", {
            get: function () {
                return "ChartGridlinesFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartGridlinesFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["line"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartGridlinesFormat.prototype, "line", {
            get: function () {
                if (!this._L) {
                    this._L = _createPropertyObject(Excel.ChartLineFormat, this, "Line", false, 4);
                }
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        ChartGridlinesFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["line"], []);
        };
        ChartGridlinesFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartGridlinesFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["line", "Line"]);
        };
        ChartGridlinesFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartGridlinesFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartGridlinesFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartGridlinesFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "line": this._L
            });
        };
        ChartGridlinesFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartGridlinesFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartGridlinesFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartGridlinesFormat = ChartGridlinesFormat;
    var _typeChartLegend = "ChartLegend";
    var ChartLegend = (function (_super) {
        __extends(ChartLegend, _super);
        function ChartLegend() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartLegend.prototype, "_className", {
            get: function () {
                return "ChartLegend";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["visible", "position", "overlay", "left", "top", "width", "height", "showShadow"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Visible", "Position", "Overlay", "Left", "Top", "Width", "Height", "ShowShadow"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format", "legendEntries"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartLegendFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "legendEntries", {
            get: function () {
                _throwIfApiNotSupported("ChartLegend.legendEntries", _defaultApiSetName, "1.7", _hostName);
                if (!this._Le) {
                    this._Le = _createPropertyObject(Excel.ChartLegendEntryCollection, this, "LegendEntries", true, 4);
                }
                return this._Le;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._H, _typeChartLegend, this._isNull);
                _throwIfApiNotSupported("ChartLegend.height", _defaultApiSetName, "1.7", _hostName);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "Height", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeChartLegend, this._isNull);
                _throwIfApiNotSupported("ChartLegend.left", _defaultApiSetName, "1.7", _hostName);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "Left", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "overlay", {
            get: function () {
                _throwIfNotLoaded("overlay", this._O, _typeChartLegend, this._isNull);
                return this._O;
            },
            set: function (value) {
                this._O = value;
                _invokeSetProperty(this, "Overlay", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "position", {
            get: function () {
                _throwIfNotLoaded("position", this._P, _typeChartLegend, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Position", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "showShadow", {
            get: function () {
                _throwIfNotLoaded("showShadow", this._S, _typeChartLegend, this._isNull);
                _throwIfApiNotSupported("ChartLegend.showShadow", _defaultApiSetName, "1.7", _hostName);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowShadow", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._T, _typeChartLegend, this._isNull);
                _throwIfApiNotSupported("ChartLegend.top", _defaultApiSetName, "1.7", _hostName);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Top", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._V, _typeChartLegend, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Visible", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegend.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeChartLegend, this._isNull);
                _throwIfApiNotSupported("ChartLegend.width", _defaultApiSetName, "1.7", _hostName);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "Width", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartLegend.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["visible", "position", "overlay", "left", "top", "width", "height", "showShadow"], ["format"], [
                "legendEntries"
            ]);
        };
        ChartLegend.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartLegend.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Height"])) {
                this._H = obj["Height"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["Overlay"])) {
                this._O = obj["Overlay"];
            }
            if (!_isUndefined(obj["Position"])) {
                this._P = obj["Position"];
            }
            if (!_isUndefined(obj["ShowShadow"])) {
                this._S = obj["ShowShadow"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._T = obj["Top"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._V = obj["Visible"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format", "legendEntries", "LegendEntries"]);
        };
        ChartLegend.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartLegend.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartLegend.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartLegend.prototype.toJSON = function () {
            return _toJson(this, {
                "height": this._H,
                "left": this._L,
                "overlay": this._O,
                "position": this._P,
                "showShadow": this._S,
                "top": this._T,
                "visible": this._V,
                "width": this._W
            }, {
                "format": this._F,
                "legendEntries": this._Le
            });
        };
        ChartLegend.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartLegend.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartLegend;
    }(OfficeExtension.ClientObject));
    Excel.ChartLegend = ChartLegend;
    var _typeChartLegendEntry = "ChartLegendEntry";
    var ChartLegendEntry = (function (_super) {
        __extends(ChartLegendEntry, _super);
        function ChartLegendEntry() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartLegendEntry.prototype, "_className", {
            get: function () {
                return "ChartLegendEntry";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntry.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["visible", "left", "top", "width", "height", "index"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntry.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Visible", "Left", "Top", "Width", "Height", "Index"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntry.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, false, false, false, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntry.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._H, _typeChartLegendEntry, this._isNull);
                _throwIfApiNotSupported("ChartLegendEntry.height", _defaultApiSetName, "1.8", _hostName);
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntry.prototype, "index", {
            get: function () {
                _throwIfNotLoaded("index", this._I, _typeChartLegendEntry, this._isNull);
                _throwIfApiNotSupported("ChartLegendEntry.index", _defaultApiSetName, "1.8", _hostName);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntry.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeChartLegendEntry, this._isNull);
                _throwIfApiNotSupported("ChartLegendEntry.left", _defaultApiSetName, "1.8", _hostName);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntry.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._T, _typeChartLegendEntry, this._isNull);
                _throwIfApiNotSupported("ChartLegendEntry.top", _defaultApiSetName, "1.8", _hostName);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntry.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._V, _typeChartLegendEntry, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Visible", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntry.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeChartLegendEntry, this._isNull);
                _throwIfApiNotSupported("ChartLegendEntry.width", _defaultApiSetName, "1.8", _hostName);
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        ChartLegendEntry.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["visible"], [], []);
        };
        ChartLegendEntry.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartLegendEntry.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Height"])) {
                this._H = obj["Height"];
            }
            if (!_isUndefined(obj["Index"])) {
                this._I = obj["Index"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._T = obj["Top"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._V = obj["Visible"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
        };
        ChartLegendEntry.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartLegendEntry.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartLegendEntry.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartLegendEntry.prototype.toJSON = function () {
            return _toJson(this, {
                "height": this._H,
                "index": this._I,
                "left": this._L,
                "top": this._T,
                "visible": this._V,
                "width": this._W
            }, {});
        };
        ChartLegendEntry.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartLegendEntry.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartLegendEntry;
    }(OfficeExtension.ClientObject));
    Excel.ChartLegendEntry = ChartLegendEntry;
    var _typeChartLegendEntryCollection = "ChartLegendEntryCollection";
    var ChartLegendEntryCollection = (function (_super) {
        __extends(ChartLegendEntryCollection, _super);
        function ChartLegendEntryCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartLegendEntryCollection.prototype, "_className", {
            get: function () {
                return "ChartLegendEntryCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntryCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendEntryCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeChartLegendEntryCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        ChartLegendEntryCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        ChartLegendEntryCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.ChartLegendEntry, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        ChartLegendEntryCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.ChartLegendEntry, false, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        ChartLegendEntryCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartLegendEntryCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartLegendEntryCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.ChartLegendEntry, false, _this, childItemData, index); });
        };
        ChartLegendEntryCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        ChartLegendEntryCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.ChartLegendEntry, false, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return ChartLegendEntryCollection;
    }(OfficeExtension.ClientObject));
    Excel.ChartLegendEntryCollection = ChartLegendEntryCollection;
    var _typeChartLegendFormat = "ChartLegendFormat";
    var ChartLegendFormat = (function (_super) {
        __extends(ChartLegendFormat, _super);
        function ChartLegendFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartLegendFormat.prototype, "_className", {
            get: function () {
                return "ChartLegendFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["font", "fill", "border"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendFormat.prototype, "border", {
            get: function () {
                _throwIfApiNotSupported("ChartLegendFormat.border", _defaultApiSetName, "1.8", _hostName);
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ChartBorder, this, "Border", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLegendFormat.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.ChartFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        ChartLegendFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["font", "border"], [
                "fill"
            ]);
        };
        ChartLegendFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartLegendFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["border", "Border", "fill", "Fill", "font", "Font"]);
        };
        ChartLegendFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartLegendFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartLegendFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartLegendFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "border": this._B,
                "font": this._Fo
            });
        };
        ChartLegendFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartLegendFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartLegendFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartLegendFormat = ChartLegendFormat;
    var _typeChartMapOptions = "ChartMapOptions";
    var ChartMapOptions = (function (_super) {
        __extends(ChartMapOptions, _super);
        function ChartMapOptions() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartMapOptions.prototype, "_className", {
            get: function () {
                return "ChartMapOptions";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartMapOptions.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["level", "labelStrategy", "projectionType"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartMapOptions.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Level", "LabelStrategy", "ProjectionType"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartMapOptions.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartMapOptions.prototype, "labelStrategy", {
            get: function () {
                _throwIfNotLoaded("labelStrategy", this._L, _typeChartMapOptions, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "LabelStrategy", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartMapOptions.prototype, "level", {
            get: function () {
                _throwIfNotLoaded("level", this._Le, _typeChartMapOptions, this._isNull);
                return this._Le;
            },
            set: function (value) {
                this._Le = value;
                _invokeSetProperty(this, "Level", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartMapOptions.prototype, "projectionType", {
            get: function () {
                _throwIfNotLoaded("projectionType", this._P, _typeChartMapOptions, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "ProjectionType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartMapOptions.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["level", "labelStrategy", "projectionType"], [], []);
        };
        ChartMapOptions.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartMapOptions.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["LabelStrategy"])) {
                this._L = obj["LabelStrategy"];
            }
            if (!_isUndefined(obj["Level"])) {
                this._Le = obj["Level"];
            }
            if (!_isUndefined(obj["ProjectionType"])) {
                this._P = obj["ProjectionType"];
            }
        };
        ChartMapOptions.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartMapOptions.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartMapOptions.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartMapOptions.prototype.toJSON = function () {
            return _toJson(this, {
                "labelStrategy": this._L,
                "level": this._Le,
                "projectionType": this._P
            }, {});
        };
        ChartMapOptions.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartMapOptions.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartMapOptions;
    }(OfficeExtension.ClientObject));
    Excel.ChartMapOptions = ChartMapOptions;
    var _typeChartTitle = "ChartTitle";
    var ChartTitle = (function (_super) {
        __extends(ChartTitle, _super);
        function ChartTitle() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartTitle.prototype, "_className", {
            get: function () {
                return "ChartTitle";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["visible", "text", "overlay", "horizontalAlignment", "top", "left", "width", "height", "verticalAlignment", "textOrientation", "position", "showShadow"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Visible", "Text", "Overlay", "HorizontalAlignment", "Top", "Left", "Width", "Height", "VerticalAlignment", "TextOrientation", "Position", "ShowShadow"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, false, false, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartTitleFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._H, _typeChartTitle, this._isNull);
                _throwIfApiNotSupported("ChartTitle.height", _defaultApiSetName, "1.7", _hostName);
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "horizontalAlignment", {
            get: function () {
                _throwIfNotLoaded("horizontalAlignment", this._Ho, _typeChartTitle, this._isNull);
                _throwIfApiNotSupported("ChartTitle.horizontalAlignment", _defaultApiSetName, "1.7", _hostName);
                return this._Ho;
            },
            set: function (value) {
                this._Ho = value;
                _invokeSetProperty(this, "HorizontalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeChartTitle, this._isNull);
                _throwIfApiNotSupported("ChartTitle.left", _defaultApiSetName, "1.7", _hostName);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "Left", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "overlay", {
            get: function () {
                _throwIfNotLoaded("overlay", this._O, _typeChartTitle, this._isNull);
                return this._O;
            },
            set: function (value) {
                this._O = value;
                _invokeSetProperty(this, "Overlay", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "position", {
            get: function () {
                _throwIfNotLoaded("position", this._P, _typeChartTitle, this._isNull);
                _throwIfApiNotSupported("ChartTitle.position", _defaultApiSetName, "1.7", _hostName);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Position", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "showShadow", {
            get: function () {
                _throwIfNotLoaded("showShadow", this._S, _typeChartTitle, this._isNull);
                _throwIfApiNotSupported("ChartTitle.showShadow", _defaultApiSetName, "1.7", _hostName);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowShadow", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "text", {
            get: function () {
                _throwIfNotLoaded("text", this._T, _typeChartTitle, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Text", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "textOrientation", {
            get: function () {
                _throwIfNotLoaded("textOrientation", this._Te, _typeChartTitle, this._isNull);
                _throwIfApiNotSupported("ChartTitle.textOrientation", _defaultApiSetName, "1.7", _hostName);
                return this._Te;
            },
            set: function (value) {
                this._Te = value;
                _invokeSetProperty(this, "TextOrientation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._To, _typeChartTitle, this._isNull);
                _throwIfApiNotSupported("ChartTitle.top", _defaultApiSetName, "1.7", _hostName);
                return this._To;
            },
            set: function (value) {
                this._To = value;
                _invokeSetProperty(this, "Top", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "verticalAlignment", {
            get: function () {
                _throwIfNotLoaded("verticalAlignment", this._V, _typeChartTitle, this._isNull);
                _throwIfApiNotSupported("ChartTitle.verticalAlignment", _defaultApiSetName, "1.7", _hostName);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "VerticalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._Vi, _typeChartTitle, this._isNull);
                return this._Vi;
            },
            set: function (value) {
                this._Vi = value;
                _invokeSetProperty(this, "Visible", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitle.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeChartTitle, this._isNull);
                _throwIfApiNotSupported("ChartTitle.width", _defaultApiSetName, "1.7", _hostName);
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        ChartTitle.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["visible", "text", "overlay", "horizontalAlignment", "top", "left", "verticalAlignment", "textOrientation", "position", "showShadow"], ["format"], []);
        };
        ChartTitle.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartTitle.prototype.getSubstring = function (start, length) {
            _throwIfApiNotSupported("ChartTitle.getSubstring", _defaultApiSetName, "1.7", _hostName);
            return _createMethodObject(Excel.ChartFormatString, this, "GetSubstring", 1, [start, length], false, false, null, 4);
        };
        ChartTitle.prototype.setFormula = function (formula) {
            _throwIfApiNotSupported("ChartTitle.setFormula", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "SetFormula", 0, [formula], 0, 0);
        };
        ChartTitle.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Height"])) {
                this._H = obj["Height"];
            }
            if (!_isUndefined(obj["HorizontalAlignment"])) {
                this._Ho = obj["HorizontalAlignment"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["Overlay"])) {
                this._O = obj["Overlay"];
            }
            if (!_isUndefined(obj["Position"])) {
                this._P = obj["Position"];
            }
            if (!_isUndefined(obj["ShowShadow"])) {
                this._S = obj["ShowShadow"];
            }
            if (!_isUndefined(obj["Text"])) {
                this._T = obj["Text"];
            }
            if (!_isUndefined(obj["TextOrientation"])) {
                this._Te = obj["TextOrientation"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._To = obj["Top"];
            }
            if (!_isUndefined(obj["VerticalAlignment"])) {
                this._V = obj["VerticalAlignment"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._Vi = obj["Visible"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        ChartTitle.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartTitle.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartTitle.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartTitle.prototype.toJSON = function () {
            return _toJson(this, {
                "height": this._H,
                "horizontalAlignment": this._Ho,
                "left": this._L,
                "overlay": this._O,
                "position": this._P,
                "showShadow": this._S,
                "text": this._T,
                "textOrientation": this._Te,
                "top": this._To,
                "verticalAlignment": this._V,
                "visible": this._Vi,
                "width": this._W
            }, {
                "format": this._F
            });
        };
        ChartTitle.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartTitle.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartTitle;
    }(OfficeExtension.ClientObject));
    Excel.ChartTitle = ChartTitle;
    var _typeChartFormatString = "ChartFormatString";
    var ChartFormatString = (function (_super) {
        __extends(ChartFormatString, _super);
        function ChartFormatString() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartFormatString.prototype, "_className", {
            get: function () {
                return "ChartFormatString";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFormatString.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["font"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFormatString.prototype, "font", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFont, this, "Font", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        ChartFormatString.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["font"], []);
        };
        ChartFormatString.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartFormatString.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["font", "Font"]);
        };
        ChartFormatString.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartFormatString.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartFormatString.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartFormatString.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "font": this._F
            });
        };
        ChartFormatString.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartFormatString.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartFormatString;
    }(OfficeExtension.ClientObject));
    Excel.ChartFormatString = ChartFormatString;
    var _typeChartTitleFormat = "ChartTitleFormat";
    var ChartTitleFormat = (function (_super) {
        __extends(ChartTitleFormat, _super);
        function ChartTitleFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartTitleFormat.prototype, "_className", {
            get: function () {
                return "ChartTitleFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitleFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["font", "fill", "border"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitleFormat.prototype, "border", {
            get: function () {
                _throwIfApiNotSupported("ChartTitleFormat.border", _defaultApiSetName, "1.7", _hostName);
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ChartBorder, this, "Border", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitleFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTitleFormat.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.ChartFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        ChartTitleFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["font", "border"], [
                "fill"
            ]);
        };
        ChartTitleFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartTitleFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["border", "Border", "fill", "Fill", "font", "Font"]);
        };
        ChartTitleFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartTitleFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartTitleFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartTitleFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "border": this._B,
                "font": this._Fo
            });
        };
        ChartTitleFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartTitleFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartTitleFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartTitleFormat = ChartTitleFormat;
    var _typeChartFill = "ChartFill";
    var ChartFill = (function (_super) {
        __extends(ChartFill, _super);
        function ChartFill() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartFill.prototype, "_className", {
            get: function () {
                return "ChartFill";
            },
            enumerable: true,
            configurable: true
        });
        ChartFill.prototype.clear = function () {
            _invokeMethod(this, "Clear", 0, [], 0, 0);
        };
        ChartFill.prototype.setSolidColor = function (color) {
            _invokeMethod(this, "SetSolidColor", 0, [color], _calculateApiFlags(2, "ExcelApiUndo", "1.5"), 0);
        };
        ChartFill.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        ChartFill.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartFill.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return ChartFill;
    }(OfficeExtension.ClientObject));
    Excel.ChartFill = ChartFill;
    var ChartFillCustom = (function () {
        function ChartFillCustom() {
        }
        ChartFillCustom.prototype.load = function (option) {
            _load(this, option);
            return this;
        };
        return ChartFillCustom;
    }());
    Excel.ChartFillCustom = ChartFillCustom;
    OfficeExtension.Utility.applyMixin(ChartFill, ChartFillCustom);
    var _typeChartBorder = "ChartBorder";
    var ChartBorder = (function (_super) {
        __extends(ChartBorder, _super);
        function ChartBorder() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartBorder.prototype, "_className", {
            get: function () {
                return "ChartBorder";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBorder.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["color", "lineStyle", "weight"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBorder.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Color", "LineStyle", "Weight"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBorder.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBorder.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeChartBorder, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBorder.prototype, "lineStyle", {
            get: function () {
                _throwIfNotLoaded("lineStyle", this._L, _typeChartBorder, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "LineStyle", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBorder.prototype, "weight", {
            get: function () {
                _throwIfNotLoaded("weight", this._W, _typeChartBorder, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "Weight", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        ChartBorder.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["color", "lineStyle", "weight"], [], []);
        };
        ChartBorder.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartBorder.prototype.clear = function () {
            _throwIfApiNotSupported("ChartBorder.clear", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "Clear", 0, [], 0, 0);
        };
        ChartBorder.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
            if (!_isUndefined(obj["LineStyle"])) {
                this._L = obj["LineStyle"];
            }
            if (!_isUndefined(obj["Weight"])) {
                this._W = obj["Weight"];
            }
        };
        ChartBorder.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartBorder.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartBorder.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartBorder.prototype.toJSON = function () {
            return _toJson(this, {
                "color": this._C,
                "lineStyle": this._L,
                "weight": this._W
            }, {});
        };
        ChartBorder.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartBorder.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartBorder;
    }(OfficeExtension.ClientObject));
    Excel.ChartBorder = ChartBorder;
    var _typeChartBinOptions = "ChartBinOptions";
    var ChartBinOptions = (function (_super) {
        __extends(ChartBinOptions, _super);
        function ChartBinOptions() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartBinOptions.prototype, "_className", {
            get: function () {
                return "ChartBinOptions";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBinOptions.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["type", "width", "count", "allowOverflow", "allowUnderflow", "overflowValue", "underflowValue"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBinOptions.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Type", "Width", "Count", "AllowOverflow", "AllowUnderflow", "OverflowValue", "UnderflowValue"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBinOptions.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBinOptions.prototype, "allowOverflow", {
            get: function () {
                _throwIfNotLoaded("allowOverflow", this._A, _typeChartBinOptions, this._isNull);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AllowOverflow", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBinOptions.prototype, "allowUnderflow", {
            get: function () {
                _throwIfNotLoaded("allowUnderflow", this._Al, _typeChartBinOptions, this._isNull);
                return this._Al;
            },
            set: function (value) {
                this._Al = value;
                _invokeSetProperty(this, "AllowUnderflow", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBinOptions.prototype, "count", {
            get: function () {
                _throwIfNotLoaded("count", this._C, _typeChartBinOptions, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Count", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBinOptions.prototype, "overflowValue", {
            get: function () {
                _throwIfNotLoaded("overflowValue", this._O, _typeChartBinOptions, this._isNull);
                return this._O;
            },
            set: function (value) {
                this._O = value;
                _invokeSetProperty(this, "OverflowValue", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBinOptions.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._T, _typeChartBinOptions, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Type", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBinOptions.prototype, "underflowValue", {
            get: function () {
                _throwIfNotLoaded("underflowValue", this._U, _typeChartBinOptions, this._isNull);
                return this._U;
            },
            set: function (value) {
                this._U = value;
                _invokeSetProperty(this, "UnderflowValue", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBinOptions.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeChartBinOptions, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "Width", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        ChartBinOptions.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["type", "width", "count", "allowOverflow", "allowUnderflow", "overflowValue", "underflowValue"], [], []);
        };
        ChartBinOptions.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartBinOptions.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AllowOverflow"])) {
                this._A = obj["AllowOverflow"];
            }
            if (!_isUndefined(obj["AllowUnderflow"])) {
                this._Al = obj["AllowUnderflow"];
            }
            if (!_isUndefined(obj["Count"])) {
                this._C = obj["Count"];
            }
            if (!_isUndefined(obj["OverflowValue"])) {
                this._O = obj["OverflowValue"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._T = obj["Type"];
            }
            if (!_isUndefined(obj["UnderflowValue"])) {
                this._U = obj["UnderflowValue"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
        };
        ChartBinOptions.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartBinOptions.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartBinOptions.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartBinOptions.prototype.toJSON = function () {
            return _toJson(this, {
                "allowOverflow": this._A,
                "allowUnderflow": this._Al,
                "count": this._C,
                "overflowValue": this._O,
                "type": this._T,
                "underflowValue": this._U,
                "width": this._W
            }, {});
        };
        ChartBinOptions.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartBinOptions.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartBinOptions;
    }(OfficeExtension.ClientObject));
    Excel.ChartBinOptions = ChartBinOptions;
    var _typeChartBoxwhiskerOptions = "ChartBoxwhiskerOptions";
    var ChartBoxwhiskerOptions = (function (_super) {
        __extends(ChartBoxwhiskerOptions, _super);
        function ChartBoxwhiskerOptions() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartBoxwhiskerOptions.prototype, "_className", {
            get: function () {
                return "ChartBoxwhiskerOptions";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBoxwhiskerOptions.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["showInnerPoints", "showOutlierPoints", "showMeanMarker", "showMeanLine", "quartileCalculation"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBoxwhiskerOptions.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["ShowInnerPoints", "ShowOutlierPoints", "ShowMeanMarker", "ShowMeanLine", "QuartileCalculation"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBoxwhiskerOptions.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBoxwhiskerOptions.prototype, "quartileCalculation", {
            get: function () {
                _throwIfNotLoaded("quartileCalculation", this._Q, _typeChartBoxwhiskerOptions, this._isNull);
                return this._Q;
            },
            set: function (value) {
                this._Q = value;
                _invokeSetProperty(this, "QuartileCalculation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBoxwhiskerOptions.prototype, "showInnerPoints", {
            get: function () {
                _throwIfNotLoaded("showInnerPoints", this._S, _typeChartBoxwhiskerOptions, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowInnerPoints", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBoxwhiskerOptions.prototype, "showMeanLine", {
            get: function () {
                _throwIfNotLoaded("showMeanLine", this._Sh, _typeChartBoxwhiskerOptions, this._isNull);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowMeanLine", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBoxwhiskerOptions.prototype, "showMeanMarker", {
            get: function () {
                _throwIfNotLoaded("showMeanMarker", this._Sho, _typeChartBoxwhiskerOptions, this._isNull);
                return this._Sho;
            },
            set: function (value) {
                this._Sho = value;
                _invokeSetProperty(this, "ShowMeanMarker", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartBoxwhiskerOptions.prototype, "showOutlierPoints", {
            get: function () {
                _throwIfNotLoaded("showOutlierPoints", this._Show, _typeChartBoxwhiskerOptions, this._isNull);
                return this._Show;
            },
            set: function (value) {
                this._Show = value;
                _invokeSetProperty(this, "ShowOutlierPoints", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartBoxwhiskerOptions.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["showInnerPoints", "showOutlierPoints", "showMeanMarker", "showMeanLine", "quartileCalculation"], [], []);
        };
        ChartBoxwhiskerOptions.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartBoxwhiskerOptions.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["QuartileCalculation"])) {
                this._Q = obj["QuartileCalculation"];
            }
            if (!_isUndefined(obj["ShowInnerPoints"])) {
                this._S = obj["ShowInnerPoints"];
            }
            if (!_isUndefined(obj["ShowMeanLine"])) {
                this._Sh = obj["ShowMeanLine"];
            }
            if (!_isUndefined(obj["ShowMeanMarker"])) {
                this._Sho = obj["ShowMeanMarker"];
            }
            if (!_isUndefined(obj["ShowOutlierPoints"])) {
                this._Show = obj["ShowOutlierPoints"];
            }
        };
        ChartBoxwhiskerOptions.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartBoxwhiskerOptions.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartBoxwhiskerOptions.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartBoxwhiskerOptions.prototype.toJSON = function () {
            return _toJson(this, {
                "quartileCalculation": this._Q,
                "showInnerPoints": this._S,
                "showMeanLine": this._Sh,
                "showMeanMarker": this._Sho,
                "showOutlierPoints": this._Show
            }, {});
        };
        ChartBoxwhiskerOptions.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartBoxwhiskerOptions.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartBoxwhiskerOptions;
    }(OfficeExtension.ClientObject));
    Excel.ChartBoxwhiskerOptions = ChartBoxwhiskerOptions;
    var _typeChartLineFormat = "ChartLineFormat";
    var ChartLineFormat = (function (_super) {
        __extends(ChartLineFormat, _super);
        function ChartLineFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartLineFormat.prototype, "_className", {
            get: function () {
                return "ChartLineFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLineFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["color", "lineStyle", "weight"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLineFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Color", "LineStyle", "Weight"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLineFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLineFormat.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeChartLineFormat, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLineFormat.prototype, "lineStyle", {
            get: function () {
                _throwIfNotLoaded("lineStyle", this._L, _typeChartLineFormat, this._isNull);
                _throwIfApiNotSupported("ChartLineFormat.lineStyle", _defaultApiSetName, "1.7", _hostName);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "LineStyle", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartLineFormat.prototype, "weight", {
            get: function () {
                _throwIfNotLoaded("weight", this._W, _typeChartLineFormat, this._isNull);
                _throwIfApiNotSupported("ChartLineFormat.weight", _defaultApiSetName, "1.7", _hostName);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "Weight", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        ChartLineFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["color", "lineStyle", "weight"], [], []);
        };
        ChartLineFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartLineFormat.prototype.clear = function () {
            _invokeMethod(this, "Clear", 0, [], 0, 0);
        };
        ChartLineFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
            if (!_isUndefined(obj["LineStyle"])) {
                this._L = obj["LineStyle"];
            }
            if (!_isUndefined(obj["Weight"])) {
                this._W = obj["Weight"];
            }
        };
        ChartLineFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartLineFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartLineFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartLineFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "color": this._C,
                "lineStyle": this._L,
                "weight": this._W
            }, {});
        };
        ChartLineFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartLineFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartLineFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartLineFormat = ChartLineFormat;
    var _typeChartFont = "ChartFont";
    var ChartFont = (function (_super) {
        __extends(ChartFont, _super);
        function ChartFont() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartFont.prototype, "_className", {
            get: function () {
                return "ChartFont";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFont.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["bold", "color", "italic", "name", "size", "underline"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFont.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Bold", "Color", "Italic", "Name", "Size", "Underline"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFont.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFont.prototype, "bold", {
            get: function () {
                _throwIfNotLoaded("bold", this._B, _typeChartFont, this._isNull);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "Bold", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFont.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeChartFont, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFont.prototype, "italic", {
            get: function () {
                _throwIfNotLoaded("italic", this._I, _typeChartFont, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "Italic", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFont.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeChartFont, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFont.prototype, "size", {
            get: function () {
                _throwIfNotLoaded("size", this._S, _typeChartFont, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Size", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartFont.prototype, "underline", {
            get: function () {
                _throwIfNotLoaded("underline", this._U, _typeChartFont, this._isNull);
                return this._U;
            },
            set: function (value) {
                this._U = value;
                _invokeSetProperty(this, "Underline", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartFont.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["bold", "color", "italic", "name", "size", "underline"], [], []);
        };
        ChartFont.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartFont.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Bold"])) {
                this._B = obj["Bold"];
            }
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
            if (!_isUndefined(obj["Italic"])) {
                this._I = obj["Italic"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Size"])) {
                this._S = obj["Size"];
            }
            if (!_isUndefined(obj["Underline"])) {
                this._U = obj["Underline"];
            }
        };
        ChartFont.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartFont.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartFont.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartFont.prototype.toJSON = function () {
            return _toJson(this, {
                "bold": this._B,
                "color": this._C,
                "italic": this._I,
                "name": this._N,
                "size": this._S,
                "underline": this._U
            }, {});
        };
        ChartFont.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartFont.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartFont;
    }(OfficeExtension.ClientObject));
    Excel.ChartFont = ChartFont;
    var _typeChartTrendline = "ChartTrendline";
    var ChartTrendline = (function (_super) {
        __extends(ChartTrendline, _super);
        function ChartTrendline() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartTrendline.prototype, "_className", {
            get: function () {
                return "ChartTrendline";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["type", "polynomialOrder", "movingAveragePeriod", "_Id", "showEquation", "showRSquared", "forwardPeriod", "backwardPeriod", "name", "intercept"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Type", "PolynomialOrder", "MovingAveragePeriod", "_Id", "ShowEquation", "ShowRSquared", "ForwardPeriod", "BackwardPeriod", "Name", "Intercept"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, false, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format", "label"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartTrendlineFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "label", {
            get: function () {
                _throwIfApiNotSupported("ChartTrendline.label", _defaultApiSetName, "1.8", _hostName);
                if (!this._L) {
                    this._L = _createPropertyObject(Excel.ChartTrendlineLabel, this, "Label", false, 4);
                }
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "backwardPeriod", {
            get: function () {
                _throwIfNotLoaded("backwardPeriod", this._B, _typeChartTrendline, this._isNull);
                _throwIfApiNotSupported("ChartTrendline.backwardPeriod", _defaultApiSetName, "1.8", _hostName);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "BackwardPeriod", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "forwardPeriod", {
            get: function () {
                _throwIfNotLoaded("forwardPeriod", this._Fo, _typeChartTrendline, this._isNull);
                _throwIfApiNotSupported("ChartTrendline.forwardPeriod", _defaultApiSetName, "1.8", _hostName);
                return this._Fo;
            },
            set: function (value) {
                this._Fo = value;
                _invokeSetProperty(this, "ForwardPeriod", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "intercept", {
            get: function () {
                _throwIfNotLoaded("intercept", this._I, _typeChartTrendline, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "Intercept", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "movingAveragePeriod", {
            get: function () {
                _throwIfNotLoaded("movingAveragePeriod", this._M, _typeChartTrendline, this._isNull);
                return this._M;
            },
            set: function (value) {
                this._M = value;
                _invokeSetProperty(this, "MovingAveragePeriod", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeChartTrendline, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "polynomialOrder", {
            get: function () {
                _throwIfNotLoaded("polynomialOrder", this._P, _typeChartTrendline, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "PolynomialOrder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "showEquation", {
            get: function () {
                _throwIfNotLoaded("showEquation", this._S, _typeChartTrendline, this._isNull);
                _throwIfApiNotSupported("ChartTrendline.showEquation", _defaultApiSetName, "1.8", _hostName);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowEquation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "showRSquared", {
            get: function () {
                _throwIfNotLoaded("showRSquared", this._Sh, _typeChartTrendline, this._isNull);
                _throwIfApiNotSupported("ChartTrendline.showRSquared", _defaultApiSetName, "1.8", _hostName);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowRSquared", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._T, _typeChartTrendline, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Type", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendline.prototype, "_Id", {
            get: function () {
                _throwIfNotLoaded("_Id", this.__I, _typeChartTrendline, this._isNull);
                return this.__I;
            },
            enumerable: true,
            configurable: true
        });
        ChartTrendline.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["type", "polynomialOrder", "movingAveragePeriod", "showEquation", "showRSquared", "forwardPeriod", "backwardPeriod", "name", "intercept"], ["format", "label"], []);
        };
        ChartTrendline.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartTrendline.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        ChartTrendline.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["BackwardPeriod"])) {
                this._B = obj["BackwardPeriod"];
            }
            if (!_isUndefined(obj["ForwardPeriod"])) {
                this._Fo = obj["ForwardPeriod"];
            }
            if (!_isUndefined(obj["Intercept"])) {
                this._I = obj["Intercept"];
            }
            if (!_isUndefined(obj["MovingAveragePeriod"])) {
                this._M = obj["MovingAveragePeriod"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["PolynomialOrder"])) {
                this._P = obj["PolynomialOrder"];
            }
            if (!_isUndefined(obj["ShowEquation"])) {
                this._S = obj["ShowEquation"];
            }
            if (!_isUndefined(obj["ShowRSquared"])) {
                this._Sh = obj["ShowRSquared"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._T = obj["Type"];
            }
            if (!_isUndefined(obj["_Id"])) {
                this.__I = obj["_Id"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format", "label", "Label"]);
        };
        ChartTrendline.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartTrendline.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartTrendline.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_Id"])) {
                this.__I = value["_Id"];
            }
        };
        ChartTrendline.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartTrendline.prototype.toJSON = function () {
            return _toJson(this, {
                "backwardPeriod": this._B,
                "forwardPeriod": this._Fo,
                "intercept": this._I,
                "movingAveragePeriod": this._M,
                "name": this._N,
                "polynomialOrder": this._P,
                "showEquation": this._S,
                "showRSquared": this._Sh,
                "type": this._T
            }, {
                "format": this._F,
                "label": this._L
            });
        };
        ChartTrendline.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartTrendline.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartTrendline;
    }(OfficeExtension.ClientObject));
    Excel.ChartTrendline = ChartTrendline;
    var _typeChartTrendlineCollection = "ChartTrendlineCollection";
    var ChartTrendlineCollection = (function (_super) {
        __extends(ChartTrendlineCollection, _super);
        function ChartTrendlineCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartTrendlineCollection.prototype, "_className", {
            get: function () {
                return "ChartTrendlineCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeChartTrendlineCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        ChartTrendlineCollection.prototype.add = function (type) {
            return _createMethodObject(Excel.ChartTrendline, this, "Add", 0, [type], false, true, null, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
        };
        ChartTrendlineCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        ChartTrendlineCollection.prototype.getItem = function (index) {
            return _createIndexerObject(Excel.ChartTrendline, this, [index]);
        };
        ChartTrendlineCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.ChartTrendline, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        ChartTrendlineCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartTrendlineCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartTrendlineCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.ChartTrendline, true, _this, childItemData, index); });
        };
        ChartTrendlineCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        ChartTrendlineCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.ChartTrendline, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return ChartTrendlineCollection;
    }(OfficeExtension.ClientObject));
    Excel.ChartTrendlineCollection = ChartTrendlineCollection;
    var _typeChartTrendlineFormat = "ChartTrendlineFormat";
    var ChartTrendlineFormat = (function (_super) {
        __extends(ChartTrendlineFormat, _super);
        function ChartTrendlineFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartTrendlineFormat.prototype, "_className", {
            get: function () {
                return "ChartTrendlineFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["line"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineFormat.prototype, "line", {
            get: function () {
                if (!this._L) {
                    this._L = _createPropertyObject(Excel.ChartLineFormat, this, "Line", false, 4);
                }
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        ChartTrendlineFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["line"], []);
        };
        ChartTrendlineFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartTrendlineFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["line", "Line"]);
        };
        ChartTrendlineFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartTrendlineFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartTrendlineFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartTrendlineFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "line": this._L
            });
        };
        ChartTrendlineFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartTrendlineFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartTrendlineFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartTrendlineFormat = ChartTrendlineFormat;
    var _typeChartTrendlineLabel = "ChartTrendlineLabel";
    var ChartTrendlineLabel = (function (_super) {
        __extends(ChartTrendlineLabel, _super);
        function ChartTrendlineLabel() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartTrendlineLabel.prototype, "_className", {
            get: function () {
                return "ChartTrendlineLabel";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["top", "left", "width", "height", "formula", "textOrientation", "horizontalAlignment", "verticalAlignment", "text", "autoText", "numberFormat", "linkNumberFormat"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Top", "Left", "Width", "Height", "Formula", "TextOrientation", "HorizontalAlignment", "VerticalAlignment", "Text", "AutoText", "NumberFormat", "LinkNumberFormat"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, false, false, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartTrendlineLabelFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "autoText", {
            get: function () {
                _throwIfNotLoaded("autoText", this._A, _typeChartTrendlineLabel, this._isNull);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AutoText", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "formula", {
            get: function () {
                _throwIfNotLoaded("formula", this._Fo, _typeChartTrendlineLabel, this._isNull);
                return this._Fo;
            },
            set: function (value) {
                this._Fo = value;
                _invokeSetProperty(this, "Formula", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._H, _typeChartTrendlineLabel, this._isNull);
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "horizontalAlignment", {
            get: function () {
                _throwIfNotLoaded("horizontalAlignment", this._Ho, _typeChartTrendlineLabel, this._isNull);
                return this._Ho;
            },
            set: function (value) {
                this._Ho = value;
                _invokeSetProperty(this, "HorizontalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeChartTrendlineLabel, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "Left", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "linkNumberFormat", {
            get: function () {
                _throwIfNotLoaded("linkNumberFormat", this._Li, _typeChartTrendlineLabel, this._isNull);
                _throwIfApiNotSupported("ChartTrendlineLabel.linkNumberFormat", _defaultApiSetName, "1.9", _hostName);
                return this._Li;
            },
            set: function (value) {
                this._Li = value;
                _invokeSetProperty(this, "LinkNumberFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "numberFormat", {
            get: function () {
                _throwIfNotLoaded("numberFormat", this._N, _typeChartTrendlineLabel, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "NumberFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "text", {
            get: function () {
                _throwIfNotLoaded("text", this._T, _typeChartTrendlineLabel, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Text", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "textOrientation", {
            get: function () {
                _throwIfNotLoaded("textOrientation", this._Te, _typeChartTrendlineLabel, this._isNull);
                return this._Te;
            },
            set: function (value) {
                this._Te = value;
                _invokeSetProperty(this, "TextOrientation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._To, _typeChartTrendlineLabel, this._isNull);
                return this._To;
            },
            set: function (value) {
                this._To = value;
                _invokeSetProperty(this, "Top", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "verticalAlignment", {
            get: function () {
                _throwIfNotLoaded("verticalAlignment", this._V, _typeChartTrendlineLabel, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "VerticalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabel.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeChartTrendlineLabel, this._isNull);
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        ChartTrendlineLabel.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["top", "left", "formula", "textOrientation", "horizontalAlignment", "verticalAlignment", "text", "autoText", "numberFormat", "linkNumberFormat"], ["format"], []);
        };
        ChartTrendlineLabel.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartTrendlineLabel.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AutoText"])) {
                this._A = obj["AutoText"];
            }
            if (!_isUndefined(obj["Formula"])) {
                this._Fo = obj["Formula"];
            }
            if (!_isUndefined(obj["Height"])) {
                this._H = obj["Height"];
            }
            if (!_isUndefined(obj["HorizontalAlignment"])) {
                this._Ho = obj["HorizontalAlignment"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["LinkNumberFormat"])) {
                this._Li = obj["LinkNumberFormat"];
            }
            if (!_isUndefined(obj["NumberFormat"])) {
                this._N = obj["NumberFormat"];
            }
            if (!_isUndefined(obj["Text"])) {
                this._T = obj["Text"];
            }
            if (!_isUndefined(obj["TextOrientation"])) {
                this._Te = obj["TextOrientation"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._To = obj["Top"];
            }
            if (!_isUndefined(obj["VerticalAlignment"])) {
                this._V = obj["VerticalAlignment"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        ChartTrendlineLabel.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartTrendlineLabel.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartTrendlineLabel.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartTrendlineLabel.prototype.toJSON = function () {
            return _toJson(this, {
                "autoText": this._A,
                "formula": this._Fo,
                "height": this._H,
                "horizontalAlignment": this._Ho,
                "left": this._L,
                "linkNumberFormat": this._Li,
                "numberFormat": this._N,
                "text": this._T,
                "textOrientation": this._Te,
                "top": this._To,
                "verticalAlignment": this._V,
                "width": this._W
            }, {
                "format": this._F
            });
        };
        ChartTrendlineLabel.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartTrendlineLabel.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartTrendlineLabel;
    }(OfficeExtension.ClientObject));
    Excel.ChartTrendlineLabel = ChartTrendlineLabel;
    var _typeChartTrendlineLabelFormat = "ChartTrendlineLabelFormat";
    var ChartTrendlineLabelFormat = (function (_super) {
        __extends(ChartTrendlineLabelFormat, _super);
        function ChartTrendlineLabelFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartTrendlineLabelFormat.prototype, "_className", {
            get: function () {
                return "ChartTrendlineLabelFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabelFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["fill", "border", "font"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabelFormat.prototype, "border", {
            get: function () {
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ChartBorder, this, "Border", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabelFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartTrendlineLabelFormat.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.ChartFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        ChartTrendlineLabelFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["border", "font"], [
                "fill"
            ]);
        };
        ChartTrendlineLabelFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartTrendlineLabelFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["border", "Border", "fill", "Fill", "font", "Font"]);
        };
        ChartTrendlineLabelFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartTrendlineLabelFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartTrendlineLabelFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartTrendlineLabelFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "border": this._B,
                "font": this._Fo
            });
        };
        ChartTrendlineLabelFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartTrendlineLabelFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartTrendlineLabelFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartTrendlineLabelFormat = ChartTrendlineLabelFormat;
    var _typeChartPlotArea = "ChartPlotArea";
    var ChartPlotArea = (function (_super) {
        __extends(ChartPlotArea, _super);
        function ChartPlotArea() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartPlotArea.prototype, "_className", {
            get: function () {
                return "ChartPlotArea";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["left", "top", "width", "height", "insideLeft", "insideTop", "insideWidth", "insideHeight", "position"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Left", "Top", "Width", "Height", "InsideLeft", "InsideTop", "InsideWidth", "InsideHeight", "Position"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartPlotAreaFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._H, _typeChartPlotArea, this._isNull);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "Height", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "insideHeight", {
            get: function () {
                _throwIfNotLoaded("insideHeight", this._I, _typeChartPlotArea, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "InsideHeight", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "insideLeft", {
            get: function () {
                _throwIfNotLoaded("insideLeft", this._In, _typeChartPlotArea, this._isNull);
                return this._In;
            },
            set: function (value) {
                this._In = value;
                _invokeSetProperty(this, "InsideLeft", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "insideTop", {
            get: function () {
                _throwIfNotLoaded("insideTop", this._Ins, _typeChartPlotArea, this._isNull);
                return this._Ins;
            },
            set: function (value) {
                this._Ins = value;
                _invokeSetProperty(this, "InsideTop", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "insideWidth", {
            get: function () {
                _throwIfNotLoaded("insideWidth", this._Insi, _typeChartPlotArea, this._isNull);
                return this._Insi;
            },
            set: function (value) {
                this._Insi = value;
                _invokeSetProperty(this, "InsideWidth", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeChartPlotArea, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "Left", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "position", {
            get: function () {
                _throwIfNotLoaded("position", this._P, _typeChartPlotArea, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Position", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._T, _typeChartPlotArea, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Top", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotArea.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeChartPlotArea, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "Width", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ChartPlotArea.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["left", "top", "width", "height", "insideLeft", "insideTop", "insideWidth", "insideHeight", "position"], ["format"], []);
        };
        ChartPlotArea.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartPlotArea.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Height"])) {
                this._H = obj["Height"];
            }
            if (!_isUndefined(obj["InsideHeight"])) {
                this._I = obj["InsideHeight"];
            }
            if (!_isUndefined(obj["InsideLeft"])) {
                this._In = obj["InsideLeft"];
            }
            if (!_isUndefined(obj["InsideTop"])) {
                this._Ins = obj["InsideTop"];
            }
            if (!_isUndefined(obj["InsideWidth"])) {
                this._Insi = obj["InsideWidth"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["Position"])) {
                this._P = obj["Position"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._T = obj["Top"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        ChartPlotArea.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartPlotArea.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartPlotArea.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartPlotArea.prototype.toJSON = function () {
            return _toJson(this, {
                "height": this._H,
                "insideHeight": this._I,
                "insideLeft": this._In,
                "insideTop": this._Ins,
                "insideWidth": this._Insi,
                "left": this._L,
                "position": this._P,
                "top": this._T,
                "width": this._W
            }, {
                "format": this._F
            });
        };
        ChartPlotArea.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartPlotArea.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartPlotArea;
    }(OfficeExtension.ClientObject));
    Excel.ChartPlotArea = ChartPlotArea;
    var _typeChartPlotAreaFormat = "ChartPlotAreaFormat";
    var ChartPlotAreaFormat = (function (_super) {
        __extends(ChartPlotAreaFormat, _super);
        function ChartPlotAreaFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ChartPlotAreaFormat.prototype, "_className", {
            get: function () {
                return "ChartPlotAreaFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotAreaFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["border", "fill"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotAreaFormat.prototype, "border", {
            get: function () {
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ChartBorder, this, "Border", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ChartPlotAreaFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ChartFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        ChartPlotAreaFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["border"], [
                "fill"
            ]);
        };
        ChartPlotAreaFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ChartPlotAreaFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["border", "Border", "fill", "Fill"]);
        };
        ChartPlotAreaFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ChartPlotAreaFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ChartPlotAreaFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ChartPlotAreaFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "border": this._B
            });
        };
        ChartPlotAreaFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ChartPlotAreaFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ChartPlotAreaFormat;
    }(OfficeExtension.ClientObject));
    Excel.ChartPlotAreaFormat = ChartPlotAreaFormat;
    var _typeVisualCollection = "VisualCollection";
    var VisualCollection = (function (_super) {
        __extends(VisualCollection, _super);
        function VisualCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(VisualCollection.prototype, "_className", {
            get: function () {
                return "VisualCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeVisualCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        VisualCollection.prototype.add = function (visualDefinitionGuid, dataSourceType, dataSourceContent) {
            return _createMethodObject(Excel.Visual, this, "Add", 0, [visualDefinitionGuid, dataSourceType, dataSourceContent], false, true, null, 2);
        };
        VisualCollection.prototype.bootstrapAgaveVisual = function () {
            _invokeMethod(this, "BootstrapAgaveVisual", 0, [], 2, 0);
        };
        VisualCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        VisualCollection.prototype.getDefinitions = function () {
            return _invokeMethod(this, "GetDefinitions", 1, [], 4, 0);
        };
        VisualCollection.prototype.getPreview = function (visualDefinitionGuid, width, height, dpi) {
            return _invokeMethod(this, "GetPreview", 1, [visualDefinitionGuid, width, height, dpi], 4, 0);
        };
        VisualCollection.prototype.getSelectedOrNullObject = function () {
            return _createMethodObject(Excel.Visual, this, "GetSelectedOrNullObject", 1, [], false, false, null, 4);
        };
        VisualCollection.prototype._GetItem = function (id) {
            return _createIndexerObject(Excel.Visual, this, [id]);
        };
        VisualCollection.prototype._RegisterSelectionChangedEvent = function () {
            _invokeMethod(this, "_RegisterSelectionChangedEvent", 1, [], 0, 0);
        };
        VisualCollection.prototype._UnregisterSelectionChangedEvent = function () {
            _invokeMethod(this, "_UnregisterSelectionChangedEvent", 1, [], 0, 0);
        };
        VisualCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Visual, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        VisualCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        VisualCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        VisualCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Visual, true, _this, childItemData, index); });
        };
        Object.defineProperty(VisualCollection.prototype, "onAgaveVisualUpdate", {
            get: function () {
                var _this = this;
                if (!this.m_agaveVisualUpdate) {
                    this.m_agaveVisualUpdate = new OfficeExtension.GenericEventHandlers(this.context, this, "AgaveVisualUpdate", {
                        eventType: 150,
                        registerFunc: function () { return OfficeExtension.Utility._createPromiseFromResult(null); },
                        unregisterFunc: function () { return OfficeExtension.Utility._createPromiseFromResult(null); },
                        getTargetIdFunc: function () { return ""; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.VisualCollection_AgaveVisualUpdate_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_agaveVisualUpdate;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualCollection.prototype, "onSelectionChanged", {
            get: function () {
                var _this = this;
                if (!this.m_selectionChanged) {
                    this.m_selectionChanged = new OfficeExtension.GenericEventHandlers(this.context, this, "SelectionChanged", {
                        eventType: 2000,
                        registerFunc: function () { return _this._RegisterSelectionChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterSelectionChangedEvent(); },
                        getTargetIdFunc: function () { return _this._ParentObject.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.visualSelectionChanged,
                                revisionLoad: value.revisionLoad,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_selectionChanged;
            },
            enumerable: true,
            configurable: true
        });
        VisualCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        VisualCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Visual, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return VisualCollection;
    }(OfficeExtension.ClientObject));
    Excel.VisualCollection = VisualCollection;
    var VisualCollectionCustom = (function () {
        function VisualCollectionCustom() {
        }
        Object.defineProperty(VisualCollectionCustom.prototype, "_ParentObject", {
            get: function () {
                return this.m__ParentObject;
            },
            set: function (value) {
                this.m__ParentObject = value;
            },
            enumerable: true,
            configurable: true
        });
        return VisualCollectionCustom;
    }());
    Excel.VisualCollectionCustom = VisualCollectionCustom;
    OfficeExtension.Utility.applyMixin(VisualCollection, VisualCollectionCustom);
    (function (_CC) {
        function VisualCollection_AgaveVisualUpdate_EventArgsTransform(thisObj, args) {
            var value = args;
            var newArgs = {
                type: value.type,
                payload: value.payload
            };
            return newArgs;
        }
        _CC.VisualCollection_AgaveVisualUpdate_EventArgsTransform = VisualCollection_AgaveVisualUpdate_EventArgsTransform;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeVisual = "Visual";
    var Visual = (function (_super) {
        __extends(Visual, _super);
        function Visual() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Visual.prototype, "_className", {
            get: function () {
                return "Visual";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Visual.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "isSupportedInVisualTaskpane"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Visual.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "IsSupportedInVisualTaskpane"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Visual.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["properties"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Visual.prototype, "properties", {
            get: function () {
                if (!this._P) {
                    this._P = _createPropertyObject(Excel.VisualPropertyCollection, this, "Properties", true, 4);
                }
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Visual.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeVisual, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Visual.prototype, "isSupportedInVisualTaskpane", {
            get: function () {
                _throwIfNotLoaded("isSupportedInVisualTaskpane", this._Is, _typeVisual, this._isNull);
                return this._Is;
            },
            enumerable: true,
            configurable: true
        });
        Visual.prototype.addChildProperty = function (parentCollectionName, attributes) {
            _throwIfApiNotSupported("Visual.addChildProperty", "ExcelApiOnline", "1.1", _hostName);
            return _invokeMethod(this, "AddChildProperty", 0, [parentCollectionName, attributes], 2, 0);
        };
        Visual.prototype.changeDataSource = function (dataSourceType, dataSourceContent) {
            _invokeMethod(this, "ChangeDataSource", 0, [dataSourceType, dataSourceContent], 2, 0);
        };
        Visual.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 2, 0);
        };
        Visual.prototype.deserializeProperties = function (json) {
            _invokeMethod(this, "DeserializeProperties", 0, [json], 2, 0);
        };
        Visual.prototype.getChildProperties = function (parentPropId, levelsToTraverse) {
            return _createMethodObject(Excel.VisualPropertyCollection, this, "GetChildProperties", 1, [parentPropId, levelsToTraverse], true, false, null, 4);
        };
        Visual.prototype.getDataControllerClient = function () {
            return _createMethodObject(Excel.DataControllerClient, this, "GetDataControllerClient", 1, [], false, false, null, 4);
        };
        Visual.prototype.getDataSource = function () {
            return _invokeMethod(this, "GetDataSource", 1, [], 4, 0);
        };
        Visual.prototype.getElementChildProperties = function (elementId, index, levelsToTraverse) {
            return _createMethodObject(Excel.VisualPropertyCollection, this, "GetElementChildProperties", 1, [elementId, index, levelsToTraverse], true, false, null, 4);
        };
        Visual.prototype.getProperty = function (propName) {
            return _invokeMethod(this, "GetProperty", 1, [propName], 4, 0);
        };
        Visual.prototype.removeChildProperty = function (parentCollectionName, index) {
            _throwIfApiNotSupported("Visual.removeChildProperty", "ExcelApiOnline", "1.1", _hostName);
            _invokeMethod(this, "RemoveChildProperty", 0, [parentCollectionName, index], 2, 0);
        };
        Visual.prototype.serializeProperties = function () {
            return _invokeMethod(this, "SerializeProperties", 1, [], 4, 0);
        };
        Visual.prototype.setProperty = function (propName, value) {
            _invokeMethod(this, "SetProperty", 0, [propName, value], 2, 0);
        };
        Visual.prototype.setPropertyToDefault = function (propName) {
            _invokeMethod(this, "SetPropertyToDefault", 0, [propName], 2, 0);
        };
        Visual.prototype._RegisterChangeEvent = function () {
            _invokeMethod(this, "_RegisterChangeEvent", 1, [], 0, 0);
        };
        Visual.prototype._UnregisterChangeEvent = function () {
            _invokeMethod(this, "_UnregisterChangeEvent", 1, [], 0, 0);
        };
        Visual.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["IsSupportedInVisualTaskpane"])) {
                this._Is = obj["IsSupportedInVisualTaskpane"];
            }
            _handleNavigationPropertyResults(this, obj, ["properties", "Properties"]);
        };
        Visual.prototype.load = function (options) {
            return _load(this, options);
        };
        Visual.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Visual.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Visual.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(Visual.prototype, "onChangeNotification", {
            get: function () {
                var _this = this;
                if (!this.m_changeNotification) {
                    this.m_changeNotification = new OfficeExtension.GenericEventHandlers(this.context, this, "ChangeNotification", {
                        eventType: 2001,
                        registerFunc: function () { return _this._RegisterChangeEvent(); },
                        unregisterFunc: function () { return _this._UnregisterChangeEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.Visual_ChangeNotification_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_changeNotification;
            },
            enumerable: true,
            configurable: true
        });
        Visual.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I,
                "isSupportedInVisualTaskpane": this._Is
            }, {});
        };
        Visual.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Visual.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Visual;
    }(OfficeExtension.ClientObject));
    Excel.Visual = Visual;
    (function (_CC) {
        function Visual_ChangeNotification_EventArgsTransform(thisObj, args) {
            var value = args;
            var newArgs = {
                targetId: value.targetId,
                changeType: value.changeType,
                payload: value.payload,
                type: Excel.EventType.visualChange
            };
            return newArgs;
        }
        _CC.Visual_ChangeNotification_EventArgsTransform = Visual_ChangeNotification_EventArgsTransform;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeVisualProperty = "VisualProperty";
    var VisualProperty = (function (_super) {
        __extends(VisualProperty, _super);
        function VisualProperty() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(VisualProperty.prototype, "_className", {
            get: function () {
                return "VisualProperty";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["type", "value", "id", "localizedName", "options", "localizedOptions", "hasDefault", "isDefault", "min", "max", "stepSize", "hideMeButShowChildrenUI", "expandableUI", "nextPropOnSameLine", "showResetUI", "size", "minSize", "maxSize", "index", "parentName"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Type", "Value", "Id", "LocalizedName", "Options", "LocalizedOptions", "HasDefault", "IsDefault", "Min", "Max", "StepSize", "HideMeButShowChildrenUI", "ExpandableUI", "NextPropOnSameLine", "ShowResetUI", "Size", "MinSize", "MaxSize", "Index", "ParentName"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "expandableUI", {
            get: function () {
                _throwIfNotLoaded("expandableUI", this._E, _typeVisualProperty, this._isNull);
                return this._E;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "hasDefault", {
            get: function () {
                _throwIfNotLoaded("hasDefault", this._H, _typeVisualProperty, this._isNull);
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "hideMeButShowChildrenUI", {
            get: function () {
                _throwIfNotLoaded("hideMeButShowChildrenUI", this._Hi, _typeVisualProperty, this._isNull);
                return this._Hi;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeVisualProperty, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "index", {
            get: function () {
                _throwIfNotLoaded("index", this._In, _typeVisualProperty, this._isNull);
                _throwIfApiNotSupported("VisualProperty.index", "ExcelApiOnline", "1.1", _hostName);
                return this._In;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "isDefault", {
            get: function () {
                _throwIfNotLoaded("isDefault", this._Is, _typeVisualProperty, this._isNull);
                return this._Is;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "localizedName", {
            get: function () {
                _throwIfNotLoaded("localizedName", this._L, _typeVisualProperty, this._isNull);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "localizedOptions", {
            get: function () {
                _throwIfNotLoaded("localizedOptions", this._Lo, _typeVisualProperty, this._isNull);
                return this._Lo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "max", {
            get: function () {
                _throwIfNotLoaded("max", this._M, _typeVisualProperty, this._isNull);
                return this._M;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "maxSize", {
            get: function () {
                _throwIfNotLoaded("maxSize", this._Ma, _typeVisualProperty, this._isNull);
                _throwIfApiNotSupported("VisualProperty.maxSize", "ExcelApiOnline", "1.1", _hostName);
                return this._Ma;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "min", {
            get: function () {
                _throwIfNotLoaded("min", this._Mi, _typeVisualProperty, this._isNull);
                return this._Mi;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "minSize", {
            get: function () {
                _throwIfNotLoaded("minSize", this._Min, _typeVisualProperty, this._isNull);
                _throwIfApiNotSupported("VisualProperty.minSize", "ExcelApiOnline", "1.1", _hostName);
                return this._Min;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "nextPropOnSameLine", {
            get: function () {
                _throwIfNotLoaded("nextPropOnSameLine", this._N, _typeVisualProperty, this._isNull);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "options", {
            get: function () {
                _throwIfNotLoaded("options", this._O, _typeVisualProperty, this._isNull);
                return this._O;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "parentName", {
            get: function () {
                _throwIfNotLoaded("parentName", this._P, _typeVisualProperty, this._isNull);
                _throwIfApiNotSupported("VisualProperty.parentName", "ExcelApiOnline", "1.1", _hostName);
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "showResetUI", {
            get: function () {
                _throwIfNotLoaded("showResetUI", this._S, _typeVisualProperty, this._isNull);
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "size", {
            get: function () {
                _throwIfNotLoaded("size", this._Si, _typeVisualProperty, this._isNull);
                _throwIfApiNotSupported("VisualProperty.size", "ExcelApiOnline", "1.1", _hostName);
                return this._Si;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "stepSize", {
            get: function () {
                _throwIfNotLoaded("stepSize", this._St, _typeVisualProperty, this._isNull);
                return this._St;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._T, _typeVisualProperty, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualProperty.prototype, "value", {
            get: function () {
                _throwIfNotLoaded("value", this._V, _typeVisualProperty, this._isNull);
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        VisualProperty.prototype.getBoolMetaProperty = function (metaProp) {
            return _invokeMethod(this, "GetBoolMetaProperty", 1, [metaProp], 4, 0);
        };
        VisualProperty.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["ExpandableUI"])) {
                this._E = obj["ExpandableUI"];
            }
            if (!_isUndefined(obj["HasDefault"])) {
                this._H = obj["HasDefault"];
            }
            if (!_isUndefined(obj["HideMeButShowChildrenUI"])) {
                this._Hi = obj["HideMeButShowChildrenUI"];
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Index"])) {
                this._In = obj["Index"];
            }
            if (!_isUndefined(obj["IsDefault"])) {
                this._Is = obj["IsDefault"];
            }
            if (!_isUndefined(obj["LocalizedName"])) {
                this._L = obj["LocalizedName"];
            }
            if (!_isUndefined(obj["LocalizedOptions"])) {
                this._Lo = obj["LocalizedOptions"];
            }
            if (!_isUndefined(obj["Max"])) {
                this._M = obj["Max"];
            }
            if (!_isUndefined(obj["MaxSize"])) {
                this._Ma = obj["MaxSize"];
            }
            if (!_isUndefined(obj["Min"])) {
                this._Mi = obj["Min"];
            }
            if (!_isUndefined(obj["MinSize"])) {
                this._Min = obj["MinSize"];
            }
            if (!_isUndefined(obj["NextPropOnSameLine"])) {
                this._N = obj["NextPropOnSameLine"];
            }
            if (!_isUndefined(obj["Options"])) {
                this._O = obj["Options"];
            }
            if (!_isUndefined(obj["ParentName"])) {
                this._P = obj["ParentName"];
            }
            if (!_isUndefined(obj["ShowResetUI"])) {
                this._S = obj["ShowResetUI"];
            }
            if (!_isUndefined(obj["Size"])) {
                this._Si = obj["Size"];
            }
            if (!_isUndefined(obj["StepSize"])) {
                this._St = obj["StepSize"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._T = obj["Type"];
            }
            if (!_isUndefined(obj["Value"])) {
                this._V = obj["Value"];
            }
        };
        VisualProperty.prototype.load = function (options) {
            return _load(this, options);
        };
        VisualProperty.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        VisualProperty.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        VisualProperty.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        VisualProperty.prototype.toJSON = function () {
            return _toJson(this, {
                "expandableUI": this._E,
                "hasDefault": this._H,
                "hideMeButShowChildrenUI": this._Hi,
                "id": this._I,
                "index": this._In,
                "isDefault": this._Is,
                "localizedName": this._L,
                "localizedOptions": this._Lo,
                "max": this._M,
                "maxSize": this._Ma,
                "min": this._Mi,
                "minSize": this._Min,
                "nextPropOnSameLine": this._N,
                "options": this._O,
                "parentName": this._P,
                "showResetUI": this._S,
                "size": this._Si,
                "stepSize": this._St,
                "type": this._T,
                "value": this._V
            }, {});
        };
        VisualProperty.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        VisualProperty.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return VisualProperty;
    }(OfficeExtension.ClientObject));
    Excel.VisualProperty = VisualProperty;
    var _typeVisualPropertyCollection = "VisualPropertyCollection";
    var VisualPropertyCollection = (function (_super) {
        __extends(VisualPropertyCollection, _super);
        function VisualPropertyCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(VisualPropertyCollection.prototype, "_className", {
            get: function () {
                return "VisualPropertyCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualPropertyCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(VisualPropertyCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeVisualPropertyCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        VisualPropertyCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        VisualPropertyCollection.prototype.getItem = function (index) {
            return _createIndexerObject(Excel.VisualProperty, this, [index]);
        };
        VisualPropertyCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.VisualProperty, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        VisualPropertyCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.VisualProperty, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        VisualPropertyCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        VisualPropertyCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        VisualPropertyCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.VisualProperty, true, _this, childItemData, index); });
        };
        VisualPropertyCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        VisualPropertyCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.VisualProperty, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return VisualPropertyCollection;
    }(OfficeExtension.ClientObject));
    Excel.VisualPropertyCollection = VisualPropertyCollection;
    var _typeDataControllerClient = "DataControllerClient";
    var DataControllerClient = (function (_super) {
        __extends(DataControllerClient, _super);
        function DataControllerClient() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(DataControllerClient.prototype, "_className", {
            get: function () {
                return "DataControllerClient";
            },
            enumerable: true,
            configurable: true
        });
        DataControllerClient.prototype.addField = function (wellId, fieldId, position) {
            _invokeMethod(this, "AddField", 0, [wellId, fieldId, position], 2, 0);
        };
        DataControllerClient.prototype.getAssociatedFields = function (wellId) {
            return _invokeMethod(this, "GetAssociatedFields", 1, [wellId], 4, 0);
        };
        DataControllerClient.prototype.getAvailableFields = function (wellId) {
            return _invokeMethod(this, "GetAvailableFields", 1, [wellId], 4, 0);
        };
        DataControllerClient.prototype.getWells = function () {
            return _invokeMethod(this, "GetWells", 1, [], 4, 0);
        };
        DataControllerClient.prototype.moveField = function (wellId, fromPosition, toPosition) {
            _invokeMethod(this, "MoveField", 0, [wellId, fromPosition, toPosition], 2, 0);
        };
        DataControllerClient.prototype.removeField = function (wellId, position) {
            _invokeMethod(this, "RemoveField", 0, [wellId, position], 2, 0);
        };
        DataControllerClient.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        DataControllerClient.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        DataControllerClient.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return DataControllerClient;
    }(OfficeExtension.ClientObject));
    Excel.DataControllerClient = DataControllerClient;
    var _typeRangeSort = "RangeSort";
    var RangeSort = (function (_super) {
        __extends(RangeSort, _super);
        function RangeSort() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeSort.prototype, "_className", {
            get: function () {
                return "RangeSort";
            },
            enumerable: true,
            configurable: true
        });
        RangeSort.prototype.apply = function (fields, matchCase, hasHeaders, orientation, method) {
            _invokeMethod(this, "Apply", 0, [fields, matchCase, hasHeaders, orientation, method], 0, 0);
        };
        RangeSort.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        RangeSort.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RangeSort.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return RangeSort;
    }(OfficeExtension.ClientObject));
    Excel.RangeSort = RangeSort;
    var _typeTableSort = "TableSort";
    var TableSort = (function (_super) {
        __extends(TableSort, _super);
        function TableSort() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TableSort.prototype, "_className", {
            get: function () {
                return "TableSort";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableSort.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["matchCase", "method", "fields"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableSort.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["MatchCase", "Method", "Fields"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableSort.prototype, "fields", {
            get: function () {
                _throwIfNotLoaded("fields", this._F, _typeTableSort, this._isNull);
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableSort.prototype, "matchCase", {
            get: function () {
                _throwIfNotLoaded("matchCase", this._M, _typeTableSort, this._isNull);
                return this._M;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableSort.prototype, "method", {
            get: function () {
                _throwIfNotLoaded("method", this._Me, _typeTableSort, this._isNull);
                return this._Me;
            },
            enumerable: true,
            configurable: true
        });
        TableSort.prototype.apply = function (fields, matchCase, method) {
            _invokeMethod(this, "Apply", 0, [fields, matchCase, method], 0, 0);
        };
        TableSort.prototype.clear = function () {
            _invokeMethod(this, "Clear", 0, [], 0, 0);
        };
        TableSort.prototype.reapply = function () {
            _invokeMethod(this, "Reapply", 0, [], 0, 0);
        };
        TableSort.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Fields"])) {
                this._F = obj["Fields"];
            }
            if (!_isUndefined(obj["MatchCase"])) {
                this._M = obj["MatchCase"];
            }
            if (!_isUndefined(obj["Method"])) {
                this._Me = obj["Method"];
            }
        };
        TableSort.prototype.load = function (options) {
            return _load(this, options);
        };
        TableSort.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TableSort.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        TableSort.prototype.toJSON = function () {
            return _toJson(this, {
                "fields": this._F,
                "matchCase": this._M,
                "method": this._Me
            }, {});
        };
        TableSort.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        TableSort.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return TableSort;
    }(OfficeExtension.ClientObject));
    Excel.TableSort = TableSort;
    var _typeFilter = "Filter";
    var Filter = (function (_super) {
        __extends(Filter, _super);
        function Filter() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Filter.prototype, "_className", {
            get: function () {
                return "Filter";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Filter.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["criteria"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Filter.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Criteria"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Filter.prototype, "criteria", {
            get: function () {
                _throwIfNotLoaded("criteria", this._C, _typeFilter, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Filter.prototype.apply = function (criteria) {
            _invokeMethod(this, "Apply", 0, [criteria], 0, 0);
        };
        Filter.prototype.applyBottomItemsFilter = function (count) {
            _invokeMethod(this, "ApplyBottomItemsFilter", 0, [count], 0, 0);
        };
        Filter.prototype.applyBottomPercentFilter = function (percent) {
            _invokeMethod(this, "ApplyBottomPercentFilter", 0, [percent], 0, 0);
        };
        Filter.prototype.applyCellColorFilter = function (color) {
            _invokeMethod(this, "ApplyCellColorFilter", 0, [color], 0, 0);
        };
        Filter.prototype.applyCustomFilter = function (criteria1, criteria2, oper) {
            _invokeMethod(this, "ApplyCustomFilter", 0, [criteria1, criteria2, oper], 0, 0);
        };
        Filter.prototype.applyDynamicFilter = function (criteria) {
            _invokeMethod(this, "ApplyDynamicFilter", 0, [criteria], 0, 0);
        };
        Filter.prototype.applyFontColorFilter = function (color) {
            _invokeMethod(this, "ApplyFontColorFilter", 0, [color], 0, 0);
        };
        Filter.prototype.applyIconFilter = function (icon) {
            _invokeMethod(this, "ApplyIconFilter", 0, [icon], 0, 0);
        };
        Filter.prototype.applyTopItemsFilter = function (count) {
            _invokeMethod(this, "ApplyTopItemsFilter", 0, [count], 0, 0);
        };
        Filter.prototype.applyTopPercentFilter = function (percent) {
            _invokeMethod(this, "ApplyTopPercentFilter", 0, [percent], 0, 0);
        };
        Filter.prototype.applyValuesFilter = function (values) {
            _invokeMethod(this, "ApplyValuesFilter", 0, [values], 0, 0);
        };
        Filter.prototype.clear = function () {
            _invokeMethod(this, "Clear", 0, [], 0, 0);
        };
        Filter.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Criteria"])) {
                this._C = obj["Criteria"];
            }
        };
        Filter.prototype.load = function (options) {
            return _load(this, options);
        };
        Filter.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Filter.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Filter.prototype.toJSON = function () {
            return _toJson(this, {
                "criteria": this._C
            }, {});
        };
        Filter.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Filter.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Filter;
    }(OfficeExtension.ClientObject));
    Excel.Filter = Filter;
    var _typeAutoFilter = "AutoFilter";
    var AutoFilter = (function (_super) {
        __extends(AutoFilter, _super);
        function AutoFilter() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(AutoFilter.prototype, "_className", {
            get: function () {
                return "AutoFilter";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AutoFilter.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["enabled", "isDataFiltered", "criteria"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AutoFilter.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Enabled", "IsDataFiltered", "Criteria"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AutoFilter.prototype, "criteria", {
            get: function () {
                _throwIfNotLoaded("criteria", this._C, _typeAutoFilter, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AutoFilter.prototype, "enabled", {
            get: function () {
                _throwIfNotLoaded("enabled", this._E, _typeAutoFilter, this._isNull);
                return this._E;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(AutoFilter.prototype, "isDataFiltered", {
            get: function () {
                _throwIfNotLoaded("isDataFiltered", this._I, _typeAutoFilter, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        AutoFilter.prototype.apply = function (range, columnIndex, criteria) {
            _invokeMethod(this, "Apply", 0, [range, columnIndex, criteria], 0, 0);
        };
        AutoFilter.prototype.clearColumnCriteria = function (columnIndex) {
            _throwIfApiNotSupported("AutoFilter.clearColumnCriteria", _defaultApiSetName, "1.14", _hostName);
            _invokeMethod(this, "ClearColumnCriteria", 0, [columnIndex], 0, 0);
        };
        AutoFilter.prototype.clearCriteria = function () {
            _invokeMethod(this, "ClearCriteria", 0, [], 0, 0);
        };
        AutoFilter.prototype.getRange = function () {
            return _createMethodObject(Excel.Range, this, "GetRange", 1, [], false, true, null, 4);
        };
        AutoFilter.prototype.getRangeOrNullObject = function () {
            return _createMethodObject(Excel.Range, this, "GetRangeOrNullObject", 1, [], false, true, null, 4);
        };
        AutoFilter.prototype.reapply = function () {
            _invokeMethod(this, "Reapply", 0, [], 0, 0);
        };
        AutoFilter.prototype.remove = function () {
            _invokeMethod(this, "Remove", 0, [], 0, 0);
        };
        AutoFilter.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Criteria"])) {
                this._C = obj["Criteria"];
            }
            if (!_isUndefined(obj["Enabled"])) {
                this._E = obj["Enabled"];
            }
            if (!_isUndefined(obj["IsDataFiltered"])) {
                this._I = obj["IsDataFiltered"];
            }
        };
        AutoFilter.prototype.load = function (options) {
            return _load(this, options);
        };
        AutoFilter.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        AutoFilter.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        AutoFilter.prototype.toJSON = function () {
            return _toJson(this, {
                "criteria": this._C,
                "enabled": this._E,
                "isDataFiltered": this._I
            }, {});
        };
        AutoFilter.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        AutoFilter.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return AutoFilter;
    }(OfficeExtension.ClientObject));
    Excel.AutoFilter = AutoFilter;
    var _typeCultureInfo = "CultureInfo";
    var CultureInfo = (function (_super) {
        __extends(CultureInfo, _super);
        function CultureInfo() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CultureInfo.prototype, "_className", {
            get: function () {
                return "CultureInfo";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CultureInfo.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CultureInfo.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CultureInfo.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["numberFormat", "datetimeFormat"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CultureInfo.prototype, "datetimeFormat", {
            get: function () {
                _throwIfApiNotSupported("CultureInfo.datetimeFormat", _defaultApiSetName, "1.12", _hostName);
                if (!this._D) {
                    this._D = _createPropertyObject(Excel.DatetimeFormatInfo, this, "DatetimeFormat", false, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CultureInfo.prototype, "numberFormat", {
            get: function () {
                if (!this._Nu) {
                    this._Nu = _createPropertyObject(Excel.NumberFormatInfo, this, "NumberFormat", false, 4);
                }
                return this._Nu;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CultureInfo.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeCultureInfo, this._isNull);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        CultureInfo.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            _handleNavigationPropertyResults(this, obj, ["datetimeFormat", "DatetimeFormat", "numberFormat", "NumberFormat"]);
        };
        CultureInfo.prototype.load = function (options) {
            return _load(this, options);
        };
        CultureInfo.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CultureInfo.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        CultureInfo.prototype.toJSON = function () {
            return _toJson(this, {
                "name": this._N
            }, {
                "datetimeFormat": this._D,
                "numberFormat": this._Nu
            });
        };
        CultureInfo.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        CultureInfo.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return CultureInfo;
    }(OfficeExtension.ClientObject));
    Excel.CultureInfo = CultureInfo;
    var _typeNumberFormatInfo = "NumberFormatInfo";
    var NumberFormatInfo = (function (_super) {
        __extends(NumberFormatInfo, _super);
        function NumberFormatInfo() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(NumberFormatInfo.prototype, "_className", {
            get: function () {
                return "NumberFormatInfo";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NumberFormatInfo.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["numberDecimalSeparator", "numberGroupSeparator"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NumberFormatInfo.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["NumberDecimalSeparator", "NumberGroupSeparator"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NumberFormatInfo.prototype, "numberDecimalSeparator", {
            get: function () {
                _throwIfNotLoaded("numberDecimalSeparator", this._N, _typeNumberFormatInfo, this._isNull);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NumberFormatInfo.prototype, "numberGroupSeparator", {
            get: function () {
                _throwIfNotLoaded("numberGroupSeparator", this._Nu, _typeNumberFormatInfo, this._isNull);
                return this._Nu;
            },
            enumerable: true,
            configurable: true
        });
        NumberFormatInfo.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["NumberDecimalSeparator"])) {
                this._N = obj["NumberDecimalSeparator"];
            }
            if (!_isUndefined(obj["NumberGroupSeparator"])) {
                this._Nu = obj["NumberGroupSeparator"];
            }
        };
        NumberFormatInfo.prototype.load = function (options) {
            return _load(this, options);
        };
        NumberFormatInfo.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        NumberFormatInfo.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        NumberFormatInfo.prototype.toJSON = function () {
            return _toJson(this, {
                "numberDecimalSeparator": this._N,
                "numberGroupSeparator": this._Nu
            }, {});
        };
        NumberFormatInfo.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        NumberFormatInfo.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return NumberFormatInfo;
    }(OfficeExtension.ClientObject));
    Excel.NumberFormatInfo = NumberFormatInfo;
    var _typeDatetimeFormatInfo = "DatetimeFormatInfo";
    var DatetimeFormatInfo = (function (_super) {
        __extends(DatetimeFormatInfo, _super);
        function DatetimeFormatInfo() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(DatetimeFormatInfo.prototype, "_className", {
            get: function () {
                return "DatetimeFormatInfo";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DatetimeFormatInfo.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["dateSeparator", "longDatePattern", "shortDatePattern", "timeSeparator", "longTimePattern"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DatetimeFormatInfo.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["DateSeparator", "LongDatePattern", "ShortDatePattern", "TimeSeparator", "LongTimePattern"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DatetimeFormatInfo.prototype, "dateSeparator", {
            get: function () {
                _throwIfNotLoaded("dateSeparator", this._D, _typeDatetimeFormatInfo, this._isNull);
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DatetimeFormatInfo.prototype, "longDatePattern", {
            get: function () {
                _throwIfNotLoaded("longDatePattern", this._L, _typeDatetimeFormatInfo, this._isNull);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DatetimeFormatInfo.prototype, "longTimePattern", {
            get: function () {
                _throwIfNotLoaded("longTimePattern", this._Lo, _typeDatetimeFormatInfo, this._isNull);
                return this._Lo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DatetimeFormatInfo.prototype, "shortDatePattern", {
            get: function () {
                _throwIfNotLoaded("shortDatePattern", this._S, _typeDatetimeFormatInfo, this._isNull);
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DatetimeFormatInfo.prototype, "timeSeparator", {
            get: function () {
                _throwIfNotLoaded("timeSeparator", this._T, _typeDatetimeFormatInfo, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        DatetimeFormatInfo.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["DateSeparator"])) {
                this._D = obj["DateSeparator"];
            }
            if (!_isUndefined(obj["LongDatePattern"])) {
                this._L = obj["LongDatePattern"];
            }
            if (!_isUndefined(obj["LongTimePattern"])) {
                this._Lo = obj["LongTimePattern"];
            }
            if (!_isUndefined(obj["ShortDatePattern"])) {
                this._S = obj["ShortDatePattern"];
            }
            if (!_isUndefined(obj["TimeSeparator"])) {
                this._T = obj["TimeSeparator"];
            }
        };
        DatetimeFormatInfo.prototype.load = function (options) {
            return _load(this, options);
        };
        DatetimeFormatInfo.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        DatetimeFormatInfo.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        DatetimeFormatInfo.prototype.toJSON = function () {
            return _toJson(this, {
                "dateSeparator": this._D,
                "longDatePattern": this._L,
                "longTimePattern": this._Lo,
                "shortDatePattern": this._S,
                "timeSeparator": this._T
            }, {});
        };
        DatetimeFormatInfo.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        DatetimeFormatInfo.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return DatetimeFormatInfo;
    }(OfficeExtension.ClientObject));
    Excel.DatetimeFormatInfo = DatetimeFormatInfo;
    var _typeCustomXmlPartScopedCollection = "CustomXmlPartScopedCollection";
    var CustomXmlPartScopedCollection = (function (_super) {
        __extends(CustomXmlPartScopedCollection, _super);
        function CustomXmlPartScopedCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CustomXmlPartScopedCollection.prototype, "_className", {
            get: function () {
                return "CustomXmlPartScopedCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomXmlPartScopedCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomXmlPartScopedCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeCustomXmlPartScopedCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        CustomXmlPartScopedCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        CustomXmlPartScopedCollection.prototype.getItem = function (id) {
            return _createIndexerObject(Excel.CustomXmlPart, this, [id]);
        };
        CustomXmlPartScopedCollection.prototype.getItemOrNullObject = function (id) {
            return _createMethodObject(Excel.CustomXmlPart, this, "GetItemOrNullObject", 1, [id], false, false, null, 4);
        };
        CustomXmlPartScopedCollection.prototype.getOnlyItem = function () {
            return _createMethodObject(Excel.CustomXmlPart, this, "GetOnlyItem", 1, [], false, false, null, 4);
        };
        CustomXmlPartScopedCollection.prototype.getOnlyItemOrNullObject = function () {
            return _createMethodObject(Excel.CustomXmlPart, this, "GetOnlyItemOrNullObject", 1, [], false, false, null, 4);
        };
        CustomXmlPartScopedCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.CustomXmlPart, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        CustomXmlPartScopedCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        CustomXmlPartScopedCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CustomXmlPartScopedCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.CustomXmlPart, true, _this, childItemData, index); });
        };
        CustomXmlPartScopedCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        CustomXmlPartScopedCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.CustomXmlPart, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return CustomXmlPartScopedCollection;
    }(OfficeExtension.ClientObject));
    Excel.CustomXmlPartScopedCollection = CustomXmlPartScopedCollection;
    var _typeCustomXmlPartCollection = "CustomXmlPartCollection";
    var CustomXmlPartCollection = (function (_super) {
        __extends(CustomXmlPartCollection, _super);
        function CustomXmlPartCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CustomXmlPartCollection.prototype, "_className", {
            get: function () {
                return "CustomXmlPartCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomXmlPartCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomXmlPartCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeCustomXmlPartCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        CustomXmlPartCollection.prototype.add = function (xml) {
            return _createMethodObject(Excel.CustomXmlPart, this, "Add", 0, [xml], false, true, null, 0);
        };
        CustomXmlPartCollection.prototype.getByNamespace = function (namespaceUri) {
            return _createMethodObject(Excel.CustomXmlPartScopedCollection, this, "GetByNamespace", 1, [namespaceUri], true, false, null, 4);
        };
        CustomXmlPartCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        CustomXmlPartCollection.prototype.getItem = function (id) {
            return _createIndexerObject(Excel.CustomXmlPart, this, [id]);
        };
        CustomXmlPartCollection.prototype.getItemOrNullObject = function (id) {
            return _createMethodObject(Excel.CustomXmlPart, this, "GetItemOrNullObject", 1, [id], false, false, null, 4);
        };
        CustomXmlPartCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.CustomXmlPart, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        CustomXmlPartCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        CustomXmlPartCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CustomXmlPartCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.CustomXmlPart, true, _this, childItemData, index); });
        };
        CustomXmlPartCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        CustomXmlPartCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.CustomXmlPart, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return CustomXmlPartCollection;
    }(OfficeExtension.ClientObject));
    Excel.CustomXmlPartCollection = CustomXmlPartCollection;
    var _typeCustomXmlPart = "CustomXmlPart";
    var CustomXmlPart = (function (_super) {
        __extends(CustomXmlPart, _super);
        function CustomXmlPart() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CustomXmlPart.prototype, "_className", {
            get: function () {
                return "CustomXmlPart";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomXmlPart.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "namespaceUri"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomXmlPart.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "NamespaceUri"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomXmlPart.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeCustomXmlPart, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomXmlPart.prototype, "namespaceUri", {
            get: function () {
                _throwIfNotLoaded("namespaceUri", this._N, _typeCustomXmlPart, this._isNull);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        CustomXmlPart.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        CustomXmlPart.prototype.getXml = function () {
            return _invokeMethod(this, "GetXml", 1, [], 4, 0);
        };
        CustomXmlPart.prototype.setXml = function (xml) {
            _invokeMethod(this, "SetXml", 0, [xml], 0, 0);
        };
        CustomXmlPart.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["NamespaceUri"])) {
                this._N = obj["NamespaceUri"];
            }
        };
        CustomXmlPart.prototype.load = function (options) {
            return _load(this, options);
        };
        CustomXmlPart.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CustomXmlPart.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        CustomXmlPart.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        CustomXmlPart.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I,
                "namespaceUri": this._N
            }, {});
        };
        CustomXmlPart.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        CustomXmlPart.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return CustomXmlPart;
    }(OfficeExtension.ClientObject));
    Excel.CustomXmlPart = CustomXmlPart;
    var _type_V1Api = "_V1Api";
    var _V1Api = (function (_super) {
        __extends(_V1Api, _super);
        function _V1Api() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(_V1Api.prototype, "_className", {
            get: function () {
                return "_V1Api";
            },
            enumerable: true,
            configurable: true
        });
        _V1Api.prototype.bindingAddColumns = function (input) {
            return _invokeMethod(this, "BindingAddColumns", 0, [input], 0, 0);
        };
        _V1Api.prototype.bindingAddFromNamedItem = function (input) {
            return _invokeMethod(this, "BindingAddFromNamedItem", 1, [input], 0, 0);
        };
        _V1Api.prototype.bindingAddFromPrompt = function (input) {
            return _invokeMethod(this, "BindingAddFromPrompt", 1, [input], 0, 0);
        };
        _V1Api.prototype.bindingAddFromSelection = function (input) {
            return _invokeMethod(this, "BindingAddFromSelection", 1, [input], 0, 0);
        };
        _V1Api.prototype.bindingAddRows = function (input) {
            return _invokeMethod(this, "BindingAddRows", 0, [input], 0, 0);
        };
        _V1Api.prototype.bindingClearFormats = function (input) {
            return _invokeMethod(this, "BindingClearFormats", 0, [input], 0, 0);
        };
        _V1Api.prototype.bindingDeleteAllDataValues = function (input) {
            return _invokeMethod(this, "BindingDeleteAllDataValues", 0, [input], 0, 0);
        };
        _V1Api.prototype.bindingGetAll = function () {
            return _invokeMethod(this, "BindingGetAll", 1, [], 4, 0);
        };
        _V1Api.prototype.bindingGetById = function (input) {
            return _invokeMethod(this, "BindingGetById", 1, [input], 4, 0);
        };
        _V1Api.prototype.bindingGetData = function (input) {
            return _invokeMethod(this, "BindingGetData", 1, [input], 4, 0);
        };
        _V1Api.prototype.bindingReleaseById = function (input) {
            return _invokeMethod(this, "BindingReleaseById", 1, [input], 0, 0);
        };
        _V1Api.prototype.bindingSetData = function (input) {
            return _invokeMethod(this, "BindingSetData", 0, [input], 0, 0);
        };
        _V1Api.prototype.bindingSetFormats = function (input) {
            return _invokeMethod(this, "BindingSetFormats", 0, [input], 0, 0);
        };
        _V1Api.prototype.bindingSetTableOptions = function (input) {
            return _invokeMethod(this, "BindingSetTableOptions", 0, [input], 0, 0);
        };
        _V1Api.prototype.getFilePropertiesAsync = function () {
            _throwIfApiNotSupported("_V1Api.getFilePropertiesAsync", _defaultApiSetName, "1.6", _hostName);
            return _invokeMethod(this, "GetFilePropertiesAsync", 1, [], 4, 0);
        };
        _V1Api.prototype.getSelectedData = function (input) {
            return _invokeMethod(this, "GetSelectedData", 1, [input], 4, 0);
        };
        _V1Api.prototype.gotoById = function (input) {
            return _invokeMethod(this, "GotoById", 1, [input], 4, 0);
        };
        _V1Api.prototype.setSelectedData = function (input) {
            return _invokeMethod(this, "SetSelectedData", 0, [input], 0, 0);
        };
        _V1Api.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        _V1Api.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        _V1Api.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return _V1Api;
    }(OfficeExtension.ClientObject));
    Excel._V1Api = _V1Api;
    var _typePivotTableScopedCollection = "PivotTableScopedCollection";
    var PivotTableScopedCollection = (function (_super) {
        __extends(PivotTableScopedCollection, _super);
        function PivotTableScopedCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotTableScopedCollection.prototype, "_className", {
            get: function () {
                return "PivotTableScopedCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableScopedCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableScopedCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typePivotTableScopedCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        PivotTableScopedCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        PivotTableScopedCollection.prototype.getFirst = function () {
            return _createMethodObject(Excel.PivotTable, this, "GetFirst", 1, [], false, true, null, 4);
        };
        PivotTableScopedCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.PivotTable, this, [key]);
        };
        PivotTableScopedCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.PivotTable, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        PivotTableScopedCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.PivotTable, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        PivotTableScopedCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotTableScopedCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotTableScopedCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.PivotTable, true, _this, childItemData, index); });
        };
        PivotTableScopedCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        PivotTableScopedCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.PivotTable, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return PivotTableScopedCollection;
    }(OfficeExtension.ClientObject));
    Excel.PivotTableScopedCollection = PivotTableScopedCollection;
    var _typePivotTableCollection = "PivotTableCollection";
    var PivotTableCollection = (function (_super) {
        __extends(PivotTableCollection, _super);
        function PivotTableCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotTableCollection.prototype, "_className", {
            get: function () {
                return "PivotTableCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typePivotTableCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        PivotTableCollection.prototype.add = function (name, source, destination) {
            _throwIfApiNotSupported("PivotTableCollection.add", _defaultApiSetName, "1.8", _hostName);
            return _createMethodObject(Excel.PivotTable, this, "Add", 0, [name, source, destination], false, true, null, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
        };
        PivotTableCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("PivotTableCollection.getCount", _defaultApiSetName, "1.4", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        PivotTableCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.PivotTable, this, [name]);
        };
        PivotTableCollection.prototype.getItemOrNullObject = function (name) {
            _throwIfApiNotSupported("PivotTableCollection.getItemOrNullObject", _defaultApiSetName, "1.4", _hostName);
            return _createMethodObject(Excel.PivotTable, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        PivotTableCollection.prototype.refreshAll = function () {
            _invokeMethod(this, "RefreshAll", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        PivotTableCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.PivotTable, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        PivotTableCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotTableCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotTableCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.PivotTable, true, _this, childItemData, index); });
        };
        PivotTableCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        PivotTableCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.PivotTable, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return PivotTableCollection;
    }(OfficeExtension.ClientObject));
    Excel.PivotTableCollection = PivotTableCollection;
    var _typePivotTable = "PivotTable";
    var PivotTable = (function (_super) {
        __extends(PivotTable, _super);
        function PivotTable() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotTable.prototype, "_className", {
            get: function () {
                return "PivotTable";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "id", "useCustomSortLists", "enableDataValueEditing", "refreshOnOpen", "allowMultipleFiltersPerField"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "Id", "UseCustomSortLists", "EnableDataValueEditing", "RefreshOnOpen", "AllowMultipleFiltersPerField"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, false, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["worksheet", "hierarchies", "rowHierarchies", "columnHierarchies", "dataHierarchies", "filterHierarchies", "layout"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "columnHierarchies", {
            get: function () {
                _throwIfApiNotSupported("PivotTable.columnHierarchies", _defaultApiSetName, "1.8", _hostName);
                if (!this._C) {
                    this._C = _createPropertyObject(Excel.RowColumnPivotHierarchyCollection, this, "ColumnHierarchies", true, 4);
                }
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "dataHierarchies", {
            get: function () {
                _throwIfApiNotSupported("PivotTable.dataHierarchies", _defaultApiSetName, "1.8", _hostName);
                if (!this._D) {
                    this._D = _createPropertyObject(Excel.DataPivotHierarchyCollection, this, "DataHierarchies", true, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "filterHierarchies", {
            get: function () {
                _throwIfApiNotSupported("PivotTable.filterHierarchies", _defaultApiSetName, "1.8", _hostName);
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.FilterPivotHierarchyCollection, this, "FilterHierarchies", true, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "hierarchies", {
            get: function () {
                _throwIfApiNotSupported("PivotTable.hierarchies", _defaultApiSetName, "1.8", _hostName);
                if (!this._H) {
                    this._H = _createPropertyObject(Excel.PivotHierarchyCollection, this, "Hierarchies", true, 4);
                }
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "layout", {
            get: function () {
                _throwIfApiNotSupported("PivotTable.layout", _defaultApiSetName, "1.8", _hostName);
                if (!this._L) {
                    this._L = _createPropertyObject(Excel.PivotLayout, this, "Layout", false, 4);
                }
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "rowHierarchies", {
            get: function () {
                _throwIfApiNotSupported("PivotTable.rowHierarchies", _defaultApiSetName, "1.8", _hostName);
                if (!this._Ro) {
                    this._Ro = _createPropertyObject(Excel.RowColumnPivotHierarchyCollection, this, "RowHierarchies", true, 4);
                }
                return this._Ro;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "worksheet", {
            get: function () {
                if (!this._W) {
                    this._W = _createPropertyObject(Excel.Worksheet, this, "Worksheet", false, 4);
                }
                return this._W;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "allowMultipleFiltersPerField", {
            get: function () {
                _throwIfNotLoaded("allowMultipleFiltersPerField", this._A, _typePivotTable, this._isNull);
                _throwIfApiNotSupported("PivotTable.allowMultipleFiltersPerField", _defaultApiSetName, "1.12", _hostName);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AllowMultipleFiltersPerField", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "enableDataValueEditing", {
            get: function () {
                _throwIfNotLoaded("enableDataValueEditing", this._E, _typePivotTable, this._isNull);
                _throwIfApiNotSupported("PivotTable.enableDataValueEditing", _defaultApiSetName, "1.9", _hostName);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "EnableDataValueEditing", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typePivotTable, this._isNull);
                _throwIfApiNotSupported("PivotTable.id", _defaultApiSetName, "1.5", _hostName);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typePivotTable, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "refreshOnOpen", {
            get: function () {
                _throwIfNotLoaded("refreshOnOpen", this._R, _typePivotTable, this._isNull);
                _throwIfApiNotSupported("PivotTable.refreshOnOpen", _defaultApiSetName, "1.13", _hostName);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "RefreshOnOpen", value, _calculateApiFlags(2, "ExcelApiUndo", "1.2"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTable.prototype, "useCustomSortLists", {
            get: function () {
                _throwIfNotLoaded("useCustomSortLists", this._U, _typePivotTable, this._isNull);
                _throwIfApiNotSupported("PivotTable.useCustomSortLists", _defaultApiSetName, "1.9", _hostName);
                return this._U;
            },
            set: function (value) {
                this._U = value;
                _invokeSetProperty(this, "UseCustomSortLists", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        PivotTable.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "useCustomSortLists", "enableDataValueEditing"], [], [
                "allowMultipleFiltersPerField",
                "columnHierarchies",
                "dataHierarchies",
                "filterHierarchies",
                "hierarchies",
                "layout",
                "refreshOnOpen",
                "rowHierarchies",
                "worksheet"
            ]);
        };
        PivotTable.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        PivotTable.prototype["delete"] = function () {
            _throwIfApiNotSupported("PivotTable.delete", _defaultApiSetName, "1.8", _hostName);
            _invokeMethod(this, "Delete", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        PivotTable.prototype.refresh = function () {
            _invokeMethod(this, "Refresh", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        PivotTable.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AllowMultipleFiltersPerField"])) {
                this._A = obj["AllowMultipleFiltersPerField"];
            }
            if (!_isUndefined(obj["EnableDataValueEditing"])) {
                this._E = obj["EnableDataValueEditing"];
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["RefreshOnOpen"])) {
                this._R = obj["RefreshOnOpen"];
            }
            if (!_isUndefined(obj["UseCustomSortLists"])) {
                this._U = obj["UseCustomSortLists"];
            }
            _handleNavigationPropertyResults(this, obj, ["columnHierarchies", "ColumnHierarchies", "dataHierarchies", "DataHierarchies", "filterHierarchies", "FilterHierarchies", "hierarchies", "Hierarchies", "layout", "Layout", "rowHierarchies", "RowHierarchies", "worksheet", "Worksheet"]);
        };
        PivotTable.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotTable.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotTable.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        PivotTable.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PivotTable.prototype.toJSON = function () {
            return _toJson(this, {
                "enableDataValueEditing": this._E,
                "id": this._I,
                "name": this._N,
                "useCustomSortLists": this._U
            }, {
                "columnHierarchies": this._C,
                "dataHierarchies": this._D,
                "filterHierarchies": this._F,
                "hierarchies": this._H,
                "rowHierarchies": this._Ro
            });
        };
        PivotTable.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PivotTable.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PivotTable;
    }(OfficeExtension.ClientObject));
    Excel.PivotTable = PivotTable;
    var _typePivotLayout = "PivotLayout";
    var PivotLayout = (function (_super) {
        __extends(PivotLayout, _super);
        function PivotLayout() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotLayout.prototype, "_className", {
            get: function () {
                return "PivotLayout";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["showColumnGrandTotals", "showRowGrandTotals", "enableFieldList", "subtotalLocation", "layoutType", "autoFormat", "preserveFormatting", "altTextDescription", "altTextTitle", "emptyCellText", "fillEmptyCells", "showFieldHeaders"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["ShowColumnGrandTotals", "ShowRowGrandTotals", "EnableFieldList", "SubtotalLocation", "LayoutType", "AutoFormat", "PreserveFormatting", "AltTextDescription", "AltTextTitle", "EmptyCellText", "FillEmptyCells", "ShowFieldHeaders"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "altTextDescription", {
            get: function () {
                _throwIfNotLoaded("altTextDescription", this._A, _typePivotLayout, this._isNull);
                _throwIfApiNotSupported("PivotLayout.altTextDescription", _defaultApiSetName, "1.13", _hostName);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AltTextDescription", value, _calculateApiFlags(2, "ExcelApiUndo", "1.2"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "altTextTitle", {
            get: function () {
                _throwIfNotLoaded("altTextTitle", this._Al, _typePivotLayout, this._isNull);
                _throwIfApiNotSupported("PivotLayout.altTextTitle", _defaultApiSetName, "1.13", _hostName);
                return this._Al;
            },
            set: function (value) {
                this._Al = value;
                _invokeSetProperty(this, "AltTextTitle", value, _calculateApiFlags(2, "ExcelApiUndo", "1.2"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "autoFormat", {
            get: function () {
                _throwIfNotLoaded("autoFormat", this._Au, _typePivotLayout, this._isNull);
                _throwIfApiNotSupported("PivotLayout.autoFormat", _defaultApiSetName, "1.9", _hostName);
                return this._Au;
            },
            set: function (value) {
                this._Au = value;
                _invokeSetProperty(this, "AutoFormat", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "emptyCellText", {
            get: function () {
                _throwIfNotLoaded("emptyCellText", this._E, _typePivotLayout, this._isNull);
                _throwIfApiNotSupported("PivotLayout.emptyCellText", _defaultApiSetName, "1.13", _hostName);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "EmptyCellText", value, _calculateApiFlags(2, "ExcelApiUndo", "1.2"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "enableFieldList", {
            get: function () {
                _throwIfNotLoaded("enableFieldList", this._En, _typePivotLayout, this._isNull);
                _throwIfApiNotSupported("PivotLayout.enableFieldList", _defaultApiSetName, "1.10", _hostName);
                return this._En;
            },
            set: function (value) {
                this._En = value;
                _invokeSetProperty(this, "EnableFieldList", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "fillEmptyCells", {
            get: function () {
                _throwIfNotLoaded("fillEmptyCells", this._F, _typePivotLayout, this._isNull);
                _throwIfApiNotSupported("PivotLayout.fillEmptyCells", _defaultApiSetName, "1.13", _hostName);
                return this._F;
            },
            set: function (value) {
                this._F = value;
                _invokeSetProperty(this, "FillEmptyCells", value, _calculateApiFlags(2, "ExcelApiUndo", "1.2"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "layoutType", {
            get: function () {
                _throwIfNotLoaded("layoutType", this._L, _typePivotLayout, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "LayoutType", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "preserveFormatting", {
            get: function () {
                _throwIfNotLoaded("preserveFormatting", this._P, _typePivotLayout, this._isNull);
                _throwIfApiNotSupported("PivotLayout.preserveFormatting", _defaultApiSetName, "1.9", _hostName);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "PreserveFormatting", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "showColumnGrandTotals", {
            get: function () {
                _throwIfNotLoaded("showColumnGrandTotals", this._S, _typePivotLayout, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowColumnGrandTotals", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "showFieldHeaders", {
            get: function () {
                _throwIfNotLoaded("showFieldHeaders", this._Sh, _typePivotLayout, this._isNull);
                _throwIfApiNotSupported("PivotLayout.showFieldHeaders", _defaultApiSetName, "1.13", _hostName);
                return this._Sh;
            },
            set: function (value) {
                this._Sh = value;
                _invokeSetProperty(this, "ShowFieldHeaders", value, _calculateApiFlags(2, "ExcelApiUndo", "1.2"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "showRowGrandTotals", {
            get: function () {
                _throwIfNotLoaded("showRowGrandTotals", this._Sho, _typePivotLayout, this._isNull);
                return this._Sho;
            },
            set: function (value) {
                this._Sho = value;
                _invokeSetProperty(this, "ShowRowGrandTotals", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotLayout.prototype, "subtotalLocation", {
            get: function () {
                _throwIfNotLoaded("subtotalLocation", this._Su, _typePivotLayout, this._isNull);
                return this._Su;
            },
            set: function (value) {
                this._Su = value;
                _invokeSetProperty(this, "SubtotalLocation", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        PivotLayout.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["showColumnGrandTotals", "showRowGrandTotals", "enableFieldList", "subtotalLocation", "layoutType", "autoFormat", "preserveFormatting"], [], [
                "altTextDescription",
                "altTextTitle",
                "emptyCellText",
                "fillEmptyCells",
                "showFieldHeaders"
            ]);
        };
        PivotLayout.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        PivotLayout.prototype.displayBlankLineAfterEachItem = function (display) {
            _throwIfApiNotSupported("PivotLayout.displayBlankLineAfterEachItem", _defaultApiSetName, "1.13", _hostName);
            _invokeMethod(this, "DisplayBlankLineAfterEachItem", 0, [display], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        PivotLayout.prototype.getColumnLabelRange = function () {
            var _a = _CC.PivotLayout_GetColumnLabelRange(this), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            return _createMethodObject(Excel.Range, this, "GetColumnLabelRange", 1, [], false, false, null, 0);
        };
        PivotLayout.prototype.getDataBodyRange = function () {
            var _a = _CC.PivotLayout_GetDataBodyRange(this), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            return _createMethodObject(Excel.Range, this, "GetDataBodyRange", 1, [], false, false, null, 0);
        };
        PivotLayout.prototype.getDataHierarchy = function (cell) {
            var _a = _CC.PivotLayout_GetDataHierarchy(this, cell), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            _throwIfApiNotSupported("PivotLayout.getDataHierarchy", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.DataPivotHierarchy, this, "GetDataHierarchy", 1, [cell], false, false, null, 0);
        };
        PivotLayout.prototype.getFilterAxisRange = function () {
            var _a = _CC.PivotLayout_GetFilterAxisRange(this), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            return _createMethodObject(Excel.Range, this, "GetFilterAxisRange", 1, [], false, false, null, 0);
        };
        PivotLayout.prototype.getPivotItems = function (axis, cell) {
            _throwIfApiNotSupported("PivotLayout.getPivotItems", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.PivotItemCollection, this, "GetPivotItems", 0, [axis, cell], true, false, null, 0);
        };
        PivotLayout.prototype.getRange = function () {
            var _a = _CC.PivotLayout_GetRange(this), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            return _createMethodObject(Excel.Range, this, "GetRange", 1, [], false, false, null, 0);
        };
        PivotLayout.prototype.getRowLabelRange = function () {
            var _a = _CC.PivotLayout_GetRowLabelRange(this), handled = _a.handled, result = _a.result;
            if (handled) {
                return result;
            }
            return _createMethodObject(Excel.Range, this, "GetRowLabelRange", 1, [], false, false, null, 0);
        };
        PivotLayout.prototype.repeatAllItemLabels = function (repeatLabels) {
            _throwIfApiNotSupported("PivotLayout.repeatAllItemLabels", _defaultApiSetName, "1.13", _hostName);
            _invokeMethod(this, "RepeatAllItemLabels", 0, [repeatLabels], _calculateApiFlags(2, "ExcelApiUndo", "1.2"), 0);
        };
        PivotLayout.prototype.setAutoSortOnCell = function (cell, sortBy) {
            _throwIfApiNotSupported("PivotLayout.setAutoSortOnCell", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "SetAutoSortOnCell", 0, [cell, sortBy], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        PivotLayout.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AltTextDescription"])) {
                this._A = obj["AltTextDescription"];
            }
            if (!_isUndefined(obj["AltTextTitle"])) {
                this._Al = obj["AltTextTitle"];
            }
            if (!_isUndefined(obj["AutoFormat"])) {
                this._Au = obj["AutoFormat"];
            }
            if (!_isUndefined(obj["EmptyCellText"])) {
                this._E = obj["EmptyCellText"];
            }
            if (!_isUndefined(obj["EnableFieldList"])) {
                this._En = obj["EnableFieldList"];
            }
            if (!_isUndefined(obj["FillEmptyCells"])) {
                this._F = obj["FillEmptyCells"];
            }
            if (!_isUndefined(obj["LayoutType"])) {
                this._L = obj["LayoutType"];
            }
            if (!_isUndefined(obj["PreserveFormatting"])) {
                this._P = obj["PreserveFormatting"];
            }
            if (!_isUndefined(obj["ShowColumnGrandTotals"])) {
                this._S = obj["ShowColumnGrandTotals"];
            }
            if (!_isUndefined(obj["ShowFieldHeaders"])) {
                this._Sh = obj["ShowFieldHeaders"];
            }
            if (!_isUndefined(obj["ShowRowGrandTotals"])) {
                this._Sho = obj["ShowRowGrandTotals"];
            }
            if (!_isUndefined(obj["SubtotalLocation"])) {
                this._Su = obj["SubtotalLocation"];
            }
        };
        PivotLayout.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotLayout.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotLayout.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PivotLayout.prototype.toJSON = function () {
            return _toJson(this, {
                "autoFormat": this._Au,
                "enableFieldList": this._En,
                "layoutType": this._L,
                "preserveFormatting": this._P,
                "showColumnGrandTotals": this._S,
                "showRowGrandTotals": this._Sho,
                "subtotalLocation": this._Su
            }, {});
        };
        PivotLayout.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PivotLayout.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PivotLayout;
    }(OfficeExtension.ClientObject));
    Excel.PivotLayout = PivotLayout;
    (function (_CC) {
        function PivotLayout_GetColumnLabelRange(thisObj) {
            if (!OfficeExtension.Utility.isSetSupported("Pivot", "1.5")) {
                var result = _createMethodObject(Excel.Range, thisObj, "GetColumnLabelRange", 0, [], false, false, null, 0);
                return { handled: true, result: result };
            }
            return { handled: false, result: undefined };
        }
        _CC.PivotLayout_GetColumnLabelRange = PivotLayout_GetColumnLabelRange;
        function PivotLayout_GetDataBodyRange(thisObj) {
            if (!OfficeExtension.Utility.isSetSupported("Pivot", "1.5")) {
                var result = _createMethodObject(Excel.Range, thisObj, "GetDataBodyRange", 0, [], false, false, null, 0);
                return { handled: true, result: result };
            }
            return { handled: false, result: undefined };
        }
        _CC.PivotLayout_GetDataBodyRange = PivotLayout_GetDataBodyRange;
        function PivotLayout_GetDataHierarchy(thisObj, cell) {
            if (!OfficeExtension.Utility.isSetSupported("Pivot", "1.5")) {
                _throwIfApiNotSupported("PivotLayout.getDataHierarchy", _defaultApiSetName, "1.9", _hostName);
                var result = _createMethodObject(Excel.DataPivotHierarchy, thisObj, "GetDataHierarchy", 0, [cell], false, false, null, 0);
                return { handled: true, result: result };
            }
            return { handled: false, result: undefined };
        }
        _CC.PivotLayout_GetDataHierarchy = PivotLayout_GetDataHierarchy;
        function PivotLayout_GetFilterAxisRange(thisObj) {
            if (!OfficeExtension.Utility.isSetSupported("Pivot", "1.5")) {
                var result = _createMethodObject(Excel.Range, thisObj, "GetFilterAxisRange", 0, [], false, false, null, 0);
                return { handled: true, result: result };
            }
            return { handled: false, result: undefined };
        }
        _CC.PivotLayout_GetFilterAxisRange = PivotLayout_GetFilterAxisRange;
        function PivotLayout_GetRange(thisObj) {
            if (!OfficeExtension.Utility.isSetSupported("Pivot", "1.5")) {
                var result = _createMethodObject(Excel.Range, thisObj, "GetRange", 0, [], false, false, null, 0);
                return { handled: true, result: result };
            }
            return { handled: false, result: undefined };
        }
        _CC.PivotLayout_GetRange = PivotLayout_GetRange;
        function PivotLayout_GetRowLabelRange(thisObj) {
            if (!OfficeExtension.Utility.isSetSupported("Pivot", "1.5")) {
                var result = _createMethodObject(Excel.Range, thisObj, "GetRowLabelRange", 0, [], false, false, null, 0);
                return { handled: true, result: result };
            }
            return { handled: false, result: undefined };
        }
        _CC.PivotLayout_GetRowLabelRange = PivotLayout_GetRowLabelRange;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typePivotHierarchyCollection = "PivotHierarchyCollection";
    var PivotHierarchyCollection = (function (_super) {
        __extends(PivotHierarchyCollection, _super);
        function PivotHierarchyCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotHierarchyCollection.prototype, "_className", {
            get: function () {
                return "PivotHierarchyCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotHierarchyCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotHierarchyCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typePivotHierarchyCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        PivotHierarchyCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        PivotHierarchyCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.PivotHierarchy, this, [name]);
        };
        PivotHierarchyCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.PivotHierarchy, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        PivotHierarchyCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.PivotHierarchy, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        PivotHierarchyCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotHierarchyCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotHierarchyCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.PivotHierarchy, true, _this, childItemData, index); });
        };
        PivotHierarchyCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        PivotHierarchyCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.PivotHierarchy, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return PivotHierarchyCollection;
    }(OfficeExtension.ClientObject));
    Excel.PivotHierarchyCollection = PivotHierarchyCollection;
    var _typePivotHierarchy = "PivotHierarchy";
    var PivotHierarchy = (function (_super) {
        __extends(PivotHierarchy, _super);
        function PivotHierarchy() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotHierarchy.prototype, "_className", {
            get: function () {
                return "PivotHierarchy";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotHierarchy.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "name"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotHierarchy.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Name"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotHierarchy.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotHierarchy.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["fields"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotHierarchy.prototype, "fields", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.PivotFieldCollection, this, "Fields", true, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotHierarchy.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typePivotHierarchy, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotHierarchy.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typePivotHierarchy, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        PivotHierarchy.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name"], [], [
                "fields"
            ]);
        };
        PivotHierarchy.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        PivotHierarchy.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            _handleNavigationPropertyResults(this, obj, ["fields", "Fields"]);
        };
        PivotHierarchy.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotHierarchy.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotHierarchy.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        PivotHierarchy.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PivotHierarchy.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I,
                "name": this._N
            }, {
                "fields": this._F
            });
        };
        PivotHierarchy.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PivotHierarchy.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PivotHierarchy;
    }(OfficeExtension.ClientObject));
    Excel.PivotHierarchy = PivotHierarchy;
    var _typeRowColumnPivotHierarchyCollection = "RowColumnPivotHierarchyCollection";
    var RowColumnPivotHierarchyCollection = (function (_super) {
        __extends(RowColumnPivotHierarchyCollection, _super);
        function RowColumnPivotHierarchyCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RowColumnPivotHierarchyCollection.prototype, "_className", {
            get: function () {
                return "RowColumnPivotHierarchyCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RowColumnPivotHierarchyCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RowColumnPivotHierarchyCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeRowColumnPivotHierarchyCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        RowColumnPivotHierarchyCollection.prototype.add = function (pivotHierarchy) {
            return _createMethodObject(Excel.RowColumnPivotHierarchy, this, "Add", 0, [pivotHierarchy], false, true, null, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
        };
        RowColumnPivotHierarchyCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        RowColumnPivotHierarchyCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.RowColumnPivotHierarchy, this, [name]);
        };
        RowColumnPivotHierarchyCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.RowColumnPivotHierarchy, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        RowColumnPivotHierarchyCollection.prototype.remove = function (rowColumnPivotHierarchy) {
            _invokeMethod(this, "Remove", 0, [rowColumnPivotHierarchy], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        RowColumnPivotHierarchyCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.RowColumnPivotHierarchy, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        RowColumnPivotHierarchyCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        RowColumnPivotHierarchyCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RowColumnPivotHierarchyCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.RowColumnPivotHierarchy, true, _this, childItemData, index); });
        };
        RowColumnPivotHierarchyCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        RowColumnPivotHierarchyCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.RowColumnPivotHierarchy, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return RowColumnPivotHierarchyCollection;
    }(OfficeExtension.ClientObject));
    Excel.RowColumnPivotHierarchyCollection = RowColumnPivotHierarchyCollection;
    var _typeRowColumnPivotHierarchy = "RowColumnPivotHierarchy";
    var RowColumnPivotHierarchy = (function (_super) {
        __extends(RowColumnPivotHierarchy, _super);
        function RowColumnPivotHierarchy() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RowColumnPivotHierarchy.prototype, "_className", {
            get: function () {
                return "RowColumnPivotHierarchy";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RowColumnPivotHierarchy.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "name", "position"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RowColumnPivotHierarchy.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Name", "Position"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RowColumnPivotHierarchy.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RowColumnPivotHierarchy.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["fields"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RowColumnPivotHierarchy.prototype, "fields", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.PivotFieldCollection, this, "Fields", true, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RowColumnPivotHierarchy.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeRowColumnPivotHierarchy, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RowColumnPivotHierarchy.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeRowColumnPivotHierarchy, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RowColumnPivotHierarchy.prototype, "position", {
            get: function () {
                _throwIfNotLoaded("position", this._P, _typeRowColumnPivotHierarchy, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Position", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        RowColumnPivotHierarchy.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "position"], [], [
                "fields"
            ]);
        };
        RowColumnPivotHierarchy.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        RowColumnPivotHierarchy.prototype.setToDefault = function () {
            _invokeMethod(this, "SetToDefault", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        RowColumnPivotHierarchy.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Position"])) {
                this._P = obj["Position"];
            }
            _handleNavigationPropertyResults(this, obj, ["fields", "Fields"]);
        };
        RowColumnPivotHierarchy.prototype.load = function (options) {
            return _load(this, options);
        };
        RowColumnPivotHierarchy.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RowColumnPivotHierarchy.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        RowColumnPivotHierarchy.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        RowColumnPivotHierarchy.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I,
                "name": this._N,
                "position": this._P
            }, {
                "fields": this._F
            });
        };
        RowColumnPivotHierarchy.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        RowColumnPivotHierarchy.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return RowColumnPivotHierarchy;
    }(OfficeExtension.ClientObject));
    Excel.RowColumnPivotHierarchy = RowColumnPivotHierarchy;
    var _typeFilterPivotHierarchyCollection = "FilterPivotHierarchyCollection";
    var FilterPivotHierarchyCollection = (function (_super) {
        __extends(FilterPivotHierarchyCollection, _super);
        function FilterPivotHierarchyCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(FilterPivotHierarchyCollection.prototype, "_className", {
            get: function () {
                return "FilterPivotHierarchyCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchyCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchyCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeFilterPivotHierarchyCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        FilterPivotHierarchyCollection.prototype.add = function (pivotHierarchy) {
            return _createMethodObject(Excel.FilterPivotHierarchy, this, "Add", 0, [pivotHierarchy], false, true, null, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
        };
        FilterPivotHierarchyCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        FilterPivotHierarchyCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.FilterPivotHierarchy, this, [name]);
        };
        FilterPivotHierarchyCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.FilterPivotHierarchy, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        FilterPivotHierarchyCollection.prototype.remove = function (filterPivotHierarchy) {
            _invokeMethod(this, "Remove", 0, [filterPivotHierarchy], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        FilterPivotHierarchyCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.FilterPivotHierarchy, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        FilterPivotHierarchyCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        FilterPivotHierarchyCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        FilterPivotHierarchyCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.FilterPivotHierarchy, true, _this, childItemData, index); });
        };
        FilterPivotHierarchyCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        FilterPivotHierarchyCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.FilterPivotHierarchy, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return FilterPivotHierarchyCollection;
    }(OfficeExtension.ClientObject));
    Excel.FilterPivotHierarchyCollection = FilterPivotHierarchyCollection;
    var _typeFilterPivotHierarchy = "FilterPivotHierarchy";
    var FilterPivotHierarchy = (function (_super) {
        __extends(FilterPivotHierarchy, _super);
        function FilterPivotHierarchy() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(FilterPivotHierarchy.prototype, "_className", {
            get: function () {
                return "FilterPivotHierarchy";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchy.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "name", "position", "enableMultipleFilterItems"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchy.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Name", "Position", "EnableMultipleFilterItems"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchy.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchy.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["fields"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchy.prototype, "fields", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.PivotFieldCollection, this, "Fields", true, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchy.prototype, "enableMultipleFilterItems", {
            get: function () {
                _throwIfNotLoaded("enableMultipleFilterItems", this._E, _typeFilterPivotHierarchy, this._isNull);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "EnableMultipleFilterItems", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchy.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeFilterPivotHierarchy, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchy.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeFilterPivotHierarchy, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FilterPivotHierarchy.prototype, "position", {
            get: function () {
                _throwIfNotLoaded("position", this._P, _typeFilterPivotHierarchy, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Position", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        FilterPivotHierarchy.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "position", "enableMultipleFilterItems"], [], [
                "fields"
            ]);
        };
        FilterPivotHierarchy.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        FilterPivotHierarchy.prototype.setToDefault = function () {
            _invokeMethod(this, "SetToDefault", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        FilterPivotHierarchy.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["EnableMultipleFilterItems"])) {
                this._E = obj["EnableMultipleFilterItems"];
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Position"])) {
                this._P = obj["Position"];
            }
            _handleNavigationPropertyResults(this, obj, ["fields", "Fields"]);
        };
        FilterPivotHierarchy.prototype.load = function (options) {
            return _load(this, options);
        };
        FilterPivotHierarchy.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        FilterPivotHierarchy.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        FilterPivotHierarchy.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        FilterPivotHierarchy.prototype.toJSON = function () {
            return _toJson(this, {
                "enableMultipleFilterItems": this._E,
                "id": this._I,
                "name": this._N,
                "position": this._P
            }, {
                "fields": this._F
            });
        };
        FilterPivotHierarchy.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        FilterPivotHierarchy.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return FilterPivotHierarchy;
    }(OfficeExtension.ClientObject));
    Excel.FilterPivotHierarchy = FilterPivotHierarchy;
    var _typeDataPivotHierarchyCollection = "DataPivotHierarchyCollection";
    var DataPivotHierarchyCollection = (function (_super) {
        __extends(DataPivotHierarchyCollection, _super);
        function DataPivotHierarchyCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(DataPivotHierarchyCollection.prototype, "_className", {
            get: function () {
                return "DataPivotHierarchyCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchyCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchyCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeDataPivotHierarchyCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        DataPivotHierarchyCollection.prototype.add = function (pivotHierarchy) {
            return _createMethodObject(Excel.DataPivotHierarchy, this, "Add", 0, [pivotHierarchy], false, true, null, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
        };
        DataPivotHierarchyCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        DataPivotHierarchyCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.DataPivotHierarchy, this, [name]);
        };
        DataPivotHierarchyCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.DataPivotHierarchy, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        DataPivotHierarchyCollection.prototype.remove = function (DataPivotHierarchy) {
            _invokeMethod(this, "Remove", 0, [DataPivotHierarchy], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        DataPivotHierarchyCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.DataPivotHierarchy, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        DataPivotHierarchyCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        DataPivotHierarchyCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        DataPivotHierarchyCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.DataPivotHierarchy, true, _this, childItemData, index); });
        };
        DataPivotHierarchyCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        DataPivotHierarchyCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.DataPivotHierarchy, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return DataPivotHierarchyCollection;
    }(OfficeExtension.ClientObject));
    Excel.DataPivotHierarchyCollection = DataPivotHierarchyCollection;
    var _typeDataPivotHierarchy = "DataPivotHierarchy";
    var DataPivotHierarchy = (function (_super) {
        __extends(DataPivotHierarchy, _super);
        function DataPivotHierarchy() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(DataPivotHierarchy.prototype, "_className", {
            get: function () {
                return "DataPivotHierarchy";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "name", "position", "numberFormat", "summarizeBy", "showAs"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Name", "Position", "NumberFormat", "SummarizeBy", "ShowAs"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["field"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "field", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.PivotField, this, "Field", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeDataPivotHierarchy, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeDataPivotHierarchy, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "numberFormat", {
            get: function () {
                _throwIfNotLoaded("numberFormat", this._Nu, _typeDataPivotHierarchy, this._isNull);
                return this._Nu;
            },
            set: function (value) {
                this._Nu = value;
                _invokeSetProperty(this, "NumberFormat", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "position", {
            get: function () {
                _throwIfNotLoaded("position", this._P, _typeDataPivotHierarchy, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "Position", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "showAs", {
            get: function () {
                _throwIfNotLoaded("showAs", this._S, _typeDataPivotHierarchy, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowAs", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataPivotHierarchy.prototype, "summarizeBy", {
            get: function () {
                _throwIfNotLoaded("summarizeBy", this._Su, _typeDataPivotHierarchy, this._isNull);
                return this._Su;
            },
            set: function (value) {
                this._Su = value;
                _invokeSetProperty(this, "SummarizeBy", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        DataPivotHierarchy.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "position", "numberFormat", "summarizeBy", "showAs"], ["field"], []);
        };
        DataPivotHierarchy.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        DataPivotHierarchy.prototype.setToDefault = function () {
            _invokeMethod(this, "SetToDefault", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        DataPivotHierarchy.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["NumberFormat"])) {
                this._Nu = obj["NumberFormat"];
            }
            if (!_isUndefined(obj["Position"])) {
                this._P = obj["Position"];
            }
            if (!_isUndefined(obj["ShowAs"])) {
                this._S = obj["ShowAs"];
            }
            if (!_isUndefined(obj["SummarizeBy"])) {
                this._Su = obj["SummarizeBy"];
            }
            _handleNavigationPropertyResults(this, obj, ["field", "Field"]);
        };
        DataPivotHierarchy.prototype.load = function (options) {
            return _load(this, options);
        };
        DataPivotHierarchy.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        DataPivotHierarchy.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        DataPivotHierarchy.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        DataPivotHierarchy.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I,
                "name": this._N,
                "numberFormat": this._Nu,
                "position": this._P,
                "showAs": this._S,
                "summarizeBy": this._Su
            }, {
                "field": this._F
            });
        };
        DataPivotHierarchy.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        DataPivotHierarchy.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return DataPivotHierarchy;
    }(OfficeExtension.ClientObject));
    Excel.DataPivotHierarchy = DataPivotHierarchy;
    var _typePivotFieldCollection = "PivotFieldCollection";
    var PivotFieldCollection = (function (_super) {
        __extends(PivotFieldCollection, _super);
        function PivotFieldCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotFieldCollection.prototype, "_className", {
            get: function () {
                return "PivotFieldCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotFieldCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotFieldCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typePivotFieldCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        PivotFieldCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        PivotFieldCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.PivotField, this, [name]);
        };
        PivotFieldCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.PivotField, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        PivotFieldCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.PivotField, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        PivotFieldCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotFieldCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotFieldCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.PivotField, true, _this, childItemData, index); });
        };
        PivotFieldCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        PivotFieldCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.PivotField, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return PivotFieldCollection;
    }(OfficeExtension.ClientObject));
    Excel.PivotFieldCollection = PivotFieldCollection;
    var _typePivotField = "PivotField";
    var PivotField = (function (_super) {
        __extends(PivotField, _super);
        function PivotField() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotField.prototype, "_className", {
            get: function () {
                return "PivotField";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotField.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "name", "subtotals", "showAllItems"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotField.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Name", "Subtotals", "ShowAllItems"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotField.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotField.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["items"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotField.prototype, "items", {
            get: function () {
                if (!this._It) {
                    this._It = _createPropertyObject(Excel.PivotItemCollection, this, "Items", true, 4);
                }
                return this._It;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotField.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typePivotField, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotField.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typePivotField, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotField.prototype, "showAllItems", {
            get: function () {
                _throwIfNotLoaded("showAllItems", this._S, _typePivotField, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowAllItems", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotField.prototype, "subtotals", {
            get: function () {
                _throwIfNotLoaded("subtotals", this._Su, _typePivotField, this._isNull);
                return this._Su;
            },
            set: function (value) {
                this._Su = value;
                _invokeSetProperty(this, "Subtotals", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        PivotField.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "subtotals", "showAllItems"], [], [
                "items"
            ]);
        };
        PivotField.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        PivotField.prototype.applyFilter = function (filter) {
            _throwIfApiNotSupported("PivotField.applyFilter", _defaultApiSetName, "1.12", _hostName);
            _invokeMethod(this, "ApplyFilter", 0, [filter], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        PivotField.prototype.clearAllFilters = function () {
            _throwIfApiNotSupported("PivotField.clearAllFilters", _defaultApiSetName, "1.12", _hostName);
            _invokeMethod(this, "ClearAllFilters", 0, [], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        PivotField.prototype.clearFilter = function (filterType) {
            _throwIfApiNotSupported("PivotField.clearFilter", _defaultApiSetName, "1.12", _hostName);
            _invokeMethod(this, "ClearFilter", 0, [filterType], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        PivotField.prototype.getFilters = function () {
            _throwIfApiNotSupported("PivotField.getFilters", _defaultApiSetName, "1.12", _hostName);
            return _invokeMethod(this, "GetFilters", 0, [], 0, 0);
        };
        PivotField.prototype.isFiltered = function (filterType) {
            _throwIfApiNotSupported("PivotField.isFiltered", _defaultApiSetName, "1.12", _hostName);
            return _invokeMethod(this, "IsFiltered", 0, [filterType], 0, 0);
        };
        PivotField.prototype.sortByLabels = function (sortBy) {
            var handled = _CC.PivotField_SortByLabels(this, sortBy).handled;
            if (handled) {
                return;
            }
            _invokeMethod(this, "SortByLabels", 0, [sortBy], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        PivotField.prototype.sortByValues = function (sortBy, valuesHierarchy, pivotItemScope) {
            _throwIfApiNotSupported("PivotField.sortByValues", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "SortByValues", 0, [sortBy, valuesHierarchy, pivotItemScope], _calculateApiFlags(2, "ExcelApiUndo", "1.1"), 0);
        };
        PivotField.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["ShowAllItems"])) {
                this._S = obj["ShowAllItems"];
            }
            if (!_isUndefined(obj["Subtotals"])) {
                this._Su = obj["Subtotals"];
            }
            _handleNavigationPropertyResults(this, obj, ["items", "Items"]);
        };
        PivotField.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotField.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotField.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        PivotField.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PivotField.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I,
                "name": this._N,
                "showAllItems": this._S,
                "subtotals": this._Su
            }, {
                "items": this._It
            });
        };
        PivotField.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PivotField.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PivotField;
    }(OfficeExtension.ClientObject));
    Excel.PivotField = PivotField;
    (function (_CC) {
        function PivotField_SortByLabels(thisObj, sortBy) {
            if (typeof sortBy === "string") {
                sortBy = (sortBy.toLowerCase() === "ascending");
            }
            _invokeMethod(thisObj, "SortByLabels", 0, [sortBy], 0, 0);
            return { handled: true };
        }
        _CC.PivotField_SortByLabels = PivotField_SortByLabels;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typePivotItemCollection = "PivotItemCollection";
    var PivotItemCollection = (function (_super) {
        __extends(PivotItemCollection, _super);
        function PivotItemCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotItemCollection.prototype, "_className", {
            get: function () {
                return "PivotItemCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotItemCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotItemCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typePivotItemCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        PivotItemCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        PivotItemCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.PivotItem, this, [name]);
        };
        PivotItemCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.PivotItem, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        PivotItemCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.PivotItem, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        PivotItemCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotItemCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotItemCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.PivotItem, true, _this, childItemData, index); });
        };
        PivotItemCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        PivotItemCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.PivotItem, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return PivotItemCollection;
    }(OfficeExtension.ClientObject));
    Excel.PivotItemCollection = PivotItemCollection;
    var _typePivotItem = "PivotItem";
    var PivotItem = (function (_super) {
        __extends(PivotItem, _super);
        function PivotItem() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotItem.prototype, "_className", {
            get: function () {
                return "PivotItem";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotItem.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "name", "isExpanded", "visible"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotItem.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Name", "IsExpanded", "Visible"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotItem.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotItem.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typePivotItem, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotItem.prototype, "isExpanded", {
            get: function () {
                _throwIfNotLoaded("isExpanded", this._Is, _typePivotItem, this._isNull);
                return this._Is;
            },
            set: function (value) {
                this._Is = value;
                _invokeSetProperty(this, "IsExpanded", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotItem.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typePivotItem, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotItem.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._V, _typePivotItem, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Visible", value, _calculateApiFlags(2, "ExcelApiUndo", "1.1"));
            },
            enumerable: true,
            configurable: true
        });
        PivotItem.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "isExpanded", "visible"], [], []);
        };
        PivotItem.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        PivotItem.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["IsExpanded"])) {
                this._Is = obj["IsExpanded"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._V = obj["Visible"];
            }
        };
        PivotItem.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotItem.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotItem.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        PivotItem.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PivotItem.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I,
                "isExpanded": this._Is,
                "name": this._N,
                "visible": this._V
            }, {});
        };
        PivotItem.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PivotItem.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PivotItem;
    }(OfficeExtension.ClientObject));
    Excel.PivotItem = PivotItem;
    var PivotFilterTopBottomCriterion;
    (function (PivotFilterTopBottomCriterion) {
        PivotFilterTopBottomCriterion["invalid"] = "Invalid";
        PivotFilterTopBottomCriterion["topItems"] = "TopItems";
        PivotFilterTopBottomCriterion["topPercent"] = "TopPercent";
        PivotFilterTopBottomCriterion["topSum"] = "TopSum";
        PivotFilterTopBottomCriterion["bottomItems"] = "BottomItems";
        PivotFilterTopBottomCriterion["bottomPercent"] = "BottomPercent";
        PivotFilterTopBottomCriterion["bottomSum"] = "BottomSum";
    })(PivotFilterTopBottomCriterion = Excel.PivotFilterTopBottomCriterion || (Excel.PivotFilterTopBottomCriterion = {}));
    var SortBy;
    (function (SortBy) {
        SortBy["ascending"] = "Ascending";
        SortBy["descending"] = "Descending";
    })(SortBy = Excel.SortBy || (Excel.SortBy = {}));
    var AggregationFunction;
    (function (AggregationFunction) {
        AggregationFunction["unknown"] = "Unknown";
        AggregationFunction["automatic"] = "Automatic";
        AggregationFunction["sum"] = "Sum";
        AggregationFunction["count"] = "Count";
        AggregationFunction["average"] = "Average";
        AggregationFunction["max"] = "Max";
        AggregationFunction["min"] = "Min";
        AggregationFunction["product"] = "Product";
        AggregationFunction["countNumbers"] = "CountNumbers";
        AggregationFunction["standardDeviation"] = "StandardDeviation";
        AggregationFunction["standardDeviationP"] = "StandardDeviationP";
        AggregationFunction["variance"] = "Variance";
        AggregationFunction["varianceP"] = "VarianceP";
    })(AggregationFunction = Excel.AggregationFunction || (Excel.AggregationFunction = {}));
    var ShowAsCalculation;
    (function (ShowAsCalculation) {
        ShowAsCalculation["unknown"] = "Unknown";
        ShowAsCalculation["none"] = "None";
        ShowAsCalculation["percentOfGrandTotal"] = "PercentOfGrandTotal";
        ShowAsCalculation["percentOfRowTotal"] = "PercentOfRowTotal";
        ShowAsCalculation["percentOfColumnTotal"] = "PercentOfColumnTotal";
        ShowAsCalculation["percentOfParentRowTotal"] = "PercentOfParentRowTotal";
        ShowAsCalculation["percentOfParentColumnTotal"] = "PercentOfParentColumnTotal";
        ShowAsCalculation["percentOfParentTotal"] = "PercentOfParentTotal";
        ShowAsCalculation["percentOf"] = "PercentOf";
        ShowAsCalculation["runningTotal"] = "RunningTotal";
        ShowAsCalculation["percentRunningTotal"] = "PercentRunningTotal";
        ShowAsCalculation["differenceFrom"] = "DifferenceFrom";
        ShowAsCalculation["percentDifferenceFrom"] = "PercentDifferenceFrom";
        ShowAsCalculation["rankAscending"] = "RankAscending";
        ShowAsCalculation["rankDecending"] = "RankDecending";
        ShowAsCalculation["index"] = "Index";
    })(ShowAsCalculation = Excel.ShowAsCalculation || (Excel.ShowAsCalculation = {}));
    var PivotAxis;
    (function (PivotAxis) {
        PivotAxis["unknown"] = "Unknown";
        PivotAxis["row"] = "Row";
        PivotAxis["column"] = "Column";
        PivotAxis["data"] = "Data";
        PivotAxis["filter"] = "Filter";
    })(PivotAxis = Excel.PivotAxis || (Excel.PivotAxis = {}));
    var _typeWorksheetCustomProperty = "WorksheetCustomProperty";
    var WorksheetCustomProperty = (function (_super) {
        __extends(WorksheetCustomProperty, _super);
        function WorksheetCustomProperty() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(WorksheetCustomProperty.prototype, "_className", {
            get: function () {
                return "WorksheetCustomProperty";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCustomProperty.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["key", "value", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCustomProperty.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Key", "Value", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCustomProperty.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCustomProperty.prototype, "key", {
            get: function () {
                _throwIfNotLoaded("key", this._K, _typeWorksheetCustomProperty, this._isNull);
                return this._K;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCustomProperty.prototype, "value", {
            get: function () {
                _throwIfNotLoaded("value", this._V, _typeWorksheetCustomProperty, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Value", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCustomProperty.prototype, "_Id", {
            get: function () {
                _throwIfNotLoaded("_Id", this.__I, _typeWorksheetCustomProperty, this._isNull);
                return this.__I;
            },
            enumerable: true,
            configurable: true
        });
        WorksheetCustomProperty.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["value"], [], []);
        };
        WorksheetCustomProperty.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        WorksheetCustomProperty.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        WorksheetCustomProperty.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Key"])) {
                this._K = obj["Key"];
            }
            if (!_isUndefined(obj["Value"])) {
                this._V = obj["Value"];
            }
            if (!_isUndefined(obj["_Id"])) {
                this.__I = obj["_Id"];
            }
        };
        WorksheetCustomProperty.prototype.load = function (options) {
            return _load(this, options);
        };
        WorksheetCustomProperty.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        WorksheetCustomProperty.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_Id"])) {
                this.__I = value["_Id"];
            }
        };
        WorksheetCustomProperty.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        WorksheetCustomProperty.prototype.toJSON = function () {
            return _toJson(this, {
                "key": this._K,
                "value": this._V
            }, {});
        };
        WorksheetCustomProperty.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        WorksheetCustomProperty.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return WorksheetCustomProperty;
    }(OfficeExtension.ClientObject));
    Excel.WorksheetCustomProperty = WorksheetCustomProperty;
    var _typeWorksheetCustomPropertyCollection = "WorksheetCustomPropertyCollection";
    var WorksheetCustomPropertyCollection = (function (_super) {
        __extends(WorksheetCustomPropertyCollection, _super);
        function WorksheetCustomPropertyCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(WorksheetCustomPropertyCollection.prototype, "_className", {
            get: function () {
                return "WorksheetCustomPropertyCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCustomPropertyCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(WorksheetCustomPropertyCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeWorksheetCustomPropertyCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        WorksheetCustomPropertyCollection.prototype.add = function (key, value) {
            return _createMethodObject(Excel.WorksheetCustomProperty, this, "Add", 0, [key, value], false, true, null, 0);
        };
        WorksheetCustomPropertyCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        WorksheetCustomPropertyCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.WorksheetCustomProperty, this, [key]);
        };
        WorksheetCustomPropertyCollection.prototype.getItemOrNullObject = function (key) {
            return _createMethodObject(Excel.WorksheetCustomProperty, this, "GetItemOrNullObject", 0, [key], false, false, null, 0);
        };
        WorksheetCustomPropertyCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.WorksheetCustomProperty, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        WorksheetCustomPropertyCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        WorksheetCustomPropertyCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        WorksheetCustomPropertyCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.WorksheetCustomProperty, true, _this, childItemData, index); });
        };
        WorksheetCustomPropertyCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        WorksheetCustomPropertyCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.WorksheetCustomProperty, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return WorksheetCustomPropertyCollection;
    }(OfficeExtension.ClientObject));
    Excel.WorksheetCustomPropertyCollection = WorksheetCustomPropertyCollection;
    var _typeDocumentProperties = "DocumentProperties";
    var DocumentProperties = (function (_super) {
        __extends(DocumentProperties, _super);
        function DocumentProperties() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(DocumentProperties.prototype, "_className", {
            get: function () {
                return "DocumentProperties";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["title", "subject", "author", "keywords", "comments", "lastAuthor", "revisionNumber", "creationDate", "category", "manager", "company"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Title", "Subject", "Author", "Keywords", "Comments", "LastAuthor", "RevisionNumber", "CreationDate", "Category", "Manager", "Company"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, false, true, false, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["custom"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "custom", {
            get: function () {
                if (!this._Cu) {
                    this._Cu = _createPropertyObject(Excel.CustomPropertyCollection, this, "Custom", true, 4);
                }
                return this._Cu;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "author", {
            get: function () {
                _throwIfNotLoaded("author", this._A, _typeDocumentProperties, this._isNull);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "Author", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "category", {
            get: function () {
                _throwIfNotLoaded("category", this._C, _typeDocumentProperties, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Category", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "comments", {
            get: function () {
                _throwIfNotLoaded("comments", this._Co, _typeDocumentProperties, this._isNull);
                return this._Co;
            },
            set: function (value) {
                this._Co = value;
                _invokeSetProperty(this, "Comments", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "company", {
            get: function () {
                _throwIfNotLoaded("company", this._Com, _typeDocumentProperties, this._isNull);
                return this._Com;
            },
            set: function (value) {
                this._Com = value;
                _invokeSetProperty(this, "Company", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "creationDate", {
            get: function () {
                _throwIfNotLoaded("creationDate", this._Cr, _typeDocumentProperties, this._isNull);
                return this._Cr;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "keywords", {
            get: function () {
                _throwIfNotLoaded("keywords", this._K, _typeDocumentProperties, this._isNull);
                return this._K;
            },
            set: function (value) {
                this._K = value;
                _invokeSetProperty(this, "Keywords", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "lastAuthor", {
            get: function () {
                _throwIfNotLoaded("lastAuthor", this._L, _typeDocumentProperties, this._isNull);
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "manager", {
            get: function () {
                _throwIfNotLoaded("manager", this._M, _typeDocumentProperties, this._isNull);
                return this._M;
            },
            set: function (value) {
                this._M = value;
                _invokeSetProperty(this, "Manager", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "revisionNumber", {
            get: function () {
                _throwIfNotLoaded("revisionNumber", this._R, _typeDocumentProperties, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "RevisionNumber", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "subject", {
            get: function () {
                _throwIfNotLoaded("subject", this._S, _typeDocumentProperties, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Subject", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DocumentProperties.prototype, "title", {
            get: function () {
                _throwIfNotLoaded("title", this._T, _typeDocumentProperties, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Title", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        DocumentProperties.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["title", "subject", "author", "keywords", "comments", "revisionNumber", "category", "manager", "company"], [], [
                "custom"
            ]);
        };
        DocumentProperties.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        DocumentProperties.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Author"])) {
                this._A = obj["Author"];
            }
            if (!_isUndefined(obj["Category"])) {
                this._C = obj["Category"];
            }
            if (!_isUndefined(obj["Comments"])) {
                this._Co = obj["Comments"];
            }
            if (!_isUndefined(obj["Company"])) {
                this._Com = obj["Company"];
            }
            if (!_isUndefined(obj["CreationDate"])) {
                this._Cr = _adjustToDateTime(obj["CreationDate"]);
            }
            if (!_isUndefined(obj["Keywords"])) {
                this._K = obj["Keywords"];
            }
            if (!_isUndefined(obj["LastAuthor"])) {
                this._L = obj["LastAuthor"];
            }
            if (!_isUndefined(obj["Manager"])) {
                this._M = obj["Manager"];
            }
            if (!_isUndefined(obj["RevisionNumber"])) {
                this._R = obj["RevisionNumber"];
            }
            if (!_isUndefined(obj["Subject"])) {
                this._S = obj["Subject"];
            }
            if (!_isUndefined(obj["Title"])) {
                this._T = obj["Title"];
            }
            _handleNavigationPropertyResults(this, obj, ["custom", "Custom"]);
        };
        DocumentProperties.prototype.load = function (options) {
            return _load(this, options);
        };
        DocumentProperties.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        DocumentProperties.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            if (!_isUndefined(obj["CreationDate"])) {
                obj["creationDate"] = _adjustToDateTime(obj["creationDate"]);
            }
            _processRetrieveResult(this, value, result);
        };
        DocumentProperties.prototype.toJSON = function () {
            return _toJson(this, {
                "author": this._A,
                "category": this._C,
                "comments": this._Co,
                "company": this._Com,
                "creationDate": this._Cr,
                "keywords": this._K,
                "lastAuthor": this._L,
                "manager": this._M,
                "revisionNumber": this._R,
                "subject": this._S,
                "title": this._T
            }, {
                "custom": this._Cu
            });
        };
        DocumentProperties.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        DocumentProperties.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return DocumentProperties;
    }(OfficeExtension.ClientObject));
    Excel.DocumentProperties = DocumentProperties;
    var _typeCustomProperty = "CustomProperty";
    var CustomProperty = (function (_super) {
        __extends(CustomProperty, _super);
        function CustomProperty() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CustomProperty.prototype, "_className", {
            get: function () {
                return "CustomProperty";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomProperty.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["key", "value", "type"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomProperty.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Key", "Value", "Type"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomProperty.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomProperty.prototype, "key", {
            get: function () {
                _throwIfNotLoaded("key", this._K, _typeCustomProperty, this._isNull);
                return this._K;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomProperty.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._T, _typeCustomProperty, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomProperty.prototype, "value", {
            get: function () {
                _throwIfNotLoaded("value", this._V, _typeCustomProperty, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Value", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        CustomProperty.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["value"], [], []);
        };
        CustomProperty.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        CustomProperty.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        CustomProperty.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Key"])) {
                this._K = obj["Key"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._T = obj["Type"];
            }
            if (!_isUndefined(obj["Value"])) {
                this._V = obj["Value"];
            }
        };
        CustomProperty.prototype.load = function (options) {
            return _load(this, options);
        };
        CustomProperty.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CustomProperty.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        CustomProperty.prototype.toJSON = function () {
            return _toJson(this, {
                "key": this._K,
                "type": this._T,
                "value": this._V
            }, {});
        };
        CustomProperty.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        CustomProperty.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return CustomProperty;
    }(OfficeExtension.ClientObject));
    Excel.CustomProperty = CustomProperty;
    var _typeCustomPropertyCollection = "CustomPropertyCollection";
    var CustomPropertyCollection = (function (_super) {
        __extends(CustomPropertyCollection, _super);
        function CustomPropertyCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CustomPropertyCollection.prototype, "_className", {
            get: function () {
                return "CustomPropertyCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomPropertyCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomPropertyCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeCustomPropertyCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        CustomPropertyCollection.prototype.add = function (key, value) {
            return _createMethodObject(Excel.CustomProperty, this, "Add", 0, [key, value], false, true, null, 0);
        };
        CustomPropertyCollection.prototype.deleteAll = function () {
            _invokeMethod(this, "DeleteAll", 0, [], 0, 0);
        };
        CustomPropertyCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        CustomPropertyCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.CustomProperty, this, [key]);
        };
        CustomPropertyCollection.prototype.getItemOrNullObject = function (key) {
            return _createMethodObject(Excel.CustomProperty, this, "GetItemOrNullObject", 1, [key], false, false, null, 4);
        };
        CustomPropertyCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.CustomProperty, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        CustomPropertyCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        CustomPropertyCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CustomPropertyCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.CustomProperty, true, _this, childItemData, index); });
        };
        CustomPropertyCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        CustomPropertyCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.CustomProperty, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return CustomPropertyCollection;
    }(OfficeExtension.ClientObject));
    Excel.CustomPropertyCollection = CustomPropertyCollection;
    var _typeConditionalFormatCollection = "ConditionalFormatCollection";
    var ConditionalFormatCollection = (function (_super) {
        __extends(ConditionalFormatCollection, _super);
        function ConditionalFormatCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ConditionalFormatCollection.prototype, "_className", {
            get: function () {
                return "ConditionalFormatCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormatCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormatCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeConditionalFormatCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        ConditionalFormatCollection.prototype.add = function (type) {
            return _createMethodObject(Excel.ConditionalFormat, this, "Add", 0, [type], false, true, null, 0);
        };
        ConditionalFormatCollection.prototype.clearAll = function () {
            _invokeMethod(this, "ClearAll", 0, [], 0, 0);
        };
        ConditionalFormatCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        ConditionalFormatCollection.prototype.getItem = function (id) {
            return _createIndexerObject(Excel.ConditionalFormat, this, [id]);
        };
        ConditionalFormatCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.ConditionalFormat, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        ConditionalFormatCollection.prototype.getItemOrNullObject = function (id) {
            _throwIfApiNotSupported("ConditionalFormatCollection.getItemOrNullObject", _defaultApiSetName, "1.14", _hostName);
            return _createMethodObject(Excel.ConditionalFormat, this, "GetItemOrNullObject", 1, [id], false, false, null, 4);
        };
        ConditionalFormatCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.ConditionalFormat, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        ConditionalFormatCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        ConditionalFormatCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ConditionalFormatCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.ConditionalFormat, true, _this, childItemData, index); });
        };
        ConditionalFormatCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        ConditionalFormatCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.ConditionalFormat, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return ConditionalFormatCollection;
    }(OfficeExtension.ClientObject));
    Excel.ConditionalFormatCollection = ConditionalFormatCollection;
    var _typeConditionalFormat = "ConditionalFormat";
    var ConditionalFormat = (function (_super) {
        __extends(ConditionalFormat, _super);
        function ConditionalFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ConditionalFormat.prototype, "_className", {
            get: function () {
                return "ConditionalFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["stopIfTrue", "priority", "type", "id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["StopIfTrue", "Priority", "Type", "Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["dataBarOrNullObject", "dataBar", "customOrNullObject", "custom", "iconSet", "iconSetOrNullObject", "colorScale", "colorScaleOrNullObject", "topBottom", "topBottomOrNullObject", "preset", "presetOrNullObject", "textComparison", "textComparisonOrNullObject", "cellValue", "cellValueOrNullObject"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "cellValue", {
            get: function () {
                if (!this._C) {
                    this._C = _createPropertyObject(Excel.CellValueConditionalFormat, this, "CellValue", false, 4);
                }
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "cellValueOrNullObject", {
            get: function () {
                if (!this._Ce) {
                    this._Ce = _createPropertyObject(Excel.CellValueConditionalFormat, this, "CellValueOrNullObject", false, 4);
                }
                return this._Ce;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "colorScale", {
            get: function () {
                if (!this._Co) {
                    this._Co = _createPropertyObject(Excel.ColorScaleConditionalFormat, this, "ColorScale", false, 4);
                }
                return this._Co;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "colorScaleOrNullObject", {
            get: function () {
                if (!this._Col) {
                    this._Col = _createPropertyObject(Excel.ColorScaleConditionalFormat, this, "ColorScaleOrNullObject", false, 4);
                }
                return this._Col;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "custom", {
            get: function () {
                if (!this._Cu) {
                    this._Cu = _createPropertyObject(Excel.CustomConditionalFormat, this, "Custom", false, 4);
                }
                return this._Cu;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "customOrNullObject", {
            get: function () {
                if (!this._Cus) {
                    this._Cus = _createPropertyObject(Excel.CustomConditionalFormat, this, "CustomOrNullObject", false, 4);
                }
                return this._Cus;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "dataBar", {
            get: function () {
                if (!this._D) {
                    this._D = _createPropertyObject(Excel.DataBarConditionalFormat, this, "DataBar", false, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "dataBarOrNullObject", {
            get: function () {
                if (!this._Da) {
                    this._Da = _createPropertyObject(Excel.DataBarConditionalFormat, this, "DataBarOrNullObject", false, 4);
                }
                return this._Da;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "iconSet", {
            get: function () {
                if (!this._I) {
                    this._I = _createPropertyObject(Excel.IconSetConditionalFormat, this, "IconSet", false, 4);
                }
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "iconSetOrNullObject", {
            get: function () {
                if (!this._Ic) {
                    this._Ic = _createPropertyObject(Excel.IconSetConditionalFormat, this, "IconSetOrNullObject", false, 4);
                }
                return this._Ic;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "preset", {
            get: function () {
                if (!this._P) {
                    this._P = _createPropertyObject(Excel.PresetCriteriaConditionalFormat, this, "Preset", false, 4);
                }
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "presetOrNullObject", {
            get: function () {
                if (!this._Pr) {
                    this._Pr = _createPropertyObject(Excel.PresetCriteriaConditionalFormat, this, "PresetOrNullObject", false, 4);
                }
                return this._Pr;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "textComparison", {
            get: function () {
                if (!this._T) {
                    this._T = _createPropertyObject(Excel.TextConditionalFormat, this, "TextComparison", false, 4);
                }
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "textComparisonOrNullObject", {
            get: function () {
                if (!this._Te) {
                    this._Te = _createPropertyObject(Excel.TextConditionalFormat, this, "TextComparisonOrNullObject", false, 4);
                }
                return this._Te;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "topBottom", {
            get: function () {
                if (!this._To) {
                    this._To = _createPropertyObject(Excel.TopBottomConditionalFormat, this, "TopBottom", false, 4);
                }
                return this._To;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "topBottomOrNullObject", {
            get: function () {
                if (!this._Top) {
                    this._Top = _createPropertyObject(Excel.TopBottomConditionalFormat, this, "TopBottomOrNullObject", false, 4);
                }
                return this._Top;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._Id0, _typeConditionalFormat, this._isNull);
                return this._Id0;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "priority", {
            get: function () {
                _throwIfNotLoaded("priority", this._Pri, _typeConditionalFormat, this._isNull);
                return this._Pri;
            },
            set: function (value) {
                this._Pri = value;
                _invokeSetProperty(this, "Priority", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "stopIfTrue", {
            get: function () {
                _throwIfNotLoaded("stopIfTrue", this._S, _typeConditionalFormat, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "StopIfTrue", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormat.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._Ty, _typeConditionalFormat, this._isNull);
                return this._Ty;
            },
            enumerable: true,
            configurable: true
        });
        ConditionalFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["stopIfTrue", "priority"], ["dataBarOrNullObject", "dataBar", "customOrNullObject", "custom", "iconSet", "iconSetOrNullObject", "colorScale", "colorScaleOrNullObject", "topBottom", "topBottomOrNullObject", "preset", "presetOrNullObject", "textComparison", "textComparisonOrNullObject", "cellValue", "cellValueOrNullObject"], []);
        };
        ConditionalFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ConditionalFormat.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        ConditionalFormat.prototype.getRange = function () {
            return _createMethodObject(Excel.Range, this, "GetRange", 1, [], false, true, null, 4);
        };
        ConditionalFormat.prototype.getRangeOrNullObject = function () {
            return _createMethodObject(Excel.Range, this, "GetRangeOrNullObject", 1, [], false, true, null, 4);
        };
        ConditionalFormat.prototype.getRanges = function () {
            _throwIfApiNotSupported("ConditionalFormat.getRanges", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.RangeAreas, this, "GetRanges", 1, [], false, true, null, 4);
        };
        ConditionalFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._Id0 = obj["Id"];
            }
            if (!_isUndefined(obj["Priority"])) {
                this._Pri = obj["Priority"];
            }
            if (!_isUndefined(obj["StopIfTrue"])) {
                this._S = obj["StopIfTrue"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._Ty = obj["Type"];
            }
            _handleNavigationPropertyResults(this, obj, ["cellValue", "CellValue", "cellValueOrNullObject", "CellValueOrNullObject", "colorScale", "ColorScale", "colorScaleOrNullObject", "ColorScaleOrNullObject", "custom", "Custom", "customOrNullObject", "CustomOrNullObject", "dataBar", "DataBar", "dataBarOrNullObject", "DataBarOrNullObject", "iconSet", "IconSet", "iconSetOrNullObject", "IconSetOrNullObject", "preset", "Preset", "presetOrNullObject", "PresetOrNullObject", "textComparison", "TextComparison", "textComparisonOrNullObject", "TextComparisonOrNullObject", "topBottom", "TopBottom", "topBottomOrNullObject", "TopBottomOrNullObject"]);
        };
        ConditionalFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ConditionalFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ConditionalFormat.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._Id0 = value["Id"];
            }
        };
        ConditionalFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ConditionalFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._Id0,
                "priority": this._Pri,
                "stopIfTrue": this._S,
                "type": this._Ty
            }, {
                "cellValue": this._C,
                "cellValueOrNullObject": this._Ce,
                "colorScale": this._Co,
                "colorScaleOrNullObject": this._Col,
                "custom": this._Cu,
                "customOrNullObject": this._Cus,
                "dataBar": this._D,
                "dataBarOrNullObject": this._Da,
                "iconSet": this._I,
                "iconSetOrNullObject": this._Ic,
                "preset": this._P,
                "presetOrNullObject": this._Pr,
                "textComparison": this._T,
                "textComparisonOrNullObject": this._Te,
                "topBottom": this._To,
                "topBottomOrNullObject": this._Top
            });
        };
        ConditionalFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ConditionalFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ConditionalFormat;
    }(OfficeExtension.ClientObject));
    Excel.ConditionalFormat = ConditionalFormat;
    var _typeDataBarConditionalFormat = "DataBarConditionalFormat";
    var DataBarConditionalFormat = (function (_super) {
        __extends(DataBarConditionalFormat, _super);
        function DataBarConditionalFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(DataBarConditionalFormat.prototype, "_className", {
            get: function () {
                return "DataBarConditionalFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["showDataBarOnly", "barDirection", "axisFormat", "axisColor", "lowerBoundRule", "upperBoundRule"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["ShowDataBarOnly", "BarDirection", "AxisFormat", "AxisColor", "LowerBoundRule", "UpperBoundRule"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["positiveFormat", "negativeFormat"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "negativeFormat", {
            get: function () {
                if (!this._N) {
                    this._N = _createPropertyObject(Excel.ConditionalDataBarNegativeFormat, this, "NegativeFormat", false, 4);
                }
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "positiveFormat", {
            get: function () {
                if (!this._P) {
                    this._P = _createPropertyObject(Excel.ConditionalDataBarPositiveFormat, this, "PositiveFormat", false, 4);
                }
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "axisColor", {
            get: function () {
                _throwIfNotLoaded("axisColor", this._A, _typeDataBarConditionalFormat, this._isNull);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AxisColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "axisFormat", {
            get: function () {
                _throwIfNotLoaded("axisFormat", this._Ax, _typeDataBarConditionalFormat, this._isNull);
                return this._Ax;
            },
            set: function (value) {
                this._Ax = value;
                _invokeSetProperty(this, "AxisFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "barDirection", {
            get: function () {
                _throwIfNotLoaded("barDirection", this._B, _typeDataBarConditionalFormat, this._isNull);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "BarDirection", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "lowerBoundRule", {
            get: function () {
                _throwIfNotLoaded("lowerBoundRule", this._L, _typeDataBarConditionalFormat, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "LowerBoundRule", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "showDataBarOnly", {
            get: function () {
                _throwIfNotLoaded("showDataBarOnly", this._S, _typeDataBarConditionalFormat, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowDataBarOnly", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(DataBarConditionalFormat.prototype, "upperBoundRule", {
            get: function () {
                _throwIfNotLoaded("upperBoundRule", this._U, _typeDataBarConditionalFormat, this._isNull);
                return this._U;
            },
            set: function (value) {
                this._U = value;
                _invokeSetProperty(this, "UpperBoundRule", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        DataBarConditionalFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["showDataBarOnly", "barDirection", "axisFormat", "axisColor", "lowerBoundRule", "upperBoundRule"], ["positiveFormat", "negativeFormat"], []);
        };
        DataBarConditionalFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        DataBarConditionalFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AxisColor"])) {
                this._A = obj["AxisColor"];
            }
            if (!_isUndefined(obj["AxisFormat"])) {
                this._Ax = obj["AxisFormat"];
            }
            if (!_isUndefined(obj["BarDirection"])) {
                this._B = obj["BarDirection"];
            }
            if (!_isUndefined(obj["LowerBoundRule"])) {
                this._L = obj["LowerBoundRule"];
            }
            if (!_isUndefined(obj["ShowDataBarOnly"])) {
                this._S = obj["ShowDataBarOnly"];
            }
            if (!_isUndefined(obj["UpperBoundRule"])) {
                this._U = obj["UpperBoundRule"];
            }
            _handleNavigationPropertyResults(this, obj, ["negativeFormat", "NegativeFormat", "positiveFormat", "PositiveFormat"]);
        };
        DataBarConditionalFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        DataBarConditionalFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        DataBarConditionalFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        DataBarConditionalFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "axisColor": this._A,
                "axisFormat": this._Ax,
                "barDirection": this._B,
                "lowerBoundRule": this._L,
                "showDataBarOnly": this._S,
                "upperBoundRule": this._U
            }, {
                "negativeFormat": this._N,
                "positiveFormat": this._P
            });
        };
        DataBarConditionalFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        DataBarConditionalFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return DataBarConditionalFormat;
    }(OfficeExtension.ClientObject));
    Excel.DataBarConditionalFormat = DataBarConditionalFormat;
    var _typeConditionalDataBarPositiveFormat = "ConditionalDataBarPositiveFormat";
    var ConditionalDataBarPositiveFormat = (function (_super) {
        __extends(ConditionalDataBarPositiveFormat, _super);
        function ConditionalDataBarPositiveFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ConditionalDataBarPositiveFormat.prototype, "_className", {
            get: function () {
                return "ConditionalDataBarPositiveFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarPositiveFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["fillColor", "gradientFill", "borderColor"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarPositiveFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["FillColor", "GradientFill", "BorderColor"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarPositiveFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarPositiveFormat.prototype, "borderColor", {
            get: function () {
                _throwIfNotLoaded("borderColor", this._B, _typeConditionalDataBarPositiveFormat, this._isNull);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "BorderColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarPositiveFormat.prototype, "fillColor", {
            get: function () {
                _throwIfNotLoaded("fillColor", this._F, _typeConditionalDataBarPositiveFormat, this._isNull);
                return this._F;
            },
            set: function (value) {
                this._F = value;
                _invokeSetProperty(this, "FillColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarPositiveFormat.prototype, "gradientFill", {
            get: function () {
                _throwIfNotLoaded("gradientFill", this._G, _typeConditionalDataBarPositiveFormat, this._isNull);
                return this._G;
            },
            set: function (value) {
                this._G = value;
                _invokeSetProperty(this, "GradientFill", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ConditionalDataBarPositiveFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["fillColor", "gradientFill", "borderColor"], [], []);
        };
        ConditionalDataBarPositiveFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ConditionalDataBarPositiveFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["BorderColor"])) {
                this._B = obj["BorderColor"];
            }
            if (!_isUndefined(obj["FillColor"])) {
                this._F = obj["FillColor"];
            }
            if (!_isUndefined(obj["GradientFill"])) {
                this._G = obj["GradientFill"];
            }
        };
        ConditionalDataBarPositiveFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ConditionalDataBarPositiveFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ConditionalDataBarPositiveFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ConditionalDataBarPositiveFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "borderColor": this._B,
                "fillColor": this._F,
                "gradientFill": this._G
            }, {});
        };
        ConditionalDataBarPositiveFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ConditionalDataBarPositiveFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ConditionalDataBarPositiveFormat;
    }(OfficeExtension.ClientObject));
    Excel.ConditionalDataBarPositiveFormat = ConditionalDataBarPositiveFormat;
    var _typeConditionalDataBarNegativeFormat = "ConditionalDataBarNegativeFormat";
    var ConditionalDataBarNegativeFormat = (function (_super) {
        __extends(ConditionalDataBarNegativeFormat, _super);
        function ConditionalDataBarNegativeFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ConditionalDataBarNegativeFormat.prototype, "_className", {
            get: function () {
                return "ConditionalDataBarNegativeFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarNegativeFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["fillColor", "matchPositiveFillColor", "borderColor", "matchPositiveBorderColor"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarNegativeFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["FillColor", "MatchPositiveFillColor", "BorderColor", "MatchPositiveBorderColor"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarNegativeFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarNegativeFormat.prototype, "borderColor", {
            get: function () {
                _throwIfNotLoaded("borderColor", this._B, _typeConditionalDataBarNegativeFormat, this._isNull);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "BorderColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarNegativeFormat.prototype, "fillColor", {
            get: function () {
                _throwIfNotLoaded("fillColor", this._F, _typeConditionalDataBarNegativeFormat, this._isNull);
                return this._F;
            },
            set: function (value) {
                this._F = value;
                _invokeSetProperty(this, "FillColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarNegativeFormat.prototype, "matchPositiveBorderColor", {
            get: function () {
                _throwIfNotLoaded("matchPositiveBorderColor", this._M, _typeConditionalDataBarNegativeFormat, this._isNull);
                return this._M;
            },
            set: function (value) {
                this._M = value;
                _invokeSetProperty(this, "MatchPositiveBorderColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalDataBarNegativeFormat.prototype, "matchPositiveFillColor", {
            get: function () {
                _throwIfNotLoaded("matchPositiveFillColor", this._Ma, _typeConditionalDataBarNegativeFormat, this._isNull);
                return this._Ma;
            },
            set: function (value) {
                this._Ma = value;
                _invokeSetProperty(this, "MatchPositiveFillColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ConditionalDataBarNegativeFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["fillColor", "matchPositiveFillColor", "borderColor", "matchPositiveBorderColor"], [], []);
        };
        ConditionalDataBarNegativeFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ConditionalDataBarNegativeFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["BorderColor"])) {
                this._B = obj["BorderColor"];
            }
            if (!_isUndefined(obj["FillColor"])) {
                this._F = obj["FillColor"];
            }
            if (!_isUndefined(obj["MatchPositiveBorderColor"])) {
                this._M = obj["MatchPositiveBorderColor"];
            }
            if (!_isUndefined(obj["MatchPositiveFillColor"])) {
                this._Ma = obj["MatchPositiveFillColor"];
            }
        };
        ConditionalDataBarNegativeFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ConditionalDataBarNegativeFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ConditionalDataBarNegativeFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ConditionalDataBarNegativeFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "borderColor": this._B,
                "fillColor": this._F,
                "matchPositiveBorderColor": this._M,
                "matchPositiveFillColor": this._Ma
            }, {});
        };
        ConditionalDataBarNegativeFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ConditionalDataBarNegativeFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ConditionalDataBarNegativeFormat;
    }(OfficeExtension.ClientObject));
    Excel.ConditionalDataBarNegativeFormat = ConditionalDataBarNegativeFormat;
    var _typeCustomConditionalFormat = "CustomConditionalFormat";
    var CustomConditionalFormat = (function (_super) {
        __extends(CustomConditionalFormat, _super);
        function CustomConditionalFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CustomConditionalFormat.prototype, "_className", {
            get: function () {
                return "CustomConditionalFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomConditionalFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["rule", "format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomConditionalFormat.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ConditionalRangeFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomConditionalFormat.prototype, "rule", {
            get: function () {
                if (!this._R) {
                    this._R = _createPropertyObject(Excel.ConditionalFormatRule, this, "Rule", false, 4);
                }
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        CustomConditionalFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, [], ["rule", "format"], []);
        };
        CustomConditionalFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        CustomConditionalFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            _handleNavigationPropertyResults(this, obj, ["format", "Format", "rule", "Rule"]);
        };
        CustomConditionalFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        CustomConditionalFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CustomConditionalFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        CustomConditionalFormat.prototype.toJSON = function () {
            return _toJson(this, {}, {
                "format": this._F,
                "rule": this._R
            });
        };
        CustomConditionalFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        CustomConditionalFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return CustomConditionalFormat;
    }(OfficeExtension.ClientObject));
    Excel.CustomConditionalFormat = CustomConditionalFormat;
    var _typeConditionalFormatRule = "ConditionalFormatRule";
    var ConditionalFormatRule = (function (_super) {
        __extends(ConditionalFormatRule, _super);
        function ConditionalFormatRule() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ConditionalFormatRule.prototype, "_className", {
            get: function () {
                return "ConditionalFormatRule";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormatRule.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["formula", "formulaLocal", "formulaR1C1"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormatRule.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Formula", "FormulaLocal", "FormulaR1C1"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormatRule.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormatRule.prototype, "formula", {
            get: function () {
                _throwIfNotLoaded("formula", this._F, _typeConditionalFormatRule, this._isNull);
                return this._F;
            },
            set: function (value) {
                this._F = value;
                _invokeSetProperty(this, "Formula", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormatRule.prototype, "formulaLocal", {
            get: function () {
                _throwIfNotLoaded("formulaLocal", this._Fo, _typeConditionalFormatRule, this._isNull);
                return this._Fo;
            },
            set: function (value) {
                this._Fo = value;
                _invokeSetProperty(this, "FormulaLocal", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalFormatRule.prototype, "formulaR1C1", {
            get: function () {
                _throwIfNotLoaded("formulaR1C1", this._For, _typeConditionalFormatRule, this._isNull);
                return this._For;
            },
            set: function (value) {
                this._For = value;
                _invokeSetProperty(this, "FormulaR1C1", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ConditionalFormatRule.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["formula", "formulaLocal", "formulaR1C1"], [], []);
        };
        ConditionalFormatRule.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ConditionalFormatRule.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Formula"])) {
                this._F = obj["Formula"];
            }
            if (!_isUndefined(obj["FormulaLocal"])) {
                this._Fo = obj["FormulaLocal"];
            }
            if (!_isUndefined(obj["FormulaR1C1"])) {
                this._For = obj["FormulaR1C1"];
            }
        };
        ConditionalFormatRule.prototype.load = function (options) {
            return _load(this, options);
        };
        ConditionalFormatRule.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ConditionalFormatRule.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ConditionalFormatRule.prototype.toJSON = function () {
            return _toJson(this, {
                "formula": this._F,
                "formulaLocal": this._Fo,
                "formulaR1C1": this._For
            }, {});
        };
        ConditionalFormatRule.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ConditionalFormatRule.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ConditionalFormatRule;
    }(OfficeExtension.ClientObject));
    Excel.ConditionalFormatRule = ConditionalFormatRule;
    var _typeIconSetConditionalFormat = "IconSetConditionalFormat";
    var IconSetConditionalFormat = (function (_super) {
        __extends(IconSetConditionalFormat, _super);
        function IconSetConditionalFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(IconSetConditionalFormat.prototype, "_className", {
            get: function () {
                return "IconSetConditionalFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IconSetConditionalFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["reverseIconOrder", "showIconOnly", "style", "criteria"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IconSetConditionalFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["ReverseIconOrder", "ShowIconOnly", "Style", "Criteria"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IconSetConditionalFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IconSetConditionalFormat.prototype, "criteria", {
            get: function () {
                _throwIfNotLoaded("criteria", this._C, _typeIconSetConditionalFormat, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Criteria", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IconSetConditionalFormat.prototype, "reverseIconOrder", {
            get: function () {
                _throwIfNotLoaded("reverseIconOrder", this._R, _typeIconSetConditionalFormat, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "ReverseIconOrder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IconSetConditionalFormat.prototype, "showIconOnly", {
            get: function () {
                _throwIfNotLoaded("showIconOnly", this._S, _typeIconSetConditionalFormat, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShowIconOnly", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(IconSetConditionalFormat.prototype, "style", {
            get: function () {
                _throwIfNotLoaded("style", this._St, _typeIconSetConditionalFormat, this._isNull);
                return this._St;
            },
            set: function (value) {
                this._St = value;
                _invokeSetProperty(this, "Style", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        IconSetConditionalFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["reverseIconOrder", "showIconOnly", "style", "criteria"], [], []);
        };
        IconSetConditionalFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        IconSetConditionalFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Criteria"])) {
                this._C = obj["Criteria"];
            }
            if (!_isUndefined(obj["ReverseIconOrder"])) {
                this._R = obj["ReverseIconOrder"];
            }
            if (!_isUndefined(obj["ShowIconOnly"])) {
                this._S = obj["ShowIconOnly"];
            }
            if (!_isUndefined(obj["Style"])) {
                this._St = obj["Style"];
            }
        };
        IconSetConditionalFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        IconSetConditionalFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        IconSetConditionalFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        IconSetConditionalFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "criteria": this._C,
                "reverseIconOrder": this._R,
                "showIconOnly": this._S,
                "style": this._St
            }, {});
        };
        IconSetConditionalFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        IconSetConditionalFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return IconSetConditionalFormat;
    }(OfficeExtension.ClientObject));
    Excel.IconSetConditionalFormat = IconSetConditionalFormat;
    var _typeColorScaleConditionalFormat = "ColorScaleConditionalFormat";
    var ColorScaleConditionalFormat = (function (_super) {
        __extends(ColorScaleConditionalFormat, _super);
        function ColorScaleConditionalFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ColorScaleConditionalFormat.prototype, "_className", {
            get: function () {
                return "ColorScaleConditionalFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ColorScaleConditionalFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["threeColorScale", "criteria"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ColorScaleConditionalFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["ThreeColorScale", "Criteria"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ColorScaleConditionalFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ColorScaleConditionalFormat.prototype, "criteria", {
            get: function () {
                _throwIfNotLoaded("criteria", this._C, _typeColorScaleConditionalFormat, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Criteria", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ColorScaleConditionalFormat.prototype, "threeColorScale", {
            get: function () {
                _throwIfNotLoaded("threeColorScale", this._T, _typeColorScaleConditionalFormat, this._isNull);
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        ColorScaleConditionalFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["criteria"], [], []);
        };
        ColorScaleConditionalFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ColorScaleConditionalFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Criteria"])) {
                this._C = obj["Criteria"];
            }
            if (!_isUndefined(obj["ThreeColorScale"])) {
                this._T = obj["ThreeColorScale"];
            }
        };
        ColorScaleConditionalFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ColorScaleConditionalFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ColorScaleConditionalFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ColorScaleConditionalFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "criteria": this._C,
                "threeColorScale": this._T
            }, {});
        };
        ColorScaleConditionalFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ColorScaleConditionalFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ColorScaleConditionalFormat;
    }(OfficeExtension.ClientObject));
    Excel.ColorScaleConditionalFormat = ColorScaleConditionalFormat;
    var _typeTopBottomConditionalFormat = "TopBottomConditionalFormat";
    var TopBottomConditionalFormat = (function (_super) {
        __extends(TopBottomConditionalFormat, _super);
        function TopBottomConditionalFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TopBottomConditionalFormat.prototype, "_className", {
            get: function () {
                return "TopBottomConditionalFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TopBottomConditionalFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["rule"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TopBottomConditionalFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Rule"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TopBottomConditionalFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TopBottomConditionalFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TopBottomConditionalFormat.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ConditionalRangeFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TopBottomConditionalFormat.prototype, "rule", {
            get: function () {
                _throwIfNotLoaded("rule", this._R, _typeTopBottomConditionalFormat, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "Rule", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        TopBottomConditionalFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["rule"], ["format"], []);
        };
        TopBottomConditionalFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        TopBottomConditionalFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Rule"])) {
                this._R = obj["Rule"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        TopBottomConditionalFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        TopBottomConditionalFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TopBottomConditionalFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        TopBottomConditionalFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "rule": this._R
            }, {
                "format": this._F
            });
        };
        TopBottomConditionalFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        TopBottomConditionalFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return TopBottomConditionalFormat;
    }(OfficeExtension.ClientObject));
    Excel.TopBottomConditionalFormat = TopBottomConditionalFormat;
    var _typePresetCriteriaConditionalFormat = "PresetCriteriaConditionalFormat";
    var PresetCriteriaConditionalFormat = (function (_super) {
        __extends(PresetCriteriaConditionalFormat, _super);
        function PresetCriteriaConditionalFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PresetCriteriaConditionalFormat.prototype, "_className", {
            get: function () {
                return "PresetCriteriaConditionalFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PresetCriteriaConditionalFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["rule"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PresetCriteriaConditionalFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Rule"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PresetCriteriaConditionalFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PresetCriteriaConditionalFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PresetCriteriaConditionalFormat.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ConditionalRangeFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PresetCriteriaConditionalFormat.prototype, "rule", {
            get: function () {
                _throwIfNotLoaded("rule", this._R, _typePresetCriteriaConditionalFormat, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "Rule", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        PresetCriteriaConditionalFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["rule"], ["format"], []);
        };
        PresetCriteriaConditionalFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        PresetCriteriaConditionalFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Rule"])) {
                this._R = obj["Rule"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        PresetCriteriaConditionalFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        PresetCriteriaConditionalFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PresetCriteriaConditionalFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PresetCriteriaConditionalFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "rule": this._R
            }, {
                "format": this._F
            });
        };
        PresetCriteriaConditionalFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PresetCriteriaConditionalFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PresetCriteriaConditionalFormat;
    }(OfficeExtension.ClientObject));
    Excel.PresetCriteriaConditionalFormat = PresetCriteriaConditionalFormat;
    var _typeTextConditionalFormat = "TextConditionalFormat";
    var TextConditionalFormat = (function (_super) {
        __extends(TextConditionalFormat, _super);
        function TextConditionalFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TextConditionalFormat.prototype, "_className", {
            get: function () {
                return "TextConditionalFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextConditionalFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["rule"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextConditionalFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Rule"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextConditionalFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextConditionalFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextConditionalFormat.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ConditionalRangeFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextConditionalFormat.prototype, "rule", {
            get: function () {
                _throwIfNotLoaded("rule", this._R, _typeTextConditionalFormat, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "Rule", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        TextConditionalFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["rule"], ["format"], []);
        };
        TextConditionalFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        TextConditionalFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Rule"])) {
                this._R = obj["Rule"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        TextConditionalFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        TextConditionalFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TextConditionalFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        TextConditionalFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "rule": this._R
            }, {
                "format": this._F
            });
        };
        TextConditionalFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        TextConditionalFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return TextConditionalFormat;
    }(OfficeExtension.ClientObject));
    Excel.TextConditionalFormat = TextConditionalFormat;
    var _typeCellValueConditionalFormat = "CellValueConditionalFormat";
    var CellValueConditionalFormat = (function (_super) {
        __extends(CellValueConditionalFormat, _super);
        function CellValueConditionalFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CellValueConditionalFormat.prototype, "_className", {
            get: function () {
                return "CellValueConditionalFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CellValueConditionalFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["rule"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CellValueConditionalFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Rule"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CellValueConditionalFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CellValueConditionalFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CellValueConditionalFormat.prototype, "format", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ConditionalRangeFormat, this, "Format", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CellValueConditionalFormat.prototype, "rule", {
            get: function () {
                _throwIfNotLoaded("rule", this._R, _typeCellValueConditionalFormat, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "Rule", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        CellValueConditionalFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["rule"], ["format"], []);
        };
        CellValueConditionalFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        CellValueConditionalFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Rule"])) {
                this._R = obj["Rule"];
            }
            _handleNavigationPropertyResults(this, obj, ["format", "Format"]);
        };
        CellValueConditionalFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        CellValueConditionalFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CellValueConditionalFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        CellValueConditionalFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "rule": this._R
            }, {
                "format": this._F
            });
        };
        CellValueConditionalFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        CellValueConditionalFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return CellValueConditionalFormat;
    }(OfficeExtension.ClientObject));
    Excel.CellValueConditionalFormat = CellValueConditionalFormat;
    var _typeConditionalRangeFormat = "ConditionalRangeFormat";
    var ConditionalRangeFormat = (function (_super) {
        __extends(ConditionalRangeFormat, _super);
        function ConditionalRangeFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ConditionalRangeFormat.prototype, "_className", {
            get: function () {
                return "ConditionalRangeFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["numberFormat"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["NumberFormat"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFormat.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["fill", "font", "borders"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFormat.prototype, "borders", {
            get: function () {
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ConditionalRangeBorderCollection, this, "Borders", true, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFormat.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ConditionalRangeFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFormat.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.ConditionalRangeFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFormat.prototype, "numberFormat", {
            get: function () {
                _throwIfNotLoaded("numberFormat", this._N, _typeConditionalRangeFormat, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "NumberFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ConditionalRangeFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["numberFormat"], ["fill", "font"], [
                "borders"
            ]);
        };
        ConditionalRangeFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ConditionalRangeFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["NumberFormat"])) {
                this._N = obj["NumberFormat"];
            }
            _handleNavigationPropertyResults(this, obj, ["borders", "Borders", "fill", "Fill", "font", "Font"]);
        };
        ConditionalRangeFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ConditionalRangeFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ConditionalRangeFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ConditionalRangeFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "numberFormat": this._N
            }, {
                "borders": this._B,
                "fill": this._F,
                "font": this._Fo
            });
        };
        ConditionalRangeFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ConditionalRangeFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ConditionalRangeFormat;
    }(OfficeExtension.ClientObject));
    Excel.ConditionalRangeFormat = ConditionalRangeFormat;
    var _typeConditionalRangeFont = "ConditionalRangeFont";
    var ConditionalRangeFont = (function (_super) {
        __extends(ConditionalRangeFont, _super);
        function ConditionalRangeFont() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ConditionalRangeFont.prototype, "_className", {
            get: function () {
                return "ConditionalRangeFont";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFont.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["color", "italic", "bold", "underline", "strikethrough"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFont.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Color", "Italic", "Bold", "Underline", "Strikethrough"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFont.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFont.prototype, "bold", {
            get: function () {
                _throwIfNotLoaded("bold", this._B, _typeConditionalRangeFont, this._isNull);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "Bold", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFont.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeConditionalRangeFont, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFont.prototype, "italic", {
            get: function () {
                _throwIfNotLoaded("italic", this._I, _typeConditionalRangeFont, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "Italic", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFont.prototype, "strikethrough", {
            get: function () {
                _throwIfNotLoaded("strikethrough", this._S, _typeConditionalRangeFont, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Strikethrough", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFont.prototype, "underline", {
            get: function () {
                _throwIfNotLoaded("underline", this._U, _typeConditionalRangeFont, this._isNull);
                return this._U;
            },
            set: function (value) {
                this._U = value;
                _invokeSetProperty(this, "Underline", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ConditionalRangeFont.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["color", "italic", "bold", "underline", "strikethrough"], [], []);
        };
        ConditionalRangeFont.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ConditionalRangeFont.prototype.clear = function () {
            _invokeMethod(this, "Clear", 0, [], 0, 0);
        };
        ConditionalRangeFont.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Bold"])) {
                this._B = obj["Bold"];
            }
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
            if (!_isUndefined(obj["Italic"])) {
                this._I = obj["Italic"];
            }
            if (!_isUndefined(obj["Strikethrough"])) {
                this._S = obj["Strikethrough"];
            }
            if (!_isUndefined(obj["Underline"])) {
                this._U = obj["Underline"];
            }
        };
        ConditionalRangeFont.prototype.load = function (options) {
            return _load(this, options);
        };
        ConditionalRangeFont.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ConditionalRangeFont.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ConditionalRangeFont.prototype.toJSON = function () {
            return _toJson(this, {
                "bold": this._B,
                "color": this._C,
                "italic": this._I,
                "strikethrough": this._S,
                "underline": this._U
            }, {});
        };
        ConditionalRangeFont.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ConditionalRangeFont.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ConditionalRangeFont;
    }(OfficeExtension.ClientObject));
    Excel.ConditionalRangeFont = ConditionalRangeFont;
    var _typeConditionalRangeFill = "ConditionalRangeFill";
    var ConditionalRangeFill = (function (_super) {
        __extends(ConditionalRangeFill, _super);
        function ConditionalRangeFill() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ConditionalRangeFill.prototype, "_className", {
            get: function () {
                return "ConditionalRangeFill";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFill.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["color"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFill.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Color"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFill.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeFill.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeConditionalRangeFill, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ConditionalRangeFill.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["color"], [], []);
        };
        ConditionalRangeFill.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ConditionalRangeFill.prototype.clear = function () {
            _invokeMethod(this, "Clear", 0, [], 0, 0);
        };
        ConditionalRangeFill.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
        };
        ConditionalRangeFill.prototype.load = function (options) {
            return _load(this, options);
        };
        ConditionalRangeFill.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ConditionalRangeFill.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ConditionalRangeFill.prototype.toJSON = function () {
            return _toJson(this, {
                "color": this._C
            }, {});
        };
        ConditionalRangeFill.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ConditionalRangeFill.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ConditionalRangeFill;
    }(OfficeExtension.ClientObject));
    Excel.ConditionalRangeFill = ConditionalRangeFill;
    var _typeConditionalRangeBorder = "ConditionalRangeBorder";
    var ConditionalRangeBorder = (function (_super) {
        __extends(ConditionalRangeBorder, _super);
        function ConditionalRangeBorder() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ConditionalRangeBorder.prototype, "_className", {
            get: function () {
                return "ConditionalRangeBorder";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorder.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["sideIndex", "style", "color"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorder.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["SideIndex", "Style", "Color"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorder.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorder.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeConditionalRangeBorder, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorder.prototype, "sideIndex", {
            get: function () {
                _throwIfNotLoaded("sideIndex", this._S, _typeConditionalRangeBorder, this._isNull);
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorder.prototype, "style", {
            get: function () {
                _throwIfNotLoaded("style", this._St, _typeConditionalRangeBorder, this._isNull);
                return this._St;
            },
            set: function (value) {
                this._St = value;
                _invokeSetProperty(this, "Style", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ConditionalRangeBorder.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["style", "color"], [], []);
        };
        ConditionalRangeBorder.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ConditionalRangeBorder.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
            if (!_isUndefined(obj["SideIndex"])) {
                this._S = obj["SideIndex"];
            }
            if (!_isUndefined(obj["Style"])) {
                this._St = obj["Style"];
            }
        };
        ConditionalRangeBorder.prototype.load = function (options) {
            return _load(this, options);
        };
        ConditionalRangeBorder.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ConditionalRangeBorder.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ConditionalRangeBorder.prototype.toJSON = function () {
            return _toJson(this, {
                "color": this._C,
                "sideIndex": this._S,
                "style": this._St
            }, {});
        };
        ConditionalRangeBorder.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ConditionalRangeBorder.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ConditionalRangeBorder;
    }(OfficeExtension.ClientObject));
    Excel.ConditionalRangeBorder = ConditionalRangeBorder;
    var _typeConditionalRangeBorderCollection = "ConditionalRangeBorderCollection";
    var ConditionalRangeBorderCollection = (function (_super) {
        __extends(ConditionalRangeBorderCollection, _super);
        function ConditionalRangeBorderCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "_className", {
            get: function () {
                return "ConditionalRangeBorderCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Count"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["top", "bottom", "left", "right"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "bottom", {
            get: function () {
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.ConditionalRangeBorder, this, "Bottom", false, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "left", {
            get: function () {
                if (!this._L) {
                    this._L = _createPropertyObject(Excel.ConditionalRangeBorder, this, "Left", false, 4);
                }
                return this._L;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "right", {
            get: function () {
                if (!this._R) {
                    this._R = _createPropertyObject(Excel.ConditionalRangeBorder, this, "Right", false, 4);
                }
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "top", {
            get: function () {
                if (!this._T) {
                    this._T = _createPropertyObject(Excel.ConditionalRangeBorder, this, "Top", false, 4);
                }
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeConditionalRangeBorderCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ConditionalRangeBorderCollection.prototype, "count", {
            get: function () {
                _throwIfNotLoaded("count", this._C, _typeConditionalRangeBorderCollection, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        ConditionalRangeBorderCollection.prototype.getItem = function (index) {
            return _createIndexerObject(Excel.ConditionalRangeBorder, this, [index]);
        };
        ConditionalRangeBorderCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.ConditionalRangeBorder, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        ConditionalRangeBorderCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Count"])) {
                this._C = obj["Count"];
            }
            _handleNavigationPropertyResults(this, obj, ["bottom", "Bottom", "left", "Left", "right", "Right", "top", "Top"]);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.ConditionalRangeBorder, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        ConditionalRangeBorderCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        ConditionalRangeBorderCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ConditionalRangeBorderCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.ConditionalRangeBorder, true, _this, childItemData, index); });
        };
        ConditionalRangeBorderCollection.prototype.toJSON = function () {
            return _toJson(this, {
                "count": this._C
            }, {
                "bottom": this._B,
                "left": this._L,
                "right": this._R,
                "top": this._T
            }, this.m__items);
        };
        ConditionalRangeBorderCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.ConditionalRangeBorder, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return ConditionalRangeBorderCollection;
    }(OfficeExtension.ClientObject));
    Excel.ConditionalRangeBorderCollection = ConditionalRangeBorderCollection;
    var _typeCustomFunctionManager = "CustomFunctionManager";
    var CustomFunctionManager = (function (_super) {
        __extends(CustomFunctionManager, _super);
        function CustomFunctionManager() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CustomFunctionManager.prototype, "_className", {
            get: function () {
                return "CustomFunctionManager";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomFunctionManager.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["status"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomFunctionManager.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Status"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CustomFunctionManager.prototype, "status", {
            get: function () {
                _throwIfNotLoaded("status", this._S, _typeCustomFunctionManager, this._isNull);
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        CustomFunctionManager.prototype.register = function (metadata, javascript) {
            _invokeMethod(this, "Register", 0, [metadata, javascript], 0, 0);
        };
        CustomFunctionManager.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Status"])) {
                this._S = obj["Status"];
            }
        };
        CustomFunctionManager.prototype.load = function (options) {
            return _load(this, options);
        };
        CustomFunctionManager.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CustomFunctionManager.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        CustomFunctionManager.newObject = function (context) {
            return _createTopLevelServiceObject(Excel.CustomFunctionManager, context, "Microsoft.ExcelServices.CustomFunctionManager", false, 4);
        };
        CustomFunctionManager.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return CustomFunctionManager;
    }(OfficeExtension.ClientObject));
    Excel.CustomFunctionManager = CustomFunctionManager;
    var CustomFunctionManagerCustom = (function () {
        function CustomFunctionManagerCustom() {
        }
        CustomFunctionManagerCustom.register = function (metadata, javascript) {
            _throwIfApiNotSupported("CustomFunctionManager.register", "CustomFunctions", "1.3", _hostName);
            return _runOnRegularOrWacContext({ delayForCellEdit: true }, function (context) { return Excel.CustomFunctionManager.newObject(context).register(metadata, javascript); });
        };
        CustomFunctionManagerCustom.getStatus = function () {
            _throwIfApiNotSupported("CustomFunctionManager.register", "CustomFunctions", "1.3", _hostName);
            return _runOnRegularOrWacContext({ delayForCellEdit: true }, function (context) {
                var manager = Excel.CustomFunctionManager.newObject(context).load("status");
                return context.sync().then(function () { return manager.status; });
            });
        };
        return CustomFunctionManagerCustom;
    }());
    Excel.CustomFunctionManagerCustom = CustomFunctionManagerCustom;
    OfficeExtension.Utility.applyMixin(CustomFunctionManager, CustomFunctionManagerCustom);
    (function (_CC) {
        function CustomFunctionManager_StaticCustomize(type) {
            type.register = CustomFunctionManagerCustom.register;
            type.getStatus = CustomFunctionManagerCustom.getStatus;
        }
        _CC.CustomFunctionManager_StaticCustomize = CustomFunctionManager_StaticCustomize;
    })(_CC = Excel._CC || (Excel._CC = {}));
    _CC.CustomFunctionManager_StaticCustomize(CustomFunctionManager);
    var _typeStyle = "Style";
    var Style = (function (_super) {
        __extends(Style, _super);
        function Style() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Style.prototype, "_className", {
            get: function () {
                return "Style";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["builtIn", "formulaHidden", "horizontalAlignment", "includeAlignment", "includeBorder", "includeFont", "includeNumber", "includePatterns", "includeProtection", "indentLevel", "locked", "name", "numberFormat", "numberFormatLocal", "readingOrder", "shrinkToFit", "verticalAlignment", "wrapText", "textOrientation", "autoIndent"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["BuiltIn", "FormulaHidden", "HorizontalAlignment", "IncludeAlignment", "IncludeBorder", "IncludeFont", "IncludeNumber", "IncludePatterns", "IncludeProtection", "IndentLevel", "Locked", "Name", "NumberFormat", "NumberFormatLocal", "ReadingOrder", "ShrinkToFit", "VerticalAlignment", "WrapText", "TextOrientation", "AutoIndent"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["borders", "font", "fill"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "borders", {
            get: function () {
                if (!this._B) {
                    this._B = _createPropertyObject(Excel.RangeBorderCollection, this, "Borders", true, 4);
                }
                return this._B;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.RangeFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "font", {
            get: function () {
                if (!this._Fo) {
                    this._Fo = _createPropertyObject(Excel.RangeFont, this, "Font", false, 4);
                }
                return this._Fo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "autoIndent", {
            get: function () {
                _throwIfNotLoaded("autoIndent", this.m_autoIndent, _typeStyle, this._isNull);
                _throwIfApiNotSupported("Style.autoIndent", _defaultApiSetName, "1.8", _hostName);
                return this.m_autoIndent;
            },
            set: function (value) {
                this.m_autoIndent = value;
                _invokeSetProperty(this, "AutoIndent", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "builtIn", {
            get: function () {
                _throwIfNotLoaded("builtIn", this._Bu, _typeStyle, this._isNull);
                return this._Bu;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "formulaHidden", {
            get: function () {
                _throwIfNotLoaded("formulaHidden", this._For, _typeStyle, this._isNull);
                return this._For;
            },
            set: function (value) {
                this._For = value;
                _invokeSetProperty(this, "FormulaHidden", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "horizontalAlignment", {
            get: function () {
                _throwIfNotLoaded("horizontalAlignment", this._H, _typeStyle, this._isNull);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "HorizontalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "includeAlignment", {
            get: function () {
                _throwIfNotLoaded("includeAlignment", this._I, _typeStyle, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "IncludeAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "includeBorder", {
            get: function () {
                _throwIfNotLoaded("includeBorder", this._In, _typeStyle, this._isNull);
                return this._In;
            },
            set: function (value) {
                this._In = value;
                _invokeSetProperty(this, "IncludeBorder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "includeFont", {
            get: function () {
                _throwIfNotLoaded("includeFont", this._Inc, _typeStyle, this._isNull);
                return this._Inc;
            },
            set: function (value) {
                this._Inc = value;
                _invokeSetProperty(this, "IncludeFont", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "includeNumber", {
            get: function () {
                _throwIfNotLoaded("includeNumber", this._Incl, _typeStyle, this._isNull);
                return this._Incl;
            },
            set: function (value) {
                this._Incl = value;
                _invokeSetProperty(this, "IncludeNumber", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "includePatterns", {
            get: function () {
                _throwIfNotLoaded("includePatterns", this._Inclu, _typeStyle, this._isNull);
                return this._Inclu;
            },
            set: function (value) {
                this._Inclu = value;
                _invokeSetProperty(this, "IncludePatterns", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "includeProtection", {
            get: function () {
                _throwIfNotLoaded("includeProtection", this._Includ, _typeStyle, this._isNull);
                return this._Includ;
            },
            set: function (value) {
                this._Includ = value;
                _invokeSetProperty(this, "IncludeProtection", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "indentLevel", {
            get: function () {
                _throwIfNotLoaded("indentLevel", this._Ind, _typeStyle, this._isNull);
                return this._Ind;
            },
            set: function (value) {
                this._Ind = value;
                _invokeSetProperty(this, "IndentLevel", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "locked", {
            get: function () {
                _throwIfNotLoaded("locked", this._L, _typeStyle, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "Locked", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeStyle, this._isNull);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "numberFormat", {
            get: function () {
                _throwIfNotLoaded("numberFormat", this._Nu, _typeStyle, this._isNull);
                return this._Nu;
            },
            set: function (value) {
                this._Nu = value;
                _invokeSetProperty(this, "NumberFormat", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "numberFormatLocal", {
            get: function () {
                _throwIfNotLoaded("numberFormatLocal", this._Num, _typeStyle, this._isNull);
                return this._Num;
            },
            set: function (value) {
                this._Num = value;
                _invokeSetProperty(this, "NumberFormatLocal", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "readingOrder", {
            get: function () {
                _throwIfNotLoaded("readingOrder", this._R, _typeStyle, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "ReadingOrder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "shrinkToFit", {
            get: function () {
                _throwIfNotLoaded("shrinkToFit", this._S, _typeStyle, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "ShrinkToFit", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "textOrientation", {
            get: function () {
                _throwIfNotLoaded("textOrientation", this.m_textOrientation, _typeStyle, this._isNull);
                _throwIfApiNotSupported("Style.textOrientation", _defaultApiSetName, "1.8", _hostName);
                return this.m_textOrientation;
            },
            set: function (value) {
                var handled = _CC.Style_TextOrientation_Set(this, value).handled;
                if (handled) {
                    return;
                }
                this.m_textOrientation = value;
                _invokeSetProperty(this, "TextOrientation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "verticalAlignment", {
            get: function () {
                _throwIfNotLoaded("verticalAlignment", this._V, _typeStyle, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "VerticalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Style.prototype, "wrapText", {
            get: function () {
                _throwIfNotLoaded("wrapText", this._W, _typeStyle, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "WrapText", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Style.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["formulaHidden", "horizontalAlignment", "includeAlignment", "includeBorder", "includeFont", "includeNumber", "includePatterns", "includeProtection", "indentLevel", "locked", "numberFormat", "numberFormatLocal", "readingOrder", "shrinkToFit", "verticalAlignment", "wrapText", "textOrientation", "autoIndent"], ["font", "fill"], [
                "borders"
            ]);
        };
        Style.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Style.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        Style.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AutoIndent"])) {
                this.m_autoIndent = obj["AutoIndent"];
            }
            if (!_isUndefined(obj["BuiltIn"])) {
                this._Bu = obj["BuiltIn"];
            }
            if (!_isUndefined(obj["FormulaHidden"])) {
                this._For = obj["FormulaHidden"];
            }
            if (!_isUndefined(obj["HorizontalAlignment"])) {
                this._H = obj["HorizontalAlignment"];
            }
            if (!_isUndefined(obj["IncludeAlignment"])) {
                this._I = obj["IncludeAlignment"];
            }
            if (!_isUndefined(obj["IncludeBorder"])) {
                this._In = obj["IncludeBorder"];
            }
            if (!_isUndefined(obj["IncludeFont"])) {
                this._Inc = obj["IncludeFont"];
            }
            if (!_isUndefined(obj["IncludeNumber"])) {
                this._Incl = obj["IncludeNumber"];
            }
            if (!_isUndefined(obj["IncludePatterns"])) {
                this._Inclu = obj["IncludePatterns"];
            }
            if (!_isUndefined(obj["IncludeProtection"])) {
                this._Includ = obj["IncludeProtection"];
            }
            if (!_isUndefined(obj["IndentLevel"])) {
                this._Ind = obj["IndentLevel"];
            }
            if (!_isUndefined(obj["Locked"])) {
                this._L = obj["Locked"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["NumberFormat"])) {
                this._Nu = obj["NumberFormat"];
            }
            if (!_isUndefined(obj["NumberFormatLocal"])) {
                this._Num = obj["NumberFormatLocal"];
            }
            if (!_isUndefined(obj["ReadingOrder"])) {
                this._R = obj["ReadingOrder"];
            }
            if (!_isUndefined(obj["ShrinkToFit"])) {
                this._S = obj["ShrinkToFit"];
            }
            if (!_isUndefined(obj["TextOrientation"])) {
                this.m_textOrientation = obj["TextOrientation"];
            }
            if (!_isUndefined(obj["VerticalAlignment"])) {
                this._V = obj["VerticalAlignment"];
            }
            if (!_isUndefined(obj["WrapText"])) {
                this._W = obj["WrapText"];
            }
            _handleNavigationPropertyResults(this, obj, ["borders", "Borders", "fill", "Fill", "font", "Font"]);
        };
        Style.prototype.load = function (options) {
            return _load(this, options);
        };
        Style.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Style.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Style.prototype.toJSON = function () {
            return _toJson(this, {
                "autoIndent": this.m_autoIndent,
                "builtIn": this._Bu,
                "formulaHidden": this._For,
                "horizontalAlignment": this._H,
                "includeAlignment": this._I,
                "includeBorder": this._In,
                "includeFont": this._Inc,
                "includeNumber": this._Incl,
                "includePatterns": this._Inclu,
                "includeProtection": this._Includ,
                "indentLevel": this._Ind,
                "locked": this._L,
                "name": this._N,
                "numberFormat": this._Nu,
                "numberFormatLocal": this._Num,
                "readingOrder": this._R,
                "shrinkToFit": this._S,
                "textOrientation": this.m_textOrientation,
                "verticalAlignment": this._V,
                "wrapText": this._W
            }, {
                "borders": this._B,
                "fill": this._F,
                "font": this._Fo
            });
        };
        Style.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Style.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Style;
    }(OfficeExtension.ClientObject));
    Excel.Style = Style;
    (function (_CC) {
        function Style_TextOrientation_Set(thisObj, value) {
            if (ALWAYS_TRUE_PLACEHOLDER_OVERRIDE) {
                thisObj.m_textOrientation = value;
                _invokeSetProperty(thisObj, "Orientation", value, 0);
                return { handled: true };
            }
            return { handled: false };
        }
        _CC.Style_TextOrientation_Set = Style_TextOrientation_Set;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typeStyleCollection = "StyleCollection";
    var StyleCollection = (function (_super) {
        __extends(StyleCollection, _super);
        function StyleCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(StyleCollection.prototype, "_className", {
            get: function () {
                return "StyleCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(StyleCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(StyleCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeStyleCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        StyleCollection.prototype.add = function (name) {
            _invokeMethod(this, "Add", 0, [name], 0, 0);
        };
        StyleCollection.prototype.getCount = function () {
            _throwIfApiNotSupported("StyleCollection.getCount", _defaultApiSetName, "1.9", _hostName);
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        StyleCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.Style, this, [name]);
        };
        StyleCollection.prototype.getItemAt = function (index) {
            _throwIfApiNotSupported("StyleCollection.getItemAt", _defaultApiSetName, "1.9", _hostName);
            return _createMethodObject(Excel.Style, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        StyleCollection.prototype.getItemOrNullObject = function (name) {
            _throwIfApiNotSupported("StyleCollection.getItemOrNullObject", _defaultApiSetName, "1.14", _hostName);
            return _createMethodObject(Excel.Style, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        StyleCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Style, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        StyleCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        StyleCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        StyleCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Style, true, _this, childItemData, index); });
        };
        StyleCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        StyleCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Style, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return StyleCollection;
    }(OfficeExtension.ClientObject));
    Excel.StyleCollection = StyleCollection;
    var _typeTableStyleCollection = "TableStyleCollection";
    var TableStyleCollection = (function (_super) {
        __extends(TableStyleCollection, _super);
        function TableStyleCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TableStyleCollection.prototype, "_className", {
            get: function () {
                return "TableStyleCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableStyleCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableStyleCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeTableStyleCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        TableStyleCollection.prototype.add = function (name, makeUniqueName) {
            return _createMethodObject(Excel.TableStyle, this, "Add", 0, [name, makeUniqueName], false, true, null, 0);
        };
        TableStyleCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        TableStyleCollection.prototype.getDefault = function () {
            return _createMethodObject(Excel.TableStyle, this, "GetDefault", 0, [], false, false, null, 0);
        };
        TableStyleCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.TableStyle, this, [name]);
        };
        TableStyleCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.TableStyle, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        TableStyleCollection.prototype.setDefault = function (newDefaultStyle) {
            _invokeMethod(this, "SetDefault", 0, [newDefaultStyle], 0, 0);
        };
        TableStyleCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.TableStyle, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        TableStyleCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        TableStyleCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TableStyleCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.TableStyle, true, _this, childItemData, index); });
        };
        TableStyleCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        TableStyleCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.TableStyle, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return TableStyleCollection;
    }(OfficeExtension.ClientObject));
    Excel.TableStyleCollection = TableStyleCollection;
    var _typeTableStyle = "TableStyle";
    var TableStyle = (function (_super) {
        __extends(TableStyle, _super);
        function TableStyle() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TableStyle.prototype, "_className", {
            get: function () {
                return "TableStyle";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableStyle.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "readOnly", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableStyle.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "ReadOnly", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableStyle.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableStyle.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeTableStyle, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableStyle.prototype, "readOnly", {
            get: function () {
                _throwIfNotLoaded("readOnly", this._R, _typeTableStyle, this._isNull);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TableStyle.prototype, "_Id", {
            get: function () {
                _throwIfNotLoaded("_Id", this.__I, _typeTableStyle, this._isNull);
                return this.__I;
            },
            enumerable: true,
            configurable: true
        });
        TableStyle.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name"], [], []);
        };
        TableStyle.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        TableStyle.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        TableStyle.prototype.duplicate = function () {
            return _createMethodObject(Excel.TableStyle, this, "Duplicate", 0, [], false, false, null, 0);
        };
        TableStyle.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["ReadOnly"])) {
                this._R = obj["ReadOnly"];
            }
            if (!_isUndefined(obj["_Id"])) {
                this.__I = obj["_Id"];
            }
        };
        TableStyle.prototype.load = function (options) {
            return _load(this, options);
        };
        TableStyle.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TableStyle.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_Id"])) {
                this.__I = value["_Id"];
            }
        };
        TableStyle.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        TableStyle.prototype.toJSON = function () {
            return _toJson(this, {
                "name": this._N,
                "readOnly": this._R
            }, {});
        };
        TableStyle.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        TableStyle.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return TableStyle;
    }(OfficeExtension.ClientObject));
    Excel.TableStyle = TableStyle;
    var _typePivotTableStyleCollection = "PivotTableStyleCollection";
    var PivotTableStyleCollection = (function (_super) {
        __extends(PivotTableStyleCollection, _super);
        function PivotTableStyleCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotTableStyleCollection.prototype, "_className", {
            get: function () {
                return "PivotTableStyleCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableStyleCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableStyleCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typePivotTableStyleCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        PivotTableStyleCollection.prototype.add = function (name, makeUniqueName) {
            return _createMethodObject(Excel.PivotTableStyle, this, "Add", 0, [name, makeUniqueName], false, true, null, 0);
        };
        PivotTableStyleCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        PivotTableStyleCollection.prototype.getDefault = function () {
            return _createMethodObject(Excel.PivotTableStyle, this, "GetDefault", 0, [], false, false, null, 0);
        };
        PivotTableStyleCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.PivotTableStyle, this, [name]);
        };
        PivotTableStyleCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.PivotTableStyle, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        PivotTableStyleCollection.prototype.setDefault = function (newDefaultStyle) {
            _invokeMethod(this, "SetDefault", 0, [newDefaultStyle], 0, 0);
        };
        PivotTableStyleCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.PivotTableStyle, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        PivotTableStyleCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotTableStyleCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotTableStyleCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.PivotTableStyle, true, _this, childItemData, index); });
        };
        PivotTableStyleCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        PivotTableStyleCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.PivotTableStyle, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return PivotTableStyleCollection;
    }(OfficeExtension.ClientObject));
    Excel.PivotTableStyleCollection = PivotTableStyleCollection;
    var _typePivotTableStyle = "PivotTableStyle";
    var PivotTableStyle = (function (_super) {
        __extends(PivotTableStyle, _super);
        function PivotTableStyle() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PivotTableStyle.prototype, "_className", {
            get: function () {
                return "PivotTableStyle";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableStyle.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "readOnly", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableStyle.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "ReadOnly", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableStyle.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableStyle.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typePivotTableStyle, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableStyle.prototype, "readOnly", {
            get: function () {
                _throwIfNotLoaded("readOnly", this._R, _typePivotTableStyle, this._isNull);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PivotTableStyle.prototype, "_Id", {
            get: function () {
                _throwIfNotLoaded("_Id", this.__I, _typePivotTableStyle, this._isNull);
                return this.__I;
            },
            enumerable: true,
            configurable: true
        });
        PivotTableStyle.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name"], [], []);
        };
        PivotTableStyle.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        PivotTableStyle.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        PivotTableStyle.prototype.duplicate = function () {
            return _createMethodObject(Excel.PivotTableStyle, this, "Duplicate", 0, [], false, false, null, 0);
        };
        PivotTableStyle.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["ReadOnly"])) {
                this._R = obj["ReadOnly"];
            }
            if (!_isUndefined(obj["_Id"])) {
                this.__I = obj["_Id"];
            }
        };
        PivotTableStyle.prototype.load = function (options) {
            return _load(this, options);
        };
        PivotTableStyle.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PivotTableStyle.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_Id"])) {
                this.__I = value["_Id"];
            }
        };
        PivotTableStyle.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PivotTableStyle.prototype.toJSON = function () {
            return _toJson(this, {
                "name": this._N,
                "readOnly": this._R
            }, {});
        };
        PivotTableStyle.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PivotTableStyle.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PivotTableStyle;
    }(OfficeExtension.ClientObject));
    Excel.PivotTableStyle = PivotTableStyle;
    var _typeSlicerStyleCollection = "SlicerStyleCollection";
    var SlicerStyleCollection = (function (_super) {
        __extends(SlicerStyleCollection, _super);
        function SlicerStyleCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(SlicerStyleCollection.prototype, "_className", {
            get: function () {
                return "SlicerStyleCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerStyleCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerStyleCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeSlicerStyleCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        SlicerStyleCollection.prototype.add = function (name, makeUniqueName) {
            return _createMethodObject(Excel.SlicerStyle, this, "Add", 0, [name, makeUniqueName], false, true, null, 0);
        };
        SlicerStyleCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        SlicerStyleCollection.prototype.getDefault = function () {
            return _createMethodObject(Excel.SlicerStyle, this, "GetDefault", 0, [], false, false, null, 0);
        };
        SlicerStyleCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.SlicerStyle, this, [name]);
        };
        SlicerStyleCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.SlicerStyle, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        SlicerStyleCollection.prototype.setDefault = function (newDefaultStyle) {
            _invokeMethod(this, "SetDefault", 0, [newDefaultStyle], 0, 0);
        };
        SlicerStyleCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.SlicerStyle, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        SlicerStyleCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        SlicerStyleCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        SlicerStyleCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.SlicerStyle, true, _this, childItemData, index); });
        };
        SlicerStyleCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        SlicerStyleCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.SlicerStyle, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return SlicerStyleCollection;
    }(OfficeExtension.ClientObject));
    Excel.SlicerStyleCollection = SlicerStyleCollection;
    var _typeSlicerStyle = "SlicerStyle";
    var SlicerStyle = (function (_super) {
        __extends(SlicerStyle, _super);
        function SlicerStyle() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(SlicerStyle.prototype, "_className", {
            get: function () {
                return "SlicerStyle";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerStyle.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "readOnly", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerStyle.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "ReadOnly", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerStyle.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerStyle.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeSlicerStyle, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerStyle.prototype, "readOnly", {
            get: function () {
                _throwIfNotLoaded("readOnly", this._R, _typeSlicerStyle, this._isNull);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerStyle.prototype, "_Id", {
            get: function () {
                _throwIfNotLoaded("_Id", this.__I, _typeSlicerStyle, this._isNull);
                return this.__I;
            },
            enumerable: true,
            configurable: true
        });
        SlicerStyle.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name"], [], []);
        };
        SlicerStyle.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        SlicerStyle.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        SlicerStyle.prototype.duplicate = function () {
            return _createMethodObject(Excel.SlicerStyle, this, "Duplicate", 0, [], false, false, null, 0);
        };
        SlicerStyle.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["ReadOnly"])) {
                this._R = obj["ReadOnly"];
            }
            if (!_isUndefined(obj["_Id"])) {
                this.__I = obj["_Id"];
            }
        };
        SlicerStyle.prototype.load = function (options) {
            return _load(this, options);
        };
        SlicerStyle.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        SlicerStyle.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_Id"])) {
                this.__I = value["_Id"];
            }
        };
        SlicerStyle.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        SlicerStyle.prototype.toJSON = function () {
            return _toJson(this, {
                "name": this._N,
                "readOnly": this._R
            }, {});
        };
        SlicerStyle.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        SlicerStyle.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return SlicerStyle;
    }(OfficeExtension.ClientObject));
    Excel.SlicerStyle = SlicerStyle;
    var _typeTimelineStyleCollection = "TimelineStyleCollection";
    var TimelineStyleCollection = (function (_super) {
        __extends(TimelineStyleCollection, _super);
        function TimelineStyleCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TimelineStyleCollection.prototype, "_className", {
            get: function () {
                return "TimelineStyleCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TimelineStyleCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TimelineStyleCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeTimelineStyleCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        TimelineStyleCollection.prototype.add = function (name, makeUniqueName) {
            return _createMethodObject(Excel.TimelineStyle, this, "Add", 0, [name, makeUniqueName], false, true, null, 0);
        };
        TimelineStyleCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        TimelineStyleCollection.prototype.getDefault = function () {
            return _createMethodObject(Excel.TimelineStyle, this, "GetDefault", 0, [], false, false, null, 0);
        };
        TimelineStyleCollection.prototype.getItem = function (name) {
            return _createIndexerObject(Excel.TimelineStyle, this, [name]);
        };
        TimelineStyleCollection.prototype.getItemOrNullObject = function (name) {
            return _createMethodObject(Excel.TimelineStyle, this, "GetItemOrNullObject", 1, [name], false, false, null, 4);
        };
        TimelineStyleCollection.prototype.setDefault = function (newDefaultStyle) {
            _invokeMethod(this, "SetDefault", 0, [newDefaultStyle], 0, 0);
        };
        TimelineStyleCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.TimelineStyle, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        TimelineStyleCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        TimelineStyleCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TimelineStyleCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.TimelineStyle, true, _this, childItemData, index); });
        };
        TimelineStyleCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        TimelineStyleCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.TimelineStyle, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return TimelineStyleCollection;
    }(OfficeExtension.ClientObject));
    Excel.TimelineStyleCollection = TimelineStyleCollection;
    var _typeTimelineStyle = "TimelineStyle";
    var TimelineStyle = (function (_super) {
        __extends(TimelineStyle, _super);
        function TimelineStyle() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TimelineStyle.prototype, "_className", {
            get: function () {
                return "TimelineStyle";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TimelineStyle.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name", "readOnly", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TimelineStyle.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name", "ReadOnly", "_Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TimelineStyle.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TimelineStyle.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeTimelineStyle, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TimelineStyle.prototype, "readOnly", {
            get: function () {
                _throwIfNotLoaded("readOnly", this._R, _typeTimelineStyle, this._isNull);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TimelineStyle.prototype, "_Id", {
            get: function () {
                _throwIfNotLoaded("_Id", this.__I, _typeTimelineStyle, this._isNull);
                return this.__I;
            },
            enumerable: true,
            configurable: true
        });
        TimelineStyle.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name"], [], []);
        };
        TimelineStyle.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        TimelineStyle.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        TimelineStyle.prototype.duplicate = function () {
            return _createMethodObject(Excel.TimelineStyle, this, "Duplicate", 0, [], false, false, null, 0);
        };
        TimelineStyle.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["ReadOnly"])) {
                this._R = obj["ReadOnly"];
            }
            if (!_isUndefined(obj["_Id"])) {
                this.__I = obj["_Id"];
            }
        };
        TimelineStyle.prototype.load = function (options) {
            return _load(this, options);
        };
        TimelineStyle.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TimelineStyle.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_Id"])) {
                this.__I = value["_Id"];
            }
        };
        TimelineStyle.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        TimelineStyle.prototype.toJSON = function () {
            return _toJson(this, {
                "name": this._N,
                "readOnly": this._R
            }, {});
        };
        TimelineStyle.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        TimelineStyle.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return TimelineStyle;
    }(OfficeExtension.ClientObject));
    Excel.TimelineStyle = TimelineStyle;
    var _typeInternalTest = "InternalTest";
    var InternalTest = (function (_super) {
        __extends(InternalTest, _super);
        function InternalTest() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(InternalTest.prototype, "_className", {
            get: function () {
                return "InternalTest";
            },
            enumerable: true,
            configurable: true
        });
        InternalTest.prototype.delay = function (seconds) {
            return _invokeMethod(this, "Delay", 0, [seconds], 0, 0);
        };
        InternalTest.prototype.enterCellEdit = function (duration) {
            _throwIfApiNotSupported("InternalTest.enterCellEdit", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "EnterCellEdit", 0, [duration], 0, 0);
        };
        InternalTest.prototype.exitCellEdit = function () {
            _throwIfApiNotSupported("InternalTest.exitCellEdit", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "ExitCellEdit", 0, [], 0, 0);
        };
        InternalTest.prototype.firstPartyMethod = function () {
            _throwIfApiNotSupported("InternalTest.firstPartyMethod", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "FirstPartyMethod", 1, [], 4 | 1, 0);
        };
        InternalTest.prototype.installCustomFunctionsFromCache = function () {
            _throwIfApiNotSupported("InternalTest.installCustomFunctionsFromCache", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "InstallCustomFunctionsFromCache", 0, [], 0, 0);
        };
        InternalTest.prototype.noPermissionMethod = function (value) {
            _throwIfApiNotSupported("InternalTest.noPermissionMethod", _defaultApiSetName, "1.9", _hostName);
            return _invokeMethod(this, "NoPermissionMethod", 0, [value], 0, 0);
        };
        InternalTest.prototype.recalc = function (force, allFormulas) {
            _throwIfApiNotSupported("InternalTest.recalc", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "Recalc", 0, [force, allFormulas], 0, 0);
        };
        InternalTest.prototype.recalcBySolutionId = function (solutionId) {
            _throwIfApiNotSupported("InternalTest.recalcBySolutionId", _defaultApiSetName, "1.9", _hostName);
            _invokeMethod(this, "RecalcBySolutionId", 0, [solutionId], 0, 0);
        };
        InternalTest.prototype.safeForCellEditModeMethod = function (value) {
            _throwIfApiNotSupported("InternalTest.safeForCellEditModeMethod", _defaultApiSetName, "1.9", _hostName);
            return _invokeMethod(this, "SafeForCellEditModeMethod", 0, [value], 0, 0);
        };
        InternalTest.prototype.triggerMessage = function (messageCategory, messageType, targetId, message) {
            _throwIfApiNotSupported("InternalTest.triggerMessage", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "TriggerMessage", 0, [messageCategory, messageType, targetId, message], 0, 0);
        };
        InternalTest.prototype.triggerPostProcess = function () {
            _throwIfApiNotSupported("InternalTest.triggerPostProcess", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "TriggerPostProcess", 0, [], 0, 0);
        };
        InternalTest.prototype.triggerTestEvent = function (prop1, worksheet) {
            _throwIfApiNotSupported("InternalTest.triggerTestEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "TriggerTestEvent", 0, [prop1, worksheet], 0, 0);
        };
        InternalTest.prototype.triggerTestEventWithFilter = function (prop1, msgType, worksheet) {
            _throwIfApiNotSupported("InternalTest.triggerTestEventWithFilter", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "TriggerTestEventWithFilter", 0, [prop1, msgType, worksheet], 0, 0);
        };
        InternalTest.prototype.unregisterAllCustomFunctionExecutionEvents = function () {
            _throwIfApiNotSupported("InternalTest.unregisterAllCustomFunctionExecutionEvents", "CustomFunctions", "1.1", _hostName);
            _invokeMethod(this, "UnregisterAllCustomFunctionExecutionEvents", 0, [], 0, 0);
        };
        InternalTest.prototype.verifyCustomFunctionListExist = function () {
            _throwIfApiNotSupported("InternalTest.verifyCustomFunctionListExist", _defaultApiSetName, "1.9", _hostName);
            return _invokeMethod(this, "VerifyCustomFunctionListExist", 0, [], 0, 0);
        };
        InternalTest.prototype._RegisterCustomFunctionExecutionBeginEvent = function () {
            _throwIfApiNotSupported("InternalTest._RegisterCustomFunctionExecutionBeginEvent", "CustomFunctions", "1.1", _hostName);
            _invokeMethod(this, "_RegisterCustomFunctionExecutionBeginEvent", 0, [], 0, 0);
        };
        InternalTest.prototype._RegisterCustomFunctionExecutionEndEvent = function () {
            _throwIfApiNotSupported("InternalTest._RegisterCustomFunctionExecutionEndEvent", "CustomFunctions", "1.1", _hostName);
            _invokeMethod(this, "_RegisterCustomFunctionExecutionEndEvent", 0, [], 0, 0);
        };
        InternalTest.prototype._RegisterTest1Event = function () {
            _throwIfApiNotSupported("InternalTest._RegisterTest1Event", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterTest1Event", 0, [], 0, 0);
        };
        InternalTest.prototype._RegisterTestEvent = function () {
            _throwIfApiNotSupported("InternalTest._RegisterTestEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_RegisterTestEvent", 0, [], 0, 0);
        };
        InternalTest.prototype._UnregisterCustomFunctionExecutionBeginEvent = function () {
            _throwIfApiNotSupported("InternalTest._UnregisterCustomFunctionExecutionBeginEvent", "CustomFunctions", "1.1", _hostName);
            _invokeMethod(this, "_UnregisterCustomFunctionExecutionBeginEvent", 0, [], 0, 0);
        };
        InternalTest.prototype._UnregisterCustomFunctionExecutionEndEvent = function () {
            _throwIfApiNotSupported("InternalTest._UnregisterCustomFunctionExecutionEndEvent", "CustomFunctions", "1.1", _hostName);
            _invokeMethod(this, "_UnregisterCustomFunctionExecutionEndEvent", 0, [], 0, 0);
        };
        InternalTest.prototype._UnregisterTest1Event = function () {
            _throwIfApiNotSupported("InternalTest._UnregisterTest1Event", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterTest1Event", 0, [], 0, 0);
        };
        InternalTest.prototype._UnregisterTestEvent = function () {
            _throwIfApiNotSupported("InternalTest._UnregisterTestEvent", _defaultApiSetName, "1.7", _hostName);
            _invokeMethod(this, "_UnregisterTestEvent", 0, [], 0, 0);
        };
        InternalTest.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        InternalTest.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        InternalTest.newObject = function (context) {
            return _createTopLevelServiceObject(Excel.InternalTest, context, "Microsoft.ExcelServices.InternalTest", false, 4);
        };
        Object.defineProperty(InternalTest.prototype, "onCustomFunctionExecutionBeginEvent", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("InternalTest.onCustomFunctionExecutionBeginEvent", "CustomFunctions", "1.1", _hostName);
                if (!this.m_customFunctionExecutionBeginEvent) {
                    this.m_customFunctionExecutionBeginEvent = new OfficeExtension.GenericEventHandlers(this.context, this, "CustomFunctionExecutionBeginEvent", {
                        eventType: 200,
                        registerFunc: function () { return _this._RegisterCustomFunctionExecutionBeginEvent(); },
                        unregisterFunc: function () { return _this._UnregisterCustomFunctionExecutionBeginEvent(); },
                        getTargetIdFunc: function () { return ""; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                higherTicks: value.higherTicks,
                                lowerTicks: value.lowerTicks
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_customFunctionExecutionBeginEvent;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(InternalTest.prototype, "onCustomFunctionExecutionEndEvent", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("InternalTest.onCustomFunctionExecutionEndEvent", "CustomFunctions", "1.1", _hostName);
                if (!this.m_customFunctionExecutionEndEvent) {
                    this.m_customFunctionExecutionEndEvent = new OfficeExtension.GenericEventHandlers(this.context, this, "CustomFunctionExecutionEndEvent", {
                        eventType: 201,
                        registerFunc: function () { return _this._RegisterCustomFunctionExecutionEndEvent(); },
                        unregisterFunc: function () { return _this._UnregisterCustomFunctionExecutionEndEvent(); },
                        getTargetIdFunc: function () { return ""; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                higherTicks: value.higherTicks,
                                lowerTicks: value.lowerTicks
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_customFunctionExecutionEndEvent;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(InternalTest.prototype, "onTest1Event", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("InternalTest.onTest1Event", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_test1Event) {
                    this.m_test1Event = new OfficeExtension.GenericEventHandlers(this.context, this, "Test1Event", {
                        eventType: 2,
                        registerFunc: function () { return _this._RegisterTest1Event(); },
                        unregisterFunc: function () { return _this._UnregisterTest1Event(); },
                        getTargetIdFunc: function () { return ""; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.InternalTest_Test1Event_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_test1Event;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(InternalTest.prototype, "onTestEvent", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("InternalTest.onTestEvent", _defaultApiSetName, "1.7", _hostName);
                if (!this.m_testEvent) {
                    this.m_testEvent = new OfficeExtension.GenericEventHandlers(this.context, this, "TestEvent", {
                        eventType: 1,
                        registerFunc: function () { return _this._RegisterTestEvent(); },
                        unregisterFunc: function () { return _this._UnregisterTestEvent(); },
                        getTargetIdFunc: function () { return ""; },
                        eventArgsTransformFunc: function (value) {
                            var event = _CC.InternalTest_TestEvent_EventArgsTransform(_this, value);
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_testEvent;
            },
            enumerable: true,
            configurable: true
        });
        InternalTest.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return InternalTest;
    }(OfficeExtension.ClientObject));
    Excel.InternalTest = InternalTest;
    (function (_CC) {
        function InternalTest_Test1Event_EventArgsTransform(thisObj, args) {
            var value = args;
            var newArgs = {
                prop1: value.prop1,
                worksheet: thisObj.context.workbook.worksheets.getItem(value.worksheetId)
            };
            return newArgs;
        }
        _CC.InternalTest_Test1Event_EventArgsTransform = InternalTest_Test1Event_EventArgsTransform;
        function InternalTest_TestEvent_EventArgsTransform(thisObj, args) {
            var value = args;
            var newArgs = {
                prop1: value.prop1,
                worksheet: thisObj.context.workbook.worksheets.getItem(value.worksheetId)
            };
            return newArgs;
        }
        _CC.InternalTest_TestEvent_EventArgsTransform = InternalTest_TestEvent_EventArgsTransform;
    })(_CC = Excel._CC || (Excel._CC = {}));
    var _typePageLayout = "PageLayout";
    var PageLayout = (function (_super) {
        __extends(PageLayout, _super);
        function PageLayout() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PageLayout.prototype, "_className", {
            get: function () {
                return "PageLayout";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["orientation", "paperSize", "blackAndWhite", "printErrors", "zoom", "centerHorizontally", "centerVertically", "printHeadings", "printGridlines", "leftMargin", "rightMargin", "topMargin", "bottomMargin", "headerMargin", "footerMargin", "printComments", "draftMode", "firstPageNumber", "printOrder"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Orientation", "PaperSize", "BlackAndWhite", "PrintErrors", "Zoom", "CenterHorizontally", "CenterVertically", "PrintHeadings", "PrintGridlines", "LeftMargin", "RightMargin", "TopMargin", "BottomMargin", "HeaderMargin", "FooterMargin", "PrintComments", "DraftMode", "FirstPageNumber", "PrintOrder"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["headersFooters"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "headersFooters", {
            get: function () {
                if (!this._He) {
                    this._He = _createPropertyObject(Excel.HeaderFooterGroup, this, "HeadersFooters", false, 4);
                }
                return this._He;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "blackAndWhite", {
            get: function () {
                _throwIfNotLoaded("blackAndWhite", this._B, _typePageLayout, this._isNull);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "BlackAndWhite", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "bottomMargin", {
            get: function () {
                _throwIfNotLoaded("bottomMargin", this._Bo, _typePageLayout, this._isNull);
                return this._Bo;
            },
            set: function (value) {
                this._Bo = value;
                _invokeSetProperty(this, "BottomMargin", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "centerHorizontally", {
            get: function () {
                _throwIfNotLoaded("centerHorizontally", this._C, _typePageLayout, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "CenterHorizontally", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "centerVertically", {
            get: function () {
                _throwIfNotLoaded("centerVertically", this._Ce, _typePageLayout, this._isNull);
                return this._Ce;
            },
            set: function (value) {
                this._Ce = value;
                _invokeSetProperty(this, "CenterVertically", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "draftMode", {
            get: function () {
                _throwIfNotLoaded("draftMode", this._D, _typePageLayout, this._isNull);
                return this._D;
            },
            set: function (value) {
                this._D = value;
                _invokeSetProperty(this, "DraftMode", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "firstPageNumber", {
            get: function () {
                _throwIfNotLoaded("firstPageNumber", this._F, _typePageLayout, this._isNull);
                return this._F;
            },
            set: function (value) {
                this._F = value;
                _invokeSetProperty(this, "FirstPageNumber", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "footerMargin", {
            get: function () {
                _throwIfNotLoaded("footerMargin", this._Fo, _typePageLayout, this._isNull);
                return this._Fo;
            },
            set: function (value) {
                this._Fo = value;
                _invokeSetProperty(this, "FooterMargin", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "headerMargin", {
            get: function () {
                _throwIfNotLoaded("headerMargin", this._H, _typePageLayout, this._isNull);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "HeaderMargin", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "leftMargin", {
            get: function () {
                _throwIfNotLoaded("leftMargin", this._L, _typePageLayout, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "LeftMargin", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "orientation", {
            get: function () {
                _throwIfNotLoaded("orientation", this._O, _typePageLayout, this._isNull);
                return this._O;
            },
            set: function (value) {
                this._O = value;
                _invokeSetProperty(this, "Orientation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "paperSize", {
            get: function () {
                _throwIfNotLoaded("paperSize", this._P, _typePageLayout, this._isNull);
                return this._P;
            },
            set: function (value) {
                this._P = value;
                _invokeSetProperty(this, "PaperSize", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "printComments", {
            get: function () {
                _throwIfNotLoaded("printComments", this._Pr, _typePageLayout, this._isNull);
                return this._Pr;
            },
            set: function (value) {
                this._Pr = value;
                _invokeSetProperty(this, "PrintComments", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "printErrors", {
            get: function () {
                _throwIfNotLoaded("printErrors", this._Pri, _typePageLayout, this._isNull);
                return this._Pri;
            },
            set: function (value) {
                this._Pri = value;
                _invokeSetProperty(this, "PrintErrors", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "printGridlines", {
            get: function () {
                _throwIfNotLoaded("printGridlines", this._Prin, _typePageLayout, this._isNull);
                return this._Prin;
            },
            set: function (value) {
                this._Prin = value;
                _invokeSetProperty(this, "PrintGridlines", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "printHeadings", {
            get: function () {
                _throwIfNotLoaded("printHeadings", this._Print, _typePageLayout, this._isNull);
                return this._Print;
            },
            set: function (value) {
                this._Print = value;
                _invokeSetProperty(this, "PrintHeadings", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "printOrder", {
            get: function () {
                _throwIfNotLoaded("printOrder", this._PrintO, _typePageLayout, this._isNull);
                return this._PrintO;
            },
            set: function (value) {
                this._PrintO = value;
                _invokeSetProperty(this, "PrintOrder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "rightMargin", {
            get: function () {
                _throwIfNotLoaded("rightMargin", this._R, _typePageLayout, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "RightMargin", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "topMargin", {
            get: function () {
                _throwIfNotLoaded("topMargin", this._T, _typePageLayout, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "TopMargin", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageLayout.prototype, "zoom", {
            get: function () {
                _throwIfNotLoaded("zoom", this._Z, _typePageLayout, this._isNull);
                return this._Z;
            },
            set: function (value) {
                this._Z = value;
                _invokeSetProperty(this, "Zoom", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        PageLayout.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["orientation", "paperSize", "blackAndWhite", "printErrors", "zoom", "centerHorizontally", "centerVertically", "printHeadings", "printGridlines", "leftMargin", "rightMargin", "topMargin", "bottomMargin", "headerMargin", "footerMargin", "printComments", "draftMode", "firstPageNumber", "printOrder"], ["headersFooters"], []);
        };
        PageLayout.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        PageLayout.prototype.getPrintArea = function () {
            return _createMethodObject(Excel.RangeAreas, this, "GetPrintArea", 1, [], false, true, null, 4);
        };
        PageLayout.prototype.getPrintAreaOrNullObject = function () {
            return _createMethodObject(Excel.RangeAreas, this, "GetPrintAreaOrNullObject", 1, [], false, true, null, 4);
        };
        PageLayout.prototype.getPrintTitleColumns = function () {
            return _createMethodObject(Excel.Range, this, "GetPrintTitleColumns", 1, [], false, true, null, 4);
        };
        PageLayout.prototype.getPrintTitleColumnsOrNullObject = function () {
            return _createMethodObject(Excel.Range, this, "GetPrintTitleColumnsOrNullObject", 1, [], false, true, null, 4);
        };
        PageLayout.prototype.getPrintTitleRows = function () {
            return _createMethodObject(Excel.Range, this, "GetPrintTitleRows", 1, [], false, true, null, 4);
        };
        PageLayout.prototype.getPrintTitleRowsOrNullObject = function () {
            return _createMethodObject(Excel.Range, this, "GetPrintTitleRowsOrNullObject", 1, [], false, true, null, 4);
        };
        PageLayout.prototype.setPrintArea = function (printArea) {
            _invokeMethod(this, "SetPrintArea", 0, [printArea], 0, 0);
        };
        PageLayout.prototype.setPrintMargins = function (unit, marginOptions) {
            _invokeMethod(this, "SetPrintMargins", 0, [unit, marginOptions], 0, 0);
        };
        PageLayout.prototype.setPrintTitleColumns = function (printTitleColumns) {
            _invokeMethod(this, "SetPrintTitleColumns", 0, [printTitleColumns], 0, 0);
        };
        PageLayout.prototype.setPrintTitleRows = function (printTitleRows) {
            _invokeMethod(this, "SetPrintTitleRows", 0, [printTitleRows], 0, 0);
        };
        PageLayout.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["BlackAndWhite"])) {
                this._B = obj["BlackAndWhite"];
            }
            if (!_isUndefined(obj["BottomMargin"])) {
                this._Bo = obj["BottomMargin"];
            }
            if (!_isUndefined(obj["CenterHorizontally"])) {
                this._C = obj["CenterHorizontally"];
            }
            if (!_isUndefined(obj["CenterVertically"])) {
                this._Ce = obj["CenterVertically"];
            }
            if (!_isUndefined(obj["DraftMode"])) {
                this._D = obj["DraftMode"];
            }
            if (!_isUndefined(obj["FirstPageNumber"])) {
                this._F = obj["FirstPageNumber"];
            }
            if (!_isUndefined(obj["FooterMargin"])) {
                this._Fo = obj["FooterMargin"];
            }
            if (!_isUndefined(obj["HeaderMargin"])) {
                this._H = obj["HeaderMargin"];
            }
            if (!_isUndefined(obj["LeftMargin"])) {
                this._L = obj["LeftMargin"];
            }
            if (!_isUndefined(obj["Orientation"])) {
                this._O = obj["Orientation"];
            }
            if (!_isUndefined(obj["PaperSize"])) {
                this._P = obj["PaperSize"];
            }
            if (!_isUndefined(obj["PrintComments"])) {
                this._Pr = obj["PrintComments"];
            }
            if (!_isUndefined(obj["PrintErrors"])) {
                this._Pri = obj["PrintErrors"];
            }
            if (!_isUndefined(obj["PrintGridlines"])) {
                this._Prin = obj["PrintGridlines"];
            }
            if (!_isUndefined(obj["PrintHeadings"])) {
                this._Print = obj["PrintHeadings"];
            }
            if (!_isUndefined(obj["PrintOrder"])) {
                this._PrintO = obj["PrintOrder"];
            }
            if (!_isUndefined(obj["RightMargin"])) {
                this._R = obj["RightMargin"];
            }
            if (!_isUndefined(obj["TopMargin"])) {
                this._T = obj["TopMargin"];
            }
            if (!_isUndefined(obj["Zoom"])) {
                this._Z = obj["Zoom"];
            }
            _handleNavigationPropertyResults(this, obj, ["headersFooters", "HeadersFooters"]);
        };
        PageLayout.prototype.load = function (options) {
            return _load(this, options);
        };
        PageLayout.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PageLayout.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PageLayout.prototype.toJSON = function () {
            return _toJson(this, {
                "blackAndWhite": this._B,
                "bottomMargin": this._Bo,
                "centerHorizontally": this._C,
                "centerVertically": this._Ce,
                "draftMode": this._D,
                "firstPageNumber": this._F,
                "footerMargin": this._Fo,
                "headerMargin": this._H,
                "leftMargin": this._L,
                "orientation": this._O,
                "paperSize": this._P,
                "printComments": this._Pr,
                "printErrors": this._Pri,
                "printGridlines": this._Prin,
                "printHeadings": this._Print,
                "printOrder": this._PrintO,
                "rightMargin": this._R,
                "topMargin": this._T,
                "zoom": this._Z
            }, {
                "headersFooters": this._He
            });
        };
        PageLayout.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PageLayout.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PageLayout;
    }(OfficeExtension.ClientObject));
    Excel.PageLayout = PageLayout;
    var _typeHeaderFooter = "HeaderFooter";
    var HeaderFooter = (function (_super) {
        __extends(HeaderFooter, _super);
        function HeaderFooter() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(HeaderFooter.prototype, "_className", {
            get: function () {
                return "HeaderFooter";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooter.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["leftHeader", "centerHeader", "rightHeader", "leftFooter", "centerFooter", "rightFooter"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooter.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["LeftHeader", "CenterHeader", "RightHeader", "LeftFooter", "CenterFooter", "RightFooter"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooter.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooter.prototype, "centerFooter", {
            get: function () {
                _throwIfNotLoaded("centerFooter", this._C, _typeHeaderFooter, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "CenterFooter", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooter.prototype, "centerHeader", {
            get: function () {
                _throwIfNotLoaded("centerHeader", this._Ce, _typeHeaderFooter, this._isNull);
                return this._Ce;
            },
            set: function (value) {
                this._Ce = value;
                _invokeSetProperty(this, "CenterHeader", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooter.prototype, "leftFooter", {
            get: function () {
                _throwIfNotLoaded("leftFooter", this._L, _typeHeaderFooter, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "LeftFooter", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooter.prototype, "leftHeader", {
            get: function () {
                _throwIfNotLoaded("leftHeader", this._Le, _typeHeaderFooter, this._isNull);
                return this._Le;
            },
            set: function (value) {
                this._Le = value;
                _invokeSetProperty(this, "LeftHeader", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooter.prototype, "rightFooter", {
            get: function () {
                _throwIfNotLoaded("rightFooter", this._R, _typeHeaderFooter, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "RightFooter", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooter.prototype, "rightHeader", {
            get: function () {
                _throwIfNotLoaded("rightHeader", this._Ri, _typeHeaderFooter, this._isNull);
                return this._Ri;
            },
            set: function (value) {
                this._Ri = value;
                _invokeSetProperty(this, "RightHeader", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        HeaderFooter.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["leftHeader", "centerHeader", "rightHeader", "leftFooter", "centerFooter", "rightFooter"], [], []);
        };
        HeaderFooter.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        HeaderFooter.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["CenterFooter"])) {
                this._C = obj["CenterFooter"];
            }
            if (!_isUndefined(obj["CenterHeader"])) {
                this._Ce = obj["CenterHeader"];
            }
            if (!_isUndefined(obj["LeftFooter"])) {
                this._L = obj["LeftFooter"];
            }
            if (!_isUndefined(obj["LeftHeader"])) {
                this._Le = obj["LeftHeader"];
            }
            if (!_isUndefined(obj["RightFooter"])) {
                this._R = obj["RightFooter"];
            }
            if (!_isUndefined(obj["RightHeader"])) {
                this._Ri = obj["RightHeader"];
            }
        };
        HeaderFooter.prototype.load = function (options) {
            return _load(this, options);
        };
        HeaderFooter.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        HeaderFooter.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        HeaderFooter.prototype.toJSON = function () {
            return _toJson(this, {
                "centerFooter": this._C,
                "centerHeader": this._Ce,
                "leftFooter": this._L,
                "leftHeader": this._Le,
                "rightFooter": this._R,
                "rightHeader": this._Ri
            }, {});
        };
        HeaderFooter.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        HeaderFooter.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return HeaderFooter;
    }(OfficeExtension.ClientObject));
    Excel.HeaderFooter = HeaderFooter;
    var _typeHeaderFooterGroup = "HeaderFooterGroup";
    var HeaderFooterGroup = (function (_super) {
        __extends(HeaderFooterGroup, _super);
        function HeaderFooterGroup() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(HeaderFooterGroup.prototype, "_className", {
            get: function () {
                return "HeaderFooterGroup";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["state", "useSheetMargins", "useSheetScale"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["State", "UseSheetMargins", "UseSheetScale"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["defaultForAllPages", "firstPage", "evenPages", "oddPages"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "defaultForAllPages", {
            get: function () {
                if (!this._D) {
                    this._D = _createPropertyObject(Excel.HeaderFooter, this, "DefaultForAllPages", false, 4);
                }
                return this._D;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "evenPages", {
            get: function () {
                if (!this._E) {
                    this._E = _createPropertyObject(Excel.HeaderFooter, this, "EvenPages", false, 4);
                }
                return this._E;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "firstPage", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.HeaderFooter, this, "FirstPage", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "oddPages", {
            get: function () {
                if (!this._O) {
                    this._O = _createPropertyObject(Excel.HeaderFooter, this, "OddPages", false, 4);
                }
                return this._O;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "state", {
            get: function () {
                _throwIfNotLoaded("state", this._S, _typeHeaderFooterGroup, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "State", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "useSheetMargins", {
            get: function () {
                _throwIfNotLoaded("useSheetMargins", this._U, _typeHeaderFooterGroup, this._isNull);
                return this._U;
            },
            set: function (value) {
                this._U = value;
                _invokeSetProperty(this, "UseSheetMargins", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(HeaderFooterGroup.prototype, "useSheetScale", {
            get: function () {
                _throwIfNotLoaded("useSheetScale", this._Us, _typeHeaderFooterGroup, this._isNull);
                return this._Us;
            },
            set: function (value) {
                this._Us = value;
                _invokeSetProperty(this, "UseSheetScale", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        HeaderFooterGroup.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["state", "useSheetMargins", "useSheetScale"], ["defaultForAllPages", "firstPage", "evenPages", "oddPages"], []);
        };
        HeaderFooterGroup.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        HeaderFooterGroup.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["State"])) {
                this._S = obj["State"];
            }
            if (!_isUndefined(obj["UseSheetMargins"])) {
                this._U = obj["UseSheetMargins"];
            }
            if (!_isUndefined(obj["UseSheetScale"])) {
                this._Us = obj["UseSheetScale"];
            }
            _handleNavigationPropertyResults(this, obj, ["defaultForAllPages", "DefaultForAllPages", "evenPages", "EvenPages", "firstPage", "FirstPage", "oddPages", "OddPages"]);
        };
        HeaderFooterGroup.prototype.load = function (options) {
            return _load(this, options);
        };
        HeaderFooterGroup.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        HeaderFooterGroup.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        HeaderFooterGroup.prototype.toJSON = function () {
            return _toJson(this, {
                "state": this._S,
                "useSheetMargins": this._U,
                "useSheetScale": this._Us
            }, {
                "defaultForAllPages": this._D,
                "evenPages": this._E,
                "firstPage": this._F,
                "oddPages": this._O
            });
        };
        HeaderFooterGroup.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        HeaderFooterGroup.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return HeaderFooterGroup;
    }(OfficeExtension.ClientObject));
    Excel.HeaderFooterGroup = HeaderFooterGroup;
    var _typePageBreak = "PageBreak";
    var PageBreak = (function (_super) {
        __extends(PageBreak, _super);
        function PageBreak() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PageBreak.prototype, "_className", {
            get: function () {
                return "PageBreak";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageBreak.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["_Id", "columnIndex", "rowIndex"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageBreak.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["_Id", "ColumnIndex", "RowIndex"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageBreak.prototype, "columnIndex", {
            get: function () {
                _throwIfNotLoaded("columnIndex", this._C, _typePageBreak, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageBreak.prototype, "rowIndex", {
            get: function () {
                _throwIfNotLoaded("rowIndex", this._R, _typePageBreak, this._isNull);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageBreak.prototype, "_Id", {
            get: function () {
                _throwIfNotLoaded("_Id", this.__I, _typePageBreak, this._isNull);
                return this.__I;
            },
            enumerable: true,
            configurable: true
        });
        PageBreak.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        PageBreak.prototype.getCellAfterBreak = function () {
            return _createMethodObject(Excel.Range, this, "GetCellAfterBreak", 1, [], false, true, null, 4);
        };
        PageBreak.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["ColumnIndex"])) {
                this._C = obj["ColumnIndex"];
            }
            if (!_isUndefined(obj["RowIndex"])) {
                this._R = obj["RowIndex"];
            }
            if (!_isUndefined(obj["_Id"])) {
                this.__I = obj["_Id"];
            }
        };
        PageBreak.prototype.load = function (options) {
            return _load(this, options);
        };
        PageBreak.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PageBreak.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["_Id"])) {
                this.__I = value["_Id"];
            }
        };
        PageBreak.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        PageBreak.prototype.toJSON = function () {
            return _toJson(this, {
                "columnIndex": this._C,
                "rowIndex": this._R
            }, {});
        };
        PageBreak.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        PageBreak.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return PageBreak;
    }(OfficeExtension.ClientObject));
    Excel.PageBreak = PageBreak;
    var _typePageBreakCollection = "PageBreakCollection";
    var PageBreakCollection = (function (_super) {
        __extends(PageBreakCollection, _super);
        function PageBreakCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(PageBreakCollection.prototype, "_className", {
            get: function () {
                return "PageBreakCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageBreakCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(PageBreakCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typePageBreakCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        PageBreakCollection.prototype.add = function (pageBreakRange) {
            return _createMethodObject(Excel.PageBreak, this, "Add", 0, [pageBreakRange], false, true, null, 0);
        };
        PageBreakCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        PageBreakCollection.prototype.getItem = function (index) {
            return _createIndexerObject(Excel.PageBreak, this, [index]);
        };
        PageBreakCollection.prototype.removePageBreaks = function () {
            _invokeMethod(this, "RemovePageBreaks", 0, [], 0, 0);
        };
        PageBreakCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.PageBreak, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        PageBreakCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        PageBreakCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        PageBreakCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.PageBreak, true, _this, childItemData, index); });
        };
        PageBreakCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        PageBreakCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.PageBreak, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return PageBreakCollection;
    }(OfficeExtension.ClientObject));
    Excel.PageBreakCollection = PageBreakCollection;
    var _typeDataConnectionCollection = "DataConnectionCollection";
    var DataConnectionCollection = (function (_super) {
        __extends(DataConnectionCollection, _super);
        function DataConnectionCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(DataConnectionCollection.prototype, "_className", {
            get: function () {
                return "DataConnectionCollection";
            },
            enumerable: true,
            configurable: true
        });
        DataConnectionCollection.prototype.refreshAll = function () {
            _invokeMethod(this, "RefreshAll", 0, [], 0, 0);
        };
        DataConnectionCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        DataConnectionCollection.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        DataConnectionCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return DataConnectionCollection;
    }(OfficeExtension.ClientObject));
    Excel.DataConnectionCollection = DataConnectionCollection;
    var _typeRangeCollection = "RangeCollection";
    var RangeCollection = (function (_super) {
        __extends(RangeCollection, _super);
        function RangeCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeCollection.prototype, "_className", {
            get: function () {
                return "RangeCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeRangeCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        RangeCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        RangeCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.Range, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        RangeCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Range, false, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        RangeCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        RangeCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RangeCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Range, false, _this, childItemData, index); });
        };
        RangeCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        RangeCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Range, false, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return RangeCollection;
    }(OfficeExtension.ClientObject));
    Excel.RangeCollection = RangeCollection;
    var _typeRangeAreasCollection = "RangeAreasCollection";
    var RangeAreasCollection = (function (_super) {
        __extends(RangeAreasCollection, _super);
        function RangeAreasCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(RangeAreasCollection.prototype, "_className", {
            get: function () {
                return "RangeAreasCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreasCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(RangeAreasCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeRangeAreasCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        RangeAreasCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        RangeAreasCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.RangeAreas, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        RangeAreasCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.RangeAreas, false, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        RangeAreasCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        RangeAreasCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        RangeAreasCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.RangeAreas, false, _this, childItemData, index); });
        };
        RangeAreasCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        RangeAreasCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.RangeAreas, false, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return RangeAreasCollection;
    }(OfficeExtension.ClientObject));
    Excel.RangeAreasCollection = RangeAreasCollection;
    var _typeCommentCollection = "CommentCollection";
    var CommentCollection = (function (_super) {
        __extends(CommentCollection, _super);
        function CommentCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CommentCollection.prototype, "_className", {
            get: function () {
                return "CommentCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeCommentCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        CommentCollection.prototype.add = function (cellAddress, content, contentType) {
            return _createMethodObject(Excel.Comment, this, "Add", 0, [cellAddress, content, contentType], false, true, null, 0);
        };
        CommentCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        CommentCollection.prototype.getItem = function (commentId) {
            return _createIndexerObject(Excel.Comment, this, [commentId]);
        };
        CommentCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.Comment, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        CommentCollection.prototype.getItemByCell = function (cellAddress) {
            return _createMethodObject(Excel.Comment, this, "GetItemByCell", 1, [cellAddress], false, false, null, 4);
        };
        CommentCollection.prototype.getItemByReplyId = function (replyId) {
            return _createMethodObject(Excel.Comment, this, "GetItemByReplyId", 1, [replyId], false, false, null, 4);
        };
        CommentCollection.prototype.getItemOrNullObject = function (commentId) {
            _throwIfApiNotSupported("CommentCollection.getItemOrNullObject", _defaultApiSetName, "1.14", _hostName);
            return _createMethodObject(Excel.Comment, this, "GetItemOrNullObject", 1, [commentId], false, false, null, 4);
        };
        CommentCollection.prototype._RegisterAddedEvent = function () {
            _throwIfApiNotSupported("CommentCollection._RegisterAddedEvent", _defaultApiSetName, "1.12", _hostName);
            _invokeMethod(this, "_RegisterAddedEvent", 1, [], 0, 0);
        };
        CommentCollection.prototype._RegisterChangedEvent = function () {
            _throwIfApiNotSupported("CommentCollection._RegisterChangedEvent", _defaultApiSetName, "1.12", _hostName);
            _invokeMethod(this, "_RegisterChangedEvent", 1, [], 0, 0);
        };
        CommentCollection.prototype._RegisterDeletedEvent = function () {
            _throwIfApiNotSupported("CommentCollection._RegisterDeletedEvent", _defaultApiSetName, "1.12", _hostName);
            _invokeMethod(this, "_RegisterDeletedEvent", 1, [], 0, 0);
        };
        CommentCollection.prototype._UnregisterAddedEvent = function () {
            _throwIfApiNotSupported("CommentCollection._UnregisterAddedEvent", _defaultApiSetName, "1.12", _hostName);
            _invokeMethod(this, "_UnregisterAddedEvent", 1, [], 0, 0);
        };
        CommentCollection.prototype._UnregisterChangedEvent = function () {
            _throwIfApiNotSupported("CommentCollection._UnregisterChangedEvent", _defaultApiSetName, "1.12", _hostName);
            _invokeMethod(this, "_UnregisterChangedEvent", 1, [], 0, 0);
        };
        CommentCollection.prototype._UnregisterDeletedEvent = function () {
            _throwIfApiNotSupported("CommentCollection._UnregisterDeletedEvent", _defaultApiSetName, "1.12", _hostName);
            _invokeMethod(this, "_UnregisterDeletedEvent", 1, [], 0, 0);
        };
        CommentCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Comment, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        CommentCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        CommentCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CommentCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Comment, true, _this, childItemData, index); });
        };
        Object.defineProperty(CommentCollection.prototype, "onAdded", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("CommentCollection.onAdded", _defaultApiSetName, "1.12", _hostName);
                if (!this.m_added) {
                    this.m_added = new OfficeExtension.GenericEventHandlers(this.context, this, "Added", {
                        eventType: 250,
                        registerFunc: function () { return _this._RegisterAddedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterAddedEvent(); },
                        getTargetIdFunc: function () { return _this._eventTargetId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.commentAdded,
                                commentDetails: value.commentDetails,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_added;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentCollection.prototype, "onChanged", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("CommentCollection.onChanged", _defaultApiSetName, "1.12", _hostName);
                if (!this.m_changed) {
                    this.m_changed = new OfficeExtension.GenericEventHandlers(this.context, this, "Changed", {
                        eventType: 252,
                        registerFunc: function () { return _this._RegisterChangedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterChangedEvent(); },
                        getTargetIdFunc: function () { return _this._eventTargetId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.commentChanged,
                                changeType: value.changeType,
                                commentDetails: value.commentDetails,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_changed;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentCollection.prototype, "onDeleted", {
            get: function () {
                var _this = this;
                _throwIfApiNotSupported("CommentCollection.onDeleted", _defaultApiSetName, "1.12", _hostName);
                if (!this.m_deleted) {
                    this.m_deleted = new OfficeExtension.GenericEventHandlers(this.context, this, "Deleted", {
                        eventType: 251,
                        registerFunc: function () { return _this._RegisterDeletedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDeletedEvent(); },
                        getTargetIdFunc: function () { return _this._eventTargetId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.commentDeleted,
                                commentDetails: value.commentDetails,
                                source: value.source,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_deleted;
            },
            enumerable: true,
            configurable: true
        });
        CommentCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        CommentCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Comment, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return CommentCollection;
    }(OfficeExtension.ClientObject));
    Excel.CommentCollection = CommentCollection;
    var CommentCollectionCustom = (function () {
        function CommentCollectionCustom() {
        }
        Object.defineProperty(CommentCollectionCustom.prototype, "_ParentObject", {
            get: function () {
                return this.m__ParentObject;
            },
            set: function (value) {
                this.m__ParentObject = value;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentCollectionCustom.prototype, "_eventTargetId", {
            get: function () {
                return this._ParentObject ? this._ParentObject.id : OfficeExtension.Constants.eventWorkbookId;
            },
            enumerable: true,
            configurable: true
        });
        return CommentCollectionCustom;
    }());
    Excel.CommentCollectionCustom = CommentCollectionCustom;
    OfficeExtension.Utility.applyMixin(CommentCollection, CommentCollectionCustom);
    var _typeComment = "Comment";
    var Comment = (function (_super) {
        __extends(Comment, _super);
        function Comment() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Comment.prototype, "_className", {
            get: function () {
                return "Comment";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "content", "authorName", "authorEmail", "creationDate", "resolved", "richContent", "mentions", "contentType"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Content", "AuthorName", "AuthorEmail", "CreationDate", "Resolved", "RichContent", "Mentions", "ContentType"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, false, false, false, true, false, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["replies"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "replies", {
            get: function () {
                if (!this._R) {
                    this._R = _createPropertyObject(Excel.CommentReplyCollection, this, "Replies", true, 4);
                }
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "authorEmail", {
            get: function () {
                _throwIfNotLoaded("authorEmail", this._A, _typeComment, this._isNull);
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "authorName", {
            get: function () {
                _throwIfNotLoaded("authorName", this._Au, _typeComment, this._isNull);
                return this._Au;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "content", {
            get: function () {
                _throwIfNotLoaded("content", this._C, _typeComment, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Content", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "contentType", {
            get: function () {
                _throwIfNotLoaded("contentType", this._Co, _typeComment, this._isNull);
                _throwIfApiNotSupported("Comment.contentType", _defaultApiSetName, "1.12", _hostName);
                return this._Co;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "creationDate", {
            get: function () {
                _throwIfNotLoaded("creationDate", this._Cr, _typeComment, this._isNull);
                return this._Cr;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeComment, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "mentions", {
            get: function () {
                _throwIfNotLoaded("mentions", this._M, _typeComment, this._isNull);
                _throwIfApiNotSupported("Comment.mentions", _defaultApiSetName, "1.11", _hostName);
                return this._M;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "resolved", {
            get: function () {
                _throwIfNotLoaded("resolved", this._Re, _typeComment, this._isNull);
                _throwIfApiNotSupported("Comment.resolved", _defaultApiSetName, "1.11", _hostName);
                return this._Re;
            },
            set: function (value) {
                this._Re = value;
                _invokeSetProperty(this, "Resolved", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Comment.prototype, "richContent", {
            get: function () {
                _throwIfNotLoaded("richContent", this._Ri, _typeComment, this._isNull);
                _throwIfApiNotSupported("Comment.richContent", _defaultApiSetName, "1.11", _hostName);
                return this._Ri;
            },
            enumerable: true,
            configurable: true
        });
        Comment.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["content", "resolved"], [], [
                "replies"
            ]);
        };
        Comment.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Comment.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        Comment.prototype.getLocation = function () {
            return _createMethodObject(Excel.Range, this, "GetLocation", 1, [], false, true, null, 4);
        };
        Comment.prototype.updateMentions = function (contentWithMentions) {
            _throwIfApiNotSupported("Comment.updateMentions", _defaultApiSetName, "1.11", _hostName);
            _invokeMethod(this, "UpdateMentions", 0, [contentWithMentions], 0, 0);
        };
        Comment.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AuthorEmail"])) {
                this._A = obj["AuthorEmail"];
            }
            if (!_isUndefined(obj["AuthorName"])) {
                this._Au = obj["AuthorName"];
            }
            if (!_isUndefined(obj["Content"])) {
                this._C = obj["Content"];
            }
            if (!_isUndefined(obj["ContentType"])) {
                this._Co = obj["ContentType"];
            }
            if (!_isUndefined(obj["CreationDate"])) {
                this._Cr = _adjustToDateTime(obj["CreationDate"]);
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Mentions"])) {
                this._M = obj["Mentions"];
            }
            if (!_isUndefined(obj["Resolved"])) {
                this._Re = obj["Resolved"];
            }
            if (!_isUndefined(obj["RichContent"])) {
                this._Ri = obj["RichContent"];
            }
            _handleNavigationPropertyResults(this, obj, ["replies", "Replies"]);
        };
        Comment.prototype.load = function (options) {
            return _load(this, options);
        };
        Comment.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Comment.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Comment.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            if (!_isUndefined(obj["CreationDate"])) {
                obj["creationDate"] = _adjustToDateTime(obj["creationDate"]);
            }
            _processRetrieveResult(this, value, result);
        };
        Comment.prototype.toJSON = function () {
            return _toJson(this, {
                "authorEmail": this._A,
                "authorName": this._Au,
                "content": this._C,
                "contentType": this._Co,
                "creationDate": this._Cr,
                "id": this._I,
                "mentions": this._M,
                "resolved": this._Re,
                "richContent": this._Ri
            }, {
                "replies": this._R
            });
        };
        Comment.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Comment.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Comment;
    }(OfficeExtension.ClientObject));
    Excel.Comment = Comment;
    var _typeCommentReplyCollection = "CommentReplyCollection";
    var CommentReplyCollection = (function (_super) {
        __extends(CommentReplyCollection, _super);
        function CommentReplyCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CommentReplyCollection.prototype, "_className", {
            get: function () {
                return "CommentReplyCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReplyCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReplyCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeCommentReplyCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        CommentReplyCollection.prototype.add = function (content, contentType) {
            return _createMethodObject(Excel.CommentReply, this, "Add", 0, [content, contentType], false, true, null, 0);
        };
        CommentReplyCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        CommentReplyCollection.prototype.getItem = function (commentReplyId) {
            return _createIndexerObject(Excel.CommentReply, this, [commentReplyId]);
        };
        CommentReplyCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.CommentReply, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        CommentReplyCollection.prototype.getItemOrNullObject = function (commentReplyId) {
            _throwIfApiNotSupported("CommentReplyCollection.getItemOrNullObject", _defaultApiSetName, "1.14", _hostName);
            return _createMethodObject(Excel.CommentReply, this, "GetItemOrNullObject", 1, [commentReplyId], false, false, null, 4);
        };
        CommentReplyCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.CommentReply, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        CommentReplyCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        CommentReplyCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CommentReplyCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.CommentReply, true, _this, childItemData, index); });
        };
        CommentReplyCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        CommentReplyCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.CommentReply, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return CommentReplyCollection;
    }(OfficeExtension.ClientObject));
    Excel.CommentReplyCollection = CommentReplyCollection;
    var _typeCommentReply = "CommentReply";
    var CommentReply = (function (_super) {
        __extends(CommentReply, _super);
        function CommentReply() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(CommentReply.prototype, "_className", {
            get: function () {
                return "CommentReply";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "content", "authorName", "authorEmail", "creationDate", "resolved", "richContent", "mentions", "contentType"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Content", "AuthorName", "AuthorEmail", "CreationDate", "Resolved", "RichContent", "Mentions", "ContentType"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, false, false, false, false, false, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "authorEmail", {
            get: function () {
                _throwIfNotLoaded("authorEmail", this._A, _typeCommentReply, this._isNull);
                return this._A;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "authorName", {
            get: function () {
                _throwIfNotLoaded("authorName", this._Au, _typeCommentReply, this._isNull);
                return this._Au;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "content", {
            get: function () {
                _throwIfNotLoaded("content", this._C, _typeCommentReply, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Content", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "contentType", {
            get: function () {
                _throwIfNotLoaded("contentType", this._Co, _typeCommentReply, this._isNull);
                _throwIfApiNotSupported("CommentReply.contentType", _defaultApiSetName, "1.12", _hostName);
                return this._Co;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "creationDate", {
            get: function () {
                _throwIfNotLoaded("creationDate", this._Cr, _typeCommentReply, this._isNull);
                return this._Cr;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeCommentReply, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "mentions", {
            get: function () {
                _throwIfNotLoaded("mentions", this._M, _typeCommentReply, this._isNull);
                _throwIfApiNotSupported("CommentReply.mentions", _defaultApiSetName, "1.11", _hostName);
                return this._M;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "resolved", {
            get: function () {
                _throwIfNotLoaded("resolved", this._R, _typeCommentReply, this._isNull);
                _throwIfApiNotSupported("CommentReply.resolved", _defaultApiSetName, "1.11", _hostName);
                return this._R;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(CommentReply.prototype, "richContent", {
            get: function () {
                _throwIfNotLoaded("richContent", this._Ri, _typeCommentReply, this._isNull);
                _throwIfApiNotSupported("CommentReply.richContent", _defaultApiSetName, "1.11", _hostName);
                return this._Ri;
            },
            enumerable: true,
            configurable: true
        });
        CommentReply.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["content"], [], []);
        };
        CommentReply.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        CommentReply.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        CommentReply.prototype.getLocation = function () {
            return _createMethodObject(Excel.Range, this, "GetLocation", 1, [], false, true, null, 4);
        };
        CommentReply.prototype.getParentComment = function () {
            return _createMethodObject(Excel.Comment, this, "GetParentComment", 0, [], false, false, null, 0);
        };
        CommentReply.prototype.updateMentions = function (contentWithMentions) {
            _throwIfApiNotSupported("CommentReply.updateMentions", _defaultApiSetName, "1.11", _hostName);
            _invokeMethod(this, "UpdateMentions", 0, [contentWithMentions], 0, 0);
        };
        CommentReply.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AuthorEmail"])) {
                this._A = obj["AuthorEmail"];
            }
            if (!_isUndefined(obj["AuthorName"])) {
                this._Au = obj["AuthorName"];
            }
            if (!_isUndefined(obj["Content"])) {
                this._C = obj["Content"];
            }
            if (!_isUndefined(obj["ContentType"])) {
                this._Co = obj["ContentType"];
            }
            if (!_isUndefined(obj["CreationDate"])) {
                this._Cr = _adjustToDateTime(obj["CreationDate"]);
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Mentions"])) {
                this._M = obj["Mentions"];
            }
            if (!_isUndefined(obj["Resolved"])) {
                this._R = obj["Resolved"];
            }
            if (!_isUndefined(obj["RichContent"])) {
                this._Ri = obj["RichContent"];
            }
        };
        CommentReply.prototype.load = function (options) {
            return _load(this, options);
        };
        CommentReply.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        CommentReply.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        CommentReply.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            if (!_isUndefined(obj["CreationDate"])) {
                obj["creationDate"] = _adjustToDateTime(obj["creationDate"]);
            }
            _processRetrieveResult(this, value, result);
        };
        CommentReply.prototype.toJSON = function () {
            return _toJson(this, {
                "authorEmail": this._A,
                "authorName": this._Au,
                "content": this._C,
                "contentType": this._Co,
                "creationDate": this._Cr,
                "id": this._I,
                "mentions": this._M,
                "resolved": this._R,
                "richContent": this._Ri
            }, {});
        };
        CommentReply.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        CommentReply.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return CommentReply;
    }(OfficeExtension.ClientObject));
    Excel.CommentReply = CommentReply;
    var _typeShapeCollection = "ShapeCollection";
    var ShapeCollection = (function (_super) {
        __extends(ShapeCollection, _super);
        function ShapeCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ShapeCollection.prototype, "_className", {
            get: function () {
                return "ShapeCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeShapeCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        ShapeCollection.prototype.addGeometricShape = function (geometricShapeType) {
            return _createMethodObject(Excel.Shape, this, "AddGeometricShape", 0, [geometricShapeType], false, false, null, 0);
        };
        ShapeCollection.prototype.addGroup = function (values) {
            return _createMethodObject(Excel.Shape, this, "AddGroup", 0, [values], false, false, null, 0);
        };
        ShapeCollection.prototype.addImage = function (base64ImageString) {
            return _createMethodObject(Excel.Shape, this, "AddImage", 0, [base64ImageString], false, false, null, 0);
        };
        ShapeCollection.prototype.addLine = function (startLeft, startTop, endLeft, endTop, connectorType) {
            return _createMethodObject(Excel.Shape, this, "AddLine", 0, [startLeft, startTop, endLeft, endTop, connectorType], false, false, null, 0);
        };
        ShapeCollection.prototype.addTextBox = function (text) {
            return _createMethodObject(Excel.Shape, this, "AddTextBox", 0, [text], false, false, null, 0);
        };
        ShapeCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        ShapeCollection.prototype.getItem = function (key) {
            return _createMethodObject(Excel.Shape, this, "GetItem", 1, [key], false, false, null, 4);
        };
        ShapeCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.Shape, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        ShapeCollection.prototype.getItemOrNullObject = function (key) {
            _throwIfApiNotSupported("ShapeCollection.getItemOrNullObject", _defaultApiSetName, "1.14", _hostName);
            return _createMethodObject(Excel.Shape, this, "GetItemOrNullObject", 1, [key], false, false, null, 4);
        };
        ShapeCollection.prototype._GetItem = function (shapeId) {
            return _createIndexerObject(Excel.Shape, this, [shapeId]);
        };
        ShapeCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Shape, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        ShapeCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        ShapeCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ShapeCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Shape, true, _this, childItemData, index); });
        };
        ShapeCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        ShapeCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Shape, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return ShapeCollection;
    }(OfficeExtension.ClientObject));
    Excel.ShapeCollection = ShapeCollection;
    var _typeShape = "Shape";
    var Shape = (function (_super) {
        __extends(Shape, _super);
        function Shape() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Shape.prototype, "_className", {
            get: function () {
                return "Shape";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "name", "left", "top", "width", "height", "rotation", "zOrderPosition", "altTextTitle", "altTextDescription", "type", "lockAspectRatio", "placement", "geometricShapeType", "visible", "level", "connectionSiteCount"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Name", "Left", "Top", "Width", "Height", "Rotation", "ZOrderPosition", "AltTextTitle", "AltTextDescription", "Type", "LockAspectRatio", "Placement", "GeometricShapeType", "Visible", "Level", "ConnectionSiteCount"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true, true, true, true, false, true, true, false, true, true, true, true, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["geometricShape", "image", "textFrame", "fill", "group", "parentGroup", "line", "lineFormat"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "fill", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ShapeFill, this, "Fill", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "geometricShape", {
            get: function () {
                if (!this._G) {
                    this._G = _createPropertyObject(Excel.GeometricShape, this, "GeometricShape", false, 4);
                }
                return this._G;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "group", {
            get: function () {
                if (!this._Gr) {
                    this._Gr = _createPropertyObject(Excel.ShapeGroup, this, "Group", false, 4);
                }
                return this._Gr;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "image", {
            get: function () {
                if (!this._Im) {
                    this._Im = _createPropertyObject(Excel.Image, this, "Image", false, 4);
                }
                return this._Im;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "line", {
            get: function () {
                if (!this._Li) {
                    this._Li = _createPropertyObject(Excel.Line, this, "Line", false, 4);
                }
                return this._Li;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "lineFormat", {
            get: function () {
                if (!this._Lin) {
                    this._Lin = _createPropertyObject(Excel.ShapeLineFormat, this, "LineFormat", false, 4);
                }
                return this._Lin;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "parentGroup", {
            get: function () {
                if (!this._P) {
                    this._P = _createPropertyObject(Excel.Shape, this, "ParentGroup", false, 4);
                }
                return this._P;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "textFrame", {
            get: function () {
                if (!this._T) {
                    this._T = _createPropertyObject(Excel.TextFrame, this, "TextFrame", false, 4);
                }
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "altTextDescription", {
            get: function () {
                _throwIfNotLoaded("altTextDescription", this._A, _typeShape, this._isNull);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AltTextDescription", value, _calculateApiFlags(2, "ExcelApiUndo", "1.5"));
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "altTextTitle", {
            get: function () {
                _throwIfNotLoaded("altTextTitle", this._Al, _typeShape, this._isNull);
                return this._Al;
            },
            set: function (value) {
                this._Al = value;
                _invokeSetProperty(this, "AltTextTitle", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "connectionSiteCount", {
            get: function () {
                _throwIfNotLoaded("connectionSiteCount", this._C, _typeShape, this._isNull);
                return this._C;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "geometricShapeType", {
            get: function () {
                _throwIfNotLoaded("geometricShapeType", this._Ge, _typeShape, this._isNull);
                return this._Ge;
            },
            set: function (value) {
                this._Ge = value;
                _invokeSetProperty(this, "GeometricShapeType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._H, _typeShape, this._isNull);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "Height", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeShape, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeShape, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "Left", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "level", {
            get: function () {
                _throwIfNotLoaded("level", this._Le, _typeShape, this._isNull);
                return this._Le;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "lockAspectRatio", {
            get: function () {
                _throwIfNotLoaded("lockAspectRatio", this._Lo, _typeShape, this._isNull);
                return this._Lo;
            },
            set: function (value) {
                this._Lo = value;
                _invokeSetProperty(this, "LockAspectRatio", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeShape, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "placement", {
            get: function () {
                _throwIfNotLoaded("placement", this._Pl, _typeShape, this._isNull);
                _throwIfApiNotSupported("Shape.placement", _defaultApiSetName, "1.10", _hostName);
                return this._Pl;
            },
            set: function (value) {
                this._Pl = value;
                _invokeSetProperty(this, "Placement", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "rotation", {
            get: function () {
                _throwIfNotLoaded("rotation", this._R, _typeShape, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "Rotation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._To, _typeShape, this._isNull);
                return this._To;
            },
            set: function (value) {
                this._To = value;
                _invokeSetProperty(this, "Top", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._Ty, _typeShape, this._isNull);
                return this._Ty;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._V, _typeShape, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Visible", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeShape, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "Width", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "zOrderPosition", {
            get: function () {
                _throwIfNotLoaded("zOrderPosition", this._Z, _typeShape, this._isNull);
                return this._Z;
            },
            enumerable: true,
            configurable: true
        });
        Shape.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "left", "top", "width", "height", "rotation", "altTextTitle", "altTextDescription", "lockAspectRatio", "placement", "geometricShapeType", "visible"], ["fill", "lineFormat"], [
                "geometricShape",
                "group",
                "image",
                "line",
                "parentGroup",
                "textFrame"
            ]);
        };
        Shape.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Shape.prototype.copyTo = function (destinationSheet) {
            _throwIfApiNotSupported("Shape.copyTo", _defaultApiSetName, "1.10", _hostName);
            return _createMethodObject(Excel.Shape, this, "CopyTo", 0, [destinationSheet], false, true, "_GetShapeById", 0);
        };
        Shape.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        Shape.prototype.getAsImage = function (format) {
            return _invokeMethod(this, "GetAsImage", 0, [format], 0, 0);
        };
        Shape.prototype.incrementLeft = function (increment) {
            _invokeMethod(this, "IncrementLeft", 0, [increment], 0, 0);
        };
        Shape.prototype.incrementRotation = function (increment) {
            _invokeMethod(this, "IncrementRotation", 0, [increment], 0, 0);
        };
        Shape.prototype.incrementTop = function (increment) {
            _invokeMethod(this, "IncrementTop", 0, [increment], 0, 0);
        };
        Shape.prototype.scaleHeight = function (scaleFactor, scaleType, scaleFrom) {
            _invokeMethod(this, "ScaleHeight", 0, [scaleFactor, scaleType, scaleFrom], 0, 0);
        };
        Shape.prototype.scaleWidth = function (scaleFactor, scaleType, scaleFrom) {
            _invokeMethod(this, "ScaleWidth", 0, [scaleFactor, scaleType, scaleFrom], 0, 0);
        };
        Shape.prototype.setZOrder = function (position) {
            _invokeMethod(this, "SetZOrder", 0, [position], 0, 0);
        };
        Shape.prototype._GetShapeById = function (bstrReferenceId) {
            _throwIfApiNotSupported("Shape._GetShapeById", _defaultApiSetName, "1.10", _hostName);
            return _createMethodObject(Excel.Shape, this, "_GetShapeById", 1, [bstrReferenceId], false, false, null, 4);
        };
        Shape.prototype._RegisterActivatedEvent = function () {
            _invokeMethod(this, "_RegisterActivatedEvent", 0, [], 0, 0);
        };
        Shape.prototype._RegisterDeactivatedEvent = function () {
            _invokeMethod(this, "_RegisterDeactivatedEvent", 0, [], 0, 0);
        };
        Shape.prototype._UnregisterActivatedEvent = function () {
            _invokeMethod(this, "_UnregisterActivatedEvent", 0, [], 0, 0);
        };
        Shape.prototype._UnregisterDeactivatedEvent = function () {
            _invokeMethod(this, "_UnregisterDeactivatedEvent", 0, [], 0, 0);
        };
        Shape.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AltTextDescription"])) {
                this._A = obj["AltTextDescription"];
            }
            if (!_isUndefined(obj["AltTextTitle"])) {
                this._Al = obj["AltTextTitle"];
            }
            if (!_isUndefined(obj["ConnectionSiteCount"])) {
                this._C = obj["ConnectionSiteCount"];
            }
            if (!_isUndefined(obj["GeometricShapeType"])) {
                this._Ge = obj["GeometricShapeType"];
            }
            if (!_isUndefined(obj["Height"])) {
                this._H = obj["Height"];
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["Level"])) {
                this._Le = obj["Level"];
            }
            if (!_isUndefined(obj["LockAspectRatio"])) {
                this._Lo = obj["LockAspectRatio"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Placement"])) {
                this._Pl = obj["Placement"];
            }
            if (!_isUndefined(obj["Rotation"])) {
                this._R = obj["Rotation"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._To = obj["Top"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._Ty = obj["Type"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._V = obj["Visible"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
            if (!_isUndefined(obj["ZOrderPosition"])) {
                this._Z = obj["ZOrderPosition"];
            }
            _handleNavigationPropertyResults(this, obj, ["fill", "Fill", "geometricShape", "GeometricShape", "group", "Group", "image", "Image", "line", "Line", "lineFormat", "LineFormat", "parentGroup", "ParentGroup", "textFrame", "TextFrame"]);
        };
        Shape.prototype.load = function (options) {
            return _load(this, options);
        };
        Shape.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Shape.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Shape.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(Shape.prototype, "onActivated", {
            get: function () {
                var _this = this;
                if (!this.m_activated) {
                    this.m_activated = new OfficeExtension.GenericEventHandlers(this.context, this, "Activated", {
                        eventType: 2101,
                        registerFunc: function () { return _this._RegisterActivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterActivatedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.shapeActivated,
                                shapeId: value.shapeId,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_activated;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Shape.prototype, "onDeactivated", {
            get: function () {
                var _this = this;
                if (!this.m_deactivated) {
                    this.m_deactivated = new OfficeExtension.GenericEventHandlers(this.context, this, "Deactivated", {
                        eventType: 2102,
                        registerFunc: function () { return _this._RegisterDeactivatedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterDeactivatedEvent(); },
                        getTargetIdFunc: function () { return _this.id; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.shapeDeactivated,
                                shapeId: value.shapeId,
                                worksheetId: value.worksheetId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_deactivated;
            },
            enumerable: true,
            configurable: true
        });
        Shape.prototype.toJSON = function () {
            return _toJson(this, {
                "altTextDescription": this._A,
                "altTextTitle": this._Al,
                "connectionSiteCount": this._C,
                "geometricShapeType": this._Ge,
                "height": this._H,
                "id": this._I,
                "left": this._L,
                "level": this._Le,
                "lockAspectRatio": this._Lo,
                "name": this._N,
                "placement": this._Pl,
                "rotation": this._R,
                "top": this._To,
                "type": this._Ty,
                "visible": this._V,
                "width": this._W,
                "zOrderPosition": this._Z
            }, {
                "fill": this._F,
                "lineFormat": this._Lin
            });
        };
        Shape.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Shape.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Shape;
    }(OfficeExtension.ClientObject));
    Excel.Shape = Shape;
    var _typeGeometricShape = "GeometricShape";
    var GeometricShape = (function (_super) {
        __extends(GeometricShape, _super);
        function GeometricShape() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(GeometricShape.prototype, "_className", {
            get: function () {
                return "GeometricShape";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(GeometricShape.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(GeometricShape.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(GeometricShape.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["shape"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(GeometricShape.prototype, "shape", {
            get: function () {
                if (!this._S) {
                    this._S = _createPropertyObject(Excel.Shape, this, "Shape", false, 4);
                }
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(GeometricShape.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeGeometricShape, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        GeometricShape.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            _handleNavigationPropertyResults(this, obj, ["shape", "Shape"]);
        };
        GeometricShape.prototype.load = function (options) {
            return _load(this, options);
        };
        GeometricShape.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        GeometricShape.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        GeometricShape.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        GeometricShape.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I
            }, {});
        };
        GeometricShape.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        GeometricShape.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return GeometricShape;
    }(OfficeExtension.ClientObject));
    Excel.GeometricShape = GeometricShape;
    var _typeImage = "Image";
    var Image = (function (_super) {
        __extends(Image, _super);
        function Image() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Image.prototype, "_className", {
            get: function () {
                return "Image";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Image.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Image.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "format"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Image.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["shape"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Image.prototype, "shape", {
            get: function () {
                if (!this._S) {
                    this._S = _createPropertyObject(Excel.Shape, this, "Shape", false, 4);
                }
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Image.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeImage, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Image.prototype, "format", {
            get: function () {
                _throwIfNotLoaded("format", this._f, _typeImage, this._isNull);
                return this._f;
            },
            enumerable: true,
            configurable: true
        });
        Image.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["format"])) {
                this._f = obj["format"];
            }
            _handleNavigationPropertyResults(this, obj, ["shape", "Shape"]);
        };
        Image.prototype.load = function (options) {
            return _load(this, options);
        };
        Image.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Image.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Image.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Image.prototype.toJSON = function () {
            return _toJson(this, {
                "format": this._f,
                "id": this._I
            }, {});
        };
        Image.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Image.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Image;
    }(OfficeExtension.ClientObject));
    Excel.Image = Image;
    var _typeShapeGroup = "ShapeGroup";
    var ShapeGroup = (function (_super) {
        __extends(ShapeGroup, _super);
        function ShapeGroup() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ShapeGroup.prototype, "_className", {
            get: function () {
                return "ShapeGroup";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeGroup.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeGroup.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeGroup.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["shapes", "shape"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeGroup.prototype, "shape", {
            get: function () {
                if (!this._S) {
                    this._S = _createPropertyObject(Excel.Shape, this, "Shape", false, 4);
                }
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeGroup.prototype, "shapes", {
            get: function () {
                if (!this._Sh) {
                    this._Sh = _createPropertyObject(Excel.GroupShapeCollection, this, "Shapes", true, 4);
                }
                return this._Sh;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeGroup.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeShapeGroup, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        ShapeGroup.prototype.ungroup = function () {
            _invokeMethod(this, "Ungroup", 0, [], 0, 0);
        };
        ShapeGroup.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            _handleNavigationPropertyResults(this, obj, ["shape", "Shape", "shapes", "Shapes"]);
        };
        ShapeGroup.prototype.load = function (options) {
            return _load(this, options);
        };
        ShapeGroup.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ShapeGroup.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        ShapeGroup.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ShapeGroup.prototype.toJSON = function () {
            return _toJson(this, {
                "id": this._I
            }, {
                "shapes": this._Sh
            });
        };
        ShapeGroup.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ShapeGroup.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ShapeGroup;
    }(OfficeExtension.ClientObject));
    Excel.ShapeGroup = ShapeGroup;
    var _typeGroupShapeCollection = "GroupShapeCollection";
    var GroupShapeCollection = (function (_super) {
        __extends(GroupShapeCollection, _super);
        function GroupShapeCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(GroupShapeCollection.prototype, "_className", {
            get: function () {
                return "GroupShapeCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(GroupShapeCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(GroupShapeCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeGroupShapeCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        GroupShapeCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        GroupShapeCollection.prototype.getItem = function (key) {
            return _createMethodObject(Excel.Shape, this, "GetItem", 1, [key], false, false, null, 4);
        };
        GroupShapeCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.Shape, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        GroupShapeCollection.prototype.getItemOrNullObject = function (key) {
            _throwIfApiNotSupported("GroupShapeCollection.getItemOrNullObject", _defaultApiSetName, "1.14", _hostName);
            return _createMethodObject(Excel.Shape, this, "GetItemOrNullObject", 1, [key], false, false, null, 4);
        };
        GroupShapeCollection.prototype._GetItem = function (shapeId) {
            return _createIndexerObject(Excel.Shape, this, [shapeId]);
        };
        GroupShapeCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Shape, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        GroupShapeCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        GroupShapeCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        GroupShapeCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Shape, true, _this, childItemData, index); });
        };
        GroupShapeCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        GroupShapeCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Shape, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return GroupShapeCollection;
    }(OfficeExtension.ClientObject));
    Excel.GroupShapeCollection = GroupShapeCollection;
    var _typeLine = "Line";
    var Line = (function (_super) {
        __extends(Line, _super);
        function Line() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Line.prototype, "_className", {
            get: function () {
                return "Line";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "connectorType", "beginArrowheadLength", "beginArrowheadStyle", "beginArrowheadWidth", "endArrowheadLength", "endArrowheadStyle", "endArrowheadWidth", "isBeginConnected", "beginConnectedSite", "isEndConnected", "endConnectedSite"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "connectorType", "BeginArrowheadLength", "BeginArrowheadStyle", "BeginArrowheadWidth", "EndArrowheadLength", "EndArrowheadStyle", "EndArrowheadWidth", "IsBeginConnected", "BeginConnectedSite", "IsEndConnected", "EndConnectedSite"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true, true, true, true, true, false, false, false, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["shape", "beginConnectedShape", "endConnectedShape"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "beginConnectedShape", {
            get: function () {
                if (!this._Begi) {
                    this._Begi = _createPropertyObject(Excel.Shape, this, "BeginConnectedShape", false, 4);
                }
                return this._Begi;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "endConnectedShape", {
            get: function () {
                if (!this._EndC) {
                    this._EndC = _createPropertyObject(Excel.Shape, this, "EndConnectedShape", false, 4);
                }
                return this._EndC;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "shape", {
            get: function () {
                if (!this._S) {
                    this._S = _createPropertyObject(Excel.Shape, this, "Shape", false, 4);
                }
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "beginArrowheadLength", {
            get: function () {
                _throwIfNotLoaded("beginArrowheadLength", this._B, _typeLine, this._isNull);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "BeginArrowheadLength", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "beginArrowheadStyle", {
            get: function () {
                _throwIfNotLoaded("beginArrowheadStyle", this._Be, _typeLine, this._isNull);
                return this._Be;
            },
            set: function (value) {
                this._Be = value;
                _invokeSetProperty(this, "BeginArrowheadStyle", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "beginArrowheadWidth", {
            get: function () {
                _throwIfNotLoaded("beginArrowheadWidth", this._Beg, _typeLine, this._isNull);
                return this._Beg;
            },
            set: function (value) {
                this._Beg = value;
                _invokeSetProperty(this, "BeginArrowheadWidth", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "beginConnectedSite", {
            get: function () {
                _throwIfNotLoaded("beginConnectedSite", this._Begin, _typeLine, this._isNull);
                return this._Begin;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "endArrowheadLength", {
            get: function () {
                _throwIfNotLoaded("endArrowheadLength", this._E, _typeLine, this._isNull);
                return this._E;
            },
            set: function (value) {
                this._E = value;
                _invokeSetProperty(this, "EndArrowheadLength", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "endArrowheadStyle", {
            get: function () {
                _throwIfNotLoaded("endArrowheadStyle", this._En, _typeLine, this._isNull);
                return this._En;
            },
            set: function (value) {
                this._En = value;
                _invokeSetProperty(this, "EndArrowheadStyle", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "endArrowheadWidth", {
            get: function () {
                _throwIfNotLoaded("endArrowheadWidth", this._End, _typeLine, this._isNull);
                return this._End;
            },
            set: function (value) {
                this._End = value;
                _invokeSetProperty(this, "EndArrowheadWidth", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "endConnectedSite", {
            get: function () {
                _throwIfNotLoaded("endConnectedSite", this._EndCo, _typeLine, this._isNull);
                return this._EndCo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeLine, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "isBeginConnected", {
            get: function () {
                _throwIfNotLoaded("isBeginConnected", this._Is, _typeLine, this._isNull);
                return this._Is;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "isEndConnected", {
            get: function () {
                _throwIfNotLoaded("isEndConnected", this._IsE, _typeLine, this._isNull);
                return this._IsE;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Line.prototype, "connectorType", {
            get: function () {
                _throwIfNotLoaded("connectorType", this._c, _typeLine, this._isNull);
                return this._c;
            },
            set: function (value) {
                this._c = value;
                _invokeSetProperty(this, "connectorType", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Line.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["connectorType", "beginArrowheadLength", "beginArrowheadStyle", "beginArrowheadWidth", "endArrowheadLength", "endArrowheadStyle", "endArrowheadWidth"], [], [
                "beginConnectedShape",
                "endConnectedShape",
                "shape"
            ]);
        };
        Line.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Line.prototype.connectBeginShape = function (shape, connectionSite) {
            _invokeMethod(this, "ConnectBeginShape", 0, [shape, connectionSite], 0, 0);
        };
        Line.prototype.connectEndShape = function (shape, connectionSite) {
            _invokeMethod(this, "ConnectEndShape", 0, [shape, connectionSite], 0, 0);
        };
        Line.prototype.disconnectBeginShape = function () {
            _invokeMethod(this, "DisconnectBeginShape", 0, [], 0, 0);
        };
        Line.prototype.disconnectEndShape = function () {
            _invokeMethod(this, "DisconnectEndShape", 0, [], 0, 0);
        };
        Line.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["BeginArrowheadLength"])) {
                this._B = obj["BeginArrowheadLength"];
            }
            if (!_isUndefined(obj["BeginArrowheadStyle"])) {
                this._Be = obj["BeginArrowheadStyle"];
            }
            if (!_isUndefined(obj["BeginArrowheadWidth"])) {
                this._Beg = obj["BeginArrowheadWidth"];
            }
            if (!_isUndefined(obj["BeginConnectedSite"])) {
                this._Begin = obj["BeginConnectedSite"];
            }
            if (!_isUndefined(obj["EndArrowheadLength"])) {
                this._E = obj["EndArrowheadLength"];
            }
            if (!_isUndefined(obj["EndArrowheadStyle"])) {
                this._En = obj["EndArrowheadStyle"];
            }
            if (!_isUndefined(obj["EndArrowheadWidth"])) {
                this._End = obj["EndArrowheadWidth"];
            }
            if (!_isUndefined(obj["EndConnectedSite"])) {
                this._EndCo = obj["EndConnectedSite"];
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["IsBeginConnected"])) {
                this._Is = obj["IsBeginConnected"];
            }
            if (!_isUndefined(obj["IsEndConnected"])) {
                this._IsE = obj["IsEndConnected"];
            }
            if (!_isUndefined(obj["connectorType"])) {
                this._c = obj["connectorType"];
            }
            _handleNavigationPropertyResults(this, obj, ["beginConnectedShape", "BeginConnectedShape", "endConnectedShape", "EndConnectedShape", "shape", "Shape"]);
        };
        Line.prototype.load = function (options) {
            return _load(this, options);
        };
        Line.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Line.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Line.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Line.prototype.toJSON = function () {
            return _toJson(this, {
                "beginArrowheadLength": this._B,
                "beginArrowheadStyle": this._Be,
                "beginArrowheadWidth": this._Beg,
                "beginConnectedSite": this._Begin,
                "connectorType": this._c,
                "endArrowheadLength": this._E,
                "endArrowheadStyle": this._En,
                "endArrowheadWidth": this._End,
                "endConnectedSite": this._EndCo,
                "id": this._I,
                "isBeginConnected": this._Is,
                "isEndConnected": this._IsE
            }, {});
        };
        Line.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Line.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Line;
    }(OfficeExtension.ClientObject));
    Excel.Line = Line;
    var _typeShapeFill = "ShapeFill";
    var ShapeFill = (function (_super) {
        __extends(ShapeFill, _super);
        function ShapeFill() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ShapeFill.prototype, "_className", {
            get: function () {
                return "ShapeFill";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFill.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["foregroundColor", "type", "transparency"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFill.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["ForegroundColor", "Type", "Transparency"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFill.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, false, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFill.prototype, "foregroundColor", {
            get: function () {
                _throwIfNotLoaded("foregroundColor", this._F, _typeShapeFill, this._isNull);
                return this._F;
            },
            set: function (value) {
                this._F = value;
                _invokeSetProperty(this, "ForegroundColor", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFill.prototype, "transparency", {
            get: function () {
                _throwIfNotLoaded("transparency", this._T, _typeShapeFill, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Transparency", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFill.prototype, "type", {
            get: function () {
                _throwIfNotLoaded("type", this._Ty, _typeShapeFill, this._isNull);
                return this._Ty;
            },
            enumerable: true,
            configurable: true
        });
        ShapeFill.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["foregroundColor", "transparency"], [], []);
        };
        ShapeFill.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ShapeFill.prototype.clear = function () {
            _invokeMethod(this, "Clear", 0, [], 0, 0);
        };
        ShapeFill.prototype.setSolidColor = function (color) {
            _invokeMethod(this, "SetSolidColor", 0, [color], 0, 0);
        };
        ShapeFill.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["ForegroundColor"])) {
                this._F = obj["ForegroundColor"];
            }
            if (!_isUndefined(obj["Transparency"])) {
                this._T = obj["Transparency"];
            }
            if (!_isUndefined(obj["Type"])) {
                this._Ty = obj["Type"];
            }
        };
        ShapeFill.prototype.load = function (options) {
            return _load(this, options);
        };
        ShapeFill.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ShapeFill.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ShapeFill.prototype.toJSON = function () {
            return _toJson(this, {
                "foregroundColor": this._F,
                "transparency": this._T,
                "type": this._Ty
            }, {});
        };
        ShapeFill.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ShapeFill.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ShapeFill;
    }(OfficeExtension.ClientObject));
    Excel.ShapeFill = ShapeFill;
    var _typeShapeLineFormat = "ShapeLineFormat";
    var ShapeLineFormat = (function (_super) {
        __extends(ShapeLineFormat, _super);
        function ShapeLineFormat() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ShapeLineFormat.prototype, "_className", {
            get: function () {
                return "ShapeLineFormat";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeLineFormat.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["visible", "color", "style", "weight", "dashStyle", "transparency"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeLineFormat.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Visible", "Color", "Style", "Weight", "DashStyle", "Transparency"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeLineFormat.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeLineFormat.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeShapeLineFormat, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeLineFormat.prototype, "dashStyle", {
            get: function () {
                _throwIfNotLoaded("dashStyle", this._D, _typeShapeLineFormat, this._isNull);
                return this._D;
            },
            set: function (value) {
                this._D = value;
                _invokeSetProperty(this, "DashStyle", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeLineFormat.prototype, "style", {
            get: function () {
                _throwIfNotLoaded("style", this._S, _typeShapeLineFormat, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Style", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeLineFormat.prototype, "transparency", {
            get: function () {
                _throwIfNotLoaded("transparency", this._T, _typeShapeLineFormat, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Transparency", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeLineFormat.prototype, "visible", {
            get: function () {
                _throwIfNotLoaded("visible", this._V, _typeShapeLineFormat, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "Visible", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeLineFormat.prototype, "weight", {
            get: function () {
                _throwIfNotLoaded("weight", this._W, _typeShapeLineFormat, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "Weight", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ShapeLineFormat.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["visible", "color", "style", "weight", "dashStyle", "transparency"], [], []);
        };
        ShapeLineFormat.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ShapeLineFormat.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
            if (!_isUndefined(obj["DashStyle"])) {
                this._D = obj["DashStyle"];
            }
            if (!_isUndefined(obj["Style"])) {
                this._S = obj["Style"];
            }
            if (!_isUndefined(obj["Transparency"])) {
                this._T = obj["Transparency"];
            }
            if (!_isUndefined(obj["Visible"])) {
                this._V = obj["Visible"];
            }
            if (!_isUndefined(obj["Weight"])) {
                this._W = obj["Weight"];
            }
        };
        ShapeLineFormat.prototype.load = function (options) {
            return _load(this, options);
        };
        ShapeLineFormat.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ShapeLineFormat.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ShapeLineFormat.prototype.toJSON = function () {
            return _toJson(this, {
                "color": this._C,
                "dashStyle": this._D,
                "style": this._S,
                "transparency": this._T,
                "visible": this._V,
                "weight": this._W
            }, {});
        };
        ShapeLineFormat.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ShapeLineFormat.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ShapeLineFormat;
    }(OfficeExtension.ClientObject));
    Excel.ShapeLineFormat = ShapeLineFormat;
    var _typeTextFrame = "TextFrame";
    var TextFrame = (function (_super) {
        __extends(TextFrame, _super);
        function TextFrame() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TextFrame.prototype, "_className", {
            get: function () {
                return "TextFrame";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["leftMargin", "rightMargin", "topMargin", "bottomMargin", "horizontalAlignment", "horizontalOverflow", "verticalAlignment", "verticalOverflow", "orientation", "readingOrder", "hasText", "autoSizeSetting"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["LeftMargin", "RightMargin", "TopMargin", "BottomMargin", "HorizontalAlignment", "HorizontalOverflow", "VerticalAlignment", "VerticalOverflow", "Orientation", "ReadingOrder", "HasText", "AutoSizeSetting"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true, true, true, true, true, false, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["textRange"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "textRange", {
            get: function () {
                if (!this._T) {
                    this._T = _createPropertyObject(Excel.TextRange, this, "TextRange", false, 4);
                }
                return this._T;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "autoSizeSetting", {
            get: function () {
                _throwIfNotLoaded("autoSizeSetting", this._A, _typeTextFrame, this._isNull);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "AutoSizeSetting", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "bottomMargin", {
            get: function () {
                _throwIfNotLoaded("bottomMargin", this._B, _typeTextFrame, this._isNull);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "BottomMargin", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "hasText", {
            get: function () {
                _throwIfNotLoaded("hasText", this._H, _typeTextFrame, this._isNull);
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "horizontalAlignment", {
            get: function () {
                _throwIfNotLoaded("horizontalAlignment", this._Ho, _typeTextFrame, this._isNull);
                return this._Ho;
            },
            set: function (value) {
                this._Ho = value;
                _invokeSetProperty(this, "HorizontalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "horizontalOverflow", {
            get: function () {
                _throwIfNotLoaded("horizontalOverflow", this._Hor, _typeTextFrame, this._isNull);
                return this._Hor;
            },
            set: function (value) {
                this._Hor = value;
                _invokeSetProperty(this, "HorizontalOverflow", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "leftMargin", {
            get: function () {
                _throwIfNotLoaded("leftMargin", this._L, _typeTextFrame, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "LeftMargin", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "orientation", {
            get: function () {
                _throwIfNotLoaded("orientation", this._O, _typeTextFrame, this._isNull);
                return this._O;
            },
            set: function (value) {
                this._O = value;
                _invokeSetProperty(this, "Orientation", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "readingOrder", {
            get: function () {
                _throwIfNotLoaded("readingOrder", this._R, _typeTextFrame, this._isNull);
                return this._R;
            },
            set: function (value) {
                this._R = value;
                _invokeSetProperty(this, "ReadingOrder", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "rightMargin", {
            get: function () {
                _throwIfNotLoaded("rightMargin", this._Ri, _typeTextFrame, this._isNull);
                return this._Ri;
            },
            set: function (value) {
                this._Ri = value;
                _invokeSetProperty(this, "RightMargin", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "topMargin", {
            get: function () {
                _throwIfNotLoaded("topMargin", this._To, _typeTextFrame, this._isNull);
                return this._To;
            },
            set: function (value) {
                this._To = value;
                _invokeSetProperty(this, "TopMargin", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "verticalAlignment", {
            get: function () {
                _throwIfNotLoaded("verticalAlignment", this._V, _typeTextFrame, this._isNull);
                return this._V;
            },
            set: function (value) {
                this._V = value;
                _invokeSetProperty(this, "VerticalAlignment", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextFrame.prototype, "verticalOverflow", {
            get: function () {
                _throwIfNotLoaded("verticalOverflow", this._Ve, _typeTextFrame, this._isNull);
                return this._Ve;
            },
            set: function (value) {
                this._Ve = value;
                _invokeSetProperty(this, "VerticalOverflow", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        TextFrame.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["leftMargin", "rightMargin", "topMargin", "bottomMargin", "horizontalAlignment", "horizontalOverflow", "verticalAlignment", "verticalOverflow", "orientation", "readingOrder", "autoSizeSetting"], [], [
                "textRange"
            ]);
        };
        TextFrame.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        TextFrame.prototype.deleteText = function () {
            _invokeMethod(this, "DeleteText", 0, [], 0, 0);
        };
        TextFrame.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["AutoSizeSetting"])) {
                this._A = obj["AutoSizeSetting"];
            }
            if (!_isUndefined(obj["BottomMargin"])) {
                this._B = obj["BottomMargin"];
            }
            if (!_isUndefined(obj["HasText"])) {
                this._H = obj["HasText"];
            }
            if (!_isUndefined(obj["HorizontalAlignment"])) {
                this._Ho = obj["HorizontalAlignment"];
            }
            if (!_isUndefined(obj["HorizontalOverflow"])) {
                this._Hor = obj["HorizontalOverflow"];
            }
            if (!_isUndefined(obj["LeftMargin"])) {
                this._L = obj["LeftMargin"];
            }
            if (!_isUndefined(obj["Orientation"])) {
                this._O = obj["Orientation"];
            }
            if (!_isUndefined(obj["ReadingOrder"])) {
                this._R = obj["ReadingOrder"];
            }
            if (!_isUndefined(obj["RightMargin"])) {
                this._Ri = obj["RightMargin"];
            }
            if (!_isUndefined(obj["TopMargin"])) {
                this._To = obj["TopMargin"];
            }
            if (!_isUndefined(obj["VerticalAlignment"])) {
                this._V = obj["VerticalAlignment"];
            }
            if (!_isUndefined(obj["VerticalOverflow"])) {
                this._Ve = obj["VerticalOverflow"];
            }
            _handleNavigationPropertyResults(this, obj, ["textRange", "TextRange"]);
        };
        TextFrame.prototype.load = function (options) {
            return _load(this, options);
        };
        TextFrame.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TextFrame.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        TextFrame.prototype.toJSON = function () {
            return _toJson(this, {
                "autoSizeSetting": this._A,
                "bottomMargin": this._B,
                "hasText": this._H,
                "horizontalAlignment": this._Ho,
                "horizontalOverflow": this._Hor,
                "leftMargin": this._L,
                "orientation": this._O,
                "readingOrder": this._R,
                "rightMargin": this._Ri,
                "topMargin": this._To,
                "verticalAlignment": this._V,
                "verticalOverflow": this._Ve
            }, {});
        };
        TextFrame.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        TextFrame.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return TextFrame;
    }(OfficeExtension.ClientObject));
    Excel.TextFrame = TextFrame;
    var _typeTextRange = "TextRange";
    var TextRange = (function (_super) {
        __extends(TextRange, _super);
        function TextRange() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(TextRange.prototype, "_className", {
            get: function () {
                return "TextRange";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextRange.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["text"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextRange.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Text"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextRange.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextRange.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["font"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextRange.prototype, "font", {
            get: function () {
                if (!this._F) {
                    this._F = _createPropertyObject(Excel.ShapeFont, this, "Font", false, 4);
                }
                return this._F;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(TextRange.prototype, "text", {
            get: function () {
                _throwIfNotLoaded("text", this._T, _typeTextRange, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Text", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        TextRange.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["text"], ["font"], []);
        };
        TextRange.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        TextRange.prototype.getSubstring = function (start, length) {
            return _createMethodObject(Excel.TextRange, this, "GetSubstring", 0, [start, length], false, false, null, 0);
        };
        TextRange.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Text"])) {
                this._T = obj["Text"];
            }
            _handleNavigationPropertyResults(this, obj, ["font", "Font"]);
        };
        TextRange.prototype.load = function (options) {
            return _load(this, options);
        };
        TextRange.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        TextRange.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        TextRange.prototype.toJSON = function () {
            return _toJson(this, {
                "text": this._T
            }, {
                "font": this._F
            });
        };
        TextRange.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        TextRange.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return TextRange;
    }(OfficeExtension.ClientObject));
    Excel.TextRange = TextRange;
    var _typeShapeFont = "ShapeFont";
    var ShapeFont = (function (_super) {
        __extends(ShapeFont, _super);
        function ShapeFont() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(ShapeFont.prototype, "_className", {
            get: function () {
                return "ShapeFont";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFont.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["size", "name", "color", "bold", "italic", "underline"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFont.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Size", "Name", "Color", "Bold", "Italic", "Underline"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFont.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true, true, true, true, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFont.prototype, "bold", {
            get: function () {
                _throwIfNotLoaded("bold", this._B, _typeShapeFont, this._isNull);
                return this._B;
            },
            set: function (value) {
                this._B = value;
                _invokeSetProperty(this, "Bold", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFont.prototype, "color", {
            get: function () {
                _throwIfNotLoaded("color", this._C, _typeShapeFont, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Color", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFont.prototype, "italic", {
            get: function () {
                _throwIfNotLoaded("italic", this._I, _typeShapeFont, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "Italic", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFont.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeShapeFont, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFont.prototype, "size", {
            get: function () {
                _throwIfNotLoaded("size", this._S, _typeShapeFont, this._isNull);
                return this._S;
            },
            set: function (value) {
                this._S = value;
                _invokeSetProperty(this, "Size", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(ShapeFont.prototype, "underline", {
            get: function () {
                _throwIfNotLoaded("underline", this._U, _typeShapeFont, this._isNull);
                return this._U;
            },
            set: function (value) {
                this._U = value;
                _invokeSetProperty(this, "Underline", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        ShapeFont.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["size", "name", "color", "bold", "italic", "underline"], [], []);
        };
        ShapeFont.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        ShapeFont.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Bold"])) {
                this._B = obj["Bold"];
            }
            if (!_isUndefined(obj["Color"])) {
                this._C = obj["Color"];
            }
            if (!_isUndefined(obj["Italic"])) {
                this._I = obj["Italic"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["Size"])) {
                this._S = obj["Size"];
            }
            if (!_isUndefined(obj["Underline"])) {
                this._U = obj["Underline"];
            }
        };
        ShapeFont.prototype.load = function (options) {
            return _load(this, options);
        };
        ShapeFont.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        ShapeFont.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        ShapeFont.prototype.toJSON = function () {
            return _toJson(this, {
                "bold": this._B,
                "color": this._C,
                "italic": this._I,
                "name": this._N,
                "size": this._S,
                "underline": this._U
            }, {});
        };
        ShapeFont.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        ShapeFont.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return ShapeFont;
    }(OfficeExtension.ClientObject));
    Excel.ShapeFont = ShapeFont;
    var _typeSlicer = "Slicer";
    var Slicer = (function (_super) {
        __extends(Slicer, _super);
        function Slicer() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Slicer.prototype, "_className", {
            get: function () {
                return "Slicer";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["id", "name", "caption", "left", "top", "width", "height", "isFilterCleared", "style", "sortBy"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Id", "Name", "Caption", "Left", "Top", "Width", "Height", "IsFilterCleared", "Style", "SortBy"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, true, true, true, true, true, true, false, true, true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "_navigationPropertyNames", {
            get: function () {
                return ["slicerItems", "worksheet"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "slicerItems", {
            get: function () {
                if (!this._S) {
                    this._S = _createPropertyObject(Excel.SlicerItemCollection, this, "SlicerItems", true, 4);
                }
                return this._S;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "worksheet", {
            get: function () {
                if (!this._Wo) {
                    this._Wo = _createPropertyObject(Excel.Worksheet, this, "Worksheet", false, 4);
                }
                return this._Wo;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "caption", {
            get: function () {
                _throwIfNotLoaded("caption", this._C, _typeSlicer, this._isNull);
                return this._C;
            },
            set: function (value) {
                this._C = value;
                _invokeSetProperty(this, "Caption", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "height", {
            get: function () {
                _throwIfNotLoaded("height", this._H, _typeSlicer, this._isNull);
                return this._H;
            },
            set: function (value) {
                this._H = value;
                _invokeSetProperty(this, "Height", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "id", {
            get: function () {
                _throwIfNotLoaded("id", this._I, _typeSlicer, this._isNull);
                return this._I;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "isFilterCleared", {
            get: function () {
                _throwIfNotLoaded("isFilterCleared", this._Is, _typeSlicer, this._isNull);
                return this._Is;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "left", {
            get: function () {
                _throwIfNotLoaded("left", this._L, _typeSlicer, this._isNull);
                return this._L;
            },
            set: function (value) {
                this._L = value;
                _invokeSetProperty(this, "Left", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeSlicer, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "sortBy", {
            get: function () {
                _throwIfNotLoaded("sortBy", this._So, _typeSlicer, this._isNull);
                return this._So;
            },
            set: function (value) {
                this._So = value;
                _invokeSetProperty(this, "SortBy", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "style", {
            get: function () {
                _throwIfNotLoaded("style", this._St, _typeSlicer, this._isNull);
                return this._St;
            },
            set: function (value) {
                this._St = value;
                _invokeSetProperty(this, "Style", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "top", {
            get: function () {
                _throwIfNotLoaded("top", this._T, _typeSlicer, this._isNull);
                return this._T;
            },
            set: function (value) {
                this._T = value;
                _invokeSetProperty(this, "Top", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Slicer.prototype, "width", {
            get: function () {
                _throwIfNotLoaded("width", this._W, _typeSlicer, this._isNull);
                return this._W;
            },
            set: function (value) {
                this._W = value;
                _invokeSetProperty(this, "Width", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Slicer.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["name", "caption", "left", "top", "width", "height", "style", "sortBy"], ["worksheet"], [
                "slicerItems"
            ]);
        };
        Slicer.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Slicer.prototype.clearFilters = function () {
            _invokeMethod(this, "ClearFilters", 0, [], 0, 0);
        };
        Slicer.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        Slicer.prototype.getSelectedItems = function () {
            return _invokeMethod(this, "GetSelectedItems", 0, [], 0, 0);
        };
        Slicer.prototype.selectItems = function (items) {
            _invokeMethod(this, "SelectItems", 0, [items], 0, 0);
        };
        Slicer.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Caption"])) {
                this._C = obj["Caption"];
            }
            if (!_isUndefined(obj["Height"])) {
                this._H = obj["Height"];
            }
            if (!_isUndefined(obj["Id"])) {
                this._I = obj["Id"];
            }
            if (!_isUndefined(obj["IsFilterCleared"])) {
                this._Is = obj["IsFilterCleared"];
            }
            if (!_isUndefined(obj["Left"])) {
                this._L = obj["Left"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
            if (!_isUndefined(obj["SortBy"])) {
                this._So = obj["SortBy"];
            }
            if (!_isUndefined(obj["Style"])) {
                this._St = obj["Style"];
            }
            if (!_isUndefined(obj["Top"])) {
                this._T = obj["Top"];
            }
            if (!_isUndefined(obj["Width"])) {
                this._W = obj["Width"];
            }
            _handleNavigationPropertyResults(this, obj, ["slicerItems", "SlicerItems", "worksheet", "Worksheet"]);
        };
        Slicer.prototype.load = function (options) {
            return _load(this, options);
        };
        Slicer.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Slicer.prototype._handleIdResult = function (value) {
            _super.prototype._handleIdResult.call(this, value);
            if (_isNullOrUndefined(value)) {
                return;
            }
            if (!_isUndefined(value["Id"])) {
                this._I = value["Id"];
            }
        };
        Slicer.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Slicer.prototype.toJSON = function () {
            return _toJson(this, {
                "caption": this._C,
                "height": this._H,
                "id": this._I,
                "isFilterCleared": this._Is,
                "left": this._L,
                "name": this._N,
                "sortBy": this._So,
                "style": this._St,
                "top": this._T,
                "width": this._W
            }, {
                "slicerItems": this._S,
                "worksheet": this._Wo
            });
        };
        Slicer.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Slicer.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Slicer;
    }(OfficeExtension.ClientObject));
    Excel.Slicer = Slicer;
    var _typeSlicerCollection = "SlicerCollection";
    var SlicerCollection = (function (_super) {
        __extends(SlicerCollection, _super);
        function SlicerCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(SlicerCollection.prototype, "_className", {
            get: function () {
                return "SlicerCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeSlicerCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        SlicerCollection.prototype.add = function (slicerSource, sourceField, slicerDestination) {
            return _createMethodObject(Excel.Slicer, this, "Add", 0, [slicerSource, sourceField, slicerDestination], false, true, null, 0);
        };
        SlicerCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        SlicerCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.Slicer, this, [key]);
        };
        SlicerCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.Slicer, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        SlicerCollection.prototype.getItemOrNullObject = function (key) {
            return _createMethodObject(Excel.Slicer, this, "GetItemOrNullObject", 1, [key], false, false, null, 4);
        };
        SlicerCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.Slicer, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        SlicerCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        SlicerCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        SlicerCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.Slicer, true, _this, childItemData, index); });
        };
        SlicerCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        SlicerCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.Slicer, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return SlicerCollection;
    }(OfficeExtension.ClientObject));
    Excel.SlicerCollection = SlicerCollection;
    var _typeSlicerItem = "SlicerItem";
    var SlicerItem = (function (_super) {
        __extends(SlicerItem, _super);
        function SlicerItem() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(SlicerItem.prototype, "_className", {
            get: function () {
                return "SlicerItem";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerItem.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["key", "name", "isSelected", "hasData"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerItem.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Key", "Name", "IsSelected", "HasData"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerItem.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [false, false, true, false];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerItem.prototype, "hasData", {
            get: function () {
                _throwIfNotLoaded("hasData", this._H, _typeSlicerItem, this._isNull);
                return this._H;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerItem.prototype, "isSelected", {
            get: function () {
                _throwIfNotLoaded("isSelected", this._I, _typeSlicerItem, this._isNull);
                return this._I;
            },
            set: function (value) {
                this._I = value;
                _invokeSetProperty(this, "IsSelected", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerItem.prototype, "key", {
            get: function () {
                _throwIfNotLoaded("key", this._K, _typeSlicerItem, this._isNull);
                return this._K;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerItem.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeSlicerItem, this._isNull);
                return this._N;
            },
            enumerable: true,
            configurable: true
        });
        SlicerItem.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["isSelected"], [], []);
        };
        SlicerItem.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        SlicerItem.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["HasData"])) {
                this._H = obj["HasData"];
            }
            if (!_isUndefined(obj["IsSelected"])) {
                this._I = obj["IsSelected"];
            }
            if (!_isUndefined(obj["Key"])) {
                this._K = obj["Key"];
            }
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
        };
        SlicerItem.prototype.load = function (options) {
            return _load(this, options);
        };
        SlicerItem.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        SlicerItem.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        SlicerItem.prototype.toJSON = function () {
            return _toJson(this, {
                "hasData": this._H,
                "isSelected": this._I,
                "key": this._K,
                "name": this._N
            }, {});
        };
        SlicerItem.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        SlicerItem.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return SlicerItem;
    }(OfficeExtension.ClientObject));
    Excel.SlicerItem = SlicerItem;
    var _typeSlicerItemCollection = "SlicerItemCollection";
    var SlicerItemCollection = (function (_super) {
        __extends(SlicerItemCollection, _super);
        function SlicerItemCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(SlicerItemCollection.prototype, "_className", {
            get: function () {
                return "SlicerItemCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerItemCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(SlicerItemCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeSlicerItemCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        SlicerItemCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        SlicerItemCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.SlicerItem, this, [key]);
        };
        SlicerItemCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.SlicerItem, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        SlicerItemCollection.prototype.getItemOrNullObject = function (key) {
            return _createMethodObject(Excel.SlicerItem, this, "GetItemOrNullObject", 1, [key], false, false, null, 4);
        };
        SlicerItemCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.SlicerItem, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        SlicerItemCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        SlicerItemCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        SlicerItemCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.SlicerItem, true, _this, childItemData, index); });
        };
        SlicerItemCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        SlicerItemCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.SlicerItem, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return SlicerItemCollection;
    }(OfficeExtension.ClientObject));
    Excel.SlicerItemCollection = SlicerItemCollection;
    var _typeRibbon = "Ribbon";
    var Ribbon = (function (_super) {
        __extends(Ribbon, _super);
        function Ribbon() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Ribbon.prototype, "_className", {
            get: function () {
                return "Ribbon";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Ribbon.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["activeTab"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Ribbon.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["ActiveTab"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Ribbon.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(Ribbon.prototype, "activeTab", {
            get: function () {
                _throwIfNotLoaded("activeTab", this._A, _typeRibbon, this._isNull);
                return this._A;
            },
            set: function (value) {
                this._A = value;
                _invokeSetProperty(this, "ActiveTab", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        Ribbon.prototype.set = function (properties, options) {
            this._recursivelySet(properties, options, ["activeTab"], [], []);
        };
        Ribbon.prototype.update = function (properties) {
            this._recursivelyUpdate(properties);
        };
        Ribbon.prototype.executeCommand = function (tcid, mouseClick) {
            _invokeMethod(this, "ExecuteCommand", 0, [tcid, mouseClick], 0, 0);
        };
        Ribbon.prototype.showTeachingCallout = function (tcid, title, message) {
            _invokeMethod(this, "ShowTeachingCallout", 0, [tcid, title, message], 0, 0);
        };
        Ribbon.prototype._RegisterCommandExecutedEvent = function () {
            _invokeMethod(this, "_RegisterCommandExecutedEvent", 0, [], 0, 0);
        };
        Ribbon.prototype._UnregisterCommandExecutedEvent = function () {
            _invokeMethod(this, "_UnregisterCommandExecutedEvent", 0, [], 0, 0);
        };
        Ribbon.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["ActiveTab"])) {
                this._A = obj["ActiveTab"];
            }
        };
        Ribbon.prototype.load = function (options) {
            return _load(this, options);
        };
        Ribbon.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        Ribbon.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Object.defineProperty(Ribbon.prototype, "onCommandExecuted", {
            get: function () {
                var _this = this;
                if (!this.m_commandExecuted) {
                    this.m_commandExecuted = new OfficeExtension.GenericEventHandlers(this.context, this, "CommandExecuted", {
                        eventType: 2300,
                        registerFunc: function () { return _this._RegisterCommandExecutedEvent(); },
                        unregisterFunc: function () { return _this._UnregisterCommandExecutedEvent(); },
                        getTargetIdFunc: function () { return OfficeExtension.Constants.eventWorkbookId; },
                        eventArgsTransformFunc: function (value) {
                            var event = {
                                type: EventType.ribbonCommandExecuted,
                                buttonId: value.buttonId
                            };
                            return OfficeExtension.Utility._createPromiseFromResult(event);
                        }
                    });
                }
                return this.m_commandExecuted;
            },
            enumerable: true,
            configurable: true
        });
        Ribbon.prototype.toJSON = function () {
            return _toJson(this, {
                "activeTab": this._A
            }, {});
        };
        Ribbon.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        Ribbon.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return Ribbon;
    }(OfficeExtension.ClientObject));
    Excel.Ribbon = Ribbon;
    var AxisType;
    (function (AxisType) {
        AxisType["invalid"] = "Invalid";
        AxisType["category"] = "Category";
        AxisType["value"] = "Value";
        AxisType["series"] = "Series";
    })(AxisType = Excel.AxisType || (Excel.AxisType = {}));
    var AxisGroup;
    (function (AxisGroup) {
        AxisGroup["primary"] = "Primary";
        AxisGroup["secondary"] = "Secondary";
    })(AxisGroup = Excel.AxisGroup || (Excel.AxisGroup = {}));
    var AxisScaleType;
    (function (AxisScaleType) {
        AxisScaleType["linear"] = "Linear";
        AxisScaleType["logarithmic"] = "Logarithmic";
    })(AxisScaleType = Excel.AxisScaleType || (Excel.AxisScaleType = {}));
    var AxisCrosses;
    (function (AxisCrosses) {
        AxisCrosses["automatic"] = "Automatic";
        AxisCrosses["maximum"] = "Maximum";
        AxisCrosses["minimum"] = "Minimum";
        AxisCrosses["custom"] = "Custom";
    })(AxisCrosses = Excel.AxisCrosses || (Excel.AxisCrosses = {}));
    var AxisTickMark;
    (function (AxisTickMark) {
        AxisTickMark["none"] = "None";
        AxisTickMark["cross"] = "Cross";
        AxisTickMark["inside"] = "Inside";
        AxisTickMark["outside"] = "Outside";
    })(AxisTickMark = Excel.AxisTickMark || (Excel.AxisTickMark = {}));
    var AxisTickLabelPosition;
    (function (AxisTickLabelPosition) {
        AxisTickLabelPosition["nextToAxis"] = "NextToAxis";
        AxisTickLabelPosition["high"] = "High";
        AxisTickLabelPosition["low"] = "Low";
        AxisTickLabelPosition["none"] = "None";
    })(AxisTickLabelPosition = Excel.AxisTickLabelPosition || (Excel.AxisTickLabelPosition = {}));
    var TrendlineType;
    (function (TrendlineType) {
        TrendlineType["linear"] = "Linear";
        TrendlineType["exponential"] = "Exponential";
        TrendlineType["logarithmic"] = "Logarithmic";
        TrendlineType["movingAverage"] = "MovingAverage";
        TrendlineType["polynomial"] = "Polynomial";
        TrendlineType["power"] = "Power";
    })(TrendlineType = Excel.TrendlineType || (Excel.TrendlineType = {}));
    var ChartAxisType;
    (function (ChartAxisType) {
        ChartAxisType["invalid"] = "Invalid";
        ChartAxisType["category"] = "Category";
        ChartAxisType["value"] = "Value";
        ChartAxisType["series"] = "Series";
    })(ChartAxisType = Excel.ChartAxisType || (Excel.ChartAxisType = {}));
    var ChartAxisGroup;
    (function (ChartAxisGroup) {
        ChartAxisGroup["primary"] = "Primary";
        ChartAxisGroup["secondary"] = "Secondary";
    })(ChartAxisGroup = Excel.ChartAxisGroup || (Excel.ChartAxisGroup = {}));
    var ChartAxisScaleType;
    (function (ChartAxisScaleType) {
        ChartAxisScaleType["linear"] = "Linear";
        ChartAxisScaleType["logarithmic"] = "Logarithmic";
    })(ChartAxisScaleType = Excel.ChartAxisScaleType || (Excel.ChartAxisScaleType = {}));
    var ChartAxisPosition;
    (function (ChartAxisPosition) {
        ChartAxisPosition["automatic"] = "Automatic";
        ChartAxisPosition["maximum"] = "Maximum";
        ChartAxisPosition["minimum"] = "Minimum";
        ChartAxisPosition["custom"] = "Custom";
    })(ChartAxisPosition = Excel.ChartAxisPosition || (Excel.ChartAxisPosition = {}));
    var ChartAxisTickMark;
    (function (ChartAxisTickMark) {
        ChartAxisTickMark["none"] = "None";
        ChartAxisTickMark["cross"] = "Cross";
        ChartAxisTickMark["inside"] = "Inside";
        ChartAxisTickMark["outside"] = "Outside";
    })(ChartAxisTickMark = Excel.ChartAxisTickMark || (Excel.ChartAxisTickMark = {}));
    var CalculationState;
    (function (CalculationState) {
        CalculationState["done"] = "Done";
        CalculationState["calculating"] = "Calculating";
        CalculationState["pending"] = "Pending";
    })(CalculationState = Excel.CalculationState || (Excel.CalculationState = {}));
    var ChartAxisTickLabelPosition;
    (function (ChartAxisTickLabelPosition) {
        ChartAxisTickLabelPosition["nextToAxis"] = "NextToAxis";
        ChartAxisTickLabelPosition["high"] = "High";
        ChartAxisTickLabelPosition["low"] = "Low";
        ChartAxisTickLabelPosition["none"] = "None";
    })(ChartAxisTickLabelPosition = Excel.ChartAxisTickLabelPosition || (Excel.ChartAxisTickLabelPosition = {}));
    var ChartAxisDisplayUnit;
    (function (ChartAxisDisplayUnit) {
        ChartAxisDisplayUnit["none"] = "None";
        ChartAxisDisplayUnit["hundreds"] = "Hundreds";
        ChartAxisDisplayUnit["thousands"] = "Thousands";
        ChartAxisDisplayUnit["tenThousands"] = "TenThousands";
        ChartAxisDisplayUnit["hundredThousands"] = "HundredThousands";
        ChartAxisDisplayUnit["millions"] = "Millions";
        ChartAxisDisplayUnit["tenMillions"] = "TenMillions";
        ChartAxisDisplayUnit["hundredMillions"] = "HundredMillions";
        ChartAxisDisplayUnit["billions"] = "Billions";
        ChartAxisDisplayUnit["trillions"] = "Trillions";
        ChartAxisDisplayUnit["custom"] = "Custom";
    })(ChartAxisDisplayUnit = Excel.ChartAxisDisplayUnit || (Excel.ChartAxisDisplayUnit = {}));
    var ChartAxisTimeUnit;
    (function (ChartAxisTimeUnit) {
        ChartAxisTimeUnit["days"] = "Days";
        ChartAxisTimeUnit["months"] = "Months";
        ChartAxisTimeUnit["years"] = "Years";
    })(ChartAxisTimeUnit = Excel.ChartAxisTimeUnit || (Excel.ChartAxisTimeUnit = {}));
    var ChartBoxQuartileCalculation;
    (function (ChartBoxQuartileCalculation) {
        ChartBoxQuartileCalculation["inclusive"] = "Inclusive";
        ChartBoxQuartileCalculation["exclusive"] = "Exclusive";
    })(ChartBoxQuartileCalculation = Excel.ChartBoxQuartileCalculation || (Excel.ChartBoxQuartileCalculation = {}));
    var ChartAxisCategoryType;
    (function (ChartAxisCategoryType) {
        ChartAxisCategoryType["automatic"] = "Automatic";
        ChartAxisCategoryType["textAxis"] = "TextAxis";
        ChartAxisCategoryType["dateAxis"] = "DateAxis";
    })(ChartAxisCategoryType = Excel.ChartAxisCategoryType || (Excel.ChartAxisCategoryType = {}));
    var ChartBinType;
    (function (ChartBinType) {
        ChartBinType["category"] = "Category";
        ChartBinType["auto"] = "Auto";
        ChartBinType["binWidth"] = "BinWidth";
        ChartBinType["binCount"] = "BinCount";
    })(ChartBinType = Excel.ChartBinType || (Excel.ChartBinType = {}));
    var ChartLineStyle;
    (function (ChartLineStyle) {
        ChartLineStyle["none"] = "None";
        ChartLineStyle["continuous"] = "Continuous";
        ChartLineStyle["dash"] = "Dash";
        ChartLineStyle["dashDot"] = "DashDot";
        ChartLineStyle["dashDotDot"] = "DashDotDot";
        ChartLineStyle["dot"] = "Dot";
        ChartLineStyle["grey25"] = "Grey25";
        ChartLineStyle["grey50"] = "Grey50";
        ChartLineStyle["grey75"] = "Grey75";
        ChartLineStyle["automatic"] = "Automatic";
        ChartLineStyle["roundDot"] = "RoundDot";
    })(ChartLineStyle = Excel.ChartLineStyle || (Excel.ChartLineStyle = {}));
    var ChartDataLabelPosition;
    (function (ChartDataLabelPosition) {
        ChartDataLabelPosition["invalid"] = "Invalid";
        ChartDataLabelPosition["none"] = "None";
        ChartDataLabelPosition["center"] = "Center";
        ChartDataLabelPosition["insideEnd"] = "InsideEnd";
        ChartDataLabelPosition["insideBase"] = "InsideBase";
        ChartDataLabelPosition["outsideEnd"] = "OutsideEnd";
        ChartDataLabelPosition["left"] = "Left";
        ChartDataLabelPosition["right"] = "Right";
        ChartDataLabelPosition["top"] = "Top";
        ChartDataLabelPosition["bottom"] = "Bottom";
        ChartDataLabelPosition["bestFit"] = "BestFit";
        ChartDataLabelPosition["callout"] = "Callout";
    })(ChartDataLabelPosition = Excel.ChartDataLabelPosition || (Excel.ChartDataLabelPosition = {}));
    var ChartErrorBarsInclude;
    (function (ChartErrorBarsInclude) {
        ChartErrorBarsInclude["both"] = "Both";
        ChartErrorBarsInclude["minusValues"] = "MinusValues";
        ChartErrorBarsInclude["plusValues"] = "PlusValues";
    })(ChartErrorBarsInclude = Excel.ChartErrorBarsInclude || (Excel.ChartErrorBarsInclude = {}));
    var ChartErrorBarsType;
    (function (ChartErrorBarsType) {
        ChartErrorBarsType["fixedValue"] = "FixedValue";
        ChartErrorBarsType["percent"] = "Percent";
        ChartErrorBarsType["stDev"] = "StDev";
        ChartErrorBarsType["stError"] = "StError";
        ChartErrorBarsType["custom"] = "Custom";
    })(ChartErrorBarsType = Excel.ChartErrorBarsType || (Excel.ChartErrorBarsType = {}));
    var ChartMapAreaLevel;
    (function (ChartMapAreaLevel) {
        ChartMapAreaLevel["automatic"] = "Automatic";
        ChartMapAreaLevel["dataOnly"] = "DataOnly";
        ChartMapAreaLevel["city"] = "City";
        ChartMapAreaLevel["county"] = "County";
        ChartMapAreaLevel["state"] = "State";
        ChartMapAreaLevel["country"] = "Country";
        ChartMapAreaLevel["continent"] = "Continent";
        ChartMapAreaLevel["world"] = "World";
    })(ChartMapAreaLevel = Excel.ChartMapAreaLevel || (Excel.ChartMapAreaLevel = {}));
    var ChartGradientStyle;
    (function (ChartGradientStyle) {
        ChartGradientStyle["twoPhaseColor"] = "TwoPhaseColor";
        ChartGradientStyle["threePhaseColor"] = "ThreePhaseColor";
    })(ChartGradientStyle = Excel.ChartGradientStyle || (Excel.ChartGradientStyle = {}));
    var ChartGradientStyleType;
    (function (ChartGradientStyleType) {
        ChartGradientStyleType["extremeValue"] = "ExtremeValue";
        ChartGradientStyleType["number"] = "Number";
        ChartGradientStyleType["percent"] = "Percent";
    })(ChartGradientStyleType = Excel.ChartGradientStyleType || (Excel.ChartGradientStyleType = {}));
    var ChartTitlePosition;
    (function (ChartTitlePosition) {
        ChartTitlePosition["automatic"] = "Automatic";
        ChartTitlePosition["top"] = "Top";
        ChartTitlePosition["bottom"] = "Bottom";
        ChartTitlePosition["left"] = "Left";
        ChartTitlePosition["right"] = "Right";
    })(ChartTitlePosition = Excel.ChartTitlePosition || (Excel.ChartTitlePosition = {}));
    var ChartLegendPosition;
    (function (ChartLegendPosition) {
        ChartLegendPosition["invalid"] = "Invalid";
        ChartLegendPosition["top"] = "Top";
        ChartLegendPosition["bottom"] = "Bottom";
        ChartLegendPosition["left"] = "Left";
        ChartLegendPosition["right"] = "Right";
        ChartLegendPosition["corner"] = "Corner";
        ChartLegendPosition["custom"] = "Custom";
    })(ChartLegendPosition = Excel.ChartLegendPosition || (Excel.ChartLegendPosition = {}));
    var ChartMarkerStyle;
    (function (ChartMarkerStyle) {
        ChartMarkerStyle["invalid"] = "Invalid";
        ChartMarkerStyle["automatic"] = "Automatic";
        ChartMarkerStyle["none"] = "None";
        ChartMarkerStyle["square"] = "Square";
        ChartMarkerStyle["diamond"] = "Diamond";
        ChartMarkerStyle["triangle"] = "Triangle";
        ChartMarkerStyle["x"] = "X";
        ChartMarkerStyle["star"] = "Star";
        ChartMarkerStyle["dot"] = "Dot";
        ChartMarkerStyle["dash"] = "Dash";
        ChartMarkerStyle["circle"] = "Circle";
        ChartMarkerStyle["plus"] = "Plus";
        ChartMarkerStyle["picture"] = "Picture";
    })(ChartMarkerStyle = Excel.ChartMarkerStyle || (Excel.ChartMarkerStyle = {}));
    var ChartPlotAreaPosition;
    (function (ChartPlotAreaPosition) {
        ChartPlotAreaPosition["automatic"] = "Automatic";
        ChartPlotAreaPosition["custom"] = "Custom";
    })(ChartPlotAreaPosition = Excel.ChartPlotAreaPosition || (Excel.ChartPlotAreaPosition = {}));
    var ChartMapLabelStrategy;
    (function (ChartMapLabelStrategy) {
        ChartMapLabelStrategy["none"] = "None";
        ChartMapLabelStrategy["bestFit"] = "BestFit";
        ChartMapLabelStrategy["showAll"] = "ShowAll";
    })(ChartMapLabelStrategy = Excel.ChartMapLabelStrategy || (Excel.ChartMapLabelStrategy = {}));
    var ChartMapProjectionType;
    (function (ChartMapProjectionType) {
        ChartMapProjectionType["automatic"] = "Automatic";
        ChartMapProjectionType["mercator"] = "Mercator";
        ChartMapProjectionType["miller"] = "Miller";
        ChartMapProjectionType["robinson"] = "Robinson";
        ChartMapProjectionType["albers"] = "Albers";
    })(ChartMapProjectionType = Excel.ChartMapProjectionType || (Excel.ChartMapProjectionType = {}));
    var ChartParentLabelStrategy;
    (function (ChartParentLabelStrategy) {
        ChartParentLabelStrategy["none"] = "None";
        ChartParentLabelStrategy["banner"] = "Banner";
        ChartParentLabelStrategy["overlapping"] = "Overlapping";
    })(ChartParentLabelStrategy = Excel.ChartParentLabelStrategy || (Excel.ChartParentLabelStrategy = {}));
    var ChartSeriesBy;
    (function (ChartSeriesBy) {
        ChartSeriesBy["auto"] = "Auto";
        ChartSeriesBy["columns"] = "Columns";
        ChartSeriesBy["rows"] = "Rows";
    })(ChartSeriesBy = Excel.ChartSeriesBy || (Excel.ChartSeriesBy = {}));
    var ChartTextHorizontalAlignment;
    (function (ChartTextHorizontalAlignment) {
        ChartTextHorizontalAlignment["center"] = "Center";
        ChartTextHorizontalAlignment["left"] = "Left";
        ChartTextHorizontalAlignment["right"] = "Right";
        ChartTextHorizontalAlignment["justify"] = "Justify";
        ChartTextHorizontalAlignment["distributed"] = "Distributed";
    })(ChartTextHorizontalAlignment = Excel.ChartTextHorizontalAlignment || (Excel.ChartTextHorizontalAlignment = {}));
    var ChartTextVerticalAlignment;
    (function (ChartTextVerticalAlignment) {
        ChartTextVerticalAlignment["center"] = "Center";
        ChartTextVerticalAlignment["bottom"] = "Bottom";
        ChartTextVerticalAlignment["top"] = "Top";
        ChartTextVerticalAlignment["justify"] = "Justify";
        ChartTextVerticalAlignment["distributed"] = "Distributed";
    })(ChartTextVerticalAlignment = Excel.ChartTextVerticalAlignment || (Excel.ChartTextVerticalAlignment = {}));
    var ChartTickLabelAlignment;
    (function (ChartTickLabelAlignment) {
        ChartTickLabelAlignment["center"] = "Center";
        ChartTickLabelAlignment["left"] = "Left";
        ChartTickLabelAlignment["right"] = "Right";
    })(ChartTickLabelAlignment = Excel.ChartTickLabelAlignment || (Excel.ChartTickLabelAlignment = {}));
    var ChartType;
    (function (ChartType) {
        ChartType["invalid"] = "Invalid";
        ChartType["columnClustered"] = "ColumnClustered";
        ChartType["columnStacked"] = "ColumnStacked";
        ChartType["columnStacked100"] = "ColumnStacked100";
        ChartType["_3DColumnClustered"] = "3DColumnClustered";
        ChartType["_3DColumnStacked"] = "3DColumnStacked";
        ChartType["_3DColumnStacked100"] = "3DColumnStacked100";
        ChartType["barClustered"] = "BarClustered";
        ChartType["barStacked"] = "BarStacked";
        ChartType["barStacked100"] = "BarStacked100";
        ChartType["_3DBarClustered"] = "3DBarClustered";
        ChartType["_3DBarStacked"] = "3DBarStacked";
        ChartType["_3DBarStacked100"] = "3DBarStacked100";
        ChartType["lineStacked"] = "LineStacked";
        ChartType["lineStacked100"] = "LineStacked100";
        ChartType["lineMarkers"] = "LineMarkers";
        ChartType["lineMarkersStacked"] = "LineMarkersStacked";
        ChartType["lineMarkersStacked100"] = "LineMarkersStacked100";
        ChartType["pieOfPie"] = "PieOfPie";
        ChartType["pieExploded"] = "PieExploded";
        ChartType["_3DPieExploded"] = "3DPieExploded";
        ChartType["barOfPie"] = "BarOfPie";
        ChartType["xyscatterSmooth"] = "XYScatterSmooth";
        ChartType["xyscatterSmoothNoMarkers"] = "XYScatterSmoothNoMarkers";
        ChartType["xyscatterLines"] = "XYScatterLines";
        ChartType["xyscatterLinesNoMarkers"] = "XYScatterLinesNoMarkers";
        ChartType["areaStacked"] = "AreaStacked";
        ChartType["areaStacked100"] = "AreaStacked100";
        ChartType["_3DAreaStacked"] = "3DAreaStacked";
        ChartType["_3DAreaStacked100"] = "3DAreaStacked100";
        ChartType["doughnutExploded"] = "DoughnutExploded";
        ChartType["radarMarkers"] = "RadarMarkers";
        ChartType["radarFilled"] = "RadarFilled";
        ChartType["surface"] = "Surface";
        ChartType["surfaceWireframe"] = "SurfaceWireframe";
        ChartType["surfaceTopView"] = "SurfaceTopView";
        ChartType["surfaceTopViewWireframe"] = "SurfaceTopViewWireframe";
        ChartType["bubble"] = "Bubble";
        ChartType["bubble3DEffect"] = "Bubble3DEffect";
        ChartType["stockHLC"] = "StockHLC";
        ChartType["stockOHLC"] = "StockOHLC";
        ChartType["stockVHLC"] = "StockVHLC";
        ChartType["stockVOHLC"] = "StockVOHLC";
        ChartType["cylinderColClustered"] = "CylinderColClustered";
        ChartType["cylinderColStacked"] = "CylinderColStacked";
        ChartType["cylinderColStacked100"] = "CylinderColStacked100";
        ChartType["cylinderBarClustered"] = "CylinderBarClustered";
        ChartType["cylinderBarStacked"] = "CylinderBarStacked";
        ChartType["cylinderBarStacked100"] = "CylinderBarStacked100";
        ChartType["cylinderCol"] = "CylinderCol";
        ChartType["coneColClustered"] = "ConeColClustered";
        ChartType["coneColStacked"] = "ConeColStacked";
        ChartType["coneColStacked100"] = "ConeColStacked100";
        ChartType["coneBarClustered"] = "ConeBarClustered";
        ChartType["coneBarStacked"] = "ConeBarStacked";
        ChartType["coneBarStacked100"] = "ConeBarStacked100";
        ChartType["coneCol"] = "ConeCol";
        ChartType["pyramidColClustered"] = "PyramidColClustered";
        ChartType["pyramidColStacked"] = "PyramidColStacked";
        ChartType["pyramidColStacked100"] = "PyramidColStacked100";
        ChartType["pyramidBarClustered"] = "PyramidBarClustered";
        ChartType["pyramidBarStacked"] = "PyramidBarStacked";
        ChartType["pyramidBarStacked100"] = "PyramidBarStacked100";
        ChartType["pyramidCol"] = "PyramidCol";
        ChartType["_3DColumn"] = "3DColumn";
        ChartType["line"] = "Line";
        ChartType["_3DLine"] = "3DLine";
        ChartType["_3DPie"] = "3DPie";
        ChartType["pie"] = "Pie";
        ChartType["xyscatter"] = "XYScatter";
        ChartType["_3DArea"] = "3DArea";
        ChartType["area"] = "Area";
        ChartType["doughnut"] = "Doughnut";
        ChartType["radar"] = "Radar";
        ChartType["histogram"] = "Histogram";
        ChartType["boxwhisker"] = "Boxwhisker";
        ChartType["pareto"] = "Pareto";
        ChartType["regionMap"] = "RegionMap";
        ChartType["treemap"] = "Treemap";
        ChartType["waterfall"] = "Waterfall";
        ChartType["sunburst"] = "Sunburst";
        ChartType["funnel"] = "Funnel";
    })(ChartType = Excel.ChartType || (Excel.ChartType = {}));
    var ChartUnderlineStyle;
    (function (ChartUnderlineStyle) {
        ChartUnderlineStyle["none"] = "None";
        ChartUnderlineStyle["single"] = "Single";
    })(ChartUnderlineStyle = Excel.ChartUnderlineStyle || (Excel.ChartUnderlineStyle = {}));
    var ChartDisplayBlanksAs;
    (function (ChartDisplayBlanksAs) {
        ChartDisplayBlanksAs["notPlotted"] = "NotPlotted";
        ChartDisplayBlanksAs["zero"] = "Zero";
        ChartDisplayBlanksAs["interplotted"] = "Interplotted";
    })(ChartDisplayBlanksAs = Excel.ChartDisplayBlanksAs || (Excel.ChartDisplayBlanksAs = {}));
    var ChartPlotBy;
    (function (ChartPlotBy) {
        ChartPlotBy["rows"] = "Rows";
        ChartPlotBy["columns"] = "Columns";
    })(ChartPlotBy = Excel.ChartPlotBy || (Excel.ChartPlotBy = {}));
    var ChartSplitType;
    (function (ChartSplitType) {
        ChartSplitType["splitByPosition"] = "SplitByPosition";
        ChartSplitType["splitByValue"] = "SplitByValue";
        ChartSplitType["splitByPercentValue"] = "SplitByPercentValue";
        ChartSplitType["splitByCustomSplit"] = "SplitByCustomSplit";
    })(ChartSplitType = Excel.ChartSplitType || (Excel.ChartSplitType = {}));
    var ChartColorScheme;
    (function (ChartColorScheme) {
        ChartColorScheme["colorfulPalette1"] = "ColorfulPalette1";
        ChartColorScheme["colorfulPalette2"] = "ColorfulPalette2";
        ChartColorScheme["colorfulPalette3"] = "ColorfulPalette3";
        ChartColorScheme["colorfulPalette4"] = "ColorfulPalette4";
        ChartColorScheme["monochromaticPalette1"] = "MonochromaticPalette1";
        ChartColorScheme["monochromaticPalette2"] = "MonochromaticPalette2";
        ChartColorScheme["monochromaticPalette3"] = "MonochromaticPalette3";
        ChartColorScheme["monochromaticPalette4"] = "MonochromaticPalette4";
        ChartColorScheme["monochromaticPalette5"] = "MonochromaticPalette5";
        ChartColorScheme["monochromaticPalette6"] = "MonochromaticPalette6";
        ChartColorScheme["monochromaticPalette7"] = "MonochromaticPalette7";
        ChartColorScheme["monochromaticPalette8"] = "MonochromaticPalette8";
        ChartColorScheme["monochromaticPalette9"] = "MonochromaticPalette9";
        ChartColorScheme["monochromaticPalette10"] = "MonochromaticPalette10";
        ChartColorScheme["monochromaticPalette11"] = "MonochromaticPalette11";
        ChartColorScheme["monochromaticPalette12"] = "MonochromaticPalette12";
        ChartColorScheme["monochromaticPalette13"] = "MonochromaticPalette13";
    })(ChartColorScheme = Excel.ChartColorScheme || (Excel.ChartColorScheme = {}));
    var ChartTrendlineType;
    (function (ChartTrendlineType) {
        ChartTrendlineType["linear"] = "Linear";
        ChartTrendlineType["exponential"] = "Exponential";
        ChartTrendlineType["logarithmic"] = "Logarithmic";
        ChartTrendlineType["movingAverage"] = "MovingAverage";
        ChartTrendlineType["polynomial"] = "Polynomial";
        ChartTrendlineType["power"] = "Power";
    })(ChartTrendlineType = Excel.ChartTrendlineType || (Excel.ChartTrendlineType = {}));
    var ShapeZOrder;
    (function (ShapeZOrder) {
        ShapeZOrder["bringToFront"] = "BringToFront";
        ShapeZOrder["bringForward"] = "BringForward";
        ShapeZOrder["sendToBack"] = "SendToBack";
        ShapeZOrder["sendBackward"] = "SendBackward";
    })(ShapeZOrder = Excel.ShapeZOrder || (Excel.ShapeZOrder = {}));
    var ShapeType;
    (function (ShapeType) {
        ShapeType["unsupported"] = "Unsupported";
        ShapeType["image"] = "Image";
        ShapeType["geometricShape"] = "GeometricShape";
        ShapeType["group"] = "Group";
        ShapeType["line"] = "Line";
    })(ShapeType = Excel.ShapeType || (Excel.ShapeType = {}));
    var ShapeScaleType;
    (function (ShapeScaleType) {
        ShapeScaleType["currentSize"] = "CurrentSize";
        ShapeScaleType["originalSize"] = "OriginalSize";
    })(ShapeScaleType = Excel.ShapeScaleType || (Excel.ShapeScaleType = {}));
    var ShapeScaleFrom;
    (function (ShapeScaleFrom) {
        ShapeScaleFrom["scaleFromTopLeft"] = "ScaleFromTopLeft";
        ShapeScaleFrom["scaleFromMiddle"] = "ScaleFromMiddle";
        ShapeScaleFrom["scaleFromBottomRight"] = "ScaleFromBottomRight";
    })(ShapeScaleFrom = Excel.ShapeScaleFrom || (Excel.ShapeScaleFrom = {}));
    var ShapeFillType;
    (function (ShapeFillType) {
        ShapeFillType["noFill"] = "NoFill";
        ShapeFillType["solid"] = "Solid";
        ShapeFillType["gradient"] = "Gradient";
        ShapeFillType["pattern"] = "Pattern";
        ShapeFillType["pictureAndTexture"] = "PictureAndTexture";
        ShapeFillType["mixed"] = "Mixed";
    })(ShapeFillType = Excel.ShapeFillType || (Excel.ShapeFillType = {}));
    var ShapeFontUnderlineStyle;
    (function (ShapeFontUnderlineStyle) {
        ShapeFontUnderlineStyle["none"] = "None";
        ShapeFontUnderlineStyle["single"] = "Single";
        ShapeFontUnderlineStyle["double"] = "Double";
        ShapeFontUnderlineStyle["heavy"] = "Heavy";
        ShapeFontUnderlineStyle["dotted"] = "Dotted";
        ShapeFontUnderlineStyle["dottedHeavy"] = "DottedHeavy";
        ShapeFontUnderlineStyle["dash"] = "Dash";
        ShapeFontUnderlineStyle["dashHeavy"] = "DashHeavy";
        ShapeFontUnderlineStyle["dashLong"] = "DashLong";
        ShapeFontUnderlineStyle["dashLongHeavy"] = "DashLongHeavy";
        ShapeFontUnderlineStyle["dotDash"] = "DotDash";
        ShapeFontUnderlineStyle["dotDashHeavy"] = "DotDashHeavy";
        ShapeFontUnderlineStyle["dotDotDash"] = "DotDotDash";
        ShapeFontUnderlineStyle["dotDotDashHeavy"] = "DotDotDashHeavy";
        ShapeFontUnderlineStyle["wavy"] = "Wavy";
        ShapeFontUnderlineStyle["wavyHeavy"] = "WavyHeavy";
        ShapeFontUnderlineStyle["wavyDouble"] = "WavyDouble";
    })(ShapeFontUnderlineStyle = Excel.ShapeFontUnderlineStyle || (Excel.ShapeFontUnderlineStyle = {}));
    var PictureFormat;
    (function (PictureFormat) {
        PictureFormat["unknown"] = "UNKNOWN";
        PictureFormat["bmp"] = "BMP";
        PictureFormat["jpeg"] = "JPEG";
        PictureFormat["gif"] = "GIF";
        PictureFormat["png"] = "PNG";
        PictureFormat["svg"] = "SVG";
    })(PictureFormat = Excel.PictureFormat || (Excel.PictureFormat = {}));
    var ShapeLineStyle;
    (function (ShapeLineStyle) {
        ShapeLineStyle["single"] = "Single";
        ShapeLineStyle["thickBetweenThin"] = "ThickBetweenThin";
        ShapeLineStyle["thickThin"] = "ThickThin";
        ShapeLineStyle["thinThick"] = "ThinThick";
        ShapeLineStyle["thinThin"] = "ThinThin";
    })(ShapeLineStyle = Excel.ShapeLineStyle || (Excel.ShapeLineStyle = {}));
    var ShapeLineDashStyle;
    (function (ShapeLineDashStyle) {
        ShapeLineDashStyle["dash"] = "Dash";
        ShapeLineDashStyle["dashDot"] = "DashDot";
        ShapeLineDashStyle["dashDotDot"] = "DashDotDot";
        ShapeLineDashStyle["longDash"] = "LongDash";
        ShapeLineDashStyle["longDashDot"] = "LongDashDot";
        ShapeLineDashStyle["roundDot"] = "RoundDot";
        ShapeLineDashStyle["solid"] = "Solid";
        ShapeLineDashStyle["squareDot"] = "SquareDot";
        ShapeLineDashStyle["longDashDotDot"] = "LongDashDotDot";
        ShapeLineDashStyle["systemDash"] = "SystemDash";
        ShapeLineDashStyle["systemDot"] = "SystemDot";
        ShapeLineDashStyle["systemDashDot"] = "SystemDashDot";
    })(ShapeLineDashStyle = Excel.ShapeLineDashStyle || (Excel.ShapeLineDashStyle = {}));
    var ArrowheadLength;
    (function (ArrowheadLength) {
        ArrowheadLength["short"] = "Short";
        ArrowheadLength["medium"] = "Medium";
        ArrowheadLength["long"] = "Long";
    })(ArrowheadLength = Excel.ArrowheadLength || (Excel.ArrowheadLength = {}));
    var ArrowheadStyle;
    (function (ArrowheadStyle) {
        ArrowheadStyle["none"] = "None";
        ArrowheadStyle["triangle"] = "Triangle";
        ArrowheadStyle["stealth"] = "Stealth";
        ArrowheadStyle["diamond"] = "Diamond";
        ArrowheadStyle["oval"] = "Oval";
        ArrowheadStyle["open"] = "Open";
    })(ArrowheadStyle = Excel.ArrowheadStyle || (Excel.ArrowheadStyle = {}));
    var ArrowheadWidth;
    (function (ArrowheadWidth) {
        ArrowheadWidth["narrow"] = "Narrow";
        ArrowheadWidth["medium"] = "Medium";
        ArrowheadWidth["wide"] = "Wide";
    })(ArrowheadWidth = Excel.ArrowheadWidth || (Excel.ArrowheadWidth = {}));
    var BindingType;
    (function (BindingType) {
        BindingType["range"] = "Range";
        BindingType["table"] = "Table";
        BindingType["text"] = "Text";
    })(BindingType = Excel.BindingType || (Excel.BindingType = {}));
    var BorderIndex;
    (function (BorderIndex) {
        BorderIndex["edgeTop"] = "EdgeTop";
        BorderIndex["edgeBottom"] = "EdgeBottom";
        BorderIndex["edgeLeft"] = "EdgeLeft";
        BorderIndex["edgeRight"] = "EdgeRight";
        BorderIndex["insideVertical"] = "InsideVertical";
        BorderIndex["insideHorizontal"] = "InsideHorizontal";
        BorderIndex["diagonalDown"] = "DiagonalDown";
        BorderIndex["diagonalUp"] = "DiagonalUp";
    })(BorderIndex = Excel.BorderIndex || (Excel.BorderIndex = {}));
    var BorderLineStyle;
    (function (BorderLineStyle) {
        BorderLineStyle["none"] = "None";
        BorderLineStyle["continuous"] = "Continuous";
        BorderLineStyle["dash"] = "Dash";
        BorderLineStyle["dashDot"] = "DashDot";
        BorderLineStyle["dashDotDot"] = "DashDotDot";
        BorderLineStyle["dot"] = "Dot";
        BorderLineStyle["double"] = "Double";
        BorderLineStyle["slantDashDot"] = "SlantDashDot";
    })(BorderLineStyle = Excel.BorderLineStyle || (Excel.BorderLineStyle = {}));
    var BorderWeight;
    (function (BorderWeight) {
        BorderWeight["hairline"] = "Hairline";
        BorderWeight["thin"] = "Thin";
        BorderWeight["medium"] = "Medium";
        BorderWeight["thick"] = "Thick";
    })(BorderWeight = Excel.BorderWeight || (Excel.BorderWeight = {}));
    var CalculationMode;
    (function (CalculationMode) {
        CalculationMode["automatic"] = "Automatic";
        CalculationMode["automaticExceptTables"] = "AutomaticExceptTables";
        CalculationMode["manual"] = "Manual";
    })(CalculationMode = Excel.CalculationMode || (Excel.CalculationMode = {}));
    var CalculationType;
    (function (CalculationType) {
        CalculationType["recalculate"] = "Recalculate";
        CalculationType["full"] = "Full";
        CalculationType["fullRebuild"] = "FullRebuild";
    })(CalculationType = Excel.CalculationType || (Excel.CalculationType = {}));
    var ClearApplyTo;
    (function (ClearApplyTo) {
        ClearApplyTo["all"] = "All";
        ClearApplyTo["formats"] = "Formats";
        ClearApplyTo["contents"] = "Contents";
        ClearApplyTo["hyperlinks"] = "Hyperlinks";
        ClearApplyTo["removeHyperlinks"] = "RemoveHyperlinks";
    })(ClearApplyTo = Excel.ClearApplyTo || (Excel.ClearApplyTo = {}));
    var VisualCategory;
    (function (VisualCategory) {
        VisualCategory["column"] = "Column";
        VisualCategory["bar"] = "Bar";
        VisualCategory["line"] = "Line";
        VisualCategory["area"] = "Area";
        VisualCategory["pie"] = "Pie";
        VisualCategory["donut"] = "Donut";
        VisualCategory["scatter"] = "Scatter";
        VisualCategory["bubble"] = "Bubble";
        VisualCategory["statistical"] = "Statistical";
        VisualCategory["stock"] = "Stock";
        VisualCategory["combo"] = "Combo";
        VisualCategory["hierarchy"] = "Hierarchy";
        VisualCategory["surface"] = "Surface";
        VisualCategory["map"] = "Map";
        VisualCategory["funnel"] = "Funnel";
        VisualCategory["radar"] = "Radar";
        VisualCategory["waterfall"] = "Waterfall";
        VisualCategory["threeD"] = "ThreeD";
        VisualCategory["other"] = "Other";
    })(VisualCategory = Excel.VisualCategory || (Excel.VisualCategory = {}));
    var VisualPropertyType;
    (function (VisualPropertyType) {
        VisualPropertyType["object"] = "Object";
        VisualPropertyType["collection"] = "Collection";
        VisualPropertyType["string"] = "String";
        VisualPropertyType["double"] = "Double";
        VisualPropertyType["int"] = "Int";
        VisualPropertyType["bool"] = "Bool";
        VisualPropertyType["enum"] = "Enum";
        VisualPropertyType["color"] = "Color";
    })(VisualPropertyType = Excel.VisualPropertyType || (Excel.VisualPropertyType = {}));
    var VisualChangeType;
    (function (VisualChangeType) {
        VisualChangeType["dataChange"] = "DataChange";
        VisualChangeType["propertyChange"] = "PropertyChange";
        VisualChangeType["genericChange"] = "GenericChange";
        VisualChangeType["selectionChange"] = "SelectionChange";
    })(VisualChangeType = Excel.VisualChangeType || (Excel.VisualChangeType = {}));
    var BoolMetaPropertyType;
    (function (BoolMetaPropertyType) {
        BoolMetaPropertyType["writeOnly"] = "WriteOnly";
        BoolMetaPropertyType["readOnly"] = "ReadOnly";
        BoolMetaPropertyType["hideEntireSubtreeUI"] = "HideEntireSubtreeUI";
        BoolMetaPropertyType["hideMeButShowChildrenUI"] = "HideMeButShowChildrenUI";
        BoolMetaPropertyType["expandableUI"] = "ExpandableUI";
        BoolMetaPropertyType["nextPropOnSameLine"] = "NextPropOnSameLine";
        BoolMetaPropertyType["hideLabel"] = "HideLabel";
        BoolMetaPropertyType["showResetUI"] = "ShowResetUI";
        BoolMetaPropertyType["hasOwnExpandableSection"] = "HasOwnExpandableSection";
        BoolMetaPropertyType["nextPropOnSameLineFOTP"] = "NextPropOnSameLineFOTP";
        BoolMetaPropertyType["showResetUIFOTP"] = "ShowResetUIFOTP";
        BoolMetaPropertyType["untransferable"] = "Untransferable";
    })(BoolMetaPropertyType = Excel.BoolMetaPropertyType || (Excel.BoolMetaPropertyType = {}));
    var ConditionalDataBarAxisFormat;
    (function (ConditionalDataBarAxisFormat) {
        ConditionalDataBarAxisFormat["automatic"] = "Automatic";
        ConditionalDataBarAxisFormat["none"] = "None";
        ConditionalDataBarAxisFormat["cellMidPoint"] = "CellMidPoint";
    })(ConditionalDataBarAxisFormat = Excel.ConditionalDataBarAxisFormat || (Excel.ConditionalDataBarAxisFormat = {}));
    var ConditionalDataBarDirection;
    (function (ConditionalDataBarDirection) {
        ConditionalDataBarDirection["context"] = "Context";
        ConditionalDataBarDirection["leftToRight"] = "LeftToRight";
        ConditionalDataBarDirection["rightToLeft"] = "RightToLeft";
    })(ConditionalDataBarDirection = Excel.ConditionalDataBarDirection || (Excel.ConditionalDataBarDirection = {}));
    var ConditionalFormatDirection;
    (function (ConditionalFormatDirection) {
        ConditionalFormatDirection["top"] = "Top";
        ConditionalFormatDirection["bottom"] = "Bottom";
    })(ConditionalFormatDirection = Excel.ConditionalFormatDirection || (Excel.ConditionalFormatDirection = {}));
    var ConditionalFormatType;
    (function (ConditionalFormatType) {
        ConditionalFormatType["custom"] = "Custom";
        ConditionalFormatType["dataBar"] = "DataBar";
        ConditionalFormatType["colorScale"] = "ColorScale";
        ConditionalFormatType["iconSet"] = "IconSet";
        ConditionalFormatType["topBottom"] = "TopBottom";
        ConditionalFormatType["presetCriteria"] = "PresetCriteria";
        ConditionalFormatType["containsText"] = "ContainsText";
        ConditionalFormatType["cellValue"] = "CellValue";
    })(ConditionalFormatType = Excel.ConditionalFormatType || (Excel.ConditionalFormatType = {}));
    var ConditionalFormatRuleType;
    (function (ConditionalFormatRuleType) {
        ConditionalFormatRuleType["invalid"] = "Invalid";
        ConditionalFormatRuleType["automatic"] = "Automatic";
        ConditionalFormatRuleType["lowestValue"] = "LowestValue";
        ConditionalFormatRuleType["highestValue"] = "HighestValue";
        ConditionalFormatRuleType["number"] = "Number";
        ConditionalFormatRuleType["percent"] = "Percent";
        ConditionalFormatRuleType["formula"] = "Formula";
        ConditionalFormatRuleType["percentile"] = "Percentile";
    })(ConditionalFormatRuleType = Excel.ConditionalFormatRuleType || (Excel.ConditionalFormatRuleType = {}));
    var ConditionalFormatIconRuleType;
    (function (ConditionalFormatIconRuleType) {
        ConditionalFormatIconRuleType["invalid"] = "Invalid";
        ConditionalFormatIconRuleType["number"] = "Number";
        ConditionalFormatIconRuleType["percent"] = "Percent";
        ConditionalFormatIconRuleType["formula"] = "Formula";
        ConditionalFormatIconRuleType["percentile"] = "Percentile";
    })(ConditionalFormatIconRuleType = Excel.ConditionalFormatIconRuleType || (Excel.ConditionalFormatIconRuleType = {}));
    var ConditionalFormatColorCriterionType;
    (function (ConditionalFormatColorCriterionType) {
        ConditionalFormatColorCriterionType["invalid"] = "Invalid";
        ConditionalFormatColorCriterionType["lowestValue"] = "LowestValue";
        ConditionalFormatColorCriterionType["highestValue"] = "HighestValue";
        ConditionalFormatColorCriterionType["number"] = "Number";
        ConditionalFormatColorCriterionType["percent"] = "Percent";
        ConditionalFormatColorCriterionType["formula"] = "Formula";
        ConditionalFormatColorCriterionType["percentile"] = "Percentile";
    })(ConditionalFormatColorCriterionType = Excel.ConditionalFormatColorCriterionType || (Excel.ConditionalFormatColorCriterionType = {}));
    var ConditionalTopBottomCriterionType;
    (function (ConditionalTopBottomCriterionType) {
        ConditionalTopBottomCriterionType["invalid"] = "Invalid";
        ConditionalTopBottomCriterionType["topItems"] = "TopItems";
        ConditionalTopBottomCriterionType["topPercent"] = "TopPercent";
        ConditionalTopBottomCriterionType["bottomItems"] = "BottomItems";
        ConditionalTopBottomCriterionType["bottomPercent"] = "BottomPercent";
    })(ConditionalTopBottomCriterionType = Excel.ConditionalTopBottomCriterionType || (Excel.ConditionalTopBottomCriterionType = {}));
    var ConditionalFormatPresetCriterion;
    (function (ConditionalFormatPresetCriterion) {
        ConditionalFormatPresetCriterion["invalid"] = "Invalid";
        ConditionalFormatPresetCriterion["blanks"] = "Blanks";
        ConditionalFormatPresetCriterion["nonBlanks"] = "NonBlanks";
        ConditionalFormatPresetCriterion["errors"] = "Errors";
        ConditionalFormatPresetCriterion["nonErrors"] = "NonErrors";
        ConditionalFormatPresetCriterion["yesterday"] = "Yesterday";
        ConditionalFormatPresetCriterion["today"] = "Today";
        ConditionalFormatPresetCriterion["tomorrow"] = "Tomorrow";
        ConditionalFormatPresetCriterion["lastSevenDays"] = "LastSevenDays";
        ConditionalFormatPresetCriterion["lastWeek"] = "LastWeek";
        ConditionalFormatPresetCriterion["thisWeek"] = "ThisWeek";
        ConditionalFormatPresetCriterion["nextWeek"] = "NextWeek";
        ConditionalFormatPresetCriterion["lastMonth"] = "LastMonth";
        ConditionalFormatPresetCriterion["thisMonth"] = "ThisMonth";
        ConditionalFormatPresetCriterion["nextMonth"] = "NextMonth";
        ConditionalFormatPresetCriterion["aboveAverage"] = "AboveAverage";
        ConditionalFormatPresetCriterion["belowAverage"] = "BelowAverage";
        ConditionalFormatPresetCriterion["equalOrAboveAverage"] = "EqualOrAboveAverage";
        ConditionalFormatPresetCriterion["equalOrBelowAverage"] = "EqualOrBelowAverage";
        ConditionalFormatPresetCriterion["oneStdDevAboveAverage"] = "OneStdDevAboveAverage";
        ConditionalFormatPresetCriterion["oneStdDevBelowAverage"] = "OneStdDevBelowAverage";
        ConditionalFormatPresetCriterion["twoStdDevAboveAverage"] = "TwoStdDevAboveAverage";
        ConditionalFormatPresetCriterion["twoStdDevBelowAverage"] = "TwoStdDevBelowAverage";
        ConditionalFormatPresetCriterion["threeStdDevAboveAverage"] = "ThreeStdDevAboveAverage";
        ConditionalFormatPresetCriterion["threeStdDevBelowAverage"] = "ThreeStdDevBelowAverage";
        ConditionalFormatPresetCriterion["uniqueValues"] = "UniqueValues";
        ConditionalFormatPresetCriterion["duplicateValues"] = "DuplicateValues";
    })(ConditionalFormatPresetCriterion = Excel.ConditionalFormatPresetCriterion || (Excel.ConditionalFormatPresetCriterion = {}));
    var ConditionalTextOperator;
    (function (ConditionalTextOperator) {
        ConditionalTextOperator["invalid"] = "Invalid";
        ConditionalTextOperator["contains"] = "Contains";
        ConditionalTextOperator["notContains"] = "NotContains";
        ConditionalTextOperator["beginsWith"] = "BeginsWith";
        ConditionalTextOperator["endsWith"] = "EndsWith";
    })(ConditionalTextOperator = Excel.ConditionalTextOperator || (Excel.ConditionalTextOperator = {}));
    var ConditionalCellValueOperator;
    (function (ConditionalCellValueOperator) {
        ConditionalCellValueOperator["invalid"] = "Invalid";
        ConditionalCellValueOperator["between"] = "Between";
        ConditionalCellValueOperator["notBetween"] = "NotBetween";
        ConditionalCellValueOperator["equalTo"] = "EqualTo";
        ConditionalCellValueOperator["notEqualTo"] = "NotEqualTo";
        ConditionalCellValueOperator["greaterThan"] = "GreaterThan";
        ConditionalCellValueOperator["lessThan"] = "LessThan";
        ConditionalCellValueOperator["greaterThanOrEqual"] = "GreaterThanOrEqual";
        ConditionalCellValueOperator["lessThanOrEqual"] = "LessThanOrEqual";
    })(ConditionalCellValueOperator = Excel.ConditionalCellValueOperator || (Excel.ConditionalCellValueOperator = {}));
    var ConditionalIconCriterionOperator;
    (function (ConditionalIconCriterionOperator) {
        ConditionalIconCriterionOperator["invalid"] = "Invalid";
        ConditionalIconCriterionOperator["greaterThan"] = "GreaterThan";
        ConditionalIconCriterionOperator["greaterThanOrEqual"] = "GreaterThanOrEqual";
    })(ConditionalIconCriterionOperator = Excel.ConditionalIconCriterionOperator || (Excel.ConditionalIconCriterionOperator = {}));
    var ConditionalRangeBorderIndex;
    (function (ConditionalRangeBorderIndex) {
        ConditionalRangeBorderIndex["edgeTop"] = "EdgeTop";
        ConditionalRangeBorderIndex["edgeBottom"] = "EdgeBottom";
        ConditionalRangeBorderIndex["edgeLeft"] = "EdgeLeft";
        ConditionalRangeBorderIndex["edgeRight"] = "EdgeRight";
    })(ConditionalRangeBorderIndex = Excel.ConditionalRangeBorderIndex || (Excel.ConditionalRangeBorderIndex = {}));
    var ConditionalRangeBorderLineStyle;
    (function (ConditionalRangeBorderLineStyle) {
        ConditionalRangeBorderLineStyle["none"] = "None";
        ConditionalRangeBorderLineStyle["continuous"] = "Continuous";
        ConditionalRangeBorderLineStyle["dash"] = "Dash";
        ConditionalRangeBorderLineStyle["dashDot"] = "DashDot";
        ConditionalRangeBorderLineStyle["dashDotDot"] = "DashDotDot";
        ConditionalRangeBorderLineStyle["dot"] = "Dot";
    })(ConditionalRangeBorderLineStyle = Excel.ConditionalRangeBorderLineStyle || (Excel.ConditionalRangeBorderLineStyle = {}));
    var ConditionalRangeFontUnderlineStyle;
    (function (ConditionalRangeFontUnderlineStyle) {
        ConditionalRangeFontUnderlineStyle["none"] = "None";
        ConditionalRangeFontUnderlineStyle["single"] = "Single";
        ConditionalRangeFontUnderlineStyle["double"] = "Double";
    })(ConditionalRangeFontUnderlineStyle = Excel.ConditionalRangeFontUnderlineStyle || (Excel.ConditionalRangeFontUnderlineStyle = {}));
    var CustomFunctionType;
    (function (CustomFunctionType) {
        CustomFunctionType["invalid"] = "Invalid";
        CustomFunctionType["script"] = "Script";
        CustomFunctionType["webService"] = "WebService";
    })(CustomFunctionType = Excel.CustomFunctionType || (Excel.CustomFunctionType = {}));
    var CustomFunctionMetadataFormat;
    (function (CustomFunctionMetadataFormat) {
        CustomFunctionMetadataFormat["invalid"] = "Invalid";
        CustomFunctionMetadataFormat["openApi"] = "OpenApi";
    })(CustomFunctionMetadataFormat = Excel.CustomFunctionMetadataFormat || (Excel.CustomFunctionMetadataFormat = {}));
    var DataValidationType;
    (function (DataValidationType) {
        DataValidationType["none"] = "None";
        DataValidationType["wholeNumber"] = "WholeNumber";
        DataValidationType["decimal"] = "Decimal";
        DataValidationType["list"] = "List";
        DataValidationType["date"] = "Date";
        DataValidationType["time"] = "Time";
        DataValidationType["textLength"] = "TextLength";
        DataValidationType["custom"] = "Custom";
        DataValidationType["inconsistent"] = "Inconsistent";
        DataValidationType["mixedCriteria"] = "MixedCriteria";
    })(DataValidationType = Excel.DataValidationType || (Excel.DataValidationType = {}));
    var DataValidationOperator;
    (function (DataValidationOperator) {
        DataValidationOperator["between"] = "Between";
        DataValidationOperator["notBetween"] = "NotBetween";
        DataValidationOperator["equalTo"] = "EqualTo";
        DataValidationOperator["notEqualTo"] = "NotEqualTo";
        DataValidationOperator["greaterThan"] = "GreaterThan";
        DataValidationOperator["lessThan"] = "LessThan";
        DataValidationOperator["greaterThanOrEqualTo"] = "GreaterThanOrEqualTo";
        DataValidationOperator["lessThanOrEqualTo"] = "LessThanOrEqualTo";
    })(DataValidationOperator = Excel.DataValidationOperator || (Excel.DataValidationOperator = {}));
    var DataValidationAlertStyle;
    (function (DataValidationAlertStyle) {
        DataValidationAlertStyle["stop"] = "Stop";
        DataValidationAlertStyle["warning"] = "Warning";
        DataValidationAlertStyle["information"] = "Information";
    })(DataValidationAlertStyle = Excel.DataValidationAlertStyle || (Excel.DataValidationAlertStyle = {}));
    var DeleteShiftDirection;
    (function (DeleteShiftDirection) {
        DeleteShiftDirection["up"] = "Up";
        DeleteShiftDirection["left"] = "Left";
    })(DeleteShiftDirection = Excel.DeleteShiftDirection || (Excel.DeleteShiftDirection = {}));
    var DynamicFilterCriteria;
    (function (DynamicFilterCriteria) {
        DynamicFilterCriteria["unknown"] = "Unknown";
        DynamicFilterCriteria["aboveAverage"] = "AboveAverage";
        DynamicFilterCriteria["allDatesInPeriodApril"] = "AllDatesInPeriodApril";
        DynamicFilterCriteria["allDatesInPeriodAugust"] = "AllDatesInPeriodAugust";
        DynamicFilterCriteria["allDatesInPeriodDecember"] = "AllDatesInPeriodDecember";
        DynamicFilterCriteria["allDatesInPeriodFebruray"] = "AllDatesInPeriodFebruray";
        DynamicFilterCriteria["allDatesInPeriodJanuary"] = "AllDatesInPeriodJanuary";
        DynamicFilterCriteria["allDatesInPeriodJuly"] = "AllDatesInPeriodJuly";
        DynamicFilterCriteria["allDatesInPeriodJune"] = "AllDatesInPeriodJune";
        DynamicFilterCriteria["allDatesInPeriodMarch"] = "AllDatesInPeriodMarch";
        DynamicFilterCriteria["allDatesInPeriodMay"] = "AllDatesInPeriodMay";
        DynamicFilterCriteria["allDatesInPeriodNovember"] = "AllDatesInPeriodNovember";
        DynamicFilterCriteria["allDatesInPeriodOctober"] = "AllDatesInPeriodOctober";
        DynamicFilterCriteria["allDatesInPeriodQuarter1"] = "AllDatesInPeriodQuarter1";
        DynamicFilterCriteria["allDatesInPeriodQuarter2"] = "AllDatesInPeriodQuarter2";
        DynamicFilterCriteria["allDatesInPeriodQuarter3"] = "AllDatesInPeriodQuarter3";
        DynamicFilterCriteria["allDatesInPeriodQuarter4"] = "AllDatesInPeriodQuarter4";
        DynamicFilterCriteria["allDatesInPeriodSeptember"] = "AllDatesInPeriodSeptember";
        DynamicFilterCriteria["belowAverage"] = "BelowAverage";
        DynamicFilterCriteria["lastMonth"] = "LastMonth";
        DynamicFilterCriteria["lastQuarter"] = "LastQuarter";
        DynamicFilterCriteria["lastWeek"] = "LastWeek";
        DynamicFilterCriteria["lastYear"] = "LastYear";
        DynamicFilterCriteria["nextMonth"] = "NextMonth";
        DynamicFilterCriteria["nextQuarter"] = "NextQuarter";
        DynamicFilterCriteria["nextWeek"] = "NextWeek";
        DynamicFilterCriteria["nextYear"] = "NextYear";
        DynamicFilterCriteria["thisMonth"] = "ThisMonth";
        DynamicFilterCriteria["thisQuarter"] = "ThisQuarter";
        DynamicFilterCriteria["thisWeek"] = "ThisWeek";
        DynamicFilterCriteria["thisYear"] = "ThisYear";
        DynamicFilterCriteria["today"] = "Today";
        DynamicFilterCriteria["tomorrow"] = "Tomorrow";
        DynamicFilterCriteria["yearToDate"] = "YearToDate";
        DynamicFilterCriteria["yesterday"] = "Yesterday";
    })(DynamicFilterCriteria = Excel.DynamicFilterCriteria || (Excel.DynamicFilterCriteria = {}));
    var FilterDatetimeSpecificity;
    (function (FilterDatetimeSpecificity) {
        FilterDatetimeSpecificity["year"] = "Year";
        FilterDatetimeSpecificity["month"] = "Month";
        FilterDatetimeSpecificity["day"] = "Day";
        FilterDatetimeSpecificity["hour"] = "Hour";
        FilterDatetimeSpecificity["minute"] = "Minute";
        FilterDatetimeSpecificity["second"] = "Second";
    })(FilterDatetimeSpecificity = Excel.FilterDatetimeSpecificity || (Excel.FilterDatetimeSpecificity = {}));
    var FilterOn;
    (function (FilterOn) {
        FilterOn["bottomItems"] = "BottomItems";
        FilterOn["bottomPercent"] = "BottomPercent";
        FilterOn["cellColor"] = "CellColor";
        FilterOn["dynamic"] = "Dynamic";
        FilterOn["fontColor"] = "FontColor";
        FilterOn["values"] = "Values";
        FilterOn["topItems"] = "TopItems";
        FilterOn["topPercent"] = "TopPercent";
        FilterOn["icon"] = "Icon";
        FilterOn["custom"] = "Custom";
    })(FilterOn = Excel.FilterOn || (Excel.FilterOn = {}));
    var FilterOperator;
    (function (FilterOperator) {
        FilterOperator["and"] = "And";
        FilterOperator["or"] = "Or";
    })(FilterOperator = Excel.FilterOperator || (Excel.FilterOperator = {}));
    var HorizontalAlignment;
    (function (HorizontalAlignment) {
        HorizontalAlignment["general"] = "General";
        HorizontalAlignment["left"] = "Left";
        HorizontalAlignment["center"] = "Center";
        HorizontalAlignment["right"] = "Right";
        HorizontalAlignment["fill"] = "Fill";
        HorizontalAlignment["justify"] = "Justify";
        HorizontalAlignment["centerAcrossSelection"] = "CenterAcrossSelection";
        HorizontalAlignment["distributed"] = "Distributed";
    })(HorizontalAlignment = Excel.HorizontalAlignment || (Excel.HorizontalAlignment = {}));
    var IconSet;
    (function (IconSet) {
        IconSet["invalid"] = "Invalid";
        IconSet["threeArrows"] = "ThreeArrows";
        IconSet["threeArrowsGray"] = "ThreeArrowsGray";
        IconSet["threeFlags"] = "ThreeFlags";
        IconSet["threeTrafficLights1"] = "ThreeTrafficLights1";
        IconSet["threeTrafficLights2"] = "ThreeTrafficLights2";
        IconSet["threeSigns"] = "ThreeSigns";
        IconSet["threeSymbols"] = "ThreeSymbols";
        IconSet["threeSymbols2"] = "ThreeSymbols2";
        IconSet["fourArrows"] = "FourArrows";
        IconSet["fourArrowsGray"] = "FourArrowsGray";
        IconSet["fourRedToBlack"] = "FourRedToBlack";
        IconSet["fourRating"] = "FourRating";
        IconSet["fourTrafficLights"] = "FourTrafficLights";
        IconSet["fiveArrows"] = "FiveArrows";
        IconSet["fiveArrowsGray"] = "FiveArrowsGray";
        IconSet["fiveRating"] = "FiveRating";
        IconSet["fiveQuarters"] = "FiveQuarters";
        IconSet["threeStars"] = "ThreeStars";
        IconSet["threeTriangles"] = "ThreeTriangles";
        IconSet["fiveBoxes"] = "FiveBoxes";
    })(IconSet = Excel.IconSet || (Excel.IconSet = {}));
    var ImageFittingMode;
    (function (ImageFittingMode) {
        ImageFittingMode["fit"] = "Fit";
        ImageFittingMode["fitAndCenter"] = "FitAndCenter";
        ImageFittingMode["fill"] = "Fill";
    })(ImageFittingMode = Excel.ImageFittingMode || (Excel.ImageFittingMode = {}));
    var InsertShiftDirection;
    (function (InsertShiftDirection) {
        InsertShiftDirection["down"] = "Down";
        InsertShiftDirection["right"] = "Right";
    })(InsertShiftDirection = Excel.InsertShiftDirection || (Excel.InsertShiftDirection = {}));
    var NamedItemScope;
    (function (NamedItemScope) {
        NamedItemScope["worksheet"] = "Worksheet";
        NamedItemScope["workbook"] = "Workbook";
    })(NamedItemScope = Excel.NamedItemScope || (Excel.NamedItemScope = {}));
    var NamedItemType;
    (function (NamedItemType) {
        NamedItemType["string"] = "String";
        NamedItemType["integer"] = "Integer";
        NamedItemType["double"] = "Double";
        NamedItemType["boolean"] = "Boolean";
        NamedItemType["range"] = "Range";
        NamedItemType["error"] = "Error";
        NamedItemType["array"] = "Array";
    })(NamedItemType = Excel.NamedItemType || (Excel.NamedItemType = {}));
    var RangeUnderlineStyle;
    (function (RangeUnderlineStyle) {
        RangeUnderlineStyle["none"] = "None";
        RangeUnderlineStyle["single"] = "Single";
        RangeUnderlineStyle["double"] = "Double";
        RangeUnderlineStyle["singleAccountant"] = "SingleAccountant";
        RangeUnderlineStyle["doubleAccountant"] = "DoubleAccountant";
    })(RangeUnderlineStyle = Excel.RangeUnderlineStyle || (Excel.RangeUnderlineStyle = {}));
    var SheetVisibility;
    (function (SheetVisibility) {
        SheetVisibility["visible"] = "Visible";
        SheetVisibility["hidden"] = "Hidden";
        SheetVisibility["veryHidden"] = "VeryHidden";
    })(SheetVisibility = Excel.SheetVisibility || (Excel.SheetVisibility = {}));
    var EventTriggerSource;
    (function (EventTriggerSource) {
        EventTriggerSource["unknown"] = "Unknown";
        EventTriggerSource["thisLocalAddin"] = "ThisLocalAddin";
    })(EventTriggerSource = Excel.EventTriggerSource || (Excel.EventTriggerSource = {}));
    var RangeValueType;
    (function (RangeValueType) {
        RangeValueType["unknown"] = "Unknown";
        RangeValueType["empty"] = "Empty";
        RangeValueType["string"] = "String";
        RangeValueType["integer"] = "Integer";
        RangeValueType["double"] = "Double";
        RangeValueType["boolean"] = "Boolean";
        RangeValueType["error"] = "Error";
        RangeValueType["richValue"] = "RichValue";
    })(RangeValueType = Excel.RangeValueType || (Excel.RangeValueType = {}));
    var KeyboardDirection;
    (function (KeyboardDirection) {
        KeyboardDirection["left"] = "Left";
        KeyboardDirection["right"] = "Right";
        KeyboardDirection["up"] = "Up";
        KeyboardDirection["down"] = "Down";
    })(KeyboardDirection = Excel.KeyboardDirection || (Excel.KeyboardDirection = {}));
    var SearchDirection;
    (function (SearchDirection) {
        SearchDirection["forward"] = "Forward";
        SearchDirection["backwards"] = "Backwards";
    })(SearchDirection = Excel.SearchDirection || (Excel.SearchDirection = {}));
    var SortOrientation;
    (function (SortOrientation) {
        SortOrientation["rows"] = "Rows";
        SortOrientation["columns"] = "Columns";
    })(SortOrientation = Excel.SortOrientation || (Excel.SortOrientation = {}));
    var SortOn;
    (function (SortOn) {
        SortOn["value"] = "Value";
        SortOn["cellColor"] = "CellColor";
        SortOn["fontColor"] = "FontColor";
        SortOn["icon"] = "Icon";
    })(SortOn = Excel.SortOn || (Excel.SortOn = {}));
    var SortDataOption;
    (function (SortDataOption) {
        SortDataOption["normal"] = "Normal";
        SortDataOption["textAsNumber"] = "TextAsNumber";
    })(SortDataOption = Excel.SortDataOption || (Excel.SortDataOption = {}));
    var SortMethod;
    (function (SortMethod) {
        SortMethod["pinYin"] = "PinYin";
        SortMethod["strokeCount"] = "StrokeCount";
    })(SortMethod = Excel.SortMethod || (Excel.SortMethod = {}));
    var VerticalAlignment;
    (function (VerticalAlignment) {
        VerticalAlignment["top"] = "Top";
        VerticalAlignment["center"] = "Center";
        VerticalAlignment["bottom"] = "Bottom";
        VerticalAlignment["justify"] = "Justify";
        VerticalAlignment["distributed"] = "Distributed";
    })(VerticalAlignment = Excel.VerticalAlignment || (Excel.VerticalAlignment = {}));
    var InsertDeleteCellsShiftDirection;
    (function (InsertDeleteCellsShiftDirection) {
        InsertDeleteCellsShiftDirection["none"] = "None";
        InsertDeleteCellsShiftDirection["shiftCellLeft"] = "ShiftCellLeft";
        InsertDeleteCellsShiftDirection["shiftCellUp"] = "ShiftCellUp";
        InsertDeleteCellsShiftDirection["shiftCellRight"] = "ShiftCellRight";
        InsertDeleteCellsShiftDirection["shiftCellDown"] = "ShiftCellDown";
    })(InsertDeleteCellsShiftDirection = Excel.InsertDeleteCellsShiftDirection || (Excel.InsertDeleteCellsShiftDirection = {}));
    var DocumentPropertyType;
    (function (DocumentPropertyType) {
        DocumentPropertyType["number"] = "Number";
        DocumentPropertyType["boolean"] = "Boolean";
        DocumentPropertyType["date"] = "Date";
        DocumentPropertyType["string"] = "String";
        DocumentPropertyType["float"] = "Float";
    })(DocumentPropertyType = Excel.DocumentPropertyType || (Excel.DocumentPropertyType = {}));
    var EventSource;
    (function (EventSource) {
        EventSource["local"] = "Local";
        EventSource["remote"] = "Remote";
    })(EventSource = Excel.EventSource || (Excel.EventSource = {}));
    var DataChangeType;
    (function (DataChangeType) {
        DataChangeType["unknown"] = "Unknown";
        DataChangeType["rangeEdited"] = "RangeEdited";
        DataChangeType["rowInserted"] = "RowInserted";
        DataChangeType["rowDeleted"] = "RowDeleted";
        DataChangeType["columnInserted"] = "ColumnInserted";
        DataChangeType["columnDeleted"] = "ColumnDeleted";
        DataChangeType["cellInserted"] = "CellInserted";
        DataChangeType["cellDeleted"] = "CellDeleted";
    })(DataChangeType = Excel.DataChangeType || (Excel.DataChangeType = {}));
    var RowHiddenChangeType;
    (function (RowHiddenChangeType) {
        RowHiddenChangeType["unhidden"] = "Unhidden";
        RowHiddenChangeType["hidden"] = "Hidden";
    })(RowHiddenChangeType = Excel.RowHiddenChangeType || (Excel.RowHiddenChangeType = {}));
    var CommentChangeType;
    (function (CommentChangeType) {
        CommentChangeType["commentEdited"] = "CommentEdited";
        CommentChangeType["commentResolved"] = "CommentResolved";
        CommentChangeType["commentReopened"] = "CommentReopened";
        CommentChangeType["replyAdded"] = "ReplyAdded";
        CommentChangeType["replyDeleted"] = "ReplyDeleted";
        CommentChangeType["replyEdited"] = "ReplyEdited";
    })(CommentChangeType = Excel.CommentChangeType || (Excel.CommentChangeType = {}));
    var EventType;
    (function (EventType) {
        EventType["worksheetChanged"] = "WorksheetChanged";
        EventType["worksheetSelectionChanged"] = "WorksheetSelectionChanged";
        EventType["worksheetAdded"] = "WorksheetAdded";
        EventType["worksheetActivated"] = "WorksheetActivated";
        EventType["worksheetDeactivated"] = "WorksheetDeactivated";
        EventType["tableChanged"] = "TableChanged";
        EventType["tableSelectionChanged"] = "TableSelectionChanged";
        EventType["worksheetDeleted"] = "WorksheetDeleted";
        EventType["chartAdded"] = "ChartAdded";
        EventType["chartActivated"] = "ChartActivated";
        EventType["chartDeactivated"] = "ChartDeactivated";
        EventType["chartDeleted"] = "ChartDeleted";
        EventType["worksheetCalculated"] = "WorksheetCalculated";
        EventType["visualSelectionChanged"] = "VisualSelectionChanged";
        EventType["agaveVisualUpdate"] = "AgaveVisualUpdate";
        EventType["tableAdded"] = "TableAdded";
        EventType["tableDeleted"] = "TableDeleted";
        EventType["tableFiltered"] = "TableFiltered";
        EventType["worksheetFiltered"] = "WorksheetFiltered";
        EventType["shapeActivated"] = "ShapeActivated";
        EventType["shapeDeactivated"] = "ShapeDeactivated";
        EventType["visualChange"] = "VisualChange";
        EventType["workbookAutoSaveSettingChanged"] = "WorkbookAutoSaveSettingChanged";
        EventType["worksheetFormatChanged"] = "WorksheetFormatChanged";
        EventType["wacoperationEvent"] = "WACOperationEvent";
        EventType["ribbonCommandExecuted"] = "RibbonCommandExecuted";
        EventType["worksheetRowSorted"] = "WorksheetRowSorted";
        EventType["worksheetColumnSorted"] = "WorksheetColumnSorted";
        EventType["worksheetSingleClicked"] = "WorksheetSingleClicked";
        EventType["worksheetRowHiddenChanged"] = "WorksheetRowHiddenChanged";
        EventType["recordingStateChangedEvent"] = "RecordingStateChangedEvent";
        EventType["commentAdded"] = "CommentAdded";
        EventType["commentDeleted"] = "CommentDeleted";
        EventType["commentChanged"] = "CommentChanged";
        EventType["linkedDataTypeRefreshRequestCompleted"] = "LinkedDataTypeRefreshRequestCompleted";
        EventType["linkedDataTypeRefreshModeChanged"] = "LinkedDataTypeRefreshModeChanged";
        EventType["linkedDataTypeLinkedDataTypeAdded"] = "LinkedDataTypeLinkedDataTypeAdded";
        EventType["worksheetFormulaChanged"] = "WorksheetFormulaChanged";
        EventType["workbookActivated"] = "WorkbookActivated";
        EventType["linkedWorkbookWorkbookLinksChanged"] = "LinkedWorkbookWorkbookLinksChanged";
        EventType["linkedWorkbookRefreshCompleted"] = "LinkedWorkbookRefreshCompleted";
        EventType["worksheetProtectionChanged"] = "WorksheetProtectionChanged";
        EventType["worksheetNameChanged"] = "WorksheetNameChanged";
        EventType["worksheetVisibilityChanged"] = "WorksheetVisibilityChanged";
        EventType["worksheetMoved"] = "WorksheetMoved";
        EventType["lineageActivityUpdateAvailable"] = "LineageActivityUpdateAvailable";
    })(EventType = Excel.EventType || (Excel.EventType = {}));
    var DocumentPropertyItem;
    (function (DocumentPropertyItem) {
        DocumentPropertyItem["title"] = "Title";
        DocumentPropertyItem["subject"] = "Subject";
        DocumentPropertyItem["author"] = "Author";
        DocumentPropertyItem["keywords"] = "Keywords";
        DocumentPropertyItem["comments"] = "Comments";
        DocumentPropertyItem["template"] = "Template";
        DocumentPropertyItem["lastAuth"] = "LastAuth";
        DocumentPropertyItem["revision"] = "Revision";
        DocumentPropertyItem["appName"] = "AppName";
        DocumentPropertyItem["lastPrint"] = "LastPrint";
        DocumentPropertyItem["creation"] = "Creation";
        DocumentPropertyItem["lastSave"] = "LastSave";
        DocumentPropertyItem["category"] = "Category";
        DocumentPropertyItem["format"] = "Format";
        DocumentPropertyItem["manager"] = "Manager";
        DocumentPropertyItem["company"] = "Company";
    })(DocumentPropertyItem = Excel.DocumentPropertyItem || (Excel.DocumentPropertyItem = {}));
    var SubtotalLocationType;
    (function (SubtotalLocationType) {
        SubtotalLocationType["atTop"] = "AtTop";
        SubtotalLocationType["atBottom"] = "AtBottom";
        SubtotalLocationType["off"] = "Off";
    })(SubtotalLocationType = Excel.SubtotalLocationType || (Excel.SubtotalLocationType = {}));
    var PivotLayoutType;
    (function (PivotLayoutType) {
        PivotLayoutType["compact"] = "Compact";
        PivotLayoutType["tabular"] = "Tabular";
        PivotLayoutType["outline"] = "Outline";
    })(PivotLayoutType = Excel.PivotLayoutType || (Excel.PivotLayoutType = {}));
    var ProtectionSelectionMode;
    (function (ProtectionSelectionMode) {
        ProtectionSelectionMode["normal"] = "Normal";
        ProtectionSelectionMode["unlocked"] = "Unlocked";
        ProtectionSelectionMode["none"] = "None";
    })(ProtectionSelectionMode = Excel.ProtectionSelectionMode || (Excel.ProtectionSelectionMode = {}));
    var PageOrientation;
    (function (PageOrientation) {
        PageOrientation["portrait"] = "Portrait";
        PageOrientation["landscape"] = "Landscape";
    })(PageOrientation = Excel.PageOrientation || (Excel.PageOrientation = {}));
    var PaperType;
    (function (PaperType) {
        PaperType["letter"] = "Letter";
        PaperType["letterSmall"] = "LetterSmall";
        PaperType["tabloid"] = "Tabloid";
        PaperType["ledger"] = "Ledger";
        PaperType["legal"] = "Legal";
        PaperType["statement"] = "Statement";
        PaperType["executive"] = "Executive";
        PaperType["a3"] = "A3";
        PaperType["a4"] = "A4";
        PaperType["a4Small"] = "A4Small";
        PaperType["a5"] = "A5";
        PaperType["b4"] = "B4";
        PaperType["b5"] = "B5";
        PaperType["folio"] = "Folio";
        PaperType["quatro"] = "Quatro";
        PaperType["paper10x14"] = "Paper10x14";
        PaperType["paper11x17"] = "Paper11x17";
        PaperType["note"] = "Note";
        PaperType["envelope9"] = "Envelope9";
        PaperType["envelope10"] = "Envelope10";
        PaperType["envelope11"] = "Envelope11";
        PaperType["envelope12"] = "Envelope12";
        PaperType["envelope14"] = "Envelope14";
        PaperType["csheet"] = "Csheet";
        PaperType["dsheet"] = "Dsheet";
        PaperType["esheet"] = "Esheet";
        PaperType["envelopeDL"] = "EnvelopeDL";
        PaperType["envelopeC5"] = "EnvelopeC5";
        PaperType["envelopeC3"] = "EnvelopeC3";
        PaperType["envelopeC4"] = "EnvelopeC4";
        PaperType["envelopeC6"] = "EnvelopeC6";
        PaperType["envelopeC65"] = "EnvelopeC65";
        PaperType["envelopeB4"] = "EnvelopeB4";
        PaperType["envelopeB5"] = "EnvelopeB5";
        PaperType["envelopeB6"] = "EnvelopeB6";
        PaperType["envelopeItaly"] = "EnvelopeItaly";
        PaperType["envelopeMonarch"] = "EnvelopeMonarch";
        PaperType["envelopePersonal"] = "EnvelopePersonal";
        PaperType["fanfoldUS"] = "FanfoldUS";
        PaperType["fanfoldStdGerman"] = "FanfoldStdGerman";
        PaperType["fanfoldLegalGerman"] = "FanfoldLegalGerman";
    })(PaperType = Excel.PaperType || (Excel.PaperType = {}));
    var ReadingOrder;
    (function (ReadingOrder) {
        ReadingOrder["context"] = "Context";
        ReadingOrder["leftToRight"] = "LeftToRight";
        ReadingOrder["rightToLeft"] = "RightToLeft";
    })(ReadingOrder = Excel.ReadingOrder || (Excel.ReadingOrder = {}));
    var BuiltInStyle;
    (function (BuiltInStyle) {
        BuiltInStyle["normal"] = "Normal";
        BuiltInStyle["comma"] = "Comma";
        BuiltInStyle["currency"] = "Currency";
        BuiltInStyle["percent"] = "Percent";
        BuiltInStyle["wholeComma"] = "WholeComma";
        BuiltInStyle["wholeDollar"] = "WholeDollar";
        BuiltInStyle["hlink"] = "Hlink";
        BuiltInStyle["hlinkTrav"] = "HlinkTrav";
        BuiltInStyle["note"] = "Note";
        BuiltInStyle["warningText"] = "WarningText";
        BuiltInStyle["emphasis1"] = "Emphasis1";
        BuiltInStyle["emphasis2"] = "Emphasis2";
        BuiltInStyle["emphasis3"] = "Emphasis3";
        BuiltInStyle["sheetTitle"] = "SheetTitle";
        BuiltInStyle["heading1"] = "Heading1";
        BuiltInStyle["heading2"] = "Heading2";
        BuiltInStyle["heading3"] = "Heading3";
        BuiltInStyle["heading4"] = "Heading4";
        BuiltInStyle["input"] = "Input";
        BuiltInStyle["output"] = "Output";
        BuiltInStyle["calculation"] = "Calculation";
        BuiltInStyle["checkCell"] = "CheckCell";
        BuiltInStyle["linkedCell"] = "LinkedCell";
        BuiltInStyle["total"] = "Total";
        BuiltInStyle["good"] = "Good";
        BuiltInStyle["bad"] = "Bad";
        BuiltInStyle["neutral"] = "Neutral";
        BuiltInStyle["accent1"] = "Accent1";
        BuiltInStyle["accent1_20"] = "Accent1_20";
        BuiltInStyle["accent1_40"] = "Accent1_40";
        BuiltInStyle["accent1_60"] = "Accent1_60";
        BuiltInStyle["accent2"] = "Accent2";
        BuiltInStyle["accent2_20"] = "Accent2_20";
        BuiltInStyle["accent2_40"] = "Accent2_40";
        BuiltInStyle["accent2_60"] = "Accent2_60";
        BuiltInStyle["accent3"] = "Accent3";
        BuiltInStyle["accent3_20"] = "Accent3_20";
        BuiltInStyle["accent3_40"] = "Accent3_40";
        BuiltInStyle["accent3_60"] = "Accent3_60";
        BuiltInStyle["accent4"] = "Accent4";
        BuiltInStyle["accent4_20"] = "Accent4_20";
        BuiltInStyle["accent4_40"] = "Accent4_40";
        BuiltInStyle["accent4_60"] = "Accent4_60";
        BuiltInStyle["accent5"] = "Accent5";
        BuiltInStyle["accent5_20"] = "Accent5_20";
        BuiltInStyle["accent5_40"] = "Accent5_40";
        BuiltInStyle["accent5_60"] = "Accent5_60";
        BuiltInStyle["accent6"] = "Accent6";
        BuiltInStyle["accent6_20"] = "Accent6_20";
        BuiltInStyle["accent6_40"] = "Accent6_40";
        BuiltInStyle["accent6_60"] = "Accent6_60";
        BuiltInStyle["explanatoryText"] = "ExplanatoryText";
    })(BuiltInStyle = Excel.BuiltInStyle || (Excel.BuiltInStyle = {}));
    var PrintErrorType;
    (function (PrintErrorType) {
        PrintErrorType["asDisplayed"] = "AsDisplayed";
        PrintErrorType["blank"] = "Blank";
        PrintErrorType["dash"] = "Dash";
        PrintErrorType["notAvailable"] = "NotAvailable";
    })(PrintErrorType = Excel.PrintErrorType || (Excel.PrintErrorType = {}));
    var WorksheetPositionType;
    (function (WorksheetPositionType) {
        WorksheetPositionType["none"] = "None";
        WorksheetPositionType["before"] = "Before";
        WorksheetPositionType["after"] = "After";
        WorksheetPositionType["beginning"] = "Beginning";
        WorksheetPositionType["end"] = "End";
    })(WorksheetPositionType = Excel.WorksheetPositionType || (Excel.WorksheetPositionType = {}));
    var PrintComments;
    (function (PrintComments) {
        PrintComments["noComments"] = "NoComments";
        PrintComments["endSheet"] = "EndSheet";
        PrintComments["inPlace"] = "InPlace";
    })(PrintComments = Excel.PrintComments || (Excel.PrintComments = {}));
    var PrintOrder;
    (function (PrintOrder) {
        PrintOrder["downThenOver"] = "DownThenOver";
        PrintOrder["overThenDown"] = "OverThenDown";
    })(PrintOrder = Excel.PrintOrder || (Excel.PrintOrder = {}));
    var PrintMarginUnit;
    (function (PrintMarginUnit) {
        PrintMarginUnit["points"] = "Points";
        PrintMarginUnit["inches"] = "Inches";
        PrintMarginUnit["centimeters"] = "Centimeters";
    })(PrintMarginUnit = Excel.PrintMarginUnit || (Excel.PrintMarginUnit = {}));
    var HeaderFooterState;
    (function (HeaderFooterState) {
        HeaderFooterState["default"] = "Default";
        HeaderFooterState["firstAndDefault"] = "FirstAndDefault";
        HeaderFooterState["oddAndEven"] = "OddAndEven";
        HeaderFooterState["firstOddAndEven"] = "FirstOddAndEven";
    })(HeaderFooterState = Excel.HeaderFooterState || (Excel.HeaderFooterState = {}));
    var AutoFillType;
    (function (AutoFillType) {
        AutoFillType["fillDefault"] = "FillDefault";
        AutoFillType["fillCopy"] = "FillCopy";
        AutoFillType["fillSeries"] = "FillSeries";
        AutoFillType["fillFormats"] = "FillFormats";
        AutoFillType["fillValues"] = "FillValues";
        AutoFillType["fillDays"] = "FillDays";
        AutoFillType["fillWeekdays"] = "FillWeekdays";
        AutoFillType["fillMonths"] = "FillMonths";
        AutoFillType["fillYears"] = "FillYears";
        AutoFillType["linearTrend"] = "LinearTrend";
        AutoFillType["growthTrend"] = "GrowthTrend";
        AutoFillType["flashFill"] = "FlashFill";
    })(AutoFillType = Excel.AutoFillType || (Excel.AutoFillType = {}));
    var GroupOption;
    (function (GroupOption) {
        GroupOption["byRows"] = "ByRows";
        GroupOption["byColumns"] = "ByColumns";
    })(GroupOption = Excel.GroupOption || (Excel.GroupOption = {}));
    var RangeCopyType;
    (function (RangeCopyType) {
        RangeCopyType["all"] = "All";
        RangeCopyType["formulas"] = "Formulas";
        RangeCopyType["values"] = "Values";
        RangeCopyType["formats"] = "Formats";
    })(RangeCopyType = Excel.RangeCopyType || (Excel.RangeCopyType = {}));
    var LinkedDataTypeState;
    (function (LinkedDataTypeState) {
        LinkedDataTypeState["none"] = "None";
        LinkedDataTypeState["validLinkedData"] = "ValidLinkedData";
        LinkedDataTypeState["disambiguationNeeded"] = "DisambiguationNeeded";
        LinkedDataTypeState["brokenLinkedData"] = "BrokenLinkedData";
        LinkedDataTypeState["fetchingData"] = "FetchingData";
    })(LinkedDataTypeState = Excel.LinkedDataTypeState || (Excel.LinkedDataTypeState = {}));
    var GeometricShapeType;
    (function (GeometricShapeType) {
        GeometricShapeType["lineInverse"] = "LineInverse";
        GeometricShapeType["triangle"] = "Triangle";
        GeometricShapeType["rightTriangle"] = "RightTriangle";
        GeometricShapeType["rectangle"] = "Rectangle";
        GeometricShapeType["diamond"] = "Diamond";
        GeometricShapeType["parallelogram"] = "Parallelogram";
        GeometricShapeType["trapezoid"] = "Trapezoid";
        GeometricShapeType["nonIsoscelesTrapezoid"] = "NonIsoscelesTrapezoid";
        GeometricShapeType["pentagon"] = "Pentagon";
        GeometricShapeType["hexagon"] = "Hexagon";
        GeometricShapeType["heptagon"] = "Heptagon";
        GeometricShapeType["octagon"] = "Octagon";
        GeometricShapeType["decagon"] = "Decagon";
        GeometricShapeType["dodecagon"] = "Dodecagon";
        GeometricShapeType["star4"] = "Star4";
        GeometricShapeType["star5"] = "Star5";
        GeometricShapeType["star6"] = "Star6";
        GeometricShapeType["star7"] = "Star7";
        GeometricShapeType["star8"] = "Star8";
        GeometricShapeType["star10"] = "Star10";
        GeometricShapeType["star12"] = "Star12";
        GeometricShapeType["star16"] = "Star16";
        GeometricShapeType["star24"] = "Star24";
        GeometricShapeType["star32"] = "Star32";
        GeometricShapeType["roundRectangle"] = "RoundRectangle";
        GeometricShapeType["round1Rectangle"] = "Round1Rectangle";
        GeometricShapeType["round2SameRectangle"] = "Round2SameRectangle";
        GeometricShapeType["round2DiagonalRectangle"] = "Round2DiagonalRectangle";
        GeometricShapeType["snipRoundRectangle"] = "SnipRoundRectangle";
        GeometricShapeType["snip1Rectangle"] = "Snip1Rectangle";
        GeometricShapeType["snip2SameRectangle"] = "Snip2SameRectangle";
        GeometricShapeType["snip2DiagonalRectangle"] = "Snip2DiagonalRectangle";
        GeometricShapeType["plaque"] = "Plaque";
        GeometricShapeType["ellipse"] = "Ellipse";
        GeometricShapeType["teardrop"] = "Teardrop";
        GeometricShapeType["homePlate"] = "HomePlate";
        GeometricShapeType["chevron"] = "Chevron";
        GeometricShapeType["pieWedge"] = "PieWedge";
        GeometricShapeType["pie"] = "Pie";
        GeometricShapeType["blockArc"] = "BlockArc";
        GeometricShapeType["donut"] = "Donut";
        GeometricShapeType["noSmoking"] = "NoSmoking";
        GeometricShapeType["rightArrow"] = "RightArrow";
        GeometricShapeType["leftArrow"] = "LeftArrow";
        GeometricShapeType["upArrow"] = "UpArrow";
        GeometricShapeType["downArrow"] = "DownArrow";
        GeometricShapeType["stripedRightArrow"] = "StripedRightArrow";
        GeometricShapeType["notchedRightArrow"] = "NotchedRightArrow";
        GeometricShapeType["bentUpArrow"] = "BentUpArrow";
        GeometricShapeType["leftRightArrow"] = "LeftRightArrow";
        GeometricShapeType["upDownArrow"] = "UpDownArrow";
        GeometricShapeType["leftUpArrow"] = "LeftUpArrow";
        GeometricShapeType["leftRightUpArrow"] = "LeftRightUpArrow";
        GeometricShapeType["quadArrow"] = "QuadArrow";
        GeometricShapeType["leftArrowCallout"] = "LeftArrowCallout";
        GeometricShapeType["rightArrowCallout"] = "RightArrowCallout";
        GeometricShapeType["upArrowCallout"] = "UpArrowCallout";
        GeometricShapeType["downArrowCallout"] = "DownArrowCallout";
        GeometricShapeType["leftRightArrowCallout"] = "LeftRightArrowCallout";
        GeometricShapeType["upDownArrowCallout"] = "UpDownArrowCallout";
        GeometricShapeType["quadArrowCallout"] = "QuadArrowCallout";
        GeometricShapeType["bentArrow"] = "BentArrow";
        GeometricShapeType["uturnArrow"] = "UturnArrow";
        GeometricShapeType["circularArrow"] = "CircularArrow";
        GeometricShapeType["leftCircularArrow"] = "LeftCircularArrow";
        GeometricShapeType["leftRightCircularArrow"] = "LeftRightCircularArrow";
        GeometricShapeType["curvedRightArrow"] = "CurvedRightArrow";
        GeometricShapeType["curvedLeftArrow"] = "CurvedLeftArrow";
        GeometricShapeType["curvedUpArrow"] = "CurvedUpArrow";
        GeometricShapeType["curvedDownArrow"] = "CurvedDownArrow";
        GeometricShapeType["swooshArrow"] = "SwooshArrow";
        GeometricShapeType["cube"] = "Cube";
        GeometricShapeType["can"] = "Can";
        GeometricShapeType["lightningBolt"] = "LightningBolt";
        GeometricShapeType["heart"] = "Heart";
        GeometricShapeType["sun"] = "Sun";
        GeometricShapeType["moon"] = "Moon";
        GeometricShapeType["smileyFace"] = "SmileyFace";
        GeometricShapeType["irregularSeal1"] = "IrregularSeal1";
        GeometricShapeType["irregularSeal2"] = "IrregularSeal2";
        GeometricShapeType["foldedCorner"] = "FoldedCorner";
        GeometricShapeType["bevel"] = "Bevel";
        GeometricShapeType["frame"] = "Frame";
        GeometricShapeType["halfFrame"] = "HalfFrame";
        GeometricShapeType["corner"] = "Corner";
        GeometricShapeType["diagonalStripe"] = "DiagonalStripe";
        GeometricShapeType["chord"] = "Chord";
        GeometricShapeType["arc"] = "Arc";
        GeometricShapeType["leftBracket"] = "LeftBracket";
        GeometricShapeType["rightBracket"] = "RightBracket";
        GeometricShapeType["leftBrace"] = "LeftBrace";
        GeometricShapeType["rightBrace"] = "RightBrace";
        GeometricShapeType["bracketPair"] = "BracketPair";
        GeometricShapeType["bracePair"] = "BracePair";
        GeometricShapeType["callout1"] = "Callout1";
        GeometricShapeType["callout2"] = "Callout2";
        GeometricShapeType["callout3"] = "Callout3";
        GeometricShapeType["accentCallout1"] = "AccentCallout1";
        GeometricShapeType["accentCallout2"] = "AccentCallout2";
        GeometricShapeType["accentCallout3"] = "AccentCallout3";
        GeometricShapeType["borderCallout1"] = "BorderCallout1";
        GeometricShapeType["borderCallout2"] = "BorderCallout2";
        GeometricShapeType["borderCallout3"] = "BorderCallout3";
        GeometricShapeType["accentBorderCallout1"] = "AccentBorderCallout1";
        GeometricShapeType["accentBorderCallout2"] = "AccentBorderCallout2";
        GeometricShapeType["accentBorderCallout3"] = "AccentBorderCallout3";
        GeometricShapeType["wedgeRectCallout"] = "WedgeRectCallout";
        GeometricShapeType["wedgeRRectCallout"] = "WedgeRRectCallout";
        GeometricShapeType["wedgeEllipseCallout"] = "WedgeEllipseCallout";
        GeometricShapeType["cloudCallout"] = "CloudCallout";
        GeometricShapeType["cloud"] = "Cloud";
        GeometricShapeType["ribbon"] = "Ribbon";
        GeometricShapeType["ribbon2"] = "Ribbon2";
        GeometricShapeType["ellipseRibbon"] = "EllipseRibbon";
        GeometricShapeType["ellipseRibbon2"] = "EllipseRibbon2";
        GeometricShapeType["leftRightRibbon"] = "LeftRightRibbon";
        GeometricShapeType["verticalScroll"] = "VerticalScroll";
        GeometricShapeType["horizontalScroll"] = "HorizontalScroll";
        GeometricShapeType["wave"] = "Wave";
        GeometricShapeType["doubleWave"] = "DoubleWave";
        GeometricShapeType["plus"] = "Plus";
        GeometricShapeType["flowChartProcess"] = "FlowChartProcess";
        GeometricShapeType["flowChartDecision"] = "FlowChartDecision";
        GeometricShapeType["flowChartInputOutput"] = "FlowChartInputOutput";
        GeometricShapeType["flowChartPredefinedProcess"] = "FlowChartPredefinedProcess";
        GeometricShapeType["flowChartInternalStorage"] = "FlowChartInternalStorage";
        GeometricShapeType["flowChartDocument"] = "FlowChartDocument";
        GeometricShapeType["flowChartMultidocument"] = "FlowChartMultidocument";
        GeometricShapeType["flowChartTerminator"] = "FlowChartTerminator";
        GeometricShapeType["flowChartPreparation"] = "FlowChartPreparation";
        GeometricShapeType["flowChartManualInput"] = "FlowChartManualInput";
        GeometricShapeType["flowChartManualOperation"] = "FlowChartManualOperation";
        GeometricShapeType["flowChartConnector"] = "FlowChartConnector";
        GeometricShapeType["flowChartPunchedCard"] = "FlowChartPunchedCard";
        GeometricShapeType["flowChartPunchedTape"] = "FlowChartPunchedTape";
        GeometricShapeType["flowChartSummingJunction"] = "FlowChartSummingJunction";
        GeometricShapeType["flowChartOr"] = "FlowChartOr";
        GeometricShapeType["flowChartCollate"] = "FlowChartCollate";
        GeometricShapeType["flowChartSort"] = "FlowChartSort";
        GeometricShapeType["flowChartExtract"] = "FlowChartExtract";
        GeometricShapeType["flowChartMerge"] = "FlowChartMerge";
        GeometricShapeType["flowChartOfflineStorage"] = "FlowChartOfflineStorage";
        GeometricShapeType["flowChartOnlineStorage"] = "FlowChartOnlineStorage";
        GeometricShapeType["flowChartMagneticTape"] = "FlowChartMagneticTape";
        GeometricShapeType["flowChartMagneticDisk"] = "FlowChartMagneticDisk";
        GeometricShapeType["flowChartMagneticDrum"] = "FlowChartMagneticDrum";
        GeometricShapeType["flowChartDisplay"] = "FlowChartDisplay";
        GeometricShapeType["flowChartDelay"] = "FlowChartDelay";
        GeometricShapeType["flowChartAlternateProcess"] = "FlowChartAlternateProcess";
        GeometricShapeType["flowChartOffpageConnector"] = "FlowChartOffpageConnector";
        GeometricShapeType["actionButtonBlank"] = "ActionButtonBlank";
        GeometricShapeType["actionButtonHome"] = "ActionButtonHome";
        GeometricShapeType["actionButtonHelp"] = "ActionButtonHelp";
        GeometricShapeType["actionButtonInformation"] = "ActionButtonInformation";
        GeometricShapeType["actionButtonForwardNext"] = "ActionButtonForwardNext";
        GeometricShapeType["actionButtonBackPrevious"] = "ActionButtonBackPrevious";
        GeometricShapeType["actionButtonEnd"] = "ActionButtonEnd";
        GeometricShapeType["actionButtonBeginning"] = "ActionButtonBeginning";
        GeometricShapeType["actionButtonReturn"] = "ActionButtonReturn";
        GeometricShapeType["actionButtonDocument"] = "ActionButtonDocument";
        GeometricShapeType["actionButtonSound"] = "ActionButtonSound";
        GeometricShapeType["actionButtonMovie"] = "ActionButtonMovie";
        GeometricShapeType["gear6"] = "Gear6";
        GeometricShapeType["gear9"] = "Gear9";
        GeometricShapeType["funnel"] = "Funnel";
        GeometricShapeType["mathPlus"] = "MathPlus";
        GeometricShapeType["mathMinus"] = "MathMinus";
        GeometricShapeType["mathMultiply"] = "MathMultiply";
        GeometricShapeType["mathDivide"] = "MathDivide";
        GeometricShapeType["mathEqual"] = "MathEqual";
        GeometricShapeType["mathNotEqual"] = "MathNotEqual";
        GeometricShapeType["cornerTabs"] = "CornerTabs";
        GeometricShapeType["squareTabs"] = "SquareTabs";
        GeometricShapeType["plaqueTabs"] = "PlaqueTabs";
        GeometricShapeType["chartX"] = "ChartX";
        GeometricShapeType["chartStar"] = "ChartStar";
        GeometricShapeType["chartPlus"] = "ChartPlus";
    })(GeometricShapeType = Excel.GeometricShapeType || (Excel.GeometricShapeType = {}));
    var ConnectorType;
    (function (ConnectorType) {
        ConnectorType["straight"] = "Straight";
        ConnectorType["elbow"] = "Elbow";
        ConnectorType["curve"] = "Curve";
    })(ConnectorType = Excel.ConnectorType || (Excel.ConnectorType = {}));
    var ContentType;
    (function (ContentType) {
        ContentType["plain"] = "Plain";
        ContentType["mention"] = "Mention";
    })(ContentType = Excel.ContentType || (Excel.ContentType = {}));
    var SpecialCellType;
    (function (SpecialCellType) {
        SpecialCellType["conditionalFormats"] = "ConditionalFormats";
        SpecialCellType["dataValidations"] = "DataValidations";
        SpecialCellType["blanks"] = "Blanks";
        SpecialCellType["constants"] = "Constants";
        SpecialCellType["formulas"] = "Formulas";
        SpecialCellType["sameConditionalFormat"] = "SameConditionalFormat";
        SpecialCellType["sameDataValidation"] = "SameDataValidation";
        SpecialCellType["visible"] = "Visible";
    })(SpecialCellType = Excel.SpecialCellType || (Excel.SpecialCellType = {}));
    var SpecialCellValueType;
    (function (SpecialCellValueType) {
        SpecialCellValueType["all"] = "All";
        SpecialCellValueType["errors"] = "Errors";
        SpecialCellValueType["errorsLogical"] = "ErrorsLogical";
        SpecialCellValueType["errorsNumbers"] = "ErrorsNumbers";
        SpecialCellValueType["errorsText"] = "ErrorsText";
        SpecialCellValueType["errorsLogicalNumber"] = "ErrorsLogicalNumber";
        SpecialCellValueType["errorsLogicalText"] = "ErrorsLogicalText";
        SpecialCellValueType["errorsNumberText"] = "ErrorsNumberText";
        SpecialCellValueType["logical"] = "Logical";
        SpecialCellValueType["logicalNumbers"] = "LogicalNumbers";
        SpecialCellValueType["logicalText"] = "LogicalText";
        SpecialCellValueType["logicalNumbersText"] = "LogicalNumbersText";
        SpecialCellValueType["numbers"] = "Numbers";
        SpecialCellValueType["numbersText"] = "NumbersText";
        SpecialCellValueType["text"] = "Text";
    })(SpecialCellValueType = Excel.SpecialCellValueType || (Excel.SpecialCellValueType = {}));
    var Placement;
    (function (Placement) {
        Placement["twoCell"] = "TwoCell";
        Placement["oneCell"] = "OneCell";
        Placement["absolute"] = "Absolute";
    })(Placement = Excel.Placement || (Excel.Placement = {}));
    var FillPattern;
    (function (FillPattern) {
        FillPattern["none"] = "None";
        FillPattern["solid"] = "Solid";
        FillPattern["gray50"] = "Gray50";
        FillPattern["gray75"] = "Gray75";
        FillPattern["gray25"] = "Gray25";
        FillPattern["horizontal"] = "Horizontal";
        FillPattern["vertical"] = "Vertical";
        FillPattern["down"] = "Down";
        FillPattern["up"] = "Up";
        FillPattern["checker"] = "Checker";
        FillPattern["semiGray75"] = "SemiGray75";
        FillPattern["lightHorizontal"] = "LightHorizontal";
        FillPattern["lightVertical"] = "LightVertical";
        FillPattern["lightDown"] = "LightDown";
        FillPattern["lightUp"] = "LightUp";
        FillPattern["grid"] = "Grid";
        FillPattern["crissCross"] = "CrissCross";
        FillPattern["gray16"] = "Gray16";
        FillPattern["gray8"] = "Gray8";
        FillPattern["linearGradient"] = "LinearGradient";
        FillPattern["rectangularGradient"] = "RectangularGradient";
    })(FillPattern = Excel.FillPattern || (Excel.FillPattern = {}));
    var ShapeTextHorizontalAlignment;
    (function (ShapeTextHorizontalAlignment) {
        ShapeTextHorizontalAlignment["left"] = "Left";
        ShapeTextHorizontalAlignment["center"] = "Center";
        ShapeTextHorizontalAlignment["right"] = "Right";
        ShapeTextHorizontalAlignment["justify"] = "Justify";
        ShapeTextHorizontalAlignment["justifyLow"] = "JustifyLow";
        ShapeTextHorizontalAlignment["distributed"] = "Distributed";
        ShapeTextHorizontalAlignment["thaiDistributed"] = "ThaiDistributed";
    })(ShapeTextHorizontalAlignment = Excel.ShapeTextHorizontalAlignment || (Excel.ShapeTextHorizontalAlignment = {}));
    var ShapeTextVerticalAlignment;
    (function (ShapeTextVerticalAlignment) {
        ShapeTextVerticalAlignment["top"] = "Top";
        ShapeTextVerticalAlignment["middle"] = "Middle";
        ShapeTextVerticalAlignment["bottom"] = "Bottom";
        ShapeTextVerticalAlignment["justified"] = "Justified";
        ShapeTextVerticalAlignment["distributed"] = "Distributed";
    })(ShapeTextVerticalAlignment = Excel.ShapeTextVerticalAlignment || (Excel.ShapeTextVerticalAlignment = {}));
    var ShapeTextVerticalOverflow;
    (function (ShapeTextVerticalOverflow) {
        ShapeTextVerticalOverflow["overflow"] = "Overflow";
        ShapeTextVerticalOverflow["ellipsis"] = "Ellipsis";
        ShapeTextVerticalOverflow["clip"] = "Clip";
    })(ShapeTextVerticalOverflow = Excel.ShapeTextVerticalOverflow || (Excel.ShapeTextVerticalOverflow = {}));
    var ShapeTextHorizontalOverflow;
    (function (ShapeTextHorizontalOverflow) {
        ShapeTextHorizontalOverflow["overflow"] = "Overflow";
        ShapeTextHorizontalOverflow["clip"] = "Clip";
    })(ShapeTextHorizontalOverflow = Excel.ShapeTextHorizontalOverflow || (Excel.ShapeTextHorizontalOverflow = {}));
    var ShapeTextReadingOrder;
    (function (ShapeTextReadingOrder) {
        ShapeTextReadingOrder["leftToRight"] = "LeftToRight";
        ShapeTextReadingOrder["rightToLeft"] = "RightToLeft";
    })(ShapeTextReadingOrder = Excel.ShapeTextReadingOrder || (Excel.ShapeTextReadingOrder = {}));
    var ShapeTextOrientation;
    (function (ShapeTextOrientation) {
        ShapeTextOrientation["horizontal"] = "Horizontal";
        ShapeTextOrientation["vertical"] = "Vertical";
        ShapeTextOrientation["vertical270"] = "Vertical270";
        ShapeTextOrientation["wordArtVertical"] = "WordArtVertical";
        ShapeTextOrientation["eastAsianVertical"] = "EastAsianVertical";
        ShapeTextOrientation["mongolianVertical"] = "MongolianVertical";
        ShapeTextOrientation["wordArtVerticalRTL"] = "WordArtVerticalRTL";
    })(ShapeTextOrientation = Excel.ShapeTextOrientation || (Excel.ShapeTextOrientation = {}));
    var ShapeAutoSize;
    (function (ShapeAutoSize) {
        ShapeAutoSize["autoSizeNone"] = "AutoSizeNone";
        ShapeAutoSize["autoSizeTextToFitShape"] = "AutoSizeTextToFitShape";
        ShapeAutoSize["autoSizeShapeToFitText"] = "AutoSizeShapeToFitText";
        ShapeAutoSize["autoSizeMixed"] = "AutoSizeMixed";
    })(ShapeAutoSize = Excel.ShapeAutoSize || (Excel.ShapeAutoSize = {}));
    var CloseBehavior;
    (function (CloseBehavior) {
        CloseBehavior["save"] = "Save";
        CloseBehavior["skipSave"] = "SkipSave";
    })(CloseBehavior = Excel.CloseBehavior || (Excel.CloseBehavior = {}));
    var SaveBehavior;
    (function (SaveBehavior) {
        SaveBehavior["save"] = "Save";
        SaveBehavior["prompt"] = "Prompt";
    })(SaveBehavior = Excel.SaveBehavior || (Excel.SaveBehavior = {}));
    var SlicerSortType;
    (function (SlicerSortType) {
        SlicerSortType["dataSourceOrder"] = "DataSourceOrder";
        SlicerSortType["ascending"] = "Ascending";
        SlicerSortType["descending"] = "Descending";
    })(SlicerSortType = Excel.SlicerSortType || (Excel.SlicerSortType = {}));
    var RibbonTab;
    (function (RibbonTab) {
        RibbonTab["others"] = "Others";
        RibbonTab["home"] = "Home";
        RibbonTab["insert"] = "Insert";
        RibbonTab["draw"] = "Draw";
        RibbonTab["pageLayout"] = "PageLayout";
        RibbonTab["formulas"] = "Formulas";
        RibbonTab["data"] = "Data";
        RibbonTab["review"] = "Review";
        RibbonTab["view"] = "View";
        RibbonTab["developer"] = "Developer";
        RibbonTab["addIns"] = "AddIns";
        RibbonTab["help"] = "Help";
    })(RibbonTab = Excel.RibbonTab || (Excel.RibbonTab = {}));
    var NumberFormatCategory;
    (function (NumberFormatCategory) {
        NumberFormatCategory["general"] = "General";
        NumberFormatCategory["number"] = "Number";
        NumberFormatCategory["currency"] = "Currency";
        NumberFormatCategory["accounting"] = "Accounting";
        NumberFormatCategory["date"] = "Date";
        NumberFormatCategory["time"] = "Time";
        NumberFormatCategory["percentage"] = "Percentage";
        NumberFormatCategory["fraction"] = "Fraction";
        NumberFormatCategory["scientific"] = "Scientific";
        NumberFormatCategory["text"] = "Text";
        NumberFormatCategory["special"] = "Special";
        NumberFormatCategory["custom"] = "Custom";
    })(NumberFormatCategory = Excel.NumberFormatCategory || (Excel.NumberFormatCategory = {}));
    var _typeNamedSheetView = "NamedSheetView";
    var NamedSheetView = (function (_super) {
        __extends(NamedSheetView, _super);
        function NamedSheetView() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(NamedSheetView.prototype, "_className", {
            get: function () {
                return "NamedSheetView";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedSheetView.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["name"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedSheetView.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Name"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedSheetView.prototype, "_scalarPropertyUpdateable", {
            get: function () {
                return [true];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedSheetView.prototype, "name", {
            get: function () {
                _throwIfNotLoaded("name", this._N, _typeNamedSheetView, this._isNull);
                return this._N;
            },
            set: function (value) {
                this._N = value;
                _invokeSetProperty(this, "Name", value, 0);
            },
            enumerable: true,
            configurable: true
        });
        NamedSheetView.prototype.activate = function () {
            _invokeMethod(this, "Activate", 0, [], 0, 0);
        };
        NamedSheetView.prototype["delete"] = function () {
            _invokeMethod(this, "Delete", 0, [], 0, 0);
        };
        NamedSheetView.prototype.duplicate = function (name) {
            return _createMethodObject(Excel.NamedSheetView, this, "Duplicate", 0, [name], false, false, null, 0);
        };
        NamedSheetView.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Name"])) {
                this._N = obj["Name"];
            }
        };
        NamedSheetView.prototype.load = function (options) {
            return _load(this, options);
        };
        NamedSheetView.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        NamedSheetView.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        NamedSheetView.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        NamedSheetView.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        NamedSheetView.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return NamedSheetView;
    }(OfficeExtension.ClientObject));
    Excel.NamedSheetView = NamedSheetView;
    var _typeNamedSheetViewCollection = "NamedSheetViewCollection";
    var NamedSheetViewCollection = (function (_super) {
        __extends(NamedSheetViewCollection, _super);
        function NamedSheetViewCollection() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(NamedSheetViewCollection.prototype, "_className", {
            get: function () {
                return "NamedSheetViewCollection";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedSheetViewCollection.prototype, "_isCollection", {
            get: function () {
                return true;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(NamedSheetViewCollection.prototype, "items", {
            get: function () {
                _throwIfNotLoaded("items", this.m__items, _typeNamedSheetViewCollection, this._isNull);
                return this.m__items;
            },
            enumerable: true,
            configurable: true
        });
        NamedSheetViewCollection.prototype.add = function (name) {
            return _createMethodObject(Excel.NamedSheetView, this, "Add", 0, [name], false, true, null, 0);
        };
        NamedSheetViewCollection.prototype.enterTemporary = function () {
            return _createMethodObject(Excel.NamedSheetView, this, "EnterTemporary", 0, [], false, false, null, 0);
        };
        NamedSheetViewCollection.prototype.exit = function () {
            _invokeMethod(this, "Exit", 0, [], 0, 0);
        };
        NamedSheetViewCollection.prototype.getActive = function () {
            return _createMethodObject(Excel.NamedSheetView, this, "GetActive", 0, [], false, false, null, 0);
        };
        NamedSheetViewCollection.prototype.getCount = function () {
            return _invokeMethod(this, "GetCount", 1, [], 4, 0);
        };
        NamedSheetViewCollection.prototype.getItem = function (key) {
            return _createIndexerObject(Excel.NamedSheetView, this, [key]);
        };
        NamedSheetViewCollection.prototype.getItemAt = function (index) {
            return _createMethodObject(Excel.NamedSheetView, this, "GetItemAt", 1, [index], false, false, null, 4);
        };
        NamedSheetViewCollection.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isNullOrUndefined(obj[OfficeExtension.Constants.items])) {
                this.m__items = [];
                var _data = obj[OfficeExtension.Constants.items];
                for (var i = 0; i < _data.length; i++) {
                    var _item = _createChildItemObject(Excel.NamedSheetView, true, this, _data[i], i);
                    _item._handleResult(_data[i]);
                    this.m__items.push(_item);
                }
            }
        };
        NamedSheetViewCollection.prototype.load = function (options) {
            return _load(this, options);
        };
        NamedSheetViewCollection.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        NamedSheetViewCollection.prototype._handleRetrieveResult = function (value, result) {
            var _this = this;
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result, function (childItemData, index) { return _createChildItemObject(Excel.NamedSheetView, true, _this, childItemData, index); });
        };
        NamedSheetViewCollection.prototype.toJSON = function () {
            return _toJson(this, {}, {}, this.m__items);
        };
        NamedSheetViewCollection.prototype.setMockData = function (data) {
            var _this = this;
            _setMockData(this, data, function (childItemData, index) { return _createChildItemObject(Excel.NamedSheetView, true, _this, childItemData, index); }, function (items) { return _this.m__items = items; });
        };
        return NamedSheetViewCollection;
    }(OfficeExtension.ClientObject));
    Excel.NamedSheetViewCollection = NamedSheetViewCollection;
    var _typeFunctionResult = "FunctionResult";
    var FunctionResult = (function (_super) {
        __extends(FunctionResult, _super);
        function FunctionResult() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(FunctionResult.prototype, "_className", {
            get: function () {
                return "FunctionResult<T>";
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FunctionResult.prototype, "_scalarPropertyNames", {
            get: function () {
                return ["error", "value"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FunctionResult.prototype, "_scalarPropertyOriginalNames", {
            get: function () {
                return ["Error", "Value"];
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FunctionResult.prototype, "error", {
            get: function () {
                _throwIfNotLoaded("error", this._E, _typeFunctionResult, this._isNull);
                return this._E;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(FunctionResult.prototype, "value", {
            get: function () {
                _throwIfNotLoaded("value", this._V, _typeFunctionResult, this._isNull);
                return this._V;
            },
            enumerable: true,
            configurable: true
        });
        FunctionResult.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
            if (!_isUndefined(obj["Error"])) {
                this._E = obj["Error"];
            }
            if (!_isUndefined(obj["Value"])) {
                this._V = obj["Value"];
            }
        };
        FunctionResult.prototype.load = function (options) {
            return _load(this, options);
        };
        FunctionResult.prototype.retrieve = function (option) {
            return _retrieve(this, option);
        };
        FunctionResult.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        FunctionResult.prototype.toJSON = function () {
            return _toJson(this, {
                "error": this._E,
                "value": this._V
            }, {});
        };
        FunctionResult.prototype.setMockData = function (data) {
            _setMockData(this, data);
        };
        FunctionResult.prototype.ensureUnchanged = function (data) {
            _invokeEnsureUnchanged(this, data);
            return;
        };
        return FunctionResult;
    }(OfficeExtension.ClientObject));
    Excel.FunctionResult = FunctionResult;
    var _typeFunctions = "Functions";
    var Functions = (function (_super) {
        __extends(Functions, _super);
        function Functions() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        Object.defineProperty(Functions.prototype, "_className", {
            get: function () {
                return "Functions";
            },
            enumerable: true,
            configurable: true
        });
        Functions.prototype.abs = function (number) {
            return _createMethodObject(FunctionResult, this, "Abs", 0, [number], false, true, null, 0);
        };
        Functions.prototype.accrInt = function (issue, firstInterest, settlement, rate, par, frequency, basis, calcMethod) {
            return _createMethodObject(FunctionResult, this, "AccrInt", 0, [issue, firstInterest, settlement, rate, par, frequency, basis, calcMethod], false, true, null, 0);
        };
        Functions.prototype.accrIntM = function (issue, settlement, rate, par, basis) {
            return _createMethodObject(FunctionResult, this, "AccrIntM", 0, [issue, settlement, rate, par, basis], false, true, null, 0);
        };
        Functions.prototype.acos = function (number) {
            return _createMethodObject(FunctionResult, this, "Acos", 0, [number], false, true, null, 0);
        };
        Functions.prototype.acosh = function (number) {
            return _createMethodObject(FunctionResult, this, "Acosh", 0, [number], false, true, null, 0);
        };
        Functions.prototype.acot = function (number) {
            return _createMethodObject(FunctionResult, this, "Acot", 0, [number], false, true, null, 0);
        };
        Functions.prototype.acoth = function (number) {
            return _createMethodObject(FunctionResult, this, "Acoth", 0, [number], false, true, null, 0);
        };
        Functions.prototype.amorDegrc = function (cost, datePurchased, firstPeriod, salvage, period, rate, basis) {
            return _createMethodObject(FunctionResult, this, "AmorDegrc", 0, [cost, datePurchased, firstPeriod, salvage, period, rate, basis], false, true, null, 0);
        };
        Functions.prototype.amorLinc = function (cost, datePurchased, firstPeriod, salvage, period, rate, basis) {
            return _createMethodObject(FunctionResult, this, "AmorLinc", 0, [cost, datePurchased, firstPeriod, salvage, period, rate, basis], false, true, null, 0);
        };
        Functions.prototype.and = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "And", 0, [values], false, true, null, 0);
        };
        Functions.prototype.arabic = function (text) {
            return _createMethodObject(FunctionResult, this, "Arabic", 0, [text], false, true, null, 0);
        };
        Functions.prototype.areas = function (reference) {
            return _createMethodObject(FunctionResult, this, "Areas", 0, [reference], false, true, null, 0);
        };
        Functions.prototype.asc = function (text) {
            return _createMethodObject(FunctionResult, this, "Asc", 0, [text], false, true, null, 0);
        };
        Functions.prototype.asin = function (number) {
            return _createMethodObject(FunctionResult, this, "Asin", 0, [number], false, true, null, 0);
        };
        Functions.prototype.asinh = function (number) {
            return _createMethodObject(FunctionResult, this, "Asinh", 0, [number], false, true, null, 0);
        };
        Functions.prototype.atan = function (number) {
            return _createMethodObject(FunctionResult, this, "Atan", 0, [number], false, true, null, 0);
        };
        Functions.prototype.atan2 = function (xNum, yNum) {
            return _createMethodObject(FunctionResult, this, "Atan2", 0, [xNum, yNum], false, true, null, 0);
        };
        Functions.prototype.atanh = function (number) {
            return _createMethodObject(FunctionResult, this, "Atanh", 0, [number], false, true, null, 0);
        };
        Functions.prototype.aveDev = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "AveDev", 0, [values], false, true, null, 0);
        };
        Functions.prototype.average = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Average", 0, [values], false, true, null, 0);
        };
        Functions.prototype.averageA = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "AverageA", 0, [values], false, true, null, 0);
        };
        Functions.prototype.averageIf = function (range, criteria, averageRange) {
            return _createMethodObject(FunctionResult, this, "AverageIf", 0, [range, criteria, averageRange], false, true, null, 0);
        };
        Functions.prototype.averageIfs = function (averageRange) {
            var values = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                values[_i - 1] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "AverageIfs", 0, [averageRange, values], false, true, null, 0);
        };
        Functions.prototype.bahtText = function (number) {
            return _createMethodObject(FunctionResult, this, "BahtText", 0, [number], false, true, null, 0);
        };
        Functions.prototype.base = function (number, radix, minLength) {
            return _createMethodObject(FunctionResult, this, "Base", 0, [number, radix, minLength], false, true, null, 0);
        };
        Functions.prototype.besselI = function (x, n) {
            return _createMethodObject(FunctionResult, this, "BesselI", 0, [x, n], false, true, null, 0);
        };
        Functions.prototype.besselJ = function (x, n) {
            return _createMethodObject(FunctionResult, this, "BesselJ", 0, [x, n], false, true, null, 0);
        };
        Functions.prototype.besselK = function (x, n) {
            return _createMethodObject(FunctionResult, this, "BesselK", 0, [x, n], false, true, null, 0);
        };
        Functions.prototype.besselY = function (x, n) {
            return _createMethodObject(FunctionResult, this, "BesselY", 0, [x, n], false, true, null, 0);
        };
        Functions.prototype.beta_Dist = function (x, alpha, beta, cumulative, A, B) {
            return _createMethodObject(FunctionResult, this, "Beta_Dist", 0, [x, alpha, beta, cumulative, A, B], false, true, null, 0);
        };
        Functions.prototype.beta_Inv = function (probability, alpha, beta, A, B) {
            return _createMethodObject(FunctionResult, this, "Beta_Inv", 0, [probability, alpha, beta, A, B], false, true, null, 0);
        };
        Functions.prototype.bin2Dec = function (number) {
            return _createMethodObject(FunctionResult, this, "Bin2Dec", 0, [number], false, true, null, 0);
        };
        Functions.prototype.bin2Hex = function (number, places) {
            return _createMethodObject(FunctionResult, this, "Bin2Hex", 0, [number, places], false, true, null, 0);
        };
        Functions.prototype.bin2Oct = function (number, places) {
            return _createMethodObject(FunctionResult, this, "Bin2Oct", 0, [number, places], false, true, null, 0);
        };
        Functions.prototype.binom_Dist = function (numberS, trials, probabilityS, cumulative) {
            return _createMethodObject(FunctionResult, this, "Binom_Dist", 0, [numberS, trials, probabilityS, cumulative], false, true, null, 0);
        };
        Functions.prototype.binom_Dist_Range = function (trials, probabilityS, numberS, numberS2) {
            return _createMethodObject(FunctionResult, this, "Binom_Dist_Range", 0, [trials, probabilityS, numberS, numberS2], false, true, null, 0);
        };
        Functions.prototype.binom_Inv = function (trials, probabilityS, alpha) {
            return _createMethodObject(FunctionResult, this, "Binom_Inv", 0, [trials, probabilityS, alpha], false, true, null, 0);
        };
        Functions.prototype.bitand = function (number1, number2) {
            return _createMethodObject(FunctionResult, this, "Bitand", 0, [number1, number2], false, true, null, 0);
        };
        Functions.prototype.bitlshift = function (number, shiftAmount) {
            return _createMethodObject(FunctionResult, this, "Bitlshift", 0, [number, shiftAmount], false, true, null, 0);
        };
        Functions.prototype.bitor = function (number1, number2) {
            return _createMethodObject(FunctionResult, this, "Bitor", 0, [number1, number2], false, true, null, 0);
        };
        Functions.prototype.bitrshift = function (number, shiftAmount) {
            return _createMethodObject(FunctionResult, this, "Bitrshift", 0, [number, shiftAmount], false, true, null, 0);
        };
        Functions.prototype.bitxor = function (number1, number2) {
            return _createMethodObject(FunctionResult, this, "Bitxor", 0, [number1, number2], false, true, null, 0);
        };
        Functions.prototype.ceiling_Math = function (number, significance, mode) {
            return _createMethodObject(FunctionResult, this, "Ceiling_Math", 0, [number, significance, mode], false, true, null, 0);
        };
        Functions.prototype.ceiling_Precise = function (number, significance) {
            return _createMethodObject(FunctionResult, this, "Ceiling_Precise", 0, [number, significance], false, true, null, 0);
        };
        Functions.prototype.char = function (number) {
            return _createMethodObject(FunctionResult, this, "Char", 0, [number], false, true, null, 0);
        };
        Functions.prototype.chiSq_Dist = function (x, degFreedom, cumulative) {
            return _createMethodObject(FunctionResult, this, "ChiSq_Dist", 0, [x, degFreedom, cumulative], false, true, null, 0);
        };
        Functions.prototype.chiSq_Dist_RT = function (x, degFreedom) {
            return _createMethodObject(FunctionResult, this, "ChiSq_Dist_RT", 0, [x, degFreedom], false, true, null, 0);
        };
        Functions.prototype.chiSq_Inv = function (probability, degFreedom) {
            return _createMethodObject(FunctionResult, this, "ChiSq_Inv", 0, [probability, degFreedom], false, true, null, 0);
        };
        Functions.prototype.chiSq_Inv_RT = function (probability, degFreedom) {
            return _createMethodObject(FunctionResult, this, "ChiSq_Inv_RT", 0, [probability, degFreedom], false, true, null, 0);
        };
        Functions.prototype.choose = function (indexNum) {
            var values = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                values[_i - 1] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Choose", 0, [indexNum, values], false, true, null, 0);
        };
        Functions.prototype.clean = function (text) {
            return _createMethodObject(FunctionResult, this, "Clean", 0, [text], false, true, null, 0);
        };
        Functions.prototype.code = function (text) {
            return _createMethodObject(FunctionResult, this, "Code", 0, [text], false, true, null, 0);
        };
        Functions.prototype.columns = function (array) {
            return _createMethodObject(FunctionResult, this, "Columns", 0, [array], false, true, null, 0);
        };
        Functions.prototype.combin = function (number, numberChosen) {
            return _createMethodObject(FunctionResult, this, "Combin", 0, [number, numberChosen], false, true, null, 0);
        };
        Functions.prototype.combina = function (number, numberChosen) {
            return _createMethodObject(FunctionResult, this, "Combina", 0, [number, numberChosen], false, true, null, 0);
        };
        Functions.prototype.complex = function (realNum, iNum, suffix) {
            return _createMethodObject(FunctionResult, this, "Complex", 0, [realNum, iNum, suffix], false, true, null, 0);
        };
        Functions.prototype.concatenate = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Concatenate", 0, [values], false, true, null, 0);
        };
        Functions.prototype.confidence_Norm = function (alpha, standardDev, size) {
            return _createMethodObject(FunctionResult, this, "Confidence_Norm", 0, [alpha, standardDev, size], false, true, null, 0);
        };
        Functions.prototype.confidence_T = function (alpha, standardDev, size) {
            return _createMethodObject(FunctionResult, this, "Confidence_T", 0, [alpha, standardDev, size], false, true, null, 0);
        };
        Functions.prototype.convert = function (number, fromUnit, toUnit) {
            return _createMethodObject(FunctionResult, this, "Convert", 0, [number, fromUnit, toUnit], false, true, null, 0);
        };
        Functions.prototype.cos = function (number) {
            return _createMethodObject(FunctionResult, this, "Cos", 0, [number], false, true, null, 0);
        };
        Functions.prototype.cosh = function (number) {
            return _createMethodObject(FunctionResult, this, "Cosh", 0, [number], false, true, null, 0);
        };
        Functions.prototype.cot = function (number) {
            return _createMethodObject(FunctionResult, this, "Cot", 0, [number], false, true, null, 0);
        };
        Functions.prototype.coth = function (number) {
            return _createMethodObject(FunctionResult, this, "Coth", 0, [number], false, true, null, 0);
        };
        Functions.prototype.count = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Count", 0, [values], false, true, null, 0);
        };
        Functions.prototype.countA = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "CountA", 0, [values], false, true, null, 0);
        };
        Functions.prototype.countBlank = function (range) {
            return _createMethodObject(FunctionResult, this, "CountBlank", 0, [range], false, true, null, 0);
        };
        Functions.prototype.countIf = function (range, criteria) {
            return _createMethodObject(FunctionResult, this, "CountIf", 0, [range, criteria], false, true, null, 0);
        };
        Functions.prototype.countIfs = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "CountIfs", 0, [values], false, true, null, 0);
        };
        Functions.prototype.coupDayBs = function (settlement, maturity, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "CoupDayBs", 0, [settlement, maturity, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.coupDays = function (settlement, maturity, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "CoupDays", 0, [settlement, maturity, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.coupDaysNc = function (settlement, maturity, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "CoupDaysNc", 0, [settlement, maturity, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.coupNcd = function (settlement, maturity, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "CoupNcd", 0, [settlement, maturity, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.coupNum = function (settlement, maturity, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "CoupNum", 0, [settlement, maturity, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.coupPcd = function (settlement, maturity, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "CoupPcd", 0, [settlement, maturity, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.csc = function (number) {
            return _createMethodObject(FunctionResult, this, "Csc", 0, [number], false, true, null, 0);
        };
        Functions.prototype.csch = function (number) {
            return _createMethodObject(FunctionResult, this, "Csch", 0, [number], false, true, null, 0);
        };
        Functions.prototype.cumIPmt = function (rate, nper, pv, startPeriod, endPeriod, type) {
            return _createMethodObject(FunctionResult, this, "CumIPmt", 0, [rate, nper, pv, startPeriod, endPeriod, type], false, true, null, 0);
        };
        Functions.prototype.cumPrinc = function (rate, nper, pv, startPeriod, endPeriod, type) {
            return _createMethodObject(FunctionResult, this, "CumPrinc", 0, [rate, nper, pv, startPeriod, endPeriod, type], false, true, null, 0);
        };
        Functions.prototype.daverage = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DAverage", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dcount = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DCount", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dcountA = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DCountA", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dget = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DGet", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dmax = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DMax", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dmin = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DMin", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dproduct = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DProduct", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dstDev = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DStDev", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dstDevP = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DStDevP", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dsum = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DSum", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dvar = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DVar", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.dvarP = function (database, field, criteria) {
            return _createMethodObject(FunctionResult, this, "DVarP", 0, [database, field, criteria], false, true, null, 0);
        };
        Functions.prototype.date = function (year, month, day) {
            return _createMethodObject(FunctionResult, this, "Date", 0, [year, month, day], false, true, null, 0);
        };
        Functions.prototype.datevalue = function (dateText) {
            return _createMethodObject(FunctionResult, this, "Datevalue", 0, [dateText], false, true, null, 0);
        };
        Functions.prototype.day = function (serialNumber) {
            return _createMethodObject(FunctionResult, this, "Day", 0, [serialNumber], false, true, null, 0);
        };
        Functions.prototype.days = function (endDate, startDate) {
            return _createMethodObject(FunctionResult, this, "Days", 0, [endDate, startDate], false, true, null, 0);
        };
        Functions.prototype.days360 = function (startDate, endDate, method) {
            return _createMethodObject(FunctionResult, this, "Days360", 0, [startDate, endDate, method], false, true, null, 0);
        };
        Functions.prototype.db = function (cost, salvage, life, period, month) {
            return _createMethodObject(FunctionResult, this, "Db", 0, [cost, salvage, life, period, month], false, true, null, 0);
        };
        Functions.prototype.dbcs = function (text) {
            return _createMethodObject(FunctionResult, this, "Dbcs", 0, [text], false, true, null, 0);
        };
        Functions.prototype.ddb = function (cost, salvage, life, period, factor) {
            return _createMethodObject(FunctionResult, this, "Ddb", 0, [cost, salvage, life, period, factor], false, true, null, 0);
        };
        Functions.prototype.dec2Bin = function (number, places) {
            return _createMethodObject(FunctionResult, this, "Dec2Bin", 0, [number, places], false, true, null, 0);
        };
        Functions.prototype.dec2Hex = function (number, places) {
            return _createMethodObject(FunctionResult, this, "Dec2Hex", 0, [number, places], false, true, null, 0);
        };
        Functions.prototype.dec2Oct = function (number, places) {
            return _createMethodObject(FunctionResult, this, "Dec2Oct", 0, [number, places], false, true, null, 0);
        };
        Functions.prototype.decimal = function (number, radix) {
            return _createMethodObject(FunctionResult, this, "Decimal", 0, [number, radix], false, true, null, 0);
        };
        Functions.prototype.degrees = function (angle) {
            return _createMethodObject(FunctionResult, this, "Degrees", 0, [angle], false, true, null, 0);
        };
        Functions.prototype.delta = function (number1, number2) {
            return _createMethodObject(FunctionResult, this, "Delta", 0, [number1, number2], false, true, null, 0);
        };
        Functions.prototype.devSq = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "DevSq", 0, [values], false, true, null, 0);
        };
        Functions.prototype.disc = function (settlement, maturity, pr, redemption, basis) {
            return _createMethodObject(FunctionResult, this, "Disc", 0, [settlement, maturity, pr, redemption, basis], false, true, null, 0);
        };
        Functions.prototype.dollar = function (number, decimals) {
            return _createMethodObject(FunctionResult, this, "Dollar", 0, [number, decimals], false, true, null, 0);
        };
        Functions.prototype.dollarDe = function (fractionalDollar, fraction) {
            return _createMethodObject(FunctionResult, this, "DollarDe", 0, [fractionalDollar, fraction], false, true, null, 0);
        };
        Functions.prototype.dollarFr = function (decimalDollar, fraction) {
            return _createMethodObject(FunctionResult, this, "DollarFr", 0, [decimalDollar, fraction], false, true, null, 0);
        };
        Functions.prototype.duration = function (settlement, maturity, coupon, yld, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "Duration", 0, [settlement, maturity, coupon, yld, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.ecma_Ceiling = function (number, significance) {
            return _createMethodObject(FunctionResult, this, "ECMA_Ceiling", 0, [number, significance], false, true, null, 0);
        };
        Functions.prototype.edate = function (startDate, months) {
            return _createMethodObject(FunctionResult, this, "EDate", 0, [startDate, months], false, true, null, 0);
        };
        Functions.prototype.effect = function (nominalRate, npery) {
            return _createMethodObject(FunctionResult, this, "Effect", 0, [nominalRate, npery], false, true, null, 0);
        };
        Functions.prototype.eoMonth = function (startDate, months) {
            return _createMethodObject(FunctionResult, this, "EoMonth", 0, [startDate, months], false, true, null, 0);
        };
        Functions.prototype.erf = function (lowerLimit, upperLimit) {
            return _createMethodObject(FunctionResult, this, "Erf", 0, [lowerLimit, upperLimit], false, true, null, 0);
        };
        Functions.prototype.erfC = function (x) {
            return _createMethodObject(FunctionResult, this, "ErfC", 0, [x], false, true, null, 0);
        };
        Functions.prototype.erfC_Precise = function (X) {
            return _createMethodObject(FunctionResult, this, "ErfC_Precise", 0, [X], false, true, null, 0);
        };
        Functions.prototype.erf_Precise = function (X) {
            return _createMethodObject(FunctionResult, this, "Erf_Precise", 0, [X], false, true, null, 0);
        };
        Functions.prototype.error_Type = function (errorVal) {
            return _createMethodObject(FunctionResult, this, "Error_Type", 0, [errorVal], false, true, null, 0);
        };
        Functions.prototype.even = function (number) {
            return _createMethodObject(FunctionResult, this, "Even", 0, [number], false, true, null, 0);
        };
        Functions.prototype.exact = function (text1, text2) {
            return _createMethodObject(FunctionResult, this, "Exact", 0, [text1, text2], false, true, null, 0);
        };
        Functions.prototype.exp = function (number) {
            return _createMethodObject(FunctionResult, this, "Exp", 0, [number], false, true, null, 0);
        };
        Functions.prototype.expon_Dist = function (x, lambda, cumulative) {
            return _createMethodObject(FunctionResult, this, "Expon_Dist", 0, [x, lambda, cumulative], false, true, null, 0);
        };
        Functions.prototype.fvschedule = function (principal, schedule) {
            return _createMethodObject(FunctionResult, this, "FVSchedule", 0, [principal, schedule], false, true, null, 0);
        };
        Functions.prototype.f_Dist = function (x, degFreedom1, degFreedom2, cumulative) {
            return _createMethodObject(FunctionResult, this, "F_Dist", 0, [x, degFreedom1, degFreedom2, cumulative], false, true, null, 0);
        };
        Functions.prototype.f_Dist_RT = function (x, degFreedom1, degFreedom2) {
            return _createMethodObject(FunctionResult, this, "F_Dist_RT", 0, [x, degFreedom1, degFreedom2], false, true, null, 0);
        };
        Functions.prototype.f_Inv = function (probability, degFreedom1, degFreedom2) {
            return _createMethodObject(FunctionResult, this, "F_Inv", 0, [probability, degFreedom1, degFreedom2], false, true, null, 0);
        };
        Functions.prototype.f_Inv_RT = function (probability, degFreedom1, degFreedom2) {
            return _createMethodObject(FunctionResult, this, "F_Inv_RT", 0, [probability, degFreedom1, degFreedom2], false, true, null, 0);
        };
        Functions.prototype.fact = function (number) {
            return _createMethodObject(FunctionResult, this, "Fact", 0, [number], false, true, null, 0);
        };
        Functions.prototype.factDouble = function (number) {
            return _createMethodObject(FunctionResult, this, "FactDouble", 0, [number], false, true, null, 0);
        };
        Functions.prototype["false"] = function () {
            return _createMethodObject(FunctionResult, this, "False", 0, [], false, true, null, 0);
        };
        Functions.prototype.find = function (findText, withinText, startNum) {
            return _createMethodObject(FunctionResult, this, "Find", 0, [findText, withinText, startNum], false, true, null, 0);
        };
        Functions.prototype.findB = function (findText, withinText, startNum) {
            return _createMethodObject(FunctionResult, this, "FindB", 0, [findText, withinText, startNum], false, true, null, 0);
        };
        Functions.prototype.fisher = function (x) {
            return _createMethodObject(FunctionResult, this, "Fisher", 0, [x], false, true, null, 0);
        };
        Functions.prototype.fisherInv = function (y) {
            return _createMethodObject(FunctionResult, this, "FisherInv", 0, [y], false, true, null, 0);
        };
        Functions.prototype.fixed = function (number, decimals, noCommas) {
            return _createMethodObject(FunctionResult, this, "Fixed", 0, [number, decimals, noCommas], false, true, null, 0);
        };
        Functions.prototype.floor_Math = function (number, significance, mode) {
            return _createMethodObject(FunctionResult, this, "Floor_Math", 0, [number, significance, mode], false, true, null, 0);
        };
        Functions.prototype.floor_Precise = function (number, significance) {
            return _createMethodObject(FunctionResult, this, "Floor_Precise", 0, [number, significance], false, true, null, 0);
        };
        Functions.prototype.fv = function (rate, nper, pmt, pv, type) {
            return _createMethodObject(FunctionResult, this, "Fv", 0, [rate, nper, pmt, pv, type], false, true, null, 0);
        };
        Functions.prototype.gamma = function (x) {
            return _createMethodObject(FunctionResult, this, "Gamma", 0, [x], false, true, null, 0);
        };
        Functions.prototype.gammaLn = function (x) {
            return _createMethodObject(FunctionResult, this, "GammaLn", 0, [x], false, true, null, 0);
        };
        Functions.prototype.gammaLn_Precise = function (x) {
            return _createMethodObject(FunctionResult, this, "GammaLn_Precise", 0, [x], false, true, null, 0);
        };
        Functions.prototype.gamma_Dist = function (x, alpha, beta, cumulative) {
            return _createMethodObject(FunctionResult, this, "Gamma_Dist", 0, [x, alpha, beta, cumulative], false, true, null, 0);
        };
        Functions.prototype.gamma_Inv = function (probability, alpha, beta) {
            return _createMethodObject(FunctionResult, this, "Gamma_Inv", 0, [probability, alpha, beta], false, true, null, 0);
        };
        Functions.prototype.gauss = function (x) {
            return _createMethodObject(FunctionResult, this, "Gauss", 0, [x], false, true, null, 0);
        };
        Functions.prototype.gcd = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Gcd", 0, [values], false, true, null, 0);
        };
        Functions.prototype.geStep = function (number, step) {
            return _createMethodObject(FunctionResult, this, "GeStep", 0, [number, step], false, true, null, 0);
        };
        Functions.prototype.geoMean = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "GeoMean", 0, [values], false, true, null, 0);
        };
        Functions.prototype.hlookup = function (lookupValue, tableArray, rowIndexNum, rangeLookup) {
            return _createMethodObject(FunctionResult, this, "HLookup", 0, [lookupValue, tableArray, rowIndexNum, rangeLookup], false, true, null, 0);
        };
        Functions.prototype.harMean = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "HarMean", 0, [values], false, true, null, 0);
        };
        Functions.prototype.hex2Bin = function (number, places) {
            return _createMethodObject(FunctionResult, this, "Hex2Bin", 0, [number, places], false, true, null, 0);
        };
        Functions.prototype.hex2Dec = function (number) {
            return _createMethodObject(FunctionResult, this, "Hex2Dec", 0, [number], false, true, null, 0);
        };
        Functions.prototype.hex2Oct = function (number, places) {
            return _createMethodObject(FunctionResult, this, "Hex2Oct", 0, [number, places], false, true, null, 0);
        };
        Functions.prototype.hour = function (serialNumber) {
            return _createMethodObject(FunctionResult, this, "Hour", 0, [serialNumber], false, true, null, 0);
        };
        Functions.prototype.hypGeom_Dist = function (sampleS, numberSample, populationS, numberPop, cumulative) {
            return _createMethodObject(FunctionResult, this, "HypGeom_Dist", 0, [sampleS, numberSample, populationS, numberPop, cumulative], false, true, null, 0);
        };
        Functions.prototype.hyperlink = function (linkLocation, friendlyName) {
            return _createMethodObject(FunctionResult, this, "Hyperlink", 0, [linkLocation, friendlyName], false, true, null, 0);
        };
        Functions.prototype.iso_Ceiling = function (number, significance) {
            return _createMethodObject(FunctionResult, this, "ISO_Ceiling", 0, [number, significance], false, true, null, 0);
        };
        Functions.prototype["if"] = function (logicalTest, valueIfTrue, valueIfFalse) {
            return _createMethodObject(FunctionResult, this, "If", 0, [logicalTest, valueIfTrue, valueIfFalse], false, true, null, 0);
        };
        Functions.prototype.imAbs = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImAbs", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imArgument = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImArgument", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imConjugate = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImConjugate", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imCos = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImCos", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imCosh = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImCosh", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imCot = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImCot", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imCsc = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImCsc", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imCsch = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImCsch", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imDiv = function (inumber1, inumber2) {
            return _createMethodObject(FunctionResult, this, "ImDiv", 0, [inumber1, inumber2], false, true, null, 0);
        };
        Functions.prototype.imExp = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImExp", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imLn = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImLn", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imLog10 = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImLog10", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imLog2 = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImLog2", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imPower = function (inumber, number) {
            return _createMethodObject(FunctionResult, this, "ImPower", 0, [inumber, number], false, true, null, 0);
        };
        Functions.prototype.imProduct = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "ImProduct", 0, [values], false, true, null, 0);
        };
        Functions.prototype.imReal = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImReal", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imSec = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImSec", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imSech = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImSech", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imSin = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImSin", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imSinh = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImSinh", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imSqrt = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImSqrt", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imSub = function (inumber1, inumber2) {
            return _createMethodObject(FunctionResult, this, "ImSub", 0, [inumber1, inumber2], false, true, null, 0);
        };
        Functions.prototype.imSum = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "ImSum", 0, [values], false, true, null, 0);
        };
        Functions.prototype.imTan = function (inumber) {
            return _createMethodObject(FunctionResult, this, "ImTan", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.imaginary = function (inumber) {
            return _createMethodObject(FunctionResult, this, "Imaginary", 0, [inumber], false, true, null, 0);
        };
        Functions.prototype.int = function (number) {
            return _createMethodObject(FunctionResult, this, "Int", 0, [number], false, true, null, 0);
        };
        Functions.prototype.intRate = function (settlement, maturity, investment, redemption, basis) {
            return _createMethodObject(FunctionResult, this, "IntRate", 0, [settlement, maturity, investment, redemption, basis], false, true, null, 0);
        };
        Functions.prototype.ipmt = function (rate, per, nper, pv, fv, type) {
            return _createMethodObject(FunctionResult, this, "Ipmt", 0, [rate, per, nper, pv, fv, type], false, true, null, 0);
        };
        Functions.prototype.irr = function (values, guess) {
            return _createMethodObject(FunctionResult, this, "Irr", 0, [values, guess], false, true, null, 0);
        };
        Functions.prototype.isErr = function (value) {
            return _createMethodObject(FunctionResult, this, "IsErr", 0, [value], false, true, null, 0);
        };
        Functions.prototype.isError = function (value) {
            return _createMethodObject(FunctionResult, this, "IsError", 0, [value], false, true, null, 0);
        };
        Functions.prototype.isEven = function (number) {
            return _createMethodObject(FunctionResult, this, "IsEven", 0, [number], false, true, null, 0);
        };
        Functions.prototype.isFormula = function (reference) {
            return _createMethodObject(FunctionResult, this, "IsFormula", 0, [reference], false, true, null, 0);
        };
        Functions.prototype.isLogical = function (value) {
            return _createMethodObject(FunctionResult, this, "IsLogical", 0, [value], false, true, null, 0);
        };
        Functions.prototype.isNA = function (value) {
            return _createMethodObject(FunctionResult, this, "IsNA", 0, [value], false, true, null, 0);
        };
        Functions.prototype.isNonText = function (value) {
            return _createMethodObject(FunctionResult, this, "IsNonText", 0, [value], false, true, null, 0);
        };
        Functions.prototype.isNumber = function (value) {
            return _createMethodObject(FunctionResult, this, "IsNumber", 0, [value], false, true, null, 0);
        };
        Functions.prototype.isOdd = function (number) {
            return _createMethodObject(FunctionResult, this, "IsOdd", 0, [number], false, true, null, 0);
        };
        Functions.prototype.isText = function (value) {
            return _createMethodObject(FunctionResult, this, "IsText", 0, [value], false, true, null, 0);
        };
        Functions.prototype.isoWeekNum = function (date) {
            return _createMethodObject(FunctionResult, this, "IsoWeekNum", 0, [date], false, true, null, 0);
        };
        Functions.prototype.ispmt = function (rate, per, nper, pv) {
            return _createMethodObject(FunctionResult, this, "Ispmt", 0, [rate, per, nper, pv], false, true, null, 0);
        };
        Functions.prototype.isref = function (value) {
            return _createMethodObject(FunctionResult, this, "Isref", 0, [value], false, true, null, 0);
        };
        Functions.prototype.kurt = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Kurt", 0, [values], false, true, null, 0);
        };
        Functions.prototype.large = function (array, k) {
            return _createMethodObject(FunctionResult, this, "Large", 0, [array, k], false, true, null, 0);
        };
        Functions.prototype.lcm = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Lcm", 0, [values], false, true, null, 0);
        };
        Functions.prototype.left = function (text, numChars) {
            return _createMethodObject(FunctionResult, this, "Left", 0, [text, numChars], false, true, null, 0);
        };
        Functions.prototype.leftb = function (text, numBytes) {
            return _createMethodObject(FunctionResult, this, "Leftb", 0, [text, numBytes], false, true, null, 0);
        };
        Functions.prototype.len = function (text) {
            return _createMethodObject(FunctionResult, this, "Len", 0, [text], false, true, null, 0);
        };
        Functions.prototype.lenb = function (text) {
            return _createMethodObject(FunctionResult, this, "Lenb", 0, [text], false, true, null, 0);
        };
        Functions.prototype.ln = function (number) {
            return _createMethodObject(FunctionResult, this, "Ln", 0, [number], false, true, null, 0);
        };
        Functions.prototype.log = function (number, base) {
            return _createMethodObject(FunctionResult, this, "Log", 0, [number, base], false, true, null, 0);
        };
        Functions.prototype.log10 = function (number) {
            return _createMethodObject(FunctionResult, this, "Log10", 0, [number], false, true, null, 0);
        };
        Functions.prototype.logNorm_Dist = function (x, mean, standardDev, cumulative) {
            return _createMethodObject(FunctionResult, this, "LogNorm_Dist", 0, [x, mean, standardDev, cumulative], false, true, null, 0);
        };
        Functions.prototype.logNorm_Inv = function (probability, mean, standardDev) {
            return _createMethodObject(FunctionResult, this, "LogNorm_Inv", 0, [probability, mean, standardDev], false, true, null, 0);
        };
        Functions.prototype.lookup = function (lookupValue, lookupVector, resultVector) {
            return _createMethodObject(FunctionResult, this, "Lookup", 0, [lookupValue, lookupVector, resultVector], false, true, null, 0);
        };
        Functions.prototype.lower = function (text) {
            return _createMethodObject(FunctionResult, this, "Lower", 0, [text], false, true, null, 0);
        };
        Functions.prototype.mduration = function (settlement, maturity, coupon, yld, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "MDuration", 0, [settlement, maturity, coupon, yld, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.mirr = function (values, financeRate, reinvestRate) {
            return _createMethodObject(FunctionResult, this, "MIrr", 0, [values, financeRate, reinvestRate], false, true, null, 0);
        };
        Functions.prototype.mround = function (number, multiple) {
            return _createMethodObject(FunctionResult, this, "MRound", 0, [number, multiple], false, true, null, 0);
        };
        Functions.prototype.match = function (lookupValue, lookupArray, matchType) {
            return _createMethodObject(FunctionResult, this, "Match", 0, [lookupValue, lookupArray, matchType], false, true, null, 0);
        };
        Functions.prototype.max = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Max", 0, [values], false, true, null, 0);
        };
        Functions.prototype.maxA = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "MaxA", 0, [values], false, true, null, 0);
        };
        Functions.prototype.median = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Median", 0, [values], false, true, null, 0);
        };
        Functions.prototype.mid = function (text, startNum, numChars) {
            return _createMethodObject(FunctionResult, this, "Mid", 0, [text, startNum, numChars], false, true, null, 0);
        };
        Functions.prototype.midb = function (text, startNum, numBytes) {
            return _createMethodObject(FunctionResult, this, "Midb", 0, [text, startNum, numBytes], false, true, null, 0);
        };
        Functions.prototype.min = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Min", 0, [values], false, true, null, 0);
        };
        Functions.prototype.minA = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "MinA", 0, [values], false, true, null, 0);
        };
        Functions.prototype.minute = function (serialNumber) {
            return _createMethodObject(FunctionResult, this, "Minute", 0, [serialNumber], false, true, null, 0);
        };
        Functions.prototype.mod = function (number, divisor) {
            return _createMethodObject(FunctionResult, this, "Mod", 0, [number, divisor], false, true, null, 0);
        };
        Functions.prototype.month = function (serialNumber) {
            return _createMethodObject(FunctionResult, this, "Month", 0, [serialNumber], false, true, null, 0);
        };
        Functions.prototype.multiNomial = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "MultiNomial", 0, [values], false, true, null, 0);
        };
        Functions.prototype.n = function (value) {
            return _createMethodObject(FunctionResult, this, "N", 0, [value], false, true, null, 0);
        };
        Functions.prototype.nper = function (rate, pmt, pv, fv, type) {
            return _createMethodObject(FunctionResult, this, "NPer", 0, [rate, pmt, pv, fv, type], false, true, null, 0);
        };
        Functions.prototype.na = function () {
            return _createMethodObject(FunctionResult, this, "Na", 0, [], false, true, null, 0);
        };
        Functions.prototype.negBinom_Dist = function (numberF, numberS, probabilityS, cumulative) {
            return _createMethodObject(FunctionResult, this, "NegBinom_Dist", 0, [numberF, numberS, probabilityS, cumulative], false, true, null, 0);
        };
        Functions.prototype.networkDays = function (startDate, endDate, holidays) {
            return _createMethodObject(FunctionResult, this, "NetworkDays", 0, [startDate, endDate, holidays], false, true, null, 0);
        };
        Functions.prototype.networkDays_Intl = function (startDate, endDate, weekend, holidays) {
            return _createMethodObject(FunctionResult, this, "NetworkDays_Intl", 0, [startDate, endDate, weekend, holidays], false, true, null, 0);
        };
        Functions.prototype.nominal = function (effectRate, npery) {
            return _createMethodObject(FunctionResult, this, "Nominal", 0, [effectRate, npery], false, true, null, 0);
        };
        Functions.prototype.norm_Dist = function (x, mean, standardDev, cumulative) {
            return _createMethodObject(FunctionResult, this, "Norm_Dist", 0, [x, mean, standardDev, cumulative], false, true, null, 0);
        };
        Functions.prototype.norm_Inv = function (probability, mean, standardDev) {
            return _createMethodObject(FunctionResult, this, "Norm_Inv", 0, [probability, mean, standardDev], false, true, null, 0);
        };
        Functions.prototype.norm_S_Dist = function (z, cumulative) {
            return _createMethodObject(FunctionResult, this, "Norm_S_Dist", 0, [z, cumulative], false, true, null, 0);
        };
        Functions.prototype.norm_S_Inv = function (probability) {
            return _createMethodObject(FunctionResult, this, "Norm_S_Inv", 0, [probability], false, true, null, 0);
        };
        Functions.prototype.not = function (logical) {
            return _createMethodObject(FunctionResult, this, "Not", 0, [logical], false, true, null, 0);
        };
        Functions.prototype.now = function () {
            return _createMethodObject(FunctionResult, this, "Now", 0, [], false, true, null, 0);
        };
        Functions.prototype.npv = function (rate) {
            var values = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                values[_i - 1] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Npv", 0, [rate, values], false, true, null, 0);
        };
        Functions.prototype.numberValue = function (text, decimalSeparator, groupSeparator) {
            return _createMethodObject(FunctionResult, this, "NumberValue", 0, [text, decimalSeparator, groupSeparator], false, true, null, 0);
        };
        Functions.prototype.oct2Bin = function (number, places) {
            return _createMethodObject(FunctionResult, this, "Oct2Bin", 0, [number, places], false, true, null, 0);
        };
        Functions.prototype.oct2Dec = function (number) {
            return _createMethodObject(FunctionResult, this, "Oct2Dec", 0, [number], false, true, null, 0);
        };
        Functions.prototype.oct2Hex = function (number, places) {
            return _createMethodObject(FunctionResult, this, "Oct2Hex", 0, [number, places], false, true, null, 0);
        };
        Functions.prototype.odd = function (number) {
            return _createMethodObject(FunctionResult, this, "Odd", 0, [number], false, true, null, 0);
        };
        Functions.prototype.oddFPrice = function (settlement, maturity, issue, firstCoupon, rate, yld, redemption, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "OddFPrice", 0, [settlement, maturity, issue, firstCoupon, rate, yld, redemption, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.oddFYield = function (settlement, maturity, issue, firstCoupon, rate, pr, redemption, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "OddFYield", 0, [settlement, maturity, issue, firstCoupon, rate, pr, redemption, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.oddLPrice = function (settlement, maturity, lastInterest, rate, yld, redemption, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "OddLPrice", 0, [settlement, maturity, lastInterest, rate, yld, redemption, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.oddLYield = function (settlement, maturity, lastInterest, rate, pr, redemption, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "OddLYield", 0, [settlement, maturity, lastInterest, rate, pr, redemption, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.or = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Or", 0, [values], false, true, null, 0);
        };
        Functions.prototype.pduration = function (rate, pv, fv) {
            return _createMethodObject(FunctionResult, this, "PDuration", 0, [rate, pv, fv], false, true, null, 0);
        };
        Functions.prototype.percentRank_Exc = function (array, x, significance) {
            return _createMethodObject(FunctionResult, this, "PercentRank_Exc", 0, [array, x, significance], false, true, null, 0);
        };
        Functions.prototype.percentRank_Inc = function (array, x, significance) {
            return _createMethodObject(FunctionResult, this, "PercentRank_Inc", 0, [array, x, significance], false, true, null, 0);
        };
        Functions.prototype.percentile_Exc = function (array, k) {
            return _createMethodObject(FunctionResult, this, "Percentile_Exc", 0, [array, k], false, true, null, 0);
        };
        Functions.prototype.percentile_Inc = function (array, k) {
            return _createMethodObject(FunctionResult, this, "Percentile_Inc", 0, [array, k], false, true, null, 0);
        };
        Functions.prototype.permut = function (number, numberChosen) {
            return _createMethodObject(FunctionResult, this, "Permut", 0, [number, numberChosen], false, true, null, 0);
        };
        Functions.prototype.permutationa = function (number, numberChosen) {
            return _createMethodObject(FunctionResult, this, "Permutationa", 0, [number, numberChosen], false, true, null, 0);
        };
        Functions.prototype.phi = function (x) {
            return _createMethodObject(FunctionResult, this, "Phi", 0, [x], false, true, null, 0);
        };
        Functions.prototype.pi = function () {
            return _createMethodObject(FunctionResult, this, "Pi", 0, [], false, true, null, 0);
        };
        Functions.prototype.pmt = function (rate, nper, pv, fv, type) {
            return _createMethodObject(FunctionResult, this, "Pmt", 0, [rate, nper, pv, fv, type], false, true, null, 0);
        };
        Functions.prototype.poisson_Dist = function (x, mean, cumulative) {
            return _createMethodObject(FunctionResult, this, "Poisson_Dist", 0, [x, mean, cumulative], false, true, null, 0);
        };
        Functions.prototype.power = function (number, power) {
            return _createMethodObject(FunctionResult, this, "Power", 0, [number, power], false, true, null, 0);
        };
        Functions.prototype.ppmt = function (rate, per, nper, pv, fv, type) {
            return _createMethodObject(FunctionResult, this, "Ppmt", 0, [rate, per, nper, pv, fv, type], false, true, null, 0);
        };
        Functions.prototype.price = function (settlement, maturity, rate, yld, redemption, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "Price", 0, [settlement, maturity, rate, yld, redemption, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.priceDisc = function (settlement, maturity, discount, redemption, basis) {
            return _createMethodObject(FunctionResult, this, "PriceDisc", 0, [settlement, maturity, discount, redemption, basis], false, true, null, 0);
        };
        Functions.prototype.priceMat = function (settlement, maturity, issue, rate, yld, basis) {
            return _createMethodObject(FunctionResult, this, "PriceMat", 0, [settlement, maturity, issue, rate, yld, basis], false, true, null, 0);
        };
        Functions.prototype.product = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Product", 0, [values], false, true, null, 0);
        };
        Functions.prototype.proper = function (text) {
            return _createMethodObject(FunctionResult, this, "Proper", 0, [text], false, true, null, 0);
        };
        Functions.prototype.pv = function (rate, nper, pmt, fv, type) {
            return _createMethodObject(FunctionResult, this, "Pv", 0, [rate, nper, pmt, fv, type], false, true, null, 0);
        };
        Functions.prototype.quartile_Exc = function (array, quart) {
            return _createMethodObject(FunctionResult, this, "Quartile_Exc", 0, [array, quart], false, true, null, 0);
        };
        Functions.prototype.quartile_Inc = function (array, quart) {
            return _createMethodObject(FunctionResult, this, "Quartile_Inc", 0, [array, quart], false, true, null, 0);
        };
        Functions.prototype.quotient = function (numerator, denominator) {
            return _createMethodObject(FunctionResult, this, "Quotient", 0, [numerator, denominator], false, true, null, 0);
        };
        Functions.prototype.radians = function (angle) {
            return _createMethodObject(FunctionResult, this, "Radians", 0, [angle], false, true, null, 0);
        };
        Functions.prototype.rand = function () {
            return _createMethodObject(FunctionResult, this, "Rand", 0, [], false, true, null, 0);
        };
        Functions.prototype.randBetween = function (bottom, top) {
            return _createMethodObject(FunctionResult, this, "RandBetween", 0, [bottom, top], false, true, null, 0);
        };
        Functions.prototype.rank_Avg = function (number, ref, order) {
            return _createMethodObject(FunctionResult, this, "Rank_Avg", 0, [number, ref, order], false, true, null, 0);
        };
        Functions.prototype.rank_Eq = function (number, ref, order) {
            return _createMethodObject(FunctionResult, this, "Rank_Eq", 0, [number, ref, order], false, true, null, 0);
        };
        Functions.prototype.rate = function (nper, pmt, pv, fv, type, guess) {
            return _createMethodObject(FunctionResult, this, "Rate", 0, [nper, pmt, pv, fv, type, guess], false, true, null, 0);
        };
        Functions.prototype.received = function (settlement, maturity, investment, discount, basis) {
            return _createMethodObject(FunctionResult, this, "Received", 0, [settlement, maturity, investment, discount, basis], false, true, null, 0);
        };
        Functions.prototype.replace = function (oldText, startNum, numChars, newText) {
            return _createMethodObject(FunctionResult, this, "Replace", 0, [oldText, startNum, numChars, newText], false, true, null, 0);
        };
        Functions.prototype.replaceB = function (oldText, startNum, numBytes, newText) {
            return _createMethodObject(FunctionResult, this, "ReplaceB", 0, [oldText, startNum, numBytes, newText], false, true, null, 0);
        };
        Functions.prototype.rept = function (text, numberTimes) {
            return _createMethodObject(FunctionResult, this, "Rept", 0, [text, numberTimes], false, true, null, 0);
        };
        Functions.prototype.right = function (text, numChars) {
            return _createMethodObject(FunctionResult, this, "Right", 0, [text, numChars], false, true, null, 0);
        };
        Functions.prototype.rightb = function (text, numBytes) {
            return _createMethodObject(FunctionResult, this, "Rightb", 0, [text, numBytes], false, true, null, 0);
        };
        Functions.prototype.roman = function (number, form) {
            return _createMethodObject(FunctionResult, this, "Roman", 0, [number, form], false, true, null, 0);
        };
        Functions.prototype.round = function (number, numDigits) {
            return _createMethodObject(FunctionResult, this, "Round", 0, [number, numDigits], false, true, null, 0);
        };
        Functions.prototype.roundDown = function (number, numDigits) {
            return _createMethodObject(FunctionResult, this, "RoundDown", 0, [number, numDigits], false, true, null, 0);
        };
        Functions.prototype.roundUp = function (number, numDigits) {
            return _createMethodObject(FunctionResult, this, "RoundUp", 0, [number, numDigits], false, true, null, 0);
        };
        Functions.prototype.rows = function (array) {
            return _createMethodObject(FunctionResult, this, "Rows", 0, [array], false, true, null, 0);
        };
        Functions.prototype.rri = function (nper, pv, fv) {
            return _createMethodObject(FunctionResult, this, "Rri", 0, [nper, pv, fv], false, true, null, 0);
        };
        Functions.prototype.sec = function (number) {
            return _createMethodObject(FunctionResult, this, "Sec", 0, [number], false, true, null, 0);
        };
        Functions.prototype.sech = function (number) {
            return _createMethodObject(FunctionResult, this, "Sech", 0, [number], false, true, null, 0);
        };
        Functions.prototype.second = function (serialNumber) {
            return _createMethodObject(FunctionResult, this, "Second", 0, [serialNumber], false, true, null, 0);
        };
        Functions.prototype.seriesSum = function (x, n, m, coefficients) {
            return _createMethodObject(FunctionResult, this, "SeriesSum", 0, [x, n, m, coefficients], false, true, null, 0);
        };
        Functions.prototype.sheet = function (value) {
            return _createMethodObject(FunctionResult, this, "Sheet", 0, [value], false, true, null, 0);
        };
        Functions.prototype.sheets = function (reference) {
            return _createMethodObject(FunctionResult, this, "Sheets", 0, [reference], false, true, null, 0);
        };
        Functions.prototype.sign = function (number) {
            return _createMethodObject(FunctionResult, this, "Sign", 0, [number], false, true, null, 0);
        };
        Functions.prototype.sin = function (number) {
            return _createMethodObject(FunctionResult, this, "Sin", 0, [number], false, true, null, 0);
        };
        Functions.prototype.sinh = function (number) {
            return _createMethodObject(FunctionResult, this, "Sinh", 0, [number], false, true, null, 0);
        };
        Functions.prototype.skew = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Skew", 0, [values], false, true, null, 0);
        };
        Functions.prototype.skew_p = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Skew_p", 0, [values], false, true, null, 0);
        };
        Functions.prototype.sln = function (cost, salvage, life) {
            return _createMethodObject(FunctionResult, this, "Sln", 0, [cost, salvage, life], false, true, null, 0);
        };
        Functions.prototype.small = function (array, k) {
            return _createMethodObject(FunctionResult, this, "Small", 0, [array, k], false, true, null, 0);
        };
        Functions.prototype.sqrt = function (number) {
            return _createMethodObject(FunctionResult, this, "Sqrt", 0, [number], false, true, null, 0);
        };
        Functions.prototype.sqrtPi = function (number) {
            return _createMethodObject(FunctionResult, this, "SqrtPi", 0, [number], false, true, null, 0);
        };
        Functions.prototype.stDevA = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "StDevA", 0, [values], false, true, null, 0);
        };
        Functions.prototype.stDevPA = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "StDevPA", 0, [values], false, true, null, 0);
        };
        Functions.prototype.stDev_P = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "StDev_P", 0, [values], false, true, null, 0);
        };
        Functions.prototype.stDev_S = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "StDev_S", 0, [values], false, true, null, 0);
        };
        Functions.prototype.standardize = function (x, mean, standardDev) {
            return _createMethodObject(FunctionResult, this, "Standardize", 0, [x, mean, standardDev], false, true, null, 0);
        };
        Functions.prototype.substitute = function (text, oldText, newText, instanceNum) {
            return _createMethodObject(FunctionResult, this, "Substitute", 0, [text, oldText, newText, instanceNum], false, true, null, 0);
        };
        Functions.prototype.subtotal = function (functionNum) {
            var values = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                values[_i - 1] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Subtotal", 0, [functionNum, values], false, true, null, 0);
        };
        Functions.prototype.sum = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Sum", 0, [values], false, true, null, 0);
        };
        Functions.prototype.sumIf = function (range, criteria, sumRange) {
            return _createMethodObject(FunctionResult, this, "SumIf", 0, [range, criteria, sumRange], false, true, null, 0);
        };
        Functions.prototype.sumIfs = function (sumRange) {
            var values = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                values[_i - 1] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "SumIfs", 0, [sumRange, values], false, true, null, 0);
        };
        Functions.prototype.sumSq = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "SumSq", 0, [values], false, true, null, 0);
        };
        Functions.prototype.syd = function (cost, salvage, life, per) {
            return _createMethodObject(FunctionResult, this, "Syd", 0, [cost, salvage, life, per], false, true, null, 0);
        };
        Functions.prototype.t = function (value) {
            return _createMethodObject(FunctionResult, this, "T", 0, [value], false, true, null, 0);
        };
        Functions.prototype.tbillEq = function (settlement, maturity, discount) {
            return _createMethodObject(FunctionResult, this, "TBillEq", 0, [settlement, maturity, discount], false, true, null, 0);
        };
        Functions.prototype.tbillPrice = function (settlement, maturity, discount) {
            return _createMethodObject(FunctionResult, this, "TBillPrice", 0, [settlement, maturity, discount], false, true, null, 0);
        };
        Functions.prototype.tbillYield = function (settlement, maturity, pr) {
            return _createMethodObject(FunctionResult, this, "TBillYield", 0, [settlement, maturity, pr], false, true, null, 0);
        };
        Functions.prototype.t_Dist = function (x, degFreedom, cumulative) {
            return _createMethodObject(FunctionResult, this, "T_Dist", 0, [x, degFreedom, cumulative], false, true, null, 0);
        };
        Functions.prototype.t_Dist_2T = function (x, degFreedom) {
            return _createMethodObject(FunctionResult, this, "T_Dist_2T", 0, [x, degFreedom], false, true, null, 0);
        };
        Functions.prototype.t_Dist_RT = function (x, degFreedom) {
            return _createMethodObject(FunctionResult, this, "T_Dist_RT", 0, [x, degFreedom], false, true, null, 0);
        };
        Functions.prototype.t_Inv = function (probability, degFreedom) {
            return _createMethodObject(FunctionResult, this, "T_Inv", 0, [probability, degFreedom], false, true, null, 0);
        };
        Functions.prototype.t_Inv_2T = function (probability, degFreedom) {
            return _createMethodObject(FunctionResult, this, "T_Inv_2T", 0, [probability, degFreedom], false, true, null, 0);
        };
        Functions.prototype.tan = function (number) {
            return _createMethodObject(FunctionResult, this, "Tan", 0, [number], false, true, null, 0);
        };
        Functions.prototype.tanh = function (number) {
            return _createMethodObject(FunctionResult, this, "Tanh", 0, [number], false, true, null, 0);
        };
        Functions.prototype.text = function (value, formatText) {
            return _createMethodObject(FunctionResult, this, "Text", 0, [value, formatText], false, true, null, 0);
        };
        Functions.prototype.time = function (hour, minute, second) {
            return _createMethodObject(FunctionResult, this, "Time", 0, [hour, minute, second], false, true, null, 0);
        };
        Functions.prototype.timevalue = function (timeText) {
            return _createMethodObject(FunctionResult, this, "Timevalue", 0, [timeText], false, true, null, 0);
        };
        Functions.prototype.today = function () {
            return _createMethodObject(FunctionResult, this, "Today", 0, [], false, true, null, 0);
        };
        Functions.prototype.trim = function (text) {
            return _createMethodObject(FunctionResult, this, "Trim", 0, [text], false, true, null, 0);
        };
        Functions.prototype.trimMean = function (array, percent) {
            return _createMethodObject(FunctionResult, this, "TrimMean", 0, [array, percent], false, true, null, 0);
        };
        Functions.prototype["true"] = function () {
            return _createMethodObject(FunctionResult, this, "True", 0, [], false, true, null, 0);
        };
        Functions.prototype.trunc = function (number, numDigits) {
            return _createMethodObject(FunctionResult, this, "Trunc", 0, [number, numDigits], false, true, null, 0);
        };
        Functions.prototype.type = function (value) {
            return _createMethodObject(FunctionResult, this, "Type", 0, [value], false, true, null, 0);
        };
        Functions.prototype.usdollar = function (number, decimals) {
            return _createMethodObject(FunctionResult, this, "USDollar", 0, [number, decimals], false, true, null, 0);
        };
        Functions.prototype.unichar = function (number) {
            return _createMethodObject(FunctionResult, this, "Unichar", 0, [number], false, true, null, 0);
        };
        Functions.prototype.unicode = function (text) {
            return _createMethodObject(FunctionResult, this, "Unicode", 0, [text], false, true, null, 0);
        };
        Functions.prototype.upper = function (text) {
            return _createMethodObject(FunctionResult, this, "Upper", 0, [text], false, true, null, 0);
        };
        Functions.prototype.vlookup = function (lookupValue, tableArray, colIndexNum, rangeLookup) {
            return _createMethodObject(FunctionResult, this, "VLookup", 0, [lookupValue, tableArray, colIndexNum, rangeLookup], false, true, null, 0);
        };
        Functions.prototype.value = function (text) {
            return _createMethodObject(FunctionResult, this, "Value", 0, [text], false, true, null, 0);
        };
        Functions.prototype.varA = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "VarA", 0, [values], false, true, null, 0);
        };
        Functions.prototype.varPA = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "VarPA", 0, [values], false, true, null, 0);
        };
        Functions.prototype.var_P = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Var_P", 0, [values], false, true, null, 0);
        };
        Functions.prototype.var_S = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Var_S", 0, [values], false, true, null, 0);
        };
        Functions.prototype.vdb = function (cost, salvage, life, startPeriod, endPeriod, factor, noSwitch) {
            return _createMethodObject(FunctionResult, this, "Vdb", 0, [cost, salvage, life, startPeriod, endPeriod, factor, noSwitch], false, true, null, 0);
        };
        Functions.prototype.weekNum = function (serialNumber, returnType) {
            return _createMethodObject(FunctionResult, this, "WeekNum", 0, [serialNumber, returnType], false, true, null, 0);
        };
        Functions.prototype.weekday = function (serialNumber, returnType) {
            return _createMethodObject(FunctionResult, this, "Weekday", 0, [serialNumber, returnType], false, true, null, 0);
        };
        Functions.prototype.weibull_Dist = function (x, alpha, beta, cumulative) {
            return _createMethodObject(FunctionResult, this, "Weibull_Dist", 0, [x, alpha, beta, cumulative], false, true, null, 0);
        };
        Functions.prototype.workDay = function (startDate, days, holidays) {
            return _createMethodObject(FunctionResult, this, "WorkDay", 0, [startDate, days, holidays], false, true, null, 0);
        };
        Functions.prototype.workDay_Intl = function (startDate, days, weekend, holidays) {
            return _createMethodObject(FunctionResult, this, "WorkDay_Intl", 0, [startDate, days, weekend, holidays], false, true, null, 0);
        };
        Functions.prototype.xirr = function (values, dates, guess) {
            return _createMethodObject(FunctionResult, this, "Xirr", 0, [values, dates, guess], false, true, null, 0);
        };
        Functions.prototype.xnpv = function (rate, values, dates) {
            return _createMethodObject(FunctionResult, this, "Xnpv", 0, [rate, values, dates], false, true, null, 0);
        };
        Functions.prototype.xor = function () {
            var values = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                values[_i] = arguments[_i];
            }
            return _createMethodObject(FunctionResult, this, "Xor", 0, [values], false, true, null, 0);
        };
        Functions.prototype.year = function (serialNumber) {
            return _createMethodObject(FunctionResult, this, "Year", 0, [serialNumber], false, true, null, 0);
        };
        Functions.prototype.yearFrac = function (startDate, endDate, basis) {
            return _createMethodObject(FunctionResult, this, "YearFrac", 0, [startDate, endDate, basis], false, true, null, 0);
        };
        Functions.prototype.yield = function (settlement, maturity, rate, pr, redemption, frequency, basis) {
            return _createMethodObject(FunctionResult, this, "Yield", 0, [settlement, maturity, rate, pr, redemption, frequency, basis], false, true, null, 0);
        };
        Functions.prototype.yieldDisc = function (settlement, maturity, pr, redemption, basis) {
            return _createMethodObject(FunctionResult, this, "YieldDisc", 0, [settlement, maturity, pr, redemption, basis], false, true, null, 0);
        };
        Functions.prototype.yieldMat = function (settlement, maturity, issue, rate, pr, basis) {
            return _createMethodObject(FunctionResult, this, "YieldMat", 0, [settlement, maturity, issue, rate, pr, basis], false, true, null, 0);
        };
        Functions.prototype.z_Test = function (array, x, sigma) {
            return _createMethodObject(FunctionResult, this, "Z_Test", 0, [array, x, sigma], false, true, null, 0);
        };
        Functions.prototype._handleResult = function (value) {
            _super.prototype._handleResult.call(this, value);
            if (_isNullOrUndefined(value))
                return;
            var obj = value;
            _fixObjectPathIfNecessary(this, obj);
        };
        Functions.prototype._handleRetrieveResult = function (value, result) {
            _super.prototype._handleRetrieveResult.call(this, value, result);
            _processRetrieveResult(this, value, result);
        };
        Functions.prototype.toJSON = function () {
            return _toJson(this, {}, {});
        };
        return Functions;
    }(OfficeExtension.ClientObject));
    Excel.Functions = Functions;
    var ErrorCodes;
    (function (ErrorCodes) {
        ErrorCodes["accessDenied"] = "AccessDenied";
        ErrorCodes["apiNotFound"] = "ApiNotFound";
        ErrorCodes["conflict"] = "Conflict";
        ErrorCodes["emptyChartSeries"] = "EmptyChartSeries";
        ErrorCodes["filteredRangeConflict"] = "FilteredRangeConflict";
        ErrorCodes["formulaLengthExceedsLimit"] = "FormulaLengthExceedsLimit";
        ErrorCodes["generalException"] = "GeneralException";
        ErrorCodes["inactiveWorkbook"] = "InactiveWorkbook";
        ErrorCodes["insertDeleteConflict"] = "InsertDeleteConflict";
        ErrorCodes["invalidArgument"] = "InvalidArgument";
        ErrorCodes["invalidBinding"] = "InvalidBinding";
        ErrorCodes["invalidOperation"] = "InvalidOperation";
        ErrorCodes["invalidReference"] = "InvalidReference";
        ErrorCodes["invalidSelection"] = "InvalidSelection";
        ErrorCodes["itemAlreadyExists"] = "ItemAlreadyExists";
        ErrorCodes["itemNotFound"] = "ItemNotFound";
        ErrorCodes["mergedRangeConflict"] = "MergedRangeConflict";
        ErrorCodes["nonBlankCellOffSheet"] = "NonBlankCellOffSheet";
        ErrorCodes["notImplemented"] = "NotImplemented";
        ErrorCodes["openWorkbookLinksBlocked"] = "OpenWorkbookLinksBlocked";
        ErrorCodes["pivotTableRangeConflict"] = "PivotTableRangeConflict";
        ErrorCodes["rangeExceedsLimit"] = "RangeExceedsLimit";
        ErrorCodes["refreshWorkbookLinksBlocked"] = "RefreshWorkbookLinksBlocked";
        ErrorCodes["requestAborted"] = "RequestAborted";
        ErrorCodes["responsePayloadSizeLimitExceeded"] = "ResponsePayloadSizeLimitExceeded";
        ErrorCodes["unsupportedFeature"] = "UnsupportedFeature";
        ErrorCodes["unsupportedOperation"] = "UnsupportedOperation";
        ErrorCodes["unsupportedSheet"] = "UnsupportedSheet";
        ErrorCodes["invalidOperationInCellEditMode"] = "InvalidOperationInCellEditMode";
    })(ErrorCodes = Excel.ErrorCodes || (Excel.ErrorCodes = {}));
    var Interfaces;
    (function (Interfaces) {
    })(Interfaces = Excel.Interfaces || (Excel.Interfaces = {}));
})(Excel || (Excel = {}));
var _EndExcel = "_EndExcel";
if (typeof (window) !== "undefined" &&
    window.OSF &&
    window.OSF._OfficeAppFactory &&
    window.OSF._OfficeAppFactory.getHostInfo &&
    window.OSF._OfficeAppFactory.getHostInfo()) {
    var hostPlatform = window.OSF._OfficeAppFactory.getHostInfo().hostPlatform;
    if (hostPlatform === "web") {
        OfficeExtension._internalConfig.enablePreviewExecution = true;
    }
}
!function (modules) {
    var installedModules = {};
    function __webpack_require__(moduleId) {
        if (installedModules[moduleId])
            return installedModules[moduleId].exports;
        var module = installedModules[moduleId] = {
            i: moduleId,
            l: !1,
            exports: {}
        };
        return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),
            module.l = !0, module.exports;
    }
    __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function (exports, name, getter) {
        __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {
            enumerable: !0,
            get: getter
        });
    }, __webpack_require__.r = function (exports) {
        "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports, Symbol.toStringTag, {
            value: "Module"
        }), Object.defineProperty(exports, "__esModule", {
            value: !0
        });
    }, __webpack_require__.t = function (value, mode) {
        if (1 & mode && (value = __webpack_require__(value)), 8 & mode)
            return value;
        if (4 & mode && "object" == typeof value && value && value.__esModule)
            return value;
        var ns = Object.create(null);
        if (__webpack_require__.r(ns), Object.defineProperty(ns, "default", {
            enumerable: !0,
            value: value
        }), 2 & mode && "string" != typeof value)
            for (var key in value)
                __webpack_require__.d(ns, key, function (key) {
                    return value[key];
                }.bind(null, key));
        return ns;
    }, __webpack_require__.n = function (module) {
        var getter = module && module.__esModule ? function () {
            return module["default"];
        } : function () {
            return module;
        };
        return __webpack_require__.d(getter, "a", getter), getter;
    }, __webpack_require__.o = function (object, property) {
        return Object.prototype.hasOwnProperty.call(object, property);
    }, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 1);
}([function (module, exports) {
        module.exports = OfficeExtensionBatch;
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), __webpack_require__(2), "undefined" == typeof CustomFunctionMappings && (window.CustomFunctionMappings = {}),
            "undefined" == typeof Promise && (window.Promise = Office.Promise), window.OfficeExtensionBatch = window.OfficeExtensionBatch || window.OfficeExtension;
        var customfunctions_agave_initialize_1 = __webpack_require__(3);
        !function () {
            var shouldInitialize = !1;
            "undefined" != typeof OSF && OSF._OfficeAppFactory && OSF._OfficeAppFactory.getHostInfo && (0 != (2 & (OSF._OfficeAppFactory && OSF._OfficeAppFactory.getHostInfo().flags)) && (shouldInitialize = !0));
            customfunctions_agave_initialize_1["default"](shouldInitialize);
        }();
    }, function (module, exports) {
        !function (self) {
            "use strict";
            if (!self.fetch) {
                var support_searchParams = "URLSearchParams" in self, support_iterable = "Symbol" in self && "iterator" in Symbol, support_blob = "FileReader" in self && "Blob" in self && function () {
                    try {
                        return new Blob, !0;
                    }
                    catch (e) {
                        return !1;
                    }
                }(), support_formData = "FormData" in self, support_arrayBuffer = "ArrayBuffer" in self;
                if (support_arrayBuffer)
                    var viewClasses = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"], isDataView = function (obj) {
                        return obj && DataView.prototype.isPrototypeOf(obj);
                    }, isArrayBufferView = ArrayBuffer.isView || function (obj) {
                        return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;
                    };
                Headers.prototype.append = function (name, value) {
                    name = normalizeName(name), value = normalizeValue(value);
                    var oldValue = this.map[name];
                    this.map[name] = oldValue ? oldValue + "," + value : value;
                }, Headers.prototype["delete"] = function (name) {
                    delete this.map[normalizeName(name)];
                }, Headers.prototype.get = function (name) {
                    return name = normalizeName(name), this.has(name) ? this.map[name] : null;
                }, Headers.prototype.has = function (name) {
                    return this.map.hasOwnProperty(normalizeName(name));
                }, Headers.prototype.set = function (name, value) {
                    this.map[normalizeName(name)] = normalizeValue(value);
                }, Headers.prototype.forEach = function (callback, thisArg) {
                    for (var name in this.map)
                        this.map.hasOwnProperty(name) && callback.call(thisArg, this.map[name], name, this);
                }, Headers.prototype.keys = function () {
                    var items = [];
                    return this.forEach((function (value, name) {
                        items.push(name);
                    })), iteratorFor(items);
                }, Headers.prototype.values = function () {
                    var items = [];
                    return this.forEach((function (value) {
                        items.push(value);
                    })), iteratorFor(items);
                }, Headers.prototype.entries = function () {
                    var items = [];
                    return this.forEach((function (value, name) {
                        items.push([name, value]);
                    })), iteratorFor(items);
                }, support_iterable && (Headers.prototype[Symbol.iterator] = Headers.prototype.entries);
                var methods = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
                Request.prototype.clone = function () {
                    return new Request(this, {
                        body: this._bodyInit
                    });
                }, Body.call(Request.prototype), Body.call(Response.prototype), Response.prototype.clone = function () {
                    return new Response(this._bodyInit, {
                        status: this.status,
                        statusText: this.statusText,
                        headers: new Headers(this.headers),
                        url: this.url
                    });
                }, Response.error = function () {
                    var response = new Response(null, {
                        status: 0,
                        statusText: ""
                    });
                    return response.type = "error", response;
                };
                var redirectStatuses = [301, 302, 303, 307, 308];
                Response.redirect = function (url, status) {
                    if (-1 === redirectStatuses.indexOf(status))
                        throw new RangeError("Invalid status code");
                    return new Response(null, {
                        status: status,
                        headers: {
                            location: url
                        }
                    });
                }, self.Headers = Headers, self.Request = Request, self.Response = Response, self.fetch = function (input, init) {
                    return new Promise((function (resolve, reject) {
                        var request = new Request(input, init), xhr = new XMLHttpRequest;
                        xhr.onload = function () {
                            var rawHeaders, headers, options = {
                                status: xhr.status,
                                statusText: xhr.statusText,
                                headers: (rawHeaders = xhr.getAllResponseHeaders() || "", headers = new Headers,
                                    rawHeaders.split(/\r?\n/).forEach((function (line) {
                                        var parts = line.split(":"), key = parts.shift().trim();
                                        if (key) {
                                            var value = parts.join(":").trim();
                                            headers.append(key, value);
                                        }
                                    })), headers)
                            };
                            options.url = "responseURL" in xhr ? xhr.responseURL : options.headers.get("X-Request-URL");
                            var body = "response" in xhr ? xhr.response : xhr.responseText;
                            resolve(new Response(body, options));
                        }, xhr.onerror = function () {
                            reject(new TypeError("Network request failed"));
                        }, xhr.ontimeout = function () {
                            reject(new TypeError("Network request failed"));
                        }, xhr.open(request.method, request.url, !0), "include" === request.credentials && (xhr.withCredentials = !0),
                            "responseType" in xhr && support_blob && (xhr.responseType = "blob"), request.headers.forEach((function (value, name) {
                            xhr.setRequestHeader(name, value);
                        })), xhr.send(void 0 === request._bodyInit ? null : request._bodyInit);
                    }));
                }, self.fetch.polyfill = !0;
            }
            function normalizeName(name) {
                if ("string" != typeof name && (name = String(name)), /[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name))
                    throw new TypeError("Invalid character in header field name");
                return name.toLowerCase();
            }
            function normalizeValue(value) {
                return "string" != typeof value && (value = String(value)), value;
            }
            function iteratorFor(items) {
                var iterator = {
                    next: function () {
                        var value = items.shift();
                        return {
                            done: void 0 === value,
                            value: value
                        };
                    }
                };
                return support_iterable && (iterator[Symbol.iterator] = function () {
                    return iterator;
                }), iterator;
            }
            function Headers(headers) {
                this.map = {}, headers instanceof Headers ? headers.forEach((function (value, name) {
                    this.append(name, value);
                }), this) : Array.isArray(headers) ? headers.forEach((function (header) {
                    this.append(header[0], header[1]);
                }), this) : headers && Object.getOwnPropertyNames(headers).forEach((function (name) {
                    this.append(name, headers[name]);
                }), this);
            }
            function consumed(body) {
                if (body.bodyUsed)
                    return Promise.reject(new TypeError("Already read"));
                body.bodyUsed = !0;
            }
            function fileReaderReady(reader) {
                return new Promise((function (resolve, reject) {
                    reader.onload = function () {
                        resolve(reader.result);
                    }, reader.onerror = function () {
                        reject(reader.error);
                    };
                }));
            }
            function readBlobAsArrayBuffer(blob) {
                var reader = new FileReader, promise = fileReaderReady(reader);
                return reader.readAsArrayBuffer(blob), promise;
            }
            function bufferClone(buf) {
                if (buf.slice)
                    return buf.slice(0);
                var view = new Uint8Array(buf.byteLength);
                return view.set(new Uint8Array(buf)), view.buffer;
            }
            function Body() {
                return this.bodyUsed = !1, this._initBody = function (body) {
                    if (this._bodyInit = body, body)
                        if ("string" == typeof body)
                            this._bodyText = body;
                        else if (support_blob && Blob.prototype.isPrototypeOf(body))
                            this._bodyBlob = body;
                        else if (support_formData && FormData.prototype.isPrototypeOf(body))
                            this._bodyFormData = body;
                        else if (support_searchParams && URLSearchParams.prototype.isPrototypeOf(body))
                            this._bodyText = body.toString();
                        else if (support_arrayBuffer && support_blob && isDataView(body))
                            this._bodyArrayBuffer = bufferClone(body.buffer),
                                this._bodyInit = new Blob([this._bodyArrayBuffer]);
                        else {
                            if (!support_arrayBuffer || !ArrayBuffer.prototype.isPrototypeOf(body) && !isArrayBufferView(body))
                                throw new Error("unsupported BodyInit type");
                            this._bodyArrayBuffer = bufferClone(body);
                        }
                    else
                        this._bodyText = "";
                    this.headers.get("content-type") || ("string" == typeof body ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : support_searchParams && URLSearchParams.prototype.isPrototypeOf(body) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
                }, support_blob && (this.blob = function () {
                    var rejected = consumed(this);
                    if (rejected)
                        return rejected;
                    if (this._bodyBlob)
                        return Promise.resolve(this._bodyBlob);
                    if (this._bodyArrayBuffer)
                        return Promise.resolve(new Blob([this._bodyArrayBuffer]));
                    if (this._bodyFormData)
                        throw new Error("could not read FormData body as blob");
                    return Promise.resolve(new Blob([this._bodyText]));
                }, this.arrayBuffer = function () {
                    return this._bodyArrayBuffer ? consumed(this) || Promise.resolve(this._bodyArrayBuffer) : this.blob().then(readBlobAsArrayBuffer);
                }), this.text = function () {
                    var blob, reader, promise, rejected = consumed(this);
                    if (rejected)
                        return rejected;
                    if (this._bodyBlob)
                        return blob = this._bodyBlob, reader = new FileReader, promise = fileReaderReady(reader),
                            reader.readAsText(blob), promise;
                    if (this._bodyArrayBuffer)
                        return Promise.resolve(function (buf) {
                            for (var view = new Uint8Array(buf), chars = new Array(view.length), i = 0; i < view.length; i++)
                                chars[i] = String.fromCharCode(view[i]);
                            return chars.join("");
                        }(this._bodyArrayBuffer));
                    if (this._bodyFormData)
                        throw new Error("could not read FormData body as text");
                    return Promise.resolve(this._bodyText);
                }, support_formData && (this.formData = function () {
                    return this.text().then(decode);
                }), this.json = function () {
                    return this.text().then(JSON.parse);
                }, this;
            }
            function Request(input, options) {
                var method, upcased, body = (options = options || {}).body;
                if (input instanceof Request) {
                    if (input.bodyUsed)
                        throw new TypeError("Already read");
                    this.url = input.url, this.credentials = input.credentials, options.headers || (this.headers = new Headers(input.headers)),
                        this.method = input.method, this.mode = input.mode, body || null == input._bodyInit || (body = input._bodyInit,
                        input.bodyUsed = !0);
                }
                else
                    this.url = String(input);
                if (this.credentials = options.credentials || this.credentials || "omit", !options.headers && this.headers || (this.headers = new Headers(options.headers)),
                    this.method = (method = options.method || this.method || "GET", upcased = method.toUpperCase(),
                        methods.indexOf(upcased) > -1 ? upcased : method), this.mode = options.mode || this.mode || null,
                    this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && body)
                    throw new TypeError("Body not allowed for GET or HEAD requests");
                this._initBody(body);
            }
            function decode(body) {
                var form = new FormData;
                return body.trim().split("&").forEach((function (bytes) {
                    if (bytes) {
                        var split = bytes.split("="), name = split.shift().replace(/\+/g, " "), value = split.join("=").replace(/\+/g, " ");
                        form.append(decodeURIComponent(name), decodeURIComponent(value));
                    }
                })), form;
            }
            function Response(bodyInit, options) {
                options || (options = {}), this.type = "default", this.status = "status" in options ? options.status : 200,
                    this.ok = this.status >= 200 && this.status < 300, this.statusText = "statusText" in options ? options.statusText : "OK",
                    this.headers = new Headers(options.headers), this.url = options.url || "", this._initBody(bodyInit);
            }
        }("undefined" != typeof self ? self : this);
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        });
        var CFRuntime = __webpack_require__(4);
        exports["default"] = function (shouldInitRuntime) {
            function documentReadyCallback() {
                Office.onReady((function (hostInfo) {
                    hostInfo.host === Office.HostType.Excel ? function initializeCustomFunctionsOrDelay() {
                        CustomFunctionMappings && CustomFunctionMappings.__delay__ ? setTimeout(initializeCustomFunctionsOrDelay, 50) : CFRuntime.CustomFunctions.initialize();
                    }() : console.warn("Warning: Expected to be loaded inside of an Excel add-in.");
                }));
            }
            window.CustomFunctions = window.CustomFunctions || {}, window.CustomFunctions.setCustomFunctionInvoker = CFRuntime.setCustomFunctionInvoker,
                window.CustomFunctions.Error = CFRuntime.CustomFunctionError, window.CustomFunctions.ErrorCode = CFRuntime.ErrorCode,
                window.CustomFunctions.FormattedNumber = CFRuntime.CustomFunctionFormattedNumber,
                window.CustomFunctions.Entity = CFRuntime.CustomFunctionEntity, window.CustomFunctions.WebImage = CFRuntime.CustomFunctionWebImage,
                window.CustomFunctions.Attribution = CFRuntime.CustomFunctionAttribution, window.CustomFunctions.Provider = CFRuntime.CustomFunctionProvider,
                CFRuntime.setCustomFunctionAssociation(window.CustomFunctions._association), shouldInitRuntime && ("loading" === document.readyState ? document.addEventListener("DOMContentLoaded", documentReadyCallback) : documentReadyCallback());
        };
    }, function (module, exports, __webpack_require__) {
        "use strict";
        var extendStatics, __extends = this && this.__extends || (extendStatics = function (d, b) {
            return (extendStatics = Object.setPrototypeOf || {
                __proto__: []
            } instanceof Array && function (d, b) {
                d.__proto__ = b;
            } || function (d, b) {
                for (var p in b)
                    b.hasOwnProperty(p) && (d[p] = b[p]);
            })(d, b);
        }, function (d, b) {
            function __() {
                this.constructor = d;
            }
            extendStatics(d, b), d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype,
                new __);
        });
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.CustomFunctionsContainer = exports.CustomFunctions = exports.setCustomFunctionInvoker = exports.setCustomFunctionAssociation = exports.customFunctionProxy = exports.CustomFunctionProxy = exports.CreateCustomFunctionInstance = exports.CustomFunctionProvider = exports.CustomFunctionAttribution = exports.CustomFunctionWebImage = exports.CustomFunctionFormattedNumber = exports.CustomFunctionEntity = exports.CustomFunctionError = exports.ErrorCode = exports.InvocationContext = exports.Script = void 0;
        var OfficeExtension = __webpack_require__(0), Core = __webpack_require__(0), _createPropertyObject = OfficeExtension.BatchApiHelper.createPropertyObject, _createRootServiceObject = (OfficeExtension.BatchApiHelper.createMethodObject,
            OfficeExtension.BatchApiHelper.createIndexerObject, OfficeExtension.BatchApiHelper.createRootServiceObject), _createTopLevelServiceObject = OfficeExtension.BatchApiHelper.createTopLevelServiceObject, _invokeMethod = (OfficeExtension.BatchApiHelper.createChildItemObject,
            OfficeExtension.BatchApiHelper.invokeMethod), _isNullOrUndefined = (OfficeExtension.BatchApiHelper.invokeEnsureUnchanged,
            OfficeExtension.BatchApiHelper.invokeSetProperty, OfficeExtension.Utility.isNullOrUndefined), _throwIfApiNotSupported = (OfficeExtension.Utility.isUndefined,
            OfficeExtension.Utility.throwIfNotLoaded, OfficeExtension.Utility.throwIfApiNotSupported), _load = OfficeExtension.Utility.load, _toJson = (OfficeExtension.Utility.retrieve,
            OfficeExtension.Utility.toJson), _fixObjectPathIfNecessary = OfficeExtension.Utility.fixObjectPathIfNecessary, _handleNavigationPropertyResults = OfficeExtension.Utility._handleNavigationPropertyResults, _processRetrieveResult = (OfficeExtension.Utility.adjustToDateTime,
            OfficeExtension.Utility.processRetrieveResult), CustomFunctionRequestContext = (OfficeExtension.Utility.setMockData,
            OfficeExtension.CommonUtility.calculateApiFlags, function (_super) {
            function CustomFunctionRequestContext(requestInfo) {
                var _this = _super.call(this, requestInfo) || this;
                return _this.m_customFunctions = CustomFunctions.newObject(_this), _this.m_container = _createRootServiceObject(CustomFunctionsContainer, _this),
                    _this._rootObject = _this.m_container, _this._rootObjectPropertyName = "customFunctionsContainer",
                    _this._requestFlagModifier = 2176, _this;
            }
            return __extends(CustomFunctionRequestContext, _super), Object.defineProperty(CustomFunctionRequestContext.prototype, "customFunctions", {
                get: function () {
                    return this.m_customFunctions;
                },
                enumerable: !1,
                configurable: !0
            }), Object.defineProperty(CustomFunctionRequestContext.prototype, "customFunctionsContainer", {
                get: function () {
                    return this.m_container;
                },
                enumerable: !1,
                configurable: !0
            }), CustomFunctionRequestContext.prototype._processOfficeJsErrorResponse = function (officeJsErrorCode, response) {
                5004 === officeJsErrorCode && (response.ErrorCode = CustomFunctionRuntimeErrorCode.invalidOperationInCellEditMode,
                    response.ErrorMessage = OfficeExtension.Utility._getResourceString(OfficeExtension.ResourceStrings.invalidOperationInCellEditMode));
            }, CustomFunctionRequestContext;
        }(OfficeExtension.ClientRequestContext));
        exports.Script = {
            _CustomFunctionMetadata: {}
        };
        var CustomFunctionLoggingSeverity, InvocationContext = function () {
            function InvocationContext(functionName, address, parameterAddresses, setResultHandler, setErrorHandler) {
                this._functionName = functionName, _isNullOrUndefined(address) || (this._address = address),
                    _isNullOrUndefined(parameterAddresses) || (this._parameterAddresses = parameterAddresses),
                    this.setResult = setResultHandler, this.setError = setErrorHandler;
            }
            return Object.defineProperty(InvocationContext.prototype, "onCanceled", {
                get: function () {
                    if (!_isNullOrUndefined(this._onCanceled) && "function" == typeof this._onCanceled)
                        return this._onCanceled;
                },
                set: function (handler) {
                    this._onCanceled = handler;
                },
                enumerable: !1,
                configurable: !0
            }), Object.defineProperty(InvocationContext.prototype, "functionName", {
                get: function () {
                    return this._functionName;
                },
                enumerable: !1,
                configurable: !0
            }), Object.defineProperty(InvocationContext.prototype, "address", {
                get: function () {
                    return this._address;
                },
                enumerable: !1,
                configurable: !0
            }), Object.defineProperty(InvocationContext.prototype, "parameterAddresses", {
                get: function () {
                    return this._parameterAddresses;
                },
                enumerable: !1,
                configurable: !0
            }), InvocationContext;
        }();
        exports.InvocationContext = InvocationContext, function (CustomFunctionLoggingSeverity) {
            CustomFunctionLoggingSeverity.Info = "Medium", CustomFunctionLoggingSeverity.Error = "Unexpected",
                CustomFunctionLoggingSeverity.Verbose = "Verbose";
        }(CustomFunctionLoggingSeverity || (CustomFunctionLoggingSeverity = {}));
        var ErrorCode, CustomFunctionLog = function (Severity, Message) {
            this.Severity = Severity, this.Message = Message;
        }, CustomFunctionsLogger = function () {
            function CustomFunctionsLogger() { }
            return CustomFunctionsLogger.logEvent = function (log, data, data2) {
                if (CustomFunctionsLogger.s_shouldLog || OfficeExtension.CoreUtility._logEnabled) {
                    var logMessage = log.Severity + " " + log.Message + data;
                    if (data2 && (logMessage = logMessage + " " + data2), OfficeExtension.Utility.log(logMessage),
                        CustomFunctionsLogger.s_shouldLog)
                        switch (log.Severity) {
                            case CustomFunctionLoggingSeverity.Verbose:
                                null !== console.log && console.log(logMessage);
                                break;
                            case CustomFunctionLoggingSeverity.Info:
                                null !== console.info && console.info(logMessage);
                                break;
                            case CustomFunctionLoggingSeverity.Error:
                                null !== console.error && console.error(logMessage);
                        }
                }
            }, CustomFunctionsLogger.shouldLog = function () {
                try {
                    return !_isNullOrUndefined(console) && !_isNullOrUndefined(window) && window.name && "string" == typeof window.name && JSON.parse(window.name)[CustomFunctionsLogger.CustomFunctionLoggingFlag];
                }
                catch (ex) {
                    return OfficeExtension.Utility.log(JSON.stringify(ex)), !1;
                }
            }, CustomFunctionsLogger.CustomFunctionLoggingFlag = "CustomFunctionsRuntimeLogging",
                CustomFunctionsLogger.s_shouldLog = CustomFunctionsLogger.shouldLog(), CustomFunctionsLogger;
        }();
        !function (ErrorCode) {
            ErrorCode.invalidValue = "#VALUE!", ErrorCode.notAvailable = "#N/A", ErrorCode.divisionByZero = "#DIV/0!",
                ErrorCode.invalidNumber = "#NUM!", ErrorCode.nullReference = "#NULL!", ErrorCode.invalidName = "#NAME?",
                ErrorCode.invalidReference = "#REF!";
        }(ErrorCode = exports.ErrorCode || (exports.ErrorCode = {}));
        var CustomFunctionError = function (_super) {
            function CustomFunctionError(errorCode, errorMessage, errorSubType) {
                var _this = _super.call(this, errorMessage || "") || this;
                return _this.type = CustomFunctionError.valueType, _this.basicType = CustomFunctionError.valueType,
                    Object.setPrototypeOf(_this, CustomFunctionError.prototype), _this.code = errorCode || ErrorCode.invalidValue,
                    _this.basicValue = errorCode || ErrorCode.invalidValue, _this.errorSubType = errorSubType,
                    _this.stack = void 0, _this;
            }
            return __extends(CustomFunctionError, _super), CustomFunctionError.prototype.toJSON = function () {
                return {
                    valueType: "CustomFunctionError",
                    code: this.code,
                    type: this.type,
                    basicValue: this.basicValue,
                    basicType: this.type,
                    errorSubType: this.errorSubType,
                    message: this._getMessage(),
                    errorType: this._getErrorType()
                };
            }, CustomFunctionError.prototype._getErrorType = function () {
                switch (this.basicValue) {
                    case ErrorCode.invalidValue:
                        return "Value";
                    case ErrorCode.divisionByZero:
                        return "Div0";
                    case ErrorCode.notAvailable:
                        return "Na";
                    case ErrorCode.invalidNumber:
                        return "Num";
                    case ErrorCode.invalidName:
                        return "Name";
                    case ErrorCode.invalidReference:
                        return "Ref";
                    case ErrorCode.nullReference:
                        return "Null";
                    default:
                        return;
                }
            }, CustomFunctionError.prototype._getMessage = function () {
                switch (this.basicValue) {
                    case ErrorCode.invalidValue:
                    case ErrorCode.notAvailable:
                        return "" == this.message ? void 0 : this.message;
                    case ErrorCode.divisionByZero:
                    case ErrorCode.invalidNumber:
                    case ErrorCode.invalidName:
                    case ErrorCode.invalidReference:
                    case ErrorCode.nullReference:
                    default:
                        return;
                }
            }, CustomFunctionError.valueType = "Error", CustomFunctionError;
        }(Error);
        exports.CustomFunctionError = CustomFunctionError;
        var CustomFunctionEntity = function () {
            function CustomFunctionEntity(text, properties) {
                this.type = CustomFunctionEntity.valueType, this.basicValue = "#VALUE!", this.basicType = "Error",
                    Object.setPrototypeOf(this, CustomFunctionEntity.prototype), this.text = text, this.properties = properties;
            }
            return CustomFunctionEntity.prototype.toJSON = function () {
                return {
                    type: this.type,
                    text: this.text,
                    basicValue: this.basicValue,
                    basicType: this.basicType,
                    properties: this.properties
                };
            }, CustomFunctionEntity.valueType = "Entity", CustomFunctionEntity;
        }();
        exports.CustomFunctionEntity = CustomFunctionEntity;
        var CustomFunctionFormattedNumber = function () {
            function CustomFunctionFormattedNumber(basicValue, numberFormat) {
                this.type = CustomFunctionFormattedNumber.valueType, this.basicValue = basicValue,
                    this.numberFormat = numberFormat;
            }
            return CustomFunctionFormattedNumber.prototype.toJSON = function () {
                return {
                    type: this.type,
                    basicValue: this.basicValue,
                    numberFormat: this.numberFormat
                };
            }, CustomFunctionFormattedNumber.valueType = "FormattedNumber", CustomFunctionFormattedNumber;
        }();
        exports.CustomFunctionFormattedNumber = CustomFunctionFormattedNumber;
        var CustomFunctionWebImage = function () {
            function CustomFunctionWebImage(address, altText, relatedImagesAddress, attribution, provider) {
                this.type = CustomFunctionWebImage.valueType, this.basicValue = "#VALUE!", this.basicType = "Error",
                    this.address = address, null != attribution && (this.attribution = attribution),
                    null != provider && (this.provider = provider), null != altText && (this.altText = altText),
                    null != relatedImagesAddress && (this.relatedImagesAddress = relatedImagesAddress);
            }
            return CustomFunctionWebImage.prototype.toJSON = function () {
                return {
                    type: this.type,
                    basicValue: this.basicValue,
                    basicType: this.basicType,
                    address: this.address,
                    altText: this.altText,
                    relatedImagesAddress: this.relatedImagesAddress,
                    attribution: null == this.attribution ? void 0 : this.attribution.map((function (attr) {
                        return attr.toJSON();
                    })),
                    provider: null == this.provider ? void 0 : this.provider.toJSON()
                };
            }, CustomFunctionWebImage.valueType = "WebImage", CustomFunctionWebImage;
        }();
        exports.CustomFunctionWebImage = CustomFunctionWebImage;
        var CustomFunctionAttribution = function () {
            function CustomFunctionAttribution(licenseAddress, licenseText, sourceAddress, sourceText) {
                null != licenseAddress && (this.licenseAddress = licenseAddress), null != licenseText && (this.licenseText = licenseText),
                    null != sourceAddress && (this.sourceAddress = sourceAddress), null != sourceText && (this.sourceText = sourceText);
            }
            return CustomFunctionAttribution.prototype.toJSON = function () {
                return {
                    licenseAddress: this.licenseAddress,
                    licenseText: this.licenseText,
                    sourceAddress: this.sourceAddress,
                    sourceText: this.sourceText
                };
            }, CustomFunctionAttribution;
        }();
        exports.CustomFunctionAttribution = CustomFunctionAttribution;
        var CustomFunctionProvider = function () {
            function CustomFunctionProvider(description, logoSourceAddress, logoTargetAddress) {
                this.description = description, null != logoSourceAddress && (this.logoSourceAddress = logoSourceAddress),
                    null != logoTargetAddress && (this.logoTargetAddress = logoTargetAddress);
            }
            return CustomFunctionProvider.prototype.toJSON = function () {
                return {
                    description: this.description,
                    logoSourceAddress: this.logoSourceAddress,
                    logoTargetAddress: this.logoTargetAddress
                };
            }, CustomFunctionProvider;
        }();
        exports.CustomFunctionProvider = CustomFunctionProvider, exports.CreateCustomFunctionInstance = function CreateCustomFunctionInstance(parameterValues) {
            if (parameterValues instanceof Array)
                return parameterValues.map((function (item) {
                    return CreateCustomFunctionInstance(item);
                }));
            if (!(parameterValues instanceof Object))
                return parameterValues;
            var obj = JSON.parse(parameterValues.value);
            switch (obj.type) {
                case CustomFunctionEntity.valueType:
                    return new CustomFunctionEntity(obj.text, obj.properties);
                case CustomFunctionFormattedNumber.valueType:
                    return new CustomFunctionFormattedNumber(obj.primitive, obj.numberFormat);
                case CustomFunctionError.valueType:
                    return new CustomFunctionError(obj.primitive, void 0, obj.errorSubCode);
                case CustomFunctionWebImage.valueType:
                    return new CustomFunctionWebImage(obj.address, obj.altText, obj.relatedImagesAddress, obj.attribution, obj.provider);
                case "Double":
                case "String":
                case "Boolean":
                    return obj.primitive;
                default:
                    throw OfficeExtension.Utility.createRuntimeError(CustomFunctionRuntimeErrorCode.generalException, "message", "CustomFunctionProxy.createRichDataFromJsonString");
            }
        };
        var CustomFunctionProxy = function () {
            function CustomFunctionProxy() {
                this._whenInit = void 0, this._isInit = !1, this._setResultsDelayMillis = 50, this._setResultsOverdueDelayMillis = 2e3,
                    this._maxContextSyncExecutionDurationMills = 15e3, this._minContextSyncIntervalMills = 500,
                    this._smallerMinContextSyncIntervalMills = 200, this._maxContextSyncIntervalMills = 2e3,
                    this._setResultsLifeMillis = 6e4, this._ensureInitRetryDelayMillis = 500, this._resultEntryBuffer = {},
                    this._resultEntryRetryBuffer = {}, this._retryBufferBodySize = 0, this._isSetResultsTaskScheduled = !1,
                    this._setResultsTaskOverdueTime = 0, this._inProgressContextSyncExpectedFinishTime = 0,
                    this._batchQuotaMillis = 1e3, this._invocationContextMap = {}, this._maxResultSize = 2e6;
            }
            return CustomFunctionProxy.prototype._initSettings = function () {
                if ("object" == typeof exports.Script && "object" == typeof exports.Script._CustomFunctionSettings) {
                    if ("number" == typeof exports.Script._CustomFunctionSettings.setResultsDelayMillis) {
                        var setResultsDelayMillis = exports.Script._CustomFunctionSettings.setResultsDelayMillis;
                        setResultsDelayMillis = Math.max(0, setResultsDelayMillis), setResultsDelayMillis = Math.min(1e3, setResultsDelayMillis),
                            this._setResultsDelayMillis = setResultsDelayMillis;
                    }
                    if ("number" == typeof exports.Script._CustomFunctionSettings.ensureInitRetryDelayMillis) {
                        var ensureInitRetryDelayMillis = exports.Script._CustomFunctionSettings.ensureInitRetryDelayMillis;
                        ensureInitRetryDelayMillis = Math.max(0, ensureInitRetryDelayMillis), ensureInitRetryDelayMillis = Math.min(2e3, ensureInitRetryDelayMillis),
                            this._ensureInitRetryDelayMillis = ensureInitRetryDelayMillis;
                    }
                    if ("number" == typeof exports.Script._CustomFunctionSettings.setResultsLifeMillis) {
                        var setResultsLifeMillis = exports.Script._CustomFunctionSettings.setResultsLifeMillis;
                        setResultsLifeMillis = Math.max(0, setResultsLifeMillis), setResultsLifeMillis = Math.min(6e5, setResultsLifeMillis),
                            this._setResultsLifeMillis = setResultsLifeMillis;
                    }
                    if ("number" == typeof exports.Script._CustomFunctionSettings.batchQuotaMillis) {
                        var batchQuotaMillis = exports.Script._CustomFunctionSettings.batchQuotaMillis;
                        batchQuotaMillis = Math.max(0, batchQuotaMillis), batchQuotaMillis = Math.min(1e3, batchQuotaMillis),
                            this._batchQuotaMillis = batchQuotaMillis;
                    }
                }
            }, CustomFunctionProxy.prototype.ensureInit = function (context) {
                var _this = this;
                return this._initSettings(), void 0 === this._whenInit && (this._whenInit = OfficeExtension.Utility._createPromiseFromResult(null).then((function () {
                    if (!_this._isInit)
                        return context.eventRegistration.register(5, "", _this._handleMessage.bind(_this));
                })).then((function () {
                    _this._isInit = !0;
                }))), this._isInit || context._pendingRequest._addPreSyncPromise(this._whenInit),
                    this._whenInit;
            }, CustomFunctionProxy.prototype.setCustomFunctionInvoker = function (invoker) {
                "object" == typeof CustomFunctionMappings && delete CustomFunctionMappings.__delay__,
                    this._invoker = invoker;
            }, CustomFunctionProxy.prototype.setCustomFunctionAssociation = function (association) {
                var _this = this;
                this._customFunctionMappingsUpperCase = void 0, this._association = association,
                    this._association && this._association.onchange((function () {
                        _this._customFunctionMappingsUpperCase = void 0;
                    }));
            }, CustomFunctionProxy.prototype._initFromHostBridge = function (hostBridge) {
                var _this = this;
                this._initSettings(), hostBridge.addHostMessageHandler((function (bridgeMessage) {
                    3 === bridgeMessage.type ? _this._handleMessage(bridgeMessage.message) : 4 === bridgeMessage.type && _this._handleSettings(bridgeMessage.message);
                })), this._isInit = !0, this._whenInit = OfficeExtension.CoreUtility.Promise.resolve();
            }, CustomFunctionProxy.prototype._handleSettings = function (args) {
                OfficeExtension.Utility.log("CustomFunctionProxy._handleSettings:" + JSON.stringify(args)),
                    args && "object" == typeof args && (CustomFunctionsLogger.s_shouldLog = args[CustomFunctionsLogger.CustomFunctionLoggingFlag]);
            }, CustomFunctionProxy.prototype._handleMessage = function (args) {
                try {
                    OfficeExtension.Utility.log("CustomFunctionProxy._handleMessage"), OfficeExtension.Utility.checkArgumentNull(args, "args");
                    for (var entryArray = args.entries, invocationArray = [], cancellationArray = [], metadataArray = [], i = 0; i < entryArray.length; i++)
                        1 === entryArray[i].messageCategory && ("string" == typeof entryArray[i].message && (entryArray[i].message = JSON.parse(entryArray[i].message)),
                            1e3 === entryArray[i].messageType ? invocationArray.push(entryArray[i]) : 1001 === entryArray[i].messageType ? cancellationArray.push(entryArray[i]) : 1002 === entryArray[i].messageType ? metadataArray.push(entryArray[i]) : OfficeExtension.Utility.log("CustomFunctionProxy._handleMessage unknown message type " + entryArray[i].messageType));
                    if (metadataArray.length > 0 && this._handleMetadataEntries(metadataArray), invocationArray.length > 0) {
                        var batchArray = this._batchInvocationEntries(invocationArray);
                        batchArray.length > 0 && this._invokeRemainingBatchEntries(batchArray, 0);
                    }
                    cancellationArray.length > 0 && this._handleCancellationEntries(cancellationArray);
                }
                catch (ex) {
                    throw CustomFunctionProxy._tryLog(ex), ex;
                }
                return OfficeExtension.Utility._createPromiseFromResult(null);
            }, CustomFunctionProxy.toLogMessage = function (ex) {
                var ret = "Unknown Error";
                if (ex)
                    try {
                        ex.toString && (ret = ex.toString()), ret = ret + " " + JSON.stringify(ex);
                    }
                    catch (otherEx) {
                        ret = "Unexpected Error";
                    }
                return ret;
            }, CustomFunctionProxy._tryLog = function (ex) {
                var message = CustomFunctionProxy.toLogMessage(ex);
                OfficeExtension.Utility.log(message);
            }, CustomFunctionProxy.prototype._handleMetadataEntries = function (entryArray) {
                for (var i = 0; i < entryArray.length; i++) {
                    var message = entryArray[i].message;
                    if (_isNullOrUndefined(message))
                        throw OfficeExtension.Utility.createRuntimeError(CustomFunctionRuntimeErrorCode.generalException, "message", "CustomFunctionProxy._handleMetadataEntries");
                    exports.Script._CustomFunctionMetadata[message.functionName] = {
                        options: {
                            stream: message.isStream,
                            cancelable: message.isCancelable
                        }
                    };
                }
            }, CustomFunctionProxy.prototype._handleCancellationEntries = function (entryArray) {
                for (var i = 0; i < entryArray.length; i++) {
                    var message = entryArray[i].message;
                    if (_isNullOrUndefined(message))
                        throw OfficeExtension.Utility.createRuntimeError(CustomFunctionRuntimeErrorCode.generalException, "message", "CustomFunctionProxy._handleCancellationEntries");
                    var invocationId = message.invocationId, invocationContext = this._invocationContextMap[invocationId];
                    _isNullOrUndefined(invocationContext) || (delete this._invocationContextMap[invocationId],
                        CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionCancellation, invocationContext.functionName),
                        _isNullOrUndefined(invocationContext.onCanceled) || invocationContext.onCanceled());
                }
            }, CustomFunctionProxy.prototype._transferCustomFunctionError = function (entryArray) {
                var _this = this;
                return entryArray.map((function (value, index) {
                    return null === value ? value : null != value.code && "CustomFunctionError" == value.type ? new CustomFunctionError(value.code) : value instanceof Array ? _this._transferCustomFunctionError(value) : value;
                }));
            }, CustomFunctionProxy.prototype._transferCustomFunctionRichData = function (entryArray) {
                var _this = this;
                return entryArray.map((function (element, index) {
                    return element instanceof Array ? _this._transferCustomFunctionRichData(element) : element instanceof Object ? JSON.parse(element.value) : element;
                }));
            }, CustomFunctionProxy.prototype._batchInvocationEntries = function (entryArray) {
                for (var _this = this, batchArray = [], _loop_1 = function (i) {
                    var message, arrayOrObjectMessage = entryArray[i].message;
                    if (Array.isArray(arrayOrObjectMessage) ? (message = {
                        invocationId: arrayOrObjectMessage[0],
                        functionName: arrayOrObjectMessage[1],
                        parameterValues: arrayOrObjectMessage[2],
                        address: arrayOrObjectMessage[3],
                        flags: arrayOrObjectMessage[4],
                        parameterAddresses: null
                    }, _isNullOrUndefined(arrayOrObjectMessage[5]) || (message.parameterAddresses = arrayOrObjectMessage[5])) : message = arrayOrObjectMessage,
                        _isNullOrUndefined(message))
                        throw OfficeExtension.Utility.createRuntimeError(CustomFunctionRuntimeErrorCode.generalException, "message", "CustomFunctionProxy._batchInvocationEntries");
                    if (_isNullOrUndefined(message.invocationId) || message.invocationId < 0)
                        throw OfficeExtension.Utility.createRuntimeError(CustomFunctionRuntimeErrorCode.generalException, "invocationId", "CustomFunctionProxy._batchInvocationEntries");
                    if (_isNullOrUndefined(message.functionName))
                        throw OfficeExtension.Utility.createRuntimeError(CustomFunctionRuntimeErrorCode.generalException, "functionName", "CustomFunctionProxy._batchInvocationEntries");
                    var call = null, isCancelable = !1, isStreaming = !1, isAllowError = !1;
                    if ("number" == typeof message.flags)
                        isCancelable = 0 != (1 & message.flags), isStreaming = 0 != (2 & message.flags),
                            isAllowError = 0 != (4 & message.flags), 0 != (8 & message.flags) && (message.parameterValues = this_1._transferCustomFunctionRichData(message.parameterValues)),
                            isAllowError && (message.parameterValues = this_1._transferCustomFunctionError(message.parameterValues));
                    else {
                        var metadata = exports.Script._CustomFunctionMetadata[message.functionName];
                        if (_isNullOrUndefined(metadata))
                            return CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionExecutionNotFoundLog, message.functionName),
                                OfficeExtension.Utility.isSetSupported("CustomFunctions", "1.8") ? this_1._setError(message.invocationId, null, 9) : this_1._setError(message.invocationId, "N/A", 1),
                                "continue";
                        isCancelable = metadata.options.cancelable, isStreaming = metadata.options.stream;
                    }
                    if (this_1._invoker && !this_1._customFunctionMappingsContains(message.functionName))
                        return this_1._invokeFunctionUsingInvoker(message),
                            "continue";
                    try {
                        call = this_1._getFunction(message.functionName);
                    }
                    catch (ex) {
                        return CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionExecutionNotFoundLog, message.functionName),
                            OfficeExtension.Utility.isSetSupported("CustomFunctions", "1.8") ? this_1._setError(message.invocationId, ex, 10) : this_1._setError(message.invocationId, ex, 1),
                            "continue";
                    }
                    var invocationContext = void 0;
                    if (isStreaming || isCancelable) {
                        var setResult = void 0, setError = void 0;
                        isStreaming && (setResult = function (result) {
                            _this._invocationContextMap[message.invocationId] ? _this._setResult(message.invocationId, result) : CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionAlreadyCancelled, message.functionName);
                        }, setError = function (error) {
                            _this._invocationContextMap[message.invocationId] ? _this._setError(message.invocationId, error.message, _this._getCustomFunctionResultErrorCodeFromErrorCode(error.code)) : CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionAlreadyCancelled, message.functionName);
                        }), invocationContext = new InvocationContext(message.functionName, message.address, message.parameterAddresses, setResult, setError),
                            this_1._invocationContextMap[message.invocationId] = invocationContext;
                    }
                    else
                        invocationContext = new InvocationContext(message.functionName, message.address, message.parameterAddresses);
                    message.parameterValues.push(invocationContext), batchArray.push({
                        call: call,
                        isBatching: !1,
                        isStreaming: isStreaming,
                        invocationIds: [message.invocationId],
                        parameterValueSets: [message.parameterValues],
                        functionName: message.functionName
                    });
                }, this_1 = this, i = 0; i < entryArray.length; i++)
                    _loop_1(i);
                return batchArray;
            }, CustomFunctionProxy.prototype._invokeFunctionUsingInvoker = function (message) {
                var _this = this, isCancelable = 0 != (1 & message.flags), isStreaming = 0 != (2 & message.flags), invocationId = message.invocationId, setResult = void 0, setError = void 0;
                if (isStreaming)
                    setResult = function (result) {
                        _this._invocationContextMap[invocationId] && _this._setResult(invocationId, result);
                    }, setError = function (error) {
                        _this._invocationContextMap[invocationId] && _this._setError(invocationId, error.message, _this._getCustomFunctionResultErrorCodeFromErrorCode(error.code));
                    };
                else {
                    var setResultCalled_1 = !1;
                    setResult = function (result) {
                        setResultCalled_1 || _this._setResult(invocationId, result), setResultCalled_1 = !0;
                    }, setError = function (error) {
                        setResultCalled_1 || _this._setError(invocationId, error.message, _this._getCustomFunctionResultErrorCodeFromErrorCode(error.code)),
                            setResultCalled_1 = !0;
                    };
                }
                var invocationContext = new InvocationContext(message.functionName, message.address, message.parameterAddresses, setResult, setError);
                (isStreaming || isCancelable) && (this._invocationContextMap[invocationId] = invocationContext),
                    this._invoker.invoke(message.functionName, message.parameterValues, invocationContext);
            }, CustomFunctionProxy.prototype._ensureCustomFunctionMappingsUpperCase = function () {
                if (_isNullOrUndefined(this._customFunctionMappingsUpperCase)) {
                    if (this._customFunctionMappingsUpperCase = {}, "object" == typeof CustomFunctionMappings)
                        for (var key in OfficeExtension.CoreUtility.log("CustomFunctionMappings.Keys=" + JSON.stringify(Object.keys(CustomFunctionMappings))),
                            CustomFunctionMappings)
                            this._customFunctionMappingsUpperCase[key.toUpperCase()] && CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionDuplicatedName, key),
                                this._customFunctionMappingsUpperCase[key.toUpperCase()] = CustomFunctionMappings[key];
                    if (this._association)
                        for (var key in OfficeExtension.CoreUtility.log("CustomFunctionAssociateMappings.Keys=" + JSON.stringify(Object.keys(this._association.mappings))),
                            this._association.mappings)
                            this._customFunctionMappingsUpperCase[key.toUpperCase()] && CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionDuplicatedName, key),
                                this._customFunctionMappingsUpperCase[key.toUpperCase()] = this._association.mappings[key];
                }
            }, CustomFunctionProxy.prototype._customFunctionMappingsContains = function (functionName) {
                this._ensureCustomFunctionMappingsUpperCase();
                var functionNameUpperCase = functionName.toUpperCase();
                if (!_isNullOrUndefined(this._customFunctionMappingsUpperCase[functionNameUpperCase]))
                    return !0;
                if ("undefined" != typeof window) {
                    for (var functionParent = window, functionNameSegments = functionName.split("."), i = 0; i < functionNameSegments.length - 1; i++)
                        if (functionParent = functionParent[functionNameSegments[i]],
                            _isNullOrUndefined(functionParent) || "object" != typeof functionParent)
                            return !1;
                    if ("function" == typeof functionParent[functionNameSegments[functionNameSegments.length - 1]])
                        return !0;
                }
                return !1;
            }, CustomFunctionProxy.prototype._getCustomFunctionMappings = function (functionName) {
                this._ensureCustomFunctionMappingsUpperCase();
                var functionNameUpperCase = functionName.toUpperCase();
                if (!_isNullOrUndefined(this._customFunctionMappingsUpperCase[functionNameUpperCase])) {
                    if ("function" == typeof this._customFunctionMappingsUpperCase[functionNameUpperCase])
                        return this._customFunctionMappingsUpperCase[functionNameUpperCase];
                    throw OfficeExtension.Utility.createRuntimeError(CustomFunctionRuntimeErrorCode.invalidOperation, OfficeExtension.Utility._getResourceString(OfficeExtension.ResourceStrings.customFunctionInvalidFunctionMapping, functionName), "CustomFunctionProxy._getCustomFunctionMappings");
                }
            }, CustomFunctionProxy.prototype._getFunction = function (functionName) {
                var call = this._getCustomFunctionMappings(functionName);
                if (!_isNullOrUndefined(call))
                    return call;
                if (_isNullOrUndefined(window))
                    throw OfficeExtension.Utility.createRuntimeError(CustomFunctionRuntimeErrorCode.invalidOperation, OfficeExtension.Utility._getResourceString(OfficeExtension.ResourceStrings.customFunctionWindowMissing), "CustomFunctionProxy._getFunction");
                for (var functionParent = window, functionNameSegments = functionName.split("."), i = 0; i < functionNameSegments.length - 1; i++)
                    if (functionParent = functionParent[functionNameSegments[i]],
                        _isNullOrUndefined(functionParent) || "object" != typeof functionParent)
                        throw OfficeExtension.Utility.createRuntimeError(CustomFunctionRuntimeErrorCode.invalidOperation, OfficeExtension.Utility._getResourceString(OfficeExtension.ResourceStrings.customFunctionDefintionMissingOnWindow, functionName), "CustomFunctionProxy._getFunction");
                if ("function" != typeof (call = functionParent[functionNameSegments[functionNameSegments.length - 1]]))
                    throw OfficeExtension.Utility.createRuntimeError(CustomFunctionRuntimeErrorCode.invalidOperation, OfficeExtension.Utility._getResourceString(OfficeExtension.ResourceStrings.customFunctionInvalidFunction, functionName), "CustomFunctionProxy._getFunction");
                return call;
            }, CustomFunctionProxy.prototype._invokeRemainingBatchEntries = function (batchArray, startIndex) {
                OfficeExtension.Utility.log("CustomFunctionProxy._invokeRemainingBatchEntries");
                for (var startTimeMillis = Date.now(), i = startIndex; i < batchArray.length; i++) {
                    if (!(Date.now() - startTimeMillis < this._batchQuotaMillis)) {
                        OfficeExtension.Utility.log("setTimeout(CustomFunctionProxy._invokeRemainingBatchEntries)"),
                            setTimeout(this._invokeRemainingBatchEntries.bind(this), 0, batchArray, i);
                        break;
                    }
                    this._invokeFunctionAndSetResult(batchArray[i]);
                }
            }, CustomFunctionProxy.prototype._invokeFunctionAndSetResult = function (batch) {
                var results, _this = this;
                CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionExecutionStartLog, batch.functionName);
                var startTime = Date.now();
                try {
                    results = batch.isBatching ? batch.call.call(null, batch.parameterValueSets) : [batch.call.apply(null, batch.parameterValueSets[0])];
                }
                catch (ex) {
                    var outboundData_1 = [];
                    outboundData_1.push(Date.now() - startTime);
                    for (var i = 0; i < batch.invocationIds.length; i++)
                        ex instanceof CustomFunctionError ? this._setErrorWithOutboundData(batch.invocationIds[i], ex.message, this._getCustomFunctionResultErrorCodeFromErrorCode(ex.code), outboundData_1) : this._setErrorWithOutboundData(batch.invocationIds[i], ex, 2, outboundData_1);
                    return void CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionExecutionExceptionThrownLog, batch.functionName, CustomFunctionProxy.toLogMessage(ex));
                }
                var outboundData = [];
                if (CustomFunctions.isFeatureEnabled(3) || outboundData.push(Date.now() - startTime),
                    batch.isStreaming)
                    ;
                else if (results.length === batch.parameterValueSets.length) {
                    var _loop_2 = function (i) {
                        _isNullOrUndefined(results[i]) || "object" != typeof results[i] || "function" != typeof results[i].then ? (CustomFunctions.isFeatureEnabled(3) && outboundData.push(Date.now() - startTime),
                            CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionExecutionFinishLog, batch.functionName),
                            this_2._setResultWithOutboundData(batch.invocationIds[i], results[i], outboundData)) : results[i].then((function (value) {
                            CustomFunctions.isFeatureEnabled(3) && outboundData.push(Date.now() - startTime),
                                CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionExecutionFinishLog, batch.functionName),
                                _this._setResultWithOutboundData(batch.invocationIds[i], value, outboundData);
                        }), (function (reason) {
                            CustomFunctions.isFeatureEnabled(3) && outboundData.push(Date.now() - startTime),
                                CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionExecutionRejectedPromoseLog, batch.functionName, CustomFunctionProxy.toLogMessage(reason)),
                                reason instanceof CustomFunctionError ? _this._setErrorWithOutboundData(batch.invocationIds[i], reason, _this._getCustomFunctionResultErrorCodeFromErrorCode(reason.code), outboundData) : _this._setErrorWithOutboundData(batch.invocationIds[i], reason, 3, outboundData);
                        }));
                    }, this_2 = this;
                    for (i = 0; i < results.length; i++)
                        _loop_2(i);
                }
                else {
                    CustomFunctions.isFeatureEnabled(3) && outboundData.push(Date.now() - startTime),
                        CustomFunctionsLogger.logEvent(CustomFunctionProxy.CustomFunctionExecutionBatchMismatchLog, batch.functionName);
                    for (i = 0; i < batch.invocationIds.length; i++)
                        this._setErrorWithOutboundData(batch.invocationIds[i], OfficeExtension.Utility._getResourceString(OfficeExtension.ResourceStrings.customFunctionUnexpectedNumberOfEntriesInResultBatch), 4, outboundData);
                }
            }, CustomFunctionProxy.prototype._setResult = function (invocationId, result) {
                var outboundData = [];
                outboundData.push(0), this._setResultWithOutboundData(invocationId, result, outboundData);
            }, CustomFunctionProxy.prototype._setResultWithOutboundData = function (invocationId, result, outboundData) {
                var invocationResult = {
                    id: invocationId,
                    value: result,
                    outboundData: outboundData
                };
                "number" == typeof result ? isNaN(result) ? (invocationResult.failed = !0, invocationResult.value = "NaN") : isFinite(result) || (invocationResult.failed = !0,
                    invocationResult.value = "Infinity", invocationResult.errorCode = 6) : result instanceof CustomFunctionError || result instanceof CustomFunctionEntity || result instanceof CustomFunctionFormattedNumber || result instanceof CustomFunctionWebImage ? (invocationResult.failed = !1,
                    invocationResult.value = result.toJSON()) : result instanceof Error && (invocationResult.failed = !0,
                    invocationResult.value = CustomFunctionProxy.toLogMessage(result), invocationResult.errorCode = 0);
                var timeNow = Date.now();
                this._resultEntryBuffer[invocationId] = {
                    timeCreated: timeNow,
                    result: invocationResult
                }, this._ensureSetResultsTaskIsScheduled(timeNow);
            }, CustomFunctionProxy.prototype._setError = function (invocationId, error, errorCode) {
                var outboundData = [];
                outboundData.push(0), this._setErrorWithOutboundData(invocationId, error, errorCode, outboundData);
            }, CustomFunctionProxy.prototype._setErrorWithOutboundData = function (invocationId, error, errorCode, outboundData) {
                var message = "";
                _isNullOrUndefined(error) || (error instanceof CustomFunctionError && !_isNullOrUndefined(error.message) ? message = error.message : "string" == typeof error && (message = error));
                var result = {
                    id: invocationId,
                    failed: !0,
                    value: message,
                    errorCode: errorCode,
                    outboundData: outboundData
                }, timeNow = Date.now();
                this._resultEntryBuffer[invocationId] = {
                    timeCreated: timeNow,
                    result: result
                }, this._ensureSetResultsTaskIsScheduled(timeNow);
            }, CustomFunctionProxy.prototype._getCustomFunctionResultErrorCodeFromErrorCode = function (errorCode) {
                var internalCode;
                switch (errorCode) {
                    case ErrorCode.notAvailable:
                        internalCode = 1;
                        break;
                    case ErrorCode.divisionByZero:
                        internalCode = 5;
                        break;
                    case ErrorCode.invalidValue:
                        internalCode = 7;
                        break;
                    case ErrorCode.invalidNumber:
                        internalCode = 6;
                        break;
                    case ErrorCode.nullReference:
                        internalCode = 8;
                        break;
                    default:
                        internalCode = 7;
                }
                return internalCode;
            }, CustomFunctionProxy.prototype._ensureSetResultsTaskIsScheduled = function (timeNow) {
                if (this._setResultsTaskOverdueTime > 0 && timeNow > this._setResultsTaskOverdueTime)
                    return OfficeExtension.Utility.log("SetResultsTask overdue"),
                        void this._executeSetResultsTask();
                this._isSetResultsTaskScheduled || (OfficeExtension.Utility.log("setTimeout(CustomFunctionProxy._executeSetResultsTask)"),
                    setTimeout(this._executeSetResultsTask.bind(this), this._setResultsDelayMillis),
                    this._isSetResultsTaskScheduled = !0, this._setResultsTaskOverdueTime = timeNow + this._setResultsDelayMillis + this._setResultsOverdueDelayMillis);
            }, CustomFunctionProxy.prototype._convertCustomFunctionInvocationResultToArray = function (result) {
                var ret = [];
                return ret.push(result.id), ret.push(!result.failed), OfficeExtension.CoreUtility.isUndefined(result.value) ? ret.push(null) : ret.push(result.value),
                    result.failed && (OfficeExtension.CoreUtility.isUndefined(result.errorCode) ? ret.push(0) : ret.push(result.errorCode)),
                    OfficeExtension.Utility.isSetSupported("CustomFunctions", "1.9") && ret.push(result.outboundData),
                    ret;
            }, CustomFunctionProxy.prototype._executeSetResultsTask = function () {
                var _this = this;
                OfficeExtension.Utility.log("CustomFunctionProxy._executeSetResultsTask");
                var timeNow = Date.now();
                if (this._inProgressContextSyncExpectedFinishTime > 0 && this._inProgressContextSyncExpectedFinishTime > timeNow)
                    return OfficeExtension.Utility.log("context.sync() is in progress. setTimeout(CustomFunctionProxy._executeSetResultsTask)"),
                        setTimeout(this._executeSetResultsTask.bind(this), this._setResultsDelayMillis),
                        void (this._setResultsTaskOverdueTime = timeNow + this._setResultsDelayMillis + this._setResultsOverdueDelayMillis);
                this._isSetResultsTaskScheduled = !1, this._setResultsTaskOverdueTime = 0;
                var resultEntryBufferCopy = {}, isSizeRetry = !1;
                CustomFunctions.isFeatureEnabled(1) && Object.keys(this._resultEntryRetryBuffer).length > 0 ? (resultEntryBufferCopy = this._resultEntryRetryBuffer,
                    this._resultEntryRetryBuffer = {}, this._retryBufferBodySize = 2, isSizeRetry = !0) : (resultEntryBufferCopy = this._resultEntryBuffer,
                    this._resultEntryBuffer = {});
                var useArrayResult = OfficeExtension.Utility.isSetSupported("CustomFunctions", "1.7"), invocationResults = [];
                for (var key in resultEntryBufferCopy)
                    useArrayResult ? invocationResults.push(this._convertCustomFunctionInvocationResultToArray(resultEntryBufferCopy[key].result)) : invocationResults.push(resultEntryBufferCopy[key].result);
                if (0 !== invocationResults.length) {
                    var context = new CustomFunctionRequestContext;
                    useArrayResult ? context.customFunctions.setInvocationArrayResults(invocationResults) : context.customFunctions.setInvocationResults(invocationResults);
                    var contextSyncStartTime = Date.now();
                    this._inProgressContextSyncExpectedFinishTime = contextSyncStartTime + this._maxContextSyncExecutionDurationMills,
                        context.sync().then((function (value) {
                            var timeNow = Date.now();
                            _this._clearInProgressContextSyncExpectedFinishTimeAfterMinInterval(timeNow - contextSyncStartTime),
                                isSizeRetry && _this._ensureSetResultsTaskIsScheduled(timeNow);
                        }), (function (reason) {
                            var timeNow = Date.now();
                            _this._clearInProgressContextSyncExpectedFinishTimeAfterMinInterval(timeNow - contextSyncStartTime),
                                CustomFunctions.isFeatureEnabled(1) && reason.code == OfficeExtension.ErrorCodes.requestPayloadSizeLimitExceeded ? _this._restoreAndSliceResultEntries(timeNow, resultEntryBufferCopy) : _this._restoreResultEntries(timeNow, resultEntryBufferCopy),
                                _this._ensureSetResultsTaskIsScheduled(timeNow);
                        }));
                }
            }, CustomFunctionProxy.prototype._restoreResultEntries = function (timeNow, resultEntryBufferCopy) {
                for (var key in resultEntryBufferCopy) {
                    var resultSetter = resultEntryBufferCopy[key];
                    timeNow - resultSetter.timeCreated <= this._setResultsLifeMillis && (this._resultEntryBuffer[key] || (this._resultEntryBuffer[key] = resultSetter));
                }
            }, CustomFunctionProxy.prototype._restoreAndSliceResultEntries = function (timeNow, resultEntryBufferCopy) {
                for (var key in resultEntryBufferCopy) {
                    var resultSetter = resultEntryBufferCopy[key], resultSize = void 0;
                    if (timeNow - resultSetter.timeCreated <= this._setResultsLifeMillis && !this._resultEntryBuffer[key]) {
                        try {
                            resultSize = JSON.stringify(this._convertCustomFunctionInvocationResultToArray(resultSetter.result)).length + 1;
                        }
                        catch (ex) {
                            this._resultEntryBuffer[key] = resultSetter, OfficeExtension.Utility.log("Result can't pass in JSON.stringify");
                            continue;
                        }
                        this._retryBufferBodySize + resultSize < this._maxResultSize ? (this._resultEntryRetryBuffer[key] = resultSetter,
                            this._retryBufferBodySize += resultSize) : this._resultEntryBuffer[key] = resultSetter;
                    }
                }
            }, CustomFunctionProxy.prototype._clearInProgressContextSyncExpectedFinishTimeAfterMinInterval = function (lastContextSyncDurationMills) {
                var _this = this, contextSyncInterval = CustomFunctions.isFeatureEnabled(2) ? this._smallerMinContextSyncIntervalMills : this._minContextSyncIntervalMills, interval = Math.max(contextSyncInterval, 2 * lastContextSyncDurationMills), intervalMax = CustomFunctions.isFeatureEnabled(4) ? Math.min(this._maxContextSyncIntervalMills, interval) : interval;
                OfficeExtension.Utility.log("setTimeout(clearInProgressContestSyncExpectedFinishedTime," + interval + ")"),
                    setTimeout((function () {
                        OfficeExtension.Utility.log("clearInProgressContestSyncExpectedFinishedTime"), _this._inProgressContextSyncExpectedFinishTime = 0;
                    }), intervalMax);
            }, CustomFunctionProxy.CustomFunctionExecutionStartLog = new CustomFunctionLog(CustomFunctionLoggingSeverity.Verbose, "CustomFunctions [Execution] [Begin] Function="),
                CustomFunctionProxy.CustomFunctionExecutionFailureLog = new CustomFunctionLog(CustomFunctionLoggingSeverity.Error, "CustomFunctions [Execution] [End] [Failure] Function="),
                CustomFunctionProxy.CustomFunctionExecutionRejectedPromoseLog = new CustomFunctionLog(CustomFunctionLoggingSeverity.Error, "CustomFunctions [Execution] [End] [Failure] [RejectedPromise] Function="),
                CustomFunctionProxy.CustomFunctionExecutionExceptionThrownLog = new CustomFunctionLog(CustomFunctionLoggingSeverity.Error, "CustomFunctions [Execution] [End] [Failure] [ExceptionThrown] Function="),
                CustomFunctionProxy.CustomFunctionExecutionBatchMismatchLog = new CustomFunctionLog(CustomFunctionLoggingSeverity.Error, "CustomFunctions [Execution] [End] [Failure] [BatchMismatch] Function="),
                CustomFunctionProxy.CustomFunctionExecutionFinishLog = new CustomFunctionLog(CustomFunctionLoggingSeverity.Info, "CustomFunctions [Execution] [End] [Success] Function="),
                CustomFunctionProxy.CustomFunctionExecutionNotFoundLog = new CustomFunctionLog(CustomFunctionLoggingSeverity.Error, "CustomFunctions [Execution] [NotFound] Function="),
                CustomFunctionProxy.CustomFunctionCancellation = new CustomFunctionLog(CustomFunctionLoggingSeverity.Info, "CustomFunctions [Cancellation] Function="),
                CustomFunctionProxy.CustomFunctionAlreadyCancelled = new CustomFunctionLog(CustomFunctionLoggingSeverity.Info, "CustomFunctions [AlreadyCancelled] Function="),
                CustomFunctionProxy.CustomFunctionDuplicatedName = new CustomFunctionLog(CustomFunctionLoggingSeverity.Error, "CustomFunctions [DuplicatedName] Function="),
                CustomFunctionProxy.CustomFunctionInvalidArg = new CustomFunctionLog(CustomFunctionLoggingSeverity.Error, "CustomFunctions [InvalidArg] Name="),
                CustomFunctionProxy;
        }();
        exports.CustomFunctionProxy = CustomFunctionProxy, exports.customFunctionProxy = new CustomFunctionProxy,
            exports.setCustomFunctionAssociation = exports.customFunctionProxy.setCustomFunctionAssociation.bind(exports.customFunctionProxy),
            exports.setCustomFunctionInvoker = exports.customFunctionProxy.setCustomFunctionInvoker.bind(exports.customFunctionProxy),
            Core.HostBridge.onInited((function (hostBridge) {
                exports.customFunctionProxy._initFromHostBridge(hostBridge);
            }));
        var CustomFunctions = function (_super) {
            function CustomFunctions() {
                return null !== _super && _super.apply(this, arguments) || this;
            }
            return __extends(CustomFunctions, _super), Object.defineProperty(CustomFunctions.prototype, "_className", {
                get: function () {
                    return "CustomFunctions";
                },
                enumerable: !1,
                configurable: !0
            }), CustomFunctions.isFeatureEnabled = function (args) {
                return this._enabledFeature instanceof Array && this._enabledFeature.indexOf(args) >= 0;
            }, CustomFunctions.initialize = function () {
                var _this = this, context = new CustomFunctionRequestContext;
                return exports.customFunctionProxy.ensureInit(context).then((function () {
                    var enabledFeature;
                    return context.customFunctions._SetOsfControlContainerReadyForCustomFunctions(),
                        OfficeExtension.Utility.isSetSupported("CustomFunctions", "1.9") && (enabledFeature = context.customFunctions._GetEnabledFeatures()),
                        OfficeExtension.Utility.log("OsfControl activation lifecycle: Set OsfControlContainer ready for CustomFunctions"),
                        context._customData = "SetOsfControlContainerReadyForCustomFunctions", context.sync().then((function () {
                        _isNullOrUndefined(enabledFeature) || (_this._enabledFeature = enabledFeature.value);
                    }))["catch"]((function (error) {
                        !function (error, rethrowOtherError) {
                            var isCellEditModeError = error instanceof OfficeExtension.Error && error.code === CustomFunctionRuntimeErrorCode.invalidOperationInCellEditMode;
                            if (OfficeExtension.CoreUtility.log("Error on starting custom functions: " + error),
                                isCellEditModeError) {
                                OfficeExtension.CoreUtility.log("Was in cell-edit mode, will try again");
                                var delay_1 = exports.customFunctionProxy._ensureInitRetryDelayMillis;
                                return new OfficeExtension.CoreUtility.Promise((function (resolve) {
                                    return setTimeout(resolve, delay_1);
                                })).then((function () {
                                    return CustomFunctions.initialize();
                                }));
                            }
                            if (rethrowOtherError)
                                throw error;
                        }(error, !0);
                    }));
                }));
            }, CustomFunctions.prototype.setInvocationArrayResults = function (results) {
                _throwIfApiNotSupported("CustomFunctions.setInvocationArrayResults", "CustomFunctions", "1.4", "Excel"),
                    _invokeMethod(this, "SetInvocationArrayResults", 0, [results], 2, 0);
            }, CustomFunctions.prototype.setInvocationResults = function (results) {
                _invokeMethod(this, "SetInvocationResults", 0, [results], 2, 0);
            }, CustomFunctions.prototype._GetEnabledFeatures = function () {
                return _throwIfApiNotSupported("CustomFunctions._GetEnabledFeatures", "CustomFunctions", "1.4", "Excel"),
                    _invokeMethod(this, "_GetEnabledFeatures", 1, [], 4, 0);
            }, CustomFunctions.prototype._SetInvocationError = function (invocationId, message) {
                _invokeMethod(this, "_SetInvocationError", 0, [invocationId, message], 2, 0);
            }, CustomFunctions.prototype._SetInvocationResult = function (invocationId, result) {
                _invokeMethod(this, "_SetInvocationResult", 0, [invocationId, result], 2, 0);
            }, CustomFunctions.prototype._SetOsfControlContainerReadyForCustomFunctions = function () {
                _invokeMethod(this, "_SetOsfControlContainerReadyForCustomFunctions", 0, [], 10, 0);
            }, CustomFunctions.prototype._handleResult = function (value) {
                (_super.prototype._handleResult.call(this, value), _isNullOrUndefined(value)) || _fixObjectPathIfNecessary(this, value);
            }, CustomFunctions.prototype._handleRetrieveResult = function (value, result) {
                _super.prototype._handleRetrieveResult.call(this, value, result), _processRetrieveResult(this, value, result);
            }, CustomFunctions.newObject = function (context) {
                return _createTopLevelServiceObject(CustomFunctions, context, "Microsoft.ExcelServices.CustomFunctions", !1, 4);
            }, CustomFunctions.prototype.toJSON = function () {
                return _toJson(this, {}, {});
            }, CustomFunctions;
        }(OfficeExtension.ClientObject);
        exports.CustomFunctions = CustomFunctions;
        var CustomFunctionRuntimeErrorCode, CustomFunctionsContainer = function (_super) {
            function CustomFunctionsContainer() {
                return null !== _super && _super.apply(this, arguments) || this;
            }
            return __extends(CustomFunctionsContainer, _super), Object.defineProperty(CustomFunctionsContainer.prototype, "_className", {
                get: function () {
                    return "CustomFunctionsContainer";
                },
                enumerable: !1,
                configurable: !0
            }), Object.defineProperty(CustomFunctionsContainer.prototype, "_navigationPropertyNames", {
                get: function () {
                    return ["customFunctions"];
                },
                enumerable: !1,
                configurable: !0
            }), Object.defineProperty(CustomFunctionsContainer.prototype, "customFunctions", {
                get: function () {
                    return _throwIfApiNotSupported("CustomFunctionsContainer.customFunctions", "CustomFunctions", "1.2", "Excel"),
                        this._C || (this._C = _createPropertyObject(CustomFunctions, this, "CustomFunctions", !1, 4)),
                        this._C;
                },
                enumerable: !1,
                configurable: !0
            }), CustomFunctionsContainer.prototype._handleResult = function (value) {
                if (_super.prototype._handleResult.call(this, value), !_isNullOrUndefined(value)) {
                    var obj = value;
                    _fixObjectPathIfNecessary(this, obj), _handleNavigationPropertyResults(this, obj, ["customFunctions", "CustomFunctions"]);
                }
            }, CustomFunctionsContainer.prototype.load = function (options) {
                return _load(this, options);
            }, CustomFunctionsContainer.prototype._handleRetrieveResult = function (value, result) {
                _super.prototype._handleRetrieveResult.call(this, value, result), _processRetrieveResult(this, value, result);
            }, CustomFunctionsContainer.prototype.toJSON = function () {
                return _toJson(this, {}, {});
            }, CustomFunctionsContainer;
        }(OfficeExtension.ClientObject);
        exports.CustomFunctionsContainer = CustomFunctionsContainer, function (CustomFunctionRuntimeErrorCode) {
            CustomFunctionRuntimeErrorCode.generalException = "GeneralException", CustomFunctionRuntimeErrorCode.invalidOperation = "InvalidOperation",
                CustomFunctionRuntimeErrorCode.invalidOperationInCellEditMode = "InvalidOperationInCellEditMode";
        }(CustomFunctionRuntimeErrorCode || (CustomFunctionRuntimeErrorCode = {}));
    }]);
OSFAriaLogger.AriaLogger.EnableSendingTelemetryWithOTel = true;
OSFAriaLogger.AriaLogger.EnableSendingTelemetryWithLegacyAria = false;
window.OfficeExtensionBatch = window.OfficeExtension;
!function (modules) {
    var installedModules = {};
    function __webpack_require__(moduleId) {
        if (installedModules[moduleId])
            return installedModules[moduleId].exports;
        var module = installedModules[moduleId] = {
            i: moduleId,
            l: !1,
            exports: {}
        };
        return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),
            module.l = !0, module.exports;
    }
    __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function (exports, name, getter) {
        __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {
            enumerable: !0,
            get: getter
        });
    }, __webpack_require__.r = function (exports) {
        "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports, Symbol.toStringTag, {
            value: "Module"
        }), Object.defineProperty(exports, "__esModule", {
            value: !0
        });
    }, __webpack_require__.t = function (value, mode) {
        if (1 & mode && (value = __webpack_require__(value)), 8 & mode)
            return value;
        if (4 & mode && "object" == typeof value && value && value.__esModule)
            return value;
        var ns = Object.create(null);
        if (__webpack_require__.r(ns), Object.defineProperty(ns, "default", {
            enumerable: !0,
            value: value
        }), 2 & mode && "string" != typeof value)
            for (var key in value)
                __webpack_require__.d(ns, key, function (key) {
                    return value[key];
                }.bind(null, key));
        return ns;
    }, __webpack_require__.n = function (module) {
        var getter = module && module.__esModule ? function () {
            return module["default"];
        } : function () {
            return module;
        };
        return __webpack_require__.d(getter, "a", getter), getter;
    }, __webpack_require__.o = function (object, property) {
        return Object.prototype.hasOwnProperty.call(object, property);
    }, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 1);
}([function (module, exports) {
        module.exports = OfficeExtensionBatch;
    }, function (module, exports, __webpack_require__) {
        "use strict";
        var __assign = this && this.__assign || function () {
            return (__assign = Object.assign || function (t) {
                for (var s, i = 1, n = arguments.length; i < n; i++)
                    for (var p in s = arguments[i])
                        Object.prototype.hasOwnProperty.call(s, p) && (t[p] = s[p]);
                return t;
            }).apply(this, arguments);
        };
        Object.defineProperty(exports, "__esModule", {
            value: !0
        });
        var ApiInformationWeb = __webpack_require__(2), ApiInformationNative = __webpack_require__(3), AsyncStorageWeb = __webpack_require__(5), DialogApiWeb = __webpack_require__(6), StorageApiNative = __webpack_require__(7), officeruntime_storage_web_1 = __webpack_require__(8), Experimentation = __webpack_require__(9), officeruntime_message_1 = __webpack_require__(10), DynamicRibbon = __webpack_require__(13), officeruntime_auth_1 = __webpack_require__(14);
        window._useSDXSandbox ? window._OfficeRuntimeNative = __assign(__assign({}, window.OfficeRuntime), {
            displayWebDialog: DialogApiWeb.displayWebDialog,
            AsyncStorage: StorageApiNative.AsyncStorage,
            storage: StorageApiNative.storage,
            experimentation: Experimentation.experimentation,
            apiInformation: ApiInformationNative.apiInformation,
            message: officeruntime_message_1.Message.instance,
            ui: DynamicRibbon.ui,
            auth: officeruntime_auth_1.Auth.instance
        }) : window._OfficeRuntimeNative = __assign(__assign({}, window.OfficeRuntime), {
            displayWebDialog: DialogApiWeb.displayWebDialog,
            AsyncStorage: AsyncStorageWeb,
            storage: officeruntime_storage_web_1.storage,
            experimentation: Experimentation.experimentation,
            apiInformation: ApiInformationWeb.apiInformation,
            message: officeruntime_message_1.Message.instance,
            ui: DynamicRibbon.ui,
            auth: officeruntime_auth_1.Auth.instance
        }), Object.freeze(window._OfficeRuntimeNative);
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.apiInformation = void 0, exports.apiInformation = {
            isSetSupported: function (capability, version) {
                try {
                    return !!(Office && Office.context && Office.context.requirements) && Office.context.requirements.isSetSupported(capability, version);
                }
                catch (e) {
                    return !1;
                }
            }
        };
    }, function (module, exports, __webpack_require__) {
        "use strict";
        (function (global) {
            function getVersion(version) {
                var temp = version.split("."), major = 0, minor = 0, patch = 0;
                if (temp.length < 2 && isNaN(Number(version)))
                    throw "version format incorrect";
                if (major = Number(temp[0]), temp.length >= 2 && (minor = Number(temp[1])), temp.length >= 3 && (patch = Number(temp[2])),
                    isNaN(major) || isNaN(minor) || isNaN(patch))
                    throw "version format incorrect";
                return {
                    major: major,
                    minor: minor,
                    patch: patch
                };
            }
            Object.defineProperty(exports, "__esModule", {
                value: !0
            }), exports.apiInformation = void 0, exports.apiInformation = {
                isSetSupported: function (capability, version) {
                    if ("string" != typeof capability)
                        return !1;
                    if (null == version && (version = "0.0.0"), void 0 === global.__apiSets)
                        return !1;
                    var sets = global.__apiSets, index = Object.keys(sets).map((function (key) {
                        return key.toLowerCase();
                    })).indexOf(capability.toLowerCase());
                    if (index > -1) {
                        var setMaxVersion = sets[Object.keys(sets)[index]];
                        try {
                            var minVersionNum = getVersion(version), setMaxVersionNum = void 0;
                            if ((setMaxVersionNum = Array.isArray(setMaxVersion) ? function (versions, majorVersion) {
                                for (var i = 0; i < versions.length; i++) {
                                    var v = getVersion(versions[i]);
                                    if (v.major == majorVersion)
                                        return v;
                                }
                                return {
                                    major: 0,
                                    minor: 0,
                                    patch: 0
                                };
                            }(setMaxVersion, minVersionNum.major) : getVersion(setMaxVersion)).major > 0) {
                                if (setMaxVersionNum.major > minVersionNum.major)
                                    return !0;
                                if (setMaxVersionNum.major == minVersionNum.major && setMaxVersionNum.minor > minVersionNum.minor)
                                    return !0;
                                if (setMaxVersionNum.major == minVersionNum.major && setMaxVersionNum.minor == minVersionNum.minor && setMaxVersionNum.patch >= minVersionNum.patch)
                                    return !0;
                            }
                        }
                        catch (e) {
                            return !1;
                        }
                    }
                    return !1;
                }
            };
        }).call(this, __webpack_require__(4));
    }, function (module, exports) {
        var g;
        g = function () {
            return this;
        }();
        try {
            g = g || new Function("return this")();
        }
        catch (e) {
            "object" == typeof window && (g = window);
        }
        module.exports = g;
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.multiGet = exports.multiRemove = exports.multiSet = exports.getAllKeys = exports.clear = exports.removeItem = exports.setItem = exports.getItem = void 0;
        var prefix = "_Office_AsyncStorage_";
        function ensureFreshLocalStorage() {
            window.localStorage.setItem("_Office_AsyncStorage_|_unusedKey_", null), window.localStorage.removeItem("_Office_AsyncStorage_|_unusedKey_");
        }
        function performAction(action, callback) {
            return void 0 === callback && (callback = function () { }), new Promise((function (resolve, reject) {
                try {
                    ensureFreshLocalStorage(), action(), callback(null), resolve();
                }
                catch (e) {
                    callback(e), reject(e);
                }
            }));
        }
        function performActionAndReturnResult(action, callback) {
            return void 0 === callback && (callback = function () { }), new Promise((function (resolve, reject) {
                try {
                    ensureFreshLocalStorage();
                    var result = action();
                    callback(null, result), resolve(result);
                }
                catch (e) {
                    callback(e, null), reject(e);
                }
            }));
        }
        function performMultiAction(collection, action, callback) {
            return void 0 === callback && (callback = function () { }), new Promise((function (resolve, reject) {
                var errors = [];
                try {
                    ensureFreshLocalStorage();
                }
                catch (e) {
                    errors.push(e);
                }
                collection.forEach((function (item) {
                    try {
                        action(item);
                    }
                    catch (e) {
                        errors.push(e);
                    }
                })), callback(errors), errors.length > 0 ? reject(errors) : resolve();
            }));
        }
        exports.getItem = function (key, callback) {
            return performActionAndReturnResult((function () {
                return window.localStorage.getItem(prefix + key);
            }), callback);
        }, exports.setItem = function (key, value, callback) {
            return performAction((function () {
                return window.localStorage.setItem(prefix + key, value);
            }), callback);
        }, exports.removeItem = function (key, callback) {
            return performAction((function () {
                return window.localStorage.removeItem(prefix + key);
            }), callback);
        }, exports.clear = function (callback) {
            return performAction((function () {
                Object.keys(window.localStorage).filter((function (fullKey) {
                    return 0 === fullKey.indexOf(prefix);
                })).forEach((function (fullKey) {
                    return window.localStorage.removeItem(fullKey);
                }));
            }), callback);
        }, exports.getAllKeys = function (callback) {
            return performActionAndReturnResult((function () {
                return Object.keys(window.localStorage).filter((function (fullKey) {
                    return 0 === fullKey.indexOf(prefix);
                })).map((function (fullKey) {
                    return fullKey.substr(prefix.length);
                }));
            }), callback);
        }, exports.multiSet = function (keyValuePairs, callback) {
            return performMultiAction(keyValuePairs, (function (_a) {
                var key = _a[0], value = _a[1];
                return window.localStorage.setItem(prefix + key, value);
            }), callback);
        }, exports.multiRemove = function (keys, callback) {
            return performMultiAction(keys, (function (key) {
                return window.localStorage.removeItem(prefix + key);
            }), callback);
        }, exports.multiGet = function (keys, callback) {
            return new Promise((function (resolve, reject) {
                callback || (callback = function () { });
                var errors = [], results = keys.map((function (key) {
                    try {
                        return [key, window.localStorage.getItem(prefix + key)];
                    }
                    catch (e) {
                        errors.push(e);
                    }
                })).filter((function (pair) {
                    return pair;
                }));
                errors.length > 0 ? (callback(errors, results), reject(errors)) : (callback(null, results),
                    resolve(results));
            }));
        };
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.displayWebDialog = exports.Dialog = void 0;
        var OfficeExtension = __webpack_require__(0), Dialog = function () {
            function Dialog(_dialog) {
                this._dialog = _dialog;
            }
            return Dialog.prototype.close = function () {
                return this._dialog.close(), OfficeExtension.CoreUtility.Promise.resolve();
            }, Dialog;
        }();
        exports.Dialog = Dialog, exports.displayWebDialog = function (url, options) {
            return new OfficeExtension.CoreUtility.Promise((function (resolve, reject) {
                if (options.width && options.height && (!isInt(options.width) || !isInt(options.height)))
                    throw new OfficeExtension.Error({
                        code: "InvalidArgument",
                        message: 'Dimensions must be "number%" or number.'
                    });
                var dialog, dialogOptions = {
                    width: options.width ? parseInt(options.width, 10) : 50,
                    height: options.height ? parseInt(options.height, 10) : 50,
                    displayInIframe: options.displayInIFrame || !1
                };
                function messageHandler(args) {
                    options.onMessage && options.onMessage(args.message, dialog, args.origin);
                }
                function eventHandler(args) {
                    12006 === args.error ? options.onClose && options.onClose() : options.onRuntimeError && options.onRuntimeError(new OfficeExtension.Error(lookupErrorCodeAndMessage(args.error)), dialog);
                }
                function isInt(value) {
                    return /^(\-|\+)?([0-9]+)%?$/.test(value);
                }
                function lookupErrorCodeAndMessage(internalCode) {
                    var _a, table = ((_a = {})[12002] = {
                        code: "InvalidUrl",
                        message: "Cannot load URL, no such page or bad URL syntax."
                    }, _a[12003] = {
                        code: "InvalidUrl",
                        message: "HTTPS is required."
                    }, _a[12004] = {
                        code: "Untrusted",
                        message: "Domain is not trusted."
                    }, _a[12005] = {
                        code: "InvalidUrl",
                        message: "HTTPS is required."
                    }, _a[12007] = {
                        code: "FailedToOpen",
                        message: "Another dialog is already opened."
                    }, _a);
                    return table[internalCode] ? table[internalCode] : {
                        code: "Unknown",
                        message: "An unknown error has occured"
                    };
                }
                Office.context.ui.displayDialogAsync(url, dialogOptions, (function (asyncResult) {
                    "failed" === asyncResult.status ? reject(new OfficeExtension.Error(lookupErrorCodeAndMessage(asyncResult.error.code))) : ((dialog = asyncResult.value).addEventHandler(Office.EventType.DialogMessageReceived, messageHandler),
                        dialog.addEventHandler(Office.EventType.DialogEventReceived, eventHandler), resolve(new Dialog(dialog)));
                }));
            }));
        };
    }, function (module, exports, __webpack_require__) {
        "use strict";
        var extendStatics, __extends = this && this.__extends || (extendStatics = function (d, b) {
            return (extendStatics = Object.setPrototypeOf || {
                __proto__: []
            } instanceof Array && function (d, b) {
                d.__proto__ = b;
            } || function (d, b) {
                for (var p in b)
                    b.hasOwnProperty(p) && (d[p] = b[p]);
            })(d, b);
        }, function (d, b) {
            function __() {
                this.constructor = d;
            }
            extendStatics(d, b), d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype,
                new __);
        });
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.ErrorCodes = exports.PersistentKvStorageService = exports.storage = exports.AsyncStorage = void 0;
        var OfficeExtension = __webpack_require__(0), _createTopLevelServiceObject = (OfficeExtension.BatchApiHelper.createPropertyObject,
            OfficeExtension.BatchApiHelper.createMethodObject, OfficeExtension.BatchApiHelper.createIndexerObject,
            OfficeExtension.BatchApiHelper.createRootServiceObject, OfficeExtension.BatchApiHelper.createTopLevelServiceObject), _invokeMethod = (OfficeExtension.BatchApiHelper.createChildItemObject,
            OfficeExtension.BatchApiHelper.invokeMethod), _isNullOrUndefined = (OfficeExtension.BatchApiHelper.invokeEnsureUnchanged,
            OfficeExtension.BatchApiHelper.invokeSetProperty, OfficeExtension.Utility.isNullOrUndefined), _toJson = (OfficeExtension.Utility.isUndefined,
            OfficeExtension.Utility.throwIfNotLoaded, OfficeExtension.Utility.throwIfApiNotSupported,
            OfficeExtension.Utility.load, OfficeExtension.Utility.retrieve, OfficeExtension.Utility.toJson), _fixObjectPathIfNecessary = OfficeExtension.Utility.fixObjectPathIfNecessary, _processRetrieveResult = (OfficeExtension.Utility._handleNavigationPropertyResults,
            OfficeExtension.Utility.adjustToDateTime, OfficeExtension.Utility.processRetrieveResult);
        OfficeExtension.Utility.setMockData, OfficeExtension.CommonUtility.calculateApiFlags;
        function callPersistentKvStorageManager(nativeCall, getValueOnSuccess) {
            return new OfficeExtension.CoreUtility.Promise((function (resolve, reject) {
                var storageManager = PersistentKvStorageManager.getInstance(), invokeId = storageManager.setCallBack((function (result, error) {
                    if (error)
                        reject(error);
                    else {
                        var value = getValueOnSuccess(result);
                        resolve(value);
                    }
                }));
                storageManager.ctx.sync().then((function () {
                    var storageService = storageManager.getPersistentKvStorageService();
                    return nativeCall(storageService, invokeId), storageManager.ctx.sync();
                }))["catch"]((function (e) {
                    reject(e);
                }));
            }));
        }
        function callStorageManager(nativeCall, getValueOnSuccess, callback) {
            return new OfficeExtension.CoreUtility.Promise((function (resolve, reject) {
                var storageManager = PersistentKvStorageManager.getInstance(), invokeId = storageManager.setCallBack((function (result, error) {
                    if (error)
                        return callback && callback(error), void reject(error);
                    var value = getValueOnSuccess(result);
                    callback && callback(null, value), resolve(value);
                }));
                storageManager.ctx.sync().then((function () {
                    var storageService = storageManager.getPersistentKvStorageService();
                    return nativeCall(storageService, invokeId), storageManager.ctx.sync();
                }))["catch"]((function (e) {
                    reject(e);
                }));
            }));
        }
        exports.AsyncStorage = {
            getItem: function (key, callback) {
                return callStorageManager((function (storage, invokeId) {
                    return storage.multiGet(invokeId, JSON.stringify([key]));
                }), (function (result) {
                    var parsedResult = JSON.parse(result);
                    return parsedResult && parsedResult[0] && parsedResult[0][1] ? parsedResult[0][1] : null;
                }), callback);
            },
            setItem: function (key, value, callback) {
                return callStorageManager((function (storage, invokeId) {
                    return storage.multiSet(invokeId, JSON.stringify([[key, value]]));
                }), (function () {
                    return null;
                }), callback);
            },
            removeItem: function (key, callback) {
                return callStorageManager((function (storage, invokeId) {
                    return storage.multiRemove(invokeId, JSON.stringify([key]));
                }), (function () {
                    return null;
                }), callback);
            },
            multiGet: function (keys, callback) {
                return callStorageManager((function (storage, invokeId) {
                    return storage.multiGet(invokeId, JSON.stringify(keys));
                }), (function (result) {
                    var keyValues = JSON.parse(result), map = {};
                    return keyValues && keyValues.forEach((function (_a) {
                        var key = _a[0], value = _a[1];
                        return map[key] = value, value;
                    })), keys.map((function (key) {
                        return [key, map[key] ? map[key] : null];
                    }));
                }), callback);
            },
            multiSet: function (keyValuePairs, callback) {
                return callStorageManager((function (storage, invokeId) {
                    return storage.multiSet(invokeId, JSON.stringify(keyValuePairs));
                }), (function () {
                    return null;
                }), callback);
            },
            multiRemove: function (keys, callback) {
                return callStorageManager((function (storage, invokeId) {
                    return storage.multiRemove(invokeId, JSON.stringify(keys));
                }), (function () {
                    return null;
                }), callback);
            },
            getAllKeys: function (callback) {
                return callStorageManager((function (storage, invokeId) {
                    return storage.getAllKeys(invokeId);
                }), (function (result) {
                    return JSON.parse(result);
                }), callback);
            },
            clear: function (callback) {
                return callStorageManager((function (storage, invokeId) {
                    return storage.clear(invokeId);
                }), (function () {
                    return null;
                }), callback);
            }
        }, exports.storage = {
            getItem: function (key) {
                return callPersistentKvStorageManager((function (perStorage, invokeId) {
                    return perStorage.multiGet(invokeId, JSON.stringify([key]));
                }), (function (result) {
                    var parsedResult = JSON.parse(result);
                    return parsedResult && parsedResult[0] && parsedResult[0][1] ? parsedResult[0][1] : null;
                }));
            },
            setItem: function (key, value) {
                return callPersistentKvStorageManager((function (perStorage, invokeId) {
                    return perStorage.multiSet(invokeId, JSON.stringify([[key, value]]));
                }), (function () {
                    return null;
                }));
            },
            removeItem: function (key) {
                return callPersistentKvStorageManager((function (perStorage, invokeId) {
                    return perStorage.multiRemove(invokeId, JSON.stringify([key]));
                }), (function () {
                    return null;
                }));
            },
            getItems: function (keys) {
                return callPersistentKvStorageManager((function (perStorage, invokeId) {
                    return perStorage.multiGet(invokeId, JSON.stringify(keys));
                }), (function (result) {
                    var keyValues = JSON.parse(result), map = {};
                    return keys.forEach((function (k) {
                        map[k] = null;
                    })), keyValues && keyValues.forEach((function (_a) {
                        var key = _a[0], value = _a[1];
                        return map[key] = value, value;
                    })), map;
                }));
            },
            setItems: function (keyValues) {
                var keyValuePairs = [];
                for (var key in keyValues)
                    keyValues.hasOwnProperty(key) && keyValuePairs.push([key, keyValues[key]]);
                return callPersistentKvStorageManager((function (storage, invokeId) {
                    return storage.multiSet(invokeId, JSON.stringify(keyValuePairs));
                }), (function () {
                    return null;
                }));
            },
            removeItems: function (keys) {
                return callPersistentKvStorageManager((function (perStorage, invokeId) {
                    return perStorage.multiRemove(invokeId, JSON.stringify(keys));
                }), (function () {
                    return null;
                }));
            },
            getKeys: function () {
                return callPersistentKvStorageManager((function (perStorage, invokeId) {
                    return perStorage.getAllKeys(invokeId);
                }), (function (result) {
                    return JSON.parse(result);
                }));
            }
        };
        var PersistentKvStorageManager = function () {
            function PersistentKvStorageManager() {
                var _this = this;
                this._invokeId = 0, this._callDict = {}, this.ctx = new OfficeExtension.ClientRequestContext,
                    this._perkvstorService = PersistentKvStorageService.newObject(this.ctx), this._eventResult = this._perkvstorService.onPersistentStorageMessage.add((function (args) {
                    OfficeExtension.Utility.log("persistentKvStoragegMessageHandler:" + JSON.stringify(args));
                    var callback = _this._callDict[args.invokeId];
                    callback && (callback(args.message, args.error), delete _this._callDict[args.invokeId]);
                }));
            }
            return PersistentKvStorageManager.getInstance = function () {
                return void 0 === PersistentKvStorageManager.instance ? PersistentKvStorageManager.instance = new PersistentKvStorageManager : PersistentKvStorageManager.instance._perkvstorService = PersistentKvStorageService.newObject(PersistentKvStorageManager.instance.ctx),
                    PersistentKvStorageManager.instance;
            }, PersistentKvStorageManager.prototype.getPersistentKvStorageService = function () {
                return this._perkvstorService;
            }, PersistentKvStorageManager.prototype.getCallBack = function (callId) {
                return this._callDict[callId];
            }, PersistentKvStorageManager.prototype.setCallBack = function (callback) {
                var id = this._invokeId;
                return this._callDict[this._invokeId++] = callback, id;
            }, PersistentKvStorageManager;
        }(), PersistentKvStorageService = function (_super) {
            function PersistentKvStorageService() {
                return null !== _super && _super.apply(this, arguments) || this;
            }
            return __extends(PersistentKvStorageService, _super), Object.defineProperty(PersistentKvStorageService.prototype, "_className", {
                get: function () {
                    return "PersistentKvStorageService";
                },
                enumerable: !1,
                configurable: !0
            }), PersistentKvStorageService.prototype.clear = function (id) {
                _invokeMethod(this, "Clear", 1, [id], 4, 0);
            }, PersistentKvStorageService.prototype.getAllKeys = function (id) {
                _invokeMethod(this, "GetAllKeys", 1, [id], 4, 0);
            }, PersistentKvStorageService.prototype.multiGet = function (id, jsonKeys) {
                _invokeMethod(this, "MultiGet", 1, [id, jsonKeys], 4, 0);
            }, PersistentKvStorageService.prototype.multiRemove = function (id, jsonKeys) {
                _invokeMethod(this, "MultiRemove", 1, [id, jsonKeys], 4, 0);
            }, PersistentKvStorageService.prototype.multiSet = function (id, jsonKeyValue) {
                _invokeMethod(this, "MultiSet", 1, [id, jsonKeyValue], 4, 0);
            }, PersistentKvStorageService.prototype._handleResult = function (value) {
                (_super.prototype._handleResult.call(this, value), _isNullOrUndefined(value)) || _fixObjectPathIfNecessary(this, value);
            }, PersistentKvStorageService.prototype._handleRetrieveResult = function (value, result) {
                _super.prototype._handleRetrieveResult.call(this, value, result), _processRetrieveResult(this, value, result);
            }, PersistentKvStorageService.newObject = function (context) {
                return _createTopLevelServiceObject(PersistentKvStorageService, context, "Microsoft.PersistentKvStorage.PersistentKvStorageService", !1, 4);
            }, Object.defineProperty(PersistentKvStorageService.prototype, "onPersistentStorageMessage", {
                get: function () {
                    return this.m_persistentStorageMessage || (this.m_persistentStorageMessage = new OfficeExtension.GenericEventHandlers(this.context, this, "PersistentStorageMessage", {
                        eventType: 65537,
                        registerFunc: function () { },
                        unregisterFunc: function () { },
                        getTargetIdFunc: function () {
                            return null;
                        },
                        eventArgsTransformFunc: function (args) {
                            var perkvstorArgs, internalCode, _a, table;
                            try {
                                var parsedMessage = JSON.parse(args.message), hr = parseInt(parsedMessage.errorCode), error = 0 != hr ? new OfficeExtension.Error((internalCode = hr,
                                    (_a = {})[16389] = {
                                        code: "GenericException",
                                        message: "Unknown error."
                                    }, _a[65535] = {
                                    code: "Unexcepted",
                                    message: "Catastrophic failure."
                                }, _a[14] = {
                                    code: "OutOfMemory",
                                    message: "Ran out of memory."
                                }, _a[87] = {
                                    code: "InvalidArg",
                                    message: "One or more arguments are invalid."
                                }, _a[16385] = {
                                    code: "NotImplemented",
                                    message: "Not implemented."
                                }, _a[6] = {
                                    code: "BadHandle",
                                    message: "File Handle is not Set."
                                }, _a[5] = {
                                    code: "AccessDenied",
                                    message: "Can't read the Storage File."
                                }, (table = _a)[internalCode] ? table[internalCode] : {
                                    code: "Unknown",
                                    message: "An unknown error has occured"
                                })) : null;
                                perkvstorArgs = {
                                    invokeId: parsedMessage.invokeId,
                                    message: parsedMessage.message,
                                    error: error
                                };
                            }
                            catch (e) {
                                perkvstorArgs = {
                                    invokeId: -1,
                                    message: e.message,
                                    error: new OfficeExtension.Error({
                                        code: "GenericException",
                                        message: "Unknown error"
                                    })
                                };
                            }
                            return OfficeExtension.Utility._createPromiseFromResult(perkvstorArgs);
                        }
                    })), this.m_persistentStorageMessage;
                },
                enumerable: !1,
                configurable: !0
            }), PersistentKvStorageService.prototype.toJSON = function () {
                return _toJson(this, {}, {});
            }, PersistentKvStorageService;
        }(OfficeExtension.ClientObject);
        exports.PersistentKvStorageService = PersistentKvStorageService, function (ErrorCodes) {
            ErrorCodes.generalException = "GeneralException";
        }(exports.ErrorCodes || (exports.ErrorCodes = {}));
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.storage = void 0;
        var prefix = "_OfficeRuntime_Storage_";
        function ensureFreshLocalStorage() {
            window.localStorage.setItem("_OfficeRuntime_Storage_|_unusedKey_", null), window.localStorage.removeItem("_OfficeRuntime_Storage_|_unusedKey_");
        }
        function performAction(action) {
            return new Promise((function (resolve, reject) {
                try {
                    ensureFreshLocalStorage(), action(), resolve();
                }
                catch (e) {
                    reject(e);
                }
            }));
        }
        function performActionAndReturnResult(action) {
            return new Promise((function (resolve, reject) {
                try {
                    ensureFreshLocalStorage(), resolve(action());
                }
                catch (e) {
                    reject(e);
                }
            }));
        }
        function performMultiAction(collection, action) {
            return new Promise((function (resolve, reject) {
                var errors = [];
                try {
                    ensureFreshLocalStorage();
                }
                catch (e) {
                    errors.push(e);
                }
                for (var key in collection)
                    if (collection.hasOwnProperty(key) || Array.isArray(collection))
                        try {
                            Array.isArray(collection) ? action(collection[key]) : action(key);
                        }
                        catch (e) {
                            errors.push(e);
                        }
                errors.length > 0 ? reject(new Error("Unknown error.")) : resolve();
            }));
        }
        exports.storage = {
            getItem: function (key) {
                return performActionAndReturnResult((function () {
                    return window.localStorage.getItem(prefix + key);
                }));
            },
            setItem: function (key, value) {
                return performAction((function () {
                    return window.localStorage.setItem(prefix + key, value);
                }));
            },
            removeItem: function (key) {
                return performAction((function () {
                    return window.localStorage.removeItem(prefix + key);
                }));
            },
            getItems: function (keys) {
                return new Promise((function (resolve, reject) {
                    var result = {}, errors = [];
                    try {
                        ensureFreshLocalStorage();
                    }
                    catch (e) {
                        reject(e);
                    }
                    keys.forEach((function (key) {
                        try {
                            var value = window.localStorage.getItem(prefix + key);
                            result[key] = value || null;
                        }
                        catch (e) {
                            errors.push(e);
                        }
                    })), errors.length > 0 ? reject(new Error("Unknown error.")) : resolve(result);
                }));
            },
            setItems: function (keyValues) {
                return performMultiAction(keyValues, (function (key) {
                    return window.localStorage.setItem(prefix + key, keyValues[key]);
                }));
            },
            removeItems: function (keys) {
                return performMultiAction(keys, (function (key) {
                    window.localStorage.removeItem(prefix + key);
                }));
            },
            getKeys: function () {
                return performActionAndReturnResult((function () {
                    return Object.keys(window.localStorage).filter((function (fullKey) {
                        return 0 === fullKey.indexOf(prefix);
                    })).map((function (fullKey) {
                        return fullKey.substr(prefix.length);
                    }));
                }));
            }
        };
    }, function (module, exports, __webpack_require__) {
        "use strict";
        var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
            return new (P || (P = Promise))((function (resolve, reject) {
                function fulfilled(value) {
                    try {
                        step(generator.next(value));
                    }
                    catch (e) {
                        reject(e);
                    }
                }
                function rejected(value) {
                    try {
                        step(generator["throw"](value));
                    }
                    catch (e) {
                        reject(e);
                    }
                }
                function step(result) {
                    var value;
                    result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function (resolve) {
                        resolve(value);
                    }))).then(fulfilled, rejected);
                }
                step((generator = generator.apply(thisArg, _arguments || [])).next());
            }));
        }, __generator = this && this.__generator || function (thisArg, body) {
            var f, y, t, g, _ = {
                label: 0,
                sent: function () {
                    if (1 & t[0])
                        throw t[1];
                    return t[1];
                },
                trys: [],
                ops: []
            };
            return g = {
                next: verb(0),
                "throw": verb(1),
                "return": verb(2)
            }, "function" == typeof Symbol && (g[Symbol.iterator] = function () {
                return this;
            }), g;
            function verb(n) {
                return function (v) {
                    return function (op) {
                        if (f)
                            throw new TypeError("Generator is already executing.");
                        for (; _;)
                            try {
                                if (f = 1, y && (t = 2 & op[0] ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y),
                                    0) : y.next) && !(t = t.call(y, op[1])).done)
                                    return t;
                                switch (y = 0, t && (op = [2 & op[0], t.value]), op[0]) {
                                    case 0:
                                    case 1:
                                        t = op;
                                        break;
                                    case 4:
                                        return _.label++, {
                                            value: op[1],
                                            done: !1
                                        };
                                    case 5:
                                        _.label++, y = op[1], op = [0];
                                        continue;
                                    case 7:
                                        op = _.ops.pop(), _.trys.pop();
                                        continue;
                                    default:
                                        if (!(t = _.trys, (t = t.length > 0 && t[t.length - 1]) || 6 !== op[0] && 2 !== op[0])) {
                                            _ = 0;
                                            continue;
                                        }
                                        if (3 === op[0] && (!t || op[1] > t[0] && op[1] < t[3])) {
                                            _.label = op[1];
                                            break;
                                        }
                                        if (6 === op[0] && _.label < t[1]) {
                                            _.label = t[1], t = op;
                                            break;
                                        }
                                        if (t && _.label < t[2]) {
                                            _.label = t[2], _.ops.push(op);
                                            break;
                                        }
                                        t[2] && _.ops.pop(), _.trys.pop();
                                        continue;
                                }
                                op = body.call(thisArg, _);
                            }
                            catch (e) {
                                op = [6, e], y = 0;
                            }
                            finally {
                                f = t = 0;
                            }
                        if (5 & op[0])
                            throw op[1];
                        return {
                            value: op[0] ? op[1] : void 0,
                            done: !0
                        };
                    }([n, v]);
                };
            }
        };
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.experimentation = void 0;
        var ExperimentationNative = function () {
            function ExperimentationNative() { }
            return ExperimentationNative.prototype.getBooleanFeatureGate = function (featureName, defaultValue) {
                try {
                    var featureGateValue = Microsoft.Office.WebExtension.FeatureGates[featureName];
                    return "true" === featureGateValue.toString().toLowerCase() || !0 === featureGateValue;
                }
                catch (error) {
                    return defaultValue;
                }
            }, ExperimentationNative.prototype.getIntFeatureGate = function (featureName, defaultValue) {
                try {
                    var featureGateValue = parseInt(Microsoft.Office.WebExtension.FeatureGates[featureName]);
                    return isNaN(featureGateValue) ? defaultValue : featureGateValue;
                }
                catch (error) {
                    return defaultValue;
                }
            }, ExperimentationNative.prototype.getStringFeatureGate = function (featureName, defaultValue) {
                try {
                    var featureGateValue = Microsoft.Office.WebExtension.FeatureGates[featureName];
                    return null == featureGateValue ? defaultValue : featureGateValue;
                }
                catch (error) {
                    return defaultValue;
                }
            }, ExperimentationNative.prototype.getChangeGate = function (changeGateName) {
                return this.getBooleanFeatureGate(changeGateName, !0);
            }, ExperimentationNative.prototype.getBooleanFeatureGateAsync = function (featureName, defaultValue) {
                return __awaiter(this, void 0, void 0, (function () {
                    var context, feature;
                    return __generator(this, (function (_b) {
                        switch (_b.label) {
                            case 0:
                                return _b.trys.push([0, 2, , 3]), context = this.getRequestContext(), feature = context.flighting.getFeature(featureName, "Boolean", defaultValue),
                                    context.load(feature), [4, context.sync()];
                            case 1:
                                return _b.sent(), [2, feature.value];
                            case 2:
                                return _b.sent(), [2, Promise.resolve(defaultValue)];
                            case 3:
                                return [2];
                        }
                    }));
                }));
            }, ExperimentationNative.prototype.getStringFeatureGateAsync = function (featureName, defaultValue) {
                return __awaiter(this, void 0, void 0, (function () {
                    var context, feature;
                    return __generator(this, (function (_b) {
                        switch (_b.label) {
                            case 0:
                                return _b.trys.push([0, 2, , 3]), context = this.getRequestContext(), feature = context.flighting.getFeature(featureName, "String", defaultValue),
                                    context.load(feature), [4, context.sync()];
                            case 1:
                                return _b.sent(), [2, feature.value];
                            case 2:
                                return _b.sent(), [2, Promise.resolve(defaultValue)];
                            case 3:
                                return [2];
                        }
                    }));
                }));
            }, ExperimentationNative.prototype.getIntFeatureGateAsync = function (featureName, defaultValue) {
                return __awaiter(this, void 0, void 0, (function () {
                    var context, feature;
                    return __generator(this, (function (_b) {
                        switch (_b.label) {
                            case 0:
                                return _b.trys.push([0, 2, , 3]), context = this.getRequestContext(), feature = context.flighting.getFeature(featureName, "Integer", defaultValue),
                                    context.load(feature), [4, context.sync()];
                            case 1:
                                return _b.sent(), [2, feature.value];
                            case 2:
                                return _b.sent(), [2, Promise.resolve(defaultValue)];
                            case 3:
                                return [2];
                        }
                    }));
                }));
            }, ExperimentationNative.prototype.getRequestContext = function () {
                var ctx;
                if (Office.context.platform !== Office.PlatformType.OfficeOnline) {
                    switch (Office.context.host) {
                        case Office.HostType.Excel:
                            ctx = new Excel.RequestContext;
                            break;
                        case Office.HostType.OneNote:
                            ctx = new OneNote.RequestContext;
                            break;
                        case Office.HostType.PowerPoint:
                            ctx = new PowerPoint.RequestContext;
                            break;
                        case Office.HostType.Word:
                            ctx = new Word.RequestContext;
                            break;
                        default:
                            throw new Error("Unknown Application " + Office.context.host);
                    }
                    return ctx;
                }
            }, ExperimentationNative;
        }();
        exports.experimentation = new ExperimentationNative;
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.Message = void 0;
        var Message_1 = __webpack_require__(11);
        Object.defineProperty(exports, "Message", {
            enumerable: !0,
            get: function () {
                return Message_1.Message;
            }
        });
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.Message = void 0;
        var ListenerManager_1 = __webpack_require__(12), Message = function () {
            function Message() {
                this.listeners = {};
            }
            return Message.prototype.on = function (eventName, listener) {
                return this.add(eventName, listener), new Promise((function (resolve) {
                    resolve();
                }));
            }, Message.prototype.off = function (eventName, listener) {
                return this.remove(eventName, listener), new Promise((function (resolve) {
                    resolve();
                }));
            }, Message.prototype.emit = function (eventName, message) {
                return this.send(eventName, message), new Promise((function (resolve) {
                    resolve();
                }));
            }, Object.defineProperty(Message, "instance", {
                get: function () {
                    return Message.singleton || (Message.singleton = new Message), this.singleton;
                },
                enumerable: !1,
                configurable: !0
            }), Message.prototype.setupReceive = function () {
                Office && Office.context && Office.context.messaging && !Office.context.messaging.onMessage && (Office.context.messaging.onMessage = this.receiveMessage.bind(this));
            }, Message.prototype.add = function (eventName, listener) {
                this.listeners.hasOwnProperty(eventName) || (this.listeners[eventName] = new ListenerManager_1.ListenerManager,
                    this.setupReceive()), this.listeners[eventName].add(listener);
            }, Message.prototype.remove = function (eventName, listener) {
                this.listeners.hasOwnProperty(eventName) && (listener ? this.listeners[eventName].remove(listener) : delete this.listeners[eventName]);
            }, Message.prototype.send = function (eventName, message) {
                var wrapped = {
                    eventName: eventName,
                    message: message
                };
                Office && Office.context && Office.context.messaging && Office.context.messaging.sendMessage && Office.context.messaging.sendMessage(wrapped);
            }, Message.prototype.receiveMessage = function (wrapped) {
                var eventName = wrapped.eventName, message = wrapped.message;
                this.listeners.hasOwnProperty(eventName) && this.listeners[eventName].call(message);
            }, Message;
        }();
        exports.Message = Message;
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.ListenerManager = void 0;
        var ListenerManager = function () {
            function ListenerManager() {
                this.listeners = [];
            }
            return ListenerManager.prototype.add = function (listener) {
                this.listeners.push(listener);
            }, ListenerManager.prototype.remove = function (listener) {
                var index = this.listeners.lastIndexOf(listener);
                -1 !== index && this.listeners.splice(index, 1);
            }, ListenerManager.prototype.call = function (message) {
                this.listeners.forEach((function (listener) {
                    return listener(message);
                }));
            }, ListenerManager;
        }();
        exports.ListenerManager = ListenerManager;
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.Ribbon = exports.ui = void 0, exports.ui = {
            getRibbon: function () {
                return new Promise((function (resolve, reject) {
                    resolve(new Ribbon);
                }));
            }
        };
        var Ribbon = function () {
            function Ribbon() {
                this.requestContext = new OfficeCore.RequestContext, OSF.WebAuth && "web" == OSF._OfficeAppFactory.getHostInfo().hostPlatform && (this.requestContext._customData = "WacPartition");
            }
            return Ribbon.prototype.requestUpdate = function (input) {
                var ribbon = this.requestContext.ribbon;
                return input.tabs.filter((function (tab) {
                    return !!tab.id;
                })).forEach((function (tab) {
                    var ribbonTab = ribbon.getTab(tab.id);
                    void 0 !== tab.visible && null !== tab.visible && ribbonTab.setVisibility(tab.visible),
                        tab.controls.filter((function (control) {
                            return !!control.id;
                        })).forEach((function (control) {
                            var ribbonControl = ribbon.getButton(control.id);
                            void 0 !== control.enabled && null !== control.enabled && (ribbonControl.enabled = control.enabled);
                        }));
                })), this.requestContext.sync();
            }, Ribbon;
        }();
        exports.Ribbon = Ribbon;
    }, function (module, exports, __webpack_require__) {
        "use strict";
        Object.defineProperty(exports, "__esModule", {
            value: !0
        }), exports.Auth = void 0;
        var OfficeExtension = __webpack_require__(0), Auth = function () {
            function Auth() { }
            return Auth.prototype.getAccessToken = function (params) {
                return new OfficeExtension.CoreUtility.Promise((function (resolve, reject) {
                    try {
                        Office.context.auth.getAccessTokenAsync(params || {}, (function (result) {
                            "succeeded" === result.status ? resolve(result.value) : reject(result.error);
                        }));
                    }
                    catch (error) {
                        reject(error);
                    }
                }));
            }, Object.defineProperty(Auth, "instance", {
                get: function () {
                    return Auth.singleton || (Auth.singleton = new Auth), Auth.singleton;
                },
                enumerable: !1,
                configurable: !0
            }), Auth;
        }();
        exports.Auth = Auth;
    }]);
window.OfficeRuntime = window._OfficeRuntimeNative;
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
var OfficeRuntime = typeof OfficeRuntime !== "undefined" ? OfficeRuntime : (_a = window) === null || _a === void 0 ? void 0 : _a.OfficeRuntime;
if (typeof Office !== "undefined") {
    Office.storage = Office.storage || ((_b = OfficeRuntime) === null || _b === void 0 ? void 0 : _b.storage);
    Office.auth = Office.auth || ((_c = OfficeRuntime) === null || _c === void 0 ? void 0 : _c.auth);
    Office.getAccessToken = Office.getAccessToken || ((_e = (_d = OfficeRuntime) === null || _d === void 0 ? void 0 : _d.auth) === null || _e === void 0 ? void 0 : _e.getAccessToken);
    Office.addin = Office.addin || ((_f = OfficeRuntime) === null || _f === void 0 ? void 0 : _f.addin);
    Office.isSetSupported = Office.isSetSupported || ((_h = (_g = OfficeRuntime) === null || _g === void 0 ? void 0 : _g.apiInformation) === null || _h === void 0 ? void 0 : _h.isSetSupported);
    Office.license = Office.license || ((_j = OfficeRuntime) === null || _j === void 0 ? void 0 : _j.license);
    Office.message = Office.message || ((_k = OfficeRuntime) === null || _k === void 0 ? void 0 : _k.message);
}
if (typeof OSFPerformance !== "undefined") {
    OSFPerformance.hostInitializationEnd = OSFPerformance.now();
}
OfficeExtension.Utility._doApiNotSupportedCheck = true;
